From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 1405 invoked by alias); 26 Mar 2002 09:26:04 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 1367 invoked by uid 71); 26 Mar 2002 09:26:02 -0000 Resent-Date: 26 Mar 2002 09:26:02 -0000 Resent-Message-ID: <20020326092602.1366.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-To: nobody@gcc.gnu.org Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, djohnson@osc.edu Received:(qmail 24503 invoked by uid 61); 26 Mar 2002 09:17:08 -0000 Message-Id:<20020326091708.24502.qmail@sources.redhat.com> Date: Tue, 26 Mar 2002 01:26:00 -0000 From: djohnson@osc.edu Reply-To: djohnson@osc.edu To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version:gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/6056: ICE on legal code with when optimizations higher that -O (ia64 only) X-SW-Source: 2002-03/txt/msg00964.txt.bz2 List-Id: >Number: 6056 >Category: c++ >Synopsis: ICE on legal code with when optimizations higher that -O (ia64 only) >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Tue Mar 26 01:26:00 PST 2002 >Closed-Date: >Last-Modified: >Originator: The Ohio Supercomputer Center >Release: gcc version 3.1 20020318 (prerelease) >Organization: >Environment: System: Linux ia64 2.4.17 #8 SMP Thu Feb 7 09:52:30 EST 2002 ia64 unknown Architecture: ia64 host: ia64-unknown-linux-gnu build: ia64-unknown-linux-gnu target: ia64-unknown-linux-gnu configured with: ../configure --prefix=/opt/gcc-pre3.1 --disable-java --enable-threads=posix --enable-parallel-mark >Description: When compiling the attached routine with any level of optimization above -O, an internal compiler error will be triggered. The preprocessed code is attached. This does not happen on ia32 but does on ia64. [ia64]% g++ -O2 -c bug.cpp gnubug.cpp: In static member function `static ULong_t TMath::Hash(const void*, int)': gnubug.cpp:95: Internal compiler error in verify_local_live_at_start, at flow.c :590 >How-To-Repeat: Only on ia64. >Fix: Lower the optimization level. >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="bug.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="bug.cpp" IyAxICJnbnVidWcuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiZ251YnVnLmNwcCIKIyAxICJpbmNsdWRlL1RNYXRoLmgiIDEKIyAyNSAiaW5jbHVkZS9UTWF0 aC5oIgojIDEgImluY2x1ZGUvUnR5cGVzLmgiIDEKIyAyNSAiaW5jbHVkZS9SdHlwZXMuaCIKIyAx ICJpbmNsdWRlL1JDb25maWcuaCIgMQojIDIzICJpbmNsdWRlL1JDb25maWcuaCIKIyAxICJpbmNs dWRlL1JWZXJzaW9uLmgiIDEKIyAyNCAiaW5jbHVkZS9SQ29uZmlnLmgiIDIKIyAxMTMgImluY2x1 ZGUvUkNvbmZpZy5oIgojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyODMgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAx IDMKIyAyODQgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMTIgIi91c3IvaW5jbHVk ZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMTMg Ii91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAxMTQgImluY2x1ZGUvUkNvbmZpZy5oIiAy CiMgMjYgImluY2x1ZGUvUnR5cGVzLmgiIDIKCgojIDEgIi9vcHQvZ2NjLXByZTMuMS9saWIvZ2Nj LWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMSAzCiMgMzkgIi9v cHQvZ2NjLXByZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUv c3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1s aWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDEgIi9v cHQvZ2NjLXByZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUv c3RkZGVmLmgiIDMKdHlwZWRlZiBsb25nIHVuc2lnbmVkIGludCBzaXplX3Q7CiMgNDQgIi9vcHQv Z2NjLXByZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3Rk aW8uaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDEgMwojIDI5ICIvdXNy L2luY2x1ZGUvYml0cy90eXBlcy5oIiAzCiMgMSAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2MtbGli L2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzAgIi91c3Iv aW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwoKCnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3VfY2hh cjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVk IGludCBfX3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdV9sb25nOwp0eXBlZGVm IHVuc2lnbmVkIGxvbmcgaW50IF9fdV9xdWFkX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19xdWFkX3Q7 CnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBfX3Vp bnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2ludDE2X3Q7CnR5cGVkZWYgdW5zaWdu ZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2lnbmVkIGludCBfX2ludDMyX3Q7CnR5 cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CnR5cGVkZWYgc2lnbmVkIGxvbmcgaW50IF9f aW50NjRfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGludCBfX3VpbnQ2NF90Owp0eXBlZGVmIF9f cXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdWludDY0X3QgX19kZXZfdDsKdHlwZWRlZiBf X3VpbnQzMl90IF9fdWlkX3Q7CnR5cGVkZWYgX191aW50MzJfdCBfX2dpZF90Owp0eXBlZGVmIF9f dWludDY0X3QgX19pbm9fdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9faW5vNjRfdDsKdHlwZWRlZiBf X3VpbnQzMl90IF9fbW9kZV90Owp0eXBlZGVmIF9fdWludDY0X3QgX19ubGlua190Owp0eXBlZGVm IF9faW50NjRfdCBfX29mZl90Owp0eXBlZGVmIF9faW50NjRfdCBfX29mZjY0X3Q7CnR5cGVkZWYg X19pbnQ2NF90IF9fbG9mZl90Owp0eXBlZGVmIF9faW50MzJfdCBfX3BpZF90Owp0eXBlZGVmIF9f aW50NjRfdCBfX3NzaXplX3Q7CnR5cGVkZWYgX191aW50NjRfdCBfX3JsaW1fdDsKdHlwZWRlZiBf X3VpbnQ2NF90IF9fcmxpbTY0X3Q7CnR5cGVkZWYgX19pbnQ2NF90IF9fYmxrY250X3Q7CnR5cGVk ZWYgX19pbnQ2NF90IF9fYmxrY250NjRfdDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNibGtjbnRf dDsKdHlwZWRlZiBfX3VpbnQ2NF90IF9fZnNibGtjbnQ2NF90Owp0eXBlZGVmIF9fdWludDY0X3Qg X19mc2ZpbGNudF90Owp0eXBlZGVmIF9fdWludDY0X3QgX19mc2ZpbGNudDY0X3Q7CnR5cGVkZWYg X191aW50MzJfdCBfX2lkX3Q7Cgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIGludCBfX3ZhbFsyXTsK ICB9IF9fZnNpZF90OwoKCnR5cGVkZWYgaW50IF9fZGFkZHJfdDsKdHlwZWRlZiBjaGFyICpfX2Nh ZGRyX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX190aW1lX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9f dXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N1c2Vjb25kc190Owp0eXBlZGVmIGxvbmcg aW50IF9fc3dibGtfdDsKdHlwZWRlZiBsb25nIGludCBfX2Nsb2NrX3Q7CnR5cGVkZWYgaW50IF9f a2V5X3Q7CgoKdHlwZWRlZiBpbnQgX19jbG9ja2lkX3Q7CgoKdHlwZWRlZiBpbnQgX190aW1lcl90 OwoKCnR5cGVkZWYgaW50IF9faXBjX3BpZF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXpl X3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQg X190X3VzY2FsYXJfdDsKCgp0eXBlZGVmIGxvbmcgaW50IF9faW50cHRyX3Q7CgoKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgX19zb2NrbGVuX3Q7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVh ZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0 cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJp b3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoK CnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9f c3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9w dGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGlu dCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3Bh cmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAg c2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFj a2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVm IHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFk X2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7 CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQg aW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2 ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9f bV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211 dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9t dXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBlZGVmIHN0 cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fcndf bG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3JpdGVyOwog IF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndf d3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7Cn0gcHRo cmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5kOwogIGlu dCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZvbGF0aWxl IGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVjdCBfcHRo cmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50IF9fYmFf cHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9iYXJyaWVy X3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9iYXJyaWVy YXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDExNCAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgNDYgIi9vcHQvZ2NjLXByZTMuMS9saWIv Z2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCiMgNTQg Ii9vcHQvZ2NjLXByZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBGSUxFOwojIDY0ICIvb3B0L2dj Yy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlv LmgiIDMKdHlwZWRlZiBzdHJ1Y3QgX0lPX0ZJTEUgX19GSUxFOwojIDc0ICIvb3B0L2djYy1wcmUz LjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMK IyAxICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9saWJpby5o IiAzCiMgMSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAxIDMKIyAxNCAiL3Vzci9pbmNsdWRl L19HX2NvbmZpZy5oIiAzCiMgMSAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2MtbGliL2lhNjQtdW5r bm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzIxICIvb3B0L2djYy1wcmUz LjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGRlZi5oIiAz CnR5cGVkZWYgdW5zaWduZWQgaW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZp Zy5oIiAyIDMKIyAyNCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi9vcHQv Z2NjLXByZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3Rk ZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMg NjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3Vu dDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3djaDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0g X192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAy IDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3Rh dGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVjdAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9f bWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19j b25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nY29udi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMSAzCiMgNDggIi91c3Iv aW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2MtbGliL2lhNjQt dW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkgIi91c3IvaW5jbHVk ZS93Y2hhci5oIiAyIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKIyAxICIvb3B0 L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAzMSAiL3Vzci9pbmNsdWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0Kewog IF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZfTk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dD T05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZX0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQs CiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAogIF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAg X19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1IsCiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoK CgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1QgPSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJS T1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0 ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJh bnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpfX2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0 ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhICosCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiosIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqKiwgc2l6ZV90ICosIGlu dCwgaW50KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfaW5pdF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwp0eXBlZGVmIHZvaWQgKCpfX2djb252X2VuZF9mY3QpIChzdHJ1Y3QgX19nY29u dl9zdGVwICopOwoKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfZmN0KSAoc3RydWN0IF9f Z2NvbnZfc3RlcCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IF9f Z2NvbnZfc3RlcF9kYXRhICosIHZvaWQgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBpbnQgKCpf X2djb252X3RyYW5zX2NvbnRleHRfZmN0KSAodm9pZCAqLCBfX2NvbnN0IHVuc2lnbmVkIGNoYXIg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNp Z25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGNoYXIgKiwgdW5zaWduZWQgY2hhciAqKTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZf dHJhbnNfcXVlcnlfZmN0KSAoX19jb25zdCBjaGFyICosIF9fY29uc3QgY2hhciAqKiosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7CgoKdHlwZWRlZiBp bnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3QgY2hhciAqKTsKdHlw ZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsKCnN0cnVjdCBfX2dj b252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5zX2ZjdDsKICBfX2dj b252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAgX19nY29udl90cmFu c19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAgc3RydWN0IF9fZ2Nv bnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwCnsKICBzdHJ1 Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBfX2NvbnN0IGNoYXIg Kl9fbW9kbmFtZTsKCiAgaW50IF9fY291bnRlcjsKCiAgY2hhciAqX19mcm9tX25hbWU7CiAgY2hh ciAqX190b19uYW1lOwoKICBfX2djb252X2ZjdCBfX2ZjdDsKICBfX2djb252X2luaXRfZmN0IF9f aW5pdF9mY3Q7CiAgX19nY29udl9lbmRfZmN0IF9fZW5kX2ZjdDsKCgoKICBpbnQgX19taW5fbmVl ZGVkX2Zyb207CiAgaW50IF9fbWF4X25lZWRlZF9mcm9tOwogIGludCBfX21pbl9uZWVkZWRfdG87 CiAgaW50IF9fbWF4X25lZWRlZF90bzsKCgogIGludCBfX3N0YXRlZnVsOwoKICB2b2lkICpfX2Rh dGE7Cn07CgoKCnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YQp7CiAgdW5zaWduZWQgY2hhciAqX19v dXRidWY7CiAgdW5zaWduZWQgY2hhciAqX19vdXRidWZlbmQ7CgoKCiAgaW50IF9fZmxhZ3M7CgoK CiAgaW50IF9faW52b2NhdGlvbl9jb3VudGVyOwoKCgogIGludCBfX2ludGVybmFsX3VzZTsKCiAg X19tYnN0YXRlX3QgKl9fc3RhdGVwOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7CgoKCiAgc3RydWN0 IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX190cmFuczsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX19nY29u dl9pbmZvCnsKICBzaXplX3QgX19uc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcCAqX19zdGVw czsKICBfX2V4dGVuc2lvbl9fIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGEgW107Cn0g Kl9fZ2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1 bmlvbgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVj dCBfX2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7 CiAgfSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IF9f YXR0cmlidXRlX18gKChfX21vZGVfXyAoX19ISV9fKSkpOwp0eXBlZGVmIGludCBfR19pbnQzMl90 IF9fYXR0cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfR191aW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykpKTsKdHlwZWRl ZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgX19hdHRyaWJ1dGVfXyAoKF9fbW9kZV9fIChfX1NJ X18pKSk7CiMgMzMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAyIDMKIyA1MyAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKIyAxICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3du LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL29wdC9nY2MtcHJlMy4xL2xp Yi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRhcmcuaCIgMwp0eXBl ZGVmIF9fYnVpbHRpbl92YV9saXN0IF9fZ251Y192YV9saXN0OwojIDU0ICIvdXNyL2luY2x1ZGUv bGliaW8uaCIgMiAzCiMgMTYwICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwpzdHJ1Y3QgX0lPX2p1 bXBfdDsgc3RydWN0IF9JT19GSUxFOwojIDE3MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlw ZWRlZiB2b2lkIF9JT19sb2NrX3Q7CgoKCgoKc3RydWN0IF9JT19tYXJrZXIgewogIHN0cnVjdCBf SU9fbWFya2VyICpfbmV4dDsKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9zYnVmOwoKCgogIGludCBfcG9z OwojIDE5MyAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKfTsKCgplbnVtIF9fY29kZWN2dF9yZXN1 bHQKewogIF9fY29kZWN2dF9vaywKICBfX2NvZGVjdnRfcGFydGlhbCwKICBfX2NvZGVjdnRfZXJy b3IsCiAgX19jb2RlY3Z0X25vY29udgp9OwojIDI2MSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMK c3RydWN0IF9JT19GSUxFIHsKICBpbnQgX2ZsYWdzOwoKCgoKICBjaGFyKiBfSU9fcmVhZF9wdHI7 CiAgY2hhciogX0lPX3JlYWRfZW5kOwogIGNoYXIqIF9JT19yZWFkX2Jhc2U7CiAgY2hhciogX0lP X3dyaXRlX2Jhc2U7CiAgY2hhciogX0lPX3dyaXRlX3B0cjsKICBjaGFyKiBfSU9fd3JpdGVfZW5k OwogIGNoYXIqIF9JT19idWZfYmFzZTsKICBjaGFyKiBfSU9fYnVmX2VuZDsKCiAgY2hhciAqX0lP X3NhdmVfYmFzZTsKICBjaGFyICpfSU9fYmFja3VwX2Jhc2U7CiAgY2hhciAqX0lPX3NhdmVfZW5k OwoKICBzdHJ1Y3QgX0lPX21hcmtlciAqX21hcmtlcnM7CgogIHN0cnVjdCBfSU9fRklMRSAqX2No YWluOwoKICBpbnQgX2ZpbGVubzsKICBpbnQgX2Jsa3NpemU7CiAgX19vZmZfdCBfb2xkX29mZnNl dDsKCgoKICB1bnNpZ25lZCBzaG9ydCBfY3VyX2NvbHVtbjsKICBzaWduZWQgY2hhciBfdnRhYmxl X29mZnNldDsKICBjaGFyIF9zaG9ydGJ1ZlsxXTsKCgoKICBfSU9fbG9ja190ICpfbG9jazsKIyAz MDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiAgX19vZmY2NF90IF9vZmZzZXQ7CgoKCgoKICB2 b2lkICpfX3BhZDE7CiAgdm9pZCAqX19wYWQyOwoKICBpbnQgX21vZGU7CgogIGNoYXIgX3VudXNl ZDJbMTUgKiBzaXplb2YgKGludCkgLSAyICogc2l6ZW9mICh2b2lkICopXTsKCn07CgoKCgoKc3Ry dWN0IF9JT19GSUxFX3BsdXM7CgpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMgX0lPXzJfMV9z dGRpbl87CmV4dGVybiBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZG91dF87CmV4dGVy biBzdHJ1Y3QgX0lPX0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGVycl87CiMgMzQ0ICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3JlYWRfZm4gKHZvaWQgKl9fY29v a2llLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKTsKCgoKCgoKCnR5cGVkZWYgX19zc2l6 ZV90IF9faW9fd3JpdGVfZm4gKHZvaWQgKl9fY29va2llLCBfX2NvbnN0IGNoYXIgKl9fYnVmLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKTsKCgoKCgoKCnR5cGVk ZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9fb2ZmNjRfdCAqX19wb3MsIGlu dCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZvaWQgKl9fY29va2llKTsKCgoK CnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0aW9uX3Q7CnR5cGVkZWYgX19p b193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX3NlZWtfZm4g Y29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Nsb3NlX2ZuIGNvb2tpZV9jbG9z ZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lvX3JlYWRfZm4gKnJlYWQ7CiAg X19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpzZWVrOwogIF9faW9fY2xvc2Vf Zm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7CnR5cGVkZWYgX0lPX2Nvb2tp ZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7CgpzdHJ1Y3QgX0lPX2Nvb2tp ZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAoc3RydWN0IF9JT19jb29raWVf ZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBfX2Zucyk7CgoK CgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBfX3VmbG93IChfSU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGlu dCBfX292ZXJmbG93IChfSU9fRklMRSAqLCBpbnQpIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9f d3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7CmV4dGVybiB3aW50X3QgX193dWZsb3cg KF9JT19GSUxFICopIHRocm93ICgpOwpleHRlcm4gd2ludF90IF9fd292ZXJmbG93IChfSU9fRklM RSAqLCB3aW50X3QpIHRocm93ICgpOwojIDQyNiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0 ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIHRocm93ICgpOwpleHRlcm4gaW50IF9J T19wdXRjIChpbnQgX19jLCBfSU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CmV4dGVybiBpbnQgX0lP X2Zlb2YgKF9JT19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChf SU9fRklMRSAqX19mcCkgdGhyb3cgKCk7CgpleHRlcm4gaW50IF9JT19wZWVrY19sb2NrZWQgKF9J T19GSUxFICpfX2ZwKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gdm9pZCBfSU9fZmxvY2tmaWxlIChf SU9fRklMRSAqKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklM RSAqKSB0aHJvdyAoKTsKZXh0ZXJuIGludCBfSU9fZnRyeWxvY2tmaWxlIChfSU9fRklMRSAqKSB0 aHJvdyAoKTsKIyA0NTYgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lPX3Zm c2NhbmYgKF9JT19GSUxFICogX19yZXN0cmljdCwgY29uc3QgY2hhciAqIF9fcmVzdHJpY3QsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKl9fcmVzdHJpY3QpIHRo cm93ICgpOwpleHRlcm4gaW50IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNv bnN0IGNoYXIgKl9fcmVzdHJpY3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFf bGlzdCkgdGhyb3cgKCk7CmV4dGVybiBfX3NzaXplX3QgX0lPX3BhZG4gKF9JT19GSUxFICosIGlu dCwgX19zc2l6ZV90KSB0aHJvdyAoKTsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19GSUxF ICosIHZvaWQgKiwgc2l6ZV90KSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZjY0X3QgX0lPX3NlZWtv ZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIHRocm93ICgpOwpleHRlcm4gX19v ZmY2NF90IF9JT19zZWVrcG9zIChfSU9fRklMRSAqLCBfX29mZjY0X3QsIGludCkgdGhyb3cgKCk7 CgpleHRlcm4gdm9pZCBfSU9fZnJlZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgdGhyb3cgKCk7 CiMgNTEyICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwp9CiMgNzUgIi9vcHQvZ2NjLXByZTMuMS9s aWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK Cgp0eXBlZGVmIF9fZ251Y192YV9saXN0IF9fbm90X3ZhX2xpc3RfXzsKIyA4OSAiL29wdC9nY2Mt cHJlMy4xL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5o IiAzCnR5cGVkZWYgX0dfZnBvc190IGZwb3NfdDsKCgoKCnR5cGVkZWYgX0dfZnBvczY0X3QgZnBv czY0X3Q7CiMgMTM4ICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxp bnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zdGRpb19s aW0uaCIgMSAzCiMgMTM5ICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3du LWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47CmV4 dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CiMgMTUzICIvb3B0L2djYy1w cmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIGludCByZW1vdmUgKF9fY29uc3QgY2hhciAqX19maWxlbmFtZSkgdGhyb3cgKCk7 CgpleHRlcm4gaW50IHJlbmFtZSAoX19jb25zdCBjaGFyICpfX29sZCwgX19jb25zdCBjaGFyICpf X25ldykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqdG1wZmlsZSAodm9pZCkgdGhyb3cgKCk7 CiMgMTY5ICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMu MS9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIEZJTEUgKnRtcGZpbGU2NCAodm9pZCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGNoYXIgKnRtcG5hbSAoY2hhciAqX19zKSB0aHJvdyAoKTsKCgoKCmV4dGVy biBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyAxODkgIi9vcHQvZ2NjLXBy ZTMuMS9saWIvZ2NjLWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFy ICpfX3BmeCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19tYWxsb2NfXykpOwoKCgoK ZXh0ZXJuIGludCBmY2xvc2UgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQg ZmZsdXNoIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZmZsdXNoX3Vu bG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjbG9zZWFs bCAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIEZJTEUgKmZvcGVuIChfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIg Kl9fcmVzdHJpY3QgX19tb2RlcykgdGhyb3cgKCk7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwojIDIzMyAiL29wdC9nY2MtcHJlMy4x L2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBGSUxFICpmb3BlbjY0IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19maWxlbmFtZSwK ICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX21vZGVzKSB0 aHJvdyAoKTsKZXh0ZXJuIEZJTEUgKmZyZW9wZW42NCAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX21vZGVzLAogICAgICAgICAgICAgICAgICAgICAgICBGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBGSUxFICpmZG9wZW4gKGludCBfX2ZkLCBfX2Nv bnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCgoKCmV4dGVybiBGSUxFICpmb3BlbmNvb2tp ZSAodm9pZCAqX19yZXN0cmljdCBfX21hZ2ljX2Nvb2tpZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAg ICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3MpIHRocm93ICgpOwoK CmV4dGVybiBGSUxFICpmbWVtb3BlbiAodm9pZCAqX19zLCBzaXplX3QgX19sZW4sIF9fY29uc3Qg Y2hhciAqX19tb2RlcykgdGhyb3cgKCk7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0g KGNoYXIgKipfX3Jlc3RyaWN0IF9fYnVmbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IHNpemVfdCAqX19yZXN0cmljdCBfX3NpemVsb2MpIHRocm93ICgpOwoKCgoKCmV4dGVybiB2b2lk IHNldGJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1 ZikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICBpbnQgX19t b2Rlcywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJ TEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sIGNoYXIgKl9fcmVzdHJpY3QgX19idWYsCiAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKZXh0ZXJuIHZvaWQgc2V0 bGluZWJ1ZiAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRm IChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCmV4dGVybiBpbnQgcHJp bnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7Cgpl eHRlcm4gaW50IHNwcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAg ICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsKCgpl eHRlcm4gaW50IHZmcHJpbnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykgdGhyb3cgKCk7CgpleHRlcm4gaW50IHZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCk7CgpleHRl cm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2Fy ZykgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19y ZXN0cmljdCBfX2Zvcm1hdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zv cm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGludCB2c25wcmludGYgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAgICAgICAgICAgICAgICAgICBf X2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0IF9fYXJnKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCAw KSkpOwoKCgoKCmV4dGVybiBpbnQgdmFzcHJpbnRmIChjaGFyICoqX19yZXN0cmljdCBfX3B0ciwg X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZiwKICAgICAgICAgICAgICAgICAgICAgIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAyLCAwKSkpOwpleHRlcm4gaW50IF9fYXNwcmludGYgKGNoYXIgKipfX3Jl c3RyaWN0IF9fcHRyLAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9f IChfX3ByaW50Zl9fLCAyLCAzKSkpOwpleHRlcm4gaW50IGFzcHJpbnRmIChjaGFyICoqX19yZXN0 cmljdCBfX3B0ciwKICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0 IF9fZm10LCAuLi4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDMpKSk7CgoKZXh0ZXJuIGludCB2ZHByaW50ZiAoaW50IF9fZmQsIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3Zh X2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18gKF9f cHJpbnRmX18sIDIsIDApKSk7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2ZtdCwgLi4uKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAyLCAzKSkpOwoKCgoKZXh0ZXJuIGludCBmc2NhbmYg KEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRlcm4gaW50IHNjYW5m IChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikgdGhyb3cgKCk7CgpleHRl cm4gaW50IHNzY2FuZiAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK CgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFy ICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3NjYW5m X18sIDIsIDApKSk7CgoKZXh0ZXJuIGludCB2c2NhbmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2Zvcm1hdCwgX19nbnVjX3ZhX2xpc3QgX19hcmcpCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1 dGVfXyAoKF9fZm9ybWF0X18gKF9fc2NhbmZfXywgMSwgMCkpKTsKCgpleHRlcm4gaW50IHZzc2Nh bmYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19j b25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAg ICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19mb3JtYXRfXyAoX19zY2FuZl9fLCAyLCAwKSkp OwoKCgoKZXh0ZXJuIGludCBmZ2V0YyAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4g aW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IGdldGNoYXIg KHZvaWQpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGludCBnZXRjX3VubG9ja2VkIChGSUxFICpf X3N0cmVhbSkgdGhyb3cgKCk7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZnZXRjX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZwdXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwoKCmV4dGVybiBpbnQgcHV0Y2hhciAoaW50IF9fYykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4g aW50IGZwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSB0aHJv dyAoKTsKZXh0ZXJuIGludCBwdXRjaGFyX3VubG9ja2VkIChpbnQgX19jKSB0aHJvdyAoKTsKCgoK CgpleHRlcm4gaW50IGdldHcgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IHB1dHcgKGludCBfX3csIEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBjaGFy ICpmZ2V0cyAoY2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sIEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0pCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAo Y2hhciAqX19yZXN0cmljdCBfX3MsIGludCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq Z2V0cyAoY2hhciAqX19zKSB0aHJvdyAoKTsKIyA0MzcgIi9vcHQvZ2NjLXByZTMuMS9saWIvZ2Nj LWxpYi9pYTY0LXVua25vd24tbGludXgvMy4xL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gX19z c2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKipfX3Jlc3RyaWN0IF9fbGluZXB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAqX19yZXN0cmljdCBfX24sIGludCBfX2RlbGlt aXRlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIHRocm93ICgpOwpleHRlcm4gX19zc2l6ZV90IGdldGRlbGltIChjaGFyICoqX19yZXN0 cmljdCBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICpfX3Jl c3RyaWN0IF9fbiwgaW50IF9fZGVsaW1pdGVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCmV4dGVybiBfX3NzaXplX3Qg Z2V0bGluZSAoY2hhciAqKl9fcmVzdHJpY3QgX19saW5lcHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICpfX3Jlc3RyaWN0IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBm cHV0cyAoX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fcywgRklMRSAqX19yZXN0cmljdCBfX3N0 cmVhbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgcHV0cyAoX19jb25z dCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHVuZ2V0YyAoaW50IF9fYywgRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jl c3RyaWN0IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiBzaXplX3Qg ZndyaXRlIChfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19wdHIsIHNpemVfdCBfX3NpemUsCiAg ICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fcykgdGhy b3cgKCk7CgoKCmV4dGVybiBzaXplX3QgZnJlYWRfdW5sb2NrZWQgKHZvaWQgKl9fcmVzdHJpY3Qg X19wdHIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVf dCBfX24sIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gc2l6ZV90 IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3Qg X19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAq X19yZXN0cmljdCBfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZzZWVrIChGSUxF ICpfX3N0cmVhbSwgbG9uZyBpbnQgX19vZmYsIGludCBfX3doZW5jZSkgdGhyb3cgKCk7CgpleHRl cm4gbG9uZyBpbnQgZnRlbGwgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCmV4dGVybiB2b2lk IHJld2luZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwojIDUwMCAiL29wdC9nY2MtcHJlMy4x L2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBpbnQgZnNlZWtvIChGSUxFICpfX3N0cmVhbSwgX19vZmZfdCBfX29mZiwgaW50IF9fd2hl bmNlKSB0aHJvdyAoKTsKCmV4dGVybiBfX29mZl90IGZ0ZWxsbyAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3QgX19zdHJlYW0s IGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICB0aHJvdyAoKTsKCmV4dGVybiBpbnQgZnNl dHBvcyAoRklMRSAqX19zdHJlYW0sIF9fY29uc3QgZnBvc190ICpfX3BvcykgdGhyb3cgKCk7CiMg NTM0ICIvb3B0L2djYy1wcmUzLjEvbGliL2djYy1saWIvaWE2NC11bmtub3duLWxpbnV4LzMuMS9p bmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2Vla282NCAoRklMRSAqX19zdHJlYW0sIF9f b2ZmNjRfdCBfX29mZiwgaW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKZXh0ZXJuIF9fb2ZmNjRfdCBm dGVsbG82NCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwpleHRlcm4gaW50IGZnZXRwb3M2NCAo RklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgZnBvczY0X3QgKl9fcmVzdHJpY3QgX19wb3MpCiAg ICAgdGhyb3cgKCk7CmV4dGVybiBpbnQgZnNldHBvczY0IChGSUxFICpfX3N0cmVhbSwgX19jb25z dCBmcG9zNjRfdCAqX19wb3MpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBjbGVhcmVyciAoRklM RSAqX19zdHJlYW0pIHRocm93ICgpOwoKZXh0ZXJuIGludCBmZW9mIChGSUxFICpfX3N0cmVhbSkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIHRocm93ICgpOwoK CgpleHRlcm4gdm9pZCBjbGVhcmVycl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRocm93ICgp OwpleHRlcm4gaW50IGZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKZXh0 ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiB2b2lkIHBlcnJvciAoX19jb25zdCBjaGFyICpfX3MpIHRocm93ICgpOwoKCgoKZXh0ZXJu IGludCBzeXNfbmVycjsKZXh0ZXJuIF9fY29uc3QgY2hhciAqX19jb25zdCBzeXNfZXJybGlzdFtd OwoKCmV4dGVybiBpbnQgX3N5c19uZXJyOwpleHRlcm4gX19jb25zdCBjaGFyICpfX2NvbnN0IF9z eXNfZXJybGlzdFtdOwoKCgoKCmV4dGVybiBpbnQgZmlsZW5vIChGSUxFICpfX3N0cmVhbSkgdGhy b3cgKCk7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIHRo cm93ICgpOwoKCgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKF9fY29uc3QgY2hhciAqX19jb21tYW5k LCBfX2NvbnN0IGNoYXIgKl9fbW9kZXMpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcGNsb3NlIChG SUxFICpfX3N0cmVhbSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIg Kl9fcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKmN1c2VyaWQgKGNoYXIgKl9fcykgdGhy b3cgKCk7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3RhY2tfcHJpbnRmIChz dHJ1Y3Qgb2JzdGFjayAqX19yZXN0cmljdCBfX29ic3RhY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSB0aHJvdyAoKTsK ZXh0ZXJuIGludCBvYnN0YWNrX3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICpfX3Jlc3RyaWN0IF9f b2JzdGFjaywKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0 cmljdCBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJncykgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUgKEZJTEUgKl9f c3RyZWFtKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3Ry ZWFtKSB0aHJvdyAoKTsKCgpleHRlcm4gdm9pZCBmdW5sb2NrZmlsZSAoRklMRSAqX19zdHJlYW0p IHRocm93ICgpOwojIDY0NCAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93 bi1saW51eC8zLjEvaW5jbHVkZS9zdGRpby5oIiAzCn0KIyAyOSAiaW5jbHVkZS9SdHlwZXMuaCIg MgoKIyAxICJpbmNsdWRlL0RsbEltcG9ydC5oIiAxCiMgMzEgImluY2x1ZGUvUnR5cGVzLmgiIDIK CgoKCmNsYXNzIFRDbGFzczsKY2xhc3MgVEJ1ZmZlcjsKY2xhc3MgVE1lbWJlckluc3BlY3RvcjsK CgoKCnR5cGVkZWYgY2hhciBDaGFyX3Q7CnR5cGVkZWYgdW5zaWduZWQgY2hhciBVQ2hhcl90Owp0 eXBlZGVmIHNob3J0IFNob3J0X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgVVNob3J0X3Q7CgoK Cgp0eXBlZGVmIGludCBJbnRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgVUludF90OwoKCnR5cGVk ZWYgaW50IFNlZWtfdDsKdHlwZWRlZiBsb25nIExvbmdfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IFVMb25nX3Q7CgoKCgoKdHlwZWRlZiBmbG9hdCBGbG9hdF90Owp0eXBlZGVmIGRvdWJsZSBEb3Vi bGVfdDsKdHlwZWRlZiBjaGFyIFRleHRfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJvb2xfdDsK dHlwZWRlZiB1bnNpZ25lZCBjaGFyIEJ5dGVfdDsKdHlwZWRlZiBzaG9ydCBWZXJzaW9uX3Q7CnR5 cGVkZWYgY29uc3QgY2hhciBPcHRpb25fdDsKdHlwZWRlZiBpbnQgU3Npel90Owp0eXBlZGVmIGZs b2F0IFJlYWxfdDsKCnR5cGVkZWYgdm9pZCAoKlN0cmVhbWVyX3QpKFRCdWZmZXImLCB2b2lkKiwg SW50X3QpOwp0eXBlZGVmIHZvaWQgKCpWb2lkRnVuY1B0cl90KSgpOwojIDgyICJpbmNsdWRlL1J0 eXBlcy5oIgpjb25zdCBCb29sX3Qga1RSVUUgPSAxOwpjb25zdCBCb29sX3Qga0ZBTFNFID0gMDsK CmNvbnN0IEludF90IGtNYXhJbnQgPSAyMTQ3NDgzNjQ3Owpjb25zdCBJbnRfdCBrTWF4U2hvcnQg PSAzMjc2NzsKY29uc3Qgc2l6ZV90IGtCaXRzUGVyQnl0ZSA9IDg7CmNvbnN0IFNzaXpfdCBrTlBP UyA9IH4oU3Npel90KTA7CiMgMTAxICJpbmNsdWRlL1J0eXBlcy5oIgogZXh0ZXJuIEludF90IGdE ZWJ1ZzsKCgoKCmV4dGVybiBUQ2xhc3MgKkNyZWF0ZUNsYXNzKGNvbnN0IGNoYXIgKmNuYW1lLCBW ZXJzaW9uX3QgaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKmRmaWws IGNvbnN0IGNoYXIgKmlmaWwsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIEludF90IGRsLCBJ bnRfdCBpbCk7CmV4dGVybiB2b2lkIEFkZENsYXNzKGNvbnN0IGNoYXIgKmNuYW1lLCBWZXJzaW9u X3QgaWQsIFZvaWRGdW5jUHRyX3QgZGljdCwKICAgICAgICAgICAgICAgICAgICAgSW50X3QgcHJh Z21hYml0cyk7CmV4dGVybiB2b2lkIFJlbW92ZUNsYXNzKGNvbnN0IGNoYXIgKmNuYW1lKTsKIyAy NiAiaW5jbHVkZS9UTWF0aC5oIiAyCgoKY2xhc3MgVE1hdGggewoKcHJpdmF0ZToKICAgc3RhdGlj IERvdWJsZV90IEdhbUNmKERvdWJsZV90IGEsRG91YmxlX3QgeCk7CiAgIHN0YXRpYyBEb3VibGVf dCBHYW1TZXIoRG91YmxlX3QgYSxEb3VibGVfdCB4KTsKCnB1YmxpYzoKCiAgIHN0YXRpYyBEb3Vi bGVfdCBQaSgpIHsgcmV0dXJuIDMuMTQxNTkyNjUzNTg5NzkzMjM4NDY7IH0KICAgc3RhdGljIERv dWJsZV90IEUoKSB7IHJldHVybiAyLjcxODI4MTgyODQ1OTA0NTIzNTQ7IH0KCgogICBzdGF0aWMg RG91YmxlX3QgU2luKERvdWJsZV90KTsKICAgc3RhdGljIERvdWJsZV90IENvcyhEb3VibGVfdCk7 CiAgIHN0YXRpYyBEb3VibGVfdCBUYW4oRG91YmxlX3QpOwogICBzdGF0aWMgRG91YmxlX3QgU2lu SChEb3VibGVfdCk7CiAgIHN0YXRpYyBEb3VibGVfdCBDb3NIKERvdWJsZV90KTsKICAgc3RhdGlj IERvdWJsZV90IFRhbkgoRG91YmxlX3QpOwogICBzdGF0aWMgRG91YmxlX3QgQVNpbihEb3VibGVf dCk7CiAgIHN0YXRpYyBEb3VibGVfdCBBQ29zKERvdWJsZV90KTsKICAgc3RhdGljIERvdWJsZV90 IEFUYW4oRG91YmxlX3QpOwogICBzdGF0aWMgRG91YmxlX3QgQVRhbjIoRG91YmxlX3QsIERvdWJs ZV90KTsKICAgc3RhdGljIERvdWJsZV90IEFTaW5IKERvdWJsZV90KTsKICAgc3RhdGljIERvdWJs ZV90IEFDb3NIKERvdWJsZV90KTsKICAgc3RhdGljIERvdWJsZV90IEFUYW5IKERvdWJsZV90KTsK ICAgc3RhdGljIERvdWJsZV90IEh5cG90KERvdWJsZV90IHgsIERvdWJsZV90IHkpOwoKCiAgIHN0 YXRpYyBEb3VibGVfdCBTcXJ0KERvdWJsZV90IHgpOwogICBzdGF0aWMgRG91YmxlX3QgQ2VpbChE b3VibGVfdCB4KTsKICAgc3RhdGljIERvdWJsZV90IEZsb29yKERvdWJsZV90IHgpOwogICBzdGF0 aWMgRG91YmxlX3QgRXhwKERvdWJsZV90KTsKICAgc3RhdGljIERvdWJsZV90IFBvd2VyKERvdWJs ZV90IHgsIERvdWJsZV90IHkpOwogICBzdGF0aWMgRG91YmxlX3QgTG9nKERvdWJsZV90IHgpOwog ICBzdGF0aWMgRG91YmxlX3QgTG9nMihEb3VibGVfdCB4KTsKICAgc3RhdGljIERvdWJsZV90IExv ZzEwKERvdWJsZV90IHgpOwogICBzdGF0aWMgSW50X3QgTmludChGbG9hdF90IHgpOwogICBzdGF0 aWMgSW50X3QgTmludChEb3VibGVfdCB4KTsKICAgc3RhdGljIEludF90IEZpbml0ZShEb3VibGVf dCB4KTsKICAgc3RhdGljIEludF90IElzTmFOKERvdWJsZV90IHgpOwoKCiAgIHN0YXRpYyBMb25n X3QgTmV4dFByaW1lKExvbmdfdCB4KTsKICAgc3RhdGljIExvbmdfdCBTcXJ0KExvbmdfdCB4KTsK ICAgc3RhdGljIExvbmdfdCBIeXBvdChMb25nX3QgeCwgTG9uZ190IHkpOwoKCiAgIHN0YXRpYyBT aG9ydF90IEFicyhTaG9ydF90IGQpOwogICBzdGF0aWMgSW50X3QgQWJzKEludF90IGQpOwogICBz dGF0aWMgTG9uZ190IEFicyhMb25nX3QgZCk7CiAgIHN0YXRpYyBGbG9hdF90IEFicyhGbG9hdF90 IGQpOwogICBzdGF0aWMgRG91YmxlX3QgQWJzKERvdWJsZV90IGQpOwoKCiAgIHN0YXRpYyBCb29s X3QgRXZlbihMb25nX3QgYSk7CiAgIHN0YXRpYyBCb29sX3QgT2RkKExvbmdfdCBhKTsKCgogICBz dGF0aWMgU2hvcnRfdCBTaWduKFNob3J0X3QgYSwgU2hvcnRfdCBiKTsKICAgc3RhdGljIEludF90 IFNpZ24oSW50X3QgYSwgSW50X3QgYik7CiAgIHN0YXRpYyBMb25nX3QgU2lnbihMb25nX3QgYSwg TG9uZ190IGIpOwogICBzdGF0aWMgRmxvYXRfdCBTaWduKEZsb2F0X3QgYSwgRmxvYXRfdCBiKTsK ICAgc3RhdGljIERvdWJsZV90IFNpZ24oRG91YmxlX3QgYSwgRG91YmxlX3QgYik7CgoKICAgc3Rh dGljIFNob3J0X3QgTWluKFNob3J0X3QgYSwgU2hvcnRfdCBiKTsKICAgc3RhdGljIFVTaG9ydF90 IE1pbihVU2hvcnRfdCBhLCBVU2hvcnRfdCBiKTsKICAgc3RhdGljIEludF90IE1pbihJbnRfdCBh LCBJbnRfdCBiKTsKICAgc3RhdGljIFVJbnRfdCBNaW4oVUludF90IGEsIFVJbnRfdCBiKTsKICAg c3RhdGljIExvbmdfdCBNaW4oTG9uZ190IGEsIExvbmdfdCBiKTsKICAgc3RhdGljIFVMb25nX3Qg TWluKFVMb25nX3QgYSwgVUxvbmdfdCBiKTsKICAgc3RhdGljIEZsb2F0X3QgTWluKEZsb2F0X3Qg YSwgRmxvYXRfdCBiKTsKICAgc3RhdGljIERvdWJsZV90IE1pbihEb3VibGVfdCBhLCBEb3VibGVf dCBiKTsKCgogICBzdGF0aWMgU2hvcnRfdCBNYXgoU2hvcnRfdCBhLCBTaG9ydF90IGIpOwogICBz dGF0aWMgVVNob3J0X3QgTWF4KFVTaG9ydF90IGEsIFVTaG9ydF90IGIpOwogICBzdGF0aWMgSW50 X3QgTWF4KEludF90IGEsIEludF90IGIpOwogICBzdGF0aWMgVUludF90IE1heChVSW50X3QgYSwg VUludF90IGIpOwogICBzdGF0aWMgTG9uZ190IE1heChMb25nX3QgYSwgTG9uZ190IGIpOwogICBz dGF0aWMgVUxvbmdfdCBNYXgoVUxvbmdfdCBhLCBVTG9uZ190IGIpOwogICBzdGF0aWMgRmxvYXRf dCBNYXgoRmxvYXRfdCBhLCBGbG9hdF90IGIpOwogICBzdGF0aWMgRG91YmxlX3QgTWF4KERvdWJs ZV90IGEsIERvdWJsZV90IGIpOwoKCiAgIHN0YXRpYyBJbnRfdCBMb2NNaW4oSW50X3QgbiwgY29u c3QgU2hvcnRfdCAqYSk7CiAgIHN0YXRpYyBJbnRfdCBMb2NNaW4oSW50X3QgbiwgY29uc3QgSW50 X3QgKmEpOwogICBzdGF0aWMgSW50X3QgTG9jTWluKEludF90IG4sIGNvbnN0IEZsb2F0X3QgKmEp OwogICBzdGF0aWMgSW50X3QgTG9jTWluKEludF90IG4sIGNvbnN0IERvdWJsZV90ICphKTsKICAg c3RhdGljIEludF90IExvY01pbihJbnRfdCBuLCBjb25zdCBMb25nX3QgKmEpOwogICBzdGF0aWMg SW50X3QgTG9jTWF4KEludF90IG4sIGNvbnN0IFNob3J0X3QgKmEpOwogICBzdGF0aWMgSW50X3Qg TG9jTWF4KEludF90IG4sIGNvbnN0IEludF90ICphKTsKICAgc3RhdGljIEludF90IExvY01heChJ bnRfdCBuLCBjb25zdCBGbG9hdF90ICphKTsKICAgc3RhdGljIEludF90IExvY01heChJbnRfdCBu LCBjb25zdCBEb3VibGVfdCAqYSk7CiAgIHN0YXRpYyBJbnRfdCBMb2NNYXgoSW50X3QgbiwgY29u c3QgTG9uZ190ICphKTsKCgogICBzdGF0aWMgU2hvcnRfdCBSYW5nZShTaG9ydF90IGxiLCBTaG9y dF90IHViLCBTaG9ydF90IHgpOwogICBzdGF0aWMgSW50X3QgUmFuZ2UoSW50X3QgbGIsIEludF90 IHViLCBJbnRfdCB4KTsKICAgc3RhdGljIExvbmdfdCBSYW5nZShMb25nX3QgbGIsIExvbmdfdCB1 YiwgTG9uZ190IHgpOwogICBzdGF0aWMgVUxvbmdfdCBSYW5nZShVTG9uZ190IGxiLCBVTG9uZ190 IHViLCBVTG9uZ190IHgpOwogICBzdGF0aWMgRG91YmxlX3QgUmFuZ2UoRG91YmxlX3QgbGIsIERv dWJsZV90IHViLCBEb3VibGVfdCB4KTsKCgogICBzdGF0aWMgSW50X3QgQmluYXJ5U2VhcmNoKElu dF90IG4sIGNvbnN0IFNob3J0X3QgKmFycmF5LCBTaG9ydF90IHZhbHVlKTsKICAgc3RhdGljIElu dF90IEJpbmFyeVNlYXJjaChJbnRfdCBuLCBjb25zdCBTaG9ydF90ICoqYXJyYXksIFNob3J0X3Qg dmFsdWUpOwogICBzdGF0aWMgSW50X3QgQmluYXJ5U2VhcmNoKEludF90IG4sIGNvbnN0IEludF90 ICphcnJheSwgSW50X3QgdmFsdWUpOwogICBzdGF0aWMgSW50X3QgQmluYXJ5U2VhcmNoKEludF90 IG4sIGNvbnN0IEludF90ICoqYXJyYXksIEludF90IHZhbHVlKTsKICAgc3RhdGljIEludF90IEJp bmFyeVNlYXJjaChJbnRfdCBuLCBjb25zdCBGbG9hdF90ICphcnJheSwgRmxvYXRfdCB2YWx1ZSk7 CiAgIHN0YXRpYyBJbnRfdCBCaW5hcnlTZWFyY2goSW50X3QgbiwgY29uc3QgRmxvYXRfdCAqKmFy cmF5LCBGbG9hdF90IHZhbHVlKTsKICAgc3RhdGljIEludF90IEJpbmFyeVNlYXJjaChJbnRfdCBu LCBjb25zdCBEb3VibGVfdCAqYXJyYXksIERvdWJsZV90IHZhbHVlKTsKICAgc3RhdGljIEludF90 IEJpbmFyeVNlYXJjaChJbnRfdCBuLCBjb25zdCBEb3VibGVfdCAqKmFycmF5LCBEb3VibGVfdCB2 YWx1ZSk7CiAgIHN0YXRpYyBJbnRfdCBCaW5hcnlTZWFyY2goSW50X3QgbiwgY29uc3QgTG9uZ190 ICphcnJheSwgTG9uZ190IHZhbHVlKTsKICAgc3RhdGljIEludF90IEJpbmFyeVNlYXJjaChJbnRf dCBuLCBjb25zdCBMb25nX3QgKiphcnJheSwgTG9uZ190IHZhbHVlKTsKCgogICBzdGF0aWMgVUxv bmdfdCBIYXNoKGNvbnN0IHZvaWQgKnR4dCwgSW50X3QgbnR4dCk7CiAgIHN0YXRpYyBVTG9uZ190 IEhhc2goY29uc3QgY2hhciAqc3RyKTsKCgogICBzdGF0aWMgdm9pZCBTb3J0KEludF90IG4sIGNv bnN0IFNob3J0X3QgKmEsIEludF90ICppbmRleCwgQm9vbF90IGRvd249a1RSVUUpOwogICBzdGF0 aWMgdm9pZCBTb3J0KEludF90IG4sIGNvbnN0IEludF90ICphLCBJbnRfdCAqaW5kZXgsIEJvb2xf dCBkb3duPWtUUlVFKTsKICAgc3RhdGljIHZvaWQgU29ydChJbnRfdCBuLCBjb25zdCBGbG9hdF90 ICphLCBJbnRfdCAqaW5kZXgsIEJvb2xfdCBkb3duPWtUUlVFKTsKICAgc3RhdGljIHZvaWQgU29y dChJbnRfdCBuLCBjb25zdCBEb3VibGVfdCAqYSwgSW50X3QgKmluZGV4LCBCb29sX3QgZG93bj1r VFJVRSk7CiAgIHN0YXRpYyB2b2lkIFNvcnQoSW50X3QgbiwgY29uc3QgTG9uZ190ICphLCBJbnRf dCAqaW5kZXgsIEJvb2xfdCBkb3duPWtUUlVFKTsKCgogICBzdGF0aWMgRmxvYXRfdCAqQ3Jvc3Mo RmxvYXRfdCB2MVszXSxGbG9hdF90IHYyWzNdLEZsb2F0X3Qgb3V0WzNdKTsKICAgc3RhdGljIEZs b2F0X3QgTm9ybWFsaXplKEZsb2F0X3QgdlszXSk7CiAgIHN0YXRpYyBGbG9hdF90IE5vcm1Dcm9z cyhGbG9hdF90IHYxWzNdLEZsb2F0X3QgdjJbM10sRmxvYXRfdCBvdXRbM10pOwogICBzdGF0aWMg RmxvYXRfdCAqTm9ybWFsMlBsYW5lKEZsb2F0X3QgdjFbM10sRmxvYXRfdCB2MlszXSxGbG9hdF90 IHYzWzNdLCBGbG9hdF90IG5vcm1hbFszXSk7CgogICBzdGF0aWMgRG91YmxlX3QgKkNyb3NzKERv dWJsZV90IHYxWzNdLERvdWJsZV90IHYyWzNdLERvdWJsZV90IG91dFszXSk7CiAgIHN0YXRpYyBE b3VibGVfdCBFcmYoRG91YmxlX3QgeCk7CiAgIHN0YXRpYyBEb3VibGVfdCBFcmZjKERvdWJsZV90 IHgpOwogICBzdGF0aWMgRG91YmxlX3QgRnJlcShEb3VibGVfdCB4KTsKICAgc3RhdGljIERvdWJs ZV90IEdhbW1hKERvdWJsZV90IHopOwogICBzdGF0aWMgRG91YmxlX3QgR2FtbWEoRG91YmxlX3Qg YSxEb3VibGVfdCB4KTsKICAgc3RhdGljIERvdWJsZV90IEdhdXMoRG91YmxlX3QgeCwgRG91Ymxl X3QgbWVhbj0wLCBEb3VibGVfdCBzaWdtYT0xKTsKICAgc3RhdGljIERvdWJsZV90IExhbmRhdShE b3VibGVfdCB4LCBEb3VibGVfdCBtZWFuPTAsIERvdWJsZV90IHNpZ21hPTEpOwogICBzdGF0aWMg RG91YmxlX3QgTG5HYW1tYShEb3VibGVfdCB6KTsKICAgc3RhdGljIERvdWJsZV90IE5vcm1hbGl6 ZShEb3VibGVfdCB2WzNdKTsKICAgc3RhdGljIERvdWJsZV90IE5vcm1Dcm9zcyhEb3VibGVfdCB2 MVszXSxEb3VibGVfdCB2MlszXSxEb3VibGVfdCBvdXRbM10pOwogICBzdGF0aWMgRG91YmxlX3Qg Kk5vcm1hbDJQbGFuZShEb3VibGVfdCB2MVszXSxEb3VibGVfdCB2MlszXSxEb3VibGVfdCB2M1sz XSwgRG91YmxlX3Qgbm9ybWFsWzNdKTsKICAgc3RhdGljIERvdWJsZV90IFByb2IoRG91YmxlX3Qg Y2hpMixJbnRfdCBuZGYpOwogICBzdGF0aWMgRG91YmxlX3QgS29sbW9nb3JvdlByb2IoRG91Ymxl X3Qgeik7CgoKICAgc3RhdGljIERvdWJsZV90IEJlc3NlbEkoSW50X3QgbixEb3VibGVfdCB4KTsK ICAgc3RhdGljIERvdWJsZV90IEJlc3NlbEsoSW50X3QgbixEb3VibGVfdCB4KTsKICAgc3RhdGlj IERvdWJsZV90IEJlc3NlbEkwKERvdWJsZV90IHgpOwogICBzdGF0aWMgRG91YmxlX3QgQmVzc2Vs SzAoRG91YmxlX3QgeCk7CiAgIHN0YXRpYyBEb3VibGVfdCBCZXNzZWxJMShEb3VibGVfdCB4KTsK ICAgc3RhdGljIERvdWJsZV90IEJlc3NlbEsxKERvdWJsZV90IHgpOwoKICAgcHJpdmF0ZTogc3Rh dGljIFRDbGFzcyAqZmdJc0E7IHB1YmxpYzogc3RhdGljIFRDbGFzcyAqQ2xhc3MoKTsgc3RhdGlj IGNvbnN0IGNoYXIgKkNsYXNzX05hbWUoKTsgc3RhdGljIFZlcnNpb25fdCBDbGFzc19WZXJzaW9u KCkgeyByZXR1cm4gMDsgfSBzdGF0aWMgdm9pZCBEaWN0aW9uYXJ5KCk7IHZpcnR1YWwgVENsYXNz ICpJc0EoKSBjb25zdCB7IHJldHVybiBUTWF0aDo6Q2xhc3MoKTsgfSB2aXJ0dWFsIHZvaWQgU2hv d01lbWJlcnMoVE1lbWJlckluc3BlY3RvciAmaW5zcCwgY2hhciAqcGFyZW50KTsgdmlydHVhbCB2 b2lkIFN0cmVhbWVyKFRCdWZmZXIgJmIpOyB2b2lkIFN0cmVhbWVyTlZpcnR1YWwoVEJ1ZmZlciAm YikgeyBUTWF0aDo6U3RyZWFtZXIoYik7IH0gZnJpZW5kIFRCdWZmZXIgJm9wZXJhdG9yPj4oVEJ1 ZmZlciAmYnVmLCBUTWF0aCAqJm9iaik7IGZyaWVuZCBUQnVmZmVyICZvcGVyYXRvcj4+KFRCdWZm ZXIgJmJ1ZiwgY29uc3QgVE1hdGggKiZvYmopOyBjbGFzcyBSX19Jbml0IHsgcHVibGljOiBSX19J bml0KEludF90IHByYWdtYWJpdHMgPSAwKSB7IEFkZENsYXNzKFRNYXRoOjpDbGFzc19OYW1lKCks IFRNYXRoOjpDbGFzc19WZXJzaW9uKCksICZUTWF0aDo6RGljdGlvbmFyeSwgcHJhZ21hYml0cyk7 IH0gflJfX0luaXQoKSB7IFJlbW92ZUNsYXNzKFRNYXRoOjpDbGFzc19OYW1lKCkpOyB9IH07IHN0 YXRpYyBjb25zdCBjaGFyICpEZWNsRmlsZU5hbWUoKSB7IHJldHVybiAiaW5jbHVkZS9UTWF0aC5o IjsgfSBzdGF0aWMgaW50IERlY2xGaWxlTGluZSgpIHsgcmV0dXJuIDE4MzsgfSBzdGF0aWMgY29u c3QgY2hhciAqSW1wbEZpbGVOYW1lKCk7IHN0YXRpYyBpbnQgSW1wbEZpbGVMaW5lKCk7Cn07CgoK CgppbmxpbmUgQm9vbF90IFRNYXRoOjpFdmVuKExvbmdfdCBhKQogICB7IHJldHVybiAhIChhICYg MSk7IH0KCmlubGluZSBCb29sX3QgVE1hdGg6Ok9kZChMb25nX3QgYSkKICAgeyByZXR1cm4gKGEg JiAxKTsgfQoKCgppbmxpbmUgU2hvcnRfdCBUTWF0aDo6QWJzKFNob3J0X3QgZCkKICAgeyByZXR1 cm4gKGQgPiAwKSA/IGQgOiAtZDsgfQoKaW5saW5lIEludF90IFRNYXRoOjpBYnMoSW50X3QgZCkK ICAgeyByZXR1cm4gKGQgPiAwKSA/IGQgOiAtZDsgfQoKaW5saW5lIExvbmdfdCBUTWF0aDo6QWJz KExvbmdfdCBkKQogICB7IHJldHVybiAoZCA+IDApID8gZCA6IC1kOyB9CgppbmxpbmUgRmxvYXRf dCBUTWF0aDo6QWJzKEZsb2F0X3QgZCkKICAgeyByZXR1cm4gKGQgPiAwKSA/IGQgOiAtZDsgfQoK aW5saW5lIERvdWJsZV90IFRNYXRoOjpBYnMoRG91YmxlX3QgZCkKICAgeyByZXR1cm4gKGQgPiAw KSA/IGQgOiAtZDsgfQoKCgppbmxpbmUgU2hvcnRfdCBUTWF0aDo6U2lnbihTaG9ydF90IGEsIFNo b3J0X3QgYikKICAgeyByZXR1cm4gKGIgPj0gMCkgPyBBYnMoYSkgOiAtQWJzKGEpOyB9Cgppbmxp bmUgSW50X3QgVE1hdGg6OlNpZ24oSW50X3QgYSwgSW50X3QgYikKICAgeyByZXR1cm4gKGIgPj0g MCkgPyBBYnMoYSkgOiAtQWJzKGEpOyB9CgppbmxpbmUgTG9uZ190IFRNYXRoOjpTaWduKExvbmdf dCBhLCBMb25nX3QgYikKICAgeyByZXR1cm4gKGIgPj0gMCkgPyBBYnMoYSkgOiAtQWJzKGEpOyB9 CgppbmxpbmUgRmxvYXRfdCBUTWF0aDo6U2lnbihGbG9hdF90IGEsIEZsb2F0X3QgYikKICAgeyBy ZXR1cm4gKGIgPj0gMCkgPyBBYnMoYSkgOiAtQWJzKGEpOyB9CgppbmxpbmUgRG91YmxlX3QgVE1h dGg6OlNpZ24oRG91YmxlX3QgYSwgRG91YmxlX3QgYikKICAgeyByZXR1cm4gKGIgPj0gMCkgPyBB YnMoYSkgOiAtQWJzKGEpOyB9CgoKCmlubGluZSBTaG9ydF90IFRNYXRoOjpNaW4oU2hvcnRfdCBh LCBTaG9ydF90IGIpCiAgIHsgcmV0dXJuIGEgPD0gYiA/IGEgOiBiOyB9CgppbmxpbmUgVVNob3J0 X3QgVE1hdGg6Ok1pbihVU2hvcnRfdCBhLCBVU2hvcnRfdCBiKQogICB7IHJldHVybiBhIDw9IGIg PyBhIDogYjsgfQoKaW5saW5lIEludF90IFRNYXRoOjpNaW4oSW50X3QgYSwgSW50X3QgYikKICAg eyByZXR1cm4gYSA8PSBiID8gYSA6IGI7IH0KCmlubGluZSBVSW50X3QgVE1hdGg6Ok1pbihVSW50 X3QgYSwgVUludF90IGIpCiAgIHsgcmV0dXJuIGEgPD0gYiA/IGEgOiBiOyB9CgppbmxpbmUgTG9u Z190IFRNYXRoOjpNaW4oTG9uZ190IGEsIExvbmdfdCBiKQogICB7IHJldHVybiBhIDw9IGIgPyBh IDogYjsgfQoKaW5saW5lIFVMb25nX3QgVE1hdGg6Ok1pbihVTG9uZ190IGEsIFVMb25nX3QgYikK ICAgeyByZXR1cm4gYSA8PSBiID8gYSA6IGI7IH0KCmlubGluZSBGbG9hdF90IFRNYXRoOjpNaW4o RmxvYXRfdCBhLCBGbG9hdF90IGIpCiAgIHsgcmV0dXJuIGEgPD0gYiA/IGEgOiBiOyB9Cgppbmxp bmUgRG91YmxlX3QgVE1hdGg6Ok1pbihEb3VibGVfdCBhLCBEb3VibGVfdCBiKQogICB7IHJldHVy biBhIDw9IGIgPyBhIDogYjsgfQoKCgppbmxpbmUgU2hvcnRfdCBUTWF0aDo6TWF4KFNob3J0X3Qg YSwgU2hvcnRfdCBiKQogICB7IHJldHVybiBhID49IGIgPyBhIDogYjsgfQoKaW5saW5lIFVTaG9y dF90IFRNYXRoOjpNYXgoVVNob3J0X3QgYSwgVVNob3J0X3QgYikKICAgeyByZXR1cm4gYSA+PSBi ID8gYSA6IGI7IH0KCmlubGluZSBJbnRfdCBUTWF0aDo6TWF4KEludF90IGEsIEludF90IGIpCiAg IHsgcmV0dXJuIGEgPj0gYiA/IGEgOiBiOyB9CgppbmxpbmUgVUludF90IFRNYXRoOjpNYXgoVUlu dF90IGEsIFVJbnRfdCBiKQogICB7IHJldHVybiBhID49IGIgPyBhIDogYjsgfQoKaW5saW5lIExv bmdfdCBUTWF0aDo6TWF4KExvbmdfdCBhLCBMb25nX3QgYikKICAgeyByZXR1cm4gYSA+PSBiID8g YSA6IGI7IH0KCmlubGluZSBVTG9uZ190IFRNYXRoOjpNYXgoVUxvbmdfdCBhLCBVTG9uZ190IGIp CiAgIHsgcmV0dXJuIGEgPj0gYiA/IGEgOiBiOyB9CgppbmxpbmUgRmxvYXRfdCBUTWF0aDo6TWF4 KEZsb2F0X3QgYSwgRmxvYXRfdCBiKQogICB7IHJldHVybiBhID49IGIgPyBhIDogYjsgfQoKaW5s aW5lIERvdWJsZV90IFRNYXRoOjpNYXgoRG91YmxlX3QgYSwgRG91YmxlX3QgYikKICAgeyByZXR1 cm4gYSA+PSBiID8gYSA6IGI7IH0KCgoKaW5saW5lIFNob3J0X3QgVE1hdGg6OlJhbmdlKFNob3J0 X3QgbGIsIFNob3J0X3QgdWIsIFNob3J0X3QgeCkKICAgeyByZXR1cm4geCA8IGxiID8gbGIgOiAo eCA+IHViID8gdWIgOiB4KTsgfQoKaW5saW5lIEludF90IFRNYXRoOjpSYW5nZShJbnRfdCBsYiwg SW50X3QgdWIsIEludF90IHgpCiAgIHsgcmV0dXJuIHggPCBsYiA/IGxiIDogKHggPiB1YiA/IHVi IDogeCk7IH0KCmlubGluZSBMb25nX3QgVE1hdGg6OlJhbmdlKExvbmdfdCBsYiwgTG9uZ190IHVi LCBMb25nX3QgeCkKICAgeyByZXR1cm4geCA8IGxiID8gbGIgOiAoeCA+IHViID8gdWIgOiB4KTsg fQoKaW5saW5lIFVMb25nX3QgVE1hdGg6OlJhbmdlKFVMb25nX3QgbGIsIFVMb25nX3QgdWIsIFVM b25nX3QgeCkKICAgeyByZXR1cm4geCA8IGxiID8gbGIgOiAoeCA+IHViID8gdWIgOiB4KTsgfQoK aW5saW5lIERvdWJsZV90IFRNYXRoOjpSYW5nZShEb3VibGVfdCBsYiwgRG91YmxlX3QgdWIsIERv dWJsZV90IHgpCiAgIHsgcmV0dXJuIHggPCBsYiA/IGxiIDogKHggPiB1YiA/IHViIDogeCk7IH0K CgoKCiMgMSAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2MtbGliL2lhNjQtdW5rbm93bi1saW51eC8z LjEvaW5jbHVkZS9mbG9hdC5oIiAxIDMKIyAzMDIgImluY2x1ZGUvVE1hdGguaCIgMgojIDMxMiAi aW5jbHVkZS9UTWF0aC5oIgojIDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDEgMwojIDI5ICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCmV4dGVybiAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRz L2h1Z2VfdmFsLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9uYW4uaCIgMSAzCiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg MwoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOCAiL3Vzci9pbmNs dWRlL2JpdHMvbWF0aGRlZi5oIiAzCnR5cGVkZWYgZmxvYXQgZmxvYXRfdDsKCnR5cGVkZWYgZG91 YmxlIGRvdWJsZV90OwojIDQxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA2MyAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMK IyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGRvdWJsZSBhY29z IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2FzaW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBh dGFuIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2F0YW4gKGRvdWJsZSBf X3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9f eCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91YmxlIF9f eCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBjb3MgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fY29zIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBkb3VibGUg c2luIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3NpbiAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbiAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gdm9pZCBz aW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUgKl9fY29zeCkgdGhyb3cg KCk7IGV4dGVybiB2b2lkIF9fc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91 YmxlICpfX2Nvc3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY29zaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZG91YmxlIHNpbmggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fc2luaCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIHRhbmggKGRvdWJs ZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fdGFuaCAoZG91YmxlIF9feCkgdGhyb3cg KCk7CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fYWNvc2ggKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGRvdWJsZSBhc2lu aCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9f eCkgdGhyb3cgKCk7CgpleHRlcm4gZG91YmxlIGF0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGRvdWJsZSBfX2F0YW5oIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4g ZG91YmxlIGV4cCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19leHAgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGV4cDEwIChkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2V4cDEwIChkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBkb3VibGUgcG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f cG93MTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIGZyZXhwIChkb3Vi bGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZnJleHAg KGRvdWJsZSBfX3gsIGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBs ZGV4cCAoZG91YmxlIF9feCwgaW50IF9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gZG91Ymxl IF9fbGRleHAgKGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4g ZG91YmxlIGxvZyAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19sb2cgKGRv dWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgbG9nMTAgKGRvdWJsZSBfX3gpIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fbG9nMTAgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4 dGVybiBkb3VibGUgbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIGV4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX2V4cG0xIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZzFw IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzFwIChkb3VibGUgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGxvZ2IgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91 YmxlIGV4cDIgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZXhwMiAoZG91 YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2xvZzIgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKCgpl eHRlcm4gZG91YmxlIHBvdyAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVy biBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVy biBkb3VibGUgc3FydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zcXJ0 IChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19oeXBvdCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIGNicnQgKGRvdWJsZSBf X3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fY2JydCAoZG91YmxlIF9feCkgdGhyb3cgKCk7 CgoKCgoKCmV4dGVybiBkb3VibGUgY2VpbCAoZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBk b3VibGUgX19jZWlsIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZhYnMg KGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJu IGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX2Zsb29yIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91Ymxl IGZtb2QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9f Zm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IF9f aXNpbmYgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZSAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmYgKGRvdWJsZSBfX3Zh bHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGludCBm aW5pdGUgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7CgoKZXh0ZXJuIGRvdWJsZSBkcmVtIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAo KTsgZXh0ZXJuIGRvdWJsZSBfX2RyZW0gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgp OwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3NpZ25pZmljYW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVy biBkb3VibGUgY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX2NvcHlzaWduIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoK CgpleHRlcm4gZG91YmxlIG5hbiAoX19jb25zdCBjaGFyICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGRvdWJsZSBfX25hbiAoX19jb25zdCBjaGFy ICpfX3RhZ2IpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgX19pc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChf X2NvbnN0X18pKTsKCgoKZXh0ZXJuIGludCBpc25hbiAoZG91YmxlIF9fdmFsdWUpIHRocm93ICgp IF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZG91YmxlIGowIChkb3VibGUp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fajAgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBk b3VibGUgajEgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19qMSAoZG91YmxlKSB0 aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSBqbiAoaW50LCBkb3VibGUpIHRocm93ICgpOyBleHRlcm4g ZG91YmxlIF9fam4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGRvdWJsZSB5MCAoZG91 YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3kwIChkb3VibGUpIHRocm93ICgpOwpleHRl cm4gZG91YmxlIHkxIChkb3VibGUpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9feTEgKGRvdWJs ZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgeW4gKGludCwgZG91YmxlKSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3luIChpbnQsIGRvdWJsZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGRvdWJs ZSBlcmYgKGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19lcmYgKGRvdWJsZSkgdGhy b3cgKCk7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJs ZSBfX2VyZmMgKGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBkb3VibGUgbGdhbW1hIChkb3VibGUp IHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIHRocm93ICgpOwoKCgpl eHRlcm4gZG91YmxlIHRnYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX3Rn YW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkg dGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19nYW1tYSAoZG91YmxlKSB0aHJvdyAoKTsKCgoKCgoK ZXh0ZXJuIGRvdWJsZSBsZ2FtbWFfciAoZG91YmxlLCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgp OyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSB0aHJv dyAoKTsKCgoKCgoKZXh0ZXJuIGRvdWJsZSByaW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGRvdWJsZSBfX3JpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUg bmV4dGFmdGVyIChkb3VibGUgX194LCBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCmV4dGVybiBk b3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBf X2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtYWluZGVyIChkb3VibGUgX194LCBkb3Vi bGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBzY2FsYiAoZG91YmxlIF9feCwgZG91 YmxlIF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91 YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gZG91YmxlIHNjYWxibiAoZG91YmxlIF9feCwg aW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19zY2FsYm4gKGRvdWJsZSBfX3gsIGlu dCBfX24pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3VibGUgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGludCBfX2lsb2diIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBk b3VibGUgc2NhbGJsbiAoZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJu IGRvdWJsZSBfX3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7CgoK CmV4dGVybiBkb3VibGUgbmVhcmJ5aW50IChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGRv dWJsZSBfX25lYXJieWludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBkb3VibGUg cm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fcm91bmQgKGRvdWJs ZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZG91YmxlIHRydW5jIChkb3VibGUgX194KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBkb3VibGUgX190cnVuYyAo ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGRvdWJsZSByZW1xdW8gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRo cm93ICgpOyBleHRlcm4gZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBp bnQgKl9fcXVvKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50IChkb3VibGUg X194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93 ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludCAoZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4 dGVybiBsb25nIGludCBscm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBp bnQgX19scm91bmQgKGRvdWJsZSBfX3gpIHRocm93ICgpOwpleHRlcm4gbG9uZyBsb25nIGludCBs bHJvdW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJv dW5kIChkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUg X194LCBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGRvdWJsZSBfX2ZkaW0gKGRvdWJsZSBf X3gsIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBkb3VibGUgZm1heCAoZG91YmxlIF9f eCwgZG91YmxlIF9feSkgdGhyb3cgKCk7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUgX194 LCBkb3VibGUgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZG91YmxlIGZtaW4gKGRvdWJsZSBfX3gs IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1pbiAoZG91YmxlIF9feCwg ZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0 ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKQogICAgIF9fYXR0cmli dXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGRvdWJsZSBmbWEgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3ksIGRvdWJsZSBfX3opIHRocm93ICgpOyBleHRlcm4gZG91YmxlIF9fZm1hIChkb3Vi bGUgX194LCBkb3VibGUgX195LCBkb3VibGUgX196KSB0aHJvdyAoKTsKIyA2NCAiL3Vzci9pbmNs dWRlL21hdGguaCIgMiAzCiMgODIgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMSAzCiMgNTQgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhj YWxscy5oIiAzCmV4dGVybiBmbG9hdCBhY29zZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxvYXQgYXNpbmYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2FzaW5mIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4g ZmxvYXQgX19hdGFuZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCBhdGFuMmYg KGZsb2F0IF9feSwgZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXRhbjJmIChm bG9hdCBfX3ksIGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGNvc2YgKGZsb2F0 IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2Nvc2YgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CgpleHRlcm4gZmxvYXQgc2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f c2luZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCmV4dGVybiBmbG9hdCB0YW5mIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpl eHRlcm4gdm9pZCBzaW5jb3NmIChmbG9hdCBfX3gsIGZsb2F0ICpfX3NpbngsIGZsb2F0ICpfX2Nv c3gpIHRocm93ICgpOyBleHRlcm4gdm9pZCBfX3NpbmNvc2YgKGZsb2F0IF9feCwgZmxvYXQgKl9f c2lueCwgZmxvYXQgKl9fY29zeCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAo ZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fY29zaGYgKGZsb2F0IF9feCkgdGhy b3cgKCk7CgpleHRlcm4gZmxvYXQgc2luaGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBm bG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IHRhbmhmIChm bG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX190YW5oZiAoZmxvYXQgX194KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGZsb2F0IF9fYWNvc2hmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGFzaW5o ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gp IHRocm93ICgpOwoKZXh0ZXJuIGZsb2F0IGF0YW5oZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0 ZXJuIGZsb2F0IF9fYXRhbmhmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoKCmV4dGVybiBmbG9h dCBleHBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19leHBmIChmbG9hdCBf X3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZXhwMTBmIChmbG9hdCBfX3gpIHRocm93ICgp OyBleHRlcm4gZmxvYXQgX19leHAxMGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgpleHRlcm4gZmxv YXQgcG93MTBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19wb3cxMGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBmcmV4cGYgKGZsb2F0IF9feCwgaW50 ICpfX2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZnJleHBmIChmbG9hdCBfX3gs IGludCAqX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxkZXhwZiAoZmxvYXQg X194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxv YXQgX194LCBpbnQgX19leHBvbmVudCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0IGxvZ2YgKGZs b2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2xvZ2YgKGZsb2F0IF9feCkgdGhyb3cg KCk7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxvYXQgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGZs b2F0IF9fbG9nMTBmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBtb2RmZiAo ZmxvYXQgX194LCBmbG9hdCAqX19pcHRyKSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fbW9kZmYg KGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCBleHBt MWYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2V4cG0xZiAoZmxvYXQgX194 KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIHRocm93ICgpOyBl eHRlcm4gZmxvYXQgX19sb2cxcGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZsb2F0 IGxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2diZiAoZmxvYXQg X194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBmbG9hdCBleHAyZiAoZmxvYXQgX194KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fZXhwMmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGZs b2F0IGxvZzJmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sb2cyZiAoZmxv YXQgX194KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGZsb2F0IHBvd2YgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcG93ZiAoZmxvYXQgX194LCBmbG9hdCBf X3kpIHRocm93ICgpOwoKCmV4dGVybiBmbG9hdCBzcXJ0ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGZsb2F0IF9fc3FydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9h dCBoeXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9f aHlwb3RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gZmxvYXQg Y2JydGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBf X3gpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgY2VpbGYgKGZsb2F0IF9feCkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2NlaWxmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCmV4dGVybiBm bG9hdCBmYWJzZiAoZmxvYXQgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9f KSk7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9hdCBfX3gpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19mbG9vcmYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJu IGZsb2F0IGZtb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7IGV4dGVybiBmbG9h dCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IF9faXNpbmZmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVybiBpbnQgaXNpbmZmIChmbG9hdCBf X3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGlu dCBmaW5pdGVmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKZXh0ZXJuIGZsb2F0IGRyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cg KCk7IGV4dGVybiBmbG9hdCBfX2RyZW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCk7 CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBmbG9hdCBfX3NpZ25pZmljYW5kZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBm bG9hdCBjb3B5c2lnbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0 ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBmbG9hdCBfX2NvcHlzaWduZiAoZmxvYXQgX194LCBm bG9hdCBfX3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBmbG9hdCBuYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFnYikgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uYW5mIChfX2NvbnN0IGNoYXIgKl9fdGFn YikgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBf X2lzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gaW50IGlzbmFuZiAoZmxvYXQgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRy aWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBmbG9hdCBqMGYgKGZsb2F0KSB0aHJvdyAo KTsgZXh0ZXJuIGZsb2F0IF9fajBmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBqMWYg KGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fajFmIChmbG9hdCkgdGhyb3cgKCk7CmV4 dGVybiBmbG9hdCBqbmYgKGludCwgZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19qbmYg KGludCwgZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTBmIChmbG9hdCkgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3kwZiAoZmxvYXQpIHRocm93ICgpOwpleHRlcm4gZmxvYXQgeTFmIChm bG9hdCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3kxZiAoZmxvYXQpIHRocm93ICgpOwpleHRl cm4gZmxvYXQgeW5mIChpbnQsIGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9feW5mIChp bnQsIGZsb2F0KSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gZmxvYXQgZXJmZiAoZmxvYXQpIHRocm93 ICgpOyBleHRlcm4gZmxvYXQgX19lcmZmIChmbG9hdCkgdGhyb3cgKCk7CmV4dGVybiBmbG9hdCBl cmZjZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19lcmZjZiAoZmxvYXQpIHRocm93 ICgpOwpleHRlcm4gZmxvYXQgbGdhbW1hZiAoZmxvYXQpIHRocm93ICgpOyBleHRlcm4gZmxvYXQg X19sZ2FtbWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0Z2FtbWFmIChmbG9h dCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3RnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsKCgoK CmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZ2Ft bWFmIChmbG9hdCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBmbG9hdCBsZ2FtbWFmX3IgKGZsb2F0 LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFmX3IgKGZs b2F0LCBpbnQgKl9fc2lnbmdhbXApIHRocm93ICgpOwoKCgoKCgpleHRlcm4gZmxvYXQgcmludGYg KGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3JpbnRmIChmbG9hdCBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBmbG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX19uZXh0 YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f Y29uc3RfXykpOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dhcmRmIChmbG9hdCBfX3gsIGxvbmcgZG91 YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxv YXQgX19uZXh0dG93YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpIF9f YXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFpbmRlcmYgKGZs b2F0IF9feCwgZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtYWluZGVyZiAo ZmxvYXQgX194LCBmbG9hdCBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgc2NhbGJmIChm bG9hdCBfX3gsIGZsb2F0IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxv YXQgX194LCBmbG9hdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGZsb2F0IHNjYWxibmYgKGZs b2F0IF9feCwgaW50IF9fbikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX3NjYWxibmYgKGZsb2F0 IF9feCwgaW50IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgaWxvZ2JmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gaW50IF9faWxvZ2JmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgoK ZXh0ZXJuIGZsb2F0IHNjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cgKCk7 IGV4dGVybiBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgdGhyb3cg KCk7CgoKCmV4dGVybiBmbG9hdCBuZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRl cm4gZmxvYXQgX19uZWFyYnlpbnRmIChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxv YXQgcm91bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gZmxvYXQgX19yb3VuZGYgKGZs b2F0IF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBmbG9hdCB0cnVuY2YgKGZsb2F0IF9feCkgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOyBleHRlcm4gZmxvYXQgX190cnVuY2Yg KGZsb2F0IF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGZsb2F0IHJlbXF1b2YgKGZsb2F0IF9feCwgZmxvYXQgX195LCBpbnQgKl9fcXVvKSB0aHJv dyAoKTsgZXh0ZXJuIGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAq X19xdW8pIHRocm93ICgpOwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgbHJpbnRmIChmbG9hdCBfX3gp IHRocm93ICgpOyBleHRlcm4gbG9uZyBpbnQgX19scmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7 CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVy biBsb25nIGxvbmcgaW50IF9fbGxyaW50ZiAoZmxvYXQgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJu IGxvbmcgaW50IGxyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBf X2xyb3VuZGYgKGZsb2F0IF9feCkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscm91 bmRmIChmbG9hdCBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmRm IChmbG9hdCBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZmRpbWYgKGZsb2F0IF9feCwgZmxv YXQgX195KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1heGYgKGZsb2F0IF9feCwgZmxvYXQg X195KSB0aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxvYXQgX195 KSB0aHJvdyAoKTsKCgpleHRlcm4gZmxvYXQgZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0 aHJvdyAoKTsgZXh0ZXJuIGZsb2F0IF9fZm1pbmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSB0aHJv dyAoKTsKCgoKZXh0ZXJuIGludCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKSB0aHJvdyAo KQogICAgIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IF9fc2lnbmJp dGYgKGZsb2F0IF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3Rf XykpOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGZsb2F0IF9f eikgdGhyb3cgKCk7IGV4dGVybiBmbG9hdCBfX2ZtYWYgKGZsb2F0IF9feCwgZmxvYXQgX195LCBm bG9hdCBfX3opIHRocm93ICgpOwojIDgzICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA5OSAi L3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5o IiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGxvbmcg ZG91YmxlIGFjb3NsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJs ZSBhc2lubCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f YXNpbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRh bmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5s IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW4ybCAo bG9uZyBkb3VibGUgX195LCBsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKCgpleHRlcm4gbG9uZyBkb3VibGUgY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY29zbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4g bG9uZyBkb3VibGUgX19zaW5sIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKZXh0ZXJuIGxv bmcgZG91YmxlIHRhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRv dWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIHNp bmNvc2wgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9fc2lueCwgbG9uZyBkb3VibGUg Kl9fY29zeCkgdGhyb3cgKCk7IGV4dGVybiB2b2lkIF9fc2luY29zbCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSAqX19zaW54LCBsb25nIGRvdWJsZSAqX19jb3N4KSB0aHJvdyAoKTsKCgoK CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBl eHRlcm4gbG9uZyBkb3VibGUgX19jb3NobCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4 dGVybiBsb25nIGRvdWJsZSBzaW5obCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4g bG9uZyBkb3VibGUgdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25n IGRvdWJsZSBfX3RhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgpleHRlcm4gbG9u ZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBk b3VibGUgX19hY29zaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBk b3VibGUgYXNpbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19hc2luaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgpleHRlcm4gbG9uZyBkb3Vi bGUgYXRhbmhsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19hdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBf X2V4cGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBl eHAxMGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4 cDEwbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCmV4dGVybiBsb25nIGRvdWJsZSBwb3cx MGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3BvdzEw bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZyZXhw bCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19mcmV4cGwgKGxvbmcgZG91YmxlIF9feCwgaW50ICpfX2V4cG9uZW50KSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbGRleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCBf X2V4cG9uZW50KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRv dWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUg bG9nbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbG9n bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBs IChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2cxMGwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG1vZGZsIChs b25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX2lwdHIpIHRocm93ICgpOyBleHRlcm4gbG9u ZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19pcHRyKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cG0xbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXhwbTFsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZzFwbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgp OyBleHRlcm4gbG9uZyBkb3VibGUgX19leHAybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsK CgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2xvZzJsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoK CgpleHRlcm4gbG9uZyBkb3VibGUgcG93bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19wb3dsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNxcnRsIChs b25nIGRvdWJsZSBfX3gpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19zcXJ0bCAobG9u ZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19oeXBvdGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBjYnJ0bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2JydGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK CgoKCmV4dGVybiBsb25nIGRvdWJsZSBjZWlsbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2VpbGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpIF9fYXR0 cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcg ZG91YmxlIF9feCkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVy biBsb25nIGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2Zsb29ybCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsKCgpleHRlcm4g bG9uZyBkb3VibGUgZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1vZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgX19pc2luZmwgKGxvbmcgZG91Ymxl IF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4g aW50IF9fZmluaXRlbCAobG9uZyBkb3VibGUgX192YWx1ZSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVf XyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGludCBpc2luZmwgKGxvbmcgZG91YmxlIF9fdmFs dWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgpleHRlcm4gaW50IGZp bml0ZWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCgpleHRlcm4gbG9uZyBkb3VibGUgZHJlbWwgKGxvbmcgZG91YmxlIF9feCwgbG9u ZyBkb3VibGUgX195KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZHJlbWwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91 YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc2lnbmlmaWNhbmRsIChsb25nIGRvdWJsZSBfX3gpIHRocm93ICgpOwoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGNvcHlzaWdubCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBf X3kpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5h bmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKF9fY29uc3QgY2hhciAqX190YWdiKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCgpleHRlcm4gaW50IF9faXNu YW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCmV4dGVybiBpbnQgaXNuYW5sIChsb25nIGRvdWJsZSBfX3ZhbHVlKSB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGowbCAo bG9uZyBkb3VibGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMGwgKGxvbmcgZG91 YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19qMWwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0 ZXJuIGxvbmcgZG91YmxlIGpubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBs b25nIGRvdWJsZSBfX2pubCAoaW50LCBsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25n IGRvdWJsZSB5MGwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f eTBsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5MWwgKGxvbmcg ZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9feTFsIChsb25nIGRvdWJsZSkg dGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSB5bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93 ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIHRocm93ICgp OwoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBlcmZsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4 dGVybiBsb25nIGRvdWJsZSBfX2VyZmwgKGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKZXh0ZXJuIGxv bmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJs ZSBfX2VyZmNsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7CmV4dGVybiBsb25nIGRvdWJsZSBsZ2Ft bWFsIChsb25nIGRvdWJsZSkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwg KGxvbmcgZG91YmxlKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRnYW1tYWwgKGxv bmcgZG91YmxlKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGdhbW1hbCAobG9uZyBk b3VibGUpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3Vi bGUpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19nYW1tYWwgKGxvbmcgZG91YmxlKSB0 aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxnYW1tYWxfciAobG9uZyBkb3VibGUs IGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWxf ciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiBs b25nIGRvdWJsZSByaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fcmludGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcg ZG91YmxlIG5leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJv dyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25l eHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0 dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgpleHRlcm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwg KGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9f ICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29u c3RfXykpOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9uZyBkb3VibGUgX194 LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1haW5k ZXJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgdGhyb3cgKCk7CgoKCmV4dGVy biBsb25nIGRvdWJsZSBzY2FsYmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX19uKSB0 aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9fbikgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJubCAo bG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9f c2NhbGJubCAobG9uZyBkb3VibGUgX194LCBpbnQgX19uKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGlu dCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7IGV4dGVybiBpbnQgX19pbG9nYmwg KGxvbmcgZG91YmxlIF9feCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgc2NhbGJs bmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSB0aHJvdyAo KTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX25lYXJieWludGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGRvdWJsZSBfX3JvdW5kbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHRydW5jbCAobG9uZyBkb3VibGUgX194KSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7IGV4dGVybiBsb25nIGRvdWJsZSBf X3RydW5jbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25z dF9fKSk7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtcXVvbCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3ksIGludCAqX19xdW8pIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUg X19yZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykg dGhyb3cgKCk7CgoKCgoKCmV4dGVybiBsb25nIGludCBscmludGwgKGxvbmcgZG91YmxlIF9feCkg dGhyb3cgKCk7IGV4dGVybiBsb25nIGludCBfX2xyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50bCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIHRo cm93ICgpOwoKCgpleHRlcm4gbG9uZyBpbnQgbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJv dyAoKTsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSB0aHJvdyAo KTsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhyb3cg KCk7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgdGhy b3cgKCk7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mZGltbCAobG9uZyBk b3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJs ZSBmbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRl cm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kp IHRocm93ICgpOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWlubCAobG9uZyBkb3VibGUgX194LCBs b25nIGRvdWJsZSBfX3kpIHRocm93ICgpOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWlubCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIHRocm93ICgpOwoKCgpleHRlcm4gaW50IF9f ZnBjbGFzc2lmeWwgKGxvbmcgZG91YmxlIF9fdmFsdWUpIHRocm93ICgpCiAgICAgX19hdHRyaWJ1 dGVfXyAoKF9fY29uc3RfXykpOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBkb3VibGUg X192YWx1ZSkgdGhyb3cgKCkKICAgICBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CgoKCmV4 dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwg bG9uZyBkb3VibGUgX196KSB0aHJvdyAoKTsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1hbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feikgdGhyb3cgKCk7 CiMgMTAwICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKIyAxMTMgIi91c3IvaW5jbHVkZS9tYXRo LmgiIDMKZXh0ZXJuIGludCBzaWduZ2FtOwojIDE1NCAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpl bnVtCiAgewogICAgRlBfTkFOLAoKICAgIEZQX0lORklOSVRFLAoKICAgIEZQX1pFUk8sCgogICAg RlBfU1VCTk9STUFMLAoKICAgIEZQX05PUk1BTAoKICB9OwojIDI0MCAiL3Vzci9pbmNsdWRlL21h dGguaCIgMwp0eXBlZGVmIGVudW0KewogIF9JRUVFXyA9IC0xLAogIF9TVklEXywKICBfWE9QRU5f LAogIF9QT1NJWF8sCiAgX0lTT0NfCn0gX0xJQl9WRVJTSU9OX1RZUEU7CgoKCgpleHRlcm4gX0xJ Ql9WRVJTSU9OX1RZUEUgX0xJQl9WRVJTSU9OOwojIDI2MyAiL3Vzci9pbmNsdWRlL21hdGguaCIg MwpzdHJ1Y3QgX19leGNlcHRpb24KCgoKICB7CiAgICBpbnQgdHlwZTsKICAgIGNoYXIgKm5hbWU7 CiAgICBkb3VibGUgYXJnMTsKICAgIGRvdWJsZSBhcmcyOwogICAgZG91YmxlIHJldHZhbDsKICB9 OwoKCmV4dGVybiBpbnQgbWF0aGVyciAoc3RydWN0IF9fZXhjZXB0aW9uICpfX2V4YykgdGhyb3cg KCk7CiMgNDExICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCn0KIyAzMTMgImluY2x1ZGUvVE1hdGgu aCIgMgojIDM0NSAiaW5jbHVkZS9UTWF0aC5oIgppbmxpbmUgRG91YmxlX3QgVE1hdGg6OlNpbihE b3VibGVfdCB4KQogICB7IHJldHVybiBzaW4oeCk7IH0KCmlubGluZSBEb3VibGVfdCBUTWF0aDo6 Q29zKERvdWJsZV90IHgpCiAgIHsgcmV0dXJuIGNvcyh4KTsgfQoKaW5saW5lIERvdWJsZV90IFRN YXRoOjpUYW4oRG91YmxlX3QgeCkKICAgeyByZXR1cm4gdGFuKHgpOyB9CgppbmxpbmUgRG91Ymxl X3QgVE1hdGg6OlNpbkgoRG91YmxlX3QgeCkKICAgeyByZXR1cm4gc2luaCh4KTsgfQoKaW5saW5l IERvdWJsZV90IFRNYXRoOjpDb3NIKERvdWJsZV90IHgpCiAgIHsgcmV0dXJuIGNvc2goeCk7IH0K CmlubGluZSBEb3VibGVfdCBUTWF0aDo6VGFuSChEb3VibGVfdCB4KQogICB7IHJldHVybiB0YW5o KHgpOyB9CgppbmxpbmUgRG91YmxlX3QgVE1hdGg6OkFTaW4oRG91YmxlX3QgeCkKICAgeyByZXR1 cm4gYXNpbih4KTsgfQoKaW5saW5lIERvdWJsZV90IFRNYXRoOjpBQ29zKERvdWJsZV90IHgpCiAg IHsgcmV0dXJuIGFjb3MoeCk7IH0KCmlubGluZSBEb3VibGVfdCBUTWF0aDo6QVRhbihEb3VibGVf dCB4KQogICB7IHJldHVybiBhdGFuKHgpOyB9CgppbmxpbmUgRG91YmxlX3QgVE1hdGg6OkFUYW4y KERvdWJsZV90IHksIERvdWJsZV90IHgpCiAgIHsgcmV0dXJuIHggIT0gMCA/IGF0YW4yKHksIHgp IDogKHkgPiAwID8gUGkoKS8yIDogLVBpKCkvMik7IH0KCmlubGluZSBEb3VibGVfdCBUTWF0aDo6 U3FydChEb3VibGVfdCB4KQogICB7IHJldHVybiBzcXJ0KHgpOyB9CgppbmxpbmUgRG91YmxlX3Qg VE1hdGg6OkV4cChEb3VibGVfdCB4KQogICB7IHJldHVybiBleHAoeCk7IH0KCmlubGluZSBEb3Vi bGVfdCBUTWF0aDo6UG93ZXIoRG91YmxlX3QgeCwgRG91YmxlX3QgeSkKICAgeyByZXR1cm4gcG93 KHgsIHkpOyB9CgppbmxpbmUgRG91YmxlX3QgVE1hdGg6OkxvZyhEb3VibGVfdCB4KQogICB7IHJl dHVybiBsb2coeCk7IH0KCmlubGluZSBEb3VibGVfdCBUTWF0aDo6TG9nMTAoRG91YmxlX3QgeCkK ICAgeyByZXR1cm4gbG9nMTAoeCk7IH0KCmlubGluZSBJbnRfdCBUTWF0aDo6RmluaXRlKERvdWJs ZV90IHgpCiAgIHsgcmV0dXJuIGZpbml0ZSh4KTsgfQoKaW5saW5lIEludF90IFRNYXRoOjpJc05h TihEb3VibGVfdCB4KQogICB7IHJldHVybiAoc2l6ZW9mICh4KSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9faXNuYW5mICh4KSA6IHNpemVvZiAoeCkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc25hbiAo eCkgOiBfX2lzbmFubCAoeCkpOyB9CgoKCmlubGluZSBGbG9hdF90IFRNYXRoOjpOb3JtQ3Jvc3Mo RmxvYXRfdCB2MVszXSxGbG9hdF90IHYyWzNdLEZsb2F0X3Qgb3V0WzNdKQp7CgogICByZXR1cm4g Tm9ybWFsaXplKENyb3NzKHYxLHYyLG91dCkpOwp9CgppbmxpbmUgRG91YmxlX3QgVE1hdGg6Ok5v cm1Dcm9zcyhEb3VibGVfdCB2MVszXSxEb3VibGVfdCB2MlszXSxEb3VibGVfdCBvdXRbM10pCnsK CiAgIHJldHVybiBOb3JtYWxpemUoQ3Jvc3ModjEsdjIsb3V0KSk7Cn0KIyAyICJnbnVidWcuY3Bw IiAyCgojIDEgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMSAzCiMgMjggIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwpleHRlcm4gIkMiIHsKCgoKCiMgMSAiL29wdC9nY2MtcHJlMy4xL2xpYi9nY2Mt bGliL2lhNjQtdW5rbm93bi1saW51eC8zLjEvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzQgIi91 c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKCmV4dGVybiB2b2lkICptZW1jcHkgKHZvaWQgKl9f cmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkICptZW1tb3Zl ICh2b2lkICpfX2Rlc3QsIF9fY29uc3Qgdm9pZCAqX19zcmMsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCk7CgoKCgoKZXh0ZXJuIHZvaWQgKm1lbWNjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19kZXN0 LCBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBp bnQgX19jLCBzaXplX3QgX19uKQogICAgIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgKm1lbXNl dCAodm9pZCAqX19zLCBpbnQgX19jLCBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50 IG1lbWNtcCAoX19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBf X24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIHZv aWQgKm1lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAg IHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIHZvaWQgKnJh d21lbWNociAoX19jb25zdCB2b2lkICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRl X18gKChfX3B1cmVfXykpOwoKCmV4dGVybiB2b2lkICptZW1yY2hyIChfX2NvbnN0IHZvaWQgKl9f cywgaW50IF9fYywgc2l6ZV90IF9fbikKICAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCgpleHRlcm4gY2hhciAqc3RyY3B5IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVz dCwgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJu IGNoYXIgKnN0cm5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAg ICAgICAgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjLCBzaXplX3QgX19uKSB0aHJvdyAo KTsKCgpleHRlcm4gY2hhciAqc3RyY2F0IChjaGFyICpfX3Jlc3RyaWN0IF9fZGVzdCwgX19jb25z dCBjaGFyICpfX3Jlc3RyaWN0IF9fc3JjKQogICAgIHRocm93ICgpOwoKZXh0ZXJuIGNoYXIgKnN0 cm5jYXQgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uKSB0aHJvdyAoKTsKCgpleHRl cm4gaW50IHN0cmNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAg ICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gaW50IHN0cm5j bXAgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLCBzaXplX3QgX19uKQog ICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCmV4dGVybiBpbnQgc3Ry Y29sbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gc2l6ZV90IHN0cnhmcm0gKGNo YXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hh ciAqX19yZXN0cmljdCBfX3NyYywgc2l6ZV90IF9fbikgdGhyb3cgKCk7CgoKCgoKIyAxICIvdXNy L2luY2x1ZGUveGxvY2FsZS5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3hsb2NhbGUuaCIgMwp0 eXBlZGVmIHN0cnVjdCBfX2xvY2FsZV9zdHJ1Y3QKewoKICBzdHJ1Y3QgbG9jYWxlX2RhdGEgKl9f bG9jYWxlc1sxM107CgoKICBjb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKl9fY3R5cGVfYjsKICBj b25zdCBpbnQgKl9fY3R5cGVfdG9sb3dlcjsKICBjb25zdCBpbnQgKl9fY3R5cGVfdG91cHBlcjsK fSAqX19sb2NhbGVfdDsKIyAxMDkgIi91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMiAzCgoKZXh0ZXJu IGludCBfX3N0cmNvbGxfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIs IF9fbG9jYWxlX3QgX19sKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykp OwoKZXh0ZXJuIHNpemVfdCBfX3N0cnhmcm1fbCAoY2hhciAqX19kZXN0LCBfX2NvbnN0IGNoYXIg Kl9fc3JjLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90 IF9fbCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAqc3RyZHVwIChfX2NvbnN0IGNoYXIgKl9f cykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKCgoKCgoKZXh0ZXJuIGNo YXIgKnN0cm5kdXAgKF9fY29uc3QgY2hhciAqX19zdHJpbmcsIHNpemVfdCBfX24pCiAgICAgdGhy b3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fbWFsbG9jX18pKTsKIyAxNTUgIi91c3IvaW5jbHVkZS9z dHJpbmcuaCIgMwpleHRlcm4gY2hhciAqc3RyY2hyIChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9f YykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ry cmNociAoX19jb25zdCBjaGFyICpfX3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18g KChfX3B1cmVfXykpOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cmNocm51bCAoX19jb25zdCBjaGFyICpf X3MsIGludCBfX2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgoKZXh0 ZXJuIHNpemVfdCBzdHJjc3BuIChfX2NvbnN0IGNoYXIgKl9fcywgX19jb25zdCBjaGFyICpfX3Jl amVjdCkKICAgICB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgpleHRlcm4g c2l6ZV90IHN0cnNwbiAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAq c3RycGJyayAoX19jb25zdCBjaGFyICpfX3MsIF9fY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgpleHRlcm4gY2hhciAqc3Ryc3Ry IChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFyICpzdHJj YXNlc3RyIChfX2NvbnN0IGNoYXIgKl9faGF5c3RhY2ssIF9fY29uc3QgY2hhciAqX19uZWVkbGUp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCmV4dGVybiBjaGFy ICpzdHJ0b2sgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3Qg X19kZWxpbSkKICAgICB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKl9fc3RydG9rX3IgKGNoYXIg Kl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqX19yZXN0 cmljdCBfX3NhdmVfcHRyKSB0aHJvdyAoKTsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAq X19yZXN0cmljdCBfX3MsIF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2RlbGltLAogICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKipfX3Jlc3RyaWN0IF9fc2F2ZV9wdHIpIHRocm93ICgpOwoK CgoKCgpleHRlcm4gdm9pZCAqbWVtbWVtIChfX2NvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVf dCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fbmVl ZGxlLCBzaXplX3QgX19uZWVkbGVsZW4pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKCmV4dGVybiB2b2lkICpfX21lbXBjcHkgKHZvaWQgKl9fcmVzdHJpY3QgX19k ZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVzdHJpY3QgX19z cmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gdm9pZCAqbWVtcGNweSAodm9pZCAqX19y ZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHZvaWQgKl9fcmVz dHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCgoKZXh0ZXJuIHNpemVfdCBzdHJs ZW4gKF9fY29uc3QgY2hhciAqX19zKSB0aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18p KTsKCgoKCmV4dGVybiBzaXplX3Qgc3RybmxlbiAoX19jb25zdCBjaGFyICpfX3N0cmluZywgc2l6 ZV90IF9fbWF4bGVuKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIHRocm93ICgpOwoKCgpleHRl cm4gY2hhciAqc3RyZXJyb3JfciAoaW50IF9fZXJybnVtLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKSB0aHJvdyAoKTsKCgoKCmV4dGVybiB2b2lkIF9fYnplcm8gKHZvaWQgKl9fcywgc2l6 ZV90IF9fbikgdGhyb3cgKCk7CgoKCmV4dGVybiB2b2lkIGJjb3B5IChfX2NvbnN0IHZvaWQgKl9f c3JjLCB2b2lkICpfX2Rlc3QsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiB2b2lkIGJ6 ZXJvICh2b2lkICpfX3MsIHNpemVfdCBfX24pIHRocm93ICgpOwoKCmV4dGVybiBpbnQgYmNtcCAo X19jb25zdCB2b2lkICpfX3MxLCBfX2NvbnN0IHZvaWQgKl9fczIsIHNpemVfdCBfX24pCiAgICAg dGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKmluZGV4 IChfX2NvbnN0IGNoYXIgKl9fcywgaW50IF9fYykgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9f cHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnJpbmRleCAoX19jb25zdCBjaGFyICpfX3MsIGludCBf X2MpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKCgpleHRlcm4gaW50IGZm cyAoaW50IF9faSkgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fY29uc3RfXykpOwoKCgoKZXh0 ZXJuIGludCBmZnNsIChsb25nIGludCBfX2wpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2Nv bnN0X18pKTsKCl9fZXh0ZW5zaW9uX18gZXh0ZXJuIGludCBmZnNsbCAobG9uZyBsb25nIGludCBf X2xsKQogICAgIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgc3RyY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIp CiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGludCBz dHJuY2FzZWNtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIsIHNpemVf dCBfX24pCiAgICAgdGhyb3cgKCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKCgoKZXh0 ZXJuIGludCBfX3N0cmNhc2VjbXBfbCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIg Kl9fczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIHRocm93 ICgpIF9fYXR0cmlidXRlX18gKChfX3B1cmVfXykpOwoKZXh0ZXJuIGludCBfX3N0cm5jYXNlY21w X2wgKF9fY29uc3QgY2hhciAqX19zMSwgX19jb25zdCBjaGFyICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xvYykKICAgICB0aHJvdyAo KSBfX2F0dHJpYnV0ZV9fICgoX19wdXJlX18pKTsKCgoKCgpleHRlcm4gY2hhciAqc3Ryc2VwIChj aGFyICoqX19yZXN0cmljdCBfX3N0cmluZ3AsCiAgICAgICAgICAgICAgICAgICAgIF9fY29uc3Qg Y2hhciAqX19yZXN0cmljdCBfX2RlbGltKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc3RydmVy c2NtcCAoX19jb25zdCBjaGFyICpfX3MxLCBfX2NvbnN0IGNoYXIgKl9fczIpCiAgICAgdGhyb3cg KCkgX19hdHRyaWJ1dGVfXyAoKF9fcHVyZV9fKSk7CgoKZXh0ZXJuIGNoYXIgKnN0cnNpZ25hbCAo aW50IF9fc2lnKSB0aHJvdyAoKTsKCgpleHRlcm4gY2hhciAqX19zdHBjcHkgKGNoYXIgKl9fcmVz dHJpY3QgX19kZXN0LCBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cg KCk7CmV4dGVybiBjaGFyICpzdHBjcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LCBfX2NvbnN0 IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMpCiAgICAgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpf X3N0cG5jcHkgKGNoYXIgKl9fcmVzdHJpY3QgX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRocm93ICgpOwpl eHRlcm4gY2hhciAqc3RwbmNweSAoY2hhciAqX19yZXN0cmljdCBfX2Rlc3QsCiAgICAgICAgICAg ICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19zcmMsIHNpemVfdCBfX24pIHRo cm93ICgpOwoKCmV4dGVybiBjaGFyICpzdHJmcnkgKGNoYXIgKl9fc3RyaW5nKSB0aHJvdyAoKTsK CgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSB0aHJvdyAoKTsK CgoKCgoKZXh0ZXJuIGNoYXIgKmJhc2VuYW1lIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIHRo cm93ICgpOwojIDM2NCAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA0ICJnbnVidWcuY3Bw IiAyCiMgMjAgImdudWJ1Zy5jcHAiClVMb25nX3QgVE1hdGg6Okhhc2goY29uc3Qgdm9pZCAqdHh0 LCBJbnRfdCBudHh0KQp7CiMgMzkgImdudWJ1Zy5jcHAiCiAgIHN0YXRpYyBjb25zdCBVTG9uZ190 IHV0YWJbXSA9IHsKICAgICAgIDB4ZGQzNjc2NDcsMHg5Y2FmOTkzZiwweDNmM2NjNWZmLDB4ZmRl MjUwODIsMHg0Yzc2NGIyMSwweDg5YWZmY2E3LDB4NTQzMTk2NWMsMHhjZTIyZWVlYwogICAgICAs MHhjNjFhYjRkYywweDU5Y2M5M2JkLDB4ZWQzMTA3ZTMsMHgwYjBhMjg3YSwweDQ3MTI0NzVhLDB4 Y2U0YTRjNzEsMHgzNTJjODQwMywweDk0Y2IzY2VlCiAgICAgICwweGMzYWM1MDliLDB4MDlmODI3 YTIsMHhjZTAyZTM3ZSwweDdiMjBiYmJhLDB4NzZhZGNlZGMsMHgxOGM1MjY2MywweDE5Zjc0MTAz LDB4NmYzMGU0N2IKICAgICAgLDB4MTMyZWE1YTEsMHhmZGQyNzllMCwweGEzZDU3ZDAwLDB4Y2Zm OWNiNDAsMHg5NjE3ZjM4NCwweDY0MTFhY2ZhLDB4ZmY5MDg2NzgsMHg1Yzc5NmIyYwogICAgICAs MHg0NDcxYjYyZCwweGQzOGUzMjc1LDB4ZGI1NzkxMmQsMHgyNmJmOTUzZiwweGZjNDFiMmE1LDB4 ZTY0YmNlYmQsMHgxOTBiNzgzOSwweDdlOGU2YTU2CiAgICAgICwweDljYTIyMzExLDB4ZWYyOGFh NjAsMHhlNmI5MjA4ZSwweGQyNTdmYjY1LDB4NDU3ODFjMmMsMHg5YTU1OGFjMywweDI3NDNlNzRk LDB4ODM5NDE3YTgKICAgICAgLDB4MDZiNTRkNWQsMHgxYTgyYmNiNCwweDA2ZTk3YTY2LDB4NzBh YmRkMDMsMHhkMTYzZjMwZCwweDIyMmVkMzIyLDB4Nzc3YmZlZGEsMHhhYjdhMmU4MwogICAgICAs MHg4NDk0ZTBjZiwweDJkY2EyZDRmLDB4NzhmOTQyNzgsMHgzM2YwNGEwOSwweDQwMmI2NDUyLDB4 MGNkOGI3MDksMHhkYjcyYTM5ZSwweDE3MGUwMGEyCiAgICAgICwweDI2MzU0ZmFhLDB4ODBlNTc0 NTMsMHhjZmU4ZDRlMSwweDE5ZTQ1MjU0LDB4MDRjMjkxYzMsMHhlYjUwMzczOCwweDQyNWFmM2Jj LDB4Njc4MzZmMmEKICAgICAgLDB4ZmFjMjJhZGQsMHhmYWZjMmI4YywweDU5YjhjMmEwLDB4MDNl ODA2ZjksMHhjYjQ5MzhiOSwweGNjYzk0MmFmLDB4Y2VlM2FlMmUsMHhmYmU3NDhmYQogICAgICAs MHhiMjIzYTA3NSwweDg1YzQ5YjVkLDB4ZTQ1NzZhYzksMHgwZmJkNDZlMiwweGI0OWY5Y2Y1LDB4 ZjNlMWU4NmEsMHg3ZDc5MjdmYiwweDcxMWFmZTEyCiAgICAgICwweGJmNjFjMzQ2LDB4MTU3Yzk5 NTYsMHg4NmI2YjA0NiwweDJlNDAyMTQ2LDB4YjJhNTdkOGEsMHgwZDA2NGJiMSwweDMwY2UzOTBj LDB4M2EzZTFlYjEKICAgICAgLDB4YmU3ZjZmOGYsMHhkOGUzMGY4NywweDViZTI4MTNjLDB4NzNh M2E5MDEsMHhhM2FhZjk2NywweDU5ZmYwOTJjLDB4MTcwNWM3OTgsMHhmNjEwZGQ2NgogICAgICAs MHhiMTdkYTkxZSwweDhlNTk1MzRlLDB4MjIxMWVhNWIsMHhhODA0YmEwMywweGQ4OTBlZmJiLDB4 YjhiNDgxMTAsMHhmZjM5MDA2OCwweGM4YzMyNWI0CiAgICAgICwweGY3Mjg5YzA3LDB4Nzg3ZTEw NGYsMHgzZDBkZjNkMCwweDM1MjY3OTZkLDB4MTA1NDgwNTUsMHgxZDU5YTQyYiwweGVkMWNjNWEz LDB4ZGQ0NTM3MmEKICAgICAgLDB4MzFjNTBkNTcsMHg2NTc1N2NiNywweDNjZmI4NWJlLDB4YTMy OTkxMGQsMHg2YWQ4Y2UzOSwweGEyZGU0NGRlLDB4MGRkMzI0MzIsMHhkNGE1YjYxNwogICAgICAs MHg4ZjMxMDdmYywweDk2NDg1MTc1LDB4N2Y5NGQ0ZjMsMHgzNTA5NzYzNCwweGRiM2NhNzgyLDB4 MmMwMjkwYjgsMHgyMDQ1MzAwYiwweGUwZjVkMTVhCiAgICAgICwweDBlOGNiZmZhLDB4YWExY2Mz OGEsMHg4NDAwOGQ2ZiwweGU5YTllNzk0LDB4NWM2MDJjMjUsMHhmYTM2NThmYSwweDk4ZDlkODJi LDB4M2YxNDk3ZTcKICAgICAgLDB4ODRiNmYwMzEsMHhlMzgxZWZmOSwweGZjN2FlMjUyLDB4YjIz OWUwNWQsMHhlMzcyM2QxZiwweGNjM2JkYTgyLDB4ZTIxYjFhZDMsMHg5MTA0ZjdjOAogICAgICAs MHg0YmIyZGZjZCwweDRkMTRhOGJjLDB4NmJhN2YyOGMsMHg4Zjg5ODg2YywweGFkNDRjOTdlLDB4 YjMwZmQ5NzUsMHg2MzNjZGFiMSwweGY2YzJkNTE0CiAgICAgICwweDA2N2E0OWQyLDB4ZGM0NjFh ZDksMHhlYmFmOWYzZiwweDhkYzZjYWMzLDB4N2EwNjBmMTYsMHhiYWIwNjNhZCwweGY0MmUyNWU2 LDB4NjA3MjRjYTYKICAgICAgLDB4YzcyNDVjMmUsMHg0ZTQ4ZWEzYywweDlmODlhNjA5LDB4YTFj NDk4OTAsMHg0YmI3ZjExNiwweGQ3MjI4NjVjLDB4YThlZTM5OTUsMHgwZWUwNzBiMQogICAgICAs MHhkOWJmZmNjMiwweGU1NWI2NGY5LDB4MjU1MDdhNWEsMHhjN2EzZTJiNSwweDVmMzk1ZjdlLDB4 ZTc5NTc2NTIsMHg3MzgxYmE2YSwweGRlM2QyMWYxCiAgICAgICwweGRmMTcwOGRkLDB4YWQwYzlk MGMsMHgwMGNiYzllNSwweDExNjBlODMzLDB4Njc3OTU4MmMsMHgyOWQ1ZDM5MywweDNmMTFkN2Q3 LDB4ODI2YTZiOWIKICAgICAgLDB4ZTczZmYxMmYsMHg4YmFkM2Q4NiwweGVlNDFkM2U1LDB4N2Yw Yzg5MTcsMHg4MDg5ZWYyNCwweDkwYzVjYjI4LDB4MmY3ZjhlNmIsMHg2OTY2NDE4YQogICAgICAs MHgzNDU0NTNmYiwweDdhMmY4YTY4LDB4ZjE5ODU5M2QsMHhjMDc5YTUzMiwweGMxOTcxZTgxLDB4 MWFiNzRlMjYsMHgzMjllZjM0NywweDc0MjNkM2QwCiAgICAgICwweDk0MmM1MTBiLDB4N2Y2YzYz ODIsMHgxNGFlNmFjYywweDY0YjU5ZGE3LDB4MjM1NmZhNDcsMHhiNjc0OWQ5YywweDQ5OWRlMWJi LDB4OTJmZmQxOTEKICAgICAgLDB4ZThmMmZiNzUsMHg4NDhkYzkxMywweDNlODcyN2QzLDB4MWRj ZmZlNjEsMHhiNmU0NTI0NSwweDQ5MDU1NzM4LDB4ODI3YTZiNTUsMHhiNDc4ODg4NwogICAgICAs MHg3ZTY4MDEyNSwweGQxOWNlN2VkLDB4NmI0YjhlMzAsMHhhOGNhZGVhMiwweDIxNjAzNWQ4LDB4 MWM2M2JjM2MsMHhlMTI5OTA1NiwweDFhZDNkZmY0CiAgICAgICwweDBhZWZkMTNjLDB4MGU3Yjky MWMsMHhjYTAxNzNjNiwweDk5OTU3ODJkLDB4Y2NjZmQ0OTQsMHhkNGIwYWM4OCwweDUzZDU1MmIx LDB4NjMwZGFlOGIKICAgICAgLDB4YTgzMzJkYWQsMHg3MTM5ZDlhMiwweDVkNzZmMmM0LDB4N2E0 ZjhmMWUsMHg4ZDFhZWY5NywweGQxY2YyODVkLDB4YzgyMzkxNTMsMHhjZTI2MDhhOQogICAgICAs MHg3YjU2MjQ3NSwweGU0YjRiYzgzLDB4ZjNkYjBjM2EsMHg3MGE2NWU0OCwweDYwMTZiMzAyLDB4 ZGViZDUwNDYsMHg3MDdlNzg2YSwweDZmMTAyMDBjCiAgIH07CgogICBzdGF0aWMgY29uc3QgVUxv bmdfdCBtc2tbXSA9IHsgMHgxMTExMTExMSwgMHgzMzMzMzMzMywgMHg3Nzc3Nzc3NywgMHhmZmZm ZmZmZiB9OwoKICAgY29uc3QgVUNoYXJfdCAqdWMgPSAoY29uc3QgVUNoYXJfdCAqKSB0eHQ7CiAg IFVMb25nX3QgdSA9IDAsIHV1ID0gMDsKICAgVVNob3J0X3QgKnMgPSAoVVNob3J0X3QgKikgJnU7 CiAgIEludF90IGksIGlkeDsKCiAgIGZvciAoaSA9IDA7IGkgPCBudHh0OyBpKyspIHsKICAgICAg aWR4ID0gKHVjW2ldIF4gaSkgJiAyNTU7CiAgICAgIHV1ID0gKHV1IDw8IDEpIF4gKHV0YWJbaWR4 XSAmIG1za1tpICYgM10pOwogICAgICBpZiAoaSAmIDMgPT0gMykgdSBePSB1dTsKICAgfQogICBp ZiAoaSAmIDMpIHUgXj0gdXU7CgogICB1ICo9IDE4NzkwNDgyMDE7CiAgIHNbMF0gKz0gc1sxXTsK ICAgdSAqPSAxOTc5MDQ4MTkxOwogICBzWzFdIF49IHNbMF07CiAgIHUgKj0gMjA3OTA0ODE5NzsK CiAgIHJldHVybiB1Owp9Cg==