From mboxrd@z Thu Jan 1 00:00:00 1970 From: gp@iws.it To: gcc-gnats@gcc.gnu.org Subject: optimization/3446: a bug already seen in gcc 2.95.[12] now in gcc 3.0 Date: Wed, 27 Jun 2001 10:06:00 -0000 Message-id: <20010627170307.5630.qmail@sourceware.cygnus.com> X-SW-Source: 2001-06/msg01130.html List-Id: >Number: 3446 >Category: optimization >Synopsis: a bug already seen in gcc 2.95.[12] now in gcc 3.0 >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Wed Jun 27 10:06:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: gcc 3.0 >Release: unknown-1.0 >Organization: >Environment: linux 2.4.5 ac 19 x86 >Description: This is a bug I saw four or five months ago related to gcc 2.95.2 (if I'm right). The attached program ,which i found on a site describing the bug , if compiled with no optimization or with -O gives correct results. when compiled with -O2 thru -O6 outputs wrong data. Using It i tested Gcc 3.0. And discovered it is broken ... aarggh! should I switch back to gcc 2.95.3 ? Here's the gcc -v output Reading specs from /usr/lib/gcc-lib/i686-pc-linux-gnu/3.0/specs Configured with: ../configure --prefix=/usr --exec-prefix=/usr Thread model: single gcc version 3.0 >How-To-Repeat: Compile and execute the attached program first using gcc -O gccbug.i -o gccbug -> ./gccbug -> correct then gcc -O[2-6] -o gccbug -> ./gccbug -> wrong >Fix: I cannot figure out but you should already know since it was fixed in gcc 2.95.3 ... >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="gccbug.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="gccbug.i" IyAxICJnY2NidWcuYyIKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu MC9pbmNsdWRlL3N0ZGlvLmgiIDEgMwojIDM2ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMu aCIgMSAzCiMgMjgzICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9zeXMvY2RlZnMuaCIgMSAzCiMgMjg0ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMg MzExICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1 YnMuaCIgMSAzCiMgMzEyICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMzcgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAzCgoK CgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAxOTkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDQzICIv dXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIg MwoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy90eXBlcy5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRl L2JpdHMvdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyNyAi L3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNs dWRlL2JpdHMvdHlwZXMuaCIgMiAzCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0 eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191 X2ludDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fdV9sb25nOwoKX19leHRlbnNpb25fXyB0eXBl ZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191X3F1YWRfdDsKX19leHRlbnNpb25fXyB0eXBl ZGVmIGxvbmcgbG9uZyBpbnQgX19xdWFkX3Q7CiMgNDkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDMKdHlwZWRlZiBzaWduZWQgY2hhciBfX2ludDhfdDsKdHlwZWRlZiB1bnNpZ25lZCBjaGFy IF9fdWludDhfdDsKdHlwZWRlZiBzaWduZWQgc2hvcnQgaW50IF9faW50MTZfdDsKdHlwZWRlZiB1 bnNpZ25lZCBzaG9ydCBpbnQgX191aW50MTZfdDsKdHlwZWRlZiBzaWduZWQgaW50IF9faW50MzJf dDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191aW50MzJfdDsKCl9fZXh0ZW5zaW9uX18gdHlwZWRl ZiBzaWduZWQgbG9uZyBsb25nIGludCBfX2ludDY0X3Q7Cl9fZXh0ZW5zaW9uX18gdHlwZWRlZiB1 bnNpZ25lZCBsb25nIGxvbmcgaW50IF9fdWludDY0X3Q7Cgp0eXBlZGVmIF9fcXVhZF90ICpfX3Fh ZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsKdHlwZWRlZiBfX3VfaW50IF9fdWlk X3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVmIF9fdV9sb25nIF9faW5vX3Q7CnR5 cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3VfaW50IF9fbmxpbmtfdDsKdHlwZWRl ZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90IF9fbG9mZl90Owp0eXBlZGVmIGlu dCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5cGVkZWYgX191X2xvbmcgX19ybGlt X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90 OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0 eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxv bmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VzZWNvbmRzX3Q7CnR5cGVk ZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIGludCBfX3N3YmxrX3Q7Cgp0 eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVmIGludCBfX2Nsb2NraWRfdDsKCgp0 eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYgaW50IF9fa2V5X3Q7CgoKdHlwZWRl ZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoKCnR5cGVkZWYgbG9uZyBpbnQgX19i bGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250X3Q7CnR5cGVkZWYgX19xdWFk X3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19mc2Jsa2NudF90Owp0eXBlZGVm IF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBfX3VfbG9uZyBfX2ZzZmlsY250 X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsKCgp0eXBlZGVmIF9fdV9xdWFk X3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19vZmY2NF90OwoKCnR5cGVkZWYgbG9u ZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IF9fdF91c2NhbGFy X3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3Nv Y2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwoj IDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMuaCIgMwojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAzCnN0 cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsKIyAy NCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDIgMwoKCnN0cnVjdCBfcHRocmVh ZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAgaW50IF9fc3BpbmxvY2s7Cgp9OwoK Cgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1Y3QgKl9wdGhyZWFkX2Rlc2NyOwoK CgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MKewogIGludCBfX2RldGFjaHN0YXRl OwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3NjaGVkX3BhcmFtIF9fc2NoZWRwYXJh bTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2NvcGU7CiAgc2l6ZV90IF9fZ3VhcmRz aXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAqX19zdGFja2FkZHI7CiAgc2l6ZV90 IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgc3Ry dWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9wdGhyZWFkX2Rlc2NyIF9fY193YWl0 aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fZHVtbXk7 Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5zaWduZWQgaW50IHB0aHJlYWRfa2V5 X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21fcmVzZXJ2ZWQ7CiAgaW50IF9fbV9j b3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAgaW50IF9fbV9raW5kOwogIHN0cnVj dCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhyZWFkX211dGV4X3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRocmVhZF9tdXRleGF0dHJfdDsKCgoK dHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CiMgMTQwICIvdXNyL2luY2x1ZGUvYml0cy9wdGhy ZWFkdHlwZXMuaCIgMwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgaW50IHB0aHJlYWRfdDsKIyAxNDQg Ii91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDIgMwojIDQ1ICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwojIDUzICIvdXNyL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKdHlwZWRlZiBz dHJ1Y3QgX0lPX0ZJTEUgRklMRTsKIyA2MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIF9fRklM RTsKIyA3MyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9z dGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDEgMwojIDMwICIvdXNyL2luY2x1 ZGUvbGliaW8uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMSAzCiMgOSAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MSAzCiMgMTAgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMiAzCgoKCgojIDEgIi91c3IvbGli L2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDI4 NyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYu aCIgMwp0eXBlZGVmIGxvbmcgaW50IHdjaGFyX3Q7CiMgMzEyICIvdXNyL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgdW5zaWduZWQg aW50IHdpbnRfdDsKIyAxNSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKIyAyNCAiL3Vz ci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwoj IDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwojIDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1w Yy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVmLmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUv d2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIv dXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgNjcgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCnR5 cGVkZWYgc3RydWN0CnsKICBpbnQgX19jb3VudDsKICB1bmlvbgogIHsKICAgIHdpbnRfdCBfX3dj aDsKICAgIGNoYXIgX193Y2hiWzRdOwogIH0gX192YWx1ZTsKfSBfX21ic3RhdGVfdDsKIyAyNSAi L3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKCnR5cGVkZWYgc3RydWN0CnsKICBfX29mZl90 IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvc190Owp0eXBlZGVmIHN0cnVj dAp7CiAgX19vZmY2NF90IF9fcG9zOwogIF9fbWJzdGF0ZV90IF9fc3RhdGU7Cn0gX0dfZnBvczY0 X3Q7CiMgNDQgIi91c3IvaW5jbHVkZS9fR19jb25maWcuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9n Y29udi5oIiAxIDMKIyAyNiAiL3Vzci9pbmNsdWRlL2djb252LmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDEgMwojIDQ4ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwoj IDEgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkZGVm LmgiIDEgMwojIDQ5ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3djaGFyLmgiIDEgMwojIDUxICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMiAzCiMgMjkg Ii91c3IvaW5jbHVkZS9nY29udi5oIiAyIDMKCiMgMSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9n Y29udi5oIiAyIDMKCgoKCgplbnVtCnsKICBfX0dDT05WX09LID0gMCwKICBfX0dDT05WX05PQ09O ViwKICBfX0dDT05WX05PREIsCiAgX19HQ09OVl9OT01FTSwKCiAgX19HQ09OVl9FTVBUWV9JTlBV VCwKICBfX0dDT05WX0ZVTExfT1VUUFVULAogIF9fR0NPTlZfSUxMRUdBTF9JTlBVVCwKICBfX0dD T05WX0lOQ09NUExFVEVfSU5QVVQsCgogIF9fR0NPTlZfSUxMRUdBTF9ERVNDUklQVE9SLAogIF9f R0NPTlZfSU5URVJOQUxfRVJST1IKfTsKCgoKZW51bQp7CiAgX19HQ09OVl9JU19MQVNUID0gMHgw MDAxLAogIF9fR0NPTlZfSUdOT1JFX0VSUk9SUyA9IDB4MDAwMgp9OwoKCgpzdHJ1Y3QgX19nY29u dl9zdGVwOwpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGE7CnN0cnVjdCBfX2djb252X2xvYWRlZF9v YmplY3Q7CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGE7CgoKCnR5cGVkZWYgaW50ICgqX19nY29u dl9mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAq LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb25zdCB1bnNpZ25lZCBjaGFyICoqLCBf X2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgKiosIHNpemVfdCAqLCBpbnQsIGludCk7CgoKdHlwZWRlZiBpbnQgKCpfX2djb252 X2luaXRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29u dl9lbmRfZmN0KSAoc3RydWN0IF9fZ2NvbnZfc3RlcCAqKTsKCgoKdHlwZWRlZiBpbnQgKCpfX2dj b252X3RyYW5zX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSAqLCB2b2lkICosCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IHVuc2lnbmVkIGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqKiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAq LCB1bnNpZ25lZCBjaGFyICoqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6 ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19jb250ZXh0X2ZjdCkgKHZvaWQg KiwgX19jb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7 CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKF9fY29uc3QgY2hhciAq LCBfX2NvbnN0IGNoYXIgKioqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgc2l6ZV90ICopOwoKCnR5cGVkZWYgaW50ICgqX19nY29udl90cmFuc19pbml0X2ZjdCkgKHZv aWQgKiosIGNvbnN0IGNoYXIgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2NvbnZfdHJhbnNfZW5kX2Zj dCkgKHZvaWQgKik7CgpzdHJ1Y3QgX19nY29udl90cmFuc19kYXRhCnsKCiAgX19nY29udl90cmFu c19mY3QgX190cmFuc19mY3Q7CiAgX19nY29udl90cmFuc19jb250ZXh0X2ZjdCBfX3RyYW5zX2Nv bnRleHRfZmN0OwogIF9fZ2NvbnZfdHJhbnNfZW5kX2ZjdCBfX3RyYW5zX2VuZF9mY3Q7CiAgdm9p ZCAqX19kYXRhOwogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fbmV4dDsKfTsKCgoKc3Ry dWN0IF9fZ2NvbnZfc3RlcAp7CiAgc3RydWN0IF9fZ2NvbnZfbG9hZGVkX29iamVjdCAqX19zaGxp Yl9oYW5kbGU7CiAgX19jb25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7Cgog IGNoYXIgKl9fZnJvbV9uYW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19m Y3Q7CiAgX19nY29udl9pbml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2Vu ZF9mY3Q7CgoKCiAgaW50IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJv bTsKICBpbnQgX19taW5fbmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQg X19zdGF0ZWZ1bDsKCiAgdm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2Rh dGEKewogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVm ZW5kOwoKCgogIGludCBfX2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoK ICBpbnQgX19pbnRlcm5hbF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3Rh dGVfdCBfX3N0YXRlOwoKCgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07 CgoKCnR5cGVkZWYgc3RydWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0 cnVjdCBfX2djb252X3N0ZXAgKl9fc3RlcHM7CiAgX19leHRlbnNpb25fXyBzdHJ1Y3QgX19nY29u dl9zdGVwX2RhdGEgX19kYXRhIFtdOwp9ICpfX2djb252X3Q7CiMgNDUgIi91c3IvaW5jbHVkZS9f R19jb25maWcuaCIgMiAzCnR5cGVkZWYgdW5pb24KewogIHN0cnVjdCBfX2djb252X2luZm8gX19j ZDsKICBzdHJ1Y3QKICB7CiAgICBzdHJ1Y3QgX19nY29udl9pbmZvIF9fY2Q7CiAgICBzdHJ1Y3Qg X19nY29udl9zdGVwX2RhdGEgX19kYXRhOwogIH0gX19jb21iaW5lZDsKfSBfR19pY29udl90OwoK dHlwZWRlZiBpbnQgX0dfaW50MTZfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fSElfXykp KTsKdHlwZWRlZiBpbnQgX0dfaW50MzJfdCBfX2F0dHJpYnV0ZV9fICgoX19tb2RlX18gKF9fU0lf XykpKTsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDE2X3QgX19hdHRyaWJ1dGVfXyAoKF9f bW9kZV9fIChfX0hJX18pKSk7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQzMl90IF9fYXR0 cmlidXRlX18gKChfX21vZGVfXyAoX19TSV9fKSkpOwojIDMxICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMiAzCiMgNTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMgNDMgIi91c3Iv bGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkYXJnLmgiIDMKdHlw ZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1MiAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDIgMwojIDE1OCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKc3RydWN0IF9JT19q dW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNjggIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5 cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFya2VyIHsKICBzdHJ1Y3Qg X0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1ZjsKCgoKICBpbnQgX3Bv czsKIyAxOTEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51bSBfX2NvZGVjdnRfcmVz dWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWwsCiAgX19jb2RlY3Z0X2Vy cm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKIyAyNTkgIi91c3IvaW5jbHVkZS9saWJpby5oIiAz CnN0cnVjdCBfSU9fRklMRSB7CiAgaW50IF9mbGFnczsKCgoKCiAgY2hhciogX0lPX3JlYWRfcHRy OwogIGNoYXIqIF9JT19yZWFkX2VuZDsKICBjaGFyKiBfSU9fcmVhZF9iYXNlOwogIGNoYXIqIF9J T193cml0ZV9iYXNlOwogIGNoYXIqIF9JT193cml0ZV9wdHI7CiAgY2hhciogX0lPX3dyaXRlX2Vu ZDsKICBjaGFyKiBfSU9fYnVmX2Jhc2U7CiAgY2hhciogX0lPX2J1Zl9lbmQ7CgogIGNoYXIgKl9J T19zYXZlX2Jhc2U7CiAgY2hhciAqX0lPX2JhY2t1cF9iYXNlOwogIGNoYXIgKl9JT19zYXZlX2Vu ZDsKCiAgc3RydWN0IF9JT19tYXJrZXIgKl9tYXJrZXJzOwoKICBzdHJ1Y3QgX0lPX0ZJTEUgKl9j aGFpbjsKCiAgaW50IF9maWxlbm87CiAgaW50IF9ibGtzaXplOwogIF9fb2ZmX3QgX29sZF9vZmZz ZXQ7CgoKCiAgdW5zaWduZWQgc2hvcnQgX2N1cl9jb2x1bW47CiAgc2lnbmVkIGNoYXIgX3Z0YWJs ZV9vZmZzZXQ7CiAgY2hhciBfc2hvcnRidWZbMV07CgoKCiAgX0lPX2xvY2tfdCAqX2xvY2s7CiMg MzAzICIvdXNyL2luY2x1ZGUvbGliaW8uaCIgMwogIF9fb2ZmNjRfdCBfb2Zmc2V0OwoKCgoKCiAg dm9pZCAqX19wYWQxOwogIHZvaWQgKl9fcGFkMjsKCiAgaW50IF9tb2RlOwoKICBjaGFyIF91bnVz ZWQyWzE1ICogc2l6ZW9mIChpbnQpIC0gMiAqIHNpemVvZiAodm9pZCAqKV07Cgp9OwoKCnR5cGVk ZWYgc3RydWN0IF9JT19GSUxFIF9JT19GSUxFOwoKCnN0cnVjdCBfSU9fRklMRV9wbHVzOwoKZXh0 ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkaW5fOwpleHRlcm4gc3RydWN0IF9J T19GSUxFX3BsdXMgX0lPXzJfMV9zdGRvdXRfOwpleHRlcm4gc3RydWN0IF9JT19GSUxFX3BsdXMg X0lPXzJfMV9zdGRlcnJfOwojIDM0MiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKdHlwZWRlZiBf X3NzaXplX3QgX19pb19yZWFkX2ZuICh2b2lkICpfX2Nvb2tpZSwgY2hhciAqX19idWYsIHNpemVf dCBfX25ieXRlcyk7CgoKCgoKCgp0eXBlZGVmIF9fc3NpemVfdCBfX2lvX3dyaXRlX2ZuICh2b2lk ICpfX2Nvb2tpZSwgX19jb25zdCBjaGFyICpfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90IF9fbik7CgoKCgoKCgp0eXBlZGVmIGludCBfX2lvX3NlZWtfZm4gKHZv aWQgKl9fY29va2llLCBfX29mZjY0X3QgKl9fcG9zLCBpbnQgX193KTsKCgp0eXBlZGVmIGludCBf X2lvX2Nsb3NlX2ZuICh2b2lkICpfX2Nvb2tpZSk7CiMgMzk0ICIvdXNyL2luY2x1ZGUvbGliaW8u aCIgMwpleHRlcm4gaW50IF9fdW5kZXJmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191 ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gaW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGlu dCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVyZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2lu dF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9J T19GSUxFICosIHdpbnRfdCkgOwojIDQyNCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJu IGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50 IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9f ZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9yIChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGlu dCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklMRSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9J T19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsKZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChf SU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lPX2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwoj IDQ1NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lP X0ZJTEUgKiBfX3Jlc3RyaWN0LCBjb25zdCBjaGFyICogX19yZXN0cmljdCwKICAgICAgICAgICAg ICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QsIGludCAqX19yZXN0cmljdCkgOwpleHRlcm4gaW50 IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKl9fcmVzdHJpY3QsIGNvbnN0IGNoYXIgKl9fcmVzdHJp Y3QsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gX19z c2l6ZV90IF9JT19wYWRuIChfSU9fRklMRSAqLCBpbnQsIF9fc3NpemVfdCkgOwpleHRlcm4gc2l6 ZV90IF9JT19zZ2V0biAoX0lPX0ZJTEUgKiwgdm9pZCAqLCBzaXplX3QpIDsKCmV4dGVybiBfX29m ZjY0X3QgX0lPX3NlZWtvZmYgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50LCBpbnQpIDsKZXh0 ZXJuIF9fb2ZmNjRfdCBfSU9fc2Vla3BvcyAoX0lPX0ZJTEUgKiwgX19vZmY2NF90LCBpbnQpIDsK CmV4dGVybiB2b2lkIF9JT19mcmVlX2JhY2t1cF9hcmVhIChfSU9fRklMRSAqKSA7CiMgNzQgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMiAz CiMgODggIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3Rk aW8uaCIgMwp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CiMgMTM3ICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9zdGRpb19saW0uaCIgMSAzCiMgMTM4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDIgMwoKCgpleHRlcm4gRklMRSAqc3RkaW47 CmV4dGVybiBGSUxFICpzdGRvdXQ7CmV4dGVybiBGSUxFICpzdGRlcnI7CgoKCgoKCmV4dGVybiBp bnQgcmVtb3ZlIChfX2NvbnN0IGNoYXIgKl9fZmlsZW5hbWUpIDsKCmV4dGVybiBpbnQgcmVuYW1l IChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2NvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpleHRlcm4g RklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE2OSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBjaGFyICp0bXBuYW0gKGNoYXIg Kl9fcykgOwoKCgoKZXh0ZXJuIGNoYXIgKnRtcG5hbV9yIChjaGFyICpfX3MpIDsKIyAxODYgIi91 c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpl eHRlcm4gY2hhciAqdGVtcG5hbSAoX19jb25zdCBjaGFyICpfX2RpciwgX19jb25zdCBjaGFyICpf X3BmeCkKICAgICAgICAgICAgIF9fYXR0cmlidXRlX18gKChfX21hbGxvY19fKSk7CgoKCgpleHRl cm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNoIChGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAqX19zdHJl YW0pIDsKIyAyMDkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2luY2x1 ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZm9wZW4gKF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgIF9fY29uc3QgY2hhciAqX19yZXN0cmlj dCBfX21vZGVzKSA7CgpleHRlcm4gRklMRSAqZnJlb3BlbiAoX19jb25zdCBjaGFyICpfX3Jlc3Ry aWN0IF9fZmlsZW5hbWUsCiAgICAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19tb2RlcywKICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKl9fcmVzdHJpY3QgX19z dHJlYW0pIDsKIyAyMzkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4wL2lu Y2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gRklMRSAqZmRvcGVuIChpbnQgX19mZCwgX19jb25zdCBj aGFyICpfX21vZGVzKSA7CiMgMjYyICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251 LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICpfX3Jlc3Ry aWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3RyaWN0IF9fYnVmKSA7CgoKCmV4dGVybiBpbnQgc2V0 dmJ1ZiAoRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSwgY2hhciAqX19yZXN0cmljdCBfX2J1ZiwK ICAgICAgICAgICAgICAgICAgICBpbnQgX19tb2Rlcywgc2l6ZV90IF9fbikgOwoKCgoKZXh0ZXJu IHZvaWQgc2V0YnVmZmVyIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLCBjaGFyICpfX3Jlc3Ry aWN0IF9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpleHRl cm4gdm9pZCBzZXRsaW5lYnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHJp bnRmIChGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtLAogICAgICAgICAgICAgICAgICAgIF9fY29u c3QgY2hhciAqX19yZXN0cmljdCBfX2Zvcm1hdCwgLi4uKSA7CgpleHRlcm4gaW50IHByaW50ZiAo X19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3By aW50ZiAoY2hhciAqX19yZXN0cmljdCBfX3MsCiAgICAgICAgICAgICAgICAgICAgX19jb25zdCBj aGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCgpleHRlcm4gaW50IHZmcHJpbnRmIChG SUxFICpfX3Jlc3RyaWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAog ICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKZXh0ZXJuIGludCB2 cHJpbnRmIChfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgICAgICAgICA7CgpleHRlcm4gaW50IHZzcHJpbnRmIChjaGFyICpfX3Jlc3Ry aWN0IF9fcywgX19jb25zdCBjaGFyICpfX3Jlc3RyaWN0IF9fZm9ybWF0LAogICAgICAgICAgICAg ICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykgOwoKCgpleHRlcm4gaW50IHNucHJpbnRmIChj aGFyICpfX3Jlc3RyaWN0IF9fcywgc2l6ZV90IF9fbWF4bGVuLAogICAgICAgICAgICAgICAgICAg ICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIC4uLikKICAgICAgICAgICAgIF9f YXR0cmlidXRlX18gKChfX2Zvcm1hdF9fIChfX3ByaW50Zl9fLCAzLCA0KSkpOwoKZXh0ZXJuIGlu dCB2c25wcmludGYgKGNoYXIgKl9fcmVzdHJpY3QgX19zLCBzaXplX3QgX19tYXhsZW4sCiAgICAg ICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVzdHJpY3QgX19mb3JtYXQsIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgICAgICAgICAgX19hdHRyaWJ1dGVfXyAoKF9fZm9ybWF0X18g KF9fcHJpbnRmX18sIDMsIDApKSk7CiMgMzMzICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmc2NhbmYgKEZJTEUgKl9f cmVzdHJpY3QgX19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICBfX2NvbnN0IGNoYXIgKl9fcmVz dHJpY3QgX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJuIGludCBzY2FuZiAoX19jb25zdCBjaGFyICpf X3Jlc3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQgc3NjYW5mIChfX2NvbnN0IGNo YXIgKl9fcmVzdHJpY3QgX19zLAogICAgICAgICAgICAgICAgICAgX19jb25zdCBjaGFyICpfX3Jl c3RyaWN0IF9fZm9ybWF0LCAuLi4pIDsKIyAzNTkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRjIChGSUxFICpf X3N0cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGlu dCBnZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUg Kl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0 ZXJuIGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQg ZnB1dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9f YywgRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsKCgoK CgoKCmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7 CgoKCgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7 CmV4dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQg Z2V0dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUg Kl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKl9fcmVzdHJpY3QgX19z LCBpbnQgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9fc3RyZWFtKQogICAgICAgICAgICA7CiMgNDI1 ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgi IDMKZXh0ZXJuIGNoYXIgKmdldHMgKGNoYXIgKl9fcykgOwojIDQ0OSAiL3Vzci9saWIvZ2NjLWxp Yi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnB1 dHMgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX3MsIEZJTEUgKl9fcmVzdHJpY3QgX19zdHJl YW0pCiAgICAgICAgICAgIDsKIyA0NTkgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4wL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IHB1dHMgKF9fY29uc3QgY2hhciAq X19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxFICpfX3N0cmVhbSkgOwoK CgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICpfX3Jlc3RyaWN0IF9fcHRyLCBzaXplX3QgX19z aXplLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICpfX3Jlc3RyaWN0IF9f c3RyZWFtKSA7CgpleHRlcm4gc2l6ZV90IGZ3cml0ZSAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0 IF9fcHRyLCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwg RklMRSAqX19yZXN0cmljdCBfX3MpIDsKCgoKZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAo dm9pZCAqX19yZXN0cmljdCBfX3B0ciwgc2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2l6ZV90IF9fbiwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwpleHRl cm4gc2l6ZV90IGZ3cml0ZV91bmxvY2tlZCAoX19jb25zdCB2b2lkICpfX3Jlc3RyaWN0IF9fcHRy LCBzaXplX3QgX19zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9f biwgRklMRSAqX19yZXN0cmljdCBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklM RSAqX19zdHJlYW0sIGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBsb25n IGludCBmdGVsbCAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAq X19zdHJlYW0pIDsKIyA1MDMgIi91c3IvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4w L2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKl9fcmVzdHJpY3Qg X19zdHJlYW0sIGZwb3NfdCAqX19yZXN0cmljdCBfX3BvcykKICAgICAgICAgICAgOwoKZXh0ZXJu IGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgX19jb25zdCBmcG9zX3QgKl9fcG9zKSA7CiMg NTM5ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlv LmgiIDMKZXh0ZXJuIHZvaWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50 IGZlb2YgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJl YW0pIDsKCgoKZXh0ZXJuIHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7 CmV4dGVybiBpbnQgZmVvZl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBm ZXJyb3JfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3Ig KF9fY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gaW50IHN5c19uZXJyOwpleHRlcm4gX19j b25zdCBjaGFyICpfX2NvbnN0IHN5c19lcnJsaXN0W107CiMgNTcwICIvdXNyL2xpYi9nY2MtbGli L2k2ODYtcGMtbGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGludCBmaWxl bm8gKEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gaW50IGZpbGVub191bmxvY2tlZCAoRklM RSAqX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIEZJTEUgKnBvcGVuIChfX2NvbnN0IGNoYXIgKl9f Y29tbWFuZCwgX19jb25zdCBjaGFyICpfX21vZGVzKSA7CgoKZXh0ZXJuIGludCBwY2xvc2UgKEZJ TEUgKl9fc3RyZWFtKSA7CgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQgKGNoYXIgKl9fcykgOwoj IDYxNyAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAvaW5jbHVkZS9zdGRp by5oIiAzCmV4dGVybiB2b2lkIGZsb2NrZmlsZSAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJu IGludCBmdHJ5bG9ja2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIHZvaWQgZnVubG9j a2ZpbGUgKEZJTEUgKl9fc3RyZWFtKSA7CiMgNjM4ICIvdXNyL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMC9pbmNsdWRlL3N0ZGlvLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9z dGRpby5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19p bmxpbmUgaW50CnZwcmludGYgKF9fY29uc3QgY2hhciAqX19yZXN0cmljdCBfX2ZtdCwgX19nbnVj X3ZhX2xpc3QgX19hcmcpCnsKICByZXR1cm4gdmZwcmludGYgKHN0ZG91dCwgX19mbXQsIF9fYXJn KTsKfQoKCmV4dGVybiBfX2lubGluZSBpbnQKZ2V0Y2hhciAodm9pZCkKewogIHJldHVybiBfSU9f Z2V0YyAoc3RkaW4pOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNfdW5sb2NrZWQgKEZJ TEUgKl9fZnApCnsKICByZXR1cm4gKChfX2ZwKS0+X0lPX3JlYWRfcHRyID49IChfX2ZwKS0+X0lP X3JlYWRfZW5kID8gX191ZmxvdyAoX19mcCkgOiAqKHVuc2lnbmVkIGNoYXIgKikgKF9fZnApLT5f SU9fcmVhZF9wdHIrKyk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmdldGNoYXJfdW5sb2NrZWQg KHZvaWQpCnsKICByZXR1cm4gKChzdGRpbiktPl9JT19yZWFkX3B0ciA+PSAoc3RkaW4pLT5fSU9f cmVhZF9lbmQgPyBfX3VmbG93IChzdGRpbikgOiAqKHVuc2lnbmVkIGNoYXIgKikgKHN0ZGluKS0+ X0lPX3JlYWRfcHRyKyspOwp9CgoKCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXIgKGludCBf X2MpCnsKICByZXR1cm4gX0lPX3B1dGMgKF9fYywgc3Rkb3V0KTsKfQoKCgoKZXh0ZXJuIF9faW5s aW5lIGludApmcHV0Y191bmxvY2tlZCAoaW50IF9fYywgRklMRSAqX19zdHJlYW0pCnsKICByZXR1 cm4gKCgoX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyID49IChfX3N0cmVhbSktPl9JT193cml0ZV9l bmQpID8gX19vdmVyZmxvdyAoX19zdHJlYW0sICh1bnNpZ25lZCBjaGFyKSAoX19jKSkgOiAodW5z aWduZWQgY2hhcikgKCooX19zdHJlYW0pLT5fSU9fd3JpdGVfcHRyKysgPSAoX19jKSkpOwp9CgoK CgoKZXh0ZXJuIF9faW5saW5lIGludApwdXRjX3VubG9ja2VkIChpbnQgX19jLCBGSUxFICpfX3N0 cmVhbSkKewogIHJldHVybiAoKChfX3N0cmVhbSktPl9JT193cml0ZV9wdHIgPj0gKF9fc3RyZWFt KS0+X0lPX3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChfX3N0cmVhbSwgKHVuc2lnbmVkIGNoYXIp IChfX2MpKSA6ICh1bnNpZ25lZCBjaGFyKSAoKihfX3N0cmVhbSktPl9JT193cml0ZV9wdHIrKyA9 IChfX2MpKSk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CnB1dGNoYXJfdW5sb2NrZWQgKGludCBf X2MpCnsKICByZXR1cm4gKCgoc3Rkb3V0KS0+X0lPX3dyaXRlX3B0ciA+PSAoc3Rkb3V0KS0+X0lP X3dyaXRlX2VuZCkgPyBfX292ZXJmbG93IChzdGRvdXQsICh1bnNpZ25lZCBjaGFyKSAoX19jKSkg OiAodW5zaWduZWQgY2hhcikgKCooc3Rkb3V0KS0+X0lPX3dyaXRlX3B0cisrID0gKF9fYykpKTsK fQojIDExNyAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW8uaCIgMwpleHRlcm4gX19pbmxpbmUgaW50 CmZlb2ZfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKQp7CiAgcmV0dXJuICgoKF9fc3RyZWFtKS0+ X2ZsYWdzICYgMHgxMCkgIT0gMCk7Cn0KCgpleHRlcm4gX19pbmxpbmUgaW50CmZlcnJvcl91bmxv Y2tlZCAoRklMRSAqX19zdHJlYW0pCnsKICByZXR1cm4gKCgoX19zdHJlYW0pLT5fZmxhZ3MgJiAw eDIwKSAhPSAwKTsKfQojIDYzOSAiL3Vzci9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8z LjAvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyAyICJnY2NidWcuYyIgMgoKCgoKaW50IG1haW4odm9p ZCkKewogIGludCBsaXN0RWxlbVs0XT17MzAsMiwxMCw1fTsKICBpbnQgbGlzdFNtYWxsWzJdOwog IGludCBpLCBqOwogIGludCBwb3NHcmVhdGVzdD0tMSwgZ3JlYXRlc3Q9LTE7CgogIGZvciAoaT0w OyBpPDI7IGkrKykgewogICAgbGlzdFNtYWxsW2ldID0gbGlzdEVsZW1baV07CiAgICBpZiAobGlz dEVsZW1baV0gPiBncmVhdGVzdCkgewogICAgICBwb3NHcmVhdGVzdCA9IGk7CiAgICAgIGdyZWF0 ZXN0ID0gbGlzdEVsZW1baV07CiAgICB9CiAgfQoKICBmb3IgKGk9MjsgaTw0OyBpKyspIHsKICAg IGlmIChsaXN0RWxlbVtpXSA8IGdyZWF0ZXN0KSB7CiAgICAgIGxpc3RTbWFsbFtwb3NHcmVhdGVz dF0gPSBsaXN0RWxlbVtpXTsKICAgICAgcG9zR3JlYXRlc3QgPSAwOwogICAgICBncmVhdGVzdCA9 IGxpc3RTbWFsbFswXTsKICAgICAgZm9yIChqPTE7IGo8MjsgaisrKQogICAgICAgIGlmIChsaXN0 U21hbGxbal0gPiBncmVhdGVzdCkgewogICAgICAgICAgcG9zR3JlYXRlc3QgPSBqOwogICAgICAg ICAgZ3JlYXRlc3QgPSBsaXN0U21hbGxbal07CiAgICAgICAgfQoKCgogICAgfQogIH0KCiAgZnBy aW50ZiAoc3Rkb3V0LCAiQ29ycmVjdCBvdXRwdXQ6IDUgMlxuIik7CiAgZnByaW50ZiAoc3Rkb3V0 LCAiR0NDIG91dHB1dDogIik7CiAgZm9yIChpPTA7IGk8MjsgaSsrKSBmcHJpbnRmIChzdGRvdXQs ICIgJS4xZCIsIGxpc3RTbWFsbFtpXSk7CiAgZnByaW50ZiAoc3Rkb3V0LCAiXG4iKTsKICByZXR1 cm4gKDEpOwp9Cg==