From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 8783 invoked by alias); 19 Oct 2002 14:36:02 -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 8763 invoked by uid 71); 19 Oct 2002 14:36:01 -0000 Resent-Date: 19 Oct 2002 14:36:01 -0000 Resent-Message-ID: <20021019143601.8762.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, davmac@ozonline.com.au Received: (qmail 6239 invoked by uid 61); 19 Oct 2002 14:26:37 -0000 Message-Id: <20021019142637.6238.qmail@sources.redhat.com> Date: Sat, 19 Oct 2002 07:36:00 -0000 From: davmac@ozonline.com.au Reply-To: davmac@ozonline.com.au To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/8284: GCC 3.2 mistakenly assumes unaliased buffers with -O3 X-SW-Source: 2002-10/txt/msg00741.txt.bz2 List-Id: >Number: 8284 >Category: optimization >Synopsis: GCC 3.2 mistakenly assumes unaliased buffers with -O3 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: wrong-code >Submitter-Id: net >Arrival-Date: Sat Oct 19 07:36:00 PDT 2002 >Closed-Date: >Last-Modified: >Originator: Davin McCall >Release: 3.2 >Organization: >Environment: Custom linux distribution, Pentium3, kernel version 2.4.18. Binutils 2.13. Gcc version 3.2 >Description: When compiling glibc 2.3.1 I noticed problems with the readdir function for programs which were statically linked. On further investigation this turns out to be a bug in gcc. Some values are transferred from a buffer to some local variables, then the buffer is modified through a seperate pointer, and finally the values taken from the original buffer are compared to some values in the new buffer. However GCC (with -O3 option) doesn't seem to recognize that the old buffer is no longer available; it seems to assume that the two buffer pointers do not alias. The function in question is __getdents from glibc, I have attached preprocessed source. I have the generated assembly (with comments showing exactly where the problem occurs) as well, but can't seem to attach more than one file using this bug-reporting interface. >How-To-Repeat: gcc -S -O3 -fomit-frame-pointer getdents.i >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="getdents.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="getdents.i" dHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwpleHRlcm4gdm9pZCAqYWxsb2NhIChzaXplX3Qg X19zaXplKSA7CmV4dGVybiB2b2lkICpfX2FsbG9jYSAoc2l6ZV90IF9fc2l6ZSk7CgpleHRlcm4g aW50IF9fbGliY191c2VfYWxsb2NhIChzaXplX3Qgc2l6ZSkgX19hdHRyaWJ1dGVfXyAoKGNvbnN0 KSk7CmV4dGVybiBpbnQgX19saWJjX2FsbG9jYV9jdXRvZmYgKHNpemVfdCBzaXplKSBfX2F0dHJp YnV0ZV9fICgoY29uc3QpKTsKCmV4dGVybiBpbmxpbmUgaW50IF9fbGliY191c2VfYWxsb2NhIChz aXplX3Qgc2l6ZSkKewogIHJldHVybiAoX19idWlsdGluX2V4cGVjdCAoc2l6ZSA8PSAxNjM4NCAv IDQsIDEpCiAgICAgICAgICB8fCBfX2xpYmNfYWxsb2NhX2N1dG9mZiAoc2l6ZSkpOwp9CgpleHRl cm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBfX2NvbnN0 IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9f bGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogICAgIF9fYXR0cmlidXRlX18gKChfX25v cmV0dXJuX18pKTsKCmV4dGVybiB2b2lkIF9fYXNzZXJ0X3BlcnJvcl9mYWlsIChpbnQgX19lcnJu dW0sIF9fY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fY29uc3QgY2hhciAqX19mdW5jdGlvbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3JldHVy bl9fKSk7CgpleHRlcm4gdm9pZCBfX2Fzc2VydCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNv bnN0IGNoYXIgKl9fZmlsZSwgaW50IF9fbGluZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19ub3Jl dHVybl9fKSk7CgpleHRlcm4gdm9pZCBfX2Fzc2VydF9mYWlsIChfX2NvbnN0IGNoYXIgKl9fYXNz ZXJ0aW9uLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IF9fbGluZSwgX19jb25zdCBjaGFyICpfX2Z1bmN0aW9uKQogIF9fYXR0cmli dXRlX18gKChfX25vcmV0dXJuX18pKTsKCgpleHRlcm4gdm9pZCBfX2Fzc2VydF9wZXJyb3JfZmFp bCAoaW50IF9fZXJybnVtLCBfX2NvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX2xpbmUsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgX19hdHRyaWJ1dGVf XyAoKF9fbm9yZXR1cm5fXykpOwoKZXh0ZXJuIGludCAqX19lcnJub19sb2NhdGlvbiAodm9pZCkg X19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwpleHRlcm4gY2hhciAqcHJvZ3JhbV9pbnZvY2F0 aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsKCnR5cGVkZWYgaW50IGVy cm9yX3Q7CmV4dGVybiBsb25nIGludCB0ZXN0YW5kc2V0IChpbnQgKnNwaW5sb2NrKTsKZXh0ZXJu IGludCBfX2NvbXBhcmVfYW5kX3N3YXAgKGxvbmcgaW50ICpwLCBsb25nIGludCBvbGR2YWwsIGxv bmcgaW50IG5ld3ZhbCk7CgpleHRlcm4gaW5saW5lIGxvbmcgaW50CnRlc3RhbmRzZXQgKGludCAq c3BpbmxvY2spCnsKICBsb25nIGludCByZXQ7CgogIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAg ICAgInhjaGdsICUwLCAlMSIKICAgICAgIDogIj1yIihyZXQpLCAiPW0iKCpzcGlubG9jaykKICAg ICAgIDogIjAiKDEpLCAibSIoKnNwaW5sb2NrKQogICAgICAgOiAibWVtb3J5Iik7CgogIHJldHVy biByZXQ7Cn0KZXh0ZXJuIGlubGluZSBpbnQKX19jb21wYXJlX2FuZF9zd2FwIChsb25nIGludCAq cCwgbG9uZyBpbnQgb2xkdmFsLCBsb25nIGludCBuZXd2YWwpCnsKICBjaGFyIHJldDsKICBsb25n IGludCByZWFkdmFsOwoKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGNtcHhjaGdsICUz LCAlMTsgc2V0ZSAlMCIKICAgICAgICAgICAgICAgICAgICAgICAgOiAiPXEiIChyZXQpLCAiPW0i ICgqcCksICI9YSIgKHJlYWR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiIChuZXd2 YWwpLCAibSIgKCpwKSwgImEiIChvbGR2YWwpCiAgICAgICAgICAgICAgICAgICAgICAgIDogIm1l bW9yeSIpOwogIHJldHVybiByZXQ7Cn0KCgpleHRlcm4gaW5saW5lIGludApnZXRfZWZsYWdzICh2 b2lkKQp7CiAgaW50IHJlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInB1c2hmbDsgcG9wbCAl MCIgOiAiPXIiIChyZXMpIDogKTsKICByZXR1cm4gcmVzOwp9CgoKZXh0ZXJuIGlubGluZSB2b2lk CnNldF9lZmxhZ3MgKGludCBuZXdmbGFncykKewogIF9fYXNtX18gX192b2xhdGlsZV9fICgicHVz aGwgJTA7IHBvcGZsIiA6IDogInIiIChuZXdmbGFncykgOiAiY2MiKTsKfQoKCmV4dGVybiBpbmxp bmUgaW50CmNvbXBhcmVfYW5kX3N3YXBfaXNfYXZhaWxhYmxlICh2b2lkKQp7CiAgaW50IG9sZGZs YWdzID0gZ2V0X2VmbGFncyAoKTsKICBpbnQgY2hhbmdlZDsKCiAgc2V0X2VmbGFncyAob2xkZmxh Z3MgXiAweDQwMDAwKTsKCiAgY2hhbmdlZCA9IChnZXRfZWZsYWdzICgpIF4gb2xkZmxhZ3MpICYg MHg0MDAwMDsKCiAgc2V0X2VmbGFncyAob2xkZmxhZ3MpOwoKCiAgcmV0dXJuIGNoYW5nZWQgIT0g MDsKfQoKCnR5cGVkZWYgaW50IHB0cmRpZmZfdDsKdHlwZWRlZiBsb25nIGludCB3Y2hhcl90OwoK CnR5cGVkZWYgdW5pb24gZHR2CnsKICBzaXplX3QgY291bnRlcjsKICB2b2lkICpwb2ludGVyOwp9 IGR0dl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICB2b2lkICp0Y2I7CgogIGR0dl90ICpkdHY7CiAg dm9pZCAqc2VsZjsKfSB0Y2JoZWFkX3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFy Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X191X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0 eXBlZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4 X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0 IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5 cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMy X3Q7CgpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgc2lnbmVkIGxvbmcgbG9uZyBpbnQgX19pbnQ2NF90 OwpfX2V4dGVuc2lvbl9fIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VpbnQ2NF90 OwoKdHlwZWRlZiBfX3F1YWRfdCAqX19xYWRkcl90OwoKdHlwZWRlZiBfX3VfcXVhZF90IF9fZGV2 X3Q7CnR5cGVkZWYgX191X2ludCBfX3VpZF90Owp0eXBlZGVmIF9fdV9pbnQgX19naWRfdDsKdHlw ZWRlZiBfX3VfbG9uZyBfX2lub190Owp0eXBlZGVmIF9fdV9pbnQgX19tb2RlX3Q7CnR5cGVkZWYg X191X2ludCBfX25saW5rX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19vZmZfdDsKdHlwZWRlZiBfX3F1 YWRfdCBfX2xvZmZfdDsKdHlwZWRlZiBpbnQgX19waWRfdDsKdHlwZWRlZiBpbnQgX19zc2l6ZV90 Owp0eXBlZGVmIF9fdV9sb25nIF9fcmxpbV90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19ybGltNjRf dDsKdHlwZWRlZiBfX3VfaW50IF9faWRfdDsKCnR5cGVkZWYgc3RydWN0CiAgewogICAgaW50IF9f dmFsWzJdOwogIH0gX19mc2lkX3Q7CgoKdHlwZWRlZiBpbnQgX19kYWRkcl90Owp0eXBlZGVmIGNo YXIgKl9fY2FkZHJfdDsKdHlwZWRlZiBsb25nIGludCBfX3RpbWVfdDsKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgX191c2Vjb25kc190Owp0eXBlZGVmIGxvbmcgaW50IF9fc3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zd2Jsa190OwoKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CgoKdHlw ZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90OwoKCgoKCgp0eXBl ZGVmIGludCBfX2tleV90OwoKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9faXBjX3BpZF90 OwoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrc2l6ZV90OwoKCgoKdHlwZWRlZiBsb25nIGludCBf X2Jsa2NudF90Owp0eXBlZGVmIF9fcXVhZF90IF9fYmxrY250NjRfdDsKCgp0eXBlZGVmIF9fdV9s b25nIF9fZnNibGtjbnRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IF9fZnNibGtjbnQ2NF90OwoKCnR5 cGVkZWYgX191X2xvbmcgX19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2ZpbGNu dDY0X3Q7CgoKdHlwZWRlZiBfX3VfcXVhZF90IF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90 IF9fb2ZmNjRfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNp Z25lZCBsb25nIGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCgpzdHJ1Y3QgX19zY2hlZF9wYXJh bQogIHsKICAgIGludCBfX3NjaGVkX3ByaW9yaXR5OwogIH07CgoKc3RydWN0IF9wdGhyZWFkX2Zh c3Rsb2NrCnsKICBsb25nIGludCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKfTsKCnR5cGVk ZWYgc3RydWN0IF9wdGhyZWFkX2Rlc2NyX3N0cnVjdCAqX3B0aHJlYWRfZGVzY3I7CgoKCnR5cGVk ZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBf X3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQg X19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGlu dCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tz aXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhy ZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0 aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVh ZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKdHlw ZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRo cmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9m YXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsK ICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQg cHRocmVhZF9vbmNlX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJlYWRfcndsb2NrX3QKewogIHN0 cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX3J3X2xvY2s7CiAgaW50IF9fcndfcmVhZGVyczsKICBf cHRocmVhZF9kZXNjciBfX3J3X3dyaXRlcjsKICBfcHRocmVhZF9kZXNjciBfX3J3X3JlYWRfd2Fp dGluZzsKICBfcHRocmVhZF9kZXNjciBfX3J3X3dyaXRlX3dhaXRpbmc7CiAgaW50IF9fcndfa2lu ZDsKICBpbnQgX19yd19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2NrX3Q7CgoKCnR5cGVkZWYgc3Ry dWN0CnsKICBpbnQgX19sb2Nra2luZDsKICBpbnQgX19wc2hhcmVkOwp9IHB0aHJlYWRfcndsb2Nr YXR0cl90OwoKCgoKdHlwZWRlZiB2b2xhdGlsZSBpbnQgcHRocmVhZF9zcGlubG9ja190OwoKCnR5 cGVkZWYgc3RydWN0IHsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19iYV9sb2NrOwogIGlu dCBfX2JhX3JlcXVpcmVkOwogIGludCBfX2JhX3ByZXNlbnQ7CiAgX3B0aHJlYWRfZGVzY3IgX19i YV93YWl0aW5nOwp9IHB0aHJlYWRfYmFycmllcl90OwoKCnR5cGVkZWYgc3RydWN0IHsKICBpbnQg X19wc2hhcmVkOwp9IHB0aHJlYWRfYmFycmllcmF0dHJfdDsKCgoKCgp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IHB0aHJlYWRfdDsKCgoKdHlwZWRlZiBfX3VfY2hhciB1X2NoYXI7CnR5cGVkZWYg X191X3Nob3J0IHVfc2hvcnQ7CnR5cGVkZWYgX191X2ludCB1X2ludDsKdHlwZWRlZiBfX3VfbG9u ZyB1X2xvbmc7CnR5cGVkZWYgX19xdWFkX3QgcXVhZF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgdV9x dWFkX3Q7CnR5cGVkZWYgX19mc2lkX3QgZnNpZF90OwoKCgoKdHlwZWRlZiBfX2xvZmZfdCBsb2Zm X3Q7CgoKCnR5cGVkZWYgX19pbm9fdCBpbm9fdDsKCgoKCgoKdHlwZWRlZiBfX2lubzY0X3QgaW5v NjRfdDsKCgoKCnR5cGVkZWYgX19kZXZfdCBkZXZfdDsKCgoKCnR5cGVkZWYgX19naWRfdCBnaWRf dDsKCgoKCnR5cGVkZWYgX19tb2RlX3QgbW9kZV90OwoKCgoKdHlwZWRlZiBfX25saW5rX3Qgbmxp bmtfdDsKCgoKCnR5cGVkZWYgX191aWRfdCB1aWRfdDsKCgoKCgp0eXBlZGVmIF9fb2ZmX3Qgb2Zm X3Q7CgoKCgoKCnR5cGVkZWYgX19vZmY2NF90IG9mZjY0X3Q7CgoKCgp0eXBlZGVmIF9fcGlkX3Qg cGlkX3Q7CgoKCgp0eXBlZGVmIF9faWRfdCBpZF90OwoKCgoKdHlwZWRlZiBfX3NzaXplX3Qgc3Np emVfdDsKCgoKCgp0eXBlZGVmIF9fZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9fY2FkZHJfdCBj YWRkcl90OwoKCgoKCnR5cGVkZWYgX19rZXlfdCBrZXlfdDsKCgp0eXBlZGVmIF9fY2xvY2tfdCBj bG9ja190OwoKdHlwZWRlZiBfX3RpbWVfdCB0aW1lX3Q7Cgp0eXBlZGVmIF9fY2xvY2tpZF90IGNs b2NraWRfdDsKdHlwZWRlZiBfX3RpbWVyX3QgdGltZXJfdDsKCgoKdHlwZWRlZiBfX3VzZWNvbmRz X3QgdXNlY29uZHNfdDsKCgoKdHlwZWRlZiBfX3N1c2Vjb25kc190IHN1c2Vjb25kc190OwoKCnR5 cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50 IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiBpbnQgaW50OF90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIGludCBpbnQxNl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBpbnQzMl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIGludCBpbnQ2NF90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ESV9fKSkpOwoKCnR5cGVkZWYgdW5zaWduZWQgaW50 IHVfaW50OF90IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19RSV9fKSkpOwp0eXBlZGVmIHVu c2lnbmVkIGludCB1X2ludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX0hJX18pKSk7 CnR5cGVkZWYgdW5zaWduZWQgaW50IHVfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18g KF9fU0lfXykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQ2NF90IF9fYXR0cmlidXRlX18g KChfX21vZGVfXyAoX19ESV9fKSkpOwoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdCBfX2F0dHJpYnV0 ZV9fICgoX19tb2RlX18gKF9fd29yZF9fKSkpOwoKdHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7 CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVuc2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0 IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcgaW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CgoK CnR5cGVkZWYgX19zaWdzZXRfdCBzaWdzZXRfdDsKCnN0cnVjdCB0aW1lc3BlYwogIHsKICAgIF9f dGltZV90IHR2X3NlYzsKICAgIGxvbmcgaW50IHR2X25zZWM7CiAgfTsKCnN0cnVjdCB0aW1ldmFs CiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2VjOwogIH07 CnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwp0eXBlZGVmIHN0cnVjdAogIHsKCiAgICBfX2Zk X21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICogc2l6ZW9mIChfX2ZkX21hc2spKV07CgogIH0gZmRf c2V0OwoKdHlwZWRlZiBfX2ZkX21hc2sgZmRfbWFzazsKCmV4dGVybiBpbnQgc2VsZWN0IChpbnQg X19uZmRzLCBmZF9zZXQgKl9fcmVzdHJpY3QgX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAg ZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICBmZF9zZXQg Kl9fcmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXZh bCAqX19yZXN0cmljdCBfX3RpbWVvdXQpIDsKCmV4dGVybiBpbnQgcHNlbGVjdCAoaW50IF9fbmZk cywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAgICBmZF9z ZXQgKl9fcmVzdHJpY3QgX193cml0ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKl9f cmVzdHJpY3QgX19leGNlcHRmZHMsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHRp bWVzcGVjICpfX3Jlc3RyaWN0IF9fdGltZW91dCwKICAgICAgICAgICAgICAgICAgICBjb25zdCBf X3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fc2lnbWFzaykgOwoKZXh0ZXJuIGludCBfX3BzZWxlY3Qg KGludCBfX25mZHMsIGZkX3NldCAqX19yZWFkZmRzLAogICAgICAgICAgICAgICAgICAgICAgZmRf c2V0ICpfX3dyaXRlZmRzLCBmZF9zZXQgKl9fZXhjZXB0ZmRzLAogICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RpbWVvdXQsCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX3NpZ3NldF90ICpfX3NpZ21hc2spOwoKZXh0ZXJuIGludCBfX3NlbGVjdCAoaW50 IF9fbmZkcywgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fcmVhZGZkcywKICAgICAgICAgICAgICAgICAg ICAgZmRfc2V0ICpfX3Jlc3RyaWN0IF9fd3JpdGVmZHMsCiAgICAgICAgICAgICAgICAgICAgIGZk X3NldCAqX19yZXN0cmljdCBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHRpbWV2YWwgKl9fcmVzdHJpY3QgX190aW1lb3V0KTsKCgp0eXBlZGVmIF9fYmxrc2l6ZV90IGJs a3NpemVfdDsKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90Owp0eXBlZGVmIF9fZnNibGtjbnRf dCBmc2Jsa2NudF90Owp0eXBlZGVmIF9fZnNmaWxjbnRfdCBmc2ZpbGNudF90OwoKdHlwZWRlZiBf X2Jsa2NudDY0X3QgYmxrY250NjRfdDsKdHlwZWRlZiBfX2ZzYmxrY250NjRfdCBmc2Jsa2NudDY0 X3Q7CnR5cGVkZWYgX19mc2ZpbGNudDY0X3QgZnNmaWxjbnQ2NF90OwoKc3RydWN0IHNjaGVkX3Bh cmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKCgpleHRlcm4gaW50IGNsb25l IChpbnQgKCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAg ICAgICAgICAgICBpbnQgX19mbGFncywgdm9pZCAqX19hcmcpIDsKCmV4dGVybiBpbnQgc2NoZWRf c2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3Bh cmFtKQogICAgIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldHBhcmFtIChfX3BpZF90IF9fcGlkLCBz dHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4gaW50IHNjaGVkX3NldHNjaGVk dWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcGFyYW0pIDsKCgpleHRlcm4g aW50IHNjaGVkX2dldHNjaGVkdWxlciAoX19waWRfdCBfX3BpZCkgOwoKCmV4dGVybiBpbnQgc2No ZWRfeWllbGQgKHZvaWQpIDsKCgpleHRlcm4gaW50IHNjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu dCBfX2FsZ29yaXRobSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0X3ByaW9yaXR5X21pbiAoaW50 IF9fYWxnb3JpdGhtKSA7CgoKZXh0ZXJuIGludCBzY2hlZF9ycl9nZXRfaW50ZXJ2YWwgKF9fcGlk X3QgX19waWQsIHN0cnVjdCB0aW1lc3BlYyAqX190KSA7CgoKCgpleHRlcm4gaW50IHNjaGVkX3Nl dGFmZmluaXR5IChfX3BpZF90IF9fcGlkLCB1bnNpZ25lZCBsb25nIGludCBfX2xlbiwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBpbnQgKl9fbWFzaykgOwoKCmV4 dGVybiBpbnQgc2NoZWRfZ2V0YWZmaW5pdHkgKF9fcGlkX3QgX19waWQsIHVuc2lnbmVkIGxvbmcg aW50IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGlu dCAqX19tYXNrKSA7CgoKCmV4dGVybiBpbnQgX19zY2hlZF9zZXRwYXJhbSAoX19waWRfdCBfX3Bp ZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJh bSAqX19wYXJhbSk7CmV4dGVybiBpbnQgX19zY2hlZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwg c3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKTsKZXh0ZXJuIGludCBfX3NjaGVkX3NldHNjaGVk dWxlciAoX19waWRfdCBfX3BpZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSk7CgpleHRlcm4g aW50IF9fc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90IF9fcGlkKTsKZXh0ZXJuIGludCBfX3Nj aGVkX3lpZWxkICh2b2lkKTsKZXh0ZXJuIGludCBfX3NjaGVkX2dldF9wcmlvcml0eV9tYXggKGlu dCBfX2FsZ29yaXRobSk7CmV4dGVybiBpbnQgX19zY2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQg X19hbGdvcml0aG0pOwpleHRlcm4gaW50IF9fc2NoZWRfcnJfZ2V0X2ludGVydmFsIChfX3BpZF90 IF9fcGlkLCBzdHJ1Y3QgdGltZXNwZWMgKl9fdCk7CgoKZXh0ZXJuIGludCBfX2Nsb25lIChpbnQg KCpfX2ZuKSAodm9pZCAqX19hcmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAg ICAgICAgIGludCBfX2ZsYWdzLCB2b2lkICpfX2FyZywgLi4uKTsKZXh0ZXJuIGludCBfX2Nsb25l MiAoaW50ICgqX19mbikgKHZvaWQgKl9fYXJnKSwgdm9pZCAqX19jaGlsZF9zdGFja19iYXNlLAog ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19jaGlsZF9zdGFja19zaXplLCBpbnQgX19mbGFn cywgdm9pZCAqX19hcmcpOwoKc3RydWN0IHRtCnsKICBpbnQgdG1fc2VjOwogIGludCB0bV9taW47 CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRtX21vbjsKICBpbnQgdG1feWVh cjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQgdG1faXNkc3Q7CgoKICBsb25n IGludCB0bV9nbXRvZmY7CiAgX19jb25zdCBjaGFyICp0bV96b25lOwoKCgoKfTsKCgpzdHJ1Y3Qg aXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9pbnRlcnZhbDsKICAgIHN0cnVj dCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdldmVudDsKCgoKZXh0ZXJuIGNs b2NrX3QgY2xvY2sgKHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1l cikgOwoKCmV4dGVybiBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190 aW1lMCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIHRpbWVfdCBt a3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RyZnRpbWUgKGNo YXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhzaXplLAogICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKCgpleHRlcm4g Y2hhciAqc3RycHRpbWUgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm10LCBzdHJ1Y3QgdG0gKl9f dHApCiAgICAgOwoKCnR5cGVkZWYgc3RydWN0IF9fbG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBs b2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgogIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAq X19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlwZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19j dHlwZV90b3VwcGVyOwoKCiAgY29uc3QgY2hhciAqX19uYW1lc1sxM107Cn0gKl9fbG9jYWxlX3Q7 CgpleHRlcm4gc2l6ZV90IHN0cmZ0aW1lX2wgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3Qg X19tYXhzaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHN0cnVjdCB0 bSAqX19yZXN0cmljdCBfX3RwLAogICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3Qg X19sb2MpIDsKCmV4dGVybiBjaGFyICpzdHJwdGltZV9sIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJp Y3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCBzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2Fs ZV90IF9fbG9jKSA7CgoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZSAoX19jb25zdCB0aW1l X3QgKl9fdGltZXIpIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0aW1lIChfX2NvbnN0IHRp bWVfdCAqX190aW1lcikgOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdtdGltZV9yIChfX2NvbnN0 IHRpbWVfdCAqX19yZXN0cmljdCBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHApIDsKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqbG9jYWx0 aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0IF9fdGltZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJpY3QgX190cCkgOwoKCgoKCmV4dGVy biBjaGFyICphc2N0aW1lIChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiBjaGFy ICpjdGltZSAoX19jb25zdCB0aW1lX3QgKl9fdGltZXIpIDsKCgoKCgoKCmV4dGVybiBjaGFyICph c2N0aW1lX3IgKF9fY29uc3Qgc3RydWN0IHRtICpfX3Jlc3RyaWN0IF9fdHAsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgpleHRlcm4gY2hhciAqY3Rp bWVfciAoX19jb25zdCB0aW1lX3QgKl9fcmVzdHJpY3QgX190aW1lciwKICAgICAgICAgICAgICAg ICAgICAgIGNoYXIgKl9fcmVzdHJpY3QgX19idWYpIDsKCgoKCmV4dGVybiBjaGFyICpfX3R6bmFt ZVsyXTsKZXh0ZXJuIGludCBfX2RheWxpZ2h0OwpleHRlcm4gbG9uZyBpbnQgX190aW1lem9uZTsK CgoKCmV4dGVybiBjaGFyICp0em5hbWVbMl07CgoKCmV4dGVybiB2b2lkIHR6c2V0ICh2b2lkKSA7 CgoKCmV4dGVybiBpbnQgZGF5bGlnaHQ7CmV4dGVybiBsb25nIGludCB0aW1lem9uZTsKCgoKCgpl eHRlcm4gaW50IHN0aW1lIChfX2NvbnN0IHRpbWVfdCAqX193aGVuKSA7CmV4dGVybiB0aW1lX3Qg dGltZWdtIChzdHJ1Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gdGltZV90IHRpbWVsb2NhbCAoc3Ry dWN0IHRtICpfX3RwKSA7CgoKZXh0ZXJuIGludCBkeXNpemUgKGludCBfX3llYXIpIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKCgpleHRlcm4gaW50IG5hbm9zbGVlcCAoX19jb25zdCBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3RpbWUsCiAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVz IChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVy biBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3Bl YyAqX190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tfc2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tf aWQsIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3RwKQogICAgIDsKCgoKZXh0ZXJuIGludCBj bG9ja19uYW5vc2xlZXAgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLCBpbnQgX19mbGFncywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3JlcSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0aW1lc3BlYyAqX19yZW0pIDsKCgpleHRl cm4gaW50IGNsb2NrX2dldGNwdWNsb2NraWQgKHBpZF90IF9fcGlkLCBjbG9ja2lkX3QgKl9fY2xv Y2tfaWQpIDsKCgoKCmV4dGVybiBpbnQgdGltZXJfY3JlYXRlIChjbG9ja2lkX3QgX19jbG9ja19p ZCwKICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzaWdldmVudCAqX19yZXN0cmljdCBf X2V2cCwKICAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX3QgKl9fcmVzdHJpY3QgX190aW1l cmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7CgoK ZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxhZ3Ms CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgaXRpbWVyc3BlYyAqX19y ZXN0cmljdCBfX3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJz cGVjICpfX3Jlc3RyaWN0IF9fb3ZhbHVlKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXR0aW1lICh0 aW1lcl90IF9fdGltZXJpZCwgc3RydWN0IGl0aW1lcnNwZWMgKl9fdmFsdWUpCiAgICAgOwoKCmV4 dGVybiBpbnQgdGltZXJfZ2V0b3ZlcnJ1biAodGltZXJfdCBfX3RpbWVyaWQpIDsKZXh0ZXJuIGlu dCBnZXRkYXRlX2VycjsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnZXRkYXRlIChfX2NvbnN0IGNo YXIgKl9fc3RyaW5nKSA7CmV4dGVybiBpbnQgZ2V0ZGF0ZV9yIChfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19zdHJpbmcsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fcmVzdHJp Y3QgX19yZXNidWZwKSA7CgoKCgpleHRlcm4gX190eXBlb2YgKHN0cmZ0aW1lX2wpIF9fc3RyZnRp bWVfbDsKZXh0ZXJuIF9fdHlwZW9mIChzdHJwdGltZV9sKSBfX3N0cnB0aW1lX2w7CgoKCgoKCgoK CgpzdHJ1Y3QgdG07CgoKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCBfX21vbl95ZGF5 WzJdWzEzXSA7CgoKZXh0ZXJuIHN0cnVjdCB0bSBfdG1idWYgOwoKCmV4dGVybiBjaGFyICpfX3R6 c3RyaW5nIChjb25zdCBjaGFyICpzdHJpbmcpOwoKCmV4dGVybiBzaXplX3QgX190em5hbWVfY3Vy X21heCA7CgoKZXh0ZXJuIGludCBfX3VzZV90emZpbGUgOwoKZXh0ZXJuIHZvaWQgX190emZpbGVf cmVhZCAoY29uc3QgY2hhciAqZmlsZSwgc2l6ZV90IGV4dHJhLAogICAgICAgICAgICAgICAgICAg ICAgICAgICBjaGFyICoqZXh0cmFwKTsKZXh0ZXJuIGludCBfX3R6ZmlsZV9jb21wdXRlICh0aW1l X3QgdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IGxvbmcgaW50ICpsZWFwX2NvcnJlY3QsIGludCAqbGVhcF9oaXQsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHRtICp0cCk7CmV4dGVybiB2b2lkIF9fdHpmaWxlX2RlZmF1bHQg KGNvbnN0IGNoYXIgKnN0ZCwgY29uc3QgY2hhciAqZHN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBsb25nIGludCBzdGRvZmYsIGxvbmcgaW50IGRzdG9mZik7CgoKCgpleHRlcm4gdGlt ZV90IF9fbWt0aW1lX2ludGVybmFsIChzdHJ1Y3QgdG0gKl9fdHAsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqKCpfX2Z1bmMpIChjb25zdCB0aW1lX3QgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCB0bSAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGltZV90ICpfX29mZnNl dCk7CmV4dGVybiBzdHJ1Y3QgdG0gKl9fbG9jYWx0aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Rp bWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fdHApIDsK CmV4dGVybiBzdHJ1Y3QgdG0gKl9fZ210aW1lX3IgKF9fY29uc3QgdGltZV90ICpfX3Jlc3RyaWN0 IF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0bSAqX19yZXN0 cmljdCBfX3RwKTsKCgoKCgoKZXh0ZXJuIGludCBfX29mZnRpbWUgKF9fY29uc3QgdGltZV90ICpf X3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgX19vZmZzZXQsCiAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgdG0gKl9fdHApOwoKZXh0ZXJuIGNoYXIgKl9fYXNjdGltZV9y IChfX2NvbnN0IHN0cnVjdCB0bSAqX190cCwgY2hhciAqX19idWYpOwpleHRlcm4gdm9pZCBfX3R6 c2V0ICh2b2lkKTsKCgpleHRlcm4gc3RydWN0IHRtICpfX3R6X2NvbnZlcnQgKGNvbnN0IHRpbWVf dCAqdGltZXIsIGludCB1c2VfbG9jYWx0aW1lLCBzdHJ1Y3QgdG0gKnRwKTsKCgoKZXh0ZXJuIGxv bmcgaW50IF9fdHpuYW1lX21heCAodm9pZCk7CgpleHRlcm4gaW50IF9fbmFub3NsZWVwIChfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXF1ZXN0ZWRfdGltZSwKICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHRpbWVzcGVjICpfX3JlbWFpbmluZyk7CmV4dGVybiBpbnQgX19nZXRkYXRl X3IgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHN0cnVjdCB0bSAqX19yZXNidWZwKTsKCgoKZXh0 ZXJuIGludCBfX2dldGNsa3RjayAodm9pZCk7CgplbnVtCnsKICBQVEhSRUFEX0NSRUFURV9KT0lO QUJMRSwKCiAgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQKCn07CgplbnVtCnsKICBQVEhSRUFEX0lO SEVSSVRfU0NIRUQsCgogIFBUSFJFQURfRVhQTElDSVRfU0NIRUQKCn07CgplbnVtCnsKICBQVEhS RUFEX1NDT1BFX1NZU1RFTSwKCiAgUFRIUkVBRF9TQ09QRV9QUk9DRVNTCgp9OwoKZW51bQp7CiAg UFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQVEhSRUFEX01VVEVYX1JFQ1VSU0lWRV9OUCwKICBQ VEhSRUFEX01VVEVYX0VSUk9SQ0hFQ0tfTlAsCiAgUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoK ICAsCiAgUFRIUkVBRF9NVVRFWF9OT1JNQUwgPSBQVEhSRUFEX01VVEVYX1RJTUVEX05QLAogIFBU SFJFQURfTVVURVhfUkVDVVJTSVZFID0gUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAgUFRI UkVBRF9NVVRFWF9FUlJPUkNIRUNLID0gUFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBU SFJFQURfTVVURVhfREVGQVVMVCA9IFBUSFJFQURfTVVURVhfTk9STUFMCgoKCiAgLCBQVEhSRUFE X01VVEVYX0ZBU1RfTlAgPSBQVEhSRUFEX01VVEVYX0FEQVBUSVZFX05QCgp9OwoKZW51bQp7CiAg UFRIUkVBRF9QUk9DRVNTX1BSSVZBVEUsCgogIFBUSFJFQURfUFJPQ0VTU19TSEFSRUQKCn07CgoK ZW51bQp7CiAgUFRIUkVBRF9SV0xPQ0tfUFJFRkVSX1JFQURFUl9OUCwKICBQVEhSRUFEX1JXTE9D S19QUkVGRVJfV1JJVEVSX05QLAogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9XUklURVJfTk9OUkVD VVJTSVZFX05QLAogIFBUSFJFQURfUldMT0NLX0RFRkFVTFRfTlAgPSBQVEhSRUFEX1JXTE9DS19Q UkVGRVJfV1JJVEVSX05QCn07CnN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlcgp7CiAgdm9p ZCAoKl9fcm91dGluZSkgKHZvaWQgKik7CiAgdm9pZCAqX19hcmc7CiAgaW50IF9fY2FuY2VsdHlw ZTsKICBzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fcHJldjsKfTsKCgoKZW51bQp7 CiAgUFRIUkVBRF9DQU5DRUxfRU5BQkxFLAoKICBQVEhSRUFEX0NBTkNFTF9ESVNBQkxFCgp9Owpl bnVtCnsKICBQVEhSRUFEX0NBTkNFTF9ERUZFUlJFRCwKCiAgUFRIUkVBRF9DQU5DRUxfQVNZTkNI Uk9OT1VTCgp9OwpleHRlcm4gaW50IHB0aHJlYWRfY3JlYXRlIChwdGhyZWFkX3QgKl9fcmVzdHJp Y3QgX190aHJlYWRwLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAqKCpfX3N0YXJ0X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICpfX3Jlc3RyaWN0IF9fYXJnKSA7CgoKZXh0ZXJuIHB0aHJlYWRfdCBwdGhyZWFkX3Nl bGYgKHZvaWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfZXF1YWwgKHB0aHJlYWRfdCBfX3RocmVh ZDEsIHB0aHJlYWRfdCBfX3RocmVhZDIpIDsKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2V4aXQgKHZv aWQgKl9fcmV0dmFsKQogICAgIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF9qb2luIChwdGhyZWFkX3QgX190aCwgdm9pZCAqKl9fdGhyZWFkX3Jl dHVybikgOwpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190aCkgOwpleHRl cm4gaW50IHB0aHJlYWRfYXR0cl9pbml0IChwdGhyZWFkX2F0dHJfdCAqX19hdHRyKSA7CmV4dGVy biBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsKZXh0 ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0 dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19kZXRhY2hz dGF0ZSkgOwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRkZXRhY2hzdGF0ZSAoX19jb25zdCBw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50ICpfX2RldGFjaHN0YXRlKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHNj aGVkcGFyYW0gKHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9f cmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg OwpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBhcmFtIChfX2NvbnN0IHB0aHJlYWRf YXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNj aGVkX3BhcmFtICpfX3Jlc3RyaWN0IF9fcGFyYW0pCiAgICAgOwpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzY2hlZHBvbGljeSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5 KQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NoZWRwb2xpY3kgKF9fY29uc3Qg cHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fYXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fcG9saWN5KQogICAgIDsKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChwdGhyZWFkX2F0dHJfdCAqX19hdHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2luaGVyaXQp IDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0aW5oZXJpdHNjaGVkIChfX2NvbnN0IHB0aHJl YWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hdHRyLCBpbnQgKl9fcmVzdHJpY3QgX19pbmhlcml0KQogICAgIDsKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBfX3Nj b3BlKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c2NvcGUgKF9fY29uc3QgcHRo cmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fc2NvcGUpIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0 dHJfc2V0Z3VhcmRzaXplIChwdGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX2d1YXJkc2l6ZSkgOwpleHRlcm4gaW50IHB0 aHJlYWRfYXR0cl9nZXRndWFyZHNpemUgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJp Y3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAq X19yZXN0cmljdCBfX2d1YXJkc2l6ZSkKICAgICA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3Nl dHN0YWNrYWRkciAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB2b2lkICpfX3N0YWNrYWRkcikgOwpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9nZXRzdGFja2FkZHIgKF9fY29uc3QgcHRocmVhZF9hdHRyX3QgKl9fcmVzdHJpY3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIHZvaWQgKipfX3Jlc3Ry aWN0IF9fc3RhY2thZGRyKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2sg KHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIHZvaWQgKl9fc3RhY2thZGRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3RhY2tzaXplKSA7CmV4dGVybiBpbnQgcHRo cmVhZF9hdHRyX2dldHN0YWNrIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0IF9f YXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKipfX3Jlc3RyaWN0 IF9fc3RhY2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpf X3Jlc3RyaWN0IF9fc3RhY2tzaXplKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldHN0YWNr c2l6ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIDsKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJf Z2V0c3RhY2tzaXplIChfX2NvbnN0IHB0aHJlYWRfYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBzaXplX3QgKl9fcmVzdHJpY3Qg X19zdGFja3NpemUpCiAgICAgOwpleHRlcm4gaW50IHB0aHJlYWRfZ2V0YXR0cl9ucCAocHRocmVh ZF90IF9fdGgsIHB0aHJlYWRfYXR0cl90ICpfX2F0dHIpIDsKZXh0ZXJuIGludCBwdGhyZWFkX3Nl dHNjaGVkcGFyYW0gKHB0aHJlYWRfdCBfX3RhcmdldF90aHJlYWQsIGludCBfX3BvbGljeSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFt ICpfX3BhcmFtKQogICAgIDsKZXh0ZXJuIGludCBwdGhyZWFkX2dldHNjaGVkcGFyYW0gKHB0aHJl YWRfdCBfX3RhcmdldF90aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgKl9fcmVzdHJpY3QgX19wb2xpY3ksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2NoZWRfcGFyYW0gKl9fcmVzdHJpY3QgX19wYXJhbSkKICAgICA7CmV4dGVybiBp bnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgOwpleHRlcm4gaW50IHB0aHJlYWRfc2V0 Y29uY3VycmVuY3kgKGludCBfX2xldmVsKSA7CmV4dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9p ZCkgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICpfX3Jl c3RyaWN0IF9fbXV0ZXgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fcmVzdHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbXV0ZXhfYXR0cikgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfZGVzdHJveSAocHRo cmVhZF9tdXRleF90ICpfX211dGV4KSA7CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF90cnlsb2Nr IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4X2xv Y2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhf dGltZWRsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fcmVzdHJpY3QgX19tdXRleCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVz dHJpY3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRl eCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4YXR0 cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kgKHB0 aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0 dHJfZ2V0cHNoYXJlZCAoX19jb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fcmVzdHJpY3QgX19wc2hhcmVk KSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX211 dGV4YXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRleGF0dHJfc2V0dHlw ZSAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLCBpbnQgX19raW5kKQogICAgIDsKCgpleHRl cm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2dldHR5cGUgKF9fY29uc3QgcHRocmVhZF9tdXRleGF0 dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f YXR0ciwgaW50ICpfX3Jlc3RyaWN0IF9fa2luZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25k X2luaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0IF9fY29uZCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19jb25zdCBwdGhyZWFkX2NvbmRhdHRyX3QgKl9fcmVzdHJpY3QKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25kX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0 aHJlYWRfY29uZF9kZXN0cm95IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2NvbmRfc2lnbmFsIChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2NvbmRfYnJvYWRjYXN0IChwdGhyZWFkX2NvbmRfdCAqX19jb25kKSA7CgoK CmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3dhaXQgKHB0aHJlYWRfY29uZF90ICpfX3Jlc3RyaWN0 IF9fY29uZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICpf X3Jlc3RyaWN0IF9fbXV0ZXgpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAo cHRocmVhZF9jb25kX3QgKl9fcmVzdHJpY3QgX19jb25kLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHB0aHJlYWRfbXV0ZXhfdCAqX19yZXN0cmljdCBfX211dGV4LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jl c3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hYnN0aW1lKSA7Cgpl eHRlcm4gaW50IHB0aHJlYWRfY29uZGF0dHJfaW5pdCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0 dHIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kYXR0cl9kZXN0cm95IChwdGhyZWFkX2NvbmRh dHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9jb25kYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9jb25kYXR0cl9zZXRwc2hhcmVkIChwdGhyZWFkX2NvbmRhdHRyX3QgKl9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIDsK CmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfaW5pdCAocHRocmVhZF9yd2xvY2tfdCAqX19yZXN0 cmljdCBfX3J3bG9jaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0 aHJlYWRfcndsb2NrYXR0cl90ICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhy ZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRs b2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykgOwoKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RpbWVkcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpfX3Jlc3Ry aWN0IF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHN0cnVjdCB0aW1lc3BlYyAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja193 cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja190cnl3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2tfdGltZWR3cmxvY2sgKHB0aHJlYWRfcndsb2NrX3QgKl9fcmVz dHJpY3QgX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f Y29uc3Qgc3RydWN0IHRpbWVzcGVjICpfX3Jlc3RyaWN0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2Nr X3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgoKCgpleHRlcm4gaW50IHB0 aHJlYWRfcndsb2NrYXR0cl9pbml0IChwdGhyZWFkX3J3bG9ja2F0dHJfdCAqX19hdHRyKSA7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfZGVzdHJveSAocHRocmVhZF9yd2xvY2thdHRy X3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2thdHRyX2dldHBzaGFyZWQg KF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3Jlc3RyaWN0IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJlZCkgOwoKCmV4dGVy biBpbnQgcHRocmVhZF9yd2xvY2thdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRfcndsb2NrYXR0cl90 ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBf X3BzaGFyZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRraW5kX25wIChf X2NvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fcHJlZikgOwpleHRl cm4gaW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50 IF9fcHNoYXJlZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVzdHJveSAocHRo cmVhZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2Nr IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGlu X3RyeWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhy ZWFkX3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCgoKZXh0ZXJu IGludCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fcmVzdHJpY3Qg X19iYXJyaWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHB0aHJl YWRfYmFycmllcmF0dHJfdCAqX19yZXN0cmljdAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2F0dHIsIHVuc2lnbmVkIGludCBfX2NvdW50KSA7CgpleHRlcm4gaW50IHB0aHJlYWRf YmFycmllcl9kZXN0cm95IChwdGhyZWFkX2JhcnJpZXJfdCAqX19iYXJyaWVyKSA7CgpleHRlcm4g aW50IHB0aHJlYWRfYmFycmllcmF0dHJfaW5pdCAocHRocmVhZF9iYXJyaWVyYXR0cl90ICpfX2F0 dHIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9kZXN0cm95IChwdGhyZWFkX2Jh cnJpZXJhdHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX2dl dHBzaGFyZWQgKF9fY29uc3QgcHRocmVhZF9iYXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzdHJpY3QgX19hdHRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpfX3Jlc3RyaWN0IF9fcHNoYXJl ZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQgKHB0aHJlYWRf YmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJfd2Fp dCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgOwpleHRlcm4gaW50IHB0aHJlYWRfa2V5 X2NyZWF0ZSAocHRocmVhZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqX19kZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIDsKCgpleHRlcm4gaW50IHB0 aHJlYWRfa2V5X2RlbGV0ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9zZXRzcGVjaWZpYyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcG9pbnRlcikgOwoKCmV4dGVybiB2b2lkICpw dGhyZWFkX2dldHNwZWNpZmljIChwdGhyZWFkX2tleV90IF9fa2V5KSA7CmV4dGVybiBpbnQgcHRo cmVhZF9vbmNlIChwdGhyZWFkX29uY2VfdCAqX19vbmNlX2NvbnRyb2wsCiAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICgqX19pbml0X3JvdXRpbmUpICh2b2lkKSkgOwoKCgoKCgpleHRlcm4g aW50IHB0aHJlYWRfc2V0Y2FuY2Vsc3RhdGUgKGludCBfX3N0YXRlLCBpbnQgKl9fb2xkc3RhdGUp IDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHR5cGUgKGludCBfX3R5cGUsIGludCAq X19vbGR0eXBlKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NhbmNlbCAocHRocmVhZF90IF9fY2Fu Y2VsdGhyZWFkKSA7CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX3Rlc3RjYW5jZWwgKHZvaWQpIDsK ZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wdXNoIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51 cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKCpfX3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fYXJnKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3Bv cCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIDsKZXh0ZXJuIHZvaWQgX3B0aHJl YWRfY2xlYW51cF9wdXNoX2RlZmVyIChzdHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9f YnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpf X3JvdXRpbmUpICh2b2lkICopLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZvaWQgKl9fYXJnKSA7CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcG9wX3Jlc3Rv cmUgKHN0cnVjdCBfcHRocmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2V4ZWN1dGUpIDsKCgoKCgpleHRl cm4gaW50IHB0aHJlYWRfZ2V0Y3B1Y2xvY2tpZCAocHRocmVhZF90IF9fdGhyZWFkX2lkLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tpZF90ICpfX2Nsb2NrX2lkKSA7CgoK CgpleHRlcm4gaW50IHB0aHJlYWRfc2lnbWFzayAoaW50IF9faG93LAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jb25zdCBfX3NpZ3NldF90ICpfX3Jlc3RyaWN0IF9fbmV3bWFzaywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fc2lnc2V0X3QgKl9fcmVzdHJpY3QgX19vbGRtYXNr KTsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2lsbCAocHRocmVhZF90IF9fdGhyZWFkaWQsIGludCBf X3NpZ25vKSA7CmV4dGVybiBpbnQgcHRocmVhZF9hdGZvcmsgKHZvaWQgKCpfX3ByZXBhcmUpICh2 b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCks CiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX2NoaWxkKSAodm9pZCkpIDsKCmV4 dGVybiB2b2lkIHB0aHJlYWRfa2lsbF9vdGhlcl90aHJlYWRzX25wICh2b2lkKSA7CgoKZXh0ZXJu IHZvaWQgX19wdGhyZWFkX2luaXRpYWxpemUgKHZvaWQpIF9fYXR0cmlidXRlX18gKCh3ZWFrKSk7 CgoKCnR5cGVkZWYgcHRocmVhZF9tdXRleF90IF9fbGliY19sb2NrX3Q7CnR5cGVkZWYgc3RydWN0 IHsgcHRocmVhZF9tdXRleF90IG11dGV4OyB9IF9fbGliY19sb2NrX3JlY3Vyc2l2ZV90OwoKdHlw ZWRlZiBwdGhyZWFkX3J3bG9ja190IF9fbGliY19yd2xvY2tfdDsKdHlwZWRlZiBwdGhyZWFkX2tl eV90IF9fbGliY19rZXlfdDsKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0ZXhfaW5pdCAocHRocmVh ZF9tdXRleF90ICpfX211dGV4LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fbXV0ZXhfYXR0cik7CgpleHRlcm4gaW50IF9fcHRo cmVhZF9tdXRleF9kZXN0cm95IChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpOwoKZXh0ZXJuIGlu dCBfX3B0aHJlYWRfbXV0ZXhfdHJ5bG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KTsKCmV4 dGVybiBpbnQgX19wdGhyZWFkX211dGV4X2xvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCk7 CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleF91bmxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqX19t dXRleCk7CgpleHRlcm4gaW50IF9fcHRocmVhZF9tdXRleGF0dHJfaW5pdCAocHRocmVhZF9tdXRl eGF0dHJfdCAqX19hdHRyKTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95 IChwdGhyZWFkX211dGV4YXR0cl90ICpfX2F0dHIpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfbXV0 ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2tpbmQpOwoKCmV4dGVybiBpbnQgX19w dGhyZWFkX3J3bG9ja19pbml0IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgcHRocmVhZF9yd2xvY2thdHRyX3QgKl9f YXR0cik7CgpleHRlcm4gaW50IF9fcHRocmVhZF9yd2xvY2tfZGVzdHJveSAocHRocmVhZF9yd2xv Y2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3JkbG9jayAocHRo cmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3Ry eXJkbG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGludCBfX3B0aHJl YWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spOwoKZXh0ZXJuIGlu dCBfX3B0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp OwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfcndsb2NrX3VubG9jayAocHRocmVhZF9yd2xvY2tfdCAq X19yd2xvY2spOwoKCmV4dGVybiBpbnQgX19wdGhyZWFkX2tleV9jcmVhdGUgKHB0aHJlYWRfa2V5 X3QgKl9fa2V5LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19kZXN0 cl9mdW5jdGlvbikgKHZvaWQgKikpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfc2V0c3BlY2lmaWMg KHB0aHJlYWRfa2V5X3QgX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IHZvaWQgKl9fcG9pbnRlcik7CgpleHRlcm4gdm9pZCAqX19wdGhyZWFkX2dldHNwZWNp ZmljIChwdGhyZWFkX2tleV90IF9fa2V5KTsKCmV4dGVybiBpbnQgX19wdGhyZWFkX29uY2UgKHB0 aHJlYWRfb25jZV90ICpfX29uY2VfY29udHJvbCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkpOwoKZXh0ZXJuIGludCBfX3B0aHJlYWRfYXRm b3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAoKl9fcGFyZW50KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKl9fY2hpbGQpICh2b2lkKSk7CgoKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4 X2luaXQiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4X2Rlc3Ryb3kiKTsKYXNtICgi LndlYWsgIiAiX19wdGhyZWFkX211dGV4X2xvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFk X211dGV4X3RyeWxvY2siKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX211dGV4X3VubG9jayIp Owphc20gKCIud2VhayAiICJfX3B0aHJlYWRfbXV0ZXhhdHRyX2luaXQiKTsKYXNtICgiLndlYWsg IiAiX19wdGhyZWFkX211dGV4YXR0cl9kZXN0cm95Iik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVh ZF9tdXRleGF0dHJfc2V0dHlwZSIpOwphc20gKCIud2VhayAiICJfX3B0aHJlYWRfcndsb2NrX2lu aXQiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX3J3bG9ja19kZXN0cm95Iik7CmFzbSAoIi53 ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfcmRsb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVh ZF9yd2xvY2tfdHJ5cmRsb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfd3Js b2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfdHJ5d3Jsb2NrIik7CmFzbSAo Ii53ZWFrICIgIl9fcHRocmVhZF9yd2xvY2tfdW5sb2NrIik7CmFzbSAoIi53ZWFrICIgIl9fcHRo cmVhZF9rZXlfY3JlYXRlIik7CmFzbSAoIi53ZWFrICIgIl9fcHRocmVhZF9zZXRzcGVjaWZpYyIp Owphc20gKCIud2VhayAiICJfX3B0aHJlYWRfZ2V0c3BlY2lmaWMiKTsKYXNtICgiLndlYWsgIiAi X19wdGhyZWFkX29uY2UiKTsKYXNtICgiLndlYWsgIiAiX19wdGhyZWFkX2luaXRpYWxpemUiKTsK YXNtICgiLndlYWsgIiAiX19wdGhyZWFkX2F0Zm9yayIpOwphc20gKCIud2VhayAiICJfcHRocmVh ZF9jbGVhbnVwX3B1c2hfZGVmZXIiKTsKYXNtICgiLndlYWsgIiAiX3B0aHJlYWRfY2xlYW51cF9w b3BfcmVzdG9yZSIpOwoKCgpzdHJ1Y3QgX19kaXJzdHJlYW0KICB7CiAgICBpbnQgZmQ7CgogICAg Y2hhciAqZGF0YTsKICAgIHNpemVfdCBhbGxvY2F0aW9uOwogICAgc2l6ZV90IHNpemU7CiAgICBz aXplX3Qgb2Zmc2V0OwoKICAgIG9mZl90IGZpbGVwb3M7CgogICAgX19saWJjX2xvY2tfdCBsb2Nr OwogIH07CgpzdHJ1Y3QgZGlyZW50CiAgewoKICAgIF9faW5vX3QgZF9pbm87CiAgICBfX29mZl90 IGRfb2ZmOwoKCgoKICAgIHVuc2lnbmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVk IGNoYXIgZF90eXBlOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKCnN0cnVjdCBkaXJlbnQ2 NAogIHsKICAgIF9faW5vNjRfdCBkX2lubzsKICAgIF9fb2ZmNjRfdCBkX29mZjsKICAgIHVuc2ln bmVkIHNob3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hh ciBkX25hbWVbMjU2XTsKICB9OwoKZW51bQogIHsKICAgIERUX1VOS05PV04gPSAwLAoKICAgIERU X0ZJRk8gPSAxLAoKICAgIERUX0NIUiA9IDIsCgogICAgRFRfRElSID0gNCwKCiAgICBEVF9CTEsg PSA2LAoKICAgIERUX1JFRyA9IDgsCgogICAgRFRfTE5LID0gMTAsCgogICAgRFRfU09DSyA9IDEy LAoKICAgIERUX1dIVCA9IDE0CgogIH07Cgp0eXBlZGVmIHN0cnVjdCBfX2RpcnN0cmVhbSBESVI7 CmV4dGVybiBESVIgKm9wZW5kaXIgKF9fY29uc3QgY2hhciAqX19uYW1lKSA7CmV4dGVybiBpbnQg Y2xvc2VkaXIgKERJUiAqX19kaXJwKSA7CmV4dGVybiBzdHJ1Y3QgZGlyZW50ICpyZWFkZGlyIChE SVIgKl9fZGlycCkgOwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpyZWFkZGlyNjQgKERJUiAqX19k aXJwKSA7CgoKZXh0ZXJuIGludCByZWFkZGlyX3IgKERJUiAqX19yZXN0cmljdCBfX2RpcnAsCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICpfX3Jlc3RyaWN0IF9fZW50cnksCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50ICoqX19yZXN0cmljdCBfX3Jlc3VsdCkg OwpleHRlcm4gaW50IHJlYWRkaXI2NF9yIChESVIgKl9fcmVzdHJpY3QgX19kaXJwLAogICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgZGlyZW50NjQgKl9fcmVzdHJpY3QgX19lbnRyeSwKICAg ICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudDY0ICoqX19yZXN0cmljdCBfX3Jlc3Vs dCkgOwoKCgoKZXh0ZXJuIHZvaWQgcmV3aW5kZGlyIChESVIgKl9fZGlycCkgOwoKCgoKCmV4dGVy biB2b2lkIHNlZWtkaXIgKERJUiAqX19kaXJwLCBsb25nIGludCBfX3BvcykgOwoKCmV4dGVybiBs b25nIGludCB0ZWxsZGlyIChESVIgKl9fZGlycCkgOwpleHRlcm4gaW50IGRpcmZkIChESVIgKl9f ZGlycCkgOwoKZXh0ZXJuIGludCBzY2FuZGlyIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19k aXIsCiAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRpcmVudCAqKipfX3Jlc3RyaWN0IF9fbmFt ZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3RvcikgKF9fY29uc3Qgc3Ry dWN0IGRpcmVudCAqKSwKICAgICAgICAgICAgICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qg dm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIDsKZXh0ZXJuIGludCBzY2FuZGlyNjQgKF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2RpciwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJl bnQ2NCAqKipfX3Jlc3RyaWN0IF9fbmFtZWxpc3QsCiAgICAgICAgICAgICAgICAgICAgICBpbnQg KCpfX3NlbGVjdG9yKSAoX19jb25zdCBzdHJ1Y3QgZGlyZW50NjQgKiksCiAgICAgICAgICAgICAg ICAgICAgICBpbnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpIDsK CmV4dGVybiBpbnQgYWxwaGFzb3J0IChfX2NvbnN0IHZvaWQgKl9fZTEsIF9fY29uc3Qgdm9pZCAq X19lMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGludCBhbHBoYXNv cnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCB2ZXJzaW9uc29ydCAoX19jb25zdCB2 b2lkICpfX2UxLCBfX2NvbnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CmV4dGVybiBpbnQgdmVyc2lvbnNvcnQ2NCAoX19jb25zdCB2b2lkICpfX2UxLCBfX2Nv bnN0IHZvaWQgKl9fZTIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CmV4dGVybiBf X3NzaXplX3QgZ2V0ZGlyZW50cmllcyAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgKl9fcmVzdHJpY3QgX19iYXNlcCkgOwpl eHRlcm4gX19zc2l6ZV90IGdldGRpcmVudHJpZXM2NCAoaW50IF9fZmQsIGNoYXIgKl9fcmVzdHJp Y3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uYnl0 ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgKl9fcmVzdHJp Y3QgX19iYXNlcCkgOwoKCmV4dGVybiBESVIgKl9fb3BlbmRpciAoX19jb25zdCBjaGFyICpfX25h bWUpOwpleHRlcm4gaW50IF9fY2xvc2VkaXIgKERJUiAqX19kaXJwKTsKZXh0ZXJuIHN0cnVjdCBk aXJlbnQgKl9fcmVhZGRpciAoRElSICpfX2RpcnApOwpleHRlcm4gc3RydWN0IGRpcmVudDY0ICpf X3JlYWRkaXI2NCAoRElSICpfX2RpcnApOwpleHRlcm4gaW50IF9fcmVhZGRpcl9yIChESVIgKl9f ZGlycCwgc3RydWN0IGRpcmVudCAqX19lbnRyeSwKICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGRpcmVudCAqKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX3JlYWRkaXI2NF9yIChESVIgKl9f ZGlycCwgc3RydWN0IGRpcmVudDY0ICpfX2VudHJ5LAogICAgICAgICAgICAgICAgICAgICAgICAg IHN0cnVjdCBkaXJlbnQ2NCAqKl9fcmVzdWx0KTsKZXh0ZXJuIGludCBfX3NjYW5kaXI2NCAoX19j b25zdCBjaGFyICogX19kaXIsCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkaXJlbnQ2 NCAqKiogX19uYW1lbGlzdCwKICAgICAgICAgICAgICAgICAgICAgICAgaW50ICgqX19zZWxlY3Rv cikgKF9fY29uc3Qgc3RydWN0IGRpcmVudDY0ICopLAogICAgICAgICAgICAgICAgICAgICAgICBp bnQgKCpfX2NtcCkgKF9fY29uc3Qgdm9pZCAqLCBfX2NvbnN0IHZvaWQgKikpOwpleHRlcm4gX19z c2l6ZV90IF9fZ2V0ZGVudHMgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVz KQogICAgIF9fYXR0cmlidXRlX18gKChyZWdwYXJtICgzKSwgc3RkY2FsbCkpOwpleHRlcm4gX19z c2l6ZV90IF9fZ2V0ZGVudHM2NCAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0 ZXMpCiAgICAgX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpLCBzdGRjYWxsKSk7CmV4dGVybiBp bnQgX19hbHBoYXNvcnQ2NCAoY29uc3Qgdm9pZCAqYSwgY29uc3Qgdm9pZCAqYikKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKZXh0ZXJuIGludCBfX3ZlcnNpb25zb3J0NjQgKGNvbnN0 IHZvaWQgKmEsIGNvbnN0IHZvaWQgKmIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7 CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGlu dCB1aW50MTZfdDsKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnQzMl90OwoKCgpfX2V4dGVuc2lv bl9fCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCB1aW50NjRfdDsKCgoKdHlwZWRlZiBz aWduZWQgY2hhciBpbnRfbGVhc3Q4X3Q7CnR5cGVkZWYgc2hvcnQgaW50IGludF9sZWFzdDE2X3Q7 CnR5cGVkZWYgaW50IGludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiBsb25n IGxvbmcgaW50IGludF9sZWFzdDY0X3Q7CgoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciB1aW50X2xl YXN0OF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IGludCB1aW50X2xlYXN0MTZfdDsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgdWludF9sZWFzdDMyX3Q7CgoKCl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRfbGVhc3Q2NF90OwoKdHlwZWRlZiBzaWduZWQgY2hh ciBpbnRfZmFzdDhfdDsKCgp0eXBlZGVmIGludCBpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgaW50IGlu dF9mYXN0MzJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50X2Zhc3Q2 NF90OwoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdWludF9mYXN0OF90OwoKCgoKCnR5cGVkZWYg dW5zaWduZWQgaW50IHVpbnRfZmFzdDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IHVpbnRfZmFz dDMyX3Q7Cl9fZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRf ZmFzdDY0X3Q7CnR5cGVkZWYgaW50IGludHB0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHVp bnRwdHJfdDsKX19leHRlbnNpb25fXwp0eXBlZGVmIGxvbmcgbG9uZyBpbnQgaW50bWF4X3Q7Cl9f ZXh0ZW5zaW9uX18KdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgaW50IHVpbnRtYXhfdDsKCgoK ZXh0ZXJuIHZvaWQgKl9fbWVtY2NweSAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3Jj LAogICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVfdCBfX24pOwoKZXh0ZXJu IHNpemVfdCBfX3N0cm5sZW4gKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX21heGxl bikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cnNl cCAoY2hhciAqKl9fc3RyaW5ncCwgX19jb25zdCBjaGFyICpfX2RlbGltKTsKCmV4dGVybiBpbnQg X19zdHJ2ZXJzY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAg ICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19zdHJuY2FzZWNtcCAo X19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4 dGVybiBpbnQgX19zdHJjYXNlY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAq X19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0 cmNhc2VzdHIgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs ZSkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBjaGFyICpfX3N0cmR1 cCAoX19jb25zdCBjaGFyICpfX3N0cmluZykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2Nf XykpOwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXpl X3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9pZCAq X19yYXdtZW1jaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jKQogICAgIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyY2hybnVsIChfX2NvbnN0IGNoYXIg Kl9fcywgaW50IF9fYykKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiB2 b2lkICpfX21lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQog ICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIHZvaWQgKl9fbWVtY2hyIChf X2NvbnN0IHZvaWQgKl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19wdXJlX18pKTsKCmV4dGVybiBpbnQgX19mZnMgKGludCBfX2kpIF9fYXR0cmlidXRlX18g KChjb25zdCkpOwoKZXh0ZXJuIGNoYXIgKl9fc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFy ICpfX2J1Ziwgc2l6ZV90IF9fYnVmbGVuKTsKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAq X19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19y ZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkICptZW1tb3ZlICh2b2lk ICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCgpl eHRlcm4gdm9pZCAqbWVtY2NweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsIF9fY29uc3Qgdm9p ZCAqX19yZXN0cmljdCBfX3NyYywKICAgICAgICAgICAgICAgICAgICAgIGludCBfX2MsIHNpemVf dCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChfX2NvbnN0IHZvaWQgKl9fczEs IF9fY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90IF9fbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19w dXJlX18pKTsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIHZvaWQgKnJhd21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIF9fYXR0cmli dXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQg Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9f KSk7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNw eSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gY2hhciAqc3Ry Y2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f c3JjKQogICAgIDsKCmV4dGVybiBjaGFyICpzdHJuY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLAogICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVy biBpbnQgc3RybmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNp emVfdCBfX24pCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz dHJjb2xsIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMikKICAgICBfX2F0 dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqX19y ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGludCBzdHJjb2xsX2wgKF9fY29u c3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICBf X2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCmV4dGVybiBzaXplX3Qgc3RyeGZybV9sIChjaGFy ICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoX19j b25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgoKCmV4dGVy biBjaGFyICpzdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19uKQogICAg IF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cmNociAoX19j b25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0 ZXJuIGNoYXIgKnN0cnJjaHIgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19jKSBfX2F0dHJpYnV0 ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChfX2NvbnN0IGNo YXIgKl9fcywgaW50IF9fYykgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0ZXJu IHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVj dCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4gc2l6ZV90IHN0cnNw biAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRy aWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3RycGJyayAoX19jb25zdCBjaGFy ICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVy ZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9f Y29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoK CmV4dGVybiBjaGFyICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19kZWxpbSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqX19zdHJ0b2tfciAo Y2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19kZWxpbSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKipf X3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqX19y ZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAgICAg ICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIDsKCgoKCmV4dGVybiBj aGFyICpzdHJjYXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAq X19uZWVkbGUpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKCmV4dGVybiB2 b2lkICptZW1tZW0gKF9fY29uc3Qgdm9pZCAqX19oYXlzdGFjaywgc2l6ZV90IF9faGF5c3RhY2ts ZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qgdm9pZCAqX19uZWVkbGUsIHNpemVfdCBf X25lZWRsZWxlbikKICAgICBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIHZv aWQgKl9fbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgOwpleHRl cm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAg ICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKCgoK CgpleHRlcm4gc2l6ZV90IHN0cmxlbiAoX19jb25zdCBjaGFyICpfX3MpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpf X3N0cmluZywgc2l6ZV90IF9fbWF4bGVuKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCgoKCmV4dGVybiBjaGFyICpzdHJlcnJvciAoaW50IF9fZXJybnVtKSA7CgoKCgpleHRlcm4g Y2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fYnVm bGVuKSA7CgoKCgpleHRlcm4gdm9pZCBfX2J6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIDsK CgoKZXh0ZXJuIHZvaWQgYmNvcHkgKF9fY29uc3Qgdm9pZCAqX19zcmMsIHZvaWQgKl9fZGVzdCwg c2l6ZV90IF9fbikgOwoKCmV4dGVybiB2b2lkIGJ6ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24p IDsKCgpleHRlcm4gaW50IGJjbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpf X3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVy biBjaGFyICppbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCmV4dGVybiBjaGFyICpyaW5kZXggKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKZXh0ZXJuIGludCBmZnMgKGlu dCBfX2kpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgZmZzbCAo bG9uZyBpbnQgX19sKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpfX2V4dGVuc2lvbl9f IGV4dGVybiBpbnQgZmZzbGwgKGxvbmcgbG9uZyBpbnQgX19sbCkKICAgICBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKF9fY29uc3QgY2hhciAq X19zMSwgX19jb25zdCBjaGFyICpfX3MyKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBj aGFyICpfX3MyLCBzaXplX3QgX19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKCmV4dGVybiBpbnQgc3RyY2FzZWNtcF9sIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIF9f YXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBzdHJuY2FzZWNtcF9sIChfX2Nv bnN0IGNoYXIgKl9fczEsIF9fY29uc3QgY2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIF9fYXR0cmlidXRlX18gKChf X3B1cmVfXykpOwoKCgoKCmV4dGVybiBjaGFyICpzdHJzZXAgKGNoYXIgKipfX3Jlc3RyaWN0IF9f c3RyaW5ncCwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9f ZGVsaW0pIDsKCgoKCmV4dGVybiBpbnQgc3RydmVyc2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBf X2NvbnN0IGNoYXIgKl9fczIpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0 ZXJuIGNoYXIgKnN0cnNpZ25hbCAoaW50IF9fc2lnKSA7CgoKZXh0ZXJuIGNoYXIgKl9fc3RwY3B5 IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3Jj KQogICAgIDsKZXh0ZXJuIGNoYXIgKnN0cGNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19yZXN0cmljdCBfX3NyYykKICAgICA7CgoKCmV4dGVybiBjaGFyICpfX3N0 cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIDsKZXh0ZXJuIGNoYXIg KnN0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNo YXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcpIDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9p ZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoKCmV4dGVybiBjaGFyICpiYXNlbmFtZSAoX19jb25z dCBjaGFyICpfX2ZpbGVuYW1lKSA7CmV4dGVybiBfX2lubGluZSB2b2lkICpfX21lbWNweV9ieTQg KHZvaWQgKl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVt Y3B5X2J5NCAodm9pZCAqX19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQp7 CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciB2b2lk ICpfX3RtcCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAg ICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJNCglMiksJTJcblx0IgogICAgICJtb3Zs CSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQi CiAgICAgImpuegkxYiIKICAgICA6ICI9JnIiIChfX2QwKSwgIj0mciIgKF9fdG1wKSwgIj0mciIg KF9fc3JjKSwgIj0mciIgKF9fZDEpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksICIz IiAoX19uIC8gNCkKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1cm4gX19kZXN0Owp9Cgpl eHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1jcHlfYnkyICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qg dm9pZCAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9ieTIgKHZvaWQgKl9fZGVzdCwg X19jb25zdCB2b2lkICpfX3NyYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxv bmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX2Rlc3Q7CiAgX19h c21fXyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAg ICAgIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxu XHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAg ICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwko JTIpLCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAoX19kMCksICI9 JnIiIChfX3RtcCksICI9JnIiIChfX3NyYyksICI9JnIiIChfX2QxKQogICAgIDogIjEiIChfX3Rt cCksICIyIiAoX19zcmMpLCAiMyIgKF9fbiAvIDIpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAg cmV0dXJuIF9fZGVzdDsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtY3B5X2cgKHZvaWQg Kl9fZGVzdCwgX19jb25zdCB2b2lkICpfX3NyYywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbWNweV9nICh2 b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCnsKICByZWdpc3Rl ciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2QyOwogIHJlZ2lzdGVyIHZvaWQgKl9f dG1wID0gX19kZXN0OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAg InNocmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMWZcblx0IgogICAgICJtb3ZzYlxuIgogICAg ICIxOlxuXHQiCiAgICAgInNocmwJJDEsJSVlY3hcblx0IgogICAgICJqbmMJMmZcblx0IgogICAg ICJtb3Zzd1xuIgogICAgICIyOlxuXHQiCiAgICAgInJlcDsgbW92c2wiCiAgICAgOiAiPSZjIiAo X19kMCksICI9JkQiIChfX2QxKSwgIj0mUyIgKF9fZDIpLAogICAgICAgIj1tIiAoICooc3RydWN0 IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19kZXN0KQogICAgIDogIjAiIChf X24pLCAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9f ZXh0ZW5zaW9uX18gY2hhciBfX3hbX19uXTsgfSAqKV9fc3JjKQogICAgIDogImNjIik7CiAgcmV0 dXJuIF9fZGVzdDsKfQoKCgoKCmV4dGVybiBfX2lubGluZSB2b2lkICoKbWVtbW92ZSAodm9pZCAq X19kZXN0LCBfX2NvbnN0IHZvaWQgKl9fc3JjLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgdW5z aWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciB2b2lkICpfX3RtcCA9 IF9fZGVzdDsKICBpZiAoX19kZXN0IDwgX19zcmMpCiAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXwog ICAgICAoImNsZFxuXHQiCiAgICAgICAicmVwOyBtb3ZzYiIKICAgICAgIDogIj0mYyIgKF9fZDAp LCAiPSZTIiAoX19kMSksICI9JkQiIChfX2QyKSwKICAgICAgICAgIj1tIiAoICooc3RydWN0IHsg X19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19kZXN0KQogICAgICAgOiAiMCIgKF9f biksICIxIiAoX19zcmMpLCAiMiIgKF9fdG1wKSwKICAgICAgICAgIm0iICggKihzdHJ1Y3QgeyBf X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3NyYykpOwogIGVsc2UKICAgIF9fYXNt X18gX192b2xhdGlsZV9fCiAgICAgICgic3RkXG5cdCIKICAgICAgICJyZXA7IG1vdnNiXG5cdCIK ICAgICAgICJjbGQiCiAgICAgICA6ICI9JmMiIChfX2QwKSwgIj0mUyIgKF9fZDEpLCAiPSZEIiAo X19kMiksCiAgICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hb X19uXTsgfSAqKV9fZGVzdCkKICAgICAgIDogIjAiIChfX24pLCAiMSIgKF9fbiAtIDEgKyAoX19j b25zdCBjaGFyICopIF9fc3JjKSwKICAgICAgICAgIjIiIChfX24gLSAxICsgKGNoYXIgKikgX190 bXApLAogICAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19u XTsgfSAqKV9fc3JjKSk7CiAgcmV0dXJuIF9fZGVzdDsKfQoKCgoKCgoKZXh0ZXJuIF9faW5saW5l IGludAptZW1jbXAgKF9fY29uc3Qgdm9pZCAqX19zMSwgX19jb25zdCB2b2lkICpfX3MyLCBzaXpl X3QgX19uKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsK ICByZWdpc3RlciBpbnQgX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG5c dCIKICAgICAidGVzdGwgJTMsJTNcblx0IgogICAgICJyZXBlOyBjbXBzYlxuXHQiCiAgICAgImpl CTFmXG5cdCIKICAgICAic2JibAklMCwlMFxuXHQiCiAgICAgIm9ybAkkMSwlMFxuIgogICAgICIx OiIKICAgICA6ICI9JmEiIChfX3JlcyksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpLCAiPSZj IiAoX19kMikKICAgICA6ICIwIiAoMCksICIxIiAoX19zMSksICIyIiAoX19zMiksICIzIiAoX19u KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9 ICopX19zMSksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hb X19uXTsgfSAqKV9fczIpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KZXh0ZXJuIF9f aW5saW5lIHZvaWQgKl9fbWVtc2V0X2Njbl9ieTQgKHZvaWQgKl9fcywgdW5zaWduZWQgaW50IF9f YywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24pOwoK ZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbXNldF9jY25fYnk0ICh2b2lkICpfX3MsIHVuc2ln bmVkIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB2b2lkICpfX3RtcCA9IF9fczsK ICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwogIF9fYXNtX18gX192b2xhdGlsZV9f CiAgICAoIjE6XG5cdCIKICAgICAibW92bAklMCwoJTEpXG5cdCIKICAgICAiYWRkbAkkNCwlMVxu XHQiCiAgICAgImRlY2wJJTJcblx0IgogICAgICJqbnoJMWJcbiIKICAgICA6ICI9JnIiIChfX2Mp LCAiPSZyIiAoX190bXApLCAiPSZyIiAoX19kMCksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBf X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiMCIgKCh1bnNpZ25l ZCBpbnQpIF9fYyksICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAiY2MiKTsKCiAg cmV0dXJuIF9fczsKfQoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fbWVtc2V0X2Njbl9ieTIgKHZv aWQgKl9fcywgdW5zaWduZWQgaW50IF9fYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKgpfX21lbXNldF9j Y25fYnkyICh2b2lkICpfX3MsIHVuc2lnbmVkIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdp c3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIHJlZ2lzdGVyIHZvaWQgKl9fdG1w ID0gX19zOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XHRtb3ZsCSUwLCglMSlcblx0 IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklMlxuXHQiCiAgICAgImpuegkx YlxuIgogICAgICJtb3Z3CSV3MCwoJTEpIgogICAgIDogIj0mcSIgKF9fZDApLCAiPSZyIiAoX190 bXApLCAiPSZyIiAoX19kMSksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9f IGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiMCIgKCh1bnNpZ25lZCBpbnQpIF9fYyks ICIxIiAoX190bXApLCAiMiIgKF9fbiAvIDQpCiAgICAgOiAiY2MiKTsKCiAgcmV0dXJuIF9fczsK fQpleHRlcm4gX19pbmxpbmUgdm9pZCAqX19tZW1zZXRfZ2NuX2J5NCAodm9pZCAqX19zLCBpbnQg X19jLCBzaXplX3QgX19uKTsKCmV4dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1zZXRfZ2NuX2J5 NCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgdm9pZCAqX190 bXAgPSBfX3M7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICBfX2FzbV9fIF9f dm9sYXRpbGVfXwogICAgKCJtb3ZiCSViMCwlaDBcbiIKICAgICAicHVzaHcJJXcwXG5cdCIKICAg ICAic2hsbAkkMTYsJTBcblx0IgogICAgICJwb3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAg Im1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImFkZGwJJDQsJTFcblx0IgogICAgICJkZWNsCSUyXG5c dCIKICAgICAiam56CTFiXG4iCiAgICAgOiAiPSZxIiAoX19jKSwgIj0mciIgKF9fdG1wKSwgIj0m ciIgKF9fZDApLAogICAgICAgIj1tIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9f eFtfX25dOyB9ICopX19zKQogICAgIDogIjAiICgodW5zaWduZWQgaW50KSBfX2MpLCAiMSIgKF9f dG1wKSwgIjIiIChfX24gLyA0KQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fczsKfQoKZXh0ZXJu IF9faW5saW5lIHZvaWQgKl9fbWVtc2V0X2djbl9ieTIgKHZvaWQgKl9fcywgaW50IF9fYywgc2l6 ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCl9fbWVtc2V0X2djbl9ieTIgKHZvaWQg Kl9fcywgaW50IF9fYywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50 IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgdm9pZCAqX190bXAgPSBfX3M7CiAgX19hc21fXyBfX3Zv bGF0aWxlX18KICAgICgibW92YgklYjAsJWgwXG5cdCIKICAgICAicHVzaHcJJXcwXG5cdCIKICAg ICAic2hsbAkkMTYsJTBcblx0IgogICAgICJwb3B3CSV3MFxuIgogICAgICIxOlxuXHQiCiAgICAg Im1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAgICJkZWNsCSUy XG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIm1vdncJJXcwLCglMSkiCiAgICAgOiAiPSZxIiAo X19kMCksICI9JnIiIChfX3RtcCksICI9JnIiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVj dCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19uXTsgfSAqKV9fcykKICAgICA6ICIwIiAoKHVu c2lnbmVkIGludCkgX19jKSwgIjEiIChfX3RtcCksICIyIiAoX19uIC8gNCkKICAgICA6ICJjYyIp OwogIHJldHVybiBfX3M7Cn0KCgoKCgpleHRlcm4gX19pbmxpbmUgdm9pZCAqCm1lbWNociAoX19j b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCnsKICByZWdpc3RlciB1bnNpZ25l ZCBsb25nIGludCBfX2QwOwoKCgogIHJlZ2lzdGVyIHVuc2lnbmVkIGNoYXIgKl9fcmVzOwogIGlm IChfX24gPT0gMCkKICAgIHJldHVybiAoKHZvaWQgKikwKTsKICBfX2FzbV9fIF9fdm9sYXRpbGVf XwogICAgKCJjbGRcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqZQkxZlxuXHQi CiAgICAgIm1vdmwJJDEsJTBcbiIKICAgICAiMToiCiAgICAgOiAiPUQiIChfX3JlcyksICI9JmMi IChfX2QwKQogICAgIDogImEiIChfX2MpLCAiMCIgKF9fcyksICIxIiAoX19uKSwKICAgICAgICJt IiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9ICopX19zKQogICAg IDogImNjIik7CgogIHJldHVybiBfX3JlcyAtIDE7Cn0KCgoKCmV4dGVybiBfX2lubGluZSB2b2lk ICpfX21lbXJjaHIgKF9fY29uc3Qgdm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKTsKCmV4 dGVybiBfX2lubGluZSB2b2lkICoKX19tZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9fcywgaW50IF9f Yywgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CgoKCiAg cmVnaXN0ZXIgdm9pZCAqX19yZXM7CiAgaWYgKF9fbiA9PSAwKQogICAgcmV0dXJuICgodm9pZCAq KTApOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoInN0ZFxuXHQiCiAgICAgInJlcG5lOyBz Y2FzYlxuXHQiCiAgICAgImplIDFmXG5cdCIKICAgICAib3JsICQtMSwlMFxuIgogICAgICIxOlx0 Y2xkIgogICAgIDogIj1EIiAoX19yZXMpLCAiPSZjIiAoX19kMCkKICAgICA6ICJhIiAoX19jKSwg IjAiIChfX3MgKyBfX24gLSAxKSwgIjEiIChfX24pLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBf X2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKCiAgcmV0 dXJuIF9fcmVzICsgMTsKfQoKCgoKCgoKZXh0ZXJuIF9faW5saW5lIHZvaWQgKl9fcmF3bWVtY2hy IChjb25zdCB2b2lkICpfX3MsIGludCBfX2MpOwoKCmV4dGVybiBfX2lubGluZSB2b2lkICoKX19y YXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYykKewogIHJlZ2lzdGVyIHVuc2lnbmVk IGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgdW5zaWduZWQgY2hhciAqX19yZXM7CiAgX19hc21f XyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAg ICA6ICI9RCIgKF9fcmVzKSwgIj0mYyIgKF9fZDApCiAgICAgOiAiYSIgKF9fYyksICIwIiAoX19z KSwgIjEiICgweGZmZmZmZmZmKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhm ZmZmZmZmXTsgfSAqKV9fcykKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlcyAtIDE7Cn0KCmV4 dGVybiBfX2lubGluZSB2b2lkICoKcmF3bWVtY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2Mp CnsKICByZXR1cm4gX19yYXdtZW1jaHIgKF9fcywgX19jKTsKfQpleHRlcm4gX19pbmxpbmUgc2l6 ZV90IF9fc3RybGVuX2cgKF9fY29uc3QgY2hhciAqX19zdHIpOwoKZXh0ZXJuIF9faW5saW5lIHNp emVfdApfX3N0cmxlbl9nIChfX2NvbnN0IGNoYXIgKl9fc3RyKQp7CiAgcmVnaXN0ZXIgY2hhciBf X2R1bW15OwogIHJlZ2lzdGVyIF9fY29uc3QgY2hhciAqX190bXAgPSBfX3N0cjsKICBfX2FzbV9f IF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlYjFcblx0IgogICAg ICJsZWFsCTEoJTApLCUwXG5cdCIKICAgICAidGVzdGIJJWIxLCViMVxuXHQiCiAgICAgImpuZQkx YiIKICAgICA6ICI9ciIgKF9fdG1wKSwgIj0mcSIgKF9fZHVtbXkpCiAgICAgOiAiMCIgKF9fc3Ry KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fc3Ry KQogICAgIDogImNjIiApOwogIHJldHVybiBfX3RtcCAtIF9fc3RyIC0gMTsKfQpleHRlcm4gX19p bmxpbmUgY2hhciAqX19zdHJjcHlfZyAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj KTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjcHlfZyAoY2hhciAqX19kZXN0LCBfX2Nv bnN0IGNoYXIgKl9fc3JjKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgcmVn aXN0ZXIgY2hhciBfX2R1bW15OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoCiAgICAgIjE6 XG5cdCIKICAgICAibW92YgkoJTApLCViMlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0Igog ICAgICJtb3ZiCSViMiwoJTEpXG5cdCIKICAgICAibGVhbAkxKCUxKSwlMVxuXHQiCiAgICAgInRl c3RiCSViMiwlYjJcblx0IgogICAgICJqbmUJMWIiCiAgICAgOiAiPSZyIiAoX19zcmMpLCAiPSZy IiAoX190bXApLCAiPSZxIiAoX19kdW1teSkKICAgICA6ICIwIiAoX19zcmMpLCAiMSIgKF9fdG1w KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fZGVz dCkKICAgICA6ICJjYyIpOwogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0ZXJuIF9faW5saW5lIGNoYXIg Kl9fbWVtcGNweV9ieTQgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbik7CgpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fbWVtcGNweV9ieTQgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy ICpfX3NyYywgc2l6ZV90IF9fc3JjbGVuKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rl c3Q7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICBfX2FzbV9fIF9f dm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxl YWwJNCglMiksJTJcblx0IgogICAgICJtb3ZsCSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEp LCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQiCiAgICAgImpuegkxYiIKICAgICA6ICI9JnIiIChf X2QwKSwgIj1yIiAoX190bXApLCAiPSZyIiAoX19zcmMpLCAiPSZyIiAoX19kMSkKICAgICA6ICIx IiAoX190bXApLCAiMiIgKF9fc3JjKSwgIjMiIChfX3NyY2xlbiAvIDQpCiAgICAgOiAibWVtb3J5 IiwgImNjIik7CiAgcmV0dXJuIF9fdG1wOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19tZW1w Y3B5X2J5MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKTsKCmV4dGVybiBfX2lubGlu ZSBjaGFyICoKX19tZW1wY3B5X2J5MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj LCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdDsKICBy ZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIF9fYXNtX18gX192b2xhdGls ZV9fCiAgICAoInNocmwJJDEsJTNcblx0IgogICAgICJqegkyZlxuIgogICAgICIxOlxuXHQiCiAg ICAgIm1vdmwJKCUyKSwlMFxuXHQiCiAgICAgImxlYWwJNCglMiksJTJcblx0IgogICAgICJtb3Zs CSUwLCglMSlcblx0IgogICAgICJsZWFsCTQoJTEpLCUxXG5cdCIKICAgICAiZGVjbAklM1xuXHQi CiAgICAgImpuegkxYlxuIgogICAgICIyOlxuXHQiCiAgICAgIm1vdncJKCUyKSwldzBcblx0Igog ICAgICJtb3Z3CSV3MCwoJTEpIgogICAgIDogIj0mcSIgKF9fZDApLCAiPXIiIChfX3RtcCksICI9 JnIiIChfX3NyYyksICI9JnIiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0 ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3Rt cCksICIyIiAoX19zcmMpLCAiMyIgKF9fc3JjbGVuIC8gMiksCiAgICAgICAibSIgKCAqKHN0cnVj dCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19zcmMpCiAgICAgOiAi Y2MiKTsKICByZXR1cm4gX190bXAgKyAyOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19tZW1w Y3B5X2J5biAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3JjLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuKTsKCmV4dGVybiBfX2lubGlu ZSBjaGFyICoKX19tZW1wY3B5X2J5biAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fc3Jj LCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIF9fZDAsIF9fZDE7 CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rlc3Q7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18K ICAgICgiY2xkXG5cdCIKICAgICAic2hybAkkMSwlJWVjeFxuXHQiCiAgICAgImpuYwkxZlxuXHQi CiAgICAgIm1vdnNiXG4iCiAgICAgIjE6XG5cdCIKICAgICAic2hybAkkMSwlJWVjeFxuXHQiCiAg ICAgImpuYwkyZlxuXHQiCiAgICAgIm1vdnN3XG4iCiAgICAgIjI6XG5cdCIKICAgICAicmVwOyBt b3ZzbCIKICAgICA6ICI9RCIgKF9fdG1wKSwgIj0mYyIgKF9fZDApLCAiPSZTIiAoX19kMSksCiAg ICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsg fSAqKV9fZGVzdCkKICAgICA6ICIwIiAoX190bXApLCAiMSIgKF9fc3JjbGVuKSwgIjIiIChfX3Ny YyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNs ZW5dOyB9ICopX19zcmMpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX190bXA7Cn0KCmV4dGVybiBf X2lubGluZSBjaGFyICpfX3N0cGNweV9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19z cmMpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cGNweV9nIChjaGFyICpfX2Rlc3QsIF9f Y29uc3QgY2hhciAqX19zcmMpCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdDsKICBy ZWdpc3RlciBjaGFyIF9fZHVtbXk7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgKICAgICAi MTpcblx0IgogICAgICJtb3ZiCSglMCksJWIyXG5cdCIKICAgICAibGVhbAkxKCUwKSwlMFxuXHQi CiAgICAgIm1vdmIJJWIyLCglMSlcblx0IgogICAgICJsZWFsCTEoJTEpLCUxXG5cdCIKICAgICAi dGVzdGIJJWIyLCViMlxuXHQiCiAgICAgImpuZQkxYiIKICAgICA6ICI9JnIiIChfX3NyYyksICI9 ciIgKF9fdG1wKSwgIj0mcSIgKF9fZHVtbXkpLAogICAgICAgIj1tIiAoICooc3RydWN0IHsgY2hh ciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fZGVzdCkKICAgICA6ICIwIiAoX19zcmMpLCAiMSIgKF9f dG1wKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9f c3JjKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fdG1wIC0gMTsKfQpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJuY3B5X2J5NCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgX19zcmNbXSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbiwgc2l6 ZV90IF9fbik7CgpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RybmNweV9ieTQgKGNoYXIgKl9f ZGVzdCwgX19jb25zdCBjaGFyIF9fc3JjW10sIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbikK ewogIHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGludCBfX2R1bW15 MSwgX19kdW1teTI7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0IgogICAgICJt b3ZsCSglMiksJTBcblx0IgogICAgICJsZWFsCTQoJTIpLCUyXG5cdCIKICAgICAibW92bAklMCwo JTEpXG5cdCIKICAgICAibGVhbAk0KCUxKSwlMVxuXHQiCiAgICAgImRlY2wJJTNcblx0IgogICAg ICJqbnoJMWIiCiAgICAgOiAiPSZyIiAoX19kdW1teTEpLCAiPXIiIChfX3RtcCksICI9JnIiIChf X3NyYyksICI9JnIiIChfX2R1bW15MiksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBfX2V4dGVu c2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fZGVzdCkKICAgICA6ICIxIiAoX190bXAp LCAiMiIgKF9fc3JjKSwgIjMiIChfX3NyY2xlbiAvIDQpLAogICAgICAgIm0iICggKihzdHJ1Y3Qg eyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fc3JjKQogICAgIDogImNj Iik7CiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0g X19zcmNsZW4pICYmIChfX24gLSBfX3NyY2xlbikgPD0gMTYgPyAoKF9fbiAtIF9fc3JjbGVuKSA9 PSAxID8gKHsgdm9pZCAqX19zID0gKF9fdG1wKTsgKigodW5zaWduZWQgY2hhciAqKSBfX3MpID0g KHVuc2lnbmVkIGNoYXIpICgnXDAnKTsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9IChfX3RtcCk7 IHVuaW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5z aWduZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2ln bmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24g LSBfX3NyY2xlbiA9PSAzIHx8IF9fbiAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGls ZV9fICgiIiA6ICI9ciIgKF9fYykgOiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVu KSB7IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25f XyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2ln bmVkIHNob3J0IGludCkgX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAy KTsgX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+ X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2Ug MTA6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsg NCk7IGNhc2UgNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAq KSBfX3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19j OyBicmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgo dm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5z aW9uX18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVu c2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0g X19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9f YzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5f X3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0 OiBfX3UtPl9fdWkgPSBfX2M7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGlu X2NvbnN0YW50X3AgKCdcMCcpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xl bikgPyAoKChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190 bXAsICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEw MSwgX19uIC0gX19zcmNsZW4pIDogKCgoX19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVt c2V0X2Njbl9ieTIgKF9fdG1wLCAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1ww JykpKSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcs IF9fbiAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4p KSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pID8gKCgoX19uIC0gX19z cmNsZW4pICUgNCA9PSAwKSA/IF9fbWVtc2V0X2djbl9ieTQgKF9fdG1wLCAnXDAnLCBfX24gLSBf X3NyY2xlbikgOiAoKChfX24gLSBfX3NyY2xlbikgJSAyID09IDApID8gX19tZW1zZXRfZ2NuX2J5 MiAoX190bXAsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9f biAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkp KTsKICByZXR1cm4gX19kZXN0Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJuY3B5X2J5 MiAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIgX19zcmNbXSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbik7CgpleHRlcm4g X19pbmxpbmUgY2hhciAqCl9fc3RybmNweV9ieTIgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy IF9fc3JjW10sIHNpemVfdCBfX3NyY2xlbiwgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIGNoYXIg Kl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGludCBfX2R1bW15MSwgX19kdW1teTI7CiAgX19h c21fXyBfX3ZvbGF0aWxlX18KICAgICgic2hybAkkMSwlM1xuXHQiCiAgICAgImp6CTJmXG4iCiAg ICAgIjE6XG5cdCIKICAgICAibW92bAkoJTIpLCUwXG5cdCIKICAgICAibGVhbAk0KCUyKSwlMlxu XHQiCiAgICAgIm1vdmwJJTAsKCUxKVxuXHQiCiAgICAgImxlYWwJNCglMSksJTFcblx0IgogICAg ICJkZWNsCSUzXG5cdCIKICAgICAiam56CTFiXG4iCiAgICAgIjI6XG5cdCIKICAgICAibW92dwko JTIpLCV3MFxuXHQiCiAgICAgIm1vdncJJXcwLCglMSlcblx0IgogICAgIDogIj0mcSIgKF9fZHVt bXkxKSwgIj1yIiAoX190bXApLCAiPSZyIiAoX19zcmMpLCAiPSZyIiAoX19kdW1teTIpLAogICAg ICAgIj1tIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX3NyY2xlbl07IH0g KilfX2Rlc3QpCiAgICAgOiAiMSIgKF9fdG1wKSwgIjIiIChfX3NyYyksICIzIiAoX19zcmNsZW4g LyAyKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX3Ny Y2xlbl07IH0gKilfX3NyYykKICAgICA6ICJjYyIpOwogICh2b2lkKSAoX19leHRlbnNpb25fXyAo X19idWlsdGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSAmJiAoX19uIC0gX19zcmNsZW4p IDw9IDE2ID8gKChfX24gLSBfX3NyY2xlbikgPT0gMSA/ICh7IHZvaWQgKl9fcyA9IChfX3RtcCAr IDIpOyAqKCh1bnNpZ25lZCBjaGFyICopIF9fcykgPSAodW5zaWduZWQgY2hhcikgKCdcMCcpOyBf X3M7IH0pIDogKHsgdm9pZCAqX19zID0gKF9fdG1wICsgMik7IHVuaW9uIHsgdW5zaWduZWQgaW50 IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWduZWQgY2hhciBfX3VjOyB9ICpf X3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBj aGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24gLSBfX3NyY2xlbiA9PSAzIHx8IF9f biAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGlsZV9fICgiIiA6ICI9ciIgKF9fYykg OiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVuKSB7IGNhc2UgMTU6IF9fdS0+X191 aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTE6 IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBf X3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsgX191LT5fX3VjID0gKHVuc2ln bmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6IF9fdS0+X191aSA9IF9fYzsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgNjogX191LT5fX3Vp ID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAyOiBf X3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBicmVhazsgY2FzZSAxMzogX191 LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2Fz ZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9uX18gKCh2b2lkICopIF9fdSAr IDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJl YWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQg KikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25f XyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4 dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBfX3UtPl9fdWkgPSBfX2M7IGNh c2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AgKCdcMCcpID8g KF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikgPyAoKChfX24gLSBfX3NyY2xl bikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190bXAgKyAyLCAoKHVuc2lnbmVkIGlu dCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVu KSA6ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbXNldF9jY25fYnkyIChfX3Rt cCArIDIsICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAx MDEwMSwgX19uIC0gX19zcmNsZW4pIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9f c3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSkgOiAo X19idWlsdGluX2NvbnN0YW50X3AgKF9fbiAtIF9fc3JjbGVuKSA/ICgoKF9fbiAtIF9fc3JjbGVu KSAlIDQgPT0gMCkgPyBfX21lbXNldF9nY25fYnk0IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9f c3JjbGVuKSA6ICgoKF9fbiAtIF9fc3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbXNldF9nY25fYnky IChfX3RtcCArIDIsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAgKyAyLCAn XDAnLCBfX24gLSBfX3NyY2xlbikpKSA6IG1lbXNldCAoX190bXAgKyAyLCAnXDAnLCBfX24gLSBf X3NyY2xlbikpKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpf X3N0cm5jcHlfYnluIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciBfX3NyY1tdLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19u KTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJuY3B5X2J5biAoY2hhciAqX19kZXN0LCBf X2NvbnN0IGNoYXIgX19zcmNbXSwgc2l6ZV90IF9fc3JjbGVuLCBzaXplX3QgX19uKQp7CiAgcmVn aXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMTsKICByZWdpc3RlciBjaGFyICpfX3Rt cCA9IF9fZGVzdDsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcblx0IgogICAgICJz aHJsCSQxLCUxXG5cdCIKICAgICAiam5jCTFmXG5cdCIKICAgICAibW92c2JcbiIKICAgICAiMTpc blx0IgogICAgICJzaHJsCSQxLCUxXG5cdCIKICAgICAiam5jCTJmXG5cdCIKICAgICAibW92c3dc biIKICAgICAiMjpcblx0IgogICAgICJyZXA7IG1vdnNsIgogICAgIDogIj1EIiAoX190bXApLCAi PSZjIiAoX19kMCksICI9JlMiIChfX2QxKSwKICAgICAgICI9bSIgKCAqKHN0cnVjdCB7IF9fZXh0 ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3Ny Y2xlbiksICIwIiAoX190bXApLCIyIiAoX19zcmMpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBf X2V4dGVuc2lvbl9fIGNoYXIgX194W19fc3JjbGVuXTsgfSAqKV9fc3JjKQogICAgIDogImNjIik7 CiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19z cmNsZW4pICYmIChfX24gLSBfX3NyY2xlbikgPD0gMTYgPyAoKF9fbiAtIF9fc3JjbGVuKSA9PSAx ID8gKHsgdm9pZCAqX19zID0gKF9fdG1wKTsgKigodW5zaWduZWQgY2hhciAqKSBfX3MpID0gKHVu c2lnbmVkIGNoYXIpICgnXDAnKTsgX19zOyB9KSA6ICh7IHZvaWQgKl9fcyA9IChfX3RtcCk7IHVu aW9uIHsgdW5zaWduZWQgaW50IF9fdWk7IHVuc2lnbmVkIHNob3J0IGludCBfX3VzaTsgdW5zaWdu ZWQgY2hhciBfX3VjOyB9ICpfX3UgPSBfX3M7IHVuc2lnbmVkIGludCBfX2MgPSAoKHVuc2lnbmVk IGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykpKSAqIDB4MDEwMTAxMDE7IGlmIChfX24gLSBf X3NyY2xlbiA9PSAzIHx8IF9fbiAtIF9fc3JjbGVuID49IDUpIF9fYXNtX18gX192b2xhdGlsZV9f ICgiIiA6ICI9ciIgKF9fYykgOiAiMCIgKF9fYykpOyBzd2l0Y2ggKF9fbiAtIF9fc3JjbGVuKSB7 IGNhc2UgMTU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikg X191ICsgNCk7IGNhc2UgMTE6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAo KHZvaWQgKikgX191ICsgNCk7IGNhc2UgNzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVu c2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSAzOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVk IHNob3J0IGludCkgX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyAyKTsg X191LT5fX3VjID0gKHVuc2lnbmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTQ6IF9fdS0+X191 aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTA6 IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7 IGNhc2UgNjogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBf X3UgKyA0KTsgY2FzZSAyOiBfX3UtPl9fdXNpID0gKHVuc2lnbmVkIHNob3J0IGludCkgX19jOyBi cmVhazsgY2FzZSAxMzogX191LT5fX3VpID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9p ZCAqKSBfX3UgKyA0KTsgY2FzZSA5OiBfX3UtPl9fdWkgPSBfX2M7IF9fdSA9IF9fZXh0ZW5zaW9u X18gKCh2b2lkICopIF9fdSArIDQpOyBjYXNlIDU6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTogX191LT5fX3VjID0gKHVuc2ln bmVkIGNoYXIpIF9fYzsgYnJlYWs7IGNhc2UgMTY6IF9fdS0+X191aSA9IF9fYzsgX191ID0gX19l eHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgMTI6IF9fdS0+X191aSA9IF9fYzsg X191ID0gX19leHRlbnNpb25fXyAoKHZvaWQgKikgX191ICsgNCk7IGNhc2UgODogX191LT5fX3Vp ID0gX19jOyBfX3UgPSBfX2V4dGVuc2lvbl9fICgodm9pZCAqKSBfX3UgKyA0KTsgY2FzZSA0OiBf X3UtPl9fdWkgPSBfX2M7IGNhc2UgMDogYnJlYWs7IH0gX19zOyB9KSkgOiAoX19idWlsdGluX2Nv bnN0YW50X3AgKCdcMCcpID8gKF9fYnVpbHRpbl9jb25zdGFudF9wIChfX24gLSBfX3NyY2xlbikg PyAoKChfX24gLSBfX3NyY2xlbikgJSA0ID09IDApID8gX19tZW1zZXRfY2NuX2J5NCAoX190bXAs ICgodW5zaWduZWQgaW50KSAoKHVuc2lnbmVkIGNoYXIpICgnXDAnKSkpICogMHgwMTAxMDEwMSwg X19uIC0gX19zcmNsZW4pIDogKCgoX19uIC0gX19zcmNsZW4pICUgMiA9PSAwKSA/IF9fbWVtc2V0 X2Njbl9ieTIgKF9fdG1wLCAoKHVuc2lnbmVkIGludCkgKCh1bnNpZ25lZCBjaGFyKSAoJ1wwJykp KSAqIDB4MDEwMTAxMDEsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9f biAtIF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSA6 IChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19uIC0gX19zcmNsZW4pID8gKCgoX19uIC0gX19zcmNs ZW4pICUgNCA9PSAwKSA/IF9fbWVtc2V0X2djbl9ieTQgKF9fdG1wLCAnXDAnLCBfX24gLSBfX3Ny Y2xlbikgOiAoKChfX24gLSBfX3NyY2xlbikgJSAyID09IDApID8gX19tZW1zZXRfZ2NuX2J5MiAo X190bXAsICdcMCcsIF9fbiAtIF9fc3JjbGVuKSA6IG1lbXNldCAoX190bXAsICdcMCcsIF9fbiAt IF9fc3JjbGVuKSkpIDogbWVtc2V0IChfX3RtcCwgJ1wwJywgX19uIC0gX19zcmNsZW4pKSkpKTsK ICByZXR1cm4gX19kZXN0Owp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJuY3B5X2dnIChj aGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHNpemVfdCBfX24pOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cm5j cHlfZ2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyICpfX3NyYywgc2l6ZV90IF9fbikKewog IHJlZ2lzdGVyIGNoYXIgKl9fdG1wID0gX19kZXN0OwogIHJlZ2lzdGVyIGNoYXIgX19kdW1teTsK ICBpZiAoX19uID4gMCkKICAgIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAgICgiMTpcblx0Igog ICAgICAgIm1vdmIJKCUwKSwlMlxuXHQiCiAgICAgICAiaW5jbAklMFxuXHQiCiAgICAgICAibW92 YgklMiwoJTEpXG5cdCIKICAgICAgICJpbmNsCSUxXG5cdCIKICAgICAgICJkZWNsCSUzXG5cdCIK ICAgICAgICJqZQkzZlxuXHQiCiAgICAgICAidGVzdGIJJTIsJTJcblx0IgogICAgICAgImpuZQkx YlxuXHQiCiAgICAgICAiMjpcblx0IgogICAgICAgIm1vdmIJJTIsKCUxKVxuXHQiCiAgICAgICAi aW5jbAklMVxuXHQiCiAgICAgICAiZGVjbAklM1xuXHQiCiAgICAgICAiam5lCTJiXG5cdCIKICAg ICAgICIzOiIKICAgICAgIDogIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fdG1wKSwgIj0mcSIgKF9f ZHVtbXkpLCAiPSZyIiAoX19uKQogICAgICAgOiAiMCIgKF9fc3JjKSwgIjEiIChfX3RtcCksICIz IiAoX19uKQogICAgICAgOiAibWVtb3J5IiwgImNjIik7CgogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0 ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2F0X2MgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFy IF9fc3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zcmNs ZW4pOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNhdF9jIChjaGFyICpfX2Rlc3QsIF9f Y29uc3QgY2hhciBfX3NyY1tdLCBzaXplX3QgX19zcmNsZW4pCnsKICByZWdpc3RlciBjaGFyICpf X3RtcCA9IF9fZGVzdCAtIDE7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0Igog ICAgICJpbmNsCSUwXG5cdCIKICAgICAiY21wYgkkMCwoJTApXG5cdCIKICAgICAiam5lCTFiXG4i CiAgICAgOiAiPXIiIChfX3RtcCksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsw eGZmZmZmZmZdOyB9ICopX19kZXN0KQogICAgIDogIjAiIChfX3RtcCksCiAgICAgICAibSIgKCAq KHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hhciBfX3hbX19zcmNsZW5dOyB9ICopX19zcmMpCiAg ICAgOiAiY2MiKTsKCiAgKHZvaWQpIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRf cCAoX19zcmNsZW4pID8gKChfX3NyY2xlbikgPT0gMCA/IChfX3RtcCkgOiAoKChfX3NyY2xlbikg JSA0ID09IDApID8gX19tZW1jcHlfYnk0IChfX3RtcCwgX19zcmMsIF9fc3JjbGVuKSA6ICgoKF9f c3JjbGVuKSAlIDIgPT0gMCkgPyBfX21lbWNweV9ieTIgKF9fdG1wLCBfX3NyYywgX19zcmNsZW4p IDogX19tZW1jcHlfZyAoX190bXAsIF9fc3JjLCBfX3NyY2xlbikpKSkgOiBfX21lbWNweV9nIChf X3RtcCwgX19zcmMsIF9fc3JjbGVuKSkpOwogIHJldHVybiBfX2Rlc3Q7Cn0KCmV4dGVybiBfX2lu bGluZSBjaGFyICpfX3N0cmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3QgY2hhciAqX19zcmMp OwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpfX3N0cmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29u c3QgY2hhciAqX19zcmMpCnsKICByZWdpc3RlciBjaGFyICpfX3RtcCA9IF9fZGVzdCAtIDE7CiAg cmVnaXN0ZXIgY2hhciBfX2R1bW15OwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5c dCIKICAgICAiaW5jbAklMVxuXHQiCiAgICAgImNtcGIJJDAsKCUxKVxuXHQiCiAgICAgImpuZQkx YlxuIgogICAgICIyOlxuXHQiCiAgICAgIm1vdmIJKCUyKSwlYjBcblx0IgogICAgICJpbmNsCSUy XG5cdCIKICAgICAibW92YgklYjAsKCUxKVxuXHQiCiAgICAgImluY2wJJTFcblx0IgogICAgICJ0 ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTJiXG4iCiAgICAgOiAiPSZxIiAoX19kdW1teSks ICI9JnIiIChfX3RtcCksICI9JnIiIChfX3NyYyksCiAgICAgICAiPW0iICggKihzdHJ1Y3QgeyBj aGFyIF9feFsweGZmZmZmZmZdOyB9ICopX19kZXN0KQogICAgIDogIjEiIChfX3RtcCksICIyIiAo X19zcmMpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZmZmZdOyB9ICop X19zcmMpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIF9fZGVzdDsKfQpleHRlcm4g X19pbmxpbmUgY2hhciAqX19zdHJuY2F0X2cgKGNoYXIgKl9fZGVzdCwgX19jb25zdCBjaGFyIF9f c3JjW10sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7Cgpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RybmNhdF9nIChjaGFyICpfX2Rlc3QsIF9fY29uc3Qg Y2hhciBfX3NyY1tdLCBzaXplX3QgX19uKQp7CiAgcmVnaXN0ZXIgY2hhciAqX190bXAgPSBfX2Rl c3Q7CiAgcmVnaXN0ZXIgY2hhciBfX2R1bW15OwogIC0tX190bXA7CiAgX19hc21fXyBfX3ZvbGF0 aWxlX18KICAgICgiMTpcblx0IgogICAgICJjbXBiCSQwLDEoJTEpXG5cdCIKICAgICAibGVhbAkx KCUxKSwlMVxuXHQiCiAgICAgImpuZQkxYlxuIgogICAgICIyOlxuXHQiCiAgICAgImRlY2wJJTNc blx0IgogICAgICJqcwkzZlxuXHQiCiAgICAgIm1vdmIJKCUyKSwlYjBcblx0IgogICAgICJsZWFs CTEoJTIpLCUyXG5cdCIKICAgICAibW92YgklYjAsKCUxKVxuXHQiCiAgICAgImxlYWwJMSglMSks JTFcblx0IgogICAgICJ0ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTJiXG5cdCIKICAgICAi ZGVjbAklMVxuIgogICAgICIzOlxuXHQiCiAgICAgIm1vdmIJJDAsKCUxKSIKICAgICA6ICI9JnEi IChfX2R1bW15KSwgIj0mciIgKF9fdG1wKSwgIj0mciIgKF9fc3JjKSwgIj0mciIgKF9fbikKICAg ICA6ICIxIiAoX190bXApLCAiMiIgKF9fc3JjKSwgIjMiIChfX24pCiAgICAgOiAibWVtb3J5Iiwg ImNjIik7CgogIHJldHVybiBfX2Rlc3Q7Cn0KZXh0ZXJuIF9faW5saW5lIGludCBfX3N0cmNtcF9n ZyAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpOwoKZXh0ZXJuIF9faW5s aW5lIGludApfX3N0cmNtcF9nZyAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9f czIpCnsKICByZWdpc3RlciBpbnQgX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgi MTpcblx0IgogICAgICJtb3ZiCSglMSksJWIwXG5cdCIKICAgICAibGVhbAkxKCUxKSwlMVxuXHQi CiAgICAgImNtcGIJJWIwLCglMilcblx0IgogICAgICJqbmUJMmZcblx0IgogICAgICJsZWFsCTEo JTIpLCUyXG5cdCIKICAgICAidGVzdGIJJWIwLCViMFxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAg ICAgInhvcmwJJTAsJTBcblx0IgogICAgICJqbXAJM2ZcbiIKICAgICAiMjpcblx0IgogICAgICJt b3ZsCSQxLCUwXG5cdCIKICAgICAiamIJM2Zcblx0IgogICAgICJuZWdsCSUwXG4iCiAgICAgIjM6 IgogICAgIDogIj1xIiAoX19yZXMpLCAiPSZyIiAoX19zMSksICI9JnIiIChfX3MyKQogICAgIDog IjEiIChfX3MxKSwgIjIiIChfX3MyKSwKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hb MHhmZmZmZmZmXTsgfSAqKV9fczEpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsw eGZmZmZmZmZdOyB9ICopX19zMikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQpleHRl cm4gX19pbmxpbmUgaW50IF9fc3RybmNtcF9nIChfX2NvbnN0IGNoYXIgKl9fczEsIF9fY29uc3Qg Y2hhciAqX19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbik7 CgpleHRlcm4gX19pbmxpbmUgaW50Cl9fc3RybmNtcF9nIChfX2NvbnN0IGNoYXIgKl9fczEsIF9f Y29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKewogIHJlZ2lzdGVyIGludCBfX3JlczsKICBf X2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCIxOlxuXHQiCiAgICAgImRlY2wJJTNcblx0IgogICAg ICJqcwkyZlxuXHQiCiAgICAgIm1vdmIJKCUxKSwlYjBcblx0IgogICAgICJpbmNsCSUxXG5cdCIK ICAgICAiY21wYgklYjAsKCUyKVxuXHQiCiAgICAgImpuZQkzZlxuXHQiCiAgICAgImluY2wJJTJc blx0IgogICAgICJ0ZXN0YgklYjAsJWIwXG5cdCIKICAgICAiam5lCTFiXG4iCiAgICAgIjI6XG5c dCIKICAgICAieG9ybAklMCwlMFxuXHQiCiAgICAgImptcAk0ZlxuIgogICAgICIzOlxuXHQiCiAg ICAgIm1vdmwJJDEsJTBcblx0IgogICAgICJqYgk0ZlxuXHQiCiAgICAgIm5lZ2wJJTBcbiIKICAg ICAiNDoiCiAgICAgOiAiPXEiIChfX3JlcyksICI9JnIiIChfX3MxKSwgIj0mciIgKF9fczIpLCAi PSZyIiAoX19uKQogICAgIDogIjEiIChfX3MxKSwgIjIiIChfX3MyKSwgIjMiIChfX24pLAogICAg ICAgIm0iICggKihzdHJ1Y3QgeyBfX2V4dGVuc2lvbl9fIGNoYXIgX194W19fbl07IH0gKilfX3Mx KSwKICAgICAgICJtIiAoICooc3RydWN0IHsgX19leHRlbnNpb25fXyBjaGFyIF9feFtfX25dOyB9 ICopX19zMikKICAgICA6ICJjYyIpOwogIHJldHVybiBfX3JlczsKfQpleHRlcm4gX19pbmxpbmUg Y2hhciAqX19zdHJjaHJfYyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpOwoKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKewog IHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7 CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiMTpcblx0IgogICAgICJtb3ZiCSglMCksJSVh bFxuXHQiCiAgICAgImNtcGIJJSVhaCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJs ZWFsCTEoJTApLCUwXG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lCTFi XG5cdCIKICAgICAieG9ybAklMCwlMFxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwg Ij0mYSIgKF9fZDApCiAgICAgOiAiMCIgKF9fcyksICIxIiAoX19jKSwKICAgICAgICJtIiAoICoo c3RydWN0IHsgY2hhciBfX3hbMHhmZmZmZmZmXTsgfSAqKV9fcykKICAgICA6ICJjYyIpOwogIHJl dHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2hyX2cgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjaHJfZyAo X19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGlu dCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAg ICAoIm1vdmIJJSVhbCwlJWFoXG4iCiAgICAgIjE6XG5cdCIKICAgICAibW92YgkoJTApLCUlYWxc blx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibGVh bAkxKCUwKSwlMFxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpuZQkxYlxu XHQiCiAgICAgInhvcmwJJTAsJTBcbiIKICAgICAiMjoiCiAgICAgOiAiPXIiIChfX3JlcyksICI9 JmEiIChfX2QwKQogICAgIDogIjAiIChfX3MpLCAiMSIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0 cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1 cm4gX19yZXM7Cn0KZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RyY2hybnVsX2MgKF9fY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJjaHJudWxf YyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25n IGludCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9f CiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTApLCUlYWxcblx0IgogICAgICJjbXBiCSUlYWgs JSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibGVhbAkxKCUwKSwlMFxuXHQiCiAgICAg InRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpuZQkxYlxuXHQiCiAgICAgImRlY2wJJTBcbiIK ICAgICAiMjoiCiAgICAgOiAiPXIiIChfX3JlcyksICI9JmEiIChfX2QwKQogICAgIDogIjAiIChf X3MpLCAiMSIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZm Zl07IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lu bGluZSBjaGFyICpfX3N0cmNocm51bF9nIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7Cgpl eHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3RyY2hybnVsX2cgKF9fY29uc3QgY2hhciAqX19zLCBp bnQgX19jKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMDsKICByZWdpc3RlciBj aGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZiCSUlYWwsJSVhaFxu IgogICAgICIxOlxuXHQiCiAgICAgIm1vdmIJKCUwKSwlJWFsXG5cdCIKICAgICAiY21wYgklJWFo LCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQiCiAgICAgImxlYWwJMSglMCksJTBcblx0IgogICAg ICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJkZWNsCSUwXG4i CiAgICAgIjI6IgogICAgIDogIj1yIiAoX19yZXMpLCAiPSZhIiAoX19kMCkKICAgICA6ICIwIiAo X19zKSwgIjEiIChfX2MpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZm ZmZdOyB9ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIF9fcmVzOwp9CiMgMTQyMCAiLi4v c3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f c3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYyk7CgpleHRlcm4gX19pbmxpbmUg Y2hhciAqCl9fc3RycmNocl9jIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykKewogIHJlZ2lz dGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDE7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7 CiAgX19hc21fXyBfX3ZvbGF0aWxlX18KICAgICgiY2xkXG4iCiAgICAgIjE6XG5cdCIKICAgICAi bG9kc2Jcblx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAgICAgImpuZQkyZlxuXHQiCiAg ICAgImxlYWwJLTEoJSVlc2kpLCUwXG4iCiAgICAgIjI6XG5cdCIKICAgICAidGVzdGIJJSVhbCwl JWFsXG5cdCIKICAgICAiam5lIDFiIgogICAgIDogIj1kIiAoX19yZXMpLCAiPSZTIiAoX19kMCks ICI9JmEiIChfX2QxKQogICAgIDogIjAiICgwKSwgIjEiIChfX3MpLCAiMiIgKF9fYyksCiAgICAg ICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07IH0gKilfX3MpCiAgICAgOiAi Y2MiKTsKICByZXR1cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnJjaHJf ZyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpOwoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKgpf X3N0cnJjaHJfZyAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpCnsKICByZWdpc3RlciB1bnNp Z25lZCBsb25nIGludCBfX2QwLCBfX2QxOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNt X18gX192b2xhdGlsZV9fCiAgICAoIm1vdmIJJSVhbCwlJWFoXG4iCiAgICAgImNsZFxuXHQiCiAg ICAgIjE6XG5cdCIKICAgICAibG9kc2Jcblx0IgogICAgICJjbXBiCSUlYWgsJSVhbFxuXHQiCiAg ICAgImpuZQkyZlxuXHQiCiAgICAgImxlYWwJLTEoJSVlc2kpLCUwXG4iCiAgICAgIjI6XG5cdCIK ICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiam5lIDFiIgogICAgIDogIj1yIiAoX19y ZXMpLCAiPSZTIiAoX19kMCksICI9JmEiIChfX2QxKQogICAgIDogIjAiICgwKSwgIjEiIChfX3Mp LCAiMiIgKF9fYyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IGNoYXIgX194WzB4ZmZmZmZmZl07 IH0gKilfX3MpCiAgICAgOiAiY2MiKTsKICByZXR1cm4gX19yZXM7Cn0KIyAxNDkzICIuLi9zeXNk ZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ry Y3Nwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX3JlamVjdCk7CgoKZXh0ZXJuIF9faW5s aW5lIHNpemVfdApfX3N0cmNzcG5fYzEgKF9fY29uc3QgY2hhciAqX19zLCBpbnQgX19yZWplY3Qp CnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwOwogIHJlZ2lzdGVyIGNoYXIgKl9f cmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTAp LCUlYWxcblx0IgogICAgICJsZWFsCTEoJTApLCUwXG5cdCIKICAgICAiY21wYgklJWFoLCUlYWxc blx0IgogICAgICJqZQkyZlxuXHQiCiAgICAgInRlc3RiCSUlYWwsJSVhbFxuXHQiCiAgICAgImpu ZQkxYlxuIgogICAgICIyOiIKICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mYSIgKF9fZDApCiAgICAg OiAiMCIgKF9fcyksICIxIiAoX19yZWplY3QpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFy IF9feFsweGZmZmZmZmZdOyB9ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIChfX3JlcyAt IDEpIC0gX19zOwp9CgoKZXh0ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cmNzcG5fY2cgKF9fY29u c3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgX19yZWplY3RbXSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fcmVqZWN0X2xlbik7CgpleHRlcm4gX19pbmxpbmUg c2l6ZV90Cl9fc3RyY3Nwbl9jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciBfX3Jl amVjdFtdLCBzaXplX3QgX19yZWplY3RfbGVuKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBp bnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciBfX2NvbnN0IGNoYXIgKl9fcmVzOwogIF9f YXNtX18gX192b2xhdGlsZV9fCiAgICAoImNsZFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNi XG5cdCIKICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJt b3ZsCSU1LCUlZWRpXG5cdCIKICAgICAibW92bAklNiwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBz Y2FzYlxuXHQiCiAgICAgImpuZQkxYlxuIgogICAgICIyOiIKICAgICA6ICI9UyIgKF9fcmVzKSwg Ij0mYSIgKF9fZDApLCAiPSZjIiAoX19kMSksICI9JkQiIChfX2QyKQogICAgIDogIjAiIChfX3Mp LCAiZCIgKF9fcmVqZWN0KSwgImciIChfX3JlamVjdF9sZW4pCiAgICAgOiAibWVtb3J5IiwgImNj Iik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90 IF9fc3RyY3Nwbl9nIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3JlamVjdCk7 CiMgMTU3NCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9faW5s aW5lIHNpemVfdApfX3N0cmNzcG5fZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAq X19yZWplY3QpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBfX2Qy LCBfX2QzOwogIHJlZ2lzdGVyIF9fY29uc3QgY2hhciAqX19yZXM7CiAgX19hc21fXyBfX3ZvbGF0 aWxlX18KICAgICgiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAibm90bAkl JWVjeFxuXHQiCiAgICAgImxlYWwJLTEoJSVlY3gpLCUlZWR4XG4iCiAgICAgIjE6XG5cdCIKICAg ICAibG9kc2Jcblx0IgogICAgICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQi CiAgICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUlZWR4LCUlZWN4XG5cdCIK ICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAiam5lCTFiXG4iCiAgICAgIjI6IgogICAgIDog Ij1TIiAoX19yZXMpLCAiPSZhIiAoX19kMCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpLCAi PSZkIiAoX19kMykKICAgICA6ICIwIiAoX19zKSwgIjEiICgwKSwgIjIiICgweGZmZmZmZmZmKSwg IjMiIChfX3JlamVjdCksICJiIiAoX19yZWplY3QpCgogICAgIDogIm1lbW9yeSIsICJjYyIpOwog IHJldHVybiAoX19yZXMgLSAxKSAtIF9fczsKfQojIDE2MTUgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2 L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBzaXplX3QgX19zdHJzcG5fYzEgKF9fY29u c3QgY2hhciAqX19zLCBpbnQgX19hY2NlcHQpOwoKZXh0ZXJuIF9faW5saW5lIHNpemVfdApfX3N0 cnNwbl9jMSAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2FjY2VwdCkKewogIHJlZ2lzdGVyIHVu c2lnbmVkIGxvbmcgaW50IF9fZDA7CiAgcmVnaXN0ZXIgY2hhciAqX19yZXM7CgogIF9fYXNtX18g X192b2xhdGlsZV9fCiAgICAoIjE6XG5cdCIKICAgICAibW92YgkoJTApLCViMVxuXHQiCiAgICAg ImxlYWwJMSglMCksJTBcblx0IgogICAgICJjbXBiCSVoMSwlYjFcblx0IgogICAgICJqZQkxYiIK ICAgICA6ICI9ciIgKF9fcmVzKSwgIj0mcSIgKF9fZDApCiAgICAgOiAiMCIgKF9fcyksICIxIiAo X19hY2NlcHQpLAogICAgICAgIm0iICggKihzdHJ1Y3QgeyBjaGFyIF9feFsweGZmZmZmZmZdOyB9 ICopX19zKQogICAgIDogImNjIik7CiAgcmV0dXJuIChfX3JlcyAtIDEpIC0gX19zOwp9CgoKZXh0 ZXJuIF9faW5saW5lIHNpemVfdCBfX3N0cnNwbl9jZyAoX19jb25zdCBjaGFyICpfX3MsIF9fY29u c3QgY2hhciBfX2FjY2VwdFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz aXplX3QgX19hY2NlcHRfbGVuKTsKCmV4dGVybiBfX2lubGluZSBzaXplX3QKX19zdHJzcG5fY2cg KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgX19hY2NlcHRbXSwgc2l6ZV90IF9fYWNj ZXB0X2xlbikKewogIHJlZ2lzdGVyIHVuc2lnbmVkIGxvbmcgaW50IF9fZDAsIF9fZDEsIF9fZDI7 CiAgcmVnaXN0ZXIgX19jb25zdCBjaGFyICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwog ICAgKCJjbGRcbiIKICAgICAiMTpcblx0IgogICAgICJsb2RzYlxuXHQiCiAgICAgInRlc3RiCSUl YWwsJSVhbFxuXHQiCiAgICAgImplCTJmXG5cdCIKICAgICAibW92bAklMSwlJWVkaVxuXHQiCiAg ICAgIm1vdmwJJTYsJSVlY3hcblx0IgogICAgICJyZXBuZTsgc2Nhc2Jcblx0IgogICAgICJqZQkx YlxuIgogICAgICIyOiIKICAgICA6ICI9UyIgKF9fcmVzKSwgIj0mZCIgKF9fZDApLCAiPSZjIiAo X19kMSksICI9JkQiIChfX2QyKQogICAgIDogIjAiIChfX3MpLCAiMSIgKF9fYWNjZXB0KSwgImci IChfX2FjY2VwdF9sZW4pLAoKICAgICAgICJtIiAoICooc3RydWN0IHsgY2hhciBfX3hbMHhmZmZm ZmZmXTsgfSAqKV9fcyksCiAgICAgICAibSIgKCAqKHN0cnVjdCB7IF9fZXh0ZW5zaW9uX18gY2hh ciBfX3hbX19hY2NlcHRfbGVuXTsgfSAqKV9fYWNjZXB0KQogICAgIDogImNjIik7CiAgcmV0dXJu IChfX3JlcyAtIDEpIC0gX19zOwp9CgpleHRlcm4gX19pbmxpbmUgc2l6ZV90IF9fc3Ryc3BuX2cg KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KTsKIyAxNjk1ICIuLi9z eXNkZXBzL2kzODYvaTQ4Ni9iaXRzL3N0cmluZy5oIgpleHRlcm4gX19pbmxpbmUgc2l6ZV90Cl9f c3Ryc3BuX2cgKF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQp7CiAg cmVnaXN0ZXIgdW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMiwgX19kMzsKICByZWdp c3RlciBfX2NvbnN0IGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAoImNs ZFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgIm5vdGwJJSVlY3hcblx0IgogICAg ICJsZWFsCS0xKCUlZWN4KSwlJWVkeFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIK ICAgICAidGVzdGIJJSVhbCwlJWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSUl ZWJ4LCUlZWRpXG5cdCIKICAgICAibW92bAklJWVkeCwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBz Y2FzYlxuXHQiCiAgICAgImplCTFiXG4iCiAgICAgIjI6IgogICAgIDogIj1TIiAoX19yZXMpLCAi PSZhIiAoX19kMCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpLCAiPSZkIiAoX19kMykKICAg ICA6ICIwIiAoX19zKSwgIjEiICgwKSwgIjIiICgweGZmZmZmZmZmKSwgIjMiIChfX2FjY2VwdCks ICJiIiAoX19hY2NlcHQpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIChfX3JlcyAt IDEpIC0gX19zOwp9CiMgMTczMyAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIK ZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9fc3RycGJya19jZyAoX19jb25zdCBjaGFyICpfX3MsIF9f Y29uc3QgY2hhciBfX2FjY2VwdFtdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzaXplX3QgX19hY2NlcHRfbGVuKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJr X2NnIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyIF9fYWNjZXB0W10sIHNpemVfdCBf X2FjY2VwdF9sZW4pCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBfX2QxLCBf X2QyOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xhdGlsZV9fCiAgICAo ImNsZFxuIgogICAgICIxOlxuXHQiCiAgICAgImxvZHNiXG5cdCIKICAgICAidGVzdGIJJSVhbCwl JWFsXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJtb3ZsCSU1LCUlZWRpXG5cdCIKICAgICAi bW92bAklNiwlJWVjeFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgImpuZQkxYlxu XHQiCiAgICAgImRlY2wJJTBcblx0IgogICAgICJqbXAJM2ZcbiIKICAgICAiMjpcblx0IgogICAg ICJ4b3JsCSUwLCUwXG4iCiAgICAgIjM6IgogICAgIDogIj1TIiAoX19yZXMpLCAiPSZhIiAoX19k MCksICI9JmMiIChfX2QxKSwgIj0mRCIgKF9fZDIpCiAgICAgOiAiMCIgKF9fcyksICJkIiAoX19h Y2NlcHQpLCAiZyIgKF9fYWNjZXB0X2xlbikKICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKICByZXR1 cm4gX19yZXM7Cn0KCmV4dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnBicmtfZyAoX19jb25zdCBj aGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpOwojIDE3OTcgIi4uL3N5c2RlcHMvaTM4 Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJwYnJrX2cg KF9fY29uc3QgY2hhciAqX19zLCBfX2NvbnN0IGNoYXIgKl9fYWNjZXB0KQp7CiAgcmVnaXN0ZXIg dW5zaWduZWQgbG9uZyBpbnQgX19kMCwgX19kMSwgX19kMiwgX19kMzsKICByZWdpc3RlciBjaGFy ICpfX3JlczsKICBfX2FzbV9fIF9fdm9sYXRpbGVfXwogICAgKCJtb3ZsCSUlZWJ4LCUlZWRpXG5c dCIKICAgICAiY2xkXG5cdCIKICAgICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAibm90bAklJWVj eFxuXHQiCiAgICAgImxlYWwJLTEoJSVlY3gpLCUlZWR4XG4iCiAgICAgIjE6XG5cdCIKICAgICAi bG9kc2Jcblx0IgogICAgICJ0ZXN0YgklJWFsLCUlYWxcblx0IgogICAgICJqZQkyZlxuXHQiCiAg ICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUlZWR4LCUlZWN4XG5cdCIKICAg ICAicmVwbmU7IHNjYXNiXG5cdCIKICAgICAiam5lCTFiXG5cdCIKICAgICAiZGVjbAklMFxuXHQi CiAgICAgImptcAkzZlxuIgogICAgICIyOlxuXHQiCiAgICAgInhvcmwJJTAsJTBcbiIKICAgICAi MzoiCiAgICAgOiAiPVMiIChfX3JlcyksICI9JmEiIChfX2QwKSwgIj0mYyIgKF9fZDEpLCAiPSZk IiAoX19kMiksICI9JkQiIChfX2QzKQogICAgIDogIjAiIChfX3MpLCAiMSIgKDApLCAiMiIgKDB4 ZmZmZmZmZmYpLCAiYiIgKF9fYWNjZXB0KQogICAgIDogIm1lbW9yeSIsICJjYyIpOwogIHJldHVy biBfX3JlczsKfQojIDE4NDIgIi4uL3N5c2RlcHMvaTM4Ni9pNDg2L2JpdHMvc3RyaW5nLmgiCmV4 dGVybiBfX2lubGluZSBjaGFyICpfX3N0cnN0cl9jZyAoX19jb25zdCBjaGFyICpfX2hheXN0YWNr LCBfX2NvbnN0IGNoYXIgX19uZWVkbGVbXSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzaXplX3QgX19uZWVkbGVfbGVuKTsKCmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJz dHJfY2cgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyIF9fbmVlZGxlW10s CiAgICAgICAgICAgICBzaXplX3QgX19uZWVkbGVfbGVuKQp7CiAgcmVnaXN0ZXIgdW5zaWduZWQg bG9uZyBpbnQgX19kMCwgX19kMSwgX19kMjsKICByZWdpc3RlciBjaGFyICpfX3JlczsKICBfX2Fz bV9fIF9fdm9sYXRpbGVfXwogICAgKCJjbGRcbiIgIjE6XG5cdCIKCiAgICAgIm1vdmwJJTYsJSVl ZGlcblx0IgogICAgICJtb3ZsCSU1LCUlZWF4XG5cdCIKICAgICAibW92bAklNCwlJWVjeFxuXHQi CiAgICAgInJlcGU7IGNtcHNiXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJjbXBiCSQwLC0x KCUlZXNpKVxuXHQiCiAgICAgImxlYWwJMSglJWVheCksJTVcblx0IgogICAgICJqbmUJMWJcblx0 IgogICAgICJ4b3JsCSUlZWF4LCUlZWF4XG4iCiAgICAgIjI6IgogICAgIDogIj0mYSIgKF9fcmVz KSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSksICI9JmMiIChfX2QyKQogICAgIDogImciIChf X25lZWRsZV9sZW4pLCAiMSIgKF9faGF5c3RhY2spLCAiZCIgKF9fbmVlZGxlKQogICAgIDogIm1l bW9yeSIsICJjYyIpOwogIHJldHVybiBfX3JlczsKfQoKZXh0ZXJuIF9faW5saW5lIGNoYXIgKl9f c3Ryc3RyX2cgKF9fY29uc3QgY2hhciAqX19oYXlzdGFjaywgX19jb25zdCBjaGFyICpfX25lZWRs ZSk7CiMgMTkwNCAiLi4vc3lzZGVwcy9pMzg2L2k0ODYvYml0cy9zdHJpbmcuaCIKZXh0ZXJuIF9f aW5saW5lIGNoYXIgKgpfX3N0cnN0cl9nIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29u c3QgY2hhciAqX19uZWVkbGUpCnsKICByZWdpc3RlciB1bnNpZ25lZCBsb25nIGludCBfX2QwLCBf X2QxLCBfX2QyLCBfX2QzOwogIHJlZ2lzdGVyIGNoYXIgKl9fcmVzOwogIF9fYXNtX18gX192b2xh dGlsZV9fCiAgICAoImNsZFxuXHQiCiAgICAgInJlcG5lOyBzY2FzYlxuXHQiCiAgICAgIm5vdGwJ JSVlY3hcblx0IgogICAgICJkZWNsCSUlZWN4XG5cdCIKICAgICAibW92bAklJWVjeCwlJWVkeFxu IgogICAgICIxOlxuXHQiCiAgICAgIm1vdmwJJSVlYngsJSVlZGlcblx0IgogICAgICJtb3ZsCSUl ZXNpLCUlZWF4XG5cdCIKICAgICAibW92bAklJWVkeCwlJWVjeFxuXHQiCiAgICAgInJlcGU7IGNt cHNiXG5cdCIKICAgICAiamUJMmZcblx0IgogICAgICJjbXBiCSQwLC0xKCUlZXNpKVxuXHQiCiAg ICAgImxlYWwJMSglJWVheCksJSVlc2lcblx0IgogICAgICJqbmUJMWJcblx0IgogICAgICJ4b3Js CSUlZWF4LCUlZWF4XG4iCiAgICAgIjI6IgogICAgIDogIj0mYSIgKF9fcmVzKSwgIj0mYyIgKF9f ZDApLCAiPSZTIiAoX19kMSksICI9JkQiIChfX2QyKSwgIj0mZCIgKF9fZDMpCiAgICAgOiAiMCIg KDApLCAiMSIgKDB4ZmZmZmZmZmYpLCAiMiIgKF9faGF5c3RhY2spLCAiMyIgKF9fbmVlZGxlKSwK ICAgICAgICJiIiAoX19uZWVkbGUpCiAgICAgOiAibWVtb3J5IiwgImNjIik7CiAgcmV0dXJuIF9f cmVzOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJ0b2tfcl8xYyAoY2hhciAqX19zLCBj aGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCk7CmV4dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJ0 b2tfcl8xYyAoY2hhciAqX19zLCBjaGFyIF9fc2VwLCBjaGFyICoqX19uZXh0cCkKewogIGNoYXIg Kl9fcmVzdWx0OwogIGlmIChfX3MgPT0gKCh2b2lkICopMCkpCiAgICBfX3MgPSAqX19uZXh0cDsK ICB3aGlsZSAoKl9fcyA9PSBfX3NlcCkKICAgICsrX19zOwogIF9fcmVzdWx0ID0gKCh2b2lkICop MCk7CiAgaWYgKCpfX3MgIT0gJ1wwJykKICAgIHsKICAgICAgX19yZXN1bHQgPSBfX3MrKzsKICAg ICAgd2hpbGUgKCpfX3MgIT0gJ1wwJykKICAgICAgICBpZiAoKl9fcysrID09IF9fc2VwKQogICAg ICAgICAgewogICAgICAgICAgICBfX3NbLTFdID0gJ1wwJzsKICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICB9CiAgICAgICpfX25leHRwID0gX19zOwogICAgfQogIHJldHVybiBfX3Jlc3VsdDsK fQojIDExMTcgIi4uL3N0cmluZy9iaXRzL3N0cmluZzIuaCIKZXh0ZXJuIGNoYXIgKl9fc3Ryc2Vw X2cgKGNoYXIgKipfX3N0cmluZ3AsIF9fY29uc3QgY2hhciAqX19kZWxpbSk7CiMgMTEzNSAiLi4v c3RyaW5nL2JpdHMvc3RyaW5nMi5oIgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfMWMg KGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QpOwpleHRlcm4gX19pbmxpbmUgY2hhciAqCl9fc3Ry c2VwXzFjIChjaGFyICoqX19zLCBjaGFyIF9fcmVqZWN0KQp7CiAgcmVnaXN0ZXIgY2hhciAqX19y ZXR2YWwgPSAqX19zOwogIGlmIChfX3JldHZhbCAhPSAoKHZvaWQgKikwKSAmJiAoKl9fcyA9IChf X2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoX19yZWplY3QpID8gKChfX3JlamVj dCkgPT0gJ1wwJyA/IChjaGFyICopIF9fcmF3bWVtY2hyIChfX3JldHZhbCwgX19yZWplY3QpIDog X19zdHJjaHJfYyAoX19yZXR2YWwsICgoX19yZWplY3QpICYgMHhmZikgPDwgOCkpIDogX19zdHJj aHJfZyAoX19yZXR2YWwsIF9fcmVqZWN0KSkpKSAhPSAoKHZvaWQgKikwKSkKICAgICooKl9fcykr KyA9ICdcMCc7CiAgcmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19z dHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0Mik7CmV4 dGVybiBfX2lubGluZSBjaGFyICoKX19zdHJzZXBfMmMgKGNoYXIgKipfX3MsIGNoYXIgX19yZWpl Y3QxLCBjaGFyIF9fcmVqZWN0MikKewogIHJlZ2lzdGVyIGNoYXIgKl9fcmV0dmFsID0gKl9fczsK ICBpZiAoX19yZXR2YWwgIT0gKCh2b2lkICopMCkpCiAgICB7CiAgICAgIHJlZ2lzdGVyIGNoYXIg Kl9fY3AgPSBfX3JldHZhbDsKICAgICAgd2hpbGUgKDEpCiAgICAgICAgewogICAgICAgICAgaWYg KCpfX2NwID09ICdcMCcpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2NwID0gKCh2b2lk ICopMCk7CiAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCpfX2Nw ID09IF9fcmVqZWN0MSB8fCAqX19jcCA9PSBfX3JlamVjdDIpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAqX19jcCsrID0gJ1wwJzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg fQogICAgICAgICAgKytfX2NwOwogICAgICAgIH0KICAgICAgKl9fcyA9IF9fY3A7CiAgICB9CiAg cmV0dXJuIF9fcmV0dmFsOwp9CgpleHRlcm4gX19pbmxpbmUgY2hhciAqX19zdHJzZXBfM2MgKGNo YXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0MiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyIF9fcmVqZWN0Myk7CmV4dGVybiBfX2lubGluZSBjaGFy ICoKX19zdHJzZXBfM2MgKGNoYXIgKipfX3MsIGNoYXIgX19yZWplY3QxLCBjaGFyIF9fcmVqZWN0 MiwgY2hhciBfX3JlamVjdDMpCnsKICByZWdpc3RlciBjaGFyICpfX3JldHZhbCA9ICpfX3M7CiAg aWYgKF9fcmV0dmFsICE9ICgodm9pZCAqKTApKQogICAgewogICAgICByZWdpc3RlciBjaGFyICpf X2NwID0gX19yZXR2YWw7CiAgICAgIHdoaWxlICgxKQogICAgICAgIHsKICAgICAgICAgIGlmICgq X19jcCA9PSAnXDAnKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jcCA9ICgodm9pZCAq KTApOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmICgqX19jcCA9 PSBfX3JlamVjdDEgfHwgKl9fY3AgPT0gX19yZWplY3QyIHx8ICpfX2NwID09IF9fcmVqZWN0MykK ICAgICAgICAgICAgewogICAgICAgICAgICAgICpfX2NwKysgPSAnXDAnOwogICAgICAgICAgICAg IGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICArK19fY3A7CiAgICAgICAgfQogICAgICAq X19zID0gX19jcDsKICAgIH0KICByZXR1cm4gX19yZXR2YWw7Cn0KIyAxMjExICIuLi9zdHJpbmcv Yml0cy9zdHJpbmcyLmgiCiMgMSAiLi4vaW5jbHVkZS9zdGRsaWIuaCIgMQoKCgoKCgojIDEgIi91 c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEg MwojIDggIi4uL2luY2x1ZGUvc3RkbGliLmgiIDIKIyAxICIuLi9zdGRsaWIvc3RkbGliLmgiIDEK IyAzMyAiLi4vc3RkbGliL3N0ZGxpYi5oIgojIDEgIi91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1s aW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIuLi9zdGRsaWIvc3RkbGli LmgiIDIKCgojIDU1MiAiLi4vc3RkbGliL3N0ZGxpYi5oIgoKCmV4dGVybiB2b2lkICptYWxsb2Mg KHNpemVfdCBfX3NpemUpIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgpleHRlcm4gdm9p ZCAqY2FsbG9jIChzaXplX3QgX19ubWVtYiwgc2l6ZV90IF9fc2l6ZSkKICAgICBfX2F0dHJpYnV0 ZV9fICgoX19tYWxsb2NfXykpOwoKIyA5MTQgIi4uL3N0ZGxpYi9zdGRsaWIuaCIKCiMgOSAiLi4v aW5jbHVkZS9zdGRsaWIuaCIgMgojIDE5OSAiLi4vaW5jbHVkZS9zdGRsaWIuaCIKZXh0ZXJuIHZv aWQgKiBfX2RlZmF1bHRfbW9yZWNvcmUgKHB0cmRpZmZfdCk7CgoKZXh0ZXJuIGNoYXIgKl9fc3Ry ZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykp OwpleHRlcm4gY2hhciAqX19zdHJuZHVwIChfX2NvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3Qg X19uKQogICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKZXh0ZXJuIF9fdHlwZW9m IChzdHJjb2xsX2wpIF9fc3RyY29sbF9sOwpleHRlcm4gX190eXBlb2YgKHN0cnhmcm1fbCkgX19z dHJ4ZnJtX2w7CmV4dGVybiBfX3R5cGVvZiAoc3RyY2FzZWNtcF9sKSBfX3N0cmNhc2VjbXBfbDsK ZXh0ZXJuIF9fdHlwZW9mIChzdHJuY2FzZWNtcF9sKSBfX3N0cm5jYXNlY21wX2w7Cgp0eXBlZGVm IF9fc29ja2xlbl90IHNvY2tsZW5fdDsKZXh0ZXJuIGludCBhY2Nlc3MgKF9fY29uc3QgY2hhciAq X19uYW1lLCBpbnQgX190eXBlKSA7CgoKCgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3Qg Y2hhciAqX19uYW1lLCBpbnQgX190eXBlKSA7CmV4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19m ZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CmV4dGVybiBfX29mZjY0X3QgbHNl ZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CgpleHRl cm4gaW50IGNsb3NlIChpbnQgX19mZCkgOwoKCgpleHRlcm4gc3NpemVfdCByZWFkIChpbnQgX19m ZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcykgOwoKCmV4dGVybiBzc2l6ZV90IHdyaXRl IChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4g c3NpemVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9f b2ZmX3QgX19vZmZzZXQpCiAgICAgOwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBf X2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgIF9f b2ZmX3QgX19vZmZzZXQpIDsKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQg Kl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmNjRf dCBfX29mZnNldCkgOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19mZCwgX19jb25z dCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2Zm NjRfdCBfX29mZnNldCkgOwoKCgoKCgoKZXh0ZXJuIGludCBwaXBlIChpbnQgX19waXBlZGVzWzJd KSA7CmV4dGVybiB1bnNpZ25lZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsK ZXh0ZXJuIHVuc2lnbmVkIGludCBzbGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgOwoKCgoK CgpleHRlcm4gX191c2Vjb25kc190IHVhbGFybSAoX191c2Vjb25kc190IF9fdmFsdWUsIF9fdXNl Y29uZHNfdCBfX2ludGVydmFsKQogICAgIDsKCgoKZXh0ZXJuIGludCB1c2xlZXAgKF9fdXNlY29u ZHNfdCBfX3VzZWNvbmRzKSA7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgOwoKCgpleHRl cm4gaW50IGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBfX2dp ZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50IF9fZmQsIF9fdWlk X3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50IGxjaG93biAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKQogICAg IDsKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVy biBpbnQgZmNoZGlyIChpbnQgX19mZCkgOwpleHRlcm4gY2hhciAqZ2V0Y3dkIChjaGFyICpfX2J1 Ziwgc2l6ZV90IF9fc2l6ZSkgOwoKCgoKCmV4dGVybiBjaGFyICpnZXRfY3VycmVudF9kaXJfbmFt ZSAodm9pZCkgOwoKCgoKCgpleHRlcm4gY2hhciAqZ2V0d2QgKGNoYXIgKl9fYnVmKSA7CgoKCgpl eHRlcm4gaW50IGR1cCAoaW50IF9fZmQpIDsKCgpleHRlcm4gaW50IGR1cDIgKGludCBfX2ZkLCBp bnQgX19mZDIpIDsKCgpleHRlcm4gY2hhciAqKl9fZW52aXJvbjsKCmV4dGVybiBjaGFyICoqZW52 aXJvbjsKCgoKCgpleHRlcm4gaW50IGV4ZWN2ZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIGNoYXIg Kl9fY29uc3QgX19hcmd2W10sCiAgICAgICAgICAgICAgICAgICBjaGFyICpfX2NvbnN0IF9fZW52 cFtdKSA7CgoKCgpleHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9f YXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZXhl Y3YgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCmV4 dGVybiBpbnQgZXhlY2xlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgX19jb25zdCBjaGFyICpfX2Fy ZywgLi4uKSA7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19wYXRoLCBfX2Nv bnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBleGVjdnAgKF9fY29uc3QgY2hh ciAqX19maWxlLCBjaGFyICpfX2NvbnN0IF9fYXJndltdKSA7CgoKCgpleHRlcm4gaW50IGV4ZWNs cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgoK ZXh0ZXJuIGludCBuaWNlIChpbnQgX19pbmMpIDsKCgoKCmV4dGVybiB2b2lkIF9leGl0IChpbnQg X19zdGF0dXMpIF9fYXR0cmlidXRlX18gKChfX25vcmV0dXJuX18pKTsKCgoKCgojIDEgIi4uL3N5 c2RlcHMvZ2VuZXJpYy9iaXRzL2NvbmZuYW1lLmgiIDEKIyAyNSAiLi4vc3lzZGVwcy9nZW5lcmlj L2JpdHMvY29uZm5hbWUuaCIKZW51bQogIHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFY X0NBTk9OLAoKICAgIF9QQ19NQVhfSU5QVVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19Q QVRIX01BWCwKCiAgICBfUENfUElQRV9CVUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgog ICAgX1BDX05PX1RSVU5DLAoKICAgIF9QQ19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAg ICBfUENfQVNZTkNfSU8sCgogICAgX1BDX1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoK ICAgIF9QQ19GSUxFU0laRUJJVFMsCgogICAgX1BDX1JFQ19JTkNSX1hGRVJfU0laRSwKCiAgICBf UENfUkVDX01BWF9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19NSU5fWEZFUl9TSVpFLAoKICAgIF9Q Q19SRUNfWEZFUl9BTElHTiwKCiAgICBfUENfQUxMT0NfU0laRV9NSU4sCgogICAgX1BDX1NZTUxJ TktfTUFYCgogIH07CgoKZW51bQogIHsKICAgIF9TQ19BUkdfTUFYLAoKICAgIF9TQ19DSElMRF9N QVgsCgogICAgX1NDX0NMS19UQ0ssCgogICAgX1NDX05HUk9VUFNfTUFYLAoKICAgIF9TQ19PUEVO X01BWCwKCiAgICBfU0NfU1RSRUFNX01BWCwKCiAgICBfU0NfVFpOQU1FX01BWCwKCiAgICBfU0Nf Sk9CX0NPTlRST0wsCgogICAgX1NDX1NBVkVEX0lEUywKCiAgICBfU0NfUkVBTFRJTUVfU0lHTkFM UywKCiAgICBfU0NfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVElNRVJTLAoKICAgIF9T Q19BU1lOQ0hST05PVVNfSU8sCgogICAgX1NDX1BSSU9SSVRJWkVEX0lPLAoKICAgIF9TQ19TWU5D SFJPTklaRURfSU8sCgogICAgX1NDX0ZTWU5DLAoKICAgIF9TQ19NQVBQRURfRklMRVMsCgogICAg X1NDX01FTUxPQ0ssCgogICAgX1NDX01FTUxPQ0tfUkFOR0UsCgogICAgX1NDX01FTU9SWV9QUk9U RUNUSU9OLAoKICAgIF9TQ19NRVNTQUdFX1BBU1NJTkcsCgogICAgX1NDX1NFTUFQSE9SRVMsCgog ICAgX1NDX1NIQVJFRF9NRU1PUllfT0JKRUNUUywKCiAgICBfU0NfQUlPX0xJU1RJT19NQVgsCgog ICAgX1NDX0FJT19NQVgsCgogICAgX1NDX0FJT19QUklPX0RFTFRBX01BWCwKCiAgICBfU0NfREVM QVlUSU1FUl9NQVgsCgogICAgX1NDX01RX09QRU5fTUFYLAoKICAgIF9TQ19NUV9QUklPX01BWCwK CiAgICBfU0NfVkVSU0lPTiwKCiAgICBfU0NfUEFHRVNJWkUsCgoKICAgIF9TQ19SVFNJR19NQVgs CgogICAgX1NDX1NFTV9OU0VNU19NQVgsCgogICAgX1NDX1NFTV9WQUxVRV9NQVgsCgogICAgX1ND X1NJR1FVRVVFX01BWCwKCiAgICBfU0NfVElNRVJfTUFYLAoKCgoKICAgIF9TQ19CQ19CQVNFX01B WCwKCiAgICBfU0NfQkNfRElNX01BWCwKCiAgICBfU0NfQkNfU0NBTEVfTUFYLAoKICAgIF9TQ19C Q19TVFJJTkdfTUFYLAoKICAgIF9TQ19DT0xMX1dFSUdIVFNfTUFYLAoKICAgIF9TQ19FUVVJVl9D TEFTU19NQVgsCgogICAgX1NDX0VYUFJfTkVTVF9NQVgsCgogICAgX1NDX0xJTkVfTUFYLAoKICAg IF9TQ19SRV9EVVBfTUFYLAoKICAgIF9TQ19DSEFSQ0xBU1NfTkFNRV9NQVgsCgoKICAgIF9TQ18y X1ZFUlNJT04sCgogICAgX1NDXzJfQ19CSU5ELAoKICAgIF9TQ18yX0NfREVWLAoKICAgIF9TQ18y X0ZPUlRfREVWLAoKICAgIF9TQ18yX0ZPUlRfUlVOLAoKICAgIF9TQ18yX1NXX0RFViwKCiAgICBf U0NfMl9MT0NBTEVERUYsCgoKICAgIF9TQ19QSUksCgogICAgX1NDX1BJSV9YVEksCgogICAgX1ND X1BJSV9TT0NLRVQsCgogICAgX1NDX1BJSV9JTlRFUk5FVCwKCiAgICBfU0NfUElJX09TSSwKCiAg ICBfU0NfUE9MTCwKCiAgICBfU0NfU0VMRUNULAoKICAgIF9TQ19VSU9fTUFYSU9WLAoKICAgIF9T Q19JT1ZfTUFYID0gX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRFUk5FVF9TVFJFQU0s CgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09TSV9DT1RTLAoKICAg IF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBfU0NfVF9JT1ZfTUFY LAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZVTkNUSU9OUywKCiAg ICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpFX01BWCwKCiAgICBf U0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAgICBfU0NfVEhSRUFE X0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNfTUFYLAoKICAgIF9T Q19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19NQVgsCgogICAgX1ND X1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tTSVpFLAoK ICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0NfVEhSRUFEX1BSSU9f SU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBfU0NfVEhSRUFEX1BS T0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAgICBfU0NfTlBST0NF U1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQSFlTX1BBR0VTLAoK ICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAgX1NDX1hPUEVOX1ZF UlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19YT1BFTl9VTklYLAoK ICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4sCgogICAgX1NDX1hP UEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0NfVkVSU0lPTiwKCiAg ICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19YT1BFTl9YUEczLAoK ICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAgX1NDX0NIQVJfTUFY LAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBfU0NfSU5UX01JTiwK CiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9TQ19NQl9MRU5fTUFY LAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9TQ19TQ0hBUl9NQVgs CgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAgX1NDX1NIUlRfTUlO LAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAgIF9TQ19VTE9OR19N QVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwKCiAgICBfU0NfTkxf TEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFYLAoKICAgIF9TQ19O TF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1X0lMUDMyX09GRjMy LAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9MUDY0X09GRjY0LAoK ICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xFR0FDWSwKCiAgICBf U0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RIUkVBRFMsCgoKICAg IF9TQ19BRFZJU09SWV9JTkZPLAoKICAgIF9TQ19CQVJSSUVSUywKCiAgICBfU0NfQkFTRSwKCiAg ICBfU0NfQ19MQU5HX1NVUFBPUlQsCgogICAgX1NDX0NfTEFOR19TVVBQT1JUX1IsCgogICAgX1ND X0NMT0NLX1NFTEVDVElPTiwKCiAgICBfU0NfQ1BVVElNRSwKCiAgICBfU0NfVEhSRUFEX0NQVVRJ TUUsCgogICAgX1NDX0RFVklDRV9JTywKCiAgICBfU0NfREVWSUNFX1NQRUNJRklDLAoKICAgIF9T Q19ERVZJQ0VfU1BFQ0lGSUNfUiwKCiAgICBfU0NfRkRfTUdNVCwKCiAgICBfU0NfRklGTywKCiAg ICBfU0NfUElQRSwKCiAgICBfU0NfRklMRV9BVFRSSUJVVEVTLAoKICAgIF9TQ19GSUxFX0xPQ0tJ TkcsCgogICAgX1NDX0ZJTEVfU1lTVEVNLAoKICAgIF9TQ19NT05PVE9OSUNfQ0xPQ0ssCgogICAg X1NDX01VTFRJX1BST0NFU1MsCgogICAgX1NDX1NJTkdMRV9QUk9DRVNTLAoKICAgIF9TQ19ORVRX T1JLSU5HLAoKICAgIF9TQ19SRUFERVJfV1JJVEVSX0xPQ0tTLAoKICAgIF9TQ19TUElOX0xPQ0tT LAoKICAgIF9TQ19SRUdFWFAsCgogICAgX1NDX1JFR0VYX1ZFUlNJT04sCgogICAgX1NDX1NIRUxM LAoKICAgIF9TQ19TSUdOQUxTLAoKICAgIF9TQ19TUEFXTiwKCiAgICBfU0NfU1BPUkFESUNfU0VS VkVSLAoKICAgIF9TQ19USFJFQURfU1BPUkFESUNfU0VSVkVSLAoKICAgIF9TQ19TWVNURU1fREFU QUJBU0UsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRV9SLAoKICAgIF9TQ19USU1FT1VUUywKCiAg ICBfU0NfVFlQRURfTUVNT1JZX09CSkVDVFMsCgogICAgX1NDX1VTRVJfR1JPVVBTLAoKICAgIF9T Q19VU0VSX0dST1VQU19SLAoKICAgIF9TQ18yX1BCUywKCiAgICBfU0NfMl9QQlNfQUNDT1VOVElO RywKCiAgICBfU0NfMl9QQlNfTE9DQVRFLAoKICAgIF9TQ18yX1BCU19NRVNTQUdFLAoKICAgIF9T Q18yX1BCU19UUkFDSywKCiAgICBfU0NfU1lNTE9PUF9NQVgsCgogICAgX1NDX1NUUkVBTVMsCgog ICAgX1NDXzJfUEJTX0NIRUNLUE9JTlQsCgoKICAgIF9TQ19WNl9JTFAzMl9PRkYzMiwKCiAgICBf U0NfVjZfSUxQMzJfT0ZGQklHLAoKICAgIF9TQ19WNl9MUDY0X09GRjY0LAoKICAgIF9TQ19WNl9M UEJJR19PRkZCSUcsCgoKICAgIF9TQ19IT1NUX05BTUVfTUFYLAoKICAgIF9TQ19UUkFDRSwKCiAg ICBfU0NfVFJBQ0VfRVZFTlRfRklMVEVSLAoKICAgIF9TQ19UUkFDRV9JTkhFUklULAoKICAgIF9T Q19UUkFDRV9MT0cKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgsCgoKCgogICAgX0NT X0xGU19DRkxBR1MgPSAxMDAwLAoKICAgIF9DU19MRlNfTERGTEFHUywKCiAgICBfQ1NfTEZTX0xJ QlMsCgogICAgX0NTX0xGU19MSU5URkxBR1MsCgogICAgX0NTX0xGUzY0X0NGTEFHUywKCiAgICBf Q1NfTEZTNjRfTERGTEFHUywKCiAgICBfQ1NfTEZTNjRfTElCUywKCiAgICBfQ1NfTEZTNjRfTElO VEZMQUdTLAoKCgoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0NGTEFHUyA9IDExMDAsCgogICAg X0NTX1hCUzVfSUxQMzJfT0ZGMzJfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9M SUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9J TFAzMl9PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MREZMQUdTLAoK ICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJ R19MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9DRkxBR1MsCgogICAgX0NTX1hC UzVfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElCUywKCiAg ICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZC SUdfQ0ZMQUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MREZMQUdTLAoKICAgIF9DU19Y QlM1X0xQQklHX09GRkJJR19MSUJTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19MSU5URkxB R1MsCgoKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGMzJfQ0ZMQUdTLAoKICAgIF9DU19QT1NJ WF9WNl9JTFAzMl9PRkYzMl9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9M SUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1BP U0lYX1Y2X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRkJJ R19MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1Nf UE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFA2NF9P RkY2NF9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBf Q1NfUE9TSVhfVjZfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0 X0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0NGTEFHUywKCiAgICBf Q1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0xQQklH X09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTElOVEZMQUdTLAoK CgogICAgX0NTX1Y2X1dJRFRIX1JFU1RSSUNURURfRU5WUwoKICB9OwoKCmV4dGVybiBsb25nIGlu dCBwYXRoY29uZiAoX19jb25zdCBjaGFyICpfX3BhdGgsIGludCBfX25hbWUpIDsKCgpleHRlcm4g bG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkgOwoKCmV4dGVybiBsb25n IGludCBzeXNjb25mIChpbnQgX19uYW1lKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CmV4dGVybiBzaXplX3QgY29uZnN0ciAoaW50IF9fbmFtZSwgY2hhciAqX19idWYsIHNpemVfdCBf X2xlbikgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fcGlk X3QgZ2V0cHBpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdycCAodm9pZCkgOwpl eHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCmV4dGVybiBfX3BpZF90 IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRwZ2lkIChfX3Bp ZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgOwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIDsK ZXh0ZXJuIF9fcGlkX3Qgc2V0c2lkICh2b2lkKSA7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAo X19waWRfdCBfX3BpZCkgOwoKCgpleHRlcm4gX191aWRfdCBnZXR1aWQgKHZvaWQpIDsKCgpleHRl cm4gX191aWRfdCBnZXRldWlkICh2b2lkKSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0Z2lkICh2b2lk KSA7CgoKZXh0ZXJuIF9fZ2lkX3QgZ2V0ZWdpZCAodm9pZCkgOwoKCgoKZXh0ZXJuIGludCBnZXRn cm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pIDsKCgoKZXh0ZXJuIGludCBncm91 cF9tZW1iZXIgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXR1aWQgKF9fdWlk X3QgX191aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3Vp ZF90IF9fZXVpZCkgOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlkKSA7CgoK CgoKCmV4dGVybiBpbnQgc2V0Z2lkIChfX2dpZF90IF9fZ2lkKSA7CgoKCgpleHRlcm4gaW50IHNl dHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpIDsKCgoKCmV4dGVybiBpbnQg c2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCBmb3JrICh2b2lk KSA7CgoKCgoKCmV4dGVybiBfX3BpZF90IHZmb3JrICh2b2lkKSA7CgoKCgoKZXh0ZXJuIGNoYXIg KnR0eW5hbWUgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdHR5bmFtZV9yIChpbnQgX19mZCwg Y2hhciAqX19idWYsIHNpemVfdCBfX2J1ZmxlbikgOwoKCgpleHRlcm4gaW50IGlzYXR0eSAoaW50 IF9fZmQpIDsKCgoKCgpleHRlcm4gaW50IHR0eXNsb3QgKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQg bGluayAoX19jb25zdCBjaGFyICpfX2Zyb20sIF9fY29uc3QgY2hhciAqX190bykgOwoKCgpleHRl cm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8p IDsKCgoKCmV4dGVybiBpbnQgcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3Bh dGgsIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X2xlbikgOwoKCgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKCgpl eHRlcm4gaW50IHJtZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRf dCB0Y2dldHBncnAgKGludCBfX2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2Zk LCBfX3BpZF90IF9fcGdycF9pZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsK CgoKCmV4dGVybiBpbnQgZ2V0bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xl bikgOwoKCgoKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIDsKIyAx ICIuLi9pbmNsdWRlL2dldG9wdC5oIiAxCgoKCiMgMSAiLi4vcG9zaXgvZ2V0b3B0LmgiIDEKIyA0 NyAiLi4vcG9zaXgvZ2V0b3B0LmgiCmV4dGVybiBjaGFyICpvcHRhcmc7CiMgNjEgIi4uL3Bvc2l4 L2dldG9wdC5oIgpleHRlcm4gaW50IG9wdGluZDsKCgoKCmV4dGVybiBpbnQgb3B0ZXJyOwoKCgpl eHRlcm4gaW50IG9wdG9wdDsKIyAxNDUgIi4uL3Bvc2l4L2dldG9wdC5oIgpleHRlcm4gaW50IGdl dG9wdCAoaW50IF9fX2FyZ2MsIGNoYXIgKmNvbnN0ICpfX19hcmd2LCBjb25zdCBjaGFyICpfX3No b3J0b3B0cyk7CiMgNSAiLi4vaW5jbHVkZS9nZXRvcHQuaCIgMgoKCgoKCgoKZXh0ZXJuIGludCBn ZXRob3N0bmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKCgoKCgoKZXh0ZXJuIGlu dCBzZXRob3N0bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpl eHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBpbnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0 ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRk b21haW5uYW1lIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgc2l6ZV90IF9fbGVuKSA7CgoKCgoKZXh0 ZXJuIGludCB2aGFuZ3VwICh2b2lkKSA7CgoKZXh0ZXJuIGludCByZXZva2UgKF9fY29uc3QgY2hh ciAqX19maWxlKSA7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50 ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBzaXpl X3QgX19vZmZzZXQsIHVuc2lnbmVkIGludCBfX3NjYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBhY2N0 IChfX2NvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2 b2lkKSA7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1 c2Vyc2hlbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gaW50IGRhZW1vbiAoaW50IF9fbm9jaGRpciwg aW50IF9fbm9jbG9zZSkgOwoKCgoKCgpleHRlcm4gaW50IGNocm9vdCAoX19jb25zdCBjaGFyICpf X3BhdGgpIDsKCgoKZXh0ZXJuIGNoYXIgKmdldHBhc3MgKF9fY29uc3QgY2hhciAqX19wcm9tcHQp IDsKCgoKCgpleHRlcm4gaW50IGZzeW5jIChpbnQgX19mZCkgOwoKCgoKCgpleHRlcm4gbG9uZyBp bnQgZ2V0aG9zdGlkICh2b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3luYyAodm9pZCkgOwoKCgoKZXh0 ZXJuIGludCBnZXRwYWdlc2l6ZSAodm9pZCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoK CgoKZXh0ZXJuIGludCB0cnVuY2F0ZSAoX19jb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19s ZW5ndGgpIDsKZXh0ZXJuIGludCB0cnVuY2F0ZTY0IChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX19v ZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9f b2ZmX3QgX19sZW5ndGgpIDsKZXh0ZXJuIGludCBmdHJ1bmNhdGU2NCAoaW50IF9fZmQsIF9fb2Zm NjRfdCBfX2xlbmd0aCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgOwpl eHRlcm4gaW50IGJyayAodm9pZCAqX19hZGRyKSA7CgoKCgoKZXh0ZXJuIHZvaWQgKnNicmsgKGlu dHB0cl90IF9fZGVsdGEpIDsKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lz bm8sIC4uLikgOwpleHRlcm4gaW50IGxvY2tmIChpbnQgX19mZCwgaW50IF9fY21kLCBfX29mZl90 IF9fbGVuKSA7CmV4dGVybiBpbnQgbG9ja2Y2NCAoaW50IF9fZmQsIGludCBfX2NtZCwgX19vZmY2 NF90IF9fbGVuKSA7CmV4dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoK CmV4dGVybiBjaGFyICpjcnlwdCAoX19jb25zdCBjaGFyICpfX2tleSwgX19jb25zdCBjaGFyICpf X3NhbHQpIDsKCgoKZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRm bGFnKSA7CgoKCgoKCmV4dGVybiB2b2lkIHN3YWIgKF9fY29uc3Qgdm9pZCAqX19yZXN0cmljdCBf X2Zyb20sIHZvaWQgKl9fcmVzdHJpY3QgX190bywKICAgICAgICAgICAgICAgICAgc3NpemVfdCBf X24pIDsKCgoKCgoKCmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKZXh0ZXJuIGlu dCBwdGhyZWFkX2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgdm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKZXh0ZXJuIGludCBfX2FjY2VzcyAo X19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4gaW50IF9fZXVpZGFjY2Vz cyAoX19jb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpOwpleHRlcm4gX19vZmY2NF90IF9f bHNlZWs2NCAoaW50IF9fZmQsIF9fb2ZmNjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKTsKZXh0 ZXJuIF9fb2ZmX3QgX19sc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3do ZW5jZSk7CmV4dGVybiBfX29mZl90IF9fbGliY19sc2VlayAoaW50IF9fZmQsIF9fb2ZmX3QgX19v ZmZzZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBfX29mZjY0X3QgX19saWJjX2xzZWVrNjQgKGlu dCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGludCBfX3doZW5jZSk7CmV4dGVybiBzc2l6ZV90 IF9fcHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLAogICAgICAg ICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19saWJj X3ByZWFkIChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19w cmVhZDY0IChpbnQgX19mZCwgdm9pZCAqX19idWYsIHNpemVfdCBfX25ieXRlcywKICAgICAgICAg ICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRlcm4gc3NpemVfdCBfX2xp YmNfcHJlYWQ2NCAoaW50IF9fZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZjY0X3QgX19vZmZzZXQpOwpleHRlcm4gc3Np emVfdCBfX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24s CiAgICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXpl X3QgX19saWJjX3B3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fb2ZmX3QgX19vZmZzZXQpOwpleHRl cm4gc3NpemVfdCBfX3B3cml0ZTY0IChpbnQgX19mZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2NF90IF9fb2Zmc2V0KTsK CmV4dGVybiBzc2l6ZV90IF9fbGliY19wd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAq X19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19vZmY2 NF90IF9fb2Zmc2V0KTsKZXh0ZXJuIHNzaXplX3QgX19saWJjX3JlYWQgKGludCBfX2ZkLCB2b2lk ICpfX2J1Ziwgc2l6ZV90IF9fbik7CgpleHRlcm4gc3NpemVfdCBfX2xpYmNfd3JpdGUgKGludCBf X2ZkLCBfX2NvbnN0IHZvaWQgKl9fYnVmLCBzaXplX3QgX19uKTsKCmV4dGVybiBpbnQgX19waXBl IChpbnQgX19waXBlZGVzWzJdKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgX19zbGVlcCAodW5zaWdu ZWQgaW50IF9fc2Vjb25kcyk7CmV4dGVybiBpbnQgX19jaG93biAoX19jb25zdCBjaGFyICpfX2Zp bGUsCiAgICAgICAgICAgICAgICAgICAgX191aWRfdCBfX293bmVyLCBfX2dpZF90IF9fZ3JvdXAp OwoKZXh0ZXJuIGludCBfX2ZjaG93biAoaW50IF9fZmQsCiAgICAgICAgICAgICAgICAgICAgIF9f dWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2xjaG93biAoX19j b25zdCBjaGFyICpfX2ZpbGUsIF9fdWlkX3QgX19vd25lciwKICAgICAgICAgICAgICAgICAgICAg X19naWRfdCBfX2dyb3VwKTsKZXh0ZXJuIGludCBfX2NoZGlyIChfX2NvbnN0IGNoYXIgKl9fcGF0 aCk7CmV4dGVybiBpbnQgX19mY2hkaXIgKGludCBfX2ZkKTsKZXh0ZXJuIGNoYXIgKl9fZ2V0Y3dk IChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSk7CmV4dGVybiBpbnQgX19ybWRpciAoY29uc3Qg Y2hhciAqX19wYXRoKTsKCgoKCgoKCmNoYXIgKl9fY2Fub25pY2FsaXplX2RpcmVjdG9yeV9uYW1l X2ludGVybmFsIChfX2NvbnN0IGNoYXIgKl9fdGhpc2RpciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgOwoKZXh0ZXJuIGludCBf X2R1cCAoaW50IF9fZmQpOwpleHRlcm4gaW50IF9fZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMik7 CgpleHRlcm4gaW50IF9fZXhlY3ZlIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqX19jb25z dCBfX2FyZ3ZbXSwKICAgICAgICAgICAgICAgICAgICAgY2hhciAqX19jb25zdCBfX2VudnBbXSk7 CmV4dGVybiBsb25nIGludCBfX3BhdGhjb25mIChfX2NvbnN0IGNoYXIgKl9fcGF0aCwgaW50IF9f bmFtZSk7CmV4dGVybiBsb25nIGludCBfX2ZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUp OwpleHRlcm4gbG9uZyBpbnQgX19zeXNjb25mIChpbnQgX19uYW1lKTsKCmV4dGVybiBfX3BpZF90 IF9fZ2V0cGlkICh2b2lkKTsKCmV4dGVybiBfX3BpZF90IF9fZ2V0cHBpZCAodm9pZCk7CmV4dGVy biBfX3BpZF90IF9fc2V0c2lkICh2b2lkKTsKZXh0ZXJuIF9fdWlkX3QgX19nZXR1aWQgKHZvaWQp OwpleHRlcm4gX191aWRfdCBfX2dldGV1aWQgKHZvaWQpOwpleHRlcm4gX19naWRfdCBfX2dldGdp ZCAodm9pZCk7CmV4dGVybiBfX2dpZF90IF9fZ2V0ZWdpZCAodm9pZCk7CmV4dGVybiBpbnQgX19n ZXRncm91cHMgKGludCBfX3NpemUsIF9fZ2lkX3QgX19saXN0W10pOwoKZXh0ZXJuIGludCBfX2dy b3VwX21lbWJlciAoX19naWRfdCBfX2dpZCk7CmV4dGVybiBpbnQgX19zZXR1aWQgKF9fdWlkX3Qg X191aWQpOwpleHRlcm4gaW50IF9fc2V0cmV1aWQgKF9fdWlkX3QgX19ydWlkLCBfX3VpZF90IF9f ZXVpZCk7CmV4dGVybiBpbnQgX19zZXRnaWQgKF9fZ2lkX3QgX19naWQpOwpleHRlcm4gaW50IF9f c2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpOwoKZXh0ZXJuIGludCBfX3Nl dHJlZ2lkIChfX2dpZF90IF9fcmdpZCwgX19naWRfdCBfX2VnaWQpOwpleHRlcm4gX19waWRfdCBf X3Zmb3JrICh2b2lkKTsKZXh0ZXJuIGludCBfX3R0eW5hbWVfciAoaW50IF9fZmQsIGNoYXIgKl9f YnVmLCBzaXplX3QgX19idWZsZW4pOwpleHRlcm4gaW50IF9faXNhdHR5IChpbnQgX19mZCk7CmV4 dGVybiBpbnQgX19saW5rIChfX2NvbnN0IGNoYXIgKl9fZnJvbSwgX19jb25zdCBjaGFyICpfX3Rv KTsKZXh0ZXJuIGludCBfX3N5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNo YXIgKl9fdG8pOwpleHRlcm4gaW50IF9fcmVhZGxpbmsgKF9fY29uc3QgY2hhciAqX19wYXRoLCBj aGFyICpfX2J1Ziwgc2l6ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBfX3VubGluayAoX19jb25zdCBj aGFyICpfX25hbWUpOwpleHRlcm4gaW50IF9fZ2V0aG9zdG5hbWUgKGNoYXIgKl9fbmFtZSwgc2l6 ZV90IF9fbGVuKTsKZXh0ZXJuIGludCBfX3Byb2ZpbCAodW5zaWduZWQgc2hvcnQgaW50ICpfX3Nh bXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X29mZnNldCwgdW5zaWduZWQgaW50IF9fc2NhbGUpOwpleHRlcm4gaW50IF9fZ2V0ZHRhYmxlc2l6 ZSAodm9pZCk7CmV4dGVybiBpbnQgX19icmsgKHZvaWQgKl9fYWRkcik7CmV4dGVybiBpbnQgX19j bG9zZSAoaW50IF9fZmQpOwoKZXh0ZXJuIHNzaXplX3QgX19yZWFkIChpbnQgX19mZCwgdm9pZCAq X19idWYsIHNpemVfdCBfX25ieXRlcyk7CgpleHRlcm4gc3NpemVfdCBfX3dyaXRlIChpbnQgX19m ZCwgX19jb25zdCB2b2lkICpfX2J1Ziwgc2l6ZV90IF9fbik7CgpleHRlcm4gX19waWRfdCBfX2Zv cmsgKHZvaWQpOwpleHRlcm4gaW50IF9fZ2V0cGFnZXNpemUgKHZvaWQpIF9fYXR0cmlidXRlX18g KChfX2NvbnN0X18pKTsKCmV4dGVybiBpbnQgX19mdHJ1bmNhdGUgKGludCBfX2ZkLCBfX29mZl90 IF9fbGVuZ3RoKTsKZXh0ZXJuIGludCBfX2Z0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90 IF9fbGVuZ3RoKTsKZXh0ZXJuIHZvaWQgKl9fc2JyayAoaW50cHRyX3QgX19kZWx0YSk7CgoKCgoK CgoKZXh0ZXJuIGludCBfX2xpYmNfZW5hYmxlX3NlY3VyZTsKCgoKCgoKCmV4dGVybiB2b2lkIF9f bGliY19jaGVja19zdGFuZGFyZF9mZHMgKHZvaWQpOwoKCgpleHRlcm4gdm9pZCBfX2V4aXRfdGhy ZWFkIChpbnQgdmFsKSBfX2F0dHJpYnV0ZV9fICgobm9yZXR1cm4pKTsKCgpleHRlcm4gX19waWRf dCBfX2xpYmNfZm9yayAodm9pZCk7CgoKCmV4dGVybiBpbnQgX19saWJjX3BhdXNlICh2b2lkKTsK Cgphc20gKCIuTF9fWCclZWJ4ID0gMVxuXHQiCiAgICAgIi5MX19YJyVlY3ggPSAyXG5cdCIKICAg ICAiLkxfX1gnJWVkeCA9IDJcblx0IgogICAgICIuTF9fWCclZWF4ID0gM1xuXHQiCiAgICAgIi5M X19YJyVlc2kgPSAzXG5cdCIKICAgICAiLkxfX1gnJWVkaSA9IDNcblx0IgogICAgICIuTF9fWCcl ZWJwID0gM1xuXHQiCiAgICAgIi5MX19YJyVlc3AgPSAzXG5cdCIKICAgICAiLm1hY3JvIGJwdXNo bCBuYW1lIHJlZ1xuXHQiCiAgICAgIi5pZiAxIC0gXFxuYW1lXG5cdCIKICAgICAiLmlmIDIgLSBc XG5hbWVcblx0IgogICAgICJwdXNobCAlZWJ4XG5cdCIKICAgICAiLmVsc2Vcblx0IgogICAgICJ4 Y2hnbCBcXHJlZywgJWVieFxuXHQiCiAgICAgIi5lbmRpZlxuXHQiCiAgICAgIi5lbmRpZlxuXHQi CiAgICAgIi5lbmRtXG5cdCIKICAgICAiLm1hY3JvIGJwb3BsIG5hbWUgcmVnXG5cdCIKICAgICAi LmlmIDEgLSBcXG5hbWVcblx0IgogICAgICIuaWYgMiAtIFxcbmFtZVxuXHQiCiAgICAgInBvcGwg JWVieFxuXHQiCiAgICAgIi5lbHNlXG5cdCIKICAgICAieGNoZ2wgXFxyZWcsICVlYnhcblx0Igog ICAgICIuZW5kaWZcblx0IgogICAgICIuZW5kaWZcblx0IgogICAgICIuZW5kbVxuXHQiCiAgICAg Ii5tYWNybyBibW92bCBuYW1lIHJlZ1xuXHQiCiAgICAgIi5pZiAxIC0gXFxuYW1lXG5cdCIKICAg ICAiLmlmIDIgLSBcXG5hbWVcblx0IgogICAgICJtb3ZsIFxccmVnLCAlZWJ4XG5cdCIKICAgICAi LmVuZGlmXG5cdCIKICAgICAiLmVuZGlmXG5cdCIKICAgICAiLmVuZG1cblx0Iik7CgoKdHlwZWRl ZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZmRzX2JpdHMgWygxMDI0Lyg4ICogc2l6 ZW9mKHVuc2lnbmVkIGxvbmcpKSldOwp9IF9fa2VybmVsX2ZkX3NldDsKCgp0eXBlZGVmIHZvaWQg KCpfX2tlcm5lbF9zaWdoYW5kbGVyX3QpKGludCk7CgoKdHlwZWRlZiBpbnQgX19rZXJuZWxfa2V5 X3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2Rldl90Owp0eXBlZGVmIHVuc2ln bmVkIGxvbmcgX19rZXJuZWxfaW5vX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxf bW9kZV90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX25saW5rX3Q7CnR5cGVkZWYg bG9uZyBfX2tlcm5lbF9vZmZfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfcGlkX3Q7CnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgX19rZXJuZWxfaXBjX3BpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IF9fa2VybmVsX3VpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZF90Owp0 eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9zaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVs X3NzaXplX3Q7CnR5cGVkZWYgaW50IF9fa2VybmVsX3B0cmRpZmZfdDsKdHlwZWRlZiBsb25nIF9f a2VybmVsX3RpbWVfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX3N1c2Vjb25kc190Owp0eXBlZGVm IGxvbmcgX19rZXJuZWxfY2xvY2tfdDsKdHlwZWRlZiBpbnQgX19rZXJuZWxfZGFkZHJfdDsKdHlw ZWRlZiBjaGFyICogX19rZXJuZWxfY2FkZHJfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tl cm5lbF91aWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2dpZDE2X3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fa2VybmVsX3VpZDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50 IF9fa2VybmVsX2dpZDMyX3Q7Cgp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX29sZF91 aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF9vbGRfZ2lkX3Q7CgoKdHlwZWRl ZiBsb25nIGxvbmcgX19rZXJuZWxfbG9mZl90OwoKCnR5cGVkZWYgc3RydWN0IHsKCgoKICAgICAg ICBpbnQgX192YWxbMl07Cgp9IF9fa2VybmVsX2ZzaWRfdDsKCmV4dGVybiBpbnQgX19zeXNjYWxs X2dldGRlbnRzIChpbnQgZmQsIGNoYXIgKiBidWYsIHVuc2lnbmVkIGludCBuYnl0ZXMpOwpleHRl cm4gaW50IF9fc3lzY2FsbF9nZXRkZW50czY0IChpbnQgZmQsIGNoYXIgKiBidWYsIHVuc2lnbmVk IGludCBuYnl0ZXMpOwoKc3RydWN0IGtlcm5lbF9kaXJlbnQKICB7CiAgICBsb25nIGludCBkX2lu bzsKICAgIF9fa2VybmVsX29mZl90IGRfb2ZmOwogICAgdW5zaWduZWQgc2hvcnQgaW50IGRfcmVj bGVuOwogICAgY2hhciBkX25hbWVbMjU2XTsKICB9OwoKc3RydWN0IGtlcm5lbF9kaXJlbnQ2NAog IHsKICAgIHVpbnQ2NF90IGRfaW5vOwogICAgaW50NjRfdCBkX29mZjsKICAgIHVuc2lnbmVkIHNo b3J0IGludCBkX3JlY2xlbjsKICAgIHVuc2lnbmVkIGNoYXIgZF90eXBlOwogICAgY2hhciBkX25h bWVbMjU2XTsKICB9OwojIDk2ICIuLi9zeXNkZXBzL3VuaXgvc3lzdi9saW51eC9nZXRkZW50cy5j IgoKCnNzaXplX3QKX19hdHRyaWJ1dGVfXyAoKHJlZ3Bhcm0gKDMpLCBzdGRjYWxsKSkKX19nZXRk ZW50cyAoaW50IGZkLCBjaGFyICpidWYsIHNpemVfdCBuYnl0ZXMpCnsKICBzdHJ1Y3QgZGlyZW50 ICpkcDsKICBvZmY2NF90IGxhc3Rfb2Zmc2V0ID0gLTE7CiAgc3NpemVfdCByZXR2YWw7CgogIHsK ICAgIGNoYXIgKmtidWYgPSBidWY7CiAgICBzaXplX3Qga2J5dGVzID0gbmJ5dGVzOwogICAgaWYg KCgoc2l6ZV90KSAmKChzdHJ1Y3QgZGlyZW50ICopMCktPmRfbmFtZSkKICAgICAgICA8ICgoc2l6 ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudDY0ICopMCktPmRfbmFtZSkKICAgICAgICAmJiBu Ynl0ZXMgPD0gc2l6ZW9mIChzdHJ1Y3QgZGlyZW50KSkKICAgIHsKICAgICAga2J5dGVzID0gbmJ5 dGVzICsgKChzaXplX3QpICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKQog ICAgICAgICAgICAgICAgLSAoKHNpemVfdCkgJigoc3RydWN0IGRpcmVudCAqKTApLT5kX25hbWUp OwogICAgICBrYnVmID0gX19idWlsdGluX2FsbG9jYSAoa2J5dGVzKTsKICAgIH0KICAgIHJldHZh bCA9ICh7IHVuc2lnbmVkIGludCByZXN1bHR2YXI7IGFzbSB2b2xhdGlsZSAoICJicHVzaGwgLkxf X1gnJWsyLCAlazJcblx0IiAiYm1vdmwgLkxfX1gnJWsyLCAlazJcblx0IiAibW92bCAlMSwgJSVl YXhcblx0IiAiaW50ICQweDgwXG5cdCIgImJwb3BsIC5MX19YJyVrMiwgJWsyXG5cdCIgOiAiPWEi IChyZXN1bHR2YXIpIDogImkiICgyMjApICwgImFDRCIgKGZkKSwgImMiICgoa2J1ZikpLCAiZCIg KGtieXRlcykgOiAibWVtb3J5IiwgImNjIik7IGlmIChyZXN1bHR2YXIgPj0gMHhmZmZmZjAwMSkg eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gKC1yZXN1bHR2YXIpOyByZXN1bHR2YXIgPSAweGZm ZmZmZmZmOyB9IChpbnQpIHJlc3VsdHZhcjsgfSk7CgogICAgewogICAgICBzdHJ1Y3Qga2VybmVs X2RpcmVudDY0ICprZHA7CiAgICAgIGNvbnN0IHNpemVfdCBzaXplX2RpZmYgPSAoKChzaXplX3Qp ICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKQogICAgICAgICAgICAgICAt ICgoc2l6ZV90KSAmKChzdHJ1Y3QgZGlyZW50ICopMCktPmRfbmFtZSkpOwoKICAgICAgaWYgKHJl dHZhbCA9PSAtMSkgcmV0dXJuIC0xOwoKICAgICAgaWYgKCgoc2l6ZV90KSAmKChzdHJ1Y3QgZGly ZW50ICopMCktPmRfbmFtZSkKICAgICAgICAgICAgID09ICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2Vy bmVsX2RpcmVudDY0ICopMCktPmRfbmFtZSkKICAgICAgICAgICAgICYmIHNpemVvZiAoZHAtPmRf aW5vKSA9PSBzaXplb2YgKGtkcC0+ZF9pbm8pCiAgICAgICAgICAgICAmJiBzaXplb2YgKGRwLT5k X29mZikgPT0gc2l6ZW9mIChrZHAtPmRfb2ZmKSkKICAgICAgICByZXR1cm4gcmV0dmFsOwoKICAg ICAgZHAgPSAoc3RydWN0IGRpcmVudCAqKWJ1ZjsKICAgICAga2RwID0gKHN0cnVjdCBrZXJuZWxf ZGlyZW50NjQgKikga2J1ZjsKICAgICAgd2hpbGUgKChjaGFyICopIGtkcCA8IGtidWYgKyByZXR2 YWwpCiAgICAgIHsKICAgICAgICBjb25zdCBzaXplX3QgYWxpZ25tZW50ID0gX19hbGlnbm9mX18g KHN0cnVjdCBkaXJlbnQpOwoKICAgICAgICBzaXplX3Qgb2xkX3JlY2xlbiA9IGtkcC0+ZF9yZWNs ZW47CiAgICAgICAgc2l6ZV90IG5ld19yZWNsZW4gPSAoKG9sZF9yZWNsZW4gLSBzaXplX2RpZmYg KyBhbGlnbm1lbnQgLSAxKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAmIH4oYWxpZ25tZW50IC0gMSkpOwogICAgICAgIHVpbnQ2NF90IGRfaW5vID0ga2Rw LT5kX2lubzsKICAgICAgICBpbnQ2NF90IGRfb2ZmID0ga2RwLT5kX29mZjsKICAgICAgICB1bnNp Z25lZCBjaGFyIGRfdHlwZSA9IGtkcC0+ZF90eXBlOwoKICAgICAgICAoZHApLT5kX2lubyA9IChk X2lubyk7CiAgICAgICAgZHAtPmRfb2ZmID0gZF9vZmY7CiAgICAgICAgaWYgKChzaXplb2YgKGRw LT5kX2lubykgIT0gc2l6ZW9mIChrZHAtPmRfaW5vKQogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICYmIGRwLT5kX2lubyAhPSBkX2lubykKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB8fCAoc2l6ZW9mIChkcC0+ZF9vZmYpICE9IHNpemVvZiAoa2RwLT5kX29mZikKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBkcC0+ZF9vZmYgIT0gZF9vZmYpKQogICAgICAg IHsKICAgICAgICAgIGlmIChsYXN0X29mZnNldCAhPSAtMSkKICAgICAgICAgIHsKICAgICAgICAg ICAgX19sc2VlazY0IChmZCwgbGFzdF9vZmZzZXQsIDApOwogICAgICAgICAgICByZXR1cm4gKGNo YXIgKikgZHAgLSBidWY7CiAgICAgICAgICB9CiAgICAgICAgICAoKl9fZXJybm9fbG9jYXRpb24g KCkpID0gKDc1KTsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CgogICAgICAgIGxhc3Rf b2Zmc2V0ID0gZF9vZmY7CiAgICAgICAgZHAtPmRfcmVjbGVuID0gbmV3X3JlY2xlbjsKICAgICAg ICBkcC0+ZF90eXBlID0gZF90eXBlOwogICAgICAgIG1lbW1vdmUgKGRwLT5kX25hbWUsIGtkcC0+ ZF9uYW1lLAogICAgICAgICAgICBvbGRfcmVjbGVuIC0gKChzaXplX3QpICYoKHN0cnVjdCBrZXJu ZWxfZGlyZW50NjQgKikwKS0+ZF9uYW1lKSk7CgogICAgICAgIGRwID0gKHN0cnVjdCBkaXJlbnQg KikgKChjaGFyICopIGRwICsgbmV3X3JlY2xlbik7CiAgICAgICAga2RwID0gKHN0cnVjdCBrZXJu ZWxfZGlyZW50NjQgKikgKChjaGFyICopIGtkcCArIG9sZF9yZWNsZW4pOwogICAgICB9CgogICAg ICByZXR1cm4gKGNoYXIgKikgZHAgLSBidWY7CiAgICB9CiAgfQoKICB7CiAgICBzaXplX3QgcmVk X25ieXRlczsKICAgIHN0cnVjdCBrZXJuZWxfZGlyZW50ICpza2RwLCAqa2RwOwogICAgY29uc3Qg c2l6ZV90IHNpemVfZGlmZiA9ICgoKHNpemVfdCkgJigoc3RydWN0IGRpcmVudCAqKTApLT5kX25h bWUpCiAgICAgICAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25h bWUpKTsKCiAgICByZWRfbmJ5dGVzID0gKCgobmJ5dGVzIC0gKChuYnl0ZXMgLyAoKChzaXplX3Qp ICYoKHN0cnVjdCBkaXJlbnQgKikwKS0+ZF9uYW1lKSArIDE0KSkgKiBzaXplX2RpZmYpKTwobmJ5 dGVzIC0gc2l6ZV9kaWZmKSk/KG5ieXRlcyAtICgobmJ5dGVzIC8gKCgoc2l6ZV90KSAmKChzdHJ1 Y3QgZGlyZW50ICopMCktPmRfbmFtZSkgKyAxNCkpICogc2l6ZV9kaWZmKSk6KG5ieXRlcyAtIHNp emVfZGlmZikpOwoKICAgIGRwID0gKHN0cnVjdCBkaXJlbnQgKikgYnVmOwogICAgc2tkcCA9IGtk cCA9IF9fYnVpbHRpbl9hbGxvY2EgKHJlZF9uYnl0ZXMpOwoKICAgIHJldHZhbCA9ICh7IHVuc2ln bmVkIGludCByZXN1bHR2YXI7IGFzbSB2b2xhdGlsZSAoICJicHVzaGwgLkxfX1gnJWsyLCAlazJc blx0IiAiYm1vdmwgLkxfX1gnJWsyLCAlazJcblx0IiAibW92bCAlMSwgJSVlYXhcblx0IiAiaW50 ICQweDgwXG5cdCIgImJwb3BsIC5MX19YJyVrMiwgJWsyXG5cdCIgOiAiPWEiIChyZXN1bHR2YXIp IDogImkiICgxNDEpICwgImFDRCIgKGZkKSwgImMiICgoKGNoYXIgKikga2RwKSksICJkIiAocmVk X25ieXRlcykgOiAibWVtb3J5IiwgImNjIik7IGlmIChyZXN1bHR2YXIgPj0gMHhmZmZmZjAwMSkg eyAoKl9fZXJybm9fbG9jYXRpb24gKCkpID0gKC1yZXN1bHR2YXIpOyByZXN1bHR2YXIgPSAweGZm ZmZmZmZmOyB9IChpbnQpIHJlc3VsdHZhcjsgfSk7CiAgICBpZiAocmV0dmFsID09IC0xKSByZXR1 cm4gLTE7CgogICAgd2hpbGUgKChjaGFyICopIGtkcCA8IChjaGFyICopIHNrZHAgKyByZXR2YWwp CiAgICB7CiAgICAgIGNvbnN0IHNpemVfdCBhbGlnbm1lbnQgPSBfX2FsaWdub2ZfXyAoc3RydWN0 IGRpcmVudCk7CgogICAgICBzaXplX3QgbmV3X3JlY2xlbiA9ICgoa2RwLT5kX3JlY2xlbiArIHNp emVfZGlmZiArIGFsaWdubWVudCAtIDEpCiAgICAgICAgICAgICAgICAgICAgICAgICAgJiB+KGFs aWdubWVudCAtIDEpKTsKICAgICAgaWYgKChjaGFyICopIGRwICsgbmV3X3JlY2xlbiA+IGJ1ZiAr IG5ieXRlcykKICAgICAgewogICAgICAgICgodm9pZCkgKChsYXN0X29mZnNldCAhPSAtMSkgPyAw IDogKF9fYXNzZXJ0X2ZhaWwgKCJsYXN0X29mZnNldCAhPSAtMSIsICIuLi9zeXNkZXBzL3VuaXgv c3lzdi9saW51eC9nZXRkZW50cy5jIiwgMjI3LCBfX1BSRVRUWV9GVU5DVElPTl9fKSwgMCkpKTsK ICAgICAgICBfX2xzZWVrNjQgKGZkLCBsYXN0X29mZnNldCwgMCk7CgogICAgICAgIGlmICgoY2hh ciAqKSBkcCA9PSBidWYpCiAgICAgICAgewogICAgICAgICAgKCpfX2Vycm5vX2xvY2F0aW9uICgp KSA9ICgyMik7CiAgICAgICAgICByZXR1cm4gLTE7CiAgICAgICAgfQoKICAgICAgICBicmVhazsK ICAgICAgfQoKICAgICAgbGFzdF9vZmZzZXQgPSBrZHAtPmRfb2ZmOwogICAgICAoZHApLT5kX2lu byA9IChrZHAtPmRfaW5vKTsKICAgICAgZHAtPmRfb2ZmID0ga2RwLT5kX29mZjsKICAgICAgZHAt PmRfcmVjbGVuID0gbmV3X3JlY2xlbjsKICAgICAgZHAtPmRfdHlwZSA9IERUX1VOS05PV047CiAg ICAgIChfX2V4dGVuc2lvbl9fIChfX2J1aWx0aW5fY29uc3RhbnRfcCAoa2RwLT5kX3JlY2xlbiAt ICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSA/ICgoa2Rw LT5kX3JlY2xlbiAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25h bWUpKSA9PSAwID8gKGRwLT5kX25hbWUpIDogKCgoa2RwLT5kX3JlY2xlbiAtICgoc2l6ZV90KSAm KChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSAlIDQgPT0gMCkgPyBfX21lbWNw eV9ieTQgKGRwLT5kX25hbWUsIGtkcC0+ZF9uYW1lLCBrZHAtPmRfcmVjbGVuIC0gKChzaXplX3Qp ICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50ICopMCktPmRfbmFtZSkpIDogKCgoa2RwLT5kX3JlY2xl biAtICgoc2l6ZV90KSAmKChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSAlIDIg PT0gMCkgPyBfX21lbWNweV9ieTIgKGRwLT5kX25hbWUsIGtkcC0+ZF9uYW1lLCBrZHAtPmRfcmVj bGVuIC0gKChzaXplX3QpICYoKHN0cnVjdCBrZXJuZWxfZGlyZW50ICopMCktPmRfbmFtZSkpIDog X19tZW1jcHlfZyAoZHAtPmRfbmFtZSwga2RwLT5kX25hbWUsIGtkcC0+ZF9yZWNsZW4gLSAoKHNp emVfdCkgJigoc3RydWN0IGtlcm5lbF9kaXJlbnQgKikwKS0+ZF9uYW1lKSkpKSkgOiBfX21lbWNw eV9nIChkcC0+ZF9uYW1lLCBrZHAtPmRfbmFtZSwga2RwLT5kX3JlY2xlbiAtICgoc2l6ZV90KSAm KChzdHJ1Y3Qga2VybmVsX2RpcmVudCAqKTApLT5kX25hbWUpKSkpOwoKICAgICAgZHAgPSAoc3Ry dWN0IGRpcmVudCAqKSAoKGNoYXIgKikgZHAgKyBuZXdfcmVjbGVuKTsKICAgICAga2RwID0gKHN0 cnVjdCBrZXJuZWxfZGlyZW50ICopICgoKGNoYXIgKikga2RwKSArIGtkcC0+ZF9yZWNsZW4pOwog ICAgfQogIH0KCiAgcmV0dXJuIChjaGFyICopIGRwIC0gYnVmOwp9Cg==