From mboxrd@z Thu Jan 1 00:00:00 1970 From: ltuikov@yahoo.com To: gcc-gnats@gcc.gnu.org Cc: ltuikov@yahoo.com Subject: c/4529: ice on legal code (unrecognizable insn) Date: Wed, 10 Oct 2001 19:06:00 -0000 Message-id: <20011011020442.29371.qmail@sourceware.cygnus.com> X-SW-Source: 2001-10/msg00210.html List-Id: >Number: 4529 >Category: c >Synopsis: ice on legal code (unrecognizable insn) >Confidential: no >Severity: critical >Priority: medium >Responsible: unassigned >State: open >Class: ice-on-legal-code >Submitter-Id: net >Arrival-Date: Wed Oct 10 19:06:01 PDT 2001 >Closed-Date: >Last-Modified: >Originator: ltuikov@yahoo.com >Release: Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/specs >Organization: >Environment: i686-gnu-linux, Athlon K7 thunderburd, Asus K7V mobo. Linux 2.4.10, gcc 3.0.1. >Description: Compiling Linux kernel 2.4.11 with REALTEK network card driver enabled gives ice on legal code, ``Unrecognizable insn'' exactly. % gcc -v Reading specs from /usr/local/lib/gcc-lib/i686-pc-linux-gnu/3.0.1/specs Configured with: ../gcc-3.0.1/configure --host=i686-pc-linux-gnu -with-gnu-as --with-gnu-ld --disable-win32-registry --enable-threads=posix Thread model: posix gcc version 3.0.1 >How-To-Repeat: Try to compile the Linux kernel 2.4.11 with Realtek 8139 network card driver built in. >Fix: >Release-Note: >Audit-Trail: >Unformatted: Configured with: ../gcc-3.0.1/configure --host=i686-pc-linux-gnu -with-gnu-as --with-gnu-ld --disable-win32-registry --enable-threads=posix Thread model: posix gcc version 3.0.1 ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="8139too.i" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="8139too.i" IyAxNDUgIjgxMzl0b28uYyIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9jb25maWcuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2F1dG9jb25mLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9j b25maWcuaCIgMgojIDE0NiAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvbW9kdWxlLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvbW9kdWxlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvY29uZmlnLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbW9kdWxlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9z cGlubG9jay5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv Y29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zcGlu bG9jay5oIiAyCiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NwaW5s b2NrLmgiCiAgdHlwZWRlZiBzdHJ1Y3QgeyB9IHNwaW5sb2NrX3Q7CiMgMTE2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIgogIHR5cGVkZWYgc3RydWN0IHsg fSByd2xvY2tfdDsKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW9k dWxlLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saXN0Lmgi IDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3ByZWZldGNo LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcHJlZmV0Y2gu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDEK IyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS92bTg2LmgiIDEKIyA2OCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3ZtODYuaCIKc3RydWN0IHZtODZfcmVncyB7CgoK CiAgICAgICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBlY3g7CiAgICAgICAgbG9uZyBlZHg7CiAg ICAgICAgbG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7CiAgICAgICAgbG9uZyBlYnA7CiAgICAg ICAgbG9uZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxfZHM7CiAgICAgICAgbG9uZyBfX251bGxf ZXM7CiAgICAgICAgbG9uZyBfX251bGxfZnM7CiAgICAgICAgbG9uZyBfX251bGxfZ3M7CiAgICAg ICAgbG9uZyBvcmlnX2VheDsKICAgICAgICBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBjcywgX19jc2g7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwoKCgogICAgICAgIHVuc2lnbmVkIHNob3J0IGVz LCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19kc2g7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdzLCBfX2dzaDsKfTsK CnN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX21hcFs4 XTsKfTsKCnN0cnVjdCB2bTg2X3N0cnVjdCB7CiAgICAgICAgc3RydWN0IHZtODZfcmVncyByZWdz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzY3Jl ZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5cGU7CiAgICAgICAgc3RydWN0 IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAgICAgIHN0cnVjdCByZXZlY3Rv cmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwp9OwoKCgoKCgpzdHJ1Y3Qgdm04NnBsdXNfaW5m b19zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZm9yY2VfcmV0dXJuX2Zvcl9waWM6MTsK ICAgICAgICB1bnNpZ25lZCBsb25nIHZtODZkYmdfYWN0aXZlOjE7CiAgICAgICAgdW5zaWduZWQg bG9uZyB2bTg2ZGJnX1RGcGVuZGlnOjE7CiAgICAgICAgdW5zaWduZWQgbG9uZyB1bnVzZWQ6Mjg7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBpc192bTg2cHVzOjE7CiAgICAgICAgdW5zaWduZWQgY2hh ciB2bTg2ZGJnX2ludHh4dGFiWzMyXTsKfTsKCnN0cnVjdCB2bTg2cGx1c19zdHJ1Y3QgewogICAg ICAgIHN0cnVjdCB2bTg2X3JlZ3MgcmVnczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc2NyZWVuX2JpdG1hcDsKICAgICAgICB1bnNpZ25lZCBsb25n IGNwdV90eXBlOwogICAgICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnRfcmV2ZWN0b3Jl ZDsKICAgICAgICBzdHJ1Y3QgcmV2ZWN0b3JlZF9zdHJ1Y3QgaW50MjFfcmV2ZWN0b3JlZDsKICAg ICAgICBzdHJ1Y3Qgdm04NnBsdXNfaW5mb19zdHJ1Y3Qgdm04NnBsdXM7Cn07CiMgMTQ1ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdm04Ni5oIgpzdHJ1Y3Qga2VybmVsX3ZtODZf cmVncyB7CgoKCiAgICAgICAgbG9uZyBlYng7CiAgICAgICAgbG9uZyBlY3g7CiAgICAgICAgbG9u ZyBlZHg7CiAgICAgICAgbG9uZyBlc2k7CiAgICAgICAgbG9uZyBlZGk7CiAgICAgICAgbG9uZyBl YnA7CiAgICAgICAgbG9uZyBlYXg7CiAgICAgICAgbG9uZyBfX251bGxfZHM7CiAgICAgICAgbG9u ZyBfX251bGxfZXM7CiAgICAgICAgbG9uZyBvcmlnX2VheDsKICAgICAgICBsb25nIGVpcDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAg ICAgbG9uZyBlc3A7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwoKCgogICAgICAg IHVuc2lnbmVkIHNob3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkcywgX19k c2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZnMsIF9fZnNoOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGdzLCBfX2dzaDsKfTsKCnN0cnVjdCBrZXJuZWxfdm04Nl9zdHJ1Y3QgewogICAgICAgIHN0 cnVjdCBrZXJuZWxfdm04Nl9yZWdzIHJlZ3M7CiMgMTg0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vdm04Ni5oIgogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzY3JlZW5fYml0bWFwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3R5 cGU7CiAgICAgICAgc3RydWN0IHJldmVjdG9yZWRfc3RydWN0IGludF9yZXZlY3RvcmVkOwogICAg ICAgIHN0cnVjdCByZXZlY3RvcmVkX3N0cnVjdCBpbnQyMV9yZXZlY3RvcmVkOwogICAgICAgIHN0 cnVjdCB2bTg2cGx1c19pbmZvX3N0cnVjdCB2bTg2cGx1czsKICAgICAgICBzdHJ1Y3QgcHRfcmVn cyAqcmVnczMyOwojIDIwMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3ZtODYu aCIKfTsKCnZvaWQgaGFuZGxlX3ZtODZfZmF1bHQoc3RydWN0IGtlcm5lbF92bTg2X3JlZ3MgKiwg bG9uZyk7CmludCBoYW5kbGVfdm04Nl90cmFwKHN0cnVjdCBrZXJuZWxfdm04Nl9yZWdzICosIGxv bmcsIGludCk7CiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNz b3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9tYXRoX2VtdS5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NpZ2NvbnRleHQu aCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnY29udGV4dC5o IgpzdHJ1Y3QgX2ZwcmVnIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBleHBvbmVudDsKfTsKCnN0cnVjdCBfZnB4cmVnIHsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzaWduaWZpY2FuZFs0XTsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBleHBvbmVudDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwYWRkaW5nWzNdOwp9OwoKc3RydWN0 IF94bW1yZWcgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZWxlbWVudFs0XTsKfTsKCnN0cnVjdCBf ZnBzdGF0ZSB7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3c7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdzsKICAgICAgICB1bnNpZ25lZCBsb25nIHRhZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlw b2ZmOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3NzZWw7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk YXRhb2ZmOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGF0YXNlbDsKICAgICAgICBzdHJ1Y3QgX2Zw cmVnIF9zdFs4XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdGF0dXM7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgbWFnaWM7CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9meHNyX2Vudls2XTsKICAg ICAgICB1bnNpZ25lZCBsb25nIG14Y3NyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcmVzZXJ2ZWQ7 CiAgICAgICAgc3RydWN0IF9mcHhyZWcgX2Z4c3Jfc3RbOF07CiAgICAgICAgc3RydWN0IF94bW1y ZWcgX3htbVs4XTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBhZGRpbmdbNTZdOwp9OwoKCgpzdHJ1 Y3Qgc2lnY29udGV4dCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZ3MsIF9fZ3NoOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGZzLCBfX2ZzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBlcywgX19l c2g7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZHMsIF9fZHNoOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZWRpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcg ZWJwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJ4 OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWR4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWN4Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgZWF4OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdHJhcG5vOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZXJyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAg ICAgIHVuc2lnbmVkIHNob3J0IGNzLCBfX2NzaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVmbGFn czsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcF9hdF9zaWduYWw7CiAgICAgICAgdW5zaWduZWQg c2hvcnQgc3MsIF9fc3NoOwogICAgICAgIHN0cnVjdCBfZnBzdGF0ZSAqIGZwc3RhdGU7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBvbGRtYXNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3IyOwp9Owoj IDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9tYXRoX2VtdS5oIiAyCgppbnQg cmVzdG9yZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICpidWYpOwppbnQg c2F2ZV9pMzg3X3NvZnQodm9pZCAqczM4Nywgc3RydWN0IF9mcHN0YXRlICogYnVmKTsKCgoKCgpz dHJ1Y3QgaW5mbyB7CiAgICAgICAgbG9uZyBfX19vcmlnX2VpcDsKICAgICAgICBsb25nIF9fX2Vi eDsKICAgICAgICBsb25nIF9fX2VjeDsKICAgICAgICBsb25nIF9fX2VkeDsKICAgICAgICBsb25n IF9fX2VzaTsKICAgICAgICBsb25nIF9fX2VkaTsKICAgICAgICBsb25nIF9fX2VicDsKICAgICAg ICBsb25nIF9fX2VheDsKICAgICAgICBsb25nIF9fX2RzOwogICAgICAgIGxvbmcgX19fZXM7CiAg ICAgICAgbG9uZyBfX19vcmlnX2VheDsKICAgICAgICBsb25nIF9fX2VpcDsKICAgICAgICBsb25n IF9fX2NzOwogICAgICAgIGxvbmcgX19fZWZsYWdzOwogICAgICAgIGxvbmcgX19fZXNwOwogICAg ICAgIGxvbmcgX19fc3M7CiAgICAgICAgbG9uZyBfX192bTg2X2VzOwogICAgICAgIGxvbmcgX19f dm04Nl9kczsKICAgICAgICBsb25nIF9fX3ZtODZfZnM7CiAgICAgICAgbG9uZyBfX192bTg2X2dz Owp9OwojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2VnbWVudC5oIiAxCiMg MTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAxMiAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BhZ2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vcGFnZS5oIiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL21teC5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3R5cGVzLmgiIDEKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvY29uZmlnLmgiIDEKIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC90eXBlcy5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9wb3NpeF90eXBlcy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvc3RkZGVmLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9wb3NpeF90eXBlcy5oIiAyCiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3Bvc2l4X3R5cGVzLmgiCnR5cGVkZWYgc3RydWN0IHsKICAgICAgICB1bnNpZ25lZCBsb25n IGZkc19iaXRzIFsoMTAyNC8oOCAqIHNpemVvZih1bnNpZ25lZCBsb25nKSkpXTsKfSBfX2tlcm5l bF9mZF9zZXQ7CgoKdHlwZWRlZiB2b2lkICgqX19rZXJuZWxfc2lnaGFuZGxlcl90KShpbnQpOwoK CnR5cGVkZWYgaW50IF9fa2VybmVsX2tleV90OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vcG9zaXhfdHlwZXMuaCIKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5l bF9kZXZfdDsKdHlwZWRlZiB1bnNpZ25lZCBsb25nIF9fa2VybmVsX2lub190Owp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IF9fa2VybmVsX21vZGVfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tl cm5lbF9ubGlua190Owp0eXBlZGVmIGxvbmcgX19rZXJuZWxfb2ZmX3Q7CnR5cGVkZWYgaW50IF9f a2VybmVsX3BpZF90Owp0eXBlZGVmIHVuc2lnbmVkIHNob3J0IF9fa2VybmVsX2lwY19waWRfdDsK dHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBfX2tlcm5lbF91aWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCBfX2tlcm5lbF9naWRfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX19rZXJuZWxfc2l6ZV90 Owp0eXBlZGVmIGludCBfX2tlcm5lbF9zc2l6ZV90Owp0eXBlZGVmIGludCBfX2tlcm5lbF9wdHJk aWZmX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5lbF90aW1lX3Q7CnR5cGVkZWYgbG9uZyBfX2tlcm5l bF9zdXNlY29uZHNfdDsKdHlwZWRlZiBsb25nIF9fa2VybmVsX2Nsb2NrX3Q7CnR5cGVkZWYgaW50 IF9fa2VybmVsX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAqIF9fa2VybmVsX2NhZGRyX3Q7CnR5cGVk ZWYgdW5zaWduZWQgc2hvcnQgX19rZXJuZWxfdWlkMTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBzaG9y dCBfX2tlcm5lbF9naWQxNl90Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF91aWQzMl90 Owp0eXBlZGVmIHVuc2lnbmVkIGludCBfX2tlcm5lbF9naWQzMl90OwoKdHlwZWRlZiB1bnNpZ25l ZCBzaG9ydCBfX2tlcm5lbF9vbGRfdWlkX3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX19rZXJu ZWxfb2xkX2dpZF90OwoKCnR5cGVkZWYgbG9uZyBsb25nIF9fa2VybmVsX2xvZmZfdDsKCgp0eXBl ZGVmIHN0cnVjdCB7CgogICAgICAgIGludCB2YWxbMl07CgoKCn0gX19rZXJuZWxfZnNpZF90Owoj IDQ3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAy CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCgoKCnR5cGVkZWYg dW5zaWduZWQgc2hvcnQgdW1vZGVfdDsKCgoKCgoKdHlwZWRlZiBfX3NpZ25lZF9fIGNoYXIgX19z ODsKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdTg7Cgp0eXBlZGVmIF9fc2lnbmVkX18gc2hvcnQg X19zMTY7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgX191MTY7Cgp0eXBlZGVmIF9fc2lnbmVkX18g aW50IF9fczMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCBfX3UzMjsKCgp0eXBlZGVmIF9fc2lnbmVk X18gbG9uZyBsb25nIF9fczY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3U2NDsKCgoK CgoKCnR5cGVkZWYgc2lnbmVkIGNoYXIgczg7CnR5cGVkZWYgdW5zaWduZWQgY2hhciB1ODsKCnR5 cGVkZWYgc2lnbmVkIHNob3J0IHMxNjsKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCB1MTY7Cgp0eXBl ZGVmIHNpZ25lZCBpbnQgczMyOwp0eXBlZGVmIHVuc2lnbmVkIGludCB1MzI7Cgp0eXBlZGVmIHNp Z25lZCBsb25nIGxvbmcgczY0Owp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1NjQ7CgoKCgoK dHlwZWRlZiB1MzIgZG1hX2FkZHJfdDsKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvdHlwZXMuaCIgMgoKCgp0eXBlZGVmIF9fa2VybmVsX2ZkX3NldCBmZF9zZXQ7CnR5 cGVkZWYgX19rZXJuZWxfZGV2X3QgZGV2X3Q7CnR5cGVkZWYgX19rZXJuZWxfaW5vX3QgaW5vX3Q7 CnR5cGVkZWYgX19rZXJuZWxfbW9kZV90IG1vZGVfdDsKdHlwZWRlZiBfX2tlcm5lbF9ubGlua190 IG5saW5rX3Q7CnR5cGVkZWYgX19rZXJuZWxfb2ZmX3Qgb2ZmX3Q7CnR5cGVkZWYgX19rZXJuZWxf cGlkX3QgcGlkX3Q7CnR5cGVkZWYgX19rZXJuZWxfZGFkZHJfdCBkYWRkcl90Owp0eXBlZGVmIF9f a2VybmVsX2tleV90IGtleV90Owp0eXBlZGVmIF9fa2VybmVsX3N1c2Vjb25kc190IHN1c2Vjb25k c190OwoKCnR5cGVkZWYgX19rZXJuZWxfdWlkMzJfdCB1aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9n aWQzMl90IGdpZF90Owp0eXBlZGVmIF9fa2VybmVsX3VpZDE2X3QgdWlkMTZfdDsKdHlwZWRlZiBf X2tlcm5lbF9naWQxNl90IGdpZDE2X3Q7CgoKCnR5cGVkZWYgX19rZXJuZWxfb2xkX3VpZF90IG9s ZF91aWRfdDsKdHlwZWRlZiBfX2tlcm5lbF9vbGRfZ2lkX3Qgb2xkX2dpZF90OwojIDQ1ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIgp0eXBlZGVmIF9fa2VybmVs X2xvZmZfdCBsb2ZmX3Q7CiMgNTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3R5cGVzLmgiCnR5cGVkZWYgX19rZXJuZWxfc2l6ZV90IHNpemVfdDsKCgoKCnR5cGVkZWYgX19r ZXJuZWxfc3NpemVfdCBzc2l6ZV90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9wdHJkaWZmX3QgcHRy ZGlmZl90OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3QgdGltZV90OwoKCgoKdHlwZWRlZiBf X2tlcm5lbF9jbG9ja190IGNsb2NrX3Q7CgoKCgp0eXBlZGVmIF9fa2VybmVsX2NhZGRyX3QgY2Fk ZHJfdDsKCgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIHVfY2hhcjsKdHlwZWRlZiB1bnNpZ25lZCBz aG9ydCB1X3Nob3J0Owp0eXBlZGVmIHVuc2lnbmVkIGludCB1X2ludDsKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIHVfbG9uZzsKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdW5jaGFyOwp0eXBlZGVmIHVu c2lnbmVkIHNob3J0IHVzaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdWludDsKdHlwZWRlZiB1 bnNpZ25lZCBsb25nIHVsb25nOwoKCgoKdHlwZWRlZiBfX3U4IHVfaW50OF90Owp0eXBlZGVmIF9f czggaW50OF90Owp0eXBlZGVmIF9fdTE2IHVfaW50MTZfdDsKdHlwZWRlZiBfX3MxNiBpbnQxNl90 Owp0eXBlZGVmIF9fdTMyIHVfaW50MzJfdDsKdHlwZWRlZiBfX3MzMiBpbnQzMl90OwoKCgp0eXBl ZGVmIF9fdTggdWludDhfdDsKdHlwZWRlZiBfX3UxNiB1aW50MTZfdDsKdHlwZWRlZiBfX3UzMiB1 aW50MzJfdDsKCgp0eXBlZGVmIF9fdTY0IHVpbnQ2NF90Owp0eXBlZGVmIF9fdTY0IHVfaW50NjRf dDsKdHlwZWRlZiBfX3M2NCBpbnQ2NF90OwojIDEyMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvdHlwZXMuaCIKc3RydWN0IHVzdGF0IHsKICAgICAgICBfX2tlcm5lbF9kYWRk cl90IGZfdGZyZWU7CiAgICAgICAgX19rZXJuZWxfaW5vX3QgZl90aW5vZGU7CiAgICAgICAgY2hh ciBmX2ZuYW1lWzZdOwogICAgICAgIGNoYXIgZl9mcGFja1s2XTsKfTsKIyA5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vbW14LmgiIDIKCmV4dGVybiB2b2lkICpfbW14X21lbWNw eSh2b2lkICp0bywgY29uc3Qgdm9pZCAqZnJvbSwgc2l6ZV90IHNpemUpOwpleHRlcm4gdm9pZCBt bXhfY2xlYXJfcGFnZSh2b2lkICpwYWdlKTsKZXh0ZXJuIHZvaWQgbW14X2NvcHlfcGFnZSh2b2lk ICp0bywgdm9pZCAqZnJvbSk7CiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2Fz bS9wYWdlLmgiIDIKIyA0NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BhZ2Uu aCIKdHlwZWRlZiBzdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIHB0ZV9sb3c7IH0gcHRlX3Q7CnR5cGVk ZWYgc3RydWN0IHsgdW5zaWduZWQgbG9uZyBwbWQ7IH0gcG1kX3Q7CnR5cGVkZWYgc3RydWN0IHsg dW5zaWduZWQgbG9uZyBwZ2Q7IH0gcGdkX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCB7IHVuc2lnbmVk IGxvbmcgcGdwcm90OyB9IHBncHJvdF90OwojIDEwNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3BhZ2UuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGdldF9vcmRlcih1bnNpZ25l ZCBsb25nIHNpemUpCnsKICAgICAgICBpbnQgb3JkZXI7CgogICAgICAgIHNpemUgPSAoc2l6ZS0x KSA+PiAoMTIgLTEpOwogICAgICAgIG9yZGVyID0gLTE7CiAgICAgICAgZG8gewogICAgICAgICAg ICAgICAgc2l6ZSA+Pj0gMTsKICAgICAgICAgICAgICAgIG9yZGVyKys7CiAgICAgICAgfSB3aGls ZSAoc2l6ZSk7CiAgICAgICAgcmV0dXJuIG9yZGVyOwp9CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2FzbS9wcm9jZXNzb3IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2FzbS9zaWdjb250ZXh0LmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv YXNtL3Byb2Nlc3Nvci5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L2NwdWZlYXR1cmUuaCIgMQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20v cHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9j YWNoZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jYWNoZS5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKCgoK CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQoj IDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9jYWNoZS5oIiAyCiMgNiAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY2FjaGUuaCIgMgojIDE4ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC90aHJlYWRzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMgojIDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDIKIyAzMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpzdHJ1Y3QgY3B1aW5mb194ODYgewogICAgICAgIF9fdTgg eDg2OwogICAgICAgIF9fdTggeDg2X3ZlbmRvcjsKICAgICAgICBfX3U4IHg4Nl9tb2RlbDsKICAg ICAgICBfX3U4IHg4Nl9tYXNrOwogICAgICAgIGNoYXIgd3Bfd29ya3Nfb2s7CiAgICAgICAgY2hh ciBobHRfd29ya3Nfb2s7CiAgICAgICAgY2hhciBoYXJkX21hdGg7CiAgICAgICAgY2hhciByZnU7 CiAgICAgICAgaW50IGNwdWlkX2xldmVsOwogICAgICAgIF9fdTMyIHg4Nl9jYXBhYmlsaXR5WzRd OwogICAgICAgIGNoYXIgeDg2X3ZlbmRvcl9pZFsxNl07CiAgICAgICAgY2hhciB4ODZfbW9kZWxf aWRbNjRdOwogICAgICAgIGludCB4ODZfY2FjaGVfc2l6ZTsKCiAgICAgICAgaW50IGZkaXZfYnVn OwogICAgICAgIGludCBmMDBmX2J1ZzsKICAgICAgICBpbnQgY29tYV9idWc7CiAgICAgICAgdW5z aWduZWQgbG9uZyBsb29wc19wZXJfamlmZnk7CiAgICAgICAgdW5zaWduZWQgbG9uZyAqcGdkX3F1 aWNrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgKnBtZF9xdWljazsKICAgICAgICB1bnNpZ25lZCBs b25nICpwdGVfcXVpY2s7CiAgICAgICAgdW5zaWduZWQgbG9uZyBwZ3RhYmxlX2NhY2hlX3N6Owp9 IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNikpKSkpKTsKIyA3MiAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5oIgpleHRlcm4gc3RydWN0IGNw dWluZm9feDg2IGJvb3RfY3B1X2RhdGE7CmV4dGVybiBzdHJ1Y3QgdHNzX3N0cnVjdCBpbml0X3Rz c1sxXTsKIyA5NCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5o IgpleHRlcm4gY2hhciBpZ25vcmVfaXJxMTM7CgpleHRlcm4gdm9pZCBpZGVudGlmeV9jcHUoc3Ry dWN0IGNwdWluZm9feDg2ICopOwpleHRlcm4gdm9pZCBwcmludF9jcHVfaW5mbyhzdHJ1Y3QgY3B1 aW5mb194ODYgKik7CmV4dGVybiB2b2lkIGRvZGd5X3RzYyh2b2lkKTsKIyAxMjQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RhdGljIGlubGluZSB2b2lk IGNwdWlkKGludCBvcCwgaW50ICplYXgsIGludCAqZWJ4LCBpbnQgKmVjeCwgaW50ICplZHgpCnsK ICAgICAgICBfX2FzbV9fKCJjcHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoKmVheCksCiAg ICAgICAgICAgICAgICAgICI9YiIgKCplYngpLAogICAgICAgICAgICAgICAgICAiPWMiICgqZWN4 KSwKICAgICAgICAgICAgICAgICAgIj1kIiAoKmVkeCkKICAgICAgICAgICAgICAgIDogIjAiIChv cCkpOwp9CgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYXgodW5zaWduZWQg aW50IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheDsKCiAgICAgICAgX19hc21fXygiY3B1 aWQiCiAgICAgICAgICAgICAgICA6ICI9YSIgKGVheCkKICAgICAgICAgICAgICAgIDogIjAiIChv cCkKICAgICAgICAgICAgICAgIDogImJ4IiwgImN4IiwgImR4Iik7CiAgICAgICAgcmV0dXJuIGVh eDsKfQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lYngodW5zaWduZWQgaW50IG9w KQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWJ4OwoKICAgICAgICBfX2FzbV9fKCJjcHVp ZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1iIiAoZWJ4KQogICAgICAgICAgICAg ICAgOiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiY3giLCAiZHgiICk7CiAgICAgICAgcmV0 dXJuIGVieDsKfQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lY3godW5zaWduZWQg aW50IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWN4OwoKICAgICAgICBfX2FzbV9f KCJjcHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1jIiAoZWN4KQogICAgICAg ICAgICAgICAgOiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiYngiLCAiZHgiICk7CiAgICAg ICAgcmV0dXJuIGVjeDsKfQpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBjcHVpZF9lZHgodW5z aWduZWQgaW50IG9wKQp7CiAgICAgICAgdW5zaWduZWQgaW50IGVheCwgZWR4OwoKICAgICAgICBf X2FzbV9fKCJjcHVpZCIKICAgICAgICAgICAgICAgIDogIj1hIiAoZWF4KSwgIj1kIiAoZWR4KQog ICAgICAgICAgICAgICAgOiAiMCIgKG9wKQogICAgICAgICAgICAgICAgOiAiYngiLCAiY3giKTsK ICAgICAgICByZXR1cm4gZWR4Owp9CiMgMTk5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vcHJvY2Vzc29yLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIG1tdV9jcjRfZmVhdHVyZXM7 CgpzdGF0aWMgaW5saW5lIHZvaWQgc2V0X2luX2NyNCAodW5zaWduZWQgbG9uZyBtYXNrKQp7CiAg ICAgICAgbW11X2NyNF9mZWF0dXJlcyB8PSBtYXNrOwogICAgICAgIF9fYXNtX18oIm1vdmwgJSVj cjQsJSVlYXhcblx0IgogICAgICAgICAgICAgICAgIm9ybCAlMCwlJWVheFxuXHQiCiAgICAgICAg ICAgICAgICAibW92bCAlJWVheCwlJWNyNFxuIgogICAgICAgICAgICAgICAgOiA6ICJpcmciICht YXNrKQogICAgICAgICAgICAgICAgOiJheCIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY2xlYXJf aW5fY3I0ICh1bnNpZ25lZCBsb25nIG1hc2spCnsKICAgICAgICBtbXVfY3I0X2ZlYXR1cmVzICY9 IH5tYXNrOwogICAgICAgIF9fYXNtX18oIm1vdmwgJSVjcjQsJSVlYXhcblx0IgogICAgICAgICAg ICAgICAgImFuZGwgJTAsJSVlYXhcblx0IgogICAgICAgICAgICAgICAgIm1vdmwgJSVlYXgsJSVj cjRcbiIKICAgICAgICAgICAgICAgIDogOiAiaXJnIiAofm1hc2spCiAgICAgICAgICAgICAgICA6 ImF4Iik7Cn0KIyAyNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNz b3IuaCIKZXh0ZXJuIGludCBNQ0FfYnVzOwoKCgpleHRlcm4gdW5zaWduZWQgaW50IG1hY2hpbmVf aWQ7CmV4dGVybiB1bnNpZ25lZCBpbnQgbWFjaGluZV9zdWJtb2RlbF9pZDsKZXh0ZXJuIHVuc2ln bmVkIGludCBCSU9TX3JldmlzaW9uOwpleHRlcm4gdW5zaWduZWQgaW50IG1jYV9wZW50aXVtX2Zs YWc7CiMgMjgyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi CnN0cnVjdCBpMzg3X2ZzYXZlX3N0cnVjdCB7CiAgICAgICAgbG9uZyBjd2Q7CiAgICAgICAgbG9u ZyBzd2Q7CiAgICAgICAgbG9uZyB0d2Q7CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBm Y3M7CiAgICAgICAgbG9uZyBmb287CiAgICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBzdF9z cGFjZVsyMF07CiAgICAgICAgbG9uZyBzdGF0dXM7Cn07CgpzdHJ1Y3QgaTM4N19meHNhdmVfc3Ry dWN0IHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjd2Q7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg c3dkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHR3ZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBm b3A7CiAgICAgICAgbG9uZyBmaXA7CiAgICAgICAgbG9uZyBmY3M7CiAgICAgICAgbG9uZyBmb287 CiAgICAgICAgbG9uZyBmb3M7CiAgICAgICAgbG9uZyBteGNzcjsKICAgICAgICBsb25nIHJlc2Vy dmVkOwogICAgICAgIGxvbmcgc3Rfc3BhY2VbMzJdOwogICAgICAgIGxvbmcgeG1tX3NwYWNlWzMy XTsKICAgICAgICBsb25nIHBhZGRpbmdbNTZdOwp9IF9fYXR0cmlidXRlX18gKChhbGlnbmVkICgx NikpKTsKCnN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHsKICAgICAgICBsb25nIGN3ZDsKICAgICAg ICBsb25nIHN3ZDsKICAgICAgICBsb25nIHR3ZDsKICAgICAgICBsb25nIGZpcDsKICAgICAgICBs b25nIGZjczsKICAgICAgICBsb25nIGZvbzsKICAgICAgICBsb25nIGZvczsKICAgICAgICBsb25n IHN0X3NwYWNlWzIwXTsKICAgICAgICB1bnNpZ25lZCBjaGFyIGZ0b3AsIGNoYW5nZWQsIGxvb2th aGVhZCwgbm9fdXBkYXRlLCBybSwgYWxpbWl0OwogICAgICAgIHN0cnVjdCBpbmZvICppbmZvOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgZW50cnlfZWlwOwp9OwoKdW5pb24gaTM4N191bmlvbiB7CiAg ICAgICAgc3RydWN0IGkzODdfZnNhdmVfc3RydWN0IGZzYXZlOwogICAgICAgIHN0cnVjdCBpMzg3 X2Z4c2F2ZV9zdHJ1Y3QgZnhzYXZlOwogICAgICAgIHN0cnVjdCBpMzg3X3NvZnRfc3RydWN0IHNv ZnQ7Cn07Cgp0eXBlZGVmIHN0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzZWc7Cn0gbW1f c2VnbWVudF90OwoKc3RydWN0IHRzc19zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIHNob3J0IGJh Y2tfbGluayxfX2JsaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDA7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc3MwLF9fc3MwaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDE7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc3MxLF9fc3MxaDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDI7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgc3MyLF9fc3MyaDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9f Y3IzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWlwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWZs YWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWF4LGVjeCxlZHgsZWJ4OwogICAgICAgIHVuc2ln bmVkIGxvbmcgZXNwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWJwOwogICAgICAgIHVuc2lnbmVk IGxvbmcgZXNpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZWRpOwogICAgICAgIHVuc2lnbmVkIHNo b3J0IGVzLCBfX2VzaDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjcywgX19jc2g7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgc3MsIF9fc3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRzLCBfX2Rz aDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmcywgX19mc2g7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgZ3MsIF9fZ3NoOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGxkdCwgX19sZHRoOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHRyYWNlLCBiaXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpb19i aXRtYXBbMzIgKzFdOwoKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgX19jYWNoZWxpbmVfZmlsbGVy WzVdOwp9OwoKc3RydWN0IHRocmVhZF9zdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZXNw MDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVpcDsKICAgICAgICB1bnNpZ25lZCBsb25nIGVzcDsK ICAgICAgICB1bnNpZ25lZCBsb25nIGZzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZ3M7CgogICAg ICAgIHVuc2lnbmVkIGxvbmcgZGVidWdyZWdbOF07CgogICAgICAgIHVuc2lnbmVkIGxvbmcgY3Iy LCB0cmFwX25vLCBlcnJvcl9jb2RlOwoKICAgICAgICB1bmlvbiBpMzg3X3VuaW9uIGkzODc7Cgog ICAgICAgIHN0cnVjdCB2bTg2X3N0cnVjdCAqIHZtODZfaW5mbzsKICAgICAgICB1bnNpZ25lZCBs b25nIHNjcmVlbl9iaXRtYXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyB2ODZmbGFncywgdjg2bWFz aywgdjg2bW9kZSwgc2F2ZWRfZXNwMDsKCiAgICAgICAgaW50IGlvcGVybTsKICAgICAgICB1bnNp Z25lZCBsb25nIGlvX2JpdG1hcFszMiArMV07Cn07CiMgNDI0ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCnN0cnVjdCB0YXNrX3N0cnVjdDsKc3RydWN0IG1t X3N0cnVjdDsKCgpleHRlcm4gdm9pZCByZWxlYXNlX3RocmVhZChzdHJ1Y3QgdGFza19zdHJ1Y3Qg Kik7CgoKCmV4dGVybiBpbnQga2VybmVsX3RocmVhZChpbnQgKCpmbikodm9pZCAqKSwgdm9pZCAq IGFyZywgdW5zaWduZWQgbG9uZyBmbGFncyk7CgoKZXh0ZXJuIHZvaWQgY29weV9zZWdtZW50cyhz dHJ1Y3QgdGFza19zdHJ1Y3QgKnAsIHN0cnVjdCBtbV9zdHJ1Y3QgKiBtbSk7CmV4dGVybiB2b2lk IHJlbGVhc2Vfc2VnbWVudHMoc3RydWN0IG1tX3N0cnVjdCAqIG1tKTsKCgoKCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyB0aHJlYWRfc2F2ZWRfcGMoc3RydWN0IHRocmVhZF9zdHJ1Y3QgKnQp CnsKICAgICAgICByZXR1cm4gKCh1bnNpZ25lZCBsb25nICopdC0+ZXNwKVszXTsKfQoKdW5zaWdu ZWQgbG9uZyBnZXRfd2NoYW4oc3RydWN0IHRhc2tfc3RydWN0ICpwKTsKIyA0NTggIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIKc3RydWN0IG1pY3JvY29kZSB7 CiAgICAgICAgdW5zaWduZWQgaW50IGhkcnZlcjsKICAgICAgICB1bnNpZ25lZCBpbnQgcmV2Owog ICAgICAgIHVuc2lnbmVkIGludCBkYXRlOwogICAgICAgIHVuc2lnbmVkIGludCBzaWc7CiAgICAg ICAgdW5zaWduZWQgaW50IGNrc3VtOwogICAgICAgIHVuc2lnbmVkIGludCBsZHJ2ZXI7CiAgICAg ICAgdW5zaWduZWQgaW50IHBmOwogICAgICAgIHVuc2lnbmVkIGludCByZXNlcnZlZFs1XTsKICAg ICAgICB1bnNpZ25lZCBpbnQgYml0c1s1MDBdOwp9OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBy ZXBfbm9wKHZvaWQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygicmVwO25vcCIpOwp9 CiMgNDk2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiCmV4 dGVybiBpbmxpbmUgdm9pZCBwcmVmZXRjaChjb25zdCB2b2lkICp4KQp7CiAgICAgICAgIF9fYXNt X18gX192b2xhdGlsZV9fICgicHJlZmV0Y2ggKCUwKSIgOiA6ICJyIih4KSk7Cn0KCmV4dGVybiBp bmxpbmUgdm9pZCBwcmVmZXRjaHcoY29uc3Qgdm9pZCAqeCkKewogICAgICAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXyAoInByZWZldGNodyAoJTApIiA6IDogInIiKHgpKTsKfQojIDE0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvYXNtL2NhY2hlLmgiIDEKIyAxNSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvcHJlZmV0Y2guaCIgMgojIDcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMgojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9saXN0LmgiCnN0cnVjdCBsaXN0X2hlYWQgewogICAgICAgIHN0cnVjdCBs aXN0X2hlYWQgKm5leHQsICpwcmV2Owp9OwojIDM3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19saXN0X2FkZChzdHJ1 Y3QgbGlzdF9oZWFkICogbmV3LAogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBwcmV2LAogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQp7CiAgICAgICAgbmV4dC0+cHJldiA9IG5ldzsK ICAgICAgICBuZXctPm5leHQgPSBuZXh0OwogICAgICAgIG5ldy0+cHJldiA9IHByZXY7CiAgICAg ICAgcHJldi0+bmV4dCA9IG5ldzsKfQojIDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgbGlzdF9hZGQoc3RydWN0IGxp c3RfaGVhZCAqbmV3LCBzdHJ1Y3QgbGlzdF9oZWFkICpoZWFkKQp7CiAgICAgICAgX19saXN0X2Fk ZChuZXcsIGhlYWQsIGhlYWQtPm5leHQpOwp9CiMgNjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2xpc3QuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBsaXN0X2FkZF90YWls KHN0cnVjdCBsaXN0X2hlYWQgKm5ldywgc3RydWN0IGxpc3RfaGVhZCAqaGVhZCkKewogICAgICAg IF9fbGlzdF9hZGQobmV3LCBoZWFkLT5wcmV2LCBoZWFkKTsKfQojIDgwICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saXN0LmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgX19s aXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICogcHJldiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgKiBuZXh0KQp7CiAgICAgICAgbmV4dC0+cHJldiA9 IHByZXY7CiAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7Cn0KCgoKCgoKc3RhdGljIF9faW5saW5l X18gdm9pZCBsaXN0X2RlbChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKewogICAgICAgIF9fbGlz dF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKfQoKCgoKCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgbGlzdF9kZWxfaW5pdChzdHJ1Y3QgbGlzdF9oZWFkICplbnRyeSkKewogICAgICAgIF9f bGlzdF9kZWwoZW50cnktPnByZXYsIGVudHJ5LT5uZXh0KTsKICAgICAgICBkbyB7IChlbnRyeSkt Pm5leHQgPSAoZW50cnkpOyAoZW50cnkpLT5wcmV2ID0gKGVudHJ5KTsgfSB3aGlsZSAoMCk7Cn0K CgoKCgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgbGlzdF9lbXB0eShzdHJ1Y3QgbGlzdF9oZWFkICpo ZWFkKQp7CiAgICAgICAgcmV0dXJuIGhlYWQtPm5leHQgPT0gaGVhZDsKfQoKCgoKCgpzdGF0aWMg X19pbmxpbmVfXyB2b2lkIGxpc3Rfc3BsaWNlKHN0cnVjdCBsaXN0X2hlYWQgKmxpc3QsIHN0cnVj dCBsaXN0X2hlYWQgKmhlYWQpCnsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpmaXJzdCA9IGxp c3QtPm5leHQ7CgogICAgICAgIGlmIChmaXJzdCAhPSBsaXN0KSB7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgbGlzdF9oZWFkICpsYXN0ID0gbGlzdC0+cHJldjsKICAgICAgICAgICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgKmF0ID0gaGVhZC0+bmV4dDsKCiAgICAgICAgICAgICAgICBmaXJzdC0+cHJl diA9IGhlYWQ7CiAgICAgICAgICAgICAgICBoZWFkLT5uZXh0ID0gZmlyc3Q7CgogICAgICAgICAg ICAgICAgbGFzdC0+bmV4dCA9IGF0OwogICAgICAgICAgICAgICAgYXQtPnByZXYgPSBsYXN0Owog ICAgICAgIH0KfQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tb2R1 bGUuaCIgMgojIDI1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tb2R1bGUu aCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDUg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMgojIDIyICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgiCnR5cGVkZWYgc3RydWN0IHsg dm9sYXRpbGUgaW50IGNvdW50ZXI7IH0gYXRvbWljX3Q7CiMgNTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNf YWRkKGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICAgICAgICAgIiIgImFkZGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+ Y291bnRlcikKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSk7Cn0K IyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMg X19pbmxpbmVfXyB2b2lkIGF0b21pY19zdWIoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMSwlMCIKICAg ICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJpciIgKGkp LCAibSIgKHYtPmNvdW50ZXIpKTsKfQojIDg3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBhdG9taWNfc3ViX2FuZF90ZXN0 KGludCBpLCBhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAg X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAic3VibCAlMiwlMDsgc2V0 ZSAlMSIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAg ICAgICAgICAgICA6ImlyIiAoaSksICJtIiAodi0+Y291bnRlcikgOiAibWVtb3J5Iik7CiAgICAg ICAgcmV0dXJuIGM7Cn0KIyAxMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9h dG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBhdG9taWNfaW5jKGF0b21pY190ICp2KQp7 CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiaW5jbCAl MCIKICAgICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKQogICAgICAgICAgICAgICAgOiJt IiAodi0+Y291bnRlcikpOwp9CiMgMTIwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9h c20vYXRvbWljLmgiCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgYXRvbWljX2RlYyhhdG9taWNfdCAq dikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiIgImRl Y2wgJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAodi0+Y291bnRlcikKICAgICAgICAgICAgICAg IDoibSIgKHYtPmNvdW50ZXIpKTsKfQojIDEzNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL2F0b21pYy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgYXRvbWljX2RlY19hbmRfdGVz dChhdG9taWNfdCAqdikKewogICAgICAgIHVuc2lnbmVkIGNoYXIgYzsKCiAgICAgICAgX19hc21f XyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIiAiZGVjbCAlMDsgc2V0ZSAlMSIKICAg ICAgICAgICAgICAgIDoiPW0iICh2LT5jb3VudGVyKSwgIj1xbSIgKGMpCiAgICAgICAgICAgICAg ICA6Im0iICh2LT5jb3VudGVyKSA6ICJtZW1vcnkiKTsKICAgICAgICByZXR1cm4gYyAhPSAwOwp9 CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgiCnN0YXRp YyBfX2lubGluZV9fIGludCBhdG9taWNfaW5jX2FuZF90ZXN0KGF0b21pY190ICp2KQp7CiAgICAg ICAgdW5zaWduZWQgY2hhciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAg ICAgICAgICAgICIiICJpbmNsICUwOyBzZXRlICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYt PmNvdW50ZXIpLCAiPXFtIiAoYykKICAgICAgICAgICAgICAgIDoibSIgKHYtPmNvdW50ZXIpIDog Im1lbW9yeSIpOwogICAgICAgIHJldHVybiBjICE9IDA7Cn0KIyAxNzggIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IGF0b21p Y19hZGRfbmVnYXRpdmUoaW50IGksIGF0b21pY190ICp2KQp7CiAgICAgICAgdW5zaWduZWQgY2hh ciBjOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAgICAgICAgICIiICJh ZGRsICUyLCUwOyBzZXRzICUxIgogICAgICAgICAgICAgICAgOiI9bSIgKHYtPmNvdW50ZXIpLCAi PXFtIiAoYykKICAgICAgICAgICAgICAgIDoiaXIiIChpKSwgIm0iICh2LT5jb3VudGVyKSA6ICJt ZW1vcnkiKTsKICAgICAgICByZXR1cm4gYzsKfQojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9tb2R1bGUuaCIgMgoKCnN0cnVjdCBleGNlcHRpb25fdGFibGVfZW50cnk7 CgoKc3RydWN0IGtlcm5lbF9zeW0KewogICAgICAgIHVuc2lnbmVkIGxvbmcgdmFsdWU7CiAgICAg ICAgY2hhciBuYW1lWzYwXTsKfTsKCnN0cnVjdCBtb2R1bGVfc3ltYm9sCnsKICAgICAgICB1bnNp Z25lZCBsb25nIHZhbHVlOwogICAgICAgIGNvbnN0IGNoYXIgKm5hbWU7Cn07CgpzdHJ1Y3QgbW9k dWxlX3JlZgp7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqZGVwOwogICAgICAgIHN0cnVjdCBtb2R1 bGUgKnJlZjsKICAgICAgICBzdHJ1Y3QgbW9kdWxlX3JlZiAqbmV4dF9yZWY7Cn07CgoKc3RydWN0 IG1vZHVsZV9wZXJzaXN0OwoKc3RydWN0IG1vZHVsZQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz aXplX29mX3N0cnVjdDsKICAgICAgICBzdHJ1Y3QgbW9kdWxlICpuZXh0OwogICAgICAgIGNvbnN0 IGNoYXIgKm5hbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaXplOwoKICAgICAgICB1bmlvbgog ICAgICAgIHsKICAgICAgICAgICAgICAgIGF0b21pY190IHVzZWNvdW50OwogICAgICAgICAgICAg ICAgbG9uZyBwYWQ7CiAgICAgICAgfSB1YzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK CiAgICAgICAgdW5zaWduZWQgbnN5bXM7CiAgICAgICAgdW5zaWduZWQgbmRlcHM7CgogICAgICAg IHN0cnVjdCBtb2R1bGVfc3ltYm9sICpzeW1zOwogICAgICAgIHN0cnVjdCBtb2R1bGVfcmVmICpk ZXBzOwogICAgICAgIHN0cnVjdCBtb2R1bGVfcmVmICpyZWZzOwogICAgICAgIGludCAoKmluaXQp KHZvaWQpOwogICAgICAgIHZvaWQgKCpjbGVhbnVwKSh2b2lkKTsKICAgICAgICBjb25zdCBzdHJ1 Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleF90YWJsZV9zdGFydDsKICAgICAgICBjb25zdCBz dHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5ICpleF90YWJsZV9lbmQ7CgoKCgoKCiAgICAgICAg Y29uc3Qgc3RydWN0IG1vZHVsZV9wZXJzaXN0ICpwZXJzaXN0X3N0YXJ0OwogICAgICAgIGNvbnN0 IHN0cnVjdCBtb2R1bGVfcGVyc2lzdCAqcGVyc2lzdF9lbmQ7CiAgICAgICAgaW50ICgqY2FuX3Vu bG9hZCkodm9pZCk7CiAgICAgICAgaW50IHJ1bnNpemU7CiAgICAgICAgY29uc3QgY2hhciAqa2Fs bHN5bXNfc3RhcnQ7CiAgICAgICAgY29uc3QgY2hhciAqa2FsbHN5bXNfZW5kOwogICAgICAgIGNv bnN0IGNoYXIgKmFyY2hkYXRhX3N0YXJ0OwogICAgICAgIGNvbnN0IGNoYXIgKmFyY2hkYXRhX2Vu ZDsKICAgICAgICBjb25zdCBjaGFyICprZXJuZWxfZGF0YTsKfTsKCnN0cnVjdCBtb2R1bGVfaW5m bwp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2l6 ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgIGxvbmcgdXNlY291bnQ7Cn07 CiMgMTgzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKZXh0 ZXJuIHZvaWQgaW50ZXJfbW9kdWxlX3JlZ2lzdGVyKGNvbnN0IGNoYXIgKiwgc3RydWN0IG1vZHVs ZSAqLCBjb25zdCB2b2lkICopOwpleHRlcm4gdm9pZCBpbnRlcl9tb2R1bGVfdW5yZWdpc3Rlcihj b25zdCBjaGFyICopOwpleHRlcm4gY29uc3Qgdm9pZCAqaW50ZXJfbW9kdWxlX2dldChjb25zdCBj aGFyICopOwpleHRlcm4gY29uc3Qgdm9pZCAqaW50ZXJfbW9kdWxlX2dldF9yZXF1ZXN0KGNvbnN0 IGNoYXIgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIHZvaWQgaW50ZXJfbW9kdWxlX3B1dChjb25z dCBjaGFyICopOwoKc3RydWN0IGludGVyX21vZHVsZV9lbnRyeSB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBsaXN0OwogICAgICAgIGNvbnN0IGNoYXIgKmltX25hbWU7CiAgICAgICAgc3RydWN0 IG1vZHVsZSAqb3duZXI7CiAgICAgICAgY29uc3Qgdm9pZCAqdXNlcmRhdGE7Cn07CgpleHRlcm4g aW50IHRyeV9pbmNfbW9kX2NvdW50KHN0cnVjdCBtb2R1bGUgKm1vZCk7CiMgMzI1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tb2R1bGUuaCIKZXh0ZXJuIHN0cnVjdCBtb2R1 bGUgKm1vZHVsZV9saXN0OwojIDE0NyAiODEzOXRvby5jIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgva2VybmVsLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgva2VybmVsLmgiCiMgMSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5oIiAxIDMKIyA0MyAiL3Vzci9s b2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjAuMS9pbmNsdWRlL3N0ZGFyZy5o IiAzCnR5cGVkZWYgX19idWlsdGluX3ZhX2xpc3QgX19nbnVjX3ZhX2xpc3Q7CiMgMTEwICIvdXNy L2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMC4xL2luY2x1ZGUvc3RkYXJn LmgiIDMKdHlwZWRlZiBfX2dudWNfdmFfbGlzdCB2YV9saXN0OwojIDExICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2xpbmthZ2UuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAyCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvc3RkZGVmLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgva2VybmVsLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2tl cm5lbC5oIiAyCiMgNDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2tlcm5l bC5oIgpzdHJ1Y3QgY29tcGxldGlvbjsKCmV4dGVybiBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnBh bmljX25vdGlmaWVyX2xpc3Q7CiAgICAgICAgICAgdm9pZCBwYW5pYyhjb25zdCBjaGFyICogZm10 LCAuLi4pCiAgICAgICAgX19hdHRyaWJ1dGVfXyAoKG5vcmV0dXJuLCBmb3JtYXQgKHByaW50Ziwg MSwgMikpKTsKICAgICAgICAgICB2b2lkIGRvX2V4aXQobG9uZyBlcnJvcl9jb2RlKQogICAgICAg IF9fYXR0cmlidXRlX18oKG5vcmV0dXJuKSk7CiAgICAgICAgICAgdm9pZCBjb21wbGV0ZV9hbmRf ZXhpdChzdHJ1Y3QgY29tcGxldGlvbiAqLCBsb25nKQogICAgICAgIF9fYXR0cmlidXRlX18oKG5v cmV0dXJuKSk7CmV4dGVybiBpbnQgYWJzKGludCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIHNpbXBs ZV9zdHJ0b3VsKGNvbnN0IGNoYXIgKixjaGFyICoqLHVuc2lnbmVkIGludCk7CmV4dGVybiBsb25n IHNpbXBsZV9zdHJ0b2woY29uc3QgY2hhciAqLGNoYXIgKiosdW5zaWduZWQgaW50KTsKZXh0ZXJu IHVuc2lnbmVkIGxvbmcgbG9uZyBzaW1wbGVfc3RydG91bGwoY29uc3QgY2hhciAqLGNoYXIgKios dW5zaWduZWQgaW50KTsKZXh0ZXJuIGxvbmcgbG9uZyBzaW1wbGVfc3RydG9sbChjb25zdCBjaGFy ICosY2hhciAqKix1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50IHNwcmludGYoY2hhciAqIGJ1Ziwg Y29uc3QgY2hhciAqIGZtdCwgLi4uKTsKZXh0ZXJuIGludCB2c3ByaW50ZihjaGFyICpidWYsIGNv bnN0IGNoYXIgKiwgdmFfbGlzdCk7CmV4dGVybiBpbnQgc25wcmludGYoY2hhciAqIGJ1Ziwgc2l6 ZV90IHNpemUsIGNvbnN0IGNoYXIgKmZtdCwgLi4uKTsKZXh0ZXJuIGludCB2c25wcmludGYoY2hh ciAqYnVmLCBzaXplX3Qgc2l6ZSwgY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpOwoKZXh0 ZXJuIGludCBzc2NhbmYoY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICosIC4uLikKICAgICAgICBf X2F0dHJpYnV0ZV9fICgoZm9ybWF0IChzY2FuZiwyLDMpKSk7CmV4dGVybiBpbnQgdnNzY2FuZihj b25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgdmFfbGlzdCk7CgpleHRlcm4gaW50IGdldF9vcHRp b24oY2hhciAqKnN0ciwgaW50ICpwaW50KTsKZXh0ZXJuIGNoYXIgKmdldF9vcHRpb25zKGNoYXIg KnN0ciwgaW50IG5pbnRzLCBpbnQgKmludHMpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBsb25nIG1l bXBhcnNlKGNoYXIgKnB0ciwgY2hhciAqKnJldHB0cik7CmV4dGVybiB2b2lkIGRldl9wcm9iZV9s b2NrKHZvaWQpOwpleHRlcm4gdm9pZCBkZXZfcHJvYmVfdW5sb2NrKHZvaWQpOwoKZXh0ZXJuIGlu dCBzZXNzaW9uX29mX3BncnAoaW50IHBncnApOwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkp KSBpbnQgcHJpbnRrKGNvbnN0IGNoYXIgKiBmbXQsIC4uLikKICAgICAgICBfX2F0dHJpYnV0ZV9f ICgoZm9ybWF0IChwcmludGYsIDEsIDIpKSk7CgpleHRlcm4gaW50IGNvbnNvbGVfbG9nbGV2ZWw7 CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV9zaWxlbnQodm9pZCkKewogICAgICAgIGNvbnNv bGVfbG9nbGV2ZWwgPSAwOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY29uc29sZV92ZXJib3NlKHZv aWQpCnsKICAgICAgICBpZiAoY29uc29sZV9sb2dsZXZlbCkKICAgICAgICAgICAgICAgIGNvbnNv bGVfbG9nbGV2ZWwgPSAxNTsKfQoKZXh0ZXJuIHZvaWQgYnVzdF9zcGlubG9ja3MoaW50IHllcyk7 CmV4dGVybiBpbnQgb29wc19pbl9wcm9ncmVzczsKCmV4dGVybiBpbnQgdGFpbnRlZDsKZXh0ZXJu IGNvbnN0IGNoYXIgKnByaW50X3RhaW50ZWQodm9pZCk7CiMgMTYwICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIKc3RydWN0IHN5c2luZm8gewogICAgICAgIGxv bmcgdXB0aW1lOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbG9hZHNbM107CiAgICAgICAgdW5zaWdu ZWQgbG9uZyB0b3RhbHJhbTsKICAgICAgICB1bnNpZ25lZCBsb25nIGZyZWVyYW07CiAgICAgICAg dW5zaWduZWQgbG9uZyBzaGFyZWRyYW07CiAgICAgICAgdW5zaWduZWQgbG9uZyBidWZmZXJyYW07 CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbHN3YXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyBm cmVlc3dhcDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBwcm9jczsKICAgICAgICB1bnNpZ25lZCBz aG9ydCBwYWQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0b3RhbGhpZ2g7CiAgICAgICAgdW5zaWdu ZWQgbG9uZyBmcmVlaGlnaDsKICAgICAgICB1bnNpZ25lZCBpbnQgbWVtX3VuaXQ7CiAgICAgICAg Y2hhciBfZlsyMC0yKnNpemVvZihsb25nKS1zaXplb2YoaW50KV07Cn07CiMgMTQ4ICI4MTM5dG9v LmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wY2kuaCIgMQoj IDI3NiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGNpLmgiCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGNpX2lkcy5oIiAxCiMgMjc3ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wY2kuaCIgMgojIDI5OSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGNpLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDMwMCAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvcGNpLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9jb25maWcuaCIgMQojIDMwMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcGNpLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9p b3BvcnQuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pb3Bv cnQuaCIKc3RydWN0IHJlc291cmNlIHsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgc3RhcnQsIGVuZDsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwog ICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcGFyZW50LCAqc2libGluZywgKmNoaWxkOwp9OwoKc3Ry dWN0IHJlc291cmNlX2xpc3QgewogICAgICAgIHN0cnVjdCByZXNvdXJjZV9saXN0ICpuZXh0Owog ICAgICAgIHN0cnVjdCByZXNvdXJjZSAqcmVzOwogICAgICAgIHN0cnVjdCBwY2lfZGV2ICpkZXY7 Cn07CiMgODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIgpl eHRlcm4gc3RydWN0IHJlc291cmNlIGlvcG9ydF9yZXNvdXJjZTsKZXh0ZXJuIHN0cnVjdCByZXNv dXJjZSBpb21lbV9yZXNvdXJjZTsKCmV4dGVybiBpbnQgZ2V0X3Jlc291cmNlX2xpc3Qoc3RydWN0 IHJlc291cmNlICosIGNoYXIgKmJ1ZiwgaW50IHNpemUpOwoKZXh0ZXJuIGludCBjaGVja19yZXNv dXJjZShzdHJ1Y3QgcmVzb3VyY2UgKnJvb3QsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcp OwpleHRlcm4gaW50IHJlcXVlc3RfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNlICpyb290LCBzdHJ1 Y3QgcmVzb3VyY2UgKm5ldyk7CmV4dGVybiBpbnQgcmVsZWFzZV9yZXNvdXJjZShzdHJ1Y3QgcmVz b3VyY2UgKm5ldyk7CmV4dGVybiBpbnQgYWxsb2NhdGVfcmVzb3VyY2Uoc3RydWN0IHJlc291cmNl ICpyb290LCBzdHJ1Y3QgcmVzb3VyY2UgKm5ldywKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIHNpemUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgbG9uZyBtaW4sIHVuc2lnbmVkIGxvbmcgbWF4LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgYWxpZ24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9p ZCAoKmFsaWduZikodm9pZCAqLCBzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWduZWQgbG9uZyksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqYWxpZ25mX2RhdGEpOwoKCgoKCmV4dGVy biBzdHJ1Y3QgcmVzb3VyY2UgKiBfX3JlcXVlc3RfcmVnaW9uKHN0cnVjdCByZXNvdXJjZSAqLCB1 bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIG4sIGNvbnN0IGNoYXIgKm5hbWUpOwoK CgoKCgoKZXh0ZXJuIGludCBfX2NoZWNrX3JlZ2lvbihzdHJ1Y3QgcmVzb3VyY2UgKiwgdW5zaWdu ZWQgbG9uZywgdW5zaWduZWQgbG9uZyk7CmV4dGVybiB2b2lkIF9fcmVsZWFzZV9yZWdpb24oc3Ry dWN0IHJlc291cmNlICosIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKCgoKCmV4dGVy biB2b2lkIGF1dG9pcnFfc2V0dXAoaW50IHdhaXR0aW1lKTsKZXh0ZXJuIGludCBhdXRvaXJxX3Jl cG9ydChpbnQgd2FpdHRpbWUpOwojIDMwMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcGNpLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9s aXN0LmgiIDEKIyAzMDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BjaS5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMQoK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9lcnJuby5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXJybm8uaCIgMgojIDMwNCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGNpLmgiIDIKCgplbnVtIHBjaV9tbWFw X3N0YXRlIHsKICAgICAgICBwY2lfbW1hcF9pbywKICAgICAgICBwY2lfbW1hcF9tZW0KfTsKIyAz MzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BjaS5oIgpzdHJ1Y3QgcGNp X2RldiB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBnbG9iYWxfbGlzdDsKICAgICAgICBzdHJ1 Y3QgbGlzdF9oZWFkIGJ1c19saXN0OwogICAgICAgIHN0cnVjdCBwY2lfYnVzICpidXM7CiAgICAg ICAgc3RydWN0IHBjaV9idXMgKnN1Ym9yZGluYXRlOwoKICAgICAgICB2b2lkICpzeXNkYXRhOwog ICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY2VudDsKCiAgICAgICAgdW5zaWduZWQg aW50IGRldmZuOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHZlbmRvcjsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBkZXZpY2U7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Vic3lzdGVtX3ZlbmRvcjsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdWJzeXN0ZW1fZGV2aWNlOwogICAgICAgIHVuc2lnbmVk IGludCBjbGFzczsKICAgICAgICB1OCBoZHJfdHlwZTsKICAgICAgICB1OCByb21fYmFzZV9yZWc7 CgogICAgICAgIHN0cnVjdCBwY2lfZHJpdmVyICpkcml2ZXI7CiAgICAgICAgdm9pZCAqZHJpdmVy X2RhdGE7CiAgICAgICAgZG1hX2FkZHJfdCBkbWFfbWFzazsKCgoKCgogICAgICAgIHUzMiBjdXJy ZW50X3N0YXRlOwoKCgoKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZW5kb3JfY29tcGF0aWJsZVs0 XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkZXZpY2VfY29tcGF0aWJsZVs0XTsKCgoKCgogICAg ICAgIHVuc2lnbmVkIGludCBpcnE7CiAgICAgICAgc3RydWN0IHJlc291cmNlIHJlc291cmNlWzEy XTsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgZG1hX3Jlc291cmNlWzJdOwogICAgICAgIHN0cnVj dCByZXNvdXJjZSBpcnFfcmVzb3VyY2VbMl07CgogICAgICAgIGNoYXIgbmFtZVs4MF07CiAgICAg ICAgY2hhciBzbG90X25hbWVbOF07CiAgICAgICAgaW50IGFjdGl2ZTsKICAgICAgICBpbnQgcm87 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcmVnczsKCiAgICAgICAgaW50ICgqcHJlcGFyZSkoc3Ry dWN0IHBjaV9kZXYgKmRldik7CiAgICAgICAgaW50ICgqYWN0aXZhdGUpKHN0cnVjdCBwY2lfZGV2 ICpkZXYpOwogICAgICAgIGludCAoKmRlYWN0aXZhdGUpKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp9 OwojIDQwNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGNpLmgiCnN0cnVj dCBwY2lfYnVzIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG5vZGU7CiAgICAgICAgc3RydWN0 IHBjaV9idXMgKnBhcmVudDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGNoaWxkcmVuOwogICAg ICAgIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlczsKICAgICAgICBzdHJ1Y3QgcGNpX2RldiAqc2Vs ZjsKICAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlc291cmNlWzRdOwoKICAgICAgICBzdHJ1Y3Qg cGNpX29wcyAqb3BzOwogICAgICAgIHZvaWQgKnN5c2RhdGE7CiAgICAgICAgc3RydWN0IHByb2Nf ZGlyX2VudHJ5ICpwcm9jZGlyOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIG51bWJlcjsKICAgICAg ICB1bnNpZ25lZCBjaGFyIHByaW1hcnk7CiAgICAgICAgdW5zaWduZWQgY2hhciBzZWNvbmRhcnk7 CiAgICAgICAgdW5zaWduZWQgY2hhciBzdWJvcmRpbmF0ZTsKCiAgICAgICAgY2hhciBuYW1lWzQ4 XTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZW5kb3I7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg ZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIGludCBzZXJpYWw7CiAgICAgICAgdW5zaWduZWQgY2hh ciBwbnB2ZXI7CiAgICAgICAgdW5zaWduZWQgY2hhciBwcm9kdWN0dmVyOwogICAgICAgIHVuc2ln bmVkIGNoYXIgY2hlY2tzdW07CiAgICAgICAgdW5zaWduZWQgY2hhciBwYWQxOwp9OwoKCgpleHRl cm4gc3RydWN0IGxpc3RfaGVhZCBwY2lfcm9vdF9idXNlczsKZXh0ZXJuIHN0cnVjdCBsaXN0X2hl YWQgcGNpX2RldmljZXM7CiMgNDUyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9wY2kuaCIKc3RydWN0IHBjaV9vcHMgewogICAgICAgIGludCAoKnJlYWRfYnl0ZSkoc3RydWN0 IHBjaV9kZXYgKiwgaW50IHdoZXJlLCB1OCAqdmFsKTsKICAgICAgICBpbnQgKCpyZWFkX3dvcmQp KHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTE2ICp2YWwpOwogICAgICAgIGludCAoKnJl YWRfZHdvcmQpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTMyICp2YWwpOwogICAgICAg IGludCAoKndyaXRlX2J5dGUpKHN0cnVjdCBwY2lfZGV2ICosIGludCB3aGVyZSwgdTggdmFsKTsK ICAgICAgICBpbnQgKCp3cml0ZV93b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQgd2hlcmUsIHUx NiB2YWwpOwogICAgICAgIGludCAoKndyaXRlX2R3b3JkKShzdHJ1Y3QgcGNpX2RldiAqLCBpbnQg d2hlcmUsIHUzMiB2YWwpOwp9OwoKc3RydWN0IHBidXNfc2V0X3Jhbmdlc19kYXRhCnsKICAgICAg ICBpbnQgZm91bmRfdmdhOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaW9fc3RhcnQsIGlvX2VuZDsK ICAgICAgICB1bnNpZ25lZCBsb25nIG1lbV9zdGFydCwgbWVtX2VuZDsKfTsKCnN0cnVjdCBwY2lf ZGV2aWNlX2lkIHsKICAgICAgICB1bnNpZ25lZCBpbnQgdmVuZG9yLCBkZXZpY2U7CiAgICAgICAg dW5zaWduZWQgaW50IHN1YnZlbmRvciwgc3ViZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIGludCBj bGFzcywgY2xhc3NfbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIGRyaXZlcl9kYXRhOwp9OwoK c3RydWN0IHBjaV9kcml2ZXIgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbm9kZTsKICAgICAg ICBjaGFyICpuYW1lOwogICAgICAgIGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZF90YWJs ZTsKICAgICAgICBpbnQgKCpwcm9iZSkgKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGNvbnN0IHN0cnVj dCBwY2lfZGV2aWNlX2lkICppZCk7CiAgICAgICAgdm9pZCAoKnJlbW92ZSkgKHN0cnVjdCBwY2lf ZGV2ICpkZXYpOwogICAgICAgIGludCAoKnNhdmVfc3RhdGUpIChzdHJ1Y3QgcGNpX2RldiAqZGV2 LCB1MzIgc3RhdGUpOwogICAgICAgIGludCAoKnN1c3BlbmQpKHN0cnVjdCBwY2lfZGV2ICpkZXYs IHUzMiBzdGF0ZSk7CiAgICAgICAgaW50ICgqcmVzdW1lKSAoc3RydWN0IHBjaV9kZXYgKmRldik7 CiAgICAgICAgaW50ICgqZW5hYmxlX3dha2UpIChzdHJ1Y3QgcGNpX2RldiAqZGV2LCB1MzIgc3Rh dGUsIGludCBlbmFibGUpOwp9OwojIDQ5NCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcGNpLmgiCnZvaWQgcGNpYmlvc19pbml0KHZvaWQpOwp2b2lkIHBjaWJpb3NfZml4dXBf YnVzKHN0cnVjdCBwY2lfYnVzICopOwppbnQgcGNpYmlvc19lbmFibGVfZGV2aWNlKHN0cnVjdCBw Y2lfZGV2ICopOwpjaGFyICpwY2liaW9zX3NldHVwIChjaGFyICpzdHIpOwoKCnZvaWQgcGNpYmlv c19hbGlnbl9yZXNvdXJjZSh2b2lkICosIHN0cnVjdCByZXNvdXJjZSAqLCB1bnNpZ25lZCBsb25n KTsKdm9pZCBwY2liaW9zX3VwZGF0ZV9yZXNvdXJjZShzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3Qg cmVzb3VyY2UgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmVzb3VyY2Ug KiwgaW50KTsKdm9pZCBwY2liaW9zX3VwZGF0ZV9pcnEoc3RydWN0IHBjaV9kZXYgKiwgaW50IGly cSk7CnZvaWQgcGNpYmlvc19maXh1cF9wYnVzX3JhbmdlcyhzdHJ1Y3QgcGNpX2J1cyAqLCBzdHJ1 Y3QgcGJ1c19zZXRfcmFuZ2VzX2RhdGEgKik7CgoKCmludCBwY2liaW9zX3ByZXNlbnQodm9pZCk7 CmludCBwY2liaW9zX3JlYWRfY29uZmlnX2J5dGUgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25l ZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hh ciB3aGVyZSwgdW5zaWduZWQgY2hhciAqdmFsKTsKaW50IHBjaWJpb3NfcmVhZF9jb25maWdfd29y ZCAodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIHdoZXJlLCB1bnNpZ25lZCBzaG9ydCAqdmFs KTsKaW50IHBjaWJpb3NfcmVhZF9jb25maWdfZHdvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNp Z25lZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGNoYXIgd2hlcmUsIHVuc2lnbmVkIGludCAqdmFsKTsKaW50IHBjaWJpb3Nfd3JpdGVfY29uZmln X2J5dGUgKHVuc2lnbmVkIGNoYXIgYnVzLCB1bnNpZ25lZCBjaGFyIGRldl9mbiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIGNoYXIg dmFsKTsKaW50IHBjaWJpb3Nfd3JpdGVfY29uZmlnX3dvcmQgKHVuc2lnbmVkIGNoYXIgYnVzLCB1 bnNpZ25lZCBjaGFyIGRldl9mbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2ln bmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVkIHNob3J0IHZhbCk7CmludCBwY2liaW9zX3dyaXRlX2Nv bmZpZ19kd29yZCAodW5zaWduZWQgY2hhciBidXMsIHVuc2lnbmVkIGNoYXIgZGV2X2ZuLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGNoYXIgd2hlcmUsIHVuc2lnbmVk IGludCB2YWwpOwppbnQgcGNpYmlvc19maW5kX2NsYXNzICh1bnNpZ25lZCBpbnQgY2xhc3NfY29k ZSwgdW5zaWduZWQgc2hvcnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywgdW5zaWduZWQgY2hh ciAqZGV2X2ZuKTsKaW50IHBjaWJpb3NfZmluZF9kZXZpY2UgKHVuc2lnbmVkIHNob3J0IHZlbmRv ciwgdW5zaWduZWQgc2hvcnQgZGV2X2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgc2hvcnQgaW5kZXgsIHVuc2lnbmVkIGNoYXIgKmJ1cywKICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGNoYXIgKmRldl9mbik7CgoKCnZvaWQgcGNpX2luaXQodm9pZCk7CmludCBw Y2lfYnVzX2V4aXN0cyhjb25zdCBzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0LCBpbnQgbnIpOwpzdHJ1 Y3QgcGNpX2J1cyAqcGNpX3NjYW5fYnVzKGludCBidXMsIHN0cnVjdCBwY2lfb3BzICpvcHMsIHZv aWQgKnN5c2RhdGEpOwpzdHJ1Y3QgcGNpX2J1cyAqcGNpX2FsbG9jX3ByaW1hcnlfYnVzKGludCBi dXMpOwpzdHJ1Y3QgcGNpX2RldiAqcGNpX3NjYW5fc2xvdChzdHJ1Y3QgcGNpX2RldiAqdGVtcCk7 CmludCBwY2lfcHJvY19hdHRhY2hfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwppbnQgcGNp X3Byb2NfZGV0YWNoX2RldmljZShzdHJ1Y3QgcGNpX2RldiAqZGV2KTsKdm9pZCBwY2lfbmFtZV9k ZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CmNoYXIgKnBjaV9jbGFzc19uYW1lKHUzMiBjbGFz cyk7CnZvaWQgcGNpX3JlYWRfYnJpZGdlX2Jhc2VzKHN0cnVjdCBwY2lfYnVzICpjaGlsZCk7CnN0 cnVjdCByZXNvdXJjZSAqcGNpX2ZpbmRfcGFyZW50X3Jlc291cmNlKGNvbnN0IHN0cnVjdCBwY2lf ZGV2ICpkZXYsIHN0cnVjdCByZXNvdXJjZSAqcmVzKTsKaW50IHBjaV9zZXR1cF9kZXZpY2Uoc3Ry dWN0IHBjaV9kZXYgKmRldik7CmludCBwY2lfZ2V0X2ludGVycnVwdF9waW4oc3RydWN0IHBjaV9k ZXYgKmRldiwgc3RydWN0IHBjaV9kZXYgKipicmlkZ2UpOwoKCgpzdHJ1Y3QgcGNpX2RldiAqcGNp X2ZpbmRfZGV2aWNlICh1bnNpZ25lZCBpbnQgdmVuZG9yLCB1bnNpZ25lZCBpbnQgZGV2aWNlLCBj b25zdCBzdHJ1Y3QgcGNpX2RldiAqZnJvbSk7CnN0cnVjdCBwY2lfZGV2ICpwY2lfZmluZF9zdWJz eXMgKHVuc2lnbmVkIGludCB2ZW5kb3IsIHVuc2lnbmVkIGludCBkZXZpY2UsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBzc192ZW5kb3IsIHVuc2lnbmVkIGlu dCBzc19kZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVj dCBwY2lfZGV2ICpmcm9tKTsKc3RydWN0IHBjaV9kZXYgKnBjaV9maW5kX2NsYXNzICh1bnNpZ25l ZCBpbnQgY2xhc3MsIGNvbnN0IHN0cnVjdCBwY2lfZGV2ICpmcm9tKTsKc3RydWN0IHBjaV9kZXYg KnBjaV9maW5kX3Nsb3QgKHVuc2lnbmVkIGludCBidXMsIHVuc2lnbmVkIGludCBkZXZmbik7Cmlu dCBwY2lfZmluZF9jYXBhYmlsaXR5IChzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgY2FwKTsKCmlu dCBwY2lfcmVhZF9jb25maWdfYnl0ZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgd2hlcmUsIHU4 ICp2YWwpOwppbnQgcGNpX3JlYWRfY29uZmlnX3dvcmQoc3RydWN0IHBjaV9kZXYgKmRldiwgaW50 IHdoZXJlLCB1MTYgKnZhbCk7CmludCBwY2lfcmVhZF9jb25maWdfZHdvcmQoc3RydWN0IHBjaV9k ZXYgKmRldiwgaW50IHdoZXJlLCB1MzIgKnZhbCk7CmludCBwY2lfd3JpdGVfY29uZmlnX2J5dGUo c3RydWN0IHBjaV9kZXYgKmRldiwgaW50IHdoZXJlLCB1OCB2YWwpOwppbnQgcGNpX3dyaXRlX2Nv bmZpZ193b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTE2IHZhbCk7CmludCBw Y2lfd3JpdGVfY29uZmlnX2R3b3JkKHN0cnVjdCBwY2lfZGV2ICpkZXYsIGludCB3aGVyZSwgdTMy IHZhbCk7CgppbnQgcGNpX2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKmRldik7CnZvaWQg cGNpX2Rpc2FibGVfZGV2aWNlKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp2b2lkIHBjaV9zZXRfbWFz dGVyKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwppbnQgcGNpX3NldF9kbWFfbWFzayhzdHJ1Y3QgcGNp X2RldiAqZGV2LCBkbWFfYWRkcl90IG1hc2spOwppbnQgcGNpX2Fzc2lnbl9yZXNvdXJjZShzdHJ1 Y3QgcGNpX2RldiAqZGV2LCBpbnQgaSk7CgoKaW50IHBjaV9zYXZlX3N0YXRlKHN0cnVjdCBwY2lf ZGV2ICpkZXYsIHUzMiAqYnVmZmVyKTsKaW50IHBjaV9yZXN0b3JlX3N0YXRlKHN0cnVjdCBwY2lf ZGV2ICpkZXYsIHUzMiAqYnVmZmVyKTsKaW50IHBjaV9zZXRfcG93ZXJfc3RhdGUoc3RydWN0IHBj aV9kZXYgKmRldiwgaW50IHN0YXRlKTsKaW50IHBjaV9lbmFibGVfd2FrZShzdHJ1Y3QgcGNpX2Rl diAqZGV2LCB1MzIgc3RhdGUsIGludCBlbmFibGUpOwoKCgppbnQgcGNpX2NsYWltX3Jlc291cmNl KHN0cnVjdCBwY2lfZGV2ICosIGludCk7CnZvaWQgcGNpX2Fzc2lnbl91bmFzc2lnbmVkX3Jlc291 cmNlcyh2b2lkKTsKdm9pZCBwZGV2X2VuYWJsZV9kZXZpY2Uoc3RydWN0IHBjaV9kZXYgKik7CnZv aWQgcGRldl9zb3J0X3Jlc291cmNlcyhzdHJ1Y3QgcGNpX2RldiAqLCBzdHJ1Y3QgcmVzb3VyY2Vf bGlzdCAqLCB1MzIpOwp1bnNpZ25lZCBsb25nIHBjaV9icmlkZ2VfY2hlY2tfaW8oc3RydWN0IHBj aV9kZXYgKik7CnZvaWQgcGNpX2ZpeHVwX2lycXModTggKCopKHN0cnVjdCBwY2lfZGV2ICosIHU4 ICopLAogICAgICAgICAgICAgICAgICAgIGludCAoKikoc3RydWN0IHBjaV9kZXYgKiwgdTgsIHU4 KSk7CgppbnQgcGNpX3JlcXVlc3RfcmVnaW9ucyhzdHJ1Y3QgcGNpX2RldiAqLCBjaGFyICopOwp2 b2lkIHBjaV9yZWxlYXNlX3JlZ2lvbnMoc3RydWN0IHBjaV9kZXYgKik7CgoKaW50IHBjaV9yZWdp c3Rlcl9kcml2ZXIoc3RydWN0IHBjaV9kcml2ZXIgKik7CnZvaWQgcGNpX3VucmVnaXN0ZXJfZHJp dmVyKHN0cnVjdCBwY2lfZHJpdmVyICopOwp2b2lkIHBjaV9pbnNlcnRfZGV2aWNlKHN0cnVjdCBw Y2lfZGV2ICosIHN0cnVjdCBwY2lfYnVzICopOwp2b2lkIHBjaV9yZW1vdmVfZGV2aWNlKHN0cnVj dCBwY2lfZGV2ICopOwpzdHJ1Y3QgcGNpX2RyaXZlciAqcGNpX2Rldl9kcml2ZXIoY29uc3Qgc3Ry dWN0IHBjaV9kZXYgKik7CmNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICpwY2lfbWF0Y2hfZGV2 aWNlKGNvbnN0IHN0cnVjdCBwY2lfZGV2aWNlX2lkICppZHMsIGNvbnN0IHN0cnVjdCBwY2lfZGV2 ICpkZXYpOwoKCnN0cnVjdCBwY2lfcG9vbCAqcGNpX3Bvb2xfY3JlYXRlIChjb25zdCBjaGFyICpu YW1lLCBzdHJ1Y3QgcGNpX2RldiAqZGV2LAogICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIHNp emVfdCBhbGlnbiwgc2l6ZV90IGFsbG9jYXRpb24sIGludCBmbGFncyk7CnZvaWQgcGNpX3Bvb2xf ZGVzdHJveSAoc3RydWN0IHBjaV9wb29sICpwb29sKTsKCnZvaWQgKnBjaV9wb29sX2FsbG9jIChz dHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIGludCBmbGFncywgZG1hX2FkZHJfdCAqaGFuZGxlKTsKdm9p ZCBwY2lfcG9vbF9mcmVlIChzdHJ1Y3QgcGNpX3Bvb2wgKnBvb2wsIHZvaWQgKnZhZGRyLCBkbWFf YWRkcl90IGFkZHIpOwoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3BjaS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29u ZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGNpLmgiIDIK IyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BjaS5oIgpleHRlcm4gdW5z aWduZWQgaW50IHBjaWJpb3NfYXNzaWduX2FsbF9idXNzZXModm9pZCk7CgoKCgpleHRlcm4gdW5z aWduZWQgbG9uZyBwY2lfbWVtX3N0YXJ0OwoKCgp2b2lkIHBjaWJpb3Nfc2V0X21hc3RlcihzdHJ1 Y3QgcGNpX2RldiAqZGV2KTsKdm9pZCBwY2liaW9zX3BlbmFsaXplX2lzYV9pcnEoaW50IGlycSk7 CgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAx CiMgMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wY2kuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NsYWIuaCIgMQojIDEyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zbGFiLmgiCnR5cGVkZWYgc3RydWN0IGttZW1f Y2FjaGVfcyBrbWVtX2NhY2hlX3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L21tLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9zY2hlZC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Bh cmFtLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5o IiAyCgpleHRlcm4gdW5zaWduZWQgbG9uZyBldmVudDsKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvYmluZm10cy5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvcHRyYWNlLmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcHRyYWNlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3B0 cmFjZS5oIiAxCiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wdHJhY2Uu aCIKc3RydWN0IHB0X3JlZ3MgewogICAgICAgIGxvbmcgZWJ4OwogICAgICAgIGxvbmcgZWN4Owog ICAgICAgIGxvbmcgZWR4OwogICAgICAgIGxvbmcgZXNpOwogICAgICAgIGxvbmcgZWRpOwogICAg ICAgIGxvbmcgZWJwOwogICAgICAgIGxvbmcgZWF4OwogICAgICAgIGludCB4ZHM7CiAgICAgICAg aW50IHhlczsKICAgICAgICBsb25nIG9yaWdfZWF4OwogICAgICAgIGxvbmcgZWlwOwogICAgICAg IGludCB4Y3M7CiAgICAgICAgbG9uZyBlZmxhZ3M7CiAgICAgICAgbG9uZyBlc3A7CiAgICAgICAg aW50IHhzczsKfTsKIyA2MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3B0cmFj ZS5oIgpleHRlcm4gdm9pZCBzaG93X3JlZ3Moc3RydWN0IHB0X3JlZ3MgKik7CiMgMjUgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3B0cmFjZS5oIiAyCiMgNSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYmluZm10cy5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvY2FwYWJpbGl0eS5oIiAxCiMgMTYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saW5rYWdlLmgi IDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2xpbWl0cy5oIiAxCiMgMTIgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvd2FpdC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2tlcm5lbC5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2xpc3QuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93 YWl0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdGRkZWYu aCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93YWl0LmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMg MTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgoKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2FzbS9wcm9jZXNzb3IuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC93YWl0LmgiIDIKIyAzMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvd2FpdC5oIgpzdHJ1Y3QgX193YWl0X3F1ZXVlIHsKICAgICAgICB1bnNpZ25lZCBpbnQg ZmxhZ3M7CgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqIHRhc2s7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCB0YXNrX2xpc3Q7CgoKCgp9Owp0eXBlZGVmIHN0cnVjdCBfX3dhaXRfcXVldWUg d2FpdF9xdWV1ZV90OwojIDc3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93 YWl0LmgiCnN0cnVjdCBfX3dhaXRfcXVldWVfaGVhZCB7CiAgICAgICAgc3BpbmxvY2tfdCBsb2Nr OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdGFza19saXN0OwoKCgoKfTsKdHlwZWRlZiBzdHJ1 Y3QgX193YWl0X3F1ZXVlX2hlYWQgd2FpdF9xdWV1ZV9oZWFkX3Q7CiMgMTU1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93YWl0LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0 X3dhaXRxdWV1ZV9oZWFkKHdhaXRfcXVldWVfaGVhZF90ICpxKQp7CgoKCgogICAgICAgIHEtPmxv Y2sgPSAoc3BpbmxvY2tfdCkgeyB9OwogICAgICAgIGRvIHsgKCZxLT50YXNrX2xpc3QpLT5uZXh0 ID0gKCZxLT50YXNrX2xpc3QpOyAoJnEtPnRhc2tfbGlzdCktPnByZXYgPSAoJnEtPnRhc2tfbGlz dCk7IH0gd2hpbGUgKDApOwoKCgoKfQoKc3RhdGljIGlubGluZSB2b2lkIGluaXRfd2FpdHF1ZXVl X2VudHJ5KHdhaXRfcXVldWVfdCAqcSwgc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CgoKCgogICAg ICAgIHEtPmZsYWdzID0gMDsKICAgICAgICBxLT50YXNrID0gcDsKCgoKfQoKc3RhdGljIGlubGlu ZSBpbnQgd2FpdHF1ZXVlX2FjdGl2ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSkKewoKCgoKCgogICAg ICAgIHJldHVybiAhbGlzdF9lbXB0eSgmcS0+dGFza19saXN0KTsKfQoKc3RhdGljIGlubGluZSB2 b2lkIF9fYWRkX3dhaXRfcXVldWUod2FpdF9xdWV1ZV9oZWFkX3QgKmhlYWQsIHdhaXRfcXVldWVf dCAqbmV3KQp7CiMgMjAzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93YWl0 LmgiCiAgICAgICAgbGlzdF9hZGQoJm5ldy0+dGFza19saXN0LCAmaGVhZC0+dGFza19saXN0KTsK fQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fYWRkX3dhaXRfcXVldWVfdGFpbCh3YWl0X3F1ZXVl X2hlYWRfdCAqaGVhZCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2FpdF9xdWV1ZV90ICpuZXcpCnsKIyAyMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L3dhaXQuaCIKICAgICAgICBsaXN0X2FkZF90YWlsKCZuZXctPnRhc2tfbGlz dCwgJmhlYWQtPnRhc2tfbGlzdCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3JlbW92ZV93YWl0 X3F1ZXVlKHdhaXRfcXVldWVfaGVhZF90ICpoZWFkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdhaXRfcXVldWVfdCAqb2xkKQp7CgoKCgoK ICAgICAgICBsaXN0X2RlbCgmb2xkLT50YXNrX2xpc3QpOwp9CiMgMTMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC92ZnMuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zdGF0 ZnMuaCIgMQoKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlw ZXMuaCIgMQojIDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zdGF0ZnMuaCIg MgoKdHlwZWRlZiBfX2tlcm5lbF9mc2lkX3QgZnNpZF90OwoKCgpzdHJ1Y3Qgc3RhdGZzIHsKICAg ICAgICBsb25nIGZfdHlwZTsKICAgICAgICBsb25nIGZfYnNpemU7CiAgICAgICAgbG9uZyBmX2Js b2NrczsKICAgICAgICBsb25nIGZfYmZyZWU7CiAgICAgICAgbG9uZyBmX2JhdmFpbDsKICAgICAg ICBsb25nIGZfZmlsZXM7CiAgICAgICAgbG9uZyBmX2ZmcmVlOwogICAgICAgIF9fa2VybmVsX2Zz aWRfdCBmX2ZzaWQ7CiAgICAgICAgbG9uZyBmX25hbWVsZW47CiAgICAgICAgbG9uZyBmX3NwYXJl WzZdOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Zmcy5oIiAy CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXQuaCIgMQojIDIxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXQuaCIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9uZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3NvY2tldC5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9hc20vc29ja2V0LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vc29ja2lvcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3NvY2tldC5oIiAyCiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc29j a2V0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zb2NraW9z LmgiIDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc29ja2lvcy5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zb2NraW9zLmgiIDEKIyAy MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc29ja2lvcy5oIiAyCiMgOCAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC91aW8uaCIgMQoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC91aW8uaCIgMgojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC91aW8uaCIKc3RydWN0IGlvdmVjCnsKICAgICAgICB2b2lkICppb3Zf YmFzZTsKICAgICAgICBfX2tlcm5lbF9zaXplX3QgaW92X2xlbjsKfTsKIyA5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zb2NrZXQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDIKCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgc2Ff ZmFtaWx5X3Q7CgoKCgoKc3RydWN0IHNvY2thZGRyIHsKICAgICAgICBzYV9mYW1pbHlfdCBzYV9m YW1pbHk7CiAgICAgICAgY2hhciBzYV9kYXRhWzE0XTsKfTsKCnN0cnVjdCBsaW5nZXIgewogICAg ICAgIGludCBsX29ub2ZmOwogICAgICAgIGludCBsX2xpbmdlcjsKfTsKCgoKCgoKCnN0cnVjdCBt c2doZHIgewogICAgICAgIHZvaWQgKiBtc2dfbmFtZTsKICAgICAgICBpbnQgbXNnX25hbWVsZW47 CiAgICAgICAgc3RydWN0IGlvdmVjICogbXNnX2lvdjsKICAgICAgICBfX2tlcm5lbF9zaXplX3Qg bXNnX2lvdmxlbjsKICAgICAgICB2b2lkICogbXNnX2NvbnRyb2w7CiAgICAgICAgX19rZXJuZWxf c2l6ZV90IG1zZ19jb250cm9sbGVuOwogICAgICAgIHVuc2lnbmVkIG1zZ19mbGFnczsKfTsKCgoK CgoKCnN0cnVjdCBjbXNnaGRyIHsKICAgICAgICBfX2tlcm5lbF9zaXplX3QgY21zZ19sZW47CiAg ICAgICAgaW50IGNtc2dfbGV2ZWw7CiAgICAgICAgaW50IGNtc2dfdHlwZTsKfTsKIyAxMDIgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NvY2tldC5oIgpzdGF0aWMgaW5saW5l IHN0cnVjdCBjbXNnaGRyICogX19jbXNnX254dGhkcih2b2lkICpfX2N0bCwgX19rZXJuZWxfc2l6 ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3QgY21zZ2hkciAqX19jbXNnKQp7CiAgICAgICAgc3RydWN0IGNtc2doZHIgKiBfX3B0 cjsKCiAgICAgICAgX19wdHIgPSAoc3RydWN0IGNtc2doZHIqKSgoKHVuc2lnbmVkIGNoYXIgKikg X19jbXNnKSArICggKChfX2Ntc2ctPmNtc2dfbGVuKStzaXplb2YobG9uZyktMSkgJiB+KHNpemVv Zihsb25nKS0xKSApKTsKICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpKChjaGFyKikoX19wdHIr MSkgLSAoY2hhciAqKSBfX2N0bCkgPiBfX3NpemUpCiAgICAgICAgICAgICAgICByZXR1cm4gKHN0 cnVjdCBjbXNnaGRyICopMDsKCiAgICAgICAgcmV0dXJuIF9fcHRyOwp9CgpzdGF0aWMgaW5saW5l IHN0cnVjdCBjbXNnaGRyICogY21zZ19ueHRoZHIgKHN0cnVjdCBtc2doZHIgKl9fbXNnLCBzdHJ1 Y3QgY21zZ2hkciAqX19jbXNnKQp7CiAgICAgICAgcmV0dXJuIF9fY21zZ19ueHRoZHIoX19tc2ct Pm1zZ19jb250cm9sLCBfX21zZy0+bXNnX2NvbnRyb2xsZW4sIF9fY21zZyk7Cn0KCgoKCgoKCnN0 cnVjdCB1Y3JlZCB7CiAgICAgICAgX191MzIgcGlkOwogICAgICAgIF9fdTMyIHVpZDsKICAgICAg ICBfX3UzMiBnaWQ7Cn07CiMgMjQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9zb2NrZXQuaCIKZXh0ZXJuIGludCBtZW1jcHlfZnJvbWlvdmVjKHVuc2lnbmVkIGNoYXIgKmtk YXRhLCBzdHJ1Y3QgaW92ZWMgKmlvdiwgaW50IGxlbik7CmV4dGVybiBpbnQgbWVtY3B5X2Zyb21p b3ZlY2VuZCh1bnNpZ25lZCBjaGFyICprZGF0YSwgc3RydWN0IGlvdmVjICppb3YsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwgaW50IGxlbik7CmV4dGVybiBpbnQg Y3N1bV9wYXJ0aWFsX2NvcHlfZnJvbWlvdmVjZW5kKHVuc2lnbmVkIGNoYXIgKmtkYXRhLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaW92ZWMgKmlvdiwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IG9mZnNldCwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxlbiwg aW50ICpjc3VtcCk7CgpleHRlcm4gaW50IHZlcmlmeV9pb3ZlYyhzdHJ1Y3QgbXNnaGRyICptLCBz dHJ1Y3QgaW92ZWMgKmlvdiwgY2hhciAqYWRkcmVzcywgaW50IG1vZGUpOwpleHRlcm4gaW50IG1l bWNweV90b2lvdmVjKHN0cnVjdCBpb3ZlYyAqdiwgdW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBs ZW4pOwpleHRlcm4gdm9pZCBtZW1jcHlfdG9rZXJuZWxpb3ZlYyhzdHJ1Y3QgaW92ZWMgKmlvdiwg dW5zaWduZWQgY2hhciAqa2RhdGEsIGludCBsZW4pOwpleHRlcm4gaW50IG1vdmVfYWRkcl90b191 c2VyKHZvaWQgKmthZGRyLCBpbnQga2xlbiwgdm9pZCAqdWFkZHIsIGludCAqdWxlbik7CmV4dGVy biBpbnQgbW92ZV9hZGRyX3RvX2tlcm5lbCh2b2lkICp1YWRkciwgaW50IHVsZW4sIHZvaWQgKmth ZGRyKTsKZXh0ZXJuIGludCBwdXRfY21zZyhzdHJ1Y3QgbXNnaGRyKiwgaW50IGxldmVsLCBpbnQg dHlwZSwgaW50IGxlbiwgdm9pZCAqZGF0YSk7CiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L25ldC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvd2FpdC5oIiAxCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L25ldC5oIiAyCgpzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3Q7CiMgNDkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldC5oIgp0eXBlZGVmIGVudW0gewogIFNTX0ZSRUUgPSAw LAogIFNTX1VOQ09OTkVDVEVELAogIFNTX0NPTk5FQ1RJTkcsCiAgU1NfQ09OTkVDVEVELAogIFNT X0RJU0NPTk5FQ1RJTkcKfSBzb2NrZXRfc3RhdGU7CiMgNjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L25ldC5oIgpzdHJ1Y3Qgc29ja2V0CnsKICAgICAgICBzb2NrZXRfc3Rh dGUgc3RhdGU7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgc3RydWN0IHBy b3RvX29wcyAqb3BzOwogICAgICAgIHN0cnVjdCBpbm9kZSAqaW5vZGU7CiAgICAgICAgc3RydWN0 IGZhc3luY19zdHJ1Y3QgKmZhc3luY19saXN0OwogICAgICAgIHN0cnVjdCBmaWxlICpmaWxlOwog ICAgICAgIHN0cnVjdCBzb2NrICpzazsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwoK ICAgICAgICBzaG9ydCB0eXBlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgcGFzc2NyZWQ7Cn07CgoK CnN0cnVjdCBzY21fY29va2llOwpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CnN0cnVjdCBwYWdlOwoK c3RydWN0IHByb3RvX29wcyB7CiAgaW50IGZhbWlseTsKCiAgaW50ICgqcmVsZWFzZSkgKHN0cnVj dCBzb2NrZXQgKnNvY2spOwogIGludCAoKmJpbmQpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1 Y3Qgc29ja2FkZHIgKnVteWFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2Fk ZHJfbGVuKTsKICBpbnQgKCpjb25uZWN0KSAoc3RydWN0IHNvY2tldCAqc29jaywgc3RydWN0IHNv Y2thZGRyICp1c2VydmFkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc29ja2FkZHJf bGVuLCBpbnQgZmxhZ3MpOwogIGludCAoKnNvY2tldHBhaXIpIChzdHJ1Y3Qgc29ja2V0ICpzb2Nr MSwgc3RydWN0IHNvY2tldCAqc29jazIpOwogIGludCAoKmFjY2VwdCkgKHN0cnVjdCBzb2NrZXQg KnNvY2ssIHN0cnVjdCBzb2NrZXQgKm5ld3NvY2ssCiAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgZmxhZ3MpOwogIGludCAoKmdldG5hbWUpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3Qg c29ja2FkZHIgKnVhZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50ICp1c29ja2FkZHJf bGVuLCBpbnQgcGVlcik7CiAgdW5zaWduZWQgaW50ICgqcG9sbCkgKHN0cnVjdCBmaWxlICpmaWxl LCBzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKndhaXQpOwog IGludCAoKmlvY3RsKSAoc3RydWN0IHNvY2tldCAqc29jaywgdW5zaWduZWQgaW50IGNtZCwKICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYXJnKTsKICBpbnQgKCpsaXN0ZW4p IChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGVuKTsKICBpbnQgKCpzaHV0ZG93bikgKHN0cnVj dCBzb2NrZXQgKnNvY2ssIGludCBmbGFncyk7CiAgaW50ICgqc2V0c29ja29wdCkgKHN0cnVjdCBz b2NrZXQgKnNvY2ssIGludCBsZXZlbCwgaW50IG9wdG5hbWUsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjaGFyICpvcHR2YWwsIGludCBvcHRsZW4pOwogIGludCAoKmdldHNvY2tvcHQpIChzdHJ1 Y3Qgc29ja2V0ICpzb2NrLCBpbnQgbGV2ZWwsIGludCBvcHRuYW1lLAogICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqb3B0dmFsLCBpbnQgKm9wdGxlbik7CiAgaW50ICgqc2VuZG1zZykgKHN0 cnVjdCBzb2NrZXQgKnNvY2ssIHN0cnVjdCBtc2doZHIgKm0sIGludCB0b3RhbF9sZW4sIHN0cnVj dCBzY21fY29va2llICpzY20pOwogIGludCAoKnJlY3Ztc2cpIChzdHJ1Y3Qgc29ja2V0ICpzb2Nr LCBzdHJ1Y3QgbXNnaGRyICptLCBpbnQgdG90YWxfbGVuLCBpbnQgZmxhZ3MsIHN0cnVjdCBzY21f Y29va2llICpzY20pOwogIGludCAoKm1tYXApIChzdHJ1Y3QgZmlsZSAqZmlsZSwgc3RydWN0IHNv Y2tldCAqc29jaywgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hKTsKICBzc2l6ZV90ICgqc2Vu ZHBhZ2UpIChzdHJ1Y3Qgc29ja2V0ICpzb2NrLCBzdHJ1Y3QgcGFnZSAqcGFnZSwgaW50IG9mZnNl dCwgc2l6ZV90IHNpemUsIGludCBmbGFncyk7Cn07CgpzdHJ1Y3QgbmV0X3Byb3RvX2ZhbWlseQp7 CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBpbnQgKCpjcmVhdGUpKHN0cnVjdCBzb2NrZXQg KnNvY2ssIGludCBwcm90b2NvbCk7CgoKICAgICAgICBzaG9ydCBhdXRoZW50aWNhdGlvbjsKICAg ICAgICBzaG9ydCBlbmNyeXB0aW9uOwogICAgICAgIHNob3J0IGVuY3J5cHRfbmV0Owp9OwoKc3Ry dWN0IG5ldF9wcm90bwp7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB2b2lkICgq aW5pdF9mdW5jKShzdHJ1Y3QgbmV0X3Byb3RvICopOwp9OwoKZXh0ZXJuIGludCBzb2NrX3dha2Vf YXN5bmMoc3RydWN0IHNvY2tldCAqc2ssIGludCBob3csIGludCBiYW5kKTsKZXh0ZXJuIGludCBz b2NrX3JlZ2lzdGVyKHN0cnVjdCBuZXRfcHJvdG9fZmFtaWx5ICpmYW0pOwpleHRlcm4gaW50IHNv Y2tfdW5yZWdpc3RlcihpbnQgZmFtaWx5KTsKZXh0ZXJuIHN0cnVjdCBzb2NrZXQgKnNvY2tfYWxs b2Modm9pZCk7CmV4dGVybiBpbnQgc29ja19jcmVhdGUoaW50IGZhbWlseSwgaW50IHR5cGUsIGlu dCBwcm90bywgc3RydWN0IHNvY2tldCAqKik7CmV4dGVybiB2b2lkIHNvY2tfcmVsZWFzZShzdHJ1 Y3Qgc29ja2V0ICopOwpleHRlcm4gaW50IHNvY2tfc2VuZG1zZyhzdHJ1Y3Qgc29ja2V0ICosIHN0 cnVjdCBtc2doZHIgKm0sIGludCBsZW4pOwpleHRlcm4gaW50IHNvY2tfcmVjdm1zZyhzdHJ1Y3Qg c29ja2V0ICosIHN0cnVjdCBtc2doZHIgKm0sIGludCBsZW4sIGludCBmbGFncyk7CmV4dGVybiBp bnQgc29ja19yZWFkdl93cml0ZXYoaW50IHR5cGUsIHN0cnVjdCBpbm9kZSAqIGlub2RlLCBzdHJ1 Y3QgZmlsZSAqIGZpbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgaW92ZWMgKiBpb3YsIGxvbmcgY291bnQsIGxvbmcgc2l6ZSk7CgpleHRlcm4gaW50IG5l dF9yYXRlbGltaXQodm9pZCk7CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldF9yYW5kb20odm9pZCk7 CmV4dGVybiB2b2lkIG5ldF9zcmFuZG9tKHVuc2lnbmVkIGxvbmcpOwojIDE2ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgva2Rldl90LmgiIDEKIyA2NyAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgva2Rldl90LmgiCnR5cGVkZWYgdW5zaWduZWQgc2hvcnQga2Rldl90Owoj IDc2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9rZGV2X3QuaCIKZXh0ZXJu IGNvbnN0IGNoYXIgKiBrZGV2bmFtZShrZGV2X3QpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludCBrZGV2X3RfdG9fbnIoa2Rldl90IGRldikgewogICAgICAgIHJldHVybiAoKCh1bnNp Z25lZCBpbnQpICgoZGV2KSA+PiA4KSk8PDgpIHwgKCh1bnNpZ25lZCBpbnQpICgoZGV2KSAmICgo MVUgPDwgOCkgLSAxKSkpOwp9CgpzdGF0aWMgaW5saW5lIGtkZXZfdCB0b19rZGV2X3QoaW50IGRl dikKewogICAgICAgIGludCBtYWpvciwgbWlub3I7CiMgOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L2tkZXZfdC5oIgogICAgICAgIG1ham9yID0gKGRldiA+PiA4KTsKICAg ICAgICBtaW5vciA9IChkZXYgJiAweGZmKTsKCiAgICAgICAgcmV0dXJuICgoKG1ham9yKSA8PCA4 KSB8IChtaW5vcikpOwp9CiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pb2N0bC5o IiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2lvY3RsLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pb2N0bC5oIiAyCiMgMTgg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyAxOSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAxCgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9kY2FjaGUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L21vdW50LmgiIDEKIyAxOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbW91bnQuaCIKc3RydWN0IHZmc21vdW50CnsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIG1u dF9oYXNoOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50X3BhcmVudDsKICAgICAgICBzdHJ1 Y3QgZGVudHJ5ICptbnRfbW91bnRwb2ludDsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICptbnRfcm9v dDsKICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKm1udF9zYjsKICAgICAgICBzdHJ1Y3QgbGlz dF9oZWFkIG1udF9tb3VudHM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfY2hpbGQ7CiAg ICAgICAgYXRvbWljX3QgbW50X2NvdW50OwogICAgICAgIGludCBtbnRfZmxhZ3M7CiAgICAgICAg Y2hhciAqbW50X2Rldm5hbWU7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBtbnRfbGlzdDsKfTsK CnN0YXRpYyBpbmxpbmUgc3RydWN0IHZmc21vdW50ICptbnRnZXQoc3RydWN0IHZmc21vdW50ICpt bnQpCnsKICAgICAgICBpZiAobW50KQogICAgICAgICAgICAgICAgYXRvbWljX2luYygmbW50LT5t bnRfY291bnQpOwogICAgICAgIHJldHVybiBtbnQ7Cn0KCmV4dGVybiB2b2lkIF9fbW50cHV0KHN0 cnVjdCB2ZnNtb3VudCAqbW50KTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBtbnRwdXQoc3RydWN0IHZm c21vdW50ICptbnQpCnsKICAgICAgICBpZiAobW50KSB7CiAgICAgICAgICAgICAgICBpZiAoYXRv bWljX2RlY19hbmRfdGVzdCgmbW50LT5tbnRfY291bnQpKQogICAgICAgICAgICAgICAgICAgICAg ICBfX21udHB1dChtbnQpOwogICAgICAgIH0KfQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2RjYWNoZS5oIiAyCiMgMjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2RjYWNoZS5oIgpzdHJ1Y3QgcXN0ciB7CiAgICAgICAgY29uc3QgdW5zaWduZWQg Y2hhciAqIG5hbWU7CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsKICAgICAgICB1bnNpZ25lZCBp bnQgaGFzaDsKfTsKCnN0cnVjdCBkZW50cnlfc3RhdF90IHsKICAgICAgICBpbnQgbnJfZGVudHJ5 OwogICAgICAgIGludCBucl91bnVzZWQ7CiAgICAgICAgaW50IGFnZV9saW1pdDsKICAgICAgICBp bnQgd2FudF9wYWdlczsKICAgICAgICBpbnQgZHVtbXlbMl07Cn07CmV4dGVybiBzdHJ1Y3QgZGVu dHJ5X3N0YXRfdCBkZW50cnlfc3RhdDsKCgoKCgoKc3RhdGljIF9faW5saW5lX18gdW5zaWduZWQg bG9uZyBwYXJ0aWFsX25hbWVfaGFzaCh1bnNpZ25lZCBsb25nIGMsIHVuc2lnbmVkIGxvbmcgcHJl dmhhc2gpCnsKICAgICAgICByZXR1cm4gKHByZXZoYXNoICsgKGMgPDwgNCkgKyAoYyA+PiA0KSkg KiAxMTsKfQoKCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGxvbmcgZW5kX25hbWVfaGFzaCh1 bnNpZ25lZCBsb25nIGhhc2gpCnsKICAgICAgICByZXR1cm4gKHVuc2lnbmVkIGludCkgaGFzaDsK fQoKCnN0YXRpYyBfX2lubGluZV9fIHVuc2lnbmVkIGludCBmdWxsX25hbWVfaGFzaChjb25zdCB1 bnNpZ25lZCBjaGFyICogbmFtZSwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHVuc2lnbmVk IGxvbmcgaGFzaCA9IDA7CiAgICAgICAgd2hpbGUgKGxlbi0tKQogICAgICAgICAgICAgICAgaGFz aCA9IHBhcnRpYWxfbmFtZV9oYXNoKCpuYW1lKyssIGhhc2gpOwogICAgICAgIHJldHVybiBlbmRf bmFtZV9oYXNoKGhhc2gpOwp9CgoKCnN0cnVjdCBkZW50cnkgewogICAgICAgIGF0b21pY190IGRf Y291bnQ7CiAgICAgICAgdW5zaWduZWQgaW50IGRfZmxhZ3M7CiAgICAgICAgc3RydWN0IGlub2Rl ICogZF9pbm9kZTsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogZF9wYXJlbnQ7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBkX2hhc2g7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkX2xydTsKICAg ICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRfY2hpbGQ7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBk X3N1YmRpcnM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBkX2FsaWFzOwogICAgICAgIGludCBk X21vdW50ZWQ7CiAgICAgICAgc3RydWN0IHFzdHIgZF9uYW1lOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZF90aW1lOwogICAgICAgIHN0cnVjdCBkZW50cnlfb3BlcmF0aW9ucyAqZF9vcDsKICAgICAg ICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiBkX3NiOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZF92ZnNf ZmxhZ3M7CiAgICAgICAgdm9pZCAqIGRfZnNkYXRhOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZF9p bmFtZVsxNl07Cn07CgpzdHJ1Y3QgZGVudHJ5X29wZXJhdGlvbnMgewogICAgICAgIGludCAoKmRf cmV2YWxpZGF0ZSkoc3RydWN0IGRlbnRyeSAqLCBpbnQpOwogICAgICAgIGludCAoKmRfaGFzaCkg KHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CiAgICAgICAgaW50ICgqZF9jb21wYXJl KSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgcXN0ciAqLCBzdHJ1Y3QgcXN0ciAqKTsKICAgICAg ICBpbnQgKCpkX2RlbGV0ZSkoc3RydWN0IGRlbnRyeSAqKTsKICAgICAgICB2b2lkICgqZF9yZWxl YXNlKShzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIHZvaWQgKCpkX2lwdXQpKHN0cnVjdCBkZW50 cnkgKiwgc3RydWN0IGlub2RlICopOwp9OwojIDEyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZGNhY2hlLmgiCmV4dGVybiBzcGlubG9ja190IGRjYWNoZV9sb2NrOwojIDE0 NiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBf X2lubGluZV9fIHZvaWQgZF9kcm9wKHN0cnVjdCBkZW50cnkgKiBkZW50cnkpCnsKICAgICAgICAo dm9pZCkoJmRjYWNoZV9sb2NrKTsKICAgICAgICBsaXN0X2RlbCgmZGVudHJ5LT5kX2hhc2gpOwog ICAgICAgIGRvIHsgKCZkZW50cnktPmRfaGFzaCktPm5leHQgPSAoJmRlbnRyeS0+ZF9oYXNoKTsg KCZkZW50cnktPmRfaGFzaCktPnByZXYgPSAoJmRlbnRyeS0+ZF9oYXNoKTsgfSB3aGlsZSAoMCk7 CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9CgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgZG5hbWVf ZXh0ZXJuYWwoc3RydWN0IGRlbnRyeSAqZCkKewogICAgICAgIHJldHVybiBkLT5kX25hbWUubmFt ZSAhPSBkLT5kX2luYW1lOwp9CgoKCgpleHRlcm4gdm9pZCBkX2luc3RhbnRpYXRlKHN0cnVjdCBk ZW50cnkgKiwgc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCBkX2RlbGV0ZShzdHJ1Y3QgZGVu dHJ5ICopOwoKCmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogZF9hbGxvYyhzdHJ1Y3QgZGVudHJ5ICos IGNvbnN0IHN0cnVjdCBxc3RyICopOwpleHRlcm4gdm9pZCBzaHJpbmtfZGNhY2hlX3NiKHN0cnVj dCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIHZvaWQgc2hyaW5rX2RjYWNoZV9wYXJlbnQoc3RydWN0 IGRlbnRyeSAqKTsKZXh0ZXJuIGludCBkX2ludmFsaWRhdGUoc3RydWN0IGRlbnRyeSAqKTsKCgpz dHJ1Y3Qgem9uZV9zdHJ1Y3Q7CgpleHRlcm4gaW50IHNocmlua19kY2FjaGVfbWVtb3J5KGludCwg dW5zaWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgcHJ1bmVfZGNhY2hlKGludCk7CgoKZXh0ZXJuIGlu dCBzaHJpbmtfaWNhY2hlX21lbW9yeShpbnQsIGludCk7CmV4dGVybiB2b2lkIHBydW5lX2ljYWNo ZShpbnQpOwoKCmV4dGVybiBpbnQgc2hyaW5rX2RxY2FjaGVfbWVtb3J5KGludCwgdW5zaWduZWQg aW50KTsKCgpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfYWxsb2Nfcm9vdChzdHJ1Y3QgaW5vZGUg Kik7CgoKZXh0ZXJuIHZvaWQgZF9nZW5vY2lkZShzdHJ1Y3QgZGVudHJ5ICopOwoKZXh0ZXJuIHN0 cnVjdCBkZW50cnkgKmRfZmluZF9hbGlhcyhzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGRf cHJ1bmVfYWxpYXNlcyhzdHJ1Y3QgaW5vZGUgKik7CgoKZXh0ZXJuIGludCBoYXZlX3N1Ym1vdW50 cyhzdHJ1Y3QgZGVudHJ5ICopOwoKCgoKZXh0ZXJuIHZvaWQgZF9yZWhhc2goc3RydWN0IGRlbnRy eSAqKTsKIyAyMTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2RjYWNoZS5o IgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGRfYWRkKHN0cnVjdCBkZW50cnkgKiBlbnRyeSwgc3Ry dWN0IGlub2RlICogaW5vZGUpCnsKICAgICAgICBkX2luc3RhbnRpYXRlKGVudHJ5LCBpbm9kZSk7 CiAgICAgICAgZF9yZWhhc2goZW50cnkpOwp9CgoKZXh0ZXJuIHZvaWQgZF9tb3ZlKHN0cnVjdCBk ZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKCgpleHRlcm4gc3RydWN0IGRlbnRyeSAqIGRfbG9v a3VwKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IHFzdHIgKik7CgoKZXh0ZXJuIGludCBkX3ZhbGlk YXRlKHN0cnVjdCBkZW50cnkgKiwgc3RydWN0IGRlbnRyeSAqKTsKCmV4dGVybiBjaGFyICogX19k X3BhdGgoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgdmZzbW91bnQgKiwgc3RydWN0IGRlbnRyeSAq LAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqLCBjaGFyICosIGludCk7CiMgMjQzICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9kY2FjaGUuaCIKc3RhdGljIF9faW5saW5lX18g c3RydWN0IGRlbnRyeSAqIGRnZXQoc3RydWN0IGRlbnRyeSAqZGVudHJ5KQp7CiAgICAgICAgaWYg KGRlbnRyeSkgewogICAgICAgICAgICAgICAgaWYgKCEoKCZkZW50cnktPmRfY291bnQpLT5jb3Vu dGVyKSkKICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRl IDB4MGYsMHgwYiIpOwogICAgICAgICAgICAgICAgYXRvbWljX2luYygmZGVudHJ5LT5kX2NvdW50 KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRlbnRyeTsKfQoKZXh0ZXJuIHN0cnVjdCBkZW50 cnkgKiBkZ2V0X2xvY2tlZChzdHJ1Y3QgZGVudHJ5ICopOwojIDI2MiAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvZGNhY2hlLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBkX3Vu aGFzaGVkKHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHJldHVybiBsaXN0X2VtcHR5 KCZkZW50cnktPmRfaGFzaCk7Cn0KCmV4dGVybiB2b2lkIGRwdXQoc3RydWN0IGRlbnRyeSAqKTsK CnN0YXRpYyBfX2lubGluZV9fIGludCBkX21vdW50cG9pbnQoc3RydWN0IGRlbnRyeSAqZGVudHJ5 KQp7CiAgICAgICAgcmV0dXJuIGRlbnRyeS0+ZF9tb3VudGVkOwp9CgpleHRlcm4gc3RydWN0IHZm c21vdW50ICpsb29rdXBfbW50KHN0cnVjdCB2ZnNtb3VudCAqLCBzdHJ1Y3QgZGVudHJ5ICopOwoj IDIwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3RhdC5oIiAxCgoKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc3RhdC5oIiAxCgoKCnN0cnVjdCBfX29sZF9r ZXJuZWxfc3RhdCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfZGV2OwogICAgICAgIHVuc2ln bmVkIHNob3J0IHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAgICAg IHVuc2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3Rf cmRldjsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzdF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X210aW1lOwogICAgICAgIHVuc2ln bmVkIGxvbmcgc3RfY3RpbWU7Cn07CgpzdHJ1Y3Qgc3RhdCB7CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc3RfZGV2OwogICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFkMTsKICAgICAgICB1bnNpZ25l ZCBsb25nIHN0X2lubzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9tb2RlOwogICAgICAgIHVu c2lnbmVkIHNob3J0IHN0X25saW5rOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X3VpZDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBzdF9naWQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3RfcmRl djsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz dF9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfYmxrc2l6ZTsKICAgICAgICB1bnNpZ25l ZCBsb25nIHN0X2Jsb2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2F0aW1lOwogICAgICAg IHVuc2lnbmVkIGxvbmcgX191bnVzZWQxOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfbXRpbWU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz dF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAgICB1bnNpZ25l ZCBsb25nIF9fdW51c2VkNDsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNTsKfTsKCgoK CnN0cnVjdCBzdGF0NjQgewogICAgICAgIHVuc2lnbmVkIHNob3J0IHN0X2RldjsKICAgICAgICB1 bnNpZ25lZCBjaGFyIF9fcGFkMFsxMF07CgoKICAgICAgICB1bnNpZ25lZCBsb25nIF9fc3RfaW5v OwoKICAgICAgICB1bnNpZ25lZCBpbnQgc3RfbW9kZTsKICAgICAgICB1bnNpZ25lZCBpbnQgc3Rf bmxpbms7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RfdWlkOwogICAgICAgIHVuc2lnbmVkIGxv bmcgc3RfZ2lkOwoKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzdF9yZGV2OwogICAgICAgIHVuc2ln bmVkIGNoYXIgX19wYWQzWzEwXTsKCiAgICAgICAgbG9uZyBsb25nIHN0X3NpemU7CiAgICAgICAg dW5zaWduZWQgbG9uZyBzdF9ibGtzaXplOwoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0X2Jsb2Nr czsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNDsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBz dF9hdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNTsKCiAgICAgICAgdW5zaWduZWQg bG9uZyBzdF9tdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNjsKCiAgICAgICAgdW5z aWduZWQgbG9uZyBzdF9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fcGFkNzsKCiAgICAg ICAgdW5zaWduZWQgbG9uZyBsb25nIHN0X2lubzsKfTsKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9zdGF0LmgiIDIKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2NhY2hlLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv ZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N0ZGRlZi5o IiAxCiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQoKCgoKCgoK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgOSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIgMQojIDEwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMgoKCgoKCmV4dGVybiBjaGFy ICogX19fc3RydG9rOwpleHRlcm4gY2hhciAqIHN0cnBicmsoY29uc3QgY2hhciAqLGNvbnN0IGNo YXIgKik7CmV4dGVybiBjaGFyICogc3RydG9rKGNoYXIgKixjb25zdCBjaGFyICopOwpleHRlcm4g Y2hhciAqIHN0cnNlcChjaGFyICoqLGNvbnN0IGNoYXIgKik7CmV4dGVybiBfX2tlcm5lbF9zaXpl X3Qgc3Ryc3BuKGNvbnN0IGNoYXIgKixjb25zdCBjaGFyICopOwoKCgoKCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvYXNtL3N0cmluZy5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvYXNtL3N0cmluZy5oIiAyCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSBjaGFyICogc3RyY3B5KGNoYXIg KiBkZXN0LGNvbnN0IGNoYXIgKnNyYykKewppbnQgZDAsIGQxLCBkMjsKX19hc21fXyBfX3ZvbGF0 aWxlX18oCiAgICAgICAgIjE6XHRsb2RzYlxuXHQiCiAgICAgICAgInN0b3NiXG5cdCIKICAgICAg ICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiIgogICAgICAgIDogIj0mUyIg KGQwKSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgIDoiMCIgKHNyYyksIjEiIChkZXN0 KSA6ICJtZW1vcnkiKTsKcmV0dXJuIGRlc3Q7Cn0KCgpzdGF0aWMgaW5saW5lIGNoYXIgKiBzdHJu Y3B5KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIgKnNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBk MSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGRlY2wgJTJcblx0 IgogICAgICAgICJqcyAyZlxuXHQiCiAgICAgICAgImxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jc blx0IgogICAgICAgICJ0ZXN0YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0Igog ICAgICAgICJyZXBcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAgICIyOiIKICAgICAgICA6 ICI9JlMiIChkMCksICI9JkQiIChkMSksICI9JmMiIChkMiksICI9JmEiIChkMykKICAgICAgICA6 IjAiIChzcmMpLCIxIiAoZGVzdCksIjIiIChjb3VudCkgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0 Owp9CgoKc3RhdGljIGlubGluZSBjaGFyICogc3RyY2F0KGNoYXIgKiBkZXN0LGNvbnN0IGNoYXIg KiBzcmMpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAg ICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRlY2wgJTFcbiIKICAg ICAgICAiMTpcdGxvZHNiXG5cdCIKICAgICAgICAic3Rvc2Jcblx0IgogICAgICAgICJ0ZXN0YiAl JWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWIiCiAgICAgICAgOiAiPSZTIiAoZDApLCAiPSZE IiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIgKHNyYyksICIxIiAo ZGVzdCksICIyIiAoMCksICIzIiAoMHhmZmZmZmZmZik6Im1lbW9yeSIpOwpyZXR1cm4gZGVzdDsK fQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cm5jYXQoY2hhciAqIGRlc3QsY29uc3QgY2hhciAq IHNyYyxzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMSwgZDIsIGQzOwpfX2FzbV9fIF9fdm9sYXRp bGVfXygKICAgICAgICAicmVwbmVcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImRl Y2wgJTFcblx0IgogICAgICAgICJtb3ZsICU4LCUzXG4iCiAgICAgICAgIjE6XHRkZWNsICUzXG5c dCIKICAgICAgICAianMgMmZcblx0IgogICAgICAgICJsb2RzYlxuXHQiCiAgICAgICAgInN0b3Ni XG5cdCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG4iCiAg ICAgICAgIjI6XHR4b3JsICUyLCUyXG5cdCIKICAgICAgICAic3Rvc2IiCiAgICAgICAgOiAiPSZT IiAoZDApLCAiPSZEIiAoZDEpLCAiPSZhIiAoZDIpLCAiPSZjIiAoZDMpCiAgICAgICAgOiAiMCIg KHNyYyksIjEiIChkZXN0KSwiMiIgKDApLCIzIiAoMHhmZmZmZmZmZiksICJnIiAoY291bnQpCiAg ICAgICAgOiAibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKc3RhdGljIGlubGluZSBpbnQgc3Ry Y21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3QpCnsKaW50IGQwLCBkMTsKcmVnaXN0 ZXIgaW50IF9fcmVzOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAiMTpcdGxvZHNiXG5c dCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJqbmUgMmZcblx0IgogICAgICAgICJ0ZXN0 YiAlJWFsLCUlYWxcblx0IgogICAgICAgICJqbmUgMWJcblx0IgogICAgICAgICJ4b3JsICUlZWF4 LCUlZWF4XG5cdCIKICAgICAgICAiam1wIDNmXG4iCiAgICAgICAgIjI6XHRzYmJsICUlZWF4LCUl ZWF4XG5cdCIKICAgICAgICAib3JiICQxLCUlYWxcbiIKICAgICAgICAiMzoiCiAgICAgICAgOiI9 YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSwgIj0mRCIgKGQxKQogICAgICAgICAgICAgICAgICAgICA6 IjEiIChjcyksIjIiIChjdCkpOwpyZXR1cm4gX19yZXM7Cn0KCgpzdGF0aWMgaW5saW5lIGludCBz dHJuY21wKGNvbnN0IGNoYXIgKiBjcyxjb25zdCBjaGFyICogY3Qsc2l6ZV90IGNvdW50KQp7CnJl Z2lzdGVyIGludCBfX3JlczsKaW50IGQwLCBkMSwgZDI7Cl9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICIxOlx0ZGVjbCAlM1xuXHQiCiAgICAgICAgImpzIDJmXG5cdCIKICAgICAgICAibG9k c2Jcblx0IgogICAgICAgICJzY2FzYlxuXHQiCiAgICAgICAgImpuZSAzZlxuXHQiCiAgICAgICAg InRlc3RiICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIyOlx0eG9y bCAlJWVheCwlJWVheFxuXHQiCiAgICAgICAgImptcCA0ZlxuIgogICAgICAgICIzOlx0c2JibCAl JWVheCwlJWVheFxuXHQiCiAgICAgICAgIm9yYiAkMSwlJWFsXG4iCiAgICAgICAgIjQ6IgogICAg ICAgICAgICAgICAgICAgICA6Ij1hIiAoX19yZXMpLCAiPSZTIiAoZDApLCAiPSZEIiAoZDEpLCAi PSZjIiAoZDIpCiAgICAgICAgICAgICAgICAgICAgIDoiMSIgKGNzKSwiMiIgKGN0KSwiMyIgKGNv dW50KSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cmNocihjb25z dCBjaGFyICogcywgaW50IGMpCnsKaW50IGQwOwpyZWdpc3RlciBjaGFyICogX19yZXM7Cl9fYXNt X18gX192b2xhdGlsZV9fKAogICAgICAgICJtb3ZiICUlYWwsJSVhaFxuIgogICAgICAgICIxOlx0 bG9kc2Jcblx0IgogICAgICAgICJjbXBiICUlYWgsJSVhbFxuXHQiCiAgICAgICAgImplIDJmXG5c dCIKICAgICAgICAidGVzdGIgJSVhbCwlJWFsXG5cdCIKICAgICAgICAiam5lIDFiXG5cdCIKICAg ICAgICAibW92bCAkMSwlMVxuIgogICAgICAgICIyOlx0bW92bCAlMSwlMFxuXHQiCiAgICAgICAg ImRlY2wgJTAiCiAgICAgICAgOiI9YSIgKF9fcmVzKSwgIj0mUyIgKGQwKSA6ICIxIiAocyksIjAi IChjKSk7CnJldHVybiBfX3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgY2hhciAqIHN0cnJjaHIoY29u c3QgY2hhciAqIHMsIGludCBjKQp7CmludCBkMCwgZDE7CnJlZ2lzdGVyIGNoYXIgKiBfX3JlczsK X19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgIm1vdmIgJSVhbCwlJWFoXG4iCiAgICAgICAg IjE6XHRsb2RzYlxuXHQiCiAgICAgICAgImNtcGIgJSVhaCwlJWFsXG5cdCIKICAgICAgICAiam5l IDJmXG5cdCIKICAgICAgICAibGVhbCAtMSglJWVzaSksJTBcbiIKICAgICAgICAiMjpcdHRlc3Ri ICUlYWwsJSVhbFxuXHQiCiAgICAgICAgImpuZSAxYiIKICAgICAgICA6Ij1nIiAoX19yZXMpLCAi PSZTIiAoZDApLCAiPSZhIiAoZDEpIDoiMCIgKDApLCIxIiAocyksIjIiIChjKSk7CnJldHVybiBf X3JlczsKfQoKCnN0YXRpYyBpbmxpbmUgc2l6ZV90IHN0cmxlbihjb25zdCBjaGFyICogcykKewpp bnQgZDA7CnJlZ2lzdGVyIGludCBfX3JlczsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAg InJlcG5lXG5cdCIKICAgICAgICAic2Nhc2Jcblx0IgogICAgICAgICJub3RsICUwXG5cdCIKICAg ICAgICAiZGVjbCAlMCIKICAgICAgICA6Ij1jIiAoX19yZXMpLCAiPSZEIiAoZDApIDoiMSIgKHMp LCJhIiAoMCksICIwIiAoMHhmZmZmZmZmZikpOwpyZXR1cm4gX19yZXM7Cn0KCnN0YXRpYyBpbmxp bmUgdm9pZCAqIF9fbWVtY3B5KHZvaWQgKiB0bywgY29uc3Qgdm9pZCAqIGZyb20sIHNpemVfdCBu KQp7CmludCBkMCwgZDEsIGQyOwpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwIDsg bW92c2xcblx0IgogICAgICAgICJ0ZXN0YiAkMiwlYjRcblx0IgogICAgICAgICJqZSAxZlxuXHQi CiAgICAgICAgIm1vdnN3XG4iCiAgICAgICAgIjE6XHR0ZXN0YiAkMSwlYjRcblx0IgogICAgICAg ICJqZSAyZlxuXHQiCiAgICAgICAgIm1vdnNiXG4iCiAgICAgICAgIjI6IgogICAgICAgIDogIj0m YyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKQogICAgICAgIDoiMCIgKG4vNCksICJxIiAo biksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcpIGZyb20pCiAgICAgICAgOiAibWVtb3J5Iik7 CnJldHVybiAodG8pOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogX19jb25zdGFudF9tZW1j cHkodm9pZCAqIHRvLCBjb25zdCB2b2lkICogZnJvbSwgc2l6ZV90IG4pCnsKICAgICAgICBzd2l0 Y2ggKG4pIHsKICAgICAgICAgICAgICAgIGNhc2UgMDoKICAgICAgICAgICAgICAgICAgICAgICAg cmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICAgICAgICAgICAg ICAqKHVuc2lnbmVkIGNoYXIgKil0byA9ICooY29uc3QgdW5zaWduZWQgY2hhciAqKWZyb207CiAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBzaG9ydCAqKXRvID0gKihjb25zdCB1 bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0bzsK ICAgICAgICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25l ZCBzaG9ydCAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBzaG9ydCAqKWZyb207CiAgICAgICAgICAg ICAgICAgICAgICAgICooMisodW5zaWduZWQgY2hhciAqKXRvKSA9ICooMisoY29uc3QgdW5zaWdu ZWQgY2hhciAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdG87CiAgICAg ICAgICAgICAgICBjYXNlIDQ6CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9u ZyAqKXRvID0gKihjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAg ICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSA2OgogICAgICAgICAgICAgICAg ICAgICAgICAqKHVuc2lnbmVkIGxvbmcgKil0byA9ICooY29uc3QgdW5zaWduZWQgbG9uZyAqKWZy b207CiAgICAgICAgICAgICAgICAgICAgICAgICooMisodW5zaWduZWQgc2hvcnQgKil0bykgPSAq KDIrKGNvbnN0IHVuc2lnbmVkIHNob3J0ICopZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAg IHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgODoKICAgICAgICAgICAgICAgICAgICAg ICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwog ICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNv bnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJu IHRvOwogICAgICAgICAgICAgICAgY2FzZSAxMjoKICAgICAgICAgICAgICAgICAgICAgICAgKih1 bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tOwogICAgICAg ICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDErKGNvbnN0IHVu c2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25l ZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiB0bzsKICAgICAgICAgICAgICAgIGNhc2UgMTY6CiAgICAg ICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgbG9uZyAqKXRvID0gKihjb25zdCB1bnNpZ25l ZCBsb25nICopZnJvbTsKICAgICAgICAgICAgICAgICAgICAgICAgKigxKyh1bnNpZ25lZCBsb25n ICopdG8pID0gKigxKyhjb25zdCB1bnNpZ25lZCBsb25nICopZnJvbSk7CiAgICAgICAgICAgICAg ICAgICAgICAgICooMisodW5zaWduZWQgbG9uZyAqKXRvKSA9ICooMisoY29uc3QgdW5zaWduZWQg bG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAgICAqKDMrKHVuc2lnbmVkIGxvbmcg Kil0bykgPSAqKDMrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgICAgICAgICAgY2FzZSAyMDoKICAgICAgICAgICAg ICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopdG8gPSAqKGNvbnN0IHVuc2lnbmVkIGxvbmcg Kilmcm9tOwogICAgICAgICAgICAgICAgICAgICAgICAqKDErKHVuc2lnbmVkIGxvbmcgKil0bykg PSAqKDErKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilmcm9tKTsKICAgICAgICAgICAgICAgICAgICAg ICAgKigyKyh1bnNpZ25lZCBsb25nICopdG8pID0gKigyKyhjb25zdCB1bnNpZ25lZCBsb25nICop ZnJvbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICooMysodW5zaWduZWQgbG9uZyAqKXRvKSA9 ICooMysoY29uc3QgdW5zaWduZWQgbG9uZyAqKWZyb20pOwogICAgICAgICAgICAgICAgICAgICAg ICAqKDQrKHVuc2lnbmVkIGxvbmcgKil0bykgPSAqKDQrKGNvbnN0IHVuc2lnbmVkIGxvbmcgKilm cm9tKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRvOwogICAgICAgIH0KCgoKCgoK CnsKICAgICAgICBpbnQgZDAsIGQxLCBkMjsKICAgICAgICBzd2l0Y2ggKG4gJSA0KSB7CiAgICAg ICAgICAgICAgICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICIi IDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80KSwiMSIgKChs b25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4gdG87CiAgICAg ICAgICAgICAgICBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgbW92c2wiICJc blx0bW92c2IiIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6ICIwIiAobi80 KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7OyByZXR1cm4g dG87CiAgICAgICAgICAgICAgICBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsg bW92c2wiICJcblx0bW92c3ciIDogIj0mYyIgKGQwKSwgIj0mRCIgKGQxKSwgIj0mUyIgKGQyKSA6 ICIwIiAobi80KSwiMSIgKChsb25nKSB0byksIjIiICgobG9uZykgZnJvbSkgOiAibWVtb3J5Iik7 OyByZXR1cm4gdG87CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVf XyggInJlcCA7IG1vdnNsIiAiXG5cdG1vdnN3XG5cdG1vdnNiIiA6ICI9JmMiIChkMCksICI9JkQi IChkMSksICI9JlMiIChkMikgOiAiMCIgKG4vNCksIjEiICgobG9uZykgdG8pLCIyIiAoKGxvbmcp IGZyb20pIDogIm1lbW9yeSIpOzsgcmV0dXJuIHRvOwogICAgICAgIH0KfQoKCn0KCgoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9tbXguaCIgMQojIDI5MSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3N0cmluZy5oIiAyCgoKCgoKc3RhdGljIGlubGlu ZSB2b2lkICogX19jb25zdGFudF9tZW1jcHkzZCh2b2lkICogdG8sIGNvbnN0IHZvaWQgKiBmcm9t LCBzaXplX3QgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA8IDUxMikKICAgICAgICAgICAgICAgIHJl dHVybiBfX2NvbnN0YW50X21lbWNweSh0bywgZnJvbSwgbGVuKTsKICAgICAgICByZXR1cm4gX21t eF9tZW1jcHkodG8sIGZyb20sIGxlbik7Cn0KCnN0YXRpYyBfX2lubGluZV9fIHZvaWQgKl9fbWVt Y3B5M2Qodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHNpemVfdCBsZW4pCnsKICAgICAgICBp ZiAobGVuIDwgNTEyKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fbWVtY3B5KHRvLCBmcm9tLCBs ZW4pOwogICAgICAgIHJldHVybiBfbW14X21lbWNweSh0bywgZnJvbSwgbGVuKTsKfQojIDMzNSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3N0cmluZy5oIgpleHRlcm4gdm9pZCBf X3N0cnVjdF9jcHlfYnVnICh2b2lkKTsKIyAzNDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSB2b2lkICogbWVtbW92ZSh2b2lkICogZGVz dCxjb25zdCB2b2lkICogc3JjLCBzaXplX3QgbikKewppbnQgZDAsIGQxLCBkMjsKaWYgKGRlc3Q8 c3JjKQpfX2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAicmVwXG5cdCIKICAgICAgICAibW92 c2IiCiAgICAgICAgOiAiPSZjIiAoZDApLCAiPSZTIiAoZDEpLCAiPSZEIiAoZDIpCiAgICAgICAg OiIwIiAobiksIjEiIChzcmMpLCIyIiAoZGVzdCkKICAgICAgICA6ICJtZW1vcnkiKTsKZWxzZQpf X2FzbV9fIF9fdm9sYXRpbGVfXygKICAgICAgICAic3RkXG5cdCIKICAgICAgICAicmVwXG5cdCIK ICAgICAgICAibW92c2Jcblx0IgogICAgICAgICJjbGQiCiAgICAgICAgOiAiPSZjIiAoZDApLCAi PSZTIiAoZDEpLCAiPSZEIiAoZDIpCiAgICAgICAgOiIwIiAobiksCiAgICAgICAgICIxIiAobi0x Kyhjb25zdCBjaGFyICopc3JjKSwKICAgICAgICAgIjIiIChuLTErKGNoYXIgKilkZXN0KQogICAg ICAgIDoibWVtb3J5Iik7CnJldHVybiBkZXN0Owp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiBt ZW1jaHIoY29uc3Qgdm9pZCAqIGNzLGludCBjLHNpemVfdCBjb3VudCkKewppbnQgZDA7CnJlZ2lz dGVyIHZvaWQgKiBfX3JlczsKaWYgKCFjb3VudCkKICAgICAgICByZXR1cm4gKCh2b2lkICopMCk7 Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBuZVxuXHQiCiAgICAgICAgInNjYXNi XG5cdCIKICAgICAgICAiamUgMWZcblx0IgogICAgICAgICJtb3ZsICQxLCUwXG4iCiAgICAgICAg IjE6XHRkZWNsICUwIgogICAgICAgIDoiPUQiIChfX3JlcyksICI9JmMiIChkMCkgOiAiYSIgKGMp LCIwIiAoY3MpLCIxIiAoY291bnQpKTsKcmV0dXJuIF9fcmVzOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgKiBfX21lbXNldF9nZW5lcmljKHZvaWQgKiBzLCBjaGFyIGMsc2l6ZV90IGNvdW50KQp7Cmlu dCBkMCwgZDE7Cl9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICJyZXBcblx0IgogICAgICAg ICJzdG9zYiIKICAgICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkKICAgICAgICA6ImEiIChj KSwiMSIgKHMpLCIwIiAoY291bnQpCiAgICAgICAgOiJtZW1vcnkiKTsKcmV0dXJuIHM7Cn0KIyA0 MDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlu bGluZSB2b2lkICogX19jb25zdGFudF9jX21lbXNldCh2b2lkICogcywgdW5zaWduZWQgbG9uZyBj LCBzaXplX3QgY291bnQpCnsKaW50IGQwLCBkMTsKX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAg ICAgInJlcCA7IHN0b3NsXG5cdCIKICAgICAgICAidGVzdGIgJDIsJWIzXG5cdCIKICAgICAgICAi amUgMWZcblx0IgogICAgICAgICJzdG9zd1xuIgogICAgICAgICIxOlx0dGVzdGIgJDEsJWIzXG5c dCIKICAgICAgICAiamUgMmZcblx0IgogICAgICAgICJzdG9zYlxuIgogICAgICAgICIyOiIKICAg ICAgICA6ICI9JmMiIChkMCksICI9JkQiIChkMSkKICAgICAgICA6ImEiIChjKSwgInEiIChjb3Vu dCksICIwIiAoY291bnQvNCksICIxIiAoKGxvbmcpIHMpCiAgICAgICAgOiJtZW1vcnkiKTsKcmV0 dXJuIChzKTsKfQoKCgpzdGF0aWMgaW5saW5lIHNpemVfdCBzdHJubGVuKGNvbnN0IGNoYXIgKiBz LCBzaXplX3QgY291bnQpCnsKaW50IGQwOwpyZWdpc3RlciBpbnQgX19yZXM7Cl9fYXNtX18gX192 b2xhdGlsZV9fKAogICAgICAgICJtb3ZsICUyLCUwXG5cdCIKICAgICAgICAiam1wIDJmXG4iCiAg ICAgICAgIjE6XHRjbXBiICQwLCglMClcblx0IgogICAgICAgICJqZSAzZlxuXHQiCiAgICAgICAg ImluY2wgJTBcbiIKICAgICAgICAiMjpcdGRlY2wgJTFcblx0IgogICAgICAgICJjbXBsICQtMSwl MVxuXHQiCiAgICAgICAgImpuZSAxYlxuIgogICAgICAgICIzOlx0c3VibCAlMiwlMCIKICAgICAg ICA6Ij1hIiAoX19yZXMpLCAiPSZkIiAoZDApCiAgICAgICAgOiJjIiAocyksIjEiIChjb3VudCkp OwpyZXR1cm4gX19yZXM7Cn0KCgoKCmV4dGVybiBjaGFyICpzdHJzdHIoY29uc3QgY2hhciAqY3Ms IGNvbnN0IGNoYXIgKmN0KTsKCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgKiBfX2NvbnN0YW50X2Nf YW5kX2NvdW50X21lbXNldCh2b2lkICogcywgdW5zaWduZWQgbG9uZyBwYXR0ZXJuLCBzaXplX3Qg Y291bnQpCnsKICAgICAgICBzd2l0Y2ggKGNvdW50KSB7CiAgICAgICAgICAgICAgICBjYXNlIDA6 CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgICAgICAgICAgY2FzZSAx OgogICAgICAgICAgICAgICAgICAgICAgICAqKHVuc2lnbmVkIGNoYXIgKilzID0gcGF0dGVybjsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDI6 CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgc2hvcnQgKilzID0gcGF0dGVybjsK ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDM6 CiAgICAgICAgICAgICAgICAgICAgICAgICoodW5zaWduZWQgc2hvcnQgKilzID0gcGF0dGVybjsK ICAgICAgICAgICAgICAgICAgICAgICAgKigyKyh1bnNpZ25lZCBjaGFyICopcykgPSBwYXR0ZXJu OwogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gczsKICAgICAgICAgICAgICAgIGNhc2Ug NDoKICAgICAgICAgICAgICAgICAgICAgICAgKih1bnNpZ25lZCBsb25nICopcyA9IHBhdHRlcm47 CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzOwogICAgICAgIH0KCgoKCgoKCnsKICAg ICAgICBpbnQgZDAsIGQxOwogICAgICAgIHN3aXRjaCAoY291bnQgJSA0KSB7CiAgICAgICAgICAg ICAgICBjYXNlIDA6IF9fYXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICIiIDogIj0m YyIgKGQwKSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIgKChs b25nKSBzKSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDE6IF9f YXNtX18gX192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICJcblx0c3Rvc2IiIDogIj0mYyIgKGQw KSwgIj0mRCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIgKChsb25nKSBz KSA6ICJtZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBjYXNlIDI6IF9fYXNtX18g X192b2xhdGlsZV9fKCAicmVwIDsgc3Rvc2wiICJcblx0c3Rvc3ciIDogIj0mYyIgKGQwKSwgIj0m RCIgKGQxKSA6ICJhIiAocGF0dGVybiksIjAiIChjb3VudC80KSwiMSIgKChsb25nKSBzKSA6ICJt ZW1vcnkiKTsgcmV0dXJuIHM7CiAgICAgICAgICAgICAgICBkZWZhdWx0OiBfX2FzbV9fIF9fdm9s YXRpbGVfXyggInJlcCA7IHN0b3NsIiAiXG5cdHN0b3N3XG5cdHN0b3NiIiA6ICI9JmMiIChkMCks ICI9JkQiIChkMSkgOiAiYSIgKHBhdHRlcm4pLCIwIiAoY291bnQvNCksIjEiICgobG9uZykgcykg OiAibWVtb3J5Iik7IHJldHVybiBzOwogICAgICAgIH0KfQoKCn0KIyA1MTUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zdHJpbmcuaCIKc3RhdGljIGlubGluZSB2b2lkICogbWVt c2Nhbih2b2lkICogYWRkciwgaW50IGMsIHNpemVfdCBzaXplKQp7CiAgICAgICAgaWYgKCFzaXpl KQogICAgICAgICAgICAgICAgcmV0dXJuIGFkZHI7CiAgICAgICAgX19hc21fXygicmVwbno7IHNj YXNiXG5cdCIKICAgICAgICAgICAgICAgICJqbnogMWZcblx0IgogICAgICAgICAgICAgICAgImRl YyAlJWVkaVxuIgogICAgICAgICAgICAgICAgIjE6IgogICAgICAgICAgICAgICAgOiAiPUQiIChh ZGRyKSwgIj1jIiAoc2l6ZSkKICAgICAgICAgICAgICAgIDogIjAiIChhZGRyKSwgIjEiIChzaXpl KSwgImEiIChjKSk7CiAgICAgICAgcmV0dXJuIGFkZHI7Cn0KIyAyNiAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiIDIKIyA0NiAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvc3RyaW5nLmgiCmV4dGVybiBpbnQgc3RybmljbXAoY29uc3QgY2hh ciAqLCBjb25zdCBjaGFyICosIF9fa2VybmVsX3NpemVfdCk7CiMgNzcgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIgpleHRlcm4gaW50IF9fYnVpbHRpbl9tZW1j bXAoY29uc3Qgdm9pZCAqLGNvbnN0IHZvaWQgKixfX2tlcm5lbF9zaXplX3QpOwojIDI0ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDI2ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL2JpdG9wcy5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL2JpdG9wcy5oIiAyCiMgMzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2Fz bS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBzZXRfYml0KGludCBuciwgdm9sYXRp bGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIKICAgICAg ICAgICAgICAgICJidHNsICUxLCUwIgogICAgICAgICAgICAgICAgOiI9bSIgKCgqKHZvbGF0aWxl IGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpKTsKfQojIDUzICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9f IHZvaWQgX19zZXRfYml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBf X2FzbV9fKAogICAgICAgICAgICAgICAgImJ0c2wgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1t IiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikp Owp9CiMgNzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3Rh dGljIF9faW5saW5lX18gdm9pZCBjbGVhcl9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRk cikKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAgICAgImJ0 cmwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRy KSkKICAgICAgICAgICAgICAgIDoiSXIiIChucikpOwp9CiMgOTAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gdm9pZCBfX2NoYW5n ZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIF9fYXNtX18gX192 b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImJ0Y2wgJTEsJTAiCiAgICAgICAgICAgICAgICA6 Ij1tIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSkKICAgICAgICAgICAgICAgIDoiSXIiIChu cikpOwp9CiMgMTA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYml0b3BzLmgi CnN0YXRpYyBfX2lubGluZV9fIHZvaWQgY2hhbmdlX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQg KiBhZGRyKQp7CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oICIiCiAgICAgICAgICAgICAg ICAiYnRjbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPW0iICgoKih2b2xhdGlsZSBsb25nICop IGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7Cn0KIyAxMjMgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHRl c3RfYW5kX3NldF9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGlu dCBvbGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAg ICAgImJ0c2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRi aXQpLCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6Ikly IiAobnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAxNDMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18g aW50IF9fdGVzdF9hbmRfc2V0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAg ICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJidHNs ICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0i ICgoKih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7 CiAgICAgICAgcmV0dXJuIG9sZGJpdDsKfQojIDE2MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgdGVzdF9hbmRfY2xlYXJf Yml0KGludCBuciwgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsKICAgICAgICBpbnQgb2xkYml0OwoK ICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIiIKICAgICAgICAgICAgICAgICJidHJsICUy LCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0iICgo Kih2b2xhdGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSA6ICJt ZW1vcnkiKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMTgyICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3Rf YW5kX2NsZWFyX2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAgICAgICAgaW50 IG9sZGJpdDsKCiAgICAgICAgX19hc21fXygKICAgICAgICAgICAgICAgICJidHJsICUyLCUxXG5c dHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAob2xkYml0KSwiPW0iICgoKih2b2xh dGlsZSBsb25nICopIGFkZHIpKQogICAgICAgICAgICAgICAgOiJJciIgKG5yKSk7CiAgICAgICAg cmV0dXJuIG9sZGJpdDsKfQoKCnN0YXRpYyBfX2lubGluZV9fIGludCBfX3Rlc3RfYW5kX2NoYW5n ZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBvbGRiaXQ7 CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgImJ0Y2wgJTIs JTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQpLCI9bSIgKCgq KHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAobnIpIDogIm1l bW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAyMTMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50IHRlc3RfYW5k X2NoYW5nZV9iaXQoaW50IG5yLCB2b2xhdGlsZSB2b2lkICogYWRkcikKewogICAgICAgIGludCBv bGRiaXQ7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCAiIgogICAgICAgICAgICAgICAg ImJ0Y2wgJTIsJTFcblx0c2JibCAlMCwlMCIKICAgICAgICAgICAgICAgIDoiPXIiIChvbGRiaXQp LCI9bSIgKCgqKHZvbGF0aWxlIGxvbmcgKikgYWRkcikpCiAgICAgICAgICAgICAgICA6IklyIiAo bnIpIDogIm1lbW9yeSIpOwogICAgICAgIHJldHVybiBvbGRiaXQ7Cn0KIyAyMzMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMuaCIKc3RhdGljIF9faW5saW5lX18gaW50 IGNvbnN0YW50X3Rlc3RfYml0KGludCBuciwgY29uc3Qgdm9sYXRpbGUgdm9pZCAqIGFkZHIpCnsK ICAgICAgICByZXR1cm4gKCgxVUwgPDwgKG5yICYgMzEpKSAmICgoKGNvbnN0IHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSBhZGRyKVtuciA+PiA1XSkpICE9IDA7Cn0KCnN0YXRpYyBfX2lubGluZV9f IGludCB2YXJpYWJsZV90ZXN0X2JpdChpbnQgbnIsIHZvbGF0aWxlIHZvaWQgKiBhZGRyKQp7CiAg ICAgICAgaW50IG9sZGJpdDsKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAg ICAgICAgICAiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6Ij1yIiAo b2xkYml0KQogICAgICAgICAgICAgICAgOiJtIiAoKCoodm9sYXRpbGUgbG9uZyAqKSBhZGRyKSks IklyIiAobnIpKTsKICAgICAgICByZXR1cm4gb2xkYml0Owp9CiMgMjYyICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9hc20vYml0b3BzLmgiCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5k X2ZpcnN0X3plcm9fYml0KHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBzaXplKQp7CiAgICAgICAgaW50 IGQwLCBkMSwgZDI7CiAgICAgICAgaW50IHJlczsKCiAgICAgICAgaWYgKCFzaXplKQogICAgICAg ICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAg ICAgICAgICAgIm1vdmwgJC0xLCUlZWF4XG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUlZWR4 LCUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICJyZXBlOyBzY2FzbFxuXHQiCiAgICAgICAgICAg ICAgICAiamUgMWZcblx0IgogICAgICAgICAgICAgICAgInhvcmwgLTQoJSVlZGkpLCUlZWF4XG5c dCIKICAgICAgICAgICAgICAgICJzdWJsICQ0LCUlZWRpXG5cdCIKICAgICAgICAgICAgICAgICJi c2ZsICUlZWF4LCUlZWR4XG4iCiAgICAgICAgICAgICAgICAiMTpcdHN1YmwgJSVlYngsJSVlZGlc blx0IgogICAgICAgICAgICAgICAgInNobGwgJDMsJSVlZGlcblx0IgogICAgICAgICAgICAgICAg ImFkZGwgJSVlZGksJSVlZHgiCiAgICAgICAgICAgICAgICA6Ij1kIiAocmVzKSwgIj0mYyIgKGQw KSwgIj0mRCIgKGQxKSwgIj0mYSIgKGQyKQogICAgICAgICAgICAgICAgOiIxIiAoKHNpemUgKyAz MSkgPj4gNSksICIyIiAoYWRkciksICJiIiAoYWRkcikpOwogICAgICAgIHJldHVybiByZXM7Cn0K CgoKCgoKCnN0YXRpYyBfX2lubGluZV9fIGludCBmaW5kX25leHRfemVyb19iaXQgKHZvaWQgKiBh ZGRyLCBpbnQgc2l6ZSwgaW50IG9mZnNldCkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgKiBwID0g KCh1bnNpZ25lZCBsb25nICopIGFkZHIpICsgKG9mZnNldCA+PiA1KTsKICAgICAgICBpbnQgc2V0 ID0gMCwgYml0ID0gb2Zmc2V0ICYgMzEsIHJlczsKCiAgICAgICAgaWYgKGJpdCkgewoKCgogICAg ICAgICAgICAgICAgX19hc21fXygiYnNmbCAlMSwlMFxuXHQiCiAgICAgICAgICAgICAgICAgICAg ICAgICJqbmUgMWZcblx0IgogICAgICAgICAgICAgICAgICAgICAgICAibW92bCAkMzIsICUwXG4i CiAgICAgICAgICAgICAgICAgICAgICAgICIxOiIKICAgICAgICAgICAgICAgICAgICAgICAgOiAi PXIiIChzZXQpCiAgICAgICAgICAgICAgICAgICAgICAgIDogInIiICh+KCpwID4+IGJpdCkpKTsK ICAgICAgICAgICAgICAgIGlmIChzZXQgPCAoMzIgLSBiaXQpKQogICAgICAgICAgICAgICAgICAg ICAgICByZXR1cm4gc2V0ICsgb2Zmc2V0OwogICAgICAgICAgICAgICAgc2V0ID0gMzIgLSBiaXQ7 CiAgICAgICAgICAgICAgICBwKys7CiAgICAgICAgfQoKCgogICAgICAgIHJlcyA9IGZpbmRfZmly c3RfemVyb19iaXQgKHAsIHNpemUgLSAzMiAqIChwIC0gKHVuc2lnbmVkIGxvbmcgKikgYWRkcikp OwogICAgICAgIHJldHVybiAob2Zmc2V0ICsgc2V0ICsgcmVzKTsKfQoKCgoKCgoKc3RhdGljIF9f aW5saW5lX18gdW5zaWduZWQgbG9uZyBmZnoodW5zaWduZWQgbG9uZyB3b3JkKQp7CiAgICAgICAg X19hc21fXygiYnNmbCAlMSwlMCIKICAgICAgICAgICAgICAgIDoiPXIiICh3b3JkKQogICAgICAg ICAgICAgICAgOiJyIiAofndvcmQpKTsKICAgICAgICByZXR1cm4gd29yZDsKfQojIDM0MyAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2JpdG9wcy5oIgpzdGF0aWMgX19pbmxpbmVf XyBpbnQgZmZzKGludCB4KQp7CiAgICAgICAgaW50IHI7CgogICAgICAgIF9fYXNtX18oImJzZmwg JTEsJTBcblx0IgogICAgICAgICAgICAgICAgImpueiAxZlxuXHQiCiAgICAgICAgICAgICAgICAi bW92bCAkLTEsJTBcbiIKICAgICAgICAgICAgICAgICIxOiIgOiAiPXIiIChyKSA6ICJnIiAoeCkp OwogICAgICAgIHJldHVybiByKzE7Cn0KIyAyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvZnMuaCIgMgoKc3RydWN0IHBvbGxfdGFibGVfc3RydWN0OwojIDUwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgZmlsZXNfc3RhdF9zdHJ1 Y3QgewogICAgICAgIGludCBucl9maWxlczsKICAgICAgICBpbnQgbnJfZnJlZV9maWxlczsKICAg ICAgICBpbnQgbWF4X2ZpbGVzOwp9OwpleHRlcm4gc3RydWN0IGZpbGVzX3N0YXRfc3RydWN0IGZp bGVzX3N0YXQ7CgpzdHJ1Y3QgaW5vZGVzX3N0YXRfdCB7CiAgICAgICAgaW50IG5yX2lub2RlczsK ICAgICAgICBpbnQgbnJfdW51c2VkOwogICAgICAgIGludCBkdW1teVs1XTsKfTsKZXh0ZXJuIHN0 cnVjdCBpbm9kZXNfc3RhdF90IGlub2Rlc19zdGF0OwoKZXh0ZXJuIGludCBsZWFzZXNfZW5hYmxl LCBkaXJfbm90aWZ5X2VuYWJsZSwgbGVhc2VfYnJlYWtfdGltZTsKIyAxOTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3NlbWFwaG9yZS5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2FzbS9zZW1hcGhvcmUuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9h c20vc3lzdGVtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0 ZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2tlcm5lbC5o IiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3N5c3RlbS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NlZ21lbnQuaCIgMQojIDcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIiAxCiMgMTEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2JpdG9wcy5oIgpzdGF0aWMgaW5saW5lIGludCBnZW5l cmljX2ZmcyhpbnQgeCkKewogICAgICAgIGludCByID0gMTsKCiAgICAgICAgaWYgKCF4KQogICAg ICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKCEoeCAmIDB4ZmZmZikpIHsKICAgICAg ICAgICAgICAgIHggPj49IDE2OwogICAgICAgICAgICAgICAgciArPSAxNjsKICAgICAgICB9CiAg ICAgICAgaWYgKCEoeCAmIDB4ZmYpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSA4OwogICAgICAg ICAgICAgICAgciArPSA4OwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMHhmKSkgewogICAg ICAgICAgICAgICAgeCA+Pj0gNDsKICAgICAgICAgICAgICAgIHIgKz0gNDsKICAgICAgICB9CiAg ICAgICAgaWYgKCEoeCAmIDMpKSB7CiAgICAgICAgICAgICAgICB4ID4+PSAyOwogICAgICAgICAg ICAgICAgciArPSAyOwogICAgICAgIH0KICAgICAgICBpZiAoISh4ICYgMSkpIHsKICAgICAgICAg ICAgICAgIHggPj49IDE7CiAgICAgICAgICAgICAgICByICs9IDE7CiAgICAgICAgfQogICAgICAg IHJldHVybiByOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdl aWdodDMyKHVuc2lnbmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYg MHg1NTU1NTU1NSkgKyAoKHcgPj4gMSkgJiAweDU1NTU1NTU1KTsKICAgICAgICByZXMgPSAocmVz ICYgMHgzMzMzMzMzMykgKyAoKHJlcyA+PiAyKSAmIDB4MzMzMzMzMzMpOwogICAgICAgIHJlcyA9 IChyZXMgJiAweDBGMEYwRjBGKSArICgocmVzID4+IDQpICYgMHgwRjBGMEYwRik7CiAgICAgICAg cmVzID0gKHJlcyAmIDB4MDBGRjAwRkYpICsgKChyZXMgPj4gOCkgJiAweDAwRkYwMEZGKTsKICAg ICAgICByZXR1cm4gKHJlcyAmIDB4MDAwMEZGRkYpICsgKChyZXMgPj4gMTYpICYgMHgwMDAwRkZG Rik7Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGdlbmVyaWNfaHdlaWdodDE2KHVuc2ln bmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NTU1KSArICgo dyA+PiAxKSAmIDB4NTU1NSk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MzMzMykgKyAoKHJlcyA+ PiAyKSAmIDB4MzMzMyk7CiAgICAgICAgcmVzID0gKHJlcyAmIDB4MEYwRikgKyAoKHJlcyA+PiA0 KSAmIDB4MEYwRik7CiAgICAgICAgcmV0dXJuIChyZXMgJiAweDAwRkYpICsgKChyZXMgPj4gOCkg JiAweDAwRkYpOwp9CgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBnZW5lcmljX2h3ZWlnaHQ4 KHVuc2lnbmVkIGludCB3KQp7CiAgICAgICAgdW5zaWduZWQgaW50IHJlcyA9ICh3ICYgMHg1NSkg KyAoKHcgPj4gMSkgJiAweDU1KTsKICAgICAgICByZXMgPSAocmVzICYgMHgzMykgKyAoKHJlcyA+ PiAyKSAmIDB4MzMpOwogICAgICAgIHJldHVybiAocmVzICYgMHgwRikgKyAoKHJlcyA+PiA0KSAm IDB4MEYpOwp9CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9iaXRvcHMu aCIgMQojIDcwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9iaXRvcHMuaCIg MgojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIgMgoKCgpz dHJ1Y3QgdGFza19zdHJ1Y3Q7CmV4dGVybiB2b2lkIF9fc3dpdGNoX3RvKHN0cnVjdCB0YXNrX3N0 cnVjdCAqcHJldiwgc3RydWN0IHRhc2tfc3RydWN0ICpuZXh0KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CiMgNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0u aCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIF9nZXRfYmFzZShjaGFyICogYWRkcikKewog ICAgICAgIHVuc2lnbmVkIGxvbmcgX19iYXNlOwogICAgICAgIF9fYXNtX18oIm1vdmIgJTMsJSVk aFxuXHQiCiAgICAgICAgICAgICAgICAibW92YiAlMiwlJWRsXG5cdCIKICAgICAgICAgICAgICAg ICJzaGxsICQxNiwlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAibW92dyAlMSwlJWR4IgogICAg ICAgICAgICAgICAgOiI9JmQiIChfX2Jhc2UpCiAgICAgICAgICAgICAgICA6Im0iICgqKChhZGRy KSsyKSksCiAgICAgICAgICAgICAgICAgIm0iICgqKChhZGRyKSs0KSksCiAgICAgICAgICAgICAg ICAgIm0iICgqKChhZGRyKSs3KSkpOwogICAgICAgIHJldHVybiBfX2Jhc2U7Cn0KIyAxMzAgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIGdldF9saW1pdCh1bnNpZ25lZCBsb25nIHNlZ21lbnQpCnsKICAgICAgICB1 bnNpZ25lZCBsb25nIF9fbGltaXQ7CiAgICAgICAgX19hc21fXygibHNsbCAlMSwlMCIKICAgICAg ICAgICAgICAgIDoiPXIiIChfX2xpbWl0KToiciIgKHNlZ21lbnQpKTsKICAgICAgICByZXR1cm4g X19saW1pdCsxOwp9CgoKCgoKCgpzdHJ1Y3QgX194Y2hnX2R1bW15IHsgdW5zaWduZWQgbG9uZyBh WzEwMF07IH07CiMgMTU3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc3lzdGVt LmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NldF82NGJpdCAodW5zaWduZWQgbG9uZyBsb25nICog cHRyLAogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGxvdywgdW5zaWduZWQgaW50IGhpZ2gp CnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoCiAgICAgICAgICAgICAgICAiXG4xOlx0 IgogICAgICAgICAgICAgICAgIm1vdmwgKCUwKSwgJSVlYXhcblx0IgogICAgICAgICAgICAgICAg Im1vdmwgNCglMCksICUlZWR4XG5cdCIKICAgICAgICAgICAgICAgICJjbXB4Y2hnOGIgKCUwKVxu XHQiCiAgICAgICAgICAgICAgICAiam56IDFiIgogICAgICAgICAgICAgICAgOgogICAgICAgICAg ICAgICAgOiAiRCIocHRyKSwKICAgICAgICAgICAgICAgICAgICAgICAgImIiKGxvdyksCiAgICAg ICAgICAgICAgICAgICAgICAgICJjIihoaWdoKQogICAgICAgICAgICAgICAgOiAiYXgiLCJkeCIs Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfY29uc3RhbnQgKHVu c2lnbmVkIGxvbmcgbG9uZyAqcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHZhbHVlKQp7CiAgICAgICAgX19zZXRf NjRiaXQocHRyLCh1bnNpZ25lZCBpbnQpKHZhbHVlKSwgKHVuc2lnbmVkIGludCkoKHZhbHVlKT4+ MzJVTEwpKTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19zZXRfNjRiaXRfdmFyICh1bnNpZ25l ZCBsb25nIGxvbmcgKnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcg bG9uZyB2YWx1ZSkKewogICAgICAgIF9fc2V0XzY0Yml0KHB0ciwqKCgodW5zaWduZWQgaW50Kikm KHZhbHVlKSkrMCksICooKCh1bnNpZ25lZCBpbnQqKSYodmFsdWUpKSsxKSk7Cn0KIyAyMDIgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBsb25nIF9feGNoZyh1bnNpZ25lZCBsb25nIHgsIHZvbGF0aWxlIHZvaWQgKiBwdHIs IGludCBzaXplKQp7CiAgICAgICAgc3dpdGNoIChzaXplKSB7CiAgICAgICAgICAgICAgICBjYXNl IDE6CiAgICAgICAgICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCJ4Y2hnYiAl YjAsJTEiCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9cSIgKHgpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShw dHIpKSksICIwIiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9yeSIp OwogICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgMjoK ICAgICAgICAgICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInhjaGd3ICV3MCwl MSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Ij1yIiAoeCkKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA6Im0iICgqKChzdHJ1Y3QgX194Y2hnX2R1bW15ICopKHB0cikp KSwgIjAiICh4KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7CiAg ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSA0OgogICAg ICAgICAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygieGNoZ2wgJTAsJTEiCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiI9ciIgKHgpCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiJtIiAoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIw IiAoeCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwogICAgICAg ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHg7Cn0KIyAy MzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zeXN0ZW0uaCIKc3RhdGljIGlu bGluZSB1bnNpZ25lZCBsb25nIF9fY21weGNoZyh2b2xhdGlsZSB2b2lkICpwdHIsIHVuc2lnbmVk IGxvbmcgb2xkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGxvbmcgbmV3LCBpbnQgc2l6ZSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgcHJldjsKICAgICAg ICBzd2l0Y2ggKHNpemUpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICAgICAgICBfX2FzbV9f IF9fdm9sYXRpbGVfXygiIiAiY21weGNoZ2IgJWIxLCUyIgogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgOiAiPWEiKHByZXYpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA6ICJxIihuZXcpLCAibSIoKigoc3RydWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSks ICIwIihvbGQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJtZW1vcnki KTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwogICAgICAgIGNhc2UgMjoKICAgICAgICAg ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIiICJjbXB4Y2hndyAldzEsJTIiCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICI9YSIocHJldikKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIDogInEiKG5ldyksICJtIigqKChzdHJ1Y3QgX194Y2hnX2R1 bW15ICopKHB0cikpKSwgIjAiKG9sZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIDogIm1lbW9yeSIpOwogICAgICAgICAgICAgICAgcmV0dXJuIHByZXY7CiAgICAgICAgY2Fz ZSA0OgogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIiIgImNtcHhjaGdsICUx LCUyIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAiPWEiKHByZXYpCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6ICJxIihuZXcpLCAibSIoKigoc3Ry dWN0IF9feGNoZ19kdW1teSAqKShwdHIpKSksICIwIihvbGQpCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA6ICJtZW1vcnkiKTsKICAgICAgICAgICAgICAgIHJldHVybiBwcmV2 OwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2xkOwp9CiMgMzQwICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9hc20vc3lzdGVtLmgiCnZvaWQgZGlzYWJsZV9obHQodm9pZCk7CnZvaWQg ZW5hYmxlX2hsdCh2b2lkKTsKIyA0MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3NlbWFwaG9yZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2F0 b21pYy5oIiAxCiMgNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zZW1hcGhv cmUuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3dhaXQuaCIg MQojIDQyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2VtYXBob3JlLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9yd3NlbS5oIiAxCiMgMTAg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbGlua2FnZS5oIiAxCiMgMTEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKCgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9yd3NlbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3N5c3RlbS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J3 c2VtLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgi IDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcndzZW0uaCIgMgoK c3RydWN0IHJ3X3NlbWFwaG9yZTsKCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL3J3c2VtLmgiIDEKIyA0MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3J3c2VtLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbGlzdC5o IiAxCiMgNDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9yd3NlbS5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDQz ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcndzZW0uaCIgMgoKc3RydWN0IHJ3 c2VtX3dhaXRlcjsKCmV4dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV9kb3duX3JlYWRf ZmFpbGVkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwpleHRlcm4gc3RydWN0IHJ3X3NlbWFwaG9yZSAqcndzZW1fZG93bl93cml0ZV9mYWlsZWQo c3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4 dGVybiBzdHJ1Y3Qgcndfc2VtYXBob3JlICpyd3NlbV93YWtlKHN0cnVjdCByd19zZW1hcGhvcmUg KikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCgoKc3RydWN0IHJ3X3NlbWFwaG9yZSB7 CiAgICAgICAgc2lnbmVkIGxvbmcgY291bnQ7CgoKCgoKCiAgICAgICAgc3BpbmxvY2tfdCB3YWl0 X2xvY2s7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCB3YWl0X2xpc3Q7CgoKCn07CiMgODQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9yd3NlbS5oIgpzdGF0aWMgaW5saW5lIHZv aWQgaW5pdF9yd3NlbShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBzZW0tPmNv dW50ID0gMHgwMDAwMDAwMDsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgZG8geyAo JnNlbS0+d2FpdF9saXN0KS0+bmV4dCA9ICgmc2VtLT53YWl0X2xpc3QpOyAoJnNlbS0+d2FpdF9s aXN0KS0+cHJldiA9ICgmc2VtLT53YWl0X2xpc3QpOyB9IHdoaWxlICgwKTsKCgoKfQoKCgoKc3Rh dGljIGlubGluZSB2b2lkIF9fZG93bl9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewog ICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5n IGRvd25fcmVhZFxuXHQiCiIiICIgIGluY2wgICAgICAoJSVlYXgpXG5cdCIKICAgICAgICAgICAg ICAgICIgIGpzICAgICAgICAyZlxuXHQiCiAgICAgICAgICAgICAgICAiMTpcblx0IgogICAgICAg ICAgICAgICAgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAi Mjpcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUlZWN4XG5cdCIKICAgICAgICAg ICAgICAgICIgIHB1c2hsICAgICAlJWVkeFxuXHQiCiAgICAgICAgICAgICAgICAiICBjYWxsICAg ICAgcndzZW1fZG93bl9yZWFkX2ZhaWxlZFxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3BsICAg ICAgJSVlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgcG9wbCAgICAgICUlZWN4XG5cdCIKICAg ICAgICAgICAgICAgICIgIGptcCAgICAgICAxYlxuIgogICAgICAgICAgICAgICAgIi5wcmV2aW91 cyIKICAgICAgICAgICAgICAgICIjIGVuZGluZyBkb3duX3JlYWRcblx0IgogICAgICAgICAgICAg ICAgOiAiK20iKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJhIihzZW0pCiAgICAgICAg ICAgICAgICA6ICJtZW1vcnkiLCAiY2MiKTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIF9fZG93 bl93cml0ZShzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBpbnQgdG1wOwoKICAg ICAgICB0bXAgPSAoKC0weDAwMDEwMDAwKSArIDB4MDAwMDAwMDEpOwogICAgICAgIF9fYXNtX18g X192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIGRvd25fd3JpdGVcblx0 IgoiIiAiICB4YWRkICAgICAgJTAsKCUlZWF4KVxuXHQiCiAgICAgICAgICAgICAgICAiICB0ZXN0 bCAgICAgJTAsJTBcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAgICAgIDJmXG5cdCIKICAg ICAgICAgICAgICAgICIxOlxuXHQiCiAgICAgICAgICAgICAgICAiLnNlY3Rpb24gLnRleHQubG9j ayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIyOlxuXHQiCiAgICAgICAgICAgICAgICAiICBw dXNobCAgICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgY2FsbCAgICAgIHJ3c2VtX2Rv d25fd3JpdGVfZmFpbGVkXG5cdCIKICAgICAgICAgICAgICAgICIgIHBvcGwgICAgICAlJWVjeFxu XHQiCiAgICAgICAgICAgICAgICAiICBqbXAgICAgICAgMWJcbiIKICAgICAgICAgICAgICAgICIu cHJldmlvdXNcbiIKICAgICAgICAgICAgICAgICIjIGVuZGluZyBkb3duX3dyaXRlIgogICAgICAg ICAgICAgICAgOiAiK2QiKHRtcCksICIrbSIoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDog ImEiKHNlbSkKICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIpOwp9CgoKCgpzdGF0aWMg aW5saW5lIHZvaWQgX191cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUgKnNlbSkKewogICAgICAg IF9fczMyIHRtcCA9IC0weDAwMDAwMDAxOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICAgICAgICAgIiMgYmVnaW5uaW5nIF9fdXBfcmVhZFxuXHQiCiIiICIgIHhhZGQgICAg ICAlJWVkeCwoJSVlYXgpXG5cdCIKICAgICAgICAgICAgICAgICIgIGpzICAgICAgICAyZlxuXHQi CiAgICAgICAgICAgICAgICAiMTpcblx0IgogICAgICAgICAgICAgICAgIi5zZWN0aW9uIC50ZXh0 LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAiMjpcblx0IgogICAgICAgICAgICAgICAg IiAgZGVjdyAgICAgICUlZHhcblx0IgogICAgICAgICAgICAgICAgIiAgam56ICAgICAgIDFiXG5c dCIKICAgICAgICAgICAgICAgICIgIHB1c2hsICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAg ICAiICBjYWxsICAgICAgcndzZW1fd2FrZVxuXHQiCiAgICAgICAgICAgICAgICAiICBwb3BsICAg ICAgJSVlY3hcblx0IgogICAgICAgICAgICAgICAgIiAgam1wICAgICAgIDFiXG4iCiAgICAgICAg ICAgICAgICAiLnByZXZpb3VzXG4iCiAgICAgICAgICAgICAgICAiIyBlbmRpbmcgX191cF9yZWFk XG4iCiAgICAgICAgICAgICAgICA6ICIrbSIoc2VtLT5jb3VudCksICIrZCIodG1wKQogICAgICAg ICAgICAgICAgOiAiYSIoc2VtKQogICAgICAgICAgICAgICAgOiAibWVtb3J5IiwgImNjIik7Cn0K CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3VwX3dyaXRlKHN0cnVjdCByd19zZW1hcGhvcmUgKnNl bSkKewogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAogICAgICAgICAgICAgICAgIiMgYmVn aW5uaW5nIF9fdXBfd3JpdGVcblx0IgogICAgICAgICAgICAgICAgIiAgbW92bCAgICAgICUyLCUl ZWR4XG5cdCIKIiIgIiAgeGFkZGwgICAgICUlZWR4LCglJWVheClcblx0IgogICAgICAgICAgICAg ICAgIiAgam56ICAgICAgIDJmXG5cdCIKICAgICAgICAgICAgICAgICIxOlxuXHQiCiAgICAgICAg ICAgICAgICAiLnNlY3Rpb24gLnRleHQubG9jayxcImF4XCJcbiIKICAgICAgICAgICAgICAgICIy OlxuXHQiCiAgICAgICAgICAgICAgICAiICBkZWN3ICAgICAgJSVkeFxuXHQiCiAgICAgICAgICAg ICAgICAiICBqbnogICAgICAgMWJcblx0IgogICAgICAgICAgICAgICAgIiAgcHVzaGwgICAgICUl ZWN4XG5cdCIKICAgICAgICAgICAgICAgICIgIGNhbGwgICAgICByd3NlbV93YWtlXG5cdCIKICAg ICAgICAgICAgICAgICIgIHBvcGwgICAgICAlJWVjeFxuXHQiCiAgICAgICAgICAgICAgICAiICBq bXAgICAgICAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXNcbiIKICAgICAgICAgICAg ICAgICIjIGVuZGluZyBfX3VwX3dyaXRlXG4iCiAgICAgICAgICAgICAgICA6ICIrbSIoc2VtLT5j b3VudCkKICAgICAgICAgICAgICAgIDogImEiKHNlbSksICJpIigtKCgtMHgwMDAxMDAwMCkgKyAw eDAwMDAwMDAxKSkKICAgICAgICAgICAgICAgIDogIm1lbW9yeSIsICJjYyIsICJlZHgiKTsKfQoK CgoKc3RhdGljIGlubGluZSB2b2lkIHJ3c2VtX2F0b21pY19hZGQoaW50IGRlbHRhLCBzdHJ1Y3Qg cndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygKIiIgImFk ZGwgJTEsJTAiCiAgICAgICAgICAgICAgICA6Ij1tIihzZW0tPmNvdW50KQogICAgICAgICAgICAg ICAgOiJpciIoZGVsdGEpLCAibSIoc2VtLT5jb3VudCkpOwp9CgoKCgpzdGF0aWMgaW5saW5lIGlu dCByd3NlbV9hdG9taWNfdXBkYXRlKGludCBkZWx0YSwgc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2Vt KQp7CiAgICAgICAgaW50IHRtcCA9IGRlbHRhOwoKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVf XygKIiIgInhhZGQgJTAsKCUyKSIKICAgICAgICAgICAgICAgIDogIityIih0bXApLCAiPW0iKHNl bS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ICJyIihzZW0pLCAibSIoc2VtLT5jb3VudCkKICAg ICAgICAgICAgICAgIDogIm1lbW9yeSIpOwoKICAgICAgICByZXR1cm4gdG1wK2RlbHRhOwp9CiMg MjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J3c2VtLmgiIDIKIyA0MSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcndzZW0uaCIKc3RhdGljIGlubGlu ZSB2b2lkIGRvd25fcmVhZChzdHJ1Y3Qgcndfc2VtYXBob3JlICpzZW0pCnsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgX19kb3duX3JlYWQoc2Vt KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKfQoKCgoKc3Rh dGljIGlubGluZSB2b2lkIGRvd25fd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9yZSAqc2VtKQp7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICBfX2Rv d25fd3JpdGUoc2VtKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7Cn0KCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB1cF9yZWFkKHN0cnVjdCByd19zZW1hcGhvcmUg KnNlbSkKewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAg ICAgX191cF9yZWFkKHNlbSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgdXBfd3JpdGUoc3RydWN0IHJ3X3NlbWFwaG9y ZSAqc2VtKQp7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgX191cF93cml0ZShzZW0pOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICA7Cn0KIyA0MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NlbWFw aG9yZS5oIiAyCgpzdHJ1Y3Qgc2VtYXBob3JlIHsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAg ICAgICBpbnQgc2xlZXBlcnM7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3Qgd2FpdDsKCgoKfTsK IyA3MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NlbWFwaG9yZS5oIgpzdGF0 aWMgaW5saW5lIHZvaWQgc2VtYV9pbml0IChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0sIGludCB2YWwp CnsKCgoKCgoKICAgICAgICAoKCgmc2VtLT5jb3VudCktPmNvdW50ZXIpID0gKHZhbCkpOwogICAg ICAgIHNlbS0+c2xlZXBlcnMgPSAwOwogICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJnNlbS0+ d2FpdCk7CgoKCn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X01VVEVYIChzdHJ1Y3Qgc2VtYXBo b3JlICpzZW0pCnsKICAgICAgICBzZW1hX2luaXQoc2VtLCAxKTsKfQoKc3RhdGljIGlubGluZSB2 b2lkIGluaXRfTVVURVhfTE9DS0VEIChzdHJ1Y3Qgc2VtYXBob3JlICpzZW0pCnsKICAgICAgICBz ZW1hX2luaXQoc2VtLCAwKTsKfQoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIF9f ZG93bl9mYWlsZWQodm9pZCApOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGludCBfX2Rv d25fZmFpbGVkX2ludGVycnVwdGlibGUodm9pZCApOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgw KSkpIGludCBfX2Rvd25fZmFpbGVkX3RyeWxvY2sodm9pZCApOwogX19hdHRyaWJ1dGVfXygocmVn cGFybSgwKSkpIHZvaWQgX191cF93YWtldXAodm9pZCApOwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMCkpKSB2b2lkIF9fZG93bihzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMCkpKSBpbnQgX19kb3duX2ludGVycnVwdGlibGUoc3RydWN0IHNlbWFwaG9y ZSAqIHNlbSk7CiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgaW50IF9fZG93bl90cnlsb2Nr KHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHZv aWQgX191cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKTsKCgoKCgoKc3RhdGljIGlubGluZSB2b2lk IGRvd24oc3RydWN0IHNlbWFwaG9yZSAqIHNlbSkKewoKCgoKICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygKICAgICAgICAgICAgICAgICIjIGF0b21pYyBkb3duIG9wZXJhdGlvblxuXHQiCiAg ICAgICAgICAgICAgICAiIiAiZGVjbCAlMFxuXHQiCiAgICAgICAgICAgICAgICAianMgMmZcbiIK ICAgICAgICAgICAgICAgICIxOlxuIgogICAgICAgICAgICAgICAgIi5zZWN0aW9uIC50ZXh0Lmxv Y2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAiMjpcdGNhbGwgX19kb3duX2ZhaWxlZFxuXHQi CiAgICAgICAgICAgICAgICAiam1wIDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzIgog ICAgICAgICAgICAgICAgOiI9bSIgKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMiIChz ZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwp9CgoKCgoKc3RhdGljIGlubGluZSBpbnQg ZG93bl9pbnRlcnJ1cHRpYmxlKHN0cnVjdCBzZW1hcGhvcmUgKiBzZW0pCnsKICAgICAgICBpbnQg cmVzdWx0OwoKCgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAg ICAiIyBhdG9taWMgaW50ZXJydXB0aWJsZSBkb3duIG9wZXJhdGlvblxuXHQiCiAgICAgICAgICAg ICAgICAiIiAiZGVjbCAlMVxuXHQiCiAgICAgICAgICAgICAgICAianMgMmZcblx0IgogICAgICAg ICAgICAgICAgInhvcmwgJTAsJTBcbiIKICAgICAgICAgICAgICAgICIxOlxuIgogICAgICAgICAg ICAgICAgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAiMjpc dGNhbGwgX19kb3duX2ZhaWxlZF9pbnRlcnJ1cHRpYmxlXG5cdCIKICAgICAgICAgICAgICAgICJq bXAgMWJcbiIKICAgICAgICAgICAgICAgICIucHJldmlvdXMiCiAgICAgICAgICAgICAgICA6Ij1h IiAocmVzdWx0KSwgIj1tIiAoc2VtLT5jb3VudCkKICAgICAgICAgICAgICAgIDoiYyIgKHNlbSkK ICAgICAgICAgICAgICAgIDoibWVtb3J5Iik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKfQoKCgoK CnN0YXRpYyBpbmxpbmUgaW50IGRvd25fdHJ5bG9jayhzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7 CiAgICAgICAgaW50IHJlc3VsdDsKCgoKCgogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKAog ICAgICAgICAgICAgICAgIiMgYXRvbWljIGludGVycnVwdGlibGUgZG93biBvcGVyYXRpb25cblx0 IgogICAgICAgICAgICAgICAgIiIgImRlY2wgJTFcblx0IgogICAgICAgICAgICAgICAgImpzIDJm XG5cdCIKICAgICAgICAgICAgICAgICJ4b3JsICUwLCUwXG4iCiAgICAgICAgICAgICAgICAiMTpc biIKICAgICAgICAgICAgICAgICIuc2VjdGlvbiAudGV4dC5sb2NrLFwiYXhcIlxuIgogICAgICAg ICAgICAgICAgIjI6XHRjYWxsIF9fZG93bl9mYWlsZWRfdHJ5bG9ja1xuXHQiCiAgICAgICAgICAg ICAgICAiam1wIDFiXG4iCiAgICAgICAgICAgICAgICAiLnByZXZpb3VzIgogICAgICAgICAgICAg ICAgOiI9YSIgKHJlc3VsdCksICI9bSIgKHNlbS0+Y291bnQpCiAgICAgICAgICAgICAgICA6ImMi IChzZW0pCiAgICAgICAgICAgICAgICA6Im1lbW9yeSIpOwogICAgICAgIHJldHVybiByZXN1bHQ7 Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB1cChzdHJ1Y3Qgc2VtYXBob3JlICogc2VtKQp7 CgoKCiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oCiAgICAgICAgICAgICAgICAiIyBhdG9t aWMgdXAgb3BlcmF0aW9uXG5cdCIKICAgICAgICAgICAgICAgICIiICJpbmNsICUwXG5cdCIKICAg ICAgICAgICAgICAgICJqbGUgMmZcbiIKICAgICAgICAgICAgICAgICIxOlxuIgogICAgICAgICAg ICAgICAgIi5zZWN0aW9uIC50ZXh0LmxvY2ssXCJheFwiXG4iCiAgICAgICAgICAgICAgICAiMjpc dGNhbGwgX191cF93YWtldXBcblx0IgogICAgICAgICAgICAgICAgImptcCAxYlxuIgogICAgICAg ICAgICAgICAgIi5wcmV2aW91cyIKICAgICAgICAgICAgICAgIDoiPW0iIChzZW0tPmNvdW50KQog ICAgICAgICAgICAgICAgOiJjIiAoc2VtKQogICAgICAgICAgICAgICAgOiJtZW1vcnkiKTsKfQoj IDE5OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9ieXRlb3JkZXIuaCIgMQoKCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvYXNtL2J5dGVvcmRlci5oIiAyCgoKCgoKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDExICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiIDIKCgpzdGF0aWMgX19pbmxpbmVf XyBfX2NvbnN0X18gX191MzIgX19fYXJjaF9fc3dhYjMyKF9fdTMyIHgpCnsKCiAgICAgICAgX19h c21fXygiYnN3YXAgJTAiIDogIj1yIiAoeCkgOiAiMCIgKHgpKTsKCgoKCgoKCiAgICAgICAgcmV0 dXJuIHg7Cn0KCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UxNiBfX19hcmNoX19zd2Fi MTYoX191MTYgeCkKewogICAgICAgIF9fYXNtX18oInhjaGdiICViMCwlaDAiIDogIj1xIiAoeCkg OiAiMCIgKHgpKTsgcmV0dXJuIHg7CgoKCn0KIyA0NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL2J5dGVvcmRlci5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2J5dGVvcmRlci9saXR0bGVfZW5kaWFuLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIiAxCiMgMTMx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvc3dhYi5oIgpz dGF0aWMgX19pbmxpbmVfXyBfX2NvbnN0X18gX191MTYgX19mc3dhYjE2KF9fdTE2IHgpCnsKICAg ICAgICByZXR1cm4gX19fYXJjaF9fc3dhYjE2KHgpOwp9CnN0YXRpYyBfX2lubGluZV9fIF9fdTE2 IF9fc3dhYjE2cChfX3UxNiAqeCkKewogICAgICAgIHJldHVybiBfX19hcmNoX19zd2FiMTYoKih4 KSk7Cn0Kc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWIxNnMoX191MTYgKmFkZHIpCnsKICAg ICAgICBkbyB7ICooYWRkcikgPSBfX19hcmNoX19zd2FiMTYoKigoYWRkcikpKTsgfSB3aGlsZSAo MCk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3UzMiBfX2Zzd2FiMzIoX191MzIg eCkKewogICAgICAgIHJldHVybiBfX19hcmNoX19zd2FiMzIoeCk7Cn0Kc3RhdGljIF9faW5saW5l X18gX191MzIgX19zd2FiMzJwKF9fdTMyICp4KQp7CiAgICAgICAgcmV0dXJuIF9fX2FyY2hfX3N3 YWIzMigqKHgpKTsKfQpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIF9fc3dhYjMycyhfX3UzMiAqYWRk cikKewogICAgICAgIGRvIHsgKihhZGRyKSA9IF9fX2FyY2hfX3N3YWIzMigqKChhZGRyKSkpOyB9 IHdoaWxlICgwKTsKfQoKCnN0YXRpYyBfX2lubGluZV9fIF9fY29uc3RfXyBfX3U2NCBfX2Zzd2Fi NjQoX191NjQgeCkKewoKICAgICAgICBfX3UzMiBoID0geCA+PiAzMjsKICAgICAgICBfX3UzMiBs ID0geCAmICgoMVVMTDw8MzIpLTEpOwogICAgICAgIHJldHVybiAoKChfX3U2NCkoX19idWlsdGlu X2NvbnN0YW50X3AoKF9fdTMyKShsKSkgPyAoeyBfX3UzMiBfX3ggPSAoKGwpKTsgKChfX3UzMiko ICgoKF9fdTMyKShfX3gpICYgKF9fdTMyKTB4MDAwMDAwZmZVTCkgPDwgMjQpIHwgKCgoX191MzIp KF9feCkgJiAoX191MzIpMHgwMDAwZmYwMFVMKSA8PCA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9f dTMyKTB4MDBmZjAwMDBVTCkgPj4gOCkgfCAoKChfX3UzMikoX194KSAmIChfX3UzMikweGZmMDAw MDAwVUwpID4+IDI0KSApKTsgfSkgOiBfX2Zzd2FiMzIoKGwpKSkpIDw8IDMyKSB8ICgoX191NjQp KChfX2J1aWx0aW5fY29uc3RhbnRfcCgoX191MzIpKGgpKSA/ICh7IF9fdTMyIF9feCA9ICgoaCkp OyAoKF9fdTMyKSggKCgoX191MzIpKF9feCkgJiAoX191MzIpMHgwMDAwMDBmZlVMKSA8PCAyNCkg fCAoKChfX3UzMikoX194KSAmIChfX3UzMikweDAwMDBmZjAwVUwpIDw8IDgpIHwgKCgoX191MzIp KF9feCkgJiAoX191MzIpMHgwMGZmMDAwMFVMKSA+PiA4KSB8ICgoKF9fdTMyKShfX3gpICYgKF9f dTMyKTB4ZmYwMDAwMDBVTCkgPj4gMjQpICkpOyB9KSA6IF9fZnN3YWIzMigoaCkpKSkpOwoKCgp9 CnN0YXRpYyBfX2lubGluZV9fIF9fdTY0IF9fc3dhYjY0cChfX3U2NCAqeCkKewogICAgICAgIHJl dHVybiAoeyBfX3U2NCBfX3RtcCA9ICgqKHgpKSA7ICh7IF9fdTY0IF9feCA9IChfX3RtcCk7ICgo X191NjQpKCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAwMDAwMGZm VUxMKSA8PCA1NikgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwMDAwMDAw MDBmZjAwVUxMKSA8PCA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAw MDAwMDAwZmYwMDAwVUxMKSA8PCAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQp MHgwMDAwMDAwMGZmMDAwMDAwVUxMKSA8PCA4KSB8IChfX3U2NCkoKChfX3U2NCkoX194KSAmIChf X3U2NCkweDAwMDAwMGZmMDAwMDAwMDBVTEwpID4+IDgpIHwgKF9fdTY0KSgoKF9fdTY0KShfX3gp ICYgKF9fdTY0KTB4MDAwMGZmMDAwMDAwMDAwMFVMTCkgPj4gMjQpIHwgKF9fdTY0KSgoKF9fdTY0 KShfX3gpICYgKF9fdTY0KTB4MDBmZjAwMDAwMDAwMDAwMFVMTCkgPj4gNDApIHwgKF9fdTY0KSgo KF9fdTY0KShfX3gpICYgKF9fdTY0KTB4ZmYwMDAwMDAwMDAwMDAwMFVMTCkgPj4gNTYpICkpOyB9 KTsgfSk7Cn0Kc3RhdGljIF9faW5saW5lX18gdm9pZCBfX3N3YWI2NHMoX191NjQgKmFkZHIpCnsK ICAgICAgICBkbyB7ICooYWRkcikgPSAoeyBfX3U2NCBfX3RtcCA9ICgqKChhZGRyKSkpIDsgKHsg X191NjQgX194ID0gKF9fdG1wKTsgKChfX3U2NCkoIChfX3U2NCkoKChfX3U2NCkoX194KSAmIChf X3U2NCkweDAwMDAwMDAwMDAwMDAwZmZVTEwpIDw8IDU2KSB8IChfX3U2NCkoKChfX3U2NCkoX194 KSAmIChfX3U2NCkweDAwMDAwMDAwMDAwMGZmMDBVTEwpIDw8IDQwKSB8IChfX3U2NCkoKChfX3U2 NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwMDBmZjAwMDBVTEwpIDw8IDI0KSB8IChfX3U2NCko KChfX3U2NCkoX194KSAmIChfX3U2NCkweDAwMDAwMDAwZmYwMDAwMDBVTEwpIDw8IDgpIHwgKF9f dTY0KSgoKF9fdTY0KShfX3gpICYgKF9fdTY0KTB4MDAwMDAwZmYwMDAwMDAwMFVMTCkgPj4gOCkg fCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMDAwZmYwMDAwMDAwMDAwVUxMKSA+ PiAyNCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHgwMGZmMDAwMDAwMDAwMDAw VUxMKSA+PiA0MCkgfCAoX191NjQpKCgoX191NjQpKF9feCkgJiAoX191NjQpMHhmZjAwMDAwMDAw MDAwMDAwVUxMKSA+PiA1NikgKSk7IH0pOyB9KTsgfSB3aGlsZSAoMCk7Cn0KIyAxMiAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIg MgojIDY2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ieXRlb3JkZXIvbGl0 dGxlX2VuZGlhbi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2J5 dGVvcmRlci9nZW5lcmljLmgiIDEKIyAxNTAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2J5dGVvcmRlci9nZW5lcmljLmgiCmV4dGVybiBfX3UzMiBudG9obChfX3UzMik7CmV4 dGVybiBfX3UzMiBodG9ubChfX3UzMik7CgoKCgpleHRlcm4gdW5zaWduZWQgc2hvcnQgaW50IG50 b2hzKHVuc2lnbmVkIHNob3J0IGludCk7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBpbnQgaHRvbnMo dW5zaWduZWQgc2hvcnQgaW50KTsKIyA2NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvYnl0ZW9yZGVyL2xpdHRsZV9lbmRpYW4uaCIgMgojIDQ2ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiIDIKIyAxOTkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKCmV4dGVybiB2b2lkIHVwZGF0ZV9hdGltZSAoc3Ry dWN0IGlub2RlICopOwoKCmV4dGVybiB2b2lkIGJ1ZmZlcl9pbml0KHVuc2lnbmVkIGxvbmcpOwpl eHRlcm4gdm9pZCBpbm9kZV9pbml0KHVuc2lnbmVkIGxvbmcpOwpleHRlcm4gdm9pZCBtbnRfaW5p dCh1bnNpZ25lZCBsb25nKTsKCgplbnVtIGJoX3N0YXRlX2JpdHMgewogICAgICAgIEJIX1VwdG9k YXRlLAogICAgICAgIEJIX0RpcnR5LAogICAgICAgIEJIX0xvY2ssCiAgICAgICAgQkhfUmVxLAog ICAgICAgIEJIX01hcHBlZCwKICAgICAgICBCSF9OZXcsCiAgICAgICAgQkhfQXN5bmMsCiAgICAg ICAgQkhfV2FpdF9JTywKCiAgICAgICAgQkhfUHJpdmF0ZVN0YXJ0LAoKCn07CiMgMjM0ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgpzdHJ1Y3QgYnVmZmVyX2hlYWQg ewoKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfbmV4dDsKICAgICAgICB1bnNpZ25lZCBs b25nIGJfYmxvY2tucjsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBiX3NpemU7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgYl9saXN0OwogICAgICAgIGtkZXZfdCBiX2RldjsKCiAgICAgICAgYXRvbWlj X3QgYl9jb3VudDsKICAgICAgICBrZGV2X3QgYl9yZGV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcg Yl9zdGF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGJfZmx1c2h0aW1lOwoKICAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKmJfbmV4dF9mcmVlOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq Yl9wcmV2X2ZyZWU7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiX3RoaXNfcGFnZTsKICAg ICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJfcmVxbmV4dDsKCiAgICAgICAgc3RydWN0IGJ1ZmZl cl9oZWFkICoqYl9wcHJldjsKICAgICAgICBjaGFyICogYl9kYXRhOwogICAgICAgIHN0cnVjdCBw YWdlICpiX3BhZ2U7CiAgICAgICAgdm9pZCAoKmJfZW5kX2lvKShzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJoLCBpbnQgdXB0b2RhdGUpOwogICAgICAgIHZvaWQgKmJfcHJpdmF0ZTsKCiAgICAgICAgdW5z aWduZWQgbG9uZyBiX3JzZWN0b3I7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgYl93YWl0OwoK ICAgICAgICBzdHJ1Y3QgaW5vZGUgKiBiX2lub2RlOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg Yl9pbm9kZV9idWZmZXJzOwp9OwoKdHlwZWRlZiB2b2lkIChiaF9lbmRfaW9fdCkoc3RydWN0IGJ1 ZmZlcl9oZWFkICpiaCwgaW50IHVwdG9kYXRlKTsKdm9pZCBpbml0X2J1ZmZlcihzdHJ1Y3QgYnVm ZmVyX2hlYWQgKiwgYmhfZW5kX2lvX3QgKiwgdm9pZCAqKTsKIyAyODAgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4dGVybiB2b2lkIHNldF9iaF9wYWdlKHN0cnVj dCBidWZmZXJfaGVhZCAqYmgsIHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIG9mZnNl dCk7CgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BpcGVfZnNf aS5oIiAxCgoKCgpzdHJ1Y3QgcGlwZV9pbm9kZV9pbmZvIHsKICAgICAgICB3YWl0X3F1ZXVlX2hl YWRfdCB3YWl0OwogICAgICAgIGNoYXIgKmJhc2U7CiAgICAgICAgdW5zaWduZWQgaW50IGxlbjsK ICAgICAgICB1bnNpZ25lZCBpbnQgc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgaW50IHJlYWRlcnM7 CiAgICAgICAgdW5zaWduZWQgaW50IHdyaXRlcnM7CiAgICAgICAgdW5zaWduZWQgaW50IHdhaXRp bmdfcmVhZGVyczsKICAgICAgICB1bnNpZ25lZCBpbnQgd2FpdGluZ193cml0ZXJzOwogICAgICAg IHVuc2lnbmVkIGludCByX2NvdW50ZXI7CiAgICAgICAgdW5zaWduZWQgaW50IHdfY291bnRlcjsK fTsKIyA0MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcGlwZV9mc19pLmgi CnZvaWQgcGlwZV93YWl0KHN0cnVjdCBpbm9kZSAqIGlub2RlKTsKCnN0cnVjdCBpbm9kZSogcGlw ZV9uZXcoc3RydWN0IGlub2RlKiBpbm9kZSk7CiMgMjg2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvbWluaXhfZnNfaS5oIiAxCgoKCgoKCnN0cnVjdCBtaW5peF9pbm9kZV9pbmZvIHsKICAg ICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBfX3UxNiBpMV9kYXRhWzE2XTsKICAgICAgICAg ICAgICAgIF9fdTMyIGkyX2RhdGFbMTZdOwogICAgICAgIH0gdTsKfTsKIyAyODcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9leHQyX2ZzX2kuaCIgMQojIDIyICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9leHQyX2ZzX2kuaCIKc3RydWN0IGV4dDJfaW5vZGVfaW5mbyB7 CiAgICAgICAgX191MzIgaV9kYXRhWzE1XTsKICAgICAgICBfX3UzMiBpX2ZsYWdzOwogICAgICAg IF9fdTMyIGlfZmFkZHI7CiAgICAgICAgX191OCBpX2ZyYWdfbm87CiAgICAgICAgX191OCBpX2Zy YWdfc2l6ZTsKICAgICAgICBfX3UxNiBpX29zeW5jOwogICAgICAgIF9fdTMyIGlfZmlsZV9hY2w7 CiAgICAgICAgX191MzIgaV9kaXJfYWNsOwogICAgICAgIF9fdTMyIGlfZHRpbWU7CiAgICAgICAg X191MzIgaV9ibG9ja19ncm91cDsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfYmxvY2s7CiAg ICAgICAgX191MzIgaV9uZXh0X2FsbG9jX2dvYWw7CiAgICAgICAgX191MzIgaV9wcmVhbGxvY19i bG9jazsKICAgICAgICBfX3UzMiBpX3ByZWFsbG9jX2NvdW50OwogICAgICAgIF9fdTMyIGlfZGly X3N0YXJ0X2xvb2t1cDsKICAgICAgICBpbnQgaV9uZXdfaW5vZGU6MTsKfTsKIyAyODggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ocGZzX2ZzX2kuaCIgMQoKCgpzdHJ1Y3QgaHBmc19pbm9k ZV9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwogICAgICAgIGlub190 IGlfcGFyZW50X2RpcjsKICAgICAgICB1bnNpZ25lZCBpX2RubzsKICAgICAgICB1bnNpZ25lZCBp X2Rwb3M7CiAgICAgICAgdW5zaWduZWQgaV9kc3ViZG5vOwogICAgICAgIHVuc2lnbmVkIGlfZmls ZV9zZWM7CiAgICAgICAgdW5zaWduZWQgaV9kaXNrX3NlYzsKICAgICAgICB1bnNpZ25lZCBpX25f c2VjczsKICAgICAgICB1bnNpZ25lZCBpX2VhX3NpemU7CiAgICAgICAgdW5zaWduZWQgaV9jb252 IDogMjsKICAgICAgICB1bnNpZ25lZCBpX2VhX21vZGUgOiAxOwogICAgICAgIHVuc2lnbmVkIGlf ZWFfdWlkIDogMTsKICAgICAgICB1bnNpZ25lZCBpX2VhX2dpZCA6IDE7CiAgICAgICAgdW5zaWdu ZWQgaV9kaXJ0eSA6IDE7CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBpX3NlbTsKICAgICAgICBs b2ZmX3QgKippX3JkZGlyX29mZjsKfTsKIyAyODkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9udGZzX2ZzX2kuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3R5cGVzLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9u dGZzX2ZzX2kuaCIgMgoKCnN0cnVjdCBudGZzX2F0dHJpYnV0ZTsKc3RydWN0IG50ZnNfc2JfaW5m bzsKCgoKCnR5cGVkZWYgdTggbnRmc191ODsKdHlwZWRlZiB1MTYgbnRmc191MTY7CnR5cGVkZWYg dTMyIG50ZnNfdTMyOwp0eXBlZGVmIHU2NCBudGZzX3U2NDsKdHlwZWRlZiBzOCBudGZzX3M4Owp0 eXBlZGVmIHMxNiBudGZzX3MxNjsKdHlwZWRlZiBzMzIgbnRmc19zMzI7CnR5cGVkZWYgczY0IG50 ZnNfczY0OwoKCgoKdHlwZWRlZiBfX2tlcm5lbF9tb2RlX3QgbnRtb2RlX3Q7CgoKCnR5cGVkZWYg dWlkX3QgbnRmc191aWRfdDsKCgoKdHlwZWRlZiBnaWRfdCBudGZzX2dpZF90OwoKCgp0eXBlZGVm IF9fa2VybmVsX3NpemVfdCBudGZzX3NpemVfdDsKCgoKdHlwZWRlZiBfX2tlcm5lbF90aW1lX3Qg bnRmc190aW1lX3Q7CgoKCgoKdHlwZWRlZiB1MTYgbnRmc193Y2hhcl90OwoKCgoKdHlwZWRlZiBz NjQgbnRmc19vZmZzZXRfdDsKCgoKCnR5cGVkZWYgdTY0IG50ZnNfdGltZTY0X3Q7CiMgNjkgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L250ZnNfZnNfaS5oIgp0eXBlZGVmIHMz MiBudGZzX2NsdXN0ZXJfdDsKCgoKc3RydWN0IG50ZnNfaW5vZGVfaW5mbyB7CiAgICAgICAgc3Ry dWN0IG50ZnNfc2JfaW5mbyAqdm9sOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9udW1iZXI7CiAg ICAgICAgX191MTYgc2VxdWVuY2VfbnVtYmVyOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKmF0dHI7 CiAgICAgICAgaW50IGF0dHJfY291bnQ7CiAgICAgICAgc3RydWN0IG50ZnNfYXR0cmlidXRlICph dHRyczsKICAgICAgICBpbnQgcmVjb3JkX2NvdW50OwogICAgICAgIGludCAqcmVjb3JkczsKCiAg ICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg ICAgICAgaW50IHJlY29yZHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBjbHVzdGVy c19wZXJfcmVjb3JkOwogICAgICAgICAgICAgICAgfSBpbmRleDsKICAgICAgICB9IHU7Cn07CiMg MjkwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbXNkb3NfZnNfaS5oIiAxCgoKCgoKCgpz dHJ1Y3QgbXNkb3NfaW5vZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0 ZTsKICAgICAgICBpbnQgaV9zdGFydDsKICAgICAgICBpbnQgaV9sb2dzdGFydDsKICAgICAgICBp bnQgaV9hdHRyczsKICAgICAgICBpbnQgaV9jdGltZV9tczsKICAgICAgICBpbnQgaV9sb2NhdGlv bjsKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmlfZmF0X2lub2RlOwogICAgICAgIHN0cnVjdCBsaXN0 X2hlYWQgaV9mYXRfaGFzaDsKfTsKIyAyOTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC91 bXNkb3NfZnNfaS5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L21zZG9zX2ZzX2kuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3Vtc2Rvc19mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9waXBlX2ZzX2kuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC91bXNkb3NfZnNfaS5oIiAyCiMgMzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3Vtc2Rvc19mc19pLmgiCnN0cnVjdCBkaXJfbG9ja2luZ19pbmZvIHsKICAgICAg ICB3YWl0X3F1ZXVlX2hlYWRfdCBwOwogICAgICAgIHNob3J0IGludCBsb29raW5nOwogICAgICAg IHNob3J0IGludCBjcmVhdGluZzsKCgoKICAgICAgICBsb25nIHBpZDsKCn07CgpzdHJ1Y3QgdW1z ZG9zX2lub2RlX2luZm8gewogICAgICAgIHN0cnVjdCBtc2Rvc19pbm9kZV9pbmZvIG1zZG9zX2lu Zm87CiAgICAgICAgc3RydWN0IGRpcl9sb2NraW5nX2luZm8gZGlyX2luZm87CiAgICAgICAgaW50 IGlfcGF0Y2hlZDsKICAgICAgICBpbnQgaV9pc19obGluazsKICAgICAgICBvZmZfdCBwb3M7Cn07 CiMgMjkyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXNvX2ZzX2kuaCIgMQoKCgoKCgpz dHJ1Y3QgaXNvX2lub2RlX2luZm8gewogICAgICAgIHVuc2lnbmVkIGludCBpX2ZpcnN0X2V4dGVu dDsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlfZmlsZV9mb3JtYXQ7CiAgICAgICAgdW5zaWduZWQg bG9uZyBpX25leHRfc2VjdGlvbl9pbm87CiAgICAgICAgb2ZmX3QgaV9zZWN0aW9uX3NpemU7Cn07 CiMgMjkzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMQoKCgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCiMgNSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmZzX2ZzX2kuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9uZnMuaCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9uZnMuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9zdW5ycGMvbXNnX3Byb3QuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9zdW5ycGMvbXNnX3Byb3QuaCIKZW51bSBycGNfYXV0aF9mbGF2b3IgewogICAg ICAgIFJQQ19BVVRIX05VTEwgPSAwLAogICAgICAgIFJQQ19BVVRIX1VOSVggPSAxLAogICAgICAg IFJQQ19BVVRIX1NIT1JUID0gMiwKICAgICAgICBSUENfQVVUSF9ERVMgPSAzLAogICAgICAgIFJQ Q19BVVRIX0tSQiA9IDQsCn07CgplbnVtIHJwY19tc2dfdHlwZSB7CiAgICAgICAgUlBDX0NBTEwg PSAwLAogICAgICAgIFJQQ19SRVBMWSA9IDEKfTsKCmVudW0gcnBjX3JlcGx5X3N0YXQgewogICAg ICAgIFJQQ19NU0dfQUNDRVBURUQgPSAwLAogICAgICAgIFJQQ19NU0dfREVOSUVEID0gMQp9OwoK ZW51bSBycGNfYWNjZXB0X3N0YXQgewogICAgICAgIFJQQ19TVUNDRVNTID0gMCwKICAgICAgICBS UENfUFJPR19VTkFWQUlMID0gMSwKICAgICAgICBSUENfUFJPR19NSVNNQVRDSCA9IDIsCiAgICAg ICAgUlBDX1BST0NfVU5BVkFJTCA9IDMsCiAgICAgICAgUlBDX0dBUkJBR0VfQVJHUyA9IDQsCiAg ICAgICAgUlBDX1NZU1RFTV9FUlIgPSA1Cn07CgplbnVtIHJwY19yZWplY3Rfc3RhdCB7CiAgICAg ICAgUlBDX01JU01BVENIID0gMCwKICAgICAgICBSUENfQVVUSF9FUlJPUiA9IDEKfTsKCmVudW0g cnBjX2F1dGhfc3RhdCB7CiAgICAgICAgUlBDX0FVVEhfT0sgPSAwLAogICAgICAgIFJQQ19BVVRI X0JBRENSRUQgPSAxLAogICAgICAgIFJQQ19BVVRIX1JFSkVDVEVEQ1JFRCA9IDIsCiAgICAgICAg UlBDX0FVVEhfQkFEVkVSRiA9IDMsCiAgICAgICAgUlBDX0FVVEhfUkVKRUNURURWRVJGID0gNCwK ICAgICAgICBSUENfQVVUSF9UT09XRUFLID0gNQp9OwojIDExICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9uZnMuaCIgMgojIDQxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9uZnMuaCIKIGVudW0gbmZzX3N0YXQgewogICAgICAgIE5GU19PSyA9IDAsCiAg ICAgICAgTkZTRVJSX1BFUk0gPSAxLAogICAgICAgIE5GU0VSUl9OT0VOVCA9IDIsCiAgICAgICAg TkZTRVJSX0lPID0gNSwKICAgICAgICBORlNFUlJfTlhJTyA9IDYsCiAgICAgICAgTkZTRVJSX0VB R0FJTiA9IDExLAogICAgICAgIE5GU0VSUl9BQ0NFUyA9IDEzLAogICAgICAgIE5GU0VSUl9FWElT VCA9IDE3LAogICAgICAgIE5GU0VSUl9YREVWID0gMTgsCiAgICAgICAgTkZTRVJSX05PREVWID0g MTksCiAgICAgICAgTkZTRVJSX05PVERJUiA9IDIwLAogICAgICAgIE5GU0VSUl9JU0RJUiA9IDIx LAogICAgICAgIE5GU0VSUl9JTlZBTCA9IDIyLAogICAgICAgIE5GU0VSUl9GQklHID0gMjcsCiAg ICAgICAgTkZTRVJSX05PU1BDID0gMjgsCiAgICAgICAgTkZTRVJSX1JPRlMgPSAzMCwKICAgICAg ICBORlNFUlJfTUxJTksgPSAzMSwKICAgICAgICBORlNFUlJfT1BOT1RTVVBQID0gNDUsCiAgICAg ICAgTkZTRVJSX05BTUVUT09MT05HID0gNjMsCiAgICAgICAgTkZTRVJSX05PVEVNUFRZID0gNjYs CiAgICAgICAgTkZTRVJSX0RRVU9UID0gNjksCiAgICAgICAgTkZTRVJSX1NUQUxFID0gNzAsCiAg ICAgICAgTkZTRVJSX1JFTU9URSA9IDcxLAogICAgICAgIE5GU0VSUl9XRkxVU0ggPSA5OSwKICAg ICAgICBORlNFUlJfQkFESEFORExFID0gMTAwMDEsCiAgICAgICAgTkZTRVJSX05PVF9TWU5DID0g MTAwMDIsCiAgICAgICAgTkZTRVJSX0JBRF9DT09LSUUgPSAxMDAwMywKICAgICAgICBORlNFUlJf Tk9UU1VQUCA9IDEwMDA0LAogICAgICAgIE5GU0VSUl9UT09TTUFMTCA9IDEwMDA1LAogICAgICAg IE5GU0VSUl9TRVJWRVJGQVVMVCA9IDEwMDA2LAogICAgICAgIE5GU0VSUl9CQURUWVBFID0gMTAw MDcsCiAgICAgICAgTkZTRVJSX0pVS0VCT1ggPSAxMDAwOAogfTsKCgoKZW51bSBuZnNfZnR5cGUg ewogICAgICAgIE5GTk9OID0gMCwKICAgICAgICBORlJFRyA9IDEsCiAgICAgICAgTkZESVIgPSAy LAogICAgICAgIE5GQkxLID0gMywKICAgICAgICBORkNIUiA9IDQsCiAgICAgICAgTkZMTksgPSA1 LAogICAgICAgIE5GU09DSyA9IDYsCiAgICAgICAgTkZCQUQgPSA3LAogICAgICAgIE5GRklGTyA9 IDgKfTsKCgoKCgoKc3RydWN0IG5mc19maCB7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2l6ZTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIGRhdGFbNjRdOwp9OwojIDEwNyAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvbmZzLmgiCmVudW0gbmZzM19zdGFibGVfaG93IHsKICAgICAg ICBORlNfVU5TVEFCTEUgPSAwLAogICAgICAgIE5GU19EQVRBX1NZTkMgPSAxLAogICAgICAgIE5G U19GSUxFX1NZTkMgPSAyCn07CiMgNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbmZzX2ZzX2kuaCIgMgoKCgoKc3RydWN0IG5mc19pbm9kZV9pbmZvIHsKCgoKICAgICAgICBf X3U2NCBmc2lkOwogICAgICAgIF9fdTY0IGZpbGVpZDsKCgoKCiAgICAgICAgc3RydWN0IG5mc19m aCBmaDsKCgoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgZmxhZ3M7CiMgNDUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCiAgICAgICAgdW5zaWduZWQgbG9u ZyByZWFkX2NhY2hlX2ppZmZpZXM7CiAgICAgICAgX191NjQgcmVhZF9jYWNoZV9jdGltZTsKICAg ICAgICBfX3U2NCByZWFkX2NhY2hlX210aW1lOwogICAgICAgIF9fdTY0IHJlYWRfY2FjaGVfaXNp emU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBhdHRydGltZW87CiAgICAgICAgdW5zaWduZWQgbG9u ZyBhdHRydGltZW9fdGltZXN0YW1wOwoKCgoKCiAgICAgICAgX191MzIgY29va2lldmVyZlsyXTsK CgoKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCByZWFkOwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZGlydHk7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjb21taXQ7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCB3cml0ZWJhY2s7CgogICAgICAgIHVuc2lnbmVkIGludCBucmVhZCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBuZGlydHksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbmNvbW1pdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBucGFnZXM7 CgoKICAgICAgICBzdHJ1Y3QgaW5vZGUgKmhhc2hfbmV4dCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAqaGFzaF9wcmV2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbmV4dHNjYW47CgoK ICAgICAgICBzdHJ1Y3QgcnBjX2NyZWQgKm1tX2NyZWQ7Cn07CiMgOTIgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25mc19mc19pLmgiCnN0cnVjdCBuZnNfbG9ja19pbmZvIHsK ICAgICAgICB1MzIgc3RhdGU7CiAgICAgICAgdTMyIGZsYWdzOwogICAgICAgIHN0cnVjdCBubG1f aG9zdCAqaG9zdDsKfTsKIyAyOTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zeXN2X2Zz X2kuaCIgMQoKCgoKCgpzdHJ1Y3Qgc3lzdl9pbm9kZV9pbmZvIHsKICAgICAgICB1MzIgaV9kYXRh WzEwKzErMSsxXTsKCgoKCn07CiMgMjk1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYWZm c19mc19pLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9h Lm91dC5oIiAxCgoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9h Lm91dC5oIiAxCgoKCnN0cnVjdCBleGVjCnsKICB1bnNpZ25lZCBsb25nIGFfaW5mbzsKICB1bnNp Z25lZCBhX3RleHQ7CiAgdW5zaWduZWQgYV9kYXRhOwogIHVuc2lnbmVkIGFfYnNzOwogIHVuc2ln bmVkIGFfc3ltczsKICB1bnNpZ25lZCBhX2VudHJ5OwogIHVuc2lnbmVkIGFfdHJzaXplOwogIHVu c2lnbmVkIGFfZHJzaXplOwp9OwojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2Eub3V0LmgiIDIKCgoKCmVudW0gbWFjaGluZV90eXBlIHsKCgoKICBNX09MRFNVTjIgPSAw LAoKCgoKICBNXzY4MDEwID0gMSwKCgoKCiAgTV82ODAyMCA9IDIsCgoKCgogIE1fU1BBUkMgPSAz LAoKCiAgTV8zODYgPSAxMDAsCiAgTV9NSVBTMSA9IDE1MSwKICBNX01JUFMyID0gMTUyCn07CiMg MTMxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9hLm91dC5oIgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAxMzIgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiIDIKIyAxNTcgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Eub3V0LmgiCnN0cnVjdCBubGlzdCB7CiAgdW5pb24g ewogICAgY2hhciAqbl9uYW1lOwogICAgc3RydWN0IG5saXN0ICpuX25leHQ7CiAgICBsb25nIG5f c3RyeDsKICB9IG5fdW47CiAgdW5zaWduZWQgY2hhciBuX3R5cGU7CiAgY2hhciBuX290aGVyOwog IHNob3J0IG5fZGVzYzsKICB1bnNpZ25lZCBsb25nIG5fdmFsdWU7Cn07CiMgMjM1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9hLm91dC5oIgpzdHJ1Y3QgcmVsb2NhdGlvbl9p bmZvCnsKCiAgaW50IHJfYWRkcmVzczsKCiAgdW5zaWduZWQgaW50IHJfc3ltYm9sbnVtOjI0OwoK CgogIHVuc2lnbmVkIGludCByX3BjcmVsOjE7CgoKICB1bnNpZ25lZCBpbnQgcl9sZW5ndGg6MjsK CgoKCgoKICB1bnNpZ25lZCBpbnQgcl9leHRlcm46MTsKCgoKCgoKCiAgdW5zaWduZWQgaW50IHJf cGFkOjQ7Cgp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2FmZnNf ZnNfaS5oIiAyCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1l LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFyYW0uaCIg MQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyA2ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1lLmgiIDIKCgoKc3RydWN0IHRpbWVz cGVjIHsKICAgICAgICB0aW1lX3QgdHZfc2VjOwogICAgICAgIGxvbmcgdHZfbnNlYzsKfTsKIyAz MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZS5oIgpzdGF0aWMgX19p bmxpbmVfXyB1bnNpZ25lZCBsb25nCnRpbWVzcGVjX3RvX2ppZmZpZXMoc3RydWN0IHRpbWVzcGVj ICp2YWx1ZSkKewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2VjID0gdmFsdWUtPnR2X3NlYzsKICAg ICAgICBsb25nIG5zZWMgPSB2YWx1ZS0+dHZfbnNlYzsKCiAgICAgICAgaWYgKHNlYyA+PSAoKCh+ MFVMID4+IDEpLTEpIC8gMTAwKSkKICAgICAgICAgICAgICAgIHJldHVybiAoKH4wVUwgPj4gMSkt MSk7CiAgICAgICAgbnNlYyArPSAxMDAwMDAwMDAwTCAvIDEwMCAtIDE7CiAgICAgICAgbnNlYyAv PSAxMDAwMDAwMDAwTCAvIDEwMDsKICAgICAgICByZXR1cm4gMTAwICogc2VjICsgbnNlYzsKfQoK c3RhdGljIF9faW5saW5lX18gdm9pZApqaWZmaWVzX3RvX3RpbWVzcGVjKHVuc2lnbmVkIGxvbmcg amlmZmllcywgc3RydWN0IHRpbWVzcGVjICp2YWx1ZSkKewogICAgICAgIHZhbHVlLT50dl9uc2Vj ID0gKGppZmZpZXMgJSAxMDApICogKDEwMDAwMDAwMDBMIC8gMTAwKTsKICAgICAgICB2YWx1ZS0+ dHZfc2VjID0gamlmZmllcyAvIDEwMDsKfQojIDY3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC90aW1lLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpta3RpbWUgKHVu c2lnbmVkIGludCB5ZWFyLCB1bnNpZ25lZCBpbnQgbW9uLAogICAgICAgIHVuc2lnbmVkIGludCBk YXksIHVuc2lnbmVkIGludCBob3VyLAogICAgICAgIHVuc2lnbmVkIGludCBtaW4sIHVuc2lnbmVk IGludCBzZWMpCnsKICAgICAgICBpZiAoMCA+PSAoaW50KSAobW9uIC09IDIpKSB7CiAgICAgICAg ICAgICAgICBtb24gKz0gMTI7CiAgICAgICAgICAgICAgICB5ZWFyIC09IDE7CiAgICAgICAgfQoK ICAgICAgICByZXR1cm4gKCgoCiAgICAgICAgICAgICAgICAodW5zaWduZWQgbG9uZykgKHllYXIv NCAtIHllYXIvMTAwICsgeWVhci80MDAgKyAzNjcqbW9uLzEyICsgZGF5KSArCiAgICAgICAgICAg ICAgICAgICAgICAgIHllYXIqMzY1IC0gNzE5NDk5CiAgICAgICAgICAgICkqMjQgKyBob3VyCiAg ICAgICAgICApKjYwICsgbWluCiAgICAgICAgKSo2MCArIHNlYzsKfQoKCgoKc3RydWN0IHRpbWV2 YWwgewogICAgICAgIHRpbWVfdCB0dl9zZWM7CiAgICAgICAgc3VzZWNvbmRzX3QgdHZfdXNlYzsK fTsKCnN0cnVjdCB0aW1lem9uZSB7CiAgICAgICAgaW50IHR6X21pbnV0ZXN3ZXN0OwogICAgICAg IGludCB0el9kc3R0aW1lOwp9OwoKCgoKZXh0ZXJuIHZvaWQgZG9fZ2V0dGltZW9mZGF5KHN0cnVj dCB0aW1ldmFsICp0dik7CmV4dGVybiB2b2lkIGRvX3NldHRpbWVvZmRheShzdHJ1Y3QgdGltZXZh bCAqdHYpOwpleHRlcm4gdm9pZCBnZXRfZmFzdF90aW1lKHN0cnVjdCB0aW1ldmFsICp0dik7CmV4 dGVybiB2b2lkICgqZG9fZ2V0X2Zhc3RfdGltZSkoc3RydWN0IHRpbWV2YWwgKik7CiMgMTIxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1lLmgiCnN0cnVjdCBpdGltZXJz cGVjIHsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0 IHRpbWVzcGVjIGl0X3ZhbHVlOwp9OwoKc3RydWN0IGl0aW1lcnZhbCB7CiAgICAgICAgc3RydWN0 IHRpbWV2YWwgaXRfaW50ZXJ2YWw7CiAgICAgICAgc3RydWN0IHRpbWV2YWwgaXRfdmFsdWU7Cn07 CiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiIDIK IyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYWZmc19mc19pLmgiCnN0 cnVjdCBhZmZzX2V4dF9rZXkgewogICAgICAgIHUzMiBleHQ7CiAgICAgICAgdTMyIGtleTsKfTsK CgoKCnN0cnVjdCBhZmZzX2lub2RlX2luZm8gewogICAgICAgIHUzMiBpX29wZW5jbnQ7CiAgICAg ICAgc3RydWN0IHNlbWFwaG9yZSBpX2xpbmtfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3Jl IGlfZXh0X2xvY2s7CgogICAgICAgIHUzMiBpX2Jsa2NudDsKICAgICAgICB1MzIgaV9leHRjbnQ7 CiAgICAgICAgdTMyICppX2xjOwogICAgICAgIHUzMiBpX2xjX3NpemU7CiAgICAgICAgdTMyIGlf bGNfc2hpZnQ7CiAgICAgICAgdTMyIGlfbGNfbWFzazsKICAgICAgICBzdHJ1Y3QgYWZmc19leHRf a2V5ICppX2FjOwogICAgICAgIHUzMiBpX2V4dF9sYXN0OwogICAgICAgIHN0cnVjdCBidWZmZXJf aGVhZCAqaV9leHRfYmg7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAg ICB1MzIgaV9wcm90ZWN0OwogICAgICAgIHUzMiBpX2xhc3RhbGxvYzsKICAgICAgICBpbnQgaV9w YV9jbnQ7CiMgNTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2FmZnNfZnNf aS5oIgp9OwojIDI5NiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19mc19pLmgiIDEK IyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdWZzX2ZzX2kuaCIKc3Ry dWN0IHVmc19pbm9kZV9pbmZvIHsKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBfX3Uz MiBpX2RhdGFbMTVdOwogICAgICAgICAgICAgICAgX191OCBpX3N5bWxpbmtbNCoxNV07CiAgICAg ICAgfSBpX3UxOwogICAgICAgIF9fdTY0IGlfc2l6ZTsKICAgICAgICBfX3UzMiBpX2ZsYWdzOwog ICAgICAgIF9fdTMyIGlfZ2VuOwogICAgICAgIF9fdTMyIGlfc2hhZG93OwogICAgICAgIF9fdTMy IGlfdW51c2VkMTsKICAgICAgICBfX3UzMiBpX3VudXNlZDI7CiAgICAgICAgX191MzIgaV9vZWZ0 ZmxhZzsKICAgICAgICBfX3UxNiBpX29zeW5jOwogICAgICAgIF9fdTMyIGlfbGFzdGZyYWc7Cn07 CiMgMjk3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZWZzX2ZzX2kuaCIgMQojIDEyICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9lZnNfZnNfaS5oIgp0eXBlZGVmIGlu dDMyX3QgZWZzX2Jsb2NrX3Q7CnR5cGVkZWYgdWludDMyX3QgZWZzX2lub190OwoKCgoKCgp0eXBl ZGVmIHVuaW9uIGV4dGVudF91IHsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJhd1s4XTsKICAgICAg ICBzdHJ1Y3QgZXh0ZW50X3MgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGV4X21hZ2lj Ojg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZXhfYm46MjQ7CiAgICAgICAgICAgICAg ICB1bnNpZ25lZCBpbnQgZXhfbGVuZ3RoOjg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg ZXhfb2Zmc2V0OjI0OwogICAgICAgIH0gY29va2VkOwp9IGVmc19leHRlbnQ7Cgp0eXBlZGVmIHN0 cnVjdCBlZGV2cyB7CiAgICAgICAgc2hvcnQgb2RldjsKICAgICAgICB1bnNpZ25lZCBpbnQgbmRl djsKfSBlZnNfZGV2czsKCgoKCgpzdHJ1Y3QgZWZzX2Rpbm9kZSB7CiAgICAgICAgdV9zaG9ydCBk aV9tb2RlOwogICAgICAgIHNob3J0IGRpX25saW5rOwogICAgICAgIHVfc2hvcnQgZGlfdWlkOwog ICAgICAgIHVfc2hvcnQgZGlfZ2lkOwogICAgICAgIGludDMyX3QgZGlfc2l6ZTsKICAgICAgICBp bnQzMl90IGRpX2F0aW1lOwogICAgICAgIGludDMyX3QgZGlfbXRpbWU7CiAgICAgICAgaW50MzJf dCBkaV9jdGltZTsKICAgICAgICB1aW50MzJfdCBkaV9nZW47CiAgICAgICAgc2hvcnQgZGlfbnVt ZXh0ZW50czsKICAgICAgICB1X2NoYXIgZGlfdmVyc2lvbjsKICAgICAgICB1X2NoYXIgZGlfc3Bh cmU7CiAgICAgICAgdW5pb24gZGlfYWRkciB7CiAgICAgICAgICAgICAgICBlZnNfZXh0ZW50IGRp X2V4dGVudHNbMTJdOwogICAgICAgICAgICAgICAgZWZzX2RldnMgZGlfZGV2OwogICAgICAgIH0g ZGlfdTsKfTsKCgpzdHJ1Y3QgZWZzX2lub2RlX2luZm8gewogICAgICAgIGludCBudW1leHRlbnRz OwogICAgICAgIGludCBsYXN0ZXh0ZW50OwoKICAgICAgICBlZnNfZXh0ZW50IGV4dGVudHNbMTJd Owp9OwojIDI5OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIiAxCiMg MTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGFfZnNfaS5oIgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAxMyAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyAxNCAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29kYV9mc19pLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb2RhLmgiIDEKIyAxMDkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcg dV9xdWFkX3Q7CiMgMTY0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb2Rh LmgiCnN0cnVjdCB2ZW51c19kaXJlbnQgewogICAgICAgIHVuc2lnbmVkIGxvbmcgZF9maWxlbm87 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgZF9yZWNsZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBk X3R5cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBkX25hbWxlbjsKICAgICAgICBjaGFyIGRfbmFt ZVsyNTUgKyAxXTsKfTsKIyAxOTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2NvZGEuaCIKdHlwZWRlZiB1X2xvbmcgVm9sdW1lSWQ7CnR5cGVkZWYgdV9sb25nIFZub2RlSWQ7 CnR5cGVkZWYgdV9sb25nIFVuaXF1ZV90Owp0eXBlZGVmIHVfbG9uZyBGaWxlVmVyc2lvbjsKCgoK CnR5cGVkZWYgc3RydWN0IFZpY2VGaWQgewogICAgVm9sdW1lSWQgVm9sdW1lOwogICAgVm5vZGVJ ZCBWbm9kZTsKICAgIFVuaXF1ZV90IFVuaXF1ZTsKfSBWaWNlRmlkOwoKCgoKc3RhdGljIF9faW5s aW5lX18gaW5vX3QgY29kYV9mMmkoc3RydWN0IFZpY2VGaWQgKmZpZCkKewogICAgICAgIGlmICgg ISBmaWQgKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgaWYgKGZpZC0+Vm5vZGUg PT0gMHhmZmZmZmZmZSB8fCBmaWQtPlZub2RlID09IDB4ZmZmZmZmZmYpCiAgICAgICAgICAgICAg ICByZXR1cm4gKChmaWQtPlZvbHVtZSA8PCAyMCkgfCAoZmlkLT5VbmlxdWUgJiAweGZmZmZmKSk7 CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0dXJuIChmaWQtPlVuaXF1ZSArIChmaWQt PlZub2RlPDwxMCkgKyAoZmlkLT5Wb2x1bWU8PDIwKSk7Cn0KIyAyMzMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKdHlwZWRlZiB1X2ludDMyX3QgdnVpZF90Owp0 eXBlZGVmIHVfaW50MzJfdCB2Z2lkX3Q7CgoKCgpzdHJ1Y3QgY29kYV9jcmVkIHsKICAgIHZ1aWRf dCBjcl91aWQsIGNyX2V1aWQsIGNyX3N1aWQsIGNyX2ZzdWlkOwogICAgdmdpZF90IGNyX2dyb3Vw aWQsIGNyX2VnaWQsIGNyX3NnaWQsIGNyX2ZzZ2lkOwp9OwoKCgoKCgoKZW51bSBjb2RhX3Z0eXBl IHsgQ19WTk9OLCBDX1ZSRUcsIENfVkRJUiwgQ19WQkxLLCBDX1ZDSFIsIENfVkxOSywgQ19WU09D SywgQ19WRklGTywgQ19WQkFEIH07CgpzdHJ1Y3QgY29kYV92YXR0ciB7CiAgICAgICAgbG9uZyB2 YV90eXBlOwogICAgICAgIHVfc2hvcnQgdmFfbW9kZTsKICAgICAgICBzaG9ydCB2YV9ubGluazsK ICAgICAgICB2dWlkX3QgdmFfdWlkOwogICAgICAgIHZnaWRfdCB2YV9naWQ7CiAgICAgICAgbG9u ZyB2YV9maWxlaWQ7CiAgICAgICAgdV9xdWFkX3QgdmFfc2l6ZTsKICAgICAgICBsb25nIHZhX2Js b2Nrc2l6ZTsKICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgdmFfYXRpbWU7CiAgICAgICAgc3RydWN0 IHRpbWVzcGVjIHZhX210aW1lOwogICAgICAgIHN0cnVjdCB0aW1lc3BlYyB2YV9jdGltZTsKICAg ICAgICB1X2xvbmcgdmFfZ2VuOwogICAgICAgIHVfbG9uZyB2YV9mbGFnczsKICAgICAgICB1X3F1 YWRfdCB2YV9yZGV2OwogICAgICAgIHVfcXVhZF90IHZhX2J5dGVzOwogICAgICAgIHVfcXVhZF90 IHZhX2ZpbGVyZXY7Cn07CgoKCgpzdHJ1Y3QgY29kYV9zdGF0ZnMgewogICAgaW50MzJfdCBmX2Js b2NrczsKICAgIGludDMyX3QgZl9iZnJlZTsKICAgIGludDMyX3QgZl9iYXZhaWw7CiAgICBpbnQz Ml90IGZfZmlsZXM7CiAgICBpbnQzMl90IGZfZmZyZWU7Cn07CiMgMzM3ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb2RhLmgiCnN0cnVjdCBjb2RhX2luX2hkciB7CiAgICB1 bnNpZ25lZCBsb25nIG9wY29kZTsKICAgIHVuc2lnbmVkIGxvbmcgdW5pcXVlOwogICAgdV9zaG9y dCBwaWQ7CiAgICB1X3Nob3J0IHBnaWQ7CiAgICB1X3Nob3J0IHNpZDsKICAgIHN0cnVjdCBjb2Rh X2NyZWQgY3JlZDsKfTsKCgpzdHJ1Y3QgY29kYV9vdXRfaGRyIHsKICAgIHVuc2lnbmVkIGxvbmcg b3Bjb2RlOwogICAgdW5zaWduZWQgbG9uZyB1bmlxdWU7CiAgICB1bnNpZ25lZCBsb25nIHJlc3Vs dDsKfTsKCgpzdHJ1Y3QgY29kYV9yb290X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9o OwogICAgVmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfcm9vdF9pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaW47Cn07CgoKc3RydWN0IGNvZGFfb3Blbl9pbiB7CiAgICBzdHJ1Y3QgY29k YV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3Qg Y29kYV9vcGVuX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgdV9xdWFkX3Qg ZGV2OwogICAgaW5vX3QgaW5vZGU7Cn07CgoKCnN0cnVjdCBjb2RhX3N0b3JlX2luIHsKICAgIHN0 cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBmbGFnczsKfTsK CnN0cnVjdCBjb2RhX3N0b3JlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsK CgpzdHJ1Y3QgY29kYV9yZWxlYXNlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKICAgIGludCBmbGFnczsKfTsKCnN0cnVjdCBjb2RhX3JlbGVhc2Vfb3V0 IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX2Nsb3NlX2lu IHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCBm bGFnczsKfTsKCnN0cnVjdCBjb2RhX2Nsb3NlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9pb2N0bF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIg aWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgY21kOwogICAgaW50IGxlbjsKICAgIGludCBy d2ZsYWc7CiAgICBjaGFyICpkYXRhOwp9OwoKc3RydWN0IGNvZGFfaW9jdGxfb3V0IHsKICAgIHN0 cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBpbnQgbGVuOwogICAgY2FkZHJfdCBkYXRhOwp9OwoK CgpzdHJ1Y3QgY29kYV9nZXRhdHRyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKfTsKCnN0cnVjdCBjb2RhX2dldGF0dHJfb3V0IHsKICAgIHN0cnVjdCBj b2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRyOwp9OwoKCgpzdHJ1Y3Qg Y29kYV9zZXRhdHRyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQg VkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7Cn07CgpzdHJ1Y3QgY29kYV9zZXRhdHRy X291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29kYV9hY2Nl c3NfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwogICAg aW50IGZsYWdzOwp9OwoKc3RydWN0IGNvZGFfYWNjZXNzX291dCB7CiAgICBzdHJ1Y3QgY29kYV9v dXRfaGRyIG91dDsKfTsKCgoKCgoKCnN0cnVjdCBjb2RhX2xvb2t1cF9pbiB7CiAgICBzdHJ1Y3Qg Y29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgbmFtZTsKICAgIGludCBm bGFnczsKfTsKCnN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCB2dHlwZTsKfTsKCgoKc3RydWN0IGNvZGFf Y3JlYXRlX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgVkZpZDsK ICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgICBpbnQgZXhjbDsKICAgIGludCBtb2RlOwog ICAgaW50IG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IHsKICAgIHN0cnVjdCBjb2Rh X291dF9oZHIgb2g7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBzdHJ1Y3QgY29kYV92YXR0ciBhdHRy Owp9OwoKCgpzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGlo OwogICAgVmljZUZpZCBWRmlkOwogICAgaW50IG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9yZW1vdmVf b3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9OwoKCnN0cnVjdCBjb2RhX2xpbmtf aW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBzb3VyY2VGaWQ7CiAg ICBWaWNlRmlkIGRlc3RGaWQ7CiAgICBpbnQgdG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9saW5rX291 dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgoKc3RydWN0IGNvZGFfcmVuYW1l X2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAgIFZpY2VGaWQgc291cmNlRmlkOwog ICAgaW50IHNyY25hbWU7CiAgICBWaWNlRmlkIGRlc3RGaWQ7CiAgICBpbnQgZGVzdG5hbWU7Cn07 CgpzdHJ1Y3QgY29kYV9yZW5hbWVfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9 OwoKCnN0cnVjdCBjb2RhX21rZGlyX2luIHsKICAgIHN0cnVjdCBjb2RhX2luX2hkciBpaDsKICAg IFZpY2VGaWQgVkZpZDsKICAgIHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgICBpbnQgbmFtZTsK fTsKCnN0cnVjdCBjb2RhX21rZGlyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwog ICAgVmljZUZpZCBWRmlkOwogICAgc3RydWN0IGNvZGFfdmF0dHIgYXR0cjsKfTsKCgoKc3RydWN0 IGNvZGFfcm1kaXJfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBW RmlkOwogICAgaW50IG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9ybWRpcl9vdXQgewogICAgc3RydWN0 IGNvZGFfb3V0X2hkciBvdXQ7Cn07CgoKc3RydWN0IGNvZGFfc3ltbGlua19pbiB7CiAgICBzdHJ1 Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgc3JjbmFtZTsKICAg IHN0cnVjdCBjb2RhX3ZhdHRyIGF0dHI7CiAgICBpbnQgdG5hbWU7Cn07CgpzdHJ1Y3QgY29kYV9z eW1saW5rX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG91dDsKfTsKCgpzdHJ1Y3QgY29k YV9yZWFkbGlua19pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZG aWQ7Cn07CgpzdHJ1Y3QgY29kYV9yZWFkbGlua19vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hk ciBvaDsKICAgIGludCBjb3VudDsKICAgIGNhZGRyX3QgZGF0YTsKfTsKCgoKc3RydWN0IGNvZGFf ZnN5bmNfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgVmljZUZpZCBWRmlkOwp9 OwoKc3RydWN0IGNvZGFfZnN5bmNfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb3V0Owp9 OwoKCnN0cnVjdCBjb2RhX3ZnZXRfaW4gewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAg VmljZUZpZCBWRmlkOwp9OwoKc3RydWN0IGNvZGFfdmdldF9vdXQgewogICAgc3RydWN0IGNvZGFf b3V0X2hkciBvaDsKICAgIFZpY2VGaWQgVkZpZDsKICAgIGludCB2dHlwZTsKfTsKIyA2MTYgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKc3RydWN0IGNvZGFfcHVy Z2V1c2VyX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgc3RydWN0IGNvZGFf Y3JlZCBjcmVkOwp9OwoKCgpzdHJ1Y3QgY29kYV96YXBmaWxlX291dCB7CiAgICBzdHJ1Y3QgY29k YV9vdXRfaGRyIG9oOwogICAgVmljZUZpZCBDb2RhRmlkOwp9OwoKCgpzdHJ1Y3QgY29kYV96YXBk aXJfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBWaWNlRmlkIENvZGFGaWQ7 Cn07CgoKCnN0cnVjdCBjb2RhX3phcHZub2RlX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRy IG9oOwogICAgc3RydWN0IGNvZGFfY3JlZCBjcmVkOwogICAgVmljZUZpZCBWRmlkOwp9OwoKCgpz dHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgewogICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAg IFZpY2VGaWQgQ29kYUZpZDsKfTsKCgoKc3RydWN0IGNvZGFfcmVwbGFjZV9vdXQgewogICAgc3Ry dWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIFZpY2VGaWQgTmV3RmlkOwogICAgVmljZUZpZCBPbGRG aWQ7Cn07CgoKc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9pbiB7CiAgICBzdHJ1Y3QgY29kYV9pbl9o ZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxhZ3M7Cn07CgpzdHJ1Y3QgY29kYV9v cGVuX2J5X2ZkX291dCB7CiAgICBzdHJ1Y3QgY29kYV9vdXRfaGRyIG9oOwogICAgaW50IGZkOwoK CiAgICBzdHJ1Y3QgZmlsZSAqZmg7Cgp9OwoKCnN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9pbiB7 CiAgICBzdHJ1Y3QgY29kYV9pbl9oZHIgaWg7CiAgICBWaWNlRmlkIFZGaWQ7CiAgICBpbnQgZmxh Z3M7Cn07CgpzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfb3V0IHsKICAgIHN0cnVjdCBjb2RhX291 dF9oZHIgb2g7CiAgICAgICAgaW50IHBhdGg7Cn07CgoKc3RydWN0IGNvZGFfc3RhdGZzX2luIHsK ICAgIHN0cnVjdCBjb2RhX2luX2hkciBpbjsKfTsKCnN0cnVjdCBjb2RhX3N0YXRmc19vdXQgewog ICAgc3RydWN0IGNvZGFfb3V0X2hkciBvaDsKICAgIHN0cnVjdCBjb2RhX3N0YXRmcyBzdGF0Owp9 OwojIDcwMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29kYS5oIgp1bmlv biBpbnB1dEFyZ3MgewogICAgc3RydWN0IGNvZGFfaW5faGRyIGloOwogICAgc3RydWN0IGNvZGFf b3Blbl9pbiBjb2RhX29wZW47CiAgICBzdHJ1Y3QgY29kYV9zdG9yZV9pbiBjb2RhX3N0b3JlOwog ICAgc3RydWN0IGNvZGFfcmVsZWFzZV9pbiBjb2RhX3JlbGVhc2U7CiAgICBzdHJ1Y3QgY29kYV9j bG9zZV9pbiBjb2RhX2Nsb3NlOwogICAgc3RydWN0IGNvZGFfaW9jdGxfaW4gY29kYV9pb2N0bDsK ICAgIHN0cnVjdCBjb2RhX2dldGF0dHJfaW4gY29kYV9nZXRhdHRyOwogICAgc3RydWN0IGNvZGFf c2V0YXR0cl9pbiBjb2RhX3NldGF0dHI7CiAgICBzdHJ1Y3QgY29kYV9hY2Nlc3NfaW4gY29kYV9h Y2Nlc3M7CiAgICBzdHJ1Y3QgY29kYV9sb29rdXBfaW4gY29kYV9sb29rdXA7CiAgICBzdHJ1Y3Qg Y29kYV9jcmVhdGVfaW4gY29kYV9jcmVhdGU7CiAgICBzdHJ1Y3QgY29kYV9yZW1vdmVfaW4gY29k YV9yZW1vdmU7CiAgICBzdHJ1Y3QgY29kYV9saW5rX2luIGNvZGFfbGluazsKICAgIHN0cnVjdCBj b2RhX3JlbmFtZV9pbiBjb2RhX3JlbmFtZTsKICAgIHN0cnVjdCBjb2RhX21rZGlyX2luIGNvZGFf bWtkaXI7CiAgICBzdHJ1Y3QgY29kYV9ybWRpcl9pbiBjb2RhX3JtZGlyOwogICAgc3RydWN0IGNv ZGFfc3ltbGlua19pbiBjb2RhX3N5bWxpbms7CiAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19pbiBj b2RhX3JlYWRsaW5rOwogICAgc3RydWN0IGNvZGFfZnN5bmNfaW4gY29kYV9mc3luYzsKICAgIHN0 cnVjdCBjb2RhX3ZnZXRfaW4gY29kYV92Z2V0OwogICAgc3RydWN0IGNvZGFfb3Blbl9ieV9mZF9p biBjb2RhX29wZW5fYnlfZmQ7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX2J5X3BhdGhfaW4gY29kYV9v cGVuX2J5X3BhdGg7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnNfaW4gY29kYV9zdGF0ZnM7Cn07Cgp1 bmlvbiBvdXRwdXRBcmdzIHsKICAgIHN0cnVjdCBjb2RhX291dF9oZHIgb2g7CiAgICBzdHJ1Y3Qg Y29kYV9yb290X291dCBjb2RhX3Jvb3Q7CiAgICBzdHJ1Y3QgY29kYV9vcGVuX291dCBjb2RhX29w ZW47CiAgICBzdHJ1Y3QgY29kYV9pb2N0bF9vdXQgY29kYV9pb2N0bDsKICAgIHN0cnVjdCBjb2Rh X2dldGF0dHJfb3V0IGNvZGFfZ2V0YXR0cjsKICAgIHN0cnVjdCBjb2RhX2xvb2t1cF9vdXQgY29k YV9sb29rdXA7CiAgICBzdHJ1Y3QgY29kYV9jcmVhdGVfb3V0IGNvZGFfY3JlYXRlOwogICAgc3Ry dWN0IGNvZGFfbWtkaXJfb3V0IGNvZGFfbWtkaXI7CiAgICBzdHJ1Y3QgY29kYV9yZWFkbGlua19v dXQgY29kYV9yZWFkbGluazsKICAgIHN0cnVjdCBjb2RhX3ZnZXRfb3V0IGNvZGFfdmdldDsKICAg IHN0cnVjdCBjb2RhX3B1cmdldXNlcl9vdXQgY29kYV9wdXJnZXVzZXI7CiAgICBzdHJ1Y3QgY29k YV96YXBmaWxlX291dCBjb2RhX3phcGZpbGU7CiAgICBzdHJ1Y3QgY29kYV96YXBkaXJfb3V0IGNv ZGFfemFwZGlyOwogICAgc3RydWN0IGNvZGFfemFwdm5vZGVfb3V0IGNvZGFfemFwdm5vZGU7CiAg ICBzdHJ1Y3QgY29kYV9wdXJnZWZpZF9vdXQgY29kYV9wdXJnZWZpZDsKICAgIHN0cnVjdCBjb2Rh X3JlcGxhY2Vfb3V0IGNvZGFfcmVwbGFjZTsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfZmRfb3V0 IGNvZGFfb3Blbl9ieV9mZDsKICAgIHN0cnVjdCBjb2RhX29wZW5fYnlfcGF0aF9vdXQgY29kYV9v cGVuX2J5X3BhdGg7CiAgICBzdHJ1Y3QgY29kYV9zdGF0ZnNfb3V0IGNvZGFfc3RhdGZzOwp9OwoK dW5pb24gY29kYV9kb3duY2FsbHMgewoKCiAgICBzdHJ1Y3QgY29kYV9wdXJnZXVzZXJfb3V0IHB1 cmdldXNlcjsKICAgIHN0cnVjdCBjb2RhX3phcGZpbGVfb3V0IHphcGZpbGU7CiAgICBzdHJ1Y3Qg Y29kYV96YXBkaXJfb3V0IHphcGRpcjsKICAgIHN0cnVjdCBjb2RhX3phcHZub2RlX291dCB6YXB2 bm9kZTsKICAgIHN0cnVjdCBjb2RhX3B1cmdlZmlkX291dCBwdXJnZWZpZDsKICAgIHN0cnVjdCBj b2RhX3JlcGxhY2Vfb3V0IHJlcGxhY2U7Cn07CgoKCgoKCgpzdHJ1Y3QgVmljZUlvY3RsIHsKICAg ICAgICBjYWRkcl90IGluLCBvdXQ7CiAgICAgICAgc2hvcnQgaW5fc2l6ZTsKICAgICAgICBzaG9y dCBvdXRfc2l6ZTsKfTsKCnN0cnVjdCBQaW9jdGxEYXRhIHsKICAgICAgICBjb25zdCBjaGFyICpw YXRoOwogICAgICAgIGludCBmb2xsb3c7CiAgICAgICAgc3RydWN0IFZpY2VJb2N0bCB2aTsKfTsK IyA3OTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvZGEuaCIKc3RydWN0 IGNvZGFfbW91bnRfZGF0YSB7CiAgICAgICAgaW50IHZlcnNpb247CiAgICAgICAgaW50IGZkOwp9 OwojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb2RhX2ZzX2kuaCIg MgoKCgoKc3RydWN0IGNvZGFfaW5vZGVfaW5mbyB7CiAgICAgICAgc3RydWN0IFZpY2VGaWQgY19m aWQ7CiAgICAgICAgdV9zaG9ydCBjX2ZsYWdzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgY19j aWxpc3Q7CiAgICAgICAgc3RydWN0IGZpbGUgKmNfY29udGFpbmVyOwogICAgICAgIHVuc2lnbmVk IGludCBjX2NvbnRjb3VudDsKICAgICAgICBzdHJ1Y3QgY29kYV9jcmVkIGNfY2FjaGVkX2NyZWQ7 CiAgICAgICAgdW5zaWduZWQgaW50IGNfY2FjaGVkX3Blcm07Cn07CgoKCgoKCgppbnQgY29kYV9j bm9kZV9tYWtlKHN0cnVjdCBpbm9kZSAqKiwgc3RydWN0IFZpY2VGaWQgKiwgc3RydWN0IHN1cGVy X2Jsb2NrICopOwppbnQgY29kYV9jbm9kZV9tYWtlY3RsKHN0cnVjdCBpbm9kZSAqKmlub2RlLCBz dHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKc3RydWN0IGlub2RlICpjb2RhX2ZpZF90b19pbm9kZShW aWNlRmlkICpmaWQsIHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwp2b2lkIGNvZGFfcmVwbGFjZV9m aWQoc3RydWN0IGlub2RlICosIFZpY2VGaWQgKiwgVmljZUZpZCAqKTsKIyAyOTkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9yb21mc19mc19pLmgiIDEKCgoKCgpzdHJ1Y3Qgcm9tZnNfaW5v ZGVfaW5mbyB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX21ldGFzaXplOwogICAgICAgIHVuc2ln bmVkIGxvbmcgaV9kYXRhb2Zmc2V0Owp9OwojIDMwMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3NobWVtX2ZzLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvc2htZW1fZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgdmFs Owp9IHN3cF9lbnRyeV90OwoKc3RydWN0IHNobWVtX2lub2RlX2luZm8gewogICAgICAgIHNwaW5s b2NrX3QgbG9jazsKICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9pbmRleDsKICAgICAgICBzd3Bf ZW50cnlfdCBpX2RpcmVjdFsxNl07CiAgICAgICAgc3dwX2VudHJ5X3QgKippX2luZGlyZWN0Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgc3dhcHBlZDsKICAgICAgICBpbnQgbG9ja2VkOwogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKfTsKCnN0cnVjdCBzaG1lbV9zYl9pbmZvIHsKICAgICAg ICB1bnNpZ25lZCBsb25nIG1heF9ibG9ja3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmcmVlX2Js b2NrczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1heF9pbm9kZXM7CiAgICAgICAgdW5zaWduZWQg bG9uZyBmcmVlX2lub2RlczsKICAgICAgICBzcGlubG9ja190IHN0YXRfbG9jazsKfTsKIyAzMDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oIiAxCiMgMTMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NtYl9mc19pLmgiCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9zbWJfZnNfaS5oIiAyCgoKCgpzdHJ1Y3Qgc21iX2lub2RlX2lu Zm8gewoKCgoKCiAgICAgICAgdW5zaWduZWQgaW50IG9wZW47CiAgICAgICAgX191MTYgZmlsZWlk OwogICAgICAgIF9fdTE2IGF0dHI7CgogICAgICAgIF9fdTE2IGFjY2VzczsKICAgICAgICBfX3Ux NiBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIG9sZG10aW1lOwogICAgICAgIHVuc2lnbmVk IGxvbmcgY2xvc2VkOwogICAgICAgIHVuc2lnbmVkIG9wZW5lcnM7Cn07CiMgMzAyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvaGZzX2ZzX2kuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9oZnNfZnNfaS5oIgpzdHJ1Y3QgaGZzX2lub2RlX2luZm8gewog ICAgICAgIGludCBtYWdpYzsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAg ICAgICBzdHJ1Y3QgaGZzX2NhdF9lbnRyeSAqZW50cnk7CgoKICAgICAgICBzdHJ1Y3QgaGZzX2Zv cmsgKmZvcms7CiAgICAgICAgaW50IGNvbnZlcnQ7CgoKICAgICAgICBpbm9fdCBmaWxlX3R5cGU7 CiAgICAgICAgY2hhciBkaXJfc2l6ZTsKCgogICAgICAgIGNvbnN0IHN0cnVjdCBoZnNfaGRyX2xh eW91dCAqZGVmYXVsdF9sYXlvdXQ7CiAgICAgICAgc3RydWN0IGhmc19oZHJfbGF5b3V0ICpsYXlv dXQ7CgoKICAgICAgICBpbnQgdHpfc2Vjb25kc3dlc3Q7CgoKICAgICAgICB2b2lkICgqZF9kcm9w X29wKShzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGlub190KTsKfTsKIyAzMDMgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIgMQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9hZGZzX2ZzX2kuaCIKc3RydWN0IGFkZnNfaW5vZGVfaW5mbyB7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBtbXVfcHJpdmF0ZTsKICAgICAgICB1bnNpZ25lZCBsb25nIHBh cmVudF9pZDsKICAgICAgICBfX3UzMiBsb2FkYWRkcjsKICAgICAgICBfX3UzMiBleGVjYWRkcjsK ICAgICAgICB1bnNpZ25lZCBpbnQgZmlsZXR5cGU7CiAgICAgICAgdW5zaWduZWQgaW50IGF0dHI7 CiAgICAgICAgaW50IHN0YW1wZWQ6MTsKfTsKIyAzMDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9xbng0X2ZzX2kuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9xbng0X2ZzX2kuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9xbnh0eXBlcy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3FueHR5cGVzLmgiCnR5cGVkZWYgX191MTYgcW54NF9ueHRudF90Owp0eXBlZGVmIF9fdTggcW54 NF9mdHlwZV90OwoKdHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIF9fdTMyIHh0bnRfYmxrOwogICAg ICAgIF9fdTMyIHh0bnRfc2l6ZTsKfSBxbng0X3h0bnRfdDsKCnR5cGVkZWYgX191MTYgcW54NF9t b2RlX3Q7CnR5cGVkZWYgX191MTYgcW54NF9tdWlkX3Q7CnR5cGVkZWYgX191MTYgcW54NF9tZ2lk X3Q7CnR5cGVkZWYgX191MzIgcW54NF9vZmZfdDsKdHlwZWRlZiBfX3UxNiBxbng0X25saW5rX3Q7 CiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3FueDRfZnNfaS5oIiAy CgoKCgpzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvIHsKICAgICAgICBjaGFyIGlfcmVzZXJ2ZWRbMTZd OwogICAgICAgIHFueDRfb2ZmX3QgaV9zaXplOwogICAgICAgIHFueDRfeHRudF90IGlfZmlyc3Rf eHRudDsKICAgICAgICBfX3UzMiBpX3hibGs7CiAgICAgICAgX19zMzIgaV9mdGltZTsKICAgICAg ICBfX3MzMiBpX210aW1lOwogICAgICAgIF9fczMyIGlfYXRpbWU7CiAgICAgICAgX19zMzIgaV9j dGltZTsKICAgICAgICBxbng0X254dG50X3QgaV9udW1feHRudHM7CiAgICAgICAgcW54NF9tb2Rl X3QgaV9tb2RlOwogICAgICAgIHFueDRfbXVpZF90IGlfdWlkOwogICAgICAgIHFueDRfbWdpZF90 IGlfZ2lkOwogICAgICAgIHFueDRfbmxpbmtfdCBpX25saW5rOwogICAgICAgIF9fdTggaV96ZXJv WzRdOwogICAgICAgIHFueDRfZnR5cGVfdCBpX3R5cGU7CiAgICAgICAgX191OCBpX3N0YXR1czsK ICAgICAgICB1bnNpZ25lZCBsb25nIG1tdV9wcml2YXRlOwp9OwojIDMwNSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX2kuaCIgMgoKc3RydWN0IHJlaXNlcmZzX2lub2Rl X2luZm8gewogIF9fdTMyIGlfa2V5IFs0XTsKCgoKCgoKICBpbnQgaV92ZXJzaW9uOwoKICBpbnQg aV9wYWNrX29uX2Nsb3NlIDsKCiAgX191MzIgaV9maXJzdF9kaXJlY3RfYnl0ZTsKIyAzNSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfaS5oIgogIGludCBp X3ByZWFsbG9jX2Jsb2NrOwogIGludCBpX3ByZWFsbG9jX2NvdW50OwogIHN0cnVjdCBsaXN0X2hl YWQgaV9wcmVhbGxvY19saXN0OwoKCgoKICBpbnQgbm9wYWNrOwp9OwojIDMwNiAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L2Jmc19mc19pLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvYmZzX2ZzX2kuaCIKc3RydWN0IGJmc19pbm9kZV9pbmZvIHsKICAg ICAgICB1bnNpZ25lZCBsb25nIGlfZHNrX2lubzsKICAgICAgICB1bnNpZ25lZCBsb25nIGlfc2Js b2NrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgaV9lYmxvY2s7Cn07CiMgMzA3ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvdWRmX2ZzX2kuaCIgMQojIDI0ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC91ZGZfZnNfaS5oIgp0eXBlZGVmIHN0cnVjdAp7CiAgICAgICAgX191 MzIgbG9naWNhbEJsb2NrTnVtOwogICAgICAgIF9fdTE2IHBhcnRpdGlvblJlZmVyZW5jZU51bTsK fSBsYl9hZGRyOwoKCnN0cnVjdCB1ZGZfaW5vZGVfaW5mbwp7CiAgICAgICAgbG9uZyBpX3VtdGlt ZTsKICAgICAgICBsb25nIGlfdWN0aW1lOwogICAgICAgIGxvbmcgaV9jcnRpbWU7CiAgICAgICAg bG9uZyBpX3VjcnRpbWU7CgogICAgICAgIGxiX2FkZHIgaV9sb2NhdGlvbjsKICAgICAgICBfX3U2 NCBpX3VuaXF1ZTsKICAgICAgICBfX3UzMiBpX2xlbkVBdHRyOwogICAgICAgIF9fdTMyIGlfbGVu QWxsb2M7CiAgICAgICAgX191NjQgaV9sZW5FeHRlbnRzOwogICAgICAgIF9fdTMyIGlfbmV4dF9h bGxvY19ibG9jazsKICAgICAgICBfX3UzMiBpX25leHRfYWxsb2NfZ29hbDsKICAgICAgICB1bnNp Z25lZCBpX2FsbG9jX3R5cGUgOiAzOwogICAgICAgIHVuc2lnbmVkIGlfZXh0ZW5kZWRfZmUgOiAx OwogICAgICAgIHVuc2lnbmVkIGlfc3RyYXRfNDA5NiA6IDE7CiAgICAgICAgdW5zaWduZWQgaV9u ZXdfaW5vZGUgOiAxOwogICAgICAgIHVuc2lnbmVkIHJlc2VydmVkIDogMjY7Cn07CiMgMzA4ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmNwX2ZzX2kuaCIgMQojIDE3ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uY3BfZnNfaS5oIgpzdHJ1Y3QgbmNwX2lub2RlX2lu Zm8gewogICAgICAgIF9fdTMyIGRpckVudE51bSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiBEb3NEaXJOdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191 MzIgdm9sTnVtYmVyIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIG53YXR0 cjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIG9wZW5fc2VtOwogICAgICAgIGF0b21pY190IG9w ZW5lZDsKICAgICAgICBpbnQgYWNjZXNzOwogICAgICAgIF9fdTMyIHNlcnZlcl9maWxlX2hhbmRs ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IG9wZW5fY3JlYXRlX2FjdGlv biBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IGZpbGVfaGFuZGxlWzZdIF9f YXR0cmlidXRlX18oKHBhY2tlZCkpOwp9OwojIDMwOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3Byb2NfZnNfaS5oIiAxCnN0cnVjdCBwcm9jX2lub2RlX2luZm8gewogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqdGFzazsKICAgICAgICBpbnQgdHlwZTsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBpbnQgKCpwcm9jX2dldF9saW5rKShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0 IGRlbnRyeSAqKiwgc3RydWN0IHZmc21vdW50ICoqKTsKICAgICAgICAgICAgICAgIGludCAoKnBy b2NfcmVhZCkoc3RydWN0IHRhc2tfc3RydWN0ICp0YXNrLCBjaGFyICpwYWdlKTsKICAgICAgICB9 IG9wOwogICAgICAgIHN0cnVjdCBmaWxlICpmaWxlOwp9OwojIDMxMCAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L3VzYmRldl9mc19pLmgiIDEKc3RydWN0IHVzYl9kZXZpY2U7CnN0cnVjdCB1 c2JfYnVzOwoKc3RydWN0IHVzYmRldl9pbm9kZV9pbmZvIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9o ZWFkIGRsaXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7CiAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgc3RydWN0IHVzYl9kZXZpY2UgKmRldjsKICAgICAgICAgICAgICAg IHN0cnVjdCB1c2JfYnVzICpidXM7CiAgICAgICAgfSBwOwp9OwojIDMxMSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX2kuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19pLmgiCnN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvIHsK IyAyNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvamZmczJfZnNfaS5oIgog ICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgc2VtOwoKCiAgICAgICAgX191MzIgaGlnaGVzdF92ZXJz aW9uOwoKCiAgICAgICAgc3RydWN0IGpmZnMyX25vZGVfZnJhZyAqZnJhZ2xpc3Q7CgoKCgoKCiAg ICAgICAgc3RydWN0IGpmZnMyX2Z1bGxfZG5vZGUgKm1ldGFkYXRhOwoKCiAgICAgICAgc3RydWN0 IGpmZnMyX2Z1bGxfZGlyZW50ICpkZW50czsKCgogICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9j YWNoZSAqaW5vY2FjaGU7CgoKCgoKICAgICAgICBfX3UxNiBmbGFnczsKICAgICAgICBfX3U4IHVz ZXJjb21wcjsKfTsKIyAzMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Zz LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jcmFtZnNfZnNf c2IuaCIgMQoKCgoKCgpzdHJ1Y3QgY3JhbWZzX3NiX2luZm8gewogICAgICAgICAgICAgICAgICAg ICAgICB1bnNpZ25lZCBsb25nIG1hZ2ljOwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25l ZCBsb25nIHNpemU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgYmxvY2tz OwogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZpbGVzOwogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwp9OwojIDMxMyAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDMzOSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvZnMuaCIKc3RydWN0IGlhdHRyIHsKICAgICAgICB1bnNpZ25lZCBp bnQgaWFfdmFsaWQ7CiAgICAgICAgdW1vZGVfdCBpYV9tb2RlOwogICAgICAgIHVpZF90IGlhX3Vp ZDsKICAgICAgICBnaWRfdCBpYV9naWQ7CiAgICAgICAgbG9mZl90IGlhX3NpemU7CiAgICAgICAg dGltZV90IGlhX2F0aW1lOwogICAgICAgIHRpbWVfdCBpYV9tdGltZTsKICAgICAgICB0aW1lX3Qg aWFfY3RpbWU7CiAgICAgICAgdW5zaWduZWQgaW50IGlhX2F0dHJfZmxhZ3M7Cn07CiMgMzYzICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiIDEKIyA0MiAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvcXVvdGEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9lcnJuby5oIiAxCiMgNDMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3F1b3RhLmgiIDIKIyAxMDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcWJsayB7CiAgICAgICAgX191MzIgZHFiX2JoYXJkbGlt aXQ7CiAgICAgICAgX191MzIgZHFiX2Jzb2Z0bGltaXQ7CiAgICAgICAgX191MzIgZHFiX2N1cmJs b2NrczsKICAgICAgICBfX3UzMiBkcWJfaWhhcmRsaW1pdDsKICAgICAgICBfX3UzMiBkcWJfaXNv ZnRsaW1pdDsKICAgICAgICBfX3UzMiBkcWJfY3VyaW5vZGVzOwogICAgICAgIHRpbWVfdCBkcWJf YnRpbWU7CiAgICAgICAgdGltZV90IGRxYl9pdGltZTsKfTsKIyAxMzQgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcXN0YXRzIHsKICAgICAgICBf X3UzMiBsb29rdXBzOwogICAgICAgIF9fdTMyIGRyb3BzOwogICAgICAgIF9fdTMyIHJlYWRzOwog ICAgICAgIF9fdTMyIHdyaXRlczsKICAgICAgICBfX3UzMiBjYWNoZV9oaXRzOwogICAgICAgIF9f dTMyIGFsbG9jYXRlZF9kcXVvdHM7CiAgICAgICAgX191MzIgZnJlZV9kcXVvdHM7CiAgICAgICAg X191MzIgc3luY3M7Cn07CgoKCmV4dGVybiBpbnQgbnJfZHF1b3RzLCBucl9mcmVlX2RxdW90czsK ZXh0ZXJuIGludCBkcXVvdF9yb290X3NxdWFzaDsKIyAxNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3F1b3RhLmgiCnN0cnVjdCBkcXVvdCB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBkcV9oYXNoOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZHFfaW51c2U7CiAgICAg ICAgc3RydWN0IGxpc3RfaGVhZCBkcV9mcmVlOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGRx X3dhaXRfbG9jazsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBkcV93YWl0X2ZyZWU7CiAgICAg ICAgaW50IGRxX2NvdW50OwoKCiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpkcV9zYjsKICAg ICAgICB1bnNpZ25lZCBpbnQgZHFfaWQ7CiAgICAgICAga2Rldl90IGRxX2RldjsKICAgICAgICBz aG9ydCBkcV90eXBlOwogICAgICAgIHNob3J0IGRxX2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZHFfcmVmZXJlbmNlZDsKCiAgICAgICAgc3RydWN0IGRxYmxrIGRxX2RxYjsKfTsKIyAzNjQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tb3VudC5oIiAxCiMgMzY1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCgoKCgpzdHJ1Y3QgcGFnZTsKc3RydWN0 IGFkZHJlc3Nfc3BhY2U7CnN0cnVjdCBraW9idWY7CgpzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVy YXRpb25zIHsKICAgICAgICBpbnQgKCp3cml0ZXBhZ2UpKHN0cnVjdCBwYWdlICopOwogICAgICAg IGludCAoKnJlYWRwYWdlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqKTsKICAgICAgICBp bnQgKCpzeW5jX3BhZ2UpKHN0cnVjdCBwYWdlICopOwogICAgICAgIGludCAoKnByZXBhcmVfd3Jp dGUpKHN0cnVjdCBmaWxlICosIHN0cnVjdCBwYWdlICosIHVuc2lnbmVkLCB1bnNpZ25lZCk7CiAg ICAgICAgaW50ICgqY29tbWl0X3dyaXRlKShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1 bnNpZ25lZCwgdW5zaWduZWQpOwoKICAgICAgICBpbnQgKCpibWFwKShzdHJ1Y3QgYWRkcmVzc19z cGFjZSAqLCBsb25nKTsKCiAgICAgICAgaW50ICgqZGlyZWN0X0lPKShpbnQsIHN0cnVjdCBpbm9k ZSAqLCBzdHJ1Y3Qga2lvYnVmICosIHVuc2lnbmVkIGxvbmcsIGludCk7Cn07CgpzdHJ1Y3QgYWRk cmVzc19zcGFjZSB7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBjbGVhbl9wYWdlczsKICAgICAg ICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5X3BhZ2VzOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg bG9ja2VkX3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbnJwYWdlczsKICAgICAgICBzdHJ1 Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zICphX29wczsKICAgICAgICBzdHJ1Y3QgaW5vZGUg Kmhvc3Q7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICppX21tYXA7CiAgICAgICAgc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICppX21tYXBfc2hhcmVkOwogICAgICAgIHNwaW5sb2NrX3QgaV9z aGFyZWRfbG9jazsKICAgICAgICBpbnQgZ2ZwX21hc2s7Cn07CgpzdHJ1Y3QgY2hhcl9kZXZpY2Ug ewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgaGFzaDsKICAgICAgICBhdG9taWNfdCBjb3VudDsK ICAgICAgICBkZXZfdCBkZXY7CiAgICAgICAgYXRvbWljX3Qgb3BlbmVyczsKICAgICAgICBzdHJ1 Y3Qgc2VtYXBob3JlIHNlbTsKfTsKCnN0cnVjdCBibG9ja19kZXZpY2UgewogICAgICAgIHN0cnVj dCBsaXN0X2hlYWQgYmRfaGFzaDsKICAgICAgICBhdG9taWNfdCBiZF9jb3VudDsKICAgICAgICBz dHJ1Y3QgaW5vZGUgKiBiZF9pbm9kZTsKICAgICAgICBkZXZfdCBiZF9kZXY7CiAgICAgICAgaW50 IGJkX29wZW5lcnM7CiAgICAgICAgY29uc3Qgc3RydWN0IGJsb2NrX2RldmljZV9vcGVyYXRpb25z ICpiZF9vcDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGJkX3NlbTsKICAgICAgICBzdHJ1Y3Qg bGlzdF9oZWFkIGJkX2lub2RlczsKfTsKCnN0cnVjdCBpbm9kZSB7CiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBpX2hhc2g7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2xpc3Q7CiAgICAgICAg c3RydWN0IGxpc3RfaGVhZCBpX2RlbnRyeTsKCiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2Rp cnR5X2J1ZmZlcnM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBpX2RpcnR5X2RhdGFfYnVmZmVy czsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2lubzsKICAgICAgICBhdG9taWNfdCBpX2NvdW50 OwogICAgICAgIGtkZXZfdCBpX2RldjsKICAgICAgICB1bW9kZV90IGlfbW9kZTsKICAgICAgICBu bGlua190IGlfbmxpbms7CiAgICAgICAgdWlkX3QgaV91aWQ7CiAgICAgICAgZ2lkX3QgaV9naWQ7 CiAgICAgICAga2Rldl90IGlfcmRldjsKICAgICAgICBsb2ZmX3QgaV9zaXplOwogICAgICAgIHRp bWVfdCBpX2F0aW1lOwogICAgICAgIHRpbWVfdCBpX210aW1lOwogICAgICAgIHRpbWVfdCBpX2N0 aW1lOwogICAgICAgIHVuc2lnbmVkIGludCBpX2Jsa2JpdHM7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBpX2Jsa3NpemU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2Jsb2NrczsKICAgICAgICB1bnNp Z25lZCBsb25nIGlfdmVyc2lvbjsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGlfc2VtOwogICAg ICAgIHN0cnVjdCBzZW1hcGhvcmUgaV96b21iaWU7CiAgICAgICAgc3RydWN0IGlub2RlX29wZXJh dGlvbnMgKmlfb3A7CiAgICAgICAgc3RydWN0IGZpbGVfb3BlcmF0aW9ucyAqaV9mb3A7CiAgICAg ICAgc3RydWN0IHN1cGVyX2Jsb2NrICppX3NiOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGlf d2FpdDsKICAgICAgICBzdHJ1Y3QgZmlsZV9sb2NrICppX2Zsb2NrOwogICAgICAgIHN0cnVjdCBh ZGRyZXNzX3NwYWNlICppX21hcHBpbmc7CiAgICAgICAgc3RydWN0IGFkZHJlc3Nfc3BhY2UgaV9k YXRhOwogICAgICAgIHN0cnVjdCBkcXVvdCAqaV9kcXVvdFsyXTsKCiAgICAgICAgc3RydWN0IGxp c3RfaGVhZCBpX2RldmljZXM7CiAgICAgICAgc3RydWN0IHBpcGVfaW5vZGVfaW5mbyAqaV9waXBl OwogICAgICAgIHN0cnVjdCBibG9ja19kZXZpY2UgKmlfYmRldjsKICAgICAgICBzdHJ1Y3QgY2hh cl9kZXZpY2UgKmlfY2RldjsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBpX2Rub3RpZnlfbWFzazsK ICAgICAgICBzdHJ1Y3QgZG5vdGlmeV9zdHJ1Y3QgKmlfZG5vdGlmeTsKCiAgICAgICAgdW5zaWdu ZWQgbG9uZyBpX3N0YXRlOwoKICAgICAgICB1bnNpZ25lZCBpbnQgaV9mbGFnczsKICAgICAgICB1 bnNpZ25lZCBjaGFyIGlfc29jazsKCiAgICAgICAgYXRvbWljX3QgaV93cml0ZWNvdW50OwogICAg ICAgIHVuc2lnbmVkIGludCBpX2F0dHJfZmxhZ3M7CiAgICAgICAgX191MzIgaV9nZW5lcmF0aW9u OwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBtaW5peF9pbm9kZV9pbmZv IG1pbml4X2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgZXh0Ml9pbm9kZV9pbmZvIGV4dDJfaTsK ICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX2lub2RlX2luZm8gaHBmc19pOwogICAgICAgICAg ICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyBudGZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1 Y3QgbXNkb3NfaW5vZGVfaW5mbyBtc2Rvc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHVtc2Rv c19pbm9kZV9pbmZvIHVtc2Rvc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb19pbm9kZV9p bmZvIGlzb2ZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX2lub2RlX2luZm8gbmZzX2k7 CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc3lzdl9pbm9kZV9pbmZvIHN5c3ZfaTsKICAgICAgICAg ICAgICAgIHN0cnVjdCBhZmZzX2lub2RlX2luZm8gYWZmc19pOwogICAgICAgICAgICAgICAgc3Ry dWN0IHVmc19pbm9kZV9pbmZvIHVmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGVmc19pbm9k ZV9pbmZvIGVmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IHJvbWZzX2lub2RlX2luZm8gcm9t ZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBzaG1lbV9pbm9kZV9pbmZvIHNobWVtX2k7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgY29kYV9pbm9kZV9pbmZvIGNvZGFfaTsKICAgICAgICAgICAg ICAgIHN0cnVjdCBzbWJfaW5vZGVfaW5mbyBzbWJmc19pOwogICAgICAgICAgICAgICAgc3RydWN0 IGhmc19pbm9kZV9pbmZvIGhmc19pOwogICAgICAgICAgICAgICAgc3RydWN0IGFkZnNfaW5vZGVf aW5mbyBhZGZzX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9pbmZvIHFueDRf aTsKICAgICAgICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19pbm9kZV9pbmZvIHJlaXNlcmZzX2k7 CiAgICAgICAgICAgICAgICBzdHJ1Y3QgYmZzX2lub2RlX2luZm8gYmZzX2k7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgdWRmX2lub2RlX2luZm8gdWRmX2k7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg bmNwX2lub2RlX2luZm8gbmNwZnNfaTsKICAgICAgICAgICAgICAgIHN0cnVjdCBwcm9jX2lub2Rl X2luZm8gcHJvY19pOwogICAgICAgICAgICAgICAgc3RydWN0IHNvY2tldCBzb2NrZXRfaTsKICAg ICAgICAgICAgICAgIHN0cnVjdCB1c2JkZXZfaW5vZGVfaW5mbyB1c2JkZXZfaTsKICAgICAgICAg ICAgICAgIHN0cnVjdCBqZmZzMl9pbm9kZV9pbmZvIGpmZnMyX2k7CiAgICAgICAgICAgICAgICB2 b2lkICpnZW5lcmljX2lwOwogICAgICAgIH0gdTsKfTsKCnN0cnVjdCBmb3duX3N0cnVjdCB7CiAg ICAgICAgaW50IHBpZDsKICAgICAgICB1aWRfdCB1aWQsIGV1aWQ7CiAgICAgICAgaW50IHNpZ251 bTsKfTsKCnN0cnVjdCBmaWxlIHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGZfbGlzdDsKICAg ICAgICBzdHJ1Y3QgZGVudHJ5ICpmX2RlbnRyeTsKICAgICAgICBzdHJ1Y3QgdmZzbW91bnQgKmZf dmZzbW50OwogICAgICAgIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKmZfb3A7CiAgICAgICAgYXRv bWljX3QgZl9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgZl9mbGFnczsKICAgICAgICBtb2Rl X3QgZl9tb2RlOwogICAgICAgIGxvZmZfdCBmX3BvczsKICAgICAgICB1bnNpZ25lZCBsb25nIGZf cmVhZGEsIGZfcmFtYXgsIGZfcmFlbmQsIGZfcmFsZW4sIGZfcmF3aW47CiAgICAgICAgc3RydWN0 IGZvd25fc3RydWN0IGZfb3duZXI7CiAgICAgICAgdW5zaWduZWQgaW50IGZfdWlkLCBmX2dpZDsK ICAgICAgICBpbnQgZl9lcnJvcjsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmX3ZlcnNpb247CgoK ICAgICAgICB2b2lkICpwcml2YXRlX2RhdGE7CgoKICAgICAgICBzdHJ1Y3Qga2lvYnVmICpmX2lv YnVmOwogICAgICAgIGxvbmcgZl9pb2J1Zl9sb2NrOwp9OwpleHRlcm4gc3BpbmxvY2tfdCBmaWxl c19sb2NrOwoKCgoKCgpleHRlcm4gaW50IGluaXRfcHJpdmF0ZV9maWxlKHN0cnVjdCBmaWxlICos IHN0cnVjdCBkZW50cnkgKiwgaW50KTsKIyA1NTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2ZzLmgiCnR5cGVkZWYgc3RydWN0IGZpbGVzX3N0cnVjdCAqZmxfb3duZXJfdDsK CnN0cnVjdCBmaWxlX2xvY2sgewogICAgICAgIHN0cnVjdCBmaWxlX2xvY2sgKmZsX25leHQ7CiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBmbF9saW5rOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQg ZmxfYmxvY2s7CiAgICAgICAgZmxfb3duZXJfdCBmbF9vd25lcjsKICAgICAgICB1bnNpZ25lZCBp bnQgZmxfcGlkOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IGZsX3dhaXQ7CiAgICAgICAgc3Ry dWN0IGZpbGUgKmZsX2ZpbGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBmbF9mbGFnczsKICAgICAg ICB1bnNpZ25lZCBjaGFyIGZsX3R5cGU7CiAgICAgICAgbG9mZl90IGZsX3N0YXJ0OwogICAgICAg IGxvZmZfdCBmbF9lbmQ7CgogICAgICAgIHZvaWQgKCpmbF9ub3RpZnkpKHN0cnVjdCBmaWxlX2xv Y2sgKik7CiAgICAgICAgdm9pZCAoKmZsX2luc2VydCkoc3RydWN0IGZpbGVfbG9jayAqKTsKICAg ICAgICB2b2lkICgqZmxfcmVtb3ZlKShzdHJ1Y3QgZmlsZV9sb2NrICopOwoKICAgICAgICBzdHJ1 Y3QgZmFzeW5jX3N0cnVjdCAqIGZsX2Zhc3luYzsKCiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgc3RydWN0IG5mc19sb2NrX2luZm8gbmZzX2ZsOwogICAgICAgIH0gZmxfdTsKfTsKIyA1 ODcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiCmV4dGVybiBzdHJ1 Y3QgbGlzdF9oZWFkIGZpbGVfbG9ja19saXN0OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9mY250bC5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL2ZjbnRsLmgiIDEKIyA2OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv YXNtL2ZjbnRsLmgiCnN0cnVjdCBmbG9jayB7CiAgICAgICAgc2hvcnQgbF90eXBlOwogICAgICAg IHNob3J0IGxfd2hlbmNlOwogICAgICAgIG9mZl90IGxfc3RhcnQ7CiAgICAgICAgb2ZmX3QgbF9s ZW47CiAgICAgICAgcGlkX3QgbF9waWQ7Cn07CgpzdHJ1Y3QgZmxvY2s2NCB7CiAgICAgICAgc2hv cnQgbF90eXBlOwogICAgICAgIHNob3J0IGxfd2hlbmNlOwogICAgICAgIGxvZmZfdCBsX3N0YXJ0 OwogICAgICAgIGxvZmZfdCBsX2xlbjsKICAgICAgICBwaWRfdCBsX3BpZDsKfTsKIyA1ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mY250bC5oIiAyCiMgNTkwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCgpleHRlcm4gaW50IGZjbnRsX2dl dGxrKHVuc2lnbmVkIGludCwgc3RydWN0IGZsb2NrICopOwpleHRlcm4gaW50IGZjbnRsX3NldGxr KHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2sgKik7CgpleHRlcm4gaW50 IGZjbnRsX2dldGxrNjQodW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2s2NCAqKTsKZXh0ZXJuIGlu dCBmY250bF9zZXRsazY0KHVuc2lnbmVkIGludCwgdW5zaWduZWQgaW50LCBzdHJ1Y3QgZmxvY2s2 NCAqKTsKCgpleHRlcm4gdm9pZCBsb2Nrc19pbml0X2xvY2soc3RydWN0IGZpbGVfbG9jayAqKTsK ZXh0ZXJuIHZvaWQgbG9ja3NfY29weV9sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZp bGVfbG9jayAqKTsKZXh0ZXJuIHZvaWQgbG9ja3NfcmVtb3ZlX3Bvc2l4KHN0cnVjdCBmaWxlICos IGZsX293bmVyX3QpOwpleHRlcm4gdm9pZCBsb2Nrc19yZW1vdmVfZmxvY2soc3RydWN0IGZpbGUg Kik7CmV4dGVybiBzdHJ1Y3QgZmlsZV9sb2NrICpwb3NpeF90ZXN0X2xvY2soc3RydWN0IGZpbGUg Kiwgc3RydWN0IGZpbGVfbG9jayAqKTsKZXh0ZXJuIGludCBwb3NpeF9sb2NrX2ZpbGUoc3RydWN0 IGZpbGUgKiwgc3RydWN0IGZpbGVfbG9jayAqLCB1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBw b3NpeF9ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKiwgc3RydWN0IGZpbGVfbG9jayAqKTsK ZXh0ZXJuIHZvaWQgcG9zaXhfdW5ibG9ja19sb2NrKHN0cnVjdCBmaWxlX2xvY2sgKik7CmV4dGVy biBpbnQgX19nZXRfbGVhc2Uoc3RydWN0IGlub2RlICppbm9kZSwgdW5zaWduZWQgaW50IGZsYWdz KTsKZXh0ZXJuIHRpbWVfdCBsZWFzZV9nZXRfbXRpbWUoc3RydWN0IGlub2RlICopOwpleHRlcm4g aW50IGxvY2tfbWF5X3JlYWQoc3RydWN0IGlub2RlICosIGxvZmZfdCBzdGFydCwgdW5zaWduZWQg bG9uZyBjb3VudCk7CmV4dGVybiBpbnQgbG9ja19tYXlfd3JpdGUoc3RydWN0IGlub2RlICosIGxv ZmZfdCBzdGFydCwgdW5zaWduZWQgbG9uZyBjb3VudCk7CgpzdHJ1Y3QgZmFzeW5jX3N0cnVjdCB7 CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAgIGludCBmYV9mZDsKICAgICAgICBzdHJ1Y3QgZmFz eW5jX3N0cnVjdCAqZmFfbmV4dDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqZmFfZmlsZTsKfTsKCgoK CmV4dGVybiBpbnQgZmFzeW5jX2hlbHBlcihpbnQsIHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0 IGZhc3luY19zdHJ1Y3QgKiopOwoKZXh0ZXJuIHZvaWQga2lsbF9mYXN5bmMoc3RydWN0IGZhc3lu Y19zdHJ1Y3QgKiosIGludCwgaW50KTsKCmV4dGVybiB2b2lkIF9fa2lsbF9mYXN5bmMoc3RydWN0 IGZhc3luY19zdHJ1Y3QgKiwgaW50LCBpbnQpOwoKc3RydWN0IG5hbWVpZGF0YSB7CiAgICAgICAg c3RydWN0IGRlbnRyeSAqZGVudHJ5OwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50OwogICAg ICAgIHN0cnVjdCBxc3RyIGxhc3Q7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAg IGludCBsYXN0X3R5cGU7Cn07CgoKCgpzdHJ1Y3QgcXVvdGFfbW91bnRfb3B0aW9ucwp7CiAgICAg ICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgZHFpb19zZW07 CiAgICAgICAgc3RydWN0IHNlbWFwaG9yZSBkcW9mZl9zZW07CiAgICAgICAgc3RydWN0IGZpbGUg KmZpbGVzWzJdOwogICAgICAgIHRpbWVfdCBpbm9kZV9leHBpcmVbMl07CiAgICAgICAgdGltZV90 IGJsb2NrX2V4cGlyZVsyXTsKICAgICAgICBjaGFyIHJzcXVhc2hbMl07Cn07CiMgNjU2ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21pbml4X2ZzX3NiLmgiIDEKCgoKCgoKc3RydWN0IG1pbml4 X3NiX2luZm8gewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfbmlub2Rl czsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX256b25lczsKICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbG9uZyBzX2ltYXBfYmxvY2tzOwogICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIHNfem1hcF9ibG9ja3M7CiAgICAgICAgICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc19maXJzdGRhdGF6b25lOwogICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHNfbG9nX3pvbmVfc2l6ZTsKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwogICAgICAgICAgICAgICAgICAgICAgICBp bnQgc19kaXJzaXplOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgc19uYW1lbGVuOwogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgc19saW5rX21heDsKICAgICAgICAgICAgICAgICAgICAg ICAgc3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfaW1hcDsKICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGJ1ZmZlcl9oZWFkICoqIHNfem1hcDsKICAgICAgICAgICAgICAgICAgICAgICAgc3Ry dWN0IGJ1ZmZlcl9oZWFkICogc19zYmg7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBt aW5peF9zdXBlcl9ibG9jayAqIHNfbXM7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IHNob3J0IHNfbW91bnRfc3RhdGU7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNo b3J0IHNfdmVyc2lvbjsKfTsKIyA2NTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9leHQy X2ZzX3NiLmgiIDEKIyAzMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXh0 Ml9mc19zYi5oIgpzdHJ1Y3QgZXh0Ml9zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBsb25nIHNf ZnJhZ19zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mcmFnc19wZXJfYmxvY2s7CiAgICAg ICAgdW5zaWduZWQgbG9uZyBzX2lub2Rlc19wZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzX2ZyYWdzX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tzX3Blcl9n cm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVzX3Blcl9ncm91cDsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNfaXRiX3Blcl9ncm91cDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZ2Ri X2NvdW50OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19kZXNjX3Blcl9ibG9jazsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNfZ3JvdXBzX2NvdW50OwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq IHNfc2JoOwogICAgICAgIHN0cnVjdCBleHQyX3N1cGVyX2Jsb2NrICogc19lczsKICAgICAgICBz dHJ1Y3QgYnVmZmVyX2hlYWQgKiogc19ncm91cF9kZXNjOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHNfbG9hZGVkX2lub2RlX2JpdG1hcHM7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19sb2FkZWRf YmxvY2tfYml0bWFwczsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfaW5vZGVfYml0bWFwX251bWJl cls4XTsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBzX2lub2RlX2JpdG1hcFs4XTsKICAg ICAgICB1bnNpZ25lZCBsb25nIHNfYmxvY2tfYml0bWFwX251bWJlcls4XTsKICAgICAgICBzdHJ1 Y3QgYnVmZmVyX2hlYWQgKiBzX2Jsb2NrX2JpdG1hcFs4XTsKICAgICAgICB1bnNpZ25lZCBsb25n IHNfbW91bnRfb3B0OwogICAgICAgIHVpZF90IHNfcmVzdWlkOwogICAgICAgIGdpZF90IHNfcmVz Z2lkOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNfbW91bnRfc3RhdGU7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc19wYWQ7CiAgICAgICAgaW50IHNfYWRkcl9wZXJfYmxvY2tfYml0czsKICAgICAg ICBpbnQgc19kZXNjX3Blcl9ibG9ja19iaXRzOwogICAgICAgIGludCBzX2lub2RlX3NpemU7CiAg ICAgICAgaW50IHNfZmlyc3RfaW5vOwp9OwojIDY1OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2hwZnNfZnNfc2IuaCIgMQoKCgpzdHJ1Y3QgaHBmc19zYl9pbmZvIHsKICAgICAgICBpbm9f dCBzYl9yb290OwogICAgICAgIHVuc2lnbmVkIHNiX2ZzX3NpemU7CiAgICAgICAgdW5zaWduZWQg c2JfYml0bWFwczsKICAgICAgICB1bnNpZ25lZCBzYl9kaXJiYW5kX3N0YXJ0OwogICAgICAgIHVu c2lnbmVkIHNiX2RpcmJhbmRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzYl9kbWFwOwogICAgICAg IHVuc2lnbmVkIHNiX25fZnJlZTsKICAgICAgICB1bnNpZ25lZCBzYl9uX2ZyZWVfZG5vZGVzOwog ICAgICAgIHVpZF90IHNiX3VpZDsKICAgICAgICBnaWRfdCBzYl9naWQ7CiAgICAgICAgdW1vZGVf dCBzYl9tb2RlOwogICAgICAgIHVuc2lnbmVkIHNiX2NvbnYgOiAyOwogICAgICAgIHVuc2lnbmVk IHNiX2VhcyA6IDI7CiAgICAgICAgdW5zaWduZWQgc2JfZXJyIDogMjsKICAgICAgICB1bnNpZ25l ZCBzYl9jaGsgOiAyOwogICAgICAgIHVuc2lnbmVkIHNiX2xvd2VyY2FzZSA6IDE7CiAgICAgICAg dW5zaWduZWQgc2Jfd2FzX2Vycm9yIDogMTsKICAgICAgICB1bnNpZ25lZCBzYl9jaGtkc2sgOiAy OwogICAgICAgIHVuc2lnbmVkIHNiX3JkX2Zub2RlIDogMjsKICAgICAgICB1bnNpZ25lZCBzYl9y ZF9pbm9kZSA6IDI7CgoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBzYl9pZ2V0X3E7CiAgICAg ICAgdW5zaWduZWQgY2hhciAqc2JfY3BfdGFibGU7CgoKICAgICAgICB1bnNpZ25lZCAqc2JfYm1w X2RpcjsKICAgICAgICB1bnNpZ25lZCBzYl9jX2JpdG1hcDsKICAgICAgICB3YWl0X3F1ZXVlX2hl YWRfdCBzYl9jcmVhdGlvbl9kZTsKCiAgICAgICAgdW5zaWduZWQgc2JfY3JlYXRpb25fZGVfbG9j ayA6IDE7CgogICAgICAgIGludCBzYl90aW1lc2hpZnQ7Cn07CiMgNjU5ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvbnRmc19mc19zYi5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvbnRmc19mc19pLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9udGZzX2ZzX3NiLmgiIDIKCnN0cnVjdCBudGZzX3NiX2luZm97Cgog ICAgICAgIG50ZnNfdWlkX3QgdWlkOwogICAgICAgIG50ZnNfZ2lkX3QgZ2lkOwogICAgICAgIG50 bW9kZV90IHVtYXNrOwogICAgICAgIHZvaWQgKm5sc19tYXA7CiAgICAgICAgdW5zaWduZWQgaW50 IG5ndDsKICAgICAgICBjaGFyIG1mdF96b25lX211bHRpcGxpZXI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBtZnRfZGF0YV9wb3M7CiAgICAgICAgbnRmc19jbHVzdGVyX3QgbWZ0X3pvbmVfcG9zOwog ICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF96b25lX3N0YXJ0OwogICAgICAgIG50ZnNfY2x1c3Rl cl90IG1mdF96b25lX2VuZDsKICAgICAgICBudGZzX2NsdXN0ZXJfdCBkYXRhMV96b25lX3BvczsK ICAgICAgICBudGZzX2NsdXN0ZXJfdCBkYXRhMl96b25lX3BvczsKCgogICAgICAgIG50ZnNfc2l6 ZV90IHBhcnRpdGlvbl9iaWFzOwoKICAgICAgICBudGZzX3UzMiBhdF9zdGFuZGFyZF9pbmZvcm1h dGlvbjsKICAgICAgICBudGZzX3UzMiBhdF9hdHRyaWJ1dGVfbGlzdDsKICAgICAgICBudGZzX3Uz MiBhdF9maWxlX25hbWU7CiAgICAgICAgbnRmc191MzIgYXRfdm9sdW1lX3ZlcnNpb247CiAgICAg ICAgbnRmc191MzIgYXRfc2VjdXJpdHlfZGVzY3JpcHRvcjsKICAgICAgICBudGZzX3UzMiBhdF92 b2x1bWVfbmFtZTsKICAgICAgICBudGZzX3UzMiBhdF92b2x1bWVfaW5mb3JtYXRpb247CiAgICAg ICAgbnRmc191MzIgYXRfZGF0YTsKICAgICAgICBudGZzX3UzMiBhdF9pbmRleF9yb290OwogICAg ICAgIG50ZnNfdTMyIGF0X2luZGV4X2FsbG9jYXRpb247CiAgICAgICAgbnRmc191MzIgYXRfYml0 bWFwOwogICAgICAgIG50ZnNfdTMyIGF0X3N5bWxpbms7CgogICAgICAgIGludCBzZWN0b3Jfc2l6 ZTsKICAgICAgICBpbnQgY2x1c3Rlcl9zaXplOwogICAgICAgIGludCBjbHVzdGVyX3NpemVfYml0 czsKICAgICAgICBpbnQgbWZ0X2NsdXN0ZXJzX3Blcl9yZWNvcmQ7CiAgICAgICAgaW50IG1mdF9y ZWNvcmRfc2l6ZTsKICAgICAgICBpbnQgbWZ0X3JlY29yZF9zaXplX2JpdHM7CiAgICAgICAgaW50 IGluZGV4X2NsdXN0ZXJzX3Blcl9yZWNvcmQ7CiAgICAgICAgaW50IGluZGV4X3JlY29yZF9zaXpl OwogICAgICAgIGludCBpbmRleF9yZWNvcmRfc2l6ZV9iaXRzOwogICAgICAgIG50ZnNfY2x1c3Rl cl90IG5yX2NsdXN0ZXJzOwogICAgICAgIG50ZnNfY2x1c3Rlcl90IG1mdF9sY247CiAgICAgICAg bnRmc19jbHVzdGVyX3QgbWZ0X21pcnJfbGNuOwoKICAgICAgICB1bnNpZ25lZCBjaGFyICptZnQ7 CiAgICAgICAgdW5zaWduZWQgc2hvcnQgKnVwY2FzZTsKICAgICAgICB1bnNpZ25lZCBpbnQgdXBj YXNlX2xlbmd0aDsKCiAgICAgICAgc3RydWN0IG50ZnNfaW5vZGVfaW5mbyAqbWZ0X2lubzsKICAg ICAgICBzdHJ1Y3QgbnRmc19pbm9kZV9pbmZvICptZnRtaXJyOwogICAgICAgIHN0cnVjdCBudGZz X2lub2RlX2luZm8gKmJpdG1hcDsKICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgaW5vX2ZsYWdzOwp9OwojIDY2MCAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDEKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2ZhdF9jdmYuaCIgMQoKCgoKCnN0cnVjdCBjdmZfZm9ybWF0CnsgaW50IGN2 Zl92ZXJzaW9uOwogIGNoYXIqIGN2Zl92ZXJzaW9uX3RleHQ7CiAgdW5zaWduZWQgbG9uZyBmbGFn czsKICBpbnQgKCpkZXRlY3RfY3ZmKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiKTsKICBpbnQgKCpt b3VudF9jdmYpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sqc2IsY2hhcipvcHRpb25zKTsKICBpbnQgKCp1 bm1vdW50X2N2ZikgKHN0cnVjdCBzdXBlcl9ibG9jaypzYik7CiAgc3RydWN0IGJ1ZmZlcl9oZWFk KiAoKmN2Zl9icmVhZCkgKHN0cnVjdCBzdXBlcl9ibG9jaypzYixpbnQgYmxvY2spOwogIHN0cnVj dCBidWZmZXJfaGVhZCogKCpjdmZfZ2V0YmxrKSAoc3RydWN0IHN1cGVyX2Jsb2NrKnNiLGludCBi bG9jayk7CiAgdm9pZCAoKmN2Zl9icmVsc2UpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0cnVj dCBidWZmZXJfaGVhZCAqYmgpOwogIHZvaWQgKCpjdmZfbWFya19idWZmZXJfZGlydHkpIChzdHJ1 Y3Qgc3VwZXJfYmxvY2sgKnNiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg YnVmZmVyX2hlYWQgKmJoKTsKICB2b2lkICgqY3ZmX3NldF91cHRvZGF0ZSkgKHN0cnVjdCBzdXBl cl9ibG9jayAqc2IsCiAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQg KmJoLAogICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbCk7CiAgaW50ICgqY3ZmX2lzX3Vw dG9kYXRlKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYixzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoKTsK ICB2b2lkICgqY3ZmX2xsX3J3X2Jsb2NrKSAoc3RydWN0IHN1cGVyX2Jsb2NrICpzYiwKICAgICAg ICAgICAgICAgICAgICAgICAgaW50IG9wciwKICAgICAgICAgICAgICAgICAgICAgICAgaW50IG5i cmVxLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoWzMyXSk7 CiAgaW50ICgqZmF0X2FjY2VzcykgKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IsaW50IG5yLGludCBu ZXdfdmFsdWUpOwogIGludCAoKmN2Zl9zdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLHN0 cnVjdCBzdGF0ZnMgKmJ1ZiwgaW50IGJ1ZnNpeik7CiAgaW50ICgqY3ZmX2JtYXApIChzdHJ1Y3Qg aW5vZGUgKmlub2RlLGludCBibG9jayk7CiAgc3NpemVfdCAoKmN2Zl9maWxlX3JlYWQpICggc3Ry dWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKICBzc2l6ZV90ICgqY3ZmX2Zp bGVfd3JpdGUpICggc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAq KTsKICBpbnQgKCpjdmZfbW1hcCkgKHN0cnVjdCBmaWxlICosIHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqKTsKICBpbnQgKCpjdmZfcmVhZHBhZ2UpIChzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IHBhZ2Ug Kik7CiAgaW50ICgqY3ZmX3dyaXRlcGFnZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgcGFnZSAq KTsKICBpbnQgKCpjdmZfZGlyX2lvY3RsKSAoc3RydWN0IGlub2RlICogaW5vZGUsIHN0cnVjdCBm aWxlICogZmlscCwKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGNtZCwgdW5z aWduZWQgbG9uZyBhcmcpOwogIHZvaWQgKCp6ZXJvX291dF9jbHVzdGVyKSAoc3RydWN0IGlub2Rl KiwgaW50IGNsdXN0ZXJucik7Cn07CgppbnQgcmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3Zm X2Zvcm1hdCpjdmZfZm9ybWF0KTsKaW50IHVucmVnaXN0ZXJfY3ZmX2Zvcm1hdChzdHJ1Y3QgY3Zm X2Zvcm1hdCpjdmZfZm9ybWF0KTsKdm9pZCBkZWNfY3ZmX2Zvcm1hdF91c2VfY291bnRfYnlfdmVy c2lvbihpbnQgdmVyc2lvbik7CmludCBkZXRlY3RfY3ZmKHN0cnVjdCBzdXBlcl9ibG9jaypzYixj aGFyKmZvcmNlKTsKCmV4dGVybiBzdHJ1Y3QgY3ZmX2Zvcm1hdCAqY3ZmX2Zvcm1hdHNbXTsKZXh0 ZXJuIGludCBjdmZfZm9ybWF0X3VzZV9jb3VudFtdOwojIDQgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L21zZG9zX2ZzX3NiLmgiIDIKCgoKCgpzdHJ1Y3QgZmF0X21vdW50X29w dGlvbnMgewogICAgICAgIHVpZF90IGZzX3VpZDsKICAgICAgICBnaWRfdCBmc19naWQ7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgZnNfdW1hc2s7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY29kZXBh Z2U7CiAgICAgICAgY2hhciAqaW9jaGFyc2V0OwogICAgICAgIHVuc2lnbmVkIGNoYXIgbmFtZV9j aGVjazsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNvbnZlcnNpb247CiAgICAgICAgdW5zaWduZWQg cXVpZXQ6MSwKICAgICAgICAgICAgICAgICBzaG93ZXhlYzoxLAogICAgICAgICAgICAgICAgIHN5 c19pbW11dGFibGU6MSwKICAgICAgICAgICAgICAgICBkb3RzT0s6MSwKICAgICAgICAgICAgICAg ICBpc3ZmYXQ6MSwKICAgICAgICAgICAgICAgICB1dGY4OjEsCiAgICAgICAgICAgICAgICAgdW5p Y29kZV94bGF0ZToxLAogICAgICAgICAgICAgICAgIHBvc2l4ZnM6MSwKICAgICAgICAgICAgICAg ICBudW10YWlsOjEsCiAgICAgICAgICAgICAgICAgYXRhcmk6MSwKICAgICAgICAgICAgICAgICBm YXQzMjoxLAogICAgICAgICAgICAgICAgIG5vY2FzZToxOwp9OwoKc3RydWN0IHZmYXRfdW5pY29k ZSB7CiAgICAgICAgdW5zaWduZWQgY2hhciB1bmkxOwogICAgICAgIHVuc2lnbmVkIGNoYXIgdW5p MjsKfTsKCnN0cnVjdCBtc2Rvc19zYl9pbmZvIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjbHVz dGVyX3NpemU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgY2x1c3Rlcl9iaXRzOwogICAgICAgIHVu c2lnbmVkIGNoYXIgZmF0cyxmYXRfYml0czsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBmYXRfc3Rh cnQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmYXRfbGVuZ3RoOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZGlyX3N0YXJ0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGRpcl9lbnRyaWVzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgZGF0YV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIGNsdXN0ZXJz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcm9vdF9jbHVzdGVyOwogICAgICAgIHVuc2lnbmVkIGxv bmcgZnNpbmZvX3NlY3RvcjsKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCBmYXRfd2FpdDsKICAg ICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGZhdF9sb2NrOwogICAgICAgIGludCBwcmV2X2ZyZWU7CiAg ICAgICAgaW50IGZyZWVfY2x1c3RlcnM7CiAgICAgICAgc3RydWN0IGZhdF9tb3VudF9vcHRpb25z IG9wdGlvbnM7CiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqbmxzX2Rpc2s7CiAgICAgICAgc3Ry dWN0IG5sc190YWJsZSAqbmxzX2lvOwogICAgICAgIHN0cnVjdCBjdmZfZm9ybWF0KiBjdmZfZm9y bWF0OwogICAgICAgIHZvaWQgKmRpcl9vcHM7CiAgICAgICAgdm9pZCAqcHJpdmF0ZV9kYXRhOwog ICAgICAgIGludCBkaXJfcGVyX2Jsb2NrOwogICAgICAgIGludCBkaXJfcGVyX2Jsb2NrX2JpdHM7 Cn07CiMgNjYxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXNvX2ZzX3NiLmgiIDEKCgoK CgoKc3RydWN0IGlzb2ZzX3NiX2luZm8gewogICAgICAgIHVuc2lnbmVkIGxvbmcgc19uaW5vZGVz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19uem9uZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz X2ZpcnN0ZGF0YXpvbmU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzX2xvZ196b25lX3NpemU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX21heF9zaXplOwoKICAgICAgICB1bnNpZ25lZCBjaGFyIHNf aGlnaF9zaWVycmE7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX21hcHBpbmc7CiAgICAgICAgaW50 IHNfcm9ja19vZmZzZXQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBzX3JvY2s7CiAgICAgICAgdW5z aWduZWQgY2hhciBzX2pvbGlldF9sZXZlbDsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfdXRmODsK ICAgICAgICB1bnNpZ25lZCBjaGFyIHNfY3J1ZnQ7CgoKICAgICAgICB1bnNpZ25lZCBjaGFyIHNf dW5oaWRlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19ub3N1aWQ7CiAgICAgICAgdW5zaWduZWQg Y2hhciBzX25vZGV2OwogICAgICAgIG1vZGVfdCBzX21vZGU7CiAgICAgICAgZ2lkX3Qgc19naWQ7 CiAgICAgICAgdWlkX3Qgc191aWQ7CiAgICAgICAgc3RydWN0IG5sc190YWJsZSAqc19ubHNfaW9j aGFyc2V0Owp9OwojIDY2MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25mc19mc19zYi5o IiAxCgoKCgoKCnN0cnVjdCBuZnNfc2VydmVyIHsKICAgICAgICBzdHJ1Y3QgcnBjX2NsbnQgKiBj bGllbnQ7CiAgICAgICAgc3RydWN0IG5mc19ycGNfb3BzICogcnBjX29wczsKICAgICAgICBpbnQg ZmxhZ3M7CiAgICAgICAgdW5zaWduZWQgaW50IHJzaXplOwogICAgICAgIHVuc2lnbmVkIGludCBy cGFnZXM7CiAgICAgICAgdW5zaWduZWQgaW50IHdzaXplOwogICAgICAgIHVuc2lnbmVkIGludCB3 cGFnZXM7CiAgICAgICAgdW5zaWduZWQgaW50IGR0c2l6ZTsKICAgICAgICB1bnNpZ25lZCBpbnQg YnNpemU7CiAgICAgICAgdW5zaWduZWQgaW50IGFjcmVnbWluOwogICAgICAgIHVuc2lnbmVkIGlu dCBhY3JlZ21heDsKICAgICAgICB1bnNpZ25lZCBpbnQgYWNkaXJtaW47CiAgICAgICAgdW5zaWdu ZWQgaW50IGFjZGlybWF4OwogICAgICAgIHVuc2lnbmVkIGludCBuYW1lbGVuOwogICAgICAgIGNo YXIgKiBob3N0bmFtZTsKICAgICAgICBzdHJ1Y3QgbmZzX3JlcWxpc3QgKiByd19yZXF1ZXN0czsK fTsKCgoKCnN0cnVjdCBuZnNfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IG5mc19zZXJ2ZXIgc19z ZXJ2ZXI7Cn07CiMgNjYzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5o IiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3lzdl9mc19zYi5o IiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N5c3ZfZnNfc2Iu aCIKc3RydWN0IHN5c3Zfc2JfaW5mbyB7CiAgICAgICAgaW50IHNfdHlwZTsKICAgICAgICBjaGFy IHNfYnl0ZXNleDsKICAgICAgICBjaGFyIHNfa2x1ZGdlX3N5bWxpbmtzOwogICAgICAgIGNoYXIg c190cnVuY2F0ZTsKCiAgICAgICAgbmxpbmtfdCBzX2xpbmtfbWF4OwogICAgICAgIHVuc2lnbmVk IGludCBzX2lub2Rlc19wZXJfYmxvY2s7CiAgICAgICAgdW5zaWduZWQgaW50IHNfaW5vZGVzX3Bl cl9ibG9ja18xOwogICAgICAgIHVuc2lnbmVkIGludCBzX2lub2Rlc19wZXJfYmxvY2tfYml0czsK ICAgICAgICB1bnNpZ25lZCBpbnQgc19pbmRfcGVyX2Jsb2NrOwogICAgICAgIHVuc2lnbmVkIGlu dCBzX2luZF9wZXJfYmxvY2tfYml0czsKICAgICAgICB1bnNpZ25lZCBpbnQgc19pbmRfcGVyX2Js b2NrXzI7CiAgICAgICAgdW5zaWduZWQgaW50IHNfdG9vYmlnX2Jsb2NrOwogICAgICAgIHVuc2ln bmVkIGludCBzX2Jsb2NrX2Jhc2U7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19maWNfc2l6ZTsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBzX2ZsY19zaXplOwoKICAgICAgICBzdHJ1Y3QgYnVmZmVy X2hlYWQgKnNfYmgxOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19iaDI7CgoKICAgICAg ICBjaGFyICogc19zYmQxOwogICAgICAgIGNoYXIgKiBzX3NiZDI7CiAgICAgICAgdTE2ICpzX3Ni X2ZpY19jb3VudDsKICAgICAgICB1MTYgKnNfc2JfZmljX2lub2RlczsKICAgICAgICB1MTYgKnNf c2JfdG90YWxfZnJlZV9pbm9kZXM7CiAgICAgICAgdTE2ICpzX2JjYWNoZV9jb3VudDsKICAgICAg ICB1MzIgKnNfYmNhY2hlOwogICAgICAgIHUzMiAqc19mcmVlX2Jsb2NrczsKICAgICAgICB1MzIg KnNfc2JfdGltZTsKICAgICAgICB1MzIgKnNfc2Jfc3RhdGU7CgoKICAgICAgICB1MzIgc19maXJz dGlub2Rlem9uZTsKICAgICAgICB1MzIgc19maXJzdGRhdGF6b25lOwogICAgICAgIHUzMiBzX25p bm9kZXM7CiAgICAgICAgdTMyIHNfbmRhdGF6b25lczsKICAgICAgICB1MzIgc19uem9uZXM7CiAg ICAgICAgdTE2IHNfbmFtZWxlbjsKfTsKIyA2NjQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9hZmZzX2ZzX3NiLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvYWZmc19mc19zYi5oIgpzdHJ1Y3QgYWZmc19ibV9pbmZvIHsKICAgICAgICB1MzIgYm1fa2V5 OwogICAgICAgIHUzMiBibV9mcmVlOwp9OwoKc3RydWN0IGFmZnNfc2JfaW5mbyB7CiAgICAgICAg aW50IHNfcGFydGl0aW9uX3NpemU7CiAgICAgICAgaW50IHNfcmVzZXJ2ZWQ7CgogICAgICAgIHUz MiBzX2RhdGFfYmxrc2l6ZTsKICAgICAgICB1MzIgc19yb290X2Jsb2NrOwogICAgICAgIGludCBz X2hhc2hzaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19mbGFnczsKICAgICAgICB1aWRfdCBz X3VpZDsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1bW9kZV90IHNfbW9kZTsKICAgICAg ICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfcm9vdF9iaDsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3Jl IHNfYm1sb2NrOwogICAgICAgIHN0cnVjdCBhZmZzX2JtX2luZm8gKnNfYml0bWFwOwogICAgICAg IHUzMiBzX2JtYXBfY291bnQ7CiAgICAgICAgdTMyIHNfYm1hcF9iaXRzOwogICAgICAgIHUzMiBz X2xhc3RfYm1hcDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKnNfYm1hcF9iaDsKICAgICAg ICBjaGFyICpzX3ByZWZpeDsKICAgICAgICBpbnQgc19wcmVmaXhfbGVuOwogICAgICAgIGNoYXIg c192b2x1bWVbMzJdOwp9OwojIDY2NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19m c19zYi5oIiAxCiMgMTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19m c19zYi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5o IiAxCiMgMzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5oIgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEKIyAzMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdWZzX2ZzLmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDMyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RpbWUuaCIgMQojIDMzICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3N0YXQuaCIgMQojIDM0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC91ZnNfZnMuaCIgMgojIDI0OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvdWZzX2ZzLmgiCnN0cnVjdCB1ZnNfdGltZXZhbCB7CiAgICAgICAgX19zMzIgdHZf c2VjOwogICAgICAgIF9fczMyIHR2X3VzZWM7Cn07CgpzdHJ1Y3QgdWZzX2Rpcl9lbnRyeSB7CiAg ICAgICAgX191MzIgZF9pbm87CiAgICAgICAgX191MTYgZF9yZWNsZW47CiAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgX191MTYgZF9uYW1sZW47CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgICAgICAgICBfX3U4IGRfdHlwZTsKICAgICAgICAgICAgICAgICAg ICAgICAgX191OCBkX25hbWxlbjsKICAgICAgICAgICAgICAgIH0gZF80NDsKICAgICAgICB9IGRf dTsKICAgICAgICBfX3U4IGRfbmFtZVsyNTUgKyAxXTsKfTsKCnN0cnVjdCB1ZnNfY3N1bSB7CiAg ICAgICAgX191MzIgY3NfbmRpcjsKICAgICAgICBfX3UzMiBjc19uYmZyZWU7CiAgICAgICAgX191 MzIgY3NfbmlmcmVlOwogICAgICAgIF9fdTMyIGNzX25mZnJlZTsKfTsKCgoKCnN0cnVjdCB1ZnNf c3VwZXJfYmxvY2sgewogICAgICAgIF9fdTMyIGZzX2xpbms7CiAgICAgICAgX191MzIgZnNfcmxp bms7CiAgICAgICAgX191MzIgZnNfc2Jsa25vOwogICAgICAgIF9fdTMyIGZzX2NibGtubzsKICAg ICAgICBfX3UzMiBmc19pYmxrbm87CiAgICAgICAgX191MzIgZnNfZGJsa25vOwogICAgICAgIF9f dTMyIGZzX2Nnb2Zmc2V0OwogICAgICAgIF9fdTMyIGZzX2NnbWFzazsKICAgICAgICBfX3UzMiBm c190aW1lOwogICAgICAgIF9fdTMyIGZzX3NpemU7CiAgICAgICAgX191MzIgZnNfZHNpemU7CiAg ICAgICAgX191MzIgZnNfbmNnOwogICAgICAgIF9fdTMyIGZzX2JzaXplOwogICAgICAgIF9fdTMy IGZzX2ZzaXplOwogICAgICAgIF9fdTMyIGZzX2ZyYWc7CgogICAgICAgIF9fdTMyIGZzX21pbmZy ZWU7CiAgICAgICAgX191MzIgZnNfcm90ZGVsYXk7CiAgICAgICAgX191MzIgZnNfcnBzOwoKICAg ICAgICBfX3UzMiBmc19ibWFzazsKICAgICAgICBfX3UzMiBmc19mbWFzazsKICAgICAgICBfX3Uz MiBmc19ic2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNoaWZ0OwoKICAgICAgICBfX3UzMiBmc19t YXhjb250aWc7CiAgICAgICAgX191MzIgZnNfbWF4YnBnOwoKICAgICAgICBfX3UzMiBmc19mcmFn c2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNidG9kYjsKICAgICAgICBfX3UzMiBmc19zYnNpemU7 CiAgICAgICAgX191MzIgZnNfY3NtYXNrOwogICAgICAgIF9fdTMyIGZzX2Nzc2hpZnQ7CiAgICAg ICAgX191MzIgZnNfbmluZGlyOwogICAgICAgIF9fdTMyIGZzX2lub3BiOwogICAgICAgIF9fdTMy IGZzX25zcGY7CgogICAgICAgIF9fdTMyIGZzX29wdGltOwoKICAgICAgICB1bmlvbiB7CiAgICAg ICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19ucHNl Y3Q7CiAgICAgICAgICAgICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBm c19zdW54ODY7CiAgICAgICAgfSBmc191MTsKICAgICAgICBfX3UzMiBmc19pbnRlcmxlYXZlOwog ICAgICAgIF9fdTMyIGZzX3RyYWNrc2tldzsKCgoKCiAgICAgICAgX191MzIgZnNfaWRbMl07Cgog ICAgICAgIF9fdTMyIGZzX2NzYWRkcjsKICAgICAgICBfX3UzMiBmc19jc3NpemU7CiAgICAgICAg X191MzIgZnNfY2dzaXplOwoKICAgICAgICBfX3UzMiBmc19udHJhazsKICAgICAgICBfX3UzMiBm c19uc2VjdDsKICAgICAgICBfX3UzMiBmc19zcGM7CgogICAgICAgIF9fdTMyIGZzX25jeWw7Cgog ICAgICAgIF9fdTMyIGZzX2NwZzsKICAgICAgICBfX3UzMiBmc19pcGc7CiAgICAgICAgX191MzIg ZnNfZnBnOwoKICAgICAgICBzdHJ1Y3QgdWZzX2NzdW0gZnNfY3N0b3RhbDsKCiAgICAgICAgX19z OCBmc19mbW9kOwogICAgICAgIF9fczggZnNfY2xlYW47CiAgICAgICAgX19zOCBmc19yb25seTsK ICAgICAgICBfX3M4IGZzX2ZsYWdzOwogICAgICAgIF9fczggZnNfZnNtbnRbNTEyXTsKCiAgICAg ICAgX191MzIgZnNfY2dyb3RvcjsKICAgICAgICBfX3UzMiBmc19jc3BbMzFdOwogICAgICAgIF9f dTMyIGZzX21heGNsdXN0ZXI7CiAgICAgICAgX191MzIgZnNfY3BjOwogICAgICAgIF9fdTE2IGZz X29wb3N0YmxbMTZdWzhdOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAg ICAgICAgICAgICAgICAgX19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAg X19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19z dGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJdOwogICAgICAg ICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAgICAgICB9IGZz X3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9f czMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVj bGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAg ICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNf cWZtYXNrWzJdOwogICAgICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNvbls1MF07CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX2NvbnRpZ3N1bXNpemU7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fczMyIGZzX21heHN5bWxpbmtsZW47CiAgICAgICAgICAgICAgICAgICAg ICAgIF9fczMyIGZzX2lub2RlZm10OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19t YXhmaWxlc2l6ZVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBmc180NDsKICAg ICAgICB9IGZzX3UyOwogICAgICAgIF9fczMyIGZzX3Bvc3RibGZvcm1hdDsKICAgICAgICBfX3Mz MiBmc19ucnBvczsKICAgICAgICBfX3MzMiBmc19wb3N0YmxvZmY7CiAgICAgICAgX19zMzIgZnNf cm90YmxvZmY7CiAgICAgICAgX19zMzIgZnNfbWFnaWM7CiAgICAgICAgX191OCBmc19zcGFjZVsx XTsKfTsKIyA0MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19mcy5o IgpzdHJ1Y3QgdWZzX2N5bGluZGVyX2dyb3VwIHsKICAgICAgICBfX3UzMiBjZ19saW5rOwogICAg ICAgIF9fdTMyIGNnX21hZ2ljOwogICAgICAgIF9fdTMyIGNnX3RpbWU7CiAgICAgICAgX191MzIg Y2dfY2d4OwogICAgICAgIF9fdTE2IGNnX25jeWw7CiAgICAgICAgX191MTYgY2dfbmlibGs7CiAg ICAgICAgX191MzIgY2dfbmRibGs7CiAgICAgICAgc3RydWN0IHVmc19jc3VtIGNnX2NzOwogICAg ICAgIF9fdTMyIGNnX3JvdG9yOwogICAgICAgIF9fdTMyIGNnX2Zyb3RvcjsKICAgICAgICBfX3Uz MiBjZ19pcm90b3I7CiAgICAgICAgX191MzIgY2dfZnJzdW1bKDgxOTIgLyAxMDI0KV07CiAgICAg ICAgX191MzIgY2dfYnRvdG9mZjsKICAgICAgICBfX3UzMiBjZ19ib2ZmOwogICAgICAgIF9fdTMy IGNnX2l1c2Vkb2ZmOwogICAgICAgIF9fdTMyIGNnX2ZyZWVvZmY7CiAgICAgICAgX191MzIgY2df bmV4dGZyZWVvZmY7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAg ICAgICAgICAgICAgICAgICAgICAgX191MzIgY2dfY2x1c3RlcnN1bW9mZjsKICAgICAgICAgICAg ICAgICAgICAgICAgX191MzIgY2dfY2x1c3Rlcm9mZjsKICAgICAgICAgICAgICAgICAgICAgICAg X191MzIgY2dfbmNsdXN0ZXJibGtzOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBjZ19z cGFyZWNvblsxM107CiAgICAgICAgICAgICAgICB9IGNnXzQ0OwogICAgICAgICAgICAgICAgX191 MzIgY2dfc3BhcmVjb25bMTZdOwogICAgICAgIH0gY2dfdTsKICAgICAgICBfX3U4IGNnX3NwYWNl WzFdOwoKfTsKCgoKCnN0cnVjdCB1ZnNfaW5vZGUgewogICAgICAgIF9fdTE2IHVpX21vZGU7CiAg ICAgICAgX191MTYgdWlfbmxpbms7CiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc3VpZDsKICAgICAgICAgICAg ICAgICAgICAgICAgX191MTYgdWlfc2dpZDsKICAgICAgICAgICAgICAgIH0gb2xkaWRzOwogICAg ICAgICAgICAgICAgX191MzIgdWlfaW51bWJlcjsKICAgICAgICAgICAgICAgIF9fdTMyIHVpX2F1 dGhvcjsKICAgICAgICB9IHVpX3UxOwogICAgICAgIF9fdTY0IHVpX3NpemU7CiAgICAgICAgc3Ry dWN0IHVmc190aW1ldmFsIHVpX2F0aW1lOwogICAgICAgIHN0cnVjdCB1ZnNfdGltZXZhbCB1aV9t dGltZTsKICAgICAgICBzdHJ1Y3QgdWZzX3RpbWV2YWwgdWlfY3RpbWU7CiAgICAgICAgdW5pb24g ewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIg dWlfZGJbMTJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9pYlszXTsKICAgICAg ICAgICAgICAgIH0gdWlfYWRkcjsKICAgICAgICAgICAgICAgIF9fdTggdWlfc3ltbGlua1s0Kigx MiArMyldOwogICAgICAgIH0gdWlfdTI7CiAgICAgICAgX191MzIgdWlfZmxhZ3M7CiAgICAgICAg X191MzIgdWlfYmxvY2tzOwogICAgICAgIF9fdTMyIHVpX2dlbjsKICAgICAgICB1bmlvbiB7CiAg ICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1aV9z aGFkb3c7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAgICAgICAgICAg ICAgICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiB1 aV9vZWZ0ZmxhZzsKICAgICAgICAgICAgICAgIH0gdWlfc3VuOwogICAgICAgICAgICAgICAgc3Ry dWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgdWlfdWlkOwogICAgICAgICAgICAg ICAgICAgICAgICBfX3UzMiB1aV9naWQ7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIHVp X3NwYXJlWzJdOwogICAgICAgICAgICAgICAgfSB1aV80NDsKICAgICAgICAgICAgICAgIHN0cnVj dCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIHVpX3VpZDsKICAgICAgICAgICAgICAg ICAgICAgICAgX191MzIgdWlfZ2lkOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UxNiB1aV9t b2RlaDsKICAgICAgICAgICAgICAgICAgICAgICAgX191MTYgdWlfc3BhcmU7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdTMyIHVpX3RyYW5zOwogICAgICAgICAgICAgICAgfSB1aV9odXJkOwog ICAgICAgIH0gdWlfdTM7Cn07CiMgNTI0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC91ZnNfZnMuaCIKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfZnJhZ21lbnRzIChzdHJ1Y3QgaW5v ZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgdWZzX2ZyZWVfYmxvY2tzIChz dHJ1Y3QgaW5vZGUgKiwgdW5zaWduZWQsIHVuc2lnbmVkKTsKZXh0ZXJuIHVuc2lnbmVkIHVmc19u ZXdfZnJhZ21lbnRzIChzdHJ1Y3QgaW5vZGUgKiwgdTMyICosIHVuc2lnbmVkLCB1bnNpZ25lZCwg dW5zaWduZWQsIGludCAqKTsKCgpleHRlcm4gc3RydWN0IHVmc19jZ19wcml2YXRlX2luZm8gKiB1 ZnNfbG9hZF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsKZXh0ZXJu IHZvaWQgdWZzX3B1dF9jeWxpbmRlciAoc3RydWN0IHN1cGVyX2Jsb2NrICosIHVuc2lnbmVkKTsK CgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2Rpcl9pbm9kZV9vcGVyYXRpb25z OwpleHRlcm4gaW50IHVmc19jaGVja19kaXJfZW50cnkgKGNvbnN0IGNoYXIgKiwgc3RydWN0IGlu b2RlICosIHN0cnVjdCB1ZnNfZGlyX2VudHJ5ICosIHN0cnVjdCBidWZmZXJfaGVhZCAqLCB1bnNp Z25lZCBsb25nKTsKCgpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMgdWZzX2ZpbGVfaW5v ZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgdWZzX2ZpbGVfb3Bl cmF0aW9uczsKCmV4dGVybiBzdHJ1Y3QgYWRkcmVzc19zcGFjZV9vcGVyYXRpb25zIHVmc19hb3Bz OwoKCmV4dGVybiB2b2lkIHVmc19mcmVlX2lub2RlIChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0 ZXJuIHN0cnVjdCBpbm9kZSAqIHVmc19uZXdfaW5vZGUgKGNvbnN0IHN0cnVjdCBpbm9kZSAqLCBp bnQsIGludCAqKTsKCgpleHRlcm4gaW50IHVmc19mcmFnX21hcCAoc3RydWN0IGlub2RlICosIGlu dCk7CmV4dGVybiB2b2lkIHVmc19yZWFkX2lub2RlIChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2 b2lkIHVmc19wdXRfaW5vZGUgKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgdWZzX3dyaXRl X2lub2RlIChzdHJ1Y3QgaW5vZGUgKiwgaW50KTsKZXh0ZXJuIGludCB1ZnNfc3luY19pbm9kZSAo c3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCB1ZnNfZGVsZXRlX2lub2RlIChzdHJ1Y3QgaW5v ZGUgKik7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiB1ZnNfZ2V0ZnJhZyAoc3RydWN0IGlu b2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKZXh0ZXJuIHN0cnVjdCBidWZmZXJfaGVhZCAq IHVmc19icmVhZCAoc3RydWN0IGlub2RlICosIHVuc2lnbmVkLCBpbnQsIGludCAqKTsKCgpleHRl cm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB1ZnNfZGlyX29wZXJhdGlvbnM7CgoKZXh0ZXJuIHN0 cnVjdCBmaWxlX3N5c3RlbV90eXBlIHVmc19mc190eXBlOwpleHRlcm4gdm9pZCB1ZnNfd2Fybmlu ZyAoc3RydWN0IHN1cGVyX2Jsb2NrICosIGNvbnN0IGNoYXIgKiwgY29uc3QgY2hhciAqLCAuLi4p IF9fYXR0cmlidXRlX18gKChmb3JtYXQgKHByaW50ZiwgMywgNCkpKTsKZXh0ZXJuIHZvaWQgdWZz X2Vycm9yIChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgY29uc3QgY2hhciAqLCBjb25zdCBjaGFyICos IC4uLikgX19hdHRyaWJ1dGVfXyAoKGZvcm1hdCAocHJpbnRmLCAzLCA0KSkpOwpleHRlcm4gdm9p ZCB1ZnNfcGFuaWMgKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBjb25zdCBjaGFyICosIGNvbnN0IGNo YXIgKiwgLi4uKSBfX2F0dHJpYnV0ZV9fICgoZm9ybWF0IChwcmludGYsIDMsIDQpKSk7CmV4dGVy biB2b2lkIHVmc193cml0ZV9zdXBlciAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwoKCmV4dGVybiBz dHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyB1ZnNfZmFzdF9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7 CgoKZXh0ZXJuIHZvaWQgdWZzX3RydW5jYXRlIChzdHJ1Y3QgaW5vZGUgKik7CiMgMTggIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Vmc19mc19zYi5oIiAyCgoKCgoKc3RydWN0 IHVmc19idWZmZXJfaGVhZCB7CiAgICAgICAgdW5zaWduZWQgZnJhZ21lbnQ7CiAgICAgICAgdW5z aWduZWQgY291bnQ7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogYmhbKDgxOTIgLyAxMDI0 KV07Cn07CgpzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyB7CiAgICAgICAgc3RydWN0IHVmc19j eWxpbmRlcl9ncm91cCB1Y2c7CiAgICAgICAgX191MzIgY19jZ3g7CiAgICAgICAgX191MTYgY19u Y3lsOwogICAgICAgIF9fdTE2IGNfbmlibGs7CiAgICAgICAgX191MzIgY19uZGJsazsKICAgICAg ICBfX3UzMiBjX3JvdG9yOwogICAgICAgIF9fdTMyIGNfZnJvdG9yOwogICAgICAgIF9fdTMyIGNf aXJvdG9yOwogICAgICAgIF9fdTMyIGNfYnRvdG9mZjsKICAgICAgICBfX3UzMiBjX2JvZmY7CiAg ICAgICAgX191MzIgY19pdXNlZG9mZjsKICAgICAgICBfX3UzMiBjX2ZyZWVvZmY7CiAgICAgICAg X191MzIgY19uZXh0ZnJlZW9mZjsKICAgICAgICBfX3UzMiBjX2NsdXN0ZXJzdW1vZmY7CiAgICAg ICAgX191MzIgY19jbHVzdGVyb2ZmOwogICAgICAgIF9fdTMyIGNfbmNsdXN0ZXJibGtzOwp9OwoK c3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gewogICAgICAgIHN0cnVjdCB1ZnNfYnVmZmVyX2hl YWQgc191Ymg7CiAgICAgICAgX191MzIgc19zYmxrbm87CiAgICAgICAgX191MzIgc19jYmxrbm87 CiAgICAgICAgX191MzIgc19pYmxrbm87CiAgICAgICAgX191MzIgc19kYmxrbm87CiAgICAgICAg X191MzIgc19jZ29mZnNldDsKICAgICAgICBfX3UzMiBzX2NnbWFzazsKICAgICAgICBfX3UzMiBz X3NpemU7CiAgICAgICAgX191MzIgc19kc2l6ZTsKICAgICAgICBfX3UzMiBzX25jZzsKICAgICAg ICBfX3UzMiBzX2JzaXplOwogICAgICAgIF9fdTMyIHNfZnNpemU7CiAgICAgICAgX191MzIgc19m cGI7CiAgICAgICAgX191MzIgc19taW5mcmVlOwogICAgICAgIF9fdTMyIHNfYm1hc2s7CiAgICAg ICAgX191MzIgc19mbWFzazsKICAgICAgICBfX3UzMiBzX2JzaGlmdDsKICAgICAgICBfX3UzMiBz X2ZzaGlmdDsKICAgICAgICBfX3UzMiBzX2ZwYnNoaWZ0OwogICAgICAgIF9fdTMyIHNfZnNidG9k YjsKICAgICAgICBfX3UzMiBzX3Nic2l6ZTsKICAgICAgICBfX3UzMiBzX2NzbWFzazsKICAgICAg ICBfX3UzMiBzX2Nzc2hpZnQ7CiAgICAgICAgX191MzIgc19uaW5kaXI7CiAgICAgICAgX191MzIg c19pbm9wYjsKICAgICAgICBfX3UzMiBzX25zcGY7CiAgICAgICAgX191MzIgc19ucHNlY3Q7CiAg ICAgICAgX191MzIgc19pbnRlcmxlYXZlOwogICAgICAgIF9fdTMyIHNfdHJhY2tza2V3OwogICAg ICAgIF9fdTMyIHNfY3NhZGRyOwogICAgICAgIF9fdTMyIHNfY3NzaXplOwogICAgICAgIF9fdTMy IHNfY2dzaXplOwogICAgICAgIF9fdTMyIHNfbnRyYWs7CiAgICAgICAgX191MzIgc19uc2VjdDsK ICAgICAgICBfX3UzMiBzX3NwYzsKICAgICAgICBfX3UzMiBzX2lwZzsKICAgICAgICBfX3UzMiBz X2ZwZzsKICAgICAgICBfX3UzMiBzX2NwYzsKICAgICAgICBfX3MzMiBzX2NvbnRpZ3N1bXNpemU7 CiAgICAgICAgX19zNjQgc19xYm1hc2s7CiAgICAgICAgX19zNjQgc19xZm1hc2s7CiAgICAgICAg X19zMzIgc19wb3N0Ymxmb3JtYXQ7CiAgICAgICAgX19zMzIgc19ucnBvczsKICAgICAgICBfX3Mz MiBzX3Bvc3RibG9mZjsKICAgICAgICBfX3MzMiBzX3JvdGJsb2ZmOwoKICAgICAgICBfX3UzMiBz X2ZwYm1hc2s7CiAgICAgICAgX191MzIgc19hcGI7CiAgICAgICAgX191MzIgc18yYXBiOwogICAg ICAgIF9fdTMyIHNfM2FwYjsKICAgICAgICBfX3UzMiBzX2FwYm1hc2s7CiAgICAgICAgX191MzIg c19hcGJzaGlmdDsKICAgICAgICBfX3UzMiBzXzJhcGJzaGlmdDsKICAgICAgICBfX3UzMiBzXzNh cGJzaGlmdDsKICAgICAgICBfX3UzMiBzX25zcGZzaGlmdDsKICAgICAgICBfX3UzMiBzX25zcGI7 CiAgICAgICAgX191MzIgc19pbm9wZjsKICAgICAgICBfX3UzMiBzX3NiYmFzZTsKICAgICAgICBf X3UzMiBzX2JwZjsKICAgICAgICBfX3UzMiBzX2JwZnNoaWZ0OwogICAgICAgIF9fdTMyIHNfYnBm bWFzazsKCiAgICAgICAgX191MzIgc19tYXhzeW1saW5rbGVuOwp9OwoKCgoKCnN0cnVjdCB1ZnNf c2JfaW5mbyB7CiAgICAgICAgc3RydWN0IHVmc19zYl9wcml2YXRlX2luZm8gKiBzX3VzcGk7CiAg ICAgICAgc3RydWN0IHVmc19jc3VtICogc19jc3BbMzFdOwogICAgICAgIHVuc2lnbmVkIHNfc3dh YjsKICAgICAgICB1bnNpZ25lZCBzX2ZsYWdzOwogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAq KiBzX3VjZzsKICAgICAgICBzdHJ1Y3QgdWZzX2NnX3ByaXZhdGVfaW5mbyAqIHNfdWNwaVs4XTsK ICAgICAgICB1bnNpZ25lZCBzX2Nnbm9bOF07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc19jZ19s b2FkZWQ7CiAgICAgICAgdW5zaWduZWQgc19tb3VudF9vcHQ7Cn07CgoKCgoKCgpzdHJ1Y3QgdWZz X3N1cGVyX2Jsb2NrX2ZpcnN0IHsKICAgICAgICBfX3UzMiBmc19saW5rOwogICAgICAgIF9fdTMy IGZzX3JsaW5rOwogICAgICAgIF9fdTMyIGZzX3NibGtubzsKICAgICAgICBfX3UzMiBmc19jYmxr bm87CiAgICAgICAgX191MzIgZnNfaWJsa25vOwogICAgICAgIF9fdTMyIGZzX2RibGtubzsKICAg ICAgICBfX3UzMiBmc19jZ29mZnNldDsKICAgICAgICBfX3UzMiBmc19jZ21hc2s7CiAgICAgICAg X191MzIgZnNfdGltZTsKICAgICAgICBfX3UzMiBmc19zaXplOwogICAgICAgIF9fdTMyIGZzX2Rz aXplOwogICAgICAgIF9fdTMyIGZzX25jZzsKICAgICAgICBfX3UzMiBmc19ic2l6ZTsKICAgICAg ICBfX3UzMiBmc19mc2l6ZTsKICAgICAgICBfX3UzMiBmc19mcmFnOwogICAgICAgIF9fdTMyIGZz X21pbmZyZWU7CiAgICAgICAgX191MzIgZnNfcm90ZGVsYXk7CiAgICAgICAgX191MzIgZnNfcnBz OwogICAgICAgIF9fdTMyIGZzX2JtYXNrOwogICAgICAgIF9fdTMyIGZzX2ZtYXNrOwogICAgICAg IF9fdTMyIGZzX2JzaGlmdDsKICAgICAgICBfX3UzMiBmc19mc2hpZnQ7CiAgICAgICAgX191MzIg ZnNfbWF4Y29udGlnOwogICAgICAgIF9fdTMyIGZzX21heGJwZzsKICAgICAgICBfX3UzMiBmc19m cmFnc2hpZnQ7CiAgICAgICAgX191MzIgZnNfZnNidG9kYjsKICAgICAgICBfX3UzMiBmc19zYnNp emU7CiAgICAgICAgX191MzIgZnNfY3NtYXNrOwogICAgICAgIF9fdTMyIGZzX2Nzc2hpZnQ7CiAg ICAgICAgX191MzIgZnNfbmluZGlyOwogICAgICAgIF9fdTMyIGZzX2lub3BiOwogICAgICAgIF9f dTMyIGZzX25zcGY7CiAgICAgICAgX191MzIgZnNfb3B0aW07CiAgICAgICAgdW5pb24gewogICAg ICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfbnBz ZWN0OwogICAgICAgICAgICAgICAgfSBmc19zdW47CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgewog ICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zdGF0ZTsKICAgICAgICAgICAgICAgIH0g ZnNfc3VueDg2OwogICAgICAgIH0gZnNfdTE7CiAgICAgICAgX191MzIgZnNfaW50ZXJsZWF2ZTsK ICAgICAgICBfX3UzMiBmc190cmFja3NrZXc7CiAgICAgICAgX191MzIgZnNfaWRbMl07CiAgICAg ICAgX191MzIgZnNfY3NhZGRyOwogICAgICAgIF9fdTMyIGZzX2Nzc2l6ZTsKICAgICAgICBfX3Uz MiBmc19jZ3NpemU7CiAgICAgICAgX191MzIgZnNfbnRyYWs7CiAgICAgICAgX191MzIgZnNfbnNl Y3Q7CiAgICAgICAgX191MzIgZnNfc3BjOwogICAgICAgIF9fdTMyIGZzX25jeWw7CiAgICAgICAg X191MzIgZnNfY3BnOwogICAgICAgIF9fdTMyIGZzX2lwZzsKICAgICAgICBfX3UzMiBmc19mcGc7 CiAgICAgICAgc3RydWN0IHVmc19jc3VtIGZzX2NzdG90YWw7CiAgICAgICAgX19zOCBmc19mbW9k OwogICAgICAgIF9fczggZnNfY2xlYW47CiAgICAgICAgX19zOCBmc19yb25seTsKICAgICAgICBf X3M4IGZzX2ZsYWdzOwogICAgICAgIF9fczggZnNfZnNtbnRbNTEyIC0gMjEyXTsKCn07CgpzdHJ1 Y3QgdWZzX3N1cGVyX2Jsb2NrX3NlY29uZCB7CiAgICAgICAgX19zOCBmc19mc21udFsyMTJdOwog ICAgICAgIF9fdTMyIGZzX2Nncm90b3I7CiAgICAgICAgX191MzIgZnNfY3NwWzMxXTsKICAgICAg ICBfX3UzMiBmc19tYXhjbHVzdGVyOwogICAgICAgIF9fdTMyIGZzX2NwYzsKICAgICAgICBfX3Ux NiBmc19vcG9zdGJsWzgyXTsKfTsKCnN0cnVjdCB1ZnNfc3VwZXJfYmxvY2tfdGhpcmQgewogICAg ICAgIF9fdTE2IGZzX29wb3N0YmxbNDZdOwogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAg IHN0cnVjdCB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsK ICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAg ICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24yWzFdOwogICAgICAgICAgICAgICAgICAgICAgICBf X3MzMiBmc19zdGF0ZTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNfcWJtYXNrWzJd OwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAgICAgICAgICAg ICAgICB9IGZzX3N1bjsKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICAg ICAgICAgIF9fczMyIGZzX3NwYXJlY29uWzUzXTsKICAgICAgICAgICAgICAgICAgICAgICAgX19z MzIgZnNfcmVjbGFpbTsKICAgICAgICAgICAgICAgICAgICAgICAgX19zMzIgZnNfc3BhcmVjb24y WzFdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19ucHNlY3Q7CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fdTMyIGZzX3FibWFza1syXTsKICAgICAgICAgICAgICAgICAgICAgICAg X191MzIgZnNfcWZtYXNrWzJdOwogICAgICAgICAgICAgICAgfSBmc19zdW54ODY7CiAgICAgICAg ICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBfX3MzMiBmc19zcGFyZWNv bls1MF07CiAgICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX2NvbnRpZ3N1bXNpemU7CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX21heHN5bWxpbmtsZW47CiAgICAgICAgICAg ICAgICAgICAgICAgIF9fczMyIGZzX2lub2RlZm10OwogICAgICAgICAgICAgICAgICAgICAgICBf X3UzMiBmc19tYXhmaWxlc2l6ZVsyXTsKICAgICAgICAgICAgICAgICAgICAgICAgX191MzIgZnNf cWJtYXNrWzJdOwogICAgICAgICAgICAgICAgICAgICAgICBfX3UzMiBmc19xZm1hc2tbMl07CiAg ICAgICAgICAgICAgICAgICAgICAgIF9fczMyIGZzX3N0YXRlOwogICAgICAgICAgICAgICAgfSBm c180NDsKICAgICAgICB9IGZzX3UyOwogICAgICAgIF9fczMyIGZzX3Bvc3RibGZvcm1hdDsKICAg ICAgICBfX3MzMiBmc19ucnBvczsKICAgICAgICBfX3MzMiBmc19wb3N0YmxvZmY7CiAgICAgICAg X19zMzIgZnNfcm90YmxvZmY7CiAgICAgICAgX19zMzIgZnNfbWFnaWM7CiAgICAgICAgX191OCBm c19zcGFjZVsxXTsKfTsKIyA2NjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9lZnNfZnNf c2IuaCIgMQojIDI1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9lZnNfZnNf c2IuaCIKc3RydWN0IGVmc19zdXBlciB7CiAgICAgICAgaW50MzJfdCBmc19zaXplOwogICAgICAg IGludDMyX3QgZnNfZmlyc3RjZzsKICAgICAgICBpbnQzMl90IGZzX2NnZnNpemU7CiAgICAgICAg c2hvcnQgZnNfY2dpc2l6ZTsKICAgICAgICBzaG9ydCBmc19zZWN0b3JzOwogICAgICAgIHNob3J0 IGZzX2hlYWRzOwogICAgICAgIHNob3J0IGZzX25jZzsKICAgICAgICBzaG9ydCBmc19kaXJ0eTsK ICAgICAgICBpbnQzMl90IGZzX3RpbWU7CiAgICAgICAgaW50MzJfdCBmc19tYWdpYzsKICAgICAg ICBjaGFyIGZzX2ZuYW1lWzZdOwogICAgICAgIGNoYXIgZnNfZnBhY2tbNl07CiAgICAgICAgaW50 MzJfdCBmc19ibXNpemU7CiAgICAgICAgaW50MzJfdCBmc190ZnJlZTsKICAgICAgICBpbnQzMl90 IGZzX3Rpbm9kZTsKICAgICAgICBpbnQzMl90IGZzX2JtYmxvY2s7CiAgICAgICAgaW50MzJfdCBm c19yZXBsc2I7CiAgICAgICAgaW50MzJfdCBmc19sYXN0aWFsbG9jOwogICAgICAgIGNoYXIgZnNf c3BhcmVbMjBdOwogICAgICAgIGludDMyX3QgZnNfY2hlY2tzdW07Cn07CgoKc3RydWN0IGVmc19z Yl9pbmZvIHsKICAgICAgICBpbnQzMl90IGZzX21hZ2ljOwogICAgICAgIGludDMyX3QgZnNfc3Rh cnQ7CiAgICAgICAgaW50MzJfdCBmaXJzdF9ibG9jazsKICAgICAgICBpbnQzMl90IHRvdGFsX2Js b2NrczsKICAgICAgICBpbnQzMl90IGdyb3VwX3NpemU7CiAgICAgICAgaW50MzJfdCBkYXRhX2Zy ZWU7CiAgICAgICAgaW50MzJfdCBpbm9kZV9mcmVlOwogICAgICAgIHNob3J0IGlub2RlX2Jsb2Nr czsKICAgICAgICBzaG9ydCB0b3RhbF9ncm91cHM7Cn07CiMgNjY3ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvcm9tZnNfZnNfc2IuaCIgMQoKCgoKCnN0cnVjdCByb21mc19zYl9pbmZvIHsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNfbWF4c2l6ZTsKfTsKIyA2NjggIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3NtYl9mc19zYi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvc21iLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv c21iLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIg MQojIDEzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zbWIuaCIgMgoKZW51 bSBzbWJfcHJvdG9jb2wgewogICAgICAgIFNNQl9QUk9UT0NPTF9OT05FLAogICAgICAgIFNNQl9Q Uk9UT0NPTF9DT1JFLAogICAgICAgIFNNQl9QUk9UT0NPTF9DT1JFUExVUywKICAgICAgICBTTUJf UFJPVE9DT0xfTEFOTUFOMSwKICAgICAgICBTTUJfUFJPVE9DT0xfTEFOTUFOMiwKICAgICAgICBT TUJfUFJPVE9DT0xfTlQxCn07CgplbnVtIHNtYl9jYXNlX2huZGwgewogICAgICAgIFNNQl9DQVNF X0RFRkFVTFQsCiAgICAgICAgU01CX0NBU0VfTE9XRVIsCiAgICAgICAgU01CX0NBU0VfVVBQRVIK fTsKCnN0cnVjdCBzbWJfZHNrYXR0ciB7CiAgICAgICAgX191MTYgdG90YWw7CiAgICAgICAgX191 MTYgYWxsb2NibG9ja3M7CiAgICAgICAgX191MTYgYmxvY2tzaXplOwogICAgICAgIF9fdTE2IGZy ZWU7Cn07CgpzdHJ1Y3Qgc21iX2Nvbm5fb3B0IHsKCgogICAgICAgIHVuc2lnbmVkIGludCBmZDsK CiAgICAgICAgZW51bSBzbWJfcHJvdG9jb2wgcHJvdG9jb2w7CiAgICAgICAgZW51bSBzbWJfY2Fz ZV9obmRsIGNhc2VfaGFuZGxpbmc7CgoKCiAgICAgICAgX191MzIgbWF4X3htaXQ7CiAgICAgICAg X191MTYgc2VydmVyX3VpZDsKICAgICAgICBfX3UxNiB0aWQ7CgoKICAgICAgICBfX3UxNiBzZWNt b2RlOwogICAgICAgIF9fdTE2IG1heG11eDsKICAgICAgICBfX3UxNiBtYXh2Y3M7CiAgICAgICAg X191MTYgcmF3bW9kZTsKICAgICAgICBfX3UzMiBzZXNza2V5OwoKCiAgICAgICAgX191MzIgbWF4 cmF3OwogICAgICAgIF9fdTMyIGNhcGFiaWxpdGllczsKICAgICAgICBfX3MxNiBzZXJ2ZXJ6b25l Owp9OwoKCgoKc3RydWN0IHNtYl9ubHNfY29kZXBhZ2UgewogICAgICAgIGNoYXIgbG9jYWxfbmFt ZVsyMF07CiAgICAgICAgY2hhciByZW1vdGVfbmFtZVsyMF07Cn07CiMgNzggIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NtYi5oIgpzdHJ1Y3Qgc21iX2ZhdHRyIHsKCiAgICAg ICAgX191MTYgYXR0cjsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmX2lubzsKICAgICAgICB1bW9k ZV90IGZfbW9kZTsKICAgICAgICBubGlua190IGZfbmxpbms7CiAgICAgICAgdWlkX3QgZl91aWQ7 CiAgICAgICAgZ2lkX3QgZl9naWQ7CiAgICAgICAga2Rldl90IGZfcmRldjsKICAgICAgICBvZmZf dCBmX3NpemU7CiAgICAgICAgdGltZV90IGZfYXRpbWU7CiAgICAgICAgdGltZV90IGZfbXRpbWU7 CiAgICAgICAgdGltZV90IGZfY3RpbWU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmX2Jsa3NpemU7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBmX2Jsb2NrczsKfTsKCmVudW0gc21iX2Nvbm5fc3RhdGUg ewogICAgICAgIENPTk5fVkFMSUQsCiAgICAgICAgQ09OTl9JTlZBTElELAoKICAgICAgICBDT05O X1JFVFJJRUQsCiAgICAgICAgQ09OTl9SRVRSWUlORwp9OwojIDE2ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9zbWJfZnNfc2IuaCIgMgoKCgoKCgoKc3RydWN0IHNtYl9zYl9p bmZvIHsKICAgICAgICBlbnVtIHNtYl9jb25uX3N0YXRlIHN0YXRlOwogICAgICAgIHN0cnVjdCBm aWxlICogc29ja19maWxlOwoKICAgICAgICBzdHJ1Y3Qgc21iX21vdW50X2RhdGFfa2VybmVsICpt bnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciAqdGVtcF9idWY7CgoKCgogICAgICAgIHVuc2lnbmVk IGludCBnZW5lcmF0aW9uOwogICAgICAgIHBpZF90IGNvbm5fcGlkOwogICAgICAgIHN0cnVjdCBz bWJfY29ubl9vcHQgb3B0OwoKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKICAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwoKICAgICAgICBfX3UzMiBwYWNrZXRfc2l6ZTsKICAgICAg ICB1bnNpZ25lZCBjaGFyICogcGFja2V0OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJjbHM7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgZXJyOwoKCiAgICAgICAgdm9pZCAqZGF0YV9yZWFkeTsKCgog ICAgICAgIHN0cnVjdCBubHNfdGFibGUgKnJlbW90ZV9ubHM7CiAgICAgICAgc3RydWN0IG5sc190 YWJsZSAqbG9jYWxfbmxzOwoKCgoKICAgICAgICBjaGFyICpuYW1lX2J1ZjsKCiAgICAgICAgaW50 ICgqY29udmVydCkoY2hhciAqLCBpbnQsIGNvbnN0IGNoYXIgKiwgaW50LAogICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBubHNfdGFibGUgKiwgc3RydWN0IG5sc190YWJsZSAqKTsKfTsKCgpz dGF0aWMgaW5saW5lIHZvaWQKc21iX2xvY2tfc2VydmVyKHN0cnVjdCBzbWJfc2JfaW5mbyAqc2Vy dmVyKQp7CiAgICAgICAgZG93bigmKHNlcnZlci0+c2VtKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9p ZApzbWJfdW5sb2NrX3NlcnZlcihzdHJ1Y3Qgc21iX3NiX2luZm8gKnNlcnZlcikKewogICAgICAg IHVwKCYoc2VydmVyLT5zZW0pKTsKfQojIDY2OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvZnMuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2hmc19mc19zYi5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2hmc19mc19zYi5oIgpzdHJ1Y3QgaGZzX25hbWU7Cgp0eXBlZGVmIGludCAoKmhmc19uYW1laW5f Zm4pIChjaGFyICosIGNvbnN0IHN0cnVjdCBoZnNfbmFtZSAqKTsKdHlwZWRlZiB2b2lkICgqaGZz X25hbWVvdXRfZm4pIChzdHJ1Y3QgaGZzX25hbWUgKiwgY29uc3QgY2hhciAqLCBpbnQpOwp0eXBl ZGVmIHZvaWQgKCpoZnNfaWZpbGxfZm4pIChzdHJ1Y3QgaW5vZGUgKiwgaW5vX3QsIGNvbnN0IGlu dCk7CgoKCgoKCnN0cnVjdCBoZnNfc2JfaW5mbyB7CiAgICAgICAgaW50IG1hZ2ljOwogICAgICAg IHN0cnVjdCBoZnNfbWRiICpzX21kYjsKICAgICAgICBpbnQgc19xdWlldDsKCiAgICAgICAgaW50 IHNfbG93ZXJjYXNlOwogICAgICAgIGludCBzX2FmcGQ7CiAgICAgICAgaW50IHNfdmVyc2lvbjsK ICAgICAgICBoZnNfbmFtZWluX2ZuIHNfbmFtZWluOwoKCiAgICAgICAgaGZzX25hbWVvdXRfZm4g c19uYW1lb3V0OwoKCiAgICAgICAgaGZzX2lmaWxsX2ZuIHNfaWZpbGw7CgogICAgICAgIGNvbnN0 IHN0cnVjdCBoZnNfbmFtZSAqc19yZXNlcnZlZDE7CiAgICAgICAgY29uc3Qgc3RydWN0IGhmc19u YW1lICpzX3Jlc2VydmVkMjsKICAgICAgICBfX3UzMiBzX3R5cGU7CiAgICAgICAgX191MzIgc19j cmVhdG9yOwogICAgICAgIHVtb2RlX3Qgc191bWFzazsKCiAgICAgICAgdWlkX3Qgc191aWQ7CiAg ICAgICAgZ2lkX3Qgc19naWQ7CiAgICAgICAgY2hhciBzX2NvbnY7Cn07CiMgNjcwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvYWRmc19mc19zYi5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2FkZnNfZnNfc2IuaCIKc3RydWN0IGFkZnNfZGlzY21hcDsK c3RydWN0IGFkZnNfZGlyX29wczsKCgoKCnN0cnVjdCBhZGZzX3NiX2luZm8gewogICAgICAgIHN0 cnVjdCBhZGZzX2Rpc2NtYXAgKnNfbWFwOwogICAgICAgIHN0cnVjdCBhZGZzX2Rpcl9vcHMgKnNf ZGlyOwoKICAgICAgICB1aWRfdCBzX3VpZDsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1 bW9kZV90IHNfb3duZXJfbWFzazsKICAgICAgICB1bW9kZV90IHNfb3RoZXJfbWFzazsKCiAgICAg ICAgX191MzIgc19pZHNfcGVyX3pvbmU7CiAgICAgICAgX191MzIgc19pZGxlbjsKICAgICAgICBf X3UzMiBzX21hcF9zaXplOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc19zaXplOwogICAgICAgIHNp Z25lZCBpbnQgc19tYXAyYmxrOwogICAgICAgIHVuc2lnbmVkIGludCBzX2xvZzJzaGFyZXNpemU7 CiAgICAgICAgdW5zaWduZWQgaW50IHNfdmVyc2lvbjsKICAgICAgICB1bnNpZ25lZCBpbnQgc19u YW1lbGVuOwp9OwojIDY3MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3FueDRfZnNfc2Iu aCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9xbng0X2ZzX3Ni LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcW54NF9mcy5oIiAx CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9xbnh0eXBlcy5oIiAxCiMgMTQg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIgMgojIDQ1ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9xbng0X2ZzLmgiCnN0cnVjdCBxbng0 X2lub2RlX2VudHJ5IHsKICAgICAgICBjaGFyIGRpX2ZuYW1lWzE2XTsKICAgICAgICBxbng0X29m Zl90IGRpX3NpemU7CiAgICAgICAgcW54NF94dG50X3QgZGlfZmlyc3RfeHRudDsKICAgICAgICBf X3UzMiBkaV94YmxrOwogICAgICAgIF9fczMyIGRpX2Z0aW1lOwogICAgICAgIF9fczMyIGRpX210 aW1lOwogICAgICAgIF9fczMyIGRpX2F0aW1lOwogICAgICAgIF9fczMyIGRpX2N0aW1lOwogICAg ICAgIHFueDRfbnh0bnRfdCBkaV9udW1feHRudHM7CiAgICAgICAgcW54NF9tb2RlX3QgZGlfbW9k ZTsKICAgICAgICBxbng0X211aWRfdCBkaV91aWQ7CiAgICAgICAgcW54NF9tZ2lkX3QgZGlfZ2lk OwogICAgICAgIHFueDRfbmxpbmtfdCBkaV9ubGluazsKICAgICAgICBfX3U4IGRpX3plcm9bNF07 CiAgICAgICAgcW54NF9mdHlwZV90IGRpX3R5cGU7CiAgICAgICAgX191OCBkaV9zdGF0dXM7Cn07 CgpzdHJ1Y3QgcW54NF9saW5rX2luZm8gewogICAgICAgIGNoYXIgZGxfZm5hbWVbNDhdOwogICAg ICAgIF9fdTMyIGRsX2lub2RlX2JsazsKICAgICAgICBfX3U4IGRsX2lub2RlX25keDsKICAgICAg ICBfX3U4IGRsX3NwYXJlWzEwXTsKICAgICAgICBfX3U4IGRsX3N0YXR1czsKfTsKCnN0cnVjdCBx bng0X3hibGsgewogICAgICAgIF9fdTMyIHhibGtfbmV4dF94YmxrOwogICAgICAgIF9fdTMyIHhi bGtfcHJldl94YmxrOwogICAgICAgIF9fdTggeGJsa19udW1feHRudHM7CiAgICAgICAgX191OCB4 YmxrX3NwYXJlWzNdOwogICAgICAgIF9fczMyIHhibGtfbnVtX2Jsb2NrczsKICAgICAgICBxbng0 X3h0bnRfdCB4YmxrX3h0bnRzWzYwXTsKICAgICAgICBjaGFyIHhibGtfc2lnbmF0dXJlWzhdOwog ICAgICAgIHFueDRfeHRudF90IHhibGtfZmlyc3RfeHRudDsKfTsKCnN0cnVjdCBxbng0X3N1cGVy X2Jsb2NrIHsKICAgICAgICBzdHJ1Y3QgcW54NF9pbm9kZV9lbnRyeSBSb290RGlyOwogICAgICAg IHN0cnVjdCBxbng0X2lub2RlX2VudHJ5IElub2RlOwogICAgICAgIHN0cnVjdCBxbng0X2lub2Rl X2VudHJ5IEJvb3Q7CiAgICAgICAgc3RydWN0IHFueDRfaW5vZGVfZW50cnkgQWx0Qm9vdDsKfTsK IyAxMDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3FueDRfZnMuaCIKZXh0 ZXJuIHN0cnVjdCBkZW50cnkgKnFueDRfbG9va3VwKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3Qg ZGVudHJ5ICpkZW50cnkpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBxbng0X2NvdW50X2ZyZWVfYmxv Y2tzKHN0cnVjdCBzdXBlcl9ibG9jayAqc2IpOwpleHRlcm4gdW5zaWduZWQgbG9uZyBxbng0X2Js b2NrX21hcChzdHJ1Y3QgaW5vZGUgKmlub2RlLCBsb25nIGlibG9jayk7CgpleHRlcm4gc3RydWN0 IGJ1ZmZlcl9oZWFkICpxbng0X2dldGJsayhzdHJ1Y3QgaW5vZGUgKiwgaW50LCBpbnQpOwpleHRl cm4gc3RydWN0IGJ1ZmZlcl9oZWFkICpxbng0X2JyZWFkKHN0cnVjdCBpbm9kZSAqLCBpbnQsIGlu dCk7CgpleHRlcm4gaW50IHFueDRfY3JlYXRlKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVu dHJ5ICpkZW50cnksIGludCBtb2RlKTsKZXh0ZXJuIHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHFu eDRfZmlsZV9pbm9kZV9vcGVyYXRpb25zOwpleHRlcm4gc3RydWN0IGlub2RlX29wZXJhdGlvbnMg cW54NF9kaXJfaW5vZGVfb3BlcmF0aW9uczsKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMg cW54NF9maWxlX29wZXJhdGlvbnM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHFueDRf ZGlyX29wZXJhdGlvbnM7CmV4dGVybiBpbnQgcW54NF9pc19mcmVlKHN0cnVjdCBzdXBlcl9ibG9j ayAqc2IsIGxvbmcgYmxvY2spOwpleHRlcm4gaW50IHFueDRfc2V0X2JpdG1hcChzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKnNiLCBsb25nIGJsb2NrLCBpbnQgYnVzeSk7CmV4dGVybiBpbnQgcW54NF9jcmVh dGUoc3RydWN0IGlub2RlICppbm9kZSwgc3RydWN0IGRlbnRyeSAqZGVudHJ5LCBpbnQgbW9kZSk7 CmV4dGVybiB2b2lkIHFueDRfdHJ1bmNhdGUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4dGVybiB2 b2lkIHFueDRfZnJlZV9pbm9kZShzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIGludCBxbng0 X3VubGluayhzdHJ1Y3QgaW5vZGUgKmRpciwgc3RydWN0IGRlbnRyeSAqZGVudHJ5KTsKZXh0ZXJu IGludCBxbng0X3JtZGlyKHN0cnVjdCBpbm9kZSAqZGlyLCBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkp OwpleHRlcm4gaW50IHFueDRfc3luY19maWxlKHN0cnVjdCBmaWxlICpmaWxlLCBzdHJ1Y3QgZGVu dHJ5ICpkZW50cnksIGludCk7CmV4dGVybiBpbnQgcW54NF9zeW5jX2lub2RlKHN0cnVjdCBpbm9k ZSAqaW5vZGUpOwpleHRlcm4gaW50IHFueDRfZ2V0X2Jsb2NrKHN0cnVjdCBpbm9kZSAqaW5vZGUs IGxvbmcgaWJsb2NrLCBzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJoLCBpbnQgY3JlYXRlKTsKIyAxNSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcW54NF9mc19zYi5oIiAyCgoKCgoK c3RydWN0IHFueDRfc2JfaW5mbyB7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICpzYl9idWY7 CiAgICAgICAgc3RydWN0IHFueDRfc3VwZXJfYmxvY2sgKnNiOwogICAgICAgIHVuc2lnbmVkIGlu dCBWZXJzaW9uOwogICAgICAgIHN0cnVjdCBxbng0X2lub2RlX2VudHJ5ICpCaXRNYXA7Cn07CiMg NjcyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIgMQoKCgoK CgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90cXVldWUuaCIgMQoj IDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90cXVldWUuaCIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAxCiMgMTcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbGlzdC5oIiAxCiMgMTggIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvYXNtL2JpdG9wcy5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3N5c3RlbS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3RxdWV1ZS5oIiAyCiMgMzggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3RxdWV1ZS5oIgpzdHJ1Y3QgdHFfc3RydWN0IHsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFk IGxpc3Q7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzeW5jOwogICAgICAgIHZvaWQgKCpyb3V0aW5l KSh2b2lkICopOwogICAgICAgIHZvaWQgKmRhdGE7Cn07CiMgNjQgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5oIgp0eXBlZGVmIHN0cnVjdCBsaXN0X2hlYWQgdGFz a19xdWV1ZTsKCgoKCmV4dGVybiB0YXNrX3F1ZXVlIHRxX3RpbWVyLCB0cV9pbW1lZGlhdGUsIHRx X2Rpc2s7CiMgOTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RxdWV1ZS5o IgpleHRlcm4gc3BpbmxvY2tfdCB0cXVldWVfbG9jazsKCgoKCgpzdGF0aWMgaW5saW5lIGludCBx dWV1ZV90YXNrKHN0cnVjdCB0cV9zdHJ1Y3QgKmJoX3BvaW50ZXIsIHRhc2tfcXVldWUgKmJoX2xp c3QpCnsKICAgICAgICBpbnQgcmV0ID0gMDsKICAgICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQo MCwmYmhfcG9pbnRlci0+c3luYykpIHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3M7CiAgICAgICAgICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBw b3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmdHF1ZXVlX2xv Y2spOyB9IHdoaWxlICgwKTsKICAgICAgICAgICAgICAgIGxpc3RfYWRkX3RhaWwoJmJoX3BvaW50 ZXItPmxpc3QsIGJoX2xpc3QpOwogICAgICAgICAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7 IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJnIiAoZmxhZ3MpOiJt ZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICByZXQgPSAxOwogICAg ICAgIH0KICAgICAgICByZXR1cm4gcmV0Owp9CgoKCgoKZXh0ZXJuIHZvaWQgX19ydW5fdGFza19x dWV1ZSh0YXNrX3F1ZXVlICpsaXN0KTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBydW5fdGFza19xdWV1 ZSh0YXNrX3F1ZXVlICpsaXN0KQp7CiAgICAgICAgaWYgKCghbGlzdF9lbXB0eSgmKmxpc3QpKSkK ICAgICAgICAgICAgICAgIF9fcnVuX3Rhc2tfcXVldWUobGlzdCk7Cn0KIyA5ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIiAyCiMgMjYgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3JlaXNlcmZzX2ZzX3NiLmgiCnN0cnVjdCBy ZWlzZXJmc19zdXBlcl9ibG9jawp7CiAgX191MzIgc19ibG9ja19jb3VudDsKICBfX3UzMiBzX2Zy ZWVfYmxvY2tzOwogIF9fdTMyIHNfcm9vdF9ibG9jazsKICBfX3UzMiBzX2pvdXJuYWxfYmxvY2s7 CiAgX191MzIgc19qb3VybmFsX2RldjsKIyA0MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvcmVpc2VyZnNfZnNfc2IuaCIKICBfX3UzMiBzX29yaWdfam91cm5hbF9zaXplOwog IF9fdTMyIHNfam91cm5hbF90cmFuc19tYXggOwogIF9fdTMyIHNfam91cm5hbF9ibG9ja19jb3Vu dCA7CiAgX191MzIgc19qb3VybmFsX21heF9iYXRjaCA7CiAgX191MzIgc19qb3VybmFsX21heF9j b21taXRfYWdlIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X3RyYW5zX2FnZSA7CiAgX191MTYgc19i bG9ja3NpemU7CiAgX191MTYgc19vaWRfbWF4c2l6ZTsKICBfX3UxNiBzX29pZF9jdXJzaXplOwog IF9fdTE2IHNfc3RhdGU7CiAgY2hhciBzX21hZ2ljWzEyXTsKICBfX3UzMiBzX2hhc2hfZnVuY3Rp b25fY29kZTsKICBfX3UxNiBzX3RyZWVfaGVpZ2h0OwogIF9fdTE2IHNfYm1hcF9ucjsKICBfX3Ux NiBzX3ZlcnNpb247CgoKCgogIF9fdTE2IHNfcmVzZXJ2ZWQ7CiAgX191MzIgc19pbm9kZV9nZW5l cmF0aW9uOwogIGNoYXIgc191bnVzZWRbMTI0XSA7Cn0gX19hdHRyaWJ1dGVfXyAoKF9fcGFja2Vk X18pKTsKCgoKCnN0cnVjdCByZWlzZXJmc19zdXBlcl9ibG9ja192MQp7CiAgX191MzIgc19ibG9j a19jb3VudDsKICBfX3UzMiBzX2ZyZWVfYmxvY2tzOwogIF9fdTMyIHNfcm9vdF9ibG9jazsKICBf X3UzMiBzX2pvdXJuYWxfYmxvY2s7CiAgX191MzIgc19qb3VybmFsX2RldjsKICBfX3UzMiBzX29y aWdfam91cm5hbF9zaXplOwogIF9fdTMyIHNfam91cm5hbF90cmFuc19tYXggOwogIF9fdTMyIHNf am91cm5hbF9ibG9ja19jb3VudCA7CiAgX191MzIgc19qb3VybmFsX21heF9iYXRjaCA7CiAgX191 MzIgc19qb3VybmFsX21heF9jb21taXRfYWdlIDsKICBfX3UzMiBzX2pvdXJuYWxfbWF4X3RyYW5z X2FnZSA7CiAgX191MTYgc19ibG9ja3NpemU7CiAgX191MTYgc19vaWRfbWF4c2l6ZTsKICBfX3Ux NiBzX29pZF9jdXJzaXplOwogIF9fdTE2IHNfc3RhdGU7CiAgY2hhciBzX21hZ2ljWzE2XTsKICBf X3UxNiBzX3RyZWVfaGVpZ2h0OwogIF9fdTE2IHNfYm1hcF9ucjsKICBfX3UzMiBzX3Jlc2VydmVk Owp9IF9fYXR0cmlidXRlX18gKChfX3BhY2tlZF9fKSk7CiMgMTQ5ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19mc19zYi5oIgpzdHJ1Y3QgcmVpc2VyZnNfam91 cm5hbF9jbm9kZSB7CiAgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCA7CiAga2Rldl90IGRldiA7CiAg dW5zaWduZWQgbG9uZyBibG9ja25yIDsKICBpbnQgc3RhdGUgOwogIHN0cnVjdCByZWlzZXJmc19q b3VybmFsX2xpc3QgKmpsaXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqbmV4 dCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKnByZXYgOwogIHN0cnVjdCByZWlz ZXJmc19qb3VybmFsX2Nub2RlICpocHJldiA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25v ZGUgKmhuZXh0IDsKfTsKCnN0cnVjdCByZWlzZXJmc19iaXRtYXBfbm9kZSB7CiAgaW50IGlkIDsK ICBjaGFyICpkYXRhIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGxpc3QgOwp9IDsKCnN0cnVjdCByZWlz ZXJmc19saXN0X2JpdG1hcCB7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfbGlzdCAqam91cm5h bF9saXN0IDsKICBzdHJ1Y3QgcmVpc2VyZnNfYml0bWFwX25vZGUgKipiaXRtYXBzIDsKfSA7CgoK CgpzdHJ1Y3QgcmVpc2VyZnNfdHJhbnNhY3Rpb25faGFuZGxlIHsKCiAgY2hhciAqdF9jYWxsZXIg OwogIGludCB0X2Jsb2Nrc19sb2dnZWQgOwogIGludCB0X2Jsb2Nrc19hbGxvY2F0ZWQgOwogIHVu c2lnbmVkIGxvbmcgdF90cmFuc19pZCA7CiAgc3RydWN0IHN1cGVyX2Jsb2NrICp0X3N1cGVyIDsK Cgp9IDsKCgoKCgoKCnN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3QgewogIHVuc2lnbmVkIGxv bmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CiAgYXRvbWljX3Qgal9ub256ZXJv bGVuIDsKICBhdG9taWNfdCBqX2NvbW1pdF9sZWZ0IDsKICBhdG9taWNfdCBqX2ZsdXNoaW5nIDsK ICBhdG9taWNfdCBqX2NvbW1pdF9mbHVzaGluZyA7CiAgYXRvbWljX3Qgal9vbGRlcl9jb21taXRz X2RvbmUgOwogIHVuc2lnbmVkIGxvbmcgal90cmFuc19pZCA7CiAgdGltZV90IGpfdGltZXN0YW1w IDsKICBzdHJ1Y3QgcmVpc2VyZnNfbGlzdF9iaXRtYXAgKmpfbGlzdF9iaXRtYXAgOwogIHN0cnVj dCBidWZmZXJfaGVhZCAqal9jb21taXRfYmggOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2Nu b2RlICpqX3JlYWxibG9jayA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfZnJl ZWRsaXN0IDsKICB3YWl0X3F1ZXVlX2hlYWRfdCBqX2NvbW1pdF93YWl0IDsKICB3YWl0X3F1ZXVl X2hlYWRfdCBqX2ZsdXNoX3dhaXQgOwp9IDsKCnN0cnVjdCByZWlzZXJmc19wYWdlX2xpc3QgOwoK c3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgewogIHN0cnVjdCBidWZmZXJfaGVhZCAqKiBqX2FwX2Js b2NrcyA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfbGFzdCA7CiAgc3RydWN0 IHJlaXNlcmZzX2pvdXJuYWxfY25vZGUgKmpfZmlyc3QgOwoKICBpbnQgal9zdGF0ZSA7CiAgdW5z aWduZWQgbG9uZyBqX3RyYW5zX2lkIDsKICB1bnNpZ25lZCBsb25nIGpfbW91bnRfaWQgOwogIHVu c2lnbmVkIGxvbmcgal9zdGFydCA7CiAgdW5zaWduZWQgbG9uZyBqX2xlbiA7CiAgdW5zaWduZWQg bG9uZyBqX2xlbl9hbGxvYyA7CiAgYXRvbWljX3Qgal93Y291bnQgOwogIHVuc2lnbmVkIGxvbmcg al9iY291bnQgOwogIHVuc2lnbmVkIGxvbmcgal9maXJzdF91bmZsdXNoZWRfb2Zmc2V0IDsKICB1 bnNpZ25lZCBsb25nIGpfbGFzdF9mbHVzaF90cmFuc19pZCA7CiAgc3RydWN0IGJ1ZmZlcl9oZWFk ICpqX2hlYWRlcl9iaCA7CgoKCgogIHN0cnVjdCByZWlzZXJmc19wYWdlX2xpc3QgKmpfZmx1c2hf cGFnZXMgOwogIHRpbWVfdCBqX3RyYW5zX3N0YXJ0X3RpbWUgOwogIHdhaXRfcXVldWVfaGVhZF90 IGpfd2FpdCA7CiAgYXRvbWljX3Qgal93bG9jayA7CiAgd2FpdF9xdWV1ZV9oZWFkX3Qgal9qb2lu X3dhaXQgOwogIGF0b21pY190IGpfamxvY2sgOwogIGludCBqX2pvdXJuYWxfbGlzdF9pbmRleCA7 CiAgaW50IGpfbGlzdF9iaXRtYXBfaW5kZXggOwogIGludCBqX211c3Rfd2FpdCA7CiAgaW50IGpf bmV4dF9mdWxsX2ZsdXNoIDsKICBpbnQgal9uZXh0X2FzeW5jX2ZsdXNoIDsKCiAgaW50IGpfY25v ZGVfdXNlZCA7CiAgaW50IGpfY25vZGVfZnJlZSA7CgogIHN0cnVjdCByZWlzZXJmc19qb3VybmFs X2Nub2RlICpqX2Nub2RlX2ZyZWVfbGlzdCA7CiAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWxfY25v ZGUgKmpfY25vZGVfZnJlZV9vcmlnIDsKCiAgaW50IGpfZnJlZV9iaXRtYXBfbm9kZXMgOwogIGlu dCBqX3VzZWRfYml0bWFwX25vZGVzIDsKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfYml0bWFwX25vZGVz IDsKICBzdHJ1Y3QgaW5vZGUgal9kdW1teV9pbm9kZSA7CiAgc3RydWN0IHJlaXNlcmZzX2xpc3Rf Yml0bWFwIGpfbGlzdF9iaXRtYXBbNV0gOwogIHN0cnVjdCByZWlzZXJmc19qb3VybmFsX2xpc3Qg al9qb3VybmFsX2xpc3RbNjRdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9o YXNoX3RhYmxlWzgxOTJdIDsKICBzdHJ1Y3QgcmVpc2VyZnNfam91cm5hbF9jbm9kZSAqal9saXN0 X2hhc2hfdGFibGVbODE5Ml0gOwoKICBzdHJ1Y3QgbGlzdF9oZWFkIGpfcHJlYWxsb2NfbGlzdDsK fTsKCgoKCnR5cGVkZWYgX191MzIgKCpoYXNoZl90KSAoY29uc3QgY2hhciAqLCBpbnQpOwoKCnN0 cnVjdCByZWlzZXJmc19zYl9pbmZvCnsKICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqIHNfc2JoOwoK CiAgICBzdHJ1Y3QgcmVpc2VyZnNfc3VwZXJfYmxvY2sgKiBzX3JzOwogICAgc3RydWN0IGJ1ZmZl cl9oZWFkICoqIHNfYXBfYml0bWFwOwogICAgc3RydWN0IHJlaXNlcmZzX2pvdXJuYWwgKnNfam91 cm5hbCA7CiAgICB1bnNpZ25lZCBzaG9ydCBzX21vdW50X3N0YXRlOwoKCiAgICB2b2lkICgqZW5k X2lvX2hhbmRsZXIpKHN0cnVjdCBidWZmZXJfaGVhZCAqLCBpbnQpOwogICAgaGFzaGZfdCBzX2hh c2hfZnVuY3Rpb247CgoKICAgIHVuc2lnbmVkIGxvbmcgc19tb3VudF9vcHQ7CgoKCgogICAgd2Fp dF9xdWV1ZV9oZWFkX3Qgc193YWl0OwoKICAgIGF0b21pY190IHNfZ2VuZXJhdGlvbl9jb3VudGVy OwoKCgogICAgaW50IHNfa21hbGxvY3M7CiAgICBpbnQgc19kaXNrX3JlYWRzOwogICAgaW50IHNf ZGlza193cml0ZXM7CiAgICBpbnQgc19maXhfbm9kZXM7CiAgICBpbnQgc19kb19iYWxhbmNlOwog ICAgaW50IHNfdW5uZWVkZWRfbGVmdF9uZWlnaGJvcjsKICAgIGludCBzX2dvb2Rfc2VhcmNoX2J5 X2tleV9yZWFkYTsKICAgIGludCBzX2JtYXBzOwogICAgaW50IHNfYm1hcHNfd2l0aG91dF9zZWFy Y2g7CiAgICBpbnQgc19kaXJlY3QyaW5kaXJlY3Q7CiAgICBpbnQgc19pbmRpcmVjdDJkaXJlY3Q7 Cn07CiMgMzYwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9yZWlzZXJmc19m c19zYi5oIgp2b2lkIHJlaXNlcmZzX2ZpbGVfYnVmZmVyIChzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBi aCwgaW50IGxpc3QpOwppbnQgcmVpc2VyZnNfaXNfc3VwZXIoc3RydWN0IHN1cGVyX2Jsb2NrICpz KSA7CmludCBqb3VybmFsX21hcmtfZGlydHkoc3RydWN0IHJlaXNlcmZzX3RyYW5zYWN0aW9uX2hh bmRsZSAqLCBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgOwpp bnQgZmx1c2hfb2xkX2NvbW1pdHMoc3RydWN0IHN1cGVyX2Jsb2NrICpzLCBpbnQpIDsKaW50IHNo b3dfcmVpc2VyZnNfbG9ja3Modm9pZCkgOwppbnQgcmVpc2VyZnNfcmVzaXplKHN0cnVjdCBzdXBl cl9ibG9jayAqLCB1bnNpZ25lZCBsb25nKSA7CiMgNjczICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvYmZzX2ZzX3NiLmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvYmZzX2ZzX3NiLmgiCnN0cnVjdCBiZnNfc2JfaW5mbyB7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzaV9ibG9ja3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyBzaV9mcmVlYjsKICAgICAgICB1 bnNpZ25lZCBsb25nIHNpX2ZyZWVpOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGZfaW9mZjsK ICAgICAgICB1bnNpZ25lZCBsb25nIHNpX2xmX3NibGs7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz aV9sZl9lYmxrOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lfbGFzdGk7CiAgICAgICAgY2hhciAq IHNpX2ltYXA7CiAgICAgICAgc3RydWN0IGJ1ZmZlcl9oZWFkICogc2lfc2JoOwogICAgICAgIHN0 cnVjdCBiZnNfc3VwZXJfYmxvY2sgKiBzaV9iZnNfc2I7Cn07CiMgNjc0ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiIDEKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvdWRmX2ZzX3NiLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvdmVyc2lvbi5oIiAxCiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3VkZl9mc19zYi5oIiAyCgoKI3ByYWdtYSBwYWNrKDEpCiMgMzQgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3VkZl9mc19zYi5oIgpzdHJ1Y3QgdWRmX3NwYXJp bmdfZGF0YQp7CiAgICAgICAgX191MTYgc19wYWNrZXRfbGVuOwogICAgICAgIHN0cnVjdCBidWZm ZXJfaGVhZCAqc19zcGFyX21hcFs0XTsKfTsKCnN0cnVjdCB1ZGZfdmlydHVhbF9kYXRhCnsKICAg ICAgICBfX3UzMiBzX251bV9lbnRyaWVzOwogICAgICAgIF9fdTE2IHNfc3RhcnRfb2Zmc2V0Owp9 OwoKc3RydWN0IHVkZl9iaXRtYXAKewogICAgICAgIF9fdTMyIHNfZXh0TGVuZ3RoOwogICAgICAg IF9fdTMyIHNfZXh0UG9zaXRpb247CiAgICAgICAgX191MTYgc19ucl9ncm91cHM7CiAgICAgICAg c3RydWN0IGJ1ZmZlcl9oZWFkICoqc19ibG9ja19iaXRtYXA7Cn07CgpzdHJ1Y3QgdWRmX3BhcnRf bWFwCnsKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCB1ZGZf Yml0bWFwICpzX2JpdG1hcDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqc190YWJsZTsK ICAgICAgICB9IHNfdXNwYWNlOwogICAgICAgIHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAg ICAgc3RydWN0IHVkZl9iaXRtYXAgKnNfYml0bWFwOwogICAgICAgICAgICAgICAgc3RydWN0IGlu b2RlICpzX3RhYmxlOwogICAgICAgIH0gc19mc3BhY2U7CiAgICAgICAgX191MzIgc19wYXJ0aXRp b25fcm9vdDsKICAgICAgICBfX3UzMiBzX3BhcnRpdGlvbl9sZW47CiAgICAgICAgX191MTYgc19w YXJ0aXRpb25fdHlwZTsKICAgICAgICBfX3UxNiBzX3BhcnRpdGlvbl9udW07CiAgICAgICAgdW5p b24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX3NwYXJpbmdfZGF0YSBzX3Nw YXJpbmc7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdWRmX3ZpcnR1YWxfZGF0YSBzX3ZpcnR1YWw7 CiAgICAgICAgfSBzX3R5cGVfc3BlY2lmaWM7CiAgICAgICAgX191MzIgKCpzX3BhcnRpdGlvbl9m dW5jKShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgX191MzIsIF9fdTE2LCBfX3UzMik7CiAgICAgICAg X191MTYgc192b2x1bWVzZXFudW07CiAgICAgICAgX191MTYgc19wYXJ0aXRpb25fZmxhZ3M7Cn07 CgojcHJhZ21hIHBhY2soKQoKc3RydWN0IHVkZl9zYl9pbmZvCnsKICAgICAgICBzdHJ1Y3QgdWRm X3BhcnRfbWFwICpzX3BhcnRtYXBzOwogICAgICAgIF9fdTggc192b2xpZGVudFszMl07CgoKICAg ICAgICBfX3UxNiBzX3BhcnRpdGlvbnM7CiAgICAgICAgX191MTYgc19wYXJ0aXRpb247CgoKICAg ICAgICBfX3UzMiBzX3Nlc3Npb247CiAgICAgICAgX191MzIgc19hbmNob3JbNF07CiAgICAgICAg X191MzIgc19sYXN0YmxvY2s7CgogICAgICAgIHN0cnVjdCBidWZmZXJfaGVhZCAqc19sdmlkYmg7 CgoKICAgICAgICBtb2RlX3Qgc191bWFzazsKICAgICAgICBnaWRfdCBzX2dpZDsKICAgICAgICB1 aWRfdCBzX3VpZDsKCgogICAgICAgIHRpbWVfdCBzX3JlY29yZHRpbWU7CgoKICAgICAgICBfX3Ux NiBzX3NlcmlhbG51bTsKCgogICAgICAgIF9fdTE2IHNfdWRmcmV2OwoKCiAgICAgICAgX191MzIg c19mbGFnczsKCgogICAgICAgIHN0cnVjdCBubHNfdGFibGUgKnNfbmxzX21hcDsKCgogICAgICAg IHN0cnVjdCBpbm9kZSAqc192YXQ7Cn07CiMgNjc1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9mcy5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbmNwX2ZzX3NiLmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbmNwX2ZzX3NiLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv dHlwZXMuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uY3Bf ZnNfc2IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcF9t b3VudC5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcF9t b3VudC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgi IDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmNwX21vdW50Lmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uY3AuaCIgMQojIDEz ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uY3AuaCIKIyAxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgMTQgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcC5oIiAyCiMgMjIgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbmNwX3JlcXVlc3RfaGVhZGVyIHsKICAg ICAgICBfX3UxNiB0eXBlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggc2Vx dWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBjb25uX2xvdyBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4IHRhc2sgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191OCBjb25uX2hpZ2ggX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAg ICAgICAgX191OCBmdW5jdGlvbiBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3U4 IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoKCgpzdHJ1Y3QgbmNwX3JlcGx5 X2hlYWRlciB7CiAgICAgICAgX191MTYgdHlwZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3U4IHNlcXVlbmNlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTgg Y29ubl9sb3cgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCB0YXNrIF9fYXR0 cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTggY29ubl9oaWdoIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTggY29tcGxldGlvbl9jb2RlIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTggY29ubmVjdGlvbl9zdGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNr ZWQpKTsKICAgICAgICBfX3U4IGRhdGFbMF0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07CgoK CnN0cnVjdCBuY3Bfdm9sdW1lX2luZm8gewogICAgICAgIF9fdTMyIHRvdGFsX2Jsb2NrczsKICAg ICAgICBfX3UzMiBmcmVlX2Jsb2NrczsKICAgICAgICBfX3UzMiBwdXJnZWFibGVfYmxvY2tzOwog ICAgICAgIF9fdTMyIG5vdF95ZXRfcHVyZ2VhYmxlX2Jsb2NrczsKICAgICAgICBfX3UzMiB0b3Rh bF9kaXJfZW50cmllczsKICAgICAgICBfX3UzMiBhdmFpbGFibGVfZGlyX2VudHJpZXM7CiAgICAg ICAgX191OCBzZWN0b3JzX3Blcl9ibG9jazsKICAgICAgICBjaGFyIHZvbHVtZV9uYW1lWygxNikg KyAxXTsKfTsKIyAxMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcC5o IgpzdHJ1Y3QgbndfaW5mb19zdHJ1Y3QgewogICAgICAgIF9fdTMyIHNwYWNlQWxsb2MgX19hdHRy aWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgYXR0cmlidXRlcyBfX2F0dHJpYnV0ZV9f KChwYWNrZWQpKTsKICAgICAgICBfX3UxNiBmbGFncyBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsK ICAgICAgICBfX3UzMiBkYXRhU3RyZWFtU2l6ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAg ICAgICBfX3UzMiB0b3RhbFN0cmVhbVNpemUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAg ICAgX191MTYgbnVtYmVyT2ZTdHJlYW1zIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAg IF9fdTE2IGNyZWF0aW9uVGltZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3Ux NiBjcmVhdGlvbkRhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgY3Jl YXRvcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeVRpbWUg X19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbW9kaWZ5RGF0ZSBfX2F0dHJp YnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRlX18o KHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGxhc3RBY2Nlc3NEYXRlIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAg ICAgIF9fdTMyIGFyY2hpdmVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191 MTYgaW5oZXJpdGVkUmlnaHRzTWFzayBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3UzMiBkaXJFbnROdW0gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIgRG9z RGlyTnVtIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIHZvbE51bWJlciBf X2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBFQURhdGFTaXplIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIEVBS2V5Q291bnQgX19hdHRyaWJ1dGVfXygo cGFja2VkKSk7CiAgICAgICAgX191MzIgRUFLZXlTaXplIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTMyIE5TQ3JlYXRvciBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAg ICBfX3U4IG5hbWVMZW4gX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191OCBlbnRy eU5hbWVbMjU2XSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKIyAxNTYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcC5oIgpzdHJ1Y3QgbndfbW9kaWZ5X2Rvc19pbmZv IHsKICAgICAgICBfX3UzMiBhdHRyaWJ1dGVzIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAg ICAgIF9fdTE2IGNyZWF0aW9uRGF0ZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBf X3UxNiBjcmVhdGlvblRpbWUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MzIg Y3JlYXRvcklEIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IG1vZGlmeURh dGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAgX191MTYgbW9kaWZ5VGltZSBfX2F0 dHJpYnV0ZV9fKChwYWNrZWQpKTsKICAgICAgICBfX3UzMiBtb2RpZmllcklEIF9fYXR0cmlidXRl X18oKHBhY2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVEYXRlIF9fYXR0cmlidXRlX18oKHBh Y2tlZCkpOwogICAgICAgIF9fdTE2IGFyY2hpdmVUaW1lIF9fYXR0cmlidXRlX18oKHBhY2tlZCkp OwogICAgICAgIF9fdTMyIGFyY2hpdmVySUQgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAg ICAgX191MTYgbGFzdEFjY2Vzc0RhdGUgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAgICAg X191MTYgaW5oZXJpdGFuY2VHcmFudE1hc2sgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7CiAgICAg ICAgX191MTYgaW5oZXJpdGFuY2VSZXZva2VNYXNrIF9fYXR0cmlidXRlX18oKHBhY2tlZCkpOwog ICAgICAgIF9fdTMyIG1heGltdW1TcGFjZSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKfTsKCnN0 cnVjdCBud19zZWFyY2hfc2VxdWVuY2UgewogICAgICAgIF9fdTggdm9sTnVtYmVyIF9fYXR0cmli dXRlX18oKHBhY2tlZCkpOwogICAgICAgIF9fdTMyIGRpckJhc2UgX19hdHRyaWJ1dGVfXygocGFj a2VkKSk7CiAgICAgICAgX191MzIgc2VxdWVuY2UgX19hdHRyaWJ1dGVfXygocGFja2VkKSk7Cn07 CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIiAy CiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25jcF9tb3VudC5oIgpz dHJ1Y3QgbmNwX21vdW50X2RhdGEgewogICAgICAgIGludCB2ZXJzaW9uOwogICAgICAgIHVuc2ln bmVkIGludCBuY3BfZmQ7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgbW91bnRlZF91aWQ7CiAgICAg ICAgX19rZXJuZWxfcGlkX3Qgd2RvZ19waWQ7CgogICAgICAgIHVuc2lnbmVkIGNoYXIgbW91bnRl ZF92b2xbKDE2KSArIDFdOwogICAgICAgIHVuc2lnbmVkIGludCB0aW1lX291dDsKCiAgICAgICAg dW5zaWduZWQgaW50IHJldHJ5X2NvdW50OwogICAgICAgIHVuc2lnbmVkIGludCBmbGFnczsKCiAg ICAgICAgX19rZXJuZWxfdWlkX3QgdWlkOwogICAgICAgIF9fa2VybmVsX2dpZF90IGdpZDsKICAg ICAgICBfX2tlcm5lbF9tb2RlX3QgZmlsZV9tb2RlOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBk aXJfbW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRhX3Y0IHsKICAgICAgICBpbnQgdmVy c2lvbjsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKCiAgICAgICAgdW5zaWduZWQgbG9u ZyBtb3VudGVkX3VpZDsKCiAgICAgICAgbG9uZyB3ZG9nX3BpZDsKCiAgICAgICAgdW5zaWduZWQg aW50IG5jcF9mZDsKICAgICAgICB1bnNpZ25lZCBpbnQgdGltZV9vdXQ7CgogICAgICAgIHVuc2ln bmVkIGludCByZXRyeV9jb3VudDsKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHVpZDsKICAgICAg ICB1bnNpZ25lZCBsb25nIGdpZDsKCiAgICAgICAgdW5zaWduZWQgbG9uZyBmaWxlX21vZGU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBkaXJfbW9kZTsKfTsKCgoKc3RydWN0IG5jcF9tb3VudF9kYXRh X2tlcm5lbCB7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBp bnQgaW50X2ZsYWdzOwoKICAgICAgICBfX2tlcm5lbF91aWQzMl90IG1vdW50ZWRfdWlkOwogICAg ICAgIF9fa2VybmVsX3BpZF90IHdkb2dfcGlkOwogICAgICAgIHVuc2lnbmVkIGludCBuY3BfZmQ7 CiAgICAgICAgdW5zaWduZWQgaW50IHRpbWVfb3V0OwoKICAgICAgICB1bnNpZ25lZCBpbnQgcmV0 cnlfY291bnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBtb3VudGVkX3ZvbFsoMTYpICsgMV07CiAg ICAgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CiAgICAgICAgX19rZXJuZWxfZ2lkMzJfdCBnaWQ7 CiAgICAgICAgX19rZXJuZWxfbW9kZV90IGZpbGVfbW9kZTsKICAgICAgICBfX2tlcm5lbF9tb2Rl X3QgZGlyX21vZGU7Cn07CiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L25jcF9mc19zYi5oIiAyCgoKCgoKc3RydWN0IG5jcF9zZXJ2ZXIgewoKICAgICAgICBzdHJ1Y3Qg bmNwX21vdW50X2RhdGFfa2VybmVsIG07CgoKCiAgICAgICAgX191OCBuYW1lX3NwYWNlWyg2NCkg KyAyXTsKCiAgICAgICAgc3RydWN0IGZpbGUgKm5jcF9maWxwOwoKICAgICAgICB1OCBzZXF1ZW5j ZTsKICAgICAgICB1OCB0YXNrOwogICAgICAgIHUxNiBjb25uZWN0aW9uOwoKICAgICAgICB1OCBj b21wbGV0aW9uOwogICAgICAgIHU4IGNvbm5fc3RhdHVzOwoKCgogICAgICAgIGludCBidWZmZXJf c2l6ZTsKCiAgICAgICAgaW50IHJlcGx5X3NpemU7CgogICAgICAgIGludCBwYWNrZXRfc2l6ZTsK ICAgICAgICB1bnNpZ25lZCBjaGFyICpwYWNrZXQ7CgoKICAgICAgICBpbnQgbG9jazsKICAgICAg ICBzdHJ1Y3Qgc2VtYXBob3JlIHNlbTsKCiAgICAgICAgaW50IGN1cnJlbnRfc2l6ZTsKICAgICAg ICBpbnQgaGFzX3N1YmZ1bmN0aW9uOwogICAgICAgIGludCBuY3BfcmVwbHlfc2l6ZTsKCiAgICAg ICAgaW50IHJvb3Rfc2V0dXBlZDsKCgogICAgICAgIGludCBzaWduX3dhbnRlZDsKICAgICAgICBp bnQgc2lnbl9hY3RpdmU7CiAgICAgICAgY2hhciBzaWduX3Jvb3RbOF07CiAgICAgICAgY2hhciBz aWduX2xhc3RbMTZdOwoKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIGludCBhdXRo X3R5cGU7CiAgICAgICAgICAgICAgICBzaXplX3Qgb2JqZWN0X25hbWVfbGVuOwogICAgICAgICAg ICAgICAgdm9pZCogb2JqZWN0X25hbWU7CiAgICAgICAgICAgICAgICBpbnQgb2JqZWN0X3R5cGU7 CiAgICAgICAgfSBhdXRoOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgc2l6ZV90 IGxlbjsKICAgICAgICAgICAgICAgIHZvaWQqIGRhdGE7CiAgICAgICAgfSBwcml2OwoKCiAgICAg ICAgc3RydWN0IG5sc190YWJsZSAqbmxzX3ZvbDsKICAgICAgICBzdHJ1Y3QgbmxzX3RhYmxlICpu bHNfaW87CgoKICAgICAgICBpbnQgZGVudHJ5X3R0bDsKCgogICAgICAgIHVuc2lnbmVkIGludCBm bGFnczsKfTsKIyA5MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmNwX2Zz X3NiLmgiCnN0YXRpYyBpbmxpbmUgaW50IG5jcF9jb25uX3ZhbGlkKHN0cnVjdCBuY3Bfc2VydmVy ICpzZXJ2ZXIpCnsKICAgICAgICByZXR1cm4gKChzZXJ2ZXItPmNvbm5fc3RhdHVzICYgMHgxMSkg PT0gMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuY3BfaW52YWxpZGF0ZV9jb25uKHN0cnVjdCBu Y3Bfc2VydmVyICpzZXJ2ZXIpCnsKICAgICAgICBzZXJ2ZXItPmNvbm5fc3RhdHVzIHw9IDB4MDE7 Cn0KIyA2NzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC91c2JkZXZfZnNfc2IuaCIgMQpz dHJ1Y3QgdXNiZGV2X3NiX2luZm8gewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgc2xpc3Q7CiAg ICAgICAgc3RydWN0IGxpc3RfaGVhZCBpbGlzdDsKICAgICAgICB1aWRfdCBkZXZ1aWQ7CiAgICAg ICAgZ2lkX3QgZGV2Z2lkOwogICAgICAgIHVtb2RlX3QgZGV2bW9kZTsKICAgICAgICB1aWRfdCBi dXN1aWQ7CiAgICAgICAgZ2lkX3QgYnVzZ2lkOwogICAgICAgIHVtb2RlX3QgYnVzbW9kZTsKICAg ICAgICB1aWRfdCBsaXN0dWlkOwogICAgICAgIGdpZF90IGxpc3RnaWQ7CiAgICAgICAgdW1vZGVf dCBsaXN0bW9kZTsKfTsKIyA2NzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2ZzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jcmFtZnNf ZnNfc2IuaCIgMQojIDY3OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3Ni LmgiIDEKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVz LmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9qZmZzMl9mc19z Yi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3BpbmxvY2su aCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2pmZnMyX2ZzX3Ni LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb21wbGV0aW9u LmgiIDEKIyAxMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29tcGxldGlv bi5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3dhaXQuaCIgMQoj IDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDIK CnN0cnVjdCBjb21wbGV0aW9uIHsKICAgICAgICB1bnNpZ25lZCBpbnQgZG9uZTsKICAgICAgICB3 YWl0X3F1ZXVlX2hlYWRfdCB3YWl0Owp9OwoKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGluaXRf Y29tcGxldGlvbihzdHJ1Y3QgY29tcGxldGlvbiAqeCkKewogICAgICAgIHgtPmRvbmUgPSAwOwog ICAgICAgIGluaXRfd2FpdHF1ZXVlX2hlYWQoJngtPndhaXQpOwp9CgpleHRlcm4gdm9pZCB3YWl0 X2Zvcl9jb21wbGV0aW9uKHN0cnVjdCBjb21wbGV0aW9uICopIF9fYXR0cmlidXRlX18oKHJlZ3Bh cm0oMykpKTsKZXh0ZXJuIHZvaWQgY29tcGxldGUoc3RydWN0IGNvbXBsZXRpb24gKikgX19hdHRy aWJ1dGVfXygocmVncGFybSgzKSkpOwojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2pmZnMyX2ZzX3NiLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vc2VtYXBob3JlLmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvamZmczJfZnNfc2IuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2xpc3QuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9qZmZzMl9mc19zYi5oIiAyCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2pmZnMyX2ZzX3NiLmgiCnN0cnVjdCBqZmZzMl9zYl9pbmZvIHsKICAgICAgICBzdHJ1Y3Qg bXRkX2luZm8gKm10ZDsKCiAgICAgICAgX191MzIgaGlnaGVzdF9pbm87CiAgICAgICAgdW5zaWdu ZWQgaW50IGZsYWdzOwogICAgICAgIHNwaW5sb2NrX3Qgbm9kZWxpc3RfbG9jazsKCgogICAgICAg IHN0cnVjdCB0YXNrX3N0cnVjdCAqZ2NfdGFzazsKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGdj X3RocmVhZF9zdGFydDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiBnY190aHJlYWRfZXhpdDsK CgoKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIGFsbG9jX3NlbTsKCgoKCiAgICAgICAgX191MzIg Zmxhc2hfc2l6ZTsKICAgICAgICBfX3UzMiB1c2VkX3NpemU7CiAgICAgICAgX191MzIgZGlydHlf c2l6ZTsKICAgICAgICBfX3UzMiBmcmVlX3NpemU7CiAgICAgICAgX191MzIgZXJhc2luZ19zaXpl OwogICAgICAgIF9fdTMyIGJhZF9zaXplOwogICAgICAgIF9fdTMyIHNlY3Rvcl9zaXplOwoKCgog ICAgICAgIF9fdTMyIG5yX2ZyZWVfYmxvY2tzOwogICAgICAgIF9fdTMyIG5yX2VyYXNpbmdfYmxv Y2tzOwoKICAgICAgICBfX3UzMiBucl9ibG9ja3M7CiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNl YmxvY2sgKmJsb2NrczsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKm5leHRibG9j azsKCiAgICAgICAgc3RydWN0IGpmZnMyX2VyYXNlYmxvY2sgKmdjYmxvY2s7CgogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgY2xlYW5fbGlzdDsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIGRpcnR5 X2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBlcmFzaW5nX2xpc3Q7CiAgICAgICAgc3Ry dWN0IGxpc3RfaGVhZCBlcmFzZV9wZW5kaW5nX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3RfaGVh ZCBlcmFzZV9jb21wbGV0ZV9saXN0OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0 OwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgYmFkX2xpc3Q7CiAgICAgICAgc3RydWN0IGxpc3Rf aGVhZCBiYWRfdXNlZF9saXN0OwoKICAgICAgICBzcGlubG9ja190IGVyYXNlX2NvbXBsZXRpb25f bG9jazsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgZXJhc2Vfd2FpdDsKICAgICAgICBzdHJ1 Y3QgamZmczJfaW5vZGVfY2FjaGUgKmlub2NhY2hlX2xpc3RbMV07CiAgICAgICAgc3BpbmxvY2tf dCBpbm9jYWNoZV9sb2NrOwp9OwojIDY3OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvZnMuaCIgMgoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgc3VwZXJfYmxvY2tzOwpleHRl cm4gc3BpbmxvY2tfdCBzYl9sb2NrOwoKCgpzdHJ1Y3Qgc3VwZXJfYmxvY2sgewogICAgICAgIHN0 cnVjdCBsaXN0X2hlYWQgc19saXN0OwogICAgICAgIGtkZXZfdCBzX2RldjsKICAgICAgICB1bnNp Z25lZCBsb25nIHNfYmxvY2tzaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgc19ibG9ja3NpemVf Yml0czsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNfZGlydDsKICAgICAgICB1bnNpZ25lZCBsb25n IGxvbmcgc19tYXhieXRlczsKICAgICAgICBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSAqc190eXBl OwogICAgICAgIHN0cnVjdCBzdXBlcl9vcGVyYXRpb25zICpzX29wOwogICAgICAgIHN0cnVjdCBk cXVvdF9vcGVyYXRpb25zICpkcV9vcDsKICAgICAgICB1bnNpZ25lZCBsb25nIHNfZmxhZ3M7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzX21hZ2ljOwogICAgICAgIHN0cnVjdCBkZW50cnkgKnNfcm9v dDsKICAgICAgICBzdHJ1Y3Qgcndfc2VtYXBob3JlIHNfdW1vdW50OwogICAgICAgIHN0cnVjdCBz ZW1hcGhvcmUgc19sb2NrOwogICAgICAgIGludCBzX2NvdW50OwogICAgICAgIGF0b21pY190IHNf YWN0aXZlOwoKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHNfZGlydHk7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCBzX2xvY2tlZF9pbm9kZXM7CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBzX2Zp bGVzOwoKICAgICAgICBzdHJ1Y3QgYmxvY2tfZGV2aWNlICpzX2JkZXY7CiAgICAgICAgc3RydWN0 IGxpc3RfaGVhZCBzX2luc3RhbmNlczsKICAgICAgICBzdHJ1Y3QgcXVvdGFfbW91bnRfb3B0aW9u cyBzX2RxdW90OwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbWluaXhf c2JfaW5mbyBtaW5peF9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBleHQyX3NiX2luZm8gZXh0 Ml9zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBocGZzX3NiX2luZm8gaHBmc19zYjsKICAgICAg ICAgICAgICAgIHN0cnVjdCBudGZzX3NiX2luZm8gbnRmc19zYjsKICAgICAgICAgICAgICAgIHN0 cnVjdCBtc2Rvc19zYl9pbmZvIG1zZG9zX3NiOwogICAgICAgICAgICAgICAgc3RydWN0IGlzb2Zz X3NiX2luZm8gaXNvZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmZzX3NiX2luZm8gbmZz X3NiOwogICAgICAgICAgICAgICAgc3RydWN0IHN5c3Zfc2JfaW5mbyBzeXN2X3NiOwogICAgICAg ICAgICAgICAgc3RydWN0IGFmZnNfc2JfaW5mbyBhZmZzX3NiOwogICAgICAgICAgICAgICAgc3Ry dWN0IHVmc19zYl9pbmZvIHVmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBlZnNfc2JfaW5m byBlZnNfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2htZW1fc2JfaW5mbyBzaG1lbV9zYjsK ICAgICAgICAgICAgICAgIHN0cnVjdCByb21mc19zYl9pbmZvIHJvbWZzX3NiOwogICAgICAgICAg ICAgICAgc3RydWN0IHNtYl9zYl9pbmZvIHNtYmZzX3NiOwogICAgICAgICAgICAgICAgc3RydWN0 IGhmc19zYl9pbmZvIGhmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBhZGZzX3NiX2luZm8g YWRmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCBxbng0X3NiX2luZm8gcW54NF9zYjsKICAg ICAgICAgICAgICAgIHN0cnVjdCByZWlzZXJmc19zYl9pbmZvIHJlaXNlcmZzX3NiOwogICAgICAg ICAgICAgICAgc3RydWN0IGJmc19zYl9pbmZvIGJmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVj dCB1ZGZfc2JfaW5mbyB1ZGZfc2I7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgbmNwX3NlcnZlciBu Y3Bmc19zYjsKICAgICAgICAgICAgICAgIHN0cnVjdCB1c2JkZXZfc2JfaW5mbyB1c2JkZXZmc19z YjsKICAgICAgICAgICAgICAgIHN0cnVjdCBqZmZzMl9zYl9pbmZvIGpmZnMyX3NiOwogICAgICAg ICAgICAgICAgc3RydWN0IGNyYW1mc19zYl9pbmZvIGNyYW1mc19zYjsKICAgICAgICAgICAgICAg IHZvaWQgKmdlbmVyaWNfc2JwOwogICAgICAgIH0gdTsKCgoKCiAgICAgICAgc3RydWN0IHNlbWFw aG9yZSBzX3Zmc19yZW5hbWVfc2VtOwojIDc1MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvZnMuaCIKICAgICAgICBzdHJ1Y3Qgc2VtYXBob3JlIHNfbmZzZF9mcmVlX3BhdGhf c2VtOwp9OwoKCgoKZXh0ZXJuIGludCB2ZnNfY3JlYXRlKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3Qg ZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21rZGlyKHN0cnVjdCBpbm9kZSAqLCBzdHJ1 Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBpbnQgdmZzX21rbm9kKHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZGVudHJ5ICosIGludCwgZGV2X3QpOwpleHRlcm4gaW50IHZmc19zeW1saW5rKHN0cnVj dCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdmZz X2xpbmsoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsK ZXh0ZXJuIGludCB2ZnNfcm1kaXIoc3RydWN0IGlub2RlICosIHN0cnVjdCBkZW50cnkgKik7CmV4 dGVybiBpbnQgdmZzX3VubGluayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGRlbnRyeSAqKTsKZXh0 ZXJuIGludCB2ZnNfcmVuYW1lKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICosIHN0cnVj dCBpbm9kZSAqLCBzdHJ1Y3QgZGVudHJ5ICopOwojIDc4NSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBpbnQgKCpmaWxsZGlyX3QpKHZvaWQgKiwgY29u c3QgY2hhciAqLCBpbnQsIGxvZmZfdCwgaW5vX3QsIHVuc2lnbmVkKTsKCnN0cnVjdCBibG9ja19k ZXZpY2Vfb3BlcmF0aW9ucyB7CiAgICAgICAgaW50ICgqb3BlbikgKHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpyZWxlYXNlKSAoc3RydWN0IGlub2RlICosIHN0 cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVj dCBmaWxlICosIHVuc2lnbmVkLCB1bnNpZ25lZCBsb25nKTsKICAgICAgICBpbnQgKCpjaGVja19t ZWRpYV9jaGFuZ2UpIChrZGV2X3QpOwogICAgICAgIGludCAoKnJldmFsaWRhdGUpIChrZGV2X3Qp Owp9OwoKCgoKCgpzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHsKICAgICAgICBzdHJ1Y3QgbW9kdWxl ICpvd25lcjsKICAgICAgICBsb2ZmX3QgKCpsbHNlZWspIChzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3Qs IGludCk7CiAgICAgICAgc3NpemVfdCAoKnJlYWQpIChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNp emVfdCwgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSkgKHN0cnVjdCBmaWxlICos IGNvbnN0IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CiAgICAgICAgaW50ICgqcmVhZGRpcikg KHN0cnVjdCBmaWxlICosIHZvaWQgKiwgZmlsbGRpcl90KTsKICAgICAgICB1bnNpZ25lZCBpbnQg KCpwb2xsKSAoc3RydWN0IGZpbGUgKiwgc3RydWN0IHBvbGxfdGFibGVfc3RydWN0ICopOwogICAg ICAgIGludCAoKmlvY3RsKSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICosIHVuc2lnbmVk IGludCwgdW5zaWduZWQgbG9uZyk7CiAgICAgICAgaW50ICgqbW1hcCkgKHN0cnVjdCBmaWxlICos IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKICAgICAgICBpbnQgKCpvcGVuKSAoc3RydWN0IGlu b2RlICosIHN0cnVjdCBmaWxlICopOwogICAgICAgIGludCAoKmZsdXNoKSAoc3RydWN0IGZpbGUg Kik7CiAgICAgICAgaW50ICgqcmVsZWFzZSkgKHN0cnVjdCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAq KTsKICAgICAgICBpbnQgKCpmc3luYykgKHN0cnVjdCBmaWxlICosIHN0cnVjdCBkZW50cnkgKiwg aW50IGRhdGFzeW5jKTsKICAgICAgICBpbnQgKCpmYXN5bmMpIChpbnQsIHN0cnVjdCBmaWxlICos IGludCk7CiAgICAgICAgaW50ICgqbG9jaykgKHN0cnVjdCBmaWxlICosIGludCwgc3RydWN0IGZp bGVfbG9jayAqKTsKICAgICAgICBzc2l6ZV90ICgqcmVhZHYpIChzdHJ1Y3QgZmlsZSAqLCBjb25z dCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWduZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXpl X3QgKCp3cml0ZXYpIChzdHJ1Y3QgZmlsZSAqLCBjb25zdCBzdHJ1Y3QgaW92ZWMgKiwgdW5zaWdu ZWQgbG9uZywgbG9mZl90ICopOwogICAgICAgIHNzaXplX3QgKCpzZW5kcGFnZSkgKHN0cnVjdCBm aWxlICosIHN0cnVjdCBwYWdlICosIGludCwgc2l6ZV90LCBsb2ZmX3QgKiwgaW50KTsKICAgICAg ICB1bnNpZ25lZCBsb25nICgqZ2V0X3VubWFwcGVkX2FyZWEpKHN0cnVjdCBmaWxlICosIHVuc2ln bmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwp9 OwoKc3RydWN0IGlub2RlX29wZXJhdGlvbnMgewogICAgICAgIGludCAoKmNyZWF0ZSkgKHN0cnVj dCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixpbnQpOwogICAgICAgIHN0cnVjdCBkZW50cnkgKiAo Kmxvb2t1cCkgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAgICAgICAgaW50ICgq bGluaykgKHN0cnVjdCBkZW50cnkgKixzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3QgZGVudHJ5ICopOwog ICAgICAgIGludCAoKnVubGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKik7CiAg ICAgICAgaW50ICgqc3ltbGluaykgKHN0cnVjdCBpbm9kZSAqLHN0cnVjdCBkZW50cnkgKixjb25z dCBjaGFyICopOwogICAgICAgIGludCAoKm1rZGlyKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRl bnRyeSAqLGludCk7CiAgICAgICAgaW50ICgqcm1kaXIpIChzdHJ1Y3QgaW5vZGUgKixzdHJ1Y3Qg ZGVudHJ5ICopOwogICAgICAgIGludCAoKm1rbm9kKSAoc3RydWN0IGlub2RlICosc3RydWN0IGRl bnRyeSAqLGludCxpbnQpOwogICAgICAgIGludCAoKnJlbmFtZSkgKHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZGVudHJ5ICosCiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpbm9kZSAqLCBz dHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGludCAoKnJlYWRsaW5rKSAoc3RydWN0IGRlbnRyeSAq LCBjaGFyICosaW50KTsKICAgICAgICBpbnQgKCpmb2xsb3dfbGluaykgKHN0cnVjdCBkZW50cnkg Kiwgc3RydWN0IG5hbWVpZGF0YSAqKTsKICAgICAgICB2b2lkICgqdHJ1bmNhdGUpIChzdHJ1Y3Qg aW5vZGUgKik7CiAgICAgICAgaW50ICgqcGVybWlzc2lvbikgKHN0cnVjdCBpbm9kZSAqLCBpbnQp OwogICAgICAgIGludCAoKnJldmFsaWRhdGUpIChzdHJ1Y3QgZGVudHJ5ICopOwogICAgICAgIGlu dCAoKnNldGF0dHIpIChzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKICAgICAgICBp bnQgKCpnZXRhdHRyKSAoc3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgaWF0dHIgKik7Cn07CgoKCgoK c3RydWN0IHN1cGVyX29wZXJhdGlvbnMgewogICAgICAgIHZvaWQgKCpyZWFkX2lub2RlKSAoc3Ry dWN0IGlub2RlICopOwoKCgoKCgoKICAgICAgICB2b2lkICgqcmVhZF9pbm9kZTIpIChzdHJ1Y3Qg aW5vZGUgKiwgdm9pZCAqKSA7CiAgICAgICAgdm9pZCAoKmRpcnR5X2lub2RlKSAoc3RydWN0IGlu b2RlICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqLCBpbnQp OwogICAgICAgIHZvaWQgKCpwdXRfaW5vZGUpIChzdHJ1Y3QgaW5vZGUgKik7CiAgICAgICAgdm9p ZCAoKmRlbGV0ZV9pbm9kZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqcHV0X3N1 cGVyKSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp3cml0ZV9zdXBlcikg KHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKICAgICAgICB2b2lkICgqd3JpdGVfc3VwZXJfbG9ja2Zz KSAoc3RydWN0IHN1cGVyX2Jsb2NrICopOwogICAgICAgIHZvaWQgKCp1bmxvY2tmcykgKHN0cnVj dCBzdXBlcl9ibG9jayAqKTsKICAgICAgICBpbnQgKCpzdGF0ZnMpIChzdHJ1Y3Qgc3VwZXJfYmxv Y2sgKiwgc3RydWN0IHN0YXRmcyAqKTsKICAgICAgICBpbnQgKCpyZW1vdW50X2ZzKSAoc3RydWN0 IHN1cGVyX2Jsb2NrICosIGludCAqLCBjaGFyICopOwogICAgICAgIHZvaWQgKCpjbGVhcl9pbm9k ZSkgKHN0cnVjdCBpbm9kZSAqKTsKICAgICAgICB2b2lkICgqdW1vdW50X2JlZ2luKSAoc3RydWN0 IHN1cGVyX2Jsb2NrICopOwojIDg5MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvZnMuaCIKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICogKCpmaF90b19kZW50cnkpKHN0cnVjdCBz dXBlcl9ibG9jayAqc2IsIF9fdTMyICpmaCwgaW50IGxlbiwgaW50IGZodHlwZSwgaW50IHBhcmVu dCk7CiAgICAgICAgaW50ICgqZGVudHJ5X3RvX2ZoKShzdHJ1Y3QgZGVudHJ5ICosIF9fdTMyICpm aCwgaW50ICpsZW5wLCBpbnQgbmVlZF9wYXJlbnQpOwp9OwojIDkwNCAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIHZvaWQgX19tYXJrX2lub2RlX2RpcnR5 KHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19pbm9kZV9kaXJ0 eShzdHJ1Y3QgaW5vZGUgKmlub2RlKQp7CiAgICAgICAgX19tYXJrX2lub2RlX2RpcnR5KGlub2Rl LCAoMSB8IDIgfCA0KSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3N5 bmMoc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAgIF9fbWFya19pbm9kZV9kaXJ0eShpbm9k ZSwgMSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2lub2RlX2RpcnR5X3BhZ2VzKHN0cnVj dCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBfX21hcmtfaW5vZGVfZGlydHkoaW5vZGUsIDQpOwp9 CgpzdHJ1Y3QgZHF1b3Rfb3BlcmF0aW9ucyB7CiAgICAgICAgdm9pZCAoKmluaXRpYWxpemUpIChz dHJ1Y3QgaW5vZGUgKiwgc2hvcnQpOwogICAgICAgIHZvaWQgKCpkcm9wKSAoc3RydWN0IGlub2Rl ICopOwogICAgICAgIGludCAoKmFsbG9jX2Jsb2NrKSAoc3RydWN0IGlub2RlICosIHVuc2lnbmVk IGxvbmcsIGNoYXIpOwogICAgICAgIGludCAoKmFsbG9jX2lub2RlKSAoY29uc3Qgc3RydWN0IGlu b2RlICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIHZvaWQgKCpmcmVlX2Jsb2NrKSAoc3RydWN0 IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIHZvaWQgKCpmcmVlX2lub2RlKSAoY29u c3Qgc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcpOwogICAgICAgIGludCAoKnRyYW5zZmVy KSAoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAqKTsKfTsKCnN0cnVjdCBmaWxlX3N5c3Rl bV90eXBlIHsKICAgICAgICBjb25zdCBjaGFyICpuYW1lOwogICAgICAgIGludCBmc19mbGFnczsK ICAgICAgICBzdHJ1Y3Qgc3VwZXJfYmxvY2sgKigqcmVhZF9zdXBlcikgKHN0cnVjdCBzdXBlcl9i bG9jayAqLCB2b2lkICosIGludCk7CiAgICAgICAgc3RydWN0IG1vZHVsZSAqb3duZXI7CiAgICAg ICAgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBsaXN0X2hl YWQgZnNfc3VwZXJzOwp9OwojIDk2MiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvZnMuaCIKZXh0ZXJuIGludCByZWdpc3Rlcl9maWxlc3lzdGVtKHN0cnVjdCBmaWxlX3N5c3Rl bV90eXBlICopOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfZmlsZXN5c3RlbShzdHJ1Y3QgZmlsZV9z eXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIHN0cnVjdCB2ZnNtb3VudCAqa2Vybl9tb3VudChzdHJ1Y3Qg ZmlsZV9zeXN0ZW1fdHlwZSAqKTsKZXh0ZXJuIGludCBtYXlfdW1vdW50KHN0cnVjdCB2ZnNtb3Vu dCAqKTsKZXh0ZXJuIGxvbmcgZG9fbW91bnQoY2hhciAqLCBjaGFyICosIGNoYXIgKiwgdW5zaWdu ZWQgbG9uZywgdm9pZCAqKTsKCgoKZXh0ZXJuIGludCB2ZnNfc3RhdGZzKHN0cnVjdCBzdXBlcl9i bG9jayAqLCBzdHJ1Y3Qgc3RhdGZzICopOwojIDk4MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvZnMuaCIKZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfbG9ja2VkKHN0cnVj dCBpbm9kZSAqKTsKZXh0ZXJuIGludCBsb2Nrc19tYW5kYXRvcnlfYXJlYShpbnQsIHN0cnVjdCBp bm9kZSAqLCBzdHJ1Y3QgZmlsZSAqLCBsb2ZmX3QsIHNpemVfdCk7CiMgOTkwICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIGludCBsb2Nrc192 ZXJpZnlfbG9ja2VkKHN0cnVjdCBpbm9kZSAqaW5vZGUpCnsKICAgICAgICBpZiAoKCgoaW5vZGUp LT5pX3NiLT5zX2ZsYWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwg MDAwMTApKSA9PSAwMDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRv cnlfbG9ja2VkKGlub2RlKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQg bG9ja3NfdmVyaWZ5X2FyZWEoaW50IHJlYWRfd3JpdGUsIHN0cnVjdCBpbm9kZSAqaW5vZGUsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBmaWxlICpmaWxwLCBsb2Zm X3Qgb2Zmc2V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgY291 bnQpCnsKICAgICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5zX2Zs YWdzICYgKDY0KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9PSAw MDAyMDAwKSkKICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYShyZWFk X3dyaXRlLCBpbm9kZSwgZmlscCwgb2Zmc2V0LCBjb3VudCk7CiAgICAgICAgcmV0dXJuIDA7Cn0K CnN0YXRpYyBpbmxpbmUgaW50IGxvY2tzX3ZlcmlmeV90cnVuY2F0ZShzdHJ1Y3QgaW5vZGUgKmlu b2RlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZmlsZSAqZmls cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9mZl90IHNpemUpCnsKICAg ICAgICBpZiAoaW5vZGUtPmlfZmxvY2sgJiYgKCgoaW5vZGUpLT5pX3NiLT5zX2ZsYWdzICYgKDY0 KSkgJiYgKChpbm9kZSktPmlfbW9kZSAmICgwMDAyMDAwIHwgMDAwMTApKSA9PSAwMDAyMDAwKSkK ICAgICAgICAgICAgICAgIHJldHVybiBsb2Nrc19tYW5kYXRvcnlfYXJlYSgKICAgICAgICAgICAg ICAgICAgICAgICAgMiwgaW5vZGUsIGZpbHAsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemUg PCBpbm9kZS0+aV9zaXplID8gc2l6ZSA6IGlub2RlLT5pX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgIChzaXplIDwgaW5vZGUtPmlfc2l6ZSA/IGlub2RlLT5pX3NpemUgLSBzaXplCiAgICAg ICAgICAgICAgICAgICAgICAgICA6IHNpemUgLSBpbm9kZS0+aV9zaXplKQogICAgICAgICAgICAg ICAgKTsKICAgICAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQgZ2V0X2xlYXNlKHN0 cnVjdCBpbm9kZSAqaW5vZGUsIHVuc2lnbmVkIGludCBtb2RlKQp7CiAgICAgICAgaWYgKGlub2Rl LT5pX2Zsb2NrICYmIChpbm9kZS0+aV9mbG9jay0+ZmxfZmxhZ3MgJiAzMikpCiAgICAgICAgICAg ICAgICByZXR1cm4gX19nZXRfbGVhc2UoaW5vZGUsIG1vZGUpOwogICAgICAgIHJldHVybiAwOwp9 CgoKCiBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDApKSkgbG9uZyBzeXNfb3Blbihjb25zdCBjaGFy ICosIGludCwgaW50KTsKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19jbG9z ZSh1bnNpZ25lZCBpbnQpOwpleHRlcm4gaW50IGRvX3RydW5jYXRlKHN0cnVjdCBkZW50cnkgKiwg bG9mZl90IHN0YXJ0KTsKCmV4dGVybiBzdHJ1Y3QgZmlsZSAqZmlscF9vcGVuKGNvbnN0IGNoYXIg KiwgaW50LCBpbnQpOwpleHRlcm4gc3RydWN0IGZpbGUgKiBkZW50cnlfb3BlbihzdHJ1Y3QgZGVu dHJ5ICosIHN0cnVjdCB2ZnNtb3VudCAqLCBpbnQpOwpleHRlcm4gaW50IGZpbHBfY2xvc2Uoc3Ry dWN0IGZpbGUgKiwgZmxfb3duZXJfdCBpZCk7CmV4dGVybiBjaGFyICogZ2V0bmFtZShjb25zdCBj aGFyICopOwoKCmV4dGVybiB2b2lkIHZmc19jYWNoZXNfaW5pdCh1bnNpZ25lZCBsb25nKTsKCgoK CmVudW0ge0JERVZfRklMRSwgQkRFVl9TV0FQLCBCREVWX0ZTLCBCREVWX1JBV307CmV4dGVybiBp bnQgcmVnaXN0ZXJfYmxrZGV2KHVuc2lnbmVkIGludCwgY29uc3QgY2hhciAqLCBzdHJ1Y3QgYmxv Y2tfZGV2aWNlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9ibGtkZXYodW5z aWduZWQgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gc3RydWN0IGJsb2NrX2RldmljZSAqYmRn ZXQoZGV2X3QpOwpleHRlcm4gaW50IGJkX2FjcXVpcmUoc3RydWN0IGlub2RlICppbm9kZSk7CmV4 dGVybiB2b2lkIGJkX2ZvcmdldChzdHJ1Y3QgaW5vZGUgKmlub2RlKTsKZXh0ZXJuIHZvaWQgYmRw dXQoc3RydWN0IGJsb2NrX2RldmljZSAqKTsKZXh0ZXJuIHN0cnVjdCBjaGFyX2RldmljZSAqY2Rn ZXQoZGV2X3QpOwpleHRlcm4gdm9pZCBjZHB1dChzdHJ1Y3QgY2hhcl9kZXZpY2UgKik7CmV4dGVy biBpbnQgYmxrZGV2X29wZW4oc3RydWN0IGlub2RlICosIHN0cnVjdCBmaWxlICopOwpleHRlcm4g aW50IGJsa2Rldl9jbG9zZShzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGZpbGUgKik7CmV4dGVybiBz dHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGRlZl9ibGtfZm9wczsKZXh0ZXJuIHN0cnVjdCBhZGRyZXNz X3NwYWNlX29wZXJhdGlvbnMgZGVmX2Jsa19hb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0 aW9ucyBkZWZfZmlmb19mb3BzOwpleHRlcm4gaW50IGlvY3RsX2J5X2JkZXYoc3RydWN0IGJsb2Nr X2RldmljZSAqLCB1bnNpZ25lZCwgdW5zaWduZWQgbG9uZyk7CmV4dGVybiBpbnQgYmxrZGV2X2dl dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIG1vZGVfdCwgdW5zaWduZWQsIGludCk7CmV4dGVybiBp bnQgYmxrZGV2X3B1dChzdHJ1Y3QgYmxvY2tfZGV2aWNlICosIGludCk7CgoKZXh0ZXJuIGNvbnN0 IHN0cnVjdCBibG9ja19kZXZpY2Vfb3BlcmF0aW9ucyAqZ2V0X2Jsa2ZvcHModW5zaWduZWQgaW50 KTsKZXh0ZXJuIGludCByZWdpc3Rlcl9jaHJkZXYodW5zaWduZWQgaW50LCBjb25zdCBjaGFyICos IHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9jaHJkZXYo dW5zaWduZWQgaW50LCBjb25zdCBjaGFyICopOwpleHRlcm4gaW50IGNocmRldl9vcGVuKHN0cnVj dCBpbm9kZSAqLCBzdHJ1Y3QgZmlsZSAqKTsKZXh0ZXJuIGNvbnN0IGNoYXIgKiBiZGV2bmFtZShr ZGV2X3QpOwpleHRlcm4gY29uc3QgY2hhciAqIGNkZXZuYW1lKGtkZXZfdCk7CmV4dGVybiBjb25z dCBjaGFyICoga2Rldm5hbWUoa2Rldl90KTsKZXh0ZXJuIHZvaWQgaW5pdF9zcGVjaWFsX2lub2Rl KHN0cnVjdCBpbm9kZSAqLCB1bW9kZV90LCBpbnQpOwoKCmV4dGVybiB2b2lkIG1ha2VfYmFkX2lu b2RlKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGludCBpc19iYWRfaW5vZGUoc3RydWN0IGlub2Rl ICopOwoKZXh0ZXJuIHN0cnVjdCBmaWxlX29wZXJhdGlvbnMgcmVhZF9maWZvX2ZvcHM7CmV4dGVy biBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHdyaXRlX2ZpZm9fZm9wczsKZXh0ZXJuIHN0cnVjdCBm aWxlX29wZXJhdGlvbnMgcmR3cl9maWZvX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRp b25zIHJlYWRfcGlwZV9mb3BzOwpleHRlcm4gc3RydWN0IGZpbGVfb3BlcmF0aW9ucyB3cml0ZV9w aXBlX2ZvcHM7CmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIHJkd3JfcGlwZV9mb3BzOwoK ZXh0ZXJuIGludCBmc19tYXlfcmVtb3VudF9ybyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CgpleHRl cm4gaW50IHRyeV90b19mcmVlX2J1ZmZlcnMoc3RydWN0IHBhZ2UgKiwgdW5zaWduZWQgaW50KTsK ZXh0ZXJuIHZvaWQgcmVmaWxlX2J1ZmZlcihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWYpOwpleHRl cm4gdm9pZCBlbmRfYnVmZmVyX2lvX3N5bmMoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgaW50IHVw dG9kYXRlKTsKCgpleHRlcm4gdm9pZCBzZXRfYnVmZmVyX2FzeW5jX2lvKHN0cnVjdCBidWZmZXJf aGVhZCAqYmgpIDsKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIGdldF9iaChzdHJ1Y3QgYnVmZmVy X2hlYWQgKiBiaCkKewogICAgICAgIGF0b21pY19pbmMoJihiaCktPmJfY291bnQpOwp9CgpzdGF0 aWMgaW5saW5lIHZvaWQgcHV0X2JoKHN0cnVjdCBidWZmZXJfaGVhZCAqYmgpCnsKICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwogICAgICAgIGF0b21pY19kZWMo JmJoLT5iX2NvdW50KTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYnVmZmVyX3VwdG9k YXRlKHN0cnVjdCBidWZmZXJfaGVhZCAqIGJoLCBpbnQgb24pCnsKICAgICAgICBpZiAob24pCiAg ICAgICAgICAgICAgICBzZXRfYml0KEJIX1VwdG9kYXRlLCAmYmgtPmJfc3RhdGUpOwogICAgICAg IGVsc2UKICAgICAgICAgICAgICAgIGNsZWFyX2JpdChCSF9VcHRvZGF0ZSwgJmJoLT5iX3N0YXRl KTsKfQoKCgpzdGF0aWMgaW5saW5lIHZvaWQgX19tYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVm ZmVyX2hlYWQgKmJoKQp7CiAgICAgICAgcmVmaWxlX2J1ZmZlcihiaCk7Cn0KCnN0YXRpYyBpbmxp bmUgdm9pZCBtYXJrX2J1ZmZlcl9jbGVhbihzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBiaCkKewogICAg ICAgIGlmICh0ZXN0X2FuZF9jbGVhcl9iaXQoQkhfRGlydHksICYoYmgpLT5iX3N0YXRlKSkKICAg ICAgICAgICAgICAgIF9fbWFya19idWZmZXJfY2xlYW4oYmgpOwp9CgpleHRlcm4gdm9pZCBfX21h cmtfZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgz KSkpOwpleHRlcm4gdm9pZCBfX21hcmtfYnVmZmVyX2RpcnR5KHN0cnVjdCBidWZmZXJfaGVhZCAq YmgpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgbWFya19idWZmZXJf ZGlydHkoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwpleHRlcm4gdm9pZCBidWZmZXJfaW5zZXJ0X2lub2RlX2RhdGFfcXVldWUoc3RydWN0IGJ1ZmZl cl9oZWFkICosIHN0cnVjdCBpbm9kZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgoK CnN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX2J1ZmZlcl9hc3luYyhzdHJ1Y3QgYnVmZmVyX2hlYWQg KiBiaCwgaW50IG9uKQp7CiAgICAgICAgaWYgKG9uKQogICAgICAgICAgICAgICAgc2V0X2JpdChC SF9Bc3luYywgJmJoLT5iX3N0YXRlKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBjbGVh cl9iaXQoQkhfQXN5bmMsICZiaC0+Yl9zdGF0ZSk7Cn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9p ZCBidWZmZXJfSU9fZXJyb3Ioc3RydWN0IGJ1ZmZlcl9oZWFkICogYmgpCnsKICAgICAgICBtYXJr X2J1ZmZlcl9jbGVhbihiaCk7CgoKCiAgICAgICAgYmgtPmJfZW5kX2lvKGJoLCAwKTsKfQoKZXh0 ZXJuIHZvaWQgYnVmZmVyX2luc2VydF9pbm9kZV9xdWV1ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKiwg c3RydWN0IGlub2RlICopOwpzdGF0aWMgaW5saW5lIHZvaWQgbWFya19idWZmZXJfZGlydHlfaW5v ZGUoc3RydWN0IGJ1ZmZlcl9oZWFkICpiaCwgc3RydWN0IGlub2RlICppbm9kZSkKewogICAgICAg IG1hcmtfYnVmZmVyX2RpcnR5KGJoKTsKICAgICAgICBidWZmZXJfaW5zZXJ0X2lub2RlX3F1ZXVl KGJoLCBpbm9kZSk7Cn0KCmV4dGVybiB2b2lkIGJhbGFuY2VfZGlydHkodm9pZCk7CmV4dGVybiBp bnQgY2hlY2tfZGlza19jaGFuZ2Uoa2Rldl90KTsKZXh0ZXJuIGludCBpbnZhbGlkYXRlX2lub2Rl cyhzdHJ1Y3Qgc3VwZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgaW52YWxpZGF0ZV9kZXZpY2Uoa2Rl dl90LCBpbnQpOwpleHRlcm4gdm9pZCBpbnZhbGlkYXRlX2lub2RlX3BhZ2VzKHN0cnVjdCBpbm9k ZSAqKTsKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9pbm9kZV9wYWdlczIoc3RydWN0IGFkZHJlc3Nf c3BhY2UgKik7CmV4dGVybiB2b2lkIGludmFsaWRhdGVfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5v ZGUgKik7CgoKZXh0ZXJuIHZvaWQgaW52YWxpZGF0ZV9iZGV2KHN0cnVjdCBibG9ja19kZXZpY2Ug KiwgaW50KTsKZXh0ZXJuIHZvaWQgX19pbnZhbGlkYXRlX2J1ZmZlcnMoa2Rldl90IGRldiwgaW50 KTsKZXh0ZXJuIHZvaWQgc3luY19pbm9kZXMoa2Rldl90KTsKZXh0ZXJuIHZvaWQgc3luY191bmxv Y2tlZF9pbm9kZXModm9pZCk7CmV4dGVybiB2b2lkIHdyaXRlX2lub2RlX25vdyhzdHJ1Y3QgaW5v ZGUgKiwgaW50KTsKZXh0ZXJuIGludCBzeW5jX2J1ZmZlcnMoa2Rldl90LCBpbnQpOwpleHRlcm4g dm9pZCBzeW5jX2RldihrZGV2X3QpOwpleHRlcm4gaW50IGZzeW5jX2RldihrZGV2X3QpOwpleHRl cm4gaW50IGZzeW5jX3N1cGVyKHN0cnVjdCBzdXBlcl9ibG9jayAqKTsKZXh0ZXJuIGludCBmc3lu Y19ub19zdXBlcihrZGV2X3QpOwpleHRlcm4gdm9pZCBzeW5jX2lub2Rlc19zYihzdHJ1Y3Qgc3Vw ZXJfYmxvY2sgKik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfYnVmZmVycyhzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiBpbnQgb3N5bmNfaW5vZGVfZGF0YV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsK ZXh0ZXJuIGludCBmc3luY19pbm9kZV9idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIGlu dCBmc3luY19pbm9kZV9kYXRhX2J1ZmZlcnMoc3RydWN0IGlub2RlICopOwpleHRlcm4gaW50IGlu b2RlX2hhc19idWZmZXJzKHN0cnVjdCBpbm9kZSAqKTsKZXh0ZXJuIHZvaWQgZmlsZW1hcF9mZGF0 YXN5bmMoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKik7CmV4dGVybiB2b2lkIGZpbGVtYXBfZmRhdGF3 YWl0KHN0cnVjdCBhZGRyZXNzX3NwYWNlICopOwpleHRlcm4gdm9pZCBzeW5jX3N1cGVycyhrZGV2 X3QpOwpleHRlcm4gaW50IGJtYXAoc3RydWN0IGlub2RlICosIGludCk7CmV4dGVybiBpbnQgbm90 aWZ5X2NoYW5nZShzdHJ1Y3QgZGVudHJ5ICosIHN0cnVjdCBpYXR0ciAqKTsKZXh0ZXJuIGludCBw ZXJtaXNzaW9uKHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IHZmc19wZXJtaXNzaW9u KHN0cnVjdCBpbm9kZSAqLCBpbnQpOwpleHRlcm4gaW50IGdldF93cml0ZV9hY2Nlc3Moc3RydWN0 IGlub2RlICopOwpleHRlcm4gaW50IGRlbnlfd3JpdGVfYWNjZXNzKHN0cnVjdCBmaWxlICopOwpz dGF0aWMgaW5saW5lIHZvaWQgcHV0X3dyaXRlX2FjY2VzcyhzdHJ1Y3QgaW5vZGUgKiBpbm9kZSkK ewogICAgICAgIGF0b21pY19kZWMoJmlub2RlLT5pX3dyaXRlY291bnQpOwp9CnN0YXRpYyBpbmxp bmUgdm9pZCBhbGxvd193cml0ZV9hY2Nlc3Moc3RydWN0IGZpbGUgKmZpbGUpCnsKICAgICAgICBp ZiAoZmlsZSkKICAgICAgICAgICAgICAgIGF0b21pY19pbmMoJmZpbGUtPmZfZGVudHJ5LT5kX2lu b2RlLT5pX3dyaXRlY291bnQpOwp9CmV4dGVybiBpbnQgZG9fcGlwZShpbnQgKik7CgpleHRlcm4g aW50IG9wZW5fbmFtZWkoY29uc3QgY2hhciAqLCBpbnQsIGludCwgc3RydWN0IG5hbWVpZGF0YSAq KTsKCmV4dGVybiBpbnQga2VybmVsX3JlYWQoc3RydWN0IGZpbGUgKiwgdW5zaWduZWQgbG9uZywg Y2hhciAqLCB1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHN0cnVjdCBmaWxlICogb3Blbl9leGVjKGNv bnN0IGNoYXIgKik7CgoKZXh0ZXJuIGludCBpc19zdWJkaXIoc3RydWN0IGRlbnRyeSAqLCBzdHJ1 Y3QgZGVudHJ5ICopOwpleHRlcm4gaW5vX3QgZmluZF9pbm9kZV9udW1iZXIoc3RydWN0IGRlbnRy eSAqLCBzdHJ1Y3QgcXN0ciAqKTsKIyAxMjMxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9mcy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgKkVSUl9QVFIobG9uZyBlcnJvcikKewog ICAgICAgIHJldHVybiAodm9pZCAqKSBlcnJvcjsKfQoKc3RhdGljIGlubGluZSBsb25nIFBUUl9F UlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuIChsb25nKSBwdHI7Cn0KCnN0YXRp YyBpbmxpbmUgbG9uZyBJU19FUlIoY29uc3Qgdm9pZCAqcHRyKQp7CiAgICAgICAgcmV0dXJuICh1 bnNpZ25lZCBsb25nKXB0ciA+ICh1bnNpZ25lZCBsb25nKS0xMDAwTDsKfQojIDEyNjIgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ZzLmgiCmVudW0ge0xBU1RfTk9STSwgTEFT VF9ST09ULCBMQVNUX0RPVCwgTEFTVF9ET1RET1QsIExBU1RfQklORH07CiMgMTI3MyAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIKdHlwZWRlZiBzdHJ1Y3QgewogICAg ICAgIHNpemVfdCB3cml0dGVuOwogICAgICAgIHNpemVfdCBjb3VudDsKICAgICAgICBjaGFyICog YnVmOwogICAgICAgIGludCBlcnJvcjsKfSByZWFkX2Rlc2NyaXB0b3JfdDsKCnR5cGVkZWYgaW50 ICgqcmVhZF9hY3Rvcl90KShyZWFkX2Rlc2NyaXB0b3JfdCAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNp Z25lZCBsb25nLCB1bnNpZ25lZCBsb25nKTsKCgpleHRlcm4gbG9mZl90IGRlZmF1bHRfbGxzZWVr KHN0cnVjdCBmaWxlICpmaWxlLCBsb2ZmX3Qgb2Zmc2V0LCBpbnQgb3JpZ2luKTsKCmV4dGVybiBp bnQgX191c2VyX3dhbGsoY29uc3QgY2hhciAqLCB1bnNpZ25lZCwgc3RydWN0IG5hbWVpZGF0YSAq KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBpbnQgcGF0aF9pbml0KGNvbnN0 IGNoYXIgKiwgdW5zaWduZWQsIHN0cnVjdCBuYW1laWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVn cGFybSgzKSkpOwpleHRlcm4gaW50IHBhdGhfd2Fsayhjb25zdCBjaGFyICosIHN0cnVjdCBuYW1l aWRhdGEgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gaW50IGxpbmtfcGF0 aF93YWxrKGNvbnN0IGNoYXIgKiwgc3RydWN0IG5hbWVpZGF0YSAqKSBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHBhdGhfcmVsZWFzZShzdHJ1Y3QgbmFtZWlkYXRhICop OwpleHRlcm4gaW50IGZvbGxvd19kb3duKHN0cnVjdCB2ZnNtb3VudCAqKiwgc3RydWN0IGRlbnRy eSAqKik7CmV4dGVybiBpbnQgZm9sbG93X3VwKHN0cnVjdCB2ZnNtb3VudCAqKiwgc3RydWN0IGRl bnRyeSAqKik7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3VwX29uZV9sZW4oY29uc3QgY2hh ciAqLCBzdHJ1Y3QgZGVudHJ5ICosIGludCk7CmV4dGVybiBzdHJ1Y3QgZGVudHJ5ICogbG9va3Vw X2hhc2goc3RydWN0IHFzdHIgKiwgc3RydWN0IGRlbnRyeSAqKTsKCgoKZXh0ZXJuIHZvaWQgaXB1 dChzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiB2b2lkIGZvcmNlX2RlbGV0ZShzdHJ1Y3QgaW5vZGUg Kik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ3JhYihzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBp bm9fdCBpdW5pcXVlKHN0cnVjdCBzdXBlcl9ibG9jayAqLCBpbm9fdCk7Cgp0eXBlZGVmIGludCAo KmZpbmRfaW5vZGVfdCkoc3RydWN0IGlub2RlICosIHVuc2lnbmVkIGxvbmcsIHZvaWQgKik7CmV4 dGVybiBzdHJ1Y3QgaW5vZGUgKiBpZ2V0NChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKiwgdW5zaWduZWQg bG9uZywgZmluZF9pbm9kZV90LCB2b2lkICopOwpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAq aWdldChzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiLCB1bnNpZ25lZCBsb25nIGlubykKewogICAgICAg IHJldHVybiBpZ2V0NChzYiwgaW5vLCAoKHZvaWQgKikwKSwgKCh2b2lkICopMCkpOwp9CgpleHRl cm4gdm9pZCBjbGVhcl9pbm9kZShzdHJ1Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgaW5vZGUg KiBnZXRfZW1wdHlfaW5vZGUodm9pZCk7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBpbm9kZSAqIG5l d19pbm9kZShzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKQp7CiAgICAgICAgc3RydWN0IGlub2RlICpp bm9kZSA9IGdldF9lbXB0eV9pbm9kZSgpOwogICAgICAgIGlmIChpbm9kZSkgewogICAgICAgICAg ICAgICAgaW5vZGUtPmlfc2IgPSBzYjsKICAgICAgICAgICAgICAgIGlub2RlLT5pX2RldiA9IHNi LT5zX2RldjsKICAgICAgICAgICAgICAgIGlub2RlLT5pX2Jsa2JpdHMgPSBzYi0+c19ibG9ja3Np emVfYml0czsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGlub2RlOwp9CmV4dGVybiB2b2lkIHJl bW92ZV9zdWlkKHN0cnVjdCBpbm9kZSAqaW5vZGUpOwoKZXh0ZXJuIHZvaWQgaW5zZXJ0X2lub2Rl X2hhc2goc3RydWN0IGlub2RlICopOwpleHRlcm4gdm9pZCByZW1vdmVfaW5vZGVfaGFzaChzdHJ1 Y3QgaW5vZGUgKik7CmV4dGVybiBzdHJ1Y3QgZmlsZSAqIGdldF9lbXB0eV9maWxwKHZvaWQpOwpl eHRlcm4gdm9pZCBmaWxlX21vdmUoc3RydWN0IGZpbGUgKmYsIHN0cnVjdCBsaXN0X2hlYWQgKmxp c3QpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFkICogZ2V0X2hhc2hfdGFibGUoa2Rldl90LCBp bnQsIGludCk7CmV4dGVybiBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBnZXRibGsoa2Rldl90LCBpbnQs IGludCk7CmV4dGVybiB2b2lkIGxsX3J3X2Jsb2NrKGludCwgaW50LCBzdHJ1Y3QgYnVmZmVyX2hl YWQgKiBiaFtdKTsKZXh0ZXJuIHZvaWQgc3VibWl0X2JoKGludCwgc3RydWN0IGJ1ZmZlcl9oZWFk ICopOwpleHRlcm4gaW50IGlzX3JlYWRfb25seShrZGV2X3QpOwpleHRlcm4gdm9pZCBfX2JyZWxz ZShzdHJ1Y3QgYnVmZmVyX2hlYWQgKik7CnN0YXRpYyBpbmxpbmUgdm9pZCBicmVsc2Uoc3RydWN0 IGJ1ZmZlcl9oZWFkICpidWYpCnsKICAgICAgICBpZiAoYnVmKQogICAgICAgICAgICAgICAgX19i cmVsc2UoYnVmKTsKfQpleHRlcm4gdm9pZCBfX2Jmb3JnZXQoc3RydWN0IGJ1ZmZlcl9oZWFkICop OwpzdGF0aWMgaW5saW5lIHZvaWQgYmZvcmdldChzdHJ1Y3QgYnVmZmVyX2hlYWQgKmJ1ZikKewog ICAgICAgIGlmIChidWYpCiAgICAgICAgICAgICAgICBfX2Jmb3JnZXQoYnVmKTsKfQpleHRlcm4g aW50IHNldF9ibG9ja3NpemUoa2Rldl90LCBpbnQpOwpleHRlcm4gc3RydWN0IGJ1ZmZlcl9oZWFk ICogYnJlYWQoa2Rldl90LCBpbnQsIGludCk7CmV4dGVybiB2b2lkIHdha2V1cF9iZGZsdXNoKHZv aWQpOwoKZXh0ZXJuIGludCBicndfcGFnZShpbnQsIHN0cnVjdCBwYWdlICosIGtkZXZfdCwgaW50 IFtdLCBpbnQpOwoKdHlwZWRlZiBpbnQgKGdldF9ibG9ja190KShzdHJ1Y3QgaW5vZGUqLGxvbmcs c3RydWN0IGJ1ZmZlcl9oZWFkKixpbnQpOwoKCmV4dGVybiBpbnQgZGlzY2FyZF9iaF9wYWdlKHN0 cnVjdCBwYWdlICosIHVuc2lnbmVkIGxvbmcsIGludCk7CgoKZXh0ZXJuIGludCBibG9ja19zeW1s aW5rKHN0cnVjdCBpbm9kZSAqLCBjb25zdCBjaGFyICosIGludCk7CmV4dGVybiBpbnQgYmxvY2tf d3JpdGVfZnVsbF9wYWdlKHN0cnVjdCBwYWdlKiwgZ2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBi bG9ja19yZWFkX2Z1bGxfcGFnZShzdHJ1Y3QgcGFnZSosIGdldF9ibG9ja190Kik7CmV4dGVybiBp bnQgYmxvY2tfcHJlcGFyZV93cml0ZShzdHJ1Y3QgcGFnZSosIHVuc2lnbmVkLCB1bnNpZ25lZCwg Z2V0X2Jsb2NrX3QqKTsKZXh0ZXJuIGludCBjb250X3ByZXBhcmVfd3JpdGUoc3RydWN0IHBhZ2Uq LCB1bnNpZ25lZCwgdW5zaWduZWQsIGdldF9ibG9ja190KiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBsb25nICopOwpleHRlcm4gaW50IGJsb2NrX2NvbW1pdF93cml0 ZShzdHJ1Y3QgcGFnZSAqcGFnZSwgdW5zaWduZWQgZnJvbSwgdW5zaWduZWQgdG8pOwpleHRlcm4g aW50IGJsb2NrX3N5bmNfcGFnZShzdHJ1Y3QgcGFnZSAqKTsKCmludCBnZW5lcmljX2Jsb2NrX2Jt YXAoc3RydWN0IGFkZHJlc3Nfc3BhY2UgKiwgbG9uZywgZ2V0X2Jsb2NrX3QgKik7CmludCBnZW5l cmljX2NvbW1pdF93cml0ZShzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgcGFnZSAqLCB1bnNpZ25lZCwg dW5zaWduZWQpOwppbnQgYmxvY2tfdHJ1bmNhdGVfcGFnZShzdHJ1Y3QgYWRkcmVzc19zcGFjZSAq LCBsb2ZmX3QsIGdldF9ibG9ja190ICopOwpleHRlcm4gdm9pZCBjcmVhdGVfZW1wdHlfYnVmZmVy cyhzdHJ1Y3QgcGFnZSAqLCBrZGV2X3QsIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIGludCB3YWl0 Zm9yX29uZV9wYWdlKHN0cnVjdCBwYWdlKik7CmV4dGVybiBpbnQgZ2VuZXJpY19maWxlX21tYXAo c3RydWN0IGZpbGUgKiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICopOwpleHRlcm4gaW50IGZpbGVf cmVhZF9hY3RvcihyZWFkX2Rlc2NyaXB0b3JfdCAqIGRlc2MsIHN0cnVjdCBwYWdlICpwYWdlLCB1 bnNpZ25lZCBsb25nIG9mZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKTsKZXh0ZXJuIHNzaXplX3Qg Z2VuZXJpY19maWxlX3JlYWQoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAq KTsKZXh0ZXJuIHNzaXplX3QgZ2VuZXJpY19maWxlX3dyaXRlKHN0cnVjdCBmaWxlICosIGNvbnN0 IGNoYXIgKiwgc2l6ZV90LCBsb2ZmX3QgKik7CmV4dGVybiB2b2lkIGRvX2dlbmVyaWNfZmlsZV9y ZWFkKHN0cnVjdCBmaWxlICosIGxvZmZfdCAqLCByZWFkX2Rlc2NyaXB0b3JfdCAqLCByZWFkX2Fj dG9yX3QpOwpleHRlcm4gbG9mZl90IG5vX2xsc2VlayhzdHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90 IG9mZnNldCwgaW50IG9yaWdpbik7CmV4dGVybiBsb2ZmX3QgZ2VuZXJpY19maWxlX2xsc2Vlayhz dHJ1Y3QgZmlsZSAqZmlsZSwgbG9mZl90IG9mZnNldCwgaW50IG9yaWdpbik7CmV4dGVybiBzc2l6 ZV90IGdlbmVyaWNfcmVhZF9kaXIoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZf dCAqKTsKZXh0ZXJuIGludCBnZW5lcmljX2ZpbGVfb3BlbihzdHJ1Y3QgaW5vZGUgKiBpbm9kZSwg c3RydWN0IGZpbGUgKiBmaWxwKTsKCmV4dGVybiBzdHJ1Y3QgZmlsZV9vcGVyYXRpb25zIGdlbmVy aWNfcm9fZm9wczsKCmV4dGVybiBpbnQgdmZzX3JlYWRsaW5rKHN0cnVjdCBkZW50cnkgKiwgY2hh ciAqLCBpbnQsIGNvbnN0IGNoYXIgKik7CmV4dGVybiBpbnQgdmZzX2ZvbGxvd19saW5rKHN0cnVj dCBuYW1laWRhdGEgKiwgY29uc3QgY2hhciAqKTsKZXh0ZXJuIGludCBwYWdlX3JlYWRsaW5rKHN0 cnVjdCBkZW50cnkgKiwgY2hhciAqLCBpbnQpOwpleHRlcm4gaW50IHBhZ2VfZm9sbG93X2xpbmso c3RydWN0IGRlbnRyeSAqLCBzdHJ1Y3QgbmFtZWlkYXRhICopOwpleHRlcm4gc3RydWN0IGlub2Rl X29wZXJhdGlvbnMgcGFnZV9zeW1saW5rX2lub2RlX29wZXJhdGlvbnM7CgpleHRlcm4gaW50IHZm c19yZWFkZGlyKHN0cnVjdCBmaWxlICosIGZpbGxkaXJfdCwgdm9pZCAqKTsKZXh0ZXJuIGludCBk Y2FjaGVfcmVhZGRpcihzdHJ1Y3QgZmlsZSAqLCB2b2lkICosIGZpbGxkaXJfdCk7CgpleHRlcm4g c3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgKmdldF9mc190eXBlKGNvbnN0IGNoYXIgKm5hbWUpOwpl eHRlcm4gc3RydWN0IHN1cGVyX2Jsb2NrICpnZXRfc3VwZXIoa2Rldl90KTsKZXh0ZXJuIHZvaWQg ZHJvcF9zdXBlcihzdHJ1Y3Qgc3VwZXJfYmxvY2sgKnNiKTsKc3RhdGljIGlubGluZSBpbnQgaXNf bW91bnRlZChrZGV2X3QgZGV2KQp7CiAgICAgICAgc3RydWN0IHN1cGVyX2Jsb2NrICpzYiA9IGdl dF9zdXBlcihkZXYpOwogICAgICAgIGlmIChzYikgewogICAgICAgICAgICAgICAgZHJvcF9zdXBl cihzYik7CiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu IDA7Cn0KdW5zaWduZWQgbG9uZyBnZW5lcmF0ZV9jbHVzdGVyKGtkZXZfdCwgaW50IGJbXSwgaW50 KTsKdW5zaWduZWQgbG9uZyBnZW5lcmF0ZV9jbHVzdGVyX3N3YWIzMihrZGV2X3QsIGludCBiW10s IGludCk7CmV4dGVybiBrZGV2X3QgUk9PVF9ERVY7CmV4dGVybiBjaGFyIHJvb3RfZGV2aWNlX25h bWVbXTsKCgpleHRlcm4gdm9pZCBzaG93X2J1ZmZlcnModm9pZCk7CmV4dGVybiB2b2lkIG1vdW50 X3Jvb3Qodm9pZCk7CgoKZXh0ZXJuIGtkZXZfdCByZWFsX3Jvb3RfZGV2OwpleHRlcm4gaW50IGNo YW5nZV9yb290KGtkZXZfdCwgY29uc3QgY2hhciAqKTsKCgpleHRlcm4gc3NpemVfdCBjaGFyX3Jl YWQoc3RydWN0IGZpbGUgKiwgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXpl X3QgYmxvY2tfcmVhZChzdHJ1Y3QgZmlsZSAqLCBjaGFyICosIHNpemVfdCwgbG9mZl90ICopOwpl eHRlcm4gaW50IHJlYWRfYWhlYWRbXTsKCmV4dGVybiBzc2l6ZV90IGNoYXJfd3JpdGUoc3RydWN0 IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAqKTsKZXh0ZXJuIHNzaXplX3Qg YmxvY2tfd3JpdGUoc3RydWN0IGZpbGUgKiwgY29uc3QgY2hhciAqLCBzaXplX3QsIGxvZmZfdCAq KTsKCmV4dGVybiBpbnQgZmlsZV9mc3luYyhzdHJ1Y3QgZmlsZSAqLCBzdHJ1Y3QgZGVudHJ5ICos IGludCk7CmV4dGVybiBpbnQgZ2VuZXJpY19idWZmZXJfZmRhdGFzeW5jKHN0cnVjdCBpbm9kZSAq aW5vZGUsIHVuc2lnbmVkIGxvbmcgc3RhcnRfaWR4LCB1bnNpZ25lZCBsb25nIGVuZF9pZHgpOwpl eHRlcm4gaW50IGdlbmVyaWNfb3N5bmNfaW5vZGUoc3RydWN0IGlub2RlICosIGludCk7CgoKCgpl eHRlcm4gaW50IGlub2RlX2NoYW5nZV9vayhzdHJ1Y3QgaW5vZGUgKiwgc3RydWN0IGlhdHRyICop OwpleHRlcm4gaW50IGlub2RlX3NldGF0dHIoc3RydWN0IGlub2RlICosIHN0cnVjdCBpYXR0ciAq KTsKIyAxNDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIgpzdGF0 aWMgaW5saW5lIHN0cnVjdCBkZW50cnkgKmxvY2tfcGFyZW50KHN0cnVjdCBkZW50cnkgKmRlbnRy eSkKewogICAgICAgIHN0cnVjdCBkZW50cnkgKmRpciA9IGRnZXQoZGVudHJ5LT5kX3BhcmVudCk7 CgogICAgICAgIGRvd24oJmRpci0+ZF9pbm9kZS0+aV9zZW0pOwogICAgICAgIHJldHVybiBkaXI7 Cn0KCnN0YXRpYyBpbmxpbmUgc3RydWN0IGRlbnRyeSAqZ2V0X3BhcmVudChzdHJ1Y3QgZGVudHJ5 ICpkZW50cnkpCnsKICAgICAgICByZXR1cm4gZGdldChkZW50cnktPmRfcGFyZW50KTsKfQoKc3Rh dGljIGlubGluZSB2b2lkIHVubG9ja19kaXIoc3RydWN0IGRlbnRyeSAqZGlyKQp7CiAgICAgICAg dXAoJmRpci0+ZF9pbm9kZS0+aV9zZW0pOwogICAgICAgIGRwdXQoZGlyKTsKfQoKCgoKCnN0YXRp YyBpbmxpbmUgdm9pZCBkb3VibGVfZG93bihzdHJ1Y3Qgc2VtYXBob3JlICpzMSwgc3RydWN0IHNl bWFwaG9yZSAqczIpCnsKICAgICAgICBpZiAoczEgIT0gczIpIHsKICAgICAgICAgICAgICAgIGlm ICgodW5zaWduZWQgbG9uZykgczEgPCAodW5zaWduZWQgbG9uZykgczIpIHsKICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczI7CiAgICAgICAgICAgICAgICAg ICAgICAgIHMyID0gczE7IHMxID0gdG1wOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgZG93bihzMSk7CiAgICAgICAgfQogICAgICAgIGRvd24oczIpOwp9CiMgMTQ5OSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIKc3RhdGljIGlubGluZSB2b2lkIHRy aXBsZV9kb3duKHN0cnVjdCBzZW1hcGhvcmUgKnMxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IHNlbWFwaG9yZSAqczIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBzdHJ1Y3Qgc2VtYXBob3JlICpzMykKewogICAgICAgIGlmIChzMSAhPSBzMikgewogICAgICAg ICAgICAgICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMikgewog ICAgICAgICAgICAgICAgICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVk IGxvbmcpIHMzKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFw aG9yZSAqdG1wID0gczM7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzMTsg czEgPSB0bXA7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKCh1bnNpZ25lZCBsb25nKSBzMSA8ICh1bnNpZ25lZCBsb25nKSBzMikgewogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMyOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHMyID0gczE7IHMxID0gdG1wOwogICAgICAgICAg ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAg ICAgICAgICBpZiAoKHVuc2lnbmVkIGxvbmcpIHMxIDwgKHVuc2lnbmVkIGxvbmcpIHMzKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgczMgPSBzMTsgczEgPSB0bXA7CiAgICAg ICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCh1bnNpZ25l ZCBsb25nKSBzMiA8ICh1bnNpZ25lZCBsb25nKSBzMykgewogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgKnRtcCA9IHMzOwogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIHMzID0gczI7IHMyID0gdG1wOwogICAgICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBkb3duKHMxKTsKICAgICAgICB9IGVs c2UgaWYgKCh1bnNpZ25lZCBsb25nKSBzMiA8ICh1bnNpZ25lZCBsb25nKSBzMykgewogICAgICAg ICAgICAgICAgc3RydWN0IHNlbWFwaG9yZSAqdG1wID0gczM7CiAgICAgICAgICAgICAgICBzMyA9 IHMyOyBzMiA9IHRtcDsKICAgICAgICB9CiAgICAgICAgZG93bihzMik7CiAgICAgICAgZG93bihz Myk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfdXAoc3RydWN0IHNlbWFwaG9yZSAqczEs IHN0cnVjdCBzZW1hcGhvcmUgKnMyKQp7CiAgICAgICAgdXAoczEpOwogICAgICAgIGlmIChzMSAh PSBzMikKICAgICAgICAgICAgICAgIHVwKHMyKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHRyaXBs ZV91cChzdHJ1Y3Qgc2VtYXBob3JlICpzMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3Qgc2VtYXBob3JlICpzMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlICpzMykKewogICAgICAgIHVwKHMxKTsKICAgICAgICBpZiAoczEgIT0gczIpCiAg ICAgICAgICAgICAgICB1cChzMik7CiAgICAgICAgdXAoczMpOwp9CgpzdGF0aWMgaW5saW5lIHZv aWQgZG91YmxlX2xvY2soc3RydWN0IGRlbnRyeSAqZDEsIHN0cnVjdCBkZW50cnkgKmQyKQp7CiAg ICAgICAgZG91YmxlX2Rvd24oJmQxLT5kX2lub2RlLT5pX3NlbSwgJmQyLT5kX2lub2RlLT5pX3Nl bSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBkb3VibGVfdW5sb2NrKHN0cnVjdCBkZW50cnkgKmQx LCBzdHJ1Y3QgZGVudHJ5ICpkMikKewogICAgICAgIGRvdWJsZV91cCgmZDEtPmRfaW5vZGUtPmlf c2VtLCZkMi0+ZF9pbm9kZS0+aV9zZW0pOwogICAgICAgIGRwdXQoZDEpOwogICAgICAgIGRwdXQo ZDIpOwp9CiMgMTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxp dHkuaCIgMgojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jYXBhYmls aXR5LmgiCnR5cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfaGVhZGVyX3N0cnVjdCB7CiAgICAgICAg X191MzIgdmVyc2lvbjsKICAgICAgICBpbnQgcGlkOwp9ICpjYXBfdXNlcl9oZWFkZXJfdDsKCnR5 cGVkZWYgc3RydWN0IF9fdXNlcl9jYXBfZGF0YV9zdHJ1Y3QgewogICAgICAgIF9fdTMyIGVmZmVj dGl2ZTsKICAgICAgICBfX3UzMiBwZXJtaXR0ZWQ7CiAgICAgICAgX191MzIgaW5oZXJpdGFibGU7 Cn0gKmNhcF91c2VyX2RhdGFfdDsKIyA1NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvY2FwYWJpbGl0eS5oIgp0eXBlZGVmIF9fdTMyIGtlcm5lbF9jYXBfdDsKIyAyODQgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NhcGFiaWxpdHkuaCIKZXh0ZXJuIGtl cm5lbF9jYXBfdCBjYXBfYnNldDsKIyAzMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2NhcGFiaWxpdHkuaCIKc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2NvbWJp bmUoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBiKQp7CiAgICAga2VybmVsX2NhcF90IGRl c3Q7CiAgICAgKGRlc3QpID0gKGEpIHwgKGIpOwogICAgIHJldHVybiBkZXN0Owp9CgpzdGF0aWMg aW5saW5lIGtlcm5lbF9jYXBfdCBjYXBfaW50ZXJzZWN0KGtlcm5lbF9jYXBfdCBhLCBrZXJuZWxf Y2FwX3QgYikKewogICAgIGtlcm5lbF9jYXBfdCBkZXN0OwogICAgIChkZXN0KSA9IChhKSAmIChi KTsKICAgICByZXR1cm4gZGVzdDsKfQoKc3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2Ry b3Aoa2VybmVsX2NhcF90IGEsIGtlcm5lbF9jYXBfdCBkcm9wKQp7CiAgICAga2VybmVsX2NhcF90 IGRlc3Q7CiAgICAgKGRlc3QpID0gKGEpICYgfihkcm9wKTsKICAgICByZXR1cm4gZGVzdDsKfQoK c3RhdGljIGlubGluZSBrZXJuZWxfY2FwX3QgY2FwX2ludmVydChrZXJuZWxfY2FwX3QgYykKewog ICAgIGtlcm5lbF9jYXBfdCBkZXN0OwogICAgIChkZXN0KSA9IH4oYyk7CiAgICAgcmV0dXJuIGRl c3Q7Cn0KIyA2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmgi IDIKIyAyMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvYmluZm10cy5oIgpz dHJ1Y3QgbGludXhfYmlucHJtewogICAgICAgIGNoYXIgYnVmWzEyOF07CiAgICAgICAgc3RydWN0 IHBhZ2UgKnBhZ2VbMzJdOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcDsKICAgICAgICBpbnQgc2hf YmFuZzsKICAgICAgICBzdHJ1Y3QgZmlsZSAqIGZpbGU7CiAgICAgICAgaW50IGVfdWlkLCBlX2dp ZDsKICAgICAgICBrZXJuZWxfY2FwX3QgY2FwX2luaGVyaXRhYmxlLCBjYXBfcGVybWl0dGVkLCBj YXBfZWZmZWN0aXZlOwogICAgICAgIGludCBhcmdjLCBlbnZjOwogICAgICAgIGNoYXIgKiBmaWxl bmFtZTsKICAgICAgICB1bnNpZ25lZCBsb25nIGxvYWRlciwgZXhlYzsKfTsKCgoKCgpzdHJ1Y3Qg bGludXhfYmluZm10IHsKICAgICAgICBzdHJ1Y3QgbGludXhfYmluZm10ICogbmV4dDsKICAgICAg ICBzdHJ1Y3QgbW9kdWxlICptb2R1bGU7CiAgICAgICAgaW50ICgqbG9hZF9iaW5hcnkpKHN0cnVj dCBsaW51eF9iaW5wcm0gKiwgc3RydWN0IHB0X3JlZ3MgKiByZWdzKTsKICAgICAgICBpbnQgKCps b2FkX3NobGliKShzdHJ1Y3QgZmlsZSAqKTsKICAgICAgICBpbnQgKCpjb3JlX2R1bXApKGxvbmcg c2lnbnIsIHN0cnVjdCBwdF9yZWdzICogcmVncywgc3RydWN0IGZpbGUgKiBmaWxlKTsKICAgICAg ICB1bnNpZ25lZCBsb25nIG1pbl9jb3JlZHVtcDsKfTsKCmV4dGVybiBpbnQgcmVnaXN0ZXJfYmlu Zm10KHN0cnVjdCBsaW51eF9iaW5mbXQgKik7CmV4dGVybiBpbnQgdW5yZWdpc3Rlcl9iaW5mbXQo c3RydWN0IGxpbnV4X2JpbmZtdCAqKTsKCmV4dGVybiBpbnQgcHJlcGFyZV9iaW5wcm0oc3RydWN0 IGxpbnV4X2JpbnBybSAqKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX2FyZ196ZXJvKHN0cnVjdCBsaW51 eF9iaW5wcm0gKik7CmV4dGVybiBpbnQgc2VhcmNoX2JpbmFyeV9oYW5kbGVyKHN0cnVjdCBsaW51 eF9iaW5wcm0gKixzdHJ1Y3QgcHRfcmVncyAqKTsKZXh0ZXJuIGludCBmbHVzaF9vbGRfZXhlYyhz dHJ1Y3QgbGludXhfYmlucHJtICogYnBybSk7CmV4dGVybiBpbnQgc2V0dXBfYXJnX3BhZ2VzKHN0 cnVjdCBsaW51eF9iaW5wcm0gKiBicHJtKTsKZXh0ZXJuIGludCBjb3B5X3N0cmluZ3MoaW50IGFy Z2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pOwpleHRlcm4gaW50IGNv cHlfc3RyaW5nc19rZXJuZWwoaW50IGFyZ2MsY2hhciAqKiBhcmd2LHN0cnVjdCBsaW51eF9iaW5w cm0gKmJwcm0pOwpleHRlcm4gdm9pZCBjb21wdXRlX2NyZWRzKHN0cnVjdCBsaW51eF9iaW5wcm0g KmJpbnBybSk7CmV4dGVybiBpbnQgZG9fY29yZWR1bXAobG9uZyBzaWduciwgc3RydWN0IHB0X3Jl Z3MgKiByZWdzKTsKZXh0ZXJuIHZvaWQgc2V0X2JpbmZtdChzdHJ1Y3QgbGludXhfYmluZm10ICpu ZXcpOwojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMg MTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9rZXJuZWwuaCIgMQojIDEyICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDEzICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvdGltZXMuaCIgMQoKCgpzdHJ1Y3QgdG1zIHsKICAgICAgICBjbG9j a190IHRtc191dGltZTsKICAgICAgICBjbG9ja190IHRtc19zdGltZTsKICAgICAgICBjbG9ja190 IHRtc19jdXRpbWU7CiAgICAgICAgY2xvY2tfdCB0bXNfY3N0aW1lOwp9OwojIDE0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZXguaCIgMQojIDU0ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC90aW1leC5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2FzbS9wYXJhbS5oIiAxCiMgNTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3RpbWV4LmgiIDIKIyAxNTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3RpbWV4LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3RpbWV4 LmgiIDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdGltZXguaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDEwICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdGltZXguaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9tc3IuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9hc20vdGltZXguaCIgMgojIDMyICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vdGltZXguaCIKdHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgY3ljbGVzX3Q7 CgpleHRlcm4gY3ljbGVzX3QgY2FjaGVmbHVzaF90aW1lOwoKc3RhdGljIGlubGluZSBjeWNsZXNf dCBnZXRfY3ljbGVzICh2b2lkKQp7CgoKCiAgICAgICAgdW5zaWduZWQgbG9uZyBsb25nIHJldDsK CiAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInJkdHNjIiA6ICI9QSIgKHJldCkpOwogICAg ICAgIHJldHVybiByZXQ7Cgp9CgpleHRlcm4gdW5zaWduZWQgbG9uZyBjcHVfa2h6OwojIDE1MyAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZXguaCIgMgojIDE2MSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZXguaCIKc3RydWN0IHRpbWV4IHsK ICAgICAgICB1bnNpZ25lZCBpbnQgbW9kZXM7CiAgICAgICAgbG9uZyBvZmZzZXQ7CiAgICAgICAg bG9uZyBmcmVxOwogICAgICAgIGxvbmcgbWF4ZXJyb3I7CiAgICAgICAgbG9uZyBlc3RlcnJvcjsK ICAgICAgICBpbnQgc3RhdHVzOwogICAgICAgIGxvbmcgY29uc3RhbnQ7CiAgICAgICAgbG9uZyBw cmVjaXNpb247CiAgICAgICAgbG9uZyB0b2xlcmFuY2U7CgoKICAgICAgICBzdHJ1Y3QgdGltZXZh bCB0aW1lOwogICAgICAgIGxvbmcgdGljazsKCiAgICAgICAgbG9uZyBwcHNmcmVxOwogICAgICAg IGxvbmcgaml0dGVyOwogICAgICAgIGludCBzaGlmdDsKICAgICAgICBsb25nIHN0YWJpbDsKICAg ICAgICBsb25nIGppdGNudDsKICAgICAgICBsb25nIGNhbGNudDsKICAgICAgICBsb25nIGVycmNu dDsKICAgICAgICBsb25nIHN0YmNudDsKCiAgICAgICAgaW50IDozMjsgaW50IDozMjsgaW50IDoz MjsgaW50IDozMjsKICAgICAgICBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOyBpbnQgOjMyOwog ICAgICAgIGludCA6MzI7IGludCA6MzI7IGludCA6MzI7IGludCA6MzI7Cn07CiMgMjUzICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1leC5oIgpleHRlcm4gbG9uZyB0aWNr OwpleHRlcm4gaW50IHRpY2thZGo7CgoKCgpleHRlcm4gaW50IHRpbWVfc3RhdGU7CmV4dGVybiBp bnQgdGltZV9zdGF0dXM7CmV4dGVybiBsb25nIHRpbWVfb2Zmc2V0OwpleHRlcm4gbG9uZyB0aW1l X2NvbnN0YW50OwpleHRlcm4gbG9uZyB0aW1lX3RvbGVyYW5jZTsKZXh0ZXJuIGxvbmcgdGltZV9w cmVjaXNpb247CmV4dGVybiBsb25nIHRpbWVfbWF4ZXJyb3I7CmV4dGVybiBsb25nIHRpbWVfZXN0 ZXJyb3I7CgpleHRlcm4gbG9uZyB0aW1lX3BoYXNlOwpleHRlcm4gbG9uZyB0aW1lX2ZyZXE7CmV4 dGVybiBsb25nIHRpbWVfYWRqOwpleHRlcm4gbG9uZyB0aW1lX3JlZnRpbWU7CgpleHRlcm4gbG9u ZyB0aW1lX2FkanVzdDsKCgpleHRlcm4gbG9uZyBwcHNfb2Zmc2V0OwpleHRlcm4gbG9uZyBwcHNf aml0dGVyOwpleHRlcm4gbG9uZyBwcHNfZnJlcTsKZXh0ZXJuIGxvbmcgcHBzX3N0YWJpbDsKZXh0 ZXJuIGxvbmcgcHBzX3ZhbGlkOwoKCmV4dGVybiBpbnQgcHBzX3NoaWZ0OwpleHRlcm4gbG9uZyBw cHNfaml0Y250OwpleHRlcm4gbG9uZyBwcHNfY2FsY250OwpleHRlcm4gbG9uZyBwcHNfZXJyY250 OwpleHRlcm4gbG9uZyBwcHNfc3RiY250OwojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcmJ0cmVlLmgiIDEKIyA5NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvcmJ0cmVlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgva2Vy bmVsLmgiIDEKIyA5OCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcmJ0cmVl LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdGRkZWYuaCIg MQojIDk5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9yYnRyZWUuaCIgMgoK dHlwZWRlZiBzdHJ1Y3QgcmJfbm9kZV9zCnsKICAgICAgICBzdHJ1Y3QgcmJfbm9kZV9zICogcmJf cGFyZW50OwogICAgICAgIGludCByYl9jb2xvcjsKCgogICAgICAgIHN0cnVjdCByYl9ub2RlX3Mg KiByYl9yaWdodDsKICAgICAgICBzdHJ1Y3QgcmJfbm9kZV9zICogcmJfbGVmdDsKfQpyYl9ub2Rl X3Q7Cgp0eXBlZGVmIHN0cnVjdCByYl9yb290X3MKewogICAgICAgIHN0cnVjdCByYl9ub2RlX3Mg KiByYl9ub2RlOwp9CnJiX3Jvb3RfdDsKCgoKCgpleHRlcm4gdm9pZCByYl9pbnNlcnRfY29sb3Io cmJfbm9kZV90ICosIHJiX3Jvb3RfdCAqKTsKZXh0ZXJuIHZvaWQgcmJfZXJhc2UocmJfbm9kZV90 ICosIHJiX3Jvb3RfdCAqKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCByYl9saW5rX25vZGUocmJfbm9k ZV90ICogbm9kZSwgcmJfbm9kZV90ICogcGFyZW50LCByYl9ub2RlX3QgKiogcmJfbGluaykKewog ICAgICAgIG5vZGUtPnJiX3BhcmVudCA9IHBhcmVudDsKICAgICAgICBub2RlLT5yYl9jb2xvciA9 IDA7CiAgICAgICAgbm9kZS0+cmJfbGVmdCA9IG5vZGUtPnJiX3JpZ2h0ID0gKCh2b2lkICopMCk7 CgogICAgICAgICpyYl9saW5rID0gbm9kZTsKfQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2FzbS9zeXN0ZW0uaCIgMQojIDE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Nl bWFwaG9yZS5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Nj aGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFnZS5oIiAx CiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAyMSAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9tbXUuaCIgMQoKCgoKCgoKdHlwZWRlZiBzdHJ1Y3Qg ewogICAgICAgIHZvaWQgKnNlZ21lbnRzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1dmFsaWQ7 Cn0gbW1fY29udGV4dF90OwojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9zY2hlZC5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Nt cC5oIiAxCiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc21wLmgiCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxMCAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc21wLmgiIDIKIyAyNCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R0eS5oIiAxCiMgMTkgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3R0eS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3R0eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv ZnMuaCIgMQojIDIxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90dHkuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21ham9yLmgiIDEKIyAx NzcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21ham9yLmgiCnN0YXRpYyBf X2lubGluZV9fIGludCBzY3NpX2Jsa19tYWpvcihpbnQgbSkgewogICAgICAgIHJldHVybiAoKCht KSA9PSA4IHx8ICgobSkgPj0gNjUgJiYgKG0pIDw9IDcxKSkgfHwgKG0pID09IDExKTsKfQojIDE5 MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbWFqb3IuaCIKc3RhdGljIF9f aW5saW5lX18gaW50IGlkZV9ibGtfbWFqb3IoaW50IG0pCnsKICAgICAgICByZXR1cm4gKChtKSA9 PSAzIHx8IChtKSA9PSAyMiB8fCAobSkgPT0gMzMgfHwgKG0pID09IDM0IHx8IChtKSA9PSA1NiB8 fCAobSkgPT0gNTcgfHwgKG0pID09IDg4IHx8IChtKSA9PSA4OSB8fCAobSkgPT0gOTAgfHwgKG0p ID09IDkxKTsKfQojIDIyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90dHku aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Rlcm1pb3MuaCIg MQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVzLmgiIDEK IyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90ZXJtaW9zLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdGVybWlvcy5oIiAxCgoKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgiIDEKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wb3NpeF90eXBlcy5oIiAxCiMgNSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Rlcm1iaXRzLmgiIDIKCnR5cGVkZWYg dW5zaWduZWQgY2hhciBjY190Owp0eXBlZGVmIHVuc2lnbmVkIGludCBzcGVlZF90Owp0eXBlZGVm IHVuc2lnbmVkIGludCB0Y2ZsYWdfdDsKCgpzdHJ1Y3QgdGVybWlvcyB7CiAgICAgICAgdGNmbGFn X3QgY19pZmxhZzsKICAgICAgICB0Y2ZsYWdfdCBjX29mbGFnOwogICAgICAgIHRjZmxhZ190IGNf Y2ZsYWc7CiAgICAgICAgdGNmbGFnX3QgY19sZmxhZzsKICAgICAgICBjY190IGNfbGluZTsKICAg ICAgICBjY190IGNfY2NbMTldOwp9OwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2FzbS90ZXJtaW9zLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20v aW9jdGxzLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaW9j dGwuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9pb2N0bHMuaCIg MgojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS90ZXJtaW9zLmgiIDIKCnN0 cnVjdCB3aW5zaXplIHsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB3c19yb3c7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgd3NfY29sOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHdzX3hwaXhlbDsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCB3c195cGl4ZWw7Cn07CgoKc3RydWN0IHRlcm1pbyB7CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgY19pZmxhZzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBjX29mbGFn OwogICAgICAgIHVuc2lnbmVkIHNob3J0IGNfY2ZsYWc7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg Y19sZmxhZzsKICAgICAgICB1bnNpZ25lZCBjaGFyIGNfbGluZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIGNfY2NbOF07Cn07CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv dGVybWlvcy5oIiAyCiMgMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R0 eS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHF1ZXVlLmgi IDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHR5LmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgiIDEKIyAx MTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R0eV9kcml2ZXIuaCIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9mcy5oIiAxCiMgMTE5ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90dHlfZHJpdmVyLmgiIDIKCnN0cnVjdCB0 dHlfZHJpdmVyIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgY29uc3QgY2hhciAqZHJpdmVy X25hbWU7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICBpbnQgbmFtZV9iYXNlOwog ICAgICAgIHNob3J0IG1ham9yOwogICAgICAgIHNob3J0IG1pbm9yX3N0YXJ0OwogICAgICAgIHNo b3J0IG51bTsKICAgICAgICBzaG9ydCB0eXBlOwogICAgICAgIHNob3J0IHN1YnR5cGU7CiAgICAg ICAgc3RydWN0IHRlcm1pb3MgaW5pdF90ZXJtaW9zOwogICAgICAgIGludCBmbGFnczsKICAgICAg ICBpbnQgKnJlZmNvdW50OwogICAgICAgIHN0cnVjdCBwcm9jX2Rpcl9lbnRyeSAqcHJvY19lbnRy eTsKICAgICAgICBzdHJ1Y3QgdHR5X2RyaXZlciAqb3RoZXI7CgoKCgogICAgICAgIHN0cnVjdCB0 dHlfc3RydWN0ICoqdGFibGU7CiAgICAgICAgc3RydWN0IHRlcm1pb3MgKip0ZXJtaW9zOwogICAg ICAgIHN0cnVjdCB0ZXJtaW9zICoqdGVybWlvc19sb2NrZWQ7CiAgICAgICAgdm9pZCAqZHJpdmVy X3N0YXRlOwoKCgoKCiAgICAgICAgaW50ICgqb3Blbikoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHks IHN0cnVjdCBmaWxlICogZmlscCk7CiAgICAgICAgdm9pZCAoKmNsb3NlKShzdHJ1Y3QgdHR5X3N0 cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUgKiBmaWxwKTsKICAgICAgICBpbnQgKCp3cml0ZSkoc3Ry dWN0IHR0eV9zdHJ1Y3QgKiB0dHksIGludCBmcm9tX3VzZXIsCiAgICAgICAgICAgICAgICAgICAg ICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIGludCBjb3VudCk7CiAgICAgICAgdm9pZCAoKnB1 dF9jaGFyKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBjaGFyIGNoKTsKICAgICAg ICB2b2lkICgqZmx1c2hfY2hhcnMpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIGlu dCAoKndyaXRlX3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIGludCAoKmNo YXJzX2luX2J1ZmZlcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgaW50ICgqaW9j dGwpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7CiAgICAgICAg dm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3QgdGVybWlv cyAqIG9sZCk7CiAgICAgICAgdm9pZCAoKnRocm90dGxlKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0 eSk7CiAgICAgICAgdm9pZCAoKnVudGhyb3R0bGUpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5KTsK ICAgICAgICB2b2lkICgqc3RvcCkoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSk7CiAgICAgICAgdm9p ZCAoKnN0YXJ0KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqaGFuZ3Vw KShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKICAgICAgICB2b2lkICgqYnJlYWtfY3RsKShzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5LCBpbnQgc3RhdGUpOwogICAgICAgIHZvaWQgKCpmbHVzaF9idWZm ZXIpKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZvaWQgKCpzZXRfbGRpc2MpKHN0 cnVjdCB0dHlfc3RydWN0ICp0dHkpOwogICAgICAgIHZvaWQgKCp3YWl0X3VudGlsX3NlbnQpKHN0 cnVjdCB0dHlfc3RydWN0ICp0dHksIGludCB0aW1lb3V0KTsKICAgICAgICB2b2lkICgqc2VuZF94 Y2hhcikoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciBjaCk7CiAgICAgICAgaW50ICgqcmVh ZF9wcm9jKShjaGFyICpwYWdlLCBjaGFyICoqc3RhcnQsIG9mZl90IG9mZiwKICAgICAgICAgICAg ICAgICAgICAgICAgICBpbnQgY291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKICAgICAgICBp bnQgKCp3cml0ZV9wcm9jKShzdHJ1Y3QgZmlsZSAqZmlsZSwgY29uc3QgY2hhciAqYnVmZmVyLAog ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEp OwoKCgoKICAgICAgICBzdHJ1Y3QgdHR5X2RyaXZlciAqbmV4dDsKICAgICAgICBzdHJ1Y3QgdHR5 X2RyaXZlciAqcHJldjsKfTsKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvdHR5LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90dHlf bGRpc2MuaCIgMQojIDEwMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHR5 X2xkaXNjLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnMuaCIg MQojIDEwMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHR5X2xkaXNjLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC93YWl0LmgiIDEKIyAx MDIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R0eV9sZGlzYy5oIiAyCgpz dHJ1Y3QgdHR5X2xkaXNjIHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgY2hhciAqbmFtZTsK ICAgICAgICBpbnQgbnVtOwogICAgICAgIGludCBmbGFnczsKCgoKICAgICAgICBpbnQgKCpvcGVu KShzdHJ1Y3QgdHR5X3N0cnVjdCAqKTsKICAgICAgICB2b2lkICgqY2xvc2UpKHN0cnVjdCB0dHlf c3RydWN0ICopOwogICAgICAgIHZvaWQgKCpmbHVzaF9idWZmZXIpKHN0cnVjdCB0dHlfc3RydWN0 ICp0dHkpOwogICAgICAgIHNzaXplX3QgKCpjaGFyc19pbl9idWZmZXIpKHN0cnVjdCB0dHlfc3Ry dWN0ICp0dHkpOwogICAgICAgIHNzaXplX3QgKCpyZWFkKShzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0 eSwgc3RydWN0IGZpbGUgKiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBj aGFyICogYnVmLCBzaXplX3QgbnIpOwogICAgICAgIHNzaXplX3QgKCp3cml0ZSkoc3RydWN0IHR0 eV9zdHJ1Y3QgKiB0dHksIHN0cnVjdCBmaWxlICogZmlsZSwKICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiBidWYsIHNpemVfdCBucik7CiAgICAgICAgaW50ICgq aW9jdGwpKHN0cnVjdCB0dHlfc3RydWN0ICogdHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbGUsCiAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBsb25nIGFyZyk7 CiAgICAgICAgdm9pZCAoKnNldF90ZXJtaW9zKShzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1 Y3QgdGVybWlvcyAqIG9sZCk7CiAgICAgICAgdW5zaWduZWQgaW50ICgqcG9sbCkoc3RydWN0IHR0 eV9zdHJ1Y3QgKiwgc3RydWN0IGZpbGUgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgcG9sbF90YWJsZV9zdHJ1Y3QgKik7CgoKCgogICAgICAgIHZvaWQgKCpyZWNlaXZlX2J1 Zikoc3RydWN0IHR0eV9zdHJ1Y3QgKiwgY29uc3QgdW5zaWduZWQgY2hhciAqY3AsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBjaGFyICpmcCwgaW50IGNvdW50KTsKICAgICAgICBpbnQg KCpyZWNlaXZlX3Jvb20pKHN0cnVjdCB0dHlfc3RydWN0ICopOwogICAgICAgIHZvaWQgKCp3cml0 ZV93YWtldXApKHN0cnVjdCB0dHlfc3RydWN0ICopOwp9OwojIDI2ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC90dHkuaCIgMgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vc3lzdGVtLmgiIDEKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvdHR5LmgiIDIKIyA1OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvdHR5LmgiCnN0cnVjdCBzY3JlZW5faW5mbyB7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmln X3g7CiAgICAgICAgdW5zaWduZWQgY2hhciBvcmlnX3k7CiAgICAgICAgdW5zaWduZWQgc2hvcnQg ZG9udHVzZTE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgb3JpZ192aWRlb19wYWdlOwogICAgICAg IHVuc2lnbmVkIGNoYXIgb3JpZ192aWRlb19tb2RlOwogICAgICAgIHVuc2lnbmVkIGNoYXIgb3Jp Z192aWRlb19jb2xzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHVudXNlZDI7CiAgICAgICAgdW5z aWduZWQgc2hvcnQgb3JpZ192aWRlb19lZ2FfYng7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdW51 c2VkMzsKICAgICAgICB1bnNpZ25lZCBjaGFyIG9yaWdfdmlkZW9fbGluZXM7CiAgICAgICAgdW5z aWduZWQgY2hhciBvcmlnX3ZpZGVvX2lzVkdBOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG9yaWdf dmlkZW9fcG9pbnRzOwoKCiAgICAgICAgdW5zaWduZWQgc2hvcnQgbGZiX3dpZHRoOwogICAgICAg IHVuc2lnbmVkIHNob3J0IGxmYl9oZWlnaHQ7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbGZiX2Rl cHRoOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbGZiX2Jhc2U7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBsZmJfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBkb250dXNlMiwgZG9udHVzZTM7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgbGZiX2xpbmVsZW5ndGg7CiAgICAgICAgdW5zaWduZWQgY2hh ciByZWRfc2l6ZTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJlZF9wb3M7CiAgICAgICAgdW5zaWdu ZWQgY2hhciBncmVlbl9zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgZ3JlZW5fcG9zOwogICAg ICAgIHVuc2lnbmVkIGNoYXIgYmx1ZV9zaXplOwogICAgICAgIHVuc2lnbmVkIGNoYXIgYmx1ZV9w b3M7CiAgICAgICAgdW5zaWduZWQgY2hhciByc3ZkX3NpemU7CiAgICAgICAgdW5zaWduZWQgY2hh ciByc3ZkX3BvczsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB2ZXNhcG1fc2VnOwogICAgICAgIHVu c2lnbmVkIHNob3J0IHZlc2FwbV9vZmY7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcGFnZXM7Cgp9 OwoKZXh0ZXJuIHN0cnVjdCBzY3JlZW5faW5mbyBzY3JlZW5faW5mbzsKIyAxMzkgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R0eS5oIgpzdHJ1Y3QgdHR5X2ZsaXBfYnVmZmVy IHsKICAgICAgICBzdHJ1Y3QgdHFfc3RydWN0IHRxdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc2VtYXBo b3JlIHB0eV9zZW07CiAgICAgICAgY2hhciAqY2hhcl9idWZfcHRyOwogICAgICAgIHVuc2lnbmVk IGNoYXIgKmZsYWdfYnVmX3B0cjsKICAgICAgICBpbnQgY291bnQ7CiAgICAgICAgaW50IGJ1Zl9u dW07CiAgICAgICAgdW5zaWduZWQgY2hhciBjaGFyX2J1ZlsyKjUxMl07CiAgICAgICAgY2hhciBm bGFnX2J1ZlsyKjUxMl07CiAgICAgICAgdW5zaWduZWQgY2hhciBzbG9wWzRdOwp9OwojIDI1OSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHR5LmgiCnN0cnVjdCB0dHlfc3Ry dWN0IHsKICAgICAgICBpbnQgbWFnaWM7CiAgICAgICAgc3RydWN0IHR0eV9kcml2ZXIgZHJpdmVy OwogICAgICAgIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2M7CiAgICAgICAgc3RydWN0IHRlcm1pb3Mg KnRlcm1pb3MsICp0ZXJtaW9zX2xvY2tlZDsKICAgICAgICBpbnQgcGdycDsKICAgICAgICBpbnQg c2Vzc2lvbjsKICAgICAgICBrZGV2X3QgZGV2aWNlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3M7CiAgICAgICAgaW50IGNvdW50OwogICAgICAgIHN0cnVjdCB3aW5zaXplIHdpbnNpemU7CiAg ICAgICAgdW5zaWduZWQgY2hhciBzdG9wcGVkOjEsIGh3X3N0b3BwZWQ6MSwgZmxvd19zdG9wcGVk OjEsIHBhY2tldDoxOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbG93X2xhdGVuY3k6MSwgd2FybmVk OjE7CiAgICAgICAgdW5zaWduZWQgY2hhciBjdHJsX3N0YXR1czsKCiAgICAgICAgc3RydWN0IHR0 eV9zdHJ1Y3QgKmxpbms7CiAgICAgICAgc3RydWN0IGZhc3luY19zdHJ1Y3QgKmZhc3luYzsKICAg ICAgICBzdHJ1Y3QgdHR5X2ZsaXBfYnVmZmVyIGZsaXA7CiAgICAgICAgaW50IG1heF9mbGlwX2Nu dDsKICAgICAgICBpbnQgYWx0X3NwZWVkOwogICAgICAgIHdhaXRfcXVldWVfaGVhZF90IHdyaXRl X3dhaXQ7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFkX3QgcmVhZF93YWl0OwogICAgICAgIHN0cnVj dCB0cV9zdHJ1Y3QgdHFfaGFuZ3VwOwogICAgICAgIHZvaWQgKmRpc2NfZGF0YTsKICAgICAgICB2 b2lkICpkcml2ZXJfZGF0YTsKICAgICAgICBzdHJ1Y3QgbGlzdF9oZWFkIHR0eV9maWxlczsKCgoK CgoKCiAgICAgICAgdW5zaWduZWQgaW50IGNvbHVtbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIGxu ZXh0OjEsIGVyYXNpbmc6MSwgcmF3OjEsIHJlYWxfcmF3OjEsIGljYW5vbjoxOwogICAgICAgIHVu c2lnbmVkIGNoYXIgY2xvc2luZzoxOwogICAgICAgIHVuc2lnbmVkIHNob3J0IG1pbmltdW1fdG9f d2FrZTsKICAgICAgICB1bnNpZ25lZCBvdmVycnVuX3RpbWU7CiAgICAgICAgaW50IG51bV9vdmVy cnVuOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcHJvY2Vzc19jaGFyX21hcFsyNTYvKDgqc2l6ZW9m KHVuc2lnbmVkIGxvbmcpKV07CiAgICAgICAgY2hhciAqcmVhZF9idWY7CiAgICAgICAgaW50IHJl YWRfaGVhZDsKICAgICAgICBpbnQgcmVhZF90YWlsOwogICAgICAgIGludCByZWFkX2NudDsKICAg ICAgICB1bnNpZ25lZCBsb25nIHJlYWRfZmxhZ3NbNDA5Ni8oOCpzaXplb2YodW5zaWduZWQgbG9u ZykpXTsKICAgICAgICBpbnQgY2Fub25fZGF0YTsKICAgICAgICB1bnNpZ25lZCBsb25nIGNhbm9u X2hlYWQ7CiAgICAgICAgdW5zaWduZWQgaW50IGNhbm9uX2NvbHVtbjsKICAgICAgICBzdHJ1Y3Qg c2VtYXBob3JlIGF0b21pY19yZWFkOwogICAgICAgIHN0cnVjdCBzZW1hcGhvcmUgYXRvbWljX3dy aXRlOwogICAgICAgIHNwaW5sb2NrX3QgcmVhZF9sb2NrOwoKICAgICAgICBzdHJ1Y3QgdHFfc3Ry dWN0IFNBS190cTsKfTsKIyAzNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3R0eS5oIgpleHRlcm4gdm9pZCB0dHlfd3JpdGVfZmx1c2goc3RydWN0IHR0eV9zdHJ1Y3QgKik7 CgpleHRlcm4gc3RydWN0IHRlcm1pb3MgdHR5X3N0ZF90ZXJtaW9zOwpleHRlcm4gc3RydWN0IHR0 eV9zdHJ1Y3QgKiByZWRpcmVjdDsKZXh0ZXJuIHN0cnVjdCB0dHlfbGRpc2MgbGRpc2NzW107CmV4 dGVybiBpbnQgZmdfY29uc29sZSwgbGFzdF9jb25zb2xlLCB3YW50X2NvbnNvbGU7CgpleHRlcm4g aW50IGttc2dfcmVkaXJlY3Q7CgpleHRlcm4gdm9pZCBjb25faW5pdCh2b2lkKTsKZXh0ZXJuIHZv aWQgY29uc29sZV9pbml0KHZvaWQpOwoKZXh0ZXJuIGludCBscF9pbml0KHZvaWQpOwpleHRlcm4g aW50IHB0eV9pbml0KHZvaWQpOwpleHRlcm4gdm9pZCB0dHlfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu dCBteHNlcl9pbml0KHZvaWQpOwpleHRlcm4gaW50IG1veGFfaW5pdCh2b2lkKTsKZXh0ZXJuIGlu dCBpcDJfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBwY3hlX2luaXQodm9pZCk7CmV4dGVybiBpbnQg cGNfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCB2Y3NfaW5pdCh2b2lkKTsKZXh0ZXJuIGludCBycF9p bml0KHZvaWQpOwpleHRlcm4gaW50IGN5X2luaXQodm9pZCk7CmV4dGVybiBpbnQgc3RsX2luaXQo dm9pZCk7CmV4dGVybiBpbnQgc3RsaV9pbml0KHZvaWQpOwpleHRlcm4gaW50IHNwZWNpYWxpeF9p bml0KHZvaWQpOwpleHRlcm4gaW50IGVzcHNlcmlhbF9pbml0KHZvaWQpOwpleHRlcm4gaW50IG1h Y3NlcmlhbF9pbml0KHZvaWQpOwpleHRlcm4gaW50IGEyMjMyYm9hcmRfaW5pdCh2b2lkKTsKCmV4 dGVybiBpbnQgdHR5X3BhcmFub2lhX2NoZWNrKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGtkZXZf dCBkZXZpY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKnJvdXRp bmUpOwpleHRlcm4gY2hhciAqdHR5X25hbWUoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgY2hhciAq YnVmKTsKZXh0ZXJuIHZvaWQgdHR5X3dhaXRfdW50aWxfc2VudChzdHJ1Y3QgdHR5X3N0cnVjdCAq IHR0eSwgbG9uZyB0aW1lb3V0KTsKZXh0ZXJuIGludCB0dHlfY2hlY2tfY2hhbmdlKHN0cnVjdCB0 dHlfc3RydWN0ICogdHR5KTsKZXh0ZXJuIHZvaWQgc3RvcF90dHkoc3RydWN0IHR0eV9zdHJ1Y3Qg KiB0dHkpOwpleHRlcm4gdm9pZCBzdGFydF90dHkoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpOwpl eHRlcm4gaW50IHR0eV9yZWdpc3Rlcl9sZGlzYyhpbnQgZGlzYywgc3RydWN0IHR0eV9sZGlzYyAq bmV3X2xkaXNjKTsKZXh0ZXJuIGludCB0dHlfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCB0dHlfZHJp dmVyICpkcml2ZXIpOwpleHRlcm4gaW50IHR0eV91bnJlZ2lzdGVyX2RyaXZlcihzdHJ1Y3QgdHR5 X2RyaXZlciAqZHJpdmVyKTsKZXh0ZXJuIHZvaWQgdHR5X3JlZ2lzdGVyX2RldmZzIChzdHJ1Y3Qg dHR5X2RyaXZlciAqZHJpdmVyLCB1bnNpZ25lZCBpbnQgZmxhZ3MsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgbWlub3IpOwpleHRlcm4gdm9pZCB0dHlfdW5yZWdpc3Rl cl9kZXZmcyAoc3RydWN0IHR0eV9kcml2ZXIgKmRyaXZlciwgdW5zaWduZWQgbWlub3IpOwpleHRl cm4gaW50IHR0eV9yZWFkX3Jhd19kYXRhKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2lnbmVk IGNoYXIgKmJ1ZnAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJ1Zmxlbik7CmV4 dGVybiB2b2lkIHR0eV93cml0ZV9tZXNzYWdlKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIg Km1zZyk7CgpleHRlcm4gaW50IGlzX29ycGhhbmVkX3BncnAoaW50IHBncnApOwpleHRlcm4gaW50 IGlzX2lnbm9yZWQoaW50IHNpZyk7CmV4dGVybiBpbnQgdHR5X3NpZ25hbChpbnQgc2lnLCBzdHJ1 Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQgdHR5X2hhbmd1cChzdHJ1Y3QgdHR5X3N0 cnVjdCAqIHR0eSk7CmV4dGVybiB2b2lkIHR0eV92aGFuZ3VwKHN0cnVjdCB0dHlfc3RydWN0ICog dHR5KTsKZXh0ZXJuIHZvaWQgdHR5X3VuaGFuZ3VwKHN0cnVjdCBmaWxlICpmaWxwKTsKZXh0ZXJu IGludCB0dHlfaHVuZ191cF9wKHN0cnVjdCBmaWxlICogZmlscCk7CmV4dGVybiB2b2lkIGRvX1NB SyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KTsKZXh0ZXJuIHZvaWQgZGlzYXNzb2NpYXRlX2N0dHko aW50IHByaXYpOwpleHRlcm4gdm9pZCB0dHlfZmxpcF9idWZmZXJfcHVzaChzdHJ1Y3QgdHR5X3N0 cnVjdCAqdHR5KTsKZXh0ZXJuIGludCB0dHlfZ2V0X2JhdWRfcmF0ZShzdHJ1Y3QgdHR5X3N0cnVj dCAqdHR5KTsKCgpleHRlcm4gc3RydWN0IHR0eV9sZGlzYyB0dHlfbGRpc2NfTl9UVFk7CgoKZXh0 ZXJuIGludCBuX3R0eV9pb2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqIHR0eSwgc3RydWN0IGZpbGUg KiBmaWxlLAogICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVk IGxvbmcgYXJnKTsKCgoKZXh0ZXJuIHZvaWQgc2VyaWFsX2NvbnNvbGVfaW5pdCh2b2lkKTsKCgoK ZXh0ZXJuIGludCBwY3hlX29wZW4oc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUg KmZpbHApOwoKCgpleHRlcm4gdm9pZCBjb25zb2xlX3ByaW50KGNvbnN0IGNoYXIgKik7CgoKCmV4 dGVybiBpbnQgdnRfaW9jdGwoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZpbGUgKiBm aWxlLAogICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBjbWQsIHVuc2lnbmVkIGxvbmcg YXJnKTsKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIg MgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NlbS5oIiAxCgoKCiMg MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXBjLmgiIDEKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXBjLmgiIDIKCgoKCnN0cnVjdCBpcGNfcGVy bQp7CiAgICAgICAgX19rZXJuZWxfa2V5X3Qga2V5OwogICAgICAgIF9fa2VybmVsX3VpZF90IHVp ZDsKICAgICAgICBfX2tlcm5lbF9naWRfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkX3QgY3Vp ZDsKICAgICAgICBfX2tlcm5lbF9naWRfdCBjZ2lkOwogICAgICAgIF9fa2VybmVsX21vZGVfdCBt b2RlOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNlcTsKfTsKCgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2FzbS9pcGNidWYuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vaXBjYnVmLmgiCnN0cnVjdCBpcGM2NF9wZXJtCnsKICAgICAgICBfX2tl cm5lbF9rZXlfdCBrZXk7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCB1aWQ7CiAgICAgICAgX19r ZXJuZWxfZ2lkMzJfdCBnaWQ7CiAgICAgICAgX19rZXJuZWxfdWlkMzJfdCBjdWlkOwogICAgICAg IF9fa2VybmVsX2dpZDMyX3QgY2dpZDsKICAgICAgICBfX2tlcm5lbF9tb2RlX3QgbW9kZTsKICAg ICAgICB1bnNpZ25lZCBzaG9ydCBfX3BhZDE7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VxOwog ICAgICAgIHVuc2lnbmVkIHNob3J0IF9fcGFkMjsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51 c2VkMTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKfTsKIyAyMiAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXBjLmgiIDIKIyA1NyAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvaXBjLmgiCnN0cnVjdCBrZXJuX2lwY19wZXJtCnsKICAgICAg ICBrZXlfdCBrZXk7CiAgICAgICAgdWlkX3QgdWlkOwogICAgICAgIGdpZF90IGdpZDsKICAgICAg ICB1aWRfdCBjdWlkOwogICAgICAgIGdpZF90IGNnaWQ7CiAgICAgICAgbW9kZV90IG1vZGU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBzZXE7Cn07CiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvc2VtLmgiIDIKIyAyMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvc2VtLmgiCnN0cnVjdCBzZW1pZF9kcyB7CiAgICAgICAgc3RydWN0IGlwY19wZXJtIHNl bV9wZXJtOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAgICAgICAgX19rZXJu ZWxfdGltZV90IHNlbV9jdGltZTsKICAgICAgICBzdHJ1Y3Qgc2VtICpzZW1fYmFzZTsKICAgICAg ICBzdHJ1Y3Qgc2VtX3F1ZXVlICpzZW1fcGVuZGluZzsKICAgICAgICBzdHJ1Y3Qgc2VtX3F1ZXVl ICoqc2VtX3BlbmRpbmdfbGFzdDsKICAgICAgICBzdHJ1Y3Qgc2VtX3VuZG8gKnVuZG87CiAgICAg ICAgdW5zaWduZWQgc2hvcnQgc2VtX25zZW1zOwp9OwoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvYXNtL3NlbWJ1Zi5oIiAxCiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2FzbS9zZW1idWYuaCIKc3RydWN0IHNlbWlkNjRfZHMgewogICAgICAgIHN0cnVjdCBp cGM2NF9wZXJtIHNlbV9wZXJtOwogICAgICAgIF9fa2VybmVsX3RpbWVfdCBzZW1fb3RpbWU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBfX3VudXNlZDE7CiAgICAgICAgX19rZXJuZWxfdGltZV90IHNl bV9jdGltZTsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMjsKICAgICAgICB1bnNpZ25l ZCBsb25nIHNlbV9uc2VtczsKICAgICAgICB1bnNpZ25lZCBsb25nIF9fdW51c2VkMzsKICAgICAg ICB1bnNpZ25lZCBsb25nIF9fdW51c2VkNDsKfTsKIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvc2VtLmgiIDIKCgpzdHJ1Y3Qgc2VtYnVmIHsKICAgICAgICB1bnNpZ25l ZCBzaG9ydCBzZW1fbnVtOwogICAgICAgIHNob3J0IHNlbV9vcDsKICAgICAgICBzaG9ydCBzZW1f ZmxnOwp9OwoKCnVuaW9uIHNlbXVuIHsKICAgICAgICBpbnQgdmFsOwogICAgICAgIHN0cnVjdCBz ZW1pZF9kcyAqYnVmOwogICAgICAgIHVuc2lnbmVkIHNob3J0ICphcnJheTsKICAgICAgICBzdHJ1 Y3Qgc2VtaW5mbyAqX19idWY7CiAgICAgICAgdm9pZCAqX19wYWQ7Cn07CgpzdHJ1Y3Qgc2VtaW5m byB7CiAgICAgICAgaW50IHNlbW1hcDsKICAgICAgICBpbnQgc2VtbW5pOwogICAgICAgIGludCBz ZW1tbnM7CiAgICAgICAgaW50IHNlbW1udTsKICAgICAgICBpbnQgc2VtbXNsOwogICAgICAgIGlu dCBzZW1vcG07CiAgICAgICAgaW50IHNlbXVtZTsKICAgICAgICBpbnQgc2VtdXN6OwogICAgICAg IGludCBzZW12bXg7CiAgICAgICAgaW50IHNlbWFlbTsKfTsKIyA4MiAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvc2VtLmgiCnN0cnVjdCBzZW0gewogICAgICAgIGludCBzZW12 YWw7CiAgICAgICAgaW50IHNlbXBpZDsKfTsKCgpzdHJ1Y3Qgc2VtX2FycmF5IHsKICAgICAgICBz dHJ1Y3Qga2Vybl9pcGNfcGVybSBzZW1fcGVybTsKICAgICAgICB0aW1lX3Qgc2VtX290aW1lOwog ICAgICAgIHRpbWVfdCBzZW1fY3RpbWU7CiAgICAgICAgc3RydWN0IHNlbSAqc2VtX2Jhc2U7CiAg ICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqc2VtX3BlbmRpbmc7CiAgICAgICAgc3RydWN0IHNlbV9x dWV1ZSAqKnNlbV9wZW5kaW5nX2xhc3Q7CiAgICAgICAgc3RydWN0IHNlbV91bmRvICp1bmRvOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgc2VtX25zZW1zOwp9OwoKCnN0cnVjdCBzZW1fcXVldWUgewog ICAgICAgIHN0cnVjdCBzZW1fcXVldWUgKiBuZXh0OwogICAgICAgIHN0cnVjdCBzZW1fcXVldWUg KiogcHJldjsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QqIHNsZWVwZXI7CiAgICAgICAgc3Ry dWN0IHNlbV91bmRvICogdW5kbzsKICAgICAgICBpbnQgcGlkOwogICAgICAgIGludCBzdGF0dXM7 CiAgICAgICAgc3RydWN0IHNlbV9hcnJheSAqIHNtYTsKICAgICAgICBpbnQgaWQ7CiAgICAgICAg c3RydWN0IHNlbWJ1ZiAqIHNvcHM7CiAgICAgICAgaW50IG5zb3BzOwogICAgICAgIGludCBhbHRl cjsKfTsKCgoKCnN0cnVjdCBzZW1fdW5kbyB7CiAgICAgICAgc3RydWN0IHNlbV91bmRvICogcHJv Y19uZXh0OwogICAgICAgIHN0cnVjdCBzZW1fdW5kbyAqIGlkX25leHQ7CiAgICAgICAgaW50IHNl bWlkOwogICAgICAgIHNob3J0ICogc2VtYWRqOwp9OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MCkpKSBsb25nIHN5c19zZW1nZXQgKGtleV90IGtleSwgaW50IG5zZW1zLCBpbnQgc2VtZmxnKTsK IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSBsb25nIHN5c19zZW1vcCAoaW50IHNlbWlkLCBz dHJ1Y3Qgc2VtYnVmICpzb3BzLCB1bnNpZ25lZCBuc29wcyk7CiBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDApKSkgbG9uZyBzeXNfc2VtY3RsIChpbnQgc2VtaWQsIGludCBzZW1udW0sIGludCBjbWQs IHVuaW9uIHNlbXVuIGFyZyk7CiMgMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9z aWduYWwuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zaWdu YWwuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVz LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnbmFsLmgiIDIK CgpzdHJ1Y3Qgc2lnaW5mbzsKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNt L3NpZ25hbC5oIgp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgb2xkX3NpZ3NldF90OwoKdHlwZWRlZiBz dHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGxvbmcgc2lnWyg2NCAvIDMyKV07Cn0gc2lnc2V0X3Q7 CiMgMTI5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnbmFsLmgiCnR5cGVk ZWYgdm9pZCAoKl9fc2lnaGFuZGxlcl90KShpbnQpOwoKCgoKCgpzdHJ1Y3Qgb2xkX3NpZ2FjdGlv biB7CiAgICAgICAgX19zaWdoYW5kbGVyX3Qgc2FfaGFuZGxlcjsKICAgICAgICBvbGRfc2lnc2V0 X3Qgc2FfbWFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHNhX2ZsYWdzOwogICAgICAgIHZvaWQg KCpzYV9yZXN0b3Jlcikodm9pZCk7Cn07CgpzdHJ1Y3Qgc2lnYWN0aW9uIHsKICAgICAgICBfX3Np Z2hhbmRsZXJfdCBzYV9oYW5kbGVyOwogICAgICAgIHVuc2lnbmVkIGxvbmcgc2FfZmxhZ3M7CiAg ICAgICAgdm9pZCAoKnNhX3Jlc3RvcmVyKSh2b2lkKTsKICAgICAgICBzaWdzZXRfdCBzYV9tYXNr Owp9OwoKc3RydWN0IGtfc2lnYWN0aW9uIHsKICAgICAgICBzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwp9 OwojIDE3MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NpZ25hbC5oIgp0eXBl ZGVmIHN0cnVjdCBzaWdhbHRzdGFjayB7CiAgICAgICAgdm9pZCAqc3Nfc3A7CiAgICAgICAgaW50 IHNzX2ZsYWdzOwogICAgICAgIHNpemVfdCBzc19zaXplOwp9IHN0YWNrX3Q7CgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnY29udGV4dC5oIiAxCiMgMTc5ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnbmFsLmgiIDIKCgoKc3RhdGljIF9faW5s aW5lX18gdm9pZCBzaWdhZGRzZXQoc2lnc2V0X3QgKnNldCwgaW50IF9zaWcpCnsKICAgICAgICBf X2FzbV9fKCJidHNsICUxLCUwIiA6ICI9bSIoKnNldCkgOiAiSXIiKF9zaWcgLSAxKSA6ICJjYyIp Owp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIHNpZ2RlbHNldChzaWdzZXRfdCAqc2V0LCBpbnQg X3NpZykKewogICAgICAgIF9fYXNtX18oImJ0cmwgJTEsJTAiIDogIj1tIigqc2V0KSA6ICJJciIo X3NpZyAtIDEpIDogImNjIik7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludCBfX2NvbnN0X3NpZ2lz bWVtYmVyKHNpZ3NldF90ICpzZXQsIGludCBfc2lnKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBz aWcgPSBfc2lnIC0gMTsKICAgICAgICByZXR1cm4gMSAmIChzZXQtPnNpZ1tzaWcgLyAzMl0gPj4g KHNpZyAlIDMyKSk7Cn0KCnN0YXRpYyBfX2lubGluZV9fIGludCBfX2dlbl9zaWdpc21lbWJlcihz aWdzZXRfdCAqc2V0LCBpbnQgX3NpZykKewogICAgICAgIGludCByZXQ7CiAgICAgICAgX19hc21f XygiYnRsICUyLCUxXG5cdHNiYmwgJTAsJTAiCiAgICAgICAgICAgICAgICA6ICI9ciIocmV0KSA6 ICJtIigqc2V0KSwgIklyIihfc2lnLTEpIDogImNjIik7CiAgICAgICAgcmV0dXJuIHJldDsKfQoj IDIxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NpZ25hbC5oIgpzdGF0aWMg X19pbmxpbmVfXyBpbnQgc2lnZmluZGlud29yZCh1bnNpZ25lZCBsb25nIHdvcmQpCnsKICAgICAg ICBfX2FzbV9fKCJic2ZsICUxLCUwIiA6ICI9ciIod29yZCkgOiAicm0iKHdvcmQpIDogImNjIik7 CiAgICAgICAgcmV0dXJuIHdvcmQ7Cn0KIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9zaWduYWwuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2Fz bS9zaWdpbmZvLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC90eXBlcy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NpZ2lu Zm8uaCIgMgoKCgp0eXBlZGVmIHVuaW9uIHNpZ3ZhbCB7CiAgICAgICAgaW50IHNpdmFsX2ludDsK ICAgICAgICB2b2lkICpzaXZhbF9wdHI7Cn0gc2lndmFsX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdCBz aWdpbmZvIHsKICAgICAgICBpbnQgc2lfc2lnbm87CiAgICAgICAgaW50IHNpX2Vycm5vOwogICAg ICAgIGludCBzaV9jb2RlOwoKICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICBpbnQgX3Bh ZFsoKDEyOC9zaXplb2YoaW50KSkgLSAzKV07CgoKICAgICAgICAgICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICAgICAgICAgIHBpZF90IF9waWQ7CiAgICAgICAgICAgICAgICAgICAgICAg IHVpZF90IF91aWQ7CiAgICAgICAgICAgICAgICB9IF9raWxsOwoKCiAgICAgICAgICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX3RpbWVyMTsKICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF90aW1lcjI7CiAgICAgICAgICAgICAg ICB9IF90aW1lcjsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg ICAgICAgcGlkX3QgX3BpZDsKICAgICAgICAgICAgICAgICAgICAgICAgdWlkX3QgX3VpZDsKICAg ICAgICAgICAgICAgICAgICAgICAgc2lndmFsX3QgX3NpZ3ZhbDsKICAgICAgICAgICAgICAgIH0g X3J0OwoKCiAgICAgICAgICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgICAgICAgICBw aWRfdCBfcGlkOwogICAgICAgICAgICAgICAgICAgICAgICB1aWRfdCBfdWlkOwogICAgICAgICAg ICAgICAgICAgICAgICBpbnQgX3N0YXR1czsKICAgICAgICAgICAgICAgICAgICAgICAgY2xvY2tf dCBfdXRpbWU7CiAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NrX3QgX3N0aW1lOwogICAgICAg ICAgICAgICAgfSBfc2lnY2hsZDsKCgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAg ICAgICAgICAgICAgICAgdm9pZCAqX2FkZHI7CiAgICAgICAgICAgICAgICB9IF9zaWdmYXVsdDsK CgogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9i YW5kOwogICAgICAgICAgICAgICAgICAgICAgICBpbnQgX2ZkOwogICAgICAgICAgICAgICAgfSBf c2lncG9sbDsKICAgICAgICB9IF9zaWZpZWxkczsKfSBzaWdpbmZvX3Q7CiMgMTk5ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc2lnaW5mby5oIgp0eXBlZGVmIHN0cnVjdCBzaWdl dmVudCB7CiAgICAgICAgc2lndmFsX3Qgc2lnZXZfdmFsdWU7CiAgICAgICAgaW50IHNpZ2V2X3Np Z25vOwogICAgICAgIGludCBzaWdldl9ub3RpZnk7CiAgICAgICAgdW5pb24gewogICAgICAgICAg ICAgICAgaW50IF9wYWRbKCg2NC9zaXplb2YoaW50KSkgLSAzKV07CgogICAgICAgICAgICAgICAg c3RydWN0IHsKICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9mdW5jdGlvbikoc2lndmFs X3QpOwogICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfYXR0cmlidXRlOwogICAgICAgICAg ICAgICAgfSBfc2lnZXZfdGhyZWFkOwogICAgICAgIH0gX3NpZ2V2X3VuOwp9IHNpZ2V2ZW50X3Q7 CgoKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIg MQojIDIxOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NpZ2luZm8uaCIgMgoK c3RhdGljIGlubGluZSB2b2lkIGNvcHlfc2lnaW5mbyhzaWdpbmZvX3QgKnRvLCBzaWdpbmZvX3Qg KmZyb20pCnsKICAgICAgICBpZiAoZnJvbS0+c2lfY29kZSA8IDApCiAgICAgICAgICAgICAgICAo X19idWlsdGluX2NvbnN0YW50X3Aoc2l6ZW9mKHNpZ2luZm9fdCkpID8gX19jb25zdGFudF9tZW1j cHkzZCgodG8pLChmcm9tKSwoc2l6ZW9mKHNpZ2luZm9fdCkpKSA6IF9fbWVtY3B5M2QoKHRvKSwo ZnJvbSksKHNpemVvZihzaWdpbmZvX3QpKSkpOwogICAgICAgIGVsc2UKCiAgICAgICAgICAgICAg ICAoX19idWlsdGluX2NvbnN0YW50X3AoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lm aWVsZHMuX3NpZ2NobGQpKSA/IF9fY29uc3RhbnRfbWVtY3B5M2QoKHRvKSwoZnJvbSksKDMqc2l6 ZW9mKGludCkgKyBzaXplb2YoZnJvbS0+X3NpZmllbGRzLl9zaWdjaGxkKSkpIDogX19tZW1jcHkz ZCgodG8pLChmcm9tKSwoMypzaXplb2YoaW50KSArIHNpemVvZihmcm9tLT5fc2lmaWVsZHMuX3Np Z2NobGQpKSkpOwp9CgpleHRlcm4gaW50IGNvcHlfc2lnaW5mb190b191c2VyKHNpZ2luZm9fdCAq dG8sIHNpZ2luZm9fdCAqZnJvbSk7CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvc2lnbmFsLmgiIDIKCgoKCgoKc3RydWN0IHNpZ3F1ZXVlIHsKICAgICAgICBzdHJ1Y3Qg c2lncXVldWUgKm5leHQ7CiAgICAgICAgc2lnaW5mb190IGluZm87Cn07CgpzdHJ1Y3Qgc2lncGVu ZGluZyB7CiAgICAgICAgc3RydWN0IHNpZ3F1ZXVlICpoZWFkLCAqKnRhaWw7CiAgICAgICAgc2ln c2V0X3Qgc2lnbmFsOwp9OwojIDY4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9zaWduYWwuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zdHJp bmcuaCIgMQojIDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zaWduYWwu aCIgMgojIDEwOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2lnbmFsLmgi CnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdvcnNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3NldF90 ICphLCBjb25zdCBzaWdzZXRfdCAqYikgeyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEzLCBi MCwgYjEsIGIyLCBiMzsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIp LzQ7ICsraSkgeyBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIgPSBh LT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsgYjEg PSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSszXTsg ci0+c2lnWzQqaSswXSA9ICgoYTApIHwgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChi MSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgfCAoYjIpKTsgci0+c2lnWzQqaSszXSA9ICgoYTMp IHwgKGIzKSk7IH0gc3dpdGNoICgoNjQgLyAzMikgJSA0KSB7IGNhc2UgMzogYTAgPSBhLT5zaWdb NCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0gYS0+c2lnWzQqaSsyXTsgYjAgPSBiLT5z aWdbNCppKzBdOyBiMSA9IGItPnNpZ1s0KmkrMV07IGIyID0gYi0+c2lnWzQqaSsyXTsgci0+c2ln WzQqaSswXSA9ICgoYTApIHwgKGIwKSk7IHItPnNpZ1s0KmkrMV0gPSAoKGExKSB8IChiMSkpOyBy LT5zaWdbNCppKzJdID0gKChhMikgfCAoYjIpKTsgYnJlYWs7IGNhc2UgMjogYTAgPSBhLT5zaWdb NCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGIwID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5z aWdbNCppKzFdOyByLT5zaWdbNCppKzBdID0gKChhMCkgfCAoYjApKTsgci0+c2lnWzQqaSsxXSA9 ICgoYTEpIHwgKGIxKSk7IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+c2lnWzQqaSswXTsgYjAgPSBi LT5zaWdbNCppKzBdOyByLT5zaWdbNCppKzBdID0gKChhMCkgfCAoYjApKTsgYnJlYWs7IH0gfQoK CnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdhbmRzZXRzKHNpZ3NldF90ICpyLCBjb25zdCBzaWdzZXRf dCAqYSwgY29uc3Qgc2lnc2V0X3QgKmIpIHsgdW5zaWduZWQgbG9uZyBhMCwgYTEsIGEyLCBhMywg YjAsIGIxLCBiMiwgYjM7IHVuc2lnbmVkIGxvbmcgaTsgZm9yIChpID0gMDsgaSA8ICg2NCAvIDMy KS80OyArK2kpIHsgYTAgPSBhLT5zaWdbNCppKzBdOyBhMSA9IGEtPnNpZ1s0KmkrMV07IGEyID0g YS0+c2lnWzQqaSsyXTsgYTMgPSBhLT5zaWdbNCppKzNdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIx ID0gYi0+c2lnWzQqaSsxXTsgYjIgPSBiLT5zaWdbNCppKzJdOyBiMyA9IGItPnNpZ1s0KmkrM107 IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIChiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAo YjEpKTsgci0+c2lnWzQqaSsyXSA9ICgoYTIpICYgKGIyKSk7IHItPnNpZ1s0KmkrM10gPSAoKGEz KSAmIChiMykpOyB9IHN3aXRjaCAoKDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IGEwID0gYS0+c2ln WzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIwID0gYi0+ c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IHItPnNp Z1s0KmkrMF0gPSAoKGEwKSAmIChiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkgJiAoYjEpKTsg ci0+c2lnWzQqaSsyXSA9ICgoYTIpICYgKGIyKSk7IGJyZWFrOyBjYXNlIDI6IGEwID0gYS0+c2ln WzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBiMCA9IGItPnNpZ1s0KmkrMF07IGIxID0gYi0+ c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgKGIwKSk7IHItPnNpZ1s0KmkrMV0g PSAoKGExKSAmIChiMSkpOyBicmVhazsgY2FzZSAxOiBhMCA9IGEtPnNpZ1s0KmkrMF07IGIwID0g Yi0+c2lnWzQqaSswXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgKGIwKSk7IGJyZWFrOyB9IH0K CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbmFuZHNldHMoc2lnc2V0X3QgKnIsIGNvbnN0IHNpZ3Nl dF90ICphLCBjb25zdCBzaWdzZXRfdCAqYikgeyB1bnNpZ25lZCBsb25nIGEwLCBhMSwgYTIsIGEz LCBiMCwgYjEsIGIyLCBiMzsgdW5zaWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8g MzIpLzQ7ICsraSkgeyBhMCA9IGEtPnNpZ1s0KmkrMF07IGExID0gYS0+c2lnWzQqaSsxXTsgYTIg PSBhLT5zaWdbNCppKzJdOyBhMyA9IGEtPnNpZ1s0KmkrM107IGIwID0gYi0+c2lnWzQqaSswXTsg YjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07IGIzID0gYi0+c2lnWzQqaSsz XTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgfihiMCkpOyByLT5zaWdbNCppKzFdID0gKChhMSkg JiB+KGIxKSk7IHItPnNpZ1s0KmkrMl0gPSAoKGEyKSAmIH4oYjIpKTsgci0+c2lnWzQqaSszXSA9 ICgoYTMpICYgfihiMykpOyB9IHN3aXRjaCAoKDY0IC8gMzIpICUgNCkgeyBjYXNlIDM6IGEwID0g YS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBhMiA9IGEtPnNpZ1s0KmkrMl07IGIw ID0gYi0+c2lnWzQqaSswXTsgYjEgPSBiLT5zaWdbNCppKzFdOyBiMiA9IGItPnNpZ1s0KmkrMl07 IHItPnNpZ1s0KmkrMF0gPSAoKGEwKSAmIH4oYjApKTsgci0+c2lnWzQqaSsxXSA9ICgoYTEpICYg fihiMSkpOyByLT5zaWdbNCppKzJdID0gKChhMikgJiB+KGIyKSk7IGJyZWFrOyBjYXNlIDI6IGEw ID0gYS0+c2lnWzQqaSswXTsgYTEgPSBhLT5zaWdbNCppKzFdOyBiMCA9IGItPnNpZ1s0KmkrMF07 IGIxID0gYi0+c2lnWzQqaSsxXTsgci0+c2lnWzQqaSswXSA9ICgoYTApICYgfihiMCkpOyByLT5z aWdbNCppKzFdID0gKChhMSkgJiB+KGIxKSk7IGJyZWFrOyBjYXNlIDE6IGEwID0gYS0+c2lnWzQq aSswXTsgYjAgPSBiLT5zaWdbNCppKzBdOyByLT5zaWdbNCppKzBdID0gKChhMCkgJiB+KGIwKSk7 IGJyZWFrOyB9IH0KIyAxNDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Np Z25hbC5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnbm90c2V0KHNpZ3NldF90ICpzZXQpIHsgdW5z aWduZWQgbG9uZyBpOyBmb3IgKGkgPSAwOyBpIDwgKDY0IC8gMzIpLzQ7ICsraSkgeyBzZXQtPnNp Z1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0pKTsgc2V0LT5zaWdbNCppKzFdID0gKH4oc2V0 LT5zaWdbNCppKzFdKSk7IHNldC0+c2lnWzQqaSsyXSA9ICh+KHNldC0+c2lnWzQqaSsyXSkpOyBz ZXQtPnNpZ1s0KmkrM10gPSAofihzZXQtPnNpZ1s0KmkrM10pKTsgfSBzd2l0Y2ggKCg2NCAvIDMy KSAlIDQpIHsgY2FzZSAzOiBzZXQtPnNpZ1s0KmkrMl0gPSAofihzZXQtPnNpZ1s0KmkrMl0pKTsg Y2FzZSAyOiBzZXQtPnNpZ1s0KmkrMV0gPSAofihzZXQtPnNpZ1s0KmkrMV0pKTsgY2FzZSAxOiBz ZXQtPnNpZ1s0KmkrMF0gPSAofihzZXQtPnNpZ1s0KmkrMF0pKTsgfSB9CgoKCgpzdGF0aWMgaW5s aW5lIHZvaWQgc2lnZW1wdHlzZXQoc2lnc2V0X3QgKnNldCkKewogICAgICAgIHN3aXRjaCAoKDY0 IC8gMzIpKSB7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29u c3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8g X19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5z aWduZWQgY2hhcikoMCkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkgOiBfX2NvbnN0YW50X2NfbWVt c2V0KCgoc2V0KSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKChzaXplb2Yo c2lnc2V0X3QpKSkpKSA6IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkp ID8gX19tZW1zZXRfZ2VuZXJpYygoKChzZXQpKSksKCgoMCkpKSwoKChzaXplb2Yoc2lnc2V0X3Qp KSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChzZXQpKSwoKDApKSwoKHNpemVvZihzaWdzZXRfdCkp KSkpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMjogc2V0LT5zaWdbMV0g PSAwOwogICAgICAgIGNhc2UgMTogc2V0LT5zaWdbMF0gPSAwOwogICAgICAgICAgICAgICAgYnJl YWs7CiAgICAgICAgfQp9CgpzdGF0aWMgaW5saW5lIHZvaWQgc2lnZmlsbHNldChzaWdzZXRfdCAq c2V0KQp7CiAgICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAg ICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25zdGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3Rh bnRfcCgoc2l6ZW9mKHNpZ3NldF90KSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQo KChzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoLTEpKSksKChzaXplb2Yoc2ln c2V0X3QpKSkpIDogX19jb25zdGFudF9jX21lbXNldCgoKHNldCkpLCgoMHgwMTAxMDEwMVVMKih1 bnNpZ25lZCBjaGFyKSgtMSkpKSwoKHNpemVvZihzaWdzZXRfdCkpKSkpIDogKF9fYnVpbHRpbl9j b25zdGFudF9wKChzaXplb2Yoc2lnc2V0X3QpKSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHNldCkp KSwoKCgtMSkpKSwoKChzaXplb2Yoc2lnc2V0X3QpKSkpKSA6IF9fbWVtc2V0X2dlbmVyaWMoKChz ZXQpKSwoKC0xKSksKChzaXplb2Yoc2lnc2V0X3QpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CiAgICAgICAgY2FzZSAxOiBzZXQt PnNpZ1swXSA9IC0xOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQp9CgpleHRlcm4g Y2hhciAqIHJlbmRlcl9zaWdzZXRfdChzaWdzZXRfdCAqc2V0LCBjaGFyICpidWZmZXIpOwoKCgpz dGF0aWMgaW5saW5lIHZvaWQgc2lnYWRkc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBs b25nIG1hc2spCnsKICAgICAgICBzZXQtPnNpZ1swXSB8PSBtYXNrOwp9CgpzdGF0aWMgaW5saW5l IHZvaWQgc2lnZGVsc2V0bWFzayhzaWdzZXRfdCAqc2V0LCB1bnNpZ25lZCBsb25nIG1hc2spCnsK ICAgICAgICBzZXQtPnNpZ1swXSAmPSB+bWFzazsKfQoKc3RhdGljIGlubGluZSBpbnQgc2lndGVz dHNldG1hc2soc2lnc2V0X3QgKnNldCwgdW5zaWduZWQgbG9uZyBtYXNrKQp7CiAgICAgICAgcmV0 dXJuIChzZXQtPnNpZ1swXSAmIG1hc2spICE9IDA7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBzaWdp bml0c2V0KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcgbWFzaykKewogICAgICAgIHNldC0+ c2lnWzBdID0gbWFzazsKICAgICAgICBzd2l0Y2ggKCg2NCAvIDMyKSkgewogICAgICAgIGRlZmF1 bHQ6CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGlu X2NvbnN0YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkgPyBfX2NvbnN0YW50X2Nf YW5kX2NvdW50X21lbXNldCgoKCZzZXQtPnNpZ1sxXSkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25l ZCBjaGFyKSgwKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkgOiBfX2NvbnN0YW50 X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIp KDApKSksKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0xKSkpKSkgOiAoX19idWlsdGluX2NvbnN0 YW50X3AoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkgPyBfX21lbXNldF9nZW5lcmljKCgo KCZzZXQtPnNpZ1sxXSkpKSwoKCgwKSkpLCgoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkp KSA6IF9fbWVtc2V0X2dlbmVyaWMoKCgmc2V0LT5zaWdbMV0pKSwoKDApKSwoKHNpemVvZihsb25n KSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICBjYXNl IDI6IHNldC0+c2lnWzFdID0gMDsKICAgICAgICBjYXNlIDE6IDsKICAgICAgICB9Cn0KCnN0YXRp YyBpbmxpbmUgdm9pZCBzaWdpbml0c2V0aW52KHNpZ3NldF90ICpzZXQsIHVuc2lnbmVkIGxvbmcg bWFzaykKewogICAgICAgIHNldC0+c2lnWzBdID0gfm1hc2s7CiAgICAgICAgc3dpdGNoICgoNjQg LyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgICAgKF9fYnVpbHRpbl9jb25z dGFudF9wKC0xKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAz MiktMSkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSks KCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQg LyAzMiktMSkpKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgoJnNldC0+c2lnWzFdKSksKCgweDAx MDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKC0xKSkpLCgoc2l6ZW9mKGxvbmcpKigoNjQgLyAzMikt MSkpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplb2YobG9uZykqKCg2NCAvIDMyKS0x KSkpID8gX19tZW1zZXRfZ2VuZXJpYygoKCgmc2V0LT5zaWdbMV0pKSksKCgoLTEpKSksKCgoc2l6 ZW9mKGxvbmcpKigoNjQgLyAzMiktMSkpKSkpIDogX19tZW1zZXRfZ2VuZXJpYygoKCZzZXQtPnNp Z1sxXSkpLCgoLTEpKSwoKHNpemVvZihsb25nKSooKDY0IC8gMzIpLTEpKSkpKSk7CiAgICAgICAg ICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6IHNldC0+c2lnWzFdID0gLTE7CiAgICAgICAg Y2FzZSAxOiA7CiAgICAgICAgfQp9CgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NpZ3BlbmRp bmcoc3RydWN0IHNpZ3BlbmRpbmcgKnNpZykKewogICAgICAgIHNpZ2VtcHR5c2V0KCZzaWctPnNp Z25hbCk7CiAgICAgICAgc2lnLT5oZWFkID0gKCh2b2lkICopMCk7CiAgICAgICAgc2lnLT50YWls ID0gJnNpZy0+aGVhZDsKfQoKZXh0ZXJuIGxvbmcgZG9fc2lncGVuZGluZyh2b2lkICosIHVuc2ln bmVkIGxvbmcpOwojIDI3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hl ZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2VjdXJlYml0 cy5oIiAxCgoKCgoKZXh0ZXJuIHVuc2lnbmVkIHNlY3VyZWJpdHM7CiMgMjggIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9mc19zdHJ1Y3QuaCIgMQoKCgoKc3RydWN0IGZzX3N0cnVjdCB7 CiAgICAgICAgYXRvbWljX3QgY291bnQ7CiAgICAgICAgcndsb2NrX3QgbG9jazsKICAgICAgICBp bnQgdW1hc2s7CiAgICAgICAgc3RydWN0IGRlbnRyeSAqIHJvb3QsICogcHdkLCAqIGFsdHJvb3Q7 CiAgICAgICAgc3RydWN0IHZmc21vdW50ICogcm9vdG1udCwgKiBwd2RtbnQsICogYWx0cm9vdG1u dDsKfTsKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZnNfc3RydWN0 LmgiCmV4dGVybiB2b2lkIGV4aXRfZnMoc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gdm9p ZCBzZXRfZnNfYWx0cm9vdCh2b2lkKTsKCgoKCgoKc3RhdGljIGlubGluZSB2b2lkIHNldF9mc19y b290KHN0cnVjdCBmc19zdHJ1Y3QgKmZzLAogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqbW50LAog ICAgICAgIHN0cnVjdCBkZW50cnkgKmRlbnRyeSkKewogICAgICAgIHN0cnVjdCBkZW50cnkgKm9s ZF9yb290OwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqb2xkX3Jvb3RtbnQ7CiAgICAgICAgKHZv aWQpKCZmcy0+bG9jayk7CiAgICAgICAgb2xkX3Jvb3QgPSBmcy0+cm9vdDsKICAgICAgICBvbGRf cm9vdG1udCA9IGZzLT5yb290bW50OwogICAgICAgIGZzLT5yb290bW50ID0gbW50Z2V0KG1udCk7 CiAgICAgICAgZnMtPnJvb3QgPSBkZ2V0KGRlbnRyeSk7CiAgICAgICAgZG8geyB9IHdoaWxlKDAp OwogICAgICAgIGlmIChvbGRfcm9vdCkgewogICAgICAgICAgICAgICAgZHB1dChvbGRfcm9vdCk7 CiAgICAgICAgICAgICAgICBtbnRwdXQob2xkX3Jvb3RtbnQpOwogICAgICAgIH0KfQoKCgoKCgpz dGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZzX3B3ZChzdHJ1Y3QgZnNfc3RydWN0ICpmcywKICAgICAg ICBzdHJ1Y3QgdmZzbW91bnQgKm1udCwKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpkZW50cnkpCnsK ICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpvbGRfcHdkOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAq b2xkX3B3ZG1udDsKICAgICAgICAodm9pZCkoJmZzLT5sb2NrKTsKICAgICAgICBvbGRfcHdkID0g ZnMtPnB3ZDsKICAgICAgICBvbGRfcHdkbW50ID0gZnMtPnB3ZG1udDsKICAgICAgICBmcy0+cHdk bW50ID0gbW50Z2V0KG1udCk7CiAgICAgICAgZnMtPnB3ZCA9IGRnZXQoZGVudHJ5KTsKICAgICAg ICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgaWYgKG9sZF9wd2QpIHsKICAgICAgICAgICAgICAg IGRwdXQob2xkX3B3ZCk7CiAgICAgICAgICAgICAgICBtbnRwdXQob2xkX3B3ZG1udCk7CiAgICAg ICAgfQp9CgpzdHJ1Y3QgZnNfc3RydWN0ICpjb3B5X2ZzX3N0cnVjdChzdHJ1Y3QgZnNfc3RydWN0 ICpvbGQpOwp2b2lkIHB1dF9mc19zdHJ1Y3Qoc3RydWN0IGZzX3N0cnVjdCAqZnMpOwojIDI5ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAyCgpzdHJ1Y3QgZXhl Y19kb21haW47CiMgNTggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVk LmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIGF2ZW5ydW5bXTsKIyA3NSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKZXh0ZXJuIGludCBucl9ydW5uaW5nLCBucl90 aHJlYWRzOwpleHRlcm4gaW50IGxhc3RfcGlkOwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9mcy5oIiAxCiMgNzkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3NjaGVkLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC90aW1lLmgiIDEKIyA4MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2No ZWQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BhcmFtLmgi IDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFyYW0uaCIgMQoj IDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BhcmFtLmgiIDIKIyA4MSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgojIDEgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1lLmgiIDEKIyA1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9yZXNvdXJjZS5oIiAyCiMgMjEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiCnN0cnVjdCBydXNhZ2UgewogICAg ICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3V0aW1lOwogICAgICAgIHN0cnVjdCB0aW1ldmFsIHJ1X3N0 aW1lOwogICAgICAgIGxvbmcgcnVfbWF4cnNzOwogICAgICAgIGxvbmcgcnVfaXhyc3M7CiAgICAg ICAgbG9uZyBydV9pZHJzczsKICAgICAgICBsb25nIHJ1X2lzcnNzOwogICAgICAgIGxvbmcgcnVf bWluZmx0OwogICAgICAgIGxvbmcgcnVfbWFqZmx0OwogICAgICAgIGxvbmcgcnVfbnN3YXA7CiAg ICAgICAgbG9uZyBydV9pbmJsb2NrOwogICAgICAgIGxvbmcgcnVfb3VibG9jazsKICAgICAgICBs b25nIHJ1X21zZ3NuZDsKICAgICAgICBsb25nIHJ1X21zZ3JjdjsKICAgICAgICBsb25nIHJ1X25z aWduYWxzOwogICAgICAgIGxvbmcgcnVfbnZjc3c7CiAgICAgICAgbG9uZyBydV9uaXZjc3c7Cn07 CgpzdHJ1Y3QgcmxpbWl0IHsKICAgICAgICB1bnNpZ25lZCBsb25nIHJsaW1fY3VyOwogICAgICAg IHVuc2lnbmVkIGxvbmcgcmxpbV9tYXg7Cn07CiMgNTYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L3Jlc291cmNlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL3Jlc291cmNlLmgiIDEKIyA1NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvcmVzb3VyY2UuaCIgMgojIDgyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9zY2hlZC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv dGltZXIuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZXIu aCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2xpc3QuaCIgMQoj IDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RpbWVyLmgiIDIKIyAxNiAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdGltZXIuaCIKc3RydWN0IHRpbWVy X2xpc3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICB1bnNpZ25lZCBs b25nIGV4cGlyZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBkYXRhOwogICAgICAgIHZvaWQgKCpm dW5jdGlvbikodW5zaWduZWQgbG9uZyk7Cn07CgpleHRlcm4gdm9pZCBhZGRfdGltZXIoc3RydWN0 IHRpbWVyX2xpc3QgKiB0aW1lcik7CmV4dGVybiBpbnQgZGVsX3RpbWVyKHN0cnVjdCB0aW1lcl9s aXN0ICogdGltZXIpOwojIDQxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90 aW1lci5oIgppbnQgbW9kX3RpbWVyKHN0cnVjdCB0aW1lcl9saXN0ICp0aW1lciwgdW5zaWduZWQg bG9uZyBleHBpcmVzKTsKCmV4dGVybiB2b2lkIGl0X3JlYWxfZm4odW5zaWduZWQgbG9uZyk7Cgpz dGF0aWMgaW5saW5lIHZvaWQgaW5pdF90aW1lcihzdHJ1Y3QgdGltZXJfbGlzdCAqIHRpbWVyKQp7 CiAgICAgICAgdGltZXItPmxpc3QubmV4dCA9IHRpbWVyLT5saXN0LnByZXYgPSAoKHZvaWQgKikw KTsKfQoKc3RhdGljIGlubGluZSBpbnQgdGltZXJfcGVuZGluZyAoY29uc3Qgc3RydWN0IHRpbWVy X2xpc3QgKiB0aW1lcikKewogICAgICAgIHJldHVybiB0aW1lci0+bGlzdC5uZXh0ICE9ICgodm9p ZCAqKTApOwp9CiMgODMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVk LmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Byb2Nlc3Nvci5o IiAxCiMgODUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiIDIK IyAxMjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0cnVj dCBzY2hlZF9wYXJhbSB7CiAgICAgICAgaW50IHNjaGVkX3ByaW9yaXR5Owp9OwoKc3RydWN0IGNv bXBsZXRpb247CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3Bp bmxvY2suaCIgMQojIDEzNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2No ZWQuaCIgMgoKCgoKCgoKZXh0ZXJuIHJ3bG9ja190IHRhc2tsaXN0X2xvY2s7CmV4dGVybiBzcGlu bG9ja190IHJ1bnF1ZXVlX2xvY2s7CmV4dGVybiBzcGlubG9ja190IG1tbGlzdF9sb2NrOwoKZXh0 ZXJuIHZvaWQgc2NoZWRfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgaW5pdF9pZGxlKHZvaWQpOwpl eHRlcm4gdm9pZCBzaG93X3N0YXRlKHZvaWQpOwpleHRlcm4gdm9pZCBjcHVfaW5pdCAodm9pZCk7 CmV4dGVybiB2b2lkIHRyYXBfaW5pdCh2b2lkKTsKZXh0ZXJuIHZvaWQgdXBkYXRlX3Byb2Nlc3Nf dGltZXMoaW50IHVzZXIpOwpleHRlcm4gdm9pZCB1cGRhdGVfb25lX3Byb2Nlc3Moc3RydWN0IHRh c2tfc3RydWN0ICpwLCB1bnNpZ25lZCBsb25nIHVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIHN5c3RlbSwgaW50IGNwdSk7CgoKZXh0ZXJuIHNpZ25lZCBs b25nIHNjaGVkdWxlX3RpbWVvdXQoc2lnbmVkIGxvbmcgdGltZW91dCkgX19hdHRyaWJ1dGVfXygo cmVncGFybSgzKSkpOwogX19hdHRyaWJ1dGVfXygocmVncGFybSgwKSkpIHZvaWQgc2NoZWR1bGUo dm9pZCk7CgpleHRlcm4gaW50IHNjaGVkdWxlX3Rhc2soc3RydWN0IHRxX3N0cnVjdCAqdGFzayk7 CmV4dGVybiB2b2lkIGZsdXNoX3NjaGVkdWxlZF90YXNrcyh2b2lkKTsKZXh0ZXJuIGludCBzdGFy dF9jb250ZXh0X3RocmVhZCh2b2lkKTsKZXh0ZXJuIGludCBjdXJyZW50X2lzX2tldmVudGQodm9p ZCk7CiMgMTcyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpz dHJ1Y3QgZmlsZXNfc3RydWN0IHsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAgICAgICByd2xv Y2tfdCBmaWxlX2xvY2s7CiAgICAgICAgaW50IG1heF9mZHM7CiAgICAgICAgaW50IG1heF9mZHNl dDsKICAgICAgICBpbnQgbmV4dF9mZDsKICAgICAgICBzdHJ1Y3QgZmlsZSAqKiBmZDsKICAgICAg ICBmZF9zZXQgKmNsb3NlX29uX2V4ZWM7CiAgICAgICAgZmRfc2V0ICpvcGVuX2ZkczsKICAgICAg ICBmZF9zZXQgY2xvc2Vfb25fZXhlY19pbml0OwogICAgICAgIGZkX3NldCBvcGVuX2Zkc19pbml0 OwogICAgICAgIHN0cnVjdCBmaWxlICogZmRfYXJyYXlbMzJdOwp9OwojIDIwNCAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IG1tX3N0cnVjdCB7CiAg ICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcDsKICAgICAgICByYl9yb290X3QgbW1f cmI7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICogbW1hcF9jYWNoZTsKICAgICAgICBw Z2RfdCAqIHBnZDsKICAgICAgICBhdG9taWNfdCBtbV91c2VyczsKICAgICAgICBhdG9taWNfdCBt bV9jb3VudDsKICAgICAgICBpbnQgbWFwX2NvdW50OwogICAgICAgIHN0cnVjdCByd19zZW1hcGhv cmUgbW1hcF9zZW07CiAgICAgICAgc3BpbmxvY2tfdCBwYWdlX3RhYmxlX2xvY2s7CgogICAgICAg IHN0cnVjdCBsaXN0X2hlYWQgbW1saXN0OwoKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0 X2NvZGUsIGVuZF9jb2RlLCBzdGFydF9kYXRhLCBlbmRfZGF0YTsKICAgICAgICB1bnNpZ25lZCBs b25nIHN0YXJ0X2JyaywgYnJrLCBzdGFydF9zdGFjazsKICAgICAgICB1bnNpZ25lZCBsb25nIGFy Z19zdGFydCwgYXJnX2VuZCwgZW52X3N0YXJ0LCBlbnZfZW5kOwogICAgICAgIHVuc2lnbmVkIGxv bmcgcnNzLCB0b3RhbF92bSwgbG9ja2VkX3ZtOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZGVmX2Zs YWdzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3B1X3ZtX21hc2s7CiAgICAgICAgdW5zaWduZWQg bG9uZyBzd2FwX2FkZHJlc3M7CgogICAgICAgIHVuc2lnbmVkIGR1bXBhYmxlOjE7CgoKICAgICAg ICBtbV9jb250ZXh0X3QgY29udGV4dDsKfTsKCmV4dGVybiBpbnQgbW1saXN0X25yOwojIDI0NyAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIKc3RydWN0IHNpZ25h bF9zdHJ1Y3QgewogICAgICAgIGF0b21pY190IGNvdW50OwogICAgICAgIHN0cnVjdCBrX3NpZ2Fj dGlvbiBhY3Rpb25bNjRdOwogICAgICAgIHNwaW5sb2NrX3Qgc2lnbG9jazsKfTsKIyAyNjMgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0cnVjdCB1c2VyX3N0 cnVjdCB7CiAgICAgICAgYXRvbWljX3QgX19jb3VudDsKICAgICAgICBhdG9taWNfdCBwcm9jZXNz ZXM7CiAgICAgICAgYXRvbWljX3QgZmlsZXM7CgoKICAgICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3Qg Km5leHQsICoqcHByZXY7CiAgICAgICAgdWlkX3QgdWlkOwp9OwoKCgoKCgpleHRlcm4gc3RydWN0 IHVzZXJfc3RydWN0IHJvb3RfdXNlcjsKCgpzdHJ1Y3QgdGFza19zdHJ1Y3QgewoKCgogICAgICAg IHZvbGF0aWxlIGxvbmcgc3RhdGU7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAg ICBpbnQgc2lncGVuZGluZzsKICAgICAgICBtbV9zZWdtZW50X3QgYWRkcl9saW1pdDsKCgoKICAg ICAgICBzdHJ1Y3QgZXhlY19kb21haW4gKmV4ZWNfZG9tYWluOwogICAgICAgIHZvbGF0aWxlIGxv bmcgbmVlZF9yZXNjaGVkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcHRyYWNlOwoKICAgICAgICBp bnQgbG9ja19kZXB0aDsKCgoKCgoKICAgICAgICBsb25nIGNvdW50ZXI7CiAgICAgICAgbG9uZyBu aWNlOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcG9saWN5OwogICAgICAgIHN0cnVjdCBtbV9zdHJ1 Y3QgKm1tOwogICAgICAgIGludCBoYXNfY3B1LCBwcm9jZXNzb3I7CiAgICAgICAgdW5zaWduZWQg bG9uZyBjcHVzX2FsbG93ZWQ7CgoKCgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgcnVuX2xpc3Q7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzbGVlcF90aW1lOwoKICAgICAgICBzdHJ1Y3QgdGFza19z dHJ1Y3QgKm5leHRfdGFzaywgKnByZXZfdGFzazsKICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICph Y3RpdmVfbW07CiAgICAgICAgc3RydWN0IGxpc3RfaGVhZCBsb2NhbF9wYWdlczsKICAgICAgICB1 bnNpZ25lZCBpbnQgYWxsb2NhdGlvbl9vcmRlciwgbnJfbG9jYWxfcGFnZXM7CgoKICAgICAgICBz dHJ1Y3QgbGludXhfYmluZm10ICpiaW5mbXQ7CiAgICAgICAgaW50IGV4aXRfY29kZSwgZXhpdF9z aWduYWw7CiAgICAgICAgaW50IHBkZWF0aF9zaWduYWw7CgogICAgICAgIHVuc2lnbmVkIGxvbmcg cGVyc29uYWxpdHk7CiAgICAgICAgaW50IGRpZF9leGVjOjE7CiAgICAgICAgcGlkX3QgcGlkOwog ICAgICAgIHBpZF90IHBncnA7CiAgICAgICAgcGlkX3QgdHR5X29sZF9wZ3JwOwogICAgICAgIHBp ZF90IHNlc3Npb247CiAgICAgICAgcGlkX3QgdGdpZDsKCiAgICAgICAgaW50IGxlYWRlcjsKCgoK CgogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqcF9vcHB0ciwgKnBfcHB0ciwgKnBfY3B0ciwg KnBfeXNwdHIsICpwX29zcHRyOwogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgdGhyZWFkX2dyb3Vw OwoKCiAgICAgICAgc3RydWN0IHRhc2tfc3RydWN0ICpwaWRoYXNoX25leHQ7CiAgICAgICAgc3Ry dWN0IHRhc2tfc3RydWN0ICoqcGlkaGFzaF9wcHJldjsKCiAgICAgICAgd2FpdF9xdWV1ZV9oZWFk X3Qgd2FpdF9jaGxkZXhpdDsKICAgICAgICBzdHJ1Y3QgY29tcGxldGlvbiAqdmZvcmtfZG9uZTsK ICAgICAgICB1bnNpZ25lZCBsb25nIHJ0X3ByaW9yaXR5OwogICAgICAgIHVuc2lnbmVkIGxvbmcg aXRfcmVhbF92YWx1ZSwgaXRfcHJvZl92YWx1ZSwgaXRfdmlydF92YWx1ZTsKICAgICAgICB1bnNp Z25lZCBsb25nIGl0X3JlYWxfaW5jciwgaXRfcHJvZl9pbmNyLCBpdF92aXJ0X2luY3I7CiAgICAg ICAgc3RydWN0IHRpbWVyX2xpc3QgcmVhbF90aW1lcjsKICAgICAgICBzdHJ1Y3QgdG1zIHRpbWVz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnRfdGltZTsKICAgICAgICBsb25nIHBlcl9jcHVf dXRpbWVbMV0sIHBlcl9jcHVfc3RpbWVbMV07CgogICAgICAgIHVuc2lnbmVkIGxvbmcgbWluX2Zs dCwgbWFqX2ZsdCwgbnN3YXAsIGNtaW5fZmx0LCBjbWFqX2ZsdCwgY25zd2FwOwogICAgICAgIGlu dCBzd2FwcGFibGU6MTsKCiAgICAgICAgdWlkX3QgdWlkLGV1aWQsc3VpZCxmc3VpZDsKICAgICAg ICBnaWRfdCBnaWQsZWdpZCxzZ2lkLGZzZ2lkOwogICAgICAgIGludCBuZ3JvdXBzOwogICAgICAg IGdpZF90IGdyb3Vwc1szMl07CiAgICAgICAga2VybmVsX2NhcF90IGNhcF9lZmZlY3RpdmUsIGNh cF9pbmhlcml0YWJsZSwgY2FwX3Blcm1pdHRlZDsKICAgICAgICBpbnQga2VlcF9jYXBhYmlsaXRp ZXM6MTsKICAgICAgICBzdHJ1Y3QgdXNlcl9zdHJ1Y3QgKnVzZXI7CgogICAgICAgIHN0cnVjdCBy bGltaXQgcmxpbVsxMV07CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdXNlZF9tYXRoOwogICAgICAg IGNoYXIgY29tbVsxNl07CgogICAgICAgIGludCBsaW5rX2NvdW50OwogICAgICAgIHN0cnVjdCB0 dHlfc3RydWN0ICp0dHk7CiAgICAgICAgdW5zaWduZWQgaW50IGxvY2tzOwoKICAgICAgICBzdHJ1 Y3Qgc2VtX3VuZG8gKnNlbXVuZG87CiAgICAgICAgc3RydWN0IHNlbV9xdWV1ZSAqc2Vtc2xlZXBp bmc7CgogICAgICAgIHN0cnVjdCB0aHJlYWRfc3RydWN0IHRocmVhZDsKCiAgICAgICAgc3RydWN0 IGZzX3N0cnVjdCAqZnM7CgogICAgICAgIHN0cnVjdCBmaWxlc19zdHJ1Y3QgKmZpbGVzOwoKICAg ICAgICBzcGlubG9ja190IHNpZ21hc2tfbG9jazsKICAgICAgICBzdHJ1Y3Qgc2lnbmFsX3N0cnVj dCAqc2lnOwoKICAgICAgICBzaWdzZXRfdCBibG9ja2VkOwogICAgICAgIHN0cnVjdCBzaWdwZW5k aW5nIHBlbmRpbmc7CgogICAgICAgIHVuc2lnbmVkIGxvbmcgc2FzX3NzX3NwOwogICAgICAgIHNp emVfdCBzYXNfc3Nfc2l6ZTsKICAgICAgICBpbnQgKCpub3RpZmllcikodm9pZCAqcHJpdik7CiAg ICAgICAgdm9pZCAqbm90aWZpZXJfZGF0YTsKICAgICAgICBzaWdzZXRfdCAqbm90aWZpZXJfbWFz azsKCgogICAgICAgIHUzMiBwYXJlbnRfZXhlY19pZDsKICAgICAgICB1MzIgc2VsZl9leGVjX2lk OwoKICAgICAgICBzcGlubG9ja190IGFsbG9jX2xvY2s7Cn07CiMgNDQ0ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIgpleHRlcm4gc3RydWN0IGV4ZWNfZG9tYWlu IGRlZmF1bHRfZXhlY19kb21haW47CiMgNDk2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9zY2hlZC5oIgp1bmlvbiB0YXNrX3VuaW9uIHsKICAgICAgICBzdHJ1Y3QgdGFza19z dHJ1Y3QgdGFzazsKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YWNrWzIwNDgqc2l6ZW9mKGxvbmcp L3NpemVvZihsb25nKV07Cn07CgpleHRlcm4gdW5pb24gdGFza191bmlvbiBpbml0X3Rhc2tfdW5p b247CgpleHRlcm4gc3RydWN0IG1tX3N0cnVjdCBpbml0X21tOwpleHRlcm4gc3RydWN0IHRhc2tf c3RydWN0ICppbml0X3Rhc2tzWzFdOwoKCgpleHRlcm4gc3RydWN0IHRhc2tfc3RydWN0ICpwaWRo YXNoWyg0MDk2ID4+IDIpXTsKCgoKc3RhdGljIGlubGluZSB2b2lkIGhhc2hfcGlkKHN0cnVjdCB0 YXNrX3N0cnVjdCAqcCkKewogICAgICAgIHN0cnVjdCB0YXNrX3N0cnVjdCAqKmh0YWJsZSA9ICZw aWRoYXNoWygoKChwLT5waWQpID4+IDgpIF4gKHAtPnBpZCkpICYgKCg0MDk2ID4+IDIpIC0gMSkp XTsKCiAgICAgICAgaWYoKHAtPnBpZGhhc2hfbmV4dCA9ICpodGFibGUpICE9ICgodm9pZCAqKTAp KQogICAgICAgICAgICAgICAgKCpodGFibGUpLT5waWRoYXNoX3BwcmV2ID0gJnAtPnBpZGhhc2hf bmV4dDsKICAgICAgICAqaHRhYmxlID0gcDsKICAgICAgICBwLT5waWRoYXNoX3BwcmV2ID0gaHRh YmxlOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdW5oYXNoX3BpZChzdHJ1Y3QgdGFza19zdHJ1Y3Qg KnApCnsKICAgICAgICBpZihwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICBwLT5waWRo YXNoX25leHQtPnBpZGhhc2hfcHByZXYgPSBwLT5waWRoYXNoX3BwcmV2OwogICAgICAgICpwLT5w aWRoYXNoX3BwcmV2ID0gcC0+cGlkaGFzaF9uZXh0Owp9CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0 YXNrX3N0cnVjdCAqZmluZF90YXNrX2J5X3BpZChpbnQgcGlkKQp7CiAgICAgICAgc3RydWN0IHRh c2tfc3RydWN0ICpwLCAqKmh0YWJsZSA9ICZwaWRoYXNoWygoKChwaWQpID4+IDgpIF4gKHBpZCkp ICYgKCg0MDk2ID4+IDIpIC0gMSkpXTsKCiAgICAgICAgZm9yKHAgPSAqaHRhYmxlOyBwICYmIHAt PnBpZCAhPSBwaWQ7IHAgPSBwLT5waWRoYXNoX25leHQpCiAgICAgICAgICAgICAgICA7CgogICAg ICAgIHJldHVybiBwOwp9CgoKZXh0ZXJuIHN0cnVjdCB1c2VyX3N0cnVjdCAqIGFsbG9jX3VpZCh1 aWRfdCk7CmV4dGVybiB2b2lkIGZyZWVfdWlkKHN0cnVjdCB1c2VyX3N0cnVjdCAqKTsKCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2N1cnJlbnQuaCIgMQoKCgpzdHJ1Y3Qg dGFza19zdHJ1Y3Q7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCB0YXNrX3N0cnVjdCAqIGdldF9jdXJy ZW50KHZvaWQpCnsKICAgICAgICBzdHJ1Y3QgdGFza19zdHJ1Y3QgKmN1cnJlbnQ7CiAgICAgICAg X19hc21fXygiYW5kbCAlJWVzcCwlMDsgIjoiPXIiIChjdXJyZW50KSA6ICIwIiAofjgxOTFVTCkp OwogICAgICAgIHJldHVybiBjdXJyZW50OwogfQojIDU0NCAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgdm9sYXRpbGUg amlmZmllczsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaXRpbWVyX3RpY2tzOwpleHRlcm4gdW5zaWdu ZWQgbG9uZyBpdGltZXJfbmV4dDsKZXh0ZXJuIHN0cnVjdCB0aW1ldmFsIHh0aW1lOwpleHRlcm4g dm9pZCBkb190aW1lcihzdHJ1Y3QgcHRfcmVncyAqKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgKiBw cm9mX2J1ZmZlcjsKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgcHJvZl9sZW47CmV4dGVybiB1bnNpZ25l ZCBsb25nIHByb2Zfc2hpZnQ7CgoKCmV4dGVybiB2b2lkIF9fd2FrZV91cCh3YWl0X3F1ZXVlX2hl YWRfdCAqcSwgdW5zaWduZWQgaW50IG1vZGUsIGludCBucikgX19hdHRyaWJ1dGVfXygocmVncGFy bSgzKSkpOwpleHRlcm4gdm9pZCBfX3dha2VfdXBfc3luYyh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwg dW5zaWduZWQgaW50IG1vZGUsIGludCBucikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwpl eHRlcm4gdm9pZCBzbGVlcF9vbih3YWl0X3F1ZXVlX2hlYWRfdCAqcSkgX19hdHRyaWJ1dGVfXygo cmVncGFybSgzKSkpOwpleHRlcm4gbG9uZyBzbGVlcF9vbl90aW1lb3V0KHdhaXRfcXVldWVfaGVh ZF90ICpxLCBzaWduZWQgbG9uZyB0aW1lb3V0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CgpleHRlcm4gdm9pZCBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uKHdhaXRfcXVldWVfaGVhZF90ICpx KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBsb25nIGludGVycnVwdGlibGVf c2xlZXBfb25fdGltZW91dCh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgc2lnbmVkIGxvbmcgdGltZW91 dCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKZXh0ZXJuIGludCB3YWtlX3VwX3Byb2Nl c3Moc3RydWN0IHRhc2tfc3RydWN0ICogdHNrKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7 CiMgNTc3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIgogX19h dHRyaWJ1dGVfXygocmVncGFybSgwKSkpIGxvbmcgc3lzX3dhaXQ0KHBpZF90IHBpZCx1bnNpZ25l ZCBpbnQgKiBzdGF0X2FkZHIsIGludCBvcHRpb25zLCBzdHJ1Y3QgcnVzYWdlICogcnUpOwoKZXh0 ZXJuIGludCBpbl9ncm91cF9wKGdpZF90KTsKZXh0ZXJuIGludCBpbl9lZ3JvdXBfcChnaWRfdCk7 CgpleHRlcm4gdm9pZCBwcm9jX2NhY2hlc19pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBmbHVzaF9z aWduYWxzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZmx1c2hfc2lnbmFsX2hh bmRsZXJzKHN0cnVjdCB0YXNrX3N0cnVjdCAqKTsKZXh0ZXJuIGludCBkZXF1ZXVlX3NpZ25hbChz aWdzZXRfdCAqLCBzaWdpbmZvX3QgKik7CmV4dGVybiB2b2lkIGJsb2NrX2FsbF9zaWduYWxzKGlu dCAoKm5vdGlmaWVyKSh2b2lkICpwcml2KSwgdm9pZCAqcHJpdiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc2lnc2V0X3QgKm1hc2spOwpleHRlcm4gdm9pZCB1bmJsb2NrX2FsbF9zaWdu YWxzKHZvaWQpOwpleHRlcm4gaW50IHNlbmRfc2lnX2luZm8oaW50LCBzdHJ1Y3Qgc2lnaW5mbyAq LCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQgZm9yY2Vfc2lnX2luZm8oaW50LCBz dHJ1Y3Qgc2lnaW5mbyAqLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CmV4dGVybiBpbnQga2lsbF9w Z19pbmZvKGludCwgc3RydWN0IHNpZ2luZm8gKiwgcGlkX3QpOwpleHRlcm4gaW50IGtpbGxfc2xf aW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKZXh0ZXJuIGludCBraWxsX3Byb2Nf aW5mbyhpbnQsIHN0cnVjdCBzaWdpbmZvICosIHBpZF90KTsKZXh0ZXJuIHZvaWQgbm90aWZ5X3Bh cmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKZXh0ZXJuIHZvaWQgZG9fbm90aWZ5X3Bh cmVudChzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwgaW50KTsKZXh0ZXJuIHZvaWQgZm9yY2Vfc2lnKGlu dCwgc3RydWN0IHRhc2tfc3RydWN0ICopOwpleHRlcm4gaW50IHNlbmRfc2lnKGludCwgc3RydWN0 IHRhc2tfc3RydWN0ICosIGludCk7CmV4dGVybiBpbnQga2lsbF9wZyhwaWRfdCwgaW50LCBpbnQp OwpleHRlcm4gaW50IGtpbGxfc2wocGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBraWxsX3By b2MocGlkX3QsIGludCwgaW50KTsKZXh0ZXJuIGludCBkb19zaWdhY3Rpb24oaW50LCBjb25zdCBz dHJ1Y3Qga19zaWdhY3Rpb24gKiwgc3RydWN0IGtfc2lnYWN0aW9uICopOwpleHRlcm4gaW50IGRv X3NpZ2FsdHN0YWNrKGNvbnN0IHN0YWNrX3QgKiwgc3RhY2tfdCAqLCB1bnNpZ25lZCBsb25nKTsK CnN0YXRpYyBpbmxpbmUgaW50IHNpZ25hbF9wZW5kaW5nKHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkK ewogICAgICAgIHJldHVybiAocC0+c2lncGVuZGluZyAhPSAwKTsKfQoKCgoKCnN0YXRpYyBpbmxp bmUgaW50IGhhc19wZW5kaW5nX3NpZ25hbHMoc2lnc2V0X3QgKnNpZ25hbCwgc2lnc2V0X3QgKmJs b2NrZWQpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIHJlYWR5OwogICAgICAgIGxvbmcgaTsKCiAg ICAgICAgc3dpdGNoICgoNjQgLyAzMikpIHsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAg ICAgZm9yIChpID0gKDY0IC8gMzIpLCByZWFkeSA9IDA7IC0taSA+PSAwIDspCiAgICAgICAgICAg ICAgICAgICAgICAgIHJlYWR5IHw9IHNpZ25hbC0+c2lnW2ldICZ+IGJsb2NrZWQtPnNpZ1tpXTsK ICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIDQ6IHJlYWR5ID0gc2lnbmFsLT5z aWdbM10gJn4gYmxvY2tlZC0+c2lnWzNdOwogICAgICAgICAgICAgICAgcmVhZHkgfD0gc2lnbmFs LT5zaWdbMl0gJn4gYmxvY2tlZC0+c2lnWzJdOwogICAgICAgICAgICAgICAgcmVhZHkgfD0gc2ln bmFsLT5zaWdbMV0gJn4gYmxvY2tlZC0+c2lnWzFdOwogICAgICAgICAgICAgICAgcmVhZHkgfD0g c2lnbmFsLT5zaWdbMF0gJn4gYmxvY2tlZC0+c2lnWzBdOwogICAgICAgICAgICAgICAgYnJlYWs7 CgogICAgICAgIGNhc2UgMjogcmVhZHkgPSBzaWduYWwtPnNpZ1sxXSAmfiBibG9ja2VkLT5zaWdb MV07CiAgICAgICAgICAgICAgICByZWFkeSB8PSBzaWduYWwtPnNpZ1swXSAmfiBibG9ja2VkLT5z aWdbMF07CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAxOiByZWFkeSA9IHNp Z25hbC0+c2lnWzBdICZ+IGJsb2NrZWQtPnNpZ1swXTsKICAgICAgICB9CiAgICAgICAgcmV0dXJu IHJlYWR5ICE9IDA7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcmVjYWxjX3NpZ3BlbmRpbmco c3RydWN0IHRhc2tfc3RydWN0ICp0KQp7CiAgICAgICAgdC0+c2lncGVuZGluZyA9IGhhc19wZW5k aW5nX3NpZ25hbHMoJnQtPnBlbmRpbmcuc2lnbmFsLCAmdC0+YmxvY2tlZCk7Cn0KCgoKc3RhdGlj IGlubGluZSBpbnQgb25fc2lnX3N0YWNrKHVuc2lnbmVkIGxvbmcgc3ApCnsKICAgICAgICByZXR1 cm4gKHNwIC0gZ2V0X2N1cnJlbnQoKS0+c2FzX3NzX3NwIDwgZ2V0X2N1cnJlbnQoKS0+c2FzX3Nz X3NpemUpOwp9CgpzdGF0aWMgaW5saW5lIGludCBzYXNfc3NfZmxhZ3ModW5zaWduZWQgbG9uZyBz cCkKewogICAgICAgIHJldHVybiAoZ2V0X2N1cnJlbnQoKS0+c2FzX3NzX3NpemUgPT0gMCA/IDIK ICAgICAgICAgICAgICAgIDogb25fc2lnX3N0YWNrKHNwKSA/IDEgOiAwKTsKfQoKZXh0ZXJuIGlu dCByZXF1ZXN0X2lycSh1bnNpZ25lZCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAo KmhhbmRsZXIpKGludCwgdm9pZCAqLCBzdHJ1Y3QgcHRfcmVncyAqKSwKICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nLCBjb25zdCBjaGFyICosIHZvaWQgKik7CmV4dGVybiB2b2lk IGZyZWVfaXJxKHVuc2lnbmVkIGludCwgdm9pZCAqKTsKIyA2ODAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgiCnN0YXRpYyBpbmxpbmUgaW50IHN1c2VyKHZvaWQp CnsKICAgICAgICBpZiAoISggKDEgPDwgKDAgKzEpKSAmIDB4MDAwMDAwMDAgPyAoMSA8PCAoMCkp ICYgMHgwMDAwMDAwMCA6ICgxIDw8ICgwKSkgJiBzZWN1cmViaXRzICkgJiYgZ2V0X2N1cnJlbnQo KS0+ZXVpZCA9PSAwKSB7CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8PSAw eDAwMDAwMTAwOwogICAgICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJl dHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludCBmc3VzZXIodm9pZCkKewogICAgICAgIGlmICgh KCAoMSA8PCAoMCArMSkpICYgMHgwMDAwMDAwMCA/ICgxIDw8ICgwKSkgJiAweDAwMDAwMDAwIDog KDEgPDwgKDApKSAmIHNlY3VyZWJpdHMgKSAmJiBnZXRfY3VycmVudCgpLT5mc3VpZCA9PSAwKSB7 CiAgICAgICAgICAgICAgICBnZXRfY3VycmVudCgpLT5mbGFncyB8PSAweDAwMDAwMTAwOwogICAg ICAgICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiAwOwp9CgoKCgoK CgpzdGF0aWMgaW5saW5lIGludCBjYXBhYmxlKGludCBjYXApCnsKCiAgICAgICAgaWYgKCgoZ2V0 X2N1cnJlbnQoKS0+Y2FwX2VmZmVjdGl2ZSkgJiAoMSA8PCAoY2FwKSkpKQoKCgogICAgICAgIHsK ICAgICAgICAgICAgICAgIGdldF9jdXJyZW50KCktPmZsYWdzIHw9IDB4MDAwMDAxMDA7CiAgICAg ICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7Cn0KCgoKCmV4 dGVybiBzdHJ1Y3QgbW1fc3RydWN0ICogbW1fYWxsb2Modm9pZCk7CgpleHRlcm4gc3RydWN0IG1t X3N0cnVjdCAqIHN0YXJ0X2xhenlfdGxiKHZvaWQpOwpleHRlcm4gdm9pZCBlbmRfbGF6eV90bGIo c3RydWN0IG1tX3N0cnVjdCAqbW0pOwoKCmV4dGVybiBpbmxpbmUgdm9pZCBfX21tZHJvcChzdHJ1 Y3QgbW1fc3RydWN0ICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKc3RhdGljIGlubGlu ZSB2b2lkIG1tZHJvcChzdHJ1Y3QgbW1fc3RydWN0ICogbW0pCnsKICAgICAgICBpZiAoYXRvbWlj X2RlY19hbmRfdGVzdCgmbW0tPm1tX2NvdW50KSkKICAgICAgICAgICAgICAgIF9fbW1kcm9wKG1t KTsKfQoKCmV4dGVybiB2b2lkIG1tcHV0KHN0cnVjdCBtbV9zdHJ1Y3QgKik7CgpleHRlcm4gdm9p ZCBtbV9yZWxlYXNlKHZvaWQpOwoKCgoKZXh0ZXJuIHN0cnVjdCBmaWxlICoqIGFsbG9jX2ZkX2Fy cmF5KGludCk7CmV4dGVybiBpbnQgZXhwYW5kX2ZkX2FycmF5KHN0cnVjdCBmaWxlc19zdHJ1Y3Qg KiwgaW50IG5yKTsKZXh0ZXJuIHZvaWQgZnJlZV9mZF9hcnJheShzdHJ1Y3QgZmlsZSAqKiwgaW50 KTsKCmV4dGVybiBmZF9zZXQgKmFsbG9jX2Zkc2V0KGludCk7CmV4dGVybiBpbnQgZXhwYW5kX2Zk c2V0KHN0cnVjdCBmaWxlc19zdHJ1Y3QgKiwgaW50IG5yKTsKZXh0ZXJuIHZvaWQgZnJlZV9mZHNl dChmZF9zZXQgKiwgaW50KTsKCmV4dGVybiBpbnQgY29weV90aHJlYWQoaW50LCB1bnNpZ25lZCBs b25nLCB1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBsb25nLCBzdHJ1Y3QgdGFza19zdHJ1Y3QgKiwg c3RydWN0IHB0X3JlZ3MgKik7CmV4dGVybiB2b2lkIGZsdXNoX3RocmVhZCh2b2lkKTsKZXh0ZXJu IHZvaWQgZXhpdF90aHJlYWQodm9pZCk7CgpleHRlcm4gdm9pZCBleGl0X21tKHN0cnVjdCB0YXNr X3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgZXhpdF9maWxlcyhzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7 CmV4dGVybiB2b2lkIGV4aXRfc2lnaGFuZChzdHJ1Y3QgdGFza19zdHJ1Y3QgKik7CgpleHRlcm4g dm9pZCByZXBhcmVudF90b19pbml0KHZvaWQpOwpleHRlcm4gdm9pZCBkYWVtb25pemUodm9pZCk7 CgpleHRlcm4gaW50IGRvX2V4ZWN2ZShjaGFyICosIGNoYXIgKiosIGNoYXIgKiosIHN0cnVjdCBw dF9yZWdzICopOwpleHRlcm4gaW50IGRvX2ZvcmsodW5zaWduZWQgbG9uZywgdW5zaWduZWQgbG9u Zywgc3RydWN0IHB0X3JlZ3MgKiwgdW5zaWduZWQgbG9uZyk7CgpleHRlcm4gdm9pZCBhZGRfd2Fp dF9xdWV1ZSh3YWl0X3F1ZXVlX2hlYWRfdCAqcSwgd2FpdF9xdWV1ZV90ICogd2FpdCkgX19hdHRy aWJ1dGVfXygocmVncGFybSgzKSkpOwpleHRlcm4gdm9pZCBhZGRfd2FpdF9xdWV1ZV9leGNsdXNp dmUod2FpdF9xdWV1ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqIHdhaXQpIF9fYXR0cmlidXRl X18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgcmVtb3ZlX3dhaXRfcXVldWUod2FpdF9xdWV1 ZV9oZWFkX3QgKnEsIHdhaXRfcXVldWVfdCAqIHdhaXQpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0o MykpKTsKIyA4NDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NjaGVkLmgi CnN0YXRpYyBpbmxpbmUgdm9pZCBkZWxfZnJvbV9ydW5xdWV1ZShzdHJ1Y3QgdGFza19zdHJ1Y3Qg KiBwKQp7CiAgICAgICAgbnJfcnVubmluZy0tOwogICAgICAgIHAtPnNsZWVwX3RpbWUgPSBqaWZm aWVzOwogICAgICAgIGxpc3RfZGVsKCZwLT5ydW5fbGlzdCk7CiAgICAgICAgcC0+cnVuX2xpc3Qu bmV4dCA9ICgodm9pZCAqKTApOwp9CgpzdGF0aWMgaW5saW5lIGludCB0YXNrX29uX3J1bnF1ZXVl KHN0cnVjdCB0YXNrX3N0cnVjdCAqcCkKewogICAgICAgIHJldHVybiAocC0+cnVuX2xpc3QubmV4 dCAhPSAoKHZvaWQgKikwKSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB1bmhhc2hfcHJvY2Vzcyhz dHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKICAgICAgICBpZiAodGFza19vbl9ydW5xdWV1ZShwKSkg X19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIGRvIHsgX19h c21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgKHZvaWQpKCZ0YXNrbGlzdF9s b2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgbnJfdGhyZWFkcy0tOwogICAgICAgIHVuaGFzaF9w aWQocCk7CiAgICAgICAgZG8geyAocCktPm5leHRfdGFzay0+cHJldl90YXNrID0gKHApLT5wcmV2 X3Rhc2s7IChwKS0+cHJldl90YXNrLT5uZXh0X3Rhc2sgPSAocCktPm5leHRfdGFzazsgaWYgKChw KS0+cF9vc3B0cikgKHApLT5wX29zcHRyLT5wX3lzcHRyID0gKHApLT5wX3lzcHRyOyBpZiAoKHAp LT5wX3lzcHRyKSAocCktPnBfeXNwdHItPnBfb3NwdHIgPSAocCktPnBfb3NwdHI7IGVsc2UgKHAp LT5wX3BwdHItPnBfY3B0ciA9IChwKS0+cF9vc3B0cjsgfSB3aGlsZSAoMCk7CiAgICAgICAgbGlz dF9kZWwoJnAtPnRocmVhZF9ncm91cCk7CiAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9f YXNtX18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CgoK c3RhdGljIGlubGluZSB2b2lkIHRhc2tfbG9jayhzdHJ1Y3QgdGFza19zdHJ1Y3QgKnApCnsKICAg ICAgICAodm9pZCkoJnAtPmFsbG9jX2xvY2spOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza191 bmxvY2soc3RydWN0IHRhc2tfc3RydWN0ICpwKQp7CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwp9 CgoKc3RhdGljIGlubGluZSBjaGFyICogZF9wYXRoKHN0cnVjdCBkZW50cnkgKmRlbnRyeSwgc3Ry dWN0IHZmc21vdW50ICp2ZnNtbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hh ciAqYnVmLCBpbnQgYnVmbGVuKQp7CiAgICAgICAgY2hhciAqcmVzOwogICAgICAgIHN0cnVjdCB2 ZnNtb3VudCAqcm9vdG1udDsKICAgICAgICBzdHJ1Y3QgZGVudHJ5ICpyb290OwogICAgICAgICh2 b2lkKSgmZ2V0X2N1cnJlbnQoKS0+ZnMtPmxvY2spOwogICAgICAgIHJvb3RtbnQgPSBtbnRnZXQo Z2V0X2N1cnJlbnQoKS0+ZnMtPnJvb3RtbnQpOwogICAgICAgIHJvb3QgPSBkZ2V0KGdldF9jdXJy ZW50KCktPmZzLT5yb290KTsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAgKHZvaWQp KCZkY2FjaGVfbG9jayk7CiAgICAgICAgcmVzID0gX19kX3BhdGgoZGVudHJ5LCB2ZnNtbnQsIHJv b3QsIHJvb3RtbnQsIGJ1ZiwgYnVmbGVuKTsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAg ICAgZHB1dChyb290KTsKICAgICAgICBtbnRwdXQocm9vdG1udCk7CiAgICAgICAgcmV0dXJuIHJl czsKfQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9lcnJuby5oIiAxCiMgNiAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW0uaCIgMgoKCgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgMTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9zdHJpbmcuaCIgMQojIDExICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvbGlzdC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tbXpvbmUu aCIgMQoKCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZp Zy5oIiAxCiMgOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zcGlubG9jay5oIiAx CiMgOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9saXN0LmgiIDEKIyAxMCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgiIDIKIyAyMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgiCnR5cGVkZWYgc3RydWN0IGZy ZWVfYXJlYV9zdHJ1Y3QgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgZnJlZV9saXN0OwogICAg ICAgIHVuc2lnbmVkIGxvbmcgKm1hcDsKfSBmcmVlX2FyZWFfdDsKCnN0cnVjdCBwZ2xpc3RfZGF0 YTsKIyAzNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgiCnR5 cGVkZWYgc3RydWN0IHpvbmVfc3RydWN0IHsKCgoKICAgICAgICBzcGlubG9ja190IGxvY2s7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBmcmVlX3BhZ2VzOwogICAgICAgIHVuc2lnbmVkIGxvbmcgcGFn ZXNfbWluLCBwYWdlc19sb3csIHBhZ2VzX2hpZ2g7CiAgICAgICAgaW50IG5lZWRfYmFsYW5jZTsK CgoKCiAgICAgICAgZnJlZV9hcmVhX3QgZnJlZV9hcmVhWzEwXTsKCgoKCiAgICAgICAgc3RydWN0 IHBnbGlzdF9kYXRhICp6b25lX3BnZGF0OwogICAgICAgIHN0cnVjdCBwYWdlICp6b25lX21lbV9t YXA7CiAgICAgICAgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BhZGRyOwogICAgICAgIHVuc2ln bmVkIGxvbmcgem9uZV9zdGFydF9tYXBucjsKCgoKCiAgICAgICAgY2hhciAqbmFtZTsKICAgICAg ICB1bnNpZ25lZCBsb25nIHNpemU7Cn0gem9uZV90OwojIDgxICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9tbXpvbmUuaCIKdHlwZWRlZiBzdHJ1Y3Qgem9uZWxpc3Rfc3RydWN0 IHsKICAgICAgICB6b25lX3QgKiB6b25lcyBbMyArMV07Cn0gem9uZWxpc3RfdDsKIyA5OCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW16b25lLmgiCnN0cnVjdCBib290bWVt X2RhdGE7CnR5cGVkZWYgc3RydWN0IHBnbGlzdF9kYXRhIHsKICAgICAgICB6b25lX3Qgbm9kZV96 b25lc1szXTsKICAgICAgICB6b25lbGlzdF90IG5vZGVfem9uZWxpc3RzWzB4MGYgKzFdOwogICAg ICAgIGludCBucl96b25lczsKICAgICAgICBzdHJ1Y3QgcGFnZSAqbm9kZV9tZW1fbWFwOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgKnZhbGlkX2FkZHJfYml0bWFwOwogICAgICAgIHN0cnVjdCBib290 bWVtX2RhdGEgKmJkYXRhOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbm9kZV9zdGFydF9wYWRkcjsK ICAgICAgICB1bnNpZ25lZCBsb25nIG5vZGVfc3RhcnRfbWFwbnI7CiAgICAgICAgdW5zaWduZWQg bG9uZyBub2RlX3NpemU7CiAgICAgICAgaW50IG5vZGVfaWQ7CiAgICAgICAgc3RydWN0IHBnbGlz dF9kYXRhICpub2RlX25leHQ7Cn0gcGdfZGF0YV90OwoKZXh0ZXJuIGludCBudW1ub2RlczsKZXh0 ZXJuIHBnX2RhdGFfdCAqcGdkYXRfbGlzdDsKIyAxMjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L21tem9uZS5oIgpzdHJ1Y3QgcGFnZTsKZXh0ZXJuIHZvaWQgc2hvd19mcmVl X2FyZWFzX2NvcmUocGdfZGF0YV90ICpwZ2RhdCk7CmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0 X2NvcmUoaW50IG5pZCwgcGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHBhZ2UgKipnbWFwLAogIHVu c2lnbmVkIGxvbmcgKnpvbmVzX3NpemUsIHVuc2lnbmVkIGxvbmcgcGFkZHIsIHVuc2lnbmVkIGxv bmcgKnpob2xlc19zaXplLAogIHN0cnVjdCBwYWdlICpwbWFwKTsKCmV4dGVybiBwZ19kYXRhX3Qg Y29udGlnX3BhZ2VfZGF0YTsKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N3YXAu aCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NwaW5sb2Nr LmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zd2FwLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgNiAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3dhcC5oIiAyCiMgMjUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKdW5pb24gc3dhcF9oZWFkZXIgewog ICAgICAgIHN0cnVjdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgcmVzZXJ2ZWRbKDFV TCA8PCAxMikgLSAxMF07CiAgICAgICAgICAgICAgICBjaGFyIG1hZ2ljWzEwXTsKICAgICAgICB9 IG1hZ2ljOwogICAgICAgIHN0cnVjdAogICAgICAgIHsKICAgICAgICAgICAgICAgIGNoYXIgYm9v dGJpdHNbMTAyNF07CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVyc2lvbjsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBsYXN0X3BhZ2U7CiAgICAgICAgICAgICAgICB1bnNpZ25l ZCBpbnQgbnJfYmFkcGFnZXM7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGFkZGluZ1sx MjVdOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJhZHBhZ2VzWzFdOwogICAgICAgIH0g aW5mbzsKfTsKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3dhcC5o IgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDUy ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zd2FwLmgiIDIKIyA2NCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc3dhcC5oIgpzdHJ1Y3Qgc3dhcF9pbmZv X3N0cnVjdCB7CiAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzOwogICAgICAgIGtkZXZfdCBzd2Fw X2RldmljZTsKICAgICAgICBzcGlubG9ja190IHNkZXZfbG9jazsKICAgICAgICBzdHJ1Y3QgZGVu dHJ5ICogc3dhcF9maWxlOwogICAgICAgIHN0cnVjdCB2ZnNtb3VudCAqc3dhcF92ZnNtbnQ7CiAg ICAgICAgdW5zaWduZWQgc2hvcnQgKiBzd2FwX21hcDsKICAgICAgICB1bnNpZ25lZCBpbnQgbG93 ZXN0X2JpdDsKICAgICAgICB1bnNpZ25lZCBpbnQgaGlnaGVzdF9iaXQ7CiAgICAgICAgdW5zaWdu ZWQgaW50IGNsdXN0ZXJfbmV4dDsKICAgICAgICB1bnNpZ25lZCBpbnQgY2x1c3Rlcl9ucjsKICAg ICAgICBpbnQgcHJpbzsKICAgICAgICBpbnQgcGFnZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyBt YXg7CiAgICAgICAgaW50IG5leHQ7Cn07CgpleHRlcm4gaW50IG5yX3N3YXBfcGFnZXM7CmV4dGVy biB1bnNpZ25lZCBpbnQgbnJfZnJlZV9wYWdlcyh2b2lkKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBu cl9mcmVlX2J1ZmZlcl9wYWdlcyh2b2lkKTsKZXh0ZXJuIGludCBucl9hY3RpdmVfcGFnZXM7CmV4 dGVybiBpbnQgbnJfaW5hY3RpdmVfcGFnZXM7CmV4dGVybiBhdG9taWNfdCBucl9hc3luY19wYWdl czsKZXh0ZXJuIGF0b21pY190IHBhZ2VfY2FjaGVfc2l6ZTsKZXh0ZXJuIGF0b21pY190IGJ1ZmZl cm1lbV9wYWdlczsKZXh0ZXJuIHNwaW5sb2NrX3QgcGFnZWNhY2hlX2xvY2s7CmV4dGVybiB2b2lk IF9fcmVtb3ZlX2lub2RlX3BhZ2Uoc3RydWN0IHBhZ2UgKik7CgoKc3RydWN0IHRhc2tfc3RydWN0 OwpzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Q7CnN0cnVjdCBzeXNpbmZvOwoKc3RydWN0IHpvbmVfdDsK CgpleHRlcm4gdm9pZCBscnVfY2FjaGVfYWRkKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18o KHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgX19scnVfY2FjaGVfZGVsKHN0cnVjdCBwYWdlICop IF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgbHJ1X2NhY2hlX2RlbChz dHJ1Y3QgcGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpleHRlcm4gdm9pZCBk ZWFjdGl2YXRlX3BhZ2Uoc3RydWN0IHBhZ2UgKikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkp OwpleHRlcm4gdm9pZCBkZWFjdGl2YXRlX3BhZ2Vfbm9sb2NrKHN0cnVjdCBwYWdlICopIF9fYXR0 cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHZvaWQgYWN0aXZhdGVfcGFnZShzdHJ1Y3Qg cGFnZSAqKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGFjdGl2YXRl X3BhZ2Vfbm9sb2NrKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsK CmV4dGVybiB2b2lkIHN3YXBfc2V0dXAodm9pZCk7CgoKZXh0ZXJuIHdhaXRfcXVldWVfaGVhZF90 IGtzd2FwZF93YWl0OwpleHRlcm4gaW50IHRyeV90b19mcmVlX3BhZ2VzKHpvbmVfdCAqLCB1bnNp Z25lZCBpbnQsIHVuc2lnbmVkIGludCkgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCmV4 dGVybiB2b2lkIHJ3X3N3YXBfcGFnZShpbnQsIHN0cnVjdCBwYWdlICopOwpleHRlcm4gdm9pZCBy d19zd2FwX3BhZ2Vfbm9sb2NrKGludCwgc3dwX2VudHJ5X3QsIGNoYXIgKik7CgoKCgoKCmV4dGVy biB2b2lkIHNob3dfc3dhcF9jYWNoZV9pbmZvKHZvaWQpOwoKZXh0ZXJuIGludCBhZGRfdG9fc3dh cF9jYWNoZShzdHJ1Y3QgcGFnZSAqLCBzd3BfZW50cnlfdCk7CmV4dGVybiB2b2lkIF9fZGVsZXRl X2Zyb21fc3dhcF9jYWNoZShzdHJ1Y3QgcGFnZSAqcGFnZSk7CmV4dGVybiB2b2lkIGRlbGV0ZV9m cm9tX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwpleHRlcm4gdm9pZCBmcmVlX3BhZ2Vf YW5kX3N3YXBfY2FjaGUoc3RydWN0IHBhZ2UgKnBhZ2UpOwpleHRlcm4gc3RydWN0IHBhZ2UgKiBs b29rdXBfc3dhcF9jYWNoZShzd3BfZW50cnlfdCk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqIHJlYWRf c3dhcF9jYWNoZV9hc3luYyhzd3BfZW50cnlfdCk7CgoKZXh0ZXJuIGludCBvdXRfb2ZfbWVtb3J5 KHZvaWQpOwpleHRlcm4gdm9pZCBvb21fa2lsbCh2b2lkKTsKCgpleHRlcm4gaW50IHRvdGFsX3N3 YXBfcGFnZXM7CmV4dGVybiB1bnNpZ25lZCBpbnQgbnJfc3dhcGZpbGVzOwpleHRlcm4gc3RydWN0 IHN3YXBfaW5mb19zdHJ1Y3Qgc3dhcF9pbmZvW107CmV4dGVybiBpbnQgaXNfc3dhcF9wYXJ0aXRp b24oa2Rldl90KTsKZXh0ZXJuIHZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKik7CmV4 dGVybiBzd3BfZW50cnlfdCBnZXRfc3dhcF9wYWdlKHZvaWQpOwpleHRlcm4gdm9pZCBnZXRfc3dh cGhhbmRsZV9pbmZvKHN3cF9lbnRyeV90LCB1bnNpZ25lZCBsb25nICosIGtkZXZfdCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGlub2RlICoqKTsKZXh0 ZXJuIGludCBzd2FwX2R1cGxpY2F0ZShzd3BfZW50cnlfdCk7CmV4dGVybiBpbnQgc3dhcF9jb3Vu dChzdHJ1Y3QgcGFnZSAqKTsKZXh0ZXJuIGludCB2YWxpZF9zd2FwaGFuZGxlcyhzd3BfZW50cnlf dCwgdW5zaWduZWQgbG9uZyAqKTsKZXh0ZXJuIHZvaWQgc3dhcF9mcmVlKHN3cF9lbnRyeV90KTsK c3RydWN0IHN3YXBfbGlzdF90IHsKICAgICAgICBpbnQgaGVhZDsKICAgICAgICBpbnQgbmV4dDsK fTsKZXh0ZXJuIHN0cnVjdCBzd2FwX2xpc3RfdCBzd2FwX2xpc3Q7CiBfX2F0dHJpYnV0ZV9fKChy ZWdwYXJtKDApKSkgbG9uZyBzeXNfc3dhcG9mZihjb25zdCBjaGFyICopOwogX19hdHRyaWJ1dGVf XygocmVncGFybSgwKSkpIGxvbmcgc3lzX3N3YXBvbihjb25zdCBjaGFyICosIGludCk7CgpleHRl cm4gc3BpbmxvY2tfdCBwYWdlbWFwX2xydV9sb2NrOwoKZXh0ZXJuIHZvaWQgbWFya19wYWdlX2Fj Y2Vzc2VkKHN0cnVjdCBwYWdlICopIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKIyAyMjIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N3YXAuaCIKZXh0ZXJuIHNwaW5s b2NrX3Qgc3dhcGxvY2s7CgoKCgoKCmV4dGVybiB2b2lkIHNobWVtX3VudXNlKHN3cF9lbnRyeV90 IGVudHJ5LCBzdHJ1Y3QgcGFnZSAqcGFnZSk7CiMgMTQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L21tLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9yYnRyZWUuaCIgMQojIDE1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9tbS5oIiAyCgpleHRlcm4gdW5zaWduZWQgbG9uZyBtYXhfbWFwbnI7CmV4dGVybiB1bnNpZ25l ZCBsb25nIG51bV9waHlzcGFnZXM7CmV4dGVybiB2b2lkICogaGlnaF9tZW1vcnk7CmV4dGVybiBp bnQgcGFnZV9jbHVzdGVyOwoKZXh0ZXJuIHN0cnVjdCBsaXN0X2hlYWQgYWN0aXZlX2xpc3Q7CmV4 dGVybiBzdHJ1Y3QgbGlzdF9oZWFkIGluYWN0aXZlX2xpc3Q7CgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2FzbS9wYWdlLmgiIDEKIyAyNSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvbW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2FzbS9wZ3RhYmxlLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9w Z3RhYmxlLmgiIDIKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFi bGUuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgi IDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgoj IDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9maXhtYXAuaCIgMQojIDE2ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vZml4bWFwLmgiCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgva2VybmVsLmgiIDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL2FwaWNkZWYuaCIgMQojIDEyMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv YXNtL2FwaWNkZWYuaCIKc3RydWN0IGxvY2FsX2FwaWMgewoKICAgICAgICBzdHJ1Y3QgeyB1bnNp Z25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAxOwoKICAgICAgICBzdHJ1Y3Qg eyB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZFs0XTsgfSBfX3Jlc2VydmVkXzAyOwoKICAgICAgICBz dHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI0LAog ICAgICAgICAgICAgICAgICAgICAgICBwaHlzX2FwaWNfaWQgOiA0LAogICAgICAgICAgICAgICAg ICAgICAgICBfX3Jlc2VydmVkXzIgOiA0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9f cmVzZXJ2ZWRbM107CiAgICAgICAgfSBpZDsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3Qg ewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZlcnNpb24gOiA4LAogICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBtYXhf bHZ0IDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogODsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gdmVyc2lvbjsK CiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZl ZF8wMzsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19y ZXNlcnZlZF8wNDsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8wNTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbNF07IH0gX19yZXNlcnZlZF8wNjsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBwcmlvcml0eSA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVz ZXJ2ZWRfMSA6IDI0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlsz XTsKICAgICAgICB9IHRwcjsKCiAgICAgICAgY29uc3QKICAgICAgICBzdHJ1Y3QgewogICAgICAg ICAgICAgICAgdW5zaWduZWQgaW50IHByaW9yaXR5IDogOCwKICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXNlcnZlZF8xIDogMjQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNl cnZlZF8yWzNdOwogICAgICAgIH0gYXByOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcHJpb3JpdHkgOiA4LAogICAgICAgICAgICAg ICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAyNDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSBwcHI7CgogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgZW9pOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IF9fcmVzZXJ2ZWRbM107CiAgICAgICAgfSBlb2k7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVk IGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMDc7CgogICAgICAgIHN0cnVjdCB7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8xIDogMjQsCiAgICAgICAgICAg ICAgICAgICAgICAgIGxvZ2ljYWxfZGVzdCA6IDg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgX19yZXNlcnZlZF8yWzNdOwogICAgICAgIH0gbGRyOwoKICAgICAgICBzdHJ1Y3QgewogICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMSA6IDI4LAogICAgICAgICAgICAg ICAgICAgICAgICBtb2RlbCA6IDQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNl cnZlZF8yWzNdOwogICAgICAgIH0gZGZyOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAg ICAgdW5zaWduZWQgaW50IHNwdXJpb3VzX3ZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAg ICAgIGFwaWNfZW5hYmxlZCA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGZvY3VzX2NwdSA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDIyOwogICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICB9IHN2cjsKCiAgICAg ICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRmaWVsZDsKICAgICAg ICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gaXNyIFs4XTsK CiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRmaWVsZDsK ICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAgIH0gdG1y IFs4XTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBiaXRm aWVsZDsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzNdOwogICAgICAg IH0gaXJyIFs4XTsKCiAgICAgICAgdW5pb24gewogICAgICAgICAgICAgICAgc3RydWN0IHsKICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHNlbmRfY3NfZXJyb3IgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlY2VpdmVfY3NfZXJyb3IgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHNlbmRfYWNjZXB0X2Vycm9yIDogMSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICByZWNlaXZlX2FjY2VwdF9lcnJvciA6IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8xIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzZW5kX2lsbGVnYWxfdmVjdG9yIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICByZWNlaXZlX2lsbGVnYWxfdmVjdG9yIDogMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbGxlZ2FsX3JlZ2lzdGVyX2FkZHJlc3MgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDI0OwogICAgICAgICAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNdOwogICAgICAgICAgICAgICAg fSBlcnJvcl9iaXRzOwogICAgICAgICAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IGVycm9yczsKICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWdu ZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAgICAgICAgICAgIH0gYWxsX2Vycm9yczsKICAg ICAgICB9IGVzcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8wODsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2 ZWRbNF07IH0gX19yZXNlcnZlZF8wOTsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9f cmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMDsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQg aW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMTsKCiAgICAgICAgc3RydWN0IHsgdW5z aWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMjsKCiAgICAgICAgc3RydWN0 IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xMzsKCiAgICAgICAg c3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07IH0gX19yZXNlcnZlZF8xNDsKCiAg ICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCB2ZWN0b3IgOiA4LAog ICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9tb2RlIDogMywKICAgICAgICAgICAgICAg ICAgICAgICAgZGVzdGluYXRpb25fbW9kZSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl bGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGxldmVsIDogMSwKICAgICAgICAgICAgICAgICAg ICAgICAgdHJpZ2dlciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6 IDIsCiAgICAgICAgICAgICAgICAgICAgICAgIHNob3J0aGFuZCA6IDIsCiAgICAgICAgICAgICAg ICAgICAgICAgIF9fcmVzZXJ2ZWRfMyA6IDEyOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50 IF9fcmVzZXJ2ZWRfNFszXTsKICAgICAgICB9IGljcjE7CgogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bmlvbiB7CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBf X3Jlc2VydmVkXzEgOiAyNCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaHlzX2Rl c3QgOiA0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6IDQ7 CiAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzMgOiAyNCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2dpY2FsX2Rlc3QgOiA4OwogICAgICAg ICAgICAgICAgfSBkZXN0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRf NFszXTsKICAgICAgICB9IGljcjI7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1 bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZl ZF8xIDogNCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfc3RhdHVzIDogMSwKICAg ICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8yIDogMywKICAgICAgICAgICAgICAgICAg ICAgICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVyX21vZGUgOiAxLAog ICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzMgOiAxNDsKICAgICAgICAgICAgICAg IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkXzRbM107CiAgICAgICAgfSBsdnRfdGltZXI7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTU7 CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDog OCwKICAgICAgICAgICAgICAgICAgICAgICAgZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAg ICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRl bGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6 IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIG1hc2sgOiAxLAogICAgICAgICAgICAgICAgICAg ICAgICBfX3Jlc2VydmVkXzMgOiAxNTsKICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBfX3Jl c2VydmVkXzRbM107CiAgICAgICAgfSBsdnRfcGM7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAg ICAgICAgICB1bnNpZ25lZCBpbnQgdmVjdG9yIDogOCwKICAgICAgICAgICAgICAgICAgICAgICAg ZGVsaXZlcnlfbW9kZSA6IDMsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6 IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5X3N0YXR1cyA6IDEsCiAgICAgICAg ICAgICAgICAgICAgICAgIHBvbGFyaXR5IDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgcmVt b3RlX2lyciA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHRyaWdnZXIgOiAxLAogICAgICAg ICAgICAgICAgICAgICAgICBtYXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNl cnZlZF8yIDogMTU7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8zWzNd OwogICAgICAgIH0gbHZ0X2xpbnQwOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAg dW5zaWduZWQgaW50IHZlY3RvciA6IDgsCiAgICAgICAgICAgICAgICAgICAgICAgIGRlbGl2ZXJ5 X21vZGUgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiAxLAogICAg ICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAgICAgICAg ICAgICAgICBwb2xhcml0eSA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIHJlbW90ZV9pcnIg OiAxLAogICAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyIDogMSwKICAgICAgICAgICAgICAg ICAgICAgICAgbWFzayA6IDEsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMiA6 IDE1OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfM1szXTsKICAgICAg ICB9IGx2dF9saW50MTsKCiAgICAgICAgc3RydWN0IHsKICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCB2ZWN0b3IgOiA4LAogICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc2VydmVkXzEgOiA0 LAogICAgICAgICAgICAgICAgICAgICAgICBkZWxpdmVyeV9zdGF0dXMgOiAxLAogICAgICAgICAg ICAgICAgICAgICAgICBfX3Jlc2VydmVkXzIgOiAzLAogICAgICAgICAgICAgICAgICAgICAgICBt YXNrIDogMSwKICAgICAgICAgICAgICAgICAgICAgICAgX19yZXNlcnZlZF8zIDogMTU7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF80WzNdOwogICAgICAgIH0gbHZ0X2Vy cm9yOwoKICAgICAgICBzdHJ1Y3QgewogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGluaXRp YWxfY291bnQ7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgX19yZXNlcnZlZF8yWzNdOwog ICAgICAgIH0gdGltZXJfaWNyOwoKICAgICAgICBjb25zdAogICAgICAgIHN0cnVjdCB7CiAgICAg ICAgICAgICAgICB1bnNpZ25lZCBpbnQgY3Vycl9jb3VudDsKICAgICAgICAgICAgICAgIHVuc2ln bmVkIGludCBfX3Jlc2VydmVkXzJbM107CiAgICAgICAgfSB0aW1lcl9jY3I7CgogICAgICAgIHN0 cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTY7CgogICAg ICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2ZWRfMTc7 CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9fcmVzZXJ2 ZWRfMTg7CgogICAgICAgIHN0cnVjdCB7IHVuc2lnbmVkIGludCBfX3Jlc2VydmVkWzRdOyB9IF9f cmVzZXJ2ZWRfMTk7CgogICAgICAgIHN0cnVjdCB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBp bnQgZGl2aXNvciA6IDQsCiAgICAgICAgICAgICAgICAgICAgICAgIF9fcmVzZXJ2ZWRfMSA6IDI4 OwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRfMlszXTsKICAgICAgICB9 IHRpbWVyX2RjcjsKCiAgICAgICAgc3RydWN0IHsgdW5zaWduZWQgaW50IF9fcmVzZXJ2ZWRbNF07 IH0gX19yZXNlcnZlZF8yMDsKCn0gX19hdHRyaWJ1dGVfXyAoKHBhY2tlZCkpOwojIDE5ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vZml4bWFwLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMjAgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9maXhtYXAuaCIgMgojIDUwICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9hc20vZml4bWFwLmgiCmVudW0gZml4ZWRfYWRkcmVzc2VzIHsKIyA2OCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIF9fZW5kX29mX2Zp eGVkX2FkZHJlc3Nlcwp9OwoKZXh0ZXJuIHZvaWQgX19zZXRfZml4bWFwIChlbnVtIGZpeGVkX2Fk ZHJlc3NlcyBpZHgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBsb25nIHBoeXMsIHBncHJvdF90IGZsYWdzKTsKIyA5NCAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgpleHRlcm4gdm9pZCBfX3RoaXNfZml4bWFwX2RvZXNf bm90X2V4aXN0KHZvaWQpOwoKCgoKCgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZml4X3Rv X3ZpcnQoY29uc3QgdW5zaWduZWQgaW50IGlkeCkKewojIDExMiAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIgogICAgICAgIGlmIChpZHggPj0gX19lbmRfb2ZfZml4 ZWRfYWRkcmVzc2VzKQogICAgICAgICAgICAgICAgX190aGlzX2ZpeG1hcF9kb2VzX25vdF9leGlz dCgpOwoKICAgICAgICByZXR1cm4gKCgweGZmZmZlMDAwVUwpIC0gKChpZHgpIDw8IDEyKSk7Cn0K IyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMQojIDE5ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGd0YWJsZS5oIiAyCgoKCgoKZXh0ZXJu IHBnZF90IHN3YXBwZXJfcGdfZGlyWzEwMjRdOwpleHRlcm4gdm9pZCBwYWdpbmdfaW5pdCh2b2lk KTsKIyA2NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0 ZXJuIHVuc2lnbmVkIGxvbmcgcGdrZXJuX21hc2s7CiMgOTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgiCmV4dGVybiB1bnNpZ25lZCBsb25nIGVtcHR5X3plcm9f cGFnZVsxMDI0XTsKIyAxMDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wZ3Rh YmxlLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUtMmxl dmVsLmgiIDEKIyAzMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUt MmxldmVsLmgiCnN0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZCkgeyByZXR1cm4g MDsgfQpzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZCkgeyByZXR1cm4gMDsgfQpz dGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpIHsgcmV0dXJuIDE7IH0KIyA1 MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLmgiCnN0 YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHBnZF90ICogZGlyLCB1bnNpZ25lZCBsb25n IGFkZHJlc3MpCnsKICAgICAgICByZXR1cm4gKHBtZF90ICopIGRpcjsKfQojIDExMCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIgMgojIDI0NCAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcg cGcwWzEwMjRdOwojIDI2NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFi bGUuaCIKc3RhdGljIGlubGluZSBpbnQgcHRlX3JlYWQocHRlX3QgcHRlKSB7IHJldHVybiAocHRl KS5wdGVfbG93ICYgMHgwMDQ7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRlX2V4ZWMocHRlX3QgcHRl KSB7IHJldHVybiAocHRlKS5wdGVfbG93ICYgMHgwMDQ7IH0Kc3RhdGljIGlubGluZSBpbnQgcHRl X2RpcnR5KHB0ZV90IHB0ZSkgeyByZXR1cm4gKHB0ZSkucHRlX2xvdyAmIDB4MDQwOyB9CnN0YXRp YyBpbmxpbmUgaW50IHB0ZV95b3VuZyhwdGVfdCBwdGUpIHsgcmV0dXJuIChwdGUpLnB0ZV9sb3cg JiAweDAyMDsgfQpzdGF0aWMgaW5saW5lIGludCBwdGVfd3JpdGUocHRlX3QgcHRlKSB7IHJldHVy biAocHRlKS5wdGVfbG93ICYgMHgwMDI7IH0KCnN0YXRpYyBpbmxpbmUgcHRlX3QgcHRlX3JkcHJv dGVjdChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAmPSB+MHgwMDQ7IHJldHVybiBwdGU7IH0K c3RhdGljIGlubGluZSBwdGVfdCBwdGVfZXhwcm90ZWN0KHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVf bG93ICY9IH4weDAwNDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta2Ns ZWFuKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93ICY9IH4weDA0MDsgcmV0dXJuIHB0ZTsgfQpz dGF0aWMgaW5saW5lIHB0ZV90IHB0ZV9ta29sZChwdGVfdCBwdGUpIHsgKHB0ZSkucHRlX2xvdyAm PSB+MHgwMjA7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfd3Jwcm90ZWN0 KHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93ICY9IH4weDAwMjsgcmV0dXJuIHB0ZTsgfQpzdGF0 aWMgaW5saW5lIHB0ZV90IHB0ZV9ta3JlYWQocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgfD0g MHgwMDQ7IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWtleGVjKHB0ZV90 IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDA0OyByZXR1cm4gcHRlOyB9CnN0YXRpYyBpbmxp bmUgcHRlX3QgcHRlX21rZGlydHkocHRlX3QgcHRlKSB7IChwdGUpLnB0ZV9sb3cgfD0gMHgwNDA7 IHJldHVybiBwdGU7IH0Kc3RhdGljIGlubGluZSBwdGVfdCBwdGVfbWt5b3VuZyhwdGVfdCBwdGUp IHsgKHB0ZSkucHRlX2xvdyB8PSAweDAyMDsgcmV0dXJuIHB0ZTsgfQpzdGF0aWMgaW5saW5lIHB0 ZV90IHB0ZV9ta3dyaXRlKHB0ZV90IHB0ZSkgeyAocHRlKS5wdGVfbG93IHw9IDB4MDAyOyByZXR1 cm4gcHRlOyB9CgpzdGF0aWMgaW5saW5lIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX2RpcnR5KHB0 ZV90ICpwdGVwKSB7IHJldHVybiB0ZXN0X2FuZF9jbGVhcl9iaXQoNiwgcHRlcCk7IH0Kc3RhdGlj IGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhwdGVfdCAqcHRlcCkgeyByZXR1 cm4gdGVzdF9hbmRfY2xlYXJfYml0KDUsIHB0ZXApOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBwdGVw X3NldF93cnByb3RlY3QocHRlX3QgKnB0ZXApIHsgY2xlYXJfYml0KDEsIHB0ZXApOyB9CnN0YXRp YyBpbmxpbmUgdm9pZCBwdGVwX21rZGlydHkocHRlX3QgKnB0ZXApIHsgc2V0X2JpdCg2LCBwdGVw KTsgfQojIDI5NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BndGFibGUuaCIK c3RhdGljIGlubGluZSBwdGVfdCBwdGVfbW9kaWZ5KHB0ZV90IHB0ZSwgcGdwcm90X3QgbmV3cHJv dCkKewogICAgICAgIHB0ZS5wdGVfbG93ICY9ICgofigoMVVMIDw8IDEyKS0xKSkgfCAweDAyMCB8 IDB4MDQwKTsKICAgICAgICBwdGUucHRlX2xvdyB8PSAoKG5ld3Byb3QpLnBncHJvdCk7CiAgICAg ICAgcmV0dXJuIHB0ZTsKfQojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9tbS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2F0b21pYy5o IiAxCiMgMjcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21tLmgiIDIKIyA0 MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW0uaCIKc3RydWN0IHZtX2Fy ZWFfc3RydWN0IHsKICAgICAgICBzdHJ1Y3QgbW1fc3RydWN0ICogdm1fbW07CiAgICAgICAgdW5z aWduZWQgbG9uZyB2bV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIHZtX2VuZDsKCgogICAg ICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1fbmV4dDsKCiAgICAgICAgcGdwcm90X3Qgdm1f cGFnZV9wcm90OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdm1fZmxhZ3M7CgogICAgICAgIHJiX25v ZGVfdCB2bV9yYjsKCgoKCgoKICAgICAgICBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtX25leHRf c2hhcmU7CiAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqdm1fcHByZXZfc2hhcmU7CgoK ICAgICAgICBzdHJ1Y3Qgdm1fb3BlcmF0aW9uc19zdHJ1Y3QgKiB2bV9vcHM7CgoKICAgICAgICB1 bnNpZ25lZCBsb25nIHZtX3Bnb2ZmOwoKICAgICAgICBzdHJ1Y3QgZmlsZSAqIHZtX2ZpbGU7CiAg ICAgICAgdW5zaWduZWQgbG9uZyB2bV9yYWVuZDsKICAgICAgICB2b2lkICogdm1fcHJpdmF0ZV9k YXRhOwp9OwojIDExNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW0uaCIK ZXh0ZXJuIHBncHJvdF90IHByb3RlY3Rpb25fbWFwWzE2XTsKCgoKCgoKCnN0cnVjdCB2bV9vcGVy YXRpb25zX3N0cnVjdCB7CiAgICAgICAgdm9pZCAoKm9wZW4pKHN0cnVjdCB2bV9hcmVhX3N0cnVj dCAqIGFyZWEpOwogICAgICAgIHZvaWQgKCpjbG9zZSkoc3RydWN0IHZtX2FyZWFfc3RydWN0ICog YXJlYSk7CiAgICAgICAgc3RydWN0IHBhZ2UgKiAoKm5vcGFnZSkoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICogYXJlYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQgd3JpdGVfYWNjZXNzKTsKfTsK IyAxNDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21tLmgiCnR5cGVkZWYg c3RydWN0IHBhZ2UgewogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKICAgICAgICBzdHJ1 Y3QgYWRkcmVzc19zcGFjZSAqbWFwcGluZzsKICAgICAgICB1bnNpZ25lZCBsb25nIGluZGV4Owog ICAgICAgIHN0cnVjdCBwYWdlICpuZXh0X2hhc2g7CgogICAgICAgIGF0b21pY190IGNvdW50Owog ICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgIHN0cnVjdCBsaXN0X2hlYWQgbHJ1 OwoKICAgICAgICB3YWl0X3F1ZXVlX2hlYWRfdCB3YWl0OwogICAgICAgIHN0cnVjdCBwYWdlICoq cHByZXZfaGFzaDsKICAgICAgICBzdHJ1Y3QgYnVmZmVyX2hlYWQgKiBidWZmZXJzOwogICAgICAg IHZvaWQgKnZpcnR1YWw7CgogICAgICAgIHN0cnVjdCB6b25lX3N0cnVjdCAqem9uZTsKfSBtZW1f bWFwX3Q7CiMgMjk2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tbS5oIgpl eHRlcm4gdm9pZCBfX3NldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICopOwoKc3RhdGljIGlubGlu ZSB2b2lkIHNldF9wYWdlX2RpcnR5KHN0cnVjdCBwYWdlICogcGFnZSkKewogICAgICAgIGlmICgh dGVzdF9hbmRfc2V0X2JpdCg0LCAmcGFnZS0+ZmxhZ3MpKQogICAgICAgICAgICAgICAgX19zZXRf cGFnZV9kaXJ0eShwYWdlKTsKfQojIDM2MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvbW0uaCIKZXh0ZXJuIG1lbV9tYXBfdCAqIG1lbV9tYXA7CgoKCgoKCgpleHRlcm4gc3Ry dWN0IHBhZ2UgKiBfYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBp bnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIHN0cnVjdCBwYWdl ICogX19hbGxvY19wYWdlcyh1bnNpZ25lZCBpbnQgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRl ciwgem9uZWxpc3RfdCAqem9uZWxpc3QpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0 ZXJuIHN0cnVjdCBwYWdlICogYWxsb2NfcGFnZXNfbm9kZShpbnQgbmlkLCB1bnNpZ25lZCBpbnQg Z2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcik7CgpzdGF0aWMgaW5saW5lIHN0cnVjdCBwYWdl ICogYWxsb2NfcGFnZXModW5zaWduZWQgaW50IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIp CnsKCgoKICAgICAgICBpZiAob3JkZXIgPj0gMTApCiAgICAgICAgICAgICAgICByZXR1cm4gKCh2 b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9hbGxvY19wYWdlcyhnZnBfbWFzaywgb3JkZXIpOwp9 CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIF9fZ2V0X2ZyZWVfcGFnZXModW5zaWduZWQgaW50IGdm cF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsK ZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3plcm9lZF9wYWdlKHVuc2lnbmVkIGludCBnZnBfbWFz aykgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwojIDQwMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvbW0uaCIKZXh0ZXJuIHZvaWQgX19mcmVlX3BhZ2VzKHN0cnVjdCBw YWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb3JkZXIpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykp KTsKZXh0ZXJuIHZvaWQgZnJlZV9wYWdlcyh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGlu dCBvcmRlcikgX19hdHRyaWJ1dGVfXygocmVncGFybSgzKSkpOwoKCgoKZXh0ZXJuIHZvaWQgc2hv d19mcmVlX2FyZWFzKHZvaWQpOwpleHRlcm4gdm9pZCBzaG93X2ZyZWVfYXJlYXNfbm9kZShwZ19k YXRhX3QgKnBnZGF0KTsKCmV4dGVybiB2b2lkIGNsZWFyX3BhZ2VfdGFibGVzKHN0cnVjdCBtbV9z dHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgaW50KTsKCnN0cnVjdCBwYWdlICogc2htZW1fbm9wYWdl KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLCBpbnQg bm9fc2hhcmUpOwpzdHJ1Y3QgZmlsZSAqc2htZW1fZmlsZV9zZXR1cChjaGFyICogbmFtZSwgbG9m Zl90IHNpemUpOwpleHRlcm4gdm9pZCBzaG1lbV9sb2NrKHN0cnVjdCBmaWxlICogZmlsZSwgaW50 IGxvY2spOwpleHRlcm4gaW50IHNobWVtX3plcm9fc2V0dXAoc3RydWN0IHZtX2FyZWFfc3RydWN0 ICopOwoKZXh0ZXJuIHZvaWQgemFwX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVu c2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplKTsKZXh0ZXJuIGludCBjb3B5 X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tX3N0cnVjdCAqZHN0LCBzdHJ1Y3QgbW1fc3RydWN0ICpzcmMs IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKTsKZXh0ZXJuIGludCByZW1hcF9wYWdlX3Jhbmdl KHVuc2lnbmVkIGxvbmcgZnJvbSwgdW5zaWduZWQgbG9uZyB0bywgdW5zaWduZWQgbG9uZyBzaXpl LCBwZ3Byb3RfdCBwcm90KTsKZXh0ZXJuIGludCB6ZXJvbWFwX3BhZ2VfcmFuZ2UodW5zaWduZWQg bG9uZyBmcm9tLCB1bnNpZ25lZCBsb25nIHNpemUsIHBncHJvdF90IHByb3QpOwoKZXh0ZXJuIGlu dCB2bXRydW5jYXRlKHN0cnVjdCBpbm9kZSAqIGlub2RlLCBsb2ZmX3Qgb2Zmc2V0KTsKZXh0ZXJu IHBtZF90ICpfX3BtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCwgdW5z aWduZWQgbG9uZyBhZGRyZXNzKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiBw dGVfdCAqcHRlX2FsbG9jKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwbWRfdCAqcG1kLCB1bnNpZ25l ZCBsb25nIGFkZHJlc3MpIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMykpKTsKZXh0ZXJuIGludCBo YW5kbGVfbW1fZmF1bHQoc3RydWN0IG1tX3N0cnVjdCAqbW0sc3RydWN0IHZtX2FyZWFfc3RydWN0 ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgaW50IHdyaXRlX2FjY2Vzcyk7CmV4dGVybiBp bnQgbWFrZV9wYWdlc19wcmVzZW50KHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBl bmQpOwpleHRlcm4gaW50IGFjY2Vzc19wcm9jZXNzX3ZtKHN0cnVjdCB0YXNrX3N0cnVjdCAqdHNr LCB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmJ1ZiwgaW50IGxlbiwgaW50IHdyaXRlKTsKZXh0 ZXJuIGludCBwdHJhY2VfcmVhZGRhdGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIHVuc2lnbmVk IGxvbmcgc3JjLCBjaGFyICpkc3QsIGludCBsZW4pOwpleHRlcm4gaW50IHB0cmFjZV93cml0ZWRh dGEoc3RydWN0IHRhc2tfc3RydWN0ICp0c2ssIGNoYXIgKiBzcmMsIHVuc2lnbmVkIGxvbmcgZHN0 LCBpbnQgbGVuKTsKZXh0ZXJuIGludCBwdHJhY2VfYXR0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAq dHNrKTsKZXh0ZXJuIGludCBwdHJhY2VfZGV0YWNoKHN0cnVjdCB0YXNrX3N0cnVjdCAqLCB1bnNp Z25lZCBpbnQpOwpleHRlcm4gdm9pZCBwdHJhY2VfZGlzYWJsZShzdHJ1Y3QgdGFza19zdHJ1Y3Qg Kik7CgoKCgoKCnN0YXRpYyBpbmxpbmUgcG1kX3QgKnBtZF9hbGxvYyhzdHJ1Y3QgbW1fc3RydWN0 ICptbSwgcGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKQp7CiAgICAgICAgaWYgKHBn ZF9ub25lKCpwZ2QpKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fcG1kX2FsbG9jKG1tLCBwZ2Qs IGFkZHJlc3MpOwogICAgICAgIHJldHVybiBwbWRfb2Zmc2V0KHBnZCwgYWRkcmVzcyk7Cn0KCmV4 dGVybiBpbnQgcGd0X2NhY2hlX3dhdGVyWzJdOwpleHRlcm4gaW50IGNoZWNrX3BndF9jYWNoZSh2 b2lkKTsKCmV4dGVybiB2b2lkIGZyZWVfYXJlYV9pbml0KHVuc2lnbmVkIGxvbmcgKiB6b25lc19z aXplKTsKZXh0ZXJuIHZvaWQgZnJlZV9hcmVhX2luaXRfbm9kZShpbnQgbmlkLCBwZ19kYXRhX3Qg KnBnZGF0LCBzdHJ1Y3QgcGFnZSAqcG1hcCwKICAgICAgICB1bnNpZ25lZCBsb25nICogem9uZXNf c2l6ZSwgdW5zaWduZWQgbG9uZyB6b25lX3N0YXJ0X3BhZGRyLAogICAgICAgIHVuc2lnbmVkIGxv bmcgKnpob2xlc19zaXplKTsKZXh0ZXJuIHZvaWQgbWVtX2luaXQodm9pZCk7CmV4dGVybiB2b2lk IHNob3dfbWVtKHZvaWQpOwpleHRlcm4gdm9pZCBzaV9tZW1pbmZvKHN0cnVjdCBzeXNpbmZvICog dmFsKTsKZXh0ZXJuIHZvaWQgc3dhcGluX3JlYWRhaGVhZChzd3BfZW50cnlfdCk7CgpleHRlcm4g c3RydWN0IGFkZHJlc3Nfc3BhY2Ugc3dhcHBlcl9zcGFjZTsKCgpzdGF0aWMgaW5saW5lIGludCBp c19wYWdlX2NhY2hlX2ZyZWVhYmxlKHN0cnVjdCBwYWdlICogcGFnZSkKewogICAgICAgIHJldHVy biAoKCYocGFnZSktPmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1ZmZlcnMgPT0gMTsKfQoK CgoKCnN0YXRpYyBpbmxpbmUgaW50IGV4Y2x1c2l2ZV9zd2FwX3BhZ2Uoc3RydWN0IHBhZ2UgKnBh Z2UpCnsKICAgICAgICBpZiAoIShfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IGNvbnN0YW50X3Rl c3RfYml0KCgwKSwoJihwYWdlKS0+ZmxhZ3MpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KCgwKSwoJihw YWdlKS0+ZmxhZ3MpKSkpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5 dGUgMHgwZiwweDBiIik7CiAgICAgICAgaWYgKCEoKHBhZ2UpLT5tYXBwaW5nID09ICZzd2FwcGVy X3NwYWNlKSkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIGlmICgoKCYocGFnZSkt PmNvdW50KS0+Y291bnRlcikgLSAhIXBhZ2UtPmJ1ZmZlcnMgIT0gMikKICAgICAgICAgICAgICAg IHJldHVybiAwOwogICAgICAgIHJldHVybiBzd2FwX2NvdW50KHBhZ2UpID09IDE7Cn0KCmV4dGVy biB2b2lkIF9fZnJlZV9wdGUocHRlX3QpOwoKCmV4dGVybiB2b2lkIGxvY2tfdm1hX21hcHBpbmdz KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqKTsKZXh0ZXJuIHZvaWQgdW5sb2NrX3ZtYV9tYXBwaW5n cyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lkIGluc2VydF92bV9zdHJ1Y3Qo c3RydWN0IG1tX3N0cnVjdCAqLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKik7CmV4dGVybiB2b2lk IF9faW5zZXJ0X3ZtX3N0cnVjdChzdHJ1Y3QgbW1fc3RydWN0ICosIHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqKTsKZXh0ZXJuIHZvaWQgYnVpbGRfbW1hcF9yYihzdHJ1Y3QgbW1fc3RydWN0ICopOwpl eHRlcm4gdm9pZCBleGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqKTsKCmV4dGVybiB1bnNpZ25l ZCBsb25nIGdldF91bm1hcHBlZF9hcmVhKHN0cnVjdCBmaWxlICosIHVuc2lnbmVkIGxvbmcsIHVu c2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcsIHVuc2lnbmVkIGxvbmcpOwoKZXh0ZXJuIHVuc2ln bmVkIGxvbmcgZG9fbW1hcF9wZ29mZihzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBh ZGRyLAogICAgICAgIHVuc2lnbmVkIGxvbmcgbGVuLCB1bnNpZ25lZCBsb25nIHByb3QsCiAgICAg ICAgdW5zaWduZWQgbG9uZyBmbGFnLCB1bnNpZ25lZCBsb25nIHBnb2ZmKTsKCnN0YXRpYyBpbmxp bmUgdW5zaWduZWQgbG9uZyBkb19tbWFwKHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25n IGFkZHIsCiAgICAgICAgdW5zaWduZWQgbG9uZyBsZW4sIHVuc2lnbmVkIGxvbmcgcHJvdCwKICAg ICAgICB1bnNpZ25lZCBsb25nIGZsYWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0KQp7CiAgICAgICAg dW5zaWduZWQgbG9uZyByZXQgPSAtMjI7CiAgICAgICAgaWYgKChvZmZzZXQgKyAoKChsZW4pKygx VUwgPDwgMTIpLTEpJih+KCgxVUwgPDwgMTIpLTEpKSkpIDwgb2Zmc2V0KQogICAgICAgICAgICAg ICAgZ290byBvdXQ7CiAgICAgICAgaWYgKCEob2Zmc2V0ICYgfih+KCgxVUwgPDwgMTIpLTEpKSkp CiAgICAgICAgICAgICAgICByZXQgPSBkb19tbWFwX3Bnb2ZmKGZpbGUsIGFkZHIsIGxlbiwgcHJv dCwgZmxhZywgb2Zmc2V0ID4+IDEyKTsKb3V0OgogICAgICAgIHJldHVybiByZXQ7Cn0KCmV4dGVy biBpbnQgZG9fbXVubWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKiwgdW5zaWduZWQgbG9uZywgc2l6ZV90 KTsKCmV4dGVybiB1bnNpZ25lZCBsb25nIGRvX2Jyayh1bnNpZ25lZCBsb25nLCB1bnNpZ25lZCBs b25nKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3ZtYV91bmxpbmsoc3RydWN0IG1tX3N0cnVjdCAq IG1tLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKiB2bWEsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAq IHByZXYpCnsKICAgICAgICBwcmV2LT52bV9uZXh0ID0gdm1hLT52bV9uZXh0OwogICAgICAgIHJi X2VyYXNlKCZ2bWEtPnZtX3JiLCAmbW0tPm1tX3JiKTsKICAgICAgICBpZiAobW0tPm1tYXBfY2Fj aGUgPT0gdm1hKQogICAgICAgICAgICAgICAgbW0tPm1tYXBfY2FjaGUgPSBwcmV2Owp9CgpzdGF0 aWMgaW5saW5lIGludCBjYW5fdm1hX21lcmdlKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSwg dW5zaWduZWQgbG9uZyB2bV9mbGFncykKewogICAgICAgIGlmICghdm1hLT52bV9maWxlICYmIHZt YS0+dm1fZmxhZ3MgPT0gdm1fZmxhZ3MpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAg ICBlbHNlCiAgICAgICAgICAgICAgICByZXR1cm4gMDsKfQoKc3RydWN0IHpvbmVfdDsKCmV4dGVy biB2b2lkIHJlbW92ZV9pbm9kZV9wYWdlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gdW5zaWduZWQg bG9uZyBwYWdlX3VudXNlKHN0cnVjdCBwYWdlICopOwpleHRlcm4gdm9pZCB0cnVuY2F0ZV9pbm9k ZV9wYWdlcyhzdHJ1Y3QgYWRkcmVzc19zcGFjZSAqLCBsb2ZmX3QpOwoKCmV4dGVybiBpbnQgZmls ZW1hcF9zeW5jKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqLCB1bnNpZ25lZCBsb25nLCBzaXplX3Qs IHVuc2lnbmVkIGludCk7CmV4dGVybiBzdHJ1Y3QgcGFnZSAqZmlsZW1hcF9ub3BhZ2Uoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICosIHVuc2lnbmVkIGxvbmcsIGludCk7CiMgNTcyICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9tbS5oIgpzdGF0aWMgaW5saW5lIGludCBleHBhbmRf c3RhY2soc3RydWN0IHZtX2FyZWFfc3RydWN0ICogdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3Mp CnsKICAgICAgICB1bnNpZ25lZCBsb25nIGdyb3c7CgoKCgoKCiAgICAgICAgYWRkcmVzcyAmPSAo figoMVVMIDw8IDEyKS0xKSk7CiAgICAgICAgZ3JvdyA9ICh2bWEtPnZtX3N0YXJ0IC0gYWRkcmVz cykgPj4gMTI7CiAgICAgICAgaWYgKHZtYS0+dm1fZW5kIC0gYWRkcmVzcyA+IGdldF9jdXJyZW50 KCktPnJsaW1bM10ucmxpbV9jdXIgfHwKICAgICAgICAgICAgKCh2bWEtPnZtX21tLT50b3RhbF92 bSArIGdyb3cpIDw8IDEyKSA+IGdldF9jdXJyZW50KCktPnJsaW1bOV0ucmxpbV9jdXIpCiAgICAg ICAgICAgICAgICByZXR1cm4gLTEyOwogICAgICAgICh2b2lkKSgmdm1hLT52bV9tbS0+cGFnZV90 YWJsZV9sb2NrKTsKICAgICAgICB2bWEtPnZtX3N0YXJ0ID0gYWRkcmVzczsKICAgICAgICB2bWEt PnZtX3Bnb2ZmIC09IGdyb3c7CiAgICAgICAgdm1hLT52bV9tbS0+dG90YWxfdm0gKz0gZ3JvdzsK ICAgICAgICBpZiAodm1hLT52bV9mbGFncyAmIDB4MDAwMDIwMDApCiAgICAgICAgICAgICAgICB2 bWEtPnZtX21tLT5sb2NrZWRfdm0gKz0gZ3JvdzsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAg ICAgICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92 bWEoc3RydWN0IG1tX3N0cnVjdCAqIG1tLCB1bnNpZ25lZCBsb25nIGFkZHIpOwpleHRlcm4gc3Ry dWN0IHZtX2FyZWFfc3RydWN0ICogZmluZF92bWFfcHJldihzdHJ1Y3QgbW1fc3RydWN0ICogbW0s IHVuc2lnbmVkIGxvbmcgYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc3RydWN0IHZtX2FyZWFfc3RydWN0ICoqcHByZXYpOwoKCgpzdGF0aWMgaW5saW5l IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIGZpbmRfdm1hX2ludGVyc2VjdGlvbihzdHJ1Y3QgbW1f c3RydWN0ICogbW0sIHVuc2lnbmVkIGxvbmcgc3RhcnRfYWRkciwgdW5zaWduZWQgbG9uZyBlbmRf YWRkcikKewogICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqIHZtYSA9IGZpbmRfdm1hKG1t LHN0YXJ0X2FkZHIpOwoKICAgICAgICBpZiAodm1hICYmIGVuZF9hZGRyIDw9IHZtYS0+dm1fc3Rh cnQpCiAgICAgICAgICAgICAgICB2bWEgPSAoKHZvaWQgKikwKTsKICAgICAgICByZXR1cm4gdm1h Owp9CgpleHRlcm4gc3RydWN0IHZtX2FyZWFfc3RydWN0ICpmaW5kX2V4dGVuZF92bWEoc3RydWN0 IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcik7CiMgMTUgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NsYWIuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAxNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvc2xhYi5oIiAyCiMgNDggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3NsYWIuaCIKZXh0ZXJuIHZvaWQga21lbV9jYWNoZV9pbml0KHZvaWQpOwpleHRlcm4g dm9pZCBrbWVtX2NhY2hlX3NpemVzX2luaXQodm9pZCk7CgpleHRlcm4ga21lbV9jYWNoZV90ICpr bWVtX2ZpbmRfZ2VuZXJhbF9jYWNoZXAoc2l6ZV90LCBpbnQgZ2ZwZmxhZ3MpOwpleHRlcm4ga21l bV9jYWNoZV90ICprbWVtX2NhY2hlX2NyZWF0ZShjb25zdCBjaGFyICosIHNpemVfdCwgc2l6ZV90 LCB1bnNpZ25lZCBsb25nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2 b2lkICgqKSh2b2lkICosIGttZW1fY2FjaGVfdCAqLCB1bnNpZ25lZCBsb25nKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKikodm9pZCAqLCBrbWVtX2NhY2hl X3QgKiwgdW5zaWduZWQgbG9uZykpOwpleHRlcm4gaW50IGttZW1fY2FjaGVfZGVzdHJveShrbWVt X2NhY2hlX3QgKik7CmV4dGVybiBpbnQga21lbV9jYWNoZV9zaHJpbmsoa21lbV9jYWNoZV90ICop OwpleHRlcm4gdm9pZCAqa21lbV9jYWNoZV9hbGxvYyhrbWVtX2NhY2hlX3QgKiwgaW50KTsKZXh0 ZXJuIHZvaWQga21lbV9jYWNoZV9mcmVlKGttZW1fY2FjaGVfdCAqLCB2b2lkICopOwoKZXh0ZXJu IHZvaWQgKmttYWxsb2Moc2l6ZV90LCBpbnQpOwpleHRlcm4gdm9pZCBrZnJlZShjb25zdCB2b2lk ICopOwoKZXh0ZXJuIGludCBrbWVtX2NhY2hlX3JlYXAoaW50KSBfX2F0dHJpYnV0ZV9fKChyZWdw YXJtKDMpKSk7CmV4dGVybiBpbnQgc2xhYmluZm9fcmVhZF9wcm9jKGNoYXIgKnBhZ2UsIGNoYXIg KipzdGFydCwgb2ZmX3Qgb2ZmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg Y291bnQsIGludCAqZW9mLCB2b2lkICpkYXRhKTsKZXh0ZXJuIGludCBzbGFiaW5mb193cml0ZV9w cm9jKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyICpidWZmZXIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgY291bnQsIHZvaWQgKmRhdGEpOwoKCmV4dGVybiBr bWVtX2NhY2hlX3QgKnZtX2FyZWFfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICptbV9jYWNo ZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKm5hbWVzX2NhY2hlcDsKZXh0ZXJuIGttZW1fY2FjaGVf dCAqZmlsZXNfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpmaWxwX2NhY2hlcDsKZXh0ZXJu IGttZW1fY2FjaGVfdCAqZHF1b3RfY2FjaGVwOwpleHRlcm4ga21lbV9jYWNoZV90ICpiaF9jYWNo ZXA7CmV4dGVybiBrbWVtX2NhY2hlX3QgKmZzX2NhY2hlcDsKZXh0ZXJuIGttZW1fY2FjaGVfdCAq c2lnYWN0X2NhY2hlcDsKIyAzMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Bj aS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3NjYXR0ZXJsaXN0 LmgiIDEKCgoKc3RydWN0IHNjYXR0ZXJsaXN0IHsKICAgIGNoYXIgKiBhZGRyZXNzOwogICAgY2hh ciAqIGFsdF9hZGRyZXNzOwoKICAgIHVuc2lnbmVkIGludCBsZW5ndGg7Cn07CiMgMzIgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3N0cmluZy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2FzbS9wY2kuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2FzbS9pby5oIiAxCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaW8u aCIgMgojIDQ2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaW8uaCIKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDEKCgoKIyAxICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9zY2hlZC5oIiAxCiMgNSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdm1hbGxvYy5oIiAyCiMgMSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbW0uaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3ZtYWxsb2MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC92bWFsbG9jLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3BndGFibGUuaCIgMQojIDkgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3ZtYWxsb2MuaCIgMgoKCgoKCnN0cnVjdCB2bV9zdHJ1Y3QgewogICAgICAgIHVuc2ln bmVkIGxvbmcgZmxhZ3M7CiAgICAgICAgdm9pZCAqIGFkZHI7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBzaXplOwogICAgICAgIHN0cnVjdCB2bV9zdHJ1Y3QgKiBuZXh0Owp9OwoKZXh0ZXJuIHN0cnVj dCB2bV9zdHJ1Y3QgKiBnZXRfdm1fYXJlYSAodW5zaWduZWQgbG9uZyBzaXplLCB1bnNpZ25lZCBs b25nIGZsYWdzKTsKZXh0ZXJuIHZvaWQgdmZyZWUodm9pZCAqIGFkZHIpOwpleHRlcm4gdm9pZCAq IF9fdm1hbGxvYyAodW5zaWduZWQgbG9uZyBzaXplLCBpbnQgZ2ZwX21hc2ssIHBncHJvdF90IHBy b3QpOwpleHRlcm4gbG9uZyB2cmVhZChjaGFyICpidWYsIGNoYXIgKmFkZHIsIHVuc2lnbmVkIGxv bmcgY291bnQpOwpleHRlcm4gdm9pZCB2bWZyZWVfYXJlYV9wYWdlcyh1bnNpZ25lZCBsb25nIGFk ZHJlc3MsIHVuc2lnbmVkIGxvbmcgc2l6ZSk7CmV4dGVybiBpbnQgdm1hbGxvY19hcmVhX3BhZ2Vz KHVuc2lnbmVkIGxvbmcgYWRkcmVzcywgdW5zaWduZWQgbG9uZyBzaXplLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgZ2ZwX21hc2ssIHBncHJvdF90IHByb3QpOwoKCgoKCnN0YXRp YyBpbmxpbmUgdm9pZCAqIHZtYWxsb2MgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJl dHVybiBfX3ZtYWxsb2Moc2l6ZSwgKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4ODAgfCAweDIwMCB8 IDB4MTAwKSB8IDB4MDIsICgocGdwcm90X3QpIHsgKCgoMHgwMDEgfCAweDAwMiB8IDB4MDQwIHwg MHgwMjApKSB8IDB4MTAwKSB9ICkpOwp9CgoKCgoKc3RhdGljIGlubGluZSB2b2lkICogdm1hbGxv Y19kbWEgKHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJldHVybiBfX3ZtYWxsb2Moc2l6 ZSwgKDB4MjAgfCAweDEwIHwgMHg0MCB8IDB4ODAgfCAweDIwMCB8IDB4MTAwKXwweDAxLCAoKHBn cHJvdF90KSB7ICgoKDB4MDAxIHwgMHgwMDIgfCAweDA0MCB8IDB4MDIwKSkgfCAweDEwMCkgfSAp KTsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIHZtYWxsb2NfMzIodW5zaWduZWQgbG9uZyBz aXplKQp7CiAgICAgICAgcmV0dXJuIF9fdm1hbGxvYyhzaXplLCAoMHgyMCB8IDB4MTAgfCAweDQw IHwgMHg4MCB8IDB4MjAwIHwgMHgxMDApLCAoKHBncHJvdF90KSB7ICgoKDB4MDAxIHwgMHgwMDIg fCAweDA0MCB8IDB4MDIwKSkgfCAweDEwMCkgfSApKTsKfQoKCgoKCmV4dGVybiByd2xvY2tfdCB2 bWxpc3RfbG9jazsKCmV4dGVybiBzdHJ1Y3Qgdm1fc3RydWN0ICogdm1saXN0OwojIDQ3ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaW8uaCIgMgojIDY2ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHZp cnRfdG9fcGh5cyh2b2xhdGlsZSB2b2lkICogYWRkcmVzcykKewogICAgICAgIHJldHVybiAoKHVu c2lnbmVkIGxvbmcpKGFkZHJlc3MpLSgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKTsKfQoK c3RhdGljIGlubGluZSB2b2lkICogcGh5c190b192aXJ0KHVuc2lnbmVkIGxvbmcgYWRkcmVzcykK ewogICAgICAgIHJldHVybiAoKHZvaWQgKikoKHVuc2lnbmVkIGxvbmcpKGFkZHJlc3MpKygodW5z aWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKSk7Cn0KCgoKCgoKZXh0ZXJuIHZvaWQgKiBfX2lvcmVt YXAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSwgdW5zaWduZWQgbG9u ZyBmbGFncyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgKiBpb3JlbWFwICh1bnNpZ25lZCBsb25nIG9m ZnNldCwgdW5zaWduZWQgbG9uZyBzaXplKQp7CiAgICAgICAgcmV0dXJuIF9faW9yZW1hcChvZmZz ZXQsIHNpemUsIDApOwp9CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCAqIGlvcmVtYXBfbm9jYWNo ZSAodW5zaWduZWQgbG9uZyBvZmZzZXQsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJl dHVybiBfX2lvcmVtYXAob2Zmc2V0LCBzaXplLCAweDAxMCk7Cn0KCmV4dGVybiB2b2lkIGlvdW5t YXAodm9pZCAqYWRkcik7CiMgMTYwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20v aW8uaCIKc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc2lnbmF0dXJlKHVuc2lnbmVkIGxvbmcgaW9f YWRkciwKICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpzaWduYXR1cmUsIGludCBsZW5ndGgp CnsKICAgICAgICBpbnQgcmV0dmFsID0gMDsKICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBp ZiAoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9fYWRkcikpKSAhPSAq c2lnbmF0dXJlKQogICAgICAgICAgICAgICAgICAgICAgICBnb3RvIG91dDsKICAgICAgICAgICAg ICAgIGlvX2FkZHIrKzsKICAgICAgICAgICAgICAgIHNpZ25hdHVyZSsrOwogICAgICAgICAgICAg ICAgbGVuZ3RoLS07CiAgICAgICAgfSB3aGlsZSAobGVuZ3RoKTsKICAgICAgICByZXR2YWwgPSAx OwpvdXQ6CiAgICAgICAgcmV0dXJuIHJldHZhbDsKfQoKc3RhdGljIGlubGluZSBpbnQgaXNhX2No ZWNrX3NpZ25hdHVyZSh1bnNpZ25lZCBsb25nIGlvX2FkZHIsCiAgICAgICAgY29uc3QgdW5zaWdu ZWQgY2hhciAqc2lnbmF0dXJlLCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgaW50IHJldHZhbCA9IDA7 CiAgICAgICAgZG8gewogICAgICAgICAgICAgICAgaWYgKCgqKHZvbGF0aWxlIHVuc2lnbmVkIGNo YXIgKikgKCh2b2lkICopKCgoY2hhciAqKSgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkp ICsgKGlvX2FkZHIpKSkpICE9ICpzaWduYXR1cmUpCiAgICAgICAgICAgICAgICAgICAgICAgIGdv dG8gb3V0OwogICAgICAgICAgICAgICAgaW9fYWRkcisrOwogICAgICAgICAgICAgICAgc2lnbmF0 dXJlKys7CiAgICAgICAgICAgICAgICBsZW5ndGgtLTsKICAgICAgICB9IHdoaWxlIChsZW5ndGgp OwogICAgICAgIHJldHZhbCA9IDE7Cm91dDoKICAgICAgICByZXR1cm4gcmV0dmFsOwp9CiMgMjg1 ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaW8uaCIKc3RhdGljIGlubGluZSB1 bnNpZ25lZCBjaGFyIGluYih1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGNoYXIgX3Y7 IF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJiIiAiICUiICJ3IiAiMSwlIiAiIiAiMCIgOiAi PWEiIChfdikgOiAiTmQiIChwb3J0KSApOyByZXR1cm4gX3Y7IH0gc3RhdGljIGlubGluZSB1bnNp Z25lZCBjaGFyIGluYl9wKHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgdW5zaWduZWQgY2hhciBfdjsg X19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgImIiICIgJSIgInciICIxLCUiICIiICIwIiAiXG5v dXRiICUlYWwsJDB4ODAiIDogIj1hIiAoX3YpIDogIk5kIiAocG9ydCkgKTsgcmV0dXJuIF92OyB9 CgoKc3RhdGljIGlubGluZSB1bnNpZ25lZCBzaG9ydCBpbncodW5zaWduZWQgc2hvcnQgcG9ydCkg eyB1bnNpZ25lZCBzaG9ydCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJpbiIgInciICIgJSIg InciICIxLCUiICIiICIwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBvcnQpICk7IHJldHVybiBfdjsg fSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIHNob3J0IGlud19wKHVuc2lnbmVkIHNob3J0IHBvcnQp IHsgdW5zaWduZWQgc2hvcnQgX3Y7IF9fYXNtX18gX192b2xhdGlsZV9fICgiaW4iICJ3IiAiICUi ICJ3IiAiMSwlIiAiIiAiMCIgIlxub3V0YiAlJWFsLCQweDgwIiA6ICI9YSIgKF92KSA6ICJOZCIg KHBvcnQpICk7IHJldHVybiBfdjsgfQoKCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGlubCh1 bnNpZ25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBfX3ZvbGF0aWxl X18gKCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiA6ICI9YSIgKF92KSA6ICJOZCIgKHBv cnQpICk7IHJldHVybiBfdjsgfSBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBpbmxfcCh1bnNp Z25lZCBzaG9ydCBwb3J0KSB7IHVuc2lnbmVkIGludCBfdjsgX19hc21fXyBfX3ZvbGF0aWxlX18g KCJpbiIgImwiICIgJSIgInciICIxLCUiICIiICIwIiAiXG5vdXRiICUlYWwsJDB4ODAiIDogIj1h IiAoX3YpIDogIk5kIiAocG9ydCkgKTsgcmV0dXJuIF92OyB9CgoKc3RhdGljIGlubGluZSB2b2lk IG91dGIodW5zaWduZWQgY2hhciB2YWx1ZSwgdW5zaWduZWQgc2hvcnQgcG9ydCkgeyBfX2FzbV9f IF9fdm9sYXRpbGVfXyAoIm91dCIgImIiICIgJSIgImIiICIwLCUiICJ3IiAiMSIgOiA6ICJhIiAo dmFsdWUpLCAiTmQiIChwb3J0KSk7IH0gc3RhdGljIGlubGluZSB2b2lkIG91dGJfcCh1bnNpZ25l ZCBjaGFyIHZhbHVlLCB1bnNpZ25lZCBzaG9ydCBwb3J0KSB7IF9fYXNtX18gX192b2xhdGlsZV9f ICgib3V0IiAiYiIgIiAlIiAiYiIgIjAsJSIgInciICIxIiAiXG5vdXRiICUlYWwsJDB4ODAiIDog OiAiYSIgKHZhbHVlKSwgIk5kIiAocG9ydCkpO30Kc3RhdGljIGlubGluZSB2b2lkIG91dHcodW5z aWduZWQgc2hvcnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0 aWxlX18gKCJvdXQiICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiIDogOiAiYSIgKHZhbHVlKSwg Ik5kIiAocG9ydCkpOyB9IHN0YXRpYyBpbmxpbmUgdm9pZCBvdXR3X3AodW5zaWduZWQgc2hvcnQg dmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQi ICJ3IiAiICUiICJ3IiAiMCwlIiAidyIgIjEiICJcbm91dGIgJSVhbCwkMHg4MCIgOiA6ICJhIiAo dmFsdWUpLCAiTmQiIChwb3J0KSk7fQpzdGF0aWMgaW5saW5lIHZvaWQgb3V0bCh1bnNpZ25lZCBp bnQgdmFsdWUsIHVuc2lnbmVkIHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJv dXQiICJsIiAiICUiICIwLCUiICJ3IiAiMSIgOiA6ICJhIiAodmFsdWUpLCAiTmQiIChwb3J0KSk7 IH0gc3RhdGljIGlubGluZSB2b2lkIG91dGxfcCh1bnNpZ25lZCBpbnQgdmFsdWUsIHVuc2lnbmVk IHNob3J0IHBvcnQpIHsgX19hc21fXyBfX3ZvbGF0aWxlX18gKCJvdXQiICJsIiAiICUiICIwLCUi ICJ3IiAiMSIgIlxub3V0YiAlJWFsLCQweDgwIiA6IDogImEiICh2YWx1ZSksICJOZCIgKHBvcnQp KTt9CgpzdGF0aWMgaW5saW5lIHZvaWQgaW5zYih1bnNpZ25lZCBzaG9ydCBwb3J0LCB2b2lkICog YWRkciwgdW5zaWduZWQgbG9uZyBjb3VudCkgeyBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoInJlcCA7 IGlucyIgImIiIDogIj1EIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChh ZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIGluc3codW5zaWduZWQgc2hv cnQgcG9ydCwgdm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgY291bnQpIHsgX19hc21fXyBfX3Zv bGF0aWxlX18gKCJyZXAgOyBpbnMiICJ3IiA6ICI9RCIgKGFkZHIpLCAiPWMiIChjb3VudCkgOiAi ZCIgKHBvcnQpLCIwIiAoYWRkciksIjEiIChjb3VudCkpOyB9CnN0YXRpYyBpbmxpbmUgdm9pZCBp bnNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50 KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgaW5zIiAibCIgOiAiPUQiIChhZGRyKSwg Ij1jIiAoY291bnQpIDogImQiIChwb3J0KSwiMCIgKGFkZHIpLCIxIiAoY291bnQpKTsgfQoKc3Rh dGljIGlubGluZSB2b2lkIG91dHNiKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBh ZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsg b3V0cyIgImIiIDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChh ZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGluZSB2b2lkIG91dHN3KHVuc2lnbmVkIHNo b3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNpZ25lZCBsb25nIGNvdW50KSB7IF9fYXNt X18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgInciIDogIj1TIiAoYWRkciksICI9YyIgKGNv dW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIgKGNvdW50KSk7IH0Kc3RhdGljIGlubGlu ZSB2b2lkIG91dHNsKHVuc2lnbmVkIHNob3J0IHBvcnQsIGNvbnN0IHZvaWQgKiBhZGRyLCB1bnNp Z25lZCBsb25nIGNvdW50KSB7IF9fYXNtX18gX192b2xhdGlsZV9fICgicmVwIDsgb3V0cyIgImwi IDogIj1TIiAoYWRkciksICI9YyIgKGNvdW50KSA6ICJkIiAocG9ydCksIjAiIChhZGRyKSwiMSIg KGNvdW50KSk7IH0KIyAzNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3BjaS5o IiAyCgpzdHJ1Y3QgcGNpX2RldjsKIyA0NCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv YXNtL3BjaS5oIgpleHRlcm4gdm9pZCAqcGNpX2FsbG9jX2NvbnNpc3RlbnQoc3RydWN0IHBjaV9k ZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpOwojIDU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9hc20vcGNpLmgiCmV4dGVybiB2b2lkIHBjaV9mcmVlX2NvbnNpc3RlbnQoc3RydWN0IHBj aV9kZXYgKmh3ZGV2LCBzaXplX3Qgc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICp2YWRkciwgZG1hX2FkZHJfdCBkbWFfaGFuZGxlKTsKCgoKCgoKCnN0YXRpYyBpbmxp bmUgZG1hX2FkZHJfdCBwY2lfbWFwX3NpbmdsZShzdHJ1Y3QgcGNpX2RldiAqaHdkZXYsIHZvaWQg KnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBzaXpl LCBpbnQgZGlyZWN0aW9uKQp7CiAgICAgICAgaWYgKGRpcmVjdGlvbiA9PSAzKQogICAgICAgICAg ICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIHJl dHVybiB2aXJ0X3RvX3BoeXMocHRyKTsKfQojIDc5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9hc20vcGNpLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfdW5tYXBfc2luZ2xlKHN0cnVj dCBwY2lfZGV2ICpod2RldiwgZG1hX2FkZHJfdCBkbWFfYWRkciwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90IHNpemUsIGludCBkaXJlY3Rpb24pCnsKICAgICAgICBp ZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygi LmJ5dGUgMHgwZiwweDBiIik7Cgp9CiMgMTAyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vcGNpLmgiCnN0YXRpYyBpbmxpbmUgaW50IHBjaV9tYXBfc2coc3RydWN0IHBjaV9kZXYg Kmh3ZGV2LCBzdHJ1Y3Qgc2NhdHRlcmxpc3QgKnNnLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBuZW50cywgaW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChkaXJlY3Rpb24gPT0g MykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4MGIi KTsKICAgICAgICByZXR1cm4gbmVudHM7Cn0KCgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgcGNpX3Vu bWFwX3NnKHN0cnVjdCBwY2lfZGV2ICpod2Rldiwgc3RydWN0IHNjYXR0ZXJsaXN0ICpzZywKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgbmVudHMsIGludCBkaXJlY3Rpb24pCnsK ICAgICAgICBpZiAoZGlyZWN0aW9uID09IDMpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7Cgp9CiMgMTMxICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vcGNpLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNfc2lu Z2xlKHN0cnVjdCBwY2lfZGV2ICpod2RldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgZG1hX2FkZHJfdCBkbWFfaGFuZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzaXplX3Qgc2l6ZSwgaW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChk aXJlY3Rpb24gPT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0 ZSAweDBmLDB4MGIiKTsKCn0KCgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBwY2lfZG1hX3N5bmNf c2coc3RydWN0IHBjaV9kZXYgKmh3ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHN0cnVjdCBzY2F0dGVybGlzdCAqc2csCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG5lbGVtcywgaW50IGRpcmVjdGlvbikKewogICAgICAgIGlmIChkaXJlY3Rpb24g PT0gMykKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fKCIuYnl0ZSAweDBmLDB4 MGIiKTsKCn0KCgoKCgoKc3RhdGljIGlubGluZSBpbnQgcGNpX2RtYV9zdXBwb3J0ZWQoc3RydWN0 IHBjaV9kZXYgKmh3ZGV2LCBkbWFfYWRkcl90IG1hc2spCnsKCgoKCgogICAgICAgIGlmKG1hc2sg PCAweDAwZmZmZmZmKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CgogICAgICAgIHJldHVybiAx Owp9CiMgMTgzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGNpLmgiCnN0YXRp YyBpbmxpbmUgaW50IHBjaV9jb250cm9sbGVyX251bShzdHJ1Y3QgcGNpX2RldiAqZGV2KQp7CiAg ICAgICAgcmV0dXJuIDA7Cn0KCgpleHRlcm4gaW50IHBjaV9tbWFwX3BhZ2VfcmFuZ2Uoc3RydWN0 IHBjaV9kZXYgKmRldiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBlbnVtIHBjaV9tbWFwX3N0YXRlIG1tYXBfc3RhdGUsIGludCB3cml0 ZV9jb21iaW5lKTsKIyA2MDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3Bj aS5oIiAyCiMgNjY5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wY2kuaCIK c3RhdGljIGlubGluZSBpbnQgcGNpX21vZHVsZV9pbml0KHN0cnVjdCBwY2lfZHJpdmVyICpkcnYp CnsKICAgICAgICBpbnQgcmMgPSBwY2lfcmVnaXN0ZXJfZHJpdmVyIChkcnYpOwoKICAgICAgICBp ZiAocmMgPiAwKQogICAgICAgICAgICAgICAgcmV0dXJuIDA7CiMgNjg0ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wY2kuaCIKICAgICAgICBpZiAocmMgPT0gMCkKICAgICAg ICAgICAgICAgIHJjID0gLTE5OwoKCgoKICAgICAgICBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgKGRy dik7CgogICAgICAgIHJldHVybiByYzsKfQojIDcxNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvcGNpLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCAqcGNpX2dldF9kcnZkYXRhIChz dHJ1Y3QgcGNpX2RldiAqcGRldikKewogICAgICAgIHJldHVybiBwZGV2LT5kcml2ZXJfZGF0YTsK fQoKc3RhdGljIGlubGluZSB2b2lkIHBjaV9zZXRfZHJ2ZGF0YSAoc3RydWN0IHBjaV9kZXYgKnBk ZXYsIHZvaWQgKmRhdGEpCnsKICAgICAgICBwZGV2LT5kcml2ZXJfZGF0YSA9IGRhdGE7Cn0KIyA3 MzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3BjaS5oIgpzdHJ1Y3QgcGNp X2ZpeHVwIHsKICAgICAgICBpbnQgcGFzczsKICAgICAgICB1MTYgdmVuZG9yLCBkZXZpY2U7CiAg ICAgICAgdm9pZCAoKmhvb2spKHN0cnVjdCBwY2lfZGV2ICpkZXYpOwp9OwoKZXh0ZXJuIHN0cnVj dCBwY2lfZml4dXAgcGNpYmlvc19maXh1cHNbXTsKCgoKCnZvaWQgcGNpX2ZpeHVwX2RldmljZShp bnQgcGFzcywgc3RydWN0IHBjaV9kZXYgKmRldik7CgpleHRlcm4gaW50IHBjaV9wY2lfcHJvYmxl bXM7CiMgMTQ5ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9pbml0LmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2luaXQuaCIgMgojIDQ4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbml0 LmgiCnR5cGVkZWYgaW50ICgqaW5pdGNhbGxfdCkodm9pZCk7CnR5cGVkZWYgdm9pZCAoKmV4aXRj YWxsX3QpKHZvaWQpOwoKZXh0ZXJuIGluaXRjYWxsX3QgX19pbml0Y2FsbF9zdGFydCwgX19pbml0 Y2FsbF9lbmQ7CiMgNjEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2luaXQu aCIKc3RydWN0IGtlcm5lbF9wYXJhbSB7CiAgICAgICAgY29uc3QgY2hhciAqc3RyOwogICAgICAg IGludCAoKnNldHVwX2Z1bmMpKGNoYXIgKik7Cn07CgpleHRlcm4gc3RydWN0IGtlcm5lbF9wYXJh bSBfX3NldHVwX3N0YXJ0LCBfX3NldHVwX2VuZDsKIyAxNTAgIjgxMzl0b28uYyIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2lvcG9ydC5oIiAxCiMgMTUxICI4MTM5 dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXRkZXZp Y2UuaCIgMQojIDI4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXRkZXZp Y2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pZi5oIiAxCiMg MjIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2lmLmgiCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvdHlwZXMuaCIgMQojIDIzICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvc29ja2V0LmgiIDEKIyAyNCAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvaWYuaCIgMgojIDU4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9pZi5oIgpzdHJ1Y3QgaWZtYXAKewogICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX3N0 YXJ0OwogICAgICAgIHVuc2lnbmVkIGxvbmcgbWVtX2VuZDsKICAgICAgICB1bnNpZ25lZCBzaG9y dCBiYXNlX2FkZHI7CiAgICAgICAgdW5zaWduZWQgY2hhciBpcnE7CiAgICAgICAgdW5zaWduZWQg Y2hhciBkbWE7CiAgICAgICAgdW5zaWduZWQgY2hhciBwb3J0OwoKfTsKIyA3NiAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaWYuaCIKc3RydWN0IGlmcmVxCnsKCgogICAgICAg IHVuaW9uCiAgICAgICAgewogICAgICAgICAgICAgICAgY2hhciBpZnJuX25hbWVbMTZdOwogICAg ICAgIH0gaWZyX2lmcm47CgogICAgICAgIHVuaW9uIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBz b2NrYWRkciBpZnJ1X2FkZHI7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qgc29ja2FkZHIgaWZydV9k c3RhZGRyOwogICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmcnVfYnJvYWRhZGRyOwog ICAgICAgICAgICAgICAgc3RydWN0IHNvY2thZGRyIGlmcnVfbmV0bWFzazsKICAgICAgICAgICAg ICAgIHN0cnVjdCBzb2NrYWRkciBpZnJ1X2h3YWRkcjsKICAgICAgICAgICAgICAgIHNob3J0IGlm cnVfZmxhZ3M7CiAgICAgICAgICAgICAgICBpbnQgaWZydV9pdmFsdWU7CiAgICAgICAgICAgICAg ICBpbnQgaWZydV9tdHU7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZtYXAgaWZydV9tYXA7CiAg ICAgICAgICAgICAgICBjaGFyIGlmcnVfc2xhdmVbMTZdOwogICAgICAgICAgICAgICAgY2hhciBp ZnJ1X25ld25hbWVbMTZdOwogICAgICAgICAgICAgICAgY2hhciAqIGlmcnVfZGF0YTsKICAgICAg ICB9IGlmcl9pZnJ1Owp9OwojIDEyNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvaWYuaCIKc3RydWN0IGlmY29uZgp7CiAgICAgICAgaW50IGlmY19sZW47CiAgICAgICAgdW5p b24KICAgICAgICB7CiAgICAgICAgICAgICAgICBjaGFyICogaWZjdV9idWY7CiAgICAgICAgICAg ICAgICBzdHJ1Y3QgaWZyZXEgKmlmY3VfcmVxOwogICAgICAgIH0gaWZjX2lmY3U7Cn07CiMgMjkg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaWZfZXRoZXIuaCIgMQojIDkyICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pZl9ldGhlci5oIgpzdHJ1Y3QgZXRo aGRyCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGhfZGVzdFs2XTsKICAgICAgICB1bnNpZ25lZCBj aGFyIGhfc291cmNlWzZdOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGhfcHJvdG87Cn07CiMgMzAg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgiIDEKCgoKc3Ry dWN0IHNvY2thZGRyX3BrdAp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc3BrdF9mYW1pbHk7CiAg ICAgICAgdW5zaWduZWQgY2hhciBzcGt0X2RldmljZVsxNF07CiAgICAgICAgdW5zaWduZWQgc2hv cnQgc3BrdF9wcm90b2NvbDsKfTsKCnN0cnVjdCBzb2NrYWRkcl9sbAp7CiAgICAgICAgdW5zaWdu ZWQgc2hvcnQgc2xsX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBzbGxfcHJvdG9jb2w7 CiAgICAgICAgaW50IHNsbF9pZmluZGV4OwogICAgICAgIHVuc2lnbmVkIHNob3J0IHNsbF9oYXR5 cGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBzbGxfcGt0dHlwZTsKICAgICAgICB1bnNpZ25lZCBj aGFyIHNsbF9oYWxlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHNsbF9hZGRyWzhdOwp9OwojIDQz ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pZl9wYWNrZXQuaCIKc3RydWN0 IHRwYWNrZXRfc3RhdHMKewogICAgICAgIHVuc2lnbmVkIGludCB0cF9wYWNrZXRzOwogICAgICAg IHVuc2lnbmVkIGludCB0cF9kcm9wczsKfTsKCnN0cnVjdCB0cGFja2V0X2hkcgp7CiAgICAgICAg dW5zaWduZWQgbG9uZyB0cF9zdGF0dXM7CgoKCgoKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfbGVu OwogICAgICAgIHVuc2lnbmVkIGludCB0cF9zbmFwbGVuOwogICAgICAgIHVuc2lnbmVkIHNob3J0 IHRwX21hYzsKICAgICAgICB1bnNpZ25lZCBzaG9ydCB0cF9uZXQ7CiAgICAgICAgdW5zaWduZWQg aW50IHRwX3NlYzsKICAgICAgICB1bnNpZ25lZCBpbnQgdHBfdXNlYzsKfTsKIyA4MiAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaWZfcGFja2V0LmgiCnN0cnVjdCB0cGFja2V0 X3JlcQp7CiAgICAgICAgdW5zaWduZWQgaW50IHRwX2Jsb2NrX3NpemU7CiAgICAgICAgdW5zaWdu ZWQgaW50IHRwX2Jsb2NrX25yOwogICAgICAgIHVuc2lnbmVkIGludCB0cF9mcmFtZV9zaXplOwog ICAgICAgIHVuc2lnbmVkIGludCB0cF9mcmFtZV9ucjsKfTsKCnN0cnVjdCBwYWNrZXRfbXJlcQp7 CiAgICAgICAgaW50IG1yX2lmaW5kZXg7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgbXJfdHlwZTsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBtcl9hbGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgbXJf YWRkcmVzc1s4XTsKfTsKIyAzMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv bmV0ZGV2aWNlLmgiIDIKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2F0 b21pYy5oIiAxCiMgMzMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRl dmljZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2NhY2hlLmgi IDEKIyAzNCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYnl0ZW9yZGVyLmgiIDEK IyAzNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiIDIK CgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMg MzggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCgoK CgpzdHJ1Y3QgZGl2ZXJ0X2JsazsKIyA5NiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvbmV0ZGV2aWNlLmgiCnN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzCnsKICAgICAgICB1bnNp Z25lZCBsb25nIHJ4X3BhY2tldHM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9wYWNrZXRzOwog ICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfYnl0ZXM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9i eXRlczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBs b25nIHR4X2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2Ryb3BwZWQ7CiAgICAgICAg dW5zaWduZWQgbG9uZyB0eF9kcm9wcGVkOwogICAgICAgIHVuc2lnbmVkIGxvbmcgbXVsdGljYXN0 OwogICAgICAgIHVuc2lnbmVkIGxvbmcgY29sbGlzaW9uczsKCgogICAgICAgIHVuc2lnbmVkIGxv bmcgcnhfbGVuZ3RoX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X292ZXJfZXJyb3Jz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfY3JjX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBs b25nIHJ4X2ZyYW1lX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2ZpZm9fZXJyb3Jz OwogICAgICAgIHVuc2lnbmVkIGxvbmcgcnhfbWlzc2VkX2Vycm9yczsKCgogICAgICAgIHVuc2ln bmVkIGxvbmcgdHhfYWJvcnRlZF9lcnJvcnM7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9jYXJy aWVyX2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X2ZpZm9fZXJyb3JzOwogICAgICAg IHVuc2lnbmVkIGxvbmcgdHhfaGVhcnRiZWF0X2Vycm9yczsKICAgICAgICB1bnNpZ25lZCBsb25n IHR4X3dpbmRvd19lcnJvcnM7CgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJ4X2NvbXByZXNzZWQ7 CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9jb21wcmVzc2VkOwp9OwoKCgplbnVtIHsKICAgICAg ICBJRl9QT1JUX1VOS05PV04gPSAwLAogICAgICAgIElGX1BPUlRfMTBCQVNFMiwKICAgICAgICBJ Rl9QT1JUXzEwQkFTRVQsCiAgICAgICAgSUZfUE9SVF9BVUksCiAgICAgICAgSUZfUE9SVF8xMDBC QVNFVCwKICAgICAgICBJRl9QT1JUXzEwMEJBU0VUWCwKICAgICAgICBJRl9QT1JUXzEwMEJBU0VG WAp9OwoKCgpleHRlcm4gY29uc3QgY2hhciAqaWZfcG9ydF90ZXh0W107CgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgiIDEKIyAxNDYgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyAxOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvc2tidWZmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9rZXJuZWwuaCIgMQojIDE5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3NjaGVkLmgiIDEKIyAyMCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2ti dWZmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC90aW1lLmgi IDEKIyAyMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiIDIK IyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jYWNoZS5oIiAxCiMgMjIg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9hdG9taWMuaCIgMQojIDI0ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2FzbS90eXBlcy5oIiAxCiMgMjUgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvc3BpbmxvY2suaCIgMQojIDI2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9za2J1ZmYuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L21tLmgiIDEKIyAyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGlu dXgvc2tidWZmLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9o aWdobWVtLmgiIDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9j b25maWcuaCIgMQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2hpZ2ht ZW0uaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgi IDEKCgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9jb25maWcuaCIg MQojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHJvY2Vzc29yLmgiIDEKIyA2ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGdhbGxvYy5oIiAyCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2ZpeG1hcC5oIiAxCiMgNyAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvYXNtL3BnYWxsb2MuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIu NC4xMS9pbmNsdWRlL2xpbnV4L3RocmVhZHMuaCIgMQojIDggIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2FzbS9wZ2FsbG9jLmgiIDIKIyA1MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvYXNtL3BnYWxsb2MuaCIKc3RhdGljIF9faW5saW5lX18gcGdkX3QgKmdldF9wZ2Rfc2xv dyh2b2lkKQp7CiAgICAgICAgcGdkX3QgKnBnZCA9IChwZ2RfdCAqKV9fZ2V0X2ZyZWVfcGFnZXMo KCgweDIwIHwgMHgxMCB8IDB4NDAgfCAweDgwIHwgMHgyMDAgfCAweDEwMCkpLDApOwoKICAgICAg ICBpZiAocGdkKSB7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAo X19idWlsdGluX2NvbnN0YW50X3AoKCgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygx VUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVt c2V0KCgocGdkKSksKCgweDAxMDEwMTAxVUwqKHVuc2lnbmVkIGNoYXIpKDApKSksKCgoKCgodW5z aWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkp IDogX19jb25zdGFudF9jX21lbXNldCgoKHBnZCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBj aGFyKSgwKSkpLCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikp ICogc2l6ZW9mKHBnZF90KSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKCgoKCh1bnNpZ25l ZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSAqIHNpemVvZihwZ2RfdCkpKSA/IF9f bWVtc2V0X2dlbmVyaWMoKCgocGdkKSkpLCgoKDApKSksKCgoKCgoKHVuc2lnbmVkIGxvbmcpKDB4 QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpICogc2l6ZW9mKHBnZF90KSkpKSkgOiBfX21lbXNldF9n ZW5lcmljKCgocGdkKSksKCgwKSksKCgoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8o MVVMIDw8IDIyKSkgKiBzaXplb2YocGdkX3QpKSkpKSk7CiAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoKDEwMjQgLSAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8o MVVMIDw8IDIyKSkpICogc2l6ZW9mKHBnZF90KSkgPyBfX2NvbnN0YW50X21lbWNweTNkKChwZ2Qg KyAoKCgodW5zaWduZWQgbG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpLChzd2FwcGVy X3BnX2RpciArICgoKCh1bnNpZ25lZCBsb25nKSgweEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSks KCgxMDI0IC0gKCgoKHVuc2lnbmVkIGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSAq IHNpemVvZihwZ2RfdCkpKSA6IF9fbWVtY3B5M2QoKHBnZCArICgoKCh1bnNpZ25lZCBsb25nKSgw eEMwMDAwMDAwKSkpLygxVUwgPDwgMjIpKSksKHN3YXBwZXJfcGdfZGlyICsgKCgoKHVuc2lnbmVk IGxvbmcpKDB4QzAwMDAwMDApKSkvKDFVTCA8PCAyMikpKSwoKDEwMjQgLSAoKCgodW5zaWduZWQg bG9uZykoMHhDMDAwMDAwMCkpKS8oMVVMIDw8IDIyKSkpICogc2l6ZW9mKHBnZF90KSkpKTsKICAg ICAgICB9CiAgICAgICAgcmV0dXJuIHBnZDsKfQoKCgpzdGF0aWMgX19pbmxpbmVfXyBwZ2RfdCAq Z2V0X3BnZF9mYXN0KHZvaWQpCnsKICAgICAgICB1bnNpZ25lZCBsb25nICpyZXQ7CgogICAgICAg IGlmICgocmV0ID0gKGJvb3RfY3B1X2RhdGEucGdkX3F1aWNrKSkgIT0gKCh2b2lkICopMCkpIHsK ICAgICAgICAgICAgICAgIChib290X2NwdV9kYXRhLnBnZF9xdWljaykgPSAodW5zaWduZWQgbG9u ZyAqKSgqcmV0KTsKICAgICAgICAgICAgICAgIHJldFswXSA9IDA7CiAgICAgICAgICAgICAgICAo Ym9vdF9jcHVfZGF0YS5wZ3RhYmxlX2NhY2hlX3N6KS0tOwogICAgICAgIH0gZWxzZQogICAgICAg ICAgICAgICAgcmV0ID0gKHVuc2lnbmVkIGxvbmcgKilnZXRfcGdkX3Nsb3coKTsKICAgICAgICBy ZXR1cm4gKHBnZF90ICopcmV0Owp9CgpzdGF0aWMgX19pbmxpbmVfXyB2b2lkIGZyZWVfcGdkX2Zh c3QocGdkX3QgKnBnZCkKewogICAgICAgICoodW5zaWduZWQgbG9uZyAqKXBnZCA9ICh1bnNpZ25l ZCBsb25nKSAoYm9vdF9jcHVfZGF0YS5wZ2RfcXVpY2spOwogICAgICAgIChib290X2NwdV9kYXRh LnBnZF9xdWljaykgPSAodW5zaWduZWQgbG9uZyAqKSBwZ2Q7CiAgICAgICAgKGJvb3RfY3B1X2Rh dGEucGd0YWJsZV9jYWNoZV9zeikrKzsKfQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBmcmVlX3Bn ZF9zbG93KHBnZF90ICpwZ2QpCnsKCgoKCgoKCiAgICAgICAgZnJlZV9wYWdlcygoKHVuc2lnbmVk IGxvbmcpcGdkKSwwKTsKCn0KCnN0YXRpYyBpbmxpbmUgcHRlX3QgKnB0ZV9hbGxvY19vbmUoc3Ry dWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIHB0ZV90 ICpwdGU7CgogICAgICAgIHB0ZSA9IChwdGVfdCAqKSBfX2dldF9mcmVlX3BhZ2VzKCgoMHgyMCB8 IDB4MTAgfCAweDQwIHwgMHg4MCB8IDB4MjAwIHwgMHgxMDApKSwwKTsKICAgICAgICBpZiAocHRl KQogICAgICAgICAgICAgICAgbW14X2NsZWFyX3BhZ2UocHRlKTsKICAgICAgICByZXR1cm4gcHRl Owp9CgpzdGF0aWMgaW5saW5lIHB0ZV90ICpwdGVfYWxsb2Nfb25lX2Zhc3Qoc3RydWN0IG1tX3N0 cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKewogICAgICAgIHVuc2lnbmVkIGxvbmcg KnJldDsKCiAgICAgICAgaWYgKChyZXQgPSAodW5zaWduZWQgbG9uZyAqKShib290X2NwdV9kYXRh LnB0ZV9xdWljaykpICE9ICgodm9pZCAqKTApKSB7CiAgICAgICAgICAgICAgICAoYm9vdF9jcHVf ZGF0YS5wdGVfcXVpY2spID0gKHVuc2lnbmVkIGxvbmcgKikoKnJldCk7CiAgICAgICAgICAgICAg ICByZXRbMF0gPSByZXRbMV07CiAgICAgICAgICAgICAgICAoYm9vdF9jcHVfZGF0YS5wZ3RhYmxl X2NhY2hlX3N6KS0tOwogICAgICAgIH0KICAgICAgICByZXR1cm4gKHB0ZV90ICopcmV0Owp9Cgpz dGF0aWMgX19pbmxpbmVfXyB2b2lkIHB0ZV9mcmVlX2Zhc3QocHRlX3QgKnB0ZSkKewogICAgICAg ICoodW5zaWduZWQgbG9uZyAqKXB0ZSA9ICh1bnNpZ25lZCBsb25nKSAoYm9vdF9jcHVfZGF0YS5w dGVfcXVpY2spOwogICAgICAgIChib290X2NwdV9kYXRhLnB0ZV9xdWljaykgPSAodW5zaWduZWQg bG9uZyAqKSBwdGU7CiAgICAgICAgKGJvb3RfY3B1X2RhdGEucGd0YWJsZV9jYWNoZV9zeikrKzsK fQoKc3RhdGljIF9faW5saW5lX18gdm9pZCBwdGVfZnJlZV9zbG93KHB0ZV90ICpwdGUpCnsKICAg ICAgICBmcmVlX3BhZ2VzKCgodW5zaWduZWQgbG9uZylwdGUpLDApOwp9CiMgMTUzICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpleHRlcm4gaW50IGRvX2NoZWNr X3BndF9jYWNoZShpbnQsIGludCk7CiMgMTc1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vcGdhbGxvYy5oIgpzdGF0aWMgaW5saW5lIHZvaWQgZmx1c2hfdGxiX21tKHN0cnVjdCBt bV9zdHJ1Y3QgKm1tKQp7CiAgICAgICAgaWYgKG1tID09IGdldF9jdXJyZW50KCktPmFjdGl2ZV9t bSkKICAgICAgICAgICAgICAgIGRvIHsgdW5zaWduZWQgaW50IHRtcHJlZzsgX19hc21fXyBfX3Zv bGF0aWxlX18oICJtb3ZsICUlY3IzLCAlMDsgICMgZmx1c2ggVExCIFxuIiAibW92bCAlMCwgJSVj cjM7ICAgICAgICAgICAgICBcbiIgOiAiPXIiICh0bXByZWcpIDo6ICJtZW1vcnkiKTsgfSB3aGls ZSAoMCk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBmbHVzaF90bGJfcGFnZShzdHJ1Y3Qgdm1fYXJl YV9zdHJ1Y3QgKnZtYSwKICAgICAgICB1bnNpZ25lZCBsb25nIGFkZHIpCnsKICAgICAgICBpZiAo dm1hLT52bV9tbSA9PSBnZXRfY3VycmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAgICAgICBf X2FzbV9fIF9fdm9sYXRpbGVfXygiaW52bHBnICUwIjogOiJtIiAoKihjaGFyICopIGFkZHIpKTsK fQoKc3RhdGljIGlubGluZSB2b2lkIGZsdXNoX3RsYl9yYW5nZShzdHJ1Y3QgbW1fc3RydWN0ICpt bSwKICAgICAgICB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCkKewogICAg ICAgIGlmIChtbSA9PSBnZXRfY3VycmVudCgpLT5hY3RpdmVfbW0pCiAgICAgICAgICAgICAgICBk byB7IHVuc2lnbmVkIGludCB0bXByZWc7IF9fYXNtX18gX192b2xhdGlsZV9fKCAibW92bCAlJWNy MywgJTA7ICAjIGZsdXNoIFRMQiBcbiIgIm1vdmwgJTAsICUlY3IzOyAgICAgICAgICAgICAgXG4i IDogIj1yIiAodG1wcmVnKSA6OiAibWVtb3J5Iik7IH0gd2hpbGUgKDApOwp9CiMgMjI3ICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcGdhbGxvYy5oIgpzdGF0aWMgaW5saW5lIHZv aWQgZmx1c2hfdGxiX3BndGFibGVzKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxv bmcgZW5kKQp7Cgp9CiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaGln aG1lbS5oIiAyCiMgMzEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2hpZ2ht ZW0uaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbnJfZnJlZV9oaWdocGFnZXModm9pZCkg eyByZXR1cm4gMDsgfQoKc3RhdGljIGlubGluZSB2b2lkICprbWFwKHN0cnVjdCBwYWdlICpwYWdl KSB7IHJldHVybiAoKHBhZ2UpLT52aXJ0dWFsKTsgfQojIDQ2ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9oaWdobWVtLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBjbGVhcl91c2Vy X2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBsb25nIHZhZGRyKQp7CiAgICAg ICAgdm9pZCAqYWRkciA9IGttYXAocGFnZSk7CiAgICAgICAgbW14X2NsZWFyX3BhZ2UoYWRkcik7 CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGNsZWFyX2hp Z2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlKQp7CiAgICAgICAgbW14X2NsZWFyX3BhZ2Uoa21hcChw YWdlKSk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIG1l bWNsZWFyX2hpZ2hwYWdlKHN0cnVjdCBwYWdlICpwYWdlLCB1bnNpZ25lZCBpbnQgb2Zmc2V0LCB1 bnNpZ25lZCBpbnQgc2l6ZSkKewogICAgICAgIGNoYXIgKmthZGRyOwoKICAgICAgICBpZiAob2Zm c2V0ICsgc2l6ZSA+ICgxVUwgPDwgMTIpKQogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0 aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOwogICAgICAgIGthZGRyID0ga21hcChwYWdlKTsKICAg ICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKHNp emUpKSA/IF9fY29uc3RhbnRfY19hbmRfY291bnRfbWVtc2V0KCgoa2FkZHIgKyBvZmZzZXQpKSwo KDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMCkpKSwoKHNpemUpKSkgOiBfX2NvbnN0YW50 X2NfbWVtc2V0KCgoa2FkZHIgKyBvZmZzZXQpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoMCkpKSwoKHNpemUpKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChzaXplKSkgPyBfX21l bXNldF9nZW5lcmljKCgoKGthZGRyICsgb2Zmc2V0KSkpLCgoKDApKSksKCgoc2l6ZSkpKSkgOiBf X21lbXNldF9nZW5lcmljKCgoa2FkZHIgKyBvZmZzZXQpKSwoKDApKSwoKHNpemUpKSkpKTsKICAg ICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CgoKCgpzdGF0aWMgaW5saW5lIHZvaWQgbWVtY2xlYXJf aGlnaHBhZ2VfZmx1c2goc3RydWN0IHBhZ2UgKnBhZ2UsIHVuc2lnbmVkIGludCBvZmZzZXQsIHVu c2lnbmVkIGludCBzaXplKQp7CiAgICAgICAgY2hhciAqa2FkZHI7CgogICAgICAgIGlmIChvZmZz ZXQgKyBzaXplID4gKDFVTCA8PCAxMikpCiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRp bGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAgICAgICAga2FkZHIgPSBrbWFwKHBhZ2UpOwogICAg ICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgwKSA/IChfX2J1aWx0aW5fY29uc3RhbnRfcCgoc2l6 ZSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChrYWRkciArIG9mZnNldCkpLCgo MHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFyKSgwKSkpLCgoc2l6ZSkpKSA6IF9fY29uc3RhbnRf Y19tZW1zZXQoKChrYWRkciArIG9mZnNldCkpLCgoMHgwMTAxMDEwMVVMKih1bnNpZ25lZCBjaGFy KSgwKSkpLCgoc2l6ZSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemUpKSA/IF9fbWVt c2V0X2dlbmVyaWMoKCgoa2FkZHIgKyBvZmZzZXQpKSksKCgoMCkpKSwoKChzaXplKSkpKSA6IF9f bWVtc2V0X2dlbmVyaWMoKChrYWRkciArIG9mZnNldCkpLCgoMCkpLCgoc2l6ZSkpKSkpOwogICAg ICAgIGRvIHsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKfQoKc3RhdGlj IGlubGluZSB2b2lkIGNvcHlfdXNlcl9oaWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBw YWdlICpmcm9tLCB1bnNpZ25lZCBsb25nIHZhZGRyKQp7CiAgICAgICAgY2hhciAqdmZyb20sICp2 dG87CgogICAgICAgIHZmcm9tID0ga21hcChmcm9tKTsKICAgICAgICB2dG8gPSBrbWFwKHRvKTsK ICAgICAgICBtbXhfY29weV9wYWdlKHZ0byx2ZnJvbSk7CiAgICAgICAgZG8geyB9IHdoaWxlICgw KTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgY29weV9o aWdocGFnZShzdHJ1Y3QgcGFnZSAqdG8sIHN0cnVjdCBwYWdlICpmcm9tKQp7CiAgICAgICAgY2hh ciAqdmZyb20sICp2dG87CgogICAgICAgIHZmcm9tID0ga21hcChmcm9tKTsKICAgICAgICB2dG8g PSBrbWFwKHRvKTsKICAgICAgICBtbXhfY29weV9wYWdlKHZ0byx2ZnJvbSk7CiAgICAgICAgZG8g eyB9IHdoaWxlICgwKTsKICAgICAgICBkbyB7IH0gd2hpbGUgKDApOwp9CiMgMjggIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIiAyCiMgODUgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdHJ1Y3QgbmZfY29ubnRyYWNrIHsK ICAgICAgICBhdG9taWNfdCB1c2U7CiAgICAgICAgdm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBuZl9j b25udHJhY2sgKik7Cn07CgpzdHJ1Y3QgbmZfY3RfaW5mbyB7CiAgICAgICAgc3RydWN0IG5mX2Nv bm50cmFjayAqbWFzdGVyOwp9OwoKCnN0cnVjdCBza19idWZmX2hlYWQgewoKICAgICAgICBzdHJ1 Y3Qgc2tfYnVmZiAqIG5leHQ7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKiBwcmV2OwoKICAgICAg ICBfX3UzMiBxbGVuOwogICAgICAgIHNwaW5sb2NrX3QgbG9jazsKfTsKCnN0cnVjdCBza19idWZm OwoKCgp0eXBlZGVmIHN0cnVjdCBza2JfZnJhZ19zdHJ1Y3Qgc2tiX2ZyYWdfdDsKCnN0cnVjdCBz a2JfZnJhZ19zdHJ1Y3QKewogICAgICAgIHN0cnVjdCBwYWdlICpwYWdlOwogICAgICAgIF9fdTE2 IHBhZ2Vfb2Zmc2V0OwogICAgICAgIF9fdTE2IHNpemU7Cn07CgoKCgpzdHJ1Y3Qgc2tiX3NoYXJl ZF9pbmZvIHsKICAgICAgICBhdG9taWNfdCBkYXRhcmVmOwogICAgICAgIHVuc2lnbmVkIGludCBu cl9mcmFnczsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqZnJhZ19saXN0OwogICAgICAgIHNrYl9m cmFnX3QgZnJhZ3NbNl07Cn07CgpzdHJ1Y3Qgc2tfYnVmZiB7CgogICAgICAgIHN0cnVjdCBza19i dWZmICogbmV4dDsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIHByZXY7CgogICAgICAgIHN0cnVj dCBza19idWZmX2hlYWQgKiBsaXN0OwogICAgICAgIHN0cnVjdCBzb2NrICpzazsKICAgICAgICBz dHJ1Y3QgdGltZXZhbCBzdGFtcDsKICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2OwoKCiAg ICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgdGNwaGRyICp0aDsK ICAgICAgICAgICAgICAgIHN0cnVjdCB1ZHBoZHIgKnVoOwogICAgICAgICAgICAgICAgc3RydWN0 IGljbXBoZHIgKmljbXBoOwogICAgICAgICAgICAgICAgc3RydWN0IGlnbXBoZHIgKmlnbXBoOwog ICAgICAgICAgICAgICAgc3RydWN0IGlwaGRyICppcGlwaDsKICAgICAgICAgICAgICAgIHN0cnVj dCBzcHhoZHIgKnNweGg7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpyYXc7CiAgICAg ICAgfSBoOwoKCiAgICAgICAgdW5pb24KICAgICAgICB7CiAgICAgICAgICAgICAgICBzdHJ1Y3Qg aXBoZHIgKmlwaDsKICAgICAgICAgICAgICAgIHN0cnVjdCBpcHY2aGRyICppcHY2aDsKICAgICAg ICAgICAgICAgIHN0cnVjdCBhcnBoZHIgKmFycGg7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgaXB4 aGRyICppcHhoOwogICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmF3OwogICAgICAgIH0g bmg7CgoKICAgICAgICB1bmlvbgogICAgICAgIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBldGho ZHIgKmV0aGVybmV0OwogICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqcmF3OwogICAgICAg IH0gbWFjOwoKICAgICAgICBzdHJ1Y3QgZHN0X2VudHJ5ICpkc3Q7CgoKCgoKCgogICAgICAgIGNo YXIgY2JbNDhdOwoKICAgICAgICB1bnNpZ25lZCBpbnQgbGVuOwogICAgICAgIHVuc2lnbmVkIGlu dCBkYXRhX2xlbjsKICAgICAgICB1bnNpZ25lZCBpbnQgY3N1bTsKICAgICAgICB1bnNpZ25lZCBj aGFyIF9fdW51c2VkLAogICAgICAgICAgICAgICAgICAgICAgICBjbG9uZWQsCiAgICAgICAgICAg ICAgICAgICAgICAgIHBrdF90eXBlLAogICAgICAgICAgICAgICAgICAgICAgICBpcF9zdW1tZWQ7 CiAgICAgICAgX191MzIgcHJpb3JpdHk7CiAgICAgICAgYXRvbWljX3QgdXNlcnM7CiAgICAgICAg dW5zaWduZWQgc2hvcnQgcHJvdG9jb2w7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgc2VjdXJpdHk7 CiAgICAgICAgdW5zaWduZWQgaW50IHRydWVzaXplOwoKICAgICAgICB1bnNpZ25lZCBjaGFyICpo ZWFkOwogICAgICAgIHVuc2lnbmVkIGNoYXIgKmRhdGE7CiAgICAgICAgdW5zaWduZWQgY2hhciAq dGFpbDsKICAgICAgICB1bnNpZ25lZCBjaGFyICplbmQ7CgogICAgICAgIHZvaWQgKCpkZXN0cnVj dG9yKShzdHJ1Y3Qgc2tfYnVmZiAqKTsKCgogICAgICAgIHVuc2lnbmVkIGxvbmcgbmZtYXJrOwoK ICAgICAgICBfX3UzMiBuZmNhY2hlOwoKICAgICAgICBzdHJ1Y3QgbmZfY3RfaW5mbyAqbmZjdDsK CiAgICAgICAgdW5zaWduZWQgaW50IG5mX2RlYnVnOwojIDIxNiAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCn07CiMgMjI1ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9zbGFiLmgiIDEKIyAyMjYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L3NrYnVmZi5oIiAyCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2Fz bS9zeXN0ZW0uaCIgMQojIDIyOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv c2tidWZmLmgiIDIKCmV4dGVybiB2b2lkIF9fa2ZyZWVfc2tiKHN0cnVjdCBza19idWZmICpza2Ip OwpleHRlcm4gc3RydWN0IHNrX2J1ZmYgKiBhbGxvY19za2IodW5zaWduZWQgaW50IHNpemUsIGlu dCBwcmlvcml0eSk7CmV4dGVybiB2b2lkIGtmcmVlX3NrYm1lbShzdHJ1Y3Qgc2tfYnVmZiAqc2ti KTsKZXh0ZXJuIHN0cnVjdCBza19idWZmICogc2tiX2Nsb25lKHN0cnVjdCBza19idWZmICpza2Is IGludCBwcmlvcml0eSk7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYl9jb3B5KGNvbnN0IHN0 cnVjdCBza19idWZmICpza2IsIGludCBwcmlvcml0eSk7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAq IHBza2JfY29weShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgZ2ZwX21hc2spOwpleHRlcm4gaW50 IHBza2JfZXhwYW5kX2hlYWQoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IG5oZWFkLCBpbnQgbnRh aWwsIGludCBnZnBfbWFzayk7CmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYl9yZWFsbG9jX2hl YWRyb29tKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBoZWFkcm9vbSk7CmV4dGVy biBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYl9jb3B5X2V4cGFuZChjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg bmV3aGVhZHJvb20sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBuZXd0YWlscm9vbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgaW50IHByaW9yaXR5KTsKCmV4dGVybiB2b2lkIHNrYl9vdmVyX3BhbmljKHN0 cnVjdCBza19idWZmICpza2IsIGludCBsZW4sIHZvaWQgKmhlcmUpOwpleHRlcm4gdm9pZCBza2Jf dW5kZXJfcGFuaWMoc3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IGxlbiwgdm9pZCAqaGVyZSk7CiMg MjU1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGlj IGlubGluZSBpbnQgc2tiX3F1ZXVlX2VtcHR5KHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsK ICAgICAgICByZXR1cm4gKGxpc3QtPm5leHQgPT0gKHN0cnVjdCBza19idWZmICopIGxpc3QpOwp9 CiMgMjY4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3Rh dGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX2dldChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7 CiAgICAgICAgYXRvbWljX2luYygmc2tiLT51c2Vycyk7CiAgICAgICAgcmV0dXJuIHNrYjsKfQoj IDI4NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgdm9pZCBrZnJlZV9za2Ioc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAgIGlm ICgoKCZza2ItPnVzZXJzKS0+Y291bnRlcikgPT0gMSB8fCBhdG9taWNfZGVjX2FuZF90ZXN0KCZz a2ItPnVzZXJzKSkKICAgICAgICAgICAgICAgIF9fa2ZyZWVfc2tiKHNrYik7Cn0KCgpzdGF0aWMg aW5saW5lIHZvaWQga2ZyZWVfc2tiX2Zhc3Qoc3RydWN0IHNrX2J1ZmYgKnNrYikKewogICAgICAg IGlmICgoKCZza2ItPnVzZXJzKS0+Y291bnRlcikgPT0gMSB8fCBhdG9taWNfZGVjX2FuZF90ZXN0 KCZza2ItPnVzZXJzKSkKICAgICAgICAgICAgICAgIGtmcmVlX3NrYm1lbShza2IpOwp9CiMgMzA5 ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlu bGluZSBpbnQgc2tiX2Nsb25lZChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJu IHNrYi0+Y2xvbmVkICYmICgoJigoc3RydWN0IHNrYl9zaGFyZWRfaW5mbyAqKSgoc2tiKS0+ZW5k KSktPmRhdGFyZWYpLT5jb3VudGVyKSAhPSAxOwp9CiMgMzIyICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQgc2tiX3NoYXJlZChz dHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJuICgoKCZza2ItPnVzZXJzKS0+Y291 bnRlcikgIT0gMSk7Cn0KIyAzNDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2Jfc2hhcmVfY2hlY2so c3RydWN0IHNrX2J1ZmYgKnNrYiwgaW50IHByaSkKewogICAgICAgIGlmIChza2Jfc2hhcmVkKHNr YikpIHsKICAgICAgICAgICAgICAgIHN0cnVjdCBza19idWZmICpuc2tiOwogICAgICAgICAgICAg ICAgbnNrYiA9IHNrYl9jbG9uZShza2IsIHByaSk7CiAgICAgICAgICAgICAgICBrZnJlZV9za2Io c2tiKTsKICAgICAgICAgICAgICAgIHJldHVybiBuc2tiOwogICAgICAgIH0KICAgICAgICByZXR1 cm4gc2tiOwp9CiMgMzc0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1 ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3Vuc2hhcmUoc3RydWN0IHNr X2J1ZmYgKnNrYiwgaW50IHByaSkKewogICAgICAgIHN0cnVjdCBza19idWZmICpuc2tiOwogICAg ICAgIGlmKCFza2JfY2xvbmVkKHNrYikpCiAgICAgICAgICAgICAgICByZXR1cm4gc2tiOwogICAg ICAgIG5za2I9c2tiX2NvcHkoc2tiLCBwcmkpOwogICAgICAgIGtmcmVlX3NrYihza2IpOwogICAg ICAgIHJldHVybiBuc2tiOwp9CiMgMzk4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqc2tiX3BlZWsoc3Ry dWN0IHNrX2J1ZmZfaGVhZCAqbGlzdF8pCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqbGlzdCA9 ICgoc3RydWN0IHNrX2J1ZmYgKilsaXN0XyktPm5leHQ7CiAgICAgICAgaWYgKGxpc3QgPT0gKHN0 cnVjdCBza19idWZmICopbGlzdF8pCiAgICAgICAgICAgICAgICBsaXN0ID0gKCh2b2lkICopMCk7 CiAgICAgICAgcmV0dXJuIGxpc3Q7Cn0KIyA0MjAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2JfcGVl a190YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3RfKQp7CiAgICAgICAgc3RydWN0IHNrX2J1 ZmYgKmxpc3QgPSAoKHN0cnVjdCBza19idWZmICopbGlzdF8pLT5wcmV2OwogICAgICAgIGlmIChs aXN0ID09IChzdHJ1Y3Qgc2tfYnVmZiAqKWxpc3RfKQogICAgICAgICAgICAgICAgbGlzdCA9ICgo dm9pZCAqKTApOwogICAgICAgIHJldHVybiBsaXN0Owp9CiMgNDM1ICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBfX3UzMiBza2JfcXVl dWVfbGVuKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3RfKQp7CiAgICAgICAgcmV0dXJuKGxpc3Rf LT5xbGVuKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIHNrYl9xdWV1ZV9oZWFkX2luaXQoc3RydWN0 IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewogICAgICAgIGRvIHsgfSB3aGlsZSgwKTsKICAgICAgICBs aXN0LT5wcmV2ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBsaXN0LT5uZXh0ID0g KHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBsaXN0LT5xbGVuID0gMDsKfQojIDQ2NiAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgdm9pZCBfX3NrYl9xdWV1ZV9oZWFkKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVj dCBza19idWZmICpuZXdzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpwcmV2LCAqbmV4dDsK CiAgICAgICAgbmV3c2stPmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsKICAgICAg ICBwcmV2ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBuZXh0ID0gcHJldi0+bmV4 dDsKICAgICAgICBuZXdzay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYgPSBwcmV2 OwogICAgICAgIG5leHQtPnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3c2s7 Cn0KIyA0OTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpz dGF0aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX2hlYWQoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlz dCwgc3RydWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsK CiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNs aSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxl ICgwKTsKICAgICAgICBfX3NrYl9xdWV1ZV9oZWFkKGxpc3QsIG5ld3NrKTsKICAgICAgICBkbyB7 IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwi OiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQojIDUxNCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBfX3NrYl9xdWV1ZV90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QsIHN0cnVjdCBz a19idWZmICpuZXdzaykKewogICAgICAgIHN0cnVjdCBza19idWZmICpwcmV2LCAqbmV4dDsKCiAg ICAgICAgbmV3c2stPmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsKICAgICAgICBu ZXh0ID0gKHN0cnVjdCBza19idWZmICopbGlzdDsKICAgICAgICBwcmV2ID0gbmV4dC0+cHJldjsK ICAgICAgICBuZXdzay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYgPSBwcmV2Owog ICAgICAgIG5leHQtPnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3c2s7Cn0K IyA1NDAgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0 aWMgaW5saW5lIHZvaWQgc2tiX3F1ZXVlX3RhaWwoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCwg c3RydWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAg ICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6 Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJmxpc3QtPmxvY2spOyB9IHdoaWxlICgw KTsKICAgICAgICBfX3NrYl9xdWV1ZV90YWlsKGxpc3QsIG5ld3NrKTsKICAgICAgICBkbyB7IGRv IHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6 ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQojIDU1OCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3Ry dWN0IHNrX2J1ZmYgKl9fc2tiX2RlcXVldWUoc3RydWN0IHNrX2J1ZmZfaGVhZCAqbGlzdCkKewog ICAgICAgIHN0cnVjdCBza19idWZmICpuZXh0LCAqcHJldiwgKnJlc3VsdDsKCiAgICAgICAgcHJl diA9IChzdHJ1Y3Qgc2tfYnVmZiAqKSBsaXN0OwogICAgICAgIG5leHQgPSBwcmV2LT5uZXh0Owog ICAgICAgIHJlc3VsdCA9ICgodm9pZCAqKTApOwogICAgICAgIGlmIChuZXh0ICE9IHByZXYpIHsK ICAgICAgICAgICAgICAgIHJlc3VsdCA9IG5leHQ7CiAgICAgICAgICAgICAgICBuZXh0ID0gbmV4 dC0+bmV4dDsKICAgICAgICAgICAgICAgIGxpc3QtPnFsZW4tLTsKICAgICAgICAgICAgICAgIG5l eHQtPnByZXYgPSBwcmV2OwogICAgICAgICAgICAgICAgcHJldi0+bmV4dCA9IG5leHQ7CiAgICAg ICAgICAgICAgICByZXN1bHQtPm5leHQgPSAoKHZvaWQgKikwKTsKICAgICAgICAgICAgICAgIHJl c3VsdC0+cHJldiA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgcmVzdWx0LT5saXN0ID0g KCh2b2lkICopMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KIyA1ODcgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5l IHN0cnVjdCBza19idWZmICpza2JfZGVxdWV1ZShzdHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0KQp7 CiAgICAgICAgbG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqcmVzdWx0OwoKICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoi PWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2b2lkKSgmbGlzdC0+bG9jayk7IH0gd2hpbGUgKDAp OwogICAgICAgIHJlc3VsdCA9IF9fc2tiX2RlcXVldWUobGlzdCk7CiAgICAgICAgZG8geyBkbyB7 IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBvcGZsIjogOiJn IiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIHJl c3VsdDsKfQoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBfX3NrYl9pbnNlcnQoc3RydWN0IHNrX2J1 ZmYgKm5ld3NrLAogICAgICAgIHN0cnVjdCBza19idWZmICogcHJldiwgc3RydWN0IHNrX2J1ZmYg Km5leHQsCiAgICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCAqIGxpc3QpCnsKICAgICAgICBuZXdz ay0+bmV4dCA9IG5leHQ7CiAgICAgICAgbmV3c2stPnByZXYgPSBwcmV2OwogICAgICAgIG5leHQt PnByZXYgPSBuZXdzazsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV3c2s7CiAgICAgICAgbmV3c2st Pmxpc3QgPSBsaXN0OwogICAgICAgIGxpc3QtPnFsZW4rKzsKfQojIDYyNCAiL3Vzci9zcmMvbGlu dXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdm9pZCBza2Jf aW5zZXJ0KHN0cnVjdCBza19idWZmICpvbGQsIHN0cnVjdCBza19idWZmICpuZXdzaykKewogICAg ICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxl X18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnkiKTsgKHZv aWQpKCZvbGQtPmxpc3QtPmxvY2spOyB9IHdoaWxlICgwKTsKICAgICAgICBfX3NrYl9pbnNlcnQo bmV3c2ssIG9sZC0+cHJldiwgb2xkLCBvbGQtPmxpc3QpOwogICAgICAgIGRvIHsgZG8geyB9IHdo aWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZs YWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwp9CgoKCgoKc3RhdGljIGlubGluZSB2 b2lkIF9fc2tiX2FwcGVuZChzdHJ1Y3Qgc2tfYnVmZiAqb2xkLCBzdHJ1Y3Qgc2tfYnVmZiAqbmV3 c2spCnsKICAgICAgICBfX3NrYl9pbnNlcnQobmV3c2ssIG9sZCwgb2xkLT5uZXh0LCBvbGQtPmxp c3QpOwp9CiMgNjUzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYu aCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl9hcHBlbmQoc3RydWN0IHNrX2J1ZmYgKm9sZCwgc3Ry dWN0IHNrX2J1ZmYgKm5ld3NrKQp7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKCiAgICAg ICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1n IiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJm9sZC0+bGlzdC0+bG9jayk7IH0gd2hpbGUg KDApOwogICAgICAgIF9fc2tiX2FwcGVuZChvbGQsIG5ld3NrKTsKICAgICAgICBkbyB7IGRvIHsg fSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6Imci IChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKfQoKCgoKCgpzdGF0aWMgaW5s aW5lIHZvaWQgX19za2JfdW5saW5rKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBza19idWZm X2hlYWQgKmxpc3QpCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqIG5leHQsICogcHJldjsKCiAg ICAgICAgbGlzdC0+cWxlbi0tOwogICAgICAgIG5leHQgPSBza2ItPm5leHQ7CiAgICAgICAgcHJl diA9IHNrYi0+cHJldjsKICAgICAgICBza2ItPm5leHQgPSAoKHZvaWQgKikwKTsKICAgICAgICBz a2ItPnByZXYgPSAoKHZvaWQgKikwKTsKICAgICAgICBza2ItPmxpc3QgPSAoKHZvaWQgKikwKTsK ICAgICAgICBuZXh0LT5wcmV2ID0gcHJldjsKICAgICAgICBwcmV2LT5uZXh0ID0gbmV4dDsKfQoj IDY5NCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRp YyBpbmxpbmUgdm9pZCBza2JfdW5saW5rKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBz dHJ1Y3Qgc2tfYnVmZl9oZWFkICpsaXN0ID0gc2tiLT5saXN0OwoKICAgICAgICBpZihsaXN0KSB7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgIGRv IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZs YWdzKTogOiJtZW1vcnkiKTsgKHZvaWQpKCZsaXN0LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAg ICAgICAgICAgICBpZihza2ItPmxpc3QgPT0gbGlzdCkKICAgICAgICAgICAgICAgICAgICAgICAg X19za2JfdW5saW5rKHNrYiwgc2tiLT5saXN0KTsKICAgICAgICAgICAgICAgIGRvIHsgZG8geyB9 IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIg KGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwogICAgICAgIH0KfQojIDcxOSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxp bmUgc3RydWN0IHNrX2J1ZmYgKl9fc2tiX2RlcXVldWVfdGFpbChzdHJ1Y3Qgc2tfYnVmZl9oZWFk ICpsaXN0KQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYiA9IHNrYl9wZWVrX3RhaWwobGlz dCk7CiAgICAgICAgaWYgKHNrYikKICAgICAgICAgICAgICAgIF9fc2tiX3VubGluayhza2IsIGxp c3QpOwogICAgICAgIHJldHVybiBza2I7Cn0KIyA3MzYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHN0cnVjdCBza19idWZmICpza2Jf ZGVxdWV1ZV90YWlsKHN0cnVjdCBza19idWZmX2hlYWQgKmxpc3QpCnsKICAgICAgICBsb25nIGZs YWdzOwogICAgICAgIHN0cnVjdCBza19idWZmICpyZXN1bHQ7CgogICAgICAgIGRvIHsgX19hc21f XyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJt ZW1vcnkiKTsgKHZvaWQpKCZsaXN0LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmVzdWx0 ID0gX19za2JfZGVxdWV1ZV90YWlsKGxpc3QpOwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDAp OyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToi bWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwogICAgICAgIHJldHVybiByZXN1bHQ7Cn0KCnN0 YXRpYyBpbmxpbmUgaW50IHNrYl9pc19ub25saW5lYXIoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNr YikKewogICAgICAgIHJldHVybiBza2ItPmRhdGFfbGVuOwp9CgpzdGF0aWMgaW5saW5lIGludCBz a2JfaGVhZGxlbihjb25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJuIHNr Yi0+bGVuIC0gc2tiLT5kYXRhX2xlbjsKfQojIDc2NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgY2hhciAqX19za2Jf cHV0KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICB1bnNp Z25lZCBjaGFyICp0bXA9c2tiLT50YWlsOwogICAgICAgIGRvIHsgaWYgKHNrYl9pc19ub25saW5l YXIoc2tiKSkgX19hc21fXyBfX3ZvbGF0aWxlX18oIi5ieXRlIDB4MGYsMHgwYiIpOyB9IHdoaWxl ICgwKTsKICAgICAgICBza2ItPnRhaWwrPWxlbjsKICAgICAgICBza2ItPmxlbis9bGVuOwogICAg ICAgIHJldHVybiB0bXA7Cn0KIyA3ODQgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXQoc3RydWN0 IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHVuc2lnbmVkIGNoYXIg KnRtcD1za2ItPnRhaWw7CiAgICAgICAgZG8geyBpZiAoc2tiX2lzX25vbmxpbmVhcihza2IpKSBf X2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7IH0gd2hpbGUgKDApOwogICAg ICAgIHNrYi0+dGFpbCs9bGVuOwogICAgICAgIHNrYi0+bGVuKz1sZW47CiAgICAgICAgaWYoc2ti LT50YWlsPnNrYi0+ZW5kKSB7CiAgICAgICAgICAgICAgICBza2Jfb3Zlcl9wYW5pYyhza2IsIGxl biwgKHsgdm9pZCAqcGM7IF9fYXNtX18oIm1vdmwgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7 IH0pKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRtcDsKfQoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBjaGFyICpfX3NrYl9wdXNoKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBs ZW4pCnsKICAgICAgICBza2ItPmRhdGEtPWxlbjsKICAgICAgICBza2ItPmxlbis9bGVuOwogICAg ICAgIHJldHVybiBza2ItPmRhdGE7Cn0KIyA4MTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGNoYXIgKnNrYl9wdXNo KHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBza2ItPmRh dGEtPWxlbjsKICAgICAgICBza2ItPmxlbis9bGVuOwogICAgICAgIGlmKHNrYi0+ZGF0YTxza2It PmhlYWQpIHsKICAgICAgICAgICAgICAgIHNrYl91bmRlcl9wYW5pYyhza2IsIGxlbiwgKHsgdm9p ZCAqcGM7IF9fYXNtX18oIm1vdmwgJDFmLCUwXG4xOiI6Ij1nIiAocGMpKTsgcGM7IH0pKTsKICAg ICAgICB9CiAgICAgICAgcmV0dXJuIHNrYi0+ZGF0YTsKfQoKc3RhdGljIGlubGluZSBjaGFyICpf X3NrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAg ICBza2ItPmxlbi09bGVuOwogICAgICAgIGlmIChza2ItPmxlbiA8IHNrYi0+ZGF0YV9sZW4pCiAg ICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiLmJ5dGUgMHgwZiwweDBiIik7CiAg ICAgICAgcmV0dXJuIHNrYi0+ZGF0YSs9bGVuOwp9CiMgODQyICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBjaGFyICog c2tiX3B1bGwoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAg IGlmIChsZW4gPiBza2ItPmxlbikKICAgICAgICAgICAgICAgIHJldHVybiAoKHZvaWQgKikwKTsK ICAgICAgICByZXR1cm4gX19za2JfcHVsbChza2IsbGVuKTsKfQoKZXh0ZXJuIHVuc2lnbmVkIGNo YXIgKiBfX3Bza2JfcHVsbF90YWlsKHN0cnVjdCBza19idWZmICpza2IsIGludCBkZWx0YSk7Cgpz dGF0aWMgaW5saW5lIGNoYXIgKl9fcHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVuc2ln bmVkIGludCBsZW4pCnsKICAgICAgICBpZiAobGVuID4gc2tiX2hlYWRsZW4oc2tiKSAmJgogICAg ICAgICAgICBfX3Bza2JfcHVsbF90YWlsKHNrYiwgbGVuLXNrYl9oZWFkbGVuKHNrYikpID09ICgo dm9pZCAqKTApKQogICAgICAgICAgICAgICAgcmV0dXJuICgodm9pZCAqKTApOwogICAgICAgIHNr Yi0+bGVuIC09IGxlbjsKICAgICAgICByZXR1cm4gc2tiLT5kYXRhICs9IGxlbjsKfQoKc3RhdGlj IGlubGluZSB1bnNpZ25lZCBjaGFyICogcHNrYl9wdWxsKHN0cnVjdCBza19idWZmICpza2IsIHVu c2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4pCiAgICAgICAgICAg ICAgICByZXR1cm4gKCh2b2lkICopMCk7CiAgICAgICAgcmV0dXJuIF9fcHNrYl9wdWxsKHNrYixs ZW4pOwp9CgpzdGF0aWMgaW5saW5lIGludCBwc2tiX21heV9wdWxsKHN0cnVjdCBza19idWZmICpz a2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAobGVuIDw9IHNrYl9oZWFkbGVuKHNr YikpCiAgICAgICAgICAgICAgICByZXR1cm4gMTsKICAgICAgICBpZiAobGVuID4gc2tiLT5sZW4p CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICByZXR1cm4gKF9fcHNrYl9wdWxsX3Rh aWwoc2tiLCBsZW4tc2tiX2hlYWRsZW4oc2tiKSkgIT0gKCh2b2lkICopMCkpOwp9CiMgODgzICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGlu ZSBpbnQgc2tiX2hlYWRyb29tKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBy ZXR1cm4gc2tiLT5kYXRhLXNrYi0+aGVhZDsKfQojIDg5NSAiL3Vzci9zcmMvbGludXgtMi40LjEx L2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgaW50IHNrYl90YWlscm9vbShj b25zdCBzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICAgcmV0dXJuIHNrYl9pc19ub25saW5l YXIoc2tiKSA/IDAgOiBza2ItPmVuZC1za2ItPnRhaWw7Cn0KIyA5MDkgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NrYnVmZi5oIgpzdGF0aWMgaW5saW5lIHZvaWQgc2tiX3Jl c2VydmUoc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgaW50IGxlbikKewogICAgICAgIHNr Yi0+ZGF0YSs9bGVuOwogICAgICAgIHNrYi0+dGFpbCs9bGVuOwp9CgpleHRlcm4gaW50IF9fX3Bz a2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBpbnQgbGVuLCBpbnQgcmVhbGxv Yyk7CgpzdGF0aWMgaW5saW5lIHZvaWQgX19za2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1 bnNpZ25lZCBpbnQgbGVuKQp7CiAgICAgICAgaWYgKCFza2ItPmRhdGFfbGVuKSB7CiAgICAgICAg ICAgICAgICBza2ItPmxlbiA9IGxlbjsKICAgICAgICAgICAgICAgIHNrYi0+dGFpbCA9IHNrYi0+ ZGF0YStsZW47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIF9fX3Bza2JfdHJpbShz a2IsIGxlbiwgMCk7CiAgICAgICAgfQp9CiMgOTM2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl90cmltKHN0cnVjdCBz a19idWZmICpza2IsIHVuc2lnbmVkIGludCBsZW4pCnsKICAgICAgICBpZiAoc2tiLT5sZW4gPiBs ZW4pIHsKICAgICAgICAgICAgICAgIF9fc2tiX3RyaW0oc2tiLCBsZW4pOwogICAgICAgIH0KfQoK CnN0YXRpYyBpbmxpbmUgaW50IF9fcHNrYl90cmltKHN0cnVjdCBza19idWZmICpza2IsIHVuc2ln bmVkIGludCBsZW4pCnsKICAgICAgICBpZiAoIXNrYi0+ZGF0YV9sZW4pIHsKICAgICAgICAgICAg ICAgIHNrYi0+bGVuID0gbGVuOwogICAgICAgICAgICAgICAgc2tiLT50YWlsID0gc2tiLT5kYXRh K2xlbjsKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAg ICAgICAgICByZXR1cm4gX19fcHNrYl90cmltKHNrYiwgbGVuLCAxKTsKICAgICAgICB9Cn0KCnN0 YXRpYyBpbmxpbmUgaW50IHBza2JfdHJpbShzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1bnNpZ25lZCBp bnQgbGVuKQp7CiAgICAgICAgaWYgKGxlbiA8IHNrYi0+bGVuKQogICAgICAgICAgICAgICAgcmV0 dXJuIF9fcHNrYl90cmltKHNrYiwgbGVuKTsKICAgICAgICByZXR1cm4gMDsKfQojIDk3MiAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUg dm9pZCBza2Jfb3JwaGFuKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoc2tiLT5k ZXN0cnVjdG9yKQogICAgICAgICAgICAgICAgc2tiLT5kZXN0cnVjdG9yKHNrYik7CiAgICAgICAg c2tiLT5kZXN0cnVjdG9yID0gKCh2b2lkICopMCk7CiAgICAgICAgc2tiLT5zayA9ICgodm9pZCAq KTApOwp9CiMgOTkwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9za2J1ZmYu aCIKc3RhdGljIGlubGluZSB2b2lkIHNrYl9xdWV1ZV9wdXJnZShzdHJ1Y3Qgc2tfYnVmZl9oZWFk ICpsaXN0KQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYgKnNrYjsKICAgICAgICB3aGlsZSAoKHNr Yj1za2JfZGVxdWV1ZShsaXN0KSkhPSgodm9pZCAqKTApKQogICAgICAgICAgICAgICAga2ZyZWVf c2tiKHNrYik7Cn0KIyAxMDA3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9z a2J1ZmYuaCIKc3RhdGljIGlubGluZSB2b2lkIF9fc2tiX3F1ZXVlX3B1cmdlKHN0cnVjdCBza19i dWZmX2hlYWQgKmxpc3QpCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogICAgICAgIHdo aWxlICgoc2tiPV9fc2tiX2RlcXVldWUobGlzdCkpIT0oKHZvaWQgKikwKSkKICAgICAgICAgICAg ICAgIGtmcmVlX3NrYihza2IpOwp9CiMgMTAyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvc2tidWZmLmgiCnN0YXRpYyBpbmxpbmUgc3RydWN0IHNrX2J1ZmYgKl9fZGV2X2Fs bG9jX3NrYih1bnNpZ25lZCBpbnQgbGVuZ3RoLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IGdmcF9tYXNrKQp7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYg KnNrYjsKCiAgICAgICAgc2tiID0gYWxsb2Nfc2tiKGxlbmd0aCsxNiwgZ2ZwX21hc2spOwogICAg ICAgIGlmIChza2IpCiAgICAgICAgICAgICAgICBza2JfcmVzZXJ2ZShza2IsMTYpOwogICAgICAg IHJldHVybiBza2I7Cn0KIyAxMDUxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBzdHJ1Y3Qgc2tfYnVmZiAqZGV2X2FsbG9jX3NrYih1 bnNpZ25lZCBpbnQgbGVuZ3RoKQp7CiAgICAgICAgcmV0dXJuIF9fZGV2X2FsbG9jX3NrYihsZW5n dGgsICgweDIwKSk7Cn0KIyAxMDY5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9za2J1ZmYuaCIKc3RhdGljIGlubGluZSBpbnQKc2tiX2NvdyhzdHJ1Y3Qgc2tfYnVmZiAqc2ti LCB1bnNpZ25lZCBpbnQgaGVhZHJvb20pCnsKICAgICAgICBpbnQgZGVsdGEgPSAoaGVhZHJvb20g PiAxNiA/IGhlYWRyb29tIDogMTYpIC0gc2tiX2hlYWRyb29tKHNrYik7CgogICAgICAgIGlmIChk ZWx0YSA8IDApCiAgICAgICAgICAgICAgICBkZWx0YSA9IDA7CgogICAgICAgIGlmIChkZWx0YSB8 fCBza2JfY2xvbmVkKHNrYikpCiAgICAgICAgICAgICAgICByZXR1cm4gcHNrYl9leHBhbmRfaGVh ZChza2IsIChkZWx0YSsxNSkmfjE1LCAwLCAoMHgyMCkpOwogICAgICAgIHJldHVybiAwOwp9CiMg MTA4OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2tidWZmLmgiCmludCBz a2JfbGluZWFyaXplKHN0cnVjdCBza19idWZmICpza2IsIGludCBnZnApOwoKc3RhdGljIGlubGlu ZSB2b2lkICprbWFwX3NrYl9mcmFnKGNvbnN0IHNrYl9mcmFnX3QgKmZyYWcpCnsKCgoKCgoKICAg ICAgICByZXR1cm4ga21hcChmcmFnLT5wYWdlKTsKfQoKc3RhdGljIGlubGluZSB2b2lkIGt1bm1h cF9za2JfZnJhZyh2b2lkICp2YWRkcikKewogICAgICAgIGRvIHsgfSB3aGlsZSAoMCk7CgoKCn0K CgoKCgoKCmV4dGVybiBzdHJ1Y3Qgc2tfYnVmZiAqIHNrYl9yZWN2X2RhdGFncmFtKHN0cnVjdCBz b2NrICpzayx1bnNpZ25lZCBmbGFncyxpbnQgbm9ibG9jaywgaW50ICplcnIpOwpleHRlcm4gdW5z aWduZWQgaW50IGRhdGFncmFtX3BvbGwoc3RydWN0IGZpbGUgKmZpbGUsIHN0cnVjdCBzb2NrZXQg KnNvY2ssIHN0cnVjdCBwb2xsX3RhYmxlX3N0cnVjdCAqd2FpdCk7CmV4dGVybiBpbnQgc2tiX2Nv cHlfZGF0YWdyYW0oY29uc3Qgc3RydWN0IHNrX2J1ZmYgKmZyb20sIGludCBvZmZzZXQsIGNoYXIg KnRvLGludCBzaXplKTsKZXh0ZXJuIGludCBza2JfY29weV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBz dHJ1Y3Qgc2tfYnVmZiAqZnJvbSwgaW50IG9mZnNldCwgc3RydWN0IGlvdmVjICp0byxpbnQgc2l6 ZSk7CmV4dGVybiBpbnQgc2tiX2NvcHlfYW5kX2NzdW1fZGF0YWdyYW0oY29uc3Qgc3RydWN0IHNr X2J1ZmYgKnNrYiwgaW50IG9mZnNldCwgdTggKnRvLCBpbnQgbGVuLCB1bnNpZ25lZCBpbnQgKmNz dW1wKTsKZXh0ZXJuIGludCBza2JfY29weV9hbmRfY3N1bV9kYXRhZ3JhbV9pb3ZlYyhjb25zdCBz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgaGxlbiwgc3RydWN0IGlvdmVjICppb3YpOwpleHRlcm4g dm9pZCBza2JfZnJlZV9kYXRhZ3JhbShzdHJ1Y3Qgc29jayAqIHNrLCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiKTsKCmV4dGVybiB1bnNpZ25lZCBpbnQgc2tiX2NoZWNrc3VtKGNvbnN0IHN0cnVjdCBza19i dWZmICpza2IsIGludCBvZmZzZXQsIGludCBsZW4sIHVuc2lnbmVkIGludCBjc3VtKTsKZXh0ZXJu IGludCBza2JfY29weV9iaXRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQs IHZvaWQgKnRvLCBpbnQgbGVuKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBza2JfY29weV9hbmRfY3N1 bV9iaXRzKGNvbnN0IHN0cnVjdCBza19idWZmICpza2IsIGludCBvZmZzZXQsIHU4ICp0bywgaW50 IGxlbiwgdW5zaWduZWQgaW50IGNzdW0pOwpleHRlcm4gdm9pZCBza2JfY29weV9hbmRfY3N1bV9k ZXYoY29uc3Qgc3RydWN0IHNrX2J1ZmYgKnNrYiwgdTggKnRvKTsKCmV4dGVybiB2b2lkIHNrYl9p bml0KHZvaWQpOwpleHRlcm4gdm9pZCBza2JfYWRkX210dShpbnQgbXR1KTsKCgpzdGF0aWMgaW5s aW5lIHZvaWQKbmZfY29ubnRyYWNrX3B1dChzdHJ1Y3QgbmZfY3RfaW5mbyAqbmZjdCkKewogICAg ICAgIGlmIChuZmN0ICYmIGF0b21pY19kZWNfYW5kX3Rlc3QoJm5mY3QtPm1hc3Rlci0+dXNlKSkK ICAgICAgICAgICAgICAgIG5mY3QtPm1hc3Rlci0+ZGVzdHJveShuZmN0LT5tYXN0ZXIpOwp9CnN0 YXRpYyBpbmxpbmUgdm9pZApuZl9jb25udHJhY2tfZ2V0KHN0cnVjdCBuZl9jdF9pbmZvICpuZmN0 KQp7CiAgICAgICAgaWYgKG5mY3QpCiAgICAgICAgICAgICAgICBhdG9taWNfaW5jKCZuZmN0LT5t YXN0ZXItPnVzZSk7Cn0KIyAxNDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L25ldGRldmljZS5oIiAyCgpzdHJ1Y3QgbmVpZ2hib3VyOwpzdHJ1Y3QgbmVpZ2hfcGFybXM7CnN0 cnVjdCBza19idWZmOwoKc3RydWN0IG5ldGlmX3J4X3N0YXRzCnsKICAgICAgICB1bnNpZ25lZCB0 b3RhbDsKICAgICAgICB1bnNpZ25lZCBkcm9wcGVkOwogICAgICAgIHVuc2lnbmVkIHRpbWVfc3F1 ZWV6ZTsKICAgICAgICB1bnNpZ25lZCB0aHJvdHRsZWQ7CiAgICAgICAgdW5zaWduZWQgZmFzdHJv dXRlX2hpdDsKICAgICAgICB1bnNpZ25lZCBmYXN0cm91dGVfc3VjY2VzczsKICAgICAgICB1bnNp Z25lZCBmYXN0cm91dGVfZGVmZXI7CiAgICAgICAgdW5zaWduZWQgZmFzdHJvdXRlX2RlZmVycmVk X291dDsKICAgICAgICB1bnNpZ25lZCBmYXN0cm91dGVfbGF0ZW5jeV9yZWR1Y3Rpb247CiAgICAg ICAgdW5zaWduZWQgY3B1X2NvbGxpc2lvbjsKfSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18o KDEgPDwgKCg2KSkpKSkpOwoKZXh0ZXJuIHN0cnVjdCBuZXRpZl9yeF9zdGF0cyBuZXRkZXZfcnhf c3RhdFtdOwoKCgoKCgpzdHJ1Y3QgZGV2X21jX2xpc3QKewogICAgICAgIHN0cnVjdCBkZXZfbWNf bGlzdCAqbmV4dDsKICAgICAgICBfX3U4IGRtaV9hZGRyWzhdOwogICAgICAgIHVuc2lnbmVkIGNo YXIgZG1pX2FkZHJsZW47CiAgICAgICAgaW50IGRtaV91c2VyczsKICAgICAgICBpbnQgZG1pX2d1 c2VyczsKfTsKCnN0cnVjdCBoaF9jYWNoZQp7CiAgICAgICAgc3RydWN0IGhoX2NhY2hlICpoaF9u ZXh0OwogICAgICAgIGF0b21pY190IGhoX3JlZmNudDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBo aF90eXBlOwogICAgICAgIGludCBoaF9sZW47CiAgICAgICAgaW50ICgqaGhfb3V0cHV0KShzdHJ1 Y3Qgc2tfYnVmZiAqc2tiKTsKICAgICAgICByd2xvY2tfdCBoaF9sb2NrOwoKICAgICAgICB1bnNp Z25lZCBsb25nIGhoX2RhdGFbMTYvc2l6ZW9mKHVuc2lnbmVkIGxvbmcpXTsKfTsKCgoKCgoKZW51 bSBuZXRkZXZfc3RhdGVfdAp7CiAgICAgICAgX19MSU5LX1NUQVRFX1hPRkY9MCwKICAgICAgICBf X0xJTktfU1RBVEVfU1RBUlQsCiAgICAgICAgX19MSU5LX1NUQVRFX1BSRVNFTlQsCiAgICAgICAg X19MSU5LX1NUQVRFX1NDSEVELAogICAgICAgIF9fTElOS19TVEFURV9OT0NBUlJJRVIKfTsKCgoK CgoKc3RydWN0IG5ldGRldl9ib290X3NldHVwIHsKICAgICAgICBjaGFyIG5hbWVbMTZdOwogICAg ICAgIHN0cnVjdCBpZm1hcCBtYXA7Cn07CiMgMjMwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9uZXRkZXZpY2UuaCIKc3RydWN0IG5ldF9kZXZpY2UKewoKCgoKCgogICAgICAg IGNoYXIgbmFtZVsxNl07CgoKCgoKICAgICAgICB1bnNpZ25lZCBsb25nIHJtZW1fZW5kOwogICAg ICAgIHVuc2lnbmVkIGxvbmcgcm1lbV9zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIG1lbV9l bmQ7CiAgICAgICAgdW5zaWduZWQgbG9uZyBtZW1fc3RhcnQ7CiAgICAgICAgdW5zaWduZWQgbG9u ZyBiYXNlX2FkZHI7CiAgICAgICAgdW5zaWduZWQgaW50IGlycTsKCgoKCgoKICAgICAgICB1bnNp Z25lZCBjaGFyIGlmX3BvcnQ7CiAgICAgICAgdW5zaWduZWQgY2hhciBkbWE7CgogICAgICAgIHVu c2lnbmVkIGxvbmcgc3RhdGU7CgogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpuZXh0OwoKCiAg ICAgICAgaW50ICgqaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgoKCiAgICAgICAgc3Ry dWN0IG5ldF9kZXZpY2UgKm5leHRfc2NoZWQ7CgoKICAgICAgICBpbnQgaWZpbmRleDsKICAgICAg ICBpbnQgaWZsaW5rOwoKCiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMqICgqZ2V0X3N0 YXRzKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAgICAgICBzdHJ1Y3QgaXdfc3RhdGlzdGlj cyogKCpnZXRfd2lyZWxlc3Nfc3RhdHMpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwojIDI4NSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiCiAgICAgICAg dW5zaWduZWQgbG9uZyB0cmFuc19zdGFydDsKICAgICAgICB1bnNpZ25lZCBsb25nIGxhc3Rfcng7 CgogICAgICAgIHVuc2lnbmVkIHNob3J0IGZsYWdzOwogICAgICAgIHVuc2lnbmVkIHNob3J0IGdm bGFnczsKICAgICAgICB1bnNpZ25lZCBtdHU7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZTsK ICAgICAgICB1bnNpZ25lZCBzaG9ydCBoYXJkX2hlYWRlcl9sZW47CiAgICAgICAgdm9pZCAqcHJp djsKCiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKm1hc3RlcjsKCgoKCiAgICAgICAgdW5zaWdu ZWQgY2hhciBicm9hZGNhc3RbOF07CiAgICAgICAgdW5zaWduZWQgY2hhciBkZXZfYWRkcls4XTsK ICAgICAgICB1bnNpZ25lZCBjaGFyIGFkZHJfbGVuOwoKICAgICAgICBzdHJ1Y3QgZGV2X21jX2xp c3QgKm1jX2xpc3Q7CiAgICAgICAgaW50IG1jX2NvdW50OwogICAgICAgIGludCBwcm9taXNjdWl0 eTsKICAgICAgICBpbnQgYWxsbXVsdGk7CgogICAgICAgIGludCB3YXRjaGRvZ190aW1lbzsKICAg ICAgICBzdHJ1Y3QgdGltZXJfbGlzdCB3YXRjaGRvZ190aW1lcjsKCgoKICAgICAgICB2b2lkICph dGFsa19wdHI7CiAgICAgICAgdm9pZCAqaXBfcHRyOwogICAgICAgIHZvaWQgKmRuX3B0cjsKICAg ICAgICB2b2lkICppcDZfcHRyOwogICAgICAgIHZvaWQgKmVjX3B0cjsKCiAgICAgICAgc3RydWN0 IFFkaXNjICpxZGlzYzsKICAgICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNjX3NsZWVwaW5nOwogICAg ICAgIHN0cnVjdCBRZGlzYyAqcWRpc2NfbGlzdDsKICAgICAgICBzdHJ1Y3QgUWRpc2MgKnFkaXNj X2luZ3Jlc3M7CiAgICAgICAgdW5zaWduZWQgbG9uZyB0eF9xdWV1ZV9sZW47CgoKICAgICAgICBz cGlubG9ja190IHhtaXRfbG9jazsKCgoKICAgICAgICBpbnQgeG1pdF9sb2NrX293bmVyOwoKICAg ICAgICBzcGlubG9ja190IHF1ZXVlX2xvY2s7CgogICAgICAgIGF0b21pY190IHJlZmNudDsKCiAg ICAgICAgaW50IGRlYWRiZWFmOwoKCiAgICAgICAgaW50IGZlYXR1cmVzOwojIDM1MCAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgiCiAgICAgICAgdm9pZCAo KnVuaW5pdCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CgogICAgICAgIHZvaWQgKCpkZXN0cnVj dG9yKShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCgogICAgICAgIGludCAoKm9wZW4pKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwogICAgICAgIGludCAoKnN0b3ApKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOwogICAgICAgIGludCAoKmhhcmRfc3RhcnRfeG1pdCkgKHN0cnVjdCBza19idWZmICpz a2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKICAgICAgICBpbnQgKCpoYXJkX2hlYWRlcikgKHN0cnVj dCBza19idWZmICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIHNob3J0IHR5cGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmRhZGRyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpzYWRkciwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgbGVuKTsK ICAgICAgICBpbnQgKCpyZWJ1aWxkX2hlYWRlcikoc3RydWN0IHNrX2J1ZmYgKnNrYik7CgogICAg ICAgIHZvaWQgKCpzZXRfbXVsdGljYXN0X2xpc3QpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoK ICAgICAgICBpbnQgKCpzZXRfbWFjX2FkZHJlc3MpKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKmFk ZHIpOwoKICAgICAgICBpbnQgKCpkb19pb2N0bCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgaWZyZXEgKmlm ciwgaW50IGNtZCk7CgogICAgICAgIGludCAoKnNldF9jb25maWcpKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgaWZtYXAgKm1hcCk7CgogICAgICAgIGludCAoKmhhcmRfaGVhZGVyX2NhY2hlKShzdHJ1Y3Qg bmVpZ2hib3VyICpuZWlnaCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgaGhfY2FjaGUgKmhoKTsKICAgICAgICB2b2lkICgqaGVhZGVy X2NhY2hlX3VwZGF0ZSkoc3RydWN0IGhoX2NhY2hlICpoaCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBjaGFyICogaGFkZHIpOwoKICAgICAgICBpbnQgKCpjaGFuZ2VfbXR1KShzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBpbnQgbmV3X210dSk7CgoKICAgICAgICB2b2lkICgqdHhfdGltZW91 dCkgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKICAgICAgICBpbnQgKCpoYXJkX2hlYWRlcl9w YXJzZSkoc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpoYWRkcik7CiAgICAgICAgaW50 ICgqbmVpZ2hfc2V0dXApKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBuZWlnaF9wYXJt cyAqKTsKICAgICAgICBpbnQgKCphY2NlcHRfZmFzdHBhdGgpKHN0cnVjdCBuZXRfZGV2aWNlICos IHN0cnVjdCBkc3RfZW50cnkqKTsKCgogICAgICAgIHN0cnVjdCBtb2R1bGUgKm93bmVyOwoKCiAg ICAgICAgc3RydWN0IG5ldF9icmlkZ2VfcG9ydCAqYnJfcG9ydDsKIyA0MTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L25ldGRldmljZS5oIgp9OwoKCnN0cnVjdCBwYWNrZXRf dHlwZQp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgdHlwZTsKICAgICAgICBzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2OwogICAgICAgIGludCAoKmZ1bmMpIChzdHJ1Y3Qgc2tfYnVmZiAqLCBzdHJ1Y3Qg bmV0X2RldmljZSAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0 cnVjdCBwYWNrZXRfdHlwZSAqKTsKICAgICAgICB2b2lkICpkYXRhOwogICAgICAgIHN0cnVjdCBw YWNrZXRfdHlwZSAqbmV4dDsKfTsKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2ludGVycnVwdC5oIiAxCgoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L2NvbmZpZy5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUv bGludXgvaW50ZXJydXB0LmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9rZXJuZWwuaCIgMQojIDcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2ludGVycnVwdC5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv c21wLmgiIDEKIyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbnRlcnJ1 cHQuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2NhY2hlLmgi IDEKIyA5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIg MgoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYml0b3BzLmgiIDEKIyAx MSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyAx ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyAxMiAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vcHRyYWNlLmgiIDEKIyAxMyAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKCnN0cnVjdCBpcnFhY3Rp b24gewogICAgICAgIHZvaWQgKCpoYW5kbGVyKShpbnQsIHZvaWQgKiwgc3RydWN0IHB0X3JlZ3Mg Kik7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICB1bnNpZ25lZCBsb25nIG1h c2s7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB2b2lkICpkZXZfaWQ7CiAgICAg ICAgc3RydWN0IGlycWFjdGlvbiAqbmV4dDsKfTsKCgoKCgplbnVtIHsKICAgICAgICBUSU1FUl9C SCA9IDAsCiAgICAgICAgVFFVRVVFX0JILAogICAgICAgIERJR0lfQkgsCiAgICAgICAgU0VSSUFM X0JILAogICAgICAgIFJJU0NPTThfQkgsCiAgICAgICAgU1BFQ0lBTElYX0JILAogICAgICAgIEFV Uk9SQV9CSCwKICAgICAgICBFU1BfQkgsCiAgICAgICAgU0NTSV9CSCwKICAgICAgICBJTU1FRElB VEVfQkgsCiAgICAgICAgQ1lDTEFERVNfQkgsCiAgICAgICAgQ00yMDZfQkgsCiAgICAgICAgSlNf QkgsCiAgICAgICAgTUFDU0VSSUFMX0JILAogICAgICAgIElTSUNPTV9CSAp9OwoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAxCgoKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEKIyA1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaGFyZGlycS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvdGhyZWFkcy5oIiAxCiMgNiAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L2lycS5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRl L2xpbnV4L2lycS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2Nv bmZpZy5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2lycS5o IiAyCgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY2FjaGUuaCIg MQojIDE3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDEg Ii91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3NwaW5sb2NrLmgiIDEKIyAxOCAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXJxLmgiIDIKCiMgMSAiL3Vzci9z cmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2lycS5oIiAxCiMgMTMgIi91c3Ivc3JjL2xpbnV4 LTIuNC4xMS9pbmNsdWRlL2FzbS9pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9saW51eC9jb25maWcuaCIgMQojIDE0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9hc20vaXJxLmgiIDIKIyAyOCAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2ly cS5oIgpzdGF0aWMgX19pbmxpbmVfXyBpbnQgaXJxX2Nhbm5vbmljYWxpemUoaW50IGlycSkKewog ICAgICAgIHJldHVybiAoKGlycSA9PSAyKSA/IDkgOiBpcnEpOwp9CgpleHRlcm4gdm9pZCBkaXNh YmxlX2lycSh1bnNpZ25lZCBpbnQpOwpleHRlcm4gdm9pZCBkaXNhYmxlX2lycV9ub3N5bmModW5z aWduZWQgaW50KTsKZXh0ZXJuIHZvaWQgZW5hYmxlX2lycSh1bnNpZ25lZCBpbnQpOwojIDIwICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDEgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9wdHJhY2UuaCIgMQojIDIxICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pcnEuaCIgMgojIDM5ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9pcnEuaCIKc3RydWN0IGh3X2ludGVycnVwdF90eXBlIHsKICAgICAg ICBjb25zdCBjaGFyICogdHlwZW5hbWU7CiAgICAgICAgdW5zaWduZWQgaW50ICgqc3RhcnR1cCko dW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKnNodXRkb3duKSh1bnNpZ25lZCBpbnQg aXJxKTsKICAgICAgICB2b2lkICgqZW5hYmxlKSh1bnNpZ25lZCBpbnQgaXJxKTsKICAgICAgICB2 b2lkICgqZGlzYWJsZSkodW5zaWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKmFjaykodW5z aWduZWQgaW50IGlycSk7CiAgICAgICAgdm9pZCAoKmVuZCkodW5zaWduZWQgaW50IGlycSk7CiAg ICAgICAgdm9pZCAoKnNldF9hZmZpbml0eSkodW5zaWduZWQgaW50IGlycSwgdW5zaWduZWQgbG9u ZyBtYXNrKTsKfTsKCnR5cGVkZWYgc3RydWN0IGh3X2ludGVycnVwdF90eXBlIGh3X2lycV9jb250 cm9sbGVyOwojIDU5ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pcnEuaCIK dHlwZWRlZiBzdHJ1Y3QgewogICAgICAgIHVuc2lnbmVkIGludCBzdGF0dXM7CiAgICAgICAgaHdf aXJxX2NvbnRyb2xsZXIgKmhhbmRsZXI7CiAgICAgICAgc3RydWN0IGlycWFjdGlvbiAqYWN0aW9u OwogICAgICAgIHVuc2lnbmVkIGludCBkZXB0aDsKICAgICAgICBzcGlubG9ja190IGxvY2s7Cn0g X19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oKDEgPDwgKCg2KSkpKSkpIGlycV9kZXNjX3Q7Cgpl eHRlcm4gaXJxX2Rlc2NfdCBpcnFfZGVzYyBbMjI0XTsKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40 LjExL2luY2x1ZGUvYXNtL2h3X2lycS5oIiAxCiMgMTUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2FzbS9od19pcnEuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9jb25maWcuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20v aHdfaXJxLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWlj LmgiIDEKIyAxNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2h3X2lycS5oIiAy CiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2lycS5oIiAxCiMgMTggIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9od19pcnEuaCIgMgojIDYxICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaHdfaXJxLmgiCmV4dGVybiBpbnQgaXJxX3ZlY3Rv clsyMjRdOwojIDcxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vaHdfaXJxLmgi CmV4dGVybiB2b2lkIG1hc2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCB1bm1h c2tfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9pZCBkaXNhYmxlXzgyNTlBX2lycSh1 bnNpZ25lZCBpbnQgaXJxKTsKZXh0ZXJuIHZvaWQgZW5hYmxlXzgyNTlBX2lycSh1bnNpZ25lZCBp bnQgaXJxKTsKZXh0ZXJuIGludCBpODI1OUFfaXJxX3BlbmRpbmcodW5zaWduZWQgaW50IGlycSk7 CmV4dGVybiB2b2lkIG1ha2VfODI1OUFfaXJxKHVuc2lnbmVkIGludCBpcnEpOwpleHRlcm4gdm9p ZCBpbml0XzgyNTlBKGludCBhZW9pKTsKZXh0ZXJuIHZvaWQgc2VuZF9JUElfc2VsZihpbnQgdmVj dG9yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIGluaXRfVklTV1Nf QVBJQ19pcnFzKHZvaWQpOwpleHRlcm4gdm9pZCBzZXR1cF9JT19BUElDKHZvaWQpOwpleHRlcm4g dm9pZCBkaXNhYmxlX0lPX0FQSUModm9pZCk7CmV4dGVybiB2b2lkIHByaW50X0lPX0FQSUModm9p ZCk7CmV4dGVybiBpbnQgSU9fQVBJQ19nZXRfUENJX2lycV92ZWN0b3IoaW50IGJ1cywgaW50IHNs b3QsIGludCBmbik7CmV4dGVybiB2b2lkIHNlbmRfSVBJKGludCBkZXN0LCBpbnQgdmVjdG9yKTsK CmV4dGVybiB1bnNpZ25lZCBsb25nIGlvX2FwaWNfaXJxczsKCmV4dGVybiBhdG9taWNfdCBpcnFf ZXJyX2NvdW50OwpleHRlcm4gYXRvbWljX3QgaXJxX21pc19jb3VudDsKCmV4dGVybiBjaGFyIF9z dGV4dCwgX2V0ZXh0OwojIDE4MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2h3 X2lycS5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9mX2NwdV9tYXNrOwpleHRlcm4gdW5zaWdu ZWQgaW50ICogcHJvZl9idWZmZXI7CmV4dGVybiB1bnNpZ25lZCBsb25nIHByb2ZfbGVuOwpleHRl cm4gdW5zaWduZWQgbG9uZyBwcm9mX3NoaWZ0OwoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCB4ODZf ZG9fcHJvZmlsZSAodW5zaWduZWQgbG9uZyBlaXApCnsKICAgICAgICBpZiAoIXByb2ZfYnVmZmVy KQogICAgICAgICAgICAgICAgcmV0dXJuOwoKCgoKCiAgICAgICAgaWYgKCEoKDE8PDApICYgcHJv Zl9jcHVfbWFzaykpCiAgICAgICAgICAgICAgICByZXR1cm47CgogICAgICAgIGVpcCAtPSAodW5z aWduZWQgbG9uZykgJl9zdGV4dDsKICAgICAgICBlaXAgPj49IHByb2Zfc2hpZnQ7CgoKCgoKICAg ICAgICBpZiAoZWlwID4gcHJvZl9sZW4tMSkKICAgICAgICAgICAgICAgIGVpcCA9IHByb2ZfbGVu LTE7CiAgICAgICAgYXRvbWljX2luYygoYXRvbWljX3QgKikmcHJvZl9idWZmZXJbZWlwXSk7Cn0K CgoKCgoKCnN0YXRpYyBpbmxpbmUgdm9pZCBod19yZXNlbmRfaXJxKHN0cnVjdCBod19pbnRlcnJ1 cHRfdHlwZSAqaCwgdW5zaWduZWQgaW50IGkpIHt9CiMgNzAgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2xpbnV4L2lycS5oIiAyCgpleHRlcm4gaW50IGhhbmRsZV9JUlFfZXZlbnQodW5z aWduZWQgaW50LCBzdHJ1Y3QgcHRfcmVncyAqLCBzdHJ1Y3QgaXJxYWN0aW9uICopOwpleHRlcm4g aW50IHNldHVwX2lycSh1bnNpZ25lZCBpbnQgLCBzdHJ1Y3QgaXJxYWN0aW9uICogKTsKCmV4dGVy biBod19pcnFfY29udHJvbGxlciBub19pcnFfdHlwZTsKZXh0ZXJuIHZvaWQgbm9fYWN0aW9uKGlu dCBjcGwsIHZvaWQgKmRldl9pZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpOwojIDcgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9oYXJkaXJxLmgiIDIKCgp0eXBlZGVmIHN0cnVjdCB7 CiAgICAgICAgdW5zaWduZWQgaW50IF9fc29mdGlycV9wZW5kaW5nOwogICAgICAgIHVuc2lnbmVk IGludCBfX2xvY2FsX2lycV9jb3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19sb2NhbF9iaF9j b3VudDsKICAgICAgICB1bnNpZ25lZCBpbnQgX19zeXNjYWxsX2NvdW50OwogICAgICAgIHN0cnVj dCB0YXNrX3N0cnVjdCAqIF9fa3NvZnRpcnFkX3Rhc2s7CiAgICAgICAgdW5zaWduZWQgaW50IF9f bm1pX2NvdW50Owp9IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKCgxIDw8ICgoNikpKSkpKSBp cnFfY3B1c3RhdF90OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9p cnFfY3B1c3RhdC5oIiAxCiMgMTIgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L2lycV9jcHVzdGF0LmgiCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv Y29uZmlnLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaXJx X2NwdXN0YXQuaCIgMgoKCgoKCgoKZXh0ZXJuIGlycV9jcHVzdGF0X3QgaXJxX3N0YXRbXTsKIyAx OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMgojIDQ2ICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9zb2Z0aXJxLmgiIDEKCgoKIyAxICIvdXNy L3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vYXRvbWljLmgiIDEKIyA1ICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9hc20vc29mdGlycS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvYXNtL2hhcmRpcnEuaCIgMQojIDYgIi91c3Ivc3JjL2xpbnV4LTIuNC4x MS9pbmNsdWRlL2FzbS9zb2Z0aXJxLmgiIDIKIyA0NyAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvaW50ZXJydXB0LmgiIDIKIyA1NiAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmVudW0KewogICAgICAgIEhJX1NPRlRJUlE9MCwKICAg ICAgICBORVRfVFhfU09GVElSUSwKICAgICAgICBORVRfUlhfU09GVElSUSwKICAgICAgICBUQVNL TEVUX1NPRlRJUlEKfTsKCgoKCgpzdHJ1Y3Qgc29mdGlycV9hY3Rpb24KewogICAgICAgIHZvaWQg KCphY3Rpb24pKHN0cnVjdCBzb2Z0aXJxX2FjdGlvbiAqKTsKICAgICAgICB2b2lkICpkYXRhOwp9 OwoKIF9fYXR0cmlidXRlX18oKHJlZ3Bhcm0oMCkpKSB2b2lkIGRvX3NvZnRpcnEodm9pZCk7CmV4 dGVybiB2b2lkIG9wZW5fc29mdGlycShpbnQgbnIsIHZvaWQgKCphY3Rpb24pKHN0cnVjdCBzb2Z0 aXJxX2FjdGlvbiopLCB2b2lkICpkYXRhKTsKZXh0ZXJuIHZvaWQgc29mdGlycV9pbml0KHZvaWQp OwoKZXh0ZXJuIHZvaWQgY3B1X3JhaXNlX3NvZnRpcnEodW5zaWduZWQgaW50IGNwdSwgdW5zaWdu ZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CmV4dGVybiB2b2lkIHJhaXNl X3NvZnRpcnEodW5zaWduZWQgaW50IG5yKSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CiMg MTAzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKc3Ry dWN0IHRhc2tsZXRfc3RydWN0CnsKICAgICAgICBzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKm5leHQ7 CiAgICAgICAgdW5zaWduZWQgbG9uZyBzdGF0ZTsKICAgICAgICBhdG9taWNfdCBjb3VudDsKICAg ICAgICB2b2lkICgqZnVuYykodW5zaWduZWQgbG9uZyk7CiAgICAgICAgdW5zaWduZWQgbG9uZyBk YXRhOwp9OwojIDExOSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaW50ZXJy dXB0LmgiCmVudW0KewogICAgICAgIFRBU0tMRVRfU1RBVEVfU0NIRUQsCiAgICAgICAgVEFTS0xF VF9TVEFURV9SVU4KfTsKCnN0cnVjdCB0YXNrbGV0X2hlYWQKewogICAgICAgIHN0cnVjdCB0YXNr bGV0X3N0cnVjdCAqbGlzdDsKfSBfX2F0dHJpYnV0ZV9fICgoX19hbGlnbmVkX18oKDEgPDwgKCg2 KSkpKSkpOwoKZXh0ZXJuIHN0cnVjdCB0YXNrbGV0X2hlYWQgdGFza2xldF92ZWNbMV07CmV4dGVy biBzdHJ1Y3QgdGFza2xldF9oZWFkIHRhc2tsZXRfaGlfdmVjWzFdOwojIDE1NSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvaW50ZXJydXB0LmgiCmV4dGVybiB2b2lkIF9fdGFz a2xldF9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpIF9fYXR0cmlidXRlX18oKHJl Z3Bhcm0oMykpKTsKCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X3NjaGVkdWxlKHN0cnVjdCB0 YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIGlmICghdGVzdF9hbmRfc2V0X2JpdChUQVNLTEVU X1NUQVRFX1NDSEVELCAmdC0+c3RhdGUpKQogICAgICAgICAgICAgICAgX190YXNrbGV0X3NjaGVk dWxlKHQpOwp9CgpleHRlcm4gdm9pZCBfX3Rhc2tsZXRfaGlfc2NoZWR1bGUoc3RydWN0IHRhc2ts ZXRfc3RydWN0ICp0KSBfX2F0dHJpYnV0ZV9fKChyZWdwYXJtKDMpKSk7CgpzdGF0aWMgaW5saW5l IHZvaWQgdGFza2xldF9oaV9zY2hlZHVsZShzdHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQpCnsKICAg ICAgICBpZiAoIXRlc3RfYW5kX3NldF9iaXQoVEFTS0xFVF9TVEFURV9TQ0hFRCwgJnQtPnN0YXRl KSkKICAgICAgICAgICAgICAgIF9fdGFza2xldF9oaV9zY2hlZHVsZSh0KTsKfQoKCnN0YXRpYyBp bmxpbmUgdm9pZCB0YXNrbGV0X2Rpc2FibGVfbm9zeW5jKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAq dCkKewogICAgICAgIGF0b21pY19pbmMoJnQtPmNvdW50KTsKICAgICAgICBfX2FzbV9fIF9fdm9s YXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xldF9k aXNhYmxlKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCkKewogICAgICAgIHRhc2tsZXRfZGlzYWJs ZV9ub3N5bmModCk7CiAgICAgICAgZG8geyB9IHdoaWxlICgwKTsKICAgICAgICBfX2FzbV9fIF9f dm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgdGFza2xl dF9lbmFibGUoc3RydWN0IHRhc2tsZXRfc3RydWN0ICp0KQp7CiAgICAgICAgX19hc21fXyBfX3Zv bGF0aWxlX18oIiI6IDogOiJtZW1vcnkiKTsKICAgICAgICBhdG9taWNfZGVjKCZ0LT5jb3VudCk7 Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCB0YXNrbGV0X2hpX2VuYWJsZShzdHJ1Y3QgdGFza2xldF9z dHJ1Y3QgKnQpCnsKICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6Im1lbW9yeSIp OwogICAgICAgIGF0b21pY19kZWMoJnQtPmNvdW50KTsKfQoKZXh0ZXJuIHZvaWQgdGFza2xldF9r aWxsKHN0cnVjdCB0YXNrbGV0X3N0cnVjdCAqdCk7CmV4dGVybiB2b2lkIHRhc2tsZXRfaW5pdChz dHJ1Y3QgdGFza2xldF9zdHJ1Y3QgKnQsCiAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgq ZnVuYykodW5zaWduZWQgbG9uZyksIHVuc2lnbmVkIGxvbmcgZGF0YSk7CiMgMjIyICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pbnRlcnJ1cHQuaCIKZXh0ZXJuIHN0cnVjdCB0 YXNrbGV0X3N0cnVjdCBiaF90YXNrX3ZlY1tdOwoKCmV4dGVybiBzcGlubG9ja190IGdsb2JhbF9i aF9sb2NrOwoKc3RhdGljIGlubGluZSB2b2lkIG1hcmtfYmgoaW50IG5yKQp7CiAgICAgICAgdGFz a2xldF9oaV9zY2hlZHVsZShiaF90YXNrX3ZlYytucik7Cn0KCmV4dGVybiB2b2lkIGluaXRfYmgo aW50IG5yLCB2b2lkICgqcm91dGluZSkodm9pZCkpOwpleHRlcm4gdm9pZCByZW1vdmVfYmgoaW50 IG5yKTsKIyAyNjMgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2ludGVycnVw dC5oIgpleHRlcm4gdW5zaWduZWQgbG9uZyBwcm9iZV9pcnFfb24odm9pZCk7CmV4dGVybiBpbnQg cHJvYmVfaXJxX29mZih1bnNpZ25lZCBsb25nKTsKZXh0ZXJuIHVuc2lnbmVkIGludCBwcm9iZV9p cnFfbWFzayh1bnNpZ25lZCBsb25nKTsKIyA0MjUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L25ldGRldmljZS5oIiAyCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvbGludXgvbm90aWZpZXIuaCIgMQojIDEyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVk ZS9saW51eC9ub3RpZmllci5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L2Vycm5vLmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgv bm90aWZpZXIuaCIgMgoKc3RydWN0IG5vdGlmaWVyX2Jsb2NrCnsKICAgICAgICBpbnQgKCpub3Rp Zmllcl9jYWxsKShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnNlbGYsIHVuc2lnbmVkIGxvbmcsIHZv aWQgKik7CiAgICAgICAgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuZXh0OwogICAgICAgIGludCBw cmlvcml0eTsKfTsKCgoKCmV4dGVybiBpbnQgbm90aWZpZXJfY2hhaW5fcmVnaXN0ZXIoc3RydWN0 IG5vdGlmaWVyX2Jsb2NrICoqbGlzdCwgc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuKTsKZXh0ZXJu IGludCBub3RpZmllcl9jaGFpbl91bnJlZ2lzdGVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAqKm5s LCBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm4pOwpleHRlcm4gaW50IG5vdGlmaWVyX2NhbGxfY2hh aW4oc3RydWN0IG5vdGlmaWVyX2Jsb2NrICoqbiwgdW5zaWduZWQgbG9uZyB2YWwsIHZvaWQgKnYp OwojIDQyNiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbmV0ZGV2aWNlLmgi IDIKCmV4dGVybiBzdHJ1Y3QgbmV0X2RldmljZSBsb29wYmFja19kZXY7CmV4dGVybiBzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2X2Jhc2U7CmV4dGVybiByd2xvY2tfdCBkZXZfYmFzZV9sb2NrOwoKZXh0 ZXJuIGludCBuZXRkZXZfYm9vdF9zZXR1cF9hZGQoY2hhciAqbmFtZSwgc3RydWN0IGlmbWFwICpt YXApOwpleHRlcm4gaW50IG5ldGRldl9ib290X3NldHVwX2NoZWNrKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRieWh3YWRkcih1bnNpZ25l ZCBzaG9ydCB0eXBlLCBjaGFyICpod2FkZHIpOwpleHRlcm4gdm9pZCBkZXZfYWRkX3BhY2soc3Ry dWN0IHBhY2tldF90eXBlICpwdCk7CmV4dGVybiB2b2lkIGRldl9yZW1vdmVfcGFjayhzdHJ1Y3Qg cGFja2V0X3R5cGUgKnB0KTsKZXh0ZXJuIGludCBkZXZfZ2V0KGNvbnN0IGNoYXIgKm5hbWUpOwpl eHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmRldl9nZXRfYnlfbmFtZShjb25zdCBjaGFyICpuYW1l KTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpfX2Rldl9nZXRfYnlfbmFtZShjb25zdCBjaGFy ICpuYW1lKTsKZXh0ZXJuIHN0cnVjdCBuZXRfZGV2aWNlICpkZXZfYWxsb2MoY29uc3QgY2hhciAq bmFtZSwgaW50ICplcnIpOwpleHRlcm4gaW50IGRldl9hbGxvY19uYW1lKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gaW50IGRldl9vcGVuKHN0cnVjdCBu ZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gaW50IGRldl9jbG9zZShzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KTsKZXh0ZXJuIGludCBkZXZfcXVldWVfeG1pdChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0 ZXJuIGludCByZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVy biBpbnQgdW5yZWdpc3Rlcl9uZXRkZXZpY2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVy biBpbnQgcmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3RpZmllcl9ibG9jayAq bmIpOwpleHRlcm4gaW50IHVucmVnaXN0ZXJfbmV0ZGV2aWNlX25vdGlmaWVyKHN0cnVjdCBub3Rp Zmllcl9ibG9jayAqbmIpOwpleHRlcm4gaW50IGRldl9uZXdfaW5kZXgodm9pZCk7CmV4dGVybiBz dHJ1Y3QgbmV0X2RldmljZSAqZGV2X2dldF9ieV9pbmRleChpbnQgaWZpbmRleCk7CmV4dGVybiBz dHJ1Y3QgbmV0X2RldmljZSAqX19kZXZfZ2V0X2J5X2luZGV4KGludCBpZmluZGV4KTsKZXh0ZXJu IGludCBkZXZfcmVzdGFydChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCnR5cGVkZWYgaW50IGdp ZmNvbmZfZnVuY190KHN0cnVjdCBuZXRfZGV2aWNlICogZGV2LCBjaGFyICogYnVmcHRyLCBpbnQg bGVuKTsKZXh0ZXJuIGludCByZWdpc3Rlcl9naWZjb25mKHVuc2lnbmVkIGludCBmYW1pbHksIGdp ZmNvbmZfZnVuY190ICogZ2lmY29uZik7CnN0YXRpYyBpbmxpbmUgaW50IHVucmVnaXN0ZXJfZ2lm Y29uZih1bnNpZ25lZCBpbnQgZmFtaWx5KQp7CiAgICAgICAgcmV0dXJuIHJlZ2lzdGVyX2dpZmNv bmYoZmFtaWx5LCAwKTsKfQoKCgoKCgpzdHJ1Y3Qgc29mdG5ldF9kYXRhCnsKICAgICAgICBpbnQg dGhyb3R0bGU7CiAgICAgICAgaW50IGNuZ19sZXZlbDsKICAgICAgICBpbnQgYXZnX2Jsb2c7CiAg ICAgICAgc3RydWN0IHNrX2J1ZmZfaGVhZCBpbnB1dF9wa3RfcXVldWU7CiAgICAgICAgc3RydWN0 IG5ldF9kZXZpY2UgKm91dHB1dF9xdWV1ZTsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqY29tcGxl dGlvbl9xdWV1ZTsKfSBfX2F0dHJpYnV0ZV9fKChfX2FsaWduZWRfXygoMSA8PCAoKDYpKSkpKSk7 CgoKZXh0ZXJuIHN0cnVjdCBzb2Z0bmV0X2RhdGEgc29mdG5ldF9kYXRhWzFdOwoKCgpzdGF0aWMg aW5saW5lIHZvaWQgX19uZXRpZl9zY2hlZHVsZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAg ICAgICAgaWYgKCF0ZXN0X2FuZF9zZXRfYml0KF9fTElOS19TVEFURV9TQ0hFRCwgJmRldi0+c3Rh dGUpKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwogICAgICAgICAgICAg ICAgaW50IGNwdSA9IDA7CgogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1 c2hmbCA7IHBvcGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnkiKTsKICAgICAgICAg ICAgICAgIGRldi0+bmV4dF9zY2hlZCA9IHNvZnRuZXRfZGF0YVtjcHVdLm91dHB1dF9xdWV1ZTsK ICAgICAgICAgICAgICAgIHNvZnRuZXRfZGF0YVtjcHVdLm91dHB1dF9xdWV1ZSA9IGRldjsKICAg ICAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGNwdSwgTkVUX1RYX1NPRlRJUlEpOwogICAg ICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwiOiA6Imci IChmbGFncyk6Im1lbW9yeSIsICJjYyIpOwogICAgICAgIH0KfQoKc3RhdGljIGlubGluZSB2b2lk IG5ldGlmX3NjaGVkdWxlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAoIShf X2J1aWx0aW5fY29uc3RhbnRfcChfX0xJTktfU1RBVEVfWE9GRikgPyBjb25zdGFudF90ZXN0X2Jp dCgoX19MSU5LX1NUQVRFX1hPRkYpLCgmZGV2LT5zdGF0ZSkpIDogdmFyaWFibGVfdGVzdF9iaXQo KF9fTElOS19TVEFURV9YT0ZGKSwoJmRldi0+c3RhdGUpKSkpCiAgICAgICAgICAgICAgICBfX25l dGlmX3NjaGVkdWxlKGRldik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zdGFydF9xdWV1 ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgY2xlYXJfYml0KF9fTElOS19TVEFU RV9YT0ZGLCAmZGV2LT5zdGF0ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl93YWtlX3F1 ZXVlKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBpZiAodGVzdF9hbmRfY2xlYXJf Yml0KF9fTElOS19TVEFURV9YT0ZGLCAmZGV2LT5zdGF0ZSkpCiAgICAgICAgICAgICAgICBfX25l dGlmX3NjaGVkdWxlKGRldik7Cn0KCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9zdG9wX3F1ZXVl KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzZXRfYml0KF9fTElOS19TVEFURV9Y T0ZGLCAmZGV2LT5zdGF0ZSk7Cn0KCnN0YXRpYyBpbmxpbmUgaW50IG5ldGlmX3F1ZXVlX3N0b3Bw ZWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHJldHVybiAoX19idWlsdGluX2Nv bnN0YW50X3AoX19MSU5LX1NUQVRFX1hPRkYpID8gY29uc3RhbnRfdGVzdF9iaXQoKF9fTElOS19T VEFURV9YT0ZGKSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChfX0xJTktfU1RB VEVfWE9GRiksKCZkZXYtPnN0YXRlKSkpOwp9CgpzdGF0aWMgaW5saW5lIGludCBuZXRpZl9ydW5u aW5nKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICByZXR1cm4gKF9fYnVpbHRpbl9j b25zdGFudF9wKF9fTElOS19TVEFURV9TVEFSVCkgPyBjb25zdGFudF90ZXN0X2JpdCgoX19MSU5L X1NUQVRFX1NUQVJUKSwoJmRldi0+c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChfX0xJTktf U1RBVEVfU1RBUlQpLCgmZGV2LT5zdGF0ZSkpKTsKfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRl dl9rZnJlZV9za2JfaXJxKHN0cnVjdCBza19idWZmICpza2IpCnsKICAgICAgICBpZiAoYXRvbWlj X2RlY19hbmRfdGVzdCgmc2tiLT51c2VycykpIHsKICAgICAgICAgICAgICAgIGludCBjcHUgPTA7 CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgIF9f YXNtX18gX192b2xhdGlsZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6 IDoibWVtb3J5Iik7CiAgICAgICAgICAgICAgICBza2ItPm5leHQgPSBzb2Z0bmV0X2RhdGFbY3B1 XS5jb21wbGV0aW9uX3F1ZXVlOwogICAgICAgICAgICAgICAgc29mdG5ldF9kYXRhW2NwdV0uY29t cGxldGlvbl9xdWV1ZSA9IHNrYjsKICAgICAgICAgICAgICAgIGNwdV9yYWlzZV9zb2Z0aXJxKGNw dSwgTkVUX1RYX1NPRlRJUlEpOwogICAgICAgICAgICAgICAgX19hc21fXyBfX3ZvbGF0aWxlX18o InB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOwogICAgICAg IH0KfQoKCgoKc3RhdGljIGlubGluZSB2b2lkIGRldl9rZnJlZV9za2JfYW55KHN0cnVjdCBza19i dWZmICpza2IpCnsKICAgICAgICBpZiAoKCgodm9pZCkoKDApKSwgaXJxX3N0YXRbMF0uX19sb2Nh bF9pcnFfY291bnQpICE9IDApKQogICAgICAgICAgICAgICAgZGV2X2tmcmVlX3NrYl9pcnEoc2ti KTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBrZnJlZV9za2Ioc2tiKTsKfQoKZXh0ZXJu IHZvaWQgbmV0X2NhbGxfcnhfYXRvbWljKHZvaWQgKCpmbikodm9pZCkpOwoKZXh0ZXJuIGludCBu ZXRpZl9yeChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKZXh0ZXJuIGludCBkZXZfaW9jdGwodW5zaWdu ZWQgaW50IGNtZCwgdm9pZCAqKTsKZXh0ZXJuIGludCBkZXZfY2hhbmdlX2ZsYWdzKHN0cnVjdCBu ZXRfZGV2aWNlICosIHVuc2lnbmVkKTsKZXh0ZXJuIHZvaWQgZGV2X3F1ZXVlX3htaXRfbml0KHN0 cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwoKZXh0ZXJuIHZvaWQg ZGV2X2luaXQodm9pZCk7CgpleHRlcm4gaW50IG5ldGRldl9uaXQ7CgoKCgpzdGF0aWMgaW5saW5l IGludCBuZXRpZl9yeF9uaShzdHJ1Y3Qgc2tfYnVmZiAqc2tiKQp7CiAgICAgICBpbnQgZXJyID0g bmV0aWZfcngoc2tiKTsKICAgICAgIGlmICgoKHZvaWQpKCgwKSksIGlycV9zdGF0WzBdLl9fc29m dGlycV9wZW5kaW5nKSkKICAgICAgICAgICAgICAgZG9fc29mdGlycSgpOwogICAgICAgcmV0dXJu IGVycjsKfQoKc3RhdGljIGlubGluZSB2b2lkIGRldl9pbml0X2J1ZmZlcnMoc3RydWN0IG5ldF9k ZXZpY2UgKmRldikKewoKfQoKZXh0ZXJuIGludCBuZXRkZXZfZmluaXNoX3VucmVnaXN0ZXIoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldik7CgpzdGF0aWMgaW5saW5lIHZvaWQgZGV2X3B1dChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgaWYgKGF0b21pY19kZWNfYW5kX3Rlc3QoJmRldi0+ cmVmY250KSkKICAgICAgICAgICAgICAgIG5ldGRldl9maW5pc2hfdW5yZWdpc3RlcihkZXYpOwp9 CiMgNTk3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXRkZXZpY2UuaCIK c3RhdGljIGlubGluZSBpbnQgbmV0aWZfY2Fycmllcl9vayhzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KQp7CiAgICAgICAgcmV0dXJuICEoX19idWlsdGluX2NvbnN0YW50X3AoX19MSU5LX1NUQVRFX05P Q0FSUklFUikgPyBjb25zdGFudF90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX05PQ0FSUklFUiksKCZk ZXYtPnN0YXRlKSkgOiB2YXJpYWJsZV90ZXN0X2JpdCgoX19MSU5LX1NUQVRFX05PQ0FSUklFUiks KCZkZXYtPnN0YXRlKSkpOwp9CgpleHRlcm4gdm9pZCBfX25ldGRldl93YXRjaGRvZ191cChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KTsKCnN0YXRpYyBpbmxpbmUgdm9pZCBuZXRpZl9jYXJyaWVyX29u KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBjbGVhcl9iaXQoX19MSU5LX1NUQVRF X05PQ0FSUklFUiwgJmRldi0+c3RhdGUpOwogICAgICAgIGlmIChuZXRpZl9ydW5uaW5nKGRldikp CiAgICAgICAgICAgICAgICBfX25ldGRldl93YXRjaGRvZ191cChkZXYpOwp9CgpzdGF0aWMgaW5s aW5lIHZvaWQgbmV0aWZfY2Fycmllcl9vZmYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAg ICAgIHNldF9iaXQoX19MSU5LX1NUQVRFX05PQ0FSUklFUiwgJmRldi0+c3RhdGUpOwp9CgoKc3Rh dGljIGlubGluZSBpbnQgbmV0aWZfZGV2aWNlX3ByZXNlbnQoc3RydWN0IG5ldF9kZXZpY2UgKmRl dikKewogICAgICAgIHJldHVybiAoX19idWlsdGluX2NvbnN0YW50X3AoX19MSU5LX1NUQVRFX1BS RVNFTlQpID8gY29uc3RhbnRfdGVzdF9iaXQoKF9fTElOS19TVEFURV9QUkVTRU5UKSwoJmRldi0+ c3RhdGUpKSA6IHZhcmlhYmxlX3Rlc3RfYml0KChfX0xJTktfU1RBVEVfUFJFU0VOVCksKCZkZXYt PnN0YXRlKSkpOwp9CgpzdGF0aWMgaW5saW5lIHZvaWQgbmV0aWZfZGV2aWNlX2RldGFjaChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgaWYgKHRlc3RfYW5kX2NsZWFyX2JpdChfX0xJ TktfU1RBVEVfUFJFU0VOVCwgJmRldi0+c3RhdGUpICYmCiAgICAgICAgICAgIG5ldGlmX3J1bm5p bmcoZGV2KSkgewogICAgICAgICAgICAgICAgbmV0aWZfc3RvcF9xdWV1ZShkZXYpOwogICAgICAg IH0KfQoKc3RhdGljIGlubGluZSB2b2lkIG5ldGlmX2RldmljZV9hdHRhY2goc3RydWN0IG5ldF9k ZXZpY2UgKmRldikKewogICAgICAgIGlmICghdGVzdF9hbmRfc2V0X2JpdChfX0xJTktfU1RBVEVf UFJFU0VOVCwgJmRldi0+c3RhdGUpICYmCiAgICAgICAgICAgIG5ldGlmX3J1bm5pbmcoZGV2KSkg ewogICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1ZShkZXYpOwogICAgICAgICAgICAgICAg X19uZXRkZXZfd2F0Y2hkb2dfdXAoZGV2KTsKICAgICAgICB9Cn0KCgoKZXh0ZXJuIHZvaWQgZXRo ZXJfc2V0dXAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIGZkZGlfc2V0dXAo c3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiB2b2lkIHRyX3NldHVwKHN0cnVjdCBuZXRf ZGV2aWNlICpkZXYpOwpleHRlcm4gdm9pZCBmY19zZXR1cChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsKZXh0ZXJuIHZvaWQgZmNfZnJlZWRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVy biBpbnQgcmVnaXN0ZXJfbmV0ZGV2KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpleHRlcm4gdm9p ZCB1bnJlZ2lzdGVyX25ldGRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVybiB2b2lk IGRldl9tY191cGxvYWQoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CmV4dGVybiBpbnQgZGV2X21j X2RlbGV0ZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lkICphZGRyLCBpbnQgYWxlbiwgaW50 IGFsbCk7CmV4dGVybiBpbnQgZGV2X21jX2FkZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCB2b2lk ICphZGRyLCBpbnQgYWxlbiwgaW50IG5ld29ubHkpOwpleHRlcm4gdm9pZCBkZXZfbWNfZGlzY2Fy ZChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKZXh0ZXJuIHZvaWQgZGV2X3NldF9wcm9taXNjdWl0 eShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKZXh0ZXJuIHZvaWQgZGV2X3NldF9h bGxtdWx0aShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgaW5jKTsKZXh0ZXJuIHZvaWQgbmV0 ZGV2X3N0YXRlX2NoYW5nZShzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKCmV4dGVybiB2b2lkIGRl dl9sb2FkKGNvbnN0IGNoYXIgKm5hbWUpOwpleHRlcm4gdm9pZCBkZXZfbWNhc3RfaW5pdCh2b2lk KTsKZXh0ZXJuIGludCBuZXRkZXZfcmVnaXN0ZXJfZmMoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwg dm9pZCAoKnN0aW11bCkoc3RydWN0IG5ldF9kZXZpY2UgKmRldikpOwpleHRlcm4gdm9pZCBuZXRk ZXZfdW5yZWdpc3Rlcl9mYyhpbnQgYml0KTsKZXh0ZXJuIGludCBuZXRkZXZfbWF4X2JhY2tsb2c7 CmV4dGVybiB1bnNpZ25lZCBsb25nIG5ldGRldl9mY194b2ZmOwpleHRlcm4gYXRvbWljX3QgbmV0 ZGV2X2Ryb3BwaW5nOwpleHRlcm4gaW50IG5ldGRldl9zZXRfbWFzdGVyKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsIHN0cnVjdCBuZXRfZGV2aWNlICptYXN0ZXIpOwpleHRlcm4gc3RydWN0IHNrX2J1 ZmYgKiBza2JfY2hlY2tzdW1faGVscChzdHJ1Y3Qgc2tfYnVmZiAqc2tiKTsKIyAxNTIgIjgxMzl0 b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2 aWNlLmgiIDEKIyAyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXRoZXJk ZXZpY2UuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9pZl9ldGhl ci5oIiAxCiMgMjggIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2V0aGVyZGV2 aWNlLmgiIDIKCgpleHRlcm4gaW50IGV0aF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1 bnNpZ25lZCBzaG9ydCB0eXBlLCB2b2lkICpkYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICpzYWRkciwgdW5zaWduZWQgbGVuKTsKZXh0ZXJuIGludCBldGhfcmVi dWlsZF9oZWFkZXIoc3RydWN0IHNrX2J1ZmYgKnNrYik7CmV4dGVybiB1bnNpZ25lZCBzaG9ydCBl dGhfdHlwZV90cmFucyhzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KTsKZXh0ZXJuIHZvaWQgZXRoX2hlYWRlcl9jYWNoZV91cGRhdGUoc3RydWN0IGhoX2NhY2hlICpo aCwgc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdW5zaWduZWQgY2hhciAqIGhhZGRyKTsKZXh0ZXJuIGludCBldGhf aGVhZGVyX2NhY2hlKHN0cnVjdCBuZWlnaGJvdXIgKm5laWdoLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBoaF9jYWNoZSAqaGgpOwpleHRlcm4gaW50IGV0 aF9oZWFkZXJfcGFyc2Uoc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICpoYWRkcik7CmV4dGVybiBzdHJ1Y3Qg bmV0X2RldmljZSAqaW5pdF9ldGhlcmRldihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgc2l6 ZW9mX3ByaXYpOwpleHRlcm4gc3RydWN0IG5ldF9kZXZpY2UgKmFsbG9jX2V0aGVyZGV2KGludCBz aXplb2ZfcHJpdik7CgpzdGF0aWMgaW5saW5lIHZvaWQgZXRoX2NvcHlfYW5kX3N1bSAoc3RydWN0 IHNrX2J1ZmYgKmRlc3QsIHVuc2lnbmVkIGNoYXIgKnNyYywgaW50IGxlbiwgaW50IGJhc2UpCnsK ICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AobGVuKSA/IF9fY29uc3RhbnRfbWVtY3B5M2Qo KGRlc3QtPmRhdGEpLChzcmMpLChsZW4pKSA6IF9fbWVtY3B5M2QoKGRlc3QtPmRhdGEpLChzcmMp LChsZW4pKSk7Cn0KIyA1OSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXRo ZXJkZXZpY2UuaCIKc3RhdGljIGlubGluZSBpbnQgaXNfdmFsaWRfZXRoZXJfYWRkciggdTggKmFk ZHIgKQp7CiAgICAgICAgY29uc3QgY2hhciB6YWRkcls2XSA9IHswLH07CgogICAgICAgIHJldHVy biAhKGFkZHJbMF0mMSkgJiYgX19idWlsdGluX21lbWNtcCggYWRkciwgemFkZHIsIDYpOwp9CiMg MTUzICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9ydG5ldGxpbmsuaCIgMQoKCgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L25ldGxpbmsuaCIgMQojIDE2ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51 eC9uZXRsaW5rLmgiCnN0cnVjdCBzb2NrYWRkcl9ubAp7CiAgICAgICAgc2FfZmFtaWx5X3Qgbmxf ZmFtaWx5OwogICAgICAgIHVuc2lnbmVkIHNob3J0IG5sX3BhZDsKICAgICAgICBfX3UzMiBubF9w aWQ7CiAgICAgICAgX191MzIgbmxfZ3JvdXBzOwp9OwoKc3RydWN0IG5sbXNnaGRyCnsKICAgICAg ICBfX3UzMiBubG1zZ19sZW47CiAgICAgICAgX191MTYgbmxtc2dfdHlwZTsKICAgICAgICBfX3Ux NiBubG1zZ19mbGFnczsKICAgICAgICBfX3UzMiBubG1zZ19zZXE7CiAgICAgICAgX191MzIgbmxt c2dfcGlkOwp9OwojIDc3ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXRs aW5rLmgiCnN0cnVjdCBubG1zZ2Vycgp7CiAgICAgICAgaW50IGVycm9yOwogICAgICAgIHN0cnVj dCBubG1zZ2hkciBtc2c7Cn07CgoKCgoKc3RydWN0IG5ldGxpbmtfc2tiX3Bhcm1zCnsKICAgICAg ICBzdHJ1Y3QgdWNyZWQgY3JlZHM7CiAgICAgICAgX191MzIgcGlkOwogICAgICAgIF9fdTMyIGdy b3VwczsKICAgICAgICBfX3UzMiBkc3RfcGlkOwogICAgICAgIF9fdTMyIGRzdF9ncm91cHM7CiAg ICAgICAga2VybmVsX2NhcF90IGVmZl9jYXA7Cn07CgoKCgoKZXh0ZXJuIGludCBuZXRsaW5rX2F0 dGFjaChpbnQgdW5pdCwgaW50ICgqZnVuY3Rpb24pKGludCxzdHJ1Y3Qgc2tfYnVmZiAqc2tiKSk7 CmV4dGVybiB2b2lkIG5ldGxpbmtfZGV0YWNoKGludCB1bml0KTsKZXh0ZXJuIGludCBuZXRsaW5r X3Bvc3QoaW50IHVuaXQsIHN0cnVjdCBza19idWZmICpza2IpOwpleHRlcm4gaW50IGluaXRfbmV0 bGluayh2b2lkKTsKZXh0ZXJuIHN0cnVjdCBzb2NrICpuZXRsaW5rX2tlcm5lbF9jcmVhdGUoaW50 IHVuaXQsIHZvaWQgKCppbnB1dCkoc3RydWN0IHNvY2sgKnNrLCBpbnQgbGVuKSk7CmV4dGVybiB2 b2lkIG5ldGxpbmtfYWNrKHN0cnVjdCBza19idWZmICppbl9za2IsIHN0cnVjdCBubG1zZ2hkciAq bmxoLCBpbnQgZXJyKTsKZXh0ZXJuIGludCBuZXRsaW5rX3VuaWNhc3Qoc3RydWN0IHNvY2sgKnNz aywgc3RydWN0IHNrX2J1ZmYgKnNrYiwgX191MzIgcGlkLCBpbnQgbm9uYmxvY2spOwpleHRlcm4g dm9pZCBuZXRsaW5rX2Jyb2FkY2FzdChzdHJ1Y3Qgc29jayAqc3NrLCBzdHJ1Y3Qgc2tfYnVmZiAq c2tiLCBfX3UzMiBwaWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdTMyIGdyb3Vw LCBpbnQgYWxsb2NhdGlvbik7CmV4dGVybiB2b2lkIG5ldGxpbmtfc2V0X2VycihzdHJ1Y3Qgc29j ayAqc3NrLCBfX3UzMiBwaWQsIF9fdTMyIGdyb3VwLCBpbnQgY29kZSk7CiMgMTIwICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9uZXRsaW5rLmgiCnN0cnVjdCBuZXRsaW5rX2Nh bGxiYWNrCnsKICAgICAgICBzdHJ1Y3Qgc2tfYnVmZiAqc2tiOwogICAgICAgIHN0cnVjdCBubG1z Z2hkciAqbmxoOwogICAgICAgIGludCAoKmR1bXApKHN0cnVjdCBza19idWZmICogc2tiLCBzdHJ1 Y3QgbmV0bGlua19jYWxsYmFjayAqY2IpOwogICAgICAgIGludCAoKmRvbmUpKHN0cnVjdCBuZXRs aW5rX2NhbGxiYWNrICpjYik7CiAgICAgICAgaW50IGZhbWlseTsKICAgICAgICBsb25nIGFyZ3Nb NF07Cn07CgpzdGF0aWMgX19pbmxpbmVfXyBzdHJ1Y3Qgbmxtc2doZHIgKgpfX25sbXNnX3B1dChz dHJ1Y3Qgc2tfYnVmZiAqc2tiLCB1MzIgcGlkLCB1MzIgc2VxLCBpbnQgdHlwZSwgaW50IGxlbikK ewogICAgICAgIHN0cnVjdCBubG1zZ2hkciAqbmxoOwogICAgICAgIGludCBzaXplID0gKChsZW4p KyggKChzaXplb2Yoc3RydWN0IG5sbXNnaGRyKSkrNCAtMSkgJiB+KDQgLTEpICkpOwoKICAgICAg ICBubGggPSAoc3RydWN0IG5sbXNnaGRyKilza2JfcHV0KHNrYiwgKCAoKHNpemUpKzQgLTEpICYg fig0IC0xKSApKTsKICAgICAgICBubGgtPm5sbXNnX3R5cGUgPSB0eXBlOwogICAgICAgIG5saC0+ bmxtc2dfbGVuID0gc2l6ZTsKICAgICAgICBubGgtPm5sbXNnX2ZsYWdzID0gMDsKICAgICAgICBu bGgtPm5sbXNnX3BpZCA9IHBpZDsKICAgICAgICBubGgtPm5sbXNnX3NlcSA9IHNlcTsKICAgICAg ICByZXR1cm4gbmxoOwp9CgoKCgoKZXh0ZXJuIGludCBuZXRsaW5rX2R1bXBfc3RhcnQoc3RydWN0 IHNvY2sgKnNzaywgc3RydWN0IHNrX2J1ZmYgKnNrYiwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgc3RydWN0IG5sbXNnaGRyICpubGgsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IGludCAoKmR1bXApKHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNr KiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAoKmRvbmUpKHN0cnVjdCBuZXRs aW5rX2NhbGxiYWNrKikpOwojIDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3J0bmV0bGluay5oIiAyCiMgNTcgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4 L3J0bmV0bGluay5oIgpzdHJ1Y3QgcnRhdHRyCnsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBydGFf bGVuOwogICAgICAgIHVuc2lnbmVkIHNob3J0IHJ0YV90eXBlOwp9OwojIDgzICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IHJ0bXNnCnsKICAg ICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9mYW1pbHk7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1f ZHN0X2xlbjsKICAgICAgICB1bnNpZ25lZCBjaGFyIHJ0bV9zcmNfbGVuOwogICAgICAgIHVuc2ln bmVkIGNoYXIgcnRtX3RvczsKCiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fdGFibGU7CiAgICAg ICAgdW5zaWduZWQgY2hhciBydG1fcHJvdG9jb2w7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1f c2NvcGU7CiAgICAgICAgdW5zaWduZWQgY2hhciBydG1fdHlwZTsKCiAgICAgICAgdW5zaWduZWQg cnRtX2ZsYWdzOwp9OwoKCgplbnVtCnsKICAgICAgICBSVE5fVU5TUEVDLAogICAgICAgIFJUTl9V TklDQVNULAogICAgICAgIFJUTl9MT0NBTCwKICAgICAgICBSVE5fQlJPQURDQVNULAoKICAgICAg ICBSVE5fQU5ZQ0FTVCwKCiAgICAgICAgUlROX01VTFRJQ0FTVCwKICAgICAgICBSVE5fQkxBQ0tI T0xFLAogICAgICAgIFJUTl9VTlJFQUNIQUJMRSwKICAgICAgICBSVE5fUFJPSElCSVQsCiAgICAg ICAgUlROX1RIUk9XLAogICAgICAgIFJUTl9OQVQsCiAgICAgICAgUlROX1hSRVNPTFZFLAp9Owoj IDE1NSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCmVu dW0gcnRfc2NvcGVfdAp7CiAgICAgICAgUlRfU0NPUEVfVU5JVkVSU0U9MCwKCiAgICAgICAgUlRf U0NPUEVfU0lURT0yMDAsCiAgICAgICAgUlRfU0NPUEVfTElOSz0yNTMsCiAgICAgICAgUlRfU0NP UEVfSE9TVD0yNTQsCiAgICAgICAgUlRfU0NPUEVfTk9XSEVSRT0yNTUKfTsKIyAxNzMgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgplbnVtIHJ0X2NsYXNz X3QKewogICAgICAgIFJUX1RBQkxFX1VOU1BFQz0wLAoKICAgICAgICBSVF9UQUJMRV9ERUZBVUxU PTI1MywKICAgICAgICBSVF9UQUJMRV9NQUlOPTI1NCwKICAgICAgICBSVF9UQUJMRV9MT0NBTD0y NTUKfTsKCgoKCgoKZW51bSBydGF0dHJfdHlwZV90CnsKICAgICAgICBSVEFfVU5TUEVDLAogICAg ICAgIFJUQV9EU1QsCiAgICAgICAgUlRBX1NSQywKICAgICAgICBSVEFfSUlGLAogICAgICAgIFJU QV9PSUYsCiAgICAgICAgUlRBX0dBVEVXQVksCiAgICAgICAgUlRBX1BSSU9SSVRZLAogICAgICAg IFJUQV9QUkVGU1JDLAogICAgICAgIFJUQV9NRVRSSUNTLAogICAgICAgIFJUQV9NVUxUSVBBVEgs CiAgICAgICAgUlRBX1BST1RPSU5GTywKICAgICAgICBSVEFfRkxPVywKICAgICAgICBSVEFfQ0FD SEVJTkZPCn07CiMgMjE4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ydG5l dGxpbmsuaCIKc3RydWN0IHJ0bmV4dGhvcAp7CiAgICAgICAgdW5zaWduZWQgc2hvcnQgcnRuaF9s ZW47CiAgICAgICAgdW5zaWduZWQgY2hhciBydG5oX2ZsYWdzOwogICAgICAgIHVuc2lnbmVkIGNo YXIgcnRuaF9ob3BzOwogICAgICAgIGludCBydG5oX2lmaW5kZXg7Cn07CiMgMjQ1ICIvdXNyL3Ny Yy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IHJ0YV9jYWNo ZWluZm8KewogICAgICAgIF9fdTMyIHJ0YV9jbG50cmVmOwogICAgICAgIF9fdTMyIHJ0YV9sYXN0 dXNlOwogICAgICAgIF9fczMyIHJ0YV9leHBpcmVzOwogICAgICAgIF9fdTMyIHJ0YV9lcnJvcjsK ICAgICAgICBfX3UzMiBydGFfdXNlZDsKCgogICAgICAgIF9fdTMyIHJ0YV9pZDsKICAgICAgICBf X3UzMiBydGFfdHM7CiAgICAgICAgX191MzIgcnRhX3RzYWdlOwp9OwoKCgplbnVtCnsKICAgICAg ICBSVEFYX1VOU1BFQywKCiAgICAgICAgUlRBWF9MT0NLLAoKICAgICAgICBSVEFYX01UVSwKCiAg ICAgICAgUlRBWF9XSU5ET1csCgogICAgICAgIFJUQVhfUlRULAoKICAgICAgICBSVEFYX1JUVFZB UiwKCiAgICAgICAgUlRBWF9TU1RIUkVTSCwKCiAgICAgICAgUlRBWF9DV05ELAoKICAgICAgICBS VEFYX0FEVk1TUywKCiAgICAgICAgUlRBWF9SRU9SREVSSU5HLAoKfTsKIyAyOTMgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgaWZhZGRybXNn CnsKICAgICAgICB1bnNpZ25lZCBjaGFyIGlmYV9mYW1pbHk7CiAgICAgICAgdW5zaWduZWQgY2hh ciBpZmFfcHJlZml4bGVuOwogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZhX2ZsYWdzOwogICAgICAg IHVuc2lnbmVkIGNoYXIgaWZhX3Njb3BlOwogICAgICAgIGludCBpZmFfaW5kZXg7Cn07CgplbnVt CnsKICAgICAgICBJRkFfVU5TUEVDLAogICAgICAgIElGQV9BRERSRVNTLAogICAgICAgIElGQV9M T0NBTCwKICAgICAgICBJRkFfTEFCRUwsCiAgICAgICAgSUZBX0JST0FEQ0FTVCwKICAgICAgICBJ RkFfQU5ZQ0FTVCwKICAgICAgICBJRkFfQ0FDSEVJTkZPCn07CiMgMzIzICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IGlmYV9jYWNoZWluZm8K ewogICAgICAgIF9fczMyIGlmYV9wcmVmZXJlZDsKICAgICAgICBfX3MzMiBpZmFfdmFsaWQ7Cn07 CiMgMzQ1ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIK c3RydWN0IG5kbXNnCnsKICAgICAgICB1bnNpZ25lZCBjaGFyIG5kbV9mYW1pbHk7CiAgICAgICAg dW5zaWduZWQgY2hhciBuZG1fcGFkMTsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBuZG1fcGFkMjsK ICAgICAgICBpbnQgbmRtX2lmaW5kZXg7CiAgICAgICAgX191MTYgbmRtX3N0YXRlOwogICAgICAg IF9fdTggbmRtX2ZsYWdzOwogICAgICAgIF9fdTggbmRtX3R5cGU7Cn07CgplbnVtCnsKICAgICAg ICBOREFfVU5TUEVDLAogICAgICAgIE5EQV9EU1QsCiAgICAgICAgTkRBX0xMQUREUiwKICAgICAg ICBOREFfQ0FDSEVJTkZPCn07CiMgMzkzICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9s aW51eC9ydG5ldGxpbmsuaCIKc3RydWN0IG5kYV9jYWNoZWluZm8KewogICAgICAgIF9fdTMyIG5k bV9jb25maXJtZWQ7CiAgICAgICAgX191MzIgbmRtX3VzZWQ7CiAgICAgICAgX191MzIgbmRtX3Vw ZGF0ZWQ7CiAgICAgICAgX191MzIgbmRtX3JlZmNudDsKfTsKCgoKCgpzdHJ1Y3QgcnRnZW5tc2cK ewogICAgICAgIHVuc2lnbmVkIGNoYXIgcnRnZW5fZmFtaWx5Owp9OwojIDQxOSAiL3Vzci9zcmMv bGludXgtMi40LjExL2luY2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiCnN0cnVjdCBpZmluZm9tc2cK ewogICAgICAgIHVuc2lnbmVkIGNoYXIgaWZpX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFy IF9faWZpX3BhZDsKICAgICAgICB1bnNpZ25lZCBzaG9ydCBpZmlfdHlwZTsKICAgICAgICBpbnQg aWZpX2luZGV4OwogICAgICAgIHVuc2lnbmVkIGlmaV9mbGFnczsKICAgICAgICB1bnNpZ25lZCBp ZmlfY2hhbmdlOwp9OwoKZW51bQp7CiAgICAgICAgSUZMQV9VTlNQRUMsCiAgICAgICAgSUZMQV9B RERSRVNTLAogICAgICAgIElGTEFfQlJPQURDQVNULAogICAgICAgIElGTEFfSUZOQU1FLAogICAg ICAgIElGTEFfTVRVLAogICAgICAgIElGTEFfTElOSywKICAgICAgICBJRkxBX1FESVNDLAogICAg ICAgIElGTEFfU1RBVFMsCiAgICAgICAgSUZMQV9DT1NULAoKICAgICAgICBJRkxBX1BSSU9SSVRZ LAoKICAgICAgICBJRkxBX01BU1RFUgoKfTsKIyA0ODYgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpzdHJ1Y3QgdGNtc2cKewogICAgICAgIHVuc2lnbmVk IGNoYXIgdGNtX2ZhbWlseTsKICAgICAgICB1bnNpZ25lZCBjaGFyIHRjbV9fcGFkMTsKICAgICAg ICB1bnNpZ25lZCBzaG9ydCB0Y21fX3BhZDI7CiAgICAgICAgaW50IHRjbV9pZmluZGV4OwogICAg ICAgIF9fdTMyIHRjbV9oYW5kbGU7CiAgICAgICAgX191MzIgdGNtX3BhcmVudDsKICAgICAgICBf X3UzMiB0Y21faW5mbzsKfTsKCmVudW0KewogICAgICAgIFRDQV9VTlNQRUMsCiAgICAgICAgVENB X0tJTkQsCiAgICAgICAgVENBX09QVElPTlMsCiAgICAgICAgVENBX1NUQVRTLAogICAgICAgIFRD QV9YU1RBVFMsCiAgICAgICAgVENBX1JBVEUsCn07CiMgNTM5ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9saW51eC9ydG5ldGxpbmsuaCIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9jb25maWcuaCIgMQojIDU0MCAiL3Vzci9zcmMvbGludXgtMi40LjExL2lu Y2x1ZGUvbGludXgvcnRuZXRsaW5rLmgiIDIKCnN0YXRpYyBfX2lubGluZV9fIGludCBydGF0dHJf c3RyY21wKHN0cnVjdCBydGF0dHIgKnJ0YSwgY2hhciAqc3RyKQp7CiAgICAgICAgaW50IGxlbiA9 IHN0cmxlbihzdHIpICsgMTsKICAgICAgICByZXR1cm4gbGVuID4gcnRhLT5ydGFfbGVuIHx8IF9f YnVpbHRpbl9tZW1jbXAoKCh2b2lkKikoKChjaGFyKikocnRhKSkgKyAoKCAoKHNpemVvZihzdHJ1 Y3QgcnRhdHRyKSkrNCAtMSkgJiB+KDQgLTEpICkgKyAoMCkpKSksIHN0ciwgbGVuKTsKfQoKZXh0 ZXJuIGludCBydGF0dHJfcGFyc2Uoc3RydWN0IHJ0YXR0ciAqdGJbXSwgaW50IG1heGF0dHIsIHN0 cnVjdCBydGF0dHIgKnJ0YSwgaW50IGxlbik7CgoKZXh0ZXJuIHN0cnVjdCBzb2NrICpydG5sOwoK c3RydWN0IHJ0bmV0bGlua19saW5rCnsKICAgICAgICBpbnQgKCpkb2l0KShzdHJ1Y3Qgc2tfYnVm ZiAqLCBzdHJ1Y3Qgbmxtc2doZHIqLCB2b2lkICphdHRyKTsKICAgICAgICBpbnQgKCpkdW1waXQp KHN0cnVjdCBza19idWZmICosIHN0cnVjdCBuZXRsaW5rX2NhbGxiYWNrICpjYik7Cn07CgpleHRl cm4gc3RydWN0IHJ0bmV0bGlua19saW5rICogcnRuZXRsaW5rX2xpbmtzWzMyXTsKZXh0ZXJuIGlu dCBydG5ldGxpbmtfZHVtcF9pZmluZm8oc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3RydWN0IG5ldGxp bmtfY2FsbGJhY2sgKmNiKTsKZXh0ZXJuIGludCBydG5ldGxpbmtfc2VuZChzdHJ1Y3Qgc2tfYnVm ZiAqc2tiLCB1MzIgcGlkLCB1MzIgZ3JvdXAsIGludCBlY2hvKTsKZXh0ZXJuIGludCBydG5ldGxp bmtfcHV0X21ldHJpY3Moc3RydWN0IHNrX2J1ZmYgKnNrYiwgdW5zaWduZWQgKm1ldHJpY3MpOwoK ZXh0ZXJuIHZvaWQgX19ydGFfZmlsbChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBpbnQgYXR0cnR5cGUs IGludCBhdHRybGVuLCBjb25zdCB2b2lkICpkYXRhKTsKCgoKCgpleHRlcm4gdm9pZCBydG1zZ19p ZmluZm8oaW50IHR5cGUsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHVuc2lnbmVkIGNoYW5nZSk7 CgoKCgoKCgpleHRlcm4gc3RydWN0IHNlbWFwaG9yZSBydG5sX3NlbTsKIyA1OTUgIi91c3Ivc3Jj L2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3J0bmV0bGluay5oIgpleHRlcm4gdm9pZCBydG5s X2xvY2sodm9pZCk7CmV4dGVybiB2b2lkIHJ0bmxfdW5sb2NrKHZvaWQpOwpleHRlcm4gdm9pZCBy dG5ldGxpbmtfaW5pdCh2b2lkKTsKIyAxNTQgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L2RlbGF5LmgiIDEKIyAxMCAiL3Vzci9zcmMvbGludXgt Mi40LjExL2luY2x1ZGUvbGludXgvZGVsYXkuaCIKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9vcHNf cGVyX2ppZmZ5OwoKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vZGVsYXku aCIgMQojIDEwICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vZGVsYXkuaCIKZXh0 ZXJuIHZvaWQgX19iYWRfdWRlbGF5KHZvaWQpOwoKZXh0ZXJuIHZvaWQgX191ZGVsYXkodW5zaWdu ZWQgbG9uZyB1c2Vjcyk7CmV4dGVybiB2b2lkIF9fY29uc3RfdWRlbGF5KHVuc2lnbmVkIGxvbmcg dXNlY3MpOwpleHRlcm4gdm9pZCBfX2RlbGF5KHVuc2lnbmVkIGxvbmcgbG9vcHMpOwojIDEzICIv dXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9kZWxheS5oIiAyCiMgMTU1ICI4MTM5 dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9ldGh0b29s LmgiIDEKIyAxMyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvZXRodG9vbC5o IgpzdHJ1Y3QgZXRodG9vbF9jbWQgewogICAgICAgIHUzMiBjbWQ7CiAgICAgICAgdTMyIHN1cHBv cnRlZDsKICAgICAgICB1MzIgYWR2ZXJ0aXNpbmc7CiAgICAgICAgdTE2IHNwZWVkOwogICAgICAg IHU4IGR1cGxleDsKICAgICAgICB1OCBwb3J0OwogICAgICAgIHU4IHBoeV9hZGRyZXNzOwogICAg ICAgIHU4IHRyYW5zY2VpdmVyOwogICAgICAgIHU4IGF1dG9uZWc7CiAgICAgICAgdTMyIG1heHR4 cGt0OwogICAgICAgIHUzMiBtYXhyeHBrdDsKICAgICAgICB1MzIgcmVzZXJ2ZWRbNF07Cn07CgoK c3RydWN0IGV0aHRvb2xfZHJ2aW5mbyB7CiAgICAgICAgdTMyIGNtZDsKICAgICAgICBjaGFyIGRy aXZlclszMl07CiAgICAgICAgY2hhciB2ZXJzaW9uWzMyXTsKICAgICAgICBjaGFyIGZ3X3ZlcnNp b25bMzJdOwogICAgICAgIGNoYXIgYnVzX2luZm9bMzJdOwoKICAgICAgICBjaGFyIHJlc2VydmVk MVszMl07CiAgICAgICAgY2hhciByZXNlcnZlZDJbMjhdOwogICAgICAgIHUzMiByZWdkdW1wX2xl bjsKfTsKCgoKc3RydWN0IGV0aHRvb2xfd29saW5mbyB7CiAgICAgICAgdTMyIGNtZDsKICAgICAg ICB1MzIgc3VwcG9ydGVkOwogICAgICAgIHUzMiB3b2xvcHRzOwogICAgICAgIHU4IHNvcGFzc1s2 XTsKfTsKIyAxNTYgIjgxMzl0b28uYyIgMgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNs dWRlL2xpbnV4L21paS5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xp bnV4L21paS5oIgojIDEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L3R5cGVz LmgiIDEKIyAxMiAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvbWlpLmgiIDIK IyAxMDUgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21paS5oIgpzdHJ1Y3Qg bWlpX2lvY3RsX2RhdGEgewogICAgICAgIHUxNiBwaHlfaWQ7CiAgICAgICAgdTE2IHJlZ19udW07 CiAgICAgICAgdTE2IHZhbF9pbjsKICAgICAgICB1MTYgdmFsX291dDsKfTsKIyAxMjcgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2xpbnV4L21paS5oIgpzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGludCBtaWlfbndheV9yZXN1bHQgKHVuc2lnbmVkIGludCBuZWdvdGlhdGVkKQp7CiAgICAg ICAgdW5zaWduZWQgaW50IHJldDsKCiAgICAgICAgaWYgKG5lZ290aWF0ZWQgJiAweDAxMDApCiAg ICAgICAgICAgICAgICByZXQgPSAweDAxMDA7CiAgICAgICAgZWxzZSBpZiAobmVnb3RpYXRlZCAm IDB4MDIwMCkKICAgICAgICAgICAgICAgIHJldCA9IDB4MDIwMDsKICAgICAgICBlbHNlIGlmIChu ZWdvdGlhdGVkICYgMHgwMDgwKQogICAgICAgICAgICAgICAgcmV0ID0gMHgwMDgwOwogICAgICAg IGVsc2UgaWYgKG5lZ290aWF0ZWQgJiAweDAwNDApCiAgICAgICAgICAgICAgICByZXQgPSAweDAw NDA7CiAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgcmV0ID0gMHgwMDIwOwoKICAgICAgICBy ZXR1cm4gcmV0Owp9CiMgMTU0ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9t aWkuaCIKc3RhdGljIGlubGluZSB1bnNpZ25lZCBpbnQgbWlpX2R1cGxleCAodW5zaWduZWQgaW50 IGR1cGxleF9sb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgbmVnb3RpYXRlZCkKewogICAgICAgIGlmIChkdXBsZXhfbG9jaykKICAgICAgICAg ICAgICAgIHJldHVybiAxOwogICAgICAgIGlmIChtaWlfbndheV9yZXN1bHQobmVnb3RpYXRlZCkg JiAoMHgwMDQwIHwgMHgwMTAwKSkKICAgICAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgIHJl dHVybiAwOwp9CiMgMTU3ICI4MTM5dG9vLmMiIDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEv aW5jbHVkZS9saW51eC9jb21wbGV0aW9uLmgiIDEKIyAxNTggIjgxMzl0b28uYyIgMgojIDEgIi91 c3Ivc3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS9pby5oIiAxCiMgMTU5ICI4MTM5dG9vLmMi IDIKIyAxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIiAxCgoK CgoKCiMgMSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvY29uZmlnLmgiIDEK IyA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIiAyCiMgMSAi L3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvbGludXgvc2NoZWQuaCIgMQojIDkgIi91c3Iv c3JjL2xpbnV4LTIuNC4xMS9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIvdXNyL3NyYy9s aW51eC0yLjQuMTEvaW5jbHVkZS9saW51eC9wcmVmZXRjaC5oIiAxCiMgMTAgIi91c3Ivc3JjL2xp bnV4LTIuNC4xMS9pbmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAxICIvdXNyL3NyYy9saW51eC0y LjQuMTEvaW5jbHVkZS9hc20vcGFnZS5oIiAxCiMgMTEgIi91c3Ivc3JjL2xpbnV4LTIuNC4xMS9p bmNsdWRlL2FzbS91YWNjZXNzLmgiIDIKIyAzNSAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1 ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGludCBfX3ZlcmlmeV93cml0ZShjb25zdCB2b2lkICos IHVuc2lnbmVkIGxvbmcpOwojIDYyICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20v dWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIGludCB2ZXJpZnlfYXJlYShpbnQgdHlwZSwgY29uc3Qg dm9pZCAqIGFkZHIsIHVuc2lnbmVkIGxvbmcgc2l6ZSkKewogICAgICAgIHJldHVybiAoKHsgdW5z aWduZWQgbG9uZyBmbGFnLHN1bTsgYXNtKCJhZGRsICUzLCUxIDsgc2JibCAlMCwlMDsgY21wbCAl MSwlNDsgc2JibCAkMCwlMCIgOiI9JnIiIChmbGFnKSwgIj1yIiAoc3VtKSA6IjEiIChhZGRyKSwi ZyIgKChpbnQpKHNpemUpKSwiZyIgKGdldF9jdXJyZW50KCktPmFkZHJfbGltaXQuc2VnKSk7IGZs YWc7IH0pID09IDApID8gMCA6IC0xNDsKfQojIDgxICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5j bHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1Y3QgZXhjZXB0aW9uX3RhYmxlX2VudHJ5CnsKICAgICAg ICB1bnNpZ25lZCBsb25nIGluc24sIGZpeHVwOwp9OwoKCmV4dGVybiB1bnNpZ25lZCBsb25nIHNl YXJjaF9leGNlcHRpb25fdGFibGUodW5zaWduZWQgbG9uZyk7CiMgMTA1ICIvdXNyL3NyYy9saW51 eC0yLjQuMTEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpleHRlcm4gdm9pZCBfX2dldF91c2VyXzEo dm9pZCk7CmV4dGVybiB2b2lkIF9fZ2V0X3VzZXJfMih2b2lkKTsKZXh0ZXJuIHZvaWQgX19nZXRf dXNlcl80KHZvaWQpOwojIDEyNyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3Vh Y2Nlc3MuaCIKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl8xKHZvaWQpOwpleHRlcm4gdm9pZCBfX3B1 dF91c2VyXzIodm9pZCk7CmV4dGVybiB2b2lkIF9fcHV0X3VzZXJfNCh2b2lkKTsKZXh0ZXJuIHZv aWQgX19wdXRfdXNlcl84KHZvaWQpOwoKZXh0ZXJuIHZvaWQgX19wdXRfdXNlcl9iYWQodm9pZCk7 CiMgMTg4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpzdHJ1 Y3QgX19sYXJnZV9zdHJ1Y3QgeyB1bnNpZ25lZCBsb25nIGJ1ZlsxMDBdOyB9OwojIDIyMCAiL3Vz ci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIKZXh0ZXJuIGxvbmcgX19n ZXRfdXNlcl9iYWQodm9pZCk7CiMgMzA4ICIvdXNyL3NyYy9saW51eC0yLjQuMTEvaW5jbHVkZS9h c20vdWFjY2Vzcy5oIgpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcKX19nZW5lcmljX2NvcHlf ZnJvbV91c2VyX25vY2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxv bmcgbikKewogICAgICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJlcDsgbW92c2JcbiIgIjI6 XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCglMywlMCw0KSwlMFxuIiAi NDoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIgly ZXA7IHN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglqbXAgMmJcbiIgIi5w cmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJ LmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9JmMiKG4pLCAi PSZEIiAoX19kMCksICI9JlMiIChfX2QxKSA6ICJyIihuICYgMyksICIwIihuIC8gNCksICIxIih0 byksICIyIihmcm9tKSA6ICJtZW1vcnkiKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgcmV0dXJuIG47 Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2dlbmVyaWNfY29weV90b191c2VyX25v Y2hlY2sodm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKewogICAg ICAgIGRvIHsgaW50IF9fZDAsIF9fZDE7IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBt b3ZzbFxuIiAiCW1vdmwgJTMsJTBcbiIgIjE6CXJlcDsgbW92c2JcbiIgIjI6XG4iICIuc2VjdGlv biAuZml4dXAsXCJheFwiXG4iICIzOglsZWEgMCglMywlMCw0KSwlMFxuIiAiCWptcCAyYlxuIiAi LnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIg IgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDJiXG4iICIucHJldmlvdXMiIDogIj0mYyIobiks ICI9JkQiIChfX2QwKSwgIj0mUyIgKF9fZDEpIDogInIiKG4gJiAzKSwgIjAiKG4gLyA0KSwgIjEi KHRvKSwgIjIiKGZyb20pIDogIm1lbW9yeSIpOyB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4g bjsKfQojIDU0MyAiL3Vzci9zcmMvbGludXgtMi40LjExL2luY2x1ZGUvYXNtL3VhY2Nlc3MuaCIK dW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV90b191c2VyKHZvaWQgKiwgY29uc3Qgdm9pZCAq LCB1bnNpZ25lZCBsb25nKTsKdW5zaWduZWQgbG9uZyBfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIo dm9pZCAqLCBjb25zdCB2b2lkICosIHVuc2lnbmVkIGxvbmcpOwoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nCl9fY29uc3RhbnRfY29weV90b191c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpm cm9tLCB1bnNpZ25lZCBsb25nIG4pCnsKICAgICAgICBwcmVmZXRjaChmcm9tKTsKICAgICAgICBp ZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07IGFzbSgiYWRkbCAlMywlMSA7IHNiYmwgJTAs JTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoiPSZyIiAoZmxhZyksICI9ciIgKHN1bSkgOiIx IiAodG8pLCJnIiAoKGludCkobikpLCJnIiAoZ2V0X2N1cnJlbnQoKS0+YWRkcl9saW1pdC5zZWcp KTsgZmxhZzsgfSkgPT0gMCkpCiAgICAgICAgICAgICAgICBkbyB7IGludCBfX2QwLCBfX2QxOyBz d2l0Y2ggKG4gJiAzKSB7IGRlZmF1bHQ6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBt b3ZzbFxuIiAiMTpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjI6CXNobCAkMiwlMFxu IiAiCWptcCAxYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4i ICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9 JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6 ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7 IG1vdnNsXG4iICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIg IjM6CXNobCAkMiwlMFxuIiAiNDoJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4i ICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwz YlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDAp LCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIp OyBicmVhazsgY2FzZSAyOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIg IjE6CW1vdnN3XG4iICIyOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQy LCUwXG4iICI0OglhZGRsICQyLCUwXG4iICIJam1wIDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0 aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJ LmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQi IChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFr OyBjYXNlIDM6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92 c3dcbiIgIjI6CW1vdnNiXG4iICIzOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxuIiAiNDoJ c2hsICQyLCUwXG4iICI1OglhZGRsICQyLCUwXG4iICI2OglpbmNsICUwXG4iICIJam1wIDNiXG4i ICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxu IiAiCS5sb25nIDBiLDRiXG4iICIJLmxvbmcgMWIsNWJcbiIgIgkubG9uZyAyYiw2YlxuIiAiLnBy ZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20p LCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsgYnJlYWs7IH0gfSB3aGlsZSAoMCk7CiAg ICAgICAgcmV0dXJuIG47Cn0KCnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZwpfX2NvbnN0YW50 X2NvcHlfZnJvbV91c2VyKHZvaWQgKnRvLCBjb25zdCB2b2lkICpmcm9tLCB1bnNpZ25lZCBsb25n IG4pCnsKICAgICAgICBpZiAoKCh7IHVuc2lnbmVkIGxvbmcgZmxhZyxzdW07IGFzbSgiYWRkbCAl MywlMSA7IHNiYmwgJTAsJTA7IGNtcGwgJTEsJTQ7IHNiYmwgJDAsJTAiIDoiPSZyIiAoZmxhZyks ICI9ciIgKHN1bSkgOiIxIiAoZnJvbSksImciICgoaW50KShuKSksImciIChnZXRfY3VycmVudCgp LT5hZGRyX2xpbWl0LnNlZykpOyBmbGFnOyB9KSA9PSAwKSkKICAgICAgICAgICAgICAgIGRvIHsg aW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDogX19hc21fXyBfX3ZvbGF0 aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhcIlxu IiAiMjoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIg IglyZXA7IHN0b3NsXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBc biIgIglqbXAgMWJcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxu IiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsMmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAi PSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkg OiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDE6IF9fYXNtX18gX192b2xhdGlsZV9fKCAiMDoJcmVw OyBtb3ZzbFxuIiAiMToJbW92c2JcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4i ICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAi CXJlcDsgc3Rvc2xcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3BsICUwXG4iICIJ c2hsICQyLCUwXG4iICIJaW5jbCAlMFxuIiAiCWptcCAyYlxuIiAiNDoJcHVzaGwgJSVlYXhcbiIg Igl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJaW5jbCAl MFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwi XG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25nIDFiLDRiXG4iICIucHJl dmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSks ICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAyOiBfX2FzbV9fIF9f dm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4iICIyOlxuIiAiLnNlY3Rp b24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJcHVzaGwgJTBcbiIgIglwdXNobCAlJWVheFxuIiAiCXhv cmwgJSVlYXgsJSVlYXhcbiIgIglyZXA7IHN0b3NsXG4iICIJc3Rvc3dcbiIgIglwb3BsICUlZWF4 XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWFkZGwgJDIsJTBcbiIgIglqbXAgMmJc biIgIjQ6CXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3XG4iICIJ cG9wbCAlJWVheFxuIiAiCWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIgIi5wcmV2aW91c1xuIiAi LnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsM2Jc biIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2QwKSwg Ij0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnkiKTsg YnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIx Ogltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4i ICI0OglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAi CXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBv cGwgJTBcbiIgIglzaGwgJDIsJTBcbiIgIglhZGRsICQzLCUwXG4iICIJam1wIDJiXG4iICI1Oglw dXNobCAlJWVheFxuIiAiCXhvcmwgJSVlYXgsJSVlYXhcbiIgIglzdG9zd1xuIiAiCXN0b3NiXG4i ICIJcG9wbCAlJWVheFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIgIjY6CXB1c2hsICUl ZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAi CWluY2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJs ZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgkubG9uZyAxYiw1Ylxu IiAiCS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAi PSZEIiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBi cmVhazsgfSB9IHdoaWxlICgwKTsKICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAoX19idWls dGluX2NvbnN0YW50X3AoMCkgPyAoX19idWlsdGluX2NvbnN0YW50X3AoKG4pKSA/IF9fY29uc3Rh bnRfY19hbmRfY291bnRfbWVtc2V0KCgodG8pKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hh cikoMCkpKSwoKG4pKSkgOiBfX2NvbnN0YW50X2NfbWVtc2V0KCgodG8pKSwoKDB4MDEwMTAxMDFV TCoodW5zaWduZWQgY2hhcikoMCkpKSwoKG4pKSkpIDogKF9fYnVpbHRpbl9jb25zdGFudF9wKChu KSkgPyBfX21lbXNldF9nZW5lcmljKCgoKHRvKSkpLCgoKDApKSksKCgobikpKSkgOiBfX21lbXNl dF9nZW5lcmljKCgodG8pKSwoKDApKSwoKG4pKSkpKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3Rh dGljIGlubGluZSB1bnNpZ25lZCBsb25nCl9fY29uc3RhbnRfY29weV90b191c2VyX25vY2hlY2so dm9pZCAqdG8sIGNvbnN0IHZvaWQgKmZyb20sIHVuc2lnbmVkIGxvbmcgbikKewogICAgICAgIGRv IHsgaW50IF9fZDAsIF9fZDE7IHN3aXRjaCAobiAmIDMpIHsgZGVmYXVsdDogX19hc21fXyBfX3Zv bGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4iICIxOlxuIiAiLnNlY3Rpb24gLmZpeHVwLFwiYXhc IlxuIiAiMjoJc2hsICQyLCUwXG4iICIJam1wIDFiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9u IF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxpZ24gNFxuIiAiCS5sb25nIDBiLDJiXG4iICIucHJl dmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19kMSkgOiAiMSIoZnJvbSks ICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2FzZSAxOiBfX2FzbV9fIF9f dm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnNiXG4iICIyOlxuIiAiLnNlY3Rp b24gLmZpeHVwLFwiYXhcIlxuIiAiMzoJc2hsICQyLCUwXG4iICI0OglpbmNsICUwXG4iICIJam1w IDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxp Z24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAi PWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwg IjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAs XCJheFwiXG4iICIzOglzaGwgJDIsJTBcbiIgIjQ6CWFkZGwgJDIsJTBcbiIgIglqbXAgMmJcbiIg Ii5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxcImFcIlxuIiAiCS5hbGlnbiA0XG4i ICIJLmxvbmcgMGIsM2JcbiIgIgkubG9uZyAxYiw0YlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiks ICI9JlMiIChfX2QwKSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80 KSA6ICJtZW1vcnkiKTsgYnJlYWs7IGNhc2UgMzogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOgly ZXA7IG1vdnNsXG4iICIxOgltb3Zzd1xuIiAiMjoJbW92c2JcbiIgIjM6XG4iICIuc2VjdGlvbiAu Zml4dXAsXCJheFwiXG4iICI0OglzaGwgJDIsJTBcbiIgIjU6CWFkZGwgJDIsJTBcbiIgIjY6CWlu Y2wgJTBcbiIgIglqbXAgM2JcbiIgIi5wcmV2aW91c1xuIiAiLnNlY3Rpb24gX19leF90YWJsZSxc ImFcIlxuIiAiCS5hbGlnbiA0XG4iICIJLmxvbmcgMGIsNGJcbiIgIgkubG9uZyAxYiw1YlxuIiAi CS5sb25nIDJiLDZiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZE IiAoX19kMSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVh azsgfSB9IHdoaWxlICgwKTsKICAgICAgICByZXR1cm4gbjsKfQoKc3RhdGljIGlubGluZSB1bnNp Z25lZCBsb25nCl9fY29uc3RhbnRfY29weV9mcm9tX3VzZXJfbm9jaGVjayh2b2lkICp0bywgY29u c3Qgdm9pZCAqZnJvbSwgdW5zaWduZWQgbG9uZyBuKQp7CiAgICAgICAgZG8geyBpbnQgX19kMCwg X19kMTsgc3dpdGNoIChuICYgMykgeyBkZWZhdWx0OiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6 CXJlcDsgbW92c2xcbiIgIjE6XG4iICIuc2VjdGlvbiAuZml4dXAsXCJheFwiXG4iICIyOglwdXNo bCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXJlcDsgc3Rv c2xcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAiCXNobCAkMiwlMFxuIiAiCWptcCAx YlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWdu IDRcbiIgIgkubG9uZyAwYiwyYlxuIiAiLnByZXZpb3VzIiA6ICI9YyIobiksICI9JlMiIChfX2Qw KSwgIj0mRCIgKF9fZDEpIDogIjEiKGZyb20pLCAiMiIodG8pLCAiMCIobi80KSA6ICJtZW1vcnki KTsgYnJlYWs7IGNhc2UgMTogX19hc21fXyBfX3ZvbGF0aWxlX18oICIwOglyZXA7IG1vdnNsXG4i ICIxOgltb3ZzYlxuIiAiMjpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjM6CXB1c2hs ICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9z bFxuIiAiCXN0b3NiXG4iICIJcG9wbCAlJWVheFxuIiAiCXBvcGwgJTBcbiIgIglzaGwgJDIsJTBc biIgIglpbmNsICUwXG4iICIJam1wIDJiXG4iICI0OglwdXNobCAlJWVheFxuIiAiCXhvcmwgJSVl YXgsJSVlYXhcbiIgIglzdG9zYlxuIiAiCXBvcGwgJSVlYXhcbiIgIglpbmNsICUwXG4iICIJam1w IDJiXG4iICIucHJldmlvdXNcbiIgIi5zZWN0aW9uIF9fZXhfdGFibGUsXCJhXCJcbiIgIgkuYWxp Z24gNFxuIiAiCS5sb25nIDBiLDNiXG4iICIJLmxvbmcgMWIsNGJcbiIgIi5wcmV2aW91cyIgOiAi PWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2QxKSA6ICIxIihmcm9tKSwgIjIiKHRvKSwg IjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyBjYXNlIDI6IF9fYXNtX18gX192b2xhdGlsZV9f KCAiMDoJcmVwOyBtb3ZzbFxuIiAiMToJbW92c3dcbiIgIjI6XG4iICIuc2VjdGlvbiAuZml4dXAs XCJheFwiXG4iICIzOglwdXNobCAlMFxuIiAiCXB1c2hsICUlZWF4XG4iICIJeG9ybCAlJWVheCwl JWVheFxuIiAiCXJlcDsgc3Rvc2xcbiIgIglzdG9zd1xuIiAiCXBvcGwgJSVlYXhcbiIgIglwb3Bs ICUwXG4iICIJc2hsICQyLCUwXG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiNDoJcHVz aGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc3dcbiIgIglwb3BsICUlZWF4 XG4iICIJYWRkbCAkMiwlMFxuIiAiCWptcCAyYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBf X2V4X3RhYmxlLFwiYVwiXG4iICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiwzYlxuIiAiCS5sb25n IDFiLDRiXG4iICIucHJldmlvdXMiIDogIj1jIihuKSwgIj0mUyIgKF9fZDApLCAiPSZEIiAoX19k MSkgOiAiMSIoZnJvbSksICIyIih0byksICIwIihuLzQpIDogIm1lbW9yeSIpOyBicmVhazsgY2Fz ZSAzOiBfX2FzbV9fIF9fdm9sYXRpbGVfXyggIjA6CXJlcDsgbW92c2xcbiIgIjE6CW1vdnN3XG4i ICIyOgltb3ZzYlxuIiAiMzpcbiIgIi5zZWN0aW9uIC5maXh1cCxcImF4XCJcbiIgIjQ6CXB1c2hs ICUwXG4iICIJcHVzaGwgJSVlYXhcbiIgIgl4b3JsICUlZWF4LCUlZWF4XG4iICIJcmVwOyBzdG9z bFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJcG9wbCAlMFxuIiAi CXNobCAkMiwlMFxuIiAiCWFkZGwgJDMsJTBcbiIgIglqbXAgMmJcbiIgIjU6CXB1c2hsICUlZWF4 XG4iICIJeG9ybCAlJWVheCwlJWVheFxuIiAiCXN0b3N3XG4iICIJc3Rvc2JcbiIgIglwb3BsICUl ZWF4XG4iICIJYWRkbCAkMywlMFxuIiAiCWptcCAyYlxuIiAiNjoJcHVzaGwgJSVlYXhcbiIgIgl4 b3JsICUlZWF4LCUlZWF4XG4iICIJc3Rvc2JcbiIgIglwb3BsICUlZWF4XG4iICIJaW5jbCAlMFxu IiAiCWptcCAzYlxuIiAiLnByZXZpb3VzXG4iICIuc2VjdGlvbiBfX2V4X3RhYmxlLFwiYVwiXG4i ICIJLmFsaWduIDRcbiIgIgkubG9uZyAwYiw0YlxuIiAiCS5sb25nIDFiLDViXG4iICIJLmxvbmcg MmIsNmJcbiIgIi5wcmV2aW91cyIgOiAiPWMiKG4pLCAiPSZTIiAoX19kMCksICI9JkQiIChfX2Qx KSA6ICIxIihmcm9tKSwgIjIiKHRvKSwgIjAiKG4vNCkgOiAibWVtb3J5Iik7IGJyZWFrOyB9IH0g d2hpbGUgKDApOwogICAgICAgIHJldHVybiBuOwp9CiMgNTk5ICIvdXNyL3NyYy9saW51eC0yLjQu MTEvaW5jbHVkZS9hc20vdWFjY2Vzcy5oIgpsb25nIHN0cm5jcHlfZnJvbV91c2VyKGNoYXIgKmRz dCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsKbG9uZyBfX3N0cm5jcHlfZnJvbV91c2Vy KGNoYXIgKmRzdCwgY29uc3QgY2hhciAqc3JjLCBsb25nIGNvdW50KTsKCmxvbmcgc3Rybmxlbl91 c2VyKGNvbnN0IGNoYXIgKnN0ciwgbG9uZyBuKTsKdW5zaWduZWQgbG9uZyBjbGVhcl91c2VyKHZv aWQgKm1lbSwgdW5zaWduZWQgbG9uZyBsZW4pOwp1bnNpZ25lZCBsb25nIF9fY2xlYXJfdXNlcih2 b2lkICptZW0sIHVuc2lnbmVkIGxvbmcgbGVuKTsKIyAxNjAgIjgxMzl0b28uYyIgMgojIDE5OCAi ODEzOXRvby5jIgpzdGF0aWMgaW50IG1lZGlhWzhdID0gey0xLCAtMSwgLTEsIC0xLCAtMSwgLTEs IC0xLCAtMX07CnN0YXRpYyBpbnQgZnVsbF9kdXBsZXhbOF0gPSB7LTEsIC0xLCAtMSwgLTEsIC0x LCAtMSwgLTEsIC0xfTsKCgpzdGF0aWMgaW50IG1heF9pbnRlcnJ1cHRfd29yayA9IDIwOwoKCgpz dGF0aWMgaW50IG11bHRpY2FzdF9maWx0ZXJfbGltaXQgPSAzMjsKIyAyNDEgIjgxMzl0b28uYyIK ZW51bSB7CiAgICAgICAgSEFTX01JSV9YQ1ZSID0gMHgwMTAwMDAsCiAgICAgICAgSEFTX0NISVBf WENWUiA9IDB4MDIwMDAwLAogICAgICAgIEhBU19MTktfQ0hORyA9IDB4MDQwMDAwLAp9OwoKCgoK CgoKdHlwZWRlZiBlbnVtIHsKICAgICAgICBSVEw4MTM5ID0gMCwKICAgICAgICBSVEw4MTM5X0NC LAogICAgICAgIFNNQzEyMTFUWCwKCiAgICAgICAgREVMVEE4MTM5LAogICAgICAgIEFERFRST044 MTM5LAogICAgICAgIERGRTUzOFRYLAogICAgICAgIFJUTDgxMjksCn0gYm9hcmRfdDsKCgoKc3Rh dGljIHN0cnVjdCB7CiAgICAgICAgY29uc3QgY2hhciAqbmFtZTsKICAgICAgICB1MzIgaHdfZmxh Z3M7Cn0gYm9hcmRfaW5mb1tdIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5kYXRhLmlu aXQiKSkpID0gewogICAgICAgIHsgIlJlYWxUZWsgUlRMODEzOSBGYXN0IEV0aGVybmV0IiwgSEFT X0NISVBfWENWUnxIQVNfTE5LX0NITkcgfSwKICAgICAgICB7ICJSZWFsVGVrIFJUTDgxMzlCIFBD SS9DYXJkQnVzIiwgSEFTX0NISVBfWENWUnxIQVNfTE5LX0NITkcgfSwKICAgICAgICB7ICJTTUMx MjExVFggRVpDYXJkIDEwLzEwMCAoUmVhbFRlayBSVEw4MTM5KSIsIEhBU19DSElQX1hDVlJ8SEFT X0xOS19DSE5HIH0sCgogICAgICAgIHsgIkRlbHRhIEVsZWN0cm9uaWNzIDgxMzkgMTAvMTAwQmFz ZVRYIiwgSEFTX0NISVBfWENWUnxIQVNfTE5LX0NITkcgfSwKICAgICAgICB7ICJBZGR0cm9uIFRl Y2hub2xneSA4MTM5IDEwLzEwMEJhc2VUWCIsIEhBU19DSElQX1hDVlJ8SEFTX0xOS19DSE5HIH0s CiAgICAgICAgeyAiRC1MaW5rIERGRS01MzhUWCAoUmVhbFRlayBSVEw4MTM5KSIsIEhBU19DSElQ X1hDVlJ8SEFTX0xOS19DSE5HIH0sCiAgICAgICAgeyAiUmVhbFRlayBSVEw4MTI5IiwgSEFTX01J SV9YQ1ZSIH0sCn07CgoKc3RhdGljIHN0cnVjdCBwY2lfZGV2aWNlX2lkIHJ0bDgxMzlfcGNpX3Ri bFtdIF9fYXR0cmlidXRlX18gKChfX3NlY3Rpb25fXyAoIi5kYXRhLmluaXQiKSkpID0gewogICAg ICAgIHsweDEwZWMsIDB4ODEzOSwgKH4wKSwgKH4wKSwgMCwgMCwgUlRMODEzOSB9LAogICAgICAg IHsweDEwZWMsIDB4ODEzOCwgKH4wKSwgKH4wKSwgMCwgMCwgUlRMODEzOV9DQiB9LAogICAgICAg IHsweDExMTMsIDB4MTIxMSwgKH4wKSwgKH4wKSwgMCwgMCwgU01DMTIxMVRYIH0sCgogICAgICAg IHsweDE1MDAsIDB4MTM2MCwgKH4wKSwgKH4wKSwgMCwgMCwgREVMVEE4MTM5IH0sCiAgICAgICAg ezB4NDAzMywgMHgxMzYwLCAofjApLCAofjApLCAwLCAwLCBBRERUUk9OODEzOSB9LAogICAgICAg IHsweDExODYsIDB4MTMwMCwgKH4wKSwgKH4wKSwgMCwgMCwgREZFNTM4VFggfSwKIyAyOTggIjgx Mzl0b28uYyIKICAgICAgICB7KH4wKSwgMHg4MTM5LCAweDEwZWMsIDB4ODEzOSwgMCwgMCwgUlRM ODEzOSB9LAogICAgICAgIHsofjApLCAweDgxMzksIDB4MTE4NiwgMHgxMzAwLCAwLCAwLCBERkU1 MzhUWCB9LAoKICAgICAgICB7MCx9Cn07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDsKCgoKCgplbnVtIFJUTDgxMzlfcmVnaXN0ZXJzIHsKICAgICAgICBNQUMwID0g MCwKICAgICAgICBNQVIwID0gOCwKICAgICAgICBUeFN0YXR1czAgPSAweDEwLAogICAgICAgIFR4 QWRkcjAgPSAweDIwLAogICAgICAgIFJ4QnVmID0gMHgzMCwKICAgICAgICBSeEVhcmx5Q250ID0g MHgzNCwKICAgICAgICBSeEVhcmx5U3RhdHVzID0gMHgzNiwKICAgICAgICBDaGlwQ21kID0gMHgz NywKICAgICAgICBSeEJ1ZlB0ciA9IDB4MzgsCiAgICAgICAgUnhCdWZBZGRyID0gMHgzQSwKICAg ICAgICBJbnRyTWFzayA9IDB4M0MsCiAgICAgICAgSW50clN0YXR1cyA9IDB4M0UsCiAgICAgICAg VHhDb25maWcgPSAweDQwLAogICAgICAgIENoaXBWZXJzaW9uID0gMHg0MywKICAgICAgICBSeENv bmZpZyA9IDB4NDQsCiAgICAgICAgVGltZXIgPSAweDQ4LAogICAgICAgIFJ4TWlzc2VkID0gMHg0 QywKICAgICAgICBDZmc5MzQ2ID0gMHg1MCwKICAgICAgICBDb25maWcwID0gMHg1MSwKICAgICAg ICBDb25maWcxID0gMHg1MiwKICAgICAgICBGbGFzaFJlZyA9IDB4NTQsCiAgICAgICAgTWVkaWFT dGF0dXMgPSAweDU4LAogICAgICAgIENvbmZpZzMgPSAweDU5LAogICAgICAgIENvbmZpZzQgPSAw eDVBLAogICAgICAgIEhsdENsayA9IDB4NUIsCiAgICAgICAgTXVsdGlJbnRyID0gMHg1QywKICAg ICAgICBUeFN1bW1hcnkgPSAweDYwLAogICAgICAgIEJhc2ljTW9kZUN0cmwgPSAweDYyLAogICAg ICAgIEJhc2ljTW9kZVN0YXR1cyA9IDB4NjQsCiAgICAgICAgTldheUFkdmVydCA9IDB4NjYsCiAg ICAgICAgTldheUxQQVIgPSAweDY4LAogICAgICAgIE5XYXlFeHBhbnNpb24gPSAweDZBLAoKICAg ICAgICBGSUZPVE1TID0gMHg3MCwKICAgICAgICBDU0NSID0gMHg3NCwKICAgICAgICBQQVJBNzgg PSAweDc4LAogICAgICAgIFBBUkE3YyA9IDB4N2MsCiAgICAgICAgQ29uZmlnNSA9IDB4RDgsCn07 CgplbnVtIENsZWFyQml0TWFza3MgewogICAgICAgIE11bHRpSW50ckNsZWFyID0gMHhGMDAwLAog ICAgICAgIENoaXBDbWRDbGVhciA9IDB4RTIsCiAgICAgICAgQ29uZmlnMUNsZWFyID0gKDE8PDcp fCgxPDw2KXwoMTw8Myl8KDE8PDIpfCgxPDwxKSwKfTsKCmVudW0gQ2hpcENtZEJpdHMgewogICAg ICAgIENtZFJlc2V0ID0gMHgxMCwKICAgICAgICBDbWRSeEVuYiA9IDB4MDgsCiAgICAgICAgQ21k VHhFbmIgPSAweDA0LAogICAgICAgIFJ4QnVmRW1wdHkgPSAweDAxLAp9OwoKCmVudW0gSW50clN0 YXR1c0JpdHMgewogICAgICAgIFBDSUVyciA9IDB4ODAwMCwKICAgICAgICBQQ1NUaW1lb3V0ID0g MHg0MDAwLAogICAgICAgIFJ4RklGT092ZXIgPSAweDQwLAogICAgICAgIFJ4VW5kZXJydW4gPSAw eDIwLAogICAgICAgIFJ4T3ZlcmZsb3cgPSAweDEwLAogICAgICAgIFR4RXJyID0gMHgwOCwKICAg ICAgICBUeE9LID0gMHgwNCwKICAgICAgICBSeEVyciA9IDB4MDIsCiAgICAgICAgUnhPSyA9IDB4 MDEsCgogICAgICAgIFJ4QWNrQml0cyA9IFJ4RklGT092ZXIgfCBSeE92ZXJmbG93IHwgUnhPSywK fTsKCmVudW0gVHhTdGF0dXNCaXRzIHsKICAgICAgICBUeEhvc3RPd25zID0gMHgyMDAwLAogICAg ICAgIFR4VW5kZXJydW4gPSAweDQwMDAsCiAgICAgICAgVHhTdGF0T0sgPSAweDgwMDAsCiAgICAg ICAgVHhPdXRPZldpbmRvdyA9IDB4MjAwMDAwMDAsCiAgICAgICAgVHhBYm9ydGVkID0gMHg0MDAw MDAwMCwKICAgICAgICBUeENhcnJpZXJMb3N0ID0gMHg4MDAwMDAwMCwKfTsKZW51bSBSeFN0YXR1 c0JpdHMgewogICAgICAgIFJ4TXVsdGljYXN0ID0gMHg4MDAwLAogICAgICAgIFJ4UGh5c2ljYWwg PSAweDQwMDAsCiAgICAgICAgUnhCcm9hZGNhc3QgPSAweDIwMDAsCiAgICAgICAgUnhCYWRTeW1i b2wgPSAweDAwMjAsCiAgICAgICAgUnhSdW50ID0gMHgwMDEwLAogICAgICAgIFJ4VG9vTG9uZyA9 IDB4MDAwOCwKICAgICAgICBSeENSQ0VyciA9IDB4MDAwNCwKICAgICAgICBSeEJhZEFsaWduID0g MHgwMDAyLAogICAgICAgIFJ4U3RhdHVzT0sgPSAweDAwMDEsCn07CgoKZW51bSByeF9tb2RlX2Jp dHMgewogICAgICAgIEFjY2VwdEVyciA9IDB4MjAsCiAgICAgICAgQWNjZXB0UnVudCA9IDB4MTAs CiAgICAgICAgQWNjZXB0QnJvYWRjYXN0ID0gMHgwOCwKICAgICAgICBBY2NlcHRNdWx0aWNhc3Qg PSAweDA0LAogICAgICAgIEFjY2VwdE15UGh5cyA9IDB4MDIsCiAgICAgICAgQWNjZXB0QWxsUGh5 cyA9IDB4MDEsCn07CgoKZW51bSB0eF9jb25maWdfYml0cyB7CiAgICAgICAgVHhJRkcxID0gKDEg PDwgMjUpLAogICAgICAgIFR4SUZHMCA9ICgxIDw8IDI0KSwKICAgICAgICBUeExvb3BCYWNrID0g KDEgPDwgMTgpIHwgKDEgPDwgMTcpLAogICAgICAgIFR4Q1JDID0gKDEgPDwgMTYpLAogICAgICAg IFR4Q2xlYXJBYnQgPSAoMSA8PCAwKSwKICAgICAgICBUeERNQVNoaWZ0ID0gOCwKCiAgICAgICAg VHhWZXJzaW9uTWFzayA9IDB4N0M4MDAwMDAsCn07CgoKZW51bSBDb25maWcxQml0cyB7CiAgICAg ICAgQ2ZnMV9QTV9FbmFibGUgPSAweDAxLAogICAgICAgIENmZzFfVlBEX0VuYWJsZSA9IDB4MDIs CiAgICAgICAgQ2ZnMV9QSU8gPSAweDA0LAogICAgICAgIENmZzFfTU1JTyA9IDB4MDgsCiAgICAg ICAgTFdBS0UgPSAweDEwLAogICAgICAgIENmZzFfRHJpdmVyX0xvYWQgPSAweDIwLAogICAgICAg IENmZzFfTEVEMCA9IDB4NDAsCiAgICAgICAgQ2ZnMV9MRUQxID0gMHg4MCwKICAgICAgICBTTEVF UCA9ICgxIDw8IDEpLAogICAgICAgIFBXUkROID0gKDEgPDwgMCksCn07CgoKZW51bSBDb25maWcz Qml0cyB7CiAgICAgICAgQ2ZnM19GQnRCRW4gPSAoMSA8PCAwKSwKICAgICAgICBDZmczX0Z1bmNS ZWdFbiA9ICgxIDw8IDEpLAogICAgICAgIENmZzNfQ0xLUlVOX0VuID0gKDEgPDwgMiksCiAgICAg ICAgQ2ZnM19DYXJkQl9FbiA9ICgxIDw8IDMpLAogICAgICAgIENmZzNfTGlua1VwID0gKDEgPDwg NCksCiAgICAgICAgQ2ZnM19NYWdpYyA9ICgxIDw8IDUpLAogICAgICAgIENmZzNfUEFSTV9FbiA9 ICgxIDw8IDYpLAogICAgICAgIENmZzNfR05UU2VsID0gKDEgPDwgNyksCn07CgoKZW51bSBDb25m aWc0Qml0cyB7CiAgICAgICAgTFdQVE4gPSAoMSA8PCAyKSwKfTsKCgplbnVtIENvbmZpZzVCaXRz IHsKICAgICAgICBDZmc1X1BNRV9TVFMgPSAoMSA8PCAwKSwKICAgICAgICBDZmc1X0xBTldha2Ug PSAoMSA8PCAxKSwKICAgICAgICBDZmc1X0xEUFMgPSAoMSA8PCAyKSwKICAgICAgICBDZmc1X0ZJ Rk9BZGRyUHRyID0gKDEgPDwgMyksCiAgICAgICAgQ2ZnNV9VV0YgPSAoMSA8PCA0KSwKICAgICAg ICBDZmc1X01XRiA9ICgxIDw8IDUpLAogICAgICAgIENmZzVfQldGID0gKDEgPDwgNiksCn07Cgpl bnVtIFJ4Q29uZmlnQml0cyB7CgogICAgICAgIFJ4Q2ZnRWFybHlSeE5vbmUgPSAwLAogICAgICAg IFJ4Q2ZnRWFybHlSeFNoaWZ0ID0gMjQsCgoKICAgICAgICBSeENmZ0ZJRk9TaGlmdCA9IDEzLAog ICAgICAgIFJ4Q2ZnRklGT05vbmUgPSAoNyA8PCBSeENmZ0ZJRk9TaGlmdCksCgoKICAgICAgICBS eENmZ0RNQVNoaWZ0ID0gOCwKICAgICAgICBSeENmZ0RNQVVubGltaXRlZCA9ICg3IDw8IFJ4Q2Zn RE1BU2hpZnQpLAoKCiAgICAgICAgUnhDZmdSY3Y4SyA9IDAsCiAgICAgICAgUnhDZmdSY3YxNksg PSAoMSA8PCAxMSksCiAgICAgICAgUnhDZmdSY3YzMksgPSAoMSA8PCAxMiksCiAgICAgICAgUnhD ZmdSY3Y2NEsgPSAoMSA8PCAxMSkgfCAoMSA8PCAxMiksCgoKICAgICAgICBSeE5vV3JhcCA9ICgx IDw8IDcpLAp9OwoKCgoKZW51bSBDU0NSQml0cyB7CiAgICAgICAgQ1NDUl9MaW5rT0tCaXQgPSAw eDA0MDAsCiAgICAgICAgQ1NDUl9MaW5rQ2hhbmdlQml0ID0gMHgwODAwLAogICAgICAgIENTQ1Jf TGlua1N0YXR1c0JpdHMgPSAweDBmMDAwLAogICAgICAgIENTQ1JfTGlua0Rvd25PZmZDbWQgPSAw eDAwM2MwLAogICAgICAgIENTQ1JfTGlua0Rvd25DbWQgPSAweDBmM2MwLAp9OwoKCmVudW0gQ2Zn OTM0NkJpdHMgewogICAgICAgIENmZzkzNDZfTG9jayA9IDB4MDAsCiAgICAgICAgQ2ZnOTM0Nl9V bmxvY2sgPSAweEMwLAp9OwoKCgoKCnN0YXRpYyBjb25zdCB1bnNpZ25lZCBsb25nIHBhcmFtWzRd WzRdID0gewogICAgICAgIHsweGNiMzlkZTQzLCAweGNiMzljZTQzLCAweGZiMzhkZTAzLCAweGNi MzhkZTQzfSwKICAgICAgICB7MHhjYjM5ZGU0MywgMHhjYjM5Y2U0MywgMHhjYjM5Y2U4MywgMHhj YjM5Y2U4M30sCiAgICAgICAgezB4Y2IzOWRlNDMsIDB4Y2IzOWNlNDMsIDB4Y2IzOWNlODMsIDB4 Y2IzOWNlODN9LAogICAgICAgIHsweGJiMzlkZTQzLCAweGJiMzljZTQzLCAweGJiMzljZTgzLCAw eGJiMzljZTgzfQp9OwoKc3RydWN0IHJpbmdfaW5mbyB7CiAgICAgICAgc3RydWN0IHNrX2J1ZmYg KnNrYjsKICAgICAgICBkbWFfYWRkcl90IG1hcHBpbmc7Cn07CgoKdHlwZWRlZiBlbnVtIHsKICAg ICAgICBDSF84MTM5ID0gMCwKICAgICAgICBDSF84MTM5X0ssCiAgICAgICAgQ0hfODEzOUEsCiAg ICAgICAgQ0hfODEzOUIsCiAgICAgICAgQ0hfODEzMCwKICAgICAgICBDSF84MTM5QywKfSBjaGlw X3Q7CgplbnVtIGNoaXBfZmxhZ3MgewogICAgICAgIEhhc0hsdENsayA9ICgxIDw8IDApLAogICAg ICAgIEhhc0xXYWtlID0gKDEgPDwgMSksCn07CgoKCmNvbnN0IHN0YXRpYyBzdHJ1Y3QgewogICAg ICAgIGNvbnN0IGNoYXIgKm5hbWU7CiAgICAgICAgdTggdmVyc2lvbjsKICAgICAgICB1MzIgUnhD b25maWdNYXNrOwogICAgICAgIHUzMiBmbGFnczsKfSBydGxfY2hpcF9pbmZvW10gPSB7CiAgICAg ICAgeyAiUlRMLTgxMzkiLAogICAgICAgICAgMHg0MCwKICAgICAgICAgIDB4ZjBmZTAwNDAsCiAg ICAgICAgICBIYXNIbHRDbGssCiAgICAgICAgfSwKCiAgICAgICAgeyAiUlRMLTgxMzkgcmV2IEsi LAogICAgICAgICAgMHg2MCwKICAgICAgICAgIDB4ZjBmZTAwNDAsCiAgICAgICAgICBIYXNIbHRD bGssCiAgICAgICAgfSwKCiAgICAgICAgeyAiUlRMLTgxMzlBIiwKICAgICAgICAgIDB4NzAsCiAg ICAgICAgICAweGYwZmUwMDQwLAogICAgICAgICAgSGFzSGx0Q2xrLAogICAgICAgIH0sCgogICAg ICAgIHsgIlJUTC04MTM5QiIsCiAgICAgICAgICAweDc4LAogICAgICAgICAgMHhmMGZjMDA0MCwK ICAgICAgICAgIEhhc0xXYWtlLAogICAgICAgIH0sCgogICAgICAgIHsgIlJUTC04MTMwIiwKICAg ICAgICAgIDB4N0MsCiAgICAgICAgICAweGYwZmUwMDQwLAogICAgICAgICAgSGFzTFdha2UsCiAg ICAgICAgfSwKCiAgICAgICAgeyAiUlRMLTgxMzlDIiwKICAgICAgICAgIDB4NzQsCiAgICAgICAg ICAweGYwZmMwMDQwLAogICAgICAgICAgSGFzTFdha2UsCiAgICAgICAgfSwKCn07CgpzdHJ1Y3Qg cnRsX2V4dHJhX3N0YXRzIHsKICAgICAgICB1bnNpZ25lZCBsb25nIGVhcmx5X3J4OwogICAgICAg IHVuc2lnbmVkIGxvbmcgdHhfYnVmX21hcHBlZDsKICAgICAgICB1bnNpZ25lZCBsb25nIHR4X3Rp bWVvdXRzOwp9OwoKc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSB7CiAgICAgICAgdm9pZCAqbW1pb19h ZGRyOwogICAgICAgIGludCBkcnZfZmxhZ3M7CiAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBjaV9k ZXY7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3RhdHM7CiAgICAgICAgdW5zaWdu ZWQgY2hhciAqcnhfcmluZzsKICAgICAgICB1bnNpZ25lZCBpbnQgY3VyX3J4OwogICAgICAgIHVu c2lnbmVkIGludCB0eF9mbGFnOwogICAgICAgIHVuc2lnbmVkIGxvbmcgY3VyX3R4OwogICAgICAg IHVuc2lnbmVkIGxvbmcgZGlydHlfdHg7CgogICAgICAgIHN0cnVjdCByaW5nX2luZm8gdHhfaW5m b1s0XTsKICAgICAgICB1bnNpZ25lZCBjaGFyICp0eF9idWZbNF07CiAgICAgICAgdW5zaWduZWQg Y2hhciAqdHhfYnVmczsKICAgICAgICBkbWFfYWRkcl90IHJ4X3JpbmdfZG1hOwogICAgICAgIGRt YV9hZGRyX3QgdHhfYnVmc19kbWE7CiAgICAgICAgc2lnbmVkIGNoYXIgcGh5c1s0XTsKICAgICAg ICBjaGFyIHR3aXN0aWUsIHR3aXN0X3JvdywgdHdpc3RfY29sOwogICAgICAgIHVuc2lnbmVkIGlu dCBmdWxsX2R1cGxleDoxOwogICAgICAgIHVuc2lnbmVkIGludCBkdXBsZXhfbG9jazoxOwogICAg ICAgIHVuc2lnbmVkIGludCBkZWZhdWx0X3BvcnQ6NDsKICAgICAgICB1bnNpZ25lZCBpbnQgbWVk aWEyOjQ7CiAgICAgICAgdW5zaWduZWQgaW50IG1lZGlhbG9jazoxOwogICAgICAgIHVuc2lnbmVk IGludCBtZWRpYXNlbnNlOjE7CiAgICAgICAgc3BpbmxvY2tfdCBsb2NrOwogICAgICAgIGNoaXBf dCBjaGlwc2V0OwogICAgICAgIHBpZF90IHRocl9waWQ7CiAgICAgICAgd2FpdF9xdWV1ZV9oZWFk X3QgdGhyX3dhaXQ7CiAgICAgICAgc3RydWN0IGNvbXBsZXRpb24gdGhyX2V4aXRlZDsKICAgICAg ICB1MzIgcnhfY29uZmlnOwogICAgICAgIHN0cnVjdCBydGxfZXh0cmFfc3RhdHMgeHN0YXRzOwp9 OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgpzdGF0aWMgaW50IHJlYWRfZWVwcm9tICh2b2lkICppb2FkZHIsIGlu dCBsb2NhdGlvbiwgaW50IGFkZHJfbGVuKTsKc3RhdGljIGludCBydGw4MTM5X29wZW4gKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgaW50IG1kaW9fcmVhZCAoc3RydWN0IG5ldF9kZXZp Y2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uKTsKc3RhdGljIHZvaWQgbWRpb193cml0 ZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgaW50IHBoeV9pZCwgaW50IGxvY2F0aW9uLAogICAg ICAgICAgICAgICAgICAgICAgICBpbnQgdmFsKTsKc3RhdGljIGludCBydGw4MTM5X3RocmVhZCAo dm9pZCAqZGF0YSk7CnN0YXRpYyB2b2lkIHJ0bDgxMzlfdHhfdGltZW91dCAoc3RydWN0IG5ldF9k ZXZpY2UgKmRldik7CnN0YXRpYyB2b2lkIHJ0bDgxMzlfaW5pdF9yaW5nIChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KTsKc3RhdGljIGludCBydGw4MTM5X3N0YXJ0X3htaXQgKHN0cnVjdCBza19idWZm ICpza2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAq ZGV2KTsKc3RhdGljIHZvaWQgcnRsODEzOV9pbnRlcnJ1cHQgKGludCBpcnEsIHZvaWQgKmRldl9p bnN0YW5jZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBwdF9yZWdzICpy ZWdzKTsKc3RhdGljIGludCBydGw4MTM5X2Nsb3NlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsK c3RhdGljIGludCBuZXRkZXZfaW9jdGwgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBp ZnJlcSAqcnEsIGludCBjbWQpOwpzdGF0aWMgc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgKnJ0bDgx MzlfZ2V0X3N0YXRzIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKc3RhdGljIGlubGluZSB1MzIg ZXRoZXJfY3JjIChpbnQgbGVuZ3RoLCB1bnNpZ25lZCBjaGFyICpkYXRhKTsKc3RhdGljIHZvaWQg cnRsODEzOV9zZXRfcnhfbW9kZSAoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7CnN0YXRpYyB2b2lk IF9fc2V0X3J4X21vZGUgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOwpzdGF0aWMgdm9pZCBydGw4 MTM5X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsKIyA3MDkgIjgxMzl0b28uYyIK c3RhdGljIGNvbnN0IHUxNiBydGw4MTM5X2ludHJfbWFzayA9CiAgICAgICAgUENJRXJyIHwgUENT VGltZW91dCB8IFJ4VW5kZXJydW4gfCBSeE92ZXJmbG93IHwgUnhGSUZPT3ZlciB8CiAgICAgICAg VHhFcnIgfCBUeE9LIHwgUnhFcnIgfCBSeE9LOwoKc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBy dGw4MTM5X3J4X2NvbmZpZyA9CiAgICAgICAgICAoMTQgPDwgUnhDZmdFYXJseVJ4U2hpZnQpIHwg UnhDZmdSY3YzMksgfCBSeE5vV3JhcCB8CiAgICAgICAgICAoNyA8PCBSeENmZ0ZJRk9TaGlmdCkg fAogICAgICAgICAgKDcgPDwgUnhDZmdETUFTaGlmdCk7CgoKc3RhdGljIHZvaWQgX19ydGw4MTM5 X2NsZWFudXBfZGV2IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0 bDgxMzlfcHJpdmF0ZSAqdHA7CiAgICAgICAgc3RydWN0IHBjaV9kZXYgKnBkZXY7CgogICAgICAg IGlmKCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAl cywlcywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05f Xyw3MjQpOyB9OwogICAgICAgIGlmKCEoZGV2LT5wcml2ICE9ICgodm9pZCAqKTApKSkgeyBwcmlu dGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2LT5wcml2ICE9 IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXyw3MjUpOyB9OwoKICAgICAgICB0cCA9IGRl di0+cHJpdjsKICAgICAgICBpZighKHRwLT5wY2lfZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmlu dGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAtPnBjaV9kZXYg IT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDcyOCk7IH07CiAgICAgICAgcGRldiA9 IHRwLT5wY2lfZGV2OwoKCiAgICAgICAgaWYgKHRwLT5tbWlvX2FkZHIpCiAgICAgICAgICAgICAg ICBpb3VubWFwICh0cC0+bW1pb19hZGRyKTsKCgoKICAgICAgICBwY2lfcmVsZWFzZV9yZWdpb25z IChwZGV2KTsKCgoKICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMHhCQykgPyAoX19idWls dGluX2NvbnN0YW50X3AoKHNpemVvZiAoc3RydWN0IG5ldF9kZXZpY2UpICsgc2l6ZW9mIChzdHJ1 Y3QgcnRsODEzOV9wcml2YXRlKSkpID8gX19jb25zdGFudF9jX2FuZF9jb3VudF9tZW1zZXQoKChk ZXYpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhcikoMHhCQykpKSwoKHNpemVvZiAoc3Ry dWN0IG5ldF9kZXZpY2UpICsgc2l6ZW9mIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlKSkpKSA6IF9f Y29uc3RhbnRfY19tZW1zZXQoKChkZXYpKSwoKDB4MDEwMTAxMDFVTCoodW5zaWduZWQgY2hhciko MHhCQykpKSwoKHNpemVvZiAoc3RydWN0IG5ldF9kZXZpY2UpICsgc2l6ZW9mIChzdHJ1Y3QgcnRs ODEzOV9wcml2YXRlKSkpKSkgOiAoX19idWlsdGluX2NvbnN0YW50X3AoKHNpemVvZiAoc3RydWN0 IG5ldF9kZXZpY2UpICsgc2l6ZW9mIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlKSkpID8gX19tZW1z ZXRfZ2VuZXJpYygoKChkZXYpKSksKCgoMHhCQykpKSwoKChzaXplb2YgKHN0cnVjdCBuZXRfZGV2 aWNlKSArIHNpemVvZiAoc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSkpKSkpIDogX19tZW1zZXRfZ2Vu ZXJpYygoKGRldikpLCgoMHhCQykpLCgoc2l6ZW9mIChzdHJ1Y3QgbmV0X2RldmljZSkgKyBzaXpl b2YgKHN0cnVjdCBydGw4MTM5X3ByaXZhdGUpKSkpKSk7CgoKCgogICAgICAgIGtmcmVlIChkZXYp OwoKICAgICAgICBwY2lfc2V0X2RydmRhdGEgKHBkZXYsICgodm9pZCAqKTApKTsKfQoKCnN0YXRp YyB2b2lkIHJ0bDgxMzlfY2hpcF9yZXNldCAodm9pZCAqaW9hZGRyKQp7CiAgICAgICAgaW50IGk7 CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIg KyAoQ2hpcENtZCkpKSA9ICgoQ21kUmVzZXQpKSk7CgoKICAgICAgICBmb3IgKGkgPSAxMDAwOyBp ID4gMDsgaS0tKSB7CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXygiIjogOiA6 Im1lbW9yeSIpOwogICAgICAgICAgICAgICAgaWYgKCgoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSkgJiBDbWRSZXNldCkgPT0gMCkKICAg ICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2Nv bnN0YW50X3AoMTApID8gKCgxMCkgPiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91 ZGVsYXkoKDEwKSAqIDB4MTBjNnVsKSkgOiBfX3VkZWxheSgxMCkpOwogICAgICAgIH0KfQoKCnN0 YXRpYyBpbnQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgiLnRleHQuaW5pdCIpKSkgcnRs ODEzOV9pbml0X2JvYXJkIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgbmV0X2RldmljZSAqKmRldl9vdXQpCnsKICAg ICAgICB2b2lkICppb2FkZHI7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldjsKICAgICAg ICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cDsKICAgICAgICB1OCB0bXA4OwogICAgICAgIGlu dCByYzsKICAgICAgICB1bnNpZ25lZCBpbnQgaTsKICAgICAgICB1MzIgcGlvX3N0YXJ0LCBwaW9f ZW5kLCBwaW9fZmxhZ3MsIHBpb19sZW47CiAgICAgICAgdW5zaWduZWQgbG9uZyBtbWlvX3N0YXJ0 LCBtbWlvX2VuZCwgbW1pb19mbGFncywgbW1pb19sZW47CiAgICAgICAgdTMyIHRtcDsKCiAgICAg ICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYoIShwZGV2ICE9ICgodm9pZCAqKTAp KSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAicGRl diAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sNzg0KTsgfTsKCiAgICAgICAgKmRl dl9vdXQgPSAoKHZvaWQgKikwKTsKCgogICAgICAgIGRldiA9IGFsbG9jX2V0aGVyZGV2IChzaXpl b2YgKCp0cCkpOwogICAgICAgIGlmIChkZXYgPT0gKCh2b2lkICopMCkpIHsKICAgICAgICAgICAg ICAgIHByaW50ayAoIjwzPiIgIjgxMzl0b28iICI6ICIgIiVzOiBVbmFibGUgdG8gYWxsb2MgbmV3 IG5ldCBkZXZpY2VcbiIsIHBkZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgcmV0dXJuIC0x MjsKICAgICAgICB9CiAgICAgICAgZG8geyAoZGV2KS0+b3duZXIgPSAoKHZvaWQgKikwKTsgfSB3 aGlsZSAoMCk7CiAgICAgICAgdHAgPSBkZXYtPnByaXY7CiAgICAgICAgdHAtPnBjaV9kZXYgPSBw ZGV2OwoKCiAgICAgICAgcmMgPSBwY2lfZW5hYmxlX2RldmljZSAocGRldik7CiAgICAgICAgaWYg KHJjKQogICAgICAgICAgICAgICAgZ290byBlcnJfb3V0OwoKICAgICAgICBwaW9fc3RhcnQgPSAo KHBkZXYpLT5yZXNvdXJjZVsoMCldLnN0YXJ0KTsKICAgICAgICBwaW9fZW5kID0gKChwZGV2KS0+ cmVzb3VyY2VbKDApXS5lbmQpOwogICAgICAgIHBpb19mbGFncyA9ICgocGRldiktPnJlc291cmNl WygwKV0uZmxhZ3MpOwogICAgICAgIHBpb19sZW4gPSAoKCgoKHBkZXYpKS0+cmVzb3VyY2VbKCgw KSldLnN0YXJ0KSA9PSAwICYmICgoKHBkZXYpKS0+cmVzb3VyY2VbKCgwKSldLmVuZCkgPT0gKCgo cGRldikpLT5yZXNvdXJjZVsoKDApKV0uc3RhcnQpKSA/IDAgOiAoKCgocGRldikpLT5yZXNvdXJj ZVsoKDApKV0uZW5kKSAtICgoKHBkZXYpKS0+cmVzb3VyY2VbKCgwKSldLnN0YXJ0KSArIDEpKTsK CiAgICAgICAgbW1pb19zdGFydCA9ICgocGRldiktPnJlc291cmNlWygxKV0uc3RhcnQpOwogICAg ICAgIG1taW9fZW5kID0gKChwZGV2KS0+cmVzb3VyY2VbKDEpXS5lbmQpOwogICAgICAgIG1taW9f ZmxhZ3MgPSAoKHBkZXYpLT5yZXNvdXJjZVsoMSldLmZsYWdzKTsKICAgICAgICBtbWlvX2xlbiA9 ICgoKCgocGRldikpLT5yZXNvdXJjZVsoKDEpKV0uc3RhcnQpID09IDAgJiYgKCgocGRldikpLT5y ZXNvdXJjZVsoKDEpKV0uZW5kKSA9PSAoKChwZGV2KSktPnJlc291cmNlWygoMSkpXS5zdGFydCkp ID8gMCA6ICgoKChwZGV2KSktPnJlc291cmNlWygoMSkpXS5lbmQpIC0gKCgocGRldikpLT5yZXNv dXJjZVsoKDEpKV0uc3RhcnQpICsgMSkpOwoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwojIDgzNCAiODEzOXRvby5jIgogICAgICAg IGlmICghKG1taW9fZmxhZ3MgJiAweDAwMDAwMjAwKSkgewogICAgICAgICAgICAgICAgcHJpbnRr ICgiPDM+IiAiODEzOXRvbyIgIjogIiAiJXM6IHJlZ2lvbiAjMSBub3QgYW4gTU1JTyByZXNvdXJj ZSwgYWJvcnRpbmdcbiIsIHBkZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICByYyA9IC0x OTsKICAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKICAgICAgICB9CiAgICAgICAgaWYgKG1t aW9fbGVuIDwgMHg4MCkgewogICAgICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiODEzOXRvbyIg IjogIiAiJXM6IEludmFsaWQgUENJIG1lbSByZWdpb24gc2l6ZShzKSwgYWJvcnRpbmdcbiIsIHBk ZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICByYyA9IC0xOTsKICAgICAgICAgICAgICAg IGdvdG8gZXJyX291dDsKICAgICAgICB9CgoKICAgICAgICByYyA9IHBjaV9yZXF1ZXN0X3JlZ2lv bnMgKHBkZXYsICI4MTM5dG9vIik7CiAgICAgICAgaWYgKHJjKQogICAgICAgICAgICAgICAgZ290 byBlcnJfb3V0OwoKCiAgICAgICAgcGNpX3NldF9tYXN0ZXIgKHBkZXYpOwoKCgoKCgoKICAgICAg ICBpb2FkZHIgPSBpb3JlbWFwIChtbWlvX3N0YXJ0LCBtbWlvX2xlbik7CiAgICAgICAgaWYgKGlv YWRkciA9PSAoKHZvaWQgKikwKSkgewogICAgICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiODEz OXRvbyIgIjogIiAiJXM6IGNhbm5vdCByZW1hcCBNTUlPLCBhYm9ydGluZ1xuIiwgcGRldi0+c2xv dF9uYW1lKTsKICAgICAgICAgICAgICAgIHJjID0gLTU7CiAgICAgICAgICAgICAgICBnb3RvIGVy cl9vdXQ7CiAgICAgICAgfQogICAgICAgIGRldi0+YmFzZV9hZGRyID0gKGxvbmcpIGlvYWRkcjsK ICAgICAgICB0cC0+bW1pb19hZGRyID0gaW9hZGRyOwoKCgogICAgICAgICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChIbHRDbGspKSkgPSAoKCdSJykpKTsK CgogICAgICAgIGlmICgoKHVuc2lnbmVkIGxvbmcpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAq KSAoKHZvaWQgKikoaW9hZGRyICsgKFR4Q29uZmlnKSkpKSkgPT0gMHhGRkZGRkZGRikgewogICAg ICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiODEzOXRvbyIgIjogIiAiJXM6IENoaXAgbm90IHJl c3BvbmRpbmcsIGlnbm9yaW5nIGJvYXJkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBwZGV2 LT5zbG90X25hbWUpOwogICAgICAgICAgICAgICAgcmMgPSAtNTsKICAgICAgICAgICAgICAgIGdv dG8gZXJyX291dDsKICAgICAgICB9CgoKICAgICAgICB0bXAgPSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcFZlcnNpb24pKSkpOwogICAgICAgIGZv ciAoaSA9IDA7IGkgPCAoc2l6ZW9mKHJ0bF9jaGlwX2luZm8pIC8gc2l6ZW9mKChydGxfY2hpcF9p bmZvKVswXSkpOyBpKyspCiAgICAgICAgICAgICAgICBpZiAodG1wID09IHJ0bF9jaGlwX2luZm9b aV0udmVyc2lvbikgewogICAgICAgICAgICAgICAgICAgICAgICB0cC0+Y2hpcHNldCA9IGk7CiAg ICAgICAgICAgICAgICAgICAgICAgIGdvdG8gbWF0Y2g7CiAgICAgICAgICAgICAgICB9CgoKICAg ICAgICBwcmludGsgKCI8Nz4iICI4MTM5dG9vIiAiOiAiICIlczogdW5rbm93biBjaGlwIHZlcnNp b24sIGFzc3VtaW5nIFJUTC04MTM5XG4iLAogICAgICAgICAgICAgICAgcGRldi0+c2xvdF9uYW1l KTsKICAgICAgICBwcmludGsgKCI8Nz4iICI4MTM5dG9vIiAiOiAiICIlczogVHhDb25maWcgPSAw eCVseFxuIiwgcGRldi0+c2xvdF9uYW1lLCAoKHVuc2lnbmVkIGxvbmcpICgqKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4Q29uZmlnKSkpKSkpOwogICAgICAg IHRwLT5jaGlwc2V0ID0gMDsKCm1hdGNoOgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICA7CgoKCgogICAgICAgIGlmICh0cC0+Y2hpcHNldCA+PSBDSF84MTM5 QikgewogICAgICAgICAgICAgICAgdTggbmV3X3RtcDggPSB0bXA4ID0gKCoodm9sYXRpbGUgdW5z aWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzEpKSkpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICBpZiAoKHJ0 bF9jaGlwX2luZm9bdHAtPmNoaXBzZXRdLmZsYWdzICYgSGFzTFdha2UpICYmCiAgICAgICAgICAg ICAgICAgICAgKHRtcDggJiBMV0FLRSkpCiAgICAgICAgICAgICAgICAgICAgICAgIG5ld190bXA4 ICY9IH5MV0FLRTsKICAgICAgICAgICAgICAgIG5ld190bXA4IHw9IENmZzFfUE1fRW5hYmxlOwog ICAgICAgICAgICAgICAgaWYgKG5ld190bXA4ICE9IHRtcDgpIHsKICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENm ZzkzNDYpKSkgPSAoKENmZzkzNDZfVW5sb2NrKSkpOwogICAgICAgICAgICAgICAgICAgICAgICAo Kih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnMSkp KSA9ICgodG1wOCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfTG9j aykpKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChydGxfY2hpcF9pbmZv W3RwLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKSB7CiAgICAgICAgICAgICAgICAgICAgICAg IHRtcDggPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAo Q29uZmlnNCkpKSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0bXA4ICYgTFdQVE4pCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAq KSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzQpKSkgPSAoKHRtcDggJiB+TFdQVE4pKSk7CiAg ICAgICAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgICAgICAgICB0bXA4ID0gKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzEpKSkpOwogICAgICAg ICAgICAgICAgdG1wOCAmPSB+KFNMRUVQIHwgUFdSRE4pOwogICAgICAgICAgICAgICAgKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzEpKSkgPSAo KHRtcDgpKSk7CiAgICAgICAgfQoKICAgICAgICBydGw4MTM5X2NoaXBfcmVzZXQgKGlvYWRkcik7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgKmRldl9v dXQgPSBkZXY7CiAgICAgICAgcmV0dXJuIDA7CgplcnJfb3V0OgogICAgICAgIF9fcnRsODEzOV9j bGVhbnVwX2RldiAoZGV2KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICA7CiAgICAgICAgcmV0dXJuIHJjOwp9CgoKc3RhdGljIGludCBfX2F0dHJpYnV0ZV9fICgo X19zZWN0aW9uX18gKCIudGV4dC5pbml0IikpKSBydGw4MTM5X2luaXRfb25lIChzdHJ1Y3QgcGNp X2RldiAqcGRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RydWN0IHBjaV9kZXZpY2VfaWQgKmVudCkKewogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYgPSAoKHZvaWQgKikwKTsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cDsKICAg ICAgICBpbnQgaSwgYWRkcl9sZW4sIG9wdGlvbjsKICAgICAgICB2b2lkICppb2FkZHI7CiAgICAg ICAgc3RhdGljIGludCBib2FyZF9pZHggPSAtMTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKCiAgICAgICAgaWYoIShwZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRp b24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAicGRldiAhPSBOVUxMIiwiODEzOXRvby5j IixfX0ZVTkNUSU9OX18sOTQ4KTsgfTsKICAgICAgICBpZighKGVudCAhPSAoKHZvaWQgKikwKSkp IHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImVudCAh PSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTQ5KTsgfTsKCiAgICAgICAgYm9hcmRf aWR4Kys7CgoKCgoKICAgICAgICB7CiAgICAgICAgICAgICAgICBzdGF0aWMgaW50IHByaW50ZWRf dmVyc2lvbjsKICAgICAgICAgICAgICAgIGlmICghcHJpbnRlZF92ZXJzaW9uKyspCiAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ayAoIjw2PiIgIjgxMzl0b28iICIgRmFzdCBFdGhlcm5ldCBk cml2ZXIgIiAiMC45LjE5IiAiXG4iKTsKICAgICAgICB9CgoKICAgICAgICBpID0gcnRsODEzOV9p bml0X2JvYXJkIChwZGV2LCAmZGV2KTsKICAgICAgICBpZiAoaSA8IDApIHsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAgICAgICAgICAg cmV0dXJuIGk7CiAgICAgICAgfQoKICAgICAgICB0cCA9IGRldi0+cHJpdjsKICAgICAgICBpb2Fk ZHIgPSB0cC0+bW1pb19hZGRyOwoKICAgICAgICBpZighKGlvYWRkciAhPSAoKHZvaWQgKikwKSkp IHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImlvYWRk ciAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTczKTsgfTsKICAgICAgICBpZigh KGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMs JXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sOTc0 KTsgfTsKICAgICAgICBpZighKHRwICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRp b24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAgIT0gTlVMTCIsIjgxMzl0b28uYyIs X19GVU5DVElPTl9fLDk3NSk7IH07CgogICAgICAgIGFkZHJfbGVuID0gcmVhZF9lZXByb20gKGlv YWRkciwgMCwgOCkgPT0gMHg4MTI5ID8gOCA6IDY7CiAgICAgICAgZm9yIChpID0gMDsgaSA8IDM7 IGkrKykKICAgICAgICAgICAgICAgICgodTE2ICopIChkZXYtPmRldl9hZGRyKSlbaV0gPQogICAg ICAgICAgICAgICAgICAgICgoX191MTYpKHJlYWRfZWVwcm9tIChpb2FkZHIsIGkgKyA3LCBhZGRy X2xlbikpKTsKCgogICAgICAgIGRldi0+b3BlbiA9IHJ0bDgxMzlfb3BlbjsKICAgICAgICBkZXYt PmhhcmRfc3RhcnRfeG1pdCA9IHJ0bDgxMzlfc3RhcnRfeG1pdDsKICAgICAgICBkZXYtPnN0b3Ag PSBydGw4MTM5X2Nsb3NlOwogICAgICAgIGRldi0+Z2V0X3N0YXRzID0gcnRsODEzOV9nZXRfc3Rh dHM7CiAgICAgICAgZGV2LT5zZXRfbXVsdGljYXN0X2xpc3QgPSBydGw4MTM5X3NldF9yeF9tb2Rl OwogICAgICAgIGRldi0+ZG9faW9jdGwgPSBuZXRkZXZfaW9jdGw7CiAgICAgICAgZGV2LT50eF90 aW1lb3V0ID0gcnRsODEzOV90eF90aW1lb3V0OwogICAgICAgIGRldi0+d2F0Y2hkb2dfdGltZW8g PSAoNioxMDApOwogICAgICAgIGRldi0+ZmVhdHVyZXMgfD0gMXw4OwoKICAgICAgICBkZXYtPmly cSA9IHBkZXYtPmlycTsKCgogICAgICAgIHRwID0gZGV2LT5wcml2OwoKCiAgICAgICAgdHAtPmRy dl9mbGFncyA9IGJvYXJkX2luZm9bZW50LT5kcml2ZXJfZGF0YV0uaHdfZmxhZ3M7CiAgICAgICAg dHAtPm1taW9fYWRkciA9IGlvYWRkcjsKICAgICAgICBkbyB7IH0gd2hpbGUoMCk7CiAgICAgICAg aW5pdF93YWl0cXVldWVfaGVhZCAoJnRwLT50aHJfd2FpdCk7CiAgICAgICAgaW5pdF9jb21wbGV0 aW9uICgmdHAtPnRocl9leGl0ZWQpOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICBp ID0gcmVnaXN0ZXJfbmV0ZGV2IChkZXYpOwogICAgICAgIGlmIChpKSBnb3RvIGVycl9vdXQ7Cgog ICAgICAgIHBjaV9zZXRfZHJ2ZGF0YSAocGRldiwgZGV2KTsKCiAgICAgICAgcHJpbnRrICgiPDY+ IiAiJXM6ICVzIGF0IDB4JWx4LCAiCiAgICAgICAgICAgICAgICAiJTIuMng6JTIuMng6JTIuMng6 JTIuMng6JTIuMng6JTIuMngsICIKICAgICAgICAgICAgICAgICJJUlEgJWRcbiIsCiAgICAgICAg ICAgICAgICBkZXYtPm5hbWUsCiAgICAgICAgICAgICAgICBib2FyZF9pbmZvW2VudC0+ZHJpdmVy X2RhdGFdLm5hbWUsCiAgICAgICAgICAgICAgICBkZXYtPmJhc2VfYWRkciwKICAgICAgICAgICAg ICAgIGRldi0+ZGV2X2FkZHJbMF0sIGRldi0+ZGV2X2FkZHJbMV0sCiAgICAgICAgICAgICAgICBk ZXYtPmRldl9hZGRyWzJdLCBkZXYtPmRldl9hZGRyWzNdLAogICAgICAgICAgICAgICAgZGV2LT5k ZXZfYWRkcls0XSwgZGV2LT5kZXZfYWRkcls1XSwKICAgICAgICAgICAgICAgIGRldi0+aXJxKTsK CiAgICAgICAgcHJpbnRrICgiPDc+IiAiJXM6ICBJZGVudGlmaWVkIDgxMzkgY2hpcCB0eXBlICcl cydcbiIsCiAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBz ZXRdLm5hbWUpOwojIDEwNTAgIjgxMzl0b28uYyIKICAgICAgICAgICAgICAgIHRwLT5waHlzWzBd ID0gMzI7CgoKICAgICAgICBvcHRpb24gPSAoYm9hcmRfaWR4ID49IDgpID8gMCA6IG1lZGlhW2Jv YXJkX2lkeF07CiAgICAgICAgaWYgKG9wdGlvbiA+IDApIHsKICAgICAgICAgICAgICAgIHRwLT5m dWxsX2R1cGxleCA9IChvcHRpb24gJiAweDIxMCkgPyAxIDogMDsKICAgICAgICAgICAgICAgIHRw LT5kZWZhdWx0X3BvcnQgPSBvcHRpb24gJiAweEZGOwogICAgICAgICAgICAgICAgaWYgKHRwLT5k ZWZhdWx0X3BvcnQpCiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5tZWRpYWxvY2sgPSAxOwog ICAgICAgIH0KICAgICAgICBpZiAoYm9hcmRfaWR4IDwgOCAmJiBmdWxsX2R1cGxleFtib2FyZF9p ZHhdID4gMCkKICAgICAgICAgICAgICAgIHRwLT5mdWxsX2R1cGxleCA9IGZ1bGxfZHVwbGV4W2Jv YXJkX2lkeF07CiAgICAgICAgaWYgKHRwLT5mdWxsX2R1cGxleCkgewogICAgICAgICAgICAgICAg cHJpbnRrKCI8Nj4iICIlczogTWVkaWEgdHlwZSBmb3JjZWQgdG8gRnVsbCBEdXBsZXguXG4iLCBk ZXYtPm5hbWUpOwoKCiAgICAgICAgICAgICAgICB0cC0+ZHVwbGV4X2xvY2sgPSAxOwogICAgICAg IH0KICAgICAgICBpZiAodHAtPmRlZmF1bHRfcG9ydCkgewogICAgICAgICAgICAgICAgcHJpbnRr KCI8Nj4iICIgIEZvcmNpbmcgJWRNYnBzICVzLWR1cGxleCBvcGVyYXRpb24uXG4iLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAob3B0aW9uICYgMHgyMCA/IDEwMCA6IDEwKSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgKG9wdGlvbiAmIDB4MTAgPyAiZnVsbCIgOiAiaGFsZiIpKTsKICAg ICAgICAgICAgICAgIG1kaW9fd3JpdGUoZGV2LCB0cC0+cGh5c1swXSwgMCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAoKG9wdGlvbiAmIDB4MjApID8gMHgyMDAwIDogMCkgfAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICgob3B0aW9uICYgMHgxMCkgPyAweDAx MDAgOiAwKSk7CiAgICAgICAgfQoKCiAgICAgICAgaWYgKHJ0bF9jaGlwX2luZm9bdHAtPmNoaXBz ZXRdLmZsYWdzICYgSGFzSGx0Q2xrKQogICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEhsdENsaykpKSA9ICgoJ0gnKSkpOwoKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICByZXR1cm4gMDsK CmVycl9vdXQ6CiAgICAgICAgX19ydGw4MTM5X2NsZWFudXBfZGV2IChkZXYpOwogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICByZXR1cm4gaTsKfQoK CnN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fKCIudGV4dC5l eGl0IikpKSBydGw4MTM5X3JlbW92ZV9vbmUgKHN0cnVjdCBwY2lfZGV2ICpwZGV2KQp7CiAgICAg ICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CiAgICAg ICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqbnA7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgogICAgICAgIGlmKCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRp b24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMi LF9fRlVOQ1RJT05fXywxMDk4KTsgfTsKICAgICAgICBucCA9IGRldi0+cHJpdjsKICAgICAgICBp ZighKG5wICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywl cywlcyxsaW5lPSVkXG4iLCAibnAgIT0gTlVMTCIsIjgxMzl0b28uYyIsX19GVU5DVElPTl9fLDEx MDApOyB9OwoKICAgICAgICB1bnJlZ2lzdGVyX25ldGRldiAoZGV2KTsKCiAgICAgICAgX19ydGw4 MTM5X2NsZWFudXBfZGV2IChkZXYpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICA7Cn0KIyAx MTMyICI4MTM5dG9vLmMiCnN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXyAoKF9fc2VjdGlvbl9fICgi LnRleHQuaW5pdCIpKSkgcmVhZF9lZXByb20gKHZvaWQgKmlvYWRkciwgaW50IGxvY2F0aW9uLCBp bnQgYWRkcl9sZW4pCnsKICAgICAgICBpbnQgaTsKICAgICAgICB1bnNpZ25lZCByZXR2YWwgPSAw OwogICAgICAgIHZvaWQgKmVlX2FkZHIgPSBpb2FkZHIgKyBDZmc5MzQ2OwogICAgICAgIGludCBy ZWFkX2NtZCA9IGxvY2F0aW9uIHwgKCg2KSA8PCBhZGRyX2xlbik7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lk ICopKGVlX2FkZHIpKSA9ICgoMHg4MCB8IDB4MDgpICYgfjB4MDgpKTsKICAgICAgICAoKih2b2xh dGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShlZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4 KSkpOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRk cikpKTsKCgogICAgICAgIGZvciAoaSA9IDQgKyBhZGRyX2xlbjsgaSA+PSAwOyBpLS0pIHsKICAg ICAgICAgICAgICAgIGludCBkYXRhdmFsID0gKHJlYWRfY21kICYgKDEgPDwgaSkpID8gMHgwMiA6 IDA7CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAq KShlZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4KSB8IGRhdGF2YWwpKTsKICAgICAgICAgICAgICAg ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsKICAgICAg ICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIp KSA9ICgoMHg4MCB8IDB4MDgpIHwgZGF0YXZhbCB8IDB4MDQpKTsKICAgICAgICAgICAgICAgICgq KHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsKICAgICAgICB9 CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikp ID0gKCgweDgwIHwgMHgwOCkpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikg KCh2b2lkICopKGVlX2FkZHIpKSk7CgogICAgICAgIGZvciAoaSA9IDE2OyBpID4gMDsgaS0tKSB7 CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShl ZV9hZGRyKSkgPSAoKDB4ODAgfCAweDA4KSB8IDB4MDQpKTsKICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoZWVfYWRkcikpKTsKICAgICAgICAgICAg ICAgIHJldHZhbCA9CiAgICAgICAgICAgICAgICAgICAgKHJldHZhbCA8PCAxKSB8ICgoKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpKSAmIDB4MDEpID8gMSA6 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwKTsKICAgICAgICAgICAgICAg ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGVlX2FkZHIpKSA9ICgoMHg4 MCB8IDB4MDgpKSk7CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikg KCh2b2lkICopKGVlX2FkZHIpKSk7CiAgICAgICAgfQoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5z aWduZWQgY2hhciAqKSAoKHZvaWQgKikoZWVfYWRkcikpID0gKH4weDA4KSk7CiAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShlZV9hZGRyKSkpOwoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICByZXR1cm4g cmV0dmFsOwp9CiMgMTE5MCAiODEzOXRvby5jIgpzdGF0aWMgY2hhciBtaWlfMl84MTM5X21hcFs4 XSA9IHsKICAgICAgICBCYXNpY01vZGVDdHJsLAogICAgICAgIEJhc2ljTW9kZVN0YXR1cywKICAg ICAgICAwLAogICAgICAgIDAsCiAgICAgICAgTldheUFkdmVydCwKICAgICAgICBOV2F5TFBBUiwK ICAgICAgICBOV2F5RXhwYW5zaW9uLAogICAgICAgIDAKfTsKIyAxMjIxICI4MTM5dG9vLmMiCnN0 YXRpYyBpbnQgbWRpb19yZWFkIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBp bnQgbG9jYXRpb24pCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9IGRldi0+ cHJpdjsKICAgICAgICBpbnQgcmV0dmFsID0gMDsKCgoKCgoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgOwoKICAgICAgICBpZiAocGh5X2lkID4gMzEpIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAg ICAgICAgICAgICAgICByZXR1cm4gbG9jYXRpb24gPCA4ICYmIG1paV8yXzgxMzlfbWFwW2xvY2F0 aW9uXSA/CiAgICAgICAgICAgICAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikg KCh2b2lkICopKHRwLT5tbWlvX2FkZHIgKyBtaWlfMl84MTM5X21hcFtsb2NhdGlvbl0pKSkgOiAw OwogICAgICAgIH0KIyAxMjYxICI4MTM5dG9vLmMiCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CiAgICAgICAgcmV0dXJuIChy ZXR2YWwgPj4gMSkgJiAweGZmZmY7Cn0KCgpzdGF0aWMgdm9pZCBtZGlvX3dyaXRlIChzdHJ1Y3Qg bmV0X2RldmljZSAqZGV2LCBpbnQgcGh5X2lkLCBpbnQgbG9jYXRpb24sCiAgICAgICAgICAgICAg ICAgICAgICAgIGludCB2YWx1ZSkKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRw ID0gZGV2LT5wcml2OwoKCgoKCgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAg IGlmIChwaHlfaWQgPiAzMSkgewogICAgICAgICAgICAgICAgdm9pZCAqaW9hZGRyID0gdHAtPm1t aW9fYWRkcjsKICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbiA9PSAwKSB7CiAgICAgICAgICAg ICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRk ciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2X1VubG9jaykpKTsKICAgICAgICAgICAgICAgICAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChC YXNpY01vZGVDdHJsKSkpID0gKCh2YWx1ZSkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkg PSAoKENmZzkzNDZfTG9jaykpKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobG9jYXRpb24g PCA4ICYmIG1paV8yXzgxMzlfbWFwW2xvY2F0aW9uXSkKICAgICAgICAgICAgICAgICAgICAgICAg KCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChtaWlfMl84 MTM5X21hcFtsb2NhdGlvbl0pKSkgPSAoKHZhbHVlKSkpOwogICAgICAgICAgICAgICAgcmV0dXJu OwogICAgICAgIH0KIyAxMzA5ICI4MTM5dG9vLmMiCn0KCgpzdGF0aWMgaW50IHJ0bDgxMzlfb3Bl biAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZh dGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIGludCByZXR2YWw7CgoKCgogICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogICAgICAgIHJldHZhbCA9IHJlcXVlc3RfaXJxIChkZXYtPmlycSwg cnRsODEzOV9pbnRlcnJ1cHQsIDB4MDQwMDAwMDAsIGRldi0+bmFtZSwgZGV2KTsKICAgICAgICBp ZiAocmV0dmFsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwogICAgICAgICAgICAgICAgcmV0dXJuIHJldHZhbDsKICAgICAgICB9Cgog ICAgICAgIHRwLT50eF9idWZzID0gcGNpX2FsbG9jX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgx NTM2ICogNCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdHAt PnR4X2J1ZnNfZG1hKTsKICAgICAgICB0cC0+cnhfcmluZyA9IHBjaV9hbGxvY19jb25zaXN0ZW50 KHRwLT5wY2lfZGV2LCAoKDgxOTIgPDwgMikgKyAxNiArIDIwNDgpLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgJnRwLT5yeF9yaW5nX2RtYSk7CiAgICAgICAgaWYg KHRwLT50eF9idWZzID09ICgodm9pZCAqKTApIHx8IHRwLT5yeF9yaW5nID09ICgodm9pZCAqKTAp KSB7CiAgICAgICAgICAgICAgICBmcmVlX2lycShkZXYtPmlycSwgZGV2KTsKCiAgICAgICAgICAg ICAgICBpZiAodHAtPnR4X2J1ZnMpCiAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9mcmVlX2Nv bnNpc3RlbnQodHAtPnBjaV9kZXYsICgxNTM2ICogNCksCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2J1ZnMsIHRwLT50eF9idWZzX2RtYSk7CiAgICAg ICAgICAgICAgICBpZiAodHAtPnJ4X3JpbmcpCiAgICAgICAgICAgICAgICAgICAgICAgIHBjaV9m cmVlX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgoODE5MiA8PCAyKSArIDE2ICsgMjA0OCksCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnJ4X3JpbmcsIHRw LT5yeF9yaW5nX2RtYSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIHJldHVybiAtMTI7CgogICAgICAgIH0KCiAg ICAgICAgdHAtPmZ1bGxfZHVwbGV4ID0gdHAtPmR1cGxleF9sb2NrOwogICAgICAgIHRwLT50eF9m bGFnID0gKDI1NiA8PCAxMSkgJiAweDAwM2YwMDAwOwogICAgICAgIHRwLT50d2lzdGllID0gMTsK CiAgICAgICAgcnRsODEzOV9pbml0X3JpbmcgKGRldik7CiAgICAgICAgcnRsODEzOV9od19zdGFy dCAoZGV2KTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKCgoKICAgICAgICB0cC0+dGhyX3BpZCA9IGtlcm5lbF90aHJlYWQgKHJ0 bDgxMzlfdGhyZWFkLCBkZXYsIDB4MDAwMDAyMDAgfCAweDAwMDAwNDAwKTsKICAgICAgICBpZiAo dHAtPnRocl9waWQgPCAwKQogICAgICAgICAgICAgICAgcHJpbnRrICgiPDQ+IiAiJXM6IHVuYWJs ZSB0byBzdGFydCBrZXJuZWwgdGhyZWFkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYt Pm5hbWUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAgICAg IHJldHVybiAwOwp9CgoKc3RhdGljIHZvaWQgcnRsX2NoZWNrX21lZGlhIChzdHJ1Y3QgbmV0X2Rl dmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnBy aXY7CgogICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYgKHRwLT5waHlzWzBd ID49IDApIHsKICAgICAgICAgICAgICAgIHUxNiBtaWlfcmVnNSA9IG1kaW9fcmVhZChkZXYsIHRw LT5waHlzWzBdLCA1KTsKICAgICAgICAgICAgICAgIGlmIChtaWlfcmVnNSA9PSAweGZmZmYpCiAg ICAgICAgICAgICAgICAgICAgICAgIDsKICAgICAgICAgICAgICAgIGVsc2UgaWYgKChtaWlfcmVn NSAmIDB4MDEwMCkgPT0gMHgwMTAwCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8 IChtaWlfcmVnNSAmIDB4MDBDMCkgPT0gMHgwMDQwKQogICAgICAgICAgICAgICAgICAgICAgICB0 cC0+ZnVsbF9kdXBsZXggPSAxOwoKICAgICAgICAgICAgICAgIHByaW50ayAoIjw2PiIiJXM6IFNl dHRpbmcgJXMlcy1kdXBsZXggYmFzZWQgb24iCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIiBhdXRvLW5lZ290aWF0ZWQgcGFydG5lciBhYmlsaXR5ICU0LjR4LlxuIiwKICAgICAgICAg ICAgICAgICAgICAgICAgZGV2LT5uYW1lLCBtaWlfcmVnNSA9PSAwID8gIiIgOgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIChtaWlfcmVnNSAmIDB4MDE4MCkgPyAiMTAwbWJwcyAiIDog IjEwbWJwcyAiLAogICAgICAgICAgICAgICAgICAgICAgICB0cC0+ZnVsbF9kdXBsZXggPyAiZnVs bCIgOiAiaGFsZiIsIG1paV9yZWc1KTsKICAgICAgICB9Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5 X2h3X3N0YXJ0IChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAgICAgICAgc3RydWN0IHJ0bDgx MzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gdHAtPm1t aW9fYWRkcjsKICAgICAgICB1MzIgaTsKICAgICAgICB1OCB0bXA7CgogICAgICAgICAgICAgICAg ICAgICAgICAgICA7CgoKICAgICAgICBpZiAocnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uZmxh Z3MgJiBIYXNIbHRDbGspCiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopICgodm9pZCAqKShpb2FkZHIgKyAoSGx0Q2xrKSkpID0gKCgnUicpKSk7CgogICAgICAgIHJ0 bDgxMzlfY2hpcF9yZXNldCAoaW9hZGRyKTsKCgogICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5z aWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZf VW5sb2NrKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIg KyAoQ2ZnOTM0NikpKSk7IH0gd2hpbGUgKDApOwoKICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BQzAgKyAwKSkpID0gKCgoKF9fdTMy KSgqKHUzMiAqKSAoZGV2LT5kZXZfYWRkciArIDApKSkpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BQzAgKyAwKSkpKTsgfSB3aGlsZSAoMCk7CiAg ICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciAr IChNQUMwICsgNCkpKSA9ICgoKChfX3UzMikoKih1MzIgKikgKGRldi0+ZGV2X2FkZHIgKyA0KSkp KSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQUMw ICsgNCkpKSk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hh ciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFJ4RW5iIHwgQ21kVHhF bmIpKSk7CgogICAgICAgIHRwLT5yeF9jb25maWcgPSBydGw4MTM5X3J4X2NvbmZpZyB8IEFjY2Vw dEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeENvbmZpZykpKSA9ICgodHAtPnJ4X2NvbmZpZykp KTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFR4Q29uZmlnKSkpID0gKCgoNiA8PCBUeERNQVNoaWZ0KSkpKTsKCiAgICAgICAgdHAtPmN1 cl9yeCA9IDA7CgogICAgICAgIHJ0bF9jaGVja19tZWRpYSAoZGV2KTsKCiAgICAgICAgaWYgKHRw LT5jaGlwc2V0ID49IENIXzgxMzlCKSB7CgoKCiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1 bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnMykpKSA9ICgoKCoodm9s YXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENvbmZpZzMpKSkpICYg fkNmZzNfTWFnaWMpKSk7CiAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZv aWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfTG9jaykpKTsKCgogICAgICAg IGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhC dWYpKSkgPSAoKHRwLT5yeF9yaW5nX2RtYSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICop ICgodm9pZCAqKShpb2FkZHIgKyAoUnhCdWYpKSkpOyB9IHdoaWxlICgwKTsKCgogICAgICAgIGZv ciAoaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAgICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4QWRkcjAgKyAoaSAqIDQpKSkpID0g KCh0cC0+dHhfYnVmc19kbWEgKyAodHAtPnR4X2J1ZltpXSAtIHRwLT50eF9idWZzKSkpKTsgKCoo dm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhBZGRyMCArIChp ICogNCkpKSkpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50 ICopICgodm9pZCAqKShpb2FkZHIgKyAoUnhNaXNzZWQpKSkgPSAoKDApKSk7CgogICAgICAgIHJ0 bDgxMzlfc2V0X3J4X21vZGUgKGRldik7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBz aG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE11bHRpSW50cikpKSA9ICgoKCoodm9sYXRpbGUg dW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChNdWx0aUludHIpKSkpICYgTXVs dGlJbnRyQ2xlYXIpKSk7CgoKICAgICAgICB0bXAgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFy ICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7CiAgICAgICAgaWYgKCghKHRtcCAm IENtZFJ4RW5iKSkgfHwgKCEodG1wICYgQ21kVHhFbmIpKSkKICAgICAgICAgICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0g KChDbWRSeEVuYiB8IENtZFR4RW5iKSkpOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQg c2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJbnRyTWFzaykpKSA9ICgocnRsODEzOV9pbnRy X21hc2spKSk7CgogICAgICAgIG5ldGlmX3N0YXJ0X3F1ZXVlIChkZXYpOwoKICAgICAgICAgICAg ICAgICAgICAgICAgICA7Cn0KCgoKc3RhdGljIHZvaWQgcnRsODEzOV9pbml0X3JpbmcgKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9 IGRldi0+cHJpdjsKICAgICAgICBpbnQgaTsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsK CiAgICAgICAgdHAtPmN1cl9yeCA9IDA7CiAgICAgICAgdHAtPmN1cl90eCA9IDA7CiAgICAgICAg dHAtPmRpcnR5X3R4ID0gMDsKCiAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogICAg ICAgICAgICAgICAgdHAtPnR4X2luZm9baV0uc2tiID0gKCh2b2lkICopMCk7CiAgICAgICAgICAg ICAgICB0cC0+dHhfaW5mb1tpXS5tYXBwaW5nID0gMDsKICAgICAgICAgICAgICAgIHRwLT50eF9i dWZbaV0gPSAmdHAtPnR4X2J1ZnNbaSAqIDE1MzZdOwogICAgICAgIH0KCiAgICAgICAgICAgICAg ICAgICAgICAgICAgOwp9CgoKCnN0YXRpYyBpbnQgbmV4dF90aWNrID0gMyAqIDEwMDsKCgpzdGF0 aWMgaW5saW5lIHZvaWQgcnRsODEzOV90dW5lX3R3aXN0ZXIgKHN0cnVjdCBuZXRfZGV2aWNlICpk ZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2 YXRlICp0cCkge30KIyAxNTg3ICI4MTM5dG9vLmMiCnN0YXRpYyBpbmxpbmUgdm9pZCBydGw4MTM5 X3RocmVhZF9pdGVyIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2LAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdm9pZCAqaW9hZGRyKQp7CiAgICAgICAgaW50IG1paV9yZWc1OwoK ICAgICAgICBtaWlfcmVnNSA9IG1kaW9fcmVhZCAoZGV2LCB0cC0+cGh5c1swXSwgNSk7CgogICAg ICAgIGlmICghdHAtPmR1cGxleF9sb2NrICYmIG1paV9yZWc1ICE9IDB4ZmZmZikgewogICAgICAg ICAgICAgICAgaW50IGR1cGxleCA9IChtaWlfcmVnNSAmIDB4MDEwMCkKICAgICAgICAgICAgICAg ICAgICB8fCAobWlpX3JlZzUgJiAweDAxQzApID09IDB4MDA0MDsKICAgICAgICAgICAgICAgIGlm ICh0cC0+ZnVsbF9kdXBsZXggIT0gZHVwbGV4KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRw LT5mdWxsX2R1cGxleCA9IGR1cGxleDsKCiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChtaWlf cmVnNSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ayAoIjw2PiIKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIlczogU2V0dGluZyAlcy1kdXBs ZXggYmFzZWQgb24gTUlJICMlZCBsaW5rIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIiBwYXJ0bmVyIGFiaWxpdHkgb2YgJTQuNHguXG4iLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZGV2LT5uYW1lLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgdHAtPmZ1bGxfZHVwbGV4ID8gImZ1bGwiIDogImhhbGYiLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnBoeXNbMF0sIG1paV9yZWc1 KTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBwcmludGsoIjw2PiIiJXM6IG1lZGlhIGlzIHVuY29ubmVjdGVkLCBsaW5rIGRv d24sIG9yIGluY29tcGF0aWJsZSBjb25uZWN0aW9uXG4iLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwogICAgICAgICAgICAgICAgICAgICAgICB9CgoK CgoKICAgICAgICAgICAgICAgIH0KICAgICAgICB9CgogICAgICAgIG5leHRfdGljayA9IDEwMCAq IDYwOwoKICAgICAgICBydGw4MTM5X3R1bmVfdHdpc3RlciAoZGV2LCB0cCk7CgogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgoKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDsKCgp9CgoKc3RhdGljIGludCBydGw4MTM5X3RocmVhZCAodm9pZCAqZGF0YSkKewog ICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSBkYXRhOwogICAgICAgIHN0cnVjdCBydGw4 MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91 dDsKCiAgICAgICAgZGFlbW9uaXplICgpOwogICAgICAgIHJlcGFyZW50X3RvX2luaXQoKTsKICAg ICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9fKCJjbGkiOiA6IDoibWVtb3J5Iik7ICh2b2lk KSgmZ2V0X2N1cnJlbnQoKS0+c2lnbWFza19sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgc2ln ZW1wdHlzZXQoJmdldF9jdXJyZW50KCktPmJsb2NrZWQpOwogICAgICAgIHJlY2FsY19zaWdwZW5k aW5nKGdldF9jdXJyZW50KCkpOwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9f IF9fdm9sYXRpbGVfXygic3RpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKCiAgICAgICAg c3RybmNweSAoZ2V0X2N1cnJlbnQoKS0+Y29tbSwgZGV2LT5uYW1lLCBzaXplb2YoZ2V0X2N1cnJl bnQoKS0+Y29tbSkgLSAxKTsKICAgICAgICBnZXRfY3VycmVudCgpLT5jb21tW3NpemVvZihnZXRf Y3VycmVudCgpLT5jb21tKSAtIDFdID0gJ1wwJzsKCiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAg ICAgICAgICAgIHRpbWVvdXQgPSBuZXh0X3RpY2s7CiAgICAgICAgICAgICAgICBkbyB7CiAgICAg ICAgICAgICAgICAgICAgICAgIHRpbWVvdXQgPSBpbnRlcnJ1cHRpYmxlX3NsZWVwX29uX3RpbWVv dXQgKCZ0cC0+dGhyX3dhaXQsIHRpbWVvdXQpOwogICAgICAgICAgICAgICAgfSB3aGlsZSAoIXNp Z25hbF9wZW5kaW5nIChnZXRfY3VycmVudCgpKSAmJiAodGltZW91dCA+IDApKTsKCiAgICAgICAg ICAgICAgICBpZiAoc2lnbmFsX3BlbmRpbmcgKGdldF9jdXJyZW50KCkpKQogICAgICAgICAgICAg ICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgICAgICBydG5sX2xvY2sgKCk7CiAgICAgICAg ICAgICAgICBydGw4MTM5X3RocmVhZF9pdGVyIChkZXYsIHRwLCB0cC0+bW1pb19hZGRyKTsKICAg ICAgICAgICAgICAgIHJ0bmxfdW5sb2NrICgpOwogICAgICAgIH0KCiAgICAgICAgY29tcGxldGVf YW5kX2V4aXQgKCZ0cC0+dGhyX2V4aXRlZCwgMCk7Cn0KCgpzdGF0aWMgdm9pZCBydGw4MTM5X3R4 X2NsZWFyIChzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCkKewogICAgICAgIGludCBpOwoKICAg ICAgICB0cC0+Y3VyX3R4ID0gMDsKICAgICAgICB0cC0+ZGlydHlfdHggPSAwOwoKCiAgICAgICAg Zm9yIChpID0gMDsgaSA8IDQ7IGkrKykgewogICAgICAgICAgICAgICAgc3RydWN0IHJpbmdfaW5m byAqcnAgPSAmdHAtPnR4X2luZm9baV07CiAgICAgICAgICAgICAgICBpZiAocnAtPm1hcHBpbmcg IT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBwY2lfdW5tYXBfc2luZ2xlICh0cC0+cGNp X2RldiwgcnAtPm1hcHBpbmcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHJwLT5za2ItPmxlbiwgMSk7CiAgICAgICAgICAgICAgICAgICAgICAgIHJwLT5tYXBwaW5n ID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmIChycC0+c2tiKSB7CiAg ICAgICAgICAgICAgICAgICAgICAgIGtmcmVlX3NrYihycC0+c2tiKTsKICAgICAgICAgICAgICAg ICAgICAgICAgcnAtPnNrYiA9ICgodm9pZCAqKTApOwogICAgICAgICAgICAgICAgICAgICAgICB0 cC0+c3RhdHMudHhfZHJvcHBlZCsrOwogICAgICAgICAgICAgICAgfQogICAgICAgIH0KfQoKCnN0 YXRpYyB2b2lkIHJ0bDgxMzlfdHhfdGltZW91dCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikKewog ICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAgIHZv aWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgaW50IGk7CiAgICAgICAgdTggdG1w ODsKICAgICAgICB1bnNpZ25lZCBsb25nIGZsYWdzOwoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgoKCgoKICAgICAgICB0cC0+eHN0YXRzLnR4X3RpbWVvdXRzKys7CgoK ICAgICAgICB0bXA4ID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9h ZGRyICsgKENoaXBDbWQpKSkpOwogICAgICAgIGlmICh0bXA4ICYgQ21kVHhFbmIpCiAgICAgICAg ICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAo Q2hpcENtZCkpKSA9ICgoQ21kUnhFbmIpKSk7CgoKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25l ZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJNYXNrKSkpID0gKCgweDAwMDApKSk7 CgoKICAgICAgICBwcmludGsgKCI8Nz4iICIlczogVHggcXVldWUgc3RhcnQgZW50cnkgJWxkICBk aXJ0eSBlbnRyeSAlbGQuXG4iLAogICAgICAgICAgICAgICAgZGV2LT5uYW1lLCB0cC0+Y3VyX3R4 LCB0cC0+ZGlydHlfdHgpOwogICAgICAgIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspCiAgICAgICAg ICAgICAgICBwcmludGsgKCI8Nz4iICIlczogIFR4IGRlc2NyaXB0b3IgJWQgaXMgJTguOGx4LiVz XG4iLAogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIGksICgodW5zaWduZWQgbG9u ZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhTdGF0 dXMwICsgKGkgKiA0KSkpKSkpLAogICAgICAgICAgICAgICAgICAgICAgICBpID09IHRwLT5kaXJ0 eV90eCAlIDQgPwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIgKHF1ZXVlIGhlYWQp IiA6ICIiKTsKCgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hmbCA7IHBv cGwgJTAgOyBjbGkiOiI9ZyIgKGZsYWdzKTogOiJtZW1vcnkiKTsgKHZvaWQpKCZ0cC0+bG9jayk7 IH0gd2hpbGUgKDApOwogICAgICAgIHJ0bDgxMzlfdHhfY2xlYXIgKHRwKTsKICAgICAgICBkbyB7 IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInB1c2hsICUwIDsgcG9wZmwi OiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdoaWxlICgwKTsKCgogICAgICAgIHJ0 bDgxMzlfaHdfc3RhcnQgKGRldik7CgogICAgICAgIG5ldGlmX3dha2VfcXVldWUgKGRldik7Cn0K CgpzdGF0aWMgaW50IHJ0bDgxMzlfc3RhcnRfeG1pdCAoc3RydWN0IHNrX2J1ZmYgKnNrYiwgc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRw ID0gZGV2LT5wcml2OwogICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAg ICAgdW5zaWduZWQgaW50IGVudHJ5OwogICAgICAgIHUzMiBkbWFfYWRkcjsKCiAgICAgICAgX19h c21fXyBfX3ZvbGF0aWxlX18gKCJsb2NrOyBhZGRsICQwLDAoJSVlc3ApIjogOiA6Im1lbW9yeSIp OwoKCiAgICAgICAgZW50cnkgPSB0cC0+Y3VyX3R4ICUgNDsKCiAgICAgICAgaWYoISh0cC0+dHhf aW5mb1tlbnRyeV0uc2tiID09ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFp bGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAtPnR4X2luZm9bZW50cnldLnNrYiA9PSBOVUxM IiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sMTc1Mik7IH07CiAgICAgICAgaWYoISh0cC0+dHhf aW5mb1tlbnRyeV0ubWFwcGluZyA9PSAwKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAl cywlcywlcyxsaW5lPSVkXG4iLCAidHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPT0gMCIsIjgx Mzl0b28uYyIsX19GVU5DVElPTl9fLDE3NTMpOyB9OwoKICAgICAgICB0cC0+dHhfaW5mb1tlbnRy eV0uc2tiID0gc2tiOwogICAgICAgIGlmICggISgodW5zaWduZWQgbG9uZylza2ItPmRhdGEgJiAz KSAmJiAoKHN0cnVjdCBza2Jfc2hhcmVkX2luZm8gKikoKHNrYiktPmVuZCkpLT5ucl9mcmFncyA9 PSAwICYmCiAgICAgICAgICAgICAgICAgICAgICAgIHNrYi0+aXBfc3VtbWVkICE9IDEpIHsKICAg ICAgICAgICAgICAgIHRwLT54c3RhdHMudHhfYnVmX21hcHBlZCsrOwogICAgICAgICAgICAgICAg dHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcgPQogICAgICAgICAgICAgICAgICAgIHBjaV9tYXBf c2luZ2xlICh0cC0+cGNpX2Rldiwgc2tiLT5kYXRhLCBza2ItPmxlbiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgMSk7CiAgICAgICAgICAgICAgICBkbWFfYWRkciA9IHRwLT50 eF9pbmZvW2VudHJ5XS5tYXBwaW5nOwogICAgICAgIH0gZWxzZSBpZiAoc2tiLT5sZW4gPCAxNTM2 KSB7CiAgICAgICAgICAgICAgICBza2JfY29weV9hbmRfY3N1bV9kZXYoc2tiLCB0cC0+dHhfYnVm W2VudHJ5XSk7CiAgICAgICAgICAgICAgICBkbWFfYWRkciA9IHRwLT50eF9idWZzX2RtYSArICh0 cC0+dHhfYnVmW2VudHJ5XSAtIHRwLT50eF9idWZzKTsKICAgICAgICB9IGVsc2UgewogICAgICAg ICAgICAgICAga2ZyZWVfc2tiKHNrYik7CiAgICAgICAgICAgICAgICB0cC0+dHhfaW5mb1tlbnRy eV0uc2tiID0gKCh2b2lkICopMCk7CiAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9 CgogICAgICAgIGRvIHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsg KHZvaWQpKCZ0cC0+bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgIGRvIHsgKCoodm9sYXRpbGUg dW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhBZGRyMCArIChlbnRyeSAqIDQp KSkpID0gKChkbWFfYWRkcikpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAq KShpb2FkZHIgKyAoVHhBZGRyMCArIChlbnRyeSAqIDQpKSkpKTsgfSB3aGlsZSAoMCk7CiAgICAg ICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChU eFN0YXR1czAgKyAoZW50cnkgKiBzaXplb2YgKHUzMikpKSkpID0gKCh0cC0+dHhfZmxhZyB8IChz a2ItPmxlbiA+PSA2MCA/IHNrYi0+bGVuIDogNjApKSkpOyAoKih2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgKCh2b2lkICopKGlvYWRkciArIChUeFN0YXR1czAgKyAoZW50cnkgKiBzaXplb2YgKHUz MikpKSkpKTsgfSB3aGlsZSAoMCk7CgoKICAgICAgICBkZXYtPnRyYW5zX3N0YXJ0ID0gamlmZmll czsKCiAgICAgICAgdHAtPmN1cl90eCsrOwogICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgi bG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKICAgICAgICBpZiAoKHRwLT5j dXJfdHggLSA0KSA9PSB0cC0+ZGlydHlfdHgpCiAgICAgICAgICAgICAgICBuZXRpZl9zdG9wX3F1 ZXVlIChkZXYpOwogICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRp bGVfXygic3RpIjogOiA6Im1lbW9yeSIpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICByZXR1cm4g MDsKfQoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfdHhfaW50ZXJydXB0IChzdHJ1Y3QgbmV0X2Rldmlj ZSAqZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHJ0bDgxMzlf cHJpdmF0ZSAqdHAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICppb2Fk ZHIpCnsKICAgICAgICB1bnNpZ25lZCBsb25nIGRpcnR5X3R4LCB0eF9sZWZ0OwoKICAgICAgICBp ZighKGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMs JXMsJXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18s MTc5OCk7IH07CiAgICAgICAgaWYoISh0cCAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNz ZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgInRwICE9IE5VTEwiLCI4MTM5dG9v LmMiLF9fRlVOQ1RJT05fXywxNzk5KTsgfTsKICAgICAgICBpZighKGlvYWRkciAhPSAoKHZvaWQg KikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwg ImlvYWRkciAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18sMTgwMCk7IH07CgogICAg ICAgIGRpcnR5X3R4ID0gdHAtPmRpcnR5X3R4OwogICAgICAgIHR4X2xlZnQgPSB0cC0+Y3VyX3R4 IC0gZGlydHlfdHg7CiAgICAgICAgd2hpbGUgKHR4X2xlZnQgPiAwKSB7CiAgICAgICAgICAgICAg ICBpbnQgZW50cnkgPSBkaXJ0eV90eCAlIDQ7CiAgICAgICAgICAgICAgICBpbnQgdHhzdGF0dXM7 CgogICAgICAgICAgICAgICAgdHhzdGF0dXMgPSAoKHVuc2lnbmVkIGxvbmcpICgqKHZvbGF0aWxl IHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFR4U3RhdHVzMCArIChlbnRyeSAq IHNpemVvZiAodTMyKSkpKSkpKTsKCiAgICAgICAgICAgICAgICBpZiAoISh0eHN0YXR1cyAmIChU eFN0YXRPSyB8IFR4VW5kZXJydW4gfCBUeEFib3J0ZWQpKSkKICAgICAgICAgICAgICAgICAgICAg ICAgYnJlYWs7CgoKICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAmIChUeE91dE9mV2luZG93 IHwgVHhBYm9ydGVkKSkgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMudHhfZXJy b3JzKys7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0eHN0YXR1cyAmIFR4QWJvcnRlZCkg ewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9hYm9ydGVkX2Vy cm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgKCoodm9sYXRpbGUg dW5zaWduZWQgaW50ICopICgodm9pZCAqKShpb2FkZHIgKyAoVHhDb25maWcpKSkgPSAoKFR4Q2xl YXJBYnQgfCAoNiA8PCBUeERNQVNoaWZ0KSkpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICop ICgodm9pZCAqKShpb2FkZHIgKyAoVHhDb25maWcpKSkpOyB9IHdoaWxlICgwKTsKICAgICAgICAg ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHhzdGF0dXMgJiBU eENhcnJpZXJMb3N0KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50 eF9jYXJyaWVyX2Vycm9ycysrOwogICAgICAgICAgICAgICAgICAgICAgICBpZiAodHhzdGF0dXMg JiBUeE91dE9mV2luZG93KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT5zdGF0 cy50eF93aW5kb3dfZXJyb3JzKys7CgoKCgogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAg ICAgICAgICAgICAgICAgICAgaWYgKHR4c3RhdHVzICYgVHhVbmRlcnJ1bikgewoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBpZiAodHAtPnR4X2ZsYWcgPCAweDAwMzAwMDAwKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2ZsYWcgKz0gMHgwMDAy MDAwMDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMudHhfZmlmb19l cnJvcnMrKzsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICB0cC0+c3RhdHMuY29sbGlzaW9ucyArPSAodHhzdGF0dXMgPj4gMjQpICYgMTU7CiAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy50eF9ieXRlcyArPSB0eHN0YXR1cyAmIDB4N2ZmOwog ICAgICAgICAgICAgICAgICAgICAgICB0cC0+c3RhdHMudHhfcGFja2V0cysrOwogICAgICAgICAg ICAgICAgfQoKCiAgICAgICAgICAgICAgICBpZiAodHAtPnR4X2luZm9bZW50cnldLm1hcHBpbmcg IT0gMCkgewogICAgICAgICAgICAgICAgICAgICAgICBwY2lfdW5tYXBfc2luZ2xlKHRwLT5wY2lf ZGV2LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRwLT50eF9pbmZv W2VudHJ5XS5tYXBwaW5nLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHRwLT50eF9pbmZvW2VudHJ5XS5za2ItPmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAxKTsKICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2luZm9bZW50 cnldLm1hcHBpbmcgPSAwOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgZGV2X2tm cmVlX3NrYl9pcnEgKHRwLT50eF9pbmZvW2VudHJ5XS5za2IpOwogICAgICAgICAgICAgICAgdHAt PnR4X2luZm9bZW50cnldLnNrYiA9ICgodm9pZCAqKTApOwoKICAgICAgICAgICAgICAgIGRpcnR5 X3R4Kys7CiAgICAgICAgICAgICAgICB0eF9sZWZ0LS07CiAgICAgICAgfQoKCiAgICAgICAgaWYg KHRwLT5jdXJfdHggLSBkaXJ0eV90eCA+IDQpIHsKICAgICAgICAgICAgICAgIHByaW50ayAoIjwz PiIgIiVzOiBPdXQtb2Ytc3luYyBkaXJ0eSBwb2ludGVyLCAlbGQgdnMuICVsZC5cbiIsCiAgICAg ICAgICAgICAgICAgICAgICAgIGRldi0+bmFtZSwgZGlydHlfdHgsIHRwLT5jdXJfdHgpOwogICAg ICAgICAgICAgICAgZGlydHlfdHggKz0gNDsKICAgICAgICB9CgoKCiAgICAgICAgaWYgKHRwLT5k aXJ0eV90eCAhPSBkaXJ0eV90eCkgewogICAgICAgICAgICAgICAgdHAtPmRpcnR5X3R4ID0gZGly dHlfdHg7CiAgICAgICAgICAgICAgICBfX2FzbV9fIF9fdm9sYXRpbGVfXyAoImxvY2s7IGFkZGwg JDAsMCglJWVzcCkiOiA6IDoibWVtb3J5Iik7CiAgICAgICAgICAgICAgICBpZiAobmV0aWZfcXVl dWVfc3RvcHBlZCAoZGV2KSkKICAgICAgICAgICAgICAgICAgICAgICAgbmV0aWZfd2FrZV9xdWV1 ZSAoZGV2KTsKICAgICAgICB9Cn0KCgoKc3RhdGljIHZvaWQgcnRsODEzOV9yeF9lcnIgKHUzMiBy eF9zdGF0dXMsIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCwgdm9pZCAqaW9hZGRyKQp7CiAgICAgICAg dTggdG1wODsKICAgICAgICBpbnQgdG1wX3dvcms7CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIDsKCiAgICAgICAgaWYgKHJ4X3N0YXR1cyAmIFJ4VG9vTG9uZykgewogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCiAgICAgICAgfQog ICAgICAgIHRwLT5zdGF0cy5yeF9lcnJvcnMrKzsKICAgICAgICBpZiAocnhfc3RhdHVzICYgKFJ4 QmFkU3ltYm9sIHwgUnhCYWRBbGlnbikpCiAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfZnJh bWVfZXJyb3JzKys7CiAgICAgICAgaWYgKHJ4X3N0YXR1cyAmIChSeFJ1bnQgfCBSeFRvb0xvbmcp KQogICAgICAgICAgICAgICAgdHAtPnN0YXRzLnJ4X2xlbmd0aF9lcnJvcnMrKzsKICAgICAgICBp ZiAocnhfc3RhdHVzICYgUnhDUkNFcnIpCiAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfY3Jj X2Vycm9ycysrOwoKCgoKICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikg KCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0gKChDbWRUeEVuYikpKTsgKCoodm9sYXRp bGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOyB9IHdo aWxlICgwKTsKICAgICAgICB0bXBfd29yayA9IDIwMDsKICAgICAgICB3aGlsZSAoLS10bXBfd29y ayA+IDApIHsKICAgICAgICAgICAgICAgIChfX2J1aWx0aW5fY29uc3RhbnRfcCgxKSA/ICgoMSkg PiAyMDAwMCA/IF9fYmFkX3VkZWxheSgpIDogX19jb25zdF91ZGVsYXkoKDEpICogMHgxMGM2dWwp KSA6IF9fdWRlbGF5KDEpKTsKICAgICAgICAgICAgICAgIHRtcDggPSAoKih2b2xhdGlsZSB1bnNp Z25lZCBjaGFyICopICgodm9pZCAqKShpb2FkZHIgKyAoQ2hpcENtZCkpKSk7CiAgICAgICAgICAg ICAgICBpZiAoISh0bXA4ICYgQ21kUnhFbmIpKQogICAgICAgICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICB9CiAgICAgICAgaWYgKHRtcF93b3JrIDw9IDApCiAgICAgICAgICAgICAgICBw cmludGsgKCI8ND4iICI4MTM5dG9vIiAiOiAiICJyeCBzdG9wIHdhaXQgdG9vIGxvbmdcbiIpOwoK ICAgICAgICB0bXBfd29yayA9IDIwMDsKICAgICAgICB3aGlsZSAoLS10bXBfd29yayA+IDApIHsK ICAgICAgICAgICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQg KikoaW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFJ4RW5iIHwgQ21kVHhFbmIpKSk7ICgqKHZv bGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpKTsg fSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICAoX19idWlsdGluX2NvbnN0YW50X3AoMSkgPyAo KDEpID4gMjAwMDAgPyBfX2JhZF91ZGVsYXkoKSA6IF9fY29uc3RfdWRlbGF5KCgxKSAqIDB4MTBj NnVsKSkgOiBfX3VkZWxheSgxKSk7CiAgICAgICAgICAgICAgICB0bXA4ID0gKCoodm9sYXRpbGUg dW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkpOwogICAgICAg ICAgICAgICAgaWYgKCh0bXA4ICYgQ21kUnhFbmIpICYmICh0bXA4ICYgQ21kVHhFbmIpKQogICAg ICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKHRtcF93b3Jr IDw9IDApCiAgICAgICAgICAgICAgICBwcmludGsgKCI8ND4iICI4MTM5dG9vIiAiOiAiICJ0eC9y eCBlbmFibGUgd2FpdCB0b28gbG9uZ1xuIik7CgoKICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2 X1VubG9jaykpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKENmZzkzNDYpKSkpOyB9IHdoaWxlICgwKTsKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWdu ZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENoaXBDbWQpKSkgPSAoKENtZFJ4RW5iIHwg Q21kVHhFbmIpKSk7CgogICAgICAgIHRwLT5yeF9jb25maWcgPSBydGw4MTM5X3J4X2NvbmZpZyB8 IEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE15UGh5czsKICAgICAgICAoKih2b2xhdGlsZSB1bnNp Z25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeENvbmZpZykpKSA9ICgodHAtPnJ4X2Nv bmZpZykpKTsKICAgICAgICB0cC0+Y3VyX3J4ID0gMDsKCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIg KikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2X0xvY2spKSk7CgoK ICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRy ICsgKFJ4QnVmKSkpID0gKCh0cC0+cnhfcmluZ19kbWEpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4QnVmKSkpKTsgfSB3aGlsZSAoMCk7CgoKICAg ICAgICBfX3NldF9yeF9tb2RlIChkZXYpOwp9CgpzdGF0aWMgdm9pZCBydGw4MTM5X3J4X2ludGVy cnVwdCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwLCB2b2lkICppb2FkZHIpCnsKICAgICAg ICB1bnNpZ25lZCBjaGFyICpyeF9yaW5nOwogICAgICAgIHUxNiBjdXJfcng7CgogICAgICAgIGlm KCEoZGV2ICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywl cywlcyxsaW5lPSVkXG4iLCAiZGV2ICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywx OTUwKTsgfTsKICAgICAgICBpZighKHRwICE9ICgodm9pZCAqKTApKSkgeyBwcmludGsoICJBc3Nl cnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAidHAgIT0gTlVMTCIsIjgxMzl0b28u YyIsX19GVU5DVElPTl9fLDE5NTEpOyB9OwogICAgICAgIGlmKCEoaW9hZGRyICE9ICgodm9pZCAq KTApKSkgeyBwcmludGsoICJBc3NlcnRpb24gZmFpbGVkISAlcywlcywlcyxsaW5lPSVkXG4iLCAi aW9hZGRyICE9IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywxOTUyKTsgfTsKCiAgICAg ICAgcnhfcmluZyA9IHRwLT5yeF9yaW5nOwogICAgICAgIGN1cl9yeCA9IHRwLT5jdXJfcng7Cgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA7CgoK CgogICAgICAgIHdoaWxlICgoKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKiko aW9hZGRyICsgKENoaXBDbWQpKSkpICYgUnhCdWZFbXB0eSkgPT0gMCkgewogICAgICAgICAgICAg ICAgaW50IHJpbmdfb2Zmc2V0ID0gY3VyX3J4ICUgKDgxOTIgPDwgMik7CiAgICAgICAgICAgICAg ICB1MzIgcnhfc3RhdHVzOwogICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHJ4X3NpemU7CiAg ICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgcGt0X3NpemU7CiAgICAgICAgICAgICAgICBzdHJ1 Y3Qgc2tfYnVmZiAqc2tiOwoKICAgICAgICAgICAgICAgIF9fYXNtX18gX192b2xhdGlsZV9fICgi bG9jazsgYWRkbCAkMCwwKCUlZXNwKSI6IDogOiJtZW1vcnkiKTsKCgogICAgICAgICAgICAgICAg cnhfc3RhdHVzID0gKChfX3UzMikoKih1MzIgKikgKHJ4X3JpbmcgKyByaW5nX29mZnNldCkpKTsK ICAgICAgICAgICAgICAgIHJ4X3NpemUgPSByeF9zdGF0dXMgPj4gMTY7CiAgICAgICAgICAgICAg ICBwa3Rfc2l6ZSA9IHJ4X3NpemUgLSA0OwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICA7CiMgMTk5MCAiODEzOXRvby5jIgogICAgICAgICAgICAgICAgaWYgKHJ4X3Np emUgPT0gMHhmZmYwKSB7CiAgICAgICAgICAgICAgICAgICAgICAgIHRwLT54c3RhdHMuZWFybHlf cngrKzsKICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgoK CgoKCiAgICAgICAgICAgICAgICBpZiAoKHJ4X3NpemUgPiAoMTUzNiArNCkpIHx8CiAgICAgICAg ICAgICAgICAgICAgKHJ4X3NpemUgPCA4KSB8fAogICAgICAgICAgICAgICAgICAgICghKHJ4X3N0 YXR1cyAmIFJ4U3RhdHVzT0spKSkgewogICAgICAgICAgICAgICAgICAgICAgICBydGw4MTM5X3J4 X2VyciAocnhfc3RhdHVzLCBkZXYsIHRwLCBpb2FkZHIpOwogICAgICAgICAgICAgICAgICAgICAg ICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiMgMjAxNiAiODEzOXRvby5jIgogICAgICAgICAg ICAgICAgc2tiID0gZGV2X2FsbG9jX3NrYiAocGt0X3NpemUgKyAyKTsKICAgICAgICAgICAgICAg IGlmIChza2IpIHsKICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5kZXYgPSBkZXY7CiAgICAg ICAgICAgICAgICAgICAgICAgIHNrYl9yZXNlcnZlIChza2IsIDIpOwoKICAgICAgICAgICAgICAg ICAgICAgICAgZXRoX2NvcHlfYW5kX3N1bSAoc2tiLCAmcnhfcmluZ1tyaW5nX29mZnNldCArIDRd LCBwa3Rfc2l6ZSwgMCk7CiAgICAgICAgICAgICAgICAgICAgICAgIHNrYl9wdXQgKHNrYiwgcGt0 X3NpemUpOwoKICAgICAgICAgICAgICAgICAgICAgICAgc2tiLT5wcm90b2NvbCA9IGV0aF90eXBl X3RyYW5zIChza2IsIGRldik7CiAgICAgICAgICAgICAgICAgICAgICAgIG5ldGlmX3J4IChza2Ip OwogICAgICAgICAgICAgICAgICAgICAgICBkZXYtPmxhc3RfcnggPSBqaWZmaWVzOwogICAgICAg ICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfYnl0ZXMgKz0gcGt0X3NpemU7CiAgICAgICAg ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9wYWNrZXRzKys7CiAgICAgICAgICAgICAgICB9 IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICBwcmludGsgKCI8ND4iCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIiVzOiBNZW1vcnkgc3F1ZWV6ZSwgZHJvcHBpbmcgcGFja2V0 LlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUpOwogICAgICAg ICAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfZHJvcHBlZCsrOwogICAgICAgICAgICAgICAg fQoKICAgICAgICAgICAgICAgIGN1cl9yeCA9IChjdXJfcnggKyByeF9zaXplICsgNCArIDMpICYg fjM7CiAgICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQg KikoaW9hZGRyICsgKFJ4QnVmUHRyKSkpID0gKChjdXJfcnggLSAxNikpKTsKCiAgICAgICAgICAg ICAgICBpZiAoKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciAr IChJbnRyU3RhdHVzKSkpKSAmIFJ4QWNrQml0cykKICAgICAgICAgICAgICAgICAgICAgICAgZG8g eyAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJT dGF0dXMpKSkgPSAoKFJ4QWNrQml0cykpKTsgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikg KCh2b2lkICopKGlvYWRkciArIChJbnRyU3RhdHVzKSkpKTsgfSB3aGlsZSAoMCk7CiAgICAgICAg fQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg OwoKCgoKICAgICAgICB0cC0+Y3VyX3J4ID0gY3VyX3J4OwoKICAgICAgICBpZiAoKCgqKHZvbGF0 aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpKSAmIFJ4 QnVmRW1wdHkpICYmCiAgICAgICAgICAgICgoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAo KHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMpKSkpICYgUnhBY2tCaXRzKSkKICAgICAgICAg ICAgICAgIGRvIHsgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRk ciArIChJbnRyU3RhdHVzKSkpID0gKChSeEFja0JpdHMpKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IHNob3J0ICopICgodm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSk7IH0gd2hpbGUgKDAp Owp9CgoKc3RhdGljIHZvaWQgcnRsODEzOV93ZWlyZF9pbnRlcnJ1cHQgKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcnRs ODEzOV9wcml2YXRlICp0cCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZv aWQgKmlvYWRkciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzdGF0 dXMsIGludCBsaW5rX2NoYW5nZWQpCnsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICA7CgoKICAgICAgICBpZighKGRldiAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0 aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgImRldiAhPSBOVUxMIiwiODEzOXRvby5j IixfX0ZVTkNUSU9OX18sMjA2NCk7IH07CiAgICAgICAgaWYoISh0cCAhPSAoKHZvaWQgKikwKSkp IHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMsJXMsbGluZT0lZFxuIiwgInRwICE9 IE5VTEwiLCI4MTM5dG9vLmMiLF9fRlVOQ1RJT05fXywyMDY1KTsgfTsKICAgICAgICBpZighKGlv YWRkciAhPSAoKHZvaWQgKikwKSkpIHsgcHJpbnRrKCAiQXNzZXJ0aW9uIGZhaWxlZCEgJXMsJXMs JXMsbGluZT0lZFxuIiwgImlvYWRkciAhPSBOVUxMIiwiODEzOXRvby5jIixfX0ZVTkNUSU9OX18s MjA2Nik7IH07CgoKICAgICAgICB0cC0+c3RhdHMucnhfbWlzc2VkX2Vycm9ycyArPSAoKHVuc2ln bmVkIGxvbmcpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsg KFJ4TWlzc2VkKSkpKSk7CiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9p ZCAqKShpb2FkZHIgKyAoUnhNaXNzZWQpKSkgPSAoKDApKSk7CgogICAgICAgIGlmICgoc3RhdHVz ICYgUnhVbmRlcnJ1bikgJiYgbGlua19jaGFuZ2VkICYmCiAgICAgICAgICAgICh0cC0+ZHJ2X2Zs YWdzICYgSEFTX0xOS19DSE5HKSkgewoKICAgICAgICAgICAgICAgIGludCBscGFyID0gKCoodm9s YXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChOV2F5TFBBUikpKSk7 CiAgICAgICAgICAgICAgICBpbnQgZHVwbGV4ID0gKGxwYXIgJiAweDAxMDApIHx8IChscGFyICYg MHgwMUMwKSA9PSAweDAwNDAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCB0cC0+ ZHVwbGV4X2xvY2s7CiAgICAgICAgICAgICAgICBpZiAodHAtPmZ1bGxfZHVwbGV4ICE9IGR1cGxl eCkgewogICAgICAgICAgICAgICAgICAgICAgICB0cC0+ZnVsbF9kdXBsZXggPSBkdXBsZXg7CgoK CgoKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHN0YXR1cyAmPSB+UnhVbmRlcnJ1 bjsKICAgICAgICB9CgoKICAgICAgICBpZiAoc3RhdHVzICYKICAgICAgICAgICAgKFJ4VW5kZXJy dW4gfCBSeE92ZXJmbG93IHwgUnhFcnIgfCBSeEZJRk9PdmVyKSkKICAgICAgICAgICAgICAgIHRw LT5zdGF0cy5yeF9lcnJvcnMrKzsKCiAgICAgICAgaWYgKHN0YXR1cyAmIChQQ1NUaW1lb3V0KSkK ICAgICAgICAgICAgICAgIHRwLT5zdGF0cy5yeF9sZW5ndGhfZXJyb3JzKys7CiAgICAgICAgaWYg KHN0YXR1cyAmIChSeFVuZGVycnVuIHwgUnhGSUZPT3ZlcikpCiAgICAgICAgICAgICAgICB0cC0+ c3RhdHMucnhfZmlmb19lcnJvcnMrKzsKICAgICAgICBpZiAoc3RhdHVzICYgUENJRXJyKSB7CiAg ICAgICAgICAgICAgICB1MTYgcGNpX2NtZF9zdGF0dXM7CiAgICAgICAgICAgICAgICBwY2lfcmVh ZF9jb25maWdfd29yZCAodHAtPnBjaV9kZXYsIDB4MDYsICZwY2lfY21kX3N0YXR1cyk7CgogICAg ICAgICAgICAgICAgcHJpbnRrICgiPDM+IiAiJXM6IFBDSSBCdXMgZXJyb3IgJTQuNHguXG4iLAog ICAgICAgICAgICAgICAgICAgICAgICBkZXYtPm5hbWUsIHBjaV9jbWRfc3RhdHVzKTsKICAgICAg ICB9Cn0KCgoKCnN0YXRpYyB2b2lkIHJ0bDgxMzlfaW50ZXJydXB0IChpbnQgaXJxLCB2b2lkICpk ZXZfaW5zdGFuY2UsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHRfcmVn cyAqcmVncykKewogICAgICAgIHN0cnVjdCBuZXRfZGV2aWNlICpkZXYgPSAoc3RydWN0IG5ldF9k ZXZpY2UgKikgZGV2X2luc3RhbmNlOwogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRw ID0gZGV2LT5wcml2OwogICAgICAgIGludCBib2d1c2NudCA9IG1heF9pbnRlcnJ1cHRfd29yazsK ICAgICAgICB2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogICAgICAgIGludCBhY2tzdGF0 LCBzdGF0dXM7CiAgICAgICAgaW50IGxpbmtfY2hhbmdlZCA9IDA7CgogICAgICAgICh2b2lkKSgm dHAtPmxvY2spOwoKICAgICAgICBkbyB7CiAgICAgICAgICAgICAgICBzdGF0dXMgPSAoKih2b2xh dGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJTdGF0dXMpKSkp OwoKCiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzID09IDB4RkZGRikKICAgICAgICAgICAgICAg ICAgICAgICAgYnJlYWs7CgoKCiAgICAgICAgICAgICAgICBpZiAoc3RhdHVzICYgUnhVbmRlcnJ1 bikKICAgICAgICAgICAgICAgICAgICAgICAgbGlua19jaGFuZ2VkID0gKCoodm9sYXRpbGUgdW5z aWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChDU0NSKSkpKSAmIENTQ1JfTGlua0No YW5nZUJpdDsKCgoKCiAgICAgICAgICAgICAgICBhY2tzdGF0ID0gc3RhdHVzICYgflJ4QWNrQml0 czsKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgodm9pZCAq KShpb2FkZHIgKyAoSW50clN0YXR1cykpKSA9ICgoYWNrc3RhdCkpKTsKCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgOwoKCiAgICAgICAgICAgICAgICBpZiAoKHN0YXR1cyAmCiAgICAgICAgICAgICAgICAgICAg IChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwgUnhVbmRlcnJ1biB8IFJ4T3ZlcmZsb3cgfAogICAgICAg ICAgICAgICAgICAgICAgUnhGSUZPT3ZlciB8IFR4RXJyIHwgVHhPSyB8IFJ4RXJyIHwgUnhPSykp ID09IDApCiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICAgICAgICAgIGlm IChuZXRpZl9ydW5uaW5nIChkZXYpICYmIChzdGF0dXMgJiBSeEFja0JpdHMpKQogICAgICAgICAg ICAgICAgICAgICAgICBydGw4MTM5X3J4X2ludGVycnVwdCAoZGV2LCB0cCwgaW9hZGRyKTsKCgog ICAgICAgICAgICAgICAgaWYgKHN0YXR1cyAmIChQQ0lFcnIgfCBQQ1NUaW1lb3V0IHwgUnhVbmRl cnJ1biB8IFJ4T3ZlcmZsb3cgfAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSeEZJRk9P dmVyIHwgVHhFcnIgfCBSeEVycikpCiAgICAgICAgICAgICAgICAgICAgICAgIHJ0bDgxMzlfd2Vp cmRfaW50ZXJydXB0IChkZXYsIHRwLCBpb2FkZHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBzdGF0dXMsIGxpbmtfY2hhbmdlZCk7CgogICAgICAgICAg ICAgICAgaWYgKG5ldGlmX3J1bm5pbmcgKGRldikgJiYgKHN0YXR1cyAmIChUeE9LIHwgVHhFcnIp KSkKICAgICAgICAgICAgICAgICAgICAgICAgcnRsODEzOV90eF9pbnRlcnJ1cHQgKGRldiwgdHAs IGlvYWRkcik7CgogICAgICAgICAgICAgICAgYm9ndXNjbnQtLTsKICAgICAgICB9IHdoaWxlIChi b2d1c2NudCA+IDApOwoKICAgICAgICBpZiAoYm9ndXNjbnQgPD0gMCkgewogICAgICAgICAgICAg ICAgcHJpbnRrICgiPDQ+IiAiJXM6IFRvbyBtdWNoIHdvcmsgYXQgaW50ZXJydXB0LCAiCiAgICAg ICAgICAgICAgICAgICAgICAgICJJbnRyU3RhdHVzPTB4JTQuNHguXG4iLCBkZXYtPm5hbWUsIHN0 YXR1cyk7CgoKICAgICAgICAgICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIHNob3J0ICopICgo dm9pZCAqKShpb2FkZHIgKyAoSW50clN0YXR1cykpKSA9ICgoMHhmZmZmKSkpOwogICAgICAgIH0K CiAgICAgICAgZG8geyB9IHdoaWxlKDApOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDsKCn0KCgpzdGF0aWMgaW50IHJ0bDgxMzlfY2xvc2UgKHN0cnVj dCBuZXRfZGV2aWNlICpkZXYpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICp0cCA9 IGRldi0+cHJpdjsKICAgICAgICB2b2lkICppb2FkZHIgPSB0cC0+bW1pb19hZGRyOwogICAgICAg IGludCByZXQgPSAwOwogICAgICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogICAgICAgIG5ldGlmX3N0b3BfcXVldWUgKGRldik7CgogICAgICAg IGlmICh0cC0+dGhyX3BpZCA+PSAwKSB7CiAgICAgICAgICAgICAgICByZXQgPSBraWxsX3Byb2Mg KHRwLT50aHJfcGlkLCAxNSwgMSk7CiAgICAgICAgICAgICAgICBpZiAocmV0KSB7CiAgICAgICAg ICAgICAgICAgICAgICAgIHByaW50ayAoIjwzPiIgIiVzOiB1bmFibGUgdG8gc2lnbmFsIHRocmVh ZFxuIiwgZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHdhaXRfZm9yX2NvbXBsZXRpb24gKCZ0cC0+ dGhyX2V4aXRlZCk7CiAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA7CgoKICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGls ZV9fKCJwdXNoZmwgOyBwb3BsICUwIDsgY2xpIjoiPWciIChmbGFncyk6IDoibWVtb3J5Iik7ICh2 b2lkKSgmdHAtPmxvY2spOyB9IHdoaWxlICgwKTsKCgogICAgICAgICgqKHZvbGF0aWxlIHVuc2ln bmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0gKCgwKSkpOwoKCiAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgc2hvcnQgKikgKCh2b2lkICopKGlvYWRkciArIChJ bnRyTWFzaykpKSA9ICgoMCkpKTsKCgogICAgICAgIHRwLT5zdGF0cy5yeF9taXNzZWRfZXJyb3Jz ICs9ICgodW5zaWduZWQgbG9uZykgKCoodm9sYXRpbGUgdW5zaWduZWQgaW50ICopICgodm9pZCAq KShpb2FkZHIgKyAoUnhNaXNzZWQpKSkpKTsKICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkpKSA9ICgoMCkpKTsKCiAgICAgICAg ZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xhdGlsZV9fKCJwdXNobCAlMCA7IHBv cGZsIjogOiJnIiAoZmxhZ3MpOiJtZW1vcnkiLCAiY2MiKTsgfSB3aGlsZSAoMCk7CgogICAgICAg IF9fYXNtX18gX192b2xhdGlsZV9fKCIiOiA6IDoibWVtb3J5Iik7CiAgICAgICAgZnJlZV9pcnEg KGRldi0+aXJxLCBkZXYpOwoKICAgICAgICBydGw4MTM5X3R4X2NsZWFyICh0cCk7CgogICAgICAg IHBjaV9mcmVlX2NvbnNpc3RlbnQodHAtPnBjaV9kZXYsICgoODE5MiA8PCAyKSArIDE2ICsgMjA0 OCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+cnhfcmluZywgdHAtPnJ4X3Jpbmdf ZG1hKTsKICAgICAgICBwY2lfZnJlZV9jb25zaXN0ZW50KHRwLT5wY2lfZGV2LCAoMTUzNiAqIDQp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdHAtPnR4X2J1ZnMsIHRwLT50eF9idWZzX2Rt YSk7CiAgICAgICAgdHAtPnJ4X3JpbmcgPSAoKHZvaWQgKikwKTsKICAgICAgICB0cC0+dHhfYnVm cyA9ICgodm9pZCAqKTApOwoKCiAgICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAo KHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZfVW5sb2NrKSkpOwoKICAg ICAgICBpZiAocnRsX2NoaXBfaW5mb1t0cC0+Y2hpcHNldF0uZmxhZ3MgJiBIYXNIbHRDbGspCiAg ICAgICAgICAgICAgICAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9pZCAqKShpb2Fk ZHIgKyAoSGx0Q2xrKSkpID0gKCgnSCcpKSk7CgogICAgICAgICAgICAgICAgICAgICAgICAgIDsK ICAgICAgICByZXR1cm4gMDsKfQoKCgoKCnN0YXRpYyB2b2lkIG5ldGRldl9nZXRfZXNldCAoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGV0aHRvb2xfY21kICplc2V0KQp7CiAgICAgICAg c3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqbnAgPSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9h ZGRyID0gbnAtPm1taW9fYWRkcjsKICAgICAgICB1MTYgYWR2ZXJ0OwoKICAgICAgICBlc2V0LT5z dXBwb3J0ZWQgPSAoMSA8PCAwKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IDEpCiAg ICAgICAgICAgICAgICAgICAgICAgIHwgKDEgPDwgMikKICAgICAgICAgICAgICAgICAgICAgICAg fCAoMSA8PCAzKQogICAgICAgICAgICAgICAgICAgICAgICB8ICgxIDw8IDYpCiAgICAgICAgICAg ICAgICAgICAgICAgIHwgKDEgPDwgNyk7CgogICAgICAgIGVzZXQtPmFkdmVydGlzaW5nID0gKDEg PDwgNykgfCAoMSA8PCA2KTsKICAgICAgICBhZHZlcnQgPSBtZGlvX3JlYWQgKGRldiwgbnAtPnBo eXNbMF0sIDQpOwogICAgICAgIGlmIChhZHZlcnQgJiAweDAwMjApCiAgICAgICAgICAgICAgICBl c2V0LT5hZHZlcnRpc2luZyB8PSAoMSA8PCAwKTsKICAgICAgICBpZiAoYWR2ZXJ0ICYgMHgwMDQw KQogICAgICAgICAgICAgICAgZXNldC0+YWR2ZXJ0aXNpbmcgfD0gKDEgPDwgMSk7CiAgICAgICAg aWYgKGFkdmVydCAmIDB4MDA4MCkKICAgICAgICAgICAgICAgIGVzZXQtPmFkdmVydGlzaW5nIHw9 ICgxIDw8IDIpOwogICAgICAgIGlmIChhZHZlcnQgJiAweDAxMDApCiAgICAgICAgICAgICAgICBl c2V0LT5hZHZlcnRpc2luZyB8PSAoMSA8PCAzKTsKCiAgICAgICAgZXNldC0+c3BlZWQgPSAoKCoo dm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1lZGlhU3RhdHVz KSkpKSAmIDB4MDgpID8gMTAgOiAxMDA7CgoKCiAgICAgICAgZXNldC0+ZHVwbGV4ID0gbnAtPmZ1 bGxfZHVwbGV4ID8gMHgwMSA6IDB4MDA7CiAgICAgICAgZXNldC0+cG9ydCA9IDB4MDA7CgogICAg ICAgIGVzZXQtPnBoeV9hZGRyZXNzID0gbnAtPnBoeXNbMF07CiAgICAgICAgZXNldC0+dHJhbnNj ZWl2ZXIgPSAweDAwOwogICAgICAgIGVzZXQtPmF1dG9uZWcgPSAobWRpb19yZWFkIChkZXYsIG5w LT5waHlzWzBdLCAwKSAmIDB4MTAwMCkgIT0gMDsKICAgICAgICBlc2V0LT5tYXh0eHBrdCA9IDE7 CiAgICAgICAgZXNldC0+bWF4cnhwa3QgPSAxOwp9CgoKCgoKc3RhdGljIHZvaWQgbmV0ZGV2X2dl dF93b2wgKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYsIHN0cnVjdCBldGh0b29sX3dvbGluZm8gKndv bCkKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKm5wID0gZGV2LT5wcml2OwogICAg ICAgIHZvaWQgKmlvYWRkciA9IG5wLT5tbWlvX2FkZHI7CgogICAgICAgIGlmIChydGxfY2hpcF9p bmZvW25wLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKSB7CiAgICAgICAgICAgICAgICB1OCBj ZmczID0gKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENv bmZpZzMpKSkpOwogICAgICAgICAgICAgICAgdTggY2ZnNSA9ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDb25maWc1KSkpKTsKCiAgICAgICAgICAgICAg ICB3b2wtPnN1cHBvcnRlZCA9ICgxIDw8IDApIHwgKDEgPDwgNSkKICAgICAgICAgICAgICAgICAg ICAgICAgfCAoMSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMyk7CgogICAgICAgICAgICAgICAg d29sLT53b2xvcHRzID0gMDsKICAgICAgICAgICAgICAgIGlmIChjZmczICYgQ2ZnM19MaW5rVXAp CiAgICAgICAgICAgICAgICAgICAgICAgIHdvbC0+d29sb3B0cyB8PSAoMSA8PCAwKTsKICAgICAg ICAgICAgICAgIGlmIChjZmczICYgQ2ZnM19NYWdpYykKICAgICAgICAgICAgICAgICAgICAgICAg d29sLT53b2xvcHRzIHw9ICgxIDw8IDUpOwoKCiAgICAgICAgICAgICAgICBpZiAoY2ZnNSAmIENm ZzVfVVdGKQogICAgICAgICAgICAgICAgICAgICAgICB3b2wtPndvbG9wdHMgfD0gKDEgPDwgMSk7 CiAgICAgICAgICAgICAgICBpZiAoY2ZnNSAmIENmZzVfTVdGKQogICAgICAgICAgICAgICAgICAg ICAgICB3b2wtPndvbG9wdHMgfD0gKDEgPDwgMik7CiAgICAgICAgICAgICAgICBpZiAoY2ZnNSAm IENmZzVfQldGKQogICAgICAgICAgICAgICAgICAgICAgICB3b2wtPndvbG9wdHMgfD0gKDEgPDwg Myk7CiAgICAgICAgfQp9CgoKCgoKc3RhdGljIGludCBuZXRkZXZfc2V0X3dvbCAoc3RydWN0IG5l dF9kZXZpY2UgKmRldiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGV0 aHRvb2xfd29saW5mbyAqd29sKQp7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqbnAg PSBkZXYtPnByaXY7CiAgICAgICAgdm9pZCAqaW9hZGRyID0gbnAtPm1taW9fYWRkcjsKICAgICAg ICB1MzIgc3VwcG9ydDsKICAgICAgICB1OCBjZmczLCBjZmc1OwoKICAgICAgICBzdXBwb3J0ID0g KChydGxfY2hpcF9pbmZvW25wLT5jaGlwc2V0XS5mbGFncyAmIEhhc0xXYWtlKQogICAgICAgICAg ICAgICAgICAgPyAoKDEgPDwgMCkgfCAoMSA8PCA1KQogICAgICAgICAgICAgICAgICAgICAgfCAo MSA8PCAxKSB8ICgxIDw8IDIpIHwgKDEgPDwgMykpCiAgICAgICAgICAgICAgICAgICA6IDApOwog ICAgICAgIGlmICh3b2wtPndvbG9wdHMgJiB+c3VwcG9ydCkKICAgICAgICAgICAgICAgIHJldHVy biAtMjI7CgogICAgICAgIGNmZzMgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgodm9p ZCAqKShpb2FkZHIgKyAoQ29uZmlnMykpKSkgJiB+KENmZzNfTGlua1VwIHwgQ2ZnM19NYWdpYyk7 CiAgICAgICAgaWYgKHdvbC0+d29sb3B0cyAmICgxIDw8IDApKQogICAgICAgICAgICAgICAgY2Zn MyB8PSBDZmczX0xpbmtVcDsKICAgICAgICBpZiAod29sLT53b2xvcHRzICYgKDEgPDwgNSkpCiAg ICAgICAgICAgICAgICBjZmczIHw9IENmZzNfTWFnaWM7CiAgICAgICAgKCoodm9sYXRpbGUgdW5z aWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENmZzkzNDYpKSkgPSAoKENmZzkzNDZf VW5sb2NrKSkpOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2b2lkICop KGlvYWRkciArIChDb25maWczKSkpID0gKChjZmczKSkpOwogICAgICAgICgqKHZvbGF0aWxlIHVu c2lnbmVkIGNoYXIgKikgKCh2b2lkICopKGlvYWRkciArIChDZmc5MzQ2KSkpID0gKChDZmc5MzQ2 X0xvY2spKSk7CgogICAgICAgIGNmZzUgPSAoKih2b2xhdGlsZSB1bnNpZ25lZCBjaGFyICopICgo dm9pZCAqKShpb2FkZHIgKyAoQ29uZmlnNSkpKSkgJiB+KENmZzVfVVdGIHwgQ2ZnNV9NV0YgfCBD Zmc1X0JXRik7CgoKCiAgICAgICAgaWYgKHdvbC0+d29sb3B0cyAmICgxIDw8IDEpKQogICAgICAg ICAgICAgICAgY2ZnNSB8PSBDZmc1X1VXRjsKICAgICAgICBpZiAod29sLT53b2xvcHRzICYgKDEg PDwgMikpCiAgICAgICAgICAgICAgICBjZmc1IHw9IENmZzVfTVdGOwogICAgICAgIGlmICh3b2wt PndvbG9wdHMgJiAoMSA8PCAzKSkKICAgICAgICAgICAgICAgIGNmZzUgfD0gQ2ZnNV9CV0Y7CiAg ICAgICAgKCoodm9sYXRpbGUgdW5zaWduZWQgY2hhciAqKSAoKHZvaWQgKikoaW9hZGRyICsgKENv bmZpZzUpKSkgPSAoKGNmZzUpKSk7CgogICAgICAgIHJldHVybiAwOwp9CgoKc3RhdGljIGludCBu ZXRkZXZfZXRodG9vbF9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgdm9pZCAqdXNlcmFk ZHIpCnsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRlICpucCA9IGRldi0+cHJpdjsKICAg ICAgICB1MzIgZXRoY21kOwoKCgoKICAgICAgICBpZiAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNp emVvZiAoZXRoY21kKSkgPyBfX2NvbnN0YW50X2NvcHlfZnJvbV91c2VyKCgmZXRoY21kKSwodXNl cmFkZHIpLChzaXplb2YgKGV0aGNtZCkpKSA6IF9fZ2VuZXJpY19jb3B5X2Zyb21fdXNlcigoJmV0 aGNtZCksKHVzZXJhZGRyKSwoc2l6ZW9mIChldGhjbWQpKSkpKQogICAgICAgICAgICAgICAgcmV0 dXJuIC0xNDsKCiAgICAgICAgc3dpdGNoIChldGhjbWQpIHsKICAgICAgICBjYXNlIDB4MDAwMDAw MDE6CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0 b29sX2NtZCBlc2V0ID0geyAweDAwMDAwMDAxIH07CiAgICAgICAgICAgICAgICAgICAgICAgIGRv IHsgX19hc21fXyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgKHZvaWQpKCZucC0+ bG9jayk7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfZ2V0X2Vz ZXQgKGRldiwgJmVzZXQpOwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IGRvIHsgfSB3aGls ZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxlX18oInN0aSI6IDogOiJtZW1vcnkiKTsgfSB3aGlsZSAo MCk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX19idWlsdGluX2NvbnN0YW50X3Aoc2l6 ZW9mIChlc2V0KSkgPyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcigodXNlcmFkZHIpLCgmZXNldCks KHNpemVvZiAoZXNldCkpKSA6IF9fZ2VuZXJpY19jb3B5X3RvX3VzZXIoKHVzZXJhZGRyKSwoJmVz ZXQpLChzaXplb2YgKGVzZXQpKSkpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJl dHVybiAtMTQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgICAg ICAgfQoKCgogICAgICAgIGNhc2UgMHgwMDAwMDAwMzoKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGV0aHRvb2xfZHJ2aW5mbyBpbmZvID0geyAweDAwMDAw MDAzIH07CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby5kcml2ZXIsICI4MTM5 dG9vIik7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby52ZXJzaW9uLCAiMC45 LjE5Iik7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmNweSAoaW5mby5idXNfaW5mbywgbnAt PnBjaV9kZXYtPnNsb3RfbmFtZSk7CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX19idWls dGluX2NvbnN0YW50X3Aoc2l6ZW9mIChpbmZvKSkgPyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcigo dXNlcmFkZHIpLCgmaW5mbyksKHNpemVvZiAoaW5mbykpKSA6IF9fZ2VuZXJpY19jb3B5X3RvX3Vz ZXIoKHVzZXJhZGRyKSwoJmluZm8pLChzaXplb2YgKGluZm8pKSkpKQogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiAtMTQ7CiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVy biAwOwogICAgICAgICAgICAgICAgfQoKICAgICAgICBjYXNlIDB4MDAwMDAwMDU6CiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBldGh0b29sX3dvbGluZm8g d29sID0geyAweDAwMDAwMDA1IH07CiAgICAgICAgICAgICAgICAgICAgICAgIGRvIHsgX19hc21f XyBfX3ZvbGF0aWxlX18oImNsaSI6IDogOiJtZW1vcnkiKTsgKHZvaWQpKCZucC0+bG9jayk7IH0g d2hpbGUgKDApOwogICAgICAgICAgICAgICAgICAgICAgICBuZXRkZXZfZ2V0X3dvbCAoZGV2LCAm d29sKTsKICAgICAgICAgICAgICAgICAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNt X18gX192b2xhdGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwogICAgICAg ICAgICAgICAgICAgICAgICBpZiAoKF9fYnVpbHRpbl9jb25zdGFudF9wKHNpemVvZiAod29sKSkg PyBfX2NvbnN0YW50X2NvcHlfdG9fdXNlcigodXNlcmFkZHIpLCgmd29sKSwoc2l6ZW9mICh3b2wp KSkgOiBfX2dlbmVyaWNfY29weV90b191c2VyKCh1c2VyYWRkciksKCZ3b2wpLChzaXplb2YgKHdv bCkpKSkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xNDsKICAgICAg ICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIGNh c2UgMHgwMDAwMDAwNjoKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IGV0aHRvb2xfd29saW5mbyB3b2w7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBy YzsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfX2J1aWx0aW5fY29uc3RhbnRfcChzaXpl b2YgKHdvbCkpID8gX19jb25zdGFudF9jb3B5X2Zyb21fdXNlcigoJndvbCksKHVzZXJhZGRyKSwo c2l6ZW9mICh3b2wpKSkgOiBfX2dlbmVyaWNfY29weV9mcm9tX3VzZXIoKCZ3b2wpLCh1c2VyYWRk ciksKHNpemVvZiAod29sKSkpKSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1 cm4gLTE0OwogICAgICAgICAgICAgICAgICAgICAgICBkbyB7IF9fYXNtX18gX192b2xhdGlsZV9f KCJjbGkiOiA6IDoibWVtb3J5Iik7ICh2b2lkKSgmbnAtPmxvY2spOyB9IHdoaWxlICgwKTsKICAg ICAgICAgICAgICAgICAgICAgICAgcmMgPSBuZXRkZXZfc2V0X3dvbCAoZGV2LCAmd29sKTsKICAg ICAgICAgICAgICAgICAgICAgICAgZG8geyBkbyB7IH0gd2hpbGUoMCk7IF9fYXNtX18gX192b2xh dGlsZV9fKCJzdGkiOiA6IDoibWVtb3J5Iik7IH0gd2hpbGUgKDApOwogICAgICAgICAgICAgICAg ICAgICAgICByZXR1cm4gcmM7CiAgICAgICAgICAgICAgICB9CgogICAgICAgIGRlZmF1bHQ6CiAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICB9CgogICAgICAgIHJldHVybiAtOTU7Cn0KCgpz dGF0aWMgaW50IG5ldGRldl9pb2N0bCAoc3RydWN0IG5ldF9kZXZpY2UgKmRldiwgc3RydWN0IGlm cmVxICpycSwgaW50IGNtZCkKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0g ZGV2LT5wcml2OwogICAgICAgIHN0cnVjdCBtaWlfaW9jdGxfZGF0YSAqZGF0YSA9IChzdHJ1Y3Qg bWlpX2lvY3RsX2RhdGEgKikmcnEtPmlmcl9pZnJ1LmlmcnVfZGF0YTsKICAgICAgICBpbnQgcmMg PSAwOwogICAgICAgIGludCBwaHkgPSB0cC0+cGh5c1swXSAmIDB4M2Y7CgogICAgICAgICAgICAg ICAgICAgICAgICAgICA7CgogICAgICAgIGlmIChjbWQgIT0gMHg4OTQ2KSB7CgogICAgICAgICAg ICAgICAgZGF0YS0+cGh5X2lkICY9IDB4MWY7CiAgICAgICAgICAgICAgICBkYXRhLT5yZWdfbnVt ICY9IDB4MWY7CiAgICAgICAgfQoKICAgICAgICBzd2l0Y2ggKGNtZCkgewogICAgICAgIGNhc2Ug MHg4OTQ2OgogICAgICAgICAgICAgICAgcmV0dXJuIG5ldGRldl9ldGh0b29sX2lvY3RsKGRldiwg KHZvaWQgKikgcnEtPmlmcl9pZnJ1LmlmcnVfZGF0YSk7CgogICAgICAgIGNhc2UgMHg4OTQ3Ogog ICAgICAgIGNhc2UgMHg4OUYwOgogICAgICAgICAgICAgICAgZGF0YS0+cGh5X2lkID0gcGh5OwoK CiAgICAgICAgY2FzZSAweDg5NDg6CiAgICAgICAgY2FzZSAweDg5RjAgKzE6CiAgICAgICAgICAg ICAgICBkYXRhLT52YWxfb3V0ID0gbWRpb19yZWFkIChkZXYsIGRhdGEtPnBoeV9pZCwgZGF0YS0+ cmVnX251bSk7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgY2FzZSAweDg5NDk6CiAg ICAgICAgY2FzZSAweDg5RjAgKzI6CiAgICAgICAgICAgICAgICBpZiAoIWNhcGFibGUgKDEyKSkg ewogICAgICAgICAgICAgICAgICAgICAgICByYyA9IC0xOwogICAgICAgICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBpZiAoZGF0YS0+cGh5 X2lkID09IHBoeSkgewogICAgICAgICAgICAgICAgICAgICAgICB1MTYgdmFsdWUgPSBkYXRhLT52 YWxfaW47CiAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAoZGF0YS0+cmVnX251bSkgewog ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIDA6CgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHRwLT5tZWRpYWxvY2sgPSAodmFsdWUgJiAweDkwMDApID8gMCA6IDE7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRwLT5tZWRpYWxvY2spCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB0cC0+ZnVsbF9kdXBsZXggPSAodmFsdWUgJiAweDAx MDApID8gMSA6IDA7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICAgICAgICAgICAgICAgIGNhc2UgNDogYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIG1kaW9fd3JpdGUoZGV2LCBkYXRh LT5waHlfaWQsIGRhdGEtPnJlZ19udW0sIGRhdGEtPnZhbF9pbik7CiAgICAgICAgICAgICAgICBi cmVhazsKCiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgIHJjID0gLTk1OwogICAgICAg ICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICA7CiAgICAgICAgcmV0dXJuIHJjOwp9CgoKc3RhdGljIHN0cnVjdCBuZXRf ZGV2aWNlX3N0YXRzICpydGw4MTM5X2dldF9zdGF0cyAoc3RydWN0IG5ldF9kZXZpY2UgKmRldikK ewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRwID0gZGV2LT5wcml2OwogICAgICAg IHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAgICAgdW5zaWduZWQgbG9uZyBmbGFn czsKCiAgICAgICAgICAgICAgICAgICAgICAgICAgIDsKCiAgICAgICAgaWYgKG5ldGlmX3J1bm5p bmcoZGV2KSkgewogICAgICAgICAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVz aGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRw LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICB0cC0+c3RhdHMucnhfbWlzc2Vk X2Vycm9ycyArPSAoKHVuc2lnbmVkIGxvbmcpICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAo KHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpKSk7CiAgICAgICAgICAgICAgICAoKih2b2xh dGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkpKSA9ICgo MCkpKTsKICAgICAgICAgICAgICAgIGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9s YXRpbGVfXygicHVzaGwgJTAgOyBwb3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7 IH0gd2hpbGUgKDApOwogICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwogICAg ICAgIHJldHVybiAmdHAtPnN0YXRzOwp9CgoKCgpzdGF0aWMgdW5zaWduZWQgY29uc3QgZXRoZXJu ZXRfcG9seW5vbWlhbCA9IDB4MDRjMTFkYjdVOwpzdGF0aWMgaW5saW5lIHUzMiBldGhlcl9jcmMg KGludCBsZW5ndGgsIHVuc2lnbmVkIGNoYXIgKmRhdGEpCnsKICAgICAgICBpbnQgY3JjID0gLTE7 CgogICAgICAgICAgICAgICAgICAgICAgICAgICA7CgogICAgICAgIHdoaWxlICgtLWxlbmd0aCA+ PSAwKSB7CiAgICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyIGN1cnJlbnRfb2N0ZXQgPSAqZGF0 YSsrOwogICAgICAgICAgICAgICAgaW50IGJpdDsKICAgICAgICAgICAgICAgIGZvciAoYml0ID0g MDsgYml0IDwgODsgYml0KyssIGN1cnJlbnRfb2N0ZXQgPj49IDEpCiAgICAgICAgICAgICAgICAg ICAgICAgIGNyYyA9IChjcmMgPDwgMSkgXiAoKGNyYyA8IDApIF4gKGN1cnJlbnRfb2N0ZXQgJiAx KSA/CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXRoZXJuZXRfcG9seW5vbWlhbCA6IDAp OwogICAgICAgIH0KCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IDsKICAgICAgICByZXR1cm4gY3JjOwp9CgoKc3RhdGljIHZvaWQgX19zZXRfcnhfbW9kZSAoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikKewogICAgICAgIHN0cnVjdCBydGw4MTM5X3ByaXZhdGUgKnRw ID0gZGV2LT5wcml2OwogICAgICAgIHZvaWQgKmlvYWRkciA9IHRwLT5tbWlvX2FkZHI7CiAgICAg ICAgdTMyIG1jX2ZpbHRlclsyXTsKICAgICAgICBpbnQgaSwgcnhfbW9kZTsKICAgICAgICB1MzIg dG1wOwoKICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOwoKCgogICAgICAg IGlmIChkZXYtPmZsYWdzICYgMHgxMDApIHsKCiAgICAgICAgICAgICAgICBwcmludGsgKCI8NT4i ICIlczogUHJvbWlzY3VvdXMgbW9kZSBlbmFibGVkLlxuIiwKICAgICAgICAgICAgICAgICAgICAg ICAgZGV2LT5uYW1lKTsKICAgICAgICAgICAgICAgIHJ4X21vZGUgPQogICAgICAgICAgICAgICAg ICAgIEFjY2VwdEJyb2FkY2FzdCB8IEFjY2VwdE11bHRpY2FzdCB8IEFjY2VwdE15UGh5cyB8CiAg ICAgICAgICAgICAgICAgICAgQWNjZXB0QWxsUGh5czsKICAgICAgICAgICAgICAgIG1jX2ZpbHRl clsxXSA9IG1jX2ZpbHRlclswXSA9IDB4ZmZmZmZmZmY7CiAgICAgICAgfSBlbHNlIGlmICgoZGV2 LT5tY19jb3VudCA+IG11bHRpY2FzdF9maWx0ZXJfbGltaXQpCiAgICAgICAgICAgICAgICAgICB8 fCAoZGV2LT5mbGFncyAmIDB4MjAwKSkgewoKICAgICAgICAgICAgICAgIHJ4X21vZGUgPSBBY2Nl cHRCcm9hZGNhc3QgfCBBY2NlcHRNdWx0aWNhc3QgfCBBY2NlcHRNeVBoeXM7CiAgICAgICAgICAg ICAgICBtY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAweGZmZmZmZmZmOwogICAgICAgIH0g ZWxzZSB7CiAgICAgICAgICAgICAgICBzdHJ1Y3QgZGV2X21jX2xpc3QgKm1jbGlzdDsKICAgICAg ICAgICAgICAgIHJ4X21vZGUgPSBBY2NlcHRCcm9hZGNhc3QgfCBBY2NlcHRNeVBoeXM7CiAgICAg ICAgICAgICAgICBtY19maWx0ZXJbMV0gPSBtY19maWx0ZXJbMF0gPSAwOwogICAgICAgICAgICAg ICAgZm9yIChpID0gMCwgbWNsaXN0ID0gZGV2LT5tY19saXN0OyBtY2xpc3QgJiYgaSA8IGRldi0+ bWNfY291bnQ7CiAgICAgICAgICAgICAgICAgICAgIGkrKywgbWNsaXN0ID0gbWNsaXN0LT5uZXh0 KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIGludCBiaXRfbnIgPSBldGhlcl9jcmMoNiwgbWNs aXN0LT5kbWlfYWRkcikgPj4gMjY7CgogICAgICAgICAgICAgICAgICAgICAgICBtY19maWx0ZXJb Yml0X25yID4+IDVdIHw9ICgoX191MzIpKDEgPDwgKGJpdF9uciAmIDMxKSkpOwogICAgICAgICAg ICAgICAgICAgICAgICByeF9tb2RlIHw9IEFjY2VwdE11bHRpY2FzdDsKICAgICAgICAgICAgICAg IH0KICAgICAgICB9CgoKICAgICAgICB0bXAgPSBydGw4MTM5X3J4X2NvbmZpZyB8IHJ4X21vZGU7 CiAgICAgICAgaWYgKHRwLT5yeF9jb25maWcgIT0gdG1wKSB7CiAgICAgICAgICAgICAgICBkbyB7 ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4Q29uZmln KSkpID0gKCh0bXApKSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9h ZGRyICsgKFJ4Q29uZmlnKSkpKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgICAgICAgICB0cC0+cnhf Y29uZmlnID0gdG1wOwogICAgICAgIH0KICAgICAgICBkbyB7ICgqKHZvbGF0aWxlIHVuc2lnbmVk IGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BUjAgKyAwKSkpID0gKChtY19maWx0ZXJbMF0p KSk7ICgqKHZvbGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKE1BUjAg KyAwKSkpKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgZG8geyAoKih2b2xhdGlsZSB1bnNpZ25lZCBp bnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQVIwICsgNCkpKSA9ICgobWNfZmlsdGVyWzFdKSkp OyAoKih2b2xhdGlsZSB1bnNpZ25lZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChNQVIwICsg NCkpKSk7IH0gd2hpbGUgKDApOwoKCiAgICAgICAgICAgICAgICAgICAgICAgICAgOwp9CgpzdGF0 aWMgdm9pZCBydGw4MTM5X3NldF9yeF9tb2RlIChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQp7CiAg ICAgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKICAgICAgICBzdHJ1Y3QgcnRsODEzOV9wcml2YXRl ICp0cCA9IGRldi0+cHJpdjsKCiAgICAgICAgZG8geyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVz aGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxhZ3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRw LT5sb2NrKTsgfSB3aGlsZSAoMCk7CiAgICAgICAgX19zZXRfcnhfbW9kZShkZXYpOwogICAgICAg IGRvIHsgZG8geyB9IHdoaWxlKDApOyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGwgJTAgOyBw b3BmbCI6IDoiZyIgKGZsYWdzKToibWVtb3J5IiwgImNjIik7IH0gd2hpbGUgKDApOwp9CgoKCnN0 YXRpYyBpbnQgcnRsODEzOV9zdXNwZW5kIChzdHJ1Y3QgcGNpX2RldiAqcGRldiwgdTMyIHN0YXRl KQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9IHBjaV9nZXRfZHJ2ZGF0YSAocGRl dik7CiAgICAgICAgc3RydWN0IHJ0bDgxMzlfcHJpdmF0ZSAqdHAgPSBkZXYtPnByaXY7CiAgICAg ICAgdm9pZCAqaW9hZGRyID0gdHAtPm1taW9fYWRkcjsKICAgICAgICB1bnNpZ25lZCBsb25nIGZs YWdzOwoKICAgICAgICBpZiAoIW5ldGlmX3J1bm5pbmcgKGRldikpCiAgICAgICAgICAgICAgICBy ZXR1cm4gMDsKCiAgICAgICAgbmV0aWZfZGV2aWNlX2RldGFjaCAoZGV2KTsKCiAgICAgICAgZG8g eyBfX2FzbV9fIF9fdm9sYXRpbGVfXygicHVzaGZsIDsgcG9wbCAlMCA7IGNsaSI6Ij1nIiAoZmxh Z3MpOiA6Im1lbW9yeSIpOyAodm9pZCkoJnRwLT5sb2NrKTsgfSB3aGlsZSAoMCk7CgoKICAgICAg ICAoKih2b2xhdGlsZSB1bnNpZ25lZCBzaG9ydCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKEludHJN YXNrKSkpID0gKCgwKSkpOwogICAgICAgICgqKHZvbGF0aWxlIHVuc2lnbmVkIGNoYXIgKikgKCh2 b2lkICopKGlvYWRkciArIChDaGlwQ21kKSkpID0gKCgwKSkpOwoKCiAgICAgICAgdHAtPnN0YXRz LnJ4X21pc3NlZF9lcnJvcnMgKz0gKCh1bnNpZ25lZCBsb25nKSAoKih2b2xhdGlsZSB1bnNpZ25l ZCBpbnQgKikgKCh2b2lkICopKGlvYWRkciArIChSeE1pc3NlZCkpKSkpOwogICAgICAgICgqKHZv bGF0aWxlIHVuc2lnbmVkIGludCAqKSAoKHZvaWQgKikoaW9hZGRyICsgKFJ4TWlzc2VkKSkpID0g KCgwKSkpOwoKICAgICAgICBkbyB7IGRvIHsgfSB3aGlsZSgwKTsgX19hc21fXyBfX3ZvbGF0aWxl X18oInB1c2hsICUwIDsgcG9wZmwiOiA6ImciIChmbGFncyk6Im1lbW9yeSIsICJjYyIpOyB9IHdo aWxlICgwKTsKICAgICAgICByZXR1cm4gMDsKfQoKCnN0YXRpYyBpbnQgcnRsODEzOV9yZXN1bWUg KHN0cnVjdCBwY2lfZGV2ICpwZGV2KQp7CiAgICAgICAgc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9 IHBjaV9nZXRfZHJ2ZGF0YSAocGRldik7CgogICAgICAgIGlmICghbmV0aWZfcnVubmluZyAoZGV2 KSkKICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgIG5ldGlmX2RldmljZV9hdHRhY2gg KGRldik7CiAgICAgICAgcnRsODEzOV9od19zdGFydCAoZGV2KTsKICAgICAgICByZXR1cm4gMDsK fQoKCgoKc3RhdGljIHN0cnVjdCBwY2lfZHJpdmVyIHJ0bDgxMzlfcGNpX2RyaXZlciA9IHsKICAg ICAgICBuYW1lOiAiODEzOXRvbyIsCiAgICAgICAgaWRfdGFibGU6IHJ0bDgxMzlfcGNpX3RibCwK ICAgICAgICBwcm9iZTogcnRsODEzOV9pbml0X29uZSwKICAgICAgICByZW1vdmU6IHJ0bDgxMzlf cmVtb3ZlX29uZSwKCiAgICAgICAgc3VzcGVuZDogcnRsODEzOV9zdXNwZW5kLAogICAgICAgIHJl c3VtZTogcnRsODEzOV9yZXN1bWUsCgp9OwoKCnN0YXRpYyBpbnQgX19hdHRyaWJ1dGVfXyAoKF9f c2VjdGlvbl9fICgiLnRleHQuaW5pdCIpKSkgcnRsODEzOV9pbml0X21vZHVsZSAodm9pZCkKewoK CgoKCgoKICAgICAgICByZXR1cm4gcGNpX21vZHVsZV9pbml0ICgmcnRsODEzOV9wY2lfZHJpdmVy KTsKfQoKCnN0YXRpYyB2b2lkIF9fYXR0cmlidXRlX18gKCh1bnVzZWQsIF9fc2VjdGlvbl9fKCIu dGV4dC5leGl0IikpKSBydGw4MTM5X2NsZWFudXBfbW9kdWxlICh2b2lkKQp7CiAgICAgICAgcGNp X3VucmVnaXN0ZXJfZHJpdmVyICgmcnRsODEzOV9wY2lfZHJpdmVyKTsKfQoKCnN0YXRpYyBpbml0 Y2FsbF90IF9faW5pdGNhbGxfcnRsODEzOV9pbml0X21vZHVsZSBfX2F0dHJpYnV0ZV9fICgodW51 c2VkLF9fc2VjdGlvbl9fICgiLmluaXRjYWxsLmluaXQiKSkpID0gcnRsODEzOV9pbml0X21vZHVs ZTs7CnN0YXRpYyBleGl0Y2FsbF90IF9fZXhpdGNhbGxfcnRsODEzOV9jbGVhbnVwX21vZHVsZSBf X2F0dHJpYnV0ZV9fICgodW51c2VkLF9fc2VjdGlvbl9fICgiLmV4aXRjYWxsLmV4aXQiKSkpID0g cnRsODEzOV9jbGVhbnVwX21vZHVsZTs7Cg==