From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8005 invoked by alias); 23 Apr 2002 16:06:04 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 7968 invoked by uid 71); 23 Apr 2002 16:06:03 -0000 Resent-Date: 23 Apr 2002 16:06:03 -0000 Resent-Message-ID: <20020423160603.7962.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, ben.dorman@comcast.net Received:(qmail 7026 invoked by uid 61); 23 Apr 2002 16:01:56 -0000 Message-Id:<20020423160156.7025.qmail@sources.redhat.com> Date: Tue, 23 Apr 2002 09:06:00 -0000 From: ben.dorman@comcast.net Reply-To: ben.dorman@comcast.net To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/6427: compiler generates incorrect call to compiler generated copy ctor X-SW-Source: 2002-04/txt/msg01208.txt.bz2 List-Id: >Number: 6427 >Category: c++ >Synopsis: compiler generates incorrect call to compiler generated copy ctor >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Tue Apr 23 09:06:02 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Ben Dorman >Release: 3.0.3 >Organization: >Environment: gnu-linux-i686 kernel 2.4.2-2 >Description: [Report submitted earlier through gcc bug which generated incorrect e-mail address. ] Following function generates the error: void FITS::open (RWmode mode) { int status=0; status = ffopen(&m_FITSImpl->fptr(), m_FITSImpl->name().c_str(), mode, &status); const std::string diag (m_FITSImpl->name()); bool silent = s_verboseMode; if (status != 0) { if (status == 104) throw CantOpen(diag,silent); else throw FitsError(status); } } CantOpen is declared as follows, with explicit keyword added to demonstrate problem (removing copy ctor declaration restores compilation but apparently does not change the problem, according to ddd traces). # 677 "FITS.h" class CantOpen : public FitsException { public: CantOpen (const string& diag, bool silent = false); explicit CantOpen(const CantOpen&); protected: private: private: }; Compilation of FITS.cxx yields: c++ -DHAVE_CONFIG_H -I. -I. -I. -I./.. -I/home/dorman/cpp/include -g -v -save-temps -Wall -c FITS.cxx Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/specs Configured with: ../gcc-3.0.3/configure --enable-threads --prefix=/usr Thread model: posix gcc version 3.0.3 /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/cpp0 -lang-c++ -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS -D__GXX_ABI_VERSION=100 -v -I. -I. -I. -I./.. -I/home/dorman/cpp/include -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=3 -D__ELF__ -Dunix -Dlinux -D__ELF__ -D__unix__ -D__linux__ -D__unix -D__linux -Asystem=posix -D__NO_INLINE__ -D__STDC_HOSTED__=1 -Wall -D_GNU_SOURCE -Acpu=i386 -Amachine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i686__ -D__tune_pentiumpro__ -DHAVE_CONFIG_H FITS.cxx FITS.ii GNU CPP version 3.0.3 (cpplib) (i386 Linux/ELF) ignoring nonexistent directory "/usr/i686-pc-linux-gnu/include" ignoring duplicate directory "." ignoring duplicate directory "." #include "..." search starts here: #include <...> search starts here: . .. /home/dorman/cpp/include /usr/include/g++-v3 /usr/include/g++-v3/i686-pc-linux-gnu /usr/include/g++-v3/backward /usr/local/include /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/include /usr/include End of search list. /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0.3/cc1plus -fpreprocessed FITS.ii -quiet -dumpbase FITS.cxx -g -Wall -version -o FITS.s GNU CPP version 3.0.3 (cpplib) (i386 Linux/ELF) GNU C++ version 3.0.3 (i686-pc-linux-gnu) compiled by GNU C version 3.0.3. FITS.cxx: In member function `void CCfits::FITS::open(CCfits::RWmode)': FITS.cxx:544: no matching function for call to `CCfits::FITS::CantOpen::CantOpen(CCfits::FITS::CantOpen)' FITS.cxx:104: candidates are: CCfits::FITS::CantOpen::CantOpen(const std::string&, bool = false) make: *** [FITS.o] Error 1 Where the custom ctor should clearly be called. >How-To-Repeat: see above >Fix: compilation is restored by removing copy ctor declaration, but problem is still present and causes unexpected results in exception handling. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="FITS.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="FITS.ii" IyAyMyAiRklUUy5jeHgiCiMgMSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAxIDMKIyAyNiAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwoj IDI4MyAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvc3lzL2Nk ZWZzLmgiIDEgMwojIDI4NCAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDMxMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ251L3N0dWJzLmgiIDEg MwojIDMxMiAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDIgMwojIDI3ICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDIgMwoKZXh0ZXJuICJDIiB7CiMgMTc1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeF9vcHQuaCIgMSAzCiMgMTc2ICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vudmlyb25tZW50 cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy93b3Jkc2l6ZS5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMv ZW52aXJvbm1lbnRzLmgiIDIgMwojIDE4MCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyAx OTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMK CgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z dGRkZWYuaCIgMSAzCiMgMTk5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4zL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMw ICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIg X191X2NoYXI7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2ln bmVkIGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVu c2lvbl9fIHR5cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVu c2lnbmVkIGNoYXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90 Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBp bnQgX19pbnQzMl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNp b25fXyB0eXBlZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25f XyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19x dWFkX3QgKl9fcWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9f dV9pbnQgX191aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcg X19pbm9fdDsKdHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlu a190Owp0eXBlZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7 CnR5cGVkZWYgaW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBfX3Vf bG9uZyBfX3JsaW1fdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX191 X2ludCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsKICB9IF9f ZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2NhZGRyX3Q7 CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdXNlY29u ZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9f c3dibGtfdDsKCnR5cGVkZWYgbG9uZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgaW50IF9fY2xv Y2tpZF90OwoKCnR5cGVkZWYgaW50IF9fdGltZXJfdDsKCgoKCgoKdHlwZWRlZiBpbnQgX19rZXlf dDsKCgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKdHlwZWRlZiBs b25nIGludCBfX2Jsa3NpemVfdDsKCgoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtjbnRfdDsKdHlw ZWRlZiBfX3F1YWRfdCBfX2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzYmxrY250 X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9sb25n IF9fZnNmaWxjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNmaWxjbnQ2NF90OwoKCnR5cGVk ZWYgX191X3F1YWRfdCBfX2lubzY0X3Q7CgoKdHlwZWRlZiBfX2xvZmZfdCBfX29mZjY0X3Q7CgoK dHlwZWRlZiBsb25nIGludCBfX3Rfc2NhbGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQg X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGludCBfX2ludHB0cl90OwoKCnR5cGVkZWYgdW5zaWdu ZWQgaW50IF9fc29ja2xlbl90OwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlw ZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNjggIi91c3IvaW5jbHVkZS9iaXRzL3Nj aGVkLmgiIDMKc3RydWN0IF9fc2NoZWRfcGFyYW0KICB7CiAgICBpbnQgX19zY2hlZF9wcmlvcml0 eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMiAzCgoKc3Ry dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlu bG9jazsKCn07CgoKCnR5cGVkZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJl YWRfZGVzY3I7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QgX19wdGhyZWFkX2F0dHJfcwp7CiAgaW50IF9f ZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRfcGFyYW0g X19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsKICBzaXpl X3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0YWNrYWRk cjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJlYWRfZGVz Y3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBp bnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBpbnQg cHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNlcnZlZDsK ICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQgX19tX2tp bmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRfbXV0ZXhf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFkX211dGV4 YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYgc3RydWN0 IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19yd19sb2Nr OwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7CiAgX3B0 aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0 ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBwdGhyZWFk X3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAgaW50IF9f cHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdm9sYXRpbGUgaW50 IHB0aHJlYWRfc3BpbmxvY2tfdDsKCgp0eXBlZGVmIHN0cnVjdCB7CiAgc3RydWN0IF9wdGhyZWFk X2Zhc3Rsb2NrIF9fYmFfbG9jazsKICBpbnQgX19iYV9yZXF1aXJlZDsKICBpbnQgX19iYV9wcmVz ZW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fYmFfd2FpdGluZzsKfSBwdGhyZWFkX2JhcnJpZXJfdDsK Cgp0eXBlZGVmIHN0cnVjdCB7CiAgaW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX2JhcnJpZXJhdHRy X3Q7CgoKCgoKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBwdGhyZWFkX3Q7CiMgMTQ0ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKIyAxOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MiAzCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3NpemVfdDsKCgoKCgojIDEgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjAwICIv dXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRfdDsKCgoK CnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2ZmX3Q7CgoKCgoK CnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vj b25kc190OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90OwoKCgoKCgp0eXBlZGVmIF9faW50cHRy X3QgaW50cHRyX3Q7CgoKCgoKCnR5cGVkZWYgX19zb2NrbGVuX3Qgc29ja2xlbl90OwojIDI2MCAi L3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgYWNjZXNzIChfX2NvbnN0IGNoYXIg Kl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3Mg KF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBlKSB0aHJvdyAoKTsKIyAyOTAgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50IF9fZmQsIF9fb2Zm X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CiMgMzAyICIvdXNyL2luY2x1ZGUv dW5pc3RkLmgiIDMKZXh0ZXJuIF9fb2ZmNjRfdCBsc2VlazY0IChpbnQgX19mZCwgX19vZmY2NF90 IF9fb2Zmc2V0LCBpbnQgX193aGVuY2UpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb3NlIChp bnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCB3cml0 ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24pIHRocm93ICgpOwoK CgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19u Ynl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBzc2l6ZV90IHB3 cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAg ICAgICAgICAgICAgICAgX19vZmZfdCBfX29mZnNldCkgdGhyb3cgKCk7CiMgMzQwICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf dCBfX29mZnNldCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHNzaXplX3QgcHdyaXRlNjQgKGludCBfX2Zk LCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAo aW50IF9fcGlwZWRlc1syXSkgdGhyb3cgKCk7CiMgMzYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgi IDMKZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhy b3cgKCk7CiMgMzcxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGlu dCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBf X3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3QgX192YWx1ZSwgX191c2Vjb25kc190IF9f aW50ZXJ2YWwpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdXNsZWVwIChfX3VzZWNvbmRz X3QgX191c2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90 IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBm Y2hvd24gKGludCBfX2ZkLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3Qg X19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBj aGRpciAoX19jb25zdCBjaGFyICpfX3BhdGgpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZjaGRp ciAoaW50IF9fZmQpIHRocm93ICgpOwojIDQyMyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBjaGFyICpnZXRjd2QgKGNoYXIgKl9fYnVmLCBzaXplX3QgX19zaXplKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBpbnQgZHVwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19m ZCwgaW50IF9fZmQyKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVy biBjaGFyICoqZW52aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpf X3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpf X2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZmV4ZWN2ZSAoaW50IF9f ZmQsIGNoYXIgKl9fY29uc3QgX19hcmd2W10sIGNoYXIgKl9fY29uc3QgX19lbnZwW10pCiAgICAg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4ZWN2IChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hh ciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2xlIChfX2Nv bnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2FyZywgLi4uKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBleGVjbCAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19h cmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY3ZwIChfX2NvbnN0IGNoYXIgKl9f ZmlsZSwgY2hhciAqX19jb25zdCBfX2FyZ3ZbXSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGV4 ZWNscCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IG5pY2UgKGludCBfX2luYykgdGhyb3cgKCk7CgoKCgpleHRl cm4gdm9pZCBfZXhpdCAoaW50IF9fc3RhdHVzKSBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVybl9f KSk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFtZS5oIiAxIDMKIyAyNSAiL3Vz ci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewogICAgX1BDX0xJTktfTUFYLAoK ICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwKCiAgICBfUENfTkFNRV9NQVgs CgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwKCiAgICBfUENfQ0hPV05fUkVT VFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZESVNBQkxFLAoKICAgIF9QQ19T WU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJT19JTywKCiAgICBfUENfU09D S19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBfUENfUkVDX0lOQ1JfWEZFUl9T SVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBfUENfUkVDX01JTl9YRkVSX1NJ WkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdf TUFYLAoKICAgIF9TQ19DSElMRF9NQVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9V UFNfTUFYLAoKICAgIF9TQ19PUEVOX01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0Nf VFpOQU1FX01BWCwKCiAgICBfU0NfSk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAg ICBfU0NfUkVBTFRJTUVfU0lHTkFMUywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAg ICBfU0NfVElNRVJTLAoKICAgIF9TQ19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJ WkVEX0lPLAoKICAgIF9TQ19TWU5DSFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9T Q19NQVBQRURfRklMRVMsCgogICAgX1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0Us CgogICAgX1NDX01FTU9SWV9QUk9URUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgog ICAgX1NDX1NFTUFQSE9SRVMsCgogICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBf U0NfQUlPX0xJU1RJT19NQVgsCgogICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RF TFRBX01BWCwKCiAgICBfU0NfREVMQVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoK ICAgIF9TQ19NUV9QUklPX01BWCwKCiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUs CgoKICAgIF9TQ19SVFNJR19NQVgsCgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NF TV9WQUxVRV9NQVgsCgogICAgX1NDX1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoK CgoKICAgIF9TQ19CQ19CQVNFX01BWCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNf U0NBTEVfTUFYLAoKICAgIF9TQ19CQ19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNf TUFYLAoKICAgIF9TQ19FUVVJVl9DTEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgog ICAgX1NDX0xJTkVfTUFYLAoKICAgIF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1Nf TkFNRV9NQVgsCgoKICAgIF9TQ18yX1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9T Q18yX0NfREVWLAoKICAgIF9TQ18yX0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAg IF9TQ18yX1NXX0RFViwKCiAgICBfU0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAg X1NDX1BJSV9YVEksCgogICAgX1NDX1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwK CiAgICBfU0NfUElJX09TSSwKCiAgICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9T Q19VSU9fTUFYSU9WLAoKICAgIF9TQ19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1ND X1BJSV9JTlRFUk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBf U0NfUElJX09TSV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lf TSwKCiAgICBfU0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVB RF9TQUZFX0ZVTkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VU UFdfUl9TSVpFX01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1F X01BWCwKCiAgICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhS RUFEX0tFWVNfTUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURf VEhSRUFEU19NQVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhS RUFEX0FUVFJfU1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywK CiAgICBfU0NfVEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVD VCwKCiAgICBfU0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNf Q09ORiwKCiAgICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAg ICBfU0NfQVZQSFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01B WCwKCgogICAgX1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoK ICAgIF9TQ19YT1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5f RU5IX0kxOE4sCgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAg IF9TQ18yX0NfVkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoK ICAgIF9TQ19YT1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9C SVQsCgogICAgX1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01B WCwKCiAgICBfU0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklU LAoKICAgIF9TQ19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFY LAoKICAgIF9TQ19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9N QVgsCgogICAgX1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRf TUFYLAoKICAgIF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05M X0FSR01BWCwKCiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9T Q19OTF9OTUFYLAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAg IF9TQ19YQlM1X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBf U0NfWEJTNV9MUDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1ND X1hPUEVOX0xFR0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JF QUxUSU1FX1RIUkVBRFMsCgoKICAgIF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVS UywKCiAgICBfU0NfQkFTRSwKCiAgICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFO R19TVVBQT1JUX1IsCgogICAgX1NDX0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwK CiAgICBfU0NfVEhSRUFEX0NQVVRJTUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVW SUNFX1NQRUNJRklDLAoKICAgIF9TQ19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdN VCwKCiAgICBfU0NfRklGTywKCiAgICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVT LAoKICAgIF9TQ19GSUxFX0xPQ0tJTkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19N T05PVE9OSUNfQ0xPQ0ssCgogICAgX1NDX01VTFRJUExFX1BST0NFU1MsCgogICAgX1NDX1NJTkdM RV9QUk9DRVNTLAoKICAgIF9TQ19ORVRXT1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xP Q0tTLAoKICAgIF9TQ19TUElOX0xPQ0tTLAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VY X1ZFUlNJT04sCgogICAgX1NDX1NIRUxMLAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFX TiwKCiAgICBfU0NfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VS VkVSLAoKICAgIF9TQ19TWVNURU1fREFUQUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9S LAoKICAgIF9TQ19USU1FT1VUUywKCiAgICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAg X1NDX1VTRVJfR1JPVVBTLAoKICAgIF9TQ19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywK CiAgICBfU0NfMl9QQlNfQUNDT1VOVElORywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9T Q18yX1BCU19NRVNTQUdFLAoKICAgIF9TQ18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUCwK CiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVAoKICB9OwoKCgoKCmVu dW0KICB7CiAgICBfQ1NfUEFUSAoKCgoKICAgICwKICAgIF9DU19MRlNfQ0ZMQUdTID0gMTAwMCwK CiAgICBfQ1NfTEZTX0xERkxBR1MsCgogICAgX0NTX0xGU19MSUJTLAoKICAgIF9DU19MRlNfTElO VEZMQUdTLAoKICAgIF9DU19MRlM2NF9DRkxBR1MsCgogICAgX0NTX0xGUzY0X0xERkxBR1MsCgog ICAgX0NTX0xGUzY0X0xJQlMsCgogICAgX0NTX0xGUzY0X0xJTlRGTEFHUwoKCgoKICAgICwKICAg IF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAsCgogICAgX0NTX1hCUzVfSUxQMzJf T0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSUJTLAoKICAgIF9DU19Y QlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfQ0ZM QUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0lM UDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSU5URkxBR1MsCgog ICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9M REZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAgICBfQ1NfWEJTNV9MUDY0 X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAg IF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJ R19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxBR1MKCgogIH07CiMgNTAx ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBsb25nIGludCBwYXRoY29uZiAo X19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBsb25n IGludCBmcGF0aGNvbmYgKGludCBfX2ZkLCBpbnQgX19uYW1lKSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9f YnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2 b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19waWRfdCBnZXRwcGlkICh2b2lkKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIHRocm93ICgpOwojIDUzNiAiL3Vzci9p bmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IF9fZ2V0cGdpZCAoX19waWRfdCBfX3Bp ZCkgdGhyb3cgKCk7CgpleHRlcm4gX19waWRfdCBnZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9f cGdpZCkgdGhyb3cgKCk7CiMgNTYyICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGlu dCBzZXRwZ3JwICh2b2lkKSB0aHJvdyAoKTsKIyA1ODAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MwpleHRlcm4gX19waWRfdCBzZXRzaWQgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4gX19waWRf dCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgpleHRlcm4gX191aWRfdCBnZXR1 aWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBfX3VpZF90IGdldGV1aWQgKHZvaWQpIHRocm93 ICgpOwoKCmV4dGVybiBfX2dpZF90IGdldGdpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9f Z2lkX3QgZ2V0ZWdpZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGdldGdyb3VwcyAo aW50IF9fc2l6ZSwgX19naWRfdCBfX2xpc3RbXSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZ3Jv dXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXR1 aWQgKF9fdWlkX3QgX191aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZXVpZCAoX191 aWRfdCBfX3J1aWQsIF9fdWlkX3QgX19ldWlkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0 ZXVpZCAoX191aWRfdCBfX3VpZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgc2V0Z2lkIChf X2dpZF90IF9fZ2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0cmVnaWQgKF9fZ2lkX3Qg X19yZ2lkLCBfX2dpZF90IF9fZWdpZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldGVnaWQg KF9fZ2lkX3QgX19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lk KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIF9fcGlkX3QgdmZvcmsgKHZvaWQpIHRocm93ICgpOwoK CgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdHR5bmFtZV9yIChpbnQgX19mZCwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgaXNhdHR5IChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCgoKZXh0 ZXJuIGludCB0dHlzbG90ICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgbGluayAoX19j b25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgdGhyb3cgKCk7CgoKCmV4dGVy biBpbnQgc3ltbGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHJlYWRsaW5rIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19wYXRoLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFy ICpfX25hbWUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19w YXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9p ZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IGdldGxvZ2luX3IgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbmFtZV9sZW4p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUp IHRocm93ICgpOwojIDcyNiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2dldG9wdC5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiAi QyIgewojIDQ3ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsK IyA2MSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0 ZXJuIGludCBvcHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDE0NSAiL3Vzci9pbmNsdWRl L2dldG9wdC5oIiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAq X19hcmd2LCBjb25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTc0ICIvdXNyL2luY2x1ZGUvZ2V0 b3B0LmgiIDMKfQojIDcyNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgoKCgoKCmV4dGVy biBpbnQgZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGludCBzZXRob3N0bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVf dCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0aG9zdGlkIChsb25nIGludCBfX2lk KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldGRvbWFpbm5hbWUgKGNoYXIgKl9fbmFtZSwg c2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChfX2NvbnN0 IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZo YW5ndXAgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIg Kl9fZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hv cnQgaW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IGFjY3QgKF9fY29uc3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGNoYXIgKmdldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGVuZHVzZXJz aGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIGludCBkYWVtb24gKGludCBfX25vY2hkaXIsIGludCBfX25vY2xv c2UpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpfX3Bh dGgpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqZ2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3By b21wdCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBmc3luYyAoaW50IF9fZmQpIHRocm93ICgp OwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRl cm4gdm9pZCBzeW5jICh2b2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0cGFnZXNpemUg KHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBp bnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJv dyAoKTsKIyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRl NjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCBmdHJ1bmNhdGUgKGludCBfX2ZkLCBfX29mZl90IF9fbGVuZ3RoKSB0aHJv dyAoKTsKIyA4NTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0 ZTY0IChpbnQgX19mZCwgX19vZmY2NF90IF9fbGVuZ3RoKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g aW50IGdldGR0YWJsZXNpemUgKHZvaWQpIHRocm93ICgpOwojIDg2NiAiL3Vzci9pbmNsdWRlL3Vu aXN0ZC5oIiAzCmV4dGVybiBpbnQgYnJrICh2b2lkICpfX2FkZHIpIHRocm93ICgpOwoKCgoKCmV4 dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSB0aHJvdyAoKTsKIyA4ODcgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gbG9uZyBpbnQgc3lzY2FsbCAobG9uZyBpbnQgX19z eXNubywgLi4uKSB0aHJvdyAoKTsKIyA5MDcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRl cm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90IF9fbGVuKSB0aHJvdyAo KTsKIyA5MTcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGlu dCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmNjRfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTM4ICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBmZGF0YXN5bmMgKGludCBfX2ZpbGRlcykg dGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gY2hhciAqY3J5cHQgKF9fY29uc3QgY2hhciAqX19rZXks IF9fY29uc3QgY2hhciAqX19zYWx0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAo Y2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIHZvaWQg c3dhYiAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fZnJvbSwgdm9pZCAqX19yZXN0cmljdCBf X3RvLAogICAgICAgICAgICAgICAgICBzc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKCgpleHRl cm4gY2hhciAqY3Rlcm1pZCAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA5ODMgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0 aHJvdyAoKTsKCgp9CiMgMjQgIkZJVFMuY3h4IiAyCgoKCgoKCiMgMSAiVGFibGUuaCIgMQojIDMw ICJUYWJsZS5oIgojIDEgImNvbmZpZy5oIiAxCiMgMzEgIlRhYmxlLmgiIDIKCgoKCgoKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL3NzdHJlYW0iIDEgMwojIDMxICIvdXNyL2luY2x1ZGUvZysrLXYz L3NzdHJlYW0iIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3NzdHJlYW0uaCIg MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3N0cmVhbS5oIiAzCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pc3RyZWFtLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaW9zLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIg MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAx IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2Nv bmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L29zX2RlZmluZXMuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19k ZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysrY29uZmlnLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMt bGludXgtZ251L2JpdHMvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2 ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDIgMwojIDQwICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RyaW5nZndkLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyaW5n ZndkLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2MrK2NvbmZpZy5oIiAxIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmluZ2Z3 ZC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVD4KICAgIHN0 cnVjdCBjaGFyX3RyYWl0czsKCiAgdGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj47 CgogIHRlbXBsYXRlPD4gc3RydWN0IGNoYXJfdHJhaXRzPHdjaGFyX3Q+OwoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYWxsb2NhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAg ICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X3N0cmluZzsKCiAgdHlwZWRlZiBiYXNpY19zdHJpbmc8Y2hhcj4gc3RyaW5nOwoKICB0eXBlZGVm IGJhc2ljX3N0cmluZzx3Y2hhcl90PiB3c3RyaW5nOwoKfQojIDQxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2lvc2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv ZnBvcy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Zwb3MuaCIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysraW8uaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9jc3RkaW8iIDEgMwojIDMxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2NzdGRpbyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0 ZGlvLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZp Zy5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMwojIDEgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3 ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVm LmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRkZWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OnB0cmRpZmZf dDsKICB1c2luZyA6OnNpemVfdDsKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NzdGRpby5oIiAyIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8u aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk ZS9zdGRpby5oIiAxIDMKIyAzNiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAz CiMgMzcgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9z dGRpby5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDMgIi91c3IvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgNDUgIi91c3IvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA1MyAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRl ZiBzdHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUg X19GSUxFOwojIDczICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu Y2x1ZGUvc3RkaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMCAiL3Vz ci9pbmNsdWRlL2xpYmlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwoj IDkgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5 cGVzLmgiIDEgMwojIDEwICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKCgoKIyAxICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgi IDEgMwojIDMxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNs dWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9p bmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAz CiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk ZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvd2NoYXIuaCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAy IDMKIyA2NyAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBf X2NvdW50OwogIHVuaW9uCiAgewogICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07 CiAgfSBfX3ZhbHVlOwp9IF9fbWJzdGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmln LmgiIDIgMwoKdHlwZWRlZiBzdHJ1Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3Qg X19zdGF0ZTsKfSBfR19mcG9zX3Q7CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7 CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvZ2NvbnYuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAy NyAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93Y2hhci5oIiAxIDMK IyA1MSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIvdXNyL2luY2x1ZGUvZ2NvbnYu aCIgMiAzCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5j bHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCgoKCgpl bnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09OViwKICBfX0dDT05WX05PREIs CiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBVVCwKICBfX0dDT05WX0ZVTExf T1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dDT05WX0lOQ09NUExFVEVfSU5Q VVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9fR0NPTlZfSU5URVJOQUxfRVJS T1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgwMDAxLAogIF9fR0NPTlZfSUdO T1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwOwpzdHJ1Y3QgX19n Y29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9vYmplY3Q7CnN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29udl9mY3QpIChzdHJ1Y3QgX19n Y29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBfX2NvbnN0IHVuc2lnbmVkIGNo YXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKiosIHNpemVf dCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2luaXRfZmN0KSAoc3RydWN0 IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl9lbmRfZmN0KSAoc3RydWN0 IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2ZjdCkgKHN0 cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLCB1bnNpZ25lZCBjaGFyICoq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5cGVkZWYg aW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQgKiwgX19jb25zdCB1bnNpZ25l ZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29u c3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAqLCBfX2NvbnN0IGNoYXIgKioq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICopOwoKCnR5 cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZvaWQgKiosIGNvbnN0IGNoYXIg Kik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCkgKHZvaWQgKik7CgpzdHJ1 Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFuc19mY3QgX190cmFuc19mY3Q7 CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2NvbnRleHRfZmN0OwogIF9fZ2Nv bnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9pZCAqX19kYXRhOwogIHN0cnVj dCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3RydWN0IF9fZ2NvbnZfc3RlcAp7 CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxpYl9oYW5kbGU7CiAgX19jb25z dCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9uYW1l OwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9pbml0 X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50IF9f bWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5fbmVl ZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAgdm9p ZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVkIGNo YXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBfX2Zs YWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5hbF91 c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoKCgog IHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3RydWN0 IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0ZXAg Kl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgX19kYXRh IFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCnR5 cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19jZDsKICBzdHJ1Y3QKICB7CiAg ICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEg X19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoKdHlwZWRlZiBpbnQgX0dfaW50 MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgX0df aW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lfXykpKTsKdHlwZWRlZiB1bnNp Z25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0cmlidXRlX18gKChfX21vZGVf XyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMiAzCiMgNTEgIi91c3Iv aW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19idWlsdGlu X3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgNTIgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMK IyAxNTggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnN0cnVjdCBfSU9fanVtcF90OyBzdHJ1Y3Qg X0lPX0ZJTEU7CiMgMTY4ICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp0eXBlZGVmIHZvaWQgX0lP X2xvY2tfdDsKCgoKCgpzdHJ1Y3QgX0lPX21hcmtlciB7CiAgc3RydWN0IF9JT19tYXJrZXIgKl9u ZXh0OwogIHN0cnVjdCBfSU9fRklMRSAqX3NidWY7CgoKCiAgaW50IF9wb3M7CiMgMTkxICIvdXNy L2luY2x1ZGUvbGliaW8uaCIgMwp9OwoKCmVudW0gX19jb2RlY3Z0X3Jlc3VsdAp7CiAgX19jb2Rl Y3Z0X29rLAogIF9fY29kZWN2dF9wYXJ0aWFsLAogIF9fY29kZWN2dF9lcnJvciwKICBfX2NvZGVj dnRfbm9jb252Cn07CgoKCgpzdHJ1Y3QgX0lPX2NvZGVjdnQKewogIHZvaWQgKCpfX2NvZGVjdnRf ZGVzdHIpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgq X19jb2RlY3Z0X2RvX291dCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICosCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq KiwgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICosIGNoYXIgKiopOwogIGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb191 bnNoaWZ0KSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX21ic3RhdGVfdCAqLCBjaGFyICosCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICosIGNoYXIgKiopOwog IGVudW0gX19jb2RlY3Z0X3Jlc3VsdCAoKl9fY29kZWN2dF9kb19pbikgKHN0cnVjdCBfSU9fY29k ZWN2dCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz dGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqLCBjb25zdCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqKiwgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiwgd2NoYXJfdCAqKik7CiAgaW50ICgq X19jb2RlY3Z0X2RvX2VuY29kaW5nKSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAoKl9f Y29kZWN2dF9kb19hbHdheXNfbm9jb252KSAoc3RydWN0IF9JT19jb2RlY3Z0ICopOwogIGludCAo Kl9fY29kZWN2dF9kb19sZW5ndGgpIChzdHJ1Y3QgX0lPX2NvZGVjdnQgKiwgX19tYnN0YXRlX3Qg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqLCBjb25zdCBjaGFy ICosIHNpemVfdCk7CiAgaW50ICgqX19jb2RlY3Z0X2RvX21heF9sZW5ndGgpIChzdHJ1Y3QgX0lP X2NvZGVjdnQgKik7CgogIF9HX2ljb252X3QgX19jZF9pbjsKICBfR19pY29udl90IF9fY2Rfb3V0 Owp9OwoKCnN0cnVjdCBfSU9fd2lkZV9kYXRhCnsKICB3Y2hhcl90ICpfSU9fcmVhZF9wdHI7CiAg d2NoYXJfdCAqX0lPX3JlYWRfZW5kOwogIHdjaGFyX3QgKl9JT19yZWFkX2Jhc2U7CiAgd2NoYXJf dCAqX0lPX3dyaXRlX2Jhc2U7CiAgd2NoYXJfdCAqX0lPX3dyaXRlX3B0cjsKICB3Y2hhcl90ICpf SU9fd3JpdGVfZW5kOwogIHdjaGFyX3QgKl9JT19idWZfYmFzZTsKICB3Y2hhcl90ICpfSU9fYnVm X2VuZDsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfYmFzZTsKICB3Y2hhcl90ICpfSU9fYmFja3VwX2Jh c2U7CgogIHdjaGFyX3QgKl9JT19zYXZlX2VuZDsKCiAgX19tYnN0YXRlX3QgX0lPX3N0YXRlOwog IF9fbWJzdGF0ZV90IF9JT19sYXN0X3N0YXRlOwogIHN0cnVjdCBfSU9fY29kZWN2dCBfY29kZWN2 dDsKCiAgd2NoYXJfdCBfc2hvcnRidWZbMV07CgogIHN0cnVjdCBfSU9fanVtcF90ICpfd2lkZV92 dGFibGU7Cn07CgoKc3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBf SU9fcmVhZF9wdHI7CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7 CiAgY2hhciogX0lPX3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBf SU9fd3JpdGVfZW5kOwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsK CiAgY2hhciAqX0lPX3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAq X0lPX3NhdmVfZW5kOwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBf SU9fRklMRSAqX2NoYWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZf dCBfb2xkX29mZnNldDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQg Y2hhciBfdnRhYmxlX29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190 ICpfbG9jazsKIyAzMDMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZz ZXQ7CgoKICBzdHJ1Y3QgX0lPX2NvZGVjdnQgKl9jb2RlY3Z0OwogIHN0cnVjdCBfSU9fd2lkZV9k YXRhICpfd2lkZV9kYXRhOwoKCgoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNlZDJbMTUgKiBz aXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3RydWN0IF9JT19G SUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9zdGRpbl87CmV4 dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVybiBzdHJ1Y3Qg X0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQyICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29va2llLCBjaGFy ICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6ZV90IF9faW9f d3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9f aW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoK CnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYg X19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9m biBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3Nl ZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlv bl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0 ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3Nl Owp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoK CmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVfZmlsZSAqX19j ZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lk ICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4g IkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX292ZXJm bG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxv dyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cgKF9JT19GSUxF ICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklMRSAqLCB3aW50 X3QpIHRocm93ICgpOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBf SU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9JT19wdXRjIChp bnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lPX2Zlb2YgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAq X19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9JT19GSUxFICpf X2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChfSU9fRklMRSAq KSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0aHJvdyAoKTsK IyA0NTQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zmc2NhbmYgKF9J T19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRocm93ICgpOwpl eHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIg Kl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgdGhy b3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGludCwgX19zc2l6 ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxFICosIHZvaWQg Kiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19G SUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19vZmY2NF90IF9J T19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7CgpleHRlcm4g dm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKZXh0ZXJu IHdpbnRfdCBfSU9fZ2V0d2MgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIHdpbnRf dCBfSU9fcHV0d2MgKHdjaGFyX3QgX193YywgX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRl cm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGludCBfX21vZGUpIHRocm93ICgpOwoj IDUwMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZ3c2NhbmYgKF9J T19GSUxFICogX19yZXN0cmljdCwgY29uc3Qgd2NoYXJfdCAqIF9fcmVzdHJpY3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCwgaW50ICpfX3Jlc3RyaWN0KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBfSU9fdmZ3cHJpbnRmIChfSU9fRklMRSAqX19yZXN0cmljdCwgY29uc3Qg d2NoYXJfdCAqX19yZXN0cmljdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3dwYWRuIChfSU9fRklMRSAqLCB3 aW50X3QsIF9fc3NpemVfdCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIF9JT19mcmVlX3diYWNrdXBf YXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CgoKCn0KIyA3NCAiL3Vzci9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgoKdHlwZWRlZiBf X2dudWNfdmFfbGlzdCBfX25vdF92YV9saXN0X187CiMgODggIi91c3IvbGliL2djYy1saWIvaTY4 Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgX0dfZnBvc190 IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBvczY0X3Q7CiMgMTM3ICIvdXNyL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkaW8uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3N0ZGlvX2xpbS5oIiAxIDMKIyAxMzggIi91c3IvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJu IEZJTEUgKnN0ZGluOwpleHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwoj IDE1MiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0 ZGlvLmgiIDMKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhy b3cgKCk7CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBj aGFyICpfX25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhy b3cgKCk7CiMgMTY4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqdG1wZmlsZTY0ICh2b2lkKSB0aHJvdyAoKTsK CgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIHRocm93ICgpOwojIDE4OCAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KnRlbXBuYW0gKF9fY29uc3QgY2hhciAqX19kaXIsIF9fY29uc3QgY2hhciAqX19wZngpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCmV4dGVybiBpbnQgZmNs b3NlIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZmbHVzaCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmY2xvc2VhbGwgKHZvaWQpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f bW9kZXMpIHRocm93ICgpOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0 IF9fc3RyZWFtKSB0aHJvdyAoKTsKIyAyMzIgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51 eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICpmb3BlbjY0IChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZy ZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzLAogICAgICAgICAg ICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93 ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tpZSAodm9pZCAqX19yZXN0cmljdCBfX21h Z2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1 bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoKCmV4dGVybiBGSUxFICpmbWVtb3BlbiAo dm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3QgY2hhciAqX19tb2RlcykgdGhyb3cgKCk7 CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVm bG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX3Np emVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lkIHNldGJ1ZiAoRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBf X2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f c2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3Ry ZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1h dCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNwcmludGYgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChGSUxF ICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgpleHRlcm4g aW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3Zh X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpf X3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAg ICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg ICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0 KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAwKSkpOwoKCgoKCmV4dGVybiBpbnQgdmFz cHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAwKSkpOwpl eHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jlc3RyaWN0IF9fcHRyLAogICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwpl eHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwKICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCAuLi4pCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0 ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zt dCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fcHJpbnRmX18sIDIsIDApKSk7CmV4dGVy biBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwg Li4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9f LCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQs IC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5mIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNzY2FuZiAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChG SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5mX18sIDIsIDApKSk7CgoKZXh0ZXJuIGlu dCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xp c3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9fc2Nh bmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f Zm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkpOwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFt KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIgKHZvaWQpIHRocm93ICgpOwoKCgoKCgoK ZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVy biBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZn ZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZw dXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgcHV0YyAo aW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHV0Y2hhciAo aW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGZwdXRjX3VubG9ja2VkIChpbnQg X19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2Nr ZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBwdXRjaGFy X3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGdldHcgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpmZ2V0cyAoY2hhciAqX19yZXN0cmlj dCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hhciAqX19yZXN0cmljdCBfX3MsIGlu dCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqZ2V0cyAoY2hhciAqX19zKSB0aHJvdyAo KTsKIyA0MzYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVk ZS9zdGRpby5oIiAzCmV4dGVybiBfX3NzaXplX3QgX19nZXRkZWxpbSAoY2hhciAqKl9fcmVzdHJp Y3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3Qg Z2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5lIChjaGFyICoqX19yZXN0cmljdCBfX2xpbmVw dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19uLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRzIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19z LCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50 IGZwdXRzX3VubG9ja2VkIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAg ICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIGludCBwdXRzIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBp bnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBz aXplX3QgZnJlYWQgKHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRo cm93ICgpOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJ TEUgKl9fcmVzdHJpY3QgX19zKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxv Y2tlZCAodm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkg dGhyb3cgKCk7CmV4dGVybiBzaXplX3QgZndyaXRlX3VubG9ja2VkIChfX2NvbnN0IHZvaWQgKl9f cmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiBpbnQgZnNlZWsgKEZJTEUgKl9fc3RyZWFtLCBsb25nIGludCBfX29mZiwgaW50IF9f d2hlbmNlKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgcmV3aW5kIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7 CiMgNDk5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3QgX19v ZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRlcm4gX19vZmZfdCBmdGVsbG8gKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmZ2V0cG9zIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLCBmcG9zX3QgKl9fcmVzdHJpY3QgX19wb3MpCiAgICAgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IGZzZXRwb3MgKEZJTEUgKl9fc3RyZWFtLCBfX2NvbnN0IGZwb3NfdCAqX19wb3Mp IHRocm93ICgpOwojIDUzMyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAu My9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0s IF9fb2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRf dCBmdGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2 NCAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3Mp CiAgICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19j b25zdCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAo RklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVh bSkgdGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93 ICgpOwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoK CmV4dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlz dFtdOwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0 IF9zeXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21t YW5kLCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3Nl IChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNo YXIgKl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykg dGhyb3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRm IChzdHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAo KTsKZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0 IF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9s aXN0IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUg Kl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJl YW0pIHRocm93ICgpOwojIDY0MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAuMy9pbmNsdWRlL3N0ZGlvLmgiIDMKfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NzdGRpby5oIiAyIDMKIyA4NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3Rk aW8uaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OkZJTEU7CiAgdXNpbmcgOjpmcG9zX3Q7 CgogIHVzaW5nIDo6Y2xlYXJlcnI7CiAgdXNpbmcgOjpmY2xvc2U7CiAgdXNpbmcgOjpmZW9mOwog IHVzaW5nIDo6ZmVycm9yOwogIHVzaW5nIDo6ZmZsdXNoOwogIHVzaW5nIDo6ZmdldGM7CiAgdXNp bmcgOjpmZ2V0cG9zOwogIHVzaW5nIDo6ZmdldHM7CiAgdXNpbmcgOjpmb3BlbjsKICB1c2luZyA6 OmZwcmludGY7CiAgdXNpbmcgOjpmcHV0YzsKICB1c2luZyA6OmZwdXRzOwogIHVzaW5nIDo6ZnJl YWQ7CiAgdXNpbmcgOjpmcmVvcGVuOwogIHVzaW5nIDo6ZnNjYW5mOwogIHVzaW5nIDo6ZnNlZWs7 CiAgdXNpbmcgOjpmc2V0cG9zOwogIHVzaW5nIDo6ZnRlbGw7CiAgdXNpbmcgOjpmd3JpdGU7CiAg dXNpbmcgOjpnZXRjOwogIHVzaW5nIDo6Z2V0Y2hhcjsKICB1c2luZyA6OmdldHM7CiAgdXNpbmcg OjpwZXJyb3I7CiAgdXNpbmcgOjpwcmludGY7CiAgdXNpbmcgOjpwdXRjOwogIHVzaW5nIDo6cHV0 Y2hhcjsKICB1c2luZyA6OnB1dHM7CiAgdXNpbmcgOjpyZW1vdmU7CiAgdXNpbmcgOjpyZW5hbWU7 CiAgdXNpbmcgOjpyZXdpbmQ7CiAgdXNpbmcgOjpzY2FuZjsKICB1c2luZyA6OnNldGJ1ZjsKICB1 c2luZyA6OnNldHZidWY7CiAgdXNpbmcgOjpzcHJpbnRmOwogIHVzaW5nIDo6c3NjYW5mOwogIHVz aW5nIDo6dG1wZmlsZTsKICB1c2luZyA6OnRtcG5hbTsKICB1c2luZyA6OnVuZ2V0YzsKICB1c2lu ZyA6OnZmcHJpbnRmOwogIHVzaW5nIDo6dnByaW50ZjsKICB1c2luZyA6OnZzcHJpbnRmOwp9CiMg MTQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRpby5oIiAzCm5hbWVzcGFjZSBf X2dudV9jeHgKewogIHVzaW5nIDo6c25wcmludGY7CiAgdXNpbmcgOjp2ZnNjYW5mOwogIHVzaW5n IDo6dnNjYW5mOwogIHVzaW5nIDo6dnNucHJpbnRmOwogIHVzaW5nIDo6dnNzY2FuZjsKfQoKbmFt ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpzbnByaW50ZjsKICB1c2luZyBfX2dudV9j eHg6OnZmc2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c2NhbmY7CiAgdXNpbmcgX19nbnVfY3h4 Ojp2c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2c3NjYW5mOwp9CiMgMzIgIi91c3IvaW5j bHVkZS9nKystdjMvY3N0ZGlvIiAyIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY3N0 ZGRlZiIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytpby5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvZ3Roci5oIiAxIDMKIyA5OCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL2d0aHIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMv aTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9wdGhyZWFkLmgiIDEgMwojIDE4ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDE5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAy IDMKCiMgMSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvc2No ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNCAiL3Vzci9pbmNs dWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMg MjcgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS90aW1lLmgi IDEgMwojIDEwNiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwpzdHJ1Y3QgdGltZXNwZWMKICB7CiAg ICBsb25nIGludCB0dl9zZWM7CiAgICBsb25nIGludCB0dl9uc2VjOwogIH07CiMgMzAgIi91c3Iv aW5jbHVkZS9zY2hlZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEg MwojIDQ3ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBzY2hlZF9wYXJhbQog IHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgpleHRlcm4gIkMiIHsKCgoKZXh0ZXJu IGludCBjbG9uZSAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFj aywKICAgICAgICAgICAgICAgICAgaW50IF9fZmxhZ3MsIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsK Cgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4dGVybiAiQyIgewoKCmV4 dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICpfX3BhcmFtKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0 cGFyYW0gKF9fcGlkX3QgX19waWQsIHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBf X3BvbGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNj aGVkX3BhcmFtICpfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX2dldHNjaGVk dWxlciAoX19waWRfdCBfX3BpZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAo dm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBzY2hlZF9nZXRfcHJpb3JpdHlfbWF4IChpbnQg X19hbGdvcml0aG0pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21p biAoaW50IF9fYWxnb3JpdGhtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHNjaGVkX3JyX2dldF9p bnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3QpIHRocm93ICgpOwoK fQojIDIxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgpleHRlcm4gIkMi IHsKCgoKCgoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMiAzCiMgNTYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0 cy90eXBlcy5oIiAxIDMKIyA1NyAiL3Vzci9pbmNsdWRlL3RpbWUuaCIgMiAzCgoKdHlwZWRlZiBf X2Nsb2NrX3QgY2xvY2tfdDsKCgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgNjggIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX190aW1lX3QgdGlt ZV90OwojIDc5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv dHlwZXMuaCIgMSAzCiMgODAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIgMwoKCnR5cGVkZWYgX19j bG9ja2lkX3QgY2xvY2tpZF90OwojIDkxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgOTIgIi91c3IvaW5jbHVkZS90aW1lLmgiIDIg MwoKCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTE4ICIvdXNyL2luY2x1ZGUvdGltZS5o IiAzCnN0cnVjdCB0bQp7CiAgaW50IHRtX3NlYzsKICBpbnQgdG1fbWluOwogIGludCB0bV9ob3Vy OwogIGludCB0bV9tZGF5OwogIGludCB0bV9tb247CiAgaW50IHRtX3llYXI7CiAgaW50IHRtX3dk YXk7CiAgaW50IHRtX3lkYXk7CiAgaW50IHRtX2lzZHN0OwoKCiAgbG9uZyBpbnQgdG1fZ210b2Zm OwogIF9fY29uc3QgY2hhciAqdG1fem9uZTsKCgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwog IHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBp dF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1l LmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiB0aW1l X3QgdGltZSAodGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGRpZmZ0 aW1lICh0aW1lX3QgX190aW1lMSwgdGltZV90IF9fdGltZTApCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiB0aW1lX3QgbWt0aW1lIChzdHJ1Y3QgdG0g Kl9fdHApIHRocm93ICgpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNoYXIgKl9fcmVz dHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoKCgoKZXh0ZXJuIGNo YXIgKnN0cnB0aW1lIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgc3RydWN0IHRtICpfX3Rw KQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0 aW1lX3QgKl9fdGltZXIpIHRocm93ICgpOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUg KF9fY29uc3QgdGltZV90ICpfX3RpbWVyKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBzdHJ1Y3QgdG0g KmdtdGltZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIHRocm93ICgpOwoK CgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJp Y3QgX190aW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19y ZXN0cmljdCBfX3RwKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lIChfX2NvbnN0 IHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKmN0aW1lIChfX2NvbnN0 IHRpbWVfdCAqX190aW1lcikgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICphc2N0aW1lX3Ig KF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpjdGlt ZV9yIChfX2NvbnN0IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq X190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsKZXh0ZXJuIGxvbmcgaW50IF9fdGlt ZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoKCgpleHRlcm4gdm9pZCB0enNldCAo dm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0 aW1lem9uZTsKCgoKCgpleHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSB0 aHJvdyAoKTsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0aW1l Z20gKHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIHRpbWVfdCB0aW1lbG9jYWwg KHN0cnVjdCB0bSAqX190cCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3ll YXIpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50 IG5hbm9zbGVlcCAoX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGludCBjbG9ja19nZXRyZXMgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVzKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGNsb2NrX2dldHRpbWUg KGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdHApIHRocm93ICgpOwoK CmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIF9fY29uc3Qg c3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGNsb2Nr X25hbm9zbGVlcCAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbSkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGludCBjbG9ja19nZXRjcHVjbG9ja2lkIChwaWRfdCBfX3BpZCwgY2xvY2tpZF90ICpf X2Nsb2NrX2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lk X3QgX19jbG9ja19pZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAq X19yZXN0cmljdCBfX2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVz dHJpY3QgX190aW1lcmlkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHRpbWVyX2RlbGV0ZSAodGlt ZXJfdCBfX3RpbWVyaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgdGltZXJfc2V0dGltZSAodGlt ZXJfdCBfX3RpbWVyaWQsIGludCBfX2ZsYWdzLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKl9fcmVzdHJpY3QgX192YWx1ZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19yZXN0cmljdCBfX292YWx1ZSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgc3Ry dWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0aW1l cl9nZXRvdmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgdGhyb3cgKCk7CiMgMzQyICIvdXNyL2lu Y2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9lcnI7CgoKCgoKZXh0ZXJuIHN0cnVj dCB0bSAqZ2V0ZGF0ZSAoX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CiMgMzU3ICIv dXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9f cmVzdHJpY3QgX19yZXNidWZwKSB0aHJvdyAoKTsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUvcHRo cmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMjkgIi91c3Iv aW5jbHVkZS9zaWduYWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAz MCAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAyIDMKCmV4dGVybiAiQyIgewoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9zaWdzZXQuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5o IiAzCnR5cGVkZWYgaW50IF9fc2lnX2F0b21pY190OwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICB1bnNpZ25lZCBsb25nIGludCBfX3ZhbFsoMTAyNCAvICg4ICogc2l6ZW9mICh1bnNpZ25lZCBs b25nIGludCkpKV07CiAgfSBfX3NpZ3NldF90OwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgi IDIgMwojIDQ4ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDMKdHlwZWRlZiBfX3NpZ3NldF90IHNp Z3NldF90OwojIDM3MSAiL3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNs dWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9pbml0c3Bpbi5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoK ZXh0ZXJuICJDIiB7CiMgNTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRI UkVBRF9DUkVBVEVfSk9JTkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51 bQp7CiAgUFRIUkVBRF9JTkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9 OwoKZW51bQp7CiAgUFRIUkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VT UwoKfTsKCmVudW0KewogIFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9S RUNVUlNJVkVfTlAsCiAgUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVU RVhfQURBUFRJVkVfTlAKCiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRF WF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVD VVJTSVZFX05QLAogIFBUSFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJS T1JDSEVDS19OUCwKICBQVEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1B TAoKCgogICwgUFRIUkVBRF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9O UAoKfTsKCmVudW0KewogIFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NF U1NfU0hBUkVECgp9OwoKCmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAs CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVG RVJfV1JJVEVSX05PTlJFQ1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0g UFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0 aHJlYWQuaCIgMwpzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3Jv dXRpbmUpICh2b2lkICopOwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3Ry dWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJF QURfQ0FOQ0VMX0VOQUJMRSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAg UFRIUkVBRF9DQU5DRUxfREVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoK fTsKIyAxNjMgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2Ny ZWF0ZSAocHRocmVhZF90ICpfX3Jlc3RyaWN0IF9fdGhyZWFkLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdm9pZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAog ICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSB0aHJvdyAo KTsKCgpleHRlcm4gcHRocmVhZF90IHB0aHJlYWRfc2VsZiAodm9pZCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190 aHJlYWQyKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZvaWQgKl9fcmV0 dmFsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl dHVybikgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2RldGFjaCAocHRocmVhZF90 IF9fdGgpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRo cmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf ZGVzdHJveSAocHRocmVhZF9hdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hzdGF0ZSkgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0ZGV0YWNoc3RhdGUgKF9fY29uc3Qg cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqX19kZXRhY2hzdGF0ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFk X2F0dHJfc2V0c2NoZWRwYXJhbSAocHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hl ZF9wYXJhbSAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3BhcmFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBh cmFtIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c2NoZWRwb2xpY3kgKHB0aHJl YWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3BvbGljeSkKICAgICB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAq X19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRy LCBpbnQgKl9fcmVzdHJpY3QgX19wb2xpY3kpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldGluaGVyaXRzY2hlZCAoX19jb25zdCBw dGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9faW5oZXJpdCkKICAgICB0aHJvdyAo KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY29wZSAocHRocmVhZF9hdHRyX3QgKl9f YXR0ciwgaW50IF9fc2NvcGUpCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUp IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRndWFyZHNpemUgKHB0aHJl YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fZ3VhcmRzaXplKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqX19yZXN0cmljdCBf X2d1YXJkc2l6ZSkKICAgICB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf c2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3RhY2thZGRyKSB0aHJvdyAoKTsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZv aWQgKipfX3Jlc3RyaWN0IF9fc3RhY2thZGRyKQogICAgIHRocm93ICgpOwoKCgoKCmV4dGVybiBp bnQgcHRocmVhZF9hdHRyX3NldHN0YWNrIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLCB2b2lkICpf X3N0YWNrYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0 YWNrc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2sgKF9f Y29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqKl9fcmVzdHJpY3QgX19zdGFja2FkZHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9fcmVzdHJpY3QgX19zdGFja3NpemUp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNrc2l6ZSAocHRo cmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19zdGFja3NpemUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRy X2dldHN0YWNrc2l6ZSAoX19jb25zdCBwdGhyZWFkX2F0dHJfdCAqX19yZXN0cmljdAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgc2l6ZV90ICpfX3Jlc3RyaWN0 IF9fc3RhY2tzaXplKQogICAgIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0 cl9ucCAocHRocmVhZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0 X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pCiAgICAgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wb2xp Y3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g Kl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk X2dldGNvbmN1cnJlbmN5ICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0 Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcHRo cmVhZF95aWVsZCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl eF9pbml0IChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqX19yZXN0cmlj dAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRocmVhZF9tdXRleF90ICpfX211 dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVh ZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBw dGhyZWFkX211dGV4X3RpbWVkbG9jayAocHRocmVhZF9tdXRleF90ICpfX3Jlc3RyaWN0IF9fbXV0 ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRp bWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YWJzdGltZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0 aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsK CgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhhdHRy X3QgKl9fYXR0cikgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9nZXRw c2hhcmVkIChfX2NvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9t dXRleGF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl eGF0dHJfc2V0dHlwZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQog ICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfZ2V0dHlwZSAoX19j b25zdCBwdGhyZWFkX211dGV4YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19raW5kKSB0aHJvdyAo KTsKCgoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2luaXQgKHB0aHJlYWRfY29uZF90ICpf X3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBw dGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25kX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX2Rlc3Ry b3kgKHB0aHJlYWRfY29uZF90ICpfX2NvbmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfd2FpdCAocHRocmVhZF9jb25kX3QgKl9f cmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGhyZWFkX211 dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwdGhy ZWFkX2NvbmRfdGltZWR3YWl0IChwdGhyZWFkX2NvbmRfdCAqX19yZXN0cmljdCBfX2NvbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpfX3Jlc3Ry aWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRy X2luaXQgKHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB0aHJlYWRfY29uZGF0dHJfZGVzdHJveSAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIpIHRo cm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9nZXRwc2hhcmVkIChfX2NvbnN0 IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCAqX19yZXN0cmljdCBfX3BzaGFyZWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRo cm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3 bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3 bG9jaykgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190cnlyZGxvY2sgKHB0 aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja190aW1lZHJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0cmljdCBfX3J3bG9j aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qg dGltZXNwZWMgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19hYnN0aW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193cmxv Y2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0 aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVkd3Jsb2NrIChwdGhyZWFkX3J3 bG9ja190ICpfX3Jlc3RyaWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Fic3RpbWUpIHRocm93ICgpOwoKCgpleHRl cm4gaW50IHB0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp IHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2luaXQgKHB0aHJl YWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIpIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQgKF9fY29uc3QgcHRo cmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHNo YXJlZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZ2V0a2luZF9u cCAoX19jb25zdCBwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcHJlZikgdGhyb3cgKCk7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3Qg Kl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f cHJlZikgdGhyb3cgKCk7CiMgNTA5ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBp bnQgcHRocmVhZF9zcGluX2luaXQgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrLCBpbnQgX19w c2hhcmVkKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX2Rlc3Ryb3kg KHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHB0aHJl YWRfc3Bpbl9sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBwdGhyZWFkX3NwaW5fdHJ5bG9jayAocHRocmVhZF9zcGlubG9ja190ICpfX2xvY2sp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3VubG9jayAocHRocmVhZF9zcGlu bG9ja190ICpfX2xvY2spIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJf aW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3QgX19iYXJyaWVyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19y ZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHVuc2lnbmVk IGludCBfX2NvdW50KSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ry b3kgKHB0aHJlYWRfYmFycmllcl90ICpfX2JhcnJpZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBw dGhyZWFkX2JhcnJpZXJhdHRyX2luaXQgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSB0 aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFk X2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHB0aHJlYWRfYmFy cmllcmF0dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN0cmljdCBfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJp Y3QgX19wc2hhcmVkKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9z ZXRwc2hhcmVkIChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIHRocm93ICgpOwoKZXh0 ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmll cikgdGhyb3cgKCk7CiMgNTU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiBpbnQg cHRocmVhZF9rZXlfY3JlYXRlIChwdGhyZWFkX2tleV90ICpfX2tleSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZvaWQgKCpfX2Rlc3RyX2Z1bmN0aW9uKSAodm9pZCAqKSkgdGhyb3cg KCk7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2tleV9kZWxldGUgKHB0aHJlYWRfa2V5X3QgX19rZXkp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlf dCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9f cG9pbnRlcikgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgKnB0aHJlYWRfZ2V0c3BlY2lmaWMgKHB0 aHJlYWRfa2V5X3QgX19rZXkpIHRocm93ICgpOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQu aCIgMwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250 cm9sLAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9p ZCkpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGlu dCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHB0aHJl YWRfc2V0Y2FuY2VsdHlwZSAoaW50IF9fdHlwZSwgaW50ICpfX29sZHR5cGUpIHRocm93ICgpOwoK CmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwgKHB0aHJlYWRfdCBfX3RocmVhZCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIHRocm93ICgpOwojIDYx MCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVw X3B1c2ggKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcm91dGluZSkgKHZvaWQgKiksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqX19hcmcpIHRocm93ICgpOwoK CgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRocmVhZF9j bGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19leGVjdXRlKSB0aHJvdyAoKTsKIyA2MzEgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgi IDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJl YWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fYXJnKSB0aHJvdyAoKTsKIyA2NDIgIi91 c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3Bf cmVzdG9yZSAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fZXhlY3V0ZSkgdGhyb3cg KCk7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3Ro cmVhZF9pZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19j bG9ja19pZCkgdGhyb3cgKCk7CgoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3RocmVhZC5o IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2lndGhyZWFkLmgiIDMKZXh0ZXJuIGludCBw dGhyZWFkX3NpZ21hc2sgKGludCBfX2hvdywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX25ld21hc2ssCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fb2xkbWFzayl0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkLCBpbnQgX19zaWdubykg dGhyb3cgKCk7CiMgNjU2ICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyA2NzEgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9f cHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19wYXJl bnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2 b2lkKSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFk c19ucCAodm9pZCkgdGhyb3cgKCk7Cgp9CiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1w Yy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIgMiAzCgp0eXBlZGVmIHB0aHJlYWRfa2V5 X3QgX19ndGhyZWFkX2tleV90Owp0eXBlZGVmIHB0aHJlYWRfb25jZV90IF9fZ3RocmVhZF9vbmNl X3Q7CnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fZ3RocmVhZF9tdXRleF90OwoKCgoKCgojcHJh Z21hIHdlYWsgcHRocmVhZF9vbmNlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2tleV9jcmVhdGUKI3By YWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2RlbGV0ZQojcHJhZ21hIHdlYWsgcHRocmVhZF9nZXRzcGVj aWZpYwojcHJhZ21hIHdlYWsgcHRocmVhZF9zZXRzcGVjaWZpYwojcHJhZ21hIHdlYWsgcHRocmVh ZF9jcmVhdGUKCiNwcmFnbWEgd2VhayBwdGhyZWFkX211dGV4X2xvY2sKI3ByYWdtYSB3ZWFrIHB0 aHJlYWRfbXV0ZXhfdHJ5bG9jawojcHJhZ21hIHdlYWsgcHRocmVhZF9tdXRleF91bmxvY2sKIyA4 MCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVs dC5oIiAzCnN0YXRpYyB2b2lkICpfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhy ZWFkX2NyZWF0ZTsKCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkK ewogIHJldHVybiBfX2d0aHJlYWRfYWN0aXZlX3B0ciAhPSAwOwp9CiMgNDM4ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKc3RhdGlj IGlubGluZSBpbnQKX19ndGhyZWFkX29uY2UgKF9fZ3RocmVhZF9vbmNlX3QgKm9uY2UsIHZvaWQg KCpmdW5jKSAodm9pZCkpCnsKICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJu IHB0aHJlYWRfb25jZSAob25jZSwgZnVuYyk7CiAgZWxzZQogICAgcmV0dXJuIC0xOwp9CgpzdGF0 aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2NyZWF0ZSAoX19ndGhyZWFkX2tleV90ICprZXks IHZvaWQgKCpkdG9yKSAodm9pZCAqKSkKewogIHJldHVybiBwdGhyZWFkX2tleV9jcmVhdGUgKGtl eSwgZHRvcik7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfZHRvciAoX19ndGhy ZWFkX2tleV90IGtleSwgdm9pZCAqcHRyKQp7CgogIGlmIChwdHIpCiAgICByZXR1cm4gcHRocmVh ZF9zZXRzcGVjaWZpYyAoa2V5LCAwKTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlu bGluZSBpbnQKX19ndGhyZWFkX2tleV9kZWxldGUgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICBy ZXR1cm4gcHRocmVhZF9rZXlfZGVsZXRlIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgKgpf X2d0aHJlYWRfZ2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXkpCnsKICByZXR1cm4gcHRo cmVhZF9nZXRzcGVjaWZpYyAoa2V5KTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX3Nl dHNwZWNpZmljIChfX2d0aHJlYWRfa2V5X3Qga2V5LCBjb25zdCB2b2lkICpwdHIpCnsKICByZXR1 cm4gcHRocmVhZF9zZXRzcGVjaWZpYyAoa2V5LCBwdHIpOwp9CgpzdGF0aWMgaW5saW5lIGludApf X2d0aHJlYWRfbXV0ZXhfbG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X2xvY2sgKG11dGV4 KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX211 dGV4X3RyeWxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRf YWN0aXZlX3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF90cnlsb2NrIChtdXRleCk7CiAg ZWxzZQogICAgcmV0dXJuIDA7Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9tdXRleF91 bmxvY2sgKF9fZ3RocmVhZF9tdXRleF90ICptdXRleCkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZl X3AgKCkpCiAgICByZXR1cm4gcHRocmVhZF9tdXRleF91bmxvY2sgKG11dGV4KTsKICBlbHNlCiAg ICByZXR1cm4gMDsKfQojIDk5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4 LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHR5cGVkZWYgbG9uZyBz dHJlYW1vZmY7CiAgdHlwZWRlZiBwdHJkaWZmX3Qgc3RyZWFtc2l6ZTsKCiAgdHlwZWRlZiBwdHJk aWZmX3Qgd3N0cmVhbXNpemU7CgogIHR5cGVkZWYgZnBvc190IF9fY19zdHJlYW1wb3M7CgogIHR5 cGVkZWYgX19ndGhyZWFkX211dGV4X3QgX19jX2xvY2s7CgoKCiAgdHlwZWRlZiBGSUxFIF9fY19m aWxlX3R5cGU7CgoKICBzdHJ1Y3QgX19pb3NfZmxhZ3MKICB7CiAgICB0eXBlZGVmIHNob3J0IF9f aW50X3R5cGU7CgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYm9vbGFscGhhID0gMHgw MDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZGVjID0gMHgwMDAyOwogICAgc3Rh dGljIGNvbnN0IF9faW50X3R5cGUgX1NfZml4ZWQgPSAweDAwMDQ7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19oZXggPSAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19pbnRlcm5hbCA9IDB4MDAxMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2xlZnQg PSAweDAwMjA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vY3QgPSAweDAwNDA7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19yaWdodCA9IDB4MDA4MDsKICAgIHN0YXRpYyBj b25zdCBfX2ludF90eXBlIF9TX3NjaWVudGlmaWMgPSAweDAxMDA7CiAgICBzdGF0aWMgY29uc3Qg X19pbnRfdHlwZSBfU19zaG93YmFzZSA9IDB4MDIwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX3Nob3dwb2ludCA9IDB4MDQwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X3Nob3dwb3MgPSAweDA4MDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19za2lwd3Mg PSAweDEwMDA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU191bml0YnVmID0gMHgyMDAw OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfdXBwZXJjYXNlID0gMHg0MDAwOwogICAg c3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYWRqdXN0ZmllbGQgPSAweDAwMjAgfCAweDAwODAg fCAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19iYXNlZmllbGQgPSAweDAw MDIgfCAweDAwNDAgfCAweDAwMDg7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mbG9h dGZpZWxkID0gMHgwMTAwIHwgMHgwMDA0OwoKCiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBf U19iYWRiaXQgPSAweDAxOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfZW9mYml0ID0g MHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZhaWxiaXQgPSAweDA0OwoKCiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19hcHAgPSAweDAxOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfYXRlID0gMHgwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2JpbiA9IDB4MDQ7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19pbiA9IDB4MDg7CiAg ICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19vdXQgPSAweDEwOwogICAgc3RhdGljIGNvbnN0 IF9faW50X3R5cGUgX1NfdHJ1bmMgPSAweDIwOwogIH07Cn0KIyA0MCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL2Zwb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j d2NoYXIuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29u ZmlnLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgMzkg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y3N0ZGRlZi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5o IiAyIDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL3RpbWUuaCIgMSAzCiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfY3RpbWUuaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3RpbWUu aCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6OmNsb2NrX3Q7CiAgdXNpbmcgOjp0aW1lX3Q7 CiAgdXNpbmcgOjp0bTsKCiAgdXNpbmcgOjpjbG9jazsKICB1c2luZyA6OmRpZmZ0aW1lOwogIHVz aW5nIDo6bWt0aW1lOwogIHVzaW5nIDo6dGltZTsKICB1c2luZyA6OmFzY3RpbWU7CiAgdXNpbmcg OjpjdGltZTsKICB1c2luZyA6OmdtdGltZTsKICB1c2luZyA6OmxvY2FsdGltZTsKICB1c2luZyA6 OnN0cmZ0aW1lOwp9CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djaGFyLmgi IDIgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hhci5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3djaGFy LmgiIDIgMwojIDM3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1s aWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9zdGRpby5oIiAxIDMKIyAzOCAiL3Vz ci9pbmNsdWRlL3djaGFyLmgiIDIgMwoKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL3dj aGFyLmgiIDIgMwoKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1 ZGUvd2NoYXIuaCIgMiAzCiMgODUgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgX19t YnN0YXRlX3QgbWJzdGF0ZV90OwojIDEwNSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKc3RydWN0 IHRtOwoKCmV4dGVybiAiQyIgewoKCmV4dGVybiB3Y2hhcl90ICp3Y3NjcHkgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19zcmMpIHRocm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jcHkgKHdj aGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoK CmV4dGVybiB3Y2hhcl90ICp3Y3NjYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zcmMpIHRo cm93ICgpOwoKZXh0ZXJuIHdjaGFyX3QgKndjc25jYXQgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCmV4dGVybiBpbnQgd2NzY21wIChf X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgd2NzbmNtcCAoX19jb25z dCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBpbnQgd2NzY2Fz ZWNtcCAoX19jb25zdCB3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIpIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgd2NzbmNhc2VjbXAgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19j b25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9p bmNsdWRlL3hsb2NhbGUuaCIgMwp0eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBz dHJ1Y3QgbG9jYWxlX2RhdGEgKl9fbG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9y dCBpbnQgKl9fY3R5cGVfYjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBp bnQgKl9fY3R5cGVfdG91cHBlcjsKfSAqX19sb2NhbGVfdDsKIyAxNDQgIi91c3IvaW5jbHVkZS93 Y2hhci5oIiAyIDMKCmV4dGVybiBpbnQgX193Y3NjYXNlY21wX2wgKF9fY29uc3Qgd2NoYXJfdCAq X19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX193Y3NuY2FzZWNtcF9sIChf X2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoK CgoKZXh0ZXJuIGludCB3Y3Njb2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fczEsIF9fY29uc3Qgd2No YXJfdCAqX19zMikgdGhyb3cgKCk7CgoKCmV4dGVybiBzaXplX3Qgd2NzeGZybSAod2NoYXJfdCAq X19yZXN0cmljdCBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQg X193Y3Njb2xsX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90ICpfX3My LAogICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHNpemVfdCBfX3djc3hmcm1fbCAod2NoYXJfdCAqX19zMSwgX19jb25zdCB3Y2hhcl90 ICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90 IF9fbG9jKSB0aHJvdyAoKTsKCgpleHRlcm4gd2NoYXJfdCAqd2NzZHVwIChfX2NvbnN0IHdjaGFy X3QgKl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKZXh0ZXJu IHdjaGFyX3QgKndjc2NociAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgd2NoYXJfdCBfX3djKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHdjaGFyX3Qg Kndjc3JjaHIgKF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIHdjaGFyX3QgX193YykKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiB3Y2hhcl90ICp3Y3Nj aHJudWwgKF9fY29uc3Qgd2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gc2l6ZV90IHdjc2NzcG4gKF9f Y29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHNpemVfdCB3Y3NzcG4g KF9fY29uc3Qgd2NoYXJfdCAqX193Y3MsIF9fY29uc3Qgd2NoYXJfdCAqX19hY2NlcHQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gd2NoYXJfdCAqd2Nz cGJyayAoX19jb25zdCB3Y2hhcl90ICpfX3djcywgX19jb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkK ICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB3Y2hhcl90 ICp3Y3NzdHIgKF9fY29uc3Qgd2NoYXJfdCAqX19oYXlzdGFjaywgX19jb25zdCB3Y2hhcl90ICpf X25lZWRsZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0 ZXJuIHdjaGFyX3QgKndjc3djcyAoX19jb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBfX2NvbnN0 IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NzdG9rICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcywK ICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZGVs aW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fcHRyKSB0 aHJvdyAoKTsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoX19jb25zdCB3Y2hhcl90ICpfX3MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25s ZW4gKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhsZW4pCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gd2NoYXJfdCAqd21lbWNociAo X19jb25zdCB3Y2hhcl90ICpfX3MsIHdjaGFyX3QgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgd21lbWNtcCAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAgICAgICAgX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jcHkgKHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2No YXJfdCAqX19yZXN0cmljdCBfX3MyLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHdj aGFyX3QgKndtZW1tb3ZlICh3Y2hhcl90ICpfX3MxLCBfX2NvbnN0IHdjaGFyX3QgKl9fczIsIHNp emVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1zZXQgKHdjaGFy X3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHdj aGFyX3QgKndtZW1wY3B5ICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fczIsIHNpemVfdCBfX24p CiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBidG93YyAoaW50IF9fYykgdGhyb3cg KCk7CgoKCmV4dGVybiBpbnQgd2N0b2IgKHdpbnRfdCBfX2MpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IG1ic2luaXQgKF9fY29uc3QgbWJzdGF0ZV90ICpfX3BzKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IHNpemVfdCBtYnJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAgICAgICAgICAg ICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIHNpemVfdCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3ApIHRocm93ICgpOwoKCmV4dGVybiBzaXpl X3Qgd2NydG9tYiAoY2hhciAqX19yZXN0cmljdCBfX3MsIHdjaGFyX3QgX193YywKICAgICAgICAg ICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3QgX19wcykgdGhyb3cgKCk7CgoKZXh0 ZXJuIHNpemVfdCBfX21icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp IHRocm93ICgpOwpleHRlcm4gc2l6ZV90IG1icmxlbiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fcywgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqX19yZXN0 cmljdCBfX3BzKSB0aHJvdyAoKTsKIyAyOTggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCmV4dGVy biBzaXplX3QgbWJzcnRvd2NzICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZHN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9f bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0b21icyAoY2hhciAqX19yZXN0cmljdCBf X2RzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19zcmMsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVf dCAqX19yZXN0cmljdCBfX3BzKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gc2l6ZV90IG1ic25ydG93 Y3MgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICoqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbm1jLAogICAgICAgICAg ICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbiwgbWJzdGF0ZV90ICpfX3Jlc3RyaWN0IF9fcHMp IHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IHdjc25ydG9tYnMgKGNoYXIgKl9fcmVzdHJpY3Qg X19kc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICoqX19yZXN0 cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVf dCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICBtYnN0YXRlX3QgKl9fcmVzdHJpY3Qg X19wcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0aCAod2ludF90IF9fYykgdGhy b3cgKCk7CgoKCmV4dGVybiBpbnQgd2Nzd2lkdGggKF9fY29uc3Qgd2NoYXJfdCAqX19zLCBzaXpl X3QgX19uKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZG91YmxlIHdjc3RvZCAoX19jb25zdCB3Y2hh cl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipf X3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHdjc3RvZiAoX19j b25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUg d2NzdG9sZCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsK CgoKCgpleHRlcm4gbG9uZyBpbnQgd2NzdG9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2Vu ZHB0ciwgaW50IF9fYmFzZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCB3 Y3N0b3VsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBf X2Jhc2UpCiAgICAgdGhyb3cgKCk7CgoKCgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcg aW50IHdjc3RvcSAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9f YmFzZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCB3Y3N0b3VxIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmlj dCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSkgdGhyb3cgKCk7CgoKCgoKX19leHRlbnNpb25fXwpleHRlcm4gbG9uZyBsb25nIGludCB3 Y3N0b2xsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqX19yZXN0cmljdCBfX2VuZHB0ciwgaW50IF9fYmFz ZSkKICAgICB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBs b25nIGludCB3Y3N0b3VsbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSkgdGhyb3cgKCk7CiMgNDA3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3Iv aW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDQwOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwoK CgpleHRlcm4gbG9uZyBpbnQgX193Y3N0b2xfbCAoX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2Nh bGVfdCBfX2xvYykgdGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193Y3N0b3Vs X2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBf X2xvYykgdGhyb3cgKCk7CgpfX2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2Nz dG9sbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xvY2FsZV90IF9fbG9j KSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQg X193Y3N0b3VsbF9sIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0 IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZG91Ymxl IF9fd2NzdG9kX2wgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIF9fbG9jYWxl X3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgX193Y3N0b2ZfbCAoX19jb25z dCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHdj aGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIHRocm93 ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9sIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f bG9jYWxlX3QgX19sb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfaW50 ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19n cm91cCkKICAgICB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IF9fd2NzdG9mX2ludGVybmFsIChfX2Nv bnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICB0 aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIF9fd2NzdG9sZF9pbnRlcm5hbCAoX19jb25zdCB3 Y2hhcl90ICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBpbnQgX193Y3N0b2xfaW50ZXJuYWwgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFz ZSwgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX193 Y3N0b3VsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19ucHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKipfX3Jlc3Ry aWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgdGhyb3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0 ZXJuIGxvbmcgbG9uZyBpbnQgX193Y3N0b2xsX2ludGVybmFsIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHdjaGFyX3QgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVy bmFsIChfX2NvbnN0IHdjaGFyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19ncm91cCkgdGhyb3cgKCk7CiMgNTI5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwpleHRl cm4gd2NoYXJfdCAqd2NwY3B5ICh3Y2hhcl90ICpfX2Rlc3QsIF9fY29uc3Qgd2NoYXJfdCAqX19z cmMpIHRocm93ICgpOwoKCgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0 LCBfX2NvbnN0IHdjaGFyX3QgKl9fc3JjLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoK CgoKZXh0ZXJuIGludCBmd2lkZSAoX19GSUxFICpfX2ZwLCBpbnQgX19tb2RlKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4u LikKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHdwcmludGYgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgc3dw cmludGYgKHdjaGFyX3QgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0 aHJvdyAoKSA7CgoKZXh0ZXJuIGludCB2ZndwcmludGYgKF9fRklMRSAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICB0aHJv dyAoKSA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3Qg X19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAg IHRocm93ICgpIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqX19yZXN0cmljdCBf X3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykKICAgICB0aHJvdyAoKSA7CgoKCmV4dGVybiBpbnQgZndzY2FuZiAoX19GSUxFICpfX3Jl c3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJfdCAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIDsKCmV4dGVybiBpbnQgd3NjYW5m IChfX2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICB0aHJvdyAo KSA7CgpleHRlcm4gaW50IHN3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0cmljdCBfX3Ms CiAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fZm9ybWF0 LCAuLi4pCiAgICAgdGhyb3cgKCkgOwoKCgoKZXh0ZXJuIGludCB2ZndzY2FuZiAoX19GSUxFICpf X3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB3Y2hhcl90ICpfX3Jl c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZ3c2NhbmYgKF9fY29uc3Qgd2NoYXJfdCAq X19yZXN0cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykKICAgICB0aHJvdyAoKSA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChfX2NvbnN0IHdjaGFy X3QgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHdjaGFyX3Qg Kl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIHRocm93ICgpIDsKCgoKCmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUg Kl9fc3RyZWFtKTsKZXh0ZXJuIHdpbnRfdCBnZXR3YyAoX19GSUxFICpfX3N0cmVhbSk7CgoKZXh0 ZXJuIHdpbnRfdCBnZXR3Y2hhciAodm9pZCk7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hh cl90IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwpleHRlcm4gd2ludF90IHB1dHdjICh3Y2hhcl90 IF9fd2MsIF9fRklMRSAqX19zdHJlYW0pOwoKCmV4dGVybiB3aW50X3QgcHV0d2NoYXIgKHdjaGFy X3QgX193Yyk7CgoKCgpleHRlcm4gd2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICpfX3Jlc3RyaWN0 IF9fd3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0cmlj dCBfX3N0cmVhbSk7CgoKZXh0ZXJuIGludCBmcHV0d3MgKF9fY29uc3Qgd2NoYXJfdCAqX19yZXN0 cmljdCBfX3dzLAogICAgICAgICAgICAgICAgICAgX19GSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFt KTsKCgoKZXh0ZXJuIHdpbnRfdCB1bmdldHdjICh3aW50X3QgX193YywgX19GSUxFICpfX3N0cmVh bSk7CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSk7 CmV4dGVybiB3aW50X3QgZ2V0d2NoYXJfdW5sb2NrZWQgKHZvaWQpOwoKCmV4dGVybiB3aW50X3Qg ZmdldHdjX3VubG9ja2VkIChfX0ZJTEUgKl9fc3RyZWFtKTsKCgpleHRlcm4gd2ludF90IGZwdXR3 Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKCgoKZXh0ZXJuIHdp bnRfdCBwdXR3Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKTsKZXh0 ZXJuIHdpbnRfdCBwdXR3Y2hhcl91bmxvY2tlZCAod2NoYXJfdCBfX3djKTsKCgoKZXh0ZXJuIHdj aGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqX19yZXN0cmljdCBfX3dzLCBpbnQgX19u LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pOwoKCmV4dGVybiBpbnQgZnB1dHdzX3VubG9ja2VkIChfX2NvbnN0IHdjaGFyX3QgKl9f cmVzdHJpY3QgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqX19yZXN0 cmljdCBfX3N0cmVhbSk7CgoKCgoKCmV4dGVybiBzaXplX3Qgd2NzZnRpbWUgKHdjaGFyX3QgKl9f cmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHdjaGFyX3QgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApOwojIDY4MSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDMKfQojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y2hh ci5oIiAyIDMKIyA1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1ic3RhdGVfdDsKfQojIDEyMiAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jd2NoYXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Ondp bnRfdDsKCiAgdXNpbmcgOjpidG93YzsKICB1c2luZyA6OmZnZXR3YzsKICB1c2luZyA6OmZnZXR3 czsKICB1c2luZyA6OmZwdXR3YzsKICB1c2luZyA6OmZwdXR3czsKICB1c2luZyA6OmZ3aWRlOwog IHVzaW5nIDo6ZndwcmludGY7CiAgdXNpbmcgOjpmd3NjYW5mOwogIHVzaW5nIDo6Z2V0d2M7CiAg dXNpbmcgOjpnZXR3Y2hhcjsKICB1c2luZyA6Om1icmxlbjsKICB1c2luZyA6Om1icnRvd2M7CiAg dXNpbmcgOjptYnNpbml0OwogIHVzaW5nIDo6bWJzcnRvd2NzOwogIHVzaW5nIDo6cHV0d2M7CiAg dXNpbmcgOjpwdXR3Y2hhcjsKICB1c2luZyA6OnN3cHJpbnRmOwogIHVzaW5nIDo6c3dzY2FuZjsK ICB1c2luZyA6OnVuZ2V0d2M7CiAgdXNpbmcgOjp2ZndwcmludGY7CiAgdXNpbmcgOjp2ZndzY2Fu ZjsKICB1c2luZyA6OnZzd3ByaW50ZjsKICB1c2luZyA6OnZzd3NjYW5mOwogIHVzaW5nIDo6dndw cmludGY7CiAgdXNpbmcgOjp2d3NjYW5mOwogIHVzaW5nIDo6d2NydG9tYjsKICB1c2luZyA6Ondj c2NhdDsKICB1c2luZyA6Ondjc2NtcDsKICB1c2luZyA6Ondjc2NvbGw7CiAgdXNpbmcgOjp3Y3Nj cHk7CiAgdXNpbmcgOjp3Y3Njc3BuOwogIHVzaW5nIDo6d2NzZnRpbWU7CiAgdXNpbmcgOjp3Y3Ns ZW47CiAgdXNpbmcgOjp3Y3NuY2F0OwogIHVzaW5nIDo6d2NzbmNtcDsKICB1c2luZyA6Ondjc25j cHk7CiAgdXNpbmcgOjp3Y3NydG9tYnM7CiAgdXNpbmcgOjp3Y3NzcG47CiAgdXNpbmcgOjp3Y3N0 b2Q7CiAgdXNpbmcgOjp3Y3N0b2Y7CiAgdXNpbmcgOjp3Y3N0b2s7CiAgdXNpbmcgOjp3Y3N0b2w7 CiAgdXNpbmcgOjp3Y3N0b3VsOwogIHVzaW5nIDo6d2NzeGZybTsKICB1c2luZyA6OndjdG9iOwog IHVzaW5nIDo6d21lbWNtcDsKICB1c2luZyA6OndtZW1jcHk7CiAgdXNpbmcgOjp3bWVtbW92ZTsK ICB1c2luZyA6OndtZW1zZXQ7CiAgdXNpbmcgOjp3cHJpbnRmOwogIHVzaW5nIDo6d3NjYW5mOwoK ICB1c2luZyA6Ondjc2NocjsKCiAgaW5saW5lIHdjaGFyX3QqCiAgd2NzY2hyKHdjaGFyX3QqIF9f cCwgd2NoYXJfdCBfX2MpCiAgeyByZXR1cm4gd2NzY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf dCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3NwYnJrOwoKICBpbmxpbmUgd2NoYXJfdCoK ICB3Y3NwYnJrKHdjaGFyX3QqIF9fczEsIHdjaGFyX3QqIF9fczIpCiAgeyByZXR1cm4gd2NzcGJy ayhjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwgX19zMik7IH0KCiAgdXNpbmcgOjp3 Y3NyY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NyY2hyKHdjaGFyX3QqIF9fcCwgd2NoYXJf dCBfX2MpCiAgeyByZXR1cm4gd2NzcmNocihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3Ap LCBfX2MpOyB9CgogIHVzaW5nIDo6d2Nzc3RyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3Y3NzdHIo d2NoYXJfdCogX19zMSwgd2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NzdHIoY29uc3RfY2Fz dDxjb25zdCB3Y2hhcl90Kj4oX19zMSksIF9fczIpOyB9CgogIHVzaW5nIDo6d21lbWNocjsKCiAg aW5saW5lIHdjaGFyX3QqCiAgd21lbWNocih3Y2hhcl90KiBfX3AsIHdjaGFyX3QgX19jLCBzaXpl X3QgX19uKQogIHsgcmV0dXJuIHdtZW1jaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19w KSwgX19jLCBfX24pOyB9Cn0KCgoKCgoKCm5hbWVzcGFjZSBfX2dudV9jeHgKewogIHVzaW5nIDo6 d2NzdG9sZDsKICB1c2luZyA6Ondjc3RvbGw7CiAgdXNpbmcgOjp3Y3N0b3VsbDsKfQoKbmFtZXNw YWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xkOwogIHVzaW5nIF9fZ251X2N4eDo6 d2NzdG9sbDsKICB1c2luZyBfX2dudV9jeHg6Ondjc3RvdWxsOwp9CiMgNDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9mcG9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX1N0YXRlVCBfX3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFt b2ZmIF9NX29mZjsKICAgICAgX19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAg X19zdGF0ZV90eXBlCiAgICAgIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAg IHZvaWQKICAgICAgc3RhdGUoX19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoK CiAgICAgIGZwb3MoKTogX01fb2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkp IHsgfQoKICAgICAgZnBvcyhzdHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19z dGF0ZV90eXBlKCkpCiAgICAgIDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAg ICBvcGVyYXRvciBzdHJlYW1vZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZw b3MmCiAgICAgIG9wZXJhdG9yKz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsg cmV0dXJuICp0aGlzOyB9CgogICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBf X29mZikgeyBfTV9vZmYgLT0gX19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAg ICBvcGVyYXRvcisoc3RyZWFtb2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRo aXMpOwogICAgICAgIF9fdCArPSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9Cgog ICAgICBmcG9zCiAgICAgIG9wZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAg ICBmcG9zIF9fdCgqdGhpcyk7CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBf X3Q7CiAgICAgIH0KCiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3Bv cykgY29uc3QKICAgICAgeyByZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAg Ym9vbAogICAgICBvcGVyYXRvciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9vZmYgIT0gX19wb3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01f cG9zaXRpb24oKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01f cG9zaXRpb24oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAg dHlwZWRlZiBmcG9zPG1ic3RhdGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0 ZV90PiB3c3RyZWFtcG9zOwoKfQojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lv c2Z3ZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nm d2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lv czsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90 cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19zdHJlYW1idWY7CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgog ICAgY2xhc3MgYmFzaWNfaXN0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19vc3Ry ZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtOwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAog ICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFz cyBiYXNpY19zdHJpbmdidWY7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAgdHlwZW5hbWUgX0FsbG9j ID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaXN0cmluZ3N0cmVhbTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8 X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+LAogICAgICAgICAgIHR5 cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmlu Z3N0cmVhbTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0g Y2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19maWxlYnVmOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX2lmc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2lj X29mc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZzdHJlYW07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgaXN0cmVhbWJ1Zl9pdGVyYXRvcjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+CiAgICBjbGFz cyBvc3RyZWFtYnVmX2l0ZXJhdG9yOwoKCgogIGNsYXNzIGlvc19iYXNlOwoKCiAgdHlwZWRlZiBi YXNpY19pb3M8Y2hhcj4gaW9zOwogIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPGNoYXI+IHN0cmVh bWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08Y2hhcj4gaXN0cmVhbTsKICB0eXBlZGVmIGJh c2ljX29zdHJlYW08Y2hhcj4gb3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2lvc3RyZWFtPGNoYXI+ IGlvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPGNoYXI+IHN0cmluZ2J1ZjsKICB0 eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08Y2hhcj4gaXN0cmluZ3N0cmVhbTsKICB0eXBlZGVm IGJhc2ljX29zdHJpbmdzdHJlYW08Y2hhcj4gb3N0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2lj X3N0cmluZ3N0cmVhbTxjaGFyPiBzdHJpbmdzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19maWxlYnVm PGNoYXI+IGZpbGVidWY7CiAgdHlwZWRlZiBiYXNpY19pZnN0cmVhbTxjaGFyPiBpZnN0cmVhbTsK ICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPGNoYXI+IG9mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNf ZnN0cmVhbTxjaGFyPiBmc3RyZWFtOwoKCiAgdHlwZWRlZiBiYXNpY19pb3M8d2NoYXJfdD4gd2lv czsKICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiB3c3RyZWFtYnVmOwogIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiB3aXN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29zdHJl YW08d2NoYXJfdD4gd29zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19pb3N0cmVhbTx3Y2hhcl90PiB3 aW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8d2NoYXJfdD4gd3N0cmluZ2J1ZjsK ICB0eXBlZGVmIGJhc2ljX2lzdHJpbmdzdHJlYW08d2NoYXJfdD4gd2lzdHJpbmdzdHJlYW07CiAg dHlwZWRlZiBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdvc3RyaW5nc3RyZWFtOwogIHR5 cGVkZWYgYmFzaWNfc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdzdHJpbmdzdHJlYW07CiAgdHlwZWRl ZiBiYXNpY19maWxlYnVmPHdjaGFyX3Q+IHdmaWxlYnVmOwogIHR5cGVkZWYgYmFzaWNfaWZzdHJl YW08d2NoYXJfdD4gd2lmc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08d2NoYXJfdD4g d29mc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfZnN0cmVhbTx3Y2hhcl90PiB3ZnN0cmVhbTsKCn0K IyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4 Y2VwdGlvbiIgMwpleHRlcm4gIkMrKyIgewoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKCiAgY2xhc3Mg ZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGV4Y2VwdGlvbigpIHRocm93KCkgeyB9CiAgICB2 aXJ0dWFsIH5leGNlcHRpb24oKSB0aHJvdygpOwoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqIHdo YXQoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAgY2xhc3MgYmFkX2V4Y2VwdGlvbiA6IHB1Ymxp YyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2V4Y2VwdGlvbigpIHRocm93KCkgeyB9 CiAgICB2aXJ0dWFsIH5iYWRfZXhjZXB0aW9uKCkgdGhyb3coKTsKICB9OwoKCiAgdHlwZWRlZiB2 b2lkICgqdGVybWluYXRlX2hhbmRsZXIpICgpOwoKICB0eXBlZGVmIHZvaWQgKCp1bmV4cGVjdGVk X2hhbmRsZXIpICgpOwoKCiAgdGVybWluYXRlX2hhbmRsZXIgc2V0X3Rlcm1pbmF0ZSh0ZXJtaW5h dGVfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdGVybWluYXRlKCkgX19hdHRyaWJ1dGVfXyAo KF9fbm9yZXR1cm5fXykpOwoKCiAgdW5leHBlY3RlZF9oYW5kbGVyIHNldF91bmV4cGVjdGVkKHVu ZXhwZWN0ZWRfaGFuZGxlcikgdGhyb3coKTsKCgogIHZvaWQgdW5leHBlY3RlZCgpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKIyA5NSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRp b24iIDMKICBib29sIHVuY2F1Z2h0X2V4Y2VwdGlvbigpIHRocm93KCk7Cn0KCn0KIyA0MSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvY2hhcl90cmFpdHMuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nz dHJpbmcuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkZGVmLmgiIDEgMwojIDM4 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMiAzCiMgNDAgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N0 cmluZy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDIgMwoKZXh0 ZXJuICJDIiB7CgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w LjMvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAz CgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qg dm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQg Km1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJp Y3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3QgX19uKQogICAg IHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNldCAodm9pZCAqX19zLCBpbnQgX19jLCBz aXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IG1lbWNtcCAoX19jb25zdCB2b2lkICpf X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZvaWQgKm1lbWNociAoX19jb25zdCB2b2lk ICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpf X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikK ICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgpleHRlcm4gY2hh ciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqc3RyY2F0 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN0cmNtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5jbXAgKF9fY29uc3QgY2hhciAqX19zMSwg X19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3RyY29sbCAoX19jb25zdCBjaGFyICpfX3Mx LCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAog ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYywgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAxIDMK IyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJuIGludCBfX3N0cmNvbGxf bCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIF9fbG9jYWxlX3QgX19s KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHNpemVf dCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLCBzaXplX3Qg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7 CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9fcykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKnN0cm5kdXAgKF9f Y29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRl cm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycmNociAoX19jb25zdCBj aGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJj c3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCkKICAgICB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNwbiAo X19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25z dCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIg Kl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJjYXNlc3RyIChfX2NvbnN0 IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgdGhyb3cgKCkg X19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIgKl9fcmVzdHJpY3QgX19z LAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZGVs aW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX3NhdmVfcHRy KSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19yZXN0cmljdCBfX3Ms IF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gdm9p ZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVfdCBfX2hheXN0YWNrbGVu LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVlZGxlLCBzaXplX3QgX19u ZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4 dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24p IHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNp emVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJsZW4gKF9fY29uc3QgY2hh ciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCmV4dGVybiBz aXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAqc3RyZXJy b3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAo KTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgdGhyb3cg KCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9fc3JjLCB2b2lkICpfX2Rl c3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3Ms IHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAoX19jb25zdCB2b2lkICpf X3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZmcyAoaW50IF9faSkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgoKCgpleHRlcm4gaW50IGZmc2wgKGxvbmcg aW50IF9fbCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0KSk7CgpfX2V4dGVuc2lvbl9f IGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoY29uc3QpKTsKCgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBj aGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpf X3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19j b25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVf XykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21wX2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19j b25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg X19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChjaGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3As CiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRl cm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAg ICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpfX3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3Qg X19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJm cnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9p ZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1l IChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRocm93ICgpOwojIDM2MyAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAzCn0KIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RyaW5n LmgiIDIgMwojIDY2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdHJpbmcuaCIgMwpu YW1lc3BhY2Ugc3RkCnsKICB1c2luZyA6Om1lbWNweTsKICB1c2luZyA6Om1lbW1vdmU7CiAgdXNp bmcgOjpzdHJjcHk7CiAgdXNpbmcgOjpzdHJuY3B5OwogIHVzaW5nIDo6c3RyY2F0OwogIHVzaW5n IDo6c3RybmNhdDsKICB1c2luZyA6Om1lbWNtcDsKICB1c2luZyA6OnN0cmNtcDsKICB1c2luZyA6 OnN0cmNvbGw7CiAgdXNpbmcgOjpzdHJuY21wOwogIHVzaW5nIDo6c3RyeGZybTsKICB1c2luZyA6 OnN0cmNzcG47CiAgdXNpbmcgOjpzdHJzcG47CiAgdXNpbmcgOjpzdHJ0b2s7CiAgdXNpbmcgOjpt ZW1zZXQ7CiAgdXNpbmcgOjpzdHJlcnJvcjsKICB1c2luZyA6OnN0cmxlbjsKCiAgdXNpbmcgOjpt ZW1jaHI7CgogIGlubGluZSB2b2lkKgogIG1lbWNocih2b2lkKiBfX3AsIGludCBfX2MsIHNpemVf dCBfX24pCiAgeyByZXR1cm4gbWVtY2hyKGNvbnN0X2Nhc3Q8Y29uc3Qgdm9pZCo+KF9fcCksIF9f YywgX19uKTsgfQoKICB1c2luZyA6OnN0cmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RyY2hyKGNo YXIqIF9fczEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cmNocihjb25zdF9jYXN0 PGNvbnN0IGNoYXIqPihfX3MxKSwgX19uKTsgfQoKICB1c2luZyA6OnN0cnBicms7CgogIGlubGlu ZSBjaGFyKgogIHN0cnBicmsoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVy biBfX2J1aWx0aW5fc3RycGJyayhjb25zdF9jYXN0PGNvbnN0IGNoYXIqPihfX3MxKSwgX19zMik7 IH0KCiAgdXNpbmcgOjpzdHJyY2hyOwoKICBpbmxpbmUgY2hhcioKICBzdHJyY2hyKGNoYXIqIF9f czEsIGludCBfX24pCiAgeyByZXR1cm4gX19idWlsdGluX3N0cnJjaHIoY29uc3RfY2FzdDxjb25z dCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJzdHI7CgogIGlubGluZSBjaGFy KgogIHN0cnN0cihjaGFyKiBfX3MxLCBjb25zdCBjaGFyKiBfX3MyKQogIHsgcmV0dXJuIF9fYnVp bHRpbl9zdHJzdHIoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fczIpOyB9Cn0KIyA0 MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NoYXJfdHJhaXRzLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9mcG9zLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvY2hhcl90cmFpdHMuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxj bGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOwoKICAgICAgdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwog ICAgICB0eXBlZGVmIHN0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYg b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0 aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9f YzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxKGNv bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy biBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNvbnN0IGNoYXJf dHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxIDwg X19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNoYXJfdHlwZSog X19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7CiAgICAgICAg Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19uOyArK19faSkKICAgICAgICAgIGlmICghZXEo X19zMVtfX2ldLCBfX3MyW19faV0pKQogICAgICAgICAgICByZXR1cm4gbHQoX19zMVtfX2ldLCBf X3MyW19faV0pID8gLTEgOiAxOwogICAgICAgIHJldHVybiAwOwogICAgICB9CgogICAgICBzdGF0 aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9fcykKICAgICAgewogICAg ICAgIGNvbnN0IGNoYXJfdHlwZSogX19wID0gX19zOwogICAgICAgIHdoaWxlICgqX19wKSArK19f cDsKICAgICAgICByZXR1cm4gKF9fcCAtIF9fcyk7CiAgICAgIH0KCiAgICAgIHN0YXRpYyBjb25z dCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24s IGNvbnN0IGNoYXJfdHlwZSYgX19hKQogICAgICB7CiAgICAgICAgZm9yIChjb25zdCBjaGFyX3R5 cGUqIF9fcCA9IF9fczsgc2l6ZV90KF9fcCAtIF9fcykgPCBfX247ICsrX19wKQogICAgICAgICAg aWYgKCpfX3AgPT0gX19hKSByZXR1cm4gX19wOwogICAgICAgIHJldHVybiAwOwogICAgICB9Cgog ICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3Qg Y2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJldHVybiAoY2hhcl90eXBlKikg bWVtbW92ZShfX3MxLCBfX3MyLCBfX24gKiBzaXplb2YoY2hhcl90eXBlKSk7IH0KCiAgICAgIHN0 YXRpYyBjaGFyX3R5cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5 cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIChjaGFyX3R5cGUqKSBtZW1jcHko X19zMSwgX19zMiwgX19uICogc2l6ZW9mKGNoYXJfdHlwZSkpOyB9CgogICAgICBzdGF0aWMgY2hh cl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlw ZSBfX2EpCiAgICAgIHsKICAgICAgICBmb3IgKGNoYXJfdHlwZSogX19wID0gX19zOyBfX3AgPCBf X3MgKyBfX247ICsrX19wKQogICAgICAgICAgYXNzaWduKCpfX3AsIF9fYSk7CiAgICAgICAgcmV0 dXJuIF9fczsKICAgICAgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5 cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gY2hhcl90eXBlKF9fYyk7IH0K CiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUm IF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAg ZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKQog ICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg ICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oLTEpOyB9CgogICAgICBzdGF0 aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJl dHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IGludF90eXBlKDApIDogX19jOyB9CiAgICB9 OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPgogICAgewogICAg ICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGludCBpbnRfdHlwZTsKICAg ICAgdHlwZWRlZiBzdHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9m Zl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBzdGF0ZV90eXBlOwoKICAgICAgc3RhdGlj IHZvaWQKICAgICAgYXNzaWduKGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2My KQogICAgICB7IF9fYzEgPSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBlcShjb25z dCBjaGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4g X19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgYm9vbAogICAgICBsdChjb25zdCBjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19jMSA8IF9f YzI7IH0KCiAgICAgIHN0YXRpYyBpbnQKICAgICAgY29tcGFyZShjb25zdCBjaGFyX3R5cGUqIF9f czEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gbWVt Y21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3Ro KGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiBzdHJsZW4oX19zKTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBjaGFyX3R5cGUqIF9f cywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsgcmV0dXJuIHN0YXRp Y19jYXN0PGNvbnN0IGNoYXJfdHlwZSo+KG1lbWNocihfX3MsIF9fYSwgX19uKSk7IH0KCiAgICAg IHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFy X3R5cGUqIF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJf dHlwZSo+KG1lbW1vdmUoX19zMSwgX19zMiwgX19uKSk7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIGNvcHkoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KG1lbWNweShf X3MxLCBfX3MyLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgYXNzaWdu KGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjaGFyX3R5cGUgX19hKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1zZXQoX19zLCBfX2EsIF9fbikpOyB9CgogICAg ICBzdGF0aWMgY2hhcl90eXBlCiAgICAgIHRvX2NoYXJfdHlwZShjb25zdCBpbnRfdHlwZSYgX19j KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGU+KF9fYyk7IH0KCgoKICAgICAg c3RhdGljIGludF90eXBlCiAgICAgIHRvX2ludF90eXBlKGNvbnN0IGNoYXJfdHlwZSYgX19jKQog ICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4oc3RhdGljX2Nhc3Q8dW5zaWduZWQg Y2hhcj4oX19jKSk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVxX2ludF90eXBlKGNvbnN0 IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAgICAgeyByZXR1cm4gX19j MSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgZW9mKCkgeyByZXR1cm4g c3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgtMSkpOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAg ICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQogICAgICB7IHJldHVybiAoX19jID09IGVv ZigpKSA/IDAgOiBfX2M7IH0KICB9OwoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBjaGFyX3Ry YWl0czx3Y2hhcl90PgogICAgewogICAgICB0eXBlZGVmIHdjaGFyX3QgY2hhcl90eXBlOwogICAg ICB0eXBlZGVmIHdpbnRfdCBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5 cGU7CiAgICAgIHR5cGVkZWYgd3N0cmVhbXBvcyBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0 YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihjaGFyX3R5 cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19jMjsgfQoK ICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAgc3Rh dGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUm IF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50CiAg ICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIs IHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIHdtZW1jbXAoX19zMSwgX19zMiwgX19uKTsgfQoK ICAgICAgc3RhdGljIHNpemVfdAogICAgICBsZW5ndGgoY29uc3QgY2hhcl90eXBlKiBfX3MpCiAg ICAgIHsgcmV0dXJuIHdjc2xlbihfX3MpOyB9CgogICAgICBzdGF0aWMgY29uc3QgY2hhcl90eXBl KgogICAgICBmaW5kKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzaXplX3QgX19uLCBjb25zdCBjaGFy X3R5cGUmIF9fYSkKICAgICAgeyByZXR1cm4gd21lbWNocihfX3MsIF9fYSwgX19uKTsgfQoKICAg ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgbW92ZShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo YXJfdHlwZSogX19zMiwgaW50X3R5cGUgX19uKQogICAgICB7IHJldHVybiB3bWVtbW92ZShfX3Mx LCBfX3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl dHVybiB3bWVtY3B5KF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkK ICAgICAgeyByZXR1cm4gd21lbXNldChfX3MsIF9fYSwgX19uKTsgfQoKICAgICAgc3RhdGljIGNo YXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykgeyByZXR1cm4g Y2hhcl90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICB0b19pbnRfdHlw ZShjb25zdCBjaGFyX3R5cGUmIF9fYykgeyByZXR1cm4gaW50X3R5cGUoX19jKTsgfQoKICAgICAg c3RhdGljIGJvb2wKICAgICAgZXFfaW50X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0 IGludF90eXBlJiBfX2MyKQogICAgICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0 YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKSB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnRfdHlwZT4o KDB4ZmZmZmZmZmZ1KSk7IH0KCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAgICBub3RfZW9mKGNv bnN0IGludF90eXBlJiBfX2MpCiAgICAgIHsgcmV0dXJuIGVxX2ludF90eXBlKF9fYywgZW9mKCkp ID8gMCA6IF9fYzsgfQogIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBzdHJ1Y3QgX0NoYXJfdHJhaXRzX21hdGNoCiAgICB7CiAgICAgIF9DaGFy VCBfTV9jOwogICAgICBfQ2hhcl90cmFpdHNfbWF0Y2goX0NoYXJUIGNvbnN0JiBfX2MpIDogX01f YyhfX2MpIHsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRvcigpKF9DaGFyVCBjb25zdCYgX19h KSB7IHJldHVybiBfVHJhaXRzOjplcShfTV9jLCBfX2EpOyB9CiAgICB9Owp9CiMgNDIgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGRfY3N0ZGlvLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgi IDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDMKCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAx IDMKIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDEg MwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9j YWxlLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdHlwZWRlZiBpbnQqIF9fY19sb2NhbGU7Cn0KIyA0 MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NsaW1pdHMuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vz ci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N5c2xpbWl0cy5o IiAxIDMKCgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4z L2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEyNSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbWl0 cy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUvbGltaXRzLmgiIDIgMwojIDE0NCAi L3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcG9zaXgxX2xp bS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4MV9saW0uaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMv bG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGludXgvbGltaXRzLmgiIDEgMwojIDM3 ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAzCiMgMTI3ICIvdXNyL2luY2x1ZGUv Yml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMK CgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGltLmgiIDEgMwojIDE0OSAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0u aCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVuX2xpbS5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvYml0cy94b3Bl bl9saW0uaCIgMiAzCiMgMTM2ICIvdXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDEzNyAiL3Vzci9pbmNsdWRlL2Jp dHMveG9wZW5fbGltLmgiIDIgMwojIDE1MyAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAx MjYgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMvaW5jbHVkZS9saW1p dHMuaCIgMiAzCiMgOCAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9p bmNsdWRlL3N5c2xpbWl0cy5oIiAyIDMKIyAxMiAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAuMy9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jbGltaXRzLmgiIDIgMwojIDQyICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvbG9jYWxlZndkLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3Ry aW5nLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAz CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdHJpbmdmd2QuaCIgMSAzCiMgNDEgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pdGVyYXRvci5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy YXRvci5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2MrK2NvbmZpZy5oIiAxIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVy YXRvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIg MSAzCiMgNjIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3Nmd2QuaCIgMSAzCiMgNjMgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY5ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMwoKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNzEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV90eXBlcy5oIiAyIDMKCgpuYW1lc3BhY2Ug c3RkCnsKCnN0cnVjdCBpbnB1dF9pdGVyYXRvcl90YWcge307CnN0cnVjdCBvdXRwdXRfaXRlcmF0 b3JfdGFnIHt9OwpzdHJ1Y3QgZm9yd2FyZF9pdGVyYXRvcl90YWcgOiBwdWJsaWMgaW5wdXRfaXRl cmF0b3JfdGFnIHt9OwpzdHJ1Y3QgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgOiBwdWJsaWMg Zm9yd2FyZF9pdGVyYXRvcl90YWcge307CnN0cnVjdCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZyA6IHB1YmxpYyBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyB7fTsKCgoKCgoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3IgewogIHR5 cGVkZWYgaW5wdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgX1Rw IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfRGlzdGFuY2UgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07CgpzdHJ1Y3Qgb3V0 cHV0X2l0ZXJhdG9yIHsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0 ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNl Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPiBzdHJ1Y3QgZm9yd2Fy ZF9pdGVyYXRvciB7CiAgdHlwZWRlZiBmb3J3YXJkX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRl Z29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZl cmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIF9UcCYgcmVmZXJl bmNlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4gc3RydWN0IGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKICB0eXBlZGVm IF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAqIHBvaW50ZXI7CiAgdHlw ZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9EaXN0 YW5jZT4gc3RydWN0IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3IgewogIHR5cGVkZWYgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAgdmFsdWVf dHlwZTsKICB0eXBlZGVmIF9EaXN0YW5jZSBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq IHBvaW50ZXI7CiAgdHlwZWRlZiBfVHAmIHJlZmVyZW5jZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBf Q2F0ZWdvcnksIGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAg ICAgY2xhc3MgX1BvaW50ZXIgPSBfVHAqLCBjbGFzcyBfUmVmZXJlbmNlID0gX1RwJj4Kc3RydWN0 IGl0ZXJhdG9yIHsKICB0eXBlZGVmIF9DYXRlZ29yeSBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBl ZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rpc3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsK ICB0eXBlZGVmIF9Qb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5j ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CnN0cnVjdCBpdGVyYXRvcl90cmFpdHMg ewogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjppdGVyYXRvcl9jYXRlZ29yeSBpdGVyYXRv cl9jYXRlZ29yeTsKICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6dmFsdWVfdHlwZSB2YWx1 ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlm ZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpwb2ludGVyIHBvaW50 ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfSXRlcmF0b3I6OnJlZmVyZW5jZSByZWZlcmVuY2U7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPF9UcCo+IHsKICB0 eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBl OwogIHR5cGVkZWYgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgX1RwJiByZWZlcmVuY2U7Cn07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgaXRlcmF0b3JfdHJhaXRzPGNvbnN0IF9UcCo+IHsK ICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90 eXBlOwogIHR5cGVkZWYgY29uc3QgX1RwKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwJiBy ZWZlcmVuY2U7Cn07CiMgMTcyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfdHlwZXMuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeQpfX2l0ZXJhdG9yX2NhdGVn b3J5KGNvbnN0IF9JdGVyJikKewogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9J dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0NhdGVnb3J5OwogIHJldHVybiBfQ2F0ZWdvcnkoKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRz PF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpfX2Rpc3RhbmNlX3R5cGUoY29uc3QgX0l0ZXImKQp7 CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcj46OmRp ZmZlcmVuY2VfdHlwZSo+KDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1ZV90eXBlKgpfX3ZhbHVlX3R5cGUoY29u c3QgX0l0ZXImKQp7CiAgcmV0dXJuIHN0YXRpY19jYXN0PHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSXRlcj46OnZhbHVlX3R5cGUqPigwKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxp bmUgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkKaXRl cmF0b3JfY2F0ZWdvcnkoY29uc3QgX0l0ZXImIF9faSkgeyByZXR1cm4gX19pdGVyYXRvcl9jYXRl Z29yeShfX2kpOyB9CgoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyPgppbmxpbmUgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9JdGVyPjo6ZGlmZmVyZW5jZV90eXBlKgpkaXN0YW5jZV90eXBlKGNvbnN0 IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fZGlzdGFuY2VfdHlwZShfX2kpOyB9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0l0ZXI+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+Ojp2YWx1 ZV90eXBlKgp2YWx1ZV90eXBlKGNvbnN0IF9JdGVyJiBfX2kpIHsgcmV0dXJuIF9fdmFsdWVfdHlw ZShfX2kpOyB9Cgp9CiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXRlcmF0b3Iu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1 bmNzLmgiIDEgMwojIDY5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jh c2VfZnVuY3MuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAz CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25m aWcuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgi IDIgMwojIDcwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVu Y3MuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19kaXN0YW5jZShfSW5wdXRJdGVy YXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlJiBfX24sIGlucHV0X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg d2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7ICsrX19maXJzdDsgKytfX247IH0KfQoKdGVtcGxh dGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUg dm9pZCBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlJiBfX24sIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogIF9fbiArPSBfX2xhc3QgLSBfX2ZpcnN0Owp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZv aWQgZGlzdGFuY2UoX0lucHV0SXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAg X0lucHV0SXRlcmF0b3IgX19sYXN0LCBfRGlzdGFuY2UmIF9fbikKewoKICBfX2Rpc3RhbmNlKF9f Zmlyc3QsIF9fbGFzdCwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQpfX2Rpc3RhbmNlKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgaW5wdXRfaXRlcmF0b3JfdGFnKQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcmF0b3I+ OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICsrX19maXJzdDsgKytfX247CiAgfQogIHJldHVybiBfX247Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CmlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCl9fZGlzdGFuY2UoX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgcmV0dXJuIF9fbGFzdCAtIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVy YXRvcj46OmRpZmZlcmVuY2VfdHlwZQpkaXN0YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QpCnsKCiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeQogICAgX0NhdGVnb3J5OwogIHJl dHVybiBfX2Rpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX0NhdGVnb3J5KCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2FkdmFu Y2UoX0lucHV0SXRlciYgX19pLCBfRGlzdGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgd2hpbGUgKF9fbi0tKSArK19faTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIHZvaWQgX19hZHZhbmNl KF9CaWRpcmVjdGlvbmFsSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogIGlmIChfX24gPiAwKQogICAgd2hpbGUgKF9fbi0tKSArK19faTsKICBlbHNl CiAgICB3aGlsZSAoX19uKyspIC0tX19pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vz c0l0ZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fYWR2YW5jZShfUmFuZG9t QWNjZXNzSXRlcmF0b3ImIF9faSwgX0Rpc3RhbmNlIF9fbiwKICAgICAgICAgICAgICAgICAgICAg IHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogIF9faSArPSBfX247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3Mg X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBhZHZhbmNlKF9JbnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0 YW5jZSBfX24pCnsKCiAgX19hZHZhbmNlKF9faSwgX19uLCBpdGVyYXRvcl9jYXRlZ29yeShfX2kp KTsKfQoKfQojIDY1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2l0ZXJhdG9yLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMSAzCiMgNjMg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgpjbGFzcyBiYWNrX2luc2VydF9pdGVyYXRv ciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVm IF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFn IGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYg dm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2 b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgYmFja19pbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5l ciYgX194KSA6IGNvbnRhaW5lcigmX194KSB7fQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9Db250 YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVyOjp2YWx1ZV90eXBl JiBfX3ZhbHVlKSB7CiAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgIHJldHVy biAqdGhpczsKICB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9y KigpIHsgcmV0dXJuICp0aGlzOyB9CiAgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4m IG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQogIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yPF9D b250YWluZXI+JiBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRl IDxjbGFzcyBfQ29udGFpbmVyPgppbmxpbmUgYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5l cj4gYmFja19pbnNlcnRlcihfQ29udGFpbmVyJiBfX3gpIHsKICByZXR1cm4gYmFja19pbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+ CmNsYXNzIGZyb250X2luc2VydF9pdGVyYXRvciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBj b250YWluZXI7CnB1YmxpYzoKICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVyX3R5cGU7CiAg dHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYg dm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRl ZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5jZTsKCiAgZXhwbGljaXQgZnJv bnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXImIF9feCkgOiBjb250YWluZXIoJl9feCkge30K ICBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mCiAgb3BlcmF0b3I9KGNvbnN0IHR5 cGVuYW1lIF9Db250YWluZXI6OnZhbHVlX3R5cGUmIF9fdmFsdWUpIHsKICAgIGNvbnRhaW5lci0+ cHVzaF9mcm9udChfX3ZhbHVlKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgZnJvbnRfaW5zZXJ0 X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQogIGZy b250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0 aGlzOyB9CiAgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+JiBvcGVyYXRvcisrKGlu dCkgeyByZXR1cm4gKnRoaXM7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQ29udGFpbmVyPgppbmxp bmUgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGZyb250X2luc2VydGVyKF9Db250 YWluZXImIF9feCkgewogIHJldHVybiBmcm9udF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4o X194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Db250YWluZXI+CmNsYXNzIGluc2VydF9pdGVyYXRv ciB7CnByb3RlY3RlZDoKICBfQ29udGFpbmVyKiBjb250YWluZXI7CiAgdHlwZW5hbWUgX0NvbnRh aW5lcjo6aXRlcmF0b3IgaXRlcjsKcHVibGljOgogIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWlu ZXJfdHlwZTsKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlw ZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBlZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBp bnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVy YXRvciBfX2kpCiAgICA6IGNvbnRhaW5lcigmX194KSwgaXRlcihfX2kpIHt9CiAgaW5zZXJ0X2l0 ZXJhdG9yPF9Db250YWluZXI+JgogIG9wZXJhdG9yPShjb25zdCB0eXBlbmFtZSBfQ29udGFpbmVy Ojp2YWx1ZV90eXBlJiBfX3ZhbHVlKSB7CiAgICBpdGVyID0gY29udGFpbmVyLT5pbnNlcnQoaXRl ciwgX192YWx1ZSk7CiAgICArK2l0ZXI7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGluc2VydF9p dGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KICBpbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4mIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQog IGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPiYgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0 aGlzOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0NvbnRhaW5lciwgY2xhc3MgX0l0ZXJhdG9yPgpp bmxpbmUKaW5zZXJ0X2l0ZXJhdG9yPF9Db250YWluZXI+IGluc2VydGVyKF9Db250YWluZXImIF9f eCwgX0l0ZXJhdG9yIF9faSkKewogIHR5cGVkZWYgdHlwZW5hbWUgX0NvbnRhaW5lcjo6aXRlcmF0 b3IgX19pdGVyOwogIHJldHVybiBpbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194LCBfX2l0 ZXIoX19pKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXJhdG9yLCBjbGFz cyBfVHAsIGNsYXNzIF9SZWZlcmVuY2UgPSBfVHAmLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl ID0gcHRyZGlmZl90PgpjbGFzcyByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3IgewogIHR5 cGVkZWYgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFsSXRlcmF0 b3IsIF9UcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmVmZXJl bmNlLCBfRGlzdGFuY2U+IF9TZWxmOwpwcm90ZWN0ZWQ6CiAgX0JpZGlyZWN0aW9uYWxJdGVyYXRv ciBjdXJyZW50OwpwdWJsaWM6CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBp dGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgX0Rp c3RhbmNlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIF9UcCogcG9pbnRlcjsKICB0eXBlZGVm IF9SZWZlcmVuY2UgcmVmZXJlbmNlOwoKICByZXZlcnNlX2JpZGlyZWN0aW9uYWxfaXRlcmF0b3Io KSB7fQogIGV4cGxpY2l0IHJldmVyc2VfYmlkaXJlY3Rpb25hbF9pdGVyYXRvcihfQmlkaXJlY3Rp b25hbEl0ZXJhdG9yIF9feCkKICAgIDogY3VycmVudChfX3gpIHt9CiAgX0JpZGlyZWN0aW9uYWxJ dGVyYXRvciBiYXNlKCkgY29uc3QgeyByZXR1cm4gY3VycmVudDsgfQogIF9SZWZlcmVuY2Ugb3Bl cmF0b3IqKCkgY29uc3QgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyYXRvciBfX3RtcCA9IGN1cnJl bnQ7CiAgICByZXR1cm4gKi0tX190bXA7CiAgfQogIHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0 IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9CiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAt LWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7 CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgLS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1w OwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsKICAgICsrY3VycmVudDsKICAgIHJldHVybiAq dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRo aXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwoKdGVtcGxhdGUgPGNs YXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp bmUgYm9vbCBvcGVyYXRvcj09KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJz ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg X195KQp7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9CaUl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX1JlZiwgY2xhc3MgX0Rpc3RhbmNlPgppbmxp bmUgYm9vbCBvcGVyYXRvciE9KAogICAgY29uc3QgcmV2ZXJzZV9iaWRpcmVjdGlvbmFsX2l0ZXJh dG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYgX194LAogICAgY29uc3QgcmV2ZXJz ZV9iaWRpcmVjdGlvbmFsX2l0ZXJhdG9yPF9CaUl0ZXIsIF9UcCwgX1JlZiwgX0Rpc3RhbmNlPiYg X195KQp7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KIyAyMjIgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9yPgpjbGFz cyByZXZlcnNlX2l0ZXJhdG9yCnsKcHJvdGVjdGVkOgogIF9JdGVyYXRvciBjdXJyZW50OwpwdWJs aWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6aXRlcmF0 b3JfY2F0ZWdvcnkKICAgICAgICAgIGl0ZXJhdG9yX2NhdGVnb3J5OwogIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgIHZhbHVl X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlm ZmVyZW5jZV90eXBlCiAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlcgogICAgICAgICAgcG9pbnRlcjsK ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjpyZWZlcmVuY2UK ICAgICAgICAgIHJlZmVyZW5jZTsKCiAgdHlwZWRlZiBfSXRlcmF0b3IgaXRlcmF0b3JfdHlwZTsK ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiBfU2VsZjsKCnB1YmxpYzoKICBy ZXZlcnNlX2l0ZXJhdG9yKCkge30KICBleHBsaWNpdCByZXZlcnNlX2l0ZXJhdG9yKGl0ZXJhdG9y X3R5cGUgX194KSA6IGN1cnJlbnQoX194KSB7fQoKICByZXZlcnNlX2l0ZXJhdG9yKGNvbnN0IF9T ZWxmJiBfX3gpIDogY3VycmVudChfX3guY3VycmVudCkge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX0l0 ZXI+CiAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194 KQogICAgOiBjdXJyZW50KF9feC5iYXNlKCkpIHt9CgogIGl0ZXJhdG9yX3R5cGUgYmFzZSgpIGNv bnN0IHsgcmV0dXJuIGN1cnJlbnQ7IH0KICByZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29uc3Qgewog ICAgX0l0ZXJhdG9yIF9fdG1wID0gY3VycmVudDsKICAgIHJldHVybiAqLS1fX3RtcDsKICB9CiAg cG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAg X1NlbGYmIG9wZXJhdG9yKysoKSB7CiAgICAtLWN1cnJlbnQ7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg LS1jdXJyZW50OwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3ItLSgpIHsK ICAgICsrY3VycmVudDsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItLShp bnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICArK2N1cnJlbnQ7CiAgICByZXR1cm4g X190bXA7CiAgfQoKICBfU2VsZiBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3Qg ewogICAgcmV0dXJuIF9TZWxmKGN1cnJlbnQgLSBfX24pOwogIH0KICBfU2VsZiYgb3BlcmF0b3Ir PShkaWZmZXJlbmNlX3R5cGUgX19uKSB7CiAgICBjdXJyZW50IC09IF9fbjsKICAgIHJldHVybiAq dGhpczsKICB9CiAgX1NlbGYgb3BlcmF0b3ItKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0IHsK ICAgIHJldHVybiBfU2VsZihjdXJyZW50ICsgX19uKTsKICB9CiAgX1NlbGYmIG9wZXJhdG9yLT0o ZGlmZmVyZW5jZV90eXBlIF9fbikgewogICAgY3VycmVudCArPSBfX247CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIHJlZmVyZW5jZSBvcGVyYXRvcltdKGRpZmZlcmVuY2VfdHlwZSBfX24pIGNvbnN0 IHsgcmV0dXJuICooKnRoaXMgKyBfX24pOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuIF9feC5iYXNlKCkgPT0gX195LmJhc2UoKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IHJldmVy c2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsKICByZXR1cm4gX195LmJhc2UoKSA8 IF9feC5iYXNlKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSXRlcmF0b3I+CmlubGluZSBib29sIG9w ZXJhdG9yIT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpIHsK ICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5s aW5lIGJvb2wgb3BlcmF0b3I+KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+ JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0l0ZXJhdG9y PgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9y PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JdGVyYXRvcj4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRl cmF0b3I8X0l0ZXJhdG9yPiYgX195KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JdGVyYXRvcj4KaW5saW5lIHR5cGVuYW1lIHJldmVyc2VfaXRlcmF0b3I8X0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCm9wZXJhdG9yLShjb25zdCByZXZlcnNlX2l0ZXJhdG9y PF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJh dG9yPiYgX195KSB7CiAgcmV0dXJuIF9feS5iYXNlKCkgLSBfX3guYmFzZSgpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0l0ZXJhdG9yPgppbmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+Cm9w ZXJhdG9yKyh0eXBlbmFtZSByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj46OmRpZmZlcmVuY2Vf dHlwZSBfX24sCiAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9f eCkgewogIHJldHVybiByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4oX194LmJhc2UoKSAtIF9f bik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NoYXJUID0gY2hh ciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICBjbGFzcyBf RGlzdCA9IHB0cmRpZmZfdD4KY2xhc3MgaXN0cmVhbV9pdGVyYXRvciB7CnB1YmxpYzoKICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogIHR5 cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IGlzdHJlYW1fdHlwZTsKCiAgdHlw ZWRlZiBpbnB1dF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiBfVHAg dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9EaXN0IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIGNv bnN0IF9UcCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IF9UcCYgcmVmZXJlbmNlOwoKICBpc3Ry ZWFtX2l0ZXJhdG9yKCkgOiBfTV9zdHJlYW0oMCksIF9NX29rKGZhbHNlKSB7fQogIGlzdHJlYW1f aXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIDogX01fc3RyZWFtKCZfX3MpIHsgX01fcmVhZCgp OyB9CgogIHJlZmVyZW5jZSBvcGVyYXRvciooKSBjb25zdCB7IHJldHVybiBfTV92YWx1ZTsgfQog IHBvaW50ZXIgb3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICYob3BlcmF0b3IqKCkpOyB9Cgog IGlzdHJlYW1faXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9yZWFkKCk7CiAgICByZXR1 cm4gKnRoaXM7CiAgfQogIGlzdHJlYW1faXRlcmF0b3Igb3BlcmF0b3IrKyhpbnQpIHsKICAgIGlz dHJlYW1faXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX3JlYWQoKTsKICAgIHJldHVybiBf X3RtcDsKICB9CgogIGJvb2wgX01fZXF1YWwoY29uc3QgaXN0cmVhbV9pdGVyYXRvciYgX194KSBj b25zdAogICAgeyByZXR1cm4gKF9NX29rID09IF9feC5fTV9vaykgJiYgKCFfTV9vayB8fCBfTV9z dHJlYW0gPT0gX194Ll9NX3N0cmVhbSk7IH0KCnByaXZhdGU6CiAgaXN0cmVhbV90eXBlKiBfTV9z dHJlYW07CiAgX1RwIF9NX3ZhbHVlOwogIGJvb2wgX01fb2s7CgogIHZvaWQgX01fcmVhZCgpIHsK ICAgIF9NX29rID0gKF9NX3N0cmVhbSAmJiAqX01fc3RyZWFtKSA/IHRydWUgOiBmYWxzZTsKICAg IGlmIChfTV9vaykgewogICAgICAqX01fc3RyZWFtID4+IF9NX3ZhbHVlOwogICAgICBfTV9vayA9 ICpfTV9zdHJlYW0gPyB0cnVlIDogZmFsc2U7CiAgICB9CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFzcyBfRGlzdD4KaW5saW5lIGJv b2wKb3BlcmF0b3I9PShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRz LCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9UcCwgX0No YXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiBfX3guX01fZXF1YWwoX195KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBjbGFz cyBfRGlzdD4KaW5saW5lIGJvb2wKb3BlcmF0b3IhPShjb25zdCBpc3RyZWFtX2l0ZXJhdG9yPF9U cCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feCwKICAgICAgICAgICBjb25zdCBpc3RyZWFt X2l0ZXJhdG9yPF9UcCwgX0NoYXJULCBfVHJhaXRzLCBfRGlzdD4mIF9feSkgewogIHJldHVybiAh X194Ll9NX2VxdWFsKF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLAogICAgICAgICAgY2xh c3MgX0NoYXJUID0gY2hhciwgY2xhc3MgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgpj bGFzcyBvc3RyZWFtX2l0ZXJhdG9yIHsKcHVibGljOgogIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgdHlwZWRlZiBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICB0eXBlZGVmIG91dHB1dF9pdGVyYXRv cl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgdHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CiAgdHlw ZWRlZiB2b2lkIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHZvaWQgcG9pbnRlcjsKICB0eXBl ZGVmIHZvaWQgcmVmZXJlbmNlOwoKICBvc3RyZWFtX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYgX19z KSA6IF9NX3N0cmVhbSgmX19zKSwgX01fc3RyaW5nKDApIHt9CiAgb3N0cmVhbV9pdGVyYXRvcihv c3RyZWFtX3R5cGUmIF9fcywgY29uc3QgX0NoYXJUKiBfX2MpCiAgICA6IF9NX3N0cmVhbSgmX19z KSwgX01fc3RyaW5nKF9fYykge30KICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yPShj b25zdCBfVHAmIF9fdmFsdWUpIHsKICAgICpfTV9zdHJlYW0gPDwgX192YWx1ZTsKICAgIGlmIChf TV9zdHJpbmcpICpfTV9zdHJlYW0gPDwgX01fc3RyaW5nOwogICAgcmV0dXJuICp0aGlzOwogIH0K ICBvc3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKigpIHsgcmV0dXJuICp0aGlzOyB9CiAg b3N0cmVhbV9pdGVyYXRvcjxfVHA+JiBvcGVyYXRvcisrKCkgeyByZXR1cm4gKnRoaXM7IH0KICBv c3RyZWFtX2l0ZXJhdG9yPF9UcD4mIG9wZXJhdG9yKysoaW50KSB7IHJldHVybiAqdGhpczsgfQpw cml2YXRlOgogIG9zdHJlYW1fdHlwZSogX01fc3RyZWFtOwogIGNvbnN0IF9DaGFyVCogX01fc3Ry aW5nOwp9OwojIDQ0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvci5oIiAz CnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KY2xhc3Mg X19ub3JtYWxfaXRlcmF0b3IKICA6IHB1YmxpYyBpdGVyYXRvcjxpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6aXRlcmF0b3JfY2F0ZWdvcnksCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0b3Jf dHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZSwKICAgICAgICAgICAgICAgICAg ICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cG9pbnRlciwKICAgICAgICAgICAgICAgICAg ICBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgp7Cgpwcm90ZWN0ZWQ6CiAg X0l0ZXJhdG9yIF9NX2N1cnJlbnQ7CgpwdWJsaWM6CiAgdHlwZWRlZiBfX25vcm1hbF9pdGVyYXRv cjxfSXRlcmF0b3IsIF9Db250YWluZXI+IG5vcm1hbF9pdGVyYXRvcl90eXBlOwogIHR5cGVkZWYg aXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj4gX190cmFpdHNfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9fdHJhaXRzX3R5cGU6Oml0ZXJhdG9yX2NhdGVnb3J5IGl0ZXJhdG9yX2NhdGVnb3J5Owog IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwog IHR5cGVkZWYgdHlwZW5hbWUgX190cmFpdHNfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVu Y2VfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnBvaW50ZXIgcG9pbnRl cjsKICB0eXBlZGVmIHR5cGVuYW1lIF9fdHJhaXRzX3R5cGU6OnJlZmVyZW5jZSByZWZlcmVuY2U7 CgogIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigpKSB7IH0KCiAg ZXhwbGljaXQgX19ub3JtYWxfaXRlcmF0b3IoY29uc3QgX0l0ZXJhdG9yJiBfX2kpIDogX01fY3Vy cmVudChfX2kpIHsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgaW5saW5lIF9fbm9y bWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYg X19pKQogICAgOiBfTV9jdXJyZW50KF9faS5iYXNlKCkpIHsgfQoKCiAgcmVmZXJlbmNlCiAgb3Bl cmF0b3IqKCkgY29uc3QgeyByZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgcG9pbnRlcgogIG9wZXJh dG9yLT4oKSBjb25zdCB7IHJldHVybiBfTV9jdXJyZW50OyB9CgogIG5vcm1hbF9pdGVyYXRvcl90 eXBlJgogIG9wZXJhdG9yKysoKSB7ICsrX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5v cm1hbF9pdGVyYXRvcl90eXBlCiAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogIG5vcm1hbF9pdGVyYXRvcl90eXBlJgogIG9wZXJh dG9yLS0oKSB7IC0tX01fY3VycmVudDsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRv cl90eXBlCiAgb3BlcmF0b3ItLShpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1 cnJlbnQtLSk7IH0KCgogIHJlZmVyZW5jZQogIG9wZXJhdG9yW10oY29uc3QgZGlmZmVyZW5jZV90 eXBlJiBfX24pIGNvbnN0CiAgeyByZXR1cm4gX01fY3VycmVudFtfX25dOyB9CgogIG5vcm1hbF9p dGVyYXRvcl90eXBlJgogIG9wZXJhdG9yKz0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAg eyBfTV9jdXJyZW50ICs9IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90 eXBlCiAgb3BlcmF0b3IrKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0 dXJuIF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgKyBfX24pOyB9CgogIG5vcm1hbF9pdGVy YXRvcl90eXBlJgogIG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgeyBf TV9jdXJyZW50IC09IF9fbjsgcmV0dXJuICp0aGlzOyB9CgogIG5vcm1hbF9pdGVyYXRvcl90eXBl CiAgb3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogIHsgcmV0dXJu IF9fbm9ybWFsX2l0ZXJhdG9yKF9NX2N1cnJlbnQgLSBfX24pOyB9CgogIGRpZmZlcmVuY2VfdHlw ZQogIG9wZXJhdG9yLShjb25zdCBub3JtYWxfaXRlcmF0b3JfdHlwZSYgX19pKSBjb25zdAogIHsg cmV0dXJuIF9NX2N1cnJlbnQgLSBfX2kuX01fY3VycmVudDsgfQoKICBjb25zdCBfSXRlcmF0b3Im CiAgYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KfTsKCgoKdGVtcGxhdGU8dHlw ZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5l cj4KaW5saW5lIGJvb2wKb3BlcmF0b3I9PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0 b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0 b3I8X0l0ZXJhdG9yUiwgX0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiBfX2xocy5iYXNlKCkg PT0gX19yaHMuYmFzZSgpOyB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFt ZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvciE9 KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywK ICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVy PiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMgPT0gX19yaHMpOyB9CgoKCnRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5cGVuYW1lIF9Db250YWluZXI+ CmlubGluZSBib29sCm9wZXJhdG9yPChjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JM LCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuIF9fbGhzLmJhc2UoKSA8IF9f cmhzLmJhc2UoKTsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0 ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wKb3BlcmF0b3I+KGNvbnN0 IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo cykKeyByZXR1cm4gX19yaHMgPCBfX2xoczsgfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y TCwgdHlwZW5hbWUgX0l0ZXJhdG9yUiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KaW5saW5lIGJvb2wK b3BlcmF0b3I8PShjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yUiwg X0NvbnRhaW5lcj4mIF9fcmhzKQp7IHJldHVybiAhKF9fcmhzIDwgX19saHMpOyB9Cgp0ZW1wbGF0 ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBlbmFtZSBfQ29u dGFpbmVyPgppbmxpbmUgYm9vbApvcGVyYXRvcj49KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICBjb25zdCBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCnsgcmV0dXJuICEoX19saHMg PCBfX3Jocyk7IH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRh aW5lcj4KaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4Kb3Bl cmF0b3IrKHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46 OmRpZmZlcmVuY2VfdHlwZSBfX24sCiAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxf SXRlcmF0b3IsIF9Db250YWluZXI+JiBfX2kpCnsgcmV0dXJuIF9fbm9ybWFsX2l0ZXJhdG9yPF9J dGVyYXRvciwgX0NvbnRhaW5lcj4oX19pLmJhc2UoKSArIF9fbik7IH0KCn0KIyA2NiAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9pdGVyYXRvci5oIiAyIDMKIyA0MyAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf bWVtb3J5LmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5o IiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5o IiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMK CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3BhaXIuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CnN0cnVjdCBwYWlyIHsKICB0eXBlZGVmIF9UMSBm aXJzdF90eXBlOwogIHR5cGVkZWYgX1QyIHNlY29uZF90eXBlOwoKICBfVDEgZmlyc3Q7CiAgX1Qy IHNlY29uZDsKCgoKCiAgcGFpcigpIDogZmlyc3QoKSwgc2Vjb25kKCkge30KCgoKCiAgcGFpcihj b25zdCBfVDEmIF9fYSwgY29uc3QgX1QyJiBfX2IpIDogZmlyc3QoX19hKSwgc2Vjb25kKF9fYikg e30KCgogIHRlbXBsYXRlIDxjbGFzcyBfVTEsIGNsYXNzIF9VMj4KICBwYWlyKGNvbnN0IHBhaXI8 X1UxLCBfVTI+JiBfX3ApIDogZmlyc3QoX19wLmZpcnN0KSwgc2Vjb25kKF9fcC5zZWNvbmQpIHt9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRv cj09KGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3gsIGNvbnN0IHBhaXI8X1QxLCBfVDI+JiBfX3kp CnsKICByZXR1cm4gX194LmZpcnN0ID09IF9feS5maXJzdCAmJiBfX3guc2Vjb25kID09IF9feS5z ZWNvbmQ7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9w ZXJhdG9yPChjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYg X195KQp7CiAgcmV0dXJuIF9feC5maXJzdCA8IF9feS5maXJzdCB8fAogICAgICAgICAoIShfX3ku Zmlyc3QgPCBfX3guZmlyc3QpICYmIF9feC5zZWNvbmQgPCBfX3kuc2Vjb25kKTsKfQoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBw YWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJu ICEoX194ID09IF9feSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPihjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9U MSwgX1QyPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKCnRlbXBsYXRlIDxjbGFzcyBf VDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I8PShjb25zdCBwYWlyPF9UMSwgX1Qy PiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194 KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0 b3I+PShjb25zdCBwYWlyPF9UMSwgX1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195 KSB7CiAgcmV0dXJuICEoX194IDwgX195KTsKfQojIDEzOSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9wYWlyLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgoKCmlubGlu ZSBwYWlyPF9UMSwgX1QyPiBtYWtlX3BhaXIoX1QxIF9feCwgX1QyIF9feSkKCgoKewogIHJldHVy biBwYWlyPF9UMSwgX1QyPihfX3gsIF9feSk7Cn0KCn0KIyA2NyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy90eXBlX3RyYWl0cy5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVf dHJhaXRzLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9i aXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3R5cGVf dHJhaXRzLmgiIDIgMwojIDg2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMu aCIgMwp0ZW1wbGF0ZSA8Ym9vbCBfVHJ1dGg+IHN0cnVjdCBfQm9vbCB7fTsKdHlwZWRlZiBfQm9v bDx0cnVlPiBfX3RydWVfdHlwZTsKdHlwZWRlZiBfQm9vbDxmYWxzZT4gX19mYWxzZV90eXBlOwoK dGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211c3RfYmVfZmlyc3Q7CiMgMTEwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIgMwogICB0eXBlZGVmIF9fZmFsc2VfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlw ZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBo YXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBo YXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCgoKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8Ym9vbD4gewogICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGNoYXI+IHsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxz aWduZWQgY2hhcj4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGNoYXI+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVt cGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx3Y2hhcl90PiB7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlw ZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2hvcnQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBz aG9ydD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3Ry dWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVk ZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVf dHJhaXRzPGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRf Y29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29w ZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAg IHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBf X3R5cGVfdHJhaXRzPHVuc2lnbmVkIGludD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmc+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBsb25nPiB7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlw ZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBs b25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8dW5zaWduZWQgbG9uZyBsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8ZmxvYXQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxkb3VibGU+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9f dHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVf dHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BP RF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxsb25nIGRvdWJsZT4g ewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX190 eXBlX3RyYWl0czxfVHAqPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVm YXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5 X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1l bnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3Rv cjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCgoKCgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwPiBzdHJ1Y3QgX0lzX2ludGVnZXIgewogIHR5cGVkZWYgX19mYWxzZV90eXBlIF9J bnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGJvb2w+IHsKICB0eXBl ZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRl Z2VyPGNoYXI+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHNpZ25lZCBjaGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlw ZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBj aGFyPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfSXNfaW50ZWdlcjx3Y2hhcl90PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxzaG9ydD4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8 dW5zaWduZWQgc2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRl bXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPGludD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUg X0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgaW50 PiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfSXNfaW50ZWdlcjxsb25nPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjx1bnNpZ25lZCBsb25nPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjxsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBs YXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4gewogIHR5cGVkZWYg X190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3Qg X0lzX25vcm1hbF9pdGVyYXRvciB7CiAgIHR5cGVkZWYgX19mYWxzZV90eXBlIF9Ob3JtYWw7Cn07 CgoKbmFtZXNwYWNlIHN0ZCB7CiAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5h bWUgX0NvbnRhaW5lcj4gY2xhc3MgX19ub3JtYWxfaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CnN0cnVjdCBfSXNfbm9ybWFsX2l0 ZXJhdG9yPCBzdGQ6Ol9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4gPiB7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgX05vcm1hbDsKfTsKIyA3MCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jc3RyaW5nLmgiIDEgMwojIDcyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2xpbWl0 cy5oIiAxIDMKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzcg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyAzOCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDIgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2NzdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMjUg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAx IDMKIyAyNiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKCgoKCiMgMSAiL3Vzci9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMy9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAz NCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCmV4dGVybiAiQyIgewoKCgoKCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3dhaXRmbGFncy5oIiAxIDMKIyA0MyAiL3Vzci9pbmNsdWRlL3N0ZGxp Yi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDEgMwojIDYzICIv dXNyL2luY2x1ZGUvYml0cy93YWl0c3RhdHVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZW5kaWFu LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvZW5kaWFuLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMjMgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMiAzCiMgMzcgIi91 c3IvaW5jbHVkZS9lbmRpYW4uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAx IDMKIyAzOCAiL3Vzci9pbmNsdWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2Jp dHMvd2FpdHN0YXR1cy5oIiAyIDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAg ICBzdHJ1Y3QKICAgICAgewoKICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAg ICAgICB1bnNpZ25lZCBpbnQgX193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9f d19yZXRjb2RlOjg7CiAgICAgICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dh aXRfdGVybWluYXRlZDsKICAgIHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBf X3dfc3RvcHZhbDo4OwogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAg IHVuc2lnbmVkIGludDoxNjsKCgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0 ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZf dDsKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQg cmVtOwogIH0gbGRpdl90OwoKCgoKCl9fZXh0ZW5zaW9uX18gdHlwZWRlZiBzdHJ1Y3QKICB7CiAg ICBsb25nIGxvbmcgaW50IHF1b3Q7CiAgICBsb25nIGxvbmcgaW50IHJlbTsKICB9IGxsZGl2X3Q7 CiMgMTMzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHNpemVfdCBfX2N0eXBlX2dl dF9tYl9jdXJfbWF4ICh2b2lkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBhdG9mIChfX2Nv bnN0IGNoYXIgKl9fbnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7Cgpl eHRlcm4gaW50IGF0b2kgKF9fY29uc3QgY2hhciAqX19ucHRyKSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBsb25nIGludCBhdG9sIChfX2NvbnN0IGNoYXIgKl9f bnB0cikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCl9fZXh0ZW5zaW9u X18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgYXRvbGwgKF9fY29uc3QgY2hhciAqX19ucHRyKQogICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gZG91YmxlIHN0 cnRvZCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0 IHN0cnRvZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHN0cnRvbGQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0cmljdCBfX2VuZHB0cikgdGhyb3cgKCk7 CgoKCmV4dGVybiBsb25nIGludCBzdHJ0b2wgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX25w dHIsCiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlKSB0aHJvdyAoKTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBzdHJ0b3VsIChf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhy b3cgKCk7CgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9xIChfX2Nv bnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKSB0aHJvdyAoKTsKCl9fZXh0 ZW5zaW9uX18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgc3RydG91cSAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgdGhyb3cg KCk7CgoKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgc3RydG9sbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UpIHRocm93ICgpOwoKX19l eHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIGludCBzdHJ0b3VsbCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIHRo cm93ICgpOwojIDIxMSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L3hsb2NhbGUuaCIgMSAzCiMgMjEyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgpleHRl cm4gbG9uZyBpbnQgX19zdHJ0b2xfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBp bnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykg dGhyb3cgKCk7CgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgX19zdHJ0b3VsX2wgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgdGhyb3cgKCk7Cgpf X2V4dGVuc2lvbl9fCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2Jhc2UsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCl9fZXh0ZW5zaW9u X18KZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19zdHJ0b3VsbF9sIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpCiAg ICAgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2wgKF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJp Y3QgX19lbmRwdHIsIF9fbG9jYWxlX3QgX19sb2MpCiAgICAgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgX19zdHJ0b2ZfbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLCBfX2xvY2FsZV90IF9f bG9jKSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRvbGRfbCAoX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2xvY2FsZV90IF9fbG9jKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3N0cnRv ZF9pbnRlcm5hbCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dy b3VwKQogICAgIHRocm93ICgpOwpleHRlcm4gZmxvYXQgX19zdHJ0b2ZfaW50ZXJuYWwgKF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgp OwpleHRlcm4gbG9uZyBkb3VibGUgX19zdHJ0b2xkX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqX19yZXN0cmljdCBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fZ3JvdXApIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgaW50IF9fc3RydG9s X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9pbnRlcm5hbCAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3Vw KSB0aHJvdyAoKTsKCgoKCl9fZXh0ZW5zaW9uX18KZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19zdHJ0 b2xsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19ucHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGlu dCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKX19leHRlbnNpb25fXwpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChfX2NvbnN0IGNoYXIgKgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fbnB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqKl9fcmVzdHJpY3QgX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKQogICAgIHRocm93ICgp OwojIDM4NSAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpsNjRhIChsb25n IGludCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGludCBhNjRsIChfX2NvbnN0IGNoYXIg Kl9fcykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKIyAxICIvdXNyL2lu Y2x1ZGUvc3lzL3R5cGVzLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9zeXMv dHlwZXMuaCIgMiAzCgpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMu aCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiBfX3Vf Y2hhciB1X2NoYXI7CnR5cGVkZWYgX191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1 X2ludDsKdHlwZWRlZiBfX3VfbG9uZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0 eXBlZGVmIF9fdV9xdWFkX3QgdV9xdWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCnR5 cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoKCgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5 cGVkZWYgX19pbm82NF90IGlubzY0X3Q7CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CiMgNjgg Ii91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoK CnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7CiMgMTAxICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKdHlwZWRlZiBfX2lkX3QgaWRfdDsKIyAxMTEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMu aCIgMwp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBjYWRkcl90 OwoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTI2ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVz LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyAxMjcgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCgoKCgp0eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7 CgoKCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1 ZGUvc3RkZGVmLmgiIDEgMwojIDE0MSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAyIDMKCgoK dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCB1bG9uZzsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBp bnQgdXNob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1aW50OwojIDE4NCAiL3Vzci9pbmNsdWRl L3N5cy90eXBlcy5oIiAzCnR5cGVkZWYgaW50IGludDhfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fUUlfXykpKTsKdHlwZWRlZiBpbnQgaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fSElfXykpKTsKdHlwZWRlZiBpbnQgaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fU0lfXykpKTsKdHlwZWRlZiBpbnQgaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2Rl X18gKF9fRElfXykpKTsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDhfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fUUlfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQxNl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCB1X2ludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJX18pKSk7CnR5cGVkZWYg dW5zaWduZWQgaW50IHVfaW50NjRfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fRElfXykp KTsKCnR5cGVkZWYgaW50IHJlZ2lzdGVyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX3dv cmRfXykpKTsKIyAyMDYgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9lbmRpYW4uaCIgMSAzCiMgMjA3ICIvdXNyL2luY2x1ZGUvc3lzL3R5cGVzLmgiIDIgMwoK CiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9z eXMvc2VsZWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjYgIi91 c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwoKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVj dC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAzNSAiL3Vz ci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMiAzCiMgNDMgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0 LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL3N5 cy9zZWxlY3QuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMSAzCiMgNjMg Ii91c3IvaW5jbHVkZS9iaXRzL3RpbWUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDIgMwoKCgpzdHJ1Y3QgdGlt ZXZhbAogIHsKICAgIF9fdGltZV90IHR2X3NlYzsKICAgIF9fc3VzZWNvbmRzX3QgdHZfdXNlYzsK ICB9OwojIDQ2ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgoKdHlwZWRlZiBsb25n IGludCBfX2ZkX21hc2s7CgoKCgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKCgoKICAgIF9fZmRfbWFz ayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsKCgoKCgogIH0gZmRf c2V0OwoKCgoKCgp0eXBlZGVmIF9fZmRfbWFzayBmZF9tYXNrOwojIDg5ICIvdXNyL2luY2x1ZGUv c3lzL3NlbGVjdC5oIiAzCmV4dGVybiAiQyIgewoKCgoKCgpleHRlcm4gaW50IHNlbGVjdCAoaW50 IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg IGZkX3NldCAqX19yZXN0cmljdCBfX3dyaXRlZmRzLAogICAgICAgICAgICAgICAgICAgZmRfc2V0 ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgc3RydWN0IHRpbWV2 YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHBzZWxl Y3QgKGludCBfX25mZHMsIGZkX3NldCAqX19yZXN0cmljdCBfX3JlYWRmZHMsCiAgICAgICAgICAg ICAgICAgICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAg ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAgIGNv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdCBfX3RpbWVvdXQsCiAgICAgICAgICAgICAg ICAgICAgY29uc3QgX19zaWdzZXRfdCAqX19yZXN0cmljdCBfX3NpZ21hc2spIHRocm93ICgpOwoK Cn0KIyAyMTAgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1 ZGUvc3lzL3N5c21hY3Jvcy5oIiAxIDMKIyAyMTMgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIg MiAzCgoKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Js a2NudF90IGJsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0 eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwojIDI1MSAiL3Vzci9pbmNsdWRlL3N5cy90 eXBlcy5oIiAzCnR5cGVkZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Js a2NudDY0X3QgZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRf dDsKCgp9CiMgMzkyICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9u ZyBpbnQgcmFuZG9tICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBzcmFuZG9tICh1bnNp Z25lZCBpbnQgX19zZWVkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gY2hhciAqaW5pdHN0YXRlICh1 bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpfX3N0YXRlYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19zdGF0ZWxlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpzZXRzdGF0 ZSAoY2hhciAqX19zdGF0ZWJ1ZikgdGhyb3cgKCk7CgoKCgoKCgpzdHJ1Y3QgcmFuZG9tX2RhdGEK ICB7CiAgICBpbnQzMl90ICpmcHRyOwogICAgaW50MzJfdCAqcnB0cjsKICAgIGludDMyX3QgKnN0 YXRlOwogICAgaW50IHJhbmRfdHlwZTsKICAgIGludCByYW5kX2RlZzsKICAgIGludCByYW5kX3Nl cDsKICAgIGludDMyX3QgKmVuZF9wdHI7CiAgfTsKCmV4dGVybiBpbnQgcmFuZG9tX3IgKHN0cnVj dCByYW5kb21fZGF0YSAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50 MzJfdCAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNyYW5kb21f ciAodW5zaWduZWQgaW50IF9fc2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgdGhyb3cg KCk7CgpleHRlcm4gaW50IGluaXRzdGF0ZV9yICh1bnNpZ25lZCBpbnQgX19zZWVkLCBjaGFyICpf X3Jlc3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0 YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKl9fcmVz dHJpY3QgX19idWYpIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICpfX3Jl c3RyaWN0IF9fc3RhdGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJhbmRvbV9k YXRhICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHJhbmQgKHZv aWQpIHRocm93ICgpOwoKZXh0ZXJuIHZvaWQgc3JhbmQgKHVuc2lnbmVkIGludCBfX3NlZWQpIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IHJhbmRfciAodW5zaWduZWQgaW50ICpfX3NlZWQpIHRocm93 ICgpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBkcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJu IGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGxvbmcgaW50IGxyYW5kNDggKHZvaWQpIHRocm93ICgpOwpleHRlcm4gbG9uZyBp bnQgbnJhbmQ0OCAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10pIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGludCBtcmFuZDQ4ICh2b2lkKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgaW50IGpy YW5kNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3hzdWJpWzNdKSB0aHJvdyAoKTsKCgpleHRlcm4g dm9pZCBzcmFuZDQ4IChsb25nIGludCBfX3NlZWR2YWwpIHRocm93ICgpOwpleHRlcm4gdW5zaWdu ZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQxNnZbM10pIHRo cm93ICgpOwpleHRlcm4gdm9pZCBsY29uZzQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3 XSkgdGhyb3cgKCk7CgoKCgoKc3RydWN0IGRyYW5kNDhfZGF0YQogIHsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBfX3hbM107CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19vbGRfeFszXTsKICAgIHVu c2lnbmVkIHNob3J0IGludCBfX2M7CiAgICB1bnNpZ25lZCBzaG9ydCBpbnQgX19pbml0OwogICAg dW5zaWduZWQgbG9uZyBsb25nIGludCBfX2E7CiAgfTsKCgpleHRlcm4gaW50IGRyYW5kNDhfciAo c3RydWN0IGRyYW5kNDhfZGF0YSAqX19yZXN0cmljdCBfX2J1ZmZlciwKICAgICAgICAgICAgICAg ICAgICAgIGRvdWJsZSAqX19yZXN0cmljdCBfX3Jlc3VsdCkgdGhyb3cgKCk7CmV4dGVybiBpbnQg ZXJhbmQ0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fcmVzdHJpY3QgX19idWZmZXIsCiAgICAgICAg ICAgICAgICAgICAgICBkb3VibGUgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVm ZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQp IHRocm93ICgpOwpleHRlcm4gaW50IG5yYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3Ry aWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKl9fcmVzdHJpY3Qg X19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgbXJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0 OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBp bnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwpleHRlcm4gaW50IGpyYW5kNDhfciAo dW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgZHJhbmQ0OF9kYXRhICpfX3Jlc3RyaWN0IF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg ICAgbG9uZyBpbnQgKl9fcmVzdHJpY3QgX19yZXN1bHQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQg c3JhbmQ0OF9yIChsb25nIGludCBfX3NlZWR2YWwsIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVm ZmVyKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQg aW50IF9fc2VlZDE2dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0 YSAqX19idWZmZXIpIHRocm93ICgpOwoKZXh0ZXJuIGludCBsY29uZzQ4X3IgKHVuc2lnbmVkIHNo b3J0IGludCBfX3BhcmFtWzddLAogICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhf ZGF0YSAqX19idWZmZXIpIHRocm93ICgpOwojIDUyOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAz CmV4dGVybiB2b2lkICptYWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwg c2l6ZV90IF9fc2l6ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6ZV90IF9fc2l6ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCmV4dGVybiB2b2lkIGZyZWUg KHZvaWQgKl9fcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRy KSB0aHJvdyAoKTsKCgoKIyAxICIvdXNyL2luY2x1ZGUvYWxsb2NhLmgiIDEgMwojIDIyICIvdXNy L2luY2x1ZGUvYWxsb2NhLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMg MjMgIi91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI2ICIvdXNyL2lu Y2x1ZGUvYWxsb2NhLmgiIDIgMwoKZXh0ZXJuICJDIiB7CgoKCgoKZXh0ZXJuIHZvaWQgKmFsbG9j YSAoc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKfQojIDU0OCAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRlcm4gaW50IHBvc2l4X21l bWFsaWduICh2b2lkICoqX19tZW1wdHIsIHNpemVfdCBfX2FsaWdubWVudCwgc2l6ZV90IF9fc2l6 ZSkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgpleHRlcm4g dm9pZCBhYm9ydCAodm9pZCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykp OwoKCgpleHRlcm4gaW50IGF0ZXhpdCAodm9pZCAoKl9fZnVuYykgKHZvaWQpKSB0aHJvdyAoKTsK CgoKCmV4dGVybiBpbnQgb25fZXhpdCAodm9pZCAoKl9fZnVuYykgKGludCBfX3N0YXR1cywgdm9p ZCAqX19hcmcpLCB2b2lkICpfX2FyZykKICAgICB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBl eGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18p KTsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIHRocm93ICgpIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiBjaGFyICpnZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc2VjdXJlX2dldGVudiAo X19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgcHV0ZW52IChj aGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBzZXRlbnYgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBfX2NvbnN0IGNoYXIgKl9fdmFsdWUsIGludCBfX3JlcGxhY2UpCiAgICAg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB1bnNldGVudiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGNsZWFyZW52ICh2b2lkKSB0aHJvdyAoKTsKIyA2MjQg Ii91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqbWt0ZW1wIChjaGFyICpfX3Rl bXBsYXRlKSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAoY2hhciAqX190ZW1w bGF0ZSkgdGhyb3cgKCk7CiMgNjQxICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGlu dCBta3N0ZW1wNjQgKGNoYXIgKl9fdGVtcGxhdGUpIHRocm93ICgpOwojIDY1MSAiL3Vzci9pbmNs dWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpta2R0ZW1wIChjaGFyICpfX3RlbXBsYXRlKSB0 aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3lzdGVtIChfX2NvbnN0IGNoYXIgKl9fY29tbWFuZCkg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBjaGFyICpjYW5vbmljYWxpemVfZmlsZV9uYW1lIChfX2Nv bnN0IGNoYXIgKl9fbmFtZSkgdGhyb3cgKCk7CiMgNjczICIvdXNyL2luY2x1ZGUvc3RkbGliLmgi IDMKZXh0ZXJuIGNoYXIgKnJlYWxwYXRoIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19uYW1l LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19yZXNvbHZlZCkgdGhy b3cgKCk7CgoKCgoKCnR5cGVkZWYgaW50ICgqX19jb21wYXJfZm5fdCkgKF9fY29uc3Qgdm9pZCAq LCBfX2NvbnN0IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5f dDsKCgoKCgpleHRlcm4gdm9pZCAqYnNlYXJjaCAoX19jb25zdCB2b2lkICpfX2tleSwgX19jb25z dCB2b2lkICpfX2Jhc2UsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19ubWVtYiwgc2l6 ZV90IF9fc2l6ZSwgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiB2b2lkIHFzb3J0 ICh2b2lkICpfX2Jhc2UsIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLAogICAgICAgICAg ICAgICAgICAgX19jb21wYXJfZm5fdCBfX2NvbXBhcik7CgoKCmV4dGVybiBpbnQgYWJzIChpbnQg X194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBsb25nIGlu dCBsYWJzIChsb25nIGludCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18p KTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxhYnMgKGxvbmcgbG9uZyBp bnQgX194KQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgoK ZXh0ZXJuIGRpdl90IGRpdiAoaW50IF9fbnVtZXIsIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKZXh0ZXJuIGxkaXZfdCBsZGl2IChsb25nIGlu dCBfX251bWVyLCBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGxsZGl2X3QgbGxkaXYgKGxvbmcg bG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9u ZyBsb25nIGludCBfX2Rlbm9tKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKIyA3MjkgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAo ZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsCiAg ICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBjaGFyICpmY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGNoYXIgKmdjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsIGNoYXIgKl9fYnVmKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFyICpxZWN2dCAobG9u ZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAgICAgICAgICAgIGludCAq X19yZXN0cmljdCBfX2RlY3B0LCBpbnQgKl9fcmVzdHJpY3QgX19zaWduKSB0aHJvdyAoKTsKZXh0 ZXJuIGNoYXIgKnFmY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBf X3NpZ24pIHRocm93ICgpOwpleHRlcm4gY2hhciAqcWdjdnQgKGxvbmcgZG91YmxlIF9fdmFsdWUs IGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBlY3Z0 X3IgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqX19yZXN0cmljdCBfX2RlY3B0 LAogICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2lnbiwgY2hhciAqX19yZXN0 cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4 dGVybiBpbnQgZmN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKl9fcmVz dHJpY3QgX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqX19yZXN0cmljdCBfX3NpZ24s IGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4p IHRocm93ICgpOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQg X19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fZGVjcHQsIGlu dCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAgICAgICAgY2hhciAqX19yZXN0cmlj dCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBxZmN2dF9yIChsb25n IGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICpf X3Jlc3RyaWN0IF9fZGVjcHQsIGludCAqX19yZXN0cmljdCBfX3NpZ24sCiAgICAgICAgICAgICAg ICAgICAgY2hhciAqX19yZXN0cmljdCBfX2J1Ziwgc2l6ZV90IF9fbGVuKSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGludCBtYmxlbiAoX19jb25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIHRocm93 ICgpOwoKCmV4dGVybiBpbnQgbWJ0b3djICh3Y2hhcl90ICpfX3Jlc3RyaWN0IF9fcHdjLAogICAg ICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbikg dGhyb3cgKCk7CgoKZXh0ZXJuIGludCB3Y3RvbWIgKGNoYXIgKl9fcywgd2NoYXJfdCBfX3djaGFy KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHNpemVfdCBtYnN0b3djcyAod2NoYXJfdCAqX19yZXN0cmlj dCBfX3B3Y3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKZXh0ZXJuIHNpemVfdCB3Y3N0b21icyAoY2hh ciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgd2NoYXJf dCAqX19yZXN0cmljdCBfX3B3Y3MsIHNpemVfdCBfX24pCiAgICAgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gaW50IHJwbWF0Y2ggKF9fY29uc3QgY2hhciAqX19yZXNwb25zZSkgdGhyb3cgKCk7CiMg ODA5ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIGludCBnZXRzdWJvcHQgKGNoYXIg KipfX3Jlc3RyaWN0IF9fb3B0aW9ucCwKICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fY29u c3QgKl9fcmVzdHJpY3QgX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19y ZXN0cmljdCBfX3ZhbHVlcCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2Nv bnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoKCgoKCmV4dGVybiBpbnQgcG9zaXhfb3BlbnB0 IChpbnQgX19vZmxhZykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBf X2ZkKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB1bmxvY2twdCAoaW50IF9fZmQpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGNoYXIgKnB0c25hbWUgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVu KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldHB0ICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0 ZXJuIGludCBnZXRsb2FkYXZnIChkb3VibGUgX19sb2FkYXZnW10sIGludCBfX25lbGVtKSB0aHJv dyAoKTsKCgoKCgp9CiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5o IiAyIDMKIyA3MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFt ZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpkaXZfdDsKICB1c2luZyA6OmxkaXZfdDsKCiAgdXNpbmcg OjphYm9ydDsKICB1c2luZyA6OmFiczsKICB1c2luZyA6OmF0ZXhpdDsKICB1c2luZyA6OmF0b2Y7 CiAgdXNpbmcgOjphdG9pOwogIHVzaW5nIDo6YXRvbDsKICB1c2luZyA6OmJzZWFyY2g7CiAgdXNp bmcgOjpjYWxsb2M7CiAgdXNpbmcgOjpkaXY7CiAgdXNpbmcgOjpleGl0OwogIHVzaW5nIDo6ZnJl ZTsKICB1c2luZyA6OmdldGVudjsKICB1c2luZyA6OmxhYnM7CiAgdXNpbmcgOjpsZGl2OwogIHVz aW5nIDo6bWFsbG9jOwogIHVzaW5nIDo6bWJsZW47CiAgdXNpbmcgOjptYnN0b3djczsKICB1c2lu ZyA6Om1idG93YzsKICB1c2luZyA6OnFzb3J0OwogIHVzaW5nIDo6cmFuZDsKICB1c2luZyA6OnJl YWxsb2M7CiAgdXNpbmcgOjpzcmFuZDsKICB1c2luZyA6OnN0cnRvZDsKICB1c2luZyA6OnN0cnRv bDsKICB1c2luZyA6OnN0cnRvdWw7CiAgdXNpbmcgOjpzeXN0ZW07CiAgdXNpbmcgOjp3Y3N0b21i czsKICB1c2luZyA6OndjdG9tYjsKCiAgaW5saW5lIGxvbmcKICBhYnMobG9uZyBfX2kpIHsgcmV0 dXJuIGxhYnMoX19pKTsgfQoKICBpbmxpbmUgbGRpdl90CiAgZGl2KGxvbmcgX19pLCBsb25nIF9f aikgeyByZXR1cm4gbGRpdihfX2ksIF9faik7IH0KfQojIDEyNSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jc3RkbGliLmgiIDMKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjps bGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlubGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBs b25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBfX3ggOiAtX194OyB9CgogIGlubGluZSBsb25n IGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1f X3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYobG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9f ZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAl IF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUgbGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBf X24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7 IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBfX3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1 c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRvbGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1 c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxk aXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwog IHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNpbmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcg X19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2dudV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251 X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9j eHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9sZDsKfQojIDc0ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA3NSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMSAz CiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvbmV3IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9jc3RkZGVmIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12 My9uZXciIDIgMwoKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFk X2FsbG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0 aHJvdygpIHsgfQogICAgdmlydHVhbCB+YmFkX2FsbG9jKCkgdGhyb3coKTsKICB9OwoKICBzdHJ1 Y3Qgbm90aHJvd190IHsgfTsKICBleHRlcm4gY29uc3Qgbm90aHJvd190IG5vdGhyb3c7CgoKICB0 eXBlZGVmIHZvaWQgKCpuZXdfaGFuZGxlcikoKTsKCiAgbmV3X2hhbmRsZXIgc2V0X25ld19oYW5k bGVyKG5ld19oYW5kbGVyKTsKfQojIDc2ICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMwp2b2lk ICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJhZF9hbGxvYyk7CnZvaWQg Km9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90KSB0aHJvdyAoc3RkOjpiYWRfYWxsb2MpOwp2b2lk IG9wZXJhdG9yIGRlbGV0ZSh2b2lkICopIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlW10o dm9pZCAqKSB0aHJvdygpOwp2b2lkICpvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIGNvbnN0IHN0 ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCAqb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3Qs IGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRvciBkZWxldGUodm9p ZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CnZvaWQgb3BlcmF0b3IgZGVsZXRl W10odm9pZCAqLCBjb25zdCBzdGQ6Om5vdGhyb3dfdCYpIHRocm93KCk7CgoKaW5saW5lIHZvaWQg Km9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCwgdm9pZCAqcGxhY2UpIHRocm93KCkgeyByZXR1cm4g cGxhY2U7IH0KaW5saW5lIHZvaWQgKm9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2b2lkICpw bGFjZSkgdGhyb3coKSB7IHJldHVybiBwbGFjZTsgfQoKfQojIDc2ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2lvc2Z3ZC5oIiAxIDMKIyA3OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9h bGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfdHlwZXMuaCIgMSAzCiMgNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX2Z1bmNzLmgiIDEgMwojIDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29i YXNlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfaXRlcmF0b3IuaCIg MSAzCiMgODEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NvbmNlcHRfY2hlY2suaCIgMSAzCiMgODIgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgpuYW1lc3BhY2Ugc3Rk CnsKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIs IGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgX19pdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2EsIF9G b3J3YXJkSXRlcjIgX19iLCBfVHAqKQp7CiAgX1RwIF9fdG1wID0gKl9fYTsKICAqX19hID0gKl9f YjsKICAqX19iID0gX190bXA7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFz cyBfRm9yd2FyZEl0ZXIyPgppbmxpbmUgdm9pZCBpdGVyX3N3YXAoX0ZvcndhcmRJdGVyMSBfX2Es IF9Gb3J3YXJkSXRlcjIgX19iKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBfX2l0ZXJfc3dhcChfX2EsIF9fYiwgX192YWx1 ZV90eXBlKF9fYSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgdm9pZCBzd2FwKF9U cCYgX19hLCBfVHAmIF9fYikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX190bXAgPSBfX2E7CiAgX19hID0gX19iOwog IF9fYiA9IF9fdG1wOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3Qg X1RwJiBtaW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iKSB7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgaWYg KF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIGNvbnN0IF9UcCYgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikg ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogIGlmIChfX2EgPCBfX2IpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtaW4o Y29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYg KF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgY29uc3QgX1RwJiBtYXgoY29uc3QgX1Rw JiBfX2EsIGNvbnN0IF9UcCYgX19iLCBfQ29tcGFyZSBfX2NvbXApIHsKCiAgaWYgKF9fY29tcChf X2EsIF9fYikpIHJldHVybiBfX2I7IHJldHVybiBfX2E7Cn0KIyAxNjYgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KaW5saW5lIF9PdXRwdXRJdGVyIF9f Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X2l0ZXJhdG9yX3RhZywgX0Rpc3RhbmNlKikKewogIGZvciAoIDsgX19maXJzdCAh PSBfX2xhc3Q7ICsrX19yZXN1bHQsICsrX19maXJzdCkKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX091dHB1dEl0ZXIK X19jb3B5KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3Rh ZywgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3RhbmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7 IF9fbiA+IDA7IC0tX19uKSB7CiAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICsrX19maXJz dDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcD4KaW5saW5lIF9UcCoKX19jb3B5X3RyaXZpYWwoY29uc3QgX1RwKiBfX2ZpcnN0LCBj b25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKewogIG1lbW1vdmUoX19yZXN1bHQsIF9f Zmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICByZXR1cm4gX19yZXN1 bHQgKyAoX19sYXN0IC0gX19maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHJldHVybiBfX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCksCiAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJz dCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXI+Cmlu bGluZSBfT3V0cHV0SXRlciBfX2NvcHlfYXV4MihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weShfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LAogICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSwKICAg ICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfVHA+CmlubGluZSBfVHAqIF9fY29weV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3Qs IF9UcCogX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAg cmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgX1RwKiBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmly c3QsIGNvbnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICBfX3RydWVfdHlwZSkKewogIHJldHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xh c3QsIF9fcmVzdWx0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0 cHV0SXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X2F1eChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1RwKikKewogIHR5cGVkZWYgdHlwZW5hbWUgX190 eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAg ICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2F1eDIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3Vs dCwgX1RyaXZpYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIF9PdXRwdXRJdGVy KF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdC5iYXNlKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpKSk7Cn0KCnRlbXBsYXRl PHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1 dEl0ZXIgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxz ZV90eXBlKQp7CiAgcmV0dXJuIF9fY29weV9hdXgoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX091dHB1dEl0ZXI+CmlubGluZSBfT3V0cHV0SXRlciBfX2NvcHlfbmkxKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCnsKICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X091dHB1dEl0ZXI+OjpfTm9ybWFsIF9fTm9ybWFs OwogIHJldHVybiBfX2NvcHlfbmkyKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLCBfX3Jl c3VsdCwgX19Ob3JtYWwoKSk7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVu YW1lIF9PdXRwdXRJdGVyPgppbmxpbmUgX091dHB1dEl0ZXIgX19jb3B5X25pMShfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKewogIHR5cGVkZWYgdHlwZW5h bWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfT3V0cHV0SXRlcj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAg cmV0dXJuIF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5l IF9PdXRwdXRJdGVyIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9JbnB1dEl0ZXI+ OjpfTm9ybWFsIF9fTm9ybWFsOwogICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlv bmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICBjbGFzcyBfRGlz dGFuY2U+CmlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fY29weV9iYWNrd2FyZChfQmlkaXJl Y3Rpb25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSopCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpCiAgICAqLS1fX3Jlc3VsdCA9ICot LV9fbGFzdDsKICByZXR1cm4gX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2U+CmlubGlu ZSBfQmlkaXJlY3Rpb25hbEl0ZXIgX19jb3B5X2JhY2t3YXJkKF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZywKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKikKewogIGZvciAoX0Rpc3Rh bmNlIF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+IDA7IC0tX19uKQogICAgKi0tX19yZXN1 bHQgPSAqLS1fX2xhc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMiwKICAgICAg ICAgIGNsYXNzIF9Cb29sVHlwZT4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAp7CiAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyMT46Oml0 ZXJhdG9yX2NhdGVnb3J5CiAgICAgICAgICBfQ2F0OwogIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9CaWRpcmVjdGlvbmFsSXRlcjE+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAg IF9EaXN0YW5jZTsKCiAgc3RhdGljIF9CaWRpcmVjdGlvbmFsSXRlcjIgY29weShfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlk aXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19yZXN1bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dh cmQoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX0NhdCgpLCAoX0Rpc3RhbmNlKikgMCk7CiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRj aDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4KewogIHN0YXRpYyBfVHAqIGNvcHkoY29uc3QgX1Rw KiBfX2ZpcnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkgewogICAgY29uc3Qg cHRyZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgbWVtbW92ZShfX3Jlc3VsdCAt IF9OdW0sIF9fZmlyc3QsIHNpemVvZihfVHApICogX051bSk7CiAgICByZXR1cm4gX19yZXN1bHQg LSBfTnVtOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBfX2NvcHlfYmFja3dh cmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CnsKICBzdGF0aWMgX1Rw KiBjb3B5KGNvbnN0IF9UcCogX19maXJzdCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1 bHQpIHsKICAgIHJldHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190 cnVlX3R5cGU+CiAgICAgIDo6Y29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKICB9Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JJMSwgY2xhc3MgX0JJMj4KaW5saW5lIF9CSTIgX19jb3B5X2Jh Y2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVzdWx0KSB7CiAg dHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf QkkyPjo6dmFsdWVfdHlwZT4KICAgICAgICAgICAgICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9h c3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICByZXR1cm4gX19jb3B5X2Jh Y2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFsPgogICAgICAgICAgICAgIDo6Y29w eShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEs IHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFs X2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fdHJ1ZV90eXBl KSB7CiAgcmV0dXJuIF9CSTIoX19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f cmVzdWx0LmJhc2UoKSkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJ Mj4KaW5saW5lIF9CSTIgX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJ MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKXsKICByZXR1cm4g X19jb3B5X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxh dGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBfQkkyIF9fY29weV9iYWNr d2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkkyIF9fcmVz dWx0LCBfX3RydWVfdHlwZSkgewogIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRv cjxfQkkyPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1 dF9ub3JtYWxfaXRlcmF0b3IoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdWx0LCBfX05vcm1h bCgpKTsKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CmlubGluZSBf QkkyIF9fY29weV9iYWNrd2FyZF9pbnB1dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBf QkkxIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQkkyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpIHsKICB0eXBlZGVmIHR5cGVuYW1lIF9J c19ub3JtYWxfaXRlcmF0b3I8X0JJMj46Ol9Ob3JtYWwgX19Ob3JtYWw7CiAgcmV0dXJuIF9fY29w eV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9y bWFsKCkpOwp9Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KaW5saW5l IF9CSTIgY29weV9iYWNrd2FyZChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkkyIF9fcmVz dWx0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUg X0lzX25vcm1hbF9pdGVyYXRvcjxfQkkxPjo6X05vcm1hbCBfX05vcm1hbDsKICByZXR1cm4gX19j b3B5X2JhY2t3YXJkX2lucHV0X25vcm1hbF9pdGVyYXRvcihfX2ZpcnN0LCBfX2xhc3QsIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fTm9y bWFsKCkpOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNs YXNzIF9PdXRwdXRJdGVyPgpwYWlyPF9JbnB1dEl0ZXIsIF9PdXRwdXRJdGVyPiBfX2NvcHlfbihf SW5wdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fY291bnQsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpIHsKICBmb3IgKCA7IF9fY291 bnQgPiAwOyAtLV9fY291bnQpIHsKICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgKytfX2Zp cnN0OwogICAgKytfX3Jlc3VsdDsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlciwgX091dHB1 dEl0ZXI+KF9fZmlyc3QsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SQUl0ZXIsIGNs YXNzIF9TaXplLCBjbGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X1JBSXRlciwgX091dHB1 dEl0ZXI+Cl9fY29weV9uKF9SQUl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg X091dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFn KSB7CiAgX1JBSXRlciBfX2xhc3QgPSBfX2ZpcnN0ICsgX19jb3VudDsKICByZXR1cm4gcGFpcjxf UkFJdGVyLCBfT3V0cHV0SXRlcj4oX19sYXN0LCBjb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1 bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBf T3V0cHV0SXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX091dHB1dEl0ZXI+Cl9fY29weV9u KF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQp IHsKICByZXR1cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAg ICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9PdXRwdXRJdGVyPgppbmxpbmUgcGFp cjxfSW5wdXRJdGVyLCBfT3V0cHV0SXRlcj4KY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1Np emUgX19jb3VudCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1 cm4gX19jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQpOwp9CgoKCgoKdGVtcGxhdGUg PGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgp2b2lkIGZpbGwoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgKl9fZmlyc3QgPSBfX3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX091dHB1dEl0ZXIsIGNs YXNzIF9TaXplLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyIGZpbGxfbihfT3V0cHV0SXRlciBfX2Zp cnN0LCBfU2l6ZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAg Zm9yICggOyBfX24gPiAwOyAtLV9fbiwgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX3ZhbHVl OwogIHJldHVybiBfX2ZpcnN0Owp9CgoKCmlubGluZSB2b2lkIGZpbGwodW5zaWduZWQgY2hhciog X19maXJzdCwgdW5zaWduZWQgY2hhciogX19sYXN0LAogICAgICAgICAgICAgICAgIGNvbnN0IHVu c2lnbmVkIGNoYXImIF9fYykKewogIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgbWVtc2V0 KF9fZmlyc3QsIF9fdG1wLCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKaW5saW5lIHZvaWQgZmlsbChz aWduZWQgY2hhciogX19maXJzdCwgc2lnbmVkIGNoYXIqIF9fbGFzdCwKICAgICAgICAgICAgICAg ICBjb25zdCBzaWduZWQgY2hhciYgX19jKQp7CiAgc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAg bWVtc2V0KF9fZmlyc3QsIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0 IC0gX19maXJzdCk7Cn0KCmlubGluZSB2b2lkIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19s YXN0LCBjb25zdCBjaGFyJiBfX2MpCnsKICBjaGFyIF9fdG1wID0gX19jOwogIG1lbXNldChfX2Zp cnN0LCBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3Qp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1NpemU+CmlubGluZSB1bnNpZ25lZCBjaGFyKiBmaWxsX24o dW5zaWduZWQgY2hhciogX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19maXJz dCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNz IF9TaXplPgppbmxpbmUgc2lnbmVkIGNoYXIqIGZpbGxfbihjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHNpZ25lZCBjaGFyJiBfX2MpCnsK ICBmaWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgcmV0dXJuIF9fZmlyc3QgKyBf X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIGNoYXIqIGZpbGxfbihjaGFyKiBf X2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IGNoYXImIF9fYykKewogIGZpbGwoX19maXJzdCwgX19m aXJzdCArIF9fbiwgX19jKTsKICByZXR1cm4gX19maXJzdCArIF9fbjsKfQoKCgoKCnRlbXBsYXRl IDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xhc3MgX0lucHV0SXRlcjI+CnBhaXI8X0lucHV0SXRlcjEs IF9JbnB1dEl0ZXIyPiBtaXNtYXRjaChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MikKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgKl9fZmlyc3QxID09ICpfX2ZpcnN0MikgewogICAgKytfX2ZpcnN0MTsKICAgICsrX19m aXJzdDI7CiAgfQogIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIxLCBfSW5wdXRJdGVyMj4oX19maXJz dDEsIF9fZmlyc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5w dXRJdGVyMiwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0 SXRlcjI+IG1pc21hdGNoKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICArK19fZmlyc3Qx OwogICAgKytfX2ZpcnN0MjsKICB9CiAgcmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0 ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEs IGNsYXNzIF9JbnB1dEl0ZXIyPgppbmxpbmUgYm9vbCBlcXVhbChfSW5wdXRJdGVyMSBfX2ZpcnN0 MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19m aXJzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAh PSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYgKCEoKl9fZmlyc3QxID09 ICpfX2ZpcnN0MikpCiAgICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX0JpbmFyeVBy ZWRpY2F0ZT4KaW5saW5lIGJvb2wgZXF1YWwoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfQmlu YXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyKQogICAgaWYg KCFfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgcmV0dXJuIGZhbHNl OwogIHJldHVybiB0cnVlOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFz cyBfSW5wdXRJdGVyMj4KYm9vbCBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MikKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsrX19maXJzdDIpIHsKICAg IGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpCiAgICAgIHJldHVybiB0cnVlOwogICAgaWYgKCpf X2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gX19m aXJzdDEgPT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBs ZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0 MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29t cGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0MSAh PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICA7ICsrX19maXJzdDEsICsr X19maXJzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICBy ZXR1cm4gdHJ1ZTsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQogICAgICBy ZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBfX2ZpcnN0MSA9PSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDI7Cn0KCmlubGluZSBib29sCmxleGljb2dyYXBoaWNhbF9jb21wYXJlKGNvbnN0 IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1 bnNpZ25lZCBjaGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNp Z25lZCBjaGFyKiBfX2ZpcnN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHNpemVfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19m aXJzdDE7CiAgY29uc3Qgc2l6ZV90IF9fbGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25z dCBpbnQgX19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBf X2xlbjIpKTsKICByZXR1cm4gX19yZXN1bHQgIT0gMCA/IF9fcmVzdWx0IDwgMCA6IF9fbGVuMSA8 IF9fbGVuMjsKfQoKaW5saW5lIGJvb2wgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgY2hh ciogX19maXJzdDEsIGNvbnN0IGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fZmlyc3QyLCBjb25zdCBjaGFyKiBfX2xhc3QyKQp7 CgogIHJldHVybiBsZXhpY29ncmFwaGljYWxfY29tcGFyZSgoY29uc3Qgc2lnbmVkIGNoYXIqKSBf X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNpZ25lZCBj aGFyKikgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp Z25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChj b25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgX19sZXhpY29ncmFwaGljYWxfY29tcGFy ZV8zd2F5KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJ dGVyMiBfX2xhc3QyKQp7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIg IT0gX19sYXN0MikgewogICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgcmV0dXJu IC0xOwogICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgcmV0dXJuIDE7CiAgICAr K19fZmlyc3QxOwogICAgKytfX2ZpcnN0MjsKICB9CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp IHsKICAgIHJldHVybiAhKF9fZmlyc3QxID09IF9fbGFzdDEpOwogIH0KICBlbHNlIHsKICAgIHJl dHVybiAtMTsKICB9Cn0KCmlubGluZSBpbnQKX19sZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5 KGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fZmlyc3QyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciogX19sYXN0MikKewogIGNvbnN0IHB0 cmRpZmZfdCBfX2xlbjEgPSBfX2xhc3QxIC0gX19maXJzdDE7CiAgY29uc3QgcHRyZGlmZl90IF9f bGVuMiA9IF9fbGFzdDIgLSBfX2ZpcnN0MjsKICBjb25zdCBpbnQgX19yZXN1bHQgPSBtZW1jbXAo X19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIpKTsKICByZXR1cm4gX19yZXN1 bHQgIT0gMCA/IF9fcmVzdWx0CiAgICAgICAgICAgICAgICAgICAgICAgOiAoX19sZW4xID09IF9f bGVuMiA/IDAgOiAoX19sZW4xIDwgX19sZW4yID8gLTEgOiAxKSk7Cn0KCmlubGluZSBpbnQKX19s ZXhpY29ncmFwaGljYWxfY29tcGFyZV8zd2F5KGNvbnN0IGNoYXIqIF9fZmlyc3QxLCBjb25zdCBj aGFyKiBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciog X19maXJzdDIsIGNvbnN0IGNoYXIqIF9fbGFzdDIpCnsKCiAgcmV0dXJuIF9fbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmVfM3dheSgKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoY29uc3Qg c2lnbmVkIGNoYXIqKSBfX2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAo Y29uc3Qgc2lnbmVkIGNoYXIqKSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fZmlyc3QyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIChjb25zdCBzaWduZWQgY2hhciopIF9fbGFzdDIpOwoKCgoKCgp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgppbnQgbGV4aWNvZ3JhcGhp Y2FsX2NvbXBhcmVfM3dheShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0 MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog IHJldHVybiBfX2xleGljb2dyYXBoaWNhbF9jb21wYXJlXzN3YXkoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKfQojIDUwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9j LmgiIDEgMwojIDU3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93 X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7 CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFk X3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK ICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZv aWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVu dGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hh ciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7 Cn0KIyA1OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRkZWYuaCIgMSAzCiMgNTkgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX2FsbG9jLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0cmlu Zy5oIiAxIDMKIyA2MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAyIDMK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Nhc3NlcnQuaCIgMSAzCiMgMzcgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2Fzc2VydC5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL2Fzc2VydC5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDIgMwoj IDY1ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQg X19hc3NlcnRfZmFpbCAoX19jb25zdCBjaGFyICpfX2Fzc2VydGlvbiwgX19jb25zdCBjaGFyICpf X2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsIF9f Y29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19u b3JldHVybl9fKSk7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBfX2Vy cm51bSwgX19jb25zdCBjaGFyICpfX2ZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBpbnQgX19saW5lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX25vcmV0dXJuX18pKTsKCgoKCmV4dGVybiB2b2lkIF9fYXNzZXJ0IChjb25zdCBjaGFyICpf X2Fzc2VydGlvbiwgY29uc3QgY2hhciAqX19maWxlLCBpbnQgX19saW5lKQogICAgIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgp9CiMgMzggIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2Fzc2VydC5oIiAyIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0bF9hbGxvYy5oIiAyIDMKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdGhyZWFkcy5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJl YWRzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMv Z3Roci5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDIgMwojIDgwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RocmVhZHMuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKIyA5NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDMKc3RydWN0IF9SZWZjb3VudF9CYXNlCnsKCgoKCiAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoK CiAgIHZvbGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgoKCiAgX19ndGhyZWFkX211dGV4X3Qg X01fcmVmX2NvdW50X2xvY2s7CiAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9j b3VudChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAw LCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9s b2NrID0gX190bXA7CgoKCgoKICAgIH0KIyAxNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdGhyZWFkcy5oIiAzCiAgdm9pZCBfTV9pbmNyKCkgewogICAgX19ndGhyZWFkX211dGV4X2xv Y2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICsrX01fcmVmX2NvdW50OwogICAgX19ndGhyZWFk X211dGV4X3VubG9jaygmX01fcmVmX2NvdW50X2xvY2spOwogIH0KICBfUkNfdCBfTV9kZWNyKCkg ewogICAgX19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgIHZvbGF0 aWxlIF9SQ190IF9fdG1wID0gLS1fTV9yZWZfY291bnQ7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5s b2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICByZXR1cm4gX190bXA7CiAgfQojIDE5MiAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyAzMTMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgpz dHJ1Y3QgX1NUTF9tdXRleF9zcGluIHsKICBlbnVtIHsgX19sb3dfbWF4ID0gMzAsIF9faGlnaF9t YXggPSAxMDAwIH07CgoKICBzdGF0aWMgdW5zaWduZWQgX19tYXg7CiAgc3RhdGljIHVuc2lnbmVk IF9fbGFzdDsKfTsKCnRlbXBsYXRlIDxpbnQgX19pbnN0Pgp1bnNpZ25lZCBfU1RMX211dGV4X3Nw aW48X19pbnN0Pjo6X19tYXggPSBfU1RMX211dGV4X3NwaW48X19pbnN0Pjo6X19sb3dfbWF4OwoK dGVtcGxhdGUgPGludCBfX2luc3Q+CnVuc2lnbmVkIF9TVExfbXV0ZXhfc3BpbjxfX2luc3Q+Ojpf X2xhc3QgPSAwOwojIDM0MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgi IDMKc3RydWN0IF9TVExfbXV0ZXhfbG9jawp7CgoKCgoKCgogIF9fZ3RocmVhZF9tdXRleF90IF9N X2xvY2s7CiAgdm9pZCBfTV9pbml0aWFsaXplKCkgewojIDM3MSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB9CiAgdm9pZCBfTV9hY3F1aXJlX2xvY2soKSB7CgoK CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX01fbG9jayk7CiAgfQogIHZvaWQgX01fcmVsZWFz ZV9sb2NrKCkgewoKCgogICAgX19ndGhyZWFkX211dGV4X3VubG9jaygmX01fbG9jayk7CiAgfQoj IDQ4MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90aHJlYWRzLmgiIDMKfTsKIyA1MjEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGhyZWFkcy5oIiAzCnN0cnVjdCBfU1RMX2F1 dG9fbG9jawp7CiAgX1NUTF9tdXRleF9sb2NrJiBfTV9sb2NrOwoKICBfU1RMX2F1dG9fbG9jayhf U1RMX211dGV4X2xvY2smIF9fbG9jaykgOiBfTV9sb2NrKF9fbG9jaykKICAgIHsgX01fbG9jay5f TV9hY3F1aXJlX2xvY2soKTsgfQogIH5fU1RMX2F1dG9fbG9jaygpIHsgX01fbG9jay5fTV9yZWxl YXNlX2xvY2soKTsgfQoKcHJpdmF0ZToKICB2b2lkIG9wZXJhdG9yPShjb25zdCBfU1RMX2F1dG9f bG9jayYpOwogIF9TVExfYXV0b19sb2NrKGNvbnN0IF9TVExfYXV0b19sb2NrJik7Cn07Cgp9CiMg NjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgOTcgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCgoKdGVt cGxhdGUgPGludCBfX2luc3Q+CmNsYXNzIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh dGU6CgogIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9jKHNpemVfdCk7CiAgc3RhdGljIHZvaWQq IF9TX29vbV9yZWFsbG9jKHZvaWQqLCBzaXplX3QpOwogIHN0YXRpYyB2b2lkICgqIF9fbWFsbG9j X2FsbG9jX29vbV9oYW5kbGVyKSgpOwoKcHVibGljOgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUo c2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jlc3VsdCA9IG1hbGxvYyhfX24pOwogICAgaWYg KDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgcmV0dXJu IF9fcmVzdWx0OwogIH0KCiAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVf dCApCiAgewogICAgZnJlZShfX3ApOwogIH0KCiAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9p ZCogX19wLCBzaXplX3QgLCBzaXplX3QgX19uZXdfc3opCiAgewogICAgdm9pZCogX19yZXN1bHQg PSByZWFsbG9jKF9fcCwgX19uZXdfc3opOwogICAgaWYgKDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0 ID0gX1Nfb29tX3JlYWxsb2MoX19wLCBfX25ld19zeik7CiAgICByZXR1cm4gX19yZXN1bHQ7CiAg fQoKICBzdGF0aWMgdm9pZCAoKiBfX3NldF9tYWxsb2NfaGFuZGxlcih2b2lkICgqX19mKSgpKSko KQogIHsKICAgIHZvaWQgKCogX19vbGQpKCkgPSBfX21hbGxvY19hbGxvY19vb21faGFuZGxlcjsK ICAgIF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyID0gX19mOwogICAgcmV0dXJuKF9fb2xkKTsK ICB9Cgp9OwoKCgp0ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCAoKiBfX21hbGxvY19hbGxvY190 ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21faGFuZGxlcikoKSA9IDA7Cgp0ZW1w bGF0ZSA8aW50IF9faW5zdD4Kdm9pZCoKX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0Pjo6 X1Nfb29tX21hbGxvYyhzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9fbXlfbWFsbG9jX2hhbmRs ZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7CiAgICAgICAgX19teV9t YWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgIGlmICgw ID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOyB9CiAg ICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9fcmVzdWx0ID0gbWFsbG9j KF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4oX19yZXN1bHQpOwogICAgfQp9Cgp0 ZW1wbGF0ZSA8aW50IF9faW5zdD4Kdm9pZCogX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0 Pjo6X1Nfb29tX3JlYWxsb2Modm9pZCogX19wLCBzaXplX3QgX19uKQp7CiAgICB2b2lkICgqIF9f bXlfbWFsbG9jX2hhbmRsZXIpKCk7CiAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICBmb3IgKDs7KSB7 CiAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVy OwogICAgICAgIGlmICgwID09IF9fbXlfbWFsbG9jX2hhbmRsZXIpIHsgc3RkOjpfX3Rocm93X2Jh ZF9hbGxvYygpOyB9CiAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgIF9f cmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbik7CiAgICAgICAgaWYgKF9fcmVzdWx0KSByZXR1cm4o X19yZXN1bHQpOwogICAgfQp9Cgp0eXBlZGVmIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPDA+IG1h bGxvY19hbGxvYzsKCnRlbXBsYXRlPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBzaW1w bGVfYWxsb2MgewoKcHVibGljOgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikK ICAgICAgeyByZXR1cm4gMCA9PSBfX24gPyAwIDogKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoX19u ICogc2l6ZW9mIChfVHApKTsgfQogICAgc3RhdGljIF9UcCogYWxsb2NhdGUodm9pZCkKICAgICAg eyByZXR1cm4gKF9UcCopIF9BbGxvYzo6YWxsb2NhdGUoc2l6ZW9mIChfVHApKTsgfQogICAgc3Rh dGljIHZvaWQgZGVhbGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgICAgeyBpZiAoMCAh PSBfX24pIF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3AsIF9fbiAqIHNpemVvZiAoX1RwKSk7IH0KICAg IHN0YXRpYyB2b2lkIGRlYWxsb2NhdGUoX1RwKiBfX3ApCiAgICAgIHsgX0FsbG9jOjpkZWFsbG9j YXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQp9OwoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j PgpjbGFzcyBkZWJ1Z19hbGxvYyB7Cgpwcml2YXRlOgoKICBlbnVtIHtfU19leHRyYSA9IDh9OwoK CgpwdWJsaWM6CgogIHN0YXRpYyB2b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogIHsKICAgIGNo YXIqIF9fcmVzdWx0ID0gKGNoYXIqKV9BbGxvYzo6YWxsb2NhdGUoX19uICsgKGludCkgX1NfZXh0 cmEpOwogICAgKihzaXplX3QqKV9fcmVzdWx0ID0gX19uOwogICAgcmV0dXJuIF9fcmVzdWx0ICsg KGludCkgX1NfZXh0cmE7CiAgfQoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwg c2l6ZV90IF9fbikKICB7CiAgICBjaGFyKiBfX3JlYWxfcCA9IChjaGFyKilfX3AgLSAoaW50KSBf U19leHRyYTsKICAgIChzdGF0aWNfY2FzdDx2b2lkPiAoKCooc2l6ZV90KilfX3JlYWxfcCA9PSBf X24pID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9fcmVhbF9wID09IF9fbiIsICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsbG9jLmgiLCAyMTksIF9fUFJFVFRZX0ZVTkNU SU9OX18pLCAwKSkpOwogICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50 KSBfU19leHRyYSk7CiAgfQoKICBzdGF0aWMgdm9pZCogcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNp emVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KQogIHsKICAgIGNoYXIqIF9fcmVhbF9wID0g KGNoYXIqKV9fcCAtIChpbnQpIF9TX2V4dHJhOwogICAgKHN0YXRpY19jYXN0PHZvaWQ+ICgoKihz aXplX3QqKV9fcmVhbF9wID09IF9fb2xkX3N6KSA/IDAgOiAoX19hc3NlcnRfZmFpbCAoIiooc2l6 ZV90KilfX3JlYWxfcCA9PSBfX29sZF9zeiIsICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X2FsbG9jLmgiLCAyMjYsIF9fUFJFVFRZX0ZVTkNUSU9OX18pLCAwKSkpOwogICAgY2hhciogX19y ZXN1bHQgPSAoY2hhciopCiAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19vbGRf c3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X25ld19zeiArIChpbnQpIF9TX2V4dHJhKTsKICAgICooc2l6ZV90KilfX3Jlc3VsdCA9IF9fbmV3 X3N6OwogICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgfQoKfTsKIyAyNzAg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Ym9vbCB0 aHJlYWRzLCBpbnQgaW5zdD4KY2xhc3MgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlIHsKCnByaXZh dGU6CgoKICBlbnVtIHtfQUxJR04gPSA4fTsKICBlbnVtIHtfTUFYX0JZVEVTID0gMTI4fTsKICBl bnVtIHtfTkZSRUVMSVNUUyA9IDE2fTsKICBzdGF0aWMgc2l6ZV90CiAgX1Nfcm91bmRfdXAoc2l6 ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3QpIF9BTElHTi0x KSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogIHVuaW9uIF9PYmogewogICAgICAgIHVu aW9uIF9PYmoqIF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgIGNoYXIgX01fY2xpZW50X2RhdGFb MV07CiAgfTsKCiAgc3RhdGljIF9PYmoqIHZvbGF0aWxlIF9TX2ZyZWVfbGlzdFtdOwoKICBzdGF0 aWMgc2l6ZV90IF9TX2ZyZWVsaXN0X2luZGV4KHNpemVfdCBfX2J5dGVzKSB7CiAgICAgICAgcmV0 dXJuICgoKF9fYnl0ZXMpICsgKHNpemVfdClfQUxJR04tMSkvKHNpemVfdClfQUxJR04gLSAxKTsK ICB9CgoKICBzdGF0aWMgdm9pZCogX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCiAgc3RhdGljIGNo YXIqIF9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsIGludCYgX19ub2Jqcyk7CgoKICBzdGF0 aWMgY2hhciogX1Nfc3RhcnRfZnJlZTsKICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7CiAgc3Rh dGljIHNpemVfdCBfU19oZWFwX3NpemU7CgoKICAgIHN0YXRpYyBfU1RMX211dGV4X2xvY2sgX1Nf bm9kZV9hbGxvY2F0b3JfbG9jazsKCgoKCgogICAgY2xhc3MgX0xvY2s7CiAgICBmcmllbmQgY2xh c3MgX0xvY2s7CiAgICBjbGFzcyBfTG9jayB7CiAgICAgICAgcHVibGljOgogICAgICAgICAgICBf TG9jaygpIHsgeyBpZiAodGhyZWFkcykgX1Nfbm9kZV9hbGxvY2F0b3JfbG9jay5fTV9hY3F1aXJl X2xvY2soKTsgfTsgfQogICAgICAgICAgICB+X0xvY2soKSB7IHsgaWYgKHRocmVhZHMpIF9TX25v ZGVfYWxsb2NhdG9yX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH07IH0KICAgIH07CgpwdWJsaWM6 CgoKICBzdGF0aWMgdm9pZCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICB7CiAgICB2b2lkKiBfX3Jl dCA9IDA7CgogICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpIHsKICAgICAgX19yZXQg PSBtYWxsb2NfYWxsb2M6OmFsbG9jYXRlKF9fbik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX09i aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICA9IF9TX2ZyZWVfbGlzdCArIF9T X2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKCgoKICAgICAgX0xvY2sgX19sb2NrX2luc3RhbmNlOwoK ICAgICAgX09iaiogX19yZXN1bHQgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgIGlmIChfX3Jlc3Vs dCA9PSAwKQogICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAg ICBlbHNlIHsKICAgICAgICAqX19teV9mcmVlX2xpc3QgPSBfX3Jlc3VsdCAtPiBfTV9mcmVlX2xp c3RfbGluazsKICAgICAgICBfX3JldCA9IF9fcmVzdWx0OwogICAgICB9CiAgICB9CgogICAgcmV0 dXJuIF9fcmV0OwogIH07CgoKICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6 ZV90IF9fbikKICB7CiAgICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgbWFs bG9jX2FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgX19uKTsKICAgIGVsc2UgewogICAgICBfT2JqKiB2 b2xhdGlsZSogX19teV9mcmVlX2xpc3QKICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsgX1NfZnJl ZWxpc3RfaW5kZXgoX19uKTsKICAgICAgX09iaiogX19xID0gKF9PYmoqKV9fcDsKCgoKCiAgICAg IF9Mb2NrIF9fbG9ja19pbnN0YW5jZTsKCiAgICAgIF9fcSAtPiBfTV9mcmVlX2xpc3RfbGluayA9 ICpfX215X2ZyZWVfbGlzdDsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19xOwoKICAgIH0KICB9 CgogIHN0YXRpYyB2b2lkKiByZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9fb2xkX3N6LCBz aXplX3QgX19uZXdfc3opOwoKfSA7Cgp0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTx0 cnVlLCAwPiBhbGxvYzsKdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8ZmFsc2UsIDA+ IHNpbmdsZV9jbGllbnRfYWxsb2M7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2lu c3Q+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRl PF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWZh dWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsK fQoKdGVtcGxhdGUgPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVy YXRvciE9KGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4m LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxf X3RocmVhZHMsIF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9CgoKCgoKCgp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCYgX19ub2JqcykKewogICAgY2hhciogX19yZXN1bHQ7CiAgICBzaXplX3QgX190b3RhbF9ieXRl cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICBzaXplX3QgX19ieXRlc19sZWZ0ID0gX1NfZW5kX2Zy ZWUgLSBfU19zdGFydF9mcmVlOwoKICAgIGlmIChfX2J5dGVzX2xlZnQgPj0gX190b3RhbF9ieXRl cykgewogICAgICAgIF9fcmVzdWx0ID0gX1Nfc3RhcnRfZnJlZTsKICAgICAgICBfU19zdGFydF9m cmVlICs9IF9fdG90YWxfYnl0ZXM7CiAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0gZWxz ZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkgewogICAgICAgIF9fbm9ianMgPSAoaW50KShf X2J5dGVzX2xlZnQvX19zaXplKTsKICAgICAgICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19u b2JqczsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAgX1Nfc3RhcnRf ZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICB9IGVs c2UgewogICAgICAgIHNpemVfdCBfX2J5dGVzX3RvX2dldCA9CiAgICAgICAgICAyICogX190b3Rh bF9ieXRlcyArIF9TX3JvdW5kX3VwKF9TX2hlYXBfc2l6ZSA+PiA0KTsKCiAgICAgICAgaWYgKF9f Ynl0ZXNfbGVmdCA+IDApIHsKICAgICAgICAgICAgX09iaiogdm9sYXRpbGUqIF9fbXlfZnJlZV9s aXN0ID0KICAgICAgICAgICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1NfZnJlZWxpc3Rf aW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICgoX09iaiopX1Nfc3RhcnRfZnJlZSkg LT4gX01fZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICpfX215 X2ZyZWVfbGlzdCA9IChfT2JqKilfU19zdGFydF9mcmVlOwogICAgICAgIH0KICAgICAgICBfU19z dGFydF9mcmVlID0gKGNoYXIqKW1hbGxvYyhfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgaWYgKDAg PT0gX1Nfc3RhcnRfZnJlZSkgewogICAgICAgICAgICBzaXplX3QgX19pOwogICAgICAgICAgICBf T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgIF9PYmoqIF9fcDsKCgoK ICAgICAgICAgICAgZm9yIChfX2kgPSBfX3NpemU7CiAgICAgICAgICAgICAgICAgX19pIDw9IChz aXplX3QpIF9NQVhfQllURVM7CiAgICAgICAgICAgICAgICAgX19pICs9IChzaXplX3QpIF9BTElH TikgewogICAgICAgICAgICAgICAgX19teV9mcmVlX2xpc3QgPSBfU19mcmVlX2xpc3QgKyBfU19m cmVlbGlzdF9pbmRleChfX2kpOwogICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJlZV9saXN0 OwogICAgICAgICAgICAgICAgaWYgKDAgIT0gX19wKSB7CiAgICAgICAgICAgICAgICAgICAgKl9f bXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2ZyZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAg ICAgIF9TX3N0YXJ0X2ZyZWUgPSAoY2hhciopX19wOwogICAgICAgICAgICAgICAgICAgIF9TX2Vu ZF9mcmVlID0gX1Nfc3RhcnRfZnJlZSArIF9faTsKICAgICAgICAgICAgICAgICAgICByZXR1cm4o X1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgICAgICBfU19lbmRfZnJlZSA9IDA7CiAgICAgICAgICAgIF9TX3N0 YXJ0X2ZyZWUgPSAoY2hhciopbWFsbG9jX2FsbG9jOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7 CgoKCiAgICAgICAgfQogICAgICAgIF9TX2hlYXBfc2l6ZSArPSBfX2J5dGVzX3RvX2dldDsKICAg ICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUgKyBfX2J5dGVzX3RvX2dldDsKICAgICAg ICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICB9Cn0KCgoKCgp0 ZW1wbGF0ZSA8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CnZvaWQqCl9fZGVmYXVsdF9hbGxv Y190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX3JlZmlsbChzaXplX3QgX19uKQp7CiAg ICBpbnQgX19ub2JqcyA9IDIwOwogICAgY2hhciogX19jaHVuayA9IF9TX2NodW5rX2FsbG9jKF9f biwgX19ub2Jqcyk7CiAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICBfT2Jq KiBfX3Jlc3VsdDsKICAgIF9PYmoqIF9fY3VycmVudF9vYmo7CiAgICBfT2JqKiBfX25leHRfb2Jq OwogICAgaW50IF9faTsKCiAgICBpZiAoMSA9PSBfX25vYmpzKSByZXR1cm4oX19jaHVuayk7CiAg ICBfX215X2ZyZWVfbGlzdCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7 CgoKICAgICAgX19yZXN1bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0 ID0gX19uZXh0X29iaiA9IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0g MTsgOyBfX2krKykgewogICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAg IF9fbmV4dF9vYmogPSAoX09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBp ZiAoX19ub2JqcyAtIDEgPT0gX19pKSB7CiAgICAgICAgICAgIF9fY3VycmVudF9vYmogLT4gX01f ZnJlZV9saXN0X2xpbmsgPSAwOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2Ugewog ICAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29i ajsKICAgICAgICB9CiAgICAgIH0KICAgIHJldHVybihfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxi b29sIHRocmVhZHMsIGludCBpbnN0Pgp2b2lkKgpfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dGhy ZWFkcywgaW5zdD46OnJlYWxsb2NhdGUodm9pZCogX19wLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fb2xkX3N6LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3X3N6 KQp7CiAgICB2b2lkKiBfX3Jlc3VsdDsKICAgIHNpemVfdCBfX2NvcHlfc3o7CgogICAgaWYgKF9f b2xkX3N6ID4gKHNpemVfdCkgX01BWF9CWVRFUyAmJiBfX25ld19zeiA+IChzaXplX3QpIF9NQVhf QllURVMpIHsKICAgICAgICByZXR1cm4ocmVhbGxvYyhfX3AsIF9fbmV3X3N6KSk7CiAgICB9CiAg ICBpZiAoX1Nfcm91bmRfdXAoX19vbGRfc3opID09IF9TX3JvdW5kX3VwKF9fbmV3X3N6KSkgcmV0 dXJuKF9fcCk7CiAgICBfX3Jlc3VsdCA9IGFsbG9jYXRlKF9fbmV3X3N6KTsKICAgIF9fY29weV9z eiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDogX19uZXdfc3o7CiAgICBtZW1jcHko X19yZXN1bHQsIF9fcCwgX19jb3B5X3N6KTsKICAgIGRlYWxsb2NhdGUoX19wLCBfX29sZF9zeik7 CiAgICByZXR1cm4oX19yZXN1bHQpOwp9CgoKICAgIHRlbXBsYXRlIDxib29sIF9fdGhyZWFkcywg aW50IF9faW5zdD4KICAgIF9TVExfbXV0ZXhfbG9jawogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfbm9kZV9hbGxvY2F0b3JfbG9jawogICAgICAgID0g eyB7MCwgMCwgMCwgUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwgeyAwLCAwIH19IH07CgoKCnRlbXBs YXRlIDxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KY2hhciogX19kZWZhdWx0X2FsbG9jX3Rl bXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJlZSA9IDA7Cgp0ZW1wbGF0ZSA8 Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CmNoYXIqIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0 ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0gMDsKCnRlbXBsYXRlIDxib29sIF9f dGhyZWFkcywgaW50IF9faW5zdD4Kc2l6ZV90IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7Cgp0ZW1wbGF0ZSA8Ym9vbCBfX3RocmVh ZHMsIGludCBfX2luc3Q+CnR5cGVuYW1lIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVh ZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCl9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Ro cmVhZHMsIF9faW5zdD4gOjpfU19mcmVlX2xpc3RbCiAgICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+OjpfTkZSRUVMSVNUUwpdID0gezAsIDAsIDAsIDAsIDAsIDAs IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIH07CiMgNTU1ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX2FsbG9jLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgYWxsb2Nh dG9yIHsKICB0eXBlZGVmIGFsbG9jIF9BbGxvYzsKcHVibGljOgogIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBf VHAqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRl ZiBfVHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwog IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07CgogIGFsbG9j YXRvcigpIHRocm93KCkge30KICBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yJikgdGhyb3coKSB7 fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhbGxvY2F0b3IoY29uc3QgYWxsb2NhdG9yPF9UcDE+ JikgdGhyb3coKSB7fQogIH5hbGxvY2F0b3IoKSB0aHJvdygpIHt9CgogIHBvaW50ZXIgYWRkcmVz cyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CiAgY29uc3RfcG9pbnRlciBh ZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsgcmV0dXJuICZfX3g7IH0KCgoKICBf VHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0gMCkgewogICAgcmV0dXJu IF9fbiAhPSAwID8gc3RhdGljX2Nhc3Q8X1RwKj4oX0FsbG9jOjphbGxvY2F0ZShfX24gKiBzaXpl b2YoX1RwKSkpCiAgICAgICAgICAgICAgICAgICAgOiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0 ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9f cCwgX19uICogc2l6ZW9mKF9UcCkpOyB9CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRo cm93KCkKICAgIHsgcmV0dXJuIHNpemVfdCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNv bnN0cnVjdChwb2ludGVyIF9fcCwgY29uc3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192 YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBvaW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0 ZW1wbGF0ZTw+CmNsYXNzIGFsbG9jYXRvcjx2b2lkPiB7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVf dCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVk ZWYgdm9pZCogcG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAg dHlwZWRlZiB2b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3Qg cmViaW5kIHsKICAgIHR5cGVkZWYgYWxsb2NhdG9yPF9UcDE+IG90aGVyOwogIH07Cn07CgoKdGVt cGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0 IGFsbG9jYXRvcjxfVDE+JiwgY29uc3QgYWxsb2NhdG9yPF9UMj4mKQp7CiAgcmV0dXJuIHRydWU7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBhbGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVy biBmYWxzZTsKfQojIDYzMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAz CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9fYWxsb2NhdG9yIHsK ICBfQWxsb2MgX191bmRlcmx5aW5nX2FsbG9jOwoKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7 CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1RwKiBwb2lu dGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgX1RwJiBy ZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVm IF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJlYmluZCB7 CiAgICB0eXBlZGVmIF9fYWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4gb3RoZXI7CiAgfTsKCiAgX19h bGxvY2F0b3IoKSB0aHJvdygpIHt9CiAgX19hbGxvY2F0b3IoY29uc3QgX19hbGxvY2F0b3ImIF9f YSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdfYWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxv Yykge30KICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9j YXRvcjxfVHAxLCBfQWxsb2M+JiBfX2EpIHRocm93KCkKICAgIDogX191bmRlcmx5aW5nX2FsbG9j KF9fYS5fX3VuZGVybHlpbmdfYWxsb2MpIHt9CiAgfl9fYWxsb2NhdG9yKCkgdGhyb3coKSB7fQoK ICBwb2ludGVyIGFkZHJlc3MocmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQog IGNvbnN0X3BvaW50ZXIgYWRkcmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVy biAmX194OyB9CgoKICBfVHAqIGFsbG9jYXRlKHNpemVfdHlwZSBfX24sIGNvbnN0IHZvaWQqID0g MCkgewogICAgcmV0dXJuIF9fbiAhPSAwCiAgICAgICAgPyBzdGF0aWNfY2FzdDxfVHAqPihfX3Vu ZGVybHlpbmdfYWxsb2MuYWxsb2NhdGUoX19uICogc2l6ZW9mKF9UcCkpKQogICAgICAgIDogMDsK ICB9CgoKICB2b2lkIGRlYWxsb2NhdGUocG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7 IF9fdW5kZXJseWluZ19hbGxvYy5kZWFsbG9jYXRlKF9fcCwgX19uICogc2l6ZW9mKF9UcCkpOyB9 CgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIHNpemVf dCgtMSkgLyBzaXplb2YoX1RwKTsgfQoKICB2b2lkIGNvbnN0cnVjdChwb2ludGVyIF9fcCwgY29u c3QgX1RwJiBfX3ZhbCkgeyBuZXcoX19wKSBfVHAoX192YWwpOyB9CiAgdm9pZCBkZXN0cm95KHBv aW50ZXIgX19wKSB7IF9fcC0+fl9UcCgpOyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpj bGFzcyBfX2FsbG9jYXRvcjx2b2lkLCBfQWxsb2M+IHsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5 cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdm9pZCog cG9pbnRlcjsKICB0eXBlZGVmIGNvbnN0IHZvaWQqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiB2 b2lkIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmViaW5kIHsK ICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9Owp9OwoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f X3VuZGVybHlpbmdfYWxsb2MgPT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBf X2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTEsCiAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2EyKQp7CiAgcmV0dXJuIF9fYTEuX191bmRl cmx5aW5nX2FsbG9jICE9IF9fYTIuX191bmRlcmx5aW5nX2FsbG9jOwp9CgoKCgoKdGVtcGxhdGUg PGludCBpbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPGluc3Q+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX21hbGxvY19hbGxv Y190ZW1wbGF0ZTxpbnN0PiYpCnsKICByZXR1cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGludCBfX2lu c3Q+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8 X19pbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0PiYpCnsKICByZXR1cm4gZmFsc2U7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAg ICAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdfYWxsb2M8X0FsbG9jPiYpIHsKICByZXR1 cm4gdHJ1ZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBkZWJ1Z19hbGxvYzxfQWxsb2M+JiwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBkZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsKfQojIDc2MSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNs YXNzIF9BbGxvY2F0b3I+CnN0cnVjdCBfQWxsb2NfdHJhaXRzCnsKICBzdGF0aWMgY29uc3QgYm9v bCBfU19pbnN0YW5jZWxlc3MgPSBmYWxzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY2F0b3I6 OnRlbXBsYXRlIHJlYmluZDxfVHA+OjpvdGhlciBhbGxvY2F0b3JfdHlwZTsKfTsKCnRlbXBsYXRl IDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvY2F0b3I+CmNvbnN0IGJvb2wgX0FsbG9jX3RyYWl0czxf VHAsIF9BbGxvY2F0b3I+OjpfU19pbnN0YW5jZWxlc3M7CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgYWxsb2NhdG9yPF9UcDE+ID4K ewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBz aW1wbGVfYWxsb2M8X1RwLCBhbGxvYz4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBhbGxvY2F0b3I8 X1RwPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgaW50IF9faW5z dD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2lu c3Q+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw ZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4g X0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBf X2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KewogIHN0YXRpYyBj b25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8 X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAg ICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxs b2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBl Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190 cmFpdHM8X1RwLCBkZWJ1Z19hbGxvYzxfQWxsb2M+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19h bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgoKCnRlbXBsYXRlIDxjbGFz cyBfVHAsIGNsYXNzIF9UcDEsIGludCBfX2luc3Q+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwK ICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGU8X19pbnN0PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9 IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fbWFs bG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBib29sIF9fdGhyLCBpbnQgX19pbnN0PgpzdHJ1Y3Qg X0FsbG9jX3RyYWl0czxfVHAsCiAgICAgICAgICAgICAgICAgICAgICBfX2FsbG9jYXRvcjxfVHAx LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZWZhdWx0X2FsbG9jX3RlbXBs YXRlPF9fdGhyLCBfX2luc3Q+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2Vs ZXNzID0gdHJ1ZTsKICB0eXBlZGVmIHNpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190 ZW1wbGF0ZTxfX3RocixfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+ CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfVHAxLCBjbGFzcyBfQWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0 b3I8X1RwMSwgZGVidWdfYWxsb2M8X0FsbG9jPiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9T X2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlwZWRlZiBzaW1wbGVfYWxsb2M8X1RwLCBkZWJ1Z19h bGxvYzxfQWxsb2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIGRl YnVnX2FsbG9jPF9BbGxvYz4gPiBhbGxvY2F0b3JfdHlwZTsKfTsKCn0KIyA1MSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfY29uc3RydWN0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL25ldyIgMSAzCiMg NjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0LmgiIDIgMwoKbmFtZXNw YWNlIHN0ZAp7CiMgNzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0Lmgi IDMKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0 KF9UMSogX19wLCBjb25zdCBfVDImIF9fdmFsdWUpIHsKbmV3ICgodm9pZCopIF9fcCkgX1QxKF9f dmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUgdm9pZCBfQ29uc3RydWN0KF9U MSogX19wKSB7CiAgbmV3ICgodm9pZCopIF9fcCkgX1QxKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf VHA+CmlubGluZSB2b2lkIF9EZXN0cm95KF9UcCogX19wb2ludGVyKSB7CiAgX19wb2ludGVyLT5+ X1RwKCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgp2b2lkCl9fZGVzdHJv eV9hdXgoX0ZvcndhcmRJdGVyYXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCwg X19mYWxzZV90eXBlKQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgZGVzdHJveSgmKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRv cj4KaW5saW5lIHZvaWQgX19kZXN0cm95X2F1eChfRm9yd2FyZEl0ZXJhdG9yLCBfRm9yd2FyZEl0 ZXJhdG9yLCBfX3RydWVfdHlwZSkge30KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9y LCBjbGFzcyBfVHA+CmlubGluZSB2b2lkCl9fZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmly c3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBf X3R5cGVfdHJhaXRzPF9UcD46Omhhc190cml2aWFsX2Rlc3RydWN0b3IKICAgICAgICAgIF9Ucml2 aWFsX2Rlc3RydWN0b3I7CiAgX19kZXN0cm95X2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9Ucml2aWFs X2Rlc3RydWN0b3IoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgppbmxp bmUgdm9pZCBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0KSB7CiAgX19kZXN0cm95KF9fZmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9f Zmlyc3QpKTsKfQoKaW5saW5lIHZvaWQgX0Rlc3Ryb3koY2hhciosIGNoYXIqKSB7fQppbmxpbmUg dm9pZCBfRGVzdHJveShpbnQqLCBpbnQqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveShsb25nKiwg bG9uZyopIHt9CmlubGluZSB2b2lkIF9EZXN0cm95KGZsb2F0KiwgZmxvYXQqKSB7fQppbmxpbmUg dm9pZCBfRGVzdHJveShkb3VibGUqLCBkb3VibGUqKSB7fQppbmxpbmUgdm9pZCBfRGVzdHJveSh3 Y2hhcl90Kiwgd2NoYXJfdCopIHt9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+ CmlubGluZSB2b2lkIGNvbnN0cnVjdChfVDEqIF9fcCwgY29uc3QgX1QyJiBfX3ZhbHVlKSB7CiAg X0NvbnN0cnVjdChfX3AsIF9fdmFsdWUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxPgppbmxpbmUg dm9pZCBjb25zdHJ1Y3QoX1QxKiBfX3ApIHsKICBfQ29uc3RydWN0KF9fcCk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfVHA+CmlubGluZSB2b2lkIGRlc3Ryb3koX1RwKiBfX3BvaW50ZXIpIHsKICBfRGVz dHJveShfX3BvaW50ZXIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KaW5s aW5lIHZvaWQgZGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0 b3IgX19sYXN0KSB7CiAgX0Rlc3Ryb3koX19maXJzdCwgX19sYXN0KTsKfQoKfQojIDUyICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfdHlwZXMuaCIgMSAzCiMgNTMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfdGVtcGJ1Zi5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpw YWlyPF9UcCosIHB0cmRpZmZfdD4KX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19s ZW4sIF9UcCopCnsKICBpZiAoX19sZW4gPiBwdHJkaWZmX3QoMjE0NzQ4MzY0NyAvIHNpemVvZihf VHApKSkKICAgIF9fbGVuID0gMjE0NzQ4MzY0NyAvIHNpemVvZihfVHApOwoKICB3aGlsZSAoX19s ZW4gPiAwKSB7CiAgICBfVHAqIF9fdG1wID0gKF9UcCopIG1hbGxvYygoc2l6ZV90KV9fbGVuICog c2l6ZW9mKF9UcCkpOwogICAgaWYgKF9fdG1wICE9IDApCiAgICAgIHJldHVybiBwYWlyPF9UcCos IHB0cmRpZmZfdD4oX190bXAsIF9fbGVuKTsKICAgIF9fbGVuIC89IDI7CiAgfQoKICByZXR1cm4g cGFpcjxfVHAqLCBwdHJkaWZmX3Q+KChfVHAqKTAsIDApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgppbmxpbmUgcGFpcjxfVHAqLCBwdHJkaWZmX3Q+IGdldF90ZW1wb3JhcnlfYnVmZmVyKHB0cmRp ZmZfdCBfX2xlbikgewogIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1Rw KikgMCk7Cn0KCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIHBhaXI8X1RwKiwgcHRy ZGlmZl90PiBnZXRfdGVtcG9yYXJ5X2J1ZmZlcihwdHJkaWZmX3QgX19sZW4sIF9UcCopIHsKICBy ZXR1cm4gX19nZXRfdGVtcG9yYXJ5X2J1ZmZlcihfX2xlbiwgKF9UcCopIDApOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgp2b2lkIHJldHVybl90ZW1wb3JhcnlfYnVmZmVyKF9UcCogX19wKSB7CiAg ZnJlZShfX3ApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1Rw PgpjbGFzcyBfVGVtcG9yYXJ5X2J1ZmZlciB7CnByaXZhdGU6CiAgcHRyZGlmZl90IF9NX29yaWdp bmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCogX01fYnVmZmVyOwoKICB2b2lkIF9N X2FsbG9jYXRlX2J1ZmZlcigpIHsKICAgIF9NX29yaWdpbmFsX2xlbiA9IF9NX2xlbjsKICAgIF9N X2J1ZmZlciA9IDA7CgogICAgaWYgKF9NX2xlbiA+IChwdHJkaWZmX3QpKDIxNDc0ODM2NDcgLyBz aXplb2YoX1RwKSkpCiAgICAgIF9NX2xlbiA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAg ICB3aGlsZSAoX01fbGVuID4gMCkgewogICAgICBfTV9idWZmZXIgPSAoX1RwKikgbWFsbG9jKF9N X2xlbiAqIHNpemVvZihfVHApKTsKICAgICAgaWYgKF9NX2J1ZmZlcikKICAgICAgICBicmVhazsK ICAgICAgX01fbGVuIC89IDI7CiAgICB9CiAgfQoKICB2b2lkIF9NX2luaXRpYWxpemVfYnVmZmVy KGNvbnN0IF9UcCYsIF9fdHJ1ZV90eXBlKSB7fQogIHZvaWQgX01faW5pdGlhbGl6ZV9idWZmZXIo Y29uc3QgX1RwJiB2YWwsIF9fZmFsc2VfdHlwZSkgewogICAgdW5pbml0aWFsaXplZF9maWxsX24o X01fYnVmZmVyLCBfTV9sZW4sIHZhbCk7CiAgfQoKcHVibGljOgogIHB0cmRpZmZfdCBzaXplKCkg Y29uc3QgeyByZXR1cm4gX01fbGVuOyB9CiAgcHRyZGlmZl90IHJlcXVlc3RlZF9zaXplKCkgY29u c3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9CiAgX1RwKiBiZWdpbigpIHsgcmV0dXJuIF9N X2J1ZmZlcjsgfQogIF9UcCogZW5kKCkgeyByZXR1cm4gX01fYnVmZmVyICsgX01fbGVuOyB9Cgog IF9UZW1wb3JhcnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVy YXRvciBfX2xhc3QpIHsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1RwPjo6 aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcgogICAgICAgICAgICBfVHJpdmlhbDsKCiAg ICB0cnkgewogICAgICBfTV9sZW4gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3Qs IF9NX2xlbik7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAoX01fbGVuID4g MCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZpYWwoKSk7CiAg ICB9CiAgICBjYXRjaCguLi4pIHsgZnJlZShfTV9idWZmZXIpOyBfTV9idWZmZXIgPSAwOyBfTV9s ZW4gPSAwOyB0aHJvdzsgfTsKICB9CgogIH5fVGVtcG9yYXJ5X2J1ZmZlcigpIHsKICAgIGRlc3Ry b3koX01fYnVmZmVyLCBfTV9idWZmZXIgKyBfTV9sZW4pOwogICAgZnJlZShfTV9idWZmZXIpOwog IH0KCnByaXZhdGU6CgogIF9UZW1wb3JhcnlfYnVmZmVyKGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVy Jikge30KICB2b2lkIG9wZXJhdG9yPShjb25zdCBfVGVtcG9yYXJ5X2J1ZmZlciYpIHt9Cn07CgoK CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yLAogICAgICAgICAgY2xhc3MgX1RwCiAg ICAgICAgICAgICAgICAgICAgPSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVy YXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAgPgpzdHJ1Y3QgdGVtcG9yYXJ5X2J1ZmZlciA6IHB1 YmxpYyBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CnsKICB0ZW1wb3Jh cnlfYnVmZmVyKF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xh c3QpCiAgICA6IF9UZW1wb3JhcnlfYnVmZmVyPF9Gb3J3YXJkSXRlcmF0b3IsIF9UcD4oX19maXJz dCwgX19sYXN0KSB7fQogIH50ZW1wb3JhcnlfYnVmZmVyKCkge30KfTsKCn0KIyA1NCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9tZW1vcnkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfY3N0cmluZy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 bF91bmluaXRpYWxpemVkLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9Gb3J3YXJkSXRlcgpf X3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQp7CiAgcmV0dXJuIGNvcHkoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFz cyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfY29weV9hdXgoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs c2VfdHlwZSkKewogIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogIHRyeSB7CiAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19jdXIpCiAgICAgIF9Db25z dHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgcmV0dXJuIF9fY3VyOwogIH0KICBjYXRjaCgu Li4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhyb3c7IH07Cn0KCgp0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBf Rm9yd2FyZEl0ZXIKX191bmluaXRpYWxpemVkX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5w dXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0 LCBfVHAqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcD46OmlzX1BPRF90 eXBlIF9Jc19QT0Q7CiAgcmV0dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfX2ZpcnN0LCBf X2xhc3QsIF9fcmVzdWx0LCBfSXNfUE9EKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX0ZvcndhcmRJdGVyPgppbmxpbmUgX0ZvcndhcmRJdGVyCiAgdW5pbml0aWFsaXpl ZF9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3ZhbHVlX3R5cGUoX19yZXN1bHQpKTsKfQoKaW5saW5lIGNoYXIqIHVuaW5pdGlh bGl6ZWRfY29weShjb25zdCBjaGFyKiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciogX19yZXN1bHQpIHsKICBtZW1tb3ZlKF9f cmVzdWx0LCBfX2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKICByZXR1cm4gX19yZXN1bHQgKyAo X19sYXN0IC0gX19maXJzdCk7Cn0KCmlubGluZSB3Y2hhcl90Kgp1bmluaXRpYWxpemVkX2NvcHko Y29uc3Qgd2NoYXJfdCogX19maXJzdCwgY29uc3Qgd2NoYXJfdCogX19sYXN0LAogICAgICAgICAg ICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCnsKICBtZW1tb3ZlKF9fcmVzdWx0LCBfX2ZpcnN0 LCBzaXplb2Yod2NoYXJfdCkgKiAoX19sYXN0IC0gX19maXJzdCkpOwogIHJldHVybiBfX3Jlc3Vs dCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwg Y2xhc3MgX1NpemUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2Fy ZEl0ZXI+Cl9fdW5pbml0aWFsaXplZF9jb3B5X24oX0lucHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBf X2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAg ICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBfRm9yd2FyZEl0ZXIg X19jdXIgPSBfX3Jlc3VsdDsKICB0cnkgewogICAgZm9yICggOyBfX2NvdW50ID4gMCA7IC0tX19j b3VudCwgKytfX2ZpcnN0LCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsICpfX2Zp cnN0KTsKICAgIHJldHVybiBwYWlyPF9JbnB1dEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwg X19jdXIpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsgdGhy b3c7IH07Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1NpemUs IGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X1JhbmRvbUFjY2Vzc0l0ZXIsIF9Gb3J3 YXJkSXRlcj4KX191bmluaXRpYWxpemVkX2NvcHlfbihfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0 LCBfU2l6ZSBfX2NvdW50LAogICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykg ewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCA9IF9fZmlyc3QgKyBfX2NvdW50OwogIHJldHVy biBwYWlyPF9SYW5kb21BY2Nlc3NJdGVyLCBfRm9yd2FyZEl0ZXI+KAogICAgICAgICAgICAgICAg IF9fbGFzdCwKICAgICAgICAgICAgICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19s YXN0LCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Np emUsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIHBhaXI8X0lucHV0SXRlciwgX0ZvcndhcmRJ dGVyPgpfX3VuaW5pdGlhbGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19j b3VudCwKICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0 dXJuIF9fdW5pbml0aWFsaXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfU2l6ZSwgY2xhc3MgX0Zv cndhcmRJdGVyPgppbmxpbmUgcGFpcjxfSW5wdXRJdGVyLCBfRm9yd2FyZEl0ZXI+CnVuaW5pdGlh bGl6ZWRfY29weV9uKF9JbnB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19jb3VudCwKICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0KSB7CiAgcmV0dXJuIF9fdW5pbml0aWFs aXplZF9jb3B5X24oX19maXJzdCwgX19jb3VudCwgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZApfX3VuaW5pdGlh bGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5cGUpCnsK ICBmaWxsKF9fZmlyc3QsIF9fbGFzdCwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlciwgY2xhc3MgX1RwPgp2b2lkCl9fdW5pbml0aWFsaXplZF9maWxsX2F1eChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUpCnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBf X2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikKICAg ICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3ko X19maXJzdCwgX19jdXIpOyB0aHJvdzsgfTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgdm9pZCBfX3VuaW5pdGlhbGl6ZWRfZmls bChfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0 eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogIF9fdW5p bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKCn0K CnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQgdW5p bml0aWFsaXplZF9maWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9UcCYgX194KQp7CiAgX191bmluaXRpYWxpemVkX2ZpbGwoX19maXJzdCwg X19sYXN0LCBfX3gsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNz IF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRl cgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUg X19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwgX190cnVlX3R5 cGUpCnsKICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KX0ZvcndhcmRJdGVyCl9f dW5pbml0aWFsaXplZF9maWxsX25fYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX194LCBfX2ZhbHNlX3R5cGUp CnsKICBfRm9yd2FyZEl0ZXIgX19jdXIgPSBfX2ZpcnN0OwogIHRyeSB7CiAgICBmb3IgKCA7IF9f biA+IDA7IC0tX19uLCArK19fY3VyKQogICAgICBfQ29uc3RydWN0KCYqX19jdXIsIF9feCk7CiAg ICByZXR1cm4gX19jdXI7CiAgfQogIGNhdGNoKC4uLikgeyBfRGVzdHJveShfX2ZpcnN0LCBfX2N1 cik7IHRocm93OyB9Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU2l6 ZSwgY2xhc3MgX1RwLCBjbGFzcyBfVHAxPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fdW5pbml0aWFs aXplZF9maWxsX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBf X3gsIF9UcDEqKQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9UcDE+Ojppc19Q T0RfdHlwZSBfSXNfUE9EOwogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfX2Zp cnN0LCBfX24sIF9feCwgX0lzX1BPRCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl ciwgY2xhc3MgX1NpemUsIGNsYXNzIF9UcD4KaW5saW5lIF9Gb3J3YXJkSXRlcgp1bmluaXRpYWxp emVkX2ZpbGxfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBjb25zdCBfVHAmIF9f eCkKewogIHJldHVybiBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194LCBf X3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9CiMgMjYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RsX3VuaW5pdGlhbGl6ZWQuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz IF9JbnB1dEl0ZXIyLCBjbGFzcyBfRm9yd2FyZEl0ZXI+CmlubGluZSBfRm9yd2FyZEl0ZXIKX191 bmluaXRpYWxpemVkX2NvcHlfY29weShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEg X19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19yZXN1bHQpCnsKICBfRm9yd2FyZEl0ZXIgX19taWQgPSB1bmluaXRpYWxpemVkX2NvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICB0cnkgewogICAgcmV0dXJuIHVuaW5pdGlh bGl6ZWRfY29weShfX2ZpcnN0MiwgX19sYXN0MiwgX19taWQpOwogIH0KICBjYXRjaCguLi4pIHsg X0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhyb3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0lucHV0SXRlcj4KaW5saW5lIF9Gb3J3 YXJkSXRlcgpfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwg X0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYg X194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QpCnsKICB1bmluaXRpYWxpemVkX2ZpbGwoX19yZXN1bHQsIF9fbWlkLCBfX3gp OwogIHRyeSB7CiAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwg X19taWQpOwogIH0KICBjYXRjaCguLi4pIHsgX0Rlc3Ryb3koX19yZXN1bHQsIF9fbWlkKTsgdGhy b3c7IH07Cn0KCgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHZvaWQKX191bmluaXRpYWxpemVkX2NvcHlfZmlsbChfSW5w dXRJdGVyIF9fZmlyc3QxLCBfSW5wdXRJdGVyIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIF9Gb3J3YXJkSXRlciBfX21p ZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyKTsKICB0 cnkgewogICAgdW5pbml0aWFsaXplZF9maWxsKF9fbWlkMiwgX19sYXN0MiwgX194KTsKICB9CiAg Y2F0Y2goLi4uKSB7IF9EZXN0cm95KF9fZmlyc3QyLCBfX21pZDIpOyB0aHJvdzsgfTsKfQoKfQoj IDU1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX21lbW9yeS5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3Jhd19zdG9yYWdlX2l0ZXIuaCIgMSAzCiMgNjMgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfcmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFj ZSBzdGQKewoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3IsIGNsYXNzIF9UcD4KY2xh c3MgcmF3X3N0b3JhZ2VfaXRlcmF0b3Igewpwcm90ZWN0ZWQ6CiAgX0ZvcndhcmRJdGVyYXRvciBf TV9pdGVyOwpwdWJsaWM6CiAgdHlwZWRlZiBvdXRwdXRfaXRlcmF0b3JfdGFnIGl0ZXJhdG9yX2Nh dGVnb3J5OwogIHR5cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwogIHR5cGVkZWYgdm9pZCBkaWZmZXJl bmNlX3R5cGU7CiAgdHlwZWRlZiB2b2lkIHBvaW50ZXI7CiAgdHlwZWRlZiB2b2lkIHJlZmVyZW5j ZTsKCiAgZXhwbGljaXQgcmF3X3N0b3JhZ2VfaXRlcmF0b3IoX0ZvcndhcmRJdGVyYXRvciBfX3gp IDogX01faXRlcihfX3gpIHt9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yKigpIHsg cmV0dXJuICp0aGlzOyB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBf VHAmIF9fZWxlbWVudCkgewogICAgY29uc3RydWN0KCYqX01faXRlciwgX19lbGVtZW50KTsKICAg IHJldHVybiAqdGhpczsKICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv ciwgX1RwPiYgb3BlcmF0b3IrKygpIHsKICAgICsrX01faXRlcjsKICAgIHJldHVybiAqdGhpczsK ICB9CiAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiBvcGVyYXRv cisrKGludCkgewogICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRvciwgX1Rw PiBfX3RtcCA9ICp0aGlzOwogICAgKytfTV9pdGVyOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsK Cgp9CiMgNTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbWVtb3J5LmgiIDIgMwoKbmFt ZXNwYWNlIHN0ZAp7CgogdGVtcGxhdGU8Y2xhc3MgX1RwMT4gc3RydWN0IGF1dG9fcHRyX3JlZiB7 CiAgIF9UcDEqIF9NX3B0cjsKICAgYXV0b19wdHJfcmVmKF9UcDEqIF9fcCkgOiBfTV9wdHIoX19w KSB7fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgYXV0b19wdHIgewpwcml2YXRlOgog IF9UcCogX01fcHRyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIGVsZW1lbnRfdHlwZTsKCiAgZXhw bGljaXQgYXV0b19wdHIoX1RwKiBfX3AgPSAwKSB0aHJvdygpIDogX01fcHRyKF9fcCkge30KICBh dXRvX3B0cihhdXRvX3B0ciYgX19hKSB0aHJvdygpIDogX01fcHRyKF9fYS5yZWxlYXNlKCkpIHt9 CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBhdXRvX3B0cihhdXRvX3B0cjxfVHAxPiYgX19hKSB0 aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7fQoKICBhdXRvX3B0ciYgb3BlcmF0 b3I9KGF1dG9fcHRyJiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJlbGVhc2UoKSk7CiAg ICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4KICBhdXRvX3B0ciYg b3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkgewogICAgcmVzZXQoX19hLnJl bGVhc2UoKSk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgoKCiAgfmF1dG9fcHRyKCkgeyBkZWxl dGUgX01fcHRyOyB9CgogIF9UcCYgb3BlcmF0b3IqKCkgY29uc3QgdGhyb3coKSB7CiAgICByZXR1 cm4gKl9NX3B0cjsKICB9CiAgX1RwKiBvcGVyYXRvci0+KCkgY29uc3QgdGhyb3coKSB7CiAgICBy ZXR1cm4gX01fcHRyOwogIH0KICBfVHAqIGdldCgpIGNvbnN0IHRocm93KCkgewogICAgcmV0dXJu IF9NX3B0cjsKICB9CiAgX1RwKiByZWxlYXNlKCkgdGhyb3coKSB7CiAgICBfVHAqIF9fdG1wID0g X01fcHRyOwogICAgX01fcHRyID0gMDsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgdm9pZCByZXNl dChfVHAqIF9fcCA9IDApIHRocm93KCkgewogICAgaWYgKF9fcCAhPSBfTV9wdHIpIHsKICAgICAg ZGVsZXRlIF9NX3B0cjsKICAgICAgX01fcHRyID0gX19wOwogICAgfQogIH0KCgoKCgpwdWJsaWM6 CiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPF9UcD4gX19yZWYpIHRocm93KCkKICAgIDogX01fcHRy KF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImIG9wZXJhdG9yPShhdXRvX3B0cl9yZWY8X1Rw PiBfX3JlZikgdGhyb3coKSB7CiAgICBpZiAoX19yZWYuX01fcHRyICE9IHRoaXMtPmdldCgpKSB7 CiAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgIH0K ICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBvcGVyYXRvciBh dXRvX3B0cl9yZWY8X1RwMT4oKSB0aHJvdygpCiAgICB7IHJldHVybiBhdXRvX3B0cl9yZWY8X1Rw Pih0aGlzLT5yZWxlYXNlKCkpOyB9CiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IG9wZXJhdG9yIGF1 dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgeyByZXR1cm4gYXV0b19wdHI8X1RwMT4odGhpcy0+ cmVsZWFzZSgpKTsgfQp9OwoKfQojIDQ0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0 cmluZy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdHlwZV90cmFpdHMuaCIg MSAzCiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zZndkLmgiIDEgMwojIDQ2ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvYmFzaWNfc3RyaW5nLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxp bnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAxIDMKIyAzMyAiL3Vzci9pbmNsdWRlL2crKy12My9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2F0b21pY2l0eS5oIiAzCnR5cGVkZWYgaW50IF9BdG9taWNf d29yZDsKCnN0YXRpYyBpbmxpbmUgX0F0b21pY193b3JkCl9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSkKX19leGNoYW5nZV9hbmRfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQgKl9fbWVtLCBp bnQgX192YWwpCnsKICByZWdpc3RlciBfQXRvbWljX3dvcmQgX19yZXN1bHQ7CiAgX19hc21fXyBf X3ZvbGF0aWxlX18gKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAgICAgICAgICAgICAgICAgICAgICAg OiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAgICAgICAgOiAiMCIgKF9fdmFsKSwg Im0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1lbW9yeSIpOwogIHJldHVy biBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCl9fYXR0cmlidXRlX18gKChfX3VudXNl ZF9fKSkKX19hdG9taWNfYWRkICh2b2xhdGlsZSBfQXRvbWljX3dvcmQqIF9fbWVtLCBpbnQgX192 YWwpCnsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwgJTAsJTEiCiAgICAgICAg ICAgICAgICAgICAgICAgIDogOiAiaXIiIChfX3ZhbCksICJtIiAoKl9fbWVtKSA6ICJtZW1vcnki KTsKfQoKc3RhdGljIGlubGluZSBjaGFyCl9fYXR0cmlidXRlX18gKChfX3VudXNlZF9fKSkKX19j b21wYXJlX2FuZF9zd2FwICh2b2xhdGlsZSBsb25nKiBfX3AsIGxvbmcgX19vbGR2YWwsIGxvbmcg X19uZXd2YWwpCnsKICBjaGFyIF9fcmV0OwogIGxvbmcgX19yZWFkdmFsOwoKICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoImxvY2s7IGNtcHhjaGdsICUzLCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAg ICAgICAgICAgICAgOiAiPXEiIChfX3JldCksICI9bSIgKCpfX3ApLCAiPWEiIChfX3JlYWR2YWwp CiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChfX25ld3ZhbCksICJtIiAoKl9fcCksICJh IiAoX19vbGR2YWwpKTsKICByZXR1cm4gX19yZXQ7Cn0KIyA0MCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewojIDgzICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3RyaW5nLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2lj X3N0cmluZwogICAgewoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190 eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmNoYXJfdHlwZSB2YWx1ZV90eXBl OwogICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQWxsb2M6OnNpemVfdHlwZSBzaXplX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9BbGxvYzo6cmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfQWxsb2M6OmNvbnN0X3JlZmVyZW5jZSBjb25zdF9yZWZlcmVuY2U7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX0FsbG9jOjpwb2ludGVyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jOjpjb25zdF9wb2ludGVyIGNvbnN0X3BvaW50ZXI7CiAgICAgIHR5cGVkZWYgX19ub3Jt YWxfaXRlcmF0b3I8cG9pbnRlciwgYmFzaWNfc3RyaW5nPiBpdGVyYXRvcjsKICAgICAgdHlwZWRl ZiBfX25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+IGNvbnN0X2l0 ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDExOCAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgIHN0cnVjdCBfUmVwCiAgICAgIHsK CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnRlbXBsYXRlIHJlYmluZDxjaGFyPjo6 b3RoZXIgX1Jhd19ieXRlc19hbGxvYzsKIyAxMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9i YXNpY19zdHJpbmcuaCIgMwogICAgICAgIHN0YXRpYyBjb25zdCBzaXplX3R5cGUgX1NfbWF4X3Np emU7CiAgICAgICAgc3RhdGljIGNvbnN0IF9DaGFyVCBfU190ZXJtaW5hbDsKCiAgICAgICAgc2l6 ZV90eXBlIF9NX2xlbmd0aDsKICAgICAgICBzaXplX3R5cGUgX01fY2FwYWNpdHk7CiAgICAgICAg X0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogICAgICAgIGJvb2wKICAgICAgICBfTV9pc19s ZWFrZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX3JlZmVyZW5jZXMgPCAwOyB9CgogICAg ICAgIGJvb2wKICAgICAgICBfTV9pc19zaGFyZWQoKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9N X3JlZmVyZW5jZXMgPiAwOyB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9zZXRfbGVha2VkKCkK ICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAtMTsgfQoKICAgICAgICB2b2lkCiAgICAgICAgX01f c2V0X3NoYXJhYmxlKCkKICAgICAgICB7IF9NX3JlZmVyZW5jZXMgPSAwOyB9CgogICAgICAgIF9D aGFyVCoKICAgICAgICBfTV9yZWZkYXRhKCkgdGhyb3coKQogICAgICAgIHsgcmV0dXJuIHJlaW50 ZXJwcmV0X2Nhc3Q8X0NoYXJUKj4gKHRoaXMgKyAxKTsgfQoKICAgICAgICBfQ2hhclQmCiAgICAg ICAgb3BlcmF0b3JbXShzaXplX3QgX19zKSB0aHJvdygpCiAgICAgICAgeyByZXR1cm4gX01fcmVm ZGF0YSgpIFtfX3NdOyB9CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9ncmFiKGNvbnN0IF9B bGxvYyYgX19hbGxvYzEsIGNvbnN0IF9BbGxvYyYgX19hbGxvYzIpCiAgICAgICAgeyByZXR1cm4g KCFfTV9pc19sZWFrZWQoKSAmJiBfX2FsbG9jMSA9PSBfX2FsbG9jMikgPwogICAgICAgICAgICBf TV9yZWZjb3B5KCkgOiBfTV9jbG9uZShfX2FsbG9jMSk7IH0KCgogICAgICAgIHN0YXRpYyBfUmVw KgogICAgICAgIF9TX2NyZWF0ZShzaXplX3QsIGNvbnN0IF9BbGxvYyYpOwoKICAgICAgICB2b2lk CiAgICAgICAgX01fZGlzcG9zZShjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg ICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZlcmVuY2VzLCAtMSkgPD0gMCkKICAgICAg ICAgICAgX01fZGVzdHJveShfX2EpOwogICAgICAgIH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N X2Rlc3Ryb3koY29uc3QgX0FsbG9jJikgdGhyb3coKTsKCiAgICAgICAgX0NoYXJUKgogICAgICAg IF9NX3JlZmNvcHkoKSB0aHJvdygpCiAgICAgICAgewogICAgICAgICAgX19hdG9taWNfYWRkKCZf TV9yZWZlcmVuY2VzLCAxKTsKICAgICAgICAgIHJldHVybiBfTV9yZWZkYXRhKCk7CiAgICAgICAg fQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiwgc2l6ZV90 eXBlIF9fcmVzID0gMCk7CiMgMjA4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfc3Ry aW5nLmgiIDMKICAgICAgICBpbmxpbmUgc3RhdGljIGJvb2wKICAgICAgICBfU19leGNlc3Nfc2xv cChzaXplX3QsIHNpemVfdCk7CgogICAgICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIg OiBfQWxsb2MKICAgICAgewogICAgICAgIF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25z dCBfQWxsb2MmIF9fYSkKICAgICAgICA6IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAg ICAgICAgX0NoYXJUKiBfTV9wOwogICAgICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGlj IGNvbnN0IHNpemVfdHlwZSBucG9zID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAg cHJpdmF0ZToKCiAgICAgIG11dGFibGUgX0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAg ICBzdGF0aWMgc2l6ZV90eXBlIF9TX2VtcHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBz aXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSld OwoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01f ZGF0YXBsdXMuX01fcDsgfQoKICAgICAgX0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19w KQogICAgICB7IHJldHVybiAoX01fZGF0YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAq CiAgICAgIF9NX3JlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8 X1JlcCo+IChfTV9kYXRhKCkpKVstMV0pOyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2li ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJh dG9yCiAgICAgIF9NX2llbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0 aGlzLT5zaXplKCkpOyB9CgogICAgICB2b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAg ICAgaWYgKCFfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQo KTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9z KSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAg ICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAg ICByZXR1cm4gX01faWJlZ2luKCkgKyBfX3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAg ICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAg IHsKICAgICAgICBib29sIF9fdGVzdG9mZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7 CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5z aXplKCkgLSBfX3BvczsKICAgICAgICByZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25l d29mZik7CiAgICAgIH0KCgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAg IHN0YXRpYyB2b2lkCiAgICAgICAgX1NfY29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9y IF9fazEsIF9JdGVyYXRvciBfX2syKQogICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9 IF9fazI7ICsrX19rMSwgKytfX3ApCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9f cCwgKl9fazEpOwogICAgICAgIH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh cnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9yIF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1Nf Y29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRp YyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9f azEsIGNvbnN0X2l0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEu YmFzZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlf Y2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFyVCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRy YWl0c190eXBlOjpjb3B5KF9fcCwgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMg dm9pZAogICAgICBfU19jb3B5X2NoYXJzKF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEs IGNvbnN0IF9DaGFyVCogX19rMikKICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEs IF9fazIgLSBfX2sxKTsgfQoKICAgICAgdm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19sZW4xLCBzaXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAg ICAgX01fbGVha19oYXJkKCk7CgogICAgICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVw KCkKICAgICAgeyByZXR1cm4gKnJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBf c3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3Ry aW5nKCk7CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBf X2EpOwoKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAg ICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bv cywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNf c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg ICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJh c2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmco Y29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBi YXNpY19zdHJpbmcoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2Eg PSBfQWxsb2MoKSk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAg ICBiYXNpY19zdHJpbmcoX0lucHV0SXRlcmF0b3IgX19iZWdpbiwgX0lucHV0SXRlcmF0b3IgX19l bmQsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwoK ICAgICAgfmJhc2ljX3N0cmluZygpCiAgICAgIHsgX01fcmVwKCktPl9NX2Rpc3Bvc2UodGhpcy0+ Z2V0X2FsbG9jYXRvcigpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0o Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fc3RyKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oY29uc3QgX0NoYXJUKiBfX3Mp IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IG9wZXJhdG9yPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oMSwgX19jKTsgfQoK CiAgICAgIGl0ZXJhdG9yCiAgICAgIGJlZ2luKCkKICAgICAgewogICAgICAgIF9NX2xlYWsoKTsK ICAgICAgICByZXR1cm4gaXRlcmF0b3IoX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgY29uc3Rf aXRlcmF0b3IKICAgICAgYmVnaW4oKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVyYXRv cihfTV9kYXRhKCkpOyB9CgogICAgICBpdGVyYXRvcgogICAgICBlbmQoKQogICAgICB7CiAgICAg ICAgIF9NX2xlYWsoKTsKICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMt PnNpemUoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGVuZCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9NX2RhdGEoKSArIHRoaXMtPnNpemUoKSk7 IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmJlZ2luKCkKICAgICAgeyByZXR1cm4g cmV2ZXJzZV9pdGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IKICAgICAgcmJlZ2luKCkgY29uc3QKICAgICAgeyByZXR1cm4gY29uc3RfcmV2ZXJzZV9p dGVyYXRvcih0aGlzLT5lbmQoKSk7IH0KCiAgICAgIHJldmVyc2VfaXRlcmF0b3IKICAgICAgcmVu ZCgpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAg ICAgIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IKICAgICAgcmVuZCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+YmVnaW4oKSk7IH0KCiAgICBwdWJsaWM6 CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5f TV9sZW5ndGg7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBsZW5ndGgoKSBjb25zdCB7IHJldHVy biBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgbWF4X3NpemUo KSBjb25zdCB7IHJldHVybiBfUmVwOjpfU19tYXhfc2l6ZTsgfQoKICAgICAgdm9pZAogICAgICBy ZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB2b2lkCiAgICAgIHJlc2l6 ZShzaXplX3R5cGUgX19uKSB7IHRoaXMtPnJlc2l6ZShfX24sIF9DaGFyVCgpKTsgfQoKICAgICAg c2l6ZV90eXBlCiAgICAgIGNhcGFjaXR5KCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2Nh cGFjaXR5OyB9CgogICAgICB2b2lkCiAgICAgIHJlc2VydmUoc2l6ZV90eXBlIF9fcmVzX2FyZyA9 IDApOwoKICAgICAgdm9pZAogICAgICBjbGVhcigpIHsgX01fbXV0YXRlKDAsIHRoaXMtPnNpemUo KSwgMCk7IH0KCiAgICAgIGJvb2wKICAgICAgZW1wdHkoKSBjb25zdCB7IHJldHVybiB0aGlzLT5z aXplKCkgPT0gMDsgfQoKCiAgICAgIGNvbnN0X3JlZmVyZW5jZQogICAgICBvcGVyYXRvcltdIChz aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107IH0K CiAgICAgIHJlZmVyZW5jZQogICAgICBvcGVyYXRvcltdKHNpemVfdHlwZSBfX3BvcykKICAgICAg ewogICAgICAgIF9NX2xlYWsoKTsKICAgICAgICByZXR1cm4gX01fZGF0YSgpW19fcG9zXTsKICAg ICAgfQoKICAgICAgY29uc3RfcmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pIGNvbnN0 CiAgICAgIHsKICAgICAgICBpZiAoX19uID49IHRoaXMtPnNpemUoKSkKICAgICAgICAgIF9fdGhy b3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmF0Iik7CiAgICAgICAgcmV0dXJuIF9NX2Rh dGEoKVtfX25dOwogICAgICB9CgogICAgICByZWZlcmVuY2UKICAgICAgYXQoc2l6ZV90eXBlIF9f bikKICAgICAgewogICAgICAgIGlmIChfX24gPj0gc2l6ZSgpKQogICAgICAgICAgX190aHJvd19v dXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6YXQiKTsKICAgICAgICBfTV9sZWFrKCk7CiAgICAg ICAgcmV0dXJuIF9NX2RhdGEoKVtfX25dOwogICAgICB9CgoKICAgICAgYmFzaWNfc3RyaW5nJgog ICAgICBvcGVyYXRvcis9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpIHsgcmV0dXJuIHRoaXMt PmFwcGVuZChfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShj b25zdCBfQ2hhclQqIF9fcykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcyk7IH0KCiAgICAgIGJh c2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShfQ2hhclQgX19jKSB7IHJldHVybiB0aGlzLT5h cHBlbmQoc2l6ZV90eXBlKDEpLCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFw cGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgYXBwZW5kKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6 ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBfQ2hh clQqIF9fcywgc2l6ZV90eXBlIF9fbik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVu ZChjb25zdCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+YXBwZW5kKF9fcywgdHJh aXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBl bmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5w dXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXBwZW5kKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0 aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOyB9Cgog ICAgICB2b2lkCiAgICAgIHB1c2hfYmFjayhfQ2hhclQgX19jKQogICAgICB7IHRoaXMtPnJlcGxh Y2UoX01faWVuZCgpLCBfTV9pZW5kKCksIDEsIF9fYyk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgYXNzaWduKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpOwoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBhc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmFzc2lnbihf X3N0ci5fTV9jaGVjayhfX3BvcyksIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbikpOwogICAgICB9 CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6 ZV90eXBlIF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+YXNzaWduKF9fcywgX19zICsgX19uKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhc3NpZ24oY29uc3QgX0NoYXJUKiBfX3MpCiAg ICAgIHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3MsIF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWJlZ2luKCksIF9N X2llbmQoKSwgX19uLCBfX2MpOyB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRv cj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgYXNzaWduKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBs YWNlKF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fZmlyc3QsIF9fbGFzdCk7IH0KCiAgICAgIHZv aWQKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykK ICAgICAgeyB0aGlzLT5yZXBsYWNlKF9fcCwgX19wLCBfX24sIF9fYyk7IH0KCiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9f cCwgX0lucHV0SXRlcmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kKQogICAgICAgIHsg dGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19iZWcsIF9fZW5kKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zMSwgY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cikKICAgICAgewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAg ICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01faWJlZ2luKCksIF9fc3RyLl9N X2llbmQoKSk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICBiYXNpY19zdHJp bmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLAogICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAg ewogICAgICAgIGl0ZXJhdG9yIF9fcCA9IF9NX2NoZWNrKF9fcG9zMSk7CiAgICAgICAgdGhpcy0+ cmVwbGFjZShfX3AsIF9fcCwgX19zdHIuX01fY2hlY2soX19wb3MyKSwKICAgICAgICAgICAgICAg ICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MyLCBfX24pKTsKICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3Bv cywgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpdGVy YXRvciBfX3AgPSBfTV9jaGVjayhfX3Bvcyk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3AsIF9f cCwgX19zLCBfX3MgKyBfX24pOwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAg YmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90eXBlIF9fcG9zLCBjb25zdCBfQ2hhclQq IF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9zLCBfX3MsIHRyYWl0c190eXBl OjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVf dHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgICAgewogICAgICAgIHRo aXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIF9fbiwgX19jKTsKICAgICAgICByZXR1cm4gKnRo aXM7CiAgICAgIH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIF9D aGFyVCBfX2MgPSBfQ2hhclQoKSkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3BvcyA9IF9f cCAtIF9NX2liZWdpbigpOwogICAgICAgIHRoaXMtPmluc2VydChfTV9jaGVjayhfX3BvcyksIHNp emVfdHlwZSgxKSwgX19jKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAg ICAgIHJldHVybiB0aGlzLT5fTV9pYmVnaW4oKSArIF9fcG9zOwogICAgICB9CgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIGVyYXNlKHNpemVfdHlwZSBfX3BvcyA9IDAsIHNpemVfdHlwZSBfX24g PSBucG9zKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24pLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9N X2RhdGEoKSwgX01fZGF0YSgpKTsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgZXJhc2Uo aXRlcmF0b3IgX19wb3NpdGlvbikKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX3Bv c2l0aW9uIC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX3Bvc2l0aW9uLCBf X3Bvc2l0aW9uICsgMSwgX01fZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICAgIF9NX3JlcCgpLT5f TV9zZXRfbGVha2VkKCk7CiAgICAgICAgcmV0dXJuIF9NX2liZWdpbigpICsgX19pOwogICAgICB9 CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpCiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19pID0gX19maXJzdCAtIF9NX2liZWdp bigpOwogICAgICAgIHRoaXMtPnJlcGxhY2UoX19maXJzdCwgX19sYXN0LCBfTV9kYXRhKCksIF9N X2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9NX3NldF9sZWFrZWQoKTsKICAgICAgIHJldHVy biBfTV9pYmVnaW4oKSArIF9faTsKICAgICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBy ZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgYmFzaWNfc3RyaW5n JiBfX3N0cikKICAgICAgewogICAgICAgIHJldHVybiB0aGlzLT5yZXBsYWNlKF9NX2NoZWNrKF9f cG9zKSwgX01fZm9sZChfX3BvcywgX19uKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90 eXBlIF9fbjIpOwoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zLAogICAgICAgICAgICAgIHNp emVfdHlwZSBfX24yKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hl Y2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3MsIF9fcyArIF9fbjIpOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAg IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBf X3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bvcyks IF9NX2ZvbGQoX19wb3MsIF9fbjEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcywg X19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsKICAgICAgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICByZXBsYWNlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbjEsIHNpemVf dHlwZSBfX24yLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxh Y2UoX01fY2hlY2soX19wb3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsKICAg ICAgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0 ZXJhdG9yIF9faTIsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zdHIuYmVnaW4oKSwgX19zdHIuZW5kKCkpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVf dHlwZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCBf X3MgKyBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3Ig X19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRo aXMtPnJlcGxhY2UoX19pMSwgX19pMiwgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fcyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYK ICAgICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXplX3R5cGUgX19u LCBfQ2hhclQgX19jKTsKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9y IF9faTIsCiAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2sxLCBfSW5wdXRJdGVyYXRv ciBfX2syKQogICAgICAgIHsgcmV0dXJuIF9NX3JlcGxhY2UoX19pMSwgX19pMiwgX19rMSwgX19r MiwKICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46 Oml0ZXJhdG9yX2NhdGVnb3J5KCkpOyB9CgogICAgcHJpdmF0ZToKICAgICAgdGVtcGxhdGU8Y2xh c3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIF9NX3JlcGxh Y2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0lucHV0SXRlcmF0b3IgX19rMSwKICAg ICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZyk7 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5n JgogICAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0Z3ZEl0 ZXJhdG9yIF9fazEsCiAgICAgICAgICAgICAgICAgICBfRndkSXRlcmF0b3IgX19rMiwgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAg IHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBf SW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAg IF9fZmFsc2VfdHlwZSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5JdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX1RhZzsKICAgICAgICAgIHJl dHVybiBfU19jb25zdHJ1Y3QoX19iZWcsIF9fZW5kLCBfX2EsIF9UYWcoKSk7CiAgICAgICAgfQoK ICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAg ICAgIF9TX2NvbnN0cnVjdF9hdXgoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3RydWVfdHlwZSkKICAgICAg ICB7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0KHN0YXRpY19jYXN0PHNpemVfdHlwZT4o X19iZWcpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDx2YWx1ZV90 eXBlPihfX2VuZCksIF9fYSk7CiAgICAgICAgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRl cj4KICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICB7CiAgICAgICAg ICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9Jbkl0ZXI+OjpfSW50ZWdyYWwgX0ludGVn cmFsOwogICAgICAgICAgcmV0dXJuIF9TX2NvbnN0cnVjdF9hdXgoX19iZWcsIF9fZW5kLCBfX2Es IF9JbnRlZ3JhbCgpKTsKICAgICAgICB9CgoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0luSXRlcj4K ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2Jl ZywgX0luSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpOwoKCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfRndkSXRlcj4K ICAgICAgICBzdGF0aWMgX0NoYXJUKgogICAgICAgIF9TX2NvbnN0cnVjdChfRndkSXRlciBfX2Vu ZCwgX0Z3ZEl0ZXIgX19iZWcsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAg ICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogICAgICBzdGF0aWMgX0NoYXJUKgogICAgICBfU19j b25zdHJ1Y3Qoc2l6ZV90eXBlIF9fcmVxLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSk7 CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNp emVfdHlwZSBfX24sIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgdm9pZAogICAg ICBzd2FwKGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcyk7CgoKICAg ICAgY29uc3QgX0NoYXJUKgogICAgICBjX3N0cigpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgc2l6 ZV90eXBlIF9fbiA9IHRoaXMtPnNpemUoKTsKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9N X2RhdGEoKVtfX25dLCBfUmVwOjpfU190ZXJtaW5hbCk7CiAgICAgICAgcmV0dXJuIF9NX2RhdGEo KTsKICAgICAgfQoKICAgICAgY29uc3QgX0NoYXJUKgogICAgICBkYXRhKCkgY29uc3QgeyByZXR1 cm4gX01fZGF0YSgpOyB9CgogICAgICBhbGxvY2F0b3JfdHlwZQogICAgICBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YXBsdXM7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBm aW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNv bnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0 ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZChf X3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZmluZChfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9f cykpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUg X19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5yZmluZChfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9Cgog ICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBf X3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgcmZpbmQo Y29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPnJmaW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19w b3MgPSBucG9zKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNv bnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfb2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIu c2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zID0gMCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3Ms IF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXplX3R5cGUKICAg ICAgZmluZF9maXJzdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fYywgX19wb3MpOyB9CgogICAgICBzaXplX3R5cGUK ICAgICAgZmluZF9sYXN0X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9vZihfX3N0 ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAg ZmluZF9sYXN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlw ZSBfX24pIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZmluZF9sYXN0X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7 IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2xhc3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90 eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmZpbmQoX19jLCBf X3Bvcyk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25zdCBi YXNpY19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5maW5kX2ZpcnN0X25vdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5z aXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rfb2YoY29uc3Qg X0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9ub3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjps ZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihf Q2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2xhc3Rfbm90X29mKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf b2YoX19zdHIuZGF0YSgpLCBfX3BvcywgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bv cywKICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19uKSBjb25zdDsKICAgICAgc2l6 ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlw ZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmRfbGFzdF9ub3Rf b2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90 eXBlCiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zID0g bnBvcykgY29uc3Q7CgogICAgICBiYXNpY19zdHJpbmcKICAgICAgc3Vic3RyKHNpemVfdHlwZSBf X3BvcyA9IDAsIHNpemVfdHlwZSBfX24gPSBucG9zKSBjb25zdAogICAgICB7CiAgICAgICAgaWYg KF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJh c2ljX3N0cmluZzo6c3Vic3RyIik7CiAgICAgICAgcmV0dXJuIGJhc2ljX3N0cmluZygqdGhpcywg X19wb3MsIF9fbik7CiAgICAgIH0KCiAgICAgIGludAogICAgICBjb21wYXJlKGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIpIGNvbnN0CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICAgIHNpemVfdHlwZSBfX29zaXplID0gX19zdHIuc2l6ZSgpOwog ICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3NpemUsIF9fb3NpemUpOwoKICAgICAgICBp bnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3N0ci5kYXRhKCksIF9f bGVuKTsKICAgICAgICBpZiAoIV9fcikKICAgICAgICAgIF9fciA9IF9fc2l6ZSAtIF9fb3NpemU7 CiAgICAgICAgcmV0dXJuIF9fcjsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj b25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlw ZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlw ZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdDsKCiAgICAgIGludAogICAgICBjb21wYXJl KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdDsKCgoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoK ICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwg Y29uc3QgX0NoYXJUKiBfX3MsCiAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoK ICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoKQogICAgOiBfTV9kYXRhcGx1cyhfU19lbXB0eV9yZXAo KS5fTV9yZWZjb3B5KCksIF9BbGxvYygpKSB7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19z dHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgX0No YXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp dHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0 cyxfQWxsb2M+CiAgICBvcGVyYXRvcisoX0NoYXJUIF9fbGhzLCBjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcmhzKQogICAgewogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+IF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAg cmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+CiAgICBvcGVyYXRvcisoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsIF9DaGFyVCBfX3JocykKICAgIHsKICAgICAgdHlw ZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90 eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyKF9fbGhzKTsKICAgICAgX19zdHIuYXBwZW5k KF9fc2l6ZV90eXBlKDEpLCBfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMu Y29tcGFyZShfX3JocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj09KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29t cGFyZShfX2xocykgPT0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09 KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAg ICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFy ZShfX3JocykgPT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAg ICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19y aHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg aW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAg ICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMp CiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSAhPSAwOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5s aW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSAhPSAwOyB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwg X1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhz KSA8IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8IDA7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IF9DaGFyVCogX19s aHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9fbGhzKSA+IDA7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz LmNvbXBhcmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRv cj4oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpID4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29u c3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19s aHMpIDwgMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I8PShjb25zdCBi YXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAg ICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAg ICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7 IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA8PSAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJv b2wKICAgIG9wZXJhdG9yPD0oY29uc3QgX0NoYXJUKiBfX2xocywKICAgICAgICAgICAgICAgY29u c3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgeyByZXR1 cm4gX19yaHMuY29tcGFyZShfX2xocykgPj0gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAog ICAgb3BlcmF0b3I+PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ JiBfX2xocywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAw OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0 IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21wYXJlKF9fcmhzKSA+PSAwOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPj0oY29uc3QgX0NoYXJUKiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPD0gMDsgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBpbmxpbmUgdm9pZAogICAgc3dhcChiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiYgX19yaHMpCiAgICB7IF9fbGhzLnN3YXAoX19yaHMpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faXMsCiAgICAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYgX19vcywKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19zdHIpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faXMs CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3Ry LCBfQ2hhclQgX19kZWxpbSk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJU LF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9f aXMsCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f c3RyKTsKfQojIDQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmluZy5oIiAyIDMK CgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDYw ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2FsZ29yaXRobS5oIiAzCgojIDEgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMSAzCiMgNjIgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9zdGxfY29uc3RydWN0LmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX2FsZ29yaXRobS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rs X3VuaW5pdGlhbGl6ZWQuaCIgMSAzCiMgNjQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf YWxnb3JpdGhtLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdGVtcGJ1 Zi5oIiAxIDMKIyA2NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0aG0uaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvLmgiIDEgMwojIDYzICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGxfaGVhcC5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fcHVzaF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICBfRGlzdGFuY2Ug X19ob2xlSW5kZXgsIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAgX192YWx1ZSkKewogIF9EaXN0 YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICB3aGlsZSAoX19ob2xlSW5k ZXggPiBfX3RvcEluZGV4ICYmICooX19maXJzdCArIF9fcGFyZW50KSA8IF9fdmFsdWUpIHsKICAg ICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fcGFyZW50KTsKICAgIF9f aG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8g MjsKICB9CiAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gX192YWx1ZTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+ CmlubGluZSB2b2lkCl9fcHVzaF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJz dCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3QsIF9EaXN0YW5j ZSosIF9UcCopCnsKICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfRGlzdGFuY2UoKF9fbGFzdCAtIF9f Zmlyc3QpIC0gMSksIF9EaXN0YW5jZSgwKSwKICAgICAgICAgICAgICBfVHAoKihfX2xhc3QgLSAx KSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9p ZApwdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICBfX3B1c2hfaGVhcF9hdXgoX19maXJzdCwgX19sYXN0LAogICAgICAgICAg ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9EaXN0YW5j ZSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19wdXNoX2hlYXAo X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXgsIF9UcCBfX3ZhbHVlLCBfQ29tcGFyZSBfX2Nv bXApCnsKICBfRGlzdGFuY2UgX19wYXJlbnQgPSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgd2hp bGUgKF9faG9sZUluZGV4ID4gX190b3BJbmRleCAmJiBfX2NvbXAoKihfX2ZpcnN0ICsgX19wYXJl bnQpLCBfX3ZhbHVlKSkgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0 ICsgX19wYXJlbnQpOwogICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgIF9fcGFyZW50ID0g KF9faG9sZUluZGV4IC0gMSkgLyAyOwogIH0KICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBf X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf Q29tcGFyZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZApfX3B1c2hfaGVhcF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAsCiAg ICAgICAgICAgICAgICBfRGlzdGFuY2UqLCBfVHAqKQp7CiAgX19wdXNoX2hlYXAoX19maXJzdCwg X0Rpc3RhbmNlKChfX2xhc3QgLSBfX2ZpcnN0KSAtIDEpLCBfRGlzdGFuY2UoMCksCiAgICAgICAg ICAgICAgX1RwKCooX19sYXN0IC0gMSkpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQKcHVzaF9oZWFw KF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgX19wdXNoX2hlYXBfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wLAog ICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCksIF9fdmFsdWVfdHlwZShf X2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz IF9EaXN0YW5jZSwgY2xhc3MgX1RwPgp2b2lkCl9fYWRqdXN0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5jZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICBfRGlz dGFuY2UgX19sZW4sIF9UcCBfX3ZhbHVlKQp7CiAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hv bGVJbmRleDsKICBfRGlzdGFuY2UgX19zZWNvbmRDaGlsZCA9IDIgKiBfX2hvbGVJbmRleCArIDI7 CiAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgaWYgKCooX19maXJzdCArIF9f c2Vjb25kQ2hpbGQpIDwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpCiAgICAgIF9f c2Vjb25kQ2hpbGQtLTsKICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr IF9fc2Vjb25kQ2hpbGQpOwogICAgX19ob2xlSW5kZXggPSBfX3NlY29uZENoaWxkOwogICAgX19z ZWNvbmRDaGlsZCA9IDIgKiAoX19zZWNvbmRDaGlsZCArIDEpOwogIH0KICBpZiAoX19zZWNvbmRD aGlsZCA9PSBfX2xlbikgewogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0 ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQg LSAxOwogIH0KICBfX3B1c2hfaGVhcChfX2ZpcnN0LCBfX2hvbGVJbmRleCwgX190b3BJbmRleCwg X192YWx1ZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNz IF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9pZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3VsdCwgX1RwIF9fdmFsdWUsIF9EaXN0YW5j ZSopCnsKICAqX19yZXN1bHQgPSAqX19maXJzdDsKICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9E aXN0YW5jZSgwKSwgX0Rpc3RhbmNlKF9fbGFzdCAtIF9fZmlyc3QpLCBfX3ZhbHVlKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX1RwPgppbmxpbmUgdm9p ZApfX3BvcF9oZWFwX2F1eChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgX1RwKikKewogIF9fcG9wX2hlYXAo X19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwKICAgICAgICAgICAgIF9UcCgqKF9fbGFz dCAtIDEpKSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9S YW5kb21BY2Nlc3NJdGVyYXRvcj4KaW5saW5lIHZvaWQgcG9wX2hlYXAoX1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRv ciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9E aXN0YW5jZSwKICAgICAgICAgIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CnZvaWQKX19hZGp1 c3RfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LAogICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJl IF9fY29tcCkKewogIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0gX19ob2xlSW5kZXg7CiAgX0Rpc3Rh bmNlIF9fc2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogIHdoaWxlIChfX3NlY29u ZENoaWxkIDwgX19sZW4pIHsKICAgIGlmIChfX2NvbXAoKihfX2ZpcnN0ICsgX19zZWNvbmRDaGls ZCksICooX19maXJzdCArIChfX3NlY29uZENoaWxkIC0gMSkpKSkKICAgICAgX19zZWNvbmRDaGls ZC0tOwogICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19zZWNvbmRD aGlsZCk7CiAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQ7CiAgICBfX3NlY29uZENoaWxk ID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgfQogIGlmIChfX3NlY29uZENoaWxkID09IF9f bGVuKSB7CiAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNv bmRDaGlsZCAtIDEpKTsKICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZCAtIDE7CiAgfQog IF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBf VHAsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgdm9p ZApfX3BvcF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX3Jlc3Vs dCwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCwKICAgICAgICAgICBfRGlzdGFuY2UqKQp7 CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBfRGlzdGFu Y2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgIF9fdmFs dWUsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNs YXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCl9fcG9wX2hlYXBfYXV4KF9SYW5k b21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl cmF0b3IgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfX3BvcF9oZWFwKF9fZmly c3QsIF9fbGFzdCAtIDEsIF9fbGFzdCAtIDEsIF9UcCgqKF9fbGFzdCAtIDEpKSwgX19jb21wLAog ICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkCnBvcF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICBfX3BvcF9oZWFwX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVf dHlwZShfX2ZpcnN0KSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgY2xhc3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CnZvaWQKX19tYWtlX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0gX19maXJzdCA8 IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0 YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7CiAgICBfX2Fk anVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJzdCArIF9fcGFy ZW50KSkpOwogICAgaWYgKF9fcGFyZW50ID09IDApIHJldHVybjsKICAgIF9fcGFyZW50LS07CiAg fQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgppbmxpbmUgdm9pZApt YWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy YXRvciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgX192 YWx1ZV90eXBlKF9fZmlyc3QpLCBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFzcyBfQ29tcGFyZSwKICAgICAgICAg IGNsYXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkCl9fbWFrZV9oZWFwKF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAg ICAgICBfQ29tcGFyZSBfX2NvbXAsIF9UcCosIF9EaXN0YW5jZSopCnsKICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDIpIHJldHVybjsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xhc3QgLSBfX2ZpcnN0 OwogIF9EaXN0YW5jZSBfX3BhcmVudCA9IChfX2xlbiAtIDIpLzI7CgogIHdoaWxlICh0cnVlKSB7 CiAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1RwKCooX19maXJz dCArIF9fcGFyZW50KSksCiAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19wYXJl bnQgPT0gMCkgcmV0dXJuOwogICAgX19wYXJlbnQtLTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBf UmFuZG9tQWNjZXNzSXRlcmF0b3IsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZAptYWtlX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICBfX21ha2VfaGVhcChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCwKICAg ICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0 KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CnZvaWQgc29ydF9o ZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgcG9wX2hlYXAoX19maXJzdCwg X19sYXN0LS0pOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCBjbGFz cyBfQ29tcGFyZT4Kdm9pZApzb3J0X2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3Qs CiAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXAp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+IDEpCiAgICBwb3BfaGVhcChfX2ZpcnN0LCBfX2xhc3QtLSwgX19jb21wKTsKfQoK fQojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ28uaCIgMiAzCgoKCm5hbWVz cGFjZSBzdGQKewoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgppbmxpbmUgY29uc3QgX1RwJiBfX21l ZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2IsIGNvbnN0IF9UcCYgX19jKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICBpZiAoX19hIDwgX19iKQogICAgaWYgKF9fYiA8IF9fYykKICAgICAgcmV0dXJuIF9f YjsKICAgIGVsc2UgaWYgKF9fYSA8IF9fYykKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UKICAg ICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2EgPCBfX2MpCiAgICByZXR1cm4gX19hOwogIGVs c2UgaWYgKF9fYiA8IF9fYykKICAgIHJldHVybiBfX2M7CiAgZWxzZQogICAgcmV0dXJuIF9fYjsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBjb25zdCBfVHAm Cl9fbWVkaWFuKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgY29uc3QgX1RwJiBfX2Ms IF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICBpZiAoX19jb21w KF9fYSwgX19iKSkKICAgIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgICByZXR1cm4gX19iOwog ICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgcmV0dXJuIF9fYzsKICAgIGVsc2UK ICAgICAgcmV0dXJuIF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19hLCBfX2MpKQogICAgcmV0dXJu IF9fYTsKICBlbHNlIGlmIChfX2NvbXAoX19iLCBfX2MpKQogICAgcmV0dXJuIF9fYzsKICBlbHNl CiAgICByZXR1cm4gX19iOwp9CgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G dW5jdGlvbj4KX0Z1bmN0aW9uIGZvcl9lYWNoKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRl ciBfX2xhc3QsIF9GdW5jdGlvbiBfX2YpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgX19mKCpfX2ZpcnN0KTsKICByZXR1cm4gX19mOwp9CgoK CnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfVHA+CmlubGluZSBfSW5wdXRJdGVy IGZpbmQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgIGlucHV0 X2l0ZXJhdG9yX3RhZykKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCAmJiAhKCpfX2ZpcnN0 ID09IF9fdmFsKSkKICAgICsrX19maXJzdDsKICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+CmlubGluZSBfSW5wdXRJdGVyIGZp bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QgJiYgIV9f cHJlZCgqX19maXJzdCkpCiAgICArK19fZmlyc3Q7CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgpfUmFuZG9tQWNjZXNzSXRl ciBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAg ICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQp7CiAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fdHJpcF9jb3Vu dAogICAgPSAoX19sYXN0IC0gX19maXJzdCkgPj4gMjsKCiAgZm9yICggOyBfX3RyaXBfY291bnQg PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJu IF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSByZXR1 cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl dHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkg cmV0dXJuIF9fZmlyc3Q7CiAgICArK19fZmlyc3Q7CiAgfQoKICBzd2l0Y2goX19sYXN0IC0gX19m aXJzdCkgewogIGNhc2UgMzoKICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmly c3Q7CiAgICArK19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFsKSBy ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDE6CiAgICBpZiAoKl9fZmlyc3Qg PT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMDoKICBkZWZh dWx0OgogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX1JhbmRvbUFjY2Vzc0l0ZXIgZmluZF9pZihfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCnsKICB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAg ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICBmb3IgKCA7IF9fdHJpcF9jb3VudCA+IDAg OyAtLV9fdHJpcF9jb3VudCkgewogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgKytfX2ZpcnN0OwoKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19m aXJzdDsKICAgICsrX19maXJzdDsKCiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9f Zmlyc3Q7CiAgICArK19fZmlyc3Q7CgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf X2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsK ICBjYXNlIDM6CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAgICAr K19fZmlyc3Q7CiAgY2FzZSAyOgogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2Zp cnN0OwogICAgKytfX2ZpcnN0OwogIGNhc2UgMToKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSBy ZXR1cm4gX19maXJzdDsKICAgICsrX19maXJzdDsKICBjYXNlIDA6CiAgZGVmYXVsdDoKICAgIHJl dHVybiBfX2xhc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1Rw PgppbmxpbmUgX0lucHV0SXRlciBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy LCBjbGFzcyBfUHJlZGljYXRlPgppbmxpbmUgX0lucHV0SXRlciBmaW5kX2lmKF9JbnB1dEl0ZXIg X19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX1By ZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIGZpbmRfaWYoX19maXJz dCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwp9CgoKCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBhZGphY2VudF9maW5kKF9G b3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19sYXN0OwogIF9Gb3J3 YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIHdoaWxlKCsrX19uZXh0ICE9IF9fbGFzdCkgewog ICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgIHJldHVybiBfX2ZpcnN0OwogICAgX19m aXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFzdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0ZvcndhcmRJdGVyIGFkamFjZW50 X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVybiBfX2xh c3Q7CiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUoKytfX25leHQgIT0g X19sYXN0KSB7CiAgICBpZiAoX19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAg IHJldHVybiBfX2ZpcnN0OwogICAgX19maXJzdCA9IF9fbmV4dDsKICB9CiAgcmV0dXJuIF9fbGFz dDsKfQoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X1NpemU+CnZvaWQgY291bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICAgIF9TaXplJiBfX24pCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYg KCpfX2ZpcnN0ID09IF9fdmFsdWUpCiAgICAgICsrX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xhc3MgX1NpemU+CnZvaWQgY291bnRfaWYoX0lu cHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg ICAgICAgICAgICAgX1NpemUmIF9fbikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICsr X19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1RwPgp0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQpjb3VudChfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsdWUpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXI+ OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyAr K19fZmlyc3QpCiAgICBpZiAoKl9fZmlyc3QgPT0gX192YWx1ZSkKICAgICAgKytfX247CiAgcmV0 dXJuIF9fbjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+ CnR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCmNv dW50X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsIF9QcmVkaWNhdGUg X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0 SXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogIGZvciAoIDsgX19maXJzdCAhPSBfX2xh c3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICArK19fbjsKICBy ZXR1cm4gX19uOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0Zv cndhcmRJdGVyMj4KX0ZvcndhcmRJdGVyMSBzZWFyY2goX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIy IF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCgoKICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9 PSBfX2xhc3QyKQogICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChf X2ZpcnN0Mik7CiAgKytfX3RtcDsKICBpZiAoX190bXAgPT0gX19sYXN0MikKICAgIHJldHVybiBm aW5kKF9fZmlyc3QxLCBfX2xhc3QxLCAqX19maXJzdDIpOwoKCgogIF9Gb3J3YXJkSXRlcjIgX19w MSwgX19wOwoKICBfX3AxID0gX19maXJzdDI7ICsrX19wMTsKCiAgX0ZvcndhcmRJdGVyMSBfX2N1 cnJlbnQgPSBfX2ZpcnN0MTsKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgIF9f Zmlyc3QxID0gZmluZChfX2ZpcnN0MSwgX19sYXN0MSwgKl9fZmlyc3QyKTsKICAgIGlmIChfX2Zp cnN0MSA9PSBfX2xhc3QxKQogICAgICByZXR1cm4gX19sYXN0MTsKCiAgICBfX3AgPSBfX3AxOwog ICAgX19jdXJyZW50ID0gX19maXJzdDE7CiAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkK ICAgICAgcmV0dXJuIF9fbGFzdDE7CgogICAgd2hpbGUgKCpfX2N1cnJlbnQgPT0gKl9fcCkgewog ICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAg IGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAg fQoKICAgICsrX19maXJzdDE7CiAgfQogIHJldHVybiBfX2ZpcnN0MTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjIsIGNsYXNzIF9CaW5hcnlQcmVk PgpfRm9yd2FyZEl0ZXIxIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIs IF9Gb3J3YXJkSXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQg X19wcmVkaWNhdGUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICBp ZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJu IF9fZmlyc3QxOwoKCiAgX0ZvcndhcmRJdGVyMiBfX3RtcChfX2ZpcnN0Mik7CiAgKytfX3RtcDsK ICBpZiAoX190bXAgPT0gX19sYXN0MikgewogICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytfX2ZpcnN0MTsK ICAgIHJldHVybiBfX2ZpcnN0MTsKICB9CgoKCiAgX0ZvcndhcmRJdGVyMiBfX3AxLCBfX3A7Cgog IF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9f Zmlyc3QxOwoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSkgewogICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEpIHsKICAgICAgaWYgKF9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmly c3QyKSkKICAgICAgICBicmVhazsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIHdoaWxlIChf X2ZpcnN0MSAhPSBfX2xhc3QxICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0Mikp CiAgICAgICsrX19maXJzdDE7CiAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSkKICAgICAgcmV0 dXJuIF9fbGFzdDE7CgogICAgX19wID0gX19wMTsKICAgIF9fY3VycmVudCA9IF9fZmlyc3QxOwog ICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEpIHJldHVybiBfX2xhc3QxOwoKICAgIHdoaWxl IChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkgewogICAgICBpZiAoKytfX3AgPT0gX19s YXN0MikKICAgICAgICByZXR1cm4gX19maXJzdDE7CiAgICAgIGlmICgrK19fY3VycmVudCA9PSBf X2xhc3QxKQogICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgfQoKICAgICsrX19maXJzdDE7CiAg fQogIHJldHVybiBfX2ZpcnN0MTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBj bGFzcyBfSW50ZWdlciwgY2xhc3MgX1RwPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJ dGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBf SW50ZWdlciBfX2NvdW50LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIGlmIChfX2NvdW50IDw9IDApCiAgICByZXR1cm4gX19maXJzdDsKICBlbHNlIHsK ICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwpOwogICAgd2hpbGUgKF9f Zmlyc3QgIT0gX19sYXN0KSB7CiAgICAgIF9JbnRlZ2VyIF9fbiA9IF9fY291bnQgLSAxOwogICAg ICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgKytfX2k7CiAgICAgIHdoaWxlIChf X2kgIT0gX19sYXN0ICYmIF9fbiAhPSAwICYmICpfX2kgPT0gX192YWwpIHsKICAgICAgICArK19f aTsKICAgICAgICAtLV9fbjsKICAgICAgfQogICAgICBpZiAoX19uID09IDApCiAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UKICAgICAgICBfX2ZpcnN0ID0gZmluZChfX2ksIF9fbGFz dCwgX192YWwpOwogICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9JbnRlZ2VyLCBjbGFzcyBfVHAsIGNsYXNzIF9CaW5hcnlQ cmVkPgpfRm9yd2FyZEl0ZXIgc2VhcmNoX24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfSW50ZWdlciBfX2NvdW50LCBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWQgX19iaW5hcnlf cHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fY291bnQgPD0gMCkKICAg IHJldHVybiBfX2ZpcnN0OwogIGVsc2UgewogICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7 CiAgICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0LCBfX3ZhbCkpCiAgICAgICAgYnJlYWs7 CiAgICAgICsrX19maXJzdDsKICAgIH0KICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewog ICAgICBfSW50ZWdlciBfX24gPSBfX2NvdW50IC0gMTsKICAgICAgX0ZvcndhcmRJdGVyIF9faSA9 IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCAmJiBfX24g IT0gMCAmJiBfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkgewogICAgICAgICsrX19pOwogICAg ICAgIC0tX19uOwogICAgICB9CiAgICAgIGlmIChfX24gPT0gMCkKICAgICAgICByZXR1cm4gX19m aXJzdDsKICAgICAgZWxzZSB7CiAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QpIHsKICAgICAg ICAgIGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICArK19faTsKICAgICAgICB9CiAgICAgICAgX19maXJzdCA9IF9faTsKICAgICAgfQog ICAgfQogICAgcmV0dXJuIF9fbGFzdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJk SXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+Cl9Gb3J3YXJkSXRlcjIgc3dhcF9yYW5nZXMoX0Zv cndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcjIgX19maXJzdDIpCnsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIGZvciAoIDsgX19m aXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgIGl0ZXJfc3dhcChf X2ZpcnN0MSwgX19maXJzdDIpOwogIHJldHVybiBfX2ZpcnN0MjsKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX0lucHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9VbmFyeU9wZXJhdGlvbj4K X091dHB1dEl0ZXIgdHJhbnNmb3JtKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX1VuYXJ5T3Bl cmF0aW9uIF9fdW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCgoKCiAgZm9yICggOyBfX2ZpcnN0ICE9 IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVzdWx0KQogICAgKl9fcmVzdWx0ID0gX191bmFyeV9v cCgqX19maXJzdCk7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNs YXNzIF9CaW5hcnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyIHRyYW5zZm9ybShfSW5wdXRJdGVyMSBf X2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAg ICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgoKCgoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJz dDIsICsrX19yZXN1bHQpCiAgICAqX19yZXN1bHQgPSBfX2JpbmFyeV9vcCgqX19maXJzdDEsICpf X2ZpcnN0Mik7CiAgcmV0dXJuIF9fcmVzdWx0Owp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZCByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29u c3QgX1RwJiBfX25ld192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpZiAoKl9f Zmlyc3QgPT0gX19vbGRfdmFsdWUpCiAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4K dm9pZCByZXBsYWNlX2lmKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIGNvbnN0IF9UcCYgX19uZXdfdmFs dWUpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKQogICAgICAq X19maXJzdCA9IF9fbmV3X3ZhbHVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xh c3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVwbGFjZV9jb3B5KF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX19vbGRfdmFsdWUsIGNvbnN0IF9UcCYgX19uZXdfdmFsdWUpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QsICsrX19yZXN1 bHQpCiAgICAqX19yZXN1bHQgPSAqX19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVl IDogKl9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNsYXNzIF9UcD4KX091 dHB1dEl0ZXIgcmVwbGFjZV9jb3B5X2lmKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBjb25zdCBfVHAm IF9fbmV3X3ZhbHVlKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBf X2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICpfX3Jlc3VsdCA9IF9fcHJlZCgqX19m aXJzdCkgPyBfX25ld192YWx1ZSA6ICpfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfR2VuZXJhdG9yPgp2b2lkIGdlbmVy YXRlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfR2VuZXJhdG9y IF9fZ2VuKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgKl9fZmlyc3QgPSBfX2dlbigpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9TaXplLCBjbGFzcyBfR2VuZXJhdG9yPgpfT3V0cHV0SXRlciBn ZW5lcmF0ZV9uKF9PdXRwdXRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgX0dlbmVyYXRvciBfX2dl bikKewoKCgoKCgogIGZvciAoIDsgX19uID4gMDsgLS1fX24sICsrX19maXJzdCkKICAgICpfX2Zp cnN0ID0gX19nZW4oKTsKICByZXR1cm4gX19maXJzdDsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lu cHV0SXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXIgcmVtb3Zl X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIGNvbnN0IF9UcCYgX192YWx1ZSkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19m aXJzdCkKICAgIGlmICghKCpfX2ZpcnN0ID09IF9fdmFsdWUpKSB7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfUHJl ZGljYXRlPgpfT3V0cHV0SXRlciByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCwgX1ByZWRpY2F0ZSBfX3ByZWQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgZm9yICgg OyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaWYgKCFfX3ByZWQoKl9fZmlyc3Qp KSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICArK19fcmVzdWx0OwogICAgfQog IHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3Mg X1RwPgpfRm9yd2FyZEl0ZXIgcmVtb3ZlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWx1ZSkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0ID0gZmluZChfX2Zp cnN0LCBfX2xhc3QsIF9fdmFsdWUpOwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJl dHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAg ICAgOiByZW1vdmVfY29weSgrK19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ZhbHVlKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KX0ZvcndhcmRJdGVy IHJlbW92ZV9pZihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKCiAgX19maXJzdCA9IGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQp OwogIF9Gb3J3YXJkSXRlciBfX2kgPSBfX2ZpcnN0OwogIHJldHVybiBfX2ZpcnN0ID09IF9fbGFz dCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgOiByZW1vdmVfY29weV9pZigr K19faSwgX19sYXN0LCBfX2ZpcnN0LCBfX3ByZWQpOwp9CgoKCnRlbXBsYXRlIDxjbGFzcyBfSW5w dXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1 ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsIF9UcCopCnsKCiAgX1RwIF9fdmFs dWUgPSAqX19maXJzdDsKICAqX19yZXN1bHQgPSBfX3ZhbHVlOwogIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQogICAgaWYgKCEoX192YWx1ZSA9PSAqX19maXJzdCkpIHsKICAgICAgX192YWx1 ZSA9ICpfX2ZpcnN0OwogICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICB9CiAgcmV0dXJu ICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0 SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIF9fdW5pcXVlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1 dF9pdGVyYXRvcl90YWcpCnsKCiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0 LCBfX3Jlc3VsdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRlcj4KX0ZvcndhcmRJdGVyIF9fdW5pcXVlX2NvcHko X0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKewoK ICAqX19yZXN1bHQgPSAqX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAg IGlmICghKCpfX3Jlc3VsdCA9PSAqX19maXJzdCkpCiAgICAgICorK19fcmVzdWx0ID0gKl9fZmly c3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfT3V0cHV0SXRlcj4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19m aXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX3Jlc3VsdDsKICByZXR1cm4gX191bmlxdWVfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19yZXN1bHQpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNs YXNzIF9PdXRwdXRJdGVyLCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlLAogICAgICAgICAgY2xhc3Mg X1RwPgpfT3V0cHV0SXRlciBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkLCBfVHAqKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICBfVHAgX192YWx1ZSA9 ICpfX2ZpcnN0OwogICpfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBf X2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoX192YWx1ZSwgKl9fZmlyc3QpKSB7CiAgICAg IF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgfQog IHJldHVybiArK19fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3Mg X091dHB1dEl0ZXIsIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+CmlubGluZSBfT3V0cHV0SXRlciBf X3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHB1dF9pdGVyYXRvcl90YWcpCnsK CiAgcmV0dXJuIF9fdW5pcXVlX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19iaW5h cnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBf QmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgX191bmlxdWVfY29weShfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVk aWNhdGUgX19iaW5hcnlfcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9p dGVyYXRvcl90YWcpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgd2hpbGUgKCsr X19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19m aXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgcmV0dXJuICsrX19yZXN1bHQ7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0JpbmFy eVByZWRpY2F0ZT4KaW5saW5lIF9PdXRwdXRJdGVyIHVuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf T3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly c3QsIF9fbGFzdCwgX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsCiAgICAgICAgICAgICAgICAgICAg ICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9y d2FyZEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfX2ZpcnN0 ID0gYWRqYWNlbnRfZmluZChfX2ZpcnN0LCBfX2xhc3QpOwogIHJldHVybiB1bmlxdWVfY29weShf X2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVy LCBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfRm9yd2FyZEl0ZXIgdW5pcXVlKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgIF9CaW5h cnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CgogIF9fZmlyc3QgPSBhZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJl ZCk7CiAgcmV0dXJuIHVuaXF1ZV9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19maXJzdCwgX19iaW5h cnlfcHJlZCk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4Kdm9pZCBf X3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKSB7CiAgd2hp bGUgKHRydWUpCiAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QgfHwgX19maXJzdCA9PSAtLV9fbGFz dCkKICAgICAgcmV0dXJuOwogICAgZWxzZQogICAgICBpdGVyX3N3YXAoX19maXJzdCsrLCBfX2xh c3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CnZvaWQgX19yZXZlcnNl KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAg ICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpIHsKICB3aGlsZSAoX19maXJz dCA8IF9fbGFzdCkKICAgIGl0ZXJfc3dhcChfX2ZpcnN0KyssIC0tX19sYXN0KTsKfQoKdGVtcGxh dGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5saW5lIHZvaWQgcmV2ZXJzZShfQmlkaXJl Y3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByZXZlcnNlX2NvcHkoX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICB3aGls ZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIC0tX19sYXN0OwogICAgKl9fcmVzdWx0ID0gKl9f bGFzdDsKICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgpfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19n Y2QoX0V1Y2xpZGVhblJpbmdFbGVtZW50IF9fbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9FdWNsaWRlYW5SaW5nRWxlbWVudCBfX24pCnsKICB3aGlsZSAoX19uICE9IDApIHsKICAgIF9F dWNsaWRlYW5SaW5nRWxlbWVudCBfX3QgPSBfX20gJSBfX247CiAgICBfX20gPSBfX247CiAgICBf X24gPSBfX3Q7CiAgfQogIHJldHVybiBfX207Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0 ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fcm90YXRlKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9EaXN0YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykKewogIGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAo X19sYXN0ID09IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9Gb3J3YXJkSXRlciBf X2ZpcnN0MiA9IF9fbWlkZGxlOwogIGRvIHsKICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3Qy KyspOwogICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUpCiAgICAgIF9fbWlkZGxlID0gX19maXJz dDI7CiAgfSB3aGlsZSAoX19maXJzdDIgIT0gX19sYXN0KTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV3 X21pZGRsZSA9IF9fZmlyc3Q7CgogIF9fZmlyc3QyID0gX19taWRkbGU7CgogIHdoaWxlIChfX2Zp cnN0MiAhPSBfX2xhc3QpIHsKICAgIHN3YXAgKCpfX2ZpcnN0KyssICpfX2ZpcnN0MisrKTsKICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICBfX21pZGRsZSA9IF9fZmlyc3QyOwogICAg ZWxzZSBpZiAoX19maXJzdDIgPT0gX19sYXN0KQogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwog IH0KCiAgcmV0dXJuIF9fbmV3X21pZGRsZTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rp b25hbEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX0JpZGlyZWN0aW9uYWxJdGVyIF9fcm90YXRlKF9C aWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0 YW5jZSosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09 IF9fbWlkZGxlKQogICAgcmV0dXJuIF9fbGFzdDsKICBpZiAoX19sYXN0ID09IF9fbWlkZGxlKQog ICAgcmV0dXJuIF9fZmlyc3Q7CgogIF9fcmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJl Y3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgX19yZXZlcnNlKF9fbWlkZGxlLCBfX2xhc3QsIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwoKICB3aGlsZSAoX19maXJzdCAhPSBfX21pZGRs ZSAmJiBfX21pZGRsZSAhPSBfX2xhc3QpCiAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3Qp OwoKICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkgewogICAgX19yZXZlcnNlKF9fbWlkZGxlLCBf X2xhc3QsIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fbGFzdDsK ICB9CiAgZWxzZSB7CiAgICBfX3JldmVyc2UoX19maXJzdCwgX19taWRkbGUsIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnKCkpOwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX1RwPgpfUmFu ZG9tQWNjZXNzSXRlciBfX3JvdGF0ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICBfRGlzdGFuY2UgKiwgX1RwICopCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogIF9EaXN0YW5jZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogIF9EaXN0YW5j ZSBfX2sgPSBfX21pZGRsZSAtIF9fZmlyc3Q7CiAgX0Rpc3RhbmNlIF9fbCA9IF9fbiAtIF9fazsK ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3QgKyAoX19sYXN0IC0gX19taWRk bGUpOwoKICBpZiAoX19rID09IDApCiAgICByZXR1cm4gX19sYXN0OwoKICBlbHNlIGlmIChfX2sg PT0gX19sKSB7CiAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUpOwog ICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KCiAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9fbiwgX19r KTsKCiAgZm9yIChfRGlzdGFuY2UgX19pID0gMDsgX19pIDwgX19kOyBfX2krKykgewogICAgX1Rw IF9fdG1wID0gKl9fZmlyc3Q7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3AgPSBfX2ZpcnN0OwoK ICAgIGlmIChfX2sgPCBfX2wpIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwg X19sL19fZDsgX19qKyspIHsKICAgICAgICBpZiAoX19wID4gX19maXJzdCArIF9fbCkgewogICAg ICAgICAgKl9fcCA9ICooX19wIC0gX19sKTsKICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAg fQoKICAgICAgICAqX19wID0gKihfX3AgKyBfX2spOwogICAgICAgIF9fcCArPSBfX2s7CiAgICAg IH0KICAgIH0KCiAgICBlbHNlIHsKICAgICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwg X19rL19fZCAtIDE7IF9faiArKykgewogICAgICAgIGlmIChfX3AgPCBfX2xhc3QgLSBfX2spIHsK ICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICBfX3AgKz0gX19rOwogICAg ICAgIH0KCiAgICAgICAgKl9fcCA9ICogKF9fcCAtIF9fbCk7CiAgICAgICAgX19wIC09IF9fbDsK ICAgICAgfQogICAgfQoKICAgICpfX3AgPSBfX3RtcDsKICAgICsrX19maXJzdDsKICB9CgogIHJl dHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlcj4KaW5saW5lIF9G b3J3YXJkSXRlciByb3RhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fcm90YXRlKF9fZmlyc3QsIF9fbWlkZGxl LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSwKICAg ICAgICAgICAgICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciByb3Rh dGVfY29weShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLAogICAg ICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfT3V0cHV0SXRlciBfX3Jl c3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBjb3B5KF9fZmlyc3QsIF9fbWlk ZGxlLCBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fcmVzdWx0KSk7Cn0KCgoKCnRlbXBsYXRlIDxj bGFzcyBfRGlzdGFuY2U+CmlubGluZSBfRGlzdGFuY2UgX19yYW5kb21fbnVtYmVyKF9EaXN0YW5j ZSBfX24pIHsKCiAgcmV0dXJuIGxyYW5kNDgoKSAlIF9fbjsKCgoKfQoKCgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSB2b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf X2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICBpdGVyX3N3YXAoX19pLCBfX2Zp cnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yPgp2 b2lkIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y JiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgaXRlcl9zd2FwKF9faSwgX19maXJzdCAr IF9fcmFuZCgoX19pIC0gX19maXJzdCkgKyAxKSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX091dHB1dEl0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX091dHB1dEl0ZXIg cmFuZG9tX3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9E aXN0YW5jZSBfX24pCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5p bmcgPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0 YW5jZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAg ICBpZiAoX19yYW5kb21fbnVtYmVyKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQg PSAqX19maXJzdDsKICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3Jl bWFpbmluZzsKICAgICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfT3V0cHV0SXRlciwgY2xhc3MgX0Rpc3RhbmNlLAog ICAgICAgICAgY2xhc3MgX1JhbmRvbU51bWJlckdlbmVyYXRvcj4KX091dHB1dEl0ZXIgcmFuZG9t X3NhbXBsZV9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19vdXQsIGNvbnN0IF9EaXN0YW5j ZSBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9y JiBfX3JhbmQpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBfRGlzdGFuY2UgX19yZW1haW5pbmcg PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19yZW1haW5pbmcpOwogIF9EaXN0YW5j ZSBfX20gPSBtaW4oX19uLCBfX3JlbWFpbmluZyk7CgogIHdoaWxlIChfX20gPiAwKSB7CiAgICBp ZiAoX19yYW5kKF9fcmVtYWluaW5nKSA8IF9fbSkgewogICAgICAqX19vdXQgPSAqX19maXJzdDsK ICAgICAgKytfX291dDsKICAgICAgLS1fX207CiAgICB9CgogICAgLS1fX3JlbWFpbmluZzsKICAg ICsrX19maXJzdDsKICB9CiAgcmV0dXJuIF9fb3V0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZT4KX1JhbmRvbUFj Y2Vzc0l0ZXIgX19yYW5kb21fc2FtcGxlKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX291dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9EaXN0YW5j ZSBfX24pCnsKICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZv ciAoIDsgX19maXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQog ICAgX19vdXRbX19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsK ICAgICsrX190OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZG9tX251bWJlcihfX3QpOwogICAg aWYgKF9fTSA8IF9fbikKICAgICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0 OwogIH0KCiAgcmV0dXJuIF9fb3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yLCBjbGFzcyBfRGlzdGFuY2U+Cl9SYW5kb21BY2Nlc3NJdGVyIF9fcmFuZG9tX3Nh bXBsZShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19vdXQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tTnVtYmVyR2VuZXJhdG9yJiBfX3JhbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfRGlzdGFuY2UgX19uKQp7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBfRGlzdGFuY2UgX19tID0gMDsKICBfRGlzdGFuY2UgX190ID0gX19uOwogIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3QgJiYgX19tIDwgX19uOyArK19fbSwgKytfX2ZpcnN0KQogICAgX19vdXRb X19tXSA9ICpfX2ZpcnN0OwoKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICsrX190 OwogICAgX0Rpc3RhbmNlIF9fTSA9IF9fcmFuZChfX3QpOwogICAgaWYgKF9fTSA8IF9fbikKICAg ICAgX19vdXRbX19NXSA9ICpfX2ZpcnN0OwogICAgKytfX2ZpcnN0OwogIH0KCiAgcmV0dXJuIF9f b3V0ICsgX19tOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXI+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpyYW5kb21fc2FtcGxlKF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vz c0l0ZXIgX19vdXRfZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fb3V0X2xhc3QpCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3JhbmRvbV9zYW1w bGUoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfZmlyc3Qs IF9fb3V0X2xhc3QgLSBfX291dF9maXJzdCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl ciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsCiAgICAgICAgICBjbGFzcyBfUmFuZG9tTnVtYmVy R2VuZXJhdG9yPgppbmxpbmUgX1JhbmRvbUFjY2Vzc0l0ZXIKcmFuZG9tX3NhbXBsZShfSW5wdXRJ dGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIF9SYW5kb21BY2Nl c3NJdGVyIF9fb3V0X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX291dF9sYXN0LAogICAgICAg ICAgICAgIF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKewoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9fcmFuZG9tX3NhbXBsZShfX2ZpcnN0 LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX291dF9maXJzdCwgX19yYW5kLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19vdXRfbGFzdCAtIF9fb3V0X2ZpcnN0KTsKfQoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUHJlZGljYXRlPgpfRm9yd2FyZEl0 ZXIgX19wYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1ByZWRp Y2F0ZSBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZykKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CgogIHdoaWxlIChf X3ByZWQoKl9fZmlyc3QpKQogICAgaWYgKCsrX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2Zp cnN0OwoKICBfRm9yd2FyZEl0ZXIgX19uZXh0ID0gX19maXJzdDsKCiAgd2hpbGUgKCsrX19uZXh0 ICE9IF9fbGFzdCkKICAgIGlmIChfX3ByZWQoKl9fbmV4dCkpIHsKICAgICAgc3dhcCgqX19maXJz dCwgKl9fbmV4dCk7CiAgICAgICsrX19maXJzdDsKICAgIH0KCiAgcmV0dXJuIF9fZmlyc3Q7Cn0K CnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGU+Cl9C aWRpcmVjdGlvbmFsSXRlciBfX3BhcnRpdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQp7CiAg d2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xh c3QpCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKF9fcHJlZCgqX19maXJz dCkpCiAgICAgICAgKytfX2ZpcnN0OwogICAgICBlbHNlCiAgICAgICAgYnJlYWs7CiAgICAtLV9f bGFzdDsKICAgIHdoaWxlICh0cnVlKQogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICAg ICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAg ICAgLS1fX2xhc3Q7CiAgICAgIGVsc2UKICAgICAgICBicmVhazsKICAgIGl0ZXJfc3dhcChfX2Zp cnN0LCBfX2xhc3QpOwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3 YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBwYXJ0aXRpb24o X0ZvcndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUg X19wcmVkKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICByZXR1cm4gX19wYXJ0aXRp b24oX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkp Owp9CgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZSwgY2xh c3MgX0Rpc3RhbmNlPgpfRm9yd2FyZEl0ZXIgX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24oX0Zv cndhcmRJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9EaXN0YW5jZSBfX2xlbikKewogIGlmIChfX2xlbiA9 PSAxKQogICAgcmV0dXJuIF9fcHJlZCgqX19maXJzdCkgPyBfX2xhc3QgOiBfX2ZpcnN0OwogIF9G b3J3YXJkSXRlciBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4g LyAyKTsKICByZXR1cm4gcm90YXRlKF9faW5wbGFjZV9zdGFibGVfcGFydGl0aW9uKF9fZmlyc3Qs IF9fbWlkZGxlLCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2xlbiAvIDIpLAogICAgICAgICAgICAgICAgX19taWRkbGUsCiAgICAgICAgICAgICAg ICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX21pZGRsZSwgX19sYXN0LCBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8g MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfUG9pbnRlciwgY2xh c3MgX1ByZWRpY2F0ZSwKICAgICAgICAgIGNsYXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9f c3RhYmxlX3BhcnRpdGlvbl9hZGFwdGl2ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBf RGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCnsKICBpZiAoX19sZW4gPD0gX19idWZmZXJfc2l6 ZSkgewogICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7CiAgICBfUG9pbnRlciBf X3Jlc3VsdDIgPSBfX2J1ZmZlcjsKICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3QgOyArK19f Zmlyc3QpCiAgICAgIGlmIChfX3ByZWQoKl9fZmlyc3QpKSB7CiAgICAgICAgKl9fcmVzdWx0MSA9 ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHQxOwogICAgICB9CiAgICAgIGVsc2UgewogICAg ICAgICpfX3Jlc3VsdDIgPSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0MjsKICAgICAgfQog ICAgY29weShfX2J1ZmZlciwgX19yZXN1bHQyLCBfX3Jlc3VsdDEpOwogICAgcmV0dXJuIF9fcmVz dWx0MTsKICB9CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGUgPSBfX2ZpcnN0Owog ICAgYWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgIHJldHVybiByb3RhdGUoX19zdGFi bGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmlyc3Qs IF9fbWlkZGxlLCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLyAyLCBf X2J1ZmZlciwgX19idWZmZXJfc2l6ZSksCiAgICAgICAgICAgICAgICAgICAgX19taWRkbGUsCiAg ICAgICAgICAgICAgICAgICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKAogICAgICAgICAg ICAgICAgICAgICAgICAgIF9fbWlkZGxlLCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpKTsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9QcmVkaWNhdGUsIGNs YXNzIF9UcCwgY2xhc3MgX0Rpc3RhbmNlPgppbmxpbmUgX0ZvcndhcmRJdGVyCl9fc3RhYmxlX3Bh cnRpdGlvbl9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsIF9UcCosIF9EaXN0YW5jZSop CnsKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9yd2FyZEl0ZXIsIF9UcD4gX19idWYoX19maXJzdCwg X19sYXN0KTsKICBpZiAoX19idWYuc2l6ZSgpID4gMCkKICAgIHJldHVybiBfX3N0YWJsZV9wYXJ0 aXRpb25fYWRhcHRpdmUoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZShfX2J1Zi5yZXF1ZXN0ZWRfc2l6ZSgpKSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19idWYuYmVnaW4oKSwgX19i dWYuc2l6ZSgpKTsKICBlbHNlCiAgICByZXR1cm4gX19pbnBsYWNlX3N0YWJsZV9wYXJ0aXRpb24o X19maXJzdCwgX19sYXN0LCBfX3ByZWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIF9Gb3J3YXJkSXRlciBz dGFibGVfcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gX19maXJzdDsK ICBlbHNlCiAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2F1eChfX2ZpcnN0LCBfX2xhc3Qs IF9fcHJlZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShf X2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZGlzdGFuY2VfdHlw ZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3Mg X1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vz c0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9UcCBfX3Bpdm90KQp7CiAgd2hpbGUgKHRydWUpIHsKICAgIHdoaWxlICgqX19maXJz dCA8IF9fcGl2b3QpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9f cGl2b3QgPCAqX19sYXN0KQogICAgICAtLV9fbGFzdDsKICAgIGlmICghKF9fZmlyc3QgPCBfX2xh c3QpKQogICAgICByZXR1cm4gX19maXJzdDsKICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3Qp OwogICAgKytfX2ZpcnN0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVy LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgpfUmFuZG9tQWNjZXNzSXRlciBfX3VuZ3VhcmRl ZF9wYXJ0aXRpb24oX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCBfX3Bpdm90LCBfQ29tcGFyZSBfX2Nv bXApCnsKICB3aGlsZSAodHJ1ZSkgewogICAgd2hpbGUgKF9fY29tcCgqX19maXJzdCwgX19waXZv dCkpCiAgICAgICsrX19maXJzdDsKICAgIC0tX19sYXN0OwogICAgd2hpbGUgKF9fY29tcChfX3Bp dm90LCAqX19sYXN0KSkKICAgICAgLS1fX2xhc3Q7CiAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0 KSkKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICBpdGVyX3N3YXAoX19maXJzdCwgX19sYXN0KTsK ICAgICsrX19maXJzdDsKICB9Cn0KCmNvbnN0IGludCBfX3N0bF90aHJlc2hvbGQgPSAxNjsKCgoK dGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX191bmd1 YXJkZWRfbGluZWFyX2luc2VydChfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9UcCBfX3ZhbCkK ewogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbmV4dCA9IF9fbGFzdDsKICAtLV9fbmV4dDsKICB3aGls ZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9fbGFzdCA9 IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZT4Kdm9p ZCBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw IF9fdmFsLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7 CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogIC0tX19uZXh0OwogIHdoaWxl IChfX2NvbXAoX192YWwsICpfX25leHQpKSB7CiAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAgIF9f bGFzdCA9IF9fbmV4dDsKICAgIC0tX19uZXh0OwogIH0KICAqX19sYXN0ID0gX192YWw7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgdm9pZCBf X2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKikKewogIF9UcCBfX3Zh bCA9ICpfX2xhc3Q7CiAgaWYgKF9fdmFsIDwgKl9fZmlyc3QpIHsKICAgIGNvcHlfYmFja3dhcmQo X19maXJzdCwgX19sYXN0LCBfX2xhc3QgKyAxKTsKICAgICpfX2ZpcnN0ID0gX192YWw7CiAgfQog IGVsc2UKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19sYXN0LCBfX3ZhbCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFy ZT4KaW5saW5lIHZvaWQgX19saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsIF9U cCosIF9Db21wYXJlIF9fY29tcCkKewogIF9UcCBfX3ZhbCA9ICpfX2xhc3Q7CiAgaWYgKF9fY29t cChfX3ZhbCwgKl9fZmlyc3QpKSB7CiAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbGFzdCwg X19sYXN0ICsgMSk7CiAgICAqX19maXJzdCA9IF9fdmFsOwogIH0KICBlbHNlCiAgICBfX3VuZ3Vh cmRlZF9saW5lYXJfaW5zZXJ0KF9fbGFzdCwgX192YWwsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nl c3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJz dCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3Qs IF9faSwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21B Y2Nlc3NJdGVyLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2luc2VydGlvbl9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9Db21wYXJlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0 dXJuOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdCArIDE7IF9faSAhPSBf X2xhc3Q7ICsrX19pKQogICAgX19saW5lYXJfaW5zZXJ0KF9fZmlyc3QsIF9faSwgX192YWx1ZV90 eXBlKF9fZmlyc3QpLCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0 ZXIsIGNsYXNzIF9UcD4Kdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydF9hdXgoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7CiAgZm9yIChfUmFuZG9tQWNjZXNzSXRl ciBfX2kgPSBfX2ZpcnN0OyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgIF9fdW5ndWFyZGVkX2xp bmVhcl9pbnNlcnQoX19pLCBfVHAoKl9faSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXI+CmlubGluZSB2b2lkIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21B Y2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19sYXN0KSB7CiAgX191bmd1YXJkZWRfaW5zZXJ0aW9uX3NvcnRfYXV4KF9f Zmlyc3QsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fdW5n dWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9UcCosIF9Db21wYXJlIF9fY29t cCkKewogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFz dDsgKytfX2kpCiAgICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9faSwgX1RwKCpfX2kpLCBf X2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21w YXJlPgppbmxpbmUgdm9pZCBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKewogIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0X2F1eChf X2ZpcnN0LCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyPgp2b2lkIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ewogIGlmIChfX2xhc3QgLSBfX2ZpcnN0ID4gX19zdGxfdGhyZXNob2xkKSB7CiAgICBfX2luc2Vy dGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQpOwogICAgX191bmd1 YXJkZWRfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19sYXN0KTsK ICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fZmlu YWxfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21w KQp7CiAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBfX3N0bF90aHJlc2hvbGQpIHsKICAgIF9faW5z ZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9fc3RsX3RocmVzaG9sZCwgX19jb21wKTsK ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmlyc3QgKyBfX3N0bF90aHJlc2hvbGQs IF9fbGFzdCwgX19jb21wKTsKICB9CiAgZWxzZQogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0 LCBfX2xhc3QsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfU2l6ZT4KaW5saW5lIF9TaXpl IF9fbGcoX1NpemUgX19uKQp7CiAgX1NpemUgX19rOwogIGZvciAoX19rID0gMDsgX19uICE9IDE7 IF9fbiA+Pj0gMSkgKytfX2s7CiAgcmV0dXJuIF9fazsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5k b21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9TaXplPgp2b2lkIF9faW50cm9zb3J0X2xv b3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwKICAgICAgICAgICAgICAgICAgICAgIF9TaXplIF9f ZGVwdGhfbGltaXQpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9fc3RsX3RocmVzaG9s ZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0aWFsX3NvcnQoX19m aXJzdCwgX19sYXN0LCBfX2xhc3QpOwogICAgICByZXR1cm47CiAgICB9CiAgICAtLV9fZGVwdGhf bGltaXQ7CiAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2N1dCA9CiAgICAgIF9fdW5ndWFyZGVkX3Bh cnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAo X19tZWRpYW4oKl9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICBfX2ludHJvc29ydF9s b29wKF9fY3V0LCBfX2xhc3QsIChfVHAqKSAwLCBfX2RlcHRoX2xpbWl0KTsKICAgIF9fbGFzdCA9 IF9fY3V0OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBf VHAsIGNsYXNzIF9TaXplLCBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX2ludHJvc29ydF9sb29wKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNj ZXNzSXRlciBfX2xhc3QsIF9UcCosCiAgICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRo X2xpbWl0LCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+IF9f c3RsX3RocmVzaG9sZCkgewogICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICBwYXJ0 aWFsX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIHJldHVybjsK ICAgIH0KICAgIC0tX19kZXB0aF9saW1pdDsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0K ICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiks CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwg X19jb21wKSksCiAgICAgICBfX2NvbXApOwogICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19s YXN0LCAoX1RwKikgMCwgX19kZXB0aF9saW1pdCwgX19jb21wKTsKICAgIF9fbGFzdCA9IF9fY3V0 OwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgdm9pZCBz b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkK ewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJz dCAhPSBfX2xhc3QpIHsKICAgIF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAg ICAgIF9fbGcoX19sYXN0IC0gX19maXJzdCkgKiAyKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3Nv cnQoX19maXJzdCwgX19sYXN0KTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNz SXRlciwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSB2b2lkIHNvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CiAgaWYgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX2ludHJvc29ydF9sb29wKF9fZmlyc3Qs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAg ICAgICAgICAgICAgICAgICBfX2xnKF9fbGFzdCAtIF9fZmlyc3QpICogMiwKICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgIF9fZmluYWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19s YXN0LCBfX2NvbXApOwogIH0KfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+ CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKewogIGlm IChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwg X19sYXN0KTsKICAgIHJldHVybjsKICB9CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBf X2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpIC8gMjsKICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQo X19maXJzdCwgX19taWRkbGUpOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19s YXN0KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICBfX21pZGRsZSAtIF9fZmlyc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFu ZG9tQWNjZXNzSXRlciwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19pbnBsYWNlX3N0YWJsZV9zb3J0 KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGFzdCAt IF9fZmlyc3QgPCAxNSkgewogICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9f Y29tcCk7CiAgICByZXR1cm47CiAgfQogIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19m aXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9f Zmlyc3QsIF9fbWlkZGxlLCBfX2NvbXApOwogIF9faW5wbGFjZV9zdGFibGVfc29ydChfX21pZGRs ZSwgX19sYXN0LCBfX2NvbXApOwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19maXJzdCwgX19t aWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGFzdCAtIF9fbWlkZGxlLAogICAgICAgICAg ICAgICAgICAgICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJ dGVyMSwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNl Pgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3QsCiAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9fcmVzdWx0LCBfRGlzdGFuY2UgX19zdGVw X3NpemUpCnsKICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsKCiAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX190d29fc3RlcCkgewogICAgX19yZXN1bHQgPSBtZXJn ZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIF9f Zmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0ZXAsCiAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdWx0KTsKICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CgogIF9fc3Rl cF9zaXplID0gbWluKF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwgX19zdGVwX3NpemUpOwog IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fc3RlcF9z aXplLCBfX2xhc3QsCiAgICAgICAgX19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRv bUFjY2Vzc0l0ZXIxLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcjIsCiAgICAgICAgICBjbGFzcyBf RGlzdGFuY2UsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF9sb29wKF9SYW5kb21B Y2Nlc3NJdGVyMSBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIyIF9f cmVzdWx0LCBfRGlzdGFuY2UgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQp7CiAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7 CgogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgIF9fcmVzdWx0 ID0gbWVyZ2UoX19maXJzdCwgX19maXJzdCArIF9fc3RlcF9zaXplLAogICAgICAgICAgICAgICAg ICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAogICAgICAg ICAgICAgICAgICAgICBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAg IF9fZmlyc3QgKz0gX190d29fc3RlcDsKICB9CiAgX19zdGVwX3NpemUgPSBtaW4oX0Rpc3RhbmNl KF9fbGFzdCAtIF9fZmlyc3QpLCBfX3N0ZXBfc2l6ZSk7CgogIG1lcmdlKF9fZmlyc3QsIF9fZmly c3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwK ICAgICAgICBfX3Jlc3VsdCwKICAgICAgICBfX2NvbXApOwp9Cgpjb25zdCBpbnQgX19zdGxfY2h1 bmtfc2l6ZSA9IDc7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9E aXN0YW5jZT4Kdm9pZCBfX2NodW5rX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xh c3QsIF9EaXN0YW5jZSBfX2NodW5rX3NpemUpCnsKICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+ PSBfX2NodW5rX3NpemUpIHsKICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCAr IF9fY2h1bmtfc2l6ZSk7CiAgICBfX2ZpcnN0ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFj Y2Vzc0l0ZXIsIGNsYXNzIF9EaXN0YW5jZSwgY2xhc3MgX0NvbXBhcmU+CnZvaWQgX19jaHVua19p bnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBhcmUgX19jb21wKQp7CiAgd2hp bGUgKF9fbGFzdCAtIF9fZmlyc3QgPj0gX19jaHVua19zaXplKSB7CiAgICBfX2luc2VydGlvbl9z b3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUsIF9fY29tcCk7CiAgICBfX2ZpcnN0 ICs9IF9fY2h1bmtfc2l6ZTsKICB9CiAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3Qs IF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1Bv aW50ZXIsIGNsYXNzIF9EaXN0YW5jZT4Kdm9pZCBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUG9p bnRlciBfX2J1ZmZlciwgX0Rpc3RhbmNlKikKewogIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAt IF9fZmlyc3Q7CiAgX1BvaW50ZXIgX19idWZmZXJfbGFzdCA9IF9fYnVmZmVyICsgX19sZW47Cgog IF9EaXN0YW5jZSBfX3N0ZXBfc2l6ZSA9IF9fc3RsX2NodW5rX3NpemU7CiAgX19jaHVua19pbnNl cnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgd2hpbGUgKF9fc3Rl cF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmlyc3QsIF9fbGFzdCwg X19idWZmZXIsIF9fc3RlcF9zaXplKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICBfX21lcmdl X3NvcnRfbG9vcChfX2J1ZmZlciwgX19idWZmZXJfbGFzdCwgX19maXJzdCwgX19zdGVwX3NpemUp OwogICAgX19zdGVwX3NpemUgKj0gMjsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1BvaW50ZXIsIGNsYXNzIF9EaXN0YW5jZSwKICAgICAgICAgIGNsYXNz IF9Db21wYXJlPgp2b2lkIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfRGlzdGFuY2UqLCBfQ29tcGFyZSBfX2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4gPSBfX2xh c3QgLSBfX2ZpcnN0OwogIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVu OwoKICBfRGlzdGFuY2UgX19zdGVwX3NpemUgPSBfX3N0bF9jaHVua19zaXplOwogIF9fY2h1bmtf aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKCiAg d2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fZmly c3QsIF9fbGFzdCwgX19idWZmZXIsIF9fc3RlcF9zaXplLCBfX2NvbXApOwogICAgX19zdGVwX3Np emUgKj0gMjsKICAgIF9fbWVyZ2Vfc29ydF9sb29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBf X2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21wKTsKICAgIF9fc3RlcF9zaXplICo9IDI7CiAgfQp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFz cyBfRGlzdGFuY2U+CnZvaWQgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIg X19sYXN0LCBfUG9pbnRlciBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2J1ZmZlcl9zaXplKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9f Zmlyc3QgKyAxKSAvIDI7CiAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsg X19sZW47CiAgaWYgKF9fbGVuID4gX19idWZmZXJfc2l6ZSkgewogICAgX19zdGFibGVfc29ydF9h ZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAg X19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZm ZXJfc2l6ZSk7CiAgfQogIGVsc2UgewogICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmly c3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgKF9EaXN0YW5jZSopMCk7CiAgICBfX21lcmdlX3NvcnRf d2l0aF9idWZmZXIoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIChfRGlzdGFuY2UqKTApOwog IH0KICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9EaXN0YW5j ZShfX21pZGRsZSAtIF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlKF9fbGFz dCAtIF9fbWlkZGxlKSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Qb2ludGVyLCBjbGFzcyBfRGlzdGFuY2UsCiAg ICAgICAgICBjbGFzcyBfQ29tcGFyZT4Kdm9pZCBfX3N0YWJsZV9zb3J0X2FkYXB0aXZlKF9SYW5k b21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX2xhc3QsIF9Qb2ludGVyIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUsIF9Db21wYXJlIF9fY29tcCkKewogIF9E aXN0YW5jZSBfX2xlbiA9IChfX2xhc3QgLSBfX2ZpcnN0ICsgMSkgLyAyOwogIF9SYW5kb21BY2Nl c3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogIGlmIChfX2xlbiA+IF9fYnVmZmVy X3NpemUpIHsKICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyLCBfX2J1ZmZlcl9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp OwogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwg X19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAg ZWxzZSB7CiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9f YnVmZmVyLCAoX0Rpc3RhbmNlKikwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19j b21wKTsKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1 ZmZlciwgKF9EaXN0YW5jZSopMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgfQogIF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0Rp c3RhbmNlKF9fbWlkZGxlIC0gX19maXJzdCksCiAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo X19sYXN0IC0gX19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAg ICAgICAgIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xh c3MgX1RwLCBjbGFzcyBfRGlzdGFuY2U+CmlubGluZSB2b2lkIF9fc3RhYmxlX3NvcnRfYXV4KF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1RwKiwgX0Rpc3RhbmNlKikKewogIF9UZW1wb3Jhcnlf YnVmZmVyPF9SYW5kb21BY2Nlc3NJdGVyLCBfVHA+IGJ1ZihfX2ZpcnN0LCBfX2xhc3QpOwogIGlm IChidWYuYmVnaW4oKSA9PSAwKQogICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9f bGFzdCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3Qs IGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoYnVmLnNp emUoKSkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9UcCwg Y2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgX19zdGFibGVfc29y dF9hdXgoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKICBfVGVtcG9yYXJ5X2J1 ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1RwPiBidWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAo YnVmLmJlZ2luKCkgPT0gMCkKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX2xh c3QsIF9fY29tcCk7CiAgZWxzZQogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfX2ZpcnN0LCBf X2xhc3QsIGJ1Zi5iZWdpbigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2Uo YnVmLnNpemUoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5j ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgc3RhYmxlX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0 LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCgogIF9fc3RhYmxlX3NvcnRfYXV4KF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCksCiAgICAgICAgICAgICAgICAgICAgX19kaXN0 YW5jZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9fY29tcCk7Cn0KCgoKdGVt cGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQgX19wYXJ0aWFs X3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRk bGUsCiAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfVHAqKQp7 CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVy IF9faSA9IF9fbWlkZGxlOyBfX2kgPCBfX2xhc3Q7ICsrX19pKQogICAgaWYgKCpfX2kgPCAqX19m aXJzdCkKICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSks CiAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKICBzb3J0X2hlYXAo X19maXJzdCwgX19taWRkbGUpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+ CmlubGluZSB2b2lkIHBhcnRpYWxfc29ydChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgX19wYXJ0aWFsX3NvcnQoX19maXJzdCwg X19taWRkbGUsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgp2b2lkIF9f cGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg X1RwKiwgX0NvbXBhcmUgX19jb21wKQp7CiAgbWFrZV9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlLCBf X2NvbXApOwogIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9f bGFzdDsgKytfX2kpCiAgICBpZiAoX19jb21wKCpfX2ksICpfX2ZpcnN0KSkKICAgICAgX19wb3Bf aGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVHAoKl9faSksIF9fY29tcCwKICAgICAgICAg ICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwogIHNvcnRfaGVhcChfX2ZpcnN0LCBf X21pZGRsZSwgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBj bGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQgcGFydGlhbF9zb3J0KF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwg X0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgoKICBfX3BhcnRpYWxfc29ydChfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX3ZhbHVl X3R5cGUoX19maXJzdCksIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBj bGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLAogICAgICAgICAgY2xhc3Mg X1RwPgpfUmFuZG9tQWNjZXNzSXRlciBfX3BhcnRpYWxfc29ydF9jb3B5KF9JbnB1dEl0ZXIgX19m aXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNz SXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9EaXN0YW5jZSosIF9UcCopCnsKICBpZiAoX19yZXN1bHRfZmlyc3Qg PT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVzdWx0X2xhc3Q7CiAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19yZXN1bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgd2hpbGUoX19maXJzdCAh PSBfX2xhc3QgJiYgX19yZXN1bHRfcmVhbF9sYXN0ICE9IF9fcmVzdWx0X2xhc3QpIHsKICAgICpf X3Jlc3VsdF9yZWFsX2xhc3QgPSAqX19maXJzdDsKICAgICsrX19yZXN1bHRfcmVhbF9sYXN0Owog ICAgKytfX2ZpcnN0OwogIH0KICBtYWtlX2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X3Jl YWxfbGFzdCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpZiAoKl9fZmlyc3Qg PCAqX19yZXN1bHRfZmlyc3QpCiAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9E aXN0YW5jZSgwKSwKICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19yZXN1bHRfcmVhbF9s YXN0IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgIF9UcCgqX19maXJzdCkp OwogICAgKytfX2ZpcnN0OwogIH0KICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0 X3JlYWxfbGFzdCk7CiAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKfQoKdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyPgppbmxpbmUgX1JhbmRvbUFj Y2Vzc0l0ZXIKcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmly c3QsCiAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIHJldHVybiBfX3BhcnRpYWxf c29ydF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0X2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fcmVzdWx0X2Zp cnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ZhbHVlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlciwgY2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIs IGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfVHA+Cl9S YW5kb21BY2Nlc3NJdGVyIF9fcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wLCBfRGlzdGFuY2UqLCBfVHAqKQp7 CiAgaWYgKF9fcmVzdWx0X2ZpcnN0ID09IF9fcmVzdWx0X2xhc3QpIHJldHVybiBfX3Jlc3VsdF9s YXN0OwogIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9fcmVzdWx0X2Zp cnN0OwogIHdoaWxlKF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBf X3Jlc3VsdF9sYXN0KSB7CiAgICAqX19yZXN1bHRfcmVhbF9sYXN0ID0gKl9fZmlyc3Q7CiAgICAr K19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICsrX19maXJzdDsKICB9CiAgbWFrZV9oZWFwKF9fcmVz dWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFsX2xhc3QsIF9fY29tcCk7CiAgd2hpbGUgKF9fZmlyc3Qg IT0gX19sYXN0KSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAqX19yZXN1bHRfZmlyc3QpKQog ICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfRGlzdGFuY2UoMCksCiAgICAgICAg ICAgICAgICAgICAgX0Rpc3RhbmNlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0 KSwKICAgICAgICAgICAgICAgICAgICBfVHAoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAg IF9fY29tcCk7CiAgICArK19fZmlyc3Q7CiAgfQogIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwg X19yZXN1bHRfcmVhbF9sYXN0LCBfX2NvbXApOwogIHJldHVybiBfX3Jlc3VsdF9yZWFsX2xhc3Q7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyLCBjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwg Y2xhc3MgX0NvbXBhcmU+CmlubGluZSBfUmFuZG9tQWNjZXNzSXRlcgpwYXJ0aWFsX3NvcnRfY29w eShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAg ICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9maXJzdCwKICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoK ICByZXR1cm4gX19wYXJ0aWFsX3NvcnRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0X2Zp cnN0LCBfX3Jlc3VsdF9sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19yZXN1bHRfZmly c3QpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7 Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9SYW5kb21BY2Nlc3NJdGVyLCBjbGFzcyBfVHA+CnZvaWQg X19udGhfZWxlbWVudChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRl ciBfX250aCwKICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw KikKewogIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19jdXQgPQogICAgICBfX3VuZ3VhcmRlZF9wYXJ0aXRpb24oX19maXJzdCwgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBf X2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqKF9f bGFzdCAtIDEpKSkpOwogICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICBfX2ZpcnN0ID0gX19j dXQ7CiAgICBlbHNlCiAgICAgIF9fbGFzdCA9IF9fY3V0OwogIH0KICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlcj4K aW5saW5lIHZvaWQgbnRoX2VsZW1lbnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRv bUFjY2Vzc0l0ZXIgX19udGgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK ICBfX250aF9lbGVtZW50KF9fZmlyc3QsIF9fbnRoLCBfX2xhc3QsIF9fdmFsdWVfdHlwZShfX2Zp cnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX1RwLCBj bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX250aF9lbGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmly c3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbnRoLAogICAgICAgICAgICAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LCBfVHAqLCBfQ29tcGFyZSBfX2NvbXApCnsKICB3aGlsZSAoX19sYXN0 IC0gX19maXJzdCA+IDMpIHsKICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgX191 bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9UcChfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAqKF9fZmlyc3QgKyAoX19sYXN0IC0gX19maXJzdCkvMiksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29tcCk7CiAgICBpZiAoX19jdXQgPD0gX19udGgpCiAgICAgIF9fZmly c3QgPSBfX2N1dDsKICAgIGVsc2UKICAgICAgX19sYXN0ID0gX19jdXQ7CiAgfQogIF9faW5zZXJ0 aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jh bmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBudGhfZWxlbWVudChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX250aCwKICAgICAg ICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv bXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogIF9fbnRo X2VsZW1lbnQoX19maXJzdCwgX19udGgsIF9fbGFzdCwgX192YWx1ZV90eXBlKF9fZmlyc3QpLCBf X2NvbXApOwp9CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNs YXNzIF9EaXN0YW5jZT4KX0ZvcndhcmRJdGVyIF9fbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX192YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0Zv cndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBf X2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwg X19oYWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19t aWRkbGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7 CiAgICB9CiAgICBlbHNlCiAgICAgIF9fbGVuID0gX19oYWxmOwogIH0KICByZXR1cm4gX19maXJz dDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0Zv cndhcmRJdGVyIGxvd2VyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwp CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fbG93ZXJfYm91bmQoX19m aXJzdCwgX19sYXN0LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5 cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX2xvd2VyX2Jv dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9E aXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9f bGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxl OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19t aWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChf X2NvbXAoKl9fbWlkZGxlLCBfX3ZhbCkpIHsKICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAg ICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogICAg ZWxzZQogICAgICBfX2xlbiA9IF9faGFsZjsKICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGlu ZSBfRm9yd2FyZEl0ZXIgbG93ZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3ZhbCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgogIHJldHVybiBfX2xvd2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9f Y29tcCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5j ZT4KX0ZvcndhcmRJdGVyIF9fdXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192 YWwsIF9EaXN0YW5jZSopCnsKICBfRGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmly c3QsIF9fbGFzdCwgX19sZW4pOwogIF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9f bWlkZGxlOwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwog ICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg IGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICBlbHNlIHsK ICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICArK19fZmlyc3Q7CiAgICAgIF9fbGVuID0g X19sZW4gLSBfX2hhbGYgLSAxOwogICAgfQogIH0KICByZXR1cm4gX19maXJzdDsKfQoKdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwPgppbmxpbmUgX0ZvcndhcmRJdGVyIHVw cGVyX2JvdW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9UcCYgX192YWwpCnsKCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgcmV0dXJuIF9fdXBwZXJfYm91bmQoX19maXJzdCwgX19sYXN0 LCBfX3ZhbCwKICAgICAgICAgICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21w YXJlLCBjbGFzcyBfRGlzdGFuY2U+Cl9Gb3J3YXJkSXRlciBfX3VwcGVyX2JvdW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBfVHAmIF9fdmFsLCBfQ29tcGFyZSBfX2NvbXAsIF9EaXN0YW5jZSopCnsKICBf RGlzdGFuY2UgX19sZW4gPSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwog IF9EaXN0YW5jZSBfX2hhbGY7CiAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICB3aGlsZSAoX19s ZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0 OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgIGlmIChfX2NvbXAoX192YWwsICpf X21pZGRsZSkpCiAgICAgIF9fbGVuID0gX19oYWxmOwogICAgZWxzZSB7CiAgICAgIF9fZmlyc3Qg PSBfX21pZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxm IC0gMTsKICAgIH0KICB9CiAgcmV0dXJuIF9fZmlyc3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmlubGluZSBfRm9yd2FyZEl0ZXIg dXBwZXJfYm91bmQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwgX0NvbXBhcmUg X19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIHJldHVy biBfX3VwcGVyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCwKICAgICAgICAg ICAgICAgICAgICAgICBfX2Rpc3RhbmNlX3R5cGUoX19maXJzdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9EaXN0YW5jZT4KcGFpcjxfRm9yd2Fy ZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KX19lcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwg X0ZvcndhcmRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgICAgICBfRGlz dGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVuID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fbGVuKTsKICBfRGlzdGFuY2UgX19oYWxmOwogIF9Gb3J3YXJkSXRlciBfX21pZGRsZSwg X19sZWZ0LCBfX3JpZ2h0OwoKICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICBfX2hhbGYgPSBfX2xl biA+PiAxOwogICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgYWR2YW5jZShfX21pZGRsZSwgX19o YWxmKTsKICAgIGlmICgqX19taWRkbGUgPCBfX3ZhbCkgewogICAgICBfX2ZpcnN0ID0gX19taWRk bGU7CiAgICAgICsrX19maXJzdDsKICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAg ICB9CiAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAgICAgX19sZW4gPSBfX2hhbGY7 CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUs IF9fdmFsKTsKICAgICAgYWR2YW5jZShfX2ZpcnN0LCBfX2xlbik7CiAgICAgIF9fcmlnaHQgPSB1 cHBlcl9ib3VuZCgrK19fbWlkZGxlLCBfX2ZpcnN0LCBfX3ZhbCk7CiAgICAgIHJldHVybiBwYWly PF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgfQogIH0K ICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJz dCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4KaW5saW5lIHBh aXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CmVxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBf X2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAmIF9fdmFsKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgogIHJldHVybiBfX2VxdWFsX3JhbmdlKF9fZmlyc3QsIF9fbGFz dCwgX192YWwsCiAgICAgICAgICAgICAgICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3Qp KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xhc3MgX1RwLCBjbGFzcyBfQ29t cGFyZSwgY2xhc3MgX0Rpc3RhbmNlPgpwYWlyPF9Gb3J3YXJkSXRlciwgX0ZvcndhcmRJdGVyPgpf X2VxdWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBj b25zdCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCwgX0Rpc3RhbmNl KikKewogIF9EaXN0YW5jZSBfX2xlbiA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBf X2xlbik7CiAgX0Rpc3RhbmNlIF9faGFsZjsKICBfRm9yd2FyZEl0ZXIgX19taWRkbGUsIF9fbGVm dCwgX19yaWdodDsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgX19oYWxmID0gX19sZW4gPj4g MTsKICAgIF9fbWlkZGxlID0gX19maXJzdDsKICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7 CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgKytfX2ZpcnN0OwogICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsK ICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgX19sZW4g PSBfX2hhbGY7CiAgICBlbHNlIHsKICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19maXJzdCwg X19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICBhZHZhbmNlKF9fZmlyc3QsIF9fbGVuKTsK ICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRkbGUsIF9fZmlyc3QsIF9fdmFsLCBf X2NvbXApOwogICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19s ZWZ0LCBfX3JpZ2h0KTsKICAgIH0KICB9CiAgcmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9y d2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJ dGVyLCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4KZXF1YWxfcmFuZ2UoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJk SXRlciBfX2xhc3QsIGNvbnN0IF9UcCYgX192YWwsCiAgICAgICAgICAgIF9Db21wYXJlIF9fY29t cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICByZXR1cm4gX19l cXVhbF9yYW5nZShfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsLCBfX2NvbXAsCiAgICAgICAgICAgICAg ICAgICAgICAgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX1RwPgpib29sIGJpbmFyeV9zZWFyY2goX0ZvcndhcmRJdGVyIF9f Zmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAm IF9fdmFsKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogIF9Gb3J3YXJkSXRlciBfX2kg PSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3QsIF9fdmFsKTsKICByZXR1cm4gX19pICE9IF9f bGFzdCAmJiAhKF9fdmFsIDwgKl9faSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIs IGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmU+CmJvb2wgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0 ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgIGNvbnN0 IF9UcCYgX192YWwsCiAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgX0ZvcndhcmRJdGVyIF9faSA9IGxv d2VyX2JvdW5kKF9fZmlyc3QsIF9fbGFzdCwgX192YWwsIF9fY29tcCk7CiAgcmV0dXJuIF9faSAh PSBfX2xhc3QgJiYgIV9fY29tcChfX3ZhbCwgKl9faSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXI+Cl9PdXRwdXRJ dGVyIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAg ICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwK ICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCnsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9f Zmlyc3QyICE9IF9fbGFzdDIpIHsKICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAg ICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxz ZSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0K ICAgICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5 KF9fZmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNs YXNzIF9Db21wYXJlPgpfT3V0cHV0SXRlciBtZXJnZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lu cHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIs IF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVz dWx0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3Qy KSB7CiAgICBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkgewogICAgICAqX19yZXN1 bHQgPSAqX19maXJzdDI7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAg Kl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgfQogICAgKytfX3Jl c3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEs IF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlciwgY2xhc3MgX0Rpc3RhbmNlPgp2b2lkIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX0JpZGly ZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMikKewogIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIg PT0gMCkKICAgIHJldHVybjsKICBpZiAoX19sZW4xICsgX19sZW4yID09IDIpIHsKICAgIGlmICgq X19taWRkbGUgPCAqX19maXJzdCkKICAgICAgaXRlcl9zd2FwKF9fZmlyc3QsIF9fbWlkZGxlKTsK ICAgIHJldHVybjsKICB9CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3RfY3V0ID0gX19maXJz dDsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgX0Rpc3Rh bmNlIF9fbGVuMTEgPSAwOwogIF9EaXN0YW5jZSBfX2xlbjIyID0gMDsKICBpZiAoX19sZW4xID4g X19sZW4yKSB7CiAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgIGFkdmFuY2UoX19maXJzdF9j dXQsIF9fbGVuMTEpOwogICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGVuMjIpOwogIH0KICBlbHNlIHsKICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgYWR2 YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgX19maXJzdF9jdXQgPSB1cHBlcl9ib3Vu ZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCk7CiAgICBkaXN0YW5jZShfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19t aWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsK ICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRk bGUsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjExLCBfX2xlbjIyKTsKICBfX21lcmdl X3dpdGhvdXRfYnVmZmVyKF9fbmV3X21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xhc3QsIF9fbGVu MSAtIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIyKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBj bGFzcyBfQ29tcGFyZT4Kdm9pZCBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEs IF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCnsKICBpZiAoX19sZW4xID09IDAgfHwgX19sZW4yID09IDApCiAgICByZXR1cm47CiAg aWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgKl9f Zmlyc3QpKQogICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwogICAgcmV0dXJuOwog IH0KICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogIF9CaWRpcmVj dGlvbmFsSXRlciBfX3NlY29uZF9jdXQgPSBfX21pZGRsZTsKICBfRGlzdGFuY2UgX19sZW4xMSA9 IDA7CiAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogIGlmIChfX2xlbjEgPiBfX2xlbjIpIHsKICAg IF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7 CiAgICBfX3NlY29uZF9jdXQgPSBsb3dlcl9ib3VuZChfX21pZGRsZSwgX19sYXN0LCAqX19maXJz dF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xl bjIyKTsKICB9CiAgZWxzZSB7CiAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgIGFkdmFuY2Uo X19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgIF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICBkaXN0YW5jZShfX2Zp cnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgfQogIF9CaWRpcmVjdGlvbmFsSXRlciBfX25l d19taWRkbGUKICAgID0gcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0 KTsKICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19t aWRkbGUsIF9fbGVuMTEsIF9fbGVuMjIsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXAp OwogIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9f bGFzdCwgX19sZW4xIC0gX19sZW4xMSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAt IF9fbGVuMjIsIF9fY29tcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIx LCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlPgpf QmlkaXJlY3Rpb25hbEl0ZXIxIF9fcm90YXRlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlcjEg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fbWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2J1ZmZlciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19idWZmZXJf c2l6ZSkKewogIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXJfZW5kOwogIGlmIChfX2xlbjEg PiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9fYnVmZmVyX2VuZCA9 IGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgY29weV9iYWNrd2FyZChfX2Zp cnN0LCBfX21pZGRsZSwgX19sYXN0KTsKICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZl cl9lbmQsIF9fZmlyc3QpOwogIH0KICBlbHNlIGlmIChfX2xlbjEgPD0gX19idWZmZXJfc2l6ZSkg ewogICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwog ICAgY29weShfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICAgIHJldHVybiBjb3B5X2JhY2t3 YXJkKF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCk7CiAgfQogIGVsc2UKICAgIHJldHVy biByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf QmlkaXJlY3Rpb25hbEl0ZXIxLCBjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMz4KX0JpZGlyZWN0aW9uYWxJdGVyMyBfX21lcmdlX2Jh Y2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf X2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9u YWxJdGVyMyBfX3Jlc3VsdCkKewogIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgcmV0dXJu IGNvcHlfYmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICBpZiAoX19maXJz dDIgPT0gX19sYXN0MikKICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QxLCBfX2xhc3Qx LCBfX3Jlc3VsdCk7CiAgLS1fX2xhc3QxOwogIC0tX19sYXN0MjsKICB3aGlsZSAodHJ1ZSkgewog ICAgaWYgKCpfX2xhc3QyIDwgKl9fbGFzdDEpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0 MTsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFj a3dhcmQoX19maXJzdDIsICsrX19sYXN0MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAg ICB9CiAgICBlbHNlIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9f Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEs ICsrX19sYXN0MSwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVyMSwgY2xhc3MgX0JpZGlyZWN0aW9uYWxJdGVy MiwKICAgICAgICAgIGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjMsIGNsYXNzIF9Db21wYXJlPgpf QmlkaXJlY3Rpb25hbEl0ZXIzIF9fbWVyZ2VfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBf X2ZpcnN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9C aWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fZmly c3QxID09IF9fbGFzdDEpCiAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgX19sYXN0 MiwgX19yZXN1bHQpOwogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJuIGNvcHlf YmFja3dhcmQoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAtLV9fbGFzdDE7CiAgLS1f X2xhc3QyOwogIHdoaWxlICh0cnVlKSB7CiAgICBpZiAoX19jb21wKCpfX2xhc3QyLCAqX19sYXN0 MSkpIHsKICAgICAgKi0tX19yZXN1bHQgPSAqX19sYXN0MTsKICAgICAgaWYgKF9fZmlyc3QxID09 IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDIsICsrX19sYXN0 MiwgX19yZXN1bHQpOwogICAgICAtLV9fbGFzdDE7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKi0t X19yZXN1bHQgPSAqX19sYXN0MjsKICAgICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAg ICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsICsrX19sYXN0MSwgX19yZXN1bHQpOwog ICAgICAtLV9fbGFzdDI7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9u YWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyPgp2b2lkIF9fbWVyZ2VfYWRh cHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVu MSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVm ZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKewogIGlmIChfX2xlbjEgPD0gX19sZW4yICYm IF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBj b3B5KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlcik7CiAgICBtZXJnZShfX2J1ZmZlciwgX19i dWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0KTsKICB9CiAgZWxzZSBpZiAoX19s ZW4yIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHko X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIpOwogICAgX19tZXJnZV9iYWNrd2FyZChfX2ZpcnN0 LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICB9CiAgZWxzZSB7 CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGly ZWN0aW9uYWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVu MTEgPSAwOwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVu MikgewogICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1 dCwgX19sZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBf X2xhc3QsICpfX2ZpcnN0X2N1dCk7CiAgICAgIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9j dXQsIF9fbGVuMjIpOwogICAgfQogICAgZWxzZSB7CiAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAy OwogICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgIF9fZmlyc3RfY3V0 ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQpOwogICAgICBk aXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICB9CiAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJz dF9jdXQsIF9fbWlkZGxlLCBfX3NlY29uZF9jdXQsIF9fbGVuMSAtIF9fbGVuMTEsCiAgICAgICAg ICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgIF9f bWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4x MSwKICAgICAgICAgICAgICAgICAgICAgX19sZW4yMiwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUp OwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0 LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICBfX2xlbjIgLSBfX2xlbjIy LCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGly ZWN0aW9uYWxJdGVyLCBjbGFzcyBfRGlzdGFuY2UsIGNsYXNzIF9Qb2ludGVyLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmU+CnZvaWQgX19tZXJnZV9hZGFwdGl2ZShfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRs ZSwKICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgICBfRGlzdGFuY2UgX19sZW4xLCBfRGlzdGFuY2UgX19sZW4yLAogICAg ICAgICAgICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsIF9EaXN0YW5jZSBfX2J1ZmZlcl9z aXplLAogICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CiAgaWYgKF9fbGVu MSA8PSBfX2xlbjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgIF9Qb2ludGVyIF9f YnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyKTsKICAgIG1lcmdl KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbWlkZGxlLCBfX2xhc3QsIF9fZmlyc3QsIF9fY29t cCk7CiAgfQogIGVsc2UgaWYgKF9fbGVuMiA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICBfUG9pbnRl ciBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgIF9f bWVyZ2VfYmFja3dhcmQoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICB9CiAgZWxzZSB7CiAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgX0JpZGlyZWN0aW9u YWxJdGVyIF9fc2Vjb25kX2N1dCA9IF9fbWlkZGxlOwogICAgX0Rpc3RhbmNlIF9fbGVuMTEgPSAw OwogICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgaWYgKF9fbGVuMSA+IF9fbGVuMikgewog ICAgICBfX2xlbjExID0gX19sZW4xIC8gMjsKICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19s ZW4xMSk7CiAgICAgIF9fc2Vjb25kX2N1dCA9IGxvd2VyX2JvdW5kKF9fbWlkZGxlLCBfX2xhc3Qs ICpfX2ZpcnN0X2N1dCwgX19jb21wKTsKICAgICAgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25k X2N1dCwgX19sZW4yMik7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX19sZW4yMiA9IF9fbGVuMiAv IDI7CiAgICAgIGFkdmFuY2UoX19zZWNvbmRfY3V0LCBfX2xlbjIyKTsKICAgICAgX19maXJzdF9j dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w KTsKICAgICAgZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQsIF9fbGVuMTEpOwogICAgfQog ICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9CiAgICAgIF9fcm90YXRlX2FkYXB0 aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0LCBfX2xlbjEgLSBfX2xlbjEx LAogICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6 ZSk7CiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25ld19taWRk bGUsIF9fbGVuMTEsCiAgICAgICAgICAgICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1 ZmZlcl9zaXplLCBfX2NvbXApOwogICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9f c2Vjb25kX2N1dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg ICBfX2xlbjIgLSBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21wKTsKICB9 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9UcCwgY2xhc3Mg X0Rpc3RhbmNlPgppbmxpbmUgdm9pZCBfX2lucGxhY2VfbWVyZ2VfYXV4KF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJl Y3Rpb25hbEl0ZXIgX19sYXN0LCBfVHAqLCBfRGlzdGFuY2UqKQp7CiAgX0Rpc3RhbmNlIF9fbGVu MSA9IDA7CiAgZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUsIF9fbGVuMSk7CiAgX0Rpc3RhbmNl IF9fbGVuMiA9IDA7CiAgZGlzdGFuY2UoX19taWRkbGUsIF9fbGFzdCwgX19sZW4yKTsKCiAgX1Rl bXBvcmFyeV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVHA+IF9fYnVmKF9fZmlyc3QsIF9f bGFzdCk7CiAgaWYgKF9fYnVmLmJlZ2luKCkgPT0gMCkKICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZm ZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogIGVsc2UKICAg IF9fbWVyZ2VfYWRhcHRpdmUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xl bjIsCiAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5jZShfX2J1Zi5z aXplKCkpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX1Rw LAogICAgICAgICAgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBfQ29tcGFyZT4KaW5saW5lIHZvaWQg X19pbnBsYWNlX21lcmdlX2F1eChfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwgX1Rw KiwgX0Rpc3RhbmNlKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBf X2NvbXApCnsKICBfRGlzdGFuY2UgX19sZW4xID0gMDsKICBkaXN0YW5jZShfX2ZpcnN0LCBfX21p ZGRsZSwgX19sZW4xKTsKICBfRGlzdGFuY2UgX19sZW4yID0gMDsKICBkaXN0YW5jZShfX21pZGRs ZSwgX19sYXN0LCBfX2xlbjIpOwoKICBfVGVtcG9yYXJ5X2J1ZmZlcjxfQmlkaXJlY3Rpb25hbEl0 ZXIsIF9UcD4gX19idWYoX19maXJzdCwgX19sYXN0KTsKICBpZiAoX19idWYuYmVnaW4oKSA9PSAw KQogICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBf X2xlbjEsIF9fbGVuMiwgX19jb21wKTsKICBlbHNlCiAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmly c3QsIF9fbWlkZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAg ICBfX2J1Zi5iZWdpbigpLCBfRGlzdGFuY2UoX19idWYuc2l6ZSgpKSwKICAgICAgICAgICAgICAg ICAgICAgX19jb21wKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcj4KaW5s aW5lIHZvaWQgaW5wbGFjZV9tZXJnZShfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbWlk ZGxlIHx8IF9fbWlkZGxlID09IF9fbGFzdCkKICAgIHJldHVybjsKICBfX2lucGxhY2VfbWVyZ2Vf YXV4KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX3Zh bHVlX3R5cGUoX19maXJzdCksIF9fZGlzdGFuY2VfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfQmlkaXJlY3Rpb25hbEl0ZXIsIGNsYXNzIF9Db21wYXJlPgppbmxpbmUgdm9pZCBp bnBsYWNlX21lcmdlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2NvbXApCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3Qg PT0gX19taWRkbGUgfHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgcmV0dXJuOwogIF9faW5wbGFj ZV9tZXJnZV9hdXgoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwgX19kaXN0YW5jZV90eXBlKF9fZmlyc3QpLAogICAg ICAgICAgICAgICAgICAgICAgX19jb21wKTsKfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyPgpib29sIGluY2x1ZGVzKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikK ICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGVs c2UgaWYoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZQog ICAgICArK19fZmlyc3QxLCArK19fZmlyc3QyOwoKICByZXR1cm4gX19maXJzdDIgPT0gX19sYXN0 MjsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xh c3MgX0NvbXBhcmU+CmJvb2wgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0 ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xh c3QyKQogICAgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgIHJldHVybiBm YWxzZTsKICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAgICAgKytf X2ZpcnN0MTsKICAgIGVsc2UKICAgICAgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgcmV0dXJu IF9fZmlyc3QyID09IF9fbGFzdDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwgY2xh c3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyPgpfT3V0cHV0SXRlciBzZXRfdW5pb24o X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0KQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2Zp cnN0MiAhPSBfX2xhc3QyKSB7CiAgICBpZiAoKl9fZmlyc3QxIDwgKl9fZmlyc3QyKSB7CiAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2Ug aWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDI7 CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgKytf X3Jlc3VsdDsKICB9CiAgcmV0dXJuIGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJz dDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyMSwg Y2xhc3MgX0lucHV0SXRlcjIsIGNsYXNzIF9PdXRwdXRJdGVyLAogICAgICAgICAgY2xhc3MgX0Nv bXBhcmU+Cl9PdXRwdXRJdGVyIHNldF91bmlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0 SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3Qy LCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCgogIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9f bGFzdDIpIHsKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpf X3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgIH0KICAgIGVsc2UgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICArK19fZmlyc3QyOwogICAgfQogICAgZWxzZSB7CiAgICAgICpfX3Jlc3VsdCA9 ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICAg ICsrX19yZXN1bHQ7CiAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9f Zmlyc3QxLCBfX2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIgc2V0 X2ludGVyc2VjdGlvbihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0 SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBf X3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUg KF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19m aXJzdDEgPCAqX19maXJzdDIpCiAgICAgICsrX19maXJzdDE7CiAgICBlbHNlIGlmICgqX19maXJz dDIgPCAqX19maXJzdDEpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3QyOwogICAg ICArK19fcmVzdWx0OwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNz IF9JbnB1dEl0ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAg ICAgICBjbGFzcyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2ludGVyc2VjdGlvbihfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19j b21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAo Kl9fZmlyc3QxLCAqX19maXJzdDIpKQogICAgICArK19fZmlyc3QxOwogICAgZWxzZSBpZiAoX19j b21wKCpfX2ZpcnN0MiwgKl9fZmlyc3QxKSkKICAgICAgKytfX2ZpcnN0MjsKICAgIGVsc2Ugewog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19m aXJzdDI7CiAgICAgICsrX19yZXN1bHQ7CiAgICB9CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0 SXRlcj4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxz ZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICArK19fZmlyc3QyOwogICAgZWxzZSB7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko X19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0 ZXIxLCBjbGFzcyBfSW5wdXRJdGVyMiwgY2xhc3MgX091dHB1dEl0ZXIsCiAgICAgICAgICBjbGFz cyBfQ29tcGFyZT4KX091dHB1dEl0ZXIgc2V0X2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1 dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QxLCAqX19m aXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgKytfX2ZpcnN0MTsK ICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpf X2ZpcnN0MSkpCiAgICAgICsrX19maXJzdDI7CiAgICBlbHNlIHsKICAgICAgKytfX2ZpcnN0MTsK ICAgICAgKytfX2ZpcnN0MjsKICAgIH0KICByZXR1cm4gY29weShfX2ZpcnN0MSwgX19sYXN0MSwg X19yZXN1bHQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNzIF9JbnB1dEl0 ZXIyLCBjbGFzcyBfT3V0cHV0SXRlcj4KX091dHB1dEl0ZXIKc2V0X3N5bW1ldHJpY19kaWZmZXJl bmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg ICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKewoKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFz dDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIp IHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICArK19fZmlyc3QxOwogICAgICAr K19fcmVzdWx0OwogICAgfQogICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKSB7CiAg ICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgKytfX2ZpcnN0MjsKICAgICAgKytfX3Jl c3VsdDsKICAgIH0KICAgIGVsc2UgewogICAgICArK19fZmlyc3QxOwogICAgICArK19fZmlyc3Qy OwogICAgfQogIHJldHVybiBjb3B5KF9fZmlyc3QyLCBfX2xhc3QyLCBjb3B5KF9fZmlyc3QxLCBf X2xhc3QxLCBfX3Jlc3VsdCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcjEsIGNsYXNz IF9JbnB1dEl0ZXIyLCBjbGFzcyBfT3V0cHV0SXRlciwKICAgICAgICAgIGNsYXNzIF9Db21wYXJl PgpfT3V0cHV0SXRlcgpzZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJz dDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJ dGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAg ICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBh cmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgd2hp bGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChf X2NvbXAoKl9fZmlyc3QxLCAqX19maXJzdDIpKSB7CiAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0 MTsKICAgICAgKytfX2ZpcnN0MTsKICAgICAgKytfX3Jlc3VsdDsKICAgIH0KICAgIGVsc2UgaWYg KF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkpIHsKICAgICAgKl9fcmVzdWx0ID0gKl9fZmly c3QyOwogICAgICArK19fZmlyc3QyOwogICAgICArK19fcmVzdWx0OwogICAgfQogICAgZWxzZSB7 CiAgICAgICsrX19maXJzdDE7CiAgICAgICsrX19maXJzdDI7CiAgICB9CiAgcmV0dXJuIGNvcHko X19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7Cn0K CgoKCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXI+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVu dChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fZmlyc3Q7CiAgX0Zv cndhcmRJdGVyIF9fcmVzdWx0ID0gX19maXJzdDsKICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFz dCkKICAgIGlmICgqX19yZXN1bHQgPCAqX19maXJzdCkKICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0 OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRlciwgY2xh c3MgX0NvbXBhcmU+Cl9Gb3J3YXJkSXRlciBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIgX19maXJz dCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3Qp IHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgd2hp bGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoX19jb21wKCpfX3Jlc3VsdCwgKl9fZmly c3QpKSBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgcmV0dXJuIF9fcmVzdWx0Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0ZvcndhcmRJdGVyPgpfRm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVy IF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBp ZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybiBfX2ZpcnN0OwogIF9Gb3J3YXJkSXRlciBfX3Jl c3VsdCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICBpZiAoKl9f Zmlyc3QgPCAqX19yZXN1bHQpCiAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICByZXR1cm4gX19y ZXN1bHQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9Db21wYXJlPgpf Rm9yd2FyZEl0ZXIgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJz dDsKICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3Qg IT0gX19sYXN0KQogICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0KSkKICAgICAgX19y ZXN1bHQgPSBfX2ZpcnN0OwogIHJldHVybiBfX3Jlc3VsdDsKfQoKCgoKdGVtcGxhdGUgPGNsYXNz IF9CaWRpcmVjdGlvbmFsSXRlcj4KYm9vbCBuZXh0X3Blcm11dGF0aW9uKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0KQp7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0 dXJuIGZhbHNlOwogIF9CaWRpcmVjdGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICsrX19pOwog IGlmIChfX2kgPT0gX19sYXN0KQogICAgcmV0dXJuIGZhbHNlOwogIF9faSA9IF9fbGFzdDsKICAt LV9faTsKCiAgZm9yKDs7KSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg IC0tX19pOwogICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19qID0gX19sYXN0OwogICAgICB3aGlsZSAoISgqX19pIDwgKi0tX19qKSkKICAgICAgICB7fQog ICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwogICAgICByZXZlcnNlKF9faWksIF9fbGFzdCk7CiAg ICAgIHJldHVybiB0cnVlOwogICAgfQogICAgaWYgKF9faSA9PSBfX2ZpcnN0KSB7CiAgICAgIHJl dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlciwgY2xhc3MgX0NvbXBhcmU+CmJvb2wg bmV4dF9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9u YWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKewoK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICBpZiAoX19maXJzdCA9PSBf X2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmly c3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19p ID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzspIHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBf X2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAoX19jb21wKCpfX2ksICpfX2lpKSkgewogICAg ICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICB3aGlsZSAoIV9fY29tcCgq X19pLCAqLS1fX2opKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChfX2ksIF9faik7CiAgICAg IHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpZiAo X19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBy ZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0JpZGlyZWN0aW9uYWxJ dGVyPgpib29sIHByZXZfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX0Jp ZGlyZWN0aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgKytfX2k7CiAgaWYgKF9faSA9PSBfX2xh c3QpCiAgICByZXR1cm4gZmFsc2U7CiAgX19pID0gX19sYXN0OwogIC0tX19pOwoKICBmb3IoOzsp IHsKICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2lpID0gX19pOwogICAgLS1fX2k7CiAgICBpZiAo Kl9faWkgPCAqX19pKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAg ICAgIHdoaWxlICghKCotLV9faiA8ICpfX2kpKQogICAgICAgIHt9CiAgICAgIGl0ZXJfc3dhcChf X2ksIF9faik7CiAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgcmV0dXJuIHRydWU7 CiAgICB9CiAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgcmV2ZXJzZShfX2ZpcnN0LCBf X2xhc3QpOwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0JpZGlyZWN0aW9uYWxJdGVyLCBjbGFzcyBfQ29tcGFyZT4KYm9vbCBwcmV2X3Blcm11dGF0aW9u KF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQp7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwoKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgIHJldHVy biBmYWxzZTsKICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19pID0gX19maXJzdDsKICArK19faTsKICBp ZiAoX19pID09IF9fbGFzdCkKICAgIHJldHVybiBmYWxzZTsKICBfX2kgPSBfX2xhc3Q7CiAgLS1f X2k7CgogIGZvcig7OykgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAgICAt LV9faTsKICAgIGlmIChfX2NvbXAoKl9faWksICpfX2kpKSB7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgIHdoaWxlICghX19jb21wKCotLV9faiwgKl9faSkpCiAg ICAgICAge30KICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsKICAgICAgcmV2ZXJzZShfX2lpLCBf X2xhc3QpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGlmIChfX2kgPT0gX19maXJzdCkg ewogICAgICByZXZlcnNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAg IH0KICB9Cn0KCgoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9Gb3J3YXJkSXRl cj4KX0lucHV0SXRlciBmaW5kX2ZpcnN0X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0 ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CiAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9y d2FyZEl0ZXIgX19pdGVyID0gX19maXJzdDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikK ICAgICAgaWYgKCpfX2ZpcnN0MSA9PSAqX19pdGVyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsK ICByZXR1cm4gX19sYXN0MTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXIsIGNsYXNzIF9G b3J3YXJkSXRlciwgY2xhc3MgX0JpbmFyeVByZWRpY2F0ZT4KX0lucHV0SXRlciBmaW5kX2ZpcnN0 X29mKF9JbnB1dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgZm9yICggOyBfX2ZpcnN0MSAhPSBf X2xhc3QxOyArK19fZmlyc3QxKQogICAgZm9yIChfRm9yd2FyZEl0ZXIgX19pdGVyID0gX19maXJz dDI7IF9faXRlciAhPSBfX2xhc3QyOyArK19faXRlcikKICAgICAgaWYgKF9fY29tcCgqX19maXJz dDEsICpfX2l0ZXIpKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICByZXR1cm4gX19sYXN0MTsK fQojIDM0MTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfYWxnby5oIiAzCnRlbXBsYXRl IDxjbGFzcyBfRm9yd2FyZEl0ZXIxLCBjbGFzcyBfRm9yd2FyZEl0ZXIyPgpfRm9yd2FyZEl0ZXIx IF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0Zvcndh cmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcsIGZvcndhcmRfaXRlcmF0b3JfdGFnKQp7CiAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIp CiAgICByZXR1cm4gX19sYXN0MTsKICBlbHNlIHsKICAgIF9Gb3J3YXJkSXRlcjEgX19yZXN1bHQg PSBfX2xhc3QxOwogICAgd2hpbGUgKDEpIHsKICAgICAgX0ZvcndhcmRJdGVyMSBfX25ld19yZXN1 bHQKICAgICAgICA9IHNlYXJjaChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIp OwogICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVz dWx0OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAg ICBfX2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAg ICB9CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJ dGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+Cl9Gb3J3YXJkSXRlcjEgX19m aW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9yd2FyZEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3Rh ZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgICAgICAgICAgICBfQmluYXJ5 UHJlZGljYXRlIF9fY29tcCkKewogIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgcmV0dXJu IF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfRm9yd2FyZEl0ZXIxIF9fcmVzdWx0ID0gX19sYXN0MTsK ICAgIHdoaWxlICgxKSB7CiAgICAgIF9Gb3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAg PSBzZWFyY2goX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLCBfX2NvbXApOwog ICAgICBpZiAoX19uZXdfcmVzdWx0ID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgICBlbHNlIHsKICAgICAgICBfX3Jlc3VsdCA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICBf X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICArK19fZmlyc3QxOwogICAgICB9CiAgICB9 CiAgfQp9CgoKdGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRp cmVjdGlvbmFsSXRlcjI+Cl9CaWRpcmVjdGlvbmFsSXRlcjEKX19maW5kX2VuZChfQmlkaXJlY3Rp b25hbEl0ZXIxIF9fZmlyc3QxLCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdDEsCiAgICAgICAg ICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xh c3QyLAogICAgICAgICAgIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnLCBiaWRpcmVjdGlvbmFs X2l0ZXJhdG9yX3RhZykKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rpb25hbEl0 ZXIxPiBfUmV2SXRlcjE7CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRpcmVjdGlvbmFs SXRlcjI+IF9SZXZJdGVyMjsKCiAgX1Jldkl0ZXIxIF9fcmxhc3QxKF9fZmlyc3QxKTsKICBfUmV2 SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogIF9SZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2go X1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9SZXZJdGVyMihfX2xhc3QyKSwgX19ybGFzdDIpOwoKICBpZiAoX19ycmVzdWx0ID09IF9f cmxhc3QxKQogICAgcmV0dXJuIF9fbGFzdDE7CiAgZWxzZSB7CiAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIxIF9fcmVzdWx0ID0gX19ycmVzdWx0LmJhc2UoKTsKICAgIGFkdmFuY2UoX19yZXN1bHQsIC1k aXN0YW5jZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgcmV0dXJuIF9fcmVzdWx0OwogIH0KfQoK dGVtcGxhdGUgPGNsYXNzIF9CaWRpcmVjdGlvbmFsSXRlcjEsIGNsYXNzIF9CaWRpcmVjdGlvbmFs SXRlcjIsCiAgICAgICAgICBjbGFzcyBfQmluYXJ5UHJlZGljYXRlPgpfQmlkaXJlY3Rpb25hbEl0 ZXIxCl9fZmluZF9lbmQoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9u YWxJdGVyMSBfX2xhc3QxLAogICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19maXJzdDIs IF9CaWRpcmVjdGlvbmFsSXRlcjIgX19sYXN0MiwKICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0 ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgX0JpbmFy eVByZWRpY2F0ZSBfX2NvbXApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwoKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8X0JpZGlyZWN0aW9u YWxJdGVyMT4gX1Jldkl0ZXIxOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJlY3Rp b25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogIF9SZXZJdGVyMSBfX3JsYXN0MShfX2ZpcnN0MSk7CiAg X1Jldkl0ZXIyIF9fcmxhc3QyKF9fZmlyc3QyKTsKICBfUmV2SXRlcjEgX19ycmVzdWx0ID0gc2Vh cmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9fcmxhc3QyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb21wKTsKCiAgaWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgIHJl dHVybiBfX2xhc3QxOwogIGVsc2UgewogICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9 IF9fcnJlc3VsdC5iYXNlKCk7CiAgICBhZHZhbmNlKF9fcmVzdWx0LCAtZGlzdGFuY2UoX19maXJz dDIsIF9fbGFzdDIpKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9Cn0KCgoKdGVtcGxhdGUgPGNs YXNzIF9Gb3J3YXJkSXRlcjEsIGNsYXNzIF9Gb3J3YXJkSXRlcjI+CmlubGluZSBfRm9yd2FyZEl0 ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0 MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3Qy KQp7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCgoKICByZXR1cm4gX19maW5k X2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIsCiAgICAgICAgICAgICAg ICAgICAgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MikpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0Zvcndh cmRJdGVyMSwgY2xhc3MgX0ZvcndhcmRJdGVyMiwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlQcmVk aWNhdGU+CmlubGluZSBfRm9yd2FyZEl0ZXIxCmZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEgX19maXJz dDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0 MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29t cCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9fZmlu ZF9lbmQoX19maXJzdDEsIF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAogICAgICAgICAgICAgICAgICAg IF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgIF9fY29t cCk7Cn0KCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXIsIGNsYXNzIF9EaXN0 YW5jZT4KYm9vbCBfX2lzX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX0Rpc3RhbmNl IF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGls ZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fZmlyc3RbX19wYXJl bnRdIDwgX19maXJzdFtfX2NoaWxkXSkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgaWYgKChfX2No aWxkICYgMSkgPT0gMCkKICAgICAgKytfX3BhcmVudDsKICB9CiAgcmV0dXJuIHRydWU7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNjZXNzSXRlciwgY2xhc3MgX0Rpc3RhbmNlLCBjbGFzcyBf U3RyaWN0V2Vha09yZGVyaW5nPgpib29sIF9faXNfaGVhcChfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCwKICAgICAgICAgICAgICAgX0Rpc3RhbmNl IF9fbikKewogIF9EaXN0YW5jZSBfX3BhcmVudCA9IDA7CiAgZm9yIChfRGlzdGFuY2UgX19jaGls ZCA9IDE7IF9fY2hpbGQgPCBfX247ICsrX19jaGlsZCkgewogICAgaWYgKF9fY29tcChfX2ZpcnN0 W19fcGFyZW50XSwgX19maXJzdFtfX2NoaWxkXSkpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGlm ICgoX19jaGlsZCAmIDEpID09IDApCiAgICAgICsrX19wYXJlbnQ7CiAgfQogIHJldHVybiB0cnVl Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JhbmRvbUFjY2Vzc0l0ZXI+CmlubGluZSBib29sIGlzX2hl YXAoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0KQp7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgcmV0dXJuIF9faXNfaGVhcChf X2ZpcnN0LCBfX2xhc3QgLSBfX2ZpcnN0KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfUmFuZG9tQWNj ZXNzSXRlciwgY2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4KaW5saW5lIGJvb2wgaXNfaGVhcChf UmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsKCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CgoKCiAgcmV0dXJuIF9faXNfaGVhcChfX2ZpcnN0LCBfX2Nv bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwp9CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9Gb3J3YXJkSXRl cj4KYm9vbCBpc19zb3J0ZWQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xh c3QpCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBy ZXR1cm4gdHJ1ZTsKCiAgX0ZvcndhcmRJdGVyIF9fbmV4dCA9IF9fZmlyc3Q7CiAgZm9yICgrK19f bmV4dDsgX19uZXh0ICE9IF9fbGFzdDsgX19maXJzdCA9IF9fbmV4dCwgKytfX25leHQpIHsKICAg IGlmICgqX19uZXh0IDwgKl9fZmlyc3QpCiAgICAgIHJldHVybiBmYWxzZTsKICB9CgogIHJldHVy biB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyLCBjbGFzcyBfU3RyaWN0V2Vh a09yZGVyaW5nPgpib29sIGlzX3NvcnRlZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX1N0cmljdFdlYWtPcmRlcmluZyBfX2NvbXApCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCiAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgcmV0dXJu IHRydWU7CgogIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwogIGZvciAoKytfX25leHQ7 IF9fbmV4dCAhPSBfX2xhc3Q7IF9fZmlyc3QgPSBfX25leHQsICsrX19uZXh0KSB7CiAgICBpZiAo X19jb21wKCpfX25leHQsICpfX2ZpcnN0KSkKICAgICAgcmV0dXJuIGZhbHNlOwogIH0KCiAgcmV0 dXJuIHRydWU7Cn0KCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9hbGdvcml0 aG0uaCIgMiAzCiMgNTAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyaW5nLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAxIDMKIyA0 MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKbmFtZXNwYWNl IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBjb25zdCBfQ2hhclQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz46OgogICAgX1JlcDo6X1NfdGVybWluYWwgPSBfQ2hhclQoKTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICBjb25zdCB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgX1JlcDo6X1NfbWF4X3NpemUgPSAoKChucG9zIC0gc2l6ZW9mKF9SZXApKS9zaXplb2YoX0No YXJUKSkgLSAxKSAvIDQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjpucG9zOwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfU19lbXB0eV9yZXBfc3RvcmFnZVsKICAgIChzaXpl b2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihzaXplX3R5cGUpIC0gMSkvc2l6ZW9m KHNpemVfdHlwZSldOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5JdGVyPgog ICAgICBfQ2hhclQqCiAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OgogICAgICBfU19jb25zdHJ1Y3QoX0luSXRlciBfX2JlZywgX0luSXRlciBfX2VuZCwgY29uc3Qg X0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCiAgICAg IHsKICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQgJiYgX19hID09IF9BbGxvYygpKQogICAgICAg ICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgpLl9NX3JlZmNvcHkoKTsKCiAgICAgICAgX0NoYXJUIF9f YnVmWzEwMF07CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IDA7CiAgICAgICAgd2hpbGUgKF9fYmVn ICE9IF9fZW5kICYmIF9faSA8IHNpemVvZihfX2J1ZikgLyBzaXplb2YoX0NoYXJUKSkKICAgICAg ICAgIHsKICAgICAgICAgICAgX19idWZbX19pKytdID0gKl9fYmVnOwogICAgICAgICAgICArK19f YmVnOwogICAgICAgICAgfQogICAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX2ks IF9fYSk7CiAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZkYXRhKCksIF9fYnVm LCBfX2kpOwogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19pOwogICAgICAgIHRyeQogICAgICAg ICAgewoKCgogICAgICAgICAgICBmb3IgKDs7KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIF9DaGFyVCogX19wID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9NX2xlbmd0aDsKICAg ICAgICAgICAgICAgIF9DaGFyVCogX19sYXN0ID0gX19yLT5fTV9yZWZkYXRhKCkgKyBfX3ItPl9N X2NhcGFjaXR5OwogICAgICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICAgICAgICAgICAg ICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19yLT5fTV9sZW5ndGggPSBfX3AgLSBfX3It Pl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgICAgICAgICAgKl9fcCA9IF9SZXA6Ol9TX3Rl cm1pbmFsOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7 CiAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgaWYgKF9fcCA9PSBf X2xhc3QpCiAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAq X19wKysgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAg ICAgICAgfQoKICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IF9fcCAtIF9fci0+X01f cmVmZGF0YSgpOwogICAgICAgICAgICAgICAgX1JlcCogX19hbm90aGVyID0gX1JlcDo6X1NfY3Jl YXRlKF9fbGVuICsgMSwgX19hKTsKICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9f YW5vdGhlci0+X01fcmVmZGF0YSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19yLT5fTV9yZWZkYXRhKCksIF9fbGVuKTsKICAgICAgICAgICAgICAgIF9fci0+X01fZGVzdHJv eShfX2EpOwogICAgICAgICAgICAgICAgX19yID0gX19hbm90aGVyOwogICAgICAgICAgICAgICAg X19yLT5fTV9sZW5ndGggPSBfX2xlbjsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAg ICAgY2F0Y2goLi4uKQogICAgICAgICAgewogICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19h KTsKICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFt ZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAg ICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICAgIF9TX2NvbnN0cnVj dChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAg ICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90 eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFuY2UoX19iZWcsIF9fZW5k KSk7CgogICAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAg ICAgICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCog X19yID0gX1JlcDo6X1NfY3JlYXRlKF9fZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAg IHsgX1NfY29weV9jaGFycyhfX3ItPl9NX3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAg ICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f YSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX19kbmV3OwoKICAgICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1Nf dGVybWluYWw7CiAgICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIF9TX2NvbnN0cnVjdChzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxsb2Mm IF9fYSkKICAgIHsKICAgICAgaWYgKF9fbiA9PSAwICYmIF9fYSA9PSBfQWxsb2MoKSkKICAgICAg ICByZXR1cm4gX1NfZW1wdHlfcmVwKCkuX01fcmVmY29weSgpOwoKCiAgICAgIF9SZXAqIF9fciA9 IF9SZXA6Ol9TX2NyZWF0ZShfX24sIF9fYSk7CiAgICAgIHRyeQogICAgICAgIHsKICAgICAgICAg IGlmIChfX24pCiAgICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oX19yLT5fTV9yZWZkYXRh KCksIF9fbiwgX19jKTsKICAgICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg ICAgX19yLT5fTV9sZW5ndGggPSBfX247CiAgICAgIF9fci0+X01fcmVmZGF0YSgpW19fbl0gPSBf UmVwOjpfU190ZXJtaW5hbDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFz aWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIpCiAgICA6IF9NX2RhdGFwbHVzKF9f c3RyLl9NX3JlcCgpLT5fTV9ncmFiKF9BbGxvYygpLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpLAog ICAgICAgICAgICAgICAgIF9fc3RyLmdldF9hbGxvY2F0b3IoKSkKICAgIHsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5n KGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qoc2l6ZV90 eXBlKCksIF9DaGFyVCgpLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICA6IF9N X2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3N0ci5fTV9jaGVjayhfX3BvcyksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9mb2xkKF9fcG9zLCBfX24pLCBfQWxsb2MoKSks IF9BbGxvYygpKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwg c2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24sIGNvbnN0IF9B bGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3QoX19zdHIuX01fY2hlY2so X19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zdHIuX01fZm9sZChfX3Bv cywgX19uKSwgX19hKSwgX19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3Ms IHNpemVfdHlwZSBfX24sIGNvbnN0IF9BbGxvYyYgX19hKQogICAgOiBfTV9kYXRhcGx1cyhfU19j b25zdHJ1Y3QoX19zLCBfX3MgKyBfX24sIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNfc3RyaW5nKGNv bnN0IF9DaGFyVCogX19zLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1Nf Y29uc3RydWN0KF9fcywgX19zICsgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBfX2EpLCBfX2Ep CiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jLCBjb25zdCBfQWxs b2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fbiwgX19jLCBfX2EpLCBf X2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyPgogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBiYXNpY19zdHJpbmco X0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EpCiAg ICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSksIF9fYSkKICAg IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojphc3NpZ24oY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3JlcCgpICE9IF9fc3RyLl9NX3Jl cCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSB0aGlzLT5nZXRf YWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX19zdHIuX01fcmVwKCktPl9N X2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAgICAgICAgX01fcmVwKCktPl9N X2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgICAg cmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVzdHJveShjb25zdCBfQWxsb2Mm IF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHNpemVvZihfUmVw KSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7CiAgICAgIF9SYXdfYnl0ZXNf YWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHRoaXMpLCBfX3Np emUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDApOwogICAgICBfTV9yZXAoKS0+ X01fc2V0X2xlYWtlZCgpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01fbXV0YXRlKHNpemVfdHlwZSBfX3Bvcywg c2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVuMikKICAgIHsKICAgICAgc2l6ZV90eXBl IF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX25ld19z aXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVuMTsKICAgICAgY29uc3QgX0NoYXJUKiBf X3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4xOwogICAgICBjb25zdCBzaXplX3R5cGUg X19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAtIF9fbGVuMTsKCiAgICAgIGlmIChfTV9y ZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAg ewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9IGdldF9hbGxvY2F0b3IoKTsKICAgICAg ICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplLCBfX2EpOwogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19wb3MpCiAgICAgICAgICAg ICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bv cyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gpCiAgICAgICAgICAgICAgICB0cmFpdHNf dHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9fcG9zICsgX19sZW4yLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9faG93X211Y2gpOwogICAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3ItPl9N X2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2Rh dGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9faG93X211Y2gg JiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7CgogICAgICAgICAgdHJhaXRzX3R5cGU6Om1v dmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9fc3JjLCBfX2hvd19tdWNoKTsKICAgICAg ICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFibGUoKTsKICAgICAgX01fcmVwKCktPl9N X2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2RhdGEoKVtfX25ld19zaXplXSA9IF9SZXA6 Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNpemVfdHlwZSBfX3JlcykKICAgIHsKICAg ICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8fCBfTV9yZXAoKS0+X01faXNfc2hhcmVk KCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVzID4gdGhpcy0+bWF4X3NpemUoKSkKICAg ICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoK ICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUoKSkKICAgICAgICAgICAgX19yZXMgPSB0 aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9y KCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01fcmVwKCktPl9NX2Nsb25lKF9fYSwgX19y ZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsK ICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lk IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnN3YXAoYmFzaWNfc3RyaW5n JiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfbGVha2VkKCkpCiAgICAgICAg X01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAoX19zLl9NX3JlcCgpLT5fTV9p c19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAg ICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9fcy5nZXRfYWxsb2NhdG9yKCkpCiAgICAg ICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9NX2RhdGEoKTsKICAgICAgICAgIF9NX2Rh dGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3MuX01fZGF0YShfX3RtcCk7CiAgICAgICAg fQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIGJhc2ljX3N0cmluZyBfX3RtcDEoX01f aWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxvY2F0b3IoKSk7CiAgICAgICAgICBiYXNp Y19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwgX19zLl9NX2llbmQoKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2FsbG9jYXRvcigpKTsKICAgICAgICAgICp0 aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190bXAxOwogICAgICAgIH0KICAgIH0KIyAz NTkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19zdHJpbmcudGNjIiAzCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19j cmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNvbnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5n X3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNpdHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBf X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAg IHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXpl b2YoX1JlcCk7CgoKICAgICAgdm9pZCogX19wbGFjZSA9IF9SYXdfYnl0ZXNfYWxsb2MoX19hbGxv YykuYWxsb2NhdGUoX19zaXplKTsKICAgICAgX1JlcCAqX19wID0gbmV3IChfX3BsYWNlKSBfUmVw OwogICAgICBfX3AtPl9NX2NhcGFjaXR5ID0gX19jYXBhY2l0eTsKICAgICAgX19wLT5fTV9zZXRf c2hhcmFibGUoKTsKICAgICAgX19wLT5fTV9sZW5ndGggPSAwOwogICAgICByZXR1cm4gX19wOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIF9DaGFyVCoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9SZXA6OgogICAgX01fY2xvbmUoY29uc3QgX0FsbG9jJiBfX2FsbG9jLCBzaXpl X3R5cGUgX19yZXMpCiAgICB7CiAgICAgIF9SZXAqIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfTV9s ZW5ndGggKyBfX3JlcywgX19hbGxvYyk7CiAgICAgIGlmIChfTV9sZW5ndGgpCiAgICAgICAgewog ICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgdHJhaXRzX3R5cGU6OmNvcHkoX19yLT5fTV9yZWZk YXRhKCksIF9NX3JlZmRhdGEoKSwgX01fbGVuZ3RoKTsgfQogICAgICAgICAgY2F0Y2goLi4uKQog ICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYWxsb2MpOwogICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBfX3ItPl9NX2xl bmd0aCA9IF9NX2xlbmd0aDsKICAgICAgcmV0dXJuIF9fci0+X01fcmVmZGF0YSgpOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICBpbmxpbmUgYm9vbAoKCgoKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46Ol9SZXA6OgogICAgX1NfZXhjZXNzX3Nsb3Aoc2l6ZV90IF9fcywgc2l6ZV90IF9f cikKCiAgICB7CiAgICAgIHJldHVybiAyICogKF9fcyA8PSAxNiA/IDE2IDogX19zKSA8IF9fcjsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpyZXNpemUoc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgaWYg KF9fbiA+IG1heF9zaXplKCkpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0 cmluZzo6cmVzaXplIik7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAg ICAgIGlmIChfX3NpemUgPCBfX24pCiAgICAgICAgdGhpcy0+YXBwZW5kKF9fbiAtIF9fc2l6ZSwg X19jKTsKICAgICAgZWxzZSBpZiAoX19uIDwgX19zaXplKQogICAgICAgIHRoaXMtPmVyYXNlKF9f bik7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXI+CiAgICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgICBfTV9yZXBsYWNlKGl0ZXJhdG9yIF9f aTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXIgX19rMSwKICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyIF9fazIsIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgICAgewogICAgICAgIGJhc2ljX3N0 cmluZyBfX3MoX19rMSwgX19rMik7CiAgICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwg X19pMiwgX19zLl9NX2liZWdpbigpLCBfX3MuX01faWVuZCgpKTsKICAgICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwg X0ZvcndhcmRJdGVyIF9fazEsCiAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIsIGZv cndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9f aTIgLSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwog ICAgICAgIHNpemVfdHlwZSBfX2RuZXcgPSBzdGF0aWNfY2FzdDxzaXplX3R5cGU+KGRpc3RhbmNl KF9fazEsIF9fazIpKTsKCiAgICAgICAgaWYgKF9fZG1heCA8PSBfX2RuZXcpCiAgICAgICAgICBf X3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpfTV9yZXBsYWNlIik7CiAgICAgICAg c2l6ZV90eXBlIF9fb2ZmID0gX19pMSAtIF9NX2liZWdpbigpOwogICAgICAgIF9NX211dGF0ZShf X29mZiwgX19kb2xkLCBfX2RuZXcpOwoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1Nf Y29weV9jaGFycyhfTV9kYXRhKCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVy biAqdGhpczsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAg IHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0 cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24y KQogICAgewogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3BvczEpLCBfTV9m b2xkKF9fcG9zMSwgX19uMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2No ZWNrKF9fcG9zMiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19w b3MyLCBfX24yKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRz LF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBh cHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90eXBl IF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXplICsg dGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAg IHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5k KCksIF9NX2llbmQoKSwgX19zdHIuX01faWJlZ2luKCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3RyLl9NX2llbmQoKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9j Pjo6CiAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9z LCBzaXplX3R5cGUgX19uKQogICAgewoKCgogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19z dHIuc2l6ZSgpIC0gX19wb3MsIF9fbikgKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+ IHRoaXMtPmNhcGFjaXR5KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJl dHVybiB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9jaGVjayhf X3BvcyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9f bikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+ JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgYXBwZW5kKGNv bnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uKQogICAgewogICAgICBzaXplX3R5cGUgX19s ZW4gPSBfX24gKyB0aGlzLT5zaXplKCk7CiAgICAgIGlmIChfX2xlbiA+IHRoaXMtPmNhcGFjaXR5 KCkpCiAgICAgICAgdGhpcy0+cmVzZXJ2ZShfX2xlbik7CiAgICAgIHJldHVybiB0aGlzLT5yZXBs YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyArIF9fbik7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULF9UcmFpdHMsX0FsbG9jPjo6CiAgICBhcHBlbmQoc2l6ZV90eXBlIF9fbiwgX0NoYXJU IF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwog ICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUo X19sZW4pOwogICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01faWVuZCgpLCBfTV9pZW5kKCks IF9fbiwgX19jKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMs X0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICBj b25zdCBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPiYgX19yaHMpCiAgICB7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4gX19zdHJpbmdf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19z aXplX3R5cGU7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX1RyYWl0czo6bGVuZ3RoKF9fbGhz KTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19zdHIucmVzZXJ2ZShfX2xlbiAr IF9fcmhzLnNpemUoKSk7CiAgICAgIF9fc3RyLmFwcGVuZChfX2xocywgX19saHMgKyBfX2xlbik7 CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3Ir KF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4m IF9fcmhzKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxf QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3N0cmluZ190eXBlIF9fc3RyOwogICAg ICBfX3NpemVfdHlwZSBfX2xlbiA9IF9fcmhzLnNpemUoKTsKICAgICAgX19zdHIucmVzZXJ2ZShf X2xlbiArIDEpOwogICAgICBfX3N0ci5hcHBlbmQoX19zaXplX3R5cGUoMSksIF9fbGhzKTsKICAg ICAgX19zdHIuYXBwZW5kKF9fcmhzKTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwg aXRlcmF0b3IgX19pMiwgc2l6ZV90eXBlIF9fbjIsIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNp emVfdHlwZSBfX24xID0gX19pMiAtIF9faTE7CiAgICAgIHNpemVfdHlwZSBfX29mZjEgPSBfX2kx IC0gX01faWJlZ2luKCk7CiAgICAgIGlmIChtYXhfc2l6ZSgpIC0gKHRoaXMtPnNpemUoKSAtIF9f bjEpIDw9IF9fbjIpCiAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6 cmVwbGFjZSIpOwogICAgICBfTV9tdXRhdGUgKF9fb2ZmMSwgX19uMSwgX19uMik7CgogICAgICBp ZiAoX19uMikKICAgICAgICB0cmFpdHNfdHlwZTo6YXNzaWduKF9NX2RhdGEoKSArIF9fb2ZmMSwg X19uMiwgX19jKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb3B5KF9DaGFyVCogX19z LCBzaXplX3R5cGUgX19uLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIGlmIChf X3BvcyA+IHRoaXMtPnNpemUoKSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNf c3RyaW5nOjpjb3B5Iik7CgogICAgICBpZiAoX19uID4gdGhpcy0+c2l6ZSgpIC0gX19wb3MpCiAg ICAgICAgX19uID0gdGhpcy0+c2l6ZSgpIC0gX19wb3M7CgogICAgICB0cmFpdHNfdHlwZTo6Y29w eShfX3MsIF9NX2RhdGEoKSArIF9fcG9zLCBfX24pOwoKICAgICAgcmV0dXJuIF9fbjsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19u KSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAg ICBzaXplX3QgX194cG9zID0gX19wb3M7CiAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01f ZGF0YSgpOwogICAgICBmb3IgKDsgX194cG9zICsgX19uIDw9IF9fc2l6ZTsgKytfX3hwb3MpCiAg ICAgICAgaWYgKHRyYWl0c190eXBlOjpjb21wYXJlKF9fZGF0YSArIF9feHBvcywgX19zLCBfX24p ID09IDApCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgZmluZChfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNp emVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdHlwZSBfX3JldCA9IG5w b3M7CiAgICAgIGlmIChfX3BvcyA8IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBf Q2hhclQqIF9fZGF0YSA9IF9NX2RhdGEoKTsKICAgICAgICAgIHNpemVfdHlwZSBfX24gPSBfX3Np emUgLSBfX3BvczsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZp bmQoX19kYXRhICsgX19wb3MsIF9fbiwgX19jKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAg ICAgIF9fcmV0ID0gX19wIC0gX19kYXRhOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBl bmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz46OgogICAgcmZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUo KTsKICAgICAgaWYgKF9fbiA8PSBfX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19wb3MgPSBz dGQ6Om1pbihfX3NpemUgLSBfX24gLF9fcG9zKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19k YXRhID0gX01fZGF0YSgpOwogICAgICAgICAgZG8KICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmICh0cmFpdHNfdHlwZTo6Y29tcGFyZShfX2RhdGEgKyBfX3BvcywgX19zLCBfX24pID09IDAp CiAgICAgICAgICAgICAgICByZXR1cm4gX19wb3M7CiAgICAgICAgICAgIH0KICAgICAgICAgIHdo aWxlIChfX3Bvcy0tID4gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+Ojpz aXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAg cmZpbmQoX0NoYXJUIF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplKQogICAgICAgIHsK ICAgICAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3NpemUgLSAxOwogICAgICAgICAgaWYgKF9feHBv cyA+IF9fcG9zKQogICAgICAgICAgICBfX3hwb3MgPSBfX3BvczsKCiAgICAgICAgICBmb3IgKCsr X194cG9zOyBfX3hwb3MtLSA+IDA7ICkKICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcShf TV9kYXRhKClbX194cG9zXSwgX19jKSkKICAgICAgICAgICAgICByZXR1cm4gX194cG9zOwogICAg ICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfZmlyc3Rfb2YoY29uc3QgX0No YXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29uc3QKICAgIHsKICAg ICAgZm9yICg7IF9fbiAmJiBfX3BvcyA8IHRoaXMtPnNpemUoKTsgKytfX3BvcykKICAgICAgICB7 CiAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcCA9IHRyYWl0c190eXBlOjpmaW5kKF9fcywgX19u LCBfTV9kYXRhKClbX19wb3NdKTsKICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHJldHVy biBfX3BvczsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rf b2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikgY29u c3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYg KF9fc2l6ZSAmJiBfX24pCiAgICAgICAgewogICAgICAgICAgaWYgKC0tX19zaXplID4gX19wb3Mp CiAgICAgICAgICAgIF9fc2l6ZSA9IF9fcG9zOwogICAgICAgICAgZG8KICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19f c2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAg ICAgICAgd2hpbGUgKF9fc2l6ZS0tICE9IDApOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUg X19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf X3BvczsKICAgICAgZm9yICg7IF9fbiAmJiBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9z KQogICAgICAgIGlmICghdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3hw b3NdKSkKICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBmaW5kX2ZpcnN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3MpIGNvbnN0CiAg ICB7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBfX3BvczsKICAgICAgZm9yICg7IF9feHBvcyA8IHRo aXMtPnNpemUoKTsgKytfX3hwb3MpCiAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0 YSgpW19feHBvc10sIF9fYykpCiAgICAgICAgICByZXR1cm4gX194cG9zOwogICAgICByZXR1cm4g bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19z aXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAgICAgICB7CiAg ICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7 CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlw ZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6ZV0pKQogICAgICAgICAgICAgICAgcmV0 dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAg ICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNfc3Ry aW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kX2xhc3Rfbm90X29mKF9DaGFy VCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBp ZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAg ICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01f ZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAgICAgICByZXR1cm4gX19zaXplOwogICAg ICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXplLS0pOwogICAgICAgIH0KICAgICAgcmV0 dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUg X19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBjb25zdAogICAgewogICAgICBzaXplX3R5 cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3Ry LnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29m X3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXpl PSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihf X3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9N X2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAg ICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2lj X3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBf X24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwog ICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zMSA+ IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3Jhbmdl KCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX3JzaXplID0gbWlu KF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihf X29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fcnNp emUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2Rh dGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3Ry LmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBpZiAoIV9fcikKICAgICAgICBfX3IgPSBf X3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu dAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJl KGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0g dGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0 YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fc2l6ZSAt IHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0KCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9j PgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAg Y29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9f cykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAg ICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNp Y19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAgIHNpemVfdHlwZSBfX29zaXplID0gdHJhaXRzX3R5 cGU6Omxlbmd0aChfX3MpOwogICAgICBzaXplX3R5cGUgX19yc2l6ZSA9IG1pbihfX3NpemUgLSBf X3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXpl KTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9z LCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9f b3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19z dHJpbmcgPF9DaGFyVCxfVHJhaXRzLF9BbGxvYz46OgogICAgY29tcGFyZShzaXplX3R5cGUgX19w b3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgc2l6ZV90 eXBlIF9fbjIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXpl KCk7CiAgICAgIGlmIChfX3BvcyA+IF9fc2l6ZSkKICAgICAgICBfX3Rocm93X291dF9vZl9yYW5n ZSgiYmFzaWNfc3RyaW5nOjpjb21wYXJlIik7CgogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IG1p bih0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyksIF9fbjIpOwogICAgICBzaXplX3R5cGUgX19yc2l6 ZSA9IG1pbihfX3NpemUgLSBfX3BvcywgX19uMSk7CiAgICAgIHNpemVfdHlwZSBfX2xlbiA9IG1p bihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9IHRyYWl0c190eXBlOjpjb21wYXJl KF9NX2RhdGEoKSArIF9fcG9zLCBfX3MsIF9fbGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAg X19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAgICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHZvaWQK ICAgIF9TX3N0cmluZ19jb3B5KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fc3RyLAogICAgICAgICAgICAgICAgICAgX0NoYXJUKiBfX2J1ZiwgdHlwZW5hbWUg X0FsbG9jOjpzaXplX3R5cGUgX19idWZzaXopCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X0FsbG9jOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICBzaXplX3R5cGUgX19zdHJzaXplID0g X19zdHIuc2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19ieXRlcyA9IG1pbihfX3N0cnNpemUsIF9f YnVmc2l6IC0gMSk7CiAgICAgIF9UcmFpdHM6OmNvcHkoX19idWYsIF9fc3RyLmRhdGEoKSwgX19i eXRlcyk7CiAgICAgIF9fYnVmW19fYnl0ZXNdID0gX0NoYXJUKCk7CiAgICB9Cn0KIyA1MSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJpbmcuaCIgMiAzCiMgNDMgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jY3R5cGUuaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjYgIi91c3IvaW5j bHVkZS9jdHlwZS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgMjggIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDQwICIv dXNyL2luY2x1ZGUvY3R5cGUuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMg NDEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAyIDMKCgoKCgoKZW51bQp7CiAgX0lTdXBwZXIgPSAo KDApIDwgOCA/ICgoMSA8PCAoMCkpIDw8IDgpIDogKCgxIDw8ICgwKSkgPj4gOCkpLAogIF9JU2xv d2VyID0gKCgxKSA8IDggPyAoKDEgPDwgKDEpKSA8PCA4KSA6ICgoMSA8PCAoMSkpID4+IDgpKSwK ICBfSVNhbHBoYSA9ICgoMikgPCA4ID8gKCgxIDw8ICgyKSkgPDwgOCkgOiAoKDEgPDwgKDIpKSA+ PiA4KSksCiAgX0lTZGlnaXQgPSAoKDMpIDwgOCA/ICgoMSA8PCAoMykpIDw8IDgpIDogKCgxIDw8 ICgzKSkgPj4gOCkpLAogIF9JU3hkaWdpdCA9ICgoNCkgPCA4ID8gKCgxIDw8ICg0KSkgPDwgOCkg OiAoKDEgPDwgKDQpKSA+PiA4KSksCiAgX0lTc3BhY2UgPSAoKDUpIDwgOCA/ICgoMSA8PCAoNSkp IDw8IDgpIDogKCgxIDw8ICg1KSkgPj4gOCkpLAogIF9JU3ByaW50ID0gKCg2KSA8IDggPyAoKDEg PDwgKDYpKSA8PCA4KSA6ICgoMSA8PCAoNikpID4+IDgpKSwKICBfSVNncmFwaCA9ICgoNykgPCA4 ID8gKCgxIDw8ICg3KSkgPDwgOCkgOiAoKDEgPDwgKDcpKSA+PiA4KSksCiAgX0lTYmxhbmsgPSAo KDgpIDwgOCA/ICgoMSA8PCAoOCkpIDw8IDgpIDogKCgxIDw8ICg4KSkgPj4gOCkpLAogIF9JU2Nu dHJsID0gKCg5KSA8IDggPyAoKDEgPDwgKDkpKSA8PCA4KSA6ICgoMSA8PCAoOSkpID4+IDgpKSwK ICBfSVNwdW5jdCA9ICgoMTApIDwgOCA/ICgoMSA8PCAoMTApKSA8PCA4KSA6ICgoMSA8PCAoMTAp KSA+PiA4KSksCiAgX0lTYWxudW0gPSAoKDExKSA8IDggPyAoKDEgPDwgKDExKSkgPDwgOCkgOiAo KDEgPDwgKDExKSkgPj4gOCkpCn07CiMgNzUgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVy biBfX2NvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwpleHRlcm4gX19jb25zdCBf X2ludDMyX3QgKl9fY3R5cGVfdG9sb3dlcjsKZXh0ZXJuIF9fY29uc3QgX19pbnQzMl90ICpfX2N0 eXBlX3RvdXBwZXI7CiMgOTEgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiBpbnQgaXNh bG51bSAoaW50KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2FscGhhIChpbnQpIHRocm93ICgpOwpl eHRlcm4gaW50IGlzY250cmwgKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNkaWdpdCAoaW50 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50 IGlzZ3JhcGggKGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXNwcmludCAoaW50KSB0aHJvdyAo KTsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIHRocm93ICgpOwpleHRlcm4gaW50IGlzc3BhY2Ug KGludCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgaXN1cHBlciAoaW50KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBpc3hkaWdpdCAoaW50KSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzYmxhbmsgKGludCkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHRvbG93ZXIgKGludCBfX2MpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgdG91cHBlciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBpbnQgaXNh c2NpaSAoaW50IF9fYykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgdG9hc2NpaSAoaW50IF9fYykg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgdGhyb3cgKCk7CmV4dGVybiBp bnQgX3RvbG93ZXIgKGludCkgdGhyb3cgKCk7CiMgMjExICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIg MwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDIxMiAiL3Vzci9pbmNsdWRlL2N0 eXBlLmgiIDIgMwojIDIyNCAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGludCBfX2lz YWxudW1fbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzYWxwaGFf bCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50 LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZGlnaXRfbCAoaW50LCBfX2xv Y2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzbG93ZXJfbCAoaW50LCBfX2xvY2FsZV90 KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzZ3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfX2lzcHJpbnRfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBfX2lzcHVuY3RfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJu IGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBf X2lzdXBwZXJfbCAoaW50LCBfX2xvY2FsZV90KSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfX2lzeGRp Z2l0X2wgKGludCwgX19sb2NhbGVfdCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9faXNibGFua19s IChpbnQsIF9fbG9jYWxlX3QpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9fdG9sb3dlcl9sIChp bnQgX19jLCBfX2xvY2FsZV90IF9fbCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCBfX3RvdXBwZXJf bCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIHRocm93ICgpOwojIDI3NyAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDMKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5o IiAyIDMKIyA1NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jY3R5cGUuaCIgMwpuYW1l c3BhY2Ugc3RkCnsKICB1c2luZyA6OmlzYWxudW07CiAgdXNpbmcgOjppc2FscGhhOwogIHVzaW5n IDo6aXNjbnRybDsKICB1c2luZyA6OmlzZGlnaXQ7CiAgdXNpbmcgOjppc2dyYXBoOwogIHVzaW5n IDo6aXNsb3dlcjsKICB1c2luZyA6OmlzcHJpbnQ7CiAgdXNpbmcgOjppc3B1bmN0OwogIHVzaW5n IDo6aXNzcGFjZTsKICB1c2luZyA6OmlzdXBwZXI7CiAgdXNpbmcgOjppc3hkaWdpdDsKICB1c2lu ZyA6OnRvbG93ZXI7CiAgdXNpbmcgOjp0b3VwcGVyOwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKyst djMvYml0cy9sb2NhbGVmd2QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Z1 bmN0ZXhjZXB0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNl cHQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAz CiMgMzUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAyIDMKCm5hbWVz cGFjZSBzdGQKewoKICB2b2lkCiAgX190aHJvd19iYWRfZXhjZXB0aW9uKHZvaWQpOwoKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX2FsbG9jKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2Nhc3Qo dm9pZCk7CgogIHZvaWQKICBfX3Rocm93X2JhZF90eXBlaWQodm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19sb2dpY19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19kb21h aW5fZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfaW52YWxpZF9hcmd1 bWVudChjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19sZW5ndGhfZXJyb3IoY29u c3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfb3V0X29mX3JhbmdlKGNvbnN0IGNoYXIq IF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3J1bnRpbWVfZXJyb3IoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcmFuZ2VfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAog IF9fdGhyb3dfb3ZlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfdW5kZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgoKICB2b2lkCiAgX190aHJvd19p b3NfZmFpbHVyZShjb25zdCBjaGFyKiBfX3MpOwp9CiMgNDUgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVmd2QuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1NiAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL2xvY2FsZWZ3ZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBl bmFtZSBfQWxsb2M+CiAgICBjbGFzcyB2ZWN0b3I7CiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBsb2Nh bGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlz dXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEoX0No YXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5s aW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBjb25z dCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9jYWxl Jik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2dy YXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4K ICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dlcihf Q2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlw ZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29kZWN2 dF9iYXNlOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwg dHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQ7CiAgdGVtcGxhdGU8PiBjbGFzcyBj b2RlY3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD47CgogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2 dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0 X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlciA9 IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBudW1fZ2V0OwogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbnVtX3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+IGNsYXNzIG51bXB1bmN0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4gY2xhc3MgbnVt cHVuY3RfYnluYW1lOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29s bGF0ZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+IGNsYXNzCiAgICBjb2xsYXRlX2J5bmFt ZTsKCgogIGNsYXNzIHRpbWVfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgdGlt ZV9nZXQ7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0X2J5bmFtZTsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4g PgogICAgY2xhc3MgdGltZV9wdXRfYnluYW1lOwoKCiAgY2xhc3MgbW9uZXlfYmFzZTsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJh dG9yPF9DaGFyVD4gPgogICAgY2xhc3MgbW9uZXlfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX091dEl0ZXIgPSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog ICAgY2xhc3MgbW9uZXlfcHV0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50 bCA9IGZhbHNlPgogICAgY2xhc3MgbW9uZXlwdW5jdDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lOwoKCiAg Y2xhc3MgbWVzc2FnZXNfYmFzZTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFz cyBtZXNzYWdlczsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdl c19ieW5hbWU7CgoKICBjbGFzcyBsb2NhbGUKICB7CiAgcHVibGljOgoKICAgIHR5cGVkZWYgdW5z aWduZWQgaW50IGNhdGVnb3J5OwoKCiAgICBjbGFzcyBmYWNldDsKICAgIGNsYXNzIGlkOwogICAg Y2xhc3MgX0ltcGw7CgogICAgZnJpZW5kIGNsYXNzIGZhY2V0OwogICAgZnJpZW5kIGNsYXNzIF9J bXBsOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGNvbnN0IF9G YWNldCYKICAgICAgdXNlX2ZhY2V0KGNvbnN0IGxvY2FsZSYpOwoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgICAgZnJpZW5kIGJvb2wKICAgICAgaGFzX2ZhY2V0KGNvbnN0IGxvY2Fs ZSYpIHRocm93KCk7CgoKCiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbm9uZSA9IDA7CiAgICBz dGF0aWMgY29uc3QgY2F0ZWdvcnkgY3R5cGUgPSAxTCA8PCAwOwogICAgc3RhdGljIGNvbnN0IGNh dGVnb3J5IG51bWVyaWMgPSAxTCA8PCAxOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGNvbGxh dGUgPSAxTCA8PCAyOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IHRpbWUgPSAxTCA8PCAzOwog ICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IG1vbmV0YXJ5ID0gMUwgPDwgNDsKICAgIHN0YXRpYyBj b25zdCBjYXRlZ29yeSBtZXNzYWdlcyA9IDFMIDw8IDU7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdv cnkgYWxsID0gKGNvbGxhdGUgfCBjdHlwZSB8IG1vbmV0YXJ5IHwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIG51bWVyaWMgfCB0aW1lIHwgbWVzc2FnZXMpOwoKCiAg ICBsb2NhbGUoKSB0aHJvdygpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRo cm93KCk7CgogICAgZXhwbGljaXQKICAgIGxvY2FsZShjb25zdCBjaGFyKiBfX3N0ZF9uYW1lKTsK CiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0IGNoYXIqIF9fcywgY2F0ZWdv cnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9fYmFzZSwgY29uc3QgbG9jYWxl JiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4K ICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0ZhY2V0KiBfX2YpOwoKICAgIH5s b2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAgIG9wZXJhdG9yPShjb25zdCBs b2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpOwoKCiAgICBz dHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGxv Y2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7CgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25zdCB0aHJvdyAoKQogICAgeyByZXR1cm4g ISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICAgIGJvb2wKICAgICAg b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9f czEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBf QWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGljIGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0 IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2NhbGUmCiAgICBjbGFzc2ljKCk7CgogIHBy aXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAgIHN0YXRpYyBfSW1wbCogX1NfY2xhc3Np YzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7CgogICAgc3RhdGljIGNvbnN0IHNpemVf dCBfU19udW1fY2F0ZWdvcmllcyA9IDY7CiAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX251bV9m YWNldHMgPSAyNjsKCiAgICBleHBsaWNpdAogICAgbG9jYWxlKF9JbXBsKikgdGhyb3coKTsKCiAg ICBzdGF0aWMgaW5saW5lIHZvaWQKICAgIF9TX2luaXRpYWxpemUoKQogICAgeyBpZiAoIV9TX2Ns YXNzaWMpIGNsYXNzaWMoKTsgfQoKICAgIHN0YXRpYyBjYXRlZ29yeQogICAgX1Nfbm9ybWFsaXpl X2NhdGVnb3J5KGNhdGVnb3J5KTsKCiAgICB2b2lkCiAgICBfTV9jb2FsZXNjZShjb25zdCBsb2Nh bGUmIF9fYmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwogIH07CgoK CiAgY2xhc3MgbG9jYWxlOjpfSW1wbAogIHsKICBwdWJsaWM6CgogICAgdHlwZWRlZiB2ZWN0b3I8 ZmFjZXQqLCBhbGxvY2F0b3I8ZmFjZXQqPiA+IF9fdmVjX2ZhY2V0OwoKCiAgICBmcmllbmQgY2xh c3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTo6ZmFjZXQ7CgogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFj ZXQoY29uc3QgbG9jYWxlJik7CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBm cmllbmQgYm9vbAogICAgICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJikgdGhyb3coKTsKCiAgcHJp dmF0ZToKCiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsKICAgIF9fdmVjX2ZhY2V0KiBfTV9mYWNl dHM7CiAgICBzdHJpbmcgX01fbmFtZXNbX1NfbnVtX2NhdGVnb3JpZXNdOwogICAgX19jX2xvY2Fs ZSBfTV9jX2xvY2FsZTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9j dHlwZVtdOwogICAgc3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX251bWVyaWNb XTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9jb2xsYXRlW107CiAg ICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfdGltZVtdOwogICAgc3RhdGlj IGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21vbmV0YXJ5W107CiAgICBzdGF0aWMgY29u c3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfbWVzc2FnZXNbXTsKICAgIHN0YXRpYyBjb25zdCBs b2NhbGU6OmlkKiBjb25zdCogY29uc3QgX1NfZmFjZXRfY2F0ZWdvcmllc1tdOwoKICAgIGlubGlu ZSB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKQogICAgeyArK19NX3JlZmVyZW5j ZXM7IH0KCiAgICBpbmxpbmUgdm9pZAogICAgX01fcmVtb3ZlX3JlZmVyZW5jZSgpIHRocm93KCkK ICAgIHsKICAgICAgaWYgKF9NX3JlZmVyZW5jZXMtLSA9PSAwKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7IGRlbGV0ZSB0aGlzOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAg ICAgICAgICAgIHsgfQogICAgICAgIH0KICAgIH0KCiAgICBfSW1wbChjb25zdCBfSW1wbCYsIHNp emVfdCk7CiAgICBfSW1wbChzdHJpbmcgX19uYW1lLCBzaXplX3QpOwogICB+X0ltcGwoKSB0aHJv dygpOwoKICAgIGJvb2wKICAgIF9NX2NoZWNrX3NhbWVfbmFtZSgpCiAgICB7CiAgICAgIGJvb2wg X19yZXQgPSB0cnVlOwogICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IF9TX251bV9jYXRlZ29y aWVzIC0gMTsgKytpKQogICAgICAgIF9fcmV0ICY9IF9NX25hbWVzW2ldID09IF9NX25hbWVzW2kg KyAxXTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQogICAgdm9pZAogICAgX01fcmVwbGFjZV9j YXRlZ29yaWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxh Y2VfY2F0ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAg IHZvaWQKICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6Omlk Kik7CgogICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFj ZXQqKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAg ICAgIF9NX2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFj ZXQoJl9GYWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zh Y2V0PgogICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9f ZikKICAgIHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsK ICAgICAgX01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAg Zm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAg ICAgIF9NX2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6 OmZhY2V0CiAgewogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2Nh bGU6Ol9JbXBsOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdAogICAgZmFjZXQoc2l6ZV90IF9f cmVmcyA9IDApIHRocm93KCk7CgogICAgdmlydHVhbAogICAgfmZhY2V0KCkgeyB9OwoKICAgIHN0 YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2FsZSYgX19jbG9jLCBjb25z dCBjaGFyKiBfX3MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9f Y19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICBzaXplX3QgX01fcmVmZXJlbmNlczsK CiAgICB2b2lkCiAgICBfTV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBf TV9yZW1vdmVfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoK ICAgIHZvaWQKICAgIG9wZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9j YWxlOjppZAogIHsKICBwcml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVu ZCBjbGFzcyBsb2NhbGU6Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAg ICBmcmllbmQgY29uc3QgX0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19m YWNldChjb25zdCBsb2NhbGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9p bmRleDsKCgogICAgc3RhdGljIHNpemVfdCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3Bl cmF0b3I9KGNvbnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCgogICAg aWQoKSB7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFj ZXQmCiAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYyk7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9GYWNldD4KICAgIGJvb2wKICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKSB0 aHJvdygpOwp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwoj IDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyAzOCAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2lvc19iYXNlLmgiIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKICBl bnVtIF9Jb3NfRm10ZmxhZ3MgeyBfTV9pb3NfZm10ZmxhZ3NfZW5kID0gMUwgPDwgMTYgfTsKCiAg aW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvciYoX0lvc19GbXRmbGFncyBfX2EsIF9Jb3Nf Rm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3Moc3RhdGljX2Nhc3Q8aW50Pihf X2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwog IG9wZXJhdG9yfChfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1 cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgfCBzdGF0aWNfY2FzdDxpbnQ+ KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3JeKF9Jb3NfRm10Zmxh Z3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRp Y19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9J b3NfRm10ZmxhZ3MKICBvcGVyYXRvcnw9KF9Jb3NfRm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFn cyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZs YWdzCiAgb3BlcmF0b3ImPShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQog IHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9w ZXJhdG9yXj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVy biBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcn4o X0lvc19GbXRmbGFncyBfX2EpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyh+c3RhdGljX2Nhc3Q8 aW50PihfX2EpKTsgfQoKCiAgZW51bSBfSW9zX09wZW5tb2RlIHsgX01faW9zX29wZW5tb2RlX2Vu ZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3ImKF9Jb3Nf T3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfSW9zX09wZW5tb2Rl KHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5s aW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcnwoX0lvc19PcGVubW9kZSBfX2EsIF9Jb3NfT3Bl bm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUoc3RhdGljX2Nhc3Q8aW50PihfX2Ep IHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9w ZXJhdG9yXihfSW9zX09wZW5tb2RlIF9fYSwgX0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4g X0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2RlCiAgb3BlcmF0b3J8PShfSW9zX09wZW5tb2Rl JiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoK ICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJj0oX0lvc19PcGVubW9kZSYgX19hLCBf SW9zX09wZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5l IF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl49KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVu bW9kZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX09w ZW5tb2RlCiAgb3BlcmF0b3J+KF9Jb3NfT3Blbm1vZGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfT3Bl bm1vZGUofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0KCgogIGVudW0gX0lvc19Jb3N0YXRlIHsg X01faW9zX2lvc3RhdGVfZW5kID0gMUwgPDwgMTYgfTsKCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yJihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJu IF9Jb3NfSW9zdGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9f YikpOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnwoX0lvc19Jb3N0YXRlIF9f YSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUoc3RhdGljX2Nhc3Q8 aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxpbmUgX0lvc19Jb3N0 YXRlCiAgb3BlcmF0b3JeKF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyBy ZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSBeIHN0YXRpY19jYXN0PGlu dD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9yfD0oX0lvc19Jb3N0 YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIHwgX19iOyB9 CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciY9KF9Jb3NfSW9zdGF0ZSYgX19hLCBf SW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSAmIF9fYjsgfQoKICBpbmxpbmUg X0lvc19Jb3N0YXRlCiAgb3BlcmF0b3JePShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRl IF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgXiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0 ZQogIG9wZXJhdG9yfihfSW9zX0lvc3RhdGUgX19hKQogIHsgcmV0dXJuIF9Jb3NfSW9zdGF0ZSh+ c3RhdGljX2Nhc3Q8aW50PihfX2EpKTsgfQoKICBlbnVtIF9Jb3NfU2Vla2RpciB7IF9NX2lvc19z ZWVrZGlyX2VuZCA9IDFMIDw8IDE2IH07CgoKICBjbGFzcyBpb3NfYmFzZQogIHsKICBwdWJsaWM6 CgoKICAgIGNsYXNzIGZhaWx1cmUgOiBwdWJsaWMgZXhjZXB0aW9uCiAgICB7CiAgICBwdWJsaWM6 CgoKICAgICAgZXhwbGljaXQKICAgICAgZmFpbHVyZShjb25zdCBzdHJpbmcmIF9fc3RyKSB0aHJv dygpOwoKICAgICAgdmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0 dWFsIGNvbnN0IGNoYXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6 CiAgICAgIGVudW0geyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9i dWZzaXplXTsKCiAgICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7Cgog ICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19ib29sYWxwaGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0g Zm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBoZXggPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBm bXRmbGFncyBpbnRlcm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAg ICBzdGF0aWMgY29uc3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19s ZWZ0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFn czo6X1Nfb2N0KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9f aW9zX2ZsYWdzOjpfU19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZp YyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBzaG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7 CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxh Z3M6Ol9TX3Nob3dwb2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZt dGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyBza2lwd3MgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBj b25zdCBmbXRmbGFncyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYp OwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2Zs YWdzOjpfU191cHBlcmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxk ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25z dCBmbXRmbGFncyBiYXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxk KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3Nf ZmxhZ3M6Ol9TX2Zsb2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRl OwogICAgc3RhdGljIGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6 X1NfYmFkYml0KTsKICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19p b3NfZmxhZ3M6Ol9TX2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0g aW9zdGF0ZShfX2lvc19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0 ZSBnb29kYml0ID0gaW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5t b2RlOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdz OjpfU19hcHApOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9z X2ZsYWdzOjpfU19hdGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5t b2RlKF9faW9zX2ZsYWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0g b3Blbm1vZGUoX19pb3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBv dXQgPSBvcGVubW9kZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVu bW9kZSB0cnVuYyA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVk ZWYgX0lvc19TZWVrZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBz ZWVrZGlyKDApOwogICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAg IHN0YXRpYyBjb25zdCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjE2ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvaW9zX2Jhc2UuaCIgMwogICAgZW51bSBldmVudAogICAgewogICAgICBl cmFzZV9ldmVudCwKICAgICAgaW1idWVfZXZlbnQsCiAgICAgIGNvcHlmbXRfZXZlbnQKICAgIH07 CgogICAgdHlwZWRlZiB2b2lkICgqZXZlbnRfY2FsbGJhY2spIChldmVudCwgaW9zX2Jhc2UmLCBp bnQpOwoKICAgIHZvaWQKICAgIHJlZ2lzdGVyX2NhbGxiYWNrKGV2ZW50X2NhbGxiYWNrIF9fZm4s IGludCBfX2luZGV4KTsKCiAgcHJvdGVjdGVkOgoKICAgIHN0cmVhbXNpemUgX01fcHJlY2lzaW9u OwogICAgc3RyZWFtc2l6ZSBfTV93aWR0aDsKICAgIGZtdGZsYWdzIF9NX2ZsYWdzOwoKCgogICAg c3RydWN0IF9DYWxsYmFja19saXN0CiAgICB7CgogICAgICBfQ2FsbGJhY2tfbGlzdCogX01fbmV4 dDsKICAgICAgaW9zX2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9NX2ZuOwogICAgICBpbnQgX01faW5k ZXg7CiAgICAgIGludCBfTV9yZWZjb3VudDsKCiAgICAgIF9DYWxsYmFja19saXN0KGlvc19iYXNl OjpldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQgX19pbmRleCwKICAgICAgICAgICAgICAgICAgICAg X0NhbGxiYWNrX2xpc3QqIF9fY2IpCiAgICAgIDogX01fbmV4dChfX2NiKSwgX01fZm4oX19mbiks IF9NX2luZGV4KF9faW5kZXgpLCBfTV9yZWZjb3VudCgwKSB7IH0KCiAgICAgIHZvaWQKICAgICAg X01fYWRkX3JlZmVyZW5jZSgpIHsgKytfTV9yZWZjb3VudDsgfQoKICAgICAgaW50CiAgICAgIF9N X3JlbW92ZV9yZWZlcmVuY2UoKSB7IHJldHVybiBfTV9yZWZjb3VudC0tOyB9CiAgICB9OwoKICAg ICBfQ2FsbGJhY2tfbGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2Fs bGJhY2tzKGV2ZW50IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxs YmFja3Modm9pZCk7CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdv cmQ7CiAgICAgIGxvbmcgX01faXdvcmQ7CiAgICB9OwoKICAgIHN0YXRpYyBjb25zdCBpbnQgX1Nf bG9jYWxfd29yZHMgPSA4OwogICAgX1dvcmRzIF9NX3dvcmRfYXJyYXlbX1NfbG9jYWxfd29yZHNd OwogICAgX1dvcmRzIF9NX2R1bW15OwogICAgX1dvcmRzKiBfTV93b3JkczsKICAgIGludCBfTV93 b3JkX2xpbWl0OwoKICAgIF9Xb3JkcyYKICAgIF9NX2dyb3dfd29yZHMoaW50IF9faW5kZXgpOwoK CiAgICBsb2NhbGUgX01faW9zX2xvY2FsZTsKCiAgICB2b2lkCiAgICBfTV9pbml0KCk7CgogIHB1 YmxpYzoKCgoKCgogICAgY2xhc3MgSW5pdAogICAgewogICAgICBmcmllbmQgY2xhc3MgaW9zX2Jh c2U7CiAgICBwdWJsaWM6CiAgICAgIEluaXQoKTsKICAgICAgfkluaXQoKTsKCiAgICAgIHN0YXRp YyB2b2lkCiAgICAgIF9TX2lvc19jcmVhdGUoYm9vbCBfX3N5bmMpOwoKICAgICAgc3RhdGljIHZv aWQKICAgICAgX1NfaW9zX2Rlc3Ryb3koKTsKCiAgICBwcml2YXRlOgogICAgICBzdGF0aWMgaW50 IF9TX2lvc19iYXNlX2luaXQ7CiAgICAgIHN0YXRpYyBib29sIF9TX3N5bmNlZF93aXRoX3N0ZGlv OwogICAgfTsKCgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncygpIGNvbnN0IHsgcmV0dXJu IF9NX2ZsYWdzOyB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBmbGFncyhmbXRmbGFncyBfX2Zt dGZsKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9mbGFn cyA9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgZm10Zmxh Z3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCkKICAgIHsKICAgICAgZm10ZmxhZ3MgX19vbGQg PSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgfD0gX19mbXRmbDsKICAgICAgcmV0dXJuIF9fb2xk OwogICAgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgc2V0ZihmbXRmbGFncyBfX2ZtdGZsLCBm bXRmbGFncyBfX21hc2spCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxhZ3M7CiAg ICAgIF9NX2ZsYWdzICY9IH5fX21hc2s7CiAgICAgIF9NX2ZsYWdzIHw9IChfX2ZtdGZsICYgX19t YXNrKTsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSB2b2lkCiAgICB1bnNl dGYoZm10ZmxhZ3MgX19tYXNrKSB7IF9NX2ZsYWdzICY9IH5fX21hc2s7IH0KCiAgICBpbmxpbmUg c3RyZWFtc2l6ZQogICAgcHJlY2lzaW9uKCkgY29uc3QgeyByZXR1cm4gX01fcHJlY2lzaW9uOyB9 CgogICAgaW5saW5lIHN0cmVhbXNpemUKICAgIHByZWNpc2lvbihzdHJlYW1zaXplIF9fcHJlYykK ICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX29sZCA9IF9NX3ByZWNpc2lvbjsKICAgICAgX01fcHJl Y2lzaW9uID0gX19wcmVjOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIHN0 cmVhbXNpemUKICAgIHdpZHRoKCkgY29uc3QgeyByZXR1cm4gX01fd2lkdGg7IH0KCiAgICBpbmxp bmUgc3RyZWFtc2l6ZQogICAgd2lkdGgoc3RyZWFtc2l6ZSBfX3dpZGUpCiAgICB7CiAgICAgIHN0 cmVhbXNpemUgX19vbGQgPSBfTV93aWR0aDsKICAgICAgX01fd2lkdGggPSBfX3dpZGU7CiAgICAg IHJldHVybiBfX29sZDsKICAgIH0KCiAgICBzdGF0aWMgYm9vbAogICAgc3luY193aXRoX3N0ZGlv KGJvb2wgX19zeW5jID0gdHJ1ZSk7CgoKICAgIGxvY2FsZQogICAgaW1idWUoY29uc3QgbG9jYWxl JiBfX2xvYyk7CgogICAgaW5saW5lIGxvY2FsZQogICAgZ2V0bG9jKCkgY29uc3QgeyByZXR1cm4g X01faW9zX2xvY2FsZTsgfQoKCiAgICBzdGF0aWMgaW50CiAgICB4YWxsb2MoKSB0aHJvdygpOwoK ICAgIGlubGluZSBsb25nJgogICAgaXdvcmQoaW50IF9faXgpCiAgICB7CiAgICAgIF9Xb3JkcyYg X193b3JkID0gKF9faXggPCBfTV93b3JkX2xpbWl0KQogICAgICAgICAgICAgICAgICAgICAgICA/ IF9NX3dvcmRzW19faXhdIDogX01fZ3Jvd193b3JkcyhfX2l4KTsKICAgICAgcmV0dXJuIF9fd29y ZC5fTV9pd29yZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZComCiAgICBwd29yZChpbnQgX19peCkK ICAgIHsKICAgICAgX1dvcmRzJiBfX3dvcmQgPSAoX19peCA8IF9NX3dvcmRfbGltaXQpCiAgICAg ICAgICAgICAgICAgICAgICAgID8gX01fd29yZHNbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgp OwogICAgICByZXR1cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsK CiAgcHJvdGVjdGVkOgogICAgaW9zX2Jhc2UoKTsKCgogIHByaXZhdGU6CiAgICBpb3NfYmFzZShj b25zdCBpb3NfYmFzZSYpOwoKICAgIGlvc19iYXNlJgogICAgb3BlcmF0b3I9KGNvbnN0IGlvc19i YXNlJik7CgogIH07CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgYm9vbGFscGhhKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vYm9vbGFscGhhKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6Ym9vbGFscGhhKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd2Jhc2UoaW9zX2Jh c2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwogICAg cmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3diYXNlKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd2Jhc2UpOwog ICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9pbnQoaW9z X2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsK ICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9pbnQo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9p bnQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzaG93cG9z KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb3Mp OwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3Nob3dwb3Mo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2UudW5zZXRmKGlvc19iYXNlOjpzaG93cG9z KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2tpcHdzKGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAg ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2tpcHdzKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2tpcHdzKTsKICAg IHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdXBwZXJjYXNlKGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAg ICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vdXBwZXJjYXNlKGlv c19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dXBwZXJjYXNl KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgdW5pdGJ1Zihp b3NfYmFzZSYgX19iYXNlKQogIHsKICAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1Zik7 CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VuaXRidWYo aW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6dW5pdGJ1 Zik7CiAgICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaW50ZXJu YWwoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmludGVy bmFsLCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBp bmxpbmUgaW9zX2Jhc2UmCiAgbGVmdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5z ZXRmKGlvc19iYXNlOjpsZWZ0LCBpb3NfYmFzZTo6YWRqdXN0ZmllbGQpOwogICAgcmV0dXJuIF9f YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICByaWdodChpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpyaWdodCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxk KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGRlYyhpb3Nf YmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpkZWMsIGlvc19iYXNl OjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYK ICBoZXgoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6aGV4 LCBpb3NfYmFzZTo6YmFzZWZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgb2N0KGlvc19iYXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9z X2Jhc2U6Om9jdCwgaW9zX2Jhc2U6OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0K CgogIGlubGluZSBpb3NfYmFzZSYKICBmaXhlZChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9f YmFzZS5zZXRmKGlvc19iYXNlOjpmaXhlZCwgaW9zX2Jhc2U6OmZsb2F0ZmllbGQpOwogICAgcmV0 dXJuIF9fYmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBzY2llbnRpZmljKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNjaWVudGlmaWMsIGlvc19i YXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKfQojIDQ1ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvcy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJlYW1idWYuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGlu dXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX3N0cmVhbWJ1Zi5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2lvc2Z3ZC5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1i dWYuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jc3RkaW8uaCIgMSAz CiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVmd2QuaCIgMSAzCiMgNDMgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfc3RyZWFtYnVmLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9pb3NfYmFzZS5oIiAxIDMKIyA0NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9zdHJlYW1idWYuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBfX2NvcHlfc3Ry ZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX2lvcywKICAgICAgICAgICAgICAg ICAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3NiaW4sCiAgICAgICAg ICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYm91dCk7 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFz cyBiYXNpY19zdHJlYW1idWYKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYg Y3R5cGU8Y2hhcl90eXBlPiBfX2N0eXBlX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFt YnVmPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9fc3RyZWFtYnVmX3R5cGU7CgogICAgICBmcmll bmQgY2xhc3MgYmFzaWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQg Y2xhc3MgYmFzaWNfaXN0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5k IGNsYXNzIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVu ZCBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAg ICBmcmllbmQgY2xhc3Mgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBl PjsKCiAgICAgIGZyaWVuZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFz aWNfaW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91 dCk7CgogICAgcHJvdGVjdGVkOgoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2J1ZjsKCgogICAg ICBpbnRfdHlwZSBfTV9idWZfc2l6ZTsKCgogICAgICBpbnRfdHlwZSBfTV9idWZfc2l6ZV9vcHQ7 CgoKCiAgICAgIGJvb2wgX01fYnVmX3VuaWZpZWQ7CgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01f aW5fYmVnOwogICAgICBjaGFyX3R5cGUqIF9NX2luX2N1cjsKICAgICAgY2hhcl90eXBlKiBfTV9p bl9lbmQ7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2JlZzsKICAgICAgY2hhcl90eXBlKiBfTV9v dXRfY3VyOwogICAgICBjaGFyX3R5cGUqIF9NX291dF9lbmQ7CgoKICAgICAgaW9zX2Jhc2U6Om9w ZW5tb2RlIF9NX21vZGU7CgoKICAgICAgbG9jYWxlIF9NX2J1Zl9sb2NhbGU7CgoKICAgICAgYm9v bCBfTV9idWZfbG9jYWxlX2luaXQ7CgoKCgoKCiAgICAgIGludF90eXBlIF9NX3BiYWNrX3NpemU7 CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2s7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfY3Vy X3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAgIGJvb2wgX01f cGJhY2tfaW5pdDsKCgoKCiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfY3JlYXRlKCkKICAgICAg ewogICAgICAgIGlmICghX01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKICAgICAgICAgICAgaW50 X3R5cGUgX19kaXN0ID0gX01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBpbnRfdHlw ZSBfX2xlbiA9IG1pbihfTV9wYmFja19zaXplLCBfX2Rpc3QpOwogICAgICAgICAgICB0cmFpdHNf dHlwZTo6Y29weShfTV9wYmFjaywgX01faW5fY3VyLCBfX2xlbik7CiAgICAgICAgICAgIF9NX3Bi YWNrX2N1cl9zYXZlID0gX01faW5fY3VyOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9 IF9NX2luX2VuZDsKICAgICAgICAgICAgdGhpcy0+c2V0ZyhfTV9wYmFjaywgX01fcGJhY2ssIF9N X3BiYWNrICsgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19pbml0ID0gdHJ1ZTsKICAgICAg ICAgIH0KICAgICAgfQoKCgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19kZXN0cm95KCkKICAg ICAgewogICAgICAgIGlmIChfTV9wYmFja19pbml0KQogICAgICAgICAgewoKICAgICAgICAgICAg aW50X3R5cGUgX19vZmZfY3VyID0gX01faW5fY3VyIC0gX01fcGJhY2s7CgoKICAgICAgICAgICAg aW50X3R5cGUgX19vZmZfZW5kID0gMDsKICAgICAgICAgICAgaW50X3R5cGUgX19wYmFja19sZW4g PSBfTV9pbl9lbmQgLSBfTV9wYmFjazsKICAgICAgICAgICAgaW50X3R5cGUgX19zYXZlX2xlbiA9 IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fYnVmOwogICAgICAgICAgICBpZiAoX19wYmFja19sZW4g PiBfX3NhdmVfbGVuKQogICAgICAgICAgICAgIF9fb2ZmX2VuZCA9IF9fcGJhY2tfbGVuIC0gX19z YXZlX2xlbjsKCiAgICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9wYmFja19jdXJfc2F2 ZSArIF9fb2ZmX2N1ciwKICAgICAgICAgICAgICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSAr IF9fb2ZmX2VuZCk7CiAgICAgICAgICAgIF9NX3BiYWNrX2N1cl9zYXZlID0gX19udWxsOwogICAg ICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IF9fbnVsbDsKICAgICAgICAgICAgX01fcGJhY2tf aW5pdCA9IGZhbHNlOwogICAgICAgICAgfQogICAgICB9CgoKCiAgICAgIHZvaWQKICAgICAgX01f aW5fY3VyX21vdmUob2ZmX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQg PSBfTV9vdXRfY3VyOwogICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9fdGVz dG91dCAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX291dF9jdXIgKz0gX19uOwogICAg ICB9CiMgMTkzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3N0cmVhbWJ1Zi5oIiAzCiAg ICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewogICAg ICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAgIF9NX291dF9jdXIgKz0gX19u OwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmllZCkKICAgICAgICAgIF9NX2lu X2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfZW5kKQogICAgICAg ICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1cjsKCiAgICAgICAgICAgIGlm IChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0gX19uOwogICAgICAgICAgfQog ICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRfYnVmX3NpemUoKQogICAgICB7 CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlmIChfTV9vdXRfY3VyKQogICAg ICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0gX01fYnVmKQogICAgICAgICAg ICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0gX01fb3V0X2N1cjsKCiAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291dF9lbmQgLSBfTV9vdXRfY3Vy OwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQojIDIzNiAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgICB2b2lkCiAgICAgIF9N X3NldF9pbmRldGVybWluYXRlKHZvaWQpCiAgICAgIHsKICAgICAgICBpZiAoX01fbW9kZSAmIGlv c19iYXNlOjppbikKICAgICAgICAgIHRoaXMtPnNldGcoX01fYnVmLCBfTV9idWYsIF9NX2J1Zik7 CiAgICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgdGhpcy0+c2V0 cChfTV9idWYsIF9NX2J1Zik7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fc2V0X2RldGVy bWluYXRlKG9mZl90eXBlIF9fb2ZmKQogICAgICB7CiAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IF9N X21vZGUgJiBpb3NfYmFzZTo6aW47CiAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYg aW9zX2Jhc2U6Om91dDsKICAgICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgICB0aGlzLT5zZXRn KF9NX2J1ZiwgX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkK ICAgICAgICAgIHRoaXMtPnNldHAoX01fYnVmLCBfTV9idWYgKyBfX29mZik7CiAgICAgIH0KCiAg ICAgIGJvb2wKICAgICAgX01faXNfaW5kZXRlcm1pbmF0ZSh2b2lkKQogICAgICB7CiAgICAgICAg Ym9vbCBfX3JldCA9IGZhbHNlOwoKICAgICAgICBpZiAoX01fYnVmKQogICAgICAgICAgewogICAg ICAgICAgICBpZiAoX01fbW9kZSAmIGlvc19iYXNlOjppbikKICAgICAgICAgICAgICBfX3JldCA9 IF9NX2luX2JlZyA9PSBfTV9pbl9jdXIgJiYgX01faW5fY3VyID09IF9NX2luX2VuZDsKICAgICAg ICAgICAgaWYgKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KQogICAgICAgICAgICAgIF9fcmV0ID0g X01fb3V0X2JlZyA9PSBfTV9vdXRfY3VyICYmIF9NX291dF9jdXIgPT0gX01fb3V0X2VuZDsKICAg ICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgcHVibGljOgogICAgICB2 aXJ0dWFsCiAgICAgIH5iYXNpY19zdHJlYW1idWYoKQogICAgICB7CiAgICAgICAgX01fYnVmX3Vu aWZpZWQgPSBmYWxzZTsKICAgICAgICBfTV9idWZfc2l6ZSA9IDA7CiAgICAgICAgX01fYnVmX3Np emVfb3B0ID0gMDsKICAgICAgICBfTV9tb2RlID0gaW9zX2Jhc2U6Om9wZW5tb2RlKDApOwogICAg ICAgIF9NX2J1Zl9sb2NhbGVfaW5pdCA9IGZhbHNlOwogICAgICB9CgoKICAgICAgbG9jYWxlCiAg ICAgIHB1YmltYnVlKGNvbnN0IGxvY2FsZSAmX19sb2MpCiAgICAgIHsKICAgICAgICBsb2NhbGUg X190bXAodGhpcy0+Z2V0bG9jKCkpOwogICAgICAgIHRoaXMtPmltYnVlKF9fbG9jKTsKICAgICAg ICByZXR1cm4gX190bXA7CiAgICAgIH0KCiAgICAgIGxvY2FsZQogICAgICBnZXRsb2MoKSBjb25z dAogICAgICB7CiAgICAgICAgaWYgKF9NX2J1Zl9sb2NhbGVfaW5pdCkKICAgICAgICAgIHJldHVy biBfTV9idWZfbG9jYWxlOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBsb2NhbGUoKTsK ICAgICAgfQoKCiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHB1YnNldGJ1ZihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNldGJ1ZihfX3Ms IF9fbik7IH0KCiAgICAgIHBvc190eXBlCiAgICAgIHB1YnNlZWtvZmYob2ZmX3R5cGUgX19vZmYs IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVu bW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHJldHVy biB0aGlzLT5zZWVrb2ZmKF9fb2ZmLCBfX3dheSwgX19tb2RlKTsgfQoKICAgICAgcG9zX3R5cGUK ICAgICAgcHVic2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgICAgIGlvc19iYXNl OjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KQogICAgICB7 IHJldHVybiB0aGlzLT5zZWVrcG9zKF9fc3AsIF9fbW9kZSk7IH0KCiAgICAgIGludAogICAgICBw dWJzeW5jKCkgeyByZXR1cm4gdGhpcy0+c3luYygpOyB9CgoKCiAgICAgIHN0cmVhbXNpemUKICAg ICAgaW5fYXZhaWwoKQogICAgICB7CiAgICAgICAgc3RyZWFtc2l6ZSBfX3JldDsKICAgICAgICBp ZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIHsKICAgICAg ICAgICAgaWYgKF9NX3BiYWNrX2luaXQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg aW50X3R5cGUgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9zYXZlIC0gX01fcGJhY2tfY3VyX3Nh dmU7CiAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX3BiYWNrX2xlbiA9IF9NX2luX2N1ciAtIF9N X3BiYWNrOwogICAgICAgICAgICAgICAgX19yZXQgPSBfX3NhdmVfbGVuIC0gX19wYmFja19sZW47 CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19yZXQgPSB0 aGlzLT5lZ3B0cigpIC0gdGhpcy0+Z3B0cigpOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAg ICAgICAgIF9fcmV0ID0gdGhpcy0+c2hvd21hbnljKCk7CiAgICAgICAgcmV0dXJuIF9fcmV0Owog ICAgICB9CgogICAgICBpbnRfdHlwZQogICAgICBzbmV4dGMoKQogICAgICB7CiAgICAgICAgaW50 X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgcmV0dXJuICh0aGlzLT5z YnVtcGMoKSA9PSBfX2VvZiA/IF9fZW9mIDogdGhpcy0+c2dldGMoKSk7CiAgICAgIH0KCiAgICAg IGludF90eXBlCiAgICAgIHNidW1wYygpOwoKICAgICAgaW50X3R5cGUKICAgICAgc2dldGMoKQog ICAgICB7CiAgICAgICAgaW50X3R5cGUgX19yZXQ7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBf TV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p bnRfdHlwZSgqKHRoaXMtPmdwdHIoKSkpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fcmV0ID0g dGhpcy0+dW5kZXJmbG93KCk7CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgogICAgICBz dHJlYW1zaXplCiAgICAgIHNnZXRuKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAg ICAgeyByZXR1cm4gdGhpcy0+eHNnZXRuKF9fcywgX19uKTsgfQoKCiAgICAgIGludF90eXBlCiAg ICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKTsKCiAgICAgIGludF90eXBlCiAgICAgIHN1bmdl dGMoKTsKCgogICAgICBpbnRfdHlwZQogICAgICBzcHV0YyhjaGFyX3R5cGUgX19jKTsKCiAgICAg IHN0cmVhbXNpemUKICAgICAgc3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uKQogICAgICB7IHJldHVybiB0aGlzLT54c3B1dG4oX19zLCBfX24pOyB9CgogICAgcHJvdGVj dGVkOgogICAgICBiYXNpY19zdHJlYW1idWYoKQogICAgICA6IF9NX2J1ZihfX251bGwpLCBfTV9i dWZfc2l6ZSgwKSwKICAgICAgX01fYnVmX3NpemVfb3B0KHN0YXRpY19jYXN0PGludF90eXBlPig4 MTkyKSksIF9NX2J1Zl91bmlmaWVkKGZhbHNlKSwKICAgICAgX01faW5fYmVnKDApLCBfTV9pbl9j dXIoMCksIF9NX2luX2VuZCgwKSwgX01fb3V0X2JlZygwKSwgX01fb3V0X2N1cigwKSwKICAgICAg X01fb3V0X2VuZCgwKSwgX01fbW9kZShpb3NfYmFzZTo6b3Blbm1vZGUoMCkpLCBfTV9idWZfbG9j YWxlKGxvY2FsZSgpKSwKICAgICAgX01fYnVmX2xvY2FsZV9pbml0KGZhbHNlKSwgX01fcGJhY2tf c2l6ZSgxKSwgX01fcGJhY2soX19udWxsKSwKICAgICAgX01fcGJhY2tfY3VyX3NhdmUoX19udWxs KSwgX01fcGJhY2tfZW5kX3NhdmUoX19udWxsKSwgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAg eyB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2lu X2JlZzsgfQoKICAgICAgY2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01f aW5fY3VyOyB9CgogICAgICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4g X01faW5fZW5kOyB9CgogICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3Vy ICs9IF9fbjsgfQoKICAgICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFy X3R5cGUqIF9fZ25leHQsIGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5f YmVnID0gX19nYmVnOwogICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5f ZW5kID0gX19nZW5kOwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9f Z2JlZyAmJiBfX2duZXh0ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwg aW9zX2Jhc2U6OmluOwogICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNv bnN0IHsgcmV0dXJuIF9NX291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigp IGNvbnN0IHsgcmV0dXJuIF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBw dHIoKSBjb25zdCB7IHJldHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1w KGludCBfX24pIHsgX01fb3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChj aGFyX3R5cGUqIF9fcGJlZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9v dXRfYmVnID0gX01fb3V0X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5k OwogICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19w ZW5kKQogICAgICAgICAgX01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9 CgoKCiAgICAgIHZpcnR1YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQog ICAgICB7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01f YnVmX2xvY2FsZSAhPSBfX2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAg ICAgfQoKCiAgICAgIHZpcnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioK ICAgICAgc2V0YnVmKGNoYXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7 IH0KCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jh c2U6OnNlZWtkaXIsCiAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6 OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEp KTsgfQoKICAgICAgdmlydHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAg ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpv dXQpCiAgICAgIHsgcmV0dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1 YWwgaW50CiAgICAgIHN5bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1z aXplCiAgICAgIHNob3dtYW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyZWFt c2l6ZQogICAgICB4c2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg IHZpcnR1YWwgaW50X3R5cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRz X3R5cGU6OmVvZigpOyB9CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVmbG93KCkKICAg ICAgewogICAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAg IGJvb2wgX190ZXN0ZW9mID0gdGhpcy0+dW5kZXJmbG93KCkgPT0gX19yZXQ7CiAgICAgICAgYm9v bCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZDsKICAg ICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAgewogICAgICAg ICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAg ICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmllZCAmJiBfTV9t b2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7CiAgICAgICAg ICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlw ZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsg cmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQog ICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAg IHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6 ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDUxNiAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYuaCIgMwogICAgcHJpdmF0ZToKICAgICAg YmFzaWNfc3RyZWFtYnVmKGNvbnN0IF9fc3RyZWFtYnVmX3R5cGUmKTsKCiAgICAgIF9fc3RyZWFt YnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBlJik7CgogICAg fTsKCn0KCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0cmVhbWJ1Zi50Y2MiIDEg MwojIDM3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RyZWFtYnVmLnRjYyIgMwpuYW1lc3Bh Y2Ugc3RkIHsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAg ICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzYnVtcGMoKQogICAgewog ICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf TV9pbl9lbmQpCiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlIF9fYyA9ICpncHRyKCk7CiAg ICAgICAgICBfTV9pbl9jdXJfbW92ZSgxKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKF9fYyk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19yZXQgPSB0 aGlzLT51ZmxvdygpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1 ZjxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwg X1RyYWl0cz46OgogICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpCiAgICB7CiAgICAgIGludF90 eXBlIF9fcmV0OwogICAgICBib29sIF9fdGVzdHBvcyA9IF9NX2luX2N1ciAmJiBfTV9pbl9iZWcg PCBfTV9pbl9jdXI7CiAgICAgIGJvb2wgX190ZXN0bmUgPSBfTV9pbl9jdXIgJiYgIXRyYWl0c190 eXBlOjplcShfX2MsIHRoaXMtPmdwdHIoKVstMV0pOwogICAgICBpZiAoIV9fdGVzdHBvcyB8fCBf X3Rlc3RuZSkKICAgICAgICBfX3JldCA9IHBiYWNrZmFpbCh0cmFpdHNfdHlwZTo6dG9faW50X3R5 cGUoX19jKSk7CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfTV9pbl9jdXJfbW92ZSgt MSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqdGhpcy0+Z3B0 cigpKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBzdW5nZXRjKCkKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQ7CiAg ICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyKQogICAgICAgIHsKICAg ICAgICAgIF9NX2luX2N1cl9tb3ZlKC0xKTsKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKCpfTV9pbl9jdXIpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f cmV0ID0gdGhpcy0+cGJhY2tmYWlsKCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFt ZSBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0 cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpCiAgICB7 CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBpZiAoX01fb3V0X2J1Zl9zaXplKCkpCiAgICAg ICAgewogICAgICAgICAgKl9NX291dF9jdXIgPSBfX2M7CiAgICAgICAgICBfTV9vdXRfY3VyX21v dmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2MpOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+b3ZlcmZsb3codHJhaXRz X3R5cGU6OnRvX2ludF90eXBlKF9fYykpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUK ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHhzZ2V0bihjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX19yZXQgPSAw OwogICAgICB3aGlsZSAoX19yZXQgPCBfX24pCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f YnVmX2xlbiA9IF9NX2luX2VuZCAtIF9NX2luX2N1cjsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4g PiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fcmVtYWluaW5nID0gX19u IC0gX19yZXQ7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gbWluKF9fYnVmX2xlbiwgX19y ZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01faW5fY3Vy LCBfX2xlbik7CiAgICAgICAgICAgICAgX19yZXQgKz0gX19sZW47CiAgICAgICAgICAgICAgX19z ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9NX2luX2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAg ICAgfQoKICAgICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGludF90eXBlIF9fYyA9IHRoaXMtPnVmbG93KCk7CiAgICAgICAgICAgICAgaWYgKF9fYyAh PSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg IHRyYWl0c190eXBlOjphc3NpZ24oKl9fcysrLCB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9f YykpOwogICAgICAgICAgICAgICAgICArK19fcmV0OwogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAgYmFzaWNfc3RyZWFtYnVm PF9DaGFyVCwgX1RyYWl0cz46OgogICAgeHNwdXRuKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbikKICAgIHsKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHdoaWxl IChfX3JldCA8IF9fbikKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBfX2J1Zl9sZW4gPSBf TV9vdXRfYnVmX3NpemUoKTsKICAgICAgICAgIGlmIChfX2J1Zl9sZW4gPiAwKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgb2ZmX3R5cGUgX19yZW1haW5pbmcgPSBfX24gLSBfX3JldDsKICAg ICAgICAgICAgICBvZmZfdHlwZSBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWluaW5nKTsK ICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfTV9vdXRfY3VyLCBfX3MsIF9fbGVuKTsK ICAgICAgICAgICAgICBfX3JldCArPSBfX2xlbjsKICAgICAgICAgICAgICBfX3MgKz0gX19sZW47 CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbGVuKTsKICAgICAgICAgICAgfQoKICAg ICAgICAgIGlmIChfX3JldCA8IF9fbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIGludF90 eXBlIF9fYyA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX19zKSk7 CiAgICAgICAgICAgICAgaWYgKF9fYyAhPSB0cmFpdHNfdHlwZTo6ZW9mKCkpCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19z OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJl YW1zaXplCiAgICBfX2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYg X19pb3MsCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJh aXRzPiogX19zYmluLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFy VCwgX1RyYWl0cz4qIF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6 OmludF90eXBlIGludF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0 cmVhbXNpemUgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXpl IF9feHRyY3Q7CiAgICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19i YXNlOjpvdXQ7CiAgICAgIHRyeSB7CiAgICAgICAgd2hpbGUgKF9fdGVzdHB1dCAmJiBfX2J1ZnNp emUgIT0gLTEpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9feHRyY3QgPSBfX3Nib3V0LT5zcHV0 bihfX3NiaW4tPmdwdHIoKSwgX19idWZzaXplKTsKICAgICAgICAgICAgX19yZXQgKz0gX194dHJj dDsKICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAgICAgICAg ICAgaWYgKF9feHRyY3QgPT0gX19idWZzaXplKQogICAgICAgICAgICAgIHsKICAgICAgICAgICAg ICAgIGludF90eXBlIF9fYyA9IF9fc2Jpbi0+c2dldGMoKTsKICAgICAgICAgICAgICAgIGlmIChf X2MgPT0gX1RyYWl0czo6ZW9mKCkpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgX19idWZzaXplID0g X19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICB9CiAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKSB7CiAgICAgICAgaWYgKChfX2lvcy5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkgIT0gMCkKICAgICAgICAgIHRocm93OwogICAgICB9CiAgICAgIHJldHVybiBfX3Jl dDsKICAgIH0KfQojIDUzMCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zdHJlYW1idWYu aCIgMiAzCiMgNDYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaW9zLmgiIDIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMSAzCiMgMzQgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc2J1Zl9pdGVyLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc2J1 Zl9pdGVyLmgiIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIG9zdHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVi bGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZvaWQsIHZvaWQsIHZvaWQ+ CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gb3N0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAg IHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBib29sIF9NX2ZhaWxlZDsKCiAgICBwdWJs aWM6CiAgICAgIGlubGluZQogICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yKG9zdHJlYW1fdHlwZSYg X19zKSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zLnJkYnVmKCkpLCBfTV9mYWlsZWQoIV9N X3NidWYpIHsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcihzdHJlYW1idWZfdHlwZSogX19z KSB0aHJvdyAoKQogICAgICA6IF9NX3NidWYoX19zKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0K CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShfQ2hhclQgX19jKTsK CiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIG9zdHJlYW1idWZfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoaW50KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9CgogICAgICBvc3Ry ZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkgdGhyb3coKQogICAgICB7IHJldHVy biAqdGhpczsgfQoKICAgICAgYm9vbAogICAgICBmYWlsZWQoKSBjb25zdCB0aHJvdygpCiAgICAg IHsgcmV0dXJuIF9NX2ZhaWxlZDsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW5saW5lIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I9KF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmICghX01fZmFpbGVkICYmCiAgICAgICAg ICBfVHJhaXRzOjplcV9pbnRfdHlwZShfTV9zYnVmLT5zcHV0YyhfX2MpLF9UcmFpdHM6OmVvZigp KSkKICAgICAgX01fZmFpbGVkID0gdHJ1ZTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlz dHJlYW1idWZfaXRlcmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3Rh ZywgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAg ICAgIF9DaGFyVCosIF9DaGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRl ZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAg ICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFt YnVmaXRlcl90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoKCgogICAgICBzdHJlYW1idWZfdHlwZSog X01fc2J1ZjsKICAgICAgaW50X3R5cGUgX01fYzsKCiAgICBwdWJsaWM6CiAgICAgIGlzdHJlYW1i dWZfaXRlcmF0b3IoKSB0aHJvdygpCiAgICAgIDogX01fc2J1ZihfX251bGwpLCBfTV9jKC0yKSB7 IH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IoaXN0cmVhbV90eXBlJiBfX3MpIHRocm93KCkK ICAgICAgOiBfTV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fYygtMikgeyB9CgogICAgICBpc3RyZWFt YnVmX2l0ZXJhdG9yKHN0cmVhbWJ1Zl90eXBlKiBfX3MpIHRocm93KCkKICAgICAgOiBfTV9zYnVm KF9fcyksIF9NX2MoLTIpIHsgfQoKCgoKICAgICAgY2hhcl90eXBlCiAgICAgIG9wZXJhdG9yKigp IGNvbnN0CiAgICAgIHsKCiAgICAgICAgY2hhcl90eXBlIF9fcmV0OwogICAgICAgIGlmIChfTV9z YnVmICYmIF9NX2MgIT0gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KC0yKSkKICAgICAgICAgIF9fcmV0 ID0gX01fYzsKICAgICAgICBlbHNlIGlmIChfTV9zYnVmKQogICAgICAgICAgX19yZXQgPSB0cmFp dHNfdHlwZTo6dG9fY2hhcl90eXBlKF9NX3NidWYtPnNnZXRjKCkpOwogICAgICAgIGVsc2UKICAg ICAgICAgIF9fcmV0ID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBlPih0cmFpdHNfdHlwZTo6ZW9mKCkp OwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90 eXBlJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIGlmIChfTV9zYnVmKQogICAg ICAgICAgX01fc2J1Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVy biAqdGhpczsKICAgICAgfQoKICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlCiAgICAgIG9wZXJh dG9yKysoaW50KQogICAgICB7CiAgICAgICAgX19pc3RyZWFtYnVmaXRlcl90eXBlIF9fb2xkID0g KnRoaXM7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICBfX29sZC5fTV9jID0gX01fc2J1 Zi0+c2J1bXBjKCk7CiAgICAgICAgX01fYyA9IC0yOwogICAgICAgIHJldHVybiBfX29sZDsKICAg ICAgfQoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUm IF9fYikKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigp OwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dldGMoKSA9 PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAgICAgICAg ICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAgcmV0dXJu IChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsKICAgICAg fQoKCgoKICAgICAgYm9vbAogICAgICBlcXVhbChjb25zdCBfX2lzdHJlYW1idWZpdGVyX3R5cGUm IF9fYikgY29uc3QKICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6 OmVvZigpOwogICAgICAgIGJvb2wgX190aGlzZW9mID0gIV9NX3NidWYgfHwgX01fc2J1Zi0+c2dl dGMoKSA9PSBfX2VvZjsKICAgICAgICBib29sIF9fYmVvZiA9ICFfX2IuX01fc2J1ZgogICAgICAg ICAgICAgICAgICAgICAgfHwgX19iLl9NX3NidWYtPnNnZXRjKCkgPT0gX19lb2Y7CiAgICAgICAg cmV0dXJuIChfX3RoaXNlb2YgJiYgX19iZW9mIHx8ICghX190aGlzZW9mICYmICFfX2Jlb2YpKTsK ICAgICAgfQoKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i KTsgfQp9CiMgMzYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDAgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jdGltZS5oIiAxIDMKIyA0MiAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9pb3MuaCIgMSAzCiMgNDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj ZXRzLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMSAzCiMgMjQgIi91c3Iv aW5jbHVkZS9sYW5naW5mby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDEgMwoj IDIyICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJl cy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL25sX3R5cGVzLmgiIDIgMwojIDMxICIvdXNyL2lu Y2x1ZGUvbmxfdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCgp0eXBlZGVmIHZvaWQgKm5sX2NhdGQ7 CgoKdHlwZWRlZiBpbnQgbmxfaXRlbTsKCgpleHRlcm4gbmxfY2F0ZCBjYXRvcGVuIChfX2NvbnN0 IGNoYXIgKl9fY2F0X25hbWUsIGludCBfX2ZsYWcpIHRocm93ICgpOwoKCgpleHRlcm4gY2hhciAq Y2F0Z2V0cyAobmxfY2F0ZCBfX2NhdGFsb2csIGludCBfX3NldCwgaW50IF9fbnVtYmVyLAogICAg ICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3N0cmluZykgdGhyb3cgKCk7CgoKZXh0 ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBfX2NhdGFsb2cpIHRocm93ICgpOwoKfQojIDI1ICIv dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2Fs ZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxlLmgiIDMKZW51bQp7CiAgX19M Q19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xDX1RJTUUgPSAyLAogIF9fTENf Q09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19MQ19NRVNTQUdFUyA9IDUsCiAg X19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENfTkFNRSA9IDgsCiAgX19MQ19B RERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9fTENfTUVBU1VSRU1FTlQgPSAx MSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAyNyAiL3Vzci9pbmNsdWRlL2xhbmdp bmZvLmgiIDIgMwoKCmV4dGVybiAiQyIgewojIDQzICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIg MwplbnVtCnsKCgoKICBBQkRBWV8xID0gKCgoX19MQ19USU1FKSA8PCAxNikgfCAoMCkpLAoKICBB QkRBWV8yLAoKICBBQkRBWV8zLAoKICBBQkRBWV80LAoKICBBQkRBWV81LAoKICBBQkRBWV82LAoK ICBBQkRBWV83LAoKCgogIERBWV8xLAoKICBEQVlfMiwKCiAgREFZXzMsCgogIERBWV80LAoKICBE QVlfNSwKCiAgREFZXzYsCgogIERBWV83LAoKCgogIEFCTU9OXzEsCgogIEFCTU9OXzIsCgogIEFC TU9OXzMsCgogIEFCTU9OXzQsCgogIEFCTU9OXzUsCgogIEFCTU9OXzYsCgogIEFCTU9OXzcsCgog IEFCTU9OXzgsCgogIEFCTU9OXzksCgogIEFCTU9OXzEwLAoKICBBQk1PTl8xMSwKCiAgQUJNT05f MTIsCgoKCiAgTU9OXzEsCgogIE1PTl8yLAoKICBNT05fMywKCiAgTU9OXzQsCgogIE1PTl81LAoK ICBNT05fNiwKCiAgTU9OXzcsCgogIE1PTl84LAoKICBNT05fOSwKCiAgTU9OXzEwLAoKICBNT05f MTEsCgogIE1PTl8xMiwKCgogIEFNX1NUUiwKCiAgUE1fU1RSLAoKCiAgRF9UX0ZNVCwKCiAgRF9G TVQsCgogIFRfRk1ULAoKICBUX0ZNVF9BTVBNLAoKCiAgRVJBLAoKICBfX0VSQV9ZRUFSLAoKCgog IEVSQV9EX0ZNVCwKCiAgQUxUX0RJR0lUUywKCiAgRVJBX0RfVF9GTVQsCgogIEVSQV9UX0ZNVCwK CgogIF9OTF9USU1FX0VSQV9OVU1fRU5UUklFUywKICBfTkxfVElNRV9FUkFfRU5UUklFUywKCiAg X05MX1dBQkRBWV8xLAogIF9OTF9XQUJEQVlfMiwKICBfTkxfV0FCREFZXzMsCiAgX05MX1dBQkRB WV80LAogIF9OTF9XQUJEQVlfNSwKICBfTkxfV0FCREFZXzYsCiAgX05MX1dBQkRBWV83LAoKCiAg X05MX1dEQVlfMSwKICBfTkxfV0RBWV8yLAogIF9OTF9XREFZXzMsCiAgX05MX1dEQVlfNCwKICBf TkxfV0RBWV81LAogIF9OTF9XREFZXzYsCiAgX05MX1dEQVlfNywKCgogIF9OTF9XQUJNT05fMSwK ICBfTkxfV0FCTU9OXzIsCiAgX05MX1dBQk1PTl8zLAogIF9OTF9XQUJNT05fNCwKICBfTkxfV0FC TU9OXzUsCiAgX05MX1dBQk1PTl82LAogIF9OTF9XQUJNT05fNywKICBfTkxfV0FCTU9OXzgsCiAg X05MX1dBQk1PTl85LAogIF9OTF9XQUJNT05fMTAsCiAgX05MX1dBQk1PTl8xMSwKICBfTkxfV0FC TU9OXzEyLAoKCiAgX05MX1dNT05fMSwKICBfTkxfV01PTl8yLAogIF9OTF9XTU9OXzMsCiAgX05M X1dNT05fNCwKICBfTkxfV01PTl81LAogIF9OTF9XTU9OXzYsCiAgX05MX1dNT05fNywKICBfTkxf V01PTl84LAogIF9OTF9XTU9OXzksCiAgX05MX1dNT05fMTAsCiAgX05MX1dNT05fMTEsCiAgX05M X1dNT05fMTIsCgogIF9OTF9XQU1fU1RSLAogIF9OTF9XUE1fU1RSLAoKICBfTkxfV0RfVF9GTVQs CiAgX05MX1dEX0ZNVCwKICBfTkxfV1RfRk1ULAogIF9OTF9XVF9GTVRfQU1QTSwKCiAgX05MX1dF UkFfWUVBUiwKICBfTkxfV0VSQV9EX0ZNVCwKICBfTkxfV0FMVF9ESUdJVFMsCiAgX05MX1dFUkFf RF9UX0ZNVCwKICBfTkxfV0VSQV9UX0ZNVCwKCiAgX05MX1RJTUVfV0VFS19OREFZUywKICBfTkxf VElNRV9XRUVLXzFTVERBWSwKICBfTkxfVElNRV9XRUVLXzFTVFdFRUssCiAgX05MX1RJTUVfRklS U1RfV0VFS0RBWSwKICBfTkxfVElNRV9GSVJTVF9XT1JLREFZLAogIF9OTF9USU1FX0NBTF9ESVJF Q1RJT04sCiAgX05MX1RJTUVfVElNRVpPTkUsCgogIF9EQVRFX0ZNVCwKCiAgX05MX1dfREFURV9G TVQsCgogIF9OTF9OVU1fTENfVElNRSwKCgoKCiAgX05MX0NPTExBVEVfTlJVTEVTID0gKCgoX19M Q19DT0xMQVRFKSA8PCAxNikgfCAoMCkpLAogIF9OTF9DT0xMQVRFX1JVTEVTRVRTLAogIF9OTF9D T0xMQVRFX1RBQkxFTUIsCiAgX05MX0NPTExBVEVfV0VJR0hUTUIsCiAgX05MX0NPTExBVEVfRVhU UkFNQiwKICBfTkxfQ09MTEFURV9JTkRJUkVDVE1CLAogIF9OTF9DT0xMQVRFX0dBUDEsCiAgX05M X0NPTExBVEVfR0FQMiwKICBfTkxfQ09MTEFURV9HQVAzLAogIF9OTF9DT0xMQVRFX1RBQkxFV0Ms CiAgX05MX0NPTExBVEVfV0VJR0hUV0MsCiAgX05MX0NPTExBVEVfRVhUUkFXQywKICBfTkxfQ09M TEFURV9JTkRJUkVDVFdDLAogIF9OTF9DT0xMQVRFX1NZTUJfSEFTSF9TSVpFTUIsCiAgX05MX0NP TExBVEVfU1lNQl9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfRVhUUkFNQiwKICBfTkxfQ09M TEFURV9DT0xMU0VRTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUVdDLAogIF9OTF9OVU1fTENfQ09M TEFURSwKCgoKCiAgX05MX0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDAp KSwKICBfTkxfQ1RZUEVfVE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9M T1dFUiwKICBfTkxfQ1RZUEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVf R0FQMywKICBfTkxfQ1RZUEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQ NiwKICBfTkxfQ1RZUEVfQ0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxf Q1RZUEVfV0lEVEgsCiAgX05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRf TkFNRSwKICBDT0RFU0VUID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RP VVBQRVIzMiwKICBfTkxfQ1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQs CiAgX05MX0NUWVBFX01BUF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBf TkxfQ1RZUEVfSU5ESUdJVFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NU WVBFX0lORElHSVRTMl9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9J TkRJR0lUUzRfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJ VFM2X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9N QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4s CiAgX05MX0NUWVBFX0lORElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9O TF9DVFlQRV9JTkRJR0lUUzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZ UEVfSU5ESUdJVFM0X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lO RElHSVRTNl9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU UzhfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01C LAogIF9OTF9DVFlQRV9PVVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBf TkxfQ1RZUEVfT1VURElHSVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NU WVBFX09VVERJR0lUNV9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9P VVRESUdJVDdfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElH SVQ5X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9X QywKICBfTkxfQ1RZUEVfT1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAg X05MX0NUWVBFX09VVERJR0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9D VFlQRV9PVVRESUdJVDZfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVf T1VURElHSVQ4X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5T TElUX1RBQl9TSVpFLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVf VFJBTlNMSVRfRlJPTV9UQkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZ UEVfVFJBTlNMSVRfVE9fVEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdf TEVOLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RS QU5TTElUX0lHTk9SRV9MRU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZ UEVfRVhUUkFfTUFQXzEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRS QV9NQVBfMywKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81 LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05M X0NUWVBFX0VYVFJBX01BUF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVf RVhUUkFfTUFQXzEwLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJB X01BUF8xMiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBf MTQsCiAgX05MX05VTV9MQ19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xD X01PTkVUQVJZKSA8PCAxNikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9f TU9OX0RFQ0lNQUxfUE9JTlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9H Uk9VUElORywKCgoKICBfX1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgog IF9fSU5UX0ZSQUNfRElHSVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNF REVTLAoKCgogIF9fUF9TRVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9f Tl9TRVBfQllfU1BBQ0UsCgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoK CgogIF9OTF9NT05FVEFSWV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBf X0lOVF9QX1NFUF9CWV9TUEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5U X05fU0VQX0JZX1NQQUNFLAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lH Tl9QT1NOLAoKCgogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05F VEFSWV9EVU9fQ1VSUkVOQ1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElH SVRTLAogIF9OTF9NT05FVEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19Q X0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01P TkVUQVJZX0RVT19OX0NTX1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BB Q0UsCiAgX05MX01PTkVUQVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllf RFVPX0lOVF9QX1NFUF9CWV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNF REVTLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFS WV9EVU9fUF9TSUdOX1BPU04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxf TU9ORVRBUllfRFVPX0lOVF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJ R05fUE9TTiwKICBfTkxfTU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VO T19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZ X0RVT19WQUxJRF9UTywKICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05F VEFSWV9ERUNJTUFMX1BPSU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAog IF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgoX19MQ19OVU1F UklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9QT0lOVCwKCiAg X19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAsCgogIF9fR1JP VVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxfTlVNRVJJQ19U SE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1fTENfTlVNRVJJQywKCiAgX19ZRVNFWFBSID0gKCgo X19MQ19NRVNTQUdFUykgPDwgMTYpIHwgKDApKSwKCiAgX19OT0VYUFIsCgogIF9fWUVTU1RSLAoK CgogIF9fTk9TVFIsCgoKCiAgX05MX05VTV9MQ19NRVNTQUdFUywKCiAgX05MX1BBUEVSX0hFSUdI VCA9ICgoKF9fTENfUEFQRVIpIDw8IDE2KSB8ICgwKSksCiAgX05MX1BBUEVSX1dJRFRILAogIF9O TF9OVU1fTENfUEFQRVIsCgogIF9OTF9OQU1FX05BTUVfRk1UID0gKCgoX19MQ19OQU1FKSA8PCAx NikgfCAoMCkpLAogIF9OTF9OQU1FX05BTUVfR0VOLAogIF9OTF9OQU1FX05BTUVfTVIsCiAgX05M X05BTUVfTkFNRV9NUlMsCiAgX05MX05BTUVfTkFNRV9NSVNTLAogIF9OTF9OQU1FX05BTUVfTVMs CiAgX05MX05VTV9MQ19OQU1FLAoKICBfTkxfQUREUkVTU19QT1NUQUxfRk1UID0gKCgoX19MQ19B RERSRVNTKSA8PCAxNikgfCAoMCkpLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTkFNRSwKICBfTkxf QUREUkVTU19DT1VOVFJZX1BPU1QsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9BQjIsCiAgX05MX0FE RFJFU1NfQ09VTlRSWV9BQjMsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9DQVIsCiAgX05MX0FERFJF U1NfQ09VTlRSWV9OVU0sCiAgX05MX0FERFJFU1NfQ09VTlRSWV9JU0JOLAogIF9OTF9BRERSRVNT X0xBTkdfTkFNRSwKICBfTkxfQUREUkVTU19MQU5HX0FCLAogIF9OTF9BRERSRVNTX0xBTkdfVEVS TSwKICBfTkxfQUREUkVTU19MQU5HX0xJQiwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgogIF9OTF9U RUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwgKDApKSwK ICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NFTEVDVCwK ICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX05VTV9MQ19URUxFUEhPTkUsCgogIF9O TF9NRUFTVVJFTUVOVF9NRUFTVVJFTUVOVCA9ICgoKF9fTENfTUVBU1VSRU1FTlQpIDw8IDE2KSB8 ICgwKSksCiAgX05MX05VTV9MQ19NRUFTVVJFTUVOVCwKCiAgX05MX0lERU5USUZJQ0FUSU9OX1RJ VExFID0gKCgoX19MQ19JREVOVElGSUNBVElPTikgPDwgMTYpIHwgKDApKSwKICBfTkxfSURFTlRJ RklDQVRJT05fU09VUkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BRERSRVNTLAogIF9OTF9JREVO VElGSUNBVElPTl9DT05UQUNULAogIF9OTF9JREVOVElGSUNBVElPTl9FTUFJTCwKICBfTkxfSURF TlRJRklDQVRJT05fVEVMLAogIF9OTF9JREVOVElGSUNBVElPTl9GQVgsCiAgX05MX0lERU5USUZJ Q0FUSU9OX0xBTkdVQUdFLAogIF9OTF9JREVOVElGSUNBVElPTl9URVJSSVRPUlksCiAgX05MX0lE RU5USUZJQ0FUSU9OX0FVRElFTkNFLAogIF9OTF9JREVOVElGSUNBVElPTl9BUFBMSUNBVElPTiwK ICBfTkxfSURFTlRJRklDQVRJT05fQUJCUkVWSUFUSU9OLAogIF9OTF9JREVOVElGSUNBVElPTl9S RVZJU0lPTiwKICBfTkxfSURFTlRJRklDQVRJT05fREFURSwKICBfTkxfSURFTlRJRklDQVRJT05f Q0FURUdPUlksCiAgX05MX05VTV9MQ19JREVOVElGSUNBVElPTiwKCgogIF9OTF9OVU0KfTsKIyA1 NjMgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAzCmV4dGVybiBjaGFyICpubF9sYW5naW5mbyAo bmxfaXRlbSBfX2l0ZW0pIHRocm93ICgpOwoKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUveGxvY2Fs ZS5oIiAxIDMKIyA1NzIgIi91c3IvaW5jbHVkZS9sYW5naW5mby5oIiAyIDMKCgpleHRlcm4gY2hh ciAqX19ubF9sYW5naW5mb19sIChubF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMg NDUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF9jd2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBl LmgiIDEgMwojIDI2ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv ZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg MiAzCgoKCgoKCgojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wLjMv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMg NjEgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHdj dHlwZV90OwoKCgoKCgojIDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgNjkgIi91c3Iv aW5jbHVkZS93Y3R5cGUuaCIgMiAzCiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVt CnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwK ICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAg X19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19J U3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lT d3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp IDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy KSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lT d2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp IDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy KSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lT d2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp IDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh KSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo YSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lT d2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp IDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0 KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp dCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lT d3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp dCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4 ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkp KSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkp KSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkp KSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkp KSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkp KSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkp KSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkp KSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkp KQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBf X3djKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IGlzd2FscGhhICh3aW50X3QgX193YykgdGhy b3cgKCk7CgoKZXh0ZXJuIGludCBpc3djbnRybCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQg aXN3Z3JhcGggKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgaXN3bG93ZXIg KHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3aW50X3QgX193 YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGlzd3B1bmN0ICh3aW50X3QgX193YykgdGhyb3cg KCk7CgoKCgpleHRlcm4gaW50IGlzd3NwYWNlICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGlzd3VwcGVyICh3aW50X3QgX193YykgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGlzd3hkaWdpdCAod2ludF90IF9fd2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgaXN3Ymxh bmsgKHdpbnRfdCBfX3djKSB0aHJvdyAoKTsKIyAxNzggIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIg MwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChfX2NvbnN0IGNoYXIgKl9fcHJvcGVydHkpIHRocm93 ICgpOwoKCgpleHRlcm4gaW50IGlzd2N0eXBlICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj KSB0aHJvdyAoKTsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIF9fY29u c3QgX19pbnQzMl90ICp3Y3RyYW5zX3Q7CgoKZXh0ZXJuIHdpbnRfdCB0b3dsb3dlciAod2ludF90 IF9fd2MpIHRocm93ICgpOwoKCmV4dGVybiB3aW50X3QgdG93dXBwZXIgKHdpbnRfdCBfX3djKSB0 aHJvdyAoKTsKIyAyNzUgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2lu Y2x1ZGUvd2N0eXBlLmgiIDMKZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFu cyAoX19jb25zdCBjaGFyICpfX3Byb3BlcnR5KSB0aHJvdyAoKTsKCgpleHRlcm4gd2ludF90IHRv d2N0cmFucyAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MpIHRocm93ICgpOwoKCgojIDEg Ii91c3IvaW5jbHVkZS94bG9jYWxlLmgiIDEgMwojIDMwMCAiL3Vzci9pbmNsdWRlL3djdHlwZS5o IiAyIDMKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90 IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IF9faXN3YWxwaGFfbCAod2ludF90 IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19pc3dj bnRybF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgX19pc3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkg dGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19pc3dncmFwaF9sICh3aW50X3QgX193YywgX19sb2Nh bGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9faXN3bG93ZXJfbCAod2lu dF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgX19p c3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IF9faXN3cHVuY3RfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2Nh bGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzd3NwYWNlX2wgKHdpbnRfdCBfX3djLCBf X2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3d1cHBlcl9s ICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g aW50IF9faXN3eGRpZ2l0X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJv dyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc3dibGFua19sICh3aW50X3QgX193YywgX19sb2NhbGVf dCBfX2xvY2FsZSkgdGhyb3cgKCk7CgoKCmV4dGVybiB3Y3R5cGVfdCBfX3djdHlwZV9sIChfX2Nv bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgX19pc3djdHlwZV9sICh3aW50X3QgX193Yywgd2N0eXBlX3QgX19kZXNj LCBfX2xvY2FsZV90IF9fbG9jYWxlKQogICAgIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIHdpbnRf dCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSB0aHJvdyAo KTsKCgpleHRlcm4gd2ludF90IF9fdG93dXBwZXJfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3Qg X19sb2NhbGUpIHRocm93ICgpOwoKCgpleHRlcm4gd2N0cmFuc190IF9fd2N0cmFuc19sIChfX2Nv bnN0IGNoYXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgdGhyb3cgKCk7 CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd2N0cmFuc19sICh3aW50X3QgX193Yywgd2N0cmFuc190IF9f ZGVzYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jYWxlKSB0 aHJvdyAoKTsKCgoKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2N3Y3R5cGUu aCIgMiAzCiMgNjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3djdHlwZS5oIiAzCm5h bWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVz aW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlzd2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7 CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGln aXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2luZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3 cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6 aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsKICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2lu ZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1 c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6OndjdHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0K IyA0NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2ljb252LmgiIDEgMwojIDIyICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2ljb252 LmgiIDIgMwoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI1ICIvdXNyL2luY2x1ZGUvaWNvbnYuaCIgMiAzCgoKZXh0 ZXJuICJDIiB7CgoKdHlwZWRlZiB2b2lkICppY29udl90OwoKCgoKZXh0ZXJuIGljb252X3QgaWNv bnZfb3BlbiAoX19jb25zdCBjaGFyICpfX3RvY29kZSwgX19jb25zdCBjaGFyICpfX2Zyb21jb2Rl KQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBpY29udiAoaWNvbnZfdCBfX2NkLCBj aGFyICoqX19yZXN0cmljdCBfX2luYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKl9f cmVzdHJpY3QgX19pbmJ5dGVzbGVmdCwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqKl9fcmVz dHJpY3QgX19vdXRidWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBf X291dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSB0 aHJvdyAoKTsKCn0KIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMu aCIgMiAzCgoKbmFtZXNwYWNlIHN0ZAp7CgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYt cGMtbGludXgtZ251L2JpdHMvY3R5cGVfYmFzZS5oIiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlw ZV9iYXNlCiAgewoKICAgIHR5cGVkZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBl ZGVmIHVuc2lnbmVkIHNob3J0IG1hc2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9J U3VwcGVyOwogICAgc3RhdGljIGNvbnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRp YyBjb25zdCBtYXNrIGFscGhhID0gX0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdp dCA9IF9JU2RpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0Owog ICAgc3RhdGljIGNvbnN0IG1hc2sgc3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBt YXNrIHByaW50ID0gX0lTcHJpbnQ7CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dy YXBoOwogICAgc3RhdGljIGNvbnN0IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBj b25zdCBtYXNrIHB1bmN0ID0gX0lTcHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9 IF9JU2FsbnVtOwogIH07CiMgNTQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFj ZXRzLmgiIDIgMwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgX19jdHlw ZV9hYnN0cmFjdF9iYXNlIDogcHVibGljIGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBjdHlwZV9iYXNl CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAg ICBib29sCiAgICAgIGlzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19pcyhfX20sIF9fYyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgaXMoY29uc3QgY2hhcl90eXBlICpfX2xvLCBjb25zdCBjaGFyX3R5cGUgKl9faGksIG1hc2sg Kl9fdmVjKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19pcyhfX2xvLCBfX2hpLCBfX3Zl Yyk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwgY29u c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX3NjYW5faXMoX19tLCBfX2xvLCBfX2hpKTsgfQoKICAgICAgY29uc3Qg Y2hhcl90eXBlKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Nj YW5fbm90KF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB0b3VwcGVy KGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvdXBwZXIoX19j KTsgfQoKICAgICAgY29uc3QgY2hhcl90eXBlKgogICAgICB0b3VwcGVyKGNoYXJfdHlwZSAqX19s bywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190 b3VwcGVyKF9fbG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG9sb3dlcihjaGFy X3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b2xvd2VyKF9fYyk7IH0K CiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgdG9sb3dlcihjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dl cihfX2xvLCBfX2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHdpZGVuKGNoYXIgX19jKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2MpOyB9CgogICAgICBjb25zdCBj aGFyKgogICAgICB3aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBjaGFy X3R5cGUqIF9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3dpZGVuKF9fbG8sIF9f aGksIF9fdG8pOyB9CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19jLCBjaGFy IF9fZGZhdWx0KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19jLCBfX2Rm YXVsdCk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgbmFycm93KGNvbnN0IGNoYXJf dHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgIGNoYXIgX19k ZmF1bHQsIGNoYXIgKl9fdG8pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25hcnJvdyhf X2xvLCBfX2hpLCBfX2RmYXVsdCwgX190byk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGV4cGxp Y2l0CiAgICAgIF9fY3R5cGVfYWJzdHJhY3RfYmFzZShzaXplX3QgX19yZWZzID0gMCk6IGxvY2Fs ZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9fY3R5cGVfYWJzdHJh Y3RfYmFzZSgpIHsgfQoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBj aGFyX3R5cGUgX19jKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoK ICAgICAgZG9faXMoY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGks CiAgICAgICAgICAgIG1hc2sqIF9fdmVjKSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0 IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyhtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBf X2xvLAogICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoK ICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19t LCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19oaSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91 cHBlcihjaGFyX3R5cGUpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNo YXJfdHlwZSkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAg IGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hh ciogX19sbywgY29uc3QgY2hhciogX19oaSwKICAgICAgICAgICAgICAgY2hhcl90eXBlKiBfX2Rl c3QpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90 eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJf dHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkg Y29uc3QgPSAwOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNz IGN0eXBlIDogcHVibGljIF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgY3R5cGU6Om1hc2sgbWFzazsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVf dCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hhclQ+KF9fcmVmcykgeyB9 CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgIHByb3RlY3RlZDoKICAgICAgdmlydHVh bAogICAgICB+Y3R5cGUoKSB7IH0KCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNr IF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9f bG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2Fu X2lzKG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSkgY29uc3QKICAgICAgeyByZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1hc2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8s CiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QKICAgICAgeyBy ZXR1cm4gX19oaTsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihj aGFyX3R5cGUgX19jKSBjb25zdAogICAgICB7IHJldHVybiBfX2M7IH0KCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3Qg Y2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CgogICAgICB2aXJ0 dWFsIGNoYXJfdHlwZQogICAgICBkb190b2xvd2VyKGNoYXJfdHlwZSBfX2MpIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9fYzsgfQoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv X3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0CiAg ICAgIHsgcmV0dXJuIF9faGk7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dp ZGVuKGNoYXIgX19jKSBjb25zdAogICAgICB7IHJldHVybiBjaGFyX3R5cGUoKTsgfQoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25z dCBjaGFyKiBfX2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3QKICAgICAgeyByZXR1cm4gX19o aTsgfQoKICAgICAgdmlydHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIg X19kZmF1bHQpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgY2hhciBfX2RmYXVsdCwgY2hh ciogX19kZXN0KSBjb25zdAogICAgICB7IHJldHVybiBfX2hpOyB9CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAg dGVtcGxhdGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFj dF9iYXNlPGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90 eXBlOwoKICAgIHByaXZhdGU6CgogICAgICBib29sIF9NX2RlbDsKICAgICAgX190b190eXBlIGNv bnN0JiBfTV90b3VwcGVyOwogICAgICBfX3RvX3R5cGUgY29uc3QmIF9NX3RvbG93ZXI7CiAgICAg IGNvbnN0IG1hc2sqIGNvbnN0JiBfTV9jdGFibGU7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxl OwoKICAgIHB1YmxpYzoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBj b25zdCBzaXplX3QgdGFibGVfc2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigt MSk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwg Ym9vbCBfX2RlbCA9IGZhbHNlLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBpbmxpbmUgYm9v bAogICAgICBpcyhtYXNrIF9fbSwgY2hhciBfX2MpIGNvbnN0OwoKICAgICAgaW5saW5lIGNvbnN0 IGNoYXIqCiAgICAgIGlzKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIG1hc2sq IF9fdmVjKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX2lzKG1h c2sgX19tLCBjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgICAg IGlubGluZSBjb25zdCBjaGFyKgogICAgICBzY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhciog X19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgY29uc3QgbWFzayoKICAgICAgdGFibGUoKSBjb25z dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9CgogICAgICBjb25zdCBtYXNrKgog ICAgICBjbGFzc2ljX3RhYmxlKCkgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9jdGFibGU7IH0K CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9faXMoY29uc3Qg Y2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksIG1hc2sqIF9fdmVjKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX2lzKG1hc2sg X19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9ub3QobWFzayBf X20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAgICAgICAgICAgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBw ZXIoY2hhcl90eXBlKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb190b3VwcGVyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1 YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj b25zdCBjaGFyKgogICAgICBkb193aWRlbihjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBf X2hpLCBjaGFyX3R5cGUqIF9fZGVzdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAg ZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFs IGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fbmFycm93KGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICAgICAgIGNoYXIgX19kZmF1bHQsIGNo YXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBjb25zdCBjdHlwZTxj aGFyPiYKICAgIHVzZV9mYWNldDxjdHlwZTxjaGFyPiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoK CgogIHRlbXBsYXRlPD4KICAgIGNsYXNzIGN0eXBlPHdjaGFyX3Q+IDogcHVibGljIF9fY3R5cGVf YWJzdHJhY3RfYmFzZTx3Y2hhcl90PgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiB3 Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3Y3R5cGVfdCBfX3dtYXNrX3R5cGU7CgoK ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShz aXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAg ICAgX01fY29udmVydF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0 dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sg X19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBl KgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19o aSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hh cl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAg ICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFy X3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBj b25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBj aGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9f dG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUq CiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkp IGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIq IF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBj b25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29u c3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAg ICAgY2hhciBfX2RmYXVsdCwgY2hhciogX19kZXN0KSBjb25zdDsKCiAgICB9OwoKICB0ZW1wbGF0 ZTw+CiAgICBjb25zdCBjdHlwZTx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxjdHlwZTx3Y2hhcl90 PiA+KGNvbnN0IGxvY2FsZSYgX19sb2MpOwoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4 Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVk ZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMwogIGJvb2wK ICBjdHlwZTxjaGFyPjo6CiAgaXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdAogIHsgcmV0dXJu IF9NX3RhYmxlW19fY10gJiBfX207IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAg aXMoY29uc3QgY2hhciogX19sb3csIGNvbnN0IGNoYXIqIF9faGlnaCwgbWFzayogX192ZWMpIGNv bnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoKQogICAgICAqX192ZWMrKyA9IF9NX3Rh YmxlWypfX2xvdysrXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0 eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaCAmJiAhKF9N X3RhYmxlWypfX2xvd10gJiBfX20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93Owog IH0KCiAgY29uc3QgY2hhcioKICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNv bnN0IGNoYXIqIF9fbG93LCBjb25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUg KF9fbG93IDwgX19oaWdoCiAgICAgICAgICAgJiYgKF9NX3RhYmxlWypfX2xvd10gJiBfX20pICE9 IDApCiAgICAgICsrX19sb3c7CiAgICByZXR1cm4gX19sb3c7CiAgfQojIDM5MyAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMiAzCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZV9ieW5hbWUgOiBwdWJsaWMgY3R5cGU8X0NoYXJUPgog ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CgogICAgICBl eHBsaWNpdAogICAgICBjdHlwZV9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMgPSAw KTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBlX2J5bmFtZSgpIHsg fQogICAgfTsKCgogIHRlbXBsYXRlPD4KICAgIGN0eXBlX2J5bmFtZTxjaGFyPjo6Y3R5cGVfYnlu YW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgcmVmcyk7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2NvZGVjdnQuaCIgMSAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb2Rl Y3Z0LmgiIDMKIyA1NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NvZGVjdnQuaCIgMwogIGNs YXNzIF9fZW5jX3RyYWl0cwogIHsKICBwdWJsaWM6CgoKCiAgICB0eXBlZGVmIGljb252X3QgX19k ZXNjX3R5cGU7CgogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGludCBfU19tYXhfc2l6 ZSA9IDMyOwoKICAgIGNoYXIgX01faW50X2VuY1tfU19tYXhfc2l6ZV07CgogICAgY2hhciBfTV9l eHRfZW5jW19TX21heF9zaXplXTsKCgogICAgX19kZXNjX3R5cGUgX01faW5fZGVzYzsKCiAgICBf X2Rlc2NfdHlwZSBfTV9vdXRfZGVzYzsKCgogICAgaW50IF9NX2V4dF9ib207CgoKICAgIGludCBf TV9pbnRfYm9tOwoKICBwdWJsaWM6CiAgICBfX2VuY190cmFpdHMoKQogICAgOiBfTV9pbl9kZXNj KDApLCBfTV9vdXRfZGVzYygwKSwgX01fZXh0X2JvbSgwKSwgX01faW50X2JvbSgwKQogICAgewoK CgoKICAgICAgc3RyY3B5KF9NX2ludF9lbmMsICJVQ1M0Iik7CgoKICAgICAgc3RyY3B5KF9NX2V4 dF9lbmMsIG5sX2xhbmdpbmZvKENPREVTRVQpKTsKICAgIH0KCiAgICBfX2VuY190cmFpdHMoY29u c3QgY2hhciogX19pbnQsIGNvbnN0IGNoYXIqIF9fZXh0LCBpbnQgX19pYm9tID0gMCwKICAgICAg ICAgICAgICAgICBpbnQgX19lYm9tID0gMCkKICAgIDogX01faW5fZGVzYygwKSwgX01fb3V0X2Rl c2MoMCksIF9NX2V4dF9ib20oMCksIF9NX2ludF9ib20oMCkKICAgIHsKICAgICAgc3RybmNweShf TV9pbnRfZW5jLCBfX2ludCwgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9NX2V4dF9lbmMs IF9fZXh0LCBfU19tYXhfc2l6ZSk7CiAgICB9CgoKCgoKCiAgICBfX2VuY190cmFpdHMoY29uc3Qg X19lbmNfdHJhaXRzJiBfX29iaikKICAgIHsKICAgICAgc3RybmNweShfTV9pbnRfZW5jLCBfX29i ai5fTV9pbnRfZW5jLCBfU19tYXhfc2l6ZSk7CiAgICAgIHN0cm5jcHkoX01fZXh0X2VuYywgX19v YmouX01fZXh0X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBfTV9leHRfYm9tID0gX19vYmouX01f ZXh0X2JvbTsKICAgICAgX01faW50X2JvbSA9IF9fb2JqLl9NX2ludF9ib207CiAgICB9CgogICAg fl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIGljb252X2Nsb3NlKF9NX2luX2Rlc2MpOwogICAg ICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgoKICAgIHZvaWQKICAgIF9NX2luaXQo KQogICAgewogICAgICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRf ZW5jKTsKICAgICAgX01fb3V0X2Rlc2MgPSBpY29udl9vcGVuKF9NX2V4dF9lbmMsIF9NX2ludF9l bmMpOwogICAgICBpZiAoX01fb3V0X2Rlc2MgPT0gaWNvbnZfdCgtMSkgfHwgX01faW5fZGVzYyA9 PSBpY29udl90KC0xKSkKICAgICAgICB7CgogICAgICAgIH0KICAgIH0KCiAgICBib29sCiAgICBf TV9nb29kKCkKICAgIHsKICAgICAgcmV0dXJuIF9NX291dF9kZXNjICYmIF9NX2luX2Rlc2MKICAg ICAgICAgICAgICYmIF9NX291dF9kZXNjICE9IGljb252X3QoLTEpICYmIF9NX2luX2Rlc2MgIT0g aWNvbnZfdCgtMSk7CiAgICB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRfaW5f ZGVzY3JpcHRvcigpCiAgICB7IHJldHVybiAmX01faW5fZGVzYzsgfQoKICAgIGNvbnN0IF9fZGVz Y190eXBlKgogICAgX01fZ2V0X291dF9kZXNjcmlwdG9yKCkKICAgIHsgcmV0dXJuICZfTV9vdXRf ZGVzYzsgfQoKICAgY29uc3QgY2hhcioKICAgIF9NX2dldF9pbnRlcm5hbF9lbmMoKQogICAgeyBy ZXR1cm4gX01faW50X2VuYzsgfQoKICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfZXh0ZXJuYWxf ZW5jKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9lbmM7IH0KCiAgICBpbnQKICAgIF9NX2dldF9leHRl cm5hbF9ib20oKQogICAgeyByZXR1cm4gX01fZXh0X2JvbTsgfQoKICAgIGludAogICAgX01fZ2V0 X2ludGVybmFsX2JvbSgpCiAgICB7IHJldHVybiBfTV9pbnRfYm9tOyB9CiAgfTsKCgoKCiAgY2xh c3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0gcmVzdWx0CiAgICB7CiAgICAg IG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAgbm9jb252CiAgICB9OwogIH07 CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5 cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZQogICAgOiBw dWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVk ZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5 cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoKCiAgICAgIHJlc3VsdAogICAg ICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBf X3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7 CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBfX2Zyb20sIF9fZnJvbV9lbmQs IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190bywgX190b19lbmQs IF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAgICB1bnNoaWZ0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAg ICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2VuZCxfX3RvX25leHQpOyB9Cgog ICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5 cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBp bnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBj b25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2luKF9fc3RhdGUsIF9fZnJvbSwg X19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdG8s IF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBpbnQKICAgICAgZW5jb2Rpbmco KSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2VuY29kaW5nKCk7IH0KCiAg ICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRocm93KCkKICAgICAgeyByZXR1 cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBpbnQKICAgICAgbGVuZ3RoKGNv bnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVfdCBfX21heCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9fZnJvbSwgX19lbmQsIF9fbWF4 KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgZXhw bGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApIDog bG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVhbAogICAgICB+X19jb2RlY3Z0 X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX291dChz dGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVybl90eXBlKiYgX19m cm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9f dG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0ID0gMDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBy ZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBlKiBfX3Rv LCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19lbmNvZGluZygpIGNv bnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2Nv bnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0 aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAg ICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdCA9IDA7 CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3RoKCkgY29uc3QgdGhyb3coKSA9 IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0 ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVjdnQKICAgIDogcHVibGljIF9f Y29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNlOjpyZXN1bHQgcmVzdWx0Owog ICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAgICB0eXBlZGVmIF9FeHRlcm5U IGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3RhdGVfdHlwZTsKCgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90 IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8X0ludGVyblQsX0V4 dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5jb2RlY3Z0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJu VCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNv ZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfU3RhdGVUPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjbGFzcyBjb2RlY3Z0PF9J bnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgOiBwdWJsaWMgX19jb2RlY3Z0X2Fi c3RyYWN0X2Jhc2U8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+CiAgICB7CiAgICBw dWJsaWM6CgogICAgICB0eXBlZGVmIGNvZGVjdnRfYmFzZTo6cmVzdWx0IHJlc3VsdDsKICAgICAg dHlwZWRlZiBfSW50ZXJuVCBpbnRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBfRXh0ZXJuVCBleHRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFpdHMgc3RhdGVfdHlwZTsKICAgICAgdHlw ZWRlZiBfX2VuY190cmFpdHM6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICB0eXBlZGVm IF9fZW5jX3RyYWl0cyBfX2VuY190eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoK ICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBf X2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5 cGU+KF9fcmVmcykKICAgICAgeyB9CgogICAgICBleHBsaWNpdAogICAgICBjb2RlY3Z0KF9fZW5j X3R5cGUqIF9fZW5jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBfX2NvZGVjdnRfYWJzdHJh Y3RfYmFzZTxpbnRlcm5fdHlwZSwgZXh0ZXJuX3R5cGUsIHN0YXRlX3R5cGU+KF9fcmVmcykKICAg ICAgeyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9 CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwg Y29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg ICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAg IGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAg ICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAg ICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9f bmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBl JiBfX3N0YXRlLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwK ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBp bnQKICAgICAgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29s CiAgICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBp bnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3Qg X19tYXgpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNv bnN0IHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5h bWUgX0V4dGVyblQ+CiAgICBsb2NhbGU6OmlkCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu VCwgX19lbmNfdHJhaXRzPjo6aWQ7CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVD4KICAgIGlu bGluZSBzaXplX3QKICAgIF9faWNvbnZfYWRhcHRvcihzaXplX3QoKmljb252X2Z1bmMpKGljb252 X3QsIF9ULCBzaXplX3QqLCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGlj b252X3QgY2QsIGNoYXIqKiBpbmJ1Ziwgc2l6ZV90KiBpbmJ5dGVzbGVmdCwKICAgICAgICAgICAg ICAgICAgICBjaGFyKiogb3V0YnVmLCBzaXplX3QqIG91dGJ5dGVzbGVmdCkKICAgIHsKICAgICAg cmV0dXJuIGljb252X2Z1bmMoY2QsIChfVClpbmJ1ZiwgaW5ieXRlc2xlZnQsIG91dGJ1Ziwgb3V0 Ynl0ZXNsZWZ0KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQKICAgIGNvZGVjdnQ8X0ludGVyblQs IF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRl LCBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgIGNvbnN0IGludGVybl90eXBl KiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAg IGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgZXh0 ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0CiAgICB7CiAgICAgIHJlc3VsdCBfX3JldCA9IGVy cm9yOwogICAgICBpZiAoX19zdGF0ZS5fTV9nb29kKCkpCiAgICAgICAgewogICAgICAgICAgdHlw ZWRlZiBzdGF0ZV90eXBlOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgICAgIGNvbnN0 IF9fZGVzY190eXBlKiBfX2Rlc2MgPSBfX3N0YXRlLl9NX2dldF9vdXRfZGVzY3JpcHRvcigpOwog ICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11bHRpcGxlID0gc2l6ZW9mKGludGVybl90eXBlKSAv IHNpemVvZihjaGFyKTsKICAgICAgICAgIHNpemVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChf X2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9 IHNpemVvZihleHRlcm5fdHlwZSkgLyBzaXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190 bGVuID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIq IF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBf X2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2lu dF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2lu dF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9t X2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0 aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVybl90eXBl KSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nh c3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8aW50 ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAg ICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAg ICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywg Jl9fdGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAg ICAgICAgICAgIGludGVybl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8aW50ZXJuX3R5cGUq PihfX2Zyb20pOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIq PihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252 LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKICAgICAgICAgIGlm IChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJv bV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlwZSo+KF9fY2Zyb20pOwog ICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihf X2N0byk7CiAgICAgICAgICAgICAgX19yZXQgPSBvazsKICAgICAgICAgICAgfQogICAgICAgICAg ZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0 PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJvbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAg ICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBpbnRlcm5fdHlw ZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9j YXN0PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAg X19yZXQgPSBlcnJvcjsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+ CiAgICBjb2RlY3Z0X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs IF9fZW5jX3RyYWl0cz46OgogICAgZG9fdW5zaGlmdChzdGF0ZV90eXBlJiBfX3N0YXRlLCBleHRl cm5fdHlwZSogX190bywKICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRl cm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJy b3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBl ZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3Qg X19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2luX2Rlc2NyaXB0b3IoKTsKICAg ICAgICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBz aXplb2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190 b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2Fz dDxjaGFyKj4oX190byk7CiAgICAgICAgICBzaXplX3QgX19jb252ID0gX19pY29udl9hZGFwdG9y KGljb252LCpfX2Rlc2MsIF9fbnVsbCwgX19udWxsLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAmX19jdG8sICZfX3RsZW4pOwoKICAgICAgICAgIGlmIChfX2NvbnYg IT0gc2l6ZV90KC0xKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl aW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgaWYgKF9f dGxlbiA9PSBfX3RtdWx0aXBsZSAqIChfX3RvX2VuZCAtIF9fdG8pKQogICAgICAgICAgICAgICAg X19yZXQgPSBub2NvbnY7CiAgICAgICAgICAgICAgZWxzZSBpZiAoX190bGVuID09IDApCiAgICAg ICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAg IF9fcmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICBfX3JldCA9IGVycm9yOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0 X2Jhc2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0 cz46OgogICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbSwKICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBleHRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVy bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25z dAogICAgewogICAgICByZXN1bHQgX19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01f Z29vZCgpKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5 cGUgX19kZXNjX3R5cGU7CiAgICAgICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19z dGF0ZS5fTV9nZXRfaW5fZGVzY3JpcHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fZm11 bHRpcGxlID0gc2l6ZW9mKGV4dGVybl90eXBlKSAvIHNpemVvZihjaGFyKTsKICAgICAgICAgIHNp emVfdCBfX2ZsZW4gPSBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKTsKICAgICAg ICAgIGNvbnN0IHNpemVfdCBfX3RtdWx0aXBsZSA9IHNpemVvZihpbnRlcm5fdHlwZSkgLyBzaXpl b2YoY2hhcik7CiAgICAgICAgICBzaXplX3QgX190bGVuID0gX190bXVsdGlwbGUgKiAoX190b19l bmQgLSBfX3RvKTsKCgoKICAgICAgICAgIGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxj aGFyKj4oX190byk7CiAgICAgICAgICBjaGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9f Y29udjsKCgoKCgoKICAgICAgICAgIGludCBfX2V4dF9ib20gPSBfX3N0YXRlLl9NX2dldF9leHRl cm5hbF9ib20oKTsKICAgICAgICAgIGlmIChfX2V4dF9ib20pCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzaXplX3QgX19zaXplID0gX19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAg ICBleHRlcm5fdHlwZSogX19jZml4ZWQgPSBzdGF0aWNfY2FzdDxleHRlcm5fdHlwZSo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKGV4dGVybl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAg ICAgICAgIF9fY2ZpeGVkWzBdID0gc3RhdGljX2Nhc3Q8ZXh0ZXJuX3R5cGU+KF9fZXh0X2JvbSk7 CiAgICAgICAgICAgICAgY2hhcl90cmFpdHM8ZXh0ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsg MSwgX19mcm9tLCBfX3NpemUpOwogICAgICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9j YXN0PGNoYXIqPihfX2NmaXhlZCk7CiAgICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFw dG9yKGljb252LCAqX19kZXNjLCAmX19jZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgJl9fZmxlbiwgJl9fY3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQogICAg ICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2Zp eGVkID0gY29uc3RfY2FzdDxleHRlcm5fdHlwZSo+KF9fZnJvbSk7CiAgICAgICAgICAgICAgX19j ZnJvbSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fY2ZpeGVkKTsKICAgICAgICAgICAgICBf X2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNvbnYsICpfX2Rlc2MsICZfX2Nmcm9tLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmX19mbGVuLCAmX19jdG8sICZfX3RsZW4p OwogICAgICAgICAgICB9CgoKICAgICAgICAgIGlmIChfX2NvbnYgIT0gc2l6ZV90KC0xKSkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxj b25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl aW50ZXJwcmV0X2Nhc3Q8aW50ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgX19yZXQg PSBvazsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7CiAgICAgICAg ICAgICAgaWYgKF9fZmxlbiA8IHN0YXRpY19jYXN0PHNpemVfdD4oX19mcm9tX2VuZCAtIF9fZnJv bSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fZnJvbV9uZXh0ID0gcmVp bnRlcnByZXRfY2FzdDxjb25zdCBleHRlcm5fdHlwZSo+KF9fY2Zyb20pOwogICAgICAgICAgICAg ICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwog ICAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRpYWw7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgX19yZXQgPSBlcnJvcjsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBpbnQKICAgIGNvZGVjdnQ8X0ludGVy blQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2VuY29kaW5nKCkgY29uc3QgdGhy b3coKQogICAgeyByZXR1cm4gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQ+CiAgICBib29sCiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwg X19lbmNfdHJhaXRzPjo6CiAgICBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAg eyByZXR1cm4gZmFsc2U7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1l IF9FeHRlcm5UPgogICAgaW50CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNf dHJhaXRzPjo6CiAgICBkb19sZW5ndGgoY29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXpl X3QgX19tYXgpIGNvbnN0CiAgICB7IHJldHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVf dD4oX19lbmQgLSBfX2Zyb20pKTsgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0 eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGludAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQs IF9fZW5jX3RyYWl0cz46OgogICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsg cmV0dXJuIDE7IH0KCgoKCiAgdGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFy LCBtYnN0YXRlX3Q+CiAgICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTxjaGFyLCBj aGFyLCBtYnN0YXRlX3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgaW50 ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBt YnN0YXRlX3Qgc3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAg IGV4cGxpY2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3Rl ZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQK ICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50 ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBl eHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4 dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5 cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICAgIGV4dGVybl90 eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmly dHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgZXh0ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbV9lbmQs IGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgIGludGVybl90eXBl KiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGludGVybl90eXBlKiYg X190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2VuY29kaW5nKCkg Y29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19hbHdheXNfbm9jb252 KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2xlbmd0aChjb25z dCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgICAg IGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygpOwogIH07CgoKCiAg dGVtcGxhdGU8PgogICAgY2xhc3MgY29kZWN2dDx3Y2hhcl90LCBjaGFyLCBtYnN0YXRlX3Q+CiAg ICA6IHB1YmxpYyBfX2NvZGVjdnRfYWJzdHJhY3RfYmFzZTx3Y2hhcl90LCBjaGFyLCBtYnN0YXRl X3Q+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIHdjaGFyX3QgaW50ZXJuX3R5cGU7 CiAgICAgIHR5cGVkZWYgY2hhciBleHRlcm5fdHlwZTsKICAgICAgdHlwZWRlZiBtYnN0YXRlX3Qg c3RhdGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0 CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+Y29kZWN2dCgpOwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9f b3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb20sCiAgICAg ICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgaW50ZXJuX3R5cGUq JiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5fdHlw ZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7 CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3Rh dGUsCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBlKiBfX3Rv X2VuZCwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7Cgog ICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLAogICAg ICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9f ZnJvbV9lbmQsCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAog ICAgICAgICAgICAgaW50ZXJuX3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAg ICAgICAgICAgIGludGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwK ICAgICAgaW50IGRvX2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwKICAg ICAgYm9vbCBkb19hbHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwK ICAgICAgaW50IGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNp emVfdCBfX21heCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro KCkgY29uc3QgdGhyb3coKTsKICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQs IHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBfU3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9i eW5hbWUgOiBwdWJsaWMgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9TdGF0ZVQ+CiAgICB7 CiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIGNvZGVjdnRfYnluYW1lKGNvbnN0IGNo YXIqLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJu VCwgX1N0YXRlVD4oX19yZWZzKSB7IH0KICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+Y29kZWN2dF9ieW5hbWUoKSB7IH0KICAgIH07CiMgNDE2ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgX051bWVyaWNfZ2V0OwoKCgoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9Gb3JtYXRfY2FjaGUKICAgIHsKICAgIHB1Ymxp YzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyX3Ry YWl0czxfQ2hhclQ+IHRyYWl0c190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hh clQ+IHN0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHN0cmluZ190eXBlOjpzaXpl X3R5cGUgc2l6ZV90eXBlOwoKCiAgICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU7CiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyPgogICAgICAgIGZyaWVuZCBjbGFz cyBfTnVtZXJpY19nZXQ7CiAgICAgIGZyaWVuZCBjbGFzcyBudW1fZ2V0PF9DaGFyVD47CiAgICAg IGZyaWVuZCBjbGFzcyBudW1fcHV0PF9DaGFyVD47CiAgICAgIGZyaWVuZCBjbGFzcyB0aW1lX2dl dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfZ2V0PF9DaGFyVD47CiAgICAgIGZy aWVuZCBjbGFzcyB0aW1lX3B1dDxfQ2hhclQ+OwogICAgICBmcmllbmQgY2xhc3MgbW9uZXlfcHV0 PF9DaGFyVD47CgoKCgogICAgICBzdGF0aWMgaW50IF9TX3B3b3JkX2l4OwoKCgogICAgICBib29s IF9NX3ZhbGlkOwoKCgogICAgICBzdGF0aWMgY29uc3QgY2hhciBfU19saXRlcmFsc1tdOwoKCgoK ICAgICAgZW51bQogICAgICB7CiAgICAgICAgX1NfbWludXMsCiAgICAgICAgX1NfcGx1cywKICAg ICAgICBfU194LAogICAgICAgIF9TX1gsCiAgICAgICAgX1NfZGlnaXRzLAogICAgICAgIF9TX2Rp Z2l0c19lbmQgPSBfU19kaWdpdHMgKyAxNiwKICAgICAgICBfU191ZGlnaXRzID0gX1NfZGlnaXRz X2VuZCwKICAgICAgICBfU191ZGlnaXRzX2VuZCA9IF9TX3VkaWdpdHMgKyAxNiwKICAgICAgICBf U19lZSA9IF9TX2RpZ2l0cyArIDE0LAogICAgICAgIF9TX0VlID0gX1NfdWRpZ2l0cyArIDE0CiAg ICAgIH07CgoKCgogICAgICBjaGFyX3R5cGUgX01fZGVjaW1hbF9wb2ludDsKCgoKCgogICAgICBj aGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKCgoKICAgICAgc3RyaW5nX3R5cGUgX01fdHJ1ZW5h bWU7CiAgICAgIHN0cmluZ190eXBlIF9NX2ZhbHNlbmFtZTsKCgoKICAgICAgYm9vbCBfTV91c2Vf Z3JvdXBpbmc7CgoKCiAgICAgIHN0cmluZyBfTV9ncm91cGluZzsKCiAgICAgIF9Gb3JtYXRfY2Fj aGUoKTsKCiAgICAgIH5fRm9ybWF0X2NhY2hlKCkgdGhyb3coKSB7IH0KCgoKCiAgICAgIHN0YXRp YyBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qCiAgICAgIF9TX2dldChpb3NfYmFzZSYgX19pb3MpOwoK ICAgICAgdm9pZAogICAgICBfTV9wb3B1bGF0ZShpb3NfYmFzZSYpOwoKICAgICAgc3RhdGljIHZv aWQKICAgICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXZlbnQsIGlvc19iYXNlJiBf X2lvcywgaW50IF9faXgpIHRocm93KCk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQ+CiAgICBpbnQgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19wd29yZF9peDsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY29uc3QgY2hhciBfRm9ybWF0X2NhY2hlPF9DaGFyVD46 OgogICAgX1NfbGl0ZXJhbHNbXSA9ICItK3hYMDEyMzQ1Njc4OWFiY2RlZjAxMjM0NTY3ODlBQkNE RUYiOwoKICAgdGVtcGxhdGU8PiBfRm9ybWF0X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7 CgogICB0ZW1wbGF0ZTw+IF9Gb3JtYXRfY2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xh c3MgX051bWVyaWNfZ2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgoKICAgICAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3Mg bnVtX2dldDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJU PgogICAgICBmcmllbmQgY2xhc3MgdGltZV9nZXQ7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5X2dldDsKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1lIF9Jbkl0ZXJUPgogICAgICBmcmll bmQgY2xhc3MgbnVtX3B1dDsKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXIsIHR5cGVuYW1l IF9Jbkl0ZXJUPgogICAgICBmcmllbmQgY2xhc3MgdGltZV9wdXQ7CiAgICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfSW5JdGVyVD4KICAgICAgZnJpZW5kIGNsYXNzIG1vbmV5 X3B1dDsKCiAgICBwcml2YXRlOgogICAgICBleHBsaWNpdAogICAgICBfTnVtZXJpY19nZXQoKSB7 IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfl9OdW1lcmljX2dldCgpIHsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIF9NX2dldF9kaWdpdHMoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCkg Y29uc3Q7CiAgICB9OwoKCiAgY29uc3QgaW50IF9NX2V4dHJhY3RfYnVmZmVyX2xlbmd0aCA9IDMy OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFz cyBudW1fZ2V0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlw ZTsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAg ICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9nZXQoc2l6 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90 eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192KSBjb25z dAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9 CgoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwg c2hvcnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgaW50JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0 KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAg ICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9f dikgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2Vyciwg X192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHVuc2lnbmVkIHNob3J0JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChf X2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYgX192KSBjb25zdAog ICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9Cgog ICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQs IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNp Z25lZCBsb25nJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwg X19pbywgX19lcnIsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlw ZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoKCiAgICAg IGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19l bmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJf dHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGRvdWJsZSYgX192KSBjb25zdAogICAgICB7IHJl dHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVy X3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNl JiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3Yp OyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsIH5udW1fZ2V0KCkgeyB9CgoKCgoKICAg ICAgdm9pZAogICAgICBfTV9leHRyYWN0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsIGNoYXIqIF9feHRyYywKICAgICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2Zw ID0gdHJ1ZSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmLCBib29sJikg Y29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwg aXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgc2hvcnQmKSBjb25zdDsK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgaW50JikgY29uc3Q7CgogICAgICB2aXJ0 dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQgKGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFz ZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVy X3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19i YXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGxvbmcgbG9uZyYpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBp b3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgICB1bnNpZ25l ZCBzaG9ydCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRl cl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHVuc2lnbmVkIGludCYpIGNvbnN0OwogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcmKSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwg aW9zX2Jhc2UmLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25l ZCBsb25nIGxvbmcmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl dChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19l cnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJsZSYpIGNvbnN0OwoKICAgICAgdmlydHVh bCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYs CiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXQoaXRlcl90eXBlLCBpdGVy X3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLAogICAgICAgICAgICAg dm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsK CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51bV9nZXQ8Y2hhciwgaXN0cmVhbWJ1Zl9pdGVy YXRvcjxjaGFyPiA+OjoKICAgIF9NX2V4dHJhY3QoaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBf X2JlZywKICAgICAgICAgICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyPiBfX2VuZCwgaW9z X2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgY2hh ciogX194dHJjLAogICAgICAgICAgICAgICBpbnQmIF9fYmFzZSwgYm9vbCBfX2ZwKSBjb25zdDsK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xh c3MgX051bWVyaWNfcHV0CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CiAgICBwcm90ZWN0ZWQ6 CiAgICAgIGV4cGxpY2l0CiAgICAgIF9OdW1lcmljX3B1dCgpIHsgfQoKICAgICAgdmlydHVhbAog ICAgICB+X051bWVyaWNfcHV0KCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgbnVtX3B1dCA6IHB1YmxpYyBsb2NhbGU6 OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6 aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fcHV0KHNpemVfdCBfX3JlZnMgPSAwKSA6 IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRl cl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNv bnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBf X2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUg X19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgdW5zaWduZWQg bG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBf X3YpOyB9CgoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFz ZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdAogICAgICB7IHJl dHVybiBkb19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAog ICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gZG9f cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBf X3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9 CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2Ys IGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICAg IHsgcmV0dXJuIGRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp bGwsCiAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1 dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFs CiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBib29sIF9fdikgY29u c3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3Nf YmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgX192KSBjb25zdDsKCgogICAgICB2aXJ0dWFs IGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBf X2ZpbGwsIGxvbmcgbG9uZyBfX3YpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAg ICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWdu ZWQgbG9uZykgY29uc3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCB1bnNpZ25lZCBsb25nIGxvbmcp IGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUs IGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJf dHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJf dHlwZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGws IGNvbnN0IHZvaWQqIF9fdikgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1 bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBz dHJpbmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAg ICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNh bmRzX3NlcDsKICAgICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV90 cnVlbmFtZTsKICAgICAgc3RyaW5nX3R5cGUgX01fZmFsc2VuYW1lOwoKICAgIHB1YmxpYzoKICAg ICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpm YWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgpOyB9CgogICAgICBl eHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6ZV90IF9fcmVmcyA9 IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5j dChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2ludCgpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAgICAgY2hhcl90eXBlCiAg ICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBkb190aG91c2FuZHNfc2Vw KCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygpIGNvbnN0CiAgICAgIHsgcmV0dXJu IGRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29u c3QKICAgICAgeyByZXR1cm4gZG9fdHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAg ICAgZmFsc2VuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZmFsc2VuYW1lKCk7IH0KCiAg ICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCkgeyB9CgogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fZGVjaW1hbF9wb2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg ZG9fdGhvdXNhbmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7 IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fZ3JvdXBpbmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAg ZG9fdHJ1ZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAg dmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJl dHVybiBfTV9mYWxzZW5hbWU7IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVt cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MgPSBfX251bGwpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBudW1wdW5jdDxfQ2hhclQ+OjppZDsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdm9pZAogICAgbnVtcHVuY3Q8X0NoYXJUPjo6X01f aW5pdGlhbGl6ZV9udW1wdW5jdChfX2NfbG9jYWxlICkKICAgIHsKCiAgICB9CgogIHRlbXBsYXRl PD4KICAgIHZvaWQKICAgIG51bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9f Y19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2No YXJfdD46Ol9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0X2J5bmFtZSA6IHB1Ymxp YyBudW1wdW5jdDxfQ2hhclQ+CiAgICB7CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVt cHVuY3Q7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0 CiAgICAgIG51bXB1bmN0X2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IG51bXB1bmN0PF9DaGFyVD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3Jl YXRlX2NfbG9jYWxlKF9NX2NfbG9jYWxlX251bXB1bmN0LCBfX3MpOwogICAgICAgIF9NX2luaXRp YWxpemVfbnVtcHVuY3QoX01fY19sb2NhbGVfbnVtcHVuY3QpOwogICAgICB9CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1wdW5jdF9ieW5hbWUoKQogICAgICB7IF9TX2Rl c3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbnVtcHVuY3QpOyB9CiAgICB9OwoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZh Y2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGUoc2l6ZV90IF9f cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaW50CiAgICAgIGNv bXBhcmUoY29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fbG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19jb21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsg fQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywg Y29uc3QgX0NoYXJUKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zv cm0oX19sbywgX19oaSk7IH0KCiAgICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9f bG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFz aChfX2xvLCBfX2hpKTsgfQoKICBwcm90ZWN0ZWQ6CiAgICAgIH5jb2xsYXRlKCkgeyB9CgogICAg ICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFyVCogX19sbzEsIGNvbnN0 IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2xvMiwgY29u c3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAg IGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29u c3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25zdCBfQ2hhclQqIF9fbG8s IGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+ CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46OmRvX2NvbXBhcmUoY29uc3QgY2hhciogX19sbzEs IGNvbnN0IGNoYXIqIF9faGkxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBj aGFyKiBfX2xvMiwgY29uc3QgY2hhciogX19oaTIpIGNvbnN0OwoKICB0ZW1wbGF0ZTw+CiAgICBz dHJpbmcKICAgIGNvbGxhdGU8Y2hhcj46OmRvX3RyYW5zZm9ybShjb25zdCBjaGFyKiBfX2xvLCBj b25zdCBjaGFyKiBfX2hpKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgbG9uZwogICAgY29sbGF0 ZTxjaGFyPjo6ZG9faGFzaChjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpKSBjb25z dDsKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+Ojpkb19jb21wYXJl KGNvbnN0IHdjaGFyX3QqIF9fbG8xLCBjb25zdCB3Y2hhcl90KiBfX2hpMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCogX19sbzIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QqIF9faGkyKSBjb25zdDsKCiAgdGVtcGxh dGU8PgogICAgd3N0cmluZwogICAgY29sbGF0ZTx3Y2hhcl90Pjo6ZG9fdHJhbnNmb3JtKGNvbnN0 IHdjaGFyX3QqIF9fbG8sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg d2NoYXJfdCogX19oaSkgY29uc3Q7CgogIHRlbXBsYXRlPD4KICAgIGxvbmcKICAgIGNvbGxhdGU8 d2NoYXJfdD46OmRvX2hhc2goY29uc3Qgd2NoYXJfdCogX19sbywgY29uc3Qgd2NoYXJfdCogX19o aSkgY29uc3Q7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjb2xsYXRl X2J5bmFtZSA6IHB1YmxpYyBjb2xsYXRlPF9DaGFyVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJUPiBzdHJpbmdfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGNvbGxhdGVfYnluYW1lKGNv bnN0IGNoYXIqLCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5jb2xsYXRlX2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAg Y29sbGF0ZV9ieW5hbWU8Y2hhcj46OmNvbGxhdGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3Qg X19yZWZzKTsKCiAgdGVtcGxhdGU8PgogICAgY29sbGF0ZV9ieW5hbWU8d2NoYXJfdD46OmNvbGxh dGVfYnluYW1lKGNvbnN0IGNoYXIqLCBzaXplX3QgX19yZWZzKTsKCgogIGNsYXNzIHRpbWVfYmFz ZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIGRhdGVvcmRlciB7IG5vX29yZGVyLCBkbXksIG1keSwg eW1kLCB5ZG0gfTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9J bkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMg dGltZV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxl OjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAw KQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9fcmVmcyksIF9NX2RheW5hbWVzKDApLCBfTV9tb250 aG5hbWVzKDApIHsgfQoKICAgICAgZGF0ZW9yZGVyCiAgICAgIGRhdGVfb3JkZXIoKSBjb25zdAog ICAgICB7IHJldHVybiBkb19kYXRlX29yZGVyKCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBn ZXRfdGltZShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAg ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAg ICAgeyByZXR1cm4gZG9fZ2V0X3RpbWUoX19zLCBfX2VuZCwgX19mLCBfX2VyciwgX190KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldF9kYXRlKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9fZiwKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190KSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXRfZGF0ZShfX3MsIF9fZW5k LCBfX2YsIF9fZXJyLCBfX3QpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0X3dlZWtkYXko aXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3QpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGRvX2dldF93ZWVrZGF5KF9fcyxfX2VuZCxfX2YsX19lcnIsX190KTsgfQoKICAgICAg aXRlcl90eXBlCiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyByZXR1cm4gZG9fZ2V0X21vbnRobmFtZShf X3MsX19lbmQsX19mLF9fZXJyLF9fdCk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfeWVh cihpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2YsCiAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAgICAgeyBy ZXR1cm4gZG9fZ2V0X3llYXIoX19zLF9fZW5kLF9fZixfX2VycixfX3QpOyB9CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1lX2dldCgpCiAgICAgIHsKICAgICAgICBkZWxl dGUgW10gX01fbW9udGhuYW1lczsKICAgICAgICBkZWxldGUgW10gX01fZGF5bmFtZXM7CiAgICAg IH0KCiAgICAgIHZpcnR1YWwgZGF0ZW9yZGVyCiAgICAgIGRvX2RhdGVfb3JkZXIoKSBjb25zdAog ICAgICB7IHJldHVybiB0aW1lX2Jhc2U6OnltZDsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUK ICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlICwgaW9zX2Jhc2UmLAog ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgLCB0bSogKSBjb25zdAogICAgICB7 IHJldHVybiBfX3M7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9kYXRl KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmICwgdG0qICkgY29uc3QKICAgICAgeyByZXR1cm4gX19zOyB9Cgog ICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19z LCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90 eXBlCiAgICAgIGRvX2dldF9tb250aG5hbWUoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYsCiAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9f ZXJyLCB0bSogX190KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dl dF95ZWFyKGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGlvc19iYXNlJiwKICAgICAgICAgICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIHRtKiApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9f czsgfQoKICAgICAgbXV0YWJsZSBiYXNpY19zdHJpbmc8X0NoYXJUPiogX01fZGF5bmFtZXM7CiAg ICAgIG11dGFibGUgYmFzaWNfc3RyaW5nPF9DaGFyVD4qIF9NX21vbnRobmFtZXM7CiAgICB9OwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6 OmlkIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OmlkOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyB0aW1lX2dldF9ieW5hbWUgOiBwdWJs aWMgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPgogICAgewogICAgcHVibGljOgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7Cgog ICAgICBleHBsaWNpdAogICAgICB0aW1lX2dldF9ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf X3JlZnMgPSAwKQogICAgICA6IHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj4oX19yZWZzKSB7IH0K ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgY2xhc3MgdGltZV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFz ZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAg IHR5cGVkZWYgX091dEl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7 CgogICAgICBleHBsaWNpdAogICAgICB0aW1lX3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2Nh bGU6OmZhY2V0IChfX3JlZnMpIHsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmICwgY2hhcl90eXBlICwKICAgICAgICAgIGNvbnN0IHRtKiAsIGNv bnN0IF9DaGFyVCogLAogICAgICAgICAgY29uc3QgX0NoYXJUKiApIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9fczsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgY29uc3QgdG0qIF9fdG1iLCBj aGFyIF9fZm9ybWF0LCBjaGFyIF9fbW9kaWZpZXIgPSAwKSBjb25zdAogICAgICB7IHJldHVybiBk b19wdXQoX19zLCBfX2YsIF9fZmlsbCwgX190bWIsIF9fZm9ybWF0LCBfX21vZGlmaWVyKTsgfQoK ICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+dGltZV9wdXQoKSB7IH0KCiAgICAg IHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYs IGNoYXJfdHlwZSwgY29uc3QgdG0qICwKICAgICAgICAgICAgIGNoYXIgLCBjaGFyICkgY29uc3QK ICAgICAgeyByZXR1cm4gX19zOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJ dGVyPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICBjbGFzcyB0aW1lX3B1dF9ieW5hbWUgOiBwdWJsaWMgdGltZV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj4KICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRp bWVfcHV0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogdGlt ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH50aW1lX3B1dF9ieW5hbWUoKSB7IH0KICAgIH07CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBjbGFzcyBtb25leV9nZXQg OiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9D aGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9j YWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXplX3QgX19yZWZz ID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5cGUKICAgICAg Z2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsCiAgICAgICAg ICBpb3NfYmFzZSYgX19mLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf X3VuaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBf X2YsIF9fZXJyLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5 cGUgX19zLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19mLAogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBj b25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19zLCBfX2VuZCwgX19pbnRsLCBfX2YsIF9fZXJy LCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5 X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwgaW9zX2Jh c2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIGxvbmcgZG91YmxlJiApIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9fczsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX3MsIGl0ZXJfdHlwZSAsIGJvb2wgLAogICAgICAgICAgICAgaW9zX2Jhc2UmICwgaW9z X2Jhc2U6Omlvc3RhdGUmICwKICAgICAgICAgICAgIHN0cmluZ190eXBlJiApIGNvbnN0CiAgICAg IHsgcmV0dXJuIF9fczsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6 aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBj bGFzcyBtb25leV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldAogICAgewogICAgcHVibGljOgog ICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX091dEl0ZXIgaXRl cl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmluZ190eXBlOwoK ICAgICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBtb25leV9w dXQoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAg aXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2Um IF9fZiwKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNv bnN0CiAgICAgIHsgcmV0dXJuIGRvX3B1dChfX3MsIF9faW50bCwgX19mLCBfX2ZpbGwsIF9fdW5p dHMpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p bnRsLCBpb3NfYmFzZSYgX19mLAogICAgICAgICAgY2hhcl90eXBlIF9fZmlsbCwgY29uc3Qgc3Ry aW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgICB7IHJldHVybiBkb19wdXQoX19zLCBfX2lu dGwsIF9fZiwgX19maWxsLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAg ZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlvc19iYXNlJiAsIGNoYXJfdHlwZSAsCiAgICAg ICAgICAgICBsb25nIGRvdWJsZSApIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fczsgfQoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wsIGlvc19i YXNlJiAsIGNoYXJfdHlwZSAsCiAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSYgKSBjb25z dAogICAgICB7IHJldHVybiBfX3M7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X3B1dDxfQ2hhclQsIF9P dXRJdGVyPjo6aWQ7CgogIHN0cnVjdCBtb25leV9iYXNlCiAgewogICAgZW51bSBwYXJ0IHsgbm9u ZSwgc3BhY2UsIHN5bWJvbCwgc2lnbiwgdmFsdWUgfTsKICAgIHN0cnVjdCBwYXR0ZXJuIHsgY2hh ciBmaWVsZFs0XTsgfTsKCiAgICBzdGF0aWMgY29uc3QgcGF0dGVybiBfU19kZWZhdWx0X3BhdHRl cm47CgoKCiAgICBzdGF0aWMgcGF0dGVybgogICAgX1NfY29uc3RydWN0X3BhdHRlcm4oY2hhciBf X3ByZWNlZWRzLCBjaGFyIF9fc3BhY2UsIGNoYXIgX19wb3NuKTsKICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGw+CiAgICBjbGFzcyBtb25leXB1bmN0IDogcHVibGlj IGxvY2FsZTo6ZmFjZXQsIHB1YmxpYyBtb25leV9iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpbnRsID0gX0ludGw7 CiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAgIGNoYXJfdHlw ZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRzX3NlcDsKICAg ICAgc3RyaW5nIF9NX2dyb3VwaW5nOwogICAgICBzdHJpbmdfdHlwZSBfTV9jdXJyX3N5bWJvbDsK ICAgICAgc3RyaW5nX3R5cGUgX01fcG9zaXRpdmVfc2lnbjsKICAgICAgc3RyaW5nX3R5cGUgX01f bmVnYXRpdmVfc2lnbjsKICAgICAgaW50IF9NX2ZyYWNfZGlnaXRzOwogICAgICBwYXR0ZXJuIF9N X3Bvc19mb3JtYXQ7CiAgICAgIHBhdHRlcm4gX01fbmVnX2Zvcm1hdDsKCiAgICBwdWJsaWM6CiAg ICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDApIDogbG9jYWxl OjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9tb25leXB1bmN0KCk7IH0KCiAg ICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MsIHNpemVfdCBf X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVf bW9uZXlwdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9wb2lu dCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoKICAg ICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiB0 aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGluZygp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0cmlu Z190eXBlCiAgICAgIGN1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f Y3Vycl9zeW1ib2woKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgcG9zaXRpdmVfc2lnbigp IGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Bvc2l0aXZlX3NpZ24oKTsgfQoKICAgICAg c3RyaW5nX3R5cGUKICAgICAgbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX25lZ2F0aXZlX3NpZ24oKTsgfQoKICAgICAgaW50CiAgICAgIGZyYWNfZGlnaXRzKCkg Y29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZnJhY19kaWdpdHMoKTsgfQoKICAgICAgcGF0 dGVybgogICAgICBwb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcG9z X2Zvcm1hdCgpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIG5lZ19mb3JtYXQoKSBjb25zdAogICAg ICB7IHJldHVybiB0aGlzLT5kb19uZWdfZm9ybWF0KCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAg IHZpcnR1YWwKICAgICAgfm1vbmV5cHVuY3QoKSB7IH0KCiAgICAgIHZpcnR1YWwgY2hhcl90eXBl CiAgICAgIGRvX2RlY2ltYWxfcG9pbnQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9kZWNpbWFs X3BvaW50OyB9CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190aG91c2FuZHNfc2Vw KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fdGhvdXNhbmRzX3NlcDsgfQoKICAgICAgdmlydHVh bCBzdHJpbmcKICAgICAgZG9fZ3JvdXBpbmcoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9ncm91 cGluZzsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAgICBkb19jdXJyX3N5bWJvbCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJfc3ltYm9sOyB9CgogICAgICB2aXJ0dWFsIHN0 cmluZ190eXBlCiAgICAgIGRvX3Bvc2l0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBf TV9wb3NpdGl2ZV9zaWduOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZ190eXBlCiAgICAgIGRvX25l Z2F0aXZlX3NpZ24oKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdhdGl2ZV9zaWduOyB9Cgog ICAgICB2aXJ0dWFsIGludAogICAgICBkb19mcmFjX2RpZ2l0cygpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIF9NX2ZyYWNfZGlnaXRzOyB9CgogICAgICB2aXJ0dWFsIHBhdHRlcm4KICAgICAgZG9fcG9z X2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc19mb3JtYXQ7IH0KCiAgICAgIHZp cnR1YWwgcGF0dGVybgogICAgICBkb19uZWdfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fbmVnX2Zvcm1hdDsgfQoKCiAgICAgIHZvaWQKICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1 bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX19udWxsKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGxvY2FsZTo6aWQgbW9uZXlwdW5jdDxfQ2hhclQs IF9JbnRsPjo6aWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAg IGNvbnN0IGJvb2wgbW9uZXlwdW5jdDxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxfQ2hh clQsIF9JbnRsPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgKQogICAgewoK ICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyPjo6X01faW5p dGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsKCiAgdGVtcGxhdGU8PgogICAg dm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90Pjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9f Y19sb2NhbGUgX19jbG9jKTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50 bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJU LCBfSW50bD4KICAgIHsKICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0Owog ICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpbnRsID0gX0ludGw7CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0X2J5bmFtZShj b25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IG1vbmV5cHVuY3Q8X0No YXJULCBfSW50bD4oX19yZWZzKQogICAgICB7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9N X2NfbG9jYWxlX21vbmV5cHVuY3QsIF9fcyk7CiAgICAgICAgX01faW5pdGlhbGl6ZV9tb25leXB1 bmN0KF9NX2NfbG9jYWxlX21vbmV5cHVuY3QpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAg ICB2aXJ0dWFsCiAgICAgIH5tb25leXB1bmN0X2J5bmFtZSgpCiAgICAgIHsgX1NfZGVzdHJveV9j X2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0X2J5bmFt ZTxfQ2hhclQsIF9JbnRsPjo6aW50bDsKCgogIHN0cnVjdCBtZXNzYWdlc19iYXNlCiAgewogICAg dHlwZWRlZiBpbnQgY2F0YWxvZzsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAg ICBjbGFzcyBtZXNzYWdlcyA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgbWVzc2FnZXNf YmFzZQogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKHNpemVfdCBf X3JlZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGNhdGFsb2cKICAg ICAgb3Blbihjb25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xv YykgY29uc3QKICAgICAgeyByZXR1cm4gZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKICAgICAgc3Ry aW5nX3R5cGUKICAgICAgZ2V0KGNhdGFsb2cgX19jLCBpbnQgX19zZXQsIGludCBfX21zZ2lkLCBj b25zdCBzdHJpbmdfdHlwZSYgX19zKSBjb25zdAogICAgICB7IHJldHVybiBkb19nZXQoX19jLF9f c2V0LF9fbXNnaWQsX19zKTsgfQoKICAgICAgdm9pZAogICAgICBjbG9zZShjYXRhbG9nIF9fYykg Y29uc3QKICAgICAgeyByZXR1cm4gZG9fY2xvc2UoX19jKTsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbAogICAgICB+bWVzc2FnZXMoKSB7IH0KCgoKICAgICAgdmlydHVhbCBjYXRhbG9n CiAgICAgIGRvX29wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+JiwgY29uc3QgbG9jYWxlJikg Y29uc3QKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlwZQogICAg ICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQgLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kZmF1bHQp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9fZGZhdWx0OyB9CgogICAgICB2aXJ0dWFsIHZvaWQKICAg ICAgZG9fY2xvc2UoY2F0YWxvZykgY29uc3QgeyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIG1lc3NhZ2VzPF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJsaWMgbWVz c2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFy X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7Cgog ICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBf X3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1lc3NhZ2Vz X2J5bmFtZSgpIHsgfQogICAgfTsKCiAgdGVtcGxhdGU8PgogICAgbWVzc2FnZXNfYnluYW1lPGNo YXI+OjptZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciosIHNpemVfdCBfX3JlZnMpOwoKICB0ZW1w bGF0ZTw+CiAgICBtZXNzYWdlc19ieW5hbWU8d2NoYXJfdD46Om1lc3NhZ2VzX2J5bmFtZShjb25z dCBjaGFyKiwgc2l6ZV90IF9fcmVmcyk7CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBf X2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0 eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAg IGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2Mp CiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9i YXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxp bmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg eyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6 Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnVwcGVy LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sIGlz bG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9m YWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6Omxvd2VyLCBfX2MpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FscGhh KF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8 Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbHBoYSwgX19jKTsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNkaWdpdChfQ2hh clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGlnaXQsIF9fYyk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJUIF9f YywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hh clQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3hkaWdpdChfQ2hhclQgX19jLCBj b25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCBfX2MsIGNvbnN0 IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9f bG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChfQ2hhclQgX19jLCBjb25zdCBsb2Nh bGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyku aXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUm IF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykudG91 cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBfQ2hh clQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0 dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLnRvbG93ZXIoX19jKTsgfQp9CiMg MzcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNpY19pb3MuaCIgMiAzCgpuYW1lc3BhY2Ug c3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg Y2xhc3MgYmFzaWNfaW9zIDogcHVibGljIGlvc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9z X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUg b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl ZGVmIGN0eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIG9zdHJlYW1idWZf aXRlcmF0b3I8X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRl ZiBudW1fcHV0PF9DaGFyVCwgX19vc3RyZWFtYnVmX2l0ZXI+IF9fbnVtcHV0X3R5cGU7CiAgICAg IHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1 Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0NoYXJULCBfX2lzdHJlYW1idWZfaXRlcj4g X19udW1nZXRfdHlwZTsKCgogICAgcHJpdmF0ZToKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIGNoYXJfdHlwZSBfTV9maWxsOwogICAgICBpb3N0YXRl IF9NX2V4Y2VwdGlvbjsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CiAgICAgIGlvc3RhdGUgX01fc3RyZWFtYnVmX3N0 YXRlOwoKCiAgICAgIGNvbnN0IF9fY3R5cGVfdHlwZSogX01faW9zX2ZjdHlwZTsKCiAgICAgIGNv bnN0IF9fbnVtcHV0X3R5cGUqIF9NX2ZudW1wdXQ7CgogICAgICBjb25zdCBfX251bWdldF90eXBl KiBfTV9mbnVtZ2V0OwoKICAgIHB1YmxpYzoKICAgICAgaW5saW5lIGNvbnN0IF9fY3R5cGVfdHlw ZSoKICAgICAgX01fZ2V0X2ZjdHlwZV9pb3Modm9pZCkKICAgICAgeyByZXR1cm4gX01faW9zX2Zj dHlwZTsgfQoKICAgICAgb3BlcmF0b3Igdm9pZCooKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5mYWlsKCkgPyAwIDogY29uc3RfY2FzdDxiYXNpY19pb3MqPih0aGlzKTsgfQoKICAgICAgaW5s aW5lIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFp bCgpOyB9CgogICAgICBpbmxpbmUgaW9zdGF0ZQogICAgICByZHN0YXRlKCkgY29uc3QKICAgICAg eyByZXR1cm4gX01fc3RyZWFtYnVmX3N0YXRlOyB9CgogICAgICBpbmxpbmUgdm9pZAogICAgICBj bGVhcihpb3N0YXRlIF9fc3RhdGUgPSBnb29kYml0KQogICAgICB7CiAgICAgICAgaWYgKHRoaXMt PnJkYnVmKCkpCiAgICAgICAgICBfTV9zdHJlYW1idWZfc3RhdGUgPSBfX3N0YXRlOwogICAgICAg IGVsc2UKICAgICAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc3RhdGUgfCBiYWRiaXQ7CiAg ICAgICAgaWYgKCh0aGlzLT5yZHN0YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAg ICAgX190aHJvd19pb3NfZmFpbHVyZSgiYmFzaWNfaW9zOjpjbGVhcihpb3N0YXRlKSBjYXVzZWQg ZXhjZXB0aW9uIik7CiAgICAgIH0KCiAgICAgIGlubGluZSB2b2lkCiAgICAgIHNldHN0YXRlKGlv c3RhdGUgX19zdGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0 YXRlKTsgfQoKICAgICAgaW5saW5lIGJvb2wKICAgICAgZ29vZCgpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPnJkc3RhdGUoKSA9PSAwOyB9CgogICAgICBpbmxpbmUgYm9vbAogICAgICBlb2Yo KSBjb25zdAogICAgICB7IHJldHVybiAodGhpcy0+cmRzdGF0ZSgpICYgZW9mYml0KSAhPSAwOyB9 CgogICAgICBpbmxpbmUgYm9vbAogICAgICBmYWlsKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRo aXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWlsYml0KSkgIT0gMDsgfQoKICAgICAgaW5saW5l IGJvb2wKICAgICAgYmFkKCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAm IGJhZGJpdCkgIT0gMDsgfQoKICAgICAgaW5saW5lIGlvc3RhdGUKICAgICAgZXhjZXB0aW9ucygp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2V4Y2VwdGlvbjsgfQoKICAgICAgaW5saW5lIHZvaWQK ICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAgX01fZXhj ZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVmX3N0YXRl KTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhpcy0+aW5p dChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoKICAgICAg aW5saW5lIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPioKICAgICAgdGllKCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fdGllOyB9CgogICAgICBpbmxpbmUgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+KgogICAgICB0aWUoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBf X3RpZXN0cikKICAgICAgewogICAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiog X19vbGQgPSBfTV90aWU7CiAgICAgICAgX01fdGllID0gX190aWVzdHI7CiAgICAgICAgcmV0dXJu IF9fb2xkOwogICAgICB9CgogICAgICBpbmxpbmUgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4qCiAgICAgIHJkYnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9 CgogICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgog ICAgICBjb3B5Zm10KGNvbnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgaW5saW5lIGNoYXJf dHlwZQogICAgICBmaWxsKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZmlsbDsgfQoKICAgICAg aW5saW5lIGNoYXJfdHlwZQogICAgICBmaWxsKGNoYXJfdHlwZSBfX2NoKQogICAgICB7CiAgICAg ICAgY2hhcl90eXBlIF9fb2xkID0gX01fZmlsbDsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAg ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29u c3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19j LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFy IF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz ZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29u c3QgbG9jYWxlOjpmYWNldCogX19mKQogICAgICB7CiAgICAgICAgYm9vbCBfX3JldCA9IGZhbHNl OwogICAgICAgIGlmIChfX2YpCiAgICAgICAgICBfX3JldCA9IHRydWU7CiAgICAgICAgZWxzZQog ICAgICAgICAgX190aHJvd19iYWRfY2FzdCgpOwogICAgICAgIHJldHVybiBfX3JldDsKICAgICAg fQoKICAgICAgdm9pZAogICAgICBfTV9jYWNoZV9mYWNldHMoY29uc3QgbG9jYWxlJiBfX2xvYyk7 CiAgICB9Owp9CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2Jhc2ljX2lvcy50Y2Mi IDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvYmFzaWNfaW9zLnRjYyIgMwpuYW1l c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+ CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+OjpyZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19z YikKICAgIHsKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0g X01fc3RyZWFtYnVmOwogICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVh cigpOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAg YmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3Jo cykKICAgIHsKCgoKCiAgICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX2xpbWl0 IDw9IF9TX2xvY2FsX3dvcmRzKSA/CiAgICAgICAgX01fd29yZF9hcnJheSA6IG5ldyBfV29yZHNb X19yaHMuX01fd29yZF9saW1pdF07CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9iYXNp Y19pb3MudGNjIiAzCiAgICAgIF9DYWxsYmFja19saXN0KiBfX2NiID0gX19yaHMuX01fY2FsbGJh Y2tzOwogICAgICBpZiAoX19jYikKICAgICAgICBfX2NiLT5fTV9hZGRfcmVmZXJlbmNlKCk7CiAg ICAgIF9NX2NhbGxfY2FsbGJhY2tzKGVyYXNlX2V2ZW50KTsKICAgICAgaWYgKF9NX3dvcmRzICE9 IF9NX3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOwogICAgICBfTV9kaXNw b3NlX2NhbGxiYWNrcygpOwoKICAgICAgX01fY2FsbGJhY2tzID0gX19jYjsKICAgICAgZm9yIChp bnQgX19pID0gMDsgX19pIDwgX19yaHMuX01fd29yZF9saW1pdDsgKytfX2kpCiAgICAgICAgX193 b3Jkc1tfX2ldID0gX19yaHMuX01fd29yZHNbX19pXTsKICAgICAgaWYgKF9NX3dvcmRzICE9IF9N X3dvcmRfYXJyYXkpCiAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmRzOwogICAgICBfTV93b3JkcyA9 IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfbGltaXQgPSBfX3Jocy5fTV93b3JkX2xpbWl0OwoKICAg ICAgdGhpcy0+ZmxhZ3MoX19yaHMuZmxhZ3MoKSk7CiAgICAgIHRoaXMtPndpZHRoKF9fcmhzLndp ZHRoKCkpOwogICAgICB0aGlzLT5wcmVjaXNpb24oX19yaHMucHJlY2lzaW9uKCkpOwogICAgICB0 aGlzLT50aWUoX19yaHMudGllKCkpOwogICAgICB0aGlzLT5maWxsKF9fcmhzLmZpbGwoKSk7Cgog ICAgICB0aGlzLT5leGNlcHRpb25zKF9fcmhzLmV4Y2VwdGlvbnMoKSk7CgogICAgICBfTV9jYWxs X2NhbGxiYWNrcyhjb3B5Zm10X2V2ZW50KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjaGFyCiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6bmFycm93KGNoYXJfdHlwZSBfX2MsIGNoYXIgX19k ZmF1bHQpIGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT5uYXJyb3coX19jLCBfX2Rm YXVsdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBfX2Mp IGNvbnN0CiAgICB7IHJldHVybiBfTV9pb3NfZmN0eXBlLT53aWRlbihfX2MpOyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBsb2NhbGUKICAgIGJh c2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+OjppbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAg ewogICAgICBsb2NhbGUgX19vbGQodGhpcy0+Z2V0bG9jKCkpOwogICAgICBpb3NfYmFzZTo6aW1i dWUoX19sb2MpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX19sb2MpOwogICAgICBpZiAodGhpcy0+ cmRidWYoKSAhPSAwKQogICAgICAgIHRoaXMtPnJkYnVmKCktPnB1YmltYnVlKF9fbG9jKTsKICAg ICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6aW5p dChiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKCiAgICAgIGlv c19iYXNlOjpfTV9pbml0KCk7CiAgICAgIF9NX2NhY2hlX2ZhY2V0cyhfTV9pb3NfbG9jYWxlKTsK ICAgICAgX01fdGllID0gMDsKICAgICAgX01fZmlsbCA9IHRoaXMtPndpZGVuKCcgJyk7CiAgICAg IF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9IF9fc2I7CiAgICAg IF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0OwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBi YXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYg X19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYykpCiAg ICAgICAgX01faW9zX2ZjdHlwZSA9ICZ1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2xvYyk7Cgog ICAgICBpZiAoaGFzX2ZhY2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVt cHV0ID0gJnVzZV9mYWNldDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGlmIChoYXNfZmFj ZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpKQogICAgICAgIF9NX2ZudW1nZXQgPSAmdXNlX2ZhY2V0 PF9fbnVtZ2V0X3R5cGU+KF9fbG9jKTsKICAgIH0KfQojIDIxNCAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyA0NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pb3MuaCIgMiAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5o IiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAxIDMKIyA0 MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMwoKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDQ0 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAyIDMKIyA4NjMgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgZW51 bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2luZGV0ZXJtaW5hdGUgPSAtMSwKICAg IHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3RvX25lYXJlc3QgPSAxLAogICAgcm91 bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rvd2FyZF9uZWdfaW5maW5pdHkgPSAz CiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7CiAgICBkZW5vcm1faW5kZXRlcm1p bmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAgICBkZW5vcm1fcHJlc2VudCA9IDEK ICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1p dHMKICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBfVHAgbWluKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+ KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgbWF4KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2Fz dDxfVHA+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19z aWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgaW50IHJhZGl4ID0gMDsKCiAgICAgIHN0YXRpYyBfVHAgZXBzaWxvbigpIHRocm93KCkg eyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIHJvdW5kX2Vy cm9yKCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7 IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFO KCkgdGhyb3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBf VHAgc2lnbmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsg fQogICAgICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19j YXN0PF9UcD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9 IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg Y29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aXNfc3BlY2lhbGl6ZWQ7CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1pdHM8X1Rw Pjo6ZGlnaXRzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51 bWVyaWNfbGltaXRzPF9UcD46OmRpZ2l0czEwOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojppc19zaWduZWQ7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46 OmlzX2ludGVnZXI7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAg IG51bWVyaWNfbGltaXRzPF9UcD46OmlzX2V4YWN0OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OnJhZGl4OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBpbnQKICAgIG51bWVyaWNfbGltaXRzPF9UcD46Om1p bl9leHBvbmVudDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgaW50CiAgICBu dW1lcmljX2xpbWl0czxfVHA+OjptaW5fZXhwb25lbnQxMDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgY29uc3QgaW50CiAgICBudW1lcmljX2xpbWl0czxfVHA+OjptYXhfZXhwb25lbnQ7 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGludAogICAgbnVtZXJpY19saW1p dHM8X1RwPjo6bWF4X2V4cG9uZW50MTA7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNv bnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46Omhhc19pbmZpbml0eTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6 aGFzX3F1aWV0X05hTjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAog ICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX3NpZ25hbGluZ19OYU47CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZQogICAgbnVtZXJpY19saW1p dHM8X1RwPjo6aGFzX2Rlbm9ybTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3Qg Ym9vbAogICAgbnVtZXJpY19saW1pdHM8X1RwPjo6aGFzX2Rlbm9ybV9sb3NzOwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBjb25zdCBib29sCiAgICBudW1lcmljX2xpbWl0czxfVHA+Ojpp c19pZWM1NTk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51 bWVyaWNfbGltaXRzPF9UcD46OmlzX2JvdW5kZWQ7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGNvbnN0IGJvb2wKICAgIG51bWVyaWNfbGltaXRzPF9UcD46OmlzX21vZHVsbzsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29uc3QgYm9vbAogICAgbnVtZXJpY19saW1pdHM8X1Rw Pjo6dHJhcHM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbnN0IGJvb2wKICAgIG51 bWVyaWNfbGltaXRzPF9UcD46OnRpbnluZXNzX2JlZm9yZTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUKICAgIG51bWVyaWNfbGltaXRzPF9UcD46 OnJvdW5kX3N0eWxlOwoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8 Ym9vbD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIGJvb2wgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsg fQoKICAgICAgc3RhdGljIGJvb2wgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiB0cnVlOyB9 CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSAxOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp eCA9IDI7CiAgICAgIHN0YXRpYyBib29sIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiBmYWxzZTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh dGljIGJvb2wgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9CiAgICAg IHN0YXRpYyBib29sIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7IH0K ICAgICAgc3RhdGljIGJvb2wgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g ZmFsc2U7IH0KICAgICAgc3RhdGljIGJvb2wgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAgdGVt cGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFyIG1p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBzdGF0 aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAgICAg c3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAg ICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIoKTsg fQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g Y2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgY2hh ciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0YXRp YyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAg IHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIo KTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVj NTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBj b25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3Nf YmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3Vu ZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMTMzICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBudW1lcmlj X2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDM7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp OyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsK ICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNp Z25lZCBjaGFyPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBtaW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGNoYXIgbWF4KCkgdGhyb3coKQogICAg ICB7IHJldHVybiAoMTI3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAzOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBj aGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVu c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIGlu ZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFy PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFy IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGNoYXI+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3Vu ZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVy aWNfbGltaXRzPHdjaGFyX3Q+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNp YWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IG1pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gKHdjaGFyX3QpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyB3Y2hh cl90IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKHdjaGFyX3QpMjE0NzQ4MzY0N0w7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzMTAgPSAxMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1 ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRp eCA9IDI7CiAgICAgIHN0YXRpYyB3Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyB3Y2hhcl90IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0K ICAgICAgc3RhdGljIHdjaGFyX3QgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3 Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gd2NoYXJfdCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9t aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9y b3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxMzAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpbWl0cy5oIiAzCiAgdGVtcGxhdGU8Pgog ICAgc3RydWN0IG51bWVyaWNfbGltaXRzPHNob3J0PgogICAgewogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAgICBzdGF0aWMgc2hvcnQgbWluKCkgdGhy b3coKQogICAgICB7IHJldHVybiAoLTMyNzY3IC0gMSk7IH0KICAgICAgc3RhdGljIHNob3J0IG1h eCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gMzI3Njc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gMTU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA1OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3Qg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHNo b3J0IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHNo b3J0IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7 CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25h bGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBo YXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rl bm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgc2hvcnQgaW5maW5pdHkoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHF1aWV0X05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0aWMgc2hvcnQgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQogICAgICBzdGF0 aWMgc2hvcnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc2hvcnQoKTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21v ZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGlj IGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87 CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5z aWduZWQgc2hvcnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVk ID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBtaW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1heCgpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKDMyNzY3ICogMiArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IGRpZ2l0cyA9IDE2OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9 IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5z aWduZWQgc2hvcnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgc2hvcnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQg bWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9 IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxv YXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBzaG9ydCBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsg fQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgc2hvcnQ+KDApOyB9CiAgICAgIHN0YXRp YyB1bnNpZ25lZCBzaG9ydCBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4K ICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxpbnQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBpbnQgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAoaW50KSgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMg aW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGludCkyMTQ3NDgzNjQ3TDsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMTsKICAgICAgc3RhdGljIGNvbnN0IGludCBk aWdpdHMxMCA9IDEwOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0g MjsKICAgICAgc3RhdGljIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9 CiAgICAgIHN0YXRpYyBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7 IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4 X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7 CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf ZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBpbnQgaW5maW5p dHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oMCk7IH0KICAgICAg c3RhdGljIGludCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0 PGludD4oMCk7IH0KICAgICAgc3RhdGljIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVs byA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg ICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWdu ZWQgaW50PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRy dWU7CgogICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMDsgfQogICAgICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuICh1bnNpZ25lZCkoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEw ID0gMTA7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAg ICAgc3RhdGljIHVuc2lnbmVkIGludCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhw b25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRp YyB1bnNpZ25lZCBpbnQgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGludD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBxdWlldF9O YU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGludD4oMCk7 IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGludCBzaWduYWxpbmdfTmFOKCkgdGhyb3coKQogICAg ICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nh c3Q8dW5zaWduZWQgaW50PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9y ZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5 bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3Ry dWN0IG51bWVyaWNfbGltaXRzPGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIG1pbigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIG1heCgp IHRocm93KCkKICAgICAgeyByZXR1cm4gMjE0NzQ4MzY0N0w7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBpbnQgZGlnaXRzID0gMzE7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxMDsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4 YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRp YyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj IGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt aW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2ln bmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxl IGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf ZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u ZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDAp OyB9CiAgICAgIHN0YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0g ZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07 CgoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBs b25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7 CgogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDA7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJl dHVybiAoMjE0NzQ4MzY0N0wgKiAyVSArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0cyA9IDMyOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTA7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0 cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMg Y29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gMDsK CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9k ZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxv bmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIHF1aWV0X05hTigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAg c3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0g cm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBu dW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0 YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiA5MjIzMzcyMDM2ODU0 Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0gNjM7CiAgICAgIHN0 YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgZXBzaWxvbigpIHRocm93 KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9y KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1p bl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBj b25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFz X2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4g PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVu b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFs c2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+ KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9u ZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxv bmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRy YXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJv dW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKCgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51 bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmcgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg bG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIHVuc2ln bmVkIGxvbmcgbG9uZyBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICg5MjIzMzcyMDM2ODU0 Nzc1ODA3TEwgKiAyVUxMICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g NjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxOTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfc2lnbmVkID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2lu dGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgbG9u ZyBsb25nIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGxvbmcgbG9uZyByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4g MDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAwOwogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0g MDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9h dF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgbG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25n IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZyBsb25nPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyBsb25nIHNpZ25hbGlu Z19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmcg bG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nIGxvbmc+KDAp OyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96 ZXJvOwogICAgfTsKCgoKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8 ZmxvYXQ+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsKCiAgICAgIHN0YXRpYyBmbG9hdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTc1 NDk0MzVlLTM4RjsgfQogICAgICBzdGF0aWMgZmxvYXQgbWF4KCkgdGhyb3coKQogICAgICB7IHJl dHVybiAzLjQwMjgyMzQ3ZSszOEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzID0g MjQ7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA2OwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19zaWduZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRl Z2VyID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgZmxvYXQgZXBzaWxv bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4xOTIwOTI5MGUtMDdGOyB9CiAgICAgIHN0YXRp YyBmbG9hdCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMS4wRjsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTI1OwogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudDEwID0gLTM3OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudCA9IDEyODsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDM4 OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgZmxvYXQgaW5m aW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3RhdGljIGZsb2F0 IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAgICBzdGF0aWMg ZmxvYXQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsgfQogICAg ICBzdGF0aWMgZmxvYXQgZGVub3JtX21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wRjsg fQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19tb2R1bG8gPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRf emVybzsKICAgIH07CiMgMTgyMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saW1pdHMu aCIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIw MTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJs ZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2 OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0 eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAg ICAgZGVub3JtX2Fic2VudDs7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9z cyA9IGZhbHNlOzsKCiAgICAgIHN0YXRpYyBkb3VibGUgaW5maW5pdHkoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHF1aWV0X05hTigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgc2lnbmFsaW5nX05hTigp IHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CiAgICAgIHN0YXRpYyBkb3VibGUgZGVub3Jt X21pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMC4wOyB9CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRl ZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3Vu ZF9zdHlsZSByb3VuZF9zdHlsZSA9CiAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAg ICB9OwojIDE5MDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp YyBsb25nIGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEy MDkzNTA2MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygp CiAgICAgIHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBz dGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gMTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy biAxLjA4NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91Ymxl IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9CgogICAgICBzdGF0 aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkz MjsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAg ICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0KICAgICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmlu aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRv dWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3Rh dGljIGxvbmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu MEw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3Jl ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHls ZSA9CiAgICAgICAgICAgICAgICAgICAgcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE5ODAg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbGltaXRzLmgiIDMKfQojIDQxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lzdHJlYW0uaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFz aWNfaXN0cmVhbSA6IHZpcnR1YWwgcHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAg ICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+ IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0 cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hh clQsIF9UcmFpdHM+IF9faXN0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9nZXQ8X0No YXJULCBfX2lzdHJlYW1idWZfaXRlcj4gX19udW1nZXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlw ZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCiAgICBwcm90ZWN0ZWQ6CgogICAgICBzdHJlYW1zaXpl IF9NX2djb3VudDsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pc3Ry ZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsKICAgICAgICB0aGlzLT5pbml0KF9f c2IpOwogICAgICAgIF9NX2djb3VudCA9IHN0cmVhbXNpemUoMCk7CiAgICAgIH0KCiAgICAgIHZp cnR1YWwKICAgICAgfmJhc2ljX2lzdHJlYW0oKQogICAgICB7IF9NX2djb3VudCA9IHN0cmVhbXNp emUoMCk7IH0KCgogICAgICBjbGFzcyBzZW50cnk7CiAgICAgIGZyaWVuZCBjbGFzcyBzZW50cnk7 CgoKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KF9faXN0cmVhbV90eXBl JiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAg IG9wZXJhdG9yPj4oX19pb3NfdHlwZSYgKCpfX3BmKShfX2lvc190eXBlJikpOwoKICAgICAgX19p c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oaW9zX2Jhc2UmICgqX19wZikoaW9zX2Jhc2Um KSk7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHNob3J0JiBfX24pOwoKICAg ICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgc2hvcnQmIF9fbik7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihpbnQmIF9fbik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBpbnQmIF9fbik7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nJiBfX24pOwoKICAgICAg X19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odW5zaWduZWQgbG9uZyYgX19uKTsKCgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGxvbmcmIF9fbik7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nIGxvbmcm IF9fbik7CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9f Zik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihkb3VibGUmIF9fZik7 CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihsb25nIGRvdWJsZSYgX19m KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX3ApOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19zdHJlYW1idWZfdHlwZSog X19zYik7CgoKICAgICAgaW5saW5lIHN0cmVhbXNpemUKICAgICAgZ2NvdW50KHZvaWQpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIF9NX2djb3VudDsgfQoKICAgICAgaW50X3R5cGUKICAgICAgZ2V0KHZv aWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChjaGFyX3R5cGUmIF9fYyk7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXpl IF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0cmVhbV90eXBlJgog ICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgICB7IHJldHVybiBn ZXQoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUgX19kZWxpbSk7Cgog ICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAgICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBf X3NiKQogICAgICB7IHJldHVybiBnZXQoX19zYiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24sIGNoYXJfdHlwZSBfX2RlbGltKTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYK ICAgICAgZ2V0bGluZShjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0 dXJuIGdldGxpbmUoX19zLCBfX24sIHRoaXMtPndpZGVuKCdcbicpKTsgfQoKICAgICAgX19pc3Ry ZWFtX3R5cGUmCiAgICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiA9IDEsIGludF90eXBlIF9fZGVs aW0gPSB0cmFpdHNfdHlwZTo6ZW9mKCkpOwoKICAgICAgaW50X3R5cGUKICAgICAgcGVlayh2b2lk KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJl YW1zaXplIF9fbik7CgogICAgICBzdHJlYW1zaXplCiAgICAgIHJlYWRzb21lKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgcHV0YmFj ayhjaGFyX3R5cGUgX19jKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICB1bmdldCh2b2lk KTsKCiAgICAgIGludAogICAgICBzeW5jKHZvaWQpOwoKICAgICAgcG9zX3R5cGUKICAgICAgdGVs bGcodm9pZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cocG9zX3R5cGUpOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtnKG9mZl90eXBlLCBpb3NfYmFzZTo6c2Vl a2Rpcik7CgogICAgcHJpdmF0ZToKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0 b3I9KGNvbnN0IF9faXN0cmVhbV90eXBlJik7CgogICAgICBiYXNpY19pc3RyZWFtKGNvbnN0IF9f aXN0cmVhbV90eXBlJik7CgogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpz ZW50cnkKICAgIHsKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBl OwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFt YnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9f aXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0 eXBlX3R5cGUgX19jdHlwZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6Omlu dF90eXBlIF9faW50X3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBzZW50cnkoYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBib29sIF9fbm9za2lwd3MgPSBmYWxzZSk7Cgog ICAgICBvcGVyYXRvciBib29sKCkgeyByZXR1cm4gX01fb2s7IH0KCiAgICBwcml2YXRlOgogICAg ICBib29sIF9NX29rOwogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJh dG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQmIF9fYyk7 CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFp dHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX2luLCB1 bnNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19pbiA+PiByZWludGVycHJldF9jYXN0 PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXImIF9fYykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl aW50ZXJwcmV0X2Nhc3Q8Y2hhciY+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hh clQqIF9fcyk7CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPGNo YXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYg X19pbiwgdW5zaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08Y2hhcixfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxj aGFyLF9UcmFpdHM+JiBfX2luLCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9faW4g Pj4gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19zKSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvc3RyZWFtCiAgICA6 IHB1YmxpYyBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4sCiAgICAgIHB1YmxpYyBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVk ZWYgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0 eXBlZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvc3RyZWFtKGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+KiBfX3NiKQogICAgICA6IF9faXN0cmVhbV90eXBlKF9fc2IpLCBfX29zdHJlYW1f dHlwZShfX3NiKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX2lvc3RyZWFt KCkgeyB9CiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgd3MoYmFzaWNfaXN0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzKTsKfQoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDMyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv aXN0cmVhbS50Y2MiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5o IiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9sb2NhbGUuaCIgMwoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQwICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xvY2FsZS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9sb2NhbGUuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9m YWNldHMudGNjIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jZXJybm8uaCIg MSAzCiMgMzggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCiMg MSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMiAzCgoKZXh0ZXJuICJDIiB7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIg MSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv bGludXgvZXJybm8uaCIgMSAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FzbS9lcnJuby5oIiAxIDMK IyA1ICIvdXNyL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMiAzCiMgMjYgIi91c3IvaW5jbHVkZS9i aXRzL2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCmV4dGVy biBpbnQgZXJybm87CgoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwojIDM3ICIvdXNyL2luY2x1ZGUvZXJybm8u aCIgMiAzCiMgNTUgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVybiBjaGFyICpwcm9ncmFt X2ludm9jYXRpb25fbmFtZSwgKnByb2dyYW1faW52b2NhdGlvbl9zaG9ydF9uYW1lOwoKCgp9CiMg NjkgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCnR5cGVkZWYgaW50IGVycm9yX3Q7CiMgMzkgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY2Vycm5vLmgiIDIgMwojIDM2ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY2xvY2FsZS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9jbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDEgMwojIDI2 ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIg MSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDMwICIv dXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsZS5o IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUy ICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2lt YWxfcG9pbnQ7CiAgY2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoK CgoKCiAgY2hhciAqaW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBj aGFyICptb25fZGVjaW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFy ICptb25fZ3JvdXBpbmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9z aWduOwogIGNoYXIgaW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIg cF9jc19wcmVjZWRlczsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNl ZGVzOwoKICBjaGFyIG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAg Y2hhciBuX3NpZ25fcG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50 X3Bfc2VwX2J5X3NwYWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9u X3NlcF9ieV9zcGFjZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9u X3NpZ25fcG9zbjsKIyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4g Y2hhciAqc2V0bG9jYWxlIChpbnQgX19jYXRlZ29yeSwgX19jb25zdCBjaGFyICpfX2xvY2FsZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIHN0cnVjdCBsY29udiAqbG9jYWxlY29udiAodm9pZCkgdGhyb3cg KCk7CiMgMTQxICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUveGxv Y2FsZS5oIiAxIDMKIyAxNDIgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMiAzCgoKCgoKCgpleHRl cm4gX19sb2NhbGVfdCBfX25ld2xvY2FsZSAoaW50IF9fY2F0ZWdvcnlfbWFzaywgX19jb25zdCBj aGFyICpfX2xvY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19iYXNlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgX19kdXBsb2NhbGUgKF9fbG9j YWxlX3QgX19kYXRhc2V0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgX19mcmVlbG9jYWxlIChf X2xvY2FsZV90IF9fZGF0YXNldCkgdGhyb3cgKCk7CgoKfQojIDM5ICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvc3RkX2Nsb2NhbGUuaCIgMiAzCgoKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcg OjpsY29udjsKICB1c2luZyA6OnNldGxvY2FsZTsKICB1c2luZyA6OmxvY2FsZWNvbnY7Cn0KIyAz NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NzdGRsaWIuaCIgMSAzCiMgMzggIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9saW1pdHMuaCIgMSAzCiMgMzkgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9sb2NhbGVfZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9tZW1vcnkuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9sb2NhbGVf ZmFjZXRzLnRjYyIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NidWZfaXRlci5o IiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAy IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NjdHlwZS5oIiAxIDMKIyA0MiAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyAzNyAiL3Vzci9pbmNsdWRlL2crKy12My90 eXBlaW5mbyIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9uIiAxIDMKIyAzOCAi L3Vzci9pbmNsdWRlL2crKy12My90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoKbmFtZXNw YWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTQgIi91c3Iv aW5jbHVkZS9nKystdjMvdHlwZWluZm8iIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgY2xhc3MgdHlw ZV9pbmZvCiAgewogIHB1YmxpYzoKCgoKCiAgICB2aXJ0dWFsIH50eXBlX2luZm8oKTsKCiAgcHJp dmF0ZToKCiAgICB0eXBlX2luZm8mIG9wZXJhdG9yPShjb25zdCB0eXBlX2luZm8mKTsKICAgIHR5 cGVfaW5mbyhjb25zdCB0eXBlX2luZm8mKTsKCiAgcHJvdGVjdGVkOgogICAgY29uc3QgY2hhciAq X19uYW1lOwoKICBwcm90ZWN0ZWQ6CiAgICBleHBsaWNpdCB0eXBlX2luZm8oY29uc3QgY2hhciAq X19uKTogX19uYW1lKF9fbikgeyB9CgogIHB1YmxpYzoKCgoKICAgIGNvbnN0IGNoYXIqIG5hbWUo KSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lOyB9CiMgOTcgIi91c3IvaW5jbHVkZS9nKystdjMv dHlwZWluZm8iIDMKICAgIGJvb2wgYmVmb3JlKGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0 CiAgICB7IHJldHVybiBfX25hbWUgPCBfX2FyZy5fX25hbWU7IH0KICAgIGJvb2wgb3BlcmF0b3I9 PShjb25zdCB0eXBlX2luZm8mIF9fYXJnKSBjb25zdAogICAgeyByZXR1cm4gX19uYW1lID09IF9f YXJnLl9fbmFtZTsgfQoKICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCB0eXBlX2luZm8mIF9fYXJn KSBjb25zdAogICAgeyByZXR1cm4gIW9wZXJhdG9yPT0oX19hcmcpOyB9CgoKICBwdWJsaWM6Cgog ICAgdmlydHVhbCBib29sIF9faXNfcG9pbnRlcl9wKCkgY29uc3Q7CgogICAgdmlydHVhbCBib29s IF9faXNfZnVuY3Rpb25fcCgpIGNvbnN0OwoKCgoKCgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX2Nh dGNoKGNvbnN0IHR5cGVfaW5mbyAqX190aHJfdHlwZSwgdm9pZCAqKl9fdGhyX29iaiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIF9fb3V0ZXIpIGNvbnN0OwoKCiAgICB2aXJ0 dWFsIGJvb2wgX19kb191cGNhc3QoY29uc3QgX19jeHhhYml2MTo6X19jbGFzc190eXBlX2luZm8g Kl9fdGFyZ2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX29ial9wdHIp IGNvbnN0OwogIH07CgoKCiAgY2xhc3MgYmFkX2Nhc3QgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewog IHB1YmxpYzoKICAgIGJhZF9jYXN0KCkgdGhyb3coKSB7IH0KICAgIHZpcnR1YWwgfmJhZF9jYXN0 KCkgdGhyb3coKTsKICB9OwoKCiAgY2xhc3MgYmFkX3R5cGVpZCA6IHB1YmxpYyBleGNlcHRpb24K ICB7CiAgcHVibGljOgogICAgYmFkX3R5cGVpZCAoKSB0aHJvdygpIHsgfQogICAgdmlydHVhbCB+ YmFkX3R5cGVpZCAoKSB0aHJvdygpOwogIH07Cn0KCn0KIyA0MyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX3ZlY3Rvci5oIiAxIDMKIyA2MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92 ZWN0b3IuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3RleGNlcHQuaCIg MSAzCiMgMzQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb25fZGVmaW5lcy5oIiAxIDMKIyAzNSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7Cgog IHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19i YWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsKCiAgdm9p ZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xvZ2ljX2Vy cm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJvcihjb25z dCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFyKiBfX3Mp OwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsKCiAgdm9p ZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190 aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdmVy Zmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRlcmZsb3df ZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWlsdXJlKGNv bnN0IGNoYXIqIF9fcyk7Cn0KIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0 b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGdvYmFzZS5oIiAx IDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2NCAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9jb25zdHJ1Y3QuaCIgMSAzCiMgNjUgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGRfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdW5p bml0aWFsaXplZC5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0 b3IuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMSAz CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjQg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfdmVjdG9yLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2Vw dGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZnVuY3Rl eGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX2V4Y2Vw dGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lkCiAgX190aHJvd19iYWRfdHlwZWlkKHZv aWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCiAg dm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBf X3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhy b3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X291dF9v Zl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19ydW50aW1lX2Vycm9y KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3JhbmdlX2Vycm9yKGNvbnN0IGNo YXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJmbG93X2Vycm9yKGNvbnN0IGNoYXIqIF9f cyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoK CiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29uc3QgY2hhciogX19zKTsKfQojIDY1ICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3ZlY3Rvci5oIiAyIDMKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyA2NiAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0bF92ZWN0b3IuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0b3IuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2NhdG9yLCBib29sIF9Jc1N0YXRpYz4KY2xhc3MgX1ZlY3Rvcl9hbGxvY19iYXNl IHsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0 b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgYWxsb2NhdG9yX3R5cGU7CiAgYWxsb2NhdG9y X3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9NX2RhdGFfYWxsb2NhdG9yOyB9 CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBf TV9kYXRhX2FsbG9jYXRvcihfX2EpLCBfTV9zdGFydCgwKSwgX01fZmluaXNoKDApLCBfTV9lbmRf b2Zfc3RvcmFnZSgwKQogIHt9Cgpwcm90ZWN0ZWQ6CiAgYWxsb2NhdG9yX3R5cGUgX01fZGF0YV9h bGxvY2F0b3I7CiAgX1RwKiBfTV9zdGFydDsKICBfVHAqIF9NX2ZpbmlzaDsKICBfVHAqIF9NX2Vu ZF9vZl9zdG9yYWdlOwoKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24pCiAgICB7IHJldHVy biBfTV9kYXRhX2FsbG9jYXRvci5hbGxvY2F0ZShfX24pOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRl KF9UcCogX19wLCBzaXplX3QgX19uKQogICAgeyBpZiAoX19wKSBfTV9kYXRhX2FsbG9jYXRvci5k ZWFsbG9jYXRlKF9fcCwgX19uKTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2NhdG9yPgpjbGFzcyBfVmVjdG9yX2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9 CgogIF9WZWN0b3JfYWxsb2NfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYpCiAgICA6IF9NX3N0 YXJ0KDApLCBfTV9maW5pc2goMCksIF9NX2VuZF9vZl9zdG9yYWdlKDApCiAge30KCnByb3RlY3Rl ZDoKICBfVHAqIF9NX3N0YXJ0OwogIF9UcCogX01fZmluaXNoOwogIF9UcCogX01fZW5kX29mX3N0 b3JhZ2U7CgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvY2F0b3I+ OjpfQWxsb2NfdHlwZSBfQWxsb2NfdHlwZTsKICBfVHAqIF9NX2FsbG9jYXRlKHNpemVfdCBfX24p CiAgICB7IHJldHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoX19uKTsgfQogIHZvaWQgX01fZGVh bGxvY2F0ZShfVHAqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2Nh dGUoX19wLCBfX24pO30KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kc3Ry dWN0IF9WZWN0b3JfYmFzZQogIDogcHVibGljIF9WZWN0b3JfYWxsb2NfYmFzZTxfVHAsIF9BbGxv YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxv Yz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1ZlY3Rvcl9hbGxvY19iYXNlPF9UcCwg X0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBf QWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX1ZlY3Rvcl9iYXNl KGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpIDogX0Jhc2UoX19hKSB7fQogIF9WZWN0b3JfYmFz ZShzaXplX3QgX19uLCBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewog ICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZmluaXNoID0gX01fc3RhcnQ7 CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX3N0YXJ0ICsgX19uOwogIH0KCiAgfl9WZWN0b3Jf YmFzZSgpIHsgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0 b3I8X1RwPiA+CmNsYXNzIHZlY3RvciA6IHByb3RlY3RlZCBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxs b2M+CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDsKCnByaXZhdGU6CiAgdHlwZWRlZiBfVmVjdG9yX2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNl OwogIHR5cGVkZWYgdmVjdG9yPF9UcCwgX0FsbG9jPiB2ZWN0b3JfdHlwZTsKcHVibGljOgogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5 cGVkZWYgY29uc3QgdmFsdWVfdHlwZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIF9fbm9ybWFs X2l0ZXJhdG9yPHBvaW50ZXIsIHZlY3Rvcl90eXBlPiBpdGVyYXRvcjsKICB0eXBlZGVmIF9fbm9y bWFsX2l0ZXJhdG9yPGNvbnN0X3BvaW50ZXIsIHZlY3Rvcl90eXBlPiBjb25zdF9pdGVyYXRvcjsK ICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IHZhbHVlX3R5 cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRl ZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjph bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKICB0eXBlZGVm IHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2VfaXRlcmF0b3I7 CiAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGl0ZXJhdG9yPiByZXZlcnNlX2l0ZXJhdG9yOwoK cHJvdGVjdGVkOgogIHVzaW5nIF9CYXNlOjpfTV9hbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01f ZGVhbGxvY2F0ZTsKICB1c2luZyBfQmFzZTo6X01fc3RhcnQ7CiAgdXNpbmcgX0Jhc2U6Ol9NX2Zp bmlzaDsKICB1c2luZyBfQmFzZTo6X01fZW5kX29mX3N0b3JhZ2U7Cgpwcm90ZWN0ZWQ6CiAgdm9p ZCBfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IF9UcCYgX194KTsKICB2 b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbik7CgpwdWJsaWM6CiAgaXRlcmF0 b3IgYmVnaW4oKSB7IHJldHVybiBpdGVyYXRvciAoX01fc3RhcnQpOyB9CiAgY29uc3RfaXRlcmF0 b3IgYmVnaW4oKSBjb25zdAogICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX3N0YXJ0KTsg fQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIGl0ZXJhdG9yIChfTV9maW5pc2gpOyB9CiAgY29u c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IgKF9NX2Zpbmlz aCk7IH0KCiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKQogICAgeyByZXR1cm4gcmV2ZXJzZV9p dGVyYXRvcihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0 CiAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQogIHJldmVyc2Vf aXRlcmF0b3IgcmVuZCgpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9 CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoYmVnaW4oKSk7IH0KCiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdAog ICAgeyByZXR1cm4gc2l6ZV90eXBlKGVuZCgpIC0gYmVnaW4oKSk7IH0KICBzaXplX3R5cGUgbWF4 X3NpemUoKSBjb25zdAogICAgeyByZXR1cm4gc2l6ZV90eXBlKC0xKSAvIHNpemVvZihfVHApOyB9 CiAgc2l6ZV90eXBlIGNhcGFjaXR5KCkgY29uc3QKICAgIHsgcmV0dXJuIHNpemVfdHlwZShjb25z dF9pdGVyYXRvcihfTV9lbmRfb2Zfc3RvcmFnZSkgLSBiZWdpbigpKTsgfQogIGJvb2wgZW1wdHko KSBjb25zdAogICAgeyByZXR1cm4gYmVnaW4oKSA9PSBlbmQoKTsgfQoKICByZWZlcmVuY2Ugb3Bl cmF0b3JbXShzaXplX3R5cGUgX19uKSB7IHJldHVybiAqKGJlZ2luKCkgKyBfX24pOyB9CiAgY29u c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKihi ZWdpbigpICsgX19uKTsgfQoKICB2b2lkIF9NX3JhbmdlX2NoZWNrKHNpemVfdHlwZSBfX24pIGNv bnN0IHsKICAgIGlmIChfX24gPj0gdGhpcy0+c2l6ZSgpKQogICAgICBfX3Rocm93X291dF9vZl9y YW5nZSgidmVjdG9yIik7CiAgfQoKICByZWZlcmVuY2UgYXQoc2l6ZV90eXBlIF9fbikKICAgIHsg X01fcmFuZ2VfY2hlY2soX19uKTsgcmV0dXJuICgqdGhpcylbX19uXTsgfQogIGNvbnN0X3JlZmVy ZW5jZSBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgeyBfTV9yYW5nZV9jaGVjayhfX24pOyBy ZXR1cm4gKCp0aGlzKVtfX25dOyB9CgogIGV4cGxpY2l0IHZlY3Rvcihjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19hKSB7fQoKICB2ZWN0 b3Ioc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbHVlLAogICAgICAgICBjb25zdCBhbGxv Y2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jhc2UoX19uLCBfX2Ep CiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9f dmFsdWUpOyB9CgogIGV4cGxpY2l0IHZlY3RvcihzaXplX3R5cGUgX19uKQogICAgOiBfQmFzZShf X24sIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7IF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfZmls bF9uKF9NX3N0YXJ0LCBfX24sIF9UcCgpKTsgfQoKICB2ZWN0b3IoY29uc3QgdmVjdG9yPF9UcCwg X0FsbG9jPiYgX194KQogICAgOiBfQmFzZShfX3guc2l6ZSgpLCBfX3guZ2V0X2FsbG9jYXRvcigp KQogICAgeyBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCksIF9feC5l bmQoKSwgX01fc3RhcnQpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg dmVjdG9yKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jh c2UoX19hKSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9y Pjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2luaXRpYWxpemVfYXV4KF9fZmlyc3QsIF9f bGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZv aWQgX01faW5pdGlhbGl6ZV9hdXgoX0ludGVnZXIgX19uLCBfSW50ZWdlciBfX3ZhbHVlLCBfX3Ry dWVfdHlwZSkgewogICAgX01fc3RhcnQgPSBfTV9hbGxvY2F0ZShfX24pOwogICAgX01fZW5kX29m X3N0b3JhZ2UgPSBfTV9zdGFydCArIF9fbjsKICAgIF9NX2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRf ZmlsbF9uKF9NX3N0YXJ0LCBfX24sIF9fdmFsdWUpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5pdGlhbGl6ZV9hdXgoX0lucHV0SXRlcmF0b3IgX19m aXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgX19m YWxzZV90eXBlKSB7CiAgICBfTV9yYW5nZV9pbml0aWFsaXplKF9fZmlyc3QsIF9fbGFzdCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgfQoKICB+dmVjdG9yKCkgeyBkZXN0cm95KF9N X3N0YXJ0LCBfTV9maW5pc2gpOyB9CgogIHZlY3RvcjxfVHAsIF9BbGxvYz4mIG9wZXJhdG9yPShj b25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3gpOwogIHZvaWQgcmVzZXJ2ZShzaXplX3R5cGUg X19uKSB7CiAgICBpZiAoY2FwYWNpdHkoKSA8IF9fbikgewogICAgICBjb25zdCBzaXplX3R5cGUg X19vbGRfc2l6ZSA9IHNpemUoKTsKICAgICAgcG9pbnRlciBfX3RtcCA9IF9NX2FsbG9jYXRlX2Fu ZF9jb3B5KF9fbiwgX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIGRlc3Ryb3koX01fc3RhcnQs IF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2VuZF9vZl9zdG9y YWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fdG1wOwogICAgICBfTV9maW5pc2gg PSBfX3RtcCArIF9fb2xkX3NpemU7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQg KyBfX247CiAgICB9CiAgfQoKCgoKCgogIHZvaWQgYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0 IF9UcCYgX192YWwpIHsgX01fZmlsbF9hc3NpZ24oX19uLCBfX3ZhbCk7IH0KICB2b2lkIF9NX2Zp bGxfYXNzaWduKHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpOwoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRl Z2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgIF9NX2Fzc2lnbl9k aXNwYXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW50ZWdlcj4KICB2b2lkIF9NX2Fzc2lnbl9kaXNwYXRjaChfSW50ZWdlciBfX24sIF9J bnRlZ2VyIF9fdmFsLCBfX3RydWVfdHlwZSkKICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdHlw ZSkgX19uLCAoX1RwKSBfX3ZhbCk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAg dm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9f bGFzdCwgX19mYWxzZV90eXBlKQogICAgeyBfTV9hc3NpZ25fYXV4KF9fZmlyc3QsIF9fbGFzdCwg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogIHZvaWQgX01fYXNzaWduX2F1eChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBf SW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9y X3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fYXNz aWduX2F1eChfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZyk7CgogIHJlZmVyZW5j ZSBmcm9udCgpIHsgcmV0dXJuICpiZWdpbigpOyB9CiAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkg Y29uc3QgeyByZXR1cm4gKmJlZ2luKCk7IH0KICByZWZlcmVuY2UgYmFjaygpIHsgcmV0dXJuICoo ZW5kKCkgLSAxKTsgfQogIGNvbnN0X3JlZmVyZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKihl bmQoKSAtIDEpOyB9CgogIHZvaWQgcHVzaF9iYWNrKGNvbnN0IF9UcCYgX194KSB7CiAgICBpZiAo X01fZmluaXNoICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5p c2gsIF9feCk7CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNl cnRfYXV4KGVuZCgpLCBfX3gpOwogIH0KICB2b2lkIHB1c2hfYmFjaygpIHsKICAgIGlmIChfTV9m aW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UpIHsKICAgICAgY29uc3RydWN0KF9NX2ZpbmlzaCk7 CiAgICAgICsrX01fZmluaXNoOwogICAgfQogICAgZWxzZQogICAgICBfTV9pbnNlcnRfYXV4KGVu ZCgpKTsKICB9CiAgdm9pZCBzd2FwKHZlY3RvcjxfVHAsIF9BbGxvYz4mIF9feCkgewogICAgc3Rk Ojpzd2FwKF9NX3N0YXJ0LCBfX3guX01fc3RhcnQpOwogICAgc3RkOjpzd2FwKF9NX2ZpbmlzaCwg X194Ll9NX2ZpbmlzaCk7CiAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9l bmRfb2Zfc3RvcmFnZSk7CiAgfQoKICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgX1RwJiBfX3gpIHsKICAgIHNpemVfdHlwZSBfX24gPSBfX3Bvc2l0aW9uIC0gYmVn aW4oKTsKICAgIGlmIChfTV9maW5pc2ggIT0gX01fZW5kX29mX3N0b3JhZ2UgJiYgX19wb3NpdGlv biA9PSBlbmQoKSkgewogICAgICBjb25zdHJ1Y3QoX01fZmluaXNoLCBfX3gpOwogICAgICArK19N X2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihfX3Bv c2l0aW9uKSwgX194KTsKICAgIHJldHVybiBiZWdpbigpICsgX19uOwogIH0KICBpdGVyYXRvciBp bnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgc2l6ZV90eXBlIF9fbiA9IF9fcG9zaXRp b24gLSBiZWdpbigpOwogICAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFnZSAmJiBf X3Bvc2l0aW9uID09IGVuZCgpKSB7CiAgICAgIGNvbnN0cnVjdChfTV9maW5pc2gpOwogICAgICAr K19NX2ZpbmlzaDsKICAgIH0KICAgIGVsc2UKICAgICAgX01faW5zZXJ0X2F1eChpdGVyYXRvcihf X3Bvc2l0aW9uKSk7CiAgICByZXR1cm4gYmVnaW4oKSArIF9fbjsKICB9CgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChpdGVyYXRvciBfX3BvcywgX0lucHV0 SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsK ICAgIF9NX2luc2VydF9kaXNwYXRjaChfX3BvcywgX19maXJzdCwgX19sYXN0LCBfSW50ZWdyYWwo KSk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlz cGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX192YWwsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUpCiAgICB7IF9NX2ZpbGxfaW5zZXJ0KF9f cG9zLCAoc2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0 SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFsc2VfdHlwZSkg ewogICAgX01fcmFuZ2VfaW5zZXJ0KF9fcG9zLCBfX2ZpcnN0LCBfX2xhc3QsIF9faXRlcmF0b3Jf Y2F0ZWdvcnkoX19maXJzdCkpOwogIH0KCiAgdm9pZCBpbnNlcnQgKGl0ZXJhdG9yIF9fcG9zLCBz aXplX3R5cGUgX19uLCBjb25zdCBfVHAmIF9feCkKICAgIHsgX01fZmlsbF9pbnNlcnQoX19wb3Ms IF9fbiwgX194KTsgfQoKICB2b2lkIF9NX2ZpbGxfaW5zZXJ0IChpdGVyYXRvciBfX3Bvcywgc2l6 ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2b2lkIHBvcF9iYWNrKCkgewogICAgLS1f TV9maW5pc2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgfQogIGl0ZXJhdG9yIGVyYXNlKGl0 ZXJhdG9yIF9fcG9zaXRpb24pIHsKICAgIGlmIChfX3Bvc2l0aW9uICsgMSAhPSBlbmQoKSkKICAg ICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9fcG9zaXRpb24pOwogICAgLS1fTV9maW5p c2g7CiAgICBkZXN0cm95KF9NX2ZpbmlzaCk7CiAgICByZXR1cm4gX19wb3NpdGlvbjsKICB9CiAg aXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KSB7CiAgICBp dGVyYXRvciBfX2koY29weShfX2xhc3QsIGVuZCgpLCBfX2ZpcnN0KSk7CiAgICBkZXN0cm95KF9f aSwgZW5kKCkpOwogICAgX01fZmluaXNoID0gX01fZmluaXNoIC0gKF9fbGFzdCAtIF9fZmlyc3Qp OwogICAgcmV0dXJuIF9fZmlyc3Q7CiAgfQoKICB2b2lkIHJlc2l6ZShzaXplX3R5cGUgX19uZXdf c2l6ZSwgY29uc3QgX1RwJiBfX3gpIHsKICAgIGlmIChfX25ld19zaXplIDwgc2l6ZSgpKQogICAg ICBlcmFzZShiZWdpbigpICsgX19uZXdfc2l6ZSwgZW5kKCkpOwogICAgZWxzZQogICAgICBpbnNl cnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCksIF9feCk7CiAgfQogIHZvaWQgcmVzaXplKHNp emVfdHlwZSBfX25ld19zaXplKSB7IHJlc2l6ZShfX25ld19zaXplLCBfVHAoKSk7IH0KICB2b2lk IGNsZWFyKCkgeyBlcmFzZShiZWdpbigpLCBlbmQoKSk7IH0KCnByb3RlY3RlZDoKCiAgdGVtcGxh dGUgPGNsYXNzIF9Gb3J3YXJkSXRlcmF0b3I+CiAgcG9pbnRlciBfTV9hbGxvY2F0ZV9hbmRfY29w eShzaXplX3R5cGUgX19uLCBfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3Qp CiAgewogICAgcG9pbnRlciBfX3Jlc3VsdCA9IF9NX2FsbG9jYXRlKF9fbik7CiAgICB0cnkgewog ICAgICB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAg IHJldHVybiBfX3Jlc3VsdDsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9kZWFsbG9jYXRlKF9f cmVzdWx0LCBfX24pOyB0aHJvdzsgfTsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvcj4KICB2b2lkIF9NX3JhbmdlX2luaXRpYWxpemUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBpbnB1dF9p dGVyYXRvcl90YWcpCiAgewogICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0 KQogICAgICBwdXNoX2JhY2soKl9fZmlyc3QpOwogIH0KCgogIHRlbXBsYXRlIDxjbGFzcyBfRm9y d2FyZEl0ZXJhdG9yPgogIHZvaWQgX01fcmFuZ2VfaW5pdGlhbGl6ZShfRm9yd2FyZEl0ZXJhdG9y IF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19s YXN0LCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICB7CiAgICBzaXplX3R5cGUgX19uID0gMDsKICAg IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19uKTsKICAgIF9NX3N0YXJ0ID0gX01fYWxsb2Nh dGUoX19uKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX247CiAgICBfTV9m aW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBfTV9yYW5nZV9pbnNl cnQoaXRlcmF0b3IgX19wb3MsCiAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgIGlu cHV0X2l0ZXJhdG9yX3RhZyk7CgogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgog IHZvaWQgX01fcmFuZ2VfaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAg ICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj09KGNvbnN0IHZl Y3RvcjxfVHAsIF9BbGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7 CiAgcmV0dXJuIF9feC5zaXplKCkgPT0gX195LnNpemUoKSAmJgogICAgICAgICBlcXVhbChfX3gu YmVnaW4oKSwgX194LmVuZCgpLCBfX3kuYmVnaW4oKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I8KGNvbnN0IHZlY3RvcjxfVHAsIF9B bGxvYz4mIF9feCwgY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxl eGljb2dyYXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSB2b2lkIHN3YXAodmVjdG9yPF9UcCwg X0FsbG9jPiYgX194LCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpCnsKICBfX3guc3dhcChfX3kp Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJh dG9yIT0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRvcj4oY29uc3QgdmVjdG9yPF9U cCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1 cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSBib29sCm9wZXJhdG9yPD0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2 ZWN0b3I8X1RwLCBfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPj0oY29u c3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194LCBjb25zdCB2ZWN0b3I8X1RwLCBfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CnZlY3RvcjxfVHAsX0FsbG9jPiYKdmVjdG9yPF9UcCxfQWxsb2M+OjpvcGVyYXRv cj0oY29uc3QgdmVjdG9yPF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKCZfX3ggIT0gdGhpcykg ewogICAgY29uc3Qgc2l6ZV90eXBlIF9feGxlbiA9IF9feC5zaXplKCk7CiAgICBpZiAoX194bGVu ID4gY2FwYWNpdHkoKSkgewogICAgICBwb2ludGVyIF9fdG1wID0gX01fYWxsb2NhdGVfYW5kX2Nv cHkoX194bGVuLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICAgICAgZGVzdHJveShfTV9zdGFy dCwgX01fZmluaXNoKTsKICAgICAgX01fZGVhbGxvY2F0ZShfTV9zdGFydCwgX01fZW5kX29mX3N0 b3JhZ2UgLSBfTV9zdGFydCk7CiAgICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICAgIF9NX2VuZF9v Zl9zdG9yYWdlID0gX01fc3RhcnQgKyBfX3hsZW47CiAgICB9CiAgICBlbHNlIGlmIChzaXplKCkg Pj0gX194bGVuKSB7CiAgICAgIGl0ZXJhdG9yIF9faShjb3B5KF9feC5iZWdpbigpLCBfX3guZW5k KCksIGJlZ2luKCkpKTsKICAgICAgZGVzdHJveShfX2ksIGVuZCgpKTsKICAgIH0KICAgIGVsc2Ug ewogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guYmVnaW4oKSArIHNpemUoKSwgX01fc3RhcnQp OwogICAgICB1bmluaXRpYWxpemVkX2NvcHkoX194LmJlZ2luKCkgKyBzaXplKCksIF9feC5lbmQo KSwgX01fZmluaXNoKTsKICAgIH0KICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgX194bGVuOwog IH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZCB2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9maWxsX2Fzc2lnbihzaXplX3QgX19uLCBjb25z dCB2YWx1ZV90eXBlJiBfX3ZhbCkKewogIGlmIChfX24gPiBjYXBhY2l0eSgpKSB7CiAgICB2ZWN0 b3I8X1RwLCBfQWxsb2M+IF9fdG1wKF9fbiwgX192YWwsIGdldF9hbGxvY2F0b3IoKSk7CiAgICBf X3RtcC5zd2FwKCp0aGlzKTsKICB9CiAgZWxzZSBpZiAoX19uID4gc2l6ZSgpKSB7CiAgICBmaWxs KGJlZ2luKCksIGVuZCgpLCBfX3ZhbCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2Zp bGxfbihfTV9maW5pc2gsIF9fbiAtIHNpemUoKSwgX192YWwpOwogIH0KICBlbHNlCiAgICBlcmFz ZShmaWxsX24oYmVnaW4oKSwgX19uLCBfX3ZhbCksIGVuZCgpKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZCB2ZWN0 b3I8X1RwLCBfQWxsb2M+OjpfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0 SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnB1 dF9pdGVyYXRvcl90YWcpIHsKICBpdGVyYXRvciBfX2N1cihiZWdpbigpKTsKICBmb3IgKCA7IF9f Zmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3QpCiAg ICAqX19jdXIgPSAqX19maXJzdDsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpCiAgICBlcmFzZShf X2N1ciwgZW5kKCkpOwogIGVsc2UKICAgIGluc2VydChlbmQoKSwgX19maXJzdCwgX19sYXN0KTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX2Fzc2lnbl9hdXgoX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICBzaXplX3R5cGUgX19sZW4g PSAwOwogIGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCwgX19sZW4pOwoKICBpZiAoX19sZW4gPiBj YXBhY2l0eSgpKSB7CiAgICBwb2ludGVyIF9fdG1wKF9NX2FsbG9jYXRlX2FuZF9jb3B5KF9fbGVu LCBfX2ZpcnN0LCBfX2xhc3QpKTsKICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAg ICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsK ICAgIF9NX3N0YXJ0ID0gX190bXA7CiAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9NX2ZpbmlzaCA9 IF9NX3N0YXJ0ICsgX19sZW47CiAgfQogIGVsc2UgaWYgKHNpemUoKSA+PSBfX2xlbikgewogICAg aXRlcmF0b3IgX19uZXdfZmluaXNoKGNvcHkoX19maXJzdCwgX19sYXN0LCBfTV9zdGFydCkpOwog ICAgZGVzdHJveShfX25ld19maW5pc2gsIGVuZCgpKTsKICAgIF9NX2ZpbmlzaCA9IF9fbmV3X2Zp bmlzaC5iYXNlKCk7CiAgfQogIGVsc2UgewogICAgX0ZvcndhcmRJdGVyIF9fbWlkID0gX19maXJz dDsKICAgIGFkdmFuY2UoX19taWQsIHNpemUoKSk7CiAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBf TV9zdGFydCk7CiAgICBfTV9maW5pc2ggPSB1bmluaXRpYWxpemVkX2NvcHkoX19taWQsIF9fbGFz dCwgX01fZmluaXNoKTsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4K dm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9pbnNlcnRfYXV4KGl0ZXJhdG9yIF9fcG9zaXRp b24sIGNvbnN0IF9UcCYgX194KQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N X2ZpbmlzaDsKICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3Np dGlvbiwgaXRlcmF0b3IoX01fZmluaXNoIC0gMiksIGl0ZXJhdG9yKF9NX2ZpbmlzaC0gMSkpOwog ICAgKl9fcG9zaXRpb24gPSBfX3hfY29weTsKICB9CiAgZWxzZSB7CiAgICBjb25zdCBzaXplX3R5 cGUgX19vbGRfc2l6ZSA9IHNpemUoKTsKICAgIGNvbnN0IHNpemVfdHlwZSBfX2xlbiA9IF9fb2xk X3NpemUgIT0gMCA/IDIgKiBfX29sZF9zaXplIDogMTsKICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0 KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICBpdGVyYXRvciBfX25ld19maW5pc2goX19uZXdfc3Rh cnQpOwogICAgdHJ5IHsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGl0 ZXJhdG9yKF9NX3N0YXJ0KSwgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbmV3X3N0YXJ0KTsKICAgICAgY29uc3RydWN0KF9fbmV3X2ZpbmlzaC5i YXNlKCksIF9feCk7CiAgICAgICsrX19uZXdfZmluaXNoOwogICAgICBfX25ld19maW5pc2ggPSB1 bmluaXRpYWxpemVkX2NvcHkoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNoKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X2ZpbmlzaCk7CiAgICB9CiAg ICBjYXRjaCguLi4pIHsgKGRlc3Ryb3koX19uZXdfc3RhcnQsX19uZXdfZmluaXNoKSwgX01fZGVh bGxvY2F0ZShfX25ld19zdGFydC5iYXNlKCksX19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJv eShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9kZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zf c3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9NX3N0YXJ0ID0gX19uZXdfc3RhcnQuYmFzZSgpOwog ICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgIF9NX2VuZF9vZl9zdG9yYWdl ID0gX19uZXdfc3RhcnQuYmFzZSgpICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQWxsb2M+CnZvaWQKdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01faW5zZXJ0X2F1eChp dGVyYXRvciBfX3Bvc2l0aW9uKQp7CiAgaWYgKF9NX2ZpbmlzaCAhPSBfTV9lbmRfb2Zfc3RvcmFn ZSkgewogICAgY29uc3RydWN0KF9NX2ZpbmlzaCwgKihfTV9maW5pc2ggLSAxKSk7CiAgICArK19N X2ZpbmlzaDsKICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgaXRlcmF0b3IoX01fZmluaXNo IC0gMiksCiAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yKF9NX2ZpbmlzaCAtIDEpKTsKICAgICpf X3Bvc2l0aW9uID0gX1RwKCk7CiAgfQogIGVsc2UgewogICAgY29uc3Qgc2l6ZV90eXBlIF9fb2xk X3NpemUgPSBzaXplKCk7CiAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICE9 IDAgPyAyICogX19vbGRfc2l6ZSA6IDE7CiAgICBwb2ludGVyIF9fbmV3X3N0YXJ0ID0gX01fYWxs b2NhdGUoX19sZW4pOwogICAgcG9pbnRlciBfX25ld19maW5pc2ggPSBfX25ld19zdGFydDsKICAg IHRyeSB7CiAgICAgIF9fbmV3X2ZpbmlzaCA9IHVuaW5pdGlhbGl6ZWRfY29weShpdGVyYXRvcihf TV9zdGFydCksIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX25ld19zdGFydCk7CiAgICAgIGNvbnN0cnVjdChfX25ld19maW5pc2gpOwogICAgICAr K19fbmV3X2ZpbmlzaDsKICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KF9f cG9zaXRpb24sIGl0ZXJhdG9yKF9NX2ZpbmlzaCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX25ld19maW5pc2gpOwogICAgfQogICAgY2F0Y2goLi4uKSB7IChkZXN0 cm95KF9fbmV3X3N0YXJ0LF9fbmV3X2ZpbmlzaCksIF9NX2RlYWxsb2NhdGUoX19uZXdfc3RhcnQs X19sZW4pKTsgdGhyb3c7IH07CgogICAgZGVzdHJveShiZWdpbigpLCBlbmQoKSk7CiAgICBfTV9k ZWFsbG9jYXRlKF9NX3N0YXJ0LCBfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX3N0YXJ0KTsKICAgIF9N X3N0YXJ0ID0gX19uZXdfc3RhcnQ7CiAgICBfTV9maW5pc2ggPSBfX25ld19maW5pc2g7CiAgICBf TV9lbmRfb2Zfc3RvcmFnZSA9IF9fbmV3X3N0YXJ0ICsgX19sZW47CiAgfQp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgdmVjdG9yPF9UcCwgX0FsbG9jPjo6X01fZmls bF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCkKewogIGlmIChfX24g IT0gMCkgewogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAtIF9NX2ZpbmlzaCkg Pj0gX19uKSB7CiAgICAgIF9UcCBfX3hfY29weSA9IF9feDsKICAgICAgY29uc3Qgc2l6ZV90eXBl IF9fZWxlbXNfYWZ0ZXIgPSBlbmQoKSAtIF9fcG9zaXRpb247CiAgICAgIGl0ZXJhdG9yIF9fb2xk X2ZpbmlzaChfTV9maW5pc2gpOwogICAgICBpZiAoX19lbGVtc19hZnRlciA+IF9fbikgewogICAg ICAgIHVuaW5pdGlhbGl6ZWRfY29weShfTV9maW5pc2ggLSBfX24sIF9NX2ZpbmlzaCwgX01fZmlu aXNoKTsKICAgICAgICBfTV9maW5pc2ggKz0gX19uOwogICAgICAgIGNvcHlfYmFja3dhcmQoX19w b3NpdGlvbiwgX19vbGRfZmluaXNoIC0gX19uLCBfX29sZF9maW5pc2gpOwogICAgICAgIGZpbGwo X19wb3NpdGlvbiwgX19wb3NpdGlvbiArIF9fbiwgX194X2NvcHkpOwogICAgICB9CiAgICAgIGVs c2UgewogICAgICAgIHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2ZpbmlzaCwgX19uIC0gX19lbGVt c19hZnRlciwgX194X2NvcHkpOwogICAgICAgIF9NX2ZpbmlzaCArPSBfX24gLSBfX2VsZW1zX2Fm dGVyOwogICAgICAgIHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gs IF9NX2ZpbmlzaCk7CiAgICAgICAgX01fZmluaXNoICs9IF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAg ZmlsbChfX3Bvc2l0aW9uLCBfX29sZF9maW5pc2gsIF9feF9jb3B5KTsKICAgICAgfQogICAgfQog ICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAg ICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBfX29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9f bik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAg IGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25ld19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAg X19uZXdfZmluaXNoID0gdW5pbml0aWFsaXplZF9jb3B5KGJlZ2luKCksIF9fcG9zaXRpb24sIF9f bmV3X3N0YXJ0KTsKICAgICAgICBfX25ld19maW5pc2ggPSB1bmluaXRpYWxpemVkX2ZpbGxfbihf X25ld19maW5pc2gsIF9fbiwgX194KTsKICAgICAgICBfX25ld19maW5pc2gKICAgICAgICAgID0g dW5pbml0aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX25ld19maW5pc2gpOwogICAg ICB9CiAgICAgIGNhdGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gp LCBfTV9kZWFsbG9jYXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAg ICAgIGRlc3Ryb3koX01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01f c3RhcnQsIF9NX2VuZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9f bmV3X3N0YXJ0LmJhc2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsK ICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAg IH0KICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNs YXNzIF9JbnB1dEl0ZXJhdG9yPgp2b2lkCnZlY3RvcjxfVHAsIF9BbGxvYz46Ol9NX3JhbmdlX2lu c2VydChpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnB1dF9pdGVyYXRvcl90YWcpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0 OyArK19fZmlyc3QpIHsKICAgIF9fcG9zID0gaW5zZXJ0KF9fcG9zLCAqX19maXJzdCk7CiAgICAr K19fcG9zOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0 ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4Kdm9pZAp2ZWN0b3I8X1RwLCBfQWxsb2M+OjpfTV9y YW5nZV9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpCnsKICBpZiAoX19m aXJzdCAhPSBfX2xhc3QpIHsKICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX24pOwogICAgaWYgKHNpemVfdHlwZShfTV9lbmRfb2Zfc3RvcmFnZSAt IF9NX2ZpbmlzaCkgPj0gX19uKSB7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2VsZW1zX2FmdGVy ID0gZW5kKCkgLSBfX3Bvc2l0aW9uOwogICAgICBpdGVyYXRvciBfX29sZF9maW5pc2goX01fZmlu aXNoKTsKICAgICAgaWYgKF9fZWxlbXNfYWZ0ZXIgPiBfX24pIHsKICAgICAgICB1bmluaXRpYWxp emVkX2NvcHkoX01fZmluaXNoIC0gX19uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCk7CiAgICAgICAg X01fZmluaXNoICs9IF9fbjsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fcG9zaXRpb24sIF9fb2xk X2ZpbmlzaCAtIF9fbiwgX19vbGRfZmluaXNoKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbGFz dCwgX19wb3NpdGlvbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVy YXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZCwgX19lbGVtc19hZnRl cik7CiAgICAgICAgdW5pbml0aWFsaXplZF9jb3B5KF9fbWlkLCBfX2xhc3QsIF9NX2ZpbmlzaCk7 CiAgICAgICAgX01fZmluaXNoICs9IF9fbiAtIF9fZWxlbXNfYWZ0ZXI7CiAgICAgICAgdW5pbml0 aWFsaXplZF9jb3B5KF9fcG9zaXRpb24sIF9fb2xkX2ZpbmlzaCwgX01fZmluaXNoKTsKICAgICAg ICBfTV9maW5pc2ggKz0gX19lbGVtc19hZnRlcjsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlk LCBfX3Bvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIGNvbnN0IHNpemVf dHlwZSBfX29sZF9zaXplID0gc2l6ZSgpOwogICAgICBjb25zdCBzaXplX3R5cGUgX19sZW4gPSBf X29sZF9zaXplICsgbWF4KF9fb2xkX3NpemUsIF9fbik7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X3N0 YXJ0KF9NX2FsbG9jYXRlKF9fbGVuKSk7CiAgICAgIGl0ZXJhdG9yIF9fbmV3X2ZpbmlzaChfX25l d19zdGFydCk7CiAgICAgIHRyeSB7CiAgICAgICAgX19uZXdfZmluaXNoID0gdW5pbml0aWFsaXpl ZF9jb3B5KGl0ZXJhdG9yKF9NX3N0YXJ0KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19wb3NpdGlvbiwgX19uZXdfc3RhcnQpOwogICAgICAgIF9fbmV3X2Zpbmlz aCA9IHVuaW5pdGlhbGl6ZWRfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fbmV3X2ZpbmlzaCk7CiAg ICAgICAgX19uZXdfZmluaXNoCiAgICAgICAgICA9IHVuaW5pdGlhbGl6ZWRfY29weShfX3Bvc2l0 aW9uLCBpdGVyYXRvcihfTV9maW5pc2gpLCBfX25ld19maW5pc2gpOwogICAgICB9CiAgICAgIGNh dGNoKC4uLikgeyAoZGVzdHJveShfX25ld19zdGFydCxfX25ld19maW5pc2gpLCBfTV9kZWFsbG9j YXRlKF9fbmV3X3N0YXJ0LmJhc2UoKSxfX2xlbikpOyB0aHJvdzsgfTsKCiAgICAgIGRlc3Ryb3ko X01fc3RhcnQsIF9NX2ZpbmlzaCk7CiAgICAgIF9NX2RlYWxsb2NhdGUoX01fc3RhcnQsIF9NX2Vu ZF9vZl9zdG9yYWdlIC0gX01fc3RhcnQpOwogICAgICBfTV9zdGFydCA9IF9fbmV3X3N0YXJ0LmJh c2UoKTsKICAgICAgX01fZmluaXNoID0gX19uZXdfZmluaXNoLmJhc2UoKTsKICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX25ld19zdGFydC5iYXNlKCkgKyBfX2xlbjsKICAgIH0KICB9Cn0KCn0K IyA2NyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92ZWN0b3IuaCIgMiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9idmVjdG9yLmgiIDEgMwojIDYzICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnN0YXRpYyBj b25zdCBpbnQgX19XT1JEX0JJVCA9IGludCg4KnNpemVvZih1bnNpZ25lZCBpbnQpKTsKCnN0cnVj dCBfQml0X3JlZmVyZW5jZSB7CiAgdW5zaWduZWQgaW50KiBfTV9wOwogIHVuc2lnbmVkIGludCBf TV9tYXNrOwogIF9CaXRfcmVmZXJlbmNlKHVuc2lnbmVkIGludCogX194LCB1bnNpZ25lZCBpbnQg X195KQogICAgOiBfTV9wKF9feCksIF9NX21hc2soX195KSB7fQoKcHVibGljOgogIF9CaXRfcmVm ZXJlbmNlKCkgOiBfTV9wKDApLCBfTV9tYXNrKDApIHt9CiAgb3BlcmF0b3IgYm9vbCgpIGNvbnN0 IHsgcmV0dXJuICEoISgqX01fcCAmIF9NX21hc2spKTsgfQogIF9CaXRfcmVmZXJlbmNlJiBvcGVy YXRvcj0oYm9vbCBfX3gpCiAgewogICAgaWYgKF9feCkgKl9NX3AgfD0gX01fbWFzazsKICAgIGVs c2UgKl9NX3AgJj0gfl9NX21hc2s7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIF9CaXRfcmVmZXJl bmNlJiBvcGVyYXRvcj0oY29uc3QgX0JpdF9yZWZlcmVuY2UmIF9feCkKICAgIHsgcmV0dXJuICp0 aGlzID0gYm9vbChfX3gpOyB9CiAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9CaXRfcmVmZXJlbmNl JiBfX3gpIGNvbnN0CiAgICB7IHJldHVybiBib29sKCp0aGlzKSA9PSBib29sKF9feCk7IH0KICBi b29sIG9wZXJhdG9yPChjb25zdCBfQml0X3JlZmVyZW5jZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gIWJvb2woKnRoaXMpICYmIGJvb2woX194KTsKICB9CiAgdm9pZCBmbGlwKCkgeyAqX01fcCBe PSBfTV9tYXNrOyB9Cn07CgppbmxpbmUgdm9pZCBzd2FwKF9CaXRfcmVmZXJlbmNlIF9feCwgX0Jp dF9yZWZlcmVuY2UgX195KQp7CiAgYm9vbCBfX3RtcCA9IF9feDsKICBfX3ggPSBfX3k7CiAgX195 ID0gX190bXA7Cn0KCnN0cnVjdCBfQml0X2l0ZXJhdG9yX2Jhc2UgOiBwdWJsaWMgcmFuZG9tX2Fj Y2Vzc19pdGVyYXRvcjxib29sLCBwdHJkaWZmX3Q+CnsKICB1bnNpZ25lZCBpbnQqIF9NX3A7CiAg dW5zaWduZWQgaW50IF9NX29mZnNldDsKCiAgX0JpdF9pdGVyYXRvcl9iYXNlKHVuc2lnbmVkIGlu dCogX194LCB1bnNpZ25lZCBpbnQgX195KQogICAgOiBfTV9wKF9feCksIF9NX29mZnNldChfX3kp IHt9CgogIHZvaWQgX01fYnVtcF91cCgpIHsKICAgIGlmIChfTV9vZmZzZXQrKyA9PSBfX1dPUkRf QklUIC0gMSkgewogICAgICBfTV9vZmZzZXQgPSAwOwogICAgICArK19NX3A7CiAgICB9CiAgfQog IHZvaWQgX01fYnVtcF9kb3duKCkgewogICAgaWYgKF9NX29mZnNldC0tID09IDApIHsKICAgICAg X01fb2Zmc2V0ID0gX19XT1JEX0JJVCAtIDE7CiAgICAgIC0tX01fcDsKICAgIH0KICB9CgogIHZv aWQgX01faW5jcihwdHJkaWZmX3QgX19pKSB7CiAgICBkaWZmZXJlbmNlX3R5cGUgX19uID0gX19p ICsgX01fb2Zmc2V0OwogICAgX01fcCArPSBfX24gLyBfX1dPUkRfQklUOwogICAgX19uID0gX19u ICUgX19XT1JEX0JJVDsKICAgIGlmIChfX24gPCAwKSB7CiAgICAgIF9NX29mZnNldCA9ICh1bnNp Z25lZCBpbnQpIF9fbiArIF9fV09SRF9CSVQ7CiAgICAgIC0tX01fcDsKICAgIH0gZWxzZQogICAg ICBfTV9vZmZzZXQgPSAodW5zaWduZWQgaW50KSBfX247CiAgfQoKICBib29sIG9wZXJhdG9yPT0o Y29uc3QgX0JpdF9pdGVyYXRvcl9iYXNlJiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiBfTV9wID09 IF9faS5fTV9wICYmIF9NX29mZnNldCA9PSBfX2kuX01fb2Zmc2V0OwogIH0KICBib29sIG9wZXJh dG9yPChjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9N X3AgPCBfX2kuX01fcCB8fCAoX01fcCA9PSBfX2kuX01fcCAmJiBfTV9vZmZzZXQgPCBfX2kuX01f b2Zmc2V0KTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYg X19pKSBjb25zdCB7CiAgICByZXR1cm4gISgqdGhpcyA9PSBfX2kpOwogIH0KICBib29sIG9wZXJh dG9yPihjb25zdCBfQml0X2l0ZXJhdG9yX2Jhc2UmIF9faSkgY29uc3QgewogICAgcmV0dXJuIF9f aSA8ICp0aGlzOwogIH0KICBib29sIG9wZXJhdG9yPD0oY29uc3QgX0JpdF9pdGVyYXRvcl9iYXNl JiBfX2kpIGNvbnN0IHsKICAgIHJldHVybiAhKF9faSA8ICp0aGlzKTsKICB9CiAgYm9vbCBvcGVy YXRvcj49KGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX19pKSBjb25zdCB7CiAgICByZXR1cm4g ISgqdGhpcyA8IF9faSk7CiAgfQp9OwoKaW5saW5lIHB0cmRpZmZfdApvcGVyYXRvci0oY29uc3Qg X0JpdF9pdGVyYXRvcl9iYXNlJiBfX3gsIGNvbnN0IF9CaXRfaXRlcmF0b3JfYmFzZSYgX195KSB7 CiAgcmV0dXJuIF9fV09SRF9CSVQgKiAoX194Ll9NX3AgLSBfX3kuX01fcCkgKyBfX3guX01fb2Zm c2V0IC0gX195Ll9NX29mZnNldDsKfQoKCnN0cnVjdCBfQml0X2l0ZXJhdG9yIDogcHVibGljIF9C aXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBfQml0X3JlZmVyZW5jZSByZWZlcmVuY2U7CiAg dHlwZWRlZiBfQml0X3JlZmVyZW5jZSogcG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfaXRlcmF0b3Ig aXRlcmF0b3I7CgogIF9CaXRfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7 fQogIF9CaXRfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KCiAgcmVmZXJlbmNlIG9wZXJhdG9y KigpIGNvbnN0IHsgcmV0dXJuIHJlZmVyZW5jZShfTV9wLCAxVSA8PCBfTV9vZmZzZXQpOyB9CiAg aXRlcmF0b3ImIG9wZXJhdG9yKysoKSB7CiAgICBfTV9idW1wX3VwKCk7CiAgICByZXR1cm4gKnRo aXM7CiAgfQogIGl0ZXJhdG9yIG9wZXJhdG9yKysoaW50KSB7CiAgICBpdGVyYXRvciBfX3RtcCA9 ICp0aGlzOwogICAgX01fYnVtcF91cCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRv ciYgb3BlcmF0b3ItLSgpIHsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuICp0aGlzOwog IH0KICBpdGVyYXRvciBvcGVyYXRvci0tKGludCkgewogICAgaXRlcmF0b3IgX190bXAgPSAqdGhp czsKICAgIF9NX2J1bXBfZG93bigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciYg b3BlcmF0b3IrPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7CiAgICBfTV9pbmNyKF9faSk7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9yJiBvcGVyYXRvci09KGRpZmZlcmVuY2VfdHlwZSBf X2kpIHsKICAgICp0aGlzICs9IC1fX2k7CiAgICByZXR1cm4gKnRoaXM7CiAgfQogIGl0ZXJhdG9y IG9wZXJhdG9yKyhkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBpdGVyYXRvciBfX3Rt cCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wICs9IF9faTsKICB9CiAgaXRlcmF0b3Igb3BlcmF0 b3ItKGRpZmZlcmVuY2VfdHlwZSBfX2kpIGNvbnN0IHsKICAgIGl0ZXJhdG9yIF9fdG1wID0gKnRo aXM7CiAgICByZXR1cm4gX190bXAgLT0gX19pOwogIH0KCiAgcmVmZXJlbmNlIG9wZXJhdG9yW10o ZGlmZmVyZW5jZV90eXBlIF9faSkgeyByZXR1cm4gKigqdGhpcyArIF9faSk7IH0KfTsKCmlubGlu ZSBfQml0X2l0ZXJhdG9yCm9wZXJhdG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2l0ZXJh dG9yJiBfX3gpIHsgcmV0dXJuIF9feCArIF9fbjsgfQoKCnN0cnVjdCBfQml0X2NvbnN0X2l0ZXJh dG9yIDogcHVibGljIF9CaXRfaXRlcmF0b3JfYmFzZQp7CiAgdHlwZWRlZiBib29sIHJlZmVyZW5j ZTsKICB0eXBlZGVmIGJvb2wgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgY29uc3QgYm9vbCog cG9pbnRlcjsKICB0eXBlZGVmIF9CaXRfY29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7Cgog IF9CaXRfY29uc3RfaXRlcmF0b3IoKSA6IF9CaXRfaXRlcmF0b3JfYmFzZSgwLCAwKSB7fQogIF9C aXRfY29uc3RfaXRlcmF0b3IodW5zaWduZWQgaW50KiBfX3gsIHVuc2lnbmVkIGludCBfX3kpCiAg ICA6IF9CaXRfaXRlcmF0b3JfYmFzZShfX3gsIF9feSkge30KICBfQml0X2NvbnN0X2l0ZXJhdG9y KGNvbnN0IF9CaXRfaXRlcmF0b3ImIF9feCkKICAgIDogX0JpdF9pdGVyYXRvcl9iYXNlKF9feC5f TV9wLCBfX3guX01fb2Zmc2V0KSB7fQoKICBjb25zdF9yZWZlcmVuY2Ugb3BlcmF0b3IqKCkgY29u c3QgewogICAgcmV0dXJuIF9CaXRfcmVmZXJlbmNlKF9NX3AsIDFVIDw8IF9NX29mZnNldCk7CiAg fQogIGNvbnN0X2l0ZXJhdG9yJiBvcGVyYXRvcisrKCkgewogICAgX01fYnVtcF91cCgpOwogICAg cmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRvciBvcGVyYXRvcisrKGludCkgewogICAg Y29uc3RfaXRlcmF0b3IgX190bXAgPSAqdGhpczsKICAgIF9NX2J1bXBfdXAoKTsKICAgIHJldHVy biBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yLS0oKSB7CiAgICBfTV9idW1w X2Rvd24oKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgY29uc3RfaXRlcmF0b3Igb3BlcmF0b3It LShpbnQpIHsKICAgIGNvbnN0X2l0ZXJhdG9yIF9fdG1wID0gKnRoaXM7CiAgICBfTV9idW1wX2Rv d24oKTsKICAgIHJldHVybiBfX3RtcDsKICB9CiAgY29uc3RfaXRlcmF0b3ImIG9wZXJhdG9yKz0o ZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgX01faW5jcihfX2kpOwogICAgcmV0dXJuICp0aGlz OwogIH0KICBjb25zdF9pdGVyYXRvciYgb3BlcmF0b3ItPShkaWZmZXJlbmNlX3R5cGUgX19pKSB7 CiAgICAqdGhpcyArPSAtX19pOwogICAgcmV0dXJuICp0aGlzOwogIH0KICBjb25zdF9pdGVyYXRv ciBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9faSkgY29uc3QgewogICAgY29uc3RfaXRlcmF0 b3IgX190bXAgPSAqdGhpczsKICAgIHJldHVybiBfX3RtcCArPSBfX2k7CiAgfQogIGNvbnN0X2l0 ZXJhdG9yIG9wZXJhdG9yLShkaWZmZXJlbmNlX3R5cGUgX19pKSBjb25zdCB7CiAgICBjb25zdF9p dGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgcmV0dXJuIF9fdG1wIC09IF9faTsKICB9CiAgY29u c3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oZGlmZmVyZW5jZV90eXBlIF9faSkgewogICAgcmV0dXJu ICooKnRoaXMgKyBfX2kpOwogIH0KfTsKCmlubGluZSBfQml0X2NvbnN0X2l0ZXJhdG9yCm9wZXJh dG9yKyhwdHJkaWZmX3QgX19uLCBjb25zdCBfQml0X2NvbnN0X2l0ZXJhdG9yJiBfX3gpIHsgcmV0 dXJuIF9feCArIF9fbjsgfQoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jYXRvciwgYm9vbCBf X2lzX3N0YXRpYz4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZSB7CnB1YmxpYzoKICB0eXBlZGVm IHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90eXBl CiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX01fZGF0YV9hbGxvY2F0b3I7IH0KCiAgX0J2ZWN0b3JfYWxsb2Nf YmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hKQogICAgOiBfTV9kYXRhX2FsbG9jYXRvcihf X2EpLCBfTV9zdGFydCgpLCBfTV9maW5pc2goKSwgX01fZW5kX29mX3N0b3JhZ2UoMCkge30KCnBy b3RlY3RlZDoKICB1bnNpZ25lZCBpbnQqIF9NX2JpdF9hbGxvYyhzaXplX3QgX19uKQogICAgeyBy ZXR1cm4gX01fZGF0YV9hbGxvY2F0b3IuYWxsb2NhdGUoKF9fbiArIF9fV09SRF9CSVQgLSAxKS9f X1dPUkRfQklUKTsgfQogIHZvaWQgX01fZGVhbGxvY2F0ZSgpIHsKICAgIGlmIChfTV9zdGFydC5f TV9wKQogICAgICBfTV9kYXRhX2FsbG9jYXRvci5kZWFsbG9jYXRlKF9NX3N0YXJ0Ll9NX3AsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgLSBfTV9z dGFydC5fTV9wKTsKICB9CgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8dW5zaWduZWQgaW50LCBf QWxsb2NhdG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIF9NX2RhdGFfYWxsb2NhdG9yOwog IF9CaXRfaXRlcmF0b3IgX01fc3RhcnQ7CiAgX0JpdF9pdGVyYXRvciBfTV9maW5pc2g7CiAgdW5z aWduZWQgaW50KiBfTV9lbmRfb2Zfc3RvcmFnZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9j YXRvcj4KY2xhc3MgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2NhdG9yLCB0cnVlPiB7CnB1Ymxp YzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jYXRvcj46OmFs bG9jYXRvcl90eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBn ZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBfQnZl Y3Rvcl9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikKICAgIDogX01fc3RhcnQoKSwg X01fZmluaXNoKCksIF9NX2VuZF9vZl9zdG9yYWdlKDApIHt9Cgpwcm90ZWN0ZWQ6CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPHVuc2lnbmVkIGludCwgX0FsbG9jYXRvcj46Ol9BbGxv Y190eXBlCiAgICAgICAgICBfQWxsb2NfdHlwZTsKCiAgdW5zaWduZWQgaW50KiBfTV9iaXRfYWxs b2Moc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgoX19uICsg X19XT1JEX0JJVCAtIDEpL19fV09SRF9CSVQpOyB9CiAgdm9pZCBfTV9kZWFsbG9jYXRlKCkgewog ICAgaWYgKF9NX3N0YXJ0Ll9NX3ApCiAgICAgIF9BbGxvY190eXBlOjpkZWFsbG9jYXRlKF9NX3N0 YXJ0Ll9NX3AsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2VuZF9vZl9zdG9yYWdl IC0gX01fc3RhcnQuX01fcCk7CiAgfQoKICBfQml0X2l0ZXJhdG9yIF9NX3N0YXJ0OwogIF9CaXRf aXRlcmF0b3IgX01fZmluaXNoOwogIHVuc2lnbmVkIGludCogX01fZW5kX29mX3N0b3JhZ2U7Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgpjbGFzcyBfQnZlY3Rvcl9iYXNlCiAgOiBwdWJsaWMg X0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfQWxsb2NfdHJhaXRzPGJvb2wsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVk ZWYgX0J2ZWN0b3JfYWxsb2NfYmFzZTxfQWxsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9BbGxvY190cmFpdHM8Ym9vbCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNzPgogICAgICAg ICAgX0Jhc2U7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0b3JfdHlw ZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0J2ZWN0b3JfYmFzZShjb25zdCBhbGxvY2F0b3JfdHlwZSYg X19hKSA6IF9CYXNlKF9fYSkge30KICB+X0J2ZWN0b3JfYmFzZSgpIHsgX0Jhc2U6Ol9NX2RlYWxs b2NhdGUoKTsgfQp9OwoKfQoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF92ZWN0 b3IuaCIgMSAzCiMgMzQ3ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2J2ZWN0b3IuaCIg MiAzCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPHR5cGVuYW1lIF9BbGxvYz4KICBjbGFzcyB2 ZWN0b3I8Ym9vbCwgX0FsbG9jPiA6IHB1YmxpYyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz4KICB7CiAg cHVibGljOgogICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICB0eXBlZGVmIHNpemVfdCBz aXplX3R5cGU7CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICB0eXBl ZGVmIF9CaXRfcmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIHR5cGVkZWYgYm9vbCBjb25zdF9yZWZl cmVuY2U7CiAgICB0eXBlZGVmIF9CaXRfcmVmZXJlbmNlKiBwb2ludGVyOwogICAgdHlwZWRlZiBj b25zdCBib29sKiBjb25zdF9wb2ludGVyOwoKICAgIHR5cGVkZWYgX0JpdF9pdGVyYXRvciBpdGVy YXRvcjsKICAgIHR5cGVkZWYgX0JpdF9jb25zdF9pdGVyYXRvciBjb25zdF9pdGVyYXRvcjsKCiAg ICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0X3JldmVyc2Vf aXRlcmF0b3I7CiAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJldmVyc2Vf aXRlcmF0b3I7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46OmFs bG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwogICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9j YXRvcigpIGNvbnN0IHsKICAgICAgcmV0dXJuIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6Z2V0X2Fs bG9jYXRvcigpOwogICAgfQoKICBwcm90ZWN0ZWQ6CiAgICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9B bGxvYz46Ol9NX2JpdF9hbGxvYzsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01f ZGVhbGxvY2F0ZTsKICAgIHVzaW5nIF9CdmVjdG9yX2Jhc2U8X0FsbG9jPjo6X01fc3RhcnQ7CiAg ICB1c2luZyBfQnZlY3Rvcl9iYXNlPF9BbGxvYz46Ol9NX2ZpbmlzaDsKICAgIHVzaW5nIF9CdmVj dG9yX2Jhc2U8X0FsbG9jPjo6X01fZW5kX29mX3N0b3JhZ2U7CgogIHByb3RlY3RlZDoKICAgIHZv aWQgX01faW5pdGlhbGl6ZShzaXplX3R5cGUgX19uKSB7CiAgICAgIHVuc2lnbmVkIGludCogX19x ID0gX01fYml0X2FsbG9jKF9fbik7CiAgICAgIF9NX2VuZF9vZl9zdG9yYWdlID0gX19xICsgKF9f biArIF9fV09SRF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICBfTV9zdGFydCA9IGl0ZXJhdG9y KF9fcSwgMCk7CiAgICAgIF9NX2ZpbmlzaCA9IF9NX3N0YXJ0ICsgZGlmZmVyZW5jZV90eXBlKF9f bik7CiAgICB9CiAgICB2b2lkIF9NX2luc2VydF9hdXgoaXRlcmF0b3IgX19wb3NpdGlvbiwgYm9v bCBfX3gpIHsKICAgICAgaWYgKF9NX2ZpbmlzaC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKSB7 CiAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBfTV9maW5pc2gsIF9NX2ZpbmlzaCAr IDEpOwogICAgICAgICpfX3Bvc2l0aW9uID0gX194OwogICAgICAgICsrX01fZmluaXNoOwogICAg ICB9CiAgICAgIGVsc2UgewogICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNpemUoKSA/IDIgKiBz aXplKCkgOiBfX1dPUkRfQklUOwogICAgICAgIHVuc2lnbmVkIGludCogX19xID0gX01fYml0X2Fs bG9jKF9fbGVuKTsKICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCksIF9fcG9zaXRp b24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICpfX2krKyA9IF9feDsKICAgICAgICBfTV9m aW5pc2ggPSBjb3B5KF9fcG9zaXRpb24sIGVuZCgpLCBfX2kpOwogICAgICAgIF9NX2RlYWxsb2Nh dGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09SRF9C SVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsK ICAgICAgfQogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZv aWQgX01faW5pdGlhbGl6ZV9yYW5nZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0b3Jf dGFnKSB7CiAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoKTsKICAgICAgX01fZmluaXNoID0gaXRl cmF0b3IoKTsKICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSAwOwogICAgICBmb3IgKCA7IF9fZmly c3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgcHVzaF9iYWNrKCpfX2ZpcnN0KTsKICAg IH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5p dGlhbGl6ZV9yYW5nZShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFn KSB7CiAgICAgIHNpemVfdHlwZSBfX24gPSAwOwogICAgICBkaXN0YW5jZShfX2ZpcnN0LCBfX2xh c3QsIF9fbik7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsKICAgICAgY29weShfX2ZpcnN0LCBf X2xhc3QsIF9NX3N0YXJ0KTsKICAgIH0KCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgICB2b2lkIF9NX2luc2VydF9yYW5nZShpdGVyYXRvciBfX3BvcywKICAgICAgICAgICAg ICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykgewogICAgICBm b3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpIHsKICAgICAgICBfX3BvcyA9IGlu c2VydChfX3BvcywgKl9fZmlyc3QpOwogICAgICAgICsrX19wb3M7CiAgICAgIH0KICAgIH0KCiAg ICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIHZvaWQgX01faW5zZXJ0X3Jh bmdlKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRvcl90YWcpIHsKICAgICAgaWYgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgICAgc2l6ZV90eXBlIF9fbiA9IDA7CiAgICAgICAgZGlzdGFuY2UoX19m aXJzdCwgX19sYXN0LCBfX24pOwogICAgICAgIGlmIChjYXBhY2l0eSgpIC0gc2l6ZSgpID49IF9f bikgewogICAgICAgICAgY29weV9iYWNrd2FyZChfX3Bvc2l0aW9uLCBlbmQoKSwgX01fZmluaXNo ICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgICAgY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fcG9zaXRpb24pOwogICAgICAgICAgX01fZmluaXNoICs9IGRpZmZlcmVuY2VfdHlwZShfX24p OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgIHNpemVfdHlwZSBfX2xlbiA9IHNp emUoKSArIG1heChzaXplKCksIF9fbik7CiAgICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9N X2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgICBpdGVyYXRvciBfX2kgPSBjb3B5KGJlZ2luKCks IF9fcG9zaXRpb24sIGl0ZXJhdG9yKF9fcSwgMCkpOwogICAgICAgICAgX19pID0gY29weShfX2Zp cnN0LCBfX2xhc3QsIF9faSk7CiAgICAgICAgICBfTV9maW5pc2ggPSBjb3B5KF9fcG9zaXRpb24s IGVuZCgpLCBfX2kpOwogICAgICAgICAgX01fZGVhbGxvY2F0ZSgpOwogICAgICAgICAgX01fZW5k X29mX3N0b3JhZ2UgPSBfX3EgKyAoX19sZW4gKyBfX1dPUkRfQklUIC0gMSkvX19XT1JEX0JJVDsK ICAgICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAwKTsKICAgICAgICB9CiAgICAgIH0K ICAgIH0KCiAgcHVibGljOgogICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV9zdGFydDsg fQogICAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBfTV9zdGFydDsgfQog ICAgaXRlcmF0b3IgZW5kKCkgeyByZXR1cm4gX01fZmluaXNoOyB9CiAgICBjb25zdF9pdGVyYXRv ciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV9maW5pc2g7IH0KCiAgICByZXZlcnNlX2l0ZXJhdG9y IHJiZWdpbigpIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CiAgICBjb25zdF9y ZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAgICAgcmV0dXJuIGNvbnN0X3JldmVy c2VfaXRlcmF0b3IoZW5kKCkpOwogICAgfQogICAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgeyBy ZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogICAgY29uc3RfcmV2ZXJzZV9pdGVy YXRvciByZW5kKCkgY29uc3QgewogICAgICByZXR1cm4gY29uc3RfcmV2ZXJzZV9pdGVyYXRvcihi ZWdpbigpKTsKICAgIH0KCiAgICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIHNpemVf dHlwZShlbmQoKSAtIGJlZ2luKCkpOyB9CiAgICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB7 IHJldHVybiBzaXplX3R5cGUoLTEpOyB9CiAgICBzaXplX3R5cGUgY2FwYWNpdHkoKSBjb25zdCB7 CiAgICAgIHJldHVybiBzaXplX3R5cGUoY29uc3RfaXRlcmF0b3IoX01fZW5kX29mX3N0b3JhZ2Us IDApIC0gYmVnaW4oKSk7CiAgICB9CiAgICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gYmVn aW4oKSA9PSBlbmQoKTsgfQoKICAgIHJlZmVyZW5jZSBvcGVyYXRvcltdKHNpemVfdHlwZSBfX24p CiAgICAgIHsgcmV0dXJuICooYmVnaW4oKSArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsgfQogICAg Y29uc3RfcmVmZXJlbmNlIG9wZXJhdG9yW10oc2l6ZV90eXBlIF9fbikgY29uc3QKICAgICAgeyBy ZXR1cm4gKihiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOyB9CgogICAgdm9pZCBfTV9y YW5nZV9jaGVjayhzaXplX3R5cGUgX19uKSBjb25zdCB7CiAgICAgIGlmIChfX24gPj0gdGhpcy0+ c2l6ZSgpKQogICAgICAgIF9fdGhyb3dfcmFuZ2VfZXJyb3IoInZlY3Rvcjxib29sPiIpOwogICAg fQoKICAgIHJlZmVyZW5jZSBhdChzaXplX3R5cGUgX19uKQogICAgICB7IF9NX3JhbmdlX2NoZWNr KF9fbik7IHJldHVybiAoKnRoaXMpW19fbl07IH0KICAgIGNvbnN0X3JlZmVyZW5jZSBhdChzaXpl X3R5cGUgX19uKSBjb25zdAogICAgICB7IF9NX3JhbmdlX2NoZWNrKF9fbik7IHJldHVybiAoKnRo aXMpW19fbl07IH0KCiAgICBleHBsaWNpdCB2ZWN0b3IoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9f YSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICAgIDogX0J2ZWN0b3JfYmFzZTxfQWxsb2M+KF9fYSkg e30KCiAgICB2ZWN0b3Ioc2l6ZV90eXBlIF9fbiwgYm9vbCBfX3ZhbHVlLAogICAgICAgICAgICAg IGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgICA6IF9C dmVjdG9yX2Jhc2U8X0FsbG9jPihfX2EpCiAgICB7CiAgICAgIF9NX2luaXRpYWxpemUoX19uKTsK ICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFnZSwgX192YWx1ZSA/IH4w IDogMCk7CiAgICB9CgogICAgZXhwbGljaXQgdmVjdG9yKHNpemVfdHlwZSBfX24pCiAgICAgIDog X0J2ZWN0b3JfYmFzZTxfQWxsb2M+KGFsbG9jYXRvcl90eXBlKCkpCiAgICB7CiAgICAgIF9NX2lu aXRpYWxpemUoX19uKTsKICAgICAgZmlsbChfTV9zdGFydC5fTV9wLCBfTV9lbmRfb2Zfc3RvcmFn ZSwgMCk7CiAgICB9CgogICAgdmVjdG9yKGNvbnN0IHZlY3RvciYgX194KSA6IF9CdmVjdG9yX2Jh c2U8X0FsbG9jPihfX3guZ2V0X2FsbG9jYXRvcigpKSB7CiAgICAgIF9NX2luaXRpYWxpemUoX194 LnNpemUoKSk7CiAgICAgIGNvcHkoX194LmJlZ2luKCksIF9feC5lbmQoKSwgX01fc3RhcnQpOwog ICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogICAgdm9pZCBfTV9pbml0aWFs aXplX2Rpc3BhdGNoKF9JbnRlZ2VyIF9fbiwgX0ludGVnZXIgX194LCBfX3RydWVfdHlwZSkgewog ICAgICBfTV9pbml0aWFsaXplKF9fbik7CiAgICAgIGZpbGwoX01fc3RhcnQuX01fcCwgX01fZW5k X29mX3N0b3JhZ2UsIF9feCA/IH4wIDogMCk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9pbml0aWFsaXplX2Rpc3BhdGNoKF9JbnB1dEl0ZXJh dG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2ZhbHNlX3R5cGUpIHsKICAgICAgX01faW5pdGlhbGl6ZV9yYW5nZShfX2Zp cnN0LCBfX2xhc3QsIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQoKICAgIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgIHZlY3RvcihfSW5wdXRJdGVyYXRvciBf X2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICBjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgICAgOiBfQnZlY3Rvcl9iYXNlPF9B bGxvYz4oX19hKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1 dEl0ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5pdGlhbGl6ZV9kaXNw YXRjaChfX2ZpcnN0LCBfX2xhc3QsIF9JbnRlZ3JhbCgpKTsKICAgIH0KCiAgICB+dmVjdG9yKCkg eyB9CgogICAgdmVjdG9yJiBvcGVyYXRvcj0oY29uc3QgdmVjdG9yJiBfX3gpIHsKICAgICAgaWYg KCZfX3ggPT0gdGhpcykgcmV0dXJuICp0aGlzOwogICAgICBpZiAoX194LnNpemUoKSA+IGNhcGFj aXR5KCkpIHsKICAgICAgICBfTV9kZWFsbG9jYXRlKCk7CiAgICAgICAgX01faW5pdGlhbGl6ZShf X3guc2l6ZSgpKTsKICAgICAgfQogICAgICBjb3B5KF9feC5iZWdpbigpLCBfX3guZW5kKCksIGJl Z2luKCkpOwogICAgICBfTV9maW5pc2ggPSBiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9feC5z aXplKCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKCiAgICB2b2lkIF9NX2ZpbGxf YXNzaWduKHNpemVfdCBfX24sIGJvb2wgX194KSB7CiAgICAgIGlmIChfX24gPiBzaXplKCkpIHsK ICAgICAgICBmaWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6 IDApOwogICAgICAgIGluc2VydChlbmQoKSwgX19uIC0gc2l6ZSgpLCBfX3gpOwogICAgICB9CiAg ICAgIGVsc2UgewogICAgICAgIGVyYXNlKGJlZ2luKCkgKyBfX24sIGVuZCgpKTsKICAgICAgICBm aWxsKF9NX3N0YXJ0Ll9NX3AsIF9NX2VuZF9vZl9zdG9yYWdlLCBfX3ggPyB+MCA6IDApOwogICAg ICB9CiAgICB9CgogICAgdm9pZCBhc3NpZ24oc2l6ZV90IF9fbiwgYm9vbCBfX3gpIHsgX01fZmls bF9hc3NpZ24oX19uLCBfX3gpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y PgogICAgdm9pZCBhc3NpZ24oX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0KSB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0lucHV0SXRlcmF0 b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgICBfTV9hc3NpZ25fZGlzcGF0Y2goX19maXJz dCwgX19sYXN0LCBfSW50ZWdyYWwoKSk7CiAgICB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRl Z2VyPgogICAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0ludGVnZXIgX19uLCBfSW50ZWdlciBf X3ZhbCwgX190cnVlX3R5cGUpCiAgICAgIHsgX01fZmlsbF9hc3NpZ24oKHNpemVfdCkgX19uLCAo Ym9vbCkgX192YWwpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CiAgICB2b2lk IF9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0 LCBfX2ZhbHNlX3R5cGUpCiAgICAgIHsgX01fYXNzaWduX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdCkpOyB9CgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3Qs IF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICBpbnB1dF9pdGVy YXRvcl90YWcpIHsKICAgICAgaXRlcmF0b3IgX19jdXIgPSBiZWdpbigpOwogICAgICBmb3IgKCA7 IF9fZmlyc3QgIT0gX19sYXN0ICYmIF9fY3VyICE9IGVuZCgpOyArK19fY3VyLCArK19fZmlyc3Qp CiAgICAgICAgKl9fY3VyID0gKl9fZmlyc3Q7CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkK ICAgICAgICBlcmFzZShfX2N1ciwgZW5kKCkpOwogICAgICBlbHNlCiAgICAgICAgaW5zZXJ0KGVu ZCgpLCBfX2ZpcnN0LCBfX2xhc3QpOwogICAgfQoKICAgIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2Fy ZEl0ZXJhdG9yPgogICAgdm9pZCBfTV9hc3NpZ25fYXV4KF9Gb3J3YXJkSXRlcmF0b3IgX19maXJz dCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgZm9yd2Fy ZF9pdGVyYXRvcl90YWcpIHsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gMDsKICAgICAgZGlzdGFu Y2UoX19maXJzdCwgX19sYXN0LCBfX2xlbik7CiAgICAgIGlmIChfX2xlbiA8IHNpemUoKSkKICAg ICAgICBlcmFzZShjb3B5KF9fZmlyc3QsIF9fbGFzdCwgYmVnaW4oKSksIGVuZCgpKTsKICAgICAg ZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJdGVyYXRvciBfX21pZCA9IF9fZmlyc3Q7CiAgICAgICAg YWR2YW5jZShfX21pZCwgc2l6ZSgpKTsKICAgICAgICBjb3B5KF9fZmlyc3QsIF9fbWlkLCBiZWdp bigpKTsKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbWlkLCBfX2xhc3QpOwogICAgICB9CiAgICB9 CgogICAgdm9pZCByZXNlcnZlKHNpemVfdHlwZSBfX24pIHsKICAgICAgaWYgKGNhcGFjaXR5KCkg PCBfX24pIHsKICAgICAgICB1bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX24pOwog ICAgICAgIF9NX2ZpbmlzaCA9IGNvcHkoYmVnaW4oKSwgZW5kKCksIGl0ZXJhdG9yKF9fcSwgMCkp OwogICAgICAgIF9NX2RlYWxsb2NhdGUoKTsKICAgICAgICBfTV9zdGFydCA9IGl0ZXJhdG9yKF9f cSwgMCk7CiAgICAgICAgX01fZW5kX29mX3N0b3JhZ2UgPSBfX3EgKyAoX19uICsgX19XT1JEX0JJ VCAtIDEpL19fV09SRF9CSVQ7CiAgICAgIH0KICAgIH0KCiAgICByZWZlcmVuY2UgZnJvbnQoKSB7 IHJldHVybiAqYmVnaW4oKTsgfQogICAgY29uc3RfcmVmZXJlbmNlIGZyb250KCkgY29uc3QgeyBy ZXR1cm4gKmJlZ2luKCk7IH0KICAgIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKihlbmQoKSAt IDEpOyB9CiAgICBjb25zdF9yZWZlcmVuY2UgYmFjaygpIGNvbnN0IHsgcmV0dXJuICooZW5kKCkg LSAxKTsgfQogICAgdm9pZCBwdXNoX2JhY2soYm9vbCBfX3gpIHsKICAgICAgaWYgKF9NX2Zpbmlz aC5fTV9wICE9IF9NX2VuZF9vZl9zdG9yYWdlKQogICAgICAgICpfTV9maW5pc2grKyA9IF9feDsK ICAgICAgZWxzZQogICAgICAgIF9NX2luc2VydF9hdXgoZW5kKCksIF9feCk7CiAgICB9CiAgICB2 b2lkIHN3YXAodmVjdG9yPGJvb2wsIF9BbGxvYz4mIF9feCkgewogICAgICBzdGQ6OnN3YXAoX01f c3RhcnQsIF9feC5fTV9zdGFydCk7CiAgICAgIHN0ZDo6c3dhcChfTV9maW5pc2gsIF9feC5fTV9m aW5pc2gpOwogICAgICBzdGQ6OnN3YXAoX01fZW5kX29mX3N0b3JhZ2UsIF9feC5fTV9lbmRfb2Zf c3RvcmFnZSk7CiAgICB9CiAgICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwg Ym9vbCBfX3ggPSBib29sKCkpIHsKICAgICAgZGlmZmVyZW5jZV90eXBlIF9fbiA9IF9fcG9zaXRp b24gLSBiZWdpbigpOwogICAgICBpZiAoX01fZmluaXNoLl9NX3AgIT0gX01fZW5kX29mX3N0b3Jh Z2UgJiYgX19wb3NpdGlvbiA9PSBlbmQoKSkKICAgICAgICAqX01fZmluaXNoKysgPSBfX3g7CiAg ICAgIGVsc2UKICAgICAgICBfTV9pbnNlcnRfYXV4KF9fcG9zaXRpb24sIF9feCk7CiAgICAgIHJl dHVybiBiZWdpbigpICsgX19uOwogICAgfQoKCgogICAgdGVtcGxhdGUgPGNsYXNzIF9JbnRlZ2Vy PgogICAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRlZ2VyIF9f biwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cnVlX3R5cGUp IHsKICAgICAgX01fZmlsbF9pbnNlcnQoX19wb3MsIF9fbiwgX194KTsKICAgIH0KCiAgICB0ZW1w bGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICB2b2lkIF9NX2luc2VydF9kaXNwYXRjaChp dGVyYXRvciBfX3BvcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZmFsc2VfdHlwZSkgewogICAgICBfTV9pbnNlcnRfcmFuZ2UoX19wb3MsIF9fZmlyc3Qs IF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgogICAgdGVtcGxh dGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3Np dGlvbiwKICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJh dG9yIF9fbGFzdCkgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19pbnRlZ2VyPF9JbnB1dEl0 ZXJhdG9yPjo6X0ludGVncmFsIF9JbnRlZ3JhbDsKICAgICAgX01faW5zZXJ0X2Rpc3BhdGNoKF9f cG9zaXRpb24sIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogICAgfQoKICAgIHZvaWQg X01fZmlsbF9pbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbiwgc2l6ZV90eXBlIF9fbiwgYm9vbCBf X3gpIHsKICAgICAgaWYgKF9fbiA9PSAwKSByZXR1cm47CiAgICAgIGlmIChjYXBhY2l0eSgpIC0g c2l6ZSgpID49IF9fbikgewogICAgICAgIGNvcHlfYmFja3dhcmQoX19wb3NpdGlvbiwgZW5kKCks IF9NX2ZpbmlzaCArIGRpZmZlcmVuY2VfdHlwZShfX24pKTsKICAgICAgICBmaWxsKF9fcG9zaXRp b24sIF9fcG9zaXRpb24gKyBkaWZmZXJlbmNlX3R5cGUoX19uKSwgX194KTsKICAgICAgICBfTV9m aW5pc2ggKz0gZGlmZmVyZW5jZV90eXBlKF9fbik7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAg ICAgc2l6ZV90eXBlIF9fbGVuID0gc2l6ZSgpICsgbWF4KHNpemUoKSwgX19uKTsKICAgICAgICB1 bnNpZ25lZCBpbnQqIF9fcSA9IF9NX2JpdF9hbGxvYyhfX2xlbik7CiAgICAgICAgaXRlcmF0b3Ig X19pID0gY29weShiZWdpbigpLCBfX3Bvc2l0aW9uLCBpdGVyYXRvcihfX3EsIDApKTsKICAgICAg ICBmaWxsX24oX19pLCBfX24sIF9feCk7CiAgICAgICAgX01fZmluaXNoID0gY29weShfX3Bvc2l0 aW9uLCBlbmQoKSwgX19pICsgZGlmZmVyZW5jZV90eXBlKF9fbikpOwogICAgICAgIF9NX2RlYWxs b2NhdGUoKTsKICAgICAgICBfTV9lbmRfb2Zfc3RvcmFnZSA9IF9fcSArIChfX2xlbiArIF9fV09S RF9CSVQgLSAxKS9fX1dPUkRfQklUOwogICAgICAgIF9NX3N0YXJ0ID0gaXRlcmF0b3IoX19xLCAw KTsKICAgICAgfQogICAgfQoKICAgIHZvaWQgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIHNp emVfdHlwZSBfX24sIGJvb2wgX194KSB7CiAgICAgIF9NX2ZpbGxfaW5zZXJ0KF9fcG9zaXRpb24s IF9fbiwgX194KTsKICAgIH0KCiAgICB2b2lkIHBvcF9iYWNrKCkgeyAtLV9NX2ZpbmlzaDsgfQog ICAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgewogICAgICBpZiAoX19wb3Np dGlvbiArIDEgIT0gZW5kKCkpCiAgICAgICAgY29weShfX3Bvc2l0aW9uICsgMSwgZW5kKCksIF9f cG9zaXRpb24pOwogICAgICAgIC0tX01fZmluaXNoOwogICAgICByZXR1cm4gX19wb3NpdGlvbjsK ICAgIH0KICAgIGl0ZXJhdG9yIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFz dCkgewogICAgICBfTV9maW5pc2ggPSBjb3B5KF9fbGFzdCwgZW5kKCksIF9fZmlyc3QpOwogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KICAgIHZvaWQgcmVzaXplKHNpemVfdHlwZSBfX25ld19z aXplLCBib29sIF9feCA9IGJvb2woKSkgewogICAgICBpZiAoX19uZXdfc2l6ZSA8IHNpemUoKSkK ICAgICAgICBlcmFzZShiZWdpbigpICsgZGlmZmVyZW5jZV90eXBlKF9fbmV3X3NpemUpLCBlbmQo KSk7CiAgICAgIGVsc2UKICAgICAgICBpbnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBzaXplKCks IF9feCk7CiAgICB9CiAgICB2b2lkIGZsaXAoKSB7CiAgICAgIGZvciAodW5zaWduZWQgaW50KiBf X3AgPSBfTV9zdGFydC5fTV9wOyBfX3AgIT0gX01fZW5kX29mX3N0b3JhZ2U7ICsrX19wKQogICAg ICAgICpfX3AgPSB+Kl9fcDsKICAgIH0KCiAgICB2b2lkIGNsZWFyKCkgeyBlcmFzZShiZWdpbigp LCBlbmQoKSk7IH0KICB9OwoKCnR5cGVkZWYgdmVjdG9yPGJvb2wsIGFsbG9jPiBiaXRfdmVjdG9y OwoKfQojIDY4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZlY3Rvci5oIiAyIDMKIyA0 NCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgpuYW1l c3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBsb2NhbGUKICAgIGxv Y2FsZTo6Y29tYmluZShjb25zdCBsb2NhbGUmIF9fb3RoZXIpCiAgICB7CiAgICAgIGxvY2FsZSBf X2NvcHkoKnRoaXMpOwogICAgICBfX2NvcHkuX01faW1wbC0+X01fcmVwbGFjZV9mYWNldChfX290 aGVyLl9NX2ltcGwsICZfRmFjZXQ6OmlkKTsKICAgICAgcmV0dXJuIF9fY29weTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBib29sCiAgICBsb2NhbGU6Om9wZXJhdG9yKCkoY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zMSwKICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdAogICAg ewogICAgICB0eXBlZGVmIHN0ZDo6Y29sbGF0ZTxfQ2hhclQ+IF9fY29sbGF0ZV90eXBlOwogICAg ICBjb25zdCBfX2NvbGxhdGVfdHlwZSogX19mY29sbCA9ICZ1c2VfZmFjZXQ8X19jb2xsYXRlX3R5 cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2Zjb2xsLT5jb21wYXJlKF9fczEuZGF0YSgpLCBf X3MxLmRhdGEoKSArIF9fczEubGVuZ3RoKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfX3MyLmRhdGEoKSwgX19zMi5kYXRhKCkgKyBfX3MyLmxlbmd0aCgpKSA8IDApOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBjb25zdCBfRmFjZXQmCiAgICB1c2VfZmFj ZXQoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAgdHlwZWRlZiBsb2NhbGU6Ol9JbXBs OjpfX3ZlY19mYWNldCBfX3ZlY19mYWNldDsKICAgICAgc2l6ZV90IF9faSA9IF9GYWNldDo6aWQu X01faW5kZXg7CiAgICAgIF9fdmVjX2ZhY2V0KiBfX2ZhY2V0ID0gX19sb2MuX01faW1wbC0+X01f ZmFjZXRzOwogICAgICBjb25zdCBsb2NhbGU6OmZhY2V0KiBfX2ZwID0gKCpfX2ZhY2V0KVtfX2ld OwogICAgICBpZiAoX19mcCA9PSAwIHx8IF9faSA+PSBfX2ZhY2V0LT5zaXplKCkpCiAgICAgICAg X190aHJvd19iYWRfY2FzdCgpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgX0ZhY2V0 Jj4oKl9fZnApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAg ICBoYXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKQogICAgewogICAgICB0eXBl ZGVmIGxvY2FsZTo6X0ltcGw6Ol9fdmVjX2ZhY2V0IF9fdmVjX2ZhY2V0OwogICAgICBzaXplX3Qg X19pID0gX0ZhY2V0OjppZC5fTV9pbmRleDsKICAgICAgX192ZWNfZmFjZXQqIF9fZmFjZXQgPSBf X2xvYy5fTV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIHJldHVybiAoX19pIDwgX19mYWNldC0+c2l6 ZSgpICYmICgqX19mYWNldClbX19pXSAhPSAwKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0luSXRlciwgdHlwZW5hbWUgX0NoYXJUPgogICAgX0luSXRlcgogICAgX19tYXRjaF9w YXJhbGxlbChfSW5JdGVyIF9fcywgX0luSXRlciBfX2VuZCwgaW50IF9fbnRhcmdzLAogICAgICAg ICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJUPiogX190YXJnZXRzLAogICAg ICAgICAgICAgICAgICAgICBpbnQqIF9fbWF0Y2hlcywgaW50JiBfX3JlbWFpbiwgYm9vbCYgX19l b2YpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gX19zdHJpbmdfdHlw ZTsKICAgICAgX19lb2YgPSBmYWxzZTsKICAgICAgZm9yIChpbnQgX190aSA9IDA7IF9fdGkgPCBf X250YXJnczsgKytfX3RpKQogICAgICAgIF9fbWF0Y2hlc1tfX3RpXSA9IF9fdGk7CiAgICAgIF9f cmVtYWluID0gX19udGFyZ3M7CiAgICAgIHNpemVfdCBfX3BvcyA9IDA7CiAgICAgIGRvCiAgICAg ICAgewogICAgICAgICAgaW50IF9fdGkgPSAwOwogICAgICAgICAgd2hpbGUgKF9fdGkgPCBfX3Jl bWFpbiAmJiBfX3BvcyA9PSBfX3RhcmdldHNbX19tYXRjaGVzW19fdGldXS5zaXplKCkpCiAgICAg ICAgICAgICsrX190aTsKICAgICAgICAgIGlmIChfX3RpID09IF9fcmVtYWluKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID09IDApIF9fcmVtYWluID0gMDsKICAgICAgICAg ICAgICByZXR1cm4gX19zOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19zID09IF9fZW5k KQogICAgICAgICAgICBfX2VvZiA9IHRydWU7CiAgICAgICAgICBib29sIF9fbWF0Y2hlZCA9IGZh bHNlOwogICAgICAgICAgZm9yIChpbnQgX190aTIgPSAwOyBfX3RpMiA8IF9fcmVtYWluOyApCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBjb25zdCBfX3N0cmluZ190eXBlJiBfX3RhcmdldCA9 IF9fdGFyZ2V0c1tfX21hdGNoZXNbX190aTJdXTsKICAgICAgICAgICAgICBpZiAoX19wb3MgPCBf X3RhcmdldC5zaXplKCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChf X2VvZiB8fCBfX3RhcmdldFtfX3Bvc10gIT0gKl9fcykKICAgICAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICAgICBfX21hdGNoZXNbX190aTJdID0gX19tYXRjaGVzWy0tX19yZW1h aW5dOwogICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgICAgICBfX21hdGNoZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICsrX190aTI7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX21hdGNo ZWQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICArK19f cG9zOwogICAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGludCBfX3RpMyA9IDA7IF9fdGkzIDwg X19yZW1haW47KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9fcG9zID4gX190YXJn ZXRzW19fbWF0Y2hlc1tfX3RpM11dLnNpemUoKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19tYXRjaGVzW19fdGkzXSA9IF9fbWF0Y2hlc1stLV9fcmVtYWluXTsKICAgICAg ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgKytf X3RpMzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgd2hpbGUgKF9fcmVtYWluKTsKICAg ICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgX0Zv cm1hdF9jYWNoZTxfQ2hhclQ+OjpfRm9ybWF0X2NhY2hlKCkKICAgIDogX01fdmFsaWQodHJ1ZSks IF9NX3VzZV9ncm91cGluZyhmYWxzZSkKICAgIHsgfQoKICB0ZW1wbGF0ZTw+CiAgICBfRm9ybWF0 X2NhY2hlPGNoYXI+OjpfRm9ybWF0X2NhY2hlKCk7CgogIHRlbXBsYXRlPD4KICAgIF9Gb3JtYXRf Y2FjaGU8d2NoYXJfdD46Ol9Gb3JtYXRfY2FjaGUoKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgdm9pZAogICAgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfTV9wb3B1bGF0ZShpb3Nf YmFzZSYgX19pbykKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MgKCk7CiAg ICAgIG51bXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0No YXJUPiA+KF9fbG9jKTsKICAgICAgX01fdHJ1ZW5hbWUgPSBfX25wLnRydWVuYW1lKCk7CiAgICAg IF9NX2ZhbHNlbmFtZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgIF9NX3Rob3VzYW5kc19zZXAg PSBfX25wLnRob3VzYW5kc19zZXAoKTsKICAgICAgX01fZGVjaW1hbF9wb2ludCA9IF9fbnAuZGVj aW1hbF9wb2ludCgpOwogICAgICBfTV9ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAg X01fdXNlX2dyb3VwaW5nID0gX01fZ3JvdXBpbmcuc2l6ZSgpICE9IDAgJiYgX01fZ3JvdXBpbmcu ZGF0YSgpWzBdICE9IDA7CiAgICAgIF9NX3ZhbGlkID0gdHJ1ZTsKICAgIH0KCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ogog ICAgX1NfY2FsbGJhY2soaW9zX2Jhc2U6OmV2ZW50IF9fZXYsIGlvc19iYXNlJiBfX2lvcywgaW50 IF9faXgpIHRocm93KCkKICAgIHsKICAgICAgdm9pZComIF9fcCA9IF9faW9zLnB3b3JkKF9faXgp OwogICAgICBzd2l0Y2ggKF9fZXYpCiAgICAgICAgewogICAgICAgIGNhc2UgaW9zX2Jhc2U6OmVy YXNlX2V2ZW50OgogICAgICAgICAgZGVsZXRlIHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0No YXJUPio+KF9fcCk7CiAgICAgICAgICBfX3AgPSAwOwogICAgICAgICAgYnJlYWs7CiAgICAgICAg Y2FzZSBpb3NfYmFzZTo6Y29weWZtdF9ldmVudDoKCiAgICAgICAgICB0cnkKICAgICAgICAgICAg eyBfX3AgPSBuZXcgX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OyB9CiAgICAgICAgICBjYXRjaCguLi4p CiAgICAgICAgICAgIHsgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSBpb3NfYmFzZTo6 aW1idWVfZXZlbnQ6CiAgICAgICAgICBzdGF0aWNfY2FzdDxfRm9ybWF0X2NhY2hlPF9DaGFyVD4q PihfX3ApLT5fTV92YWxpZCA9IGZhbHNlOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD4q CiAgICBfRm9ybWF0X2NhY2hlPF9DaGFyVD46Ol9TX2dldChpb3NfYmFzZSYgX19pb3MpCiAgICB7 CiAgICAgIGlmICghX1NfcHdvcmRfaXgpCiAgICAgICAgX1NfcHdvcmRfaXggPSBpb3NfYmFzZTo6 eGFsbG9jKCk7CiAgICAgIHZvaWQqJiBfX3AgPSBfX2lvcy5wd29yZChfU19wd29yZF9peCk7CgoK ICAgICAgaWYgKF9fcCA9PSAwKQogICAgICAgIHsKICAgICAgICAgIGF1dG9fcHRyPF9Gb3JtYXRf Y2FjaGU8X0NoYXJUPiA+IF9fYXAobmV3IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPik7CiAgICAgICAg ICBfX2lvcy5yZWdpc3Rlcl9jYWxsYmFjaygmX0Zvcm1hdF9jYWNoZTxfQ2hhclQ+OjpfU19jYWxs YmFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX3B3b3JkX2l4KTsKICAg ICAgICAgIF9fcCA9IF9fYXAucmVsZWFzZSgpOwogICAgICAgIH0KICAgICAgX0Zvcm1hdF9jYWNo ZTxfQ2hhclQ+KiBfX25jcCA9IHN0YXRpY19jYXN0PF9Gb3JtYXRfY2FjaGU8X0NoYXJUPio+KF9f cCk7CiAgICAgIGlmICghX19uY3AtPl9NX3ZhbGlkKQogICAgICAgIF9fbmNwLT5fTV9wb3B1bGF0 ZShfX2lvcyk7CgogICAgICByZXR1cm4gX19uY3A7CiAgICB9CiMgMjUwICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgX01fZXh0cmFjdChfSW5JdGVyICwgX0luSXRlciAsIGlvc19iYXNlJiAsCiAgICAg ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiAsIGNoYXIqICwKICAgICAgICAgICAgICAgaW50 JiAsIGJvb2wgKSBjb25zdAogICAgewoKICAgIH0KCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAg bnVtX2dldDxjaGFyLCBpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+ID46OgogICAgX01fZXh0cmFj dChpc3RyZWFtYnVmX2l0ZXJhdG9yPGNoYXI+IF9fYmVnLAogICAgICAgICAgICAgICBpc3RyZWFt YnVmX2l0ZXJhdG9yPGNoYXI+IF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBjaGFyKiBfX3h0cmMsIGludCYgX19iYXNlLAogICAg ICAgICAgICAgICBib29sIF9fZnApIGNvbnN0OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgYm9vbCYgX192 KSBjb25zdAogICAgewoKICAgICAgaWYgKCEoX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJvb2xh bHBoYSkpCiAgICAgICAgewoKCgoKCgogICAgICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9i dWZmZXJfbGVuZ3RoXSA9IHsnXDAnfTsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBf TV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxz ZSk7CgoKICAgICAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0 aW9uICgpKSA9IDA7CiAgICAgICAgICBsb25nIF9fbCA9IHN0cnRvbChfX3h0cmMsICZfX3Nhbml0 eSwgX19iYXNlKTsKICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAg ICAgICAgICAgICAgJiYgX19sIDw9IDEKICAgICAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBfX3h0 cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAwKQog ICAgICAgICAgICBfX3YgPSBfX2w7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBlbHNlCiAgICAgICAgewogICAg ICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hlPGNoYXJfdHlwZT4gX19mY2FjaGVfdHlwZTsKICAg ICAgICAgIF9fZmNhY2hlX3R5cGUqIF9fZm10ID0gX19mY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW8p OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3RydWUgPSBfX2ZtdC0+X01fdHJ1ZW5hbWUu Y19zdHIoKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19mYWxzZSA9IF9fZm10LT5fTV9m YWxzZW5hbWUuY19zdHIoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX3RydWVsZW4gPSBfX3Ry YWl0c190eXBlOjpsZW5ndGgoX190cnVlKSAtIDE7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19m YWxzZWxlbiA9IF9fdHJhaXRzX3R5cGU6Omxlbmd0aChfX2ZhbHNlKSAtIDE7CgogICAgICAgICAg Zm9yIChzaXplX3QgX19wb3MgPSAwOyBfX2JlZyAhPSBfX2VuZDsgKytfX3BvcykKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAg ICBib29sIF9fdGVzdGYgPSBfX2MgPT0gX19mYWxzZVtfX3Bvc107CiAgICAgICAgICAgICAgYm9v bCBfX3Rlc3R0ID0gX19jID09IF9fdHJ1ZVtfX3Bvc107CiAgICAgICAgICAgICAgaWYgKCEoX190 ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19l cnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYgX19wb3MgPT0gX19m YWxzZWxlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX192ID0gMDsKICAg ICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxz ZSBpZiAoX190ZXN0dCAmJiBfX3BvcyA9PSBfX3RydWVsZW4pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fdiA9IDE7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgICAgfQoKICAgICAgcmV0 dXJuIF9fYmVnOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBk b19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAog ICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vyciwgc2hvcnQmIF9fdikgY29uc3QKICAg IHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9 OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAg ICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0cnRvbChf X3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6 ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0g J1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9fbCA+PSAo LTMyNzY3LTEpICYmIF9fbCA8PSAzMjc2NykKICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDxzaG9y dD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46 OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGludCYgX192KSBjb25z dAogICAgewoKCgogICAgICBjaGFyIF9feHRyY1tfTV9leHRyYWN0X2J1ZmZlcl9sZW5ndGhdID0g eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5p dHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICBsb25nIF9fbCA9IHN0 cnRvbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3Nf YmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5p dHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDAKICAgICAgICAgICYmIF9f bCA+PSAoLTIxNDc0ODM2NDcgLTEpICYmIF9fbCA8PSAyMTQ3NDgzNjQ3KQogICAgICAgIF9fdiA9 IHN0YXRpY19jYXN0PGludD4oX19sKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19i YXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBsb25nJiBfX3YpIGNvbnN0CiAgICB7CgoKCiAgICAgIGNoYXIgX194dHJjW19NX2V4dHJhY3Rf YnVmZmVyX2xlbmd0aF09IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01fZXh0cmFj dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2UpOwoKCiAg ICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gMDsKICAg ICAgbG9uZyBfX2wgPSBzdHJ0b2woX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7CiAgICAgIGlm ICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nhbml0eSAhPSBf X3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9PSAw KQogICAgICAgIF9fdiA9IF9fbDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hh clQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2Vu ZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBs b25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFj dF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRy YWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoK ICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwog ICAgICBsb25nIGxvbmcgX19sbCA9IHN0cnRvbGwoX194dHJjLCAmX19zYW5pdHksIF9fYmFzZSk7 CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3Nh bml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5vX2xvY2F0aW9u ICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fbGw7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51 bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVy X3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2VyciwgdW5zaWduZWQgc2hvcnQmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBf X3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNl OwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19i YXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2Nh dGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBzdHJ0b3VsKF9feHRyYywg Jl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0 KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAnXDAnICYm ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYgX191bCA8PSA2NTUzNSkK ICAgICAgICBfX3YgPSBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oX191bCk7CiAgICAgIGVs c2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVybiBfX2Jl ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBpbnQmIF9fdikgY29uc3QKICAgIHsK CgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9Owog ICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAg ICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIF9fdWwgPSBz dHJ0b3VsKF9feHRyYywgJl9fc2FuaXR5LCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMAogICAgICAgICAgJiYg X191bCA8PSAoMjE0NzQ4MzY0NyAqIDJVICsgMSkpCiAgICAgICAgX192ID0gc3RhdGljX2Nhc3Q8 dW5zaWduZWQgaW50PihfX3VsKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNl OjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFy VCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVu c2lnbmVkIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0 cmFjdF9idWZmZXJfbGVuZ3RoXSA9IHsnXDAnfTsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX01f ZXh0cmFjdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSwgZmFsc2Up OwoKCiAgICAgIGNoYXIqIF9fc2FuaXR5OwogICAgICAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0g MDsKICAgICAgdW5zaWduZWQgbG9uZyBfX3VsID0gc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwg X19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAg ICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9f bG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX191bDsKICAgICAgZWxzZQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRl cgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19i ZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKCgoK ICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydcMCd9OwogICAg ICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIs IF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciogX19zYW5pdHk7CiAgICAgICgq X19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB1bnNpZ25lZCBsb25nIGxvbmcgX191bGwg PSBzdHJ0b3VsbChfX3h0cmMsICZfX3Nhbml0eSwgX19iYXNlKTsKICAgICAgaWYgKCEoX19lcnIg JiBpb3NfYmFzZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAq X19zYW5pdHkgPT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAg X192ID0gX191bGw7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKCiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5J dGVyPjo6CiAgICBkb19nZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQmIF9f dikgY29uc3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVu Z3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBf X3Nhbml0eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CgogICAgICBmbG9hdCBf X2YgPSBzdHJ0b2YoX194dHJjLCAmX19zYW5pdHkpOwoKCgogICAgICBpZiAoIShfX2VyciAmIGlv c19iYXNlOjpmYWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nh bml0eSA9PSAnXDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3Yg PSBfX2Y7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAg ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29u c3QKICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0g eydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwg X19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0 eTsKICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGRvdWJsZSBfX2QgPSBz dHJ0b2QoX194dHJjLCAmX19zYW5pdHkpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpm YWlsYml0KQogICAgICAgICAgJiYgX19zYW5pdHkgIT0gX194dHJjICYmICpfX3Nhbml0eSA9PSAn XDAnICYmICgqX19lcnJub19sb2NhdGlvbiAoKSkgPT0gMCkKICAgICAgICBfX3YgPSBfX2Q7CiAg ICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCiAgICAgIHJldHVy biBfX2JlZzsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0lu SXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19n ZXQoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAg ICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBkb3VibGUmIF9fdikgY29uc3QK ICAgIHsKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVuZ3RoXT0geydc MCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBfX2VuZCwgX19p bywgX19lcnIsIF9feHRyYywgX19iYXNlLCB0cnVlKTsKCgogICAgICBjaGFyKiBfX3Nhbml0eTsK ICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgpKSA9IDA7CiAgICAgIGxvbmcgZG91YmxlIF9fbGQg PSBzdHJ0b2xkKF9feHRyYywgJl9fc2FuaXR5KTsKICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFz ZTo6ZmFpbGJpdCkKICAgICAgICAgICYmIF9fc2FuaXR5ICE9IF9feHRyYyAmJiAqX19zYW5pdHkg PT0gJ1wwJyAmJiAoKl9fZXJybm9fbG9jYXRpb24gKCkpID09IDApCiAgICAgICAgX192ID0gX19s ZDsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAg cmV0dXJuIF9fYmVnOwogICAgfQojIDY3OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2xvY2Fs ZV9mYWNldHMudGNjIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dl dChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoK ICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdz IF9fZm10ID0gX19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19i YXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAg IF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNl OjpzaG93YmFzZSkpOwoKCgoKICAgICAgY2hhciBfX3h0cmNbX01fZXh0cmFjdF9idWZmZXJfbGVu Z3RoXT0geydcMCd9OwogICAgICBpbnQgX19iYXNlOwogICAgICBfTV9leHRyYWN0KF9fYmVnLCBf X2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlLCBmYWxzZSk7CgoKICAgICAgY2hhciog X19zYW5pdHk7CiAgICAgICgqX19lcnJub19sb2NhdGlvbiAoKSkgPSAwOwogICAgICB2b2lkKiBf X3ZwID0gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oc3RydG91bChfX3h0cmMsICZfX3Nhbml0eSwg X19iYXNlKSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAg ICAmJiBfX3Nhbml0eSAhPSBfX3h0cmMgJiYgKl9fc2FuaXR5ID09ICdcMCcgJiYgKCpfX2Vycm5v X2xvY2F0aW9uICgpKSA9PSAwKQogICAgICAgIF9fdiA9IF9fdnA7CiAgICAgIGVsc2UKICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKCgogICAgICBfX2lvLmZsYWdzKF9fZm10KTsK ICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX091dEl0ZXI+CiAgICBpbmxpbmUgX091dEl0ZXIKICAgIF9fcGFkKF9PdXRJdGVy IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZyk7CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9SYUl0ZXI+CiAgICBfUmFJdGVyCiAgICBfX3BhZChfUmFJdGVy IF9fcywgX0NoYXJUIF9fZmlsbCwgaW50IF9fcGFkZGluZywKICAgICAgICAgIHJhbmRvbV9hY2Nl c3NfaXRlcmF0b3JfdGFnKQogICAgewogICAgICBmaWxsX24oX19zLCBfX2ZpbGwpOwogICAgICBy ZXR1cm4gX19zICsgX19wYWRkaW5nOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfT3V0SXRlciwgdHlwZW5hbWUgX1RhZz4KICAgIF9PdXRJdGVyCiAgICBfX3Bh ZChfT3V0SXRlciBfX3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcsIF9UYWcpCiAgICB7 CiAgICAgIHdoaWxlICgtLV9fcGFkZGluZyA+PSAwKSB7ICpfX3MgPSBfX2ZpbGw7ICsrX19zOyB9 CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9PdXRJdGVyPgogICAgaW5saW5lIF9PdXRJdGVyCiAgICBfX3BhZChfT3V0SXRlciBf X3MsIF9DaGFyVCBfX2ZpbGwsIGludCBfX3BhZGRpbmcpCiAgICB7CiAgICAgIHJldHVybiBfX3Bh ZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nLAogICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9PdXRJdGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIK ICAgIF9fcGFkX251bWVyaWMoX091dEl0ZXIgX19zLCBpb3NfYmFzZTo6Zm10ZmxhZ3MgLAogICAg ICAgICAgICAgICAgICBfQ2hhclQgLCBpbnQgLAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29u c3QqICwgX0NoYXJUIGNvbnN0KiAsCiAgICAgICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogKQog IHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJU PgogICAgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+CiAgICBfX3BhZF9udW1lcmljKG9zdHJl YW1idWZfaXRlcmF0b3I8X0NoYXJUPiBfX3MsIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzLAog ICAgICAgICAgICAgICAgICBfQ2hhclQgX19maWxsLCBpbnQgX193aWR0aCwgX0NoYXJUIGNvbnN0 KiBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICBfQ2hhclQgY29uc3QqIF9fbWlkZGxlLCBfQ2hh clQgY29uc3QqIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVD4gX19vdXRfaXRlcjsKICAgICAgaW50IF9fcGFkZGluZyA9IF9fd2lkdGggLSAoX19s YXN0IC0gX19maXJzdCk7CiAgICAgIGlmIChfX3BhZGRpbmcgPCAwKQogICAgICAgIF9fcGFkZGlu ZyA9IDA7CiAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2FmbGFncyA9IF9fZmxhZ3MgJiBpb3Nf YmFzZTo6YWRqdXN0ZmllbGQ7CiAgICAgIGJvb2wgX190ZXN0ZmllbGQgPSBfX3BhZGRpbmcgPT0g MCB8fCBfX2FmbGFncyA9PSBpb3NfYmFzZTo6bGVmdAogICAgICAgICAgICAgICAgICAgICAgICAg fHwgX19hZmxhZ3MgPT0gaW9zX2Jhc2U6OmludGVybmFsOwoKCiAgICAgIGlmIChfX2ZpcnN0ICE9 IF9fbWlkZGxlKQogICAgICAgIHsKICAgICAgICAgIGlmICghX190ZXN0ZmllbGQpCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBfX3BhZChfX3MsIF9fZmlsbCwgX19wYWRkaW5nKTsKICAgICAg ICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgICAgICB9CiAgICAgICAgICBjb3B5KF9fZmly c3QsIF9fbWlkZGxlLCBfX3MpOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MyID0gX19z OwoKICAgICAgaWYgKF9fcGFkZGluZyAmJiBfX2FmbGFncyAhPSBpb3NfYmFzZTo6bGVmdCkKICAg ICAgICB7CiAgICAgICAgICBfX3BhZChfX3MyLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgICAg ICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KICAgICAgX19vdXRfaXRlciBfX3MzID0gY29weShf X21pZGRsZSwgX19sYXN0LCBfX3MyKTsKICAgICAgaWYgKF9fcGFkZGluZykKICAgICAgICBfX3Bh ZChfX3MzLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgIHJldHVybiBfX3MzOwogICAgfQoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19z LCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7 CiAgICAgIGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hl PF9DaGFyVD46Ol9TX2dldChfX2lvKTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3Mg PSBfX2lvLmZsYWdzKCk7CgogICAgICBpZiAoKF9fZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhh KSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAg ICAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxsLCBmYWxzZSwg X191dik7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgY29uc3QgY2hh cl90eXBlKiBfX2ZpcnN0OwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2xhc3Q7CiAgICAg ICAgICBpZiAoX192KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19maXJzdCA9IF9fZm10 LT5fTV90cnVlbmFtZS5kYXRhKCk7CiAgICAgICAgICAgICAgX19sYXN0ID0gX19maXJzdCArIF9f Zm10LT5fTV90cnVlbmFtZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgewogICAgICAgICAgICAgIF9fZmlyc3QgPSBfX2ZtdC0+X01fZmFsc2VuYW1lLmRh dGEoKTsKICAgICAgICAgICAgICBfX2xhc3QgPSBfX2ZpcnN0ICsgX19mbXQtPl9NX2ZhbHNlbmFt ZS5zaXplKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNvcHkoX19maXJzdCwgX19sYXN0LCBf X3MpOwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCgoKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBfX2dyb3VwX2RpZ2l0cyhfQ2hhclQqIF9f cywgX0NoYXJUIF9fZ3JzZXAsIGNoYXIgY29uc3QqIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAg ICAgICAgY2hhciBjb25zdCogX19ncmVuZCwgX0NoYXJUIGNvbnN0KiBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgIF9DaGFyVCBjb25zdCogX19sYXN0KQogICAgewogICAgICBpZiAoX19sYXN0 IC0gX19maXJzdCA+ICpfX2dyb3VwaW5nKQogICAgICAgIHsKICAgICAgICAgIF9fcyA9IF9fZ3Jv dXBfZGlnaXRzKF9fcywgX19ncnNlcCwKICAgICAgICAgICAgICAoX19ncm91cGluZyArIDEgPT0g X19ncmVuZCA/IF9fZ3JvdXBpbmcgOiBfX2dyb3VwaW5nICsgMSksCiAgICAgICAgICAgICAgX19n cmVuZCwgX19maXJzdCwgX19sYXN0IC0gKl9fZ3JvdXBpbmcpOwogICAgICAgICAgX19maXJzdCA9 IF9fbGFzdCAtICpfX2dyb3VwaW5nOwogICAgICAgICAgKl9fcysrID0gX19ncnNlcDsKICAgICAg ICB9CiAgICAgIGRvCiAgICAgICAgewogICAgICAgICAgKl9fcysrID0gKl9fZmlyc3QrKzsKICAg ICAgICB9CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7 CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyLCB0 eXBlbmFtZSBfVmFsdWVUPgogICAgX091dEl0ZXIKICAgIF9fb3V0cHV0X2ludGVnZXIoX091dEl0 ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgYm9vbCBfX25lZywKICAgICAg ICAgICAgICBfVmFsdWVUIF9fdikKICAgIHsKCiAgICAgIGNvbnN0IGxvbmcgX01fcm9vbSA9IG51 bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCAqIDIgKyA0OwogICAgICBfQ2hhclQgX19k aWdpdHNbX01fcm9vbV07CiAgICAgIF9DaGFyVCogX19mcm9udCA9IF9fZGlnaXRzICsgX01fcm9v bTsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZmxhZ3MgPSBfX2lvLmZsYWdzKCk7CiAgICAg IGNvbnN0IF9Gb3JtYXRfY2FjaGU8X0NoYXJUPiogX19mbXQgPSBfRm9ybWF0X2NhY2hlPF9DaGFy VD46Ol9TX2dldChfX2lvKTsKICAgICAgY2hhciBjb25zdCogX190YWJsZSA9IF9fZm10LT5fU19s aXRlcmFscyArIF9fZm10LT5fU19kaWdpdHM7CgogICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19i YXNlZmllbGQgPSAoX19mbGFncyAmIF9faW8uYmFzZWZpZWxkKTsKICAgICAgX0NoYXJUKiBfX3Np Z25fZW5kID0gX19mcm9udDsKICAgICAgaWYgKF9fYmFzZWZpZWxkID09IGlvc19iYXNlOjpoZXgp CiAgICAgICAgewogICAgICAgICAgaWYgKF9fZmxhZ3MgJiBpb3NfYmFzZTo6dXBwZXJjYXNlKQog ICAgICAgICAgICBfX3RhYmxlICs9IDE2OwogICAgICAgICAgZG8KICAgICAgICAgICAgKi0tX19m cm9udCA9IF9fdGFibGVbX192ICYgMTVdOwogICAgICAgICAgd2hpbGUgKChfX3YgPj49IDQpICE9 IDApOwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgICBpZiAoX19mbGFn cyAmIGlvc19iYXNlOjpzaG93YmFzZSkKICAgICAgICAgICAgewogICAgICAgICAgICAgICotLV9f ZnJvbnQgPSBfX2ZtdC0+X1NfbGl0ZXJhbHNbX19mbXQtPl9TX3ggKwogICAgICAgICAgICAgICAg ICAgICAgICgoX19mbGFncyAmIGlvc19iYXNlOjp1cHBlcmNhc2UpID8gMSA6IDApXTsKICAgICAg ICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVswXTsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAgICAgICB7CiAg ICAgICAgICBkbwogICAgICAgICAgICAqLS1fX2Zyb250ID0gX190YWJsZVtfX3YgJiA3XTsKICAg ICAgICAgIHdoaWxlICgoX192ID4+PSAzKSAhPSAwKTsKICAgICAgICAgIGlmIChfX2ZsYWdzICYg aW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8Y2hhcj4oKl9f ZnJvbnQpICE9IF9fdGFibGVbMF0pCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlWzBd OwogICAgICAgICAgX19zaWduX2VuZCA9IF9fZnJvbnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgewoKICAgICAgICAgIGRvCiAgICAgICAgICAgICotLV9fZnJvbnQgPSBfX3RhYmxlW19f diAlIDEwXTsKICAgICAgICAgIHdoaWxlICgoX192IC89IDEwKSAhPSAwKTsKICAgICAgICAgIF9f c2lnbl9lbmQgPSBfX2Zyb250OwoKICAgICAgICAgIGlmIChfX25lZyB8fCAoX19mbGFncyAmIGlv c19iYXNlOjpzaG93cG9zKSkKICAgICAgICAgICAgKi0tX19mcm9udCA9IF9fZm10LT5fU19saXRl cmFsc1tfX2ZtdC0+X1NfcGx1cyAtIF9fbmVnXTsKICAgICAgICB9CgoKICAgICAgaWYgKCFfX2Zt dC0+X01fdXNlX2dyb3VwaW5nICYmICFfX2lvLndpZHRoKCkpCiAgICAgICAgcmV0dXJuIGNvcHko X19mcm9udCwgX19kaWdpdHMgKyBfTV9yb29tLCBfX3MpOwoKICAgICAgaWYgKCFfX2ZtdC0+X01f dXNlX2dyb3VwaW5nKQogICAgICAgIHJldHVybiBfX3BhZF9udW1lcmljKF9fcywgX19mbGFncywg X19maWxsLCBfX2lvLndpZHRoKDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZnJv bnQsIF9fc2lnbl9lbmQsIF9fZGlnaXRzICsgX01fcm9vbSk7CgogICAgICBfQ2hhclQqIF9fcCA9 IF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19mcm9udCA8IF9fc2lnbl9lbmQpCiAgICAgICAgKl9f cCsrID0gKl9fZnJvbnQrKzsKICAgICAgY29uc3QgY2hhciogX19nciA9IF9fZm10LT5fTV9ncm91 cGluZy5kYXRhKCk7CiAgICAgIF9fZnJvbnQgPSBfX2dyb3VwX2RpZ2l0cyhfX3AsIF9fZm10LT5f TV90aG91c2FuZHNfc2VwLCBfX2dyLAogICAgICAgIF9fZ3IgKyBfX2ZtdC0+X01fZ3JvdXBpbmcu c2l6ZSgpLCBfX3NpZ25fZW5kLCBfX2RpZ2l0cyArIF9NX3Jvb20pOwogICAgICByZXR1cm4gX19w YWRfbnVtZXJpYyhfX3MsIF9fZmxhZ3MsIF9fZmlsbCwgX19pby53aWR0aCgwKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19kaWdpdHMsIF9fcCwgX19mcm9udCk7CiAgICB9CgogIHRlbXBs YXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAg IG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlv c19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsKICAg ICAgdW5zaWduZWQgbG9uZyBfX3V2ID0gX192OwogICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAg ICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAgICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAg ICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAgICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2Vy KF9fcywgX19pbywgX19maWxsLCBfX25lZywgX191dik7CiAgICB9CgogIHRlbXBsYXRlIDx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8 X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBf X2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192KSBjb25z dAogICAgeyByZXR1cm4gX19vdXRwdXRfaW50ZWdlcihfX3MsIF9faW8sIF9fZmlsbCwgZmFsc2Us IF9fdik7IH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0 KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgbG9u ZyBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3V2ID0gX192Owog ICAgICBib29sIF9fbmVnID0gZmFsc2U7CiAgICAgIGlmIChfX3YgPCAwKQogICAgICAgIHsKICAg ICAgICAgIF9fbmVnID0gdHJ1ZTsKICAgICAgICAgIF9fdXYgPSAtX191djsKICAgICAgICB9CiAg ICAgIHJldHVybiBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19iLCBfX2ZpbGwsIF9fbmVnLCBfX3V2 KTsKICAgIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+ CiAgICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQo aXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9fb3V0cHV0X2lu dGVnZXIoX19zLCBfX2lvLCBfX2ZpbGwsIGZhbHNlLCBfX3YpOyB9CgoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9P dXRJdGVyCiAgICBfX291dHB1dF9mbG9hdChfT3V0SXRlciBfX3MsIGlvc19iYXNlJiBfX2lvLCBf Q2hhclQgX19maWxsLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9fc3B0ciwgc2l6 ZV90IF9fc2xlbikKICAgIHsKCiAgICAgIHJldHVybiBfX3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBvc3RyZWFtYnVmX2l0ZXJhdG9y PF9DaGFyVCwgX1RyYWl0cz4KICAgIF9fb3V0cHV0X2Zsb2F0KG9zdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiBfX3MsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAg X0NoYXJUIF9fZmlsbCwgY29uc3QgY2hhciogX19zcHRyLCBzaXplX3QgX19zbGVuKQogICAgewog ICAgICBzaXplX3QgX19wYWRkaW5nID0gX19pby53aWR0aCgpID4gc3RyZWFtc2l6ZShfX3NsZW4p ID8KICAgICAgICAgICAgICAgICAgICAgICAgIF9faW8ud2lkdGgoKSAtX19zbGVuIDogMDsKICAg ICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25z dCYgX19jdCA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19hZGpmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3Rm aWVsZDsKICAgICAgY29uc3QgY2hhciogY29uc3QgX19lcHRyID0gX19zcHRyICsgX19zbGVuOwoK ICAgICAgaWYgKF9fYWRqZmllbGQgPT0gaW9zX2Jhc2U6OmludGVybmFsKQogICAgICAgewoKICAg ICAgICAgaWYgKF9fc3B0ciA8IF9fZXB0ciAmJiAoKl9fc3B0ciA9PSAnKycgfHwgKl9fc3B0ciA9 PSAnLScpKQogICAgICAgICAgIHsKICAgICAgICAgICAgIF9fcyA9IF9fY3Qud2lkZW4oKl9fc3B0 cik7CiAgICAgICAgICAgICArK19fczsKICAgICAgICAgICAgICsrX19zcHRyOwogICAgICAgICAg IH0KICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAgICAgICAg IF9fcGFkZGluZyA9IDA7CiAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fYWRqZmllbGQgIT0gaW9z X2Jhc2U6OmxlZnQpCiAgICAgICAgewogICAgICAgICAgX19zID0gX19wYWQoX19zLCBfX2ZpbGws IF9fcGFkZGluZyk7CiAgICAgICAgICBfX3BhZGRpbmcgPSAwOwogICAgICAgIH0KCiAgICAgIGNo YXIgX19kZWNpbWFsX3BvaW50ID0gKihsb2NhbGVjb252KCktPmRlY2ltYWxfcG9pbnQpOwogICAg ICBjb25zdCBfRm9ybWF0X2NhY2hlPF9DaGFyVD4qIF9fZm10ID0gX0Zvcm1hdF9jYWNoZTxfQ2hh clQ+OjpfU19nZXQoX19pbyk7CiAgICAgIGZvciAoOyBfX3NwdHIgIT0gX19lcHRyOyArK19fcywg KytfX3NwdHIpCiAgICAgICB7CgogICAgICAgICBpZiAoKl9fc3B0ciA9PSBfX2RlY2ltYWxfcG9p bnQpCiAgICAgICAgICAgX19zID0gX19mbXQtPl9NX2RlY2ltYWxfcG9pbnQ7CgogICAgICAgICBl bHNlCiAgICAgICAgICAgX19zID0gX19jdC53aWRlbigqX19zcHRyKTsKICAgICAgIH0KCiAgICAg IGlmIChfX3BhZGRpbmcpCiAgICAgICAgX19wYWQoX19zLCBfX2ZpbGwsIF9fcGFkZGluZyk7CiAg ICAgIF9faW8ud2lkdGgoMCk7CiAgICAgIHJldHVybiBfX3M7CiAgICB9CgogIGJvb2wKICBfX2J1 aWxkX2Zsb2F0X2Zvcm1hdChpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9k aWZpZXIsCiAgICAgICAgICAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMpOwoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAg ICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBp b3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgIHsK ICAgICAgY29uc3Qgc3RyZWFtc2l6ZSBfX21heF9wcmVjID0gbnVtZXJpY19saW1pdHM8ZG91Ymxl Pjo6ZGlnaXRzMTAgKyAzOwogICAgICBzdHJlYW1zaXplIF9fcHJlYyA9IF9faW8ucHJlY2lzaW9u KCk7CgogICAgICBpZiAoX19wcmVjID4gX19tYXhfcHJlYykKICAgICAgICBfX3ByZWMgPSBfX21h eF9wcmVjOwoKICAgICAgY2hhciBfX3NidWZbX19tYXhfcHJlYyAqIDJdOwogICAgICBzaXplX3Qg X19zbGVuOwoKICAgICAgY2hhciBfX2ZidWZbMTZdOwogICAgICBpZiAoX19idWlsZF9mbG9hdF9m b3JtYXQoX19pbywgX19mYnVmLCAwLCBfX3ByZWMpKQogICAgICAgIF9fc2xlbiA9IHNwcmludGYo X19zYnVmLCBfX2ZidWYsIF9fcHJlYywgX192KTsKICAgICAgZWxzZQogICAgICAgIF9fc2xlbiA9 IHNwcmludGYoX19zYnVmLCBfX2ZidWYsIF9fdik7CgogICAgICByZXR1cm4gX19vdXRwdXRfZmxv YXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fc2J1ZiwgX19zbGVuKTsKICAgIH0KCiAgdGVtcGxhdGUg PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbnVt X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jh c2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgbG9uZyBkb3VibGUgX192KSBj b25zdAogICAgewogICAgICBjb25zdCBzdHJlYW1zaXplIF9fbWF4X3ByZWMgPSBudW1lcmljX2xp bWl0czxsb25nIGRvdWJsZT46OmRpZ2l0czEwICsgMzsKICAgICAgc3RyZWFtc2l6ZSBfX3ByZWMg PSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgaWYgKF9fcHJlYyA+IF9fbWF4X3ByZWMpCiAgICAg ICAgX19wcmVjID0gX19tYXhfcHJlYzsKCiAgICAgIGNoYXIgX19zYnVmW19fbWF4X3ByZWMgKiAy XTsKICAgICAgc2l6ZV90IF9fc2xlbjsKCiAgICAgIGNoYXIgX19mYnVmWzE2XTsKCiAgICAgIGlm IChfX2J1aWxkX2Zsb2F0X2Zvcm1hdChfX2lvLCBfX2ZidWYsICdMJywgX19wcmVjKSkKICAgICAg ICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3ByZWMsIF9fdik7CiAgICAgIGVs c2UKICAgICAgICBfX3NsZW4gPSBzcHJpbnRmKF9fc2J1ZiwgX19mYnVmLCBfX3YpOwoKICAgICAg cmV0dXJuIF9fb3V0cHV0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBfX3NidWYsIF9fc2xlbik7 CiAgICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0 ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAg IGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgIHsKICAgICAgdHlwZWRlZiBpb3NfYmFzZTo6Zm10 ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0gX19pby5mbGFncygpOwogICAg ICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVwcGVyY2Fz ZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbXQgJiBfX2ZtdG1h c2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFzZSkpOwogICAgICB0cnkgewog ICAgICAgIF9PdXRJdGVyIF9fczIgPSBfX291dHB1dF9pbnRlZ2VyKF9fcywgX19pbywgX19maWxs LCBmYWxzZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlaW50ZXJwcmV0X2Nh c3Q8dW5zaWduZWQgbG9uZz4oX192KSk7CiAgICAgICAgX19pby5mbGFncyhfX2ZtdCk7CiAgICAg ICAgcmV0dXJuIF9fczI7CiAgICAgIH0KICAgICAgY2F0Y2ggKC4uLikgewogICAgICAgIF9faW8u ZmxhZ3MoX19mbXQpOwogICAgICAgIHRocm93OwogICAgICB9CiAgICB9CgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9EdW1teSA9IGludD4KICAgIHN0cnVjdCBfV2Vl a2RheW5hbWVzOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBzdHJ1Y3QgX1dlZWtk YXluYW1lczxjaGFyLCBfRHVtbXk+CiAgICB7IHN0YXRpYyBjb25zdCBjaGFyKiBjb25zdCBfU19u YW1lc1sxNF07IH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIGNvbnN0IGNoYXIq IGNvbnN0CiAgICBfV2Vla2RheW5hbWVzPGNoYXIsIF9EdW1teT46Ol9TX25hbWVzWzE0XSA9CiAg ICB7CiAgICAgICJTdW4iLCAiU3VuZGF5IiwKICAgICAgIk1vbiIsICJNb25kYXkiLCAiVHVlIiwg IlR1ZXNkYXkiLCAiV2VkIiwgIldlZG5lc2RheSIsCiAgICAgICJUaHUiLCAiVGh1cnNkYXkiLCAi RnJpIiwgIkZyaWRheSIsICJTYXQiLCAiU2F0dXJkYXkiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9XZWVrZGF5bmFtZXM8d2NoYXJfdCwgX0R1bW15Pgog ICAgeyBzdGF0aWMgY29uc3Qgd2NoYXJfdCogY29uc3QgX1NfbmFtZXNbMTRdOyB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfRHVtbXk+CiAgICBjb25zdCB3Y2hhcl90KiBjb25zdAogICAgX1dlZWtk YXluYW1lczx3Y2hhcl90LCBfRHVtbXk+OjpfU19uYW1lc1sxNF0gPQogICAgewogICAgICBMIlN1 biIsIEwiU3VuZGF5IiwKICAgICAgTCJNb24iLCBMIk1vbmRheSIsIEwiVHVlIiwgTCJUdWVzZGF5 IiwgTCJXZWQiLCBMIldlZG5lc2RheSIsCiAgICAgIEwiVGh1IiwgTCJUaHVyc2RheSIsIEwiRnJp IiwgTCJGcmlkYXkiLCBMIlNhdCIsIEwiU2F0dXJkYXkiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfRHVtbXkgPSBpbnQ+CiAgICBzdHJ1Y3QgX01vbnRobmFt ZXM7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9EdW1teT4KICAgIHN0cnVjdCBfTW9udGhuYW1lczxj aGFyLF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IGNoYXIqIGNvbnN0IF9TX25hbWVzWzI0XTsg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3QgY2hhciogY29uc3QKICAg IF9Nb250aG5hbWVzPGNoYXIsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsKICAgICAgIkph biIsICJKYW51YXJ5IiwgIkZlYiIsICJGZWJydWFyeSIsICJNYXIiLCAiTWFyY2giLAogICAgICAi QXByIiwgIkFwcmlsIiwgIk1heSIsICJNYXkiLCAiSnVuIiwgIkp1bmUiLAogICAgICAiSnVsIiwg Ikp1bHkiLCAiQXVnIiwgIkF1Z3VzdCIsICJTZXAiLCAiU2VwdGVtYmVyIiwKICAgICAgIk9jdCIs ICJPY3RvYmVyIiwgIk5vdiIsICJOb3ZlbWJlciIsICJEZWMiLCAiRGVjZW1iZXIiCiAgICB9OwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgc3RydWN0IF9Nb250aG5hbWVzPHdjaGFy X3QsIF9EdW1teT4KICAgIHsgc3RhdGljIGNvbnN0IHdjaGFyX3QqIGNvbnN0IF9TX25hbWVzWzI0 XTsgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0R1bW15PgogICAgY29uc3Qgd2NoYXJfdCogY29u c3QKICAgIF9Nb250aG5hbWVzPHdjaGFyX3QsX0R1bW15Pjo6X1NfbmFtZXNbMjRdID0KICAgIHsK ICAgICAgTCJKYW4iLCBMIkphbnVhcnkiLCBMIkZlYiIsIEwiRmVicnVhcnkiLCBMIk1hciIsIEwi TWFyY2giLAogICAgICBMIkFwciIsIEwiQXByaWwiLCBMIk1heSIsIEwiTWF5IiwgTCJKdW4iLCBM Ikp1bmUiLAogICAgICBMIkp1bCIsIEwiSnVseSIsIEwiQXVnIiwgTCJBdWd1c3QiLCBMIlNlcCIs IEwiU2VwdGVtYmVyIiwKICAgICAgTCJPY3QiLCBMIk9jdG9iZXIiLCBMIk5vdiIsIEwiTm92ZW1i ZXIiLCBMIkRlYyIsIEwiRGVjZW1iZXIiCiAgICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBf SW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19zLCBpdGVyX3R5cGUgX19l bmQsCiAgICAgICAgICAgICAgICAgICBpb3NfYmFzZSYgX19pbywgaW9zX2Jhc2U6Omlvc3RhdGUm IF9fZXJyLCB0bSogX190KSBjb25zdAogICAgewogICAgICBpZiAoIV9NX2RheW5hbWVzKQogICAg ICAgIHsKICAgICAgICAgIF9NX2RheW5hbWVzID0gbmV3IGJhc2ljX3N0cmluZzxfQ2hhclQ+WzE0 XTsKICAgICAgICAgIGZvciAoaW50IF9faSA9IDA7IF9faSA8IDE0OyArK19faSkKICAgICAgICAg ICAgX01fZGF5bmFtZXNbX19pXSA9IF9XZWVrZGF5bmFtZXM8X0NoYXJUPjo6X1NfbmFtZXNbX19p XTsKICAgICAgICB9CiAgICAgIGJvb2wgX19hdF9lb2YgPSBmYWxzZTsKICAgICAgaW50IF9fcmVt YWluID0gMDsKICAgICAgaW50IF9fbWF0Y2hlc1sxNF07CiAgICAgIGl0ZXJfdHlwZSBfX291dCA9 IF9fbWF0Y2hfcGFyYWxsZWwoX19zLCBfX2VuZCwgMTQsIF9NX2RheW5hbWVzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4sIF9fYXRf ZW9mKTsKICAgICAgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYgKF9fYXRf ZW9mKSBfX2VyciB8PSBfX2lvLmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEgfHwKICAg ICAgICAgIF9fcmVtYWluID09IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sx XT4+MSkpCiAgICAgICAgX190LT50bV93ZGF5ID0gKF9fbWF0Y2hlc1swXT4+MSk7CiAgICAgIGVs c2UKICAgICAgICBfX2VyciB8PSBfX2lvLmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX291dDsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfbW9udGhuYW1l KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9z X2Jhc2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdCkgY29uc3QKICAg IHsKICAgICAgaWYgKCFfTV9tb250aG5hbWVzKQogICAgICAgIHsKICAgICAgICAgIF9NX21vbnRo bmFtZXMgPSBuZXcgYmFzaWNfc3RyaW5nPF9DaGFyVD5bMjRdOwogICAgICAgICAgZm9yIChpbnQg X19pID0gMDsgX19pIDwgMjQ7ICsrX19pKQogICAgICAgICAgICBfTV9tb250aG5hbWVzW19faV0g PSBfTW9udGhuYW1lczxfQ2hhclQ+OjpfU19uYW1lc1tfX2ldOwogICAgICAgIH0KICAgICAgYm9v bCBfX2F0X2VvZiA9IGZhbHNlOwogICAgICBpbnQgX19yZW1haW4gPSAwOwogICAgICBpbnQgX19t YXRjaGVzWzI0XTsKICAgICAgaXRlcl90eXBlIF9fb3V0ID0gX19tYXRjaF9wYXJhbGxlbCggX19z LCBfX2VuZCwgMjQsIF9NX21vbnRobmFtZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fbWF0Y2hlcywgX19yZW1haW4sIF9fYXRfZW9mKTsKICAgICAgX19lcnIg PSBpb3NfYmFzZTo6aW9zdGF0ZSgwKTsKICAgICAgaWYgKF9fYXRfZW9mKSBfX2VyciB8PSBfX2lv LmVvZmJpdDsKICAgICAgaWYgKF9fcmVtYWluID09IDEgfHwKICAgICAgICAgIF9fcmVtYWluID09 IDIgJiYgKF9fbWF0Y2hlc1swXT4+MSkgPT0gKF9fbWF0Y2hlc1sxXT4+MSkpCiAgICAgICAgX190 LT50bV9tb24gPSAoX19tYXRjaGVzWzBdPj4xKTsKICAgICAgZWxzZQogICAgICAgIF9fZXJyIHw9 IF9faW8uZmFpbGJpdDsKICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQp9CiMgNDIgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDIgMwojIDMzICIvdXNyL2luY2x1ZGUvZysr LXYzL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfb3N0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry ZWFtLmgiIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3MuaCIgMSAzCiMg NDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBjbGFzcyBiYXNpY19vc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwg X1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg X1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9D aGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9p dGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbWJ1Zl9pdGVyOwogICAgICB0eXBlZGVm IG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRlcj4gX19udW1wdXRfdHlwZTsKICAgICAg dHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlwZTsKCgogICAgICBleHBsaWNpdAogICAg ICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IpCiAgICAgIHsgdGhpcy0+aW5p dChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAg ICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsKCgoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19v c3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChf X2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1fdHlwZSYK ICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKSAoaW9zX2Jhc2UmKSk7CgoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBfX24pOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBfX24pOwoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9vbCBfX24pOwoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19uKQogICAgICB7CiAgICAgICAgaW9zX2Jh c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7 CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpo ZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25l ZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHN0YXRpY19jYXN0PHVu c2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIHRoaXMt Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19uKSk7CiAgICAgIH0KCiAgICAgIF9fb3N0 cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2lnbmVkIHNob3J0IF9fbikKICAgICAgeyBy ZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsg fQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoaW50IF9fbikKICAgICAg ewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZtdCA9IHRoaXMtPmZsYWdzKCkgJiBpb3Nf YmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2ZtdCAmIGlvc19iYXNlOjpvY3QgfHwgX19m bXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3Rh dGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikpKTsKICAgICAgICBlbHNlCiAgICAgICAg ICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDxsb25nPihfX24pKTsKICAgICAg fQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgaW50IF9f bikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBs b25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KGxv bmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5z aWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJh dG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8 ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo bG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8 KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8 PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAg cHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNv bnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbik7CgogICAgICBfX29zdHJlYW1fdHlw ZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlwZQogICAgICB0ZWxscCgpOwoKICAgICAg X19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIpOwoKICAgIHByaXZh dGU6CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX29zdHJl YW1fdHlwZSYpOwoKICAgICAgYmFzaWNfb3N0cmVhbShjb25zdCBfX29zdHJlYW1fdHlwZSYpOwoK ICAgIH07CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgY2xhc3MgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpzZW50cnkKICAgIHsKCiAg ICAgIGJvb2wgX01fb2s7CiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfTV9v czsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0CiAgICAgIHNlbnRyeShiYXNpY19vc3RyZWFt PF9DaGFyVCxfVHJhaXRzPiYgX19vcyk7CgogICAgICB+c2VudHJ5KCkKICAgICAgewoKICAgICAg ICBpZiAoX01fb3MuZmxhZ3MoKSAmIGlvc19iYXNlOjp1bml0YnVmICYmICF1bmNhdWdodF9leGNl cHRpb24oKSkKICAgICAgICAgIHsKCiAgICAgICAgICAgIGlmIChfTV9vcy5yZGJ1ZigpICYmIF9N X29zLnJkYnVmKCktPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICBfTV9vcy5zZXRzdGF0 ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgIH0KICAgICAgfQoKICAgICAgb3BlcmF0b3Ig Ym9vbCgpCiAgICAgIHsgcmV0dXJuIF9NX29rOyB9CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19v dXQsIF9DaGFyVCBfX2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNoYXIgX19jKQogICAgeyBy ZXR1cm4gKF9fb3V0IDw8IF9fb3V0LndpZGVuKF9fYykpOyB9CgoKICB0ZW1wbGF0ZSA8Y2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8 KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYyk7CgoKICB0ZW1w bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIHNpZ25lZCBj aGFyIF9fYykKICAgIHsgcmV0dXJuIChfX291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPihfX2MpKTsg fQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQs IHVuc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0PGNo YXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gJgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3MpOwoKCiAgdGVtcGxhdGU8Y2xh c3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRv cjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBjaGFyKiBfX3Mp OwoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBzaWduZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJw cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ICYKICAgIG9wZXJhdG9yPDwoYmFzaWNf b3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fcykK ICAgIHsgcmV0dXJuIChfX291dCA8PCByZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihfX3Mp KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kbChiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBmbHVzaChfX29zLnB1dChfX29zLndp ZGVuKCdcbicpKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZW5kcyhiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29zLnB1dChfQ2hh clQoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZmx1c2goYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zKQogICAgeyByZXR1cm4gX19vcy5mbHVzaCgpOyB9Cgp9 CgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMSAzCiMgMzIg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9vc3RyZWFtLnRjYyIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfbG9jYWxlLmgiIDEgMwojIDMzICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvb3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+ JiBfX29zKQogICAgOiBfTV9vayhfX29zLmdvb2QoKSksIF9NX29zKF9fb3MpCiAgICB7CgogICAg ICBpZiAoX01fb2sgJiYgX19vcy50aWUoKSkKICAgICAgICBfX29zLnRpZSgpLT5mbHVzaCgpOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBi YXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz46OgogICAgb3BlcmF0b3I8PChfX29zdHJlYW1fdHlwZSYgKCpfX3BmKShfX29zdHJl YW1fdHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsg fQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRo aXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0No YXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KF9faW9zX3R5cGUmICgqX19wZikoX19pb3Nf dHlwZSYpKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcjw8KGlvc19iYXNlJiAoKl9fcGYpKGlvc19iYXNlJikp CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9fcGYoKnRoaXMpOyB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KGJvb2wgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAg ICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9f bikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Jgog ICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAg ICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10 ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgICAgICAgaWYg KF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBpZiAoX19mbXQgJiBp b3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19jYXN0 PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9mbnVt cHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19iID0g X01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAgICAg ICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFp dHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChs b25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6 OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAg ICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAgICAg ICBpZiAoX19mbXQgJiBpb3NfYmFzZTo6b2N0IHx8IF9fZm10ICYgaW9zX2Jhc2U6OmhleCkKICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGxv bmcgX19sOwogICAgICAgICAgICAgICAgICAgICAgX19sID0gc3RhdGljX2Nhc3Q8dW5zaWduZWQg bG9uZyBsb25nPihfX24pOwogICAgICAgICAgICAgICAgICAgICAgX19iID0gX01fZm51bXB1dC0+ cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX2wpLmZhaWxlZCgpOwogICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19uKS5mYWlsZWQoKTsKICAgICAgICAgICAg ICAgICAgaWYgKF9fYikKICAgICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 b3BlcmF0b3I8PCh1bnNpZ25lZCBsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChk b3VibGUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkKICAgICAgICAgICAgICAgIGlmIChfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAg ICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAg ICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+OjpvcGVyYXRvcjw8KGxvbmcgZG91YmxlIF9fbikKICAgIHsKICAg ICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQo X01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAq dGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0 Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhj ZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93 OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 b3BlcmF0b3I8PChjb25zdCB2b2lkKiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRo aXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAg ICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwg X19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwoX19zdHJlYW1i dWZfdHlwZSogX19zYmluKQogICAgewogICAgICBzdHJlYW1zaXplIF9feHRyY3QgPSAwOwogICAg ICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Nib3V0ID0gdGhpcy0+cmRidWYoKTsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX3NiaW4gJiYgX19jZXJiKQogICAgICAgIF9feHRy Y3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0KTsKICAgICAgaWYg KCFfX3NiaW4gfHwgIV9feHRyY3QpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cHV0KGNoYXJfdHlwZSBfX2Mp CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAg ICAgIHsKICAgICAgICAgIGludF90eXBlIF9fcHV0ID0gcmRidWYoKS0+c3B1dGMoX19jKTsKICAg ICAgICAgIGlmIChfX3B1dCAhPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKSkKICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0NoYXJUKiBfX3MsIHN0cmVhbXNp emUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0ID0gdGhpcy0+cmRidWYoKS0+ c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAhPSBfX24pCiAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKHRoaXMtPnJkYnVm KCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg dHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojpwb3NfdHlwZQogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAgICB7CiAgICAgIHBvc190eXBl IF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgp ICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0b2spCiAgICAgICAgX19yZXQgPSB0aGlzLT5yZGJ1 ZigpLT5wdWJzZWVrb2ZmKDAsIGlvc19iYXNlOjpjdXIsIGlvc19iYXNlOjpvdXQpOwogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNlZWtwKHBvc190eXBlIF9fcG9zKQogICAgewogICAg ICBib29sIF9fdGVzdG9rID0gdGhpcy0+ZmFpbCgpICE9IHRydWU7CgogICAgICBpZiAoX190ZXN0 b2spCiAgICAgICAgewoKCiAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCkt PnB1YnNlZWtwb3MoX19wb3MsIGlvc19iYXNlOjpvdXQpOwoKCiAgICAgICAgICBpZiAoX19lcnIg PT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoZmFp bGJpdCk7CgogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vl a3Aob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fZCkKICAgIHsKICAgICAgYm9v bCBfX3Rlc3RvayA9IHRoaXMtPmZhaWwoKSAhPSB0cnVlOwoKICAgICAgaWYgKF9fdGVzdG9rKQog ICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz ZWVrb2ZmKF9fb2ZmLCBfX2QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om91dCk7CgoKICAgICAgICAgIGlmIChfX2VyciA9PSBw b3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0 KTsKICAgICAgICB9CgogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgNDU3ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvb3N0cmVhbS50Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICB2b2lkCiAgICBfX3BhZF9jaGFyKGJhc2ljX2lvczxfQ2hh clQsIF9UcmFpdHM+JiBfX2lvcywKICAgICAgICAgICAgICAgX0NoYXJUKiBfX25ld3MsIGNvbnN0 IF9DaGFyVCogX19vbGRzLAogICAgICAgICAgICAgICBjb25zdCBzdHJlYW1zaXplIF9fbmV3bGVu LCBjb25zdCBzdHJlYW1zaXplIF9fb2xkbGVuKQogICAgewogICAgICB0eXBlZGVmIF9DaGFyVCBj aGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CgogICAgICBpbnRfdHlw ZSBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAg ICBjaGFyX3R5cGUqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXJfdHlwZSo+KF9fYnVpbHRpbl9h bGxvY2Eoc2l6ZW9mKGNoYXJfdHlwZSkgKiBfX3BsZW4pKTsKICAgICAgdHJhaXRzX3R5cGU6OmFz c2lnbihfX3BhZHMsIF9fcGxlbiwgX19pb3MuZmlsbCgpKTsKCiAgICAgIGNoYXJfdHlwZSogX19i ZWc7CiAgICAgIGNoYXJfdHlwZSogX19lbmQ7CiAgICAgIHNpemVfdCBfX21vZCA9IDA7CiAgICAg IHNpemVfdCBfX2JlZ2xlbjsKICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gX19pb3Mu ZmxhZ3MoKSAmIGlvc19iYXNlOjphZGp1c3RmaWVsZDsKCiAgICAgIGlmIChfX2ZtdCA9PSBpb3Nf YmFzZTo6bGVmdCkKICAgICAgICB7CgogICAgICAgICAgX19iZWcgPSBjb25zdF9jYXN0PGNoYXJf dHlwZSo+KF9fb2xkcyk7CiAgICAgICAgICBfX2JlZ2xlbiA9IF9fb2xkbGVuOwogICAgICAgICAg X19lbmQgPSBfX3BhZHM7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2ZtdCA9PSBpb3NfYmFz ZTo6aW50ZXJuYWwpCiAgICAgICAgewoKCgogICAgICAgICAgdHlwZWRlZiBfRm9ybWF0X2NhY2hl PF9DaGFyVD4gX19jYWNoZV90eXBlOwogICAgICAgICAgX19jYWNoZV90eXBlIGNvbnN0KiBfX2Zt dCA9IF9fY2FjaGVfdHlwZTo6X1NfZ2V0KF9faW9zKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX19taW51cyA9IHRyYWl0c190eXBlOjpmaW5kKF9fb2xkcywgX19vbGRsZW4sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1Nf bWludXMpOwogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3BsdXMgPSB0cmFpdHNfdHlwZTo6 ZmluZChfX29sZHMsIF9fb2xkbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX2ZtdC0+X1NfcGx1cyk7CiAgICAgICAgICBib29sIF9fdGVz dHNpZ24gPSBfX21pbnVzIHx8IF9fcGx1czsKICAgICAgICAgIGJvb2wgX190ZXN0aGV4ID0gX19v bGRzWzBdID09ICcwJwogICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19vbGRzWzFdID09 ICd4JyB8fCBfX29sZHNbMV0gPT0gJ1gnKTsKCiAgICAgICAgICBpZiAoX190ZXN0aGV4KQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdzWzBdID0gX19vbGRzWzBdOwogICAgICAgICAg ICAgIF9fbmV3c1sxXSA9IF9fb2xkc1sxXTsKICAgICAgICAgICAgICBfX21vZCArPSAyOwogICAg ICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX29sZHMgKyBfX21vZCk7 CiAgICAgICAgICAgICAgX19iZWdsZW4gPSBfX29sZGxlbiAtIF9fbW9kOwogICAgICAgICAgICAg IF9fZW5kID0gX19wYWRzOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rz aWduKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19tb2QgKz0gX19wbGVuOwogICAgICAg ICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19zaWduID0gX19taW51cyA/IF9fbWludXMgKyAxOiBf X3BsdXMgKyAxOwogICAgICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihf X29sZHMpOwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19zaWduIC0gX19vbGRzOwogICAgICAg ICAgICAgIF9fZW5kID0gY29uc3RfY2FzdDxjaGFyX3R5cGUqPihfX3NpZ24gKyBfX3BsZW4pOwog ICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fbmV3cyArIF9fYmVnbGVuLCBfX3BhZHMs IF9fcGxlbik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewoKICAg ICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxl bjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0X2Nhc3Q8Y2hhcl90eXBlKj4oX19vbGRzKTsK ICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKCiAgICAgICAgICBf X2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgX19l bmQgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9fb2xkcyk7CiAgICAgICAgfQoKICAgICAgdHJh aXRzX3R5cGU6OmNvcHkoX19uZXdzLCBfX2JlZywgX19iZWdsZW4pOwogICAgICB0cmFpdHNfdHlw ZTo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsIF9fbmV3bGVuIC0gX19iZWdsZW4gLSBf X21vZCk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsKICAg ICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAg ICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBf Q2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6 ZW9mKF9DaGFyVCkgKiBfX3cpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBfX2M7CiAgICAg ICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9f bGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZF9jaGFyKF9fb3V0 LCBfX3BhZHMsICZfX2MsIF9fdywgX19sZW4pOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9f dzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9f bGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19v dXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9 CgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBjaGFyIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFp dHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5 IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo KCk7CiAgICAgICAgICAgICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVp bHRpbl9hbGxvY2EoX193ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAg ICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4g X19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19v dXQsIF9fcGFkcywgJl9fYywgX193LCBfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fcGFkcywg X19sZW4pOwogICAgICAgICAgICAgIF9fb3V0LndpZHRoKDApOwogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgX19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChf X291dC5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX291dDsKICAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAg IHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwog ICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0No YXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVv ZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IHN0YXRp Y19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChfX3MpKTsKICAgICAgICAgICAgICBp ZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFk X2NoYXIoX19vdXQsIF9fcGFkcywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICAgICAg X19zID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAg ICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBf VHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgogICAgICB0eXBlZGVmIGNoYXJfdHJh aXRzPGNoYXI+IF9fY3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6 OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHNpemVfdCBfX2NsZW4gPSBfX2N0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgICAg ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNpemVfdCBfX2kg PSAwOyBfX2kgPD0gX19jbGVuOyArK19faSkKICAgICAgICAgICAgX193c1tfX2ldID0gX19vdXQu d2lkZW4oX19zW19faV0pOwogICAgICAgICAgX0NoYXJUKiBfX3N0ciA9IF9fd3M7CgogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3Rh dGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19jbGVuKTsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9f dyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7Cgog ICAgICAgICAgICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19wYWRfY2hhcihfX291dCwgX19wYWRzLCBfX3dzLCBfX3csIF9fbGVuKTsKICAg ICAgICAgICAgICAgICAgX19zdHIgPSBfX3BhZHM7CiAgICAgICAgICAgICAgICAgIF9fbGVuID0g X193OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIF9fb3V0LndyaXRlKF9fc3RyLCBf X2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9f b3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAg fQoKCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0 LCBjb25zdCBjaGFyKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFy LCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6 OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291 dC53aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIq PihfX2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4g PSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CiAgICAgICAg ICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAg ICBfX3BhZF9jaGFyKF9fb3V0LCBfX3BhZHMsIF9fcywgX193LCBfX2xlbik7CiAgICAgICAgICAg ICAgICAgIF9fcyA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zLCBfX2xlbik7CiAgICAg ICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX291dC5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fb3V0OwogICAgfQoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcjw8KGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyKQogICAgewogICAgICB0eXBl ZGVmIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKICAgICAg dHlwZW5hbWUgX19vc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAo X19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19zID0gX19zdHIuZGF0 YSgpOwogICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53aWR0aCgpOwogICAgICAgICAg X0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICBzdHJlYW1zaXplIF9fbGVuID0gc3RhdGlj X2Nhc3Q8c3RyZWFtc2l6ZT4oX19zdHIuc2l6ZSgpKTsKCgoKICAgICAgICAgIGlmIChfX3cgPiBf X2xlbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fcGFkX2NoYXIoX19vdXQsIF9fcGFk cywgX19zLCBfX3csIF9fbGVuKTsKICAgICAgICAgICAgICBfX3MgPSBfX3BhZHM7CiAgICAgICAg ICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgIH0KICAgICAgICAgIHN0cmVhbXNpemUgX19y ZXMgPSBfX291dC5yZGJ1ZigpLT5zcHV0bihfX3MsIF9fbGVuKTsKICAgICAgICAgIF9fb3V0Lndp ZHRoKDApOwogICAgICAgICAgaWYgKF9fcmVzICE9IF9fbGVuKQogICAgICAgICAgICBfX291dC5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7 CiAgICB9Cn0KIyAyNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAy IDMKIyAzNCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2lzdHJlYW0udGNjIiAyIDMKCm5hbWVz cGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6c2VudHJ5OjoKICAgIHNlbnRyeShi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIGJvb2wgX19ub3NraXB3cykKICAg IHsKICAgICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIHsKICAgICAgICAgIGlmIChfX2luLnRp ZSgpKQogICAgICAgICAgICBfX2luLnRpZSgpLT5mbHVzaCgpOwogICAgICAgICAgaWYgKCFfX25v c2tpcHdzICYmIChfX2luLmZsYWdzKCkgJiBpb3NfYmFzZTo6c2tpcHdzKSkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9n ZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBf X2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgX19pbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0Yygp OwoKICAgICAgICAgICAgICB3aGlsZSAoX19jICE9IF9fZW9mICYmIF9fY3R5cGUtPmlzKGN0eXBl X2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25leHRjKCk7 CgoKCiAgICAgICAgICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgICAgIF9faW4u c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgfQoKICAg ICAgaWYgKF9faW4uZ29vZCgpKQogICAgICAgIF9NX29rID0gdHJ1ZTsKICAgICAgZWxzZQogICAg ICAgIHsKICAgICAgICAgIF9NX29rID0gZmFsc2U7CiAgICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjpmYWlsYml0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f aXN0cmVhbV90eXBlJiAoKl9fcGYpKF9faXN0cmVhbV90eXBlJikpCiAgICB7CiAgICAgIF9fcGYo KnRoaXMpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f aW9zX3R5cGUmICgqX19wZikoX19pb3NfdHlwZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsK ICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYg KCpfX3BmKShpb3NfYmFzZSYpKQogICAgewogICAgICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pihib29sJiBfX24pCiAgICB7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7 CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0 YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAg ICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9N X2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBv cGVyYXRvcj4+KHNob3J0JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlv c3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNl dChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwg KnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIHNob3J0 JiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYg KF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6 Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkK ICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBf X24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQog ICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAg ICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlm ICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAg ICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7 CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGludCYgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2Vy ciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBp ZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0 LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5z ZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYg X19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3Nf YmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlv c19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAg fQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJy ID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlm IChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQt PmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+ Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2Up OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0 ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9N X2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhp cywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwogICAg ICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAg ewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAg ICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAw KQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg X19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChf X2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpn b29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAg ICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19u KTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwog ICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5 IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAg ICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19l cnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAg aWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdl dC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9y Pj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUo aW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9m bnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMs IF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19i YXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQp OwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAg ICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAg ICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRo aXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRo cm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIo KnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9z X2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9j aGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgq dGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwp CiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpi YWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6 OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAg ICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9fc3Ry ZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7 CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fc2JvdXQgJiYgX19jZXJiKQog ICAgICAgIF9feHRyY3QgPSBfX2NvcHlfc3RyZWFtYnVmcygqdGhpcywgX19zYmluLCBfX3Nib3V0 KTsKICAgICAgaWYgKCFfX3Nib3V0IHx8ICFfX3h0cmN0KQogICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz46OgogICAgZ2V0KHZvaWQpCiAgICB7CiAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBpbnRfdHlwZSBfX2MgPSBfX2VvZjsKICAg ICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX2MgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYg KF9fYyAhPSBfX2VvZikKICAgICAgICAgICAgICAgIF9NX2djb3VudCA9IDE7CiAgICAgICAgICAg ICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8 IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgZ2V0KGNo YXJfdHlwZSYgX19jKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJh aXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYnVmdmFsID0gdGhpcy0+ cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmIChfX2J1ZnZhbCAhPSBfX2VvZikK ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAg ICAgICAgICAgICAgX19jID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+ c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4g KnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPjo6CiAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19uID4gMSkKICAg ICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGlu dF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9fZGVsaW0pOwogICAg ICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAg ICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGJvb2wg X190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rl b2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAgIHdoaWxlIChfTV9nY291bnQgPCBfX24g LSAxICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAgICAgICAgewogICAg ICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAg ICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3Ni LT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwog ICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwgX01fZ2NvdW50ID09IF9f biAtIDEpCiAgICAgICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgICAg ICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6 OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWls KQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6 YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNl OjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgKl9fcyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIGdldChfX3N0cmVhbWJ1Zl90eXBlJiBfX3NiLCBjaGFyX3R5cGUg X19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaW50X3R5 cGUgX19jOwogICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX190aGlzX3NiID0gdGhpcy0+cmRi dWYoKTsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50 X3R5cGUgX19pZGVsaW0gPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAg ICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAg ICAgICAgICAgX19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBib29sIF9f dGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZW9m ID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0cHV0ID0gdHJ1ZTsKCiAg ICAgICAgICAgICAgd2hpbGUgKCFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltCiAgICAgICAgICAg ICAgICAgICAgJiYgKF9fdGVzdHB1dCA9IF9fc2Iuc3B1dGModHJhaXRzX3R5cGU6OnRvX2NoYXJf dHlwZShfX2MpKQogICAgICAgICAgICAgICAgICAgICAgICAgIT0gX19lb2YpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAg X19jID0gX190aGlzX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0g X19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lk ZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoX190ZXN0ZGVsaW0gfHwg IV9fdGVzdHB1dCkKICAgICAgICAgICAgICAgIF9fdGhpc19zYi0+c3B1dGJhY2tjKHRyYWl0c190 eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKICAg ICAgICAgICAgICBfX3RoaXNfc2ItPnNwdXRiYWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBl KF9fYykpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBpZiAoIV9NX2djb3VudCkKICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIGdldGxpbmUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u LCBjaGFyX3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5z YnVtcGMoKTsKICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICBjb25zdCBp bnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZShfX2RlbGltKTsKICAg ICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAg ICAgICAgICAgICBib29sIF9fdGVzdGRlbGltID0gX19jID09IF9faWRlbGltOwogICAgICAgICAg ICAgIGJvb2wgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAo X01fZ2NvdW50IDwgX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVzdGRlbGltKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAqX19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90 eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAg ICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX190ZXN0ZW9mID0gX19j ID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9fYyA9PSBfX2lkZWxp bTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3RkZWxpbSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgLS1fTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgIF9fc2ItPnNwdXRi YWNrYyh0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYykpOwogICAgICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgKl9f cyA9IGNoYXJfdHlwZSgpOwogICAgICBpZiAoIV9NX2djb3VudCkKICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIGlnbm9yZShzdHJlYW1zaXplIF9fbiwgaW50X3R5cGUgX19kZWxpbSkKICAgIHsKICAgICAg X01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIgJiYgX19uID4gMCkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRv X2ludF90eXBlKF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0g dHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig PSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGludF90eXBlIF9fYyA9IF9fc2ItPnNidW1w YygpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAg ICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAgICAg IF9fbiA9IG1pbihfX24sIG51bWVyaWNfbGltaXRzPHN0cmVhbXNpemU+OjptYXgoKSk7CiAgICAg ICAgICAgICAgd2hpbGUgKF9NX2djb3VudCA8IF9fbiAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190 ZXN0ZGVsaW0pCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50 OwogICAgICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICAg ICAgX190ZXN0ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgICAgICBfX3Rlc3RkZWxp bSA9IF9fYyA9PSBfX2lkZWxpbTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo KF9NX2djb3VudCA9PSBfX24gLSAxICYmICFfX3Rlc3Rlb2YpIHx8IF9fdGVzdGRlbGltKQogICAg ICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdGVvZikKICAg ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwogICAgICAgICAg ICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAg ICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAg ICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAq dGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHBlZWsodm9pZCkKICAgIHsK ICAgICAgaW50X3R5cGUgX19jID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBfTV9nY291bnQg PSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikK ICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2MgPSB0aGlzLT5yZGJ1Zigp LT5zZ2V0YygpOyB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAg IHJldHVybiBfX2M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkKGNoYXJfdHlwZSogX19zLCBzdHJlYW1z aXplIF9fbikKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigq dGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgaWYgKF9f biA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICB0cnkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9m KCk7CiAgICAgICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1 ZigpOwogICAgICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAg ICAgICAgICAgICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CgogICAgICAgICAg ICAgICAgICB3aGlsZSAoX01fZ2NvdW50IDwgX19uIC0gMSAmJiAhX190ZXN0ZW9mKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50Owog ICAgICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAg ICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0gX19lb2Y7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICBpZiAoX190ZXN0ZW9mKQogICAgICAgICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQgfCBpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAg ICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAg ICAgKl9fcysrID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAg ICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQp OwogICAgICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0 ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RyZWFtc2l6ZQogICAg YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHJlYWRzb21lKGNoYXJfdHlwZSog X19zLCBzdHJlYW1zaXplIF9fbikKICAgIHsKICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0 cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIGlm IChfX24gPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX19udW0gPSB0aGlzLT5yZGJ1ZigpLT5p bl9hdmFpbCgpOwogICAgICAgICAgICAgICAgICBpZiAoX19udW0gIT0gc3RhdGljX2Nhc3Q8c3Ry ZWFtc2l6ZT4oX19lb2YpKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIF9fbnVtID0gbWluKF9fbnVtLCBfX24pOwogICAgICAgICAgICAgICAgICAgICAgX01fZ2Nv dW50ID0gdGhpcy0+cmRidWYoKS0+c2dldG4oX19zLCBfX251bSk7CiAgICAgICAgICAgICAgICAg ICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0 c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg Y2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICAg IGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0 KTsKICAgICAgcmV0dXJuIF9NX2djb3VudDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHB1dGJhY2soY2hhcl90 eXBlIF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAg ICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAg ICBpZiAoIV9fc2IgfHwgX19zYi0+c3B1dGJhY2tjKF9fYykgPT0gX19lb2YpCiAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAg ICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAg ICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgo dGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAg ICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICB1bmdldCh2b2lkKQogICAgewogICAgICBfTV9nY291bnQgPSAwOwogICAgICBz ZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUq IF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX2VvZiA9 PSBfX3NiLT5zdW5nZXRjKCkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxi aXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGludAogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjoKICAgIHN5bmModm9pZCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCB0cnVlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1 ZigpOwogICAgICAgICAgICAgIGlmICghX19zYiB8fCBfX3JldCA9PSBfX3NiLT5wdWJzeW5jKCkp CiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IDA7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAo KHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAg ICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0Owog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0 eXBlbmFtZSBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnBvc190eXBlCiAgICBiYXNp Y19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgdGVsbGcodm9pZCkKICAgIHsKICAgICAg cG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZSgtMSk7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnJk YnVmKCktPnB1YnNlZWtvZmYoMCwgaW9zX2Jhc2U6OmN1ciwgaW9zX2Jhc2U6OmluKTsKICAgICAg ICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsK CgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkK ICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9U cmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc2Vla2cocG9zX3R5cGUgX19wb3MpCiAgICB7CiAg ICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAg ICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAg ICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtwb3MoX19w b3MsIGlvc19iYXNlOjppbik7CgoKICAgICAgICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUo b2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGZhaWxiaXQpOwoK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9z X2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNl bnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBwb3NfdHlwZSBfX2VyciA9 IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYsIF9fZGlyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW4pOwoK CiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShmYWlsYml0KTsKCiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sIF9DaGFyVCYgX19jKQogICAgewogICAgICB0eXBlZGVm IGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OnNlbnRyeSBfX2NlcmIoX19pbiwgZmFsc2UpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7IF9faW4uZ2V0 KF9fYyk7IH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAg ICAgICAgIGlmICgoX19pbi5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQog ICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9f aW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLCBfQ2hhclQqIF9fcykKICAgIHsKICAgICAg dHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19z dHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBp bnRfdHlwZTsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGN0 eXBlPF9DaGFyVD4gX19jdHlwZV90eXBlOwogICAgICBzdHJlYW1zaXplIF9fZXh0cmFjdGVkID0g MDsKCiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIGZh bHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAg ICAgewoKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fbnVtID0gX19pbi53aWR0aCgpOwogICAg ICAgICAgICAgIGlmIChfX251bSA9PSAwKQogICAgICAgICAgICAgICAgX19udW0gPSBudW1lcmlj X2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCk7CgogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgY29uc3QgX19jdHlwZV90eXBl KiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgICAgIGludF90 eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9f ZW9mID0gX1RyYWl0czo6ZW9mKCk7CiAgICAgICAgICAgICAgYm9vbCBfX3Rlc3RzcCA9IF9fY3R5 cGUtPmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOwogICAgICAgICAgICAgIGJvb2wgX190ZXN0 ZW9mID0gX19jID09IF9fZW9mOwoKICAgICAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPCBf X251bSAtIDEgJiYgIV9fdGVzdGVvZiAmJiAhX190ZXN0c3ApCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgICpfX3MrKyA9IF9fYzsKICAgICAgICAgICAgICAgICAgKytfX2V4dHJh Y3RlZDsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAg ICAgICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgICAgICAgICAgX190ZXN0 c3AgPSBfX2N0eXBlLT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgICAgICAg IH0KCiAgICAgICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgICAgICBfX3NiLT5z cHV0YmFja2MoX19jKTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKCgogICAgICAgICAgICAgICpfX3MgPSBjaGFyX3R5 cGUoKTsKCiAgICAgICAgICAgICAgX19pbi53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IF9faW4uc2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKChfX2lu LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfX2V4dHJhY3RlZCkKICAg ICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuIF9faW47 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYKICAgIHdzKGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+JiBfX2luKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6X19zdHJlYW1idWZfdHlwZSBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpfX2N0eXBlX3R5cGUgX19jdHlwZV90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjppbnRfdHlwZSBfX2ludF90eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpjaGFyX3R5cGUgX19jaGFy X3R5cGU7CgogICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAg ICBjb25zdCBfX2N0eXBlX3R5cGUqIF9fY3R5cGUgPSBfX2luLl9NX2dldF9mY3R5cGVfaW9zKCk7 CiAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgX19p bnRfdHlwZSBfX2M7CiAgICAgIGJvb2wgX190ZXN0ZW9mOwogICAgICBib29sIF9fdGVzdHNwOwoK ICAgICAgZG8KICAgICAgICB7CiAgICAgICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAg ICAgIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlw ZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgfQogICAgICB3aGlsZSAoIV9f dGVzdGVvZiAmJiBfX3Rlc3RzcCk7CgogICAgICBpZiAoIV9fdGVzdGVvZiAmJiAhX190ZXN0c3Ap CiAgICAgICAgX19zYi0+c3B1dGJhY2tjKF9fYyk7CiAgICAgIGVsc2UKICAgICAgICBfX2luLnNl dHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRl ZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJl YW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlw ZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19z dHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4 dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2Vy YihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19z dHIuZXJhc2UoKTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAg ICAgICAgX19zaXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19j YXN0PF9fc2l6ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBfX3N0 cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgY29uc3QgX19jdHlw ZV90eXBlKiBfX2N0eXBlID0gX19pbi5fTV9nZXRfZmN0eXBlX2lvcygpOwogICAgICAgICAgX19p bnRfdHlwZSBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUg X19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAgICAgIGJvb2wgX190ZXN0c3AgPSBfX2N0eXBl LT5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKTsKICAgICAgICAgIGJvb2wgX190ZXN0ZW9mID0g X19jID09IF9fZW9mOwoKICAgICAgICAgIHdoaWxlIChfX2V4dHJhY3RlZCA8IF9fbiAmJiAhX190 ZXN0ZW9mICYmICFfX3Rlc3RzcCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fc3RyICs9 IF9UcmFpdHM6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgICsrX19leHRyYWN0ZWQ7 CiAgICAgICAgICAgICAgX19jID0gX19zYi0+c2J1bXBjKCk7CiAgICAgICAgICAgICAgX190ZXN0 ZW9mID0gX19jID09IF9fZW9mOwogICAgICAgICAgICAgIF9fdGVzdHNwID0gX19jdHlwZS0+aXMo Y3R5cGVfYmFzZTo6c3BhY2UsIF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICghX190 ZXN0ZW9mKQogICAgICAgICAgICBfX3NiLT5zcHV0YmFja2MoX19jKTsKICAgICAgICAgIGVsc2UK ICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAgIF9f aW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAg X19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgZ2V0bGlu ZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4sCiAgICAgICAgICAgIGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fc3RyLCBfQ2hhclQgX19kZWxpbSkK ICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3Ry ZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBl IF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3Ry ZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAg ICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwogICAgICBib29sIF9fdGVzdGRlbGltID0g ZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9faW4s IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIF9fc3RyLmVyYXNl KCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBfX3N0ci5tYXhfc2l6ZSgpOwoKICAgICAg ICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRzOjp0b19pbnRfdHlwZShfX2RlbGltKTsK ICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAg ICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygpOwogICAgICAgICAgY29uc3QgX19pbnRf dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2Mg PT0gX19pZGVsaW07CiAgICAgICAgICBib29sIF9fdGVzdGVvZiA9IF9fYyA9PSBfX2VvZjsKCiAg ICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uICYmICFfX3Rlc3Rlb2YgJiYgIV9fdGVz dGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6dG9f Y2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAgICAg ICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3Rlb2YgPSBfX2MgPT0g X19lb2Y7CiAgICAgICAgICAgICAgX190ZXN0ZGVsaW0gPSBfX2MgPT0gX19pZGVsaW07CiAgICAg ICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAgIF9faW4uc2V0c3Rh dGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFjdGVkICYm ICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsK ICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwgY2xhc3Mg X1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0NoYXJULF9U cmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9faW4s CiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBfX3N0cikK ICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykpOyB9Cn0K IyAyOTEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAyIDMKIyA0MCAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfb3N0cmVhbS5oIiAxIDMKIyA0MSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBj bGFzcyBiYXNpY19zdHJpbmdidWYgOiBwdWJsaWMgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsK ICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9j IGFsbG9jYXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50 X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190 eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlw ZSBvZmZfdHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyX3R5cGUsIHRy YWl0c190eXBlPiBfX3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxj aGFyX3R5cGUsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXplX3R5cGU7CgogICAgcHJpdmF0 ZToKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0g aW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90eXBlKCks IF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoKICAgICAg ZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3Ry LAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19i YXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgpLCBfTV9z dHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5nYnVmX2lu aXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAg ICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgIHsKCgoK CiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsKICAgICAg ICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9fbGVuID0g bWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwogICAgICAg ICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsgX19sZW4p OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJpbmc7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAg ICAgewogICAgICAgIF9NX3N0cmluZyA9IF9fczsKICAgICAgICBfTV9zdHJpbmdidWZfaW5pdChf TV9tb2RlKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAgX01fc3Ry aW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgICAgewoKCgoKCiAgICAg ICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcuc2l6ZSgpOwoKCgoKCiAgICAgICAgX01fYnVmX3Np emVfb3B0ID0gNTEyOwogICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgaWYgKF9NX21v ZGUgJiBpb3NfYmFzZTo6YXRlKQogICAgICAgICAgX01fcmVhbGx5X3N5bmMoMCwgX01fYnVmX3Np emUpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAgICB9 CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1bmRlcmZsb3coKQogICAgICB7CiAgICAg ICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBfTV9pbl9lbmQpCiAgICAgICAgICByZXR1 cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpncHRyKCkpOwogICAgICAgIGVsc2UKICAgICAg ICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgIH0KCiAgICAgIHZpcnR1YWwgaW50 X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7 CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92ZXJmbG93KGludF90eXBlIF9fYyA9IHRy YWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFsIF9fc3RyZWFtYnVmX3R5cGUqCiAgICAg IHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsKICAgICAgICBp ZiAoX19zICYmIF9fbikKICAgICAgICAgIHsKICAgICAgICAgICAgX01fc3RyaW5nID0gX19zdHJp bmdfdHlwZShfX3MsIF9fbik7CiAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKDAsIDApOwogICAg ICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CgogICAgICB2aXJ0dWFsIHBvc190 eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5 LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4g fCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwgcG9zX3R5cGUKICAgICAgc2Vla3Bvcyhw b3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBp b3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoKCgoKCiAgICAgIHZpcnR1YWwgaW50CiAg ICAgIF9NX3JlYWxseV9zeW5jKF9fc2l6ZV90eXBlIF9faSwgX19zaXplX3R5cGUgX19vKQogICAg ICB7CiAgICAgICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBjb25zdF9jYXN0PGNoYXJfdHlwZSo+KF9N X3N0cmluZy5kYXRhKCkpOwogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jh c2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7 CiAgICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfTV9zdHJpbmcuc2l6ZSgpOwoKICAgICAgICBf TV9idWYgPSBfX2Jhc2U7CiAgICAgICAgaWYgKF9fdGVzdGluKQogICAgICAgICAgICB0aGlzLT5z ZXRnKF9fYmFzZSwgX19iYXNlICsgX19pLCBfX2Jhc2UgKyBfX2xlbik7CiAgICAgICAgaWYgKF9f dGVzdG91dCkKICAgICAgICAgIHsKICAgICAgICAgICAgdGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFz ZSArIF9fbGVuKTsKICAgICAgICAgICAgX01fb3V0X2N1ciArPSBfX287CiAgICAgICAgICB9CiAg ICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIH07CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFzcyBiYXNpY19p c3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9y X3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRfdHlwZSBpbnRf dHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBlIG9mZl90eXBl OwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBf X3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CiAg ICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAgICAgIGV4 cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9k ZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJp bmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmlu Z2J1Zik7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0oY29uc3Qg X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShf X251bGwpLCBfTV9zdHJpbmdidWYoX19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAg eyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICB+YmFzaWNfaXN0cmluZ3N0cmVh bSgpCiAgICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29u c3QKICAgICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmlu Z2J1Zik7IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBf X3N0cmluZ190eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9 OwoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNf b3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVm IF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgog ICAgICB0eXBlZGVmIF9BbGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgdHJhaXRzX3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IHRyYWl0c190eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0 cmFpdHNfdHlwZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYg YmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ2J1Zl90eXBl OwogICAgICB0eXBlZGVmIGJhc2ljX29zdHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19v c3RyZWFtX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJp bmdidWY7CgogICAgcHVibGljOgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfb3N0cmluZ3N0 cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlID0gaW9zX2Jhc2U6Om91dCkKICAgICAgOiBf X29zdHJlYW1fdHlwZShfX251bGwpLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9zX2Jhc2U6Om91 dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAog ICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUgX19zdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNl OjpvdXQpCiAgICAgIDogX19vc3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3Ry LCBfX21vZGUgfCBpb3NfYmFzZTo6b3V0KQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1 Zik7IH0KCiAgICAgIH5iYXNpY19vc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19z dHJpbmdidWZfdHlwZSoKICAgICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9j YXN0PF9fc3RyaW5nYnVmX3R5cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdf dHlwZQogICAgICBzdHIoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7 IH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAg eyBfTV9zdHJpbmdidWYuc3RyKF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFz aWNfc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lvc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4K ICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAg dHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9j YXRvcl90eXBlOwoKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUg aW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBv c190eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZf dHlwZTsKCgogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxv Yz4gX19zdHJpbmdfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfaW9z dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT4gX19pb3N0cmVhbV90eXBlOwoKICAgIHByaXZh dGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVmOwoKICAgIHB1YmxpYzoKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ3N0cmVhbShpb3NfYmFzZTo6b3Blbm1vZGUg X19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lvc3RyZWFtX3R5 cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJp bmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3Qg X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 b3Blbm1vZGUgX19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lv c3RyZWFtX3R5cGUoX19udWxsKSwgX01fc3RyaW5nYnVmKF9fc3RyLCBfX20pCiAgICAgIHsgdGhp cy0+aW5pdCgmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX3N0cmluZ3N0cmVhbSgpCiAg ICAgIHsgfQoKCiAgICAgIF9fc3RyaW5nYnVmX3R5cGUqCiAgICAgIHJkYnVmKCkgY29uc3QKICAg ICAgeyByZXR1cm4gY29uc3RfY2FzdDxfX3N0cmluZ2J1Zl90eXBlKj4oJl9NX3N0cmluZ2J1Zik7 IH0KCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29uc3QKICAgICAgeyByZXR1cm4g X01fc3RyaW5nYnVmLnN0cigpOyB9CgogICAgICB2b2lkCiAgICAgIHN0cihjb25zdCBfX3N0cmlu Z190eXBlJiBfX3MpCiAgICAgIHsgX01fc3RyaW5nYnVmLnN0cihfX3MpOyB9CiAgICB9Owp9CgoK CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NzdHJlYW0udGNjIiAxIDMKIyAzNyAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NzdHJlYW0udGNjIiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9zc3RyZWFtLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlIDxjbGFz cyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2lj X3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OmludF90eXBlCiAgICBiYXNpY19z dHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHBiYWNrZmFpbChpbnRfdHlw ZSBfX2MpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwog ICAgICBib29sIF9fdGVzdGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIHRyYWl0 c190eXBlOjplb2YoKSk7CiAgICAgIGJvb2wgX190ZXN0cG9zID0gX01faW5fY3VyICYmIF9NX2lu X2JlZyA8IF9NX2luX2N1cjsKCgoKICAgICAgaWYgKF9fdGVzdHBvcykKICAgICAgICB7CiAgICAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSwg dGhpcy0+Z3B0cigpWy0xXSkKICAgICAgICAgICAgICAmJiAhX190ZXN0ZW9mKQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgLS1fTV9pbl9jdXI7CiAgICAgICAgICAgICAgX19yZXQgPSBfX2M7 CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICAqX01faW5fY3VyID0g dHJhaXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2MpOwogICAgICAgICAgICAgIF9fcmV0ID0gX19j OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3Rlc3Rlb2YpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICBfX3JldCA9IHRyYWl0 c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVy biBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywg Y2xhc3MgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgb3ZlcmZsb3coaW50X3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlw ZSBfX3JldCA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgYm9vbCBfX3Rlc3Rlb2YgPSB0cmFp dHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX3JldCk7CiAgICAgIGJvb2wgX190ZXN0d3JpdGUg PSBfTV9vdXRfY3VyIDwgX01fYnVmICsgX01fYnVmX3NpemU7CiAgICAgIGJvb2wgX190ZXN0b3V0 ID0gX01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CgoKCiAgICAgIGlmIChfX3Rlc3RvdXQpCiAgICAg ICAgewogICAgICAgICAgaWYgKCFfX3Rlc3Rlb2YpCiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBfX3NpemVfdHlwZSBfX2xlbiA9IG1heChfTV9idWZfc2l6ZSwgX01fYnVmX3NpemVfb3B0KTsK ICAgICAgICAgICAgICBfX2xlbiAqPSAyOwoKICAgICAgICAgICAgICBpZiAoX190ZXN0d3JpdGUp CiAgICAgICAgICAgICAgICBfX3JldCA9IHRoaXMtPnNwdXRjKF9fYyk7CiAgICAgICAgICAgICAg ZWxzZSBpZiAoX19sZW4gPD0gX01fc3RyaW5nLm1heF9zaXplKCkpCiAgICAgICAgICAgICAgICB7 CgogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcgPSB0aGlzLT5zdHIoKTsKICAgICAgICAgICAg ICAgICAgX01fc3RyaW5nLnJlc2VydmUoX19sZW4pOwogICAgICAgICAgICAgICAgICBfTV9idWZf c2l6ZSA9IHN0YXRpY19jYXN0PGludF90eXBlPihfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9N X3JlYWxseV9zeW5jKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX01fb3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAgICAgICAgICAgICAgICAq X01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAg ICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAgICBfX3JldCA9IF9fYzsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAg ICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAgICAgfQogICAgICByZXR1 cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMs IGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz46OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlvc19iYXNlOjpzZWVrZGly IF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewogICAgICBwb3NfdHlwZSBf X3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wgX190ZXN0aW4gPSBfX21v ZGUgJiBpb3NfYmFzZTo6aW4gJiYgX01fbW9kZSAmIGlvc19iYXNlOjppbjsKICAgICAgYm9vbCBf X3Rlc3RvdXQgPSBfX21vZGUgJiBpb3NfYmFzZTo6b3V0ICYmIF9NX21vZGUgJiBpb3NfYmFzZTo6 b3V0OwogICAgICBib29sIF9fdGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQgJiYgX193 YXkgIT0gaW9zX2Jhc2U6OmN1cjsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSAmJiAoKF9fdGVzdGlu ICE9IF9fdGVzdG91dCkgfHwgX190ZXN0Ym90aCkpCiAgICAgICAgewogICAgICAgICAgY2hhcl90 eXBlKiBfX2JlZyA9IF9NX2J1ZjsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJpID0gX19udWxs OwogICAgICAgICAgY2hhcl90eXBlKiBfX2N1cm8gPSBfX251bGw7CiAgICAgICAgICBjaGFyX3R5 cGUqIF9fZW5kaSA9IF9fbnVsbDsKICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRvID0gX19udWxs OwoKICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9f Y3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBfX2VuZGkgPSB0aGlzLT5lZ3B0cigp OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX19jdXJvID0gdGhpcy0+cHB0cigpOwogICAgICAgICAgICAgIF9fZW5kbyA9 IHRoaXMtPmVwcHRyKCk7CiAgICAgICAgICAgIH0KCiAgICAgICAgICBvZmZfdHlwZSBfX25ld29m ZmkgPSAwOwogICAgICAgICAgb2ZmX3R5cGUgX19uZXdvZmZvID0gMDsKICAgICAgICAgIGlmIChf X3dheSA9PSBpb3NfYmFzZTo6Y3VyKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19uZXdv ZmZpID0gX19jdXJpIC0gX19iZWc7CiAgICAgICAgICAgICAgX19uZXdvZmZvID0gX19jdXJvIC0g X19iZWc7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fd2F5ID09IGlvc19iYXNl OjplbmQpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2VuZGkgLSBf X2JlZzsKICAgICAgICAgICAgICBfX25ld29mZm8gPSBfX2VuZG8gLSBfX2JlZzsKICAgICAgICAg ICAgfQoKICAgICAgICAgIGlmIChfX3Rlc3RpbgogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSAr IF9fb2ZmID49IDAgJiYgX19lbmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9f b2ZmOwogICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAg ICAgfQogICAgICAgICAgaWYgKF9fdGVzdG91dAogICAgICAgICAgICAgICYmIF9fbmV3b2ZmbyAr IF9fb2ZmID49IDAgJiYgX19lbmRvIC0gX19iZWcgPj0gX19uZXdvZmZvICsgX19vZmYpCiAgICAg ICAgICAgIHsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19uZXdvZmZvICsgX19vZmYg LSAoX01fb3V0X2N1ciAtIF9fYmVnKSk7CiAgICAgICAgICAgICAgX19yZXQgPSBwb3NfdHlwZShf X25ld29mZm8pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAg ICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQsIGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxv Yz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoK ICAgIHNlZWtwb3MocG9zX3R5cGUgX19zcCwgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAg IHsKICAgICAgcG9zX3R5cGUgX19yZXQgPSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpOwogICAgICBv ZmZfdHlwZSBfX3BvcyA9IF9fc3AuX01fcG9zaXRpb24oKTsKICAgICAgY2hhcl90eXBlKiBfX2Jl ZyA9IF9fbnVsbDsKICAgICAgY2hhcl90eXBlKiBfX2VuZCA9IF9fbnVsbDsKICAgICAgYm9vbCBf X3Rlc3RpbiA9IF9fbW9kZSAmIGlvc19iYXNlOjppbiAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Omlu OwogICAgICBib29sIF9fdGVzdG91dCA9IF9fbW9kZSAmIGlvc19iYXNlOjpvdXQgJiYgX01fbW9k ZSAmIGlvc19iYXNlOjpvdXQ7CgogICAgICBpZiAoX190ZXN0aW4pCiAgICAgICAgewogICAgICAg ICAgX19iZWcgPSB0aGlzLT5lYmFjaygpOwogICAgICAgICAgX19lbmQgPSB0aGlzLT5lZ3B0cigp OwogICAgICAgIH0KICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICB7CiAgICAgICAgICBfX2Jl ZyA9IHRoaXMtPnBiYXNlKCk7CiAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXpl OwogICAgICAgIH0KCiAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19i ZWcpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgX01faW5f Y3VyID0gX01faW5fYmVnICsgX19wb3M7CiAgICAgICAgICBpZiAoX190ZXN0b3V0KQogICAgICAg ICAgICBfTV9vdXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAg ICAgICAgIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoX19wb3MpKTsKICAgICAgICB9CgogICAg ICByZXR1cm4gX19yZXQ7CiAgICB9Cgp9CiMgMzY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX3NzdHJlYW0uaCIgMiAzCiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvc3N0cmVhbSIgMiAz CiMgMzggIlRhYmxlLmgiIDIKCgoKCiMgMSAiRXh0SERVLmgiIDEKIyAyOSAiRXh0SERVLmgiCiMg MSAiS2V5d29yZFQuaCIgMQojIDE0ICJLZXl3b3JkVC5oIgojIDEgIktleURhdGEuaCIgMQojIDI2 ICJLZXlEYXRhLmgiCiMgMSAiQ0NmaXRzLmgiIDEKIyAyOCAiQ0NmaXRzLmgiCiMgMSAiL2hvbWUv ZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAxCiMgMzkgIi9ob21lL2Rvcm1hbi9jcHAvaW5j bHVkZS9maXRzaW8uaCIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC4zL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgNDAgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9m aXRzaW8uaCIgMgoKCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAxIDMKIyA0MyAiL2hv bWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAyCgoKIyAxICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDEgMwojIDQ2ICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvZml0c2lvLmgiIDIKIyAx ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4zL2luY2x1ZGUvbGltaXRz LmgiIDEgMwojIDQ3ICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvZml0c2lvLmgiIDIKIyA3NiAi L2hvbWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIgogICAgdHlwZWRlZiBsb25nIExPTkdM T05HOwoKCgoKIyAxICIvaG9tZS9kb3JtYW4vY3BwL2luY2x1ZGUvbG9uZ25hbS5oIiAxCiMgODIg Ii9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIgMgojIDIwNyAiL2hvbWUvZG9ybWFu L2NwcC9pbmNsdWRlL2ZpdHNpby5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICBjaGFyIHR0eXBlWzcw XTsKICAgIGxvbmcgdGJjb2w7CiAgICBpbnQgdGRhdGF0eXBlOwogICAgb2ZmX3QgdHJlcGVhdDsK ICAgIGRvdWJsZSB0c2NhbGU7CiAgICBkb3VibGUgdHplcm87CiAgICBsb25nIHRudWxsOwogICAg Y2hhciBzdHJudWxsWzIwXTsKICAgIGNoYXIgdGZvcm1bMTBdOwogICAgbG9uZyB0d2lkdGg7Cn10 Y29sdW1uOwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgICBpbnQgZmlsZWhhbmRsZTsKICAgIGludCBk cml2ZXI7CiAgICBpbnQgb3Blbl9jb3VudDsKICAgIGNoYXIgKmZpbGVuYW1lOwogICAgaW50IHZh bGlkY29kZTsKICAgIG9mZl90IGZpbGVzaXplOwogICAgb2ZmX3QgbG9nZmlsZXNpemU7CiAgICBp bnQgbGFzdGhkdTsKICAgIG9mZl90IGJ5dGVwb3M7CiAgICBvZmZfdCBpb19wb3M7CiAgICBpbnQg Y3VyYnVmOwogICAgaW50IGN1cmhkdTsKICAgIGludCBoZHV0eXBlOwogICAgaW50IHdyaXRlbW9k ZTsKICAgIGludCBtYXhoZHU7CiAgICBvZmZfdCBoZWFkc3RhcnRbMTAwMCArIDFdOwogICAgb2Zm X3QgaGVhZGVuZDsKICAgIG9mZl90IG5leHRrZXk7CiAgICBvZmZfdCBkYXRhc3RhcnQ7CiAgICBp bnQgdGZpZWxkOwogICAgbG9uZyBvcmlncm93czsKICAgIGxvbmcgbnVtcm93czsKICAgIG9mZl90 IHJvd2xlbmd0aDsKICAgIHRjb2x1bW4gKnRhYmxlcHRyOwogICAgb2ZmX3QgaGVhcHN0YXJ0Owog ICAgbG9uZyBoZWFwc2l6ZTsKCgogICAgaW50IHJlcXVlc3RfY29tcHJlc3NfdHlwZTsKICAgIGxv bmcgcmVxdWVzdF90aWxlc2l6ZVs2XTsKICAgIGludCByZXF1ZXN0X3JpY2VfbmJpdHM7CgogICAg aW50IGNvbXByZXNzaW1nOwogICAgY2hhciB6Y21wdHlwZVsxMl07CiAgICBpbnQgY29tcHJlc3Nf dHlwZTsKICAgIGludCB6Yml0cGl4OwogICAgaW50IHpuZGltOwogICAgbG9uZyB6bmF4aXNbNl07 CiAgICBsb25nIHRpbGVzaXplWzZdOwogICAgbG9uZyBtYXh0aWxlbGVuOwogICAgbG9uZyBtYXhl bGVtOwoKICAgIGludCBjbl9jb21wcmVzc2VkOwogICAgaW50IGNuX3VuY29tcHJlc3NlZDsKICAg IGludCBjbl96c2NhbGU7CiAgICBpbnQgY25fenplcm87CiAgICBpbnQgY25femJsYW5rOwoKICAg IGRvdWJsZSB6c2NhbGU7CiAgICBkb3VibGUgenplcm87CiAgICBpbnQgemJsYW5rOwoKICAgIGlu dCByaWNlX2Jsb2Nrc2l6ZTsKICAgIGludCByaWNlX25iaXRzOwp9IEZJVFNmaWxlOwoKdHlwZWRl ZiBzdHJ1Y3QKewogICAgaW50IEhEVXBvc2l0aW9uOwogICAgRklUU2ZpbGUgKkZwdHI7Cn1maXRz ZmlsZTsKCnR5cGVkZWYgc3RydWN0CnsKCgogICAgZml0c2ZpbGUgKmZwdHI7CiAgICBpbnQgY29s bnVtOwogICAgY2hhciBjb2xuYW1lWzcwXTsKICAgIGludCBkYXRhdHlwZTsKICAgIGludCBpb3R5 cGU7CgoKCiAgICB2b2lkICphcnJheTsKICAgIGxvbmcgcmVwZWF0OwogICAgbG9uZyB0bG1pbjsK ICAgIGxvbmcgdGxtYXg7CiAgICBjaGFyIHR1bml0WzcwXTsKICAgIGNoYXIgdGRpc3BbNzBdOwoK fSBpdGVyYXRvckNvbDsKIyA0ODMgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIK ZXh0ZXJuICJDIiB7CgoKCgppbnQgZml0c19nZXRfdG9rZW4oY2hhciAqKnB0ciwgY2hhciAqZGVs aW1pdGVyLCBjaGFyICp0b2tlbiwgaW50ICppc2FudW1iZXIpOwppbnQgZmZpdXJsKGNoYXIgKnVy bCwgY2hhciAqdXJsdHlwZSwgY2hhciAqaW5maWxlLAogICAgICAgICAgICAgICAgICAgIGNoYXIg Km91dGZpbGUsIGNoYXIgKmV4dHNwZWMsIGNoYXIgKnJvd2ZpbHRlciwKICAgICAgICAgICAgICAg ICAgICBjaGFyICpiaW5zcGVjLCBjaGFyICpjb2xzcGVjLCBpbnQgKnN0YXR1cyk7CmludCBmZnJ0 bm0oY2hhciAqdXJsLCBjaGFyICpyb290bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZleHRzKGNo YXIgKmV4dHNwZWMsIGludCAqZXh0bnVtLCBjaGFyICpleHRuYW1lLCBpbnQgKmV4dHZlcnMsCiAg ICAgICAgICBpbnQgKmhkdXR5cGUsIGNoYXIgKmNvbG5hbWUsIGNoYXIgKnJvd2V4cHJlc3MsIGlu dCAqc3RhdHVzKTsKaW50IGZmZXh0bihjaGFyICp1cmwsIGludCAqZXh0ZW5zaW9uX251bSwgaW50 ICpzdGF0dXMpOwppbnQgZmZ1cmx0KGZpdHNmaWxlICpmcHRyLCBjaGFyICp1cmxUeXBlLCBpbnQg KnN0YXR1cyk7CmludCBmZmJpbnMoY2hhciAqYmluc3BlYywgaW50ICppbWFnZXR5cGUsIGludCAq aGF4aXMsCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIGNvbG5hbWVbNF1bNzFdLCBkb3VibGUg Km1pbmluLAogICAgICAgICAgICAgICAgICAgICAgZG91YmxlICptYXhpbiwgZG91YmxlICpiaW5z aXplaW4sCiAgICAgICAgICAgICAgICAgICAgICBjaGFyIG1pbm5hbWVbNF1bNzFdLCBjaGFyIG1h eG5hbWVbNF1bNzFdLAogICAgICAgICAgICAgICAgICAgICAgY2hhciBiaW5uYW1lWzRdWzcxXSwg ZG91YmxlICp3ZWlnaHQsIGNoYXIgKnd0bmFtZSwKICAgICAgICAgICAgICAgICAgICAgIGludCAq cmVjaXAsIGludCAqc3RhdHVzKTsKaW50IGZmYmlucihjaGFyICoqYmluc3BlYywgY2hhciAqY29s bmFtZSwgZG91YmxlICptaW5pbiwKICAgICAgICAgICAgICAgICAgICAgICAgZG91YmxlICptYXhp biwgZG91YmxlICpiaW5zaXplaW4sIGNoYXIgKm1pbm5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKm1heG5hbWUsIGNoYXIgKmJpbm5hbWUsIGludCAqc3RhdHVzKTsKaW50IGZmaW1w b3J0X2ZpbGUoIGNoYXIgKmZpbGVuYW1lLCBjaGFyICoqY29udGVudHMsIGludCAqc3RhdHVzICk7 CmludCBmZnJ3cmcoIGNoYXIgKnJvd2xpc3QsIGxvbmcgbWF4cm93cywgaW50IG1heHJhbmdlcywg aW50ICpudW1yYW5nZXMsCiAgICAgIGxvbmcgKm1pbnJvdywgbG9uZyAqbWF4cm93LCBpbnQgKnN0 YXR1cyk7CgoKaW50IGZmb21lbShmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNoYXIgKm5hbWUsIGlu dCBtb2RlLCB2b2lkICoqYnVmZnB0ciwKICAgICAgICAgICBzaXplX3QgKmJ1ZmZzaXplLCBzaXpl X3QgZGVsdGFzaXplLAogICAgICAgICAgIHZvaWQgKigqbWVtX3JlYWxsb2MpKHZvaWQgKnAsIHNp emVfdCBuZXdzaXplKSwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZm9wZW4oZml0c2Zp bGUgKipmcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlvbW9kZSwgaW50ICpzdGF0dXMp OwppbnQgZmZkb3BuKGZpdHNmaWxlICoqZnB0ciwgY29uc3QgY2hhciAqZmlsZW5hbWUsIGludCBp b21vZGUsIGludCAqc3RhdHVzKTsKaW50IGZmdG9wbihmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBpbnQgaW9tb2RlLCBpbnQgKnN0YXR1cyk7CmludCBmZmlvcG4oZml0c2Zp bGUgKipmcHRyLCBjb25zdCBjaGFyICpmaWxlbmFtZSwgaW50IGlvbW9kZSwgaW50ICpzdGF0dXMp OwppbnQgZmZyZW9wZW4oZml0c2ZpbGUgKm9wZW5mcHRyLCBmaXRzZmlsZSAqKm5ld2ZwdHIsIGlu dCAqc3RhdHVzKTsKaW50IGZmaW5pdChmaXRzZmlsZSAqKmZwdHIsIGNvbnN0IGNoYXIgKmZpbGVu YW1lLCBpbnQgKnN0YXR1cyk7CmludCBmZmltZW0oZml0c2ZpbGUgKipmcHRyLCB2b2lkICoqYnVm ZnB0ciwKICAgICAgICAgICBzaXplX3QgKmJ1ZmZzaXplLCBzaXplX3QgZGVsdGFzaXplLAogICAg ICAgICAgIHZvaWQgKigqbWVtX3JlYWxsb2MpKHZvaWQgKnAsIHNpemVfdCBuZXdzaXplKSwKICAg ICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnRwbHQoZml0c2ZpbGUgKipmcHRyLCBjb25zdCBj aGFyICpmaWxlbmFtZSwgY29uc3QgY2hhciAqdGVtcG5hbWUsCiAgICAgICAgICAgaW50ICpzdGF0 dXMpOwppbnQgZmZmbHVzKGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBmZmNsb3Mo Zml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmZGVsdChmaXRzZmlsZSAqZnB0ciwg aW50ICpzdGF0dXMpOwppbnQgZmZmbG5tKGZpdHNmaWxlICpmcHRyLCBjaGFyICpmaWxlbmFtZSwg aW50ICpzdGF0dXMpOwppbnQgZmZmbG1kKGZpdHNmaWxlICpmcHRyLCBpbnQgKmZpbGVtb2RlLCBp bnQgKnN0YXR1cyk7CgoKZmxvYXQgZmZ2ZXJzKGZsb2F0ICp2ZXJzaW9uKTsKdm9pZCBmZnVwY2go Y2hhciAqc3RyaW5nKTsKdm9pZCBmZmdlcnIoaW50IHN0YXR1cywgY2hhciAqZXJydGV4dCk7CnZv aWQgZmZwbXNnKGNvbnN0IGNoYXIgKmVycl9tZXNzYWdlKTsKdm9pZCBmZnBtcmsodm9pZCk7Cmlu dCBmZmdtc2coY2hhciAqZXJyX21lc3NhZ2UpOwp2b2lkIGZmY21zZyh2b2lkKTsKdm9pZCBmZmNt cmsodm9pZCk7CnZvaWQgZmZycHJ0KEZJTEUgKnN0cmVhbSwgaW50IHN0YXR1cyk7CnZvaWQgZmZj bXBzKGNoYXIgKnRlbXBsdCwgY2hhciAqY29sbmFtZSwgaW50IGNhc2VzZW4sIGludCAqbWF0Y2gs CiAgICAgICAgICAgaW50ICpleGFjdCk7CmludCBmZnRrZXkoY2hhciAqa2V5d29yZCwgaW50ICpz dGF0dXMpOwppbnQgZmZ0cmVjKGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmbmNoayhm aXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZrZXluKGNoYXIgKmtleXJvb3QsIGlu dCB2YWx1ZSwgY2hhciAqa2V5bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZua2V5KGludCB2YWx1 ZSwgY2hhciAqa2V5cm9vdCwgY2hhciAqa2V5bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZna2Ns KGNoYXIgKmNhcmQpOwppbnQgZmZkdHlwKGNoYXIgKmN2YWwsIGNoYXIgKmR0eXBlLCBpbnQgKnN0 YXR1cyk7CmludCBmZnBzdmMoY2hhciAqY2FyZCwgY2hhciAqdmFsdWUsIGNoYXIgKmNvbW0sIGlu dCAqc3RhdHVzKTsKaW50IGZmZ2tubShjaGFyICpjYXJkLCBjaGFyICpuYW1lLCBpbnQgKmxlbmd0 aCwgaW50ICpzdGF0dXMpOwppbnQgZmZndGhkKGNoYXIgKnRtcGx0LCBjaGFyICpjYXJkLCBpbnQg KmhkdHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZhc2ZtKGNoYXIgKnRmb3JtLCBpbnQgKmRhdGFj b2RlLCBsb25nICp3aWR0aCwgaW50ICpkZWNpbSwgaW50ICpzdGF0dXMpOwppbnQgZmZibmZtKGNo YXIgKnRmb3JtLCBpbnQgKmRhdGFjb2RlLCBsb25nICpyZXBlYXQsIGxvbmcgKndpZHRoLCBpbnQg KnN0YXR1cyk7CmludCBmZmdhYmMoaW50IHRmaWVsZHMsIGNoYXIgKip0Zm9ybSwgaW50IHNwYWNl LCBsb25nICpyb3dsZW4sIGxvbmcgKnRiY29sLAogICAgICAgICAgIGludCAqc3RhdHVzKTsKCgpp bnQgZmZwa3koZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgY2hhciAqa2V5bmFtZSwgdm9p ZCAqdmFsdWUsCiAgICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZnByZWMo Zml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmcGNv bShmaXRzZmlsZSAqZnB0ciwgY29uc3QgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZw dW50KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp1bml0LCBpbnQgKnN0YXR1 cyk7CmludCBmZnBoaXMoZml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNoYXIgKmhpc3RvcnksIGludCAq c3RhdHVzKTsKaW50IGZmcGRhdChmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZn c3RtKGNoYXIgKnRpbWVzdHIsIGludCAqdGltZXJlZiwgaW50ICpzdGF0dXMpOwppbnQgZmZnc2R0 KGludCAqZGF5LCBpbnQgKm1vbnRoLCBpbnQgKnllYXIsIGludCAqc3RhdHVzKTsKaW50IGZmZHQy cyhpbnQgeWVhciwgaW50IG1vbnRoLCBpbnQgZGF5LCBjaGFyICpkYXRlc3RyLCBpbnQgKnN0YXR1 cyk7CmludCBmZnRtMnMoaW50IHllYXIsIGludCBtb250aCwgaW50IGRheSwgaW50IGhvdXIsIGlu dCBtaW51dGUsIGRvdWJsZSBzZWNvbmQsCiAgICAgICAgICBpbnQgZGVjaW1hbHMsIGNoYXIgKmRh dGVzdHIsIGludCAqc3RhdHVzKTsKaW50IGZmczJkdChjaGFyICpkYXRlc3RyLCBpbnQgKnllYXIs IGludCAqbW9udGgsIGludCAqZGF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnMydG0oY2hhciAqZGF0 ZXN0ciwgaW50ICp5ZWFyLCBpbnQgKm1vbnRoLCBpbnQgKmRheSwgaW50ICpob3VyLAogICAgICAg ICAgaW50ICptaW51dGUsIGRvdWJsZSAqc2Vjb25kLCBpbnQgKnN0YXR1cyk7CmludCBmZnBreXUo Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsK aW50IGZmcGt5cyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqdmFsdWUsIGNo YXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZwa2xzKGZpdHNmaWxlICpmcHRyLCBjaGFyICpr ZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0YXR1cyk7CmludCBmZnBsc3co Zml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmcGt5bChmaXRzZmlsZSAqZnB0ciwg Y2hhciAqa2V5bmFtZSwgaW50IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBm ZnBreWooZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNv bW0sIGludCAqc3RhdHVzKTsKaW50IGZmcGt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt ZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3Rh dHVzKTsKaW50IGZmcGt5ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFs dWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZm cGt5ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVj aW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBreWQoZml0c2Zp bGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpj b21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwa3ljKGZpdHNmaWxlICpmcHRyLCBj aGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAg ICAgIGludCAqc3RhdHVzKTsKaW50IGZmcGt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt ZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpz dGF0dXMpOwppbnQgZmZwa2ZjKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq dmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50 IGZmcGtmbShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50 IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwa3l0KGZp dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nIGludHZhbCwgZG91YmxlIGZyYWMsIGNo YXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnB0ZG0oIGZpdHNmaWxlICpm cHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgbmF4ZXNbXSwgaW50ICpzdGF0dXMpOwoK CmludCBmZnBrbnMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleXJvb3QsIGludCBuc3RhcnQsIGlu dCBua2V5LCBjaGFyICp2YWx1ZVtdLAogICAgICAgICAgIGNoYXIgKmNvbW1bXSwgaW50ICpzdGF0 dXMpOwppbnQgZmZwa25sKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlyb290LCBpbnQgbnN0YXJ0 LCBpbnQgbmtleSwgaW50ICp2YWx1ZSwKICAgICAgICAgICBjaGFyICpjb21tW10sIGludCAqc3Rh dHVzKTsKaW50IGZmcGtuaihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFy dCwgaW50IG5rZXksIGxvbmcgKnZhbHVlLAogICAgICAgICAgIGNoYXIgKmNvbW1bXSwgaW50ICpz dGF0dXMpOwppbnQgZmZwa25mKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlyb290LCBpbnQgbnN0 YXJ0LCBpbnQgbmtleSwgZmxvYXQgKnZhbHVlLAogICAgICAgICAgIGludCBkZWNpbSwgY2hhciAq Y29tbVtdLCBpbnQgKnN0YXR1cyk7CmludCBmZnBrbmUoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtl eXJvb3QsIGludCBuc3RhcnQsIGludCBua2V5LCBmbG9hdCAqdmFsdWUsCiAgICAgICAgICAgaW50 IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAqc3RhdHVzKTsKaW50IGZmcGtuZyhmaXRzZmlsZSAq ZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFydCwgaW50IG5rZXksIGRvdWJsZSAqdmFsdWUs CiAgICAgICAgICAgaW50IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAqc3RhdHVzKTsKaW50IGZm cGtuZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5cm9vdCwgaW50IG5zdGFydCwgaW50IG5rZXks IGRvdWJsZSAqdmFsdWUsCiAgICAgICAgICAgaW50IGRlY2ltLCBjaGFyICpjb21tW10sIGludCAq c3RhdHVzKTsKaW50IGZmY3BreShmaXRzZmlsZSAqaW5mcHRyLGZpdHNmaWxlICpvdXRmcHRyLGlu dCBpbmNvbCxpbnQgb3V0Y29sLAogICAgICAgICAgIGNoYXIgKnJvb3RuYW1lLCBpbnQgKnN0YXR1 cyk7CgoKaW50IGZmcGhwcyggZml0c2ZpbGUgKmZwdHIsIGludCBiaXRwaXgsIGludCBuYXhpcywg bG9uZyBuYXhlc1tdLCBpbnQgKnN0YXR1cyk7CmludCBmZnBocHIoIGZpdHNmaWxlICpmcHRyLCBp bnQgc2ltcGxlLCBpbnQgYml0cGl4LCBpbnQgbmF4aXMsIGxvbmcgbmF4ZXNbXSwKICAgICAgICAg ICAgbG9uZyBwY291bnQsIGxvbmcgZ2NvdW50LCBpbnQgZXh0ZW5kLCBpbnQgKnN0YXR1cyk7Cmlu dCBmZnBodGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgaW50IHRm aWVsZHMsIGNoYXIgKip0dHlwZSwKICAgICAgICAgIGxvbmcgKnRiY29sLCBjaGFyICoqdGZvcm0s IGNoYXIgKip0dW5pdCwgY2hhciAqZXh0bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZwaGJuKGZp dHNmaWxlICpmcHRyLCBsb25nIG5heGlzMiwgaW50IHRmaWVsZHMsIGNoYXIgKip0dHlwZSwKICAg ICAgICAgIGNoYXIgKip0Zm9ybSwgY2hhciAqKnR1bml0LCBjaGFyICpleHRuYW1lLCBsb25nIHBj b3VudCwgaW50ICpzdGF0dXMpOwoKCmludCBmZnBrdHAoZml0c2ZpbGUgKmZwdHIsIGNvbnN0IGNo YXIgKmZpbGVuYW1lLCBpbnQgKnN0YXR1cyk7CgoKaW50IGZmZ2hzcChmaXRzZmlsZSAqZnB0ciwg aW50ICpuZXhpc3QsIGludCAqbm1vcmUsIGludCAqc3RhdHVzKTsKaW50IGZmZ2hwcyhmaXRzZmls ZSAqZnB0ciwgaW50ICpuZXhpc3QsIGludCAqcG9zaXRpb24sIGludCAqc3RhdHVzKTsKCgppbnQg ZmZtYWt5KGZpdHNmaWxlICpmcHRyLCBpbnQgbnJlYywgaW50ICpzdGF0dXMpOwppbnQgZmZtcmt5 KGZpdHNmaWxlICpmcHRyLCBpbnQgbnJlYywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdueGsoZml0 c2ZpbGUgKmZwdHIsIGNoYXIgKippbmNsaXN0LCBpbnQgbmluYywgY2hhciAqKmV4Y2xpc3QsCiAg ICAgICAgICAgaW50IG5leGMsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmZ3JlYyhm aXRzZmlsZSAqZnB0ciwgaW50IG5yZWMsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZm Z2NyZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqY2FyZCwgaW50ICpzdGF0 dXMpOwppbnQgZmZndW50KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp1bml0 LCBpbnQgKnN0YXR1cyk7CmludCBmZmdreW4oZml0c2ZpbGUgKmZwdHIsIGludCBua2V5LCBjaGFy ICprZXluYW1lLCBjaGFyICprZXl2YWwsIGNoYXIgKmNvbW0sCiAgICAgICAgICAgaW50ICpzdGF0 dXMpOwppbnQgZmZna2V5KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICprZXl2 YWwsIGNoYXIgKmNvbW0sCiAgICAgICAgICAgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2t5KCBmaXRz ZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBjaGFyICprZXluYW1lLCB2b2lkICp2YWx1ZSwKICAg ICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZmdreXMoZml0c2ZpbGUgKmZw dHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7 CmludCBmZmdrbHMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKip2YWx1ZSwg Y2hhciAqY29tbSwgaW50ICpzdGF0dXMpCjsKaW50IGZmZ2t5bChmaXRzZmlsZSAqZnB0ciwgY2hh ciAqa2V5bmFtZSwgaW50ICp2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZn a3lqKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nICp2YWx1ZSwgY2hhciAqY29t bSwgaW50ICpzdGF0dXMpOwppbnQgZmZna3llKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1l LCBmbG9hdCAqdmFsdWUsIGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZna3lkKGZpdHNm aWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLGNoYXIgKmNvbW0saW50ICpz dGF0dXMpOwppbnQgZmZna3ljKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq dmFsdWUsIGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwppbnQgZmZna3ltKGZpdHNmaWxlICpmcHRy LCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLGNoYXIgKmNvbW0saW50ICpzdGF0dXMpOwpp bnQgZmZna3l0KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBsb25nICppdmFsdWUsIGRv dWJsZSAqZHZhbHVlLAogICAgICAgICAgIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsKaW50IGZm Z3RkbShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG1heGRpbSwgaW50ICpuYXhpcywg bG9uZyBuYXhlc1tdLAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZHRkbShmaXRzZmls ZSAqZnB0ciwgY2hhciAqdGRpbXN0ciwgaW50IGNvbG51bSwgaW50IG1heGRpbSwKICAgICAgICAg ICBpbnQgKm5heGlzLCBsb25nIG5heGVzW10sIGludCAqc3RhdHVzKTsKCgppbnQgZmZna25zKGZp dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgY2hhciAq dmFsdWVbXSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZna25s KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgaW50 ICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZna25q KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwgbG9u ZyAqdmFsdWUsCiAgICAgICAgICAgaW50ICpuZm91bmQsIGludCAqc3RhdHVzKTsKaW50IGZmZ2tu ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgaW50IG5zdGFydCwgaW50IG5tYXgsIGZs b2F0ICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQgZmZn a25kKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQgbnN0YXJ0LCBpbnQgbm1heCwg ZG91YmxlICp2YWx1ZSwKICAgICAgICAgICBpbnQgKm5mb3VuZCwgaW50ICpzdGF0dXMpOwppbnQg ZmZoMnN0KGZpdHNmaWxlICpmcHRyLCBjaGFyICoqaGVhZGVyLCBpbnQgKnN0YXR1cyk7CgoKaW50 IGZmZ2hwcihmaXRzZmlsZSAqZnB0ciwgaW50IG1heGRpbSwgaW50ICpzaW1wbGUsIGludCAqYml0 cGl4LCBpbnQgKm5heGlzLAogICAgICAgICAgbG9uZyBuYXhlc1tdLCBsb25nICpwY291bnQsIGxv bmcgKmdjb3VudCwgaW50ICpleHRlbmQsIGludCAqc3RhdHVzKTsKCmludCBmZmdodGIoZml0c2Zp bGUgKmZwdHIsaW50IG1heGZpZWxkLCBsb25nICpuYXhpczEsIGxvbmcgKm5heGlzMiwKICAgICAg ICAgICBpbnQgKnRmaWVsZHMsIGNoYXIgKip0dHlwZSwgbG9uZyAqdGJjb2wsIGNoYXIgKip0Zm9y bSwgY2hhciAqKnR1bml0LAogICAgICAgICAgIGNoYXIgKmV4dG5hbWUsIGludCAqc3RhdHVzKTsK CmludCBmZmdoYm4oZml0c2ZpbGUgKmZwdHIsIGludCBtYXhmaWVsZCwgbG9uZyAqbmF4aXMyLCBp bnQgKnRmaWVsZHMsCiAgICAgICAgICAgY2hhciAqKnR0eXBlLCBjaGFyICoqdGZvcm0sIGNoYXIg Kip0dW5pdCwgY2hhciAqZXh0bmFtZSwKICAgICAgICAgICBsb25nICpwY291bnQsIGludCAqc3Rh dHVzKTsKCgppbnQgZmZ1a3koZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgY2hhciAqa2V5 bmFtZSwgdm9pZCAqdmFsdWUsCiAgICAgICAgICBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7Cmlu dCBmZnVjcmQoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNhcmQsIGludCAq c3RhdHVzKTsKaW50IGZmdWt5dShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hhciAq Y29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3lzKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXlu YW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZ1a2xzKGZp dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSwgaW50 ICpzdGF0dXMpOwppbnQgZmZ1a3lsKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBpbnQg dmFsdWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsKaW50IGZmdWt5aihmaXRzZmlsZSAqZnB0 ciwgY2hhciAqa2V5bmFtZSwgbG9uZyB2YWx1ZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwpp bnQgZmZ1a3lmKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCB2YWx1ZSwgaW50 IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3llKGZp dHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCB2YWx1ZSwgaW50IGRlY2ltLCBjaGFy ICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a3lnKGZpdHNmaWxlICpmcHRy LCBjaGFyICprZXluYW1lLCBkb3VibGUgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAg ICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmdWt5ZChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5 bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQg KnN0YXR1cyk7CmludCBmZnVreWMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGZsb2F0 ICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwpp bnQgZmZ1a3ltKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLCBp bnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnVrZmMo Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGZsb2F0ICp2YWx1ZSwgaW50IGRlY2ltLCBj aGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZ1a2ZtKGZpdHNmaWxlICpm cHRyLCBjaGFyICprZXluYW1lLCBkb3VibGUgKnZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0s CiAgICAgICAgICBpbnQgKnN0YXR1cyk7CgoKaW50IGZmbXJlYyhmaXRzZmlsZSAqZnB0ciwgaW50 IG5rZXksIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmbWNyZChmaXRzZmlsZSAqZnB0 ciwgY2hhciAqa2V5bmFtZSwgY2hhciAqY2FyZCwgaW50ICpzdGF0dXMpOwppbnQgZmZtbmFtKGZp dHNmaWxlICpmcHRyLCBjaGFyICpvbGRuYW1lLCBjaGFyICpuZXduYW1lLCBpbnQgKnN0YXR1cyk7 CmludCBmZm1jb20oZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKmNvbW0sIGlu dCAqc3RhdHVzKTsKaW50IGZmbWt5dShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgY2hh ciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZta3lzKGZpdHNmaWxlICpmcHRyLCBjaGFyICpr ZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0YXR1cyk7CmludCBmZm1rbHMo Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZhbHVlLCBjaGFyICpjb21tLGlu dCAqc3RhdHVzKTsKaW50IGZmbWt5bChmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgaW50 IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBmZm1reWooZml0c2ZpbGUgKmZw dHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNvbW0sIGludCAqc3RhdHVzKTsK aW50IGZmbWt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFsdWUsIGlu dCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWt5ZShm aXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hh ciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWt5ZyhmaXRzZmlsZSAqZnB0 ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVjaW0sIGNoYXIgKmNvbW0sCiAg ICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZm1reWQoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtl eW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50 ICpzdGF0dXMpOwppbnQgZmZta3ljKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9h dCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsK aW50IGZmbWt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwg aW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZta2Zj KGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwg Y2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmbWtmbShmaXRzZmlsZSAq ZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21t LAogICAgICAgICAgaW50ICpzdGF0dXMpOwoKCmludCBmZmlyZWMoZml0c2ZpbGUgKmZwdHIsIGlu dCBua2V5LCBjaGFyICpjYXJkLCBpbnQgKnN0YXR1cyk7CmludCBmZmlrZXkoZml0c2ZpbGUgKmZw dHIsIGNoYXIgKmNhcmQsIGludCAqc3RhdHVzKTsKaW50IGZmaWt5dShmaXRzZmlsZSAqZnB0ciwg Y2hhciAqa2V5bmFtZSwgY2hhciAqY29tbSwgaW50ICpzdGF0dXMpOwppbnQgZmZpa3lzKGZpdHNm aWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBjaGFyICp2YWx1ZSwgY2hhciAqY29tbSxpbnQgKnN0 YXR1cyk7CmludCBmZmlrbHMoZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGNoYXIgKnZh bHVlLCBjaGFyICpjb21tLGludCAqc3RhdHVzKTsKaW50IGZmaWt5bChmaXRzZmlsZSAqZnB0ciwg Y2hhciAqa2V5bmFtZSwgaW50IHZhbHVlLCBjaGFyICpjb21tLCBpbnQgKnN0YXR1cyk7CmludCBm ZmlreWooZml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGxvbmcgdmFsdWUsIGNoYXIgKmNv bW0sIGludCAqc3RhdHVzKTsKaW50IGZmaWt5ZihmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt ZSwgZmxvYXQgdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3Rh dHVzKTsKaW50IGZmaWt5ZShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZmxvYXQgdmFs dWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZm aWt5ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlIHZhbHVlLCBpbnQgZGVj aW0sIGNoYXIgKmNvbW0sCiAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmlreWQoZml0c2Zp bGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGRvdWJsZSB2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpj b21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZpa3ljKGZpdHNmaWxlICpmcHRyLCBj aGFyICprZXluYW1lLCBmbG9hdCAqdmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAg ICAgIGludCAqc3RhdHVzKTsKaW50IGZmaWt5bShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFt ZSwgZG91YmxlICp2YWx1ZSwgaW50IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpz dGF0dXMpOwppbnQgZmZpa2ZjKGZpdHNmaWxlICpmcHRyLCBjaGFyICprZXluYW1lLCBmbG9hdCAq dmFsdWUsIGludCBkZWNpbSwgY2hhciAqY29tbSwKICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50 IGZmaWtmbShmaXRzZmlsZSAqZnB0ciwgY2hhciAqa2V5bmFtZSwgZG91YmxlICp2YWx1ZSwgaW50 IGRlY2ltLCBjaGFyICpjb21tLAogICAgICAgICAgaW50ICpzdGF0dXMpOwoKCmludCBmZmRrZXko Zml0c2ZpbGUgKmZwdHIsIGNoYXIgKmtleW5hbWUsIGludCAqc3RhdHVzKTsKaW50IGZmZHJlYyhm aXRzZmlsZSAqZnB0ciwgaW50IGtleXBvcywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdoZG4oZml0 c2ZpbGUgKmZwdHIsIGludCAqY2hkdW51bSk7CmludCBmZmdoZHQoZml0c2ZpbGUgKmZwdHIsIGlu dCAqZXh0dHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZnaGFkKGZpdHNmaWxlICpmcHRyLCBsb25n ICpoZWFkc3RhcnQsIGxvbmcgKmRhdGFzdGFydCwgbG9uZyAqZGF0YWVuZCwKICAgICAgICAgICBp bnQgKnN0YXR1cyk7CmludCBmZmdob2YoZml0c2ZpbGUgKmZwdHIsIG9mZl90ICpoZWFkc3RhcnQs IG9mZl90ICpkYXRhc3RhcnQsIG9mZl90ICpkYXRhZW5kLAogICAgICAgICAgIGludCAqc3RhdHVz KTsKaW50IGZmZ2lwcihmaXRzZmlsZSAqZnB0ciwgaW50IG1heGF4aXMsIGludCAqaW1ndHlwZSwg aW50ICpuYXhpcywKICAgICAgICAgICBsb25nICpuYXhlcywgaW50ICpzdGF0dXMpOwppbnQgZmZn aWR0KGZpdHNmaWxlICpmcHRyLCBpbnQgKmltZ3R5cGUsIGludCAqc3RhdHVzKTsKaW50IGZmZ2lk bShmaXRzZmlsZSAqZnB0ciwgaW50ICpuYXhpcywgaW50ICpzdGF0dXMpOwppbnQgZmZnaXN6KGZp dHNmaWxlICpmcHRyLCBpbnQgbmxlbiwgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKCgppbnQg ZmZtYWhkKGZpdHNmaWxlICpmcHRyLCBpbnQgaGR1bnVtLCBpbnQgKmV4dHR5cGUsIGludCAqc3Rh dHVzKTsKaW50IGZmbXJoZChmaXRzZmlsZSAqZnB0ciwgaW50IGhkdW1vdiwgaW50ICpleHR0eXBl LCBpbnQgKnN0YXR1cyk7CmludCBmZm1uaGQoZml0c2ZpbGUgKmZwdHIsIGludCBleHR0eXBlLCBj aGFyICpoZHVuYW1lLCBpbnQgaGR1dmVycywKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBm ZnRoZHUoZml0c2ZpbGUgKmZwdHIsIGludCAqbmhkdSwgaW50ICpzdGF0dXMpOwppbnQgZmZjcmhk KGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBmZmNyaW0oZml0c2ZpbGUgKmZwdHIs IGludCBiaXRwaXgsIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKaW50IGZm Y3J0YihmaXRzZmlsZSAqZnB0ciwgaW50IHRibHR5cGUsIGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxk cywgY2hhciAqKnR0eXBlLAogICAgICAgICAgIGNoYXIgKip0Zm9ybSwgY2hhciAqKnR1bml0LCBj aGFyICpleHRuYW1lLCBpbnQgKnN0YXR1cyk7CmludCBmZmlpbWcoZml0c2ZpbGUgKmZwdHIsIGlu dCBiaXRwaXgsIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGludCAqc3RhdHVzKTsKaW50IGZmaXRh YihmaXRzZmlsZSAqZnB0ciwgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxkcywg Y2hhciAqKnR0eXBlLAogICAgICAgICAgIGxvbmcgKnRiY29sLCBjaGFyICoqdGZvcm0sIGNoYXIg Kip0dW5pdCwgY2hhciAqZXh0bmFtZSwgaW50ICpzdGF0dXMpOwppbnQgZmZpYmluKGZpdHNmaWxl ICpmcHRyLGxvbmcgbmF4aXMyLCBpbnQgdGZpZWxkcywgY2hhciAqKnR0eXBlLCBjaGFyICoqdGZv cm0sCiAgICAgICAgICAgY2hhciAqKnR1bml0LCBjaGFyICpleHRuYW1lLCBsb25nIHBjb3VudCwg aW50ICpzdGF0dXMpOwppbnQgZmZyc2ltKGZpdHNmaWxlICpmcHRyLCBpbnQgYml0cGl4LCBpbnQg bmF4aXMsIGxvbmcgKm5heGVzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRoZHUoZml0c2ZpbGUgKmZw dHIsIGludCAqaGR1dHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZjb3B5KGZpdHNmaWxlICppbmZw dHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgbW9yZWtleXMsIGludCAqc3RhdHVzKTsKaW50IGZm Y3BmbChmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50IHByZXYsIGludCBj dXIsIGludCBmb2xsb3csCiAgICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmY3BoZChmaXRz ZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZjcGR0 KGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgKnN0YXR1cyk7CmludCBm ZmNoZmwoZml0c2ZpbGUgKmZwdHIsIGludCAqc3RhdHVzKTsKaW50IGZmY2RmbChmaXRzZmlsZSAq ZnB0ciwgaW50ICpzdGF0dXMpOwoKaW50IGZmcmRlZihmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0 dXMpOwppbnQgZmZoZGVmKGZpdHNmaWxlICpmcHRyLCBpbnQgbW9yZWtleXMsIGludCAqc3RhdHVz KTsKaW50IGZmcHRocChmaXRzZmlsZSAqZnB0ciwgbG9uZyB0aGVhcCwgaW50ICpzdGF0dXMpOwoK aW50IGZmY3N1bShmaXRzZmlsZSAqZnB0ciwgbG9uZyBucmVjLCB1bnNpZ25lZCBsb25nICpzdW0s IGludCAqc3RhdHVzKTsKdm9pZCBmZmVzdW0odW5zaWduZWQgbG9uZyBzdW0sIGludCBjb21wbG0s IGNoYXIgKmFzY2lpKTsKdW5zaWduZWQgbG9uZyBmZmRzdW0oY2hhciAqYXNjaWksIGludCBjb21w bG0sIHVuc2lnbmVkIGxvbmcgKnN1bSk7CmludCBmZnBja3MoZml0c2ZpbGUgKmZwdHIsIGludCAq c3RhdHVzKTsKaW50IGZmdXBjayhmaXRzZmlsZSAqZnB0ciwgaW50ICpzdGF0dXMpOwppbnQgZmZ2 Y2tzKGZpdHNmaWxlICpmcHRyLCBpbnQgKmRhdGFzdGF0dXMsIGludCAqaGR1c3RhdHVzLCBpbnQg KnN0YXR1cyk7CmludCBmZmdja3MoZml0c2ZpbGUgKmZwdHIsIHVuc2lnbmVkIGxvbmcgKmRhdGFz dW0sIHVuc2lnbmVkIGxvbmcgKmhkdXN1bSwKICAgIGludCAqc3RhdHVzKTsKCgppbnQgZmZwc2Ns KGZpdHNmaWxlICpmcHRyLCBkb3VibGUgc2NhbGUsIGRvdWJsZSB6ZXJvLCBpbnQgKnN0YXR1cyk7 CmludCBmZnBudWwoZml0c2ZpbGUgKmZwdHIsIGxvbmcgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsK aW50IGZmdHNjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgZG91YmxlIHNjYWxlLCBkb3Vi bGUgemVybywgaW50ICpzdGF0dXMpOwppbnQgZmZ0bnVsKGZpdHNmaWxlICpmcHRyLCBpbnQgY29s bnVtLCBsb25nIG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnNudWwoZml0c2ZpbGUgKmZw dHIsIGludCBjb2xudW0sIGNoYXIgKm51bHN0cmluZywgaW50ICpzdGF0dXMpOwoKCmludCBmZmdj bm8oZml0c2ZpbGUgKmZwdHIsIGludCBjYXNlc2VuLCBjaGFyICp0ZW1wbHQsIGludCAqY29sbnVt LAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZ2NubihmaXRzZmlsZSAqZnB0ciwgaW50 IGNhc2VzZW4sIGNoYXIgKnRlbXBsdCwgY2hhciAqY29sbmFtZSwKICAgICAgICAgICBpbnQgKmNv bG51bSwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ3RjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51 bSwgaW50ICp0eXBlY29kZSwgbG9uZyAqcmVwZWF0LAogICAgICAgICAgIGxvbmcgKndpZHRoLCBp bnQgKnN0YXR1cyk7CmludCBmZmduY2woZml0c2ZpbGUgKmZwdHIsIGludCAqbmNvbHMsIGludCAq c3RhdHVzKTsKaW50IGZmZ25ydyhmaXRzZmlsZSAqZnB0ciwgbG9uZyAqbnJvd3MsIGludCAqc3Rh dHVzKTsKaW50IGZmZ2FjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgY2hhciAqdHR5cGUs IGxvbmcgKnRiY29sLAogICAgICAgICAgIGNoYXIgKnR1bml0LCBjaGFyICp0Zm9ybSwgZG91Ymxl ICp0c2NhbCwgZG91YmxlICp0emVybywKICAgICAgICAgICBjaGFyICp0bnVsbCwgY2hhciAqdGRp c3AsIGludCAqc3RhdHVzKTsKaW50IGZmZ2JjbChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwg Y2hhciAqdHR5cGUsIGNoYXIgKnR1bml0LAogICAgICAgICAgIGNoYXIgKmR0eXBlLCBsb25nICpy ZXBlYXQsIGRvdWJsZSAqdHNjYWwsIGRvdWJsZSAqdHplcm8sCiAgICAgICAgICAgbG9uZyAqdG51 bGwsIGNoYXIgKnRkaXNwLCBpbnQgKnN0YXR1cyk7CmludCBmZmdyc3ooZml0c2ZpbGUgKmZwdHIs IGxvbmcgKm5yb3dzLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjZHcoZml0c2ZpbGUgKmZwdHIsIGlu dCBjb2xudW0sIGludCAqd2lkdGgsIGludCAqc3RhdHVzKTsKCgppbnQgZmZncHh2KGZpdHNmaWxl ICpmcHRyLCBpbnQgZGF0YXR5cGUsIGxvbmcgKmZpcnN0cGl4LCBsb25nIG5lbGVtLAogICAgICAg ICAgdm9pZCAqbnVsdmFsLCB2b2lkICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK aW50IGZmZ3B4ZihmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nICpmaXJzdHBpeCwg bG9uZyBuZWxlbSwKICAgICAgICAgICB2b2lkICphcnJheSwgY2hhciAqbnVsbGFycmF5LCBpbnQg KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3YoZml0c2ZpbGUgKmZwdHIsIGludCBkYXRh dHlwZSwgbG9uZyAqYmxjLCBsb25nICp0cmMsIGxvbmcgKmluYywKICAgICAgICAgIHZvaWQgKm51 bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwdihm aXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK ICAgICAgICAgIHZvaWQgKm51bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0 YXR1cyk7CmludCBmZmdwZihmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBsb25nIGZpcnN0 ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFycmF5LCBjaGFyICpudWxsYXJyYXks IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwdmIoZml0c2ZpbGUgKmZwdHIsIGxv bmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLCB1bnNpZ25lZAogICAgICAgICAg IGNoYXIgbnVsdmFsLCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh dHVzKTsKaW50IGZmZ3B2dWkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3Rl bGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgdW5zaWdu ZWQgc2hvcnQgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7Cmlu dCBmZmdwdmkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25n IG5lbGVtLAogICAgICAgICAgIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBpbnQgKmFueW51 bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncHZ1aihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg bG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyBudWx2 YWwsIHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0 YXR1cyk7CmludCBmZmdwdmooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3Rl bGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGxvbmcgbnVsdmFsLCBsb25nICphcnJheSwgaW50 ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2amooZml0c2ZpbGUgKmZwdHIsIGxvbmcg Z3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIExPTkdMT05HIG51 bHZhbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn cHZ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs ZW0sCiAgICAgICAgICAgdW5zaWduZWQgaW50IG51bHZhbCwgdW5zaWduZWQgaW50ICphcnJheSwg aW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2ayhmaXRzZmlsZSAqZnB0ciwgbG9u ZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgaW50IG51bHZh bCwgaW50ICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3B2ZShmaXRz ZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAg ICAgICAgZmxvYXQgbnVsdmFsLCBmbG9hdCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1 cyk7CmludCBmZmdwdmQoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVt LCBsb25nIG5lbGVtLAogICAgICAgICAgIGRvdWJsZSBudWx2YWwsIGRvdWJsZSAqYXJyYXksIGlu dCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZncGZiKGZpdHNmaWxlICpmcHRyLCBsb25n IGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBj aGFyICphcnJheSwgY2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7Cmlu dCBmZmdwZnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9u ZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGNoYXIgKm51bGFycmF5 LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZpKGZpdHNmaWxlICpmcHRyLCBs b25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBzaG9ydCAq YXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn cGZ1aihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs ZW0sCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQg KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy b3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBsb25nICphcnJheSwg Y2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwZmpqKGZp dHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAg ICAgICAgICBMT05HTE9ORyAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50 ICpzdGF0dXMpOwppbnQgZmZncGZ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBm aXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWduZWQgaW50ICphcnJheSwgY2hh ciAqbnVsYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdwZmsoZml0c2Zp bGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAg ICAgIGludCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMp OwppbnQgZmZncGZlKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwg bG9uZyBuZWxlbSwKICAgICAgICAgICBmbG9hdCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBpbnQg KmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZncGZkKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy b3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICBkb3VibGUgKmFycmF5 LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKCmludCBmZmcyZGIo Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCBsb25nIG5j b2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5zaWduZWQgY2hhciAq YXJyYXksCiAgICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkdWko Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgbG9uZyBu Y29scywKICAgICAgICAgICBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIHVuc2lnbmVkIHNob3J0 ICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnMmRp KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBzaG9ydCBudWx2YWwsIGxvbmcgbmNvbHMsCiAg ICAgICAgICAgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBzaG9ydCAqYXJyYXksCiAgICAgICAg ICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkdWooZml0c2ZpbGUgKmZwdHIs IGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGxvbmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAg IGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5zaWduZWQgbG9uZyAqYXJyYXksCiAgICAgICAg ICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkaihmaXRzZmlsZSAqZnB0ciwg bG9uZyBncm91cCwgbG9uZyBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAgbG9uZyBuYXhp czEsIGxvbmcgbmF4aXMyLCBsb25nICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50 ICpzdGF0dXMpOwppbnQgZmZnMmRqaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgTE9OR0xP TkcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlz MiwgTE9OR0xPTkcgKmFycmF5LAogICAgICAgICAgIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7 CmludCBmZmcyZHVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCB1bnNpZ25lZCBpbnQgbnVs dmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgdW5z aWduZWQgaW50ICphcnJheSwKICAgICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwpp bnQgZmZnMmRrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBpbnQgbnVsdmFsLCBsb25nIG5j b2xzLAogICAgICAgICAgIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgaW50ICphcnJheSwKICAg ICAgICAgICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnMmRlKGZpdHNmaWxlICpm cHRyLCBsb25nIGdyb3VwLCBmbG9hdCBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAgbG9u ZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBmbG9hdCAqYXJyYXksCiAgICAgICAgICAgaW50ICphbnlu dWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzJkZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg ZG91YmxlIG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5heGlzMSwgbG9uZyBu YXhpczIsIGRvdWJsZSAqYXJyYXksCiAgICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVz KTsKCmludCBmZmczZGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGNoYXIg bnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLCBs b25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgY2hhciAqYXJyYXks IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZHVpKGZpdHNmaWxlICpmcHRyLCBs b25nIGdyb3VwLCB1bnNpZ25lZCBzaG9ydCBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAgICAg bG9uZyBucm93cywgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywKICAgICAg ICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7Cmlu dCBmZmczZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHNob3J0IG51bHZhbCwgbG9uZyBu Y29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIGxv bmcgbmF4aXMzLAogICAgICAgICAgIHNob3J0ICphcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh dHVzKTsKaW50IGZmZzNkdWooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIHVuc2lnbmVkIGxv bmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMx LCBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgbG9uZyAqYXJy YXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGooZml0c2ZpbGUgKmZwdHIs IGxvbmcgZ3JvdXAsIGxvbmcgbnVsdmFsLCBsb25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJv d3MsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgbG9u ZyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGpqKGZpdHNmaWxl ICpmcHRyLCBsb25nIGdyb3VwLCBMT05HTE9ORyBudWx2YWwsIGxvbmcgbmNvbHMsCiAgICAgICAg ICAgbG9uZyBucm93cywgbG9uZyBuYXhpczEsIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywKICAg ICAgICAgICBMT05HTE9ORyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBm ZmczZHVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCB1bnNpZ25lZCBpbnQgbnVsdmFsLCBs b25nIG5jb2xzLAogICAgICAgICAgIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLCBsb25nIG5heGlz MiwgbG9uZyBuYXhpczMsCiAgICAgICAgICAgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICphbnlu dWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzNkayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg aW50IG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25nIG5heGlz MSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGludCAqYXJyYXksIGludCAq YW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmczZGUoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3Jv dXAsIGZsb2F0IG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5yb3dzLCBsb25n IG5heGlzMSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGZsb2F0ICphcnJh eSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZzNkZChmaXRzZmlsZSAqZnB0ciwg bG9uZyBncm91cCwgZG91YmxlIG51bHZhbCwgbG9uZyBuY29scywKICAgICAgICAgICBsb25nIG5y b3dzLCBsb25nIG5heGlzMSwgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLAogICAgICAgICAgIGRv dWJsZSAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZnc3ZiKGZpdHNm aWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMs CiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCB1bnNpZ25lZCBj aGFyICphcnJheSwKICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3Z1aShmaXRz ZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxj LAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCB1bnNpZ25lZCBzaG9ydCBudWx2YWwsIHVuc2lnbmVk IHNob3J0ICphcnJheSwKICBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3ZpKGZp dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpi bGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBp bnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3Z1aihmaXRzZmlsZSAqZnB0ciwgaW50 IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywg bG9uZyAqaW5jLCB1bnNpZ25lZCBsb25nIG51bHZhbCwgdW5zaWduZWQgbG9uZyAqYXJyYXksCiAg aW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ3N2aihmaXRzZmlsZSAqZnB0ciwgaW50 IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywg bG9uZyAqaW5jLCBsb25nIG51bHZhbCwgbG9uZyAqYXJyYXksIGludCAqYW55bnVsLCBpbnQgKnN0 YXR1cyk7CmludCBmZmdzdmpqKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMs IGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIExPTkdMT05H IG51bHZhbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwKICBpbnQgKnN0YXR1cyk7Cmlu dCBmZmdzdnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5h eGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIHVuc2lnbmVkIGludCBudWx2 YWwsIHVuc2lnbmVkIGludCAqYXJyYXksCiAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50 IGZmZ3N2ayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhl cywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCBpbnQgbnVsdmFsLCBpbnQgKmFy cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc3ZlKGZpdHNmaWxlICpmcHRy LCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAq dHJjLCBsb25nICppbmMsIGZsb2F0IG51bHZhbCwgZmxvYXQgKmFycmF5LCBpbnQgKmFueW51bCwg aW50ICpzdGF0dXMpOwppbnQgZmZnc3ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQg bmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGRv dWJsZSBudWx2YWwsIGRvdWJsZSAqYXJyYXksIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsK CmludCBmZmdzZmIoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAq bmF4ZXMsIGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgY2hhciAq YXJyYXksIGNoYXIgKmZsYWd2YWwsCiAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZm Z3NmdWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMs IGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgc2hvcnQgKmFycmF5 LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwKICBpbnQgKnN0YXR1cyk7CmludCBmZmdzZmko Zml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGxvbmcg KmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgc2hvcnQgKmFycmF5LCBjaGFyICpmbGFndmFs LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnc2Z1aihmaXRzZmlsZSAqZnB0ciwg aW50IGNvbG51bSwgaW50IG5heGlzLCBsb25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRy YywgbG9uZyAqaW5jLCB1bnNpZ25lZCBsb25nICphcnJheSwgY2hhciAqZmxhZ3ZhbCwgaW50ICph bnludWwsCiAgaW50ICpzdGF0dXMpOwppbnQgZmZnc2ZqKGZpdHNmaWxlICpmcHRyLCBpbnQgY29s bnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25n ICppbmMsIGxvbmcgKmFycmF5LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwgaW50ICpzdGF0 dXMpOwppbnQgZmZnc2ZqaihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgaW50IG5heGlzLCBs b25nICpuYXhlcywgbG9uZyAqYmxjLAogIGxvbmcgKnRyYywgbG9uZyAqaW5jLCBMT05HTE9ORyAq YXJyYXksIGNoYXIgKmZsYWd2YWwsIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsKaW50IGZm Z3NmdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMs IGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxvbmcgKmluYywgdW5zaWduZWQgaW50ICphcnJheSwg Y2hhciAqZmxhZ3ZhbCwgaW50ICphbnludWwsCiAgaW50ICpzdGF0dXMpOwppbnQgZmZnc2ZrKGZp dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMsIGxvbmcgKm5heGVzLCBsb25nICpi bGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGludCAqYXJyYXksIGNoYXIgKmZsYWd2YWwsIGlu dCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdzZmUoZml0c2ZpbGUgKmZwdHIsIGludCBj b2xudW0sIGludCBuYXhpcywgbG9uZyAqbmF4ZXMsIGxvbmcgKmJsYywKICBsb25nICp0cmMsIGxv bmcgKmluYywgZmxvYXQgKmFycmF5LCBjaGFyICpmbGFndmFsLCBpbnQgKmFueW51bCwgaW50ICpz dGF0dXMpOwppbnQgZmZnc2ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBpbnQgbmF4aXMs IGxvbmcgKm5heGVzLCBsb25nICpibGMsCiAgbG9uZyAqdHJjLCBsb25nICppbmMsIGRvdWJsZSAq YXJyYXksIGNoYXIgKmZsYWd2YWwsIGludCAqYW55bnVsLAogIGludCAqc3RhdHVzKTsKCmludCBm ZmdncGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5l bGVtLAogICAgICAgICAgIHVuc2lnbmVkIGNoYXIgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm ZmdncHVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBu ZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50 IGZmZ2dwaShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcg bmVsZW0sCiAgICAgICAgICAgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncHVq KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK ICAgICAgICAgICB1bnNpZ25lZCBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZnZ3Bq KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwK ICAgICAgICAgICBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZnZ3BqaihmaXRzZmls ZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAg ICAgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncHVrKGZpdHNmaWxlICpm cHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1 bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncGsoZml0c2ZpbGUgKmZw dHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGlu dCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmZ2dwZShmaXRzZmlsZSAqZnB0ciwgbG9uZyBn cm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgZmxvYXQgKmFycmF5 LCBpbnQgKnN0YXR1cyk7CmludCBmZmdncGQoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxv bmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGRvdWJsZSAqYXJyYXksIGludCAq c3RhdHVzKTsKCgppbnQgZmZnY3YoIGZpdHNmaWxlICpmcHRyLCBpbnQgZGF0YXR5cGUsIGludCBj b2xudW0sIGxvbmcgZmlyc3Ryb3csCiAgICAgICAgICAgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVs ZW0sIHZvaWQgKm51bHZhbCwgdm9pZCAqYXJyYXksIGludCAqYW55bnVsLAogICAgICAgICAgIGlu dCAqc3RhdHVzKTsKaW50IGZmZ2NmKCBmaXRzZmlsZSAqZnB0ciwgaW50IGRhdGF0eXBlLCBpbnQg Y29sbnVtLCBsb25nIGZpcnN0cm93LAogICAgICAgICAgIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5l bGVtLCB2b2lkICphcnJheSwgY2hhciAqbnVsbGFycmF5LAogICAgICAgICAgIGludCAqYW55bnVs LCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdnMoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxv bmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIg Km51bHZhbCwgY2hhciAqKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn Y2wgKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0 ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwpp bnQgZmZnY3ZsIChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u ZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgY2hhciBudWx2YWwsIGNoYXIgKmFy cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY3ZiKGZpdHNmaWxlICpmcHRy LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBs b25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyIG51bHZhbCwgdW5zaWduZWQgY2hhciAqYXJyYXksCiAg ICAgICAgICAgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2N2dWkoZml0c2ZpbGUg KmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAg ICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIHNob3J0IG51bHZhbCwgdW5zaWduZWQgc2hvcnQgKmFy cmF5LAogICAgICAgICAgIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmkoZml0 c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAog ICAgICAgICAgIGxvbmcgbmVsZW0sIHNob3J0IG51bHZhbCwgc2hvcnQgKmFycmF5LCBpbnQgKmFu eW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY3Z1aihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51 bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg dW5zaWduZWQgbG9uZyBudWx2YWwsIHVuc2lnbmVkIGxvbmcgKmFycmF5LCBpbnQgKmFueW51bCwK ICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmooZml0c2ZpbGUgKmZwdHIsIGludCBj b2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVs ZW0sIGxvbmcgbnVsdmFsLCBsb25nICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK aW50IGZmZ2N2amooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxv bmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIExPTkdMT05HIG51bHZhbCwgTE9O R0xPTkcgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBm ZmdjdnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgbnVsdmFsLCB1bnNp Z25lZCBpbnQgKmFycmF5LCBpbnQgKmFueW51bCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7Cmlu dCBmZmdjdmsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcg Zmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGludCBudWx2YWwsIGludCAqYXJyYXks IGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdmUoZml0c2ZpbGUgKmZwdHIsIGlu dCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcg bmVsZW0sIGZsb2F0IG51bHZhbCwgZmxvYXQgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0 dXMpOwppbnQgZmZnY3ZkKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93 LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlIG51bHZhbCwgZG91 YmxlICphcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2N2YyhmaXRzZmls ZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAg ICAgICAgbG9uZyBuZWxlbSwgZmxvYXQgbnVsdmFsLCBmbG9hdCAqYXJyYXksIGludCAqYW55bnVs LCBpbnQgKnN0YXR1cyk7CmludCBmZmdjdm0oZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxv bmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICBsb25nIG5lbGVtLCBkb3VibGUg bnVsdmFsLCBkb3VibGUgKmFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZn Y3goZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3Ri aXQsCiAgICAgICAgICAgIGxvbmcgbmJpdHMsIGNoYXIgKmxhcnJheSwgaW50ICpzdGF0dXMpOwpp bnQgZmZnY3h1aShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u ZyBucm93cywKICAgICAgICAgICAgbG9uZyBmaXJzdGJpdCwgaW50IG5iaXRzLCB1bnNpZ25lZCBz aG9ydCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmZ2N4dWsoZml0c2ZpbGUgKmZwdHIsIGlu dCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsCiAgICAgICAgICAgIGxvbmcgZmly c3RiaXQsIGludCBuYml0cywgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwoKaW50 IGZmZ2NmcyhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBm aXJzdGVsZW0sIGxvbmcKICAgICAgICAgIG5lbGVtLCBjaGFyICoqYXJyYXksIGNoYXIgKm51bGFy cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZsKGZpdHNmaWxlICpmcHRy LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwgbG9uZwogICAgICAg ICAgbmVsZW0sIGNoYXIgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAq c3RhdHVzKTsKaW50IGZmZ2NmYihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJz dHJvdywgbG9uZyBmaXJzdGVsZW0sIGxvbmcKICAgICAgbmVsZW0sIHVuc2lnbmVkIGNoYXIgKmFy cmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsKaW50IGZmZ2Nm dWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3Rl bGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIGNoYXIgKm51bGFy cmF5LCBpbnQgKmFueW51bCwKICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZpKGZpdHNmaWxl ICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAg bG9uZyBuZWxlbSwgc2hvcnQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGlu dCAqc3RhdHVzKTsKaW50IGZmZ2NmdWooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcg Zmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25n ICphcnJheSwgY2hhciAqbnVsYXJyYXksIGludCAqYW55bnVsLAogICAgICBpbnQgKnN0YXR1cyk7 CmludCBmZmdjZmooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxv bmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCBsb25nICphcnJheSwgY2hhciAqbnVsYXJy YXksIGludCAqYW55bnVsLCBpbnQgKnN0YXR1cyk7CmludCBmZmdjZmpqKGZpdHNmaWxlICpmcHRy LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBu ZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAq c3RhdHVzKTsKaW50IGZmZ2NmdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmly c3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgKmFy cmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsCiAgICAgIGludCAqc3RhdHVzKTsKaW50 IGZmZ2NmayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBm aXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGludCAqYXJyYXksIGNoYXIgKm51bGFycmF5LCBp bnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZlKGZpdHNmaWxlICpmcHRyLCBpbnQg Y29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBuZWxlbSwg ZmxvYXQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3RhdHVzKTsK aW50IGZmZ2NmZChmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u ZyBmaXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGRvdWJsZSAqYXJyYXksIGNoYXIgKm51bGFy cmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwppbnQgZmZnY2ZjKGZpdHNmaWxlICpmcHRy LCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgbG9uZyBu ZWxlbSwgZmxvYXQgKmFycmF5LCBjaGFyICpudWxhcnJheSwgaW50ICphbnludWwsIGludCAqc3Rh dHVzKTsKaW50IGZmZ2NmbShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJv dywgbG9uZyBmaXJzdGVsZW0sCiAgICAgIGxvbmcgbmVsZW0sIGRvdWJsZSAqYXJyYXksIGNoYXIg Km51bGFycmF5LCBpbnQgKmFueW51bCwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2RlcyhmaXRzZmls ZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyByb3dudW0sIGxvbmcgKmxlbmd0aCwKICAgICAgICAg ICBsb25nICpoZWFwYWRkciwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ2Rlc3MoZml0c2ZpbGUgKmZw dHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsIGxvbmcgKmxlbmd0aCwK ICAgICAgICAgICBsb25nICpoZWFwYWRkciwgaW50ICpzdGF0dXMpOwoKaW50IGZmdGhlYXAoZml0 c2ZpbGUgKmZwdHIsIGxvbmcgKmhlYXBzaXplLCBsb25nICp1bnVzZWQsIGxvbmcgKm92ZXJsYXAs CiAgICAgICAgICAgIGludCAqdmFsaWQsIGludCAqc3RhdHVzKTsKaW50IGZmY21waChmaXRzZmls ZSAqZnB0ciwgaW50ICpzdGF0dXMpOwoKaW50IGZmZ3RiYihmaXRzZmlsZSAqZnB0ciwgbG9uZyBm aXJzdHJvdywgbG9uZyBmaXJzdGNoYXIsIGxvbmcgbmNoYXJzLAogICAgICAgICAgIHVuc2lnbmVk IGNoYXIgKnZhbHVlcywgaW50ICpzdGF0dXMpOwoKCmludCBmZnBweChmaXRzZmlsZSAqZnB0ciwg aW50IGRhdGF0eXBlLCBsb25nICpmaXJzdHBpeCwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQg KmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBweG4oZml0c2ZpbGUgKmZwdHIsIGludCBkYXRh dHlwZSwgbG9uZyAqZmlyc3RwaXgsIGxvbmcgbmVsZW0sCiAgICAgICAgICB2b2lkICphcnJheSwg dm9pZCAqbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcihmaXRzZmlsZSAqZnB0ciwgaW50 IGRhdGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFy cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcmIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs IGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIGNoYXIgKmFy cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3Vw LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAq YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcHByaShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91 cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgc2hvcnQgKmFycmF5LCBp bnQgKnN0YXR1cyk7CmludCBmZnBwcnVqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25n IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25nICphcnJheSwg aW50ICpzdGF0dXMpOwppbnQgZmZwcHJqKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25n IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBsb25nICphcnJheSwgaW50ICpzdGF0 dXMpOwppbnQgZmZwcHJ1ayhmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVs ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0 dXMpOwppbnQgZmZwcHJrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxl bSwKICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm ZnBwcmUoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAg ICAgIGxvbmcgbmVsZW0sIGZsb2F0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwcHJkKGZp dHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25n IG5lbGVtLCBkb3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBwcmpqKGZpdHNmaWxl ICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVt LCBMT05HTE9ORyAqYXJyYXksIGludCAqc3RhdHVzKTsKCmludCBmZnBwcnUoZml0c2ZpbGUgKmZw dHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLAogICAgICAgICAgIGlu dCAqc3RhdHVzKTsKaW50IGZmcHBybihmaXRzZmlsZSAqZnB0ciwgbG9uZyBmaXJzdGVsZW0sIGxv bmcgbmVsZW0sIGludCAqc3RhdHVzKTsKCmludCBmZnBwbihmaXRzZmlsZSAqZnB0ciwgaW50IGRh dGF0eXBlLCBsb25nIGZpcnN0ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgIHZvaWQgKmFycmF5 LCB2b2lkICpudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuYihmaXRzZmlsZSAqZnB0ciwg bG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAgICAgICAgdW5zaWdu ZWQgY2hhciAqYXJyYXksIHVuc2lnbmVkIGNoYXIgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBm ZnBwbnVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAg ICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBzaG9ydCAqYXJyYXksIHVuc2lnbmVkIHNob3J0IG51 bHZhbCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmkoZml0c2ZpbGUgKmZwdHIs IGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHNob3J0 ICphcnJheSwgc2hvcnQgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmooZml0c2ZpbGUg KmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0s IGxvbmcgKmFycmF5LCBsb25nIG51bHZhbCwgaW50ICpzdGF0dXMpOwppbnQgZmZwcG51aihmaXRz ZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sIGxvbmcgbmVsZW0sCiAgICAg ICAgICAgdW5zaWduZWQgbG9uZyAqYXJyYXksIHVuc2lnbmVkIGxvbmcgbnVsdmFsLCBpbnQgKnN0 YXR1cyk7CmludCBmZnBwbnVrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0 ZWxlbSwgbG9uZyBuZWxlbSwKICAgICAgICAgICB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNpZ25l ZCBpbnQgbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBwbmsoZml0c2ZpbGUgKmZwdHIsIGxv bmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIGludCAqYXJy YXksIGludCBudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuZShmaXRzZmlsZSAqZnB0ciwg bG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZmxvYXQg KmFycmF5LCBmbG9hdCBudWx2YWwsIGludCAqc3RhdHVzKTsKaW50IGZmcHBuZChmaXRzZmlsZSAq ZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg ZG91YmxlICphcnJheSwgZG91YmxlIG51bHZhbCwgaW50ICpzdGF0dXMpOwppbnQgZmZwcG5qaihm aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u ZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBsb25nIG51bHZhbCwgaW50ICpzdGF0dXMpOwoKaW50 IGZmcDJkYihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBuYXhp czEsCiAgICAgICAgICAgbG9uZyBuYXhpczIsIHVuc2lnbmVkIGNoYXIgKmFycmF5LCBpbnQgKnN0 YXR1cyk7CmludCBmZnAyZHVpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xz LCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25nIG5heGlzMiwgdW5zaWduZWQgc2hvcnQgKmFy cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs IGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBzaG9ydCAq YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkdWooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3Jv dXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCB1bnNp Z25lZCBsb25nICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwMmRqKGZpdHNmaWxlICpmcHRy LCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25nIG5h eGlzMiwgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkdWsoZml0c2ZpbGUgKmZw dHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcg bmF4aXMyLCB1bnNpZ25lZCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGsoZml0 c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAg ICAgIGxvbmcgbmF4aXMyLCBpbnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAyZGUoZml0 c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAogICAgICAg ICAgIGxvbmcgbmF4aXMyLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJkZChm aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBuYXhpczEsCiAgICAg ICAgICAgbG9uZyBuYXhpczIsIGRvdWJsZSAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDJk amooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbmF4aXMxLAog ICAgICAgICAgIGxvbmcgbmF4aXMyLCBMT05HTE9ORyAqYXJyYXksIGludCAqc3RhdHVzKTsKCmlu dCBmZnAzZGIoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJv d3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5z aWduZWQgY2hhciAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkdWkoZml0c2ZpbGUgKmZw dHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAg ICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5zaWduZWQgc2hvcnQgKmFycmF5LCBp bnQgKnN0YXR1cyk7CmludCBmZnAzZGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcg bmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBs b25nIG5heGlzMywgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZHVqKGZpdHNm aWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25nIG5heGlz MSwKICAgICAgICAgICBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsIHVuc2lnbmVkIGxvbmcgKmFy cmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZGooZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAs IGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcgbmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4 aXMyLCBsb25nIG5heGlzMywgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkdWso Zml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmNvbHMsIGxvbmcgbnJvd3MsIGxvbmcg bmF4aXMxLAogICAgICAgICAgIGxvbmcgbmF4aXMyLCBsb25nIG5heGlzMywgdW5zaWduZWQgaW50 ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwM2RrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdy b3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25nIG5heGlzMSwKICAgICAgICAgICBsb25n IG5heGlzMiwgbG9uZyBuYXhpczMsIGludCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNk ZShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuY29scywgbG9uZyBucm93cywgbG9u ZyBuYXhpczEsCiAgICAgICAgICAgbG9uZyBuYXhpczIsIGxvbmcgbmF4aXMzLCBmbG9hdCAqYXJy YXksIGludCAqc3RhdHVzKTsKaW50IGZmcDNkZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg bG9uZyBuY29scywgbG9uZyBucm93cywgbG9uZyBuYXhpczEsCiAgICAgICAgICAgbG9uZyBuYXhp czIsIGxvbmcgbmF4aXMzLCBkb3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnAzZGpq KGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5jb2xzLCBsb25nIG5yb3dzLCBsb25n IG5heGlzMSwKICAgICAgICAgICBsb25nIG5heGlzMiwgbG9uZyBuYXhpczMsIExPTkdMT05HICph cnJheSwgaW50ICpzdGF0dXMpOwoKaW50IGZmcHNzKGZpdHNmaWxlICpmcHRyLCBpbnQgZGF0YXR5 cGUsCiAgICAgICAgICAgbG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIHZvaWQgKmFycmF5LCBp bnQgKnN0YXR1cyk7CmludCBmZnBzc2IoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcg bmF4aXMsIGxvbmcgKm5heGVzLAogICAgICAgICAgIGxvbmcgKmZwaXhlbCwgbG9uZyAqbHBpeGVs LCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwc3N1aShmaXRzZmls ZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuYXhpcywgbG9uZyAqbmF4ZXMsCiAgICAgICAgICAg bG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIHVuc2lnbmVkIHNob3J0ICphcnJheSwgaW50ICpz dGF0dXMpOwppbnQgZmZwc3NpKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlz LCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgc2hv cnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBzc3VqKGZpdHNmaWxlICpmcHRyLCBsb25n IGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWws IGxvbmcgKmxwaXhlbCwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZm cHNzaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBuYXhpcywgbG9uZyAqbmF4ZXMs CiAgICAgICAgICAgbG9uZyAqZnBpeGVsLCBsb25nICpscGl4ZWwsIGxvbmcgKmFycmF5LCBpbnQg KnN0YXR1cyk7CmludCBmZnBzc3VrKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5h eGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwg dW5zaWduZWQgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwc3NrKGZpdHNmaWxlICpm cHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25n ICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgaW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZw c3NlKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywK ICAgICAgICAgICBsb25nICpmcGl4ZWwsIGxvbmcgKmxwaXhlbCwgZmxvYXQgKmFycmF5LCBpbnQg KnN0YXR1cyk7CmludCBmZnBzc2QoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgbmF4 aXMsIGxvbmcgKm5heGVzLAogICAgICAgICAgIGxvbmcgKmZwaXhlbCwgbG9uZyAqbHBpeGVsLCBk b3VibGUgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBzc2pqKGZpdHNmaWxlICpmcHRyLCBs b25nIGdyb3VwLCBsb25nIG5heGlzLCBsb25nICpuYXhlcywKICAgICAgICAgICBsb25nICpmcGl4 ZWwsIGxvbmcgKmxwaXhlbCwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7CgppbnQgZmZw Z3BiKGZpdHNmaWxlICpmcHRyLCBsb25nIGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAg ICBsb25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZw Z3B1aShmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAg ICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBm ZnBncGkoZml0c2ZpbGUgKmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAg ICAgIGxvbmcgbmVsZW0sIHNob3J0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwZ3B1aihm aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u ZyBuZWxlbSwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwaihm aXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9u ZyBuZWxlbSwgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwdWsoZml0c2ZpbGUg KmZwdHIsIGxvbmcgZ3JvdXAsIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0s IHVuc2lnbmVkIGludCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwayhmaXRzZmlsZSAq ZnB0ciwgbG9uZyBncm91cCwgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg aW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwZ3BlKGZpdHNmaWxlICpmcHRyLCBsb25n IGdyb3VwLCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBmbG9hdCAqYXJy YXksIGludCAqc3RhdHVzKTsKaW50IGZmcGdwZChmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwg bG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50 ICpzdGF0dXMpOwppbnQgZmZwZ3BqaihmaXRzZmlsZSAqZnB0ciwgbG9uZyBncm91cCwgbG9uZyBm aXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0 YXR1cyk7CgoKaW50IGZpdHNfaXRlcl9zZXRfYnlfbmFtZShpdGVyYXRvckNvbCAqY29sLCBmaXRz ZmlsZSAqZnB0ciwgY2hhciAqY29sbmFtZSwKICAgICAgICAgIGludCBkYXRhdHlwZSwgaW50IGlv dHlwZSk7CmludCBmaXRzX2l0ZXJfc2V0X2J5X251bShpdGVyYXRvckNvbCAqY29sLCBmaXRzZmls ZSAqZnB0ciwgaW50IGNvbG51bSwKICAgICAgICAgIGludCBkYXRhdHlwZSwgaW50IGlvdHlwZSk7 CmludCBmaXRzX2l0ZXJfc2V0X2ZpbGUoaXRlcmF0b3JDb2wgKmNvbCwgZml0c2ZpbGUgKmZwdHIp OwppbnQgZml0c19pdGVyX3NldF9jb2xuYW1lKGl0ZXJhdG9yQ29sICpjb2wsIGNoYXIgKmNvbG5h bWUpOwppbnQgZml0c19pdGVyX3NldF9jb2xudW0oaXRlcmF0b3JDb2wgKmNvbCwgaW50IGNvbG51 bSk7CmludCBmaXRzX2l0ZXJfc2V0X2RhdGF0eXBlKGl0ZXJhdG9yQ29sICpjb2wsIGludCBkYXRh dHlwZSk7CmludCBmaXRzX2l0ZXJfc2V0X2lvdHlwZShpdGVyYXRvckNvbCAqY29sLCBpbnQgaW90 eXBlKTsKCmZpdHNmaWxlICogZml0c19pdGVyX2dldF9maWxlKGl0ZXJhdG9yQ29sICpjb2wpOwpj aGFyICogZml0c19pdGVyX2dldF9jb2xuYW1lKGl0ZXJhdG9yQ29sICpjb2wpOwppbnQgZml0c19p dGVyX2dldF9jb2xudW0oaXRlcmF0b3JDb2wgKmNvbCk7CmludCBmaXRzX2l0ZXJfZ2V0X2RhdGF0 eXBlKGl0ZXJhdG9yQ29sICpjb2wpOwppbnQgZml0c19pdGVyX2dldF9pb3R5cGUoaXRlcmF0b3JD b2wgKmNvbCk7CnZvaWQgKiBmaXRzX2l0ZXJfZ2V0X2FycmF5KGl0ZXJhdG9yQ29sICpjb2wpOwps b25nIGZpdHNfaXRlcl9nZXRfdGxtaW4oaXRlcmF0b3JDb2wgKmNvbCk7CmxvbmcgZml0c19pdGVy X2dldF90bG1heChpdGVyYXRvckNvbCAqY29sKTsKbG9uZyBmaXRzX2l0ZXJfZ2V0X3JlcGVhdChp dGVyYXRvckNvbCAqY29sKTsKY2hhciAqIGZpdHNfaXRlcl9nZXRfdHVuaXQoaXRlcmF0b3JDb2wg KmNvbCk7CmNoYXIgKiBmaXRzX2l0ZXJfZ2V0X3RkaXNwKGl0ZXJhdG9yQ29sICpjb2wpOwoKaW50 IGZmaXRlcihpbnQgbmNvbHMsIGl0ZXJhdG9yQ29sICpkYXRhLCBsb25nIG9mZnNldCwgbG9uZyBu UGVyTG9vcCwKICAgICAgICAgICBpbnQgKCp3b3JrRm4pKCBsb25nIHRvdGFsbiwgbG9uZyBvZmZz ZXQsIGxvbmcgZmlyc3RuLAogICAgICAgICAgICAgbG9uZyBudmFsdWVzLCBpbnQgbmFycmF5cywg aXRlcmF0b3JDb2wgKmRhdGEsIHZvaWQgKnVzZXJQb2ludGVyKSwKICAgICAgICAgICB2b2lkICp1 c2VyUG9pbnRlciwgaW50ICpzdGF0dXMpOwoKCmludCBmZnBjbChmaXRzZmlsZSAqZnB0ciwgaW50 IGRhdGF0eXBlLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LAogICAgICAgICAgbG9uZyBmaXJz dGVsZW0sIGxvbmcgbmVsZW0sIHZvaWQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbHMo Zml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVt LAogICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIgKiphcnJheSwgaW50ICpzdGF0dXMpOwppbnQg ZmZwY2xsKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBjaGFyICphcnJheSwgaW50ICpzdGF0dXMp OwppbnQgZmZwY2xiKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBs b25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBjaGFyICphcnJh eSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2x1aShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwg bG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgdW5z aWduZWQgc2hvcnQgKmFycmF5LCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbGkoZml0c2ZpbGUgKmZw dHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAg IGxvbmcgbmVsZW0sIHNob3J0ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2x1aihmaXRz ZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAg ICAgICAgICAgbG9uZyBuZWxlbSwgdW5zaWduZWQgbG9uZyAqYXJyYXksIGludCAqc3RhdHVzKTsK aW50IGZmcGNsaihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9u ZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgbG9uZyAqYXJyYXksIGludCAqc3Rh dHVzKTsKaW50IGZmcGNsdWsoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ry b3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVuc2lnbmVkIGludCAq YXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNsayhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51 bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwg aW50ICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xlKGZpdHNmaWxlICpmcHRyLCBpbnQg Y29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5l bGVtLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNsZChmaXRzZmlsZSAqZnB0 ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAg bG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xjKGZpdHNm aWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAg ICAgICAgICBsb25nIG5lbGVtLCBmbG9hdCAqYXJyYXksIGludCAqc3RhdHVzKTsKaW50IGZmcGNs bShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVs ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZG91YmxlICphcnJheSwgaW50ICpzdGF0dXMpOwpp bnQgZmZwY2x1KGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25n IGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKnN0YXR1cyk7CmludCBmZnBj bHgoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZnJvdywgbG9uZyBmYml0LCBsb25n IG5iaXQsCiAgICAgICAgICAgIGNoYXIgKmxhcnJheSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY2xq aihmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywgbG9uZyBmaXJzdGVs ZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgTE9OR0xPTkcgKmFycmF5LCBpbnQgKnN0YXR1cyk7 CgppbnQgZmZwY24oZml0c2ZpbGUgKmZwdHIsIGludCBkYXRhdHlwZSwgaW50IGNvbG51bSwgbG9u ZyBmaXJzdHJvdywKICAgICAgICAgIGxvbmcgZmlyc3RlbGVtLCBsb25nIG5lbGVtLCB2b2lkICph cnJheSwgdm9pZCAqbnVsdmFsLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbnMoIGZpdHNmaWxlICpm cHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAg ICAgbG9uZyBuZWxlbSwgY2hhciAqKmFycmF5LCBjaGFyICpudWx2YWx1ZSwgaW50ICpzdGF0dXMp OwppbnQgZmZwY25sKCBmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJvdywg bG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgIGxvbmcgbmVsZW0sIGNoYXIgKmFycmF5LCBjaGFy IG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbmIoZml0c2ZpbGUgKmZwdHIsIGludCBj b2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVs ZW0sIHVuc2lnbmVkIGNoYXIgKmFycmF5LCB1bnNpZ25lZCBjaGFyIG51bHZhbHVlLAogICAgICAg ICAgIGludCAqc3RhdHVzKTsKaW50IGZmcGNudWkoZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0s IGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIHVu c2lnbmVkIHNob3J0ICphcnJheSwgdW5zaWduZWQgc2hvcnQgbnVsdmFsdWUsCiAgICAgICAgICAg aW50ICpzdGF0dXMpOwppbnQgZmZwY25pKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25n IGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCBzaG9ydCAq YXJyYXksIHNob3J0IG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBmZnBjbnVqKGZpdHNmaWxl ICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAg ICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBsb25nICphcnJheSwgdW5zaWduZWQgbG9uZyBudWx2 YWx1ZSwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZnBjbmooZml0c2ZpbGUgKmZwdHIs IGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcgZmlyc3RlbGVtLAogICAgICAgICAgIGxv bmcgbmVsZW0sIGxvbmcgKmFycmF5LCBsb25nIG51bHZhbHVlLCBpbnQgKnN0YXR1cyk7CmludCBm ZnBjbnVrKGZpdHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZp cnN0ZWxlbSwKICAgICAgICAgICBsb25nIG5lbGVtLCB1bnNpZ25lZCBpbnQgKmFycmF5LCB1bnNp Z25lZCBpbnQgbnVsdmFsdWUsCiAgICAgICAgICAgaW50ICpzdGF0dXMpOwppbnQgZmZwY25rKGZp dHNmaWxlICpmcHRyLCBpbnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwK ICAgICAgICAgICBsb25nIG5lbGVtLCBpbnQgKmFycmF5LCBpbnQgbnVsdmFsdWUsIGludCAqc3Rh dHVzKTsKaW50IGZmcGNuZShmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBmaXJzdHJv dywgbG9uZyBmaXJzdGVsZW0sCiAgICAgICAgICAgbG9uZyBuZWxlbSwgZmxvYXQgKmFycmF5LCBm bG9hdCBudWx2YWx1ZSwgaW50ICpzdGF0dXMpOwppbnQgZmZwY25kKGZpdHNmaWxlICpmcHRyLCBp bnQgY29sbnVtLCBsb25nIGZpcnN0cm93LCBsb25nIGZpcnN0ZWxlbSwKICAgICAgICAgICBsb25n IG5lbGVtLCBkb3VibGUgKmFycmF5LCBkb3VibGUgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsKaW50 IGZmcGNuamooZml0c2ZpbGUgKmZwdHIsIGludCBjb2xudW0sIGxvbmcgZmlyc3Ryb3csIGxvbmcg Zmlyc3RlbGVtLAogICAgICAgICAgIGxvbmcgbmVsZW0sIExPTkdMT05HICphcnJheSwgTE9OR0xP TkcgbnVsdmFsdWUsIGludCAqc3RhdHVzKTsKCmludCBmZnBkZXMoZml0c2ZpbGUgKmZwdHIsIGlu dCBjb2xudW0sIGxvbmcgcm93bnVtLCBsb25nIGxlbmd0aCwKICAgICAgICAgICBsb25nIGhlYXBh ZGRyLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZwdGJiKGZpdHNmaWxlICpmcHRyLCBsb25nIGZpcnN0 cm93LCBsb25nIGZpcnN0Y2hhciwgbG9uZyBuY2hhcnMsCiAgICAgICAgICAgdW5zaWduZWQgY2hh ciAqdmFsdWVzLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZpcm93KGZpdHNmaWxlICpmcHRyLCBsb25n IGZpcnN0cm93LCBsb25nIG5yb3dzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRyb3coZml0c2ZpbGUg KmZwdHIsIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsIGludCAqc3RhdHVzKTsKaW50IGZmZHJy ZyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqcmFuZ2VzLCBpbnQgKnN0YXR1cyk7CmludCBmZmRyd3Mo Zml0c2ZpbGUgKmZwdHIsIGxvbmcgKnJvd251bSwgbG9uZyBucm93cywgaW50ICpzdGF0dXMpOwpp bnQgZmZpY29sKGZpdHNmaWxlICpmcHRyLCBpbnQgbnVtY29sLCBjaGFyICp0dHlwZSwgY2hhciAq dGZvcm0sIGludCAqc3RhdHVzKTsKaW50IGZmaWNscyhmaXRzZmlsZSAqZnB0ciwgaW50IGZpcnN0 Y29sLCBpbnQgbmNvbHMsIGNoYXIgKip0dHlwZSwKICAgICAgICAgICBjaGFyICoqdGZvcm0sIGlu dCAqc3RhdHVzKTsKaW50IGZmbXZlYyhmaXRzZmlsZSAqZnB0ciwgaW50IGNvbG51bSwgbG9uZyBu ZXd2ZWNsZW4sIGludCAqc3RhdHVzKTsKaW50IGZmZGNvbChmaXRzZmlsZSAqZnB0ciwgaW50IG51 bWNvbCwgaW50ICpzdGF0dXMpOwppbnQgZmZjcGNsKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxl ICpvdXRmcHRyLCBpbnQgaW5jb2wsIGludCBvdXRjb2wsCiAgICAgICAgICAgaW50IGNyZWF0ZV9j b2wsIGludCAqc3RhdHVzKTsKCgppbnQgZmZnaWNzKGZpdHNmaWxlICpmcHRyLCBkb3VibGUgKnhy dmFsLCBkb3VibGUgKnlydmFsLCBkb3VibGUgKnhycGl4LAogICAgICAgICAgIGRvdWJsZSAqeXJw aXgsIGRvdWJsZSAqeGluYywgZG91YmxlICp5aW5jLCBkb3VibGUgKnJvdCwKICAgICAgICAgICBj aGFyICp0eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0Y3MoZml0c2ZpbGUgKmZwdHIsIGludCB4 Y29sLCBpbnQgeWNvbCwgZG91YmxlICp4cnZhbCwKICAgICAgICAgICBkb3VibGUgKnlydmFsLCBk b3VibGUgKnhycGl4LCBkb3VibGUgKnlycGl4LCBkb3VibGUgKnhpbmMsCiAgICAgICAgICAgZG91 YmxlICp5aW5jLCBkb3VibGUgKnJvdCwgY2hhciAqdHlwZSwgaW50ICpzdGF0dXMpOwppbnQgZmZ3 bGRwKGRvdWJsZSB4cGl4LCBkb3VibGUgeXBpeCwgZG91YmxlIHhyZWYsIGRvdWJsZSB5cmVmLAog ICAgICAgICAgIGRvdWJsZSB4cmVmcGl4LCBkb3VibGUgeXJlZnBpeCwgZG91YmxlIHhpbmMsIGRv dWJsZSB5aW5jLAogICAgICAgICAgIGRvdWJsZSByb3QsIGNoYXIgKnR5cGUsIGRvdWJsZSAqeHBv cywgZG91YmxlICp5cG9zLCBpbnQgKnN0YXR1cyk7CmludCBmZnh5cHgoZG91YmxlIHhwb3MsIGRv dWJsZSB5cG9zLCBkb3VibGUgeHJlZiwgZG91YmxlIHlyZWYsCiAgICAgICAgICAgZG91YmxlIHhy ZWZwaXgsIGRvdWJsZSB5cmVmcGl4LCBkb3VibGUgeGluYywgZG91YmxlIHlpbmMsCiAgICAgICAg ICAgZG91YmxlIHJvdCwgY2hhciAqdHlwZSwgZG91YmxlICp4cGl4LCBkb3VibGUgKnlwaXgsIGlu dCAqc3RhdHVzKTsKCgppbnQgZmZnaXdjcyhmaXRzZmlsZSAqZnB0ciwgY2hhciAqKmhlYWRlciwg aW50ICpzdGF0dXMpOwppbnQgZmZndHdjcyhmaXRzZmlsZSAqZnB0ciwgaW50IHhjb2wsIGludCB5 Y29sLCBjaGFyICoqaGVhZGVyLCBpbnQgKnN0YXR1cyk7CgoKaW50IGZmdGV4cCggZml0c2ZpbGUg KmZwdHIsIGNoYXIgKmV4cHIsIGludCBtYXhkaW0sCiAgICAgICAgICAgIGludCAqZGF0YXR5cGUs IGxvbmcgKm5lbGVtLCBpbnQgKm5heGlzLAogICAgICAgICAgICBsb25nICpuYXhlcywgaW50ICpz dGF0dXMgKTsKCmludCBmZmZyb3coIGZpdHNmaWxlICppbmZwdHIsIGNoYXIgKmV4cHIsCiAgICAg ICAgICAgIGxvbmcgZmlyc3Ryb3csIGxvbmcgbnJvd3MsCiAgICAgICAgICAgIGxvbmcgKm5fZ29v ZF9yb3dzLCBjaGFyICpyb3dfc3RhdHVzLCBpbnQgKnN0YXR1cyk7CgppbnQgZmZmZnJ3KCBmaXRz ZmlsZSAqZnB0ciwgY2hhciAqZXhwciwgbG9uZyAqcm93bnVtLCBpbnQgKnN0YXR1cyk7CgppbnQg ZmZmcndjKCBmaXRzZmlsZSAqZnB0ciwgY2hhciAqZXhwciwgY2hhciAqdGltZUNvbCwKICAgICAg ICAgICAgY2hhciAqcGFyQ29sLCBjaGFyICp2YWxDb2wsIGxvbmcgbnRpbWVzLAogICAgICAgICAg ICBkb3VibGUgKnRpbWVzLCBjaGFyICp0aW1lX3N0YXR1cywgaW50ICpzdGF0dXMgKTsKCmludCBm ZnNyb3coIGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBjaGFyICpleHByLAog ICAgICAgICAgICBpbnQgKnN0YXR1cyk7CgppbnQgZmZjcm93KCBmaXRzZmlsZSAqZnB0ciwgaW50 IGRhdGF0eXBlLCBjaGFyICpleHByLAogICAgICAgICAgICBsb25nIGZpcnN0cm93LCBsb25nIG5l bGVtZW50cywgdm9pZCAqbnVsdmFsLAogICAgICAgICAgICB2b2lkICphcnJheSwgaW50ICphbnlu dWwsIGludCAqc3RhdHVzICk7CgppbnQgZmZjYWxjX3JuZyggZml0c2ZpbGUgKmluZnB0ciwgY2hh ciAqZXhwciwgZml0c2ZpbGUgKm91dGZwdHIsCiAgICAgICAgICAgICAgIGNoYXIgKnBhck5hbWUs IGNoYXIgKnBhckluZm8sIGludCBuUm5ncywKICAgICAgICAgICAgICAgICBsb25nICpzdGFydCwg bG9uZyAqZW5kLCBpbnQgKnN0YXR1cyApOwoKaW50IGZmY2FsYyggZml0c2ZpbGUgKmluZnB0ciwg Y2hhciAqZXhwciwgZml0c2ZpbGUgKm91dGZwdHIsCiAgICAgICAgICAgIGNoYXIgKnBhck5hbWUs IGNoYXIgKnBhckluZm8sIGludCAqc3RhdHVzICk7CgoKCgppbnQgZmZoaXN0KGZpdHNmaWxlICoq ZnB0ciwgY2hhciAqb3V0ZmlsZSwgaW50IGltYWdldHlwZSwgaW50IG5heGlzLAogICAgICAgICAg IGNoYXIgY29sbmFtZVs0XVs3MV0sCiAgICAgICAgICAgZG91YmxlICptaW5pbiwgZG91YmxlICpt YXhpbiwgZG91YmxlICpiaW5zaXplaW4sCiAgICAgICAgICAgY2hhciBtaW5uYW1lWzRdWzcxXSwg Y2hhciBtYXhuYW1lWzRdWzcxXSwKICAgICAgICAgICBjaGFyIGJpbm5hbWVbNF1bNzFdLAogICAg ICAgICAgIGRvdWJsZSB3ZWlnaHRpbiwgY2hhciB3dGNvbFs3MV0sCiAgICAgICAgICAgaW50IHJl Y2lwLCBjaGFyICpyb3dzZWxlY3QsIGludCAqc3RhdHVzKTsKCmludCBmaXRzX3NlbGVjdF9pbWFn ZV9zZWN0aW9uKGZpdHNmaWxlICoqZnB0ciwgY2hhciAqb3V0ZmlsZSwKICAgICAgICAgICBjaGFy ICppbWFnZXNlY3Rpb24sIGludCAqc3RhdHVzKTsKaW50IGZpdHNfc2VsZWN0X3NlY3Rpb24oIGZp dHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLAogICAgICAgICAgIGNoYXIgKmltYWdl c2VjdGlvbiwgaW50ICpzdGF0dXMpOwoKCgppbnQgZmZndGNyKGZpdHNmaWxlICpmcHRyLCBjaGFy ICpncnBuYW1lLCBpbnQgZ3JvdXB0eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0aXMoZml0c2Zp bGUgKmZwdHIsIGNoYXIgKmdycG5hbWUsIGludCBncm91cHR5cGUsIGludCAqc3RhdHVzKTsKaW50 IGZmZ3RjaChmaXRzZmlsZSAqZ2ZwdHIsIGludCBncm91cHR5cGUsIGludCAqc3RhdHVzKTsKaW50 IGZmZ3RybShmaXRzZmlsZSAqZ2ZwdHIsIGludCBybW9wdCwgaW50ICpzdGF0dXMpOwppbnQgZmZn dGNwKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRmcHRyLCBpbnQgY3BvcHQsIGludCAq c3RhdHVzKTsKaW50IGZmZ3RtZyhmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwg aW50IG1nb3B0LCBpbnQgKnN0YXR1cyk7CmludCBmZmd0Y20oZml0c2ZpbGUgKmdmcHRyLCBpbnQg Y21vcHQsIGludCAqc3RhdHVzKTsKaW50IGZmZ3R2ZihmaXRzZmlsZSAqZ2ZwdHIsIGxvbmcgKmZp cnN0ZmFpbGVkLCBpbnQgKnN0YXR1cyk7CmludCBmZmd0b3AoZml0c2ZpbGUgKm1mcHRyLGludCBn cm91cCxmaXRzZmlsZSAqKmdmcHRyLGludCAqc3RhdHVzKTsKaW50IGZmZ3RhbShmaXRzZmlsZSAq Z2ZwdHIsIGZpdHNmaWxlICptZnB0ciwgaW50IGhkdXBvcywgaW50ICpzdGF0dXMpOwppbnQgZmZn dG5tKGZpdHNmaWxlICpnZnB0ciwgbG9uZyAqbm1lbWJlcnMsIGludCAqc3RhdHVzKTsKaW50IGZm Z21uZyhmaXRzZmlsZSAqbWZwdHIsIGxvbmcgKm5tZW1iZXJzLCBpbnQgKnN0YXR1cyk7CmludCBm Zmdtb3AoZml0c2ZpbGUgKmdmcHRyLCBsb25nIG1lbWJlciwgZml0c2ZpbGUgKiptZnB0ciwgaW50 ICpzdGF0dXMpOwppbnQgZmZnbWNwKGZpdHNmaWxlICpnZnB0ciwgZml0c2ZpbGUgKm1mcHRyLCBs b25nIG1lbWJlciwgaW50IGNwb3B0LAogICAgICAgICAgIGludCAqc3RhdHVzKTsKaW50IGZmZ210 ZihmaXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgbG9uZyBtZW1iZXIsIGludCB0 Zm9wdCwKICAgICAgICAgICBpbnQgKnN0YXR1cyk7CmludCBmZmdtcm0oZml0c2ZpbGUgKmZwdHIs IGxvbmcgbWVtYmVyLCBpbnQgcm1vcHQsIGludCAqc3RhdHVzKTsKCgoKaW50IGZpdHNfZXhlY3V0 ZV90ZW1wbGF0ZShmaXRzZmlsZSAqZmYsIGNoYXIgKm5ncF90ZW1wbGF0ZSwgaW50ICpzdGF0dXMp OwoKCgppbnQgZml0c19zZXRfY29tcHJlc3Npb25fdHlwZShmaXRzZmlsZSAqZnB0ciwgaW50IGN0 eXBlLCBpbnQgKnN0YXR1cyk7CmludCBmaXRzX3NldF90aWxlX2RpbShmaXRzZmlsZSAqZnB0ciwg aW50IG5kaW0sIGxvbmcgKmRpbXMsIGludCAqc3RhdHVzKTsKaW50IGZpdHNfc2V0X25vaXNlX2Jp dHMoZml0c2ZpbGUgKmZwdHIsIGludCBub2lzZWJpdHMsIGludCAqc3RhdHVzKTsKCmludCBmaXRz X2dldF9jb21wcmVzc2lvbl90eXBlKGZpdHNmaWxlICpmcHRyLCBpbnQgKmN0eXBlLCBpbnQgKnN0 YXR1cyk7CmludCBmaXRzX2dldF90aWxlX2RpbShmaXRzZmlsZSAqZnB0ciwgaW50IG5kaW0sIGxv bmcgKmRpbXMsIGludCAqc3RhdHVzKTsKaW50IGZpdHNfZ2V0X25vaXNlX2JpdHMoZml0c2ZpbGUg KmZwdHIsIGludCAqbm9pc2ViaXRzLCBpbnQgKnN0YXR1cyk7CgppbnQgZml0c19jb21wX2ltZyhm aXRzZmlsZSAqaW5mcHRyLCBmaXRzZmlsZSAqb3V0ZnB0ciwgaW50IGNvbXByZXNzX3R5cGUsCiAg ICAgICAgIGxvbmcgKnRpbGVzaXplLCBpbnQgcGFybTEsIGludCBwYXJtMiwgaW50ICpzdGF0dXMp OwppbnQgZml0c19pc19jb21wcmVzc2VkX2ltYWdlKGZpdHNmaWxlICpmcHRyLCBpbnQgKnN0YXR1 cyk7CmludCBmaXRzX2RlY29tcF9pbWcgKGZpdHNmaWxlICppbmZwdHIsIGZpdHNmaWxlICpvdXRm cHRyLCBpbnQgKnN0YXR1cyk7CgoKCgp9CiMgMjkgIkNDZml0cy5oIiAyCgojIDEgIi91c3IvaW5j bHVkZS9zeXMvdHlwZXMuaCIgMSAzCiMgMzEgIkNDZml0cy5oIiAyCgoKCgoKCiMgMSAiL2hvbWUv ZG9ybWFuL2NwcC9pbmNsdWRlL2xvbmduYW0uaCIgMQojIDM4ICJDQ2ZpdHMuaCIgMgoKCgpuYW1l c3BhY2UgQ0NmaXRzIHsKCiAgc3RhdGljIGNvbnN0IGludCBCSVRQSVggPSAtMzI7CiAgc3RhdGlj IGNvbnN0IGludCBOQVhJUyA9IDI7CiAgc3RhdGljIGNvbnN0IGludCBNQVhESU0gPSA5OTsKIyA1 NyAiQ0NmaXRzLmgiCiAgdHlwZWRlZiBlbnVtIHtSZWFkPTAsV3JpdGU9MX0gUldtb2RlOwojIDcx ICJDQ2ZpdHMuaCIKICB0eXBlZGVmIGVudW0ge1RudWxsLCBUYml0ID0gMSwgVGJ5dGUgPSAxMSwg VGxvZ2ljYWwgPSAxNCwgVHN0cmluZyA9IDE2LCBUdXNob3J0ID0gMjAsIFRzaG9ydCA9IDIxLFR1 aW50ID0gMzAsVGludCA9IDMxLCBUdWxvbmcgPSA0MCxUbG9uZyA9IDQxLCBUZmxvYXQgPSA0Miwg VGRvdWJsZSA9IDgyLCBUY29tcGxleCA9IDgzLCBUZGJsY29tcGxleD0xNjMsIFZUYml0PSAtMSwg VlRieXRlPS0xMSxWVGxvZ2ljYWw9LVRsb2dpY2FsLCBWVHVzaG9ydD0tMjAsVlRzaG9ydD0tMjEs VlR1aW50PS0zMCwgVlRpbnQ9LTMxLFZUdWxvbmc9LTQwLFZUbG9uZz0tNDEsVlRmbG9hdD0tNDIs VlRkb3VibGU9LTgyLFZUY29tcGxleD0tODMsVlRkYmxjb21wbGV4PS0xNjN9IFZhbHVlVHlwZTsK IyA4NSAiQ0NmaXRzLmgiCiAgdHlwZWRlZiBlbnVtIHtBbnlIZHU9LTEsIEltYWdlSGR1LCBBc2Np aVRibCwgQmluYXJ5VGJsfSBIZHVUeXBlOwojIDk5ICJDQ2ZpdHMuaCIKICB0eXBlZGVmIGVudW0g eyBJYnl0ZT04LAogIElzaG9ydCA9IDE2LAogIElsb25nID0gMzIsCiAgSWZsb2F0ID0gLTMyLAog IElkb3VibGUgPSAtNjQsCiAgSXVzaG9ydCA9IDIwLAogIEl1bG9uZyA9IDQwfSBJbWFnZVR5cGU7 CgoKCgp9CiMgMjcgIktleURhdGEuaCIgMgoKCgoKCgojIDEgIktleXdvcmQuaCIgMQojIDI2ICJL ZXl3b3JkLmgiCiMgMSAiQ0NmaXRzLmgiIDEKIyAyNyAiS2V5d29yZC5oIiAyCnVzaW5nIG5hbWVz cGFjZSBDQ2ZpdHM7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJpbmciIDEgMwoj IDM1ICJLZXl3b3JkLmgiIDIKCiMgMSAiRml0c0Vycm9yLmgiIDEKIyAyNiAiRml0c0Vycm9yLmgi CiMgMSAiL2hvbWUvZG9ybWFuL2NwcC9pbmNsdWRlL2ZpdHNpby5oIiAxCiMgMjcgIkZpdHNFcnJv ci5oIiAyCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9leGNlcHRpb24iIDEgMwojIDI4ICJGaXRz RXJyb3IuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDEgMwojIDMxICIv dXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9pb3N0cmVhbS5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9pb3N0cmVhbS5oIiAzCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgNDAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGRfaW9zdHJlYW0uaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9vc3Ry ZWFtLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2lvc3RyZWFtLmgi IDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfaXN0cmVhbS5oIiAxIDMKIyA0 MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9pb3N0cmVhbS5oIiAyIDMKCm5hbWVzcGFj ZSBzdGQKewogIGV4dGVybiBpc3RyZWFtIGNpbjsKICBleHRlcm4gb3N0cmVhbSBjb3V0OwogIGV4 dGVybiBvc3RyZWFtIGNlcnI7CiAgZXh0ZXJuIG9zdHJlYW0gY2xvZzsKCiAgZXh0ZXJuIHdpc3Ry ZWFtIHdjaW47CiAgZXh0ZXJuIHdvc3RyZWFtIHdjb3V0OwogIGV4dGVybiB3b3N0cmVhbSB3Y2Vy cjsKICBleHRlcm4gd29zdHJlYW0gd2Nsb2c7CgoKCiAgc3RhdGljIGlvc19iYXNlOjpJbml0IF9f aW9pbml0Owp9CiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvaW9zdHJlYW0iIDIgMwojIDI5ICJG aXRzRXJyb3IuaCIgMgojIDQxICJGaXRzRXJyb3IuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L3N0cmluZyIgMSAzCiMgNDIgIkZpdHNFcnJvci5oIiAyCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpu YW1lc3BhY2UgQ0NmaXRzIHsKIyAxMTYgIkZpdHNFcnJvci5oIgogIGNsYXNzIEZpdHNGYXRhbAog IHsKICAgIHB1YmxpYzoKCgogICAgICAgIEZpdHNGYXRhbCAoY29uc3Qgc3RyaW5nJiBkaWFnKTsK CiAgICBwcm90ZWN0ZWQ6CiAgICBwcml2YXRlOgogICAgcHJpdmF0ZToKICB9OwojIDEzNiAiRml0 c0Vycm9yLmgiCiAgY2xhc3MgRml0c0V4Y2VwdGlvbgogIHsKICAgIHB1YmxpYzoKCgogICAgICAg IEZpdHNFeGNlcHRpb24gKGNvbnN0IHN0cmluZyYgbXNnLCBib29sJiBzaWxlbnQpOwoKICAgIHBy b3RlY3RlZDoKICAgIHByaXZhdGU6CiAgICBwcml2YXRlOgogIH07CgoKCgoKCgogIGNsYXNzIEZp dHNFcnJvciA6IHB1YmxpYyBGaXRzRXhjZXB0aW9uCiAgewogICAgcHVibGljOgoKCiAgICAgICAg Rml0c0Vycm9yIChpbnQgZXJyb3JudW0sIGJvb2wgc2lsZW50ID0gdHJ1ZSk7CgogICAgcHJvdGVj dGVkOgogICAgcHJpdmF0ZToKCgoKICAgICAgICB2b2lkIHByaW50TXNnIChpbnQgZXJyb3IpOwoK ICAgIHByaXZhdGU6CiAgfTsKCgoKCgoKCn0KIyAzNyAiS2V5d29yZC5oIiAyCgpuYW1lc3BhY2Ug Q0NmaXRzIHsKICBjbGFzcyBIRFU7Cgp9CgoKCgoKdXNpbmcgc3RkOjpzdHJpbmc7CnVzaW5nIHN0 ZDo6b3N0cmVhbTsKCgoKbmFtZXNwYWNlIENDZml0cyB7CiMgMTg1ICJLZXl3b3JkLmgiCiAgY2xh c3MgS2V5d29yZAogIHsKCgoKICAgIHB1YmxpYzoKCgoKCgogICAgICBjbGFzcyBXcm9uZ0tleXdv cmRWYWx1ZVR5cGUgOiBwdWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGlj OgoKCiAgICAgICAgICAgIFdyb25nS2V5d29yZFZhbHVlVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFn LCBib29sIHNpbGVudCA9IHRydWUpOwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0 ZToKICAgICAgICBwcml2YXRlOgogICAgICB9OwoKCiAgICAgICAgS2V5d29yZChjb25zdCBLZXl3 b3JkICZyaWdodCk7CgoKCiAgICAgICAgS2V5d29yZCAoY29uc3Qgc3RyaW5nICZrZXluYW1lLCBW YWx1ZVR5cGUga2V5dHlwZSwgSERVKiBwLCBjb25zdCBzdHJpbmcgJmNvbW1lbnQgPSAiIik7CgoK ICAgICAgICB2aXJ0dWFsIH5LZXl3b3JkKCk7CgoKICAgICAgICBLZXl3b3JkICYgb3BlcmF0b3I9 KGNvbnN0IEtleXdvcmQgJnJpZ2h0KTsKCgogICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBL ZXl3b3JkICZyaWdodCkgY29uc3Q7CgogICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBLZXl3 b3JkICZyaWdodCkgY29uc3Q7CgoKCgogICAgICAgIHZpcnR1YWwgb3N0cmVhbSAmIHB1dCAob3N0 cmVhbSAmcykgY29uc3QgPSAwOwoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkICogY2xvbmUgKCkg Y29uc3QgPSAwOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIHdyaXRlICgpID0gMDsKCgoKCgogICAg ICAgIGNvbnN0IHN0ZDo6c3RyaW5nJiBuYW1lICgpIGNvbnN0OwoKCgogICAgICAgIGNvbnN0IHN0 ZDo6c3RyaW5nJiBjb21tZW50ICgpIGNvbnN0OwoKICAgIHB1YmxpYzoKCgogICAgICB0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KICAgICAgVCYgdmFsdWUoVCYgdmFsKSBjb25zdDsKCiAgICAgIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgogICAgICB2b2lkIHNldFZhbHVlKGNvbnN0IFQmIG5ld1ZhbHVlKTsK CiAgICBwcm90ZWN0ZWQ6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNvcHkgKGNvbnN0IEtleXdv cmQmIHJpZ2h0KTsKCgogICAgICAgIHZpcnR1YWwgYm9vbCBjb21wYXJlIChjb25zdCBLZXl3b3Jk ICZyaWdodCkgY29uc3Q7CgoKICAgICAgICBmaXRzZmlsZSogZml0c1BvaW50ZXIgKCkgY29uc3Q7 CgoKCgogICAgICAgIFZhbHVlVHlwZSBrZXl0eXBlICgpIGNvbnN0OwogICAgICAgIHZvaWQga2V5 dHlwZSAoVmFsdWVUeXBlIHZhbHVlKTsKCgoKCgogICAgICAgIGNvbnN0IEhEVSogcGFyZW50ICgp IGNvbnN0OwoKCgoKCiAgICBwcml2YXRlOgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVmFs dWVUeXBlIG1fa2V5dHlwZTsKCgoKCgoKICAgICAgICBIRFUqIG1fcGFyZW50OwoKCgoKICAgICAg ICBzdGQ6OnN0cmluZyBtX25hbWU7CgoKCgogICAgICAgIHN0ZDo6c3RyaW5nIG1fY29tbWVudDsK CgoKCiAgICAgIGZyaWVuZCBvc3RyZWFtICZvcGVyYXRvciA8PCAob3N0cmVhbSAmcywgY29uc3Qg S2V5d29yZCAmcmlnaHQpOwoKCiAgfTsKCgppbmxpbmUgb3N0cmVhbSYgb3BlcmF0b3IgPDwgKG9z dHJlYW0gJnMsIGNvbnN0IEtleXdvcmQgJnJpZ2h0KQp7CiAgIHJldHVybiByaWdodC5wdXQocyk7 Cn0KIyAzMzMgIktleXdvcmQuaCIKICBpbmxpbmUgVmFsdWVUeXBlIEtleXdvcmQ6OmtleXR5cGUg KCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fa2V5dHlwZTsKCiAgfQoKICBpbmxpbmUgdm9pZCBL ZXl3b3JkOjprZXl0eXBlIChWYWx1ZVR5cGUgdmFsdWUpCiAgewoKICAgIG1fa2V5dHlwZSA9IHZh bHVlOwoKICB9CgoKCiAgaW5saW5lIGNvbnN0IEhEVSogS2V5d29yZDo6cGFyZW50ICgpIGNvbnN0 CiAgewoKICAgIHJldHVybiBtX3BhcmVudDsKCiAgfQoKICBpbmxpbmUgY29uc3Qgc3RkOjpzdHJp bmcmIEtleXdvcmQ6Om5hbWUgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fbmFtZTsKCiAgfQoK ICBpbmxpbmUgY29uc3Qgc3RkOjpzdHJpbmcmIEtleXdvcmQ6OmNvbW1lbnQgKCkgY29uc3QKICB7 CgogICAgcmV0dXJuIG1fY29tbWVudDsKCiAgfQoKfQojIDM0ICJLZXlEYXRhLmgiIDIKCgoKCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9jb21wbGV4IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9jb21wbGV4IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jb21wbGV4 LmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMwoK IyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmln LmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAxIDMKIyAz NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2NwcF90eXBlX3RyYWl0cy5oIiAzCiMgNjIgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy9jcHBfdHlwZV90cmFpdHMuaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc192b2lkCiAgICB7CiAg ICAgIGVudW0KICAgICAgewogICAgICAgIF9NX3R5cGUgPSAwCiAgICAgIH07CiAgICB9OwoKICB0 ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc192b2lkPHZvaWQ+CiAgICB7CiAgICAgIGVudW0KICAg ICAgewogICAgICAgIF9NX3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyCiAgICB7CiAgICAgIGVudW0KICAg ICAgewogICAgICAgIF9NX3R5cGUgPSAwCiAgICAgIH07CiAgICB9OwoKCgoKICB0ZW1wbGF0ZTw+ CiAgICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGJvb2w+CiAgICB7CiAgICAgIGVudW0KICAgICAgewog ICAgICAgIF9NX3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1 Y3QgX19pc19pbnRlZ2VyPGNoYXI+CiAgICB7CiAgICAgIGVudW0KICAgICAgewogICAgICAgIF9N X3R5cGUgPSAxCiAgICAgIH07CiAgICB9OwoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgX19pc19p bnRlZ2VyPHNpZ25lZCBjaGFyPgogICAgewogICAgICBlbnVtCiAgICAgIHsKICAgICAgICBfTV90 eXBlID0gMQogICAgICB9OwogICAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVn ZXI8dW5zaWduZWQgY2hhcj4KICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAg ICB9OwogIH07CgoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjx3Y2hhcl90Pgog IHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCgogIHRlbXBs YXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPHNob3J0PgogIHsKICAgIGVudW0KICAgIHsKICAg ICAgX01fdHlwZSA9IDEKICAgIH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2lu dGVnZXI8dW5zaWduZWQgc2hvcnQ+CiAgewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0g MQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjxpbnQ+CiAg ewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0 ZTw+CiAgc3RydWN0IF9faXNfaW50ZWdlcjx1bnNpZ25lZCBpbnQ+CiAgewogICAgZW51bQogICAg ewogICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9f aXNfaW50ZWdlcjxsb25nPgogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDEKICAg IH07CiAgfTsKCiAgdGVtcGxhdGU8PgogIHN0cnVjdCBfX2lzX2ludGVnZXI8dW5zaWduZWQgbG9u Zz4KICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRl bXBsYXRlPD4KICBzdHJ1Y3QgX19pc19pbnRlZ2VyPGxvbmcgbG9uZz4KICB7CiAgICBlbnVtCiAg ICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBsYXRlPD4KICBzdHJ1Y3Qg X19pc19pbnRlZ2VyPHVuc2lnbmVkIGxvbmcgbG9uZz4KICB7CiAgICBlbnVtCiAgICB7CiAgICAg IF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBz dHJ1Y3QgX19pc19mbG9hdGluZwogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IDAK ICAgIH07CiAgfTsKCgogIHRlbXBsYXRlPD4KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxmbG9hdD4K ICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSAxCiAgICB9OwogIH07CgogIHRlbXBs YXRlPD4KICBzdHJ1Y3QgX19pc19mbG9hdGluZzxkb3VibGU+CiAgewogICAgZW51bQogICAgewog ICAgICBfTV90eXBlID0gMQogICAgfTsKICB9OwoKICB0ZW1wbGF0ZTw+CiAgc3RydWN0IF9faXNf ZmxvYXRpbmc8bG9uZyBkb3VibGU+CiAgewogICAgZW51bQogICAgewogICAgICBfTV90eXBlID0g MQogICAgfTsKICB9OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNf YXJpdGhtZXRpYwogIHsKICAgIGVudW0KICAgIHsKICAgICAgX01fdHlwZSA9IF9faXNfaW50ZWdl cjxfVHA+OjpfTV90eXBlIHx8IF9faXNfZmxvYXRpbmc8X1RwPjo6X01fdHlwZQogICAgfTsKICB9 OwoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNfZnVuZGFtZW50YWwK ICB7CiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3R5cGUgPSBfX2lzX3ZvaWQ8X1RwPjo6X01fdHlw ZSB8fCBfX2lzX2FyaXRobWV0aWM8X1RwPjo6X01fdHlwZQogICAgfTsKICB9OwoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9faXNfcG9kCiAgewogICAgZW51bQogICAgewog ICAgICBfTV90eXBlID0gX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlCiAgICB9OwogIH07 Cgp9CiMgNDQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY29tcGxleC5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDEgMwojIDM3ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NtYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMK IyAyOCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNy L2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVn ZV92YWwuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNiAiL3Vzci9p bmNsdWRlL2JpdHMvaHVnZV92YWwuaCIgMiAzCiMgMzQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg MwoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNsdWRl L21hdGguaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDEgMwojIDI5 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoZGVmLmgiIDMKdHlwZWRlZiBsb25nIGRvdWJsZSBmbG9h dF90OwoKdHlwZWRlZiBsb25nIGRvdWJsZSBkb3VibGVfdDsKIyA0MSAiL3Vzci9pbmNsdWRlL21h dGguaCIgMiAzCiMgNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv Yml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAzCmV4dGVybiBkb3VibGUgYWNvcyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19hY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXNpbiAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luIChkb3VibGUgX194KSB0aHJv dyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19hdGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUgYXRhbjIg KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fYXRhbjIg KGRvdWJsZSBfX3ksIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgY29zIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcyAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgpleHRlcm4gZG91YmxlIHNpbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSB0YW4gKGRv dWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuIChkb3VibGUgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwg ZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvcyAoZG91YmxlIF9f eCwgZG91YmxlICpfX3NpbngsIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGRvdWJsZSBjb3NoIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Nvc2gg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBzaW5oIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0 ZXJuIGRvdWJsZSB0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Rh bmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGFjb3NoIChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3NoIChkb3VibGUgX194KSB0aHJvdyAo KTsKCmV4dGVybiBkb3VibGUgYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9fYXNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo ZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuaCAoZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJsZSBleHAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fZXhwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJs ZSBleHAxMCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAxMCAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3BvdzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGRvdWJsZSBmcmV4cCAoZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93 ICgpOwoKCmV4dGVybiBkb3VibGUgbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xkZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVu dCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fbG9nIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91Ymxl IGxvZzEwIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIG1vZGYgKGRvdWJsZSBfX3gsIGRvdWJs ZSAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX21vZGYgKGRvdWJsZSBfX3gsIGRv dWJsZSAqX19pcHRyKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHBtMSAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBsb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3Vi bGUgX19sb2cxcCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2diIChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZ2IgKGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgoKZXh0ZXJuIGRvdWJsZSBleHAyIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2V4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg bG9nMiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cyIChkb3VibGUg X194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSBwb3cgKGRvdWJsZSBfX3gsIGRvdWJs ZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcG93IChkb3VibGUgX194LCBkb3VibGUg X195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBk b3VibGUgaHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91 YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGRvdWJsZSBjYnJ0IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2NicnQg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIGRvdWJsZSBmYWJzIChkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19mYWJzIChkb3VibGUgX194KSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBmbG9vciAoZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbG9vciAoZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBmbW9kIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Ztb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5pdGUgKGRvdWJsZSBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4g aW50IGlzaW5mIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKCgoKZXh0ZXJuIGRvdWJsZSBpbmZuYW4gKGlu dCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBk b3VibGUgX19pbmZuYW4gKGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRo cm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoK CmV4dGVybiBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKCgpleHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25z dCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoK CmV4dGVybiBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChk b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4 dGVybiBkb3VibGUgajEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5 MCAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgp OwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEg KGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJu IGRvdWJsZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJs ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChk b3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX3RnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRv dWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1w KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBk b3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJp YnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4 dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93 YXJkIChkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9f eCwgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9f eCwgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91Ymxl IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBf X3gsIGludCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBkb3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg KCk7CgoKCmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBk b3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQg KGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190 cnVuYyAoZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19x dW8pIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUg X195LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gp IHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBpbnQgX19scm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25n IGludCBsbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQg X19sbHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChk b3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRv dWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91 YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3Vi bGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJs ZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91Ymxl IF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChk b3VibGUgX192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgoKZXh0ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1h IChkb3VibGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKIyA2NCAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRz L21hdGhjYWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQg YXNpbmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBh dGFuMmYgKGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2Yg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9h dCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgp OwoKCgpleHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0 ICpfX2Nvc3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxv YXQgKl9fc2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBj b3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4 dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRh bmhmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0 IGFzaW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9h dCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVy biBmbG9hdCBleHBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRl cm4gZmxvYXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cx MGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9f eCwgaW50ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9h dCBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAo ZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhw ZiAoZmxvYXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxv Z2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkg dGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBt b2RmZiAoZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f bW9kZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9h dCBleHBtMWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0 ZXJuIGZsb2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cy ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9f eCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVy biBmbG9hdCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9faHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4g ZmxvYXQgY2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChm bG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkg dGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19j b25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRl cm4gaW50IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGludCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKCgoKCgpleHRlcm4gZmxvYXQgaW5mbmFuZiAoaW50IF9fZXJyb3IpIHRo cm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9faW5mbmFu ZiAoaW50IF9fZXJyb3IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpl eHRlcm4gZmxvYXQgZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fZHJlbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGZsb2F0IHNpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f c2lnbmlmaWNhbmRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IGNvcHlz aWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsgZXh0ZXJuIGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGZsb2F0IG5h bmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBmbG9hdCBfX25hbmYgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNuYW5mIChm bG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBpbnQgaXNuYW5mIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgo X19jb25zdF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGowZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19qMGYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGoxZiAoZmxvYXQpIHRo cm93ICgpOyBleHRlcm4gZmxvYXQgX19qMWYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0 IGpuZiAoaW50LCBmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2puZiAoaW50LCBmbG9h dCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MGYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9feTBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5MWYgKGZsb2F0KSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9feTFmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCB5 bmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX195bmYgKGludCwgZmxvYXQp IHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9hdCBlcmZmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX2VyZmYgKGZsb2F0KSB0aHJvdyAoKTsKZXh0ZXJuIGZsb2F0IGVyZmNmIChmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2VyZmNmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVy biBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWYg KGZsb2F0KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRnYW1tYWYgKGZsb2F0KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZs b2F0IGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19nYW1tYWYgKGZsb2F0 KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxnYW1tYWZfciAoZmxvYXQsIGludCAqX19z aWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xnYW1tYWZfciAoZmxvYXQsIGludCAq X19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCByaW50ZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGZsb2F0IG5leHRhZnRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHRhZnRlcmYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7 CgpleHRlcm4gZmxvYXQgbmV4dHRvd2FyZGYgKGZsb2F0IF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX25leHR0 b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gZmxvYXQgcmVtYWluZGVyZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yZW1haW5kZXJmIChmbG9hdCBfX3gs IGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9feCwg ZmxvYXQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJmIChmbG9hdCBfX3gsIGZs b2F0IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQgc2NhbGJuZiAoZmxvYXQgX194LCBp bnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQg X19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBpbnQgX19pbG9nYmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxv YXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGZsb2F0IG5lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBf X25lYXJieWludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCByb3VuZGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JvdW5kZiAoZmxvYXQgX194KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gZmxvYXQg cmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19yZW1xdW9mIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgaW50ICpfX3F1bykgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 IGV4dGVybiBsb25nIGludCBfX2xyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgbG9uZyBpbnQgbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9u ZyBpbnQgX19sbHJpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQg bHJvdW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGYgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9f eCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19mZGltZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19mbWF4ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgp OwoKCmV4dGVybiBmbG9hdCBmbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IF9fZnBjbGFzc2lmeWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19h dHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0ZiAoZmxvYXQg X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBmbG9hdCBmbWFmIChmbG9hdCBfX3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikg dGhyb3cgKCk7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDk5ICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEgMwojIDU0 ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gbG9uZyBkb3VibGUgYWNv c2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fjb3Ns IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGFzaW5sIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFubCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fYXRhbmwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJs ZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0 YW4ybCAobG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX3NpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUg dGFubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFu bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIHZvaWQgc2luY29zbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0 aHJvdyAoKTsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91 YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4g bG9uZyBkb3VibGUgY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX2Nvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcg ZG91YmxlIHNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19zaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs ZSB0YW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f dGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBh Y29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2Fj b3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2lu aGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2FzaW5o bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBhdGFuaGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbCAo bG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEwbCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwMTBsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHBvdzEwbCAobG9uZyBk b3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgZnJleHBsIChsb25nIGRv dWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2ZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQp IHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fZXhwb25lbnQpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxMGwgKGxvbmcgZG91 YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzEwbCAobG9uZyBkb3Vi bGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbW9kZmwgKGxvbmcgZG91Ymxl IF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X21vZGZsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOwoK CgpleHRlcm4gbG9uZyBkb3VibGUgZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGxvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fbG9nMXBsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBsb2dibCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRl cm4gbG9uZyBkb3VibGUgZXhwMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsb2cybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBs b25nIGRvdWJsZSBwb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Bvd2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3Vi bGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgc3FydGwgKGxvbmcgZG91Ymxl IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NxcnRsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgaHlwb3RsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2h5cG90 bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19jYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJu IGxvbmcgZG91YmxlIGNlaWxsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9u ZyBkb3VibGUgZmFic2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAo KF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mYWJzbCAobG9uZyBkb3VibGUgX194 KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGZsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZmxvb3JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBmbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbW9kbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19maW5p dGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgpleHRlcm4gaW50IGlzaW5mbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgZmluaXRlbCAobG9u ZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGluZm5hbmwgKGludCBfX2Vycm9yKSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2luZm5hbmwg KGludCBfX2Vycm9yKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2RyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBzaWduaWZpY2Fu ZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25p ZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBsb25nIGRvdWJs ZSBjb3B5c2lnbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2NvcHlzaWdu bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBuYW5sIChfX2NvbnN0IGNo YXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4g bG9uZyBkb3VibGUgX19uYW5sIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3Vi bGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRl cm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGRvdWJsZSBqMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJs ZSBqbmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19q bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChs b25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kwbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgeTFsIChsb25nIGRvdWJsZSkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBkb3VibGUpIHRocm93ICgpOwpleHRl cm4gbG9uZyBkb3VibGUgeW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxv bmcgZG91YmxlIF9feW5sIChpbnQsIGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g bG9uZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19lcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBlcmZj bCAobG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9u ZyBkb3VibGUpIHRocm93ICgpOwpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1hbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJsZSkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAo KTsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBnYW1tYWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoK CmV4dGVybiBsb25nIGRvdWJsZSBsZ2FtbWFsX3IgKGxvbmcgZG91YmxlLCBpbnQgKl9fc2lnbmdh bXApIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sZ2FtbWFsX3IgKGxvbmcgZG91Ymxl LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmlu dGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JpbnRs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBuZXh0YWZ0 ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0YWZ0ZXJsIChsb25n IGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHR0b3dhcmRsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykp OyBleHRlcm4gbG9uZyBkb3VibGUgX19uZXh0dG93YXJkbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJlbWFpbmRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtYWluZGVybCAobG9uZyBkb3Vi bGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUg c2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVy biBsb25nIGRvdWJsZSBfX3NjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24p IHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9f eCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxibmwgKGxvbmcg ZG91YmxlIF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JsIChsb25n IGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBf X3gpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibG5sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NjYWxi bG5sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBs b25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19uZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpl eHRlcm4gbG9uZyBkb3VibGUgcm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19yb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBsb25nIGRvdWJsZSB0cnVuY2wgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gbG9uZyBkb3VibGUgX190cnVuY2wgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIHJlbXF1b2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 LCBpbnQgKl9fcXVvKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVtcXVvbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOwoKCgoK CgpleHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRl cm4gbG9uZyBpbnQgX19scmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBs b25nIGxvbmcgaW50IGxscmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0 ZXJuIGxvbmcgaW50IGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGludCBfX2xyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBsb25nIGludCBfX2xscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRl cm4gbG9uZyBkb3VibGUgZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1heGwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZm1heGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpl eHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195 KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1pbmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlsIChs b25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0 X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJpdGwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93 ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3Vi bGUgZm1hbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9f eikgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3opIHRocm93ICgpOwojIDEwMCAiL3Vzci9p bmNsdWRlL21hdGguaCIgMiAzCiMgMTEzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiBp bnQgc2lnbmdhbTsKIyAxNTQgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKZW51bQogIHsKICAgIEZQ X05BTiwKCiAgICBGUF9JTkZJTklURSwKCiAgICBGUF9aRVJPLAoKICAgIEZQX1NVQk5PUk1BTCwK CiAgICBGUF9OT1JNQUwKCiAgfTsKIyAyNDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKdHlwZWRl ZiBlbnVtCnsKICBfSUVFRV8gPSAtMSwKICBfU1ZJRF8sCiAgX1hPUEVOXywKICBfUE9TSVhfLAog IF9JU09DXwp9IF9MSUJfVkVSU0lPTl9UWVBFOwoKCgoKZXh0ZXJuIF9MSUJfVkVSU0lPTl9UWVBF IF9MSUJfVkVSU0lPTjsKIyAyNjMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKc3RydWN0IF9fZXhj ZXB0aW9uCgoKCiAgewogICAgaW50IHR5cGU7CiAgICBjaGFyICpuYW1lOwogICAgZG91YmxlIGFy ZzE7CiAgICBkb3VibGUgYXJnMjsKICAgIGRvdWJsZSByZXR2YWw7CiAgfTsKCgpleHRlcm4gaW50 IG1hdGhlcnIgKHN0cnVjdCBfX2V4Y2VwdGlvbiAqX19leGMpIHRocm93ICgpOwojIDQxMSAiL3Vz ci9pbmNsdWRlL21hdGguaCIgMwp9CiMgNDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y21hdGguaCIgMiAzCiMgNjggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY21hdGguaCIg MwpuYW1lc3BhY2Ugc3RkCnsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIF9fY21hdGhf cG93ZXIoX1RwLCB1bnNpZ25lZCBpbnQpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5s aW5lIF9UcAogICAgX19jbWF0aF9hYnMoX1RwIF9feCkKICAgIHsKICAgICAgcmV0dXJuIF9feCA8 IF9UcCgpID8gLV9feCA6IF9feDsKICAgIH0KCiAgaW5saW5lIGZsb2F0CiAgYWJzKGZsb2F0IF9f eCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFic2YoX194KTsgfQoKICBpbmxpbmUgZG91YmxlCiAg YWJzKGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnMoX194KTsgfQoKICBpbmxp bmUgbG9uZyBkb3VibGUKICBhYnMobG9uZyBkb3VibGUgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9mYWJzbChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICBhY29zKGZsb2F0IF9feCkgeyByZXR1 cm4gOjphY29zZihfX3gpOyB9CgoKCgoKICB1c2luZyA6OmFjb3M7CgoKICBpbmxpbmUgbG9uZyBk b3VibGUKICBhY29zKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphY29zbChfX3gpOyB9CgoK CgoKCiAgaW5saW5lIGZsb2F0CiAgYXNpbihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194 KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYXNpbihs b25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6YXNpbmwoX194KTsgfQoKCgoKCgogIGlubGluZSBm bG9hdAogIGF0YW4oZmxvYXQgX194KSB7IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgogIHVz aW5nIDo6YXRhbjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4obG9uZyBkb3VibGUgX194 KSB7IHJldHVybiA6OmF0YW5sKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBhdGFuMihm bG9hdCBfX3ksIGZsb2F0IF9feCkgeyByZXR1cm4gOjphdGFuMmYoX195LCBfX3gpOyB9CgoKCgoK CiAgdXNpbmcgOjphdGFuMjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGF0YW4yKGxvbmcgZG91 YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmF0YW4ybChfX3ksIF9feCk7IH0K CgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgY2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY2Vp bChsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6Y2VpbGwoX194KTsgfQoKCgoKCiAgaW5saW5l IGZsb2F0CiAgY29zKGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zZihfX3gpOyB9 CgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3MobG9uZyBkb3VibGUg X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NsKF9feCk7IH0KCgogIGlubGluZSBmbG9hdAog IGNvc2goZmxvYXQgX194KSB7IHJldHVybiA6OmNvc2hmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6 Y29zaDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGNvc2gobG9uZyBkb3VibGUgX194KSB7IHJl dHVybiA6OmNvc2hsKF9feCk7IH0KIyAyMTcgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf Y21hdGguaCIgMwogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhw KHN0YXRpY19jYXN0PGRvdWJsZT4oX194KSk7IH0KCgogIHVzaW5nIDo6ZXhwOwoKCiAgaW5saW5l IGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpleHBsKF9feCk7 IH0KCgoKCgogIGlubGluZSBmbG9hdAogIGZhYnMoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVp bHRpbl9mYWJzZihfX3gpOyB9CgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNsKF9feCk7 IH0KCgogIGlubGluZSBmbG9hdAogIGZsb29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZs b29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194KTsgfQoKCgoKCgogIGlu bGluZSBmbG9hdAogIGZtb2QoZmxvYXQgX194LCBmbG9hdCBfX3kpIHsgcmV0dXJuIDo6Zm1vZGYo X194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgeyByZXR1cm4gOjpmbW9k bChfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBp bnQqIF9fZXhwKSB7IHJldHVybiA6OmZyZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCiAgdXNpbmcg OjpmcmV4cDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxvbmcgZG91YmxlIF9feCwg aW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7IH0KCgoKCgoKCiAgaW5s aW5lIGZsb2F0CiAgbGRleHAoZmxvYXQgX194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBm KF9feCwgX19leHApOyB9CgoKCgoKCiAgdXNpbmcgOjpsZGV4cDsKCgogIGlubGluZSBsb25nIGRv dWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7IHJldHVybiA6OmxkZXhw bChfX3gsIF9fZXhwKTsgfQoKCgoKCgoKICBpbmxpbmUgZmxvYXQKICBsb2coZmxvYXQgX194KSB7 IHJldHVybiA6OmxvZ2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2c7CgoKICBpbmxpbmUgbG9u ZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmxvZ2woX194KTsgfQoK CgoKCgogIGlubGluZSBmbG9hdAogIGxvZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYo X194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGxv ZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194KTsgfQoKCgoKCgogIGlu bGluZSBmbG9hdAogIG1vZGYoZmxvYXQgX194LCBmbG9hdCogX19pcHRyKSB7IHJldHVybiA6Om1v ZGZmKF9feCwgX19pcHRyKTsgfQojIDM2OCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9j bWF0aC5oIiAzCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgbW9kZihs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlKiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmwoX194 LCBfX2lwdHIpOyB9CiMgMzg0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NtYXRoLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bvd19oZWxw ZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAgICAgICA/ IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhfcG93ZXIo X194LCBfX24pOwogICAgfQoKCiAgaW5saW5lIGZsb2F0CiAgcG93KGZsb2F0IF9feCwgZmxvYXQg X195KSB7IHJldHVybiA6OnBvd2YoX194LCBfX3kpOyB9CgoKCgoKCiAgdXNpbmcgOjpwb3c7CgoK ICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZmxvYXQKICBw b3coZmxvYXQgX194LCBpbnQgX19uKQogIHsgcmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7 IH0KCiAgaW5saW5lIGRvdWJsZQogIHBvdyhkb3VibGUgX194LCBpbnQgX19pKQogIHsgcmV0dXJu IF9fcG93X2hlbHBlcihfX3gsIF9faSk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgcG93KGxv bmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194LCBfX24p OyB9CgogIGlubGluZSBmbG9hdAogIHNpbihmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGlu X3NpbmYoX194KTsgfQoKICB1c2luZyA6OnNpbjsKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgc2lu KGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9CgoKICBp bmxpbmUgZmxvYXQKICBzaW5oKGZsb2F0IF9feCkgeyByZXR1cm4gOjpzaW5oZihfX3gpOyB9CgoK CgoKICB1c2luZyA6OnNpbmg7CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxvbmcgZG91 YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICBpbmxpbmUgZmxvYXQKICBz cXJ0KGZsb2F0IF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc3FydGYoX194KTsgfQoKICB1c2lu ZyA6OnNxcnQ7CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUgX194KQog IHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgoKICBpbmxpbmUgZmxvYXQKICB0YW4o ZmxvYXQgX194KSB7IHJldHVybiA6OnRhbmYoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW47CgoK ICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRh bmwoX194KTsgfQoKCgoKCgogIGlubGluZSBmbG9hdAogIHRhbmgoZmxvYXQgX194KSB7IHJldHVy biA6OnRhbmhmKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6dGFuaDsKCgogIGlubGluZSBsb25nIGRv dWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7IH0KCgoK Cn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog ICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9m IChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNpemVvZiAo X19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2ZwY2xhc3Np ZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2Fw dHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZG91Ymxl KSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJldHVybiAo c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBzaXplb2Yg KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZsIChfX2Yp KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25h bihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19p c25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAo X19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVvZiAoX19m KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2YgKF9fZikg PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNzaWZ5bCAo X19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQK ICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9fZikgPT0g c2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVv ZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRlcihfVHAg X19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9f KF9fZjEpIF9feCA9IChfX2YxKTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19l eHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195 KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFz c2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNz aWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9f dikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3Yp ID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwg KF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX1RwIF9f ZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18o X19mMSkgX194ID0gKF9fZjEpOyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4 dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kp IF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNz aWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3Np ZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192 KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikg PT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAo X192KSkgPT0gRlBfTkFOOyB9KSkgJiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAg X19mMikgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBfX3ggPSAo X19mMSk7IF9fdHlwZW9mX18oX19mMikgX195ID0gKF9fZjIpOyAhKF9fZXh0ZW5zaW9uX18gKHsg X190eXBlb2ZfXyhfX3gpIF9fdSA9IChfX3gpOyBfX3R5cGVvZl9fKF9feSkgX192ID0gKF9feSk7 IChzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDog c2l6ZW9mIChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9f ZnBjbGFzc2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAo ZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRv dWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9O QU47IH0pKSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg ICB7IHJldHVybiAoX19leHRlbnNpb25fXyAoeyBfX3R5cGVvZl9fKF9fZjEpIF9feCA9IChfX2Yx KTsgX190eXBlb2ZfXyhfX2YyKSBfX3kgPSAoX19mMik7ICEoX19leHRlbnNpb25fXyAoeyBfX3R5 cGVvZl9fKF9feCkgX191ID0gKF9feCk7IF9fdHlwZW9mX18oX195KSBfX3YgPSAoX195KTsgKHNp emVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXpl b2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNs YXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9h dCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91Ymxl KSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsg fSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg aW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg IHsgcmV0dXJuIChfX2V4dGVuc2lvbl9fICh7IF9fdHlwZW9mX18oX19mMSkgX194ID0gKF9fZjEp OyBfX3R5cGVvZl9fKF9fZjIpIF9feSA9IChfX2YyKTsgIShfX2V4dGVuc2lvbl9fICh7IF9fdHlw ZW9mX18oX194KSBfX3UgPSAoX194KTsgX190eXBlb2ZfXyhfX3kpIF9fdiA9IChfX3kpOyAoc2l6 ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVv ZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xh c3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0 KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUp ID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9 KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfVHAgX19mMSwgX1Rw IF9fZjIpCiAgICAgeyByZXR1cm4gKF9fZXh0ZW5zaW9uX18gKHsgX190eXBlb2ZfXyhfX2YxKSBf X3UgPSAoX19mMSk7IF9fdHlwZW9mX18oX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChfX3Up ID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9 PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChf X3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBj bGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNs YXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0KfQoj IDU3NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9jbWF0aC5oIiAzCm5hbWVzcGFjZSBf X2dudV9jeHgKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgZnBjbGFzc2lm eShfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfZnBjbGFzc2lmeShfX2YpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNmaW5pdGUoX1RwIF9fZikgeyByZXR1cm4g X19jYXB0dXJlX2lzZmluaXRlKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW50CiAgICBpc2luZihfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNpbmYoX19mKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbmFuKF9UcCBfX2YpIHsgcmV0 dXJuIF9fY2FwdHVyZV9pc25hbihfX2YpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IGludAogICAgaXNub3JtYWwoX1RwIF9fZikgeyByZXR1cm4gX19jYXB0dXJlX2lzbm9ybWFsKF9f Zik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBzaWduYml0KF9UcCBf X2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9zaWduYml0KF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBfX2YyKSB7IHJldHVy biBfX2NhcHR1cmVfaXNncmVhdGVyKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGludAogICAgaXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg eyByZXR1cm4gX19jYXB0dXJlX2lzZ3JlYXRlcmVxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikg eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzcyhfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAg IHsgcmV0dXJuIF9fY2FwdHVyZV9pc2xlc3NlcXVhbChfX2YxLCBfX2YyKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf X2YyKQogICAgeyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX19mMSwgX19mMik7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc3Vub3JkZXJlZChfVHAgX19m MSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXN1bm9yZGVyZWQoX19mMSwgX19m Mik7IH0KfQoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgX19nbnVfY3h4OjpmcGNsYXNzaWZ5Owog IHVzaW5nIF9fZ251X2N4eDo6aXNmaW5pdGU7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2luZjsKICB1 c2luZyBfX2dudV9jeHg6OmlzbmFuOwogIHVzaW5nIF9fZ251X2N4eDo6aXNub3JtYWw7CiAgdXNp bmcgX19nbnVfY3h4OjpzaWduYml0OwogIHVzaW5nIF9fZ251X2N4eDo6aXNncmVhdGVyOwogIHVz aW5nIF9fZ251X2N4eDo6aXNncmVhdGVyZXF1YWw7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3M7 CiAgdXNpbmcgX19nbnVfY3h4Ojppc2xlc3NlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVz c2dyZWF0ZXI7CiAgdXNpbmcgX19nbnVfY3h4Ojppc3Vub3JkZXJlZDsKfQoKCgoKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2cr Ky12My9iaXRzL2NtYXRoLnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKICAgICAgICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVuc2lnbmVk IGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsKCiAgICAg IHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICogX194Owog ICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsKICAgICAg ICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjUxICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RkX2NtYXRoLmgiIDIgMwojIDQ1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X2NvbXBsZXguaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9zc3RyZWFt LmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2NvbXBsZXguaCIgMiAz CgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjbGFzcyBjb21wbGV4 OwogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxmbG9hdD47CiAgdGVtcGxhdGU8PiBjbGFzcyBj b21wbGV4PGRvdWJsZT47CiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGxvbmcgZG91YmxlPjsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBfVHAgYWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gX1RwIGFyZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IF9UcCBub3JtKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBjb25qKGNvbnN0IGNvbXBsZXg8X1Rw PiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHBvbGFyKGNvbnN0IF9U cCYsIGNvbnN0IF9UcCYpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4g Y29zKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxl eDxfVHA+IGNvc2goY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBjb21wbGV4PF9UcD4gZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gY29tcGxleDxfVHA+IGxvZyhjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBsb2cxMChjb25zdCBjb21wbGV4PF9UcD4mKTsK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgY29tcGxleDxf VHA+JiwgaW50KTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29u c3QgY29tcGxleDxfVHA+JiwgY29uc3QgX1RwJik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBj b21wbGV4PF9UcD4gcG93KGNvbnN0IGNvbXBsZXg8X1RwPiYsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IGNvbXBsZXg8X1RwPiBwb3coY29uc3QgX1RwJiwgY29uc3QgY29tcGxleDxf VHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9UcD4gc2luKGNvbnN0IGNv bXBsZXg8X1RwPiYpOwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gY29tcGxleDxfVHA+IHNpbmgo Y29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBjb21wbGV4PF9U cD4gc3FydChjb25zdCBjb21wbGV4PF9UcD4mKTsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNv bXBsZXg8X1RwPiB0YW4oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBjb21wbGV4PF9UcD4gdGFuaChjb25zdCBjb21wbGV4PF9UcD4mKTsKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBjb21wbGV4CiAgICB7CiAgICBwdWJsaWM6CiAgICAg IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICBjb21wbGV4KGNvbnN0IF9UcCYgPSBfVHAo KSwgY29uc3QgX1RwICYgPSBfVHAoKSk7CgoKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4K ICAgICAgICBjb21wbGV4KGNvbnN0IGNvbXBsZXg8X1VwPiYpOwoKICAgICAgX1RwIHJlYWwoKSBj b25zdDsKICAgICAgX1RwIGltYWcoKSBjb25zdDsKCiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0 b3I9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0oY29uc3QgX1Rw Jik7CiAgICAgIGNvbXBsZXg8X1RwPiYgb3BlcmF0b3ItPShjb25zdCBfVHAmKTsKICAgICAgY29t cGxleDxfVHA+JiBvcGVyYXRvcio9KGNvbnN0IF9UcCYpOwogICAgICBjb21wbGV4PF9UcD4mIG9w ZXJhdG9yLz0oY29uc3QgX1RwJik7CgoKCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVXA+CiAg ICAgICAgY29tcGxleDxfVHA+JiBvcGVyYXRvcj0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAg IHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKz0o Y29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAg ICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yLT0oY29uc3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBjb21wbGV4PF9UcD4mIG9wZXJhdG9yKj0oY29u c3QgY29tcGxleDxfVXA+Jik7CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgICAgICBj b21wbGV4PF9UcD4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVXA+Jik7CgogICAgcHJpdmF0 ZToKICAgICAgX1RwIF9NX3JlYWwsIF9NX2ltYWc7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBjb21wbGV4PF9UcD46OnJlYWwoKSBjb25zdCB7IHJl dHVybiBfTV9yZWFsOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAK ICAgIGNvbXBsZXg8X1RwPjo6aW1hZygpIGNvbnN0IHsgcmV0dXJuIF9NX2ltYWc7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgo Y29uc3QgX1RwJiBfX3IsIGNvbnN0IF9UcCYgX19pKQogICAgOiBfTV9yZWFsKF9fciksIF9NX2lt YWcoX19pKSB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX1VwPgogICAgaW5saW5lCiAgICBjb21wbGV4PF9UcD46OmNvbXBsZXgoY29uc3QgY29tcGxl eDxfVXA+JiBfX3opCiAgICA6IF9NX3JlYWwoX196LnJlYWwoKSksIF9NX2ltYWcoX196LmltYWco KSkgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNv bXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IF9UcCYgX190KQogICAgewogICAgIF9NX3JlYWwg PSBfX3Q7CiAgICAgX01faW1hZyA9IF9UcCgpOwogICAgIHJldHVybiAqdGhpczsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4mCiAgICBjb21w bGV4PF9UcD46Om9wZXJhdG9yKz0oY29uc3QgX1RwJiBfX3QpCiAgICB7CiAgICAgIF9NX3JlYWwg Kz0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvci09 KGNvbnN0IF9UcCYgX190KQogICAgewogICAgICBfTV9yZWFsIC09IF9fdDsKICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgY29tcGxleDxfVHA+ JgogICAgY29tcGxleDxfVHA+OjpvcGVyYXRvcio9KGNvbnN0IF9UcCYgX190KQogICAgewogICAg ICBfTV9yZWFsICo9IF9fdDsKICAgICAgX01faW1hZyAqPSBfX3Q7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGNvbXBsZXg8X1RwPiYKICAg IGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBfVHAmIF9fdCkKICAgIHsKICAgICAgX01f cmVhbCAvPSBfX3Q7CiAgICAgIF9NX2ltYWcgLz0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4K ICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3I9KGNvbnN0IGNvbXBs ZXg8X1VwPiYgX196KQogICAgewogICAgICBfTV9yZWFsID0gX196LnJlYWwoKTsKICAgICAgX01f aW1hZyA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1Rw PiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IrPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikK ICAgIHsKICAgICAgX01fcmVhbCArPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnICs9IF9fei5p bWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1RwPiYKICAgIGNvbXBs ZXg8X1RwPjo6b3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikKICAgIHsKICAgICAg X01fcmVhbCAtPSBfX3oucmVhbCgpOwogICAgICBfTV9pbWFnIC09IF9fei5pbWFnKCk7CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVXA+CiAgICBjb21wbGV4PF9UcD4mCiAgICBjb21wbGV4PF9UcD46Om9w ZXJhdG9yKj0oY29uc3QgY29tcGxleDxfVXA+JiBfX3opCiAgICB7CiAgICAgIGNvbnN0IF9UcCBf X3IgPSBfTV9yZWFsICogX196LnJlYWwoKSAtIF9NX2ltYWcgKiBfX3ouaW1hZygpOwogICAgICBf TV9pbWFnID0gX01fcmVhbCAqIF9fei5pbWFnKCkgKyBfTV9pbWFnICogX196LnJlYWwoKTsKICAg ICAgX01fcmVhbCA9IF9fcjsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9VcD4KICAgIGNvbXBsZXg8X1Rw PiYKICAgIGNvbXBsZXg8X1RwPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9VcD4mIF9feikK ICAgIHsKICAgICAgY29uc3QgX1RwIF9fciA9IF9NX3JlYWwgKiBfX3oucmVhbCgpICsgX01faW1h ZyAqIF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBfX24gPSBub3JtKF9feik7CiAgICAgIF9N X2ltYWcgPSAoX01faW1hZyAqIF9fei5yZWFsKCkgLSBfTV9yZWFsICogX196LmltYWcoKSkgLyBf X247CiAgICAgIF9NX3JlYWwgPSBfX3IgLyBfX247CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0K CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9w ZXJhdG9yKyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kp CiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBj b21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9U cD4gKF9feCkgKz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBj b21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxf VHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKz0gX194OyB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9y LShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7 IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBjb21wbGV4 PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9f eCkgLT0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4 PF9UcD4KICAgIG9wZXJhdG9yLShjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBf X3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLT0gX195OyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKihjb25z dCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVy biBjb21wbGV4PF9UcD4gKF9feCkgKj0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKihjb25zdCBjb21wbGV4PF9UcD4m IF9feCwgY29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgKj0g X195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K ICAgIG9wZXJhdG9yKihjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAg ICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feSkgKj0gX194OyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25zdCBjb21w bGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBjb21w bGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yLyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwg Y29uc3QgX1RwJiBfX3kpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9w ZXJhdG9yLyhjb25zdCBfVHAmIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJl dHVybiBjb21wbGV4PF9UcD4gKF9feCkgLz0gX195OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIG9wZXJhdG9yKyhjb25zdCBjb21wbGV4PF9U cD4mIF9feCkKICAgIHsgcmV0dXJuIF9feDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBvcGVyYXRvci0oY29uc3QgY29tcGxleDxfVHA+JiBf X3gpCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4oLV9feC5yZWFsKCksIC1fX3guaW1hZygpKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9 PShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7 IHJldHVybiBfX3gucmVhbCgpID09IF9feS5yZWFsKCkgJiYgX194LmltYWcoKSA9PSBfX3kuaW1h ZygpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVy YXRvcj09KGNvbnN0IGNvbXBsZXg8X1RwPiYgX194LCBjb25zdCBfVHAmIF9feSkKICAgIHsgcmV0 dXJuIF9feC5yZWFsKCkgPT0gX195ICYmIF9feC5pbWFnKCkgPT0gX1RwKCk7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPT0oY29uc3QgX1Rw JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgeyByZXR1cm4gX194ID09IF9feS5y ZWFsKCkgJiYgX1RwKCkgPT0gX195LmltYWcoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3IhPShjb25zdCBjb21wbGV4PF9UcD4mIF9feCwg Y29uc3QgY29tcGxleDxfVHA+JiBfX3kpCiAgICB7IHJldHVybiBfX3gucmVhbCgpICE9IF9feS5y ZWFsKCkgfHwgX194LmltYWcoKSAhPSBfX3kuaW1hZygpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGNvbXBsZXg8X1RwPiYg X194LCBjb25zdCBfVHAmIF9feSkKICAgIHsgcmV0dXJuIF9feC5yZWFsKCkgIT0gX195IHx8IF9f eC5pbWFnKCkgIT0gX1RwKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l IGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgX1RwJiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYg X195KQogICAgeyByZXR1cm4gX194ICE9IF9feS5yZWFsKCkgfHwgX1RwKCkgIT0gX195LmltYWco KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3MgX1Ry YWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4o YmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLCBjb21wbGV4PF9UcD4mIF9feCkK ICAgIHsKICAgICAgX1RwIF9fcmVfeCwgX19pbV94OwogICAgICBfQ2hhclQgX19jaDsKICAgICAg X19pcyA+PiBfX2NoOwogICAgICBpZiAoX19jaCA9PSAnKCcpCiAgICAgICAgewogICAgICAgICAg X19pcyA+PiBfX3JlX3ggPj4gX19jaDsKICAgICAgICAgIGlmIChfX2NoID09ICcsJykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIF9faXMgPj4gX19pbV94ID4+IF9fY2g7CiAgICAgICAgICAg ICAgaWYgKF9fY2ggPT0gJyknKQogICAgICAgICAgICAgICAgX194ID0gY29tcGxleDxfVHA+KF9f cmVfeCwgX19pbV94KTsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX2lzLnNl dHN0YXRlKGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBp ZiAoX19jaCA9PSAnKScpCiAgICAgICAgICAgIF9feCA9IGNvbXBsZXg8X1RwPihfX3JlX3gsIF9U cCgwKSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9faXMuc2V0c3RhdGUoaW9zX2Jhc2U6 OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9faXMu cHV0YmFjayhfX2NoKTsKICAgICAgICAgIF9faXMgPj4gX19yZV94OwogICAgICAgICAgX194ID0g Y29tcGxleDxfVHA+KF9fcmVfeCwgX1RwKDApKTsKICAgICAgICB9CiAgICAgIHJldHVybiBfX2lz OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9DaGFyVCwgY2xhc3Mg X1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9y PDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX29zLCBjb25zdCBjb21wbGV4PF9U cD4mIF9feCkKICAgIHsKICAgICAgYmFzaWNfb3N0cmluZ3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IF9fczsKICAgICAgX19zLmZsYWdzKF9fb3MuZmxhZ3MoKSk7CiAgICAgIF9fcy5pbWJ1ZShfX29z LmdldGxvYygpKTsKICAgICAgX19zLnByZWNpc2lvbihfX29zLnByZWNpc2lvbigpKTsKICAgICAg X19zIDw8ICcoJyA8PCBfX3gucmVhbCgpIDw8ICIsIiA8PCBfX3guaW1hZygpIDw8ICcpJzsKICAg ICAgcmV0dXJuIF9fb3MgPDwgX19zLnN0cigpOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9UcAogICAgcmVhbChjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAg IHsgcmV0dXJuIF9fei5yZWFsKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s aW5lIF9UcAogICAgaW1hZyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsgcmV0dXJuIF9f ei5pbWFnKCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAg YWJzKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfVHAgX194ID0gX196LnJl YWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5pbWFnKCk7CiAgICAgIGNvbnN0IF9UcCBfX3MgPSBt YXgoYWJzKF9feCksIGFicyhfX3kpKTsKICAgICAgaWYgKF9fcyA9PSBfVHAoKSkKICAgICAgICBy ZXR1cm4gX19zOwogICAgICBfX3ggLz0gX19zOwogICAgICBfX3kgLz0gX19zOwogICAgICByZXR1 cm4gX19zICogc3FydChfX3ggKiBfX3ggKyBfX3kgKiBfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBhcmcoY29uc3QgY29tcGxleDxfVHA+JiBf X3opCiAgICB7IHJldHVybiBhdGFuMihfX3ouaW1hZygpLCBfX3oucmVhbCgpKTsgfQoKCgoKCgog IHRlbXBsYXRlPGJvb2w+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyCiAgICB7CiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19pdChjb25z dCBjb21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBjb25zdCBfVHAgX194ID0g X196LnJlYWwoKTsKICAgICAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICAg ICAgcmV0dXJuIF9feCAqIF9feCArIF9feSAqIF9feTsKICAgICAgICB9CiAgICB9OwoKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgX05vcm1faGVscGVyPHRydWU+CiAgICB7CiAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgICAgICBzdGF0aWMgaW5saW5lIF9UcCBfU19kb19pdChjb25zdCBj b21wbGV4PF9UcD4mIF9feikKICAgICAgICB7CiAgICAgICAgICBfVHAgX19yZXMgPSBhYnMoX196 KTsKICAgICAgICAgIHJldHVybiBfX3JlcyAqIF9fcmVzOwogICAgICAgIH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIG5vcm0oY29uc3QgY29tcGxl eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIHJldHVybiBfTm9ybV9oZWxwZXI8X19pc19mbG9hdGlu ZzxfVHA+OjpfTV90eXBlPjo6X1NfZG9faXQoX196KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG9sYXIoY29uc3QgX1RwJiBfX3Jo bywgY29uc3QgX1RwJiBfX3RoZXRhKQogICAgeyByZXR1cm4gY29tcGxleDxfVHA+KF9fcmhvICog Y29zKF9fdGhldGEpLCBfX3JobyAqIHNpbihfX3RoZXRhKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8X1RwPgogICAgY29uaihjb25zdCBjb21wbGV4PF9U cD4mIF9feikKICAgIHsgcmV0dXJuIGNvbXBsZXg8X1RwPihfX3oucmVhbCgpLCAtX196LmltYWco KSk7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K ICAgIGNvcyhjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgY29uc3QgX1RwIF9f eCA9IF9fei5yZWFsKCk7CiAgICAgIGNvbnN0IF9UcCBfX3kgPSBfX3ouaW1hZygpOwogICAgICBy ZXR1cm4gY29tcGxleDxfVHA+KGNvcyhfX3gpICogY29zaChfX3kpLCAtc2luKF9feCkgKiBzaW5o KF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxl eDxfVHA+CiAgICBjb3NoKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBjb25z dCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1RwIF9feSA9IF9fei5pbWFnKCk7 CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oY29zaChfX3gpICogY29zKF9feSksIHNpbmgoX194 KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l IGNvbXBsZXg8X1RwPgogICAgZXhwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgeyByZXR1 cm4gcG9sYXIoZXhwKF9fei5yZWFsKCkpLCBfX3ouaW1hZygpKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBsb2coY29uc3QgY29tcGxleDxf VHA+JiBfX3opCiAgICB7IHJldHVybiBjb21wbGV4PF9UcD4obG9nKGFicyhfX3opKSwgYXJnKF9f eikpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4K ICAgIGxvZzEwKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgeyByZXR1cm4gbG9nKF9feikg LyBsb2coX1RwKDEwLjApKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg Y29tcGxleDxfVHA+CiAgICBzaW4oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAg IGNvbnN0IF9UcCBfX3ggPSBfX3oucmVhbCgpOwogICAgICBjb25zdCBfVHAgX195ID0gX196Lmlt YWcoKTsKICAgICAgcmV0dXJuIGNvbXBsZXg8X1RwPihzaW4oX194KSAqIGNvc2goX195KSwgY29z KF9feCkgKiBzaW5oKF9feSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29tcGxleDxfVHA+CiAgICBzaW5oKGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg ewogICAgICBjb25zdCBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgY29uc3QgX1RwIF9feSA9 IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiBjb21wbGV4PF9UcD4oc2luaChfX3gpICogY29zKF9f eSksIGNvc2goX194KSAqIHNpbihfX3kpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgY29tcGxleDxfVHA+CiAgICBzcXJ0KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAg ewogICAgICBfVHAgX194ID0gX196LnJlYWwoKTsKICAgICAgX1RwIF9feSA9IF9fei5pbWFnKCk7 CgogICAgICBpZiAoX194ID09IF9UcCgpKQogICAgICAgIHsKICAgICAgICAgIF9UcCBfX3QgPSBz cXJ0KGFicyhfX3kpIC8gMik7CiAgICAgICAgICByZXR1cm4gY29tcGxleDxfVHA+KF9fdCwgX195 IDwgX1RwKCkgPyAtX190IDogX190KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAg ICAgICAgICBfVHAgX190ID0gc3FydCgyICogKGFicyhfX3opICsgYWJzKF9feCkpKTsKICAgICAg ICAgIF9UcCBfX3UgPSBfX3QgLyAyOwogICAgICAgICAgcmV0dXJuIF9feCA+IF9UcCgpCiAgICAg ICAgICAgID8gY29tcGxleDxfVHA+KF9fdSwgX195IC8gX190KQogICAgICAgICAgICA6IGNvbXBs ZXg8X1RwPihhYnMoX195KSAvIF9fdCwgX195IDwgX1RwKCkgPyAtX191IDogX191KTsKICAgICAg ICB9CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9U cD4KICAgIHRhbihjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgcmV0dXJuIHNp bihfX3opIC8gY29zKF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSBjb21wbGV4PF9UcD4KICAgIHRhbmgoY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7 CiAgICAgIHJldHVybiBzaW5oKF9feikgLyBjb3NoKF9feik7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4 PF9UcD4mIF9feiwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fcG93X2hlbHBlcihfX3os IF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4 PF9UcD4KICAgIHBvdyhjb25zdCBjb21wbGV4PF9UcD4mIF9feCwgY29uc3QgX1RwJiBfX3kpCiAg ICB7CiAgICAgIHJldHVybiBleHAoX195ICogbG9nKF9feCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxfVHA+CiAgICBwb3coY29uc3QgY29tcGxl eDxfVHA+JiBfX3gsIGNvbnN0IGNvbXBsZXg8X1RwPiYgX195KQogICAgewogICAgICByZXR1cm4g ZXhwKF9feSAqIGxvZyhfX3gpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW5saW5lIGNvbXBsZXg8X1RwPgogICAgcG93KGNvbnN0IF9UcCYgX194LCBjb25zdCBjb21wbGV4 PF9UcD4mIF9feSkKICAgIHsKICAgICAgcmV0dXJuIGV4cChfX3kgKiBsb2coX194KSk7CiAgICB9 CgoKCiAgdGVtcGxhdGU8PiBjbGFzcyBjb21wbGV4PGZsb2F0PgogIHsKICBwdWJsaWM6CiAgICB0 eXBlZGVmIGZsb2F0IHZhbHVlX3R5cGU7CgogICAgY29tcGxleChmbG9hdCA9IDAuMGYsIGZsb2F0 ID0gMC4wZik7CgoKCiAgICBleHBsaWNpdCBjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYp OwogICAgZXhwbGljaXQgY29tcGxleChjb25zdCBjb21wbGV4PGxvbmcgZG91YmxlPiYpOwoKICAg IGZsb2F0IHJlYWwoKSBjb25zdDsKICAgIGZsb2F0IGltYWcoKSBjb25zdDsKCiAgICBjb21wbGV4 PGZsb2F0PiYgb3BlcmF0b3I9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvcis9 KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRvci09KGZsb2F0KTsKICAgIGNvbXBs ZXg8ZmxvYXQ+JiBvcGVyYXRvcio9KGZsb2F0KTsKICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVyYXRv ci89KGZsb2F0KTsKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8 ZmxvYXQ+Jm9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxf VHA+Jik7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgICAgIGNvbXBsZXg8ZmxvYXQ+JiBvcGVy YXRvci09KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPgogICAg ICBjb21wbGV4PGZsb2F0PiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRl bXBsYXRlPGNsYXNzIF9UcD4KICAgICAgY29tcGxleDxmbG9hdD4mb3BlcmF0b3IvPShjb25zdCBj b21wbGV4PF9UcD4mKTsKCiAgcHJpdmF0ZToKICAgIHR5cGVkZWYgX19jb21wbGV4X18gZmxvYXQg X0NvbXBsZXhUOwogICAgX0NvbXBsZXhUIF9NX3ZhbHVlOwoKICAgIGNvbXBsZXgoX0NvbXBsZXhU IF9feikgOiBfTV92YWx1ZShfX3opIHsgfQoKICAgIGZyaWVuZCBjbGFzcyBjb21wbGV4PGRvdWJs ZT47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT47CiAgfTsKCiAgaW5saW5l IGZsb2F0CiAgY29tcGxleDxmbG9hdD46OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9fcmVhbF9f IF9NX3ZhbHVlOyB9CgogIGlubGluZSBmbG9hdAogIGNvbXBsZXg8ZmxvYXQ+OjppbWFnKCkgY29u c3QKICB7IHJldHVybiBfX2ltYWdfXyBfTV92YWx1ZTsgfQoKICBpbmxpbmUKICBjb21wbGV4PGZs b2F0Pjo6Y29tcGxleChmbG9hdCByLCBmbG9hdCBpKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVl ID0gcjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gaTsKICB9CgogIGlubGluZSBjb21wbGV4PGZs b2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9KGZsb2F0IF9fZikKICB7CiAgICBfX3Jl YWxfXyBfTV92YWx1ZSA9IF9fZjsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gMC4wZjsKICAgIHJl dHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0 Pjo6b3BlcmF0b3IrPShmbG9hdCBfX2YpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19m OwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZmxvYXQ+JgogIGNvbXBs ZXg8ZmxvYXQ+OjpvcGVyYXRvci09KGZsb2F0IF9fZikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1 ZSAtPSBfX2Y7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxmbG9hdD4m CiAgY29tcGxleDxmbG9hdD46Om9wZXJhdG9yKj0oZmxvYXQgX19mKQogIHsKICAgIF9NX3ZhbHVl ICo9IF9fZjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGZsb2F0PiYK ICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IvPShmbG9hdCBfX2YpCiAgewogICAgX01fdmFsdWUg Lz0gX19mOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSBjb21wbGV4PGZsb2F0PiYKICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3I9KGNvbnN0 IGNvbXBsZXg8X1RwPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwo KTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICAgIHJldHVybiAqdGhpczsK ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAg Y29tcGxleDxmbG9hdD46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgewog ICAgX19yZWFsX18gX01fdmFsdWUgKz0gX196LnJlYWwoKTsKICAgIF9faW1hZ19fIF9NX3ZhbHVl ICs9IF9fei5pbWFnKCk7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0Pjo6b3Bl cmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICBfX3JlYWxfXyBfTV92 YWx1ZSAtPSBfX3oucmVhbCgpOwogICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7 CiAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgY29tcGxleDxmbG9hdD4mCiAgICBjb21wbGV4PGZsb2F0Pjo6b3BlcmF0b3IqPShjb25z dCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19y ZWFsX18gX190ID0gX196LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsK ICAgICAgX01fdmFsdWUgKj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21wbGV4PGZsb2F0PiYKICAgIGNvbXBsZXg8 ZmxvYXQ+OjpvcGVyYXRvci89KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBf Q29tcGxleFQgX190OwogICAgICBfX3JlYWxfXyBfX3QgPSBfX3oucmVhbCgpOwogICAgICBfX2lt YWdfXyBfX3QgPSBfX3ouaW1hZygpOwogICAgICBfTV92YWx1ZSAvPSBfX3Q7CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCgoKICB0ZW1wbGF0ZTw+IGNsYXNzIGNvbXBsZXg8ZG91YmxlPgogIHsK ICBwdWJsaWM6CiAgICB0eXBlZGVmIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBsZXgoZG91 YmxlID0wLjAsIGRvdWJsZSA9MC4wKTsKCgoKICAgIGNvbXBsZXgoY29uc3QgY29tcGxleDxmbG9h dD4mKTsKICAgIGV4cGxpY2l0IGNvbXBsZXgoY29uc3QgY29tcGxleDxsb25nIGRvdWJsZT4mKTsK CiAgICBkb3VibGUgcmVhbCgpIGNvbnN0OwogICAgZG91YmxlIGltYWcoKSBjb25zdDsKCiAgICBj b21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yPShkb3VibGUpOwogICAgY29tcGxleDxkb3VibGU+JiBv cGVyYXRvcis9KGRvdWJsZSk7CiAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9yLT0oZG91Ymxl KTsKICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3IqPShkb3VibGUpOwogICAgY29tcGxleDxk b3VibGU+JiBvcGVyYXRvci89KGRvdWJsZSk7CgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICAgIGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYpOwog ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGRvdWJsZT4mIG9wZXJhdG9y Kz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAg IGNvbXBsZXg8ZG91YmxlPiYgb3BlcmF0b3ItPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxkb3VibGU+JiBvcGVyYXRvcio9KGNv bnN0IGNvbXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21w bGV4PGRvdWJsZT4mIG9wZXJhdG9yLz0oY29uc3QgY29tcGxleDxfVHA+Jik7CgogIHByaXZhdGU6 CiAgICB0eXBlZGVmIF9fY29tcGxleF9fIGRvdWJsZSBfQ29tcGxleFQ7CiAgICBfQ29tcGxleFQg X01fdmFsdWU7CgogICAgY29tcGxleChfQ29tcGxleFQgX196KSA6IF9NX3ZhbHVlKF9feikgeyB9 CgogICAgZnJpZW5kIGNsYXNzIGNvbXBsZXg8ZmxvYXQ+OwogICAgZnJpZW5kIGNsYXNzIGNvbXBs ZXg8bG9uZyBkb3VibGU+OwogIH07CgogIGlubGluZSBkb3VibGUKICBjb21wbGV4PGRvdWJsZT46 OnJlYWwoKSBjb25zdAogIHsgcmV0dXJuIF9fcmVhbF9fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBk b3VibGUKICBjb21wbGV4PGRvdWJsZT46OmltYWcoKSBjb25zdAogIHsgcmV0dXJuIF9faW1hZ19f IF9NX3ZhbHVlOyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChkb3VibGUg X19yLCBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19p bWFnX18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+JgogIGNv bXBsZXg8ZG91YmxlPjo6b3BlcmF0b3I9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFsX18gX01f dmFsdWUgPSBfX2Q7CiAgICBfX2ltYWdfXyBfTV92YWx1ZSA9IDAuMDsKICAgIHJldHVybiAqdGhp czsKICB9CgogIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgY29tcGxleDxkb3VibGU+OjpvcGVy YXRvcis9KGRvdWJsZSBfX2QpCiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19kOwogICAg cmV0dXJuICp0aGlzOwogIH0KCiAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICBjb21wbGV4PGRv dWJsZT46Om9wZXJhdG9yLT0oZG91YmxlIF9fZCkKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAt PSBfX2Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxkb3VibGU+Jgog IGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShkb3VibGUgX19kKQogIHsKICAgIF9NX3ZhbHVl ICo9IF9fZDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGRvdWJsZT4m CiAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvci89KGRvdWJsZSBfX2QpCiAgewogICAgX01fdmFs dWUgLz0gX19kOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIGNvbXBsZXg8ZG91YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0 b3I9KGNvbnN0IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92YWx1 ZSA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICAg ICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxp bmUgY29tcGxleDxkb3VibGU+JgogICAgY29tcGxleDxkb3VibGU+OjpvcGVyYXRvcis9KGNvbnN0 IGNvbXBsZXg8X1RwPiYgX196KQogICAgewogICAgICBfX3JlYWxfXyBfTV92YWx1ZSArPSBfX3ou cmVhbCgpOwogICAgICBfX2ltYWdfXyBfTV92YWx1ZSArPSBfX3ouaW1hZygpOwogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBjb21w bGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3QgY29tcGxl eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7 CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8ZG91 YmxlPiYKICAgIGNvbXBsZXg8ZG91YmxlPjo6b3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4m IF9feikKICAgIHsKICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196 LnJlYWwoKTsKICAgICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUg Kj0gX190OwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSBjb21wbGV4PGRvdWJsZT4mCiAgICBjb21wbGV4PGRvdWJsZT46Om9wZXJh dG9yLz0oY29uc3QgY29tcGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7 CiAgICAgIF9fcmVhbF9fIF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9f ei5pbWFnKCk7CiAgICAgIF9NX3ZhbHVlIC89IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKCgogIHRlbXBsYXRlPD4gY2xhc3MgY29tcGxleDxsb25nIGRvdWJsZT4KICB7CiAgcHVibGlj OgogICAgdHlwZWRlZiBsb25nIGRvdWJsZSB2YWx1ZV90eXBlOwoKICAgIGNvbXBsZXgobG9uZyBk b3VibGUgPSAwLjBMLCBsb25nIGRvdWJsZSA9IDAuMEwpOwoKCgogICAgY29tcGxleChjb25zdCBj b21wbGV4PGZsb2F0PiYpOwogICAgY29tcGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mKTsKCiAg ICBsb25nIGRvdWJsZSByZWFsKCkgY29uc3Q7CiAgICBsb25nIGRvdWJsZSBpbWFnKCkgY29uc3Q7 CgogICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPSAobG9uZyBkb3VibGUpOwogICAg Y29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yKz0gKGxvbmcgZG91YmxlKTsKICAgIGNvbXBs ZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09IChsb25nIGRvdWJsZSk7CiAgICBjb21wbGV4PGxv bmcgZG91YmxlPiYgb3BlcmF0b3IqPSAobG9uZyBkb3VibGUpOwogICAgY29tcGxleDxsb25nIGRv dWJsZT4mIG9wZXJhdG9yLz0gKGxvbmcgZG91YmxlKTsKCgoKICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yPShjb25zdCBjb21wbGV4 PF9UcD4mKTsKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRv dWJsZT4mIG9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxfVHA+Jik7CiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgICAgIGNvbXBsZXg8bG9uZyBkb3VibGU+JiBvcGVyYXRvci09KGNvbnN0IGNv bXBsZXg8X1RwPiYpOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgICBjb21wbGV4PGxv bmcgZG91YmxlPiYgb3BlcmF0b3IqPShjb25zdCBjb21wbGV4PF9UcD4mKTsKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgICAgY29tcGxleDxsb25nIGRvdWJsZT4mIG9wZXJhdG9yLz0oY29u c3QgY29tcGxleDxfVHA+Jik7CgogIHByaXZhdGU6CiAgICB0eXBlZGVmIF9fY29tcGxleF9fIGxv bmcgZG91YmxlIF9Db21wbGV4VDsKICAgIF9Db21wbGV4VCBfTV92YWx1ZTsKCiAgICBjb21wbGV4 KF9Db21wbGV4VCBfX3opIDogX01fdmFsdWUoX196KSB7IH0KCiAgICBmcmllbmQgY2xhc3MgY29t cGxleDxmbG9hdD47CiAgICBmcmllbmQgY2xhc3MgY29tcGxleDxkb3VibGU+OwogIH07CgogIGlu bGluZQogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGxvbmcgZG91YmxlIF9fciwgbG9u ZyBkb3VibGUgX19pKQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX19yOwogICAgX19pbWFn X18gX01fdmFsdWUgPSBfX2k7CiAgfQoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb21wbGV4PGxv bmcgZG91YmxlPjo6cmVhbCgpIGNvbnN0CiAgeyByZXR1cm4gX19yZWFsX18gX01fdmFsdWU7IH0K CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgY29tcGxleDxsb25nIGRvdWJsZT46OmltYWcoKSBjb25z dAogIHsgcmV0dXJuIF9faW1hZ19fIF9NX3ZhbHVlOyB9CgogIGlubGluZSBjb21wbGV4PGxvbmcg ZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3I9KGxvbmcgZG91YmxlIF9f cikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSA9IF9fcjsKICAgIF9faW1hZ19fIF9NX3ZhbHVl ID0gMC4wTDsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21wbGV4PGxvbmcgZG91 YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IrPShsb25nIGRvdWJsZSBfX3Ip CiAgewogICAgX19yZWFsX18gX01fdmFsdWUgKz0gX19yOwogICAgcmV0dXJuICp0aGlzOwogIH0K CiAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3VibGU+JgogIGNvbXBsZXg8bG9uZyBkb3VibGU+Ojpv cGVyYXRvci09KGxvbmcgZG91YmxlIF9fcikKICB7CiAgICBfX3JlYWxfXyBfTV92YWx1ZSAtPSBf X3I7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4m CiAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0obG9uZyBkb3VibGUgX19yKQogIHsK ICAgIF9NX3ZhbHVlICo9IF9fcjsKICAgIHJldHVybiAqdGhpczsKICB9CgogIGlubGluZSBjb21w bGV4PGxvbmcgZG91YmxlPiYKICBjb21wbGV4PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IvPShsb25n IGRvdWJsZSBfX3IpCiAgewogICAgX01fdmFsdWUgLz0gX19yOwogICAgcmV0dXJuICp0aGlzOwog IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3Vi bGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yPShjb25zdCBjb21wbGV4PF9U cD4mIF9feikKICAgIHsKICAgICAgX19yZWFsX18gX01fdmFsdWUgPSBfX3oucmVhbCgpOwogICAg ICBfX2ltYWdfXyBfTV92YWx1ZSA9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBkb3Vi bGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKz0oY29uc3QgY29tcGxleDxf VHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlICs9IF9fei5yZWFsKCk7CiAg ICAgIF9faW1hZ19fIF9NX3ZhbHVlICs9IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhpczsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9uZyBk b3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yLT0oY29uc3QgY29tcGxl eDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9fcmVhbF9fIF9NX3ZhbHVlIC09IF9fei5yZWFsKCk7 CiAgICAgIF9faW1hZ19fIF9NX3ZhbHVlIC09IF9fei5pbWFnKCk7CiAgICAgIHJldHVybiAqdGhp czsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIGNvbXBsZXg8bG9u ZyBkb3VibGU+JgogICAgY29tcGxleDxsb25nIGRvdWJsZT46Om9wZXJhdG9yKj0oY29uc3QgY29t cGxleDxfVHA+JiBfX3opCiAgICB7CiAgICAgIF9Db21wbGV4VCBfX3Q7CiAgICAgIF9fcmVhbF9f IF9fdCA9IF9fei5yZWFsKCk7CiAgICAgIF9faW1hZ19fIF9fdCA9IF9fei5pbWFnKCk7CiAgICAg IF9NX3ZhbHVlICo9IF9fdDsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29tcGxleDxsb25nIGRvdWJsZT4mCiAgICBjb21wbGV4 PGxvbmcgZG91YmxlPjo6b3BlcmF0b3IvPShjb25zdCBjb21wbGV4PF9UcD4mIF9feikKICAgIHsK ICAgICAgX0NvbXBsZXhUIF9fdDsKICAgICAgX19yZWFsX18gX190ID0gX196LnJlYWwoKTsKICAg ICAgX19pbWFnX18gX190ID0gX196LmltYWcoKTsKICAgICAgX01fdmFsdWUgLz0gX190OwogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgoKCgoKICBpbmxpbmUKICBjb21wbGV4PGZsb2F0Pjo6Y29t cGxleChjb25zdCBjb21wbGV4PGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChf X3ouX01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxmbG9hdD46OmNvbXBsZXgoY29u c3QgY29tcGxleDxsb25nIGRvdWJsZT4mIF9feikKICA6IF9NX3ZhbHVlKF9Db21wbGV4VChfX3ou X01fdmFsdWUpKSB7IH0KCiAgaW5saW5lCiAgY29tcGxleDxkb3VibGU+Ojpjb21wbGV4KGNvbnN0 IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCiAgOiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVl KSkgeyB9CgogIGlubGluZQogIGNvbXBsZXg8ZG91YmxlPjo6Y29tcGxleChjb25zdCBjb21wbGV4 PGxvbmcgZG91YmxlPiYgX196KQogIHsKICAgIF9fcmVhbF9fIF9NX3ZhbHVlID0gX196LnJlYWwo KTsKICAgIF9faW1hZ19fIF9NX3ZhbHVlID0gX196LmltYWcoKTsKICB9CgogIGlubGluZQogIGNv bXBsZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZmxvYXQ+JiBfX3opCiAg OiBfTV92YWx1ZShfQ29tcGxleFQoX196Ll9NX3ZhbHVlKSkgeyB9CgogIGlubGluZQogIGNvbXBs ZXg8bG9uZyBkb3VibGU+Ojpjb21wbGV4KGNvbnN0IGNvbXBsZXg8ZG91YmxlPiYgX196KQogIDog X01fdmFsdWUoX0NvbXBsZXhUKF9fei5fTV92YWx1ZSkpIHsgfQp9CiMgMzIgIi91c3IvaW5jbHVk ZS9nKystdjMvY29tcGxleCIgMiAzCiMgMzkgIktleURhdGEuaCIgMgojIDEgIkZpdHNFcnJvci5o IiAxCiMgNDAgIktleURhdGEuaCIgMgojIDEgIkZJVFNVdGlsLmgiIDEKIyAyNiAiRklUU1V0aWwu aCIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2lvc3RyZWFtIiAxIDMKIyAyNyAiRklUU1V0aWwu aCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvY29tcGxleCIgMSAzCiMgMjggIkZJVFNVdGls LmgiIDIKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2V4Y2VwdGlvbiIgMSAzCiMgMjkgIkZJVFNV dGlsLmgiIDIKIyAxICJDQ2ZpdHMuaCIgMQojIDMwICJGSVRTVXRpbC5oIiAyCgoKCgoKCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My92ZWN0b3IiIDEgMwojIDM3ICJGSVRTVXRpbC5oIiAyCgojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAzOSAiRklUU1V0aWwuaCIgMgoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDEgMwojIDMxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2Z1bmN0aW9uYWwiIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2Z1 bmN0aW9uYWwuaCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfZnVuY3Rp b25hbC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2MrK2NvbmZpZy5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5j dGlvbmFsLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5o IiAxIDMKIyA1MCAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDIg MwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMSAzCiMgNjMg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnLCBjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgdW5hcnlfZnVu Y3Rpb24gewogIHR5cGVkZWYgX0FyZyBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCBy ZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNz IF9SZXN1bHQ+CnN0cnVjdCBiaW5hcnlfZnVuY3Rpb24gewogIHR5cGVkZWYgX0FyZzEgZmlyc3Rf YXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9BcmcyIHNlY29uZF9hcmd1bWVudF90eXBlOwogIHR5 cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVj dCBwbHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194 ICsgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbWludXMgOiBwdWJsaWMg YmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1Rw JiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggLSBfX3k7IH0KfTsKCnRl bXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtdWx0aXBsaWVzIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICogX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xh c3MgX1RwPgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxf VHA+IHsKICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNv bnN0IHsgcmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxp bmUgX1RwIGlkZW50aXR5X2VsZW1lbnQocGx1czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgwKTsKfQp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBpbmxpbmUgX1RwIGlkZW50aXR5X2VsZW1lbnQobXVsdGlwbGll czxfVHA+KSB7CiAgcmV0dXJuIF9UcCgxKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0 IG1vZHVsdXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsX1RwPgp7CiAgX1RwIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggJSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBuZWdhdGUgOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4KewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYg X194KSBjb25zdCB7IHJldHVybiAtX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgZXF1YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJv b2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0 dXJuIF9feCA9PSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBub3RfZXF1 YWxfdG8gOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4KewogIGJvb2wgb3Bl cmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eCAhPSBfX3k7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29u c3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsZXNzIDogcHVibGljIGJpbmFyeV9mdW5j dGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPCBfX3k7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyX2VxdWFsIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9U cCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPj0gX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3Ry dWN0IGxvZ2ljYWxfYW5kIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsK ICBib29sIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7 IHJldHVybiBfX3ggJiYgX195OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n aWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IHx8IF9feTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGxvZ2ljYWxfbm90 IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiAhX194OyB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAg X1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0 IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29u c3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4K aW5saW5lIHVuYXJ5X25lZ2F0ZTxfUHJlZGljYXRlPgpub3QxKGNvbnN0IF9QcmVkaWNhdGUmIF9f cHJlZCkKewogIHJldHVybiB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4oX19wcmVkKTsKfQoKdGVt cGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+CmNsYXNzIGJpbmFyeV9uZWdhdGUKICA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX1ByZWRpY2F0ZTo6Zmlyc3RfYXJndW1lbnRfdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2Fy Z3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGJvb2w+IHsKcHJvdGVjdGVk OgogIF9QcmVkaWNhdGUgX01fcHJlZDsKcHVibGljOgogIGV4cGxpY2l0IGJpbmFyeV9uZWdhdGUo Y29uc3QgX1ByZWRpY2F0ZSYgX194KSA6IF9NX3ByZWQoX194KSB7fQogIGJvb2wgb3BlcmF0b3Io KShjb25zdCB0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gsCiAg ICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OnNlY29uZF9hcmd1bWVu dF90eXBlJiBfX3kpIGNvbnN0CiAgewogICAgcmV0dXJuICFfTV9wcmVkKF9feCwgX195KTsKICB9 Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8X1By ZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmluYXJ5 X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlv bj4KY2xhc3MgYmluZGVyMXN0CiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAg dHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRp b24gb3A7CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSB2YWx1ZTsK cHVibGljOgogIGJpbmRlcjFzdChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAgICAgIGNv bnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feSkKICAgICAg OiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0X3R5 cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVu dF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcCh2YWx1ZSwgX194KTsKICB9CgoKICB0 eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5hbWUgX09w ZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9w KHZhbHVlLCBfX3gpOwogIH0KCn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xhc3Mg X1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJhdGlv biYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRpb246 OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9PcGVy YXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0 aW9uPgpjbGFzcyBiaW5kZXIybmQKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICAg IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlPiB7CnByb3RlY3RlZDoKICBfT3BlcmF0 aW9uIG9wOwogIHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIHZhbHVl OwpwdWJsaWM6CiAgYmluZGVyMm5kKGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3VtZW50X3R5cGUmIF9feSkKICAg ICAgOiBvcChfX3gpLCB2YWx1ZShfX3kpIHt9CiAgdHlwZW5hbWUgX09wZXJhdGlvbjo6cmVzdWx0 X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OmZpcnN0X2FyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKF9feCwgdmFsdWUpOwogIH0KCgog IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf T3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBv cChfX3gsIHZhbHVlKTsKICB9Cgp9OwoKdGVtcGxhdGUgPGNsYXNzIF9PcGVyYXRpb24sIGNsYXNz IF9UcD4KaW5saW5lIGJpbmRlcjJuZDxfT3BlcmF0aW9uPgpiaW5kMm5kKGNvbnN0IF9PcGVyYXRp b24mIF9fZm4sIGNvbnN0IF9UcCYgX194KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBfT3BlcmF0aW9u OjpzZWNvbmRfYXJndW1lbnRfdHlwZSBfQXJnMl90eXBlOwogIHJldHVybiBiaW5kZXIybmQ8X09w ZXJhdGlvbj4oX19mbiwgX0FyZzJfdHlwZShfX3gpKTsKfQoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbjEsIGNsYXNzIF9PcGVyYXRpb24yPgpjbGFzcyB1bmFyeV9jb21wb3NlCiAgOiBwdWJs aWMgdW5hcnlfZnVuY3Rpb248dHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX09wZXJhdGlvbjE6OnJlc3VsdF90eXBl Pgp7CnByb3RlY3RlZDoKICBfT3BlcmF0aW9uMSBfTV9mbjE7CiAgX09wZXJhdGlvbjIgX01fZm4y OwpwdWJsaWM6CiAgdW5hcnlfY29tcG9zZShjb25zdCBfT3BlcmF0aW9uMSYgX194LCBjb25zdCBf T3BlcmF0aW9uMiYgX195KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSkge30KICB0eXBl bmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5cGUKICBvcGVyYXRvcigpKGNvbnN0IHR5cGVuYW1l IF9PcGVyYXRpb24yOjphcmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV9m bjEoX01fZm4yKF9feCkpOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xh c3MgX09wZXJhdGlvbjI+CmlubGluZSB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRp b24yPgpjb21wb3NlMShjb25zdCBfT3BlcmF0aW9uMSYgX19mbjEsIGNvbnN0IF9PcGVyYXRpb24y JiBfX2ZuMikKewogIHJldHVybiB1bmFyeV9jb21wb3NlPF9PcGVyYXRpb24xLF9PcGVyYXRpb24y PihfX2ZuMSwgX19mbjIpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbjEsIGNsYXNzIF9P cGVyYXRpb24yLCBjbGFzcyBfT3BlcmF0aW9uMz4KY2xhc3MgYmluYXJ5X2NvbXBvc2UKICA6IHB1 YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfT3BlcmF0aW9uMjo6YXJndW1lbnRfdHlwZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uMTo6cmVzdWx0X3R5 cGU+IHsKcHJvdGVjdGVkOgogIF9PcGVyYXRpb24xIF9NX2ZuMTsKICBfT3BlcmF0aW9uMiBfTV9m bjI7CiAgX09wZXJhdGlvbjMgX01fZm4zOwpwdWJsaWM6CiAgYmluYXJ5X2NvbXBvc2UoY29uc3Qg X09wZXJhdGlvbjEmIF9feCwgY29uc3QgX09wZXJhdGlvbjImIF9feSwKICAgICAgICAgICAgICAg ICBjb25zdCBfT3BlcmF0aW9uMyYgX196KQogICAgOiBfTV9mbjEoX194KSwgX01fZm4yKF9feSks IF9NX2ZuMyhfX3opIHsgfQogIHR5cGVuYW1lIF9PcGVyYXRpb24xOjpyZXN1bHRfdHlwZQogIG9w ZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjI6OmFyZ3VtZW50X3R5cGUmIF9feCkg Y29uc3QgewogICAgcmV0dXJuIF9NX2ZuMShfTV9mbjIoX194KSwgX01fZm4zKF9feCkpOwogIH0K fTsKCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0aW9uMSwgY2xhc3MgX09wZXJhdGlvbjIsIGNsYXNz IF9PcGVyYXRpb24zPgppbmxpbmUgYmluYXJ5X2NvbXBvc2U8X09wZXJhdGlvbjEsIF9PcGVyYXRp b24yLCBfT3BlcmF0aW9uMz4KY29tcG9zZTIoY29uc3QgX09wZXJhdGlvbjEmIF9fZm4xLCBjb25z dCBfT3BlcmF0aW9uMiYgX19mbjIsCiAgICAgICAgIGNvbnN0IF9PcGVyYXRpb24zJiBfX2ZuMykK ewogIHJldHVybiBiaW5hcnlfY29tcG9zZTxfT3BlcmF0aW9uMSxfT3BlcmF0aW9uMixfT3BlcmF0 aW9uMz4KICAgIChfX2ZuMSwgX19mbjIsIF9fZm4zKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9Bcmcs IGNsYXNzIF9SZXN1bHQ+CmNsYXNzIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb24gOiBwdWJsaWMg dW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4gewpwcm90ZWN0ZWQ6CiAgX1Jlc3VsdCAoKl9N X3B0cikoX0FyZyk7CnB1YmxpYzoKICBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKCkge30KICBl eHBsaWNpdCBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcpKSA6 IF9NX3B0cihfX3gpIHt9CiAgX1Jlc3VsdCBvcGVyYXRvcigpKF9BcmcgX194KSBjb25zdCB7IHJl dHVybiBfTV9wdHIoX194KTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcsIGNsYXNzIF9SZXN1 bHQ+CmlubGluZSBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHB0cl9m dW4oX1Jlc3VsdCAoKl9feCkoX0FyZykpCnsKICByZXR1cm4gcG9pbnRlcl90b191bmFyeV9mdW5j dGlvbjxfQXJnLCBfUmVzdWx0PihfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNz IF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5jdGlvbiA6 CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnByb3RlY3Rl ZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAgIHBvaW50 ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9fYmluYXJ5 X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01fcHRyKF9f eCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkgY29uc3Qg ewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCnRlbXBsYXRlIDxjbGFz cyBfQXJnMSwgY2xhc3MgX0FyZzIsIGNsYXNzIF9SZXN1bHQ+CmlubGluZSBwb2ludGVyX3RvX2Jp bmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PgpwdHJfZnVuKF9SZXN1bHQgKCpfX3gp KF9BcmcxLCBfQXJnMikpIHsKICByZXR1cm4gcG9pbnRlcl90b19iaW5hcnlfZnVuY3Rpb248X0Fy ZzEsX0FyZzIsX1Jlc3VsdD4oX194KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBf SWRlbnRpdHkgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogIF9UcCYgb3BlcmF0 b3IoKShfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9CiAgY29uc3QgX1RwJiBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194KSBjb25zdCB7IHJldHVybiBfX3g7IH0KfTsKCnRlbXBsYXRlIDxj bGFzcyBfVHA+IHN0cnVjdCBpZGVudGl0eSA6IHB1YmxpYyBfSWRlbnRpdHk8X1RwPiB7fTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1 bmN0aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9Q YWlyOjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVy biBfX3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVy YXRvcigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAg fQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlw ZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsK ICAgIHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25k X3R5cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9f eC5zZWNvbmQ7CiAgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPiBzdHJ1Y3Qgc2VsZWN0MXN0 IDogcHVibGljIF9TZWxlY3Qxc3Q8X1BhaXI+IHt9Owp0ZW1wbGF0ZSA8Y2xhc3MgX1BhaXI+IHN0 cnVjdCBzZWxlY3QybmQgOiBwdWJsaWMgX1NlbGVjdDJuZDxfUGFpcj4ge307CgoKdGVtcGxhdGUg PGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0MXN0IDogcHVibGljIGJp bmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcxPiB7CiAgX0FyZzEgb3BlcmF0b3IoKShj b25zdCBfQXJnMSYgX194LCBjb25zdCBfQXJnMiYpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQp9OwoK dGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Qcm9qZWN0Mm5kIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSwgX0FyZzIsIF9BcmcyPiB7CiAgX0FyZzIgb3Bl cmF0b3IoKShjb25zdCBfQXJnMSYsIGNvbnN0IF9BcmcyJiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9f eTsgfQp9OwoKdGVtcGxhdGUgPGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IHByb2pl Y3Qxc3QgOiBwdWJsaWMgX1Byb2plY3Qxc3Q8X0FyZzEsIF9BcmcyPiB7fTsKCnRlbXBsYXRlIDxj bGFzcyBfQXJnMSwgY2xhc3MgX0FyZzI+CnN0cnVjdCBwcm9qZWN0Mm5kIDogcHVibGljIF9Qcm9q ZWN0Mm5kPF9BcmcxLCBfQXJnMj4ge307CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+CnN0 cnVjdCBfQ29uc3RhbnRfdm9pZF9mdW4gewogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsK ICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF92b2lkX2Z1bihjb25zdCByZXN1bHRf dHlwZSYgX192KSA6IF9NX3ZhbChfX3YpIHt9CiAgY29uc3QgcmVzdWx0X3R5cGUmIG9wZXJhdG9y KCkoKSBjb25zdCB7IHJldHVybiBfTV92YWw7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0 LCBjbGFzcyBfQXJndW1lbnQ+CnN0cnVjdCBfQ29uc3RhbnRfdW5hcnlfZnVuIHsKICB0eXBlZGVm IF9Bcmd1bWVudCBhcmd1bWVudF90eXBlOwogIHR5cGVkZWYgX1Jlc3VsdCByZXN1bHRfdHlwZTsK ICByZXN1bHRfdHlwZSBfTV92YWw7CgogIF9Db25zdGFudF91bmFyeV9mdW4oY29uc3QgcmVzdWx0 X3R5cGUmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVyYXRv cigpKGNvbnN0IF9Bcmd1bWVudCYpIGNvbnN0IHsgcmV0dXJuIF9NX3ZhbDsgfQp9OwoKdGVtcGxh dGUgPGNsYXNzIF9SZXN1bHQsIGNsYXNzIF9BcmcxLCBjbGFzcyBfQXJnMj4Kc3RydWN0IF9Db25z dGFudF9iaW5hcnlfZnVuIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50X3R5cGU7CiAg dHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVz dWx0X3R5cGU7CiAgX1Jlc3VsdCBfTV92YWw7CgogIF9Db25zdGFudF9iaW5hcnlfZnVuKGNvbnN0 IF9SZXN1bHQmIF9fdikgOiBfTV92YWwoX192KSB7fQogIGNvbnN0IHJlc3VsdF90eXBlJiBvcGVy YXRvcigpKGNvbnN0IF9BcmcxJiwgY29uc3QgX0FyZzImKSBjb25zdCB7CiAgICByZXR1cm4gX01f dmFsOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0PgpzdHJ1Y3QgY29uc3RhbnRfdm9p ZF9mdW4gOiBwdWJsaWMgX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+IHsKICBjb25zdGFudF92 b2lkX2Z1bihjb25zdCBfUmVzdWx0JiBfX3YpIDogX0NvbnN0YW50X3ZvaWRfZnVuPF9SZXN1bHQ+ KF9fdikge30KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdCwKICAgICAgICAgIGNsYXNzIF9B cmd1bWVudCA9IF9SZXN1bHQ+CnN0cnVjdCBjb25zdGFudF91bmFyeV9mdW4gOiBwdWJsaWMgX0Nv bnN0YW50X3VuYXJ5X2Z1bjxfUmVzdWx0LCBfQXJndW1lbnQ+CnsKICBjb25zdGFudF91bmFyeV9m dW4oY29uc3QgX1Jlc3VsdCYgX192KQogICAgOiBfQ29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQs IF9Bcmd1bWVudD4oX192KSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmVzdWx0LAogICAgICAg ICAgY2xhc3MgX0FyZzEgPSBfUmVzdWx0LAogICAgICAgICAgY2xhc3MgX0FyZzIgPSBfQXJnMT4K c3RydWN0IGNvbnN0YW50X2JpbmFyeV9mdW4KICA6IHB1YmxpYyBfQ29uc3RhbnRfYmluYXJ5X2Z1 bjxfUmVzdWx0LCBfQXJnMSwgX0FyZzI+CnsKICBjb25zdGFudF9iaW5hcnlfZnVuKGNvbnN0IF9S ZXN1bHQmIF9fdikKICAgIDogX0NvbnN0YW50X2JpbmFyeV9mdW48X1Jlc3VsdCwgX0FyZzEsIF9B cmcyPihfX3YpIHt9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jlc3VsdD4KaW5saW5lIGNvbnN0YW50 X3ZvaWRfZnVuPF9SZXN1bHQ+IGNvbnN0YW50MChjb25zdCBfUmVzdWx0JiBfX3ZhbCkKewogIHJl dHVybiBjb25zdGFudF92b2lkX2Z1bjxfUmVzdWx0PihfX3ZhbCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfUmVzdWx0PgppbmxpbmUgY29uc3RhbnRfdW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdD4gY29u c3RhbnQxKGNvbnN0IF9SZXN1bHQmIF9fdmFsKQp7CiAgcmV0dXJuIGNvbnN0YW50X3VuYXJ5X2Z1 bjxfUmVzdWx0LF9SZXN1bHQ+KF9fdmFsKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXN1bHQ+Cmlu bGluZSBjb25zdGFudF9iaW5hcnlfZnVuPF9SZXN1bHQsX1Jlc3VsdCxfUmVzdWx0Pgpjb25zdGFu dDIoY29uc3QgX1Jlc3VsdCYgX192YWwpCnsKICByZXR1cm4gY29uc3RhbnRfYmluYXJ5X2Z1bjxf UmVzdWx0LF9SZXN1bHQsX1Jlc3VsdD4oX192YWwpOwp9CgoKCmNsYXNzIHN1YnRyYWN0aXZlX3Ju ZyA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx1bnNpZ25lZCBpbnQsIHVuc2lnbmVkIGludD4gewpw cml2YXRlOgogIHVuc2lnbmVkIGludCBfTV90YWJsZVs1NV07CiAgc2l6ZV90IF9NX2luZGV4MTsK ICBzaXplX3QgX01faW5kZXgyOwpwdWJsaWM6CiAgdW5zaWduZWQgaW50IG9wZXJhdG9yKCkodW5z aWduZWQgaW50IF9fbGltaXQpIHsKICAgIF9NX2luZGV4MSA9IChfTV9pbmRleDEgKyAxKSAlIDU1 OwogICAgX01faW5kZXgyID0gKF9NX2luZGV4MiArIDEpICUgNTU7CiAgICBfTV90YWJsZVtfTV9p bmRleDFdID0gX01fdGFibGVbX01faW5kZXgxXSAtIF9NX3RhYmxlW19NX2luZGV4Ml07CiAgICBy ZXR1cm4gX01fdGFibGVbX01faW5kZXgxXSAlIF9fbGltaXQ7CiAgfQoKICB2b2lkIF9NX2luaXRp YWxpemUodW5zaWduZWQgaW50IF9fc2VlZCkKICB7CiAgICB1bnNpZ25lZCBpbnQgX19rID0gMTsK ICAgIF9NX3RhYmxlWzU0XSA9IF9fc2VlZDsKICAgIHNpemVfdCBfX2k7CiAgICBmb3IgKF9faSA9 IDA7IF9faSA8IDU0OyBfX2krKykgewogICAgICAgIHNpemVfdCBfX2lpID0gKDIxICogKF9faSAr IDEpICUgNTUpIC0gMTsKICAgICAgICBfTV90YWJsZVtfX2lpXSA9IF9fazsKICAgICAgICBfX2sg PSBfX3NlZWQgLSBfX2s7CiAgICAgICAgX19zZWVkID0gX01fdGFibGVbX19paV07CiAgICB9CiAg ICBmb3IgKGludCBfX2xvb3AgPSAwOyBfX2xvb3AgPCA0OyBfX2xvb3ArKykgewogICAgICAgIGZv ciAoX19pID0gMDsgX19pIDwgNTU7IF9faSsrKQogICAgICAgICAgICBfTV90YWJsZVtfX2ldID0g X01fdGFibGVbX19pXSAtIF9NX3RhYmxlWygxICsgX19pICsgMzApICUgNTVdOwogICAgfQogICAg X01faW5kZXgxID0gMDsKICAgIF9NX2luZGV4MiA9IDMxOwogIH0KCiAgc3VidHJhY3RpdmVfcm5n KHVuc2lnbmVkIGludCBfX3NlZWQpIHsgX01faW5pdGlhbGl6ZShfX3NlZWQpOyB9CiAgc3VidHJh Y3RpdmVfcm5nKCkgeyBfTV9pbml0aWFsaXplKDE2MTgwMzM5OHUpOyB9Cn07CiMgNTYyICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9S ZXQsIGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9U cCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYp KCkpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyBy ZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90 IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhw bGljaXQgY29uc3RfbWVtX2Z1bl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihf X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4g KF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3Qg OiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1l bV9mdW5fcmVmX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBv cGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZh dGU6CiAgX1JldCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fcmVmX3QoX1JldCAo X1RwOjoqX19wZikoKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX19yKSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAg X1JldCAoX1RwOjoqX01fZikoKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFz cyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4xX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0 aW9uPF9UcCosX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV90KF9SZXQg KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw KiBfX3AsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2 YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBi aW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IGNvbnN0X21lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0 CiAgICB7IHJldHVybiAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6 Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwg Y2xhc3MgX0FyZz4KY2xhc3MgbWVtX2Z1bjFfcmVmX3QgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9u PF9UcCxfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3JlZl90KF9SZXQg KF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICBfUmV0IG9wZXJhdG9yKCkoX1Rw JiBfX3IsIF9BcmcgX194KSBjb25zdCB7IHJldHVybiAoX19yLipfTV9mKShfX3gpOyB9CnByaXZh dGU6CiAgX1JldCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwg Y2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV9yZWZfdCA6IHB1Ymxp YyBiaW5hcnlfZnVuY3Rpb248X1RwLF9BcmcsX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bjFfcmVmX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihf X3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0 IHsgcmV0dXJuIChfX3IuKl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICBfUmV0IChfVHA6OipfTV9m KShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2 b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAg ZXhwbGljaXQgbWVtX2Z1bl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQog IHZvaWQgb3BlcmF0b3IoKShfVHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2 YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFz cyBjb25zdF9tZW1fZnVuX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxjb25z dCBfVHAqLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW5fdCh2b2lkIChf VHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29u c3QgX1RwKiBfX3ApIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0ZToKICB2b2lkIChf VHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgbWVtX2Z1 bl9yZWZfdDx2b2lkLCBfVHA+IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCx2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuX3JlZl90KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01f ZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fcikgY29uc3QgeyAoX19yLipfTV9m KSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKTsKfTsKCnRlbXBsYXRlIDxjbGFz cyBfVHA+CmNsYXNzIGNvbnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFy eV9mdW5jdGlvbjxfVHAsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9y ZWZfdCh2b2lkIChfVHA6OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRl OgogIHZvaWQgKF9UcDo6Kl9NX2YpKCkgY29uc3Q7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQXJnPgpjbGFzcyBtZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4gOiBwdWJsaWMgYmlu YXJ5X2Z1bmN0aW9uPF9UcCosX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNpdCBtZW1fZnVu MV90KHZvaWQgKF9UcDo6Kl9fcGYpKF9BcmcpKSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJh dG9yKCkoX1RwKiBfX3AsIF9BcmcgX194KSBjb25zdCB7IChfX3AtPipfTV9mKShfX3gpOyB9CnBy aXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoX0FyZyk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw LCBjbGFzcyBfQXJnPgpjbGFzcyBjb25zdF9tZW1fZnVuMV90PHZvaWQsIF9UcCwgX0FyZz4KICA6 IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKixfQXJnLHZvaWQ+IHsKcHVibGljOgog IGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3Qp IDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBf X3gpIGNvbnN0IHsgKF9fcC0+Kl9NX2YpKF9feCk7IH0KcHJpdmF0ZToKICB2b2lkIChfVHA6Oipf TV9mKShfQXJnKSBjb25zdDsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs YXNzIG1lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVu Y3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qo dm9pZCAoX1RwOjoqX19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3Io KShfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRl OgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX0FyZz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfcmVmX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyx2b2lkPiB7CnB1YmxpYzoKICBleHBsaWNp dCBjb25zdF9tZW1fZnVuMV9yZWZfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBf TV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkg Y29uc3QgeyAoX19yLipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZiko X0FyZykgY29uc3Q7Cn07CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpp bmxpbmUgbWVtX2Z1bl90PF9SZXQsX1RwPiBtZW1fZnVuKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7 IHJldHVybiBtZW1fZnVuX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHA+CmlubGluZSBjb25zdF9tZW1fZnVuX3Q8X1JldCxfVHA+IG1lbV9mdW4oX1Jl dCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9U cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4KaW5saW5lIG1lbV9m dW5fcmVmX3Q8X1JldCxfVHA+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoKSkKICB7IHJl dHVybiBtZW1fZnVuX3JlZl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1Jl dCwgY2xhc3MgX1RwPgppbmxpbmUgY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9UcD4gbWVtX2Z1 bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW5f cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1Jl dCAoX1RwOjoqX19mKShfQXJnKSkKICB7IHJldHVybiBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+ KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu bGluZSBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4oX1JldCAoX1RwOjoq X19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBtZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuX3JlZihfUmV0IChf VHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+ KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+Cmlu bGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuX3JlZihfUmV0 IChfVHA6OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3JlZl90 PF9SZXQsX1RwLF9Bcmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAs IGNsYXNzIF9Bcmc+CmlubGluZSBtZW1fZnVuMV90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xKF9S ZXQgKF9UcDo6Kl9fZikoX0FyZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJn PihfX2YpOyB9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwLCBjbGFzcyBfQXJnPgpp bmxpbmUgY29uc3RfbWVtX2Z1bjFfdDxfUmV0LF9UcCxfQXJnPiBtZW1fZnVuMShfUmV0IChfVHA6 OipfX2YpKF9BcmcpIGNvbnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAs X0FyZz4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KaW5saW5lIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW4xX3JlZihfUmV0 IChfVHA6OipfX2YpKF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3JlZl90PF9SZXQsX1RwLF9B cmc+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmlubGluZSBjb25zdF9tZW1fZnVuMV9yZWZfdDxfUmV0LF9UcCxfQXJnPgptZW1fZnVuMV9yZWYo X1JldCAoX1RwOjoqX19mKShfQXJnKSBjb25zdCkKICB7IHJldHVybiBjb25zdF9tZW1fZnVuMV9y ZWZfdDxfUmV0LF9UcCxfQXJnPihfX2YpOyB9Cgp9CiMgNTEgIi91c3IvaW5jbHVkZS9nKystdjMv Yml0cy9zdGRfZnVuY3Rpb25hbC5oIiAyIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2crKy12My9mdW5j dGlvbmFsIiAyIDMKIyA0MSAiRklUU1V0aWwuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L3ZhbGFycmF5IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2crKy12My92YWxhcnJheSIgMwojIDEg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMSAzCiMgMzYgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM4ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c3RkX2NtYXRoLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFy cmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfY3N0ZGxpYi5oIiAx IDMKIyA0MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMSAzCiMgNjAgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJpYy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAxIDMKIyA2MSAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL3N0ZF9udW1lcmljLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfY3N0ZGRlZi5oIiAxIDMKIyA2MiAiL3Vzci9pbmNsdWRlL2crKy12My9i aXRzL3N0ZF9udW1lcmljLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf aXRlcmF0b3IuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfbnVtZXJp Yy5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEg MwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9udW1lcmljLmgiIDEgMwojIDY0ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RsX251bWVyaWMuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKCnRlbXBs YXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvciwgY2xhc3MgX1RwPgpfVHAgYWNjdW11bGF0ZShfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIF9UcCBfX2luaXQpCnsK CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAg ICBfX2luaXQgPSBfX2luaXQgKyAqX19maXJzdDsKICByZXR1cm4gX19pbml0Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IsIGNsYXNzIF9UcCwgY2xhc3MgX0JpbmFyeU9wZXJhdGlv bj4KX1RwIGFjY3VtdWxhdGUoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LCBfVHAgX19pbml0LAogICAgICAgICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5h cnlfb3ApCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19f Zmlyc3QpCiAgICBfX2luaXQgPSBfX2JpbmFyeV9vcChfX2luaXQsICpfX2ZpcnN0KTsKICByZXR1 cm4gX19pbml0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IxLCBjbGFzcyBfSW5w dXRJdGVyYXRvcjIsIGNsYXNzIF9UcD4KX1RwIGlubmVyX3Byb2R1Y3QoX0lucHV0SXRlcmF0b3Ix IF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICBfSW5w dXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQpCnsKCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19m aXJzdDIpCiAgICBfX2luaXQgPSBfX2luaXQgKyAoKl9fZmlyc3QxICogKl9fZmlyc3QyKTsKICBy ZXR1cm4gX19pbml0Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3IxLCBjbGFzcyBf SW5wdXRJdGVyYXRvcjIsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVyYXRp b24xLCBjbGFzcyBfQmluYXJ5T3BlcmF0aW9uMj4KX1RwIGlubmVyX3Byb2R1Y3QoX0lucHV0SXRl cmF0b3IxIF9fZmlyc3QxLCBfSW5wdXRJdGVyYXRvcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg ICBfSW5wdXRJdGVyYXRvcjIgX19maXJzdDIsIF9UcCBfX2luaXQsCiAgICAgICAgICAgICAgICAg X0JpbmFyeU9wZXJhdGlvbjEgX19iaW5hcnlfb3AxLAogICAgICAgICAgICAgICAgIF9CaW5hcnlP cGVyYXRpb24yIF9fYmluYXJ5X29wMikKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7Cgog IGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAg IF9faW5pdCA9IF9fYmluYXJ5X29wMShfX2luaXQsIF9fYmluYXJ5X29wMigqX19maXJzdDEsICpf X2ZpcnN0MikpOwogIHJldHVybiBfX2luaXQ7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yLCBjbGFzcyBfVHA+Cl9PdXRwdXRJdGVyYXRvcgpf X3BhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9UcCopCnsKICBfVHAg X192YWx1ZSA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBf X3ZhbHVlID0gX192YWx1ZSArICpfX2ZpcnN0OwogICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwog IH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9y LCBjbGFzcyBfT3V0cHV0SXRlcmF0b3I+Cl9PdXRwdXRJdGVyYXRvcgpwYXJ0aWFsX3N1bShfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9P dXRwdXRJdGVyYXRvciBfX3Jlc3VsdCkKewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgaWYgKF9f Zmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgcmV0dXJuIF9fcGFydGlhbF9zdW0oX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX192YWx1 ZV90eXBlKF9fZmlyc3QpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFz cyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9UcCwKICAgICAgICAgIGNsYXNzIF9CaW5hcnlPcGVy YXRpb24+Cl9PdXRwdXRJdGVyYXRvcgpfX3BhcnRpYWxfc3VtKF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICBfT3V0cHV0SXRlcmF0b3Ig X19yZXN1bHQsIF9UcCosIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApCnsKICBfVHAgX192 YWx1ZSA9ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfX3Zh bHVlID0gX19iaW5hcnlfb3AoX192YWx1ZSwgKl9fZmlyc3QpOwogICAgKisrX19yZXN1bHQgPSBf X3ZhbHVlOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1 dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9CaW5hcnlPcGVyYXRpb24+ Cl9PdXRwdXRJdGVyYXRvcgpwYXJ0aWFsX3N1bShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5w dXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwg X0JpbmFyeU9wZXJhdGlvbiBfX2JpbmFyeV9vcCkKewoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAg aWYgKF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7CiAgcmV0dXJuIF9fcGFydGlhbF9zdW0oX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwg X192YWx1ZV90eXBlKF9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgIF9fYmluYXJ5X29w KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0 b3IsIGNsYXNzIF9UcD4KX091dHB1dEl0ZXJhdG9yCl9fYWRqYWNlbnRfZGlmZmVyZW5jZShfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9UcCopCnsKICBfVHAgX192YWx1ZSA9 ICpfX2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfVHAgX190bXAg PSAqX19maXJzdDsKICAgICorK19fcmVzdWx0ID0gX190bXAgLSBfX3ZhbHVlOwogICAgX192YWx1 ZSA9IF9fdG1wOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9J bnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3I+Cl9PdXRwdXRJdGVyYXRvcgphZGph Y2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgX0lucHV0SXRlcmF0b3IgX19sYXN0LCBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQpCnsKCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVz dWx0OwogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX2FkamFjZW50X2RpZmZlcmVu Y2UoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVy YXRvciwgY2xhc3MgX091dHB1dEl0ZXJhdG9yLCBjbGFzcyBfVHAsCiAgICAgICAgICBjbGFzcyBf QmluYXJ5T3BlcmF0aW9uPgpfT3V0cHV0SXRlcmF0b3IKX19hZGphY2VudF9kaWZmZXJlbmNlKF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9PdXRwdXRJdGVyYXRvciBfX3Jlc3VsdCwgX1RwKiwKICAgICAgICAgICAgICAg ICAgICAgIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3ApIHsKICBfVHAgX192YWx1ZSA9ICpf X2ZpcnN0OwogIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBfVHAgX190bXAgPSAq X19maXJzdDsKICAgICorK19fcmVzdWx0ID0gX19iaW5hcnlfb3AoX190bXAsIF9fdmFsdWUpOwog ICAgX192YWx1ZSA9IF9fdG1wOwogIH0KICByZXR1cm4gKytfX3Jlc3VsdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9JbnB1dEl0ZXJhdG9yLCBjbGFzcyBfT3V0cHV0SXRlcmF0b3IsIGNsYXNzIF9CaW5h cnlPcGVyYXRpb24+Cl9PdXRwdXRJdGVyYXRvcgphZGphY2VudF9kaWZmZXJlbmNlKF9JbnB1dEl0 ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICBfT3V0cHV0SXRlcmF0b3IgX19yZXN1bHQsIF9CaW5hcnlPcGVyYXRpb24gX19iaW5hcnlfb3Ap CnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCgogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJu IF9fcmVzdWx0OwogICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogIHJldHVybiBfX2FkamFjZW50X2Rp ZmZlcmVuY2UoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fdmFsdWVfdHlwZShfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fYmluYXJ5X29wKTsKfQoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9J bnRlZ2VyLCBjbGFzcyBfTW9ub2lkT3BlcmF0aW9uPgpfVHAgX19wb3dlcihfVHAgX194LCBfSW50 ZWdlciBfX24sIF9Nb25vaWRPcGVyYXRpb24gX19tb25vaWRfb3ApCnsKICBpZiAoX19uID09IDAp CiAgICByZXR1cm4gaWRlbnRpdHlfZWxlbWVudChfX21vbm9pZF9vcCk7CiAgZWxzZSB7CiAgICB3 aGlsZSAoKF9fbiAmIDEpID09IDApIHsKICAgICAgX19uID4+PSAxOwogICAgICBfX3ggPSBfX21v bm9pZF9vcChfX3gsIF9feCk7CiAgICB9CgogICAgX1RwIF9fcmVzdWx0ID0gX194OwogICAgX19u ID4+PSAxOwogICAgd2hpbGUgKF9fbiAhPSAwKSB7CiAgICAgIF9feCA9IF9fbW9ub2lkX29wKF9f eCwgX194KTsKICAgICAgaWYgKChfX24gJiAxKSAhPSAwKQogICAgICAgIF9fcmVzdWx0ID0gX19t b25vaWRfb3AoX19yZXN1bHQsIF9feCk7CiAgICAgIF9fbiA+Pj0gMTsKICAgIH0KICAgIHJldHVy biBfX3Jlc3VsdDsKICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9JbnRlZ2VyPgpp bmxpbmUgX1RwIF9fcG93ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uKQp7CiAgcmV0dXJuIF9fcG93 ZXIoX194LCBfX24sIG11bHRpcGxpZXM8X1RwPigpKTsKfQoKCgoKdGVtcGxhdGUgPGNsYXNzIF9U cCwgY2xhc3MgX0ludGVnZXIsIGNsYXNzIF9Nb25vaWRPcGVyYXRpb24+CmlubGluZSBfVHAgcG93 ZXIoX1RwIF9feCwgX0ludGVnZXIgX19uLCBfTW9ub2lkT3BlcmF0aW9uIF9fbW9ub2lkX29wKQp7 CiAgcmV0dXJuIF9fcG93ZXIoX194LCBfX24sIF9fbW9ub2lkX29wKTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0ludGVnZXI+CmlubGluZSBfVHAgcG93ZXIoX1RwIF9feCwgX0ludGVn ZXIgX19uKQp7CiAgcmV0dXJuIF9fcG93ZXIoX194LCBfX24pOwp9CgoKCnRlbXBsYXRlIDxjbGFz cyBfRm9yd2FyZEl0ZXIsIGNsYXNzIF9UcD4Kdm9pZAppb3RhKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBfVHAgX192YWx1ZSkKewoKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKCiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQogICAgKl9fZmlyc3QrKyA9IF9f dmFsdWUrKzsKfQoKfQojIDY1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX251bWVyaWMu aCIgMiAzCiMgNDIgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAz CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9mdW5jdGlvbmFsLmgiIDEgMwojIDQz ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9nKystdjMvYml0cy9zdGRfYWxnb3JpdGhtLmgiIDEgMwojIDQ0ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgICB0 ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPiBjbGFzcyBfRXhwcjsKCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHAxLCB0eXBlbmFtZSBfVHAyPiBjbGFzcyBfVmFsQXJyYXk7CgogICAg dGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLAogICAgICAgIHRlbXBsYXRlPGNs YXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IHN0cnVjdCBfVW5DbG9zOwoKICAg IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwKICAgICAgICB0ZW1wbGF0ZTxj bGFzcywgY2xhc3M+IGNsYXNzIF9NZXRhMSwKICAgICAgICB0ZW1wbGF0ZTxjbGFzcywgY2xhc3M+ IGNsYXNzIF9NZXRhMiwKICAgICAgICBjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9C aW5DbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEs IGNsYXNzIF9Eb20+IGNsYXNzIF9TQ2xvczsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcywg Y2xhc3M+IGNsYXNzIF9NZXRhLCBjbGFzcyBfRG9tPiBjbGFzcyBfR0Nsb3M7CgogICAgdGVtcGxh dGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBjbGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4gY2xhc3Mg X0lDbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgX01ldGEs IGNsYXNzIF9Eb20+IGNsYXNzIF9WYWxGdW5DbG9zOwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNs YXNzLCBjbGFzcz4gY2xhc3MgX01ldGEsIGNsYXNzIF9Eb20+IGNsYXNzIF9SZWZGdW5DbG9zOwoK ICAgIHRlbXBsYXRlPGNsYXNzIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzOwogICAgdGVtcGxhdGU8 Y2xhc3MgX1RwPiBzdHJ1Y3QgX0JpdHdpc2VfYW5kOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBz dHJ1Y3QgX0JpdHdpc2Vfb3I7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfQml0d2lz ZV94b3I7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfQml0d2lzZV9ub3Q7CiAgICB0 ZW1wbGF0ZTxjbGFzcyBfVHA+IHN0cnVjdCBfU2hpZnRfbGVmdDsKICAgIHRlbXBsYXRlPGNsYXNz IF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodDsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNz IHZhbGFycmF5OwogICAgY2xhc3Mgc2xpY2U7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNz IHNsaWNlX2FycmF5OwogICAgY2xhc3MgZ3NsaWNlOwogICAgdGVtcGxhdGU8Y2xhc3MgX1RwPiBj bGFzcyBnc2xpY2VfYXJyYXk7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIG1hc2tfYXJy YXk7CiAgICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIGluZGlyZWN0X2FycmF5OwoKfQoKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMSAzCiMgMzYgIi91 c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9hcnJheS5oIiAzCgojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytjb25maWcuaCIgMSAzCiMgMzgg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9hcnJheS5oIiAyIDMKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvY3BwX3R5cGVfdHJhaXRzLmgiIDEgMwojIDM5ICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3N0ZF9jc3RkbGliLmgiIDEgMwojIDQwICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3N0ZF9jc3RyaW5nLmgiIDEgMwojIDQxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJy YXlfYXJyYXkuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9uZXciIDEgMwojIDQyICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfYXJyYXkuaCIgMiAzCgpuYW1lc3BhY2Ug c3RkCnsKCgoKCgoKICBpbmxpbmUgdm9pZCoKICBfX3ZhbGFycmF5X2dldF9tZW1vcnkoc2l6ZV90 IF9fbikKICB7IHJldHVybiBvcGVyYXRvciBuZXcoX19uKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgaW5saW5lIF9UcCpfX3Jlc3RyaWN0X18KICBfX3ZhbGFycmF5X2dldF9zdG9yYWdl KHNpemVfdCBfX24pCiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PF9UcCpfX3Jlc3RyaWN0X18+ CiAgICAgIChfX3ZhbGFycmF5X2dldF9tZW1vcnkoX19uICogc2l6ZW9mKF9UcCkpKTsKICB9CgoK ICBpbmxpbmUgdm9pZAogIF9fdmFsYXJyYXlfcmVsZWFzZV9tZW1vcnkodm9pZCogX19wKQogIHsg b3BlcmF0b3IgZGVsZXRlKF9fcCk7IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGJvb2w+ CiAgc3RydWN0IF9BcnJheV9kZWZhdWx0X2N0b3IKICB7CgoKICAgIGlubGluZSBzdGF0aWMgdm9p ZAogICAgX1NfZG9faXQoX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3RfXyBf X2UpCiAgICB7IHdoaWxlIChfX2IgIT0gX19lKSBuZXcoX19iKyspIF9UcCgpOyB9CiAgfTsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIHN0cnVjdCBfQXJyYXlfZGVmYXVsdF9jdG9yPF9UcCwg dHJ1ZT4KICB7CgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBfU19kb19pdChfVHAqIF9fcmVz dHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkKICAgIHsgbWVtc2V0KF9fYiwgMCwg KF9fZSAtIF9fYikqc2l6ZW9mKF9UcCkpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogIGlubGluZSB2b2lkCiAgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0cnVjdChfVHAqIF9fcmVz dHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSkKICB7CiAgICBfQXJyYXlfZGVmYXVs dF9jdG9yPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2Rv X2l0KF9fYiwgX19lKTsKICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KICBz dHJ1Y3QgX0FycmF5X2luaXRfY3RvcgogIHsKCgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBf U19kb19pdChfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIF9UcCogX19yZXN0cmljdF9fIF9fZSwgY29u c3QgX1RwIF9fdCkKICAgIHsgd2hpbGUgKF9fYiAhPSBfX2UpIG5ldyhfX2IrKykgX1RwKF9fdCk7 IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9BcnJheV9pbml0X2N0 b3I8X1RwLCB0cnVlPgogIHsKICAgIGlubGluZSBzdGF0aWMgdm9pZAogICAgX1NfZG9faXQoX1Rw KiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsIGNvbnN0IF9UcCBfX3Qp CiAgICB7IHdoaWxlIChfX2IgIT0gX19lKSAqX19iKysgPSBfX3Q7IH0KICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGxfY29uc3RydWN0 KF9UcCogX19yZXN0cmljdF9fIF9fYiwgX1RwKiBfX3Jlc3RyaWN0X18gX19lLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwIF9fdCkKICB7CiAgICBfQXJyYXlfaW5pdF9jdG9y PF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2RvX2l0KF9f YiwgX19lLCBfX3QpOwogIH0KCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgYm9vbD4KICBz dHJ1Y3QgX0FycmF5X2NvcHlfY3RvcgogIHsKCgogICAgaW5saW5lIHN0YXRpYyB2b2lkCiAgICBf U19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsIGNvbnN0IF9UcCogX19yZXN0cmlj dF9fIF9fZSwKICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fbykKICAgIHsgd2hpbGUg KF9fYiAhPSBfX2UpIG5ldyhfX28rKykgX1RwKCpfX2IrKyk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgc3RydWN0IF9BcnJheV9jb3B5X2N0b3I8X1RwLCB0cnVlPgogIHsKICAg IGlubGluZSBzdGF0aWMgdm9pZAogICAgX1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18g X19iLCBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsCiAgICAgICAgICAgICBfVHAqIF9fcmVz dHJpY3RfXyBfX28pCiAgICB7IG1lbWNweShfX28sIF9fYiwgKF9fZSAtIF9fYikqc2l6ZW9mKF9U cCkpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192 YWxhcnJheV9jb3B5X2NvbnN0cnVjdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2IsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2UsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfVHAqIF9fcmVzdHJpY3RfXyBfX28pCiAgewogICAgX0Fy cmF5X2NvcHlfY3RvcjxfVHAsIF9faXNfZnVuZGFtZW50YWw8X1RwPjo6X01fdHlwZT46OgogICAg ICBfU19kb19pdChfX2IsIF9fZSwgX19vKTsKICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChjb25zdCBfVHAqIF9f cmVzdHJpY3RfXyBfX2EsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fcywgX1RwKiBfX3Jlc3RyaWN0X18gX19vKQogIHsKICAgIGlmIChfX2lzX2Z1bmRh bWVudGFsPF9UcD46Ol9NX3R5cGUpCiAgICAgIHdoaWxlIChfX24tLSkgeyAqX19vKysgPSAqX19h OyBfX2EgKz0gX19zOyB9CiAgICBlbHNlCiAgICAgIHdoaWxlIChfX24tLSkgeyBuZXcoX19vKysp IF9UcCgqX19hKTsgX19hICs9IF9fczsgfQogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICBpbmxpbmUgdm9pZAogIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QgKGNvbnN0IF9UcCogX19y ZXN0cmljdF9fIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzaXplX3Qq IF9fcmVzdHJpY3RfXyBfX2ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jl c3RyaWN0X18gX19vLCBzaXplX3QgX19uKQogIHsKICAgIGlmIChfX2lzX2Z1bmRhbWVudGFsPF9U cD46Ol9NX3R5cGUpCiAgICAgIHdoaWxlIChfX24tLSkgKl9fbysrID0gX19hWypfX2krK107CiAg ICBlbHNlCiAgICAgIHdoaWxlIChfX24tLSkgbmV3IChfX28rKykgX1RwKF9fYVsqX19pKytdKTsK ICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5 X2Rlc3Ryb3lfZWxlbWVudHMoX1RwKiBfX3Jlc3RyaWN0X18gX19iLCBfVHAqIF9fcmVzdHJpY3Rf XyBfX2UpCiAgewogICAgaWYgKCFfX2lzX2Z1bmRhbWVudGFsPF9UcD46Ol9NX3R5cGUpCiAgICAg IHdoaWxlIChfX2IgIT0gX19lKSB7IF9fYi0+fl9UcCgpOyArK19fYjsgfQogIH0KCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICB2b2lkCiAgX192YWxhcnJheV9maWxsIChfVHAqIF9fcmVzdHJp Y3RfXyBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgd2hpbGUgKF9fbi0tKSAq X19hKysgPSBfX3Q7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgdm9pZAog IF9fdmFsYXJyYXlfZmlsbCAoX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLAogICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fcywgY29uc3QgX1RwJiBfX3QpCiAgeyBmb3IgKHNpemVf dCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9fYSs9X19zKSAqX19hID0gX190OyB9CgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGwoX1RwKiBf X3Jlc3RyaWN0X18gX19hLCBjb25zdCBzaXplX3QqIF9fcmVzdHJpY3RfXyBfX2ksCiAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgZm9yIChzaXplX3QgX19q PTA7IF9fajxfX247ICsrX19qLCArK19faSkgX19hWypfX2ldID0gX190OyB9CgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCBib29sPgogIHN0cnVjdCBfQXJyYXlfY29waWVyCiAgewogICAgaW5s aW5lIHN0YXRpYyB2b2lkCiAgICBfU19kb19pdChjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2Es IHNpemVfdCBfX24sIF9UcCogX19yZXN0cmljdF9fIF9fYikKICAgIHsgd2hpbGUgKF9fbi0tKSAq X19iKysgPSAqX19hKys7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgc3RydWN0 IF9BcnJheV9jb3BpZXI8X1RwLCB0cnVlPgogIHsKICAgIGlubGluZSBzdGF0aWMgdm9pZAogICAg X1NfZG9faXQoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXplX3QgX19uLCBfVHAqIF9f cmVzdHJpY3RfXyBfX2IpCiAgICB7IG1lbWNweSAoX19iLCBfX2EsIF9fbiAqIHNpemVvZiAoX1Rw KSk7IH0KICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3Zh bGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwKICAg ICAgICAgICAgICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYikKICB7CiAgICBfQXJyYXlfY29w aWVyPF9UcCwgX19pc19mdW5kYW1lbnRhbDxfVHA+OjpfTV90eXBlPjo6CiAgICAgIF9TX2RvX2l0 KF9fYSwgX19uLCBfX2IpOwogIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUg dm9pZAogIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBzaXpl X3QgX19uLCBzaXplX3QgX19zLAogICAgICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3RyaWN0X18g X19iKQogIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYiwgX19hICs9 IF9fcykgKl9fYiA9ICpfX2E7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUg dm9pZAogIF9fdmFsYXJyYXlfY29weSAoY29uc3QgX1RwKiBfX3Jlc3RyaWN0X18gX19hLCBfVHAq IF9fcmVzdHJpY3RfXyBfX2IsCiAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBzaXplX3Qg X19zKQogIHsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fYSwgX19iKz1f X3MpICpfX2IgPSAqX19hOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZv aWQKICBfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwKICAgICAg ICAgICAgICAgICAgIGNvbnN0IHNpemVfdCogX19yZXN0cmljdF9fIF9faSwKICAgICAgICAgICAg ICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fbikKICB7IGZvciAoc2l6ZV90 IF9faj0wOyBfX2o8X19uOyArK19faiwgKytfX2IsICsrX19pKSAqX19iID0gX19hWypfX2ldOyB9 CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2Nv cHkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYSwgc2l6ZV90IF9fbiwKICAgICAgICAgICAg ICAgICAgIF9UcCogX19yZXN0cmljdF9fIF9fYiwgY29uc3Qgc2l6ZV90KiBfX3Jlc3RyaWN0X18g X19pKQogIHsgZm9yIChzaXplX3QgX19qPTA7IF9fajxfX247ICsrX19qLCArK19fYSwgKytfX2kp IF9fYlsqX19pXSA9ICpfX2E7IH0KIyAyNzkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxh cnJheV9hcnJheS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICBf X3ZhbGFycmF5X3N1bShjb25zdCBfVHAqIF9fcmVzdHJpY3RfXyBfX2YsIGNvbnN0IF9UcCogX19y ZXN0cmljdF9fIF9fbCkKICB7CiAgICBfVHAgX19yID0gX1RwKCk7CiAgICB3aGlsZSAoX19mICE9 IF9fbCkgX19yICs9ICpfX2YrKzsKICAgIHJldHVybiBfX3I7CiAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogIGlubGluZSBfVHAKICBfX3ZhbGFycmF5X3Byb2R1Y3QoY29uc3QgX1RwKiBf X3Jlc3RyaWN0X18gX19mLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBfVHAqIF9fcmVzdHJp Y3RfXyBfX2wpCiAgewogICAgX1RwIF9fciA9IF9UcCgxKTsKICAgIHdoaWxlIChfX2YgIT0gX19s KSBfX3IgPSBfX3IgKiAqX19mKys7CiAgICByZXR1cm4gX19yOwogIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9UYT4KICBpbmxpbmUgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlCiAgX192YWxhcnJh eV9taW4oY29uc3QgX1RhJiBfX2EpCiAgewogICAgc2l6ZV90IF9fcyA9IF9fYS5zaXplKCk7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIF9UYTo6dmFsdWVfdHlwZSBfVmFsdWVfdHlwZTsKICAgIF9WYWx1 ZV90eXBlIF9fciA9IF9fcyA9PSAwID8gX1ZhbHVlX3R5cGUoKSA6IF9fYVswXTsKICAgIGZvciAo c2l6ZV90IF9faSA9IDE7IF9faSA8IF9fczsgKytfX2kpCiAgICAgIHsKICAgICAgICBfVmFsdWVf dHlwZSBfX3QgPSBfX2FbX19pXTsKICAgICAgICBpZiAoX190IDwgX19yKQogICAgICAgICAgX19y ID0gX190OwogICAgICB9CiAgICByZXR1cm4gX19yOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RhPgogIGlubGluZSB0eXBlbmFtZSBfVGE6OnZhbHVlX3R5cGUKICBfX3ZhbGFycmF5X21heChj b25zdCBfVGEmIF9fYSkKICB7CiAgICBzaXplX3QgX19zID0gX19hLnNpemUoKTsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgX1RhOjp2YWx1ZV90eXBlIF9WYWx1ZV90eXBlOwogICAgX1ZhbHVlX3R5cGUg X19yID0gX19zID09IDAgPyBfVmFsdWVfdHlwZSgpIDogX19hWzBdOwogICAgZm9yIChzaXplX3Qg X19pID0gMTsgX19pIDwgX19zOyArK19faSkKICAgICAgewogICAgICAgIF9WYWx1ZV90eXBlIF9f dCA9IF9fYVtfX2ldOwogICAgICAgIGlmIChfX3QgPiBfX3IpCiAgICAgICAgICBfX3IgPSBfX3Q7 CiAgICAgIH0KICAgIHJldHVybiBfX3I7CiAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgc3RydWN0IF9BcnJheQogIHsKICAgIGV4cGxpY2l0IF9BcnJheSAoc2l6ZV90KTsKICAg IGV4cGxpY2l0IF9BcnJheSAoX1RwKiBjb25zdCBfX3Jlc3RyaWN0X18pOwogICAgZXhwbGljaXQg X0FycmF5IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICBfQXJyYXkgKGNvbnN0IF9UcCogX19y ZXN0cmljdF9fLCBzaXplX3QpOwoKICAgIF9UcCogYmVnaW4gKCkgY29uc3Q7CgogICAgX1RwKiBj b25zdCBfX3Jlc3RyaWN0X18gX01fZGF0YTsKICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2ZpbGwgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fbiwgY29uc3QgX1RwJiBfX3QpCiAgeyBfX3ZhbGFycmF5X2ZpbGwgKF9fYS5fTV9kYXRhLCBf X24sIF9fdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192 YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIGNv bnN0IF9UcCYgX190KQogIHsgX192YWxhcnJheV9maWxsIChfX2EuX01fZGF0YSwgX19uLCBfX3Ms IF9fdCk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2b2lkCiAgX192YWxh cnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwKICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KQogIHsgX192YWxhcnJheV9maWxs IChfX2EuX01fZGF0YSwgX19pLl9NX2RhdGEsIF9fbiwgX190KTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9f YSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKQogIHsgX192YWxhcnJheV9jb3B5IChfX2Eu X01fZGF0YSwgX19uLCBfX2IuX01fZGF0YSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSB2b2lkCiAgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikKICB7IF9fdmFsYXJyYXlfY29weShfX2Eu X01fZGF0YSwgX19uLCBfX3MsIF9fYi5fTV9kYXRhKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgX0Fy cmF5PF9UcD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKQogIHsgX192YWxhcnJheV9jb3B5 IChfX2EuX01fZGF0YSwgX19iLl9NX2RhdGEsIF9fbiwgX19zKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgaW5saW5lIHZvaWQKICBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9f YSwgX0FycmF5PHNpemVfdD4gX19pLAogICAgICAgICAgICAgICAgICAgX0FycmF5PF9UcD4gX19i LCBzaXplX3QgX19uKQogIHsgX192YWxhcnJheV9jb3B5IChfX2EuX01fZGF0YSwgX19pLl9NX2Rh dGEsIF9fYi5fTV9kYXRhLCBfX24pOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxp bmUgdm9pZAogIF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBf QXJyYXk8X1RwPiBfX2IsCiAgICAgICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpCiAg eyBfX3ZhbGFycmF5X2NvcHkgKF9fYS5fTV9kYXRhLCBfX24sIF9fYi5fTV9kYXRhLCBfX2kuX01f ZGF0YSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZQogIF9BcnJheTxfVHA+ OjpfQXJyYXkgKHNpemVfdCBfX24pCiAgICA6IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFn ZTxfVHA+KF9fbikpCiAgeyBfX3ZhbGFycmF5X2RlZmF1bHRfY29uc3RydWN0KF9NX2RhdGEsIF9N X2RhdGEgKyBfX24pOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUKICBfQXJy YXk8X1RwPjo6X0FycmF5IChfVHAqIGNvbnN0IF9fcmVzdHJpY3RfXyBfX3ApIDogX01fZGF0YSAo X19wKSB7fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9BcnJheTxfVHA+Ojpf QXJyYXkgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKICAgICAgOiBfTV9kYXRhIChfX3YuX01f ZGF0YSkge30KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZQogIF9BcnJheTxfVHA+ OjpfQXJyYXkgKGNvbnN0IF9UcCogX19yZXN0cmljdF9fIF9fYiwgc2l6ZV90IF9fcykKICAgIDog X01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zKSkKICB7IF9fdmFsYXJyYXlf Y29weV9jb25zdHJ1Y3QoX19iLCBfX3MsIF9NX2RhdGEpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICBpbmxpbmUgX1RwKgogIF9BcnJheTxfVHA+OjpiZWdpbiAoKSBjb25zdAogIHsgcmV0 dXJuIF9NX2RhdGE7IH0KIyA1NTMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9h cnJheS5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21l bnRlZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7 IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAq X19wICs9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9h dWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBf X2IpIHsgX1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsg X19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3AsICsrX19xKSAqX19wICs9ICpfX3E7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfcGx1cyAo X0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikg eyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf X2ksICsrX19wKSAqX19wICs9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9wbHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19w Kz1fX3MsICsrX19xKSAqX19wICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9U cD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7 IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBf X3ErPV9fcykgKl9fcCArPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0Rv bT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9f cywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykg Kl9fcCArPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B cnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ks IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBm b3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwg KytfX3EpIF9fYS5fTV9kYXRhWypfX2pdICs9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6 ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3Ag KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k YXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICs9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBs YXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3BsdXMg KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBf VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChz aXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gKz0g X19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf cGx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2Is IHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k YXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf X3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wICs9 ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9w bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5 PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2Rh dGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19f cCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgKz0g Kl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf YXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3Qg X0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRh KTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsr X19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAr PSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAm IF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyAr K19fcCkgKl9fcCAtPSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf QXJyYXlfYXVnbWVudGVkX21pbnVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJh eTxfVHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5f TV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgLT0gKl9fcTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9taW51cyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6 ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19p PF9fbjsgKytfX2ksICsrX19wKSAqX19wIC09IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h LCBzaXplX3QgX19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9f Yi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19f cypfX247IF9fcCs9X19zLCArK19fcSkgKl9fcCAtPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5PF9UcD4gX19h LCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9f Yi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19f bjsgKytfX3AsIF9fcSs9X19zKSAqX19wIC09ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9f YSwgc2l6ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsg X1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19p LCBfX3ArPV9fcykgKl9fcCAtPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5 PHNpemVfdD4gX19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9f Yi5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRh K19fbjsgKytfX2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSAtPSAqX19xOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX0FycmF5 PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9f aSkgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRh OyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3ApICpfX3AgLT0gX19iLl9NX2RhdGFb Kl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9h dWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25z dCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5f TV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9N X2RhdGFbKl9fal0gLT0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B cnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2Iu X01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg KytfX3A7IH0gKl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B cnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5 PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9U cCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2Eu X01fZGF0YStfX247ICsrX19wLCArK29rLCArK19fcSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsg KytfX3E7IH0gKl9fcCAtPSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBf RG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5 PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJv b2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3Qg X19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytv azsgKytfX3A7IH0gKl9fcCAtPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2Es IHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7 IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICo9IF9fdDsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5 PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2Eu X01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg KytfX3AsICsrX19xKSAqX19wICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19h LCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19h Ll9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19w ICo9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVf dCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9U cCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsr X19xKSAqX19wICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf QXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4g X19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZv ciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3Er PV9fcykgKl9fcCAqPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4g dm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Ag KF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9f cykgKl9fcCAqPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6 ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9N X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u OyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdICo9ICpfX3E7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJh eTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBf X2kpIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0 YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wICo9IF9fYi5fTV9kYXRh WypfX2pdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlf YXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19p LCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2og KF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikg X19hLl9NX2RhdGFbKl9fal0gKj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2 b2lkIF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8 Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5f TV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0 YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpv aykgeyArK29rOyArK19fcDsgfSAqX19wICo9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPiBfX2EsIHNp emVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAo X19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5f TV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUg KCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgKj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVu YW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9B cnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYg X19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5f TV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkg eyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAqPSBfX2VbX19pXTsgfSB9CnRl bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVz IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wIC89IF9f dDsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf ZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsg X1RwKiBfX3AgPSBfX2EuX01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9f Yi5fTV9kYXRhK19fbjsgKytfX3AsICsrX19xKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0Fy cmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBf VHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ks ICsrX19wKSAqX19wIC89IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBf X24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEp OyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19w Kz1fX3MsICsrX19xKSAqX19wIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5 PF9UcD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0 YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19w LCBfX3ErPV9fcykgKl9fcCAvPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3Mg X0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6 ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBf X3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3Ar PV9fcykgKl9fcCAvPSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2 b2lkIF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6 ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9N X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u OyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pdIC89ICpfX3E7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxf VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kp IHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsg X19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wIC89IF9fYi5fTV9kYXRhWypf X2pdOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn bWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25z dCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5f TV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9N X2RhdGFbKl9fal0gLz0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9B cnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19t LCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsg X1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9f Yi5fTV9kYXRhK19fbjsgKytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29r OyArK19fcDsgfSAqX19wIC89ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQg X0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9B cnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEp OyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8 X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsr b2s7ICsrX19xOyB9ICpfX3AgLz0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xh c3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+IF9fYSwg X0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19u KSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChz aXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2sp IHsgKytvazsgKytfX3A7IH0gKl9fcCAvPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBf X2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1RwKiBfX3A9X19hLl9NX2Rh dGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wICU9IF9fdDsgfSB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5 PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2Eu X01fZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg KytfX3AsICsrX19xKSAqX19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFz cyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBj b25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9N X2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wICU9 IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1 Z21lbnRlZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3Ms IF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19w PV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAq X19wICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlf YXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9UcD4gX19iLCBzaXpl X3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBfX3ErPV9fcykgKl9f cCAlPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJy YXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3Qg X0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRh KTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAlPSBf X2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJh eTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNp emVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3Ep IF9fYS5fTV9kYXRhWypfX2pdICU9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRh K19fbjsgKytfX2osICsrX19wKSAqX19wICU9IF9fYi5fTV9kYXRhWypfX2pdOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMg KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBf VHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChz aXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJT0g X19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRf bW9kdWx1cyAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBf X2IsIHNpemVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5f TV9kYXRhKTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsg KytfX3EsICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19w ICU9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9tb2R1bHVzIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwg X0FycmF5PGJvb2w+IF9fbSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19i Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u OyArK19fcCwgKytvaywgKytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpf X3AgJT0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBf QXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9f bSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9f bS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9f aTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7 IH0gKl9fcCAlPSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZv aWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29u c3QgX1RwJiBfX3QpIHsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRh K19fbjsgKytfX3ApICpfX3AgXj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwg X0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9 X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCBePSAq X19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVn bWVudGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwg c2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg X19pPF9fbjsgKytfX2ksICsrX19wKSAqX19wIF49IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9f YSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChf X2IuX01fZGF0YSk7IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStf X3MqX19uOyBfX3ArPV9fcywgKytfX3EpICpfX3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2Es IF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19i Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19u OyArK19fcCwgX19xKz1fX3MpICpfX3AgXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwg c2l6ZV90IF9fcywgY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1Rw KiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBf X3ArPV9fcykgKl9fcCBePSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXpl X3Q+IF9faSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01f ZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247 ICsrX19qLCArK19fcSkgX19hLl9NX2RhdGFbKl9fal0gXj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBf X2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9U cCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxf X2kuX01fZGF0YStfX247ICsrX19qLCArK19fcCkgKl9fcCBePSBfX2IuX01fZGF0YVsqX19qXTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl ZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxf RG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsg Zm9yIChzaXplX3QgX19rPTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9f al0gXj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdt ZW50ZWRfeG9yIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+ IF9fYiwgc2l6ZV90IF9fbikgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19h Ll9NX2RhdGEpOyBmb3IgKF9UcCogX19xPV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19u OyArK19fcSwgKytvaywgKytfX3ApIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpf X3AgXj0gKl9fcTsgfSB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVu dGVkX3hvciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9B cnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5f TV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsg KytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19w IF49ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF94b3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29u c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9k YXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247 ICsrX19pLCArK29rLCArK19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9f cCBePSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBjb25zdCBfVHAm IF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyAr K19fcCkgKl9fcCB8PSBfX3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBf QXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf VHA+IF9fYikgeyBfVHAqIF9fcCA9IF9fYS5fTV9kYXRhOyBmb3IgKF9UcCogX19xPV9fYi5fTV9k YXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcCwgKytfX3EpICpfX3AgfD0gKl9fcTsgfSB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9v ciAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9f bikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsg KytfX2ksICsrX19wKSAqX19wIHw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4g aW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3Qg X19uLCBzaXplX3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9f cCs9X19zLCArK19fcSkgKl9fcCB8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8X1Rw PiBfX2IsIHNpemVfdCBfX24sIHNpemVfdCBfX3MpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsg Zm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsIF9f cSs9X19zKSAqX19wIHw9ICpfX3E7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9t PiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywg Y29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5f TV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9f cCB8PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh eV9hdWdtZW50ZWRfb3IgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBfQXJy YXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChz aXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19x KSBfX2EuX01fZGF0YVsqX19qXSB8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19u LCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxzaXplX3Q+IF9faSkgeyBfVHAqIF9fcCAoX19hLl9N X2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9kYXRhOyBfX2o8X19pLl9NX2RhdGErX19u OyArK19faiwgKytfX3ApICpfX3AgfD0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxf VHA+IF9fYSwgX0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2Us IHNpemVfdCBfX24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19r PTA7IF9fazxfX247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gfD0gX19lW19fa107 IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJh eTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19u KSB7IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAo X1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCAr K19fcCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCB8PSAqX19xOyB9IH0g dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3IgKF9BcnJheTxf VHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKSB7 IGJvb2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCArK29rLCArK19f cSkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3E7IH0gKl9fcCB8PSAqX19xOyB9IH0gdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfb3Ig KF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1Rw PiYgX19lLCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9f YS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19f cCkgeyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCB8PSBfX2VbX19pXTsgfSB9 CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQg KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgY29uc3QgX1RwJiBfX3QpIHsgZm9yIChfVHAq IF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3ApICpfX3AgJj0gX190 OyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9h bmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iKSB7IF9UcCog X19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01f ZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCAmPSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcCwgY2xhc3MgX0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4g X19hLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAqIF9fcCAo X19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksICsrX19wKSAq X19wICY9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0Fy cmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgc2l6ZV90IF9f cywgX0FycmF5PF9UcD4gX19iKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoX1RwKiBf X3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX3MqX19uOyBfX3ArPV9fcywgKytfX3Ep ICpfX3AgJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJh eV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90 IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19w PV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgX19xKz1fX3MpICpfX3Ag Jj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywgY29uc3QgX0V4cHI8 X0RvbSxfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9y IChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCBfX3ArPV9fcykgKl9fcCAmPSBfX2VbX19p XTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRf YW5kIChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSwgX0FycmF5PF9UcD4gX19i LCBzaXplX3QgX19uKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7IGZvciAoc2l6ZV90KiBfX2o9 X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCArK19fcSkgX19hLl9NX2Rh dGFbKl9fal0gJj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9B cnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf VHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZv ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr K19fcCkgKl9fcCAmPSBfX2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAs IGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJheTxfVHA+IF9fYSwg X0FycmF5PHNpemVfdD4gX19pLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBf X24pIHsgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsgZm9yIChzaXplX3QgX19rPTA7IF9fazxf X247ICsrX19rLCArK19faikgX19hLl9NX2RhdGFbKl9fal0gJj0gX19lW19fa107IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1RwPiBf X2EsIF9BcnJheTxib29sPiBfX20sIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikgeyBib29s KiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKF9UcCogX19x PV9fYi5fTV9kYXRhOyBfX3E8X19iLl9NX2RhdGErX19uOyArK19fcSwgKytvaywgKytfX3ApIHsg d2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19wOyB9ICpfX3AgJj0gKl9fcTsgfSB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX0FycmF5PF9UcD4gX19h LCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9BcnJheTxib29sPiBfX20pIHsgYm9vbCog b2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChfVHAqIF9fcD1f X2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrb2ssICsrX19xKSB7IHdo aWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19wICY9ICpfX3E7IH0gfSB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9BcnJh eTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19l LCBzaXplX3QgX19uKSB7IGJvb2wqIG9rKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9k YXRhKTsgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK29rLCArK19fcCkgeyB3 aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCAmPSBfX2VbX19pXTsgfSB9CnRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0 IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIGNvbnN0IF9UcCYgX190KSB7IGZvciAoX1Rw KiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wKSAqX19wIDw8PSBf X3Q7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBfQXJyYXlfYXVnbWVudGVk X3NoaWZ0X2xlZnQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19i KSB7IF9UcCogX19wID0gX19hLl9NX2RhdGE7IGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9f cTxfX2IuX01fZGF0YStfX247ICsrX19wLCArK19fcSkgKl9fcCA8PD0gKl9fcTsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9s ZWZ0IChfQXJyYXk8X1RwPiBfX2EsIGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3Qg X19uKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19u OyArK19faSwgKytfX3ApICpfX3AgPDw9IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9U cD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBf X2EsIHNpemVfdCBfX24sIHNpemVfdCBfX3MsIF9BcnJheTxfVHA+IF9fYikgeyBfVHAqIF9fcSAo X19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGEr X19zKl9fbjsgX19wKz1fX3MsICsrX19xKSAqX19wIDw8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8 X1RwPiBfX2EsIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbiwgc2l6ZV90IF9fcykgeyBfVHAq IF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9N X2RhdGErX19uOyArK19fcCwgX19xKz1fX3MpICpfX3AgPDw9ICpfX3E7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAo X0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwg c2l6ZV90IF9fbikgeyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg X19pPF9fbjsgKytfX2ksIF9fcCs9X19zKSAqX19wIDw8PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0Fy cmF5PF9UcD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90 IF9fbikgeyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3IgKHNpemVfdCogX19qPV9faS5fTV9k YXRhOyBfX2o8X19pLl9NX2RhdGErX19uOyArK19faiwgKytfX3EpIF9fYS5fTV9kYXRhWypfX2pd IDw8PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1 Z21lbnRlZF9zaGlmdF9sZWZ0IChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxf VHA+IF9fYiwgX0FycmF5PHNpemVfdD4gX19pKSB7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZv ciAoc2l6ZV90KiBfX2o9X19pLl9NX2RhdGE7IF9fajxfX2kuX01fZGF0YStfX247ICsrX19qLCAr K19fcCkgKl9fcCA8PD0gX19iLl9NX2RhdGFbKl9fal07IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw LCBjbGFzcyBfRG9tPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9U cD4gX19hLCBfQXJyYXk8c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwg c2l6ZV90IF9fbikgeyBzaXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9 MDsgX19rPF9fbjsgKytfX2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA8PD0gX19lW19fa107 IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVm dCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBfQXJyYXk8X1RwPiBfX2IsIHNp emVfdCBfX24pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3AgKF9fYS5fTV9kYXRh KTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3Es ICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wIDw8PSAq X19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hp ZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IsIF9B cnJheTxib29sPiBfX20pIHsgYm9vbCogb2sgKF9fbS5fTV9kYXRhKTsgX1RwKiBfX3EgKF9fYi5f TV9kYXRhKTsgZm9yIChfVHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsg KytfX3AsICsrb2ssICsrX19xKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcTsgfSAqX19w IDw8PSAqX19xOyB9IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPiB2b2lkIF9B cnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4g X19tLCBjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2so X19tLl9NX2RhdGEpOyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsg X19pPF9fbjsgKytfX2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19f cDsgfSAqX19wIDw8PSBfX2VbX19pXTsgfSB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXpl X3QgX19uLCBjb25zdCBfVHAmIF9fdCkgeyBmb3IgKF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8 X19hLl9NX2RhdGErX19uOyArK19fcCkgKl9fcCA+Pj0gX190OyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9U cD4gX19hLCBzaXplX3QgX19uLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3AgPSBfX2EuX01f ZGF0YTsgZm9yIChfVHAqIF9fcT1fX2IuX01fZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytf X3AsICsrX19xKSAqX19wID4+PSAqX19xOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3Mg X0RvbT4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJyYXk8X1RwPiBfX2Es IGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lLCBzaXplX3QgX19uKSB7IF9UcCogX19wIChfX2Eu X01fZGF0YSk7IGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApICpfX3Ag Pj49IF9fZVtfX2ldOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgX0FycmF5 X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBzaXplX3QgX19uLCBzaXpl X3QgX19zLCBfQXJyYXk8X1RwPiBfX2IpIHsgX1RwKiBfX3EgKF9fYi5fTV9kYXRhKTsgZm9yIChf VHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fcypfX247IF9fcCs9X19zLCAr K19fcSkgKl9fcCA+Pj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lk IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PF9U cD4gX19iLCBzaXplX3QgX19uLCBzaXplX3QgX19zKSB7IF9UcCogX19xIChfX2IuX01fZGF0YSk7 IGZvciAoX1RwKiBfX3A9X19hLl9NX2RhdGE7IF9fcDxfX2EuX01fZGF0YStfX247ICsrX19wLCBf X3ErPV9fcykgKl9fcCA+Pj0gKl9fcTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9E b20+IHZvaWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBz aXplX3QgX19zLCBjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBfVHAq IF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytfX2ksIF9f cCs9X19zKSAqX19wID4+PSBfX2VbX19pXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+IF9fYSwgX0Fy cmF5PHNpemVfdD4gX19pLCBfQXJyYXk8X1RwPiBfX2IsIHNpemVfdCBfX24pIHsgX1RwKiBfX3Eg KF9fYi5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1fX2kuX01fZGF0YTsgX19qPF9faS5fTV9k YXRhK19fbjsgKytfX2osICsrX19xKSBfX2EuX01fZGF0YVsqX19qXSA+Pj0gKl9fcTsgfSB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmln aHQgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8 c2l6ZV90PiBfX2kpIHsgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsgZm9yIChzaXplX3QqIF9faj1f X2kuX01fZGF0YTsgX19qPF9faS5fTV9kYXRhK19fbjsgKytfX2osICsrX19wKSAqX19wID4+PSBf X2IuX01fZGF0YVsqX19qXTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZv aWQgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8 c2l6ZV90PiBfX2ksIGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbikgeyBz aXplX3QqIF9faiAoX19pLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2s9MDsgX19rPF9fbjsgKytf X2ssICsrX19qKSBfX2EuX01fZGF0YVsqX19qXSA+Pj0gX19lW19fa107IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiB2b2lkIF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+ IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwgX0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKSB7IGJv b2wqIG9rIChfX20uX01fZGF0YSk7IF9UcCogX19wIChfX2EuX01fZGF0YSk7IGZvciAoX1RwKiBf X3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsrX19xLCArK29rLCArK19fcCkg eyB3aGlsZSAoISAqb2spIHsgKytvazsgKytfX3A7IH0gKl9fcCA+Pj0gKl9fcTsgfSB9IHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gdm9pZCBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfQXJy YXk8X1RwPiBfX2EsIHNpemVfdCBfX24sIF9BcnJheTxfVHA+IF9fYiwgX0FycmF5PGJvb2w+IF9f bSkgeyBib29sKiBvayAoX19tLl9NX2RhdGEpOyBfVHAqIF9fcSAoX19iLl9NX2RhdGEpOyBmb3Ig KF9UcCogX19wPV9fYS5fTV9kYXRhOyBfX3A8X19hLl9NX2RhdGErX19uOyArK19fcCwgKytvaywg KytfX3EpIHsgd2hpbGUgKCEgKm9rKSB7ICsrb2s7ICsrX19xOyB9ICpfX3AgPj49ICpfX3E7IH0g fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+IHZvaWQgX0FycmF5X2F1Z21lbnRl ZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tLCBjb25zdCBf RXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24pIHsgYm9vbCogb2soX19tLl9NX2RhdGEp OyBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOyBmb3IgKHNpemVfdCBfX2k9MDsgX19pPF9fbjsgKytf X2ksICsrb2ssICsrX19wKSB7IHdoaWxlICghICpvaykgeyArK29rOyArK19fcDsgfSAqX19wID4+ PSBfX2VbX19pXTsgfSB9CgoKCn0KCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFs YXJyYXlfYXJyYXkudGNjIiAxIDMKIyAzNSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFy cmF5X2FycmF5LnRjYyIgMwpuYW1lc3BhY2Ugc3RkCnsKCiAgICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CnZvaWQKX192YWxhcnJheV9maWxsIChfQXJyYXk8X1RwPiBfX2EsIHNpemVfdCBfX24s IF9BcnJheTxib29sPiBfX20sIGNvbnN0IF9UcCYgX190KQp7CiAgICBfVHAqIF9fcCA9IF9fYS5f TV9kYXRhOwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChzaXplX3QgX19p PTA7IF9faTxfX247ICsrX19pLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUgKCEgKl9f b2spIHsKICAgICAgICAgICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAgICB9CiAg ICAgICAgKl9fcCA9IF9fdDsKICAgIH0KfQoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K dm9pZApfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgX0FycmF5PGJvb2w+IF9fbSwg X0FycmF5PF9UcD4gX19iLCBzaXplX3QgX19uKQp7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEp OwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChfVHAqIF9fcT1fX2IuX01f ZGF0YTsgX19xPF9fYi5fTV9kYXRhK19fbjsgKytfX3EsICsrX19vaywgKytfX3ApIHsKICAgICAg ICB3aGlsZSAoISAqX19vaykgewogICAgICAgICAgICArK19fb2s7CiAgICAgICAgICAgICsrX19w OwogICAgICAgIH0KICAgICAgICAqX19xID0gKl9fcDsKICAgIH0KfQoKICAgICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4Kdm9pZApfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IF9fYSwgc2l6 ZV90IF9fbiwgX0FycmF5PF9UcD4gX19iLCBfQXJyYXk8Ym9vbD4gX19tKQp7CiAgICBfVHAqIF9f cSAoX19iLl9NX2RhdGEpOwogICAgYm9vbCogX19vayAoX19tLl9NX2RhdGEpOwogICAgZm9yIChf VHAqIF9fcD1fX2EuX01fZGF0YTsgX19wPF9fYS5fTV9kYXRhK19fbjsgKytfX3AsICsrX19vaywg KytfX3EpIHsKICAgICAgICB3aGlsZSAoISAqX19vaykgewogICAgICAgICAgICArK19fb2s7CiAg ICAgICAgICAgICsrX19xOwogICAgICAgIH0KICAgICAgICAqX19xID0gKl9fcDsKICAgIH0KfQoK ICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9pZApfX3ZhbGFycmF5 X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9fbiwgX0FycmF5PF9U cD4gX19hKQp7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOwogICAgZm9yIChzaXplX3QgX19p PTA7IF9faTxfX247ICsrX19pLCArK19fcCkgKl9fcCA9IF9fZVtfX2ldOwp9CgogICAgICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwLCBjbGFzcyBfRG9tPgp2b2lkCl9fdmFsYXJyYXlfY29weSAoY29u c3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgIF9B cnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcykKewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsK ICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgX19wKz1fX3MpICpfX3AgPSBf X2VbX19pXTsKfQoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9p ZApfX3ZhbGFycmF5X2NvcHkgKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mIF9fZSwgc2l6ZV90IF9f biwKICAgICAgICAgICAgICAgICBfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxzaXplX3Q+IF9faSkK ewogICAgc2l6ZV90KiBfX2ogKF9faS5fTV9kYXRhKTsKICAgIGZvciAoc2l6ZV90IF9faz0wOyBf X2s8X19uOyArK19faywgKytfX2opIF9fYS5fTV9kYXRhWypfX2pdID0gX19lW19fa107Cn0KCiAg ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHAsIGNsYXNzIF9Eb20+CnZvaWQKX192YWxhcnJheV9j b3B5IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCiAgICAgICAgICAg ICAgICAgX0FycmF5PF9UcD4gX19hLCBfQXJyYXk8Ym9vbD4gX19tKQp7CiAgICBib29sKiBfX29r IChfX20uX01fZGF0YSk7CiAgICBfVHAqIF9fcCAoX19hLl9NX2RhdGEpOwogICAgZm9yIChzaXpl X3QgX19pPTA7IF9faTxfX247ICsrX19pLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUg KCEgKl9fb2spIHsKICAgICAgICAgICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAg ICB9CiAgICAgICAgKl9fcCA9IF9fZVtfX2ldOwogICAgfQp9CgoKICAgICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcCwgY2xhc3MgX0RvbT4Kdm9pZApfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0IChj b25zdCBfRXhwcjxfRG9tLCBfVHA+JiBfX2UsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9BcnJheTxfVHA+IF9fYSkKewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsK ICAgIGZvciAoc2l6ZV90IF9faT0wOyBfX2k8X19uOyArK19faSwgKytfX3ApIG5ldyAoX19wKSBf VHAoX19lW19faV0pOwp9CgoKICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4Kdm9pZApfX3Zh bGFycmF5X2NvcHlfY29uc3RydWN0IChfQXJyYXk8X1RwPiBfX2EsIF9BcnJheTxib29sPiBfX20s CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9BcnJheTxfVHA+IF9fYiwgc2l6ZV90IF9fbikK ewogICAgX1RwKiBfX3AgKF9fYS5fTV9kYXRhKTsKICAgIGJvb2wqIF9fb2sgKF9fbS5fTV9kYXRh KTsKICAgIGZvciAoX1RwKiBfX3E9X19iLl9NX2RhdGE7IF9fcTxfX2IuX01fZGF0YStfX247ICsr X19xLCArK19fb2ssICsrX19wKSB7CiAgICAgICAgd2hpbGUgKCEgKl9fb2spIHsKICAgICAgICAg ICAgKytfX29rOwogICAgICAgICAgICArK19fcDsKICAgICAgICB9CiAgICAgICAgbmV3IChfX3Ep IF9UcCgqX19wKTsKICAgIH0KfQoKCgoKfQojIDU3MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3ZhbGFycmF5X2FycmF5LmgiIDIgMwojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3Rk X3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxhcnJheV9t ZXRhLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5o IiAzCgpuYW1lc3BhY2Ugc3RkCnsKIyA1MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFy cmF5X21ldGEuaCIgMwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMSwgdHlwZW5hbWUgX1RwMj4g Y2xhc3MgX0NvbnN0YW50OwoKCgoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGNsYXNzIF9VbkZ1 bkJhc2UgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVnQ7CgogICAgICAg IF9VbkZ1bkJhc2UgKGNvbnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQpKQogICAgICAgICAgICAg ICAgOiBfTV9leHByKF9fZSksIF9NX2Z1bmMoX19mKSB7fQoKICAgICAgICBfVnQgb3BlcmF0b3Jb XSAoc2l6ZV90IF9faSkgY29uc3QgeyByZXR1cm4gX01fZnVuYyhfTV9leHByW19faV0pOyB9CiAg ICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1cm4gX01fZXhwci5zaXplKCk7IH0KCiAg ICBwcml2YXRlOgogICAgICAgIGNvbnN0IF9Eb20mIF9NX2V4cHI7CiAgICAgICAgX1Z0ICgqX01f ZnVuYykoX1Z0KTsKICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3MsIGNsYXNzPiBj bGFzcyBfTWV0YSwgY2xhc3MgX0RvbT4KICAgICAgICBjbGFzcyBfVW5GdW5DbG9zOwoKICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20+CiAgICBzdHJ1Y3QgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiA6IF9V bkZ1bkJhc2U8X0RvbT4gewogICAgICAgIHR5cGVkZWYgX1VuRnVuQmFzZTxfRG9tPiBfQmFzZTsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7Cgog ICAgICAgIF9VbkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgdmFsdWVfdHlwZSBfX2YodmFsdWVf dHlwZSkpCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2UsIF9fZikge30KICAgIH07CgogICAg dGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U cD4gOiBfVW5GdW5CYXNlPHZhbGFycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBfVW5GdW5C YXNlPHZhbGFycmF5PF9UcD4gPiBfQmFzZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNl Ojp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9VbkZ1bkNsb3MgKGNvbnN0IHZhbGFy cmF5PF9UcD4mIF9fdiwgX1RwIF9fZihfVHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192 LCBfX2YpIHt9CiAgICB9OwoKCgoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4g Y2xhc3MgX01ldGExLAogICAgICAgIHRlbXBsYXRlPGNsYXNzLCBjbGFzcz4gY2xhc3MgTWV0YTIs CiAgICAgICAgY2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBjbGFzcyBfQmluRnVuQ2xvczsKCiAg ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGNsYXNzIF9CaW5GdW5CYXNlIHsK ICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIHZh bHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlIF9WdDsKCiAgICAgICAgX0JpbkZ1 bkJhc2UgKGNvbnN0IF9Eb20xJiBfX2UxLCBjb25zdCBfRG9tMiYgX19lMiwKICAgICAgICAgICAg ICAgICAgICAgIF9WdCBfX2YgKF9WdCwgX1Z0KSkKICAgICAgICAgICAgICAgIDogX01fZXhwcjEg KF9fZTEpLCBfTV9leHByMiAoX19lMiksIF9NX2Z1bmMgKF9fZikge30KCiAgICAgICAgdmFsdWVf dHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAgICAgIHsgcmV0dXJuIF9NX2Z1 bmMgKF9NX2V4cHIxW19faV0sIF9NX2V4cHIyW19faV0pOyB9CiAgICAgICAgc2l6ZV90IHNpemUg KCkgY29uc3QgeyByZXR1cm4gX01fZXhwcjEuc2l6ZSAoKTsgfQoKICAgIHByaXZhdGU6CiAgICAg ICAgY29uc3QgX0RvbTEmIF9NX2V4cHIxOwogICAgICAgIGNvbnN0IF9Eb20yJiBfTV9leHByMjsK ICAgICAgICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNs YXNzIF9Eb20+IGNsYXNzIF9CaW5GdW5CYXNlMSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGUgOwogICAgICAgIHR5cGVkZWYg dmFsdWVfdHlwZSBfVnQ7CgogICAgICAgIF9CaW5GdW5CYXNlMSAoY29uc3QgX1Z0JiBfX2MsIGNv bnN0IF9Eb20mIF9fZSwgX1Z0IF9fZihfVnQsIF9WdCkpCiAgICAgICAgICAgICAgICA6IF9NX2V4 cHIxIChfX2MpLCBfTV9leHByMiAoX19lKSwgX01fZnVuYyAoX19mKSB7fQoKICAgICAgICB2YWx1 ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01f ZnVuYyAoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkg Y29uc3QgeyByZXR1cm4gX01fZXhwcjIuc2l6ZSAoKTsgfQoKICAgIHByaXZhdGU6CiAgICAgICAg Y29uc3QgX1Z0JiBfTV9leHByMTsKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByMjsKICAgICAg ICBfVnQgKCpfTV9mdW5jKShfVnQsIF9WdCk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9E b20+IGNsYXNzIF9CaW5GdW5CYXNlMiB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiB2YWx1ZV90 eXBlIF9WdDsKCiAgICAgICAgX0JpbkZ1bkJhc2UyIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IF9W dCYgX19jLCBfVnQgX19mKF9WdCwgX1Z0KSkKICAgICAgICAgICAgICAgIDogX01fZXhwcjEgKF9f ZSksIF9NX2V4cHIyIChfX2MpLCBfTV9mdW5jIChfX2YpIHt9CgogICAgICAgIHZhbHVlX3R5cGUg b3BlcmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9mdW5jIChf TV9leHByMVtfX2ldLCBfTV9leHByMik7IH0KICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25zdCB7 IHJldHVybiBfTV9leHByMS5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBf RG9tJiBfTV9leHByMTsKICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOwogICAgICAgIF9WdCAo Kl9NX2Z1bmMpKF9WdCwgX1Z0KTsKICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNs YXNzIF9Eb20yPgogICAgc3RydWN0IF9CaW5GdW5DbG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20y PiA6IF9CaW5GdW5CYXNlPF9Eb20xLF9Eb20yPiB7CiAgICAgICAgdHlwZWRlZiBfQmluRnVuQmFz ZTxfRG9tMSxfRG9tMj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFs dWVfdHlwZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CgogICAg ICAgIF9CaW5GdW5DbG9zIChjb25zdCBfRG9tMSYgX19lMSwgY29uc3QgX0RvbTImIF9fZTIsCiAg ICAgICAgICAgICAgICAgICAgIF9UcCBfX2YoX1RwLCBfVHApKQogICAgICAgICAgICAgICAgOiBf QmFzZSAoX19lMSwgX19lMiwgX19mKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPgog ICAgICAgIDogX0JpbkZ1bkJhc2U8dmFsYXJyYXk8X1RwPiwgdmFsYXJyYXk8X1RwPiA+IHsKICAg ICAgICB0eXBlZGVmIF9CaW5GdW5CYXNlPHZhbGFycmF5PF9UcD4sIHZhbGFycmF5PF9UcD4gPiBf QmFzZTsKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluRnVuQ2xv cyAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3csCiAg ICAgICAgICAgICAgICAgICAgIF9UcCBfX2YoX1RwLCBfVHApKQogICAgICAgICAgICAgICAgOiBf QmFzZSAoX192LCBfX3csIF9fZikge30KICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4K ICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiA+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTxf VHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0Jp bkZ1bkNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LAogICAg ICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jh c2UgKF9fZSwgX192LCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg ICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUsX0RvbT4KICAgICAgICA6IF9CaW5GdW5CYXNlPHZhbGFycmF5PHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+LF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2U8X0RvbSx2YWxhcnJheTxfVHA+ ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0JpbkZ1 bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX0RvbSYgX19lLAogICAgICAg ICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jhc2Ug KF9fdiwgX19lLCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICBz dHJ1Y3QgX0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4KICAgICAgICA6IF9CaW5GdW5CYXNlMjxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90 eXBlOwogICAgICAgIHR5cGVkZWYgX0JpbkZ1bkJhc2UyPF9Eb20+IF9CYXNlOwoKICAgICAgICBf QmluRnVuQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBfVHAmIF9fdCwgX1RwIF9fZiAoX1Rw LCBfVHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX3QsIF9fZikge30KICAgIH07 CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3Rh bnQsX0V4cHIsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkZ1 bkJhc2UxPF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg X1RwOwogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgICAgdHlwZWRlZiBfQmlu RnVuQmFzZTE8X0RvbT4gX0Jhc2U7CgogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCBfVHAmIF9f dCwgY29uc3QgX0RvbSYgX19lLCBfVHAgX19mIChfVHAsIF9UcCkpCiAgICAgICAgICAgICAgICA6 IF9CYXNlIChfX3QsIF9fZSwgX19mKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICBzdHJ1Y3QgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPgog ICAgICAgIDogX0JpbkZ1bkJhc2UyPHZhbGFycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBf QmluRnVuQmFzZTI8dmFsYXJyYXk8X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgX1RwIHZh bHVlX3R5cGU7CgogICAgICAgIF9CaW5GdW5DbG9zIChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Ys IGNvbnN0IF9UcCYgX190LAogICAgICAgICAgICAgICAgICAgICBfVHAgX19mKF9UcCwgX1RwKSkK ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwgX190LCBfX2YpIHt9CiAgICB9OwoKICAgIHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmluRnVuQ2xvczxfQ29uc3RhbnQsX1Zh bEFycmF5LF9UcCxfVHA+CiAgICAgICAgOiBfQmluRnVuQmFzZTE8dmFsYXJyYXk8X1RwPiA+IHsK ICAgICAgICB0eXBlZGVmIF9CaW5GdW5CYXNlMTx2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAg ICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0JpbkZ1bkNsb3MgKGNvbnN0IF9U cCYgX190LCBjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsCiAgICAgICAgICAgICAgICAgICAgIF9U cCBfX2YgKF9UcCwgX1RwKSkKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdCwgX192LCBfX2Yp IHt9CiAgICB9OwoKCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRG9tLCB0eXBlbmFtZSBfQXJn PiBjbGFzcyBfRnVuQmFzZSB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9GdW5CYXNlIChjb25zdCBfRG9t JiBfX2UsIHZhbHVlX3R5cGUgX19mKF9BcmcpKQogICAgICAgICAgICAgICAgOiBfTV9leHByIChf X2UpLCBfTV9mdW5jIChfX2YpIHt9CgogICAgICAgIHZhbHVlX3R5cGUgb3BlcmF0b3JbXSAoc2l6 ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9mdW5jIChfTV9leHByW19faV0pOyB9 CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9leHByLnNpemUgKCk7fQoK ICAgIHByaXZhdGU6CiAgICAgICAgY29uc3QgX0RvbSYgX01fZXhwcjsKICAgICAgICB2YWx1ZV90 eXBlICgqX01fZnVuYykoX0FyZyk7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg ICBzdHJ1Y3QgX1ZhbEZ1bkNsb3M8X0V4cHIsX0RvbT4KICAgICAgICA6IF9GdW5CYXNlPF9Eb20s IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHsKICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPF9E b20sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKICAgICAgICB0eXBlZGVmIHZhbHVl X3R5cGUgX1RwOwoKICAgICAgICBfVmFsRnVuQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBfVHAgX19m IChfVHApKSA6IF9CYXNlIChfX2UsIF9fZikge30KICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgc3RydWN0IF9WYWxGdW5DbG9zPF9WYWxBcnJheSxfVHA+CiAgICAgICAgOiBf RnVuQmFzZTx2YWxhcnJheTxfVHA+LCBfVHA+IHsKICAgICAgICB0eXBlZGVmIF9GdW5CYXNlPHZh bGFycmF5PF9UcD4sIF9UcD4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK CiAgICAgICAgX1ZhbEZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgX1RwIF9fZihf VHApKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX2YpIHt9CiAgICB9OwoKICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20+CiAgICBzdHJ1Y3QgX1JlZkZ1bkNsb3M8X0V4cHIsX0RvbT4gOgog ICAgICAgIF9GdW5CYXNlPF9Eb20sIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmPiB7 CiAgICAgICAgdHlwZWRlZiBfRnVuQmFzZTxfRG9tLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlJj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlw ZSB2YWx1ZV90eXBlOwogICAgICAgIHR5cGVkZWYgdmFsdWVfdHlwZSBfVHA7CgogICAgICAgIF9S ZWZGdW5DbG9zIChjb25zdCBfRG9tJiBfX2UsIF9UcCBfX2YgKGNvbnN0IF9UcCYpKQogICAgICAg ICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2YpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIHN0cnVjdCBfUmVmRnVuQ2xvczxfVmFsQXJyYXksX1RwPgogICAgICAgIDog X0Z1bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gewogICAgICAgIHR5cGVkZWYgX0Z1 bkJhc2U8dmFsYXJyYXk8X1RwPiwgY29uc3QgX1RwJj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBf VHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX1JlZkZ1bkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4m IF9fdiwgX1RwIF9fZihjb25zdCBfVHAmKSkKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwg X19mKSB7fQogICAgfTsKCgoKCgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9P cGVyLCB0eXBlbmFtZSBfQXJnPgogICAgY2xhc3MgX1VuQmFzZSB7CiAgICBwdWJsaWM6CiAgICAg ICAgdHlwZWRlZiBfT3Blcjx0eXBlbmFtZSBfQXJnOjp2YWx1ZV90eXBlPiBfT3A7CiAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfT3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9V bkJhc2UgKGNvbnN0IF9BcmcmIF9fZSkgOiBfTV9leHByKF9fZSkge30KICAgICAgICB2YWx1ZV90 eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29uc3Q7CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29u c3QgeyByZXR1cm4gX01fZXhwci5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25z dCBfQXJnJiBfTV9leHByOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xh c3MgX09wZXIsIHR5cGVuYW1lIF9Bcmc+CiAgICBpbmxpbmUgdHlwZW5hbWUgX1VuQmFzZTxfT3Bl ciwgX0FyZz46OnZhbHVlX3R5cGUKICAgIF9VbkJhc2U8X09wZXIsIF9Bcmc+OjpvcGVyYXRvcltd IChzaXplX3QgX19pKSBjb25zdAogICAgeyByZXR1cm4gX09wKCkgKF9NX2V4cHJbX19pXSk7IH0K CiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9Eb20+CiAg ICBzdHJ1Y3QgX1VuQ2xvczxfT3BlciwgX0V4cHIsIF9Eb20+IDogX1VuQmFzZTxfT3BlciwgX0Rv bT4gewogICAgICAgIHR5cGVkZWYgX0RvbSBfQXJnOwogICAgICAgIHR5cGVkZWYgX1VuQmFzZTxf T3BlciwgX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVf dHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfVW5DbG9zIChjb25zdCBfQXJnJiBfX2UpIDogX0Jh c2UoX19lKSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09w ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfVW5DbG9zPF9PcGVyLCBfVmFsQXJyYXksIF9U cD4gOiBfVW5CYXNlPF9PcGVyLCB2YWxhcnJheTxfVHA+ID4gewogICAgICAgIHR5cGVkZWYgdmFs YXJyYXk8X1RwPiBfQXJnOwogICAgICAgIHR5cGVkZWYgX1VuQmFzZTxfT3BlciwgdmFsYXJyYXk8 X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUg dmFsdWVfdHlwZTsKCiAgICAgICAgX1VuQ2xvcyAoY29uc3QgX0FyZyYgX19lKSA6IF9CYXNlKF9f ZSkge30KICAgIH07CgoKCgoKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09w ZXIsCiAgICAgICAgdHlwZW5hbWUgX0ZpcnN0QXJnLCB0eXBlbmFtZSBfU2Vjb25kQXJnPgogICAg Y2xhc3MgX0JpbkJhc2UgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgX09wZXI8dHlwZW5h bWUgX0ZpcnN0QXJnOjp2YWx1ZV90eXBlPiBfT3A7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBf T3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAgIF9CaW5CYXNlIChjb25zdCBfRmly c3RBcmcmIF9fZTEsIGNvbnN0IF9TZWNvbmRBcmcmIF9fZTIpCiAgICAgICAgICAgICAgICA6IF9N X2V4cHIxIChfX2UxKSwgX01fZXhwcjIgKF9fZTIpIHt9CiAgICAgICAgdmFsdWVfdHlwZSBvcGVy YXRvcltdIChzaXplX3QpIGNvbnN0OwogICAgICAgIHNpemVfdCBzaXplICgpIGNvbnN0IHsgcmV0 dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0KCiAgICBwcml2YXRlOgogICAgICAgIGNvbnN0IF9GaXJz dEFyZyYgX01fZXhwcjE7CiAgICAgICAgY29uc3QgX1NlY29uZEFyZyYgX01fZXhwcjI7CiAgICB9 OwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwKICAgICAgICB0eXBl bmFtZSBfRmlyc3RBcmcsIHR5cGVuYW1lIF9TZWNvbmRBcmc+CiAgICBpbmxpbmUgdHlwZW5hbWUg X0JpbkJhc2U8X09wZXIsX0ZpcnN0QXJnLF9TZWNvbmRBcmc+Ojp2YWx1ZV90eXBlCiAgICBfQmlu QmFzZTxfT3BlcixfRmlyc3RBcmcsX1NlY29uZEFyZz46Om9wZXJhdG9yW10gKHNpemVfdCBfX2kp IGNvbnN0CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjFbX19pXSwgX01fZXhwcjJbX19pXSk7 IH0KCgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xv cz4KICAgIGNsYXNzIF9CaW5CYXNlMiB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQ2xvczo6dmFsdWVfdHlwZSBfVnQ7CiAgICAgICAgdHlwZWRlZiBfT3BlcjxfVnQ+IF9P cDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9PcDo6cmVzdWx0X3R5cGUgdmFsdWVfdHlwZTsK CiAgICAgICAgX0JpbkJhc2UyIChjb25zdCBfQ2xvcyYgX19lLCBjb25zdCBfVnQmIF9fdCkKICAg ICAgICAgICAgICAgIDogX01fZXhwcjEgKF9fZSksIF9NX2V4cHIyIChfX3QpIHt9CiAgICAgICAg dmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QpIGNvbnN0OwogICAgICAgIHNpemVfdCBzaXpl ICgpIGNvbnN0IHsgcmV0dXJuIF9NX2V4cHIxLnNpemUgKCk7IH0KCiAgICBwcml2YXRlOgogICAg ICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMTsKICAgICAgICBjb25zdCBfVnQmIF9NX2V4cHIyOwog ICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIGNsYXNzIF9D bG9zPgogICAgaW5saW5lIHR5cGVuYW1lIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46OnZhbHVlX3R5 cGUKICAgIF9CaW5CYXNlMjxfT3BlcixfQ2xvcz46Om9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNv bnN0CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjFbX19pXSwgX01fZXhwcjIpOyB9CgoKICAg IHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0Nsb3M+CiAgICBj bGFzcyBfQmluQmFzZTEgewogICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0Ns b3M6OnZhbHVlX3R5cGUgX1Z0OwogICAgICAgIHR5cGVkZWYgX09wZXI8X1Z0PiBfT3A7CiAgICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfT3A6OnJlc3VsdF90eXBlIHZhbHVlX3R5cGU7CgogICAgICAg IF9CaW5CYXNlMSAoY29uc3QgX1Z0JiBfX3QsIGNvbnN0IF9DbG9zJiBfX2UpCiAgICAgICAgICAg ICAgICA6IF9NX2V4cHIxIChfX3QpLCBfTV9leHByMiAoX19lKSB7fQogICAgICAgIHZhbHVlX3R5 cGUgb3BlcmF0b3JbXSAoc2l6ZV90KSBjb25zdDsKICAgICAgICBzaXplX3Qgc2l6ZSAoKSBjb25z dCB7IHJldHVybiBfTV9leHByMi5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25z dCBfVnQmIF9NX2V4cHIxOwogICAgICAgIGNvbnN0IF9DbG9zJiBfTV9leHByMjsKICAgIH07Cgog ICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBfQ2xvcz4KICAg IGlubGluZSB0eXBlbmFtZQogICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9zPjo6dmFsdWVfdHlwZQog ICAgX0JpbkJhc2UxPF9PcGVyLF9DbG9zPjo6IG9wZXJhdG9yW10gKHNpemVfdCBfX2kpIGNvbnN0 CiAgICB7IHJldHVybiBfT3AoKSAoX01fZXhwcjEsIF9NX2V4cHIyW19faV0pOyB9CgoKICAgIHRl bXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbTEsIGNsYXNzIF9E b20yPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLCBfRXhwciwgX0V4cHIsIF9Eb20xLCBfRG9t Mj4KICAgICAgICA6IF9CaW5CYXNlPF9PcGVyLF9Eb20xLF9Eb20yPiB7CiAgICAgICAgdHlwZWRl ZiBfQmluQmFzZTxfT3BlcixfRG9tMSxfRG9tMj4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBl bmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyhjb25z dCBfRG9tMSYgX19lMSwgY29uc3QgX0RvbTImIF9fZTIpIDogX0Jhc2UoX19lMSwgX19lMikge30K ICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCB0eXBlbmFt ZSBfVHA+CiAgICBzdHJ1Y3QgX0JpbkNsb3M8X09wZXIsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAs X1RwPgogICAgICAgIDogX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8X1RwPix2YWxhcnJheTxfVHA+ ID4gewogICAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsdmFsYXJyYXk8X1RwPix2YWxhcnJh eTxfVHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAg X0JpbkNsb3MgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiYg X193KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX192LCBfX3cpIHt9CiAgICB9OwoKICAgIHRl bXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBfT3BlciwgY2xhc3MgX0RvbT4KICAgIHN0cnVj dCBfQmluQ2xvczxfT3BlcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPgogICAgICAgIDogX0JpbkJhc2U8X09wZXIsX0RvbSx2YWxhcnJheTx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiA+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUgX1RwOwogICAgICAgIHR5cGVkZWYgX0JpbkJhc2U8X09wZXIsX0RvbSx2YWxhcnJheTxf VHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2 YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyhjb25zdCBfRG9tJiBfX2UxLCBjb25zdCB2YWxh cnJheTxfVHA+JiBfX2UyKQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lMSwgX19lMikge30K ICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVyLCBjbGFzcyBf RG9tPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlLF9Eb20+CiAgICAgICAgOiBfQmluQmFzZTxfT3Blcix2YWxhcnJheTx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPixfRG9tPiB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsKICAgICAgICB0eXBlZGVmIF9CaW5CYXNlPF9PcGVyLHZh bGFycmF5PF9UcD4sX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6 dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8 X1RwPiYgX19lMSwgY29uc3QgX0RvbSYgX19lMikKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9f ZTEsIF9fZTIpIHt9CiAgICB9OwoKICAgIHRlbXBsYXRlPHRlbXBsYXRlPGNsYXNzPiBjbGFzcyBf T3BlciwgY2xhc3MgX0RvbT4KICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfRXhwcixfQ29uc3Rh bnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPgogICAgICAgIDogX0JpbkJhc2UyPF9P cGVyLF9Eb20+IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw OwogICAgICAgIHR5cGVkZWYgX0JpbkJhc2UyPF9PcGVyLF9Eb20+IF9CYXNlOwogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX0Jp bkNsb3MgKGNvbnN0IF9Eb20mIF9fZTEsIGNvbnN0IF9UcCYgX19lMikgOiBfQmFzZSAoX19lMSwg X19lMikge30KICAgIH07CgogICAgdGVtcGxhdGU8dGVtcGxhdGU8Y2xhc3M+IGNsYXNzIF9PcGVy LCBjbGFzcyBfRG9tPgogICAgc3RydWN0IF9CaW5DbG9zPF9PcGVyLF9Db25zdGFudCxfRXhwcix0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+CiAgICAgICAgOiBfQmluQmFzZTE8X09wZXIs X0RvbT4gewogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7CiAg ICAgICAgdHlwZWRlZiBfQmluQmFzZTE8X09wZXIsX0RvbT4gX0Jhc2U7CiAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xv cyAoY29uc3QgX1RwJiBfX2UxLCBjb25zdCBfRG9tJiBfX2UyKSA6IF9CYXNlIChfX2UxLCBfX2Uy KSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5 cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmluQ2xvczxfT3BlcixfVmFsQXJyYXksX0NvbnN0YW50 LF9UcCxfVHA+CiAgICAgICAgOiBfQmluQmFzZTI8X09wZXIsdmFsYXJyYXk8X1RwPiA+IHsKICAg ICAgICB0eXBlZGVmIF9CaW5CYXNlMjxfT3Blcix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAg ICBfQmluQ2xvcyAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192LCBjb25zdCBfVHAmIF9fdCkKICAg ICAgICAgICAgICAgIDogX0Jhc2UgKF9fdiwgX190KSB7fQogICAgfTsKCiAgICB0ZW1wbGF0ZTx0 ZW1wbGF0ZTxjbGFzcz4gY2xhc3MgX09wZXIsIHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfQmlu Q2xvczxfT3BlcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+CiAgICAgICAgOiBfQmluQmFz ZTE8X09wZXIsdmFsYXJyYXk8X1RwPiA+IHsKICAgICAgICB0eXBlZGVmIF9CaW5CYXNlMTxfT3Bl cix2YWxhcnJheTxfVHA+ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6 dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAgICAgICBfQmluQ2xvcyAoY29uc3QgX1RwJiBfX3Qs IGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikKICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fdCwg X192KSB7fQogICAgfTsKCgoKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0RvbT4gY2xhc3MgX1NC YXNlIHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX1NCYXNlIChjb25zdCBfRG9tJiBfX2UsIGNvbnN0IHNs aWNlJiBfX3MpCiAgICAgICAgICAgICAgICA6IF9NX2V4cHIgKF9fZSksIF9NX3NsaWNlIChfX3Mp IHt9CiAgICAgICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAg ICAgIHsgcmV0dXJuIF9NX2V4cHJbX01fc2xpY2Uuc3RhcnQgKCkgKyBfX2kgKiBfTV9zbGljZS5z dHJpZGUgKCldOyB9CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9zbGlj ZS5zaXplICgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOwog ICAgICAgIGNvbnN0IHNsaWNlJiBfTV9zbGljZTsKICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBjbGFzcyBfU0Jhc2U8X0FycmF5PF9UcD4gPiB7CiAgICBwdWJsaWM6CiAgICAgICAg dHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX1NCYXNlIChfQXJyYXk8X1RwPiBfX2Es IGNvbnN0IHNsaWNlJiBfX3MpCiAgICAgICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fZGF0 YStfX3Muc3RhcnQoKSksIF9NX3NpemUgKF9fcy5zaXplKCkpLAogICAgICAgICAgICAgICAgICBf TV9zdHJpZGUgKF9fcy5zdHJpZGUoKSkge30KICAgICAgICB2YWx1ZV90eXBlIG9wZXJhdG9yW10g KHNpemVfdCBfX2kpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fYXJyYXkuX01fZGF0YVtfX2kg KiBfTV9zdHJpZGVdOyB9CiAgICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9z aXplOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfQXJyYXk8X1RwPiBfTV9hcnJheTsK ICAgICAgICBjb25zdCBzaXplX3QgX01fc2l6ZTsKICAgICAgICBjb25zdCBzaXplX3QgX01fc3Ry aWRlOwogICAgfTsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBzdHJ1Y3QgX1NDbG9zPF9FeHBy LF9Eb20+IDogX1NCYXNlPF9Eb20+IHsKICAgICAgICB0eXBlZGVmIF9TQmFzZTxfRG9tPiBfQmFz ZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7 CgogICAgICAgIF9TQ2xvcyAoY29uc3QgX0RvbSYgX19lLCBjb25zdCBzbGljZSYgX19zKSA6IF9C YXNlIChfX2UsIF9fcykge30KICAgIH07CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg c3RydWN0IF9TQ2xvczxfVmFsQXJyYXksX1RwPiA6IF9TQmFzZTxfQXJyYXk8X1RwPiA+IHsKICAg ICAgICB0eXBlZGVmIF9TQmFzZTxfQXJyYXk8X1RwPiA+IF9CYXNlOwogICAgICAgIHR5cGVkZWYg X1RwIHZhbHVlX3R5cGU7CgogICAgICAgIF9TQ2xvcyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBz bGljZSYgX19zKSA6IF9CYXNlIChfX2EsIF9fcykge30KICAgIH07CgoKCgogICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbT4gY2xhc3MgX0dCYXNlIHsKICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgdmFsdWVfdHlwZTsKCiAgICAgICAgX0dCYXNlIChjb25z dCBfRG9tJiBfX2UsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKICAgICAgICAgICAgICAg IDogX01fZXhwciAoX19lKSwgX01faW5kZXgoX19pKSB7fQogICAgICAgIHZhbHVlX3R5cGUgb3Bl cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9leHByW19NX2lu ZGV4W19faV1dOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1cm4gX01faW5k ZXguc2l6ZSgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfRG9tJiBfTV9leHByOwog ICAgICAgIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9NX2luZGV4OwogICAgfTsKCiAgICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIF9HQmFzZTxfQXJyYXk8X1RwPiA+IHsKICAgIHB1Ymxp YzoKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICBfR0Jhc2UgKF9BcnJh eTxfVHA+IF9fYSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19pKQogICAgICAgICAgICAgICAg OiBfTV9hcnJheSAoX19hKSwgX01faW5kZXgoX19pKSB7fQogICAgICAgIHZhbHVlX3R5cGUgb3Bl cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgICAgICB7IHJldHVybiBfTV9hcnJheS5fTV9k YXRhW19NX2luZGV4W19faV1dOyB9CiAgICAgICAgc2l6ZV90IHNpemUgKCkgY29uc3QgeyByZXR1 cm4gX01faW5kZXguc2l6ZSgpOyB9CgogICAgcHJpdmF0ZToKICAgICAgICBjb25zdCBfQXJyYXk8 X1RwPiBfTV9hcnJheTsKICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsK ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gc3RydWN0IF9HQ2xvczxfRXhwcixfRG9t PiA6IF9HQmFzZTxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8X0RvbT4gX0Jhc2U7CiAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAg ICAgICBfR0Nsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19p KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CiAgICB9OwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfR0Nsb3M8X1ZhbEFycmF5LF9UcD4gOiBfR0Jh c2U8X0FycmF5PF9UcD4gPiB7CiAgICAgICAgdHlwZWRlZiBfR0Jhc2U8X0FycmF5PF9UcD4gPiBf QmFzZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjp2YWx1ZV90eXBlIHZhbHVlX3R5 cGU7CgogICAgICAgIF9HQ2xvcyAoX0FycmF5PF9UcD4gX19hLCBjb25zdCB2YWxhcnJheTxzaXpl X3Q+JiBfX2kpCiAgICAgICAgICAgICAgICA6IF9CYXNlIChfX2EsIF9faSkge30KICAgIH07CgoK CgoKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGNsYXNzIF9JQmFzZSB7CiAgICBwdWJsaWM6CiAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7CgogICAg ICAgIF9JQmFzZSAoY29uc3QgX0RvbSYgX19lLCBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kp CiAgICAgICAgICAgICAgICA6IF9NX2V4cHIgKF9fZSksIF9NX2luZGV4IChfX2kpIHt9CiAgICAg ICAgdmFsdWVfdHlwZSBvcGVyYXRvcltdIChzaXplX3QgX19pKSBjb25zdAogICAgICAgIHsgcmV0 dXJuIF9NX2V4cHJbX01faW5kZXhbX19pXV07IH0KICAgICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0 IHsgcmV0dXJuIF9NX2luZGV4LnNpemUoKTsgfQoKICAgIHByaXZhdGU6CiAgICAgICAgY29uc3Qg X0RvbSYgX01fZXhwcjsKICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfTV9pbmRleDsK ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gc3RydWN0IF9JQ2xvczxfRXhwcixfRG9t PiA6IF9JQmFzZTxfRG9tPiB7CiAgICAgICAgdHlwZWRlZiBfSUJhc2U8X0RvbT4gX0Jhc2U7CiAg ICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6dmFsdWVfdHlwZSB2YWx1ZV90eXBlOwoKICAg ICAgICBfSUNsb3MgKGNvbnN0IF9Eb20mIF9fZSwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX19p KQogICAgICAgICAgICAgICAgOiBfQmFzZSAoX19lLCBfX2kpIHt9CiAgICB9OwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBfSUNsb3M8X1ZhbEFycmF5LF9UcD4gOiBfSUJh c2U8dmFsYXJyYXk8X1RwPiA+IHsKICAgICAgICB0eXBlZGVmIF9JQmFzZTx2YWxhcnJheTxfVHA+ ID4gX0Jhc2U7CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0lDbG9z IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX2EsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkK ICAgICAgICAgICAgICAgIDogX0Jhc2UgKF9fYSwgX19pKSB7fQogICAgfTsKCgoKCiAgICB0ZW1w bGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPiBjbGFzcyBfRXhwciB7CiAgICBwdWJsaWM6 CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCiAgICAgICAgX0V4cHIgKGNvbnN0IF9D bG9zJik7CgogICAgICAgIGNvbnN0IF9DbG9zJiBvcGVyYXRvcigpICgpIGNvbnN0OwoKICAgICAg ICB2YWx1ZV90eXBlIG9wZXJhdG9yW10gKHNpemVfdCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8 dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoc2xpY2UpIGNvbnN0OwogICAgICAgIHZhbGFycmF5PHZh bHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0IGdzbGljZSYpIGNvbnN0OwogICAgICAgIHZhbGFy cmF5PHZhbHVlX3R5cGU+IG9wZXJhdG9yW10gKGNvbnN0IHZhbGFycmF5PGJvb2w+JikgY29uc3Q7 CiAgICAgICAgdmFsYXJyYXk8dmFsdWVfdHlwZT4gb3BlcmF0b3JbXSAoY29uc3QgdmFsYXJyYXk8 c2l6ZV90PiYpIGNvbnN0OwoKICAgICAgICBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6 X0V4cHIsX0Nsb3M+LCB2YWx1ZV90eXBlPgogICAgICAgIG9wZXJhdG9yKyAoKSBjb25zdDsKCiAg ICAgICAgX0V4cHI8X1VuQ2xvczxuZWdhdGUsc3RkOjpfRXhwcixfQ2xvcz4sIHZhbHVlX3R5cGU+ CiAgICAgICAgb3BlcmF0b3ItICgpIGNvbnN0OwoKICAgICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3 aXNlX25vdCxzdGQ6Ol9FeHByLF9DbG9zPiwgdmFsdWVfdHlwZT4KICAgICAgICBvcGVyYXRvcn4g KCkgY29uc3Q7CgogICAgICAgIF9FeHByPF9VbkNsb3M8bG9naWNhbF9ub3Qsc3RkOjpfRXhwcixf Q2xvcz4sIGJvb2w+CiAgICAgICAgb3BlcmF0b3IhICgpIGNvbnN0OwoKICAgICAgICBzaXplX3Qg c2l6ZSAoKSBjb25zdDsKICAgICAgICB2YWx1ZV90eXBlIHN1bSAoKSBjb25zdDsKCiAgICAgICAg dmFsYXJyYXk8dmFsdWVfdHlwZT4gc2hpZnQgKGludCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8 dmFsdWVfdHlwZT4gY3NoaWZ0IChpbnQpIGNvbnN0OwoKICAgICAgdmFsdWVfdHlwZSBtaW4oKSBj b25zdDsKICAgICAgdmFsdWVfdHlwZSBtYXgoKSBjb25zdDsKCiAgICAgIHZhbGFycmF5PHZhbHVl X3R5cGU+IGFwcGx5KHZhbHVlX3R5cGUgKCopIChjb25zdCB2YWx1ZV90eXBlJikpIGNvbnN0Owog ICAgICB2YWxhcnJheTx2YWx1ZV90eXBlPiBhcHBseSh2YWx1ZV90eXBlICgqKSAodmFsdWVfdHlw ZSkpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgY29uc3QgX0Nsb3MgX01fY2xvc3VyZTsK ICAgIH07CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZQogICAgX0V4cHI8X0Nsb3MsX1RwPjo6X0V4cHIgKGNvbnN0IF9DbG9zJiBfX2MpIDogX01fY2xv c3VyZShfX2MpIHt9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAg IGlubGluZSBjb25zdCBfQ2xvcyYKICAgIF9FeHByPF9DbG9zLF9UcD46Om9wZXJhdG9yKCkgKCkg Y29uc3QKICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmU7IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xv cywgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcAogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3Bl cmF0b3JbXSAoc2l6ZV90IF9faSkgY29uc3QKICAgIHsgcmV0dXJuIF9NX2Nsb3N1cmVbX19pXTsg fQoKICAgIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdmFs YXJyYXk8X1RwPgogICAgX0V4cHI8X0Nsb3MsX1RwPjo6b3BlcmF0b3JbXSAoc2xpY2UgX19zKSBj b25zdAogICAgeyByZXR1cm4gX01fY2xvc3VyZVtfX3NdOyB9CgogICAgdGVtcGxhdGU8Y2xhc3Mg X0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxf Q2xvcyxfVHA+OjpvcGVyYXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpIGNvbnN0CiAgICB7IHJl dHVybiBfTV9jbG9zdXJlW19fZ3NdOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVu YW1lIF9UcD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxfQ2xvcyxfVHA+Ojpv cGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdAogICAgeyByZXR1cm4g X01fY2xvc3VyZVtfX21dOyB9CgogICAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9U cD4KICAgIGlubGluZSB2YWxhcnJheTxfVHA+CiAgICBfRXhwcjxfQ2xvcyxfVHA+OjpvcGVyYXRv cltdIChjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpIGNvbnN0CiAgICB7IHJldHVybiBfTV9j bG9zdXJlW19faV07IH0KCiAgICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgog ICAgaW5saW5lIHNpemVfdAogICAgX0V4cHI8X0Nsb3MsX1RwPjo6c2l6ZSAoKSBjb25zdCB7IHJl dHVybiBfTV9jbG9zdXJlLnNpemUgKCk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVu YW1lIF9UcD4KICBpbmxpbmUgdmFsYXJyYXk8X1RwPgogIF9FeHByPF9DbG9zLCBfVHA+OjpzaGlm dChpbnQgX19uKSBjb25zdAogIHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuc2hp ZnQoX19uKTsgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgogIGlubGlu ZSB2YWxhcnJheTxfVHA+CiAgX0V4cHI8X0Nsb3MsIF9UcD46OmNzaGlmdChpbnQgX19uKSBjb25z dAogIHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuY3NoaWZ0KF9fbik7IH0KCiAg dGVtcGxhdGU8Y2xhc3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgdmFsYXJyYXk8X1Rw PgogIF9FeHByPF9DbG9zLCBfVHA+OjphcHBseShfVHAgX19mKGNvbnN0IF9UcCYpKSBjb25zdAog IHsgcmV0dXJuIHZhbGFycmF5PF9UcD4oX01fY2xvc3VyZSkuYXBwbHkoX19mKTsgfQoKICB0ZW1w bGF0ZTxjbGFzcyBfQ2xvcywgdHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+CiAg X0V4cHI8X0Nsb3MsIF9UcD46OmFwcGx5KF9UcCBfX2YoX1RwKSkgY29uc3QKICB7IHJldHVybiB2 YWxhcnJheTxfVHA+KF9NX2Nsb3N1cmUpLmFwcGx5KF9fZik7IH0KCgogICAgdGVtcGxhdGU8Y2xh c3MgX0Nsb3MsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfVHAKICAgIF9FeHByPF9DbG9zLF9U cD46OnN1bSAoKSBjb25zdAogICAgewogICAgICAgIHNpemVfdCBfX24gPSBfTV9jbG9zdXJlLnNp emUoKTsKICAgICAgICBpZiAoX19uID09IDApIHJldHVybiBfVHAoKTsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICAgX1RwIF9fcyA9IF9NX2Nsb3N1cmVbLS1fX25dOwogICAgICAgICAgICB3aGls ZSAoX19uICE9IDApIF9fcyArPSBfTV9jbG9zdXJlWy0tX19uXTsKICAgICAgICAgICAgcmV0dXJu IF9fczsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DbG9zLCB0eXBlbmFtZSBf VHA+CiAgaW5saW5lIF9UcAogIF9FeHByPF9DbG9zLCBfVHA+OjptaW4oKSBjb25zdAogIHsgcmV0 dXJuIF9fdmFsYXJyYXlfbWluKF9NX2Nsb3N1cmUpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9DbG9z LCB0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9UcAogIF9FeHByPF9DbG9zLCBfVHA+OjptYXgoKSBj b25zdAogIHsgcmV0dXJuIF9fdmFsYXJyYXlfbWF4KF9NX2Nsb3N1cmUpOyB9CgogICAgdGVtcGxh dGU8Y2xhc3MgX0RvbSwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9FeHByPF9VbkNsb3M8bG9n aWNhbF9ub3QsX0V4cHIsX0RvbT4sIGJvb2w+CiAgICBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9y ISAoKSBjb25zdAogICAgewogICAgICAgIHR5cGVkZWYgX1VuQ2xvczxsb2dpY2FsX25vdCxzdGQ6 Ol9FeHByLF9Eb20+IF9DbG9zdXJlOwogICAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+ IChfQ2xvc3VyZSh0aGlzLT5fTV9jbG9zdXJlKSk7CiAgICB9CiMgNzg1ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5oIiAzCiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0 eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPF9VbmFyeV9wbHVzLHN0ZDo6X0V4cHIs X0RvbT4sX1RwPiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yICsgKCkgY29uc3QgeyB0eXBlZGVm IF9VbkNsb3M8X1VuYXJ5X3BsdXMsc3RkOjpfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9F eHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlICh0aGlzLT5fTV9jbG9zdXJlKSk7IH0KICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20sIHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNsb3M8bmVn YXRlLHN0ZDo6X0V4cHIsX0RvbT4sX1RwPiBfRXhwcjxfRG9tLF9UcD46Om9wZXJhdG9yIC0gKCkg Y29uc3QgeyB0eXBlZGVmIF9VbkNsb3M8bmVnYXRlLHN0ZDo6X0V4cHIsX0RvbT4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAodGhpcy0+X01fY2xvc3VyZSkp OyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tLCB0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf VW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6Ol9FeHByLF9Eb20+LF9UcD4gX0V4cHI8X0RvbSxfVHA+ OjpvcGVyYXRvciB+ICgpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPF9CaXR3aXNlX25vdCxzdGQ6 Ol9FeHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1 cmUgKHRoaXMtPl9NX2Nsb3N1cmUpKTsgfQojIDg1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRz L3ZhbGFycmF5X21ldGEuaCIgMwogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20y PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIHR5 cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3Bl cmF0b3IgKyAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBf X3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFt ZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxf RXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxf VmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8cGx1cyxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgcGx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICsgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYg X190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5 cGVuYW1lIHBsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxw bHVzLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns b3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3Mg X0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIHBsdXM8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciArIChjb25zdCB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRl ZiB0eXBlbmFtZSBwbHVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs b3M8cGx1cyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNs YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9FeHByLF9WYWxBcnJheSxfRG9t LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBwbHVzPHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgKyAoY29uc3QgX0V4cHI8X0RvbSx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIHBsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsg dHlwZWRlZiBfQmluQ2xvczxwbHVzLF9FeHByLF9WYWxBcnJheSxfRG9tLF9Bcmc+IF9DbG9zdXJl OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7 IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPHBsdXMsX1ZhbEFy cmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIHBsdXM8 dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciArIChjb25z dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf RG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBwbHVzPF9UcD46OnJlc3VsdF90 eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxfRXhwcixfVHAsX0Rv bT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192 LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt ZSBtaW51czx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv ciAtIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwg Y29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlw ZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIG1p bnVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX0V4 cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh bHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4g aW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtaW51czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC0gKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYg X190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5 cGVuYW1lIG1pbnVzPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8 bWludXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFz cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX0NvbnN0YW50LF9FeHByLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIG1pbnVzPHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgLSAoY29uc3QgdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5 cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf QmluQ2xvczxtaW51cyxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtaW51cyxfRXhwcixfVmFsQXJy YXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgbWludXM8dHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAtIChjb25zdCBfRXhw cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbWludXM8X0FyZz46OnJlc3VsdF90eXBl IF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtaW51cyxfRXhwcixfVmFsQXJyYXksX0RvbSxfQXJn PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX2Ug KCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt aW51cyxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlw ZW5hbWUgbWludXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVy YXRvciAtIChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBtaW51czxf VHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX1ZhbEFycmF5 LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g KF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xh c3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9E b20xLF9Eb20yPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlw ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBf RG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6 OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBf QXJnOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1 ZTsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCks IF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxt dWx0aXBsaWVzLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ LCB0eXBlbmFtZSBtdWx0aXBsaWVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRf dHlwZT4gb3BlcmF0b3IgKiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbXVsdGlw bGllczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxp ZXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv c3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfQ29uc3RhbnQsX0V4cHIsdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGllczx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNvbnN0IHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf QXJnOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1 ZTsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdCwg X192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG11 bHRpcGxpZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s IHR5cGVuYW1lIG11bHRpcGxpZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90 eXBlPiBvcGVyYXRvciAqIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3Yp IHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h bWUgbXVsdGlwbGllczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9z PG11bHRpcGxpZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXks X0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbXVsdGlwbGll czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICogKGNv bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG11bHRpcGxpZXM8X1RwPjo6 cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5 LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4g KF9DbG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xh c3MgX0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9FeHByLF9Eb20x LF9Eb20yPiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJl c3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6 dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVl X3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0 eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRl ZiBfQmluQ2xvczxkaXZpZGVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9 IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxkaXZpZGVzLF9FeHBy LF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBkaXZp ZGVzPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgLyAo Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgZGl2aWRlczxfQXJnPjo6cmVzdWx0X3R5 cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX0NvbnN0YW50LF9Eb20s X0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAo X192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNs b3M8ZGl2aWRlcyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9t PiwgdHlwZW5hbWUgZGl2aWRlczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5 cGU+IG9wZXJhdG9yIC8gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYg dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8 X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9Db25z dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh bHVlPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIGRpdmlkZXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAvIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7 IHR5cGVkZWYgdHlwZW5hbWUgZGl2aWRlczxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBl ZGVmIF9CaW5DbG9zPGRpdmlkZXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsg fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8ZGl2aWRlcyxfVmFs QXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgZGl2 aWRlczx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIC8g KGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9F eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIGRpdmlkZXM8X1RwPjo6 cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9F eHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9D bG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3Mg X0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9FeHByLF9FeHByLF9Eb20xLF9E b20yPiwgdHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3Vs dF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tMSx0eXBlbmFtZSBfRG9tMTo6dmFs dWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5 cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBl ZGVmIHR5cGVuYW1lIG1vZHVsdXM8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf QmluQ2xvczxtb2R1bHVzLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtb2R1bHVzLF9FeHByLF9D b25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBtb2R1bHVz PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgJSAoY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUg X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0Fy Zz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192 ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8 bW9kdWx1cyxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwg dHlwZW5hbWUgbW9kdWx1czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+ IG9wZXJhdG9yICUgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIG1vZHVsdXM8X0Fy Zz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxtb2R1bHVzLF9Db25zdGFu dCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVl PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIG1vZHVsdXM8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciAlIChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5 cGVkZWYgdHlwZW5hbWUgbW9kdWx1czxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVm IF9CaW5DbG9zPG1vZHVsdXMsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJy YXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgbW9kdWx1 czx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICUgKGNv bnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHBy PF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIG1vZHVsdXM8X1RwPjo6cmVz dWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9FeHBy LF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9z dXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0Rv bTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEs X0RvbTI+LCB0eXBlbmFtZSBfQml0d2lzZV94b3I8dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0Rv bTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2 YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0Fy ZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV94b3I8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1 ZTsgdHlwZWRlZiBfQmluQ2xvczxfQml0d2lzZV94b3IsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAo KSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9z PF9CaXR3aXNlX3hvcixfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+Ojpy ZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsg dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUg X0JpdHdpc2VfeG9yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8 X0JpdHdpc2VfeG9yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxh dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfQ29uc3Rh bnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX0JpdHdp c2VfeG9yPHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3Ig XiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9t LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPF9Bcmc+Ojpy ZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9Db25zdGFu dCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVl PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2VfeG9yPHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgXiAoY29uc3QgX0V4cHI8X0RvbSx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfQXJnPjo6cmVzdWx0X3R5cGUg X1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfRXhwcixfVmFsQXJyYXksX0Rv bSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJl IChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmlu Q2xvczxfQml0d2lzZV94b3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl Pjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yIF4gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl ZGVmIHR5cGVuYW1lIF9CaXR3aXNlX3hvcjxfVHA+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVk ZWYgX0JpbkNsb3M8X0JpdHdpc2VfeG9yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1 cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkp KTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5hbWUg X0JpdHdpc2VfYW5kPHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9w ZXJhdG9yICYgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYg X192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykg eyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5h bWUgX0JpdHdpc2VfYW5kPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNs b3M8X0JpdHdpc2VfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9hbmQsX0V4 cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9C aXR3aXNlX2FuZDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJh dG9yICYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwg Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDxfQXJn Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfRXhw cixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9W YWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9hbmQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yICYgKGNvbnN0IHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJn OyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVl OyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9t PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3Qs IF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf Qml0d2lzZV9hbmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT4sIHR5cGVuYW1lIF9CaXR3aXNlX2FuZDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVz dWx0X3R5cGU+IG9wZXJhdG9yICYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0 eXBlbmFtZSBfQml0d2lzZV9hbmQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBf QmluQ2xvczxfQml0d2lzZV9hbmQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7 IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsg fSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5k LF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFt ZSBfQml0d2lzZV9hbmQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv cGVyYXRvciAmIChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192 LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlw ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBfQml0 d2lzZV9hbmQ8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3 aXNlX2FuZCxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRlbXBsYXRl PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNl X29yLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5h bWUgX0RvbTE6OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgX0V4 cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9E b20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9vcjxfQXJn Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9FeHBy LF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1 ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxfQml0d2lzZV9vcixfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBl bmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8dHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciB8IChjb25zdCBfRXhwcjxfRG9t LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUmIF9fdCkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsg dHlwZWRlZiB0eXBlbmFtZSBfQml0d2lzZV9vcjxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0 eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9D bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1cmUgKF9fdiAoKSwg X190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3 aXNlX29yLF9Db25zdGFudCxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0 eXBlbmFtZSBfQml0d2lzZV9vcjx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5 cGU+IG9wZXJhdG9yIHwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYg dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNl X29yPF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vf b3IsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xv c3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBf RG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX1ZhbEFycmF5LF9E b20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9CaXR3aXNlX29yPHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgX0V4 cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0 eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9CaXR3aXNlX29yPF9Bcmc+OjpyZXN1 bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0V4cHIsX1ZhbEFy cmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChf Q2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9CaXR3aXNlX29yPHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgfCAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgdHlwZW5hbWUgX0JpdHdpc2Vfb3I8X1RwPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0 eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Ns b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX192LCBfX2Ug KCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCB0eXBlbmFt ZSBfU2hpZnRfbGVmdDx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBv cGVyYXRvciA8PCAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+ JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193 KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBl bmFtZSBfU2hpZnRfbGVmdDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5D bG9zPF9TaGlmdF9sZWZ0LF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRl bXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhw cixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1No aWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRv ciA8PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBj b25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46 OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfRXhwcixf Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1 ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSxfRG9tPiwgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA8PCAoY29uc3QgdHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5 cGVkZWYgdHlwZW5hbWUgX1NoaWZ0X2xlZnQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlw ZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3QsIF9fdiAo KSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRf bGVmdCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgdHlw ZW5hbWUgX1NoaWZ0X2xlZnQ8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBl PiBvcGVyYXRvciA8PCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1l IF9TaGlmdF9sZWZ0PF9Bcmc+OjpyZXN1bHRfdHlwZSBfVmFsdWU7IHR5cGVkZWYgX0JpbkNsb3M8 X1NoaWZ0X2xlZnQsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5 LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9s ZWZ0PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPDwg KGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9F eHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9sZWZ0PF9U cD46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFs QXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Zh bHVlPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20x LCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixf RXhwcixfRG9tMSxfRG9tMj4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tMTo6 dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29uc3QgX0V4cHI8X0RvbTEs dHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVu YW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZh bHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X0FyZz46OnJlc3Vs dF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0V4cHIsX0V4cHIs X0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Ns b3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9F eHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiwgdHlwZW5hbWUgX1NoaWZ0X3JpZ2h0PHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+OjpyZXN1bHRfdHlwZT4gb3BlcmF0b3IgPj4gKGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBl ZGVmIHR5cGVuYW1lIF9TaGlmdF9yaWdodDxfQXJnPjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBl ZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9WYWx1ZT4gKF9DbG9zdXJlIChfX3YgKCksIF9f dCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRf cmlnaHQsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5 cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5 cGU+IG9wZXJhdG9yID4+IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QsIGNv bnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVm IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRf cmlnaHQ8X0FyZz46OnJlc3VsdF90eXBlIF9WYWx1ZTsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRf cmlnaHQsX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSxfVmFsdWU+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFz cyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9FeHByLF9WYWxBcnJh eSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8 dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT46OnJlc3VsdF90eXBlPiBvcGVyYXRvciA+PiAoY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxh cnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIHR5cGVuYW1lIF9TaGlmdF9yaWdodDxfQXJn Pjo6cmVzdWx0X3R5cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfRXhw cixfVmFsQXJyYXksX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9W YWx1ZT4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIHR5cGVuYW1lIF9TaGlmdF9yaWdodDx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPjo6cmVzdWx0X3R5cGU+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJh eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlIF9UcDsgdHlwZWRlZiB0eXBlbmFtZSBfU2hpZnRfcmlnaHQ8X1RwPjo6cmVzdWx0X3R5 cGUgX1ZhbHVlOyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX0V4cHIs X1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1ZhbHVlPiAoX0Nsb3N1 cmUgKF9fdiwgX19lICgpKSk7IH0KIyA5MjEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy92YWxh cnJheV9tZXRhLmgiIDMKICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5s aW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwg Ym9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1 ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlw ZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVk ZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJl OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkp OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2Fu ZCxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4g b3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5k LF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+ IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQsX0V4cHIsdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBf QXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9Db25zdGFudCxfRXhwcixfQXJnLF9E b20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3Qs IF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxs b2dpY2FsX2FuZCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl PiwgYm9vbD4gb3BlcmF0b3IgJiYgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9C aW5DbG9zPGxvZ2ljYWxfYW5kLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX192KSk7IH0gdGVt cGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxB cnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRv ciAmJiAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29u c3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYg dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9h bmQsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3Mg X0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfRXhw cixfRXhwcixfRG9tMSxfRG9tMj4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9t MSx0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbTIsdHlw ZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX3cpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6 dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX0V4cHIs X0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9z dXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9Db25zdGFudCxfRG9tLHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciB8fCAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl JiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg X0JpbkNsb3M8bG9naWNhbF9vcixfRXhwcixfQ29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfQ29u c3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0 b3IgfHwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8 X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0NvbnN0 YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5DbG9zPGxvZ2ljYWxfb3IsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCBfRXhwcjxfRG9tLHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UsIGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBl IF9UcDsgdHlwZWRlZiBfQmluQ2xvczxsb2dpY2FsX29yLF9FeHByLF9WYWxBcnJheSxfRG9tLF9U cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAo KSwgX192KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxv Z2ljYWxfb3IsX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4s IGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBf X2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmlu Q2xvczxsb2dpY2FsX29yLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7IH0KICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVx dWFsX3RvLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0 IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhw cjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8sX0V4 cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9v bD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdyAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20s dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0 eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9z dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkp OyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxf Q29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3Bl cmF0b3IgPT0gKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4 cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9Db25z dGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9v bD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSBfRXhwcjxfQmluQ2xvczxlcXVhbF90byxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg X1RwOyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9FeHByLF9WYWxBcnJheSxfRG9tLF9UcD4g X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fZSAoKSwg X192KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFs X3RvLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29s PiBvcGVyYXRvciA9PSAoY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4m IF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8 ZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20yPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFs X3RvLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiwgYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9F eHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxf RG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1l IF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9F eHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJv b2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBp bmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciAhPSAoY29uc3QgX0V4cHI8 X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9B cmc7IHR5cGVkZWYgX0JpbkNsb3M8bm90X2VxdWFsX3RvLF9FeHByLF9Db25zdGFudCxfRG9tLF9B cmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3Yg KCksIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxu b3RfZXF1YWxfdG8sX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0Rv bT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBf X3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0 eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxu b3RfZXF1YWxfdG8sX0NvbnN0YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8 Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG5vdF9lcXVhbF90byxfRXhwcixfVmFs QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgIT0g KGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3Qg dmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5DbG9zPG5vdF9lcXVhbF90byxf RXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs Ym9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHByLHR5cGVuYW1l IF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yICE9IChjb25zdCB2YWxhcnJh eTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVu YW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5LF9FeHBy LF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3Vy ZSAoX192LCBfX2UgKCkpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbTEsIGNsYXNzIF9Eb20y PiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4sIGJv b2w+IG9wZXJhdG9yIDwgKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90 eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4m IF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg X0JpbkNsb3M8bGVzcyxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193ICgpKSk7IH0gdGVtcGxh dGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxlc3MsX0V4cHIsX0NvbnN0YW50 LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDwgKGNvbnN0 IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0V4cHIsX0NvbnN0YW50LF9Eb20sX0Fy Zz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAo KSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxl c3MsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4sIGJvb2w+ IG9wZXJhdG9yIDwgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0NvbnN0 YW50LF9FeHByLF9BcmcsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29s PiAoX0Nsb3N1cmUgKF9fdCwgX192ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IF9FeHByPF9CaW5DbG9zPGxlc3MsX0V4cHIsX1ZhbEFycmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZT4sIGJvb2w+IG9wZXJhdG9yIDwgKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0 eXBlZGVmIF9CaW5DbG9zPGxlc3MsX0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19lICgpLCBfX3YpKTsgfSB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzcyxfVmFsQXJyYXks X0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPCAo Y29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4 cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXks X0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9D bG9zdXJlIChfX3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3Mg X0RvbTI+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9E b20yPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6 OnZhbHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1 ZV90eXBlPiYgX193KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsg dHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3Vy ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkp KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixf RXhwcixfQ29uc3RhbnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3Bl cmF0b3IgPiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192 LCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixf Q29uc3RhbnQsX0RvbSxfQXJnPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+ IChfQ2xvc3VyZSAoX192ICgpLCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSxfRG9tPiwgYm9vbD4gb3BlcmF0b3IgPiAoY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYg X0JpbkNsb3M8Z3JlYXRlcixfQ29uc3RhbnQsX0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfRXhwcixfVmFs QXJyYXksX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPiAo Y29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2 YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcixfRXhwcixf VmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4g KF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf RXhwcjxfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsg dHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfRXhwcixfVHAsX0RvbT4gX0Nsb3N1 cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpKSk7 IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9C aW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+LCBib29sPiBvcGVyYXRv ciA8PSAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX3Ys IGNvbnN0IF9FeHByPF9Eb20yLHR5cGVuYW1lIF9Eb20yOjp2YWx1ZV90eXBlPiYgX193KSB7IHR5 cGVkZWYgdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxs ZXNzX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192ICgpLCBfX3cgKCkpKTsgfSB0ZW1wbGF0ZTxj bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bGVzc19lcXVhbCxfRXhwcixfQ29uc3Rh bnQsX0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPD0gKGNv bnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFs dWVfdHlwZSBfQXJnOyB0eXBlZGVmIF9CaW5DbG9zPGxlc3NfZXF1YWwsX0V4cHIsX0NvbnN0YW50 LF9Eb20sX0FyZz4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1 cmUgKF9fdiAoKSwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9C aW5DbG9zPGxlc3NfZXF1YWwsX0NvbnN0YW50LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUsX0RvbT4sIGJvb2w+IG9wZXJhdG9yIDw9IChjb25zdCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlJiBfX3QsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9f dikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmlu Q2xvczxsZXNzX2VxdWFsLF9Db25zdGFudCxfRXhwcixfQXJnLF9Eb20+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdiAoKSkpOyB9IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9FeHByLF9W YWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCBib29sPiBvcGVyYXRvciA8 PSAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25z dCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxf RXhwcixfVmFsQXJyYXksX0RvbSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs Ym9vbD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdikpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfRXhwcix0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA8PSAoY29uc3QgdmFsYXJyYXk8 dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZSBfVHA7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFsQXJyYXksX0V4cHIsX1Rw LF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChf X3YsIF9fZSAoKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tMSwgY2xhc3MgX0RvbTI+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9FeHByLF9FeHByLF9Eb20xLF9Eb20y PiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2 YWx1ZV90eXBlPiYgX192LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVf dHlwZT4mIF9fdykgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlIF9Bcmc7IHR5 cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfRXhwcixfRG9tMSxfRG9tMj4gX0Ns b3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxib29sPiAoX0Nsb3N1cmUgKF9fdiAoKSwgX193 ICgpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0 ZXJfZXF1YWwsX0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4s IGJvb2w+IG9wZXJhdG9yID49IChjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+JiBfX3YsIGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCkgeyB0eXBl ZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX0FyZzsgdHlwZWRlZiBfQmluQ2xvczxncmVh dGVyX2VxdWFsLF9FeHByLF9Db25zdGFudCxfRG9tLF9Bcmc+IF9DbG9zdXJlOyByZXR1cm4gX0V4 cHI8X0Nsb3N1cmUsYm9vbD4gKF9DbG9zdXJlIChfX3YgKCksIF9fdCkpOyB9IHRlbXBsYXRlPGNs YXNzIF9Eb20+IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCBib29sPiBvcGVyYXRvciA+PSAo Y29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190LCBjb25zdCBfRXhwcjxfRG9tLHR5 cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX3YpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlIF9Bcmc7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfQ29uc3RhbnQs X0V4cHIsX0FyZyxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChf Q2xvc3VyZSAoX190LCBfX3YgKCkpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfRXhwcixfVmFsQXJyYXksX0RvbSx0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9FeHByPF9Eb20sdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSwgY29uc3QgdmFsYXJyYXk8dHlwZW5hbWUgX0Rv bTo6dmFsdWVfdHlwZT4mIF9fdikgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUg X1RwOyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX0V4cHIsX1ZhbEFycmF5LF9Eb20s X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX19l ICgpLCBfX3YpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8 Z3JlYXRlcl9lcXVhbCxfVmFsQXJyYXksX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxf RG9tPiwgYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZh bHVlX3R5cGU+JiBfX3YsIGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlw ZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVm IF9CaW5DbG9zPGdyZWF0ZXJfZXF1YWwsX1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3Vy ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX2UgKCkpKTsg fQojIDk1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3ZhbGFycmF5X21ldGEuaCIgMwogICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4s dHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYWJzKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUg X0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5 cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhYnMpKSk7 IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJy YXksX1RwPixfVHA+IGFicyhjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5G dW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1Rw PiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmYWJzKSkpOyB9CiAgICB0ZW1wbGF0ZTxj bGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBf RG9tOjp2YWx1ZV90eXBlPiBjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5 cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvcykpKTsgfSB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9U cD4gY29zKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1Zh bEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3Vy ZSAoX192LCAoX1RwKCopKF9UcCkpKCZjb3MpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+IGFjb3MoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg X19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1Vu RnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4o X0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmFjb3MpKSk7IH0gdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGFjb3Mo Y29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXks X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3Ys IChfVHAoKikoX1RwKSkoJmFjb3MpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSBfRXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+ IGNvc2goY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7 IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xv czxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1 cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmNvc2gpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IGNvc2goY29uc3Qg dmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAo KikoX1RwKSkoJmNvc2gpKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHNpbihj b25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRl ZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHBy LF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2Uo KSwgKF9UcCgqKShfVHApKSgmc2luKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5l IF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBzaW4oY29uc3QgdmFsYXJyYXk8 X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSko JnNpbikpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNs b3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXNpbihjb25zdCBfRXhw cjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9D bG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgq KShfVHApKSgmYXNpbikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf VW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gYXNpbihjb25zdCB2YWxhcnJheTxfVHA+JiBf X3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmYXNpbikp KTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4 cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gc2luaChjb25zdCBfRXhwcjxfRG9t LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9FeHByLF9Eb20+IF9DbG9zdXJl OyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShfX2UoKSwgKF9UcCgqKShfVHAp KSgmc2luaCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5D bG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gc2luaChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsg dHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmc2luaCkpKTsgfQog ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X0V4cHIsX0Rv bT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gdGFuKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGUgX1RwOyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZ0YW4p KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfVmFs QXJyYXksX1RwPixfVHA+IHRhbihjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIHsgdHlwZWRlZiBf VW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs X1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgmdGFuKSkpOyB9CiAgICB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiB0YW5oKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6 dmFsdWVfdHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1Rw OyB0eXBlZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxf Q2xvc3VyZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZ0YW5oKSkpOyB9IHRl bXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U cD4sX1RwPiB0YW5oKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNs b3M8X1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChf Q2xvc3VyZSAoX192LCAoX1RwKCopKF9UcCkpKCZ0YW5oKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFz cyBfRG9tPiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiBhdGFuKGNvbnN0IF9FeHByPF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fZSkgeyB0eXBlZGVmIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUgX1RwOyB0eXBl ZGVmIF9VbkZ1bkNsb3M8X0V4cHIsX0RvbT4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSxfVHA+KF9DbG9zdXJlKF9fZSgpLCAoX1RwKCopKF9UcCkpKCZhdGFuKSkpOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1Rw PiBhdGFuKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1Zh bEFycmF5LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3Vy ZSAoX192LCAoX1RwKCopKF9UcCkpKCZhdGFuKSkpOyB9CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgX0V4cHI8X1VuRnVuQ2xvczxfRXhwcixfRG9tPix0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiBleHAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg X19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1Vu RnVuQ2xvczxfRXhwcixfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4o X0Nsb3N1cmUoX19lKCksIChfVHAoKikoX1RwKSkoJmV4cCkpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSBfRXhwcjxfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+LF9UcD4gZXhwKGNv bnN0IHZhbGFycmF5PF9UcD4mIF9fdikgeyB0eXBlZGVmIF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9U cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCAo X1RwKCopKF9UcCkpKCZleHApKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBf RXhwcjxfVW5GdW5DbG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGxv Zyhjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsgdHlw ZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfVW5GdW5DbG9zPF9F eHByLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPihfQ2xvc3VyZShf X2UoKSwgKF9UcCgqKShfVHApKSgmbG9nKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5s aW5lIF9FeHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBsb2coY29uc3QgdmFsYXJy YXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3Vy ZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1Rw KSkoJmxvZykpKTsgfQogICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9VbkZ1 bkNsb3M8X0V4cHIsX0RvbT4sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gbG9nMTAoY29uc3Qg X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9t PiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChf VHAoKikoX1RwKSkoJmxvZzEwKSkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9F eHByPF9VbkZ1bkNsb3M8X1ZhbEFycmF5LF9UcD4sX1RwPiBsb2cxMChjb25zdCB2YWxhcnJheTxf VHA+JiBfX3YpIHsgdHlwZWRlZiBfVW5GdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgKF9UcCgqKShfVHApKSgm bG9nMTApKSk7IH0KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhwcjxfVW5GdW5D bG9zPF9FeHByLF9Eb20+LHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IHNxcnQoY29uc3QgX0V4 cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5h bWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX1VuRnVuQ2xvczxfRXhwcixfRG9tPiBf Q2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4oX0Nsb3N1cmUoX19lKCksIChfVHAo KikoX1RwKSkoJnNxcnQpKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8 X1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPixfVHA+IHNxcnQoY29uc3QgdmFsYXJyYXk8X1RwPiYg X192KSB7IHR5cGVkZWYgX1VuRnVuQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIChfVHAoKikoX1RwKSkoJnNxcnQp KSk7IH0KIyAxMDU4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvdmFsYXJyYXlfbWV0YS5oIiAz CnRlbXBsYXRlPGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5GdW5D bG9zPF9FeHByLF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT5h dGFuMiAoY29uc3QgX0V4cHI8X0RvbTEsdHlwZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGU+JiBfX2Ux LCBjb25zdCBfRXhwcjxfRG9tMix0eXBlbmFtZSBfRG9tMjo6dmFsdWVfdHlwZT4mIF9fZTIpIHsg dHlwZWRlZiB0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNs b3M8X0V4cHIsX0V4cHIsX0RvbTEsX0RvbTI+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZTEgKCksIF9fZTIgKCksIChfVHAoKikoX1RwLCBfVHApKSgm YXRhbjIpKSk7IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9z PF9FeHByLF9WYWxBcnJheSxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+LCB0eXBlbmFt ZSBfRG9tOjp2YWx1ZV90eXBlPiBhdGFuMiAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9t Ojp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90 eXBlPiYgX192KSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVk ZWYgX0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJu IF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdiwgKF9UcCgqKShfVHAs IF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0Jp bkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUsX0RvbT4s IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25zdCB2YWxhcnJheTx0eXBlbmFt ZSBfRG9tOjp2YWxhcnJheT4mIF9fdiwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7 IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fZSAoKSwgKF9UcCgq KShfVHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4 cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+IGF0YW4yIChjb25zdCBfRXhwcjxfRG9t LCB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lLCBjb25zdCB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlJiBfX3QpIHsgdHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsg dHlwZWRlZiBfQmluRnVuQ2xvczxfRXhwcixfQ29uc3RhbnQsX0RvbSxfVHA+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fZSAoKSwgX190LCAoX1RwKCop KF9UcCwgX1RwKSkoJmF0YW4yKSkpOyB9IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSBfRXhw cjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX0V4cHIsdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSxf RG9tPiwgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4gYXRhbjIgKGNvbnN0IHR5cGVuYW1lIF9E b206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5 cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fZSAoKSwgKF9UcCgqKShf VHAsIF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhw cjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IGF0YW4yIChj b25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdykgeyB0eXBl ZGVmIF9CaW5GdW5DbG9zPF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAoX192LCBfX3csIChfVHAoKikoX1Rw LF9UcCkpKCZhdGFuMikpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxf QmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gYXRhbjIgKGNvbnN0 IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3QgX1RwJiBfX3QpIHsgdHlwZWRlZiBfQmluRnVuQ2xv czxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns b3N1cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190LCAoX1RwKCopKF9UcCxfVHApKSgmYXRhbjIp KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0Nv bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IGF0YW4yIChjb25zdCBfVHAmIF9fdCwgY29u c3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50LF9W YWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D bG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJmF0YW4yKSkpOyB9CnRlbXBsYXRl PGNsYXNzIF9Eb20xLCBjbGFzcyBfRG9tMj4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9FeHBy LF9FeHByLF9Eb20xLF9Eb20yPix0eXBlbmFtZSBfRG9tMTo6dmFsdWVfdHlwZT5wb3cgKGNvbnN0 IF9FeHByPF9Eb20xLHR5cGVuYW1lIF9Eb20xOjp2YWx1ZV90eXBlPiYgX19lMSwgY29uc3QgX0V4 cHI8X0RvbTIsdHlwZW5hbWUgX0RvbTI6OnZhbHVlX3R5cGU+JiBfX2UyKSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTE6OnZhbHVlX3R5cGUgX1RwOyB0eXBlZGVmIF9CaW5GdW5DbG9zPF9FeHByLF9F eHByLF9Eb20xLF9Eb20yPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D bG9zdXJlIChfX2UxICgpLCBfX2UyICgpLCAoX1RwKCopKF9UcCwgX1RwKSkoJnBvdykpKTsgfSB0 ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIsX1ZhbEFy cmF5LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206OnZhbHVl X3R5cGU+IHBvdyAoY29uc3QgX0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYg X19lLCBjb25zdCB2YWxhcnJheTx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX192KSB7IHR5 cGVkZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8 X0V4cHIsX1ZhbEFycmF5LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl LF9UcD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdiwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7 IH0gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9WYWxBcnJh eSxfRXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfRG9tOjp2 YWx1ZV90eXBlPiBwb3cgKGNvbnN0IHZhbGFycmF5PHR5cGVuYW1lIF9Eb206OnZhbGFycmF5PiYg X192LCBjb25zdCBfRXhwcjxfRG9tLHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGU+JiBfX2UpIHsg dHlwZWRlZiB0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlIF9UcDsgdHlwZWRlZiBfQmluRnVuQ2xv czxfVmFsQXJyYXksX0V4cHIsX1RwLF9Eb20+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1 cmUsX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX19lICgpLCAoX1RwKCopKF9UcCwgX1RwKSkoJnBvdykp KTsgfSB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X0V4cHIs X0NvbnN0YW50LF9Eb20sdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZT4sIHR5cGVuYW1lIF9Eb206 OnZhbHVlX3R5cGU+IHBvdyAoY29uc3QgX0V4cHI8X0RvbSwgdHlwZW5hbWUgX0RvbTo6dmFsdWVf dHlwZT4mIF9fZSwgY29uc3QgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSYgX190KSB7IHR5cGVk ZWYgdHlwZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0V4 cHIsX0NvbnN0YW50LF9Eb20sX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9U cD4gKF9DbG9zdXJlIChfX2UgKCksIF9fdCwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7IH0g dGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIF9FeHByPF9CaW5GdW5DbG9zPF9Db25zdGFudCxf RXhwcix0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlLF9Eb20+LCB0eXBlbmFtZSBfRG9tOjp2YWx1 ZV90eXBlPiBwb3cgKGNvbnN0IHR5cGVuYW1lIF9Eb206OnZhbHVlX3R5cGUmIF9fdCwgY29uc3Qg X0V4cHI8X0RvbSx0eXBlbmFtZSBfRG9tOjp2YWx1ZV90eXBlPiYgX19lKSB7IHR5cGVkZWYgdHlw ZW5hbWUgX0RvbTo6dmFsdWVfdHlwZSBfVHA7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X0NvbnN0YW50 LF9FeHByLF9UcCxfRG9tPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9D bG9zdXJlIChfX3QsIF9fZSAoKSwgKF9UcCgqKShfVHAsIF9UcCkpKCZwb3cpKSk7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxB cnJheSxfVHAsX1RwPiwgX1RwPiBwb3cgKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdiwgY29uc3Qg dmFsYXJyYXk8X1RwPiYgX193KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9WYWxB cnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9z dXJlIChfX3YsIF9fdywgKF9UcCgqKShfVHAsX1RwKSkoJnBvdykpKTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluRnVuQ2xvczxfVmFsQXJyYXksX0NvbnN0YW50LF9U cCxfVHA+LF9UcD4gcG93IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YsIGNvbnN0IF9UcCYgX190 KSB7IHR5cGVkZWYgX0JpbkZ1bkNsb3M8X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCwgKF9U cCgqKShfVHAsX1RwKSkoJnBvdykpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf RXhwcjxfQmluRnVuQ2xvczxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gcG93IChj b25zdCBfVHAmIF9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSB7IHR5cGVkZWYgX0JpbkZ1 bkNsb3M8X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHBy PF9DbG9zdXJlLF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdiwgKF9UcCgqKShfVHAsX1RwKSkoJnBv dykpKTsgfQoKCgp9CiMgODkgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXku aCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGNsYXNzIHZhbGFy cmF5CiAgewogIHB1YmxpYzoKICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsKCgogICAgICB2 YWxhcnJheSgpOwogICAgICBleHBsaWNpdCB2YWxhcnJheShzaXplX3QpOwogICAgICB2YWxhcnJh eShjb25zdCBfVHAmLCBzaXplX3QpOwogICAgICB2YWxhcnJheShjb25zdCBfVHAqIF9fcmVzdHJp Y3RfXywgc2l6ZV90KTsKICAgICAgdmFsYXJyYXkoY29uc3QgdmFsYXJyYXkmKTsKICAgICAgdmFs YXJyYXkoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYpOwogICAgICB2YWxhcnJheShjb25zdCBnc2xp Y2VfYXJyYXk8X1RwPiYpOwogICAgICB2YWxhcnJheShjb25zdCBtYXNrX2FycmF5PF9UcD4mKTsK ICAgICAgdmFsYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYpOwogICAgICB0ZW1wbGF0 ZTxjbGFzcyBfRG9tPgogICAgICB2YWxhcnJheShjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSk7 CiAgICAgfnZhbGFycmF5KCk7CgoKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0 IHZhbGFycmF5PF9UcD4mKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IF9U cCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3Qgc2xpY2VfYXJyYXk8X1Rw PiYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgZ3NsaWNlX2FycmF5PF9U cD4mKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I9KGNvbnN0IG1hc2tfYXJyYXk8X1Rw PiYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcj0oY29uc3QgaW5kaXJlY3RfYXJyYXk8 X1RwPiYpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4gdmFsYXJyYXk8X1RwPiYKICAgICAg ICBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpOwoKCgogICAgICBjb25zdCBfVHAm IG9wZXJhdG9yW10oc2l6ZV90KSBjb25zdDsKICAgICAgX1RwJiBvcGVyYXRvcltdKHNpemVfdCk7 CgogICAgICBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4gb3BlcmF0b3JbXShzbGlj ZSkgY29uc3Q7CiAgICAgIHNsaWNlX2FycmF5PF9UcD4gb3BlcmF0b3JbXShzbGljZSk7CiAgICAg IF9FeHByPF9HQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGlj ZSYpIGNvbnN0OwogICAgICBnc2xpY2VfYXJyYXk8X1RwPiBvcGVyYXRvcltdKGNvbnN0IGdzbGlj ZSYpOwogICAgICB2YWxhcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8Ym9vbD4m KSBjb25zdDsKICAgICAgbWFza19hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8 Ym9vbD4mKTsKICAgICAgX0V4cHI8X0lDbG9zPF9WYWxBcnJheSwgX1RwPiwgX1RwPgogICAgICAg IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpIGNvbnN0OwogICAgICBpbmRpcmVj dF9hcnJheTxfVHA+IG9wZXJhdG9yW10oY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYpOwoKCiAgICAg IF9FeHByPF9VbkNsb3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4sX1RwPiBvcGVyYXRvcisg KCkgY29uc3Q7CiAgICAgIF9FeHByPF9VbkNsb3M8bmVnYXRlLF9WYWxBcnJheSxfVHA+LF9UcD4g b3BlcmF0b3ItICgpIGNvbnN0OwogICAgICBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxfVmFs QXJyYXksX1RwPixfVHA+IG9wZXJhdG9yfiAoKSBjb25zdDsKICAgICAgX0V4cHI8X1VuQ2xvczxs b2dpY2FsX25vdCxfVmFsQXJyYXksX1RwPixib29sPiBvcGVyYXRvciEgKCkgY29uc3Q7CgoKICAg ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAoY29uc3QgX1RwJik7CiAgICAgIHZhbGFycmF5 PF9UcD4mIG9wZXJhdG9yLz0gKGNvbnN0IF9UcCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVy YXRvciU9IChjb25zdCBfVHAmKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAoY29u c3QgX1RwJik7CiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yLT0gKGNvbnN0IF9UcCYpOwog ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCBfVHAmKTsKICAgICAgdmFsYXJy YXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgX1RwJik7CiAgICAgIHZhbGFycmF5PF9UcD4mIG9w ZXJhdG9yfD0gKGNvbnN0IF9UcCYpOwogICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcjw8PShj b25zdCBfVHAmKTsKICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0oY29uc3QgX1RwJik7 CiAgICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsK ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwog ICAgICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvciU9IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAg ICAgIHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKICAg ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ItPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwogICAg ICB2YWxhcnJheTxfVHA+JiBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICAg IHZhbGFycmF5PF9UcD4mIG9wZXJhdG9yfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKICAgICAg dmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpOwogICAgICB2 YWxhcnJheTxfVHA+JiBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+Jik7CiAgICAgIHZh bGFycmF5PF9UcD4mIG9wZXJhdG9yPj49KGNvbnN0IHZhbGFycmF5PF9UcD4mKTsKCiAgICAgIHRl bXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IqPSAoY29u c3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAg dmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAg IHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IlPSAo Y29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAg ICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3IrPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAg ICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3It PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAg ICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7 CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0 b3J8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+ CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3ImPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3Bl cmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+Jik7CiAgICAgIHRlbXBsYXRlPGNsYXNzIF9E b20+CiAgICAgICAgdmFsYXJyYXk8X1RwPiYgb3BlcmF0b3I+Pj0oY29uc3QgX0V4cHI8X0RvbSxf VHA+Jik7CgoKCiAgICAgIHNpemVfdCBzaXplKCkgY29uc3Q7CiAgICAgIF9UcCBzdW0oKSBjb25z dDsKICAgICAgX1RwIG1pbigpIGNvbnN0OwogICAgICBfVHAgbWF4KCkgY29uc3Q7CgoKCgogICAg ICB2YWxhcnJheTxfVHA+IHNoaWZ0IChpbnQpIGNvbnN0OwogICAgICB2YWxhcnJheTxfVHA+IGNz aGlmdChpbnQpIGNvbnN0OwogICAgICBfRXhwcjxfVmFsRnVuQ2xvczxfVmFsQXJyYXksX1RwPixf VHA+IGFwcGx5KF9UcCBmdW5jKF9UcCkpIGNvbnN0OwogICAgICBfRXhwcjxfUmVmRnVuQ2xvczxf VmFsQXJyYXksX1RwPixfVHA+IGFwcGx5KF9UcCBmdW5jKGNvbnN0IF9UcCYpKSBjb25zdDsKICAg ICAgdm9pZCByZXNpemUoc2l6ZV90IF9fc2l6ZSwgX1RwIF9fYyA9IF9UcCgpKTsKCiAgcHJpdmF0 ZToKICAgICAgc2l6ZV90IF9NX3NpemU7CiAgICAgIF9UcCogX19yZXN0cmljdF9fIF9NX2RhdGE7 CgogICAgICBmcmllbmQgY2xhc3MgX0FycmF5PF9UcD47CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4gc3RydWN0IF9VbmFyeV9wbHVzIDogdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewog ICAgICBfVHAgb3BlcmF0b3IoKSAoY29uc3QgX1RwJiBfX3QpIGNvbnN0IHsgcmV0dXJuIF9fdDsg fQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9CaXR3aXNlX2FuZCA6IGJp bmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9f eCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194ICYgX195OyB9CiAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vfb3IgOiBiaW5hcnlfZnVuY3Rpb248X1RwLF9U cCxfVHA+IHsKICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gsIF9UcCBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCB8IF9feTsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0 IF9CaXR3aXNlX3hvciA6IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogICAgICBfVHAg b3BlcmF0b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194IF4gX195OyB9 CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBzdHJ1Y3QgX0JpdHdpc2Vfbm90IDogdW5h cnlfZnVuY3Rpb248X1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0b3IoKSAoX1RwIF9fdCkgY29u c3QgeyByZXR1cm4gfl9fdDsgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0 IF9TaGlmdF9sZWZ0IDogdW5hcnlfZnVuY3Rpb248X1RwLF9UcD4gewogICAgICBfVHAgb3BlcmF0 b3IoKSAoX1RwIF9feCwgX1RwIF9feSkgY29uc3QgeyByZXR1cm4gX194IDw8IF9feTsgfQogIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9TaGlmdF9yaWdodCA6IHVuYXJ5X2Z1 bmN0aW9uPF9UcCxfVHA+IHsKICAgICAgX1RwIG9wZXJhdG9yKCkgKF9UcCBfX3gsIF9UcCBfX3kp IGNvbnN0IHsgcmV0dXJuIF9feCA+PiBfX3k7IH0KICB9OwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogIGlubGluZSBjb25zdCBfVHAmCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoc2l6 ZV90IF9faSkgY29uc3QKICB7IHJldHVybiBfTV9kYXRhW19faV07IH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogIGlubGluZSBfVHAmCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3JbXSAoc2l6 ZV90IF9faSkKICB7IHJldHVybiBfTV9kYXRhW19faV07IH0KCn0KCiMgMSAiL3Vzci9pbmNsdWRl L2crKy12My9iaXRzL3NsaWNlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMv c2xpY2UuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgpjbGFzcyBzbGljZQp7CnB1YmxpYzoKICAgIHNs aWNlICgpOwogICAgc2xpY2UgKHNpemVfdCwgc2l6ZV90LCBzaXplX3QpOwoKICAgIHNpemVfdCBz dGFydCAoKSBjb25zdDsKICAgIHNpemVfdCBzaXplICgpIGNvbnN0OwogICAgc2l6ZV90IHN0cmlk ZSAoKSBjb25zdDsKCnByaXZhdGU6CiAgICBzaXplX3QgX01fb2ZmOwogICAgc2l6ZV90IF9NX3N6 OwogICAgc2l6ZV90IF9NX3N0Owp9OwoKaW5saW5lIHNsaWNlOjpzbGljZSAoKSB7fQoKaW5saW5l IHNsaWNlOjpzbGljZSAoc2l6ZV90IF9fbywgc2l6ZV90IF9fZCwgc2l6ZV90IF9fcykKICAgICAg ICA6IF9NX29mZiAoX19vKSwgX01fc3ogKF9fZCksIF9NX3N0IChfX3MpIHt9CgppbmxpbmUgc2l6 ZV90CnNsaWNlOjpzdGFydCAoKSBjb25zdAogIHsgcmV0dXJuIF9NX29mZjsgfQoKaW5saW5lIHNp emVfdApzbGljZTo6c2l6ZSAoKSBjb25zdAogIHsgcmV0dXJuIF9NX3N6OyB9CgppbmxpbmUgc2l6 ZV90CnNsaWNlOjpzdHJpZGUgKCkgY29uc3QKICB7IHJldHVybiBfTV9zdDsgfQoKfQojIDI1MiAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc2xpY2VfYXJyYXkuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zbGljZV9hcnJheS5oIiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBjbGFzcyBzbGljZV9hcnJheQogICAgewogICAgcHVibGljOgog ICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICAgIHZvaWQgb3BlcmF0b3I9IChj b25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcio9IChjb25z dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCB2 YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25zdCB2YWxh cnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2YWxhcnJh eTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxhcnJheTxf VHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJheTxfVHA+ JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxfVHA+Jikg Y29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29u c3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0 OwogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsK ICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1RwICYpOwoKCiAgICAgICAgdGVtcGxhdGU8 Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJh dG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNs YXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m KSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0 b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xh c3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp IGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRv ci09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg Y29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y Jj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBj b25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I8 PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNz IF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg Y29uc3Q7CgogICAgcHJpdmF0ZToKICAgICAgICBmcmllbmQgY2xhc3MgdmFsYXJyYXk8X1RwPjsK ICAgICAgICBzbGljZV9hcnJheShfQXJyYXk8X1RwPiwgY29uc3Qgc2xpY2UmKTsKCiAgICAgICAg Y29uc3Qgc2l6ZV90IF9NX3N6OwogICAgICAgIGNvbnN0IHNpemVfdCBfTV9zdHJpZGU7CiAgICAg ICAgY29uc3QgX0FycmF5PF9UcD4gX01fYXJyYXk7CgoKICAgICAgICBzbGljZV9hcnJheSAoY29u c3Qgc2xpY2VfYXJyYXkmKTsKCgogICAgICAgIHNsaWNlX2FycmF5ICgpOwogICAgICAgIHNsaWNl X2FycmF5JiBvcGVyYXRvcj0gKGNvbnN0IHNsaWNlX2FycmF5Jik7CiAgICB9OwoKICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBzbGljZV9hcnJheTxfVHA+OjpzbGljZV9hcnJh eSAoX0FycmF5PF9UcD4gX19hLCBjb25zdCBzbGljZSYgX19zKQogICAgICAgICAgICA6IF9NX3N6 IChfX3Muc2l6ZSAoKSksIF9NX3N0cmlkZSAoX19zLnN0cmlkZSAoKSksCiAgICAgICAgICAgICAg X01fYXJyYXkgKF9fYS5iZWdpbiAoKSArIF9fcy5zdGFydCAoKSkge30KCgogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHNsaWNlX2FycmF5PF9UcD46OnNsaWNlX2FycmF5KGNv bnN0IHNsaWNlX2FycmF5PF9UcD4mIGEpCiAgICAgICAgICAgIDogX01fc3ooYS5fTV9zeiksIF9N X3N0cmlkZShhLl9NX3N0cmlkZSksIF9NX2FycmF5KGEuX01fYXJyYXkpIHt9CgoKCgogICAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIHZvaWQKICAgIHNsaWNlX2FycmF5PF9UcD46 Om9wZXJhdG9yPSAoY29uc3QgX1RwJiBfX3QpCiAgICB7IF9fdmFsYXJyYXlfZmlsbCAoX01fYXJy YXksIF9NX3N6LCBfTV9zdHJpZGUsIF9fdCk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgdm9pZAogICAgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2 YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0CiAgICB7IF9fdmFsYXJyYXlfY29weSAoX0FycmF5PF9U cD4gKF9fdiksIF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlKTsgfQoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICBpbmxpbmUgdm9pZAogICAg c2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkg Y29uc3QKICAgIHsgX192YWxhcnJheV9jb3B5IChfX2UsIF9NX3N6LCBfTV9hcnJheSwgX01fc3Ry aWRlKTsgfQojIDE0NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3NsaWNlX2FycmF5LmgiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy YXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50 ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChf X3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5l IHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw PiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9N X3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9p ZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192 KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX3N6LCBfTV9z dHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh dGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLz0g KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2 aWRlcyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAlPSAoY29uc3Qg dmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01f YXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3YpKTt9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8 X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9B cnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7 IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+Ojpv cGVyYXRvciArPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt ZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX3N6LCBfTV9zdHJpZGUsIF9BcnJheTxfVHA+IChfX3Yp KTt9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZv aWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYg X19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX3N0cmlkZSwg X19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9h cnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJy YXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E b20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfRXhw cjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVzIChfTV9hcnJh eSwgX01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCB2YWxhcnJheTxfVHA+ JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9zeiwgX01f c3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIF49 IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3hv ciAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwg X01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+Ojpv cGVyYXRvciAmPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1 Z21lbnRlZF9hbmQgKF9NX2FycmF5LCBfTV9zdHJpZGUsIF9fZSwgX01fc3opOyB9CnRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0g KGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChf TV9hcnJheSwgX01fc3osIF9NX3N0cmlkZSwgX0FycmF5PF9UcD4gKF9fdikpO30gdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJh eTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsg X0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0K dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBzbGljZV9hcnJheTxfVHA+OjpvcGVy YXRvciA8PD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVu dGVkX3NoaWZ0X2xlZnQgKF9NX2FycmF5LCBfTV9zeiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAo X192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8X0RvbSxf VHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0IChfTV9hcnJheSwg X01fc3RyaWRlLCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2 b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYg X192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfTV9z eiwgX01fc3RyaWRlLCBfQXJyYXk8X1RwPiAoX192KSk7fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIHNsaWNlX2FycmF5PF9UcD46Om9wZXJh dG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21l bnRlZF9zaGlmdF9yaWdodCAoX01fYXJyYXksIF9NX3N0cmlkZSwgX19lLCBfTV9zeik7IH0KCgoK fQojIDI1MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF92YWxhcnJheS5oIiAyIDMKIyAx ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZ3NsaWNlLmgiIDEgMwojIDM2ICIvdXNyL2luY2x1 ZGUvZysrLXYzL2JpdHMvZ3NsaWNlLmgiIDMKCm5hbWVzcGFjZSBzdGQgewoKICAgIGNsYXNzIGdz bGljZQogICAgewogICAgcHVibGljOgogICAgICAgIGdzbGljZSAoKTsKICAgICAgICBnc2xpY2Ug KHNpemVfdCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsIGNvbnN0IHZhbGFycmF5PHNpemVfdD4m KTsKCgoKICAgICAgICBnc2xpY2UoY29uc3QgZ3NsaWNlJik7CiAgICAgICAgfmdzbGljZSgpOwoK CiAgICAgICAgZ3NsaWNlJiBvcGVyYXRvcj0gKGNvbnN0IGdzbGljZSYpOwoKICAgICAgICBzaXpl X3Qgc3RhcnQgKCkgY29uc3Q7CiAgICAgICAgdmFsYXJyYXk8c2l6ZV90PiBzaXplICgpIGNvbnN0 OwogICAgICAgIHZhbGFycmF5PHNpemVfdD4gc3RyaWRlICgpIGNvbnN0OwoKICAgIHByaXZhdGU6 CiAgICAgICAgc3RydWN0IF9JbmRleGVyIHsKICAgICAgICAgICAgc2l6ZV90IF9NX2NvdW50Owog ICAgICAgICAgICBzaXplX3QgX01fc3RhcnQ7CiAgICAgICAgICAgIHZhbGFycmF5PHNpemVfdD4g X01fc2l6ZTsKICAgICAgICAgICAgdmFsYXJyYXk8c2l6ZV90PiBfTV9zdHJpZGU7CiAgICAgICAg ICAgIHZhbGFycmF5PHNpemVfdD4gX01faW5kZXg7CiAgICAgICAgICAgIF9JbmRleGVyKHNpemVf dCwgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHZh bGFycmF5PHNpemVfdD4mKTsKICAgICAgICAgICAgdm9pZCBfTV9pbmNyZW1lbnRfdXNlKCkgeyAr K19NX2NvdW50OyB9CiAgICAgICAgICAgIHNpemVfdCBfTV9kZWNyZW1lbnRfdXNlKCkgeyByZXR1 cm4gLS1fTV9jb3VudDsgfQogICAgICAgIH07CgogICAgICAgIF9JbmRleGVyKiBfTV9pbmRleDsK CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBmcmllbmQgY2xhc3MgdmFsYXJyYXk7CiAg ICB9OwoKICAgIGlubGluZSBzaXplX3QKICAgIGdzbGljZTo6c3RhcnQgKCkgY29uc3QKICAgIHsg cmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0YXJ0IDogMDsgfQoKICAgIGlubGluZSB2 YWxhcnJheTxzaXplX3Q+CiAgICBnc2xpY2U6OnNpemUgKCkgY29uc3QKICAgIHsgcmV0dXJuIF9N X2luZGV4ID8gX01faW5kZXgtPl9NX3NpemUgOiB2YWxhcnJheTxzaXplX3Q+KCk7IH0KCiAgICBp bmxpbmUgdmFsYXJyYXk8c2l6ZV90PgogICAgZ3NsaWNlOjpzdHJpZGUgKCkgY29uc3QKICAgIHsg cmV0dXJuIF9NX2luZGV4ID8gX01faW5kZXgtPl9NX3N0cmlkZSA6IHZhbGFycmF5PHNpemVfdD4o KTsgfQoKICAgIGlubGluZSBnc2xpY2U6OmdzbGljZSAoKSA6IF9NX2luZGV4KDApIHt9CgogICAg aW5saW5lCiAgICBnc2xpY2U6OmdzbGljZShzaXplX3QgX19vLCBjb25zdCB2YWxhcnJheTxzaXpl X3Q+JiBfX2wsCiAgICAgICAgICAgICAgICAgICBjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX3Mp CiAgICAgICAgICAgIDogX01faW5kZXgobmV3IGdzbGljZTo6X0luZGV4ZXIoX19vLCBfX2wsIF9f cykpIHt9CgogICAgaW5saW5lCiAgICBnc2xpY2U6OmdzbGljZShjb25zdCBnc2xpY2UmIF9fZykg OiBfTV9pbmRleChfX2cuX01faW5kZXgpCiAgICB7IGlmIChfTV9pbmRleCkgX01faW5kZXgtPl9N X2luY3JlbWVudF91c2UoKTsgfQoKICAgIGlubGluZQogICAgZ3NsaWNlOjp+Z3NsaWNlKCkKICAg IHsgaWYgKF9NX2luZGV4ICYmIF9NX2luZGV4LT5fTV9kZWNyZW1lbnRfdXNlKCkgPT0gMCkgZGVs ZXRlIF9NX2luZGV4OyB9CgogICAgaW5saW5lIGdzbGljZSYKICAgIGdzbGljZTo6b3BlcmF0b3I9 IChjb25zdCBnc2xpY2UmIF9fZykKICAgIHsKICAgICAgICBpZiAoX19nLl9NX2luZGV4KSBfX2cu X01faW5kZXgtPl9NX2luY3JlbWVudF91c2UoKTsKICAgICAgICBpZiAoX01faW5kZXggJiYgX01f aW5kZXgtPl9NX2RlY3JlbWVudF91c2UoKSA9PSAwKSBkZWxldGUgX01faW5kZXg7CiAgICAgICAg X01faW5kZXggPSBfX2cuX01faW5kZXg7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKCn0K IyAyNTQgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2dzbGljZV9hcnJheS5oIiAxIDMKIyAzNiAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL2dzbGljZV9hcnJheS5oIiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAg ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGNsYXNzIGdzbGljZV9hcnJheQogICAgewogICAgcHVi bGljOgogICAgICAgIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogICAgICAgIHZvaWQgb3BlcmF0 b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcio9 IChjb25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci89IChj b25zdCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciU9IChjb25z dCB2YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCB2 YWxhcnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCB2YWxh cnJheTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcl49IChjb25zdCB2YWxhcnJh eTxfVHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCB2YWxhcnJheTxf VHA+JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChjb25zdCB2YWxhcnJheTxfVHA+ JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcjw8PShjb25zdCB2YWxhcnJheTxfVHA+Jikg Y29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj4+PShjb25zdCB2YWxhcnJheTxfVHA+JikgY29u c3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj0oY29uc3QgX1RwJik7CgogICAgICAgIHRlbXBsYXRl PGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9FeHByPF9Eb20sX1Rw PiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVy YXRvcio9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxj bGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3IvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJh dG9yJT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNs YXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m KSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0 b3ItPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xh c3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yXj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp IGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRv ciY9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3J8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+Jikg Y29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y PDw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFz cyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYp IGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgX0FycmF5PF9UcD4gX01fYXJyYXk7CiAgICAg ICAgY29uc3QgdmFsYXJyYXk8c2l6ZV90PiYgX01faW5kZXg7CgogICAgICAgIGZyaWVuZCBjbGFz cyB2YWxhcnJheTxfVHA+OwoKICAgICAgICBnc2xpY2VfYXJyYXkgKF9BcnJheTxfVHA+LCBjb25z dCB2YWxhcnJheTxzaXplX3Q+Jik7CgoKICAgICAgICBnc2xpY2VfYXJyYXkgKGNvbnN0IGdzbGlj ZV9hcnJheSYpOwoKCiAgICAgICAgZ3NsaWNlX2FycmF5KCk7CiAgICAgICAgZ3NsaWNlX2FycmF5 JiBvcGVyYXRvcj0gKGNvbnN0IGdzbGljZV9hcnJheSYpOwogICAgfTsKCiAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUKICAgIGdzbGljZV9hcnJheTxfVHA+Ojpnc2xpY2VfYXJy YXkgKF9BcnJheTxfVHA+IF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkKICAgICAgICAgICAgOiBfTV9hcnJheSAoX19h KSwgX01faW5kZXggKF9faSkge30KCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5s aW5lCiAgICBnc2xpY2VfYXJyYXk8X1RwPjo6Z3NsaWNlX2FycmF5IChjb25zdCBnc2xpY2VfYXJy YXk8X1RwPiYgX19hKQogICAgICAgICAgICA6IF9NX2FycmF5IChfX2EuX01fYXJyYXkpLCBfTV9p bmRleCAoX19hLl9NX2luZGV4KSB7fQoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bmxpbmUgdm9pZAogICAgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX1RwJiBf X3QpCiAgICB7CiAgICAgICAgX192YWxhcnJheV9maWxsIChfTV9hcnJheSwgX0FycmF5PHNpemVf dD4oX01faW5kZXgpLAogICAgICAgICAgICAgICAgICAgICAgICAgX01faW5kZXguc2l6ZSgpLCBf X3QpOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAg ICBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp IGNvbnN0CiAgICB7CiAgICAgICAgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiAoX192KSwg X192LnNpemUgKCksCiAgICAgICAgICAgICAgICAgICAgICAgICBfTV9hcnJheSwgX0FycmF5PHNp emVfdD4oX01faW5kZXgpKTsKICAgIH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICB0 ZW1wbGF0ZTxjbGFzcyBFPgogICAgaW5saW5lIHZvaWQKICAgIGdzbGljZV9hcnJheTxfVHA+Ojpv cGVyYXRvcj0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QKICAgIHsKICAgICAgICBf X3ZhbGFycmF5X2NvcHkgKF9fZSwgX01faW5kZXguc2l6ZSgpLCBfTV9hcnJheSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSk7CiAgICB9CiMgMTUyICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvZ3NsaWNlX2FycmF5LmgiIDMKdGVtcGxhdGU8dHlwZW5h bWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0 IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMg KF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJheTxfVHA+IChfX3YpLCBf X3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBp bmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPEUs IF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9NX2FycmF5 LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgpKTsgfQp0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRv ciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf ZGl2aWRlcyAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9UcD4g KF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNs YXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAvPSAoY29uc3Qg X0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfZGl2aWRlcyAoX01f YXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9 CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9w ZXJhdG9yICU9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21l bnRlZF9tb2R1bHVzIChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8 X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxh dGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChj b25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVz IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUo KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf YXVnbWVudGVkX3BsdXMgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJh eTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1w bGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0g KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMg KF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6ZSgp KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+ OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9h dWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9BcnJh eTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1w bGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3BlcmF0b3IgLT0g KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21pbnVz IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUo KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlf YXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5 PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs YXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAo Y29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfeG9yIChf TV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7 IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6 b3BlcmF0b3IgJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVn bWVudGVkX2FuZCAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9U cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl PGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29u c3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9h cnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfX2UsIF9NX2luZGV4LnNpemUoKSk7IH0K dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBnc2xpY2VfYXJyYXk8X1RwPjo6b3Bl cmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVu dGVkX29yIChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5kZXgpLCBfQXJyYXk8X1RwPiAo X192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh c3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9yIHw9IChjb25zdCBf RXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX01fYXJyYXks IF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX19lLCBfTV9pbmRleC5zaXplKCkpOyB9CnRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9wZXJhdG9y IDw8PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRf c2hpZnRfbGVmdCAoX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9NX2luZGV4KSwgX0FycmF5PF9U cD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl PGNsYXNzIEU+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNv bnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xl ZnQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9fZSwgX01faW5kZXguc2l6 ZSgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGdzbGljZV9hcnJheTxf VHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJy YXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX01faW5k ZXgpLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgZ3NsaWNlX2FycmF5PF9UcD46Om9w ZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdt ZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfQXJyYXk8c2l6ZV90PihfTV9pbmRleCksIF9f ZSwgX01faW5kZXguc2l6ZSgpKTsgfQoKCgp9CiMgMjU1ICIvdXNyL2luY2x1ZGUvZysrLXYzL2Jp dHMvc3RkX3ZhbGFycmF5LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9tYXNr X2FycmF5LmgiIDEgMwojIDM2ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvbWFza19hcnJheS5o IiAzCgpuYW1lc3BhY2Ugc3RkIHsKCiAgICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPiBjbGFzcyBtYXNr X2FycmF5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiBfVHAgdmFsdWVfdHlwZTsK CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAg ICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAg ICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2 b2lkIG9wZXJhdG9yJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lk IG9wZXJhdG9yKz0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9w ZXJhdG9yLT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJh dG9yXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9y Jj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yfD0g KGNvbnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPDw9KGNv bnN0IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNvbnN0 IHZhbGFycmF5PF9UcD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX1Rw Jik7CgoKCiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9y PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNv bnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvci89 IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBf RG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29u c3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yKz0g KGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9E b20+CiAgICAgICAgdm9pZCBvcGVyYXRvci09IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25z dDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAo Y29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0Rv bT4KICAgICAgICB2b2lkIG9wZXJhdG9yJj0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0 OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcnw9IChj b25zdCBfRXhwcjxfRG9tLF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9t PgogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0oY29uc3QgX0V4cHI8X0RvbSxfVHA+JikgY29uc3Q7 CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPj49KGNv bnN0IF9FeHByPF9Eb20sX1RwPiYpIGNvbnN0OwoKICAgIHByaXZhdGU6CiAgICAgICAgbWFza19h cnJheSAoX0FycmF5PF9UcD4sIHNpemVfdCwgX0FycmF5PGJvb2w+KTsKICAgICAgICBmcmllbmQg Y2xhc3MgdmFsYXJyYXk8X1RwPjsKCiAgICAgICAgY29uc3Qgc2l6ZV90IF9NX3N6OwogICAgICAg IGNvbnN0IF9BcnJheTxib29sPiBfTV9tYXNrOwogICAgICAgIGNvbnN0IF9BcnJheTxfVHA+IF9N X2FycmF5OwoKICAgICAgICBtYXNrX2FycmF5IChjb25zdCBtYXNrX2FycmF5Jik7CgoKICAgICAg ICBtYXNrX2FycmF5ICgpOwogICAgICAgIG1hc2tfYXJyYXkmIG9wZXJhdG9yPSAoY29uc3QgbWFz a19hcnJheSYpOwogICAgfTsKCgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l IG1hc2tfYXJyYXk8X1RwPjo6bWFza19hcnJheSAoY29uc3QgbWFza19hcnJheTxfVHA+JiBhKQog ICAgICAgICAgICA6IF9NX3N6IChhLl9NX3N6KSwgX01fbWFzayAoYS5fTV9tYXNrKSwgX01fYXJy YXkgKGEuX01fYXJyYXkpIHt9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5l CiAgICBtYXNrX2FycmF5PF9UcD46Om1hc2tfYXJyYXkgKF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90 IF9fcywgX0FycmF5PGJvb2w+IF9fbSkKICAgICAgICAgICAgOiBfTV9zeiAoX19zKSwgX01fbWFz ayAoX19tKSwgX01fYXJyYXkgKF9fYSkge30KCgoKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbmxpbmUgdm9pZAogICAgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IF9U cCYgX190KQogICAgeyBfX3ZhbGFycmF5X2ZpbGwgKF9NX2FycmF5LCBfTV9zeiwgX01fbWFzaywg X190KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBt YXNrX2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25z dAogICAgeyBfX3ZhbGFycmF5X2NvcHkgKF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSwg X01fYXJyYXksIF9NX21hc2spOyB9CgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgdGVt cGxhdGU8Y2xhc3MgRT4KICAgIGlubGluZSB2b2lkCiAgICBtYXNrX2FycmF5PF9UcD46Om9wZXJh dG9yPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdAogICAgeyBfX3ZhbGFycmF5X2Nv cHkgKF9fZSwgX19lLnNpemUgKCksIF9NX2FycmF5LCBfTV9tYXNrKTsgfQojIDE0MyAiL3Vzci9p bmNsdWRlL2crKy12My9iaXRzL21hc2tfYXJyYXkuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IHZhbGFycmF5 PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9NX2FycmF5 LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+ OjpvcGVyYXRvciAqPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9h dWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkp OyB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+Ojpv cGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt ZW50ZWRfZGl2aWRlcyAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yu c2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxp bmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCBfRXhwcjxFLCBfVHA+ JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01fbWFz aywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9p ZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCB2YWxhcnJheTxfVHA+JiBfX3Yp IGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9tb2R1bHVzIChfTV9hcnJheSwgX01fbWFzaywgX0Fy cmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRl bXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0g KGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVs dXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0 IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9NX2Fy cmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUgKCkpOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZvaWQgbWFza19hcnJheTxf VHA+OjpvcGVyYXRvciArPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh eV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9 CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgbWFza19hcnJheTxfVHA+OjpvcGVy YXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50 ZWRfbWludXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfQXJyYXk8X1RwPiAoX192KSwgX192LnNpemUg KCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgRT4gaW5saW5lIHZv aWQgbWFza19hcnJheTxfVHA+OjpvcGVyYXRvciAtPSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9tYXNrLCBfX2Us IF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIG1hc2tf YXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3Qg eyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChf X3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFz cyBFPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfRXhw cjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBf TV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0IHZhbGFycmF5PF9UcD4m IF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX2FuZCAoX01fYXJyYXksIF9NX21hc2ssIF9B cnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAoKSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0 ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yICY9 IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQg KF9NX2FycmF5LCBfTV9tYXNrLCBfX2UsIF9fZS5zaXplICgpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZh bGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfTV9hcnJheSwg X01fbWFzaywgX0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6 b3BlcmF0b3IgfD0gKGNvbnN0IF9FeHByPEUsIF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVn bWVudGVkX29yIChfTV9hcnJheSwgX01fbWFzaywgX19lLCBfX2Uuc2l6ZSAoKSk7IH0KdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8 PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hp ZnRfbGVmdCAoX01fYXJyYXksIF9NX21hc2ssIF9BcnJheTxfVHA+IChfX3YpLCBfX3Yuc2l6ZSAo KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBFPiBpbmxpbmUgdm9p ZCBtYXNrX2FycmF5PF9UcD46Om9wZXJhdG9yIDw8PSAoY29uc3QgX0V4cHI8RSwgX1RwPiYgX19l KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX21hc2ss IF9fZSwgX19lLnNpemUgKCkpOyB9CnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQg bWFza19hcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikg Y29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X3JpZ2h0IChfTV9hcnJheSwgX01fbWFzaywg X0FycmF5PF9UcD4gKF9fdiksIF9fdi5zaXplICgpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IHRlbXBsYXRlPGNsYXNzIEU+IGlubGluZSB2b2lkIG1hc2tfYXJyYXk8X1RwPjo6b3BlcmF0b3Ig Pj49IChjb25zdCBfRXhwcjxFLCBfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9z aGlmdF9yaWdodCAoX01fYXJyYXksIF9NX21hc2ssIF9fZSwgX19lLnNpemUgKCkpOyB9CgoKCn0K IyAyNTYgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMiAzCiMgMSAi L3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2luZGlyZWN0X2FycmF5LmgiIDEgMwojIDM2ICIvdXNy L2luY2x1ZGUvZysrLXYzL2JpdHMvaW5kaXJlY3RfYXJyYXkuaCIgMwoKbmFtZXNwYWNlIHN0ZCB7 CgogICAgdGVtcGxhdGUgPGNsYXNzIF9UcD4gY2xhc3MgaW5kaXJlY3RfYXJyYXkKICAgIHsKICAg IHB1YmxpYzoKICAgICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgICB2b2lkIG9w ZXJhdG9yPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0 b3IqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3Iv PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3IlPSAo Y29uc3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3IrPSAoY29u c3QgdmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3ItPSAoY29uc3Qg dmFsYXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgdmFs YXJyYXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3ImPSAoY29uc3QgdmFsYXJy YXk8X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3J8PSAoY29uc3QgdmFsYXJyYXk8 X1RwPiYpIGNvbnN0OwogICAgICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IHZhbGFycmF5PF9U cD4mKSBjb25zdDsKICAgICAgICB2b2lkIG9wZXJhdG9yPj49IChjb25zdCB2YWxhcnJheTxfVHA+ JikgY29uc3Q7CiAgICAgICAgdm9pZCBvcGVyYXRvcj0gKGNvbnN0IF9UcCYpOwoKCiAgICAgICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yPSAoY29uc3QgX0V4cHI8 X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAg dm9pZCBvcGVyYXRvcio9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAgICAg dGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yLz0gKGNvbnN0IF9FeHBy PF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAg IHZvaWQgb3BlcmF0b3IlPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAg IHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAgICAgdm9pZCBvcGVyYXRvcis9IChjb25zdCBfRXhw cjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAgICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAg ICB2b2lkIG9wZXJhdG9yLT0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAg ICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3JePSAoY29uc3QgX0V4 cHI8X0RvbSwgX1RwPiYpIGNvbnN0OwogICAgICAgIHRlbXBsYXRlPGNsYXNzIF9Eb20+CiAgICAg ICAgdm9pZCBvcGVyYXRvciY9IChjb25zdCBfRXhwcjxfRG9tLCBfVHA+JikgY29uc3Q7CiAgICAg ICAgdGVtcGxhdGU8Y2xhc3MgX0RvbT4KICAgICAgICB2b2lkIG9wZXJhdG9yfD0gKGNvbnN0IF9F eHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAgICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAg ICAgIHZvaWQgb3BlcmF0b3I8PD0gKGNvbnN0IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKICAg ICAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgICAgIHZvaWQgb3BlcmF0b3I+Pj0gKGNvbnN0 IF9FeHByPF9Eb20sIF9UcD4mKSBjb25zdDsKCiAgICBwcml2YXRlOgogICAgaW5kaXJlY3RfYXJy YXkgKGNvbnN0IGluZGlyZWN0X2FycmF5Jik7CiAgICBpbmRpcmVjdF9hcnJheSAoX0FycmF5PF9U cD4sIHNpemVfdCwgX0FycmF5PHNpemVfdD4pOwoKICAgIGZyaWVuZCBjbGFzcyB2YWxhcnJheTxf VHA+OwogICAgZnJpZW5kIGNsYXNzIGdzbGljZV9hcnJheTxfVHA+OwoKICAgIGNvbnN0IHNpemVf dCBfTV9zejsKICAgIGNvbnN0IF9BcnJheTxzaXplX3Q+IF9NX2luZGV4OwogICAgY29uc3QgX0Fy cmF5PF9UcD4gX01fYXJyYXk7CgoKICAgICAgICBpbmRpcmVjdF9hcnJheSAoKTsKICAgICAgICBp bmRpcmVjdF9hcnJheSYgb3BlcmF0b3I9IChjb25zdCBpbmRpcmVjdF9hcnJheSYpOwogICAgfTsK CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgaW5kaXJlY3RfYXJyYXk8X1Rw Pjo6aW5kaXJlY3RfYXJyYXkoY29uc3QgaW5kaXJlY3RfYXJyYXk8X1RwPiYgX19hKQogICAgICAg ICAgICA6IF9NX3N6IChfX2EuX01fc3opLCBfTV9pbmRleCAoX19hLl9NX2luZGV4KSwKICAgICAg ICAgICAgICBfTV9hcnJheSAoX19hLl9NX2FycmF5KSB7fQoKICAgIHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4KICAgIGlubGluZQogICAgaW5kaXJlY3RfYXJyYXk8X1RwPjo6aW5kaXJlY3RfYXJyYXkg KF9BcnJheTxfVHA+IF9fYSwgc2l6ZV90IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQXJyYXk8c2l6ZV90PiBfX2kpCiAgICAgICAgICAgIDogX01fc3ogKF9f cyksIF9NX2luZGV4IChfX2kpLCBfTV9hcnJheSAoX19hKSB7fQoKCgoKICAgIHRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy YXRvcj0gKGNvbnN0IF9UcCYgX190KQogICAgeyBfX3ZhbGFycmF5X2ZpbGwoX01fYXJyYXksIF9N X2luZGV4LCBfTV9zeiwgX190KTsgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlu bGluZSB2b2lkCiAgICBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0IHZhbGFy cmF5PF9UcD4mIF9fdikgY29uc3QKICAgIHsgX192YWxhcnJheV9jb3B5IChfQXJyYXk8X1RwPiAo X192KSwgX01fc3osIF9NX2FycmF5LCBfTV9pbmRleCk7IH0KCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogICAgaW5saW5lIHZvaWQKICAgIGluZGly ZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNv bnN0CiAgICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9zeiwgX01fYXJyYXksIF9NX2luZGV4 KTsgfQojIDE0MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL2luZGlyZWN0X2FycmF5LmgiIDMK dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+Ojpv cGVyYXRvciAqPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdt ZW50ZWRfbXVsdGlwbGllcyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwg X01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5s aW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKj0gKGNvbnN0IF9FeHByPF9E b20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfbXVsdGlwbGllcyAoX01fYXJy YXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCB2YWxhcnJheTxf VHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01f aW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+Ojpv cGVyYXRvciAvPSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1 Z21lbnRlZF9kaXZpZGVzIChfTV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9CnRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0 b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4mIF9fdikgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVk X21vZHVsdXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lk IGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4m IF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9NX2FycmF5LCBfTV9pbmRl eCwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRp cmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciArPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBj b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX01fYXJyYXksIF9NX2luZGV4LCBfQXJyYXk8 X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gdGVtcGxhdGU8Y2xh c3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNv bnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAo X01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCB2YWxh cnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9taW51cyAoX01fYXJyYXks IF9NX2luZGV4LCBfQXJyYXk8X1RwPiAoX192KSwgX01fc3opOyB9IHRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1Rw Pjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBjb25zdCB7IF9BcnJh eV9hdWdtZW50ZWRfbWludXMgKF9NX2FycmF5LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0KdGVt cGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVy YXRvciBePSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50 ZWRfeG9yIChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0g dGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBp bmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciBePSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBf X2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF94b3IgKF9NX2FycmF5LCBfTV9pbmRleCwgX19l LCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9h cnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25zdCB7 IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChf X3YpLCBfTV9zeik7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgdm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciAmPSAoY29uc3QgX0V4 cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9hbmQgKF9NX2FycmF5 LCBfTV9pbmRleCwgX19lLCBfTV9zeik7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg dm9pZCBpbmRpcmVjdF9hcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgdmFsYXJyYXk8X1Rw PiYgX192KSBjb25zdCB7IF9BcnJheV9hdWdtZW50ZWRfb3IgKF9NX2FycmF5LCBfTV9pbmRleCwg X0FycmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBs YXRlPGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9y IHw9IChjb25zdCBfRXhwcjxfRG9tLF9UcD4mIF9fZSkgY29uc3QgeyBfQXJyYXlfYXVnbWVudGVk X29yIChfTV9hcnJheSwgX01faW5kZXgsIF9fZSwgX01fc3opOyB9CnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIHZvaWQgaW5kaXJlY3RfYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25z dCB2YWxhcnJheTxfVHA+JiBfX3YpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0 IChfTV9hcnJheSwgX01faW5kZXgsIF9BcnJheTxfVHA+IChfX3YpLCBfTV9zeik7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdm9pZCBpbmRpcmVj dF9hcnJheTxfVHA+OjpvcGVyYXRvciA8PD0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiYgX19lKSBj b25zdCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX01fYXJyYXksIF9NX2luZGV4LCBf X2UsIF9NX3N6KTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSB2b2lkIGluZGlyZWN0 X2FycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiYgX192KSBjb25z dCB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9NX2FycmF5LCBfTV9pbmRleCwgX0Fy cmF5PF9UcD4gKF9fdiksIF9NX3N6KTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRl PGNsYXNzIF9Eb20+IGlubGluZSB2b2lkIGluZGlyZWN0X2FycmF5PF9UcD46Om9wZXJhdG9yID4+ PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+JiBfX2UpIGNvbnN0IHsgX0FycmF5X2F1Z21lbnRlZF9z aGlmdF9yaWdodCAoX01fYXJyYXksIF9NX2luZGV4LCBfX2UsIF9NX3N6KTsgfQoKCgp9CiMgMjU3 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3ZhbGFycmF5LmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2 YWxhcnJheSAoKSA6IF9NX3NpemUgKDApLCBfTV9kYXRhICgwKSB7fQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChzaXplX3QgX19uKQog ICAgICA6IF9NX3NpemUoX19uKSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4o X19uKSkKICB7IF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX01fZGF0YSwgX01fZGF0YSAr IF9fbik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+ Ojp2YWxhcnJheSAoY29uc3QgX1RwJiBfX3QsIHNpemVfdCBfX24pCiAgICA6IF9NX3NpemUoX19u KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19uKSkKICB7IF9fdmFsYXJy YXlfZmlsbF9jb25zdHJ1Y3QgKF9NX2RhdGEsIF9NX2RhdGEgKyBfX24sIF9fdCk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29u c3QgX1RwKiBfX3Jlc3RyaWN0X18gX19wLCBzaXplX3QgX19uKQogICAgOiBfTV9zaXplKF9fbiks IF9NX2RhdGEoX192YWxhcnJheV9nZXRfc3RvcmFnZTxfVHA+KF9fbikpCiAgeyBfX3ZhbGFycmF5 X2NvcHlfY29uc3RydWN0IChfX3AsIF9fcCArIF9fbiwgX01fZGF0YSk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgdmFs YXJyYXk8X1RwPiYgX192KQogICAgOiBfTV9zaXplKF9fdi5fTV9zaXplKSwgX01fZGF0YShfX3Zh bGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX192Ll9NX3NpemUpKQogIHsgX192YWxhcnJheV9jb3B5 X2NvbnN0cnVjdCAoX192Ll9NX2RhdGEsIF9fdi5fTV9kYXRhICsgX01fc2l6ZSwgX01fZGF0YSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxh cnJheSAoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKICAgIDogX01fc2l6ZShfX3NhLl9N X3N6KSwgX01fZGF0YShfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9UcD4oX19zYS5fTV9zeikpCiAg ewogICAgX192YWxhcnJheV9jb3B5CiAgICAgIChfX3NhLl9NX2FycmF5LCBfX3NhLl9NX3N6LCBf X3NhLl9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOwogIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgZ3NsaWNl X2FycmF5PF9UcD4mIF9fZ2EpCiAgICA6IF9NX3NpemUoX19nYS5fTV9pbmRleC5zaXplKCkpLAog ICAgICBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKICB7CiAg ICBfX3ZhbGFycmF5X2NvcHkKICAgICAgKF9fZ2EuX01fYXJyYXksIF9BcnJheTxzaXplX3Q+KF9f Z2EuX01faW5kZXgpLAogICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOwogIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJh eSAoY29uc3QgbWFza19hcnJheTxfVHA+JiBfX21hKQogICAgOiBfTV9zaXplKF9fbWEuX01fc3op LCBfTV9kYXRhKF9fdmFsYXJyYXlfZ2V0X3N0b3JhZ2U8X1RwPihfX21hLl9NX3N6KSkKICB7CiAg ICBfX3ZhbGFycmF5X2NvcHkKICAgICAgKF9fbWEuX01fYXJyYXksIF9fbWEuX01fbWFzaywgX0Fy cmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogIGlubGluZSB2YWxhcnJheTxfVHA+Ojp2YWxhcnJheSAoY29uc3QgaW5kaXJlY3RfYXJyYXk8 X1RwPiYgX19pYSkKICAgIDogX01fc2l6ZShfX2lhLl9NX3N6KSwgX01fZGF0YShfX3ZhbGFycmF5 X2dldF9zdG9yYWdlPF9UcD4oX19pYS5fTV9zeikpCiAgewogICAgX192YWxhcnJheV9jb3B5CiAg ICAgIChfX2lhLl9NX2FycmF5LCBfX2lhLl9NX2luZGV4LCBfQXJyYXk8X1RwPihfTV9kYXRhKSwg X01fc2l6ZSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IHRlbXBsYXRlPGNsYXNzIF9E b20+CiAgaW5saW5lIHZhbGFycmF5PF9UcD46OnZhbGFycmF5IChjb25zdCBfRXhwcjxfRG9tLCBf VHA+JiBfX2UpCiAgICA6IF9NX3NpemUoX19lLnNpemUgKCkpLCBfTV9kYXRhKF9fdmFsYXJyYXlf Z2V0X3N0b3JhZ2U8X1RwPihfTV9zaXplKSkKICB7IF9fdmFsYXJyYXlfY29weSAoX19lLCBfTV9z aXplLCBfQXJyYXk8X1RwPihfTV9kYXRhKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSB2YWxhcnJheTxfVHA+Ojp+dmFsYXJyYXkgKCkKICB7CiAgICAgIF9fdmFsYXJyYXlf ZGVzdHJveV9lbGVtZW50cyhfTV9kYXRhLCBfTV9kYXRhICsgX01fc2l6ZSk7CiAgICAgIF9fdmFs YXJyYXlfcmVsZWFzZV9tZW1vcnkoX01fZGF0YSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChj b25zdCB2YWxhcnJheTxfVHA+JiBfX3YpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkoX192Ll9N X2RhdGEsIF9NX3NpemUsIF9NX2RhdGEpOwogICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1Rw Pjo6b3BlcmF0b3I9IChjb25zdCBfVHAmIF9fdCkKICB7CiAgICAgIF9fdmFsYXJyYXlfZmlsbCAo X01fZGF0YSwgX01fc2l6ZSwgX190KTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogIGlubGluZSB2YWxhcnJheTxfVHA+JgogIHZhbGFycmF5PF9UcD46 Om9wZXJhdG9yPSAoY29uc3Qgc2xpY2VfYXJyYXk8X1RwPiYgX19zYSkKICB7CiAgICAgIF9fdmFs YXJyYXlfY29weSAoX19zYS5fTV9hcnJheSwgX19zYS5fTV9zeiwKICAgICAgICAgICAgICBfX3Nh Ll9NX3N0cmlkZSwgX0FycmF5PF9UcD4oX01fZGF0YSkpOwogICAgICByZXR1cm4gKnRoaXM7CiAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4mCiAgdmFs YXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBnc2xpY2VfYXJyYXk8X1RwPiYgX19nYSkKICB7 CiAgICAgIF9fdmFsYXJyYXlfY29weSAoX19nYS5fTV9hcnJheSwgX0FycmF5PHNpemVfdD4oX19n YS5fTV9pbmRleCksCiAgICAgICAgICAgICAgX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUp OwogICAgICByZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5s aW5lIHZhbGFycmF5PF9UcD4mCiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3I9IChjb25zdCBtYXNr X2FycmF5PF9UcD4mIF9fbWEpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9fbWEuX01fYXJy YXksIF9fbWEuX01fbWFzaywKICAgICAgICAgICAgICBfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01f c2l6ZSk7CiAgICAgIHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4K ICBpbmxpbmUgdmFsYXJyYXk8X1RwPiYKICB2YWxhcnJheTxfVHA+OjpvcGVyYXRvcj0gKGNvbnN0 IGluZGlyZWN0X2FycmF5PF9UcD4mIF9faWEpCiAgewogICAgICBfX3ZhbGFycmF5X2NvcHkgKF9f aWEuX01fYXJyYXksIF9faWEuX01faW5kZXgsCiAgICAgICAgICAgICAgIF9BcnJheTxfVHA+KF9N X2RhdGEpLCBfTV9zaXplKTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPgogIGlubGluZSB2YWxhcnJheTxfVHA+Jgog IHZhbGFycmF5PF9UcD46Om9wZXJhdG9yPSAoY29uc3QgX0V4cHI8X0RvbSwgX1RwPiYgX19lKQog IHsKICAgICAgX192YWxhcnJheV9jb3B5IChfX2UsIF9NX3NpemUsIF9BcnJheTxfVHA+KF9NX2Rh dGEpKTsKICAgICAgcmV0dXJuICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSBfRXhwcjxfU0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KICB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvcltdIChzbGljZSBfX3MpIGNvbnN0CiAgewogICAgICB0eXBlZGVmIF9TQ2xvczxf VmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKICAgICAgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+ IChfQ2xvc3VyZSAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcykpOwogIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPgogIGlubGluZSBzbGljZV9hcnJheTxfVHA+CiAgdmFsYXJyYXk8X1RwPjo6 b3BlcmF0b3JbXSAoc2xpY2UgX19zKQogIHsKICAgICAgcmV0dXJuIHNsaWNlX2FycmF5PF9UcD4g KF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogIGlubGluZSBfRXhwcjxfR0Nsb3M8X1ZhbEFycmF5LF9UcD4sIF9UcD4KICB2YWxhcnJheTxf VHA+OjpvcGVyYXRvcltdIChjb25zdCBnc2xpY2UmIF9fZ3MpIGNvbnN0CiAgewogICAgICB0eXBl ZGVmIF9HQ2xvczxfVmFsQXJyYXksX1RwPiBfQ2xvc3VyZTsKICAgICAgcmV0dXJuIF9FeHByPF9D bG9zdXJlLCBfVHA+CiAgICAgICAgICAoX0Nsb3N1cmUgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBf X2dzLl9NX2luZGV4LT5fTV9pbmRleCkpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgog IGlubGluZSBnc2xpY2VfYXJyYXk8X1RwPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10gKGNv bnN0IGdzbGljZSYgX19ncykKICB7CiAgICAgIHJldHVybiBnc2xpY2VfYXJyYXk8X1RwPgogICAg ICAgICAgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2dzLl9NX2luZGV4LT5fTV9pbmRleCk7CiAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHZhbGFycmF5PF9UcD4KICB2YWxh cnJheTxfVHA+OjpvcGVyYXRvcltdIChjb25zdCB2YWxhcnJheTxib29sPiYgX19tKSBjb25zdAog IHsKICAgICAgc2l6ZV90IF9fcyAoMCk7CiAgICAgIHNpemVfdCBfX2UgKF9fbS5zaXplICgpKTsK ICAgICAgZm9yIChzaXplX3QgX19pPTA7IF9faTxfX2U7ICsrX19pKQogICAgICAgICAgaWYgKF9f bVtfX2ldKSArK19fczsKICAgICAgcmV0dXJuIHZhbGFycmF5PF9UcD4gKG1hc2tfYXJyYXk8X1Rw PiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQXJyYXk8Ym9vbD4gKF9fbSkpKTsKICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICBpbmxpbmUgbWFza19hcnJheTxfVHA+CiAgdmFsYXJyYXk8X1RwPjo6b3BlcmF0 b3JbXSAoY29uc3QgdmFsYXJyYXk8Ym9vbD4mIF9fbSkKICB7CiAgICAgIHNpemVfdCBfX3MgKDAp OwogICAgICBzaXplX3QgX19lIChfX20uc2l6ZSAoKSk7CiAgICAgIGZvciAoc2l6ZV90IF9faT0w OyBfX2k8X19lOyArK19faSkKICAgICAgICAgIGlmIChfX21bX19pXSkgKytfX3M7CiAgICAgIHJl dHVybiBtYXNrX2FycmF5PF9UcD4gKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX3MsIF9BcnJheTxi b29sPiAoX19tKSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIF9FeHBy PF9JQ2xvczxfVmFsQXJyYXksX1RwPiwgX1RwPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yW10g KGNvbnN0IHZhbGFycmF5PHNpemVfdD4mIF9faSkgY29uc3QKICB7CiAgICAgIHR5cGVkZWYgX0lD bG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOwogICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs IF9UcD4gKF9DbG9zdXJlICgqdGhpcywgX19pKSk7CiAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgaW5saW5lIGluZGlyZWN0X2FycmF5PF9UcD4KICB2YWxhcnJheTxfVHA+OjpvcGVyYXRv cltdIChjb25zdCB2YWxhcnJheTxzaXplX3Q+JiBfX2kpCiAgewogICAgICByZXR1cm4gaW5kaXJl Y3RfYXJyYXk8X1RwPiAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9faS5zaXplKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX0FycmF5PHNpemVfdD4gKF9faSkpOwogIH0KCiAgdGVt cGxhdGU8Y2xhc3MgX1RwPgogIGlubGluZSBzaXplX3QgdmFsYXJyYXk8X1RwPjo6c2l6ZSAoKSBj b25zdCB7IHJldHVybiBfTV9zaXplOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcD4KICBpbmxpbmUg X1RwCiAgdmFsYXJyYXk8X1RwPjo6c3VtICgpIGNvbnN0CiAgewogICAgICByZXR1cm4gX192YWxh cnJheV9zdW0oX01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOwogIH0KIyA0NzcgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfVHA+ CiAgICAgaW5saW5lIHZhbGFycmF5PF9UcD4KICAgICB2YWxhcnJheTxfVHA+OjpzaGlmdChpbnQg X19uKSBjb25zdAogICAgIHsKICAgICAgIF9UcCogY29uc3QgX19hID0gc3RhdGljX2Nhc3Q8X1Rw Kj4KICAgICAgICAgKF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9UcCkgKiBfTV9zaXplKSk7CiAg ICAgICBpZiAoX19uID09IDApCiAgICAgICAgIF9fdmFsYXJyYXlfY29weV9jb25zdHJ1Y3QoX01f ZGF0YSwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7CiAgICAgICBlbHNlIGlmIChfX24gPiAwKQog ICAgICAgICB7CiAgICAgICAgICAgaWYgKHNpemVfdChfX24pID4gX01fc2l6ZSkKICAgICAgICAg ICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hLCBfX2EgKyBfX24pOwogICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2Nv bnN0cnVjdChfTV9kYXRhK19fbiwgX01fZGF0YSArIF9NX3NpemUsIF9fYSk7CiAgICAgICAgICAg ICAgIF9fdmFsYXJyYXlfZGVmYXVsdF9jb25zdHJ1Y3QoX19hK19NX3NpemUtX19uLCBfX2EgKyBf TV9zaXplKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgZWxzZQogICAgICAgICB7 CiAgICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdCAoX01fZGF0YSwgX01fZGF0YStf TV9zaXplK19fbiwgX19hLV9fbik7CiAgICAgICAgICAgX192YWxhcnJheV9kZWZhdWx0X2NvbnN0 cnVjdChfX2EsIF9fYSAtIF9fbik7CiAgICAgICAgIH0KICAgICAgIHJldHVybiB2YWxhcnJheTxf VHA+IChfX2EsIF9NX3NpemUpOwogICAgIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9UcD4KICAgICBp bmxpbmUgdmFsYXJyYXk8X1RwPgogICAgIHZhbGFycmF5PF9UcD46OmNzaGlmdCAoaW50IF9fbikg Y29uc3QKICAgICB7CiAgICAgICBfVHAqIGNvbnN0IF9fYSA9IHN0YXRpY19jYXN0PF9UcCo+CiAg ICAgICAgIChfX2J1aWx0aW5fYWxsb2NhIChzaXplb2YoX1RwKSAqIF9NX3NpemUpKTsKICAgICAg IGlmIChfX24gPT0gMCkKICAgICAgICAgX192YWxhcnJheV9jb3B5X2NvbnN0cnVjdChfTV9kYXRh LCBfTV9kYXRhICsgX01fc2l6ZSwgX19hKTsKICAgICAgIGVsc2UgaWYgKF9fbiA+IDApCiAgICAg ICAgIHsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0KF9NX2RhdGEsIF9NX2Rh dGErX19uLCBfX2ErX01fc2l6ZS1fX24pOwogICAgICAgICAgIF9fdmFsYXJyYXlfY29weV9jb25z dHJ1Y3QoX01fZGF0YStfX24sIF9NX2RhdGEgKyBfTV9zaXplLCBfX2EpOwogICAgICAgICB9CiAg ICAgICBlbHNlCiAgICAgICAgIHsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0 CiAgICAgICAgICAgICAoX01fZGF0YSArIF9NX3NpemUrX19uLCBfTV9kYXRhICsgX01fc2l6ZSwg X19hKTsKICAgICAgICAgICBfX3ZhbGFycmF5X2NvcHlfY29uc3RydWN0CiAgICAgICAgICAgICAo X01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUrX19uLCBfX2EgLSBfX24pOwogICAgICAgICB9CiAg ICAgICByZXR1cm4gdmFsYXJyYXk8X1RwPihfX2EsIF9NX3NpemUpOwogICAgIH0KCiAgdGVtcGxh dGUgPGNsYXNzIF9UcD4KICBpbmxpbmUgdm9pZAogIHZhbGFycmF5PF9UcD46OnJlc2l6ZSAoc2l6 ZV90IF9fbiwgX1RwIF9fYykKICB7CgoKCiAgICBfX3ZhbGFycmF5X2Rlc3Ryb3lfZWxlbWVudHMo X01fZGF0YSwgX01fZGF0YSArIF9NX3NpemUpOwogICAgaWYgKF9NX3NpemUgIT0gX19uKQogICAg ICB7CiAgICAgICAgX192YWxhcnJheV9yZWxlYXNlX21lbW9yeShfTV9kYXRhKTsKICAgICAgICBf TV9zaXplID0gX19uOwogICAgICAgIF9NX2RhdGEgPSBfX3ZhbGFycmF5X2dldF9zdG9yYWdlPF9U cD4oX19uKTsKICAgICAgfQogICAgX192YWxhcnJheV9maWxsX2NvbnN0cnVjdChfTV9kYXRhLCBf TV9kYXRhICsgX19uLCBfX2MpOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogIGlubGlu ZSBfVHAKICB2YWxhcnJheTxfVHA+OjptaW4oKSBjb25zdAogIHsKICAgICAgcmV0dXJuICptaW5f ZWxlbWVudCAoX01fZGF0YSwgX01fZGF0YStfTV9zaXplKTsKICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICBpbmxpbmUgX1RwCiAgdmFsYXJyYXk8X1RwPjo6bWF4KCkgY29uc3QKICB7CiAg ICAgIHJldHVybiAqbWF4X2VsZW1lbnQgKF9NX2RhdGEsIF9NX2RhdGErX01fc2l6ZSk7CiAgfQoK ICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgaW5saW5lIF9FeHByPF9WYWxGdW5DbG9zPF9WYWxBcnJh eSxfVHA+LF9UcD4KICB2YWxhcnJheTxfVHA+OjphcHBseSAoX1RwIGZ1bmMgKF9UcCkpIGNvbnN0 CiAgewogICAgICB0eXBlZGVmIF9WYWxGdW5DbG9zPF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOwog ICAgICByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsX1RwPiAoX0Nsb3N1cmUgKCp0aGlzLCBmdW5jKSk7 CiAgfQoKICB0ZW1wbGF0ZTxjbGFzcyBfVHA+CiAgaW5saW5lIF9FeHByPF9SZWZGdW5DbG9zPF9W YWxBcnJheSxfVHA+LF9UcD4KICB2YWxhcnJheTxfVHA+OjphcHBseSAoX1RwIGZ1bmMgKGNvbnN0 IF9UcCAmKSkgY29uc3QKICB7CiAgICAgIHR5cGVkZWYgX1JlZkZ1bkNsb3M8X1ZhbEFycmF5LF9U cD4gX0Nsb3N1cmU7CiAgICAgIHJldHVybiBfRXhwcjxfQ2xvc3VyZSxfVHA+IChfQ2xvc3VyZSAo KnRoaXMsIGZ1bmMpKTsKICB9CiMgNTgyICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX3Zh bGFycmF5LmgiIDMKICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9VbkNs b3M8X1VuYXJ5X3BsdXMsX1ZhbEFycmF5LF9UcD4sIF9UcD4gdmFsYXJyYXk8X1RwPjo6b3BlcmF0 b3IgKygpIGNvbnN0IHsgdHlwZWRlZiBfVW5DbG9zPF9VbmFyeV9wbHVzLF9WYWxBcnJheSxfVHA+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykp OyB9CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPG5lZ2F0 ZSxfVmFsQXJyYXksX1RwPiwgX1RwPiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciAtKCkgY29uc3Qg eyB0eXBlZGVmIF9VbkNsb3M8bmVnYXRlLF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9CiAgICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfVW5DbG9zPF9CaXR3aXNlX25vdCxfVmFsQXJyYXks X1RwPiwgX1RwPiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciB+KCkgY29uc3QgeyB0eXBlZGVmIF9V bkNsb3M8X0JpdHdpc2Vfbm90LF9WYWxBcnJheSxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlICgqdGhpcykpOyB9CgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogIGlubGluZSBfRXhwcjxfVW5DbG9zPGxvZ2ljYWxfbm90LF9WYWxBcnJheSxfVHA+ LCBib29sPgogIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yISgpIGNvbnN0CiAgewogICAgICB0eXBl ZGVmIF9VbkNsb3M8bG9naWNhbF9ub3QsX1ZhbEFycmF5LF9UcD4gX0Nsb3N1cmU7CiAgICAgIHJl dHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlICgqdGhpcykpOwogIH0KIyA2MTQg Ii91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRfdmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTxjbGFz cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0g KGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4oX01f ZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+ IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0 IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3BsdXMgKF9BcnJheTxfVHA+ KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRo aXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5 PF9UcD46Om9wZXJhdG9yIC09IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX21p bnVzIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9 IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvciAtPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50 ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3Yu X01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFs YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCBfVHAgJl9fdCkg eyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9z aXplLCBfX3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFs YXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9tdWx0aXBsaWVzIChfQXJyYXk8X1RwPihfTV9k YXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9 CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+ OjpvcGVyYXRvciAvPSAoY29uc3QgX1RwICZfX3QpIHsgX0FycmF5X2F1Z21lbnRlZF9kaXZpZGVz IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlzOyB9IHRl bXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+Ojpv cGVyYXRvciAvPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdtZW50ZWRf ZGl2aWRlcyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5f TV9kYXRhKSk7IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxh cnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IF9UcCAmX190KSB7 IF9BcnJheV9hdWdtZW50ZWRfbW9kdWx1cyAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUs IF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJh eTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJT0gKGNvbnN0IHZhbGFycmF5PF9UcD4g Jl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBf TV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxh dGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJh dG9yIF49IChjb25zdCBfVHAgJl9fdCkgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9U cD4oX01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFz cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgXj0g KGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyBfQXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5 PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9BcnJheTxfVHA+KF9fdi5fTV9kYXRhKSk7IHJldHVy biAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFs YXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50 ZWRfYW5kIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX190KTsgcmV0dXJuICp0aGlz OyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxf VHA+OjpvcGVyYXRvciAmPSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IF9BcnJheV9hdWdt ZW50ZWRfYW5kIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192 Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZh bGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX1RwICZfX3Qp IHsgX0FycmF5X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9NX3NpemUsIF9f dCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSB2YWxhcnJheTxf VHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgfD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f dikgeyBfQXJyYXlfYXVnbWVudGVkX29yIChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwg X0FycmF5PF9UcD4oX192Ll9NX2RhdGEpKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNz IF9UcD4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA8PD0g KGNvbnN0IF9UcCAmX190KSB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfbGVmdCAoX0FycmF5PF9U cD4oX01fZGF0YSksIF9NX3NpemUsIF9fdCk7IHJldHVybiAqdGhpczsgfSB0ZW1wbGF0ZTxjbGFz cyBfVHA+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9 IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgX0FycmF5X2F1Z21lbnRlZF9zaGlmdF9sZWZ0 IChfQXJyYXk8X1RwPihfTV9kYXRhKSwgX01fc2l6ZSwgX0FycmF5PF9UcD4oX192Ll9NX2RhdGEp KTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIHZhbGFycmF5PF9U cD4gJiB2YWxhcnJheTxfVHA+OjpvcGVyYXRvciA+Pj0gKGNvbnN0IF9UcCAmX190KSB7IF9BcnJh eV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfTV9zaXplLCBf X3QpOyByZXR1cm4gKnRoaXM7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgdmFsYXJyYXk8 X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAm X192KSB7IF9BcnJheV9hdWdtZW50ZWRfc2hpZnRfcmlnaHQgKF9BcnJheTxfVHA+KF9NX2RhdGEp LCBfTV9zaXplLCBfQXJyYXk8X1RwPihfX3YuX01fZGF0YSkpOyByZXR1cm4gKnRoaXM7IH0KCgoK Cn0KCgpuYW1lc3BhY2Ugc3RkCnsKIyA2NDMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf dmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlu bGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgKz0gKGNvbnN0IF9F eHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfcGx1cyAoX0FycmF5PF9UcD4o X01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBf VHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8 X1RwPjo6b3BlcmF0b3IgLT0gKGNvbnN0IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9h dWdtZW50ZWRfbWludXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1 cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxp bmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICo9IChjb25zdCBfRXhw cjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX211bHRpcGxpZXMgKF9BcnJheTxf VHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xh c3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy cmF5PF9UcD46Om9wZXJhdG9yIC89IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJy YXlfYXVnbWVudGVkX2RpdmlkZXMgKF9BcnJheTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUp OyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9t PiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFycmF5PF9UcD46Om9wZXJhdG9yICU9IChjb25z dCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX21vZHVsdXMgKF9BcnJh eTxfVHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8 Y2xhc3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZh bGFycmF5PF9UcD46Om9wZXJhdG9yIF49IChjb25zdCBfRXhwcjxfRG9tLF9UcD4gJl9fZSkgeyBf QXJyYXlfYXVnbWVudGVkX3hvciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7 IHJldHVybiAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+ IGlubGluZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgJj0gKGNvbnN0 IF9FeHByPF9Eb20sX1RwPiAmX19lKSB7IF9BcnJheV9hdWdtZW50ZWRfYW5kIChfQXJyYXk8X1Rw PihfTV9kYXRhKSwgX19lLCBfTV9zaXplKTsgcmV0dXJuICp0aGlzOyB9CnRlbXBsYXRlPGNsYXNz IF9UcD4gdGVtcGxhdGU8Y2xhc3MgX0RvbT4gaW5saW5lIHZhbGFycmF5PF9UcD4gJiB2YWxhcnJh eTxfVHA+OjpvcGVyYXRvciB8PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0FycmF5 X2F1Z21lbnRlZF9vciAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01fc2l6ZSk7IHJldHVy biAqdGhpczsgfQp0ZW1wbGF0ZTxjbGFzcyBfVHA+IHRlbXBsYXRlPGNsYXNzIF9Eb20+IGlubGlu ZSB2YWxhcnJheTxfVHA+ICYgdmFsYXJyYXk8X1RwPjo6b3BlcmF0b3IgPDw9IChjb25zdCBfRXhw cjxfRG9tLF9UcD4gJl9fZSkgeyBfQXJyYXlfYXVnbWVudGVkX3NoaWZ0X2xlZnQgKF9BcnJheTxf VHA+KF9NX2RhdGEpLCBfX2UsIF9NX3NpemUpOyByZXR1cm4gKnRoaXM7IH0KdGVtcGxhdGU8Y2xh c3MgX1RwPiB0ZW1wbGF0ZTxjbGFzcyBfRG9tPiBpbmxpbmUgdmFsYXJyYXk8X1RwPiAmIHZhbGFy cmF5PF9UcD46Om9wZXJhdG9yID4+PSAoY29uc3QgX0V4cHI8X0RvbSxfVHA+ICZfX2UpIHsgX0Fy cmF5X2F1Z21lbnRlZF9zaGlmdF9yaWdodCAoX0FycmF5PF9UcD4oX01fZGF0YSksIF9fZSwgX01f c2l6ZSk7IHJldHVybiAqdGhpczsgfQojIDY4MiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF92YWxhcnJheS5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5D bG9zPHBsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciArIChj b25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBl ZGVmIF9CaW5DbG9zPHBsdXMsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsg cmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w bGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxwbHVzLF9WYWxBcnJheSxf Q29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciArIChjb25zdCB2YWxhcnJheTxfVHA+ICZf X3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8cGx1cyxfVmFsQXJyYXksX0Nv bnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9D bG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy PF9CaW5DbG9zPHBsdXMsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9y ICsgKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBf QmluQ2xvczxwbHVzLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVy biBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8 dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX1ZhbEFycmF5LF9WYWxB cnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRvciAtIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3Ys IGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPG1pbnVzLF9WYWxB cnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg X1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8bWludXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+ IG9wZXJhdG9yIC0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsg dHlwZWRlZiBfQmluQ2xvczxtaW51cyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9z dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9 IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPG1pbnVzLF9Db25z dGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAtIChjb25zdCBfVHAgJl9fdCwg Y29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bWludXMsX0NvbnN0 YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBf VHA+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGlu ZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVzLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4s IF9UcD4gb3BlcmF0b3IgKiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCB2YWxhcnJh eTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxtdWx0aXBsaWVzLF9WYWxBcnJheSxfVmFs QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns b3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8 X0JpbkNsb3M8bXVsdGlwbGllcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3Bl cmF0b3IgKiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBl ZGVmIF9CaW5DbG9zPG11bHRpcGxpZXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xv c3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsg fSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxtdWx0aXBsaWVz LF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAqIChjb25zdCBfVHAg Jl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bXVsdGlw bGllcyxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8 X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5cGVuYW1l IF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5LF9WYWxBcnJheSxf VHAsX1RwPiwgX1RwPiBvcGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0 IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGRpdmlkZXMsX1ZhbEFycmF5 LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+ IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf RXhwcjxfQmluQ2xvczxkaXZpZGVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sX1RwPiBv cGVyYXRvciAvIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5 cGVkZWYgX0JpbkNsb3M8ZGl2aWRlcyxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9z dXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9 IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGRpdmlkZXMsX0Nv bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIC8gKGNvbnN0IF9UcCAmX190 LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxkaXZpZGVzLF9D b25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3Vy ZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp bmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+ LCBfVHA+IG9wZXJhdG9yICUgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJy YXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bW9kdWx1cyxfVmFsQXJyYXksX1ZhbEFy cmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9z dXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9C aW5DbG9zPG1vZHVsdXMsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IG9wZXJhdG9y ICUgKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBf QmluQ2xvczxtb2R1bHVzLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJl dHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bW9kdWx1cyxfQ29uc3RhbnQs X1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgJSAoY29uc3QgX1RwICZfX3QsIGNvbnN0 IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9zPG1vZHVsdXMsX0NvbnN0YW50 LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+ IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBf RXhwcjxfQmluQ2xvczxfQml0d2lzZV94b3IsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwg X1RwPiBvcGVyYXRvciBeIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5 PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX1Zh bEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9D bG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHBy PF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4g b3BlcmF0b3IgXiAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAgJl9fdCkgeyB0 eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX3hvcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9f dCkpOyB9IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3 aXNlX3hvcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgXiAoY29u c3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5DbG9z PF9CaXR3aXNlX3hvcixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX2FuZCxfVmFsQXJy YXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yICYgKGNvbnN0IHZhbGFycmF5PF9U cD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0Jp dHdpc2VfYW5kLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlw ZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxBcnJheSxf Q29uc3RhbnQsX1RwLF9UcD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCB2YWxhcnJheTxfVHA+ICZf X3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9WYWxB cnJheSxfQ29uc3RhbnQsX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwg X1RwPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9U cD4sX1RwPiBvcGVyYXRvciAmIChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAm X192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2VfYW5kLF9Db25zdGFudCxfVmFsQXJyYXks X1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUg KF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNs b3M8X0JpdHdpc2Vfb3IsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiwgX1RwPiBvcGVyYXRv ciB8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg eyB0eXBlZGVmIF9CaW5DbG9zPF9CaXR3aXNlX29yLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Nsb3N1cmUgKF9fdiwg X193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8X0Jp dHdpc2Vfb3IsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixfVHA+IG9wZXJhdG9yIHwgKGNv bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xv czxfQml0d2lzZV9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdCkpOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9CaXR3aXNlX29yLF9Db25zdGFu dCxfVmFsQXJyYXksX1RwLF9UcD4sX1RwPiBvcGVyYXRvciB8IChjb25zdCBfVHAgJl9fdCwgY29u c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X0JpdHdpc2Vfb3IsX0Nv bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl LCBfVHA+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlu bGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfbGVmdCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf VHA+LCBfVHA+IG9wZXJhdG9yIDw8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPF9TaGlmdF9sZWZ0LF9WYWxBcnJh eSxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1Rw PiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPixf VHA+IG9wZXJhdG9yIDw8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190 KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X2xlZnQsX1ZhbEFycmF5LF9Db25zdGFudCxfVHAs X1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBfVHA+IChfQ2xvc3VyZSAoX192 LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxf U2hpZnRfbGVmdCxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPDwg KGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmlu Q2xvczxfU2hpZnRfbGVmdCxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBs YXRlPHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFs QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LCBfVHA+IG9wZXJhdG9yID4+IChjb25zdCB2YWxhcnJh eTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9z PF9TaGlmdF9yaWdodCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsIF9UcD4gKF9DbG9zdXJlIChfX3YsIF9fdykpOyB9IHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPF9TaGlmdF9yaWdodCxfVmFsQXJy YXksX0NvbnN0YW50LF9UcCxfVHA+LF9UcD4gb3BlcmF0b3IgPj4gKGNvbnN0IHZhbGFycmF5PF9U cD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxfU2hpZnRfcmlnaHQs X1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLCBfVHA+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ IGlubGluZSBfRXhwcjxfQmluQ2xvczxfU2hpZnRfcmlnaHQsX0NvbnN0YW50LF9WYWxBcnJheSxf VHAsX1RwPixfVHA+IG9wZXJhdG9yID4+IChjb25zdCBfVHAgJl9fdCwgY29uc3QgdmFsYXJyYXk8 X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8X1NoaWZ0X3JpZ2h0LF9Db25zdGFudCxfVmFs QXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgX1RwPiAoX0Ns b3N1cmUgKF9fdCwgX192KSk7IH0KIyA3MjAgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf dmFsYXJyYXkuaCIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xv czxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9y ICYmIChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykg eyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfYW5kLF9WYWxBcnJheSxfVmFsQXJyYXksX1RwLF9U cD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3Ys IF9fdykpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxvZ2lj YWxfYW5kLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgJiYgKGNv bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xv czxsb2dpY2FsX2FuZCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1 cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0 ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2FsX2FuZCxfQ29uc3RhbnQs X1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yICYmIChjb25zdCBfVHAgJl9fdCwgY29u c3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9hbmQsX0Nv bnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl LCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBp bmxpbmUgX0V4cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxf VHA+LGJvb2w+IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IHZh bGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGxvZ2ljYWxfb3IsX1ZhbEFycmF5 LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29s PiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4 cHI8X0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+ IG9wZXJhdG9yIHx8IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7 IHR5cGVkZWYgX0JpbkNsb3M8bG9naWNhbF9vcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+ IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBf X3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsb2dpY2Fs X29yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgfHwgKGNvbnN0 IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxs b2dpY2FsX29yLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfVmFs QXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f diwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8ZXF1YWxfdG8s X1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9z dXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBp bmxpbmUgX0V4cHI8X0JpbkNsb3M8ZXF1YWxfdG8sX1ZhbEFycmF5LF9Db25zdGFudCxfVHAsX1Rw Pixib29sPiBvcGVyYXRvciA9PSAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192LCBjb25zdCBfVHAg Jl9fdCkgeyB0eXBlZGVmIF9CaW5DbG9zPGVxdWFsX3RvLF9WYWxBcnJheSxfQ29uc3RhbnQsX1Rw LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChf X3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGVx dWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPT0gKGNv bnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xv czxlcXVhbF90byxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4g X0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0 eXBlbmFtZSBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFycmF5 LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciAhPSAoY29uc3QgdmFsYXJyYXk8X1Rw PiAmX192LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3cpIHsgdHlwZWRlZiBfQmluQ2xvczxub3Rf ZXF1YWxfdG8sX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9F eHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xh c3MgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9WYWxBcnJheSxfQ29u c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9f diwgY29uc3QgX1RwICZfX3QpIHsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX1ZhbEFy cmF5LF9Db25zdGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBi b29sPiAoX0Nsb3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUg X0V4cHI8X0JpbkNsb3M8bm90X2VxdWFsX3RvLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4s Ym9vbD4gb3BlcmF0b3IgIT0gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZf X3YpIHsgdHlwZWRlZiBfQmluQ2xvczxub3RfZXF1YWxfdG8sX0NvbnN0YW50LF9WYWxBcnJheSxf VHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUg KF9fdCwgX192KSk7IH0KdGVtcGxhdGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNs b3M8bGVzcyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yIDwgKGNv bnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVk ZWYgX0JpbkNsb3M8bGVzcyxfVmFsQXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyBy ZXR1cm4gX0V4cHI8X0Nsb3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1w bGF0ZTxjbGFzcyBfVHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzLF9WYWxBcnJheSxfQ29u c3RhbnQsX1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPCAoY29uc3QgdmFsYXJyYXk8X1RwPiAmX192 LCBjb25zdCBfVHAgJl9fdCkgeyB0eXBlZGVmIF9CaW5DbG9zPGxlc3MsX1ZhbEFycmF5LF9Db25z dGFudCxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Ns b3N1cmUgKF9fdiwgX190KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8X0Jp bkNsb3M8bGVzcyxfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yIDwg KGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJheTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmlu Q2xvczxsZXNzLF9Db25zdGFudCxfVmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBf RXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIsX1ZhbEFycmF5LF9WYWxB cnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCB2YWxhcnJheTxfVHA+ICZfX3Ys IGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9zPGdyZWF0ZXIsX1Zh bEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0dXJuIF9FeHByPF9DbG9zdXJl LCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxhdGU8Y2xhc3MgX1RwPiBpbmxp bmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcixfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+LGJv b2w+IG9wZXJhdG9yID4gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZfX3Qp IHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4g X0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChfX3YsIF9f dCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGdyZWF0ZXIs X0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA+IChjb25zdCBfVHAg Jl9fdCwgY29uc3QgdmFsYXJyYXk8X1RwPiAmX192KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRl cixfQ29uc3RhbnQsX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns b3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX190LCBfX3YpKTsgfQp0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+IGlubGluZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfVmFsQXJyYXks X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29u c3QgdmFsYXJyYXk8X1RwPiAmX193KSB7IHR5cGVkZWYgX0JpbkNsb3M8bGVzc19lcXVhbCxfVmFs QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Nsb3N1cmUs IGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3cpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+IGlubGlu ZSBfRXhwcjxfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfQ29uc3RhbnQsX1RwLF9UcD4s Ym9vbD4gb3BlcmF0b3IgPD0gKGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdiwgY29uc3QgX1RwICZf X3QpIHsgdHlwZWRlZiBfQmluQ2xvczxsZXNzX2VxdWFsLF9WYWxBcnJheSxfQ29uc3RhbnQsX1Rw LF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4gKF9DbG9zdXJlIChf X3YsIF9fdCkpOyB9IHRlbXBsYXRlPGNsYXNzIF9UcD4gaW5saW5lIF9FeHByPF9CaW5DbG9zPGxl c3NfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPixib29sPiBvcGVyYXRvciA8PSAo Y29uc3QgX1RwICZfX3QsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdikgeyB0eXBlZGVmIF9CaW5D bG9zPGxlc3NfZXF1YWwsX0NvbnN0YW50LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdCwgX192KSk7IH0KdGVtcGxh dGU8dHlwZW5hbWUgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFs QXJyYXksX1ZhbEFycmF5LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yID49IChjb25zdCB2YWxhcnJh eTxfVHA+ICZfX3YsIGNvbnN0IHZhbGFycmF5PF9UcD4gJl9fdykgeyB0eXBlZGVmIF9CaW5DbG9z PGdyZWF0ZXJfZXF1YWwsX1ZhbEFycmF5LF9WYWxBcnJheSxfVHAsX1RwPiBfQ2xvc3VyZTsgcmV0 dXJuIF9FeHByPF9DbG9zdXJlLCBib29sPiAoX0Nsb3N1cmUgKF9fdiwgX193KSk7IH0gdGVtcGxh dGU8Y2xhc3MgX1RwPiBpbmxpbmUgX0V4cHI8X0JpbkNsb3M8Z3JlYXRlcl9lcXVhbCxfVmFsQXJy YXksX0NvbnN0YW50LF9UcCxfVHA+LGJvb2w+IG9wZXJhdG9yID49IChjb25zdCB2YWxhcnJheTxf VHA+ICZfX3YsIGNvbnN0IF9UcCAmX190KSB7IHR5cGVkZWYgX0JpbkNsb3M8Z3JlYXRlcl9lcXVh bCxfVmFsQXJyYXksX0NvbnN0YW50LF9UcCxfVHA+IF9DbG9zdXJlOyByZXR1cm4gX0V4cHI8X0Ns b3N1cmUsIGJvb2w+IChfQ2xvc3VyZSAoX192LCBfX3QpKTsgfSB0ZW1wbGF0ZTxjbGFzcyBfVHA+ IGlubGluZSBfRXhwcjxfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxfVmFsQXJyYXks X1RwLF9UcD4sYm9vbD4gb3BlcmF0b3IgPj0gKGNvbnN0IF9UcCAmX190LCBjb25zdCB2YWxhcnJh eTxfVHA+ICZfX3YpIHsgdHlwZWRlZiBfQmluQ2xvczxncmVhdGVyX2VxdWFsLF9Db25zdGFudCxf VmFsQXJyYXksX1RwLF9UcD4gX0Nsb3N1cmU7IHJldHVybiBfRXhwcjxfQ2xvc3VyZSwgYm9vbD4g KF9DbG9zdXJlIChfX3QsIF9fdikpOyB9CgoKCn0KIyAzMiAiL3Vzci9pbmNsdWRlL2crKy12My92 YWxhcnJheSIgMiAzCiMgNDMgIkZJVFNVdGlsLmgiIDIKCiMgMSAiRml0c0Vycm9yLmgiIDEKIyA0 NSAiRklUU1V0aWwuaCIgMgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3R5cGVpbmZvIiAx IDMKIyA1MCAiRklUU1V0aWwuaCIgMgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvZXhjZXB0aW9u IiAxIDMKIyA1MSAiRklUU1V0aWwuaCIgMgp1c2luZyBzdGQ6OnN0cmluZzsKIyAxICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2NvbXBsZXgiIDEgMwojIDUzICJGSVRTVXRpbC5oIiAyCiMgMSAiL3Vzci9p bmNsdWRlL2crKy12My9tZW1vcnkiIDEgMwojIDU0ICJGSVRTVXRpbC5oIiAyCgoKCm5hbWVzcGFj ZSBDQ2ZpdHMgewoKCgogIG5hbWVzcGFjZSBGSVRTVXRpbCB7CiMgMzEyICJGSVRTVXRpbC5oIgog ICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBzd2FwKFQmIGxlZnQsVCYgcmlnaHQp OwoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgdm9pZCBzd2FwKHN0ZDo6dmVjdG9yPFQ+ JiBsZWZ0LCBzdGQ6OnZlY3RvcjxUPiYgcmlnaHQpOwoKICAgIHN0cmluZyBsb3dlckNhc2UoY29u c3Qgc3RyaW5nJiBpbnB1dFN0cmluZyk7CgogICAgc3RyaW5nIHVwcGVyQ2FzZShjb25zdCBzdHJp bmcmIGlucHV0U3RyaW5nKTsKCiAgc3RydWN0IEludmFsaWRDb252ZXJzaW9uIDogcHVibGljIEZp dHNFeGNlcHRpb24KICB7CiAgICAgICAgICAgICAgICBJbnZhbGlkQ29udmVyc2lvbihjb25zdCBz dHJpbmcmIGRpYWcsIGJvb2wgc2lsZW50PWZhbHNlKTsKCiAgfTsKCiAgc3RydWN0IE1hdGNoU3Rl bSA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxzdHJpbmcsc3RyaW5nLGJvb2w+CiAgewog ICAgICAgICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHN0cmluZyYgbGVmdCwgY29uc3Qgc3RyaW5n JiByaWdodCkgY29uc3Q7CiAgfTsKCiAgc3RhdGljIGNvbnN0IGRvdWJsZSBkMSgwKTsKICBzdGF0 aWMgY29uc3QgZmxvYXQgZjEoMCk7CiAgc3RhdGljIGNvbnN0IHN0ZDo6Y29tcGxleDxmbG9hdD4g YzEoMC4pOwogIHN0YXRpYyBjb25zdCBzdGQ6OmNvbXBsZXg8ZG91YmxlPiBkMigwLik7CiAgc3Rh dGljIGNvbnN0IHN0cmluZyBzMSgiIik7CiAgc3RhdGljIGNvbnN0IGludCBpMSgwKTsKICBzdGF0 aWMgY29uc3QgdW5zaWduZWQgaW50IHUxKDApOwogIHN0YXRpYyBjb25zdCBsb25nIGwxKDApOwog IHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHVsMSgwKTsKICBzdGF0aWMgY29uc3Qgc2hvcnQg czIoMCk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNob3J0IHVzMSgwKTsKICBzdGF0aWMgY29u c3QgYm9vbCBiMShmYWxzZSk7CiAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIGNoYXIgYjIoMCk7Cgog IGNoYXIqKiBDaGFyQXJyYXkoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaW5BcnJheSk7Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZlY3Rv cjxTPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiBpbkFycmF5LHNpemVfdCBmaXJz dCwgc2l6ZV90IGxhc3QpOwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlwZW5hbWUgVD4KICB2 b2lkIGZpbGwoc3RkOjp2ZWN0b3I8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6 OmNvbXBsZXg8VD4gPiYgaW5BcnJheSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZlY3Rvcjxz dGQ6OmNvbXBsZXg8Uz4gPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPFQ+JiBpbkFycmF5 LCBzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5 cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6dmVjdG9yPHN0ZDo6Y29tcGxleDxTPiA+JiBvdXRB cnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjpjb21wbGV4PFQ+ID4mIGluQXJyYXksIHNpemVf dCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgdm9pZCBm aWxsKHN0ZDo6dmVjdG9yPHN0cmluZz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxUPiYg aW5BcnJheSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHZvaWQgZmlsbChzdGQ6OnZl Y3RvcjxzdHJpbmc+JiBvdXRBcnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaW5BcnJh eSwgc2l6ZV90IGZpcnN0LCBzaXplX3QgbGFzdCk7CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog IHZvaWQgZmlsbChzdGQ6OnZlY3RvcjxUPiYgb3V0QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0 cmluZz4mIGluQXJyYXksIHNpemVfdCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUg PHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgc3RyaW5nIGVycm9yTWVzc2FnZShjb25zdCBTJiBv dXQsIGNvbnN0IFQmIGluKTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAg dm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxU PiYgaW5BcnJheSxzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0KTsKCiAgdGVtcGxhdGUgPHR5cGVu YW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5 LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OmNvbXBsZXg8VD4gPiYgaW5BcnJheSk7CgogIHRlbXBs YXRlIDx0eXBlbmFtZSBTLCB0eXBlbmFtZSBUPgogIHZvaWQgZmlsbChzdGQ6OnZhbGFycmF5PHN0 ZDo6Y29tcGxleDxTPiA+JiBvdXRBcnJheSwgY29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGluQXJyYXks IHNpemVfdCBmaXJzdCwgc2l6ZV90IGxhc3QpOwoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUywgdHlw ZW5hbWUgVD4KICB2b2lkIGZpbGwoc3RkOjp2YWxhcnJheTxzdGQ6OmNvbXBsZXg8Uz4gPiYgb3V0 QXJyYXksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6Y29tcGxleDxUPiA+JiBpbkFycmF5KTsKCiAg dGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFy cmF5LCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBpbkFycmF5LHNpemVfdCBmaXJzdCwgc2l6 ZV90IGxhc3QpOwoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBm aWxsKHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBp bkFycmF5KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxs KHN0ZDo6dmFsYXJyYXk8Uz4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5PHN0ZDo6Y29t cGxleDxUPiA+JiBpbkFycmF5KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+ CiAgdm9pZCBmaWxsKHN0ZDo6dmFsYXJyYXk8c3RkOjpjb21wbGV4PFM+ID4mIG91dEFycmF5LCBj b25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBpbkFycmF5LCBzaXplX3QgZmlyc3QsIHNpemVfdCBsYXN0 KTsKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFMsIHR5cGVuYW1lIFQ+CiAgdm9pZCBmaWxsKHN0ZDo6 dmFsYXJyYXk8c3RkOjpjb21wbGV4PFM+ID4mIG91dEFycmF5LCBjb25zdCBzdGQ6OnZhbGFycmF5 PHN0ZDo6Y29tcGxleDxUPiA+JiBpbkFycmF5KTsKCgogIGZpdHNmaWxlKiBjb3B5Rml0c1B0cihm aXRzZmlsZSAqIGluUHRyKTsKIyA0MTcgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8Y2xhc3Mg VD4KICAgIHN0cnVjdCBNYXRjaFB0ck5hbWUgOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248 VCxzdGQ6OnN0cmluZyxib29sPgogICAgewoKCgoKICAgICAgICAgIGJvb2wgb3BlcmF0b3IgKCkg KGNvbnN0IFQmIGxlZnQsIGNvbnN0IHN0cmluZyYgcmlnaHQpIGNvbnN0OwoKICAgICAgcHVibGlj OgogICAgICBwcm90ZWN0ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9Owoj IDQ0MiAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAgc3RydWN0IE1hdGNo TmFtZSA6IHB1YmxpYyBzdGQ6OmJpbmFyeV9mdW5jdGlvbjxULHN0ZDo6c3RyaW5nLGJvb2w+CiAg ICB7CgoKCiAgICAgICAgICBib29sIG9wZXJhdG9yICgpIChjb25zdCBUJiBsZWZ0LCBjb25zdCBz dHJpbmcmIHJpZ2h0KSBjb25zdDsKCiAgICAgIHB1YmxpYzoKICAgICAgcHJvdGVjdGVkOgogICAg ICBwcml2YXRlOgogICAgICBwcml2YXRlOgogICAgfTsKIyA0NjQgIkZJVFNVdGlsLmgiCiAgICB0 ZW1wbGF0ZSA8Y2xhc3MgVD4KICAgIHN0cnVjdCBNYXRjaE51bSA6IHB1YmxpYyBzdGQ6OmJpbmFy eV9mdW5jdGlvbjxULGludCxib29sPgogICAgewoKCgogICAgICAgICAgYm9vbCBvcGVyYXRvciAo KSAoY29uc3QgVCYgbGVmdCwgY29uc3QgaW50JiByaWdodCkgY29uc3Q7CgogICAgICBwdWJsaWM6 CiAgICAgIHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CiMg NDg2ICJGSVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgTWF0 Y2hUeXBlCiAgICB7CgoKCgoKCgogICAgICAgIGNsYXNzIFVucmVjb2duaXplZFR5cGUgOiBwdWJs aWMgRml0c0V4Y2VwdGlvbgogICAgICAgIHsKICAgICAgICAgIHB1YmxpYzoKCgogICAgICAgICAg ICAgIFVucmVjb2duaXplZFR5cGUgKGNvbnN0IHN0cmluZyYgc3RyZywgYm9vbCBzaWxlbnQgPSB0 cnVlKTsKCiAgICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgICBwcml2YXRlOgogICAgICAgICAg cHJpdmF0ZToKICAgICAgICB9OwoKCgoKICAgICAgICAgIFZhbHVlVHlwZSBvcGVyYXRvciAoKSAo KTsKCiAgICAgIHB1YmxpYzoKICAgICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgogICAgICBw cml2YXRlOgogICAgfTsKIyA1MjcgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KICAgIHN0cnVjdCBDVmFycmF5CiAgICB7CgoKCiAgICAgICAgICBUKiBvcGVyYXRvciAoKSAo Y29uc3Qgc3RkOjp2ZWN0b3I8VD4mIGluQXJyYXkpOwoKICAgICAgcHVibGljOgogICAgICBwcm90 ZWN0ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDU0OSAiRklUU1V0 aWwuaCIKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RydWN0IEZpdHNOdWxsVmFsdWUK ICAgIHsKCgoKICAgICAgICAgIFQgb3BlcmF0b3IgKCkgKCk7CgogICAgICBwdWJsaWM6CiAgICAg IHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CiMgNTcxICJG SVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBzdHJ1Y3QgTWF0Y2hJbWFn ZVR5cGUKICAgIHsKIyA1ODIgIkZJVFNVdGlsLmgiCiAgICAgICAgY2xhc3MgVW5yZWNvZ25pemVk VHlwZSA6IHB1YmxpYyBGaXRzRXhjZXB0aW9uCiAgICAgICAgewogICAgICAgICAgcHVibGljOgoK CiAgICAgICAgICAgICAgVW5yZWNvZ25pemVkVHlwZSAoY29uc3Qgc3RyaW5nJiBzdHJnLCBib29s IHNpbGVudCA9IHRydWUpOwoKICAgICAgICAgIHByb3RlY3RlZDoKICAgICAgICAgIHByaXZhdGU6 CiAgICAgICAgICBwcml2YXRlOgogICAgICAgIH07CgoKCgogICAgICAgICAgSW1hZ2VUeXBlIG9w ZXJhdG9yICgpICgpOwoKICAgICAgcHVibGljOgogICAgICBwcm90ZWN0ZWQ6CiAgICAgIHByaXZh dGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDYxMyAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRl IDxjbGFzcyBUPgogICAgc3RydWN0IE1hdGNoUHRyTnVtIDogcHVibGljIHN0ZDo6YmluYXJ5X2Z1 bmN0aW9uPFQsaW50LGJvb2w+CiAgICB7CgoKCiAgICAgICAgICBib29sIG9wZXJhdG9yICgpIChj b25zdCBUJiBsZWZ0LCBjb25zdCBpbnQmIHJpZ2h0KSBjb25zdDsKCiAgICAgIHB1YmxpYzoKICAg ICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgogICAgICBwcml2YXRlOgogICAgfTsKIyA2MzYg IkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIGNsYXNzIGF1dG9fYXJy YXlfcHRyCiAgICB7CiAgICAgIHB1YmxpYzoKCgoKICAgICAgICAgIGV4cGxpY2l0IGF1dG9fYXJy YXlfcHRyIChYKiBwID0gMCkgdGhyb3cgKCk7CgoKCiAgICAgICAgICBleHBsaWNpdCBhdXRvX2Fy cmF5X3B0ciAoYXV0b19hcnJheV9wdHI8WD4mIHJpZ2h0KSB0aHJvdyAoKTsKCgogICAgICAgICAg fmF1dG9fYXJyYXlfcHRyKCk7CgoKCgogICAgICAgICAgdm9pZCBvcGVyYXRvciA9IChhdXRvX2Fy cmF5X3B0cjxYPiYgcmlnaHQpOwoKCgogICAgICAgICAgWCYgb3BlcmF0b3IgKiAoKSB0aHJvdyAo KTsKCgoKICAgICAgICAgIFgmIG9wZXJhdG9yIFtdIChzaXplX3QgaSkgdGhyb3cgKCk7CgoKCiAg ICAgICAgICBYIG9wZXJhdG9yIFtdIChzaXplX3QgaSkgY29uc3QgdGhyb3cgKCk7CgoKICAgICAg ICAgIFgqIGdldCAoKSBjb25zdDsKCgoKICAgICAgICAgIFgqIHJlbGVhc2UgKCkgdGhyb3cgKCk7 CgoKCiAgICAgICAgICBYKiByZXNldCAoWCogcCkgdGhyb3cgKCk7CgoKICAgICAgICAgIHN0YXRp YyB2b2lkIHJlbW92ZSAoWComIHgpOwoKICAgICAgcHJvdGVjdGVkOgogICAgICBwcml2YXRlOgog ICAgICBwcml2YXRlOgoKCgoKICAgICAgICAgIFgqIG1fcDsKCgogICAgfTsKIyA3MDMgIkZJVFNV dGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIHN0cnVjdCBDb21wYXJlUHRySW5k ZXggOiBwdWJsaWMgc3RkOjpiaW5hcnlfZnVuY3Rpb248VCxULGJvb2w+CiAgICB7CgoKCiAgICAg ICAgICBib29sIG9wZXJhdG9yICgpIChjb25zdCBUKiBsZWZ0LCBjb25zdCBUKiByaWdodCk7Cgog ICAgICBwdWJsaWM6CiAgICAgIHByb3RlY3RlZDoKICAgICAgcHJpdmF0ZToKICAgICAgcHJpdmF0 ZToKICAgIH07CiMgNzI1ICJGSVRTVXRpbC5oIgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAg ICBzdHJ1Y3QgQ0FhcnJheQogICAgewoKCgogICAgICAgICAgVCogb3BlcmF0b3IgKCkgKGNvbnN0 IHN0ZDo6dmFsYXJyYXk8VD4mIGluQXJyYXkpOwoKICAgICAgcHVibGljOgogICAgICBwcm90ZWN0 ZWQ6CiAgICAgIHByaXZhdGU6CiAgICAgIHByaXZhdGU6CiAgICB9OwojIDc0NyAiRklUU1V0aWwu aCIKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgc3RydWN0IENWQWFycmF5CiAgICB7CgoK CiAgICAgICAgICBUKiBvcGVyYXRvciAoKSAoY29uc3Qgc3RkOjp2ZWN0b3I8IHN0ZDo6dmFsYXJy YXk8VD4gPiYgaW5BcnJheSk7CgogICAgICBwdWJsaWM6CiAgICAgIHByb3RlY3RlZDoKICAgICAg cHJpdmF0ZToKICAgICAgcHJpdmF0ZToKICAgIH07CgoKCgoKICAgIHRlbXBsYXRlIDxjbGFzcyBU PgogICAgaW5saW5lIGJvb2wgTWF0Y2hQdHJOYW1lPFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgVCYg bGVmdCwgY29uc3Qgc3RyaW5nJiByaWdodCkgY29uc3QKICAgIHsKCiAgICAgICByZXR1cm4gbGVm dC0+bV9uYW1lID09IHJpZ2h0LT5tX25hbWU7CgogICAgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8Y2xh c3MgVD4KICAgIGlubGluZSBib29sIE1hdGNoTmFtZTxUPjo6b3BlcmF0b3IgKCkgKGNvbnN0IFQm IGxlZnQsIGNvbnN0IHN0cmluZyYgcmlnaHQpIGNvbnN0CiAgICB7CgogICAgICAgcmV0dXJuIGxl ZnQubV9uYW1lID09IHJpZ2h0Lm1fbmFtZTsKCiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDxjbGFz cyBUPgogICAgaW5saW5lIGJvb2wgTWF0Y2hOdW08VD46Om9wZXJhdG9yICgpIChjb25zdCBUJiBs ZWZ0LCBjb25zdCBpbnQmIHJpZ2h0KSBjb25zdAogICAgewoKICAgIHJldHVybiBsZWZ0LmluZGV4 KCkgPT0gcmlnaHQ7CgogICAgfQojIDgwNSAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgogICAgaW5saW5lIFQqIENWYXJyYXk8VD46Om9wZXJhdG9yICgpIChjb25zdCBzdGQ6 OnZlY3RvcjxUPiYgaW5BcnJheSkKICAgIHsKCgoKCiAgICAgIGF1dG9fYXJyYXlfcHRyPFQ+IHBD KG5ldyBUW2luQXJyYXkuc2l6ZSgpXSk7CiAgICAgIFQqIGMgPSBwQy5nZXQoKTsKICAgICAgc3Rk Ojpjb3B5KGluQXJyYXkuYmVnaW4oKSxpbkFycmF5LmVuZCgpLCZjWzBdKTsKICAgICAgcmV0dXJu IHBDLnJlbGVhc2UoKTsKCiAgICB9CgoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAg aW5saW5lIFQgRml0c051bGxWYWx1ZTxUPjo6b3BlcmF0b3IgKCkgKCkKICAgIHsKCiAgICAgICAg ICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBudWxsOwogICAgICAgICAgIHN3aXRjaCAoIG51bGwo KSApCiAgICAgICAgICAgewoKICAgICAgICAgICAgICAgIGNhc2UgVGZsb2F0OgogICAgICAgICAg ICAgICAgY2FzZSBUY29tcGxleDoKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRp Y19jYXN0PFQ+KC05LjExOTEyRS0zNkYpOwogICAgICAgICAgICAgICAgY2FzZSBUZG91YmxlOgog ICAgICAgICAgICAgICAgY2FzZSBUZGJsY29tcGxleDoKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHN0YXRpY19jYXN0PFQ+KC05LjExOTEyOTEzOTE0OTFFLTM2KTsKICAgICAgICAgICAg ICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAg ICB9CgogICAgfQojIDg1MSAiRklUU1V0aWwuaCIKICAgIHRlbXBsYXRlIDxjbGFzcyBUPgogICAg aW5saW5lIGJvb2wgTWF0Y2hQdHJOdW08VD46Om9wZXJhdG9yICgpIChjb25zdCBUJiBsZWZ0LCBj b25zdCBpbnQmIHJpZ2h0KSBjb25zdAogICAgewoKICAgIHJldHVybiBsZWZ0LT5pbmRleCgpID09 IHJpZ2h0OwoKICAgIH0KIyA4NzUgIkZJVFNVdGlsLmgiCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KICAgIE1hdGNoVHlwZTwgVCA+OjpVbnJlY29nbml6ZWRUeXBlOjpVbnJlY29nbml6ZWRUeXBl IChjb25zdCBzdHJpbmcmIHN0cmcsIGJvb2wgc2lsZW50KQoKCgogICAgOiBGaXRzRXhjZXB0aW9u KHN0cmcsc2lsZW50KQoKICAgIHsKCgogICAgfQoKCgoKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CiAgICBWYWx1ZVR5cGUgTWF0Y2hUeXBlPFQ+OjpvcGVyYXRvciAoKSAoKQogICAgewoKCiAg ICBpZiAoIHR5cGVpZChUKSA9PSB0eXBlaWQoZDEpICkgcmV0dXJuIFRkb3VibGU7CiAgICBpZiAo IHR5cGVpZChUKSA9PSB0eXBlaWQoZjEpICkgcmV0dXJuIFRmbG9hdDsKICAgIGlmICggdHlwZWlk KFQpID09IHR5cGVpZChjMSkgKSByZXR1cm4gVGNvbXBsZXg7CiAgICBpZiAoIHR5cGVpZChUKSA9 PSB0eXBlaWQoZDIpICkgcmV0dXJuIFRkYmxjb21wbGV4OwogICAgaWYgKCB0eXBlaWQoVCkgPT0g dHlwZWlkKHMxKSApIHJldHVybiBUc3RyaW5nOwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlk KGkxKSApIHJldHVybiBUaW50OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHUxKSApIHJl dHVybiBUdWludDsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChzMikgKSByZXR1cm4gVHNo b3J0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHVzMSkgKSByZXR1cm4gVHVzaG9ydDsK ICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChiMSkgKSByZXR1cm4gVGxvZ2ljYWw7CiAgICBp ZiAoIHR5cGVpZChUKSA9PSB0eXBlaWQoYjIpICkgcmV0dXJuIFRieXRlOwogICAgaWYgKCB0eXBl aWQoVCkgPT0gdHlwZWlkKGwxKSApIHJldHVybiBUbG9uZzsKICAgIGlmICggdHlwZWlkKFQpID09 IHR5cGVpZCh1bDEpICkgcmV0dXJuIFR1bG9uZzsKICAgIHRocm93IE1hdGNoVHlwZTo6VW5yZWNv Z25pemVkVHlwZSgiSW52YWxpZCBkYXRhIHR5cGUgZm9yIEZJVFMgSS9PIik7CgoKICAgIH0KCgoK CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBNYXRjaEltYWdlVHlwZTwgVCA+OjpVbnJl Y29nbml6ZWRUeXBlOjpVbnJlY29nbml6ZWRUeXBlIChjb25zdCBzdHJpbmcmIHN0cmcsIGJvb2wg c2lsZW50KQoKICAgIDogRml0c0V4Y2VwdGlvbihzdHJnLHNpbGVudCkKCgoKICAgIHsKCgogICAg fQoKCgoKCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICBJbWFnZVR5cGUgTWF0Y2hJbWFn ZVR5cGU8VD46Om9wZXJhdG9yICgpICgpCiAgICB7CgogICAgIHN0YXRpYyBjb25zdCBkb3VibGUg ZDEoMCk7CiAgICAgc3RhdGljIGNvbnN0IGZsb2F0IGYxKDApOwogICAgIHN0YXRpYyBjb25zdCBz aG9ydCBpMSgwKTsKICAgICBzdGF0aWMgY29uc3QgbG9uZyBsMSgwKTsKICAgICBzdGF0aWMgY29u c3QgdW5zaWduZWQgc2hvcnQgdXMxKDApOwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25n IHVsMSgwKTsKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgY2hhciBieTEoMCk7CgogICAgaWYg KCB0eXBlaWQoVCkgPT0gdHlwZWlkKGIyKSApIHJldHVybiBJYnl0ZTsKICAgIGlmICggdHlwZWlk KFQpID09IHR5cGVpZChzMikgKSByZXR1cm4gSXNob3J0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0g dHlwZWlkKGwxKSApIHJldHVybiBJbG9uZzsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZChm MSkgKSByZXR1cm4gSWZsb2F0OwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKGQxKSApIHJl dHVybiBJZG91YmxlOwogICAgaWYgKCB0eXBlaWQoVCkgPT0gdHlwZWlkKHVzMSkgKSByZXR1cm4g SXVzaG9ydDsKICAgIGlmICggdHlwZWlkKFQpID09IHR5cGVpZCh1bDEpICkgcmV0dXJuIEl1bG9u ZzsKCiAgICB0aHJvdyBNYXRjaEltYWdlVHlwZTo6VW5yZWNvZ25pemVkVHlwZSgiSW52YWxpZCBk YXRhIHR5cGUgZm9yIEZJVFMgSW1hZ2UgSS9PIik7CgogICAgfQoKCgoKCiAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgWD4KICAgIGF1dG9fYXJyYXlfcHRyPFg+OjphdXRvX2FycmF5X3B0ciAoWCogcCkg dGhyb3cgKCkKCiAgICAgICAgICA6IG1fcChwKQoKCgogICAgewoKCiAgICB9CgogICAgdGVtcGxh dGUgPHR5cGVuYW1lIFg+CiAgICBhdXRvX2FycmF5X3B0cjxYPjo6YXV0b19hcnJheV9wdHIgKGF1 dG9fYXJyYXlfcHRyPFg+JiByaWdodCkgdGhyb3cgKCkKCiAgICAgICAgICA6IG1fcChyaWdodC5y ZWxlYXNlKCkpCgoKCiAgICB7CgoKICAgIH0KCgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAg ICBhdXRvX2FycmF5X3B0cjxYPjo6fmF1dG9fYXJyYXlfcHRyKCkKICAgIHsKCiAgICAgIGRlbGV0 ZSBbXSBtX3A7CgogICAgfQoKCgoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgogICAgdm9pZCBh dXRvX2FycmF5X3B0cjxYPjo6b3BlcmF0b3IgPSAoYXV0b19hcnJheV9wdHI8WD4mIHJpZ2h0KQog ICAgewoKICAgICAgaWYgKHRoaXMgIT0gJnJpZ2h0KQogICAgICB7CiAgICAgICAgICAgICAgICBy ZW1vdmUobV9wKTsKICAgICAgICAgICAgICAgIG1fcCA9IHJpZ2h0LnJlbGVhc2UoKTsKICAgICAg fQoKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIFgmIGF1dG9fYXJyYXlfcHRy PFg+OjpvcGVyYXRvciAqICgpIHRocm93ICgpCiAgICB7CgogICAgICByZXR1cm4gKm1fcDsKCiAg ICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYJiBhdXRvX2FycmF5X3B0cjxYPjo6 b3BlcmF0b3IgW10gKHNpemVfdCBpKSB0aHJvdyAoKQogICAgewoKICAgICAgcmV0dXJuIG1fcFtp XTsKCiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYIGF1dG9fYXJyYXlfcHRy PFg+OjpvcGVyYXRvciBbXSAoc2l6ZV90IGkpIGNvbnN0IHRocm93ICgpCiAgICB7CgogICAgICBy ZXR1cm4gbV9wW2ldOwoKICAgIH0KCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgWD4KICAgIFgqIGF1 dG9fYXJyYXlfcHRyPFg+OjpnZXQgKCkgY29uc3QKICAgIHsKCiAgICAgIHJldHVybiBtX3A7Cgog ICAgfQoKICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBYPgogICAgWCogYXV0b19hcnJheV9wdHI8WD46 OnJlbGVhc2UgKCkgdGhyb3cgKCkKICAgIHsKCiAgICAgIHJldHVybiByZXNldCgwKTsKCiAgICB9 CgogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFg+CiAgICBYKiBhdXRvX2FycmF5X3B0cjxYPjo6cmVz ZXQgKFgqIHApIHRocm93ICgpCiAgICB7CgoKICAgICAgWCogX190bXAgPSBtX3A7CiAgICAgIG1f cCA9IHA7CiAgICAgIHJldHVybiBfX3RtcDsKCiAgICB9CgogICAgdGVtcGxhdGUgPHR5cGVuYW1l IFg+CiAgICB2b2lkIGF1dG9fYXJyYXlfcHRyPFg+OjpyZW1vdmUgKFgqJiB4KQogICAgewoKICAg ICAgWCogX190bXAoeCk7CiAgICAgIHggPSAwOwogICAgICBkZWxldGUgW10gX190bXA7CgogICAg fQoKCgoKCiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIGJvb2wgQ29tcGFyZVB0ckluZGV4 PFQ+OjpvcGVyYXRvciAoKSAoY29uc3QgVCogbGVmdCwgY29uc3QgVCogcmlnaHQpCiAgICB7Cgog ICAgICByZXR1cm4gKGxlZnQtPmluZGV4KCkgPCByaWdodC0+aW5kZXgoKSk7CgogICAgfQoKCgoK CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIFQqIENBYXJyYXk8VD46Om9wZXJhdG9yICgp IChjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBpbkFycmF5KQogICAgewoKICAgICAgc2l6ZV90IG4o aW5BcnJheS5zaXplKCkpOwogICAgICBhdXRvX2FycmF5X3B0cjxUPiBwQyhuZXcgVFtuXSk7CiAg ICAgIFQqIGM9IHBDLmdldCgpOwogICAgICBmb3IgKHNpemVfdCBqID0gMDsgaiA8IG47ICsraikg Y1tqXSA9IGluQXJyYXlbal07CiAgICAgIHJldHVybiBwQy5yZWxlYXNlKCk7CgogICAgfQoKCgoK CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICAgIFQqIENWQWFycmF5PFQ+OjpvcGVyYXRvciAo KSAoY29uc3Qgc3RkOjp2ZWN0b3I8IHN0ZDo6dmFsYXJyYXk8VD4gPiYgaW5BcnJheSkKICAgIHsK CiAgICAgIHNpemVfdCBzeigwKTsKICAgICAgc2l6ZV90IG4oaW5BcnJheS5zaXplKCkpOwoKICAg ICAgc3RkOjp2ZWN0b3I8c2l6ZV90PiBucihuKTsKCiAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp IDwgbjsgKytpKQogICAgICB7CiAgICAgICAgIG5yW2ldID0gaW5BcnJheVtpXS5zaXplKCk7CiAg ICAgICAgIHN6ICs9IG5yW2ldOwoKICAgICAgfQogICAgICBhdXRvX2FycmF5X3B0cjxUPiBwQyhu ZXcgVFtzel0pOwogICAgICBUKiBjID0gcEMuZ2V0KCk7CgogICAgICBzaXplX3QgaygwKTsKICAg ICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBuOyArK2kpCiAgICAgIHsKICAgICAgICAgc2l6ZV90 JiBtID0gbnJbaV07CiAgICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGN1cnJlbnQgPSBp bkFycmF5W2ldOwogICAgICAgICBmb3IgKHNpemVfdCBqPTA7IGogPCBtIDsgKytqKSBjW2srK10g PSBjdXJyZW50W2pdOwogICAgICB9CgogICAgICByZXR1cm4gcEMucmVsZWFzZSgpOwoKICAgIH0K CiAgfQp9CgoKCm5hbWVzcGFjZSBDQ2ZpdHMKewoKCiAgICAgICAgbmFtZXNwYWNlIEZJVFNVdGls CiAgICAgICAgewoKICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICAg ICAgICAgICAgdm9pZCBzd2FwKFQmIGxlZnQsIFQmIHJpZ2h0KQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICAgICAgICBUIHRlbXAobGVmdCk7CiAgICAgICAgICAgICAgICAgICAg ICAgIGxlZnQgPSByaWdodDsKICAgICAgICAgICAgICAgICAgICAgICAgcmlnaHQgPSB0ZW1wOwog ICAgICAgICAgICAgICAgfQoKICAgICAgICAgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog ICAgICAgICAgICAgICAgdm9pZCBzd2FwKHN0ZDo6dmVjdG9yPFQ+JiBsZWZ0LCBzdGQ6OnZlY3Rv cjxUPiYgcmlnaHQpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIGxl ZnQuc3dhcChyaWdodCk7CiAgICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgdGVtcGxh dGUgPD4KICAgICAgICAgICAgICAgIGlubGluZSBzdHJpbmcgRml0c051bGxWYWx1ZTxzdHJpbmc+ OjpvcGVyYXRvciAoKSAoKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm4gc3RyaW5nKCIiKTsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgfQojIDExODQg IkZJVFNVdGlsLmgiCn0KIyA0MSAiS2V5RGF0YS5oIiAyCgoKCm5hbWVzcGFjZSBDQ2ZpdHMgewoj IDU5ICJLZXlEYXRhLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgS2V5RGF0YSA6 IHB1YmxpYyBLZXl3b3JkCiAgewoKCgogICAgcHVibGljOgoKICAgICAgICBLZXlEYXRhKGNvbnN0 IEtleURhdGE8IFQgPiAmcmlnaHQpOwoKCgogICAgICAgIEtleURhdGEgKGNvbnN0IHN0cmluZyAm a2V5bmFtZSwgVmFsdWVUeXBlIGtleXR5cGUsIGNvbnN0IFQgJnZhbHVlLCBIRFUqIHAsCiAgICAg ICAgY29uc3Qgc3RyaW5nICZjb21tZW50ID0gIiIpOwoKCiAgICAgICAgdmlydHVhbCB+S2V5RGF0 YSgpOwoKCgoKICAgICAgICB2aXJ0dWFsIEtleXdvcmQgKiBjbG9uZSAoKSBjb25zdDsKCgogICAg ICAgIHZpcnR1YWwgdm9pZCB3cml0ZSAoKTsKCgoKCiAgICAgICAgY29uc3QgVCYga2V5dmFsICgp IGNvbnN0OwogICAgICAgIHZvaWQga2V5dmFsIChjb25zdCBUJiB2YWx1ZSk7CgoKCgoKICAgIHBy b3RlY3RlZDoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY29weSAoY29uc3QgS2V5d29yZCYgcmln aHQpOwoKCiAgICAgICAgdmlydHVhbCBib29sIGNvbXBhcmUgKGNvbnN0IEtleXdvcmQgJnJpZ2h0 KSBjb25zdDsKCgogICAgICAgIHZpcnR1YWwgb3N0cmVhbSAmIHB1dCAob3N0cmVhbSAmcykgY29u c3Q7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVCBtX2tleXZhbDsKCgoKCgoKICAgIHBy aXZhdGU6CgoKCgogIH07CgoKdGVtcGxhdGU8PiB2b2lkIEtleURhdGE8c3RyaW5nPjo6d3JpdGUo KTsKdGVtcGxhdGU8PiBjb25zdCBzdHJpbmcmIEtleURhdGE8c3RyaW5nPjo6a2V5dmFsKCkgY29u c3Q7CnRlbXBsYXRlPD4gdm9pZCBLZXlEYXRhPHN0cmluZz46OmtleXZhbChjb25zdCBzdHJpbmcm ICk7CnRlbXBsYXRlPD4gb3N0cmVhbSYgS2V5RGF0YTxzdHJpbmc+OjpwdXQob3N0cmVhbSYgcykg Y29uc3Q7Cgp0ZW1wbGF0ZTw+IHZvaWQgS2V5RGF0YTxzdGQ6OmNvbXBsZXg8ZmxvYXQ+ID46Ondy aXRlKCk7CnRlbXBsYXRlPD4gb3N0cmVhbSYgS2V5RGF0YTxzdGQ6OmNvbXBsZXg8ZmxvYXQ+ID46 OnB1dChvc3RyZWFtJiBzKSBjb25zdDsKdGVtcGxhdGU8PiBjb25zdCBzdGQ6OmNvbXBsZXg8Zmxv YXQ+JiBLZXlEYXRhPHN0ZDo6Y29tcGxleDxmbG9hdD4gPjo6a2V5dmFsKCkgY29uc3Q7CnRlbXBs YXRlPD4gdm9pZCBLZXlEYXRhPHN0ZDo6Y29tcGxleDxmbG9hdD4gPjo6a2V5dmFsKGNvbnN0IHN0 ZDo6Y29tcGxleDxmbG9hdD4mICk7CgoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlu bGluZSBvc3RyZWFtICYgS2V5RGF0YTxUPjo6cHV0IChvc3RyZWFtICZzKSBjb25zdAogIHsKCiAg IHMgPDwgIktleXdvcmQgTmFtZTogIiA8PCBuYW1lKCkgPDwgIlx0IFZhbHVlOiAiIDw8IGtleXZh bCgpIDw8CiAgICAgIlx0IFR5cGU6ICIgPDwga2V5dHlwZSgpIDw8ICJcdCBDb21tZW50OiAiIDw8 IGNvbW1lbnQoKTsKCiAgcmV0dXJuIHM7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K ICBpbmxpbmUgY29uc3QgVCYgS2V5RGF0YTxUPjo6a2V5dmFsICgpIGNvbnN0CiAgewoKICAgIHJl dHVybiBtX2tleXZhbDsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBpbmxpbmUgdm9p ZCBLZXlEYXRhPFQ+OjprZXl2YWwgKGNvbnN0IFQmIHZhbHVlKQogIHsKCiAgICBtX2tleXZhbCA9 IHZhbHVlOwoKICB9CgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIEtleURhdGE8VD46Oktl eURhdGEoY29uc3QgS2V5RGF0YTxUPiAmcmlnaHQpCgoKCiAgICAgIDpLZXl3b3JkKHJpZ2h0KSwK ICAgICAgIG1fa2V5dmFsKHJpZ2h0Lm1fa2V5dmFsKQoKICB7CgoKICB9CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgogIEtleURhdGE8VD46OktleURhdGEgKGNvbnN0IHN0cmluZyAma2V5bmFtZSwg VmFsdWVUeXBlIGtleXR5cGUsIGNvbnN0IFQgJnZhbHVlLCBIRFUqIHAsIGNvbnN0IHN0cmluZyAm Y29tbWVudCkKCgoKICAgICAgIDogS2V5d29yZChrZXluYW1lLCBrZXl0eXBlLCBwLCBjb21tZW50 KSwKICAgICAgICAgbV9rZXl2YWwodmFsdWUpCgogIHsKCgogIH0KCgogIHRlbXBsYXRlIDx0eXBl bmFtZSBUPgogIEtleURhdGE8VD46On5LZXlEYXRhKCkKICB7CgoKICB9CgoKCgogIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgogIHZvaWQgS2V5RGF0YTxUPjo6Y29weSAoY29uc3QgS2V5d29yZCYgcmln aHQpCiAgewoKICBLZXl3b3JkOjpjb3B5KHJpZ2h0KTsKICBjb25zdCBLZXlEYXRhPFQ+JiB0aGF0 ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS2V5RGF0YTxUPiY+KHJpZ2h0KTsKICBtX2tleXZhbCA9IHRo YXQubV9rZXl2YWw7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgYm9vbCBLZXlEYXRh PFQ+Ojpjb21wYXJlIChjb25zdCBLZXl3b3JkICZyaWdodCkgY29uc3QKICB7CgogIGlmICggIUtl eXdvcmQ6OmNvbXBhcmUocmlnaHQpICkgcmV0dXJuIGZhbHNlOwogIGNvbnN0IEtleURhdGE8VD4m IHRoYXQgPSBzdGF0aWNfY2FzdDxjb25zdCBLZXlEYXRhPFQ+Jj4ocmlnaHQpOwogIGlmICh0aGlz LT5tX2tleXZhbCAhPSB0aGF0Lm1fa2V5dmFsKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7 CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgS2V5d29yZCAqIEtleURhdGE8VD46OmNs b25lICgpIGNvbnN0CiAgewoKICByZXR1cm4gbmV3IEtleURhdGE8VD4oKnRoaXMpOwoKICB9Cgog IHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIHZvaWQgS2V5RGF0YTxUPjo6d3JpdGUgKCkKICB7Cgog ICBpbnQgc3RhdHVzID0gMDsKICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBrZXlUeXBlOwogICBp ZiAoIGZmdWt5KGZpdHNQb2ludGVyKCksa2V5VHlwZSgpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdF9jYXN0PGNoYXIgKj4obmFtZSgpLmNfc3RyKCkpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAmbV9rZXl2YWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2Nh c3Q8Y2hhciAqPihjb21tZW50KCkuY19zdHIoKSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICZzdGF0dXMpICkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogIH0KCgoKCgp9CiMgMTUgIktl eXdvcmRULmgiIDIKIyAxICJIRFUuaCIgMQojIDI2ICJIRFUuaCIKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL21hcCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9nKystdjMvbWFwIiAzCiMgMSAiL3Vz ci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9tYXAuaCIgMSAzCiMgNjAgIi91c3IvaW5jbHVkZS9n KystdjMvYml0cy9zdGRfbWFwLmgiIDMKCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9z dGxfdHJlZS5oIiAxIDMKIyA4NSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDg2 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA4NyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF90cmVlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf Y29uc3RydWN0LmgiIDEgMwojIDg4ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX3RyZWUu aCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9mdW5jdGlvbi5oIiAxIDMK IyA4OSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF90cmVlLmgiIDIgMwoKbmFtZXNwYWNl IHN0ZAp7Cgp0eXBlZGVmIGJvb2wgX1JiX3RyZWVfQ29sb3JfdHlwZTsKY29uc3QgX1JiX3RyZWVf Q29sb3JfdHlwZSBfU19yYl90cmVlX3JlZCA9IGZhbHNlOwpjb25zdCBfUmJfdHJlZV9Db2xvcl90 eXBlIF9TX3JiX3RyZWVfYmxhY2sgPSB0cnVlOwoKc3RydWN0IF9SYl90cmVlX25vZGVfYmFzZQp7 CiAgdHlwZWRlZiBfUmJfdHJlZV9Db2xvcl90eXBlIF9Db2xvcl90eXBlOwogIHR5cGVkZWYgX1Ji X3RyZWVfbm9kZV9iYXNlKiBfQmFzZV9wdHI7CgogIF9Db2xvcl90eXBlIF9NX2NvbG9yOwogIF9C YXNlX3B0ciBfTV9wYXJlbnQ7CiAgX0Jhc2VfcHRyIF9NX2xlZnQ7CiAgX0Jhc2VfcHRyIF9NX3Jp Z2h0OwoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICB7CiAg ICB3aGlsZSAoX194LT5fTV9sZWZ0ICE9IDApIF9feCA9IF9feC0+X01fbGVmdDsKICAgIHJldHVy biBfX3g7CiAgfQoKICBzdGF0aWMgX0Jhc2VfcHRyIF9TX21heGltdW0oX0Jhc2VfcHRyIF9feCkK ICB7CiAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0Owog ICAgcmV0dXJuIF9feDsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgpzdHJ1Y3QgX1Ji X3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKewogIHR5cGVkZWYgX1JiX3Ry ZWVfbm9kZTxfVmFsdWU+KiBfTGlua190eXBlOwogIF9WYWx1ZSBfTV92YWx1ZV9maWVsZDsKfTsK CgpzdHJ1Y3QgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2Rl X2Jhc2U6Ol9CYXNlX3B0ciBfQmFzZV9wdHI7CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJh dG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNl X3R5cGU7CiAgX0Jhc2VfcHRyIF9NX25vZGU7CgogIHZvaWQgX01faW5jcmVtZW50KCkKICB7CiAg ICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gMCkgewogICAgICBfTV9ub2RlID0gX01fbm9kZS0+ X01fcmlnaHQ7CiAgICAgIHdoaWxlIChfTV9ub2RlLT5fTV9sZWZ0ICE9IDApCiAgICAgICAgX01f bm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX0Jhc2VfcHRy IF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAgICAgd2hpbGUgKF9NX25vZGUgPT0gX195LT5f TV9yaWdodCkgewogICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9w YXJlbnQ7CiAgICAgIH0KICAgICAgaWYgKF9NX25vZGUtPl9NX3JpZ2h0ICE9IF9feSkKICAgICAg ICBfTV9ub2RlID0gX195OwogICAgfQogIH0KCiAgdm9pZCBfTV9kZWNyZW1lbnQoKQogIHsKICAg IGlmIChfTV9ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCAmJgogICAgICAgIF9NX25v ZGUtPl9NX3BhcmVudC0+X01fcGFyZW50ID09IF9NX25vZGUpCiAgICAgIF9NX25vZGUgPSBfTV9u b2RlLT5fTV9yaWdodDsKICAgIGVsc2UgaWYgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkgewogICAg ICBfQmFzZV9wdHIgX195ID0gX01fbm9kZS0+X01fbGVmdDsKICAgICAgd2hpbGUgKF9feS0+X01f cmlnaHQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX3JpZ2h0OwogICAgICBfTV9ub2RlID0g X195OwogICAgfQogICAgZWxzZSB7CiAgICAgIF9CYXNlX3B0ciBfX3kgPSBfTV9ub2RlLT5fTV9w YXJlbnQ7CiAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVmdCkgewogICAgICAgIF9N X25vZGUgPSBfX3k7CiAgICAgICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgIH0KICAgICAg X01fbm9kZSA9IF9feTsKICAgIH0KICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlLCBjbGFz cyBfUmVmLCBjbGFzcyBfUHRyPgpzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3IgOiBwdWJsaWMgX1Ji X3RyZWVfYmFzZV9pdGVyYXRvcgp7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsKICB0eXBl ZGVmIF9SZWYgcmVmZXJlbmNlOwogIHR5cGVkZWYgX1B0ciBwb2ludGVyOwogIHR5cGVkZWYgX1Ji X3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPgogICAgaXRlcmF0b3I7CiAg dHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W YWx1ZSo+CiAgICBjb25zdF9pdGVyYXRvcjsKICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9W YWx1ZSwgX1JlZiwgX1B0cj4KICAgIF9TZWxmOwogIHR5cGVkZWYgX1JiX3RyZWVfbm9kZTxfVmFs dWU+KiBfTGlua190eXBlOwoKICBfUmJfdHJlZV9pdGVyYXRvcigpIHt9CiAgX1JiX3RyZWVfaXRl cmF0b3IoX0xpbmtfdHlwZSBfX3gpIHsgX01fbm9kZSA9IF9feDsgfQogIF9SYl90cmVlX2l0ZXJh dG9yKGNvbnN0IGl0ZXJhdG9yJiBfX2l0KSB7IF9NX25vZGUgPSBfX2l0Ll9NX25vZGU7IH0KCiAg cmVmZXJlbmNlIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSkt Pl9NX3ZhbHVlX2ZpZWxkOyB9CiAgcG9pbnRlciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4g JihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYmIG9wZXJhdG9yKysoKSB7IF9NX2luY3JlbWVudCgp OyByZXR1cm4gKnRoaXM7IH0KICBfU2VsZiBvcGVyYXRvcisrKGludCkgewogICAgX1NlbGYgX190 bXAgPSAqdGhpczsKICAgIF9NX2luY3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAg X1NlbGYmIG9wZXJhdG9yLS0oKSB7IF9NX2RlY3JlbWVudCgpOyByZXR1cm4gKnRoaXM7IH0KICBf U2VsZiBvcGVyYXRvci0tKGludCkgewogICAgX1NlbGYgX190bXAgPSAqdGhpczsKICAgIF9NX2Rl Y3JlbWVudCgpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVmFs dWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3Qg X1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBfUHRyPiYgX194LAogICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9f eSkgewogIHJldHVybiBfX3guX01fbm9kZSA9PSBfX3kuX01fbm9kZTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRv cjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFs dWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2RlID09IF9feS5fTV9ub2RlOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVl X2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVlKj4mIF9feCwKICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNv bnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7 Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVmFsdWUsIGNsYXNzIF9SZWYsIGNsYXNzIF9QdHI+CmlubGlu ZSBib29sIG9wZXJhdG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbHVlLCBfUmVmLCBf UHRyPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9y PF9WYWx1ZSwgX1JlZiwgX1B0cj4mIF9feSkgewogIHJldHVybiBfX3guX01fbm9kZSAhPSBfX3ku X01fbm9kZTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9WYWx1ZT4KaW5saW5lIGJvb2wgb3BlcmF0b3Ih PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9W YWx1ZSo+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0 b3I8X1ZhbHVlLCBfVmFsdWUmLCBfVmFsdWUqPiYgX195KSB7CiAgcmV0dXJuIF9feC5fTV9ub2Rl ICE9IF9feS5fTV9ub2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1ZhbHVlPgppbmxpbmUgYm9vbCBv cGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWx1ZSwgX1ZhbHVlJiwgX1ZhbHVl Kj4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxf VmFsdWUsIGNvbnN0IF9WYWx1ZSYsIGNvbnN0IF9WYWx1ZSo+JiBfX3kpIHsKICByZXR1cm4gX194 Ll9NX25vZGUgIT0gX195Ll9NX25vZGU7Cn0KCmlubGluZSB2b2lkCl9SYl90cmVlX3JvdGF0ZV9s ZWZ0KF9SYl90cmVlX25vZGVfYmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3Qp CnsKICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+X01fcmlnaHQ7CiAgX194LT5fTV9y aWdodCA9IF9feS0+X01fbGVmdDsKICBpZiAoX195LT5fTV9sZWZ0ICE9MCkKICAgIF9feS0+X01f bGVmdC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7 CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195OwogIGVsc2UgaWYgKF9feCA9 PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0g X195OwogIGVsc2UKICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICBfX3ktPl9N X2xlZnQgPSBfX3g7CiAgX194LT5fTV9wYXJlbnQgPSBfX3k7Cn0KCmlubGluZSB2b2lkCl9SYl90 cmVlX3JvdGF0ZV9yaWdodChfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feCwgX1JiX3RyZWVfbm9kZV9i YXNlKiYgX19yb290KQp7CiAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX2xlZnQ7 CiAgX194LT5fTV9sZWZ0ID0gX195LT5fTV9yaWdodDsKICBpZiAoX195LT5fTV9yaWdodCAhPSAw KQogICAgX195LT5fTV9yaWdodC0+X01fcGFyZW50ID0gX194OwogIF9feS0+X01fcGFyZW50ID0g X194LT5fTV9wYXJlbnQ7CgogIGlmIChfX3ggPT0gX19yb290KQogICAgX19yb290ID0gX195Owog IGVsc2UgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICBfX3gtPl9NX3Bh cmVudC0+X01fcmlnaHQgPSBfX3k7CiAgZWxzZQogICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQg PSBfX3k7CiAgX195LT5fTV9yaWdodCA9IF9feDsKICBfX3gtPl9NX3BhcmVudCA9IF9feTsKfQoK aW5saW5lIHZvaWQKX1JiX3RyZWVfcmViYWxhbmNlKF9SYl90cmVlX25vZGVfYmFzZSogX194LCBf UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCnsKICBfX3gtPl9NX2NvbG9yID0gX1NfcmJfdHJl ZV9yZWQ7CiAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9y ID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICBpZiAoX194LT5fTV9wYXJlbnQgPT0gX194LT5fTV9w YXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdCkgewogICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9f eSA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICBpZiAoX195ICYm IF9feS0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAgICBfX3gtPl9NX3BhcmVu dC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feS0+X01fY29sb3IgPSBf U19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2Nv bG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQtPl9NX3Bh cmVudDsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBpZiAoX194ID09IF9feC0+X01fcGFy ZW50LT5fTV9yaWdodCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAg ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgfQogICAgICAgIF9f eC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgX194LT5f TV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICBf UmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsK ICAgICAgfQogICAgfQogICAgZWxzZSB7CiAgICAgIF9SYl90cmVlX25vZGVfYmFzZSogX195ID0g X194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fbGVmdDsKICAgICAgaWYgKF9feSAmJiBfX3kt Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB7CiAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N X2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKICAgICAgICBfX3ktPl9NX2NvbG9yID0gX1NfcmJf dHJlZV9ibGFjazsKICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9 IF9TX3JiX3RyZWVfcmVkOwogICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7 CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+ X01fbGVmdCkgewogICAgICAgICAgX194ID0gX194LT5fTV9wYXJlbnQ7CiAgICAgICAgICBfUmJf dHJlZV9yb3RhdGVfcmlnaHQoX194LCBfX3Jvb3QpOwogICAgICAgIH0KICAgICAgICBfX3gtPl9N X3BhcmVudC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgIF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgX1JiX3Ry ZWVfcm90YXRlX2xlZnQoX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudCwgX19yb290KTsKICAgICAg fQogICAgfQogIH0KICBfX3Jvb3QtPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9ibGFjazsKfQoKaW5s aW5lIF9SYl90cmVlX25vZGVfYmFzZSoKX1JiX3RyZWVfcmViYWxhbmNlX2Zvcl9lcmFzZShfUmJf dHJlZV9ub2RlX2Jhc2UqIF9feiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJl ZV9ub2RlX2Jhc2UqJiBfX3Jvb3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1JiX3Ry ZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf UmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3JpZ2h0bW9zdCkKewogIF9SYl90cmVlX25vZGVfYmFzZSog X195ID0gX196OwogIF9SYl90cmVlX25vZGVfYmFzZSogX194ID0gMDsKICBfUmJfdHJlZV9ub2Rl X2Jhc2UqIF9feF9wYXJlbnQgPSAwOwogIGlmIChfX3ktPl9NX2xlZnQgPT0gMCkKICAgIF9feCA9 IF9feS0+X01fcmlnaHQ7CiAgZWxzZQogICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAg X194ID0gX195LT5fTV9sZWZ0OwogICAgZWxzZSB7CiAgICAgIF9feSA9IF9feS0+X01fcmlnaHQ7 CiAgICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICBfX3kgPSBfX3ktPl9NX2xl ZnQ7CiAgICAgIF9feCA9IF9feS0+X01fcmlnaHQ7CiAgICB9CiAgaWYgKF9feSAhPSBfX3opIHsK ICAgIF9fei0+X01fbGVmdC0+X01fcGFyZW50ID0gX195OwogICAgX195LT5fTV9sZWZ0ID0gX196 LT5fTV9sZWZ0OwogICAgaWYgKF9feSAhPSBfX3otPl9NX3JpZ2h0KSB7CiAgICAgIF9feF9wYXJl bnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3kt Pl9NX3BhcmVudDsKICAgICAgX195LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIF9f eS0+X01fcmlnaHQgPSBfX3otPl9NX3JpZ2h0OwogICAgICBfX3otPl9NX3JpZ2h0LT5fTV9wYXJl bnQgPSBfX3k7CiAgICB9CiAgICBlbHNlCiAgICAgIF9feF9wYXJlbnQgPSBfX3k7CiAgICBpZiAo X19yb290ID09IF9feikKICAgICAgX19yb290ID0gX195OwogICAgZWxzZSBpZiAoX196LT5fTV9w YXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICBfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9f eTsKICAgIGVsc2UKICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgX195 LT5fTV9wYXJlbnQgPSBfX3otPl9NX3BhcmVudDsKICAgIHN0ZDo6c3dhcChfX3ktPl9NX2NvbG9y LCBfX3otPl9NX2NvbG9yKTsKICAgIF9feSA9IF9fejsKCiAgfQogIGVsc2UgewogICAgX194X3Bh cmVudCA9IF9feS0+X01fcGFyZW50OwogICAgaWYgKF9feCkgX194LT5fTV9wYXJlbnQgPSBfX3kt Pl9NX3BhcmVudDsKICAgIGlmIChfX3Jvb3QgPT0gX196KQogICAgICBfX3Jvb3QgPSBfX3g7CiAg ICBlbHNlCiAgICAgIGlmIChfX3otPl9NX3BhcmVudC0+X01fbGVmdCA9PSBfX3opCiAgICAgICAg X196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3g7CiAgICAgIGVsc2UKICAgICAgICBfX3otPl9N X3BhcmVudC0+X01fcmlnaHQgPSBfX3g7CiAgICBpZiAoX19sZWZ0bW9zdCA9PSBfX3opCiAgICAg IGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgX19sZWZ0bW9zdCA9IF9fei0+X01fcGFy ZW50OwoKICAgICAgZWxzZQogICAgICAgIF9fbGVmdG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6 Ol9TX21pbmltdW0oX194KTsKICAgIGlmIChfX3JpZ2h0bW9zdCA9PSBfX3opCiAgICAgIGlmIChf X3otPl9NX2xlZnQgPT0gMCkKICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoK ICAgICAgZWxzZQogICAgICAgIF9fcmlnaHRtb3N0ID0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19t YXhpbXVtKF9feCk7CiAgfQogIGlmIChfX3ktPl9NX2NvbG9yICE9IF9TX3JiX3RyZWVfcmVkKSB7 CiAgICB3aGlsZSAoX194ICE9IF9fcm9vdCAmJiAoX194ID09IDAgfHwgX194LT5fTV9jb2xvciA9 PSBfU19yYl90cmVlX2JsYWNrKSkKICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0 KSB7CiAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9yaWdo dDsKICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX3JlZCkgewogICAgICAg ICAgX193LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAgICAgICBfX3hfcGFyZW50 LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xl ZnQoX194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3Jp Z2h0OwogICAgICAgIH0KICAgICAgICBpZiAoKF9fdy0+X01fbGVmdCA9PSAwIHx8CiAgICAgICAg ICAgICBfX3ctPl9NX2xlZnQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAgICAg ICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQt Pl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spKSB7CiAgICAgICAgICBfX3ctPl9NX2NvbG9y ID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAgICAgICAg X194X3BhcmVudCA9IF9feF9wYXJlbnQtPl9NX3BhcmVudDsKICAgICAgICB9IGVsc2UgewogICAg ICAgICAgaWYgKF9fdy0+X01fcmlnaHQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fcmln aHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spIHsKICAgICAgICAgICAgaWYgKF9fdy0+ X01fbGVmdCkgX193LT5fTV9sZWZ0LT5fTV9jb2xvciA9IF9TX3JiX3RyZWVfYmxhY2s7CiAgICAg ICAgICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgICAgX1JiX3Ry ZWVfcm90YXRlX3JpZ2h0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVu dC0+X01fcmlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX194X3Bh cmVudC0+X01fY29sb3I7CiAgICAgICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9TX3JiX3Ry ZWVfYmxhY2s7CiAgICAgICAgICBpZiAoX193LT5fTV9yaWdodCkgX193LT5fTV9yaWdodC0+X01f Y29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQo X194X3BhcmVudCwgX19yb290KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBl bHNlIHsKICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fdyA9IF9feF9wYXJlbnQtPl9NX2xl ZnQ7CiAgICAgICAgaWYgKF9fdy0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9yZWQpIHsKICAgICAg ICAgIF9fdy0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX194X3BhcmVu dC0+X01fY29sb3IgPSBfU19yYl90cmVlX3JlZDsKICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9y aWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01f bGVmdDsKICAgICAgICB9CiAgICAgICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAg ICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfYmxhY2spICYmCiAg ICAgICAgICAgIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgX193LT5fTV9sZWZ0 LT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKSkgewogICAgICAgICAgX193LT5fTV9jb2xv ciA9IF9TX3JiX3RyZWVfcmVkOwogICAgICAgICAgX194ID0gX194X3BhcmVudDsKICAgICAgICAg IF9feF9wYXJlbnQgPSBfX3hfcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgIGlmIChfX3ctPl9NX2xlZnQgPT0gMCB8fAogICAgICAgICAgICAgIF9fdy0+X01fbGVm dC0+X01fY29sb3IgPT0gX1NfcmJfdHJlZV9ibGFjaykgewogICAgICAgICAgICBpZiAoX193LT5f TV9yaWdodCkgX193LT5fTV9yaWdodC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAg ICAgICAgICBfX3ctPl9NX2NvbG9yID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgICAgICAgIF9SYl90 cmVlX3JvdGF0ZV9sZWZ0KF9fdywgX19yb290KTsKICAgICAgICAgICAgX193ID0gX194X3BhcmVu dC0+X01fbGVmdDsKICAgICAgICAgIH0KICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFy ZW50LT5fTV9jb2xvcjsKICAgICAgICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX1NfcmJfdHJl ZV9ibGFjazsKICAgICAgICAgIGlmIChfX3ctPl9NX2xlZnQpIF9fdy0+X01fbGVmdC0+X01fY29s b3IgPSBfU19yYl90cmVlX2JsYWNrOwogICAgICAgICAgX1JiX3RyZWVfcm90YXRlX3JpZ2h0KF9f eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAg IGlmIChfX3gpIF9feC0+X01fY29sb3IgPSBfU19yYl90cmVlX2JsYWNrOwogIH0KICByZXR1cm4g X195Owp9CgoKCgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MsIGJvb2wgX1Nf aW5zdGFuY2VsZXNzPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlIHsKcHVibGljOgogIHR5cGVk ZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBlIGFs bG9jYXRvcl90eXBlOwogIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJl dHVybiBfTV9ub2RlX2FsbG9jYXRvcjsgfQoKICBfUmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFs bG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9NX25vZGVfYWxsb2NhdG9yKF9fYSksIF9NX2hlYWRl cigwKSB7fQoKcHJvdGVjdGVkOgogIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1JiX3RyZWVfbm9k ZTxfVHA+LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9NX25vZGVfYWxsb2Nh dG9yOwogIF9SYl90cmVlX25vZGU8X1RwPiogX01faGVhZGVyOwoKICBfUmJfdHJlZV9ub2RlPF9U cD4qIF9NX2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yLmFsbG9jYXRl KDEpOyB9CiAgdm9pZCBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgIHsg X01fbm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpjbGFzcyBfUmJfdHJlZV9hbGxvY19iYXNlPF9UcCwgX0Fs bG9jLCB0cnVlPiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1Rw LCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlw ZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gYWxsb2NhdG9yX3R5cGUoKTsgfQoKICBf UmJfdHJlZV9hbGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJikgOiBfTV9oZWFkZXIoMCkg e30KCnByb3RlY3RlZDoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9NX2hlYWRlcjsKCiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6X0Fs bG9jX3R5cGUKICAgICAgICAgIF9BbGxvY190eXBlOwoKICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N X2dldF9ub2RlKCkKICAgIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQogIHZv aWQgX01fcHV0X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApCiAgICB7IF9BbGxvY190eXBl OjpkZWFsbG9jYXRlKF9fcCwgMSk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4Kc3RydWN0IF9SYl90cmVlX2Jhc2UKICA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3RyYWl0 czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KewogIHR5cGVkZWYgX1JiX3RyZWVfYWxs b2NfYmFzZTxfVHAsIF9BbGxvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9j X3RyYWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgICAgICAgIF9CYXNlOwog IHR5cGVkZWYgdHlwZW5hbWUgX0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoK ICBfUmJfdHJlZV9iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICA6IF9CYXNlKF9f YSkgeyBfTV9oZWFkZXIgPSBfTV9nZXRfbm9kZSgpOyB9CiAgfl9SYl90cmVlX2Jhc2UoKSB7IF9N X3B1dF9ub2RlKF9NX2hlYWRlcik7IH0KCn07CgoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUsIGNsYXNzIF9Db21wYXJlLAogICAgICAgICAgY2xh c3MgX0FsbG9jID0gYWxsb2NhdG9yPF9WYWx1ZT4gPgpjbGFzcyBfUmJfdHJlZSA6IHByb3RlY3Rl ZCBfUmJfdHJlZV9iYXNlPF9WYWx1ZSwgX0FsbG9jPiB7CiAgdHlwZWRlZiBfUmJfdHJlZV9iYXNl PF9WYWx1ZSwgX0FsbG9jPiBfQmFzZTsKcHJvdGVjdGVkOgogIHR5cGVkZWYgX1JiX3RyZWVfbm9k ZV9iYXNlKiBfQmFzZV9wdHI7CiAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWx1ZT4gX1JiX3Ry ZWVfbm9kZTsKICB0eXBlZGVmIF9SYl90cmVlX0NvbG9yX3R5cGUgX0NvbG9yX3R5cGU7CnB1Ymxp YzoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVmFsdWUgdmFsdWVfdHlwZTsK ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2YWx1ZV90eXBl KiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYgdmFsdWVfdHlwZSYgcmVmZXJlbmNlOwogIHR5cGVk ZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogIHR5cGVkZWYgX1JiX3RyZWVf bm9kZSogX0xpbmtfdHlwZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBw dHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9y KCkgY29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHJvdGVjdGVkOgog IHVzaW5nIF9CYXNlOjpfTV9nZXRfbm9kZTsKICB1c2luZyBfQmFzZTo6X01fcHV0X25vZGU7CiAg dXNpbmcgX0Jhc2U6Ol9NX2hlYWRlcjsKCnByb3RlY3RlZDoKCiAgX0xpbmtfdHlwZSBfTV9jcmVh dGVfbm9kZShjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgewogICAgX0xpbmtfdHlwZSBfX3RtcCA9 IF9NX2dldF9ub2RlKCk7CiAgICB0cnkgewogICAgICBjb25zdHJ1Y3QoJl9fdG1wLT5fTV92YWx1 ZV9maWVsZCwgX194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3RtcCk7 IHRocm93OyB9OwogICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgX0xpbmtfdHlwZSBfTV9jbG9uZV9u b2RlKF9MaW5rX3R5cGUgX194KQogIHsKICAgIF9MaW5rX3R5cGUgX190bXAgPSBfTV9jcmVhdGVf bm9kZShfX3gtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgIF9fdG1wLT5fTV9jb2xvciA9IF9feC0+X01f Y29sb3I7CiAgICBfX3RtcC0+X01fbGVmdCA9IDA7CiAgICBfX3RtcC0+X01fcmlnaHQgPSAwOwog ICAgcmV0dXJuIF9fdG1wOwogIH0KCiAgdm9pZCBkZXN0cm95X25vZGUoX0xpbmtfdHlwZSBfX3Ap CiAgewogICAgZGVzdHJveSgmX19wLT5fTV92YWx1ZV9maWVsZCk7CiAgICBfTV9wdXRfbm9kZShf X3ApOwogIH0KCnByb3RlY3RlZDoKICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICBfQ29tcGFy ZSBfTV9rZXlfY29tcGFyZTsKCiAgX0xpbmtfdHlwZSYgX01fcm9vdCgpIGNvbnN0CiAgICB7IHJl dHVybiAoX0xpbmtfdHlwZSYpIF9NX2hlYWRlci0+X01fcGFyZW50OyB9CiAgX0xpbmtfdHlwZSYg X01fbGVmdG1vc3QoKSBjb25zdAogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXIt Pl9NX2xlZnQ7IH0KICBfTGlua190eXBlJiBfTV9yaWdodG1vc3QoKSBjb25zdAogICAgeyByZXR1 cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0OyB9CgogIHN0YXRpYyBfTGlua190 eXBlJiBfU19sZWZ0KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShf X3gtPl9NX2xlZnQpOyB9CiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX3JpZ2h0KF9MaW5rX3R5cGUg X194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX3JpZ2h0KTsgfQogIHN0YXRp YyBfTGlua190eXBlJiBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiAoX0xp bmtfdHlwZSYpKF9feC0+X01fcGFyZW50KTsgfQogIHN0YXRpYyByZWZlcmVuY2UgX1NfdmFsdWUo X0xpbmtfdHlwZSBfX3gpCiAgICB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3Rh dGljIGNvbnN0IF9LZXkmIF9TX2tleShfTGlua190eXBlIF9feCkKICAgIHsgcmV0dXJuIF9LZXlP ZlZhbHVlKCkoX1NfdmFsdWUoX194KSk7IH0KICBzdGF0aWMgX0NvbG9yX3R5cGUmIF9TX2NvbG9y KF9MaW5rX3R5cGUgX194KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX194LT5fTV9jb2xv cik7IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUmIF9TX2xlZnQoX0Jhc2VfcHRyIF9feCkKICAgIHsg cmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9sZWZ0KTsgfQogIHN0YXRpYyBfTGlua190eXBl JiBfU19yaWdodChfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gt Pl9NX3JpZ2h0KTsgfQogIHN0YXRpYyBfTGlua190eXBlJiBfU19wYXJlbnQoX0Jhc2VfcHRyIF9f eCkKICAgIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQpOyB9CiAgc3RhdGlj IHJlZmVyZW5jZSBfU192YWx1ZShfQmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gKChfTGlua190 eXBlKV9feCktPl9NX3ZhbHVlX2ZpZWxkOyB9CiAgc3RhdGljIGNvbnN0IF9LZXkmIF9TX2tleShf QmFzZV9wdHIgX194KQogICAgeyByZXR1cm4gX0tleU9mVmFsdWUoKShfU192YWx1ZShfTGlua190 eXBlKF9feCkpKTt9CiAgc3RhdGljIF9Db2xvcl90eXBlJiBfU19jb2xvcihfQmFzZV9wdHIgX194 KQogICAgeyByZXR1cm4gKF9Db2xvcl90eXBlJikoX0xpbmtfdHlwZShfX3gpLT5fTV9jb2xvcik7 IH0KCiAgc3RhdGljIF9MaW5rX3R5cGUgX1NfbWluaW11bShfTGlua190eXBlIF9feCkKICAgIHsg cmV0dXJuIChfTGlua190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsg fQoKICBzdGF0aWMgX0xpbmtfdHlwZSBfU19tYXhpbXVtKF9MaW5rX3R5cGUgX194KQogICAgeyBy ZXR1cm4gKF9MaW5rX3R5cGUpIF9SYl90cmVlX25vZGVfYmFzZTo6X1NfbWF4aW11bShfX3gpOyB9 CgpwdWJsaWM6CiAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVu Y2UsIHBvaW50ZXI+IGl0ZXJhdG9yOwogIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8dmFsdWVf dHlwZSwgY29uc3RfcmVmZXJlbmNlLCBjb25zdF9wb2ludGVyPgogICAgICAgICAgY29uc3RfaXRl cmF0b3I7CgogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxjb25zdF9pdGVyYXRvcj4gY29uc3Rf cmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8aXRlcmF0b3I+IHJl dmVyc2VfaXRlcmF0b3I7Cgpwcml2YXRlOgogIGl0ZXJhdG9yIF9NX2luc2VydChfQmFzZV9wdHIg X194LCBfQmFzZV9wdHIgX195LCBjb25zdCB2YWx1ZV90eXBlJiBfX3YpOwogIF9MaW5rX3R5cGUg X01fY29weShfTGlua190eXBlIF9feCwgX0xpbmtfdHlwZSBfX3ApOwogIHZvaWQgX01fZXJhc2Uo X0xpbmtfdHlwZSBfX3gpOwoKcHVibGljOgoKICBfUmJfdHJlZSgpCiAgICA6IF9CYXNlKGFsbG9j YXRvcl90eXBlKCkpLCBfTV9ub2RlX2NvdW50KDApLCBfTV9rZXlfY29tcGFyZSgpCiAgICB7IF9N X2VtcHR5X2luaXRpYWxpemUoKTsgfQoKICBfUmJfdHJlZShjb25zdCBfQ29tcGFyZSYgX19jb21w KQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5 X2NvbXBhcmUoX19jb21wKQogICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3Ry ZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAg IDogX0Jhc2UoX19hKSwgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2NvbXBhcmUoX19jb21wKQog ICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgX1JiX3RyZWUoY29uc3QgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194KQogICAgOiBfQmFz ZShfX3guZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgX01fbm9kZV9jb3VudCgwKSwgX01fa2V5X2Nv bXBhcmUoX194Ll9NX2tleV9jb21wYXJlKQogIHsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDAp CiAgICAgIF9NX2VtcHR5X2luaXRpYWxpemUoKTsKICAgIGVsc2UgewogICAgICBfU19jb2xvcihf TV9oZWFkZXIpID0gX1NfcmJfdHJlZV9yZWQ7CiAgICAgIF9NX3Jvb3QoKSA9IF9NX2NvcHkoX194 Ll9NX3Jvb3QoKSwgX01faGVhZGVyKTsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0o X01fcm9vdCgpKTsKICAgICAgX01fcmlnaHRtb3N0KCkgPSBfU19tYXhpbXVtKF9NX3Jvb3QoKSk7 CiAgICB9CiAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgfQogIH5fUmJf dHJlZSgpIHsgY2xlYXIoKTsgfQogIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9D b21wYXJlLF9BbGxvYz4mCiAgb3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCk7Cgpwcml2YXRlOgogIHZvaWQgX01fZW1w dHlfaW5pdGlhbGl6ZSgpIHsKICAgIF9TX2NvbG9yKF9NX2hlYWRlcikgPSBfU19yYl90cmVlX3Jl ZDsKCiAgICBfTV9yb290KCkgPSAwOwogICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAg IF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogIH0KCnB1YmxpYzoKCiAgX0NvbXBhcmUga2V5 X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlfY29tcGFyZTsgfQogIGl0ZXJhdG9yIGJlZ2lu KCkgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29u c3QgeyByZXR1cm4gX01fbGVmdG1vc3QoKTsgfQogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9N X2hlYWRlcjsgfQogIGNvbnN0X2l0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIF9NX2hlYWRl cjsgfQogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRv cihlbmQoKSk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsKICAg IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsKICB9CiAgcmV2ZXJzZV9pdGVy YXRvciByZW5kKCkgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihiZWdpbigpKTsgfQogIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IgcmVuZCgpIGNvbnN0IHsKICAgIHJldHVybiBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yKGJlZ2luKCkpOwogIH0KICBib29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01f bm9kZV9jb3VudCA9PSAwOyB9CiAgc2l6ZV90eXBlIHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9u b2RlX2NvdW50OyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gc2l6ZV90 eXBlKC0xKTsgfQoKICB2b2lkIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX190KSB7CiAgICBzdGQ6OnN3YXAoX01faGVhZGVyLCBfX3QuX01f aGVhZGVyKTsKICAgIHN0ZDo6c3dhcChfTV9ub2RlX2NvdW50LCBfX3QuX01fbm9kZV9jb3VudCk7 CiAgICBzdGQ6OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgfQoK cHVibGljOgoKICBwYWlyPGl0ZXJhdG9yLGJvb2w+IGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVf dHlwZSYgX194KTsKICBpdGVyYXRvciBpbnNlcnRfZXF1YWwoY29uc3QgdmFsdWVfdHlwZSYgX194 KTsKCiAgaXRlcmF0b3IgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCB2 YWx1ZV90eXBlJiBfX3gpOwogIGl0ZXJhdG9yIGluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0 aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgdm9pZCBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1 dEl0ZXJhdG9yIF9fbGFzdCk7CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZv aWQgaW5zZXJ0X2VxdWFsKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCk7CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7CiAgc2l6ZV90eXBlIGVy YXNlKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwg aXRlcmF0b3IgX19sYXN0KTsKICB2b2lkIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBj b25zdCBrZXlfdHlwZSogX19sYXN0KTsKICB2b2lkIGNsZWFyKCkgewogICAgaWYgKF9NX25vZGVf Y291bnQgIT0gMCkgewogICAgICBfTV9lcmFzZShfTV9yb290KCkpOwogICAgICBfTV9sZWZ0bW9z dCgpID0gX01faGVhZGVyOwogICAgICBfTV9yb290KCkgPSAwOwogICAgICBfTV9yaWdodG1vc3Qo KSA9IF9NX2hlYWRlcjsKICAgICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICB9CiAgfQoKcHVibGlj OgoKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9y IGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CiAgc2l6ZV90eXBlIGNvdW50KGNvbnN0 IGtleV90eXBlJiBfX3gpIGNvbnN0OwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpOwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf X3gpIGNvbnN0OwogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpOwog IGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0Owog IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp OwogIHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBlcXVhbF9yYW5nZShjb25z dCBrZXlfdHlwZSYgX194KSBjb25zdDsKCnB1YmxpYzoKCiAgYm9vbCBfX3JiX3ZlcmlmeSgpIGNv bnN0Owp9OwoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9m VmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bApvcGVyYXRvcj09KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxf S2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCnsKICByZXR1cm4gX194LnNpemUoKSA9 PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgIGVxdWFsKF9feC5iZWdpbigpLCBfX3guZW5kKCksIF9f eS5iZWdpbigpKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3Mg X0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbApvcGVyYXRvcjwoY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgY29uc3QgX1JiX3RyZWU8X0tleSxfVmFs dWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgcmV0dXJuIGxleGljb2dy YXBoaWNhbF9jb21wYXJlKF9feC5iZWdpbigpLCBfX3guZW5kKCksCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9feS5iZWdpbigpLCBfX3kuZW5kKCkpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yIT0oY29uc3QgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9D b21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPihjb25zdCBfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAg ICBjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+ JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CmlubGluZSBib29sCm9wZXJhdG9yPD0oY29uc3QgX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgIGNvbnN0 IF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkg ewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KaW5saW5lIGJvb2wKb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWx1 ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgY29uc3QgX1Ji X3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAg cmV0dXJuICEoX194IDwgX195KTsKfQoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFs dWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9B bGxvYz4KaW5saW5lIHZvaWQKc3dhcChfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPgogIDo6b3BlcmF0b3I9KGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbHVl LF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCkKewogIGlmICh0aGlzICE9ICZfX3gp IHsKCiAgICBjbGVhcigpOwogICAgX01fbm9kZV9jb3VudCA9IDA7CiAgICBfTV9rZXlfY29tcGFy ZSA9IF9feC5fTV9rZXlfY29tcGFyZTsKICAgIGlmIChfX3guX01fcm9vdCgpID09IDApIHsKICAg ICAgX01fcm9vdCgpID0gMDsKICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAg X01fcmlnaHRtb3N0KCkgPSBfTV9oZWFkZXI7CiAgICB9CiAgICBlbHNlIHsKICAgICAgX01fcm9v dCgpID0gX01fY29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICBfTV9sZWZ0bW9z dCgpID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21h eGltdW0oX01fcm9vdCgpKTsKICAgICAgX01fbm9kZV9jb3VudCA9IF9feC5fTV9ub2RlX2NvdW50 OwogICAgfQogIH0KICByZXR1cm4gKnRoaXM7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFz cyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNs YXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPgogIDo6X01faW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIg X195XywgY29uc3QgX1ZhbHVlJiBfX3YpCnsKICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBl KSBfX3hfOwogIF9MaW5rX3R5cGUgX195ID0gKF9MaW5rX3R5cGUpIF9feV87CiAgX0xpbmtfdHlw ZSBfX3o7CgogIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgIF9NX2tl eV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feSkpKSB7CiAgICBfX3ogPSBf TV9jcmVhdGVfbm9kZShfX3YpOwogICAgX1NfbGVmdChfX3kpID0gX196OwoKICAgIGlmIChfX3kg PT0gX01faGVhZGVyKSB7CiAgICAgIF9NX3Jvb3QoKSA9IF9fejsKICAgICAgX01fcmlnaHRtb3N0 KCkgPSBfX3o7CiAgICB9CiAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3QoKSkKICAgICAg X01fbGVmdG1vc3QoKSA9IF9fejsKICB9CiAgZWxzZSB7CiAgICBfX3ogPSBfTV9jcmVhdGVfbm9k ZShfX3YpOwogICAgX1NfcmlnaHQoX195KSA9IF9fejsKICAgIGlmIChfX3kgPT0gX01fcmlnaHRt b3N0KCkpCiAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX196OwogIH0KICBfU19wYXJlbnQoX196KSA9 IF9feTsKICBfU19sZWZ0KF9feikgPSAwOwogIF9TX3JpZ2h0KF9feikgPSAwOwogIF9SYl90cmVl X3JlYmFsYW5jZShfX3osIF9NX2hlYWRlci0+X01fcGFyZW50KTsKICArK19NX25vZGVfY291bnQ7 CiAgcmV0dXJuIGl0ZXJhdG9yKF9feik7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKGNvbnN0IF9WYWx1ZSYgX192KQp7CiAgX0xp bmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CiAg d2hpbGUgKF9feCAhPSAwKSB7CiAgICBfX3kgPSBfX3g7CiAgICBfX3ggPSBfTV9rZXlfY29tcGFy ZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQo X194KSA6IF9TX3JpZ2h0KF9feCk7CiAgfQogIHJldHVybiBfTV9pbnNlcnQoX194LCBfX3ksIF9f dik7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZW YWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnBhaXI8dHlwZW5h bWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRl cmF0b3IsCiAgICAgYm9vbD4KX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsdWUmIF9fdikKewogIF9MaW5r X3R5cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwogIGJv b2wgX19jb21wID0gdHJ1ZTsKICB3aGlsZSAoX194ICE9IDApIHsKICAgIF9feSA9IF9feDsKICAg IF9fY29tcCA9IF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9feCkp OwogICAgX194ID0gX19jb21wID8gX1NfbGVmdChfX3gpIDogX1NfcmlnaHQoX194KTsKICB9CiAg aXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICBpZiAoX19jb21wKQogICAgaWYgKF9faiA9 PSBiZWdpbigpKQogICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihfTV9pbnNlcnQoX194 LCBfX3ksIF9fdiksIHRydWUpOwogICAgZWxzZQogICAgICAtLV9fajsKICBpZiAoX01fa2V5X2Nv bXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwgX0tleU9mVmFsdWUoKShfX3YpKSkKICAgIHJldHVy biBwYWlyPGl0ZXJhdG9yLGJvb2w+KF9NX2luc2VydChfX3gsIF9feSwgX192KSwgdHJ1ZSk7CiAg cmV0dXJuIHBhaXI8aXRlcmF0b3IsYm9vbD4oX19qLCBmYWxzZSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS2V5 T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksIF9WYWws IF9LZXlPZlZhbHVlLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6aW5zZXJ0X3VuaXF1ZShpdGVyYXRv ciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2Rl ID09IF9NX2hlYWRlci0+X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgIF9N X2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9k ZSkpKQogICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlv bi5fTV9ub2RlLCBfX3YpOwoKICAgIGVsc2UKICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUoX192 KS5maXJzdDsKICB9IGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9PSBfTV9oZWFkZXIpIHsK ICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19rZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1 ZSgpKF9fdikpKQogICAgICByZXR1cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3Yp OwogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogIH0gZWxz ZSB7CiAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAtLV9fYmVmb3JlOwog ICAgaWYgKF9NX2tleV9jb21wYXJlKF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSwgX0tleU9mVmFs dWUoKShfX3YpKQogICAgICAgICYmIF9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVlKCkoX192KSwg X1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9y ZS5fTV9ub2RlKSA9PSAwKQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01f bm9kZSwgX192KTsKICAgICAgZWxzZQogICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlv bi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJl dHVybiBpbnNlcnRfdW5pcXVlKF9fdikuZmlyc3Q7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1ZhbCwgY2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFy ZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz4KICA6Omluc2VydF9lcXVhbChpdGVyYXRvciBfX3Bvc2l0aW9uLCBj b25zdCBfVmFsJiBfX3YpCnsKICBpZiAoX19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+ X01fbGVmdCkgewogICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAhX01fa2V5X2NvbXBhcmUo X1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9f dik7CgogICAgZWxzZQogICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgfSBlbHNlIGlm IChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyKSB7CiAgICBpZiAoIV9NX2tleV9jb21w YXJlKF9LZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgIHJl dHVybiBfTV9pbnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICBlbHNlCiAgICAgIHJl dHVybiBpbnNlcnRfZXF1YWwoX192KTsKICB9IGVsc2UgewogICAgaXRlcmF0b3IgX19iZWZvcmUg PSBfX3Bvc2l0aW9uOwogICAgLS1fX2JlZm9yZTsKICAgIGlmICghX01fa2V5X2NvbXBhcmUoX0tl eU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX19iZWZvcmUuX01fbm9kZSkpCiAgICAgICAgJiYgIV9N X2tleV9jb21wYXJlKF9TX2tleShfX3Bvc2l0aW9uLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9f dikpKSB7CiAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5fTV9ub2RlKSA9PSAwKQogICAgICAg IHJldHVybiBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgZWxzZQog ICAgICAgIHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9N X25vZGUsIF9fdik7CgogICAgfSBlbHNlCiAgICAgIHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsK ICB9Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFz cyBfQ21wLCBjbGFzcyBfQWxsb2M+CiAgdGVtcGxhdGU8Y2xhc3MgX0lJPgp2b2lkIF9SYl90cmVl PF9LZXksX1ZhbCxfS29WLF9DbXAsX0FsbG9jPgogIDo6aW5zZXJ0X2VxdWFsKF9JSSBfX2ZpcnN0 LCBfSUkgX19sYXN0KQp7CiAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQog ICAgaW5zZXJ0X2VxdWFsKCpfX2ZpcnN0KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9WYWwsIGNsYXNzIF9Lb1YsIGNsYXNzIF9DbXAsIGNsYXNzIF9BbGxvYz4KICB0ZW1wbGF0ZTxj bGFzcyBfSUk+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+CiAgOjpp bnNlcnRfdW5pcXVlKF9JSSBfX2ZpcnN0LCBfSUkgX19sYXN0KSB7CiAgZm9yICggOyBfX2ZpcnN0 ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgaW5zZXJ0X3VuaXF1ZSgqX19maXJzdCk7Cn0KCnRl bXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAg ICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0 b3IgX19wb3NpdGlvbikKewogIF9MaW5rX3R5cGUgX195ID0KICAgIChfTGlua190eXBlKSBfUmJf dHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9zaXRpb24uX01fbm9kZSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2hlYWRlci0+X01fcGFyZW50LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5f TV9sZWZ0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f aGVhZGVyLT5fTV9yaWdodCk7CiAgZGVzdHJveV9ub2RlKF9feSk7CiAgLS1fTV9ub2RlX2NvdW50 Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQpf UmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjplcmFzZShj b25zdCBfS2V5JiBfX3gpCnsKICBwYWlyPGl0ZXJhdG9yLGl0ZXJhdG9yPiBfX3AgPSBlcXVhbF9y YW5nZShfX3gpOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19w LnNlY29uZCwgX19uKTsKICBlcmFzZShfX3AuZmlyc3QsIF9fcC5zZWNvbmQpOwogIHJldHVybiBf X247Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVmFsLCBjbGFzcyBfS29WLCBjbGFz cyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBf S29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6X0xpbmtfdHlwZQpfUmJfdHJlZTxfS2V5LF9WYWwsX0tv VixfQ29tcGFyZSxfQWxsb2M+CiAgOjpfTV9jb3B5KF9MaW5rX3R5cGUgX194LCBfTGlua190eXBl IF9fcCkKewoKICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9kZShfX3gpOwogIF9fdG9w LT5fTV9wYXJlbnQgPSBfX3A7CgogIHRyeSB7CiAgICBpZiAoX194LT5fTV9yaWdodCkKICAgICAg X190b3AtPl9NX3JpZ2h0ID0gX01fY29weShfU19yaWdodChfX3gpLCBfX3RvcCk7CiAgICBfX3Ag PSBfX3RvcDsKICAgIF9feCA9IF9TX2xlZnQoX194KTsKCiAgICB3aGlsZSAoX194ICE9IDApIHsK ICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9ub2RlKF9feCk7CiAgICAgIF9fcC0+X01f bGVmdCA9IF9feTsKICAgICAgX195LT5fTV9wYXJlbnQgPSBfX3A7CiAgICAgIGlmIChfX3gtPl9N X3JpZ2h0KQogICAgICAgIF9feS0+X01fcmlnaHQgPSBfTV9jb3B5KF9TX3JpZ2h0KF9feCksIF9f eSk7CiAgICAgIF9fcCA9IF9feTsKICAgICAgX194ID0gX1NfbGVmdChfX3gpOwogICAgfQogIH0K ICBjYXRjaCguLi4pIHsgX01fZXJhc2UoX190b3ApOyB0aHJvdzsgfTsKCiAgcmV0dXJuIF9fdG9w Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6X01fZXJhc2UoX0xp bmtfdHlwZSBfX3gpCnsKCiAgd2hpbGUgKF9feCAhPSAwKSB7CiAgICBfTV9lcmFzZShfU19yaWdo dChfX3gpKTsKICAgIF9MaW5rX3R5cGUgX195ID0gX1NfbGVmdChfX3gpOwogICAgZGVzdHJveV9u b2RlKF9feCk7CiAgICBfX3ggPSBfX3k7CiAgfQp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBj bGFzcyBfQWxsb2M+CnZvaWQgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPgogIDo6ZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQp7 CiAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICBjbGVhcigp OwogIGVsc2UKICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJhc2UoX19maXJzdCsrKTsK fQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwgY2xhc3MgX0tleU9mVmFsdWUs CiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgp2b2lkIF9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmVyYXNlKGNvbnN0IF9L ZXkqIF9fZmlyc3QsIGNvbnN0IF9LZXkqIF9fbGFzdCkKewogIHdoaWxlIChfX2ZpcnN0ICE9IF9f bGFzdCkgZXJhc2UoKl9fZmlyc3QrKyk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBf VmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUsIGNsYXNz IF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPjo6aXRlcmF0b3IKX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9feSA9 IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgd2hpbGUgKF9feCAh PSAwKQogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAgX195 ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3JpZ2h0 KF9feCk7CgogIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgcmV0dXJuIChfX2ogPT0g ZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19qLl9NX25vZGUpKSkgPwogICAg IGVuZCgpIDogX19qOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFz cyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CnR5 cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46 OmNvbnN0X2l0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46OmZpbmQoY29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kg PSBfTV9oZWFkZXI7CiAgX0xpbmtfdHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3gg IT0gMCkgewogICAgaWYgKCFfTV9rZXlfY29tcGFyZShfU19rZXkoX194KSwgX19rKSkKICAgICAg X195ID0gX194LCBfX3ggPSBfU19sZWZ0KF9feCk7CiAgICBlbHNlCiAgICAgIF9feCA9IF9TX3Jp Z2h0KF9feCk7CiAgfQogIGNvbnN0X2l0ZXJhdG9yIF9faiA9IGNvbnN0X2l0ZXJhdG9yKF9feSk7 CiAgcmV0dXJuIChfX2ogPT0gZW5kKCkgfHwgX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX19q Ll9NX25vZGUpKSkgPwogICAgZW5kKCkgOiBfX2o7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBj bGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUs IGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tleU9mVmFsdWUs X0NvbXBhcmUsX0FsbG9jPjo6c2l6ZV90eXBlCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4KICA6OmNvdW50KGNvbnN0IF9LZXkmIF9faykgY29uc3QKewog IHBhaXI8Y29uc3RfaXRlcmF0b3IsIGNvbnN0X2l0ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShf X2spOwogIHNpemVfdHlwZSBfX24gPSAwOwogIGRpc3RhbmNlKF9fcC5maXJzdCwgX19wLnNlY29u ZCwgX19uKTsKICByZXR1cm4gX19uOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CnR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJl LF9BbGxvYz46Oml0ZXJhdG9yCl9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21w YXJlLF9BbGxvYz4KICA6Omxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKewogIF9MaW5rX3R5 cGUgX195ID0gX01faGVhZGVyOwogIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICB3aGls ZSAoX194ICE9IDApCiAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQog ICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgIGVsc2UKICAgICAgX194ID0g X1NfcmlnaHQoX194KTsKCiAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6bG93ZXJfYm91bmQoY29uc3Qg X0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf dHlwZSBfX3ggPSBfTV9yb290KCk7CgogIHdoaWxlIChfX3ggIT0gMCkKICAgIGlmICghX01fa2V5 X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVm dChfX3gpOwogICAgZWxzZQogICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICByZXR1cm4gY29u c3RfaXRlcmF0b3IoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9WYWx1ZSwg Y2xhc3MgX0tleU9mVmFsdWUsCiAgICAgICAgICBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j Pgp0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjppdGVyYXRvcgpfUmJfdHJlZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+CiAgOjp1cHBlcl9ib3VuZChjb25zdCBfS2V5JiBfX2spCnsKICBfTGlua190eXBlIF9f eSA9IF9NX2hlYWRlcjsKICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgIHdoaWxlIChf X3ggIT0gMCkKICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX19rLCBfU19rZXkoX194KSkpCiAgICAg ICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICBlbHNlCiAgICAgICBfX3ggPSBf U19yaWdodChfX3gpOwoKICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVmFsdWUsIGNsYXNzIF9LZXlPZlZhbHVlLAogICAgICAgICAgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsdWUsX0tl eU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IKX1JiX3RyZWU8X0tleSxf VmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPgogIDo6dXBwZXJfYm91bmQoY29uc3Qg X0tleSYgX19rKSBjb25zdAp7CiAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgX0xpbmtf dHlwZSBfX3ggPSBfTV9yb290KCk7CgogICB3aGlsZSAoX194ICE9IDApCiAgICAgaWYgKF9NX2tl eV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgX195ID0gX194LCBfX3ggPSBfU19s ZWZ0KF9feCk7CiAgICAgZWxzZQogICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKCiAgIHJldHVy biBjb25zdF9pdGVyYXRvcihfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1Zh bHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmlubGluZQpwYWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbHVlLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yLAogICAgIHR5cGVuYW1lIF9SYl90cmVlPF9L ZXksX1ZhbHVlLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yPgpfUmJfdHJl ZTxfS2V5LF9WYWx1ZSxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+CiAgOjplcXVhbF9yYW5n ZShjb25zdCBfS2V5JiBfX2spCnsKICByZXR1cm4gcGFpcjxpdGVyYXRvciwgaXRlcmF0b3I+KGxv d2VyX2JvdW5kKF9fayksIHVwcGVyX2JvdW5kKF9faykpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS29WLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j PgppbmxpbmUKcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsdWUsIF9Lb1YsIF9Db21w YXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvciwKICAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LCBfVmFsdWUsIF9Lb1YsIF9Db21wYXJlLCBfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcj4KX1JiX3Ry ZWU8X0tleSwgX1ZhbHVlLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPgogIDo6ZXF1YWxfcmFuZ2Uo Y29uc3QgX0tleSYgX19rKSBjb25zdAp7CiAgcmV0dXJuIHBhaXI8Y29uc3RfaXRlcmF0b3IsY29u c3RfaXRlcmF0b3I+KGxvd2VyX2JvdW5kKF9fayksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVwcGVyX2JvdW5kKF9faykpOwp9CgppbmxpbmUgaW50Cl9fYmxh Y2tfY291bnQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX25vZGUsIF9SYl90cmVlX25vZGVfYmFzZSog X19yb290KQp7CiAgaWYgKF9fbm9kZSA9PSAwKQogICAgcmV0dXJuIDA7CiAgaW50IF9fc3VtID0g MDsKICBkbyB7CiAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfU19yYl90cmVlX2JsYWNrKQog ICAgICArK19fc3VtOwogICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgIGJyZWFrOwogICAg X19ub2RlID0gX19ub2RlLT5fTV9wYXJlbnQ7CiAgfSB3aGlsZSAoMSk7CiAgcmV0dXJuIF9fc3Vt Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmJvb2wgX1JiX3RyZWU8 X0tleSxfVmFsdWUsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X19yYl92ZXJpZnkoKSBj b25zdAp7CiAgaWYgKF9NX25vZGVfY291bnQgPT0gMCB8fCBiZWdpbigpID09IGVuZCgpKQogICAg cmV0dXJuIF9NX25vZGVfY291bnQgPT0gMCAmJiBiZWdpbigpID09IGVuZCgpICYmCiAgICAgIF9N X2hlYWRlci0+X01fbGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBf TV9oZWFkZXI7CgogIGludCBfX2xlbiA9IF9fYmxhY2tfY291bnQoX01fbGVmdG1vc3QoKSwgX01f cm9vdCgpKTsKICBmb3IgKGNvbnN0X2l0ZXJhdG9yIF9faXQgPSBiZWdpbigpOyBfX2l0ICE9IGVu ZCgpOyArK19faXQpIHsKICAgIF9MaW5rX3R5cGUgX194ID0gKF9MaW5rX3R5cGUpIF9faXQuX01f bm9kZTsKICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgX0xpbmtfdHlwZSBf X1IgPSBfU19yaWdodChfX3gpOwoKICAgIGlmIChfX3gtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVf cmVkKQogICAgICBpZiAoKF9fTCAmJiBfX0wtPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSB8 fAogICAgICAgICAgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9TX3JiX3RyZWVfcmVkKSkKICAg ICAgICByZXR1cm4gZmFsc2U7CgogICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShfU19rZXko X194KSwgX1Nfa2V5KF9fTCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX19SICYmIF9N X2tleV9jb21wYXJlKF9TX2tleShfX1IpLCBfU19rZXkoX194KSkpCiAgICAgIHJldHVybiBmYWxz ZTsKCiAgICBpZiAoIV9fTCAmJiAhX19SICYmIF9fYmxhY2tfY291bnQoX194LCBfTV9yb290KCkp ICE9IF9fbGVuKQogICAgICByZXR1cm4gZmFsc2U7CiAgfQoKICBpZiAoX01fbGVmdG1vc3QoKSAh PSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX01fcm9vdCgpKSkKICAgIHJldHVybiBm YWxzZTsKICBpZiAoX01fcmlnaHRtb3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhp bXVtKF9NX3Jvb3QoKSkpCiAgICByZXR1cm4gZmFsc2U7CgogIHJldHVybiB0cnVlOwp9CgoKCgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1ZhbHVlLCBjbGFzcyBfS2V5T2ZWYWx1ZSwgY2xh c3MgX0NvbXBhcmUsCiAgICAgICAgICBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbHVlPiA+ CnN0cnVjdCByYl90cmVlIDogcHVibGljIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwgX0tleU9mVmFs dWUsIF9Db21wYXJlLCBfQWxsb2M+CnsKICB0eXBlZGVmIF9SYl90cmVlPF9LZXksIF9WYWx1ZSwg X0tleU9mVmFsdWUsIF9Db21wYXJlLCBfQWxsb2M+IF9CYXNlOwogIHR5cGVkZWYgdHlwZW5hbWUg X0Jhc2U6OmFsbG9jYXRvcl90eXBlIGFsbG9jYXRvcl90eXBlOwoKICByYl90cmVlKGNvbnN0IF9D b21wYXJlJiBfX2NvbXAgPSBfQ29tcGFyZSgpLAogICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5 cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9CYXNlKF9fY29tcCwgX19hKSB7fQoK ICB+cmJfdHJlZSgpIHt9Cn07Cgp9CiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGRf bWFwLmgiIDIgMwoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX21hcC5oIiAxIDMK IyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF9tYXAuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNrLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUv ZysrLXYzL2JpdHMvc3RsX21hcC5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKdGVtcGxhdGUgPGNs YXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAg ICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xh c3MgbWFwCnsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCnB1YmxpYzoKCiAgdHlwZWRlZiBfS2V5 IGtleV90eXBlOwogIHR5cGVkZWYgX1RwIGRhdGFfdHlwZTsKICB0eXBlZGVmIF9UcCBtYXBwZWRf dHlwZTsKICB0eXBlZGVmIHBhaXI8Y29uc3QgX0tleSwgX1RwPiB2YWx1ZV90eXBlOwogIHR5cGVk ZWYgX0NvbXBhcmUga2V5X2NvbXBhcmU7CgogIGNsYXNzIHZhbHVlX2NvbXBhcmUKICAgIDogcHVi bGljIGJpbmFyeV9mdW5jdGlvbjx2YWx1ZV90eXBlLCB2YWx1ZV90eXBlLCBib29sPiB7CiAgZnJp ZW5kIGNsYXNzIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+OwogIHByb3RlY3RlZCA6CiAg ICBfQ29tcGFyZSBjb21wOwogICAgdmFsdWVfY29tcGFyZShfQ29tcGFyZSBfX2MpIDogY29tcChf X2MpIHt9CiAgcHVibGljOgogICAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IHZhbHVlX3R5cGUmIF9f eCwgY29uc3QgdmFsdWVfdHlwZSYgX195KSBjb25zdCB7CiAgICAgIHJldHVybiBjb21wKF9feC5m aXJzdCwgX195LmZpcnN0KTsKICAgIH0KICB9OwoKcHJpdmF0ZToKICB0eXBlZGVmIF9SYl90cmVl PGtleV90eXBlLCB2YWx1ZV90eXBlLAogICAgICAgICAgICAgICAgICAgX1NlbGVjdDFzdDx2YWx1 ZV90eXBlPiwga2V5X2NvbXBhcmUsIF9BbGxvYz4gX1JlcF90eXBlOwogIF9SZXBfdHlwZSBfTV90 OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnBvaW50ZXIgcG9pbnRlcjsK ICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcG9pbnRlciBjb25zdF9wb2ludGVy OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZWZlcmVuY2UgcmVmZXJlbmNlOwogIHR5 cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpjb25zdF9yZWZlcmVuY2UgY29uc3RfcmVmZXJlbmNl OwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjppdGVyYXRvciBpdGVyYXRvcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfaXRlcmF0b3IgY29uc3RfaXRlcmF0b3I7CiAg dHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OnJldmVyc2VfaXRlcmF0b3IgcmV2ZXJzZV9pdGVy YXRvcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmV2ZXJzZV9pdGVyYXRv ciBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpz aXplX3R5cGUgc2l6ZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpkaWZmZXJl bmNlX3R5cGUgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjph bGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCgoKICBtYXAoKSA6IF9NX3QoX0NvbXBhcmUo KSwgYWxsb2NhdG9yX3R5cGUoKSkge30KICBleHBsaWNpdCBtYXAoY29uc3QgX0NvbXBhcmUmIF9f Y29tcCwKICAgICAgICAgICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRv cl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21wLCBfX2EpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KQogICAgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpCiAgICB7 IF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgogIHRlbXBsYXRlIDxjbGFz cyBfSW5wdXRJdGVyYXRvcj4KICBtYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRl cmF0b3IgX19sYXN0LCBjb25zdCBfQ29tcGFyZSYgX19jb21wLAogICAgICBjb25zdCBhbGxvY2F0 b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01fdChfX2NvbXAsIF9fYSkg eyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsgfQogIG1hcChjb25zdCBtYXA8 X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSA6IF9NX3QoX194Ll9NX3QpIHt9CgogIG1h cDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JgogIG9wZXJhdG9yPShjb25zdCBtYXA8X0tleSwg X1RwLCBfQ29tcGFyZSwgX0FsbG9jPiYgX194KQogIHsKICAgIF9NX3QgPSBfX3guX01fdDsKICAg IHJldHVybiAqdGhpczsKICB9CgoKCiAga2V5X2NvbXBhcmUga2V5X2NvbXAoKSBjb25zdCB7IHJl dHVybiBfTV90LmtleV9jb21wKCk7IH0KICB2YWx1ZV9jb21wYXJlIHZhbHVlX2NvbXAoKSBjb25z dCB7IHJldHVybiB2YWx1ZV9jb21wYXJlKF9NX3Qua2V5X2NvbXAoKSk7IH0KICBhbGxvY2F0b3Jf dHlwZSBnZXRfYWxsb2NhdG9yKCkgY29uc3QgeyByZXR1cm4gX01fdC5nZXRfYWxsb2NhdG9yKCk7 IH0KCiAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBfTV90LmJlZ2luKCk7IH0KICBjb25zdF9p dGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIF9NX3QuYmVnaW4oKTsgfQogIGl0ZXJhdG9y IGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5kKCk7IH0KICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25z dCB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSB7IHJl dHVybiBfTV90LnJiZWdpbigpOyB9CiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRvciByYmVnaW4oKSBj b25zdCB7IHJldHVybiBfTV90LnJiZWdpbigpOyB9CiAgcmV2ZXJzZV9pdGVyYXRvciByZW5kKCkg eyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSBj b25zdCB7IHJldHVybiBfTV90LnJlbmQoKTsgfQogIGJvb2wgZW1wdHkoKSBjb25zdCB7IHJldHVy biBfTV90LmVtcHR5KCk7IH0KICBzaXplX3R5cGUgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIF9NX3Qu c2l6ZSgpOyB9CiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fdC5tYXhf c2l6ZSgpOyB9CiAgX1RwJiBvcGVyYXRvcltdKGNvbnN0IGtleV90eXBlJiBfX2spIHsKICAgIGl0 ZXJhdG9yIF9faSA9IGxvd2VyX2JvdW5kKF9fayk7CgogICAgaWYgKF9faSA9PSBlbmQoKSB8fCBr ZXlfY29tcCgpKF9faywgKCpfX2kpLmZpcnN0KSkKICAgICAgX19pID0gaW5zZXJ0KF9faSwgdmFs dWVfdHlwZShfX2ssIF9UcCgpKSk7CiAgICByZXR1cm4gKCpfX2kpLnNlY29uZDsKICB9CiAgdm9p ZCBzd2FwKG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9f eC5fTV90KTsgfQoKCgogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5 cGUmIF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiAgaXRlcmF0 b3IgaW5zZXJ0KGl0ZXJhdG9yIHBvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpCiAgICB7 IHJldHVybiBfTV90Lmluc2VydF91bmlxdWUocG9zaXRpb24sIF9feCk7IH0KICB0ZW1wbGF0ZSA8 Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgdm9pZCBpbnNlcnQoX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0KSB7CiAgICBfTV90Lmluc2VydF91bmlxdWUoX19maXJz dCwgX19sYXN0KTsKICB9CgogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikgeyBfTV90 LmVyYXNlKF9fcG9zaXRpb24pOyB9CiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBf X3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQogIHZvaWQgZXJhc2UoaXRlcmF0b3IgX19m aXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVyYXNlKF9fZmlyc3QsIF9fbGFzdCk7 IH0KICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFyKCk7IH0KCgoKICBpdGVyYXRvciBmaW5kKGNv bnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgY29uc3RfaXRl cmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQo X194KTsgfQogIHNpemVfdHlwZSBjb3VudChjb25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAg ICByZXR1cm4gX01fdC5maW5kKF9feCkgPT0gX01fdC5lbmQoKSA/IDAgOiAxOwogIH0KICBpdGVy YXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93ZXJf Ym91bmQoX194KTsgfQogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQogIGl0 ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC51cHBl cl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5 cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsKICB9Cgog IHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gp IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQogIHBhaXI8Y29uc3RfaXRl cmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29s IG9wZXJhdG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRl IDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJv b2wgb3BlcmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp bmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUg Ym9vbCBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xh c3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRv cjw9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAs IGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29u c3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJu ICEoX194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3Mg X0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjUgIi91c3IvaW5jbHVk ZS9nKystdjMvYml0cy9zdGRfbWFwLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0 cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxf bXVsdGltYXAuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0X2NoZWNr LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX211bHRpbWFwLmgiIDIg MwoKbmFtZXNwYWNlIHN0ZAp7CgoKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsCiAg ICAgICAgICBjbGFzcyBfQ29tcGFyZSA9IGxlc3M8X0tleT4sCiAgICAgICAgICBjbGFzcyBfQWxs b2MgPSBhbGxvY2F0b3I8cGFpcjxjb25zdCBfS2V5LCBfVHA+ID4gPgpjbGFzcyBtdWx0aW1hcDsK CnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBf QWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFw PF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSk7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwg Y2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVy YXRvcjwoY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PiYgX195KTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJl LCBjbGFzcyBfQWxsb2M+CmNsYXNzIG11bHRpbWFwCnsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CnB1YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90 eXBlOwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5 LCBfVHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xh c3MgdmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFs dWVfdHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFy ZSxfQWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21w YXJlKF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJh dG9yKCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0 IHsKICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpw cml2YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAg ICAgICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9S ZXBfdHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1Jl cF90eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv bnN0X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 cmVmZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3Rf cmVmZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6 aXRlcmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0 ZXJhdG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZl cnNlX2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5 cGU6OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoK CiAgbXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAg ZXhwbGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAg ICAgICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDog X01fdChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4K ICBtdWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3Qp CiAgICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNl cnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3Ig X19sYXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29u c3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19j b21wLCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQogIG11bHRp bWFwKGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90 KF9feC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBv cGVyYXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7 CiAgICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21w YXJlIGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVf Y29tcGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90Lmtl eV9jb21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0 dXJuIF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgogIGl0ZXJhdG9yIGJlZ2luKCkgeyByZXR1cm4g X01fdC5iZWdpbigpOyB9CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBf TV90LmJlZ2luKCk7IH0KICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90LmVuZCgpOyB9CiAg Y29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5lbmQoKTsgfQogIHJldmVy c2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQogIGNvbnN0X3Jl dmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQog IHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CiAgY29uc3Rf cmV2ZXJzZV9pdGVyYXRvciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KICBi b29sIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CiAgc2l6ZV90eXBlIHNp emUoKSBjb25zdCB7IHJldHVybiBfTV90LnNpemUoKTsgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQogIHZvaWQgc3dhcChtdWx0aW1hcDxf S2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gpIHsgX01fdC5zd2FwKF9feC5fTV90KTsgfQoK CgogIGl0ZXJhdG9yIGluc2VydChjb25zdCB2YWx1ZV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu aW5zZXJ0X2VxdWFsKF9feCk7IH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlv biwgY29uc3QgdmFsdWVfdHlwZSYgX194KSB7CiAgICByZXR1cm4gX01fdC5pbnNlcnRfZXF1YWwo X19wb3NpdGlvbiwgX194KTsKICB9CiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgog IHZvaWQgaW5zZXJ0KF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFz dCkgewogICAgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsKICB9CiAgdm9pZCBl cmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2UoX19wb3NpdGlvbik7IH0KICBz aXplX3R5cGUgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1cm4gX01fdC5lcmFzZShf X3gpOyB9CiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpCiAg ICB7IF9NX3QuZXJhc2UoX19maXJzdCwgX19sYXN0KTsgfQogIHZvaWQgY2xlYXIoKSB7IF9NX3Qu Y2xlYXIoKTsgfQoKCgogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgeyByZXR1 cm4gX01fdC5maW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBl JiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuZmluZChfX3gpOyB9CiAgc2l6ZV90eXBlIGNvdW50 KGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9NX3QuY291bnQoX194KTsgfQog IGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4gX01fdC5s b3dlcl9ib3VuZChfX3gpOyB9CiAgY29uc3RfaXRlcmF0b3IgbG93ZXJfYm91bmQoY29uc3Qga2V5 X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QubG93ZXJfYm91bmQoX194KTsKICB9 CiAgaXRlcmF0b3IgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9feCkge3JldHVybiBfTV90 LnVwcGVyX2JvdW5kKF9feCk7IH0KICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBr ZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gpOwog IH0KICAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUm IF9feCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiAgcGFpcjxjb25z dF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CgogIHRlbXBs YXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5k IGJvb2wgb3BlcmF0b3I9PSAoY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0sxLCBfVDEsIF9DMSwgX0Ex PiYpOwogIHRlbXBsYXRlIDxjbGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBf QTE+CiAgZnJpZW5kIGJvb2wgb3BlcmF0b3I8IChjb25zdCBtdWx0aW1hcDxfSzEsIF9UMSwgX0Mx LCBfQTE+JiwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1Qx LCBfQzEsIF9BMT4mKTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNz IF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPT0oY29uc3QgbXVs dGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiBfX3guX01fdCA9PSBfX3kuX01fdDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNz IF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJvb2wgb3BlcmF0b3I8 KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBv cGVyYXRvciE9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwK ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIGJv b2wgb3BlcmF0b3I+KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9f eCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPD0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194 LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFz cyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBi b29sIG9wZXJhdG9yPj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21w YXJlLF9BbGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxj bGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGlu ZSB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAg ICAgICAgICAgICAgIG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewog IF9feC5zd2FwKF9feSk7Cn0KCn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9t YXAuaCIgMiAzCiMgMzIgIi91c3IvaW5jbHVkZS9nKystdjMvbWFwIiAyIDMKIyAyNyAiSERVLmgi IDIKCgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYzL3ZlY3RvciIgMSAzCiMgMzQgIkhEVS5o IiAyCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9saXN0IiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRl L2crKy12My9saXN0IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0Lmgi IDEgMwojIDYwICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMwoKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDEgMwojIDYyICIvdXNyL2lu Y2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9hbGxvYy5oIiAxIDMKIyA2MyAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0 ZF9saXN0LmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9zdGxfY29uc3RydWN0 LmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY1 ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RkX2xpc3QuaCIgMiAzCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9iaXRzL3N0bF9saXN0LmgiIDEgMwojIDYzICIvdXNyL2luY2x1ZGUvZysrLXYz L2JpdHMvc3RsX2xpc3QuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvYml0cy9jb25jZXB0 X2NoZWNrLmgiIDEgMwojIDY0ICIvdXNyL2luY2x1ZGUvZysrLXYzL2JpdHMvc3RsX2xpc3QuaCIg MiAzCgpuYW1lc3BhY2Ugc3RkCnsKCnN0cnVjdCBfTGlzdF9ub2RlX2Jhc2UgewogIF9MaXN0X25v ZGVfYmFzZSogX01fbmV4dDsKICBfTGlzdF9ub2RlX2Jhc2UqIF9NX3ByZXY7Cn07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgX0xpc3Rfbm9kZSA6IHB1YmxpYyBfTGlzdF9ub2RlX2Jhc2Ug ewogIF9UcCBfTV9kYXRhOwp9OwoKc3RydWN0IF9MaXN0X2l0ZXJhdG9yX2Jhc2UgewogIHR5cGVk ZWYgc2l6ZV90IHNpemVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7 CiAgdHlwZWRlZiBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZyBpdGVyYXRvcl9jYXRlZ29yeTsK CiAgX0xpc3Rfbm9kZV9iYXNlKiBfTV9ub2RlOwoKICBfTGlzdF9pdGVyYXRvcl9iYXNlKF9MaXN0 X25vZGVfYmFzZSogX194KSA6IF9NX25vZGUoX194KSB7fQogIF9MaXN0X2l0ZXJhdG9yX2Jhc2Uo KSB7fQoKICB2b2lkIF9NX2luY3IoKSB7IF9NX25vZGUgPSBfTV9ub2RlLT5fTV9uZXh0OyB9CiAg dm9pZCBfTV9kZWNyKCkgeyBfTV9ub2RlID0gX01fbm9kZS0+X01fcHJldjsgfQoKICBib29sIG9w ZXJhdG9yPT0oY29uc3QgX0xpc3RfaXRlcmF0b3JfYmFzZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gX01fbm9kZSA9PSBfX3guX01fbm9kZTsKICB9CiAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9M aXN0X2l0ZXJhdG9yX2Jhc2UmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX25vZGUgIT0gX194 Ll9NX25vZGU7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgX1RwLCBjbGFzcyBfUmVmLCBjbGFzcyBf UHRyPgpzdHJ1Y3QgX0xpc3RfaXRlcmF0b3IgOiBwdWJsaWMgX0xpc3RfaXRlcmF0b3JfYmFzZSB7 CiAgdHlwZWRlZiBfTGlzdF9pdGVyYXRvcjxfVHAsX1RwJixfVHAqPiBpdGVyYXRvcjsKICB0eXBl ZGVmIF9MaXN0X2l0ZXJhdG9yPF9UcCxjb25zdCBfVHAmLGNvbnN0IF9UcCo+IGNvbnN0X2l0ZXJh dG9yOwogIHR5cGVkZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9SZWYsX1B0cj4gX1NlbGY7CgogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfUHRyIHBvaW50ZXI7CiAgdHlwZWRlZiBf UmVmIHJlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25vZGU8X1RwPiBfTm9kZTsKCiAgX0xpc3Rf aXRlcmF0b3IoX05vZGUqIF9feCkgOiBfTGlzdF9pdGVyYXRvcl9iYXNlKF9feCkge30KICBfTGlz dF9pdGVyYXRvcigpIHt9CiAgX0xpc3RfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9feCkgOiBf TGlzdF9pdGVyYXRvcl9iYXNlKF9feC5fTV9ub2RlKSB7fQoKICByZWZlcmVuY2Ugb3BlcmF0b3Iq KCkgY29uc3QgeyByZXR1cm4gKChfTm9kZSopIF9NX25vZGUpLT5fTV9kYXRhOyB9CiAgcG9pbnRl ciBvcGVyYXRvci0+KCkgY29uc3QgeyByZXR1cm4gJihvcGVyYXRvciooKSk7IH0KCiAgX1NlbGYm IG9wZXJhdG9yKysoKSB7CiAgICB0aGlzLT5fTV9pbmNyKCk7CiAgICByZXR1cm4gKnRoaXM7CiAg fQogIF9TZWxmIG9wZXJhdG9yKysoaW50KSB7CiAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAg dGhpcy0+X01faW5jcigpOwogICAgcmV0dXJuIF9fdG1wOwogIH0KICBfU2VsZiYgb3BlcmF0b3It LSgpIHsKICAgIHRoaXMtPl9NX2RlY3IoKTsKICAgIHJldHVybiAqdGhpczsKICB9CiAgX1NlbGYg b3BlcmF0b3ItLShpbnQpIHsKICAgIF9TZWxmIF9fdG1wID0gKnRoaXM7CiAgICB0aGlzLT5fTV9k ZWNyKCk7CiAgICByZXR1cm4gX190bXA7CiAgfQp9OwojIDE0NyAiL3Vzci9pbmNsdWRlL2crKy12 My9iaXRzL3N0bF9saXN0LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jYXRv ciwgYm9vbCBfSXNTdGF0aWM+CmNsYXNzIF9MaXN0X2FsbG9jX2Jhc2UgewpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jYXRvcj46OmFsbG9jYXRvcl90 eXBlCiAgICAgICAgICBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2Nh dG9yKCkgY29uc3QgeyByZXR1cm4gX05vZGVfYWxsb2NhdG9yOyB9CgogIF9MaXN0X2FsbG9jX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkgOiBfTm9kZV9hbGxvY2F0b3IoX19hKSB7fQoK cHJvdGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fZ2V0X25vZGUoKQogICB7IHJldHVybiBf Tm9kZV9hbGxvY2F0b3IuYWxsb2NhdGUoMSk7IH0KICB2b2lkIF9NX3B1dF9ub2RlKF9MaXN0X25v ZGU8X1RwPiogX19wKQogICAgeyBfTm9kZV9hbGxvY2F0b3IuZGVhbGxvY2F0ZShfX3AsIDEpOyB9 Cgpwcm90ZWN0ZWQ6CiAgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9B bGxvY2F0b3I+OjphbGxvY2F0b3JfdHlwZQogICAgICAgICAgIF9Ob2RlX2FsbG9jYXRvcjsKICBf TGlzdF9ub2RlPF9UcD4qIF9NX25vZGU7Cn07CgoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvY2F0b3I+CmNsYXNzIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2NhdG9yLCB0cnVl PiB7CnB1YmxpYzoKICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2Nh dG9yPjo6YWxsb2NhdG9yX3R5cGUKICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwogIGFsbG9jYXRv cl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBhbGxvY2F0b3JfdHlwZSgpOyB9 CgogIF9MaXN0X2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmKSB7fQoKcHJvdGVjdGVk OgogIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfTGlzdF9ub2RlPF9UcD4sIF9BbGxv Y2F0b3I+OjpfQWxsb2NfdHlwZQogICAgICAgICAgX0FsbG9jX3R5cGU7CiAgX0xpc3Rfbm9kZTxf VHA+KiBfTV9nZXRfbm9kZSgpIHsgcmV0dXJuIF9BbGxvY190eXBlOjphbGxvY2F0ZSgxKTsgfQog IHZvaWQgX01fcHV0X25vZGUoX0xpc3Rfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRl YWxsb2NhdGUoX19wLCAxKTsgfQoKcHJvdGVjdGVkOgogIF9MaXN0X25vZGU8X1RwPiogX01fbm9k ZTsKfTsKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KY2xhc3MgX0xpc3RfYmFz ZQogIDogcHVibGljIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQWxsb2NfdHJhaXRzPF9UcCwgX0FsbG9jPjo6X1NfaW5zdGFuY2VsZXNz Pgp7CnB1YmxpYzoKICB0eXBlZGVmIF9MaXN0X2FsbG9jX2Jhc2U8X1RwLCBfQWxsb2MsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjpfU19pbnN0 YW5jZWxlc3M+CiAgICAgICAgICBfQmFzZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxv Y2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgX0xpc3RfYmFzZShjb25zdCBhbGxvY2F0b3Jf dHlwZSYgX19hKSA6IF9CYXNlKF9fYSkgewogICAgX01fbm9kZSA9IF9NX2dldF9ub2RlKCk7CiAg ICBfTV9ub2RlLT5fTV9uZXh0ID0gX01fbm9kZTsKICAgIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9u b2RlOwogIH0KICB+X0xpc3RfYmFzZSgpIHsKICAgIGNsZWFyKCk7CiAgICBfTV9wdXRfbm9kZShf TV9ub2RlKTsKICB9CgogIHZvaWQgY2xlYXIoKTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZvaWQKX0xpc3RfYmFzZTxfVHAsX0FsbG9jPjo6Y2xlYXIoKQp7CiAgX0xp c3Rfbm9kZTxfVHA+KiBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfTV9ub2RlLT5fTV9uZXh0 OwogIHdoaWxlIChfX2N1ciAhPSBfTV9ub2RlKSB7CiAgICBfTGlzdF9ub2RlPF9UcD4qIF9fdG1w ID0gX19jdXI7CiAgICBfX2N1ciA9IChfTGlzdF9ub2RlPF9UcD4qKSBfX2N1ci0+X01fbmV4dDsK ICAgIF9EZXN0cm95KCZfX3RtcC0+X01fZGF0YSk7CiAgICBfTV9wdXRfbm9kZShfX3RtcCk7CiAg fQogIF9NX25vZGUtPl9NX25leHQgPSBfTV9ub2RlOwogIF9NX25vZGUtPl9NX3ByZXYgPSBfTV9u b2RlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2MgPSBhbGxvY2F0b3I8X1Rw PiA+CmNsYXNzIGxpc3QgOiBwcm90ZWN0ZWQgX0xpc3RfYmFzZTxfVHAsIF9BbGxvYz4KewoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICB0 eXBlZGVmIF9MaXN0X2Jhc2U8X1RwLCBfQWxsb2M+IF9CYXNlOwpwcm90ZWN0ZWQ6CiAgdHlwZWRl ZiB2b2lkKiBfVm9pZF9wb2ludGVyOwoKcHVibGljOgogIHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7 CiAgdHlwZWRlZiB2YWx1ZV90eXBlKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlw ZSogY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHZhbHVlX3R5cGUmIHJlZmVyZW5jZTsKICB0eXBl ZGVmIGNvbnN0IHZhbHVlX3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIF9MaXN0X25v ZGU8X1RwPiBfTm9kZTsKICB0eXBlZGVmIHNpemVfdCBzaXplX3R5cGU7CiAgdHlwZWRlZiBwdHJk aWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICB0eXBlZGVmIHR5cGVuYW1lIF9CYXNlOjphbGxvY2F0 b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKICBhbGxvY2F0b3JfdHlwZSBnZXRfYWxsb2NhdG9yKCkg Y29uc3QgeyByZXR1cm4gX0Jhc2U6OmdldF9hbGxvY2F0b3IoKTsgfQoKcHVibGljOgogIHR5cGVk ZWYgX0xpc3RfaXRlcmF0b3I8X1RwLF9UcCYsX1RwKj4gaXRlcmF0b3I7CiAgdHlwZWRlZiBfTGlz dF9pdGVyYXRvcjxfVHAsY29uc3QgX1RwJixjb25zdCBfVHAqPiBjb25zdF9pdGVyYXRvcjsKCiAg dHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPGNvbnN0X2l0ZXJhdG9yPiBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yOwogIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRvcj4gcmV2ZXJzZV9pdGVy YXRvcjsKCnByb3RlY3RlZDoKICB1c2luZyBfQmFzZTo6X01fbm9kZTsKICB1c2luZyBfQmFzZTo6 X01fcHV0X25vZGU7CiAgdXNpbmcgX0Jhc2U6Ol9NX2dldF9ub2RlOwoKcHJvdGVjdGVkOgogIF9O b2RlKiBfTV9jcmVhdGVfbm9kZShjb25zdCBfVHAmIF9feCkKICB7CiAgICBfTm9kZSogX19wID0g X01fZ2V0X25vZGUoKTsKICAgIHRyeSB7CiAgICAgIF9Db25zdHJ1Y3QoJl9fcC0+X01fZGF0YSwg X194KTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJvdzsgfTsK ICAgIHJldHVybiBfX3A7CiAgfQoKICBfTm9kZSogX01fY3JlYXRlX25vZGUoKQogIHsKICAgIF9O b2RlKiBfX3AgPSBfTV9nZXRfbm9kZSgpOwogICAgdHJ5IHsKICAgICAgX0NvbnN0cnVjdCgmX19w LT5fTV9kYXRhKTsKICAgIH0KICAgIGNhdGNoKC4uLikgeyBfTV9wdXRfbm9kZShfX3ApOyB0aHJv dzsgfTsKICAgIHJldHVybiBfX3A7CiAgfQoKcHVibGljOgogIGV4cGxpY2l0IGxpc3QoY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpIDogX0Jhc2UoX19hKSB7fQoK ICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIChfTm9kZSopKF9NX25vZGUtPl9NX25leHQpOyB9 CiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiAoX05vZGUqKShfTV9ub2Rl LT5fTV9uZXh0KTsgfQoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV9ub2RlOyB9CiAgY29u c3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01fbm9kZTsgfQoKICByZXZlcnNlX2l0 ZXJhdG9yIHJiZWdpbigpCiAgICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGVuZCgpKTsgfQog IGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0 X3JldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogIHJldmVyc2VfaXRlcmF0b3IgcmVuZCgpCiAg ICB7IHJldHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CiAgY29uc3RfcmV2ZXJzZV9p dGVyYXRvciByZW5kKCkgY29uc3QKICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3Io YmVnaW4oKSk7IH0KCiAgYm9vbCBlbXB0eSgpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGUtPl9NX25l eHQgPT0gX01fbm9kZTsgfQogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgewogICAgc2l6ZV90eXBl IF9fcmVzdWx0ID0gMDsKICAgIGRpc3RhbmNlKGJlZ2luKCksIGVuZCgpLCBfX3Jlc3VsdCk7CiAg ICByZXR1cm4gX19yZXN1bHQ7CiAgfQogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsgcmV0 dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgcmVmZXJlbmNlIGZyb250KCkgeyByZXR1cm4gKmJlZ2lu KCk7IH0KICBjb25zdF9yZWZlcmVuY2UgZnJvbnQoKSBjb25zdCB7IHJldHVybiAqYmVnaW4oKTsg fQogIHJlZmVyZW5jZSBiYWNrKCkgeyByZXR1cm4gKigtLWVuZCgpKTsgfQogIGNvbnN0X3JlZmVy ZW5jZSBiYWNrKCkgY29uc3QgeyByZXR1cm4gKigtLWVuZCgpKTsgfQoKICB2b2lkIHN3YXAobGlz dDxfVHAsIF9BbGxvYz4mIF9feCkgeyBzdGQ6OnN3YXAoX01fbm9kZSwgX194Ll9NX25vZGUpOyB9 CgogIGl0ZXJhdG9yIGluc2VydChpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVHAmIF9feCkg ewogICAgX05vZGUqIF9fdG1wID0gX01fY3JlYXRlX25vZGUoX194KTsKICAgIF9fdG1wLT5fTV9u ZXh0ID0gX19wb3NpdGlvbi5fTV9ub2RlOwogICAgX190bXAtPl9NX3ByZXYgPSBfX3Bvc2l0aW9u Ll9NX25vZGUtPl9NX3ByZXY7CiAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9NX25l eHQgPSBfX3RtcDsKICAgIF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldiA9IF9fdG1wOwogICAg cmV0dXJuIF9fdG1wOwogIH0KICBpdGVyYXRvciBpbnNlcnQoaXRlcmF0b3IgX19wb3NpdGlvbikg eyByZXR1cm4gaW5zZXJ0KF9fcG9zaXRpb24sIF9UcCgpKTsgfQoKCiAgdGVtcGxhdGU8Y2xhc3Mg X0ludGVnZXI+CiAgdm9pZCBfTV9pbnNlcnRfZGlzcGF0Y2goaXRlcmF0b3IgX19wb3MsIF9JbnRl Z2VyIF9fbiwgX0ludGVnZXIgX194LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90 eXBlKSB7CiAgICBfTV9maWxsX2luc2VydChfX3BvcywgKHNpemVfdHlwZSkgX19uLCAoX1RwKSBf X3gpOwogIH0KCiAgdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogIHZvaWQgX01faW5z ZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9J bnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2ZhbHNlX3R5cGUpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRl cmF0b3I+CiAgdm9pZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIF9JbnB1dEl0ZXJhdG9yIF9fZmly c3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkgewogICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfaW50 ZWdlcjxfSW5wdXRJdGVyYXRvcj46Ol9JbnRlZ3JhbCBfSW50ZWdyYWw7CiAgICBfTV9pbnNlcnRf ZGlzcGF0Y2goX19wb3MsIF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdm9p ZCBpbnNlcnQoaXRlcmF0b3IgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX194KQog ICAgeyBfTV9maWxsX2luc2VydChfX3BvcywgX19uLCBfX3gpOyB9CiAgdm9pZCBfTV9maWxsX2lu c2VydChpdGVyYXRvciBfX3Bvcywgc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3gpOwoKICB2 b2lkIHB1c2hfZnJvbnQoY29uc3QgX1RwJiBfX3gpIHsgaW5zZXJ0KGJlZ2luKCksIF9feCk7IH0K ICB2b2lkIHB1c2hfZnJvbnQoKSB7aW5zZXJ0KGJlZ2luKCkpO30KICB2b2lkIHB1c2hfYmFjayhj b25zdCBfVHAmIF9feCkgeyBpbnNlcnQoZW5kKCksIF9feCk7IH0KICB2b2lkIHB1c2hfYmFjaygp IHtpbnNlcnQoZW5kKCkpO30KCiAgaXRlcmF0b3IgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikg ewogICAgX0xpc3Rfbm9kZV9iYXNlKiBfX25leHRfbm9kZSA9IF9fcG9zaXRpb24uX01fbm9kZS0+ X01fbmV4dDsKICAgIF9MaXN0X25vZGVfYmFzZSogX19wcmV2X25vZGUgPSBfX3Bvc2l0aW9uLl9N X25vZGUtPl9NX3ByZXY7CiAgICBfTm9kZSogX19uID0gKF9Ob2RlKikgX19wb3NpdGlvbi5fTV9u b2RlOwogICAgX19wcmV2X25vZGUtPl9NX25leHQgPSBfX25leHRfbm9kZTsKICAgIF9fbmV4dF9u b2RlLT5fTV9wcmV2ID0gX19wcmV2X25vZGU7CiAgICBfRGVzdHJveSgmX19uLT5fTV9kYXRhKTsK ICAgIF9NX3B1dF9ub2RlKF9fbik7CiAgICByZXR1cm4gaXRlcmF0b3IoKF9Ob2RlKikgX19uZXh0 X25vZGUpOwogIH0KICBpdGVyYXRvciBlcmFzZShpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBf X2xhc3QpOwogIHZvaWQgY2xlYXIoKSB7IF9CYXNlOjpjbGVhcigpOyB9CgogIHZvaWQgcmVzaXpl KHNpemVfdHlwZSBfX25ld19zaXplLCBjb25zdCBfVHAmIF9feCk7CiAgdm9pZCByZXNpemUoc2l6 ZV90eXBlIF9fbmV3X3NpemUpIHsgdGhpcy0+cmVzaXplKF9fbmV3X3NpemUsIF9UcCgpKTsgfQoK ICB2b2lkIHBvcF9mcm9udCgpIHsgZXJhc2UoYmVnaW4oKSk7IH0KICB2b2lkIHBvcF9iYWNrKCkg ewogICAgaXRlcmF0b3IgX190bXAgPSBlbmQoKTsKICAgIGVyYXNlKC0tX190bXApOwogIH0KICBs aXN0KHNpemVfdHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWx1ZSwKICAgICAgIGNvbnN0IGFsbG9j YXRvcl90eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfQmFzZShfX2EpCiAgICB7 IGluc2VydChiZWdpbigpLCBfX24sIF9fdmFsdWUpOyB9CiAgZXhwbGljaXQgbGlzdChzaXplX3R5 cGUgX19uKQogICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKQogICAgeyBpbnNlcnQoYmVnaW4o KSwgX19uLCBfVHAoKSk7IH0KCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAg bGlzdChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsCiAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX0Jh c2UoX19hKQogICAgeyBpbnNlcnQoYmVnaW4oKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICBsaXN0 KGNvbnN0IGxpc3Q8X1RwLCBfQWxsb2M+JiBfX3gpIDogX0Jhc2UoX194LmdldF9hbGxvY2F0b3Io KSkKICAgIHsgaW5zZXJ0KGJlZ2luKCksIF9feC5iZWdpbigpLCBfX3guZW5kKCkpOyB9CgogIH5s aXN0KCkgeyB9CgogIGxpc3Q8X1RwLCBfQWxsb2M+JiBvcGVyYXRvcj0oY29uc3QgbGlzdDxfVHAs IF9BbGxvYz4mIF9feCk7CgpwdWJsaWM6CgoKCgoKICB2b2lkIGFzc2lnbihzaXplX3R5cGUgX19u LCBjb25zdCBfVHAmIF9fdmFsKSB7IF9NX2ZpbGxfYXNzaWduKF9fbiwgX192YWwpOyB9CgogIHZv aWQgX01fZmlsbF9hc3NpZ24oc2l6ZV90eXBlIF9fbiwgY29uc3QgX1RwJiBfX3ZhbCk7CgogIHRl bXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGFzc2lnbihfSW5wdXRJdGVyYXRv ciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUg X0lzX2ludGVnZXI8X0lucHV0SXRlcmF0b3I+OjpfSW50ZWdyYWwgX0ludGVncmFsOwogICAgX01f YXNzaWduX2Rpc3BhdGNoKF9fZmlyc3QsIF9fbGFzdCwgX0ludGVncmFsKCkpOwogIH0KCiAgdGVt cGxhdGUgPGNsYXNzIF9JbnRlZ2VyPgogIHZvaWQgX01fYXNzaWduX2Rpc3BhdGNoKF9JbnRlZ2Vy IF9fbiwgX0ludGVnZXIgX192YWwsIF9fdHJ1ZV90eXBlKQogICAgeyBfTV9maWxsX2Fzc2lnbigo c2l6ZV90eXBlKSBfX24sIChfVHApIF9fdmFsKTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0 SXRlcmF0b3I+CiAgdm9pZCBfTV9hc3NpZ25fZGlzcGF0Y2goX0lucHV0SXRlcmF0b3IgX19maXJz dCwgX0lucHV0SXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fZmFs c2VfdHlwZSk7Cgpwcm90ZWN0ZWQ6CiAgdm9pZCB0cmFuc2ZlcihpdGVyYXRvciBfX3Bvc2l0aW9u LCBpdGVyYXRvciBfX2ZpcnN0LCBpdGVyYXRvciBfX2xhc3QpIHsKICAgIGlmIChfX3Bvc2l0aW9u ICE9IF9fbGFzdCkgewoKICAgICAgX19sYXN0Ll9NX25vZGUtPl9NX3ByZXYtPl9NX25leHQgPSBf X3Bvc2l0aW9uLl9NX25vZGU7CiAgICAgIF9fZmlyc3QuX01fbm9kZS0+X01fcHJldi0+X01fbmV4 dCA9IF9fbGFzdC5fTV9ub2RlOwogICAgICBfX3Bvc2l0aW9uLl9NX25vZGUtPl9NX3ByZXYtPl9N X25leHQgPSBfX2ZpcnN0Ll9NX25vZGU7CgoKICAgICAgX0xpc3Rfbm9kZV9iYXNlKiBfX3RtcCA9 IF9fcG9zaXRpb24uX01fbm9kZS0+X01fcHJldjsKICAgICAgX19wb3NpdGlvbi5fTV9ub2RlLT5f TV9wcmV2ID0gX19sYXN0Ll9NX25vZGUtPl9NX3ByZXY7CiAgICAgIF9fbGFzdC5fTV9ub2RlLT5f TV9wcmV2ID0gX19maXJzdC5fTV9ub2RlLT5fTV9wcmV2OwogICAgICBfX2ZpcnN0Ll9NX25vZGUt Pl9NX3ByZXYgPSBfX3RtcDsKICAgIH0KICB9CgpwdWJsaWM6CiAgdm9pZCBzcGxpY2UoaXRlcmF0 b3IgX19wb3NpdGlvbiwgbGlzdCYgX194KSB7CiAgICBpZiAoIV9feC5lbXB0eSgpKQogICAgICB0 aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX3guYmVnaW4oKSwgX194LmVuZCgpKTsKICB9CiAg dm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwgbGlzdCYsIGl0ZXJhdG9yIF9faSkgewog ICAgaXRlcmF0b3IgX19qID0gX19pOwogICAgKytfX2o7CiAgICBpZiAoX19wb3NpdGlvbiA9PSBf X2kgfHwgX19wb3NpdGlvbiA9PSBfX2opIHJldHVybjsKICAgIHRoaXMtPnRyYW5zZmVyKF9fcG9z aXRpb24sIF9faSwgX19qKTsKICB9CiAgdm9pZCBzcGxpY2UoaXRlcmF0b3IgX19wb3NpdGlvbiwg bGlzdCYsIGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkgewogICAgaWYgKF9fZmly c3QgIT0gX19sYXN0KQogICAgICB0aGlzLT50cmFuc2ZlcihfX3Bvc2l0aW9uLCBfX2ZpcnN0LCBf X2xhc3QpOwogIH0KICB2b2lkIHJlbW92ZShjb25zdCBfVHAmIF9fdmFsdWUpOwogIHZvaWQgdW5p cXVlKCk7CiAgdm9pZCBtZXJnZShsaXN0JiBfX3gpOwogIHZvaWQgcmV2ZXJzZSgpOwogIHZvaWQg c29ydCgpOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4gdm9pZCByZW1vdmVfaWYoX1By ZWRpY2F0ZSk7CiAgdGVtcGxhdGUgPGNsYXNzIF9CaW5hcnlQcmVkaWNhdGU+IHZvaWQgdW5pcXVl KF9CaW5hcnlQcmVkaWNhdGUpOwogIHRlbXBsYXRlIDxjbGFzcyBfU3RyaWN0V2Vha09yZGVyaW5n PiB2b2lkIG1lcmdlKGxpc3QmLCBfU3RyaWN0V2Vha09yZGVyaW5nKTsKICB0ZW1wbGF0ZSA8Y2xh c3MgX1N0cmljdFdlYWtPcmRlcmluZz4gdm9pZCBzb3J0KF9TdHJpY3RXZWFrT3JkZXJpbmcpOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbApvcGVyYXRv cj09KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwgY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg X195KQp7CiAgdHlwZWRlZiB0eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+Ojpjb25zdF9pdGVyYXRv ciBjb25zdF9pdGVyYXRvcjsKICBjb25zdF9pdGVyYXRvciBfX2VuZDEgPSBfX3guZW5kKCk7CiAg Y29uc3RfaXRlcmF0b3IgX19lbmQyID0gX195LmVuZCgpOwoKICBjb25zdF9pdGVyYXRvciBfX2kx ID0gX194LmJlZ2luKCk7CiAgY29uc3RfaXRlcmF0b3IgX19pMiA9IF9feS5iZWdpbigpOwogIHdo aWxlIChfX2kxICE9IF9fZW5kMSAmJiBfX2kyICE9IF9fZW5kMiAmJiAqX19pMSA9PSAqX19pMikg ewogICAgKytfX2kxOwogICAgKytfX2kyOwogIH0KICByZXR1cm4gX19pMSA9PSBfX2VuZDEgJiYg X19pMiA9PSBfX2VuZDI7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkKewogIHJldHVybiBsZXhp Y29ncmFwaGljYWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX3kuYmVnaW4oKSwgX195LmVuZCgpKTsKfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGxp c3Q8X1RwLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9U cCxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPT0gX195KTsKfQoKdGVtcGxhdGUgPGNs YXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29uc3QgbGlzdDxf VHAsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbGlzdDxfVHAsX0Fs bG9jPiYgX195KSB7CiAgcmV0dXJuIF9feSA8IF9feDsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IGxpc3Q8X1RwLF9BbGxv Yz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBsaXN0PF9UcCxfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFz cyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgbGlzdDxfVHAsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGxpc3Q8X1RwLF9BbGxvYz4mIF9feSkg ewogIHJldHVybiAhKF9feCA8IF9feSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9B bGxvYz4KaW5saW5lIHZvaWQKc3dhcChsaXN0PF9UcCwgX0FsbG9jPiYgX194LCBsaXN0PF9UcCwg X0FsbG9jPiYgX195KQp7CiAgX194LnN3YXAoX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwg Y2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcj4Kdm9pZApsaXN0PF9UcCwg X0FsbG9jPjo6X01faW5zZXJ0X2Rpc3BhdGNoKGl0ZXJhdG9yIF9fcG9zaXRpb24sCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2ZhbHNl X3R5cGUpCnsKICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICBpbnNl cnQoX19wb3NpdGlvbiwgKl9fZmlyc3QpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBf QWxsb2M+CnZvaWQKbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfaW5zZXJ0KGl0ZXJhdG9yIF9f cG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19u LCBjb25zdCBfVHAmIF9feCkKewogIGZvciAoIDsgX19uID4gMDsgLS1fX24pCiAgICBpbnNlcnQo X19wb3NpdGlvbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp0 eXBlbmFtZSBsaXN0PF9UcCxfQWxsb2M+OjppdGVyYXRvciBsaXN0PF9UcCwgX0FsbG9jPjo6ZXJh c2UoaXRlcmF0b3IgX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGl0ZXJhdG9yIF9fbGFzdCkKewogIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkKICAgIGVyYXNlKF9fZmlyc3QrKyk7CiAgcmV0dXJuIF9fbGFzdDsKfQoK dGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lkIGxpc3Q8X1RwLCBfQWxsb2M+ OjpyZXNpemUoc2l6ZV90eXBlIF9fbmV3X3NpemUsIGNvbnN0IF9UcCYgX194KQp7CiAgaXRlcmF0 b3IgX19pID0gYmVnaW4oKTsKICBzaXplX3R5cGUgX19sZW4gPSAwOwogIGZvciAoIDsgX19pICE9 IGVuZCgpICYmIF9fbGVuIDwgX19uZXdfc2l6ZTsgKytfX2ksICsrX19sZW4pCiAgICA7CiAgaWYg KF9fbGVuID09IF9fbmV3X3NpemUpCiAgICBlcmFzZShfX2ksIGVuZCgpKTsKICBlbHNlCiAgICBp bnNlcnQoZW5kKCksIF9fbmV3X3NpemUgLSBfX2xlbiwgX194KTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPgpsaXN0PF9UcCwgX0FsbG9jPiYgbGlzdDxfVHAsIF9BbGxvYz46 Om9wZXJhdG9yPShjb25zdCBsaXN0PF9UcCwgX0FsbG9jPiYgX194KQp7CiAgaWYgKHRoaXMgIT0g Jl9feCkgewogICAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogICAgaXRlcmF0b3IgX19s YXN0MSA9IGVuZCgpOwogICAgY29uc3RfaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4oKTsK ICAgIGNvbnN0X2l0ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgICB3aGlsZSAoX19maXJz dDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0MiAhPSBfX2xhc3QyKQogICAgICAqX19maXJzdDErKyA9 ICpfX2ZpcnN0MisrOwogICAgaWYgKF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgIGVyYXNlKF9f Zmlyc3QxLCBfX2xhc3QxKTsKICAgIGVsc2UKICAgICAgaW5zZXJ0KF9fbGFzdDEsIF9fZmlyc3Qy LCBfX2xhc3QyKTsKICB9CiAgcmV0dXJuICp0aGlzOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBj bGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Ol9NX2ZpbGxfYXNzaWduKHNpemVf dHlwZSBfX24sIGNvbnN0IF9UcCYgX192YWwpIHsKICBpdGVyYXRvciBfX2kgPSBiZWdpbigpOwog IGZvciAoIDsgX19pICE9IGVuZCgpICYmIF9fbiA+IDA7ICsrX19pLCAtLV9fbikKICAgICpfX2kg PSBfX3ZhbDsKICBpZiAoX19uID4gMCkKICAgIGluc2VydChlbmQoKSwgX19uLCBfX3ZhbCk7CiAg ZWxzZQogICAgZXJhc2UoX19pLCBlbmQoKSk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNz IF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9JbnB1dEl0ZXI+CnZvaWQKbGlzdDxfVHAsIF9BbGxv Yz46Ol9NX2Fzc2lnbl9kaXNwYXRjaChfSW5wdXRJdGVyIF9fZmlyc3QyLCBfSW5wdXRJdGVyIF9f bGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19mYWxzZV90eXBl KQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFzdDEgPSBl bmQoKTsKICBmb3IgKCA7IF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MjsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICpfX2ZpcnN0MSA9ICpfX2ZpcnN0MjsKICBp ZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgIGVyYXNlKF9fZmlyc3QxLCBfX2xhc3QxKTsKICBl bHNlCiAgICBpbnNlcnQoX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46OnJlbW92ZShj b25zdCBfVHAmIF9fdmFsdWUpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVy YXRvciBfX2xhc3QgPSBlbmQoKTsKICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgIGl0 ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3Q7CiAgICArK19fbmV4dDsKICAgIGlmICgqX19maXJzdCA9 PSBfX3ZhbHVlKSBlcmFzZShfX2ZpcnN0KTsKICAgIF9fZmlyc3QgPSBfX25leHQ7CiAgfQp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46 OnVuaXF1ZSgpCnsKICBpdGVyYXRvciBfX2ZpcnN0ID0gYmVnaW4oKTsKICBpdGVyYXRvciBfX2xh c3QgPSBlbmQoKTsKICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVybjsKICBpdGVyYXRvciBf X25leHQgPSBfX2ZpcnN0OwogIHdoaWxlICgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgIGlmICgq X19maXJzdCA9PSAqX19uZXh0KQogICAgICBlcmFzZShfX25leHQpOwogICAgZWxzZQogICAgICBf X2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0KCnRlbXBsYXRlIDxj bGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6bWVyZ2UobGlz dDxfVHAsIF9BbGxvYz4mIF9feCkKewogIGl0ZXJhdG9yIF9fZmlyc3QxID0gYmVnaW4oKTsKICBp dGVyYXRvciBfX2xhc3QxID0gZW5kKCk7CiAgaXRlcmF0b3IgX19maXJzdDIgPSBfX3guYmVnaW4o KTsKICBpdGVyYXRvciBfX2xhc3QyID0gX194LmVuZCgpOwogIHdoaWxlIChfX2ZpcnN0MSAhPSBf X2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2Zlcihf X2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAg ICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIp IHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKaW5saW5lIHZvaWQgX19M aXN0X2Jhc2VfcmV2ZXJzZShfTGlzdF9ub2RlX2Jhc2UqIF9fcCkKewogIF9MaXN0X25vZGVfYmFz ZSogX190bXAgPSBfX3A7CiAgZG8gewogICAgc3RkOjpzd2FwKF9fdG1wLT5fTV9uZXh0LCBfX3Rt cC0+X01fcHJldik7CiAgICBfX3RtcCA9IF9fdG1wLT5fTV9wcmV2OwogIH0gd2hpbGUgKF9fdG1w ICE9IF9fcCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZv aWQgbGlzdDxfVHAsIF9BbGxvYz46OnJldmVyc2UoKQp7CiAgX19MaXN0X2Jhc2VfcmV2ZXJzZSh0 aGlzLT5fTV9ub2RlKTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgp2b2lk IGxpc3Q8X1RwLCBfQWxsb2M+Ojpzb3J0KCkKewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBf TV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQtPl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlz dDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAgIGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2 NF07CiAgICBpbnQgX19maWxsID0gMDsKICAgIHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2Nh cnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCksICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9f aSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9fZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHko KSkgewogICAgICAgIF9fY291bnRlcltfX2ldLm1lcmdlKF9fY2FycnkpOwogICAgICAgIF9fY2Fy cnkuc3dhcChfX2NvdW50ZXJbX19pKytdKTsKICAgICAgfQogICAgICBfX2NhcnJ5LnN3YXAoX19j b3VudGVyW19faV0pOwogICAgICBpZiAoX19pID09IF9fZmlsbCkgKytfX2ZpbGw7CiAgICB9Cgog ICAgZm9yIChpbnQgX19pID0gMTsgX19pIDwgX19maWxsOyArK19faSkKICAgICAgX19jb3VudGVy W19faV0ubWVyZ2UoX19jb3VudGVyW19faS0xXSk7CiAgICBzd2FwKF9fY291bnRlcltfX2ZpbGwt MV0pOwogIH0KfQoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8 Y2xhc3MgX1ByZWRpY2F0ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6cmVtb3ZlX2lmKF9QcmVk aWNhdGUgX19wcmVkKQp7CiAgaXRlcmF0b3IgX19maXJzdCA9IGJlZ2luKCk7CiAgaXRlcmF0b3Ig X19sYXN0ID0gZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KSB7CiAgICBpdGVyYXRv ciBfX25leHQgPSBfX2ZpcnN0OwogICAgKytfX25leHQ7CiAgICBpZiAoX19wcmVkKCpfX2ZpcnN0 KSkgZXJhc2UoX19maXJzdCk7CiAgICBfX2ZpcnN0ID0gX19uZXh0OwogIH0KfQoKdGVtcGxhdGUg PGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX0JpbmFyeVByZWRpY2F0 ZT4Kdm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6dW5pcXVlKF9CaW5hcnlQcmVkaWNhdGUgX19iaW5h cnlfcHJlZCkKewogIGl0ZXJhdG9yIF9fZmlyc3QgPSBiZWdpbigpOwogIGl0ZXJhdG9yIF9fbGFz dCA9IGVuZCgpOwogIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogIGl0ZXJhdG9yIF9f bmV4dCA9IF9fZmlyc3Q7CiAgd2hpbGUgKCsrX19uZXh0ICE9IF9fbGFzdCkgewogICAgaWYgKF9f YmluYXJ5X3ByZWQoKl9fZmlyc3QsICpfX25leHQpKQogICAgICBlcmFzZShfX25leHQpOwogICAg ZWxzZQogICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgX19uZXh0ID0gX19maXJzdDsKICB9Cn0K CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9BbGxvYz4gdGVtcGxhdGUgPGNsYXNzIF9TdHJp Y3RXZWFrT3JkZXJpbmc+CnZvaWQgbGlzdDxfVHAsIF9BbGxvYz46Om1lcmdlKGxpc3Q8X1RwLCBf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TdHJpY3RXZWFrT3Jk ZXJpbmcgX19jb21wKQp7CiAgaXRlcmF0b3IgX19maXJzdDEgPSBiZWdpbigpOwogIGl0ZXJhdG9y IF9fbGFzdDEgPSBlbmQoKTsKICBpdGVyYXRvciBfX2ZpcnN0MiA9IF9feC5iZWdpbigpOwogIGl0 ZXJhdG9yIF9fbGFzdDIgPSBfX3guZW5kKCk7CiAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEg JiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz dDEpKSB7CiAgICAgIGl0ZXJhdG9yIF9fbmV4dCA9IF9fZmlyc3QyOwogICAgICB0cmFuc2Zlcihf X2ZpcnN0MSwgX19maXJzdDIsICsrX19uZXh0KTsKICAgICAgX19maXJzdDIgPSBfX25leHQ7CiAg ICB9CiAgICBlbHNlCiAgICAgICsrX19maXJzdDE7CiAgaWYgKF9fZmlyc3QyICE9IF9fbGFzdDIp IHRyYW5zZmVyKF9fbGFzdDEsIF9fZmlyc3QyLCBfX2xhc3QyKTsKfQoKdGVtcGxhdGUgPGNsYXNz IF9UcCwgY2xhc3MgX0FsbG9jPiB0ZW1wbGF0ZSA8Y2xhc3MgX1N0cmljdFdlYWtPcmRlcmluZz4K dm9pZCBsaXN0PF9UcCwgX0FsbG9jPjo6c29ydChfU3RyaWN0V2Vha09yZGVyaW5nIF9fY29tcCkK ewoKICBpZiAoX01fbm9kZS0+X01fbmV4dCAhPSBfTV9ub2RlICYmIF9NX25vZGUtPl9NX25leHQt Pl9NX25leHQgIT0gX01fbm9kZSkgewogICAgbGlzdDxfVHAsIF9BbGxvYz4gX19jYXJyeTsKICAg IGxpc3Q8X1RwLCBfQWxsb2M+IF9fY291bnRlcls2NF07CiAgICBpbnQgX19maWxsID0gMDsKICAg IHdoaWxlICghZW1wdHkoKSkgewogICAgICBfX2NhcnJ5LnNwbGljZShfX2NhcnJ5LmJlZ2luKCks ICp0aGlzLCBiZWdpbigpKTsKICAgICAgaW50IF9faSA9IDA7CiAgICAgIHdoaWxlKF9faSA8IF9f ZmlsbCAmJiAhX19jb3VudGVyW19faV0uZW1wdHkoKSkgewogICAgICAgIF9fY291bnRlcltfX2ld Lm1lcmdlKF9fY2FycnksIF9fY29tcCk7CiAgICAgICAgX19jYXJyeS5zd2FwKF9fY291bnRlcltf X2krK10pOwogICAgICB9CiAgICAgIF9fY2Fycnkuc3dhcChfX2NvdW50ZXJbX19pXSk7CiAgICAg IGlmIChfX2kgPT0gX19maWxsKSArK19fZmlsbDsKICAgIH0KCiAgICBmb3IgKGludCBfX2kgPSAx OyBfX2kgPCBfX2ZpbGw7ICsrX19pKQogICAgICBfX2NvdW50ZXJbX19pXS5tZXJnZShfX2NvdW50 ZXJbX19pLTFdLCBfX2NvbXApOwogICAgc3dhcChfX2NvdW50ZXJbX19maWxsLTFdKTsKICB9Cn0K Cn0KIyA2NiAiL3Vzci9pbmNsdWRlL2crKy12My9iaXRzL3N0ZF9saXN0LmgiIDIgMwojIDMyICIv dXNyL2luY2x1ZGUvZysrLXYzL2xpc3QiIDIgMwojIDM1ICJIRFUuaCIgMgoKIyAxICJLZXl3b3Jk LmgiIDEKIyAzNyAiSERVLmgiIDIKCiMgMSAiTmV3S2V5d29yZC5oIiAxCiMgMzIgIk5ld0tleXdv cmQuaCIKIyAxICJLZXl3b3JkQ3JlYXRvci5oIiAxCiMgMjYgIktleXdvcmRDcmVhdG9yLmgiCiMg MSAiL3Vzci9pbmNsdWRlL2crKy12My9pb3N0cmVhbSIgMSAzCiMgMjcgIktleXdvcmRDcmVhdG9y LmgiIDIKCgoKCgoKIyAxICJLZXlEYXRhLmgiIDEKIyAzNCAiS2V5d29yZENyZWF0b3IuaCIgMgoK IyAxICJGaXRzRXJyb3IuaCIgMQojIDM2ICJLZXl3b3JkQ3JlYXRvci5oIiAyCgpuYW1lc3BhY2Ug Q0NmaXRzIHsKICBjbGFzcyBIRFU7Cgp9CiMgNDkgIktleXdvcmRDcmVhdG9yLmgiCm5hbWVzcGFj ZSBDQ2ZpdHMgewojIDY3ICJLZXl3b3JkQ3JlYXRvci5oIgogIGNsYXNzIEtleXdvcmRDcmVhdG9y CiAgewoKCgogICAgcHVibGljOgoKCiAgICAgICAgS2V5d29yZENyZWF0b3IgKEhEVSogcCk7CgoK ICAgICAgICB2aXJ0dWFsIH5LZXl3b3JkQ3JlYXRvcigpOwoKCgoKICAgICAgICB2aXJ0dWFsIEtl eXdvcmQqIE1ha2VLZXl3b3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYg Y29tbWVudCA9IHN0cmluZygiIikpID0gMDsKCgogICAgICAgIHN0YXRpYyBLZXl3b3JkKiBnZXRL ZXl3b3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUsIEhEVSogcCk7CgoKCiAgICAgICAgdmlydHVh bCB2b2lkIHJlc2V0ICgpOwoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkKiBjcmVhdGVLZXl3b3Jk IChjb25zdCBzdHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYgY29tbWVudCA9IHN0cmluZygi IikpOwoKCgoKICAgICAgICBzdGF0aWMgS2V5d29yZCogZ2V0S2V5d29yZCAoY29uc3Qgc3RyaW5n JiBrZXlOYW1lLCBWYWx1ZVR5cGUga2V5VHlwZSwgSERVKiBwKTsKCgoKCgogICAgcHJvdGVjdGVk OgoKCgoKICAgICAgICBIRFUqIGZvckhEVSAoKTsKCgoKCgogICAgcHJpdmF0ZToKCiAgICAgICAg S2V5d29yZENyZWF0b3IoY29uc3QgS2V5d29yZENyZWF0b3IgJnJpZ2h0KTsKCgogICAgICAgIEtl eXdvcmRDcmVhdG9yICYgb3BlcmF0b3I9KGNvbnN0IEtleXdvcmRDcmVhdG9yICZyaWdodCk7CgoK CgoKICAgIHByaXZhdGU6CgoKCgogICAgICAgIEtleXdvcmQgKm1fa2V5d29yZDsKCgoKCgoKICAg ICAgICBIRFUqIG1fZm9ySERVOwoKCgoKCgogIH07CiMgMTU0ICJLZXl3b3JkQ3JlYXRvci5oIgog IGlubGluZSB2b2lkIEtleXdvcmRDcmVhdG9yOjpyZXNldCAoKQogIHsKICAgIG1fa2V5d29yZD0w OwoKCgoKICB9CgoKCiAgaW5saW5lIEhEVSogS2V5d29yZENyZWF0b3I6OmZvckhEVSAoKQogIHsK CiAgICByZXR1cm4gbV9mb3JIRFU7CgogIH0KCn0KIyAzMyAiTmV3S2V5d29yZC5oIiAyCgojIDEg IktleURhdGEuaCIgMQojIDM1ICJOZXdLZXl3b3JkLmgiIDIKCiMgMSAiRklUU1V0aWwuaCIgMQoj IDM3ICJOZXdLZXl3b3JkLmgiIDIKCgoKCgoKCm5hbWVzcGFjZSBDQ2ZpdHMgewojIDYxICJOZXdL ZXl3b3JkLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgTmV3S2V5d29yZCA6IHB1 YmxpYyBLZXl3b3JkQ3JlYXRvcgogIHsKCgoKICAgIHB1YmxpYzoKCgoKICAgICAgICBOZXdLZXl3 b3JkIChIRFUqIHAsIFQgdmFsdWUpOwoKCiAgICAgICAgdmlydHVhbCB+TmV3S2V5d29yZCgpOwoK CgoKCiAgICAgICAgdmlydHVhbCBLZXl3b3JkKiBNYWtlS2V5d29yZCAoY29uc3Qgc3RyaW5nJiBr ZXlOYW1lLCBjb25zdCBzdHJpbmcmIGtleUNvbW1lbnQgPSBzdHJpbmcoIiIpKTsKCgoKCiAgICAg ICAgY29uc3QgVCBrZXlEYXRhICgpIGNvbnN0OwogICAgICAgIHZvaWQga2V5RGF0YSAoVCB2YWx1 ZSk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRlOgoKICAgICAgICBOZXdLZXl3 b3JkKCk7CgogICAgICAgIE5ld0tleXdvcmQoY29uc3QgTmV3S2V5d29yZDwgVCA+ICZyaWdodCk7 CgoKICAgICAgICBOZXdLZXl3b3JkPCBUID4gJiBvcGVyYXRvcj0oY29uc3QgTmV3S2V5d29yZDwg VCA+ICZyaWdodCk7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgVCBtX2tleURhdGE7CgoK CgoKCiAgfTsKIyAxMzAgIk5ld0tleXdvcmQuaCIKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBp bmxpbmUgY29uc3QgVCBOZXdLZXl3b3JkPFQ+OjprZXlEYXRhICgpIGNvbnN0CiAgewoKICAgIHJl dHVybiBtX2tleURhdGE7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5lIHZv aWQgTmV3S2V5d29yZDxUPjo6a2V5RGF0YSAoVCB2YWx1ZSkKICB7CgogICAgbV9rZXlEYXRhID0g dmFsdWU7CgogIH0KCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgTmV3S2V5d29yZDxUPjo6 TmV3S2V5d29yZCAoSERVKiBwLCBUIHZhbHVlKQoKICAgICAgOiBLZXl3b3JkQ3JlYXRvcihwKSwg bV9rZXlEYXRhKHZhbHVlKQoKCgogIHsKCgogIH0KCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog IE5ld0tleXdvcmQ8VD46On5OZXdLZXl3b3JkKCkKICB7CgoKICB9CgoKCgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgogIEtleXdvcmQqIE5ld0tleXdvcmQ8VD46Ok1ha2VLZXl3b3JkIChjb25zdCBz dHJpbmcmIGtleU5hbWUsIGNvbnN0IHN0cmluZyYga2V5Q29tbWVudCkKICB7CgogIEZJVFNVdGls OjpNYXRjaFR5cGU8VD4ga2V5VHlwZTsKICByZXR1cm4gbmV3IEtleURhdGE8VD4oa2V5TmFtZSxr ZXlUeXBlKCksbV9rZXlEYXRhLGZvckhEVSgpLGtleUNvbW1lbnQpOwoKICB9CgoKCgoKfQojIDM5 ICJIRFUuaCIgMgoKIyAxICJGaXRzRXJyb3IuaCIgMQojIDQxICJIRFUuaCIgMgoKIyAxICJGSVRT VXRpbC5oIiAxCiMgNDMgIkhEVS5oIiAyCgpuYW1lc3BhY2UgQ0NmaXRzIHsKICBjbGFzcyBGSVRT OwogIGNsYXNzIEZJVFNCYXNlOwoKfQoKCgoKCnVzaW5nIHN0ZDo6dmFsYXJyYXk7CgoKCm5hbWVz cGFjZSBDQ2ZpdHMgewojIDQyNCAiSERVLmgiCiAgY2xhc3MgSERVCiAgewoKCgogICAgcHVibGlj OgojIDQzOCAiSERVLmgiCiAgICAgIGNsYXNzIEludmFsaWRJbWFnZURhdGFUeXBlIDogcHVibGlj IEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBJbnZh bGlkSW1hZ2VEYXRhVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IHRydWUp OwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgog ICAgICB9OwojIDQ1OCAiSERVLmgiCiAgICAgIGNsYXNzIEludmFsaWRFeHRlbnNpb25UeXBlIDog cHVibGljIEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAg ICBJbnZhbGlkRXh0ZW5zaW9uVHlwZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9 IHRydWUpOwoKICAgICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2 YXRlOgogICAgICB9OwojIDQ3OCAiSERVLmgiCiAgICAgIGNsYXNzIE5vU3VjaEtleXdvcmQgOiBw dWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAg IE5vU3VjaEtleXdvcmQgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQgPSB0cnVlKTsK CiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAg ICAgfTsKIyA0OTggIkhEVS5oIgogICAgICBjbGFzcyBOb051bGxWYWx1ZSA6IHB1YmxpYyBGaXRz RXhjZXB0aW9uCiAgICAgIHsKICAgICAgICBwdWJsaWM6CgoKICAgICAgICAgICAgTm9OdWxsVmFs dWUgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCiAgICAgICAgcHJv dGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKCgogICAg ICAgIEhEVShjb25zdCBIRFUgJnJpZ2h0KTsKCgogICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25z dCBIRFUgJnJpZ2h0KSBjb25zdDsKCiAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEhEVSAm cmlnaHQpIGNvbnN0OwoKCgoKICAgICAgICB2aXJ0dWFsIEhEVSAqIGNsb25lIChGSVRTQmFzZSog cCkgY29uc3QgPSAwOwoKCiAgICAgICAgZml0c2ZpbGUqIGZpdHNQb2ludGVyICgpIGNvbnN0OwoK CgoKCgoKICAgICAgICB2aXJ0dWFsIHZvaWQgbWFrZVRoaXNDdXJyZW50ICgpIGNvbnN0OwoKCiAg ICAgICAgc3RkOjptYXA8c3RyaW5nLCBLZXl3b3JkKj4ga2V5V29yZCAoKTsKCgogICAgICAgIEtl eXdvcmQmIGtleVdvcmQgKGNvbnN0IHN0cmluZyYga2V5TmFtZSk7CgoKICAgICAgICBjb25zdCBz dHJpbmcmIGdldEhpc3RvcnkgKCk7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGdldENvbW1lbnRz ICgpOwoKCiAgICAgICAgZnJpZW5kIG9zdHJlYW0mIG9wZXJhdG9yIDw8IChvc3RyZWFtJiBzLCBj b25zdCBDQ2ZpdHM6OkhEVSYgcmlnaHQpOwoKCgoKCiAgICAgICAgdm9pZCB3cml0ZUhpc3Rvcnkg KGNvbnN0IHN0cmluZyYgaGlzdG9yeSA9ICJHZW5lcmljIEhpc3RvcnkgU3RyaW5nIik7CgoKCgoK ICAgICAgICB2b2lkIHdyaXRlQ29tbWVudCAoY29uc3Qgc3RyaW5nJiBjb21tZW50ID0gIkdlbmVy aWMgQ29tbWVudCIpOwoKCgogICAgICAgIHZvaWQgd3JpdGVEYXRlICgpOwoKCiAgICAgICAgRklU U0Jhc2UqIHBhcmVudCAoKSBjb25zdDsKCgogICAgICAgIHZvaWQgcmVhZEFsbEtleXMgKCk7CgoK ICAgICAgICBsb25nIGF4ZXMgKCkgY29uc3Q7CgoKICAgICAgICBsb25nIGF4aXMgKHNpemVfdCBp bmRleCkgY29uc3Q7CgoKICAgICAgICB2b2lkIGluZGV4IChpbnQgdmFsdWUpOwoKCiAgICAgICAg dm9pZCBkZWxldGVLZXkgKGNvbnN0IHN0ZDo6c3RyaW5nJiBkb29tZWQpOwoKCgoKICAgICAgICBp bnQgaW5kZXggKCkgY29uc3Q7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGhpc3RvcnkgKCkgY29u c3Q7CgoKICAgICAgICBjb25zdCBzdHJpbmcmIGNvbW1lbnQgKCkgY29uc3Q7CgoKCgoKCiAgICAg ICAgY29uc3Qgc3RkOjptYXA8c3RyaW5nLEtleXdvcmQqPiYga2V5V29yZCAoKSBjb25zdDsKICAg ICAgICBjb25zdCBLZXl3b3JkJiBrZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleW5hbWUpIGNvbnN0 OwogICAgICAgIHZvaWQgc2V0S2V5V29yZCAoY29uc3Qgc3RyaW5nJiBrZXluYW1lLCBLZXl3b3Jk JiB2YWx1ZSk7CgogICAgcHVibGljOgoKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAg ICBLZXl3b3JkJiBhZGRLZXkoY29uc3Qgc3RyaW5nJiBuYW1lLCBUIHZhbCwgY29uc3Qgc3RyaW5n JiBjb21tZW50KTsKCiAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogICAgICB2b2lkIHJlYWRL ZXkoY29uc3Qgc3RyaW5nJiBrZXlOYW1lLCBUJiB2YWwpOwoKICAgICAgdGVtcGxhdGUgPHR5cGVu YW1lIFQ+CiAgICAgIHZvaWQgcmVhZEtleXMoc3RkOjp2ZWN0b3I8c3RyaW5nPiYga2V5TmFtZXMs IHN0ZDo6dmVjdG9yPFQ+JiB2YWxzKTsKCgogICAgcHJvdGVjdGVkOgoKCgoKICAgICAgICBIRFUg KEZJVFNCYXNlKiBwID0gMCk7CgoKICAgICAgICBIRFUgKEZJVFNCYXNlKiBwLCBpbnQgYml0cGl4 LCBpbnQgbmF4aXMsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBheGVzKTsKCgogICAgICAgIHZp cnR1YWwgfkhEVSgpOwoKCgoKICAgICAgICBLZXl3b3JkJiByZWFkS2V5d29yZCAoY29uc3Qgc3Ry aW5nICZrZXluYW1lKTsKCgogICAgICAgIHZvaWQgcmVhZEtleXdvcmRzIChzdGQ6Omxpc3Q8c3Ry aW5nPiYga2V5bmFtZXMpOwoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0IChvc3RyZWFt ICZzKSBjb25zdCA9IDA7CgoKCgogICAgICAgIGxvbmcmIG5heGlzICgpOwogICAgICAgIHZvaWQg bmF4aXMgKGNvbnN0IGxvbmcmIHZhbHVlKTsKCgogICAgICAgIGxvbmcgYml0cGl4ICgpIGNvbnN0 OwogICAgICAgIHZvaWQgYml0cGl4IChsb25nIHZhbHVlKTsKCgoKCiAgICAgICAgYm9vbCYgYW55 bnVsICgpOwogICAgICAgIHZvaWQgYW55bnVsIChjb25zdCBib29sJiB2YWx1ZSk7CgoKCgoKICAg ICAgICBGSVRTQmFzZSomIHBhcmVudCAoKTsKCgoKCiAgICAgICAgc3RkOjp2ZWN0b3I8bG9uZz4m IG5heGVzICgpOwogICAgICAgIGxvbmcmIG5heGVzIChzaXplX3QgaW5kZXgpOwogICAgICAgIHZv aWQgbmF4ZXMgKHNpemVfdCBpbmRleCwgY29uc3QgbG9uZyYgdmFsdWUpOwoKCgoKCiAgICBwcml2 YXRlOgoKCgoKCiAgICAgICAgdm9pZCBjbGVhcktleXMgKCk7CgoKICAgICAgICB2aXJ0dWFsIHZv aWQgaW5pdFJlYWQgKCkgPSAwOwoKCiAgICAgICAgdm9pZCByZWFkSGR1SW5mbyAoKTsKCgogICAg ICAgIEtleXdvcmQqIGFkZEtleXdvcmQgKEtleXdvcmQqIG5ld0tleSk7CgoKICAgICAgICB2aXJ0 dWFsIGJvb2wgY29tcGFyZSAoY29uc3QgSERVICZyaWdodCkgY29uc3Q7CgoKCgogICAgICAgIHZv aWQgY29weUtleXMgKGNvbnN0IEhEVSYgcmlnaHQpOwoKCiAgICAgICAgc3RyaW5nIGdldE5hbWVk TGluZXMgKGNvbnN0IHN0cmluZyYgbmFtZSk7CgoKCgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAg bG9uZyBtX25heGlzOwoKCgogICAgICAgIGxvbmcgbV9iaXRwaXg7CgoKCiAgICAgICAgaW50IG1f aW5kZXg7CgoKCiAgICAgICAgYm9vbCBtX2FueW51bDsKCgoKICAgICAgICBzdHJpbmcgbV9oaXN0 b3J5OwoKCgogICAgICAgIHN0cmluZyBtX2NvbW1lbnQ7CgoKCgoKCiAgICAgICAgc3RkOjptYXA8 c3RyaW5nLEtleXdvcmQqPiBtX2tleVdvcmQ7CgoKCgogICAgICAgIEZJVFNCYXNlKiBtX3BhcmVu dDsKCgoKCiAgICAgICAgc3RkOjp2ZWN0b3I8bG9uZz4gbV9uYXhlczsKCgoKCiAgICAgIGZyaWVu ZCBmaXRzZmlsZSogS2V5d29yZDo6Zml0c1BvaW50ZXIoKSBjb25zdDsKICAgICAgZnJpZW5kIEtl eXdvcmQqIEtleXdvcmRDcmVhdG9yOjpnZXRLZXl3b3JkKGNvbnN0IHN0cmluZyYga2V5bmFtZSwg SERVKiBwKTsKICAgICAgZnJpZW5kIEtleXdvcmQqIEtleXdvcmRDcmVhdG9yOjpnZXRLZXl3b3Jk KGNvbnN0IHN0cmluZyYga2V5bmFtZSwgVmFsdWVUeXBlIGtleVR5cGUsIEhEVSogcCk7CgogIH07 CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBLZXl3b3JkJiBIRFU6OmFkZEtleShjb25zdCBz dHJpbmcmIG5hbWUsIFQgdmFsdWUsIGNvbnN0IHN0cmluZyYgY29tbWVudCkKICB7CiAgICAgICAg ICAgICAgTmV3S2V5d29yZDxUPiBrZXlDcmVhdG9yKHRoaXMsdmFsdWUpOwogICAgICAgICAgICAg IEtleXdvcmQmIG5ld0tleSA9ICooYWRkS2V5d29yZChrZXlDcmVhdG9yLmNyZWF0ZUtleXdvcmQo bmFtZSxjb21tZW50KSkpOwogICAgICAgICAgICAgIHJldHVybiBuZXdLZXk7CiAgfQoKICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIEhEVTo6cmVhZEtleShjb25zdCBzdHJpbmcmIGtleU5h bWUsIFQmIHZhbCkKICB7CiAgICAgICAgICBLZXl3b3JkJiBrZXkgPSByZWFkS2V5d29yZChrZXlO YW1lKTsKICAgICAgICAgIGtleS52YWx1ZSh2YWwpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CiAgdm9pZCBIRFU6OnJlYWRLZXlzKHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtleU5hbWVzLCBz dGQ6OnZlY3RvcjxUPiYgdmFscykKICB7CiAgICAgICAgICBzaXplX3QgblJlYWQgPSBrZXlOYW1l cy5zaXplKCk7CgogICAgICAgICAgc3RkOjpsaXN0PHN0cmluZz4gdmFsS2V5czsKICAgICAgICAg IHN0ZDo6bGlzdDxUPiB2YWxMaXN0OwogICAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBu UmVhZDsgaSsrKSB2YWxLZXlzLnB1c2hfYmFjayhrZXlOYW1lc1tpXSk7CgoKICAgICAgICAgIHJl YWRLZXl3b3Jkcyh2YWxLZXlzKTsKCgoKCiAgICAgICAgICBUIGN1cnJlbnQ7CiAgICAgICAgICBz dGQ6Omxpc3Q8c3RyaW5nPjo6aXRlcmF0b3IgaXQgPSB2YWxLZXlzLmJlZ2luKCk7CiAgICAgICAg ICB3aGlsZSAoaXQgIT0gdmFsS2V5cy5lbmQoKSkKICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgdHJ5CiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgICBtX2tl eVdvcmRbKml0XS0+dmFsdWUoY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs TGlzdC5wdXNoX2JhY2soY3VycmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgKytpdDsK ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICBjYXRjaCAoIEtleXdvcmQ6Oldy b25nS2V5d29yZFZhbHVlVHlwZSApCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgICBpdCA9IHZhbEtleXMuZXJhc2UoaXQpOwogICAgICAgICAgICAgICAgICB9CiAg ICAgICAgICB9CgogICAgICAgICAga2V5TmFtZXMuZXJhc2Uoa2V5TmFtZXMuYmVnaW4oKSxrZXlO YW1lcy5lbmQoKSk7CgogICAgICAgICAgaWYgKCF2YWxMaXN0LmVtcHR5KCkpCiAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgIGlmICh2YWxMaXN0LnNpemUoKSAhPSB2YWxzLnNpemUoKSkgdmFs cy5yZXNpemUodmFsTGlzdC5zaXplKCkpOwoKICAgICAgICAgICAgICAgICAgc2l6ZV90IGk9MDsK ICAgICAgICAgICAgICAgICAgZm9yIChzdGQ6Omxpc3Q8VD46OmNvbnN0X2l0ZXJhdG9yIGl0MSA9 IHZhbExpc3QuYmVnaW4oKTsgaXQxICE9IHZhbExpc3QuZW5kKCk7ICsraXQxLCsraSkKICAgICAg ICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHNbaV0gPSAqaXQxOwog ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGZvciAoc3RkOjpsaXN0PHN0cmlu Zz46OmNvbnN0X2l0ZXJhdG9yIGl0MT0gdmFsS2V5cy5iZWdpbigpOyBpdDEgIT0gdmFsS2V5cy5l bmQoKTsgKytpdDEpCiAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICBrZXlOYW1lcy5wdXNoX2JhY2soKml0MSk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAg IH0KCiAgfQojIDgzNiAiSERVLmgiCiAgaW5saW5lIHN0ZDo6bWFwPHN0cmluZywgS2V5d29yZCo+ IEhEVTo6a2V5V29yZCAoKQogIHsKCgoKICAgIHJldHVybiBtX2tleVdvcmQ7CiAgfQoKICBpbmxp bmUgS2V5d29yZCYgSERVOjprZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleU5hbWUpCiAgewoKICBz dGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+OjppdGVyYXRvciBrZXkgPSBtX2tleVdvcmQuZmluZChr ZXlOYW1lKTsKICBpZiAoa2V5ID09IG1fa2V5V29yZC5lbmQoKSkgdGhyb3cgSERVOjpOb1N1Y2hL ZXl3b3JkKGtleU5hbWUpOwogIHJldHVybiAqKCgqa2V5KS5zZWNvbmQpOwoKICB9CgogIGlubGlu ZSBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVhbSYgcywgY29uc3QgQ0NmaXRzOjpIRFUmIHJp Z2h0KQogIHsKCiAgICAgcmV0dXJuIHJpZ2h0LnB1dChzKTsKCiAgfQoKICBpbmxpbmUgbG9uZyBI RFU6OmF4ZXMgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9uYXhpczsKICB9CgogIGlubGlu ZSBsb25nIEhEVTo6YXhpcyAoc2l6ZV90IGluZGV4KSBjb25zdAogIHsKCgoKICAgIHJldHVybiBt X25heGVzW2luZGV4XTsKICB9CgogIGlubGluZSB2b2lkIEhEVTo6aW5kZXggKGludCB2YWx1ZSkK ICB7CgoKCiAgICBtX2luZGV4ID0gdmFsdWU7CiAgfQoKCgogIGlubGluZSBsb25nJiBIRFU6Om5h eGlzICgpCiAgewoKICAgIHJldHVybiBtX25heGlzOwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6 bmF4aXMgKGNvbnN0IGxvbmcmIHZhbHVlKQogIHsKCiAgICBtX25heGlzID0gdmFsdWU7CgogIH0K CiAgaW5saW5lIGxvbmcgSERVOjpiaXRwaXggKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fYml0 cGl4OwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6Yml0cGl4IChsb25nIHZhbHVlKQogIHsKCiAg ICBtX2JpdHBpeCA9IHZhbHVlOwoKICB9CgogIGlubGluZSBpbnQgSERVOjppbmRleCAoKSBjb25z dAogIHsKCiAgICByZXR1cm4gbV9pbmRleDsKCiAgfQoKICBpbmxpbmUgYm9vbCYgSERVOjphbnlu dWwgKCkKICB7CgogICAgcmV0dXJuIG1fYW55bnVsOwoKICB9CgogIGlubGluZSB2b2lkIEhEVTo6 YW55bnVsIChjb25zdCBib29sJiB2YWx1ZSkKICB7CgogICAgbV9hbnludWwgPSB2YWx1ZTsKCiAg fQoKICBpbmxpbmUgY29uc3Qgc3RyaW5nJiBIRFU6Omhpc3RvcnkgKCkgY29uc3QKICB7CgogICAg cmV0dXJuIG1faGlzdG9yeTsKCiAgfQoKICBpbmxpbmUgY29uc3Qgc3RyaW5nJiBIRFU6OmNvbW1l bnQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fY29tbWVudDsKCiAgfQoKCgogIGlubGluZSBj b25zdCBzdGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+JiBIRFU6OmtleVdvcmQgKCkgY29uc3QKICB7 CgogICAgcmV0dXJuIG1fa2V5V29yZDsKCiAgfQoKICBpbmxpbmUgY29uc3QgS2V5d29yZCYgSERV OjprZXlXb3JkIChjb25zdCBzdHJpbmcmIGtleW5hbWUpIGNvbnN0CiAgewoKICBzdGQ6Om1hcDxz dHJpbmcsS2V5d29yZCo+Ojpjb25zdF9pdGVyYXRvciBrZXkgPSBtX2tleVdvcmQuZmluZChrZXlu YW1lKTsKICBpZiAoa2V5ID09IG1fa2V5V29yZC5lbmQoKSkgdGhyb3cgSERVOjpOb1N1Y2hLZXl3 b3JkKGtleW5hbWUpOwogIHJldHVybiAqKCgqa2V5KS5zZWNvbmQpOwoKICB9CgogIGlubGluZSB2 b2lkIEhEVTo6c2V0S2V5V29yZCAoY29uc3Qgc3RyaW5nJiBrZXluYW1lLCBLZXl3b3JkJiB2YWx1 ZSkKICB7CgogIG1fa2V5V29yZFtrZXluYW1lXSA9ICZ2YWx1ZTsKCiAgfQoKICBpbmxpbmUgRklU U0Jhc2UqJiBIRFU6OnBhcmVudCAoKQogIHsKCiAgICByZXR1cm4gbV9wYXJlbnQ7CgogIH0KCiAg aW5saW5lIHN0ZDo6dmVjdG9yPGxvbmc+JiBIRFU6Om5heGVzICgpCiAgewoKICAgIHJldHVybiBt X25heGVzOwoKICB9CgogIGlubGluZSBsb25nJiBIRFU6Om5heGVzIChzaXplX3QgaW5kZXgpCiAg ewoKICAgIHJldHVybiBtX25heGVzW2luZGV4XTsKCiAgfQoKICBpbmxpbmUgdm9pZCBIRFU6Om5h eGVzIChzaXplX3QgaW5kZXgsIGNvbnN0IGxvbmcmIHZhbHVlKQogIHsKCiAgICBtX25heGVzW2lu ZGV4XSA9IHZhbHVlOwoKICB9Cgp9CiMgMTYgIktleXdvcmRULmgiIDIKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyAxNyAiS2V5d29yZFQuaCIgMgoKCgoKCgpuYW1lc3Bh Y2UgQ0NmaXRzCnsKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgICAgICAgVCYgS2V5 d29yZDo6dmFsdWUgKFQmIHZhbCkgY29uc3QKICAgICAgICB7CiAgICAgICAgICAgICAgICB0cnkK ICAgICAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBLZXlEYXRh PFQ+JiB0aGlzS2V5ID0gZHluYW1pY19jYXN0PGNvbnN0IEtleURhdGE8VD4mPigqdGhpcyk7CiAg ICAgICAgICAgICAgICAgICAgICAgIHZhbCA9IHRoaXNLZXkua2V5dmFsKCk7CiAgICAgICAgICAg ICAgICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICBjYXRjaCAoc3RkOjpiYWRfY2FzdCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgICAgICAgdGhyb3cgS2V5d29yZDo6V3JvbmdLZXl3b3JkVmFsdWVUeXBlKG5hbWUoKSk7CiAg ICAgICAgICAgICAgICB9CgogICAgICAgIH0KCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CiAgICAgICAgdm9pZCBLZXl3b3JkOjpzZXRWYWx1ZSAoY29uc3QgVCYgbmV3VmFsdWUpCiAgICAg ICAgewogICAgICAgICAgICAgICAgdHJ5CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgIEtleURhdGE8VD4mIHRoaXNLZXkgPSBkeW5hbWljX2Nhc3Q8S2V5RGF0YTxUPiY+ KCp0aGlzKTsKICAgICAgICAgICAgICAgICAgICAgICAgdGhpc0tleS5rZXl2YWwobmV3VmFsdWUp OwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgY2F0Y2ggKHN0ZDo6YmFkX2Nhc3Qp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEtleXdvcmQ6 Oldyb25nS2V5d29yZFZhbHVlVHlwZShuYW1lKCkpOwogICAgICAgICAgICAgICAgfQoKICAgICAg ICB9Cgp9CiMgMzAgIkV4dEhEVS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9zdHJp bmciIDEgMwojIDM0ICJFeHRIRFUuaCIgMgoKIyAxICJIRFUuaCIgMQojIDM2ICJFeHRIRFUuaCIg MgoKIyAxICJGaXRzRXJyb3IuaCIgMQojIDM4ICJFeHRIRFUuaCIgMgoKbmFtZXNwYWNlIENDZml0 cyB7CiAgY2xhc3MgQ29sdW1uOwoKfQojIDUxICJFeHRIRFUuaCIKbmFtZXNwYWNlIENDZml0cyB7 CiMgNDM1ICJFeHRIRFUuaCIKICBjbGFzcyBFeHRIRFUgOiBwdWJsaWMgSERVCiAgewoKCgogICAg cHVibGljOgoKCgoKCgoKICAgICAgY2xhc3MgV3JvbmdFeHRlbnNpb25UeXBlIDogcHVibGljIEZp dHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBXcm9uZ0V4 dGVuc2lvblR5cGUgKGNvbnN0IHN0cmluZyYgbXNnLCBib29sIHNpbGVudCA9IHRydWUpOwoKICAg ICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgogICAgICB9 OwoKCiAgICAgICAgRXh0SERVKGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKCiAgICAgICAgdmlydHVh bCB+RXh0SERVKCk7CgoKICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRvcjwoY29uc3QgRXh0SERV ICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKICAgICAgICBmcmllbmQgYm9vbCBvcGVyYXRv cj4oY29uc3QgRXh0SERVICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpOwoKICAgICAgICBmcmll bmQgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0 KTsKCiAgICAgICAgZnJpZW5kIGJvb2wgb3BlcmF0b3I+PShjb25zdCBFeHRIRFUgJmxlZnQsY29u c3QgRXh0SERVICZyaWdodCk7CgoKCgogICAgICAgIHN0YXRpYyB2b2lkIHJlYWRIZHVOYW1lIChj b25zdCBmaXRzZmlsZSogZnB0ciwgaW50IGhkdUluZGV4LCBzdHJpbmcmIGhkdU5hbWUsIGludCYg aGR1VmVyc2lvbik7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgcmVhZERhdGEgKGJvb2wgcmVhZEZs YWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYga2V5cyA9IHN0ZDo6dmVjdG9y PHN0cmluZz4oKSkgPSAwOwoKCiAgICAgICAgY29uc3Qgc3RyaW5nJiBuYW1lICgpIGNvbnN0OwoK CiAgICAgICAgdmlydHVhbCBIRFUgKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNvbnN0ID0gMDsKCgoK CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIG1ha2VUaGlzQ3VycmVudCAoKSBjb25zdDsKCgogICAg ICAgIHZpcnR1YWwgQ29sdW1uJiBjb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sTmFtZSkgY29uc3Q7 CgoKICAgICAgICB2aXJ0dWFsIENvbHVtbiYgY29sdW1uIChpbnQgY29sSW5kZXgpIGNvbnN0OwoK CiAgICAgICAgdmlydHVhbCBsb25nIHJvd3MgKCkgY29uc3Q7CgoKICAgICAgICB2aXJ0dWFsIHZv aWQgYWRkQ29sdW1uIChWYWx1ZVR5cGUgdHlwZSwgY29uc3Qgc3RyaW5nJiBjb2x1bW5OYW1lLCBs b25nIHJlcGVhdFdpZHRoLCBjb25zdCBzdHJpbmcmIGNvbFVuaXQgPSBzdHJpbmcoIiIpLCBsb25n IGRlY2ltYWxzID0gLTEsIHNpemVfdCBjb2x1bW5OdW1iZXIgPSAwKTsKCgogICAgICAgIHZpcnR1 YWwgdm9pZCBkZWxldGVDb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sdW1uTmFtZSk7CgoKCgogICAg ICAgIGludCB2ZXJzaW9uICgpIGNvbnN0OwogICAgICAgIHZvaWQgdmVyc2lvbiAoaW50IHZhbHVl KTsKCgoKCgogICAgICAgIHN0ZDo6c3RyaW5nJiBuYW1lICgpOwoKICAgIHB1YmxpYzoKIyA1MzQg IkV4dEhEVS5oIgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KICAgICAgdm9pZCB3cml0ZShj b25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAgICAgICAgbG9uZyBu RWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0 YSwKICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpOwoKCiAgICAgIHRlbXBsYXRlIDx0 eXBlbmFtZSBTPgogICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgbG9uZyBuRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJh eTxTPiYgZGF0YSwKICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpOwoKICAgICAgdGVt cGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2ZWN0b3I8bG9u Zz4mIGZpcnN0LAogICAgICAgICAgICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAg ICAgICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8Uz4mIGRhdGEpOwoKCiAgICAgIHRlbXBsYXRl IDx0eXBlbmFtZSBTPgogICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgbG9uZyBuRWxlbWVudHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxh cnJheTxTPiYgZGF0YSk7CgogICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgUz4KICAgICAgdm9pZCB3 cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSk7CgoKCgoKCiAgICAgIHRlbXBsYXRl IDx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlKSA7 CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJy YXk8Uz4mIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBmaXJzdCwKICAgICAgICAg ICAgICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgUyogbnVs bFZhbHVlKSA7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICB2b2lkIHJlYWQgKHN0 ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLAogICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2 ZWN0b3I8bG9uZz4mIGZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBuRWxlbWVudHMs CiAgICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFsdWUpIDsKCiAgICAgIHRlbXBsYXRlPHR5 cGVuYW1lIFM+CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYgaW1hZ2UsCiAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwK ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBzdHJpZGUpIDsK CiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJh eTxTPiYgaW1hZ2UsCiAgICAgICAgICAgICAgICAgICAgICBsb25nIGZpcnN0LAogICAgICAgICAg ICAgICAgICAgICAgbG9uZyBuRWxlbWVudHMpIDsKCiAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFM+ CiAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYgaW1hZ2UsCiAgICAgICAgICAgICAg ICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAgICAg ICAgICBsb25nIG5FbGVtZW50cykgOwoKICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg dm9pZCByZWFkIChzdGQ6OnZhbGFycmF5PFM+JiBpbWFnZSwKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwKICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LAogICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSwKICAgICAgICAgICAgICAgICAg ICAgIFMqIG51bGxWYWx1ZSkgOwoKCgogICAgcHJvdGVjdGVkOgoKCgogICAgICAgIEV4dEhEVSAo RklUU0Jhc2UqIHAgPSAwLCBIZHVUeXBlIHh0eXBlID0gQW55SGR1LCBjb25zdCBzdHJpbmcgJmhk dU5hbWUgPSBzdHJpbmcoIiIpLCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKICAgICAgICBFeHRIRFUg KEZJVFNCYXNlKiBwLCBIZHVUeXBlIHh0eXBlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGludCBi aXRwaXgsIGludCBuYXhpcywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGF4ZXMsIGludCB2ZXJz aW9uID0gMSk7CgoKCgoKICAgICAgICBFeHRIRFUgKEZJVFNCYXNlKiBwLCBIZHVUeXBlIHh0eXBl LCBpbnQgbnVtYmVyKTsKCgoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0IChvc3RyZWFt ICZzKSBjb25zdCA9IDA7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY29sdW1uIChjb25zdCBzdHJp bmcmIGNvbG5hbWUsIENvbHVtbiogdmFsdWUpOwoKCiAgICAgICAgdmlydHVhbCB2b2lkIGNoZWNr RXh0ZW5zaW9uVHlwZSAoKSBjb25zdDsKCgogICAgICAgIGludCBnZXRWZXJzaW9uICgpOwoKCgoK ICAgICAgICBsb25nIHBjb3VudCAoKSBjb25zdDsKICAgICAgICB2b2lkIHBjb3VudCAobG9uZyB2 YWx1ZSk7CgoKICAgICAgICBsb25nIGdjb3VudCAoKSBjb25zdDsKICAgICAgICB2b2lkIGdjb3Vu dCAobG9uZyB2YWx1ZSk7CgoKICAgICAgICBIZHVUeXBlIHh0ZW5zaW9uICgpIGNvbnN0OwogICAg ICAgIHZvaWQgeHRlbnNpb24gKEhkdVR5cGUgdmFsdWUpOwoKCgoKCiAgICBwcml2YXRlOgoKCgog ICAgICAgIHZpcnR1YWwgdm9pZCBpbml0UmVhZCAoKSA9IDA7CgoKICAgICAgICB2b2lkIGNoZWNr WHRlbnNpb24gKCk7CgoKCgogICAgICAgIHN0YXRpYyBjb25zdCBzdHJpbmcmIG1pc3NIRFUgKCk7 CiAgICAgICAgc3RhdGljIHZvaWQgc2V0TWlzc0hEVSAoY29uc3Qgc3RyaW5nJiB2YWx1ZSk7CgoK CgoKICAgIHByaXZhdGU6CgoKCiAgICAgICAgbG9uZyBtX3Bjb3VudDsKCgoKICAgICAgICBsb25n IG1fZ2NvdW50OwoKCgogICAgICAgIGludCBtX3ZlcnNpb247CgoKCiAgICAgICAgSGR1VHlwZSBt X3h0ZW5zaW9uOwoKCgogICAgICAgIHN0YXRpYyBzdHJpbmcgc19taXNzSERVOwoKCgoKCgogICAg ICAgIHN0ZDo6c3RyaW5nIG1fbmFtZTsKCgoKCgoKICB9OwojIDcxOSAiRXh0SERVLmgiCiAgaW5s aW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0 KQogIHsKCiAgICAgICAgaWYgKGxlZnQubV9uYW1lIDwgcmlnaHQubV9uYW1lKSByZXR1cm4gdHJ1 ZTsKICAgICAgICBpZiAobGVmdC5tX25hbWUgPiByaWdodC5tX25hbWUpIHJldHVybiBmYWxzZTsK ICAgICAgICBpZiAobGVmdC5tX25hbWUgPT0gcmlnaHQubV9uYW1lKQogICAgICAgIHsKICAgICAg ICAgICAgICAgIGlmIChsZWZ0Lm1fdmVyc2lvbiA8IHJpZ2h0Lm1fdmVyc2lvbikgcmV0dXJuIHRy dWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBv cGVyYXRvcj4oY29uc3QgRXh0SERVICZsZWZ0LGNvbnN0IEV4dEhEVSAmcmlnaHQpCiAgewoKICAg ICByZXR1cm4gIW9wZXJhdG9yPD0obGVmdCxyaWdodCk7CgogIH0KCiAgaW5saW5lIGJvb2wgb3Bl cmF0b3I8PShjb25zdCBFeHRIRFUgJmxlZnQsY29uc3QgRXh0SERVICZyaWdodCkKICB7CgogICAg ICAgIGlmIChsZWZ0Lm1fbmFtZSA8PSByaWdodC5tX25hbWUpCiAgICAgICAgewogICAgICAgICAg ICAgICAgaWYgKGxlZnQubV92ZXJzaW9uIDw9IHJpZ2h0Lm1fdmVyc2lvbikgcmV0dXJuIHRydWU7 CiAgICAgICAgfQogICAgICAgIHJldHVybiBmYWxzZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBvcGVy YXRvcj49KGNvbnN0IEV4dEhEVSAmbGVmdCxjb25zdCBFeHRIRFUgJnJpZ2h0KQogIHsKCiAgICBy ZXR1cm4gIW9wZXJhdG9yPChsZWZ0LHJpZ2h0KTsKCiAgfQoKCgoKICBpbmxpbmUgY29uc3Qgc3Ry aW5nJiBFeHRIRFU6Om5hbWUgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9uYW1lOwogIH0K CgoKICBpbmxpbmUgbG9uZyBFeHRIRFU6OnBjb3VudCAoKSBjb25zdAogIHsKCiAgICByZXR1cm4g bV9wY291bnQ7CgogIH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjpwY291bnQgKGxvbmcgdmFsdWUp CiAgewoKICAgIG1fcGNvdW50ID0gdmFsdWU7CgogIH0KCiAgaW5saW5lIGxvbmcgRXh0SERVOjpn Y291bnQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZ2NvdW50OwoKICB9CgogIGlubGluZSB2 b2lkIEV4dEhEVTo6Z2NvdW50IChsb25nIHZhbHVlKQogIHsKCiAgICBtX2djb3VudCA9IHZhbHVl OwoKICB9CgogIGlubGluZSBpbnQgRXh0SERVOjp2ZXJzaW9uICgpIGNvbnN0CiAgewoKICAgIHJl dHVybiBtX3ZlcnNpb247CgogIH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjp2ZXJzaW9uIChpbnQg dmFsdWUpCiAgewoKICAgIG1fdmVyc2lvbiA9IHZhbHVlOwoKICB9CgogIGlubGluZSBIZHVUeXBl IEV4dEhEVTo6eHRlbnNpb24gKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1feHRlbnNpb247Cgog IH0KCiAgaW5saW5lIHZvaWQgRXh0SERVOjp4dGVuc2lvbiAoSGR1VHlwZSB2YWx1ZSkKICB7Cgog ICAgbV94dGVuc2lvbiA9IHZhbHVlOwoKICB9CgogIGlubGluZSBjb25zdCBzdHJpbmcmIEV4dEhE VTo6bWlzc0hEVSAoKQogIHsKCiAgICByZXR1cm4gc19taXNzSERVOwoKICB9CgogIGlubGluZSB2 b2lkIEV4dEhEVTo6c2V0TWlzc0hEVSAoY29uc3Qgc3RyaW5nJiB2YWx1ZSkKICB7CgogICAgc19t aXNzSERVID0gdmFsdWU7CgogIH0KCgoKICBpbmxpbmUgc3RkOjpzdHJpbmcmIEV4dEhEVTo6bmFt ZSAoKQogIHsKCiAgICByZXR1cm4gbV9uYW1lOwoKICB9Cgp9CiMgNDMgIlRhYmxlLmgiIDIKCiMg MSAiRml0c0Vycm9yLmgiIDEKIyA0NSAiVGFibGUuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAg Y2xhc3MgQ29sdW1uOwoKfQojIDU4ICJUYWJsZS5oIgpuYW1lc3BhY2UgQ0NmaXRzIHsKIyAzMTUg IlRhYmxlLmgiCiAgY2xhc3MgVGFibGUgOiBwdWJsaWMgRXh0SERVCiAgewoKCgogICAgcHVibGlj OgojIDMyOSAiVGFibGUuaCIKICAgICAgY2xhc3MgTm9TdWNoQ29sdW1uIDogcHVibGljIEZpdHNF eGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBOb1N1Y2hDb2x1 bW4gKGNvbnN0IHN0cmluZyYgbmFtZSwgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCgogICAgICAgICAg ICBOb1N1Y2hDb2x1bW4gKGludCBpbmRleCwgYm9vbCBzaWxlbnQgPSB0cnVlKTsKCiAgICAgICAg cHJvdGVjdGVkOgogICAgICAgIHByaXZhdGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKIyAz NTIgIlRhYmxlLmgiCiAgICAgIGNsYXNzIEludmFsaWRDb2x1bW5TcGVjaWZpY2F0aW9uIDogcHVi bGljIEZpdHNFeGNlcHRpb24KICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBJ bnZhbGlkQ29sdW1uU3BlY2lmaWNhdGlvbiAoY29uc3Qgc3RyaW5nJiBtc2csIGJvb2wgc2lsZW50 ID0gdHJ1ZSk7CgogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAgIHBy aXZhdGU6CiAgICAgIH07CgoKICAgICAgICBUYWJsZShjb25zdCBUYWJsZSAmcmlnaHQpOwoKCiAg ICAgICAgdmlydHVhbCB+VGFibGUoKTsKCgoKCiAgICAgICAgY29uc3Qgc3RkOjptYXA8c3RyaW5n LENvbHVtbio+JiBjb2x1bW4gKCkgY29uc3Q7CgoKCiAgICAgICAgdmlydHVhbCBDb2x1bW4mIGNv bHVtbiAoY29uc3Qgc3RyaW5nJiBjb2xOYW1lKSBjb25zdDsKCgogICAgICAgIHZpcnR1YWwgQ29s dW1uJiBjb2x1bW4gKGludCBjb2xJbmRleAogICAgICAgICkgY29uc3Q7CgoKICAgICAgICB2aXJ0 dWFsIGxvbmcgcm93cyAoKSBjb25zdDsKCgogICAgICAgIHZvaWQgdXBkYXRlUm93cyAoKTsKCgog ICAgICAgIHZvaWQgcm93cyAobG9uZyBudW1Sb3dzKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBk ZWxldGVDb2x1bW4gKGNvbnN0IHN0cmluZyYgbmFtZSk7CgoKCiAgICAgICAgdm9pZCBpbnNlcnRS b3dzIChsb25nIGZpcnN0LCBsb25nIG51bWJlciA9IDEpOwoKCiAgICAgICAgdm9pZCBkZWxldGVS b3dzIChsb25nIGZpcnN0LCBsb25nIG51bWJlciA9IDEpOwoKCiAgICAgICAgdm9pZCBkZWxldGVS b3dzIChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgcm93TGlzdCk7CgoKCgoKCiAgICAgICAgdmly dHVhbCBzdGQ6Om1hcDxzdHJpbmcsIENvbHVtbio+JiBjb2x1bW4gKCk7CgogICAgcHVibGljOgoK CgoKICAgIHByb3RlY3RlZDoKCgogICAgICAgIFRhYmxlIChGSVRTQmFzZSogcCwgSGR1VHlwZSB4 dHlwZSwgY29uc3Qgc3RyaW5nICZoZHVOYW1lLCBpbnQgcm93cywKICAgICAgICBjb25zdCBzdGQ6 OnZlY3RvcjxzdHJpbmc+JiBjb2x1bW5OYW1lLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBj b2x1bW5GbXQsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVtblVuaXQgPSBzdGQ6OnZl Y3RvcjxzdHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKCiAgICAgICAgVGFibGUgKEZJVFNC YXNlKiBwLCBIZHVUeXBlIHh0eXBlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUgPSBzdHJpbmcoIiIp LCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKCiAgICAgICAgVGFibGUgKEZJVFNCYXNlKiBwLCBIZHVU eXBlIHh0eXBlLCBpbnQgbnVtYmVyKTsKCgoKCiAgICAgICAgdmlydHVhbCBvc3RyZWFtICYgcHV0 IChvc3RyZWFtICZzKSBjb25zdDsKCgogICAgICAgIHZvaWQgY29sdW1uIChpbnQgY29sdW1uTnVt LCBDb2x1bW4gKnZhbHVlKTsKCgogICAgICAgIHZvaWQgaW5pdCAoYm9vbCByZWFkRmxhZyA9IGZh bHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5n PigpKTsKCgogICAgICAgIHZpcnR1YWwgdm9pZCBjb2x1bW4gKGNvbnN0IHN0cmluZyYgY29sbmFt ZSwgQ29sdW1uKiB2YWx1ZSk7CgoKICAgICAgICB2aXJ0dWFsIHZvaWQgY2hlY2tFeHRlbnNpb25U eXBlICgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCByZWluZGV4ICgpOwoKCgoKICAgICAgICBpbnQg bnVtQ29scyAoKSBjb25zdDsKICAgICAgICB2b2lkIG51bUNvbHMgKGludCB2YWx1ZSk7CgoKCgoK ICAgIHByaXZhdGU6CgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGluaXRSZWFkICgpOwoKCiAgICAg ICAgdmlydHVhbCB2b2lkIHJlYWRUYWJsZUhlYWRlciAoaW50IG5jb2xzLCBzdGQ6OnZlY3Rvcjxz dHJpbmc+JiBjb2xOYW1lLCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xGbXQsIHN0ZDo6dmVjdG9y PHN0cmluZz4mIGNvbFVuaXQpID0gMDsKCgoKICAgICAgICB2b2lkIGNsZWFyRGF0YSAoKTsKCgog ICAgICAgIHZvaWQgY29weURhdGEgKGNvbnN0IFRhYmxlJiByaWdodCk7CgoKCgoKICAgIHByaXZh dGU6CgoKCiAgICAgICAgaW50IG1fbnVtQ29sczsKCgoKCgoKICAgICAgICBzdGQ6Om1hcDxzdHJp bmcsIENvbHVtbio+IG1fY29sdW1uOwoKCgoKCgoKICAgICAgZnJpZW5kIGNsYXNzIENvbHVtbjsK CiAgfTsKIyA1MTcgIlRhYmxlLmgiCiAgaW5saW5lIGNvbnN0IHN0ZDo6bWFwPHN0cmluZyxDb2x1 bW4qPiYgVGFibGU6OmNvbHVtbiAoKSBjb25zdAogIHsKCiAgcmV0dXJuIG1fY29sdW1uOwoKICB9 CgogIGlubGluZSBsb25nIFRhYmxlOjpyb3dzICgpIGNvbnN0CiAgewoKCgogICAgcmV0dXJuIGF4 aXMoMSk7CiAgfQoKICBpbmxpbmUgdm9pZCBUYWJsZTo6cm93cyAobG9uZyBudW1Sb3dzKQogIHsK CgoKICAgIG5heGVzKDEpID0gbnVtUm93czsKICB9CgogIGlubGluZSB2b2lkIFRhYmxlOjpjaGVj a0V4dGVuc2lvblR5cGUgKCkgY29uc3QKICB7CgoKCgogIH0KCgoKICBpbmxpbmUgaW50IFRhYmxl OjpudW1Db2xzICgpIGNvbnN0CiAgewoKICAgIHJldHVybiBtX251bUNvbHM7CgogIH0KCiAgaW5s aW5lIHZvaWQgVGFibGU6Om51bUNvbHMgKGludCB2YWx1ZSkKICB7CgogICAgbV9udW1Db2xzID0g dmFsdWU7CgogIH0KCgoKICBpbmxpbmUgc3RkOjptYXA8c3RyaW5nLCBDb2x1bW4qPiYgVGFibGU6 OmNvbHVtbiAoKQogIHsKCiAgICByZXR1cm4gbV9jb2x1bW47CgogIH0KCn0KIyAzMSAiRklUUy5j eHgiIDIKCiMgMSAiUEhEVS5oIiAxCiMgMzIgIlBIRFUuaCIKIyAxICIvdXNyL2luY2x1ZGUvZysr LXYzL3ZhbGFycmF5IiAxIDMKIyAzMyAiUEhEVS5oIiAyCgojIDEgIkhEVS5oIiAxCiMgMzUgIlBI RFUuaCIgMgoKIyAxICJGSVRTLmgiIDEKIyAzMCAiRklUUy5oIgpleHRlcm4gIkMiCnsKIyAxICIv dXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMSAzCiMgMjYgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL2ZlYXR1cmVzLmgiIDEgMwojIDI3ICIvdXNyL2luY2x1ZGUv c3lzL3N0YXQuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5 ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL3RpbWUu aCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAyIDMKIyA5NiAiL3Vzci9pbmNs dWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuICJDIiB7CgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3N0 YXQuaCIgMSAzCiMgMzYgIi91c3IvaW5jbHVkZS9iaXRzL3N0YXQuaCIgMwpzdHJ1Y3Qgc3RhdAog IHsKICAgIF9fZGV2X3Qgc3RfZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMTsKCiAg ICBfX2lub190IHN0X2lubzsKCgoKICAgIF9fbW9kZV90IHN0X21vZGU7CiAgICBfX25saW5rX3Qg c3Rfbmxpbms7CiAgICBfX3VpZF90IHN0X3VpZDsKICAgIF9fZ2lkX3Qgc3RfZ2lkOwogICAgX19k ZXZfdCBzdF9yZGV2OwogICAgdW5zaWduZWQgc2hvcnQgaW50IF9fcGFkMjsKCiAgICBfX29mZl90 IHN0X3NpemU7CgoKCiAgICBfX2Jsa3NpemVfdCBzdF9ibGtzaXplOwoKCiAgICBfX2Jsa2NudF90 IHN0X2Jsb2NrczsKCgoKICAgIF9fdGltZV90IHN0X2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBp bnQgX191bnVzZWQxOwogICAgX190aW1lX3Qgc3RfbXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGlu dCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBzdF9jdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50 IF9fdW51c2VkMzsKCiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDQ7CiAgICB1bnNpZ25l ZCBsb25nIGludCBfX3VudXNlZDU7CgoKCiAgfTsKCgpzdHJ1Y3Qgc3RhdDY0CiAgewogICAgX19k ZXZfdCBzdF9kZXY7CiAgICB1bnNpZ25lZCBpbnQgX19wYWQxOwoKICAgIF9faW5vX3QgX19zdF9p bm87CiAgICBfX21vZGVfdCBzdF9tb2RlOwogICAgX19ubGlua190IHN0X25saW5rOwogICAgX191 aWRfdCBzdF91aWQ7CiAgICBfX2dpZF90IHN0X2dpZDsKICAgIF9fZGV2X3Qgc3RfcmRldjsKICAg IHVuc2lnbmVkIGludCBfX3BhZDI7CiAgICBfX29mZjY0X3Qgc3Rfc2l6ZTsKICAgIF9fYmxrc2l6 ZV90IHN0X2Jsa3NpemU7CgogICAgX19ibGtjbnQ2NF90IHN0X2Jsb2NrczsKICAgIF9fdGltZV90 IHN0X2F0aW1lOwogICAgdW5zaWduZWQgbG9uZyBpbnQgX191bnVzZWQxOwogICAgX190aW1lX3Qg c3RfbXRpbWU7CiAgICB1bnNpZ25lZCBsb25nIGludCBfX3VudXNlZDI7CiAgICBfX3RpbWVfdCBz dF9jdGltZTsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdW51c2VkMzsKICAgIF9faW5vNjRfdCBz dF9pbm87CiAgfTsKIyA5OSAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDIgMwojIDIwMCAiL3Vz ci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBzdGF0IChfX2NvbnN0IGNoYXIgKl9f cmVzdHJpY3QgX19maWxlLAogICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0 IF9fYnVmKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBz dGF0ICpfX2J1ZikgdGhyb3cgKCk7CiMgMjE5ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpl eHRlcm4gaW50IHN0YXQ2NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAg ICAgICAgICAgICAgIHN0cnVjdCBzdGF0NjQgKl9fcmVzdHJpY3QgX19idWYpIHRocm93ICgpOwpl eHRlcm4gaW50IGZzdGF0NjQgKGludCBfX2ZkLCBzdHJ1Y3Qgc3RhdDY0ICpfX2J1ZikgdGhyb3cg KCk7CgoKCgoKCmV4dGVybiBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zp bGUsCiAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJv dyAoKTsKIyAyNDEgIi91c3IvaW5jbHVkZS9zeXMvc3RhdC5oIiAzCmV4dGVybiBpbnQgbHN0YXQ2 NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZSwKICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc3RhdDY0ICpfX3Jlc3RyaWN0IF9fYnVmKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGlu dCBjaG1vZCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fbW9kZV90IF9fbW9kZSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgZmNobW9kIChpbnQgX19mZCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gX19tb2RlX3QgdW1hc2sgKF9fbW9kZV90IF9fbWFzaykgdGhyb3cgKCk7 CgoKCgpleHRlcm4gX19tb2RlX3QgZ2V0dW1hc2sgKHZvaWQpIHRocm93ICgpOwoKCgpleHRlcm4g aW50IG1rZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3QgX19tb2RlKSB0aHJvdyAo KTsKCgoKCgpleHRlcm4gaW50IG1rbm9kIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19tb2RlX3Qg X19tb2RlLCBfX2Rldl90IF9fZGV2KQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBta2Zp Zm8gKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX21vZGVfdCBfX21vZGUpIHRocm93ICgpOwojIDMw NiAiL3Vzci9pbmNsdWRlL3N5cy9zdGF0LmgiIDMKZXh0ZXJuIGludCBfX2Z4c3RhdCAoaW50IF9f dmVyLCBpbnQgX19maWxkZXMsIHN0cnVjdCBzdGF0ICpfX3N0YXRfYnVmKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBfX3hzdGF0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAqX19maWxlbmFtZSwKICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CmV4dGVy biBpbnQgX19seHN0YXQgKGludCBfX3ZlciwgX19jb25zdCBjaGFyICpfX2ZpbGVuYW1lLAogICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdCAqX19zdGF0X2J1ZikgdGhyb3cgKCk7CiMgMzMw ICIvdXNyL2luY2x1ZGUvc3lzL3N0YXQuaCIgMwpleHRlcm4gaW50IF9fZnhzdGF0NjQgKGludCBf X3ZlciwgaW50IF9fZmlsZGVzLCBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKQogICAgIHRocm93 ICgpOwpleHRlcm4gaW50IF9feHN0YXQ2NCAoaW50IF9fdmVyLCBfX2NvbnN0IGNoYXIgKl9fZmls ZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRfYnVmKSB0 aHJvdyAoKTsKZXh0ZXJuIGludCBfX2x4c3RhdDY0IChpbnQgX192ZXIsIF9fY29uc3QgY2hhciAq X19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3RhdDY0ICpfX3N0YXRf YnVmKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgX194bWtub2QgKGludCBfX3ZlciwgX19jb25zdCBj aGFyICpfX3BhdGgsIF9fbW9kZV90IF9fbW9kZSwKICAgICAgICAgICAgICAgICAgICAgX19kZXZf dCAqX19kZXYpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9faW5saW5lX18gaW50IHN0YXQgKF9fY29u c3QgY2hhciAqX19wYXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQg Kl9fc3RhdGJ1ZikgdGhyb3cgKCkKewogIHJldHVybiBfX3hzdGF0ICgzLCBfX3BhdGgsIF9fc3Rh dGJ1Zik7Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbHN0YXQgKF9fY29uc3QgY2hhciAqX19w YXRoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzdGF0ICpfX3N0YXRidWYp IHRocm93ICgpCnsKICByZXR1cm4gX19seHN0YXQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsKfQoK CmV4dGVybiBfX2lubGluZV9fIGludCBmc3RhdCAoaW50IF9fZmQsIHN0cnVjdCBzdGF0ICpfX3N0 YXRidWYpIHRocm93ICgpCnsKICByZXR1cm4gX19meHN0YXQgKDMsIF9fZmQsIF9fc3RhdGJ1Zik7 Cn0KCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgbWtub2QgKF9fY29uc3QgY2hhciAqX19wYXRoLCBf X21vZGVfdCBfX21vZGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kZXZfdCBfX2Rl dikgdGhyb3cgKCkKewogIHJldHVybiBfX3hta25vZCAoMSwgX19wYXRoLCBfX21vZGUsICZfX2Rl dik7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmVfXyBpbnQgc3RhdDY0IChfX2NvbnN0IGNoYXIgKl9f cGF0aCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0 YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9feHN0YXQ2NCAoMywgX19wYXRoLCBfX3N0YXRidWYp Owp9CgoKZXh0ZXJuIF9faW5saW5lX18gaW50IGxzdGF0NjQgKF9fY29uc3QgY2hhciAqX19wYXRo LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHN0YXQ2NCAqX19zdGF0YnVm KSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fbHhzdGF0NjQgKDMsIF9fcGF0aCwgX19zdGF0YnVmKTsK fQoKCmV4dGVybiBfX2lubGluZV9fIGludCBmc3RhdDY0IChpbnQgX19mZCwgc3RydWN0IHN0YXQ2 NCAqX19zdGF0YnVmKSB0aHJvdyAoKQp7CiAgcmV0dXJuIF9fZnhzdGF0NjQgKDMsIF9fZmQsIF9f c3RhdGJ1Zik7Cn0KCgoKCn0KIyAzMyAiRklUUy5oIiAyCn0KCgoKIyAxICIvdXNyL2luY2x1ZGUv ZysrLXYzL21hcCIgMSAzCiMgMzggIkZJVFMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L2V4Y2VwdGlvbiIgMSAzCiMgNDAgIkZJVFMuaCIgMgoKIyAxICIvdXNyL2luY2x1ZGUvZysrLXYz L3N0cmluZyIgMSAzCiMgNDIgIkZJVFMuaCIgMgoKIyAxICJFeHRIRFUuaCIgMQojIDQ0ICJGSVRT LmgiIDIKCiMgMSAiSERVQ3JlYXRvci5oIiAxCiMgMzIgIkhEVUNyZWF0b3IuaCIKIyAxICJDQ2Zp dHMuaCIgMQojIDMzICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My92 ZWN0b3IiIDEgMwojIDM1ICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2crKy12 My9zdHJpbmciIDEgMwojIDM3ICJIRFVDcmVhdG9yLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My92YWxhcnJheSIgMSAzCiMgMzkgIkhEVUNyZWF0b3IuaCIgMgoKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL3R5cGVpbmZvIiAxIDMKIyA0MSAiSERVQ3JlYXRvci5oIiAyCgojIDEgIkZpdHNF cnJvci5oIiAxCiMgNDMgIkhEVUNyZWF0b3IuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAgY2xh c3MgRklUU0Jhc2U7CiAgY2xhc3MgSERVOwogIGNsYXNzIFBIRFU7CiAgY2xhc3MgRXh0SERVOwoK fQoKCgoKCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpuYW1lc3BhY2UgQ0NmaXRzIHsKIyA4MCAiSERV Q3JlYXRvci5oIgogIGNsYXNzIEhEVUNyZWF0b3IKICB7CgoKCiAgICBwdWJsaWM6CgoKICAgICAg ICBIRFVDcmVhdG9yIChGSVRTQmFzZSogcCk7CgoKICAgICAgICB+SERVQ3JlYXRvcigpOwoKCgoK CgogICAgICAgIEhEVSAqIGdldEhkdSAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBib29sIHJlYWRE YXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2 ZWN0b3I8c3RyaW5nPigpLCBib29sIHByaW1hcnkgPSBmYWxzZSwgaW50IHZlcnNpb24gPSAxKTsK CgogICAgICAgIFBIRFUgKiBjcmVhdGVJbWFnZSAoaW50IGJpdHBpeCwgbG9uZyBuYXhpcywgY29u c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzKTsKCgogICAgICAgIHZvaWQgcmVzZXQgKCk7CgoK ICAgICAgICBIRFUqIGNyZWF0ZVRhYmxlIChjb25zdCBzdHJpbmcgJm5hbWUsIEhkdVR5cGUgeHR5 cGUsIGludCByb3dzLCBjb25zdCBzdGQ6OnZlY3RvcjxWYWx1ZVR5cGU+JiBjb2xUeXBlLCBjb25z dCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xOYW1lLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ IGNvbEZtdCwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBjb2xVbml0LCBpbnQgdmVyc2lvbik7 CgoKCgoKCiAgICAgICAgSERVICogZ2V0SGR1IChpbnQgaW5kZXggPSAwLCBib29sIHJlYWREYXRh RmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0 b3I8c3RyaW5nPigpKTsKCgogICAgICAgIEV4dEhEVSAqIGNyZWF0ZUltYWdlIChjb25zdCBzdHJp bmcgJm5hbWUsIGludCBiaXRwaXgsIGxvbmcgbmF4aXMsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+ JiBuYXhlcywgaW50IHZlcnNpb24pOwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCgogICAgcHJpdmF0 ZToKCgoKICAgICAgICBQSERVICogTWFrZUltYWdlIChpbnQgYnBpeCwgaW50IG5heGlzLCBjb25z dCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpOwoKCiAgICAgICAgSERVICogTWFrZSAoY29uc3Qg c3RyaW5nJiBoZHVOYW1lLCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry aW5nPiAma2V5cywgYm9vbCBwcmltYXJ5LCBpbnQgdmVyc2lvbik7CgoKICAgICAgICBIRFUqIE1h a2VUYWJsZSAoY29uc3Qgc3RyaW5nICZuYW1lLCBIZHVUeXBlIHh0eXBlLCBpbnQgcm93cywgY29u c3Qgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry aW5nPiYgY29sTmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29sRm10LCBjb25zdCBz dGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2xVbml0LCBpbnQgdmVyc2lvbik7CgoKICAgICAgICBIRFUg KiBNYWtlIChpbnQgaW5kZXgsIGJvb2wgcmVhZERhdGFGbGFnLCBjb25zdCBzdGQ6OnZlY3Rvcjxz dHJpbmc+ICZrZXlzKTsKCgogICAgICAgIEV4dEhEVSAqIE1ha2VJbWFnZSAoY29uc3Qgc3RyaW5n ICZuYW1lLCBpbnQgYnBpeCwgbG9uZyBuYXhpcywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5h eGVzLCBpbnQgdmVyc2lvbik7CgoKCgoKICAgICAgICBIRFUgKm1faGR1OwoKCgoKCgogICAgcHJp dmF0ZToKCgoKCgogICAgICAgIEZJVFNCYXNlKiBtX3BhcmVudDsKCgoKCgoKICB9OwojIDE3OSAi SERVQ3JlYXRvci5oIgogIGlubGluZSBIRFUgKiBIRFVDcmVhdG9yOjpnZXRIZHUgKGNvbnN0IHN0 cmluZyYgaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmlu Zz4gJmtleXMsIGJvb2wgcHJpbWFyeSwgaW50IHZlcnNpb24pCiAgewoKCiAgaWYgKCBtX2hkdSA9 PSAwICkgbV9oZHUgPSBNYWtlKGhkdU5hbWUscmVhZERhdGFGbGFnLGtleXMscHJpbWFyeSx2ZXJz aW9uKTsKICByZXR1cm4gbV9oZHU7CgogIH0KCiAgaW5saW5lIHZvaWQgSERVQ3JlYXRvcjo6cmVz ZXQgKCkKICB7CgogIG1faGR1ID0gMDsKCiAgfQoKICBpbmxpbmUgSERVKiBIRFVDcmVhdG9yOjpj cmVhdGVUYWJsZSAoY29uc3Qgc3RyaW5nICZuYW1lLCBIZHVUeXBlIHh0eXBlLCBpbnQgcm93cywg Y29uc3Qgc3RkOjp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSwgY29uc3Qgc3RkOjp2ZWN0b3I8 c3RyaW5nPiYgY29sTmFtZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiBjb2xGbXQsIGNvbnN0 IHN0ZDo6dmVjdG9yPHN0cmluZz4gY29sVW5pdCwgaW50IHZlcnNpb24pCiAgewoKCiAgICAgICAg aWYgKG1faGR1ID09IDApIG1faGR1ID0gTWFrZVRhYmxlKG5hbWUseHR5cGUscm93cyxjb2xUeXBl LGNvbE5hbWUsY29sRm10LGNvbFVuaXQsdmVyc2lvbik7CiAgICAgICAgcmV0dXJuIG1faGR1OwoK ICB9CgogIGlubGluZSBIRFUgKiBIRFVDcmVhdG9yOjpnZXRIZHUgKGludCBpbmRleCwgYm9vbCBy ZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJmtleXMpCiAgewoKCiAgaWYg KCBtX2hkdSA9PSAwICkgbV9oZHUgPSBNYWtlKGluZGV4LHJlYWREYXRhRmxhZyxrZXlzKTsKICBy ZXR1cm4gbV9oZHU7CgogIH0KCn0KIyA0NiAiRklUUy5oIiAyCgojIDEgIkZpdHNFcnJvci5oIiAx CiMgNDggIkZJVFMuaCIgMgoKbmFtZXNwYWNlIENDZml0cyB7CiAgY2xhc3MgRklUU0Jhc2U7CiAg Y2xhc3MgUEhEVTsKICBjbGFzcyBUYWJsZTsKCn0KCgoKCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvbWVtb3J5IiAxIDMKIyA2MSAiRklUUy5oIiAyCnVzaW5nIHN0ZDo6c3RyaW5nOwoKCgpuYW1l c3BhY2UgQ0NmaXRzIHsKIyA2MjMgIkZJVFMuaCIKICBjbGFzcyBGSVRTCiAgewoKCgogICAgcHVi bGljOgojIDYzNyAiRklUUy5oIgogICAgICBjbGFzcyBOb1N1Y2hIRFUgOiBwdWJsaWMgRml0c0V4 Y2VwdGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAgIE5vU3VjaEhEVSAo Y29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IHRydWUpOwoKICAgICAgICBwcm90ZWN0 ZWQ6CiAgICAgICAgcHJpdmF0ZToKICAgICAgICBwcml2YXRlOgogICAgICB9OwojIDY1NyAiRklU Uy5oIgogICAgICBjbGFzcyBPcGVyYXRpb25Ob3RTdXBwb3J0ZWQgOiBwdWJsaWMgRml0c0V4Y2Vw dGlvbgogICAgICB7CiAgICAgICAgcHVibGljOgoKCiAgICAgICAgICAgIE9wZXJhdGlvbk5vdFN1 cHBvcnRlZCAoY29uc3Qgc3RyaW5nJiBtc2csIGJvb2wgc2lsZW50ID0gdHJ1ZSk7CgogICAgICAg IHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAgIHByaXZhdGU6CiAgICAgIH07CiMg Njc3ICJGSVRTLmgiCiAgICAgIGNsYXNzIENhbnRPcGVuIDogcHVibGljIEZpdHNFeGNlcHRpb24K ICAgICAgewogICAgICAgIHB1YmxpYzoKCgogICAgICAgICAgICBDYW50T3BlbiAoY29uc3Qgc3Ry aW5nJiBkaWFnLCBib29sIHNpbGVudCA9IGZhbHNlKTsKICAgICAgICAgICAgZXhwbGljaXQgQ2Fu dE9wZW4oY29uc3QgQ2FudE9wZW4mKTsKCiAgICAgICAgcHJvdGVjdGVkOgogICAgICAgIHByaXZh dGU6CiAgICAgICAgcHJpdmF0ZToKICAgICAgfTsKIyA2OTggIkZJVFMuaCIKICAgICAgc3RydWN0 IENhbnRDcmVhdGUgOiBwdWJsaWMgRml0c0V4Y2VwdGlvbgogICAgICB7CgoKICAgICAgICAgICAg Q2FudENyZWF0ZSAoY29uc3Qgc3RyaW5nJiBkaWFnLCBib29sIHNpbGVudCA9IGZhbHNlKTsKCiAg ICAgICAgcHVibGljOgogICAgICAgIHByb3RlY3RlZDoKICAgICAgICBwcml2YXRlOgogICAgICAg IHByaXZhdGU6CiAgICAgIH07CiMgNzIxICJGSVRTLmgiCiAgICAgIHR5cGVkZWYgc3RkOjptdWx0 aW1hcDxzdHJpbmcsRXh0SERVKj4gRXh0TWFwOwojIDczNyAiRklUUy5oIgogICAgICB0eXBlZGVm IEV4dE1hcDo6aXRlcmF0b3IgRXh0TWFwSXQ7CiMgNzUzICJGSVRTLmgiCiAgICAgIHR5cGVkZWYg RXh0TWFwOjpjb25zdF9pdGVyYXRvciBFeHRNYXBDb25zdEl0OwoKCgoKCgogICAgICAgIEZJVFMg KGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2RlIG1vZGUgPSBSZWFkLCBib29sIHJlYWREYXRhRmxh ZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5cyA9IHN0ZDo6 dmVjdG9yPHN0cmluZz4oKSk7CgoKCgoKICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUs IFJXbW9kZSBtb2RlLCBjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGJvb2wgcmVhZERhdGFGbGFnID0g ZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMgPSBzdGQ6OnZlY3Rvcjxz dHJpbmc+KCksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkgPSBzdGQ6OnZl Y3RvcjxzdHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKCgoKICAgICAgICBGSVRTIChjb25z dCBzdHJpbmcgJm5hbWUsIFJXbW9kZSBtb2RlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBo ZHVOYW1lcywgYm9vbCByZWFkRGF0YUZsYWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry aW5nPiYgcHJpbWFyeUtleSA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSk7CgoKCgogICAgICAgIEZJ VFMgKGNvbnN0IHN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IEZJVFMmIHNvdXJjZSk7CgoKCgoKICAg ICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUsIFJXbW9kZSBtb2RlLCBjb25zdCBzdGQ6OnZl Y3RvcjxzdHJpbmc+JiBoZHVOYW1lcywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RkOjp2ZWN0b3I8c3Ry aW5nPiA+JiBoZHVLZXlzLCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZl Y3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5cyA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwgY29uc3Qg c3RkOjp2ZWN0b3I8aW50PiYgaGR1VmVyc2lvbnMgPSBzdGQ6OnZlY3RvcjxpbnQ+KCkpOwoKCgoK ICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcmIG5hbWUsIGludCBiaXRwaXgsIGludCBuYXhpcywg bG9uZyAqbmF4ZXMpOwoKCgoKCiAgICAgICAgRklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21v ZGUgbW9kZSwgaW50IGhkdUluZGV4LCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBz dGQ6OnZlY3RvcjxzdHJpbmc+JiBoZHVLZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpLCBjb25z dCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBwcmltYXJ5S2V5ID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigp KTsKIyA4MDMgIkZJVFMuaCIKICAgICAgICBGSVRTIChjb25zdCBzdHJpbmcgJm5hbWUsIFJXbW9k ZSBtb2RlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBzZWFyY2hLZXlzLCBjb25zdCBzdGQ6 OnZlY3RvcjxzdHJpbmc+ICZzZWFyY2hWYWx1ZXMsIGJvb2wgcmVhZERhdGFGbGFnID0gZmFsc2Us IGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMgPSBzdGQ6OnZlY3RvcjxzdHJpbmc+ KCksIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkgPSBzdGQ6OnZlY3Rvcjxz dHJpbmc+KCksIGludCB2ZXJzaW9uID0gMSk7CgoKICAgICAgICB+RklUUygpOwoKCgoKICAgICAg ICBzdGF0aWMgdm9pZCBjbGVhckVycm9ycyAoKTsKCgogICAgICAgIHZvaWQgZGVsZXRlRXh0ZW5z aW9uIChjb25zdCBzdGQ6OnN0cmluZyYgZG9vbWVkLCBpbnQgdmVyc2lvbiA9IDEpOwoKCgogICAg ICAgIHZvaWQgcmVhZCAoY29uc3Qgc3RyaW5nICZoZHVOYW1lLCBib29sIHJlYWREYXRhRmxhZyA9 IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0b3I8c3Ry aW5nPigpLCBpbnQgdmVyc2lvbiA9IDApOwoKCgoKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0 ZDo6dmVjdG9yPHN0cmluZz4gJmhkdU5hbWVzLCBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlKTsK CgoKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJmhkdU5hbWVz LCBjb25zdCBzdGQ6OnZlY3RvcjxzdGQ6OnZlY3RvcjxzdHJpbmc+ID4gJmtleXMsIGJvb2wgcmVh ZERhdGFGbGFnID0gZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGhkdVZlcnNpb25zID0g c3RkOjp2ZWN0b3I8aW50PigpKTsKCgogICAgICAgIEZJVFMgKiBjbG9uZSAoKSBjb25zdDsKCgog ICAgICAgIGNvbnN0IEV4dEhEVSYgZXh0ZW5zaW9uIChpbnQgaSkgY29uc3Q7CgoKICAgICAgICBF eHRIRFUmIGV4dGVuc2lvbiAoaW50IGkpOwoKCiAgICAgICAgY29uc3QgRXh0SERVJiBleHRlbnNp b24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24gPSAxKSBjb25zdDsKCgogICAg ICAgIGNvbnN0IFBIRFUmIHBIRFUgKCkgY29uc3Q7CgoKICAgICAgICBQSERVJiBwSERVICgpOwoK CiAgICAgICAgRXh0SERVJiBleHRlbnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZl cnNpb24gPSAxKTsKCgogICAgICAgIGZyaWVuZCBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0cmVh bSYgcywgY29uc3QgRklUUyYgcmlnaHQpOwoKCgogICAgICAgIHZvaWQgcmVhZCAoaW50IGhkdUlu ZGV4LAoKICAgICAgICBib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3Rv cjxzdHJpbmc+ICZrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpKTsKCgoKICAgICAgICBUYWJs ZSogYWRkVGFibGUgKHN0cmluZyYgaGR1TmFtZSwgaW50IHJvd3MsCiAgICAgICAgY29uc3Qgc3Rk Ojp2ZWN0b3I8VmFsdWVUeXBlPiYgY29sVHlwZSA9IHN0ZDo6dmVjdG9yPFZhbHVlVHlwZT4oKSwg Y29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29sdW1uTmFtZSA9IHN0ZDo6dmVjdG9yPHN0cmlu Zz4oKSwKICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBjb2x1bW5GbXQgPSBzdGQ6 OnZlY3RvcjxzdHJpbmc+KCksCiAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgY29s dW1uVW5pdCA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwKICAgICAgICBIZHVUeXBlIHR5cGUgPSBC aW5hcnlUYmwsIGludCB2ZXJzaW9uID0gMSk7CgoKCiAgICAgICAgRXh0SERVKiBhZGRJbWFnZSAo Y29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQgYnBpeCwgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVz LCBpbnQgdmVyc2lvbiA9IDEpOwoKCgoKCiAgICAgICAgdm9pZCBkZXN0cm95ICgpIHRocm93ICgp OwoKCiAgICAgICAgY29uc3Qgc3RyaW5nJiBjdXJyZW50RXh0ZW5zaW9uTmFtZSAoKSBjb25zdDsK IyA4ODcgIkZJVFMuaCIKICAgICAgICB2b2lkIHJlYWQgKGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmlu Zz4mIHNlYXJjaEtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4gJnNlYXJjaFZhbHVlcywg Ym9vbCByZWFkRGF0YUZsYWcgPSBmYWxzZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1 S2V5cyA9IHN0ZDo6dmVjdG9yPHN0cmluZz4oKSwgaW50IHZlcnNpb24gPSAxKTsKCgogICAgICAg IGNvbnN0IHN0ZDo6bXVsdGltYXA8c3RyaW5nLEV4dEhEVSo+JiBleHRlbnNpb24gKCkgY29uc3Q7 CgoKICAgICAgICB2b2lkIHJlc2V0UG9zaXRpb24gKCk7CgoKICAgICAgICB2b2lkIGN1cnJlbnRF eHRlbnNpb25OYW1lIChjb25zdCBzdHJpbmcmIGV4dE5hbWUpOwoKCiAgICAgICAgY29uc3Qgc3Ry aW5nJiBuYW1lICgpIGNvbnN0OwoKCiAgICAgICAgdm9pZCBjb3B5IChjb25zdCBIRFUmIHNvdXJj ZSk7CgoKICAgICAgICBUYWJsZSYgZmlsdGVyIChjb25zdCBzdHJpbmcmIGV4cHJlc3Npb24sIEV4 dEhEVSYgaW5wdXRUYWJsZSwgYm9vbCBvdmVyd3JpdGUgPSB0cnVlLCBib29sIHJlYWREYXRhID0g ZmFsc2UpOwoKCiAgICAgICAgRXh0SERVJiBjdXJyZW50RXh0ZW5zaW9uICgpOwoKCiAgICAgICAg dm9pZCBkZWxldGVFeHRlbnNpb24gKGludCBkb29tZWQpOwoKCgoKICAgICAgICBzdGF0aWMgYm9v bCB2ZXJib3NlTW9kZSAoKTsKICAgICAgICBzdGF0aWMgdm9pZCBzZXRWZXJib3NlTW9kZSAoYm9v bCB2YWx1ZSk7CgogICAgcHVibGljOgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRl OgoKICAgICAgICBGSVRTKGNvbnN0IEZJVFMgJnJpZ2h0KTsKCgogICAgICAgIEZJVFMgJiBvcGVy YXRvcj0oY29uc3QgRklUUyAmcmlnaHQpOwoKCgoKICAgICAgICB2b2lkIHVubWFwRXh0ZW5zaW9u IChFeHRIRFUmIGRvb21lZCk7CgoKICAgICAgICBpbnQgbmV4dFZlcnNpb25OdW1iZXIgKGNvbnN0 IHN0cmluZyYgaW5wdXROYW1lKSBjb25zdDsKCgoKCiAgICAgICAgdm9pZCByZWFkIChib29sIHJl YWREYXRhRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3Rk Ojp2ZWN0b3I8c3RyaW5nPigpKTsKCgogICAgICAgIHZvaWQgb3BlbiAoUldtb2RlIG1vZGUgPSBS ZWFkKTsKCgoKCgoKCiAgICAgICAgYm9vbCBjcmVhdGUgKCk7CgoKCgoKCiAgICAgICAgaW50IGNs b3NlICgpIHRocm93ICgpOwoKCiAgICAgICAgb3N0cmVhbSAmIHB1dCAob3N0cmVhbSAmcykgY29u c3Q7CgoKICAgICAgICBmaXRzZmlsZSomIGZpdHNQb2ludGVyICgpIGNvbnN0OwoKCiAgICAgICAg RXh0SERVJiBleHRieVZlcnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24p IGNvbnN0OwoKCiAgICAgICAgdm9pZCBwSERVIChQSERVKiB2YWx1ZSk7CgoKICAgICAgICB2b2lk IHJlYWRFeHRlbnNpb25zIChib29sIHJlYWREYXRhRmxhZyA9IGZhbHNlKTsKCgogICAgICAgIEV4 dEhEVSogYWRkRXh0ZW5zaW9uIChFeHRIRFUqIGV4dCk7CgoKICAgICAgICB2b2lkIHN3YXAgKEZJ VFMmIHJpZ2h0KTsKCgogICAgICAgIGZpdHNmaWxlKiYgZml0c1BvaW50ZXIgKCk7CgoKICAgICAg ICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiYgZXh0ZW5zaW9uICgpOwoKCiAgICAgICAg c3RyaW5nIG5hbWVPZlVubWFwcGVkIChpbnQgaGR1TnVtKSBjb25zdDsKCgogICAgICAgIHZvaWQg Y2xvbmVIZWFkZXIgKGNvbnN0IEV4dEhEVSYgc291cmNlKTsKCgoKCgogICAgcHJpdmF0ZToKCgoK ICAgICAgICBzdGF0aWMgYm9vbCBzX3ZlcmJvc2VNb2RlOwoKCgoKCgoKICAgICAgICBGSVRTQmFz ZSogbV9GSVRTSW1wbDsKCgoKCiAgICAgIGZyaWVuZCBIRFUqIEhEVUNyZWF0b3I6Ok1ha2UgKGNv bnN0IHN0cmluZyYgaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzLCBi b29sIHByaW1hcnksIGludCB2ZXJzaW9uKTsKICAgICAgZnJpZW5kIEhEVSogSERVQ3JlYXRvcjo6 TWFrZSAoaW50IGluZGV4LCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3Ry aW5nPiAma2V5cyk7CgogICAgICBmcmllbmQgZml0c2ZpbGUqIEhEVTo6Zml0c1BvaW50ZXIoKSBj b25zdDsKICAgICAgZnJpZW5kIHZvaWQgSERVOjptYWtlVGhpc0N1cnJlbnQoKSBjb25zdDsKICAg ICAgZnJpZW5kIHZvaWQgRXh0SERVOjptYWtlVGhpc0N1cnJlbnQoKSBjb25zdDsKCiAgfTsKIyAx MDQ2ICJGSVRTLmgiCiAgaW5saW5lIEV4dEhEVSYgRklUUzo6ZXh0ZW5zaW9uIChjb25zdCBzdHJp bmcmIGhkdU5hbWUsIGludCB2ZXJzaW9uKQogIHsKCgoKICAgIHJldHVybiBleHRieVZlcnNpb24o aGR1TmFtZSx2ZXJzaW9uKTsKICB9CgogIGlubGluZSBvc3RyZWFtJiBvcGVyYXRvciA8PCAob3N0 cmVhbSYgcywgY29uc3QgRklUUyYgcmlnaHQpCiAgewoKCgogICAgcmV0dXJuIHJpZ2h0LnB1dChz KTsKICB9CgoKCiAgaW5saW5lIGJvb2wgRklUUzo6dmVyYm9zZU1vZGUgKCkKICB7CgogICAgcmV0 dXJuIHNfdmVyYm9zZU1vZGU7CgogIH0KCiAgaW5saW5lIHZvaWQgRklUUzo6c2V0VmVyYm9zZU1v ZGUgKGJvb2wgdmFsdWUpCiAgewoKICAgIHNfdmVyYm9zZU1vZGUgPSB2YWx1ZTsKCiAgfQoKfQoj IDM3ICJQSERVLmgiIDIKCiMgMSAiRklUU1V0aWwuaCIgMQojIDM5ICJQSERVLmgiIDIKCm5hbWVz cGFjZSBDQ2ZpdHMgewogIGNsYXNzIEZJVFNCYXNlOwoKfQojIDUyICJQSERVLmgiCm5hbWVzcGFj ZSBDQ2ZpdHMgewojIDI5MiAiUEhEVS5oIgogIGNsYXNzIFBIRFUgOiBwdWJsaWMgSERVCiAgewoK CgogICAgcHVibGljOgoKICAgICAgICB2aXJ0dWFsIH5QSERVKCk7CgoKCgoKCgogICAgICAgIHZp cnR1YWwgdm9pZCByZWFkRGF0YSAoYm9vbCByZWFkRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZl Y3RvcjxzdHJpbmc+JiBrZXlzID0gc3RkOjp2ZWN0b3I8c3RyaW5nPigpKSA9IDA7CgoKICAgICAg ICB2aXJ0dWFsIFBIRFUgKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNvbnN0ID0gMDsKCiAgICBwdWJs aWM6CiMgMzI4ICJQSERVLmgiCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgICAg dm9pZCB3cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dGQ6OnZhbGFycmF5PFM+JiBkYXRhLAogICAgICAgICAgICAgICAgICAgICAgICBTKiBudWxsVmFs dWUpOwoKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAgICAgICAgdm9pZCB3cml0ZShs b25nIGZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5FbGVtZW50cywKICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSwKICAgICAgICAg ICAgICAgICAgICAgICAgUyogbnVsbFZhbHVlKTsKCgogICAgICAgIHRlbXBsYXRlIDx0eXBlbmFt ZSBTPgogICAgICAgIHZvaWQgd3JpdGUoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0LAog ICAgICAgICAgICAgICAgICAgICAgICBsb25nIG5FbGVtZW50cywKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxTPiYgZGF0YSk7CgoKICAgICAgICB0ZW1wbGF0ZSA8 dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHdyaXRlKGxvbmcgZmlyc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dGQ6OnZhbGFycmF5PFM+JiBkYXRhKTsKCiAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFM+CiAg ICAgICAgdm9pZCB3cml0ZShjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAg ICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4 LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZhbGFycmF5PFM+JiBkYXRhKTsK CgoKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJlYWQoc3RkOjp2 YWxhcnJheTxTPiYgaW1hZ2UpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg ICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBsb25nIGZpcnN0LGxvbmcgbkVs ZW1lbnRzKTsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJlYWQg KHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBsb25nIGZpcnN0LGxvbmcgbkVsZW1lbnRzLCBTKiBu dWxsVmFsdWUpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAgICB2b2lkIHJl YWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmly c3QsbG9uZyBuRWxlbWVudHMpIDsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4KICAgICAg ICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZlY3Rvcjxs b25nPiYgZmlyc3QsIGxvbmcgbkVsZW1lbnRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgUyogbnVsbFZhbHVlKTsKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgUz4K ICAgICAgICB2b2lkIHJlYWQgKHN0ZDo6dmFsYXJyYXk8Uz4mIGltYWdlLCBjb25zdCBzdGQ6OnZl Y3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSkgOwoKICAgICAgICB0 ZW1wbGF0ZTx0eXBlbmFtZSBTPgogICAgICAgIHZvaWQgcmVhZCAoc3RkOjp2YWxhcnJheTxTPiYg aW1hZ2UsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYg c3RyaWRlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFMqIG51bGxWYWx1ZSkgOwoK CgoKICAgIHByb3RlY3RlZDoKCiAgICAgICAgUEhEVShjb25zdCBQSERVICZyaWdodCk7CgoKCgoK ICAgICAgICBQSERVIChGSVRTQmFzZSogcCwgaW50IGJwaXgsIGludCBuYXhpcywgY29uc3Qgc3Rk Ojp2ZWN0b3I8bG9uZz4mIGF4ZXMpOwoKCgoKCiAgICAgICAgUEhEVSAoRklUU0Jhc2UqIHAgPSAw KTsKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIGluaXRSZWFkICgpOwoKCgoKICAgICAgICBib29s IHNpbXBsZSAoKSBjb25zdDsKICAgICAgICB2b2lkIHNpbXBsZSAoYm9vbCB2YWx1ZSk7CgoKICAg ICAgICBib29sIGV4dGVuZCAoKSBjb25zdDsKICAgICAgICB2b2lkIGV4dGVuZCAoYm9vbCB2YWx1 ZSk7CgoKCgoKICAgIHByaXZhdGU6CgoKCgogICAgcHJpdmF0ZToKCgoKICAgICAgICBib29sIG1f c2ltcGxlOwoKCgogICAgICAgIGJvb2wgbV9leHRlbmQ7CgoKCgoKCiAgfTsKIyA0NTUgIlBIRFUu aCIKICBpbmxpbmUgYm9vbCBQSERVOjpzaW1wbGUgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1f c2ltcGxlOwoKICB9CgogIGlubGluZSB2b2lkIFBIRFU6OnNpbXBsZSAoYm9vbCB2YWx1ZSkKICB7 CgogICAgbV9zaW1wbGUgPSB2YWx1ZTsKCiAgfQoKICBpbmxpbmUgYm9vbCBQSERVOjpleHRlbmQg KCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZXh0ZW5kOwoKICB9CgogIGlubGluZSB2b2lkIFBI RFU6OmV4dGVuZCAoYm9vbCB2YWx1ZSkKICB7CgogICAgbV9leHRlbmQgPSB2YWx1ZTsKCiAgfQoK fQojIDMzICJGSVRTLmN4eCIgMgoKIyAxICJGSVRTQmFzZS5oIiAxCiMgMzIgIkZJVFNCYXNlLmgi CiMgMSAiL3Vzci9pbmNsdWRlL2crKy12My9tYXAiIDEgMwojIDMzICJGSVRTQmFzZS5oIiAyCgoj IDEgIi9ob21lL2Rvcm1hbi9jcHAvaW5jbHVkZS9maXRzaW8uaCIgMQojIDM1ICJGSVRTQmFzZS5o IiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKystdjMvc3RyaW5nIiAxIDMKIyAzNyAiRklUU0Jhc2Uu aCIgMgoKIyAxICJDQ2ZpdHMuaCIgMQojIDM5ICJGSVRTQmFzZS5oIiAyCgpuYW1lc3BhY2UgQ0Nm aXRzIHsKICBjbGFzcyBQSERVOwogIGNsYXNzIEV4dEhEVTsKCn0KCgoKCgp1c2luZyBzdGQ6OnN0 cmluZzsKCgoKbmFtZXNwYWNlIENDZml0cyB7CiMgNjkgIkZJVFNCYXNlLmgiCiAgY2xhc3MgRklU U0Jhc2UKICB7CgoKCiAgICBwdWJsaWM6CgogICAgICAgIEZJVFNCYXNlKGNvbnN0IEZJVFNCYXNl ICZyaWdodCk7CgoKCiAgICAgICAgRklUU0Jhc2UgKGNvbnN0IHN0cmluZyYgZmlsZU5hbWUsIFJX bW9kZSByd21vZGUpOwoKCiAgICAgICAgfkZJVFNCYXNlKCk7CgoKCgogICAgICAgIHZvaWQgZGVz dHJveVByaW1hcnkgKCk7CgoKICAgICAgICB2b2lkIGRlc3Ryb3lFeHRlbnNpb25zICgpOwoKCiAg ICAgICAgRklUU0Jhc2UqIGNsb25lICgpOwoKCgoKCiAgICAgICAgUldtb2RlIG1vZGUgKCk7CgoK CiAgICAgICAgc3RkOjpzdHJpbmcmIGN1cnJlbnRFeHRlbnNpb25OYW1lICgpOwoKCgogICAgICAg IHN0ZDo6c3RyaW5nJiBuYW1lICgpOwoKCgogICAgICAgIFBIRFUqJiBwSERVICgpOwoKCgogICAg ICAgIGZpdHNmaWxlKiYgZnB0ciAoKTsKCgoKCiAgICAgICAgc3RkOjptdWx0aW1hcDxzdHJpbmcs RXh0SERVKj4mIGV4dGVuc2lvbiAoKTsKCgoKCgogICAgcHJvdGVjdGVkOgoKCgoKICAgIHByaXZh dGU6CgogICAgICAgIEZJVFNCYXNlICYgb3BlcmF0b3I9KGNvbnN0IEZJVFNCYXNlICZyaWdodCk7 CgoKCgoKICAgIHByaXZhdGU6CgoKCgogICAgICAgIFJXbW9kZSBtX21vZGU7CgoKCgogICAgICAg IHN0ZDo6c3RyaW5nIG1fY3VycmVudEV4dGVuc2lvbk5hbWU7CgoKCgogICAgICAgIHN0ZDo6c3Ry aW5nIG1fbmFtZTsKCgoKCiAgICAgICAgUEhEVSogbV9wSERVOwoKCgoKICAgICAgICBmaXRzZmls ZSogbV9mcHRyOwoKCgoKICAgICAgICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiBtX2V4 dGVuc2lvbjsKCgoKCgoKICB9OwojIDE4NiAiRklUU0Jhc2UuaCIKICBpbmxpbmUgUldtb2RlIEZJ VFNCYXNlOjptb2RlICgpCiAgewoKICAgIHJldHVybiBtX21vZGU7CgogIH0KCiAgaW5saW5lIHN0 ZDo6c3RyaW5nJiBGSVRTQmFzZTo6Y3VycmVudEV4dGVuc2lvbk5hbWUgKCkKICB7CgogICAgcmV0 dXJuIG1fY3VycmVudEV4dGVuc2lvbk5hbWU7CgogIH0KCiAgaW5saW5lIHN0ZDo6c3RyaW5nJiBG SVRTQmFzZTo6bmFtZSAoKQogIHsKCiAgICByZXR1cm4gbV9uYW1lOwoKICB9CgogIGlubGluZSBQ SERVKiYgRklUU0Jhc2U6OnBIRFUgKCkKICB7CgogICAgcmV0dXJuIG1fcEhEVTsKCiAgfQoKICBp bmxpbmUgZml0c2ZpbGUqJiBGSVRTQmFzZTo6ZnB0ciAoKQogIHsKCiAgICByZXR1cm4gbV9mcHRy OwoKICB9CgogIGlubGluZSBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRIRFUqPiYgRklUU0Jhc2U6 OmV4dGVuc2lvbiAoKQogIHsKCiAgICByZXR1cm4gbV9leHRlbnNpb247CgogIH0KCn0KIyAzNSAi RklUUy5jeHgiIDIKCiMgMSAiSERVQ3JlYXRvci5oIiAxCiMgMzcgIkZJVFMuY3h4IiAyCgojIDEg IlByaW1hcnlIRFUuaCIgMQojIDMyICJQcmltYXJ5SERVLmgiCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My92YWxhcnJheSIgMSAzCiMgMzMgIlByaW1hcnlIRFUuaCIgMgoKIyAxICJQSERVLmgiIDEK IyAzNSAiUHJpbWFyeUhEVS5oIiAyCgojIDEgIkhEVUNyZWF0b3IuaCIgMQojIDM3ICJQcmltYXJ5 SERVLmgiIDIKCiMgMSAiSW1hZ2UuaCIgMQojIDI5ICJJbWFnZS5oIgojIDEgIkNDZml0cy5oIiAx CiMgMzAgIkltYWdlLmgiIDIKIyAxICJGaXRzRXJyb3IuaCIgMQojIDMxICJJbWFnZS5oIiAyCiMg MSAiRklUU1V0aWwuaCIgMQojIDMyICJJbWFnZS5oIiAyCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My92ZWN0b3IiIDEgMwojIDM2ICJJbWFnZS5oIiAyCgojIDEgIi91c3IvaW5jbHVkZS9nKyst djMvZnVuY3Rpb25hbCIgMSAzCiMgMzggIkltYWdlLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My92YWxhcnJheSIgMSAzCiMgNDAgIkltYWdlLmgiIDIKCiMgMSAiL3Vzci9pbmNsdWRlL2cr Ky12My9udW1lcmljIiAxIDMKIyA0MiAiSW1hZ2UuaCIgMgoKCgoKCgoKbmFtZXNwYWNlIENDZml0 cyB7CiMgNjQgIkltYWdlLmgiCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY2xhc3MgSW1hZ2UK ICB7CgoKCiAgICBwdWJsaWM6CgogICAgICAgIEltYWdlKGNvbnN0IEltYWdlPCBUID4gJnJpZ2h0 KTsKCgoKICAgICAgICBJbWFnZSAoY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW1hZ2VBcnJheSA9 IHN0ZDo6dmFsYXJyYXk8VD4oKSk7CgoKICAgICAgICB+SW1hZ2UoKTsKCgogICAgICAgIEltYWdl PCBUID4gJiBvcGVyYXRvcj0oY29uc3QgSW1hZ2U8IFQgPiAmcmlnaHQpOwoKCgoKCgoKICAgICAg ICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiByZWFkSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLCBsb25n IGZpcnN0LCBsb25nIG5FbGVtZW50cywgVCogbnVsbFZhbHVlLCBjb25zdCBzdGQ6OnZlY3Rvcjxs b25nPiYgbmF4ZXMsIGJvb2wmIG51bGxzKTsKCgoKCgogICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJy YXk8VD4mIHJlYWRJbWFnZSAoZml0c2ZpbGUqIGZQdHIsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+ JiBmaXJzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsIGNvbnN0 IHN0ZDo6dmVjdG9yPGxvbmc+JiBzdHJpZGUsIFQqIG51bGxWYWx1ZSwgY29uc3Qgc3RkOjp2ZWN0 b3I8bG9uZz4mIG5heGVzLCBib29sJiBudWxscyk7CgoKCgoKICAgICAgICB2b2lkIHdyaXRlSW1h Z2UgKGZpdHNmaWxlKiBmUHRyLCBsb25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3Rk Ojp2YWxhcnJheTxUPiYgaW5EYXRhLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIFQq IG51bGxWYWx1ZSA9IDApOwoKCgoKCiAgICAgICAgdm9pZCB3cml0ZUltYWdlIChmaXRzZmlsZSog ZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZl Y3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW5EYXRhLCBj b25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpOwoKCgoKICAgICAgICBib29sIGlzUmVhZCAo KSBjb25zdDsKICAgICAgICB2b2lkIGlzUmVhZCAoYm9vbCB2YWx1ZSk7CgoKCgoKCiAgICAgICAg Y29uc3Qgc3RkOjp2YWxhcnJheTwgVCA+JiBpbWFnZSAoKSBjb25zdDsKICAgICAgICB2b2lkIHNl dEltYWdlIChjb25zdCBzdGQ6OnZhbGFycmF5PCBUID4mIHZhbHVlKTsKICAgICAgICBjb25zdCBU IGltYWdlIChzaXplX3QgaW5kZXgpIGNvbnN0OwogICAgICAgIHZvaWQgc2V0SW1hZ2UgKHNpemVf dCBpbmRleCwgVCB2YWx1ZSk7CgoKCgoKICAgIHByb3RlY3RlZDoKCgoKCiAgICBwcml2YXRlOgoK CgogICAgICAgIHN0ZDo6dmFsYXJyYXk8VD4mIGltYWdlICgpOwoKCiAgICAgICAgdm9pZCBwcmVw YXJlRm9yU3Vic2V0IChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIGNvbnN0IHN0ZDo6 dmVjdG9yPGxvbmc+JiBmaXJzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RW ZXJ0ZXgsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSwgbG9uZyogZmlyc3RQdHIsIGxv bmcqIGxhc3RQdHIpOwoKCgoKCiAgICBwcml2YXRlOgoKCgogICAgICAgIGJvb2wgbV9pc1JlYWQ7 CgoKCgoKCiAgICAgICAgc3RkOjp2YWxhcnJheTwgVCA+IG1faW1hZ2U7CgoKCgoKCiAgfTsKCgog IHRlbXBsYXRlPD4KICB2b2lkIEltYWdlPGxvbmc+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25n PiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk Ojp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RkOjp2YWxhcnJheTxsb25nPiYgaW5EYXRhLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwoKICB0ZW1wbGF0 ZTw+CiAgdm9pZCBJbWFnZTxzaG9ydD46OndyaXRlSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBmaXJz dFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv cjxsb25nPiYgbGFzdFZlcnRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z dCBzdGQ6OnZhbGFycmF5PHNob3J0PiYgaW5EYXRhLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwogIHRlbXBsYXRlPD4KICB2 b2lkIEltYWdlPHVuc2lnbmVkIGxvbmc+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmly c3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0 b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RkOjp2YWxhcnJheTx1bnNpZ25lZCBsb25nPiYgaW5EYXRhLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykgOwogIHRlbXBs YXRlPD4KICB2b2lkIEltYWdlPHVuc2lnbmVkIHNob3J0Pjo6d3JpdGVJbWFnZSAoZml0c2ZpbGUq IGZQdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8 bG9uZz4mIGZpcnN0VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IHN0ZDo6dmFsYXJyYXk8dW5zaWduZWQgc2hvcnQ+JiBpbkRhdGEsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVz KSA7CiAgdGVtcGxhdGU8PgogIHZvaWQgSW1hZ2U8ZmxvYXQ+Ojp3cml0ZUltYWdlIChmaXRzZmls ZSogZlB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rv cjxsb25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxmbG9hdD4mIGluRGF0YSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpIDsKICB0 ZW1wbGF0ZTw+CiAgdm9pZCBJbWFnZTxkb3VibGU+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0 ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxsb25n PiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Rk Ojp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RkOjp2YWxhcnJheTxkb3VibGU+JiBpbkRhdGEsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzKSA7CgogIHRlbXBs YXRlPD4KICB2b2lkIEltYWdlPHVuc2lnbmVkIGNoYXI+Ojp3cml0ZUltYWdlIChmaXRzZmlsZSog ZlB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGQ6OnZlY3Rvcjxs b25nPiYgZmlyc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RkOjp2ZWN0b3I8bG9uZz4mIGxhc3RWZXJ0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTx1bnNpZ25lZCBjaGFyPiYgaW5EYXRhLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBuYXhlcykg OwoKCgoKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBib29sIEltYWdlPFQ+Ojpp c1JlYWQgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1faXNSZWFkOwoKICB9CgogIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgogIGlubGluZSB2b2lkIEltYWdlPFQ+Ojppc1JlYWQgKGJvb2wgdmFsdWUp CiAgewoKICAgIG1faXNSZWFkID0gdmFsdWU7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KICBpbmxpbmUgY29uc3Qgc3RkOjp2YWxhcnJheTwgVCA+JiBJbWFnZTxUPjo6aW1hZ2UgKCkg Y29uc3QKICB7CgogICAgcmV0dXJuIG1faW1hZ2U7CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CiAgaW5saW5lIHZvaWQgSW1hZ2U8VD46OnNldEltYWdlIChjb25zdCBzdGQ6OnZhbGFycmF5 PCBUID4mIHZhbHVlKQogIHsKCiAgICBtX2ltYWdlLnJlc2l6ZSh2YWx1ZS5zaXplKCkpOwogICAg bV9pbWFnZSA9IHZhbHVlOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBj b25zdCBUIEltYWdlPFQ+OjppbWFnZSAoc2l6ZV90IGluZGV4KSBjb25zdAogIHsKCiAgICByZXR1 cm4gbV9pbWFnZVtpbmRleF07CgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgaW5saW5l IHZvaWQgSW1hZ2U8VD46OnNldEltYWdlIChzaXplX3QgaW5kZXgsIFQgdmFsdWUpCiAgewoKICAg IG1faW1hZ2VbaW5kZXhdID0gdmFsdWU7CgogIH0KCgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4K ICBJbWFnZTxUPjo6SW1hZ2UoY29uc3QgSW1hZ2U8VD4gJnJpZ2h0KQoKICAgICAgICA6IG1faXNS ZWFkKHJpZ2h0Lm1faXNSZWFkKSxtX2ltYWdlKHJpZ2h0Lm1faW1hZ2UpCgoKCiAgewoKCiAgfQoK ICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFnZTxUPjo6SW1hZ2UgKGNvbnN0IHN0ZDo6dmFs YXJyYXk8VD4mIGltYWdlQXJyYXkpCgogICAgICAgIDogbV9pc1JlYWQoZmFsc2UpLG1faW1hZ2Uo aW1hZ2VBcnJheSkKCgoKICB7CgoKICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFn ZTxUPjo6fkltYWdlKCkKICB7CgoKICB9CgoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBJbWFn ZTxUPiAmIEltYWdlPFQ+OjpvcGVyYXRvcj0oY29uc3QgSW1hZ2U8VD4gJnJpZ2h0KQogIHsKCgog ICAgIEltYWdlPFQ+IF9fdG1wKHJpZ2h0KTsKICAgICBzdGQ6OnN3YXAobV9pc1JlYWQscmlnaHQu bV9pc1JlYWQpOwogICAgIHN0ZDo6c3dhcChtX2RhdGEscmlnaHQubV9kYXRhKTsKICAgICByZXR1 cm4gKnRoaXM7CgogIH0KCgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgY29uc3Qgc3RkOjp2 YWxhcnJheTxUPiYgSW1hZ2U8VD46OnJlYWRJbWFnZSAoZml0c2ZpbGUqIGZQdHIsIGxvbmcgZmly c3QsIGxvbmcgbkVsZW1lbnRzLCBUKiBudWxsVmFsdWUsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+ JiBuYXhlcywgYm9vbCYgbnVsbHMpCiAgewoKICAgICAgICBpbnQgYW55ICgwKTsKICAgICAgICBp bnQgc3RhdHVzKDApOwogICAgICAgIGNvbnN0IHNpemVfdCBOKG5heGVzLnNpemUoKSk7CiAgICAg ICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBpbWFnZVR5cGU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBpbml0KDEpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbmVsZW1lbnRzKHN0ZDo6YWNjdW11bGF0 ZSgmbmF4ZXNbMF0sJm5heGVzW05dLGluaXQsc3RkOjptdWx0aXBsaWVzPGxvbmc+KCkpKTsKCgoK ICAgICAgICBsb25nIGVsZW1lbnRzVG9SZWFkKHN0ZDo6bWluKHN0YXRpY19jYXN0PHVuc2lnbmVk IGxvbmc+KG5FbGVtZW50cyksbmVsZW1lbnRzIC0gZmlyc3QgKyAxKSk7CiAgICAgICAgaWYgKCBl bGVtZW50c1RvUmVhZCA8IG5FbGVtZW50cykKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGQ6 OmNlcnIgPDwgIioqKkNDZml0cyBXYXJuaW5nOiBkYXRhIHJlcXVlc3QgZXhjZWVkcyBpbWFnZSBz aXplLCB0cnVuY2F0aW5nXG4iOwogICAgICAgIH0KICAgICAgICBGSVRTVXRpbDo6YXV0b19hcnJh eV9wdHI8VD4gcEFycmF5KG5ldyBUW2VsZW1lbnRzVG9SZWFkXSk7CiAgICAgICAgVCogYXJyYXkg PSBwQXJyYXkuZ2V0KCk7CgogICAgICAgIGlmIChmZmdwdihmUHRyLGltYWdlVHlwZSgpLGZpcnN0 LGVsZW1lbnRzVG9SZWFkLAogICAgICAgICAgICAgICAgICAgICAgICBudWxsVmFsdWUsYXJyYXks JmFueSwmc3RhdHVzKSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1 cyk7CiAgICAgICAgRklUU1V0aWw6OkZpdHNOdWxsVmFsdWU8VD4gbnVsbDsKCiAgICAgICAgaWYg KG1faW1hZ2Uuc2l6ZSgpICE9IHN0YXRpY19jYXN0PHNpemVfdD4oZWxlbWVudHNUb1JlYWQpKQog ICAgICAgIHsKICAgICAgICAgICAgICAgIG1faW1hZ2UucmVzaXplKGVsZW1lbnRzVG9SZWFkLG51 bGwoKSk7CiAgICAgICAgfQoKICAgICAgICBzdGQ6OmNvcHkoJmFycmF5WzBdLCZhcnJheVtlbGVt ZW50c1RvUmVhZF0sJm1faW1hZ2VbZmlyc3QtMV0pOwogICAgICAgIG51bGxzID0gKGFueSAhPSAw KTsKICAgICAgICBtX2lzUmVhZCA9IChmaXJzdCA9PSAxICYmIG5lbGVtZW50cyA9PSBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBsb25nPihuRWxlbWVudHMpKTsKICAgICAgICByZXR1cm4gbV9pbWFnZTsK CiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBJ bWFnZTxUPjo6cmVhZEltYWdlIChmaXRzZmlsZSogZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9u Zz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29u c3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlkZSwgVCogbnVsbFZhbHVlLCBjb25zdCBzdGQ6OnZl Y3Rvcjxsb25nPiYgbmF4ZXMsIGJvb2wmIG51bGxzKQogIHsKCgoKCiAgICAgRklUU1V0aWw6OkNW YXJyYXk8bG9uZz4gY2FycmF5OwoKCiAgICAgaW50IGFueSgwKTsKICAgICBpbnQgc3RhdHVzKDAp OwogICAgIGNvbnN0IHNpemVfdCBOKG5heGVzLnNpemUoKSk7CgogICAgIHNpemVfdCBhcnJheVNp emUoMSk7CgogICAgIGZvciAoc2l6ZV90IGogPSAwOyBqIDwgTjsgKytqKQogICAgIHsKICAgICAg ICAgICAgIGFycmF5U2l6ZSAqPSAobGFzdFZlcnRleFtqXSAtIGZpcnN0VmVydGV4W2pdICsgMSk7 CiAgICAgfQoKICAgICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8VD4gcEFycmF5KG5ldyBUW2Fy cmF5U2l6ZV0pOwogICAgIEZJVFNVdGlsOjphdXRvX2FycmF5X3B0cjxsb25nPiBwRnBpeGVsKGNh cnJheShmaXJzdFZlcnRleCkpOwogICAgIEZJVFNVdGlsOjphdXRvX2FycmF5X3B0cjxsb25nPiBw THBpeGVsKGNhcnJheShsYXN0VmVydGV4KSk7CiAgICAgRklUU1V0aWw6OmF1dG9fYXJyYXlfcHRy PGxvbmc+IHBTdHJpZGUoY2FycmF5KHN0cmlkZSkpOwoKICAgICBGSVRTVXRpbDo6TWF0Y2hUeXBl PFQ+IGltYWdlVHlwZTsKCiAgICAgaWYgKGZmZ3N2KGZQdHIsaW1hZ2VUeXBlKCksCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgcExwaXhlbC5nZXQoKSxwTHBpeGVsLmdldCgpLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHBTdHJpZGUuZ2V0KCksbnVsbFZhbHVlLHBBcnJheS5nZXQo KSwmYW55LCZzdGF0dXMpICE9IDApCiAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vy cm9yKHN0YXR1cyk7CgogICAgIH0KCiAgICAgc2l6ZV90IG4obV9pbWFnZS5zaXplKCkpOwogICAg IGlmIChuIDwgYXJyYXlTaXplKSBtX2ltYWdlLnJlc2l6ZShhcnJheVNpemUpOwogICAgIG1faW1h Z2UgPSBzdGQ6OnZhbGFycmF5PFQ+KHBBcnJheS5nZXQoKSxhcnJheVNpemUpOwoKCiAgICAgbnVs bHMgPSAoYW55ICE9IDApOwogICAgIHJldHVybiBtX2ltYWdlOwoKICB9CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgogIHZvaWQgSW1hZ2U8VD46OndyaXRlSW1hZ2UgKGZpdHNmaWxlKiBmUHRyLCBs b25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW5EYXRh LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMsIFQqIG51bGxWYWx1ZSkKICB7CgoKCiAg ICAgaW50IHN0YXR1cygwKTsKICAgICBjb25zdCBzaXplX3QgTihuYXhlcy5zaXplKCkpOwogICAg IHNpemVfdCBpbml0KDEpOwogICAgIHNpemVfdCB0b3RhbFNpemU9IHN0YXRpY19jYXN0PHNpemVf dD4oc3RkOjphY2N1bXVsYXRlKCZuYXhlc1swXSwmbmF4ZXNbTl0saW5pdCxzdGQ6Om11bHRpcGxp ZXM8bG9uZz4oKSApKTsKICAgICBGSVRTVXRpbDo6Rml0c051bGxWYWx1ZTxUPiBudWxsOwogICAg IGlmIChtX2ltYWdlLnNpemUoKSAhPSB0b3RhbFNpemUpIG1faW1hZ2UucmVzaXplKHRvdGFsU2l6 ZSxudWxsKCkpOwogICAgIEZJVFNVdGlsOjpDQWFycmF5PFQ+IGNvbnZlcnQ7CiAgICAgRklUU1V0 aWw6OmF1dG9fYXJyYXlfcHRyPFQ+IHBBcnJheShjb252ZXJ0KGluRGF0YSkpOwogICAgIFQqIGFy cmF5ID0gcEFycmF5LmdldCgpOwoKCiAgICAgRklUU1V0aWw6Ok1hdGNoVHlwZTxUPiBpbWFnZVR5 cGU7CiAgICAgbG9uZyB0eXBlKGltYWdlVHlwZSgpKTsKCiAgICAgaWYgKGZmcHBuKGZQdHIsdHlw ZSxmaXJzdCxuRWxlbWVudHMsYXJyYXksCiAgICAgICAgICAgICAgICAgICAgIG51bGxWYWx1ZSwm c3RhdHVzKSAhPSAwKQogICAgIHsKICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJvcihzdGF0 dXMpOwoKICAgICB9CgogICAgIG1faW1hZ2Vbc3RkOjpzbGljZShmaXJzdCxuRWxlbWVudHMsMSld ID0gaW5EYXRhOwoKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIEltYWdlPFQ+ Ojp3cml0ZUltYWdlIChmaXRzZmlsZSogZlB0ciwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZp cnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3Rk Ojp2YWxhcnJheTxUPiYgaW5EYXRhLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbmF4ZXMpCiAg ewoKCgoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIHN0ZDo6dmFsYXJyYXk8VD4mIElt YWdlPFQ+OjppbWFnZSAoKQogIHsKCgoKICAgIHJldHVybiBtX2ltYWdlOwogIH0KCiAgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CiAgdm9pZCBJbWFnZTxUPjo6cHJlcGFyZUZvclN1YnNldCAoY29uc3Qg c3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzLCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RW ZXJ0ZXgsIGNvbnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LCBjb25zdCBzdGQ6OnZh bGFycmF5PFQ+JiBpbkRhdGEsIGxvbmcqIGZpcnN0UHRyLCBsb25nKiBsYXN0UHRyKQogIHsKCgoK CgogICAgY29uc3Qgc2l6ZV90IE4obmF4ZXMuc2l6ZSgpKTsKICAgIGNvbnN0IHNpemVfdCBNKGZp cnN0VmVydGV4LnNpemUoKSk7CiAgICBzaXplX3QgaW5pdCgxKTsKICAgIEZJVFNVdGlsOjphdXRv X2FycmF5X3B0cjxsb25nPiBwTGFzdChuZXcgbG9uZ1tNXSk7CiAgICBsb25nKiBsYXN0ID0gcExh c3QuZ2V0KCk7CiAgICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8bG9uZz4gcEZpcnN0KG5ldyBs b25nW01dKTsKCiAgICBzaXplX3QgaW1hZ2VTaXplKHN0ZDo6YWNjdW11bGF0ZSgmbmF4ZXNbMF0s Jm5heGVzW05dLGluaXQsc3RkOjptdWx0aXBsaWVzPGxvbmc+KCkgKSk7CiAgICBGSVRTVXRpbDo6 Rml0c051bGxWYWx1ZTxUPiBudWxsOwogICAgaWYgKG1faW1hZ2Uuc2l6ZSgpICE9IGltYWdlU2l6 ZSkKICAgIHsKICAgICAgICAgICAgbV9pbWFnZS5yZXNpemUoaW1hZ2VTaXplLG51bGwoKSk7CiAg ICB9CgoKCiAgICBsb25nIG1sKHN0ZDo6bWluKGxhc3RWZXJ0ZXguc2l6ZSgpLE0pKTsKCgoKICAg IHN0ZDo6Y29weShmaXJzdFZlcnRleC5iZWdpbigpLGZpcnN0VmVydGV4LmVuZCgpLCZwRmlyc3Qu Z2V0KClbMF0pOwogICAgc3RkOjpjb3B5KGxhc3RWZXJ0ZXguYmVnaW4oKSxsYXN0VmVydGV4LmJl Z2luKCkrbWwsJmxhc3RbMF0pOwojIDQ5NiAiSW1hZ2UuaCIKICAgIHN0ZDo6dmFsYXJyYXk8c2l6 ZV90PiB2TGVuZ3RoKDEsTSk7CiAgICB7CiAgICAgICAgZm9yIChzaXplX3QgaiA9IDA7IGogPCBN OyArK2opCiAgICAgICAgewogICAgICAgICAgICAgICAgbGFzdFtqXSA9IHN0ZDo6bWF4KGZpcnN0 VmVydGV4W2pdLGxhc3Rbal0pOwogICAgICAgICAgICAgICAgdkxlbmd0aFtqXSA9IGxhc3Rbal0t cEZpcnN0LmdldCgpW2pdKzE7CiAgICAgICAgfQogICAgfQoKICAgIHNpemVfdCBzdGFydFBvaW50 KGZpcnN0VmVydGV4WzBdIC0gMSk7CgoKICAgIHsKICAgICAgICBmb3IgKHNpemVfdCBqID0gMTsg aiA8IE07ICsraikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGFydFBvaW50ICs9IG5heGVz W2pdKihmaXJzdFZlcnRleFtqXSAtIDEpOwogICAgICAgIH0KICAgIH0KICAgIHN0ZDo6dmFsYXJy YXk8c2l6ZV90PiB2U3RyaWRlKDEsTSk7CgogICAgbV9pbWFnZVtzdGQ6OmdzbGljZShzdGFydFBv aW50LHZMZW5ndGgsdlN0cmlkZSldID0gaW5EYXRhOwoKICAgIGZpcnN0UHRyID0gcEZpcnN0LnJl bGVhc2UoKTsKICAgIGxhc3RQdHIgPSBwTGFzdC5yZWxlYXNlKCk7CgoKICB9CgoKCgoKfQojIDM5 ICJQcmltYXJ5SERVLmgiIDIKCiMgMSAiRklUUy5oIiAxCiMgNDEgIlByaW1hcnlIRFUuaCIgMgoK CgoKIyAxICJDQ2ZpdHMuaCIgMQojIDQ2ICJQcmltYXJ5SERVLmgiIDIKIyAxICIvdXNyL2luY2x1 ZGUvZysrLXYzL2Z1bmN0aW9uYWwiIDEgMwojIDQ3ICJQcmltYXJ5SERVLmgiIDIKIyAxICIvdXNy L2luY2x1ZGUvZysrLXYzL251bWVyaWMiIDEgMwojIDQ4ICJQcmltYXJ5SERVLmgiIDIKIyAxICIv dXNyL2luY2x1ZGUvZysrLXYzL21lbW9yeSIgMSAzCiMgNDkgIlByaW1hcnlIRFUuaCIgMgoKCgpu YW1lc3BhY2UgQ0NmaXRzIHsKIyA2OSAiUHJpbWFyeUhEVS5oIgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgogIGNsYXNzIFByaW1hcnlIRFUgOiBwdWJsaWMgUEhEVQogIHsKCgoKICAgIHB1YmxpYzoK CgoKICAgICAgICB2aXJ0dWFsIFByaW1hcnlIRFU8VD4gKiBjbG9uZSAoRklUU0Jhc2UqIHApIGNv bnN0OwoKCgoKCiAgICAgICAgdmlydHVhbCB2b2lkIHJlYWREYXRhIChib29sIHJlYWRGbGFnID0g ZmFsc2UsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtleXMgPSBzdGQ6OnZlY3RvcjxzdHJp bmc+KCkpOwoKCiAgICAgICAgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgaW1hZ2UgKCkgY29uc3Q7 CgoKICAgICAgICBzdGQ6OnZhbGFycmF5PFQ+JiBpbWFnZSAoKTsKCgogICAgICAgIHZvaWQgc2V0 SW1hZ2UgKGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSk7CgoKCgoKICAgICAgICB2aXJ0 dWFsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIHJlYWRJbWFnZSAobG9uZyBmaXJzdCwgbG9uZyBu RWxlbWVudHMsIFQqIG51bGxWYWx1ZSk7CgoKCgoKICAgICAgICB2aXJ0dWFsIGNvbnN0IHN0ZDo6 dmFsYXJyYXk8VD4mIHJlYWRJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVy dGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0 b3I8bG9uZz4mIHN0cmlkZSwgVCogbnVsbFZhbHVlKTsKCgoKCgogICAgICAgIHZpcnR1YWwgdm9p ZCB3cml0ZUltYWdlIChsb25nIGZpcnN0LCBsb25nIG5FbGVtZW50cywgY29uc3Qgc3RkOjp2YWxh cnJheTxUPiYgaW5EYXRhLCBUKiBudWxsVmFsdWUgPSAwKTsKCgoKCgogICAgICAgIHZpcnR1YWwg dm9pZCB3cml0ZUltYWdlIChjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgZmlyc3RWZXJ0ZXgsIGNv bnN0IHN0ZDo6dmVjdG9yPGxvbmc+JiBsYXN0VmVydGV4LCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+ JiBpbkRhdGEpOwoKCgoKCiAgICBwcm90ZWN0ZWQ6CgoKCgogICAgICAgIFByaW1hcnlIRFUgKEZJ VFNCYXNlKiBwLCBjb25zdCBpbnQgYml0cGl4LCBjb25zdCBpbnQgbmF4aXMsIGNvbnN0IHN0ZDo6 dmVjdG9yPGxvbmc+JiBuYXhlcywgY29uc3Qgc3RkOjp2YWxhcnJheTxUPiYgZGF0YSA9IHN0ZDo6 dmFsYXJyYXk8VD4oKSk7CgoKCgoKICAgICAgICBQcmltYXJ5SERVIChGSVRTQmFzZSogcCwgYm9v bCByZWFkRmxhZyA9IGZhbHNlLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlzID0gc3Rk Ojp2ZWN0b3I8c3RyaW5nPigpKTsKCgoKCgogICAgcHJpdmF0ZToKCiAgICAgICAgUHJpbWFyeUhE VShjb25zdCBQcmltYXJ5SERVPCBUID4gJnJpZ2h0KTsKCgogICAgICAgIFByaW1hcnlIRFU8IFQg PiAmIG9wZXJhdG9yPShjb25zdCBQcmltYXJ5SERVPCBUID4gJnJpZ2h0KTsKCgoKCiAgICAgICAg dmlydHVhbCBzdGQ6Om9zdHJlYW0gJiBwdXQgKHN0ZDo6b3N0cmVhbSAmcykgY29uc3Q7CgoKCgoK ICAgICAgICBjb25zdCBJbWFnZTxUPiYgZGF0YSAoKSBjb25zdDsKCgoKCgogICAgcHJpdmF0ZToK CgoKCiAgICAgICAgSW1hZ2U8VD4gbV9kYXRhOwoKCgoKICAgICAgZnJpZW5kIGNsYXNzIEhEVUNy ZWF0b3I7CiAgICAgIGZyaWVuZCBjbGFzcyBQSERVOwoKICB9OwojIDE4NSAiUHJpbWFyeUhEVS5o IgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgogIGlubGluZSBzdGQ6Om9zdHJlYW0gJiBQcmltYXJ5 SERVPFQ+OjpwdXQgKHN0ZDo6b3N0cmVhbSAmcykgY29uc3QKICB7CgogIHMgPDwgIlByaW1hcnlI RFU6OiBTaW1wbGU/ICIgPDwgc2ltcGxlKCkgPDwgIiBFeHRlbmQ/OiAiIDw8IGV4dGVuZCgpIDw8 CiAgICAiIEJpdHBpeDogIiA8PCBiaXRwaXgoKSA8PCAiIG5heGlzID0gIiA8PCBheGVzKCkgPDwg IlxuIjsKICBzIDw8ICJBeGlzIExlbmd0aHM6IFxuIjsKCgoKICBmb3IgKGludCBpPTA7IGkgPCBh eGVzKCk7IGkrKykKICAgICBzIDw8ICIgYXhpc1siIDw8IGkgPDwgIl0gIiA8PCBheGlzKGkpIDw8 ICJcbiI7CiAgcyA8PCAiIEhJU1RPUlk6ICIgPDwgaGlzdG9yeSgpIDw8ICdcbic7CiAgcyA8PCAi IENPTU1FTlRTOiAiIDw8Y29tbWVudCgpIDw8ICdcbic7CiAgcmV0dXJuIHM7CgogIH0KCgoKICB0 ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICBpbmxpbmUgY29uc3QgSW1hZ2U8VD4mIFByaW1hcnlIRFU8 VD46OmRhdGEgKCkgY29uc3QKICB7CgogICAgcmV0dXJuIG1fZGF0YTsKCiAgfQoKCgogIHRlbXBs YXRlIDx0eXBlbmFtZSBUPgogIFByaW1hcnlIRFU8VD46OlByaW1hcnlIRFUoY29uc3QgUHJpbWFy eUhEVTxUPiAmcmlnaHQpCgogICAgICA6IFBIRFUocmlnaHQpLCBtX2RhdGEocmlnaHQubV9kYXRh KQoKCgogIHsKCgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgUHJpbWFyeUhEVTxUPjo6 UHJpbWFyeUhEVSAoRklUU0Jhc2UqIHAsIGNvbnN0IGludCBiaXRwaXgsIGNvbnN0IGludCBuYXhp cywgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIG5heGVzLCBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+ JiBkYXRhKQoKICAgICAgICA6IFBIRFUocCxiaXRwaXgsbmF4aXMsbmF4ZXMpLG1fZGF0YShkYXRh KQoKCgogIHsKCgogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CiAgUHJpbWFyeUhEVTxUPjo6 UHJpbWFyeUhEVSAoRklUU0Jhc2UqIHAsIGJvb2wgcmVhZEZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9y PHN0cmluZz4mIGtleXMpCgogICAgICAgIDogUEhEVShwKSwgbV9kYXRhKCkKCgoKICB7CgogIHVu c2lnbmVkIGludCB6ZXJvID0gMDsKICBpbml0UmVhZCgpOwoKICBpZiAocmVhZEZsYWcgfHwga2V5 cy5zaXplKCkgPiB6ZXJvKSByZWFkRGF0YShyZWFkRmxhZyxrZXlzKTsKCgoKICB9CgoKCgogIHRl bXBsYXRlIDx0eXBlbmFtZSBUPgogIFByaW1hcnlIRFU8VD4gKiBQcmltYXJ5SERVPFQ+OjpjbG9u ZSAoRklUU0Jhc2UqIHApIGNvbnN0CiAgewoKICBQcmltYXJ5SERVPFQ+KiBjbG9uZWQgPSBuZXcg UHJpbWFyeUhEVTxUPigqdGhpcyk7CiAgY2xvbmVkLT5wYXJlbnQoKSA9IHA7CiAgcmV0dXJuIGNs b25lZDsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KICB2b2lkIFByaW1hcnlIRFU8VD46 OnJlYWREYXRhIChib29sIHJlYWRGbGFnLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+JiBrZXlz KQogIHsKCgoKICBtYWtlVGhpc0N1cnJlbnQoKTsKCiAgaWYgKCBrZXlzLnNpemUoKSA+IDApCiAg ewogICAgICAgIHN0ZDo6bGlzdDxzdHJpbmc+IGtleUxpc3Qoa2V5cy5zaXplKCkpOwoKCgogICAg ICAgIHN0ZDo6Y29weShrZXlzLmJlZ2luKCksa2V5cy5lbmQoKSxrZXlMaXN0LmJlZ2luKCkpOwog ICAgICAgIHJlYWRLZXl3b3JkcyhrZXlMaXN0KTsKICB9CgoKCiAgaWYgKCByZWFkRmxhZyAmJiAo bmF4aXMoKSA+IDApICkKICB7CiAgICAgICAgRklUU1V0aWw6OkZpdHNOdWxsVmFsdWU8VD4gbnVs bDsKICAgICAgICBsb25nIGluaXQoMSk7CiAgICAgICAgVCBudWxWYWx1ZShudWxsKCkpOwogICAg ICAgIGxvbmcgbmVsZW1lbnRzKHN0ZDo6YWNjdW11bGF0ZSgmbmF4ZXMoKVswXSwmbmF4ZXMoKVtu YXhpcygpXSxpbml0LHN0ZDo6bXVsdGlwbGllczxsb25nPigpICkpOwogICAgICAgIHJlYWRJbWFn ZSgxLG5lbGVtZW50cywmbnVsVmFsdWUpOwoKICAgIH0KCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5h bWUgVD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBQcmltYXJ5SERVPFQ+OjppbWFnZSAoKSBj b25zdAogIHsKCgoKICAgIHJldHVybiBtX2RhdGEuaW1hZ2UoKTsKICB9CgogIHRlbXBsYXRlIDx0 eXBlbmFtZSBUPgogIHN0ZDo6dmFsYXJyYXk8VD4mIFByaW1hcnlIRFU8VD46OmltYWdlICgpCiAg ewoKCgogICAgcmV0dXJuIG1fZGF0YS5pbWFnZSgpOwogIH0KCiAgdGVtcGxhdGUgPHR5cGVuYW1l IFQ+CiAgdm9pZCBQcmltYXJ5SERVPFQ+OjpzZXRJbWFnZSAoY29uc3Qgc3RkOjp2YWxhcnJheTxU PiYgaW5EYXRhKQogIHsKCiAgICBtX2RhdGEuaW1hZ2UoKS5yZXNpemUoaW5EYXRhLnNpemUoKSk7 CiAgICBtX2RhdGEuc2V0SW1hZ2UoaW5EYXRhKTsKCiAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUg VD4KICBjb25zdCBzdGQ6OnZhbGFycmF5PFQ+JiBQcmltYXJ5SERVPFQ+OjpyZWFkSW1hZ2UgKGxv bmcgZmlyc3QsIGxvbmcgbkVsZW1lbnRzLCBUKiBudWxsVmFsdWUpCiAgewoKICAgIG1ha2VUaGlz Q3VycmVudCgpOwogICAgcmV0dXJuIG1fZGF0YS5yZWFkSW1hZ2UoZml0c1BvaW50ZXIoKSxmaXJz dCxuRWxlbWVudHMsbnVsbFZhbHVlLG5heGVzKCksYW55bnVsKCkpOwoKICB9CgogIHRlbXBsYXRl IDx0eXBlbmFtZSBUPgogIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIFByaW1hcnlIRFU8VD46OnJl YWRJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6 OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4mIHN0cmlk ZSwgVCogbnVsbFZhbHVlKQogIHsKCiAgICBtYWtlVGhpc0N1cnJlbnQoKTsKICAgIHJldHVybiBt X2RhdGEucmVhZEltYWdlKGZpdHNQb2ludGVyKCksZmlyc3RWZXJ0ZXgsbGFzdFZlcnRleCxzdHJp ZGUsbnVsbFZhbHVlLG5heGVzKCksYW55bnVsKCkpOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFt ZSBUPgogIHZvaWQgUHJpbWFyeUhEVTxUPjo6d3JpdGVJbWFnZSAobG9uZyBmaXJzdCwgbG9uZyBu RWxlbWVudHMsIGNvbnN0IHN0ZDo6dmFsYXJyYXk8VD4mIGluRGF0YSwgVCogbnVsbFZhbHVlKQog IHsKCiAgICBtX2RhdGEud3JpdGVJbWFnZShmaXRzUG9pbnRlcigpLGZpcnN0LG5FbGVtZW50cyxp bkRhdGEsbmF4ZXMoKSxudWxsVmFsdWUpOwoKICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBUPgog IHZvaWQgUHJpbWFyeUhEVTxUPjo6d3JpdGVJbWFnZSAoY29uc3Qgc3RkOjp2ZWN0b3I8bG9uZz4m IGZpcnN0VmVydGV4LCBjb25zdCBzdGQ6OnZlY3Rvcjxsb25nPiYgbGFzdFZlcnRleCwgY29uc3Qg c3RkOjp2YWxhcnJheTxUPiYgaW5EYXRhKQogIHsKCiAgICBtX2RhdGEud3JpdGVJbWFnZShmaXRz UG9pbnRlcigpLGZpcnN0VmVydGV4LGxhc3RWZXJ0ZXgsaW5EYXRhLG5heGVzKCkpOwoKICB9CgoK CgoKfQojIDM5ICJGSVRTLmN4eCIgMgoKIyAxICJGSVRTLmgiIDEKIyA0MSAiRklUUy5jeHgiIDIK CgoKCgoKCiMgMSAiY29uZmlnLmgiIDEKIyA0OSAiRklUUy5jeHgiIDIKCgoKCgojIDEgIi91c3Iv aW5jbHVkZS9nKystdjMvc3N0cmVhbSIgMSAzCiMgNTUgIkZJVFMuY3h4IiAyCgoKdXNpbmcgc3Rk OjplbmRsOwp1c2luZyBzdGQ6OmNvdXQ7CnVzaW5nIHN0ZDo6Y2VycjsKCiMgMSAiL3Vzci9pbmNs dWRlL2crKy12My9tZW1vcnkiIDEgMwojIDYyICJGSVRTLmN4eCIgMgoKCgpuYW1lc3BhY2UgQ0Nm aXRzIHsKCgoKCgogIEZJVFM6Ok5vU3VjaEhEVTo6Tm9TdWNoSERVIChjb25zdCBzdHJpbmcmIGRp YWcsIGJvb2wgc2lsZW50KQoKICA6IEZpdHNFeGNlcHRpb24oIkZJVFMgRXJyb3I6IENhbm5vdCBy ZWFkIEhEVSBpbiBGSVRTIGZpbGU6IixzaWxlbnQpCgoKCiAgewoKCiAgaWYgKCBGSVRTOjp2ZXJi b3NlTW9kZSgpIHx8ICFzaWxlbnQpIHN0ZDo6Y2VyciA8PCBkaWFnIDw8ICJcbiI7CgogIH0KCgoK CiAgRklUUzo6T3BlcmF0aW9uTm90U3VwcG9ydGVkOjpPcGVyYXRpb25Ob3RTdXBwb3J0ZWQgKGNv bnN0IHN0cmluZyYgbXNnLCBib29sIHNpbGVudCkKCiAgOiBGaXRzRXhjZXB0aW9uKCJGSVRTIEVy cm9yOiBPcGVyYXRpb24gbm90IHN1cHBvcnRlZDoiLHNpbGVudCkKCgoKICB7CgogICAgaWYgKCBG SVRTOjp2ZXJib3NlTW9kZSgpIHx8ICFzaWxlbnQpIHN0ZDo6Y2VyciA8PCBtc2cgPDwgIlxuIjsK CiAgfQoKCgoKICBGSVRTOjpDYW50T3Blbjo6Q2FudE9wZW4gKGNvbnN0IHN0cmluZyYgZGlhZywg Ym9vbCBzaWxlbnQpCgogICA6IEZpdHNFeGNlcHRpb24oIkZJVFMgRXJyb3I6IENhbm5vdCBvcGVu IGZpbGUgIixzaWxlbnQpCgoKCiAgewoKICAgIGlmICggRklUUzo6dmVyYm9zZU1vZGUoKSB8fCAh c2lsZW50KSBzdGQ6OmNlcnIgPDwgZGlhZyA8PCAiXG4iOwoKICB9CgoKCgogIEZJVFM6OkNhbnRD cmVhdGU6OkNhbnRDcmVhdGUgKGNvbnN0IHN0cmluZyYgZGlhZywgYm9vbCBzaWxlbnQpCgogICA6 IEZpdHNFeGNlcHRpb24oc3RyaW5nKCJGSVRTIEVycm9yOiBDYW5ub3QgY3JlYXRlIGZpbGUgIiks c2lsZW50KQoKCgogIHsKCiAgc3RkOjpjZXJyIDw8IGRpYWcgPDwgJ1xuJzsKCiAgfQoKCgoKCiAg Ym9vbCBGSVRTOjpzX3ZlcmJvc2VNb2RlID0gZmFsc2U7CgoKICBGSVRTOjpGSVRTKGNvbnN0IEZJ VFMgJnJpZ2h0KQoKICAgIDogbV9GSVRTSW1wbChyaWdodC5tX0ZJVFNJbXBsLT5jbG9uZSgpKQoK CgogIHsKCgogIH0KCiAgRklUUzo6RklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21vZGUgbW9k ZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlL ZXlzKQoKICA6IG1fRklUU0ltcGwobmV3IEZJVFNCYXNlKG5hbWUsbW9kZSkpCgoKCiAgewoKCgoK ICAgICAgICAgIGlmIChtb2RlID09IFJlYWQpCiAgICAgICAgICB7CiAgICAgICAgICAgICAgICBv cGVuKG1vZGUpOwoKCiAgICAgICAgICAgICAgICByZWFkKHJlYWREYXRhRmxhZyxwcmltYXJ5S2V5 cyk7CiAgICAgICAgICAgICAgICByZWFkRXh0ZW5zaW9ucyhyZWFkRGF0YUZsYWcpOwogICAgICAg ICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgewoKCgoKCgoKICAgICAgICAgICAgICAgIGlm IChjcmVhdGUoKSApCiAgICAgICAgICAgICAgICB7CgoKCiAgICAgICAgICAgICAgICAgICAgICAg IEhEVUNyZWF0b3IgbWFrZVByaW1hcnkobV9GSVRTSW1wbCk7CgogICAgICAgICAgICAgICAgICAg ICAgICBwSERVKG1ha2VQcmltYXJ5LmNyZWF0ZUltYWdlKDgsMCxzdGQ6OnZlY3Rvcjxsb25nPigp KSk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAg ICB7CgoKICAgICAgICAgICAgICAgICAgICAgICAgcmVhZCgpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgfQoKICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2Rl IG1vZGUsIGNvbnN0IHN0cmluZyAmaGR1TmFtZSwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0 ZDo6dmVjdG9yPHN0cmluZz4mIGhkdUtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHBy aW1hcnlLZXksIGludCB2ZXJzaW9uKQoKICA6IG1fRklUU0ltcGwobmV3IEZJVFNCYXNlKG5hbWUs bW9kZSkpCgoKCiAgewoKICAgICAgICAgIG9wZW4obW9kZSk7CgoKCgoKICAgICAgICAgIHJlYWQo ZmFsc2UscHJpbWFyeUtleSk7CgoKCgoKICAgICAgICAgIHJlYWQoaGR1TmFtZSwgcmVhZERhdGFG bGFnLCBoZHVLZXlzLHZlcnNpb24pOwoKICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAm bmFtZSwgUldtb2RlIG1vZGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhkdU5hbWVzLCBi b29sIHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgcHJpbWFyeUtleSkK CiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLG1vZGUpKQoKCgogIHsKCgogICAgICAg IG9wZW4obW9kZSk7CgogICAgICAgIHJlYWQocmVhZERhdGFGbGFnLHByaW1hcnlLZXkpOwogICAg ICAgIHJlYWQoaGR1TmFtZXMscmVhZERhdGFGbGFnKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29u c3Qgc3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgRklUUyYgc291cmNlKQoKICAgIDogbV9GSVRTSW1w bChuZXcgRklUU0Jhc2UoZmlsZU5hbWUsV3JpdGUpKQoKCgogIHsKCgogICAgaWYgKGNyZWF0ZSgp ICkKICAgIHsKCgoKCiAgICAgICAgICAgIHBIRFUoc3RhdGljX2Nhc3Q8UEhEVSo+KHNvdXJjZS5w SERVKCkuY2xvbmUobV9GSVRTSW1wbCkpKTsKICAgIH0KICAgIGludCBzdGF0dXMoMCk7CgogICAg c291cmNlLnBIRFUoKS5tYWtlVGhpc0N1cnJlbnQoKTsKCiAgICBpZiAoZmZjb3B5KHNvdXJjZS5m aXRzUG9pbnRlcigpLG1fRklUU0ltcGwtPmZwdHIoKSwwLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJy b3Ioc3RhdHVzKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29uc3Qgc3RyaW5nICZuYW1lLCBSV21v ZGUgbW9kZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1TmFtZXMsIGNvbnN0IHN0ZDo6 dmVjdG9yPHN0ZDo6dmVjdG9yPHN0cmluZz4gPiYgaGR1S2V5cywgYm9vbCByZWFkRGF0YUZsYWcs IGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXlzLCBjb25zdCBzdGQ6OnZlY3Rv cjxpbnQ+JiBoZHVWZXJzaW9ucykKCiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLG1v ZGUpKQoKCgogIHsKCgogICAgICAgICAgb3Blbihtb2RlKTsKCgoKCgogICAgICAgICAgcmVhZChy ZWFkRGF0YUZsYWcscHJpbWFyeUtleXMpOwoKCgoKCgoKICAgICAgICAgIHJlYWQoaGR1TmFtZXMs IGhkdUtleXMsIHJlYWREYXRhRmxhZywgaGR1VmVyc2lvbnMpOwoKICB9CgogIEZJVFM6OkZJVFMg KGNvbnN0IHN0cmluZyYgbmFtZSwgaW50IGJpdHBpeCwgaW50IG5heGlzLCBsb25nICpuYXhlcykK CiAgOiBtX0ZJVFNJbXBsKG5ldyBGSVRTQmFzZShuYW1lLFdyaXRlKSkKCgoKICB7CgoKICAgICAg ICBzdGQ6OnZlY3Rvcjxsb25nPiB2YV9uYXhlcyhuYXhpcyk7CiAgICAgICAgc3RkOjpjb3B5KCZu YXhlc1swXSwmbmF4ZXNbbmF4aXNdLHZhX25heGVzLmJlZ2luKCkpOwoKICAgICAgICBjcmVhdGUo KTsKCgogICAgICAgIEhEVUNyZWF0b3IgbWFrZVByaW1hcnkobV9GSVRTSW1wbCk7CgoKICAgICAg ICBwSERVKG1ha2VQcmltYXJ5LmNyZWF0ZUltYWdlKGJpdHBpeCxuYXhpcyx2YV9uYXhlcykpOwoK ICB9CgogIEZJVFM6OkZJVFMgKGNvbnN0IHN0cmluZyAmbmFtZSwgUldtb2RlIG1vZGUsIGludCBo ZHVJbmRleCwgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGhk dUtleXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIHByaW1hcnlLZXkpCgogIDogbV9GSVRT SW1wbChuZXcgRklUU0Jhc2UobmFtZSxtb2RlKSkKCgoKICB7CgoKICAgICAgICBvcGVuKG1vZGUp OwoKCgogICAgICAgIHJlYWQocmVhZERhdGFGbGFnLHByaW1hcnlLZXkpOwoKICAgICAgICByZWFk KGhkdUluZGV4LHJlYWREYXRhRmxhZyxoZHVLZXlzKTsKCgogIH0KCiAgRklUUzo6RklUUyAoY29u c3Qgc3RyaW5nICZuYW1lLCBSV21vZGUgbW9kZSwgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYg c2VhcmNoS2V5cywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiAmc2VhcmNoVmFsdWVzLCBib29s IHJlYWREYXRhRmxhZywgY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1S2V5cywgY29uc3Qg c3RkOjp2ZWN0b3I8c3RyaW5nPiYgcHJpbWFyeUtleSwgaW50IHZlcnNpb24pCgogIDogbV9GSVRT SW1wbChuZXcgRklUU0Jhc2UobmFtZSxtb2RlKSkKCgoKICB7CgoKICAgICAgICBvcGVuKG1vZGUp OwoKCgoKICAgICAgICByZWFkKGZhbHNlLHByaW1hcnlLZXkpOwoKCgoKCgogICAgICAgIHJlYWQo c2VhcmNoS2V5cywgc2VhcmNoVmFsdWVzLCByZWFkRGF0YUZsYWcsIGhkdUtleXMsIHZlcnNpb24p OwoKICB9CgoKICBGSVRTOjp+RklUUygpCiAgewoKICAgIGRlc3Ryb3koKTsKCiAgfQoKCgoKICB2 b2lkIEZJVFM6OnVubWFwRXh0ZW5zaW9uIChFeHRIRFUmIGRvb21lZCkKICB7CgogICAgY29uc3Qg c3RyaW5nJiBkb29tZWROYW1lID0gZG9vbWVkLm5hbWUoKTsKICAgIGlmICggZXh0ZW5zaW9uKCku Y291bnQoZG9vbWVkTmFtZSkgPT0gMSApCiAgICB7CiAgICAgICAgRXh0TWFwSXQgeCA9IGV4dGVu c2lvbigpLmxvd2VyX2JvdW5kKGRvb21lZE5hbWUpOwogICAgICAgIGRlbGV0ZSAoKngpLnNlY29u ZDsKICAgICAgICBleHRlbnNpb24oKS5lcmFzZSh4KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAg ICAgICAgICAgc3RkOjpwYWlyPEV4dE1hcEl0LEV4dE1hcEl0PiBuYW1lZCA9IGV4dGVuc2lvbigp LmVxdWFsX3JhbmdlKGRvb21lZE5hbWUpOwoKICAgICAgICAgICAgRXh0TWFwSXQgeCA9IG5hbWVk LmZpcnN0OwoKICAgICAgICAgICAgd2hpbGUgKCB4ICE9IG5hbWVkLnNlY29uZCkKICAgICAgICAg ICAgewoKICAgICAgICAgICAgICAgICAgICBpZiAoICgqeCkuc2Vjb25kLT52ZXJzaW9uKCkgPT0g ZG9vbWVkLnZlcnNpb24oKSkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg ICAgICAgIGRlbGV0ZSAoKngpLnNlY29uZDsKICAgICAgICAgICAgICAgICAgICAgICAgZXh0ZW5z aW9uKCkuZXJhc2UoeCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICArK3g7CiAgICAgICAgICAgIH0KICAgIH0K CiAgfQoKICB2b2lkIEZJVFM6OmNsZWFyRXJyb3JzICgpCiAgewoKICAgIGZmY21zZygpOwoKICB9 CgogIHZvaWQgRklUUzo6ZGVsZXRlRXh0ZW5zaW9uIChjb25zdCBzdGQ6OnN0cmluZyYgZG9vbWVk LCBpbnQgdmVyc2lvbikKICB7CgogICAgaW50IHN0YXR1cygwKTsKICAgIEV4dEhEVSYgZCA9IGV4 dGVuc2lvbihkb29tZWQsdmVyc2lvbik7CiAgICBpZiAoZmZkaGR1KGZpdHNQb2ludGVyKCksMCwm c3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICB1bm1hcEV4dGVuc2lvbihkKTsK CiAgfQoKICBpbnQgRklUUzo6bmV4dFZlcnNpb25OdW1iZXIgKGNvbnN0IHN0cmluZyYgaW5wdXRO YW1lKSBjb25zdAogIHsKCiAgICBpbnQgbigwKTsKICAgIGludCBzdGF0dXMoMCk7CiAgICBpbnQg Y3VycmVudCgwKTsKICAgIGlmIChmZnRoZHUoZml0c1BvaW50ZXIoKSwmbiwmc3RhdHVzKSkgdGhy b3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICBmZmdoZG4oZml0c1BvaW50ZXIoKSwmY3VycmVudCk7 CgogICAgaW50IGNvdW50KDApOwogICAgZm9yIChpbnQgaiA9IDI7IGogPD0gbjsgKytqKQogICAg ewogICAgICAgIGlmIChuYW1lT2ZVbm1hcHBlZChqKSA9PSBpbnB1dE5hbWUpICsrY291bnQ7CiAg ICB9CiAgICBpZiAoZmZtYWhkKGZpdHNQb2ludGVyKCksY3VycmVudCwwLCZzdGF0dXMpKSB0aHJv dyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIHJldHVybiBjb3VudCsxOwoKICB9CgogIHZvaWQgRklU Uzo6cmVhZCAoYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGtl eXMpCiAgewoKCiAgIEhEVUNyZWF0b3IgY3JlYXRlKG1fRklUU0ltcGwpOwoKCiAgIHBIRFUoc3Rh dGljX2Nhc3Q8UEhEVSo+KGNyZWF0ZS5nZXRIZHUoMCxyZWFkRGF0YUZsYWcsa2V5cykpKTsKCgog IH0KCiAgdm9pZCBGSVRTOjpyZWFkIChjb25zdCBzdHJpbmcgJmhkdU5hbWUsIGJvb2wgcmVhZERh dGFGbGFnLCBjb25zdCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZrZXlzLCBpbnQgdmVyc2lvbikKICB7 CgogICAgICAgSERVQ3JlYXRvciBjcmVhdGUobV9GSVRTSW1wbCk7CgogICAgICAgIHRyeQogICAg ICAgIHsKCiAgICAgICAgICAgICAgICBFeHRIRFUqIG5ld0hEVSA9IHN0YXRpY19jYXN0PEV4dEhE VSo+KGNyZWF0ZS5nZXRIZHUoaGR1TmFtZSwgcmVhZERhdGFGbGFnLCBrZXlzLCBmYWxzZSwgdmVy c2lvbikpOwoKICAgICAgICAgICAgICAgIGFkZEV4dGVuc2lvbihuZXdIRFUpOwogICAgICAgIH0K ICAgICAgICBjYXRjaCAoIC4uLiApCiAgICAgICAgewogICAgICAgICAgICAgICAgdGhyb3cgTm9T dWNoSERVKGhkdU5hbWUpOwogICAgICAgIH0KCgogIH0KCiAgdm9pZCBGSVRTOjpyZWFkIChjb25z dCBzdGQ6OnZlY3RvcjxzdHJpbmc+ICZoZHVOYW1lcywgYm9vbCByZWFkRGF0YUZsYWcpCiAgewoK ICAgaW50IG5oZHU9aGR1TmFtZXMuc2l6ZSgpOwogICBIRFVDcmVhdG9yIGNyZWF0ZShtX0ZJVFNJ bXBsKTsKCiAgIGZvciAoaW50IGkgPSAwOyBpIDwgbmhkdSA7IGkrKykKICAgewogICAgICAgIHRy eQogICAgICAgIHsKCgogICAgICAgICAgICAgICAgYWRkRXh0ZW5zaW9uKHN0YXRpY19jYXN0PEV4 dEhEVSo+KGNyZWF0ZS5nZXRIZHUoaGR1TmFtZXNbaV0sIHJlYWREYXRhRmxhZykpKTsKICAgICAg ICAgICAgICAgIGNyZWF0ZS5yZXNldCgpOwogICAgICAgIH0KICAgICAgICBjYXRjaCAoIE5vU3Vj aEhEVSApCiAgICAgICAgewoKCiAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAg ICAgICAgY2F0Y2ggKCAuLi4gKQogICAgICAgIHsKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgIH0KICAgIH0KCgoKICB9CgogIHZvaWQgRklUUzo6cmVhZCAoY29uc3Qgc3RkOjp2ZWN0b3I8 c3RyaW5nPiAmaGR1TmFtZXMsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0ZDo6dmVjdG9yPHN0cmluZz4g PiAma2V5cywgYm9vbCByZWFkRGF0YUZsYWcsIGNvbnN0IHN0ZDo6dmVjdG9yPGludD4mIGhkdVZl cnNpb25zKQogIHsKCgogICBpbnQgbmhkdT1oZHVOYW1lcy5zaXplKCk7CgoKICAgSERVQ3JlYXRv ciBjcmVhdGUobV9GSVRTSW1wbCk7CgogICBmb3IgKGludCBpID0gMDsgaSA8IG5oZHUgOyBpKysp CiAgIHsKICAgICAgICB0cnkKICAgICAgICB7CgoKICAgICAgICAgICAgICAgIGFkZEV4dGVuc2lv bihzdGF0aWNfY2FzdDxFeHRIRFUqPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNyZWF0 ZS5nZXRIZHUoaGR1TmFtZXNbaV0sIHJlYWREYXRhRmxhZyxrZXlzW2ldLGZhbHNlLGhkdVZlcnNp b25zW2ldKSkpOwoKICAgICAgICAgICAgICAgIGNyZWF0ZS5yZXNldCgpOwogICAgICAgIH0KICAg ICAgICBjYXRjaCAoIE5vU3VjaEhEVSApCiAgICAgICAgewoKCgogICAgICAgICAgICAgICAgY29u dGludWU7CiAgICAgICAgfQogICAgICAgIGNhdGNoICggLi4uICkKICAgICAgICB7CiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICB9CgoKICB9CgogIHZvaWQgRklUUzo6b3BlbiAo Uldtb2RlIG1vZGUpCiAgewoKICBpbnQgc3RhdHVzPTA7CgoKICBzdGF0dXMgPSBmZm9wZW4oJm1f RklUU0ltcGwtPmZwdHIoKSwgbV9GSVRTSW1wbC0+bmFtZSgpLmNfc3RyKCksIG1vZGUsICZzdGF0 dXMpOwoKICBjb25zdCBzdGQ6OnN0cmluZyBkaWFnIChtX0ZJVFNJbXBsLT5uYW1lKCkpOwogIGJv b2wgc2lsZW50ID0gc192ZXJib3NlTW9kZTsKICBpZiAoc3RhdHVzICE9IDApCiAgewogICAgICAg ICAgaWYgKHN0YXR1cyA9PSAxMDQpIHRocm93IENhbnRPcGVuKGRpYWcsc2lsZW50KTsKICAgICAg ICAgIGVsc2UgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgfQoKCiAgfQoKICBib29sIEZJVFM6 OmNyZWF0ZSAoKQogIHsKCgogICAgICAgICAgaW50IHN0YXR1cygwKTsKIyA1NjcgIkZJVFMuY3h4 IgogICAgICAgICAgc3RyaW5nIGZOYW1lID0gbV9GSVRTSW1wbC0+bmFtZSgpOwogICAgICAgICAg aWYgKG1fRklUU0ltcGwtPm5hbWUoKVswXSA9PSAnIScpCiAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIG1fRklUU0ltcGwtPm5hbWUoKSA9IGZOYW1lLnN1YnN0cigxKTsKICAgICAgICAgIH0K CiAgICAgICAgICB0cnkKICAgICAgICAgIHsKCgogICAgICAgICAgICAgICAgICBmZmluaXQoJm1f RklUU0ltcGwtPmZwdHIoKSxmTmFtZS5jX3N0cigpLCZzdGF0dXMpOwogICAgICAgICAgICAgICAg ICBpZiAoc3RhdHVzID09IDEwNSkKICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgICAgICAgICBzdHJpbmcgd2FybihmTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAg d2FybiArPSAiIGF0dGVtcHRpbmcgdG8gb3BlbiBleGlzdGluZyBmaWxlIjsKICAgICAgICAgICAg ICAgICAgICAgICAgICB0aHJvdyBGSVRTOjpDYW50Q3JlYXRlKHdhcm4sdHJ1ZSk7CiAgICAgICAg ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RhdHVzKSB0aHJvdyBGaXRz RXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9 CiAgICAgICAgICBjYXRjaCAoIENhbnRDcmVhdGUgKQogICAgICAgICAgewoKCiAgICAgICAgICAg ICAgICAgIG9wZW4oV3JpdGUpOwogICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAg ICAgICB9CgoKCgogIH0KCiAgaW50IEZJVFM6OmNsb3NlICgpIHRocm93ICgpCiAgewoKICBpbnQg c3RhdHVzPTA7CiAgaWYgKG1fRklUU0ltcGwgPT0gMCkgcmV0dXJuIDA7CgogIHN0YXR1cyA9IGZm Y2xvcyhtX0ZJVFNJbXBsLT5mcHRyKCksICZzdGF0dXMpOwogIHJldHVybiBzdGF0dXM7CgogIH0K CiAgRklUUyAqIEZJVFM6OmNsb25lICgpIGNvbnN0CiAgewoKICByZXR1cm4gbmV3IEZJVFMoKnRo aXMpOwoKICB9CgogIGNvbnN0IEV4dEhEVSYgRklUUzo6ZXh0ZW5zaW9uIChpbnQgaSkgY29uc3QK ICB7CgoKICBjb25zdCBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwogIEV4 dE1hcENvbnN0SXQgaGR1QnlOdW0gPSBleHQuYmVnaW4oKTsKICBFeHRNYXBDb25zdEl0IGVuZE9m TGlzdCA9IGV4dC5lbmQoKTsKICB3aGlsZSAoaGR1QnlOdW0gIT0gZW5kT2ZMaXN0KQogIHsKICAg ICAgICAgIGlmICgoKmhkdUJ5TnVtKS5zZWNvbmQtPmluZGV4KCkgPT0gaSkgYnJlYWs7CiAgICAg ICAgICArK2hkdUJ5TnVtOwogIH0KCiAgaWYgKGhkdUJ5TnVtID09IGVuZE9mTGlzdCkKICB7CgoK CiAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwoKICAgICAgIG1zZyA8PCAiTm8gSERVIHdp dGggaW5kZXggIiA8PCBpIDw8ICdcbic7CiAgICAgICB0aHJvdyBOb1N1Y2hIRFUobXNnLnN0cigp KTsKICB9CiAgKCpoZHVCeU51bSkuc2Vjb25kLT5tYWtlVGhpc0N1cnJlbnQoKTsKICByZXR1cm4g KigoKmhkdUJ5TnVtKS5zZWNvbmQpOwoKICB9CgogIG9zdHJlYW0gJiBGSVRTOjpwdXQgKG9zdHJl YW0gJnMpIGNvbnN0CiAgewoKICBzIDw8ICJGSVRTOjogUHJpbWFyeSBIRFU6IFxuIiA7CgogIHMg PDwgKm1fRklUU0ltcGwtPnBIRFUoKSA8PCBlbmRsOwoKICBzIDw8ICJGSVRTOjogRXh0ZW5zaW9u czogXG4iOwoKICBjb25zdCBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwog IEV4dE1hcENvbnN0SXQgZW5kT2ZMaXN0ID0gZXh0LmVuZCgpOwoKICBmb3IgKEV4dE1hcENvbnN0 SXQgaXQgPSBleHQuYmVnaW4oKTsKICAgICAgIGl0ICE9IGVuZE9mTGlzdDsKICAgICAgICsraXQp CiAgICAgcyA8PCAqKCgqaXQpLnNlY29uZCkgPDwgZW5kbDsKCiAgcmV0dXJuIHM7CgoKICB9Cgog IGZpdHNmaWxlKiYgRklUUzo6Zml0c1BvaW50ZXIgKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4g bV9GSVRTSW1wbC0+ZnB0cigpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpleHRlbnNpb24gKGludCBp KQogIHsKCiAgRXh0TWFwJiBleHQgPSBtX0ZJVFNJbXBsLT5leHRlbnNpb24oKTsKICBFeHRNYXBJ dCBoZHVCeU51bSA9IGV4dC5iZWdpbigpOwogIEV4dE1hcEl0IGVuZE9mTGlzdCA9IGV4dC5lbmQo KTsKCiAgd2hpbGUgKGhkdUJ5TnVtICE9IGVuZE9mTGlzdCkKICB7CiAgICAgaWYgKCgqaGR1QnlO dW0pLnNlY29uZC0+aW5kZXgoKSA9PSBpKSBicmVhazsKICAgICArK2hkdUJ5TnVtOwogIH0KCiAg aWYgKGhkdUJ5TnVtID09IGVuZE9mTGlzdCkKICB7CgoKCiAgICAgICBzdGQ6Om9zdHJpbmdzdHJl YW0gbXNnOwoKICAgICAgIG1zZyA8PCAiTm8gSERVIHdpdGggaW5kZXggIiA8PCBpOwogICAgICAg dGhyb3cgTm9TdWNoSERVKG1zZy5zdHIoKSk7CiAgfQogICgqaGR1QnlOdW0pLnNlY29uZC0+bWFr ZVRoaXNDdXJyZW50KCk7CiAgcmV0dXJuICooKCpoZHVCeU51bSkuc2Vjb25kKTsKCiAgfQoKICBj b25zdCBFeHRIRFUmIEZJVFM6OmV4dGVuc2lvbiAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQg dmVyc2lvbikgY29uc3QKICB7CgoKICByZXR1cm4gZXh0YnlWZXJzaW9uKGhkdU5hbWUsdmVyc2lv bik7CgogIH0KCiAgY29uc3QgUEhEVSYgRklUUzo6cEhEVSAoKSBjb25zdAogIHsKCgoKICAgIHJl dHVybiAqbV9GSVRTSW1wbC0+cEhEVSgpOwogIH0KCiAgUEhEVSYgRklUUzo6cEhEVSAoKQogIHsK CgoKICAgIHJldHVybiAqbV9GSVRTSW1wbC0+cEhEVSgpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpl eHRieVZlcnNpb24gKGNvbnN0IHN0cmluZyYgaGR1TmFtZSwgaW50IHZlcnNpb24pIGNvbnN0CiAg ewoKCgoKICBFeHRNYXAmIGV4dCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpOwogIEV4dE1hcDo6 c2l6ZV90eXBlIG4gPSBleHQuY291bnQoaGR1TmFtZSk7CgogIGlmIChuID09IDApCiAgewoKCgog ICAgICAgc3RkOjpvc3RyaW5nc3RyZWFtIG1zZzsKCiAgICAgICBtc2cgPDwgIk5vIEhEVSB3aXRo IG5hbWUgIiA8PCBoZHVOYW1lOwogICAgICAgaWYgKHZlcnNpb24pIG1zZyA8PCAiIGFuZCB2ZXJz aW9uICIgPDwgdmVyc2lvbjsKICAgICAgIHRocm93IE5vU3VjaEhEVShtc2cuc3RyKCkpOwogIH0K CgogICAgICAgIEV4dE1hcEl0IGMgPSBleHQubG93ZXJfYm91bmQoaGR1TmFtZSk7CiAgICAgICAg aWYgKCBuID4gMSkKICAgICAgICB7CiAgICAgICAgICAgICBFeHRNYXBJdCBsYXN0ID0gZXh0LnVw cGVyX2JvdW5kKGhkdU5hbWUpOwogICAgICAgICAgICAgd2hpbGUgKCBjICE9IGxhc3QgKQogICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIGlmICgoKmMpLnNlY29uZC0+dmVyc2lvbigp ID09IHZlcnNpb24pIGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGMrKzsKICAgICAgICAgICAg IH0KICAgICAgICAgICAgIGlmICggYyA9PSBsYXN0ICkKICAgICAgICAgICAgIHsKCgoKICAgICAg ICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gbXNnOwoKICAgICAgICAgICAgICAgICBtc2cg PDwgIk5vIEhEVSB3aXRoIG5hbWUgIiA8PCBoZHVOYW1lOwogICAgICAgICAgICAgICAgIGlmICh2 ZXJzaW9uICE9IDEpIG1zZyA8PCAiIGFuZCB2ZXJzaW9uICIgPDwgdmVyc2lvbjsKICAgICAgICAg ICAgICAgICB0aHJvdyBOb1N1Y2hIRFUobXNnLnN0cigpKTsKICAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgICAgKCpjKS5zZWNvbmQtPm1ha2VUaGlzQ3VycmVudCgpOwogICAgICAgIHJldHVy biAqKCgqYykuc2Vjb25kKTsKCiAgfQoKICB2b2lkIEZJVFM6OnBIRFUgKFBIRFUqIHZhbHVlKQog IHsKICAgIG1fRklUU0ltcGwtPnBIRFUoKSA9IHZhbHVlOwoKCgogIH0KCiAgdm9pZCBGSVRTOjpy ZWFkIChpbnQgaGR1SW5kZXgsIGJvb2wgcmVhZERhdGFGbGFnLCBjb25zdCBzdGQ6OnZlY3Rvcjxz dHJpbmc+ICZrZXlzKQogIHsKCiAgICAgICAgIEhEVUNyZWF0b3IgY3JlYXRlKG1fRklUU0ltcGwp OwoKICAgICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICAgICAgICBpbnQgc3RhdHVzID0gMDsK ICAgICAgICAgICAgICAgIGludCB0b3RhbEhEVXMgPSAxOwogICAgICAgICAgICAgICAgaWYgKGZm dGhkdShtX0ZJVFNJbXBsLT5mcHRyKCksJnRvdGFsSERVcywmc3RhdHVzKSAhPSAwKQogICAgICAg ICAgICAgICAgICAgICAgICB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGhkdUlu ZGV4IDwgMCB8fCBoZHVJbmRleCA+IHRvdGFsSERVcykKICAgICAgICAgICAgICAgICAgICAgICAg ewoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ZDo6b3N0cmluZ3N0cmVhbSBk aWFnczsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGlhZ3MgPDwgIkludmFsaWQg SERVIG51bWJlciAiIDw8IGhkdUluZGV4IDw8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAiIHJlcXVlc3RlZCBmcm9tIEZJVFMgZmlsZSAiIDw8IG1fRklUU0ltcGwtPm5hbWUoKTsK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBOb1N1Y2hIRFUoZGlhZ3Muc3Ry KCkpOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlm IChoZHVJbmRleCA9PSAwKQogICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc3RkOjpjZXJyIDw8CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIlByaW1hcnkgaGVhZGVyIGlzIGFsd2F5cyByZWFkLCBkb2Vzbid0IG5lZWQgdG8g YmUgcmVxdWVzdGVkIiA8PCBlbmRsOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAg ICAgICAgICAgYWRkRXh0ZW5zaW9uKHN0YXRpY19jYXN0PEV4dEhEVSo+KGNyZWF0ZS5nZXRIZHUo aGR1SW5kZXgsIHJlYWREYXRhRmxhZywga2V5cykpKTsKICAgICAgICB9CiAgICAgICAgY2F0Y2gg KCAuLi4gKQogICAgICAgIHsKCgoKCiAgICAgICAgICAgICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0g bXNnOwoKICAgICAgICAgICAgICAgIG1zZyA8PCAiRXJyb3I6IENvdWxkIG5vdCByZWFkIGV4dGVu c2lvbjogIiA8PCBoZHVJbmRleDsKICAgICAgICAgICAgICAgIHRocm93IE5vU3VjaEhEVShtc2cu c3RyKCkpOwogICAgICAgIH0KCiAgfQoKICB2b2lkIEZJVFM6OnJlYWRFeHRlbnNpb25zIChib29s IHJlYWREYXRhRmxhZykKICB7CgogICBIRFVDcmVhdG9yIGNyZWF0ZShtX0ZJVFNJbXBsKTsKICAg aW50IHN0YXR1cyA9IDA7CiAgIGludCBudW1IRFVzID0gMDsKCiAgIGlmIChmZnRoZHUobV9GSVRT SW1wbC0+ZnB0cigpLCZudW1IRFVzLCZzdGF0dXMpICE9IDApIHRocm93IEZpdHNFcnJvcihzdGF0 dXMpOwoKCgoKCgogICBmb3IgKGludCBpID0gMTsgaSA8IG51bUhEVXMgOyBpKyspCiAgIHsKICAg ICAgIGFkZEV4dGVuc2lvbihzdGF0aWNfY2FzdDxFeHRIRFUqPihjcmVhdGUuZ2V0SGR1KGkscmVh ZERhdGFGbGFnKSkpOwogICAgICAgY3JlYXRlLnJlc2V0KCk7CiAgIH0KCiAgfQoKICBUYWJsZSog RklUUzo6YWRkVGFibGUgKHN0cmluZyYgaGR1TmFtZSwgaW50IHJvd3MsIGNvbnN0IHN0ZDo6dmVj dG9yPFZhbHVlVHlwZT4mIGNvbFR5cGUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVt bk5hbWUsIGNvbnN0IHN0ZDo6dmVjdG9yPHN0cmluZz4mIGNvbHVtbkZtdCwgY29uc3Qgc3RkOjp2 ZWN0b3I8c3RyaW5nPiYgY29sdW1uVW5pdCwgSGR1VHlwZSB0eXBlLCBpbnQgdmVyc2lvbikKICB7 CgoKICAgSERVQ3JlYXRvciBuZXdUYWJsZShtX0ZJVFNJbXBsKTsKICAgVGFibGUqIG5ld0hEVSA9 IHN0YXRpY19jYXN0PFRhYmxlKj4obmV3VGFibGUuY3JlYXRlVGFibGUoaGR1TmFtZSwgdHlwZSwg cm93cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbFR5cGUs IGNvbHVtbk5hbWUsIGNvbHVtbkZtdCwgY29sdW1uVW5pdCwgdmVyc2lvbikpOwogICByZXR1cm4g c3RhdGljX2Nhc3Q8VGFibGUqPihhZGRFeHRlbnNpb24obmV3SERVKSk7CgogIH0KCiAgRXh0SERV KiBGSVRTOjphZGRJbWFnZSAoY29uc3Qgc3RyaW5nJiBoZHVOYW1lLCBpbnQgYnBpeCwgc3RkOjp2 ZWN0b3I8bG9uZz4mIG5heGVzLCBpbnQgdmVyc2lvbikKICB7CgogICBIRFVDcmVhdG9yIG5ld0lt YWdlKG1fRklUU0ltcGwpOwogICBFeHRIRFUqIG5ld0hEVSA9IG5ld0ltYWdlLmNyZWF0ZUltYWdl KGhkdU5hbWUsIGJwaXgsIG5heGVzLnNpemUoKSwgbmF4ZXMsIHZlcnNpb24pOwogICByZXR1cm4g YWRkRXh0ZW5zaW9uKG5ld0hEVSk7CgogIH0KCiAgdm9pZCBGSVRTOjpkZXN0cm95ICgpIHRocm93 ICgpCiAgewoKCgoKCgogICAgICAgIGNsb3NlKCk7CgoKCiAgICAgICAgZGVsZXRlIG1fRklUU0lt cGw7CgoKICAgICAgICBtX0ZJVFNJbXBsID0gMDsKCiAgfQoKICBjb25zdCBzdHJpbmcmIEZJVFM6 OmN1cnJlbnRFeHRlbnNpb25OYW1lICgpIGNvbnN0CiAgewoKCgogICAgcmV0dXJuIG1fRklUU0lt cGwtPmN1cnJlbnRFeHRlbnNpb25OYW1lKCk7CiAgfQoKICBFeHRIRFUqIEZJVFM6OmFkZEV4dGVu c2lvbiAoRXh0SERVKiBleHQpCiAgewoKICAgaW50IHN0YXR1cygwKTsKICAgc3RyaW5nJiBleHRO YW1lID0gZXh0LT5uYW1lKCk7CiAgIEV4dE1hcDo6dmFsdWVfdHlwZSBhZGRIRFVFbnRyeShleHRO YW1lLGV4dCk7CiAgIG1fRklUU0ltcGwtPmN1cnJlbnRFeHRlbnNpb25OYW1lKCkgPSBleHROYW1l OwogICBFeHRNYXBJdCBhZGRlZCA9IG1fRklUU0ltcGwtPmV4dGVuc2lvbigpLmluc2VydChhZGRI RFVFbnRyeSk7CiAgIGlmIChmZnJkZWYoZml0c1BvaW50ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0 c0Vycm9yKHN0YXR1cyk7CiAgICgqYWRkZWQpLnNlY29uZC0+aW5kZXgoZml0c1BvaW50ZXIoKS0+ SERVcG9zaXRpb24pOwogICByZXR1cm4gKCphZGRlZCkuc2Vjb25kOwoKICB9CgogIHZvaWQgRklU Uzo6cmVhZCAoY29uc3Qgc3RkOjp2ZWN0b3I8c3RyaW5nPiYgc2VhcmNoS2V5cywgY29uc3Qgc3Rk Ojp2ZWN0b3I8c3RyaW5nPiAmc2VhcmNoVmFsdWVzLCBib29sIHJlYWREYXRhRmxhZywgY29uc3Qg c3RkOjp2ZWN0b3I8c3RyaW5nPiYgaGR1S2V5cywgaW50IHZlcnNpb24pCiAgewoKICBpbnQgdG90 YWxIRFVzID0gMTsKICBpbnQgc3RhdHVzID0gMDsKICBpZiAoZmZ0aGR1KG1fRklUU0ltcGwtPmZw dHIoKSwmdG90YWxIRFVzLCZzdGF0dXMpICE9IDApIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwog IEhEVUNyZWF0b3IgY3JlYXRlVGVzdChtX0ZJVFNJbXBsKTsKCiAgaW50IGhkdUluZGV4OwoKICBi b29sIGdvdEl0ID0gZmFsc2U7CiAgZm9yIChoZHVJbmRleCA9IDE7IGhkdUluZGV4IDwgdG90YWxI RFVzOyBoZHVJbmRleCsrICkKICB7CiAgICAgdHJ5CiAgICAgewogICAgICAgIHN0ZDo6YXV0b19w dHI8RXh0SERVPgogICAgICAgICAgdGVzdEhEVShzdGF0aWNfY2FzdDxFeHRIRFUqPihjcmVhdGVU ZXN0LmdldEhkdShoZHVJbmRleCxmYWxzZSxzZWFyY2hLZXlzKSkpOwoKCiAgICAgICAgc3RkOjp2 ZWN0b3I8c3RyaW5nPiB0ZXN0S2V5cyhzZWFyY2hLZXlzKTsKICAgICAgICBzdGQ6OnZlY3Rvcjxz dHJpbmc+IHRlc3RSZXN1bHRzKHNlYXJjaEtleXMuc2l6ZSgpLCIiKTsKICAgICAgICB0ZXN0SERV LT5yZWFkS2V5cyh0ZXN0S2V5cyx0ZXN0UmVzdWx0cyk7CiAgICAgICAgdXNpbmcgbmFtZXNwYWNl IEZJVFNVdGlsOwoKCgogICAgICAgIGlmICh0ZXN0S2V5cy5zaXplKCkgPT0gc2VhcmNoS2V5cy5z aXplKCkpCiAgICAgICAgewoKCiAgICAgICAgICAgc2l6ZV90IGsgPSAwOwogICAgICAgICAgIGdv dEl0ID0gdHJ1ZTsKICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+Ojpjb25zdF9pdGVyYXRv ciB2aShzZWFyY2hWYWx1ZXMuYmVnaW4oKSk7CiAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+ Ojpjb25zdF9pdGVyYXRvciB2aUVuZChzZWFyY2hWYWx1ZXMuZW5kKCkpOwoKICAgICAgICAgICB3 aGlsZSAodmkgIT0gdmlFbmQgJiYgZ290SXQpCiAgICAgICAgICAgewoKICAgICAgICAgICAgICBp ZiAodmktPnNpemUoKSkKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICBnb3RJdCA9 IChsb3dlckNhc2UodGVzdFJlc3VsdHNba10pID09IGxvd2VyQ2FzZSgqdmkpKTsKICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgKytrLCsrdmk7CiAgICAgICAgICAgfQoKICAgICAgICAgICBp ZiAoZ290SXQpCiAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICh2ZXJzaW9uID09IDEpIGJy ZWFrOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAg aW50IGV4dHZlciA9IDE7CiAgICAgICAgICAgICAgICAgdGVzdEhEVS0+cmVhZEtleSgiRVhUVkVS IixleHR2ZXIpOwoKICAgICAgICAgICAgICAgICBpZiAoZXh0dmVyID09IHZlcnNpb24pIGJyZWFr OwogICAgICAgICAgICAgICAgIGVsc2UgZ290SXQgPSBmYWxzZTsKICAgICAgICAgICAgICB9CiAg ICAgICAgICAgfQogICAgICAgIH0KICAgICB9CgogICAgIGNhdGNoIChIRFU6Ok5vU3VjaEtleXdv cmQpCiAgICAgewoKCiAgICAgICAgY29udGludWU7CiAgICAgfQoKICAgICBjYXRjaCAoRml0c0Vy cm9yKQogICAgIHsKICAgICAgICBjb250aW51ZTsKICAgICB9CgogICAgIGNhdGNoICguLi4pCiAg ICAgewogICAgICAgIHRocm93OwogICAgIH0KCiAgICAgY3JlYXRlVGVzdC5yZXNldCgpOwogIH0K CiAgaWYgKGdvdEl0KQogIHsKICAgICBzdHJpbmcgZXh0bmFtZSgiIik7CiAgICAgaW50IGV4dHZl ciA9IDA7CiAgICAgRXh0SERVOjpyZWFkSGR1TmFtZShtX0ZJVFNJbXBsLT5mcHRyKCksaGR1SW5k ZXgsZXh0bmFtZSxleHR2ZXIpOwogICAgIHJlYWQoZXh0bmFtZSxyZWFkRGF0YUZsYWcsaGR1S2V5 cyxleHR2ZXIpOwogICAgIGN1cnJlbnRFeHRlbnNpb25OYW1lKGV4dG5hbWUpOwogIH0KCiAgZWxz ZQogIHsKCgoKICAgICBzdGQ6Om9zdHJpbmdzdHJlYW0gZXJyOwoKICAgICAgZXJyIDw8ICJFcnJv cjogVW5hYmxlIHRvIGZpbmQgZXh0ZW5zaW9uIGNvbnRhaW5pbmcga2V5d29yZHMgIjsKICAgICAg c3RkOjpjb3B5KHNlYXJjaEtleXMuYmVnaW4oKSxzZWFyY2hLZXlzLmVuZCgpLAogICAgICAgICAg ICAgICAgc3RkOjpvc3RyZWFtX2l0ZXJhdG9yPHN0cmluZz4oZXJyLCIgIikpOwogICAgICBlcnIg PDwgIlxud2l0aCByZXF1aXJlZCB2YWx1ZXMgYW5kIHZlcnNpb24gbnVtYmVyICI7CiAgICAgIHRo cm93IE5vU3VjaEhEVShlcnIuc3RyKCkpOwogIH0KCiAgfQoKICB2b2lkIEZJVFM6OnN3YXAgKEZJ VFMmIHJpZ2h0KQogIHsKCiAgICBGSVRTVXRpbDo6c3dhcChtX0ZJVFNJbXBsLHJpZ2h0Lm1fRklU U0ltcGwpOwoKICB9CgogIGNvbnN0IHN0ZDo6bXVsdGltYXA8c3RyaW5nLEV4dEhEVSo+JiBGSVRT OjpleHRlbnNpb24gKCkgY29uc3QKICB7CgoKCiAgICByZXR1cm4gbV9GSVRTSW1wbC0+ZXh0ZW5z aW9uKCk7CiAgfQoKICB2b2lkIEZJVFM6OnJlc2V0UG9zaXRpb24gKCkKICB7CgogICAgaW50IHN0 YXR1cygwKTsKICAgIGlmIChmZm1haGQoZml0c1BvaW50ZXIoKSwxLDAsJnN0YXR1cykpIHRocm93 IEZpdHNFcnJvcihzdGF0dXMpOwoKICB9CgogIHZvaWQgRklUUzo6Y3VycmVudEV4dGVuc2lvbk5h bWUgKGNvbnN0IHN0cmluZyYgZXh0TmFtZSkKICB7CiAgICBtX0ZJVFNJbXBsLT5jdXJyZW50RXh0 ZW5zaW9uTmFtZSgpID0gZXh0TmFtZTsKCgoKICB9CgogIGNvbnN0IHN0cmluZyYgRklUUzo6bmFt ZSAoKSBjb25zdAogIHsKCgoKICAgIHJldHVybiBtX0ZJVFNJbXBsLT5uYW1lKCk7CiAgfQoKICBm aXRzZmlsZSomIEZJVFM6OmZpdHNQb2ludGVyICgpCiAgewoKCgogICAgcmV0dXJuIG1fRklUU0lt cGwtPmZwdHIoKTsKICB9CgogIHZvaWQgRklUUzo6Y29weSAoY29uc3QgSERVJiBzb3VyY2UpCiAg ewoKICAgIGludCBzdGF0dXMoMCk7CgogICAgc291cmNlLm1ha2VUaGlzQ3VycmVudCgpOwoKICAg IGlmIChmZmNvcHkoc291cmNlLmZpdHNQb2ludGVyKCksZml0c1BvaW50ZXIoKSwwLCZzdGF0dXMp KQogICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgoKCgoKCiAgfQoKICBU YWJsZSYgRklUUzo6ZmlsdGVyIChjb25zdCBzdHJpbmcmIGV4cHJlc3Npb24sIEV4dEhEVSYgaW5w dXRUYWJsZSwgYm9vbCBvdmVyd3JpdGUsIGJvb2wgcmVhZERhdGEpCiAgewojIDExMDAgIkZJVFMu Y3h4IgogICAgICAgc3RhdGljIGNoYXIgRVhUVkVSW10gPSAiRVhUVkVSIjsKCgogICAgICAgdHJ5 CiAgICAgICB7CiAgICAgICAgICAgICAgIFRhYmxlJiB0YWJsZSA9IGR5bmFtaWNfY2FzdDxUYWJs ZSY+KGlucHV0VGFibGUpOwogICAgICAgICAgICAgICBmaXRzZmlsZSogaW5wdXRGaXRzUG9pbnRl ciA9IGlucHV0VGFibGUuZml0c1BvaW50ZXIoKSA7CiAgICAgICAgICAgICAgIEZJVFNVdGlsOjph dXRvX2FycmF5X3B0cjxjaGFyPiBwTmFtZTEobmV3IGNoYXJbMTAyNV0pOwogICAgICAgICAgICAg ICBGSVRTVXRpbDo6YXV0b19hcnJheV9wdHI8Y2hhcj4gcE5hbWUyKG5ldyBjaGFyWzEwMjVdKTsK ICAgICAgICAgICAgICAgc3RyaW5nIHRhYmxlTmFtZSA9IHRhYmxlLm5hbWUoKTsKICAgICAgICAg ICAgICAgaW50IHRhYmxlVmVyc2lvbih0YWJsZS52ZXJzaW9uKCkpOwogICAgICAgICAgICAgICBj aGFyKiBjRXhwcmVzc2lvbiA9IGNvbnN0X2Nhc3Q8Y2hhcio+KGV4cHJlc3Npb24uY19zdHIoKSk7 CiAgICAgICAgICAgICAgIGludCBzdGF0dXMoMCk7CgoKCgoKICAgICAgICAgICAgICAgaWYgKGZm ZmxubShpbnB1dEZpdHNQb2ludGVyLHBOYW1lMS5nZXQoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vy cm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAgIGlmIChmZmZsbm0oZml0c1BvaW50ZXIoKSxwTmFt ZTIuZ2V0KCksJnN0YXR1cykpIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgICAgICAg ICBjb25zdCBzdHJpbmcmIGluZmlsZSA9IHN0cmluZyhwTmFtZTEuZ2V0KCkpOwogICAgICAgICAg ICAgICBjb25zdCBzdHJpbmcmIG91dGZpbGUgPSBzdHJpbmcocE5hbWUyLmdldCgpKTsKCgogICAg ICAgICAgICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+CiAgICAgICAgICAgICAgICAgICAga2V5U3Rv cmUodGFibGUua2V5V29yZCgpLnNpemUoKSArIHRhYmxlLmNvbHVtbigpLnNpemUoKSk7CgogICAg ICAgICAgICAgICBzdGQ6Om1hcDxzdHJpbmcsS2V5d29yZCo+Ojpjb25zdF9pdGVyYXRvciBrZXlJ dCh0YWJsZS5rZXlXb3JkKCkuYmVnaW4oKSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFwPHN0cmlu ZyxLZXl3b3JkKj46OmNvbnN0X2l0ZXJhdG9yIGtleUl0RW5kKHRhYmxlLmtleVdvcmQoKS5lbmQo KSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFwPHN0cmluZyxDb2x1bW4qPjo6Y29uc3RfaXRlcmF0 b3IgY29sSXQodGFibGUuY29sdW1uKCkuYmVnaW4oKSk7CiAgICAgICAgICAgICAgIHN0ZDo6bWFw PHN0cmluZyxDb2x1bW4qPjo6Y29uc3RfaXRlcmF0b3IgY29sSXRFbmQodGFibGUuY29sdW1uKCku ZW5kKCkpOwoKICAgICAgICAgICAgICAgc2l6ZV90IGNvdW50KDApOwogICAgICAgICAgICAgICBp ZiAoIXRhYmxlLmtleVdvcmQoKS5lbXB0eSgpKQogICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgICAgICAgIHdoaWxlICgga2V5SXQgIT0ga2V5SXRFbmQgKQogICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5U3RvcmVbY291bnRd ID0gKCprZXlJdCkuZmlyc3Q7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKytrZXlJ dCwgKytjb3VudDsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICB9Cgog ICAgICAgICAgICAgICBpZiAoICF0YWJsZS5jb2x1bW4oKS5lbXB0eSgpKQogICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICggY29sSXQgIT0gY29sSXRFbmQgKQog ICAgICAgICAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGtleVN0b3JlW2NvdW50XSA9ICgqY29sSXQpLmZpcnN0OwogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsrY29sSXQsICsrY291bnQ7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpbnQgcmV2aXNlZFZlcnNpb24odGFibGVWZXJz aW9uKTsKICAgICAgICAgICAgICAgaWYgKGluZmlsZSA9PSBvdXRmaWxlKQogICAgICAgICAgICAg ICB7CiAgICAgICAgICAgICAgICAgICAgICAgaWYgKG92ZXJ3cml0ZSkKICAgICAgICAgICAgICAg ICAgICAgICB7CgoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bm1hcEV4dGVu c2lvbihpbnB1dFRhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICByZXZpc2VkVmVyc2lvbiA9IG5leHRWZXJzaW9uTnVtYmVyKHRhYmxlTmFt ZSk7CgoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbG9uZUhlYWRlcihpbnB1dFRh YmxlKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmZwa3lqKGZpdHNQb2lu dGVyKCksRVhUVkVSLHJldmlzZWRWZXJzaW9uLDAsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAg ICAgICAgICAgICAgICB9CgogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZnNyb3coaW5wdXRG aXRzUG9pbnRlcixmaXRzUG9pbnRlcigpLGNFeHByZXNzaW9uLCZzdGF0dXMpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAg ICAgICAgICAgaWYgKGZmZmx1cyhmaXRzUG9pbnRlcigpLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJy b3Ioc3RhdHVzKTsKCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgZWxzZQogICAgICAg ICAgICAgICB7CgoKICAgICAgICAgICAgICAgICAgICAgICByZXZpc2VkVmVyc2lvbiA9IG5leHRW ZXJzaW9uTnVtYmVyKHRhYmxlTmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgY2xvbmVIZWFk ZXIoaW5wdXRUYWJsZSk7CgogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZnNyb3coaW5wdXRG aXRzUG9pbnRlcixmaXRzUG9pbnRlcigpLGNFeHByZXNzaW9uLCZzdGF0dXMpKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAgICAgICAgICAg ICAgICAgICAgIGlmIChmZnBreWooZml0c1BvaW50ZXIoKSxFWFRWRVIscmV2aXNlZFZlcnNpb24s MCwmc3RhdHVzKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJv cihzdGF0dXMpOwogICAgICAgICAgICAgICAgICAgICAgIGlmIChmZmZsdXMoZml0c1BvaW50ZXIo KSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAgICAgICAgICAgICB9CgoK ICAgICAgICAgICAgICAgSERVQ3JlYXRvciBjcmVhdGUobV9GSVRTSW1wbCk7CiAgICAgICAgICAg ICAgIEV4dEhEVSogcmVhZEJhY2sKICAgICAgICAgICAgICAgID0gc3RhdGljX2Nhc3Q8RXh0SERV Kj4oY3JlYXRlLmdldEhkdSh0YWJsZU5hbWUscmVhZERhdGEsa2V5U3RvcmUsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZmFsc2UscmV2aXNlZFZlcnNpb24pKTsKICAgICAgICAgICAg ICAgcmV0dXJuIHN0YXRpY19jYXN0PFRhYmxlJj4oKmFkZEV4dGVuc2lvbihyZWFkQmFjaykpOwog ICAgICAgfQogICAgICAgY2F0Y2ggKHN0ZDo6YmFkX2Nhc3QpCiAgICAgICB7CiAgICAgICAgICAg ICAgIHRocm93IE9wZXJhdGlvbk5vdFN1cHBvcnRlZCgiIGZpbHRlcmluZyByb3dzIGZyb20gYW4g aW1hZ2UgIik7CiAgICAgICB9CgoKCgoKCiAgfQoKICBzdGQ6Om11bHRpbWFwPHN0cmluZyxFeHRI RFUqPiYgRklUUzo6ZXh0ZW5zaW9uICgpCiAgewoKCgogICAgcmV0dXJuIG1fRklUU0ltcGwtPmV4 dGVuc2lvbigpOwogIH0KCiAgRXh0SERVJiBGSVRTOjpjdXJyZW50RXh0ZW5zaW9uICgpCiAgewoK CgogICAgaW50IG51bSgwKTsKICAgIGZmZ2hkbihmaXRzUG9pbnRlcigpLCZudW0pOwoKICAgIHJl dHVybiBleHRlbnNpb24obnVtIC0gMSk7CgogIH0KCiAgc3RyaW5nIEZJVFM6Om5hbWVPZlVubWFw cGVkIChpbnQgaGR1TnVtKSBjb25zdAogIHsKCgoKCiAgICBzdGF0aWMgY2hhciBFWFROQU1FW10g PSAiRVhUTkFNRSI7CiAgICBzdGF0aWMgY2hhciBIRFVOQU1FW10gPSAiSERVTkFNRSI7CiAgICBz dHJpbmcgcmV0VmFsKCIiKTsKICAgIGludCBjdXJyZW50KDApOwogICAgaW50IHN0YXR1cygwKTsK ICAgIGZmZ2hkbihmaXRzUG9pbnRlcigpLCZjdXJyZW50KTsKICAgIGlmIChmZm1haGQoZml0c1Bv aW50ZXIoKSxoZHVOdW0sMCwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogICAg RklUU1V0aWw6OmF1dG9fYXJyYXlfcHRyPGNoYXI+IHBUZXN0S2V5KG5ldyBjaGFyWzcxXSk7CiAg ICBjaGFyKiB0ZXN0S2V5ID0gcFRlc3RLZXkuZ2V0KCk7CgogICAgaWYgKGZmZ2t5cyhmaXRzUG9p bnRlcigpLEVYVE5BTUUsdGVzdEtleSwwLCZzdGF0dXMpID09IDApCiAgICB7CiAgICAgICAgICAg IHJldFZhbCA9IHN0cmluZyh0ZXN0S2V5KTsKICAgIH0KICAgIGVsc2UKICAgIHsKICAgICAgICBp ZiAoc3RhdHVzID09IDIwMikKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAwOwog ICAgICAgICAgICAgICAgZmZna3lzKGZpdHNQb2ludGVyKCksSERVTkFNRSx0ZXN0S2V5LDAsJnN0 YXR1cykgOwogICAgICAgICAgICAgICAgaWYgKHN0YXR1cyA9PSAwKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICByZXRWYWwgPSBzdHJpbmcodGVzdEtleSk7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICAgICAgIGlmIChzdGF0dXMgIT0gMjAyKSB0aHJvdyBGaXRzRXJyb3Ioc3Rh dHVzKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgIHsK ICAgICAgICAgICAgICAgIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgIH0KICAgIH0K ICAgIGlmIChmZm1haGQoZml0c1BvaW50ZXIoKSxjdXJyZW50LDAsJnN0YXR1cykpIHRocm93IEZp dHNFcnJvcihzdGF0dXMpOwoKICAgIHJldHVybiByZXRWYWw7CgoKICB9CgogIHZvaWQgRklUUzo6 Y2xvbmVIZWFkZXIgKGNvbnN0IEV4dEhEVSYgc291cmNlKQogIHsKCgoKCgogICAgc291cmNlLm1h a2VUaGlzQ3VycmVudCgpOwoKICAgIGZpdHNmaWxlKiBzb3VyY2VQb2ludGVyID0gc291cmNlLmZp dHNQb2ludGVyKCk7CiAgICBpbnQgbktleXMoMCk7CiAgICBpbnQgZHVtKDApOwogICAgaW50IHN0 YXR1cygwKTsKCgoKCiAgICBpZiAoZmZnaHBzKHNvdXJjZVBvaW50ZXIsJm5LZXlzLCZkdW0sJnN0 YXR1cykpIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgRklUU1V0aWw6OmF1dG9fYXJyYXlf cHRyPGNoYXI+IHBDYXJkKG5ldyBjaGFyWzgxXSk7CiAgICBjaGFyKiBjYXJkID0gcENhcmQuZ2V0 KCk7CgoKCgogICAgaWYgKHNvdXJjZVBvaW50ZXIgPT0gZml0c1BvaW50ZXIoKSkKICAgIHsKICAg ICAgICBzdGQ6OnZlY3RvcjxzdHJpbmc+IGNhcmRzKG5LZXlzKTsKICAgICAgICB7CiAgICAgICAg ICAgICAgICBmb3IgKGludCBqID0gMTsgaiA8PSBuS2V5czsgKytqKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmZncmVjKHNvdXJjZVBvaW50ZXIsaixjYXJk LCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICAgICAgICAgICAgICAg ICAgY2FyZHNbai0xXSA9IHN0cmluZyhjYXJkKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICB9 CgogICAgICAgIGlmIChmZmNyaGQoZml0c1BvaW50ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vy cm9yKHN0YXR1cyk7CiAgICAgICAgewogICAgICAgICAgICAgICAgZm9yIChpbnQgaiA9IDE7IGog PD0gbktleXM7ICsraikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg aWYgKGZmcHJlYyhmaXRzUG9pbnRlcigpLGNhcmRzW2otMV0uY19zdHIoKSwmc3RhdHVzKSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgfQogICAgfQoKCiAgICBlbHNlCiAgICB7CiAgICAgICAgaWYgKGZmY3JoZChmaXRzUG9p bnRlcigpLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgICAgICBmb3IgKGlu dCBqID0gMTsgaiA8PSBuS2V5czsgKytqKQogICAgICAgIHsKICAgICAgICAgICAgICAgIGlmIChm ZmdyZWMoc291cmNlUG9pbnRlcixqLGNhcmQsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAg ICAgIHRocm93IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgICAgICAgICAgaWYgKGZmcHJlYyhm aXRzUG9pbnRlcigpLGNhcmQsJnN0YXR1cykpCiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93 IEZpdHNFcnJvcihzdGF0dXMpOwogICAgICAgIH0KICAgIH0KCgoKICAgIHN0YXRpYyBjaGFyIFJP V1NbXSA9ICJOQVhJUzIiOwogICAgaWYgKGZmdWt5aihmaXRzUG9pbnRlcigpLFJPV1MsMCwwLCZz dGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIGlmIChmZmZsdXMoZml0c1BvaW50 ZXIoKSwmc3RhdHVzKSkgdGhyb3cgRml0c0Vycm9yKHN0YXR1cyk7CgogIH0KCiAgdm9pZCBGSVRT OjpkZWxldGVFeHRlbnNpb24gKGludCBkb29tZWQpCiAgewoKICAgIGludCBzdGF0dXMoMCk7CiAg ICBFeHRIRFUmIGQgPSBleHRlbnNpb24oZG9vbWVkKTsKICAgIGlmIChmZmRoZHUoZml0c1BvaW50 ZXIoKSwwLCZzdGF0dXMpKSB0aHJvdyBGaXRzRXJyb3Ioc3RhdHVzKTsKICAgIHVubWFwRXh0ZW5z aW9uKGQpOwoKICB9CgoKCgoKfQo=