From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12395 invoked by alias); 15 Jan 2003 15:16:03 -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 12376 invoked by uid 71); 15 Jan 2003 15:16:02 -0000 Resent-Date: 15 Jan 2003 15:16:02 -0000 Resent-Message-ID: <20030115151602.12373.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, reza@linisoft.com Received: (qmail 12189 invoked by uid 61); 15 Jan 2003 15:14:33 -0000 Message-Id: <20030115151433.12188.qmail@sources.redhat.com> Date: Wed, 15 Jan 2003 15:16:00 -0000 From: reza@linisoft.com Reply-To: reza@linisoft.com To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: optimization/9327: extra mov instructions on intel X-SW-Source: 2003-01/txt/msg00959.txt.bz2 List-Id: >Number: 9327 >Category: optimization >Synopsis: extra mov instructions on intel >Confidential: no >Severity: serious >Priority: medium >Responsible: unassigned >State: open >Class: pessimizes-code >Submitter-Id: net >Arrival-Date: Wed Jan 15 07:16:01 PST 2003 >Closed-Date: >Last-Modified: >Originator: Reza Roboubi >Release: gcc version 3.2 >Organization: >Environment: model name : AMD-K6(tm) 3D processor Linux version 2.2.14-5.0 (root@porky.devel.redhat.com) >Description: There are two loops inside the main function: The "trivial loop" and the "equivalent loop" which is logically equivalent to the trivial loop. The assembly code gcc -O2 generates for the trivial loop is: 0x80485b1 : inc %eax 0x80485b2 : mov %eax,0xfffffff8(%ebp) 0x80485b5 : cmp $0x9,%eax 0x80485b8 : jle 0x80485b1 which contains an extra mov instruction. This should move out of the critical loop. The assembly code for the "equivalent loop" is: 0x80485d2 : mov 0xfffffff8(%ebp),%eax 0x80485d5 : cmp $0xa,%eax 0x80485d8 : je 0x80485e0 0x80485da : inc %eax 0x80485db : mov %eax,0xfffffff8(%ebp) 0x80485de : jmp 0x80485d2 This one contains two extra mov instructions, and ideally, an extra jump instruction should be removed from it, hence producing only three lines of assembly just like the "trivial loop." >How-To-Repeat: compile with gcc -O2 -Wall >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="test2.ii" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="test2.ii" IyAxICJ0ZXN0Mi5jIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMgMSAi dGVzdDIuYyIKIyAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDEgMwojIDI2ICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMSAzCiMgMjUwICIv dXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvY2RlZnMuaCIg MSAzCiMgMjUxICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjc4ICIvdXNyL2luY2x1 ZGUvZmVhdHVyZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9nbnUvc3R1YnMuaCIgMSAzCiMgMjc5 ICIvdXNyL2luY2x1ZGUvZmVhdHVyZXMuaCIgMiAzCiMgMjcgIi91c3IvaW5jbHVkZS91bmlzdGQu aCIgMiAzCgpleHRlcm4gIkMiIHsKIyAxNzUgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEg Ii91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5oIiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEg MwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMwojIDEgIi91c3IvaW5j bHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9u bWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDE5MCAiL3Vz ci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAz CiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVzLmgiIDMKIyAxICIvc2NyYXRjaDAvdXNyL2xp Yi9nY2MtbGliL2k1ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAy MDEgIi9zY3JhdGNoMC91c3IvbGliL2djYy1saWIvaTU4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1bnNpZ25lZCBpbnQgc2l6ZV90OwojIDMwICIvdXNyL2lu Y2x1ZGUvYml0cy90eXBlcy5oIiAyIDMKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgX191X2NoYXI7 CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCBf X3VfaW50Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgX191X2xvbmc7CgpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgdW5zaWduZWQgbG9uZyBsb25nIGludCBfX3VfcXVhZF90OwpfX2V4dGVuc2lvbl9fIHR5 cGVkZWYgbG9uZyBsb25nIGludCBfX3F1YWRfdDsKIyA0OSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlw ZXMuaCIgMwp0eXBlZGVmIHNpZ25lZCBjaGFyIF9faW50OF90Owp0eXBlZGVmIHVuc2lnbmVkIGNo YXIgX191aW50OF90Owp0eXBlZGVmIHNpZ25lZCBzaG9ydCBpbnQgX19pbnQxNl90Owp0eXBlZGVm IHVuc2lnbmVkIHNob3J0IGludCBfX3VpbnQxNl90Owp0eXBlZGVmIHNpZ25lZCBpbnQgX19pbnQz Ml90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3VpbnQzMl90OwoKX19leHRlbnNpb25fXyB0eXBl ZGVmIHNpZ25lZCBsb25nIGxvbmcgaW50IF9faW50NjRfdDsKX19leHRlbnNpb25fXyB0eXBlZGVm IHVuc2lnbmVkIGxvbmcgbG9uZyBpbnQgX191aW50NjRfdDsKCnR5cGVkZWYgX19xdWFkX3QgKl9f cWFkZHJfdDsKCnR5cGVkZWYgX191X3F1YWRfdCBfX2Rldl90Owp0eXBlZGVmIF9fdV9pbnQgX191 aWRfdDsKdHlwZWRlZiBfX3VfaW50IF9fZ2lkX3Q7CnR5cGVkZWYgX191X2xvbmcgX19pbm9fdDsK dHlwZWRlZiBfX3VfaW50IF9fbW9kZV90Owp0eXBlZGVmIF9fdV9pbnQgX19ubGlua190Owp0eXBl ZGVmIGxvbmcgaW50IF9fb2ZmX3Q7CnR5cGVkZWYgX19xdWFkX3QgX19sb2ZmX3Q7CnR5cGVkZWYg aW50IF9fcGlkX3Q7CnR5cGVkZWYgaW50IF9fc3NpemVfdDsKdHlwZWRlZiBsb25nIGludCBfX3Js aW1fdDsKdHlwZWRlZiBfX3F1YWRfdCBfX3JsaW02NF90Owp0eXBlZGVmIF9fdV9pbnQgX19pZF90 OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxbMl07CiAgfSBfX2ZzaWRfdDsKCgp0 eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqX19jYWRkcl90Owp0eXBlZGVmIGxv bmcgaW50IF9fdGltZV90Owp0eXBlZGVmIGxvbmcgaW50IF9fc3dibGtfdDsKCnR5cGVkZWYgbG9u ZyBpbnQgX19jbG9ja190OwoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgX19mZF9tYXNrOwoj IDEwMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMwp0eXBlZGVmIHN0cnVjdAogIHsKCgoK ICAgIF9fZmRfbWFzayBmZHNfYml0c1sxMDI0IC8gKDggKiBzaXplb2YgKF9fZmRfbWFzaykpXTsK CgoKCgogIH0gX19mZF9zZXQ7CgoKdHlwZWRlZiBpbnQgX19rZXlfdDsKCgp0eXBlZGVmIHVuc2ln bmVkIHNob3J0IGludCBfX2lwY19waWRfdDsKCgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxrY250 X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcgX19m c2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRlZiBf X3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRfdDsK Cgp0eXBlZGVmIF9fdV9sb25nIF9faW5vNjRfdDsKCgp0eXBlZGVmIF9fbG9mZl90IF9fb2ZmNjRf dDsKCgp0eXBlZGVmIGxvbmcgaW50IF9fdF9zY2FsYXJfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25n IGludCBfX3RfdXNjYWxhcl90OwoKCnR5cGVkZWYgaW50IF9faW50cHRyX3Q7CgoKCgojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL3B0aHJlYWR0eXBlcy5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2Jp dHMvcHRocmVhZHR5cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9zY2hlZC5oIiAxIDMK IyA2OCAiL3Vzci9pbmNsdWRlL2JpdHMvc2NoZWQuaCIgMwpzdHJ1Y3QgX19zY2hlZF9wYXJhbQog IHsKICAgIGludCBzY2hlZF9wcmlvcml0eTsKICB9OwojIDI0ICIvdXNyL2luY2x1ZGUvYml0cy9w dGhyZWFkdHlwZXMuaCIgMiAzCgoKc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrCnsKICBsb25nIGlu dCBfX3N0YXR1czsKICBpbnQgX19zcGlubG9jazsKfTsKCgoKdHlwZWRlZiBzdHJ1Y3QgX3B0aHJl YWRfZGVzY3Jfc3RydWN0ICpfcHRocmVhZF9kZXNjcjsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAg aW50IF9fZGV0YWNoc3RhdGU7CiAgaW50IF9fc2NoZWRwb2xpY3k7CiAgc3RydWN0IF9fc2NoZWRf cGFyYW0gX19zY2hlZHBhcmFtOwogIGludCBfX2luaGVyaXRzY2hlZDsKICBpbnQgX19zY29wZTsK ICBzaXplX3QgX19ndWFyZHNpemU7CiAgaW50IF9fc3RhY2thZGRyX3NldDsKICB2b2lkICpfX3N0 YWNrYWRkcjsKICBzaXplX3QgX19zdGFja3NpemU7Cn0gcHRocmVhZF9hdHRyX3Q7CgoKCnR5cGVk ZWYgc3RydWN0CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19jX2xvY2s7CiAgX3B0aHJl YWRfZGVzY3IgX19jX3dhaXRpbmc7Cn0gcHRocmVhZF9jb25kX3Q7CgoKCnR5cGVkZWYgc3RydWN0 CnsKICBpbnQgX19kdW1teTsKfSBwdGhyZWFkX2NvbmRhdHRyX3Q7CgoKdHlwZWRlZiB1bnNpZ25l ZCBpbnQgcHRocmVhZF9rZXlfdDsKCgoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbV9yZXNl cnZlZDsKICBpbnQgX19tX2NvdW50OwogIF9wdGhyZWFkX2Rlc2NyIF9fbV9vd25lcjsKICBpbnQg X19tX2tpbmQ7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fbV9sb2NrOwp9IHB0aHJlYWRf bXV0ZXhfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX211dGV4a2luZDsKfSBwdGhyZWFk X211dGV4YXR0cl90OwoKCgp0eXBlZGVmIGludCBwdGhyZWFkX29uY2VfdDsKCgoKCnR5cGVkZWYg c3RydWN0IF9wdGhyZWFkX3J3bG9ja190CnsKICBzdHJ1Y3QgX3B0aHJlYWRfZmFzdGxvY2sgX19y d19sb2NrOwogIGludCBfX3J3X3JlYWRlcnM7CiAgX3B0aHJlYWRfZGVzY3IgX19yd193cml0ZXI7 CiAgX3B0aHJlYWRfZGVzY3IgX19yd19yZWFkX3dhaXRpbmc7CiAgX3B0aHJlYWRfZGVzY3IgX19y d193cml0ZV93YWl0aW5nOwogIGludCBfX3J3X2tpbmQ7CiAgaW50IF9fcndfcHNoYXJlZDsKfSBw dGhyZWFkX3J3bG9ja190OwoKCgp0eXBlZGVmIHN0cnVjdAp7CiAgaW50IF9fbG9ja2tpbmQ7CiAg aW50IF9fcHNoYXJlZDsKfSBwdGhyZWFkX3J3bG9ja2F0dHJfdDsKCgoKCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgcHRocmVhZF90OwojIDE1MSAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIg MiAzCiMgMTkxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCnR5cGVkZWYgX19zc2l6ZV90 IHNzaXplX3Q7CgoKCgoKIyAxICIvc2NyYXRjaDAvdXNyL2xpYi9nY2MtbGliL2k1ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAyMDAgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMiAzCgoKCgoKdHlwZWRlZiBfX2dpZF90IGdpZF90OwoKCgoKdHlwZWRlZiBfX3VpZF90 IHVpZF90OwoKCgoKCnR5cGVkZWYgX19vZmZfdCBvZmZfdDsKCgoKCgoKdHlwZWRlZiBfX29mZjY0 X3Qgb2ZmNjRfdDsKCgoKCnR5cGVkZWYgX19waWRfdCBwaWRfdDsKCgoKCgoKdHlwZWRlZiBfX2lu dHB0cl90IGludHB0cl90OwojIDI0OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBp bnQgYWNjZXNzIChfX2NvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgdGhyb3cgKCk7CgoK CgpleHRlcm4gaW50IGV1aWRhY2Nlc3MgKF9fY29uc3QgY2hhciAqX19uYW1lLCBpbnQgX190eXBl KSB0aHJvdyAoKTsKIyAyNzcgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZf dCBfX2xzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSB0aHJv dyAoKTsKCmV4dGVybiBfX29mZl90IGxzZWVrIChpbnQgX19mZCwgX19vZmZfdCBfX29mZnNldCwg aW50IF9fd2hlbmNlKSB0aHJvdyAoKTsKIyAyOTEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpl eHRlcm4gX19vZmY2NF90IGxzZWVrNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19vZmZzZXQsIGlu dCBfX3doZW5jZSkgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgX19jbG9zZSAoaW50IF9fZmQpIHRo cm93ICgpOwpleHRlcm4gaW50IGNsb3NlIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBz c2l6ZV90IF9fcmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzKSB0 aHJvdyAoKTsKZXh0ZXJuIHNzaXplX3QgcmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6 ZV90IF9fbmJ5dGVzKSB0aHJvdyAoKTsKCgpleHRlcm4gc3NpemVfdCBfX3dyaXRlIChpbnQgX19m ZCwgX19jb25zdCB2b2lkICogX19idWYsIHNpemVfdCBfX24pIHRocm93ICgpOwpleHRlcm4gc3Np emVfdCB3cml0ZSAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uKSB0 aHJvdyAoKTsKCgoKCgpleHRlcm4gc3NpemVfdCBfX3ByZWFkNjQgKGludCBfX2ZkLCB2b2lkICog X19idWYsIHNpemVfdCBfX25ieXRlcywgX19vZmY2NF90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHNzaXplX3QgX19wd3JpdGU2NCAoaW50IF9fZmQsIF9fY29uc3Qgdm9pZCAqIF9fYnVm LCBzaXplX3QgX19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93ICgpOwoKCgpleHRlcm4gc3Np emVfdCBwcmVhZCAoaW50IF9fZmQsIHZvaWQgKiBfX2J1Ziwgc2l6ZV90IF9fbmJ5dGVzLCBfX29m Zl90IF9fb2Zmc2V0KSB0aHJvdyAoKTsKCmV4dGVybiBzc2l6ZV90IHB3cml0ZSAoaW50IF9fZmQs IF9fY29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZl90IF9fb2Zmc2V0KSB0aHJv dyAoKTsKIyAzMzggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gc3NpemVfdCBwcmVh ZDY0IChpbnQgX19mZCwgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmNjRfdCBf X29mZnNldCkgdGhyb3cgKCk7CgpleHRlcm4gc3NpemVfdCBwd3JpdGU2NCAoaW50IF9fZmQsIF9f Y29uc3Qgdm9pZCAqIF9fYnVmLCBzaXplX3QgX19uLCBfX29mZjY0X3QgX19vZmZzZXQpIHRocm93 ICgpOwojIDM0OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgcGlwZSAoaW50 IF9fcGlwZWRlc1syXSkgdGhyb3cgKCk7CiMgMzU4ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIHVuc2lnbmVkIGludCBhbGFybSAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cg KCk7CiMgMzY3ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHVuc2lnbmVkIGludCBz bGVlcCAodW5zaWduZWQgaW50IF9fc2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKCmV4dGVybiB1bnNp Z25lZCBpbnQgdWFsYXJtICh1bnNpZ25lZCBpbnQgX192YWx1ZSwgdW5zaWduZWQgaW50IF9faW50 ZXJ2YWwpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgdXNsZWVwICh1bnNpZ25lZCBpbnQgX191 c2Vjb25kcykgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBwYXVzZSAodm9pZCkgdGhyb3cgKCk7 CgoKCmV4dGVybiBpbnQgY2hvd24gKF9fY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3du ZXIsIF9fZ2lkX3QgX19ncm91cCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGZjaG93biAoaW50 IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSB0aHJvdyAoKTsKCgoKCmV4 dGVybiBpbnQgbGNob3duIChfX2NvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBfX293bmVyLCBf X2dpZF90IF9fZ3JvdXApIHRocm93ICgpOwoKCgoKCmV4dGVybiBpbnQgY2hkaXIgKF9fY29uc3Qg Y2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSB0 aHJvdyAoKTsKIyA0MTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gY2hhciAqZ2V0 Y3dkIChjaGFyICpfX2J1Ziwgc2l6ZV90IF9fc2l6ZSkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNo YXIgKmdldF9jdXJyZW50X2Rpcl9uYW1lICh2b2lkKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGNo YXIgKmdldHdkIChjaGFyICpfX2J1ZikgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IGR1cCAoaW50 IF9fZmQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgZHVwMiAoaW50IF9fZmQsIGludCBfX2ZkMikg dGhyb3cgKCk7CgoKZXh0ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmly b247CgoKCgoKZXh0ZXJuIGludCBleGVjdmUgKF9fY29uc3QgY2hhciAqX19wYXRoLCBjaGFyICpf X2NvbnN0IF9fYXJndltdLCBjaGFyICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgpl eHRlcm4gaW50IGZleGVjdmUgKGludCBfX2ZkLCBjaGFyICpfX2NvbnN0IF9fYXJndltdLCBjaGFy ICpfX2NvbnN0IF9fZW52cFtdKSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBleGVjdiAoX19j b25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93ICgpOwoKCgpl eHRlcm4gaW50IGV4ZWNsZSAoX19jb25zdCBjaGFyICpfX3BhdGgsIF9fY29uc3QgY2hhciAqX19h cmcsIC4uLikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgZXhlY2wgKF9fY29uc3QgY2hhciAqX19w YXRoLCBfX2NvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IGV4 ZWN2cCAoX19jb25zdCBjaGFyICpfX2ZpbGUsIGNoYXIgKl9fY29uc3QgX19hcmd2W10pIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBleGVjbHAgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX2NvbnN0 IGNoYXIgKl9fYXJnLCAuLi4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBuaWNlIChpbnQgX19p bmMpIHRocm93ICgpOwoKCgoKZXh0ZXJuIHZvaWQgX2V4aXQgKGludCBfX3N0YXR1cykgX19hdHRy aWJ1dGVfXyAoKF9fbm9yZXR1cm5fXykpOwoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvY29u Zm5hbWUuaCIgMSAzCiMgMjUgIi91c3IvaW5jbHVkZS9iaXRzL2NvbmZuYW1lLmgiIDMKZW51bQog IHsKICAgIF9QQ19MSU5LX01BWCwKCiAgICBfUENfTUFYX0NBTk9OLAoKICAgIF9QQ19NQVhfSU5Q VVQsCgogICAgX1BDX05BTUVfTUFYLAoKICAgIF9QQ19QQVRIX01BWCwKCiAgICBfUENfUElQRV9C VUYsCgogICAgX1BDX0NIT1dOX1JFU1RSSUNURUQsCgogICAgX1BDX05PX1RSVU5DLAoKICAgIF9Q Q19WRElTQUJMRSwKCiAgICBfUENfU1lOQ19JTywKCiAgICBfUENfQVNZTkNfSU8sCgogICAgX1BD X1BSSU9fSU8sCgogICAgX1BDX1NPQ0tfTUFYQlVGLAoKICAgIF9QQ19GSUxFU0laRUJJVFMKCiAg fTsKCgplbnVtCiAgewogICAgX1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBf U0NfQ0xLX1RDSywKCiAgICBfU0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAg IF9TQ19TVFJFQU1fTUFYLAoKICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJP TCwKCiAgICBfU0NfU0FWRURfSURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9T Q19QUklPUklUWV9TQ0hFRFVMSU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJP Tk9VU19JTywKCiAgICBfU0NfUFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9J TywKCiAgICBfU0NfRlNZTkMsCgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9D SywKCiAgICBfU0NfTUVNTE9DS19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgog ICAgX1NDX01FU1NBR0VfUEFTU0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hB UkVEX01FTU9SWV9PQkpFQ1RTLAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlP X01BWCwKCiAgICBfU0NfQUlPX1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01B WCwKCiAgICBfU0NfTVFfT1BFTl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19W RVJTSU9OLAoKICAgIF9TQ19QQUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0Nf U0VNX05TRU1TX01BWCwKCiAgICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVf TUFYLAoKICAgIF9TQ19USU1FUl9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9T Q19CQ19ESU1fTUFYLAoKICAgIF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19N QVgsCgogICAgX1NDX0NPTExfV0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwK CiAgICBfU0NfRVhQUl9ORVNUX01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RV UF9NQVgsCgogICAgX1NDX0NIQVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwK CiAgICBfU0NfMl9DX0JJTkQsCgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYs CgogICAgX1NDXzJfRk9SVF9SVU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FM RURFRiwKCgogICAgX1NDX1BJSSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tF VCwKCiAgICBfU0NfUElJX0lOVEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xM LAoKICAgIF9TQ19TRUxFQ1QsCgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX1BJSV9JTlRF Uk5FVF9TVFJFQU0sCgogICAgX1NDX1BJSV9JTlRFUk5FVF9ER1JBTSwKCiAgICBfU0NfUElJX09T SV9DT1RTLAoKICAgIF9TQ19QSUlfT1NJX0NMVFMsCgogICAgX1NDX1BJSV9PU0lfTSwKCiAgICBf U0NfVF9JT1ZfTUFYLAoKCgogICAgX1NDX1RIUkVBRFMsCgogICAgX1NDX1RIUkVBRF9TQUZFX0ZV TkNUSU9OUywKCiAgICBfU0NfR0VUR1JfUl9TSVpFX01BWCwKCiAgICBfU0NfR0VUUFdfUl9TSVpF X01BWCwKCiAgICBfU0NfTE9HSU5fTkFNRV9NQVgsCgogICAgX1NDX1RUWV9OQU1FX01BWCwKCiAg ICBfU0NfVEhSRUFEX0RFU1RSVUNUT1JfSVRFUkFUSU9OUywKCiAgICBfU0NfVEhSRUFEX0tFWVNf TUFYLAoKICAgIF9TQ19USFJFQURfU1RBQ0tfTUlOLAoKICAgIF9TQ19USFJFQURfVEhSRUFEU19N QVgsCgogICAgX1NDX1RIUkVBRF9BVFRSX1NUQUNLQUREUiwKCiAgICBfU0NfVEhSRUFEX0FUVFJf U1RBQ0tTSVpFLAoKICAgIF9TQ19USFJFQURfUFJJT1JJVFlfU0NIRURVTElORywKCiAgICBfU0Nf VEhSRUFEX1BSSU9fSU5IRVJJVCwKCiAgICBfU0NfVEhSRUFEX1BSSU9fUFJPVEVDVCwKCiAgICBf U0NfVEhSRUFEX1BST0NFU1NfU0hBUkVELAoKCiAgICBfU0NfTlBST0NFU1NPUlNfQ09ORiwKCiAg ICBfU0NfTlBST0NFU1NPUlNfT05MTiwKCiAgICBfU0NfUEhZU19QQUdFUywKCiAgICBfU0NfQVZQ SFlTX1BBR0VTLAoKICAgIF9TQ19BVEVYSVRfTUFYLAoKICAgIF9TQ19QQVNTX01BWCwKCgogICAg X1NDX1hPUEVOX1ZFUlNJT04sCgogICAgX1NDX1hPUEVOX1hDVV9WRVJTSU9OLAoKICAgIF9TQ19Y T1BFTl9VTklYLAoKICAgIF9TQ19YT1BFTl9DUllQVCwKCiAgICBfU0NfWE9QRU5fRU5IX0kxOE4s CgogICAgX1NDX1hPUEVOX1NITSwKCgogICAgX1NDXzJfQ0hBUl9URVJNLAoKICAgIF9TQ18yX0Nf VkVSU0lPTiwKCiAgICBfU0NfMl9VUEUsCgoKICAgIF9TQ19YT1BFTl9YUEcyLAoKICAgIF9TQ19Y T1BFTl9YUEczLAoKICAgIF9TQ19YT1BFTl9YUEc0LAoKCiAgICBfU0NfQ0hBUl9CSVQsCgogICAg X1NDX0NIQVJfTUFYLAoKICAgIF9TQ19DSEFSX01JTiwKCiAgICBfU0NfSU5UX01BWCwKCiAgICBf U0NfSU5UX01JTiwKCiAgICBfU0NfTE9OR19CSVQsCgogICAgX1NDX1dPUkRfQklULAoKICAgIF9T Q19NQl9MRU5fTUFYLAoKICAgIF9TQ19OWkVSTywKCiAgICBfU0NfU1NJWkVfTUFYLAoKICAgIF9T Q19TQ0hBUl9NQVgsCgogICAgX1NDX1NDSEFSX01JTiwKCiAgICBfU0NfU0hSVF9NQVgsCgogICAg X1NDX1NIUlRfTUlOLAoKICAgIF9TQ19VQ0hBUl9NQVgsCgogICAgX1NDX1VJTlRfTUFYLAoKICAg IF9TQ19VTE9OR19NQVgsCgogICAgX1NDX1VTSFJUX01BWCwKCgogICAgX1NDX05MX0FSR01BWCwK CiAgICBfU0NfTkxfTEFOR01BWCwKCiAgICBfU0NfTkxfTVNHTUFYLAoKICAgIF9TQ19OTF9OTUFY LAoKICAgIF9TQ19OTF9TRVRNQVgsCgogICAgX1NDX05MX1RFWFRNQVgsCgoKICAgIF9TQ19YQlM1 X0lMUDMyX09GRjMyLAoKICAgIF9TQ19YQlM1X0lMUDMyX09GRkJJRywKCiAgICBfU0NfWEJTNV9M UDY0X09GRjY0LAoKICAgIF9TQ19YQlM1X0xQQklHX09GRkJJRywKCgogICAgX1NDX1hPUEVOX0xF R0FDWSwKCiAgICBfU0NfWE9QRU5fUkVBTFRJTUUsCgogICAgX1NDX1hPUEVOX1JFQUxUSU1FX1RI UkVBRFMKCiAgfTsKCgoKCgplbnVtCiAgewogICAgX0NTX1BBVEgKCgoKCiAgICAsCiAgICBfQ1Nf TEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NTX0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElC UywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywKCiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9D U19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19MRlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5U RkxBR1MKCgoKCiAgICAsCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9DRkxBR1MgPSAxMTAwLAoK ICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG MzJfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MSU5URkxBR1MsCgogICAgX0NTX1hC UzVfSUxQMzJfT0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTERGTEFH UywKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9JTFAzMl9P RkZCSUdfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfQ0ZMQUdTLAoKICAgIF9D U19YQlM1X0xQNjRfT0ZGNjRfTERGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xJQlMs CgogICAgX0NTX1hCUzVfTFA2NF9PRkY2NF9MSU5URkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdf T0ZGQklHX0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTERGTEFHUywKCiAgICBf Q1NfWEJTNV9MUEJJR19PRkZCSUdfTElCUywKCiAgICBfQ1NfWEJTNV9MUEJJR19PRkZCSUdfTElO VEZMQUdTCgoKICB9OwojIDQ5OCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKCgpleHRlcm4g bG9uZyBpbnQgcGF0aGNvbmYgKF9fY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSB0aHJv dyAoKTsKCgpleHRlcm4gbG9uZyBpbnQgZnBhdGhjb25mIChpbnQgX19mZCwgaW50IF9fbmFtZSkg dGhyb3cgKCk7CgoKZXh0ZXJuIGxvbmcgaW50IHN5c2NvbmYgKGludCBfX25hbWUpIHRocm93ICgp OwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIgKGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXpl X3QgX19sZW4pIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgX19nZXRwaWQgKHZvaWQpIHRo cm93ICgpOwpleHRlcm4gX19waWRfdCBnZXRwaWQgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBf X3BpZF90IGdldHBwaWQgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIF9fcGlkX3QgZ2V0cGdy cCAodm9pZCkgdGhyb3cgKCk7CiMgNTM0ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJu IF9fcGlkX3QgX19nZXRwZ2lkIChfX3BpZF90IF9fcGlkKSB0aHJvdyAoKTsKCmV4dGVybiBfX3Bp ZF90IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IF9f c2V0cGdpZCAoX19waWRfdCBfX3BpZCwgX19waWRfdCBfX3BnaWQpIHRocm93ICgpOwpleHRlcm4g aW50IHNldHBnaWQgKF9fcGlkX3QgX19waWQsIF9fcGlkX3QgX19wZ2lkKSB0aHJvdyAoKTsKIyA1 NjEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHNldHBncnAgKHZvaWQpIHRo cm93ICgpOwojIDU3OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNl dHNpZCAodm9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3BpZF90IGdldHNpZCAoX19waWRfdCBf X3BpZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBfX3VpZF90IGdldHVpZCAodm9pZCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIF9fZ2lk X3QgZ2V0Z2lkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gX19naWRfdCBnZXRlZ2lkICh2b2lk KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90 IF9fbGlzdFtdKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBncm91cF9tZW1iZXIgKF9fZ2lkX3Qg X19naWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IHNldHVpZCAoX191aWRfdCBfX3VpZCkg dGhyb3cgKCk7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3VpZF90IF9fcnVpZCwgX191aWRf dCBfX2V1aWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRldWlkIChfX3VpZF90IF9fdWlk KSB0aHJvdyAoKTsKCgoKCgoKZXh0ZXJuIGludCBzZXRnaWQgKF9fZ2lkX3QgX19naWQpIHRocm93 ICgpOwoKCgoKZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19l Z2lkKSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgc2V0ZWdpZCAoX19naWRfdCBfX2dpZCkgdGhy b3cgKCk7CgoKCgoKCmV4dGVybiBfX3BpZF90IF9fZm9yayAodm9pZCkgdGhyb3cgKCk7CmV4dGVy biBfX3BpZF90IGZvcmsgKHZvaWQpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9y ayAodm9pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGNoYXIgKnR0eW5hbWUgKGludCBfX2ZkKSB0 aHJvdyAoKTsKCgoKZXh0ZXJuIGludCB0dHluYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwg c2l6ZV90IF9fYnVmbGVuKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBpc2F0dHkgKGludCBfX2Zk KSB0aHJvdyAoKTsKCgoKCmV4dGVybiBpbnQgdHR5c2xvdCAodm9pZCkgdGhyb3cgKCk7CgoKCgpl eHRlcm4gaW50IGxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBfX2NvbnN0IGNoYXIgKl9fdG8p IHRocm93ICgpOwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKF9fY29uc3QgY2hhciAqX19mcm9tLCBf X2NvbnN0IGNoYXIgKl9fdG8pIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoX19j b25zdCBjaGFyICpfX3BhdGgsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoK CgpleHRlcm4gaW50IHVubGluayAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgpOwoKCmV4 dGVybiBpbnQgcm1kaXIgKF9fY29uc3QgY2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJu IF9fcGlkX3QgdGNnZXRwZ3JwIChpbnQgX19mZCkgdGhyb3cgKCk7CgoKZXh0ZXJuIGludCB0Y3Nl dHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9pZCkgdGhyb3cgKCk7CgoKCmV4dGVybiBj aGFyICpnZXRsb2dpbiAodm9pZCkgdGhyb3cgKCk7CiMgNzE1ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIGludCBzZXRsb2dpbiAoX19jb25zdCBjaGFyICpfX25hbWUpIHRocm93ICgp OwojIDcyNCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dldG9w dC5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiAiQyIgewojIDM2 ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGNoYXIgKm9wdGFyZzsKIyA1MCAiL3Vz ci9pbmNsdWRlL2dldG9wdC5oIiAzCmV4dGVybiBpbnQgb3B0aW5kOwoKCgoKZXh0ZXJuIGludCBv cHRlcnI7CgoKCmV4dGVybiBpbnQgb3B0b3B0OwojIDEzNCAiL3Vzci9pbmNsdWRlL2dldG9wdC5o IiAzCmV4dGVybiBpbnQgZ2V0b3B0IChpbnQgX19hcmdjLCBjaGFyICpjb25zdCAqX19hcmd2LCBj b25zdCBjaGFyICpfX3Nob3J0b3B0cyk7CiMgMTYzICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMK fQojIDcyNSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAyIDMKIyA3MzMgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMwpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUsIHNpemVfdCBf X2xlbikgdGhyb3cgKCk7CgoKCmV4dGVybiBpbnQgc2V0aG9zdG5hbWUgKF9fY29uc3QgY2hhciAq X19uYW1lLCBzaXplX3QgX19sZW4pIHRocm93ICgpOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAo bG9uZyBpbnQgX19pZCkgdGhyb3cgKCk7CgoKCgoKZXh0ZXJuIGludCBnZXRkb21haW5uYW1lIChj aGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CmV4dGVybiBpbnQgc2V0ZG9tYWlu bmFtZSAoX19jb25zdCBjaGFyICpfX25hbWUsIHNpemVfdCBfX2xlbikgdGhyb3cgKCk7CgoKCmV4 dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSB0aHJvdyAoKTsKCgoKCgpleHRlcm4gaW50IHZoYW5n dXAgKHZvaWQpIHRocm93ICgpOwoKCmV4dGVybiBpbnQgcmV2b2tlIChfX2NvbnN0IGNoYXIgKl9f ZmlsZSkgdGhyb3cgKCk7CgoKCgoKCgpleHRlcm4gaW50IHByb2ZpbCAodW5zaWduZWQgc2hvcnQg aW50ICpfX3NhbXBsZV9idWZmZXIsIHNpemVfdCBfX3NpemUsIHNpemVfdCBfX29mZnNldCwgdW5z aWduZWQgaW50IF9fc2NhbGUpIHRocm93ICgpOwoKCgoKCgpleHRlcm4gaW50IGFjY3QgKF9fY29u c3QgY2hhciAqX19uYW1lKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGludCBjaHJvb3QgKF9fY29uc3Qg Y2hhciAqX19wYXRoKSB0aHJvdyAoKTsKCgoKZXh0ZXJuIGNoYXIgKmdldHVzZXJzaGVsbCAodm9p ZCkgdGhyb3cgKCk7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CmV4 dGVybiB2b2lkIHNldHVzZXJzaGVsbCAodm9pZCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gY2hhciAq Z2V0cGFzcyAoX19jb25zdCBjaGFyICpfX3Byb21wdCkgdGhyb3cgKCk7CgoKCgpleHRlcm4gaW50 IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgdGhyb3cgKCk7CgoKCgoKCgpl eHRlcm4gbG9uZyBpbnQgZ2V0aG9zdGlkICh2b2lkKSB0aHJvdyAoKTsKCgpleHRlcm4gaW50IHN5 bmMgKHZvaWQpIHRocm93ICgpOwoKCgoKZXh0ZXJuIGludCBfX2dldHBhZ2VzaXplICh2b2lkKSB0 aHJvdyAoKSBfX2F0dHJpYnV0ZV9fICgoX19jb25zdF9fKSk7CmV4dGVybiBpbnQgZ2V0cGFnZXNp emUgKHZvaWQpIHRocm93ICgpIF9fYXR0cmlidXRlX18gKChfX2NvbnN0X18pKTsKCgoKCmV4dGVy biBpbnQgdHJ1bmNhdGUgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZl90IF9fbGVuZ3RoKSB0 aHJvdyAoKTsKIyA4MjkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5j YXRlNjQgKF9fY29uc3QgY2hhciAqX19maWxlLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgp OwoKCgpleHRlcm4gaW50IF9fZnRydW5jYXRlIChpbnQgX19mZCwgX19vZmZfdCBfX2xlbmd0aCkg dGhyb3cgKCk7CgpleHRlcm4gaW50IGZ0cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5n dGgpIHRocm93ICgpOwojIDg0NSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg ZnRydW5jYXRlNjQgKGludCBfX2ZkLCBfX29mZjY0X3QgX19sZW5ndGgpIHRocm93ICgpOwoKCgoK CmV4dGVybiBpbnQgZ2V0ZHRhYmxlc2l6ZSAodm9pZCkgdGhyb3cgKCk7CiMgODYwICIvdXNyL2lu Y2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKiBfX2FkZHIpIHRocm93ICgp OwoKCiMgMSAiL3NjcmF0Y2gwL3Vzci9saWIvZ2NjLWxpYi9pNTg2LXBjLWxpbnV4LWdudS8zLjIv aW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMTQ3ICIvc2NyYXRjaDAvdXNyL2xpYi9nY2MtbGliL2k1 ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAzCnR5cGVkZWYgaW50IHB0cmRp ZmZfdDsKIyA4NjQgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCgoKZXh0ZXJuIHZvaWQg KiBfX3NicmsgKHB0cmRpZmZfdCBfX2RlbHRhKSB0aHJvdyAoKTsKZXh0ZXJuIHZvaWQgKiBzYnJr IChwdHJkaWZmX3QgX19kZWx0YSkgdGhyb3cgKCk7CiMgODg1ICIvdXNyL2luY2x1ZGUvdW5pc3Rk LmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9fc3lzbm8sIC4uLikgdGhy b3cgKCk7CiMgOTA1ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZiAo aW50IF9fZmQsIGludCBfX2NtZCwgX19vZmZfdCBfX2xlbikgdGhyb3cgKCk7CiMgOTE1ICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBsb2NrZjY0IChpbnQgX19mZCwgaW50IF9f Y21kLCBfX29mZjY0X3QgX19sZW4pIHRocm93ICgpOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0 ZC5oIiAzCmV4dGVybiBpbnQgX19saWJjX2VuYWJsZV9zZWN1cmU7CgoKCgoKCmV4dGVybiBpbnQg ZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmNy eXB0IChfX2NvbnN0IGNoYXIgKl9fa2V5LCBfX2NvbnN0IGNoYXIgKl9fc2FsdCkgdGhyb3cgKCk7 CgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChfX2NvbnN0IGNoYXIgKl9fa2V5KSB0aHJvdyAoKTsKCgoK ZXh0ZXJuIHZvaWQgZW5jcnlwdCAoY2hhciAqX19ibG9jaywgaW50IF9fZWRmbGFnKSB0aHJvdyAo KTsKCgoKCgoKZXh0ZXJuIHZvaWQgc3dhYiAoX19jb25zdCB2b2lkICogX19mcm9tLCB2b2lkICog X190bywgc3NpemVfdCBfX24pIHRocm93ICgpOwoKCgoKCgoKZXh0ZXJuIGNoYXIgKmN0ZXJtaWQg KGNoYXIgKl9fcykgdGhyb3cgKCk7CgoKCmV4dGVybiBjaGFyICpjdXNlcmlkIChjaGFyICpfX3Mp IHRocm93ICgpOwoKCmV4dGVybiBpbnQgcmVuYW1lIChfX2NvbnN0IGNoYXIgKl9fb2xkLCBfX2Nv bnN0IGNoYXIgKl9fbmV3KSB0aHJvdyAoKTsKIyA5OTkgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJlKSAodm9pZCksIHZv aWQgKCpfX3BhcmVudCkgKHZvaWQpLCB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSB0aHJvdyAoKTsK CgoKCn0KIyAyICJ0ZXN0Mi5jIiAyCmludCBtYWluKCkKewogICAgICAgIGludCBpOwoKCiAgICAg ICAgaT0wOwogICAgICAgIGZvcihpPTA7aTwxMDtpKyspOwogICAgICAgIHdyaXRlKDEsJmksNCk7 CgoKICAgICAgICBpPTA7CiAgICAgICAgd2hpbGUoMSkgewogICAgICAgICAgICAgICAgaWYoaT09 MTApIGJyZWFrOwogICAgICAgICAgICAgICAgaSsrOwogICAgICAgIH0KICAgICAgICB3cml0ZSgx LCZpLDQpOwogICAgICAgIHJldHVybiAwOwp9Cg==