From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 760 invoked by alias); 6 May 2003 13:56:01 -0000 Mailing-List: contact gcc-prs-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Archive: List-Post: List-Help: Sender: gcc-prs-owner@gcc.gnu.org Received: (qmail 733 invoked by uid 71); 6 May 2003 13:56:00 -0000 Resent-Date: 6 May 2003 13:56:00 -0000 Resent-Message-ID: <20030506135600.732.qmail@sources.redhat.com> Resent-From: gcc-gnats@gcc.gnu.org (GNATS Filer) Resent-Cc: gcc-prs@gcc.gnu.org, gcc-bugs@gcc.gnu.org Resent-Reply-To: gcc-gnats@gcc.gnu.org, alnsn@yandex.ru Received: (qmail 28106 invoked by uid 48); 6 May 2003 13:54:00 -0000 Message-Id: <20030506135400.28105.qmail@sources.redhat.com> Date: Tue, 06 May 2003 13:56:00 -0000 From: alnsn@yandex.ru Reply-To: alnsn@yandex.ru To: gcc-gnats@gcc.gnu.org X-Send-Pr-Version: gnatsweb-2.9.3 (1.1.1.1.2.31) Subject: c++/10642: Internal compiler error X-SW-Source: 2003-05/txt/msg00376.txt.bz2 List-Id: >Number: 10642 >Category: c++ >Synopsis: Internal compiler error >Confidential: no >Severity: serious >Priority: low >Responsible: unassigned >State: open >Class: sw-bug >Submitter-Id: net >Arrival-Date: Tue May 06 13:56:00 UTC 2003 >Closed-Date: >Last-Modified: >Originator: alnsn@yandex.ru >Release: g++ 3.2 >Organization: >Environment: Linux RedHat 7.3 >Description: >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: >Unformatted: ----gnatsweb-attachment---- Content-Type: application/octet-stream; name="io_any_preprocessed.cpp" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="io_any_preprocessed.cpp" IyAxICJpb19hbnkuY3BwIgojIDEgIjxidWlsdC1pbj4iCiMgMSAiPGNvbW1hbmQgbGluZT4iCiMg MSAiaW9fYW55LmNwcCIKIyAxICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o cHAiIDEKCgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQu aHBwIiAxCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBw IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy5ocHAiIDEKIyAyNiAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9jb25maWcvdXNlci5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvY29uZmlnLmhwcCIgMgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9j b25maWcvc2VsZWN0X2NvbXBpbGVyX2NvbmZpZy5ocHAiIDEKIyAzMiAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvY29uZmlnLmhwcCIgMgojIDQwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9jb25maWcuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy9zZWxl Y3Rfc3RkbGliX2NvbmZpZy5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv Y29uZmlnL3NlbGVjdF9zdGRsaWJfY29uZmlnLmhwcCIKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi91dGlsaXR5IiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvdXRp bGl0eSIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251 L2JpdHMvYysrY29uZmlnLmgiIDEgMwojIDM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9p Njg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDEgMwojIDM5 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL29zX2Rl ZmluZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAxIDMKIyAyOTEgIi91c3Iv aW5jbHVkZS9mZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL3N5cy9jZGVmcy5oIiAxIDMK IyAyOTIgIi91c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyAzMjAgIi91c3IvaW5jbHVkZS9m ZWF0dXJlcy5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2dudS9zdHVicy5oIiAxIDMKIyAzMjEgIi91 c3IvaW5jbHVkZS9mZWF0dXJlcy5oIiAyIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9vc19kZWZpbmVzLmgiIDIgMwojIDM1ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2NvbmZpZy5oIiAy IDMKIyA2NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvdXRpbGl0eSIgMiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDEgMwojIDc0ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9yZWxvcHMuaCIgMwpuYW1lc3BhY2Ugc3Rk CnsKICBuYW1lc3BhY2UgcmVsX29wcwogIHsKIyA5MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wg b3BlcmF0b3IhPShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIHsKICByZXR1cm4gIShf X3ggPT0gX195KTsKfQojIDEwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf cmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+KGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgewogIHJldHVybiBfX3kgPCBfX3g7Cn0KIyAx MTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3JlbG9wcy5oIiAzCnRlbXBs YXRlIDxjbGFzcyBfVHA+CmlubGluZSBib29sIG9wZXJhdG9yPD0oY29uc3QgX1RwJiBfX3gsIGNv bnN0IF9UcCYgX195KSB7CiAgcmV0dXJuICEoX195IDwgX194KTsKfQojIDEyOSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmVsb3BzLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9U cD4KaW5saW5lIGJvb2wgb3BlcmF0b3I+PShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kp IHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9CgogIH0KfQojIDY3ICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi91dGlsaXR5IiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9wYWlyLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9wYWlyLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xh c3MgX1QyPgpzdHJ1Y3QgcGFpciB7CiAgdHlwZWRlZiBfVDEgZmlyc3RfdHlwZTsKICB0eXBlZGVm IF9UMiBzZWNvbmRfdHlwZTsKCiAgX1QxIGZpcnN0OwogIF9UMiBzZWNvbmQ7CgoKCgogIHBhaXIo KSA6IGZpcnN0KCksIHNlY29uZCgpIHt9CgoKCgogIHBhaXIoY29uc3QgX1QxJiBfX2EsIGNvbnN0 IF9UMiYgX19iKSA6IGZpcnN0KF9fYSksIHNlY29uZChfX2IpIHt9CgoKICB0ZW1wbGF0ZSA8Y2xh c3MgX1UxLCBjbGFzcyBfVTI+CiAgcGFpcihjb25zdCBwYWlyPF9VMSwgX1UyPiYgX19wKSA6IGZp cnN0KF9fcC5maXJzdCksIHNlY29uZChfX3Auc2Vjb25kKSB7fQp9OwoKCnRlbXBsYXRlIDxjbGFz cyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBwYWlyPF9UMSwg X1QyPiYgX194LCBjb25zdCBwYWlyPF9UMSwgX1QyPiYgX195KQp7CiAgcmV0dXJuIF9feC5maXJz dCA9PSBfX3kuZmlyc3QgJiYgX194LnNlY29uZCA9PSBfX3kuc2Vjb25kOwp9CgoKdGVtcGxhdGUg PGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcjwoY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkKewogIHJldHVybiBfX3gu Zmlyc3QgPCBfX3kuZmlyc3QgfHwKICAgICAgICAgKCEoX195LmZpcnN0IDwgX194LmZpcnN0KSAm JiBfX3guc2Vjb25kIDwgX195LnNlY29uZCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFz cyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwg Y29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9CgoK dGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgppbmxpbmUgYm9vbCBvcGVyYXRvcj4oY29u c3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJl dHVybiBfX3kgPCBfX3g7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGlu ZSBib29sIG9wZXJhdG9yPD0oY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feCwgY29uc3QgcGFpcjxf VDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feSA8IF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xh c3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3QgcGFpcjxfVDEs IF9UMj4mIF9feCwgY29uc3QgcGFpcjxfVDEsIF9UMj4mIF9feSkgewogIHJldHVybiAhKF9feCA8 IF9feSk7Cn0KIyAxNDAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3BhaXIu aCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CgoKaW5saW5lIHBhaXI8X1QxLCBf VDI+IG1ha2VfcGFpcihfVDEgX194LCBfVDIgX195KQoKCgp7CiAgcmV0dXJuIHBhaXI8X1QxLCBf VDI+KF9feCwgX195KTsKfQoKfQojIDY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi91dGls aXR5IiAyIDMKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnL3NlbGVjdF9z dGRsaWJfY29uZmlnLmhwcCIgMgojIDQxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25m aWcuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmlnL3N0ZGxp Yi9saWJzdGRjcHAzLmhwcCIgMQojIDQ1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25m aWcuaHBwIiAyCgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy9zZWxl Y3RfcGxhdGZvcm1fY29uZmlnLmhwcCIgMQojIDUwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9jb25maWcuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29uZmln L3BsYXRmb3JtL2xpbnV4LmhwcCIgMQojIDEzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9j b25maWcvcGxhdGZvcm0vbGludXguaHBwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2NzdGRsaWIiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAz CgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RkZGVmIiAxIDMKIyA0NyAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGRlZiIgMwoKIyAxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAxNDcg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3Rk ZGVmLmgiIDMKdHlwZWRlZiBpbnQgcHRyZGlmZl90OwojIDIwMSAiL3Vzci9sb2NhbC9saWIvZ2Nj LWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMwp0eXBlZGVmIHVu c2lnbmVkIGludCBzaXplX3Q7CiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRk ZWYiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjpwdHJkaWZmX3Q7CiAgdXNpbmcgOjpz aXplX3Q7Cn0KIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGxpYiIgMiAzCgoj IDEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMSAzCiMgMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIu aCIgMwojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKZXh0 ZXJuICJDIiB7CgoKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdGZsYWdzLmgiIDEgMwoj IDQzICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dh aXRzdGF0dXMuaCIgMSAzCiMgNjMgIi91c3IvaW5jbHVkZS9iaXRzL3dhaXRzdGF0dXMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9lbmRpYW4uaCIgMSAzCiMgMzcgIi91c3IvaW5jbHVkZS9lbmRpYW4u aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2VuZGlhbi5oIiAxIDMKIyAzOCAiL3Vzci9pbmNs dWRlL2VuZGlhbi5oIiAyIDMKIyA2NCAiL3Vzci9pbmNsdWRlL2JpdHMvd2FpdHN0YXR1cy5oIiAy IDMKCnVuaW9uIHdhaXQKICB7CiAgICBpbnQgd19zdGF0dXM7CiAgICBzdHJ1Y3QKICAgICAgewoK ICAgICAgICB1bnNpZ25lZCBpbnQgX193X3Rlcm1zaWc6NzsKICAgICAgICB1bnNpZ25lZCBpbnQg X193X2NvcmVkdW1wOjE7CiAgICAgICAgdW5zaWduZWQgaW50IF9fd19yZXRjb2RlOjg7CiAgICAg ICAgdW5zaWduZWQgaW50OjE2OwoKCgoKCgoKICAgICAgfSBfX3dhaXRfdGVybWluYXRlZDsKICAg IHN0cnVjdAogICAgICB7CgogICAgICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHZhbDo4OwogICAg ICAgIHVuc2lnbmVkIGludCBfX3dfc3RvcHNpZzo4OwogICAgICAgIHVuc2lnbmVkIGludDoxNjsK CgoKCgoKICAgICAgfSBfX3dhaXRfc3RvcHBlZDsKICB9OwojIDQ0ICIvdXNyL2luY2x1ZGUvc3Rk bGliLmgiIDIgMwojIDk0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKdHlwZWRlZiBzdHJ1Y3QK ICB7CiAgICBpbnQgcXVvdDsKICAgIGludCByZW07CiAgfSBkaXZfdDsKCgoKdHlwZWRlZiBzdHJ1 Y3QKICB7CiAgICBsb25nIGludCBxdW90OwogICAgbG9uZyBpbnQgcmVtOwogIH0gbGRpdl90OwoK CgoKCiB0eXBlZGVmIHN0cnVjdAogIHsKICAgIGxvbmcgbG9uZyBpbnQgcXVvdDsKICAgIGxvbmcg bG9uZyBpbnQgcmVtOwogIH0gbGxkaXZfdDsKIyAxMzMgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIg MwpleHRlcm4gc2l6ZV90IF9fY3R5cGVfZ2V0X21iX2N1cl9tYXggKHZvaWQpIDsKCgoKZXh0ZXJu IGRvdWJsZSBhdG9mIChjb25zdCBjaGFyICpfX25wdHIpIDsKCmV4dGVybiBpbnQgYXRvaSAoY29u c3QgY2hhciAqX19ucHRyKSA7CgpleHRlcm4gbG9uZyBpbnQgYXRvbCAoY29uc3QgY2hhciAqX19u cHRyKSA7CgoKCiBleHRlcm4gbG9uZyBsb25nIGludCBhdG9sbCAoY29uc3QgY2hhciAqX19ucHRy KQogICAgIDsKCgoKZXh0ZXJuIGRvdWJsZSBzdHJ0b2QgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyKSA7CgoKCmV4dGVybiBmbG9hdCBz dHJ0b2YgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiog X19lbmRwdHIpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBzdHJ0b2xkIChjb25zdCBjaGFyICogX19u cHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0cikgOwoKCgpl eHRlcm4gbG9uZyBpbnQgc3RydG9sIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgpleHRlcm4gdW5zaWdu ZWQgbG9uZyBpbnQgc3RydG91bCAoY29uc3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoj IDE4NiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCgpleHRlcm4gbG9uZyBsb25nIGludCBzdHJ0 b2xsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKSA7CgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgc3RydG91bGwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlKQogICAgIDsK IyAyMTEgIi91c3IvaW5jbHVkZS9zdGRsaWIuaCIgMwojIDEgIi91c3IvaW5jbHVkZS94bG9jYWxl LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUveGxvY2FsZS5oIiAzCnR5cGVkZWYgc3RydWN0IF9f bG9jYWxlX3N0cnVjdAp7CgogIHN0cnVjdCBsb2NhbGVfZGF0YSAqX19sb2NhbGVzWzEzXTsKCgog IGNvbnN0IHVuc2lnbmVkIHNob3J0IGludCAqX19jdHlwZV9iOwogIGNvbnN0IGludCAqX19jdHlw ZV90b2xvd2VyOwogIGNvbnN0IGludCAqX19jdHlwZV90b3VwcGVyOwp9ICpfX2xvY2FsZV90Owoj IDIxMiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAyIDMKCgoKZXh0ZXJuIGxvbmcgaW50IF9fc3Ry dG9sX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqIF9fZW5kcHRyLCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg X19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fc3RydG91bF9s IChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNoYXIgKiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fYmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKCmV4dGVybiBsb25nIGxvbmcgaW50 IF9fc3RydG9sbF9sIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwgaW50IF9fYmFzZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCgpleHRlcm4gdW5zaWduZWQg bG9uZyBsb25nIGludCBfX3N0cnRvdWxsX2wgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBfX2xv Y2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX19zdHJ0b2RfbCAoY29uc3QgY2hh ciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBmbG9hdCBfX3N0cnRvZl9sIChjb25zdCBj aGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwg X19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIF9fc3RydG9sZF9sIChjb25z dCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiog X19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv YykgOwoKCgoKCgpleHRlcm4gZG91YmxlIF9fc3RydG9kX2ludGVybmFsIChjb25zdCBjaGFyICog X19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRy LCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBmbG9hdCBfX3N0cnRvZl9pbnRlcm5hbCAoY29u c3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoq IF9fZW5kcHRyLCBpbnQgX19ncm91cCkKICAgICA7CmV4dGVybiBsb25nIGRvdWJsZSBfX3N0cnRv bGRfaW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBfX2dyb3VwKSA7CgpleHRlcm4gbG9uZyBpbnQgX19zdHJ0b2xf aW50ZXJuYWwgKGNvbnN0IGNoYXIgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY2hhciAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgX19iYXNlLCBpbnQgX19ncm91cCkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBp bnQgX19zdHJ0b3VsX2ludGVybmFsIChjb25zdCBjaGFyICogX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBpbnQgX19n cm91cCkgOwoKCgoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fc3RydG9sbF9pbnRlcm5hbCAoY29u c3QgY2hhciAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBs b25nIGludCBfX3N0cnRvdWxsX2ludGVybmFsIChjb25zdCBjaGFyICoKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9fZW5kcHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19i YXNlLCBpbnQgX19ncm91cCkKICAgICA7CiMgMzg0ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMK ZXh0ZXJuIGNoYXIgKmw2NGEgKGxvbmcgaW50IF9fbikgOwoKCmV4dGVybiBsb25nIGludCBhNjRs IChjb25zdCBjaGFyICpfX3MpIDsKCgojIDEgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMSAz CiMgMjggIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vz ci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9iaXRzL3R5cGVz LmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9p bmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAz CgoKdHlwZWRlZiB1bnNpZ25lZCBjaGFyIF9fdV9jaGFyOwp0eXBlZGVmIHVuc2lnbmVkIHNob3J0 IF9fdV9zaG9ydDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgX191X2ludDsKdHlwZWRlZiB1bnNpZ25l ZCBsb25nIF9fdV9sb25nOwoKCgoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBsb25nIGludCBfX3Zh bFsyXTsKICB9IF9fcXVhZF90Owp0eXBlZGVmIHN0cnVjdAogIHsKICAgIF9fdV9sb25nIF9fdmFs WzJdOwogIH0gX191X3F1YWRfdDsKCnR5cGVkZWYgc2lnbmVkIGNoYXIgX19pbnQ4X3Q7CnR5cGVk ZWYgdW5zaWduZWQgY2hhciBfX3VpbnQ4X3Q7CnR5cGVkZWYgc2lnbmVkIHNob3J0IGludCBfX2lu dDE2X3Q7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IF9fdWludDE2X3Q7CnR5cGVkZWYgc2ln bmVkIGludCBfX2ludDMyX3Q7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9fdWludDMyX3Q7CgoKCgp0 eXBlZGVmIF9fcXVhZF90ICpfX3FhZGRyX3Q7Cgp0eXBlZGVmIF9fdV9xdWFkX3QgX19kZXZfdDsK dHlwZWRlZiBfX3VfaW50IF9fdWlkX3Q7CnR5cGVkZWYgX191X2ludCBfX2dpZF90Owp0eXBlZGVm IF9fdV9sb25nIF9faW5vX3Q7CnR5cGVkZWYgX191X2ludCBfX21vZGVfdDsKdHlwZWRlZiBfX3Vf aW50IF9fbmxpbmtfdDsKdHlwZWRlZiBsb25nIGludCBfX29mZl90Owp0eXBlZGVmIF9fcXVhZF90 IF9fbG9mZl90Owp0eXBlZGVmIGludCBfX3BpZF90Owp0eXBlZGVmIGludCBfX3NzaXplX3Q7CnR5 cGVkZWYgX191X2xvbmcgX19ybGltX3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX3JsaW02NF90Owp0 eXBlZGVmIF9fdV9pbnQgX19pZF90OwoKdHlwZWRlZiBzdHJ1Y3QKICB7CiAgICBpbnQgX192YWxb Ml07CiAgfSBfX2ZzaWRfdDsKCgp0eXBlZGVmIGludCBfX2RhZGRyX3Q7CnR5cGVkZWYgY2hhciAq X19jYWRkcl90Owp0eXBlZGVmIGxvbmcgaW50IF9fdGltZV90Owp0eXBlZGVmIHVuc2lnbmVkIGlu dCBfX3VzZWNvbmRzX3Q7CnR5cGVkZWYgbG9uZyBpbnQgX19zdXNlY29uZHNfdDsKdHlwZWRlZiBs b25nIGludCBfX3N3YmxrX3Q7Cgp0eXBlZGVmIGxvbmcgaW50IF9fY2xvY2tfdDsKCgp0eXBlZGVm IGludCBfX2Nsb2NraWRfdDsKCgp0eXBlZGVmIGludCBfX3RpbWVyX3Q7CgoKCgoKCnR5cGVkZWYg aW50IF9fa2V5X3Q7CgoKdHlwZWRlZiB1bnNpZ25lZCBzaG9ydCBpbnQgX19pcGNfcGlkX3Q7CgoK CnR5cGVkZWYgbG9uZyBpbnQgX19ibGtzaXplX3Q7CgoKCgp0eXBlZGVmIGxvbmcgaW50IF9fYmxr Y250X3Q7CnR5cGVkZWYgX19xdWFkX3QgX19ibGtjbnQ2NF90OwoKCnR5cGVkZWYgX191X2xvbmcg X19mc2Jsa2NudF90Owp0eXBlZGVmIF9fdV9xdWFkX3QgX19mc2Jsa2NudDY0X3Q7CgoKdHlwZWRl ZiBfX3VfbG9uZyBfX2ZzZmlsY250X3Q7CnR5cGVkZWYgX191X3F1YWRfdCBfX2ZzZmlsY250NjRf dDsKCgp0eXBlZGVmIF9fdV9xdWFkX3QgX19pbm82NF90OwoKCnR5cGVkZWYgX19sb2ZmX3QgX19v ZmY2NF90OwoKCnR5cGVkZWYgbG9uZyBpbnQgX190X3NjYWxhcl90Owp0eXBlZGVmIHVuc2lnbmVk IGxvbmcgaW50IF9fdF91c2NhbGFyX3Q7CgoKdHlwZWRlZiBpbnQgX19pbnRwdHJfdDsKCgp0eXBl ZGVmIHVuc2lnbmVkIGludCBfX3NvY2tsZW5fdDsKCgoKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv cHRocmVhZHR5cGVzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9wdGhyZWFkdHlwZXMu aCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgiIDEgMwojIDY4ICIvdXNyL2luY2x1 ZGUvYml0cy9zY2hlZC5oIiAzCnN0cnVjdCBfX3NjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2No ZWRfcHJpb3JpdHk7CiAgfTsKIyAyNCAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgi IDIgMwoKCnN0cnVjdCBfcHRocmVhZF9mYXN0bG9jawp7CiAgbG9uZyBpbnQgX19zdGF0dXM7CiAg aW50IF9fc3BpbmxvY2s7Cgp9OwoKCgp0eXBlZGVmIHN0cnVjdCBfcHRocmVhZF9kZXNjcl9zdHJ1 Y3QgKl9wdGhyZWFkX2Rlc2NyOwoKCgoKCnR5cGVkZWYgc3RydWN0IF9fcHRocmVhZF9hdHRyX3MK ewogIGludCBfX2RldGFjaHN0YXRlOwogIGludCBfX3NjaGVkcG9saWN5OwogIHN0cnVjdCBfX3Nj aGVkX3BhcmFtIF9fc2NoZWRwYXJhbTsKICBpbnQgX19pbmhlcml0c2NoZWQ7CiAgaW50IF9fc2Nv cGU7CiAgc2l6ZV90IF9fZ3VhcmRzaXplOwogIGludCBfX3N0YWNrYWRkcl9zZXQ7CiAgdm9pZCAq X19zdGFja2FkZHI7CiAgc2l6ZV90IF9fc3RhY2tzaXplOwp9IHB0aHJlYWRfYXR0cl90OwoKCgp0 eXBlZGVmIHN0cnVjdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2NrIF9fY19sb2NrOwogIF9w dGhyZWFkX2Rlc2NyIF9fY193YWl0aW5nOwp9IHB0aHJlYWRfY29uZF90OwoKCgp0eXBlZGVmIHN0 cnVjdAp7CiAgaW50IF9fZHVtbXk7Cn0gcHRocmVhZF9jb25kYXR0cl90OwoKCnR5cGVkZWYgdW5z aWduZWQgaW50IHB0aHJlYWRfa2V5X3Q7CgoKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX21f cmVzZXJ2ZWQ7CiAgaW50IF9fbV9jb3VudDsKICBfcHRocmVhZF9kZXNjciBfX21fb3duZXI7CiAg aW50IF9fbV9raW5kOwogIHN0cnVjdCBfcHRocmVhZF9mYXN0bG9jayBfX21fbG9jazsKfSBwdGhy ZWFkX211dGV4X3Q7CgoKCnR5cGVkZWYgc3RydWN0CnsKICBpbnQgX19tdXRleGtpbmQ7Cn0gcHRo cmVhZF9tdXRleGF0dHJfdDsKCgoKdHlwZWRlZiBpbnQgcHRocmVhZF9vbmNlX3Q7CgoKCgp0eXBl ZGVmIHN0cnVjdCBfcHRocmVhZF9yd2xvY2tfdAp7CiAgc3RydWN0IF9wdGhyZWFkX2Zhc3Rsb2Nr IF9fcndfbG9jazsKICBpbnQgX19yd19yZWFkZXJzOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfd3Jp dGVyOwogIF9wdGhyZWFkX2Rlc2NyIF9fcndfcmVhZF93YWl0aW5nOwogIF9wdGhyZWFkX2Rlc2Ny IF9fcndfd3JpdGVfd2FpdGluZzsKICBpbnQgX19yd19raW5kOwogIGludCBfX3J3X3BzaGFyZWQ7 Cn0gcHRocmVhZF9yd2xvY2tfdDsKCgoKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2xvY2traW5k OwogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9yd2xvY2thdHRyX3Q7CgoKCgp0eXBlZGVmIHZv bGF0aWxlIGludCBwdGhyZWFkX3NwaW5sb2NrX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIHN0cnVj dCBfcHRocmVhZF9mYXN0bG9jayBfX2JhX2xvY2s7CiAgaW50IF9fYmFfcmVxdWlyZWQ7CiAgaW50 IF9fYmFfcHJlc2VudDsKICBfcHRocmVhZF9kZXNjciBfX2JhX3dhaXRpbmc7Cn0gcHRocmVhZF9i YXJyaWVyX3Q7CgoKdHlwZWRlZiBzdHJ1Y3QgewogIGludCBfX3BzaGFyZWQ7Cn0gcHRocmVhZF9i YXJyaWVyYXR0cl90OwoKCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9uZyBpbnQgcHRocmVhZF90Owoj IDE0NCAiL3Vzci9pbmNsdWRlL2JpdHMvdHlwZXMuaCIgMiAzCiMgMzEgIi91c3IvaW5jbHVkZS9z eXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgX191X2NoYXIgdV9jaGFyOwp0eXBlZGVmIF9fdV9z aG9ydCB1X3Nob3J0Owp0eXBlZGVmIF9fdV9pbnQgdV9pbnQ7CnR5cGVkZWYgX191X2xvbmcgdV9s b25nOwp0eXBlZGVmIF9fcXVhZF90IHF1YWRfdDsKdHlwZWRlZiBfX3VfcXVhZF90IHVfcXVhZF90 Owp0eXBlZGVmIF9fZnNpZF90IGZzaWRfdDsKCgoKCnR5cGVkZWYgX19sb2ZmX3QgbG9mZl90OwoK Cgp0eXBlZGVmIF9faW5vX3QgaW5vX3Q7CgoKCgoKCnR5cGVkZWYgX19pbm82NF90IGlubzY0X3Q7 CgoKCgp0eXBlZGVmIF9fZGV2X3QgZGV2X3Q7CgoKCgp0eXBlZGVmIF9fZ2lkX3QgZ2lkX3Q7CgoK Cgp0eXBlZGVmIF9fbW9kZV90IG1vZGVfdDsKCgoKCnR5cGVkZWYgX19ubGlua190IG5saW5rX3Q7 CgoKCgp0eXBlZGVmIF9fdWlkX3QgdWlkX3Q7CgoKCgoKdHlwZWRlZiBfX29mZl90IG9mZl90OwoK CgoKCgp0eXBlZGVmIF9fb2ZmNjRfdCBvZmY2NF90OwoKCgoKdHlwZWRlZiBfX3BpZF90IHBpZF90 OwoKCgoKdHlwZWRlZiBfX2lkX3QgaWRfdDsKCgoKCnR5cGVkZWYgX19zc2l6ZV90IHNzaXplX3Q7 CgoKCgoKdHlwZWRlZiBfX2RhZGRyX3QgZGFkZHJfdDsKdHlwZWRlZiBfX2NhZGRyX3QgY2FkZHJf dDsKCgoKCgp0eXBlZGVmIF9fa2V5X3Qga2V5X3Q7CiMgMTMyICIvdXNyL2luY2x1ZGUvc3lzL3R5 cGVzLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvdGltZS5oIiAxIDMKIyA1OSAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMwp0eXBlZGVmIF9fY2xvY2tfdCBjbG9ja190OwojIDcwICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnR5cGVkZWYgX190aW1lX3QgdGltZV90OwojIDgyICIvdXNyL2luY2x1ZGUvdGlt ZS5oIiAzCnR5cGVkZWYgX19jbG9ja2lkX3QgY2xvY2tpZF90OwojIDk0ICIvdXNyL2luY2x1ZGUv dGltZS5oIiAzCnR5cGVkZWYgX190aW1lcl90IHRpbWVyX3Q7CiMgMTMzICIvdXNyL2luY2x1ZGUv c3lzL3R5cGVzLmgiIDIgMwoKCgp0eXBlZGVmIF9fdXNlY29uZHNfdCB1c2Vjb25kc190OwoKCgp0 eXBlZGVmIF9fc3VzZWNvbmRzX3Qgc3VzZWNvbmRzX3Q7CgoKCgoKIyAxICIvdXNyL2xvY2FsL2xp Yi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAx NDcgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCnR5cGVkZWYgdW5zaWduZWQgbG9u ZyBpbnQgdWxvbmc7CnR5cGVkZWYgdW5zaWduZWQgc2hvcnQgaW50IHVzaG9ydDsKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgdWludDsKIyAxNjIgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMwp0eXBl ZGVmIGNoYXIgaW50OF90Owp0eXBlZGVmIHNob3J0IGludCBpbnQxNl90Owp0eXBlZGVmIGludCBp bnQzMl90OwoKCgoKCgp0eXBlZGVmIHVuc2lnbmVkIGNoYXIgdV9pbnQ4X3Q7CnR5cGVkZWYgdW5z aWduZWQgc2hvcnQgaW50IHVfaW50MTZfdDsKdHlwZWRlZiB1bnNpZ25lZCBpbnQgdV9pbnQzMl90 OwoKCgoKdHlwZWRlZiBpbnQgcmVnaXN0ZXJfdDsKIyAyMTUgIi91c3IvaW5jbHVkZS9zeXMvdHlw ZXMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDEgMwojIDMxICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc2VsZWN0LmgiIDEg MwojIDMyICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVk ZS9iaXRzL3NpZ3NldC5oIiAxIDMKIyAyMyAiL3Vzci9pbmNsdWRlL2JpdHMvc2lnc2V0LmgiIDMK dHlwZWRlZiBpbnQgX19zaWdfYXRvbWljX3Q7CgoKCgp0eXBlZGVmIHN0cnVjdAogIHsKICAgIHVu c2lnbmVkIGxvbmcgaW50IF9fdmFsWygxMDI0IC8gKDggKiBzaXplb2YgKHVuc2lnbmVkIGxvbmcg aW50KSkpXTsKICB9IF9fc2lnc2V0X3Q7CiMgMzUgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0Lmgi IDIgMwoKCgp0eXBlZGVmIF9fc2lnc2V0X3Qgc2lnc2V0X3Q7CgoKCgoKIyAxICIvdXNyL2luY2x1 ZGUvdGltZS5oIiAxIDMKIyAxMDYgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRpbWVz cGVjCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgbG9uZyBpbnQgdHZfbnNlYzsKICB9Owoj IDQ1ICIvdXNyL2luY2x1ZGUvc3lzL3NlbGVjdC5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvdGltZS5oIiAxIDMKIyA2NyAiL3Vzci9pbmNsdWRlL2JpdHMvdGltZS5oIiAzCnN0cnVjdCB0 aW1ldmFsCiAgewogICAgX190aW1lX3QgdHZfc2VjOwogICAgX19zdXNlY29uZHNfdCB0dl91c2Vj OwogIH07CiMgNDcgIi91c3IvaW5jbHVkZS9zeXMvc2VsZWN0LmgiIDIgMwojIDU1ICIvdXNyL2lu Y2x1ZGUvc3lzL3NlbGVjdC5oIiAzCnR5cGVkZWYgbG9uZyBpbnQgX19mZF9tYXNrOwoKCgoKCgoK dHlwZWRlZiBzdHJ1Y3QKICB7CgoKCiAgICBfX2ZkX21hc2sgZmRzX2JpdHNbMTAyNCAvICg4ICog c2l6ZW9mIChfX2ZkX21hc2spKV07CgoKCgoKICB9IGZkX3NldDsKCgoKCgoKdHlwZWRlZiBfX2Zk X21hc2sgZmRfbWFzazsKIyA5NSAiL3Vzci9pbmNsdWRlL3N5cy9zZWxlY3QuaCIgMwpleHRlcm4g IkMiIHsKCgoKCgoKZXh0ZXJuIGludCBzZWxlY3QgKGludCBfX25mZHMsIGZkX3NldCAqIF9fcmVh ZGZkcywKICAgICAgICAgICAgICAgICAgIGZkX3NldCAqIF9fd3JpdGVmZHMsCiAgICAgICAgICAg ICAgICAgICBmZF9zZXQgKiBfX2V4Y2VwdGZkcywKICAgICAgICAgICAgICAgICAgIHN0cnVjdCB0 aW1ldmFsICogX190aW1lb3V0KSA7CgoKCgoKZXh0ZXJuIGludCBwc2VsZWN0IChpbnQgX19uZmRz LCBmZF9zZXQgKiBfX3JlYWRmZHMsCiAgICAgICAgICAgICAgICAgICAgZmRfc2V0ICogX193cml0 ZWZkcywKICAgICAgICAgICAgICAgICAgICBmZF9zZXQgKiBfX2V4Y2VwdGZkcywKICAgICAgICAg ICAgICAgICAgICBjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKiBfX3RpbWVvdXQsCiAgICAgICAgICAg ICAgICAgICAgY29uc3QgX19zaWdzZXRfdCAqIF9fc2lnbWFzaykgOwoKCn0KIyAyMTYgIi91c3Iv aW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvc3lzL3N5c21hY3Jv cy5oIiAxIDMKIyAyMTkgIi91c3IvaW5jbHVkZS9zeXMvdHlwZXMuaCIgMiAzCgoKCgp0eXBlZGVm IF9fYmxrc2l6ZV90IGJsa3NpemVfdDsKCgoKCgoKdHlwZWRlZiBfX2Jsa2NudF90IGJsa2NudF90 OwoKCgp0eXBlZGVmIF9fZnNibGtjbnRfdCBmc2Jsa2NudF90OwoKCgp0eXBlZGVmIF9fZnNmaWxj bnRfdCBmc2ZpbGNudF90OwojIDI1NyAiL3Vzci9pbmNsdWRlL3N5cy90eXBlcy5oIiAzCnR5cGVk ZWYgX19ibGtjbnQ2NF90IGJsa2NudDY0X3Q7CnR5cGVkZWYgX19mc2Jsa2NudDY0X3QgZnNibGtj bnQ2NF90Owp0eXBlZGVmIF9fZnNmaWxjbnQ2NF90IGZzZmlsY250NjRfdDsKCgp9CiMgMzkxICIv dXNyL2luY2x1ZGUvc3RkbGliLmgiIDIgMwoKCgoKCgpleHRlcm4gbG9uZyBpbnQgcmFuZG9tICh2 b2lkKSA7CgoKZXh0ZXJuIHZvaWQgc3JhbmRvbSAodW5zaWduZWQgaW50IF9fc2VlZCkgOwoKCgoK CmV4dGVybiBjaGFyICppbml0c3RhdGUgKHVuc2lnbmVkIGludCBfX3NlZWQsIGNoYXIgKl9fc3Rh dGVidWYsCiAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuKSA7CgoKCmV4 dGVybiBjaGFyICpzZXRzdGF0ZSAoY2hhciAqX19zdGF0ZWJ1ZikgOwoKCgoKCgoKc3RydWN0IHJh bmRvbV9kYXRhCiAgewogICAgaW50MzJfdCAqZnB0cjsKICAgIGludDMyX3QgKnJwdHI7CiAgICBp bnQzMl90ICpzdGF0ZTsKICAgIGludCByYW5kX3R5cGU7CiAgICBpbnQgcmFuZF9kZWc7CiAgICBp bnQgcmFuZF9zZXA7CiAgICBpbnQzMl90ICplbmRfcHRyOwogIH07CgpleHRlcm4gaW50IHJhbmRv bV9yIChzdHJ1Y3QgcmFuZG9tX2RhdGEgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgICAgaW50 MzJfdCAqIF9fcmVzdWx0KSA7CgpleHRlcm4gaW50IHNyYW5kb21fciAodW5zaWduZWQgaW50IF9f c2VlZCwgc3RydWN0IHJhbmRvbV9kYXRhICpfX2J1ZikgOwoKZXh0ZXJuIGludCBpbml0c3RhdGVf ciAodW5zaWduZWQgaW50IF9fc2VlZCwgY2hhciAqIF9fc3RhdGVidWYsCiAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVfdCBfX3N0YXRlbGVuLAogICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgcmFuZG9tX2RhdGEgKiBfX2J1ZikgOwoKZXh0ZXJuIGludCBzZXRzdGF0ZV9yIChjaGFyICog X19zdGF0ZWJ1ZiwKICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgcmFuZG9tX2RhdGEgKiBf X2J1ZikgOwoKCgoKCmV4dGVybiBpbnQgcmFuZCAodm9pZCkgOwoKZXh0ZXJuIHZvaWQgc3JhbmQg KHVuc2lnbmVkIGludCBfX3NlZWQpIDsKCgoKZXh0ZXJuIGludCByYW5kX3IgKHVuc2lnbmVkIGlu dCAqX19zZWVkKSA7CgoKCgoKCgpleHRlcm4gZG91YmxlIGRyYW5kNDggKHZvaWQpIDsKZXh0ZXJu IGRvdWJsZSBlcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVy biBsb25nIGludCBscmFuZDQ4ICh2b2lkKSA7CmV4dGVybiBsb25nIGludCBucmFuZDQ4ICh1bnNp Z25lZCBzaG9ydCBpbnQgX194c3ViaVszXSkgOwoKCmV4dGVybiBsb25nIGludCBtcmFuZDQ4ICh2 b2lkKSA7CmV4dGVybiBsb25nIGludCBqcmFuZDQ4ICh1bnNpZ25lZCBzaG9ydCBpbnQgX194c3Vi aVszXSkgOwoKCmV4dGVybiB2b2lkIHNyYW5kNDggKGxvbmcgaW50IF9fc2VlZHZhbCkgOwpleHRl cm4gdW5zaWduZWQgc2hvcnQgaW50ICpzZWVkNDggKHVuc2lnbmVkIHNob3J0IGludCBfX3NlZWQx NnZbM10pIDsKZXh0ZXJuIHZvaWQgbGNvbmc0OCAodW5zaWduZWQgc2hvcnQgaW50IF9fcGFyYW1b N10pIDsKCgoKCgpzdHJ1Y3QgZHJhbmQ0OF9kYXRhCiAgewogICAgdW5zaWduZWQgc2hvcnQgaW50 IF9feFszXTsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX29sZF94WzNdOwogICAgdW5zaWduZWQg c2hvcnQgaW50IF9fYzsKICAgIHVuc2lnbmVkIHNob3J0IGludCBfX2luaXQ7CiAgICB1bnNpZ25l ZCBsb25nIGxvbmcgaW50IF9fYTsKICB9OwoKCmV4dGVybiBpbnQgZHJhbmQ0OF9yIChzdHJ1Y3Qg ZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiBf X3Jlc3VsdCkgOwpleHRlcm4gaW50IGVyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1 YmlbM10sCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZm ZXIsCiAgICAgICAgICAgICAgICAgICAgICBkb3VibGUgKiBfX3Jlc3VsdCkgOwoKCmV4dGVybiBp bnQgbHJhbmQ0OF9yIChzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAgICAgICAg ICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CmV4dGVybiBpbnQgbnJhbmQ0OF9yICh1 bnNpZ25lZCBzaG9ydCBpbnQgX194c3ViaVszXSwKICAgICAgICAgICAgICAgICAgICAgIHN0cnVj dCBkcmFuZDQ4X2RhdGEgKiBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgIGxvbmcgaW50 ICogX19yZXN1bHQpIDsKCgpleHRlcm4gaW50IG1yYW5kNDhfciAoc3RydWN0IGRyYW5kNDhfZGF0 YSAqIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgbG9uZyBpbnQgKiBfX3Jlc3VsdCkg OwpleHRlcm4gaW50IGpyYW5kNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9feHN1YmlbM10sCiAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZHJhbmQ0OF9kYXRhICogX19idWZmZXIsCiAgICAg ICAgICAgICAgICAgICAgICBsb25nIGludCAqIF9fcmVzdWx0KSA7CgoKZXh0ZXJuIGludCBzcmFu ZDQ4X3IgKGxvbmcgaW50IF9fc2VlZHZhbCwgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp CiAgICAgOwoKZXh0ZXJuIGludCBzZWVkNDhfciAodW5zaWduZWQgc2hvcnQgaW50IF9fc2VlZDE2 dlszXSwKICAgICAgICAgICAgICAgICAgICAgc3RydWN0IGRyYW5kNDhfZGF0YSAqX19idWZmZXIp IDsKCmV4dGVybiBpbnQgbGNvbmc0OF9yICh1bnNpZ25lZCBzaG9ydCBpbnQgX19wYXJhbVs3XSwK ICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBkcmFuZDQ4X2RhdGEgKl9fYnVmZmVyKSA7CiMg NTI3ICIvdXNyL2luY2x1ZGUvc3RkbGliLmgiIDMKZXh0ZXJuIHZvaWQgKm1hbGxvYyAoc2l6ZV90 IF9fc2l6ZSkgOwoKZXh0ZXJuIHZvaWQgKmNhbGxvYyAoc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBf X3NpemUpCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICpyZWFsbG9jICh2b2lkICpfX3B0ciwgc2l6 ZV90IF9fc2l6ZSkgOwoKZXh0ZXJuIHZvaWQgZnJlZSAodm9pZCAqX19wdHIpIDsKCgoKZXh0ZXJu IHZvaWQgY2ZyZWUgKHZvaWQgKl9fcHRyKSA7CgoKCiMgMSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5o IiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2FsbG9jYS5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgMjYg Ii91c3IvaW5jbHVkZS9hbGxvY2EuaCIgMiAzCgpleHRlcm4gIkMiIHsKCgoKCgpleHRlcm4gdm9p ZCAqYWxsb2NhIChzaXplX3QgX19zaXplKSA7CgoKCgoKfQojIDU0NyAiL3Vzci9pbmNsdWRlL3N0 ZGxpYi5oIiAyIDMKCgoKCmV4dGVybiB2b2lkICp2YWxsb2MgKHNpemVfdCBfX3NpemUpIDsKCgoK CmV4dGVybiBpbnQgcG9zaXhfbWVtYWxpZ24gKHZvaWQgKipfX21lbXB0ciwgc2l6ZV90IF9fYWxp Z25tZW50LCBzaXplX3QgX19zaXplKQogICAgIDsKCgoKZXh0ZXJuIHZvaWQgYWJvcnQgKHZvaWQp IDsKCgoKZXh0ZXJuIGludCBhdGV4aXQgKHZvaWQgKCpfX2Z1bmMpICh2b2lkKSkgOwoKCgoKZXh0 ZXJuIGludCBvbl9leGl0ICh2b2lkICgqX19mdW5jKSAoaW50IF9fc3RhdHVzLCB2b2lkICpfX2Fy ZyksIHZvaWQgKl9fYXJnKQogICAgIDsKCgoKCgpleHRlcm4gdm9pZCBleGl0IChpbnQgX19zdGF0 dXMpIDsKCgoKCmV4dGVybiB2b2lkIF9FeGl0IChpbnQgX19zdGF0dXMpIDsKCgoKCmV4dGVybiBj aGFyICpnZXRlbnYgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRlcm4gY2hhciAqX19zZWN1 cmVfZ2V0ZW52IChjb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgpleHRlcm4gaW50IHB1dGVudiAo Y2hhciAqX19zdHJpbmcpIDsKCgoKCgpleHRlcm4gaW50IHNldGVudiAoY29uc3QgY2hhciAqX19u YW1lLCBjb25zdCBjaGFyICpfX3ZhbHVlLCBpbnQgX19yZXBsYWNlKQogICAgIDsKCgpleHRlcm4g aW50IHVuc2V0ZW52IChjb25zdCBjaGFyICpfX25hbWUpIDsKCgoKCgoKZXh0ZXJuIGludCBjbGVh cmVudiAodm9pZCkgOwojIDYyMyAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFy ICpta3RlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoKCgoKCmV4dGVybiBpbnQgbWtzdGVtcCAo Y2hhciAqX190ZW1wbGF0ZSkgOwojIDY0MCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVy biBpbnQgbWtzdGVtcDY0IChjaGFyICpfX3RlbXBsYXRlKSA7CiMgNjUwICIvdXNyL2luY2x1ZGUv c3RkbGliLmgiIDMKZXh0ZXJuIGNoYXIgKm1rZHRlbXAgKGNoYXIgKl9fdGVtcGxhdGUpIDsKCgoK CmV4dGVybiBpbnQgc3lzdGVtIChjb25zdCBjaGFyICpfX2NvbW1hbmQpIDsKCgoKCgoKZXh0ZXJu IGNoYXIgKmNhbm9uaWNhbGl6ZV9maWxlX25hbWUgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwojIDY3 MiAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5oIiAzCmV4dGVybiBjaGFyICpyZWFscGF0aCAoY29uc3Qg Y2hhciAqIF9fbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICBjaGFyICogX19yZXNvbHZlZCkg OwoKCgoKCgp0eXBlZGVmIGludCAoKl9fY29tcGFyX2ZuX3QpIChjb25zdCB2b2lkICosIGNvbnN0 IHZvaWQgKik7CgoKdHlwZWRlZiBfX2NvbXBhcl9mbl90IGNvbXBhcmlzb25fZm5fdDsKCgoKCgpl eHRlcm4gdm9pZCAqYnNlYXJjaCAoY29uc3Qgdm9pZCAqX19rZXksIGNvbnN0IHZvaWQgKl9fYmFz ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX25tZW1iLCBzaXplX3QgX19zaXplLCBf X2NvbXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIHZvaWQgcXNvcnQgKHZvaWQgKl9fYmFz ZSwgc2l6ZV90IF9fbm1lbWIsIHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICBfX2Nv bXBhcl9mbl90IF9fY29tcGFyKTsKCgoKZXh0ZXJuIGludCBhYnMgKGludCBfX3gpIDsKZXh0ZXJu IGxvbmcgaW50IGxhYnMgKGxvbmcgaW50IF9feCkgOwoKIGV4dGVybiBsb25nIGxvbmcgaW50IGxs YWJzIChsb25nIGxvbmcgaW50IF9feCkKICAgICA7CgoKCgoKCmV4dGVybiBkaXZfdCBkaXYgKGlu dCBfX251bWVyLCBpbnQgX19kZW5vbSkKICAgICA7CmV4dGVybiBsZGl2X3QgbGRpdiAobG9uZyBp bnQgX19udW1lciwgbG9uZyBpbnQgX19kZW5vbSkKICAgICA7CgogZXh0ZXJuIGxsZGl2X3QgbGxk aXYgKGxvbmcgbG9uZyBpbnQgX19udW1lciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgbG9uZyBsb25nIGludCBfX2Rlbm9tKQogICAgIDsKIyA3MjggIi91c3IvaW5jbHVkZS9z dGRsaWIuaCIgMwpleHRlcm4gY2hhciAqZWN2dCAoZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdp dCwgaW50ICogX19kZWNwdCwKICAgICAgICAgICAgICAgICAgIGludCAqIF9fc2lnbikgOwoKCgoK ZXh0ZXJuIGNoYXIgKmZjdnQgKGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9f ZGVjcHQsCiAgICAgICAgICAgICAgICAgICBpbnQgKiBfX3NpZ24pIDsKCgoKCmV4dGVybiBjaGFy ICpnY3Z0IChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBjaGFyICpfX2J1ZikgOwoKCgoK ZXh0ZXJuIGNoYXIgKnFlY3Z0IChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsCiAg ICAgICAgICAgICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduKSA7CmV4dGVybiBj aGFyICpxZmN2dCAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbikgOwpleHRlcm4gY2hhciAqcWdj dnQgKGxvbmcgZG91YmxlIF9fdmFsdWUsIGludCBfX25kaWdpdCwgY2hhciAqX19idWYpIDsKCgoK CmV4dGVybiBpbnQgZWN2dF9yIChkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LCBpbnQgKiBf X2RlY3B0LAogICAgICAgICAgICAgICAgICAgaW50ICogX19zaWduLCBjaGFyICogX19idWYsCiAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBmY3Z0X3IgKGRvdWJs ZSBfX3ZhbHVlLCBpbnQgX19uZGlnaXQsIGludCAqIF9fZGVjcHQsCiAgICAgICAgICAgICAgICAg ICBpbnQgKiBfX3NpZ24sIGNoYXIgKiBfX2J1ZiwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBf X2xlbikgOwoKZXh0ZXJuIGludCBxZWN2dF9yIChsb25nIGRvdWJsZSBfX3ZhbHVlLCBpbnQgX19u ZGlnaXQsCiAgICAgICAgICAgICAgICAgICAgaW50ICogX19kZWNwdCwgaW50ICogX19zaWduLAog ICAgICAgICAgICAgICAgICAgIGNoYXIgKiBfX2J1Ziwgc2l6ZV90IF9fbGVuKSA7CmV4dGVybiBp bnQgcWZjdnRfciAobG9uZyBkb3VibGUgX192YWx1ZSwgaW50IF9fbmRpZ2l0LAogICAgICAgICAg ICAgICAgICAgIGludCAqIF9fZGVjcHQsIGludCAqIF9fc2lnbiwKICAgICAgICAgICAgICAgICAg ICBjaGFyICogX19idWYsIHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IG1ibGVuIChj b25zdCBjaGFyICpfX3MsIHNpemVfdCBfX24pIDsKCgpleHRlcm4gaW50IG1idG93YyAod2NoYXJf dCAqIF9fcHdjLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fcywgc2l6ZV90IF9f bikgOwoKCmV4dGVybiBpbnQgd2N0b21iIChjaGFyICpfX3MsIHdjaGFyX3QgX193Y2hhcikgOwoK CgpleHRlcm4gc2l6ZV90IG1ic3Rvd2NzICh3Y2hhcl90ICogX19wd2NzLAogICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICogX19zLCBzaXplX3QgX19uKSA7CgpleHRlcm4gc2l6ZV90 IHdjc3RvbWJzIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hh cl90ICogX19wd2NzLCBzaXplX3QgX19uKQogICAgIDsKCgoKCgoKCmV4dGVybiBpbnQgcnBtYXRj aCAoY29uc3QgY2hhciAqX19yZXNwb25zZSkgOwojIDgwOCAiL3Vzci9pbmNsdWRlL3N0ZGxpYi5o IiAzCmV4dGVybiBpbnQgZ2V0c3Vib3B0IChjaGFyICoqIF9fb3B0aW9ucCwKICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKmNvbnN0ICogX190b2tlbnMsCiAgICAgICAgICAgICAgICAgICAgICBj aGFyICoqIF9fdmFsdWVwKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0a2V5IChjb25zdCBjaGFyICpf X2tleSkgOwoKCgoKCgoKZXh0ZXJuIGludCBwb3NpeF9vcGVucHQgKGludCBfX29mbGFnKSA7CgoK CgoKCgpleHRlcm4gaW50IGdyYW50cHQgKGludCBfX2ZkKSA7CgoKCmV4dGVybiBpbnQgdW5sb2Nr cHQgKGludCBfX2ZkKSA7CgoKCgpleHRlcm4gY2hhciAqcHRzbmFtZSAoaW50IF9fZmQpIDsKCgoK CgoKZXh0ZXJuIGludCBwdHNuYW1lX3IgKGludCBfX2ZkLCBjaGFyICpfX2J1Ziwgc2l6ZV90IF9f YnVmbGVuKSA7CgoKZXh0ZXJuIGludCBnZXRwdCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IGdl dGxvYWRhdmcgKGRvdWJsZSBfX2xvYWRhdmdbXSwgaW50IF9fbmVsZW0pIDsKCgoKCgp9CiMgNTMg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDIgMwojIDg0ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9jc3RkbGliIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6ZGl2 X3Q7CiAgdXNpbmcgOjpsZGl2X3Q7CgogIHVzaW5nIDo6YWJvcnQ7CiAgdXNpbmcgOjphYnM7CiAg dXNpbmcgOjphdGV4aXQ7CiAgdXNpbmcgOjphdG9mOwogIHVzaW5nIDo6YXRvaTsKICB1c2luZyA6 OmF0b2w7CiAgdXNpbmcgOjpic2VhcmNoOwogIHVzaW5nIDo6Y2FsbG9jOwogIHVzaW5nIDo6ZGl2 OwogIHVzaW5nIDo6ZXhpdDsKICB1c2luZyA6OmZyZWU7CiAgdXNpbmcgOjpnZXRlbnY7CiAgdXNp bmcgOjpsYWJzOwogIHVzaW5nIDo6bGRpdjsKICB1c2luZyA6Om1hbGxvYzsKICB1c2luZyA6Om1i bGVuOwogIHVzaW5nIDo6bWJzdG93Y3M7CiAgdXNpbmcgOjptYnRvd2M7CiAgdXNpbmcgOjpxc29y dDsKICB1c2luZyA6OnJhbmQ7CiAgdXNpbmcgOjpyZWFsbG9jOwogIHVzaW5nIDo6c3JhbmQ7CiAg dXNpbmcgOjpzdHJ0b2Q7CiAgdXNpbmcgOjpzdHJ0b2w7CiAgdXNpbmcgOjpzdHJ0b3VsOwogIHVz aW5nIDo6c3lzdGVtOwogIHVzaW5nIDo6d2NzdG9tYnM7CiAgdXNpbmcgOjp3Y3RvbWI7CgogIGlu bGluZSBsb25nCiAgYWJzKGxvbmcgX19pKSB7IHJldHVybiBsYWJzKF9faSk7IH0KCiAgaW5saW5l IGxkaXZfdAogIGRpdihsb25nIF9faSwgbG9uZyBfX2opIHsgcmV0dXJuIGxkaXYoX19pLCBfX2op OyB9Cn0KIyAxMzYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdGRsaWIiIDMKbmFtZXNw YWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjpsbGRpdl90OwogIHVzaW5nIDo6X0V4aXQ7CgogIGlu bGluZSBsb25nIGxvbmcKICBhYnMobG9uZyBsb25nIF9feCkgeyByZXR1cm4gX194ID49IDAgPyBf X3ggOiAtX194OyB9CgogIGlubGluZSBsb25nIGxvbmcKICBsbGFicyhsb25nIGxvbmcgX194KSB7 IHJldHVybiBfX3ggPj0gMCA/IF9feCA6IC1fX3g7IH0KCiAgaW5saW5lIGxsZGl2X3QKICBkaXYo bG9uZyBsb25nIF9fbiwgbG9uZyBsb25nIF9fZCkKICB7IGxsZGl2X3QgX19xOyBfX3EucXVvdCA9 IF9fbiAvIF9fZDsgX19xLnJlbSA9IF9fbiAlIF9fZDsgcmV0dXJuIF9fcTsgfQoKICBpbmxpbmUg bGxkaXZfdAogIGxsZGl2KGxvbmcgbG9uZyBfX24sIGxvbmcgbG9uZyBfX2QpCiAgeyBsbGRpdl90 IF9fcTsgX19xLnF1b3QgPSBfX24gLyBfX2Q7IF9fcS5yZW0gPSBfX24gJSBfX2Q7IHJldHVybiBf X3E7IH0KCiAgdXNpbmcgOjphdG9sbDsKICB1c2luZyA6OnN0cnRvZjsKICB1c2luZyA6OnN0cnRv bGw7CiAgdXNpbmcgOjpzdHJ0b3VsbDsKICB1c2luZyA6OnN0cnRvbGQ7Cn0KCm5hbWVzcGFjZSBz dGQKewogIHVzaW5nIF9fZ251X2N4eDo6bGxkaXZfdDsKICB1c2luZyBfX2dudV9jeHg6Ol9FeGl0 OwogIHVzaW5nIF9fZ251X2N4eDo6YWJzOwogIHVzaW5nIF9fZ251X2N4eDo6bGxhYnM7CiAgdXNp bmcgX19nbnVfY3h4OjpkaXY7CiAgdXNpbmcgX19nbnVfY3h4OjpsbGRpdjsKICB1c2luZyBfX2du dV9jeHg6OmF0b2xsOwogIHVzaW5nIF9fZ251X2N4eDo6c3RydG9mOwogIHVzaW5nIF9fZ251X2N4 eDo6c3RydG9sbDsKICB1c2luZyBfX2dudV9jeHg6OnN0cnRvdWxsOwogIHVzaW5nIF9fZ251X2N4 eDo6c3RydG9sZDsKfQojIDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcvcGxh dGZvcm0vbGludXguaHBwIiAyCiMgNjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2NvbmZp Zy9wbGF0Zm9ybS9saW51eC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY29u ZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9jb25maWcvcG9zaXhfZmVhdHVyZXMuaHBwIgojIDEgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIg MSAzCiMgMjggIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gIkMiIHsKIyAxNzUgIi91 c3IvaW5jbHVkZS91bmlzdGQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3Bvc2l4X29wdC5o IiAxIDMKIyAxNzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMiAzCgoKCiMgMSAiL3Vzci9pbmNs dWRlL2JpdHMvZW52aXJvbm1lbnRzLmgiIDEgMwojIDIzICIvdXNyL2luY2x1ZGUvYml0cy9lbnZp cm9ubWVudHMuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDI0 ICIvdXNyL2luY2x1ZGUvYml0cy9lbnZpcm9ubWVudHMuaCIgMiAzCiMgMTgwICIvdXNyL2luY2x1 ZGUvdW5pc3RkLmgiIDIgMwojIDE5OSAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYu aCIgMSAzCiMgMjAwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwojIDI0MCAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzCnR5cGVkZWYgX19pbnRwdHJfdCBpbnRwdHJfdDsKCgoKCgoKdHlwZWRl ZiBfX3NvY2tsZW5fdCBzb2NrbGVuX3Q7CiMgMjYwICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMK ZXh0ZXJuIGludCBhY2Nlc3MgKGNvbnN0IGNoYXIgKl9fbmFtZSwgaW50IF9fdHlwZSkgOwoKCgoK ZXh0ZXJuIGludCBldWlkYWNjZXNzIChjb25zdCBjaGFyICpfX25hbWUsIGludCBfX3R5cGUpIDsK IyAyOTAgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gX19vZmZfdCBsc2VlayAoaW50 IF9fZmQsIF9fb2ZmX3QgX19vZmZzZXQsIGludCBfX3doZW5jZSkgOwojIDMwMiAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX29mZjY0X3QgbHNlZWs2NCAoaW50IF9fZmQsIF9fb2Zm NjRfdCBfX29mZnNldCwgaW50IF9fd2hlbmNlKSA7CgoKCmV4dGVybiBpbnQgY2xvc2UgKGludCBf X2ZkKSA7CgoKCmV4dGVybiBzc2l6ZV90IHJlYWQgKGludCBfX2ZkLCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbmJ5dGVzKSA7CgoKZXh0ZXJuIHNzaXplX3Qgd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2 b2lkICpfX2J1Ziwgc2l6ZV90IF9fbikgOwoKCgpleHRlcm4gc3NpemVfdCBwcmVhZCAoaW50IF9f ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsIF9fb2ZmX3QgX19vZmZzZXQpCiAgICAg OwpleHRlcm4gc3NpemVfdCBwd3JpdGUgKGludCBfX2ZkLCBjb25zdCB2b2lkICpfX2J1Ziwgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICBfX29mZl90IF9fb2Zmc2V0KSA7CiMgMzQw ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIHNzaXplX3QgcHJlYWQ2NCAoaW50IF9f ZmQsIHZvaWQgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMsCiAgICAgICAgICAgICAgICAgICAgICAg IF9fb2ZmNjRfdCBfX29mZnNldCkgOwoKCmV4dGVybiBzc2l6ZV90IHB3cml0ZTY0IChpbnQgX19m ZCwgY29uc3Qgdm9pZCAqX19idWYsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX29mZjY0X3QgX19vZmZzZXQpIDsKCgoKCgoKCmV4dGVybiBpbnQgcGlwZSAoaW50IF9fcGlw ZWRlc1syXSkgOwojIDM2MiAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiB1bnNpZ25l ZCBpbnQgYWxhcm0gKHVuc2lnbmVkIGludCBfX3NlY29uZHMpIDsKIyAzNzEgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMwpleHRlcm4gdW5zaWduZWQgaW50IHNsZWVwICh1bnNpZ25lZCBpbnQgX19z ZWNvbmRzKSA7CgoKCgoKCmV4dGVybiBfX3VzZWNvbmRzX3QgdWFsYXJtIChfX3VzZWNvbmRzX3Qg X192YWx1ZSwgX191c2Vjb25kc190IF9faW50ZXJ2YWwpCiAgICAgOwoKCgpleHRlcm4gaW50IHVz bGVlcCAoX191c2Vjb25kc190IF9fdXNlY29uZHMpIDsKCgoKCgpleHRlcm4gaW50IHBhdXNlICh2 b2lkKSA7CgoKCmV4dGVybiBpbnQgY2hvd24gKGNvbnN0IGNoYXIgKl9fZmlsZSwgX191aWRfdCBf X293bmVyLCBfX2dpZF90IF9fZ3JvdXApCiAgICAgOwoKCgpleHRlcm4gaW50IGZjaG93biAoaW50 IF9fZmQsIF9fdWlkX3QgX19vd25lciwgX19naWRfdCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gaW50 IGxjaG93biAoY29uc3QgY2hhciAqX19maWxlLCBfX3VpZF90IF9fb3duZXIsIF9fZ2lkX3QgX19n cm91cCkKICAgICA7CgoKCgpleHRlcm4gaW50IGNoZGlyIChjb25zdCBjaGFyICpfX3BhdGgpIDsK CgoKZXh0ZXJuIGludCBmY2hkaXIgKGludCBfX2ZkKSA7CiMgNDIzICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMKZXh0ZXJuIGNoYXIgKmdldGN3ZCAoY2hhciAqX19idWYsIHNpemVfdCBfX3NpemUp IDsKCgoKCgpleHRlcm4gY2hhciAqZ2V0X2N1cnJlbnRfZGlyX25hbWUgKHZvaWQpIDsKCgoKCgoK ZXh0ZXJuIGNoYXIgKmdldHdkIChjaGFyICpfX2J1ZikgOwoKCgoKZXh0ZXJuIGludCBkdXAgKGlu dCBfX2ZkKSA7CgoKZXh0ZXJuIGludCBkdXAyIChpbnQgX19mZCwgaW50IF9fZmQyKSA7CgoKZXh0 ZXJuIGNoYXIgKipfX2Vudmlyb247CgpleHRlcm4gY2hhciAqKmVudmlyb247CgoKCgoKZXh0ZXJu IGludCBleGVjdmUgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hhciAqY29uc3QgX19hcmd2W10sCiAg ICAgICAgICAgICAgICAgICBjaGFyICpjb25zdCBfX2VudnBbXSkgOwoKCgoKZXh0ZXJuIGludCBm ZXhlY3ZlIChpbnQgX19mZCwgY2hhciAqY29uc3QgX19hcmd2W10sIGNoYXIgKmNvbnN0IF9fZW52 cFtdKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZXhlY3YgKGNvbnN0IGNoYXIgKl9fcGF0aCwgY2hh ciAqY29uc3QgX19hcmd2W10pIDsKCgoKZXh0ZXJuIGludCBleGVjbGUgKGNvbnN0IGNoYXIgKl9f cGF0aCwgY29uc3QgY2hhciAqX19hcmcsIC4uLikgOwoKCgpleHRlcm4gaW50IGV4ZWNsIChjb25z dCBjaGFyICpfX3BhdGgsIGNvbnN0IGNoYXIgKl9fYXJnLCAuLi4pIDsKCgoKZXh0ZXJuIGludCBl eGVjdnAgKGNvbnN0IGNoYXIgKl9fZmlsZSwgY2hhciAqY29uc3QgX19hcmd2W10pIDsKCgoKCmV4 dGVybiBpbnQgZXhlY2xwIChjb25zdCBjaGFyICpfX2ZpbGUsIGNvbnN0IGNoYXIgKl9fYXJnLCAu Li4pIDsKCgoKCmV4dGVybiBpbnQgbmljZSAoaW50IF9faW5jKSA7CgoKCgpleHRlcm4gdm9pZCBf ZXhpdCAoaW50IF9fc3RhdHVzKSA7CgoKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9jb25mbmFt ZS5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2JpdHMvY29uZm5hbWUuaCIgMwplbnVtCiAgewog ICAgX1BDX0xJTktfTUFYLAoKICAgIF9QQ19NQVhfQ0FOT04sCgogICAgX1BDX01BWF9JTlBVVCwK CiAgICBfUENfTkFNRV9NQVgsCgogICAgX1BDX1BBVEhfTUFYLAoKICAgIF9QQ19QSVBFX0JVRiwK CiAgICBfUENfQ0hPV05fUkVTVFJJQ1RFRCwKCiAgICBfUENfTk9fVFJVTkMsCgogICAgX1BDX1ZE SVNBQkxFLAoKICAgIF9QQ19TWU5DX0lPLAoKICAgIF9QQ19BU1lOQ19JTywKCiAgICBfUENfUFJJ T19JTywKCiAgICBfUENfU09DS19NQVhCVUYsCgogICAgX1BDX0ZJTEVTSVpFQklUUywKCiAgICBf UENfUkVDX0lOQ1JfWEZFUl9TSVpFLAoKICAgIF9QQ19SRUNfTUFYX1hGRVJfU0laRSwKCiAgICBf UENfUkVDX01JTl9YRkVSX1NJWkUsCgogICAgX1BDX1JFQ19YRkVSX0FMSUdOLAoKICAgIF9QQ19B TExPQ19TSVpFX01JTiwKCiAgICBfUENfU1lNTElOS19NQVgKCiAgfTsKCgplbnVtCiAgewogICAg X1NDX0FSR19NQVgsCgogICAgX1NDX0NISUxEX01BWCwKCiAgICBfU0NfQ0xLX1RDSywKCiAgICBf U0NfTkdST1VQU19NQVgsCgogICAgX1NDX09QRU5fTUFYLAoKICAgIF9TQ19TVFJFQU1fTUFYLAoK ICAgIF9TQ19UWk5BTUVfTUFYLAoKICAgIF9TQ19KT0JfQ09OVFJPTCwKCiAgICBfU0NfU0FWRURf SURTLAoKICAgIF9TQ19SRUFMVElNRV9TSUdOQUxTLAoKICAgIF9TQ19QUklPUklUWV9TQ0hFRFVM SU5HLAoKICAgIF9TQ19USU1FUlMsCgogICAgX1NDX0FTWU5DSFJPTk9VU19JTywKCiAgICBfU0Nf UFJJT1JJVElaRURfSU8sCgogICAgX1NDX1NZTkNIUk9OSVpFRF9JTywKCiAgICBfU0NfRlNZTkMs CgogICAgX1NDX01BUFBFRF9GSUxFUywKCiAgICBfU0NfTUVNTE9DSywKCiAgICBfU0NfTUVNTE9D S19SQU5HRSwKCiAgICBfU0NfTUVNT1JZX1BST1RFQ1RJT04sCgogICAgX1NDX01FU1NBR0VfUEFT U0lORywKCiAgICBfU0NfU0VNQVBIT1JFUywKCiAgICBfU0NfU0hBUkVEX01FTU9SWV9PQkpFQ1RT LAoKICAgIF9TQ19BSU9fTElTVElPX01BWCwKCiAgICBfU0NfQUlPX01BWCwKCiAgICBfU0NfQUlP X1BSSU9fREVMVEFfTUFYLAoKICAgIF9TQ19ERUxBWVRJTUVSX01BWCwKCiAgICBfU0NfTVFfT1BF Tl9NQVgsCgogICAgX1NDX01RX1BSSU9fTUFYLAoKICAgIF9TQ19WRVJTSU9OLAoKICAgIF9TQ19Q QUdFU0laRSwKCgogICAgX1NDX1JUU0lHX01BWCwKCiAgICBfU0NfU0VNX05TRU1TX01BWCwKCiAg ICBfU0NfU0VNX1ZBTFVFX01BWCwKCiAgICBfU0NfU0lHUVVFVUVfTUFYLAoKICAgIF9TQ19USU1F Ul9NQVgsCgoKCgogICAgX1NDX0JDX0JBU0VfTUFYLAoKICAgIF9TQ19CQ19ESU1fTUFYLAoKICAg IF9TQ19CQ19TQ0FMRV9NQVgsCgogICAgX1NDX0JDX1NUUklOR19NQVgsCgogICAgX1NDX0NPTExf V0VJR0hUU19NQVgsCgogICAgX1NDX0VRVUlWX0NMQVNTX01BWCwKCiAgICBfU0NfRVhQUl9ORVNU X01BWCwKCiAgICBfU0NfTElORV9NQVgsCgogICAgX1NDX1JFX0RVUF9NQVgsCgogICAgX1NDX0NI QVJDTEFTU19OQU1FX01BWCwKCgogICAgX1NDXzJfVkVSU0lPTiwKCiAgICBfU0NfMl9DX0JJTkQs CgogICAgX1NDXzJfQ19ERVYsCgogICAgX1NDXzJfRk9SVF9ERVYsCgogICAgX1NDXzJfRk9SVF9S VU4sCgogICAgX1NDXzJfU1dfREVWLAoKICAgIF9TQ18yX0xPQ0FMRURFRiwKCgogICAgX1NDX1BJ SSwKCiAgICBfU0NfUElJX1hUSSwKCiAgICBfU0NfUElJX1NPQ0tFVCwKCiAgICBfU0NfUElJX0lO VEVSTkVULAoKICAgIF9TQ19QSUlfT1NJLAoKICAgIF9TQ19QT0xMLAoKICAgIF9TQ19TRUxFQ1Qs CgogICAgX1NDX1VJT19NQVhJT1YsCgogICAgX1NDX0lPVl9NQVggPSBfU0NfVUlPX01BWElPViwK CiAgICBfU0NfUElJX0lOVEVSTkVUX1NUUkVBTSwKCiAgICBfU0NfUElJX0lOVEVSTkVUX0RHUkFN LAoKICAgIF9TQ19QSUlfT1NJX0NPVFMsCgogICAgX1NDX1BJSV9PU0lfQ0xUUywKCiAgICBfU0Nf UElJX09TSV9NLAoKICAgIF9TQ19UX0lPVl9NQVgsCgoKCiAgICBfU0NfVEhSRUFEUywKCiAgICBf U0NfVEhSRUFEX1NBRkVfRlVOQ1RJT05TLAoKICAgIF9TQ19HRVRHUl9SX1NJWkVfTUFYLAoKICAg IF9TQ19HRVRQV19SX1NJWkVfTUFYLAoKICAgIF9TQ19MT0dJTl9OQU1FX01BWCwKCiAgICBfU0Nf VFRZX05BTUVfTUFYLAoKICAgIF9TQ19USFJFQURfREVTVFJVQ1RPUl9JVEVSQVRJT05TLAoKICAg IF9TQ19USFJFQURfS0VZU19NQVgsCgogICAgX1NDX1RIUkVBRF9TVEFDS19NSU4sCgogICAgX1ND X1RIUkVBRF9USFJFQURTX01BWCwKCiAgICBfU0NfVEhSRUFEX0FUVFJfU1RBQ0tBRERSLAoKICAg IF9TQ19USFJFQURfQVRUUl9TVEFDS1NJWkUsCgogICAgX1NDX1RIUkVBRF9QUklPUklUWV9TQ0hF RFVMSU5HLAoKICAgIF9TQ19USFJFQURfUFJJT19JTkhFUklULAoKICAgIF9TQ19USFJFQURfUFJJ T19QUk9URUNULAoKICAgIF9TQ19USFJFQURfUFJPQ0VTU19TSEFSRUQsCgoKICAgIF9TQ19OUFJP Q0VTU09SU19DT05GLAoKICAgIF9TQ19OUFJPQ0VTU09SU19PTkxOLAoKICAgIF9TQ19QSFlTX1BB R0VTLAoKICAgIF9TQ19BVlBIWVNfUEFHRVMsCgogICAgX1NDX0FURVhJVF9NQVgsCgogICAgX1ND X1BBU1NfTUFYLAoKCiAgICBfU0NfWE9QRU5fVkVSU0lPTiwKCiAgICBfU0NfWE9QRU5fWENVX1ZF UlNJT04sCgogICAgX1NDX1hPUEVOX1VOSVgsCgogICAgX1NDX1hPUEVOX0NSWVBULAoKICAgIF9T Q19YT1BFTl9FTkhfSTE4TiwKCiAgICBfU0NfWE9QRU5fU0hNLAoKCiAgICBfU0NfMl9DSEFSX1RF Uk0sCgogICAgX1NDXzJfQ19WRVJTSU9OLAoKICAgIF9TQ18yX1VQRSwKCgogICAgX1NDX1hPUEVO X1hQRzIsCgogICAgX1NDX1hPUEVOX1hQRzMsCgogICAgX1NDX1hPUEVOX1hQRzQsCgoKICAgIF9T Q19DSEFSX0JJVCwKCiAgICBfU0NfQ0hBUl9NQVgsCgogICAgX1NDX0NIQVJfTUlOLAoKICAgIF9T Q19JTlRfTUFYLAoKICAgIF9TQ19JTlRfTUlOLAoKICAgIF9TQ19MT05HX0JJVCwKCiAgICBfU0Nf V09SRF9CSVQsCgogICAgX1NDX01CX0xFTl9NQVgsCgogICAgX1NDX05aRVJPLAoKICAgIF9TQ19T U0laRV9NQVgsCgogICAgX1NDX1NDSEFSX01BWCwKCiAgICBfU0NfU0NIQVJfTUlOLAoKICAgIF9T Q19TSFJUX01BWCwKCiAgICBfU0NfU0hSVF9NSU4sCgogICAgX1NDX1VDSEFSX01BWCwKCiAgICBf U0NfVUlOVF9NQVgsCgogICAgX1NDX1VMT05HX01BWCwKCiAgICBfU0NfVVNIUlRfTUFYLAoKCiAg ICBfU0NfTkxfQVJHTUFYLAoKICAgIF9TQ19OTF9MQU5HTUFYLAoKICAgIF9TQ19OTF9NU0dNQVgs CgogICAgX1NDX05MX05NQVgsCgogICAgX1NDX05MX1NFVE1BWCwKCiAgICBfU0NfTkxfVEVYVE1B WCwKCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGMzIsCgogICAgX1NDX1hCUzVfSUxQMzJfT0ZGQklH LAoKICAgIF9TQ19YQlM1X0xQNjRfT0ZGNjQsCgogICAgX1NDX1hCUzVfTFBCSUdfT0ZGQklHLAoK CiAgICBfU0NfWE9QRU5fTEVHQUNZLAoKICAgIF9TQ19YT1BFTl9SRUFMVElNRSwKCiAgICBfU0Nf WE9QRU5fUkVBTFRJTUVfVEhSRUFEUywKCgogICAgX1NDX0FEVklTT1JZX0lORk8sCgogICAgX1ND X0JBUlJJRVJTLAoKICAgIF9TQ19CQVNFLAoKICAgIF9TQ19DX0xBTkdfU1VQUE9SVCwKCiAgICBf U0NfQ19MQU5HX1NVUFBPUlRfUiwKCiAgICBfU0NfQ0xPQ0tfU0VMRUNUSU9OLAoKICAgIF9TQ19D UFVUSU1FLAoKICAgIF9TQ19USFJFQURfQ1BVVElNRSwKCiAgICBfU0NfREVWSUNFX0lPLAoKICAg IF9TQ19ERVZJQ0VfU1BFQ0lGSUMsCgogICAgX1NDX0RFVklDRV9TUEVDSUZJQ19SLAoKICAgIF9T Q19GRF9NR01ULAoKICAgIF9TQ19GSUZPLAoKICAgIF9TQ19QSVBFLAoKICAgIF9TQ19GSUxFX0FU VFJJQlVURVMsCgogICAgX1NDX0ZJTEVfTE9DS0lORywKCiAgICBfU0NfRklMRV9TWVNURU0sCgog ICAgX1NDX01PTk9UT05JQ19DTE9DSywKCiAgICBfU0NfTVVMVElfUFJPQ0VTUywKCiAgICBfU0Nf U0lOR0xFX1BST0NFU1MsCgogICAgX1NDX05FVFdPUktJTkcsCgogICAgX1NDX1JFQURFUl9XUklU RVJfTE9DS1MsCgogICAgX1NDX1NQSU5fTE9DS1MsCgogICAgX1NDX1JFR0VYUCwKCiAgICBfU0Nf UkVHRVhfVkVSU0lPTiwKCiAgICBfU0NfU0hFTEwsCgogICAgX1NDX1NJR05BTFMsCgogICAgX1ND X1NQQVdOLAoKICAgIF9TQ19TUE9SQURJQ19TRVJWRVIsCgogICAgX1NDX1RIUkVBRF9TUE9SQURJ Q19TRVJWRVIsCgogICAgX1NDX1NZU1RFTV9EQVRBQkFTRSwKCiAgICBfU0NfU1lTVEVNX0RBVEFC QVNFX1IsCgogICAgX1NDX1RJTUVPVVRTLAoKICAgIF9TQ19UWVBFRF9NRU1PUllfT0JKRUNUUywK CiAgICBfU0NfVVNFUl9HUk9VUFMsCgogICAgX1NDX1VTRVJfR1JPVVBTX1IsCgogICAgX1NDXzJf UEJTLAoKICAgIF9TQ18yX1BCU19BQ0NPVU5USU5HLAoKICAgIF9TQ18yX1BCU19MT0NBVEUsCgog ICAgX1NDXzJfUEJTX01FU1NBR0UsCgogICAgX1NDXzJfUEJTX1RSQUNLLAoKICAgIF9TQ19TWU1M T09QX01BWCwKCiAgICBfU0NfU1RSRUFNUywKCiAgICBfU0NfMl9QQlNfQ0hFQ0tQT0lOVCwKCgog ICAgX1NDX1Y2X0lMUDMyX09GRjMyLAoKICAgIF9TQ19WNl9JTFAzMl9PRkZCSUcsCgogICAgX1ND X1Y2X0xQNjRfT0ZGNjQsCgogICAgX1NDX1Y2X0xQQklHX09GRkJJRywKCgogICAgX1NDX0hPU1Rf TkFNRV9NQVgsCgogICAgX1NDX1RSQUNFLAoKICAgIF9TQ19UUkFDRV9FVkVOVF9GSUxURVIsCgog ICAgX1NDX1RSQUNFX0lOSEVSSVQsCgogICAgX1NDX1RSQUNFX0xPRwoKICB9OwoKCgoKCmVudW0K ICB7CiAgICBfQ1NfUEFUSCwKCgoKCiAgICBfQ1NfTEZTX0NGTEFHUyA9IDEwMDAsCgogICAgX0NT X0xGU19MREZMQUdTLAoKICAgIF9DU19MRlNfTElCUywKCiAgICBfQ1NfTEZTX0xJTlRGTEFHUywK CiAgICBfQ1NfTEZTNjRfQ0ZMQUdTLAoKICAgIF9DU19MRlM2NF9MREZMQUdTLAoKICAgIF9DU19M RlM2NF9MSUJTLAoKICAgIF9DU19MRlM2NF9MSU5URkxBR1MsCgoKCgogICAgX0NTX1hCUzVfSUxQ MzJfT0ZGMzJfQ0ZMQUdTID0gMTEwMCwKCiAgICBfQ1NfWEJTNV9JTFAzMl9PRkYzMl9MREZMQUdT LAoKICAgIF9DU19YQlM1X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZG MzJfTElOVEZMQUdTLAoKICAgIF9DU19YQlM1X0lMUDMyX09GRkJJR19DRkxBR1MsCgogICAgX0NT X1hCUzVfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJ QlMsCgogICAgX0NTX1hCUzVfSUxQMzJfT0ZGQklHX0xJTlRGTEFHUywKCiAgICBfQ1NfWEJTNV9M UDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfWEJTNV9MUDY0X09GRjY0X0xERkxBR1MsCgogICAg X0NTX1hCUzVfTFA2NF9PRkY2NF9MSUJTLAoKICAgIF9DU19YQlM1X0xQNjRfT0ZGNjRfTElOVEZM QUdTLAoKICAgIF9DU19YQlM1X0xQQklHX09GRkJJR19DRkxBR1MsCgogICAgX0NTX1hCUzVfTFBC SUdfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAg X0NTX1hCUzVfTFBCSUdfT0ZGQklHX0xJTlRGTEFHUywKCgoKICAgIF9DU19QT1NJWF9WNl9JTFAz Ml9PRkYzMl9DRkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xERkxBR1MsCgog ICAgX0NTX1BPU0lYX1Y2X0lMUDMyX09GRjMyX0xJQlMsCgogICAgX0NTX1BPU0lYX1Y2X0lMUDMy X09GRjMyX0xJTlRGTEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0NGTEFHUywK CiAgICBfQ1NfUE9TSVhfVjZfSUxQMzJfT0ZGQklHX0xERkxBR1MsCgogICAgX0NTX1BPU0lYX1Y2 X0lMUDMyX09GRkJJR19MSUJTLAoKICAgIF9DU19QT1NJWF9WNl9JTFAzMl9PRkZCSUdfTElOVEZM QUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0NGTEFHUywKCiAgICBfQ1NfUE9TSVhf VjZfTFA2NF9PRkY2NF9MREZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUDY0X09GRjY0X0xJQlMs CgogICAgX0NTX1BPU0lYX1Y2X0xQNjRfT0ZGNjRfTElOVEZMQUdTLAoKICAgIF9DU19QT1NJWF9W Nl9MUEJJR19PRkZCSUdfQ0ZMQUdTLAoKICAgIF9DU19QT1NJWF9WNl9MUEJJR19PRkZCSUdfTERG TEFHUywKCiAgICBfQ1NfUE9TSVhfVjZfTFBCSUdfT0ZGQklHX0xJQlMsCgogICAgX0NTX1BPU0lY X1Y2X0xQQklHX09GRkJJR19MSU5URkxBR1MsCgoKCiAgICBfQ1NfVjZfV0lEVEhfUkVTVFJJQ1RF RF9FTlZTCgogIH07CiMgNTAxICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDIgMwoKCmV4dGVybiBs b25nIGludCBwYXRoY29uZiAoY29uc3QgY2hhciAqX19wYXRoLCBpbnQgX19uYW1lKSA7CgoKZXh0 ZXJuIGxvbmcgaW50IGZwYXRoY29uZiAoaW50IF9fZmQsIGludCBfX25hbWUpIDsKCgpleHRlcm4g bG9uZyBpbnQgc3lzY29uZiAoaW50IF9fbmFtZSkgOwoKCgpleHRlcm4gc2l6ZV90IGNvbmZzdHIg KGludCBfX25hbWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19sZW4pIDsKCgoKCmV4dGVybiBfX3Bp ZF90IGdldHBpZCAodm9pZCkgOwoKCmV4dGVybiBfX3BpZF90IGdldHBwaWQgKHZvaWQpIDsKCgoK CmV4dGVybiBfX3BpZF90IGdldHBncnAgKHZvaWQpIDsKIyA1MzYgIi91c3IvaW5jbHVkZS91bmlz dGQuaCIgMwpleHRlcm4gX19waWRfdCBfX2dldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCmV4dGVy biBfX3BpZF90IGdldHBnaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKCgoKZXh0ZXJuIGludCBzZXRw Z2lkIChfX3BpZF90IF9fcGlkLCBfX3BpZF90IF9fcGdpZCkgOwojIDU2MiAiL3Vzci9pbmNsdWRl L3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQgc2V0cGdycCAodm9pZCkgOwojIDU4MCAiL3Vzci9pbmNs dWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBfX3BpZF90IHNldHNpZCAodm9pZCkgOwoKCgpleHRlcm4g X19waWRfdCBnZXRzaWQgKF9fcGlkX3QgX19waWQpIDsKCgoKZXh0ZXJuIF9fdWlkX3QgZ2V0dWlk ICh2b2lkKSA7CgoKZXh0ZXJuIF9fdWlkX3QgZ2V0ZXVpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dp ZF90IGdldGdpZCAodm9pZCkgOwoKCmV4dGVybiBfX2dpZF90IGdldGVnaWQgKHZvaWQpIDsKCgoK CmV4dGVybiBpbnQgZ2V0Z3JvdXBzIChpbnQgX19zaXplLCBfX2dpZF90IF9fbGlzdFtdKSA7CgoK CmV4dGVybiBpbnQgZ3JvdXBfbWVtYmVyIChfX2dpZF90IF9fZ2lkKSA7CgoKCgoKCmV4dGVybiBp bnQgc2V0dWlkIChfX3VpZF90IF9fdWlkKSA7CgoKCgpleHRlcm4gaW50IHNldHJldWlkIChfX3Vp ZF90IF9fcnVpZCwgX191aWRfdCBfX2V1aWQpIDsKCgoKCmV4dGVybiBpbnQgc2V0ZXVpZCAoX191 aWRfdCBfX3VpZCkgOwoKCgoKCgpleHRlcm4gaW50IHNldGdpZCAoX19naWRfdCBfX2dpZCkgOwoK CgoKZXh0ZXJuIGludCBzZXRyZWdpZCAoX19naWRfdCBfX3JnaWQsIF9fZ2lkX3QgX19lZ2lkKSA7 CgoKCgpleHRlcm4gaW50IHNldGVnaWQgKF9fZ2lkX3QgX19naWQpIDsKCgoKCgoKZXh0ZXJuIF9f cGlkX3QgZm9yayAodm9pZCkgOwoKCgoKCgpleHRlcm4gX19waWRfdCB2Zm9yayAodm9pZCkgOwoK CgoKCmV4dGVybiBjaGFyICp0dHluYW1lIChpbnQgX19mZCkgOwoKCgpleHRlcm4gaW50IHR0eW5h bWVfciAoaW50IF9fZmQsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19idWZsZW4pIDsKCgoKZXh0ZXJu IGludCBpc2F0dHkgKGludCBfX2ZkKSA7CgoKCgoKZXh0ZXJuIGludCB0dHlzbG90ICh2b2lkKSA7 CgoKCgpleHRlcm4gaW50IGxpbmsgKGNvbnN0IGNoYXIgKl9fZnJvbSwgY29uc3QgY2hhciAqX190 bykgOwoKCgpleHRlcm4gaW50IHN5bWxpbmsgKGNvbnN0IGNoYXIgKl9fZnJvbSwgY29uc3QgY2hh ciAqX190bykgOwoKCgoKZXh0ZXJuIGludCByZWFkbGluayAoY29uc3QgY2hhciAqIF9fcGF0aCwg Y2hhciAqIF9fYnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4pIDsKCgoKZXh0 ZXJuIGludCB1bmxpbmsgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCmV4dGVybiBpbnQgcm1kaXIg KGNvbnN0IGNoYXIgKl9fcGF0aCkgOwoKCgpleHRlcm4gX19waWRfdCB0Y2dldHBncnAgKGludCBf X2ZkKSA7CgoKZXh0ZXJuIGludCB0Y3NldHBncnAgKGludCBfX2ZkLCBfX3BpZF90IF9fcGdycF9p ZCkgOwoKCgpleHRlcm4gY2hhciAqZ2V0bG9naW4gKHZvaWQpIDsKCgoKCmV4dGVybiBpbnQgZ2V0 bG9naW5fciAoY2hhciAqX19uYW1lLCBzaXplX3QgX19uYW1lX2xlbikgOwoKCgoKZXh0ZXJuIGlu dCBzZXRsb2dpbiAoY29uc3QgY2hhciAqX19uYW1lKSA7CiMgNzI2ICIvdXNyL2luY2x1ZGUvdW5p c3RkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDEgMwojIDM4ICIvdXNyL2luY2x1 ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuICJDIiB7CiMgNDcgIi91c3IvaW5jbHVkZS9nZXRvcHQuaCIg MwpleHRlcm4gY2hhciAqb3B0YXJnOwojIDYxICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0 ZXJuIGludCBvcHRpbmQ7CgoKCgpleHRlcm4gaW50IG9wdGVycjsKCgoKZXh0ZXJuIGludCBvcHRv cHQ7CiMgMTQ1ICIvdXNyL2luY2x1ZGUvZ2V0b3B0LmgiIDMKZXh0ZXJuIGludCBnZXRvcHQgKGlu dCBfX19hcmdjLCBjaGFyICpjb25zdCAqX19fYXJndiwgY29uc3QgY2hhciAqX19zaG9ydG9wdHMp OwojIDE3NSAiL3Vzci9pbmNsdWRlL2dldG9wdC5oIiAzCn0KIyA3MjcgIi91c3IvaW5jbHVkZS91 bmlzdGQuaCIgMiAzCgoKCgoKCgpleHRlcm4gaW50IGdldGhvc3RuYW1lIChjaGFyICpfX25hbWUs IHNpemVfdCBfX2xlbikgOwoKCgoKCgpleHRlcm4gaW50IHNldGhvc3RuYW1lIChjb25zdCBjaGFy ICpfX25hbWUsIHNpemVfdCBfX2xlbikgOwoKCgpleHRlcm4gaW50IHNldGhvc3RpZCAobG9uZyBp bnQgX19pZCkgOwoKCgoKCmV4dGVybiBpbnQgZ2V0ZG9tYWlubmFtZSAoY2hhciAqX19uYW1lLCBz aXplX3QgX19sZW4pIDsKZXh0ZXJuIGludCBzZXRkb21haW5uYW1lIChjb25zdCBjaGFyICpfX25h bWUsIHNpemVfdCBfX2xlbikgOwoKCgoKCmV4dGVybiBpbnQgdmhhbmd1cCAodm9pZCkgOwoKCmV4 dGVybiBpbnQgcmV2b2tlIChjb25zdCBjaGFyICpfX2ZpbGUpIDsKCgoKCgoKCmV4dGVybiBpbnQg cHJvZmlsICh1bnNpZ25lZCBzaG9ydCBpbnQgKl9fc2FtcGxlX2J1ZmZlciwgc2l6ZV90IF9fc2l6 ZSwKICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX29mZnNldCwgdW5zaWduZWQgaW50IF9fc2Nh bGUpIDsKCgoKCgpleHRlcm4gaW50IGFjY3QgKGNvbnN0IGNoYXIgKl9fbmFtZSkgOwoKCgpleHRl cm4gY2hhciAqZ2V0dXNlcnNoZWxsICh2b2lkKSA7CmV4dGVybiB2b2lkIGVuZHVzZXJzaGVsbCAo dm9pZCkgOwpleHRlcm4gdm9pZCBzZXR1c2Vyc2hlbGwgKHZvaWQpIDsKCgoKCgpleHRlcm4gaW50 IGRhZW1vbiAoaW50IF9fbm9jaGRpciwgaW50IF9fbm9jbG9zZSkgOwoKCgoKCgpleHRlcm4gaW50 IGNocm9vdCAoY29uc3QgY2hhciAqX19wYXRoKSA7CgoKCmV4dGVybiBjaGFyICpnZXRwYXNzIChj b25zdCBjaGFyICpfX3Byb21wdCkgOwoKCgoKCmV4dGVybiBpbnQgZnN5bmMgKGludCBfX2ZkKSA7 CgoKCgoKCmV4dGVybiBsb25nIGludCBnZXRob3N0aWQgKHZvaWQpIDsKCgpleHRlcm4gdm9pZCBz eW5jICh2b2lkKSA7CgoKCgpleHRlcm4gaW50IGdldHBhZ2VzaXplICh2b2lkKSA7CgoKCgpleHRl cm4gaW50IHRydW5jYXRlIChjb25zdCBjaGFyICpfX2ZpbGUsIF9fb2ZmX3QgX19sZW5ndGgpIDsK IyA4MzYgIi91c3IvaW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IHRydW5jYXRlNjQgKGNv bnN0IGNoYXIgKl9fZmlsZSwgX19vZmY2NF90IF9fbGVuZ3RoKSA7CgoKCgpleHRlcm4gaW50IGZ0 cnVuY2F0ZSAoaW50IF9fZmQsIF9fb2ZmX3QgX19sZW5ndGgpIDsKIyA4NTEgIi91c3IvaW5jbHVk ZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGZ0cnVuY2F0ZTY0IChpbnQgX19mZCwgX19vZmY2NF90 IF9fbGVuZ3RoKSA7CgoKCgoKZXh0ZXJuIGludCBnZXRkdGFibGVzaXplICh2b2lkKSA7CiMgODY2 ICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBicmsgKHZvaWQgKl9fYWRkcikg OwoKCgoKCmV4dGVybiB2b2lkICpzYnJrIChpbnRwdHJfdCBfX2RlbHRhKSA7CiMgODg3ICIvdXNy L2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGxvbmcgaW50IHN5c2NhbGwgKGxvbmcgaW50IF9f c3lzbm8sIC4uLikgOwojIDkwNyAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4dGVybiBpbnQg bG9ja2YgKGludCBfX2ZkLCBpbnQgX19jbWQsIF9fb2ZmX3QgX19sZW4pIDsKIyA5MTcgIi91c3Iv aW5jbHVkZS91bmlzdGQuaCIgMwpleHRlcm4gaW50IGxvY2tmNjQgKGludCBfX2ZkLCBpbnQgX19j bWQsIF9fb2ZmNjRfdCBfX2xlbikgOwojIDkzOCAiL3Vzci9pbmNsdWRlL3VuaXN0ZC5oIiAzCmV4 dGVybiBpbnQgZmRhdGFzeW5jIChpbnQgX19maWxkZXMpIDsKCgoKCgoKCmV4dGVybiBjaGFyICpj cnlwdCAoY29uc3QgY2hhciAqX19rZXksIGNvbnN0IGNoYXIgKl9fc2FsdCkgOwoKCgpleHRlcm4g dm9pZCBlbmNyeXB0IChjaGFyICpfX2Jsb2NrLCBpbnQgX19lZGZsYWcpIDsKCgoKCgoKZXh0ZXJu IHZvaWQgc3dhYiAoY29uc3Qgdm9pZCAqIF9fZnJvbSwgdm9pZCAqIF9fdG8sCiAgICAgICAgICAg ICAgICAgIHNzaXplX3QgX19uKSA7CgoKCgoKCgpleHRlcm4gY2hhciAqY3Rlcm1pZCAoY2hhciAq X19zKSA7CiMgOTgzICIvdXNyL2luY2x1ZGUvdW5pc3RkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFk X2F0Zm9yayAodm9pZCAoKl9fcHJlcGFyZSkgKHZvaWQpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICB2b2lkICgqX19wYXJlbnQpICh2b2lkKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg dm9pZCAoKl9fY2hpbGQpICh2b2lkKSkgOwoKCn0KIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvY29uZmlnL3Bvc2l4X2ZlYXR1cmVzLmhwcCIgMgojIDY4ICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9jb25maWcvcGxhdGZvcm0vbGludXguaHBwIiAyCiMgNTQgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L2NvbmZpZy5ocHAiIDIKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9jb25maWcvc3VmZml4LmhwcCIgMQojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9jb25maWcvc3VmZml4LmhwcCIKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL2xpbWl0cy5oIiAxIDMKIyAxMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEg Ii91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3lz bGltaXRzLmgiIDEgMwoKCgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1s aW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDEzMiAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9saW1pdHMuaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9saW1pdHMuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS9iaXRzL3dvcmRzaXplLmgiIDEgMwojIDQ2ICIvdXNyL2luY2x1ZGUv bGltaXRzLmgiIDIgMwojIDE0NCAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAzCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvcG9zaXgxX2xpbS5oIiAxIDMKIyAxMjYgIi91c3IvaW5jbHVkZS9iaXRzL3Bv c2l4MV9saW0uaCIgMwojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2xvY2FsX2xpbS5oIiAxIDMKIyAz NiAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxfbGltLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvbGlu dXgvbGltaXRzLmgiIDEgMwojIDM3ICIvdXNyL2luY2x1ZGUvYml0cy9sb2NhbF9saW0uaCIgMiAz CiMgMTI3ICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDFfbGltLmgiIDIgMwojIDE0NSAiL3Vzci9p bmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9wb3NpeDJfbGlt LmgiIDEgMwojIDE0OSAiL3Vzci9pbmNsdWRlL2xpbWl0cy5oIiAyIDMKCgoKIyAxICIvdXNyL2lu Y2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMSAzCiMgMzQgIi91c3IvaW5jbHVkZS9iaXRzL3hvcGVu X2xpbS5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvc3RkaW9fbGltLmgiIDEgMwojIDM1ICIv dXNyL2luY2x1ZGUvYml0cy94b3Blbl9saW0uaCIgMiAzCiMgMTUzICIvdXNyL2luY2x1ZGUvbGlt aXRzLmgiIDIgMwojIDEzMyAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdu dS8zLjIvaW5jbHVkZS9saW1pdHMuaCIgMiAzCiMgOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9p Njg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zeXNsaW1pdHMuaCIgMiAzCiMgMTIgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgi IDIgMwojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcvc3VmZml4LmhwcCIg MgojIDU4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9jb25maWcuaHBwIiAyCiMgMTkgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3N0YXRpY19hc3NlcnQuaHBwIiAyCgoKCgoKCgpuYW1l c3BhY2UgYm9vc3R7CgoKdGVtcGxhdGUgPGJvb2wgeD4gc3RydWN0IFNUQVRJQ19BU1NFUlRJT05f RkFJTFVSRTsKCnRlbXBsYXRlIDw+IHN0cnVjdCBTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8dHJ1 ZT4geyBlbnVtIHsgdmFsdWUgPSAxIH07IH07CgoKdGVtcGxhdGU8aW50IHg+IHN0cnVjdCBzdGF0 aWNfYXNzZXJ0X3Rlc3R7fTsKCn0KIyA3ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5j dGlvbi5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIg MQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXQuaHBwIgojIDEgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdF9md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgYXRfdHJhaXRzOwp0ZW1w bGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBzdHJ1Y3QgYXQ7Cgp9Cn0KIyAy MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIgMgojIDEgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMQojIDIxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2ludGVncmFsX2NfZndkLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfY19md2QuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5kLmhwcCIgMQojIDIwICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvd29ya2Fyb3VuZC5ocHAiCiMg MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvZGV0YWlsL3dvcmthcm91bmQuaHBwIiAxCiMg MjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy93b3JrYXJvdW5k LmhwcCIgMgojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfY19m d2QuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRl PCB0eXBlbmFtZSBULCBUIE4gPiBzdHJ1Y3QgaW50ZWdyYWxfYzsKCn19CiMgMjIgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ljZV9jYXN0LmhwcCIgMQojIDIzICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvaW50ZWdyYWxfYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvY3Rwcy5ocHAiIDEKIyAyNCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ludGVncmFsX2MuaHBwIiAyCiMgMzYgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIgMQojIDIxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvbnR0cC5ocHAiIDEKIyAy MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL250dHAuaHBwIgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjLmhwcCIg MQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvbnR0cC5o cHAiIDIKIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW50ZWdyYWxf d3JhcHBlci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9j b25maWcvc3RhdGljX2NvbnN0YW50LmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvYXV4Xy9pbnRlZ3JhbF93cmFwcGVyLmhwcCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NhdC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2NvbmZpZy9jb25maWcuaHBwIiAxCiMgMTkgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jYXQuaHBwIiAyCiMgMjYgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ludGVncmFsX3dyYXBwZXIuaHBwIiAyCiMg MzkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ludGVncmFsX3dyYXBwZXIu aHBwIgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFt ZSBULCBUIE4gPgpzdHJ1Y3QgaW50ZWdyYWxfYwp7CiAgICBzdGF0aWMgY29uc3QgVCB2YWx1ZSA9 IE47CgoKCgoKICAgIHR5cGVkZWYgaW50ZWdyYWxfYyB0eXBlOwoKICAgIHR5cGVkZWYgVCB2YWx1 ZV90eXBlOwojIDcwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbnRlZ3Jh bF93cmFwcGVyLmhwcCIKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzwgVCwgc3RhdGljX2Nhc3Q8VD4o KHZhbHVlICsgMSkpID4gbmV4dDsKICAgIHR5cGVkZWYgaW50ZWdyYWxfYzwgVCwgc3RhdGljX2Nh c3Q8VD4oKHZhbHVlIC0gMSkpID4gcHJpb3I7CgoKCgoKCiAgICBvcGVyYXRvciBUKCkgY29uc3Qg eyByZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCn19CiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9pbnRlZ3JhbF9jLmhwcCIgMgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw YWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgYm9vbCBDID4Kc3RydWN0IGludGVncmFsX2M8Ym9vbCwgQz4K ewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBDOwogICAgdHlwZWRlZiBpbnRlZ3JhbF9j IHR5cGU7CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gdGhpcy0+dmFsdWU7IH0K fTsKfX0KIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F0LmhwcCIgMgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIiAxCiMgMjAg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIgojIDEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIiAxCiMgMjAgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmRfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYmVnaW5fZW5kX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7 Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBiZWdpbl90 cmFpdHM7CnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgZW5kX3RyYWl0czsKCnRlbXBs YXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBiZWdpbjsKdGVtcGxhdGU8IHR5cGVuYW1l IFNlcXVlbmNlID4gc3RydWN0IGVuZDsKCn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvYmVnaW5fZW5kLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL2JlZ2luX2VuZF9pbXBsLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZ19md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWdfZndkLmhwcCIKbmFtZXNwYWNlIGJvb3N0 IHsgbmFtZXNwYWNlIG1wbCB7CgpzdHJ1Y3QgbmVzdGVkX2JlZ2luX2VuZF90YWc7CnN0cnVjdCBu b25fc2VxdWVuY2VfdGFnOwoKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHNl cXVlbmNlX3RhZzsKCn19CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhf L2JlZ2luX2VuZF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w bC92b2lkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvdm9pZC5o cHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Jvb2wuaHBwIiAxCiMgMjEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9ib29sLmhwcCIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYm9vbF9md2QuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9ib29sX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj ZSBtcGwgewoKdGVtcGxhdGU8IGJvb2wgQ18gPiBzdHJ1Y3QgYm9vbF87CgoKdHlwZWRlZiBib29s Xzx0cnVlPiB0cnVlXzsKdHlwZWRlZiBib29sXzxmYWxzZT4gZmFsc2VfOwoKfX0KIyAyMiAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Jvb2wuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0 IHsgbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgYm9vbCBDXyA+IHN0cnVjdCBib29sXwp7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IENfOwogICAgdHlwZWRlZiBib29sXyB0eXBlOwog ICAgdHlwZWRlZiBib29sIHZhbHVlX3R5cGU7CiAgICBvcGVyYXRvciBib29sKCkgY29uc3QgeyBy ZXR1cm4gdGhpcy0+dmFsdWU7IH0KfTsKCn19CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L21wbC92b2lkLmhwcCIgMgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoK CgoKCnN0cnVjdCB2b2lkXyB7fTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0IGlzX3Zv aWRfCiAgICA6IGZhbHNlXwp7CgoKCn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBpc192b2lkXzx2b2lk Xz4KICAgIDogdHJ1ZV8KewoKCgp9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L21wbC9hdXhfL2JlZ2luX2VuZF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9hdXhfL3RyYWl0c19sYW1iZGFfc3BlYy5ocHAiIDEKIyAyMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHJhaXRzX2xhbWJkYV9zcGVjLmhwcCIKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1z LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9j ZXNzb3IvcGFyYW1zLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4 Xy9jb25maWcvcHJlcHJvY2Vzc29yLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvcGFyYW1zLmhwcCIgMgojIDIyICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy90cmFpdHNfbGFtYmRhX3NwZWMuaHBwIiAyCiMgMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5ocHAiIDEK IyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xhbWJkYS5o cHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL3R0cC5o cHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vY29uZmlnL2xh bWJkYS5ocHAiIDIKIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHJh aXRzX2xhbWJkYV9zcGVjLmhwcCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvYXV4Xy9jb25maWcvZXRpLmhwcCIgMQojIDI1ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7 Cm5hbWVzcGFjZSBtcGwgewoKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgYmVn aW5fdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdv cml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVlbmNlOjpiZWdpbiB0eXBl OwogICAgfTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgZW5kX3RyYWl0cwp7 CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICB7 CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6ZW5kIHR5cGU7CiAgICB9Owp9Owoj IDY1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9iZWdpbl9lbmRfaW1wbC5o cHAiCnRlbXBsYXRlPD4gc3RydWN0IGJlZ2luX3RyYWl0czxuZXN0ZWRfYmVnaW5fZW5kX3RhZz4g eyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtIHsgdHlwZWRl ZiB0eXBlbmFtZSBTZXF1ZW5jZTo6YmVnaW4gdHlwZTsgfTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3Qg ZW5kX3RyYWl0czxuZXN0ZWRfYmVnaW5fZW5kX3RhZz4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2Vx dWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtIHsgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6ZW5k IHR5cGU7IH07IH07CgoKCgp0ZW1wbGF0ZTw+IHN0cnVjdCBiZWdpbl90cmFpdHM8bm9uX3NlcXVl bmNlX3RhZz4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGht IHsgdHlwZWRlZiB2b2lkXyB0eXBlOyB9OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBlbmRfdHJhaXRz PG5vbl9zZXF1ZW5jZV90YWc+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0 IGFsZ29yaXRobSB7IHR5cGVkZWYgdm9pZF8gdHlwZTsgfTsgfTsKIyA4MiAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYmVnaW5fZW5kX2ltcGwuaHBwIgoKCgp9Cn0KIyAyMiAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JlZ2luX2VuZC5ocHAiIDIKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9zZXF1ZW5jZV90YWcuaHBwIiAxCiMgMzAg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3NlcXVlbmNlX3RhZy5ocHAiCiMg MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiIDEKIyAy MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiCiMgMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3RhZy5ocHAiIDEKIyAyMCAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3RhZy5ocHAiCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3h4eC5ocHAiIDEKIyAyMCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3h4eC5ocHAiCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHlwZV93cmFwcGVyLmhwcCIgMQojIDIwICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy90eXBlX3dyYXBwZXIuaHBwIgpuYW1l c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwg dHlwZW5hbWUgVCA+IHN0cnVjdCB0eXBlX3dyYXBwZXIKewogICAgdHlwZWRlZiBUIHR5cGU7Cn07 Cgp9Cn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4 LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3llc19uby5o cHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8veWVzX25vLmhw cCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoKdHlw ZWRlZiBjaGFyICgmbm9fdGFnKVsxXTsKdHlwZWRlZiBjaGFyICgmeWVzX3RhZylbMl07Cgp9Cn0K fQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4LmhwcCIg MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9tc3ZjX3R5 cGVuYW1lLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9o YXNfeHh4LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Nv bmZpZy9vdmVybG9hZF9yZXNvbHV0aW9uLmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9oYXNfeHh4LmhwcCIgMgojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9oYXNfdGFnLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNw YWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IGJvb3N0Ojpt cGw6OmF1eDo6eWVzX3RhZyBoYXNfdGFnX2hlbHBlciggYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dy YXBwZXI8VD4gY29uc3Qgdm9sYXRpbGUqICwgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dyYXBwZXI8 dHlwZW5hbWUgVDo6dGFnPiogPSAwICk7IGJvb3N0OjptcGw6OmF1eDo6bm9fdGFnIGhhc190YWdf aGVscGVyKC4uLik7IHRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGhhc190YWcgeyB0eXBl ZGVmIGJvb3N0OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPFQ+IHRfOyBzdGF0aWMgY29uc3QgYm9v bCB2YWx1ZSA9IHNpemVvZigoaGFzX3RhZ19oZWxwZXIpKHN0YXRpY19jYXN0PHRfKj4oMCkpKSA9 PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsgfTsKfX19CiMgMjIgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX2JlZ2luLmhwcCIgMQojIDIyICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfYmVnaW4uaHBwIgpuYW1lc3BhY2UgYm9v c3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7CnRlbXBsYXRlPCB0eXBlbmFtZSBU ID4gYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnIGhhc19iZWdpbl9oZWxwZXIoIGJvb3N0OjptcGw6 OmF1eDo6dHlwZV93cmFwcGVyPFQ+IGNvbnN0IHZvbGF0aWxlKiAsIGJvb3N0OjptcGw6OmF1eDo6 dHlwZV93cmFwcGVyPHR5cGVuYW1lIFQ6OmJlZ2luPiogPSAwICk7IGJvb3N0OjptcGw6OmF1eDo6 bm9fdGFnIGhhc19iZWdpbl9oZWxwZXIoLi4uKTsgdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1 Y3QgaGFzX2JlZ2luIHsgdHlwZWRlZiBib29zdDo6bXBsOjphdXg6OnR5cGVfd3JhcHBlcjxUPiB0 Xzsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoKGhhc19iZWdpbl9oZWxwZXIpKHN0 YXRpY19jYXN0PHRfKj4oMCkpKSA9PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsg fTsKfX19CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcu aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVj LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy92b2lkX3Nw ZWMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGFfZndkLmhw cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRhX2Z3ZC5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX2FyaXR5X3Bh cmFtLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRhX2Z3 ZC5ocHAiIDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgp0ZW1wbGF0ZTwg dHlwZW5hbWUgVCA+CnN0cnVjdCBsYW1iZGE7CgoKCgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvaW50X2Z3ZC5ocHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2ludF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs IHsKdGVtcGxhdGU8IGludCBOID4gc3RydWN0IGludF87Cn19CiMgMjMgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc29yL2VudW0uaHBwIiAxCiMgMjUgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFt c190YWlsLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9w cmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvbGltaXRzL2FyaXR5LmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9kdHAuaHBwIiAxCiMg MjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZf cGFyYW1zX3RhaWwuaHBwIiAyCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVw cm9jZXNzb3IvY29tbWFfaWYuaHBwIiAxCiMgMTYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L3ByZXByb2Nlc3Nvci9jb21tYV9pZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcCIgMQojIDE5ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBw IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb250cm9sL2lm LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvY29u dHJvbC9pZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29y L2NvbnRyb2wvaWlmLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVw cm9jZXNzb3IvY29udHJvbC9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9wcmVwcm9jZXNzb3IvbG9naWNhbC9ib29sLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9wcmVwcm9jZXNzb3IvY29udHJvbC9pZi5ocHAiIDIKIyAyMCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hX2lmLmhwcCIg MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVz L2VtcHR5LmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNz b3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvcHJlcHJvY2Vzc29yL3B1bmN0dWF0aW9uL2NvbW1hLmhwcCIgMQojIDIyICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvcHVuY3R1YXRpb24vY29tbWFfaWYuaHBw IiAyCiMgMTcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9jb21tYV9p Zi5ocHAiIDIKIyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJv Y2Vzc29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9hbmQuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L3ByZXByb2Nlc3Nvci9sb2dpY2FsL2FuZC5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2xvZ2ljYWwvYml0YW5kLmhwcCIgMQojIDIx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvbG9naWNhbC9hbmQuaHBw IiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nv ci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv cHJlcHJvY2Vzc29yL2lkZW50aXR5LmhwcCIgMQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3ByZXByb2Nlc3Nvci9mYWNpbGl0aWVzL2lkZW50aXR5LmhwcCIgMQojIDE3ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvaWRlbnRpdHkuaHBwIiAyCiMgMjcg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9kZWZfcGFy YW1zX3RhaWwuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vz c29yL2VtcHR5LmhwcCIgMQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4 Xy9wcmVwcm9jZXNzb3IvZGVmX3BhcmFtc190YWlsLmhwcCIgMgoKCgoKCgoKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvZmlsdGVyX3BhcmFtcy5o cHAiIDEKIyAzNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vz c29yL2RlZl9wYXJhbXNfdGFpbC5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3Ivc3ViLmhwcCIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzb3IvdHVwbGUuaHBwIiAxCiMgMjEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nvci9zdWIuaHBw IiAyCiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3Nv ci9kZWZfcGFyYW1zX3RhaWwuaHBwIiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvYXV4Xy9hcml0eS5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv bXBsL2F1eF8vdm9pZF9zcGVjLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2F1eF8vdGVtcGxhdGVfYXJpdHlfZndkLmhwcCIKbmFtZXNwYWNlIGJv b3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1l IEYgPiBzdHJ1Y3QgdGVtcGxhdGVfYXJpdHk7Cgp9Cn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXV4Xy92b2lkX3NwZWMuaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FsZ29yaXRobV9uYW1lc3BhY2UuaHBwIiAxCiMgMzAgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ZvaWRfc3BlYy5ocHAiIDIKIyAyNCAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiIDIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pc19tc3ZjX2V0aV9hcmcuaHBwIiAx CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2lzX21zdmNfZXRpX2Fy Zy5ocHAiCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsK IyA2NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXNfbXN2Y19ldGlfYXJn LmhwcCIKfX19CiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90 YWcuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKIyA4MCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NlcXVlbmNlX3RhZy5ocHAiCm5hbWVzcGFjZSBh dXggewoKdGVtcGxhdGU8IGJvb2wgaGFzX3RhZ18sIGJvb2wgaGFzX2JlZ2luXyA+CnN0cnVjdCBz ZXF1ZW5jZV90YWdfaW1wbAp7CgoKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0 cnVjdCByZXN1bHQyXzsKfTsKIyAxMDAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9z ZXF1ZW5jZV90YWcuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBzZXF1ZW5jZV90YWdfaW1wbDx0cnVl LHRydWU+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsg dHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6dGFnIHR5cGU7IH07IH07CnRlbXBsYXRlPD4gc3Ry dWN0IHNlcXVlbmNlX3RhZ19pbXBsPHRydWUsZmFsc2U+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNl cXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsgdHlwZWRlZiB0eXBlbmFtZSBTZXF1ZW5jZTo6dGFn IHR5cGU7IH07IH07CnRlbXBsYXRlPD4gc3RydWN0IHNlcXVlbmNlX3RhZ19pbXBsPGZhbHNlLHRy dWU+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHJlc3VsdDJfIHsgdHlw ZWRlZiBuZXN0ZWRfYmVnaW5fZW5kX3RhZyB0eXBlOyB9OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBz ZXF1ZW5jZV90YWdfaW1wbDxmYWxzZSxmYWxzZT4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVu Y2UgPiBzdHJ1Y3QgcmVzdWx0Ml8geyB0eXBlZGVmIG5vbl9zZXF1ZW5jZV90YWcgdHlwZTsgfTsg fTsKCgoKfQoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgID4K c3RydWN0IHNlcXVlbmNlX3RhZwogICAgOiBhdXg6OnNlcXVlbmNlX3RhZ19pbXBsPAogICAgICAg ICAgOjpib29zdDo6bXBsOjphdXg6Omhhc190YWc8U2VxdWVuY2U+Ojp2YWx1ZQogICAgICAgICwg Ojpib29zdDo6bXBsOjphdXg6Omhhc19iZWdpbjxTZXF1ZW5jZT46OnZhbHVlCiAgICAgICAgPjo6 dGVtcGxhdGUgcmVzdWx0Ml88U2VxdWVuY2U+CnsKfTsKIyAxMjkgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9zZXF1ZW5jZV90YWcuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBzZXF1ZW5j ZV90YWc8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9p ZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9 dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBzZXF1ZW5jZV90YWc8IFQxID4geyB9OyB9OyB0ZW1wbGF0 ZTw+IHN0cnVjdCBsYW1iZGE8IHNlcXVlbmNlX3RhZzwgdm9pZF8gPiA+IHsgdHlwZWRlZiBzZXF1 ZW5jZV90YWc8IHZvaWRfID4gdHlwZTsgfTsKCn19CiMgMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL3NlcXVlbmNlX3RhZy5ocHAiIDIKIyAyMyAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2JlZ2luX2VuZC5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2F1eF8vbGFtYmRhX3N1cHBvcnQuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9iZWdpbl9lbmQuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3Qgewpu YW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZv aWRfCiAgICA+CnN0cnVjdCBiZWdpbgp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIHNlcXVlbmNlX3Rh ZzxTZXF1ZW5jZT46OnR5cGUgdGFnXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmVnaW5fdHJhaXRz PCB0YWdfID4KICAgICAgICA6OnRlbXBsYXRlIGFsZ29yaXRobTwgU2VxdWVuY2UgPjo6dHlwZSB0 eXBlOwogICAKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAg ICA+CnN0cnVjdCBlbmQKewogICAgdHlwZWRlZiB0eXBlbmFtZSBzZXF1ZW5jZV90YWc8U2VxdWVu Y2U+Ojp0eXBlIHRhZ187CiAgICB0eXBlZGVmIHR5cGVuYW1lIGVuZF90cmFpdHM8IHRhZ18gPgog ICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSA+Ojp0eXBlIHR5cGU7CiAgIAp9 OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgYmVnaW48IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUg VDEgLCB0eXBlbmFtZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBiZWdpbjwgVDEgPiB7 IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgYmVnaW48IHZvaWRfID4gPiB7IHR5cGVk ZWYgYmVnaW48IHZvaWRfID4gdHlwZTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgZW5kPCB2b2lkXyA+ IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0eXBlbmFtZSBU MyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0 IGFwcGx5IDogZW5kPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBlbmQ8 IHZvaWRfID4gPiB7IHR5cGVkZWYgZW5kPCB2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYXRfaW1wbC5ocHAiIDIKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDEKIyAyMCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9uZWdhdGUuaHBwIiAxCiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L21wbC9uZWdhdGUuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h dXhfL3R5cGVvZi5ocHAiIDEKIyAzMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1 eF8vdHlwZW9mLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgpuYW1l c3BhY2UgYXV4IHsKdGVtcGxhdGU8IGxvbmcgTiA+IHN0cnVjdCB0eXBlb2ZfYW5zd2VyIHsgdHlw ZWRlZiBjaGFyIHR5cGVbTl07IH07CnRlbXBsYXRlPCBsb25nIFMgPiBzdHJ1Y3QgdHlwZW9mX2M7 Cn0KIyA1NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdHlwZW9mLmhwcCIK fQp9CgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7IHRl bXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDE+IHsgdHlwZWRlZiBib29sIHR5cGU7IH07IHR5cGVv Zl9hbnN3ZXI8MT46OnR5cGUmIHR5cGVfaW5kZXgoYm9vbCBjb25zdCYpOyB9fX0KbmFtZXNwYWNl IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVj dCB0eXBlb2ZfYzwyPiB7IHR5cGVkZWYgc2lnbmVkIGNoYXIgdHlwZTsgfTsgdHlwZW9mX2Fuc3dl cjwyPjo6dHlwZSYgdHlwZV9pbmRleChzaWduZWQgY2hhciBjb25zdCYpOyB9fX0KbmFtZXNwYWNl IGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVj dCB0eXBlb2ZfYzwzPiB7IHR5cGVkZWYgdW5zaWduZWQgY2hhciB0eXBlOyB9OyB0eXBlb2ZfYW5z d2VyPDM+Ojp0eXBlJiB0eXBlX2luZGV4KHVuc2lnbmVkIGNoYXIgY29uc3QmKTsgfX19Cm5hbWVz cGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsgdGVtcGxhdGU8PiBz dHJ1Y3QgdHlwZW9mX2M8ND4geyB0eXBlZGVmIGNoYXIgdHlwZTsgfTsgdHlwZW9mX2Fuc3dlcjw0 Pjo6dHlwZSYgdHlwZV9pbmRleChjaGFyIGNvbnN0Jik7IH19fQoKbmFtZXNwYWNlIGJvb3N0IHsg bmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlb2Zf Yzw1PiB7IHR5cGVkZWYgd2NoYXJfdCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDU+Ojp0eXBlJiB0 eXBlX2luZGV4KHdjaGFyX3QgY29uc3QmKTsgfX19CgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3Bh Y2UgbXBsIHsgbmFtZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDY+IHsg dHlwZWRlZiBzaG9ydCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDY+Ojp0eXBlJiB0eXBlX2luZGV4 KHNob3J0IGNvbnN0Jik7IH19fQpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBsIHsgbmFt ZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDc+IHsgdHlwZWRlZiB1bnNp Z25lZCBzaG9ydCB0eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDc+Ojp0eXBlJiB0eXBlX2luZGV4KHVu c2lnbmVkIHNob3J0IGNvbnN0Jik7IH19fQpuYW1lc3BhY2UgYm9vc3QgeyBuYW1lc3BhY2UgbXBs IHsgbmFtZXNwYWNlIGF1eCB7IHRlbXBsYXRlPD4gc3RydWN0IHR5cGVvZl9jPDg+IHsgdHlwZWRl ZiBpbnQgdHlwZTsgfTsgdHlwZW9mX2Fuc3dlcjw4Pjo6dHlwZSYgdHlwZV9pbmRleChpbnQgY29u c3QmKTsgfX19Cm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4 IHsgdGVtcGxhdGU8PiBzdHJ1Y3QgdHlwZW9mX2M8OT4geyB0eXBlZGVmIHVuc2lnbmVkIGludCB0 eXBlOyB9OyB0eXBlb2ZfYW5zd2VyPDk+Ojp0eXBlJiB0eXBlX2luZGV4KHVuc2lnbmVkIGludCBj b25zdCYpOyB9fX0KbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBh dXggeyB0ZW1wbGF0ZTw+IHN0cnVjdCB0eXBlb2ZfYzwxMD4geyB0eXBlZGVmIGxvbmcgdHlwZTsg fTsgdHlwZW9mX2Fuc3dlcjwxMD46OnR5cGUmIHR5cGVfaW5kZXgobG9uZyBjb25zdCYpOyB9fX0K bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggeyB0ZW1wbGF0 ZTw+IHN0cnVjdCB0eXBlb2ZfYzwxMT4geyB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgdHlwZTsgfTsg dHlwZW9mX2Fuc3dlcjwxMT46OnR5cGUmIHR5cGVfaW5kZXgodW5zaWduZWQgbG9uZyBjb25zdCYp OyB9fX0KIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25lZ2F0ZS5ocHAiIDIK CgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5 cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgbmVnYXRlCnsKICAgIHR5cGVkZWYgdHlwZW5h bWUgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlb2ZfYzwgc2l6ZW9mKDo6Ym9vc3Q6Om1wbDo6YXV4Ojp0 eXBlX2luZGV4KFQ6OnZhbHVlKSkgPjo6dHlwZSB2YWx1ZV90eXBlOwogICAgc3RhdGljIGNvbnN0 IHZhbHVlX3R5cGUgdmFsdWUgPSAoLVQ6OnZhbHVlKTsKCiAgICB0eXBlZGVmIGludGVncmFsX2M8 dmFsdWVfdHlwZSwgdmFsdWU+IHR5cGU7CgoKCgogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IG5l Z2F0ZTwgdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyID12b2lk XyAsdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12 b2lkXyA+IHN0cnVjdCBhcHBseSA6IG5lZ2F0ZTwgVDEgPiB7IH07IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGxhbWJkYTwgbmVnYXRlPCB2b2lkXyA+ID4geyB0eXBlZGVmIG5lZ2F0ZTwgdm9pZF8gPiB0 eXBlOyB9OwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hZHZhbmNl LmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sZXNzLmhwcCIgMQoj IDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGVzcy5ocHAiCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vdmFsdWVfd2tuZC5ocHAiIDEKIyAyNCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xlc3MuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9v c3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMSA9IHZvaWRf CiAgICAsIHR5cGVuYW1lIFQyID0gdm9pZF8KICAgID4Kc3RydWN0IGxlc3MKewogICAgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSAoIChUMTo6dmFsdWUpIDwgKFQyOjp2YWx1ZSkgKTsKCgoKCgog ICAgdHlwZWRlZiBib29sXzx2YWx1ZT4gdHlwZTsKCgoKCgoKCiAgIAp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgbGVzczwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFt ZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBU NSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBsZXNzPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8 PiBzdHJ1Y3QgbGFtYmRhPCBsZXNzPCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGxlc3M8IHZv aWRfLHZvaWRfID4gdHlwZTsgfTsKCnRlbXBsYXRlPCBsb25nIE4gPgpzdHJ1Y3QgbHQKewogICAg dGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBsZXNzPCBULGlu dGVncmFsX2M8bG9uZyxOPiA+CiAgICB7CgoKCgogICAgfTsKfTsKCn0KfQojIDIyICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvbXBsL2lmLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvaWYuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVt cGxhdGU8CiAgICAgIGJvb2wgQwogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFtZSBUMgog ICAgPgpzdHJ1Y3QgaWZfYwp7CiAgICB0eXBlZGVmIFQxIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAg ICAgdHlwZW5hbWUgVDEKICAgICwgdHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGlmX2M8ZmFsc2Us VDEsVDI+CnsKICAgIHR5cGVkZWYgVDIgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt ZSBDID0gdm9pZF8KICAgICwgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9 IHZvaWRfCiAgICA+CnN0cnVjdCBpZl8KewogcHJpdmF0ZToKCiAgICB0eXBlZGVmIGlmX2M8CgoK CiAgICAgICAgICBzdGF0aWNfY2FzdDxib29sPihDOjp2YWx1ZSkKCiAgICAgICAgLCBUMQogICAg ICAgICwgVDIKICAgICAgICA+IGFsbW9zdF90eXBlXzsKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5 cGVuYW1lIGFsbW9zdF90eXBlXzo6dHlwZSB0eXBlOwoKICAgCn07CiMgMTcyICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvaWYuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBpZl88IHZvaWRf LHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5h bWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBh cHBseSA6IGlmXzwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwg aWZfPCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGlmXzwgdm9pZF8sdm9pZF8sdm9p ZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h ZHZhbmNlLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRv cl90YWcuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRv cl90YWcuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnN0cnVjdCBpbnB1 dF9pdGVyX3RhZ187CnN0cnVjdCBmd2RfaXRlcl90YWdfOwpzdHJ1Y3QgYmlfaXRlcl90YWdfOwpz dHJ1Y3QgcmFfaXRlcl90YWdfOwoKdHlwZWRlZiBpbnB1dF9pdGVyX3RhZ18gaW5wdXRfaXRlcmF0 b3JfdGFnOwp0eXBlZGVmIGZ3ZF9pdGVyX3RhZ18gZm9yd2FyZF9pdGVyYXRvcl90YWc7CnR5cGVk ZWYgYmlfaXRlcl90YWdfIGJpZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnOwp0eXBlZGVmIHJhX2l0 ZXJfdGFnXyByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZzsKCn0KfQojIDI1ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwIiAxCiMgMjQgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYXBwbHkuaHBwIiAxCiMgMjUgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiIDIKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9uZXh0LmhwcCIgMQojIDI2ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hZHZhbmNlX2ZvcndhcmQuaHBwIiAy CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvdXNlX3By ZXByb2Nlc3NlZC5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1 eF8vYWR2YW5jZV9mb3J3YXJkLmhwcCIgMgoKCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAxCiMgMTkgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb25maWcvY29tcGlsZXIuaHBw IiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJl cHJvY2Vzc2VkLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9j ZXNzb3Ivc3RyaW5naXplLmhwcCIgMQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDIKCgoKCgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hZHZhbmNlX2Zvcndh cmQuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3BhY2Ug YXV4IHsKCnRlbXBsYXRlPCBsb25nIE4gPiBzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkOwoKdGVtcGxh dGU8PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDA+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJ dGVyYXRvciA+IHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRl cjA7CiAgICAgICAgdHlwZWRlZiBpdGVyMCB0eXBlOwogICAgfTsKCn07Cgp0ZW1wbGF0ZTw+CnN0 cnVjdCBhZHZhbmNlX2ZvcndhcmQ8MT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9y ID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAg ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgICAgIHR5cGVkZWYg aXRlcjEgdHlwZTsKICAgIH07Cgp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJk PDI+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVyYXRvciA+IHN0cnVjdCBhcHBseQogICAg ewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRlcjA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0 IGl0ZXIyOwogICAgICAgIHR5cGVkZWYgaXRlcjIgdHlwZTsKICAgIH07Cgp9OwoKdGVtcGxhdGU8 PgpzdHJ1Y3QgYWR2YW5jZV9mb3J3YXJkPDM+CnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBJdGVy YXRvciA+IHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYgSXRlcmF0b3IgaXRlcjA7 CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcjI6Om5leHQgaXRlcjM7CiAgICAgICAgdHlwZWRlZiBpdGVyMyB0eXBlOwogICAgfTsKCn07 Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBhZHZhbmNlX2ZvcndhcmQ8ND4KewogICAgdGVtcGxhdGU8IHR5 cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVy YXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwog ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyMjo6bmV4dCBpdGVyMzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXIzOjpuZXh0IGl0ZXI0OwogICAgICAgIHR5cGVkZWYgaXRlcjQgdHlwZTsKICAgIH07Cgp9OwoK dGVtcGxhdGU8IGxvbmcgTiA+CnN0cnVjdCBhZHZhbmNlX2ZvcndhcmQKewogICAgdGVtcGxhdGU8 IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBhZHZhbmNlX2ZvcndhcmQ8ND46OnRlbXBsYXRlIGFwcGx5PEl0ZXJhdG9yPjo6dHlw ZSBjaHVua19yZXN1bHRfOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYWR2YW5jZV9mb3J3YXJk PCggKE4gLSA0KSA8IDAgPyAwIDogTiAtIDQgKT46OnRlbXBsYXRlIGFwcGx5PGNodW5rX3Jlc3Vs dF8+Ojp0eXBlIHR5cGU7CiAgICB9Owp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzUgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfZm9yd2FyZC5ocHAiIDIKIyAy NiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIiAyCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYWR2YW5jZV9iYWNrd2FyZC5ocHAiIDEK IyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vYWR2YW5jZV9iYWNrd2Fy ZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJpb3IuaHBw IiAxCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2FkdmFuY2VfYmFj a3dhcmQuaHBwIiAyCiMgMzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Fk dmFuY2VfYmFja3dhcmQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h dXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2FkdmFuY2VfYmFj a3dhcmQuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3Bh Y2UgYXV4IHsKCnRlbXBsYXRlPCBsb25nIE4gPiBzdHJ1Y3QgYWR2YW5jZV9iYWNrd2FyZDsKCnRl bXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8MD4KewogICAgdGVtcGxhdGU8IHR5cGVu YW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRv ciBpdGVyMDsKICAgICAgICB0eXBlZGVmIGl0ZXIwIHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRl PD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8MT4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0 ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVy MDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsKICAgICAgICB0 eXBlZGVmIGl0ZXIxIHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2Vf YmFja3dhcmQ8Mj4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFw cGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXIxOjpwcmlvciBpdGVyMjsKICAgICAgICB0eXBlZGVmIGl0ZXIyIHR5cGU7CiAgICB9OwoKfTsK CnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8Mz4KewogICAgdGVtcGxhdGU8IHR5 cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBJdGVy YXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpwcmlvciBpdGVyMTsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpwcmlvciBpdGVyMjsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXIyOjpwcmlvciBpdGVyMzsKICAgICAgICB0eXBlZGVmIGl0ZXIzIHR5 cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGFkdmFuY2VfYmFja3dhcmQ8ND4Kewog ICAgdGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yID4gc3RydWN0IGFwcGx5CiAgICB7CiAgICAg ICAgdHlwZWRlZiBJdGVyYXRvciBpdGVyMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIw OjpwcmlvciBpdGVyMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpwcmlvciBpdGVy MjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpwcmlvciBpdGVyMzsKICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXIzOjpwcmlvciBpdGVyNDsKICAgICAgICB0eXBlZGVmIGl0ZXI0 IHR5cGU7CiAgICB9OwoKfTsKCnRlbXBsYXRlPCBsb25nIE4gPgpzdHJ1Y3QgYWR2YW5jZV9iYWNr d2FyZAp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgSXRlcmF0b3IgPiBzdHJ1Y3QgYXBwbHkKICAg IHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGFkdmFuY2VfYmFja3dhcmQ8ND46OnRlbXBsYXRl IGFwcGx5PEl0ZXJhdG9yPjo6dHlwZSBjaHVua19yZXN1bHRfOwogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgYWR2YW5jZV9iYWNrd2FyZDwoIChOIC0gNCkgPCAwID8gMCA6IE4gLSA0ICk+Ojp0ZW1w bGF0ZSBhcHBseTxjaHVua19yZXN1bHRfPjo6dHlwZSB0eXBlOwogICAgfTsKfTsKCn0KfQp9CiMg MjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vz c2VkLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hZHZh bmNlX2JhY2t3YXJkLmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv YWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9p dGVyYXRvcl9jYXRlZ29yeS5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv bXBsL2F1eF8vaXRlcmF0b3JfY2F0ZWdvcnkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL2NvbmZpZy9pbnRlcm5hbHMuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJhdG9yX2NhdGVnb3J5LmhwcCIgMgojIDI4ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyYXRvcl9uYW1lcy5ocHAiIDEKIyAyOSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIiAyCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbXN2Y19uZXZlcl90cnVlLmhwcCIgMQojIDMw ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jb21tb25fbmFtZV93a25kLmhwcCIgMQoj IDMxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWR2YW5jZS5ocHAiIDIKCgoKCgpu YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKCgpuYW1lc3BhY2UgYXV4IHsKCgp0 ZW1wbGF0ZTwgdHlwZW5hbWUgQ2F0ZWdvcnksIHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBO ID4Kc3RydWN0IGFkdmFuY2VfaW1wbAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGxlc3M8IE4saW50 ZWdyYWxfYzxsb25nLDA+ID46OnR5cGUgYmFja3dhcmRfOwogICAgdHlwZWRlZiB0eXBlbmFtZSBp Zl88IGJhY2t3YXJkXywgbmVnYXRlPE4+LCBOID46OnR5cGUgb2Zmc2V0XzsKCiAgICB0eXBlZGVm IHR5cGVuYW1lIGlmXzwKICAgICAgICAgIGJhY2t3YXJkXwogICAgICAgICwgYXV4OjphZHZhbmNl X2JhY2t3YXJkPCBvZmZzZXRfOjp2YWx1ZSA+CiAgICAgICAgLCBhdXg6OmFkdmFuY2VfZm9yd2Fy ZDwgb2Zmc2V0Xzo6dmFsdWUgPgogICAgICAgID46OnR5cGUgYWxnb187CgogICAgdHlwZWRlZiB0 eXBlbmFtZSBhbGdvXzo6dGVtcGxhdGUgYXBwbHk8SXRlcmF0b3I+Ojp0eXBlIHR5cGU7Cn07CgoK dGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBOID4Kc3RydWN0IGFkdmFuY2Vf aW1wbDxyYV9pdGVyX3RhZ18sSXRlcmF0b3IsTj4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBJdGVy YXRvcgogICAgICAgIDo6dGVtcGxhdGUgYWR2YW5jZTxOPjo6dHlwZSB0eXBlOwp9OwoKfQoKCgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXRlcmF0b3IgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBO ID0gdm9pZF8KICAgID4Kc3RydWN0IGFkdmFuY2UKewogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6 OmFkdmFuY2VfaW1wbDwKICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yOjpjYXRlZ29yeQogICAg ICAgICwgSXRlcmF0b3IKICAgICAgICAsIE4KICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07CgoKCnRl bXBsYXRlPAogICAgICB0eXBlbmFtZSBJdGVyYXRvcgogICAgLCBsb25nIE4KICAgID4Kc3RydWN0 IGFkdmFuY2VfYwp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6YWR2YW5jZV9pbXBsPAogICAg ICAgICAgdHlwZW5hbWUgSXRlcmF0b3I6OmNhdGVnb3J5CiAgICAgICAgLCBJdGVyYXRvcgogICAg ICAgICwgaW50ZWdyYWxfYzxsb25nLE4+CiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwojIDE4OSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FkdmFuY2UuaHBwIgogdGVtcGxhdGU8PiBz dHJ1Y3QgYWR2YW5jZTwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBl bmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFt ZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBhZHZhbmNlPCBUMSxUMiA+IHsgfTsgfTsgdGVt cGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBhZHZhbmNlPCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVm IGFkdmFuY2U8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hdF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2RlcmVmX3drbmQuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2F0X2ltcGwuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0 IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IGF0 X3RyYWl0cwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIE4gPiBz dHJ1Y3QgYWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhZHZhbmNlPAog ICAgICAgICAgICAgIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICAgICAs IE4KICAgICAgICAgICAgPjo6dHlwZSBpdGVyXzsKCiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyXzo6dHlwZSB0eXBlOwogICAgfTsKfTsKCgoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9hdC5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug bXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5 cGVuYW1lIE4gPSB2b2lkXwogICAgPgpzdHJ1Y3QgYXQKICAgIDogYXRfdHJhaXRzPCB0eXBlbmFt ZSBzZXF1ZW5jZV90YWc8U2VxdWVuY2U+Ojp0eXBlID4KICAgICAgICA6OnRlbXBsYXRlIGFsZ29y aXRobTwgU2VxdWVuY2UsTiA+CnsKICAgCn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgU2Vx dWVuY2UKICAgICwgbG9uZyBOCiAgICA+CnN0cnVjdCBhdF9jCiAgICA6IGF0X3RyYWl0czwgdHlw ZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSA+CiAgICAgICAgOjp0ZW1wbGF0ZSBh bGdvcml0aG08IFNlcXVlbmNlLGludGVncmFsX2M8bG9uZyxOPiA+CnsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IGF0PCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1l IFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1 ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGF0PCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgbGFtYmRhPCBhdDwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBhdDwgdm9pZF8sdm9p ZF8gPiB0eXBlOyB9OwoKfQp9CiMgOSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvZnVuY3Rp b24uaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmcuaHBwIiAx CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmcuaHBwIgojIDEgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hcmdfZndkLmhwcCIgMQojIDIyICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXJnX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVz cGFjZSBtcGwgewoKdGVtcGxhdGU8IGludCBOID4gc3RydWN0IGFyZzsKCn0KfQojIDI4ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9hcml0eV9zcGVjLmhwcCIgMQojIDMwICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL2FyZ190eXBlZGVmLmhwcCIgMQojIDMxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXJnLmhwcCIgMgojIDQwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvYXJnLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9p bmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hcmcuaHBwIiAxCgoKCm5h bWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8PiBzdHJ1Y3QgYXJnPC0x Pgp7CiAgICBzdGF0aWMgaW50IGNvbnN0IHZhbHVlID0gLTE7CiAgIAoKICAgIHRlbXBsYXRlPAog ICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5h bWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5hbWUgVTUg PSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVkZWYg VTEgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBzdGF0aWMgYm9vbCBjb25zdCBudiA9ICFp c192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNz ZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29s KSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzIyOwoKICAgIH07Cn07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBhcmc8MT4KewogICAgc3RhdGljIGludCBjb25zdCB2YWx1ZSA9IDE7 CiAgICB0eXBlZGVmIGFyZzwyPiBuZXh0OwogICAKCiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5 cGVuYW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9p ZF8KICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAg ICAgICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICAgICB0eXBlZGVmIFUxIHR5cGU7Cgog ICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIGJvb2wgY29uc3QgbnYgPSAhaXNfdm9pZF88dHlw ZT46OnZhbHVlOwogICAgICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBz aXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIG52ICkgPik+ IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl80MzsKCiAgICB9Owp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgYXJnPDI+CnsKICAgIHN0YXRpYyBpbnQgY29uc3QgdmFsdWUgPSAyOwogICAgdHlwZWRl ZiBhcmc8Mz4gbmV4dDsKICAgCgogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBVMSA9 IHZvaWRfLCB0eXBlbmFtZSBVMiA9IHZvaWRfLCB0eXBlbmFtZSBVMyA9IHZvaWRfCiAgICAgICAg LCB0eXBlbmFtZSBVNCA9IHZvaWRfLCB0eXBlbmFtZSBVNSA9IHZvaWRfCiAgICAgICAgPgogICAg c3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiBVMiB0eXBlOwoKICAgICBwcml2YXRl OgogICAgICAgIHN0YXRpYyBib29sIGNvbnN0IG52ID0gIWlzX3ZvaWRfPHR5cGU+Ojp2YWx1ZTsK ICAgICAgICB0eXBlZGVmIDo6Ym9vc3Q6OnN0YXRpY19hc3NlcnRfdGVzdDwgc2l6ZW9mKDo6Ym9v c3Q6OlNUQVRJQ19BU1NFUlRJT05fRkFJTFVSRTwgKGJvb2wpKCBudiApID4pPiBib29zdF9zdGF0 aWNfYXNzZXJ0X3R5cGVkZWZfNjQ7CgogICAgfTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IGFyZzwz Pgp7CiAgICBzdGF0aWMgaW50IGNvbnN0IHZhbHVlID0gMzsKICAgIHR5cGVkZWYgYXJnPDQ+IG5l eHQ7CiAgIAoKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlw ZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUg VTQgPSB2b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBs eQogICAgewogICAgICAgIHR5cGVkZWYgVTMgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBz dGF0aWMgYm9vbCBjb25zdCBudiA9ICFpc192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlw ZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNf QVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90 eXBlZGVmXzg1OwoKICAgIH07Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBhcmc8ND4KewogICAgc3Rh dGljIGludCBjb25zdCB2YWx1ZSA9IDQ7CiAgICB0eXBlZGVmIGFyZzw1PiBuZXh0OwogICAKCiAg ICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0g dm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8KICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8s IHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAg ICAgICB0eXBlZGVmIFU0IHR5cGU7CgogICAgIHByaXZhdGU6CiAgICAgICAgc3RhdGljIGJvb2wg Y29uc3QgbnYgPSAhaXNfdm9pZF88dHlwZT46OnZhbHVlOwogICAgICAgIHR5cGVkZWYgOjpib29z dDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElPTl9G QUlMVVJFPCAoYm9vbCkoIG52ICkgPik+IGJvb3N0X3N0YXRpY19hc3NlcnRfdHlwZWRlZl8xMDY7 CgogICAgfTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IGFyZzw1Pgp7CiAgICBzdGF0aWMgaW50IGNv bnN0IHZhbHVlID0gNTsKICAgIHR5cGVkZWYgYXJnPDY+IG5leHQ7CiAgIAoKICAgIHRlbXBsYXRl PAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlw ZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5hbWUg VTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgICAgIHR5cGVk ZWYgVTUgdHlwZTsKCiAgICAgcHJpdmF0ZToKICAgICAgICBzdGF0aWMgYm9vbCBjb25zdCBudiA9 ICFpc192b2lkXzx0eXBlPjo6dmFsdWU7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNf YXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChi b29sKSggbnYgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90eXBlZGVmXzEyNzsKCiAgICB9Owp9 OwoKCgp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVk ZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgNDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w bC9hcmcuaHBwIiAyCiMgMTEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhw cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIgMQojIDIw ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvc2l6ZS5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL3NpemVfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvc2l6ZV9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3Qgc2l6ZV90cmFpdHM7CnRl bXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBzaXplOwoKfQp9CiMgMjEgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3NpemVfaW1wbC5ocHAiIDEKIyAyMiAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vc2l6ZV9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvZGlzdGFuY2UuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5h bWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4IHsKIyA0NyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvbXBsL2F1eF8vaXRlcl9kaXN0YW5jZS5ocHAiCnRlbXBsYXRlPAogICAgICB0eXBlbmFt ZSBJdGVyYXRvcgogICAgLCB0eXBlbmFtZSBPdGhlcgogICAgPgpzdHJ1Y3QgaXRlcl9kaXN0YW5j ZQogICAgOiBJdGVyYXRvcjo6dGVtcGxhdGUgZGlzdGFuY2U8T3RoZXI+CnsKfTsKCgoKfQp9Cn0K IyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Rpc3RhbmNlLmhwcCIgMgoKCiMg MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2l0ZXJfZm9sZC5ocHAiIDEKIyAyMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2l0ZXJfZm9sZC5ocHAiCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL08xX3NpemUuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9PMV9zaXplLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvTzFfc2l6ZV9md2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9PMV9zaXplX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBt cGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBPMV9zaXplX3RyYWl0czsKdGVt cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IE8xX3NpemU7Cgp9Cn0KIyAyMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL08xX3NpemUuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vTzFfc2l6ZV9pbXBsLmhwcCIgMQojIDIzICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9PMV9zaXplX2ltcGwuaHBwIgojIDEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2hhc19zaXplLmhwcCIgMQojIDIyICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9oYXNfc2l6ZS5ocHAiCm5hbWVzcGFj ZSBib29zdCB7IG5hbWVzcGFjZSBtcGwgeyBuYW1lc3BhY2UgYXV4IHsKdGVtcGxhdGU8IHR5cGVu YW1lIFQgPiBib29zdDo6bXBsOjphdXg6Onllc190YWcgaGFzX3NpemVfaGVscGVyKCBib29zdDo6 bXBsOjphdXg6OnR5cGVfd3JhcHBlcjxUPiBjb25zdCB2b2xhdGlsZSogLCBib29zdDo6bXBsOjph dXg6OnR5cGVfd3JhcHBlcjx0eXBlbmFtZSBUOjpzaXplPiogPSAwICk7IGJvb3N0OjptcGw6OmF1 eDo6bm9fdGFnIGhhc19zaXplX2hlbHBlciguLi4pOyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0 cnVjdCBoYXNfc2l6ZSB7IHR5cGVkZWYgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBlX3dyYXBwZXI8VD4g dF87IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKChoYXNfc2l6ZV9oZWxwZXIpKHN0 YXRpY19jYXN0PHRfKj4oMCkpKSA9PSBzaXplb2YoYm9vc3Q6Om1wbDo6YXV4Ojp5ZXNfdGFnKTsg fTsKfX19CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL08xX3NpemVf aW1wbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewojIDU3ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9PMV9zaXplX2ltcGwuaHBwIgp0ZW1wbGF0 ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IE8xX3NpemVfdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0 eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IGludGVncmFsX2M8 bG9uZywtMT4KICAgICAgICB7CiAgICAgICAgfTsKfTsKCgoKCn0KfQojIDIyICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvTzFfc2l6ZS5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsK bmFtZXNwYWNlIG1wbCB7CgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9p ZF8KICAgID4Kc3RydWN0IE8xX3NpemUKICAgIDogTzFfc2l6ZV90cmFpdHM8IHR5cGVuYW1lIHNl cXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGht PCBTZXF1ZW5jZSA+CnsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IE8xX3NpemU8IHZvaWRfID4geyB0 ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12 b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBw bHkgOiBPMV9zaXplPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBPMV9z aXplPCB2b2lkXyA+ID4geyB0eXBlZGVmIE8xX3NpemU8IHZvaWRfID4gdHlwZTsgfTsKCn0KfQoj IDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhwcCIgMgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGEuaHBwIiAxCiMgMjMgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9sYW1iZGEuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1bGxfbGFtYmRhLmhwcCIgMQojIDI2ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvYXV4Xy9jb25maWcvYmluZC5ocHAiIDEKIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2JpbmQuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvcGxhY2Vob2xkZXJzLmhwcCIgMQojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvcGxhY2Vob2xkZXJzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv YXJnLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcGxhY2Vob2xk ZXJzLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcGxhY2Vob2xk ZXJzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9wbGFjZWhvbGRlcnMuaHBwIiAxCgoK Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdHlwZWRlZiBhcmc8IC0xID4gXzsK Cm5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBsOjpfOwp9CgoKCgp0eXBl ZGVmIGFyZzwxPiBfMTsKCm5hbWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBs OjpfMTsKfQoKdHlwZWRlZiBhcmc8Mj4gXzI7CgpuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKdXNp bmcgYm9vc3Q6Om1wbDo6XzI7Cn0KCnR5cGVkZWYgYXJnPDM+IF8zOwoKbmFtZXNwYWNlIHBsYWNl aG9sZGVycyB7CnVzaW5nIGJvb3N0OjptcGw6Ol8zOwp9Cgp0eXBlZGVmIGFyZzw0PiBfNDsKCm5h bWVzcGFjZSBwbGFjZWhvbGRlcnMgewp1c2luZyBib29zdDo6bXBsOjpfNDsKfQoKdHlwZWRlZiBh cmc8NT4gXzU7CgpuYW1lc3BhY2UgcGxhY2Vob2xkZXJzIHsKdXNpbmcgYm9vc3Q6Om1wbDo6XzU7 Cn0KCnR5cGVkZWYgYXJnPDY+IF82OwoKbmFtZXNwYWNlIHBsYWNlaG9sZGVycyB7CnVzaW5nIGJv b3N0OjptcGw6Ol82Owp9Cgp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzYgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9wbGFjZWhvbGRlcnMuaHBwIiAyCiMgMzIgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvcHJvdGVjdC5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L3Byb3RlY3QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl PAogICAgICB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4Kc3RydWN0IHByb3RlY3QgOiBUCnsKICAg IHR5cGVkZWYgc3RydWN0IHByb3RlY3QgdHlwZTsKfTsKIyA0NSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL3Byb3RlY3QuaHBwIgp0ZW1wbGF0ZTw+IHN0cnVjdCBwcm90ZWN0PCB2b2lk XyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0eXBlbmFt ZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3Ry dWN0IGFwcGx5IDogcHJvdGVjdDwgVDEgPiB7IH07IH07CgoKCgp9Cn0KIyAzNCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBwIiAxCiMgMTQgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAiCiMgMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY29uZmlnLmhwcCIgMQojIDE1 ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19yZWZlcmVuY2UuaHBw IiAyCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVy ZW5jZS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhw cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv Ym9vbF90cmFpdF9kZWYuaHBwIiAyCiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCnRlbXBs YXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3JlZmVyZW5jZSA6IG1wbDo6Ym9vbF88IGZhbHNl ID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19yZWZlcmVuY2U8IFQmID4g OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OwojIDEwNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvaXNfcmVmZXJlbmNlLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAx MDkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3JlZmVyZW5jZS5o cHAiIDIKIyA0MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2JpbmQuaHBwIiAyCiMg NTMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9iaW5kLmhwcCIKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEK IyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9j ZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXBy b2Nlc3NlZC9wbGFpbi9iaW5kLmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug bXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQsIHR5cGVu YW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0CiAgICAsIHR5cGVu YW1lIFU1CiAgICA+CnN0cnVjdCByZXNvbHZlX2JpbmRfYXJnCnsKICAgIHR5cGVkZWYgVCB0eXBl Owp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgQXJnCiAgICA+ CnN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnCnsKICAgIHR5cGVkZWYgQXJnIG5leHRfYXJnOwog ICAgdHlwZWRlZiBUIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgQXJnCiAgICA+ CnN0cnVjdCByZXBsYWNlX3VubmFtZWRfYXJnPCBhcmc8LTE+LEFyZyA+CnsKICAgIHR5cGVkZWYg dHlwZW5hbWUgQXJnOjpuZXh0IG5leHRfYXJnOwogICAgdHlwZWRlZiBBcmcgdHlwZTsKfTsKCn0K CnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSA9IHZvaWRfLCB0eXBlbmFt ZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQzID0gdm9pZF8sIHR5cGVuYW1lIFQ0ID0gdm9p ZF8sIHR5cGVuYW1lIFQ1ID0gdm9pZF8KICAgID4Kc3RydWN0IGJpbmQ7Cgp0ZW1wbGF0ZTwgdHlw ZW5hbWUgRiwgdHlwZW5hbWUgVCA+IHN0cnVjdCBiaW5kMXN0Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg RiwgdHlwZW5hbWUgVCA+IHN0cnVjdCBiaW5kMm5kOwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0 ZTwKICAgICAgaW50IE4sIHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5 cGVuYW1lIFU0LCB0eXBlbmFtZSBVNQogICAgPgpzdHJ1Y3QgcmVzb2x2ZV9iaW5kX2FyZzwgYXJn PE4+LFUxLFUyLFUzLFU0LFU1ID4KewogICAgdHlwZWRlZiB0eXBlbmFtZSBtcGw6OmFyZzxOPjo6 dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKfTsKCnRlbXBsYXRl PAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz LCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUy LCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAgICwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0 IHJlc29sdmVfYmluZF9hcmc8IGJpbmQ8RixUMSxUMixUMyxUNCxUNT4sVTEsVTIsVTMsVTQsVTUg Pgp7CiAgICB0eXBlZGVmIGJpbmQ8IEYsVDEsVDIsVDMsVDQsVDUgPiBmXzsKICAgIHR5cGVkZWYg dHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7 Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVTEs IHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMwogICAgLCB0eXBlbmFtZSBVNCwgdHlwZW5hbWUgVTUK ICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8IGJpbmQxc3Q8RixUPixVMSxVMixVMyxVNCxV NSA+CnsKICAgIHR5cGVkZWYgYmluZDFzdDwgRixUID4gZl87CiAgICB0eXBlZGVmIHR5cGVuYW1l IGZfOjp0ZW1wbGF0ZSBhcHBseTwgVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0eXBlOwp9OwoKdGVt cGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQsIHR5cGVuYW1lIFUxLCB0eXBlbmFt ZSBVMiwgdHlwZW5hbWUgVTMKICAgICwgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1CiAgICA+CnN0 cnVjdCByZXNvbHZlX2JpbmRfYXJnPCBiaW5kMm5kPEYsVD4sVTEsVTIsVTMsVTQsVTUgPgp7CiAg ICB0eXBlZGVmIGJpbmQybmQ8IEYsVCA+IGZfOwogICAgdHlwZWRlZiB0eXBlbmFtZSBmXzo6dGVt cGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlwZTsKfTsKCn0KCgoKCgoKCgoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGJpbmQwCnsKICAgIHRlbXBs YXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUgVTIgPSB2b2lkXywg dHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2b2lkXywgdHlwZW5h bWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgewogICAgIHByaXZh dGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IEYsIG1wbDo6YXJn PCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUgYTA7CiAgICAgICAg dHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgZl87Cgog ICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0eXBlIHR5cGU7CiAgICB9 Owp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h bWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAgICwgdHlwZW5h bWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQwPEY+LFUxLCBV MiwgVTMsIFU0LCBVNQogICAgPgp7CiAgICB0eXBlZGVmIGJpbmQwPEY+IGZfOwogICAgdHlwZWRl ZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdHlw ZTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGJpbmQ8 IEYsdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBiaW5kMDxGPgp7Cn07Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEKICAgID4Kc3RydWN0IGJpbmQx CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUg VTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2 b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAg ewogICAgIHByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8 IEYsIG1wbDo6YXJnPCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUg YTA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46 OnR5cGUgZl87CgogICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxu MSA+IHIxOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6OnR5cGUgYTE7CiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSByMTo6bmV4dF9hcmcgbjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBh dXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDE7CgogICAg IHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTx0MT46 OnR5cGUgdHlwZTsKICAgIH07Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFt ZSBVMwogICAgLCB0eXBlbmFtZSBVNCwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVf YmluZF9hcmc8CiAgICAgIGJpbmQxPCBGLFQxID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsK ICAgIHR5cGVkZWYgYmluZDE8IEYsVDEgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRl bXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBs YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYmluZDwgRixU MSx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyA+CiAgICA6IGJpbmQxPCBGLFQxID4Kewp9OwoKdGVt cGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgPgpz dHJ1Y3QgYmluZDIKewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBVMSA9IHZvaWRf LCB0eXBlbmFtZSBVMiA9IHZvaWRfLCB0eXBlbmFtZSBVMyA9IHZvaWRfCiAgICAgICAgLCB0eXBl bmFtZSBVNCA9IHZvaWRfLCB0eXBlbmFtZSBVNSA9IHZvaWRfCiAgICAgICAgPgogICAgc3RydWN0 IGFwcGx5CiAgICB7CiAgICAgcHJpdmF0ZToKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91 bm5hbWVkX2FyZzwgRiwgbXBsOjphcmc8IDE+ID4gcjA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFt ZSByMDo6dHlwZSBhMDsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIwOjpuZXh0X2FyZyBuMTsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTAsVTEsVTIs VTMsVTQsVTUgPjo6dHlwZSBmXzsKCiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1l ZF9hcmc8IFQxLG4xID4gcjE7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMTo6dHlwZSBhMTsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIxOjpuZXh0X2FyZyBuMjsKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIGF1eDo6cmVzb2x2ZV9iaW5kX2FyZzwgYTEsVTEsVTIsVTMsVTQsVTUgPjo6dHlw ZSB0MTsKCiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8IFQyLG4yID4g cjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMjo6dHlwZSBhMjsKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIHIyOjpuZXh0X2FyZyBuMzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6 cmVzb2x2ZV9iaW5kX2FyZzwgYTIsVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0MjsKCiAgICAgcHVi bGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5PCB0MSx0MiA+ Ojp0eXBlIHR5cGU7CiAgICB9Owp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAg dHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBVMSwgdHlwZW5h bWUgVTIKICAgICwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0LCB0eXBlbmFtZSBVNQogICAgPgpz dHJ1Y3QgcmVzb2x2ZV9iaW5kX2FyZzwKICAgICAgYmluZDI8IEYsVDEsVDIgPixVMSwgVTIsIFUz LCBVNCwgVTUKICAgID4KewogICAgdHlwZWRlZiBiaW5kMjwgRixUMSxUMiA+IGZfOwogICAgdHlw ZWRlZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IFUxLFUyLFUzLFU0LFU1ID46OnR5cGUg dHlwZTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0 eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMix2b2lkXyx2b2lkXyx2b2lkXyA+ CiAgICA6IGJpbmQyPCBGLFQxLFQyID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYs IHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKICAgID4Kc3RydWN0IGJpbmQz CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVTEgPSB2b2lkXywgdHlwZW5hbWUg VTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTQgPSB2 b2lkXywgdHlwZW5hbWUgVTUgPSB2b2lkXwogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAg ewogICAgIHByaXZhdGU6CiAgICAgICAgdHlwZWRlZiBhdXg6OnJlcGxhY2VfdW5uYW1lZF9hcmc8 IEYsIG1wbDo6YXJnPCAxPiA+IHIwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6OnR5cGUg YTA7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMDo6bmV4dF9hcmcgbjE7CiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEwLFUxLFUyLFUzLFU0LFU1ID46 OnR5cGUgZl87CgogICAgICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMSxu MSA+IHIxOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6OnR5cGUgYTE7CiAgICAgICAgdHlw ZWRlZiB0eXBlbmFtZSByMTo6bmV4dF9hcmcgbjI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBh dXg6OnJlc29sdmVfYmluZF9hcmc8IGExLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDE7CgogICAg ICAgIHR5cGVkZWYgYXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMixuMiA+IHIyOwogICAgICAg IHR5cGVkZWYgdHlwZW5hbWUgcjI6OnR5cGUgYTI7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBy Mjo6bmV4dF9hcmcgbjM7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmlu ZF9hcmc8IGEyLFUxLFUyLFUzLFU0LFU1ID46OnR5cGUgdDI7CgogICAgICAgIHR5cGVkZWYgYXV4 OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBUMyxuMyA+IHIzOwogICAgICAgIHR5cGVkZWYgdHlwZW5h bWUgcjM6OnR5cGUgYTM7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSByMzo6bmV4dF9hcmcgbjQ7 CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OnJlc29sdmVfYmluZF9hcmc8IGEzLFUxLFUy LFUzLFU0LFU1ID46OnR5cGUgdDM7CgogICAgIHB1YmxpYzoKICAgICAgICB0eXBlZGVmIHR5cGVu YW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTwgdDEsdDIsdDMgPjo6dHlwZSB0eXBlOwogICAgfTsKfTsK Cm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQx LCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFUxCiAgICAsIHR5cGVuYW1lIFUy LCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQsIHR5cGVuYW1lIFU1CiAgICA+CnN0cnVjdCByZXNv bHZlX2JpbmRfYXJnPAogICAgICBiaW5kMzwgRixUMSxUMixUMyA+LFUxLCBVMiwgVTMsIFU0LCBV NQogICAgPgp7CiAgICB0eXBlZGVmIGJpbmQzPCBGLFQxLFQyLFQzID4gZl87CiAgICB0eXBlZGVm IHR5cGVuYW1lIGZfOjp0ZW1wbGF0ZSBhcHBseTwgVTEsVTIsVTMsVTQsVTUgPjo6dHlwZSB0eXBl Owp9OwoKfQoKCgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVu YW1lIFQyLCB0eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMixUMyx2b2lkXyx2 b2lkXyA+CiAgICA6IGJpbmQzPCBGLFQxLFQyLFQzID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5 cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1l IFQ0CiAgICA+CnN0cnVjdCBiaW5kNAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1l IFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8KICAg ICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+ CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICBwcml2YXRlOgogICAgICAgIHR5cGVkZWYgYXV4 OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLCBtcGw6OmFyZzwgMT4gPiByMDsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIHIwOjp0eXBlIGEwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6Om5l eHRfYXJnIG4xOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJn PCBhMCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIGZfOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVw bGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIx Ojp0eXBlIGExOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6Om5leHRfYXJnIG4yOwogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMSxVMSxVMixVMyxV NCxVNSA+Ojp0eXBlIHQxOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2Fy ZzwgVDIsbjIgPiByMjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjp0eXBlIGEyOwogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6Om5leHRfYXJnIG4zOwogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMixVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQy OwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMgPiByMzsK ICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwogICAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgcjM6Om5leHRfYXJnIG40OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNv bHZlX2JpbmRfYXJnPCBhMyxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQzOwoKICAgICAgICB0eXBl ZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDQsbjQgPiByNDsKICAgICAgICB0eXBlZGVm IHR5cGVuYW1lIHI0Ojp0eXBlIGE0OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjQ6Om5leHRf YXJnIG41OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBh NCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQ0OwoKICAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBmXzo6dGVtcGxhdGUgYXBwbHk8IHQxLHQyLHQzLHQ0ID46OnR5cGUgdHlwZTsK ICAgIH07Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0 eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0 eXBlbmFtZSBVMSwgdHlwZW5hbWUgVTIsIHR5cGVuYW1lIFUzLCB0eXBlbmFtZSBVNCwgdHlwZW5h bWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQ0PCBGLFQxLFQy LFQzLFQ0ID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsKICAgIHR5cGVkZWYgYmluZDQ8IEYs VDEsVDIsVDMsVDQgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86OnRlbXBsYXRlIGFwcGx5 PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt ZSBUNAogICAgPgpzdHJ1Y3QgYmluZDwgRixUMSxUMixUMyxUNCx2b2lkXyA+CiAgICA6IGJpbmQ0 PCBGLFQxLFQyLFQzLFQ0ID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVu YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVu YW1lIFQ1CiAgICA+CnN0cnVjdCBiaW5kNQp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVu YW1lIFUxID0gdm9pZF8sIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8K ICAgICAgICAsIHR5cGVuYW1lIFU0ID0gdm9pZF8sIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAg ICA+CiAgICBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICBwcml2YXRlOgogICAgICAgIHR5cGVkZWYg YXV4OjpyZXBsYWNlX3VubmFtZWRfYXJnPCBGLCBtcGw6OmFyZzwgMT4gPiByMDsKICAgICAgICB0 eXBlZGVmIHR5cGVuYW1lIHIwOjp0eXBlIGEwOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjA6 Om5leHRfYXJnIG4xOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRf YXJnPCBhMCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIGZfOwoKICAgICAgICB0eXBlZGVmIGF1eDo6 cmVwbGFjZV91bm5hbWVkX2FyZzwgVDEsbjEgPiByMTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l IHIxOjp0eXBlIGExOwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjE6Om5leHRfYXJnIG4yOwog ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMSxVMSxVMixV MyxVNCxVNSA+Ojp0eXBlIHQxOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVk X2FyZzwgVDIsbjIgPiByMjsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIyOjp0eXBlIGEyOwog ICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjI6Om5leHRfYXJnIG4zOwogICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhMixVMSxVMixVMyxVNCxVNSA+Ojp0eXBl IHQyOwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDMsbjMgPiBy MzsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHIzOjp0eXBlIGEzOwogICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgcjM6Om5leHRfYXJnIG40OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4Ojpy ZXNvbHZlX2JpbmRfYXJnPCBhMyxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQzOwoKICAgICAgICB0 eXBlZGVmIGF1eDo6cmVwbGFjZV91bm5hbWVkX2FyZzwgVDQsbjQgPiByNDsKICAgICAgICB0eXBl ZGVmIHR5cGVuYW1lIHI0Ojp0eXBlIGE0OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjQ6Om5l eHRfYXJnIG41OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJn PCBhNCxVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHQ0OwoKICAgICAgICB0eXBlZGVmIGF1eDo6cmVw bGFjZV91bm5hbWVkX2FyZzwgVDUsbjUgPiByNTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIHI1 Ojp0eXBlIGE1OwogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgcjU6Om5leHRfYXJnIG42OwogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgYXV4OjpyZXNvbHZlX2JpbmRfYXJnPCBhNSxVMSxVMixVMyxV NCxVNSA+Ojp0eXBlIHQ1OwoKICAgICBwdWJsaWM6CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBm Xzo6dGVtcGxhdGUgYXBwbHk8IHQxLHQyLHQzLHQ0LHQ1ID46OnR5cGUgdHlwZTsKICAgIH07Cn07 CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBU MSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBU NSwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBlbmFtZSBVMywgdHlwZW5hbWUgVTQKICAg ICwgdHlwZW5hbWUgVTUKICAgID4Kc3RydWN0IHJlc29sdmVfYmluZF9hcmc8CiAgICAgIGJpbmQ1 PCBGLFQxLFQyLFQzLFQ0LFQ1ID4sVTEsIFUyLCBVMywgVTQsIFU1CiAgICA+CnsKICAgIHR5cGVk ZWYgYmluZDU8IEYsVDEsVDIsVDMsVDQsVDUgPiBmXzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZl86 OnRlbXBsYXRlIGFwcGx5PCBVMSxVMixVMyxVNCxVNSA+Ojp0eXBlIHR5cGU7Cn07Cgp9CgoKCgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBl bmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGJpbmQK ICAgIDogYmluZDU8IEYsVDEsVDIsVDMsVDQsVDUgPgp7Cn07Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUg RiwgdHlwZW5hbWUgVCA+CnN0cnVjdCBiaW5kMXN0CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAg dHlwZW5hbWUgVQogICAgICAgICwgdHlwZW5hbWUgVTIgPSB2b2lkXywgdHlwZW5hbWUgVTMgPSB2 b2lkXywgdHlwZW5hbWUgVTQgPSB2b2lkXwogICAgICAgICwgdHlwZW5hbWUgVTUgPSB2b2lkXwog ICAgICAgID4KICAgIHN0cnVjdCBhcHBseQogICAgICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8IFQs VSA+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQgPgpz dHJ1Y3QgYmluZDJuZAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUKICAgICAg ICAsIHR5cGVuYW1lIFUyID0gdm9pZF8sIHR5cGVuYW1lIFUzID0gdm9pZF8sIHR5cGVuYW1lIFU0 ID0gdm9pZF8KICAgICAgICAsIHR5cGVuYW1lIFU1ID0gdm9pZF8KICAgICAgICA+CiAgICBzdHJ1 Y3QgYXBwbHkKICAgICAgICA6IEY6OnRlbXBsYXRlIGFwcGx5PCBVLFQgPgogICAgewogICAgfTsK fTsKCn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl X3ByZXByb2Nlc3NlZC5ocHAiIDIKIyA1NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2JpbmQuaHBwIiAyCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1 bGxfbGFtYmRhLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcXVv dGUuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9xdW90ZS5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaGFzX3R5cGUuaHBwIiAx CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2hhc190eXBlLmhwcCIK bmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNlIG1wbCB7IG5hbWVzcGFjZSBhdXggewp0ZW1wbGF0 ZTwgdHlwZW5hbWUgVCA+IGJvb3N0OjptcGw6OmF1eDo6eWVzX3RhZyBoYXNfdHlwZV9oZWxwZXIo IGJvb3N0OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPFQ+IGNvbnN0IHZvbGF0aWxlKiAsIGJvb3N0 OjptcGw6OmF1eDo6dHlwZV93cmFwcGVyPHR5cGVuYW1lIFQ6OnR5cGU+KiA9IDAgKTsgYm9vc3Q6 Om1wbDo6YXV4Ojpub190YWcgaGFzX3R5cGVfaGVscGVyKC4uLik7IHRlbXBsYXRlPCB0eXBlbmFt ZSBUID4gc3RydWN0IGhhc190eXBlIHsgdHlwZWRlZiBib29zdDo6bXBsOjphdXg6OnR5cGVfd3Jh cHBlcjxUPiB0Xzsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBzaXplb2YoKGhhc190eXBlX2hl bHBlcikoc3RhdGljX2Nhc3Q8dF8qPigwKSkpID09IHNpemVvZihib29zdDo6bXBsOjphdXg6Onll c190YWcpOyB9Owp9fX0KIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3F1b3Rl LmhwcCIgMgojIDM0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvcXVvdGUuaHBwIgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vz c2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNs dWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL3F1b3RlLmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3Qg ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCBib29sIGhhc190eXBlXyA9 IGF1eDo6aGFzX3R5cGU8VD46OnZhbHVlID4Kc3RydWN0IHF1b3RlX2ltcGwKCiAgICA6IFQKewp9 OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPgpzdHJ1Y3QgcXVvdGVfaW1wbDwgVCxmYWxzZSA+CnsK ICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFt ZSBQMSA+IGNsYXNzIEYKICAgID4Kc3RydWN0IHF1b3RlMQp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5h bWUgVTEgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBxdW90ZV9pbXBsPCBGPFUxPiA+CgogICAg ewogICAgfTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVu YW1lIFAyID4gY2xhc3MgRgogICAgPgpzdHJ1Y3QgcXVvdGUyCnsKICAgIHRlbXBsYXRlPCB0eXBl bmFtZSBVMSwgdHlwZW5hbWUgVTIgPiBzdHJ1Y3QgYXBwbHkKCiAgICAgICAgOiBxdW90ZV9pbXBs PCBGPFUxLFUyPiA+CgogICAgewogICAgfTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwg dHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+IGNsYXNzIEYKICAgID4Kc3Ry dWN0IHF1b3RlMwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVTEsIHR5cGVuYW1lIFUyLCB0eXBl bmFtZSBVMyA+IHN0cnVjdCBhcHBseQoKICAgICAgICA6IHF1b3RlX2ltcGw8IEY8VTEsVTIsVTM+ ID4KCiAgICB7CiAgICB9Owp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQ MSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYKICAgID4K c3RydWN0IHF1b3RlNAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxLCB0eXBl bmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVuYW1lIFU0CiAgICAgICAgPgogICAgc3RydWN0IGFw cGx5CgogICAgICAgIDogcXVvdGVfaW1wbDwgRjxVMSxVMixVMyxVND4gPgoKICAgIHsKICAgIH07 Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBQMSwgdHlw ZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNAogICAgICAgICwgdHlwZW5hbWUgUDUK ICAgICAgICA+CiAgICAgIGNsYXNzIEYKICAgID4Kc3RydWN0IHF1b3RlNQp7CiAgICB0ZW1wbGF0 ZTwKICAgICAgICAgIHR5cGVuYW1lIFUxLCB0eXBlbmFtZSBVMiwgdHlwZW5hbWUgVTMsIHR5cGVu YW1lIFU0CiAgICAgICAgLCB0eXBlbmFtZSBVNQogICAgICAgID4KICAgIHN0cnVjdCBhcHBseQoK ICAgICAgICA6IHF1b3RlX2ltcGw8IEY8VTEsVTIsVTMsVTQsVTU+ID4KCiAgICB7CiAgICB9Owp9 OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVf cHJlcHJvY2Vzc2VkLmhwcCIgMgojIDM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv cXVvdGUuaHBwIiAyCiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1 bGxfbGFtYmRhLmhwcCIgMgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1 eF8vdGVtcGxhdGVfYXJpdHkuaHBwIiAxCiMgNDQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi90 ZW1wbGF0ZV9hcml0eS5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgNDUgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9hdXhfL3RlbXBsYXRlX2FyaXR5LmhwcCIgMgojIDMyICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9mdWxsX2xhbWJkYS5ocHAiIDIKCgoKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9sYW1iZGFfZXhwci5ocHAiIDEKIyAzNiAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vZnVsbF9sYW1iZGEuaHBwIiAyCgoK CgoKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJl cHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4 Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2Z1bGxfbGFtYmRhLmhwcCIgMQoKCgpuYW1l c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBU CiAgICAsIHR5cGVuYW1lIFByb3RlY3QgPSBmYWxzZV8KCiAgICA+CnN0cnVjdCBsYW1iZGFfaW1w bAp7CiAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVt cGxhdGU8CiAgICAgIHR5cGVuYW1lIFQKCiAgICA+CnN0cnVjdCBsYW1iZGEKICAgIDogbGFtYmRh X2ltcGw8IFQsZmFsc2VfID4Kewp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAg Ym9vbCBDMSA9IGZhbHNlLCBib29sIEMyID0gZmFsc2UsIGJvb2wgQzMgPSBmYWxzZSwgYm9vbCBD NCA9IGZhbHNlCiAgICAsIGJvb2wgQzUgPSBmYWxzZQogICAgPgpzdHJ1Y3QgbGFtYmRhX29yCiAg ICA6IHRydWVfCnsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IGxhbWJkYV9vcjwgZmFsc2UsZmFsc2Us ZmFsc2UsZmFsc2UsZmFsc2UgPgogICAgOiBmYWxzZV8Kewp9OwoKfQoKdGVtcGxhdGU8IGludCBO LCB0eXBlbmFtZSBQcm90ZWN0ID4Kc3RydWN0IGxhbWJkYV9pbXBsPCBhcmc8Tj4sUHJvdGVjdCA+ CnsKICAgIHR5cGVkZWYgdHJ1ZV8gaXNfbGU7CiAgICB0eXBlZGVmIGFyZzxOPiB0eXBlOwp9OwoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpz dHJ1Y3QgbGFtYmRhX2ltcGw8CiAgICAgIGJpbmQwPEY+CiAgICAsIFByb3RlY3QKICAgID4Kewog ICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQwPAogICAgICAgICAgRgog ICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEg PiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIFQxCiAgICA+CnN0cnVjdCBsYW1iZGE8IEY8VDE+ID4K ICAgIDogbGFtYmRhX2ltcGw8IEY8VDE+LHRydWVfID4Kewp9OwoKbmFtZXNwYWNlIGF1eCB7Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgUHJvdGVjdAogICAgLCB0ZW1w bGF0ZTwgdHlwZW5hbWUgUDEgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxCiAgICA+CnN0cnVj dCBsZV9yZXN1bHQxCnsKICAgIHR5cGVkZWYgRjwKICAgICAgICAgIHR5cGVuYW1lIEwxOjp0eXBl CiAgICAgICAgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQ MSA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDE8IHRy dWVfLGZhbHNlXyxGLEwxID4KewogICAgdHlwZWRlZiBiaW5kMTwKICAgICAgICAgIHF1b3RlMTxG PgogICAgICAgICwgdHlwZW5hbWUgTDE6OnR5cGUKICAgICAgICA+IHR5cGU7Cn07Cgp0ZW1wbGF0 ZTwKICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBM MQogICAgPgpzdHJ1Y3QgbGVfcmVzdWx0MTwgdHJ1ZV8sdHJ1ZV8sRixMMSA+CnsKICAgIHR5cGVk ZWYgcHJvdGVjdDwgYmluZDE8CiAgICAgICAgICBxdW90ZTE8Rj4KICAgICAgICAsIHR5cGVuYW1l IEwxOjp0eXBlCiAgICAgICAgPiA+IHR5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxh dGU8IHR5cGVuYW1lIFAxID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMQogICAgLCB0eXBlbmFt ZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgRjxUMT4sIFByb3RlY3QK ICAgID4KewogICAgdHlwZWRlZiBsYW1iZGFfaW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGF1eDo6 bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZQogICAgICAgID4gaXNfbGU7Cgog ICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3VsdDE8CiAgICAgICAgICB0eXBlbmFtZSBp c19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAgICAgICwgRgogICAgICAgICwgbDEKICAg ICAgICA+Ojp0eXBlIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5h bWUgVDEKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2ltcGw8CiAg ICAgIGJpbmQxPCBGLFQxID4KICAgICwgUHJvdGVjdAogICAgPgp7CiAgICB0eXBlZGVmIGZhbHNl XyBpc19sZTsKICAgIHR5cGVkZWYgYmluZDE8CiAgICAgICAgICBGCiAgICAgICAgLCBUMQogICAg ICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5 cGVuYW1lIFAyID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIKICAgID4K c3RydWN0IGxhbWJkYTwgRjxUMSxUMj4gPgogICAgOiBsYW1iZGFfaW1wbDwgRjxUMSxUMj4sdHJ1 ZV8gPgp7Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBJc0xF LCB0eXBlbmFtZSBQcm90ZWN0CiAgICAsIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUg UDIgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxLCB0eXBlbmFtZSBMMgogICAgPgpzdHJ1Y3Qg bGVfcmVzdWx0Mgp7CiAgICB0eXBlZGVmIEY8CiAgICAgICAgICB0eXBlbmFtZSBMMTo6dHlwZSwg dHlwZW5hbWUgTDI6OnR5cGUKICAgICAgICA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVt cGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUg TDEsIHR5cGVuYW1lIEwyCiAgICA+CnN0cnVjdCBsZV9yZXN1bHQyPCB0cnVlXyxmYWxzZV8sRixM MSxMMiA+CnsKICAgIHR5cGVkZWYgYmluZDI8CiAgICAgICAgICBxdW90ZTI8Rj4KICAgICAgICAs IHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBlbmFtZSBMMjo6dHlwZQogICAgICAgID4gdHlwZTsKfTsK CnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyID4gY2xh c3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIKICAgID4Kc3RydWN0IGxlX3Jlc3Vs dDI8IHRydWVfLHRydWVfLEYsTDEsTDIgPgp7CiAgICB0eXBlZGVmIHByb3RlY3Q8IGJpbmQyPAog ICAgICAgICAgcXVvdGUyPEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUg TDI6OnR5cGUKICAgICAgICA+ID4gdHlwZTsKfTsKCn0KCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0 ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwg dHlwZW5hbWUgVDIKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2lt cGw8CiAgICAgIEY8IFQxLFQyID4sIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBsYW1iZGFf aW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQyPiBsMjsKCiAgICB0eXBlZGVm IGF1eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2 YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3Vs dDI8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAg ICAgICwgRgogICAgICAgICwgbDEsIGwyCiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwoKdGVtcGxh dGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgLCB0eXBl bmFtZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgYmluZDI8IEYsVDEs VDIgPgogICAgLCBQcm90ZWN0CiAgICA+CnsKICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwogICAg dHlwZWRlZiBiaW5kMjwKICAgICAgICAgIEYKICAgICAgICAsIFQxLCBUMgogICAgICAgID4gdHlw ZTsKfTsKCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAy LCB0eXBlbmFtZSBQMyA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0 eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgbGFtYmRhPCBGPFQxLFQyLFQzPiA+CiAgICA6IGxhbWJk YV9pbXBsPCBGPFQxLFQyLFQzPix0cnVlXyA+CnsKfTsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxh dGU8CiAgICAgIHR5cGVuYW1lIElzTEUsIHR5cGVuYW1lIFByb3RlY3QKICAgICwgdGVtcGxhdGU8 IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMgPiBjbGFzcyBGCiAgICAsIHR5 cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5hbWUgTDMKICAgID4Kc3RydWN0IGxlX3Jlc3Vs dDMKewogICAgdHlwZWRlZiBGPAogICAgICAgICAgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1l IEwyOjp0eXBlLCB0eXBlbmFtZSBMMzo6dHlwZQogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRl PAogICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMyA+ IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwyLCB0eXBlbmFtZSBMMwogICAg PgpzdHJ1Y3QgbGVfcmVzdWx0MzwgdHJ1ZV8sZmFsc2VfLEYsTDEsTDIsTDMgPgp7CiAgICB0eXBl ZGVmIGJpbmQzPAogICAgICAgICAgcXVvdGUzPEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlw ZSwgdHlwZW5hbWUgTDI6OnR5cGUsIHR5cGVuYW1lIEwzOjp0eXBlCiAgICAgICAgPiB0eXBlOwp9 OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5 cGVuYW1lIFAzID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVu YW1lIEwzCiAgICA+CnN0cnVjdCBsZV9yZXN1bHQzPCB0cnVlXyx0cnVlXyxGLEwxLEwyLEwzID4K ewogICAgdHlwZWRlZiBwcm90ZWN0PCBiaW5kMzwKICAgICAgICAgIHF1b3RlMzxGPgogICAgICAg ICwgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1lIEwyOjp0eXBlLCB0eXBlbmFtZSBMMzo6dHlw ZQogICAgICAgID4gPiB0eXBlOwp9OwoKfQoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBl bmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzID4gY2xhc3MgRgogICAgLCB0eXBlbmFt ZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAg ID4Kc3RydWN0IGxhbWJkYV9pbXBsPAogICAgICBGPCBUMSxUMixUMyA+LCBQcm90ZWN0CiAgICA+ CnsKICAgIHR5cGVkZWYgbGFtYmRhX2ltcGw8VDE+IGwxOwogICAgdHlwZWRlZiBsYW1iZGFfaW1w bDxUMj4gbDI7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQzPiBsMzsKCiAgICB0eXBlZGVmIGF1 eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2YWx1 ZSwgbDM6OmlzX2xlOjp2YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFt ZSBhdXg6OmxlX3Jlc3VsdDM8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAg ICwgUHJvdGVjdAogICAgICAgICwgRgogICAgICAgICwgbDEsIGwyLCBsMwogICAgICAgID46OnR5 cGUgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlw ZW5hbWUgVDIsIHR5cGVuYW1lIFQzCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAgID4Kc3RydWN0 IGxhbWJkYV9pbXBsPAogICAgICBiaW5kMzwgRixUMSxUMixUMyA+CiAgICAsIFByb3RlY3QKICAg ID4KewogICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQzPAogICAgICAg ICAgRgogICAgICAgICwgVDEsIFQyLCBUMwogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAog ICAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlw ZW5hbWUgUDQgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h bWUgVDMsIHR5cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsYW1iZGE8IEY8VDEsVDIsVDMsVDQ+ID4K ICAgIDogbGFtYmRhX2ltcGw8IEY8VDEsVDIsVDMsVDQ+LHRydWVfID4Kewp9OwoKbmFtZXNwYWNl IGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXNMRSwgdHlwZW5hbWUgUHJvdGVjdAog ICAgLCB0ZW1wbGF0ZTwgdHlwZW5hbWUgUDEsIHR5cGVuYW1lIFAyLCB0eXBlbmFtZSBQMywgdHlw ZW5hbWUgUDQgPiBjbGFzcyBGCiAgICAsIHR5cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5h bWUgTDMsIHR5cGVuYW1lIEw0CiAgICA+CnN0cnVjdCBsZV9yZXN1bHQ0CnsKICAgIHR5cGVkZWYg RjwKICAgICAgICAgIHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBlbmFtZSBMMjo6dHlwZSwgdHlwZW5h bWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVuYW1lIEw0Ojp0eXBlCiAgICAgICAgPiB0eXBlOwp9 OwoKdGVtcGxhdGU8CiAgICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIsIHR5 cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCA+IGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVu YW1lIEwyLCB0eXBlbmFtZSBMMywgdHlwZW5hbWUgTDQKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDQ8 IHRydWVfLGZhbHNlXyxGLEwxLEwyLEwzLEw0ID4KewogICAgdHlwZWRlZiBiaW5kNDwKICAgICAg ICAgIHF1b3RlNDxGPgogICAgICAgICwgdHlwZW5hbWUgTDE6OnR5cGUsIHR5cGVuYW1lIEwyOjp0 eXBlLCB0eXBlbmFtZSBMMzo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgTDQ6OnR5cGUKICAgICAg ICA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBl bmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0ID4gY2xhc3MgRgogICAgLCB0eXBlbmFt ZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBlbmFtZSBMNAogICAgPgpzdHJ1Y3Qg bGVfcmVzdWx0NDwgdHJ1ZV8sdHJ1ZV8sRixMMSxMMixMMyxMNCA+CnsKICAgIHR5cGVkZWYgcHJv dGVjdDwgYmluZDQ8CiAgICAgICAgICBxdW90ZTQ8Rj4KICAgICAgICAsIHR5cGVuYW1lIEwxOjp0 eXBlLCB0eXBlbmFtZSBMMjo6dHlwZSwgdHlwZW5hbWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVu YW1lIEw0Ojp0eXBlCiAgICAgICAgPiA+IHR5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTwKICAgICAgdGVt cGxhdGU8IHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0 ID4gY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0 eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBQcm90ZWN0CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1w bDwKICAgICAgRjwgVDEsVDIsVDMsVDQgPiwgUHJvdGVjdAogICAgPgp7CiAgICB0eXBlZGVmIGxh bWJkYV9pbXBsPFQxPiBsMTsKICAgIHR5cGVkZWYgbGFtYmRhX2ltcGw8VDI+IGwyOwogICAgdHlw ZWRlZiBsYW1iZGFfaW1wbDxUMz4gbDM7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQ0PiBsNDsK CiAgICB0eXBlZGVmIGF1eDo6bGFtYmRhX29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwg bDI6OmlzX2xlOjp2YWx1ZSwgbDM6OmlzX2xlOjp2YWx1ZQogICAgICAgICwgbDQ6OmlzX2xlOjp2 YWx1ZQogICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3Vs dDQ8CiAgICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAg ICAgICwgRgogICAgICAgICwgbDEsIGwyLCBsMywgbDQKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07 Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0 eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1 Y3QgbGFtYmRhX2ltcGw8CiAgICAgIGJpbmQ0PCBGLFQxLFQyLFQzLFQ0ID4KICAgICwgUHJvdGVj dAogICAgPgp7CiAgICB0eXBlZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgYmluZDQ8CiAg ICAgICAgICBGCiAgICAgICAgLCBUMSwgVDIsIFQzLCBUNAogICAgICAgID4gdHlwZTsKfTsKCnRl bXBsYXRlPAogICAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQ MiwgdHlwZW5hbWUgUDMsIHR5cGVuYW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAg ID4KICAgICAgY2xhc3MgRgogICAgLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l IFQzLCB0eXBlbmFtZSBUNCwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGxhbWJkYTwgRjxUMSxU MixUMyxUNCxUNT4gPgogICAgOiBsYW1iZGFfaW1wbDwgRjxUMSxUMixUMyxUNCxUNT4sdHJ1ZV8g Pgp7Cn07CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBJc0xFLCB0 eXBlbmFtZSBQcm90ZWN0CiAgICAsIHRlbXBsYXRlPCB0eXBlbmFtZSBQMSwgdHlwZW5hbWUgUDIs IHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNCwgdHlwZW5hbWUgUDUgPiBjbGFzcyBGCiAgICAsIHR5 cGVuYW1lIEwxLCB0eXBlbmFtZSBMMiwgdHlwZW5hbWUgTDMsIHR5cGVuYW1lIEw0LCB0eXBlbmFt ZSBMNQogICAgPgpzdHJ1Y3QgbGVfcmVzdWx0NQp7CiAgICB0eXBlZGVmIEY8CiAgICAgICAgICB0 eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUgTDI6OnR5cGUsIHR5cGVuYW1lIEwzOjp0eXBlCiAg ICAgICAgLCB0eXBlbmFtZSBMNDo6dHlwZSwgdHlwZW5hbWUgTDU6OnR5cGUKICAgICAgICA+IHR5 cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFtZSBQMSwg dHlwZW5hbWUgUDIsIHR5cGVuYW1lIFAzLCB0eXBlbmFtZSBQNAogICAgICAgICwgdHlwZW5hbWUg UDUKICAgICAgICA+CiAgICAgIGNsYXNzIEYKICAgICwgdHlwZW5hbWUgTDEsIHR5cGVuYW1lIEwy LCB0eXBlbmFtZSBMMywgdHlwZW5hbWUgTDQsIHR5cGVuYW1lIEw1CiAgICA+CnN0cnVjdCBsZV9y ZXN1bHQ1PCB0cnVlXyxmYWxzZV8sRixMMSxMMixMMyxMNCxMNSA+CnsKICAgIHR5cGVkZWYgYmlu ZDU8CiAgICAgICAgICBxdW90ZTU8Rj4KICAgICAgICAsIHR5cGVuYW1lIEwxOjp0eXBlLCB0eXBl bmFtZSBMMjo6dHlwZSwgdHlwZW5hbWUgTDM6OnR5cGUKICAgICAgICAsIHR5cGVuYW1lIEw0Ojp0 eXBlLCB0eXBlbmFtZSBMNTo6dHlwZQogICAgICAgID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAg ICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUg UDMsIHR5cGVuYW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAgID4KICAgICAgY2xh c3MgRgogICAgLCB0eXBlbmFtZSBMMSwgdHlwZW5hbWUgTDIsIHR5cGVuYW1lIEwzLCB0eXBlbmFt ZSBMNCwgdHlwZW5hbWUgTDUKICAgID4Kc3RydWN0IGxlX3Jlc3VsdDU8IHRydWVfLHRydWVfLEYs TDEsTDIsTDMsTDQsTDUgPgp7CiAgICB0eXBlZGVmIHByb3RlY3Q8IGJpbmQ1PAogICAgICAgICAg cXVvdGU1PEY+CiAgICAgICAgLCB0eXBlbmFtZSBMMTo6dHlwZSwgdHlwZW5hbWUgTDI6OnR5cGUs IHR5cGVuYW1lIEwzOjp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBMNDo6dHlwZSwgdHlwZW5hbWUg TDU6OnR5cGUKICAgICAgICA+ID4gdHlwZTsKfTsKCn0KCnRlbXBsYXRlPAogICAgICB0ZW1wbGF0 ZTwKICAgICAgICAgIHR5cGVuYW1lIFAxLCB0eXBlbmFtZSBQMiwgdHlwZW5hbWUgUDMsIHR5cGVu YW1lIFA0CiAgICAgICAgLCB0eXBlbmFtZSBQNQogICAgICAgID4KICAgICAgY2xhc3MgRgogICAg LCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCwgdHlw ZW5hbWUgVDUKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpzdHJ1Y3QgbGFtYmRhX2ltcGw8 CiAgICAgIEY8IFQxLFQyLFQzLFQ0LFQ1ID4sIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBs YW1iZGFfaW1wbDxUMT4gbDE7CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQyPiBsMjsKICAgIHR5 cGVkZWYgbGFtYmRhX2ltcGw8VDM+IGwzOwogICAgdHlwZWRlZiBsYW1iZGFfaW1wbDxUND4gbDQ7 CiAgICB0eXBlZGVmIGxhbWJkYV9pbXBsPFQ1PiBsNTsKCiAgICB0eXBlZGVmIGF1eDo6bGFtYmRh X29yPAogICAgICAgICAgbDE6OmlzX2xlOjp2YWx1ZSwgbDI6OmlzX2xlOjp2YWx1ZSwgbDM6Omlz X2xlOjp2YWx1ZQogICAgICAgICwgbDQ6OmlzX2xlOjp2YWx1ZSwgbDU6OmlzX2xlOjp2YWx1ZQog ICAgICAgID4gaXNfbGU7CgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6OmxlX3Jlc3VsdDU8CiAg ICAgICAgICB0eXBlbmFtZSBpc19sZTo6dHlwZQogICAgICAgICwgUHJvdGVjdAogICAgICAgICwg RgogICAgICAgICwgbDEsIGwyLCBsMywgbDQsIGw1CiAgICAgICAgPjo6dHlwZSB0eXBlOwp9OwoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1CiAgICAsIHR5cGVuYW1lIFBy b3RlY3QKICAgID4Kc3RydWN0IGxhbWJkYV9pbXBsPAogICAgICBiaW5kNTwgRixUMSxUMixUMyxU NCxUNSA+CiAgICAsIFByb3RlY3QKICAgID4KewogICAgdHlwZWRlZiBmYWxzZV8gaXNfbGU7CiAg ICB0eXBlZGVmIGJpbmQ1PAogICAgICAgICAgRgogICAgICAgICwgVDEsIFQyLCBUMywgVDQsIFQ1 CiAgICAgICAgPiB0eXBlOwp9OwoKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBQcm90 ZWN0ID4Kc3RydWN0IGxhbWJkYV9pbXBsPCBwcm90ZWN0PFQ+LFByb3RlY3QgPgp7CiAgICB0eXBl ZGVmIGZhbHNlXyBpc19sZTsKICAgIHR5cGVkZWYgcHJvdGVjdDxUPiB0eXBlOwp9OwoKCnRlbXBs YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1l IFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNQogICAgLCB0eXBlbmFtZSBQcm90ZWN0 CiAgICA+CnN0cnVjdCBsYW1iZGFfaW1wbDwKICAgICAgYmluZDwgRixUMSxUMixUMyxUNCxUNSA+ CiAgICAsIFByb3RlY3QKCiAgICA+CnsKICAgIHR5cGVkZWYgZmFsc2VfIGlzX2xlOwogICAgdHlw ZWRlZiBiaW5kPCBGLFQxLFQyLFQzLFQ0LFQ1ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBGLCB0eXBlbmFtZSBUCiAgICAsIHR5cGVuYW1lIFByb3RlY3QKICAgID4Kc3RydWN0 IGxhbWJkYV9pbXBsPCBiaW5kMXN0PEYsVD4sUHJvdGVjdCA+CnsKICAgIHR5cGVkZWYgZmFsc2Vf IGlzX2xlOwogICAgdHlwZWRlZiBiaW5kMXN0PCBGLFQgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAg ICAgIHR5cGVuYW1lIEYsIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgUHJvdGVjdAogICAgPgpz dHJ1Y3QgbGFtYmRhX2ltcGw8IGJpbmQybmQ8RixUPixQcm90ZWN0ID4KewogICAgdHlwZWRlZiBm YWxzZV8gaXNfbGU7CiAgICB0eXBlZGVmIGJpbmQybmQ8IEYsVCA+IHR5cGU7Cn07Cgp9Cn0KIyAy OCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNz ZWQuaHBwIiAyCiMgNDQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Z1bGxf bGFtYmRhLmhwcCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGFtYmRh LmhwcCIgMgojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhw cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9p bXBsLmhwcCIgMQojIDM3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVy X2ZvbGRfaW1wbC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8v aW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4vaXRlcl9mb2xkX2ltcGwu aHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1lc3BhY2UgYXV4 IHsKCgp0ZW1wbGF0ZTwKICAgICAgbG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5 cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9w CiAgICA+CnN0cnVjdCBpdGVyX2ZvbGRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBG aXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVu YW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2ltcGw8IDAsRmlyc3QsTGFzdCxT dGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAgdHlwZWRlZiBT dGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHN0YXRlMCBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjAg aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg ID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAxLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4K ewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAg dHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAg Pjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwoK CiAgICB0eXBlZGVmIHN0YXRlMSBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjEgaXRlcmF0b3I7Cn07 Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAg LCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0 ZXJfZm9sZF9pbXBsPCAyLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRl ZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBl bmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0 ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0 eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBz dGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwoKCiAgICB0eXBl ZGVmIHN0YXRlMiBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjIgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0 ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFt ZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0ZXJfZm9sZF9p bXBsPCAzLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBp dGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3 YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBG b3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBzdGF0ZTI7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgdHlwZWRlZiB0eXBlbmFt ZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTIsaXRlcjIgPjo6dHlwZSBzdGF0ZTM7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwoKCiAgICB0eXBlZGVmIHN0 YXRlMyBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjMgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAg ICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0 ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCA0 LEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsK ICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6 OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTAsaXRlcjAgPjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJk T3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTEsaXRlcjEgPjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3 YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTIsaXRlcjIgPjo6dHlwZSBzdGF0ZTM7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBG b3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PCBzdGF0ZTMsaXRlcjMgPjo6dHlwZSBzdGF0ZTQ7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIzOjpuZXh0IGl0ZXI0OwoKCiAgICB0eXBlZGVmIHN0YXRl NCBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjQgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAg bG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlw ZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBpdGVyX2Zv bGRfaW1wbAp7CiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pbXBsPAogICAgICAgICAgNAogICAgICAg ICwgRmlyc3QKICAgICAgICAsIExhc3QKICAgICAgICAsIFN0YXRlCiAgICAgICAgLCBGb3J3YXJk T3AKICAgICAgICA+IGNodW5rXzsKCiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pbXBsPAogICAgICAg ICAgKCAoTiAtIDQpIDwgMCA/IDAgOiBOIC0gNCApCiAgICAgICAgLCB0eXBlbmFtZSBjaHVua186 Oml0ZXJhdG9yCiAgICAgICAgLCBMYXN0CiAgICAgICAgLCB0eXBlbmFtZSBjaHVua186OnN0YXRl CiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IHJlc187CgogICAgdHlwZWRlZiB0eXBlbmFt ZSByZXNfOjpzdGF0ZSBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6aXRlcmF0b3Ig aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg ID4Kc3RydWN0IGl0ZXJfZm9sZF9pbXBsPCAtMSxGaXJzdCxMYXN0LFN0YXRlLEZvcndhcmRPcCA+ CiAgICA6IGl0ZXJfZm9sZF9pbXBsPAogICAgICAgICAgLTEKICAgICAgICAsIHR5cGVuYW1lIEZp cnN0OjpuZXh0CiAgICAgICAgLCBMYXN0CiAgICAgICAgLCB0eXBlbmFtZSBGb3J3YXJkT3A6OnRl bXBsYXRlIGFwcGx5PCBTdGF0ZSxGaXJzdCA+Ojp0eXBlCiAgICAgICAgLCBGb3J3YXJkT3AKICAg ICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1l IFN0YXRlCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lt cGw8IC0xLExhc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIFN0YXRlIHN0 YXRlOwogICAgdHlwZWRlZiBMYXN0IGl0ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMg MzggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pbXBsLmhw cCIgMgojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcl9mb2xkLmhwcCIg MgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAg ICwgdHlwZW5hbWUgRm9yd2FyZE9wID0gdm9pZF8KICAgID4Kc3RydWN0IGl0ZXJfZm9sZAp7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6aXRlcl9mb2xkX2ltcGw8CiAgICAgICAgICA6OmJvb3N0 OjptcGw6Ok8xX3NpemU8U2VxdWVuY2U+Ojp2YWx1ZQogICAgICAgICwgdHlwZW5hbWUgYmVnaW48 U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0eXBlCiAg ICAgICAgLCBTdGF0ZQogICAgICAgICwgdHlwZW5hbWUgbGFtYmRhPEZvcndhcmRPcD46OnR5cGUK ICAgICAgICA+OjpzdGF0ZSB0eXBlOwoKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBpdGVyX2Zv bGQ8IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUg VDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+ IHN0cnVjdCBhcHBseSA6IGl0ZXJfZm9sZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4g c3RydWN0IGxhbWJkYTwgaXRlcl9mb2xkPCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVm IGl0ZXJfZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvaXRlcmF0b3JfcmFuZ2UuaHBwIiAxCiMgMjMgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pdGVyYXRvcl9yYW5nZS5ocHAiCm5hbWVzcGFjZSBib29z dCB7Cm5hbWVzcGFjZSBtcGwgewoKc3RydWN0IGl0ZXJhdG9yX3JhbmdlX3RhZzsKCnRlbXBsYXRl PAogICAgICB0eXBlbmFtZSBGaXJzdCA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIExhc3QgPSB2b2lk XwogICAgPgpzdHJ1Y3QgaXRlcmF0b3JfcmFuZ2UKewogICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5n ZV90YWcgdGFnOwogICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZSB0eXBlOwogICAgdHlwZWRlZiBG aXJzdCBiZWdpbjsKICAgIHR5cGVkZWYgTGFzdCBlbmQ7CgogICAKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IGl0ZXJhdG9yX3JhbmdlPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQx LHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5 cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGl0ZXJhdG9yX3JhbmdlPCBUMSxUMiA+ IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBpdGVyYXRvcl9yYW5nZTwgdm9pZF8s dm9pZF8gPiA+IHsgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9 OwoKfQp9CiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5ocHAi IDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25leHQuaHBwIiAxCiMgMjQg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9uZXh0LmhwcCIKbmFtZXNwYWNlIGJvb3N0 IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVCA9IHZvaWRfCiAg ICA+CnN0cnVjdCBuZXh0CnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgVDo6bmV4dCB0eXBlOwogICAK fTsKIyA0MyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL25leHQuaHBwIgp0ZW1wbGF0 ZTw+IHN0cnVjdCBuZXh0PCB2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5h bWUgVDIgPXZvaWRfICx0eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlw ZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogbmV4dDwgVDEgPiB7IH07IH07IHRlbXBs YXRlPD4gc3RydWN0IGxhbWJkYTwgbmV4dDwgdm9pZF8gPiA+IHsgdHlwZWRlZiBuZXh0PCB2b2lk XyA+IHR5cGU7IH07Cgp9Cn0KIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Rp c3RhbmNlLmhwcCIgMgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgoK bmFtZXNwYWNlIGF1eCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIENhdGVnb3J5LCB0eXBlbmFtZSBG aXJzdCwgdHlwZW5hbWUgTGFzdCA+CnN0cnVjdCBkaXN0YW5jZV9pbXBsCiAgICA6IGl0ZXJfZm9s ZDwKICAgICAgICAgIGl0ZXJhdG9yX3JhbmdlPEZpcnN0LExhc3Q+CiAgICAgICAgLCBpbnRlZ3Jh bF9jPGxvbmcsIDA+CiAgICAgICAgLCBuZXh0PD4KICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPCB0 eXBlbmFtZSBGaXJzdCwgdHlwZW5hbWUgTGFzdCA+CnN0cnVjdCBkaXN0YW5jZV9pbXBsPHJhX2l0 ZXJfdGFnXyxGaXJzdCxMYXN0PgogICAgOiBhdXg6Oml0ZXJfZGlzdGFuY2U8Rmlyc3QsTGFzdD4K ewp9OwoKfQoKCgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QgPSB2b2lkXwogICAgLCB0 eXBlbmFtZSBMYXN0ID0gdm9pZF8KICAgID4Kc3RydWN0IGRpc3RhbmNlCnsKCiAgICB0eXBlZGVm IHR5cGVuYW1lIGF1eDo6ZGlzdGFuY2VfaW1wbDwKICAgICAgICAgIHR5cGVuYW1lIEZpcnN0Ojpj YXRlZ29yeQogICAgICAgICwgRmlyc3QKICAgICAgICAsIExhc3QKICAgICAgICA+Ojp0eXBlIHR5 cGU7Cn07CgoKIyAxMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9kaXN0YW5jZS5o cHAiCiB0ZW1wbGF0ZTw+IHN0cnVjdCBkaXN0YW5jZTwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRl PCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUg VDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBkaXN0YW5jZTwg VDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgZGlzdGFuY2U8IHZvaWRf LHZvaWRfID4gPiB7IHR5cGVkZWYgZGlzdGFuY2U8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0K fQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9zaXplX2ltcGwuaHBw IiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKCgoKdGVtcGxhdGU8IHR5 cGVuYW1lIFRhZyA+CnN0cnVjdCBzaXplX3RyYWl0cwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUg U2VxdWVuY2UgPiBzdHJ1Y3QgYWxnb3JpdGhtCgogICAgICAgIDogZGlzdGFuY2U8CiAgICAgICAg ICAgICAgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgICAgICwgdHlwZW5h bWUgZW5kPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICAgICA+CiAgICB7CgoKCgoKCgogICAgfTsK fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9zaXplLmhwcCIg MgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAg dHlwZW5hbWUgU2VxdWVuY2UgPSB2b2lkXwogICAgPgpzdHJ1Y3Qgc2l6ZQogICAgOiBzaXplX3Ry YWl0czwgdHlwZW5hbWUgc2VxdWVuY2VfdGFnPFNlcXVlbmNlPjo6dHlwZSA+CiAgICAgICAgOjp0 ZW1wbGF0ZSBhbGdvcml0aG08IFNlcXVlbmNlID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0 IHNpemU8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFtZSBUMiA9dm9p ZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9 dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBzaXplPCBUMSA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgbGFtYmRhPCBzaXplPCB2b2lkXyA+ID4geyB0eXBlZGVmIHNpemU8IHZvaWRfID4gdHlwZTsg fTsKCn0KfQojIDEyICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29weS5ocHAiIDEKIyAyMCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9mb2xkLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvZm9sZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1 eF8vZm9sZF9pbXBsLmhwcCIgMQojIDM3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv YXV4Xy9mb2xkX2ltcGwuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9h dXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMQojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHJlcHJvY2Vzc2VkL3BsYWluL2ZvbGRfaW1wbC5o cHAiIDEKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXgg ewoKCnRlbXBsYXRlPAogICAgICBsb25nIE4KICAgICwgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlw ZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AK ICAgID4Kc3RydWN0IGZvbGRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAog ICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEZv cndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9pbXBsPCAwLEZpcnN0LExhc3QsU3RhdGUsRm9yd2Fy ZE9wID4KewogICAgdHlwZWRlZiBGaXJzdCBpdGVyMDsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGUw OwogICAgdHlwZWRlZiBzdGF0ZTAgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIwIGl0ZXJhdG9yOwp9 OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAg ICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBm b2xkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZp cnN0IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1l IEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46 OnR5cGUgc3RhdGUxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKCgog ICAgdHlwZWRlZiBzdGF0ZTEgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIxIGl0ZXJhdG9yOwp9OwoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwg dHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xk X2ltcGw8IDIsRmlyc3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0 IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZv cndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5 cGUgc3RhdGUxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTEsIHR5cGVuYW1l IGl0ZXIxOjp0eXBlPjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpu ZXh0IGl0ZXIyOwoKCiAgICB0eXBlZGVmIHN0YXRlMiBzdGF0ZTsKICAgIHR5cGVkZWYgaXRlcjIg aXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5h bWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAg ID4Kc3RydWN0IGZvbGRfaW1wbDwgMyxGaXJzdCxMYXN0LFN0YXRlLEZvcndhcmRPcCA+CnsKICAg IHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIHN0YXRlMDsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTAsIHR5cGVuYW1lIGl0 ZXIwOjp0eXBlPjo6dHlwZSBzdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0 IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PHN0 YXRlMSwgdHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIHN0YXRlMjsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6 dGVtcGxhdGUgYXBwbHk8c3RhdGUyLCB0eXBlbmFtZSBpdGVyMjo6dHlwZT46OnR5cGUgc3RhdGUz OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMjo6bmV4dCBpdGVyMzsKCgogICAgdHlwZWRlZiBz dGF0ZTMgc3RhdGU7CiAgICB0eXBlZGVmIGl0ZXIzIGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8CiAg ICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3Rh dGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8IDQsRmly c3QsTGFzdCxTdGF0ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAg dHlwZWRlZiBTdGF0ZSBzdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVt cGxhdGUgYXBwbHk8c3RhdGUwLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5cGUgc3RhdGUxOwog ICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5cGVkZWYgdHlwZW5h bWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxzdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBl Pjo6dHlwZSBzdGF0ZTI7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIxOjpuZXh0IGl0ZXIyOwog ICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PHN0YXRlMiwgdHlw ZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIHN0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cjI6Om5leHQgaXRlcjM7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUg YXBwbHk8c3RhdGUzLCB0eXBlbmFtZSBpdGVyMzo6dHlwZT46OnR5cGUgc3RhdGU0OwogICAgdHlw ZWRlZiB0eXBlbmFtZSBpdGVyMzo6bmV4dCBpdGVyNDsKCgogICAgdHlwZWRlZiBzdGF0ZTQgc3Rh dGU7CiAgICB0eXBlZGVmIGl0ZXI0IGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8CiAgICAgIGxvbmcg TgogICAgLCB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1l IFN0YXRlCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9pbXBsCnsK ICAgIHR5cGVkZWYgZm9sZF9pbXBsPAogICAgICAgICAgNAogICAgICAgICwgRmlyc3QKICAgICAg ICAsIExhc3QKICAgICAgICAsIFN0YXRlCiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IGNo dW5rXzsKCiAgICB0eXBlZGVmIGZvbGRfaW1wbDwKICAgICAgICAgICggKE4gLSA0KSA8IDAgPyAw IDogTiAtIDQgKQogICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjppdGVyYXRvcgogICAgICAgICwg TGFzdAogICAgICAgICwgdHlwZW5hbWUgY2h1bmtfOjpzdGF0ZQogICAgICAgICwgRm9yd2FyZE9w CiAgICAgICAgPiByZXNfOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVzXzo6c3RhdGUgc3RhdGU7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIHJlc186Oml0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVtcGxh dGU8CiAgICAgIHR5cGVuYW1lIEZpcnN0CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5h bWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8 IC0xLEZpcnN0LExhc3QsU3RhdGUsRm9yd2FyZE9wID4KICAgIDogZm9sZF9pbXBsPAogICAgICAg ICAgLTEKICAgICAgICAsIHR5cGVuYW1lIEZpcnN0OjpuZXh0CiAgICAgICAgLCBMYXN0CgogICAg ICAgICx0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PFN0YXRlLCB0eXBlbmFtZSBG aXJzdDo6dHlwZT46OnR5cGUKICAgICAgICAsIEZvcndhcmRPcAogICAgICAgID4Kewp9OwoKdGVt cGxhdGU8CiAgICAgIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlw ZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0 ZSxGb3J3YXJkT3AgPgp7CiAgICB0eXBlZGVmIFN0YXRlIHN0YXRlOwogICAgdHlwZWRlZiBMYXN0 IGl0ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzggIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L21wbC9hdXhfL2ZvbGRfaW1wbC5ocHAiIDIKIyAyNCAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2ZvbGQuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj ZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwg dHlwZW5hbWUgU3RhdGUgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AgPSB2b2lkXwog ICAgPgpzdHJ1Y3QgZm9sZAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6Zm9sZF9pbXBsPAog ICAgICAgICAgOjpib29zdDo6bXBsOjpPMV9zaXplPFNlcXVlbmNlPjo6dmFsdWUKICAgICAgICAs IHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgZW5kPFNl cXVlbmNlPjo6dHlwZQogICAgICAgICwgU3RhdGUKICAgICAgICAsIHR5cGVuYW1lIGxhbWJkYTxG b3J3YXJkT3A+Ojp0eXBlCiAgICAgICAgPjo6c3RhdGUgdHlwZTsKCiAgIAp9OwoKdGVtcGxhdGU8 PiBzdHJ1Y3QgZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBU MSx0eXBlbmFtZSBUMix0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUg VDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogZm9sZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBs YXRlPD4gc3RydWN0IGxhbWJkYTwgZm9sZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRl ZiBmb2xkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHkuaHBwIiAyCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFt ZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRf CiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgQmluYXJ5T3AgPSB2 b2lkXwogICAgPgpzdHJ1Y3QgY29weQogICAgOiBmb2xkPCBTZXF1ZW5jZSxTdGF0ZSxCaW5hcnlP cCA+CnsKfTsKCgoKIHRlbXBsYXRlPD4gc3RydWN0IGNvcHk8IHZvaWRfLHZvaWRfLHZvaWRfID4g eyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFt ZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGNvcHk8IFQx LFQyLFQzID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGNvcHk8IHZvaWRfLHZv aWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgY29weTwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9 OwoKfQp9CiMgMTMgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIgMQojIDIwICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lmX2ltcGwuaHBwIiAxCiMgMjMg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhw cCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaWRlbnRpdHkuaHBwIiAxCiMg MjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pZGVudGl0eS5ocHAiCm5hbWVzcGFj ZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQgPSB2 b2lkXwogICAgPgpzdHJ1Y3QgaWRlbnRpdHkKewogICAgdHlwZWRlZiBUIHR5cGU7CiAgIAp9OwoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgbWFrZV9pZGVu dGl0eQp7CiAgICB0eXBlZGVmIGlkZW50aXR5PFQ+IHR5cGU7CiAgIAp9OwoKdGVtcGxhdGU8PiBz dHJ1Y3QgaWRlbnRpdHk8IHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgLCB0eXBlbmFt ZSBUMiA9dm9pZF8gLHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBl bmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBpZGVudGl0eTwgVDEgPiB7IH07IH07IHRl bXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaWRlbnRpdHk8IHZvaWRfID4gPiB7IHR5cGVkZWYgaWRl bnRpdHk8IHZvaWRfID4gdHlwZTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgbWFrZV9pZGVudGl0eTwg dm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVuYW1lIFQyID12b2lkXyAsdHlw ZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+ IHN0cnVjdCBhcHBseSA6IG1ha2VfaWRlbnRpdHk8IFQxID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0 cnVjdCBsYW1iZGE8IG1ha2VfaWRlbnRpdHk8IHZvaWRfID4gPiB7IHR5cGVkZWYgbWFrZV9pZGVu dGl0eTwgdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcCIgMgoKCgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2Jvb2xfdmFsdWVfd2tuZC5ocHAiIDEKIyAyOCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaXRlcl9mb2xkX2lmX2ltcGwuaHBwIiAy CiMgMzYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9p bXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9pdGVyX2ZvbGRfaWZfaW1wbC5ocHAi IDEKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cm5hbWVzcGFjZSBhdXggewoK dGVtcGxhdGU8IHR5cGVuYW1lIEl0ZXJhdG9yLCB0eXBlbmFtZSBTdGF0ZSA+CnN0cnVjdCBpdGVy X2ZvbGRfaWZfbnVsbF9zdGVwCnsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICB0eXBlZGVm IEl0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVtcGxhdGU8IGJvb2wgPgpzdHJ1Y3QgaXRlcl9mb2xk X2lmX3N0ZXBfaW1wbAp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIEl0ZXJhdG9y CiAgICAgICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgICAgICwgdHlwZW5hbWUgU3RhdGVPcAogICAg ICAgICwgdHlwZW5hbWUgSXRlcmF0b3JPcAogICAgICAgID4KICAgIHN0cnVjdCByZXN1bHRfCiAg ICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBTdGF0ZU9wOjp0ZW1wbGF0ZSBhcHBseTwgU3Rh dGUsSXRlcmF0b3IgPjo6dHlwZSBzdGF0ZTsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIEl0ZXJh dG9yT3A6OnR5cGUgaXRlcmF0b3I7CiAgICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgaXRlcl9m b2xkX2lmX3N0ZXBfaW1wbDxmYWxzZT4KewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0eXBlbmFt ZSBJdGVyYXRvcgogICAgICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICAgICAsIHR5cGVuYW1lIFN0 YXRlT3AKICAgICAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yT3AKICAgICAgICA+CiAgICBzdHJ1Y3Qg cmVzdWx0XwogICAgewogICAgICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICAgICAgdHlwZWRl ZiBJdGVyYXRvciBpdGVyYXRvcjsKICAgIH07Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUg SXRlcmF0b3IKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAg ICAsIHR5cGVuYW1lIFByZWRpY2F0ZQogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lmX2ZvcndhcmRf c3RlcAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFByZWRpY2F0ZTo6dGVtcGxhdGUgYXBwbHk8IFN0 YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJf Zm9sZF9pZl9zdGVwX2ltcGw8CiAgICAgICAgICBub3RfbGFzdDo6dmFsdWUKICAgICAgICA+Ojp0 ZW1wbGF0ZSByZXN1bHRfPCBJdGVyYXRvciwgU3RhdGUsIEZvcndhcmRPcCwgbXBsOjpuZXh0PCBJ dGVyYXRvcj4gPiBpbXBsXzsKCiAgICB0eXBlZGVmIHR5cGVuYW1lIGltcGxfOjpzdGF0ZSBzdGF0 ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaW1wbF86Oml0ZXJhdG9yIGl0ZXJhdG9yOwp9OwoKdGVt cGxhdGU8CiAgICAgIHR5cGVuYW1lIEl0ZXJhdG9yCiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAs IHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgUHJlZGljYXRlCiAgICA+CnN0cnVj dCBpdGVyX2ZvbGRfaWZfYmFja3dhcmRfc3RlcAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFByZWRp Y2F0ZTo6dGVtcGxhdGUgYXBwbHk8IFN0YXRlLEl0ZXJhdG9yID46OnR5cGUgbm90X2xhc3Q7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJfZm9sZF9pZl9zdGVwX2ltcGw8CiAgICAgICAgICBub3Rf bGFzdDo6dmFsdWUKICAgICAgICA+Ojp0ZW1wbGF0ZSByZXN1bHRfPCBJdGVyYXRvcixTdGF0ZSxC YWNrd2FyZE9wLGlkZW50aXR5PEl0ZXJhdG9yPiA+IGltcGxfOwoKICAgIHR5cGVkZWYgdHlwZW5h bWUgaW1wbF86OnN0YXRlIHN0YXRlOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpbXBsXzo6aXRlcmF0 b3IgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgSXRlcmF0b3IKICAgICwg dHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICAsIHR5cGVuYW1lIEZv cndhcmRQcmVkaWNhdGUKICAgICwgdHlwZW5hbWUgQmFja3dhcmRPcAogICAgLCB0eXBlbmFtZSBC YWNrd2FyZFByZWRpY2F0ZQogICAgPgpzdHJ1Y3QgaXRlcl9mb2xkX2lmX2ltcGwKewogcHJpdmF0 ZToKICAgIHR5cGVkZWYgaXRlcl9mb2xkX2lmX251bGxfc3RlcDwgSXRlcmF0b3IsU3RhdGUgPiBm b3J3YXJkX3N0ZXAwOwogICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfZm9yd2FyZF9zdGVwPCB0eXBl bmFtZSBmb3J3YXJkX3N0ZXAwOjppdGVyYXRvciwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMDo6c3Rh dGUsIEZvcndhcmRPcCwgRm9yd2FyZFByZWRpY2F0ZSA+IGZvcndhcmRfc3RlcDE7CiAgICB0eXBl ZGVmIGl0ZXJfZm9sZF9pZl9mb3J3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3RlcDE6Oml0 ZXJhdG9yLCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAxOjpzdGF0ZSwgRm9yd2FyZE9wLCBGb3J3YXJk UHJlZGljYXRlID4gZm9yd2FyZF9zdGVwMjsKICAgIHR5cGVkZWYgaXRlcl9mb2xkX2lmX2Zvcndh cmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMjo6aXRlcmF0b3IsIHR5cGVuYW1lIGZvcndh cmRfc3RlcDI6OnN0YXRlLCBGb3J3YXJkT3AsIEZvcndhcmRQcmVkaWNhdGUgPiBmb3J3YXJkX3N0 ZXAzOwogICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfZm9yd2FyZF9zdGVwPCB0eXBlbmFtZSBmb3J3 YXJkX3N0ZXAzOjppdGVyYXRvciwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwMzo6c3RhdGUsIEZvcndh cmRPcCwgRm9yd2FyZFByZWRpY2F0ZSA+IGZvcndhcmRfc3RlcDQ7CgoKICAgIHR5cGVkZWYgdHlw ZW5hbWUgaWZfPAogICAgICAgICAgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6bm90X2xhc3QKICAg ICAgICAsIGl0ZXJfZm9sZF9pZl9pbXBsPAogICAgICAgICAgICAgIHR5cGVuYW1lIGZvcndhcmRf c3RlcDQ6Oml0ZXJhdG9yCiAgICAgICAgICAgICwgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6c3Rh dGUKICAgICAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICAgICAgLCBGb3J3YXJkUHJlZGljYXRl CiAgICAgICAgICAgICwgQmFja3dhcmRPcAogICAgICAgICAgICAsIEJhY2t3YXJkUHJlZGljYXRl CiAgICAgICAgICAgID4KICAgICAgICAsIGl0ZXJfZm9sZF9pZl9udWxsX3N0ZXA8CiAgICAgICAg ICAgICAgdHlwZW5hbWUgZm9yd2FyZF9zdGVwNDo6aXRlcmF0b3IKICAgICAgICAgICAgLCB0eXBl bmFtZSBmb3J3YXJkX3N0ZXA0OjpzdGF0ZQogICAgICAgICAgICA+CiAgICAgICAgPjo6dHlwZSBi YWNrd2FyZF9zdGVwNDsKCiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9iYWNrd2FyZF9zdGVwPCB0 eXBlbmFtZSBmb3J3YXJkX3N0ZXAzOjppdGVyYXRvciwgdHlwZW5hbWUgYmFja3dhcmRfc3RlcDQ6 OnN0YXRlLCBCYWNrd2FyZE9wLCBCYWNrd2FyZFByZWRpY2F0ZSA+IGJhY2t3YXJkX3N0ZXAzOwog ICAgdHlwZWRlZiBpdGVyX2ZvbGRfaWZfYmFja3dhcmRfc3RlcDwgdHlwZW5hbWUgZm9yd2FyZF9z dGVwMjo6aXRlcmF0b3IsIHR5cGVuYW1lIGJhY2t3YXJkX3N0ZXAzOjpzdGF0ZSwgQmFja3dhcmRP cCwgQmFja3dhcmRQcmVkaWNhdGUgPiBiYWNrd2FyZF9zdGVwMjsKICAgIHR5cGVkZWYgaXRlcl9m b2xkX2lmX2JhY2t3YXJkX3N0ZXA8IHR5cGVuYW1lIGZvcndhcmRfc3RlcDE6Oml0ZXJhdG9yLCB0 eXBlbmFtZSBiYWNrd2FyZF9zdGVwMjo6c3RhdGUsIEJhY2t3YXJkT3AsIEJhY2t3YXJkUHJlZGlj YXRlID4gYmFja3dhcmRfc3RlcDE7CiAgICB0eXBlZGVmIGl0ZXJfZm9sZF9pZl9iYWNrd2FyZF9z dGVwPCB0eXBlbmFtZSBmb3J3YXJkX3N0ZXAwOjppdGVyYXRvciwgdHlwZW5hbWUgYmFja3dhcmRf c3RlcDE6OnN0YXRlLCBCYWNrd2FyZE9wLCBCYWNrd2FyZFByZWRpY2F0ZSA+IGJhY2t3YXJkX3N0 ZXAwOwoKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIGJhY2t3YXJkX3N0ZXAwOjpzdGF0 ZSBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmFja3dhcmRfc3RlcDQ6Oml0ZXJhdG9yIGl0 ZXJhdG9yOwp9OwoKfQp9Cn0KIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1 eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIiAyCiMgMzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL2l0ZXJfZm9sZF9pZl9pbXBsLmhwcCIgMgojIDIxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyX2FwcGx5LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pdGVyX2FwcGx5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXBwbHkuaHBwIiAxCiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hcHBseS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvc2FtZV90cmFpdHMuaHBwIiAxCiMgMTQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL3NhbWVfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIgMQojIDIxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0 X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0 YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAyMiAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2FtZS5ocHAiIDIKCm5hbWVz cGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBULCB0eXBlbmFtZSBVID4gc3RydWN0 IGlzX3NhbWUgOiBtcGw6OmJvb2xfPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQg PiBzdHJ1Y3QgaXNfc2FtZTwgVCxUID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OwojIDg4ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zYW1lLmhwcCIKfQoKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFp dF91bmRlZi5ocHAiIDEKIyA5MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaXNfc2FtZS5ocHAiIDIKIyAxNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90 cmFpdHMvc2FtZV90cmFpdHMuaHBwIiAyCiMgMzAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hcHBseS5ocHAiIDIKIyAzOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Fw cGx5LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRl X3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9hcHBseS5ocHAiIDEKCgoKbmFtZXNw YWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwg dHlwZW5hbWUgVDEgPSB2b2lkXywgdHlwZW5hbWUgVDIgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBU MyA9IHZvaWRfLCB0eXBlbmFtZSBUNCA9IHZvaWRfLCB0eXBlbmFtZSBUNSA9IHZvaWRfCiAgICA+ CnN0cnVjdCBhcHBseTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBGID4Kc3RydWN0IGFwcGx5MCA6IEYK ewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIEYKICAgID4Kc3RydWN0IGFwcGx5PCBGLHZv aWRfLHZvaWRfLHZvaWRfLHZvaWRfLHZvaWRfID4KICAgIDogYXBwbHkwPEY+CnsKfTsKCnRlbXBs YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYXBwbHkxCiAg ICA6IEY6OnRlbXBsYXRlIGFwcGx5PAogICAgICAgICAgVDEKICAgICAgICA+CnsKfTsKCnRlbXBs YXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMQogICAgPgpzdHJ1Y3QgYXBwbHk8IEYs VDEsdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBhcHBseTE8IEYsVDEgPgp7Cn07Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCiAgICA+ CnN0cnVjdCBhcHBseTIKICAgIDogRjo6dGVtcGxhdGUgYXBwbHk8CiAgICAgICAgICBUMSwgVDIK ICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwg dHlwZW5hbWUgVDIKICAgID4Kc3RydWN0IGFwcGx5PCBGLFQxLFQyLHZvaWRfLHZvaWRfLHZvaWRf ID4KICAgIDogYXBwbHkyPCBGLFQxLFQyID4Kewp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1l IEYsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMKICAgID4Kc3RydWN0IGFw cGx5MwogICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTwKICAgICAgICAgIFQxLCBUMiwgVDMKICAgICAg ICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5h bWUgVDIsIHR5cGVuYW1lIFQzCiAgICA+CnN0cnVjdCBhcHBseTwgRixUMSxUMixUMyx2b2lkXyx2 b2lkXyA+CiAgICA6IGFwcGx5MzwgRixUMSxUMixUMyA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFt ZSBUNAogICAgPgpzdHJ1Y3QgYXBwbHk0CiAgICA6IEY6OnRlbXBsYXRlIGFwcGx5PAogICAgICAg ICAgVDEsIFQyLCBUMywgVDQKICAgICAgICA+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt ZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAog ICAgPgpzdHJ1Y3QgYXBwbHk8IEYsVDEsVDIsVDMsVDQsdm9pZF8gPgogICAgOiBhcHBseTQ8IEYs VDEsVDIsVDMsVDQgPgp7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRiwgdHlwZW5hbWUg VDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlwZW5hbWUg VDUKICAgID4Kc3RydWN0IGFwcGx5NQogICAgOiBGOjp0ZW1wbGF0ZSBhcHBseTwKICAgICAgICAg IFQxLCBUMiwgVDMsIFQ0LCBUNQogICAgICAgID4Kewp9OwoKCnRlbXBsYXRlPAogICAgICB0eXBl bmFtZSBGLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBU NAogICAgLCB0eXBlbmFtZSBUNQogICAgPgpzdHJ1Y3QgYXBwbHkKICAgIDogYXBwbHk1PCBGLFQx LFQyLFQzLFQ0LFQ1ID4Kewp9OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMgojIDM5ICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXBwbHkuaHBwIiAyCiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL2l0ZXJfYXBwbHkuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l c3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgRgog ICAgLCB0eXBlbmFtZSBJdGVyYXRvcgogICAgPgpzdHJ1Y3QgaXRlcl9hcHBseTEKICAgIDogYXBw bHkxPEYsdHlwZW5hbWUgSXRlcmF0b3I6OnR5cGU+CnsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBl bmFtZSBGCiAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yMQogICAgLCB0eXBlbmFtZSBJdGVyYXRvcjIK ICAgID4Kc3RydWN0IGl0ZXJfYXBwbHkyCiAgICA6IGFwcGx5MjwKICAgICAgICAgIEYKICAgICAg ICAsIHR5cGVuYW1lIEl0ZXJhdG9yMTo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgSXRlcmF0b3Iy Ojp0eXBlCiAgICAgICAgPgp7Cn07Cgp9Cn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC9tcGwvZmluZF9pZi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvb3IuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9vci5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vbmVzdGVkX3R5cGVfd2tu ZC5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL29yLmhwcCIgMgoK CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXBy b2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8v aW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9vci5ocHAiIDEKCgoKbmFtZXNwYWNlIGJvb3N0 IHsgbmFtZXNwYWNlIG1wbCB7CgpuYW1lc3BhY2UgYXV4IHsKCnRlbXBsYXRlPCBib29sIENfLCB0 eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCA+CnN0cnVj dCBvcl9pbXBsCiAgICA6IHRydWVfCnsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSwgdHlwZW5h bWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNCA+CnN0cnVjdCBvcl9pbXBsPCBmYWxzZSxU MSxUMixUMyxUNCA+CiAgICA6IG9yX2ltcGw8CiAgICAgICAgICBUMTo6dHlwZTo6dmFsdWUKICAg ICAgICAsIFQyLCBUMywgVDQKICAgICAgICAsIGZhbHNlXwogICAgICAgID4Kewp9OwoKdGVtcGxh dGU8PgpzdHJ1Y3Qgb3JfaW1wbDwKICAgICAgICAgIGZhbHNlCiAgICAgICAgLCBmYWxzZV8sIGZh bHNlXywgZmFsc2VfLCBmYWxzZV8KICAgICAgICA+CiAgICA6IGZhbHNlXwp7Cn07Cgp9Cgp0ZW1w bGF0ZTwKICAgICAgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRf CiAgICAsIHR5cGVuYW1lIFQzID0gZmFsc2VfLCB0eXBlbmFtZSBUNCA9IGZhbHNlXywgdHlwZW5h bWUgVDUgPSBmYWxzZV8KICAgID4Kc3RydWN0IG9yXwoKICAgIDogYXV4Ojpvcl9pbXBsPAogICAg ICAgICAgVDE6OnR5cGU6OnZhbHVlCiAgICAgICAgLCBUMiwgVDMsIFQ0LCBUNQogICAgICAgID4K CnsKICAgCgoKCgp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3Qgb3JfPCB2b2lkXyx2b2lkXyA+IHsgdGVt cGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBl bmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IG9yXzwg VDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgb3JfPCB2b2lkXyx2b2lk XyA+ID4geyB0eXBlZGVmIG9yXzwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKCgoKCn19CiMgMjgg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2Vk LmhwcCIgMgojIDMzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvb3IuaHBwIiAyCiMg MjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIgMgojIDEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9ub3QuaHBwIiAxCiMgMjYgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9ub3QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug bXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IGxvbmcgQ18gPgpzdHJ1Y3Qgbm90X2lt cGwKICAgIDogYm9vbF88IUNfPgp7Cn07Cgp9CgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQg PSB2b2lkXwogICAgPgpzdHJ1Y3Qgbm90XwogICAgOiBhdXg6Om5vdF9pbXBsPAogICAgICAgICAg VDo6dHlwZTo6dmFsdWUKICAgICAgICA+CnsKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBub3Rf PCB2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxICwgdHlwZW5hbWUgVDIgPXZvaWRfICx0 eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRf ID4gc3RydWN0IGFwcGx5IDogbm90XzwgVDEgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxh bWJkYTwgbm90Xzwgdm9pZF8gPiA+IHsgdHlwZWRlZiBub3RfPCB2b2lkXyA+IHR5cGU7IH07Cgp9 Cn0KIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmRfaWYuaHBwIiAyCgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hbHdheXMuaHBwIiAxCiMgMjMgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hbHdheXMuaHBwIgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2xhbWJkYV9zcGVjLmhwcCIgMQojIDI0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYWx3YXlzLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsK bmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVmFsdWUgPgpzdHJ1Y3QgYWx3YXlz CnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgVAogICAgICAgICwgdHlwZW5hbWUg VDIgPXZvaWRfICx0eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5h bWUgVDUgPXZvaWRfCiAgICAgICAgPgogICAgc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlw ZWRlZiBWYWx1ZSB0eXBlOwogICAgfTsKfTsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQxID4gc3Ry dWN0IGxhbWJkYTwgYWx3YXlzPCBUMSA+ID4geyB0eXBlZGVmIGFsd2F5czwgVDEgPiB0eXBlOyB9 OwoKfQp9CiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kX2lmLmhwcCIg MgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYmluZC5ocHAiIDEKIyAyOCAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmRfaWYuaHBwIiAyCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI5ICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvZmluZF9pZi5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3Qgewpu YW1lc3BhY2UgbXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1lIExhc3RJ dGVyYXRvciA+CnN0cnVjdCBmaW5kX2lmX3ByZWQKewogICAgdGVtcGxhdGU8CiAgICAgICAgICB0 eXBlbmFtZSBQcmVkaWNhdGUKICAgICAgICAsIHR5cGVuYW1lIEl0ZXJhdG9yCiAgICAgICAgPgog ICAgc3RydWN0IGFwcGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBub3RfPCBvcl88 CiAgICAgICAgICAgICAgaXNfc2FtZTxJdGVyYXRvcixMYXN0SXRlcmF0b3I+CiAgICAgICAgICAg ICwgYXV4OjppdGVyX2FwcGx5MTxQcmVkaWNhdGUsSXRlcmF0b3I+CiAgICAgICAgICAgID4gPjo6 dHlwZSB0eXBlOwogICAgfTsKfTsKCn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVl bmNlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgUHJlZGljYXRlID0gdm9pZF8KICAgID4Kc3RydWN0 IGZpbmRfaWYKewogcHJpdmF0ZToKICAgIHR5cGVkZWYgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+ Ojp0eXBlIGZpcnN0XzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgZW5kPFNlcXVlbmNlPjo6dHlwZSBs YXN0XzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgbGFtYmRhPFByZWRpY2F0ZT46OnR5cGUgcHJlZF87 CgogcHVibGljOgogICAgdHlwZWRlZiB0eXBlbmFtZSBhdXg6Oml0ZXJfZm9sZF9pZl9pbXBsPAog ICAgICAgICAgZmlyc3RfCiAgICAgICAgLCBwcmVkXwogICAgICAgICwgbXBsOjphcmc8MT4KICAg ICAgICAsIGF1eDo6ZmluZF9pZl9wcmVkPGxhc3RfPgogICAgICAgICwgdm9pZAogICAgICAgICwg YWx3YXlzPGZhbHNlXz4KICAgICAgICA+OjppdGVyYXRvciB0eXBlOwoKICAgCn07CgoKCiB0ZW1w bGF0ZTw+IHN0cnVjdCBmaW5kX2lmPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1l IFQxLHR5cGVuYW1lIFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8g LHR5cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGZpbmRfaWY8IFQxLFQyID4geyB9 OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGZpbmRfaWY8IHZvaWRfLHZvaWRfID4gPiB7 IHR5cGVkZWYgZmluZF9pZjwgdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMTQgIi4uLy4u Ly4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9jb3VudF9pZi5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2NvdW50X2lmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvYXBwbHlfaWYuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w bC9hcHBseV9pZi5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxh dGU8CiAgICAgIHR5cGVuYW1lIEMgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBGMSA9IHZvaWRfCiAg ICAsIHR5cGVuYW1lIEYyID0gdm9pZF8KICAgID4Kc3RydWN0IGFwcGx5X2lmCnsKIHByaXZhdGU6 CiAgICB0eXBlZGVmIHR5cGVuYW1lIGlmXzxDLEYxLEYyPjo6dHlwZSBudWxsYXJ5X2Z1bmNfOwoK IHB1YmxpYzoKICAgIHR5cGVkZWYgdHlwZW5hbWUgbnVsbGFyeV9mdW5jXzo6dHlwZSB0eXBlOwog ICAKfTsKCgoKdGVtcGxhdGU8CiAgICAgIGJvb2wgQwogICAgLCB0eXBlbmFtZSBGMQogICAgLCB0 eXBlbmFtZSBGMgogICAgPgpzdHJ1Y3QgYXBwbHlfaWZfYwp7CiBwcml2YXRlOgogICAgdHlwZWRl ZiB0eXBlbmFtZSBpZl9jPEMsRjEsRjI+Ojp0eXBlIG51bGxhcnlfZnVuY187CgogcHVibGljOgog ICAgdHlwZWRlZiB0eXBlbmFtZSBudWxsYXJ5X2Z1bmNfOjp0eXBlIHR5cGU7Cn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBhcHBseV9pZjwgdm9pZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBl bmFtZSBUMSx0eXBlbmFtZSBUMix0eXBlbmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlw ZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0IGFwcGx5IDogYXBwbHlfaWY8IFQxLFQyLFQzID4geyB9 OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBsYW1iZGE8IGFwcGx5X2lmPCB2b2lkXyx2b2lkXyx2b2lk XyA+ID4geyB0eXBlZGVmIGFwcGx5X2lmPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9 Cn0KIyAyNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvdW50X2lmLmhwcCIgMgoK CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI4ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY291bnRfaWYuaHBwIiAyCgoKCm5hbWVzcGFj ZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKbmFtZXNwYWNlIGF1eCB7Cgp0ZW1wbGF0ZTwgdHlw ZW5hbWUgUHJlZGljYXRlID4Kc3RydWN0IG5leHRfaWYKewogICAgdGVtcGxhdGU8CiAgICAgICAg ICB0eXBlbmFtZSBOCiAgICAgICAgLCB0eXBlbmFtZSBUCiAgICAgICAgPgogICAgc3RydWN0IGFw cGx5CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBhcHBseV9pZjwKICAgICAgICAgICAg ICB0eXBlbmFtZSBhcHBseTE8UHJlZGljYXRlLFQ+Ojp0eXBlCiAgICAgICAgICAgICwgbmV4dDxO PgogICAgICAgICAgICAsIGlkZW50aXR5PE4+CiAgICAgICAgICAgID46OnR5cGUgdHlwZTsKICAg IH07Cn07Cgp9CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAg ICAsIHR5cGVuYW1lIFByZWRpY2F0ZSA9IHZvaWRfCiAgICA+CnN0cnVjdCBjb3VudF9pZgp7CiBw cml2YXRlOgogICAgdHlwZWRlZiB0eXBlbmFtZSBsYW1iZGE8UHJlZGljYXRlPjo6dHlwZSBwcmVk XzsKCiBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIGZvbGQ8CiAgICAgICAgICBTZXF1ZW5j ZQogICAgICAgICwgaW50ZWdyYWxfYzx1bnNpZ25lZCBsb25nLCAwPgogICAgICAgICwgcHJvdGVj dDwgYXV4OjpuZXh0X2lmPHByZWRfPiA+CiAgICAgICAgPjo6dHlwZSB0eXBlOwoKICAgCn07CgoK CiB0ZW1wbGF0ZTw+IHN0cnVjdCBjb3VudF9pZjwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0 eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBjb3VudF9pZjwgVDEs VDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgY291bnRfaWY8IHZvaWRfLHZv aWRfID4gPiB7IHR5cGVkZWYgY291bnRfaWY8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQoj IDE1ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvaW5zZXJ0LmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvaW5zZXJ0LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvaW5zZXJ0X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvbXBsL2luc2VydF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBs IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgaW5zZXJ0X3RyYWl0czsKdGVtcGxh dGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBQb3MsIHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg aW5zZXJ0OwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnNlcnQu aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5zZXJ0X2lt cGwuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2luc2Vy dF9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29weV9iYWNr d2FyZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NvcHlfYmFj a3dhcmQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mb2xkX2JhY2t3 YXJkLmhwcCIgMQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZm9sZF9iYWNr d2FyZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FyZy5ocHAiIDEK IyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZvbGRfYmFja3dhcmQuaHBwIiAy CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2ZvbGRfYmFja3dhcmRf aW1wbC5ocHAiIDEKIyAzNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vZm9s ZF9iYWNrd2FyZF9pbXBsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv YXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL2F1eF8vaW5jbHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9mb2xkX2JhY2t3 YXJkX2ltcGwuaHBwIiAxCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewpuYW1l c3BhY2UgYXV4IHsKCgp0ZW1wbGF0ZTwKICAgICAgbG9uZyBOCiAgICAsIHR5cGVuYW1lIEZpcnN0 CiAgICAsIHR5cGVuYW1lIExhc3QKICAgICwgdHlwZW5hbWUgU3RhdGUKICAgICwgdHlwZW5hbWUg QmFja3dhcmRPcAogICAgLCB0eXBlbmFtZSBGb3J3YXJkT3AKICAgID4Kc3RydWN0IGZvbGRfYmFj a3dhcmRfaW1wbDsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFt ZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAg ICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IDAs Rmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgRmly c3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIGZ3ZF9z dGF0ZTAgYmt3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0YXRlOwogICAgdHlw ZWRlZiBpdGVyMCBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAog ICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJh Y2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3 YXJkX2ltcGw8IDEsRmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAg IHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlw ZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXIwOjpuZXh0IGl0ZXIxOwoKCiAgICB0eXBlZGVmIGZ3ZF9zdGF0ZTEgYmt3ZF9zdGF0ZTE7 CiAgICB0eXBlZGVmIHR5cGVuYW1lIEJhY2t3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGJrd2Rfc3Rh dGUxLCB0eXBlbmFtZSBpdGVyMDo6dHlwZT46OnR5cGUgYmt3ZF9zdGF0ZTA7CiAgICB0eXBlZGVm IGJrd2Rfc3RhdGUwIHN0YXRlOwogICAgdHlwZWRlZiBpdGVyMSBpdGVyYXRvcjsKfTsKCnRlbXBs YXRlPAogICAgICB0eXBlbmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVu YW1lIFN0YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2Fy ZE9wCiAgICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IDIsRmlyc3QsTGFzdCxTdGF0ZSxC YWNrd2FyZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBl ZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVt cGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlwZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9z dGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRl ZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1l IGl0ZXIxOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVy MTo6bmV4dCBpdGVyMjsKCgogICAgdHlwZWRlZiBmd2Rfc3RhdGUyIGJrd2Rfc3RhdGUyOwogICAg dHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMiwg dHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUxOwogICAgdHlwZWRlZiB0eXBl bmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMSwgdHlwZW5hbWUgaXRl cjA6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUwOwoKCiAgICB0eXBlZGVmIGJrd2Rfc3RhdGUwIHN0 YXRlOwogICAgdHlwZWRlZiBpdGVyMiBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBl bmFtZSBGaXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAs IHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVj dCBmb2xkX2JhY2t3YXJkX2ltcGw8IDMsRmlyc3QsTGFzdCxTdGF0ZSxCYWNrd2FyZE9wLEZvcndh cmRPcCA+CnsKICAgIHR5cGVkZWYgRmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9z dGF0ZTA7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Zndk X3N0YXRlMCwgdHlwZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBl ZGVmIHR5cGVuYW1lIGl0ZXIwOjpuZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3 YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6 dHlwZSBmd2Rfc3RhdGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMTo6bmV4dCBpdGVyMjsK ICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUy LCB0eXBlbmFtZSBpdGVyMjo6dHlwZT46OnR5cGUgZndkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlw ZW5hbWUgaXRlcjI6Om5leHQgaXRlcjM7CgoKICAgIHR5cGVkZWYgZndkX3N0YXRlMyBia3dkX3N0 YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3 ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIyOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMjsKICAgIHR5 cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTIsIHR5 cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMTsKICAgIHR5cGVkZWYgdHlwZW5h bWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIw Ojp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMDsKCgogICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0 ZTsKICAgIHR5cGVkZWYgaXRlcjMgaXRlcmF0b3I7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5h bWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAgLCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0 eXBlbmFtZSBCYWNrd2FyZE9wCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcAogICAgPgpzdHJ1Y3Qg Zm9sZF9iYWNrd2FyZF9pbXBsPCA0LEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJk T3AgPgp7CiAgICB0eXBlZGVmIEZpcnN0IGl0ZXIwOwogICAgdHlwZWRlZiBTdGF0ZSBmd2Rfc3Rh dGUwOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5PGZ3ZF9z dGF0ZTAsIHR5cGVuYW1lIGl0ZXIwOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUxOwogICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyMDo6bmV4dCBpdGVyMTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgRm9yd2Fy ZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUxLCB0eXBlbmFtZSBpdGVyMTo6dHlwZT46OnR5 cGUgZndkX3N0YXRlMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjE6Om5leHQgaXRlcjI7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMiwg dHlwZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTM7CiAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXIyOjpuZXh0IGl0ZXIzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRl bXBsYXRlIGFwcGx5PGZ3ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIzOjp0eXBlPjo6dHlwZSBmd2Rf c3RhdGU0OwogICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyMzo6bmV4dCBpdGVyNDsKCgogICAgdHlw ZWRlZiBmd2Rfc3RhdGU0IGJrd2Rfc3RhdGU0OwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2Fy ZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlNCwgdHlwZW5hbWUgaXRlcjM6OnR5cGU+Ojp0 eXBlIGJrd2Rfc3RhdGUzOwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0 ZSBhcHBseTxia3dkX3N0YXRlMywgdHlwZW5hbWUgaXRlcjI6OnR5cGU+Ojp0eXBlIGJrd2Rfc3Rh dGUyOwogICAgdHlwZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dk X3N0YXRlMiwgdHlwZW5hbWUgaXRlcjE6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUxOwogICAgdHlw ZWRlZiB0eXBlbmFtZSBCYWNrd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxia3dkX3N0YXRlMSwgdHlw ZW5hbWUgaXRlcjA6OnR5cGU+Ojp0eXBlIGJrd2Rfc3RhdGUwOwoKCiAgICB0eXBlZGVmIGJrd2Rf c3RhdGUwIHN0YXRlOwogICAgdHlwZWRlZiBpdGVyNCBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAog ICAgICBsb25nIE4KICAgICwgdHlwZW5hbWUgRmlyc3QKICAgICwgdHlwZW5hbWUgTGFzdAogICAg LCB0eXBlbmFtZSBTdGF0ZQogICAgLCB0eXBlbmFtZSBCYWNrd2FyZE9wCiAgICAsIHR5cGVuYW1l IEZvcndhcmRPcAogICAgPgpzdHJ1Y3QgZm9sZF9iYWNrd2FyZF9pbXBsCnsKICAgIHR5cGVkZWYg Rmlyc3QgaXRlcjA7CiAgICB0eXBlZGVmIFN0YXRlIGZ3ZF9zdGF0ZTA7CiAgICB0eXBlZGVmIHR5 cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0YXRlMCwgdHlwZW5hbWUgaXRl cjA6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTE7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXIwOjpu ZXh0IGl0ZXIxOwogICAgdHlwZWRlZiB0eXBlbmFtZSBGb3J3YXJkT3A6OnRlbXBsYXRlIGFwcGx5 PGZ3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBmd2Rfc3RhdGUyOwogICAg dHlwZWRlZiB0eXBlbmFtZSBpdGVyMTo6bmV4dCBpdGVyMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUg Rm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxmd2Rfc3RhdGUyLCB0eXBlbmFtZSBpdGVyMjo6dHlw ZT46OnR5cGUgZndkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcjI6Om5leHQgaXRl cjM7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEZvcndhcmRPcDo6dGVtcGxhdGUgYXBwbHk8ZndkX3N0 YXRlMywgdHlwZW5hbWUgaXRlcjM6OnR5cGU+Ojp0eXBlIGZ3ZF9zdGF0ZTQ7CiAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXIzOjpuZXh0IGl0ZXI0OwoKCiAgICB0eXBlZGVmIGZvbGRfYmFja3dhcmRf aW1wbDwKICAgICAgICAgICggKE4gLSA0KSA8IDAgPyAwIDogTiAtIDQgKQogICAgICAgICwgaXRl cjQKICAgICAgICAsIExhc3QKICAgICAgICAsIGZ3ZF9zdGF0ZTQKICAgICAgICAsIEJhY2t3YXJk T3AKICAgICAgICAsIEZvcndhcmRPcAogICAgICAgID4gbmVzdGVkX2NodW5rOwoKICAgIHR5cGVk ZWYgdHlwZW5hbWUgbmVzdGVkX2NodW5rOjpzdGF0ZSBia3dkX3N0YXRlNDsKICAgIHR5cGVkZWYg dHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTQsIHR5cGVuYW1l IGl0ZXIzOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMzsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFj a3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTMsIHR5cGVuYW1lIGl0ZXIyOjp0eXBl Pjo6dHlwZSBia3dkX3N0YXRlMjsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVt cGxhdGUgYXBwbHk8Ymt3ZF9zdGF0ZTIsIHR5cGVuYW1lIGl0ZXIxOjp0eXBlPjo6dHlwZSBia3dk X3N0YXRlMTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBwbHk8 Ymt3ZF9zdGF0ZTEsIHR5cGVuYW1lIGl0ZXIwOjp0eXBlPjo6dHlwZSBia3dkX3N0YXRlMDsKCgog ICAgdHlwZWRlZiBia3dkX3N0YXRlMCBzdGF0ZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUgbmVzdGVk X2NodW5rOjppdGVyYXRvciBpdGVyYXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBG aXJzdAogICAgLCB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0YXRlCiAgICAsIHR5cGVu YW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAgICA+CnN0cnVjdCBmb2xk X2JhY2t3YXJkX2ltcGw8IC0xLEZpcnN0LExhc3QsU3RhdGUsQmFja3dhcmRPcCxGb3J3YXJkT3Ag Pgp7CiAgICB0eXBlZGVmIGZvbGRfYmFja3dhcmRfaW1wbDwKICAgICAgICAgIC0xCiAgICAgICAg LCB0eXBlbmFtZSBGaXJzdDo6bmV4dAogICAgICAgICwgTGFzdAoKICAgICAgICAsdHlwZW5hbWUg Rm9yd2FyZE9wOjp0ZW1wbGF0ZSBhcHBseTxTdGF0ZSwgdHlwZW5hbWUgRmlyc3Q6OnR5cGU+Ojp0 eXBlCiAgICAgICAgLCBCYWNrd2FyZE9wCiAgICAgICAgLCBGb3J3YXJkT3AKICAgICAgICA+IG5l c3RlZF9zdGVwOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgQmFja3dhcmRPcDo6dGVtcGxhdGUgYXBw bHk8dHlwZW5hbWUgbmVzdGVkX3N0ZXA6OnN0YXRlLCB0eXBlbmFtZSBGaXJzdDo6dHlwZT46OnR5 cGUgc3RhdGU7CiAgICB0eXBlZGVmIHR5cGVuYW1lIG5lc3RlZF9zdGVwOjppdGVyYXRvciBpdGVy YXRvcjsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBMYXN0CiAgICAsIHR5cGVuYW1lIFN0 YXRlCiAgICAsIHR5cGVuYW1lIEJhY2t3YXJkT3AKICAgICwgdHlwZW5hbWUgRm9yd2FyZE9wCiAg ICA+CnN0cnVjdCBmb2xkX2JhY2t3YXJkX2ltcGw8IC0xLExhc3QsTGFzdCxTdGF0ZSxCYWNrd2Fy ZE9wLEZvcndhcmRPcCA+CnsKICAgIHR5cGVkZWYgU3RhdGUgc3RhdGU7CiAgICB0eXBlZGVmIExh c3QgaXRlcmF0b3I7Cn07Cgp9Cn0KfQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiIDIKIyAzOCAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2F1eF8vZm9sZF9iYWNrd2FyZF9pbXBsLmhwcCIgMgojIDI1ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZm9sZF9iYWNrd2FyZC5ocHAiIDIKCgpuYW1lc3Bh Y2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1 ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUg QmFja3dhcmRPcCA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIEZvcndhcmRPcCA9IGFyZzwxPgogICAg PgpzdHJ1Y3QgZm9sZF9iYWNrd2FyZAp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIGF1eDo6Zm9sZF9i YWNrd2FyZF9pbXBsPAogICAgICAgICAgOjpib29zdDo6bXBsOjpPMV9zaXplPFNlcXVlbmNlPjo6 dmFsdWUKICAgICAgICAsIHR5cGVuYW1lIGJlZ2luPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwg dHlwZW5hbWUgZW5kPFNlcXVlbmNlPjo6dHlwZQogICAgICAgICwgU3RhdGUKICAgICAgICAsIHR5 cGVuYW1lIGxhbWJkYTxCYWNrd2FyZE9wPjo6dHlwZQogICAgICAgICwgdHlwZW5hbWUgbGFtYmRh PEZvcndhcmRPcD46OnR5cGUKICAgICAgICA+OjpzdGF0ZSB0eXBlOwoKICAgCn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBmb2xkX2JhY2t3YXJkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8 IHR5cGVuYW1lIFQxLHR5cGVuYW1lIFQyLHR5cGVuYW1lIFQzICwgdHlwZW5hbWUgVDQgPXZvaWRf ICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBmb2xkX2JhY2t3YXJkPCBUMSxU MixUMyA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBmb2xkX2JhY2t3YXJkPCB2 b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIGZvbGRfYmFja3dhcmQ8IHZvaWRfLHZvaWRf LHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvY29weV9iYWNrd2FyZC5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1w bCB7CgoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5 cGVuYW1lIFN0YXRlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgQmluYXJ5T3AgPSB2b2lkXwogICAg PgpzdHJ1Y3QgY29weV9iYWNrd2FyZAogICAgOiBmb2xkX2JhY2t3YXJkPCBTZXF1ZW5jZSxTdGF0 ZSxCaW5hcnlPcCA+CnsKfTsKCgogdGVtcGxhdGU8PiBzdHJ1Y3QgY29weV9iYWNrd2FyZDwgdm9p ZF8sdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMix0eXBl bmFtZSBUMyAsIHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0 IGFwcGx5IDogY29weV9iYWNrd2FyZDwgVDEsVDIsVDMgPiB7IH07IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGxhbWJkYTwgY29weV9iYWNrd2FyZDwgdm9pZF8sdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRl ZiBjb3B5X2JhY2t3YXJkPCB2b2lkXyx2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5zZXJ0X2ltcGwuaHBwIiAyCgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jbGVhci5ocHAiIDEKIyAyMCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2NsZWFyLmhwcCIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvY2xlYXJfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC9tcGwvY2xlYXJfZndkLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNl IG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4gc3RydWN0IGNsZWFyX3RyYWl0czsKdGVt cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IGNsZWFyOwoKfQp9CiMgMjEgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jbGVhci5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jbGVhcl9pbXBsLmhwcCIgMQojIDIzICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9jbGVhcl9pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0 IHsKbmFtZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgY2xl YXJfdHJhaXRzCnsKICAgIHRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+IHN0cnVjdCBhbGdv cml0aG07Cn07CgoKCn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY2xl YXIuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl PAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICA+CnN0cnVjdCBjbGVhcgogICAg OiBjbGVhcl90cmFpdHM8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgog ICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSA+CnsKICAgCn07Cgp0ZW1wbGF0 ZTw+IHN0cnVjdCBjbGVhcjwgdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSAsIHR5cGVu YW1lIFQyID12b2lkXyAsdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5 cGVuYW1lIFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGNsZWFyPCBUMSA+IHsgfTsgfTsgdGVt cGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBjbGVhcjwgdm9pZF8gPiA+IHsgdHlwZWRlZiBjbGVhcjwg dm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w bC9hdXhfL2luc2VydF9pbXBsLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9wdXNoX2Zyb250LmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9t cGwvcHVzaF9mcm9udC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3B1 c2hfZnJvbnRfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv cHVzaF9mcm9udF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRl bXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHM7CnRlbXBsYXRl PCB0eXBlbmFtZSBTZXF1ZW5jZSwgdHlwZW5hbWUgVCA+IHN0cnVjdCBwdXNoX2Zyb250OwoKfQp9 CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2Zyb250LmhwcCIgMgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3B1c2hfZnJvbnRfaW1wbC5o cHAiIDEKIyAyMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHVzaF9mcm9u dF9pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCnRlbXBsYXRl PCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHMKewogICAgdGVtcGxhdGU8 IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBUID4gc3RydWN0IGFsZ29yaXRobTsKfTsKCgoK fQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2Zyb250LmhwcCIg MgoKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAg dHlwZW5hbWUgU2VxdWVuY2UgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4K c3RydWN0IHB1c2hfZnJvbnQKICAgIDogcHVzaF9mcm9udF90cmFpdHM8IHR5cGVuYW1lIHNlcXVl bmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGhtPCBT ZXF1ZW5jZSxUID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IHB1c2hfZnJvbnQ8IHZvaWRf LHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIgLCB0eXBlbmFtZSBU MyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRfID4gc3RydWN0 IGFwcGx5IDogcHVzaF9mcm9udDwgVDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxh bWJkYTwgcHVzaF9mcm9udDwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBwdXNoX2Zyb250PCB2 b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2F1eF8vaW5zZXJ0X2ltcGwuaHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l c3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3QgaW5zZXJ0X3Ry YWl0cwp7CiAgICB0ZW1wbGF0ZTwKICAgICAgICAgIHR5cGVuYW1lIFNlcXVlbmNlCiAgICAgICAg LCB0eXBlbmFtZSBQb3MKICAgICAgICAsIHR5cGVuYW1lIFQKICAgICAgICA+CiAgICBzdHJ1Y3Qg YWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwKICAgICAgICAg ICAgICB0eXBlbmFtZSBiZWdpbjxTZXF1ZW5jZT46OnR5cGUKICAgICAgICAgICAgLCBQb3MKICAg ICAgICAgICAgPiBmaXJzdF9oYWxmXzsKCiAgICAgICAgdHlwZWRlZiBpdGVyYXRvcl9yYW5nZTwK ICAgICAgICAgICAgICBQb3MKICAgICAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0 eXBlCiAgICAgICAgICAgID4gc2Vjb25kX2hhbGZfOwoKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l IGNvcHlfYmFja3dhcmQ8CiAgICAgICAgICAgICAgc2Vjb25kX2hhbGZfCiAgICAgICAgICAgICwg dHlwZW5hbWUgY2xlYXI8U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgICAgICwgcHVzaF9mcm9udDxf LF8+CiAgICAgICAgICAgID46OnR5cGUgaGFsZl9zZXF1ZW5jZV87CgogICAgICAgIHR5cGVkZWYg dHlwZW5hbWUgY29weV9iYWNrd2FyZDwKICAgICAgICAgICAgICBmaXJzdF9oYWxmXwogICAgICAg ICAgICAsIHR5cGVuYW1lIHB1c2hfZnJvbnQ8aGFsZl9zZXF1ZW5jZV8sVD46OnR5cGUKICAgICAg ICAgICAgLCBwdXNoX2Zyb250PF8sXz4KICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwogICAgfTsK fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9pbnNlcnQuaHBw IiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAg ICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFBvcyA9IHZvaWRfCiAg ICAsIHR5cGVuYW1lIFQgPSB2b2lkXwogICAgPgpzdHJ1Y3QgaW5zZXJ0CiAgICA6IGluc2VydF90 cmFpdHM8IHR5cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6 dGVtcGxhdGUgYWxnb3JpdGhtPCBTZXF1ZW5jZSxQb3MsVCA+CnsKICAgCn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBpbnNlcnQ8IHZvaWRfLHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUg VDEsdHlwZW5hbWUgVDIsdHlwZW5hbWUgVDMgLCB0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1l IFQ1ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGluc2VydDwgVDEsVDIsVDMgPiB7IH07IH07IHRl bXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgaW5zZXJ0PCB2b2lkXyx2b2lkXyx2b2lkXyA+ID4geyB0 eXBlZGVmIGluc2VydDwgdm9pZF8sdm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMTYgIi4u Ly4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIgMgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2suaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2suaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9wdXNoX2JhY2tfZndkLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvcHVzaF9iYWNrX2Z3ZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj ZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRhZyA+IHN0cnVjdCBwdXNoX2JhY2tfdHJhaXRz Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UsIHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcHVzaF9i YWNrOwoKfQp9CiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2su aHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vcHVzaF9iYWNr X2ltcGwuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL3B1 c2hfYmFja19pbXBsLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7CgoKCgp0 ZW1wbGF0ZTwgdHlwZW5hbWUgVGFnID4Kc3RydWN0IHB1c2hfYmFja190cmFpdHMKewogICAgdGVt cGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBlbmFtZSBUID4gc3RydWN0IGFsZ29yaXRobTsK fTsKCgoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9wdXNoX2JhY2su aHBwIiAyCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAog ICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQgPSB2b2lkXwog ICAgPgpzdHJ1Y3QgcHVzaF9iYWNrCiAgICA6IHB1c2hfYmFja190cmFpdHM8IHR5cGVuYW1lIHNl cXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUgYWxnb3JpdGht PCBTZXF1ZW5jZSxUID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3RydWN0IHB1c2hfYmFjazwgdm9p ZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1l IFQzID12b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1 Y3QgYXBwbHkgOiBwdXNoX2JhY2s8IFQxLFQyID4geyB9OyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBs YW1iZGE8IHB1c2hfYmFjazwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBwdXNoX2JhY2s8IHZv aWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDE3ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2Fu eS9mdW5jdGlvbi5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29u dGFpbnMuaHBwIiAxCiMgMjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9jb250YWlu cy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2ZpbmQuaHBwIiAxCiMg MjEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kLmhwcCIKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvc2FtZV9hcy5ocHAiIDEKIyAyNCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvbXBsL3NhbWVfYXMuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSA+CnN0cnVjdCBzYW1lX2FzCnsKICAgIHRl bXBsYXRlPCB0eXBlbmFtZSBUMiA+IHN0cnVjdCBhcHBseQoKICAgICAgICA6IGlzX3NhbWU8VDEs VDI+CiAgICB7CgoKCgogICAgfTsKfTsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUMSA+CnN0cnVjdCBu b3Rfc2FtZV9hcwp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDIgPiBzdHJ1Y3QgYXBwbHkKCiAg ICAgICAgOiBub3RfPCBpc19zYW1lPFQxLFQyPiA+CiAgICB7CgoKCgogICAgfTsKfTsKCnRlbXBs YXRlPCB0eXBlbmFtZSBUMSA+IHN0cnVjdCBsYW1iZGE8IHNhbWVfYXM8IFQxID4gPiB7IHR5cGVk ZWYgc2FtZV9hczwgVDEgPiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEgPiBzdHJ1Y3Qg bGFtYmRhPCBub3Rfc2FtZV9hczwgVDEgPiA+IHsgdHlwZWRlZiBub3Rfc2FtZV9hczwgVDEgPiB0 eXBlOyB9OwoKfQp9CiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9maW5kLmhw cCIgMgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKdGVtcGxhdGU8CiAg ICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwgdHlwZW5hbWUgVCA9IHZvaWRfCiAg ICA+CnN0cnVjdCBmaW5kCiAgICA6IGZpbmRfaWY8IFNlcXVlbmNlLHNhbWVfYXM8VD4gPgp7CiAg IAp9OwoKCgogdGVtcGxhdGU8PiBzdHJ1Y3QgZmluZDwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRl PCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUg VDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBmaW5kPCBUMSxU MiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBmaW5kPCB2b2lkXyx2b2lkXyA+ ID4geyB0eXBlZGVmIGZpbmQ8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvY29udGFpbnMuaHBwIiAyCgoKCgoKbmFtZXNwYWNl IGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgU2VxdWVu Y2UgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUID0gdm9pZF8KICAgID4Kc3RydWN0IGNvbnRhaW5z CiAgICA6IG5vdF88IGlzX3NhbWU8CiAgICAgICAgICB0eXBlbmFtZSBmaW5kPFNlcXVlbmNlLFQ+ Ojp0eXBlCiAgICAgICAgLCB0eXBlbmFtZSBlbmQ8U2VxdWVuY2U+Ojp0eXBlCiAgICAgICAgPiA+ CnsKICAgCn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBjb250YWluczwgdm9pZF8sdm9pZF8gPiB7IHRl bXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlw ZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBjb250 YWluczwgVDEsVDIgPiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgY29udGFpbnM8 IHZvaWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgY29udGFpbnM8IHZvaWRfLHZvaWRfID4gdHlwZTsg fTsKCn0KfQojIDE4ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIK CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3RyYW5zZm9ybS5ocHAiIDEKIyAy NCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3RyYW5zZm9ybS5ocHAiCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2FwcGx5LmhwcCIgMQojIDI1ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvdHJhbnNmb3JtLmhwcCIgMgoKCgpuYW1lc3BhY2UgYm9vc3Qg ewpuYW1lc3BhY2UgbXBsIHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8IHR5cGVuYW1lIE9w ID4Kc3RydWN0IHRyYW5zZm9ybV9vcAp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Us IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYXBwbHkKICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1l IHB1c2hfZnJvbnQ8CiAgICAgICAgICAgICAgU2VxdWVuY2UKICAgICAgICAgICAgLCB0eXBlbmFt ZSBhcHBseTE8T3AsVD46OnR5cGUKICAgICAgICAgICAgPjo6dHlwZSB0eXBlOwogICAgfTsKfTsK Cn0KCgoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFNlcXVlbmNlID0gdm9pZF8KICAgICwgdHlw ZW5hbWUgT3BlcmF0aW9uID0gdm9pZF8KICAgID4Kc3RydWN0IHRyYW5zZm9ybQp7CiBwcml2YXRl OgogICAgdHlwZWRlZiB0eXBlbmFtZSBsYW1iZGE8T3BlcmF0aW9uPjo6dHlwZSBvcF87CiAgICB0 eXBlZGVmIHR5cGVuYW1lIGNsZWFyPFNlcXVlbmNlPjo6dHlwZSByZXN1bHRfOwoKIHB1YmxpYzoK ICAgIHR5cGVkZWYgdHlwZW5hbWUgZm9sZF9iYWNrd2FyZDwKICAgICAgICAgIFNlcXVlbmNlCiAg ICAgICAgLCByZXN1bHRfCiAgICAgICAgLCBwcm90ZWN0PCBhdXg6OnRyYW5zZm9ybV9vcDxvcF8+ ID4KICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07CgoKCiB0ZW1wbGF0ZTw+IHN0cnVjdCB0cmFuc2Zv cm08IHZvaWRfLHZvaWRfID4geyB0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEsdHlwZW5hbWUgVDIgLCB0 eXBlbmFtZSBUMyA9dm9pZF8gLHR5cGVuYW1lIFQ0ID12b2lkXyAsdHlwZW5hbWUgVDUgPXZvaWRf ID4gc3RydWN0IGFwcGx5IDogdHJhbnNmb3JtPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBz dHJ1Y3QgbGFtYmRhPCB0cmFuc2Zvcm08IHZvaWRfLHZvaWRfID4gPiB7IHR5cGVkZWYgdHJhbnNm b3JtPCB2b2lkXyx2b2lkXyA+IHR5cGU7IH07Cgp9Cn0KIyAyMCAiLi4vLi4vLi4vYm9vc3QvZHlu YW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9lcmFzZS5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2Vy YXNlLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2VfZndkLmhw cCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2VfZndkLmhwcCIK bmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVGFn ID4gc3RydWN0IGVyYXNlX3RyYWl0czsKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlLCB0eXBl bmFtZSBGaXJzdCwgdHlwZW5hbWUgTGFzdCA+IHN0cnVjdCBlcmFzZTsKCn0KfQojIDIxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvZXJhc2UuaHBwIiAyCgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2VyYXNlX2ltcGwuaHBwIiAxCiMgMjYgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9hdXhfL2VyYXNlX2ltcGwuaHBwIgpuYW1lc3BhY2UgYm9v c3QgewpuYW1lc3BhY2UgbXBsIHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPgpzdHJ1Y3Qg ZXJhc2VfdHJhaXRzCnsKICAgIHRlbXBsYXRlPAogICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2UK ICAgICAgICAsIHR5cGVuYW1lIEZpcnN0CiAgICAgICAgLCB0eXBlbmFtZSBMYXN0CiAgICAgICAg PgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAgIHByaXZhdGU6CgogICAgICAgIHR5cGVk ZWYgaXRlcmF0b3JfcmFuZ2U8CiAgICAgICAgICAgICAgdHlwZW5hbWUgYmVnaW48U2VxdWVuY2U+ Ojp0eXBlCiAgICAgICAgICAgICwgRmlyc3QKICAgICAgICAgICAgPiBmaXJzdF9oYWxmXzsKCgog ICAgICAgIHR5cGVkZWYgaXRlcmF0b3JfcmFuZ2U8CiAgICAgICAgICAgICAgTGFzdAogICAgICAg ICAgICAsIHR5cGVuYW1lIGVuZDxTZXF1ZW5jZT46OnR5cGUKICAgICAgICAgICAgPiBzZWNvbmRf aGFsZl87CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29weV9iYWNrd2FyZDwKICAgICAgICAg ICAgICBzZWNvbmRfaGFsZl8KICAgICAgICAgICAgLCB0eXBlbmFtZSBjbGVhcjxTZXF1ZW5jZT46 OnR5cGUKICAgICAgICAgICAgLCBwdXNoX2Zyb250PF8sXz4KICAgICAgICAgICAgPjo6dHlwZSBo YWxmX3NlcXVlbmNlXzsKCiAgICAgcHVibGljOgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgY29w eV9iYWNrd2FyZDwKICAgICAgICAgICAgICBmaXJzdF9oYWxmXwogICAgICAgICAgICAsIGhhbGZf c2VxdWVuY2VfCiAgICAgICAgICAgICwgcHVzaF9mcm9udDxfLF8+CiAgICAgICAgICAgID46OnR5 cGUgdHlwZTsKICAgIH07Cgp9OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L21wbC9lcmFzZS5ocHAiIDIKCgoKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsK Cm5hbWVzcGFjZSBhdXggewp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBlcmFzZV9wYXJh bQp7CiAgICB0eXBlZGVmIHR5cGVuYW1lIFQ6Om5leHQgdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IGVyYXNlX3BhcmFtPHZvaWRfPgp7CiAgICB0eXBlZGVmIHZvaWRfIHR5cGU7Cn07Cn0KCnRl bXBsYXRlPAogICAgICB0eXBlbmFtZSBTZXF1ZW5jZSA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIEZp cnN0ID0gdm9pZF8KICAgICwgdHlwZW5hbWUgTGFzdCA9IHR5cGVuYW1lIGF1eDo6ZXJhc2VfcGFy YW08Rmlyc3Q+Ojp0eXBlCiAgICA+CnN0cnVjdCBlcmFzZQogICAgOiBlcmFzZV90cmFpdHM8IHR5 cGVuYW1lIHNlcXVlbmNlX3RhZzxTZXF1ZW5jZT46OnR5cGUgPgogICAgICAgIDo6dGVtcGxhdGUg YWxnb3JpdGhtPCBTZXF1ZW5jZSxGaXJzdCxMYXN0ID4KewogICAKfTsKCnRlbXBsYXRlPD4gc3Ry dWN0IGVyYXNlPCB2b2lkXyx2b2lkXyA+IHsgdGVtcGxhdGU8IHR5cGVuYW1lIFQxLHR5cGVuYW1l IFQyICwgdHlwZW5hbWUgVDMgPXZvaWRfICx0eXBlbmFtZSBUNCA9dm9pZF8gLHR5cGVuYW1lIFQ1 ID12b2lkXyA+IHN0cnVjdCBhcHBseSA6IGVyYXNlPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8 PiBzdHJ1Y3QgbGFtYmRhPCBlcmFzZTwgdm9pZF8sdm9pZF8gPiA+IHsgdHlwZWRlZiBlcmFzZTwg dm9pZF8sdm9pZF8gPiB0eXBlOyB9OwoKfQp9CiMgMjIgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNf YW55L2Z1bmN0aW9uLmhwcCIgMgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwv cGx1cy5ocHAiIDEKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BsdXMuaHBw IgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBl bmFtZSBULCBUIE4xLCBUIE4yLCBUIE4zID0gMCwgVCBONCA9IDAsIFQgTjUgPSAwCiAgICA+CnN0 cnVjdCBwbHVzX2MKewogICAgc3RhdGljIGNvbnN0IFQgdmFsdWUgPSAoTjEgKyBOMiArIE4zICsg TjQgKyBONSk7CgogICAgdHlwZWRlZiBpbnRlZ3JhbF9jPFQsdmFsdWU+IHR5cGU7CgoKCn07Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZv aWRfCiAgICAsIHR5cGVuYW1lIFQzID0gaW50ZWdyYWxfYzxpbnQsMD4KICAgICwgdHlwZW5hbWUg VDQgPSBpbnRlZ3JhbF9jPGludCwwPgogICAgLCB0eXBlbmFtZSBUNSA9IGludGVncmFsX2M8aW50 LDA+CiAgICA+CnN0cnVjdCBwbHVzCiAgICA6IHBsdXNfYzwKICAgICAgICAgIHR5cGVuYW1lIGJv b3N0OjptcGw6OmF1eDo6dHlwZW9mX2M8IHNpemVvZig6OmJvb3N0OjptcGw6OmF1eDo6dHlwZV9p bmRleChUMTo6dmFsdWUgKyBUMjo6dmFsdWUgKyBUMzo6dmFsdWUgKyBUNDo6dmFsdWUgKyBUNTo6 dmFsdWUpKSA+Ojp0eXBlCgoKICAgICAgICAsIFQxOjp2YWx1ZQogICAgICAgICwgVDI6OnZhbHVl CiAgICAgICAgLCBUMzo6dmFsdWUKICAgICAgICAsIFQ0Ojp2YWx1ZQogICAgICAgICwgVDU6OnZh bHVlCiAgICAgICAgPgp7CiAgIAp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgcGx1czwgdm9pZF8sdm9p ZF8gPiB7IHRlbXBsYXRlPCB0eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12 b2lkXyAsdHlwZW5hbWUgVDQgPXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBw bHkgOiBwbHVzPCBUMSxUMiA+IHsgfTsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgbGFtYmRhPCBwbHVz PCB2b2lkXyx2b2lkXyA+ID4geyB0eXBlZGVmIHBsdXM8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsK Cn0KfQojIDI0ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbWludXMuaHBwIiAxCiMgMjggIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9taW51cy5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5h bWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQsIFQgTjEsIFQgTjIsIFQg TjMgPSAwLCBUIE40ID0gMCwgVCBONSA9IDAKICAgID4Kc3RydWN0IG1pbnVzX2MKewogICAgc3Rh dGljIGNvbnN0IFQgdmFsdWUgPSAoTjEgLSBOMiAtIE4zIC0gTjQgLSBONSk7CgogICAgdHlwZWRl ZiBpbnRlZ3JhbF9jPFQsdmFsdWU+IHR5cGU7CgoKCn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5h bWUgVDEgPSB2b2lkXwogICAgLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQz ID0gaW50ZWdyYWxfYzxpbnQsMD4KICAgICwgdHlwZW5hbWUgVDQgPSBpbnRlZ3JhbF9jPGludCww PgogICAgLCB0eXBlbmFtZSBUNSA9IGludGVncmFsX2M8aW50LDA+CiAgICA+CnN0cnVjdCBtaW51 cwogICAgOiBtaW51c19jPAogICAgICAgICAgdHlwZW5hbWUgYm9vc3Q6Om1wbDo6YXV4Ojp0eXBl b2ZfYzwgc2l6ZW9mKDo6Ym9vc3Q6Om1wbDo6YXV4Ojp0eXBlX2luZGV4KFQxOjp2YWx1ZSAtIFQy Ojp2YWx1ZSAtIFQzOjp2YWx1ZSAtIFQ0Ojp2YWx1ZSAtIFQ1Ojp2YWx1ZSkpID46OnR5cGUKCgog ICAgICAgICwgVDE6OnZhbHVlCiAgICAgICAgLCBUMjo6dmFsdWUKICAgICAgICAsIFQzOjp2YWx1 ZQogICAgICAgICwgVDQ6OnZhbHVlCiAgICAgICAgLCBUNTo6dmFsdWUKICAgICAgICA+CnsKICAg Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBtaW51czwgdm9pZF8sdm9pZF8gPiB7IHRlbXBsYXRlPCB0 eXBlbmFtZSBUMSx0eXBlbmFtZSBUMiAsIHR5cGVuYW1lIFQzID12b2lkXyAsdHlwZW5hbWUgVDQg PXZvaWRfICx0eXBlbmFtZSBUNSA9dm9pZF8gPiBzdHJ1Y3QgYXBwbHkgOiBtaW51czwgVDEsVDIg PiB7IH07IH07IHRlbXBsYXRlPD4gc3RydWN0IGxhbWJkYTwgbWludXM8IHZvaWRfLHZvaWRfID4g PiB7IHR5cGVkZWYgbWludXM8IHZvaWRfLHZvaWRfID4gdHlwZTsgfTsKCn0KfQojIDI1ICIuLi8u Li8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvY2FsbF90cmFpdHMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L2NhbGxfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9kZXRhaWwvY2FsbF90cmFpdHMuaHBwIiAxCiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvYXJpdGhtZXRpY190cmFpdHMuaHBwIiAxCiMgMTUgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FyaXRobWV0aWNfdHJhaXRzLmhwcCIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhwcCIg MQojIDEzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1l dGljLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19p bnRlZ3JhbC5ocHAiIDEKIyAxNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaXNfaW50ZWdyYWwuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJp dHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9pc19pbnRlZ3JhbC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7 CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19pbnRlZ3JhbCA6IG1wbDo6Ym9v bF88IGZhbHNlID4geyB9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVk IGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2lu dGVncmFsPCB1bnNpZ25lZCBjaGFyIGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0 ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgdW5zaWduZWQgY2hhciB2b2xhdGlsZSA+IDog bXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVu c2lnbmVkIGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRl bXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB1bnNpZ25lZCBzaG9ydCA+IDogbXBsOjpib29s XzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIHNo b3J0IGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBp c19pbnRlZ3JhbDwgdW5zaWduZWQgc2hvcnQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUg PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB1bnNpZ25lZCBzaG9ydCBjb25z dCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3Qg aXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVt cGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCBjb25zdCA+IDogbXBsOjpi b29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVk IGludCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGludCBjb25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29s XzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxv bmcgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVn cmFsPCB1bnNpZ25lZCBsb25nIGNvbnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgdW5zaWduZWQgbG9uZyB2b2xhdGlsZSA+IDogbXBs Ojpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2ln bmVkIGxvbmcgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRy dWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgY2hhciBjb25z dCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdy YWw8IHNpZ25lZCBjaGFyIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1w bGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6 IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBz aWduZWQgc2hvcnQgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2ludGVncmFsPCBzaWduZWQgc2hvcnQgY29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7 IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgc2hvcnQgdm9sYXRpbGUg PiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFs PCBzaWduZWQgc2hvcnQgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07 CnRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgaW50ID4gOiBtcGw6OmJvb2xf PCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgc2lnbmVkIGludCBj b25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50 ZWdyYWw8IHNpZ25lZCBpbnQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRl bXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBzaWduZWQgaW50IGNvbnN0IHZvbGF0aWxlID4g OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwg c2lnbmVkIGxvbmcgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0 IGlzX2ludGVncmFsPCBzaWduZWQgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsg fTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHNpZ25lZCBsb25nIHZvbGF0aWxlID4g OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwg c2lnbmVkIGxvbmcgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp0 ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgYm9vbCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+ IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGJvb2wgY29uc3QgPiA6IG1wbDo6 Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBib29sIHZv bGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19p bnRlZ3JhbDwgYm9vbCBjb25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsK dGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGNoYXIgPiA6IG1wbDo6Ym9vbF88IHRydWUg PiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCBjaGFyIGNvbnN0ID4gOiBtcGw6 OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3JhbDwgY2hhciB2 b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNf aW50ZWdyYWw8IGNoYXIgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07 CgoKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHdjaGFyX3QgPiA6IG1wbDo6Ym9vbF88 IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2ludGVncmFsPCB3Y2hhcl90IGNvbnN0 ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19pbnRlZ3Jh bDwgd2NoYXJfdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8 PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHdjaGFyX3QgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9v bF88IHRydWUgPiB7IH07CiMgNTIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2lzX2ludGVncmFsLmhwcCIKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2ln bmVkIGxvbmcgbG9uZyA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwg dHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcg bG9uZyB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1 Y3QgaXNfaW50ZWdyYWw8IHVuc2lnbmVkIGxvbmcgbG9uZyBjb25zdCB2b2xhdGlsZSA+IDogbXBs Ojpib29sXzwgdHJ1ZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcg bG9uZyA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50 ZWdyYWw8IGxvbmcgbG9uZyBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcgbG9uZyB2b2xhdGlsZSA+IDogbXBsOjpib29s XzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfaW50ZWdyYWw8IGxvbmcgbG9uZyBj b25zdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsKCgoKCgp9CgojIDEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3Vu ZGVmLmhwcCIgMQojIDYyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9p c19pbnRlZ3JhbC5ocHAiIDIKIyAxNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90 cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDEKIyAxNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHlwZV90cmFpdHMvaXNfZmxvYXQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDE1ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIKCm5hbWVzcGFj ZSBib29zdCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfZmxvYXQgOiBtcGw6 OmJvb2xfPCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8IGZsb2F0ID4g OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZmxv YXQgY29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz X2Zsb2F0PCBmbG9hdCB2b2xhdGlsZSA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxh dGU8PiBzdHJ1Y3QgaXNfZmxvYXQ8IGZsb2F0IGNvbnN0IHZvbGF0aWxlID4gOiBtcGw6OmJvb2xf PCB0cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlID4gOiBtcGw6 OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlIGNv bnN0ID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9h dDwgZG91YmxlIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9OyB0ZW1wbGF0ZTw+ IHN0cnVjdCBpc19mbG9hdDwgZG91YmxlIGNvbnN0IHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0 cnVlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgbG9uZyBkb3VibGUgPiA6IG1w bDo6Ym9vbF88IHRydWUgPiB7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Zsb2F0PCBsb25nIGRv dWJsZSBjb25zdCA+IDogbXBsOjpib29sXzwgdHJ1ZSA+IHsgfTsgdGVtcGxhdGU8PiBzdHJ1Y3Qg aXNfZmxvYXQ8IGxvbmcgZG91YmxlIHZvbGF0aWxlID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9 OyB0ZW1wbGF0ZTw+IHN0cnVjdCBpc19mbG9hdDwgbG9uZyBkb3VibGUgY29uc3Qgdm9sYXRpbGUg PiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDI3ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mbG9hdC5ocHAiIDIKIyAx NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5o cHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv aWNlX29yLmhwcCIgMQojIDE1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvaWNlX29yLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJh aXRzIHsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29sIGIzID0gZmFsc2UsIGJvb2wg YjQgPSBmYWxzZSwgYm9vbCBiNSA9IGZhbHNlLCBib29sIGI2ID0gZmFsc2UsIGJvb2wgYjcgPSBm YWxzZT4Kc3RydWN0IGljZV9vcjsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29sIGIz LCBib29sIGI0LCBib29sIGI1LCBib29sIGI2LCBib29sIGI3PgpzdHJ1Y3QgaWNlX29yCnsKICAg IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsKfTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBp Y2Vfb3I8ZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2UsIGZhbHNlLCBmYWxzZSwgZmFsc2U+CnsK ICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gZmFsc2U7Cn07Cgp9Cn0KIyAxNiAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfYXJpdGhtZXRpYy5ocHAiIDIKCgoK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90 cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0 X2RlZi5ocHAiIDIKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv aXNfYXJpdGhtZXRpYy5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2UgZGV0YWls IHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4Kc3RydWN0IGlzX2FyaXRobWV0aWNfaW1wbAp7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX29y PCA6OmJvb3N0Ojppc19pbnRlZ3JhbDxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX2Zsb2F0PFQ+Ojp2 YWx1ZSA+Ojp2YWx1ZSk7CgoKCgp9OwoKfQoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0 IGlzX2FyaXRobWV0aWMgOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2FyaXRobWV0 aWNfaW1wbDxUPjo6dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDQzICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19hcml0aG1ldGljLmhwcCIgMgoj IDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hcml0aG1ldGljX3Ry YWl0cy5ocHAiIDIKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv aXNfZnVuZGFtZW50YWwuaHBwIiAxCiMgMTQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2lzX2Z1bmRhbWVudGFsLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcCIgMQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9pc192b2lkLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2Rl Zi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAxNyAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAiIDIKCm5hbWVzcGFj ZSBib29zdCB7CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfdm9pZCA6IG1wbDo6 Ym9vbF88IGZhbHNlID4geyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc192b2lkPCB2b2lkID4gOiBt cGw6OmJvb2xfPCB0cnVlID4geyB9OwoKCnRlbXBsYXRlPD4gc3RydWN0IGlzX3ZvaWQ8IHZvaWQg Y29uc3QgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4gc3RydWN0IGlzX3Zv aWQ8IHZvaWQgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPD4g c3RydWN0IGlzX3ZvaWQ8IHZvaWQgY29uc3Qgdm9sYXRpbGUgPiA6IG1wbDo6Ym9vbF88IHRydWUg PiB7IH07CgoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAzMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHlwZV90cmFpdHMvaXNfdm9pZC5ocHAiIDIKIyAxNSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuZGFtZW50YWwuaHBwIiAyCgoKCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw cCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv Ym9vbF90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAy CiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmRhbWVu dGFsLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5kYW1lbnRhbF9pbXBsCiAgICA6IDo6Ym9vc3Q6 OnR5cGVfdHJhaXRzOjppY2Vfb3I8CiAgICAgICAgICA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+ Ojp2YWx1ZQogICAgICAgICwgOjpib29zdDo6aXNfdm9pZDxUPjo6dmFsdWUKICAgICAgICA+CnsK fTsKCn0KCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19mdW5kYW1lbnRhbCA6IG1w bDo6Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfZnVuZGFtZW50YWxfaW1wbDxUPjo6dmFsdWUg PiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDQxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC90eXBlX3RyYWl0cy9pc19mdW5kYW1lbnRhbC5ocHAiIDIKIyAxOCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYXJpdGhtZXRpY190cmFpdHMuaHBwIiAyCiMgMjgg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiIDIKCgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFp dHMuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Nv bXBvc2l0ZV90cmFpdHMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2lzX2FycmF5LmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9pc19hcnJheS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0 ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAyCiMgMjUgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0 IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfYXJyYXkgOiBtcGw6OmJvb2xf PCBmYWxzZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1 Y3QgaXNfYXJyYXk8IFRbTl0gPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CnRlbXBsYXRlPCB0 eXBlbmFtZSBULCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IGlzX2FycmF5PCBUIGNvbnN0W05dID4g OiBtcGw6OmJvb2xfPCB0cnVlID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXpl X3QgTiA+IHN0cnVjdCBpc19hcnJheTwgVCB2b2xhdGlsZVtOXSA+IDogbXBsOjpib29sXzwgdHJ1 ZSA+IHsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgaXNf YXJyYXk8IFQgY29uc3Qgdm9sYXRpbGVbTl0gPiA6IG1wbDo6Ym9vbF88IHRydWUgPiB7IH07CiMg NzUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2FycmF5LmhwcCIK fQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v bF90cmFpdF91bmRlZi5ocHAiIDEKIyA3OCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvaXNfYXJyYXkuaHBwIiAyCiMgMjYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFpdHMuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiIDEKIyAxNCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZW51bS5ocHAiCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiIDEKIyAxOCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3JlZmVyZW5jZS5ocHAiCiMg MSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJh aXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9k ZWYuaHBwIiAyCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Fk ZF9yZWZlcmVuY2UuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7 CiMgNTYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9yZWZlcmVu Y2UuaHBwIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGFkZF9yZWZlcmVuY2VfaW1wbAp7 CiAgICB0eXBlZGVmIFQmIHR5cGU7Cn07CgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg YWRkX3JlZmVyZW5jZV9pbXBsPFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgoKCgp0ZW1wbGF0 ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNlX2ltcGw8dm9pZD4geyB0eXBlZGVmIHZvaWQgdHlwZTsg fTsKCnRlbXBsYXRlPD4gc3RydWN0IGFkZF9yZWZlcmVuY2VfaW1wbDx2b2lkIGNvbnN0PiB7IHR5 cGVkZWYgdm9pZCBjb25zdCB0eXBlOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBhZGRfcmVmZXJlbmNl X2ltcGw8dm9pZCB2b2xhdGlsZT4geyB0eXBlZGVmIHZvaWQgdm9sYXRpbGUgdHlwZTsgfTsKdGVt cGxhdGU8PiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZV9pbXBsPHZvaWQgY29uc3Qgdm9sYXRpbGU+IHsg dHlwZWRlZiB2b2lkIGNvbnN0IHZvbGF0aWxlIHR5cGU7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVu YW1lIFQgPiBzdHJ1Y3QgYWRkX3JlZmVyZW5jZSB7IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjph ZGRfcmVmZXJlbmNlX2ltcGw8VD46OnR5cGUgdHlwZTsgfTsKCgoKCgoKCn0KCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYu aHBwIiAxCiMgODkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9y ZWZlcmVuY2UuaHBwIiAyCiMgMTUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2lzX2VudW0uaHBwIiAyCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl X3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC95ZXNfbm9fdHlwZS5ocHAiIDEKIyAxNSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3llc19ub190eXBl LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIHR5cGVfdHJhaXRzIHsKCnR5cGVkZWYg Y2hhciB5ZXNfdHlwZTsKc3RydWN0IG5vX3R5cGUKewogICBjaGFyIHBhZGRpbmdbOF07Cn07Cgp9 Cn0KIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVy dGlibGUuaHBwIiAyCgoKCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaWNlLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9pY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9pY2VfYW5kLmhwcCIgMQojIDE1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvaWNlX2FuZC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSB0 eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8Ym9vbCBiMSwgYm9vbCBiMiwgYm9vbCBiMyA9IHRydWUs IGJvb2wgYjQgPSB0cnVlLCBib29sIGI1ID0gdHJ1ZSwgYm9vbCBiNiA9IHRydWUsIGJvb2wgYjcg PSB0cnVlPgpzdHJ1Y3QgaWNlX2FuZDsKCnRlbXBsYXRlIDxib29sIGIxLCBib29sIGIyLCBib29s IGIzLCBib29sIGI0LCBib29sIGI1LCBib29sIGI2LCBib29sIGI3PgpzdHJ1Y3QgaWNlX2FuZAp7 CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9OwoKdGVtcGxhdGUgPD4Kc3Ry dWN0IGljZV9hbmQ8dHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSwgdHJ1ZT4Kewog ICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOwp9OwoKfQp9CiMgMTggIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2ljZS5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvaWNlX25vdC5ocHAiIDEKIyAxNSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9ub3QuaHBw IgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPGJv b2wgYj4Kc3RydWN0IGljZV9ub3QKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl Owp9OwoKdGVtcGxhdGUgPD4Kc3RydWN0IGljZV9ub3Q8dHJ1ZT4KewogICAgc3RhdGljIGNvbnN0 IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKCn0KfQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC90eXBlX3RyYWl0cy9pY2UuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9lcS5ocHAiIDEKIyAxNSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2ljZV9lcS5ocHAiCm5hbWVzcGFjZSBib29z dCB7Cm5hbWVzcGFjZSB0eXBlX3RyYWl0cyB7Cgp0ZW1wbGF0ZSA8aW50IGIxLCBpbnQgYjI+CnN0 cnVjdCBpY2VfZXEKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoYjEgPT0gYjIpOwp9 OwoKdGVtcGxhdGUgPGludCBiMSwgaW50IGIyPgpzdHJ1Y3QgaWNlX25lCnsKICAgIHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gKGIxICE9IGIyKTsKfTsKCgp0ZW1wbGF0ZSA8aW50IGIxLCBpbnQg YjI+IGJvb2wgY29uc3QgaWNlX2VxPGIxLGIyPjo6dmFsdWU7CnRlbXBsYXRlIDxpbnQgYjEsIGlu dCBiMj4gYm9vbCBjb25zdCBpY2VfbmU8YjEsYjI+Ojp2YWx1ZTsKCgp9Cn0KIyAyMCAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaWNlLmhwcCIgMgojIDI0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiIDIKCgoK CgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9v bF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMg MjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3Ry YWl0X2RlZi5ocHAiIDIKIyAzMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaXNfY29udmVydGlibGUuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewojIDQ0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiCm5hbWVz cGFjZSBkZXRhaWwgewojIDE2NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaXNfY29udmVydGlibGUuaHBwIgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUg VG8+CnN0cnVjdCBpc19jb252ZXJ0aWJsZV9iYXNpY19pbXBsCnsKICAgIHN0YXRpYyA6OmJvb3N0 Ojp0eXBlX3RyYWl0czo6bm9fdHlwZSBfbV9jaGVjayguLi4pOwogICAgc3RhdGljIDo6Ym9vc3Q6 OnR5cGVfdHJhaXRzOjp5ZXNfdHlwZSBfbV9jaGVjayhUbyk7CiAgICBzdGF0aWMgRnJvbSBfbV9m cm9tOwoKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gc2l6ZW9mKCBfbV9jaGVjayhfbV9m cm9tKSApID09IHNpemVvZig6OmJvb3N0Ojp0eXBlX3RyYWl0czo6eWVzX3R5cGUpOwoKCn07CgoK Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgRnJvbSwgdHlwZW5hbWUgVG8+CnN0cnVjdCBpc19jb252ZXJ0 aWJsZV9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgYWRkX3JlZmVyZW5jZTxGcm9tPjo6dHlw ZSByZWZfdHlwZTsKICAgIHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVf dHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2NvbnZlcnRpYmxlX2Jhc2ljX2lt cGw8cmVmX3R5cGUsVG8+Ojp2YWx1ZSwgOjpib29zdDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6 Ym9vc3Q6OmlzX2FycmF5PFRvPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUpOwoKCgoKCgoKfTsK IyAyMTUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NvbnZlcnRp YmxlLmhwcCIKICAgIHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQs dm9pZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQsdm9pZCBjb25zdCA+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRp YmxlX2ltcGw8IHZvaWQsdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg PSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQs dm9pZCBjb25zdCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7 IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9p ZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9pZCBjb25zdCA+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZl cnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qsdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2lt cGw8IHZvaWQgY29uc3Qsdm9pZCBjb25zdCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wg dmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8 IHZvaWQgdm9sYXRpbGUsdm9pZCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7 IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUs dm9pZCBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBs YXRlPD4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsdm9pZCB2b2xh dGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xh dGlsZSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4g c3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCA+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlz X2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCBjb25zdCA+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCB2b2xhdGlsZSA+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07IHRlbXBsYXRlPD4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsdm9pZCBjb25zdCB2b2xhdGlsZSA+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAodHJ1ZSk7IH07CiMgMjI1ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb252ZXJ0aWJsZS5ocHAiCnRlbXBsYXRl PCB0eXBlbmFtZSBUbyA+IHN0cnVjdCBpc19jb252ZXJ0aWJsZV9pbXBsPCB2b2lkLFRvID4geyBz dGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxzZSk7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBG cm9tID4gc3RydWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IEZyb20sdm9pZCA+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9OwoKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3Ry dWN0IGlzX2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3QsVG8gPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0IGlz X2NvbnZlcnRpYmxlX2ltcGw8IHZvaWQgdm9sYXRpbGUsVG8gPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFRvID4gc3RydWN0IGlzX2Nv bnZlcnRpYmxlX2ltcGw8IHZvaWQgY29uc3Qgdm9sYXRpbGUsVG8gPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIEZyb20gPiBzdHJ1Y3Qg aXNfY29udmVydGlibGVfaW1wbDwgRnJvbSx2b2lkIGNvbnN0ID4geyBzdGF0aWMgY29uc3QgYm9v bCB2YWx1ZSA9IChmYWxzZSk7IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBGcm9tID4gc3RydWN0IGlz X2NvbnZlcnRpYmxlX2ltcGw8IEZyb20sdm9pZCB2b2xhdGlsZSA+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgRnJvbSA+IHN0cnVjdCBp c19jb252ZXJ0aWJsZV9pbXBsPCBGcm9tLHZvaWQgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gKGZhbHNlKTsgfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIEZy b20sIHR5cGVuYW1lIFRvID4gc3RydWN0IGlzX2NvbnZlcnRpYmxlIDogbXBsOjpib29sXzwgKDo6 Ym9vc3Q6OmRldGFpbDo6aXNfY29udmVydGlibGVfaW1wbDxGcm9tLFRvPjo6dmFsdWUpID4geyB9 OwojIDI4MyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVy dGlibGUuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDI4NiAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29udmVydGlibGUuaHBwIiAyCiMgMTggIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIiAyCgoKCgoKCgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0 X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv ZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIgMgojIDI2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19l bnVtLmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgpzdHJ1 Y3QgaW50X2NvbnZlcnRpYmxlCnsKICAgIGludF9jb252ZXJ0aWJsZShpbnQpOwp9OwoKCgp0ZW1w bGF0ZSA8Ym9vbCBpc190eXBlbmFtZV9hcml0aG1ldGljX29yX3JlZmVyZW5jZSA9IHRydWU+CnN0 cnVjdCBpc19lbnVtX2hlbHBlcgp7CiAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IHR5 cGUKICAgIHsKICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwogICAgfTsK fTsKCnRlbXBsYXRlIDw+CnN0cnVjdCBpc19lbnVtX2hlbHBlcjxmYWxzZT4KewogICAgdGVtcGxh dGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCB0eXBlCiAgICAgICAgOiA6OmJvb3N0Ojppc19jb252ZXJ0 aWJsZTxULDo6Ym9vc3Q6OmRldGFpbDo6aW50X2NvbnZlcnRpYmxlPgogICAgewogICAgfTsKfTsK CnRlbXBsYXRlIDx0eXBlbmFtZSBUPiBzdHJ1Y3QgaXNfZW51bV9pbXBsCnsKICAgdHlwZWRlZiA6 OmJvb3N0OjphZGRfcmVmZXJlbmNlPFQ+IGFyX3Q7CiAgIHR5cGVkZWYgdHlwZW5hbWUgYXJfdDo6 dHlwZSByX3R5cGU7CiMgNzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz L2lzX2VudW0uaHBwIgogICBzdGF0aWMgY29uc3QgYm9vbCBzZWxlY3RvciA9ICg6OmJvb3N0Ojp0 eXBlX3RyYWl0czo6aWNlX29yPCA6OmJvb3N0Ojppc19hcml0aG1ldGljPFQ+Ojp2YWx1ZSAsIDo6 Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPjo6dmFsdWUpOwojIDg4ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19lbnVtLmhwcCIKICAgIHR5cGVkZWYgOjpi b29zdDo6ZGV0YWlsOjppc19lbnVtX2hlbHBlcjxzZWxlY3Rvcj4gc2VfdDsKCiAgICB0eXBlZGVm IHR5cGVuYW1lIHNlX3Q6OnRlbXBsYXRlIHR5cGU8cl90eXBlPiBoZWxwZXI7CiAgICBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IGhlbHBlcjo6dmFsdWU7Cn07CgoKdGVtcGxhdGU8PiBzdHJ1Y3Qg aXNfZW51bV9pbXBsPCBmbG9hdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoZmFsc2Up OyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IGRvdWJsZSA+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2lt cGw8IGxvbmcgZG91YmxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxzZSk7IH07 Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IHZvaWQgPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gKGZhbHNlKTsgfTsKCnRlbXBsYXRlPD4gc3RydWN0IGlzX2VudW1faW1wbDwg dm9pZCBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSAoZmFsc2UpOyB9Owp0ZW1w bGF0ZTw+IHN0cnVjdCBpc19lbnVtX2ltcGw8IHZvaWQgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gKGZhbHNlKTsgfTsKdGVtcGxhdGU8PiBzdHJ1Y3QgaXNfZW51bV9pbXBs PCB2b2lkIGNvbnN0IHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IChmYWxz ZSk7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfZW51bSA6IG1wbDo6 Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfZW51bV9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKIyAx MTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2VudW0uaHBwIgp9 CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X3VuZGVmLmhwcCIgMQojIDEyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvaXNfZW51bS5ocHAiIDIKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvY29tcG9zaXRlX3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfcG9pbnRlci5ocHAiIDEKIyAxNyAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBw IgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9m dW5jdGlvbl9wb2ludGVyLmhwcCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRlci5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX21lbV9mdW5fcG9pbnRlcl9p bXBsLmhwcCIgMQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGwuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1l c3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbAp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOwp9 OwoKCgoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2lu dGVyX2ltcGw8UiAoVDo6KikoKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9 OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy X2ltcGw8UiAoVDo6KikoKSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCA+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50 ZXJfaW1wbDxSIChUOjoqKSgpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9 IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUID4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz IFQwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwKSA+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU MCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p bXBsPFIgKFQ6OiopKCBUMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMD4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKSggVDAgLCBUMSkgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMT4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxKSBjb25zdCA+IHsg c3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDE+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKSggVDAgLCBUMSkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz IFQxPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEpIGNv bnN0IHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVt cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDI+ CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyKSA+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIs IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDI+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyKSBjb25zdCA+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3Mg VDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8 UiAoVDo6KikoIFQwICwgVDEgLCBUMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNz IFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzKSA+IHsgc3RhdGljIGNvbnN0 IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykgY29uc3QgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykgdm9sYXRpbGUg PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMz4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMykg Y29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0 ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBU MiAsIGNsYXNzIFQzICwgY2xhc3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxS IChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCkgPiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBj bGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUND4Kc3RydWN0IGlzX21lbV9m dW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0KSBjb25zdCA+ IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwg Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh c3MgVDQ+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAs IFQyICwgVDMgLCBUNCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1 ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVy X2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQpIGNvbnN0IHZvbGF0aWxlID4g eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIs IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs YXNzIFQ0ICwgY2xhc3MgVDU+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoq KSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFs dWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNs YXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDU+CnN0cnVj dCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBU NCAsIFQ1KSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1w bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUpIHZvbGF0aWxlID4g eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRlIDxjbGFzcyBSLCBj bGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFz cyBUNCAsIGNsYXNzIFQ1PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6Kiko IFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAs IGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBj bGFzcyBUNSAsIGNsYXNzIFQ2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6 KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2KSA+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg LCBjbGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj bGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj bGFzcyBUNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1w bDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNykgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFz cyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNzIFQyICwgY2xhc3MgVDMgLCBjbGFzcyBU NCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBUNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3 KSBjb25zdCA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8 Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNz IFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDc+CnN0cnVjdCBp c19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAs IFQ1ICwgVDYgLCBUNykgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1 ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs YXNzIFQ3PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEg LCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcpIGNvbnN0IHZvbGF0aWxlID4geyBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CgoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDg+CnN0cnVjdCBpc19tZW1f ZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBUMSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwg VDYgLCBUNyAsIFQ4KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg Y2xhc3MgVDg+CnN0cnVjdCBpc19tZW1fZnVuX3BvaW50ZXJfaW1wbDxSIChUOjoqKSggVDAgLCBU MSAsIFQyICwgVDMgLCBUNCAsIFQ1ICwgVDYgLCBUNyAsIFQ4KSBjb25zdCA+IHsgc3RhdGljIGNv bnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9Owp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOD4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs IFQ3ICwgVDgpIHZvbGF0aWxlID4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07 CnRlbXBsYXRlIDxjbGFzcyBSLCBjbGFzcyBUICwgY2xhc3MgVDAgLCBjbGFzcyBUMSAsIGNsYXNz IFQyICwgY2xhc3MgVDMgLCBjbGFzcyBUNCAsIGNsYXNzIFQ1ICwgY2xhc3MgVDYgLCBjbGFzcyBU NyAsIGNsYXNzIFQ4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCkgY29uc3Qgdm9sYXRpbGUg PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs YXNzIFQ5PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEg LCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5KSA+IHsgc3RhdGljIGNvbnN0 IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3 ICwgVDggLCBUOSkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU OSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg VDcgLCBUOCAsIFQ5ICwgVDEwKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9 OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs IFQ3ICwgVDggLCBUOSAsIFQxMCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAs IGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBj bGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMD4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5 ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8 UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5 ICwgVDEwICwgVDExKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMT4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs IGNsYXNzIFQxMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkg dm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMT4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs IFQ5ICwgVDEwICwgVDExICwgVDEyKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVl OyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs YXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx MikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4Kc3RydWN0 IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0 ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMikgdm9sYXRpbGUgPiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNs YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMj4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzPgpzdHJ1Y3QgaXNf bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzKSA+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgY29uc3QgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgdm9sYXRpbGUg PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMz4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMykgY29u c3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1w bGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAs IGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBj bGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwg Y2xhc3MgVDEzICwgY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwg VDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg PSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4Kc3RydWN0IGlzX21lbV9mdW5f cG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAs IFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCkgY29uc3QgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx ND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx MyAsIFQxNCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg VDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3 ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQx MiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBs PFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBU OSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3Mg VCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQg LCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwg Y2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0 ICwgY2xhc3MgVDE1PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx NSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSkgdm9sYXRpbGUgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx NCAsIGNsYXNzIFQxNT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNs YXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFz cyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3Mg VDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xh c3MgVDE1ICwgY2xhc3MgVDE2PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6 KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw ICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2KSA+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx NSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBi b29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx NSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz IFQxNSAsIGNsYXNzIFQxNj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xh c3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3Mg VDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5 ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3Mg VDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3PgpzdHJ1Y3QgaXNfbWVtX2Z1 bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2 ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2 ICwgVDE3KSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4Kc3Ry dWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAs IFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQx NCAsIFQxNSAsIFQxNiAsIFQxNykgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0g dHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQx NiAsIGNsYXNzIFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBU MCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQx MSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNykgdm9sYXRpbGUgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNz4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3 ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx NykgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFz cyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3Mg VDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3Mg VDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xh c3MgVDE3ICwgY2xhc3MgVDE4PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6 KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEw ICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4KSA+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOD4Kc3RydWN0 IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0 ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVl ID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNz IFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQx OCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxh dGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBj bGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xh c3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNs YXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAs IGNsYXNzIFQxOD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCkgY29uc3Qgdm9sYXRpbGUg PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg UiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwg Y2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNs YXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwg Y2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4 ICwgY2xhc3MgVDE5PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQw ICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDEx ICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5KSA+IHsgc3Rh dGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz IFQxOT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgY29uc3QgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgdm9sYXRpbGUgPiB7IHN0YXRp YyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx OT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSkgY29uc3Qgdm9sYXRpbGUgPiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwg Y2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xh c3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNz IFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xh c3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwg Y2xhc3MgVDE5ICwgY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAo VDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwg VDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5 ICwgVDIwKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUg PGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFz cyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3Mg VDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNz IFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNs YXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs IFQxOCAsIFQxOSAsIFQyMCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1 ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwg Y2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNs YXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNs YXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAs IGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMD4Kc3RydWN0IGlz X21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwg VDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQx NSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz IFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNs YXNzIFQyMD4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx MiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCkgY29uc3Qg dm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNs YXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFz cyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xh c3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwg Y2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIxPgpzdHJ1Y3QgaXNf bWVtX2Z1bl9wb2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBU NSAsIFQ2ICwgVDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1 ICwgVDE2ICwgVDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxKSA+IHsgc3RhdGljIGNvbnN0IGJv b2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBU MCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUg LCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAs IGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQx NSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNz IFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy MCAsIFQyMSkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVt cGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIg LCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwg Y2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAs IGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQx NyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0 IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0 ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAs IFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSkgdm9sYXRpbGUgPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNz IFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0 ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAs IGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQx NCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNz IFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMT4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9p bXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDgg LCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQx OCAsIFQxOSAsIFQyMCAsIFQyMSkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQw ICwgY2xhc3MgVDEgLCBjbGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAs IGNsYXNzIFQ2ICwgY2xhc3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwg Y2xhc3MgVDExICwgY2xhc3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1 ICwgY2xhc3MgVDE2ICwgY2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3Mg VDIwICwgY2xhc3MgVDIxICwgY2xhc3MgVDIyPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2lt cGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAs IFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4 ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQx ICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAs IGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAs IGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQx NiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNz IFQyMSAsIGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6Oiop KCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAs IFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQy MCAsIFQyMSAsIFQyMikgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz IFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNs YXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAs IGNsYXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQy MSAsIFQyMikgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsK dGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3Mg VDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3 ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQx MiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNz IFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNs YXNzIFQyMj4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQx ICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQx MiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAs IFQyMikgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg Y2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIx ICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzPgpzdHJ1Y3QgaXNfbWVtX2Z1bl9wb2ludGVyX2ltcGw8 UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwgVDcgLCBUOCAsIFQ5 ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwgVDE3ICwgVDE4ICwg VDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzKSA+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg PSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNz IFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBU NiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQx MSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNz IFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNs YXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRl cl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwg VDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAs IFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgY29uc3QgPiB7IHN0YXRpYyBjb25z dCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFz cyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3Mg VDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQx MCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNz IFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNs YXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMz4Kc3RydWN0IGlzX21l bV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUg LCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAs IFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMykgdm9sYXRpbGUg PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIs IGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNs YXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFz cyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNs YXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAs IGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQy Mz4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIg LCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQx MyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAs IFQyMykgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgUiwgY2xhc3MgVCAsIGNsYXNzIFQwICwgY2xhc3MgVDEgLCBj bGFzcyBUMiAsIGNsYXNzIFQzICwgY2xhc3MgVDQgLCBjbGFzcyBUNSAsIGNsYXNzIFQ2ICwgY2xh c3MgVDcgLCBjbGFzcyBUOCAsIGNsYXNzIFQ5ICwgY2xhc3MgVDEwICwgY2xhc3MgVDExICwgY2xh c3MgVDEyICwgY2xhc3MgVDEzICwgY2xhc3MgVDE0ICwgY2xhc3MgVDE1ICwgY2xhc3MgVDE2ICwg Y2xhc3MgVDE3ICwgY2xhc3MgVDE4ICwgY2xhc3MgVDE5ICwgY2xhc3MgVDIwICwgY2xhc3MgVDIx ICwgY2xhc3MgVDIyICwgY2xhc3MgVDIzICwgY2xhc3MgVDI0PgpzdHJ1Y3QgaXNfbWVtX2Z1bl9w b2ludGVyX2ltcGw8UiAoVDo6KikoIFQwICwgVDEgLCBUMiAsIFQzICwgVDQgLCBUNSAsIFQ2ICwg VDcgLCBUOCAsIFQ5ICwgVDEwICwgVDExICwgVDEyICwgVDEzICwgVDE0ICwgVDE1ICwgVDE2ICwg VDE3ICwgVDE4ICwgVDE5ICwgVDIwICwgVDIxICwgVDIyICwgVDIzICwgVDI0KSA+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQg LCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwg Y2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNs YXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAs IGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQx OSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNz IFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwg VDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAs IFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQy MiAsIFQyMyAsIFQyNCkgY29uc3QgPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNsYXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xh c3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNzIFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNz IFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBUOSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNz IFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNzIFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNs YXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNsYXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAs IGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAsIGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9p bnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAsIFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3 ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAsIFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQx NyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQyMSAsIFQyMiAsIFQyMyAsIFQyNCkgdm9sYXRpbGUgPiB7 IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGUgPGNsYXNzIFIsIGNs YXNzIFQgLCBjbGFzcyBUMCAsIGNsYXNzIFQxICwgY2xhc3MgVDIgLCBjbGFzcyBUMyAsIGNsYXNz IFQ0ICwgY2xhc3MgVDUgLCBjbGFzcyBUNiAsIGNsYXNzIFQ3ICwgY2xhc3MgVDggLCBjbGFzcyBU OSAsIGNsYXNzIFQxMCAsIGNsYXNzIFQxMSAsIGNsYXNzIFQxMiAsIGNsYXNzIFQxMyAsIGNsYXNz IFQxNCAsIGNsYXNzIFQxNSAsIGNsYXNzIFQxNiAsIGNsYXNzIFQxNyAsIGNsYXNzIFQxOCAsIGNs YXNzIFQxOSAsIGNsYXNzIFQyMCAsIGNsYXNzIFQyMSAsIGNsYXNzIFQyMiAsIGNsYXNzIFQyMyAs IGNsYXNzIFQyND4Kc3RydWN0IGlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFIgKFQ6OiopKCBUMCAs IFQxICwgVDIgLCBUMyAsIFQ0ICwgVDUgLCBUNiAsIFQ3ICwgVDggLCBUOSAsIFQxMCAsIFQxMSAs IFQxMiAsIFQxMyAsIFQxNCAsIFQxNSAsIFQxNiAsIFQxNyAsIFQxOCAsIFQxOSAsIFQyMCAsIFQy MSAsIFQyMiAsIFQyMyAsIFQyNCkgY29uc3Qgdm9sYXRpbGUgPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKIyAzMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9pc19tZW1fZnVuX3BvaW50ZXJfaW1wbC5ocHAiCn0KfQojIDE4ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9p bnRlci5ocHAiIDIKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv aXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVm LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv dGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDI5ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfZnVuY3Rpb25fcG9pbnRl ci5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry dWN0IGlzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyIDogbXBsOjpib29sXzwgOjpib29zdDo6dHlw ZV90cmFpdHM6OmlzX21lbV9mdW5fcG9pbnRlcl9pbXBsPFQ+Ojp2YWx1ZSA+IHsgfTsKIyAxMTAg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlv bl9wb2ludGVyLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAxMTMgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9mdW5jdGlvbl9wb2ludGVyLmhwcCIg MgojIDE4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJf cG9pbnRlci5ocHAiIDIKIyAyOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvaXNfbWVtYmVyX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxh dGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDI5ICIvdXNyL2xvY2FsL3Ny Yy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJfcG9pbnRlci5ocHAiIDIKCm5hbWVz cGFjZSBib29zdCB7CgoKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX21lbWJl cl9wb2ludGVyIDogbXBsOjpib29sXzwgOjpib29zdDo6aXNfbWVtYmVyX2Z1bmN0aW9uX3BvaW50 ZXI8VD46OnZhbHVlID4geyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgdHlwZW5hbWUgVSA+IHN0 cnVjdCBpc19tZW1iZXJfcG9pbnRlcjwgVSBUOjoqID4gOiBtcGw6OmJvb2xfPCB0cnVlID4geyB9 OwojIDkzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19tZW1iZXJf cG9pbnRlci5ocHAiCn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFp dHMvZGV0YWlsL2Jvb2xfdHJhaXRfdW5kZWYuaHBwIiAxCiMgOTYgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX21lbWJlcl9wb2ludGVyLmhwcCIgMgojIDI4ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9jb21wb3NpdGVfdHJhaXRzLmhwcCIg MgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19wb2ludGVy LmhwcCIgMQojIDI4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19w b2ludGVyLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvYm9vbF90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMu aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC9ib29sX3RyYWl0X2RlZi5ocHAiIDIKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVz cGFjZSBkZXRhaWwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNfcG9pbnRlcl9o ZWxwZXIKewogICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKfTsKIyA0OCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfcG9pbnRlci5ocHAiCnRlbXBs YXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVyPFQqPiB7IHN0YXRpYyBj b25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg aXNfcG9pbnRlcl9oZWxwZXI8VCogY29uc3Q+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0 cnVlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19wb2ludGVyX2hlbHBlcjxU KiB2b2xhdGlsZT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07CnRlbXBsYXRl PCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXJfaGVscGVyPFQqIGNvbnN0IHZvbGF0aWxl PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCgoKdGVtcGxhdGU8IHR5cGVu YW1lIFQgPgpzdHJ1Y3QgaXNfcG9pbnRlcl9pbXBsCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2VfYW5kPCA6OmJvb3N0OjpkZXRhaWw6Omlz X3BvaW50ZXJfaGVscGVyPFQ+Ojp2YWx1ZSAsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90 PCA6OmJvb3N0Ojppc19tZW1iZXJfcG9pbnRlcjxUPjo6dmFsdWUgPjo6dmFsdWUgPjo6dmFsdWUp OwoKCgoKCgoKfTsKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGlzX3BvaW50ZXIg OiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX3BvaW50ZXJfaW1wbDxUPjo6dmFsdWUg PiB7IH07CiMgMTM1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19w b2ludGVyLmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyAxMzggIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3BvaW50ZXIuaHBwIiAyCiMgMzAgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2NvbXBvc2l0ZV90cmFpdHMuaHBwIiAyCgojIDEg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMQoj IDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlvbi5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2Lmhw cCIgMQojIDE0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVf Y3YuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Jyb2tl bl9jb21waWxlcl9zcGVjLmhwcCIgMQojIDgyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9icm9rZW5fY29tcGlsZXJfc3BlYy5ocHAiCgoKCgoKCgoKCgoKCgoKCiMgMTUg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jdi5ocHAiIDIK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvY3ZfdHJh aXRzX2ltcGwuaHBwIiAxCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9jdl90cmFpdHNfaW1wbC5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFj ZSBkZXRhaWwgewoKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RydWN0IGN2X3RyYWl0c19pbXAg e307Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8VCo+CnsKICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9v bCBpc192b2xhdGlsZSA9IGZhbHNlOwogICAgdHlwZWRlZiBUIHVucXVhbGlmaWVkX3R5cGU7Cn07 Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IGN2X3RyYWl0c19pbXA8Y29uc3QgVCo+CnsK ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2NvbnN0ID0gdHJ1ZTsKICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX3ZvbGF0aWxlID0gZmFsc2U7CiAgICB0eXBlZGVmIFQgdW5xdWFsaWZpZWRfdHlwZTsK fTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBUPgpzdHJ1Y3QgY3ZfdHJhaXRzX2ltcDx2b2xhdGlsZSBU Kj4KewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfY29uc3QgPSBmYWxzZTsKICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3ZvbGF0aWxlID0gdHJ1ZTsKICAgIHR5cGVkZWYgVCB1bnF1YWxpZmllZF90 eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdl90cmFpdHNfaW1wPGNvbnN0 IHZvbGF0aWxlIFQqPgp7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19jb25zdCA9IHRydWU7CiAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc192b2xhdGlsZSA9IHRydWU7CiAgICB0eXBlZGVmIFQgdW5x dWFsaWZpZWRfdHlwZTsKfTsKCn0KfQojIDE2ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIiAxCiMgMTkgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2Rl Zi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIKIyAyMiAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvcmVtb3ZlX2N2LmhwcCIgMgoKbmFtZXNw YWNlIGJvb3N0IHsKCgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9jdiB7 IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpjdl90cmFpdHNfaW1wPFQqPjo6dW5xdWFsaWZpZWRf dHlwZSB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY3Y8VCY+ IHsgdHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3Qg TiA+IHN0cnVjdCByZW1vdmVfY3Y8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsK dGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2N2PFQg dm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHR5cGVbTl07IH07CnRlbXBsYXRlPCB0eXBlbmFtZSBU LCBzdGQ6OnNpemVfdCBOID4gc3RydWN0IHJlbW92ZV9jdjxUIGNvbnN0IHZvbGF0aWxlW05dPiB7 IHR5cGVkZWYgVCB0eXBlW05dOyB9OwojIDUwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMQojIDUzICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY3YuaHBwIiAyCiMgMTUg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3VuaW9uLmhwcCIgMgoK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pbnRyaW5zaWNzLmhw cCIgMQojIDE3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlv bi5ocHAiIDIKCgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5o cHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDIwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9pc191bmlvbi5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgpuYW1lc3BhY2Ug ZGV0YWlsIHsKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCBpc191bmlvbl9pbXBsCnsKICAg dHlwZWRlZiB0eXBlbmFtZSByZW1vdmVfY3Y8VD46OnR5cGUgY3Z0OwogICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9IGZhbHNlOwp9Owp9Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBp c191bmlvbiA6IG1wbDo6Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6aXNfdW5pb25faW1wbDxUPjo6 dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDM2ICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc191bmlvbi5ocHAiIDIKIyAzMiAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY29tcG9zaXRlX3RyYWl0cy5ocHAiIDIKIyAzMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvZGV0YWlsL2NhbGxfdHJhaXRzLmhwcCIgMgoKCm5h bWVzcGFjZSBib29zdHsKCm5hbWVzcGFjZSBkZXRhaWx7Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg Ym9vbCBzbWFsbF8+CnN0cnVjdCBjdF9pbXAyCnsKICAgdHlwZWRlZiBjb25zdCBUJiBwYXJhbV90 eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBjdF9pbXAyPFQsIHRydWU+CnsK ICAgdHlwZWRlZiBjb25zdCBUIHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwg Ym9vbCBpc3AsIGJvb2wgYjE+CnN0cnVjdCBjdF9pbXAKewogICB0eXBlZGVmIGNvbnN0IFQmIHBh cmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgYm9vbCBpc3A+CnN0cnVjdCBjdF9p bXA8VCwgaXNwLCB0cnVlPgp7CiAgIHR5cGVkZWYgdHlwZW5hbWUgY3RfaW1wMjxULCBzaXplb2Yo VCkgPD0gc2l6ZW9mKHZvaWQqKT46OnBhcmFtX3R5cGUgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRl IDx0eXBlbmFtZSBULCBib29sIGIxPgpzdHJ1Y3QgY3RfaW1wPFQsIHRydWUsIGIxPgp7CiAgIHR5 cGVkZWYgVCBjb25zdCBwYXJhbV90eXBlOwp9OwoKfQoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+CnN0 cnVjdCBjYWxsX3RyYWl0cwp7CnB1YmxpYzoKICAgdHlwZWRlZiBUIHZhbHVlX3R5cGU7CiAgIHR5 cGVkZWYgVCYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IFQmIGNvbnN0X3JlZmVyZW5jZTsK CgoKCgoKICAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmN0X2ltcDwKICAgICAgVCwKICAgICAg Ojpib29zdDo6aXNfcG9pbnRlcjxUPjo6dmFsdWUsCiAgICAgIDo6Ym9vc3Q6OmlzX2FyaXRobWV0 aWM8VD46OnZhbHVlCiAgID46OnBhcmFtX3R5cGUgcGFyYW1fdHlwZTsKfTsKCnRlbXBsYXRlIDx0 eXBlbmFtZSBUPgpzdHJ1Y3QgY2FsbF90cmFpdHM8VCY+CnsKICAgdHlwZWRlZiBUJiB2YWx1ZV90 eXBlOwogICB0eXBlZGVmIFQmIHJlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUJiBjb25zdF9y ZWZlcmVuY2U7CiAgIHR5cGVkZWYgVCYgcGFyYW1fdHlwZTsKfTsKIyAxMjkgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L2RldGFpbC9jYWxsX3RyYWl0cy5ocHAiCnRlbXBsYXRlIDx0eXBlbmFt ZSBULCBzdGQ6OnNpemVfdCBOPgpzdHJ1Y3QgY2FsbF90cmFpdHM8VCBbTl0+CnsKcHJpdmF0ZToK ICAgdHlwZWRlZiBUIGFycmF5X3R5cGVbTl07CnB1YmxpYzoKCiAgIHR5cGVkZWYgY29uc3QgVCog dmFsdWVfdHlwZTsKICAgdHlwZWRlZiBhcnJheV90eXBlJiByZWZlcmVuY2U7CiAgIHR5cGVkZWYg Y29uc3QgYXJyYXlfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IFQqIGNv bnN0IHBhcmFtX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTj4K c3RydWN0IGNhbGxfdHJhaXRzPGNvbnN0IFQgW05dPgp7CnByaXZhdGU6CiAgIHR5cGVkZWYgY29u c3QgVCBhcnJheV90eXBlW05dOwpwdWJsaWM6CgogICB0eXBlZGVmIGNvbnN0IFQqIHZhbHVlX3R5 cGU7CiAgIHR5cGVkZWYgYXJyYXlfdHlwZSYgcmVmZXJlbmNlOwogICB0eXBlZGVmIGNvbnN0IGFy cmF5X3R5cGUmIGNvbnN0X3JlZmVyZW5jZTsKICAgdHlwZWRlZiBjb25zdCBUKiBjb25zdCBwYXJh bV90eXBlOwp9OwoKCn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvY2FsbF90cmFp dHMuaHBwIiAyCiMgMjcgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z1bmN0aW9uLmhwcCIg MgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxlL3R1cGxlLmhwcCIgMQojIDM3 ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS90dXBsZS5ocHAiCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvcmVmLmhwcCIgMQojIDkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3JlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdXRpbGl0eS9h ZGRyZXNzb2YuaHBwIiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3V0aWxpdHkv YWRkcmVzc29mLmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKCgoKCgoKCnRlbXBsYXRlIDx0eXBlbmFt ZSBUPiBUKgoKYWRkcmVzc29mKFQmIHYpCnsKICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxUKj4o CiAgICAgICAmY29uc3RfY2FzdDxjaGFyJj4ocmVpbnRlcnByZXRfY2FzdDxjb25zdCB2b2xhdGls ZSBjaGFyICY+KHYpKSk7Cn0KCn0KIyAxMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvcmVm LmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9yZWYuaHBwIgpuYW1lc3Bh Y2UgYm9vc3QKewoKdGVtcGxhdGU8Y2xhc3MgVD4gY2xhc3MgcmVmZXJlbmNlX3dyYXBwZXIKewpw dWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKCgoKCgoKCiAgICBleHBsaWNpdCByZWZlcmVuY2Vf d3JhcHBlcihUJiB0KTogdF8oYWRkcmVzc29mKHQpKSB7fQoKCgogICAgb3BlcmF0b3IgVCYgKCkg Y29uc3QgeyByZXR1cm4gKnRfOyB9CgogICAgVCYgZ2V0KCkgY29uc3QgeyByZXR1cm4gKnRfOyB9 CgogICAgVCogZ2V0X3BvaW50ZXIoKSBjb25zdCB7IHJldHVybiB0XzsgfQoKcHJpdmF0ZToKCiAg ICBUKiB0XzsKfTsKCgoKCgoKCnRlbXBsYXRlPGNsYXNzIFQ+IGlubGluZSByZWZlcmVuY2Vfd3Jh cHBlcjxUPiBjb25zdCByZWYoVCAmIHQpCnsKICAgIHJldHVybiByZWZlcmVuY2Vfd3JhcHBlcjxU Pih0KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVD4gaW5saW5lIHJlZmVyZW5jZV93cmFwcGVyPFQgY29u c3Q+IGNvbnN0IGNyZWYoVCBjb25zdCAmIHQpCnsKICAgIHJldHVybiByZWZlcmVuY2Vfd3JhcHBl cjxUIGNvbnN0Pih0KTsKfQoKCgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3MgaXNfcmVmZXJl bmNlX3dyYXBwZXIKICAgIDogcHVibGljIG1wbDo6ZmFsc2VfCnsKfTsKCnRlbXBsYXRlPHR5cGVu YW1lIFQ+CmNsYXNzIGlzX3JlZmVyZW5jZV93cmFwcGVyPHJlZmVyZW5jZV93cmFwcGVyPFQ+ID4K ICAgIDogcHVibGljIG1wbDo6dHJ1ZV8Kewp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4KY2xhc3Mg dW53cmFwX3JlZmVyZW5jZQp7CiBwdWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRlbXBs YXRlPHR5cGVuYW1lIFQ+CmNsYXNzIHVud3JhcF9yZWZlcmVuY2U8cmVmZXJlbmNlX3dyYXBwZXI8 VD4gPgp7CiBwdWJsaWM6CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKIyAxNjEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3JlZi5ocHAiCn0KIyAzOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHVwbGUvdHVwbGUuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHVw bGUvZGV0YWlsL3R1cGxlX2Jhc2ljLmhwcCIgMQojIDQzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC90dXBsZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jv b3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDEKIyAxNiAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvY3ZfdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY29uc3QuaHBwIiAxCiMgMTcgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVm LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh aWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw IiAyCiMgMTggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9jb25z dC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CiMgMzQgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry dWN0IGFkZF9jb25zdCB7IHR5cGVkZWYgVCBjb25zdCB0eXBlOyB9OwoKCgoKCgp0ZW1wbGF0ZTwg dHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRfY29uc3Q8VCY+IHsgdHlwZWRlZiBUJiB0eXBlOyB9OwoK Cn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5 cGVfdHJhaXRfdW5kZWYuaHBwIiAxCiMgNDcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2FkZF9jb25zdC5ocHAiIDIKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvY3ZfdHJhaXRzLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF92b2xhdGlsZS5ocHAiIDEKIyAxNyAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw IiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90 eXBlX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDIK IyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxl LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKIyAzNCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBz dHJ1Y3QgYWRkX3ZvbGF0aWxlIHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGU7IH07CgoKCgoKCnRl bXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IGFkZF92b2xhdGlsZTxUJj4geyB0eXBlZGVmIFQm IHR5cGU7IH07CgoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9kZXRhaWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEKIyA0NyAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3ZvbGF0aWxlLmhwcCIgMgojIDE4ICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9jdl90cmFpdHMuaHBwIiAyCiMgMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX2N2LmhwcCIgMQojIDE3ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBwIgojIDEgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5o cHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWls L3R5cGVfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIg MgojIDE4ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfY3YuaHBw IiAyCgpuYW1lc3BhY2UgYm9vc3QgewojIDM0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9hZGRfY3YuaHBwIgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBhZGRf Y3YgeyB0eXBlZGVmIFQgY29uc3Qgdm9sYXRpbGUgdHlwZTsgfTsKCgoKCgoKdGVtcGxhdGU8IHR5 cGVuYW1lIFQgPiBzdHJ1Y3QgYWRkX2N2PFQmPiB7IHR5cGVkZWYgVCYgdHlwZTsgfTsKCgp9Cgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3Ry YWl0X3VuZGVmLmhwcCIgMQojIDQ3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9hZGRfY3YuaHBwIiAyCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90 eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhw cCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVt cGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIgMgojIDMwICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jb25zdC5ocHAiIDIKCm5hbWVzcGFjZSBi b29zdCB7CgoKCgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19jb25zdCA6IG1wbDo6 Ym9vbF88IDo6Ym9vc3Q6OmRldGFpbDo6Y3ZfdHJhaXRzX2ltcDxUKj46OmlzX2NvbnN0ID4geyB9 Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCBpc19jb25zdDwgVCYgPiA6IG1wbDo6Ym9v bF88IGZhbHNlID4geyB9OwojIDExOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90 cmFpdHMvaXNfY29uc3QuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDEyMiAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY29uc3QuaHBwIiAyCiMgMjAgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc192b2xhdGlsZS5ocHAiIDEK IyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUu aHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9i b29sX3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEK IyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xf dHJhaXRfZGVmLmhwcCIgMgojIDI3ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9pc192b2xhdGlsZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCgp0ZW1wbGF0ZTwg dHlwZW5hbWUgVCA+IHN0cnVjdCBpc192b2xhdGlsZSA6IG1wbDo6Ym9vbF88IDo6Ym9vc3Q6OmRl dGFpbDo6Y3ZfdHJhaXRzX2ltcDxUKj46OmlzX3ZvbGF0aWxlID4geyB9Owp0ZW1wbGF0ZTwgdHlw ZW5hbWUgVCA+IHN0cnVjdCBpc192b2xhdGlsZTwgVCYgPiA6IG1wbDo6Ym9vbF88IGZhbHNlID4g eyB9OwojIDEwOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9s YXRpbGUuaHBwIgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDExMiAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfdm9sYXRpbGUuaHBwIiAyCiMgMjEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfY29uc3QuaHBwIiAxCiMgMjIg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9jb25zdC5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVf dHJhaXRfZGVmLmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIw ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFp dF9kZWYuaHBwIiAyCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz L3JlbW92ZV9jb25zdC5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVzcGFjZSBkZXRh aWwgewoKdGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfdm9sPgpzdHJ1Y3QgcmVtb3ZlX2Nv bnN0X2hlbHBlcgp7CiAgICB0eXBlZGVmIFQgdHlwZTsKfTsKCnRlbXBsYXRlIDx0eXBlbmFtZSBU PgpzdHJ1Y3QgcmVtb3ZlX2NvbnN0X2hlbHBlcjxULCB0cnVlPgp7CiAgICB0eXBlZGVmIFQgdm9s YXRpbGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV9jb25z dF9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX2NvbnN0X2hlbHBlcjwKICAgICAg ICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlCiAgICAgICAg LCA6OmJvb3N0Ojppc192b2xhdGlsZTxUPjo6dmFsdWUKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07 Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV9jb25zdCB7IHR5cGVk ZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfY29uc3RfaW1wbDxUPjo6dHlwZSB0eXBlOyB9Owp0 ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfY29uc3Q8VCY+IHsgdHlwZWRlZiBU JiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+IHN0cnVjdCBy ZW1vdmVfY29uc3Q8VCBjb25zdFtOXT4geyB0eXBlZGVmIFQgdHlwZVtOXTsgfTsKdGVtcGxhdGU8 IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3ZlX2NvbnN0PFQgY29uc3Qg dm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIHZvbGF0aWxlIHR5cGVbTl07IH07CgoKCgoKCgp9Cgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3Ry YWl0X3VuZGVmLmhwcCIgMQojIDcwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9yZW1vdmVfY29uc3QuaHBwIiAyCiMgMjIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0 L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9i b29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAxCiMgMjIgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV92b2xhdGlsZS5ocHAiCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVm LmhwcCIgMQojIDE5ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh aWwvdHlwZV90cmFpdF9kZWYuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2RldGFpbC90ZW1wbGF0ZV9hcml0eV9zcGVjLmhwcCIgMQojIDIwICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYuaHBw IiAyCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL3JlbW92ZV92 b2xhdGlsZS5ocHAiIDIKCm5hbWVzcGFjZSBib29zdCB7CgoKCm5hbWVzcGFjZSBkZXRhaWwgewoK dGVtcGxhdGUgPHR5cGVuYW1lIFQsIGJvb2wgaXNfY29uc3Q+CnN0cnVjdCByZW1vdmVfdm9sYXRp bGVfaGVscGVyCnsKICAgIHR5cGVkZWYgVCB0eXBlOwp9OwoKdGVtcGxhdGUgPHR5cGVuYW1lIFQ+ CnN0cnVjdCByZW1vdmVfdm9sYXRpbGVfaGVscGVyPFQsdHJ1ZT4KewogICAgdHlwZWRlZiBUIGNv bnN0IHR5cGU7Cn07Cgp0ZW1wbGF0ZSA8dHlwZW5hbWUgVD4Kc3RydWN0IHJlbW92ZV92b2xhdGls ZV9pbXBsCnsKICAgIHR5cGVkZWYgdHlwZW5hbWUgcmVtb3ZlX3ZvbGF0aWxlX2hlbHBlcjwKICAg ICAgICAgIHR5cGVuYW1lIGN2X3RyYWl0c19pbXA8VCo+Ojp1bnF1YWxpZmllZF90eXBlCiAgICAg ICAgLCA6OmJvb3N0Ojppc19jb25zdDxUPjo6dmFsdWUKICAgICAgICA+Ojp0eXBlIHR5cGU7Cn07 Cgp9CgoKCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3RydWN0IHJlbW92ZV92b2xhdGlsZSB7IHR5 cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjpyZW1vdmVfdm9sYXRpbGVfaW1wbDxUPjo6dHlwZSB0eXBl OyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCA+IHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8VCY+IHsg dHlwZWRlZiBUJiB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUgVCwgc3RkOjpzaXplX3QgTiA+ IHN0cnVjdCByZW1vdmVfdm9sYXRpbGU8VCB2b2xhdGlsZVtOXT4geyB0eXBlZGVmIFQgdHlwZVtO XTsgfTsKdGVtcGxhdGU8IHR5cGVuYW1lIFQsIHN0ZDo6c2l6ZV90IE4gPiBzdHJ1Y3QgcmVtb3Zl X3ZvbGF0aWxlPFQgY29uc3Qgdm9sYXRpbGVbTl0+IHsgdHlwZWRlZiBUIGNvbnN0IHR5cGVbTl07 IH07CgoKCgoKCgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRz L2RldGFpbC90eXBlX3RyYWl0X3VuZGVmLmhwcCIgMQojIDY5ICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfdm9sYXRpbGUuaHBwIiAyCiMgMjMgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2N2X3RyYWl0cy5ocHAiIDIKIyA0NCAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHVwbGUvZGV0YWlsL3R1cGxlX2Jhc2ljLmhwcCIgMgoj IDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0 cy5ocHAiIDEKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZnVu Y3Rpb25fdHJhaXRzLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3Ry YWl0cy9pc19mdW5jdGlvbi5ocHAiIDEKIyAxOCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL2RldGFpbC9mYWxzZV9yZXN1bHQuaHBwIiAxCiMgMTIgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9mYWxzZV9yZXN1bHQuaHBwIgpu YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKCnN0cnVjdCBmYWxzZV9y ZXN1bHQKewogICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQ+IHN0cnVjdCByZXN1bHRfCiAgICB7CiAg ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsKICAgIH07Cn07Cgp9fQojIDE5 ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19mdW5jdGlvbi5ocHAi IDIKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwv aXNfZnVuY3Rpb25fcHRyX2hlbHBlci5ocHAiIDEKIyAyOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2lzX2Z1bmN0aW9uX3B0cl9oZWxwZXIuaHBwIgpuYW1l c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgdHlwZV90cmFpdHMgewoKdGVtcGxhdGUgPGNsYXNzIFI+ CnN0cnVjdCBpc19mdW5jdGlvbl9wdHJfaGVscGVyCnsKICAgIHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gZmFsc2U7Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgUj4Kc3RydWN0IGlzX2Z1bmN0aW9u X3B0cl9oZWxwZXI8UiAoKikoKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMD4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxw ZXI8UiAoKikoVDApPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBs YXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hl bHBlcjxSICgqKShUMCxUMSk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoK dGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDI+CnN0cnVjdCBpc19m dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMz4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEs VDIsVDMpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxj bGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1 Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCk+IHsgc3RhdGlj IGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAs Y2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDU+CnN0cnVjdCBpc19m dW5jdGlvbl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1KT4geyBzdGF0aWMgY29u c3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFz cyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0 IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYpPiB7IHN0 YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNz IFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2 LGNsYXNzIFQ3PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyk+IHsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSB0cnVlOyB9OwoKdGVt cGxhdGUgPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3Mg VDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3MgVDg+CnN0cnVjdCBpc19mdW5jdGlv bl9wdHJfaGVscGVyPFIgKCopKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4KT4geyBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz cyBUNyxjbGFzcyBUOCxjbGFzcyBUOT4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAo KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkpPiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNz IFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4 LGNsYXNzIFQ5LGNsYXNzIFQxMD4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKiko VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hl bHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExKT4geyBzdGF0 aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBU MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMj4K c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs VDcsVDgsVDksVDEwLFQxMSxUMTIpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNs YXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMz4Kc3RydWN0IGlzX2Z1bmN0aW9u X3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxU MTIsVDEzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRy X2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixU MTMsVDE0KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8 Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFz cyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3Mg VDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNT4Kc3RydWN0IGlzX2Z1 bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw LFQxMSxUMTIsVDEzLFQxNCxUMTUpPiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsg fTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNs YXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1 LGNsYXNzIFQxNj4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIs VDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2KT4geyBzdGF0 aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBU MCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixj bGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixj bGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3PgpzdHJ1Y3Qg aXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxU OSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3KT4geyBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBU OCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3Mg VDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOD4Kc3RydWN0IGlzX2Z1 bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEw LFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgpPiB7IHN0YXRpYyBjb25zdCBib29sIHZh bHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNz IFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4 LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xhc3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBU MTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcsY2xhc3MgVDE4LGNsYXNzIFQxOT4Kc3Ry dWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcs VDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5KT4geyBzdGF0aWMg Y29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxj bGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFz cyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFz cyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxj bGFzcyBUMTksY2xhc3MgVDIwPgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShU MCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYs VDE3LFQxOCxUMTksVDIwKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0 ZW1wbGF0ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFz cyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBU MTAsY2xhc3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFz cyBUMTYsY2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMT4K c3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYs VDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEp PiB7IHN0YXRpYyBjb25zdCBib29sIHZhbHVlID0gdHJ1ZTsgfTsKCnRlbXBsYXRlIDxjbGFzcyBS LGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNs YXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5LGNsYXNzIFQxMCxjbGFzcyBUMTEsY2xh c3MgVDEyLGNsYXNzIFQxMyxjbGFzcyBUMTQsY2xhc3MgVDE1LGNsYXNzIFQxNixjbGFzcyBUMTcs Y2xhc3MgVDE4LGNsYXNzIFQxOSxjbGFzcyBUMjAsY2xhc3MgVDIxLGNsYXNzIFQyMj4Kc3RydWN0 IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAoKikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgs VDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUsVDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyKT4g eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0ZSA8Y2xhc3MgUixj bGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFz cyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xhc3MgVDExLGNsYXNz IFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYsY2xhc3MgVDE3LGNs YXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBUMjIsY2xhc3MgVDIz PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fcHRyX2hlbHBlcjxSICgqKShUMCxUMSxUMixUMyxUNCxUNSxU NixUNyxUOCxUOSxUMTAsVDExLFQxMixUMTMsVDE0LFQxNSxUMTYsVDE3LFQxOCxUMTksVDIwLFQy MSxUMjIsVDIzKT4geyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IHRydWU7IH07Cgp0ZW1wbGF0 ZSA8Y2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxj bGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNyxjbGFzcyBUOCxjbGFzcyBUOSxjbGFzcyBUMTAsY2xh c3MgVDExLGNsYXNzIFQxMixjbGFzcyBUMTMsY2xhc3MgVDE0LGNsYXNzIFQxNSxjbGFzcyBUMTYs Y2xhc3MgVDE3LGNsYXNzIFQxOCxjbGFzcyBUMTksY2xhc3MgVDIwLGNsYXNzIFQyMSxjbGFzcyBU MjIsY2xhc3MgVDIzLGNsYXNzIFQyND4Kc3RydWN0IGlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8UiAo KikoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDksVDEwLFQxMSxUMTIsVDEzLFQxNCxUMTUs VDE2LFQxNyxUMTgsVDE5LFQyMCxUMjEsVDIyLFQyMyxUMjQpPiB7IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gdHJ1ZTsgfTsKIyAxMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2RldGFpbC9pc19mdW5jdGlvbl9wdHJfaGVscGVyLmhwcCIKfQp9CiMgMjMgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIgMgoKCgoK CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29s X3RyYWl0X2RlZi5ocHAiIDEKIyAxOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90 cmFpdHMvZGV0YWlsL2Jvb2xfdHJhaXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAy MCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL2Jvb2xfdHJh aXRfZGVmLmhwcCIgMgojIDMwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0 cy9pc19mdW5jdGlvbi5ocHAiIDIKCgoKCgoKCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBk ZXRhaWwgewoKCnRlbXBsYXRlPGJvb2wgaXNfcmVmID0gdHJ1ZT4Kc3RydWN0IGlzX2Z1bmN0aW9u X2Nob29zZXIKICAgIDogOjpib29zdDo6dHlwZV90cmFpdHM6OmZhbHNlX3Jlc3VsdAp7Cn07Cgp0 ZW1wbGF0ZSA8PgpzdHJ1Y3QgaXNfZnVuY3Rpb25fY2hvb3NlcjxmYWxzZT4KewogICAgdGVtcGxh dGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgcmVzdWx0XwogICAgICAgIDogOjpib29zdDo6dHlwZV90 cmFpdHM6OmlzX2Z1bmN0aW9uX3B0cl9oZWxwZXI8VCo+CiAgICB7CiAgICB9Owp9OwoKdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19mdW5jdGlvbl9pbXBsCiAgICA6IGlzX2Z1bmN0aW9u X2Nob29zZXI8IDo6Ym9vc3Q6OmlzX3JlZmVyZW5jZTxUPjo6dmFsdWUgPgogICAgICAgIDo6dGVt cGxhdGUgcmVzdWx0XzxUPgp7Cn07CiMgNzcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5 cGVfdHJhaXRzL2lzX2Z1bmN0aW9uLmhwcCIKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1 Y3QgaXNfZnVuY3Rpb24gOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2Z1bmN0aW9u X2ltcGw8VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyA4NCAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfZnVuY3Rpb24uaHBwIiAyCiMgMTgg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Z1bmN0aW9uX3RyYWl0cy5o cHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9hZGRfcG9p bnRlci5ocHAiIDEKIyAxMyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMv YWRkX3BvaW50ZXIuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwIiAxCiMgMTcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jv b3N0L3R5cGVfdHJhaXRzL3JlbW92ZV9yZWZlcmVuY2UuaHBwIgojIDEgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAiIDEKIyAx OSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJh aXRfZGVmLmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9k ZXRhaWwvdGVtcGxhdGVfYXJpdHlfc3BlYy5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvdHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfZGVmLmhwcCIgMgojIDE4ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNlLmhw cCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCgoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3Qg cmVtb3ZlX3JlZmVyZW5jZSB7IHR5cGVkZWYgVCB0eXBlOyB9Owp0ZW1wbGF0ZTwgdHlwZW5hbWUg VCA+IHN0cnVjdCByZW1vdmVfcmVmZXJlbmNlPFQmPiB7IHR5cGVkZWYgVCB0eXBlOyB9OwojIDQy ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9yZW1vdmVfcmVmZXJlbmNl LmhwcCIKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRh aWwvdHlwZV90cmFpdF91bmRlZi5ocHAiIDEKIyA0NSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvdHlwZV90cmFpdHMvcmVtb3ZlX3JlZmVyZW5jZS5ocHAiIDIKIyAxNCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50ZXIuaHBwIiAyCgoKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvdHlwZV90cmFpdF9kZWYu aHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC90eXBlX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC90eXBlX3RyYWl0X2RlZi5ocHAi IDIKIyAxNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvYWRkX3BvaW50 ZXIuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7CiMgNTYgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIKdGVt cGxhdGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBhZGRfcG9pbnRlcl9pbXBsCnsKICAgIHR5cGVkZWYg dHlwZW5hbWUgcmVtb3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBub19yZWZfdHlwZTsKICAgIHR5cGVk ZWYgbm9fcmVmX3R5cGUqIHR5cGU7Cn07CgoKCn0KCnRlbXBsYXRlPCB0eXBlbmFtZSBUID4gc3Ry dWN0IGFkZF9wb2ludGVyIHsgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6OmFkZF9wb2ludGVyX2lt cGw8VD46OnR5cGUgdHlwZTsgfTsKCn0KCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL3R5cGVfdHJhaXRfdW5kZWYuaHBwIiAxCiMgNzIgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2FkZF9wb2ludGVyLmhwcCIgMgojIDE5ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9mdW5jdGlvbl90cmFpdHMuaHBw IiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGU8dHlw ZW5hbWUgRnVuY3Rpb24+IHN0cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyOwoKdGVtcGxhdGU8 dHlwZW5hbWUgUj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikodm9pZCk+CnsK ICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMDsKICB0eXBlZGVmIFIgcmVzdWx0X3R5cGU7Cn07 Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMT4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0 c19oZWxwZXI8UiAoKikoVDEpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDE7CiAgdHlw ZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwp9OwoKdGVtcGxhdGU8 dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyPgpzdHJ1Y3QgZnVuY3Rpb25fdHJh aXRzX2hlbHBlcjxSICgqKShUMSwgVDIpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDI7 CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVk ZWYgVDIgYXJnMl90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5 cGVuYW1lIFQyLCB0eXBlbmFtZSBUMz4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAo KikoVDEsIFQyLCBUMyk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMzsKICB0eXBlZGVm IFIgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBUMiBhcmcy X3R5cGU7CiAgdHlwZWRlZiBUMyBhcmczX3R5cGU7Cn07Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0 eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUND4Kc3RydWN0 IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQpPgp7CiAgc3RhdGlj IGNvbnN0IGludCBhcml0eSA9IDQ7CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYg VDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190 eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlw ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAg IHR5cGVuYW1lIFQ1PgpzdHJ1Y3QgZnVuY3Rpb25fdHJhaXRzX2hlbHBlcjxSICgqKShUMSwgVDIs IFQzLCBUNCwgVDUpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDU7CiAgdHlwZWRlZiBS IHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90 eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5 cGVkZWYgVDUgYXJnNV90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEs IHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1l IFQ1LCB0eXBlbmFtZSBUNj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEs IFQyLCBUMywgVDQsIFQ1LCBUNik+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gNjsKICB0 eXBlZGVmIFIgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBU MiBhcmcyX3R5cGU7CiAgdHlwZWRlZiBUMyBhcmczX3R5cGU7CiAgdHlwZWRlZiBUNCBhcmc0X3R5 cGU7CiAgdHlwZWRlZiBUNSBhcmc1X3R5cGU7CiAgdHlwZWRlZiBUNiBhcmc2X3R5cGU7Cn07Cgp0 ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz LCB0eXBlbmFtZSBUNCwKICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFt ZSBUNz4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQs IFQ1LCBUNiwgVDcpPgp7CiAgc3RhdGljIGNvbnN0IGludCBhcml0eSA9IDc7CiAgdHlwZWRlZiBS IHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90 eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5 cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVkZWYgVDcg YXJnN190eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1lIFQ1LCB0eXBl bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4PgpzdHJ1Y3QgZnVuY3Rpb25fdHJhaXRz X2hlbHBlcjxSICgqKShUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNywgVDgpPgp7CiAgc3RhdGlj IGNvbnN0IGludCBhcml0eSA9IDg7CiAgdHlwZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYg VDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIgYXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190 eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBlOwogIHR5cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5 cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVkZWYgVDcgYXJnN190eXBlOwogIHR5cGVkZWYgVDgg YXJnOF90eXBlOwp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgUiwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l IFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQsCiAgICAgICAgIHR5cGVuYW1lIFQ1LCB0eXBl bmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOT4Kc3RydWN0IGZ1 bmN0aW9uX3RyYWl0c19oZWxwZXI8UiAoKikoVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4 LCBUOSk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gOTsKICB0eXBlZGVmIFIgcmVzdWx0 X3R5cGU7CiAgdHlwZWRlZiBUMSBhcmcxX3R5cGU7CiAgdHlwZWRlZiBUMiBhcmcyX3R5cGU7CiAg dHlwZWRlZiBUMyBhcmczX3R5cGU7CiAgdHlwZWRlZiBUNCBhcmc0X3R5cGU7CiAgdHlwZWRlZiBU NSBhcmc1X3R5cGU7CiAgdHlwZWRlZiBUNiBhcmc2X3R5cGU7CiAgdHlwZWRlZiBUNyBhcmc3X3R5 cGU7CiAgdHlwZWRlZiBUOCBhcmc4X3R5cGU7CiAgdHlwZWRlZiBUOSBhcmc5X3R5cGU7Cn07Cgp0 ZW1wbGF0ZTx0eXBlbmFtZSBSLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQz LCB0eXBlbmFtZSBUNCwKICAgICAgICAgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFt ZSBUNywgdHlwZW5hbWUgVDgsIHR5cGVuYW1lIFQ5LAogICAgICAgICB0eXBlbmFtZSBUMTA+CnN0 cnVjdCBmdW5jdGlvbl90cmFpdHNfaGVscGVyPFIgKCopKFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYs IFQ3LCBUOCwgVDksIFQxMCk+CnsKICBzdGF0aWMgY29uc3QgaW50IGFyaXR5ID0gMTA7CiAgdHlw ZWRlZiBSIHJlc3VsdF90eXBlOwogIHR5cGVkZWYgVDEgYXJnMV90eXBlOwogIHR5cGVkZWYgVDIg YXJnMl90eXBlOwogIHR5cGVkZWYgVDMgYXJnM190eXBlOwogIHR5cGVkZWYgVDQgYXJnNF90eXBl OwogIHR5cGVkZWYgVDUgYXJnNV90eXBlOwogIHR5cGVkZWYgVDYgYXJnNl90eXBlOwogIHR5cGVk ZWYgVDcgYXJnN190eXBlOwogIHR5cGVkZWYgVDggYXJnOF90eXBlOwogIHR5cGVkZWYgVDkgYXJn OV90eXBlOwogIHR5cGVkZWYgVDEwIGFyZzEwX3R5cGU7Cn07Cgp9Cgp0ZW1wbGF0ZTx0eXBlbmFt ZSBGdW5jdGlvbj4Kc3RydWN0IGZ1bmN0aW9uX3RyYWl0cyA6CiAgICBwdWJsaWMgZGV0YWlsOjpm dW5jdGlvbl90cmFpdHNfaGVscGVyPHR5cGVuYW1lIGFkZF9wb2ludGVyPEZ1bmN0aW9uPjo6dHlw ZT4Kewp9OwojIDIzNSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvZnVu Y3Rpb25fdHJhaXRzLmhwcCIKfQojIDQ1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBs ZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2Ug dHVwbGVzIHsKCgpzdHJ1Y3QgbnVsbF90eXBlIHt9OwoKCm5hbWVzcGFjZSBkZXRhaWwgewogIGlu bGluZSBjb25zdCBudWxsX3R5cGUgY251bGwoKSB7IHJldHVybiBudWxsX3R5cGUoKTsgfQoKCgoK CnRlbXBsYXRlIDxib29sIElmLCBjbGFzcyBUaGVuLCBjbGFzcyBFbHNlPiBzdHJ1Y3QgSUYgeyB0 eXBlZGVmIFRoZW4gUkVUOyB9OwoKdGVtcGxhdGUgPGNsYXNzIFRoZW4sIGNsYXNzIEVsc2U+IHN0 cnVjdCBJRjxmYWxzZSwgVGhlbiwgRWxzZT4gewogIHR5cGVkZWYgRWxzZSBSRVQ7Cn07Cgp9CgoK dGVtcGxhdGUgPGNsYXNzIEhULCBjbGFzcyBUVD4gc3RydWN0IGNvbnM7CgoKCnRlbXBsYXRlIDwK ICBjbGFzcyBUMCA9IG51bGxfdHlwZSwgY2xhc3MgVDEgPSBudWxsX3R5cGUsIGNsYXNzIFQyID0g bnVsbF90eXBlLAogIGNsYXNzIFQzID0gbnVsbF90eXBlLCBjbGFzcyBUNCA9IG51bGxfdHlwZSwg Y2xhc3MgVDUgPSBudWxsX3R5cGUsCiAgY2xhc3MgVDYgPSBudWxsX3R5cGUsIGNsYXNzIFQ3ID0g bnVsbF90eXBlLCBjbGFzcyBUOCA9IG51bGxfdHlwZSwKICBjbGFzcyBUOSA9IG51bGxfdHlwZT4K Y2xhc3MgdHVwbGU7CgoKdGVtcGxhdGU8Y2xhc3MgVD4gc3RydWN0IGxlbmd0aDsKCgoKbmFtZXNw YWNlIGRldGFpbCB7CiMgMTAwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRh aWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0ZTxjbGFzcyBUPgpjbGFzcyBnZW5lcmF0ZV9lcnJv cjsKCgoKCnRlbXBsYXRlPCBpbnQgTiA+CnN0cnVjdCBnZXRfY2xhc3MgewogIHRlbXBsYXRlPGNs YXNzIFJFVCwgY2xhc3MgSFQsIGNsYXNzIFRUID4KICBpbmxpbmUgc3RhdGljIFJFVCBnZXQoY29u c3QgY29uczxIVCwgVFQ+JiB0KQogIHsKICAgIHJldHVybiBnZXRfY2xhc3M8Ti0xPjo6dGVtcGxh dGUgZ2V0PFJFVD4odC50YWlsKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgUkVULCBjbGFzcyBIVCwg Y2xhc3MgVFQgPgogIGlubGluZSBzdGF0aWMgUkVUIGdldChjb25zPEhULCBUVD4mIHQpCiAgewog ICAgcmV0dXJuIGdldF9jbGFzczxOLTE+Ojp0ZW1wbGF0ZSBnZXQ8UkVUPih0LnRhaWwpOwogIH0K fTsKCnRlbXBsYXRlPD4Kc3RydWN0IGdldF9jbGFzczwwPiB7CiAgdGVtcGxhdGU8Y2xhc3MgUkVU LCBjbGFzcyBIVCwgY2xhc3MgVFQ+CiAgaW5saW5lIHN0YXRpYyBSRVQgZ2V0KGNvbnN0IGNvbnM8 SFQsIFRUPiYgdCkKICB7CiAgICByZXR1cm4gdC5oZWFkOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBS RVQsIGNsYXNzIEhULCBjbGFzcyBUVD4KICBpbmxpbmUgc3RhdGljIFJFVCBnZXQoY29uczxIVCwg VFQ+JiB0KQogIHsKICAgIHJldHVybiB0LmhlYWQ7CiAgfQp9OwoKfQoKCgoKCgoKdGVtcGxhdGU8 aW50IE4sIGNsYXNzIFQ+CnN0cnVjdCBlbGVtZW50CnsKcHJpdmF0ZToKICB0eXBlZGVmIHR5cGVu YW1lIFQ6OnRhaWxfdHlwZSBOZXh0OwpwdWJsaWM6CiAgdHlwZWRlZiB0eXBlbmFtZSBlbGVtZW50 PE4tMSwgTmV4dD46OnR5cGUgdHlwZTsKfTsKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGVsZW1l bnQ8MCxUPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBUOjpoZWFkX3R5cGUgdHlwZTsKfTsKCnRlbXBs YXRlPGludCBOLCBjbGFzcyBUPgpzdHJ1Y3QgZWxlbWVudDxOLCBjb25zdCBUPgp7CnByaXZhdGU6 CiAgdHlwZWRlZiB0eXBlbmFtZSBUOjp0YWlsX3R5cGUgTmV4dDsKICB0eXBlZGVmIHR5cGVuYW1l IGVsZW1lbnQ8Ti0xLCBOZXh0Pjo6dHlwZSB1bnF1YWxpZmllZF90eXBlOwpwdWJsaWM6CiAgdHlw ZWRlZiB0eXBlbmFtZSBib29zdDo6YWRkX2NvbnN0PHVucXVhbGlmaWVkX3R5cGU+Ojp0eXBlIHR5 cGU7Cn07CnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBlbGVtZW50PDAsY29uc3QgVD4KewogIHR5 cGVkZWYgdHlwZW5hbWUgYm9vc3Q6OmFkZF9jb25zdDx0eXBlbmFtZSBUOjpoZWFkX3R5cGU+Ojp0 eXBlIHR5cGU7Cn07CiMgMTgwICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRh aWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IGFjY2Vzc190cmFp dHMgewogIHR5cGVkZWYgY29uc3QgVCYgY29uc3RfdHlwZTsKICB0eXBlZGVmIFQmIG5vbl9jb25z dF90eXBlOwoKICB0eXBlZGVmIGNvbnN0IHR5cGVuYW1lIGJvb3N0OjpyZW1vdmVfY3Y8VD46OnR5 cGUmIHBhcmFtZXRlcl90eXBlOwoKCgoKCgp9OwoKdGVtcGxhdGUgPGNsYXNzIFQ+IHN0cnVjdCBh Y2Nlc3NfdHJhaXRzPFQmPiB7CgogIHR5cGVkZWYgVCYgY29uc3RfdHlwZTsKICB0eXBlZGVmIFQm IG5vbl9jb25zdF90eXBlOwoKICB0eXBlZGVmIFQmIHBhcmFtZXRlcl90eXBlOwp9OwoKCgp0ZW1w bGF0ZTxpbnQgTiwgY2xhc3MgSFQsIGNsYXNzIFRUPgppbmxpbmUgdHlwZW5hbWUgYWNjZXNzX3Ry YWl0czwKICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4g Pjo6dHlwZQogICAgICAgICAgICAgICAgPjo6bm9uX2NvbnN0X3R5cGUKZ2V0KGNvbnM8SFQsIFRU PiYgYyApIHsKICByZXR1cm4gZGV0YWlsOjpnZXRfY2xhc3M8Tj46OnRlbXBsYXRlCiAgICAgICAg IGdldDwKICAgICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPAogICAgICAgICAgICAgdHlw ZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4gPjo6dHlwZQogICAgICAgICAgID46Om5vbl9j b25zdF90eXBlPihjKTsKfQoKCgoKdGVtcGxhdGU8aW50IE4sIGNsYXNzIEhULCBjbGFzcyBUVD4K aW5saW5lIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8CiAgICAgICAgICAgICAgICAgIHR5cGVuYW1l IGVsZW1lbnQ8TiwgY29uczxIVCwgVFQ+ID46OnR5cGUKICAgICAgICAgICAgICAgID46OmNvbnN0 X3R5cGUKZ2V0KGNvbnN0IGNvbnM8SFQsIFRUPiYgYyApIHsKICByZXR1cm4gZGV0YWlsOjpnZXRf Y2xhc3M8Tj46OnRlbXBsYXRlCiAgICAgICAgIGdldDwKICAgICAgICAgICB0eXBlbmFtZSBhY2Nl c3NfdHJhaXRzPAogICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4g Pjo6dHlwZQogICAgICAgICA+Ojpjb25zdF90eXBlPihjKTsKfQoKCm5hbWVzcGFjZSBkZXRhaWwg ewoKCgoKCgoKdGVtcGxhdGUgPGNsYXNzIFQ+IGNsYXNzIG5vbl9zdG9yZWFibGVfdHlwZSB7CiAg bm9uX3N0b3JlYWJsZV90eXBlKCk7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgVD4gc3RydWN0IHdyYXBf bm9uX3N0b3JlYWJsZV90eXBlIHsKICB0eXBlZGVmIHR5cGVuYW1lIElGPAogICAgOjpib29zdDo6 aXNfZnVuY3Rpb248VD46OnZhbHVlLCBub25fc3RvcmVhYmxlX3R5cGU8VD4sIFQKICA+OjpSRVQg dHlwZTsKfTsKdGVtcGxhdGUgPD4gc3RydWN0IHdyYXBfbm9uX3N0b3JlYWJsZV90eXBlPHZvaWQ+ IHsKICB0eXBlZGVmIG5vbl9zdG9yZWFibGVfdHlwZTx2b2lkPiB0eXBlOwp9OwoKfQoKdGVtcGxh dGUgPGNsYXNzIEhULCBjbGFzcyBUVD4Kc3RydWN0IGNvbnMgewoKICB0eXBlZGVmIEhUIGhlYWRf dHlwZTsKICB0eXBlZGVmIFRUIHRhaWxfdHlwZTsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgZGV0 YWlsOjp3cmFwX25vbl9zdG9yZWFibGVfdHlwZTxoZWFkX3R5cGU+Ojp0eXBlIHN0b3JlZF9oZWFk X3R5cGU7CgogIHN0b3JlZF9oZWFkX3R5cGUgaGVhZDsKICB0YWlsX3R5cGUgdGFpbDsKCiAgdHlw ZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRfaGVhZF90eXBlPjo6bm9uX2NvbnN0X3R5cGUKICBn ZXRfaGVhZCgpIHsgcmV0dXJuIGhlYWQ7IH0KCiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czx0YWls X3R5cGU+Ojpub25fY29uc3RfdHlwZQogIGdldF90YWlsKCkgeyByZXR1cm4gdGFpbDsgfQoKICB0 eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPHN0b3JlZF9oZWFkX3R5cGU+Ojpjb25zdF90eXBlCiAgZ2V0 X2hlYWQoKSBjb25zdCB7IHJldHVybiBoZWFkOyB9CgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8 dGFpbF90eXBlPjo6Y29uc3RfdHlwZQogIGdldF90YWlsKCkgY29uc3QgeyByZXR1cm4gdGFpbDsg fQoKICBjb25zKCkgOiBoZWFkKCksIHRhaWwoKSB7fQoKCgoKCgoKICBjb25zKHR5cGVuYW1lIGFj Y2Vzc190cmFpdHM8c3RvcmVkX2hlYWRfdHlwZT46OnBhcmFtZXRlcl90eXBlIGgsCiAgICAgICBj b25zdCB0YWlsX3R5cGUmIHQpCiAgICA6IGhlYWQgKGgpLCB0YWlsKHQpIHt9CgogIHRlbXBsYXRl IDxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgVDUsCiAgICAg ICAgICAgIGNsYXNzIFQ2LCBjbGFzcyBUNywgY2xhc3MgVDgsIGNsYXNzIFQ5LCBjbGFzcyBUMTA+ CiAgY29ucyggVDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsCiAgICAgICAg VDYmIHQ2LCBUNyYgdDcsIFQ4JiB0OCwgVDkmIHQ5LCBUMTAmIHQxMCApCiAgICA6IGhlYWQgKHQx KSwKICAgICAgdGFpbCAodDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCB0MTAsIGRldGFp bDo6Y251bGwoKSkKICAgICAge30KCiAgdGVtcGxhdGUgPGNsYXNzIFQyLCBjbGFzcyBUMywgY2xh c3MgVDQsIGNsYXNzIFQ1LAogICAgICAgICAgICBjbGFzcyBUNiwgY2xhc3MgVDcsIGNsYXNzIFQ4 LCBjbGFzcyBUOSwgY2xhc3MgVDEwPgogIGNvbnMoIGNvbnN0IG51bGxfdHlwZSYgdDEsIFQyJiB0 MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwKICAgICAgICBUNiYgdDYsIFQ3JiB0NywgVDgmIHQ4 LCBUOSYgdDksIFQxMCYgdDEwICkKICAgIDogaGVhZCAoKSwKICAgICAgdGFpbCAodDIsIHQzLCB0 NCwgdDUsIHQ2LCB0NywgdDgsIHQ5LCB0MTAsIGRldGFpbDo6Y251bGwoKSkKICAgICAge30KCgog IHRlbXBsYXRlIDxjbGFzcyBIVDIsIGNsYXNzIFRUMj4KICBjb25zKCBjb25zdCBjb25zPEhUMiwg VFQyPiYgdSApIDogaGVhZCh1LmhlYWQpLCB0YWlsKHUudGFpbCkge30KCiAgdGVtcGxhdGUgPGNs YXNzIEhUMiwgY2xhc3MgVFQyPgogIGNvbnMmIG9wZXJhdG9yPSggY29uc3QgY29uczxIVDIsIFRU Mj4mIHUgKSB7CiAgICBoZWFkPXUuaGVhZDsgdGFpbD11LnRhaWw7IHJldHVybiAqdGhpczsKICB9 CgoKCiAgY29ucyYgb3BlcmF0b3I9KGNvbnN0IGNvbnMmIHUpIHsKICAgIGhlYWQgPSB1LmhlYWQ7 IHRhaWwgPSB1LnRhaWw7IHJldHVybiAqdGhpczsKICB9CgogIHRlbXBsYXRlIDxjbGFzcyBUMSwg Y2xhc3MgVDI+CiAgY29ucyYgb3BlcmF0b3I9KCBjb25zdCBzdGQ6OnBhaXI8VDEsIFQyPiYgdSAp IHsKICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29z dDo6U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIGxlbmd0aDxjb25zPjo6dmFsdWUg PT0gMiApID4pPiBib29zdF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfMzIzOwogICAgaGVhZCA9IHUu Zmlyc3Q7IHRhaWwuaGVhZCA9IHUuc2Vjb25kOyByZXR1cm4gKnRoaXM7CiAgfQoKCiAgdGVtcGxh dGUgPGludCBOPgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8CiAgICAgICAgICAgICB0eXBlbmFt ZSBlbGVtZW50PE4sIGNvbnM8SFQsIFRUPiA+Ojp0eXBlCiAgICAgICAgICAgPjo6bm9uX2NvbnN0 X3R5cGUKICBnZXQoKSB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxlczo6Z2V0PE4+KCp0aGlzKTsK ICB9CgogIHRlbXBsYXRlIDxpbnQgTj4KICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPAogICAgICAg ICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBjb25zPEhULCBUVD4gPjo6dHlwZQogICAgICAgICAg ID46OmNvbnN0X3R5cGUKICBnZXQoKSBjb25zdCB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxlczo6 Z2V0PE4+KCp0aGlzKTsKICB9Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgSFQ+CnN0cnVjdCBjb25zPEhU LCBudWxsX3R5cGU+IHsKCiAgdHlwZWRlZiBIVCBoZWFkX3R5cGU7CiAgdHlwZWRlZiBudWxsX3R5 cGUgdGFpbF90eXBlOwogIHR5cGVkZWYgY29uczxIVCwgbnVsbF90eXBlPiBzZWxmX3R5cGU7Cgog IHR5cGVkZWYgdHlwZW5hbWUKICAgIGRldGFpbDo6d3JhcF9ub25fc3RvcmVhYmxlX3R5cGU8aGVh ZF90eXBlPjo6dHlwZSBzdG9yZWRfaGVhZF90eXBlOwogIHN0b3JlZF9oZWFkX3R5cGUgaGVhZDsK CiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRfaGVhZF90eXBlPjo6bm9uX2NvbnN0X3R5 cGUKICBnZXRfaGVhZCgpIHsgcmV0dXJuIGhlYWQ7IH0KCiAgbnVsbF90eXBlIGdldF90YWlsKCkg eyByZXR1cm4gbnVsbF90eXBlKCk7IH0KCiAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxzdG9yZWRf aGVhZF90eXBlPjo6Y29uc3RfdHlwZQogIGdldF9oZWFkKCkgY29uc3QgeyByZXR1cm4gaGVhZDsg fQoKICBjb25zdCBudWxsX3R5cGUgZ2V0X3RhaWwoKSBjb25zdCB7IHJldHVybiBudWxsX3R5cGUo KTsgfQoKCiAgY29ucygpIDogaGVhZCgpIHt9CgogIGNvbnModHlwZW5hbWUgYWNjZXNzX3RyYWl0 czxzdG9yZWRfaGVhZF90eXBlPjo6cGFyYW1ldGVyX3R5cGUgaCwKICAgICAgIGNvbnN0IG51bGxf dHlwZSYgPSBudWxsX3R5cGUoKSkKICAgIDogaGVhZCAoaCkge30KCiAgdGVtcGxhdGU8Y2xhc3Mg VDE+CiAgY29ucyhUMSYgdDEsIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IG51bGxfdHlwZSYsIGNv bnN0IG51bGxfdHlwZSYsCiAgICAgICBjb25zdCBudWxsX3R5cGUmLCBjb25zdCBudWxsX3R5cGUm LCBjb25zdCBudWxsX3R5cGUmLAogICAgICAgY29uc3QgbnVsbF90eXBlJiwgY29uc3QgbnVsbF90 eXBlJiwgY29uc3QgbnVsbF90eXBlJikKICA6IGhlYWQgKHQxKSB7fQoKICBjb25zKGNvbnN0IG51 bGxfdHlwZSYsCiAgICAgICBjb25zdCBudWxsX3R5cGUmLCBjb25zdCBudWxsX3R5cGUmLCBjb25z dCBudWxsX3R5cGUmLAogICAgICAgY29uc3QgbnVsbF90eXBlJiwgY29uc3QgbnVsbF90eXBlJiwg Y29uc3QgbnVsbF90eXBlJiwKICAgICAgIGNvbnN0IG51bGxfdHlwZSYsIGNvbnN0IG51bGxfdHlw ZSYsIGNvbnN0IG51bGxfdHlwZSYpCiAgOiBoZWFkICgpIHt9CgogIHRlbXBsYXRlIDxjbGFzcyBI VDI+CiAgY29ucyggY29uc3QgY29uczxIVDIsIG51bGxfdHlwZT4mIHUgKSA6IGhlYWQodS5oZWFk KSB7fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgSFQyPgogIGNvbnMmIG9wZXJhdG9yPShjb25zdCBjb25z PEhUMiwgbnVsbF90eXBlPiYgdSApCiAgeyBoZWFkID0gdS5oZWFkOyByZXR1cm4gKnRoaXM7IH0K CgoKICBjb25zJiBvcGVyYXRvcj0oY29uc3QgY29ucyYgdSkgeyBoZWFkID0gdS5oZWFkOyByZXR1 cm4gKnRoaXM7IH0KCiAgdGVtcGxhdGUgPGludCBOPgogIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8 CiAgICAgICAgICAgICB0eXBlbmFtZSBlbGVtZW50PE4sIHNlbGZfdHlwZT46OnR5cGUKICAgICAg ICAgICAgPjo6bm9uX2NvbnN0X3R5cGUKICBnZXQoKSB7CiAgICByZXR1cm4gYm9vc3Q6OnR1cGxl czo6Z2V0PE4+KCp0aGlzKTsKICB9CgogIHRlbXBsYXRlIDxpbnQgTj4KICB0eXBlbmFtZSBhY2Nl c3NfdHJhaXRzPAogICAgICAgICAgICAgdHlwZW5hbWUgZWxlbWVudDxOLCBzZWxmX3R5cGU+Ojp0 eXBlCiAgICAgICAgICAgPjo6Y29uc3RfdHlwZQogIGdldCgpIGNvbnN0IHsKICAgIHJldHVybiBi b29zdDo6dHVwbGVzOjpnZXQ8Tj4oKnRoaXMpOwogIH0KCn07CgoKCnRlbXBsYXRlPGNsYXNzIFQ+ CnN0cnVjdCBsZW5ndGggewogIHN0YXRpYyBjb25zdCBpbnQgdmFsdWUgPSAxICsgbGVuZ3RoPHR5 cGVuYW1lIFQ6OnRhaWxfdHlwZT46OnZhbHVlOwp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgbGVuZ3Ro PHR1cGxlPD4gPiB7CiAgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDA7Cn07Cgp0ZW1wbGF0ZTw+ CnN0cnVjdCBsZW5ndGg8bnVsbF90eXBlPiB7CiAgc3RhdGljIGNvbnN0IGludCB2YWx1ZSA9IDA7 Cn07CgoKbmFtZXNwYWNlIGRldGFpbCB7CgoKdGVtcGxhdGUgPGNsYXNzIFQwLCBjbGFzcyBUMSwg Y2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwKICAgICAgICAgIGNsYXNzIFQ1LCBjbGFzcyBU NiwgY2xhc3MgVDcsIGNsYXNzIFQ4LCBjbGFzcyBUOT4Kc3RydWN0IG1hcF90dXBsZV90b19jb25z CnsKICB0eXBlZGVmIGNvbnM8VDAsCiAgICAgICAgICAgICAgIHR5cGVuYW1lIG1hcF90dXBsZV90 b19jb25zPFQxLCBUMiwgVDMsIFQ0LCBUNSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgVDYsIFQ3LCBUOCwgVDksIG51bGxfdHlwZT46OnR5cGUKICAgICAgICAgICAg ICA+IHR5cGU7Cn07CgoKdGVtcGxhdGUgPD4Kc3RydWN0IG1hcF90dXBsZV90b19jb25zPG51bGxf dHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5 cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZT4KewogIHR5cGVk ZWYgbnVsbF90eXBlIHR5cGU7Cn07Cgp9CgoKCnRlbXBsYXRlIDxjbGFzcyBUMCwgY2xhc3MgVDEs IGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsCiAgICAgICAgICBjbGFzcyBUNSwgY2xhc3Mg VDYsIGNsYXNzIFQ3LCBjbGFzcyBUOCwgY2xhc3MgVDk+CgpjbGFzcyB0dXBsZSA6CiAgcHVibGlj IGRldGFpbDo6bWFwX3R1cGxlX3RvX2NvbnM8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3 LCBUOCwgVDk+Ojp0eXBlCnsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGRldGFpbDo6 bWFwX3R1cGxlX3RvX2NvbnM8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOCwgVDk+ Ojp0eXBlIGluaGVyaXRlZDsKICB0eXBlZGVmIHR5cGVuYW1lIGluaGVyaXRlZDo6aGVhZF90eXBl IGhlYWRfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGluaGVyaXRlZDo6dGFpbF90eXBlIHRhaWxf dHlwZTsKCgoKICB0dXBsZSgpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+ OjpwYXJhbWV0ZXJfdHlwZSB0MCkKICAgIDogaW5oZXJpdGVkKHQwLCBkZXRhaWw6OmNudWxsKCks IGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWls OjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAg ICAgIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9 CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwK ICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEpCiAg ICA6IGluaGVyaXRlZCh0MCwgdDEsIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAog ICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6 Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgp LCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+ OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6 cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBh cmFtZXRlcl90eXBlIHQyKQogICAgOiBpbmhlcml0ZWQodDAsIHQxLCB0MiwgZGV0YWlsOjpjbnVs bCgpLCBkZXRhaWw6OmNudWxsKCksCiAgICAgICAgICAgICAgICBkZXRhaWw6OmNudWxsKCksIGRl dGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpj bnVsbCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFp dHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz PFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxU Mj46OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+ OjpwYXJhbWV0ZXJfdHlwZSB0MykKICAgIDogaW5oZXJpdGVkKHQwLCB0MSwgdDIsIHQzLCBkZXRh aWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251 bGwoKSwgZGV0YWlsOjpjbnVsbCgpLCBkZXRhaWw6OmNudWxsKCksCiAgICAgICAgICAgICAgICBk ZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+Ojpw YXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFy YW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBhcmFt ZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+OjpwYXJhbWV0 ZXJfdHlwZSB0MywKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFyYW1ldGVy X3R5cGUgdDQpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0MywgdDQsIGRldGFpbDo6Y251 bGwoKSwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVsbCgpLCBk ZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSkge30KCiAgdHVwbGUodHlwZW5hbWUgYWNj ZXNzX3RyYWl0czxUMD46OnBhcmFtZXRlcl90eXBlIHQwLAogICAgICAgIHR5cGVuYW1lIGFjY2Vz c190cmFpdHM8VDE+OjpwYXJhbWV0ZXJfdHlwZSB0MSwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3Nf dHJhaXRzPFQyPjo6cGFyYW1ldGVyX3R5cGUgdDIsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3Ry YWl0czxUMz46OnBhcmFtZXRlcl90eXBlIHQzLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFp dHM8VDQ+OjpwYXJhbWV0ZXJfdHlwZSB0NCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz PFQ1Pjo6cGFyYW1ldGVyX3R5cGUgdDUpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0Mywg dDQsIHQ1LCBkZXRhaWw6OmNudWxsKCksIGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAg IGRldGFpbDo6Y251bGwoKSwgZGV0YWlsOjpjbnVsbCgpKSB7fQoKICB0dXBsZSh0eXBlbmFtZSBh Y2Nlc3NfdHJhaXRzPFQwPjo6cGFyYW1ldGVyX3R5cGUgdDAsCiAgICAgICAgdHlwZW5hbWUgYWNj ZXNzX3RyYWl0czxUMT46OnBhcmFtZXRlcl90eXBlIHQxLAogICAgICAgIHR5cGVuYW1lIGFjY2Vz c190cmFpdHM8VDI+OjpwYXJhbWV0ZXJfdHlwZSB0MiwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3Nf dHJhaXRzPFQzPjo6cGFyYW1ldGVyX3R5cGUgdDMsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3Ry YWl0czxUND46OnBhcmFtZXRlcl90eXBlIHQ0LAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFp dHM8VDU+OjpwYXJhbWV0ZXJfdHlwZSB0NSwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRz PFQ2Pjo6cGFyYW1ldGVyX3R5cGUgdDYpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0Mywg dDQsIHQ1LCB0NiwgZGV0YWlsOjpjbnVsbCgpLAogICAgICAgICAgICAgICAgZGV0YWlsOjpjbnVs bCgpLCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8 VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQx Pjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46 OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+Ojpw YXJhbWV0ZXJfdHlwZSB0MywKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFy YW1ldGVyX3R5cGUgdDQsCiAgICAgICAgdHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUNT46OnBhcmFt ZXRlcl90eXBlIHQ1LAogICAgICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDY+OjpwYXJhbWV0 ZXJfdHlwZSB0NiwKICAgICAgICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQ3Pjo6cGFyYW1ldGVy X3R5cGUgdDcpCiAgICA6IGluaGVyaXRlZCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcs IGRldGFpbDo6Y251bGwoKSwKICAgICAgICAgICAgICAgIGRldGFpbDo6Y251bGwoKSkge30KCiAg dHVwbGUodHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMD46OnBhcmFtZXRlcl90eXBlIHQwLAogICAg ICAgIHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDE+OjpwYXJhbWV0ZXJfdHlwZSB0MSwKICAgICAg ICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQyPjo6cGFyYW1ldGVyX3R5cGUgdDIsCiAgICAgICAg dHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMz46OnBhcmFtZXRlcl90eXBlIHQzLAogICAgICAgIHR5 cGVuYW1lIGFjY2Vzc190cmFpdHM8VDQ+OjpwYXJhbWV0ZXJfdHlwZSB0NCwKICAgICAgICB0eXBl bmFtZSBhY2Nlc3NfdHJhaXRzPFQ1Pjo6cGFyYW1ldGVyX3R5cGUgdDUsCiAgICAgICAgdHlwZW5h bWUgYWNjZXNzX3RyYWl0czxUNj46OnBhcmFtZXRlcl90eXBlIHQ2LAogICAgICAgIHR5cGVuYW1l IGFjY2Vzc190cmFpdHM8VDc+OjpwYXJhbWV0ZXJfdHlwZSB0NywKICAgICAgICB0eXBlbmFtZSBh Y2Nlc3NfdHJhaXRzPFQ4Pjo6cGFyYW1ldGVyX3R5cGUgdDgpCiAgICA6IGluaGVyaXRlZCh0MCwg dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCBkZXRhaWw6OmNudWxsKCkpIHt9CgogIHR1 cGxlKHR5cGVuYW1lIGFjY2Vzc190cmFpdHM8VDA+OjpwYXJhbWV0ZXJfdHlwZSB0MCwKICAgICAg ICB0eXBlbmFtZSBhY2Nlc3NfdHJhaXRzPFQxPjo6cGFyYW1ldGVyX3R5cGUgdDEsCiAgICAgICAg dHlwZW5hbWUgYWNjZXNzX3RyYWl0czxUMj46OnBhcmFtZXRlcl90eXBlIHQyLAogICAgICAgIHR5 cGVuYW1lIGFjY2Vzc190cmFpdHM8VDM+OjpwYXJhbWV0ZXJfdHlwZSB0MywKICAgICAgICB0eXBl bmFtZSBhY2Nlc3NfdHJhaXRzPFQ0Pjo6cGFyYW1ldGVyX3R5cGUgdDQsCiAgICAgICAgdHlwZW5h bWUgYWNjZXNzX3RyYWl0czxUNT46OnBhcmFtZXRlcl90eXBlIHQ1LAogICAgICAgIHR5cGVuYW1l IGFjY2Vzc190cmFpdHM8VDY+OjpwYXJhbWV0ZXJfdHlwZSB0NiwKICAgICAgICB0eXBlbmFtZSBh Y2Nlc3NfdHJhaXRzPFQ3Pjo6cGFyYW1ldGVyX3R5cGUgdDcsCiAgICAgICAgdHlwZW5hbWUgYWNj ZXNzX3RyYWl0czxUOD46OnBhcmFtZXRlcl90eXBlIHQ4LAogICAgICAgIHR5cGVuYW1lIGFjY2Vz c190cmFpdHM8VDk+OjpwYXJhbWV0ZXJfdHlwZSB0OSkKICAgIDogaW5oZXJpdGVkKHQwLCB0MSwg dDIsIHQzLCB0NCwgdDUsIHQ2LCB0NywgdDgsIHQ5KSB7fQoKCiAgdGVtcGxhdGU8Y2xhc3MgVTEs IGNsYXNzIFUyPgogIHR1cGxlKGNvbnN0IGNvbnM8VTEsIFUyPiYgcCkgOiBpbmhlcml0ZWQocCkg e30KCiAgdGVtcGxhdGUgPGNsYXNzIFUxLCBjbGFzcyBVMj4KICB0dXBsZSYgb3BlcmF0b3I9KGNv bnN0IGNvbnM8VTEsIFUyPiYgaykgewogICAgaW5oZXJpdGVkOjpvcGVyYXRvcj0oayk7CiAgICBy ZXR1cm4gKnRoaXM7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgVTEsIGNsYXNzIFUyPgogIHR1cGxl JiBvcGVyYXRvcj0oY29uc3Qgc3RkOjpwYWlyPFUxLCBVMj4mIGspIHsKICAgIHR5cGVkZWYgOjpi b29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6U1RBVElDX0FTU0VSVElP Tl9GQUlMVVJFPCAoYm9vbCkoIGxlbmd0aDx0dXBsZT46OnZhbHVlID09IDIgKSA+KT4gYm9vc3Rf c3RhdGljX2Fzc2VydF90eXBlZGVmXzU3MTsKICAgIHRoaXMtPmhlYWQgPSBrLmZpcnN0OwogICAg dGhpcy0+dGFpbC5oZWFkID0gay5zZWNvbmQ7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKfTsKCgp0 ZW1wbGF0ZSA8PgpjbGFzcyB0dXBsZTxudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBu dWxsX3R5cGUsIG51bGxfdHlwZSwgbnVsbF90eXBlLCBudWxsX3R5cGUsIG51bGxfdHlwZSwgbnVs bF90eXBlLCBudWxsX3R5cGU+IDoKICBwdWJsaWMgbnVsbF90eXBlCnsKcHVibGljOgogIHR5cGVk ZWYgbnVsbF90eXBlIGluaGVyaXRlZDsKfTsKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgpzdHJ1Y3Qg c3dhbGxvd19hc3NpZ24gewoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgogIHN3YWxsb3dfYXNzaWdu JiBvcGVyYXRvcj0oY29uc3QgVCYpIHsKICAgIHJldHVybiAqdGhpczsKICB9Cn07Cgp9CgoKbmFt ZXNwYWNlIHsKIGRldGFpbDo6c3dhbGxvd19hc3NpZ24gaWdub3JlOwp9CiMgNjI0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC90dXBsZS9kZXRhaWwvdHVwbGVfYmFzaWMuaHBwIgp0ZW1wbGF0 ZTxjbGFzcyBUPgpzdHJ1Y3QgbWFrZV90dXBsZV90cmFpdHMgewogIHR5cGVkZWYgVCB0eXBlOwoK CgoKCgoKfTsKIyA2NDggIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxlL2RldGFpbC90 dXBsZV9iYXNpYy5ocHAiCnRlbXBsYXRlPGNsYXNzIFQ+CnN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0 czxUJj4gewogIHR5cGVkZWYgdHlwZW5hbWUKICAgICBkZXRhaWw6OmdlbmVyYXRlX2Vycm9yPFQm Pjo6CiAgICAgICBkb19ub3RfdXNlX3dpdGhfcmVmZXJlbmNlX3R5cGUgZXJyb3I7Cn07CgoKCgoK dGVtcGxhdGU8Y2xhc3MgVCwgaW50IG4+IHN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0cyA8VFtuXT4g ewogIHR5cGVkZWYgY29uc3QgVCAoJnR5cGUpW25dOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVCwgaW50 IG4+CnN0cnVjdCBtYWtlX3R1cGxlX3RyYWl0czxjb25zdCBUW25dPiB7CiAgdHlwZWRlZiBjb25z dCBUICgmdHlwZSlbbl07Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBULCBpbnQgbj4gc3RydWN0IG1ha2Vf dHVwbGVfdHJhaXRzPHZvbGF0aWxlIFRbbl0+IHsKICB0eXBlZGVmIGNvbnN0IHZvbGF0aWxlIFQg KCZ0eXBlKVtuXTsKfTsKCnRlbXBsYXRlPGNsYXNzIFQsIGludCBuPgpzdHJ1Y3QgbWFrZV90dXBs ZV90cmFpdHM8Y29uc3Qgdm9sYXRpbGUgVFtuXT4gewogIHR5cGVkZWYgY29uc3Qgdm9sYXRpbGUg VCAoJnR5cGUpW25dOwp9OwoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IG1ha2VfdHVwbGVfdHJh aXRzPHJlZmVyZW5jZV93cmFwcGVyPFQ+ID57CiAgdHlwZWRlZiBUJiB0eXBlOwp9OwoKdGVtcGxh dGU8Y2xhc3MgVD4Kc3RydWN0IG1ha2VfdHVwbGVfdHJhaXRzPGNvbnN0IHJlZmVyZW5jZV93cmFw cGVyPFQ+ID57CiAgdHlwZWRlZiBUJiB0eXBlOwp9OwoKCgoKbmFtZXNwYWNlIGRldGFpbCB7CgoK CnRlbXBsYXRlIDwKICBjbGFzcyBUMCA9IG51bGxfdHlwZSwgY2xhc3MgVDEgPSBudWxsX3R5cGUs IGNsYXNzIFQyID0gbnVsbF90eXBlLAogIGNsYXNzIFQzID0gbnVsbF90eXBlLCBjbGFzcyBUNCA9 IG51bGxfdHlwZSwgY2xhc3MgVDUgPSBudWxsX3R5cGUsCiAgY2xhc3MgVDYgPSBudWxsX3R5cGUs IGNsYXNzIFQ3ID0gbnVsbF90eXBlLCBjbGFzcyBUOCA9IG51bGxfdHlwZSwKICBjbGFzcyBUOSA9 IG51bGxfdHlwZQo+CnN0cnVjdCBtYWtlX3R1cGxlX21hcHBlciB7CiAgdHlwZWRlZgogICAgdHVw bGU8dHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDA+Ojp0eXBlLAogICAgICAgICAgdHlwZW5h bWUgbWFrZV90dXBsZV90cmFpdHM8VDE+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90 dXBsZV90cmFpdHM8VDI+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFp dHM8VDM+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDQ+Ojp0 eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDU+Ojp0eXBlLAogICAg ICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDY+Ojp0eXBlLAogICAgICAgICAgdHlw ZW5hbWUgbWFrZV90dXBsZV90cmFpdHM8VDc+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFr ZV90dXBsZV90cmFpdHM8VDg+Ojp0eXBlLAogICAgICAgICAgdHlwZW5hbWUgbWFrZV90dXBsZV90 cmFpdHM8VDk+Ojp0eXBlPiB0eXBlOwp9OwoKfQoKCmlubGluZSB0dXBsZTw+IG1ha2VfdHVwbGUo KSB7CiAgcmV0dXJuIHR1cGxlPD4oKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDA+CmlubGluZSB0eXBl bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyPFQwPjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0 IFQwJiB0MCkgewogIHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxU MD46OnR5cGUgdDsKICByZXR1cm4gdCh0MCk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBU MT4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxPjo6dHlw ZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxKSB7CiAgdHlwZWRlZiB0eXBl bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyPFQwLCBUMT46OnR5cGUgdDsKICByZXR1cm4g dCh0MCwgdDEpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNzIFQyPgppbmxp bmUgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyPjo6dHlwZQpt YWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIpIHsKICB0 eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMj46OnR5 cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyKTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDAsIGNsYXNz IFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CmlubGluZSB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVw bGVfbWFwcGVyPFQwLCBUMSwgVDIsIFQzPjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwg Y29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MykgewogIHR5cGVkZWYgdHlw ZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyLCBUMz46OnR5cGUgdDsK ICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0Myk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBU MSwgY2xhc3MgVDIsIGNsYXNzIFQzLCBjbGFzcyBUND4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6 bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMiwgVDMsIFQ0Pjo6dHlwZQptYWtlX3R1cGxlKGNv bnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAg ICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0KSB7CiAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6 Om1ha2VfdHVwbGVfbWFwcGVyPFQwLCBUMSwgVDIsIFQzLCBUND46OnR5cGUgdDsKICByZXR1cm4g dCh0MCwgdDEsIHQyLCB0MywgdDQpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3MgVDEsIGNs YXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1PgppbmxpbmUgdHlwZW5hbWUgZGV0 YWlsOjptYWtlX3R1cGxlX21hcHBlcjxUMCwgVDEsIFQyLCBUMywgVDQsIFQ1Pjo6dHlwZQptYWtl X3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQz JiB0MywKICAgICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUpIHsKICB0 eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBUMiwgVDMs IFQ0LCBUNT46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1KTsKfQoK dGVtcGxhdGU8Y2xhc3MgVDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0 LCBjbGFzcyBUNSwgY2xhc3MgVDY+CmlubGluZSB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVf bWFwcGVyPFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0 IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAg ICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0Nikgewog IHR5cGVkZWYgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcgogICAgICAgICAgIDxU MCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNj46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQy LCB0MywgdDQsIHQ1LCB0Nik7Cn0KCnRlbXBsYXRlPGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3Mg VDIsIGNsYXNzIFQzLCBjbGFzcyBUNCwgY2xhc3MgVDUsIGNsYXNzIFQ2LAogICAgICAgICBjbGFz cyBUNz4KaW5saW5lIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXI8VDAsIFQxLCBU MiwgVDMsIFQ0LCBUNSwgVDYsIFQ3Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29u c3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAgICAgICAgICAgICAg Y29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3KSB7 CiAgdHlwZWRlZiB0eXBlbmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyCiAgICAgICAgICAg PFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUsIFQ2LCBUNz46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwg dDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMCwgY2xhc3Mg VDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1LCBjbGFzcyBUNiwKICAg ICAgICAgY2xhc3MgVDcsIGNsYXNzIFQ4PgppbmxpbmUgdHlwZW5hbWUgZGV0YWlsOjptYWtlX3R1 cGxlX21hcHBlcgogIDxUMCwgVDEsIFQyLCBUMywgVDQsIFQ1LCBUNiwgVDcsIFQ4Pjo6dHlwZQpt YWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEmIHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0 IFQzJiB0MywKICAgICAgICAgICAgICAgICAgY29uc3QgVDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNv bnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3LAogICAgICAgICAgICAgICAgICBjb25zdCBUOCYgdDgp IHsKICB0eXBlZGVmIHR5cGVuYW1lIGRldGFpbDo6bWFrZV90dXBsZV9tYXBwZXIKICAgICAgICAg ICA8VDAsIFQxLCBUMiwgVDMsIFQ0LCBUNSwgVDYsIFQ3LCBUOD46OnR5cGUgdDsKICByZXR1cm4g dCh0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KTsKfQoKdGVtcGxhdGU8Y2xhc3Mg VDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xh c3MgVDYsCiAgICAgICAgIGNsYXNzIFQ3LCBjbGFzcyBUOCwgY2xhc3MgVDk+CmlubGluZSB0eXBl bmFtZSBkZXRhaWw6Om1ha2VfdHVwbGVfbWFwcGVyCiAgPFQwLCBUMSwgVDIsIFQzLCBUNCwgVDUs IFQ2LCBUNywgVDgsIFQ5Pjo6dHlwZQptYWtlX3R1cGxlKGNvbnN0IFQwJiB0MCwgY29uc3QgVDEm IHQxLCBjb25zdCBUMiYgdDIsIGNvbnN0IFQzJiB0MywKICAgICAgICAgICAgICAgICAgY29uc3Qg VDQmIHQ0LCBjb25zdCBUNSYgdDUsIGNvbnN0IFQ2JiB0NiwgY29uc3QgVDcmIHQ3LAogICAgICAg ICAgICAgICAgICBjb25zdCBUOCYgdDgsIGNvbnN0IFQ5JiB0OSkgewogIHR5cGVkZWYgdHlwZW5h bWUgZGV0YWlsOjptYWtlX3R1cGxlX21hcHBlcgogICAgICAgICAgIDxUMCwgVDEsIFQyLCBUMywg VDQsIFQ1LCBUNiwgVDcsIFQ4LCBUOT46OnR5cGUgdDsKICByZXR1cm4gdCh0MCwgdDEsIHQyLCB0 MywgdDQsIHQ1LCB0NiwgdDcsIHQ4LCB0OSk7Cn0KCgoKCnRlbXBsYXRlPGNsYXNzIFQxPgppbmxp bmUgdHVwbGU8VDEmPiB0aWUoVDEmIHQxKSB7CiAgcmV0dXJuIHR1cGxlPFQxJj4gKHQxKTsKfQoK dGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyPgppbmxpbmUgdHVwbGU8VDEmLCBUMiY+IHRpZShU MSYgdDEsIFQyJiB0MikgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJj4gKHQxLCB0Mik7Cn0KCnRl bXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDM+CmlubGluZSB0dXBsZTxUMSYsIFQy JiwgVDMmPiB0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0MykgewogIHJldHVybiB0dXBsZTxUMSYs IFQyJiwgVDMmPiAodDEsIHQyLCB0Myk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwg Y2xhc3MgVDMsIGNsYXNzIFQ0PgppbmxpbmUgdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmPiB0aWUo VDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0KSB7CiAgcmV0dXJuIHR1cGxlPFQxJiwgVDIm LCBUMyYsIFQ0Jj4gKHQxLCB0MiwgdDMsIHQ0KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNz IFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1PgppbmxpbmUgdHVwbGU8VDEmLCBUMiYs IFQzJiwgVDQmLCBUNSY+CnRpZShUMSYgdDEsIFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0 NSkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1Jj4gKHQxLCB0MiwgdDMs IHQ0LCB0NSk7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNz IFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDY+CmlubGluZSB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYs IFQ1JiwgVDYmPgp0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsIFQ2 JiB0NikgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1JiwgVDYmPiAodDEs IHQyLCB0MywgdDQsIHQ1LCB0Nik7Cn0KCnRlbXBsYXRlPGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xh c3MgVDMsIGNsYXNzIFQ0LCBjbGFzcyBUNSwgY2xhc3MgVDYsIGNsYXNzIFQ3PgppbmxpbmUgdHVw bGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBUNSYsIFQ2JiwgVDcmPgp0aWUoVDEmIHQxLCBUMiYgdDIs IFQzJiB0MywgVDQmIHQ0LCBUNSYgdDUsIFQ2JiB0NiwgVDcmIHQ3KSB7CiAgcmV0dXJuIHR1cGxl PFQxJiwgVDImLCBUMyYsIFQ0JiwgVDUmLCBUNiYsIFQ3Jj4gKHQxLCB0MiwgdDMsIHQ0LCB0NSwg dDYsIHQ3KTsKfQoKdGVtcGxhdGU8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3Mg VDQsIGNsYXNzIFQ1LCBjbGFzcyBUNiwgY2xhc3MgVDcsCiAgICAgICAgIGNsYXNzIFQ4Pgppbmxp bmUgdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBUNSYsIFQ2JiwgVDcmLCBUOCY+CnRpZShUMSYg dDEsIFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwgVDYmIHQ2LCBUNyYgdDcsIFQ4JiB0 OCkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1JiwgVDYmLCBUNyYsIFQ4 Jj4KICAgICAgICAgICAodDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIHQ4KTsKfQoKdGVtcGxh dGU8Y2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMywgY2xhc3MgVDQsIGNsYXNzIFQ1LCBjbGFz cyBUNiwgY2xhc3MgVDcsCiAgICAgICAgIGNsYXNzIFQ4LCBjbGFzcyBUOT4KaW5saW5lIHR1cGxl PFQxJiwgVDImLCBUMyYsIFQ0JiwgVDUmLCBUNiYsIFQ3JiwgVDgmLCBUOSY+CnRpZShUMSYgdDEs IFQyJiB0MiwgVDMmIHQzLCBUNCYgdDQsIFQ1JiB0NSwgVDYmIHQ2LCBUNyYgdDcsIFQ4JiB0OCwK ICAgICAgICAgICBUOSYgdDkpIHsKICByZXR1cm4gdHVwbGU8VDEmLCBUMiYsIFQzJiwgVDQmLCBU NSYsIFQ2JiwgVDcmLCBUOCYsIFQ5Jj4KICAgICAgICAgICAgKHQxLCB0MiwgdDMsIHQ0LCB0NSwg dDYsIHQ3LCB0OCwgdDkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBUMSwgY2xhc3MgVDIsIGNsYXNzIFQz LCBjbGFzcyBUNCwgY2xhc3MgVDUsIGNsYXNzIFQ2LCBjbGFzcyBUNywKICAgICAgICAgY2xhc3Mg VDgsIGNsYXNzIFQ5LCBjbGFzcyBUMTA+CmlubGluZSB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYs IFQ1JiwgVDYmLCBUNyYsIFQ4JiwgVDkmLCBUMTAmPgp0aWUoVDEmIHQxLCBUMiYgdDIsIFQzJiB0 MywgVDQmIHQ0LCBUNSYgdDUsIFQ2JiB0NiwgVDcmIHQ3LCBUOCYgdDgsCiAgICAgICAgICAgVDkm IHQ5LCBUMTAmIHQxMCkgewogIHJldHVybiB0dXBsZTxUMSYsIFQyJiwgVDMmLCBUNCYsIFQ1Jiwg VDYmLCBUNyYsIFQ4JiwgVDkmLCBUMTAmPgogICAgICAgICAgICh0MSwgdDIsIHQzLCB0NCwgdDUs IHQ2LCB0NywgdDgsIHQ5LCB0MTApOwp9Cgp9Cn0KIyAzOSAiL3Vzci9sb2NhbC9zcmMvYm9vc3Qv Ym9vc3QvdHVwbGUvdHVwbGUuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7Cgp1c2luZyB0dXBs ZXM6OnR1cGxlOwp1c2luZyB0dXBsZXM6Om1ha2VfdHVwbGU7CnVzaW5nIHR1cGxlczo6dGllOwoK dXNpbmcgdHVwbGVzOjpnZXQ7CiMgOTIgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R1cGxl L3R1cGxlLmhwcCIKfQojIDI4ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o cHAiIDIKCgojIDEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDEKIyAxMiAi Li4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKIyAxICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19jbGFzcy5ocHAiIDEKIyAyMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIgojIDEgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX3NjYWxhci5ocHAiIDEKIyAyMSAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFyLmhwcCIKIyAxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9kZWYu aHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFp bC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlw ZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5ocHAi IDIKIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfc2NhbGFy LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsKCm5hbWVzcGFjZSBkZXRhaWwgewoKdGVtcGxhdGUg PHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19zY2FsYXJfaW1wbAp7CiAgIHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gKDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfb3I8IDo6Ym9vc3Q6OmlzX2FyaXRo bWV0aWM8VD46OnZhbHVlLCA6OmJvb3N0Ojppc19lbnVtPFQ+Ojp2YWx1ZSwgOjpib29zdDo6aXNf cG9pbnRlcjxUPjo6dmFsdWUsIDo6Ym9vc3Q6OmlzX21lbWJlcl9wb2ludGVyPFQ+Ojp2YWx1ZSA+ Ojp2YWx1ZSk7CgoKCgoKCn07CgoKCnRlbXBsYXRlIDw+IHN0cnVjdCBpc19zY2FsYXJfaW1wbDx2 b2lkPnsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUgPSBmYWxzZTsgfTsKCnRlbXBsYXRlIDw+IHN0 cnVjdCBpc19zY2FsYXJfaW1wbDx2b2lkIGNvbnN0Pnsgc3RhdGljIGNvbnN0IGJvb2wgdmFsdWUg PSBmYWxzZTsgfTsKdGVtcGxhdGUgPD4gc3RydWN0IGlzX3NjYWxhcl9pbXBsPHZvaWQgdm9sYXRp bGU+eyBzdGF0aWMgY29uc3QgYm9vbCB2YWx1ZSA9IGZhbHNlOyB9Owp0ZW1wbGF0ZSA8PiBzdHJ1 Y3QgaXNfc2NhbGFyX2ltcGw8dm9pZCBjb25zdCB2b2xhdGlsZT57IHN0YXRpYyBjb25zdCBib29s IHZhbHVlID0gZmFsc2U7IH07CgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1Y3QgaXNf c2NhbGFyIDogbXBsOjpib29sXzwgOjpib29zdDo6ZGV0YWlsOjppc19zY2FsYXJfaW1wbDxUPjo6 dmFsdWUgPiB7IH07Cgp9CgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJh aXRzL2RldGFpbC9ib29sX3RyYWl0X3VuZGVmLmhwcCIgMQojIDU1ICIvdXNyL2xvY2FsL3NyYy9i b29zdC9ib29zdC90eXBlX3RyYWl0cy9pc19zY2FsYXIuaHBwIiAyCiMgMjIgIi91c3IvbG9jYWwv c3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIgMgoKCgoKCgoKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBlX3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF9k ZWYuaHBwIiAxCiMgMTkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2Rl dGFpbC9ib29sX3RyYWl0X2RlZi5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv dHlwZV90cmFpdHMvZGV0YWlsL3RlbXBsYXRlX2FyaXR5X3NwZWMuaHBwIiAxCiMgMjAgIi91c3Iv bG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2RldGFpbC9ib29sX3RyYWl0X2RlZi5o cHAiIDIKIyAzMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xh c3MuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewoKbmFtZXNwYWNlIGRldGFpbCB7CiMgNjQgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVfdHJhaXRzL2lzX2NsYXNzLmhwcCIKdGVtcGxh dGUgPHR5cGVuYW1lIFQ+CnN0cnVjdCBpc19jbGFzc19pbXBsCnsKCiAgICBzdGF0aWMgY29uc3Qg Ym9vbCB2YWx1ZSA9ICg6OmJvb3N0Ojp0eXBlX3RyYWl0czo6aWNlX2FuZDwgOjpib29zdDo6dHlw ZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3VuaW9uPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSwg Ojpib29zdDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX3NjYWxhcjxUPjo6dmFs dWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc19h cnJheTxUPjo6dmFsdWUgPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJhaXRzOjppY2Vfbm90PCA6 OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlPjo6dmFsdWUsIDo6Ym9vc3Q6OnR5cGVfdHJh aXRzOjppY2Vfbm90PCA6OmJvb3N0Ojppc192b2lkPFQ+Ojp2YWx1ZSA+Ojp2YWx1ZSwgOjpib29z dDo6dHlwZV90cmFpdHM6OmljZV9ub3Q8IDo6Ym9vc3Q6OmlzX2Z1bmN0aW9uPFQ+Ojp2YWx1ZSA+ Ojp2YWx1ZSA+Ojp2YWx1ZSk7CiMgODcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L3R5cGVf dHJhaXRzL2lzX2NsYXNzLmhwcCIKfTsKCgoKfQoKdGVtcGxhdGU8IHR5cGVuYW1lIFQgPiBzdHJ1 Y3QgaXNfY2xhc3MgOiBtcGw6OmJvb2xfPCA6OmJvb3N0OjpkZXRhaWw6OmlzX2NsYXNzX2ltcGw8 VD46OnZhbHVlID4geyB9OwoKfQoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC90eXBl X3RyYWl0cy9kZXRhaWwvYm9vbF90cmFpdF91bmRlZi5ocHAiIDEKIyA5OCAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvdHlwZV90cmFpdHMvaXNfY2xhc3MuaHBwIiAyCiMgMTMgIi4uLy4uLy4u L2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDIKCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2lvc2Z3ZCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lv c2Z3ZCIgMwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdHJpbmdmd2Qu aCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RyaW5nZndkLmgi IDMKCgoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8Y2xhc3MgX0NoYXJUPgogICAgc3RydWN0 IGNoYXJfdHJhaXRzOwoKICB0ZW1wbGF0ZTw+IHN0cnVjdCBjaGFyX3RyYWl0czxjaGFyPjsKCiAg dGVtcGxhdGU8PiBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD47CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQWxsb2M+CiAgICBjbGFzcyBhbGxvY2F0b3I7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry aW5nOwoKICB0eXBlZGVmIGJhc2ljX3N0cmluZzxjaGFyPiBzdHJpbmc7CiAgdHlwZWRlZiBiYXNp Y19zdHJpbmc8d2NoYXJfdD4gd3N0cmluZzsKfQojIDQ2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBv cy5oIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9zLmgiIDMK CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9j Kytpby5oIiAxIDMKIyAzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51 eC1nbnUvYml0cy9jKytpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0 ZGlvIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCgoKCgoj IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv c3RkaW8uaCIgMSAzCiMgMzkgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1n bnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2xvY2Fs L2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMK IyA0NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVk ZS9zdGRpby5oIiAyIDMKIyA1NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4 LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCnR5cGVkZWYgc3RydWN0IF9JT19GSUxFIEZJTEU7 CiMgNjQgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkaW8uaCIgMwp0eXBlZGVmIHN0cnVjdCBfSU9fRklMRSBfX0ZJTEU7CiMgNzQgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg MwojIDEgIi91c3IvaW5jbHVkZS9saWJpby5oIiAxIDMKIyAzMiAiL3Vzci9pbmNsdWRlL2xpYmlv LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDEgMwojIDE0ICIvdXNyL2luY2x1 ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGlu dXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMjEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkZGVmLmgiIDMKdHlwZWRlZiB1 bnNpZ25lZCBpbnQgd2ludF90OwojIDE1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoj IDI0ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvd2NoYXIu aCIgMSAzCiMgNDggIi91c3IvaW5jbHVkZS93Y2hhci5oIiAzCiMgMSAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRkZWYuaCIgMSAzCiMgNDkg Ii91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvd2NoYXIu aCIgMSAzCiMgNTEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAyIDMKIyA2NyAiL3Vzci9pbmNsdWRl L3djaGFyLmgiIDMKdHlwZWRlZiBzdHJ1Y3QKewogIGludCBfX2NvdW50OwogIHVuaW9uCiAgewog ICAgd2ludF90IF9fd2NoOwogICAgY2hhciBfX3djaGJbNF07CiAgfSBfX3ZhbHVlOwp9IF9fbWJz dGF0ZV90OwojIDI1ICIvdXNyL2luY2x1ZGUvX0dfY29uZmlnLmgiIDIgMwoKdHlwZWRlZiBzdHJ1 Y3QKewogIF9fb2ZmX3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0ZTsKfSBfR19mcG9zX3Q7 CnR5cGVkZWYgc3RydWN0CnsKICBfX29mZjY0X3QgX19wb3M7CiAgX19tYnN0YXRlX3QgX19zdGF0 ZTsKfSBfR19mcG9zNjRfdDsKIyA0NCAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAzCiMgMSAi L3Vzci9pbmNsdWRlL2djb252LmgiIDEgMwojIDI4ICIvdXNyL2luY2x1ZGUvZ2NvbnYuaCIgMwoj IDEgIi91c3IvaW5jbHVkZS93Y2hhci5oIiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgi IDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNs dWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDI5ICIv dXNyL2luY2x1ZGUvZ2NvbnYuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2 ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzMiAiL3Vzci9pbmNs dWRlL2djb252LmgiIDIgMwoKCgoKCmVudW0KewogIF9fR0NPTlZfT0sgPSAwLAogIF9fR0NPTlZf Tk9DT05WLAogIF9fR0NPTlZfTk9EQiwKICBfX0dDT05WX05PTUVNLAoKICBfX0dDT05WX0VNUFRZ X0lOUFVULAogIF9fR0NPTlZfRlVMTF9PVVRQVVQsCiAgX19HQ09OVl9JTExFR0FMX0lOUFVULAog IF9fR0NPTlZfSU5DT01QTEVURV9JTlBVVCwKCiAgX19HQ09OVl9JTExFR0FMX0RFU0NSSVBUT1Is CiAgX19HQ09OVl9JTlRFUk5BTF9FUlJPUgp9OwoKCgplbnVtCnsKICBfX0dDT05WX0lTX0xBU1Qg PSAweDAwMDEsCiAgX19HQ09OVl9JR05PUkVfRVJST1JTID0gMHgwMDAyCn07CgoKCnN0cnVjdCBf X2djb252X3N0ZXA7CnN0cnVjdCBfX2djb252X3N0ZXBfZGF0YTsKc3RydWN0IF9fZ2NvbnZfbG9h ZGVkX29iamVjdDsKc3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YTsKCgoKdHlwZWRlZiBpbnQgKCpf X2djb252X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKiwgc3RydWN0IF9fZ2NvbnZfc3RlcF9k YXRhICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1bnNpZ25lZCBjaGFyICoq LCBjb25zdCB1bnNpZ25lZCBjaGFyICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBjaGFyICoqLCBzaXplX3QgKiwgaW50LCBpbnQpOwoKCnR5cGVkZWYgaW50ICgqX19nY29u dl9pbml0X2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CnR5cGVkZWYgdm9pZCAoKl9fZ2Nv bnZfZW5kX2ZjdCkgKHN0cnVjdCBfX2djb252X3N0ZXAgKik7CgoKCnR5cGVkZWYgaW50ICgqX19n Y29udl90cmFuc19mY3QpIChzdHJ1Y3QgX19nY29udl9zdGVwICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEgKiwgdm9pZCAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVuc2lnbmVkIGNoYXIgKiwgdW5z aWduZWQgY2hhciAqKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq KTsKCgp0eXBlZGVmIGludCAoKl9fZ2NvbnZfdHJhbnNfY29udGV4dF9mY3QpICh2b2lkICosIGNv bnN0IHVuc2lnbmVkIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgdW5zaWduZWQgY2hhciAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICB1bnNpZ25lZCBjaGFyICosIHVuc2lnbmVkIGNoYXIgKik7CgoKdHlwZWRl ZiBpbnQgKCpfX2djb252X3RyYW5zX3F1ZXJ5X2ZjdCkgKGNvbnN0IGNoYXIgKiwgY29uc3QgY2hh ciAqKiosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgKik7 CgoKdHlwZWRlZiBpbnQgKCpfX2djb252X3RyYW5zX2luaXRfZmN0KSAodm9pZCAqKiwgY29uc3Qg Y2hhciAqKTsKdHlwZWRlZiB2b2lkICgqX19nY29udl90cmFuc19lbmRfZmN0KSAodm9pZCAqKTsK CnN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEKewoKICBfX2djb252X3RyYW5zX2ZjdCBfX3RyYW5z X2ZjdDsKICBfX2djb252X3RyYW5zX2NvbnRleHRfZmN0IF9fdHJhbnNfY29udGV4dF9mY3Q7CiAg X19nY29udl90cmFuc19lbmRfZmN0IF9fdHJhbnNfZW5kX2ZjdDsKICB2b2lkICpfX2RhdGE7CiAg c3RydWN0IF9fZ2NvbnZfdHJhbnNfZGF0YSAqX19uZXh0Owp9OwoKCgpzdHJ1Y3QgX19nY29udl9z dGVwCnsKICBzdHJ1Y3QgX19nY29udl9sb2FkZWRfb2JqZWN0ICpfX3NobGliX2hhbmRsZTsKICBj b25zdCBjaGFyICpfX21vZG5hbWU7CgogIGludCBfX2NvdW50ZXI7CgogIGNoYXIgKl9fZnJvbV9u YW1lOwogIGNoYXIgKl9fdG9fbmFtZTsKCiAgX19nY29udl9mY3QgX19mY3Q7CiAgX19nY29udl9p bml0X2ZjdCBfX2luaXRfZmN0OwogIF9fZ2NvbnZfZW5kX2ZjdCBfX2VuZF9mY3Q7CgoKCiAgaW50 IF9fbWluX25lZWRlZF9mcm9tOwogIGludCBfX21heF9uZWVkZWRfZnJvbTsKICBpbnQgX19taW5f bmVlZGVkX3RvOwogIGludCBfX21heF9uZWVkZWRfdG87CgoKICBpbnQgX19zdGF0ZWZ1bDsKCiAg dm9pZCAqX19kYXRhOwp9OwoKCgpzdHJ1Y3QgX19nY29udl9zdGVwX2RhdGEKewogIHVuc2lnbmVk IGNoYXIgKl9fb3V0YnVmOwogIHVuc2lnbmVkIGNoYXIgKl9fb3V0YnVmZW5kOwoKCgogIGludCBf X2ZsYWdzOwoKCgogIGludCBfX2ludm9jYXRpb25fY291bnRlcjsKCgoKICBpbnQgX19pbnRlcm5h bF91c2U7CgogIF9fbWJzdGF0ZV90ICpfX3N0YXRlcDsKICBfX21ic3RhdGVfdCBfX3N0YXRlOwoK CgogIHN0cnVjdCBfX2djb252X3RyYW5zX2RhdGEgKl9fdHJhbnM7Cn07CgoKCnR5cGVkZWYgc3Ry dWN0IF9fZ2NvbnZfaW5mbwp7CiAgc2l6ZV90IF9fbnN0ZXBzOwogIHN0cnVjdCBfX2djb252X3N0 ZXAgKl9fc3RlcHM7CiAgc3RydWN0IF9fZ2NvbnZfc3RlcF9kYXRhIF9fZGF0YSBbMV07Cn0gKl9f Z2NvbnZfdDsKIyA0NSAiL3Vzci9pbmNsdWRlL19HX2NvbmZpZy5oIiAyIDMKdHlwZWRlZiB1bmlv bgp7CiAgc3RydWN0IF9fZ2NvbnZfaW5mbyBfX2NkOwogIHN0cnVjdAogIHsKICAgIHN0cnVjdCBf X2djb252X2luZm8gX19jZDsKICAgIHN0cnVjdCBfX2djb252X3N0ZXBfZGF0YSBfX2RhdGE7CiAg fSBfX2NvbWJpbmVkOwp9IF9HX2ljb252X3Q7Cgp0eXBlZGVmIGludCBfR19pbnQxNl90IDsKdHlw ZWRlZiBpbnQgX0dfaW50MzJfdCA7CnR5cGVkZWYgdW5zaWduZWQgaW50IF9HX3VpbnQxNl90IDsK dHlwZWRlZiB1bnNpZ25lZCBpbnQgX0dfdWludDMyX3QgOwojIDMzICIvdXNyL2luY2x1ZGUvbGli aW8uaCIgMiAzCiMgNTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCiMgMSAiL3Vzci9sb2NhbC9s aWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcuaCIgMSAzCiMg NDMgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv c3RkYXJnLmgiIDMKdHlwZWRlZiBfX2J1aWx0aW5fdmFfbGlzdCBfX2dudWNfdmFfbGlzdDsKIyA1 NCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgiIDIgMwojIDE2MCAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKc3RydWN0IF9JT19qdW1wX3Q7IHN0cnVjdCBfSU9fRklMRTsKIyAxNzAgIi91c3IvaW5jbHVk ZS9saWJpby5oIiAzCnR5cGVkZWYgdm9pZCBfSU9fbG9ja190OwoKCgoKCnN0cnVjdCBfSU9fbWFy a2VyIHsKICBzdHJ1Y3QgX0lPX21hcmtlciAqX25leHQ7CiAgc3RydWN0IF9JT19GSUxFICpfc2J1 ZjsKCgoKICBpbnQgX3BvczsKIyAxOTMgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCn07CgoKZW51 bSBfX2NvZGVjdnRfcmVzdWx0CnsKICBfX2NvZGVjdnRfb2ssCiAgX19jb2RlY3Z0X3BhcnRpYWws CiAgX19jb2RlY3Z0X2Vycm9yLAogIF9fY29kZWN2dF9ub2NvbnYKfTsKCgoKCnN0cnVjdCBfSU9f Y29kZWN2dAp7CiAgdm9pZCAoKl9fY29kZWN2dF9kZXN0cikgKHN0cnVjdCBfSU9fY29kZWN2dCAq KTsKICBlbnVtIF9fY29kZWN2dF9yZXN1bHQgKCpfX2NvZGVjdnRfZG9fb3V0KSAoc3RydWN0IF9J T19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbWJzdGF0ZV90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICoqLCBjaGFyICosCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2Nv ZGVjdnRfcmVzdWx0ICgqX19jb2RlY3Z0X2RvX3Vuc2hpZnQpIChzdHJ1Y3QgX0lPX2NvZGVjdnQg KiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWJz dGF0ZV90ICosIGNoYXIgKiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoYXIgKiwgY2hhciAqKik7CiAgZW51bSBfX2NvZGVjdnRfcmVzdWx0ICgqX19j b2RlY3Z0X2RvX2luKSAoc3RydWN0IF9JT19jb2RlY3Z0ICosCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19tYnN0YXRlX3QgKiwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICoqLCB3 Y2hhcl90ICosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2No YXJfdCAqLCB3Y2hhcl90ICoqKTsKICBpbnQgKCpfX2NvZGVjdnRfZG9fZW5jb2RpbmcpIChzdHJ1 Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2Fsd2F5c19ub2NvbnYpIChz dHJ1Y3QgX0lPX2NvZGVjdnQgKik7CiAgaW50ICgqX19jb2RlY3Z0X2RvX2xlbmd0aCkgKHN0cnVj dCBfSU9fY29kZWN2dCAqLCBfX21ic3RhdGVfdCAqLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICosIGNvbnN0IGNoYXIgKiwgc2l6ZV90KTsKICBpbnQgKCpfX2NvZGVj dnRfZG9fbWF4X2xlbmd0aCkgKHN0cnVjdCBfSU9fY29kZWN2dCAqKTsKCiAgX0dfaWNvbnZfdCBf X2NkX2luOwogIF9HX2ljb252X3QgX19jZF9vdXQ7Cn07CgoKc3RydWN0IF9JT193aWRlX2RhdGEK ewogIHdjaGFyX3QgKl9JT19yZWFkX3B0cjsKICB3Y2hhcl90ICpfSU9fcmVhZF9lbmQ7CiAgd2No YXJfdCAqX0lPX3JlYWRfYmFzZTsKICB3Y2hhcl90ICpfSU9fd3JpdGVfYmFzZTsKICB3Y2hhcl90 ICpfSU9fd3JpdGVfcHRyOwogIHdjaGFyX3QgKl9JT193cml0ZV9lbmQ7CiAgd2NoYXJfdCAqX0lP X2J1Zl9iYXNlOwogIHdjaGFyX3QgKl9JT19idWZfZW5kOwoKICB3Y2hhcl90ICpfSU9fc2F2ZV9i YXNlOwogIHdjaGFyX3QgKl9JT19iYWNrdXBfYmFzZTsKCiAgd2NoYXJfdCAqX0lPX3NhdmVfZW5k OwoKICBfX21ic3RhdGVfdCBfSU9fc3RhdGU7CiAgX19tYnN0YXRlX3QgX0lPX2xhc3Rfc3RhdGU7 CiAgc3RydWN0IF9JT19jb2RlY3Z0IF9jb2RlY3Z0OwoKICB3Y2hhcl90IF9zaG9ydGJ1ZlsxXTsK CiAgc3RydWN0IF9JT19qdW1wX3QgKl93aWRlX3Z0YWJsZTsKfTsKCgpzdHJ1Y3QgX0lPX0ZJTEUg ewogIGludCBfZmxhZ3M7CgoKCgogIGNoYXIqIF9JT19yZWFkX3B0cjsKICBjaGFyKiBfSU9fcmVh ZF9lbmQ7CiAgY2hhciogX0lPX3JlYWRfYmFzZTsKICBjaGFyKiBfSU9fd3JpdGVfYmFzZTsKICBj aGFyKiBfSU9fd3JpdGVfcHRyOwogIGNoYXIqIF9JT193cml0ZV9lbmQ7CiAgY2hhciogX0lPX2J1 Zl9iYXNlOwogIGNoYXIqIF9JT19idWZfZW5kOwoKICBjaGFyICpfSU9fc2F2ZV9iYXNlOwogIGNo YXIgKl9JT19iYWNrdXBfYmFzZTsKICBjaGFyICpfSU9fc2F2ZV9lbmQ7CgogIHN0cnVjdCBfSU9f bWFya2VyICpfbWFya2VyczsKCiAgc3RydWN0IF9JT19GSUxFICpfY2hhaW47CgogIGludCBfZmls ZW5vOwogIGludCBfYmxrc2l6ZTsKICBfX29mZl90IF9vbGRfb2Zmc2V0OwoKCgogIHVuc2lnbmVk IHNob3J0IF9jdXJfY29sdW1uOwogIHNpZ25lZCBjaGFyIF92dGFibGVfb2Zmc2V0OwogIGNoYXIg X3Nob3J0YnVmWzFdOwoKCgogIF9JT19sb2NrX3QgKl9sb2NrOwojIDMwNSAiL3Vzci9pbmNsdWRl L2xpYmlvLmgiIDMKICBfX29mZjY0X3QgX29mZnNldDsKCgogIHN0cnVjdCBfSU9fY29kZWN2dCAq X2NvZGVjdnQ7CiAgc3RydWN0IF9JT193aWRlX2RhdGEgKl93aWRlX2RhdGE7CgoKCgogIGludCBf bW9kZTsKCiAgY2hhciBfdW51c2VkMlsxNSAqIHNpemVvZiAoaW50KSAtIDIgKiBzaXplb2YgKHZv aWQgKildOwoKfTsKCgoKCgpzdHJ1Y3QgX0lPX0ZJTEVfcGx1czsKCmV4dGVybiBzdHJ1Y3QgX0lP X0ZJTEVfcGx1cyBfSU9fMl8xX3N0ZGluXzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9J T18yXzFfc3Rkb3V0XzsKZXh0ZXJuIHN0cnVjdCBfSU9fRklMRV9wbHVzIF9JT18yXzFfc3RkZXJy XzsKIyAzNDQgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCnR5cGVkZWYgX19zc2l6ZV90IF9faW9f cmVhZF9mbiAodm9pZCAqX19jb29raWUsIGNoYXIgKl9fYnVmLCBzaXplX3QgX19uYnl0ZXMpOwoK CgoKCgoKdHlwZWRlZiBfX3NzaXplX3QgX19pb193cml0ZV9mbiAodm9pZCAqX19jb29raWUsIGNv bnN0IGNoYXIgKl9fYnVmLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3Qg X19uKTsKCgoKCgoKCnR5cGVkZWYgaW50IF9faW9fc2Vla19mbiAodm9pZCAqX19jb29raWUsIF9f b2ZmNjRfdCAqX19wb3MsIGludCBfX3cpOwoKCnR5cGVkZWYgaW50IF9faW9fY2xvc2VfZm4gKHZv aWQgKl9fY29va2llKTsKCgoKCnR5cGVkZWYgX19pb19yZWFkX2ZuIGNvb2tpZV9yZWFkX2Z1bmN0 aW9uX3Q7CnR5cGVkZWYgX19pb193cml0ZV9mbiBjb29raWVfd3JpdGVfZnVuY3Rpb25fdDsKdHlw ZWRlZiBfX2lvX3NlZWtfZm4gY29va2llX3NlZWtfZnVuY3Rpb25fdDsKdHlwZWRlZiBfX2lvX2Ns b3NlX2ZuIGNvb2tpZV9jbG9zZV9mdW5jdGlvbl90OwoKCnR5cGVkZWYgc3RydWN0CnsKICBfX2lv X3JlYWRfZm4gKnJlYWQ7CiAgX19pb193cml0ZV9mbiAqd3JpdGU7CiAgX19pb19zZWVrX2ZuICpz ZWVrOwogIF9faW9fY2xvc2VfZm4gKmNsb3NlOwp9IF9JT19jb29raWVfaW9fZnVuY3Rpb25zX3Q7 CnR5cGVkZWYgX0lPX2Nvb2tpZV9pb19mdW5jdGlvbnNfdCBjb29raWVfaW9fZnVuY3Rpb25zX3Q7 CgpzdHJ1Y3QgX0lPX2Nvb2tpZV9maWxlOwoKCmV4dGVybiB2b2lkIF9JT19jb29raWVfaW5pdCAo c3RydWN0IF9JT19jb29raWVfZmlsZSAqX19jZmlsZSwgaW50IF9fcmVhZF93cml0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Nvb2tpZSwgX0lPX2Nvb2tpZV9pb19mdW5j dGlvbnNfdCBfX2Zucyk7CgoKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gaW50IF9fdW5kZXJmbG93 IChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX191ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4g aW50IF9fb3ZlcmZsb3cgKF9JT19GSUxFICosIGludCkgOwpleHRlcm4gd2ludF90IF9fd3VuZGVy ZmxvdyAoX0lPX0ZJTEUgKikgOwpleHRlcm4gd2ludF90IF9fd3VmbG93IChfSU9fRklMRSAqKSA7 CmV4dGVybiB3aW50X3QgX193b3ZlcmZsb3cgKF9JT19GSUxFICosIHdpbnRfdCkgOwojIDQyNiAi L3Vzci9pbmNsdWRlL2xpYmlvLmgiIDMKZXh0ZXJuIGludCBfSU9fZ2V0YyAoX0lPX0ZJTEUgKl9f ZnApIDsKZXh0ZXJuIGludCBfSU9fcHV0YyAoaW50IF9fYywgX0lPX0ZJTEUgKl9fZnApIDsKZXh0 ZXJuIGludCBfSU9fZmVvZiAoX0lPX0ZJTEUgKl9fZnApIDsKZXh0ZXJuIGludCBfSU9fZmVycm9y IChfSU9fRklMRSAqX19mcCkgOwoKZXh0ZXJuIGludCBfSU9fcGVla2NfbG9ja2VkIChfSU9fRklM RSAqX19mcCkgOwoKCgoKCmV4dGVybiB2b2lkIF9JT19mbG9ja2ZpbGUgKF9JT19GSUxFICopIDsK ZXh0ZXJuIHZvaWQgX0lPX2Z1bmxvY2tmaWxlIChfSU9fRklMRSAqKSA7CmV4dGVybiBpbnQgX0lP X2Z0cnlsb2NrZmlsZSAoX0lPX0ZJTEUgKikgOwojIDQ1NiAiL3Vzci9pbmNsdWRlL2xpYmlvLmgi IDMKZXh0ZXJuIGludCBfSU9fdmZzY2FuZiAoX0lPX0ZJTEUgKiAsIGNvbnN0IGNoYXIgKiAsCiAg ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKikgOwpleHRlcm4gaW50 IF9JT192ZnByaW50ZiAoX0lPX0ZJTEUgKiwgY29uc3QgY2hhciAqLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19nbnVjX3ZhX2xpc3QpIDsKZXh0ZXJuIF9fc3NpemVfdCBfSU9fcGFkbiAoX0lP X0ZJTEUgKiwgaW50LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHNpemVfdCBfSU9fc2dldG4gKF9JT19G SUxFICosIHZvaWQgKiwgc2l6ZV90KSA7CgpleHRlcm4gX19vZmY2NF90IF9JT19zZWVrb2ZmIChf SU9fRklMRSAqLCBfX29mZjY0X3QsIGludCwgaW50KSA7CmV4dGVybiBfX29mZjY0X3QgX0lPX3Nl ZWtwb3MgKF9JT19GSUxFICosIF9fb2ZmNjRfdCwgaW50KSA7CgpleHRlcm4gdm9pZCBfSU9fZnJl ZV9iYWNrdXBfYXJlYSAoX0lPX0ZJTEUgKikgOwoKCmV4dGVybiB3aW50X3QgX0lPX2dldHdjIChf SU9fRklMRSAqX19mcCkgOwpleHRlcm4gd2ludF90IF9JT19wdXR3YyAod2NoYXJfdCBfX3djLCBf SU9fRklMRSAqX19mcCkgOwpleHRlcm4gaW50IF9JT19md2lkZSAoX0lPX0ZJTEUgKl9fZnAsIGlu dCBfX21vZGUpIDsKIyA1MDUgIi91c3IvaW5jbHVkZS9saWJpby5oIiAzCmV4dGVybiBpbnQgX0lP X3Zmd3NjYW5mIChfSU9fRklMRSAqICwgY29uc3Qgd2NoYXJfdCAqICwKICAgICAgICAgICAgICAg ICAgICAgICAgIF9fZ251Y192YV9saXN0LCBpbnQgKikgOwpleHRlcm4gaW50IF9JT192Zndwcmlu dGYgKF9JT19GSUxFICosIGNvbnN0IHdjaGFyX3QgKiwKICAgICAgICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCkgOwpleHRlcm4gX19zc2l6ZV90IF9JT193cGFkbiAoX0lPX0ZJTEUg Kiwgd2ludF90LCBfX3NzaXplX3QpIDsKZXh0ZXJuIHZvaWQgX0lPX2ZyZWVfd2JhY2t1cF9hcmVh IChfSU9fRklMRSAqKSA7CgoKCn0KIyA3NSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKIyA4MyAiL3Vzci9sb2NhbC9saWIv Z2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRhcmcu aCIgMSAzCiMgMTEwICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMu Mi9pbmNsdWRlL3N0ZGFyZy5oIiAzCnR5cGVkZWYgX19nbnVjX3ZhX2xpc3QgdmFfbGlzdDsKIyA4 NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z dGRpby5oIiAyIDMKCgoKCgp0eXBlZGVmIF9HX2Zwb3NfdCBmcG9zX3Q7CgoKCgp0eXBlZGVmIF9H X2Zwb3M2NF90IGZwb3M2NF90OwojIDEzOCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBj LWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMv c3RkaW9fbGltLmgiIDEgMwojIDEzOSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAyIDMKCgoKZXh0ZXJuIEZJTEUgKnN0ZGluOwpl eHRlcm4gRklMRSAqc3Rkb3V0OwpleHRlcm4gRklMRSAqc3RkZXJyOwojIDE1MyAiL3Vzci9sb2Nh bC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4 dGVybiBpbnQgcmVtb3ZlIChjb25zdCBjaGFyICpfX2ZpbGVuYW1lKSA7CgpleHRlcm4gaW50IHJl bmFtZSAoY29uc3QgY2hhciAqX19vbGQsIGNvbnN0IGNoYXIgKl9fbmV3KSA7CgoKCgpleHRlcm4g RklMRSAqdG1wZmlsZSAodm9pZCkgOwojIDE2OSAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2 LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBGSUxFICp0bXBmaWxl NjQgKHZvaWQpIDsKCgpleHRlcm4gY2hhciAqdG1wbmFtIChjaGFyICpfX3MpIDsKCgoKCmV4dGVy biBjaGFyICp0bXBuYW1fciAoY2hhciAqX19zKSA7CiMgMTg5ICIvdXNyL2xvY2FsL2xpYi9nY2Mt bGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGlvLmgiIDMKZXh0ZXJuIGNoYXIg KnRlbXBuYW0gKGNvbnN0IGNoYXIgKl9fZGlyLCBjb25zdCBjaGFyICpfX3BmeCkKICAgICA7CgoK CgpleHRlcm4gaW50IGZjbG9zZSAoRklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiBpbnQgZmZsdXNo IChGSUxFICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gaW50IGZmbHVzaF91bmxvY2tlZCAoRklMRSAq X19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZmNsb3NlYWxsICh2b2lkKSA7CgoKCgoKZXh0ZXJu IEZJTEUgKmZvcGVuIChjb25zdCBjaGFyICogX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAg ICBjb25zdCBjaGFyICogX19tb2RlcykgOwoKZXh0ZXJuIEZJTEUgKmZyZW9wZW4gKGNvbnN0IGNo YXIgKiBfX2ZpbGVuYW1lLAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fbW9k ZXMsCiAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19zdHJlYW0pIDsKIyAyMzMgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gRklMRSAqZm9wZW42NCAoY29uc3QgY2hhciAqIF9fZmlsZW5hbWUsCiAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19tb2RlcykgOwpleHRlcm4gRklMRSAqZnJlb3Bl bjY0IChjb25zdCBjaGFyICogX19maWxlbmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgY29u c3QgY2hhciAqIF9fbW9kZXMsCiAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBfX3N0cmVh bSkgOwoKCgoKZXh0ZXJuIEZJTEUgKmZkb3BlbiAoaW50IF9fZmQsIGNvbnN0IGNoYXIgKl9fbW9k ZXMpIDsKCgoKCgpleHRlcm4gRklMRSAqZm9wZW5jb29raWUgKHZvaWQgKiBfX21hZ2ljX2Nvb2tp ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19tb2RlcywKICAgICAg ICAgICAgICAgICAgICAgICAgICBfSU9fY29va2llX2lvX2Z1bmN0aW9uc190IF9faW9fZnVuY3Mp IDsKCgpleHRlcm4gRklMRSAqZm1lbW9wZW4gKHZvaWQgKl9fcywgc2l6ZV90IF9fbGVuLCBjb25z dCBjaGFyICpfX21vZGVzKSA7CgoKCgpleHRlcm4gRklMRSAqb3Blbl9tZW1zdHJlYW0gKGNoYXIg KiogX19idWZsb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19zaXpl bG9jKSA7CgoKCgoKZXh0ZXJuIHZvaWQgc2V0YnVmIChGSUxFICogX19zdHJlYW0sIGNoYXIgKiBf X2J1ZikgOwoKCgpleHRlcm4gaW50IHNldHZidWYgKEZJTEUgKiBfX3N0cmVhbSwgY2hhciAqIF9f YnVmLAogICAgICAgICAgICAgICAgICAgIGludCBfX21vZGVzLCBzaXplX3QgX19uKSA7CgoKCgpl eHRlcm4gdm9pZCBzZXRidWZmZXIgKEZJTEUgKiBfX3N0cmVhbSwgY2hhciAqIF9fYnVmLAogICAg ICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX3NpemUpIDsKCgpleHRlcm4gdm9pZCBzZXRsaW5l YnVmIChGSUxFICpfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmcHJpbnRmIChGSUxFICogX19z dHJlYW0sCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsK CmV4dGVybiBpbnQgcHJpbnRmIChjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikgOwoKZXh0ZXJu IGludCBzcHJpbnRmIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIg KiBfX2Zvcm1hdCwgLi4uKSA7CgoKZXh0ZXJuIGludCB2ZnByaW50ZiAoRklMRSAqIF9fcywgY29u c3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBf X2FyZykgOwoKZXh0ZXJuIGludCB2cHJpbnRmIChjb25zdCBjaGFyICogX19mb3JtYXQsIF9fZ251 Y192YV9saXN0IF9fYXJnKQogICAgIDsKCmV4dGVybiBpbnQgdnNwcmludGYgKGNoYXIgKiBfX3Ms IGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xp c3QgX19hcmcpIDsKCgoKZXh0ZXJuIGludCBzbnByaW50ZiAoY2hhciAqIF9fcywgc2l6ZV90IF9f bWF4bGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikK ICAgICA7CgpleHRlcm4gaW50IHZzbnByaW50ZiAoY2hhciAqIF9fcywgc2l6ZV90IF9fbWF4bGVu LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2dudWNfdmFf bGlzdCBfX2FyZykKICAgICA7CgoKCgoKZXh0ZXJuIGludCB2YXNwcmludGYgKGNoYXIgKiogX19w dHIsIGNvbnN0IGNoYXIgKiBfX2YsCiAgICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICA7CmV4dGVybiBpbnQgX19hc3ByaW50ZiAoY2hhciAqKiBfX3B0ciwKICAg ICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mbXQsIC4uLikKICAgICA7CmV4dGVy biBpbnQgYXNwcmludGYgKGNoYXIgKiogX19wdHIsCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IGNoYXIgKiBfX2ZtdCwgLi4uKQogICAgIDsKCgpleHRlcm4gaW50IHZkcHJpbnRmIChpbnQgX19m ZCwgY29uc3QgY2hhciAqIF9fZm10LAogICAgICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlz dCBfX2FyZykKICAgICA7CmV4dGVybiBpbnQgZHByaW50ZiAoaW50IF9fZmQsIGNvbnN0IGNoYXIg KiBfX2ZtdCwgLi4uKQogICAgIDsKCgoKCmV4dGVybiBpbnQgZnNjYW5mIChGSUxFICogX19zdHJl YW0sCiAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19mb3JtYXQsIC4uLikgOwoKZXh0 ZXJuIGludCBzY2FuZiAoY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKCmV4dGVybiBpbnQg c3NjYW5mIChjb25zdCBjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAq IF9fZm9ybWF0LCAuLi4pIDsKCgoKZXh0ZXJuIGludCB2ZnNjYW5mIChGSUxFICogX19zLCBjb25z dCBjaGFyICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgX19nbnVjX3ZhX2xpc3QgX19h cmcpCiAgICAgOwoKCmV4dGVybiBpbnQgdnNjYW5mIChjb25zdCBjaGFyICogX19mb3JtYXQsIF9f Z251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgpleHRlcm4gaW50IHZzc2NhbmYgKGNvbnN0IGNo YXIgKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCBfX2du dWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgoKCgpleHRlcm4gaW50IGZnZXRjIChGSUxFICpfX3N0 cmVhbSkgOwpleHRlcm4gaW50IGdldGMgKEZJTEUgKl9fc3RyZWFtKSA7CgoKZXh0ZXJuIGludCBn ZXRjaGFyICh2b2lkKSA7CgoKCgoKCgpleHRlcm4gaW50IGdldGNfdW5sb2NrZWQgKEZJTEUgKl9f c3RyZWFtKSA7CmV4dGVybiBpbnQgZ2V0Y2hhcl91bmxvY2tlZCAodm9pZCkgOwoKCgoKZXh0ZXJu IGludCBmZ2V0Y191bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKCgoKCmV4dGVybiBpbnQgZnB1 dGMgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgcHV0YyAoaW50IF9fYywg RklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dGNoYXIgKGludCBfX2MpIDsKCgoKCgoK CmV4dGVybiBpbnQgZnB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CgoK CgpleHRlcm4gaW50IHB1dGNfdW5sb2NrZWQgKGludCBfX2MsIEZJTEUgKl9fc3RyZWFtKSA7CmV4 dGVybiBpbnQgcHV0Y2hhcl91bmxvY2tlZCAoaW50IF9fYykgOwoKCgoKCmV4dGVybiBpbnQgZ2V0 dyAoRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IHB1dHcgKGludCBfX3csIEZJTEUgKl9f c3RyZWFtKSA7CgoKCgpleHRlcm4gY2hhciAqZmdldHMgKGNoYXIgKiBfX3MsIGludCBfX24sIEZJ TEUgKiBfX3N0cmVhbSkKICAgICA7CgoKCmV4dGVybiBjaGFyICpmZ2V0c191bmxvY2tlZCAoY2hh ciAqIF9fcywgaW50IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19z dHJlYW0pIDsKCgoKCmV4dGVybiBjaGFyICpnZXRzIChjaGFyICpfX3MpIDsKIyA0MzcgIi91c3Iv bG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvc3RkaW8uaCIg MwpleHRlcm4gX19zc2l6ZV90IF9fZ2V0ZGVsaW0gKGNoYXIgKiogX19saW5lcHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGSUxFICogX19zdHJlYW0pIDsKZXh0ZXJuIF9f c3NpemVfdCBnZXRkZWxpbSAoY2hhciAqKiBfX2xpbmVwdHIsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgc2l6ZV90ICogX19uLCBpbnQgX19kZWxpbWl0ZXIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CgoKZXh0ZXJuIF9fc3NpemVfdCBnZXRsaW5l IChjaGFyICoqIF9fbGluZXB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCAq IF9fbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZJTEUgKiBfX3N0cmVhbSkgOwoKCgoK ZXh0ZXJuIGludCBmcHV0cyAoY29uc3QgY2hhciAqIF9fcywgRklMRSAqIF9fc3RyZWFtKQogICAg IDsKCgoKZXh0ZXJuIGludCBmcHV0c191bmxvY2tlZCAoY29uc3QgY2hhciAqIF9fcywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgRklMRSAqIF9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgcHV0 cyAoY29uc3QgY2hhciAqX19zKSA7CgoKCmV4dGVybiBpbnQgdW5nZXRjIChpbnQgX19jLCBGSUxF ICpfX3N0cmVhbSkgOwoKCgpleHRlcm4gc2l6ZV90IGZyZWFkICh2b2lkICogX19wdHIsIHNpemVf dCBfX3NpemUsCiAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKiBfX3N0cmVh bSkgOwoKZXh0ZXJuIHNpemVfdCBmd3JpdGUgKGNvbnN0IHZvaWQgKiBfX3B0ciwgc2l6ZV90IF9f c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24sIEZJTEUgKiBfX3MpIDsKCgoK ZXh0ZXJuIHNpemVfdCBmcmVhZF91bmxvY2tlZCAodm9pZCAqIF9fcHRyLCBzaXplX3QgX19zaXpl LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBGSUxFICogX19zdHJl YW0pIDsKZXh0ZXJuIHNpemVfdCBmd3JpdGVfdW5sb2NrZWQgKGNvbnN0IHZvaWQgKiBfX3B0ciwg c2l6ZV90IF9fc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVfdCBfX24s IEZJTEUgKiBfX3N0cmVhbSkgOwoKCgoKZXh0ZXJuIGludCBmc2VlayAoRklMRSAqX19zdHJlYW0s IGxvbmcgaW50IF9fb2ZmLCBpbnQgX193aGVuY2UpIDsKCmV4dGVybiBsb25nIGludCBmdGVsbCAo RklMRSAqX19zdHJlYW0pIDsKCmV4dGVybiB2b2lkIHJld2luZCAoRklMRSAqX19zdHJlYW0pIDsK IyA1MDAgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1 ZGUvc3RkaW8uaCIgMwpleHRlcm4gaW50IGZzZWVrbyAoRklMRSAqX19zdHJlYW0sIF9fb2ZmX3Qg X19vZmYsIGludCBfX3doZW5jZSkgOwoKZXh0ZXJuIF9fb2ZmX3QgZnRlbGxvIChGSUxFICpfX3N0 cmVhbSkgOwoKCgpleHRlcm4gaW50IGZnZXRwb3MgKEZJTEUgKiBfX3N0cmVhbSwgZnBvc190ICog X19wb3MpCiAgICAgOwoKZXh0ZXJuIGludCBmc2V0cG9zIChGSUxFICpfX3N0cmVhbSwgY29uc3Qg ZnBvc190ICpfX3BvcykgOwojIDUzNCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxp bnV4LWdudS8zLjIvaW5jbHVkZS9zdGRpby5oIiAzCmV4dGVybiBpbnQgZnNlZWtvNjQgKEZJTEUg Kl9fc3RyZWFtLCBfX29mZjY0X3QgX19vZmYsIGludCBfX3doZW5jZSkgOwpleHRlcm4gX19vZmY2 NF90IGZ0ZWxsbzY0IChGSUxFICpfX3N0cmVhbSkgOwpleHRlcm4gaW50IGZnZXRwb3M2NCAoRklM RSAqIF9fc3RyZWFtLCBmcG9zNjRfdCAqIF9fcG9zKQogICAgIDsKZXh0ZXJuIGludCBmc2V0cG9z NjQgKEZJTEUgKl9fc3RyZWFtLCBjb25zdCBmcG9zNjRfdCAqX19wb3MpIDsKCgoKZXh0ZXJuIHZv aWQgY2xlYXJlcnIgKEZJTEUgKl9fc3RyZWFtKSA7CgpleHRlcm4gaW50IGZlb2YgKEZJTEUgKl9f c3RyZWFtKSA7CgpleHRlcm4gaW50IGZlcnJvciAoRklMRSAqX19zdHJlYW0pIDsKCgoKZXh0ZXJu IHZvaWQgY2xlYXJlcnJfdW5sb2NrZWQgKEZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiBpbnQgZmVv Zl91bmxvY2tlZCAoRklMRSAqX19zdHJlYW0pIDsKZXh0ZXJuIGludCBmZXJyb3JfdW5sb2NrZWQg KEZJTEUgKl9fc3RyZWFtKSA7CgoKCgpleHRlcm4gdm9pZCBwZXJyb3IgKGNvbnN0IGNoYXIgKl9f cykgOwoKCgoKZXh0ZXJuIGludCBzeXNfbmVycjsKZXh0ZXJuIGNvbnN0IGNoYXIgKmNvbnN0IHN5 c19lcnJsaXN0W107CgoKZXh0ZXJuIGludCBfc3lzX25lcnI7CmV4dGVybiBjb25zdCBjaGFyICpj b25zdCBfc3lzX2Vycmxpc3RbXTsKCgoKCgpleHRlcm4gaW50IGZpbGVubyAoRklMRSAqX19zdHJl YW0pIDsKCgoKCmV4dGVybiBpbnQgZmlsZW5vX3VubG9ja2VkIChGSUxFICpfX3N0cmVhbSkgOwoK CgoKCgpleHRlcm4gRklMRSAqcG9wZW4gKGNvbnN0IGNoYXIgKl9fY29tbWFuZCwgY29uc3QgY2hh ciAqX19tb2RlcykgOwoKCmV4dGVybiBpbnQgcGNsb3NlIChGSUxFICpfX3N0cmVhbSkgOwoKCgoK CmV4dGVybiBjaGFyICpjdGVybWlkIChjaGFyICpfX3MpIDsKCgoKCgpleHRlcm4gY2hhciAqY3Vz ZXJpZCAoY2hhciAqX19zKSA7CgoKCgpzdHJ1Y3Qgb2JzdGFjazsKCgpleHRlcm4gaW50IG9ic3Rh Y2tfcHJpbnRmIChzdHJ1Y3Qgb2JzdGFjayAqIF9fb2JzdGFjaywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LCAuLi4pIDsKZXh0ZXJuIGludCBvYnN0YWNr X3ZwcmludGYgKHN0cnVjdCBvYnN0YWNrICogX19vYnN0YWNrLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgY2hhciAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19nbnVjX3ZhX2xpc3QgX19hcmdzKSA7CgoKCgoKCgpleHRlcm4gdm9pZCBmbG9ja2ZpbGUg KEZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiBpbnQgZnRyeWxvY2tmaWxlIChGSUxFICpfX3N0 cmVhbSkgOwoKCmV4dGVybiB2b2lkIGZ1bmxvY2tmaWxlIChGSUxFICpfX3N0cmVhbSkgOwojIDY0 NCAiL3Vzci9sb2NhbC9saWIvZ2NjLWxpYi9pNjg2LXBjLWxpbnV4LWdudS8zLjIvaW5jbHVkZS9z dGRpby5oIiAzCn0KIyA1MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAyIDMK IyA5NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3N0ZGlvIiAzCm5hbWVzcGFjZSBzdGQK ewogIHVzaW5nIDo6RklMRTsKICB1c2luZyA6OmZwb3NfdDsKCiAgdXNpbmcgOjpjbGVhcmVycjsK ICB1c2luZyA6OmZjbG9zZTsKICB1c2luZyA6OmZlb2Y7CiAgdXNpbmcgOjpmZXJyb3I7CiAgdXNp bmcgOjpmZmx1c2g7CiAgdXNpbmcgOjpmZ2V0YzsKICB1c2luZyA6OmZnZXRwb3M7CiAgdXNpbmcg OjpmZ2V0czsKICB1c2luZyA6OmZvcGVuOwogIHVzaW5nIDo6ZnByaW50ZjsKICB1c2luZyA6OmZw dXRjOwogIHVzaW5nIDo6ZnB1dHM7CiAgdXNpbmcgOjpmcmVhZDsKICB1c2luZyA6OmZyZW9wZW47 CiAgdXNpbmcgOjpmc2NhbmY7CiAgdXNpbmcgOjpmc2VlazsKICB1c2luZyA6OmZzZXRwb3M7CiAg dXNpbmcgOjpmdGVsbDsKICB1c2luZyA6OmZ3cml0ZTsKICB1c2luZyA6OmdldGM7CiAgdXNpbmcg OjpnZXRjaGFyOwogIHVzaW5nIDo6Z2V0czsKICB1c2luZyA6OnBlcnJvcjsKICB1c2luZyA6OnBy aW50ZjsKICB1c2luZyA6OnB1dGM7CiAgdXNpbmcgOjpwdXRjaGFyOwogIHVzaW5nIDo6cHV0czsK ICB1c2luZyA6OnJlbW92ZTsKICB1c2luZyA6OnJlbmFtZTsKICB1c2luZyA6OnJld2luZDsKICB1 c2luZyA6OnNjYW5mOwogIHVzaW5nIDo6c2V0YnVmOwogIHVzaW5nIDo6c2V0dmJ1ZjsKICB1c2lu ZyA6OnNwcmludGY7CiAgdXNpbmcgOjpzc2NhbmY7CiAgdXNpbmcgOjp0bXBmaWxlOwogIHVzaW5n IDo6dG1wbmFtOwogIHVzaW5nIDo6dW5nZXRjOwogIHVzaW5nIDo6dmZwcmludGY7CiAgdXNpbmcg Ojp2cHJpbnRmOwogIHVzaW5nIDo6dnNwcmludGY7Cn0KIyAxNTMgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2NzdGRpbyIgMwpuYW1lc3BhY2UgX19nbnVfY3h4CnsKICB1c2luZyA6OnNucHJp bnRmOwogIHVzaW5nIDo6dmZzY2FuZjsKICB1c2luZyA6OnZzY2FuZjsKICB1c2luZyA6OnZzbnBy aW50ZjsKICB1c2luZyA6OnZzc2NhbmY7Cn0KCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIF9fZ251 X2N4eDo6c25wcmludGY7CiAgdXNpbmcgX19nbnVfY3h4Ojp2ZnNjYW5mOwogIHVzaW5nIF9fZ251 X2N4eDo6dnNjYW5mOwogIHVzaW5nIF9fZ251X2N4eDo6dnNucHJpbnRmOwogIHVzaW5nIF9fZ251 X2N4eDo6dnNzY2FuZjsKfQojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBj LWxpbnV4LWdudS9iaXRzL2MrK2lvLmgiIDIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHIuaCIgMSAzCiMgOTggIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAzCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1 bHQuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgt Z251L2JpdHMvZ3Roci1kZWZhdWx0LmgiIDMKIyAxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAx IDMKIyAyMCAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwojIDEgIi91c3IvaW5jbHVkZS9zY2hl ZC5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDMKIyAxICIvdXNyL2luY2x1ZGUv dGltZS5oIiAxIDMKIyAzMCAiL3Vzci9pbmNsdWRlL3NjaGVkLmgiIDIgMwoKCiMgMSAiL3Vzci9p bmNsdWRlL2JpdHMvc2NoZWQuaCIgMSAzCiMgNDcgIi91c3IvaW5jbHVkZS9iaXRzL3NjaGVkLmgi IDMKc3RydWN0IHNjaGVkX3BhcmFtCiAgewogICAgaW50IF9fc2NoZWRfcHJpb3JpdHk7CiAgfTsK CmV4dGVybiAiQyIgewoKCgpleHRlcm4gaW50IGNsb25lIChpbnQgKCpfX2ZuKSAodm9pZCAqX19h cmcpLCB2b2lkICpfX2NoaWxkX3N0YWNrLAogICAgICAgICAgICAgICAgICBpbnQgX19mbGFncywg dm9pZCAqX19hcmcpIDsKCgp9CiMgMzMgIi91c3IvaW5jbHVkZS9zY2hlZC5oIiAyIDMKCgoKCmV4 dGVybiAiQyIgewoKCmV4dGVybiBpbnQgc2NoZWRfc2V0cGFyYW0gKF9fcGlkX3QgX19waWQsIGNv bnN0IHN0cnVjdCBzY2hlZF9wYXJhbSAqX19wYXJhbSkKICAgICA7CgoKZXh0ZXJuIGludCBzY2hl ZF9nZXRwYXJhbSAoX19waWRfdCBfX3BpZCwgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKSA7 CgoKZXh0ZXJuIGludCBzY2hlZF9zZXRzY2hlZHVsZXIgKF9fcGlkX3QgX19waWQsIGludCBfX3Bv bGljeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCBzY2hlZF9w YXJhbSAqX19wYXJhbSkgOwoKCmV4dGVybiBpbnQgc2NoZWRfZ2V0c2NoZWR1bGVyIChfX3BpZF90 IF9fcGlkKSA7CgoKZXh0ZXJuIGludCBzY2hlZF95aWVsZCAodm9pZCkgOwoKCmV4dGVybiBpbnQg c2NoZWRfZ2V0X3ByaW9yaXR5X21heCAoaW50IF9fYWxnb3JpdGhtKSA7CgoKZXh0ZXJuIGludCBz Y2hlZF9nZXRfcHJpb3JpdHlfbWluIChpbnQgX19hbGdvcml0aG0pIDsKCgpleHRlcm4gaW50IHNj aGVkX3JyX2dldF9pbnRlcnZhbCAoX19waWRfdCBfX3BpZCwgc3RydWN0IHRpbWVzcGVjICpfX3Qp IDsKCn0KIyAyMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCiMgMSAiL3Vzci9pbmNsdWRl L3RpbWUuaCIgMSAzCiMgMzAgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuICJDIiB7CgoK CgoKCgojIDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2lu Y2x1ZGUvc3RkZGVmLmgiIDEgMwojIDM5ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAyIDMKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy90aW1lLmgiIDEgMwojIDQzICIvdXNyL2luY2x1ZGUvdGltZS5o IiAyIDMKIyAxMTggIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKc3RydWN0IHRtCnsKICBpbnQgdG1f c2VjOwogIGludCB0bV9taW47CiAgaW50IHRtX2hvdXI7CiAgaW50IHRtX21kYXk7CiAgaW50IHRt X21vbjsKICBpbnQgdG1feWVhcjsKICBpbnQgdG1fd2RheTsKICBpbnQgdG1feWRheTsKICBpbnQg dG1faXNkc3Q7CgoKICBsb25nIGludCB0bV9nbXRvZmY7CiAgY29uc3QgY2hhciAqdG1fem9uZTsK CgoKCn07CgoKCgpzdHJ1Y3QgaXRpbWVyc3BlYwogIHsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF9p bnRlcnZhbDsKICAgIHN0cnVjdCB0aW1lc3BlYyBpdF92YWx1ZTsKICB9OwoKCnN0cnVjdCBzaWdl dmVudDsKIyAxNjMgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIGNsb2NrX3QgY2xvY2sg KHZvaWQpIDsKCgpleHRlcm4gdGltZV90IHRpbWUgKHRpbWVfdCAqX190aW1lcikgOwoKCmV4dGVy biBkb3VibGUgZGlmZnRpbWUgKHRpbWVfdCBfX3RpbWUxLCB0aW1lX3QgX190aW1lMCkKICAgICA7 CgoKZXh0ZXJuIHRpbWVfdCBta3RpbWUgKHN0cnVjdCB0bSAqX190cCkgOwoKCgoKCmV4dGVybiBz aXplX3Qgc3RyZnRpbWUgKGNoYXIgKiBfX3MsIHNpemVfdCBfX21heHNpemUsCiAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3Qgc3RydWN0IHRtICogX190cCkgOwoKCgoKZXh0ZXJuIGNoYXIgKnN0cnB0aW1lIChj b25zdCBjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2Zt dCwgc3RydWN0IHRtICpfX3RwKQogICAgIDsKCgoKCgpleHRlcm4gc3RydWN0IHRtICpnbXRpbWUg KGNvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgpleHRlcm4gc3RydWN0IHRtICpsb2NhbHRpbWUg KGNvbnN0IHRpbWVfdCAqX190aW1lcikgOwoKCgoKZXh0ZXJuIHN0cnVjdCB0bSAqZ210aW1lX3Ig KGNvbnN0IHRpbWVfdCAqIF9fdGltZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1 Y3QgdG0gKiBfX3RwKSA7CgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmxvY2FsdGltZV9yIChjb25zdCB0 aW1lX3QgKiBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRt ICogX190cCkgOwoKCgoKZXh0ZXJuIGNoYXIgKmFzY3RpbWUgKGNvbnN0IHN0cnVjdCB0bSAqX190 cCkgOwoKCmV4dGVybiBjaGFyICpjdGltZSAoY29uc3QgdGltZV90ICpfX3RpbWVyKSA7CgoKCgoK CmV4dGVybiBjaGFyICphc2N0aW1lX3IgKGNvbnN0IHN0cnVjdCB0bSAqIF9fdHAsCiAgICAgICAg ICAgICAgICAgICAgICAgIGNoYXIgKiBfX2J1ZikgOwoKCmV4dGVybiBjaGFyICpjdGltZV9yIChj b25zdCB0aW1lX3QgKiBfX3RpbWVyLAogICAgICAgICAgICAgICAgICAgICAgY2hhciAqIF9fYnVm KSA7CgoKCgpleHRlcm4gY2hhciAqX190em5hbWVbMl07CmV4dGVybiBpbnQgX19kYXlsaWdodDsK ZXh0ZXJuIGxvbmcgaW50IF9fdGltZXpvbmU7CgoKCgpleHRlcm4gY2hhciAqdHpuYW1lWzJdOwoK CgpleHRlcm4gdm9pZCB0enNldCAodm9pZCkgOwoKCgpleHRlcm4gaW50IGRheWxpZ2h0OwpleHRl cm4gbG9uZyBpbnQgdGltZXpvbmU7CgoKCgoKZXh0ZXJuIGludCBzdGltZSAoY29uc3QgdGltZV90 ICpfX3doZW4pIDsKIyAyNzEgIi91c3IvaW5jbHVkZS90aW1lLmgiIDMKZXh0ZXJuIHRpbWVfdCB0 aW1lZ20gKHN0cnVjdCB0bSAqX190cCkgOwoKCmV4dGVybiB0aW1lX3QgdGltZWxvY2FsIChzdHJ1 Y3QgdG0gKl9fdHApIDsKCgpleHRlcm4gaW50IGR5c2l6ZSAoaW50IF9feWVhcikgOwoKCgoKCmV4 dGVybiBpbnQgbmFub3NsZWVwIChjb25zdCBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVxdWVzdGVkX3Rp bWUsCiAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgdGltZXNwZWMgKl9fcmVtYWluaW5nKSA7 CgoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0cmVzIChjbG9ja2lkX3QgX19jbG9ja19pZCwgc3RydWN0 IHRpbWVzcGVjICpfX3JlcykgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0dGltZSAoY2xvY2tpZF90 IF9fY2xvY2tfaWQsIHN0cnVjdCB0aW1lc3BlYyAqX190cCkgOwoKCmV4dGVybiBpbnQgY2xvY2tf c2V0dGltZSAoY2xvY2tpZF90IF9fY2xvY2tfaWQsIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqX190 cCkKICAgICA7CgoKCmV4dGVybiBpbnQgY2xvY2tfbmFub3NsZWVwIChjbG9ja2lkX3QgX19jbG9j a19pZCwgaW50IF9fZmxhZ3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1 Y3QgdGltZXNwZWMgKl9fcmVxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHRp bWVzcGVjICpfX3JlbSkgOwoKCmV4dGVybiBpbnQgY2xvY2tfZ2V0Y3B1Y2xvY2tpZCAocGlkX3Qg X19waWQsIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKZXh0ZXJuIGludCB0aW1lcl9jcmVh dGUgKGNsb2NraWRfdCBfX2Nsb2NrX2lkLAogICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0 IHNpZ2V2ZW50ICogX19ldnAsCiAgICAgICAgICAgICAgICAgICAgICAgICB0aW1lcl90ICogX190 aW1lcmlkKSA7CgoKZXh0ZXJuIGludCB0aW1lcl9kZWxldGUgKHRpbWVyX3QgX190aW1lcmlkKSA7 CgoKZXh0ZXJuIGludCB0aW1lcl9zZXR0aW1lICh0aW1lcl90IF9fdGltZXJpZCwgaW50IF9fZmxh Z3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IGl0aW1lcnNwZWMgKiBf X3ZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCBpdGltZXJzcGVjICogX19v dmFsdWUpIDsKCgpleHRlcm4gaW50IHRpbWVyX2dldHRpbWUgKHRpbWVyX3QgX190aW1lcmlkLCBz dHJ1Y3QgaXRpbWVyc3BlYyAqX192YWx1ZSkKICAgICA7CgoKZXh0ZXJuIGludCB0aW1lcl9nZXRv dmVycnVuICh0aW1lcl90IF9fdGltZXJpZCkgOwojIDM0MiAiL3Vzci9pbmNsdWRlL3RpbWUuaCIg MwpleHRlcm4gaW50IGdldGRhdGVfZXJyOwoKCgoKCmV4dGVybiBzdHJ1Y3QgdG0gKmdldGRhdGUg KGNvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CiMgMzU3ICIvdXNyL2luY2x1ZGUvdGltZS5oIiAzCmV4 dGVybiBpbnQgZ2V0ZGF0ZV9yIChjb25zdCBjaGFyICogX19zdHJpbmcsCiAgICAgICAgICAgICAg ICAgICAgICBzdHJ1Y3QgdG0gKiBfX3Jlc2J1ZnApIDsKCgoKfQojIDIyICIvdXNyL2luY2x1ZGUv cHRocmVhZC5oIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS9zaWduYWwuaCIgMSAzCiMgMzEgIi91 c3IvaW5jbHVkZS9zaWduYWwuaCIgMwpleHRlcm4gIkMiIHsKCiMgMSAiL3Vzci9pbmNsdWRlL2Jp dHMvc2lnc2V0LmgiIDEgMwojIDM0ICIvdXNyL2luY2x1ZGUvc2lnbmFsLmgiIDIgMwojIDM3MSAi L3Vzci9pbmNsdWRlL3NpZ25hbC5oIiAzCn0KIyAyNSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvcHRocmVhZHR5cGVzLmgiIDEgMwojIDI2ICIvdXNy L2luY2x1ZGUvcHRocmVhZC5oIiAyIDMKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9pbml0c3Bpbi5o IiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMiAzCgoKZXh0ZXJuICJDIiB7CiMg NTkgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDMKZW51bQp7CiAgUFRIUkVBRF9DUkVBVEVfSk9J TkFCTEUsCgogIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVECgp9OwoKZW51bQp7CiAgUFRIUkVBRF9J TkhFUklUX1NDSEVELAoKICBQVEhSRUFEX0VYUExJQ0lUX1NDSEVECgp9OwoKZW51bQp7CiAgUFRI UkVBRF9TQ09QRV9TWVNURU0sCgogIFBUSFJFQURfU0NPUEVfUFJPQ0VTUwoKfTsKCmVudW0Kewog IFBUSFJFQURfTVVURVhfVElNRURfTlAsCiAgUFRIUkVBRF9NVVRFWF9SRUNVUlNJVkVfTlAsCiAg UFRIUkVBRF9NVVRFWF9FUlJPUkNIRUNLX05QLAogIFBUSFJFQURfTVVURVhfQURBUFRJVkVfTlAK CiAgLAogIFBUSFJFQURfTVVURVhfTk9STUFMID0gUFRIUkVBRF9NVVRFWF9USU1FRF9OUCwKICBQ VEhSRUFEX01VVEVYX1JFQ1VSU0lWRSA9IFBUSFJFQURfTVVURVhfUkVDVVJTSVZFX05QLAogIFBU SFJFQURfTVVURVhfRVJST1JDSEVDSyA9IFBUSFJFQURfTVVURVhfRVJST1JDSEVDS19OUCwKICBQ VEhSRUFEX01VVEVYX0RFRkFVTFQgPSBQVEhSRUFEX01VVEVYX05PUk1BTAoKCgogICwgUFRIUkVB RF9NVVRFWF9GQVNUX05QID0gUFRIUkVBRF9NVVRFWF9BREFQVElWRV9OUAoKfTsKCmVudW0Kewog IFBUSFJFQURfUFJPQ0VTU19QUklWQVRFLAoKICBQVEhSRUFEX1BST0NFU1NfU0hBUkVECgp9OwoK CmVudW0KewogIFBUSFJFQURfUldMT0NLX1BSRUZFUl9SRUFERVJfTlAsCiAgUFRIUkVBRF9SV0xP Q0tfUFJFRkVSX1dSSVRFUl9OUCwKICBQVEhSRUFEX1JXTE9DS19QUkVGRVJfV1JJVEVSX05PTlJF Q1VSU0lWRV9OUCwKICBQVEhSRUFEX1JXTE9DS19ERUZBVUxUX05QID0gUFRIUkVBRF9SV0xPQ0tf UFJFRkVSX1dSSVRFUl9OUAp9OwojIDEzMSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpzdHJ1 Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIKewogIHZvaWQgKCpfX3JvdXRpbmUpICh2b2lkICop OwogIHZvaWQgKl9fYXJnOwogIGludCBfX2NhbmNlbHR5cGU7CiAgc3RydWN0IF9wdGhyZWFkX2Ns ZWFudXBfYnVmZmVyICpfX3ByZXY7Cn07CgoKCmVudW0KewogIFBUSFJFQURfQ0FOQ0VMX0VOQUJM RSwKCiAgUFRIUkVBRF9DQU5DRUxfRElTQUJMRQoKfTsKZW51bQp7CiAgUFRIUkVBRF9DQU5DRUxf REVGRVJSRUQsCgogIFBUSFJFQURfQ0FOQ0VMX0FTWU5DSFJPTk9VUwoKfTsKIyAxNjMgIi91c3Iv aW5jbHVkZS9wdGhyZWFkLmgiIDMKZXh0ZXJuIGludCBwdGhyZWFkX2NyZWF0ZSAocHRocmVhZF90 ICogX190aHJlYWQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfYXR0 cl90ICogX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICooKl9fc3RhcnRf cm91dGluZSkgKHZvaWQgKiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKiBfX2Fy ZykgOwoKCmV4dGVybiBwdGhyZWFkX3QgcHRocmVhZF9zZWxmICh2b2lkKSA7CgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2VxdWFsIChwdGhyZWFkX3QgX190aHJlYWQxLCBwdGhyZWFkX3QgX190aHJlYWQy KSA7CgoKZXh0ZXJuIHZvaWQgcHRocmVhZF9leGl0ICh2b2lkICpfX3JldHZhbCkKICAgICA7CgoK CgpleHRlcm4gaW50IHB0aHJlYWRfam9pbiAocHRocmVhZF90IF9fdGgsIHZvaWQgKipfX3RocmVh ZF9yZXR1cm4pIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfZGV0YWNoIChwdGhyZWFkX3QgX190 aCkgOwoKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfaW5pdCAocHRocmVhZF9hdHRyX3Qg Kl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYXR0 cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSAo cHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2RldGFjaHN0YXRlKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0 ZGV0YWNoc3RhdGUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgKl9fZGV0YWNoc3RhdGUpIDsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBhcmFtIChwdGhyZWFkX2F0dHJfdCAqIF9fYXR0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVk X3BhcmFtICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wYXJhbSkg OwoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX2dldHNjaGVkcGFyYW0gKGNvbnN0IHB0aHJlYWRf YXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qgc2NoZWRfcGFyYW0g KiBfX3BhcmFtKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzY2hlZHBvbGlj eSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgaW50IF9fcG9saWN5KQogICAgIDsKCgpleHRlcm4g aW50IHB0aHJlYWRfYXR0cl9nZXRzY2hlZHBvbGljeSAoY29uc3QgcHRocmVhZF9hdHRyX3QgKgog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLCBpbnQgKiBfX3Bv bGljeSkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0aW5oZXJpdHNjaGVkIChw dGhyZWFkX2F0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2luaGVyaXQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRpbmhl cml0c2NoZWQgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqIF9faW5oZXJpdCkKICAgICA7CgoKZXh0ZXJu IGludCBwdGhyZWFkX2F0dHJfc2V0c2NvcGUgKHB0aHJlYWRfYXR0cl90ICpfX2F0dHIsIGludCBf X3Njb3BlKQogICAgIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzY29wZSAoY29uc3Qg cHRocmVhZF9hdHRyX3QgKiBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgKiBfX3Njb3BlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9hdHRyX3NldGd1YXJkc2l6 ZSAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBzaXplX3QgX19ndWFyZHNpemUpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9n ZXRndWFyZHNpemUgKGNvbnN0IHB0aHJlYWRfYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2F0dHIsIHNpemVfdCAqIF9fZ3VhcmRzaXplKQogICAgIDsKCgoK CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfc2V0c3RhY2thZGRyIChwdGhyZWFkX2F0dHJfdCAq X19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKl9fc3Rh Y2thZGRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2thZGRyIChjb25zdCBw dGhyZWFkX2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19h dHRyLCB2b2lkICoqIF9fc3RhY2thZGRyKQogICAgIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf YXR0cl9zZXRzdGFjayAocHRocmVhZF9hdHRyX3QgKl9fYXR0ciwgdm9pZCAqX19zdGFja2FkZHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19zdGFja3NpemUpIDsK CgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9nZXRzdGFjayAoY29uc3QgcHRocmVhZF9hdHRyX3Qg KiBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICoqIF9fc3Rh Y2thZGRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90ICogX19zdGFj a3NpemUpIDsKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfYXR0cl9zZXRzdGFja3NpemUgKHB0aHJl YWRfYXR0cl90ICpfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c2l6ZV90IF9fc3RhY2tzaXplKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2F0dHJfZ2V0c3RhY2tz aXplIChjb25zdCBwdGhyZWFkX2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX19hdHRyLCBzaXplX3QgKiBfX3N0YWNrc2l6ZSkKICAgICA7CgoKCmV4dGVybiBp bnQgcHRocmVhZF9nZXRhdHRyX25wIChwdGhyZWFkX3QgX190aCwgcHRocmVhZF9hdHRyX3QgKl9f YXR0cikgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRfc2V0c2NoZWRwYXJhbSAocHRocmVhZF90 IF9fdGFyZ2V0X3RocmVhZCwgaW50IF9fcG9saWN5LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgc3RydWN0IHNjaGVkX3BhcmFtICpfX3BhcmFtKQogICAgIDsKCgpleHRl cm4gaW50IHB0aHJlYWRfZ2V0c2NoZWRwYXJhbSAocHRocmVhZF90IF9fdGFyZ2V0X3RocmVhZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqIF9fcG9saWN5LAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHNjaGVkX3BhcmFtICogX19wYXJhbSkK ICAgICA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9nZXRjb25jdXJyZW5jeSAodm9pZCkgOwoKCmV4 dGVybiBpbnQgcHRocmVhZF9zZXRjb25jdXJyZW5jeSAoaW50IF9fbGV2ZWwpIDsKCgoKCgoKCmV4 dGVybiBpbnQgcHRocmVhZF95aWVsZCAodm9pZCkgOwoKCgoKCgpleHRlcm4gaW50IHB0aHJlYWRf bXV0ZXhfaW5pdCAocHRocmVhZF9tdXRleF90ICogX19tdXRleCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfbXV0ZXhhdHRyX3QgKgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19tdXRleF9hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4 X2Rlc3Ryb3kgKHB0aHJlYWRfbXV0ZXhfdCAqX19tdXRleCkgOwoKCmV4dGVybiBpbnQgcHRocmVh ZF9tdXRleF90cnlsb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgpIDsKCgpleHRlcm4gaW50 IHB0aHJlYWRfbXV0ZXhfbG9jayAocHRocmVhZF9tdXRleF90ICpfX211dGV4KSA7CgoKCmV4dGVy biBpbnQgcHRocmVhZF9tdXRleF90aW1lZGxvY2sgKHB0aHJlYWRfbXV0ZXhfdCAqIF9fbXV0ZXgs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3Bl YyAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpl eHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhfdW5sb2NrIChwdGhyZWFkX211dGV4X3QgKl9fbXV0ZXgp IDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX211dGV4YXR0cl9pbml0IChwdGhyZWFkX211dGV4 YXR0cl90ICpfX2F0dHIpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfbXV0ZXhhdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9tdXRl eGF0dHJfZ2V0cHNoYXJlZCAoY29uc3QgcHRocmVhZF9tdXRleGF0dHJfdCAqCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIGludCAqIF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRo cmVhZF9tdXRleGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9tdXRleGF0dHJfdCAqX19hdHRyLAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBfX3BzaGFyZWQpIDsK CgoKCgpleHRlcm4gaW50IHB0aHJlYWRfbXV0ZXhhdHRyX3NldHR5cGUgKHB0aHJlYWRfbXV0ZXhh dHRyX3QgKl9fYXR0ciwgaW50IF9fa2luZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX211 dGV4YXR0cl9nZXR0eXBlIChjb25zdCBwdGhyZWFkX211dGV4YXR0cl90ICoKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsIGludCAqIF9fa2luZCkgOwoKCgoKCgoK ZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRfaW5pdCAocHRocmVhZF9jb25kX3QgKiBfX2NvbmQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29uZF9hdHRyKSA7CgoKZXh0ZXJuIGludCBw dGhyZWFkX2NvbmRfZGVzdHJveSAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVybiBp bnQgcHRocmVhZF9jb25kX3NpZ25hbCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoKCmV4dGVy biBpbnQgcHRocmVhZF9jb25kX2Jyb2FkY2FzdCAocHRocmVhZF9jb25kX3QgKl9fY29uZCkgOwoK CgpleHRlcm4gaW50IHB0aHJlYWRfY29uZF93YWl0IChwdGhyZWFkX2NvbmRfdCAqIF9fY29uZCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRleF90ICogX19tdXRleCkg OwoKCgoKCmV4dGVybiBpbnQgcHRocmVhZF9jb25kX3RpbWVkd2FpdCAocHRocmVhZF9jb25kX3Qg KiBfX2NvbmQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRocmVhZF9tdXRl eF90ICogX19tdXRleCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBz dHJ1Y3QgdGltZXNwZWMgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJz dGltZSkgOwoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2luaXQgKHB0aHJlYWRfY29u ZGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRhdHRyX2Rlc3Ryb3kg KHB0aHJlYWRfY29uZGF0dHJfdCAqX19hdHRyKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX2NvbmRh dHRyX2dldHBzaGFyZWQgKGNvbnN0IHB0aHJlYWRfY29uZGF0dHJfdCAqCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2F0dHIsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBpbnQgKiBfX3BzaGFyZWQpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRf Y29uZGF0dHJfc2V0cHNoYXJlZCAocHRocmVhZF9jb25kYXR0cl90ICpfX2F0dHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19wc2hhcmVkKSA7CgoKCgoKCgpl eHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX2luaXQgKHB0aHJlYWRfcndsb2NrX3QgKiBfX3J3bG9j aywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBwdGhyZWFkX3J3bG9ja2F0 dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19hdHRyKSA7CgoKZXh0ZXJu IGludCBwdGhyZWFkX3J3bG9ja19kZXN0cm95IChwdGhyZWFkX3J3bG9ja190ICpfX3J3bG9jaykg OwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfcmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICpf X3J3bG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9yd2xvY2tfdHJ5cmRsb2NrIChwdGhyZWFk X3J3bG9ja190ICpfX3J3bG9jaykgOwoKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrX3RpbWVk cmRsb2NrIChwdGhyZWFkX3J3bG9ja190ICogX19yd2xvY2ssCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IHN0cnVjdCB0aW1lc3BlYyAqCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fYWJzdGltZSkgOwoKCgpleHRlcm4gaW50IHB0aHJl YWRfcndsb2NrX3dybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2spIDsKCgpleHRlcm4g aW50IHB0aHJlYWRfcndsb2NrX3RyeXdybG9jayAocHRocmVhZF9yd2xvY2tfdCAqX19yd2xvY2sp IDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja190aW1lZHdybG9jayAocHRocmVhZF9yd2xv Y2tfdCAqIF9fcndsb2NrLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCBzdHJ1Y3QgdGltZXNwZWMgKgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2Fic3RpbWUpIDsKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja191bmxvY2sgKHB0 aHJlYWRfcndsb2NrX3QgKl9fcndsb2NrKSA7CgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9j a2F0dHJfaW5pdCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0cikgOwoKCmV4dGVybiBpbnQg cHRocmVhZF9yd2xvY2thdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIp IDsKCgpleHRlcm4gaW50IHB0aHJlYWRfcndsb2NrYXR0cl9nZXRwc2hhcmVkIChjb25zdCBwdGhy ZWFkX3J3bG9ja2F0dHJfdCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50 ICogX19wc2hhcmVkKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0cHNoYXJl ZCAocHRocmVhZF9yd2xvY2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9y d2xvY2thdHRyX2dldGtpbmRfbnAgKGNvbnN0IHB0aHJlYWRfcndsb2NrYXR0cl90ICpfX2F0dHIs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAqX19wcmVmKSA7 CgoKZXh0ZXJuIGludCBwdGhyZWFkX3J3bG9ja2F0dHJfc2V0a2luZF9ucCAocHRocmVhZF9yd2xv Y2thdHRyX3QgKl9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaW50IF9fcHJlZikgOwojIDUwOSAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4g aW50IHB0aHJlYWRfc3Bpbl9pbml0IChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaywgaW50IF9f cHNoYXJlZCkKICAgICA7CgoKZXh0ZXJuIGludCBwdGhyZWFkX3NwaW5fZGVzdHJveSAocHRocmVh ZF9zcGlubG9ja190ICpfX2xvY2spIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfc3Bpbl9sb2NrIChw dGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zcGluX3Ry eWxvY2sgKHB0aHJlYWRfc3BpbmxvY2tfdCAqX19sb2NrKSA7CgoKZXh0ZXJuIGludCBwdGhyZWFk X3NwaW5fdW5sb2NrIChwdGhyZWFkX3NwaW5sb2NrX3QgKl9fbG9jaykgOwoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2JhcnJpZXJfaW5pdCAocHRocmVhZF9iYXJyaWVyX3QgKiBfX2JhcnJpZXIsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHB0aHJlYWRfYmFycmllcmF0dHJf dCAqCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYXR0ciwgdW5zaWduZWQgaW50 IF9fY291bnQpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyX2Rlc3Ryb3kgKHB0aHJlYWRf YmFycmllcl90ICpfX2JhcnJpZXIpIDsKCmV4dGVybiBpbnQgcHRocmVhZF9iYXJyaWVyYXR0cl9p bml0IChwdGhyZWFkX2JhcnJpZXJhdHRyX3QgKl9fYXR0cikgOwoKZXh0ZXJuIGludCBwdGhyZWFk X2JhcnJpZXJhdHRyX2Rlc3Ryb3kgKHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyKSA7Cgpl eHRlcm4gaW50IHB0aHJlYWRfYmFycmllcmF0dHJfZ2V0cHNoYXJlZCAoY29uc3QgcHRocmVhZF9i YXJyaWVyYXR0cl90ICoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fYXR0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAq IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2JhcnJpZXJhdHRyX3NldHBzaGFyZWQg KHB0aHJlYWRfYmFycmllcmF0dHJfdCAqX19hdHRyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fcHNoYXJlZCkgOwoKZXh0ZXJuIGludCBwdGhyZWFkX2Jh cnJpZXJfd2FpdCAocHRocmVhZF9iYXJyaWVyX3QgKl9fYmFycmllcikgOwojIDU1NiAiL3Vzci9p bmNsdWRlL3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2NyZWF0ZSAocHRocmVh ZF9rZXlfdCAqX19rZXksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19k ZXN0cl9mdW5jdGlvbikgKHZvaWQgKikpIDsKCgpleHRlcm4gaW50IHB0aHJlYWRfa2V5X2RlbGV0 ZSAocHRocmVhZF9rZXlfdCBfX2tleSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRzcGVjaWZp YyAocHRocmVhZF9rZXlfdCBfX2tleSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj b25zdCB2b2lkICpfX3BvaW50ZXIpIDsKCgpleHRlcm4gdm9pZCAqcHRocmVhZF9nZXRzcGVjaWZp YyAocHRocmVhZF9rZXlfdCBfX2tleSkgOwojIDU3NiAiL3Vzci9pbmNsdWRlL3B0aHJlYWQuaCIg MwpleHRlcm4gaW50IHB0aHJlYWRfb25jZSAocHRocmVhZF9vbmNlX3QgKl9fb25jZV9jb250cm9s LAogICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAoKl9faW5pdF9yb3V0aW5lKSAodm9pZCkp IDsKCgoKCgoKZXh0ZXJuIGludCBwdGhyZWFkX3NldGNhbmNlbHN0YXRlIChpbnQgX19zdGF0ZSwg aW50ICpfX29sZHN0YXRlKSA7CgoKCmV4dGVybiBpbnQgcHRocmVhZF9zZXRjYW5jZWx0eXBlIChp bnQgX190eXBlLCBpbnQgKl9fb2xkdHlwZSkgOwoKCmV4dGVybiBpbnQgcHRocmVhZF9jYW5jZWwg KHB0aHJlYWRfdCBfX3RocmVhZCkgOwoKCgoKZXh0ZXJuIHZvaWQgcHRocmVhZF90ZXN0Y2FuY2Vs ICh2b2lkKSA7CiMgNjEwICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAzCmV4dGVybiB2b2lkIF9w dGhyZWFkX2NsZWFudXBfcHVzaCAoc3RydWN0IF9wdGhyZWFkX2NsZWFudXBfYnVmZmVyICpfX2J1 ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19yb3V0aW5l KSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2Fy ZykgOwoKCgoKCgoKZXh0ZXJuIHZvaWQgX3B0aHJlYWRfY2xlYW51cF9wb3AgKHN0cnVjdCBfcHRo cmVhZF9jbGVhbnVwX2J1ZmZlciAqX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpbnQgX19leGVjdXRlKSA7CiMgNjMxICIvdXNyL2luY2x1ZGUvcHRocmVhZC5oIiAz CmV4dGVybiB2b2lkIF9wdGhyZWFkX2NsZWFudXBfcHVzaF9kZWZlciAoc3RydWN0IF9wdGhyZWFk X2NsZWFudXBfYnVmZmVyICpfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB2b2lkICgqX19yb3V0aW5lKSAodm9pZCAqKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB2b2lkICpfX2FyZykgOwojIDY0MiAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gdm9pZCBfcHRocmVhZF9jbGVhbnVwX3BvcF9yZXN0b3JlIChz dHJ1Y3QgX3B0aHJlYWRfY2xlYW51cF9idWZmZXIgKl9fYnVmZmVyLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19leGVjdXRlKSA7CgoKCgoKZXh0ZXJuIGlu dCBwdGhyZWFkX2dldGNwdWNsb2NraWQgKHB0aHJlYWRfdCBfX3RocmVhZF9pZCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGNsb2NraWRfdCAqX19jbG9ja19pZCkgOwoKCgoKIyAx ICIvdXNyL2luY2x1ZGUvYml0cy9zaWd0aHJlYWQuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9i aXRzL3NpZ3RocmVhZC5oIiAzCmV4dGVybiBpbnQgcHRocmVhZF9zaWdtYXNrIChpbnQgX19ob3cs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBfX3NpZ3NldF90ICogX19uZXdtYXNr LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zaWdzZXRfdCAqIF9fb2xkbWFzayk7CgoK ZXh0ZXJuIGludCBwdGhyZWFkX2tpbGwgKHB0aHJlYWRfdCBfX3RocmVhZCwgaW50IF9fc2lnbm8p IDsKIyA2NTYgIi91c3IvaW5jbHVkZS9wdGhyZWFkLmgiIDIgMwojIDY3MSAiL3Vzci9pbmNsdWRl L3B0aHJlYWQuaCIgMwpleHRlcm4gaW50IHB0aHJlYWRfYXRmb3JrICh2b2lkICgqX19wcmVwYXJl KSAodm9pZCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKCpfX3BhcmVudCkgKHZv aWQpLAogICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkICgqX19jaGlsZCkgKHZvaWQpKSA7 CgoKCgpleHRlcm4gdm9pZCBwdGhyZWFkX2tpbGxfb3RoZXJfdGhyZWFkc19ucCAodm9pZCkgOwoK fQojIDM4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRz L2d0aHItZGVmYXVsdC5oIiAyIDMKCnR5cGVkZWYgcHRocmVhZF9rZXlfdCBfX2d0aHJlYWRfa2V5 X3Q7CnR5cGVkZWYgcHRocmVhZF9vbmNlX3QgX19ndGhyZWFkX29uY2VfdDsKdHlwZWRlZiBwdGhy ZWFkX211dGV4X3QgX19ndGhyZWFkX211dGV4X3Q7CgoKCgoKCiNwcmFnbWEgd2VhayBwdGhyZWFk X29uY2UKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfa2V5X2NyZWF0ZQojcHJhZ21hIHdlYWsgcHRocmVh ZF9rZXlfZGVsZXRlCiNwcmFnbWEgd2VhayBwdGhyZWFkX2dldHNwZWNpZmljCiNwcmFnbWEgd2Vh ayBwdGhyZWFkX3NldHNwZWNpZmljCiNwcmFnbWEgd2VhayBwdGhyZWFkX2NyZWF0ZQoKI3ByYWdt YSB3ZWFrIHB0aHJlYWRfbXV0ZXhfbG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdHJ5 bG9jayAKI3ByYWdtYSB3ZWFrIHB0aHJlYWRfbXV0ZXhfdW5sb2NrIAojIDgwICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2d0aHItZGVmYXVsdC5oIiAz CnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9hY3RpdmVfcCAodm9pZCkKewogIHN0YXRpYyB2 b2lkICpjb25zdCBfX2d0aHJlYWRfYWN0aXZlX3B0ciA9ICh2b2lkICopICZwdGhyZWFkX2NyZWF0 ZTsKICByZXR1cm4gX19ndGhyZWFkX2FjdGl2ZV9wdHIgIT0gMDsKfQojIDQzNyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9ndGhyLWRlZmF1bHQuaCIg MwpzdGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfb25jZSAoX19ndGhyZWFkX29uY2VfdCAqb25j ZSwgdm9pZCAoKmZ1bmMpICh2b2lkKSkKewogIGlmIChfX2d0aHJlYWRfYWN0aXZlX3AgKCkpCiAg ICByZXR1cm4gcHRocmVhZF9vbmNlIChvbmNlLCBmdW5jKTsKICBlbHNlCiAgICByZXR1cm4gLTE7 Cn0KCnN0YXRpYyBpbmxpbmUgaW50Cl9fZ3RocmVhZF9rZXlfY3JlYXRlIChfX2d0aHJlYWRfa2V5 X3QgKmtleSwgdm9pZCAoKmR0b3IpICh2b2lkICopKQp7CiAgcmV0dXJuIHB0aHJlYWRfa2V5X2Ny ZWF0ZSAoa2V5LCBkdG9yKTsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFkX2tleV9kdG9y IChfX2d0aHJlYWRfa2V5X3Qga2V5LCB2b2lkICpwdHIpCnsKCiAgaWYgKHB0cikKICAgIHJldHVy biBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIDApOwogIGVsc2UKICAgIHJldHVybiAwOwp9Cgpz dGF0aWMgaW5saW5lIGludApfX2d0aHJlYWRfa2V5X2RlbGV0ZSAoX19ndGhyZWFkX2tleV90IGtl eSkKewogIHJldHVybiBwdGhyZWFkX2tleV9kZWxldGUgKGtleSk7Cn0KCnN0YXRpYyBpbmxpbmUg dm9pZCAqCl9fZ3RocmVhZF9nZXRzcGVjaWZpYyAoX19ndGhyZWFkX2tleV90IGtleSkKewogIHJl dHVybiBwdGhyZWFkX2dldHNwZWNpZmljIChrZXkpOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfc2V0c3BlY2lmaWMgKF9fZ3RocmVhZF9rZXlfdCBrZXksIGNvbnN0IHZvaWQgKnB0cikK ewogIHJldHVybiBwdGhyZWFkX3NldHNwZWNpZmljIChrZXksIHB0cik7Cn0KCnN0YXRpYyBpbmxp bmUgaW50Cl9fZ3RocmVhZF9tdXRleF9sb2NrIChfX2d0aHJlYWRfbXV0ZXhfdCAqbXV0ZXgpCnsK ICBpZiAoX19ndGhyZWFkX2FjdGl2ZV9wICgpKQogICAgcmV0dXJuIHB0aHJlYWRfbXV0ZXhfbG9j ayAobXV0ZXgpOwogIGVsc2UKICAgIHJldHVybiAwOwp9CgpzdGF0aWMgaW5saW5lIGludApfX2d0 aHJlYWRfbXV0ZXhfdHJ5bG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9f Z3RocmVhZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3RyeWxvY2sgKG11 dGV4KTsKICBlbHNlCiAgICByZXR1cm4gMDsKfQoKc3RhdGljIGlubGluZSBpbnQKX19ndGhyZWFk X211dGV4X3VubG9jayAoX19ndGhyZWFkX211dGV4X3QgKm11dGV4KQp7CiAgaWYgKF9fZ3RocmVh ZF9hY3RpdmVfcCAoKSkKICAgIHJldHVybiBwdGhyZWFkX211dGV4X3VubG9jayAobXV0ZXgpOwog IGVsc2UKICAgIHJldHVybiAwOwp9CiMgOTkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2 ODYtcGMtbGludXgtZ251L2JpdHMvZ3Roci5oIiAyIDMKIyAzOCAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jKytpby5oIiAyIDMKCm5hbWVzcGFjZSBz dGQKewoKICB0eXBlZGVmIGxvbmcgc3RyZWFtb2ZmOwogIHR5cGVkZWYgcHRyZGlmZl90IHN0cmVh bXNpemU7CgogIHR5cGVkZWYgcHRyZGlmZl90IHdzdHJlYW1zaXplOwoKICB0eXBlZGVmIGZwb3Nf dCBfX2Nfc3RyZWFtcG9zOwoKICB0eXBlZGVmIF9fZ3RocmVhZF9tdXRleF90IF9fY19sb2NrOwoK CiAgdHlwZWRlZiBGSUxFIF9fY19maWxlOwoKCiAgc3RydWN0IF9faW9zX2ZsYWdzCiAgewogICAg dHlwZWRlZiBzaG9ydCBfX2ludF90eXBlOwoKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9T X2Jvb2xhbHBoYSA9IDB4MDAwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2RlYyA9 IDB4MDAwMjsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2ZpeGVkID0gMHgwMDA0Owog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfaGV4ID0gMHgwMDA4OwogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfaW50ZXJuYWwgPSAweDAwMTA7CiAgICBzdGF0aWMgY29uc3QgX19p bnRfdHlwZSBfU19sZWZ0ID0gMHgwMDIwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf b2N0ID0gMHgwMDQwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfcmlnaHQgPSAweDAw ODA7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19zY2llbnRpZmljID0gMHgwMTAwOwog ICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfc2hvd2Jhc2UgPSAweDAyMDA7CiAgICBzdGF0 aWMgY29uc3QgX19pbnRfdHlwZSBfU19zaG93cG9pbnQgPSAweDA0MDA7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19zaG93cG9zID0gMHgwODAwOwogICAgc3RhdGljIGNvbnN0IF9faW50 X3R5cGUgX1Nfc2tpcHdzID0gMHgxMDAwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf dW5pdGJ1ZiA9IDB4MjAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3VwcGVyY2Fz ZSA9IDB4NDAwMDsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2FkanVzdGZpZWxkID0g MHgwMDIwIHwgMHgwMDgwIHwgMHgwMDEwOwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nf YmFzZWZpZWxkID0gMHgwMDAyIHwgMHgwMDQwIHwgMHgwMDA4OwogICAgc3RhdGljIGNvbnN0IF9f aW50X3R5cGUgX1NfZmxvYXRmaWVsZCA9IDB4MDEwMCB8IDB4MDAwNDsKCgogICAgc3RhdGljIGNv bnN0IF9faW50X3R5cGUgX1NfYmFkYml0ID0gMHgwMTsKICAgIHN0YXRpYyBjb25zdCBfX2ludF90 eXBlIF9TX2VvZmJpdCA9IDB4MDI7CiAgICBzdGF0aWMgY29uc3QgX19pbnRfdHlwZSBfU19mYWls Yml0ID0gMHgwNDsKCgogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1NfYXBwID0gMHgwMTsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX2F0ZSA9IDB4MDI7CiAgICBzdGF0aWMgY29u c3QgX19pbnRfdHlwZSBfU19iaW4gPSAweDA0OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUg X1NfaW4gPSAweDA4OwogICAgc3RhdGljIGNvbnN0IF9faW50X3R5cGUgX1Nfb3V0ID0gMHgxMDsK ICAgIHN0YXRpYyBjb25zdCBfX2ludF90eXBlIF9TX3RydW5jID0gMHgyMDsKICB9Owp9CiMgNDUg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnBvcy5oIiAyIDMKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9jd2NoYXIiIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9jd2NoYXIiIDMKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jdGlt ZSIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCiMgNjQgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N0aW1lIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5n IDo6Y2xvY2tfdDsKICB1c2luZyA6OnRpbWVfdDsKICB1c2luZyA6OnRtOwoKICB1c2luZyA6OmNs b2NrOwogIHVzaW5nIDo6ZGlmZnRpbWU7CiAgdXNpbmcgOjpta3RpbWU7CiAgdXNpbmcgOjp0aW1l OwogIHVzaW5nIDo6YXNjdGltZTsKICB1c2luZyA6OmN0aW1lOwogIHVzaW5nIDo6Z210aW1lOwog IHVzaW5nIDo6bG9jYWx0aW1lOwogIHVzaW5nIDo6c3RyZnRpbWU7Cn0KIyA1MiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvY3djaGFyIiAyIDMKCgojIDEgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAxIDMKIyA0OCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9n Y2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyA0OSAi L3Vzci9pbmNsdWRlL3djaGFyLmgiIDIgMwojIDg1ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIgMwp0 eXBlZGVmIF9fbWJzdGF0ZV90IG1ic3RhdGVfdDsKIyAxMDUgIi91c3IvaW5jbHVkZS93Y2hhci5o IiAzCnN0cnVjdCB0bTsKCgpleHRlcm4gIkMiIHsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY3B5ICh3 Y2hhcl90ICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICog X19zcmMpIDsKCmV4dGVybiB3Y2hhcl90ICp3Y3NuY3B5ICh3Y2hhcl90ICogX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKQog ICAgIDsKCgpleHRlcm4gd2NoYXJfdCAqd2NzY2F0ICh3Y2hhcl90ICogX19kZXN0LAogICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19zcmMpIDsKCmV4dGVybiB3Y2hhcl90 ICp3Y3NuY2F0ICh3Y2hhcl90ICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgd2NoYXJfdCAqIF9fc3JjLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gaW50IHdjc2Nt cCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMikKICAgICA7CgpleHRl cm4gaW50IHdjc25jbXAgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIs IHNpemVfdCBfX24pCiAgICAgOwoKCgpleHRlcm4gaW50IHdjc2Nhc2VjbXAgKGNvbnN0IHdjaGFy X3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIpIDsKCgpleHRlcm4gaW50IHdjc25jYXNlY21w IChjb25zdCB3Y2hhcl90ICpfX3MxLCBjb25zdCB3Y2hhcl90ICpfX3MyLAogICAgICAgICAgICAg ICAgICAgICAgICBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIGludCBfX3djc2Nhc2VjbXBfbCAo Y29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAqX19zMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKZXh0ZXJuIGludCBfX3djc25jYXNlY21w X2wgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgpleHRl cm4gaW50IHdjc2NvbGwgKGNvbnN0IHdjaGFyX3QgKl9fczEsIGNvbnN0IHdjaGFyX3QgKl9fczIp IDsKCgoKZXh0ZXJuIHNpemVfdCB3Y3N4ZnJtICh3Y2hhcl90ICogX19zMSwKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19zMiwgc2l6ZV90IF9fbikgOwoKCgoKCgoKZXh0 ZXJuIGludCBfX3djc2NvbGxfbCAoY29uc3Qgd2NoYXJfdCAqX19zMSwgY29uc3Qgd2NoYXJfdCAq X19zMiwKICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvYykgOwoKCgpleHRl cm4gc2l6ZV90IF9fd2NzeGZybV9sICh3Y2hhcl90ICpfX3MxLCBjb25zdCB3Y2hhcl90ICpfX3My LAogICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19uLCBfX2xvY2FsZV90IF9fbG9j KSA7CgoKZXh0ZXJuIHdjaGFyX3QgKndjc2R1cCAoY29uc3Qgd2NoYXJfdCAqX19zKSA7CgoKCmV4 dGVybiB3Y2hhcl90ICp3Y3NjaHIgKGNvbnN0IHdjaGFyX3QgKl9fd2NzLCB3Y2hhcl90IF9fd2Mp CiAgICAgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3JjaHIgKGNvbnN0IHdjaGFyX3QgKl9fd2NzLCB3 Y2hhcl90IF9fd2MpCiAgICAgOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndjc2Nocm51bCAoY29uc3Qg d2NoYXJfdCAqX19zLCB3Y2hhcl90IF9fd2MpCiAgICAgOwoKCgoKZXh0ZXJuIHNpemVfdCB3Y3Nj c3BuIChjb25zdCB3Y2hhcl90ICpfX3djcywgY29uc3Qgd2NoYXJfdCAqX19yZWplY3QpCiAgICAg OwoKCmV4dGVybiBzaXplX3Qgd2Nzc3BuIChjb25zdCB3Y2hhcl90ICpfX3djcywgY29uc3Qgd2No YXJfdCAqX19hY2NlcHQpCiAgICAgOwoKZXh0ZXJuIHdjaGFyX3QgKndjc3BicmsgKGNvbnN0IHdj aGFyX3QgKl9fd2NzLCBjb25zdCB3Y2hhcl90ICpfX2FjY2VwdCkKICAgICA7CgpleHRlcm4gd2No YXJfdCAqd2Nzc3RyIChjb25zdCB3Y2hhcl90ICpfX2hheXN0YWNrLCBjb25zdCB3Y2hhcl90ICpf X25lZWRsZSkKICAgICA7CgoKCmV4dGVybiB3Y2hhcl90ICp3Y3N3Y3MgKGNvbnN0IHdjaGFyX3Qg Kl9faGF5c3RhY2ssIGNvbnN0IHdjaGFyX3QgKl9fbmVlZGxlKQogICAgIDsKCgoKZXh0ZXJuIHdj aGFyX3QgKndjc3RvayAod2NoYXJfdCAqIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgY29u c3Qgd2NoYXJfdCAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiog X19wdHIpIDsKCgpleHRlcm4gc2l6ZV90IHdjc2xlbiAoY29uc3Qgd2NoYXJfdCAqX19zKSA7CgoK CmV4dGVybiBzaXplX3Qgd2NzbmxlbiAoY29uc3Qgd2NoYXJfdCAqX19zLCBzaXplX3QgX19tYXhs ZW4pCiAgICAgOwoKCgoKZXh0ZXJuIHdjaGFyX3QgKndtZW1jaHIgKGNvbnN0IHdjaGFyX3QgKl9f cywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgICAgOwoKCmV4dGVybiBpbnQgd21lbWNtcCAo Y29uc3Qgd2NoYXJfdCAqIF9fczEsCiAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAq IF9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCmV4dGVybiB3Y2hhcl90ICp3bWVtY3B5ICh3Y2hh cl90ICogX19zMSwKICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX3My LCBzaXplX3QgX19uKSA7CgoKCmV4dGVybiB3Y2hhcl90ICp3bWVtbW92ZSAod2NoYXJfdCAqX19z MSwgY29uc3Qgd2NoYXJfdCAqX19zMiwgc2l6ZV90IF9fbikKICAgICA7CgoKZXh0ZXJuIHdjaGFy X3QgKndtZW1zZXQgKHdjaGFyX3QgKl9fcywgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pIDsKCgoK CmV4dGVybiB3Y2hhcl90ICp3bWVtcGNweSAod2NoYXJfdCAqIF9fczEsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCgoK CmV4dGVybiB3aW50X3QgYnRvd2MgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGludCB3Y3RvYiAod2lu dF90IF9fYykgOwoKCgpleHRlcm4gaW50IG1ic2luaXQgKGNvbnN0IG1ic3RhdGVfdCAqX19wcykg OwoKCgpleHRlcm4gc2l6ZV90IG1icnRvd2MgKHdjaGFyX3QgKiBfX3B3YywKICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBjaGFyICogX19zLCBzaXplX3QgX19uLAogICAgICAgICAgICAgICAg ICAgICAgIG1ic3RhdGVfdCAqX19wKSA7CgoKZXh0ZXJuIHNpemVfdCB3Y3J0b21iIChjaGFyICog X19zLCB3Y2hhcl90IF9fd2MsCiAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0ZV90ICogX19w cykgOwoKCmV4dGVybiBzaXplX3QgX19tYnJsZW4gKGNvbnN0IGNoYXIgKiBfX3MsIHNpemVfdCBf X24sCiAgICAgICAgICAgICAgICAgICAgICAgIG1ic3RhdGVfdCAqIF9fcHMpIDsKZXh0ZXJuIHNp emVfdCBtYnJsZW4gKGNvbnN0IGNoYXIgKiBfX3MsIHNpemVfdCBfX24sCiAgICAgICAgICAgICAg ICAgICAgICBtYnN0YXRlX3QgKiBfX3BzKSA7CiMgMjk3ICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg MwpleHRlcm4gc2l6ZV90IG1ic3J0b3djcyAod2NoYXJfdCAqIF9fZHN0LAogICAgICAgICAgICAg ICAgICAgICAgICAgY29uc3QgY2hhciAqKiBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAg ICAgICAgICAgICAgICAgbWJzdGF0ZV90ICogX19wcykgOwoKCgpleHRlcm4gc2l6ZV90IHdjc3J0 b21icyAoY2hhciAqIF9fZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJf dCAqKiBfX3NyYywgc2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgbWJzdGF0 ZV90ICogX19wcykgOwoKCgoKCmV4dGVybiBzaXplX3QgbWJzbnJ0b3djcyAod2NoYXJfdCAqIF9f ZHN0LAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiogX19zcmMsIHNpemVf dCBfX25tYywKICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19sZW4sIG1ic3RhdGVf dCAqIF9fcHMpIDsKCgoKZXh0ZXJuIHNpemVfdCB3Y3NucnRvbWJzIChjaGFyICogX19kc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqKiBfX3NyYywKICAgICAgICAg ICAgICAgICAgICAgICAgICBzaXplX3QgX19ud2MsIHNpemVfdCBfX2xlbiwKICAgICAgICAgICAg ICAgICAgICAgICAgICBtYnN0YXRlX3QgKiBfX3BzKSA7CgoKCgoKCmV4dGVybiBpbnQgd2N3aWR0 aCAod2NoYXJfdCBfX2MpIDsKCgoKZXh0ZXJuIGludCB3Y3N3aWR0aCAoY29uc3Qgd2NoYXJfdCAq X19zLCBzaXplX3QgX19uKSA7CgoKCgoKZXh0ZXJuIGRvdWJsZSB3Y3N0b2QgKGNvbnN0IHdjaGFy X3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRyKSA7 CgoKCmV4dGVybiBmbG9hdCB3Y3N0b2YgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgIHdjaGFyX3QgKiogX19lbmRwdHIpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHdj c3RvbGQgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqIF9fZW5kcHRyKSA7CgoKCgoKZXh0ZXJuIGxvbmcgaW50IHdjc3RvbCAoY29u c3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBf X2VuZHB0ciwgaW50IF9fYmFzZSkgOwoKCgpleHRlcm4gdW5zaWduZWQgbG9uZyBpbnQgd2NzdG91 bCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHdjaGFyX3QgKiogX19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwojIDM3OSAiL3Vzci9p bmNsdWRlL3djaGFyLmgiIDMKCmV4dGVybiBsb25nIGxvbmcgaW50IHdjc3RvbGwgKGNvbnN0IHdj aGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3QgKiog X19lbmRwdHIsIGludCBfX2Jhc2UpCiAgICAgOwoKCgoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgbG9u ZyBpbnQgd2NzdG91bGwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSkgOwojIDQxMCAiL3Vzci9pbmNs dWRlL3djaGFyLmgiIDMKZXh0ZXJuIGxvbmcgaW50IF9fd2NzdG9sX2wgKGNvbnN0IHdjaGFyX3Qg KiBfX25wdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9fZW5kcHRy LCBpbnQgX19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xv YykgOwoKZXh0ZXJuIHVuc2lnbmVkIGxvbmcgaW50IF9fd2NzdG91bF9sIChjb25zdCB3Y2hhcl90 ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdjaGFyX3Qg KiogX19lbmRwdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9f YmFzZSwgX19sb2NhbGVfdCBfX2xvYykgOwoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9s bF9sIChjb25zdCB3Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCBfX2Jhc2UsIF9fbG9jYWxlX3QgX19sb2MpIDsKCgpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3djc3RvdWxsX2wgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgX19iYXNlLCBf X2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBkb3VibGUgX193Y3N0b2RfbCAoY29uc3Qg d2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqIF9f ZW5kcHRyLCBfX2xvY2FsZV90IF9fbG9jKQogICAgIDsKCmV4dGVybiBmbG9hdCBfX3djc3RvZl9s IChjb25zdCB3Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJf dCAqKiBfX2VuZHB0ciwgX19sb2NhbGVfdCBfX2xvYykKICAgICA7CgpleHRlcm4gbG9uZyBkb3Vi bGUgX193Y3N0b2xkX2wgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2xvY2FsZV90IF9fbG9jKSA7CgoKCgoKZXh0ZXJuIGRvdWJsZSBfX3djc3Rv ZF9pbnRlcm5hbCAoY29uc3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwgaW50IF9fZ3JvdXApCiAgICAgOwpleHRl cm4gZmxvYXQgX193Y3N0b2ZfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdHIsCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwgaW50IF9fZ3Jv dXApCiAgICAgOwpleHRlcm4gbG9uZyBkb3VibGUgX193Y3N0b2xkX2ludGVybmFsIChjb25zdCB3 Y2hhcl90ICogX19ucHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19ncm91cCkgOwoKCmV4dGVybiBsb25nIGludCBfX3djc3RvbF9pbnRlcm5hbCAoY29u c3Qgd2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3 Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCmV4dGVybiB1bnNpZ25lZCBsb25nIGludCBfX3dj c3RvdWxfaW50ZXJuYWwgKGNvbnN0IHdjaGFyX3QgKiBfX25wdCwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCAqKiBfX2VuZHB0ciwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IF9fYmFzZSwgaW50IF9fZ3Jv dXApIDsKCgoKCmV4dGVybiBsb25nIGxvbmcgaW50IF9fd2NzdG9sbF9pbnRlcm5hbCAoY29uc3Qg d2NoYXJfdCAqIF9fbnB0ciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB3Y2hhcl90ICoqIF9fZW5kcHRyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBfX2Jhc2UsIGludCBfX2dyb3VwKSA7CgoKCgpleHRlcm4gdW5zaWduZWQgbG9u ZyBsb25nIGludCBfX3djc3RvdWxsX2ludGVybmFsIChjb25zdCB3Y2hhcl90ICoKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ucHRyLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3Y2hhcl90ICoqCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZW5kcHRy LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQg X19iYXNlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBpbnQgX19ncm91cCkgOwojIDUyOCAiL3Vzci9pbmNsdWRlL3djaGFyLmgiIDMKZXh0ZXJuIHdj aGFyX3QgKndjcGNweSAod2NoYXJfdCAqX19kZXN0LCBjb25zdCB3Y2hhcl90ICpfX3NyYykgOwoK CgpleHRlcm4gd2NoYXJfdCAqd2NwbmNweSAod2NoYXJfdCAqX19kZXN0LCBjb25zdCB3Y2hhcl90 ICpfX3NyYywgc2l6ZV90IF9fbikKICAgICA7CgoKCgoKCgpleHRlcm4gaW50IGZ3aWRlIChfX0ZJ TEUgKl9fZnAsIGludCBfX21vZGUpIDsKCgoKZXh0ZXJuIGludCBmd3ByaW50ZiAoX19GSUxFICog X19zdHJlYW0sCiAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwg Li4uKQogICAgIDsKCmV4dGVybiBpbnQgd3ByaW50ZiAoY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0 LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCBzd3ByaW50ZiAod2NoYXJfdCAqIF9fcywgc2l6ZV90 IF9fbiwKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LCAuLi4p CiAgICAgOwoKCmV4dGVybiBpbnQgdmZ3cHJpbnRmIChfX0ZJTEUgKiBfX3MsCiAgICAgICAgICAg ICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAg ICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50IHZ3cHJpbnRmIChjb25z dCB3Y2hhcl90ICogX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0 IF9fYXJnKQogICAgIDsKCgpleHRlcm4gaW50IHZzd3ByaW50ZiAod2NoYXJfdCAqIF9fcywgc2l6 ZV90IF9fbiwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwK ICAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgoKZXh0 ZXJuIGludCBmd3NjYW5mIChfX0ZJTEUgKiBfX3N0cmVhbSwKICAgICAgICAgICAgICAgICAgICBj b25zdCB3Y2hhcl90ICogX19mb3JtYXQsIC4uLikKICAgICA7CgpleHRlcm4gaW50IHdzY2FuZiAo Y29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LCAuLi4pCiAgICAgOwoKZXh0ZXJuIGludCBzd3NjYW5m IChjb25zdCB3Y2hhcl90ICogX19zLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IHdjaGFyX3Qg KiBfX2Zvcm1hdCwgLi4uKQogICAgIDsKCgoKCmV4dGVybiBpbnQgdmZ3c2NhbmYgKF9fRklMRSAq IF9fcywKICAgICAgICAgICAgICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LAogICAg ICAgICAgICAgICAgICAgICBfX2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50 IHZ3c2NhbmYgKGNvbnN0IHdjaGFyX3QgKiBfX2Zvcm1hdCwKICAgICAgICAgICAgICAgICAgICBf X2dudWNfdmFfbGlzdCBfX2FyZykKICAgICA7CgpleHRlcm4gaW50IHZzd3NjYW5mIChjb25zdCB3 Y2hhcl90ICogX19zLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB3Y2hhcl90ICogX19mb3Jt YXQsCiAgICAgICAgICAgICAgICAgICAgIF9fZ251Y192YV9saXN0IF9fYXJnKQogICAgIDsKCgoK CmV4dGVybiB3aW50X3QgZmdldHdjIChfX0ZJTEUgKl9fc3RyZWFtKSA7CmV4dGVybiB3aW50X3Qg Z2V0d2MgKF9fRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IGdldHdjaGFyICh2b2lk KSA7CgoKCmV4dGVybiB3aW50X3QgZnB1dHdjICh3Y2hhcl90IF9fd2MsIF9fRklMRSAqX19zdHJl YW0pIDsKZXh0ZXJuIHdpbnRfdCBwdXR3YyAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFt KSA7CgoKZXh0ZXJuIHdpbnRfdCBwdXR3Y2hhciAod2NoYXJfdCBfX3djKSA7CgoKCgpleHRlcm4g d2NoYXJfdCAqZmdldHdzICh3Y2hhcl90ICogX193cywgaW50IF9fbiwKICAgICAgICAgICAgICAg ICAgICAgICAgX19GSUxFICogX19zdHJlYW0pIDsKCgpleHRlcm4gaW50IGZwdXR3cyAoY29uc3Qg d2NoYXJfdCAqIF9fd3MsCiAgICAgICAgICAgICAgICAgICBfX0ZJTEUgKiBfX3N0cmVhbSkgOwoK CgpleHRlcm4gd2ludF90IHVuZ2V0d2MgKHdpbnRfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSA7 CgoKCgoKZXh0ZXJuIHdpbnRfdCBnZXR3Y191bmxvY2tlZCAoX19GSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gd2ludF90IGdldHdjaGFyX3VubG9ja2VkICh2b2lkKSA7CgoKZXh0ZXJuIHdpbnRfdCBm Z2V0d2NfdW5sb2NrZWQgKF9fRklMRSAqX19zdHJlYW0pIDsKCgpleHRlcm4gd2ludF90IGZwdXR3 Y191bmxvY2tlZCAod2NoYXJfdCBfX3djLCBfX0ZJTEUgKl9fc3RyZWFtKSA7CgoKCmV4dGVybiB3 aW50X3QgcHV0d2NfdW5sb2NrZWQgKHdjaGFyX3QgX193YywgX19GSUxFICpfX3N0cmVhbSkgOwpl eHRlcm4gd2ludF90IHB1dHdjaGFyX3VubG9ja2VkICh3Y2hhcl90IF9fd2MpIDsKCgoKZXh0ZXJu IHdjaGFyX3QgKmZnZXR3c191bmxvY2tlZCAod2NoYXJfdCAqIF9fd3MsIGludCBfX24sCiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fRklMRSAqIF9fc3RyZWFtKSA7CgoKZXh0ZXJu IGludCBmcHV0d3NfdW5sb2NrZWQgKGNvbnN0IHdjaGFyX3QgKiBfX3dzLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgX19GSUxFICogX19zdHJlYW0pIDsKCgoKCgoKZXh0ZXJuIHNpemVfdCB3 Y3NmdGltZSAod2NoYXJfdCAqIF9fcywgc2l6ZV90IF9fbWF4c2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgICAgY29uc3Qgd2NoYXJfdCAqIF9fZm9ybWF0LAogICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBzdHJ1Y3QgdG0gKiBfX3RwKSA7CiMgNjgwICIvdXNyL2luY2x1ZGUvd2NoYXIuaCIg Mwp9CiMgNTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMiAzCiMgNjkgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y2hhciIgMwpuYW1lc3BhY2Ugc3RkCnsKICB1c2lu ZyA6Om1ic3RhdGVfdDsKfQojIDEzMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY3djaGFy IiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90OwoKICB1c2luZyA6OmJ0b3djOwog IHVzaW5nIDo6ZmdldHdjOwogIHVzaW5nIDo6ZmdldHdzOwogIHVzaW5nIDo6ZnB1dHdjOwogIHVz aW5nIDo6ZnB1dHdzOwogIHVzaW5nIDo6ZndpZGU7CiAgdXNpbmcgOjpmd3ByaW50ZjsKICB1c2lu ZyA6OmZ3c2NhbmY7CiAgdXNpbmcgOjpnZXR3YzsKICB1c2luZyA6OmdldHdjaGFyOwogIHVzaW5n IDo6bWJybGVuOwogIHVzaW5nIDo6bWJydG93YzsKICB1c2luZyA6Om1ic2luaXQ7CiAgdXNpbmcg OjptYnNydG93Y3M7CiAgdXNpbmcgOjpwdXR3YzsKICB1c2luZyA6OnB1dHdjaGFyOwogIHVzaW5n IDo6c3dwcmludGY7CiAgdXNpbmcgOjpzd3NjYW5mOwogIHVzaW5nIDo6dW5nZXR3YzsKICB1c2lu ZyA6OnZmd3ByaW50ZjsKICB1c2luZyA6OnZmd3NjYW5mOwogIHVzaW5nIDo6dnN3cHJpbnRmOwog IHVzaW5nIDo6dnN3c2NhbmY7CiAgdXNpbmcgOjp2d3ByaW50ZjsKICB1c2luZyA6OnZ3c2NhbmY7 CiAgdXNpbmcgOjp3Y3J0b21iOwogIHVzaW5nIDo6d2NzY2F0OwogIHVzaW5nIDo6d2NzY21wOwog IHVzaW5nIDo6d2NzY29sbDsKICB1c2luZyA6Ondjc2NweTsKICB1c2luZyA6Ondjc2NzcG47CiAg dXNpbmcgOjp3Y3NmdGltZTsKICB1c2luZyA6Ondjc2xlbjsKICB1c2luZyA6Ondjc25jYXQ7CiAg dXNpbmcgOjp3Y3NuY21wOwogIHVzaW5nIDo6d2NzbmNweTsKICB1c2luZyA6Ondjc3J0b21iczsK ICB1c2luZyA6Ondjc3NwbjsKICB1c2luZyA6Ondjc3RvZDsKICB1c2luZyA6Ondjc3RvZjsKICB1 c2luZyA6Ondjc3RvazsKICB1c2luZyA6Ondjc3RvbDsKICB1c2luZyA6Ondjc3RvdWw7CiAgdXNp bmcgOjp3Y3N4ZnJtOwogIHVzaW5nIDo6d2N0b2I7CiAgdXNpbmcgOjp3bWVtY21wOwogIHVzaW5n IDo6d21lbWNweTsKICB1c2luZyA6OndtZW1tb3ZlOwogIHVzaW5nIDo6d21lbXNldDsKICB1c2lu ZyA6OndwcmludGY7CiAgdXNpbmcgOjp3c2NhbmY7CgogIHVzaW5nIDo6d2NzY2hyOwoKICBpbmxp bmUgd2NoYXJfdCoKICB3Y3NjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVy biB3Y3NjaHIoY29uc3RfY2FzdDxjb25zdCB3Y2hhcl90Kj4oX19wKSwgX19jKTsgfQoKICB1c2lu ZyA6Ondjc3Bicms7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3Bicmsod2NoYXJfdCogX19zMSwg d2NoYXJfdCogX19zMikKICB7IHJldHVybiB3Y3NwYnJrKGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJf dCo+KF9fczEpLCBfX3MyKTsgfQoKICB1c2luZyA6Ondjc3JjaHI7CgogIGlubGluZSB3Y2hhcl90 KgogIHdjc3JjaHIod2NoYXJfdCogX19wLCB3Y2hhcl90IF9fYykKICB7IHJldHVybiB3Y3NyY2hy KGNvbnN0X2Nhc3Q8Y29uc3Qgd2NoYXJfdCo+KF9fcCksIF9fYyk7IH0KCiAgdXNpbmcgOjp3Y3Nz dHI7CgogIGlubGluZSB3Y2hhcl90KgogIHdjc3N0cih3Y2hhcl90KiBfX3MxLCB3Y2hhcl90KiBf X3MyKQogIHsgcmV0dXJuIHdjc3N0cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3MxKSwg X19zMik7IH0KCiAgdXNpbmcgOjp3bWVtY2hyOwoKICBpbmxpbmUgd2NoYXJfdCoKICB3bWVtY2hy KHdjaGFyX3QqIF9fcCwgd2NoYXJfdCBfX2MsIHNpemVfdCBfX24pCiAgeyByZXR1cm4gd21lbWNo cihjb25zdF9jYXN0PGNvbnN0IHdjaGFyX3QqPihfX3ApLCBfX2MsIF9fbik7IH0KfQoKCgoKCgoK bmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdXNpbmcgOjp3Y3N0b2xkOwogIHVzaW5nIDo6d2NzdG9s bDsKICB1c2luZyA6Ondjc3RvdWxsOwp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9j eHg6Ondjc3RvbGQ7CiAgdXNpbmcgX19nbnVfY3h4Ojp3Y3N0b2xsOwogIHVzaW5nIF9fZ251X2N4 eDo6d2NzdG91bGw7Cn0KIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9mcG9z LmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1N0YXRlVD4K ICAgIGNsYXNzIGZwb3MKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX1N0YXRlVCBf X3N0YXRlX3R5cGU7CgogICAgcHJpdmF0ZToKICAgICAgc3RyZWFtb2ZmIF9NX29mZjsKICAgICAg X19zdGF0ZV90eXBlIF9NX3N0OwoKICAgIHB1YmxpYzoKICAgICAgX19zdGF0ZV90eXBlCiAgICAg IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gX01fc3Q7IH0KCiAgICAgIHZvaWQKICAgICAgc3RhdGUo X19zdGF0ZV90eXBlIF9fc3QpIHsgX01fc3QgPSBfX3N0OyB9CgoKCiAgICAgIGZwb3MoKTogX01f b2ZmKHN0cmVhbW9mZigpKSwgX01fc3QoX19zdGF0ZV90eXBlKCkpIHsgfQoKICAgICAgZnBvcyhz dHJlYW1vZmYgX19vZmYsIF9fc3RhdGVfdHlwZSBfX3N0ID0gX19zdGF0ZV90eXBlKCkpCiAgICAg IDogX01fb2ZmKF9fb2ZmKSwgX01fc3QoX19zdCkgeyB9CgogICAgICBvcGVyYXRvciBzdHJlYW1v ZmYoKSBjb25zdCB7IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIGZwb3MmCiAgICAgIG9wZXJhdG9y Kz0oc3RyZWFtb2ZmIF9fb2ZmKSB7IF9NX29mZiArPSBfX29mZjsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBmcG9zJgogICAgICBvcGVyYXRvci09KHN0cmVhbW9mZiBfX29mZikgeyBfTV9vZmYgLT0g X19vZmY7IHJldHVybiAqdGhpczsgfQoKICAgICAgZnBvcwogICAgICBvcGVyYXRvcisoc3RyZWFt b2ZmIF9fb2ZmKQogICAgICB7CiAgICAgICAgZnBvcyBfX3QoKnRoaXMpOwogICAgICAgIF9fdCAr PSBfX29mZjsKICAgICAgICByZXR1cm4gX190OwogICAgICB9CgogICAgICBmcG9zCiAgICAgIG9w ZXJhdG9yLShzdHJlYW1vZmYgX19vZmYpCiAgICAgIHsKICAgICAgICBmcG9zIF9fdCgqdGhpcyk7 CiAgICAgICAgX190IC09IF9fb2ZmOwogICAgICAgIHJldHVybiBfX3Q7CiAgICAgIH0KCiAgICAg IGJvb2wKICAgICAgb3BlcmF0b3I9PShjb25zdCBmcG9zJiBfX3BvcykgY29uc3QKICAgICAgeyBy ZXR1cm4gX01fb2ZmID09IF9fcG9zLl9NX29mZjsgfQoKICAgICAgYm9vbAogICAgICBvcGVyYXRv ciE9KGNvbnN0IGZwb3MmIF9fcG9zKSBjb25zdAogICAgICB7IHJldHVybiBfTV9vZmYgIT0gX19w b3MuX01fb2ZmOyB9CgogICAgICBzdHJlYW1vZmYKICAgICAgX01fcG9zaXRpb24oKSBjb25zdCB7 IHJldHVybiBfTV9vZmY7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcG9zaXRpb24oc3RyZWFtb2Zm IF9fb2ZmKSB7IF9NX29mZiA9IF9fb2ZmOyB9CiAgICB9OwoKCiAgdHlwZWRlZiBmcG9zPG1ic3Rh dGVfdD4gc3RyZWFtcG9zOwoKICB0eXBlZGVmIGZwb3M8bWJzdGF0ZV90PiB3c3RyZWFtcG9zOwoK fQojIDQ3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3Nmd2QiIDIgMwojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAzCiMgMzQgIi91c3Iv bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwojIDM1ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoKbmFtZXNwYWNlIHN0 ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoKICB2b2lkCiAgX190 aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRfY2FzdCh2b2lkKTsK CiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2xv Z2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2RvbWFpbl9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlkX2FyZ3VtZW50KGNv bnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJvcihjb25zdCBjaGFy KiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3QgY2hhciogX19zKTsK CiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJv d19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd191bmRl cmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Rocm93X2lvc19mYWls dXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv aW9zZndkIiAyIDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNf aW9zOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFy X3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiA+ CiAgICBjbGFzcyBiYXNpY19pc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX29z dHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNo YXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfaW9zdHJlYW07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4s CiAgICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ID4KICAgIGNs YXNzIGJhc2ljX3N0cmluZ2J1ZjsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0NoYXJUPiwKICAgICAgICAgICB0eXBlbmFtZSBfQWxs b2MgPSBhbGxvY2F0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtOwoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0 czxfQ2hhclQ+LAogICAgICAgICAgIHR5cGVuYW1lIF9BbGxvYyA9IGFsbG9jYXRvcjxfQ2hhclQ+ ID4KICAgIGNsYXNzIGJhc2ljX29zdHJpbmdzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4sCiAgICAgICAgICAg dHlwZW5hbWUgX0FsbG9jID0gYWxsb2NhdG9yPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfc3Ry aW5nc3RyZWFtOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMg PSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNsYXNzIGJhc2ljX2ZpbGVidWY7CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFy VD4gPgogICAgY2xhc3MgYmFzaWNfaWZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFz aWNfb2ZzdHJlYW07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cyA9IGNoYXJfdHJhaXRzPF9DaGFyVD4gPgogICAgY2xhc3MgYmFzaWNfZnN0cmVhbTsKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzID0gY2hhcl90cmFpdHM8X0No YXJUPiA+CiAgICBjbGFzcyBpc3RyZWFtYnVmX2l0ZXJhdG9yOwoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMgPSBjaGFyX3RyYWl0czxfQ2hhclQ+ID4KICAgIGNs YXNzIG9zdHJlYW1idWZfaXRlcmF0b3I7CgoKCiAgY2xhc3MgaW9zX2Jhc2U7CgoKICB0eXBlZGVm IGJhc2ljX2lvczxjaGFyPiBpb3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcj4gc3Ry ZWFtYnVmOwogIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxjaGFyPiBpc3RyZWFtOwogIHR5cGVkZWYg YmFzaWNfb3N0cmVhbTxjaGFyPiBvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08Y2hh cj4gaW9zdHJlYW07CiAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8Y2hhcj4gc3RyaW5nYnVmOwog IHR5cGVkZWYgYmFzaWNfaXN0cmluZ3N0cmVhbTxjaGFyPiBpc3RyaW5nc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTxjaGFyPiBvc3RyaW5nc3RyZWFtOwogIHR5cGVkZWYgYmFz aWNfc3RyaW5nc3RyZWFtPGNoYXI+IHN0cmluZ3N0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZpbGVi dWY8Y2hhcj4gZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3RyZWFtPGNoYXI+IGlmc3RyZWFt OwogIHR5cGVkZWYgYmFzaWNfb2ZzdHJlYW08Y2hhcj4gb2ZzdHJlYW07CiAgdHlwZWRlZiBiYXNp Y19mc3RyZWFtPGNoYXI+IGZzdHJlYW07CgogIHR5cGVkZWYgYmFzaWNfaW9zPHdjaGFyX3Q+IHdp b3M7CiAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4gd3N0cmVhbWJ1ZjsKICB0eXBl ZGVmIGJhc2ljX2lzdHJlYW08d2NoYXJfdD4gd2lzdHJlYW07CiAgdHlwZWRlZiBiYXNpY19vc3Ry ZWFtPHdjaGFyX3Q+IHdvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfaW9zdHJlYW08d2NoYXJfdD4g d2lvc3RyZWFtOwogIHR5cGVkZWYgYmFzaWNfc3RyaW5nYnVmPHdjaGFyX3Q+IHdzdHJpbmdidWY7 CiAgdHlwZWRlZiBiYXNpY19pc3RyaW5nc3RyZWFtPHdjaGFyX3Q+IHdpc3RyaW5nc3RyZWFtOwog IHR5cGVkZWYgYmFzaWNfb3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3b3N0cmluZ3N0cmVhbTsKICB0 eXBlZGVmIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PiB3c3RyaW5nc3RyZWFtOwogIHR5cGVk ZWYgYmFzaWNfZmlsZWJ1Zjx3Y2hhcl90PiB3ZmlsZWJ1ZjsKICB0eXBlZGVmIGJhc2ljX2lmc3Ry ZWFtPHdjaGFyX3Q+IHdpZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX29mc3RyZWFtPHdjaGFyX3Q+ IHdvZnN0cmVhbTsKICB0eXBlZGVmIGJhc2ljX2ZzdHJlYW08d2NoYXJfdD4gd2ZzdHJlYW07Cn0K IyAxOSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIgMgoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1 ICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19h c3NlcnRfZmFpbCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgY29uc3QgY2hh ciAqX19mdW5jdGlvbikKICAgICA7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwg KGludCBfX2Vycm51bSwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQg X19hc3NlcnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGlu dCBfX2xpbmUpCiAgICAgOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2Fz c2VydCIgMiAzCiMgMjEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiIDIKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMSAzCiMgMzggIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvZXhjZXB0aW9uIiAxIDMKIyA0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvZXhj ZXB0aW9uIiAzCmV4dGVybiAiQysrIiB7CgpuYW1lc3BhY2Ugc3RkCnsKCgoKCgoKICBjbGFzcyBl eGNlcHRpb24KICB7CiAgcHVibGljOgogICAgZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0KICAgIHZp cnR1YWwgfmV4Y2VwdGlvbigpIHRocm93KCk7CgoKICAgIHZpcnR1YWwgY29uc3QgY2hhciogd2hh dCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICBjbGFzcyBiYWRfZXhjZXB0aW9uIDogcHVibGlj IGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfZXhjZXB0aW9uKCkgdGhyb3coKSB7IH0K CgogICAgdmlydHVhbCB+YmFkX2V4Y2VwdGlvbigpIHRocm93KCk7CiAgfTsKCgogIHR5cGVkZWYg dm9pZCAoKnRlcm1pbmF0ZV9oYW5kbGVyKSAoKTsKCiAgdHlwZWRlZiB2b2lkICgqdW5leHBlY3Rl ZF9oYW5kbGVyKSAoKTsKCgogIHRlcm1pbmF0ZV9oYW5kbGVyIHNldF90ZXJtaW5hdGUodGVybWlu YXRlX2hhbmRsZXIpIHRocm93KCk7CgoKICB2b2lkIHRlcm1pbmF0ZSgpIDsKCgogIHVuZXhwZWN0 ZWRfaGFuZGxlciBzZXRfdW5leHBlY3RlZCh1bmV4cGVjdGVkX2hhbmRsZXIpIHRocm93KCk7CgoK ICB2b2lkIHVuZXhwZWN0ZWQoKSA7CiMgOTggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4 Y2VwdGlvbiIgMwogIGJvb2wgdW5jYXVnaHRfZXhjZXB0aW9uKCkgdGhyb3coKTsKfQoKbmFtZXNw YWNlIF9fZ251X2N4eAp7CiMgMTExICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9leGNlcHRp b24iIDMKICB2b2lkIF9fdmVyYm9zZV90ZXJtaW5hdGVfaGFuZGxlciAoKTsKfQoKfQojIDM5ICIv dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMiAzCgpleHRlcm4gIkMrKyIgewoK bmFtZXNwYWNlIF9fY3h4YWJpdjEKewogIGNsYXNzIF9fY2xhc3NfdHlwZV9pbmZvOwp9CiMgNTUg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3R5cGVpbmZvIiAzCm5hbWVzcGFjZSBzdGQKewoK CgogIGNsYXNzIHR5cGVfaW5mbwogIHsKICBwdWJsaWM6CgoKCgogICAgdmlydHVhbCB+dHlwZV9p bmZvKCk7CgogIHByaXZhdGU6CgogICAgdHlwZV9pbmZvJiBvcGVyYXRvcj0oY29uc3QgdHlwZV9p bmZvJik7CiAgICB0eXBlX2luZm8oY29uc3QgdHlwZV9pbmZvJik7CgogIHByb3RlY3RlZDoKICAg IGNvbnN0IGNoYXIgKl9fbmFtZTsKCiAgcHJvdGVjdGVkOgogICAgZXhwbGljaXQgdHlwZV9pbmZv KGNvbnN0IGNoYXIgKl9fbik6IF9fbmFtZShfX24pIHsgfQoKICBwdWJsaWM6CgoKCiAgICBjb25z dCBjaGFyKiBuYW1lKCkgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZTsgfQojIDk4ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi90eXBlaW5mbyIgMwogICAgYm9vbCBiZWZvcmUoY29uc3QgdHlw ZV9pbmZvJiBfX2FyZykgY29uc3QKICAgIHsgcmV0dXJuIF9fbmFtZSA8IF9fYXJnLl9fbmFtZTsg fQogICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7 IHJldHVybiBfX25hbWUgPT0gX19hcmcuX19uYW1lOyB9CgogICAgYm9vbCBvcGVyYXRvciE9KGNv bnN0IHR5cGVfaW5mbyYgX19hcmcpIGNvbnN0CiAgICB7IHJldHVybiAhb3BlcmF0b3I9PShfX2Fy Zyk7IH0KCgogIHB1YmxpYzoKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19wb2ludGVyX3AoKSBjb25z dDsKCiAgICB2aXJ0dWFsIGJvb2wgX19pc19mdW5jdGlvbl9wKCkgY29uc3Q7CgoKCgoKCgogICAg dmlydHVhbCBib29sIF9fZG9fY2F0Y2goY29uc3QgdHlwZV9pbmZvICpfX3Rocl90eXBlLCB2b2lk ICoqX190aHJfb2JqLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgX19vdXRl cikgY29uc3Q7CgoKICAgIHZpcnR1YWwgYm9vbCBfX2RvX3VwY2FzdChjb25zdCBfX2N4eGFiaXYx OjpfX2NsYXNzX3R5cGVfaW5mbyAqX190YXJnZXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdm9pZCAqKl9fb2JqX3B0cikgY29uc3Q7CiAgfTsKCgoKICBjbGFzcyBiYWRfY2FzdCA6IHB1 YmxpYyBleGNlcHRpb24KICB7CiAgcHVibGljOgogICAgYmFkX2Nhc3QoKSB0aHJvdygpIHsgfQoK CiAgICB2aXJ0dWFsIH5iYWRfY2FzdCgpIHRocm93KCk7CiAgfTsKCgogIGNsYXNzIGJhZF90eXBl aWQgOiBwdWJsaWMgZXhjZXB0aW9uCiAgewogIHB1YmxpYzoKICAgIGJhZF90eXBlaWQgKCkgdGhy b3coKSB7IH0KCgogICAgdmlydHVhbCB+YmFkX3R5cGVpZCgpIHRocm93KCk7CiAgfTsKfQoKfQoj IDIyICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBwIiAyCgojIDEgIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL2FsZ29yaXRobSIgMSAzCiMgNjUgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2FsZ29yaXRobSIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvYmFzZS5oIiAxIDMKIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnb2Jhc2UuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nz dHJpbmciIDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jc3RyaW5nIiAzCgoK CiMgMSAiL3Vzci9pbmNsdWRlL3N0cmluZy5oIiAxIDMKIyAyOCAiL3Vzci9pbmNsdWRlL3N0cmlu Zy5oIiAzCmV4dGVybiAiQyIgewoKCgoKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYt cGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNCAiL3Vzci9pbmNsdWRl L3N0cmluZy5oIiAyIDMKCgoKZXh0ZXJuIHZvaWQgKm1lbWNweSAodm9pZCAqIF9fZGVzdCwKICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7CgoKZXh0 ZXJuIHZvaWQgKm1lbW1vdmUgKHZvaWQgKl9fZGVzdCwgY29uc3Qgdm9pZCAqX19zcmMsIHNpemVf dCBfX24pCiAgICAgOwoKCgoKCmV4dGVybiB2b2lkICptZW1jY3B5ICh2b2lkICogX19kZXN0LCBj b25zdCB2b2lkICogX19zcmMsCiAgICAgICAgICAgICAgICAgICAgICBpbnQgX19jLCBzaXplX3Qg X19uKQogICAgIDsKCgoKCmV4dGVybiB2b2lkICptZW1zZXQgKHZvaWQgKl9fcywgaW50IF9fYywg c2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgbWVtY21wIChjb25zdCB2b2lkICpfX3MxLCBjb25z dCB2b2lkICpfX3MyLCBzaXplX3QgX19uKQogICAgIDsKCgpleHRlcm4gdm9pZCAqbWVtY2hyIChj b25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIDsKCgoKCmV4dGVybiB2 b2lkICpyYXdtZW1jaHIgKGNvbnN0IHZvaWQgKl9fcywgaW50IF9fYykgOwoKCmV4dGVybiB2b2lk ICptZW1yY2hyIChjb25zdCB2b2lkICpfX3MsIGludCBfX2MsIHNpemVfdCBfX24pCiAgICAgIDsK CgoKCmV4dGVybiBjaGFyICpzdHJjcHkgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3Ny YykKICAgICA7CgpleHRlcm4gY2hhciAqc3RybmNweSAoY2hhciAqIF9fZGVzdCwKICAgICAgICAg ICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX3NyYywgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBj aGFyICpzdHJjYXQgKGNoYXIgKiBfX2Rlc3QsIGNvbnN0IGNoYXIgKiBfX3NyYykKICAgICA7Cgpl eHRlcm4gY2hhciAqc3RybmNhdCAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjLAog ICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbikgOwoKCmV4dGVybiBpbnQgc3RyY21wIChj b25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyKQogICAgIDsKCmV4dGVybiBpbnQgc3Ry bmNtcCAoY29uc3QgY2hhciAqX19zMSwgY29uc3QgY2hhciAqX19zMiwgc2l6ZV90IF9fbikKICAg ICA7CgoKZXh0ZXJuIGludCBzdHJjb2xsIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpf X3MyKQogICAgIDsKCmV4dGVybiBzaXplX3Qgc3RyeGZybSAoY2hhciAqIF9fZGVzdCwKICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICogX19zcmMsIHNpemVfdCBfX24pIDsKIyAxMTEg Ii91c3IvaW5jbHVkZS9zdHJpbmcuaCIgMwpleHRlcm4gaW50IF9fc3RyY29sbF9sIChjb25zdCBj aGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3MyLCBfX2xvY2FsZV90IF9fbCkKICAgICA7CgpleHRl cm4gc2l6ZV90IF9fc3RyeGZybV9sIChjaGFyICpfX2Rlc3QsIGNvbnN0IGNoYXIgKl9fc3JjLCBz aXplX3QgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xvY2FsZV90IF9fbCkgOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmR1cCAoY29uc3QgY2hhciAqX19zKSA7CgoKCgoKCmV4dGVybiBj aGFyICpzdHJuZHVwIChjb25zdCBjaGFyICpfX3N0cmluZywgc2l6ZV90IF9fbikKICAgICA7CiMg MTU1ICIvdXNyL2luY2x1ZGUvc3RyaW5nLmgiIDMKZXh0ZXJuIGNoYXIgKnN0cmNociAoY29uc3Qg Y2hhciAqX19zLCBpbnQgX19jKSA7CgpleHRlcm4gY2hhciAqc3RycmNociAoY29uc3QgY2hhciAq X19zLCBpbnQgX19jKSA7CgoKCgpleHRlcm4gY2hhciAqc3RyY2hybnVsIChjb25zdCBjaGFyICpf X3MsIGludCBfX2MpIDsKCgoKCmV4dGVybiBzaXplX3Qgc3RyY3NwbiAoY29uc3QgY2hhciAqX19z LCBjb25zdCBjaGFyICpfX3JlamVjdCkKICAgICA7CgoKZXh0ZXJuIHNpemVfdCBzdHJzcG4gKGNv bnN0IGNoYXIgKl9fcywgY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgOwoKZXh0ZXJuIGNoYXIg KnN0cnBicmsgKGNvbnN0IGNoYXIgKl9fcywgY29uc3QgY2hhciAqX19hY2NlcHQpCiAgICAgOwoK ZXh0ZXJuIGNoYXIgKnN0cnN0ciAoY29uc3QgY2hhciAqX19oYXlzdGFjaywgY29uc3QgY2hhciAq X19uZWVkbGUpCiAgICAgOwoKCgpleHRlcm4gY2hhciAqc3RyY2FzZXN0ciAoY29uc3QgY2hhciAq X19oYXlzdGFjaywgY29uc3QgY2hhciAqX19uZWVkbGUpCiAgICAgOwoKCgpleHRlcm4gY2hhciAq c3RydG9rIChjaGFyICogX19zLCBjb25zdCBjaGFyICogX19kZWxpbSkKICAgICA7CgoKCmV4dGVy biBjaGFyICpfX3N0cnRva19yIChjaGFyICogX19zLAogICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgY2hhciAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgICBjaGFyICoqIF9f c2F2ZV9wdHIpIDsKCmV4dGVybiBjaGFyICpzdHJ0b2tfciAoY2hhciAqIF9fcywgY29uc3QgY2hh ciAqIF9fZGVsaW0sCiAgICAgICAgICAgICAgICAgICAgICAgY2hhciAqKiBfX3NhdmVfcHRyKSA7 CgoKCgoKCmV4dGVybiB2b2lkICptZW1tZW0gKGNvbnN0IHZvaWQgKl9faGF5c3RhY2ssIHNpemVf dCBfX2hheXN0YWNrbGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCB2b2lkICpfX25lZWRs ZSwgc2l6ZV90IF9fbmVlZGxlbGVuKQogICAgIDsKCgoKZXh0ZXJuIHZvaWQgKl9fbWVtcGNweSAo dm9pZCAqIF9fZGVzdCwKICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3Jj LCBzaXplX3QgX19uKSA7CmV4dGVybiB2b2lkICptZW1wY3B5ICh2b2lkICogX19kZXN0LAogICAg ICAgICAgICAgICAgICAgICAgY29uc3Qgdm9pZCAqIF9fc3JjLCBzaXplX3QgX19uKSA7CgoKCgpl eHRlcm4gc2l6ZV90IHN0cmxlbiAoY29uc3QgY2hhciAqX19zKSA7CgoKCgpleHRlcm4gc2l6ZV90 IHN0cm5sZW4gKGNvbnN0IGNoYXIgKl9fc3RyaW5nLCBzaXplX3QgX19tYXhsZW4pCiAgICAgOwoK CgoKZXh0ZXJuIGNoYXIgKnN0cmVycm9yIChpbnQgX19lcnJudW0pIDsKCgoKZXh0ZXJuIGNoYXIg KnN0cmVycm9yX3IgKGludCBfX2Vycm51bSwgY2hhciAqX19idWYsIHNpemVfdCBfX2J1Zmxlbikg OwoKCgoKZXh0ZXJuIHZvaWQgX19iemVybyAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCmV4 dGVybiB2b2lkIGJjb3B5IChjb25zdCB2b2lkICpfX3NyYywgdm9pZCAqX19kZXN0LCBzaXplX3Qg X19uKSA7CgoKZXh0ZXJuIHZvaWQgYnplcm8gKHZvaWQgKl9fcywgc2l6ZV90IF9fbikgOwoKCmV4 dGVybiBpbnQgYmNtcCAoY29uc3Qgdm9pZCAqX19zMSwgY29uc3Qgdm9pZCAqX19zMiwgc2l6ZV90 IF9fbikKICAgICA7CgoKZXh0ZXJuIGNoYXIgKmluZGV4IChjb25zdCBjaGFyICpfX3MsIGludCBf X2MpIDsKCgpleHRlcm4gY2hhciAqcmluZGV4IChjb25zdCBjaGFyICpfX3MsIGludCBfX2MpIDsK CgoKZXh0ZXJuIGludCBmZnMgKGludCBfX2kpIDsKCgoKCmV4dGVybiBpbnQgZmZzbCAobG9uZyBp bnQgX19sKSA7CgoKCgoKCgpleHRlcm4gaW50IHN0cmNhc2VjbXAgKGNvbnN0IGNoYXIgKl9fczEs IGNvbnN0IGNoYXIgKl9fczIpCiAgICAgOwoKCmV4dGVybiBpbnQgc3RybmNhc2VjbXAgKGNvbnN0 IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIsIHNpemVfdCBfX24pCiAgICAgOwoKCgoKCmV4 dGVybiBpbnQgX19zdHJjYXNlY21wX2wgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9f czIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbG9jYWxlX3QgX19sb2MpIDsKCmV4dGVy biBpbnQgX19zdHJuY2FzZWNtcF9sIChjb25zdCBjaGFyICpfX3MxLCBjb25zdCBjaGFyICpfX3My LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbiwgX19sb2NhbGVfdCBfX2xv YykKICAgICA7CgoKCgoKZXh0ZXJuIGNoYXIgKnN0cnNlcCAoY2hhciAqKiBfX3N0cmluZ3AsCiAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKiBfX2RlbGltKSA7CgoKCgpleHRlcm4gaW50 IHN0cnZlcnNjbXAgKGNvbnN0IGNoYXIgKl9fczEsIGNvbnN0IGNoYXIgKl9fczIpCiAgICAgOwoK CmV4dGVybiBjaGFyICpzdHJzaWduYWwgKGludCBfX3NpZykgOwoKCmV4dGVybiBjaGFyICpfX3N0 cGNweSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjKQogICAgIDsKZXh0ZXJuIGNo YXIgKnN0cGNweSAoY2hhciAqIF9fZGVzdCwgY29uc3QgY2hhciAqIF9fc3JjKQogICAgIDsKCgoK ZXh0ZXJuIGNoYXIgKl9fc3RwbmNweSAoY2hhciAqIF9fZGVzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhciAqIF9fc3JjLCBzaXplX3QgX19uKSA7CmV4dGVybiBjaGFyICpzdHBu Y3B5IChjaGFyICogX19kZXN0LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciAqIF9f c3JjLCBzaXplX3QgX19uKSA7CgoKZXh0ZXJuIGNoYXIgKnN0cmZyeSAoY2hhciAqX19zdHJpbmcp IDsKCgpleHRlcm4gdm9pZCAqbWVtZnJvYiAodm9pZCAqX19zLCBzaXplX3QgX19uKSA7CgoKCgoK CmV4dGVybiBjaGFyICpiYXNlbmFtZSAoY29uc3QgY2hhciAqX19maWxlbmFtZSkgOwojIDM2NCAi L3Vzci9pbmNsdWRlL3N0cmluZy5oIiAzCn0KIyA1MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvY3N0cmluZyIgMiAzCiMgNzcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NzdHJpbmci IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjptZW1jcHk7CiAgdXNpbmcgOjptZW1tb3ZlOwog IHVzaW5nIDo6c3RyY3B5OwogIHVzaW5nIDo6c3RybmNweTsKICB1c2luZyA6OnN0cmNhdDsKICB1 c2luZyA6OnN0cm5jYXQ7CiAgdXNpbmcgOjptZW1jbXA7CiAgdXNpbmcgOjpzdHJjbXA7CiAgdXNp bmcgOjpzdHJjb2xsOwogIHVzaW5nIDo6c3RybmNtcDsKICB1c2luZyA6OnN0cnhmcm07CiAgdXNp bmcgOjpzdHJjc3BuOwogIHVzaW5nIDo6c3Ryc3BuOwogIHVzaW5nIDo6c3RydG9rOwogIHVzaW5n IDo6bWVtc2V0OwogIHVzaW5nIDo6c3RyZXJyb3I7CiAgdXNpbmcgOjpzdHJsZW47CgogIHVzaW5n IDo6bWVtY2hyOwoKICBpbmxpbmUgdm9pZCoKICBtZW1jaHIodm9pZCogX19wLCBpbnQgX19jLCBz aXplX3QgX19uKQogIHsgcmV0dXJuIG1lbWNocihjb25zdF9jYXN0PGNvbnN0IHZvaWQqPihfX3Ap LCBfX2MsIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJjaHI7CgogIGlubGluZSBjaGFyKgogIHN0cmNo cihjaGFyKiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJjaHIoY29uc3Rf Y2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9fbik7IH0KCiAgdXNpbmcgOjpzdHJwYnJrOwoKICBp bmxpbmUgY2hhcioKICBzdHJwYnJrKGNoYXIqIF9fczEsIGNvbnN0IGNoYXIqIF9fczIpCiAgeyBy ZXR1cm4gX19idWlsdGluX3N0cnBicmsoY29uc3RfY2FzdDxjb25zdCBjaGFyKj4oX19zMSksIF9f czIpOyB9CgogIHVzaW5nIDo6c3RycmNocjsKCiAgaW5saW5lIGNoYXIqCiAgc3RycmNocihjaGFy KiBfX3MxLCBpbnQgX19uKQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zdHJyY2hyKGNvbnN0X2Nhc3Q8 Y29uc3QgY2hhcio+KF9fczEpLCBfX24pOyB9CgogIHVzaW5nIDo6c3Ryc3RyOwoKICBpbmxpbmUg Y2hhcioKICBzdHJzdHIoY2hhciogX19zMSwgY29uc3QgY2hhciogX19zMikKICB7IHJldHVybiBf X2J1aWx0aW5fc3Ryc3RyKGNvbnN0X2Nhc3Q8Y29uc3QgY2hhcio+KF9fczEpLCBfX3MyKTsgfQp9 CiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NsaW1pdHMiIDEgMwojIDQ4ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAzCgojIDEgIi91c3IvbG9jYWwvbGliL2dj Yy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUvbGltaXRzLmgiIDEgMwojIDUwICIv dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbGltaXRzIiAyIDMKIyA2NyAiL3Vzci9sb2NhbC9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKIyAxICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9uZXciIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9uZXciIDMKZXh0ZXJuICJDKysiIHsKCm5hbWVzcGFjZSBzdGQKewoKCiAgY2xhc3MgYmFkX2Fs bG9jIDogcHVibGljIGV4Y2VwdGlvbgogIHsKICBwdWJsaWM6CiAgICBiYWRfYWxsb2MoKSB0aHJv dygpIHsgfQoKCiAgICB2aXJ0dWFsIH5iYWRfYWxsb2MoKSB0aHJvdygpOwogIH07CgogIHN0cnVj dCBub3Rocm93X3QgeyB9OwogIGV4dGVybiBjb25zdCBub3Rocm93X3Qgbm90aHJvdzsKCgogIHR5 cGVkZWYgdm9pZCAoKm5ld19oYW5kbGVyKSgpOwoKICBuZXdfaGFuZGxlciBzZXRfbmV3X2hhbmRs ZXIobmV3X2hhbmRsZXIpIHRocm93KCk7Cn0KIyA3OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvbmV3IiAzCnZvaWQqIG9wZXJhdG9yIG5ldyhzdGQ6OnNpemVfdCkgdGhyb3cgKHN0ZDo6YmFk X2FsbG9jKTsKdm9pZCogb3BlcmF0b3IgbmV3W10oc3RkOjpzaXplX3QpIHRocm93IChzdGQ6OmJh ZF9hbGxvYyk7CnZvaWQgb3BlcmF0b3IgZGVsZXRlKHZvaWQqKSB0aHJvdygpOwp2b2lkIG9wZXJh dG9yIGRlbGV0ZVtdKHZvaWQqKSB0aHJvdygpOwp2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXpl X3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCogb3BlcmF0b3IgbmV3W10o c3RkOjpzaXplX3QsIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVyYXRv ciBkZWxldGUodm9pZCosIGNvbnN0IHN0ZDo6bm90aHJvd190JikgdGhyb3coKTsKdm9pZCBvcGVy YXRvciBkZWxldGVbXSh2b2lkKiwgY29uc3Qgc3RkOjpub3Rocm93X3QmKSB0aHJvdygpOwoKCmlu bGluZSB2b2lkKiBvcGVyYXRvciBuZXcoc3RkOjpzaXplX3QsIHZvaWQqIF9fcCkgdGhyb3coKSB7 IHJldHVybiBfX3A7IH0KaW5saW5lIHZvaWQqIG9wZXJhdG9yIG5ld1tdKHN0ZDo6c2l6ZV90LCB2 b2lkKiBfX3ApIHRocm93KCkgeyByZXR1cm4gX19wOyB9CgoKaW5saW5lIHZvaWQgb3BlcmF0b3Ig ZGVsZXRlICh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwppbmxpbmUgdm9pZCBvcGVyYXRvciBk ZWxldGVbXSh2b2lkKiwgdm9pZCopIHRocm93KCkgeyB9OwoKfQojIDcwICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKCgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMSAzCiMgNTMgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvdHlwZV90cmFpdHMuaCIgMwojIDkwICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVfdHJhaXRzLmgiIDMKc3RydWN0IF9fdHJ1ZV90eXBlIHt9 OwpzdHJ1Y3QgX19mYWxzZV90eXBlIHt9OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9f dHlwZV90cmFpdHMgewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIHRoaXNfZHVtbXlfbWVtYmVyX211 c3RfYmVfZmlyc3Q7CiMgMTEzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3R5cGVf dHJhaXRzLmgiIDMKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25z dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9v cGVyYXRvcjsKICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX2ZhbHNlX3R5cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgp0ZW1wbGF0ZTw+IHN0 cnVjdCBfX3R5cGVfdHJhaXRzPGJvb2w+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJp dmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2 aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf YXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9k ZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxjaGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUg aGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBo YXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsK CnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90cmFpdHM8c2lnbmVkIGNoYXI+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBj aGFyPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9jb25zdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0cnVjdG9y OwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3BlcmF0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9fdHlwZV90 cmFpdHM8d2NoYXJfdD4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1 bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50 X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVj dCBfX3R5cGVfdHJhaXRzPHNob3J0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZp YWxfZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9jb3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fz c2lnbm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVz dHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9fdHlwZV90cmFpdHM8dW5zaWduZWQgc2hvcnQ+IHsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90 eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czxpbnQ+IHsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190 cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3Ry dWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlz X1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3RyYWl0czx1bnNpZ25lZCBp bnQ+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVj dG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7 CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX190eXBlX3Ry YWl0czxsb25nPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8dW5zaWduZWQgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190 cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3Ry aXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlh bF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFs X2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1w bGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPGxvbmcgbG9uZz4gewogICB0eXBlZGVmIF9fdHJ1 ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVl X3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaXNfUE9EX3R5 cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJhaXRzPHVuc2lnbmVkIGxvbmcgbG9u Zz4gewogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0 b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsK ICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwog ICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYg X190cnVlX3R5cGUgaXNfUE9EX3R5cGU7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfX3R5cGVfdHJh aXRzPGZsb2F0PiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVmYXVsdF9j b25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9jb3B5X2NvbnN0 cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1Y3RvcjsKICAg dHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4gc3RydWN0IF9f dHlwZV90cmFpdHM8ZG91YmxlPiB7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxf ZGVmYXVsdF9jb25zdHJ1Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9j b3B5X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Fzc2ln bm1lbnRfb3BlcmF0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfZGVzdHJ1 Y3RvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBpc19QT0RfdHlwZTsKfTsKCnRlbXBsYXRlPD4g c3RydWN0IF9fdHlwZV90cmFpdHM8bG9uZyBkb3VibGU+IHsKICAgdHlwZWRlZiBfX3RydWVfdHlw ZSBoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBl IGhhc190cml2aWFsX2NvcHlfY29uc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5cGUgaGFz X3RyaXZpYWxfYXNzaWdubWVudF9vcGVyYXRvcjsKICAgdHlwZWRlZiBfX3RydWVfdHlwZSBoYXNf dHJpdmlhbF9kZXN0cnVjdG9yOwogICB0eXBlZGVmIF9fdHJ1ZV90eXBlIGlzX1BPRF90eXBlOwp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IF9fdHlwZV90cmFpdHM8X1RwKj4gewogICB0 eXBlZGVmIF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2RlZmF1bHRfY29uc3RydWN0b3I7CiAgIHR5 cGVkZWYgX190cnVlX3R5cGUgaGFzX3RyaXZpYWxfY29weV9jb25zdHJ1Y3RvcjsKICAgdHlwZWRl ZiBfX3RydWVfdHlwZSBoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yOwogICB0eXBlZGVm IF9fdHJ1ZV90eXBlIGhhc190cml2aWFsX2Rlc3RydWN0b3I7CiAgIHR5cGVkZWYgX190cnVlX3R5 cGUgaXNfUE9EX3R5cGU7Cn07CgoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4gc3RydWN0IF9Jc19p bnRlZ2VyIHsKICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+ IHN0cnVjdCBfSXNfaW50ZWdlcjxib29sPiB7CiAgdHlwZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdy YWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxjaGFyPiB7CiAgdHlwZWRlZiBf X3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdlcjxz aWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxh dGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8dW5zaWduZWQgY2hhcj4gewogIHR5cGVkZWYgX190cnVl X3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8d2NoYXJf dD4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1 Y3QgX0lzX2ludGVnZXI8c2hvcnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIHNob3J0PiB7CiAgdHlw ZWRlZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50 ZWdlcjxpbnQ+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsKfTsKCnRlbXBsYXRl PD4gc3RydWN0IF9Jc19pbnRlZ2VyPHVuc2lnbmVkIGludD4gewogIHR5cGVkZWYgX190cnVlX3R5 cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZz4gewog IHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFsOwp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lz X2ludGVnZXI8dW5zaWduZWQgbG9uZz4gewogIHR5cGVkZWYgX190cnVlX3R5cGUgX0ludGVncmFs Owp9OwoKdGVtcGxhdGU8PiBzdHJ1Y3QgX0lzX2ludGVnZXI8bG9uZyBsb25nPiB7CiAgdHlwZWRl ZiBfX3RydWVfdHlwZSBfSW50ZWdyYWw7Cn07Cgp0ZW1wbGF0ZTw+IHN0cnVjdCBfSXNfaW50ZWdl cjx1bnNpZ25lZCBsb25nIGxvbmc+IHsKICB0eXBlZGVmIF9fdHJ1ZV90eXBlIF9JbnRlZ3JhbDsK fTsKCnRlbXBsYXRlPHR5cGVuYW1lIF9UcD4gc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3Igewog ICB0eXBlZGVmIF9fZmFsc2VfdHlwZSBfTm9ybWFsOwp9OwoKCm5hbWVzcGFjZSBfX2dudV9jeHgK ewogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4gY2xh c3MgX19ub3JtYWxfaXRlcmF0b3I7Cn0KCnRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlw ZW5hbWUgX0NvbnRhaW5lcj4Kc3RydWN0IF9Jc19ub3JtYWxfaXRlcmF0b3I8IF9fZ251X2N4eDo6 X19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiA+IHsKICAgdHlwZWRlZiBf X3RydWVfdHlwZSBfTm9ybWFsOwp9OwojIDczICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvYmFzZS5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDEgMwojIDY4ICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX3R5cGVzLmgiIDMKCm5hbWVzcGFjZSBz dGQKewojIDgwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9i YXNlX3R5cGVzLmgiIDMKICBzdHJ1Y3QgaW5wdXRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3Qg b3V0cHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGZvcndhcmRfaXRlcmF0b3JfdGFnIDog cHVibGljIGlucHV0X2l0ZXJhdG9yX3RhZyB7fTsKCiAgc3RydWN0IGJpZGlyZWN0aW9uYWxfaXRl cmF0b3JfdGFnIDogcHVibGljIGZvcndhcmRfaXRlcmF0b3JfdGFnIHt9OwoKICBzdHJ1Y3QgcmFu ZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgOiBwdWJsaWMgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90 YWcge307CiMgMTAwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv cl9iYXNlX3R5cGVzLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2F0ZWdvcnksIHR5cGVuYW1l IF9UcCwgdHlwZW5hbWUgX0Rpc3RhbmNlID0gcHRyZGlmZl90LAogICAgICAgICAgIHR5cGVuYW1l IF9Qb2ludGVyID0gX1RwKiwgdHlwZW5hbWUgX1JlZmVyZW5jZSA9IF9UcCY+CiAgICBzdHJ1Y3Qg aXRlcmF0b3IgewoKICAgICAgdHlwZWRlZiBfQ2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7Cgog ICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICAgICAgdHlwZWRlZiBfRGlzdGFuY2UgZGlm ZmVyZW5jZV90eXBlOwoKICAgICAgdHlwZWRlZiBfUG9pbnRlciBwb2ludGVyOwoKICAgICAgdHlw ZWRlZiBfUmVmZXJlbmNlIHJlZmVyZW5jZTsKICAgIH07CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9JdGVyYXRvcj4KICAgIHN0cnVjdCBpdGVyYXRvcl90cmFpdHMgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9JdGVyYXRvcjo6aXRlcmF0b3JfY2F0ZWdvcnkgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjp2YWx1ZV90eXBlIHZhbHVlX3R5cGU7 CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0l0ZXJhdG9yOjpkaWZmZXJlbmNlX3R5cGUgZGlmZmVy ZW5jZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cG9pbnRlciBwb2lu dGVyOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9JdGVyYXRvcjo6cmVmZXJlbmNlIHJlZmVyZW5j ZTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIHN0cnVjdCBpdGVyYXRvcl90 cmFpdHM8X1RwKj4gewogICAgICB0eXBlZGVmIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnIGl0 ZXJhdG9yX2NhdGVnb3J5OwogICAgICB0eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwogICAgICB0eXBl ZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RwKiBwb2ludGVy OwogICAgICB0eXBlZGVmIF9UcCYgcmVmZXJlbmNlOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX1RwPgogICAgc3RydWN0IGl0ZXJhdG9yX3RyYWl0czxjb25zdCBfVHAqPiB7CiAgICAgIHR5 cGVkZWYgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7CiAgICAg IHR5cGVkZWYgX1RwIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVu Y2VfdHlwZTsKICAgICAgdHlwZWRlZiBjb25zdCBfVHAqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYg Y29uc3QgX1RwJiByZWZlcmVuY2U7CiAgICB9OwoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf SXRlcj4KICAgIGlubGluZSB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRv cl9jYXRlZ29yeQogICAgX19pdGVyYXRvcl9jYXRlZ29yeShjb25zdCBfSXRlciYpCiAgICB7IHJl dHVybiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSgp OyB9Cgp9CiMgNzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNl LmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9y X2Jhc2VfZnVuY3MuaCIgMSAzCiMgNjggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2l0ZXJhdG9yX2Jhc2VfZnVuY3MuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL2JpdHMvY29uY2VwdF9jaGVjay5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9jb25jZXB0X2NoZWNrLmgiIDMKIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAyIDMKCgoKCm5hbWVzcGFjZSBz dGQKewp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICBpbmxpbmUgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgX19kaXN0 YW5jZShfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QsIGlucHV0 X2l0ZXJhdG9yX3RhZykKICB7CgogICAKCiAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lu cHV0SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uID0gMDsKICAgIHdoaWxlIChfX2ZpcnN0 ICE9IF9fbGFzdCkgewogICAgICArK19fZmlyc3Q7ICsrX19uOwogICAgfQogICAgcmV0dXJuIF9f bjsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgaW5saW5l IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJl bmNlX3R5cGUKICBfX2Rpc3RhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFu ZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCiAgewoKICAgCiAgICByZXR1cm4gX19sYXN0IC0gX19maXJzdDsKICB9CiMgMTEx ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvcl9iYXNlX2Z1bmNz LmgiIDMKdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcmF0b3I+CiAgaW5saW5lIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogIGRpc3Rh bmNlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICB7Cgog ICAgcmV0dXJuIF9fZGlzdGFuY2UoX19maXJzdCwgX19sYXN0LCBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsKICB9Cgp0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBf RGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBfX2FkdmFuY2UoX0lucHV0SXRlciYgX19pLCBfRGlz dGFuY2UgX19uLCBpbnB1dF9pdGVyYXRvcl90YWcpCiAgewoKICAgCiAgICB3aGlsZSAoX19uLS0p ICsrX19pOwogIH0KCnRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcmF0b3IsIHR5 cGVuYW1lIF9EaXN0YW5jZT4KICBpbmxpbmUgdm9pZAogIF9fYWR2YW5jZShfQmlkaXJlY3Rpb25h bEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24sCiAgICAgICAgICAgIGJpZGlyZWN0aW9uYWxf aXRlcmF0b3JfdGFnKQogIHsKCiAgIAoKICAgIGlmIChfX24gPiAwKQogICAgICB3aGlsZSAoX19u LS0pICsrX19pOwogICAgZWxzZQogICAgICB3aGlsZSAoX19uKyspIC0tX19pOwogIH0KCnRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlPgog IGlubGluZSB2b2lkCiAgX19hZHZhbmNlKF9SYW5kb21BY2Nlc3NJdGVyYXRvciYgX19pLCBfRGlz dGFuY2UgX19uLAogICAgICAgICAgICByYW5kb21fYWNjZXNzX2l0ZXJhdG9yX3RhZykKICB7Cgog ICAKICAgIF9faSArPSBfX247CiAgfQojIDE2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfaXRlcmF0b3JfYmFzZV9mdW5jcy5oIiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1 dEl0ZXJhdG9yLCB0eXBlbmFtZSBfRGlzdGFuY2U+CiAgaW5saW5lIHZvaWQKICBhZHZhbmNlKF9J bnB1dEl0ZXJhdG9yJiBfX2ksIF9EaXN0YW5jZSBfX24pCiAgewoKICAgIF9fYWR2YW5jZShfX2ks IF9fbiwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2kpKTsKICB9Cgp9CiMgNzUgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDIgMwojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDEgMwojIDY4ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCm5hbWVzcGFjZSBzdGQKewoj IDg5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgY2xhc3MgcmV2ZXJzZV9pdGVyYXRvcgog ICAgOiBwdWJsaWMgaXRlcmF0b3I8dHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46 Oml0ZXJhdG9yX2NhdGVnb3J5LAogICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlLAogICAg ICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBv aW50ZXIsCiAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0 ZXJhdG9yPjo6cmVmZXJlbmNlPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3Ig Y3VycmVudDsKCiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0l0ZXJhdG9yIGl0ZXJhdG9yX3R5 cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9p bnRlcjsKCiAgICBwdWJsaWM6CgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3IoKSB7IH0KCgoKCiAg ICAgIGV4cGxpY2l0CiAgICAgIHJldmVyc2VfaXRlcmF0b3IoaXRlcmF0b3JfdHlwZSBfX3gpIDog Y3VycmVudChfX3gpIHsgfQoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25zdCByZXZlcnNl X2l0ZXJhdG9yJiBfX3gpCiAgICAgIDogY3VycmVudChfX3guY3VycmVudCkgeyB9CgoKCgoKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXI+CiAgICAgICAgcmV2ZXJzZV9pdGVyYXRvcihjb25z dCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyPiYgX194KQogICAgICAgIDogY3VycmVudChfX3guYmFz ZSgpKSB7IH0KCgoKCiAgICAgIGl0ZXJhdG9yX3R5cGUKICAgICAgYmFzZSgpIGNvbnN0IHsgcmV0 dXJuIGN1cnJlbnQ7IH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yKigpIGNv bnN0CiAgICAgIHsKICAgICAgICBfSXRlcmF0b3IgX190bXAgPSBjdXJyZW50OwogICAgICAgIHJl dHVybiAqLS1fX3RtcDsKICAgICAgfQoKCgoKCgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9y LT4oKSBjb25zdCB7IHJldHVybiAmKG9wZXJhdG9yKigpKTsgfQoKCgoKCgogICAgICByZXZlcnNl X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKCkKICAgICAgewogICAgICAgIC0tY3VycmVudDsK ICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRv cgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIHJldmVyc2VfaXRlcmF0b3Ig X190bXAgPSAqdGhpczsKICAgICAgICAtLWN1cnJlbnQ7CiAgICAgICAgcmV0dXJuIF9fdG1wOwog ICAgICB9CgoKCgoKCiAgICAgIHJldmVyc2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yLS0oKQog ICAgICB7CiAgICAgICAgKytjdXJyZW50OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK CgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yIG9wZXJhdG9yLS0oaW50KQogICAgICB7CiAgICAg ICAgcmV2ZXJzZV9pdGVyYXRvciBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrY3VycmVudDsKICAg ICAgICByZXR1cm4gX190bXA7CiAgICAgIH0KCgoKCgoKICAgICAgcmV2ZXJzZV9pdGVyYXRvcgog ICAgICBvcGVyYXRvcisoZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QKICAgICAgeyByZXR1cm4g cmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50IC0gX19uKTsgfQoKCgoKCgogICAgICByZXZlcnNlX2l0 ZXJhdG9yJgogICAgICBvcGVyYXRvcis9KGRpZmZlcmVuY2VfdHlwZSBfX24pCiAgICAgIHsKICAg ICAgICBjdXJyZW50IC09IF9fbjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoK ICAgICAgcmV2ZXJzZV9pdGVyYXRvcgogICAgICBvcGVyYXRvci0oZGlmZmVyZW5jZV90eXBlIF9f bikgY29uc3QKICAgICAgeyByZXR1cm4gcmV2ZXJzZV9pdGVyYXRvcihjdXJyZW50ICsgX19uKTsg fQoKCgoKCgogICAgICByZXZlcnNlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvci09KGRpZmZlcmVu Y2VfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBjdXJyZW50ICs9IF9fbjsKICAgICAgICByZXR1 cm4gKnRoaXM7CiAgICAgIH0KCgoKCgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10o ZGlmZmVyZW5jZV90eXBlIF9fbikgY29uc3QgeyByZXR1cm4gKigqdGhpcyArIF9fbik7IH0KICAg IH07CiMgMjY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIGJvb2wKICAgIG9w ZXJhdG9yPT0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX195KQogICAgeyByZXR1 cm4gX194LmJhc2UoKSA9PSBfX3kuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVy YXRvcj4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjwoY29uc3QgcmV2ZXJzZV9pdGVyYXRv cjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFzZSgpIDwgX194LmJhc2UoKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3IhPShjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAg ICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAh KF9feCA9PSBfX3kpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBf X3gsCiAgICAgICAgICAgICAgY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kp CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9y PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxf SXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgICBjb25zdCByZXZlcnNlX2l0ZXJhdG9yPF9J dGVyYXRvcj4mIF9feSkKICAgIHsgcmV0dXJuICEoX195IDwgX194KTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+PShjb25zdCBy ZXZlcnNlX2l0ZXJhdG9yPF9JdGVyYXRvcj4mIF9feCwKICAgICAgICAgICAgICAgY29uc3QgcmV2 ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiAhKF9feCA8IF9feSk7 IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yPgogICAgaW5saW5lIHR5cGVuYW1lIHJl dmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBvcGVyYXRvci0o Y29uc3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3gsCiAgICAgICAgICAgICAgY29u c3QgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+JiBfX3kpCiAgICB7IHJldHVybiBfX3kuYmFz ZSgpIC0gX194LmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3I+CiAgICBp bmxpbmUgcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+CiAgICBvcGVyYXRvcisodHlwZW5hbWUg cmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX19uLAogICAgICAg ICAgICAgIGNvbnN0IHJldmVyc2VfaXRlcmF0b3I8X0l0ZXJhdG9yPiYgX194KQogICAgeyByZXR1 cm4gcmV2ZXJzZV9pdGVyYXRvcjxfSXRlcmF0b3I+KF9feC5iYXNlKCkgLSBfX24pOyB9CiMgMzI3 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGJhY2tfaW5zZXJ0X2l0ZXJhdG9y CiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2 b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfQ29udGFpbmVyKiBjb250YWlu ZXI7CgogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ29udGFpbmVyIGNvbnRhaW5lcl90eXBl OwoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgMzUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGJhY2tfaW5zZXJ0X2l0ZXJhdG9yJgog ICAgICBvcGVyYXRvcj0odHlwZW5hbWUgX0NvbnRhaW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFs dWUpCiAgICAgIHsKICAgICAgICBjb250YWluZXItPnB1c2hfYmFjayhfX3ZhbHVlKTsKICAgICAg ICByZXR1cm4gKnRoaXM7CiAgICAgIH0KCgogICAgICBiYWNrX2luc2VydF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBiYWNrX2luc2VydF9pdGVy YXRvciYKICAgICAgb3BlcmF0b3IrKygpIHsgcmV0dXJuICp0aGlzOyB9CgoKICAgICAgYmFja19p bnNlcnRfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAg ICB9OwojIDM4NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3Iu aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBpbmxpbmUgYmFja19pbnNl cnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGJhY2tfaW5zZXJ0ZXIoX0NvbnRhaW5lciYgX194 KQogICAgeyByZXR1cm4gYmFja19pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4oX194KTsgfQoj IDM5NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Db250YWluZXI+CiAgICBjbGFzcyBmcm9udF9pbnNlcnRfaXRl cmF0b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPG91dHB1dF9pdGVyYXRvcl90YWcsIHZvaWQsIHZv aWQsIHZvaWQsIHZvaWQ+CiAgICB7CiAgICBwcm90ZWN0ZWQ6CiAgICAgIF9Db250YWluZXIqIGNv bnRhaW5lcjsKCiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9Db250YWluZXIgY29udGFpbmVy X3R5cGU7CgoKICAgICAgZXhwbGljaXQgZnJvbnRfaW5zZXJ0X2l0ZXJhdG9yKF9Db250YWluZXIm IF9feCkgOiBjb250YWluZXIoJl9feCkgeyB9CiMgNDIyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9iaXRzL3N0bF9pdGVyYXRvci5oIiAzCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3I9KHR5cGVuYW1lIF9Db250YWluZXI6OmNvbnN0X3JlZmVyZW5jZSBfX3Zh bHVlKQogICAgICB7CiAgICAgICAgY29udGFpbmVyLT5wdXNoX2Zyb250KF9fdmFsdWUpOwogICAg ICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGZyb250X2luc2VydF9pdGVyYXRvciYK ICAgICAgb3BlcmF0b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBmcm9udF9pbnNlcnRf aXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGZy b250X2luc2VydF9pdGVyYXRvcgogICAgICBvcGVyYXRvcisrKGludCkgeyByZXR1cm4gKnRoaXM7 IH0KICAgIH07CiMgNDUzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVy YXRvci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGlubGluZSBmcm9u dF9pbnNlcnRfaXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGZyb250X2luc2VydGVyKF9Db250YWlu ZXImIF9feCkKICAgIHsgcmV0dXJuIGZyb250X2luc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf X3gpOyB9CiMgNDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9pdGVyYXRv ci5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NvbnRhaW5lcj4KICAgIGNsYXNzIGluc2VydF9p dGVyYXRvcgogICAgOiBwdWJsaWMgaXRlcmF0b3I8b3V0cHV0X2l0ZXJhdG9yX3RhZywgdm9pZCwg dm9pZCwgdm9pZCwgdm9pZD4KICAgIHsKICAgIHByb3RlY3RlZDoKICAgICAgX0NvbnRhaW5lciog Y29udGFpbmVyOwogICAgICB0eXBlbmFtZSBfQ29udGFpbmVyOjppdGVyYXRvciBpdGVyOwoKICAg IHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NvbnRhaW5lciBjb250YWluZXJfdHlwZTsKCgoKCgog ICAgICBpbnNlcnRfaXRlcmF0b3IoX0NvbnRhaW5lciYgX194LCB0eXBlbmFtZSBfQ29udGFpbmVy OjppdGVyYXRvciBfX2kpCiAgICAgIDogY29udGFpbmVyKCZfX3gpLCBpdGVyKF9faSkge30KIyA1 MTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMKICAg ICAgaW5zZXJ0X2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcj0oY29uc3QgdHlwZW5hbWUgX0NvbnRh aW5lcjo6Y29uc3RfcmVmZXJlbmNlIF9fdmFsdWUpCiAgICAgIHsKICAgICAgICBpdGVyID0gY29u dGFpbmVyLT5pbnNlcnQoaXRlciwgX192YWx1ZSk7CiAgICAgICAgKytpdGVyOwogICAgICAgIHJl dHVybiAqdGhpczsKICAgICAgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAgICAgb3BlcmF0 b3IqKCkgeyByZXR1cm4gKnRoaXM7IH0KCgogICAgICBpbnNlcnRfaXRlcmF0b3ImCiAgICAgIG9w ZXJhdG9yKysoKSB7IHJldHVybiAqdGhpczsgfQoKCiAgICAgIGluc2VydF9pdGVyYXRvciYKICAg ICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuICp0aGlzOyB9CiAgICB9OwojIDU0NCAiL3Vzci9s b2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfaXRlcmF0b3IuaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Db250YWluZXIsIHR5cGVuYW1lIF9JdGVyYXRvcj4KICAgIGlubGluZSBpbnNlcnRf aXRlcmF0b3I8X0NvbnRhaW5lcj4KICAgIGluc2VydGVyKF9Db250YWluZXImIF9feCwgX0l0ZXJh dG9yIF9faSkKICAgIHsKICAgICAgcmV0dXJuIGluc2VydF9pdGVyYXRvcjxfQ29udGFpbmVyPihf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZW5hbWUgX0Nv bnRhaW5lcjo6aXRlcmF0b3IoX19pKSk7CiAgICB9Cn0KCm5hbWVzcGFjZSBfX2dudV9jeHgKewoK CgoKCgoKICB1c2luZyBzdGQ6Oml0ZXJhdG9yX3RyYWl0czsKICB1c2luZyBzdGQ6Oml0ZXJhdG9y OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICAg IGNsYXNzIF9fbm9ybWFsX2l0ZXJhdG9yCiAgICAgIDogcHVibGljIGl0ZXJhdG9yPHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSwKICAgICAgICAg ICAgICAgICAgICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnZhbHVl X3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUsCiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSXRlcmF0b3I+Ojpwb2ludGVyLAogICAgICAgICAgICAgICAg ICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0l0ZXJhdG9yPjo6cmVmZXJlbmNlPgog ICAgewogICAgcHJvdGVjdGVkOgogICAgICBfSXRlcmF0b3IgX01fY3VycmVudDsKCiAgICBwdWJs aWM6CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OmRp ZmZlcmVuY2VfdHlwZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBkaWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnJlZmVyZW5jZSByZWZlcmVuY2U7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JdGVyYXRvcj46OnBvaW50ZXIgcG9p bnRlcjsKCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKCkgOiBfTV9jdXJyZW50KF9JdGVyYXRvcigp KSB7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9JdGVy YXRvciYgX19pKSA6IF9NX2N1cnJlbnQoX19pKSB7IH0KCgogICAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSXRlcj4KICAgICAgaW5saW5lIF9fbm9ybWFsX2l0ZXJhdG9yKGNvbnN0IF9fbm9ybWFsX2l0 ZXJhdG9yPF9JdGVyLCBfQ29udGFpbmVyPiYgX19pKQogICAgICAgIDogX01fY3VycmVudChfX2ku YmFzZSgpKSB7IH0KCgogICAgICByZWZlcmVuY2UKICAgICAgb3BlcmF0b3IqKCkgY29uc3QgeyBy ZXR1cm4gKl9NX2N1cnJlbnQ7IH0KCiAgICAgIHBvaW50ZXIKICAgICAgb3BlcmF0b3ItPigpIGNv bnN0IHsgcmV0dXJuIF9NX2N1cnJlbnQ7IH0KCiAgICAgIF9fbm9ybWFsX2l0ZXJhdG9yJgogICAg ICBvcGVyYXRvcisrKCkgeyArK19NX2N1cnJlbnQ7IHJldHVybiAqdGhpczsgfQoKICAgICAgX19u b3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpIHsgcmV0dXJuIF9fbm9ybWFsX2l0 ZXJhdG9yKF9NX2N1cnJlbnQrKyk7IH0KCgogICAgICBfX25vcm1hbF9pdGVyYXRvciYKICAgICAg b3BlcmF0b3ItLSgpIHsgLS1fTV9jdXJyZW50OyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIF9fbm9y bWFsX2l0ZXJhdG9yCiAgICAgIG9wZXJhdG9yLS0oaW50KSB7IHJldHVybiBfX25vcm1hbF9pdGVy YXRvcihfTV9jdXJyZW50LS0pOyB9CgoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJhdG9yW10o Y29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2N1cnJl bnRbX19uXTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yKz0oY29u c3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVudCArPSBfX247IHJldHVy biAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKGNvbnN0 IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVybiBfX25vcm1hbF9pdGVy YXRvcihfTV9jdXJyZW50ICsgX19uKTsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3ImCiAgICAg IG9wZXJhdG9yLT0oY29uc3QgZGlmZmVyZW5jZV90eXBlJiBfX24pCiAgICAgIHsgX01fY3VycmVu dCAtPSBfX247IHJldHVybiAqdGhpczsgfQoKICAgICAgX19ub3JtYWxfaXRlcmF0b3IKICAgICAg b3BlcmF0b3ItKGNvbnN0IGRpZmZlcmVuY2VfdHlwZSYgX19uKSBjb25zdAogICAgICB7IHJldHVy biBfX25vcm1hbF9pdGVyYXRvcihfTV9jdXJyZW50IC0gX19uKTsgfQoKICAgICAgY29uc3QgX0l0 ZXJhdG9yJgogICAgICBiYXNlKCkgY29uc3QgeyByZXR1cm4gX01fY3VycmVudDsgfQogICAgfTsK IyA2NDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2l0ZXJhdG9yLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0eXBl bmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3I9PShjb25zdCBfX25vcm1h bF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAgICBj b25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMpCiAg eyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVy YXRvcj09KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4mIF9f bGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID09IF9fcmhzLmJhc2UoKTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRlcmF0b3JSLCB0 eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAgb3BlcmF0b3IhPShjb25zdCBfX25v cm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMp CiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2UoKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfSXRlcmF0b3IsIHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBv cGVyYXRvciE9KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpICE9IF9fcmhzLmJhc2Uo KTsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yTCwgdHlwZW5hbWUgX0l0ZXJhdG9y UiwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9wZXJhdG9yPChjb25zdCBf X25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPiYgX19saHMsCiAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPCBfX3Jocy5iYXNlKCk7IH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSBib29sCiAg b3BlcmF0b3I8KGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj4m IF9fbGhzLAogICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBf Q29udGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpIDwgX19yaHMuYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj4oY29uc3QgX19u b3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yTCwgX0NvbnRhaW5lcj4mIF9fbGhzLAogICAgICAgICAg ICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3JSLCBfQ29udGFpbmVyPiYgX19yaHMp CiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yPihjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+JiBf X2xocywKICAgICAgICAgICAgY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29u dGFpbmVyPiYgX19yaHMpCiAgeyByZXR1cm4gX19saHMuYmFzZSgpID4gX19yaHMuYmFzZSgpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIsIHR5 cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcjw9KGNvbnN0IF9fbm9y bWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAgICAg IGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3JocykK ICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAogIG9w ZXJhdG9yPD0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVyPiYg X19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9D b250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPD0gX19yaHMuYmFzZSgp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JdGVyYXRvckwsIHR5cGVuYW1lIF9JdGVyYXRvclIs IHR5cGVuYW1lIF9Db250YWluZXI+CiAgaW5saW5lIGJvb2wKICBvcGVyYXRvcj49KGNvbnN0IF9f bm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xocywKICAgICAgICAg ICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250YWluZXI+JiBfX3Jo cykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFzZSgpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9JdGVyYXRvciwgdHlwZW5hbWUgX0NvbnRhaW5lcj4KICBpbmxpbmUgYm9vbAog IG9wZXJhdG9yPj0oY29uc3QgX19ub3JtYWxfaXRlcmF0b3I8X0l0ZXJhdG9yLCBfQ29udGFpbmVy PiYgX19saHMsCiAgICAgICAgICAgICBjb25zdCBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3Is IF9Db250YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgPj0gX19yaHMuYmFz ZSgpOyB9CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSXRlcmF0b3JMLCB0eXBlbmFtZSBfSXRl cmF0b3JSLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlubGluZSB0eXBlbmFtZSBfX25vcm1hbF9p dGVyYXRvcjxfSXRlcmF0b3JMLCBfQ29udGFpbmVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgb3BlcmF0 b3ItKGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvckwsIF9Db250YWluZXI+JiBfX2xo cywKICAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvclIsIF9Db250 YWluZXI+JiBfX3JocykKICB7IHJldHVybiBfX2xocy5iYXNlKCkgLSBfX3Jocy5iYXNlKCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29udGFpbmVyPgogIGlu bGluZSBfX25vcm1hbF9pdGVyYXRvcjxfSXRlcmF0b3IsIF9Db250YWluZXI+CiAgb3BlcmF0b3Ir KHR5cGVuYW1lIF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVyYXRvciwgX0NvbnRhaW5lcj46OmRpZmZl cmVuY2VfdHlwZSBfX24sCiAgICAgICAgICAgIGNvbnN0IF9fbm9ybWFsX2l0ZXJhdG9yPF9JdGVy YXRvciwgX0NvbnRhaW5lcj4mIF9faSkKICB7IHJldHVybiBfX25vcm1hbF9pdGVyYXRvcjxfSXRl cmF0b3IsIF9Db250YWluZXI+KF9faS5iYXNlKCkgKyBfX24pOyB9Cn0KIyA3NiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMiAzCgoKbmFtZXNwYWNlIHN0 ZAp7CiMgOTEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIyPgogICAgaW5saW5lIHZvaWQKICAgIGl0ZXJfc3dhcChfRm9yd2FyZEl0ZXIxIF9fYSwgX0Zv cndhcmRJdGVyMiBfX2IpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJh aXRzPF9Gb3J3YXJkSXRlcjE+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGUxOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXIyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlMjsKCgogICAgIAogICAgIAogICAgIAogICAgIAoKICAgICAgX1ZhbHVlVHlwZTEgX190 bXAgPSAqX19hOwogICAgICAqX19hID0gKl9fYjsKICAgICAgKl9fYiA9IF9fdG1wOwogICAgfQoj IDExOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBzd2FwKF9UcCYgX19h LCBfVHAmIF9fYikKICAgIHsKCiAgICAgCgogICAgICBfVHAgX190bXAgPSBfX2E7CiAgICAgIF9f YSA9IF9fYjsKICAgICAgX19iID0gX190bXA7CiAgICB9CiMgMTQ2ICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Rw PgogICAgaW5saW5lIGNvbnN0IF9UcCYKICAgIG1pbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1Rw JiBfX2IpCiAgICB7CgogICAgIAoKICAgICAgaWYgKF9fYiA8IF9fYSkgcmV0dXJuIF9fYjsgcmV0 dXJuIF9fYTsKICAgIH0KIyAxNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgY29uc3Qg X1RwJgogICAgbWF4KGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYikKICAgIHsKCiAgICAg CgogICAgICBpZiAoX19hIDwgX19iKSByZXR1cm4gX19iOyByZXR1cm4gX19hOwogICAgfQojIDE4 NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgY29uc3Qg X1RwJgogICAgbWluKGNvbnN0IF9UcCYgX19hLCBjb25zdCBfVHAmIF9fYiwgX0NvbXBhcmUgX19j b21wKQogICAgewoKICAgICAgaWYgKF9fY29tcChfX2IsIF9fYSkpIHJldHVybiBfX2I7IHJldHVy biBfX2E7CiAgICB9CiMgMjA0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9h bGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIGlubGluZSBjb25zdCBfVHAmCiAgICBtYXgoY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYg X19iLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgICBpZiAoX19jb21wKF9fYSwgX19iKSkg cmV0dXJuIF9fYjsgcmV0dXJuIF9fYTsKICAgIH0KIyAyMjEgIi91c3IvbG9jYWwvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19j b3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewog ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fcmVzdWx0LCArK19fZmlyc3QpCiAg ICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJ dGVyPgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHkoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgIF9PdXRwdXRJdGVy IF9fcmVzdWx0LAogICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlOwogICAgICBmb3IgKF9EaXN0YW5j ZSBfX24gPSBfX2xhc3QgLSBfX2ZpcnN0OyBfX24gPiAwOyAtLV9fbikgewogICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgICArK19fcmVzdWx0Owog ICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29weV90cml2aWFsKGNvbnN0IF9UcCogX19maXJz dCwgY29uc3QgX1RwKiBfX2xhc3QsIF9UcCogX19yZXN1bHQpCiAgICB7CiAgICAgIG1lbW1vdmUo X19yZXN1bHQsIF9fZmlyc3QsIHNpemVvZihfVHApICogKF9fbGFzdCAtIF9fZmlyc3QpKTsKICAg ICAgcmV0dXJuIF9fcmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBf T3V0cHV0SXRlcgogICAgX19jb3B5X2F1eDIoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBfX2ZhbHNlX3R5 cGUpCiAgICB7IHJldHVybiBfX2NvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVy YXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRl ciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29w eV9hdXgyKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJldHVybiBfX2Nv cHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0 KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9UcCoKICAgIF9fY29w eV9hdXgyKF9UcCogX19maXJzdCwgX1RwKiBfX2xhc3QsCiAgICAgICAgICAgICAgICBfVHAqIF9f cmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9fY29weV90cml2aWFsKF9fZmlyc3Qs IF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGlubGlu ZSBfVHAqCiAgICBfX2NvcHlfYXV4Mihjb25zdCBfVHAqIF9fZmlyc3QsIGNvbnN0IF9UcCogX19s YXN0LAogICAgICAgICAgICAgICAgX1RwKiBfX3Jlc3VsdCwgX190cnVlX3R5cGUpCiAgICB7IHJl dHVybiBfX2NvcHlfdHJpdmlhbChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGlu ZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX190cnVlX3R5 cGUpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46Omhhc190cml2aWFsX2Fzc2lnbm1lbnRfb3Bl cmF0b3IKICAgICAgICAgIF9Ucml2aWFsOwogICAgICByZXR1cm4gX091dHB1dEl0ZXIoX19jb3B5 X2F1eDIoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX19yZXN1bHQuYmFzZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1RyaXZpYWwoKSkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBl bmFtZSBfT3V0cHV0SXRlcj4KICAgIGlubGluZSBfT3V0cHV0SXRlcgogICAgX19jb3B5X25pMihf SW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCwgX19mYWxzZV90eXBlKQogICAgewogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAgX1Zh bHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1ZVR5cGU+ OjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yCiAgICAgICAgICBfVHJpdmlhbDsKICAg ICAgcmV0dXJuIF9fY29weV9hdXgyKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgICAgIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgX1RyaXZpYWwoKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICBfX2NvcHlfbmkxKF9JbnB1dEl0ZXIgX19maXJz dCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0 LCBfX3RydWVfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0 ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29w eV9uaTIoX19maXJzdC5iYXNlKCksIF9fbGFzdC5iYXNlKCksIF9fcmVzdWx0LCBfX05vcm1hbCgp KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1 dEl0ZXI+CiAgICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIF9fY29weV9uaTEoX0lucHV0SXRlciBf X2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19y ZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfSXNfbm9y bWFsX2l0ZXJhdG9yPF9PdXRwdXRJdGVyPjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJu IF9fY29weV9uaTIoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwgX19Ob3JtYWwoKSk7CiAgICB9 CiMgMzM5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBpbmxpbmUgX091dHB1dEl0ZXIKICAgIGNvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJ dGVyIF9fbGFzdCwgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAg ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9Jc19ub3JtYWxfaXRlcmF0b3I8X0lucHV0SXRlcj46Ol9O b3JtYWwgX19Ob3JtYWw7CiAgICAgICByZXR1cm4gX19jb3B5X25pMShfX2ZpcnN0LCBfX2xhc3Qs IF9fcmVzdWx0LCBfX05vcm1hbCgpKTsKICAgIH0KCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Jp ZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMj4KICAgIGlubGlu ZSBfQmlkaXJlY3Rpb25hbEl0ZXIyCiAgICBfX2NvcHlfYmFja3dhcmQoX0JpZGlyZWN0aW9uYWxJ dGVyMSBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25hbEl0ZXIxIF9fbGFzdCwKICAgICAgICAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgIGJp ZGlyZWN0aW9uYWxfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJzdCAhPSBf X2xhc3QpCiAgICAgICAgKi0tX19yZXN1bHQgPSAqLS1fX2xhc3Q7CiAgICAgIHJldHVybiBfX3Jl c3VsdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVu YW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSBfQmlkaXJlY3Rpb25hbEl0ZXIKICAg IF9fY29weV9iYWNrd2FyZChfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fcmVz dWx0LAogICAgICAgICAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0b3JfdGFnKQogICAg ewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZm ZXJlbmNlX3R5cGUgX19uOwogICAgICBmb3IgKF9fbiA9IF9fbGFzdCAtIF9fZmlyc3Q7IF9fbiA+ IDA7IC0tX19uKQogICAgICAgICotLV9fcmVzdWx0ID0gKi0tX19sYXN0OwogICAgICByZXR1cm4g X19yZXN1bHQ7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFs SXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUg X0Jvb2xUeXBlPgogICAgc3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaAogICAgewogICAg ICBzdGF0aWMgX0JpZGlyZWN0aW9uYWxJdGVyMgogICAgICBjb3B5KF9CaWRpcmVjdGlvbmFsSXRl cjEgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3QsCiAgICAgICAgICAgX0JpZGly ZWN0aW9uYWxJdGVyMiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJldHVybiBfX2NvcHlfYmFj a3dhcmQoX19maXJzdCwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19y ZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5 KF9fZmlyc3QpKTsKICAgICAgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg c3RydWN0IF9fY29weV9iYWNrd2FyZF9kaXNwYXRjaDxfVHAqLCBfVHAqLCBfX3RydWVfdHlwZT4K ICAgIHsKICAgICAgc3RhdGljIF9UcCoKICAgICAgY29weShjb25zdCBfVHAqIF9fZmlyc3QsIGNv bnN0IF9UcCogX19sYXN0LCBfVHAqIF9fcmVzdWx0KQogICAgICB7CiAgICAgICAgY29uc3QgcHRy ZGlmZl90IF9OdW0gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICAgIG1lbW1vdmUoX19yZXN1bHQg LSBfTnVtLCBfX2ZpcnN0LCBzaXplb2YoX1RwKSAqIF9OdW0pOwogICAgICAgIHJldHVybiBfX3Jl c3VsdCAtIF9OdW07CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAg IHN0cnVjdCBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8Y29uc3QgX1RwKiwgX1RwKiwgX190cnVl X3R5cGU+CiAgICB7CiAgICAgIHN0YXRpYyBfVHAqCiAgICAgIGNvcHkoY29uc3QgX1RwKiBfX2Zp cnN0LCBjb25zdCBfVHAqIF9fbGFzdCwgX1RwKiBfX3Jlc3VsdCkKICAgICAgewogICAgICAgIHJl dHVybiBfX2NvcHlfYmFja3dhcmRfZGlzcGF0Y2g8X1RwKiwgX1RwKiwgX190cnVlX3R5cGU+CiAg ICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAgICAgIH0KICAgIH07 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CSTEsIHR5cGVuYW1lIF9CSTI+CiAgICBpbmxpbmUgX0JJ MgogICAgX19jb3B5X2JhY2t3YXJkX2F1eChfQkkxIF9fZmlyc3QsIF9CSTEgX19sYXN0LCBfQkky IF9fcmVzdWx0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8dHlw ZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9CSTI+Ojp2YWx1ZV90eXBlPgogICAgICAgICAgICAgICAg ICAgICAgICAgICAgOjpoYXNfdHJpdmlhbF9hc3NpZ25tZW50X29wZXJhdG9yIF9Ucml2aWFsOwog ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX2Rpc3BhdGNoPF9CSTEsIF9CSTIsIF9Ucml2aWFs PgogICAgICAgICAgICAgICAgICA6OmNvcHkoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCk7CiAg ICB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5l IF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19m aXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQkkyIF9fcmVzdWx0LCBfX3RydWVfdHlwZSkKICAgIHsgcmV0dXJuIF9CSTIoX19jb3B5 X2JhY2t3YXJkX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LmJhc2UoKSkpOyB9CgogIHRl bXBsYXRlIDx0eXBlbmFtZSBfQkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAg IF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9ybWFsX2l0ZXJhdG9yKF9CSTEgX19maXJzdCwgX0JJ MSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfQkky IF9fcmVzdWx0LCBfX2ZhbHNlX3R5cGUpCiAgICB7IHJldHVybiBfX2NvcHlfYmFja3dhcmRfYXV4 KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQpOyB9CgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQkkx LCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIF9fY29weV9iYWNrd2FyZF9pbnB1 dF9ub3JtYWxfaXRlcmF0b3IoX0JJMSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0JJMiBfX3Jlc3VsdCwgX190cnVlX3R5cGUp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkyPjo6 X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9vdXRwdXRfbm9y bWFsX2l0ZXJhdG9yKF9fZmlyc3QuYmFzZSgpLCBfX2xhc3QuYmFzZSgpLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsIF9fTm9ybWFs KCkpOwogICAgfQoKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX0JJMSwgdHlwZW5hbWUgX0JJMj4KICAg IGlubGluZSBfQkkyCiAgICBfX2NvcHlfYmFja3dhcmRfaW5wdXRfbm9ybWFsX2l0ZXJhdG9yKF9C STEgX19maXJzdCwgX0JJMSBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9CSTIgX19yZXN1bHQsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfSXNfbm9ybWFsX2l0ZXJhdG9yPF9CSTI+OjpfTm9ybWFsIF9fTm9ybWFsOwog ICAgICByZXR1cm4gX19jb3B5X2JhY2t3YXJkX291dHB1dF9ub3JtYWxfaXRlcmF0b3IoX19maXJz dCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fTm9ybWFsKCkpOwogICAgfQojIDQ3NyAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jhc2UuaCIgMwogIHRlbXBsYXRlIDx0eXBlbmFtZSBf QkkxLCB0eXBlbmFtZSBfQkkyPgogICAgaW5saW5lIF9CSTIKICAgIGNvcHlfYmFja3dhcmQoX0JJ MSBfX2ZpcnN0LCBfQkkxIF9fbGFzdCwgX0JJMiBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAg CiAgICAgCgoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX25vcm1hbF9pdGVyYXRvcjxfQkkx Pjo6X05vcm1hbCBfX05vcm1hbDsKICAgICAgcmV0dXJuIF9fY29weV9iYWNrd2FyZF9pbnB1dF9u b3JtYWxfaXRlcmF0b3IoX19maXJzdCwgX19sYXN0LCBfX3Jlc3VsdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19Ob3JtYWwoKSk7CiAgICB9CiMg NTA5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvYmFzZS5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg ICBmaWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBf VHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFz dDsgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgIH0KIyA1MzEgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1NpemUsIHR5cGVuYW1lIF9UcD4KICAg IF9PdXRwdXRJdGVyCiAgICBmaWxsX24oX091dHB1dEl0ZXIgX19maXJzdCwgX1NpemUgX19uLCBj b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAoKICAgICAgZm9yICggOyBfX24gPiAwOyAt LV9fbiwgKytfX2ZpcnN0KQogICAgICAgICpfX2ZpcnN0ID0gX192YWx1ZTsKICAgICAgcmV0dXJu IF9fZmlyc3Q7CiAgICB9CgoKCiAgaW5saW5lIHZvaWQKICBmaWxsKHVuc2lnbmVkIGNoYXIqIF9f Zmlyc3QsIHVuc2lnbmVkIGNoYXIqIF9fbGFzdCwgY29uc3QgdW5zaWduZWQgY2hhciYgX19jKQog IHsKICAgIHVuc2lnbmVkIGNoYXIgX190bXAgPSBfX2M7CiAgICBtZW1zZXQoX19maXJzdCwgX190 bXAsIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHZvaWQKICBmaWxsKHNpZ25lZCBj aGFyKiBfX2ZpcnN0LCBzaWduZWQgY2hhciogX19sYXN0LCBjb25zdCBzaWduZWQgY2hhciYgX19j KQogIHsKICAgIHNpZ25lZCBjaGFyIF9fdG1wID0gX19jOwogICAgbWVtc2V0KF9fZmlyc3QsIHN0 YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fdG1wKSwgX19sYXN0IC0gX19maXJzdCk7CiAgfQoK ICBpbmxpbmUgdm9pZAogIGZpbGwoY2hhciogX19maXJzdCwgY2hhciogX19sYXN0LCBjb25zdCBj aGFyJiBfX2MpCiAgewogICAgY2hhciBfX3RtcCA9IF9fYzsKICAgIG1lbXNldChfX2ZpcnN0LCBz dGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX3RtcCksIF9fbGFzdCAtIF9fZmlyc3QpOwogIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1NpemU+CiAgICBpbmxpbmUgdW5zaWduZWQgY2hhcioKICAg IGZpbGxfbih1bnNpZ25lZCBjaGFyKiBfX2ZpcnN0LCBfU2l6ZSBfX24sIGNvbnN0IHVuc2lnbmVk IGNoYXImIF9fYykKICAgIHsKICAgICAgZmlsbChfX2ZpcnN0LCBfX2ZpcnN0ICsgX19uLCBfX2Mp OwogICAgICByZXR1cm4gX19maXJzdCArIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1NpemU+CiAgICBpbmxpbmUgc2lnbmVkIGNoYXIqCiAgICBmaWxsX24oY2hhciogX19maXJzdCwg X1NpemUgX19uLCBjb25zdCBzaWduZWQgY2hhciYgX19jKQogICAgewogICAgICBmaWxsKF9fZmly c3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsgX19uOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfU2l6ZT4KICAgIGlubGluZSBjaGFyKgogICAgZmlsbF9u KGNoYXIqIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgY2hhciYgX19jKQogICAgewogICAgICBm aWxsKF9fZmlyc3QsIF9fZmlyc3QgKyBfX24sIF9fYyk7CiAgICAgIHJldHVybiBfX2ZpcnN0ICsg X19uOwogICAgfQojIDYwNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxn b2Jhc2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5w dXRJdGVyMj4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPgogICAgbWlzbWF0Y2go X0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBf SW5wdXRJdGVyMiBfX2ZpcnN0MikKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmICpfX2ZpcnN0MSA9PSAqX19maXJzdDIp IHsKICAgICAgICArK19fZmlyc3QxOwogICAgICAgICsrX19maXJzdDI7CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0lucHV0SXRlcjEsIF9JbnB1dEl0ZXIyPihfX2ZpcnN0MSwgX19maXJzdDIp OwogICAgfQojIDY0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIHBhaXI8X0lucHV0SXRlcjEsIF9J bnB1dEl0ZXIyPgogICAgbWlzbWF0Y2goX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwKICAgICAgICAgICAg IF9CaW5hcnlQcmVkaWNhdGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg ICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2JpbmFyeV9wcmVkKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkgewogICAgICAgICsrX19maXJzdDE7CiAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgfQogICAgICByZXR1cm4gcGFpcjxfSW5wdXRJdGVyMSwgX0lucHV0SXRlcjI+KF9fZmlyc3Qx LCBfX2ZpcnN0Mik7CiAgICB9CiMgNjY4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvYmFzZS5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVu YW1lIF9JbnB1dEl0ZXIyPgogICAgaW5saW5lIGJvb2wKICAgIGVxdWFsKF9JbnB1dEl0ZXIxIF9f Zmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9 IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qx ID09ICpfX2ZpcnN0MikpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiB0cnVl OwogICAgfQojIDY5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnb2Jh c2UuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIxLCB0eXBlbmFtZSBfSW5wdXRJ dGVyMiwgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBib29sCiAgICBlcXVh bChfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgIF9J bnB1dEl0ZXIyIF9fZmlyc3QyLAogICAgICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9w cmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgIGZvciAoIDsgX19maXJzdDEgIT0gX19sYXN0 MTsgKytfX2ZpcnN0MSwgKytfX2ZpcnN0MikKICAgICAgICBpZiAoIV9fYmluYXJ5X3ByZWQoKl9f Zmlyc3QxLCAqX19maXJzdDIpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICByZXR1cm4g dHJ1ZTsKICAgIH0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lu cHV0SXRlcjI+CiAgICBib29sCiAgICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShfSW5wdXRJdGVy MSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAg ICAKICAgICAKICAgICAKCiAgICAgCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmIF9fZmlyc3QyICE9IF9fbGFzdDIKICAgICAgICAgICAgOyArK19fZmlyc3QxLCArK19fZmly c3QyKSB7CiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAgICAgICAgIHJldHVy biB0cnVlOwogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpCiAgICAgICAgICByZXR1 cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3QxID09IF9fbGFzdDEgJiYgX19m aXJzdDIgIT0gX19sYXN0MjsKICAgIH0KIyA3NjcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsZ29iYXNlLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgYm9vbAogICAgbGV4 aWNvZ3JhcGhpY2FsX2NvbXBhcmUoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9f bGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0Miwg X0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJl IF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAgICBmb3IgKCA7IF9fZmlyc3QxICE9IF9f bGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MgogICAgICAgICAgICA7ICsrX19maXJzdDEsICsr X19maXJzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJz dDEpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiBfX2ZpcnN0 MSA9PSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDI7CiAgICB9CgogIGlubGluZSBib29s CiAgbGV4aWNvZ3JhcGhpY2FsX2NvbXBhcmUoY29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDEs IGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAg Y29uc3QgdW5zaWduZWQgY2hhciogX19maXJzdDIsIGNvbnN0IHVuc2lnbmVkIGNoYXIqIF9fbGFz dDIpCiAgewogICAgY29uc3Qgc2l6ZV90IF9fbGVuMSA9IF9fbGFzdDEgLSBfX2ZpcnN0MTsKICAg IGNvbnN0IHNpemVfdCBfX2xlbjIgPSBfX2xhc3QyIC0gX19maXJzdDI7CiAgICBjb25zdCBpbnQg X19yZXN1bHQgPSBtZW1jbXAoX19maXJzdDEsIF9fZmlyc3QyLCBtaW4oX19sZW4xLCBfX2xlbjIp KTsKICAgIHJldHVybiBfX3Jlc3VsdCAhPSAwID8gX19yZXN1bHQgPCAwIDogX19sZW4xIDwgX19s ZW4yOwogIH0KCiAgaW5saW5lIGJvb2wKICBsZXhpY29ncmFwaGljYWxfY29tcGFyZShjb25zdCBj aGFyKiBfX2ZpcnN0MSwgY29uc3QgY2hhciogX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBfX2ZpcnN0MiwgY29uc3QgY2hhciogX19sYXN0MikKICB7CgogICAg cmV0dXJuIGxleGljb2dyYXBoaWNhbF9jb21wYXJlKChjb25zdCBzaWduZWQgY2hhciopIF9fZmly c3QxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdCBzaWduZWQgY2hh ciopIF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGNvbnN0IHNp Z25lZCBjaGFyKikgX19maXJzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KGNvbnN0IHNpZ25lZCBjaGFyKikgX19sYXN0Mik7CgoKCgoKCiAgfQoKfQojIDY3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0iIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2NvbnN0cnVjdC5oIiAxIDMKIyA2NyAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCgoK CiAgdGVtcGxhdGUgPGNsYXNzIF9UMSwgY2xhc3MgX1QyPgogICAgaW5saW5lIHZvaWQKICAgIF9D b25zdHJ1Y3QoX1QxKiBfX3AsIGNvbnN0IF9UMiYgX192YWx1ZSkKICAgIHsgbmV3IChzdGF0aWNf Y2FzdDx2b2lkKj4oX19wKSkgX1QxKF9fdmFsdWUpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxjbGFz cyBfVDE+CiAgICBpbmxpbmUgdm9pZAogICAgX0NvbnN0cnVjdChfVDEqIF9fcCkKICAgIHsgbmV3 IChzdGF0aWNfY2FzdDx2b2lkKj4oX19wKSkgX1QxKCk7IH0KIyA5OCAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfY29uc3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvcj4KICAgIGlubGluZSB2b2lkCiAgICBfX2Rlc3Ryb3lfYXV4KF9Gb3J3YXJk SXRlcmF0b3IgX19maXJzdCwgX0ZvcndhcmRJdGVyYXRvciBfX2xhc3QsIF9fZmFsc2VfdHlwZSkK ICAgIHsgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KSBfRGVzdHJveSgmKl9f Zmlyc3QpOyB9CiMgMTEyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9jb25z dHJ1Y3QuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfRm9yd2FyZEl0ZXJhdG9yPgogICAgaW5saW5l IHZvaWQKICAgIF9fZGVzdHJveV9hdXgoX0ZvcndhcmRJdGVyYXRvciwgX0ZvcndhcmRJdGVyYXRv ciwgX190cnVlX3R5cGUpCiAgICB7IH0KCgoKCgoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgogICAg aW5saW5lIHZvaWQKICAgIF9EZXN0cm95KF9UcCogX19wb2ludGVyKQogICAgeyBfX3BvaW50ZXIt Pn5fVHAoKTsgfQojIDEzNCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfY29u c3RydWN0LmgiIDMKICB0ZW1wbGF0ZSA8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgIGlubGlu ZSB2b2lkCiAgICBfRGVzdHJveShfRm9yd2FyZEl0ZXJhdG9yIF9fZmlyc3QsIF9Gb3J3YXJkSXRl cmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfRm9yd2FyZEl0ZXJhdG9yPjo6dmFsdWVfdHlwZQogICAgICAgICAgICAgICAgICAgICAgIF9W YWx1ZV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fdHlwZV90cmFpdHM8X1ZhbHVlX3R5 cGU+OjpoYXNfdHJpdmlhbF9kZXN0cnVjdG9yCiAgICAgICAgICAgICAgICAgICAgICAgX0hhc190 cml2aWFsX2Rlc3RydWN0b3I7CgogICAgICBfX2Rlc3Ryb3lfYXV4KF9fZmlyc3QsIF9fbGFzdCwg X0hhc190cml2aWFsX2Rlc3RydWN0b3IoKSk7CiAgICB9Cn0KIyA2OCAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAg aW5saW5lIF9Gb3J3YXJkSXRlcgogICAgX191bmluaXRpYWxpemVkX2NvcHlfYXV4KF9JbnB1dEl0 ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9f dHJ1ZV90eXBlKQogICAgeyByZXR1cm4gY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0KTsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFsaXplZF9jb3B5X2F1eChfSW5wdXRJdGVy IF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Zh bHNlX3R5cGUpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX2N1ciA9IF9fcmVzdWx0OwogICAg ICB0cnkgewogICAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytf X2N1cikKICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgKl9fZmlyc3QpOwogICAgICAgIHJl dHVybiBfX2N1cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAg X0Rlc3Ryb3koX19yZXN1bHQsIF9fY3VyKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAg IH0KIyAxMDYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3VuaW5pdGlhbGl6 ZWQuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIHVuaW5pdGlhbGl6ZWRfY29weShfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfRm9yd2FyZEl0ZXIgX19yZXN1bHQp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRl cj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVf dHJhaXRzPF9WYWx1ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191 bmluaXRpYWxpemVkX2NvcHlfYXV4KF9fZmlyc3QsIF9fbGFzdCwgX19yZXN1bHQsIF9Jc19QT0Qo KSk7CiAgICB9CgogIGlubGluZSBjaGFyKgogIHVuaW5pdGlhbGl6ZWRfY29weShjb25zdCBjaGFy KiBfX2ZpcnN0LCBjb25zdCBjaGFyKiBfX2xhc3QsIGNoYXIqIF9fcmVzdWx0KQogIHsKICAgIG1l bW1vdmUoX19yZXN1bHQsIF9fZmlyc3QsIF9fbGFzdCAtIF9fZmlyc3QpOwogICAgcmV0dXJuIF9f cmVzdWx0ICsgKF9fbGFzdCAtIF9fZmlyc3QpOwogIH0KCiAgaW5saW5lIHdjaGFyX3QqCiAgdW5p bml0aWFsaXplZF9jb3B5KGNvbnN0IHdjaGFyX3QqIF9fZmlyc3QsIGNvbnN0IHdjaGFyX3QqIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgd2NoYXJfdCogX19yZXN1bHQpCiAgewogICAgbWVt bW92ZShfX3Jlc3VsdCwgX19maXJzdCwgc2l6ZW9mKHdjaGFyX3QpICogKF9fbGFzdCAtIF9fZmly c3QpKTsKICAgIHJldHVybiBfX3Jlc3VsdCArIChfX2xhc3QgLSBfX2ZpcnN0KTsKICB9CgoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUg dm9pZAogICAgX191bmluaXRpYWxpemVkX2ZpbGxfYXV4KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9U cCYgX194LCBfX3RydWVfdHlwZSkKICAgIHsgZmlsbChfX2ZpcnN0LCBfX2xhc3QsIF9feCk7IH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lk CiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9hdXgoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBf X3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19maXJz dDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fY3VyICE9IF9fbGFzdDsgKytfX2N1cikK ICAgICAgICAgIF9Db25zdHJ1Y3QoJipfX2N1ciwgX194KTsKICAgICAgfQogICAgICBjYXRjaCgu Li4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19maXJzdCwgX19jdXIpOwogICAgICAg ICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDE2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0Zvcndh cmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgdW5pbml0aWFsaXplZF9m aWxsKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm IF9feCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0Zvcndh cmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f dHlwZV90cmFpdHM8X1ZhbHVlVHlwZT46OmlzX1BPRF90eXBlIF9Jc19QT0Q7CiAgICAgIF9fdW5p bml0aWFsaXplZF9maWxsX2F1eChfX2ZpcnN0LCBfX2xhc3QsIF9feCwgX0lzX1BPRCgpKTsKICAg IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9TaXplLCB0 eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRf ZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gsIF9fdHJ1ZV90eXBlKQogICAgewogICAg ICByZXR1cm4gZmlsbF9uKF9fZmlyc3QsIF9fbiwgX194KTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUgX1RwPgogICAgX0Zv cndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9uX2F1eChfRm9yd2FyZEl0ZXIgX19m aXJzdCwgX1NpemUgX19uLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1Rw JiBfX3gsIF9fZmFsc2VfdHlwZSkKICAgIHsKICAgICAgX0ZvcndhcmRJdGVyIF9fY3VyID0gX19m aXJzdDsKICAgICAgdHJ5IHsKICAgICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fY3Vy KQogICAgICAgICAgX0NvbnN0cnVjdCgmKl9fY3VyLCBfX3gpOwogICAgICAgIHJldHVybiBfX2N1 cjsKICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3ko X19maXJzdCwgX19jdXIpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQojIDIxMCAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdW5pbml0aWFsaXplZC5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X1RwPgogICAgaW5saW5lIF9Gb3J3YXJkSXRlcgogICAgdW5pbml0aWFsaXplZF9maWxsX24oX0Zv cndhcmRJdGVyIF9fZmlyc3QsIF9TaXplIF9fbiwgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OnZhbHVlX3R5 cGUgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3R5cGVfdHJhaXRzPF9WYWx1 ZVR5cGU+Ojppc19QT0RfdHlwZSBfSXNfUE9EOwogICAgICByZXR1cm4gX191bmluaXRpYWxpemVk X2ZpbGxfbl9hdXgoX19maXJzdCwgX19uLCBfX3gsIF9Jc19QT0QoKSk7CiAgICB9CiMgMjI3ICIv dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF91bmluaXRpYWxpemVkLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVu YW1lIF9Gb3J3YXJkSXRlcj4KICAgIGlubGluZSBfRm9yd2FyZEl0ZXIKICAgIF9fdW5pbml0aWFs aXplZF9jb3B5X2NvcHkoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmlyc3QyLCBfSW5w dXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRm9yd2FyZEl0 ZXIgX19yZXN1bHQpCiAgICB7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZCA9IHVuaW5pdGlhbGl6 ZWRfY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAgICB0cnkgewogICAgICAg IHJldHVybiB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDIsIF9fbGFzdDIsIF9fbWlkKTsKICAg ICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX0Rlc3Ryb3koX19yZXN1 bHQsIF9fbWlkKTsKICAgICAgICAgIHRocm93OwogICAgICAgIH0KICAgIH0KCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVuYW1lIF9JbnB1dEl0 ZXI+CiAgICBpbmxpbmUgX0ZvcndhcmRJdGVyCiAgICBfX3VuaW5pdGlhbGl6ZWRfZmlsbF9jb3B5 KF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwgX0ZvcndhcmRJdGVyIF9fbWlkLAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBjb25zdCBfVHAmIF9feCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCkKICAgIHsKICAgICAg dW5pbml0aWFsaXplZF9maWxsKF9fcmVzdWx0LCBfX21pZCwgX194KTsKICAgICAgdHJ5IHsKICAg ICAgICByZXR1cm4gdW5pbml0aWFsaXplZF9jb3B5KF9fZmlyc3QsIF9fbGFzdCwgX19taWQpOwog ICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAgICAgICBfRGVzdHJveShfX3Jl c3VsdCwgX19taWQpOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAgfQoKCgoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9UcD4KICAgIGlubGluZSB2b2lkCiAgICBfX3VuaW5pdGlhbGl6ZWRfY29weV9maWxsKF9JbnB1 dEl0ZXIgX19maXJzdDEsIF9JbnB1dEl0ZXIgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX0ZvcndhcmRJdGVyIF9fZmlyc3QyLCBfRm9yd2FyZEl0ZXIgX19sYXN0MiwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3gpCiAgICB7CiAgICAgIF9G b3J3YXJkSXRlciBfX21pZDIgPSB1bmluaXRpYWxpemVkX2NvcHkoX19maXJzdDEsIF9fbGFzdDEs IF9fZmlyc3QyKTsKICAgICAgdHJ5IHsKICAgICAgICB1bmluaXRpYWxpemVkX2ZpbGwoX19taWQy LCBfX2xhc3QyLCBfX3gpOwogICAgICB9CiAgICAgIGNhdGNoKC4uLikKICAgICAgICB7CiAgICAg ICAgICBfRGVzdHJveShfX2ZpcnN0MiwgX19taWQyKTsKICAgICAgICAgIHRocm93OwogICAgICAg IH0KICAgIH0KCn0KIyA2OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYWxnb3JpdGhtIiAy IDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDEgMwoj IDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKIyAxICIv dXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDEgMwojIDYzICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9oZWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7 CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBf RGlzdGFuY2UsIHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIF9fcHVzaF9oZWFwKF9SYW5kb21B Y2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9faG9sZUlu ZGV4LCBfRGlzdGFuY2UgX190b3BJbmRleCwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0 YW5jZSBfX3BhcmVudCA9IChfX2hvbGVJbmRleCAtIDEpIC8gMjsKICAgICAgd2hpbGUgKF9faG9s ZUluZGV4ID4gX190b3BJbmRleCAmJiAqKF9fZmlyc3QgKyBfX3BhcmVudCkgPCBfX3ZhbHVlKSB7 CiAgICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgpID0gKihfX2ZpcnN0ICsgX19wYXJlbnQp OwogICAgICAgIF9faG9sZUluZGV4ID0gX19wYXJlbnQ7CiAgICAgICAgX19wYXJlbnQgPSAoX19o b2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIH0KICAgICAgKihfX2ZpcnN0ICsgX19ob2xlSW5kZXgp ID0gX192YWx1ZTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJh dG9yPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3Ig X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6dmFsdWVf dHlwZQogICAgICAgICAgX1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAg ICBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgX19wdXNoX2hlYXAoX19maXJz dCwgX0Rpc3RhbmNlVHlwZSgoX19sYXN0IC0gX19maXJzdCkgLSAxKSwgX0Rpc3RhbmNlVHlwZSgw KSwKICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSk7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3Rh bmNlLCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9p ZAogICAgX19wdXNoX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9EaXN0YW5j ZSBfX2hvbGVJbmRleCwKICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4LCBfVHAg X192YWx1ZSwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19wYXJlbnQg PSAoX19ob2xlSW5kZXggLSAxKSAvIDI7CiAgICAgIHdoaWxlIChfX2hvbGVJbmRleCA+IF9fdG9w SW5kZXggJiYgX19jb21wKCooX19maXJzdCArIF9fcGFyZW50KSwgX192YWx1ZSkpIHsKICAgICAg ICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyBfX3BhcmVudCk7CiAgICAg ICAgX19ob2xlSW5kZXggPSBfX3BhcmVudDsKICAgICAgICBfX3BhcmVudCA9IChfX2hvbGVJbmRl eCAtIDEpIC8gMjsKICAgICAgfQogICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSBfX3Zh bHVlOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5 cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHB1c2hfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyYXRvcj46OnZhbHVlX3R5cGUKICAgICAgICAg IF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5k b21BY2Nlc3NJdGVyYXRvcj46OmRpZmZlcmVuY2VfdHlwZQogICAgICAgICAgX0Rpc3RhbmNlVHlw ZTsKCgogICAgIAoKCiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9EaXN0YW5jZVR5cGUoKF9f bGFzdCAtIF9fZmlyc3QpIC0gMSksIF9EaXN0YW5jZVR5cGUoMCksCiAgICAgICAgICAgICAgICAg IF9WYWx1ZVR5cGUoKihfX2xhc3QgLSAxKSksIF9fY29tcCk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLCB0eXBlbmFt ZSBfVHA+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBf X2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2xlbiwgX1RwIF9fdmFsdWUpCiAgICB7CiAgICAgIF9EaXN0YW5jZSBfX3RvcEluZGV4ID0g X19ob2xlSW5kZXg7CiAgICAgIF9EaXN0YW5jZSBfX3NlY29uZENoaWxkID0gMiAqIF9faG9sZUlu ZGV4ICsgMjsKICAgICAgd2hpbGUgKF9fc2Vjb25kQ2hpbGQgPCBfX2xlbikgewogICAgICAgIGlm ICgqKF9fZmlyc3QgKyBfX3NlY29uZENoaWxkKSA8ICooX19maXJzdCArIChfX3NlY29uZENoaWxk IC0gMSkpKQogICAgICAgICAgX19zZWNvbmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9f aG9sZUluZGV4KSA9ICooX19maXJzdCArIF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUlu ZGV4ID0gX19zZWNvbmRDaGlsZDsKICAgICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29u ZENoaWxkICsgMSk7CiAgICAgIH0KICAgICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsK ICAgICAgICAqKF9fZmlyc3QgKyBfX2hvbGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRD aGlsZCAtIDEpKTsKICAgICAgICBfX2hvbGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAg ICB9CiAgICAgIF9fcHVzaF9oZWFwKF9fZmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBf X3ZhbHVlKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y LCB0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAgICAg ICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSkKICAg IHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0 ZXJhdG9yPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKICAgICAgKl9fcmVzdWx0ID0gKl9f Zmlyc3Q7CiAgICAgIF9fYWRqdXN0X2hlYXAoX19maXJzdCwgX0Rpc3RhbmNlKDApLCBfRGlzdGFu Y2UoX19sYXN0IC0gX19maXJzdCksIF9fdmFsdWUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3I+CiAgICBpbmxpbmUgdm9pZAogICAgcG9wX2hlYXAoX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2xhc3Qp CiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nl c3NJdGVyYXRvcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCiAgICAg IF9fcG9wX2hlYXAoX19maXJzdCwgX19sYXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgq KF9fbGFzdCAtIDEpKSk7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJ dGVyYXRvciwgdHlwZW5hbWUgX0Rpc3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2FkanVzdF9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfRGlzdGFuY2UgX19ob2xlSW5kZXgsCiAgICAgICAgICAgICAgICAg IF9EaXN0YW5jZSBfX2xlbiwgX1RwIF9fdmFsdWUsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgX0Rpc3RhbmNlIF9fdG9wSW5kZXggPSBfX2hvbGVJbmRleDsKICAgICAgX0Rpc3RhbmNlIF9f c2Vjb25kQ2hpbGQgPSAyICogX19ob2xlSW5kZXggKyAyOwogICAgICB3aGlsZSAoX19zZWNvbmRD aGlsZCA8IF9fbGVuKSB7CiAgICAgICAgaWYgKF9fY29tcCgqKF9fZmlyc3QgKyBfX3NlY29uZENo aWxkKSwgKihfX2ZpcnN0ICsgKF9fc2Vjb25kQ2hpbGQgLSAxKSkpKQogICAgICAgICAgX19zZWNv bmRDaGlsZC0tOwogICAgICAgICooX19maXJzdCArIF9faG9sZUluZGV4KSA9ICooX19maXJzdCAr IF9fc2Vjb25kQ2hpbGQpOwogICAgICAgIF9faG9sZUluZGV4ID0gX19zZWNvbmRDaGlsZDsKICAg ICAgICBfX3NlY29uZENoaWxkID0gMiAqIChfX3NlY29uZENoaWxkICsgMSk7CiAgICAgIH0KICAg ICAgaWYgKF9fc2Vjb25kQ2hpbGQgPT0gX19sZW4pIHsKICAgICAgICAqKF9fZmlyc3QgKyBfX2hv bGVJbmRleCkgPSAqKF9fZmlyc3QgKyAoX19zZWNvbmRDaGlsZCAtIDEpKTsKICAgICAgICBfX2hv bGVJbmRleCA9IF9fc2Vjb25kQ2hpbGQgLSAxOwogICAgICB9CiAgICAgIF9fcHVzaF9oZWFwKF9f Zmlyc3QsIF9faG9sZUluZGV4LCBfX3RvcEluZGV4LCBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX19wb3BfaGVhcChfUmFuZG9t QWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwKICAg ICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fcmVzdWx0LCBfVHAgX192YWx1ZSwg X0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlOwog ICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgX19hZGp1c3RfaGVhcChfX2ZpcnN0LCBf RGlzdGFuY2UoMCksIF9EaXN0YW5jZShfX2xhc3QgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAg ICAgICBfX3ZhbHVlLCBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcmF0b3IsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgaW5saW5lIHZvaWQKICAgIHBv cF9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LAogICAgICAgICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXJhdG9yIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKCgog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIF9fcG9wX2hlYXAoX19maXJzdCwgX19s YXN0IC0gMSwgX19sYXN0IC0gMSwgX1ZhbHVlVHlwZSgqKF9fbGFzdCAtIDEpKSwgX19jb21wKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9p ZAogICAgbWFrZV9oZWFwKF9SYW5kb21BY2Nlc3NJdGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNj ZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9y X3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoK ICAgICAKCiAgICAgCgogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA8IDIpIHJldHVybjsKICAg ICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5j ZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoKICAgICAgd2hpbGUgKHRydWUpIHsKICAg ICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFyZW50LCBfX2xlbiwgX1ZhbHVlVHlwZSgq KF9fZmlyc3QgKyBfX3BhcmVudCkpKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJu OwogICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1JhbmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGluZSB2b2lk CiAgICBtYWtlX2hlYXAoX1JhbmRvbUFjY2Vzc0l0ZXJhdG9yIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyYXRvciBfX2xhc3QsCiAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0 b3I+Ojp2YWx1ZV90eXBlCiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcmF0b3I+OjpkaWZmZXJlbmNlX3R5 cGUKICAgICAgICAgIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCgogICAgICBpZiAoX19sYXN0IC0g X19maXJzdCA8IDIpIHJldHVybjsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IF9fbGFzdCAt IF9fZmlyc3Q7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19wYXJlbnQgPSAoX19sZW4gLSAyKS8yOwoK ICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICBfX2FkanVzdF9oZWFwKF9fZmlyc3QsIF9fcGFy ZW50LCBfX2xlbiwKICAgICAgICAgICAgICAgICAgICAgIF9WYWx1ZVR5cGUoKihfX2ZpcnN0ICsg X19wYXJlbnQpKSwgX19jb21wKTsKICAgICAgICBpZiAoX19wYXJlbnQgPT0gMCkgcmV0dXJuOwog ICAgICAgIF9fcGFyZW50LS07CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yPgogICAgdm9pZAogICAgc29ydF9oZWFwKF9SYW5kb21BY2Nlc3NJ dGVyYXRvciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19sYXN0KQogICAgewoKICAg ICAKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAxKQogICAgICAgIHBv cF9oZWFwKF9fZmlyc3QsIF9fbGFzdC0tKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Jh bmRvbUFjY2Vzc0l0ZXJhdG9yLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIHNvcnRf aGVhcChfUmFuZG9tQWNjZXNzSXRlcmF0b3IgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXJhdG9y IF9fbGFzdCwKICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAoKCiAg ICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMSkKICAgICAgICBwb3BfaGVhcChfX2ZpcnN0 LCBfX2xhc3QtLSwgX19jb21wKTsKICAgIH0KCn0KIyA2NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF90ZW1wYnVmLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF90ZW1wYnVmLmgiIDMKbmFtZXNwYWNlIHN0ZAp7CiMgNzQgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX3RlbXBidWYuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX0Zv cndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIF9UZW1wb3JhcnlfYnVmZmVyCnsKCiAK CiAgcHRyZGlmZl90IF9NX29yaWdpbmFsX2xlbjsKICBwdHJkaWZmX3QgX01fbGVuOwogIF9UcCog X01fYnVmZmVyOwoKCiAgdm9pZCBfTV9hbGxvY2F0ZV9idWZmZXIoKSB7CiAgICBfTV9vcmlnaW5h bF9sZW4gPSBfTV9sZW47CiAgICBfTV9idWZmZXIgPSAwOwoKICAgIGlmIChfTV9sZW4gPiAocHRy ZGlmZl90KSgyMTQ3NDgzNjQ3IC8gc2l6ZW9mKF9UcCkpKQogICAgICBfTV9sZW4gPSAyMTQ3NDgz NjQ3IC8gc2l6ZW9mKF9UcCk7CgogICAgd2hpbGUgKF9NX2xlbiA+IDApIHsKICAgICAgX01fYnVm ZmVyID0gKF9UcCopIG1hbGxvYyhfTV9sZW4gKiBzaXplb2YoX1RwKSk7CiAgICAgIGlmIChfTV9i dWZmZXIpCiAgICAgICAgYnJlYWs7CiAgICAgIF9NX2xlbiAvPSAyOwogICAgfQogIH0KCiAgdm9p ZCBfTV9pbml0aWFsaXplX2J1ZmZlcihjb25zdCBfVHAmLCBfX3RydWVfdHlwZSkge30KICB2b2lk IF9NX2luaXRpYWxpemVfYnVmZmVyKGNvbnN0IF9UcCYgdmFsLCBfX2ZhbHNlX3R5cGUpIHsKICAg IHVuaW5pdGlhbGl6ZWRfZmlsbF9uKF9NX2J1ZmZlciwgX01fbGVuLCB2YWwpOwogIH0KCnB1Ymxp YzoKCiAgcHRyZGlmZl90IHNpemUoKSBjb25zdCB7IHJldHVybiBfTV9sZW47IH0KCiAgcHRyZGlm Zl90IHJlcXVlc3RlZF9zaXplKCkgY29uc3QgeyByZXR1cm4gX01fb3JpZ2luYWxfbGVuOyB9Cgog IF9UcCogYmVnaW4oKSB7IHJldHVybiBfTV9idWZmZXI7IH0KCiAgX1RwKiBlbmQoKSB7IHJldHVy biBfTV9idWZmZXIgKyBfTV9sZW47IH0KCiAgX1RlbXBvcmFyeV9idWZmZXIoX0ZvcndhcmRJdGVy YXRvciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXJhdG9yIF9fbGFzdCkgewoKICAgIHR5cGVkZWYgdHlw ZW5hbWUgX190eXBlX3RyYWl0czxfVHA+OjpoYXNfdHJpdmlhbF9kZWZhdWx0X2NvbnN0cnVjdG9y CiAgICAgICAgICAgIF9Ucml2aWFsOwoKICAgIHRyeSB7CiAgICAgIF9NX2xlbiA9IGRpc3RhbmNl KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9NX2FsbG9jYXRlX2J1ZmZlcigpOwogICAgICBpZiAo X01fbGVuID4gMCkKICAgICAgICBfTV9pbml0aWFsaXplX2J1ZmZlcigqX19maXJzdCwgX1RyaXZp YWwoKSk7CiAgICB9CiAgICBjYXRjaCguLi4pCiAgICAgIHsKICAgICAgICBmcmVlKF9NX2J1ZmZl cik7CiAgICAgICAgX01fYnVmZmVyID0gMDsKICAgICAgICBfTV9sZW4gPSAwOwogICAgICAgIHRo cm93OwogICAgICB9CiAgfQoKICB+X1RlbXBvcmFyeV9idWZmZXIoKSB7CiAgICBfRGVzdHJveShf TV9idWZmZXIsIF9NX2J1ZmZlciArIF9NX2xlbik7CiAgICBmcmVlKF9NX2J1ZmZlcik7CiAgfQoK cHJpdmF0ZToKCiAgX1RlbXBvcmFyeV9idWZmZXIoY29uc3QgX1RlbXBvcmFyeV9idWZmZXImKSB7 fQogIHZvaWQgb3BlcmF0b3I9KGNvbnN0IF9UZW1wb3JhcnlfYnVmZmVyJikge30KfTsKCn0KIyA2 NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAyIDMKCgoKbmFt ZXNwYWNlIHN0ZAp7CiMgODQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2Fs Z28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICBpbmxpbmUgY29uc3QgX1RwJgogICAg X19tZWRpYW4oY29uc3QgX1RwJiBfX2EsIGNvbnN0IF9UcCYgX19iLCBjb25zdCBfVHAmIF9fYykK ICAgIHsKCiAgICAgCiAgICAgIGlmIChfX2EgPCBfX2IpCiAgICAgICAgaWYgKF9fYiA8IF9fYykK ICAgICAgICAgIHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19hIDwgX19jKQogICAgICAg ICAgcmV0dXJuIF9fYzsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gX19hOwogICAgICBl bHNlIGlmIChfX2EgPCBfX2MpCiAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxzZSBpZiAoX19i IDwgX19jKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAgICByZXR1cm4gX19i OwogICAgfQojIDExOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSBjb25zdCBfVHAmCiAgICBfX21lZGlhbihjb25zdCBfVHAmIF9fYSwgY29uc3QgX1RwJiBfX2Is IGNvbnN0IF9UcCYgX19jLCBfQ29tcGFyZSBfX2NvbXApCiAgICB7CgogICAgIAogICAgICBpZiAo X19jb21wKF9fYSwgX19iKSkKICAgICAgICBpZiAoX19jb21wKF9fYiwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2I7CiAgICAgICAgZWxzZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICAg IHJldHVybiBfX2M7CiAgICAgICAgZWxzZQogICAgICAgICAgcmV0dXJuIF9fYTsKICAgICAgZWxz ZSBpZiAoX19jb21wKF9fYSwgX19jKSkKICAgICAgICByZXR1cm4gX19hOwogICAgICBlbHNlIGlm IChfX2NvbXAoX19iLCBfX2MpKQogICAgICAgIHJldHVybiBfX2M7CiAgICAgIGVsc2UKICAgICAg ICByZXR1cm4gX19iOwogICAgfQojIDE1MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUg X0Z1bmN0aW9uPgogICAgX0Z1bmN0aW9uCiAgICBmb3JfZWFjaChfSW5wdXRJdGVyIF9fZmlyc3Qs IF9JbnB1dEl0ZXIgX19sYXN0LCBfRnVuY3Rpb24gX19mKQogICAgewoKICAgICAKICAgICAgZm9y ICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIF9fZigqX19maXJzdCk7 CiAgICAgIHJldHVybiBfX2Y7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlciwgdHlwZW5hbWUgX1RwPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZpbmQoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3Zh bCwKICAgICAgICAgaW5wdXRfaXRlcmF0b3JfdGFnKQogICAgewogICAgICB3aGlsZSAoX19maXJz dCAhPSBfX2xhc3QgJiYgISgqX19maXJzdCA9PSBfX3ZhbCkpCiAgICAgICAgKytfX2ZpcnN0Owog ICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5w dXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5saW5lIF9JbnB1dEl0ZXIKICAgIGZp bmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg X1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIGlucHV0X2l0ZXJhdG9yX3RhZykKICAgIHsK ICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0ICYmICFfX3ByZWQoKl9fZmlyc3QpKQogICAg ICAgICsrX19maXJzdDsKICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CgoKCgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIF9SYW5kb21B Y2Nlc3NJdGVyCiAgICBmaW5kKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nl c3NJdGVyIF9fbGFzdCwKICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCwKICAgICAgICAgcmFuZG9t X2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0 czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfX3RyaXBfY291bnQKICAgICAg ICA9IChfX2xhc3QgLSBfX2ZpcnN0KSA+PiAyOwoKICAgICAgZm9yICggOyBfX3RyaXBfY291bnQg PiAwIDsgLS1fX3RyaXBfY291bnQpIHsKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKCpfX2ZpcnN0ID09 IF9fdmFsKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CgogICAgICAgIGlmICgq X19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgKytfX2ZpcnN0OwoKICAg ICAgICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19m aXJzdDsKICAgICAgfQoKICAgICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2Fz ZSAzOgogICAgICAgIGlmICgqX19maXJzdCA9PSBfX3ZhbCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAg ICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDI6CiAgICAgICAgaWYgKCpfX2ZpcnN0ID09IF9fdmFs KSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIGNhc2UgMToKICAgICAg ICBpZiAoKl9fZmlyc3QgPT0gX192YWwpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJz dDsKICAgICAgY2FzZSAwOgogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAg ICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwg dHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBmaW5kX2lmKF9S YW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAg ICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAgICAgIHJhbmRvbV9hY2Nlc3NfaXRlcmF0 b3JfdGFnKQogICAgewogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vz c0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX190cmlwX2NvdW50CiAgICAgICAgPSAoX19sYXN0IC0g X19maXJzdCkgPj4gMjsKCiAgICAgIGZvciAoIDsgX190cmlwX2NvdW50ID4gMCA7IC0tX190cmlw X2NvdW50KSB7CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBfX2ZpcnN0Owog ICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpIHJldHVybiBf X2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkp IHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKCiAgICAgICAgaWYgKF9fcHJlZCgq X19maXJzdCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQoKICAg ICAgc3dpdGNoKF9fbGFzdCAtIF9fZmlyc3QpIHsKICAgICAgY2FzZSAzOgogICAgICAgIGlmIChf X3ByZWQoKl9fZmlyc3QpKSByZXR1cm4gX19maXJzdDsKICAgICAgICArK19fZmlyc3Q7CiAgICAg IGNhc2UgMjoKICAgICAgICBpZiAoX19wcmVkKCpfX2ZpcnN0KSkgcmV0dXJuIF9fZmlyc3Q7CiAg ICAgICAgKytfX2ZpcnN0OwogICAgICBjYXNlIDE6CiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJz dCkpIHJldHVybiBfX2ZpcnN0OwogICAgICAgICsrX19maXJzdDsKICAgICAgY2FzZSAwOgogICAg ICBkZWZhdWx0OgogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0KICAgIH0KIyAyODkgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9UcD4KICAgIGlubGluZSBfSW5wdXRJdGVyCiAg ICBmaW5kKF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgIGNv bnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAgIAoKICAgICAgcmV0dXJuIGZpbmQoX19m aXJzdCwgX19sYXN0LCBfX3ZhbCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9 CiMgMzA5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgaW5s aW5lIF9JbnB1dEl0ZXIKICAgIGZpbmRfaWYoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKICAgICAgcmV0dXJuIGZpbmRfaWYoX19maXJzdCwgX19sYXN0LCBfX3ByZWQsIF9faXRlcmF0 b3JfY2F0ZWdvcnkoX19maXJzdCkpOwogICAgfQojIDMyOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVy PgogICAgX0ZvcndhcmRJdGVyCiAgICBhZGphY2VudF9maW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0 LCBfRm9yd2FyZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKICAgICAKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gX19sYXN0OwogICAgICBfRm9yd2FyZEl0ZXIg X19uZXh0ID0gX19maXJzdDsKICAgICAgd2hpbGUoKytfX25leHQgIT0gX19sYXN0KSB7CiAgICAg ICAgaWYgKCpfX2ZpcnN0ID09ICpfX25leHQpCiAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg ICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7CiAgICB9 CiMgMzU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIGFkamFjZW50X2ZpbmQoX0ZvcndhcmRJdGVyIF9fZmlyc3Qs IF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUg X19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX25leHQg PSBfX2ZpcnN0OwogICAgICB3aGlsZSgrK19fbmV4dCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAo X19iaW5hcnlfcHJlZCgqX19maXJzdCwgKl9fbmV4dCkpCiAgICAgICAgICByZXR1cm4gX19maXJz dDsKICAgICAgICBfX2ZpcnN0ID0gX19uZXh0OwogICAgICB9CiAgICAgIHJldHVybiBfX2xhc3Q7 CiAgICB9CiMgMzg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB0eXBl bmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRlcj46OmRpZmZlcmVuY2VfdHlwZQogICAgY291 bnQoX0lucHV0SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwgY29uc3QgX1RwJiBfX3Zh bHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9fbiA9IDA7CiAgICAgIGZvciAoIDsg X19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPT0gX192 YWx1ZSkKICAgICAgICAgICsrX19uOwogICAgICByZXR1cm4gX19uOwogICAgfQojIDQxMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIHR5cGVuYW1lIGl0ZXJh dG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICBjb3VudF9pZihfSW5w dXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LCBfUHJlZGljYXRlIF9fcHJlZCkKICAg IHsKCiAgICAgCiAgICAgCgogICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0lucHV0SXRl cj46OmRpZmZlcmVuY2VfdHlwZSBfX24gPSAwOwogICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19s YXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKF9fcHJlZCgqX19maXJzdCkpCiAgICAgICAgICAr K19fbjsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KIyA0NTAgIi91c3IvbG9jYWwvaW5jbHVkZS9j KysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjI+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBzZWFyY2go X0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwgX0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg IF9Gb3J3YXJkSXRlcjIgX19maXJzdDIsIF9Gb3J3YXJkSXRlcjIgX19sYXN0MikKICAgIHsKCiAg ICAgCiAgICAgCiAgICAgCgoKCgogICAgICBpZiAoX19maXJzdDEgPT0gX19sYXN0MSB8fCBfX2Zp cnN0MiA9PSBfX2xhc3QyKQogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKCgogICAgICBfRm9yd2Fy ZEl0ZXIyIF9fdG1wKF9fZmlyc3QyKTsKICAgICAgKytfX3RtcDsKICAgICAgaWYgKF9fdG1wID09 IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGZpbmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0 Mik7CgoKCiAgICAgIF9Gb3J3YXJkSXRlcjIgX19wMSwgX19wOwoKICAgICAgX19wMSA9IF9fZmly c3QyOyArK19fcDE7CgogICAgICBfRm9yd2FyZEl0ZXIxIF9fY3VycmVudCA9IF9fZmlyc3QxOwoK ICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAgICBfX2ZpcnN0MSA9IGZp bmQoX19maXJzdDEsIF9fbGFzdDEsICpfX2ZpcnN0Mik7CiAgICAgICAgaWYgKF9fZmlyc3QxID09 IF9fbGFzdDEpCiAgICAgICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsK ICAgICAgICBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0g X19sYXN0MSkKICAgICAgICAgIHJldHVybiBfX2xhc3QxOwoKICAgICAgICB3aGlsZSAoKl9fY3Vy cmVudCA9PSAqX19wKSB7CiAgICAgICAgICBpZiAoKytfX3AgPT0gX19sYXN0MikKICAgICAgICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgICAgICAgaWYgKCsrX19jdXJyZW50ID09IF9fbGFzdDEp CiAgICAgICAgICAgIHJldHVybiBfX2xhc3QxOwogICAgICAgIH0KCiAgICAgICAgKytfX2ZpcnN0 MTsKICAgICAgfQogICAgICByZXR1cm4gX19maXJzdDE7CiAgICB9CiMgNTIyICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Rm9yd2FyZEl0ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLCB0eXBlbmFtZSBfQmluYXJ5UHJl ZD4KICAgIF9Gb3J3YXJkSXRlcjEKICAgIHNlYXJjaChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgX0ZvcndhcmRJdGVyMiBfX2ZpcnN0Miwg X0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgIF9CaW5hcnlQcmVkIF9fcHJlZGljYXRl KQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKCiAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xh c3QxIHx8IF9fZmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fZmlyc3QxOwoKCiAg ICAgIF9Gb3J3YXJkSXRlcjIgX190bXAoX19maXJzdDIpOwogICAgICArK19fdG1wOwogICAgICBp ZiAoX190bXAgPT0gX19sYXN0MikgewogICAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3Qx ICYmICFfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICArK19fZmly c3QxOwogICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgfQoKCgogICAgICBfRm9yd2FyZEl0 ZXIyIF9fcDEsIF9fcDsKCiAgICAgIF9fcDEgPSBfX2ZpcnN0MjsgKytfX3AxOwoKICAgICAgX0Zv cndhcmRJdGVyMSBfX2N1cnJlbnQgPSBfX2ZpcnN0MTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAh PSBfX2xhc3QxKSB7CiAgICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEpIHsKICAgICAg ICAgIGlmIChfX3ByZWRpY2F0ZSgqX19maXJzdDEsICpfX2ZpcnN0MikpCiAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgIV9fcHJlZGljYXRlKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAg ICAgICByZXR1cm4gX19sYXN0MTsKCiAgICAgICAgX19wID0gX19wMTsKICAgICAgICBfX2N1cnJl bnQgPSBfX2ZpcnN0MTsKICAgICAgICBpZiAoKytfX2N1cnJlbnQgPT0gX19sYXN0MSkgcmV0dXJu IF9fbGFzdDE7CgogICAgICAgIHdoaWxlIChfX3ByZWRpY2F0ZSgqX19jdXJyZW50LCAqX19wKSkg ewogICAgICAgICAgaWYgKCsrX19wID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBfX2Zp cnN0MTsKICAgICAgICAgIGlmICgrK19fY3VycmVudCA9PSBfX2xhc3QxKQogICAgICAgICAgICBy ZXR1cm4gX19sYXN0MTsKICAgICAgICB9CgogICAgICAgICsrX19maXJzdDE7CiAgICAgIH0KICAg ICAgcmV0dXJuIF9fZmlyc3QxOwogICAgfQojIDU5NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0 eXBlbmFtZSBfSW50ZWdlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBzZWFy Y2hfbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAg ICAgIF9JbnRlZ2VyIF9fY291bnQsIGNvbnN0IF9UcCYgX192YWwpCiAgICB7CgogICAgIAogICAg IAoKICAgICAKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7 CiAgICAgIGVsc2UgewogICAgICAgIF9fZmlyc3QgPSBmaW5kKF9fZmlyc3QsIF9fbGFzdCwgX192 YWwpOwogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgX0ludGVn ZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9yd2FyZEl0ZXIgX19pID0gX19maXJz dDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUgKF9faSAhPSBfX2xhc3QgJiYgX19u ICE9IDAgJiYgKl9faSA9PSBfX3ZhbCkgewogICAgICAgICAgICArK19faTsKICAgICAgICAgICAg LS1fX247CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoX19uID09IDApCiAgICAgICAgICAgIHJl dHVybiBfX2ZpcnN0OwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2ZpcnN0ID0gZmluZChf X2ksIF9fbGFzdCwgX192YWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gX19sYXN0OwogICAg ICB9CiAgICB9CiMgNjQzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9JbnRlZ2Vy LCB0eXBlbmFtZSBfVHAsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWQ+CiAgICBfRm9y d2FyZEl0ZXIKICAgIHNlYXJjaF9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIg X19sYXN0LAogICAgICAgICAgICAgX0ludGVnZXIgX19jb3VudCwgY29uc3QgX1RwJiBfX3ZhbCwK ICAgICAgICAgICAgIF9CaW5hcnlQcmVkIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKCiAgICAgIGlmIChfX2NvdW50IDw9IDApCiAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAg IGVsc2UgewogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAgICAgaWYg KF9fYmluYXJ5X3ByZWQoKl9fZmlyc3QsIF9fdmFsKSkKICAgICAgICAgICAgYnJlYWs7CiAgICAg ICAgICArK19fZmlyc3Q7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFz dCkgewogICAgICAgICAgX0ludGVnZXIgX19uID0gX19jb3VudCAtIDE7CiAgICAgICAgICBfRm9y d2FyZEl0ZXIgX19pID0gX19maXJzdDsKICAgICAgICAgICsrX19pOwogICAgICAgICAgd2hpbGUg KF9faSAhPSBfX2xhc3QgJiYgX19uICE9IDAgJiYgX19iaW5hcnlfcHJlZCgqX19pLCBfX3ZhbCkp IHsKICAgICAgICAgICAgKytfX2k7CiAgICAgICAgICAgIC0tX19uOwogICAgICAgICAgfQogICAg ICAgICAgaWYgKF9fbiA9PSAwKQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAgICAgICAg IGVsc2UgewogICAgICAgICAgICB3aGlsZSAoX19pICE9IF9fbGFzdCkgewogICAgICAgICAgICAg IGlmIChfX2JpbmFyeV9wcmVkKCpfX2ksIF9fdmFsKSkKICAgICAgICAgICAgICAgIGJyZWFrOwog ICAgICAgICAgICAgICsrX19pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIF9fZmlyc3QgPSBf X2k7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBfX2xhc3Q7CiAgICAgIH0K ICAgIH0KIyA2OTcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJkSXRl cjI+CiAgICBfRm9yd2FyZEl0ZXIyCiAgICBzd2FwX3JhbmdlcyhfRm9yd2FyZEl0ZXIxIF9fZmly c3QxLCBfRm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIy IF9fZmlyc3QyKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QxICE9IF9fbGFzdDE7ICsrX19maXJzdDEsICsrX19maXJzdDIpCiAgICAgICAg aXRlcl9zd2FwKF9fZmlyc3QxLCBfX2ZpcnN0Mik7CiAgICAgIHJldHVybiBfX2ZpcnN0MjsKICAg IH0KIyA3MzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBl bmFtZSBfVW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1 dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgX091dHB1dEl0 ZXIgX19yZXN1bHQsIF9VbmFyeU9wZXJhdGlvbiBfX3VuYXJ5X29wKQogICAgewoKICAgICAKICAg ICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0LCArK19fcmVz dWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fdW5hcnlfb3AoKl9fZmlyc3QpOwogICAgICByZXR1 cm4gX19yZXN1bHQ7CiAgICB9CiMgNzY1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9C aW5hcnlPcGVyYXRpb24+CiAgICBfT3V0cHV0SXRlcgogICAgdHJhbnNmb3JtKF9JbnB1dEl0ZXIx IF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgIF9JbnB1dEl0ZXIy IF9fZmlyc3QyLCBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICBfQmluYXJ5T3Bl cmF0aW9uIF9fYmluYXJ5X29wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgoKICAgICAgZm9y ICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxLCArK19fZmlyc3QyLCArK19fcmVz dWx0KQogICAgICAgICpfX3Jlc3VsdCA9IF9fYmluYXJ5X29wKCpfX2ZpcnN0MSwgKl9fZmlyc3Qy KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQojIDc5NiAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJ dGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAgICByZXBsYWNlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICBjb25zdCBfVHAmIF9fb2xkX3Zh bHVlLCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgq X19maXJzdCA9PSBfX29sZF92YWx1ZSkKICAgICAgICAgICpfX2ZpcnN0ID0gX19uZXdfdmFsdWU7 CiAgICB9CiMgODI1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgi IDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGUs IHR5cGVuYW1lIF9UcD4KICAgIHZvaWQKICAgIHJlcGxhY2VfaWYoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVk LCBjb25zdCBfVHAmIF9fbmV3X3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoKICAg ICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmIChfX3By ZWQoKl9fZmlyc3QpKQogICAgICAgICAgKl9fZmlyc3QgPSBfX25ld192YWx1ZTsKICAgIH0KIyA4 NTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVwbGFjZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwg X0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQs CiAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX29sZF92YWx1ZSwgY29uc3QgX1RwJiBfX25l d192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19maXJz dCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdCA9PSBfX29sZF92YWx1ZSA/IF9fbmV3X3ZhbHVlIDogKl9fZmlyc3Q7CiAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgIH0KIyA4ODggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9U cD4KICAgIF9PdXRwdXRJdGVyCiAgICByZXBsYWNlX2NvcHlfaWYoX0lucHV0SXRlciBfX2ZpcnN0 LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jl c3VsdCwKICAgICAgICAgICAgICAgICAgICBfUHJlZGljYXRlIF9fcHJlZCwgY29uc3QgX1RwJiBf X25ld192YWx1ZSkKICAgIHsKCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgIGZvciAoIDsgX19m aXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCwgKytfX3Jlc3VsdCkKICAgICAgICAqX19yZXN1bHQg PSBfX3ByZWQoKl9fZmlyc3QpID8gX19uZXdfdmFsdWUgOiAqX19maXJzdDsKICAgICAgcmV0dXJu IF9fcmVzdWx0OwogICAgfQojIDkxOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBf R2VuZXJhdG9yPgogICAgdm9pZAogICAgZ2VuZXJhdGUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9G b3J3YXJkSXRlciBfX2xhc3QsIF9HZW5lcmF0b3IgX19nZW4pCiAgICB7CgogICAgIAogICAgIAoK CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7ICsrX19maXJzdCkKICAgICAgICAqX19m aXJzdCA9IF9fZ2VuKCk7CiAgICB9CiMgOTQyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5h bWUgX1NpemUsIHR5cGVuYW1lIF9HZW5lcmF0b3I+CiAgICBfT3V0cHV0SXRlcgogICAgZ2VuZXJh dGVfbihfT3V0cHV0SXRlciBfX2ZpcnN0LCBfU2l6ZSBfX24sIF9HZW5lcmF0b3IgX19nZW4pCiAg ICB7CgogICAgIAoKCgogICAgICBmb3IgKCA7IF9fbiA+IDA7IC0tX19uLCArK19fZmlyc3QpCiAg ICAgICAgKl9fZmlyc3QgPSBfX2dlbigpOwogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyA5 NjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBs YXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBf VHA+CiAgICBfT3V0cHV0SXRlcgogICAgcmVtb3ZlX2NvcHkoX0lucHV0SXRlciBfX2ZpcnN0LCBf SW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9PdXRwdXRJdGVyIF9fcmVzdWx0LCBj b25zdCBfVHAmIF9fdmFsdWUpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICBmb3Ig KCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgaWYgKCEoKl9fZmlyc3Qg PT0gX192YWx1ZSkpIHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0OwogICAgICAgICAg KytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgIH0KIyAxMDAz ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwgdHlwZW5hbWUgX1By ZWRpY2F0ZT4KICAgIF9PdXRwdXRJdGVyCiAgICByZW1vdmVfY29weV9pZihfSW5wdXRJdGVyIF9f Zmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9QcmVkaWNhdGUgX19wcmVkKQogICAgewoKICAgICAKICAgICAKCiAgICAgCgoK ICAgICAgZm9yICggOyBfX2ZpcnN0ICE9IF9fbGFzdDsgKytfX2ZpcnN0KQogICAgICAgIGlmICgh X19wcmVkKCpfX2ZpcnN0KSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAg ICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgfQoj IDEwMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJ dGVyCiAgICByZW1vdmUoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3Qs CiAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbHVlKQogICAgewoKICAgICAKICAgICAKCiAgICAg CgoKICAgICAgX19maXJzdCA9IGZpbmQoX19maXJzdCwgX19sYXN0LCBfX3ZhbHVlKTsKICAgICAg X0ZvcndhcmRJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFz dCA/IF9fZmlyc3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHko KytfX2ksIF9fbGFzdCwgX19maXJzdCwgX192YWx1ZSk7CiAgICB9CiMgMTA3MyAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfUHJlZGljYXRlPgogICAgX0ZvcndhcmRJdGVyCiAgICBy ZW1vdmVfaWYoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAg ICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIF9f Zmlyc3QgPSBmaW5kX2lmKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkKTsKICAgICAgX0ZvcndhcmRJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX2ZpcnN0ID09IF9fbGFzdCA/IF9fZmly c3QKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogcmVtb3ZlX2NvcHlfaWYoKytfX2ks IF9fbGFzdCwgX19maXJzdCwgX19wcmVkKTsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAgICBfT3V0cHV0SXRlcgogICAg X191bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAg ICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgb3V0 cHV0X2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxf SW5wdXRJdGVyPjo6dmFsdWVfdHlwZSBfX3ZhbHVlID0gKl9fZmlyc3Q7CiAgICAgICpfX3Jlc3Vs dCA9IF9fdmFsdWU7CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlm ICghKF9fdmFsdWUgPT0gKl9fZmlyc3QpKSB7CiAgICAgICAgICBfX3ZhbHVlID0gKl9fZmlyc3Q7 CiAgICAgICAgICAqKytfX3Jlc3VsdCA9IF9fdmFsdWU7CiAgICAgICAgfQogICAgICByZXR1cm4g KytfX3Jlc3VsdDsKICAgIH0KCgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwg dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgX0ZvcndhcmRJdGVyCiAgICBfX3VuaXF1ZV9jb3B5 KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg IF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgZm9yd2FyZF9pdGVyYXRv cl90YWcpCiAgICB7CgogICAgICAqX19yZXN1bHQgPSAqX19maXJzdDsKICAgICAgd2hpbGUgKCsr X19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCEoKl9fcmVzdWx0ID09ICpfX2ZpcnN0KSkK ICAgICAgICAgICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7CiAgICAgIHJldHVybiArK19fcmVzdWx0 OwogICAgfQojIDExNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVy PgogICAgaW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmly c3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1 bHQpCiAgICB7CgogICAgIAogICAgIAoKICAgICAKCgogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0 ZXJhdG9yX3RyYWl0czxfT3V0cHV0SXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsK CiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuIF9fcmVzdWx0OwogICAgICByZXR1 cm4gX191bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fcmVzdWx0LCBfSXRlclR5cGUoKSk7 CiAgICB9CiMgMTE3MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXIs IHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+CiAgICBfT3V0cHV0SXRlcgogICAgX191bmlxdWVf Y29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAg ICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAgICAgICAgX0JpbmFyeVByZWRp Y2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBvdXRwdXRfaXRlcmF0b3JfdGFn KQogICAgewoKICAgICAKCgoKICAgICAgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9JbnB1dEl0 ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsdWUgPSAqX19maXJzdDsKICAgICAgKl9fcmVzdWx0ID0gX192 YWx1ZTsKICAgICAgd2hpbGUgKCsrX19maXJzdCAhPSBfX2xhc3QpCiAgICAgICAgaWYgKCFfX2Jp bmFyeV9wcmVkKF9fdmFsdWUsICpfX2ZpcnN0KSkgewogICAgICAgICAgX192YWx1ZSA9ICpfX2Zp cnN0OwogICAgICAgICAgKisrX19yZXN1bHQgPSBfX3ZhbHVlOwogICAgICAgIH0KICAgICAgcmV0 dXJuICsrX19yZXN1bHQ7CiAgICB9CiMgMTE5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlciwgdHlwZW5h bWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAgX0ZvcndhcmRJ dGVyCiAgICBfX3VuaXF1ZV9jb3B5KF9JbnB1dEl0ZXIgX19maXJzdCwgX0lucHV0SXRlciBfX2xh c3QsCiAgICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCwKICAgICAgICAgICAg ICAgICAgX0JpbmFyeVByZWRpY2F0ZSBfX2JpbmFyeV9wcmVkLAogICAgICAgICAgICAgICAgICBm b3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKCiAgICAgCgoKCiAgICAgICpfX3Jlc3VsdCA9ICpf X2ZpcnN0OwogICAgICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoIV9f YmluYXJ5X3ByZWQoKl9fcmVzdWx0LCAqX19maXJzdCkpICorK19fcmVzdWx0ID0gKl9fZmlyc3Q7 CiAgICAgIHJldHVybiArK19fcmVzdWx0OwogICAgfQojIDEyMzIgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0 ZXIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLCB0eXBlbmFtZSBfQmluYXJ5UHJlZGljYXRlPgogICAg aW5saW5lIF9PdXRwdXRJdGVyCiAgICB1bmlxdWVfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9J bnB1dEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQsCiAg ICAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fYmluYXJ5X3ByZWQpCiAgICB7CgogICAg IAogICAgIAoKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9PdXRwdXRJ dGVyPjo6aXRlcmF0b3JfY2F0ZWdvcnkgX0l0ZXJUeXBlOwoKICAgICAgaWYgKF9fZmlyc3QgPT0g X19sYXN0KSByZXR1cm4gX19yZXN1bHQ7CiAgICAgIHJldHVybiBfX3VuaXF1ZV9jb3B5KF9fZmly c3QsIF9fbGFzdCwKX19yZXN1bHQsIF9fYmluYXJ5X3ByZWQsIF9JdGVyVHlwZSgpKTsKICAgIH0K IyAxMjYzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVuaXF1 ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAg ICAgIAogICAgICAgICAKCgogICAgICAgICAgX19maXJzdCA9IGFkamFjZW50X2ZpbmQoX19maXJz dCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3Qs IF9fZmlyc3QpOwogICAgfQojIDEyOTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X0JpbmFyeVByZWRpY2F0ZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgdW5pcXVlKF9Gb3J3YXJkSXRl ciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgIF9CaW5hcnlQcmVkaWNh dGUgX19iaW5hcnlfcHJlZCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIF9fZmlyc3QgPSBh ZGphY2VudF9maW5kKF9fZmlyc3QsIF9fbGFzdCwgX19iaW5hcnlfcHJlZCk7CiAgICAgIHJldHVy biB1bmlxdWVfY29weShfX2ZpcnN0LCBfX2xhc3QsIF9fZmlyc3QsIF9fYmluYXJ5X3ByZWQpOwog ICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXI+CiAgICB2 b2lkCiAgICBfX3JldmVyc2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlv bmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgYmlkaXJlY3Rpb25hbF9p dGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0IHx8IF9fZmlyc3QgPT0gLS1fX2xhc3QpCiAgICAgICAgICAgICAg ICAgIHJldHVybjsKICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICBpdGVyX3N3YXAo X19maXJzdCsrLCBfX2xhc3QpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFu ZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9fcmV2ZXJzZShfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgcmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgICAgICB3aGlsZSAoX19m aXJzdCA8IF9fbGFzdCkKICAgICAgICAgICAgaXRlcl9zd2FwKF9fZmlyc3QrKywgLS1fX2xhc3Qp OwogICAgfQojIDEzNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIGlubGluZSB2 b2lkCiAgICByZXZlcnNlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0KQogICAgewoKICAgICAgICAgCgogICAgICAgICAgX19yZXZlcnNlKF9fZmly c3QsIF9fbGFzdCwgX19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CiMgMTM3NCAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9P dXRwdXRJdGVyCiAgICByZXZlcnNlX2NvcHkoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsIF9C aWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp cnN0ICE9IF9fbGFzdCkgewogICAgICAgIC0tX19sYXN0OwogICAgICAgICpfX3Jlc3VsdCA9ICpf X2xhc3Q7CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gX19yZXN1bHQ7 CiAgICB9CiMgMTM5OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0V1Y2xpZGVhblJpbmdFbGVtZW50PgogICAgX0V1Y2xp ZGVhblJpbmdFbGVtZW50CiAgICBfX2djZChfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX19tLCBfRXVj bGlkZWFuUmluZ0VsZW1lbnQgX19uKQogICAgewogICAgICB3aGlsZSAoX19uICE9IDApIHsKICAg ICAgICBfRXVjbGlkZWFuUmluZ0VsZW1lbnQgX190ID0gX19tICUgX19uOwogICAgICAgIF9fbSA9 IF9fbjsKICAgICAgICBfX24gPSBfX3Q7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fbTsKICAgIH0K CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICB2b2lkCiAgICBfX3Jv dGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwKICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgZm9y d2FyZF9pdGVyYXRvcl90YWcpCiAgICB7CiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkg fHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgX0ZvcndhcmRJ dGVyIF9fZmlyc3QyID0gX19taWRkbGU7CiAgICAgIGRvIHsKICAgICAgICBzd2FwKCpfX2ZpcnN0 KyssICpfX2ZpcnN0MisrKTsKICAgICAgICBpZiAoX19maXJzdCA9PSBfX21pZGRsZSkKICAgICAg ICAgIF9fbWlkZGxlID0gX19maXJzdDI7CiAgICAgIH0gd2hpbGUgKF9fZmlyc3QyICE9IF9fbGFz dCk7CgogICAgICBfX2ZpcnN0MiA9IF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fZmlyc3QyICE9 IF9fbGFzdCkgewogICAgICAgIHN3YXAoKl9fZmlyc3QrKywgKl9fZmlyc3QyKyspOwogICAgICAg IGlmIChfX2ZpcnN0ID09IF9fbWlkZGxlKQogICAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0MjsK ICAgICAgICBlbHNlIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QpCiAgICAgICAgICBfX2ZpcnN0MiA9 IF9fbWlkZGxlOwogICAgICB9CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGly ZWN0aW9uYWxJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX0JpZGlyZWN0aW9uYWxJdGVyIF9f Zmlyc3QsCiAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAg ICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgIGJpZGlyZWN0aW9u YWxfaXRlcmF0b3JfdGFnKQogICAgewoKICAgICAKCgogICAgICBpZiAoKF9fZmlyc3QgPT0gX19t aWRkbGUpIHx8IChfX2xhc3QgPT0gX19taWRkbGUpKQogICAgICAgIHJldHVybjsKCiAgICAgIF9f cmV2ZXJzZShfX2ZpcnN0LCBfX21pZGRsZSwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7 CiAgICAgIF9fcmV2ZXJzZShfX21pZGRsZSwgX19sYXN0LCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKCiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbWlkZGxlICYmIF9fbWlkZGxlICE9 IF9fbGFzdCkKICAgICAgICBzd2FwICgqX19maXJzdCsrLCAqLS1fX2xhc3QpOwoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19taWRkbGUpIHsKICAgICAgICBfX3JldmVyc2UoX19taWRkbGUsIF9fbGFz dCwgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcoKSk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAg ICAgICAgX19yZXZlcnNlKF9fZmlyc3QsIF9fbWlkZGxlLCBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9y X3RhZygpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21B Y2Nlc3NJdGVyPgogICAgdm9pZAogICAgX19yb3RhdGUoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJz dCwKICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlLAogICAgICAgICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgcmFuZG9tX2FjY2Vzc19pdGVy YXRvcl90YWcpCiAgICB7CgogICAgIAoKCiAgICAgIGlmICgoX19maXJzdCA9PSBfX21pZGRsZSkg fHwgKF9fbGFzdCA9PSBfX21pZGRsZSkpCiAgICAgICAgcmV0dXJuOwoKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5 cGUgX0Rpc3RhbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFu ZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIF9EaXN0YW5jZSBf X24gPSBfX2xhc3QgLSBfX2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19rID0gX19taWRkbGUgLSBf X2ZpcnN0OwogICAgICBfRGlzdGFuY2UgX19sID0gX19uIC0gX19rOwoKICAgICAgaWYgKF9fayA9 PSBfX2wpIHsKICAgICAgICBzd2FwX3JhbmdlcyhfX2ZpcnN0LCBfX21pZGRsZSwgX19taWRkbGUp OwogICAgICAgIHJldHVybjsKICAgICAgfQoKICAgICAgX0Rpc3RhbmNlIF9fZCA9IF9fZ2NkKF9f biwgX19rKTsKCiAgICAgIGZvciAoX0Rpc3RhbmNlIF9faSA9IDA7IF9faSA8IF9fZDsgX19pKysp IHsKICAgICAgICBfVmFsdWVUeXBlIF9fdG1wID0gKl9fZmlyc3Q7CiAgICAgICAgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19wID0gX19maXJzdDsKCiAgICAgICAgaWYgKF9fayA8IF9fbCkgewogICAgICAg ICAgZm9yIChfRGlzdGFuY2UgX19qID0gMDsgX19qIDwgX19sL19fZDsgX19qKyspIHsKICAgICAg ICAgICAgaWYgKF9fcCA+IF9fZmlyc3QgKyBfX2wpIHsKICAgICAgICAgICAgICAqX19wID0gKihf X3AgLSBfX2wpOwogICAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICAgIH0KCiAgICAg ICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAgICAgICAgICAgIF9fcCArPSBfX2s7CiAgICAg ICAgICB9CiAgICAgICAgfQoKICAgICAgICBlbHNlIHsKICAgICAgICAgIGZvciAoX0Rpc3RhbmNl IF9faiA9IDA7IF9faiA8IF9fay9fX2QgLSAxOyBfX2ogKyspIHsKICAgICAgICAgICAgaWYgKF9f cCA8IF9fbGFzdCAtIF9faykgewogICAgICAgICAgICAgICpfX3AgPSAqKF9fcCArIF9fayk7CiAg ICAgICAgICAgICAgX19wICs9IF9fazsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgKl9fcCA9 ICogKF9fcCAtIF9fbCk7CiAgICAgICAgICAgIF9fcCAtPSBfX2w7CiAgICAgICAgICB9CiAgICAg ICAgfQoKICAgICAgICAqX19wID0gX190bXA7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAg ICB9CiMgMTU2MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAz CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgaW5saW5lIHZvaWQKICAgIHJv dGF0ZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfRm9yd2Fy ZEl0ZXIgX19sYXN0KQogICAgewoKICAgICAKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0 b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46Oml0ZXJhdG9yX2NhdGVnb3J5IF9JdGVyVHlwZTsKICAg ICAgX19yb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX0l0ZXJUeXBlKCkpOwogICAg fQojIDE1ODkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwog IHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX091dHB1dEl0ZXI+CiAg ICBfT3V0cHV0SXRlcgogICAgcm90YXRlX2NvcHkoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3 YXJkSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgIF9Gb3J3YXJkSXRlciBfX2xhc3QsIF9P dXRwdXRJdGVyIF9fcmVzdWx0KQogICAgewoKICAgICAKICAgICAKCgogICAgICByZXR1cm4gY29w eShfX2ZpcnN0LCBfX21pZGRsZSwgY29weShfX21pZGRsZSwgX19sYXN0LCBfX3Jlc3VsdCkpOwog ICAgfQojIDE2MTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIg MwogIHRlbXBsYXRlPHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIGlubGluZSBfRGlzdGFuY2UKICAg IF9fcmFuZG9tX251bWJlcihfRGlzdGFuY2UgX19uKQogICAgewoKICAgICAgcmV0dXJuIGxyYW5k NDgoKSAlIF9fbjsKCgoKICAgIH0KIyAxNjM0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4K ICAgIGlubGluZSB2b2lkCiAgICByYW5kb21fc2h1ZmZsZShfUmFuZG9tQWNjZXNzSXRlciBfX2Zp cnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAoKCiAgICAgIGlmIChf X2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9f aSA9IF9fZmlyc3QgKyAxOyBfX2kgIT0gX19sYXN0OyArK19faSkKICAgICAgICBpdGVyX3N3YXAo X19pLCBfX2ZpcnN0ICsgX19yYW5kb21fbnVtYmVyKChfX2kgLSBfX2ZpcnN0KSArIDEpKTsKICAg IH0KIyAxNjYwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1JhbmRvbU51 bWJlckdlbmVyYXRvcj4KICAgIHZvaWQKICAgIHJhbmRvbV9zaHVmZmxlKF9SYW5kb21BY2Nlc3NJ dGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg IF9SYW5kb21OdW1iZXJHZW5lcmF0b3ImIF9fcmFuZCkKICAgIHsKCiAgICAgCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KSByZXR1cm47CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vzc0l0ZXIg X19pID0gX19maXJzdCArIDE7IF9faSAhPSBfX2xhc3Q7ICsrX19pKQogICAgICAgIGl0ZXJfc3dh cChfX2ksIF9fZmlyc3QgKyBfX3JhbmQoKF9faSAtIF9fZmlyc3QpICsgMSkpOwogICAgfQoKCgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+ CiAgICBfRm9yd2FyZEl0ZXIKICAgIF9fcGFydGl0aW9uKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBf Rm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAg ICAgICAgICAgICAgICBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAgICAgIHdoaWxlIChfX3ByZWQoKl9fZmly c3QpKQogICAgICAgIGlmICgrK19fZmlyc3QgPT0gX19sYXN0KSByZXR1cm4gX19maXJzdDsKCiAg ICAgIF9Gb3J3YXJkSXRlciBfX25leHQgPSBfX2ZpcnN0OwoKICAgICAgd2hpbGUgKCsrX19uZXh0 ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19wcmVkKCpfX25leHQpKSB7CiAgICAgICAgICBzd2Fw KCpfX2ZpcnN0LCAqX19uZXh0KTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICB9CgogICAg ICByZXR1cm4gX19maXJzdDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIK ICAgIF9fcGFydGl0aW9uKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LCBfQmlkaXJlY3Rpb25h bEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQsCiAgICAgICAg ICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgd2hpbGUgKHRy dWUpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkKICAgICAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkKICAgICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgICBlbHNlIGlmIChfX3ByZWQo Kl9fZmlyc3QpKQogICAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIGJyZWFrOwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxlICh0cnVlKQogICAgICAg ICAgaWYgKF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgICAgICByZXR1cm4gX19maXJzdDsKICAg ICAgICAgIGVsc2UgaWYgKCFfX3ByZWQoKl9fbGFzdCkpCiAgICAgICAgICAgIC0tX19sYXN0Owog ICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsKICAgICAgICBpdGVyX3N3YXAoX19maXJz dCwgX19sYXN0KTsKICAgICAgICArK19fZmlyc3Q7CiAgICAgIH0KICAgIH0KIyAxNzQ4ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9QcmVkaWNhdGU+CiAgICBpbmxpbmUgX0Zvcndh cmRJdGVyCiAgICBwYXJ0aXRpb24oX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBf X2xhc3QsCiAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7CgogICAgIAogICAg IAoKCiAgICAgIHJldHVybiBfX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwgX19p dGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0KSk7CiAgICB9CgoKCgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZSwgdHlwZW5hbWUgX0Rpc3RhbmNl PgogICAgX0ZvcndhcmRJdGVyCiAgICBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfRm9yd2Fy ZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4pCiAgICB7CiAgICAg IGlmIChfX2xlbiA9PSAxKQogICAgICAgIHJldHVybiBfX3ByZWQoKl9fZmlyc3QpID8gX19sYXN0 IDogX19maXJzdDsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlID0gX19maXJzdDsKICAgICAg YWR2YW5jZShfX21pZGRsZSwgX19sZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4g PSBfX2lucGxhY2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX21pZGRsZSwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3ByZWQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s ZW4gLyAyKTsKICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19pbnBsYWNlX3N0YWJsZV9wYXJ0 aXRpb24oX19taWRkbGUsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbiAtIF9fbGVuIC8gMik7CiAgICAgIHJvdGF0 ZShfX2JlZ2luLCBfX21pZGRsZSwgX19lbmQpOwogICAgICBhZHZhbmNlKF9fYmVnaW4sIGRpc3Rh bmNlKF9fbWlkZGxlLCBfX2VuZCkpOwogICAgICByZXR1cm4gX19iZWdpbjsKICAgIH0KCgoKCgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9Qb2ludGVyLCB0eXBl bmFtZSBfUHJlZGljYXRlLAogICAgICAgICAgIHR5cGVuYW1lIF9EaXN0YW5jZT4KICAgIF9Gb3J3 YXJkSXRlcgogICAgX19zdGFibGVfcGFydGl0aW9uX2FkYXB0aXZlKF9Gb3J3YXJkSXRlciBfX2Zp cnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9QcmVkaWNhdGUgX19wcmVkLCBfRGlzdGFuY2UgX19sZW4sCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX0Rpc3RhbmNlIF9fYnVmZmVyX3NpemUpCiAgICB7CiAgICAgIGlmIChfX2xlbiA8PSBf X2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fcmVzdWx0MSA9IF9fZmlyc3Q7 CiAgICAgICAgX1BvaW50ZXIgX19yZXN1bHQyID0gX19idWZmZXI7CiAgICAgICAgZm9yICggOyBf X2ZpcnN0ICE9IF9fbGFzdCA7ICsrX19maXJzdCkKICAgICAgICAgIGlmIChfX3ByZWQoKl9fZmly c3QpKSB7CiAgICAgICAgICAgICpfX3Jlc3VsdDEgPSAqX19maXJzdDsKICAgICAgICAgICAgKytf X3Jlc3VsdDE7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgKl9fcmVz dWx0MiA9ICpfX2ZpcnN0OwogICAgICAgICAgICArK19fcmVzdWx0MjsKICAgICAgICAgIH0KICAg ICAgICBjb3B5KF9fYnVmZmVyLCBfX3Jlc3VsdDIsIF9fcmVzdWx0MSk7CiAgICAgICAgcmV0dXJu IF9fcmVzdWx0MTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfRm9yd2FyZEl0ZXIgX19t aWRkbGUgPSBfX2ZpcnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9fbGVuIC8gMik7CiAg ICAgICAgX0ZvcndhcmRJdGVyIF9fYmVnaW4gPSBfX3N0YWJsZV9wYXJ0aXRpb25fYWRhcHRpdmUo X19maXJzdCwgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuIC8gMiwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1ZmZlciwgX19i dWZmZXJfc2l6ZSk7CiAgICAgICAgX0ZvcndhcmRJdGVyIF9fZW5kID0gX19zdGFibGVfcGFydGl0 aW9uX2FkYXB0aXZlKCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19wcmVkLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4gLSBfX2xlbiAv IDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgcm90YXRlKF9fYmVnaW4sIF9f bWlkZGxlLCBfX2VuZCk7CiAgICAgICAgYWR2YW5jZShfX2JlZ2luLCBkaXN0YW5jZShfX21pZGRs ZSwgX19lbmQpKTsKICAgICAgICByZXR1cm4gX19iZWdpbjsKICAgICAgfQogICAgfQojIDE4NDgg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1ByZWRpY2F0ZT4KICAgIF9Gb3J3YXJk SXRlcgogICAgc3RhYmxlX3BhcnRpdGlvbihfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJ dGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgX1ByZWRpY2F0ZSBfX3ByZWQpCiAgICB7 CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1 cm4gX19maXJzdDsKICAgICAgZWxzZQogICAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKICAgICAgICBfVGVtcG9yYXJ5X2J1ZmZlcjxfRm9y d2FyZEl0ZXIsIF9WYWx1ZVR5cGU+IF9fYnVmKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgaWYg KF9fYnVmLnNpemUoKSA+IDApCiAgICAgICAgICByZXR1cm4gX19zdGFibGVfcGFydGl0aW9uX2Fk YXB0aXZlKF9fZmlyc3QsIF9fbGFzdCwgX19wcmVkLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVlc3RlZF9zaXplKCkp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2J1Zi5iZWdp bigpLCBfX2J1Zi5zaXplKCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfX2lucGxh Y2Vfc3RhYmxlX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsIF9fcHJlZCwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2VUeXBlKF9fYnVmLnJlcXVl c3RlZF9zaXplKCkpKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAg X191bmd1YXJkZWRfcGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCkK ICAgIHsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICB3aGlsZSAoKl9fZmlyc3QgPCBfX3Bp dm90KQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0OwogICAgICAgIHdoaWxl IChfX3Bpdm90IDwgKl9fbGFzdCkKICAgICAgICAgIC0tX19sYXN0OwogICAgICAgIGlmICghKF9f Zmlyc3QgPCBfX2xhc3QpKQogICAgICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICAgICAgaXRlcl9z d2FwKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgKytfX2ZpcnN0OwogICAgICB9CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9UcCwg dHlwZW5hbWUgX0NvbXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfVHAgX19waXZvdCwgX0NvbXBhcmUgX19j b21wKQogICAgewogICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgIHdoaWxlIChfX2NvbXAoKl9f Zmlyc3QsIF9fcGl2b3QpKQogICAgICAgICAgKytfX2ZpcnN0OwogICAgICAgIC0tX19sYXN0Owog ICAgICAgIHdoaWxlIChfX2NvbXAoX19waXZvdCwgKl9fbGFzdCkpCiAgICAgICAgICAtLV9fbGFz dDsKICAgICAgICBpZiAoIShfX2ZpcnN0IDwgX19sYXN0KSkKICAgICAgICAgIHJldHVybiBfX2Zp cnN0OwogICAgICAgIGl0ZXJfc3dhcChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICsrX19maXJz dDsKICAgICAgfQogICAgfQojIDE5MjkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIGVudW0geyBfTV90aHJlc2hvbGQgPSAxNiB9OwoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICB2b2lkCiAg ICBfX3VuZ3VhcmRlZF9saW5lYXJfaW5zZXJ0KF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwgX1Rw IF9fdmFsKQogICAgewogICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX25leHQgPSBfX2xhc3Q7CiAg ICAgIC0tX19uZXh0OwogICAgICB3aGlsZSAoX192YWwgPCAqX19uZXh0KSB7CiAgICAgICAgKl9f bGFzdCA9ICpfX25leHQ7CiAgICAgICAgX19sYXN0ID0gX19uZXh0OwogICAgICAgIC0tX19uZXh0 OwogICAgICB9CiAgICAgICpfX2xhc3QgPSBfX3ZhbDsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIHZvaWQKICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LCBfVHAgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgX1JhbmRv bUFjY2Vzc0l0ZXIgX19uZXh0ID0gX19sYXN0OwogICAgICAtLV9fbmV4dDsKICAgICAgd2hpbGUg KF9fY29tcChfX3ZhbCwgKl9fbmV4dCkpIHsKICAgICAgICAqX19sYXN0ID0gKl9fbmV4dDsKICAg ICAgICBfX2xhc3QgPSBfX25leHQ7CiAgICAgICAgLS1fX25leHQ7CiAgICAgIH0KICAgICAgKl9f bGFzdCA9IF9fdmFsOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nl c3NJdGVyPgogICAgdm9pZAogICAgX19pbnNlcnRpb25fc29ydChfUmFuZG9tQWNjZXNzSXRlciBf X2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAgICAgIGlmIChfX2ZpcnN0 ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kgPSBf X2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAgICB0eXBlbmFt ZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9fdmFsID0g Kl9faTsKICAgICAgICBpZiAoX192YWwgPCAqX19maXJzdCkgewogICAgICAgICAgY29weV9iYWNr d2FyZChfX2ZpcnN0LCBfX2ksIF9faSArIDEpOwogICAgICAgICAgKl9fZmlyc3QgPSBfX3ZhbDsK ICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX191bmd1YXJkZWRfbGluZWFyX2luc2Vy dChfX2ksIF9fdmFsKTsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9S YW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIF9faW5zZXJ0 aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19s YXN0LAogICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkgcmV0dXJuOwoKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRl ciBfX2kgPSBfX2ZpcnN0ICsgMTsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgIHsKICAgICAg ICB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBl IF9fdmFsID0gKl9faTsKICAgICAgICBpZiAoX19jb21wKF9fdmFsLCAqX19maXJzdCkpIHsKICAg ICAgICAgIGNvcHlfYmFja3dhcmQoX19maXJzdCwgX19pLCBfX2kgKyAxKTsKICAgICAgICAgICpf X2ZpcnN0ID0gX192YWw7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIF9fdW5ndWFy ZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfX3ZhbCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5saW5lIHZvaWQK ICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3Qs IF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7 CgogICAgICBmb3IgKF9SYW5kb21BY2Nlc3NJdGVyIF9faSA9IF9fZmlyc3Q7IF9faSAhPSBfX2xh c3Q7ICsrX19pKQogICAgICAgIF9fdW5ndWFyZGVkX2xpbmVhcl9pbnNlcnQoX19pLCBfVmFsdWVU eXBlKCpfX2kpKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgX191bmd1YXJkZWRf aW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21w KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19maXJzdDsgX19pICE9IF9fbGFzdDsgKytfX2kpCiAgICAgICAgX191bmd1 YXJkZWRfbGluZWFyX2luc2VydChfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICB9 CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAg ICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgaWYgKF9fbGFzdCAtIF9fZmlyc3QgPiBf TV90aHJlc2hvbGQpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3Qg KyBfTV90aHJlc2hvbGQpOwogICAgICAgIF9fdW5ndWFyZGVkX2luc2VydGlvbl9zb3J0KF9fZmly c3QgKyBfTV90aHJlc2hvbGQsIF9fbGFzdCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAg ICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewogICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+IF9NX3RocmVzaG9sZCkg ewogICAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19maXJzdCArIF9NX3RocmVzaG9s ZCwgX19jb21wKTsKICAgICAgICBfX3VuZ3VhcmRlZF9pbnNlcnRpb25fc29ydChfX2ZpcnN0ICsg X01fdGhyZXNob2xkLCBfX2xhc3QsIF9fY29tcCk7CiAgICAgIH0KICAgICAgZWxzZQogICAgICAg IF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQoKCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9TaXplPgogICAgaW5saW5lIF9TaXplCiAgICBfX2xnKF9TaXpl IF9fbikKICAgIHsKICAgICAgX1NpemUgX19rOwogICAgICBmb3IgKF9fayA9IDA7IF9fbiAhPSAx OyBfX24gPj49IDEpICsrX19rOwogICAgICByZXR1cm4gX19rOwogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZT4KICAgIHZvaWQK ICAgIF9faW50cm9zb3J0X2xvb3AoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFj Y2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICBfU2l6ZSBfX2RlcHRoX2xpbWl0 KQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNj ZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBf X2ZpcnN0ID4gX01fdGhyZXNob2xkKSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkg ewogICAgICAgICAgcGFydGlhbF9zb3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0KTsKICAgICAg ICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgLS1fX2RlcHRoX2xpbWl0OwogICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fY3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihf X2ZpcnN0LCBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlw ZShfX21lZGlhbigqX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICooX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0g MSkpKSk7CiAgICAgICAgX19pbnRyb3NvcnRfbG9vcChfX2N1dCwgX19sYXN0LCBfX2RlcHRoX2xp bWl0KTsKICAgICAgICBfX2xhc3QgPSBfX2N1dDsKICAgICAgfQogICAgfQoKCgoKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfU2l6ZSwgdHlwZW5hbWUg X0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2ludHJvc29ydF9sb29wKF9SYW5kb21BY2Nlc3NJdGVy IF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAg X1NpemUgX19kZXB0aF9saW1pdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUg X1ZhbHVlVHlwZTsKCiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gX01fdGhyZXNob2xk KSB7CiAgICAgICAgaWYgKF9fZGVwdGhfbGltaXQgPT0gMCkgewogICAgICAgICAgcGFydGlhbF9z b3J0KF9fZmlyc3QsIF9fbGFzdCwgX19sYXN0LCBfX2NvbXApOwogICAgICAgICAgcmV0dXJuOwog ICAgICAgIH0KICAgICAgICAtLV9fZGVwdGhfbGltaXQ7CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0 ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRfcGFydGl0aW9uKF9fZmlyc3QsIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpf X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3QpLzIpLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2xhc3QgLSAxKSwgX19jb21wKSks CiAgICAgICAgICAgX19jb21wKTsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9fY3V0LCBfX2xh c3QsIF9fZGVwdGhfbGltaXQsIF9fY29tcCk7CiAgICAgICAgX19sYXN0ID0gX19jdXQ7CiAgICAg IH0KICAgIH0KIyAyMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIGlubGluZSB2 b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVy IF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKCiAgICAgCgog ICAgICBpZiAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBfX2ludHJvc29ydF9sb29wKF9f Zmlyc3QsIF9fbGFzdCwgX19sZyhfX2xhc3QgLSBfX2ZpcnN0KSAqIDIpOwogICAgICAgIF9fZmlu YWxfaW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAgICAgfQogICAgfQojIDIxOTcg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRl PHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGlubGlu ZSB2b2lkCiAgICBzb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJ dGVyIF9fbGFzdCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlw ZTsKCgogICAgIAoKICAgICAKCiAgICAgIGlmIChfX2ZpcnN0ICE9IF9fbGFzdCkgewogICAgICAg IF9faW50cm9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBfX2xnKF9fbGFzdCAtIF9fZmlyc3Qp ICogMiwgX19jb21wKTsKICAgICAgICBfX2ZpbmFsX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9f bGFzdCwgX19jb21wKTsKICAgICAgfQogICAgfQoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf UmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfUmFu ZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAgICB7CiAg ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIF9SYW5kb21B Y2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KSAvIDI7CiAg ICAgIF9faW5wbGFjZV9zdGFibGVfc29ydChfX2ZpcnN0LCBfX21pZGRsZSk7CiAgICAgIF9faW5w bGFjZV9zdGFibGVfc29ydChfX21pZGRsZSwgX19sYXN0KTsKICAgICAgX19tZXJnZV93aXRob3V0 X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X2xhc3QgLSBfX21pZGRsZSk7CiAgICB9CgoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRv bUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19pbnBsYWNlX3N0 YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9f bGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAg ICAgIGlmIChfX2xhc3QgLSBfX2ZpcnN0IDwgMTUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0 KF9fZmlyc3QsIF9fbGFzdCwgX19jb21wKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAg X1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp IC8gMjsKICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3QsIF9fbWlkZGxlLCBfX2Nv bXApOwogICAgICBfX2lucGxhY2Vfc3RhYmxlX3NvcnQoX19taWRkbGUsIF9fbGFzdCwgX19jb21w KTsKICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbWlkZGxlIC0gX19maXJzdCwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfX2xhc3QgLSBfX21pZGRsZSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9t QWNjZXNzSXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBl bmFtZSBfRGlzdGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfbG9vcChfUmFuZG9tQWNj ZXNzSXRlcjEgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fbGFzdCwKICAgICAgICAgICAg ICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyMiBfX3Jlc3VsdCwgX0Rpc3RhbmNlIF9fc3RlcF9z aXplKQogICAgewogICAgICBfRGlzdGFuY2UgX190d29fc3RlcCA9IDIgKiBfX3N0ZXBfc2l6ZTsK CiAgICAgIHdoaWxlIChfX2xhc3QgLSBfX2ZpcnN0ID49IF9fdHdvX3N0ZXApIHsKICAgICAgICBf X3Jlc3VsdCA9IG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg ICAgICAgICAgICAgICAgIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwgX19maXJzdCArIF9fdHdvX3N0 ZXAsCiAgICAgICAgICAgICAgICAgICAgICAgICBfX3Jlc3VsdCk7CiAgICAgICAgX19maXJzdCAr PSBfX3R3b19zdGVwOwogICAgICB9CgogICAgICBfX3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2Uo X19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXplKTsKICAgICAgbWVyZ2UoX19maXJzdCwgX19m aXJzdCArIF9fc3RlcF9zaXplLCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fbGFzdCwKICAgICAg ICAgICAgX19yZXN1bHQpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNz SXRlcjEsIHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBf RGlzdGFuY2UsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19tZXJnZV9zb3J0X2xv b3AoX1JhbmRvbUFjY2Vzc0l0ZXIxIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyMSBfX2xhc3Qs CiAgICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlcjIgX19yZXN1bHQsIF9EaXN0 YW5jZSBfX3N0ZXBfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgX0Rpc3RhbmNlIF9fdHdvX3N0ZXAgPSAyICogX19zdGVwX3NpemU7CgogICAg ICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX3R3b19zdGVwKSB7CiAgICAgICAgX19yZXN1 bHQgPSBtZXJnZShfX2ZpcnN0LCBfX2ZpcnN0ICsgX19zdGVwX3NpemUsCiAgICAgICAgICAgICAg ICAgICAgICAgICBfX2ZpcnN0ICsgX19zdGVwX3NpemUsIF9fZmlyc3QgKyBfX3R3b19zdGVwLAog ICAgICAgICAgICAgICAgICAgICAgICAgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAg ICBfX2NvbXApOwogICAgICAgIF9fZmlyc3QgKz0gX190d29fc3RlcDsKICAgICAgfQogICAgICBf X3N0ZXBfc2l6ZSA9IG1pbihfRGlzdGFuY2UoX19sYXN0IC0gX19maXJzdCksIF9fc3RlcF9zaXpl KTsKCiAgICAgIG1lcmdlKF9fZmlyc3QsIF9fZmlyc3QgKyBfX3N0ZXBfc2l6ZSwKICAgICAgICAg ICAgX19maXJzdCArIF9fc3RlcF9zaXplLCBfX2xhc3QsCiAgICAgICAgICAgIF9fcmVzdWx0LAog ICAgICAgICAgICBfX2NvbXApOwogICAgfQoKICBlbnVtIHsgX01fY2h1bmtfc2l6ZSA9IDcgfTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0YW5j ZT4KICAgIHZvaWQKICAgIF9fY2h1bmtfaW5zZXJ0aW9uX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIg X19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgICAgICAg ICAgICBfRGlzdGFuY2UgX19jaHVua19zaXplKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0g X19maXJzdCA+PSBfX2NodW5rX3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmly c3QsIF9fZmlyc3QgKyBfX2NodW5rX3NpemUpOwogICAgICAgIF9fZmlyc3QgKz0gX19jaHVua19z aXplOwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0KTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXIsIHR5cGVuYW1lIF9EaXN0 YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX2NodW5rX2luc2VydGlvbl9z b3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFzdCwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Rpc3RhbmNlIF9fY2h1bmtfc2l6ZSwgX0NvbXBh cmUgX19jb21wKQogICAgewogICAgICB3aGlsZSAoX19sYXN0IC0gX19maXJzdCA+PSBfX2NodW5r X3NpemUpIHsKICAgICAgICBfX2luc2VydGlvbl9zb3J0KF9fZmlyc3QsIF9fZmlyc3QgKyBfX2No dW5rX3NpemUsIF9fY29tcCk7CiAgICAgICAgX19maXJzdCArPSBfX2NodW5rX3NpemU7CiAgICAg IH0KICAgICAgX19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fY29tcCk7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRl cj4KICAgIHZvaWQKICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1ZmZlcihfUmFuZG9tQWNjZXNzSXRl ciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1BvaW50ZXIgX19idWZmZXIpCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0 YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Q b2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZlciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNl IF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsKICAgICAgX19jaHVua19pbnNlcnRpb25fc29y dChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXplKTsKCiAgICAgIHdoaWxlIChfX3N0ZXBfc2l6 ZSA8IF9fbGVuKSB7CiAgICAgICAgX19tZXJnZV9zb3J0X2xvb3AoX19maXJzdCwgX19sYXN0LCBf X2J1ZmZlciwgX19zdGVwX3NpemUpOwogICAgICAgIF9fc3RlcF9zaXplICo9IDI7CiAgICAgICAg X19tZXJnZV9zb3J0X2xvb3AoX19idWZmZXIsIF9fYnVmZmVyX2xhc3QsIF9fZmlyc3QsIF9fc3Rl cF9zaXplKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5h bWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIoX1JhbmRv bUFjY2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfQ29tcGFyZSBfX2NvbXApCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6ZGlmZmVyZW5jZV90eXBlIF9EaXN0YW5jZTsKCiAgICAgIF9EaXN0YW5jZSBfX2xlbiA9 IF9fbGFzdCAtIF9fZmlyc3Q7CiAgICAgIF9Qb2ludGVyIF9fYnVmZmVyX2xhc3QgPSBfX2J1ZmZl ciArIF9fbGVuOwoKICAgICAgX0Rpc3RhbmNlIF9fc3RlcF9zaXplID0gX01fY2h1bmtfc2l6ZTsK ICAgICAgX19jaHVua19pbnNlcnRpb25fc29ydChfX2ZpcnN0LCBfX2xhc3QsIF9fc3RlcF9zaXpl LCBfX2NvbXApOwoKICAgICAgd2hpbGUgKF9fc3RlcF9zaXplIDwgX19sZW4pIHsKICAgICAgICBf X21lcmdlX3NvcnRfbG9vcChfX2ZpcnN0LCBfX2xhc3QsIF9fYnVmZmVyLCBfX3N0ZXBfc2l6ZSwg X19jb21wKTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICAgIF9fbWVyZ2Vfc29ydF9s b29wKF9fYnVmZmVyLCBfX2J1ZmZlcl9sYXN0LCBfX2ZpcnN0LCBfX3N0ZXBfc2l6ZSwgX19jb21w KTsKICAgICAgICBfX3N0ZXBfc2l6ZSAqPSAyOwogICAgICB9CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp c3RhbmNlPgogICAgdm9pZAogICAgX19zdGFibGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNz SXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAg IHsKICAgICAgX0Rpc3RhbmNlIF9fbGVuID0gKF9fbGFzdCAtIF9fZmlyc3QgKyAxKSAvIDI7CiAg ICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbWlkZGxlID0gX19maXJzdCArIF9fbGVuOwogICAgICBp ZiAoX19sZW4gPiBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgX19zdGFibGVfc29ydF9hZGFwdGl2 ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX3NpemUpOwogICAgICAgIF9f c3RhYmxlX3NvcnRfYWRhcHRpdmUoX19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fYnVmZmVy X3NpemUpOwogICAgICB9CiAgICAgIGVsc2UgewogICAgICAgIF9fbWVyZ2Vfc29ydF93aXRoX2J1 ZmZlcihfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgIF9fbWVyZ2Vfc29ydF93 aXRoX2J1ZmZlcihfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgIH0KICAgICAgX19t ZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRk bGUgLSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0g X19taWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyLCB0eXBlbmFtZSBfUG9pbnRlciwgdHlwZW5hbWUgX0Rp c3RhbmNlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgogICAgdm9pZAogICAgX19zdGFi bGVfc29ydF9hZGFwdGl2ZShfUmFuZG9tQWNjZXNzSXRlciBfX2ZpcnN0LCBfUmFuZG9tQWNjZXNz SXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVyIF9fYnVmZmVy LCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX0Nv bXBhcmUgX19jb21wKQogICAgewogICAgICBfRGlzdGFuY2UgX19sZW4gPSAoX19sYXN0IC0gX19m aXJzdCArIDEpIC8gMjsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19taWRkbGUgPSBfX2ZpcnN0 ICsgX19sZW47CiAgICAgIGlmIChfX2xlbiA+IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICBfX3N0 YWJsZV9zb3J0X2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgICAgX19z dGFibGVfc29ydF9hZGFwdGl2ZShfX21pZGRsZSwgX19sYXN0LCBfX2J1ZmZlciwgX19idWZmZXJf c2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICAgIH0KICAg ICAgZWxzZSB7CiAgICAgICAgX19tZXJnZV9zb3J0X3dpdGhfYnVmZmVyKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2J1ZmZlciwgX19jb21wKTsKICAgICAgICBfX21lcmdlX3NvcnRfd2l0aF9idWZmZXIo X19taWRkbGUsIF9fbGFzdCwgX19idWZmZXIsIF9fY29tcCk7CiAgICAgIH0KICAgICAgX19tZXJn ZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfRGlzdGFuY2UoX19taWRkbGUg LSBfX2ZpcnN0KSwKICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFuY2UoX19sYXN0IC0gX19t aWRkbGUpLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAgICAgICAgICBf X2NvbXApOwogICAgfQojIDI0MzAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9SYW5kb21BY2Nlc3NJdGVyPgogICAgaW5s aW5lIHZvaWQKICAgIHN0YWJsZV9zb3J0KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsIF9SYW5k b21BY2Nlc3NJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRv cl90cmFpdHM8X1JhbmRvbUFjY2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAg IHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6ZGlm ZmVyZW5jZV90eXBlIF9EaXN0YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgogICAgICBfVGVtcG9y YXJ5X2J1ZmZlcjxfUmFuZG9tQWNjZXNzSXRlciwgX1ZhbHVlVHlwZT4gYnVmKF9fZmlyc3QsIF9f bGFzdCk7CiAgICAgIGlmIChidWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9faW5wbGFjZV9zdGFi bGVfc29ydChfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBlbHNlCiAgICAgICAgX19zdGFibGVfc29y dF9hZGFwdGl2ZShfX2ZpcnN0LCBfX2xhc3QsIGJ1Zi5iZWdpbigpLCBfRGlzdGFuY2VUeXBlKGJ1 Zi5zaXplKCkpKTsKICAgIH0KIyAyNDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBpbmxpbmUgdm9pZAogICAgc3RhYmxlX3NvcnQoX1JhbmRvbUFj Y2Vzc0l0ZXIgX19maXJzdCwgX1JhbmRvbUFjY2Vzc0l0ZXIgX19sYXN0LCBfQ29tcGFyZSBfX2Nv bXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21B Y2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlz dGFuY2VUeXBlOwoKCiAgICAgCgogICAgIAoKCiAgICAgIF9UZW1wb3JhcnlfYnVmZmVyPF9SYW5k b21BY2Nlc3NJdGVyLCBfVmFsdWVUeXBlPiBidWYoX19maXJzdCwgX19sYXN0KTsKICAgICAgaWYg KGJ1Zi5iZWdpbigpID09IDApCiAgICAgICAgX19pbnBsYWNlX3N0YWJsZV9zb3J0KF9fZmlyc3Qs IF9fbGFzdCwgX19jb21wKTsKICAgICAgZWxzZQogICAgICAgIF9fc3RhYmxlX3NvcnRfYWRhcHRp dmUoX19maXJzdCwgX19sYXN0LCBidWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShidWYuc2l6ZSgp KSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29tcCk7CiAgICB9CiMgMjUwMiAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX1JhbmRvbUFjY2Vzc0l0ZXI+CiAgICB2b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1Jh bmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRl ciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QpCiAg ICB7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJ dGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwoKCiAgICAgCgogICAgIAoKICAgICAgbWFrZV9o ZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgICAgZm9yIChfUmFuZG9tQWNjZXNzSXRlciBfX2kg PSBfX21pZGRsZTsgX19pIDwgX19sYXN0OyArK19faSkKICAgICAgICBpZiAoKl9faSA8ICpfX2Zp cnN0KQogICAgICAgICAgX19wb3BfaGVhcChfX2ZpcnN0LCBfX21pZGRsZSwgX19pLCBfVmFsdWVU eXBlKCpfX2kpKTsKICAgICAgc29ydF9oZWFwKF9fZmlyc3QsIF9fbWlkZGxlKTsKICAgIH0KIyAy NTQwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBwYXJ0aWFsX3NvcnQoX1JhbmRvbUFjY2Vzc0l0ZXIgX19maXJzdCwKICAgICAgICAg ICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICBfUmFu ZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNz SXRlcj46OnZhbHVlX3R5cGUgX1ZhbHVlVHlwZTsKCgogICAgIAoKICAgICAKCgogICAgICBtYWtl X2hlYXAoX19maXJzdCwgX19taWRkbGUsIF9fY29tcCk7CiAgICAgIGZvciAoX1JhbmRvbUFjY2Vz c0l0ZXIgX19pID0gX19taWRkbGU7IF9faSA8IF9fbGFzdDsgKytfX2kpCiAgICAgICAgaWYgKF9f Y29tcCgqX19pLCAqX19maXJzdCkpCiAgICAgICAgICBfX3BvcF9oZWFwKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2ksIF9WYWx1ZVR5cGUoKl9faSksIF9fY29tcCk7CiAgICAgIHNvcnRfaGVhcChfX2Zp cnN0LCBfX21pZGRsZSwgX19jb21wKTsKICAgIH0KIyAyNTc5ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVy LCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIF9SYW5kb21BY2Nlc3NJdGVyCiAgICBw YXJ0aWFsX3NvcnRfY29weShfSW5wdXRJdGVyIF9fZmlyc3QsIF9JbnB1dEl0ZXIgX19sYXN0LAog ICAgICAgICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfZmlyc3QsCiAg ICAgICAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX3Jlc3VsdF9sYXN0KQogICAg ewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfSW5wdXRJdGVyPjo6dmFs dWVfdHlwZSBfSW5wdXRWYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3Jf dHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfT3V0cHV0VmFsdWVUeXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46 OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCiAgICAgCiAgICAg CgogICAgICBpZiAoX19yZXN1bHRfZmlyc3QgPT0gX19yZXN1bHRfbGFzdCkgcmV0dXJuIF9fcmVz dWx0X2xhc3Q7CiAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X3JlYWxfbGFzdCA9IF9f cmVzdWx0X2ZpcnN0OwogICAgICB3aGlsZShfX2ZpcnN0ICE9IF9fbGFzdCAmJiBfX3Jlc3VsdF9y ZWFsX2xhc3QgIT0gX19yZXN1bHRfbGFzdCkgewogICAgICAgICpfX3Jlc3VsdF9yZWFsX2xhc3Qg PSAqX19maXJzdDsKICAgICAgICArK19fcmVzdWx0X3JlYWxfbGFzdDsKICAgICAgICArK19fZmly c3Q7CiAgICAgIH0KICAgICAgbWFrZV9oZWFwKF9fcmVzdWx0X2ZpcnN0LCBfX3Jlc3VsdF9yZWFs X2xhc3QpOwogICAgICB3aGlsZSAoX19maXJzdCAhPSBfX2xhc3QpIHsKICAgICAgICBpZiAoKl9f Zmlyc3QgPCAqX19yZXN1bHRfZmlyc3QpCiAgICAgICAgICBfX2FkanVzdF9oZWFwKF9fcmVzdWx0 X2ZpcnN0LCBfRGlzdGFuY2VUeXBlKDApLAogICAgICAgICAgICAgICAgICAgICAgICBfRGlzdGFu Y2VUeXBlKF9fcmVzdWx0X3JlYWxfbGFzdCAtIF9fcmVzdWx0X2ZpcnN0KSwKICAgICAgICAgICAg ICAgICAgICAgICAgX0lucHV0VmFsdWVUeXBlKCpfX2ZpcnN0KSk7CiAgICAgICAgKytfX2ZpcnN0 OwogICAgICB9CiAgICAgIHNvcnRfaGVhcChfX3Jlc3VsdF9maXJzdCwgX19yZXN1bHRfcmVhbF9s YXN0KTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAgIH0KIyAyNjMzICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfSW5wdXRJdGVyLCB0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlciwgdHlwZW5hbWUgX0Nv bXBhcmU+CiAgICBfUmFuZG9tQWNjZXNzSXRlcgogICAgcGFydGlhbF9zb3J0X2NvcHkoX0lucHV0 SXRlciBfX2ZpcnN0LCBfSW5wdXRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9S YW5kb21BY2Nlc3NJdGVyIF9fcmVzdWx0X2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgX1Jh bmRvbUFjY2Vzc0l0ZXIgX19yZXN1bHRfbGFzdCwKICAgICAgICAgICAgICAgICAgICAgIF9Db21w YXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8 X0lucHV0SXRlcj46OnZhbHVlX3R5cGUgX0lucHV0VmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfUmFuZG9tQWNjZXNzSXRlcj46OnZhbHVlX3R5cGUgX091 dHB1dFZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1Jh bmRvbUFjY2Vzc0l0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAog ICAgIAogICAgIAogICAgIAoKCiAgICAgIGlmIChfX3Jlc3VsdF9maXJzdCA9PSBfX3Jlc3VsdF9s YXN0KSByZXR1cm4gX19yZXN1bHRfbGFzdDsKICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19yZXN1 bHRfcmVhbF9sYXN0ID0gX19yZXN1bHRfZmlyc3Q7CiAgICAgIHdoaWxlKF9fZmlyc3QgIT0gX19s YXN0ICYmIF9fcmVzdWx0X3JlYWxfbGFzdCAhPSBfX3Jlc3VsdF9sYXN0KSB7CiAgICAgICAgKl9f cmVzdWx0X3JlYWxfbGFzdCA9ICpfX2ZpcnN0OwogICAgICAgICsrX19yZXN1bHRfcmVhbF9sYXN0 OwogICAgICAgICsrX19maXJzdDsKICAgICAgfQogICAgICBtYWtlX2hlYXAoX19yZXN1bHRfZmly c3QsIF9fcmVzdWx0X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0g X19sYXN0KSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdCwgKl9fcmVzdWx0X2ZpcnN0KSkK ICAgICAgICAgIF9fYWRqdXN0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9EaXN0YW5jZVR5cGUoMCks CiAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZVR5cGUoX19yZXN1bHRfcmVhbF9sYXN0 IC0gX19yZXN1bHRfZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfSW5wdXRWYWx1ZVR5 cGUoKl9fZmlyc3QpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwogICAgICAgICsr X19maXJzdDsKICAgICAgfQogICAgICBzb3J0X2hlYXAoX19yZXN1bHRfZmlyc3QsIF9fcmVzdWx0 X3JlYWxfbGFzdCwgX19jb21wKTsKICAgICAgcmV0dXJuIF9fcmVzdWx0X3JlYWxfbGFzdDsKICAg IH0KIyAyNjg2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRlcj4KICAgIHZvaWQKICAgIG50aF9l bGVtZW50KF9SYW5kb21BY2Nlc3NJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICBfUmFuZG9t QWNjZXNzSXRlciBfX250aCwKICAgICAgICAgICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9fbGFz dCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X1JhbmRvbUFj Y2Vzc0l0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CgoKICAgICAKICAgICAKCiAgICAgIHdo aWxlIChfX2xhc3QgLSBfX2ZpcnN0ID4gMykgewogICAgICAgIF9SYW5kb21BY2Nlc3NJdGVyIF9f Y3V0ID0KICAgICAgICAgIF9fdW5ndWFyZGVkX3BhcnRpdGlvbihfX2ZpcnN0LCBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1ZhbHVlVHlwZShfX21lZGlhbigqX19maXJz dCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICoo X19maXJzdCArIChfX2xhc3QgLSBfX2ZpcnN0KS8yKSwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICooX19sYXN0IC0gMSkpKSk7CiAgICAgICAgaWYg KF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0OwogICAgICAgIGVsc2UK ICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9faW5zZXJ0aW9uX3NvcnQo X19maXJzdCwgX19sYXN0KTsKICAgIH0KIyAyNzI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfUmFuZG9tQWNjZXNzSXRl ciwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lkCiAgICBudGhfZWxlbWVudChfUmFuZG9tQWNj ZXNzSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19udGgs CiAgICAgICAgICAgICAgICBfUmFuZG9tQWNjZXNzSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXApCiAgICB7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgaXRlcmF0b3JfdHJhaXRzPF9SYW5kb21BY2Nlc3NJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVU eXBlOwoKCiAgICAgCiAgICAgCgoKICAgICAgd2hpbGUgKF9fbGFzdCAtIF9fZmlyc3QgPiAzKSB7 CiAgICAgICAgX1JhbmRvbUFjY2Vzc0l0ZXIgX19jdXQgPQogICAgICAgICAgX191bmd1YXJkZWRf cGFydGl0aW9uKF9fZmlyc3QsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBfVmFsdWVUeXBlKF9fbWVkaWFuKCpfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKihfX2ZpcnN0ICsgKF9fbGFzdCAtIF9fZmlyc3Qp LzIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KihfX2xhc3QgLSAxKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fY29tcCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY29t cCk7CiAgICAgICAgaWYgKF9fY3V0IDw9IF9fbnRoKQogICAgICAgICAgX19maXJzdCA9IF9fY3V0 OwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGFzdCA9IF9fY3V0OwogICAgICB9CiAgICAgIF9f aW5zZXJ0aW9uX3NvcnQoX19maXJzdCwgX19sYXN0LCBfX2NvbXApOwogICAgfQojIDI3NjggIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5 cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAgX0ZvcndhcmRJdGVyCiAgICBs b3dlcl9ib3VuZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwgY29u c3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5 cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rp c3RhbmNlVHlwZTsKCgoKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlOwoKICAgICAgd2hpbGUgKF9fbGVuID4g MCkgewogICAgICAgIF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2Zp cnN0OwogICAgICAgIGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKCpfX21p ZGRsZSA8IF9fdmFsKSB7CiAgICAgICAgICBfX2ZpcnN0ID0gX19taWRkbGU7CiAgICAgICAgICAr K19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0gX19oYWxmIC0gMTsKICAgICAgICB9 CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hhbGY7CiAgICAgIH0KICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjgxNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBsb3dlcl9ib3Vu ZChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAg ICAgIGNvbnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFs dWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0 ZXI+OjpkaWZmZXJlbmNlX3R5cGUgX0Rpc3RhbmNlVHlwZTsKCgogICAgIAogICAgIAoKICAgICAg X0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9E aXN0YW5jZVR5cGUgX19oYWxmOwogICAgICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3 aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBf X21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAg ICAgICBpZiAoX19jb21wKCpfX21pZGRsZSwgX192YWwpKSB7CiAgICAgICAgICBfX2ZpcnN0ID0g X19taWRkbGU7CiAgICAgICAgICArK19fZmlyc3Q7CiAgICAgICAgICBfX2xlbiA9IF9fbGVuIC0g X19oYWxmIC0gMTsKICAgICAgICB9CiAgICAgICAgZWxzZQogICAgICAgICAgX19sZW4gPSBfX2hh bGY7CiAgICAgIH0KICAgICAgcmV0dXJuIF9fZmlyc3Q7CiAgICB9CiMgMjg1NiAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHA+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2Jv dW5kKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25zdCBfVHAm IF9fdmFsKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9y d2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg aXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VU eXBlOwoKCgogICAgIAogICAgIAogICAgIAoKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2xlbiA9IGRp c3RhbmNlKF9fZmlyc3QsIF9fbGFzdCk7CiAgICAgIF9EaXN0YW5jZVR5cGUgX19oYWxmOwogICAg ICBfRm9yd2FyZEl0ZXIgX19taWRkbGU7CgogICAgICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAg ICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAgICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAg ICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsKICAgICAgICBpZiAoX192YWwgPCAqX19taWRk bGUpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAgICBlbHNlIHsKICAgICAgICAgIF9f Zmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0g X19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gX19maXJz dDsKICAgIH0KIyAyOTAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1lIF9UcCwgdHlw ZW5hbWUgX0NvbXBhcmU+CiAgICBfRm9yd2FyZEl0ZXIKICAgIHVwcGVyX2JvdW5kKF9Gb3J3YXJk SXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LAogICAgICAgICAgICAgICAgY29uc3Qg X1RwJiBfX3ZhbCwgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90eXBlIF9WYWx1ZVR5cGU7CiAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9Gb3J3YXJkSXRlcj46OmRpZmZl cmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAgCgogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgX0Rpc3RhbmNlVHlw ZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21pZGRsZTsKCiAgICAgIHdoaWxlIChfX2xl biA+IDApIHsKICAgICAgICBfX2hhbGYgPSBfX2xlbiA+PiAxOwogICAgICAgIF9fbWlkZGxlID0g X19maXJzdDsKICAgICAgICBhZHZhbmNlKF9fbWlkZGxlLCBfX2hhbGYpOwogICAgICAgIGlmIChf X2NvbXAoX192YWwsICpfX21pZGRsZSkpCiAgICAgICAgICBfX2xlbiA9IF9faGFsZjsKICAgICAg ICBlbHNlIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21pZGRsZTsKICAgICAgICAgICsrX19maXJz dDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hhbGYgLSAxOwogICAgICAgIH0KICAgICAg fQogICAgICByZXR1cm4gX19maXJzdDsKICAgIH0KIyAyOTQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9iaXRzL3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIsIHR5cGVuYW1lIF9UcD4KICAgIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+CiAg ICBlcXVhbF9yYW5nZShfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwg Y29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90 cmFpdHM8X0ZvcndhcmRJdGVyPjo6dmFsdWVfdHlwZSBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUg X0Rpc3RhbmNlVHlwZTsKCgoKICAgICAKICAgICAKICAgICAKCiAgICAgIF9EaXN0YW5jZVR5cGUg X19sZW4gPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICBfRGlzdGFuY2VUeXBlIF9f aGFsZjsKICAgICAgX0ZvcndhcmRJdGVyIF9fbWlkZGxlLCBfX2xlZnQsIF9fcmlnaHQ7CgogICAg ICB3aGlsZSAoX19sZW4gPiAwKSB7CiAgICAgICAgX19oYWxmID0gX19sZW4gPj4gMTsKICAgICAg ICBfX21pZGRsZSA9IF9fZmlyc3Q7CiAgICAgICAgYWR2YW5jZShfX21pZGRsZSwgX19oYWxmKTsK ICAgICAgICBpZiAoKl9fbWlkZGxlIDwgX192YWwpIHsKICAgICAgICAgIF9fZmlyc3QgPSBfX21p ZGRsZTsKICAgICAgICAgICsrX19maXJzdDsKICAgICAgICAgIF9fbGVuID0gX19sZW4gLSBfX2hh bGYgLSAxOwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX3ZhbCA8ICpfX21pZGRsZSkKICAg ICAgICAgIF9fbGVuID0gX19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0g bG93ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsIF9fdmFsKTsKICAgICAgICAgIGFkdmFuY2Uo X19maXJzdCwgX19sZW4pOwogICAgICAgICAgX19yaWdodCA9IHVwcGVyX2JvdW5kKCsrX19taWRk bGUsIF9fZmlyc3QsIF9fdmFsKTsKICAgICAgICAgIHJldHVybiBwYWlyPF9Gb3J3YXJkSXRlciwg X0ZvcndhcmRJdGVyPihfX2xlZnQsIF9fcmlnaHQpOwogICAgICAgIH0KICAgICAgfQogICAgICBy ZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4oX19maXJzdCwgX19maXJzdCk7 CiAgICB9CiMgMzAwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5o IiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfVHAsIHR5cGVu YW1lIF9Db21wYXJlPgogICAgcGFpcjxfRm9yd2FyZEl0ZXIsIF9Gb3J3YXJkSXRlcj4KICAgIGVx dWFsX3JhbmdlKF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19sYXN0LCBjb25z dCBfVHAmIF9fdmFsLAogICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAg ICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfRm9yd2FyZEl0ZXI+Ojp2YWx1ZV90 eXBlIF9WYWx1ZVR5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRlcmF0b3JfdHJhaXRzPF9G b3J3YXJkSXRlcj46OmRpZmZlcmVuY2VfdHlwZSBfRGlzdGFuY2VUeXBlOwoKCiAgICAgCiAgICAg CiAgICAgCgogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuID0gZGlzdGFuY2UoX19maXJzdCwgX19s YXN0KTsKICAgICAgX0Rpc3RhbmNlVHlwZSBfX2hhbGY7CiAgICAgIF9Gb3J3YXJkSXRlciBfX21p ZGRsZSwgX19sZWZ0LCBfX3JpZ2h0OwoKICAgICAgd2hpbGUgKF9fbGVuID4gMCkgewogICAgICAg IF9faGFsZiA9IF9fbGVuID4+IDE7CiAgICAgICAgX19taWRkbGUgPSBfX2ZpcnN0OwogICAgICAg IGFkdmFuY2UoX19taWRkbGUsIF9faGFsZik7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs IF9fdmFsKSkgewogICAgICAgICAgX19maXJzdCA9IF9fbWlkZGxlOwogICAgICAgICAgKytfX2Zp cnN0OwogICAgICAgICAgX19sZW4gPSBfX2xlbiAtIF9faGFsZiAtIDE7CiAgICAgICAgfQogICAg ICAgIGVsc2UgaWYgKF9fY29tcChfX3ZhbCwgKl9fbWlkZGxlKSkKICAgICAgICAgIF9fbGVuID0g X19oYWxmOwogICAgICAgIGVsc2UgewogICAgICAgICAgX19sZWZ0ID0gbG93ZXJfYm91bmQoX19m aXJzdCwgX19taWRkbGUsIF9fdmFsLCBfX2NvbXApOwogICAgICAgICAgYWR2YW5jZShfX2ZpcnN0 LCBfX2xlbik7CiAgICAgICAgICBfX3JpZ2h0ID0gdXBwZXJfYm91bmQoKytfX21pZGRsZSwgX19m aXJzdCwgX192YWwsIF9fY29tcCk7CiAgICAgICAgICByZXR1cm4gcGFpcjxfRm9yd2FyZEl0ZXIs IF9Gb3J3YXJkSXRlcj4oX19sZWZ0LCBfX3JpZ2h0KTsKICAgICAgICB9CiAgICAgIH0KICAgICAg cmV0dXJuIHBhaXI8X0ZvcndhcmRJdGVyLCBfRm9yd2FyZEl0ZXI+KF9fZmlyc3QsIF9fZmlyc3Qp OwogICAgfQojIDMwNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsZ28u aCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUgX1RwPgogICAg Ym9vbAogICAgYmluYXJ5X3NlYXJjaChfRm9yd2FyZEl0ZXIgX19maXJzdCwgX0ZvcndhcmRJdGVy IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgY29uc3QgX1RwJiBfX3ZhbCkKICAgIHsKCgogICAg IAogICAgIAoKICAgICAKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2Zp cnN0LCBfX2xhc3QsIF9fdmFsKTsKICAgICAgcmV0dXJuIF9faSAhPSBfX2xhc3QgJiYgIShfX3Zh bCA8ICpfX2kpOwogICAgfQojIDMwODMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv c3RsX2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5hbWUg X1RwLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIGJpbmFyeV9zZWFyY2goX0Zvcndh cmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgIGNv bnN0IF9UcCYgX192YWwsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgogICAg IAoKCiAgICAgIF9Gb3J3YXJkSXRlciBfX2kgPSBsb3dlcl9ib3VuZChfX2ZpcnN0LCBfX2xhc3Qs IF9fdmFsLCBfX2NvbXApOwogICAgICByZXR1cm4gX19pICE9IF9fbGFzdCAmJiAhX19jb21wKF9f dmFsLCAqX19pKTsKICAgIH0KIyAzMTE1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9hbGdvLmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUg X0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIG1l cmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAg X0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICBfT3V0 cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAg CgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0 MikgewogICAgICAgIGlmICgqX19maXJzdDIgPCAqX19maXJzdDEpIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7CiAgICAgICAgfQogICAgICAg IGVsc2UgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2Zp cnN0MTsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4g Y29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQp KTsKICAgIH0KIyAzMTY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGdv LmgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRl cjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlPgog ICAgX091dHB1dEl0ZXIKICAgIG1lcmdlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVy MSBfX2xhc3QxLAogICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9f bGFzdDIsCiAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCwgX0NvbXBhcmUgX19jb21wKQog ICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAgd2hpbGUgKF9f Zmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikgewogICAgICAgIGlmIChf X2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19m aXJzdDI7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAg ICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAg ICAgfQogICAgICAgICsrX19yZXN1bHQ7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJz dDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KSk7CiAgICB9CgoK CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFtZSBfRGlz dGFuY2U+CiAgICB2b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFs SXRlciBfX2ZpcnN0LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0 ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRl ciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9E aXN0YW5jZSBfX2xlbjIpCiAgICB7CiAgICAgIGlmIChfX2xlbjEgPT0gMCB8fCBfX2xlbjIgPT0g MCkKICAgICAgICByZXR1cm47CiAgICAgIGlmIChfX2xlbjEgKyBfX2xlbjIgPT0gMikgewogICAg ICAgIGlmICgqX19taWRkbGUgPCAqX19maXJzdCkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19m aXJzdCwgX19taWRkbGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rp b25hbEl0ZXIgX19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19zZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAg ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAg ICAgICAgX19sZW4xMSA9IF9fbGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwg X19sZW4xMSk7CiAgICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9f bGFzdCwgKl9fZmlyc3RfY3V0KTsKICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUs IF9fc2Vjb25kX2N1dCk7CiAgICAgIH0KICAgICAgZWxzZSB7CiAgICAgICAgX19sZW4yMiA9IF9f bGVuMiAvIDI7CiAgICAgICAgYWR2YW5jZShfX3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAg IF9fZmlyc3RfY3V0ID0gdXBwZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9j dXQpOwogICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAg ICAgIH0KICAgICAgcm90YXRlKF9fZmlyc3RfY3V0LCBfX21pZGRsZSwgX19zZWNvbmRfY3V0KTsK ICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9IF9fZmlyc3RfY3V0OwogICAg ICBhZHZhbmNlKF9fbmV3X21pZGRsZSwgZGlzdGFuY2UoX19taWRkbGUsIF9fc2Vjb25kX2N1dCkp OwogICAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9fZmlyc3QsIF9fZmlyc3RfY3V0LCBfX25l d19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19sZW4xMSwgX19sZW4yMik7 CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29uZF9jdXQs IF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xlbjExLCBf X2xlbjIgLSBfX2xlbjIyKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJl Y3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2 b2lkCiAgICBfX21lcmdlX3dpdGhvdXRfYnVmZmVyKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0 LAogICAgICAgICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUs CiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xl bjIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKICAg ICAgaWYgKF9fbGVuMSA9PSAwIHx8IF9fbGVuMiA9PSAwKQogICAgICAgIHJldHVybjsKICAgICAg aWYgKF9fbGVuMSArIF9fbGVuMiA9PSAyKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19taWRkbGUs ICpfX2ZpcnN0KSkKICAgICAgICAgICAgICBpdGVyX3N3YXAoX19maXJzdCwgX19taWRkbGUpOwog ICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j dXQgPSBfX2ZpcnN0OwogICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0ID0gX19t aWRkbGU7CiAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgX0Rpc3RhbmNlIF9fbGVu MjIgPSAwOwogICAgICBpZiAoX19sZW4xID4gX19sZW4yKSB7CiAgICAgICAgX19sZW4xMSA9IF9f bGVuMSAvIDI7CiAgICAgICAgYWR2YW5jZShfX2ZpcnN0X2N1dCwgX19sZW4xMSk7CiAgICAgICAg X19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0 LCBfX2NvbXApOwogICAgICAgIF9fbGVuMjIgPSBkaXN0YW5jZShfX21pZGRsZSwgX19zZWNvbmRf Y3V0KTsKICAgICAgfQogICAgICBlbHNlIHsKICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsK ICAgICAgICBhZHZhbmNlKF9fc2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgX19maXJzdF9j dXQgPSB1cHBlcl9ib3VuZChfX2ZpcnN0LCBfX21pZGRsZSwgKl9fc2Vjb25kX2N1dCwgX19jb21w KTsKICAgICAgICBfX2xlbjExID0gZGlzdGFuY2UoX19maXJzdCwgX19maXJzdF9jdXQpOwogICAg ICB9CiAgICAgIHJvdGF0ZShfX2ZpcnN0X2N1dCwgX19taWRkbGUsIF9fc2Vjb25kX2N1dCk7CiAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX25ld19taWRkbGUgPSBfX2ZpcnN0X2N1dDsKICAgICAg YWR2YW5jZShfX25ld19taWRkbGUsIGRpc3RhbmNlKF9fbWlkZGxlLCBfX3NlY29uZF9jdXQpKTsK ICAgICAgX19tZXJnZV93aXRob3V0X2J1ZmZlcihfX2ZpcnN0LCBfX2ZpcnN0X2N1dCwgX19uZXdf bWlkZGxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMTEsIF9fbGVuMjIsIF9f Y29tcCk7CiAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIoX19uZXdfbWlkZGxlLCBfX3NlY29u ZF9jdXQsIF9fbGFzdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xlbjEgLSBfX2xl bjExLCBfX2xlbjIgLSBfX2xlbjIyLCBfX2NvbXApOwogICAgfQoKCgoKCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjIs CiAgICAgICAgICAgdHlwZW5hbWUgX0Rpc3RhbmNlPgogICAgX0JpZGlyZWN0aW9uYWxJdGVyMQog ICAgX19yb3RhdGVfYWRhcHRpdmUoX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX21pZGRsZSwKICAgICAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0LAogICAgICAgICAgICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuMSwgX0Rpc3RhbmNlIF9fbGVuMiwKICAgICAgICAgICAgICAgICAg ICAgIF9CaWRpcmVjdGlvbmFsSXRlcjIgX19idWZmZXIsCiAgICAgICAgICAgICAgICAgICAgICBf RGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMiBf X2J1ZmZlcl9lbmQ7CiAgICAgIGlmIChfX2xlbjEgPiBfX2xlbjIgJiYgX19sZW4yIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICBfX2J1ZmZlcl9lbmQgPSBjb3B5KF9fbWlkZGxlLCBfX2xhc3Qs IF9fYnVmZmVyKTsKICAgICAgICBjb3B5X2JhY2t3YXJkKF9fZmlyc3QsIF9fbWlkZGxlLCBfX2xh c3QpOwogICAgICAgIHJldHVybiBjb3B5KF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fZmlyc3Qp OwogICAgICB9CiAgICAgIGVsc2UgaWYgKF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAg ICAgX19idWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAg ICAgIGNvcHkoX19taWRkbGUsIF9fbGFzdCwgX19maXJzdCk7CiAgICAgICAgcmV0dXJuIGNvcHlf YmFja3dhcmQoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAgICAgfQogICAgICBl bHNlIHsKICAgICAgICByb3RhdGUoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCk7CiAgICAgICAg YWR2YW5jZShfX2ZpcnN0LCBkaXN0YW5jZShfX21pZGRsZSwgX19sYXN0KSk7CiAgICAgICAgcmV0 dXJuIF9fZmlyc3Q7CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlk aXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAg IHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjM+CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzCiAg ICBfX21lcmdlX2JhY2t3YXJkKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9CaWRpcmVj dGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIzIF9fcmVzdWx0KQogICAgewogICAgICBpZiAoX19m aXJzdDEgPT0gX19sYXN0MSkKICAgICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0Miwg X19sYXN0MiwgX19yZXN1bHQpOwogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0MikKICAgICAg ICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpOwogICAg ICAtLV9fbGFzdDE7CiAgICAgIC0tX19sYXN0MjsKICAgICAgd2hpbGUgKHRydWUpIHsKICAgICAg ICBpZiAoKl9fbGFzdDIgPCAqX19sYXN0MSkgewogICAgICAgICAgKi0tX19yZXN1bHQgPSAqX19s YXN0MTsKICAgICAgICAgIGlmIChfX2ZpcnN0MSA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1 cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MiwgKytfX2xhc3QyLCBfX3Jlc3VsdCk7CiAgICAgICAg ICAtLV9fbGFzdDE7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKi0tX19yZXN1 bHQgPSAqX19sYXN0MjsKICAgICAgICAgIGlmIChfX2ZpcnN0MiA9PSBfX2xhc3QyKQogICAgICAg ICAgICByZXR1cm4gY29weV9iYWNrd2FyZChfX2ZpcnN0MSwgKytfX2xhc3QxLCBfX3Jlc3VsdCk7 CiAgICAgICAgICAtLV9fbGFzdDI7CiAgICAgICAgfQogICAgICB9CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyMSwgdHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyMiwKICAgICAgICAgICB0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIzLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIF9CaWRpcmVjdGlvbmFsSXRlcjMKICAgIF9fbWVyZ2VfYmFja3dhcmQo X0JpZGlyZWN0aW9uYWxJdGVyMSBfX2ZpcnN0MSwgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX2xhc3Qx LAogICAgICAgICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIyIF9fZmlyc3QyLCBfQmlk aXJlY3Rpb25hbEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlv bmFsSXRlcjMgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgIF9Db21wYXJlIF9fY29tcCkK ICAgIHsKICAgICAgaWYgKF9fZmlyc3QxID09IF9fbGFzdDEpCiAgICAgICAgcmV0dXJuIGNvcHlf YmFja3dhcmQoX19maXJzdDIsIF9fbGFzdDIsIF9fcmVzdWx0KTsKICAgICAgaWYgKF9fZmlyc3Qy ID09IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIGNvcHlfYmFja3dhcmQoX19maXJzdDEsIF9fbGFz dDEsIF9fcmVzdWx0KTsKICAgICAgLS1fX2xhc3QxOwogICAgICAtLV9fbGFzdDI7CiAgICAgIHdo aWxlICh0cnVlKSB7CiAgICAgICAgaWYgKF9fY29tcCgqX19sYXN0MiwgKl9fbGFzdDEpKSB7CiAg ICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QxOwogICAgICAgICAgaWYgKF9fZmlyc3QxID09 IF9fbGFzdDEpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmlyc3QyLCArK19f bGFzdDIsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MTsKICAgICAgICB9CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICAqLS1fX3Jlc3VsdCA9ICpfX2xhc3QyOwogICAgICAgICAgaWYgKF9f Zmlyc3QyID09IF9fbGFzdDIpCiAgICAgICAgICAgIHJldHVybiBjb3B5X2JhY2t3YXJkKF9fZmly c3QxLCArK19fbGFzdDEsIF9fcmVzdWx0KTsKICAgICAgICAgIC0tX19sYXN0MjsKICAgICAgICB9 CiAgICAgIH0KICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0 ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwgdHlwZW5hbWUgX1BvaW50ZXI+CiAgICB2b2lkCiAgICBf X21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAgICAgICAg ICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9EaXN0YW5j ZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Qb2ludGVy IF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSkKICAgIHsKICAgICAgICAgIGlmIChf X2xlbjEgPD0gX19sZW4yICYmIF9fbGVuMSA8PSBfX2J1ZmZlcl9zaXplKSB7CiAgICAgICAgICAg IF9Qb2ludGVyIF9fYnVmZmVyX2VuZCA9IGNvcHkoX19maXJzdCwgX19taWRkbGUsIF9fYnVmZmVy KTsKICAgICAgICAgICAgbWVyZ2UoX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19taWRkbGUsIF9f bGFzdCwgX19maXJzdCk7CiAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX2xlbjIgPD0g X19idWZmZXJfc2l6ZSkgewogICAgICAgICAgICBfUG9pbnRlciBfX2J1ZmZlcl9lbmQgPSBjb3B5 KF9fbWlkZGxlLCBfX2xhc3QsIF9fYnVmZmVyKTsKICAgICAgICAgICAgX19tZXJnZV9iYWNrd2Fy ZChfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIsIF9fYnVmZmVyX2VuZCwgX19sYXN0KTsKICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIg X19maXJzdF9jdXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19z ZWNvbmRfY3V0ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsK ICAgICAgICAgICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4x ID4gX19sZW4yKSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAg ICAgICAgICAgICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAg ICAgICAgX19zZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmly c3RfY3V0KTsKICAgICAgICAgICAgICAgICAgX19sZW4yMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBf X3NlY29uZF9jdXQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAg ICAgICAgICBfX2xlbjIyID0gX19sZW4yIC8gMjsKICAgICAgICAgICAgICAgICAgYWR2YW5jZShf X3NlY29uZF9jdXQsIF9fbGVuMjIpOwogICAgICAgICAgICAgICAgICBfX2ZpcnN0X2N1dCA9IHVw cGVyX2JvdW5kKF9fZmlyc3QsIF9fbWlkZGxlLCAqX19zZWNvbmRfY3V0KTsKICAgICAgICAgICAg ICAgICAgX19sZW4xMSA9IGRpc3RhbmNlKF9fZmlyc3QsIF9fZmlyc3RfY3V0KTsKICAgICAgICAg ICAgfQogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19uZXdfbWlkZGxlID0KICAgICAg ICAgICAgICAgICAgX19yb3RhdGVfYWRhcHRpdmUoX19maXJzdF9jdXQsIF9fbWlkZGxlLCBfX3Nl Y29uZF9jdXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMSAtIF9f bGVuMTEsIF9fbGVuMjIsIF9fYnVmZmVyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0 LCBfX2ZpcnN0X2N1dCwgX19uZXdfbWlkZGxlLCBfX2xlbjExLAogICAgICAgICAgICAgICAgICAg ICAgICAgICAgIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgICAg X19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1dCwgX19sYXN0LCBfX2xl bjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbGVuMiAtIF9fbGVu MjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplKTsKICAgICAgICAgIH0KICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1lIF9EaXN0YW5jZSwg dHlwZW5hbWUgX1BvaW50ZXIsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmU+CiAgICB2b2lk CiAgICBfX21lcmdlX2FkYXB0aXZlKF9CaWRpcmVjdGlvbmFsSXRlciBfX2ZpcnN0LAogICAgICAg ICAgICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19taWRkbGUsCiAgICAgICAgICAgICAg ICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAgICAgIF9E aXN0YW5jZSBfX2xlbjEsIF9EaXN0YW5jZSBfX2xlbjIsCiAgICAgICAgICAgICAgICAgICAgIF9Q b2ludGVyIF9fYnVmZmVyLCBfRGlzdGFuY2UgX19idWZmZXJfc2l6ZSwKICAgICAgICAgICAgICAg ICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICAgICAgaWYgKF9fbGVuMSA8PSBfX2xl bjIgJiYgX19sZW4xIDw9IF9fYnVmZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19i dWZmZXJfZW5kID0gY29weShfX2ZpcnN0LCBfX21pZGRsZSwgX19idWZmZXIpOwogICAgICAgICAg ICBtZXJnZShfX2J1ZmZlciwgX19idWZmZXJfZW5kLCBfX21pZGRsZSwgX19sYXN0LCBfX2ZpcnN0 LCBfX2NvbXApOwogICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX19sZW4yIDw9IF9fYnVm ZmVyX3NpemUpIHsKICAgICAgICAgICAgX1BvaW50ZXIgX19idWZmZXJfZW5kID0gY29weShfX21p ZGRsZSwgX19sYXN0LCBfX2J1ZmZlcik7CiAgICAgICAgICAgIF9fbWVyZ2VfYmFja3dhcmQoX19m aXJzdCwgX19taWRkbGUsIF9fYnVmZmVyLCBfX2J1ZmZlcl9lbmQsIF9fbGFzdCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jb21wKTsKICAgICAgICAgIH0K ICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdF9j dXQgPSBfX2ZpcnN0OwogICAgICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19zZWNvbmRfY3V0 ID0gX19taWRkbGU7CiAgICAgICAgICAgIF9EaXN0YW5jZSBfX2xlbjExID0gMDsKICAgICAgICAg ICAgX0Rpc3RhbmNlIF9fbGVuMjIgPSAwOwogICAgICAgICAgICBpZiAoX19sZW4xID4gX19sZW4y KSB7CiAgICAgICAgICAgICAgICAgIF9fbGVuMTEgPSBfX2xlbjEgLyAyOwogICAgICAgICAgICAg ICAgICBhZHZhbmNlKF9fZmlyc3RfY3V0LCBfX2xlbjExKTsKICAgICAgICAgICAgICAgICAgX19z ZWNvbmRfY3V0ID0gbG93ZXJfYm91bmQoX19taWRkbGUsIF9fbGFzdCwgKl9fZmlyc3RfY3V0LCBf X2NvbXApOwogICAgICAgICAgICAgICAgICBfX2xlbjIyID0gZGlzdGFuY2UoX19taWRkbGUsIF9f c2Vjb25kX2N1dCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAg ICAgICAgIF9fbGVuMjIgPSBfX2xlbjIgLyAyOwogICAgICAgICAgICAgICAgICBhZHZhbmNlKF9f c2Vjb25kX2N1dCwgX19sZW4yMik7CiAgICAgICAgICAgICAgICAgIF9fZmlyc3RfY3V0ID0gdXBw ZXJfYm91bmQoX19maXJzdCwgX19taWRkbGUsICpfX3NlY29uZF9jdXQsIF9fY29tcCk7CiAgICAg ICAgICAgICAgICAgIF9fbGVuMTEgPSBkaXN0YW5jZShfX2ZpcnN0LCBfX2ZpcnN0X2N1dCk7CiAg ICAgICAgICAgIH0KICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbmV3X21pZGRsZSA9 CiAgICAgICAgICAgICAgICAgIF9fcm90YXRlX2FkYXB0aXZlKF9fZmlyc3RfY3V0LCBfX21pZGRs ZSwgX19zZWNvbmRfY3V0LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2xl bjEgLSBfX2xlbjExLCBfX2xlbjIyLCBfX2J1ZmZlciwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19idWZmZXJfc2l6ZSk7CiAgICAgICAgICAgIF9fbWVyZ2VfYWRhcHRpdmUo X19maXJzdCwgX19maXJzdF9jdXQsIF9fbmV3X21pZGRsZSwgX19sZW4xMSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX2xlbjIyLCBfX2J1ZmZlciwgX19idWZmZXJfc2l6ZSwgX19jb21w KTsKICAgICAgICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX25ld19taWRkbGUsIF9fc2Vjb25kX2N1 dCwgX19sYXN0LCBfX2xlbjEgLSBfX2xlbjExLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9fbGVuMiAtIF9fbGVuMjIsIF9fYnVmZmVyLCBfX2J1ZmZlcl9zaXplLCBfX2NvbXApOwogICAg ICAgICAgfQogICAgfQojIDM1MDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsZ28uaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4KICAgIHZv aWQKICAgIGlucGxhY2VfbWVyZ2UoX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAg ICAgICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBp dGVyYXRvcl90cmFpdHM8X0JpZGlyZWN0aW9uYWxJdGVyPjo6dmFsdWVfdHlwZQogICAgICAgICAg X1ZhbHVlVHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBpdGVyYXRvcl90cmFpdHM8X0JpZGly ZWN0aW9uYWxJdGVyPjo6ZGlmZmVyZW5jZV90eXBlCiAgICAgICAgICBfRGlzdGFuY2VUeXBlOwoK CiAgICAgCgogICAgIAoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUgfHwgX19taWRkbGUg PT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5cGUgX19sZW4xID0g ZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VUeXBlIF9fbGVuMiA9 IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFyeV9idWZmZXI8X0Jp ZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBfX2xhc3QpOwogICAg ICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0aG91dF9idWZmZXIo X19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIpOwogICAgICBlbHNlCiAg ICAgICAgX19tZXJnZV9hZGFwdGl2ZShfX2ZpcnN0LCBfX21pZGRsZSwgX19sYXN0LCBfX2xlbjEs IF9fbGVuMiwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fYnVmLmJlZ2luKCksIF9EaXN0YW5j ZVR5cGUoX19idWYuc2l6ZSgpKSk7CiAgICB9CiMgMzU1OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9u YWxJdGVyLCB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIHZvaWQKICAgIGlucGxhY2VfbWVyZ2UoX0Jp ZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3QsCiAgICAgICAgICAgICAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX21pZGRsZSwKICAgICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFz dCwKICAgICAgICAgICAgICAgICAgX0NvbXBhcmUgX19jb21wKQogICAgewogICAgICB0eXBlZGVm IHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+Ojp2YWx1ZV90eXBl CiAgICAgICAgICBfVmFsdWVUeXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGl0ZXJhdG9yX3Ry YWl0czxfQmlkaXJlY3Rpb25hbEl0ZXI+OjpkaWZmZXJlbmNlX3R5cGUKICAgICAgICAgIF9EaXN0 YW5jZVR5cGU7CgoKICAgICAKCiAgICAgCgoKICAgICAgaWYgKF9fZmlyc3QgPT0gX19taWRkbGUg fHwgX19taWRkbGUgPT0gX19sYXN0KQogICAgICAgIHJldHVybjsKCiAgICAgIF9EaXN0YW5jZVR5 cGUgX19sZW4xID0gZGlzdGFuY2UoX19maXJzdCwgX19taWRkbGUpOwogICAgICBfRGlzdGFuY2VU eXBlIF9fbGVuMiA9IGRpc3RhbmNlKF9fbWlkZGxlLCBfX2xhc3QpOwoKICAgICAgX1RlbXBvcmFy eV9idWZmZXI8X0JpZGlyZWN0aW9uYWxJdGVyLCBfVmFsdWVUeXBlPiBfX2J1ZihfX2ZpcnN0LCBf X2xhc3QpOwogICAgICBpZiAoX19idWYuYmVnaW4oKSA9PSAwKQogICAgICAgIF9fbWVyZ2Vfd2l0 aG91dF9idWZmZXIoX19maXJzdCwgX19taWRkbGUsIF9fbGFzdCwgX19sZW4xLCBfX2xlbjIsIF9f Y29tcCk7CiAgICAgIGVsc2UKICAgICAgICBfX21lcmdlX2FkYXB0aXZlKF9fZmlyc3QsIF9fbWlk ZGxlLCBfX2xhc3QsIF9fbGVuMSwgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgX19i dWYuYmVnaW4oKSwgX0Rpc3RhbmNlVHlwZShfX2J1Zi5zaXplKCkpLAogICAgICAgICAgICAgICAg ICAgICAgICAgX19jb21wKTsKICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJ dGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjI+CiAgICBib29sCiAgICBpbmNsdWRlcyhfSW5wdXRJ dGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgIF9JbnB1dEl0 ZXIyIF9fZmlyc3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAKICAg ICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkKICAgICAgICAg IHJldHVybiBmYWxzZTsKICAgICAgICBlbHNlIGlmKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikKICAg ICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAgKytfX2ZpcnN0MSwgKytf X2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3QyOwogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgYm9vbAogICAgaW5jbHVkZXMoX0lucHV0SXRlcjEgX19maXJzdDEsIF9J bnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lu cHV0SXRlcjIgX19sYXN0MiwgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKICAg ICAKCgogICAgIAoKCgogICAgICB3aGlsZSAoX19maXJzdDEgIT0gX19sYXN0MSAmJiBfX2ZpcnN0 MiAhPSBfX2xhc3QyKQogICAgICAgIGlmIChfX2NvbXAoKl9fZmlyc3QyLCAqX19maXJzdDEpKQog ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGVsc2UgaWYoX19jb21wKCpfX2ZpcnN0MSwg Kl9fZmlyc3QyKSkKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZQogICAgICAgICAg KytfX2ZpcnN0MSwgKytfX2ZpcnN0MjsKCiAgICAgIHJldHVybiBfX2ZpcnN0MiA9PSBfX2xhc3Qy OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwgdHlwZW5hbWUgX0lucHV0 SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0ZXIKICAgIHNldF91bmlv bihfSW5wdXRJdGVyMSBfX2ZpcnN0MSwgX0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAg ICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAg ICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoK CiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0g X19sYXN0MikgewogICAgICAgIGlmICgqX19maXJzdDEgPCAqX19maXJzdDIpIHsKICAgICAgICAg ICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgfQog ICAgICAgIGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVz dWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAg ZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsK ICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0 MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0 SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfdW5pb24oX0lu cHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICAgX0lu cHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpIHsKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9f Zmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytf X2ZpcnN0MTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoX19jb21wKCpfX2ZpcnN0MiwgKl9f Zmlyc3QxKSkgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QyOwogICAgICAgICAgKytf X2ZpcnN0MjsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAq X19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICB9CiAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gY29weShfX2Zp cnN0MiwgX19sYXN0MiwgY29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0 eXBlbmFtZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9u KF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAg ICAgICAgICBfSW5wdXRJdGVyMiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAg ICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAgICB7CgogICAgIAogICAgIAog ICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2ZpcnN0MSA8ICpfX2ZpcnN0MikK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmly c3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsKICAgICAgICAgICpfX3Jl c3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmly c3QyOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1 dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFy ZT4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfaW50ZXJzZWN0aW9uKF9JbnB1dEl0ZXIxIF9fZmly c3QxLCBfSW5wdXRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVy MiBfX2ZpcnN0MiwgX0lucHV0SXRlcjIgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAg ICAgCgoKICAgICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYm IF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2Zp cnN0MikpCiAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19m aXJzdDIsICpfX2ZpcnN0MSkpCiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIGVsc2Ugewog ICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAg ICAgICAgICsrX19maXJzdDI7CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fcmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyMSwg dHlwZW5hbWUgX0lucHV0SXRlcjIsIHR5cGVuYW1lIF9PdXRwdXRJdGVyPgogICAgX091dHB1dEl0 ZXIKICAgIHNldF9kaWZmZXJlbmNlKF9JbnB1dEl0ZXIxIF9fZmlyc3QxLCBfSW5wdXRJdGVyMSBf X2xhc3QxLAogICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0 ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICBfT3V0cHV0SXRlciBfX3Jlc3VsdCkKICAg IHsKCiAgICAgCiAgICAgCiAgICAgCgogICAgIAoKCiAgICAgCgoKICAgICAgd2hpbGUgKF9fZmly c3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAgICBpZiAoKl9fZmly c3QxIDwgKl9fZmlyc3QyKSB7CiAgICAgICAgICAqX19yZXN1bHQgPSAqX19maXJzdDE7CiAgICAg ICAgICArK19fZmlyc3QxOwogICAgICAgICAgKytfX3Jlc3VsdDsKICAgICAgICB9CiAgICAgICAg ZWxzZSBpZiAoKl9fZmlyc3QyIDwgKl9fZmlyc3QxKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAg ICAgICBlbHNlIHsKICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwog ICAgICAgIH0KICAgICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0 ZXIyLCB0eXBlbmFtZSBfT3V0cHV0SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4K ICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfZGlmZmVyZW5jZShfSW5wdXRJdGVyMSBfX2ZpcnN0MSwg X0lucHV0SXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIyIF9fZmly c3QyLCBfSW5wdXRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIg X19yZXN1bHQsIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKICAg ICAKCiAgICAgCgoKCiAgICAgIHdoaWxlIChfX2ZpcnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3Qy ICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKF9fY29tcCgqX19maXJzdDEsICpfX2ZpcnN0MikpIHsK ICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MTsKICAgICAgICAgICsrX19maXJzdDE7CiAg ICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIGlmIChfX2NvbXAoKl9f Zmlyc3QyLCAqX19maXJzdDEpKQogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICBlbHNlIHsK ICAgICAgICAgICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAg ICAgcmV0dXJuIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0KTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFt ZSBfT3V0cHV0SXRlcj4KICAgIF9PdXRwdXRJdGVyCiAgICBzZXRfc3ltbWV0cmljX2RpZmZlcmVu Y2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJzdDIsIF9JbnB1dEl0ZXIyIF9fbGFz dDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091dHB1dEl0ZXIgX19yZXN1bHQpCiAg ICB7CgogICAgIAogICAgIAogICAgIAoKICAgICAKCgogICAgIAoKCiAgICAgIHdoaWxlIChfX2Zp cnN0MSAhPSBfX2xhc3QxICYmIF9fZmlyc3QyICE9IF9fbGFzdDIpCiAgICAgICAgaWYgKCpfX2Zp cnN0MSA8ICpfX2ZpcnN0MikgewogICAgICAgICAgKl9fcmVzdWx0ID0gKl9fZmlyc3QxOwogICAg ICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7CiAgICAgICAgfQogICAgICAg IGVsc2UgaWYgKCpfX2ZpcnN0MiA8ICpfX2ZpcnN0MSkgewogICAgICAgICAgKl9fcmVzdWx0ID0g Kl9fZmlyc3QyOwogICAgICAgICAgKytfX2ZpcnN0MjsKICAgICAgICAgICsrX19yZXN1bHQ7CiAg ICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsr X19maXJzdDI7CiAgICAgICAgfQogICAgICByZXR1cm4gY29weShfX2ZpcnN0MiwgX19sYXN0Miwg Y29weShfX2ZpcnN0MSwgX19sYXN0MSwgX19yZXN1bHQpKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0lucHV0SXRlcjEsIHR5cGVuYW1lIF9JbnB1dEl0ZXIyLCB0eXBlbmFtZSBfT3V0cHV0 SXRlciwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZT4KICAgIF9PdXRwdXRJdGVyCiAgICBz ZXRfc3ltbWV0cmljX2RpZmZlcmVuY2UoX0lucHV0SXRlcjEgX19maXJzdDEsIF9JbnB1dEl0ZXIx IF9fbGFzdDEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0lucHV0SXRlcjIgX19maXJz dDIsIF9JbnB1dEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX091 dHB1dEl0ZXIgX19yZXN1bHQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0NvbXBhcmUg X19jb21wKQogICAgewoKICAgICAKICAgICAKICAgICAKCgogICAgIAoKICAgICAKCgoKICAgICAg d2hpbGUgKF9fZmlyc3QxICE9IF9fbGFzdDEgJiYgX19maXJzdDIgIT0gX19sYXN0MikKICAgICAg ICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9fZmlyc3QyKSkgewogICAgICAgICAgKl9fcmVzdWx0 ID0gKl9fZmlyc3QxOwogICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAgICsrX19yZXN1bHQ7 CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKF9fY29tcCgqX19maXJzdDIsICpfX2ZpcnN0MSkp IHsKICAgICAgICAgICpfX3Jlc3VsdCA9ICpfX2ZpcnN0MjsKICAgICAgICAgICsrX19maXJzdDI7 CiAgICAgICAgICArK19fcmVzdWx0OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAg ICsrX19maXJzdDE7CiAgICAgICAgICArK19fZmlyc3QyOwogICAgICAgIH0KICAgICAgcmV0dXJu IGNvcHkoX19maXJzdDIsIF9fbGFzdDIsIGNvcHkoX19maXJzdDEsIF9fbGFzdDEsIF9fcmVzdWx0 KSk7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcj4KICAgIF9Gb3J3 YXJkSXRlcgogICAgbWF4X2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmlyc3QsIF9Gb3J3YXJkSXRl ciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFz dCkgcmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7 CiAgICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmICgqX19yZXN1bHQg PCAqX19maXJzdCkKICAgICAgICAgIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9f cmVzdWx0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgX0ZvcndhcmRJdGVyCiAgICBtYXhfZWxlbWVudChfRm9yd2FyZEl0ZXIg X19maXJzdCwgX0ZvcndhcmRJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgIF9Db21wYXJlIF9f Y29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2ZpcnN0ID09IF9fbGFzdCkg cmV0dXJuIF9fZmlyc3Q7CiAgICAgIF9Gb3J3YXJkSXRlciBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAg ICAgIHdoaWxlICgrK19fZmlyc3QgIT0gX19sYXN0KQogICAgICAgIGlmIChfX2NvbXAoKl9fcmVz dWx0LCAqX19maXJzdCkpIF9fcmVzdWx0ID0gX19maXJzdDsKICAgICAgcmV0dXJuIF9fcmVzdWx0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0ZXI+CiAgICBfRm9yd2FyZEl0 ZXIKICAgIG1pbl9lbGVtZW50KF9Gb3J3YXJkSXRlciBfX2ZpcnN0LCBfRm9yd2FyZEl0ZXIgX19s YXN0KQogICAgewoKICAgICAKICAgICAKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJl dHVybiBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAg ICB3aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoKl9fZmlyc3QgPCAqX19y ZXN1bHQpCiAgICAgICAgICBfX3Jlc3VsdCA9IF9fZmlyc3Q7CiAgICAgIHJldHVybiBfX3Jlc3Vs dDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyLCB0eXBlbmFtZSBfQ29t cGFyZT4KICAgIF9Gb3J3YXJkSXRlcgogICAgbWluX2VsZW1lbnQoX0ZvcndhcmRJdGVyIF9fZmly c3QsIF9Gb3J3YXJkSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICBfQ29tcGFyZSBfX2NvbXAp CiAgICB7CgogICAgIAogICAgIAoKCgogICAgICBpZiAoX19maXJzdCA9PSBfX2xhc3QpIHJldHVy biBfX2ZpcnN0OwogICAgICBfRm9yd2FyZEl0ZXIgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICB3 aGlsZSAoKytfX2ZpcnN0ICE9IF9fbGFzdCkKICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0LCAq X19yZXN1bHQpKQogICAgICAgICAgX19yZXN1bHQgPSBfX2ZpcnN0OwogICAgICByZXR1cm4gX19y ZXN1bHQ7CiAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcj4K ICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJdGVyIF9fZmlyc3Qs IF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QpCiAgICB7CgogICAgIAogICAgIAoKCiAgICAgIGlm IChfX2ZpcnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVj dGlvbmFsSXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBf X2xhc3QpCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0t X19pOwoKICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBf X2k7CiAgICAgICAgLS1fX2k7CiAgICAgICAgaWYgKCpfX2kgPCAqX19paSkgewogICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghKCpfX2kg PCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwgX19qKTsK ICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0cnVlOwog ICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJldmVyc2Uo X19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyLCB0eXBlbmFt ZSBfQ29tcGFyZT4KICAgIGJvb2wKICAgIG5leHRfcGVybXV0YXRpb24oX0JpZGlyZWN0aW9uYWxJ dGVyIF9fZmlyc3QsIF9CaWRpcmVjdGlvbmFsSXRlciBfX2xhc3QsCiAgICAgICAgICAgICAgICAg ICAgIF9Db21wYXJlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCgoKCiAgICAgIGlmIChfX2Zp cnN0ID09IF9fbGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9CaWRpcmVjdGlvbmFs SXRlciBfX2kgPSBfX2ZpcnN0OwogICAgICArK19faTsKICAgICAgaWYgKF9faSA9PSBfX2xhc3Qp CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBfX2kgPSBfX2xhc3Q7CiAgICAgIC0tX19pOwoK ICAgICAgZm9yKDs7KSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyIF9faWkgPSBfX2k7CiAg ICAgICAgLS1fX2k7CiAgICAgICAgaWYgKF9fY29tcCgqX19pLCAqX19paSkpIHsKICAgICAgICAg IF9CaWRpcmVjdGlvbmFsSXRlciBfX2ogPSBfX2xhc3Q7CiAgICAgICAgICB3aGlsZSAoIV9fY29t cCgqX19pLCAqLS1fX2opKQogICAgICAgICAgICB7fQogICAgICAgICAgaXRlcl9zd2FwKF9faSwg X19qKTsKICAgICAgICAgIHJldmVyc2UoX19paSwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiB0 cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoX19pID09IF9fZmlyc3QpIHsKICAgICAgICAgIHJl dmVyc2UoX19maXJzdCwgX19sYXN0KTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9 CiAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0JpZGlyZWN0aW9uYWxJdGVyPgog ICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0ZXIgX19maXJzdCwg X0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCkKICAgIHsKCiAgICAgCiAgICAgCgoKICAgICAgaWYg KF9fZmlyc3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0 aW9uYWxJdGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9f bGFzdCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1f X2k7CgogICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9f aTsKICAgICAgICAtLV9faTsKICAgICAgICBpZiAoKl9faWkgPCAqX19pKSB7CiAgICAgICAgICBf QmlkaXJlY3Rpb25hbEl0ZXIgX19qID0gX19sYXN0OwogICAgICAgICAgd2hpbGUgKCEoKi0tX19q IDwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBfX2opOwog ICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAg ICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2ZXJzZShf X2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAg fQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIsIHR5cGVuYW1l IF9Db21wYXJlPgogICAgYm9vbAogICAgcHJldl9wZXJtdXRhdGlvbihfQmlkaXJlY3Rpb25hbEl0 ZXIgX19maXJzdCwgX0JpZGlyZWN0aW9uYWxJdGVyIF9fbGFzdCwKICAgICAgICAgICAgICAgICAg ICAgX0NvbXBhcmUgX19jb21wKQogICAgewoKICAgICAKICAgICAKCgoKICAgICAgaWYgKF9fZmly c3QgPT0gX19sYXN0KQogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyIF9faSA9IF9fZmlyc3Q7CiAgICAgICsrX19pOwogICAgICBpZiAoX19pID09IF9fbGFzdCkK ICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIF9faSA9IF9fbGFzdDsKICAgICAgLS1fX2k7Cgog ICAgICBmb3IoOzspIHsKICAgICAgICBfQmlkaXJlY3Rpb25hbEl0ZXIgX19paSA9IF9faTsKICAg ICAgICAtLV9faTsKICAgICAgICBpZiAoX19jb21wKCpfX2lpLCAqX19pKSkgewogICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyIF9faiA9IF9fbGFzdDsKICAgICAgICAgIHdoaWxlICghX19jb21w KCotLV9faiwgKl9faSkpCiAgICAgICAgICAgIHt9CiAgICAgICAgICBpdGVyX3N3YXAoX19pLCBf X2opOwogICAgICAgICAgcmV2ZXJzZShfX2lpLCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIHRy dWU7CiAgICAgICAgfQogICAgICAgIGlmIChfX2kgPT0gX19maXJzdCkgewogICAgICAgICAgcmV2 ZXJzZShfX2ZpcnN0LCBfX2xhc3QpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0K ICAgICAgfQogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1l IF9Gb3J3YXJkSXRlcj4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lucHV0SXRl ciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBfRm9yd2Fy ZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyKQogICAgewoKICAgICAKICAgICAK ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQog ICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19s YXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoKl9fZmlyc3QxID09ICpfX2l0ZXIpCiAgICAg ICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9JbnB1dEl0ZXIsIHR5cGVuYW1lIF9Gb3J3YXJkSXRlciwgdHlwZW5h bWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIF9JbnB1dEl0ZXIKICAgIGZpbmRfZmlyc3Rfb2YoX0lu cHV0SXRlciBfX2ZpcnN0MSwgX0lucHV0SXRlciBfX2xhc3QxLAogICAgICAgICAgICAgICAgICBf Rm9yd2FyZEl0ZXIgX19maXJzdDIsIF9Gb3J3YXJkSXRlciBfX2xhc3QyLAogICAgICAgICAgICAg ICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkKICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoK ICAgICAKCgoKICAgICAgZm9yICggOyBfX2ZpcnN0MSAhPSBfX2xhc3QxOyArK19fZmlyc3QxKQog ICAgICAgIGZvciAoX0ZvcndhcmRJdGVyIF9faXRlciA9IF9fZmlyc3QyOyBfX2l0ZXIgIT0gX19s YXN0MjsgKytfX2l0ZXIpCiAgICAgICAgICBpZiAoX19jb21wKCpfX2ZpcnN0MSwgKl9faXRlcikp CiAgICAgICAgICAgIHJldHVybiBfX2ZpcnN0MTsKICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICB9 CiMgNDIwMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxnby5oIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4K ICAgIF9Gb3J3YXJkSXRlcjEKICAgIF9fZmluZF9lbmQoX0ZvcndhcmRJdGVyMSBfX2ZpcnN0MSwg X0ZvcndhcmRJdGVyMSBfX2xhc3QxLAogICAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmly c3QyLCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0 b3JfdGFnLCBmb3J3YXJkX2l0ZXJhdG9yX3RhZykKICAgIHsKICAgICAgaWYgKF9fZmlyc3QyID09 IF9fbGFzdDIpCiAgICAgICAgcmV0dXJuIF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9G b3J3YXJkSXRlcjEgX19yZXN1bHQgPSBfX2xhc3QxOwogICAgICAgIHdoaWxlICgxKSB7CiAgICAg ICAgICBfRm9yd2FyZEl0ZXIxIF9fbmV3X3Jlc3VsdAogICAgICAgICAgICA9IHNlYXJjaChfX2Zp cnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIpOwogICAgICAgICAgaWYgKF9fbmV3X3Jl c3VsdCA9PSBfX2xhc3QxKQogICAgICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgICAgICBl bHNlIHsKICAgICAgICAgICAgX19yZXN1bHQgPSBfX25ld19yZXN1bHQ7CiAgICAgICAgICAgIF9f Zmlyc3QxID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICArK19fZmlyc3QxOwogICAgICAgICAg fQogICAgICAgIH0KICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRm9yd2FyZEl0 ZXIxLCB0eXBlbmFtZSBfRm9yd2FyZEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQ cmVkaWNhdGU+CiAgICBfRm9yd2FyZEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9Gb3J3YXJkSXRlcjEg X19maXJzdDEsIF9Gb3J3YXJkSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0ZvcndhcmRJ dGVyMiBfX2ZpcnN0MiwgX0ZvcndhcmRJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAgICBmb3J3 YXJkX2l0ZXJhdG9yX3RhZywgZm9yd2FyZF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9C aW5hcnlQcmVkaWNhdGUgX19jb21wKQogICAgewogICAgICBpZiAoX19maXJzdDIgPT0gX19sYXN0 MikKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAgZWxzZSB7CiAgICAgICAgX0ZvcndhcmRJ dGVyMSBfX3Jlc3VsdCA9IF9fbGFzdDE7CiAgICAgICAgd2hpbGUgKDEpIHsKICAgICAgICAgIF9G b3J3YXJkSXRlcjEgX19uZXdfcmVzdWx0CiAgICAgICAgICAgID0gc2VhcmNoKF9fZmlyc3QxLCBf X2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwgX19jb21wKTsKICAgICAgICAgIGlmIChfX25ld19y ZXN1bHQgPT0gX19sYXN0MSkKICAgICAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICAgICAg ZWxzZSB7CiAgICAgICAgICAgIF9fcmVzdWx0ID0gX19uZXdfcmVzdWx0OwogICAgICAgICAgICBf X2ZpcnN0MSA9IF9fbmV3X3Jlc3VsdDsKICAgICAgICAgICAgKytfX2ZpcnN0MTsKICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9CaWRpcmVj dGlvbmFsSXRlcjEsIHR5cGVuYW1lIF9CaWRpcmVjdGlvbmFsSXRlcjI+CiAgICBfQmlkaXJlY3Rp b25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRlcjEgX19maXJzdDEsIF9C aWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAgX0JpZGlyZWN0aW9uYWxJ dGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3QyLAogICAgICAgICAgICAg ICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcp CiAgICB7CgogICAgIAogICAgIAoKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9yPF9CaWRp cmVjdGlvbmFsSXRlcjE+IF9SZXZJdGVyMTsKICAgICAgdHlwZWRlZiByZXZlcnNlX2l0ZXJhdG9y PF9CaWRpcmVjdGlvbmFsSXRlcjI+IF9SZXZJdGVyMjsKCiAgICAgIF9SZXZJdGVyMSBfX3JsYXN0 MShfX2ZpcnN0MSk7CiAgICAgIF9SZXZJdGVyMiBfX3JsYXN0MihfX2ZpcnN0Mik7CiAgICAgIF9S ZXZJdGVyMSBfX3JyZXN1bHQgPSBzZWFyY2goX1Jldkl0ZXIxKF9fbGFzdDEpLCBfX3JsYXN0MSwK ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfUmV2SXRlcjIoX19sYXN0MiksIF9f cmxhc3QyKTsKCiAgICAgIGlmIChfX3JyZXN1bHQgPT0gX19ybGFzdDEpCiAgICAgICAgcmV0dXJu IF9fbGFzdDE7CiAgICAgIGVsc2UgewogICAgICAgIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19yZXN1 bHQgPSBfX3JyZXN1bHQuYmFzZSgpOwogICAgICAgIGFkdmFuY2UoX19yZXN1bHQsIC1kaXN0YW5j ZShfX2ZpcnN0MiwgX19sYXN0MikpOwogICAgICAgIHJldHVybiBfX3Jlc3VsdDsKICAgICAgfQog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQmlkaXJlY3Rpb25hbEl0ZXIxLCB0eXBlbmFtZSBf QmlkaXJlY3Rpb25hbEl0ZXIyLAogICAgICAgICAgIHR5cGVuYW1lIF9CaW5hcnlQcmVkaWNhdGU+ CiAgICBfQmlkaXJlY3Rpb25hbEl0ZXIxCiAgICBfX2ZpbmRfZW5kKF9CaWRpcmVjdGlvbmFsSXRl cjEgX19maXJzdDEsIF9CaWRpcmVjdGlvbmFsSXRlcjEgX19sYXN0MSwKICAgICAgICAgICAgICAg X0JpZGlyZWN0aW9uYWxJdGVyMiBfX2ZpcnN0MiwgX0JpZGlyZWN0aW9uYWxJdGVyMiBfX2xhc3Qy LAogICAgICAgICAgICAgICBiaWRpcmVjdGlvbmFsX2l0ZXJhdG9yX3RhZywgYmlkaXJlY3Rpb25h bF9pdGVyYXRvcl90YWcsCiAgICAgICAgICAgICAgIF9CaW5hcnlQcmVkaWNhdGUgX19jb21wKQog ICAgewoKICAgICAKICAgICAKCiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxfQmlkaXJl Y3Rpb25hbEl0ZXIxPiBfUmV2SXRlcjE7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxf QmlkaXJlY3Rpb25hbEl0ZXIyPiBfUmV2SXRlcjI7CgogICAgICBfUmV2SXRlcjEgX19ybGFzdDEo X19maXJzdDEpOwogICAgICBfUmV2SXRlcjIgX19ybGFzdDIoX19maXJzdDIpOwogICAgICBfUmV2 SXRlcjEgX19ycmVzdWx0ID0gc2VhcmNoKF9SZXZJdGVyMShfX2xhc3QxKSwgX19ybGFzdDEsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1Jldkl0ZXIyKF9fbGFzdDIpLCBfX3Js YXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2NvbXApOwoKICAgICAg aWYgKF9fcnJlc3VsdCA9PSBfX3JsYXN0MSkKICAgICAgICByZXR1cm4gX19sYXN0MTsKICAgICAg ZWxzZSB7CiAgICAgICAgX0JpZGlyZWN0aW9uYWxJdGVyMSBfX3Jlc3VsdCA9IF9fcnJlc3VsdC5i YXNlKCk7CiAgICAgICAgYWR2YW5jZShfX3Jlc3VsdCwgLWRpc3RhbmNlKF9fZmlyc3QyLCBfX2xh c3QyKSk7CiAgICAgICAgcmV0dXJuIF9fcmVzdWx0OwogICAgICB9CiAgICB9CgoKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyMSwgdHlwZW5hbWUgX0ZvcndhcmRJdGVyMj4KICAgIGlu bGluZSBfRm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBf Rm9yd2FyZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3Qy LCBfRm9yd2FyZEl0ZXIyIF9fbGFzdDIpCiAgICB7CgogICAgIAogICAgIAogICAgIAoKCgogICAg ICByZXR1cm4gX19maW5kX2VuZChfX2ZpcnN0MSwgX19sYXN0MSwgX19maXJzdDIsIF9fbGFzdDIs CiAgICAgICAgICAgICAgICAgICAgICAgIF9faXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDEpLAog ICAgICAgICAgICAgICAgICAgICAgICBfX2l0ZXJhdG9yX2NhdGVnb3J5KF9fZmlyc3QyKSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9Gb3J3YXJkSXRlcjEsIHR5cGVuYW1lIF9Gb3J3YXJk SXRlcjIsCiAgICAgICAgICAgdHlwZW5hbWUgX0JpbmFyeVByZWRpY2F0ZT4KICAgIGlubGluZSBf Rm9yd2FyZEl0ZXIxCiAgICBmaW5kX2VuZChfRm9yd2FyZEl0ZXIxIF9fZmlyc3QxLCBfRm9yd2Fy ZEl0ZXIxIF9fbGFzdDEsCiAgICAgICAgICAgICBfRm9yd2FyZEl0ZXIyIF9fZmlyc3QyLCBfRm9y d2FyZEl0ZXIyIF9fbGFzdDIsCiAgICAgICAgICAgICBfQmluYXJ5UHJlZGljYXRlIF9fY29tcCkK ICAgIHsKCiAgICAgCiAgICAgCiAgICAgCgoKCiAgICAgIHJldHVybiBfX2ZpbmRfZW5kKF9fZmly c3QxLCBfX2xhc3QxLCBfX2ZpcnN0MiwgX19sYXN0MiwKICAgICAgICAgICAgICAgICAgICAgICAg X19pdGVyYXRvcl9jYXRlZ29yeShfX2ZpcnN0MSksCiAgICAgICAgICAgICAgICAgICAgICAgIF9f aXRlcmF0b3JfY2F0ZWdvcnkoX19maXJzdDIpLAogICAgICAgICAgICAgICAgICAgICAgICBfX2Nv bXApOwogICAgfQoKfQojIDcwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9hbGdvcml0aG0i IDIgMwojIDI0ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBwIiAyCiMgMzMgIi4u Ly4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiCiMgMSAiLi4vLi4vLi4vYm9vc3QvZHlu YW1pY19hbnkvZndkLmhwcCIgMQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv c3RyaW5nIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAzCgoK CiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAxIDMK IyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jaGFyX3RyYWl0cy5oIiAzCgoK CgpuYW1lc3BhY2Ugc3RkCnsKCgoKICB0ZW1wbGF0ZTxjbGFzcyBfQ2hhclQ+CiAgICBzdHJ1Y3Qg Y2hhcl90cmFpdHMKICAgIHsKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAg dHlwZWRlZiB1bnNpZ25lZCBsb25nIGludF90eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbXBvcyBw b3NfdHlwZTsKICAgICAgdHlwZWRlZiBzdHJlYW1vZmYgb2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYg bWJzdGF0ZV90IHN0YXRlX3R5cGU7CgogICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hh cl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGJvb2wK ICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFyX3R5cGUmIF9fYzIpOwoK ICAgICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBj aGFyX3R5cGUmIF9fYzIpOwoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNo YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKTsKCiAgICAg IHN0YXRpYyBzaXplX3QKICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKTsKCiAgICAg IHN0YXRpYyBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3Ms IHNpemVfdCBfX24sIGNvbnN0IGNoYXJfdHlwZSYgX19hKTsKCiAgICAgIHN0YXRpYyBjaGFyX3R5 cGUqCiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIHNp emVfdCBfX24pOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUq IF9fczEsIGNvbnN0IGNoYXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbik7CgogICAgICBzdGF0aWMg Y2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJf dHlwZSBfX2EpOwoKICAgICAgc3RhdGljIGNoYXJfdHlwZQogICAgICB0b19jaGFyX3R5cGUoY29u c3QgaW50X3R5cGUmIF9fYyk7CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5 cGUoY29uc3QgY2hhcl90eXBlJiBfX2MpOwoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXFfaW50 X3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYzEsIGNvbnN0IGludF90eXBlJiBfX2MyKTsKCiAgICAg IHN0YXRpYyBpbnRfdHlwZQogICAgICBlb2YoKTsKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg ICBub3RfZW9mKGNvbnN0IGludF90eXBlJiBfX2MpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTw+CiAg ICBzdHJ1Y3QgY2hhcl90cmFpdHM8Y2hhcj4KICAgIHsKICAgICAgdHlwZWRlZiBjaGFyIGNoYXJf dHlwZTsKICAgICAgdHlwZWRlZiBpbnQgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtcG9z IHBvc190eXBlOwogICAgICB0eXBlZGVmIHN0cmVhbW9mZiBvZmZfdHlwZTsKICAgICAgdHlwZWRl ZiBtYnN0YXRlX3Qgc3RhdGVfdHlwZTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIGFzc2lnbihj aGFyX3R5cGUmIF9fYzEsIGNvbnN0IGNoYXJfdHlwZSYgX19jMikKICAgICAgeyBfX2MxID0gX19j MjsgfQoKICAgICAgc3RhdGljIGJvb2wKICAgICAgZXEoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBj b25zdCBjaGFyX3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAg ICAgc3RhdGljIGJvb2wKICAgICAgbHQoY29uc3QgY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPCBfX2MyOyB9CgogICAgICBzdGF0aWMg aW50CiAgICAgIGNvbXBhcmUoY29uc3QgY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUq IF9fczIsIHNpemVfdCBfX24pCiAgICAgIHsgcmV0dXJuIG1lbWNtcChfX3MxLCBfX3MyLCBfX24p OyB9CgogICAgICBzdGF0aWMgc2l6ZV90CiAgICAgIGxlbmd0aChjb25zdCBjaGFyX3R5cGUqIF9f cykKICAgICAgeyByZXR1cm4gc3RybGVuKF9fcyk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGZpbmQoY29uc3QgY2hhcl90eXBlKiBfX3MsIHNpemVfdCBfX24sIGNvbnN0 IGNoYXJfdHlwZSYgX19hKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBjaGFyX3R5 cGUqPihtZW1jaHIoX19zLCBfX2EsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgog ICAgICBtb3ZlKGNoYXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3Qg X19uKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1tb3ZlKF9fczEs IF9fczIsIF9fbikpOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBjb3B5KGNoYXJf dHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxjaGFyX3R5cGUqPihtZW1jcHkoX19zMSwgX19zMiwgX19uKSk7IH0K CiAgICAgIHN0YXRpYyBjaGFyX3R5cGUqCiAgICAgIGFzc2lnbihjaGFyX3R5cGUqIF9fcywgc2l6 ZV90IF9fbiwgY2hhcl90eXBlIF9fYSkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcl90 eXBlKj4obWVtc2V0KF9fcywgX19hLCBfX24pKTsgfQoKICAgICAgc3RhdGljIGNoYXJfdHlwZQog ICAgICB0b19jaGFyX3R5cGUoY29uc3QgaW50X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3Rh dGljX2Nhc3Q8Y2hhcl90eXBlPihfX2MpOyB9CgoKCiAgICAgIHN0YXRpYyBpbnRfdHlwZQogICAg ICB0b19pbnRfdHlwZShjb25zdCBjaGFyX3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gc3RhdGlj X2Nhc3Q8aW50X3R5cGU+KHN0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KF9fYykpOyB9CgogICAg ICBzdGF0aWMgYm9vbAogICAgICBlcV9pbnRfdHlwZShjb25zdCBpbnRfdHlwZSYgX19jMSwgY29u c3QgaW50X3R5cGUmIF9fYzIpCiAgICAgIHsgcmV0dXJuIF9fYzEgPT0gX19jMjsgfQoKICAgICAg c3RhdGljIGludF90eXBlCiAgICAgIGVvZigpIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludF90eXBl PigoLTEpKTsgfQoKICAgICAgc3RhdGljIGludF90eXBlCiAgICAgIG5vdF9lb2YoY29uc3QgaW50 X3R5cGUmIF9fYykKICAgICAgeyByZXR1cm4gKF9fYyA9PSBlb2YoKSkgPyAwIDogX19jOyB9CiAg fTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3QgY2hhcl90cmFpdHM8d2NoYXJfdD4KICAgIHsK ICAgICAgdHlwZWRlZiB3Y2hhcl90IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB3aW50X3QgaW50 X3R5cGU7CiAgICAgIHR5cGVkZWYgc3RyZWFtb2ZmIG9mZl90eXBlOwogICAgICB0eXBlZGVmIHdz dHJlYW1wb3MgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgbWJzdGF0ZV90IHN0YXRlX3R5cGU7Cgog ICAgICBzdGF0aWMgdm9pZAogICAgICBhc3NpZ24oY2hhcl90eXBlJiBfX2MxLCBjb25zdCBjaGFy X3R5cGUmIF9fYzIpCiAgICAgIHsgX19jMSA9IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAg ICAgIGVxKGNvbnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAg ICB7IHJldHVybiBfX2MxID09IF9fYzI7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGx0KGNv bnN0IGNoYXJfdHlwZSYgX19jMSwgY29uc3QgY2hhcl90eXBlJiBfX2MyKQogICAgICB7IHJldHVy biBfX2MxIDwgX19jMjsgfQoKICAgICAgc3RhdGljIGludAogICAgICBjb21wYXJlKGNvbnN0IGNo YXJfdHlwZSogX19zMSwgY29uc3QgY2hhcl90eXBlKiBfX3MyLCBzaXplX3QgX19uKQogICAgICB7 IHJldHVybiB3bWVtY21wKF9fczEsIF9fczIsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBzaXplX3QK ICAgICAgbGVuZ3RoKGNvbnN0IGNoYXJfdHlwZSogX19zKQogICAgICB7IHJldHVybiB3Y3NsZW4o X19zKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZmluZChjb25zdCBj aGFyX3R5cGUqIF9fcywgc2l6ZV90IF9fbiwgY29uc3QgY2hhcl90eXBlJiBfX2EpCiAgICAgIHsg cmV0dXJuIHdtZW1jaHIoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUq CiAgICAgIG1vdmUoY2hhcl90eXBlKiBfX3MxLCBjb25zdCBjaGFyX3R5cGUqIF9fczIsIGludF90 eXBlIF9fbikKICAgICAgeyByZXR1cm4gd21lbW1vdmUoX19zMSwgX19zMiwgX19uKTsgfQoKICAg ICAgc3RhdGljIGNoYXJfdHlwZSoKICAgICAgY29weShjaGFyX3R5cGUqIF9fczEsIGNvbnN0IGNo YXJfdHlwZSogX19zMiwgc2l6ZV90IF9fbikKICAgICAgeyByZXR1cm4gd21lbWNweShfX3MxLCBf X3MyLCBfX24pOyB9CgogICAgICBzdGF0aWMgY2hhcl90eXBlKgogICAgICBhc3NpZ24oY2hhcl90 eXBlKiBfX3MsIHNpemVfdCBfX24sIGNoYXJfdHlwZSBfX2EpCiAgICAgIHsgcmV0dXJuIHdtZW1z ZXQoX19zLCBfX2EsIF9fbik7IH0KCiAgICAgIHN0YXRpYyBjaGFyX3R5cGUKICAgICAgdG9fY2hh cl90eXBlKGNvbnN0IGludF90eXBlJiBfX2MpIHsgcmV0dXJuIGNoYXJfdHlwZShfX2MpOyB9Cgog ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgdG9faW50X3R5cGUoY29uc3QgY2hhcl90eXBlJiBf X2MpIHsgcmV0dXJuIGludF90eXBlKF9fYyk7IH0KCiAgICAgIHN0YXRpYyBib29sCiAgICAgIGVx X2ludF90eXBlKGNvbnN0IGludF90eXBlJiBfX2MxLCBjb25zdCBpbnRfdHlwZSYgX19jMikKICAg ICAgeyByZXR1cm4gX19jMSA9PSBfX2MyOyB9CgogICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAg ZW9mKCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50X3R5cGU+KCgweGZmZmZmZmZmdSkpOyB9Cgog ICAgICBzdGF0aWMgaW50X3R5cGUKICAgICAgbm90X2VvZihjb25zdCBpbnRfdHlwZSYgX19jKQog ICAgICB7IHJldHVybiBlcV9pbnRfdHlwZShfX2MsIGVvZigpKSA/IDAgOiBfX2M7IH0KICB9OwoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0 IF9DaGFyX3RyYWl0c19tYXRjaAogICAgewogICAgICBfQ2hhclQgX01fYzsKICAgICAgX0NoYXJf dHJhaXRzX21hdGNoKF9DaGFyVCBjb25zdCYgX19jKSA6IF9NX2MoX19jKSB7IH0KCiAgICAgIGJv b2wKICAgICAgb3BlcmF0b3IoKShfQ2hhclQgY29uc3QmIF9fYSkgeyByZXR1cm4gX1RyYWl0czo6 ZXEoX01fYywgX19hKTsgfQogICAgfTsKfQojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9zdHJpbmciIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMSAz CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwoKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMSAzCiMgODQgIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9jYXNzZXJ0IiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvY2Fzc2VydCIgMwoKIyAxICIvdXNyL2luY2x1ZGUvYXNzZXJ0LmgiIDEgMwojIDY1ICIvdXNy L2luY2x1ZGUvYXNzZXJ0LmgiIDMKZXh0ZXJuICJDIiB7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRf ZmFpbCAoY29uc3QgY2hhciAqX19hc3NlcnRpb24sIGNvbnN0IGNoYXIgKl9fZmlsZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwgY29uc3QgY2hhciAqX19m dW5jdGlvbikKICAgICA7CgoKZXh0ZXJuIHZvaWQgX19hc3NlcnRfcGVycm9yX2ZhaWwgKGludCBf X2Vycm51bSwgY29uc3QgY2hhciAqX19maWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdW5zaWduZWQgaW50IF9fbGluZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IGNoYXIgKl9fZnVuY3Rpb24pCiAgICAgOwoKCgoKZXh0ZXJuIHZvaWQgX19hc3Nl cnQgKGNvbnN0IGNoYXIgKl9fYXNzZXJ0aW9uLCBjb25zdCBjaGFyICpfX2ZpbGUsIGludCBfX2xp bmUpCiAgICAgOwoKCn0KIyA0OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY2Fzc2VydCIg MiAzCiMgODUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDIg MwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMSAz CiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMwoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2V4Y2VwdGlvbl9kZWZpbmVzLmgiIDEgMwoj IDM1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Z1bmN0ZXhjZXB0LmgiIDIgMwoK bmFtZXNwYWNlIHN0ZAp7CgogIHZvaWQKICBfX3Rocm93X2JhZF9leGNlcHRpb24odm9pZCk7CgoK ICB2b2lkCiAgX190aHJvd19iYWRfYWxsb2Modm9pZCk7CgoKICB2b2lkCiAgX190aHJvd19iYWRf Y2FzdCh2b2lkKTsKCiAgdm9pZAogIF9fdGhyb3dfYmFkX3R5cGVpZCh2b2lkKTsKCgogIHZvaWQK ICBfX3Rocm93X2xvZ2ljX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93 X2RvbWFpbl9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19pbnZhbGlk X2FyZ3VtZW50KGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2xlbmd0aF9lcnJv cihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAgX190aHJvd19vdXRfb2ZfcmFuZ2UoY29uc3Qg Y2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfcnVudGltZV9lcnJvcihjb25zdCBjaGFyKiBf X3MpOwoKICB2b2lkCiAgX190aHJvd19yYW5nZV9lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2 b2lkCiAgX190aHJvd19vdmVyZmxvd19lcnJvcihjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lkCiAg X190aHJvd191bmRlcmZsb3dfZXJyb3IoY29uc3QgY2hhciogX19zKTsKCgogIHZvaWQKICBfX3Ro cm93X2lvc19mYWlsdXJlKGNvbnN0IGNoYXIqIF9fcyk7Cn0KIyA4NiAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAxIDMKIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICBzdHJ1 Y3QgX1JlZmNvdW50X0Jhc2UKICB7CgogICAgdHlwZWRlZiBzaXplX3QgX1JDX3Q7CgoKICAgIHZv bGF0aWxlIF9SQ190IF9NX3JlZl9jb3VudDsKCgogICAgX19ndGhyZWFkX211dGV4X3QgX01fcmVm X2NvdW50X2xvY2s7CgogICAgX1JlZmNvdW50X0Jhc2UoX1JDX3QgX19uKSA6IF9NX3JlZl9jb3Vu dChfX24pCiAgICB7CgogICAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfX3RtcCA9IHswLCAwLCAwLCBQ VEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAsIDAgfX07CiAgICAgIF9NX3JlZl9jb3VudF9sb2Nr ID0gX190bXA7CgoKCgoKICAgIH0KCiAgICB2b2lkCiAgICBfTV9pbmNyKCkKICAgIHsKICAgICAg X19ndGhyZWFkX211dGV4X2xvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsKICAgICAgKytfTV9yZWZf Y291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3VudF9sb2NrKTsK ICAgIH0KCiAgICBfUkNfdAogICAgX01fZGVjcigpCiAgICB7CiAgICAgIF9fZ3RocmVhZF9tdXRl eF9sb2NrKCZfTV9yZWZfY291bnRfbG9jayk7CiAgICAgIHZvbGF0aWxlIF9SQ190IF9fdG1wID0g LS1fTV9yZWZfY291bnQ7CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX3JlZl9jb3Vu dF9sb2NrKTsKICAgICAgcmV0dXJuIF9fdG1wOwogICAgfQogIH07CiMgMTA5ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICB0ZW1wbGF0ZTxpbnQgX19k dW1teT4KICAgIHN0cnVjdCBfU3dhcF9sb2NrX3N0cnVjdAogICAgeyBzdGF0aWMgX19ndGhyZWFk X211dGV4X3QgX1Nfc3dhcF9sb2NrOyB9OwoKICB0ZW1wbGF0ZTxpbnQgX19kdW1teT4KICAgIF9f Z3RocmVhZF9tdXRleF90CiAgICBfU3dhcF9sb2NrX3N0cnVjdDxfX2R1bW15Pjo6X1Nfc3dhcF9s b2NrID0gezAsIDAsIDAsIFBUSFJFQURfTVVURVhfVElNRURfTlAsIHsgMCwgMCB9fTsKCgoKICBp bmxpbmUgdW5zaWduZWQgbG9uZwogIF9BdG9taWNfc3dhcCh1bnNpZ25lZCBsb25nICogX19wLCB1 bnNpZ25lZCBsb25nIF9fcSkKICB7CiAgICBfX2d0aHJlYWRfbXV0ZXhfbG9jaygmX1N3YXBfbG9j a19zdHJ1Y3Q8MD46Ol9TX3N3YXBfbG9jayk7CiAgICB1bnNpZ25lZCBsb25nIF9fcmVzdWx0ID0g Kl9fcDsKICAgICpfX3AgPSBfX3E7CiAgICBfX2d0aHJlYWRfbXV0ZXhfdW5sb2NrKCZfU3dhcF9s b2NrX3N0cnVjdDwwPjo6X1Nfc3dhcF9sb2NrKTsKICAgIHJldHVybiBfX3Jlc3VsdDsKICB9CiMg MTUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBz dHJ1Y3QgX1NUTF9tdXRleF9sb2NrCiAgewoKCgoKCiAgICBfX2d0aHJlYWRfbXV0ZXhfdCBfTV9s b2NrOwoKICAgIHZvaWQKICAgIF9NX2luaXRpYWxpemUoKQogICAgewojIDE4NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfdGhyZWFkcy5oIiAzCiAgICB9CgogICAgdm9pZAog ICAgX01fYWNxdWlyZV9sb2NrKCkKICAgIHsKCgoKICAgICAgX19ndGhyZWFkX211dGV4X2xvY2so Jl9NX2xvY2spOwogICAgfQoKICAgIHZvaWQKICAgIF9NX3JlbGVhc2VfbG9jaygpCiAgICB7CgoK CiAgICAgIF9fZ3RocmVhZF9tdXRleF91bmxvY2soJl9NX2xvY2spOwogICAgfQogIH07CiMgMjIw ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF90aHJlYWRzLmgiIDMKICBzdHJ1 Y3QgX1NUTF9hdXRvX2xvY2sKICB7CiAgICBfU1RMX211dGV4X2xvY2smIF9NX2xvY2s7CgogICAg X1NUTF9hdXRvX2xvY2soX1NUTF9tdXRleF9sb2NrJiBfX2xvY2spIDogX01fbG9jayhfX2xvY2sp CiAgICB7IF9NX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KCiAgICB+X1NUTF9hdXRvX2xvY2so KSB7IF9NX2xvY2suX01fcmVsZWFzZV9sb2NrKCk7IH0KCiAgcHJpdmF0ZToKICAgIHZvaWQgb3Bl cmF0b3I9KGNvbnN0IF9TVExfYXV0b19sb2NrJik7CiAgICBfU1RMX2F1dG9fbG9jayhjb25zdCBf U1RMX2F1dG9fbG9jayYpOwogIH07Cgp9CiMgODcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX2FsbG9jLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiMgOTggIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgiIDMKICBjbGFzcyBfX25ld19hbGxvYwog IHsKICBwdWJsaWM6CiAgICBzdGF0aWMgdm9pZCoKICAgIGFsbG9jYXRlKHNpemVfdCBfX24pCiAg ICB7IHJldHVybiA6Om9wZXJhdG9yIG5ldyhfX24pOyB9CgogICAgc3RhdGljIHZvaWQKICAgIGRl YWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QpCiAgICB7IDo6b3BlcmF0b3IgZGVsZXRlKF9fcCk7 IH0KICB9OwojIDEyMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2Mu aCIgMwogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgY2xhc3MgX19tYWxsb2NfYWxsb2NfdGVt cGxhdGUKICAgIHsKICAgIHByaXZhdGU6CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fbWFsbG9j KHNpemVfdCk7CiAgICAgIHN0YXRpYyB2b2lkKiBfU19vb21fcmVhbGxvYyh2b2lkKiwgc2l6ZV90 KTsKICAgICAgc3RhdGljIHZvaWQgKCogX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIpKCk7Cgog ICAgcHVibGljOgogICAgICBzdGF0aWMgdm9pZCoKICAgICAgYWxsb2NhdGUoc2l6ZV90IF9fbikK ICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gbWFsbG9jKF9fbik7CiAgICAgICAgaWYg KDAgPT0gX19yZXN1bHQpIF9fcmVzdWx0ID0gX1Nfb29tX21hbGxvYyhfX24pOwogICAgICAgIHJl dHVybiBfX3Jlc3VsdDsKICAgICAgfQoKICAgICAgc3RhdGljIHZvaWQKICAgICAgZGVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCApCiAgICAgIHsgZnJlZShfX3ApOyB9CgogICAgICBzdGF0aWMg dm9pZCoKICAgICAgcmVhbGxvY2F0ZSh2b2lkKiBfX3AsIHNpemVfdCAsIHNpemVfdCBfX25ld19z eikKICAgICAgewogICAgICAgIHZvaWQqIF9fcmVzdWx0ID0gcmVhbGxvYyhfX3AsIF9fbmV3X3N6 KTsKICAgICAgICBpZiAoMCA9PSBfX3Jlc3VsdCkgX19yZXN1bHQgPSBfU19vb21fcmVhbGxvYyhf X3AsIF9fbmV3X3N6KTsKICAgICAgICByZXR1cm4gX19yZXN1bHQ7CiAgICAgIH0KCiAgICAgIHN0 YXRpYyB2b2lkICgqIF9fc2V0X21hbGxvY19oYW5kbGVyKHZvaWQgKCpfX2YpKCkpKSgpCiAgICAg IHsKICAgICAgICB2b2lkICgqIF9fb2xkKSgpID0gX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXI7 CiAgICAgICAgX19tYWxsb2NfYWxsb2Nfb29tX2hhbmRsZXIgPSBfX2Y7CiAgICAgICAgcmV0dXJu KF9fb2xkKTsKICAgICAgfQogICAgfTsKCgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9p ZCAoKiBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+OjpfX21hbGxvY19hbGxvY19vb21f aGFuZGxlcikoKSA9IDA7CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAgdm9pZCoKICAgIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9tYWxsb2Moc2l6ZV90IF9fbikK ICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICB2b2lkKiBf X3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAgewogICAgICAgICAgX19teV9tYWxsb2Nf aGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5kbGVyOwogICAgICAgICAgaWYgKDAgPT0g X19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAgc3RkOjpfX3Rocm93X2JhZF9hbGxvYygp OwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVyKSgpOwogICAgICAgICAgX19yZXN1bHQg PSBtYWxsb2MoX19uKTsKICAgICAgICAgIGlmIChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJu KF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9CgogIHRlbXBsYXRlIDxpbnQgX19pbnN0PgogICAg dm9pZCoKICAgIF9fbWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD46Ol9TX29vbV9yZWFsbG9j KHZvaWQqIF9fcCwgc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9pZCAoKiBfX215X21hbGxvY19o YW5kbGVyKSgpOwogICAgICB2b2lkKiBfX3Jlc3VsdDsKCiAgICAgIGZvciAoOzspCiAgICAgICAg ewogICAgICAgICAgX19teV9tYWxsb2NfaGFuZGxlciA9IF9fbWFsbG9jX2FsbG9jX29vbV9oYW5k bGVyOwogICAgICAgICAgaWYgKDAgPT0gX19teV9tYWxsb2NfaGFuZGxlcikKICAgICAgICAgICAg c3RkOjpfX3Rocm93X2JhZF9hbGxvYygpOwogICAgICAgICAgKCpfX215X21hbGxvY19oYW5kbGVy KSgpOwogICAgICAgICAgX19yZXN1bHQgPSByZWFsbG9jKF9fcCwgX19uKTsKICAgICAgICAgIGlm IChfX3Jlc3VsdCkKICAgICAgICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgICAgICB9CiAgICB9 CgoKCgoKCiAgdHlwZWRlZiBfX25ld19hbGxvYyBfX21lbV9pbnRlcmZhY2U7CiMgMjE5ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAzCiAgdGVtcGxhdGU8Y2xh c3MgX1RwLCBjbGFzcyBfQWxsb2M+CiAgY2xhc3MgX19zaW1wbGVfYWxsb2MKICB7CiAgcHVibGlj OgogICAgc3RhdGljIF9UcCogYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsgcmV0dXJuIDAgPT0g X19uID8gMCA6IChfVHAqKSBfQWxsb2M6OmFsbG9jYXRlKF9fbiAqIHNpemVvZiAoX1RwKSk7IH0K CiAgICBzdGF0aWMgX1RwKiBhbGxvY2F0ZSgpCiAgICB7IHJldHVybiAoX1RwKikgX0FsbG9jOjph bGxvY2F0ZShzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShfVHAq IF9fcCwgc2l6ZV90IF9fbikKICAgIHsgaWYgKDAgIT0gX19uKSBfQWxsb2M6OmRlYWxsb2NhdGUo X19wLCBfX24gKiBzaXplb2YgKF9UcCkpOyB9CgogICAgc3RhdGljIHZvaWQgZGVhbGxvY2F0ZShf VHAqIF9fcCkKICAgIHsgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcCwgc2l6ZW9mIChfVHApKTsgfQog IH07CiMgMjUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9hbGxvYy5oIiAz CiAgdGVtcGxhdGUgPGNsYXNzIF9BbGxvYz4KICBjbGFzcyBfX2RlYnVnX2FsbG9jCiAgewogIHBy aXZhdGU6CiAgICBlbnVtIHtfU19leHRyYSA9IDh9OwoKCiAgcHVibGljOgoKICAgIHN0YXRpYyB2 b2lkKiBhbGxvY2F0ZShzaXplX3QgX19uKQogICAgewogICAgICBjaGFyKiBfX3Jlc3VsdCA9IChj aGFyKilfQWxsb2M6OmFsbG9jYXRlKF9fbiArIChpbnQpIF9TX2V4dHJhKTsKICAgICAgKihzaXpl X3QqKV9fcmVzdWx0ID0gX19uOwogICAgICByZXR1cm4gX19yZXN1bHQgKyAoaW50KSBfU19leHRy YTsKICAgIH0KCiAgICBzdGF0aWMgdm9pZCBkZWFsbG9jYXRlKHZvaWQqIF9fcCwgc2l6ZV90IF9f bikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3AgPSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0 cmE7CiAgICAgICgodm9pZCkgKCgqKHNpemVfdCopX19yZWFsX3AgPT0gX19uKSA/IDAgOiAoX19h c3NlcnRfZmFpbCAoIiooc2l6ZV90KilfX3JlYWxfcCA9PSBfX24iLCAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIsIDI3MCwgKChjb25zdCBjaGFyICopIDApKSwg MCkpKTsKICAgICAgX0FsbG9jOjpkZWFsbG9jYXRlKF9fcmVhbF9wLCBfX24gKyAoaW50KSBfU19l eHRyYSk7CiAgICB9CgogICAgc3RhdGljIHZvaWQqIHJlYWxsb2NhdGUodm9pZCogX19wLCBzaXpl X3QgX19vbGRfc3osIHNpemVfdCBfX25ld19zeikKICAgIHsKICAgICAgY2hhciogX19yZWFsX3Ag PSAoY2hhciopX19wIC0gKGludCkgX1NfZXh0cmE7CiAgICAgICgodm9pZCkgKCgqKHNpemVfdCop X19yZWFsX3AgPT0gX19vbGRfc3opID8gMCA6IChfX2Fzc2VydF9mYWlsICgiKihzaXplX3QqKV9f cmVhbF9wID09IF9fb2xkX3N6IiwgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X2FsbG9jLmgiLCAyNzcsICgoY29uc3QgY2hhciAqKSAwKSksIDApKSk7CiAgICAgIGNoYXIqIF9f cmVzdWx0ID0gKGNoYXIqKQogICAgICAgIF9BbGxvYzo6cmVhbGxvY2F0ZShfX3JlYWxfcCwgX19v bGRfc3ogKyAoaW50KSBfU19leHRyYSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fbmV3X3N6ICsgKGludCkgX1NfZXh0cmEpOwogICAgICAqKHNpemVfdCopX19yZXN1bHQg PSBfX25ld19zejsKICAgICAgcmV0dXJuIF9fcmVzdWx0ICsgKGludCkgX1NfZXh0cmE7CiAgICB9 CiAgfTsKIyAzMjQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9jLmgi IDMKdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2xhc3MgX19kZWZhdWx0 X2FsbG9jX3RlbXBsYXRlCiAgewogIHByaXZhdGU6CiAgICBlbnVtIHtfQUxJR04gPSA4fTsKICAg IGVudW0ge19NQVhfQllURVMgPSAxMjh9OwogICAgZW51bSB7X05GUkVFTElTVFMgPSBfTUFYX0JZ VEVTIC8gX0FMSUdOfTsKCiAgICB1bmlvbiBfT2JqCiAgICB7CiAgICAgIHVuaW9uIF9PYmoqIF9N X2ZyZWVfbGlzdF9saW5rOwogICAgICBjaGFyIF9NX2NsaWVudF9kYXRhWzFdOwogICAgfTsKCiAg ICBzdGF0aWMgX09iaiogdm9sYXRpbGUgX1NfZnJlZV9saXN0W19ORlJFRUxJU1RTXTsKCgogICAg c3RhdGljIGNoYXIqIF9TX3N0YXJ0X2ZyZWU7CiAgICBzdGF0aWMgY2hhciogX1NfZW5kX2ZyZWU7 CiAgICBzdGF0aWMgc2l6ZV90IF9TX2hlYXBfc2l6ZTsKCiAgICBzdGF0aWMgX1NUTF9tdXRleF9s b2NrIF9TX25vZGVfYWxsb2NhdG9yX2xvY2s7CgogICAgc3RhdGljIHNpemVfdAogICAgX1Nfcm91 bmRfdXAoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChfX2J5dGVzKSArIChzaXplX3Qp IF9BTElHTi0xKSAmIH4oKHNpemVfdCkgX0FMSUdOIC0gMSkpOyB9CgogICAgc3RhdGljIHNpemVf dAogICAgX1NfZnJlZWxpc3RfaW5kZXgoc2l6ZV90IF9fYnl0ZXMpCiAgICB7IHJldHVybiAoKChf X2J5dGVzKSArIChzaXplX3QpX0FMSUdOLTEpLyhzaXplX3QpX0FMSUdOIC0gMSk7IH0KCgoKICAg IHN0YXRpYyB2b2lkKgogICAgX1NfcmVmaWxsKHNpemVfdCBfX24pOwoKCgogICAgc3RhdGljIGNo YXIqCiAgICBfU19jaHVua19hbGxvYyhzaXplX3QgX19zaXplLCBpbnQmIF9fbm9ianMpOwoKCgog ICAgY2xhc3MgX0xvY2sKICAgIHsKICAgIHB1YmxpYzoKICAgICAgX0xvY2soKSB7IGlmIChfX3Ro cmVhZHMpIF9TX25vZGVfYWxsb2NhdG9yX2xvY2suX01fYWNxdWlyZV9sb2NrKCk7IH0KICAgICAg fl9Mb2NrKCkgeyBpZiAoX190aHJlYWRzKSBfU19ub2RlX2FsbG9jYXRvcl9sb2NrLl9NX3JlbGVh c2VfbG9jaygpOyB9CiAgICB9IDsKICAgIGZyaWVuZCBjbGFzcyBfTG9jazsKCiAgcHVibGljOgoK ICAgIHN0YXRpYyB2b2lkKgogICAgYWxsb2NhdGUoc2l6ZV90IF9fbikKICAgIHsKICAgICAgdm9p ZCogX19yZXQgPSAwOwoKICAgICAgaWYgKF9fbiA+IChzaXplX3QpIF9NQVhfQllURVMpCiAgICAg ICAgX19yZXQgPSBfX21lbV9pbnRlcmZhY2U6OmFsbG9jYXRlKF9fbik7CiAgICAgIGVsc2UKICAg ICAgICB7CiAgICAgICAgICBfT2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3QgPSBfU19mcmVl X2xpc3QKICAgICAgICAgICAgKyBfU19mcmVlbGlzdF9pbmRleChfX24pOwoKCgogICAgICAgICAg X0xvY2sgX19sb2NrX2luc3RhbmNlOwogICAgICAgICAgX09iaiogX19yZXN0cmljdF9fIF9fcmVz dWx0ID0gKl9fbXlfZnJlZV9saXN0OwogICAgICAgICAgaWYgKF9fcmVzdWx0ID09IDApCiAgICAg ICAgICAgIF9fcmV0ID0gX1NfcmVmaWxsKF9TX3JvdW5kX3VwKF9fbikpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19yZXN1bHQg LT4gX01fZnJlZV9saXN0X2xpbms7CiAgICAgICAgICAgICAgX19yZXQgPSBfX3Jlc3VsdDsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fcmV0OwogICAgfTsKCgogICAgc3Rh dGljIHZvaWQKICAgIGRlYWxsb2NhdGUodm9pZCogX19wLCBzaXplX3QgX19uKQogICAgewogICAg ICBpZiAoX19uID4gKHNpemVfdCkgX01BWF9CWVRFUykKICAgICAgICBfX21lbV9pbnRlcmZhY2U6 OmRlYWxsb2NhdGUoX19wLCBfX24pOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX09i aiogdm9sYXRpbGUqIF9fbXlfZnJlZV9saXN0CiAgICAgICAgICAgID0gX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19uKTsKICAgICAgICAgIF9PYmoqIF9fcSA9IChfT2JqKilfX3A7 CgoKCiAgICAgICAgICBfTG9jayBfX2xvY2tfaW5zdGFuY2U7CiAgICAgICAgICBfX3EgLT4gX01f ZnJlZV9saXN0X2xpbmsgPSAqX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAqX19teV9mcmVlX2xp c3QgPSBfX3E7CiAgICAgICAgfQogICAgfQoKICAgIHN0YXRpYyB2b2lkKgogICAgcmVhbGxvY2F0 ZSh2b2lkKiBfX3AsIHNpemVfdCBfX29sZF9zeiwgc2l6ZV90IF9fbmV3X3N6KTsKICB9OwoKCiAg dGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICBpbmxpbmUgYm9vbAogICAg b3BlcmF0b3I9PShjb25zdCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+JiwKICAgICAgICAgICAgICAgY29uc3QgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiYpCiAgICB7IHJldHVybiB0cnVlOyB9CgogIHRlbXBsYXRlPGJvb2wgX190 aHJlYWRzLCBpbnQgX19pbnN0PgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3Qg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0PiYsCiAgICAgICAgICAg ICAgIGNvbnN0IF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD4mKQog ICAgeyByZXR1cm4gZmFsc2U7IH0KCgoKCgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQg X19pbnN0PgogICAgY2hhcioKICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMs IF9faW5zdD46Ol9TX2NodW5rX2FsbG9jKHNpemVfdCBfX3NpemUsCiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQmIF9fbm9i anMpCiAgICB7CiAgICAgIGNoYXIqIF9fcmVzdWx0OwogICAgICBzaXplX3QgX190b3RhbF9ieXRl cyA9IF9fc2l6ZSAqIF9fbm9ianM7CiAgICAgIHNpemVfdCBfX2J5dGVzX2xlZnQgPSBfU19lbmRf ZnJlZSAtIF9TX3N0YXJ0X2ZyZWU7CgogICAgICBpZiAoX19ieXRlc19sZWZ0ID49IF9fdG90YWxf Ynl0ZXMpCiAgICAgIHsKICAgICAgICBfX3Jlc3VsdCA9IF9TX3N0YXJ0X2ZyZWU7CiAgICAgICAg X1Nfc3RhcnRfZnJlZSArPSBfX3RvdGFsX2J5dGVzOwogICAgICAgIHJldHVybihfX3Jlc3VsdCk7 CiAgICAgIH0KICAgICAgZWxzZSBpZiAoX19ieXRlc19sZWZ0ID49IF9fc2l6ZSkKICAgICAgICB7 CiAgICAgICAgICBfX25vYmpzID0gKGludCkoX19ieXRlc19sZWZ0L19fc2l6ZSk7CiAgICAgICAg ICBfX3RvdGFsX2J5dGVzID0gX19zaXplICogX19ub2JqczsKICAgICAgICAgIF9fcmVzdWx0ID0g X1Nfc3RhcnRfZnJlZTsKICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUgKz0gX190b3RhbF9ieXRlczsK ICAgICAgICAgIHJldHVybihfX3Jlc3VsdCk7CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAg ewogICAgICAgICAgc2l6ZV90IF9fYnl0ZXNfdG9fZ2V0ID0KICAgICAgICAgICAgMiAqIF9fdG90 YWxfYnl0ZXMgKyBfU19yb3VuZF91cChfU19oZWFwX3NpemUgPj4gNCk7CgogICAgICAgICAgaWYg KF9fYnl0ZXNfbGVmdCA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3QgPQogICAgICAgICAgICAgICAgX1NfZnJlZV9saXN0ICsgX1Nf ZnJlZWxpc3RfaW5kZXgoX19ieXRlc19sZWZ0KTsKCiAgICAgICAgICAgICAgKChfT2JqKilfU19z dGFydF9mcmVlKSAtPiBfTV9mcmVlX2xpc3RfbGluayA9ICpfX215X2ZyZWVfbGlzdDsKICAgICAg ICAgICAgICAqX19teV9mcmVlX2xpc3QgPSAoX09iaiopX1Nfc3RhcnRfZnJlZTsKICAgICAgICAg ICAgfQogICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFyKikgX19tZW1faW50ZXJmYWNlOjph bGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CiAgICAgICAgICBpZiAoMCA9PSBfU19zdGFydF9mcmVl KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9faTsKICAgICAgICAgICAgICBf T2JqKiB2b2xhdGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgICAgICAgICAgX09iaiogX19wOwoK CgogICAgICAgICAgICAgIF9faSA9IF9fc2l6ZTsKICAgICAgICAgICAgICBmb3IgKDsgX19pIDw9 IChzaXplX3QpIF9NQVhfQllURVM7IF9faSArPSAoc2l6ZV90KSBfQUxJR04pCiAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgIF9fbXlfZnJlZV9saXN0ID0gX1NfZnJlZV9saXN0ICsg X1NfZnJlZWxpc3RfaW5kZXgoX19pKTsKICAgICAgICAgICAgICAgICAgX19wID0gKl9fbXlfZnJl ZV9saXN0OwogICAgICAgICAgICAgICAgICBpZiAoMCAhPSBfX3ApCiAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19wIC0+IF9NX2Zy ZWVfbGlzdF9saW5rOwogICAgICAgICAgICAgICAgICAgICAgX1Nfc3RhcnRfZnJlZSA9IChjaGFy KilfX3A7CiAgICAgICAgICAgICAgICAgICAgICBfU19lbmRfZnJlZSA9IF9TX3N0YXJ0X2ZyZWUg KyBfX2k7CiAgICAgICAgICAgICAgICAgICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXpl LCBfX25vYmpzKSk7CgoKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAg ICAgICAgICAgICAgX1NfZW5kX2ZyZWUgPSAwOwogICAgICAgICAgICAgIF9TX3N0YXJ0X2ZyZWUg PSAoY2hhciopX19tZW1faW50ZXJmYWNlOjphbGxvY2F0ZShfX2J5dGVzX3RvX2dldCk7CgoKICAg ICAgICAgICAgfQogICAgICAgICAgX1NfaGVhcF9zaXplICs9IF9fYnl0ZXNfdG9fZ2V0OwogICAg ICAgICAgX1NfZW5kX2ZyZWUgPSBfU19zdGFydF9mcmVlICsgX19ieXRlc190b19nZXQ7CiAgICAg ICAgICByZXR1cm4oX1NfY2h1bmtfYWxsb2MoX19zaXplLCBfX25vYmpzKSk7CiAgICAgICAgfQog ICAgfQoKCgoKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgICB2b2lk KgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfcmVm aWxsKHNpemVfdCBfX24pCiAgICB7CiAgICAgIGludCBfX25vYmpzID0gMjA7CiAgICAgIGNoYXIq IF9fY2h1bmsgPSBfU19jaHVua19hbGxvYyhfX24sIF9fbm9ianMpOwogICAgICBfT2JqKiB2b2xh dGlsZSogX19teV9mcmVlX2xpc3Q7CiAgICAgIF9PYmoqIF9fcmVzdWx0OwogICAgICBfT2JqKiBf X2N1cnJlbnRfb2JqOwogICAgICBfT2JqKiBfX25leHRfb2JqOwogICAgICBpbnQgX19pOwoKICAg ICAgaWYgKDEgPT0gX19ub2JqcykgcmV0dXJuKF9fY2h1bmspOwogICAgICBfX215X2ZyZWVfbGlz dCA9IF9TX2ZyZWVfbGlzdCArIF9TX2ZyZWVsaXN0X2luZGV4KF9fbik7CgoKICAgICAgX19yZXN1 bHQgPSAoX09iaiopX19jaHVuazsKICAgICAgKl9fbXlfZnJlZV9saXN0ID0gX19uZXh0X29iaiA9 IChfT2JqKikoX19jaHVuayArIF9fbik7CiAgICAgIGZvciAoX19pID0gMTsgOyBfX2krKykgewog ICAgICAgIF9fY3VycmVudF9vYmogPSBfX25leHRfb2JqOwogICAgICAgIF9fbmV4dF9vYmogPSAo X09iaiopKChjaGFyKilfX25leHRfb2JqICsgX19uKTsKICAgICAgICBpZiAoX19ub2JqcyAtIDEg PT0gX19pKSB7CiAgICAgICAgICBfX2N1cnJlbnRfb2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0g MDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBfX2N1cnJlbnRf b2JqIC0+IF9NX2ZyZWVfbGlzdF9saW5rID0gX19uZXh0X29iajsKICAgICAgICB9CiAgICAgIH0K ICAgICAgcmV0dXJuKF9fcmVzdWx0KTsKICAgIH0KCgogIHRlbXBsYXRlPGJvb2wgdGhyZWFkcywg aW50IGluc3Q+CiAgICB2b2lkKgogICAgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPHRocmVhZHMs IGluc3Q+OjpyZWFsbG9jYXRlKHZvaWQqIF9fcCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzaXplX3QgX19vbGRfc3osCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZV90IF9fbmV3 X3N6KQogICAgewogICAgICB2b2lkKiBfX3Jlc3VsdDsKICAgICAgc2l6ZV90IF9fY29weV9zejsK CiAgICAgIGlmIChfX29sZF9zeiA+IChzaXplX3QpIF9NQVhfQllURVMgJiYgX19uZXdfc3ogPiAo c2l6ZV90KSBfTUFYX0JZVEVTKSB7CiAgICAgICAgcmV0dXJuKHJlYWxsb2MoX19wLCBfX25ld19z eikpOwogICAgICB9CiAgICAgIGlmIChfU19yb3VuZF91cChfX29sZF9zeikgPT0gX1Nfcm91bmRf dXAoX19uZXdfc3opKSByZXR1cm4oX19wKTsKICAgICAgX19yZXN1bHQgPSBhbGxvY2F0ZShfX25l d19zeik7CiAgICAgIF9fY29weV9zeiA9IF9fbmV3X3N6ID4gX19vbGRfc3o/IF9fb2xkX3N6IDog X19uZXdfc3o7CiAgICAgIG1lbWNweShfX3Jlc3VsdCwgX19wLCBfX2NvcHlfc3opOwogICAgICBk ZWFsbG9jYXRlKF9fcCwgX19vbGRfc3opOwogICAgICByZXR1cm4oX19yZXN1bHQpOwogICAgfQoK ICB0ZW1wbGF0ZTxib29sIF9fdGhyZWFkcywgaW50IF9faW5zdD4KICBfU1RMX211dGV4X2xvY2sK ICBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2luc3Q+OjpfU19ub2RlX2Fs bG9jYXRvcl9sb2NrCiAgPSB7IHswLCAwLCAwLCBQVEhSRUFEX01VVEVYX1RJTUVEX05QLCB7IDAs IDAgfX0gfTsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgY2hhciog X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1Nfc3RhcnRfZnJl ZSA9IDA7CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIGNoYXIqIF9f ZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2VuZF9mcmVlID0g MDsKCiAgdGVtcGxhdGU8Ym9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+CiAgc2l6ZV90IF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9TX2hlYXBfc2l6ZSA9IDA7 CgogIHRlbXBsYXRlPGJvb2wgX190aHJlYWRzLCBpbnQgX19pbnN0PgogIHR5cGVuYW1lIF9fZGVm YXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RocmVhZHMsIF9faW5zdD46Ol9PYmoqIHZvbGF0aWxlCiAg X19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhyZWFkcywgX19pbnN0Pjo6X1NfZnJlZV9saXN0 W19ORlJFRUxJU1RTXTsKCiAgdHlwZWRlZiBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8dHJ1ZSwg MD4gX19hbGxvYzsKICB0eXBlZGVmIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxmYWxzZSwgMD4g X19zaW5nbGVfY2xpZW50X2FsbG9jOwojIDYxMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfYWxsb2MuaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBhbGxvY2F0b3IK ewogIHR5cGVkZWYgX19hbGxvYyBfQWxsb2M7CnB1YmxpYzoKICB0eXBlZGVmIHNpemVfdCBzaXpl X3R5cGU7CiAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwogIHR5cGVkZWYgX1Rw KiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3QgX1RwKiBjb25zdF9wb2ludGVyOwogIHR5cGVkZWYg X1RwJiByZWZlcmVuY2U7CiAgdHlwZWRlZiBjb25zdCBfVHAmIGNvbnN0X3JlZmVyZW5jZTsKICB0 eXBlZGVmIF9UcCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9OwoKICBhbGxvY2F0 b3IoKSB0aHJvdygpIHt9CiAgYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvciYpIHRocm93KCkge30K ICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gYWxsb2NhdG9yKGNvbnN0IGFsbG9jYXRvcjxfVHAxPiYp IHRocm93KCkge30KICB+YWxsb2NhdG9yKCkgdGhyb3coKSB7fQoKICBwb2ludGVyIGFkZHJlc3Mo cmVmZXJlbmNlIF9feCkgY29uc3QgeyByZXR1cm4gJl9feDsgfQogIGNvbnN0X3BvaW50ZXIgYWRk cmVzcyhjb25zdF9yZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194OyB9CgoKCiAgX1Rw KiBhbGxvY2F0ZShzaXplX3R5cGUgX19uLCBjb25zdCB2b2lkKiA9IDApIHsKICAgIHJldHVybiBf X24gIT0gMCA/IHN0YXRpY19jYXN0PF9UcCo+KF9BbGxvYzo6YWxsb2NhdGUoX19uICogc2l6ZW9m KF9UcCkpKQogICAgICAgICAgICAgICAgICAgIDogMDsKICB9CgoKICB2b2lkIGRlYWxsb2NhdGUo cG9pbnRlciBfX3AsIHNpemVfdHlwZSBfX24pCiAgICB7IF9BbGxvYzo6ZGVhbGxvY2F0ZShfX3As IF9fbiAqIHNpemVvZihfVHApKTsgfQoKICBzaXplX3R5cGUgbWF4X3NpemUoKSBjb25zdCB0aHJv dygpCiAgICB7IHJldHVybiBzaXplX3QoLTEpIC8gc2l6ZW9mKF9UcCk7IH0KCiAgdm9pZCBjb25z dHJ1Y3QocG9pbnRlciBfX3AsIGNvbnN0IF9UcCYgX192YWwpIHsgbmV3KF9fcCkgX1RwKF9fdmFs KTsgfQogIHZvaWQgZGVzdHJveShwb2ludGVyIF9fcCkgeyBfX3AtPn5fVHAoKTsgfQp9OwoKdGVt cGxhdGU8PgpjbGFzcyBhbGxvY2F0b3I8dm9pZD4gewpwdWJsaWM6CiAgdHlwZWRlZiBzaXplX3Qg c2l6ZV90eXBlOwogIHR5cGVkZWYgcHRyZGlmZl90IGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IHZvaWQqIHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCB2b2lkKiBjb25zdF9wb2ludGVyOwogIHR5 cGVkZWYgdm9pZCB2YWx1ZV90eXBlOwoKICB0ZW1wbGF0ZSA8Y2xhc3MgX1RwMT4gc3RydWN0IHJl YmluZCB7CiAgICB0eXBlZGVmIGFsbG9jYXRvcjxfVHAxPiBvdGhlcjsKICB9Owp9OwoKCnRlbXBs YXRlIDxjbGFzcyBfVDEsIGNsYXNzIF9UMj4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBh bGxvY2F0b3I8X1QxPiYsIGNvbnN0IGFsbG9jYXRvcjxfVDI+JikKewogIHJldHVybiB0cnVlOwp9 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1QxLCBjbGFzcyBfVDI+CmlubGluZSBib29sIG9wZXJhdG9yIT0o Y29uc3QgYWxsb2NhdG9yPF9UMT4mLCBjb25zdCBhbGxvY2F0b3I8X1QyPiYpCnsKICByZXR1cm4g ZmFsc2U7Cn0KIyA2OTUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX2FsbG9j LmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgpzdHJ1Y3QgX19hbGxvY2F0 b3IKewogIF9BbGxvYyBfX3VuZGVybHlpbmdfYWxsb2M7CgogIHR5cGVkZWYgc2l6ZV90IHNpemVf dHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiBfVHAq IHBvaW50ZXI7CiAgdHlwZWRlZiBjb25zdCBfVHAqIGNvbnN0X3BvaW50ZXI7CiAgdHlwZWRlZiBf VHAmIHJlZmVyZW5jZTsKICB0eXBlZGVmIGNvbnN0IF9UcCYgY29uc3RfcmVmZXJlbmNlOwogIHR5 cGVkZWYgX1RwIHZhbHVlX3R5cGU7CgogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPiBzdHJ1Y3QgcmVi aW5kIHsKICAgIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwMSwgX0FsbG9jPiBvdGhlcjsKICB9OwoK ICBfX2FsbG9jYXRvcigpIHRocm93KCkge30KICBfX2FsbG9jYXRvcihjb25zdCBfX2FsbG9jYXRv ciYgX19hKSB0aHJvdygpCiAgICA6IF9fdW5kZXJseWluZ19hbGxvYyhfX2EuX191bmRlcmx5aW5n X2FsbG9jKSB7fQogIHRlbXBsYXRlIDxjbGFzcyBfVHAxPgogIF9fYWxsb2NhdG9yKGNvbnN0IF9f YWxsb2NhdG9yPF9UcDEsIF9BbGxvYz4mIF9fYSkgdGhyb3coKQogICAgOiBfX3VuZGVybHlpbmdf YWxsb2MoX19hLl9fdW5kZXJseWluZ19hbGxvYykge30KICB+X19hbGxvY2F0b3IoKSB0aHJvdygp IHt9CgogIHBvaW50ZXIgYWRkcmVzcyhyZWZlcmVuY2UgX194KSBjb25zdCB7IHJldHVybiAmX194 OyB9CiAgY29uc3RfcG9pbnRlciBhZGRyZXNzKGNvbnN0X3JlZmVyZW5jZSBfX3gpIGNvbnN0IHsg cmV0dXJuICZfX3g7IH0KCgogIF9UcCogYWxsb2NhdGUoc2l6ZV90eXBlIF9fbiwgY29uc3Qgdm9p ZCogPSAwKSB7CiAgICByZXR1cm4gX19uICE9IDAKICAgICAgICA/IHN0YXRpY19jYXN0PF9UcCo+ KF9fdW5kZXJseWluZ19hbGxvYy5hbGxvY2F0ZShfX24gKiBzaXplb2YoX1RwKSkpCiAgICAgICAg OiAwOwogIH0KCgogIHZvaWQgZGVhbGxvY2F0ZShwb2ludGVyIF9fcCwgc2l6ZV90eXBlIF9fbikK ICAgIHsgX191bmRlcmx5aW5nX2FsbG9jLmRlYWxsb2NhdGUoX19wLCBfX24gKiBzaXplb2YoX1Rw KSk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4g c2l6ZV90KC0xKSAvIHNpemVvZihfVHApOyB9CgogIHZvaWQgY29uc3RydWN0KHBvaW50ZXIgX19w LCBjb25zdCBfVHAmIF9fdmFsKSB7IG5ldyhfX3ApIF9UcChfX3ZhbCk7IH0KICB2b2lkIGRlc3Ry b3kocG9pbnRlciBfX3ApIHsgX19wLT5+X1RwKCk7IH0KfTsKCnRlbXBsYXRlIDxjbGFzcyBfQWxs b2M+CmNsYXNzIF9fYWxsb2NhdG9yPHZvaWQsIF9BbGxvYz4gewogIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CiAgdHlwZWRlZiB2 b2lkKiBwb2ludGVyOwogIHR5cGVkZWYgY29uc3Qgdm9pZCogY29uc3RfcG9pbnRlcjsKICB0eXBl ZGVmIHZvaWQgdmFsdWVfdHlwZTsKCiAgdGVtcGxhdGUgPGNsYXNzIF9UcDE+IHN0cnVjdCByZWJp bmQgewogICAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAxLCBfQWxsb2M+IG90aGVyOwogIH07Cn07 Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9y PT0oY29uc3QgX19hbGxvY2F0b3I8X1RwLCBfQWxsb2M+JiBfX2ExLAogICAgICAgICAgICAgICAg ICAgICAgIGNvbnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMikKewogIHJldHVybiBf X2ExLl9fdW5kZXJseWluZ19hbGxvYyA9PSBfX2EyLl9fdW5kZXJseWluZ19hbGxvYzsKfQoKdGVt cGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNv bnN0IF9fYWxsb2NhdG9yPF9UcCwgX0FsbG9jPiYgX19hMSwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBfX2FsbG9jYXRvcjxfVHAsIF9BbGxvYz4mIF9fYTIpCnsKICByZXR1cm4gX19hMS5f X3VuZGVybHlpbmdfYWxsb2MgIT0gX19hMi5fX3VuZGVybHlpbmdfYWxsb2M7Cn0KCgoKCgoKCnRl bXBsYXRlIDxpbnQgaW5zdD4KaW5saW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBfX21hbGxvY19h bGxvY190ZW1wbGF0ZTxpbnN0PiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8aW5zdD4mKQp7CiAgcmV0dXJuIHRydWU7Cn0KCnRlbXBsYXRlIDxp bnQgX19pbnN0PgppbmxpbmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IF9fbWFsbG9jX2FsbG9jX3Rl bXBsYXRlPF9faW5zdD4mLAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9fbWFsbG9jX2Fs bG9jX3RlbXBsYXRlPF9faW5zdD4mKQp7CiAgcmV0dXJuIGZhbHNlOwp9Cgp0ZW1wbGF0ZSA8Y2xh c3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IF9fZGVidWdfYWxsb2M8X0Fs bG9jPiYsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ JikgewogIHJldHVybiB0cnVlOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvciE9KGNvbnN0IF9fZGVidWdfYWxsb2M8X0FsbG9jPiYsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgX19kZWJ1Z19hbGxvYzxfQWxsb2M+JikgewogIHJldHVybiBmYWxzZTsK fQojIDg0MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfYWxsb2MuaCIgMwp0 ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpzdHJ1Y3QgX0FsbG9jX3RyYWl0 cwp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gZmFsc2U7CiAgdHlwZWRl ZiB0eXBlbmFtZSBfQWxsb2NhdG9yOjp0ZW1wbGF0ZSByZWJpbmQ8X1RwPjo6b3RoZXIgYWxsb2Nh dG9yX3R5cGU7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfQWxsb2NhdG9yPgpjb25z dCBib29sIF9BbGxvY190cmFpdHM8X1RwLCBfQWxsb2NhdG9yPjo6X1NfaW5zdGFuY2VsZXNzOwoK CnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9UcDE+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9U cCwgYWxsb2NhdG9yPF9UcDE+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVz cyA9IHRydWU7CiAgdHlwZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fYWxsb2M+IF9BbGxvY190 eXBlOwogIHR5cGVkZWYgYWxsb2NhdG9yPF9UcD4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKCgp0ZW1w bGF0ZSA8Y2xhc3MgX1RwLCBpbnQgX19pbnN0PgpzdHJ1Y3QgX0FsbG9jX3RyYWl0czxfVHAsIF9f bWFsbG9jX2FsbG9jX3RlbXBsYXRlPF9faW5zdD4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1Nf aW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19tYWxs b2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxv Y2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5 cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgYm9vbCBfX3RocmVhZHMsIGludCBfX2luc3Q+ CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19kZWZhdWx0X2FsbG9jX3RlbXBsYXRlPF9fdGhy ZWFkcywgX19pbnN0PiA+CnsKICBzdGF0aWMgY29uc3QgYm9vbCBfU19pbnN0YW5jZWxlc3MgPSB0 cnVlOwogIHR5cGVkZWYgX19zaW1wbGVfYWxsb2M8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8X190aHJlYWRzLCBfX2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYg X19hbGxvY2F0b3I8X1RwLCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHJlYWRzLCBfX2lu c3Q+ID4KICAgICAgICAgIGFsbG9jYXRvcl90eXBlOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAs IGNsYXNzIF9BbGxvYz4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLCBfX2RlYnVnX2FsbG9jPF9B bGxvYz4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0 eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxsb2M+ID4gX0FsbG9j X3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxsb2M8X0FsbG9jPiA+ IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX1RwMSwg aW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1RwLAogICAgICAgICAgICAgICAgICAg ICBfX2FsbG9jYXRvcjxfVHAxLCBfX21hbGxvY19hbGxvY190ZW1wbGF0ZTxfX2luc3Q+ID4gPgp7 CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNzID0gdHJ1ZTsKICB0eXBlZGVmIF9f c2ltcGxlX2FsbG9jPF9UcCwgX19tYWxsb2NfYWxsb2NfdGVtcGxhdGU8X19pbnN0PiA+IF9BbGxv Y190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1RwLCBfX21hbGxvY19hbGxvY190ZW1wbGF0 ZTxfX2luc3Q+ID4gYWxsb2NhdG9yX3R5cGU7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xh c3MgX1RwMSwgYm9vbCBfX3RociwgaW50IF9faW5zdD4Kc3RydWN0IF9BbGxvY190cmFpdHM8X1Rw LAogICAgICAgICAgICAgICAgICAgICAgX19hbGxvY2F0b3I8X1RwMSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3RociwgX19pbnN0 PiA+ID4KewogIHN0YXRpYyBjb25zdCBib29sIF9TX2luc3RhbmNlbGVzcyA9IHRydWU7CiAgdHlw ZWRlZiBfX3NpbXBsZV9hbGxvYzxfVHAsIF9fZGVmYXVsdF9hbGxvY190ZW1wbGF0ZTxfX3Rocixf X2luc3Q+ID4KICAgICAgICAgIF9BbGxvY190eXBlOwogIHR5cGVkZWYgX19hbGxvY2F0b3I8X1Rw LCBfX2RlZmF1bHRfYWxsb2NfdGVtcGxhdGU8X190aHIsX19pbnN0PiA+CiAgICAgICAgICBhbGxv Y2F0b3JfdHlwZTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwLCBjbGFzcyBfVHAxLCBjbGFzcyBf QWxsb2M+CnN0cnVjdCBfQWxsb2NfdHJhaXRzPF9UcCwgX19hbGxvY2F0b3I8X1RwMSwgX19kZWJ1 Z19hbGxvYzxfQWxsb2M+ID4gPgp7CiAgc3RhdGljIGNvbnN0IGJvb2wgX1NfaW5zdGFuY2VsZXNz ID0gdHJ1ZTsKICB0eXBlZGVmIF9fc2ltcGxlX2FsbG9jPF9UcCwgX19kZWJ1Z19hbGxvYzxfQWxs b2M+ID4gX0FsbG9jX3R5cGU7CiAgdHlwZWRlZiBfX2FsbG9jYXRvcjxfVHAsIF9fZGVidWdfYWxs b2M8X0FsbG9jPiA+IGFsbG9jYXRvcl90eXBlOwp9OwoKCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNs YXNzIGFsbG9jYXRvcjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYWxsb2NhdG9yPHdj aGFyX3Q+OwoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBfX2RlZmF1bHRfYWxsb2NfdGVtcGxh dGU8dHJ1ZSwgMD47Cgp9CiMgNTYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIg MiAzCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfcmF3X3N0b3Jh Z2VfaXRlci5oIiAxIDMKIyA2NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf cmF3X3N0b3JhZ2VfaXRlci5oIiAzCm5hbWVzcGFjZSBzdGQKewoKCgoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0ZvcndhcmRJdGVyYXRvciwgY2xhc3MgX1RwPgogIGNsYXNzIHJhd19zdG9yYWdlX2l0ZXJh dG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRlcmF0b3JfdGFnLCB2b2lkLCB2b2lk LCB2b2lkLCB2b2lkPgogICAgewogICAgcHJvdGVjdGVkOgogICAgICBfRm9yd2FyZEl0ZXJhdG9y IF9NX2l0ZXI7CgogICAgcHVibGljOgogICAgICBleHBsaWNpdAogICAgICByYXdfc3RvcmFnZV9p dGVyYXRvcihfRm9yd2FyZEl0ZXJhdG9yIF9feCkgOiBfTV9pdGVyKF9feCkge30KCiAgICAgIHJh d19zdG9yYWdlX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvciooKSB7IHJldHVybiAqdGhpczsgfQoK ICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3ImCiAgICAgIG9wZXJhdG9yPShjb25zdCBfVHAmIF9f ZWxlbWVudCkKICAgICAgewogICAgICAgIF9Db25zdHJ1Y3QoJipfTV9pdGVyLCBfX2VsZW1lbnQp OwogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoKICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0 b3I8X0ZvcndhcmRJdGVyYXRvciwgX1RwPiYKICAgICAgb3BlcmF0b3IrKygpCiAgICAgIHsKICAg ICAgICArK19NX2l0ZXI7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAgICByYXdf c3RvcmFnZV9pdGVyYXRvcjxfRm9yd2FyZEl0ZXJhdG9yLCBfVHA+CiAgICAgIG9wZXJhdG9yKyso aW50KQogICAgICB7CiAgICAgICAgcmF3X3N0b3JhZ2VfaXRlcmF0b3I8X0ZvcndhcmRJdGVyYXRv ciwgX1RwPiBfX3RtcCA9ICp0aGlzOwogICAgICAgICsrX01faXRlcjsKICAgICAgICByZXR1cm4g X190bXA7CiAgICAgIH0KICAgIH07Cn0KIyA2MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv bWVtb3J5IiAyIDMKCgoKCm5hbWVzcGFjZSBzdGQKewojIDc0ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKdGVtcGxhdGUgPHR5cGVuYW1lIF9UcD4KcGFpcjxfVHAqLCBwdHJk aWZmX3Q+Cl9fZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuLCBfVHAqKQp7CiAg aWYgKF9fbGVuID4gcHRyZGlmZl90KDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKSkpCiAgICBfX2xl biA9IDIxNDc0ODM2NDcgLyBzaXplb2YoX1RwKTsKCiAgd2hpbGUgKF9fbGVuID4gMCkgewogICAg X1RwKiBfX3RtcCA9IChfVHAqKSBzdGQ6Om1hbGxvYygoc3RkOjpzaXplX3QpX19sZW4gKiBzaXpl b2YoX1RwKSk7CiAgICBpZiAoX190bXAgIT0gMCkKICAgICAgcmV0dXJuIHBhaXI8X1RwKiwgcHRy ZGlmZl90PihfX3RtcCwgX19sZW4pOwogICAgX19sZW4gLz0gMjsKICB9CgogIHJldHVybiBwYWly PF9UcCosIHB0cmRpZmZfdD4oKF9UcCopMCwgMCk7Cn0KIyAxMDYgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgaW5saW5lIHBhaXI8 X1RwKixwdHJkaWZmX3Q+CiAgZ2V0X3RlbXBvcmFyeV9idWZmZXIocHRyZGlmZl90IF9fbGVuKQog IHsKICAgIHJldHVybiBfX2dldF90ZW1wb3JhcnlfYnVmZmVyKF9fbGVuLCAoX1RwKikgMCk7CiAg fQojIDEyMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5 cGVuYW1lIF9UcD4KICB2b2lkCiAgcmV0dXJuX3RlbXBvcmFyeV9idWZmZXIoX1RwKiBfX3ApCiAg ewogICAgc3RkOjpmcmVlKF9fcCk7CiAgfQojIDEzNSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvbWVtb3J5IiAzCnRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgc3RydWN0IGF1dG9fcHRyX3Jl Zgp7CiAgIF9UcDEqIF9NX3B0cjsKCiAgIGV4cGxpY2l0CiAgIGF1dG9fcHRyX3JlZihfVHAxKiBf X3ApCiAgIDogX01fcHRyKF9fcCkge30KfTsKIyAxNzUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMwp0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgY2xhc3MgYXV0b19wdHIKewpw cml2YXRlOgogIF9UcCogX01fcHRyOwoKcHVibGljOgoKICB0eXBlZGVmIF9UcCBlbGVtZW50X3R5 cGU7CgoKCgoKCgogIGV4cGxpY2l0CiAgYXV0b19wdHIoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0 aHJvdygpCiAgOiBfTV9wdHIoX19wKSB7IH0KIyAyMDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL21lbW9yeSIgMwogIGF1dG9fcHRyKGF1dG9fcHRyJiBfX2EpIHRocm93KCkKICA6IF9NX3B0 cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMTQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21l bW9yeSIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcDE+CiAgICBhdXRvX3B0cihhdXRvX3B0cjxf VHAxPiYgX19hKSB0aHJvdygpCiAgICA6IF9NX3B0cihfX2EucmVsZWFzZSgpKSB7IH0KIyAyMjYg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGF1dG9fcHRyJgogIG9wZXJh dG9yPShhdXRvX3B0ciYgX19hKSB0aHJvdygpCiAgICB7CiAgICAgIHJlc2V0KF9fYS5yZWxlYXNl KCkpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CiMgMjQzICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9tZW1vcnkiIDMKICB0ZW1wbGF0ZSA8dHlwZW5hbWUgX1RwMT4KICAgIGF1dG9fcHRy JgogICAgb3BlcmF0b3I9KGF1dG9fcHRyPF9UcDE+JiBfX2EpIHRocm93KCkKICAgIHsKICAgICAg cmVzZXQoX19hLnJlbGVhc2UoKSk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KIyAyNjMgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIH5hdXRvX3B0cigpIHsgZGVsZXRl IF9NX3B0cjsgfQojIDI3MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvbWVtb3J5IiAzCiAg ZWxlbWVudF90eXBlJgogIG9wZXJhdG9yKigpIGNvbnN0IHRocm93KCkgeyByZXR1cm4gKl9NX3B0 cjsgfQoKCgoKCgoKICBlbGVtZW50X3R5cGUqCiAgb3BlcmF0b3ItPigpIGNvbnN0IHRocm93KCkg eyByZXR1cm4gX01fcHRyOyB9CiMgMjk1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tZW1v cnkiIDMKICBlbGVtZW50X3R5cGUqCiAgZ2V0KCkgY29uc3QgdGhyb3coKSB7IHJldHVybiBfTV9w dHI7IH0KIyAzMDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL21lbW9yeSIgMwogIGVsZW1l bnRfdHlwZSoKICByZWxlYXNlKCkgdGhyb3coKQogICAgewogICAgICBlbGVtZW50X3R5cGUqIF9f dG1wID0gX01fcHRyOwogICAgICBfTV9wdHIgPSAwOwogICAgICByZXR1cm4gX190bXA7CiAgICB9 CiMgMzI0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tZW1vcnkiIDMKICB2b2lkCiAgcmVz ZXQoZWxlbWVudF90eXBlKiBfX3AgPSAwKSB0aHJvdygpCiAgICB7CiAgICAgIGlmIChfX3AgIT0g X01fcHRyKQogICAgICAgIHsKICAgICAgICAgIGRlbGV0ZSBfTV9wdHI7CiAgICAgICAgICBfTV9w dHIgPSBfX3A7CiAgICAgICAgfQogICAgfQojIDM0NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvbWVtb3J5IiAzCiAgYXV0b19wdHIoYXV0b19wdHJfcmVmPGVsZW1lbnRfdHlwZT4gX19yZWYp IHRocm93KCkKICAgIDogX01fcHRyKF9fcmVmLl9NX3B0cikge30KCiAgYXV0b19wdHImCiAgb3Bl cmF0b3I9KGF1dG9fcHRyX3JlZjxlbGVtZW50X3R5cGU+IF9fcmVmKSB0aHJvdygpCiAgICB7CiAg ICAgIGlmIChfX3JlZi5fTV9wdHIgIT0gdGhpcy0+Z2V0KCkpCiAgICAgICAgewogICAgICAgICAg ZGVsZXRlIF9NX3B0cjsKICAgICAgICAgIF9NX3B0ciA9IF9fcmVmLl9NX3B0cjsKICAgICAgICB9 CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwMT4KICAg IG9wZXJhdG9yIGF1dG9fcHRyX3JlZjxfVHAxPigpIHRocm93KCkKICAgICAgeyByZXR1cm4gYXV0 b19wdHJfcmVmPF9UcDE+KHRoaXMtPnJlbGVhc2UoKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwMT4KICAgIG9wZXJhdG9yIGF1dG9fcHRyPF9UcDE+KCkgdGhyb3coKQogICAgICB7IHJldHVy biBhdXRvX3B0cjxfVHAxPih0aGlzLT5yZWxlYXNlKCkpOyB9Cgp9OwoKfQojIDQ5ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9zdHJpbmciIDIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDEgMwojIDY0ICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCm5hbWVzcGFjZSBzdGQKewojIDEwMSAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0 ZSA8Y2xhc3MgX0FyZywgY2xhc3MgX1Jlc3VsdD4Kc3RydWN0IHVuYXJ5X2Z1bmN0aW9uIHsKICB0 eXBlZGVmIF9BcmcgYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9SZXN1bHQgcmVzdWx0X3R5cGU7 Cn07CgoKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0 PgpzdHJ1Y3QgYmluYXJ5X2Z1bmN0aW9uIHsKICB0eXBlZGVmIF9BcmcxIGZpcnN0X2FyZ3VtZW50 X3R5cGU7CiAgdHlwZWRlZiBfQXJnMiBzZWNvbmRfYXJndW1lbnRfdHlwZTsKICB0eXBlZGVmIF9S ZXN1bHQgcmVzdWx0X3R5cGU7Cn07CiMgMTI3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBwbHVzIDog cHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNv bnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICsgX195OyB9 Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG1pbnVzIDogcHVibGljIGJpbmFyeV9m dW5jdGlvbjxfVHAsX1RwLF9UcD4gewogIF9UcCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBj b25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IC0gX195OyB9Cn07CgoKdGVtcGxhdGUg PGNsYXNzIF9UcD4Kc3RydWN0IG11bHRpcGxpZXMgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsX1RwPiB7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYg X195KSBjb25zdCB7IHJldHVybiBfX3ggKiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1Rw PgpzdHJ1Y3QgZGl2aWRlcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxfVHA+IHsK ICBfVHAgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAvIF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBtb2R1 bHVzIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLF9UcD4KewogIF9UcCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICUg X195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5lZ2F0ZSA6IHB1YmxpYyB1 bmFyeV9mdW5jdGlvbjxfVHAsX1RwPgp7CiAgX1RwIG9wZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gp IGNvbnN0IHsgcmV0dXJuIC1fX3g7IH0KfTsKIyAxNzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX2Z1bmN0aW9uLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IGVx dWFsX3RvIDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9w ZXJhdG9yKCkoY29uc3QgX1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBf X3ggPT0gX195OyB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4Kc3RydWN0IG5vdF9lcXVhbF90 byA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194ICE9 IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBncmVhdGVyIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjxfVHAsX1RwLGJvb2w+CnsKICBib29sIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3gsIGNvbnN0IF9UcCYgX195KSBjb25zdCB7IHJldHVybiBfX3ggPiBfX3k7IH0KfTsK Cgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbGVzcyA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rp b248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25z dCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4gX194IDwgX195OyB9Cn07CgoKdGVtcGxhdGUgPGNs YXNzIF9UcD4Kc3RydWN0IGdyZWF0ZXJfZXF1YWwgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9U cCxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1Rw JiBfX3kpIGNvbnN0IHsgcmV0dXJuIF9feCA+PSBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3Mg X1RwPgpzdHJ1Y3QgbGVzc19lcXVhbCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxi b29sPgp7CiAgYm9vbCBvcGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkg Y29uc3QgeyByZXR1cm4gX194IDw9IF9feTsgfQp9OwojIDIyMiAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1 Y3QgbG9naWNhbF9hbmQgOiBwdWJsaWMgYmluYXJ5X2Z1bmN0aW9uPF9UcCxfVHAsYm9vbD4Kewog IGJvb2wgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCwgY29uc3QgX1RwJiBfX3kpIGNvbnN0IHsg cmV0dXJuIF9feCAmJiBfX3k7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpzdHJ1Y3QgbG9n aWNhbF9vciA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9UcCxib29sPgp7CiAgYm9vbCBv cGVyYXRvcigpKGNvbnN0IF9UcCYgX194LCBjb25zdCBfVHAmIF9feSkgY29uc3QgeyByZXR1cm4g X194IHx8IF9feTsgfQp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CnN0cnVjdCBsb2dpY2FsX25v dCA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAsYm9vbD4KewogIGJvb2wgb3BlcmF0b3IoKShj b25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gIV9feDsgfQp9OwojIDI3MSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3Mg X1ByZWRpY2F0ZT4KY2xhc3MgdW5hcnlfbmVnYXRlCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 dHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSwgYm9vbD4gewpwcm90ZWN0ZWQ6CiAg X1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgdW5hcnlfbmVnYXRlKGNvbnN0 IF9QcmVkaWNhdGUmIF9feCkgOiBfTV9wcmVkKF9feCkge30KICBib29sIG9wZXJhdG9yKCkoY29u c3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6YXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICBy ZXR1cm4gIV9NX3ByZWQoX194KTsKICB9Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9QcmVkaWNhdGU+ CmlubGluZSB1bmFyeV9uZWdhdGU8X1ByZWRpY2F0ZT4Kbm90MShjb25zdCBfUHJlZGljYXRlJiBf X3ByZWQpCnsKICByZXR1cm4gdW5hcnlfbmVnYXRlPF9QcmVkaWNhdGU+KF9fcHJlZCk7Cn0KCgp0 ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KY2xhc3MgYmluYXJ5X25lZ2F0ZQogIDogcHVibGlj IGJpbmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBfUHJlZGljYXRlOjpmaXJzdF9hcmd1bWVudF90eXBl LAogICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlbmFtZSBfUHJlZGljYXRlOjpzZWNvbmRf YXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgYm9vbD4gewpwcm90ZWN0 ZWQ6CiAgX1ByZWRpY2F0ZSBfTV9wcmVkOwpwdWJsaWM6CiAgZXhwbGljaXQgYmluYXJ5X25lZ2F0 ZShjb25zdCBfUHJlZGljYXRlJiBfX3gpIDogX01fcHJlZChfX3gpIHt9CiAgYm9vbCBvcGVyYXRv cigpKGNvbnN0IHR5cGVuYW1lIF9QcmVkaWNhdGU6OmZpcnN0X2FyZ3VtZW50X3R5cGUmIF9feCwK ICAgICAgICAgICAgICAgICAgY29uc3QgdHlwZW5hbWUgX1ByZWRpY2F0ZTo6c2Vjb25kX2FyZ3Vt ZW50X3R5cGUmIF9feSkgY29uc3QKICB7CiAgICByZXR1cm4gIV9NX3ByZWQoX194LCBfX3kpOwog IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1ByZWRpY2F0ZT4KaW5saW5lIGJpbmFyeV9uZWdhdGU8 X1ByZWRpY2F0ZT4Kbm90Mihjb25zdCBfUHJlZGljYXRlJiBfX3ByZWQpCnsKICByZXR1cm4gYmlu YXJ5X25lZ2F0ZTxfUHJlZGljYXRlPihfX3ByZWQpOwp9CiMgMzQ5ICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBfT3BlcmF0 aW9uPgpjbGFzcyBiaW5kZXIxc3QKICA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjx0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgICAg ICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09wZXJh dGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9hcmd1bWVudF90eXBlIHZhbHVl OwpwdWJsaWM6CiAgYmluZGVyMXN0KGNvbnN0IF9PcGVyYXRpb24mIF9feCwKICAgICAgICAgICAg Y29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX195KQogICAg ICA6IG9wKF9feCksIHZhbHVlKF9feSkge30KICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRf dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgdHlwZW5hbWUgX09wZXJhdGlvbjo6c2Vjb25kX2FyZ3Vt ZW50X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIG9wKHZhbHVlLCBfX3gpOwogIH0KCgog IHR5cGVuYW1lIF9PcGVyYXRpb246OnJlc3VsdF90eXBlCiAgb3BlcmF0b3IoKSh0eXBlbmFtZSBf T3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4g b3AodmFsdWUsIF9feCk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwgY2xh c3MgX1RwPgppbmxpbmUgYmluZGVyMXN0PF9PcGVyYXRpb24+CmJpbmQxc3QoY29uc3QgX09wZXJh dGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVyYXRp b246OmZpcnN0X2FyZ3VtZW50X3R5cGUgX0FyZzFfdHlwZTsKICByZXR1cm4gYmluZGVyMXN0PF9P cGVyYXRpb24+KF9fZm4sIF9BcmcxX3R5cGUoX194KSk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX09w ZXJhdGlvbj4KY2xhc3MgYmluZGVyMm5kCiAgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248dHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZT4gewpwcm90ZWN0ZWQ6CiAgX09w ZXJhdGlvbiBvcDsKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpzZWNvbmRfYXJndW1lbnRfdHlwZSB2 YWx1ZTsKcHVibGljOgogIGJpbmRlcjJuZChjb25zdCBfT3BlcmF0aW9uJiBfX3gsCiAgICAgICAg ICAgIGNvbnN0IHR5cGVuYW1lIF9PcGVyYXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlJiBfX3kp CiAgICAgIDogb3AoX194KSwgdmFsdWUoX195KSB7fQogIHR5cGVuYW1lIF9PcGVyYXRpb246OnJl c3VsdF90eXBlCiAgb3BlcmF0b3IoKShjb25zdCB0eXBlbmFtZSBfT3BlcmF0aW9uOjpmaXJzdF9h cmd1bWVudF90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBvcChfX3gsIHZhbHVlKTsKICB9 CgoKICB0eXBlbmFtZSBfT3BlcmF0aW9uOjpyZXN1bHRfdHlwZQogIG9wZXJhdG9yKCkodHlwZW5h bWUgX09wZXJhdGlvbjo6Zmlyc3RfYXJndW1lbnRfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1 cm4gb3AoX194LCB2YWx1ZSk7CiAgfQoKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX09wZXJhdGlvbiwg Y2xhc3MgX1RwPgppbmxpbmUgYmluZGVyMm5kPF9PcGVyYXRpb24+CmJpbmQybmQoY29uc3QgX09w ZXJhdGlvbiYgX19mbiwgY29uc3QgX1RwJiBfX3gpCnsKICB0eXBlZGVmIHR5cGVuYW1lIF9PcGVy YXRpb246OnNlY29uZF9hcmd1bWVudF90eXBlIF9BcmcyX3R5cGU7CiAgcmV0dXJuIGJpbmRlcjJu ZDxfT3BlcmF0aW9uPihfX2ZuLCBfQXJnMl90eXBlKF9feCkpOwp9CiMgNDM4ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9mdW5jdGlvbi5oIiAzCnRlbXBsYXRlIDxjbGFzcyBf QXJnLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX3VuYXJ5X2Z1bmN0aW9uIDogcHVi bGljIHVuYXJ5X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+IHsKcHJvdGVjdGVkOgogIF9SZXN1bHQg KCpfTV9wdHIpKF9BcmcpOwpwdWJsaWM6CiAgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbigpIHt9 CiAgZXhwbGljaXQgcG9pbnRlcl90b191bmFyeV9mdW5jdGlvbihfUmVzdWx0ICgqX194KShfQXJn KSkgOiBfTV9wdHIoX194KSB7fQogIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnIF9feCkgY29uc3Qg eyByZXR1cm4gX01fcHRyKF9feCk7IH0KfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZywgY2xhc3Mg X1Jlc3VsdD4KaW5saW5lIHBvaW50ZXJfdG9fdW5hcnlfZnVuY3Rpb248X0FyZywgX1Jlc3VsdD4g cHRyX2Z1bihfUmVzdWx0ICgqX194KShfQXJnKSkKewogIHJldHVybiBwb2ludGVyX3RvX3VuYXJ5 X2Z1bmN0aW9uPF9BcmcsIF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX0FyZzEs IGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgpjbGFzcyBwb2ludGVyX3RvX2JpbmFyeV9mdW5j dGlvbiA6CiAgcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfQXJnMSxfQXJnMixfUmVzdWx0PiB7CnBy b3RlY3RlZDoKICAgIF9SZXN1bHQgKCpfTV9wdHIpKF9BcmcxLCBfQXJnMik7CnB1YmxpYzoKICAg IHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0aW9uKCkge30KICAgIGV4cGxpY2l0IHBvaW50ZXJfdG9f YmluYXJ5X2Z1bmN0aW9uKF9SZXN1bHQgKCpfX3gpKF9BcmcxLCBfQXJnMikpCiAgICAgIDogX01f cHRyKF9feCkge30KICAgIF9SZXN1bHQgb3BlcmF0b3IoKShfQXJnMSBfX3gsIF9BcmcyIF9feSkg Y29uc3QgewogICAgICByZXR1cm4gX01fcHRyKF9feCwgX195KTsKICAgIH0KfTsKCgp0ZW1wbGF0 ZSA8Y2xhc3MgX0FyZzEsIGNsYXNzIF9BcmcyLCBjbGFzcyBfUmVzdWx0PgppbmxpbmUgcG9pbnRl cl90b19iaW5hcnlfZnVuY3Rpb248X0FyZzEsX0FyZzIsX1Jlc3VsdD4KcHRyX2Z1bihfUmVzdWx0 ICgqX194KShfQXJnMSwgX0FyZzIpKSB7CiAgcmV0dXJuIHBvaW50ZXJfdG9fYmluYXJ5X2Z1bmN0 aW9uPF9BcmcxLF9BcmcyLF9SZXN1bHQ+KF9feCk7Cn0KCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpz dHJ1Y3QgX0lkZW50aXR5IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfVHA+IHsKICBfVHAm IG9wZXJhdG9yKCkoX1RwJiBfX3gpIGNvbnN0IHsgcmV0dXJuIF9feDsgfQogIGNvbnN0IF9UcCYg b3BlcmF0b3IoKShjb25zdCBfVHAmIF9feCkgY29uc3QgeyByZXR1cm4gX194OyB9Cn07Cgp0ZW1w bGF0ZSA8Y2xhc3MgX1BhaXI+CnN0cnVjdCBfU2VsZWN0MXN0IDogcHVibGljIHVuYXJ5X2Z1bmN0 aW9uPF9QYWlyLCB0eXBlbmFtZSBfUGFpcjo6Zmlyc3RfdHlwZT4gewogIHR5cGVuYW1lIF9QYWly OjpmaXJzdF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBf X3guZmlyc3Q7CiAgfQogIGNvbnN0IHR5cGVuYW1lIF9QYWlyOjpmaXJzdF90eXBlJiBvcGVyYXRv cigpKGNvbnN0IF9QYWlyJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfX3guZmlyc3Q7CiAgfQp9 OwoKdGVtcGxhdGUgPGNsYXNzIF9QYWlyPgpzdHJ1Y3QgX1NlbGVjdDJuZCA6IHB1YmxpYyB1bmFy eV9mdW5jdGlvbjxfUGFpciwgdHlwZW5hbWUgX1BhaXI6OnNlY29uZF90eXBlPgp7CiAgdHlwZW5h bWUgX1BhaXI6OnNlY29uZF90eXBlJiBvcGVyYXRvcigpKF9QYWlyJiBfX3gpIGNvbnN0IHsKICAg IHJldHVybiBfX3guc2Vjb25kOwogIH0KICBjb25zdCB0eXBlbmFtZSBfUGFpcjo6c2Vjb25kX3R5 cGUmIG9wZXJhdG9yKCkoY29uc3QgX1BhaXImIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9feC5z ZWNvbmQ7CiAgfQp9OwojIDUyOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf ZnVuY3Rpb24uaCIgMwp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBtZW1f ZnVuX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwKixfUmV0PiB7CnB1YmxpYzoKICBleHBs aWNpdCBtZW1fZnVuX3QoX1JldCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1Jl dCBvcGVyYXRvcigpKF9UcCogX19wKSBjb25zdCB7IHJldHVybiAoX19wLT4qX01fZikoKTsgfQpw cml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQs IGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9u PGNvbnN0IF9UcCosX1JldD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl90KF9S ZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3Io KShjb25zdCBfVHAqIF9fcCkgY29uc3QgeyByZXR1cm4gKF9fcC0+Kl9NX2YpKCk7IH0KcHJpdmF0 ZToKICBfUmV0IChfVHA6OipfTV9mKSgpIGNvbnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0 LCBjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fcmVmX3QgOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248 X1RwLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW5fcmVmX3QoX1JldCAoX1RwOjoq X19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25z dCB7IHJldHVybiAoX19yLipfTV9mKSgpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01fZiko KTsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgpjbGFzcyBjb25zdF9tZW1f ZnVuX3JlZl90IDogcHVibGljIHVuYXJ5X2Z1bmN0aW9uPF9UcCxfUmV0PiB7CnB1YmxpYzoKICBl eHBsaWNpdCBjb25zdF9tZW1fZnVuX3JlZl90KF9SZXQgKF9UcDo6Kl9fcGYpKCkgY29uc3QpIDog X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fcikgY29uc3QgeyBy ZXR1cm4gKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKCkgY29u c3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwKixfQXJnLF9SZXQ+IHsK cHVibGljOgogIGV4cGxpY2l0IG1lbV9mdW4xX3QoX1JldCAoX1RwOjoqX19wZikoX0FyZykpIDog X01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0b3IoKShfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0 IHsgcmV0dXJuIChfX3AtPipfTV9mKShfX3gpOyB9CnByaXZhdGU6CiAgX1JldCAoX1RwOjoqX01f ZikoX0FyZyk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0Fy Zz4KY2xhc3MgY29uc3RfbWVtX2Z1bjFfdCA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248Y29uc3Qg X1RwKixfQXJnLF9SZXQ+IHsKcHVibGljOgogIGV4cGxpY2l0IGNvbnN0X21lbV9mdW4xX3QoX1Jl dCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7fQogIF9SZXQgb3BlcmF0 b3IoKShjb25zdCBfVHAqIF9fcCwgX0FyZyBfX3gpIGNvbnN0CiAgICB7IHJldHVybiAoX19wLT4q X01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9 OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1l bV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxfVHAsX0FyZyxfUmV0PiB7CnB1 YmxpYzoKICBleHBsaWNpdCBtZW1fZnVuMV9yZWZfdChfUmV0IChfVHA6OipfX3BmKShfQXJnKSkg OiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVyYXRvcigpKF9UcCYgX19yLCBfQXJnIF9feCkgY29u c3QgeyByZXR1cm4gKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9N X2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHAsIGNsYXNzIF9B cmc+CmNsYXNzIGNvbnN0X21lbV9mdW4xX3JlZl90IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAsX0FyZyxfUmV0PiB7CnB1YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuMV9yZWZfdChf UmV0IChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYpIHt9CiAgX1JldCBvcGVy YXRvcigpKGNvbnN0IF9UcCYgX19yLCBfQXJnIF9feCkgY29uc3QgeyByZXR1cm4gKF9fci4qX01f ZikoX194KTsgfQpwcml2YXRlOgogIF9SZXQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0Owp9OwoK CnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIG1lbV9mdW5fdDx2b2lkLCBfVHA+IDogcHVibGlj IHVuYXJ5X2Z1bmN0aW9uPF9UcCosdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bl90 KHZvaWQgKF9UcDo6Kl9fcGYpKCkpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShf VHAqIF9fcCkgY29uc3QgeyAoX19wLT4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6 Kl9NX2YpKCk7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcD4KY2xhc3MgY29uc3RfbWVtX2Z1bl90 PHZvaWQsIF9UcD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248Y29uc3QgX1RwKix2b2lkPiB7CnB1 YmxpYzoKICBleHBsaWNpdCBjb25zdF9tZW1fZnVuX3Qodm9pZCAoX1RwOjoqX19wZikoKSBjb25z dCkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wKSBjb25z dCB7IChfX3AtPipfTV9mKSgpOyB9CnByaXZhdGU6CiAgdm9pZCAoX1RwOjoqX01fZikoKSBjb25z dDsKfTsKCgp0ZW1wbGF0ZSA8Y2xhc3MgX1RwPgpjbGFzcyBtZW1fZnVuX3JlZl90PHZvaWQsIF9U cD4gOiBwdWJsaWMgdW5hcnlfZnVuY3Rpb248X1RwLHZvaWQ+IHsKcHVibGljOgogIGV4cGxpY2l0 IG1lbV9mdW5fcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9p ZCBvcGVyYXRvcigpKF9UcCYgX19yKSBjb25zdCB7IChfX3IuKl9NX2YpKCk7IH0KcHJpdmF0ZToK ICB2b2lkIChfVHA6OipfTV9mKSgpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHA+CmNsYXNzIGNv bnN0X21lbV9mdW5fcmVmX3Q8dm9pZCwgX1RwPiA6IHB1YmxpYyB1bmFyeV9mdW5jdGlvbjxfVHAs dm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVtX2Z1bl9yZWZfdCh2b2lkIChfVHA6 OipfX3BmKSgpIGNvbnN0KSA6IF9NX2YoX19wZikge30KICB2b2lkIG9wZXJhdG9yKCkoY29uc3Qg X1RwJiBfX3IpIGNvbnN0IHsgKF9fci4qX01fZikoKTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6 Kl9NX2YpKCkgY29uc3Q7Cn07CgoKdGVtcGxhdGUgPGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KY2xh c3MgbWVtX2Z1bjFfdDx2b2lkLCBfVHAsIF9Bcmc+IDogcHVibGljIGJpbmFyeV9mdW5jdGlvbjxf VHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfdCh2b2lkIChfVHA6 OipfX3BmKShfQXJnKSkgOiBfTV9mKF9fcGYpIHt9CiAgdm9pZCBvcGVyYXRvcigpKF9UcCogX19w LCBfQXJnIF9feCkgY29uc3QgeyAoX19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQg KF9UcDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+ CmNsYXNzIGNvbnN0X21lbV9mdW4xX3Q8dm9pZCwgX1RwLCBfQXJnPgogIDogcHVibGljIGJpbmFy eV9mdW5jdGlvbjxjb25zdCBfVHAqLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29u c3RfbWVtX2Z1bjFfdCh2b2lkIChfVHA6OipfX3BmKShfQXJnKSBjb25zdCkgOiBfTV9mKF9fcGYp IHt9CiAgdm9pZCBvcGVyYXRvcigpKGNvbnN0IF9UcCogX19wLCBfQXJnIF9feCkgY29uc3QgeyAo X19wLT4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNv bnN0Owp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNsYXNzIG1lbV9mdW4x X3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248X1RwLF9B cmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgbWVtX2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoq X19wZikoX0FyZykpIDogX01fZihfX3BmKSB7fQogIHZvaWQgb3BlcmF0b3IoKShfVHAmIF9fciwg X0FyZyBfX3gpIGNvbnN0IHsgKF9fci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9U cDo6Kl9NX2YpKF9BcmcpOwp9OwoKCnRlbXBsYXRlIDxjbGFzcyBfVHAsIGNsYXNzIF9Bcmc+CmNs YXNzIGNvbnN0X21lbV9mdW4xX3JlZl90PHZvaWQsIF9UcCwgX0FyZz4KICA6IHB1YmxpYyBiaW5h cnlfZnVuY3Rpb248X1RwLF9Bcmcsdm9pZD4gewpwdWJsaWM6CiAgZXhwbGljaXQgY29uc3RfbWVt X2Z1bjFfcmVmX3Qodm9pZCAoX1RwOjoqX19wZikoX0FyZykgY29uc3QpIDogX01fZihfX3BmKSB7 fQogIHZvaWQgb3BlcmF0b3IoKShjb25zdCBfVHAmIF9fciwgX0FyZyBfX3gpIGNvbnN0IHsgKF9f ci4qX01fZikoX194KTsgfQpwcml2YXRlOgogIHZvaWQgKF9UcDo6Kl9NX2YpKF9BcmcpIGNvbnN0 Owp9OwoKCgoKCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+CmlubGluZSBtZW1fZnVu X3Q8X1JldCxfVHA+IG1lbV9mdW4oX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9m dW5fdDxfUmV0LF9UcD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcD4K aW5saW5lIGNvbnN0X21lbV9mdW5fdDxfUmV0LF9UcD4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp KCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl90PF9SZXQsX1RwPihfX2YpOyB9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX1JldCwgY2xhc3MgX1RwPgppbmxpbmUgbWVtX2Z1bl9yZWZfdDxfUmV0 LF9UcD4gbWVtX2Z1bl9yZWYoX1JldCAoX1RwOjoqX19mKSgpKQogIHsgcmV0dXJuIG1lbV9mdW5f cmVmX3Q8X1JldCxfVHA+KF9fZik7IH0KCnRlbXBsYXRlIDxjbGFzcyBfUmV0LCBjbGFzcyBfVHA+ CmlubGluZSBjb25zdF9tZW1fZnVuX3JlZl90PF9SZXQsX1RwPiBtZW1fZnVuX3JlZihfUmV0IChf VHA6OipfX2YpKCkgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bl9yZWZfdDxfUmV0LF9U cD4oX19mKTsgfQoKdGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4K aW5saW5lIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2Yp KF9BcmcpKQogIHsgcmV0dXJuIG1lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l bV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4gbWVtX2Z1bihfUmV0IChfVHA6OipfX2YpKF9BcmcpIGNv bnN0KQogIHsgcmV0dXJuIGNvbnN0X21lbV9mdW4xX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoK dGVtcGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIG1lbV9m dW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+IG1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZikoX0Fy ZykpCiAgeyByZXR1cm4gbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0FyZz4oX19mKTsgfQoKdGVt cGxhdGUgPGNsYXNzIF9SZXQsIGNsYXNzIF9UcCwgY2xhc3MgX0FyZz4KaW5saW5lIGNvbnN0X21l bV9mdW4xX3JlZl90PF9SZXQsX1RwLF9Bcmc+Cm1lbV9mdW5fcmVmKF9SZXQgKF9UcDo6Kl9fZiko X0FyZykgY29uc3QpCiAgeyByZXR1cm4gY29uc3RfbWVtX2Z1bjFfcmVmX3Q8X1JldCxfVHAsX0Fy Zz4oX19mKTsgfQoKCgp9CiMgNTMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0cmluZyIg MiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIg MSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfc3RyaW5nLmgi IDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9hdG9taWNpdHkuaCIgMSAzCiMgMzMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYt cGMtbGludXgtZ251L2JpdHMvYXRvbWljaXR5LmgiIDMKdHlwZWRlZiBpbnQgX0F0b21pY193b3Jk OwoKc3RhdGljIGlubGluZSBfQXRvbWljX3dvcmQKCl9fZXhjaGFuZ2VfYW5kX2FkZCAodm9sYXRp bGUgX0F0b21pY193b3JkICpfX21lbSwgaW50IF9fdmFsKQp7CiAgcmVnaXN0ZXIgX0F0b21pY193 b3JkIF9fcmVzdWx0OwogIF9fYXNtX18gdm9sYXRpbGUgKCJsb2NrOyB4YWRkbCAlMCwlMiIKICAg ICAgICAgICAgICAgICAgICAgICAgOiAiPXIiIChfX3Jlc3VsdCkKICAgICAgICAgICAgICAgICAg ICAgICAgOiAiMCIgKF9fdmFsKSwgIm0iICgqX19tZW0pCiAgICAgICAgICAgICAgICAgICAgICAg IDogIm1lbW9yeSIpOwogIHJldHVybiBfX3Jlc3VsdDsKfQoKc3RhdGljIGlubGluZSB2b2lkCgpf X2F0b21pY19hZGQgKHZvbGF0aWxlIF9BdG9taWNfd29yZCogX19tZW0sIGludCBfX3ZhbCkKewog IF9fYXNtX18gdm9sYXRpbGUgKCJsb2NrOyBhZGRsICUwLCUxIgogICAgICAgICAgICAgICAgICAg ICAgICA6IDogImlyIiAoX192YWwpLCAibSIgKCpfX21lbSkgOiAibWVtb3J5Iik7Cn0KIyA0NiAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMiAzCgpuYW1l c3BhY2Ugc3RkCnsKIyA4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19z dHJpbmcuaCIgMwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfc3RyaW5nCiAgICB7CgogICAgcHVibGlj OgogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX1RyYWl0czo6Y2hhcl90eXBlIHZhbHVlX3R5cGU7CiAgICAgIHR5cGVkZWYgX0FsbG9jIGFs bG9jYXRvcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNp emVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmRpZmZlcmVuY2VfdHlwZSBk aWZmZXJlbmNlX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjpyZWZlcmVuY2Ug cmVmZXJlbmNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6Y29uc3RfcmVmZXJlbmNl IGNvbnN0X3JlZmVyZW5jZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OnBvaW50ZXIg cG9pbnRlcjsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfQWxsb2M6OmNvbnN0X3BvaW50ZXIgY29u c3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiBfX2dudV9jeHg6Ol9fbm9ybWFsX2l0ZXJhdG9yPHBv aW50ZXIsIGJhc2ljX3N0cmluZz4gaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgX19nbnVfY3h4Ojpf X25vcm1hbF9pdGVyYXRvcjxjb25zdF9wb2ludGVyLCBiYXNpY19zdHJpbmc+CiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0X2l0 ZXJhdG9yOwogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNv bnN0X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVy YXRvcj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgojIDEyMyAiL3Vzci9sb2NhbC9p bmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19zdHJpbmcuaCIgMwogICAgICBzdHJ1Y3QgX1JlcAog ICAgICB7CgogICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX0FsbG9jOjp0ZW1wbGF0ZSByZWJpbmQ8 Y2hhcj46Om90aGVyIF9SYXdfYnl0ZXNfYWxsb2M7CiMgMTQxICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy5oIiAzCiAgICAgICAgc3RhdGljIGNvbnN0IHNpemVf dHlwZSBfU19tYXhfc2l6ZTsKICAgICAgICBzdGF0aWMgY29uc3QgX0NoYXJUIF9TX3Rlcm1pbmFs OwoKICAgICAgICBzaXplX3R5cGUgX01fbGVuZ3RoOwogICAgICAgIHNpemVfdHlwZSBfTV9jYXBh Y2l0eTsKICAgICAgICBfQXRvbWljX3dvcmQgX01fcmVmZXJlbmNlczsKCiAgICAgICAgYm9vbAog ICAgICAgIF9NX2lzX2xlYWtlZCgpIGNvbnN0CiAgICAgICAgeyByZXR1cm4gX01fcmVmZXJlbmNl cyA8IDA7IH0KCiAgICAgICAgYm9vbAogICAgICAgIF9NX2lzX3NoYXJlZCgpIGNvbnN0CiAgICAg ICAgeyByZXR1cm4gX01fcmVmZXJlbmNlcyA+IDA7IH0KCiAgICAgICAgdm9pZAogICAgICAgIF9N X3NldF9sZWFrZWQoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IC0xOyB9CgogICAgICAgIHZv aWQKICAgICAgICBfTV9zZXRfc2hhcmFibGUoKQogICAgICAgIHsgX01fcmVmZXJlbmNlcyA9IDA7 IH0KCiAgICAgICAgX0NoYXJUKgogICAgICAgIF9NX3JlZmRhdGEoKSB0aHJvdygpCiAgICAgICAg eyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxfQ2hhclQqPih0aGlzICsgMSk7IH0KCiAgICAgICAg X0NoYXJUJgogICAgICAgIG9wZXJhdG9yW10oc2l6ZV90IF9fcykgdGhyb3coKQogICAgICAgIHsg cmV0dXJuIF9NX3JlZmRhdGEoKSBbX19zXTsgfQoKICAgICAgICBfQ2hhclQqCiAgICAgICAgX01f Z3JhYihjb25zdCBfQWxsb2MmIF9fYWxsb2MxLCBjb25zdCBfQWxsb2MmIF9fYWxsb2MyKQogICAg ICAgIHsKICAgICAgICAgIHJldHVybiAoIV9NX2lzX2xlYWtlZCgpICYmIF9fYWxsb2MxID09IF9f YWxsb2MyKQogICAgICAgICAgICAgICAgICA/IF9NX3JlZmNvcHkoKSA6IF9NX2Nsb25lKF9fYWxs b2MxKTsKICAgICAgICB9CgoKICAgICAgICBzdGF0aWMgX1JlcCoKICAgICAgICBfU19jcmVhdGUo c2l6ZV90LCBjb25zdCBfQWxsb2MmKTsKCiAgICAgICAgdm9pZAogICAgICAgIF9NX2Rpc3Bvc2Uo Y29uc3QgX0FsbG9jJiBfX2EpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fZXhjaGFuZ2VfYW5k X2FkZCgmX01fcmVmZXJlbmNlcywgLTEpIDw9IDApCiAgICAgICAgICAgIF9NX2Rlc3Ryb3koX19h KTsKICAgICAgICB9CgogICAgICAgIHZvaWQKICAgICAgICBfTV9kZXN0cm95KGNvbnN0IF9BbGxv YyYpIHRocm93KCk7CgogICAgICAgIF9DaGFyVCoKICAgICAgICBfTV9yZWZjb3B5KCkgdGhyb3co KQogICAgICAgIHsKICAgICAgICAgIF9fYXRvbWljX2FkZCgmX01fcmVmZXJlbmNlcywgMSk7CiAg ICAgICAgICByZXR1cm4gX01fcmVmZGF0YSgpOwogICAgICAgIH0KCiAgICAgICAgX0NoYXJUKgog ICAgICAgIF9NX2Nsb25lKGNvbnN0IF9BbGxvYyYsIHNpemVfdHlwZSBfX3JlcyA9IDApOwogICAg ICB9OwoKCiAgICAgIHN0cnVjdCBfQWxsb2NfaGlkZXIgOiBfQWxsb2MKICAgICAgewogICAgICAg IF9BbGxvY19oaWRlcihfQ2hhclQqIF9fZGF0LCBjb25zdCBfQWxsb2MmIF9fYSkKICAgICAgICA6 IF9BbGxvYyhfX2EpLCBfTV9wKF9fZGF0KSB7IH0KCiAgICAgICAgX0NoYXJUKiBfTV9wOwogICAg ICB9OwoKICAgIHB1YmxpYzoKCgoKICAgICAgc3RhdGljIGNvbnN0IHNpemVfdHlwZSBucG9zID0g c3RhdGljX2Nhc3Q8c2l6ZV90eXBlPigtMSk7CgogICAgcHJpdmF0ZToKCiAgICAgIG11dGFibGUg X0FsbG9jX2hpZGVyIF9NX2RhdGFwbHVzOwoKCgogICAgICBzdGF0aWMgc2l6ZV90eXBlIF9TX2Vt cHR5X3JlcF9zdG9yYWdlWyhzaXplb2YoX1JlcCkgKyBzaXplb2YoX0NoYXJUKSArIHNpemVvZihz aXplX3R5cGUpIC0gMSkvc2l6ZW9mKHNpemVfdHlwZSldOwoKICAgICAgX0NoYXJUKgogICAgICBf TV9kYXRhKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGF0YXBsdXMuX01fcDsgfQoKICAgICAg X0NoYXJUKgogICAgICBfTV9kYXRhKF9DaGFyVCogX19wKQogICAgICB7IHJldHVybiAoX01fZGF0 YXBsdXMuX01fcCA9IF9fcCk7IH0KCiAgICAgIF9SZXAqCiAgICAgIF9NX3JlcCgpIGNvbnN0CiAg ICAgIHsgcmV0dXJuICYoKHJlaW50ZXJwcmV0X2Nhc3Q8X1JlcCo+IChfTV9kYXRhKCkpKVstMV0p OyB9CgoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2liZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0 ZXJhdG9yKF9NX2RhdGEoKSk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2llbmQoKSBjb25z dCB7IHJldHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICB2 b2lkCiAgICAgIF9NX2xlYWsoKQogICAgICB7CiAgICAgICAgaWYgKCFfTV9yZXAoKS0+X01faXNf bGVha2VkKCkpCiAgICAgICAgICBfTV9sZWFrX2hhcmQoKTsKICAgICAgfQoKICAgICAgaXRlcmF0 b3IKICAgICAgX01fY2hlY2soc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgICB7CiAgICAgICAg aWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgpKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo ImJhc2ljX3N0cmluZzo6X01fY2hlY2siKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBf X3BvczsKICAgICAgfQoKCiAgICAgIGl0ZXJhdG9yCiAgICAgIF9NX2ZvbGQoc2l6ZV90eXBlIF9f cG9zLCBzaXplX3R5cGUgX19vZmYpIGNvbnN0CiAgICAgIHsKICAgICAgICBib29sIF9fdGVzdG9m ZiA9IF9fb2ZmIDwgdGhpcy0+c2l6ZSgpIC0gX19wb3M7CiAgICAgICAgc2l6ZV90eXBlIF9fbmV3 b2ZmID0gX190ZXN0b2ZmID8gX19vZmYgOiB0aGlzLT5zaXplKCkgLSBfX3BvczsKICAgICAgICBy ZXR1cm4gKF9NX2liZWdpbigpICsgX19wb3MgKyBfX25ld29mZik7CiAgICAgIH0KCgoKICAgICAg dGVtcGxhdGU8Y2xhc3MgX0l0ZXJhdG9yPgogICAgICAgIHN0YXRpYyB2b2lkCiAgICAgICAgX1Nf Y29weV9jaGFycyhfQ2hhclQqIF9fcCwgX0l0ZXJhdG9yIF9fazEsIF9JdGVyYXRvciBfX2syKQog ICAgICAgIHsKICAgICAgICAgIGZvciAoOyBfX2sxICE9IF9fazI7ICsrX19rMSwgKytfX3ApCiAg ICAgICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24oKl9fcCwgKl9fazEpOwogICAgICAgIH0KCiAg ICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIGl0ZXJhdG9y IF9fazEsIGl0ZXJhdG9yIF9fazIpCiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFz ZSgpLCBfX2syLmJhc2UoKSk7IH0KCiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hh cnMoX0NoYXJUKiBfX3AsIGNvbnN0X2l0ZXJhdG9yIF9fazEsIGNvbnN0X2l0ZXJhdG9yIF9fazIp CiAgICAgIHsgX1NfY29weV9jaGFycyhfX3AsIF9fazEuYmFzZSgpLCBfX2syLmJhc2UoKSk7IH0K CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX2NvcHlfY2hhcnMoX0NoYXJUKiBfX3AsIF9DaGFy VCogX19rMSwgX0NoYXJUKiBfX2syKQogICAgICB7IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19r MSwgX19rMiAtIF9fazEpOyB9CgogICAgICBzdGF0aWMgdm9pZAogICAgICBfU19jb3B5X2NoYXJz KF9DaGFyVCogX19wLCBjb25zdCBfQ2hhclQqIF9fazEsIGNvbnN0IF9DaGFyVCogX19rMikKICAg ICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3AsIF9fazEsIF9fazIgLSBfX2sxKTsgfQoKICAgICAg dm9pZAogICAgICBfTV9tdXRhdGUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19sZW4xLCBz aXplX3R5cGUgX19sZW4yKTsKCiAgICAgIHZvaWQKICAgICAgX01fbGVha19oYXJkKCk7CgogICAg ICBzdGF0aWMgX1JlcCYKICAgICAgX1NfZW1wdHlfcmVwKCkKICAgICAgeyByZXR1cm4gKnJlaW50 ZXJwcmV0X2Nhc3Q8X1JlcCo+KCZfU19lbXB0eV9yZXBfc3RvcmFnZSk7IH0KCiAgICBwdWJsaWM6 CgoKCgogICAgICBpbmxpbmUKICAgICAgYmFzaWNfc3RyaW5nKCk7CgogICAgICBleHBsaWNpdAog ICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0FsbG9jJiBfX2EpOwoKCiAgICAgIGJhc2ljX3N0cmlu Zyhjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNp emVfdHlwZSBfX24gPSBucG9zKTsKICAgICAgYmFzaWNfc3RyaW5nKGNvbnN0IGJhc2ljX3N0cmlu ZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBf X24sIGNvbnN0IF9BbGxvYyYgX19hKTsKCiAgICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQq IF9fcywgc2l6ZV90eXBlIF9fbiwKICAgICAgICAgICAgICAgICAgIGNvbnN0IF9BbGxvYyYgX19h ID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoY29uc3QgX0NoYXJUKiBfX3MsIGNvbnN0 IF9BbGxvYyYgX19hID0gX0FsbG9jKCkpOwogICAgICBiYXNpY19zdHJpbmcoc2l6ZV90eXBlIF9f biwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EgPSBfQWxsb2MoKSk7CgogICAgICB0ZW1w bGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRl cmF0b3IgX19iZWcsIF9JbnB1dEl0ZXJhdG9yIF9fZW5kLAogICAgICAgICAgICAgICAgICAgICBj b25zdCBfQWxsb2MmIF9fYSA9IF9BbGxvYygpKTsKCiAgICAgIH5iYXNpY19zdHJpbmcoKQogICAg ICB7IF9NX3JlcCgpLT5fTV9kaXNwb3NlKHRoaXMtPmdldF9hbGxvY2F0b3IoKSk7IH0KCiAgICAg IGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3I9KGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp IHsgcmV0dXJuIHRoaXMtPmFzc2lnbihfX3N0cik7IH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAg ICAgb3BlcmF0b3I9KGNvbnN0IF9DaGFyVCogX19zKSB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19z KTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYykgeyBy ZXR1cm4gdGhpcy0+YXNzaWduKDEsIF9fYyk7IH0KCgogICAgICBpdGVyYXRvcgogICAgICBiZWdp bigpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9N X2RhdGEoKSk7CiAgICAgIH0KCiAgICAgIGNvbnN0X2l0ZXJhdG9yCiAgICAgIGJlZ2luKCkgY29u c3QKICAgICAgeyByZXR1cm4gY29uc3RfaXRlcmF0b3IoX01fZGF0YSgpKTsgfQoKICAgICAgaXRl cmF0b3IKICAgICAgZW5kKCkKICAgICAgewogICAgICAgICBfTV9sZWFrKCk7CiAgICAgICAgIHJl dHVybiBpdGVyYXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOwogICAgICB9CgogICAgICBj b25zdF9pdGVyYXRvcgogICAgICBlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9pdGVy YXRvcihfTV9kYXRhKCkgKyB0aGlzLT5zaXplKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9y CiAgICAgIHJiZWdpbigpCiAgICAgIHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5k KCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0 CiAgICAgIHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IodGhpcy0+ZW5kKCkpOyB9Cgog ICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKQogICAgICB7IHJldHVybiByZXZlcnNl X2l0ZXJhdG9yKHRoaXMtPmJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y CiAgICAgIHJlbmQoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KHRoaXMtPmJlZ2luKCkpOyB9CgogICAgcHVibGljOgoKICAgICAgc2l6ZV90eXBlCiAgICAgIHNp emUoKSBjb25zdCB7IHJldHVybiBfTV9yZXAoKS0+X01fbGVuZ3RoOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgbGVuZ3RoKCkgY29uc3QgeyByZXR1cm4gX01fcmVwKCktPl9NX2xlbmd0aDsgfQoK ICAgICAgc2l6ZV90eXBlCiAgICAgIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4gX1JlcDo6X1Nf bWF4X3NpemU7IH0KCiAgICAgIHZvaWQKICAgICAgcmVzaXplKHNpemVfdHlwZSBfX24sIF9DaGFy VCBfX2MpOwoKICAgICAgdm9pZAogICAgICByZXNpemUoc2l6ZV90eXBlIF9fbikgeyB0aGlzLT5y ZXNpemUoX19uLCBfQ2hhclQoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBjYXBhY2l0eSgp IGNvbnN0IHsgcmV0dXJuIF9NX3JlcCgpLT5fTV9jYXBhY2l0eTsgfQoKICAgICAgdm9pZAogICAg ICByZXNlcnZlKHNpemVfdHlwZSBfX3Jlc19hcmcgPSAwKTsKCiAgICAgIHZvaWQKICAgICAgY2xl YXIoKSB7IF9NX211dGF0ZSgwLCB0aGlzLT5zaXplKCksIDApOyB9CgogICAgICBib29sCiAgICAg IGVtcHR5KCkgY29uc3QgeyByZXR1cm4gdGhpcy0+c2l6ZSgpID09IDA7IH0KCgogICAgICBjb25z dF9yZWZlcmVuY2UKICAgICAgb3BlcmF0b3JbXSAoc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAg ICB7IHJldHVybiBfTV9kYXRhKClbX19wb3NdOyB9CgogICAgICByZWZlcmVuY2UKICAgICAgb3Bl cmF0b3JbXShzaXplX3R5cGUgX19wb3MpCiAgICAgIHsKICAgICAgICBfTV9sZWFrKCk7CiAgICAg ICAgcmV0dXJuIF9NX2RhdGEoKVtfX3Bvc107CiAgICAgIH0KCiAgICAgIGNvbnN0X3JlZmVyZW5j ZQogICAgICBhdChzaXplX3R5cGUgX19uKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKF9fbiA+ PSB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3Ry aW5nOjphdCIpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsKICAgICAgfQoKICAgICAg cmVmZXJlbmNlCiAgICAgIGF0KHNpemVfdHlwZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19u ID49IHNpemUoKSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 OmF0Iik7CiAgICAgICAgX01fbGVhaygpOwogICAgICAgIHJldHVybiBfTV9kYXRhKClbX19uXTsK ICAgICAgfQoKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgb3BlcmF0b3IrPShjb25zdCBiYXNp Y19zdHJpbmcmIF9fc3RyKSB7IHJldHVybiB0aGlzLT5hcHBlbmQoX19zdHIpOyB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9yKz0oY29uc3QgX0NoYXJUKiBfX3MpIHsgcmV0dXJu IHRoaXMtPmFwcGVuZChfX3MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIG9wZXJhdG9y Kz0oX0NoYXJUIF9fYykgeyByZXR1cm4gdGhpcy0+YXBwZW5kKHNpemVfdHlwZSgxKSwgX19jKTsg fQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBf X3N0cik7CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJp bmcmIF9fc3RyLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pOwoKICAgICAgYmFzaWNf c3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pOwoK ICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBhcHBlbmQoY29uc3QgX0NoYXJUKiBfX3MpCiAgICAg IHsgcmV0dXJuIHRoaXMtPmFwcGVuZChfX3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0K CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXBwZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBf X2MpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNf c3RyaW5nJgogICAgICAgIGFwcGVuZChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVy YXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9pZW5kKCksIF9N X2llbmQoKSwgX19maXJzdCwgX19sYXN0KTsgfQoKICAgICAgdm9pZAogICAgICBwdXNoX2JhY2so X0NoYXJUIF9fYykKICAgICAgeyB0aGlzLT5yZXBsYWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCAx LCBfX2MpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyKTsKCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikKICAgICAg ewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAg ICAgaWYgKF9fcG9zID4gX19zdHJzaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2Uo ImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuID0gX19u IDwgX19zdHJzaXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbmV3c2l6ZSA9 IF9fdGVzdG4gPyBfX24gOiBfX3N0cnNpemUgLSBfX3BvczsKICAgICAgICByZXR1cm4gdGhpcy0+ YXNzaWduKF9fc3RyLl9NX2RhdGEoKSArIF9fcG9zLCBfX25ld3NpemUpOwogICAgICB9CgogICAg ICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fbikKICAgICAgewogICAgICAgIGlmIChfX24gPiB0aGlzLT5tYXhfc2l6ZSgpKQogICAgICAg ICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJhc2ljX3N0cmluZzo6YXNzaWduIik7CiAgICAgICAg aWYgKF9NX3JlcCgpLT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19z LCBfTV9kYXRhKCkpCiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRh KCkgKyB0aGlzLT5zaXplKCksIF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZl KF9NX2liZWdpbigpLCBfTV9pZW5kKCksIF9fcywgX19zICsgX19uKTsKICAgICAgICBlbHNlCiAg ICAgICAgICB7CgogICAgICAgICAgICBjb25zdCBzaXplX3R5cGUgX19wb3MgPSBfX3MgLSBfTV9k YXRhKCk7CiAgICAgICAgICAgIGlmIChfX3BvcyA+PSBfX24pCiAgICAgICAgICAgICAgdHJhaXRz X3R5cGU6OmNvcHkoX01fZGF0YSgpLCBfX3MsIF9fbik7CiAgICAgICAgICAgIGVsc2UgaWYgKF9f cG9zKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjptb3ZlKF9NX2RhdGEoKSwgX19zLCBfX24p OwogICAgICAgICAgICBfTV9yZXAoKS0+X01fbGVuZ3RoID0gX19uOwogICAgICAgICAgICBfTV9k YXRhKClbX19uXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwogICAgICAgICAgICByZXR1cm4gKnRoaXM7 CiAgICAgICAgICB9CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgYXNzaWduKGNv bnN0IF9DaGFyVCogX19zKQogICAgICB7IHJldHVybiB0aGlzLT5hc3NpZ24oX19zLCB0cmFpdHNf dHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGFzc2lnbihz aXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9N X2liZWdpbigpLCBfTV9pZW5kKCksIF9fbiwgX19jKTsgfQoKICAgICAgdGVtcGxhdGU8Y2xhc3Mg X0lucHV0SXRlcmF0b3I+CiAgICAgICAgYmFzaWNfc3RyaW5nJgogICAgICAgIGFzc2lnbihfSW5w dXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAgICAgICAgeyByZXR1 cm4gdGhpcy0+cmVwbGFjZShfTV9pYmVnaW4oKSwgX01faWVuZCgpLCBfX2ZpcnN0LCBfX2xhc3Qp OyB9CgogICAgICB2b2lkCiAgICAgIGluc2VydChpdGVyYXRvciBfX3AsIHNpemVfdHlwZSBfX24s IF9DaGFyVCBfX2MpCiAgICAgIHsgdGhpcy0+cmVwbGFjZShfX3AsIF9fcCwgX19uLCBfX2MpOyB9 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICAgICAgICB2b2lkIGluc2Vy dChpdGVyYXRvciBfX3AsIF9JbnB1dEl0ZXJhdG9yIF9fYmVnLCBfSW5wdXRJdGVyYXRvciBfX2Vu ZCkKICAgICAgICB7IHRoaXMtPnJlcGxhY2UoX19wLCBfX3AsIF9fYmVnLCBfX2VuZCk7IH0KCiAg ICAgIGJhc2ljX3N0cmluZyYKICAgICAgaW5zZXJ0KHNpemVfdHlwZSBfX3BvczEsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmluc2VydChfX3BvczEsIF9f c3RyLCAwLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIGluc2Vy dChzaXplX3R5cGUgX19wb3MxLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLAogICAgICAgICAg ICAgc2l6ZV90eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbikKICAgICAgewogICAgICAgIGNvbnN0 IHNpemVfdHlwZSBfX3N0cnNpemUgPSBfX3N0ci5zaXplKCk7CiAgICAgICAgaWYgKF9fcG9zMiA+ IF9fc3Ryc2l6ZSkKICAgICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6 Omluc2VydCIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0biA9IF9fbiA8IF9fc3Ryc2l6ZSAt IF9fcG9zMjsKICAgICAgICBjb25zdCBzaXplX3R5cGUgX19uZXdzaXplID0gX190ZXN0biA/IF9f biA6IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgICByZXR1cm4gdGhpcy0+aW5zZXJ0KF9fcG9z MSwgX19zdHIuX01fZGF0YSgpICsgX19wb3MyLCBfX25ld3NpemUpOwogICAgICB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog X19zLCBzaXplX3R5cGUgX19uKQogICAgICB7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fc2l6 ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAgICBf X3Rocm93X291dF9vZl9yYW5nZSgiYmFzaWNfc3RyaW5nOjppbnNlcnQiKTsKICAgICAgICBpZiAo X19zaXplID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbikKICAgICAgICAgIF9fdGhyb3dfbGVuZ3Ro X2Vycm9yKCJiYXNpY19zdHJpbmc6Omluc2VydCIpOwogICAgICAgIGlmIChfTV9yZXAoKS0+X01f aXNfc2hhcmVkKCkgfHwgbGVzczxjb25zdCBfQ2hhclQqPigpKF9fcywgX01fZGF0YSgpKQogICAg ICAgICAgICB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX01fZGF0YSgpICsgX19zaXplLCBfX3Mp KQogICAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pYmVnaW4oKSArIF9fcG9zLCBf TV9pYmVnaW4oKSArIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3Ms IF9fcyArIF9fbik7CiAgICAgICAgZWxzZQogICAgICAgICAgewoKCgogICAgICAgICAgICBjb25z dCBzaXplX3R5cGUgX19vZmYgPSBfX3MgLSBfTV9kYXRhKCk7CiAgICAgICAgICAgIF9NX211dGF0 ZShfX3BvcywgMCwgX19uKTsKICAgICAgICAgICAgX19zID0gX01fZGF0YSgpICsgX19vZmY7CiAg ICAgICAgICAgIF9DaGFyVCogX19wID0gX01fZGF0YSgpICsgX19wb3M7CiAgICAgICAgICAgIGlm IChfX3MgKyBfX24gPD0gX19wKQogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcCwg X19zLCBfX24pOwogICAgICAgICAgICBlbHNlIGlmIChfX3MgPj0gX19wKQogICAgICAgICAgICAg IHRyYWl0c190eXBlOjpjb3B5KF9fcCwgX19zICsgX19uLCBfX24pOwogICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX19wLCBf X3MsIF9fcCAtIF9fcyk7CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3AgKyAo X19wIC0gX19zKSwgX19wICsgX19uLCBfX24gLSAoX19wIC0gX19zKSk7CiAgICAgICAgICAgICAg fQogICAgICAgICAgICByZXR1cm4gKnRoaXM7CiAgICAgICAgICB9CiAgICAgICB9CgogICAgICBi YXNpY19zdHJpbmcmCiAgICAgIGluc2VydChzaXplX3R5cGUgX19wb3MsIGNvbnN0IF9DaGFyVCog X19zKQogICAgICB7IHJldHVybiB0aGlzLT5pbnNlcnQoX19wb3MsIF9fcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICBpbnNlcnQoc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBfQ2hhclQgX19jKQogICAgICB7CiAgICAgICAgdGhp cy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgX19uLCBfX2MpOwogICAgICAgIHJldHVybiAqdGhp czsKICAgICAgfQoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0KGl0ZXJhdG9yIF9fcCwgX0No YXJUIF9fYyA9IF9DaGFyVCgpKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9fcG9zID0gX19w IC0gX01faWJlZ2luKCk7CiAgICAgICAgdGhpcy0+aW5zZXJ0KF9NX2NoZWNrKF9fcG9zKSwgc2l6 ZV90eXBlKDEpLCBfX2MpOwogICAgICAgIF9NX3JlcCgpLT5fTV9zZXRfbGVha2VkKCk7CiAgICAg ICAgcmV0dXJuIHRoaXMtPl9NX2liZWdpbigpICsgX19wb3M7CiAgICAgIH0KCiAgICAgIGJhc2lj X3N0cmluZyYKICAgICAgZXJhc2Uoc2l6ZV90eXBlIF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9 IG5wb3MpCiAgICAgIHsKICAgICAgICByZXR1cm4gdGhpcy0+cmVwbGFjZShfTV9jaGVjayhfX3Bv cyksIF9NX2ZvbGQoX19wb3MsIF9fbiksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01f ZGF0YSgpLCBfTV9kYXRhKCkpOwogICAgICB9CgogICAgICBpdGVyYXRvcgogICAgICBlcmFzZShp dGVyYXRvciBfX3Bvc2l0aW9uKQogICAgICB7CiAgICAgICAgc2l6ZV90eXBlIF9faSA9IF9fcG9z aXRpb24gLSBfTV9pYmVnaW4oKTsKICAgICAgICB0aGlzLT5yZXBsYWNlKF9fcG9zaXRpb24sIF9f cG9zaXRpb24gKyAxLCBfTV9kYXRhKCksIF9NX2RhdGEoKSk7CiAgICAgICAgX01fcmVwKCktPl9N X3NldF9sZWFrZWQoKTsKICAgICAgICByZXR1cm4gX01faWJlZ2luKCkgKyBfX2k7CiAgICAgIH0K CiAgICAgIGl0ZXJhdG9yCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f bGFzdCkKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX2kgPSBfX2ZpcnN0IC0gX01faWJlZ2lu KCk7CiAgICAgICAgdGhpcy0+cmVwbGFjZShfX2ZpcnN0LCBfX2xhc3QsIF9NX2RhdGEoKSwgX01f ZGF0YSgpKTsKICAgICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgICAgcmV0dXJu IF9NX2liZWdpbigpICsgX19pOwogICAgICB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyKQogICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9fcG9zLCBfX24sIF9fc3RyLl9N X2RhdGEoKSwgX19zdHIuc2l6ZSgpKTsgfQoKICAgICAgYmFzaWNfc3RyaW5nJgogICAgICByZXBs YWNlKHNpemVfdHlwZSBfX3BvczEsIHNpemVfdHlwZSBfX24xLCBjb25zdCBiYXNpY19zdHJpbmcm IF9fc3RyLAogICAgICAgICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKTsK CiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVf dHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19u MikKICAgICAgewogICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7 CiAgICAgICAgaWYgKF9fcG9zID4gX19zaXplKQogICAgICAgICAgX190aHJvd19vdXRfb2ZfcmFu Z2UoImJhc2ljX3N0cmluZzo6cmVwbGFjZSIpOwogICAgICAgIGNvbnN0IGJvb2wgX190ZXN0bjEg PSBfX24xIDwgX19zaXplIC0gX19wb3M7CiAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fZm9sZG4x ID0gX190ZXN0bjEgPyBfX24xIDogX19zaXplIC0gX19wb3M7CiAgICAgICAgaWYgKF9fc2l6ZSAt IF9fZm9sZG4xID4gdGhpcy0+bWF4X3NpemUoKSAtIF9fbjIpCiAgICAgICAgICBfX3Rocm93X2xl bmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgICAgaWYgKF9NX3JlcCgp LT5fTV9pc19zaGFyZWQoKSB8fCBsZXNzPGNvbnN0IF9DaGFyVCo+KCkoX19zLCBfTV9kYXRhKCkp CiAgICAgICAgICAgIHx8IGxlc3M8Y29uc3QgX0NoYXJUKj4oKShfTV9kYXRhKCkgKyBfX3NpemUs IF9fcykpCiAgICAgICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2liZWdpbigpICsgX19w b3MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9NX2liZWdpbigpICsgX19wb3Mg KyBfX2ZvbGRuMSwgX19zLCBfX3MgKyBfX24yKTsKCiAgICAgICAgZWxzZSByZXR1cm4KICAgICAg ICAgICAgICAgX01fcmVwbGFjZShfTV9pYmVnaW4oKSArIF9fcG9zLCBfTV9pYmVnaW4oKSArIF9f cG9zICsgX19mb2xkbjEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgX19zLCBfX3MgKyBfX24y LAogICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIGl0ZXJhdG9yX3RyYWl0czxjb25z dCBfQ2hhclQqPjo6aXRlcmF0b3JfY2F0ZWdvcnkoKSk7CiAgICAgIH0KCiAgICAgIGJhc2ljX3N0 cmluZyYKICAgICAgcmVwbGFjZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25z dCBfQ2hhclQqIF9fcykKICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX3BvcywgX19uMSwg X19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAg ICAgIHJlcGxhY2Uoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgc2l6ZV90eXBlIF9f bjIsIF9DaGFyVCBfX2MpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX01fY2hlY2soX19w b3MpLCBfTV9mb2xkKF9fcG9zLCBfX24xKSwgX19uMiwgX19jKTsgfQoKICAgICAgYmFzaWNfc3Ry aW5nJgogICAgICByZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSwgX19p MiwgX19zdHIuX01fZGF0YSgpLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBiYXNpY19zdHJpbmcm CiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24pCiAgICAgIHsg cmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2liZWdpbigpLCBfX2kyIC0gX19pMSwgX19z LCBfX24pOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19p MSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX3MpCiAgICAgIHsgcmV0dXJuIHRoaXMt PnJlcGxhY2UoX19pMSwgX19pMiwgX19zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9Cgog ICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgc2l6ZV90eXBlIF9fbiwgX0NoYXJUIF9fYyk7CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBf SW5wdXRJdGVyYXRvcj4KICAgICAgICBiYXNpY19zdHJpbmcmCiAgICAgICAgcmVwbGFjZShpdGVy YXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLAogICAgICAgICAgICAgICAgX0lucHV0SXRlcmF0b3Ig X19rMSwgX0lucHV0SXRlcmF0b3IgX19rMikKICAgICAgICB7IHJldHVybiBfTV9yZXBsYWNlKF9f aTEsIF9faTIsIF9fazEsIF9fazIsCiAgICAgICAgICAgICB0eXBlbmFtZSBpdGVyYXRvcl90cmFp dHM8X0lucHV0SXRlcmF0b3I+OjppdGVyYXRvcl9jYXRlZ29yeSgpKTsgfQoKCgogICAgICBiYXNp Y19zdHJpbmcmCiAgICAgIHJlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgX0No YXJUKiBfX2sxLCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShf X2kxIC0gX01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJl cGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgY29uc3QgX0NoYXJUKiBfX2sxLCBj b25zdCBfQ2hhclQqIF9fazIpCiAgICAgICAgeyByZXR1cm4gdGhpcy0+cmVwbGFjZShfX2kxIC0g X01faWJlZ2luKCksIF9faTIgLSBfX2kxLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X19rMSwgX19rMiAtIF9fazEpOyB9CgogICAgICBiYXNpY19zdHJpbmcmCiAgICAgIHJlcGxhY2Uo aXRlcmF0b3IgX19pMSwgaXRlcmF0b3IgX19pMiwgaXRlcmF0b3IgX19rMSwgaXRlcmF0b3IgX19r MikKICAgICAgICB7IHJldHVybiB0aGlzLT5yZXBsYWNlKF9faTEgLSBfTV9pYmVnaW4oKSwgX19p MiAtIF9faTEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2sxLmJhc2UoKSwgX19r MiAtIF9fazEpOwogICAgICAgIH0KCiAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgcmVwbGFjZShp dGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBjb25zdF9pdGVyYXRvciBfX2sxLCBjb25zdF9p dGVyYXRvciBfX2syKQogICAgICAgIHsgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19pMSAtIF9NX2li ZWdpbigpLCBfX2kyIC0gX19pMSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fazEu YmFzZSgpLCBfX2syIC0gX19rMSk7CiAgICAgICAgfQoKICAgIHByaXZhdGU6CiAgICAgIHRlbXBs YXRlPGNsYXNzIF9JbnB1dEl0ZXJhdG9yPgogICAgICAgIGJhc2ljX3N0cmluZyYKICAgICAgICBf TV9yZXBsYWNlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9JbnB1dEl0ZXJhdG9yIF9f azEsCiAgICAgICAgICAgICAgICAgICBfSW5wdXRJdGVyYXRvciBfX2syLCBpbnB1dF9pdGVyYXRv cl90YWcpOwoKICAgICAgdGVtcGxhdGU8Y2xhc3MgX0ZvcndhcmRJdGVyYXRvcj4KICAgICAgICBi YXNpY19zdHJpbmcmCiAgICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJh dG9yIF9faTIsIF9Gb3J3YXJkSXRlcmF0b3IgX19rMSwKICAgICAgICAgICAgICAgICAgIF9Gb3J3 YXJkSXRlcmF0b3IgX19rMik7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Jbkl0ZXI+CiAgICAg ICAgc3RhdGljIF9DaGFyVCoKICAgICAgICBfU19jb25zdHJ1Y3RfYXV4KF9Jbkl0ZXIgX19iZWcs IF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgICAg ICAgX19mYWxzZV90eXBlKQogICAgICAgIHsKICAgICAgICAgIHR5cGVkZWYgdHlwZW5hbWUgaXRl cmF0b3JfdHJhaXRzPF9Jbkl0ZXI+OjppdGVyYXRvcl9jYXRlZ29yeSBfVGFnOwogICAgICAgICAg cmV0dXJuIF9TX2NvbnN0cnVjdChfX2JlZywgX19lbmQsIF9fYSwgX1RhZygpKTsKICAgICAgICB9 CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAg ICAgICAgX1NfY29uc3RydWN0X2F1eChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25z dCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAgICAgICAgIF9fdHJ1ZV90eXBlKQogICAg ICAgIHsKICAgICAgICAgIHJldHVybiBfU19jb25zdHJ1Y3Qoc3RhdGljX2Nhc3Q8c2l6ZV90eXBl PihfX2JlZyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXRpY19jYXN0PHZhbHVl X3R5cGU+KF9fZW5kKSwgX19hKTsKICAgICAgICB9CgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5J dGVyPgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIg X19iZWcsIF9Jbkl0ZXIgX19lbmQsIGNvbnN0IF9BbGxvYyYgX19hKQogICAgICAgIHsKICAgICAg ICAgIHR5cGVkZWYgdHlwZW5hbWUgX0lzX2ludGVnZXI8X0luSXRlcj46Ol9JbnRlZ3JhbCBfSW50 ZWdyYWw7CiAgICAgICAgICByZXR1cm4gX1NfY29uc3RydWN0X2F1eChfX2JlZywgX19lbmQsIF9f YSwgX0ludGVncmFsKCkpOwogICAgICAgIH0KCgogICAgICB0ZW1wbGF0ZTxjbGFzcyBfSW5JdGVy PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9f YmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxsb2MmIF9fYSwKICAgICAgICAgICAgICAgICAg ICAgIGlucHV0X2l0ZXJhdG9yX3RhZyk7CgoKCiAgICAgIHRlbXBsYXRlPGNsYXNzIF9Gd2RJdGVy PgogICAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgICAgX1NfY29uc3RydWN0KF9Gd2RJdGVyIF9f YmVnLCBfRndkSXRlciBfX2VuZCwgY29uc3QgX0FsbG9jJiBfX2EsCiAgICAgICAgICAgICAgICAg ICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKTsKCiAgICAgIHN0YXRpYyBfQ2hhclQqCiAgICAgIF9T X2NvbnN0cnVjdChzaXplX3R5cGUgX19yZXEsIF9DaGFyVCBfX2MsIGNvbnN0IF9BbGxvYyYgX19h KTsKCiAgICBwdWJsaWM6CgogICAgICBzaXplX3R5cGUKICAgICAgY29weShfQ2hhclQqIF9fcywg c2l6ZV90eXBlIF9fbiwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3Q7CgogICAgICB2b2lkCiAg ICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19zKTsKCgog ICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGNfc3RyKCkgY29uc3QKICAgICAgewoKICAgICAgICBz aXplX3R5cGUgX19uID0gdGhpcy0+c2l6ZSgpOwogICAgICAgIHRyYWl0c190eXBlOjphc3NpZ24o X01fZGF0YSgpW19fbl0sIF9SZXA6Ol9TX3Rlcm1pbmFsKTsKICAgICAgICByZXR1cm4gX01fZGF0 YSgpOwogICAgICB9CgogICAgICBjb25zdCBfQ2hhclQqCiAgICAgIGRhdGEoKSBjb25zdCB7IHJl dHVybiBfTV9kYXRhKCk7IH0KCiAgICAgIGFsbG9jYXRvcl90eXBlCiAgICAgIGdldF9hbGxvY2F0 b3IoKSBjb25zdCB7IHJldHVybiBfTV9kYXRhcGx1czsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAg IGZpbmQoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg Y29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZChjb25zdCBiYXNpY19zdHJpbmcmIF9f c3RyLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5k KF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSAwKSBjb25zdAog ICAgICB7IHJldHVybiB0aGlzLT5maW5kKF9fcywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgo X19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlw ZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKGNvbnN0IGJh c2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IG5wb3MpIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPnJmaW5kKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0K CiAgICAgIHNpemVfdHlwZQogICAgICByZmluZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICByZmlu ZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+cmZpbmQoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIHJmaW5kKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBf X3BvcyA9IG5wb3MpIGNvbnN0OwoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfb2Yo Y29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAg ICAgeyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0 ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9maXJzdF9vZihjb25zdCBf Q2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAg IHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X29mKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5 cGUgX19wb3MgPSAwKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5maW5kX2ZpcnN0X29mKF9f cywgX19wb3MsIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSk7IH0KCiAgICAgIHNpemVfdHlwZQog ICAgICBmaW5kX2ZpcnN0X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0 CiAgICAgIHsgcmV0dXJuIHRoaXMtPmZpbmQoX19jLCBfX3Bvcyk7IH0KCiAgICAgIHNpemVfdHlw ZQogICAgICBmaW5kX2xhc3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90eXBl IF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X29mKF9f c3RyLmRhdGEoKSwgX19wb3MsIF9fc3RyLnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAg ICBmaW5kX2xhc3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbikgY29uc3Q7CgogICAgICBzaXplX3R5cGUKICAgICAgZmluZF9sYXN0X29mKGNvbnN0 IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5maW5kX2xhc3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6Omxlbmd0aChfX3Mp KTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfbGFzdF9vZihfQ2hhclQgX19jLCBzaXpl X3R5cGUgX19wb3MgPSBucG9zKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5yZmluZChfX2Ms IF9fcG9zKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29mKGNvbnN0 IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0CiAgICAgIHsg cmV0dXJuIHRoaXMtPmZpbmRfZmlyc3Rfbm90X29mKF9fc3RyLmRhdGEoKSwgX19wb3MsIF9fc3Ry LnNpemUoKSk7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25vdF9vZihjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLAogICAgICAgICAgICAgICAgICAgICAgICBz aXplX3R5cGUgX19uKSBjb25zdDsKCiAgICAgIHNpemVfdHlwZQogICAgICBmaW5kX2ZpcnN0X25v dF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zID0gMCkgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZmluZF9maXJzdF9ub3Rfb2YoX19zLCBfX3BvcywgdHJhaXRzX3R5cGU6 Omxlbmd0aChfX3MpKTsgfQoKICAgICAgc2l6ZV90eXBlCiAgICAgIGZpbmRfZmlyc3Rfbm90X29m KF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcyA9IDApIGNvbnN0OwoKICAgICAgc2l6ZV90eXBl CiAgICAgIGZpbmRfbGFzdF9ub3Rfb2YoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25v dF9vZihfX3N0ci5kYXRhKCksIF9fcG9zLCBfX3N0ci5zaXplKCkpOyB9CgogICAgICBzaXplX3R5 cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9f cG9zLAogICAgICAgICAgICAgICAgICAgICAgIHNpemVfdHlwZSBfX24pIGNvbnN0OwogICAgICBz aXplX3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90 eXBlIF9fcG9zID0gbnBvcykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmluZF9sYXN0X25v dF9vZihfX3MsIF9fcG9zLCB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcykpOyB9CgogICAgICBzaXpl X3R5cGUKICAgICAgZmluZF9sYXN0X25vdF9vZihfQ2hhclQgX19jLCBzaXplX3R5cGUgX19wb3Mg PSBucG9zKSBjb25zdDsKCiAgICAgIGJhc2ljX3N0cmluZwogICAgICBzdWJzdHIoc2l6ZV90eXBl IF9fcG9zID0gMCwgc2l6ZV90eXBlIF9fbiA9IG5wb3MpIGNvbnN0CiAgICAgIHsKICAgICAgICBp ZiAoX19wb3MgPiB0aGlzLT5zaXplKCkpCiAgICAgICAgICBfX3Rocm93X291dF9vZl9yYW5nZSgi YmFzaWNfc3RyaW5nOjpzdWJzdHIiKTsKICAgICAgICByZXR1cm4gYmFzaWNfc3RyaW5nKCp0aGlz LCBfX3BvcywgX19uKTsKICAgICAgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgYmFz aWNfc3RyaW5nJiBfX3N0cikgY29uc3QKICAgICAgewogICAgICAgIHNpemVfdHlwZSBfX3NpemUg PSB0aGlzLT5zaXplKCk7CiAgICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBfX3N0ci5zaXplKCk7 CiAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gbWluKF9fc2l6ZSwgX19vc2l6ZSk7CgogICAgICAg IGludCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCksIF9fc3RyLmRhdGEoKSwg X19sZW4pOwogICAgICAgIGlmICghX19yKQogICAgICAgICAgX19yID0gX19zaXplIC0gX19vc2l6 ZTsKICAgICAgICByZXR1cm4gX19yOwogICAgICB9CgogICAgICBpbnQKICAgICAgY29tcGFyZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24sIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIp IGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6ZV90 eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgICAgc2l6ZV90 eXBlIF9fcG9zMiwgc2l6ZV90eXBlIF9fbjIpIGNvbnN0OwoKICAgICAgaW50CiAgICAgIGNvbXBh cmUoY29uc3QgX0NoYXJUKiBfX3MpIGNvbnN0OwoKCgogICAgICBpbnQKICAgICAgY29tcGFyZShz aXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24xLCBjb25zdCBfQ2hhclQqIF9fcykgY29uc3Q7 CgogICAgICBpbnQKICAgICAgY29tcGFyZShzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24x LCBjb25zdCBfQ2hhclQqIF9fcywKICAgICAgICAgICAgICBzaXplX3R5cGUgX19uMikgY29uc3Q7 CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlw ZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OgogICAgYmFzaWNfc3RyaW5nKCkKICAgIDogX01fZGF0YXBsdXMoX1NfZW1wdHlfcmVw KCkuX01fcmVmY29weSgpLCBfQWxsb2MoKSkgeyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxf Q2hhclQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsKICAgICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9f c3RyLmFwcGVuZChfX3Jocyk7CiAgICAgIHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBi YXNpY19zdHJpbmc8X0NoYXJULF9UcmFpdHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9D aGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCxfVHJh aXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULF9UcmFp dHMsX0FsbG9jPgogICAgb3BlcmF0b3IrKF9DaGFyVCBfX2xocywgY29uc3QgYmFzaWNfc3RyaW5n PF9DaGFyVCxfVHJhaXRzLF9BbGxvYz4mIF9fcmhzKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2lj X3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgY29u c3QgX0NoYXJUKiBfX3JocykKICAgIHsKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVuZChfX3Jocyk7CiAgICAg IHJldHVybiBfX3N0cjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLCBfQ2hhclQgX19yaHMpCiAgICB7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBl OwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVf dHlwZTsKICAgICAgX19zdHJpbmdfdHlwZSBfX3N0cihfX2xocyk7CiAgICAgIF9fc3RyLmFwcGVu ZChfX3NpemVfdHlwZSgxKSwgX19yaHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhz LmNvbXBhcmUoX19yaHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I9PShjb25zdCBfQ2hhclQqIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJp bmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNv bXBhcmUoX19saHMpID09IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I9 PShjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAg ICAgICAgICAgICAgY29uc3QgX0NoYXJUKiBfX3JocykKICAgIHsgcmV0dXJuIF9fbGhzLmNvbXBh cmUoX19yaHMpID09IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0o Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAg ICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9f cmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAg ICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhz KQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgIT0gMDsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlu bGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQog ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgIT0gMDsgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I8KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3Jo cykgPCAwOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywg dHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX2xocywKICAgICAgICAgICAgICBj b25zdCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPCAw OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5h bWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPChjb25zdCBfQ2hhclQqIF9f bGhzLAogICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19yaHMuY29tcGFyZShfX2xocykgPiAwOyB9CgoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj4oY29uc3QgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX2xo cy5jb21wYXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0 b3I+KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAog ICAgICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19yaHMpCiAgICB7IHJldHVybiBfX2xocy5jb21w YXJlKF9fcmhzKSA+IDA7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9vbAogICAgb3BlcmF0b3I+KGNv bnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7IHJldHVybiBfX3Jocy5jb21wYXJlKF9f bGhzKSA8IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPD0oY29uc3Qg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgICAg ICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQog ICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9fcmhzKQogICAg eyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPD0gMDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBi b29sCiAgICBvcGVyYXRvcjw9KGNvbnN0IF9DaGFyVCogX19saHMsCiAgICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogIHsgcmV0 dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpID49IDA7IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wK ICAgIG9wZXJhdG9yPj0oY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9j PiYgX19saHMsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFp dHMsIF9BbGxvYz4mIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0g MDsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fbGhzLAogICAgICAgICAgICAgICBjb25z dCBfQ2hhclQqIF9fcmhzKQogICAgeyByZXR1cm4gX19saHMuY29tcGFyZShfX3JocykgPj0gMDsg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1l IF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj49KGNvbnN0IF9DaGFyVCogX19s aHMsCiAgICAgICAgICAgICBjb25zdCBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+JiBfX3JocykKICAgIHsgcmV0dXJuIF9fcmhzLmNvbXBhcmUoX19saHMpIDw9IDA7IH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19saHMsCiAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz4mIF9fcmhzKQogICAgeyBfX2xocy5zd2FwKF9fcmhzKTsgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lzLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfb3N0cmVhbTxf Q2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mIF9fb3MsCiAgICAgICAgICAgICAgIGNvbnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mIF9fc3RyKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCxf VHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lz LAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0 ciwgX0NoYXJUIF9fZGVsaW0pOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBiYXNpY19pc3RyZWFtPF9DaGFy VCxfVHJhaXRzPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBf X2lzLAogICAgICAgICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBf X3N0cik7Cn0KIyA1NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyaW5nIiAyIDMKCgoK IyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDEg MwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2Mi IDMKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY29uc3QgdHlwZW5hbWUgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIF9SZXA6Ol9TX21heF9zaXplID0gKCgobnBvcyAt IHNpemVvZihfUmVwKSkvc2l6ZW9mKF9DaGFyVCkpIC0gMSkgLyA0OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0 IF9DaGFyVAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBf UmVwOjpfU190ZXJtaW5hbCA9IF9DaGFyVCgpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNvbnN0IHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6bnBvczsKCgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVu YW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAg YmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6X1NfZW1wdHlfcmVwX3N0b3Jh Z2VbCiAgICAoc2l6ZW9mKF9SZXApICsgc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2Yoc2l6ZV90eXBl KSAtIDEpL3NpemVvZihzaXplX3R5cGUpXTsKCgoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8dHlwZW5h bWUgX0luSXRlcj4KICAgICAgX0NoYXJUKgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgICAgX1NfY29uc3RydWN0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIg X19lbmQsIGNvbnN0IF9BbGxvYyYgX19hLAogICAgICAgICAgICAgICAgICAgaW5wdXRfaXRlcmF0 b3JfdGFnKQogICAgICB7CiAgICAgICAgaWYgKF9fYmVnID09IF9fZW5kICYmIF9fYSA9PSBfQWxs b2MoKSkKICAgICAgICAgIHJldHVybiBfU19lbXB0eV9yZXAoKS5fTV9yZWZjb3B5KCk7CgogICAg ICAgIF9DaGFyVCBfX2J1ZlsxMDBdOwogICAgICAgIHNpemVfdHlwZSBfX2kgPSAwOwogICAgICAg IHdoaWxlIChfX2JlZyAhPSBfX2VuZCAmJiBfX2kgPCBzaXplb2YoX19idWYpIC8gc2l6ZW9mKF9D aGFyVCkpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9fYnVmW19faSsrXSA9ICpfX2JlZzsKICAg ICAgICAgICAgKytfX2JlZzsKICAgICAgICAgIH0KICAgICAgICBfUmVwKiBfX3IgPSBfUmVwOjpf U19jcmVhdGUoX19pLCBfX2EpOwogICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fci0+X01fcmVm ZGF0YSgpLCBfX2J1ZiwgX19pKTsKICAgICAgICBfX3ItPl9NX2xlbmd0aCA9IF9faTsKICAgICAg ICB0cnkKICAgICAgICAgIHsKCgoKICAgICAgICAgICAgZm9yICg7OykKICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fcCA9IF9fci0+X01fcmVmZGF0YSgpICsgX19yLT5f TV9sZW5ndGg7CiAgICAgICAgICAgICAgICBfQ2hhclQqIF9fbGFzdCA9IF9fci0+X01fcmVmZGF0 YSgpICsgX19yLT5fTV9jYXBhY2l0eTsKICAgICAgICAgICAgICAgIGZvciAoOzspCiAgICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAg ICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgIF9fci0+X01fbGVuZ3Ro ID0gX19wIC0gX19yLT5fTV9yZWZkYXRhKCk7CiAgICAgICAgICAgICAgICAgICAgICAgICpfX3Ag PSBfUmVwOjpfU190ZXJtaW5hbDsKICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIF9fci0+ X01fcmVmZGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg IGlmIChfX3AgPT0gX19sYXN0KQogICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg ICAgICAgICAgICAgKl9fcCsrID0gKl9fYmVnOwogICAgICAgICAgICAgICAgICAgICsrX19iZWc7 CiAgICAgICAgICAgICAgICAgIH0KCiAgICAgICAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBf X3AgLSBfX3ItPl9NX3JlZmRhdGEoKTsKICAgICAgICAgICAgICAgIF9SZXAqIF9fYW5vdGhlciA9 IF9SZXA6Ol9TX2NyZWF0ZShfX2xlbiArIDEsIF9fYSk7CiAgICAgICAgICAgICAgICB0cmFpdHNf dHlwZTo6Y29weShfX2Fub3RoZXItPl9NX3JlZmRhdGEoKSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fci0+X01fcmVmZGF0YSgpLCBfX2xlbik7CiAgICAgICAgICAgICAgICBf X3ItPl9NX2Rlc3Ryb3koX19hKTsKICAgICAgICAgICAgICAgIF9fciA9IF9fYW5vdGhlcjsKICAg ICAgICAgICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19sZW47CiAgICAgICAgICAgICAgfQogICAg ICAgICAgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAgICAgICAgICAgX19yLT5f TV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93OwogICAgICAgICAgfQogICAgICAgIHJl dHVybiAwOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGUgPGNsYXNzIF9Jbkl0ZXI+CiAgICAg IF9DaGFyVCoKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICAgIF9TX2NvbnN0cnVjdChfSW5JdGVyIF9fYmVnLCBfSW5JdGVyIF9fZW5kLCBjb25zdCBfQWxs b2MmIF9fYSwKICAgICAgICAgICAgICAgICAgIGZvcndhcmRfaXRlcmF0b3JfdGFnKQogICAgICB7 CiAgICAgICAgc2l6ZV90eXBlIF9fZG5ldyA9IHN0YXRpY19jYXN0PHNpemVfdHlwZT4oZGlzdGFu Y2UoX19iZWcsIF9fZW5kKSk7CgoKICAgICAgICBpZiAoX19idWlsdGluX2V4cGVjdChfX2JlZyA9 PSBfSW5JdGVyKCksIDApKQogICAgICAgICAgX190aHJvd19sb2dpY19lcnJvcigiYXR0ZW1wdCB0 byBjcmVhdGUgc3RyaW5nIHdpdGggbnVsbCBwb2ludGVyIik7CgogICAgICAgIGlmIChfX2JlZyA9 PSBfX2VuZCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgICByZXR1cm4gX1NfZW1wdHlfcmVw KCkuX01fcmVmY29weSgpOwoKCiAgICAgICAgX1JlcCogX19yID0gX1JlcDo6X1NfY3JlYXRlKF9f ZG5ldywgX19hKTsKICAgICAgICB0cnkKICAgICAgICAgIHsgX1NfY29weV9jaGFycyhfX3ItPl9N X3JlZmRhdGEoKSwgX19iZWcsIF9fZW5kKTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAg IHsKICAgICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9fYSk7CiAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgfQogICAgICAgIF9fci0+X01fbGVuZ3RoID0gX19kbmV3OwoKICAgICAgICBfX3It Pl9NX3JlZmRhdGEoKVtfX2RuZXddID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAgICAgcmV0dXJu IF9fci0+X01fcmVmZGF0YSgpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBfU19jb25zdHJ1Y3Qoc2l6ZV90 eXBlIF9fbiwgX0NoYXJUIF9fYywgY29uc3QgX0FsbG9jJiBfX2EpCiAgICB7CiAgICAgIGlmIChf X24gPT0gMCAmJiBfX2EgPT0gX0FsbG9jKCkpCiAgICAgICAgcmV0dXJuIF9TX2VtcHR5X3JlcCgp Ll9NX3JlZmNvcHkoKTsKCgogICAgICBfUmVwKiBfX3IgPSBfUmVwOjpfU19jcmVhdGUoX19uLCBf X2EpOwogICAgICB0cnkKICAgICAgICB7CiAgICAgICAgICBpZiAoX19uKQogICAgICAgICAgICB0 cmFpdHNfdHlwZTo6YXNzaWduKF9fci0+X01fcmVmZGF0YSgpLCBfX24sIF9fYyk7CiAgICAgICAg fQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewogICAgICAgICAgX19yLT5fTV9kZXN0cm95KF9f YSk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX19u OwogICAgICBfX3ItPl9NX3JlZmRhdGEoKVtfX25dID0gX1JlcDo6X1NfdGVybWluYWw7CiAgICAg IHJldHVybiBfX3ItPl9NX3JlZmRhdGEoKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBiYXNpY19z dHJpbmcmIF9fc3RyKQogICAgOiBfTV9kYXRhcGx1cyhfX3N0ci5fTV9yZXAoKS0+X01fZ3JhYihf QWxsb2MoKSwgX19zdHIuZ2V0X2FsbG9jYXRvcigpKSwKICAgICAgICAgICAgICAgICBfX3N0ci5n ZXRfYWxsb2NhdG9yKCkpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQWxsb2MmIF9fYSkKICAg IDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KHNpemVfdHlwZSgpLCBfQ2hhclQoKSwgX19hKSwg X19hKQogICAgeyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPjo6CiAgICBiYXNpY19zdHJpbmcoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0ciwgc2l6ZV90 eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKQogICAgOiBfTV9kYXRhcGx1cyhfU19jb25zdHJ1Y3Qo X19zdHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19z dHIuX01fZm9sZChfX3BvcywgX19uKSwgX0FsbG9jKCkpLCBfQWxsb2MoKSkKICAgIHsgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYmFzaWNf c3RyaW5nKGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsIHNpemVfdHlwZSBfX3BvcywKICAgICAg ICAgICAgICAgICBzaXplX3R5cGUgX19uLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0 YXBsdXMoX1NfY29uc3RydWN0KF9fc3RyLl9NX2NoZWNrKF9fcG9zKSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9fc3RyLl9NX2ZvbGQoX19wb3MsIF9fbiksIF9fYSksIF9fYSkKICAg IHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVu YW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ogog ICAgYmFzaWNfc3RyaW5nKGNvbnN0IF9DaGFyVCogX19zLCBzaXplX3R5cGUgX19uLCBjb25zdCBf QWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0KF9fcywgX19zICsgX19u LCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhjb25zdCBfQ2hhclQqIF9fcywgY29uc3Qg X0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX3MsIF9fcyA/IF9f cyArIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKSA6IDAsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJU LCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGJhc2ljX3N0cmluZyhzaXplX3R5cGUgX19uLCBfQ2hh clQgX19jLCBjb25zdCBfQWxsb2MmIF9fYSkKICAgIDogX01fZGF0YXBsdXMoX1NfY29uc3RydWN0 KF9fbiwgX19jLCBfX2EpLCBfX2EpCiAgICB7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfSW5wdXRJdGVyPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6 CiAgICBiYXNpY19zdHJpbmcoX0lucHV0SXRlciBfX2JlZywgX0lucHV0SXRlciBfX2VuZCwgY29u c3QgX0FsbG9jJiBfX2EpCiAgICA6IF9NX2RhdGFwbHVzKF9TX2NvbnN0cnVjdChfX2JlZywgX19l bmQsIF9fYSksIF9fYSkKICAgIHsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9U cmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ Ojphc3NpZ24oY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKICAgICAgaWYgKF9NX3Jl cCgpICE9IF9fc3RyLl9NX3JlcCgpKQogICAgICAgIHsKCiAgICAgICAgICBhbGxvY2F0b3JfdHlw ZSBfX2EgPSB0aGlzLT5nZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0g X19zdHIuX01fcmVwKCktPl9NX2dyYWIoX19hLCBfX3N0ci5nZXRfYWxsb2NhdG9yKCkpOwogICAg ICAgICAgX01fcmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXAp OwogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAg IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9SZXA6OgogICAgX01fZGVz dHJveShjb25zdCBfQWxsb2MmIF9fYSkgdGhyb3cgKCkKICAgIHsKICAgICAgc2l6ZV90eXBlIF9f c2l6ZSA9IHNpemVvZihfUmVwKSArIChfTV9jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCk7 CiAgICAgIF9SYXdfYnl0ZXNfYWxsb2MoX19hKS5kZWFsbG9jYXRlKHJlaW50ZXJwcmV0X2Nhc3Q8 Y2hhcio+KHRoaXMpLCBfX3NpemUpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIGJhc2ljX3N0 cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46Ol9NX2xlYWtfaGFyZCgpCiAgICB7CiAgICAg IGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgX01fbXV0YXRlKDAsIDAsIDAp OwogICAgICBfTV9yZXAoKS0+X01fc2V0X2xlYWtlZCgpOwogICAgfQoKCgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAg IHZvaWQKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgX01f bXV0YXRlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbGVuMSwgc2l6ZV90eXBlIF9fbGVu MikKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fb2xkX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAg IGNvbnN0IHNpemVfdHlwZSBfX25ld19zaXplID0gX19vbGRfc2l6ZSArIF9fbGVuMiAtIF9fbGVu MTsKICAgICAgY29uc3QgX0NoYXJUKiBfX3NyYyA9IF9NX2RhdGEoKSArIF9fcG9zICsgX19sZW4x OwogICAgICBjb25zdCBzaXplX3R5cGUgX19ob3dfbXVjaCA9IF9fb2xkX3NpemUgLSBfX3BvcyAt IF9fbGVuMTsKCiAgICAgIGlmIChfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkgfHwgX19uZXdfc2l6 ZSA+IGNhcGFjaXR5KCkpCiAgICAgICAgewoKICAgICAgICAgIGFsbG9jYXRvcl90eXBlIF9fYSA9 IGdldF9hbGxvY2F0b3IoKTsKCgogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZXNpemUg PSA0MDk2OwogICAgICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9zaXplID0g NCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3BhZ2VfY2Fw YWNpdHkgPSAoX19wYWdlc2l6ZSAtIF9fbWFsbG9jX2hlYWRlcl9zaXplCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0gc2l6ZW9mKF9SZXApIC0gc2l6ZW9mKF9D aGFyVCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8gc2l6 ZW9mKF9DaGFyVCk7CiAgICAgICAgICBfUmVwKiBfX3I7CiAgICAgICAgICBpZiAoX19uZXdfc2l6 ZSA+IGNhcGFjaXR5KCkgJiYgX19uZXdfc2l6ZSA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAg ICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX25ld19zaXplID4gMipjYXBhY2l0eSgpID8KICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fbmV3X3NpemUgOiAyKmNhcGFjaXR5KCks IF9fYSk7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShf X25ld19zaXplLCBfX2EpOwogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAg ICBpZiAoX19wb3MpCiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3Jl ZmRhdGEoKSwgX01fZGF0YSgpLCBfX3Bvcyk7CiAgICAgICAgICAgICAgaWYgKF9faG93X211Y2gp CiAgICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSArIF9f cG9zICsgX19sZW4yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19zcmMsIF9f aG93X211Y2gpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rpc3Bvc2UoZ2V0X2FsbG9jYXRvcigpKTsKICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgICAgX01fcmVwKCktPl9NX2Rpc3Bv c2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX19yLT5fTV9yZWZkYXRhKCkpOwogICAgICB9CiAg ICAgIGVsc2UgaWYgKF9faG93X211Y2ggJiYgX19sZW4xICE9IF9fbGVuMikKICAgICAgICB7Cgog ICAgICAgICAgdHJhaXRzX3R5cGU6Om1vdmUoX01fZGF0YSgpICsgX19wb3MgKyBfX2xlbjIsIF9f c3JjLCBfX2hvd19tdWNoKTsKICAgICAgICB9CiAgICAgIF9NX3JlcCgpLT5fTV9zZXRfc2hhcmFi bGUoKTsKICAgICAgX01fcmVwKCktPl9NX2xlbmd0aCA9IF9fbmV3X3NpemU7CiAgICAgIF9NX2Rh dGEoKVtfX25ld19zaXplXSA9IF9SZXA6Ol9TX3Rlcm1pbmFsOwoKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2 b2lkCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpyZXNlcnZlKHNp emVfdHlwZSBfX3JlcykKICAgIHsKICAgICAgaWYgKF9fcmVzID4gdGhpcy0+Y2FwYWNpdHkoKSB8 fCBfTV9yZXAoKS0+X01faXNfc2hhcmVkKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9fcmVz ID4gdGhpcy0+bWF4X3NpemUoKSkKICAgICAgICAgICAgX190aHJvd19sZW5ndGhfZXJyb3IoImJh c2ljX3N0cmluZzo6cmVzZXJ2ZSIpOwoKICAgICAgICAgIGlmIChfX3JlcyA8IHRoaXMtPnNpemUo KSkKICAgICAgICAgICAgX19yZXMgPSB0aGlzLT5zaXplKCk7CiAgICAgICAgICBhbGxvY2F0b3Jf dHlwZSBfX2EgPSBnZXRfYWxsb2NhdG9yKCk7CiAgICAgICAgICBfQ2hhclQqIF9fdG1wID0gX01f cmVwKCktPl9NX2Nsb25lKF9fYSwgX19yZXMgLSB0aGlzLT5zaXplKCkpOwogICAgICAgICAgX01f cmVwKCktPl9NX2Rpc3Bvc2UoX19hKTsKICAgICAgICAgIF9NX2RhdGEoX190bXApOwogICAgICAg IH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0 eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9B bGxvYz46OnN3YXAoYmFzaWNfc3RyaW5nJiBfX3MpCiAgICB7CiAgICAgIGlmIChfTV9yZXAoKS0+ X01faXNfbGVha2VkKCkpCiAgICAgICAgX01fcmVwKCktPl9NX3NldF9zaGFyYWJsZSgpOwogICAg ICBpZiAoX19zLl9NX3JlcCgpLT5fTV9pc19sZWFrZWQoKSkKICAgICAgICBfX3MuX01fcmVwKCkt Pl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBpZiAodGhpcy0+Z2V0X2FsbG9jYXRvcigpID09IF9f cy5nZXRfYWxsb2NhdG9yKCkpCiAgICAgICAgewogICAgICAgICAgX0NoYXJUKiBfX3RtcCA9IF9N X2RhdGEoKTsKICAgICAgICAgIF9NX2RhdGEoX19zLl9NX2RhdGEoKSk7CiAgICAgICAgICBfX3Mu X01fZGF0YShfX3RtcCk7CiAgICAgICAgfQoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAg IGJhc2ljX3N0cmluZyBfX3RtcDEoX01faWJlZ2luKCksIF9NX2llbmQoKSwgX19zLmdldF9hbGxv Y2F0b3IoKSk7CiAgICAgICAgICBiYXNpY19zdHJpbmcgX190bXAyKF9fcy5fTV9pYmVnaW4oKSwg X19zLl9NX2llbmQoKSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy0+Z2V0X2Fs bG9jYXRvcigpKTsKICAgICAgICAgICp0aGlzID0gX190bXAyOwogICAgICAgICAgX19zID0gX190 bXAxOwogICAgICAgIH0KICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjpfUmVwKgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfU19jcmVhdGUoc2l6ZV90IF9fY2FwYWNpdHksIGNv bnN0IF9BbGxvYyYgX19hbGxvYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CgoKICAgICAgaWYgKF9fY2FwYWNp dHkgPiBfU19tYXhfc2l6ZSkKCgoKICAgICAgICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNf c3RyaW5nOjpfU19jcmVhdGUiKTsKCgoKCiAgICAgIHNpemVfdCBfX3NpemUgPSAoX19jYXBhY2l0 eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXplb2YoX1JlcCk7CiMgNDIxICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX3N0cmluZy50Y2MiIDMKICAgICAgY29uc3Qgc2l6 ZV90IF9fcGFnZXNpemUgPSA0MDk2OwogICAgICBjb25zdCBzaXplX3QgX19zdWJwYWdlc2l6ZSA9 IDEyODsKICAgICAgY29uc3Qgc2l6ZV90IF9fbWFsbG9jX2hlYWRlcl9zaXplID0gNCAqIHNpemVv ZiAodm9pZCopOwogICAgICBpZiAoKF9fc2l6ZSArIF9fbWFsbG9jX2hlYWRlcl9zaXplKSA+IF9f cGFnZXNpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9fZXh0cmEgPQogICAgICAgICAg ICAoX19wYWdlc2l6ZSAtICgoX19zaXplICsgX19tYWxsb2NfaGVhZGVyX3NpemUpICUgX19wYWdl c2l6ZSkpCiAgICAgICAgICAgICUgX19wYWdlc2l6ZTsKICAgICAgICAgIF9fY2FwYWNpdHkgKz0g X19leHRyYSAvIHNpemVvZihfQ2hhclQpOwogICAgICAgICAgX19zaXplID0gKF9fY2FwYWNpdHkg KyAxKSAqIHNpemVvZihfQ2hhclQpICsgc2l6ZW9mKF9SZXApOwogICAgICAgIH0KICAgICAgZWxz ZSBpZiAoX19zaXplID4gX19zdWJwYWdlc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3Qg X19leHRyYSA9CiAgICAgICAgICAgIChfX3N1YnBhZ2VzaXplIC0gKChfX3NpemUgKyBfX21hbGxv Y19oZWFkZXJfc2l6ZSkgJSBfX3N1YnBhZ2VzaXplKSkKICAgICAgICAgICAgJSBfX3N1YnBhZ2Vz aXplOwogICAgICAgICAgX19jYXBhY2l0eSArPSBfX2V4dHJhIC8gc2l6ZW9mKF9DaGFyVCk7CiAg ICAgICAgICBfX3NpemUgPSAoX19jYXBhY2l0eSArIDEpICogc2l6ZW9mKF9DaGFyVCkgKyBzaXpl b2YoX1JlcCk7CiAgICAgICAgfQoKCgogICAgICB2b2lkKiBfX3BsYWNlID0gX1Jhd19ieXRlc19h bGxvYyhfX2FsbG9jKS5hbGxvY2F0ZShfX3NpemUpOwogICAgICBfUmVwICpfX3AgPSBuZXcgKF9f cGxhY2UpIF9SZXA7CiAgICAgIF9fcC0+X01fY2FwYWNpdHkgPSBfX2NhcGFjaXR5OwogICAgICBf X3AtPl9NX3NldF9zaGFyYWJsZSgpOwogICAgICBfX3AtPl9NX2xlbmd0aCA9IDA7CiAgICAgIHJl dHVybiBfX3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgX0NoYXJUKgogICAgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6X1JlcDo6CiAgICBfTV9jbG9uZShjb25zdCBfQWxsb2MmIF9f YWxsb2MsIHNpemVfdHlwZSBfX3JlcykKICAgIHsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3Jl cXVlc3RlZF9jYXAgPSBfTV9sZW5ndGggKyBfX3JlczsKCiAgICAgIGNvbnN0IHNpemVfdHlwZSBf X3BhZ2VzaXplID0gNDA5NjsKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fbWFsbG9jX2hlYWRlcl9z aXplID0gNCAqIHNpemVvZiAodm9pZCopOwoKICAgICAgY29uc3Qgc2l6ZV90eXBlIF9fcGFnZV9j YXBhY2l0eSA9CiAgICAgICAgKF9fcGFnZXNpemUgLSBfX21hbGxvY19oZWFkZXJfc2l6ZSAtIHNp emVvZihfUmVwKSAtIHNpemVvZihfQ2hhclQpKQogICAgICAgIC8gc2l6ZW9mKF9DaGFyVCk7CiAg ICAgIF9SZXAqIF9fcjsKICAgICAgaWYgKF9fcmVxdWVzdGVkX2NhcCA+IF9NX2NhcGFjaXR5ICYm IF9fcmVxdWVzdGVkX2NhcCA+IF9fcGFnZV9jYXBhY2l0eSkKCiAgICAgICAgX19yID0gX1JlcDo6 X1NfY3JlYXRlKF9fcmVxdWVzdGVkX2NhcCA+IDIqX01fY2FwYWNpdHkgPwogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBfX3JlcXVlc3RlZF9jYXAgOiAyKl9NX2NhcGFjaXR5LCBfX2FsbG9j KTsKICAgICAgZWxzZQogICAgICAgIF9fciA9IF9SZXA6Ol9TX2NyZWF0ZShfX3JlcXVlc3RlZF9j YXAsIF9fYWxsb2MpOwoKICAgICAgaWYgKF9NX2xlbmd0aCkKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgeyB0cmFpdHNfdHlwZTo6Y29weShfX3ItPl9NX3JlZmRhdGEoKSwgX01f cmVmZGF0YSgpLCBfTV9sZW5ndGgpOyB9CiAgICAgICAgICBjYXRjaCguLi4pCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfX3ItPl9NX2Rlc3Ryb3koX19hbGxvYyk7CiAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF9fci0+X01fbGVuZ3RoID0gX01f bGVuZ3RoOwogICAgICByZXR1cm4gX19yLT5fTV9yZWZkYXRhKCk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAg dm9pZAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6cmVzaXplKHNp emVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIGlmIChfX24gPiBtYXhfc2l6ZSgp KQogICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKCJiYXNpY19zdHJpbmc6OnJlc2l6ZSIpOwog ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplIDwg X19uKQogICAgICAgIHRoaXMtPmFwcGVuZChfX24gLSBfX3NpemUsIF9fYyk7CiAgICAgIGVsc2Ug aWYgKF9fbiA8IF9fc2l6ZSkKICAgICAgICB0aGlzLT5lcmFzZShfX24pOwoKICAgIH0KCgoKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0Fs bG9jPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0lucHV0SXRlcj4KICAgICAgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPjo6CiAgICAgIF9NX3JlcGxhY2UoaXRlcmF0b3IgX19pMSwgaXRlcmF0b3Ig X19pMiwgX0lucHV0SXRlciBfX2sxLAogICAgICAgICAgICAgICAgIF9JbnB1dEl0ZXIgX19rMiwg aW5wdXRfaXRlcmF0b3JfdGFnKQogICAgICB7CgogICAgICAgIGJhc2ljX3N0cmluZyBfX3MoX19r MSwgX19rMik7CiAgICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfX2kxLCBfX2kyLCBfX3Mu X01faWJlZ2luKCksIF9fcy5fTV9pZW5kKCkpOwogICAgICB9CgoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdGVtcGxh dGU8dHlwZW5hbWUgX0ZvcndhcmRJdGVyPgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+JgogICAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgICAgX01fcmVwbGFjZV9zYWZlKGl0ZXJhdG9yIF9faTEsIGl0ZXJhdG9yIF9faTIsIF9G b3J3YXJkSXRlciBfX2sxLAogICAgICAgICAgICAgICAgICAgICAgX0ZvcndhcmRJdGVyIF9fazIp CiAgICAgIHsKICAgICAgICBzaXplX3R5cGUgX19kbmV3ID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBl PihkaXN0YW5jZShfX2sxLCBfX2syKSk7CiAgICAgICAgc2l6ZV90eXBlIF9fZG9sZCA9IF9faTIg LSBfX2kxOwogICAgICAgIHNpemVfdHlwZSBfX2RtYXggPSB0aGlzLT5tYXhfc2l6ZSgpOwoKICAg ICAgICBpZiAoX19kbWF4IDw9IF9fZG5ldykKICAgICAgICAgIF9fdGhyb3dfbGVuZ3RoX2Vycm9y KCJiYXNpY19zdHJpbmc6Ol9NX3JlcGxhY2UiKTsKICAgICAgICBzaXplX3R5cGUgX19vZmYgPSBf X2kxIC0gX01faWJlZ2luKCk7CiAgICAgICAgX01fbXV0YXRlKF9fb2ZmLCBfX2RvbGQsIF9fZG5l dyk7CgoKICAgICAgICBpZiAoX19kbmV3KQogICAgICAgICAgX1NfY29weV9jaGFycyhfTV9kYXRh KCkgKyBfX29mZiwgX19rMSwgX19rMik7CgogICAgICAgIHJldHVybiAqdGhpczsKICAgICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHJlcGxhY2Uoc2l6ZV90eXBl IF9fcG9zMSwgc2l6ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAg ICAgICAgIHNpemVfdHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKQogICAgewogICAgICBjb25z dCBzaXplX3R5cGUgX19zdHJzaXplID0gX19zdHIuc2l6ZSgpOwogICAgICBpZiAoX19wb3MyID4g X19zdHJzaXplKQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OnJl cGxhY2UiKTsKICAgICAgY29uc3QgYm9vbCBfX3Rlc3RuMiA9IF9fbjIgPCBfX3N0cnNpemUgLSBf X3BvczI7CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX2ZvbGRuMiA9IF9fdGVzdG4yID8gX19uMiA6 IF9fc3Ryc2l6ZSAtIF9fcG9zMjsKICAgICAgcmV0dXJuIHRoaXMtPnJlcGxhY2UoX19wb3MxLCBf X24xLAogICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0ci5fTV9kYXRhKCkgKyBfX3BvczIs IF9fZm9sZG4yKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+JgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBhcHBlbmQoY29uc3QgYmFzaWNfc3RyaW5nJiBfX3N0cikKICAgIHsKCgoKICAgICAgc2l6ZV90 eXBlIF9fc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zaXpl ICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19sZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAg ICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAgICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9N X2llbmQoKSwgX01faWVuZCgpLCBfX3N0ci5fTV9pYmVnaW4oKSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3N0ci5fTV9pZW5kKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjoKICAgIGFwcGVuZChjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyLCBzaXpl X3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pCiAgICB7CgoKCiAgICAgIHNpemVfdHlwZSBfX2xl biA9IG1pbihfX3N0ci5zaXplKCkgLSBfX3BvcywgX19uKSArIHRoaXMtPnNpemUoKTsKICAgICAg aWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHkoKSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVu KTsKICAgICAgcmV0dXJuIF9NX3JlcGxhY2Vfc2FmZShfTV9pZW5kKCksIF9NX2llbmQoKSwgX19z dHIuX01fY2hlY2soX19wb3MpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fc3RyLl9N X2ZvbGQoX19wb3MsIF9fbikpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hhclQs IF9UcmFpdHMsIF9BbGxvYz4mCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxs b2M+OjoKICAgIGFwcGVuZChjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fbikKICAgIHsK ICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19uICsgdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19s ZW4gPiB0aGlzLT5jYXBhY2l0eSgpKQogICAgICAgIHRoaXMtPnJlc2VydmUoX19sZW4pOwogICAg ICByZXR1cm4gX01fcmVwbGFjZV9zYWZlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX3MsIF9fcyAr IF9fbik7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0Fs bG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgYXBw ZW5kKHNpemVfdHlwZSBfX24sIF9DaGFyVCBfX2MpCiAgICB7CiAgICAgIHNpemVfdHlwZSBfX2xl biA9IF9fbiArIHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fbGVuID4gdGhpcy0+Y2FwYWNpdHko KSkKICAgICAgICB0aGlzLT5yZXNlcnZlKF9fbGVuKTsKICAgICAgIHJldHVybiB0aGlzLT5yZXBs YWNlKF9NX2llbmQoKSwgX01faWVuZCgpLCBfX24sIF9fYyk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPgogICAgb3BlcmF0b3IrKGNvbnN0IF9D aGFyVCogX19saHMsCiAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1Ry YWl0cywgX0FsbG9jPiYgX19yaHMpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIHR5cGVu YW1lIF9fc3RyaW5nX3R5cGU6OnNpemVfdHlwZSBfX3NpemVfdHlwZTsKICAgICAgX19zaXplX3R5 cGUgX19sZW4gPSBfVHJhaXRzOjpsZW5ndGgoX19saHMpOwogICAgICBfX3N0cmluZ190eXBlIF9f c3RyOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgX19yaHMuc2l6ZSgpKTsKICAgICAgX19z dHIuYXBwZW5kKF9fbGhzLCBfX2xocyArIF9fbGVuKTsKICAgICAgX19zdHIuYXBwZW5kKF9fcmhz KTsKICAgICAgcmV0dXJuIF9fc3RyOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX3N0cmluZzxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4KICAgIG9wZXJhdG9yKyhfQ2hhclQgX19saHMsIGNvbnN0IGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fcmhzKQogICAgewogICAgICB0 eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX3N0cmluZ190eXBlOjpzaXplX3R5cGUgX19zaXpl X3R5cGU7CiAgICAgIF9fc3RyaW5nX3R5cGUgX19zdHI7CiAgICAgIF9fc2l6ZV90eXBlIF9fbGVu ID0gX19yaHMuc2l6ZSgpOwogICAgICBfX3N0ci5yZXNlcnZlKF9fbGVuICsgMSk7CiAgICAgIF9f c3RyLmFwcGVuZChfX3NpemVfdHlwZSgxKSwgX19saHMpOwogICAgICBfX3N0ci5hcHBlbmQoX19y aHMpOwogICAgICByZXR1cm4gX19zdHI7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiYKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgcmVwbGFjZShpdGVyYXRvciBfX2kxLCBpdGVyYXRvciBfX2kyLCBzaXpl X3R5cGUgX19uMiwgX0NoYXJUIF9fYykKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fbjEgPSBfX2ky IC0gX19pMTsKICAgICAgc2l6ZV90eXBlIF9fb2ZmMSA9IF9faTEgLSBfTV9pYmVnaW4oKTsKICAg ICAgaWYgKG1heF9zaXplKCkgLSAodGhpcy0+c2l6ZSgpIC0gX19uMSkgPD0gX19uMikKICAgICAg ICBfX3Rocm93X2xlbmd0aF9lcnJvcigiYmFzaWNfc3RyaW5nOjpyZXBsYWNlIik7CiAgICAgIF9N X211dGF0ZSAoX19vZmYxLCBfX24xLCBfX24yKTsKCiAgICAgIGlmIChfX24yKQogICAgICAgIHRy YWl0c190eXBlOjphc3NpZ24oX01fZGF0YSgpICsgX19vZmYxLCBfX24yLCBfX2MpOwogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0NoYXJULCBf VHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvcHkoX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX24sIHNp emVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgaWYgKF9fcG9zID4gdGhpcy0+c2l6ZSgp KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvcHkiKTsKCiAg ICAgIGlmIChfX24gPiB0aGlzLT5zaXplKCkgLSBfX3BvcykKICAgICAgICBfX24gPSB0aGlzLT5z aXplKCkgLSBfX3BvczsKCiAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9fcywgX01fZGF0YSgpICsg X19wb3MsIF9fbik7CgogICAgICByZXR1cm4gX19uOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKGNvbnN0IF9DaGFy VCogX19zLCBzaXplX3R5cGUgX19wb3MsIHNpemVfdHlwZSBfX24pIGNvbnN0CiAgICB7CiAgICAg IHNpemVfdHlwZSBfX3NpemUgPSB0aGlzLT5zaXplKCk7CiAgICAgIHNpemVfdCBfX3hwb3MgPSBf X3BvczsKICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAgICAgIGZvciAo OyBfX3hwb3MgKyBfX24gPD0gX19zaXplOyArK19feHBvcykKICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmNvbXBhcmUoX19kYXRhICsgX194cG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgIHJl dHVybiBfX3hwb3M7CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1l IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFz aWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBmaW5kKF9DaGFyVCBfX2Ms IHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRo aXMtPnNpemUoKTsKICAgICAgc2l6ZV90eXBlIF9fcmV0ID0gbnBvczsKICAgICAgaWYgKF9fcG9z IDwgX19zaXplKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9DaGFyVCogX19kYXRhID0gX01f ZGF0YSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9fbiA9IF9fc2l6ZSAtIF9fcG9zOwogICAgICAg ICAgY29uc3QgX0NoYXJUKiBfX3AgPSB0cmFpdHNfdHlwZTo6ZmluZChfX2RhdGEgKyBfX3Bvcywg X19uLCBfX2MpOwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgX19yZXQgPSBfX3AgLSBf X2RhdGE7CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5 cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQog ICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChjb25z dCBfQ2hhclQqIF9fcywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAg ewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19uIDw9 IF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBfX3BvcyA9IHN0ZDo6bWluKF9fc2l6ZSAtIF9f biwgX19wb3MpOwogICAgICAgICAgY29uc3QgX0NoYXJUKiBfX2RhdGEgPSBfTV9kYXRhKCk7CiAg ICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRyYWl0c190eXBlOjpj b21wYXJlKF9fZGF0YSArIF9fcG9zLCBfX3MsIF9fbikgPT0gMCkKICAgICAgICAgICAgICAgIHJl dHVybiBfX3BvczsKICAgICAgICAgICAgfQogICAgICAgICAgd2hpbGUgKF9fcG9zLS0gPiAwKTsK ICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJh c2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnNpemVfdHlwZQogICAgYmFzaWNf c3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICByZmluZChfQ2hhclQgX19jLCBz aXplX3R5cGUgX19wb3MpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdHlwZSBfX3NpemUgPSB0aGlz LT5zaXplKCk7CiAgICAgIGlmIChfX3NpemUpCiAgICAgICAgewogICAgICAgICAgc2l6ZV90IF9f eHBvcyA9IF9fc2l6ZSAtIDE7CiAgICAgICAgICBpZiAoX194cG9zID4gX19wb3MpCiAgICAgICAg ICAgIF9feHBvcyA9IF9fcG9zOwoKICAgICAgICAgIGZvciAoKytfX3hwb3M7IF9feHBvcy0tID4g MDsgKQogICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBf X2MpKQogICAgICAgICAgICAgIHJldHVybiBfX3hwb3M7CiAgICAgICAgfQogICAgICByZXR1cm4g bnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJh aXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMs IF9BbGxvYz46OgogICAgZmluZF9maXJzdF9vZihjb25zdCBfQ2hhclQqIF9fcywgc2l6ZV90eXBl IF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBmb3IgKDsgX19uICYmIF9f cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19fcG9zKQogICAgICAgIHsKICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19wID0gdHJhaXRzX3R5cGU6OmZpbmQoX19zLCBfX24sIF9NX2RhdGEoKVtfX3Bvc10p OwogICAgICAgICAgaWYgKF9fcCkKICAgICAgICAgICAgcmV0dXJuIF9fcG9zOwogICAgICAgIH0K ICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlw ZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgYmFzaWNfc3RyaW5n PF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9vZihjb25zdCBfQ2hhclQqIF9f cywgc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uKSBjb25zdAogICAgewogICAgICBzaXpl X3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19zaXplICYmIF9fbikKICAg ICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAgX19zaXpl ID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKHRy YWl0c190eXBlOjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX19zaXplXSkpCiAgICAgICAgICAg ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl LS0gIT0gMCk7CiAgICAgICAgfQogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 eXBlbmFtZSBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUK ICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJz dF9ub3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9f bikgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9feHBvcyA9IF9fcG9zOwogICAgICBmb3IgKDsg X194cG9zIDwgdGhpcy0+c2l6ZSgpOyArK19feHBvcykKICAgICAgICBpZiAoIXRyYWl0c190eXBl OjpmaW5kKF9fcywgX19uLCBfTV9kYXRhKClbX194cG9zXSkpCiAgICAgICAgICByZXR1cm4gX194 cG9zOwogICAgICByZXR1cm4gbnBvczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19z dHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjpzaXplX3R5cGUKICAgIGJhc2ljX3N0cmlu ZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgZmluZF9maXJzdF9ub3Rfb2YoX0NoYXJU IF9fYywgc2l6ZV90eXBlIF9fcG9zKSBjb25zdAogICAgewogICAgICBzaXplX3QgX194cG9zID0g X19wb3M7CiAgICAgIGZvciAoOyBfX3hwb3MgPCB0aGlzLT5zaXplKCk7ICsrX194cG9zKQogICAg ICAgIGlmICghdHJhaXRzX3R5cGU6OmVxKF9NX2RhdGEoKVtfX3hwb3NdLCBfX2MpKQogICAgICAg ICAgcmV0dXJuIF9feHBvczsKICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6c2l6ZV90eXBlCiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGZpbmRfbGFzdF9u b3Rfb2YoY29uc3QgX0NoYXJUKiBfX3MsIHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90eXBlIF9fbikg Y29uc3QKICAgIHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAg aWYgKF9fc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAg ICAgICAgICAgX19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgaWYgKCF0cmFpdHNfdHlwZTo6ZmluZChfX3MsIF9fbiwgX01fZGF0YSgpW19fc2l6 ZV0pKQogICAgICAgICAgICAgICAgcmV0dXJuIF9fc2l6ZTsKICAgICAgICAgICAgfQogICAgICAg ICAgd2hpbGUgKF9fc2l6ZS0tKTsKICAgICAgICB9CiAgICAgIHJldHVybiBucG9zOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46 OnNpemVfdHlwZQogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6CiAg ICBmaW5kX2xhc3Rfbm90X29mKF9DaGFyVCBfX2MsIHNpemVfdHlwZSBfX3BvcykgY29uc3QKICAg IHsKICAgICAgc2l6ZV90eXBlIF9fc2l6ZSA9IHRoaXMtPnNpemUoKTsKICAgICAgaWYgKF9fc2l6 ZSkKICAgICAgICB7CiAgICAgICAgICBpZiAoLS1fX3NpemUgPiBfX3BvcykKICAgICAgICAgICAg X19zaXplID0gX19wb3M7CiAgICAgICAgICBkbwogICAgICAgICAgICB7CiAgICAgICAgICAgICAg aWYgKCF0cmFpdHNfdHlwZTo6ZXEoX01fZGF0YSgpW19fc2l6ZV0sIF9fYykpCiAgICAgICAgICAg ICAgICByZXR1cm4gX19zaXplOwogICAgICAgICAgICB9CiAgICAgICAgICB3aGlsZSAoX19zaXpl LS0pOwogICAgICAgIH0KICAgICAgcmV0dXJuIG5wb3M7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAg ICBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6 ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uLCBjb25zdCBiYXNpY19zdHJpbmcmIF9fc3RyKSBj b25zdAogICAgewogICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBz aXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgaWYgKF9fcG9zID4gX19zaXpl KQogICAgICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsK CiAgICAgIHNpemVfdHlwZSBfX3JzaXplPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbik7CiAgICAg IHNpemVfdHlwZSBfX2xlbiA9IG1pbihfX3JzaXplLCBfX29zaXplKTsKICAgICAgaW50IF9fciA9 IHRyYWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zLCBfX3N0ci5kYXRhKCksIF9f bGVuKTsKICAgICAgaWYgKCFfX3IpCiAgICAgICAgX19yID0gX19yc2l6ZSAtIF9fb3NpemU7CiAg ICAgIHJldHVybiBfX3I7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zMSwgc2l6 ZV90eXBlIF9fbjEsIGNvbnN0IGJhc2ljX3N0cmluZyYgX19zdHIsCiAgICAgICAgICAgIHNpemVf dHlwZSBfX3BvczIsIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBzaXplX3R5cGUgX19vc2l6ZSA9IF9fc3RyLnNp emUoKTsKICAgICAgaWYgKF9fcG9zMSA+IF9fc2l6ZSB8fCBfX3BvczIgPiBfX29zaXplKQogICAg ICAgIF9fdGhyb3dfb3V0X29mX3JhbmdlKCJiYXNpY19zdHJpbmc6OmNvbXBhcmUiKTsKCiAgICAg IHNpemVfdHlwZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zMSwgX19uMSk7CiAgICAgIHNp emVfdHlwZSBfX3Jvc2l6ZSA9IG1pbihfX29zaXplIC0gX19wb3MyLCBfX24yKTsKICAgICAgc2l6 ZV90eXBlIF9fbGVuID0gbWluKF9fcnNpemUsIF9fcm9zaXplKTsKICAgICAgaW50IF9fciA9IHRy YWl0c190eXBlOjpjb21wYXJlKF9NX2RhdGEoKSArIF9fcG9zMSwKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fc3RyLmRhdGEoKSArIF9fcG9zMiwgX19sZW4pOwogICAgICBp ZiAoIV9fcikKICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19yb3NpemU7CiAgICAgIHJldHVybiBf X3I7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMs IHR5cGVuYW1lIF9BbGxvYz4KICAgIGludAogICAgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewog ICAgICBzaXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpbnQgX19yID0gdHJh aXRzX3R5cGU6OmNvbXBhcmUoX01fZGF0YSgpLCBfX3MsIF9fc2l6ZSk7CiAgICAgIGlmICghX19y KQogICAgICAgIF9fciA9IF9fc2l6ZSAtIHRyYWl0c190eXBlOjpsZW5ndGgoX19zKTsKICAgICAg cmV0dXJuIF9fcjsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgaW50CiAgICBiYXNpY19zdHJpbmcgPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBjb21wYXJlKHNpemVfdHlwZSBfX3Bvcywgc2l6ZV90 eXBlIF9fbjEsIGNvbnN0IF9DaGFyVCogX19zKSBjb25zdAogICAgewogICAgICBzaXplX3R5cGUg X19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUpCiAgICAgICAg X190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoKICAgICAgc2l6 ZV90eXBlIF9fb3NpemUgPSB0cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7CiAgICAgIHNpemVfdHlw ZSBfX3JzaXplID0gbWluKF9fc2l6ZSAtIF9fcG9zLCBfX24xKTsKICAgICAgc2l6ZV90eXBlIF9f bGVuID0gbWluKF9fcnNpemUsIF9fb3NpemUpOwogICAgICBpbnQgX19yID0gdHJhaXRzX3R5cGU6 OmNvbXBhcmUoX01fZGF0YSgpICsgX19wb3MsIF9fcywgX19sZW4pOwogICAgICBpZiAoIV9fcikK ICAgICAgICBfX3IgPSBfX3JzaXplIC0gX19vc2l6ZTsKICAgICAgcmV0dXJuIF9fcjsKICAgIH0K CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBpbnQKICAgIGJhc2ljX3N0cmluZyA8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ OjoKICAgIGNvbXBhcmUoc2l6ZV90eXBlIF9fcG9zLCBzaXplX3R5cGUgX19uMSwgY29uc3QgX0No YXJUKiBfX3MsCiAgICAgICAgICAgIHNpemVfdHlwZSBfX24yKSBjb25zdAogICAgewogICAgICBz aXplX3R5cGUgX19zaXplID0gdGhpcy0+c2l6ZSgpOwogICAgICBpZiAoX19wb3MgPiBfX3NpemUp CiAgICAgICAgX190aHJvd19vdXRfb2ZfcmFuZ2UoImJhc2ljX3N0cmluZzo6Y29tcGFyZSIpOwoK ICAgICAgc2l6ZV90eXBlIF9fb3NpemUgPSBtaW4odHJhaXRzX3R5cGU6Omxlbmd0aChfX3MpLCBf X24yKTsKICAgICAgc2l6ZV90eXBlIF9fcnNpemUgPSBtaW4oX19zaXplIC0gX19wb3MsIF9fbjEp OwogICAgICBzaXplX3R5cGUgX19sZW4gPSBtaW4oX19yc2l6ZSwgX19vc2l6ZSk7CiAgICAgIGlu dCBfX3IgPSB0cmFpdHNfdHlwZTo6Y29tcGFyZShfTV9kYXRhKCkgKyBfX3BvcywgX19zLCBfX2xl bik7CiAgICAgIGlmICghX19yKQogICAgICAgIF9fciA9IF9fcnNpemUgLSBfX29zaXplOwogICAg ICByZXR1cm4gX19yOwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJh aXRzLCBjbGFzcyBfQWxsb2M+CiAgICB2b2lkCiAgICBfU19zdHJpbmdfY29weShjb25zdCBiYXNp Y19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0ciwKICAgICAgICAgICAgICAg ICAgIF9DaGFyVCogX19idWYsIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIF9fYnVmc2l6KQog ICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvYzo6c2l6ZV90eXBlIHNpemVfdHlwZTsK ICAgICAgc2l6ZV90eXBlIF9fc3Ryc2l6ZSA9IF9fc3RyLnNpemUoKTsKICAgICAgc2l6ZV90eXBl IF9fYnl0ZXMgPSBtaW4oX19zdHJzaXplLCBfX2J1ZnNpeiAtIDEpOwogICAgICBfVHJhaXRzOjpj b3B5KF9fYnVmLCBfX3N0ci5kYXRhKCksIF9fYnl0ZXMpOwogICAgICBfX2J1ZltfX2J5dGVzXSA9 IF9DaGFyVCgpOwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3RyaW5n PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIG9w ZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYmFzaWNfb3N0cmVhbTxjaGFyPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxj aGFyPiYsIGNvbnN0IHN0cmluZyYpOwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh bTxjaGFyPiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYsIGNoYXIp OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVhbTxjaGFyPiYKICAgIGdldGxpbmUo YmFzaWNfaXN0cmVhbTxjaGFyPiYsIHN0cmluZyYpOwoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3Mg YmFzaWNfc3RyaW5nPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZQogICAgYmFzaWNfaXN0cmVh bTx3Y2hhcl90PiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYsIHdzdHJp bmcmKTsKICBleHRlcm4gdGVtcGxhdGUKICAgIGJhc2ljX29zdHJlYW08d2NoYXJfdD4mCiAgICBv cGVyYXRvcjw8KGJhc2ljX29zdHJlYW08d2NoYXJfdD4mLCBjb25zdCB3c3RyaW5nJik7CiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+JgogICAgZ2V0bGluZShiYXNp Y19pc3RyZWFtPHdjaGFyX3Q+Jiwgd3N0cmluZyYsIHdjaGFyX3QpOwogIGV4dGVybiB0ZW1wbGF0 ZQogICAgYmFzaWNfaXN0cmVhbTx3Y2hhcl90PiYKICAgIGdldGxpbmUoYmFzaWNfaXN0cmVhbTx3 Y2hhcl90PiYsIHdzdHJpbmcmKTsKfQojIDU4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9z dHJpbmciIDIgMwojIDcgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2Z3ZC5ocHAiIDIKCgoK Cm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFjZSBkeW5hbWljX2FueSB7CgpuYW1lc3BhY2UgYXV4 IHsKCnN0cnVjdCBlbXB0eV9zZXF1ZW5jZV9pdGVyCnsKICAgIHR5cGVkZWYgOjpib29zdDo6bXBs Ojpmb3J3YXJkX2l0ZXJhdG9yX3RhZyBjYXRlZ29yeTsKfTsKCnN0cnVjdCBlbXB0eV9zZXF1ZW5j ZQp7CiAgICB0eXBlZGVmIGVtcHR5X3NlcXVlbmNlX2l0ZXIgYmVnaW47CiAgICB0eXBlZGVmIGVt cHR5X3NlcXVlbmNlX2l0ZXIgZW5kOwp9OwoKfQoKCgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9u TGlzdCA9IGF1eDo6ZW1wdHlfc2VxdWVuY2U+CmNsYXNzIGFueTsKCgoKCmNsYXNzIGJhZF9leHRy YWN0OwoKdGVtcGxhdGU8Y2xhc3MgVCwgY2xhc3MgT3BlcmF0aW9uTGlzdD4KVCBleHRyYWN0KGFu eTxPcGVyYXRpb25MaXN0PiAmKTsKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxp c3Q+ClQgZXh0cmFjdChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJik7Cgp0ZW1wbGF0ZTxjbGFz cyBULCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUICogZXh0cmFjdChhbnk8T3BlcmF0aW9uTGlzdD4g Kik7Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUICogZXh0cmFjdChj b25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gKik7CgoKCgpzdHJ1Y3QgYW55VCB7fTsKCmNsYXNzIGJh ZF9mdW5jdGlvbl9jYWxsOwoKdGVtcGxhdGU8Y2xhc3MgRW5kRnVuY3Rpb24sIGNsYXNzIFNpZ25h dHVyZT4Kc3RydWN0IGZ1bmN0aW9uOwoKCgoKCnRlbXBsYXRlPGNsYXNzIFJlc3VsdCwgY2xhc3Mg SW5kZXgsIGNsYXNzIEFyZyA9IGNvbnN0IGFueVQgJj4Kc3RydWN0IHN1YnNjcmlwdDsKCnN0cnVj dCBpbmNyZW1lbnQ7CnN0cnVjdCBkZWNyZW1lbnQ7CnN0cnVjdCBkZXJlZmVyZW5jZTsKc3RydWN0 IGVxdWFsX3RvOwpzdHJ1Y3Qgbm90X2VxdWFsX3RvOwpzdHJ1Y3QgbGVzczsKc3RydWN0IGxlc3Nf ZXF1YWw7CnN0cnVjdCBncmVhdGVyOwpzdHJ1Y3QgZ3JlYXRlcl9lcXVhbDsKc3RydWN0IGxvZ2lj YWxfYW5kOwpzdHJ1Y3QgbG9naWNhbF9vcjsKc3RydWN0IGxvZ2ljYWxfbm90OwpzdHJ1Y3QgcGx1 czsKc3RydWN0IG1pbnVzOwpzdHJ1Y3QgbXVsdGlwbGllczsKc3RydWN0IGRpdmlkZXM7CnN0cnVj dCBtb2R1bHVzOwpzdHJ1Y3QgYXNzaWdubWVudF9wbHVzOwpzdHJ1Y3QgYXNzaWdubWVudF9taW51 czsKc3RydWN0IGFzc2lnbm1lbnRfbXVsdGlwbGllczsKc3RydWN0IGFzc2lnbm1lbnRfZGl2aWRl czsKc3RydWN0IGFzc2lnbm1lbnRfbW9kdWx1czsKc3RydWN0IG5lZ2F0ZTsKCnRlbXBsYXRlPGNs YXNzIFQ+CnN0cnVjdCBkZXJlZmVyZW5jZV90bzsKCnRlbXBsYXRlPGNsYXNzIENoYXIsIGNsYXNz IFRyYWl0cyA9IDo6c3RkOjpjaGFyX3RyYWl0czxDaGFyPiA+CnN0cnVjdCB0b19iYXNpY19vc3Ry ZWFtOwoKdHlwZWRlZiB0b19iYXNpY19vc3RyZWFtPGNoYXI+IHRvX29zdHJlYW07CgoKdHlwZWRl ZiB0b19iYXNpY19vc3RyZWFtPHdjaGFyX3Q+IHRvX3dvc3RyZWFtOwoKCgp0ZW1wbGF0ZTxjbGFz cyBTaWduYXR1cmU+CnN0cnVjdCBmdW5jdGlvbl9jYWxsOwoKCgp9IH0KIyAzNCAiLi4vLi4vLi4v Ym9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIgMgoKbmFtZXNwYWNlIGJvb3N0IHsgbmFtZXNwYWNl IGR5bmFtaWNfYW55IHsKCm5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8aW50IE4+IHN0cnVjdCBp bnRfaWQge307CnRlbXBsYXRlPGJvb2wgQj4gc3RydWN0IGJvb2xfaWQge307Cgp0ZW1wbGF0ZTxj bGFzcyBUPiBzdHJ1Y3QgdHlwZV9pZAp7CiAgdHlwZWRlZiBUIHR5cGU7Cn07CgoKc3RydWN0IHNp ZyB7fTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBjbGFzcyBCZWdpbiwgY2xhc3MgRW5k PgpzdHJ1Y3QgcGxhY2Vob2xkZXJfZXhlY3V0ZTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMs IGNsYXNzIEVuZD4Kc3RydWN0IHBsYWNlaG9sZGVyX2V4ZWN1dGU8T3BlcmF0aW9ucyxFbmQsRW5k Pgp7CiAgdm9pZCBleGVjdXRlKHNpZykgY29uc3Qge30KfTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJh dGlvbnM+CnN0cnVjdCBwbGFjZWhvbGRlcgogIDogcGxhY2Vob2xkZXJfZXhlY3V0ZQogICAgPAog ICAgICBPcGVyYXRpb25zLAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJlZ2luPE9wZXJh dGlvbnM+Ojp0eXBlLAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxPcGVyYXRpb25z Pjo6dHlwZQogICAgPgp7CiAgdmlydHVhbCB+cGxhY2Vob2xkZXIoKSB0aHJvdygpID0gMDsKICB2 aXJ0dWFsIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKHNpZykgY29uc3QgPSAwOwogIHZp cnR1YWwgcGxhY2Vob2xkZXIgKiBjbG9uZShzaWcpIGNvbnN0ID0gMDsKfTsKCnRlbXBsYXRlPGNs YXNzIE9wZXJhdGlvbnM+CmlubGluZSBwbGFjZWhvbGRlcjxPcGVyYXRpb25zPjo6fnBsYWNlaG9s ZGVyKCkgdGhyb3coKSB7fQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNs YXNzIEJlZ2luLCBjbGFzcyBFbmQ+CnN0cnVjdCBub25jbGFzc19ob2xkZXJfZXhlY3V0ZTsKCnRl bXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEVuZD4Kc3RydWN0IG5vbmNs YXNzX2hvbGRlcl9leGVjdXRlPE9wZXJhdGlvbnMsVCxFbmQsRW5kPgogIDogcGxhY2Vob2xkZXI8 T3BlcmF0aW9ucz4Kewp9OwoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9ucywgY2xhc3MgVD4Kc3Ry dWN0IG5vbmNsYXNzX2hvbGRlcgogIDogbm9uY2xhc3NfaG9sZGVyX2V4ZWN1dGUKICAgIDwKICAg ICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpiZWdp bjxPcGVyYXRpb25zPjo6dHlwZSwKICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjplbmQ8T3Bl cmF0aW9ucz46OnR5cGUKICAgID4KewogIG5vbmNsYXNzX2hvbGRlcihjb25zdCBUICYgdmFsKQog ICAgOiB2YWx1ZSh2YWwpIHt9CgogIG5vbmNsYXNzX2hvbGRlcihjb25zdCBub25jbGFzc19ob2xk ZXIgJiBvdGhlcikKICAgIDogdmFsdWUob3RoZXIudmFsdWUpIHt9CgogIH5ub25jbGFzc19ob2xk ZXIoKSB0aHJvdygpIHt9CgogIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKHNpZykgY29u c3QKICB7CiAgICByZXR1cm4gdHlwZWlkKFQpOwogIH0KCiAgcGxhY2Vob2xkZXI8T3BlcmF0aW9u cz4gKiBjbG9uZShzaWcpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBub25jbGFzc19ob2xkZXIo KnRoaXMpOwogIH0KCiAgVCB2YWx1ZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBj bGFzcyBULCBjbGFzcyBCZWdpbiwgY2xhc3MgRW5kPgpzdHJ1Y3QgY2xhc3NfaG9sZGVyX2V4ZWN1 dGU7Cgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25zLCBjbGFzcyBULCBjbGFzcyBFbmQ+CnN0cnVj dCBjbGFzc19ob2xkZXJfZXhlY3V0ZTxPcGVyYXRpb25zLFQsRW5kLEVuZD4KICA6IHBsYWNlaG9s ZGVyPE9wZXJhdGlvbnM+CnsKfTsKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQ+ CnN0cnVjdCBjbGFzc19ob2xkZXIKICA6IGNsYXNzX2hvbGRlcl9leGVjdXRlCiAgICA8CiAgICAg IE9wZXJhdGlvbnMsCiAgICAgIFQsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48 T3BlcmF0aW9ucz46OnR5cGUsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6ZW5kPE9wZXJh dGlvbnM+Ojp0eXBlCiAgICA+CiAgLCBUCgp7CiAgY2xhc3NfaG9sZGVyKGNvbnN0IFQgJiB2YWwp CiAgICA6IFQodmFsKSB7fQoKICBjbGFzc19ob2xkZXIoY29uc3QgY2xhc3NfaG9sZGVyICYgb3Ro ZXIpCiAgICA6IFQoc3RhdGljX2Nhc3Q8Y29uc3QgVCAmPihvdGhlcikpIHt9CgogIH5jbGFzc19o b2xkZXIoKSB0aHJvdygpIHt9CgogIGNvbnN0IDo6c3RkOjp0eXBlX2luZm8gJiB0eXBlKDo6Ym9v c3Q6OmR5bmFtaWNfYW55OjphdXg6OnNpZykgY29uc3QKICB7CiAgICByZXR1cm4gdHlwZWlkKFQp OwogIH0KCiAgcGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKiBjbG9uZSg6OmJvb3N0OjpkeW5hbWlj X2FueTo6YXV4OjpzaWcpIGNvbnN0CiAgewogICAgcmV0dXJuIG5ldyBjbGFzc19ob2xkZXIoKnRo aXMpOwogIH0KCgogIHZvaWQgKiBvcGVyYXRvciBuZXcoOjpzdGQ6OnNpemVfdCBzeikKICB7CiAg ICByZXR1cm4gOjpvcGVyYXRvciBuZXcoc3opOwogIH0KfTsKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVy YXRpb25MaXN0PgpzdHJ1Y3QgZmFjdG9yeQp7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdGF0aWMg cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBjcmVhdGUoY29uc3QgVCAmIHZhbHVlKQogIHsK ICAgIHR5cGVkZWYgdHlwZW5hbWUKICAgICAgOjpib29zdDo6bXBsOjphcHBseV9pZgogICAgICA8 CiAgICAgICAgOjpib29zdDo6aXNfY2xhc3M8VD4sCiAgICAgICAgOjpib29zdDo6bXBsOjppZGVu dGl0eTxjbGFzc19ob2xkZXI8T3BlcmF0aW9uTGlzdCwgVD4gPiwKICAgICAgICA6OmJvb3N0Ojpt cGw6OmlkZW50aXR5PG5vbmNsYXNzX2hvbGRlcjxPcGVyYXRpb25MaXN0LCBUPiA+CiAgICAgID46 OnR5cGUgaG9sZGVyX3R5cGU7CiAgICByZXR1cm4gbmV3IGhvbGRlcl90eXBlKHZhbHVlKTsKICB9 Cn07CgoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGJvb2wgSXNDbGFzcz4K c3RydWN0IGV4dHJhY3Rvcl9pbXBsCnsKICB0eXBlZGVmIGNsYXNzX2hvbGRlcjxPcGVyYXRpb25z LFQ+IGhvbGRlcl90eXBlOwoKICBUICYgc3RhdGljX2V4dHJhY3QoaG9sZGVyX3R5cGUgJiByKSBj b25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxUICY+KHIpOwogIH0KCiAgVCAqIHN0YXRp Y19leHRyYWN0KGhvbGRlcl90eXBlICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDApCiAgICAg IHJldHVybiAwOwogICAgcmV0dXJuIHN0YXRpY19jYXN0PFQgKj4ocCk7CiAgfQoKICBUICYgc3Rh dGljX2V4dHJhY3QocGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gJiByKSBjb25zdAogIHsKICAgICgo dm9pZCkgKCgmciAhPSAwICYmIHIudHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpKSA/IDAgOiAoX19h c3NlcnRfZmFpbCAoIiZyICE9IDAgJiYgci50eXBlKHNpZygpKSA9PSB0eXBlaWQoVCkiLCAiLi4v Li4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIsIDIwNCwgKChjb25zdCBjaGFyICopIDAp KSwgMCkpKTsKICAgIHJldHVybiBzdGF0aWNfZXh0cmFjdChzdGF0aWNfY2FzdDxob2xkZXJfdHlw ZSAmPihyKSk7CiAgfQoKICBUICogc3RhdGljX2V4dHJhY3QocGxhY2Vob2xkZXI8T3BlcmF0aW9u cz4gKiBwKSBjb25zdAogIHsKICAgIGlmKHAgPT0gMCkKICAgICAgcmV0dXJuIDA7CiAgICAoKHZv aWQpICgocC0+dHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpKSA/IDAgOiAoX19hc3NlcnRfZmFpbCAo InAtPnR5cGUoc2lnKCkpID09IHR5cGVpZChUKSIsICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2Fu eS9hbnkuaHBwIiwgMjEyLCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0dXJuIHN0 YXRpY19leHRyYWN0KHN0YXRpY19jYXN0PGhvbGRlcl90eXBlICo+KHApKTsKICB9CgogIFQgKiBl eHRyYWN0X3B0cihwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewojIDIyNyAi Li4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKICAgIHJldHVybiBkeW5hbWljX2Nh c3Q8VCAqPihwKTsKICB9CgogIGNvbnN0IFQgKiBleHRyYWN0X3B0cihjb25zdCBwbGFjZWhvbGRl cjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewogICAgcmV0dXJuIGV4dHJhY3RfcHRyKGNvbnN0 X2Nhc3Q8cGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKj4ocCkpOwogIH0KfTsKCnRlbXBsYXRlPGNs YXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQ+CnN0cnVjdCBleHRyYWN0b3JfaW1wbDxPcGVyYXRpb25z LFQsZmFsc2U+CnsKICB0eXBlZGVmIG5vbmNsYXNzX2hvbGRlcjxPcGVyYXRpb25zLFQ+IGhvbGRl cl90eXBlOwoKICBUICYgc3RhdGljX2V4dHJhY3QoaG9sZGVyX3R5cGUgJiByKSBjb25zdAogIHsK ICAgIHJldHVybiByLnZhbHVlOwogIH0KCiAgVCAqIHN0YXRpY19leHRyYWN0KGhvbGRlcl90eXBl ICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDApCiAgICAgIHJldHVybiAwOwogICAgcmV0dXJu ICZwLT52YWx1ZTsKICB9CgogIFQgJiBzdGF0aWNfZXh0cmFjdChwbGFjZWhvbGRlcjxPcGVyYXRp b25zPiAmIHIpIGNvbnN0CiAgewogICAgKCh2b2lkKSAoKCZyICE9IDAgJiYgci50eXBlKHNpZygp KSA9PSB0eXBlaWQoVCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgiJnIgIT0gMCAmJiByLnR5cGUo c2lnKCkpID09IHR5cGVpZChUKSIsICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hbnkuaHBw IiwgMjU1LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0dXJuIHN0YXRpY19leHRy YWN0KHN0YXRpY19jYXN0PGhvbGRlcl90eXBlICY+KHIpKTsKICB9CgogIFQgKiBzdGF0aWNfZXh0 cmFjdChwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAqIHApIGNvbnN0CiAgewogICAgaWYocCA9PSAw KQogICAgICByZXR1cm4gMDsKICAgICgodm9pZCkgKChwLT50eXBlKHNpZygpKSA9PSB0eXBlaWQo VCkpID8gMCA6IChfX2Fzc2VydF9mYWlsICgicC0+dHlwZShzaWcoKSkgPT0gdHlwZWlkKFQpIiwg Ii4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2FueS5ocHAiLCAyNjMsICgoY29uc3QgY2hhciAq KSAwKSksIDApKSk7CiAgICByZXR1cm4gc3RhdGljX2V4dHJhY3Qoc3RhdGljX2Nhc3Q8aG9sZGVy X3R5cGUgKj4ocCkpOwogIH0KCiAgVCAqIGV4dHJhY3RfcHRyKHBsYWNlaG9sZGVyPE9wZXJhdGlv bnM+ICogcCkgY29uc3QKICB7CiAgICBpZihwID09IDAgfHwgcC0+dHlwZShzaWcoKSkgIT0gdHlw ZWlkKFQpKQogICAgICByZXR1cm4gMDsKICAgIHJldHVybiBzdGF0aWNfZXh0cmFjdChzdGF0aWNf Y2FzdDxob2xkZXJfdHlwZSAqPihwKSk7CiAgfQoKICBjb25zdCBUICogZXh0cmFjdF9wdHIoY29u c3QgcGxhY2Vob2xkZXI8T3BlcmF0aW9ucz4gKiBwKSBjb25zdAogIHsKICAgIHJldHVybiBleHRy YWN0X3B0cihjb25zdF9jYXN0PHBsYWNlaG9sZGVyPE9wZXJhdGlvbnM+ICo+KHApKTsKICB9Cn07 CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9ucywgY2xhc3MgVD4Kc3RydWN0IGV4dHJhY3Rvcgog IDogZXh0cmFjdG9yX2ltcGw8T3BlcmF0aW9ucywgVCwgKDo6Ym9vc3Q6OmlzX2NsYXNzPFQ+Ojp2 YWx1ZSk+CnsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBPcGVyYXRpb25MaXN0Pgpjb25z dCBUICogZXh0cmFjdF9jb25zdF9wdHIoY29uc3QgcGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4g KiBwLAogICAgICAgIHR5cGVfaWQ8Y29uc3QgVD4pCnsKICByZXR1cm4gZXh0cmFjdG9yPE9wZXJh dGlvbkxpc3QsVD4oKS5leHRyYWN0X3B0cihwKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNz IE9wZXJhdGlvbkxpc3Q+ClQgKiBleHRyYWN0X3B0cihjb25zdCBwbGFjZWhvbGRlcjxPcGVyYXRp b25MaXN0PiAqIHAsIGJvb2xfaWQ8dHJ1ZT4pCnsKICByZXR1cm4gZXh0cmFjdF9jb25zdF9wdHIo cCwgdHlwZV9pZDxUPigpKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxp c3Q+ClQgKiBleHRyYWN0X3B0cihwbGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAsIGJvb2xf aWQ8ZmFsc2U+KQp7CiAgcmV0dXJuIGV4dHJhY3RvcjxPcGVyYXRpb25MaXN0LFQ+KCkuZXh0cmFj dF9wdHIocCk7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBQbGFjZWhvbGRlcj4KVCAqIGV4 dHJhY3RfcHRyKFBsYWNlaG9sZGVyICogcCkKewogIGJvb2xfaWQ8IDo6Ym9vc3Q6OmlzX2NvbnN0 PFQ+Ojp2YWx1ZT4gaWQ7CgoKICByZXR1cm4gZXh0cmFjdF9wdHI8VD4ocCwgaWQpOwp9CgoKdGVt cGxhdGU8Y2xhc3MgVCwgY2xhc3MgUGxhY2Vob2xkZXI+ClQgJiBleHRyYWN0X3JlZihQbGFjZWhv bGRlciAqIHAsIHR5cGVfaWQ8VCAmPikKewogIGlmKFQgKiBwdHIgPSBleHRyYWN0X3B0cjxUPihw KSkKICAgIHJldHVybiAqcHRyOwogIHRocm93IGJhZF9leHRyYWN0KCk7Cn0KCgp0ZW1wbGF0ZTxj bGFzcyBULCBjbGFzcyBQbGFjZWhvbGRlcj4KVCBleHRyYWN0X25vbnB0cihQbGFjZWhvbGRlciAq IHAsIGJvb2xfaWQ8dHJ1ZT4pCnsKICByZXR1cm4gZXh0cmFjdF9yZWYocCwgdHlwZV9pZDxUPigp KTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFBsYWNlaG9sZGVyPgpUIGV4dHJhY3Rfbm9u cHRyKFBsYWNlaG9sZGVyICogcCwgYm9vbF9pZDxmYWxzZT4pCnsKICByZXR1cm4gZXh0cmFjdF9y ZWYocCwgdHlwZV9pZDxjb25zdCBUICY+KCkpOwp9Cgp0ZW1wbGF0ZTxjbGFzcyBULCBjbGFzcyBQ bGFjZWhvbGRlcj4KVCBleHRyYWN0X25vbnB0cihQbGFjZWhvbGRlciAqIHApCnsKICBib29sX2lk PCA6OmJvb3N0Ojppc19yZWZlcmVuY2U8VD46OnZhbHVlPiBpZDsKICByZXR1cm4gZXh0cmFjdF9u b25wdHI8VD4ocCwgaWQpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgQW55LCBjbGFzcyBPcGVyYXRpb24s IGNsYXNzIEJlZ2luLCBjbGFzcyBFbmQ+CnN0cnVjdCBhbnlfb3BlcmF0b3JfYm9keTsKCnRlbXBs YXRlPGNsYXNzIEFueSwgY2xhc3MgQmVnaW4sIGNsYXNzIEVuZD4Kc3RydWN0IGFueV9vcGVyYXRv cgogIDogYW55X29wZXJhdG9yX2JvZHkKICAgIDwKICAgICAgQW55LAogICAgICB0eXBlbmFtZSBC ZWdpbjo6dHlwZSwKICAgICAgQmVnaW4sCiAgICAgIEVuZAogICAgPgp7Cn07Cgp0ZW1wbGF0ZTxj bGFzcyBBbnksIGNsYXNzIEVuZD4Kc3RydWN0IGFueV9vcGVyYXRvcjxBbnksRW5kLEVuZD4KewoK ICBzaWcgb3BlcmF0b3IoKShzaWcpIGNvbnN0OwogIHNpZyBvcGVyYXRvcltdKHNpZykgY29uc3Q7 Cn07CgoKdGVtcGxhdGU8Y2xhc3MgQW55LCBjbGFzcyBPcGVyYXRpb24sIGNsYXNzIEJlZ2luLCBj bGFzcyBFbmQ+CnN0cnVjdCBhbnlfb3BlcmF0b3JfYm9keSA6IGFueV9vcGVyYXRvcjxBbnksIHR5 cGVuYW1lIEJlZ2luOjpuZXh0LCBFbmQ+CnsKfTsKCn0KCgpjbGFzcyBiYWRfZXh0cmFjdCA6IHB1 YmxpYyA6OnN0ZDo6ZXhjZXB0aW9uCnsKcHVibGljOgogIGNvbnN0IGNoYXIgKiB3aGF0KCkgY29u c3QgdGhyb3coKQogIHsKICAgIHJldHVybiAiYm9vc3QuZHluYW1pY19hbnk6IGZhaWxlZCBleHRy YWN0IjsKICB9Cn07CgoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmNsYXNzIGFueQog IDogcHVibGljIGF1eDo6YW55X29wZXJhdG9yCiAgICAgICAgICAgPAogICAgICAgICAgICAgYW55 PE9wZXJhdGlvbkxpc3Q+LAogICAgICAgICAgICAgdHlwZW5hbWUgOjpib29zdDo6bXBsOjpiZWdp bjxPcGVyYXRpb25MaXN0Pjo6dHlwZSwKICAgICAgICAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1w bDo6ZW5kPE9wZXJhdGlvbkxpc3Q+Ojp0eXBlCiAgICAgICAgICAgPgp7CnB1YmxpYzoKCiAgdHlw ZWRlZiBPcGVyYXRpb25MaXN0IG9wZXJhdGlvbl9saXN0OwoKICBhbnkoKQogICAgOiBtX2NvbnRl bnQoMCkge30KCiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBhbnkoY29uc3QgVCAmIHZhbHVlKQogICAg OiBtX2NvbnRlbnQoYXV4OjpmYWN0b3J5PE9wZXJhdGlvbkxpc3Q+OjpjcmVhdGUodmFsdWUpKSB7 fQoKICBhbnkoY29uc3QgYW55ICYgb3RoZXIpCiAgICA6IG1fY29udGVudChvdGhlci5tX2NvbnRl bnQgPyBvdGhlci5tX2NvbnRlbnQtPmNsb25lKGF1eDo6c2lnKCkpIDogMCkge30KCiAgfmFueSgp CiAgewogICAgZGVsZXRlIG1fY29udGVudDsKICB9CgogIGFueSAmIG9wZXJhdG9yPShjb25zdCBh bnkgJiBvdGhlcikKICB7CiAgICBhdXg6OnBsYWNlaG9sZGVyPE9wZXJhdGlvbkxpc3Q+ICogb2xk ID0gbV9jb250ZW50OwogICAgbV9jb250ZW50ID0gb3RoZXIubV9jb250ZW50ID8gb3RoZXIubV9j b250ZW50LT5jbG9uZShhdXg6OnNpZygpKSA6IDA7CiAgICBkZWxldGUgb2xkOwogICAgcmV0dXJu ICp0aGlzOwogIH0KCiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBhbnkgJiBvcGVyYXRvcj0oY29uc3Qg VCAmIHZhbHVlKQogIHsKICAgIGF1eDo6cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBvbGQg PSBtX2NvbnRlbnQ7CiAgICBtX2NvbnRlbnQgPSBhdXg6OmZhY3Rvcnk8T3BlcmF0aW9uTGlzdD46 OmNyZWF0ZSh2YWx1ZSk7CiAgICBkZWxldGUgb2xkOwogICAgcmV0dXJuICp0aGlzOwogIH0KCiAg dm9pZCBzd2FwKGFueSAmIG90aGVyKQogIHsKICAgIDo6c3RkOjpzd2FwKG1fY29udGVudCwgb3Ro ZXIubV9jb250ZW50KTsKICB9CgogIGJvb2wgZW1wdHkoKSBjb25zdAogIHsKICAgIHJldHVybiAh bV9jb250ZW50OwogIH0KCiAgY29uc3QgOjpzdGQ6OnR5cGVfaW5mbyAmIHR5cGUoKSBjb25zdAog IHsKICAgIHJldHVybiBtX2NvbnRlbnQgPyBtX2NvbnRlbnQtPnR5cGUoYXV4OjpzaWcoKSkgOiB0 eXBlaWQodm9pZCk7CiAgfQoKcHJpdmF0ZToKCgoKICB0ZW1wbGF0ZTxjbGFzcyBPdGhlckxpc3Q+ CiAgYW55KGNvbnN0IGFueTxPdGhlckxpc3Q+ICYpOwoKICB0ZW1wbGF0ZTxjbGFzcyBPdGhlckxp c3Q+CiAgYW55ICYgb3BlcmF0b3I9KGNvbnN0IGFueTxPdGhlckxpc3Q+ICYpOwojIDQ4MCAiLi4v Li4vLi4vYm9vc3QvZHluYW1pY19hbnkvYW55LmhwcCIKcHVibGljOgoKCgogIGF1eDo6cGxhY2Vo b2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBtX2NvbnRlbnQ7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgT3Bl cmF0aW9uTGlzdD4KaW5saW5lIHZvaWQgc3dhcChhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBhbnk8 T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgYS5zd2FwKGIpOwp9CgoKCgp0ZW1wbGF0ZTxjbGFzcyBU LCBjbGFzcyBPcGVyYXRpb25MaXN0PgpUIGV4dHJhY3QoYW55PE9wZXJhdGlvbkxpc3Q+ICYgcmVm KQp7CiAgYXV4OjpwbGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAgPSByZWYubV9jb250ZW50 OwogIHJldHVybiBhdXg6OmV4dHJhY3Rfbm9ucHRyPFQ+KHApOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg VCwgY2xhc3MgT3BlcmF0aW9uTGlzdD4KVCBleHRyYWN0KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0 PiAmIHJlZikKewogIGNvbnN0IGF1eDo6cGxhY2Vob2xkZXI8T3BlcmF0aW9uTGlzdD4gKiBwID0g cmVmLm1fY29udGVudDsKICByZXR1cm4gYXV4OjpleHRyYWN0X25vbnB0cjxUPihwKTsKfQoKCnRl bXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJhdGlvbkxpc3Q+ClQgKiBleHRyYWN0KGFueTxPcGVy YXRpb25MaXN0PiAqIHB0cikKewogIGlmKHB0ciA9PSAwKQogICAgcmV0dXJuIDA7CiAgYXV4Ojpw bGFjZWhvbGRlcjxPcGVyYXRpb25MaXN0PiAqIHAgPSBwdHItPm1fY29udGVudDsKICByZXR1cm4g YXV4OjpleHRyYWN0X3B0cjxUPihwKTsKfQoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIE9wZXJh dGlvbkxpc3Q+ClQgKiBleHRyYWN0KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAqIHB0cikKewog IGlmKHB0ciA9PSAwKQogICAgcmV0dXJuIDA7CiAgY29uc3QgYXV4OjpwbGFjZWhvbGRlcjxPcGVy YXRpb25MaXN0PiAqIHAgPSBwdHItPm1fY29udGVudDsKICByZXR1cm4gYXV4OjpleHRyYWN0X3B0 cjxUPihwKTsKfQoKCgoKCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgpib29sIG9wZXJh dG9yPT0oY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJhdGlvbkxp c3Q+ICYgYikKewogIHJldHVybiBlcXVhbF90bygpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3Mg T3BlcmF0aW9uTGlzdD4KYm9vbCBvcGVyYXRvciE9KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAm IGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gbm90X2VxdWFsX3Rv KCkoYSwgYik7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgpib29sIG9wZXJhdG9y PChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4g JiBiKQp7CiAgcmV0dXJuIGxlc3MoKShhLCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlv bkxpc3Q+CmJvb2wgb3BlcmF0b3I8PShjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25z dCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIGxlc3NfZXF1YWwoKShhLCBiKTsK fQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmJvb2wgb3BlcmF0b3I+KGNvbnN0IGFu eTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICBy ZXR1cm4gZ3JlYXRlcigpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlzdD4K Ym9vbCBvcGVyYXRvcj49KGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxP cGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gZ3JlYXRlcl9lcXVhbCgpKGEsIGIpOwp9CgoK dGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlzdD4KYm9vbCBvcGVyYXRvciYmKGNvbnN0IGFueTxP cGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1 cm4gbG9naWNhbF9hbmQoKShhLCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+ CmJvb2wgb3BlcmF0b3J8fChjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBhLCBjb25zdCBhbnk8 T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIGxvZ2ljYWxfb3IoKShhLCBiKTsKfQoKCnRl bXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmFueTxPcGVyYXRpb25MaXN0PgpvcGVyYXRvciso Y29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYg YikKewogIHJldHVybiBwbHVzKCkoYSwgYik7Cn0KCgp0ZW1wbGF0ZTxjbGFzcyBPcGVyYXRpb25M aXN0Pgphbnk8T3BlcmF0aW9uTGlzdD4Kb3BlcmF0b3ItKGNvbnN0IGFueTxPcGVyYXRpb25MaXN0 PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsKICByZXR1cm4gbWludXMoKShh LCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbkxpc3Q+CmFueTxPcGVyYXRpb25MaXN0 PgpvcGVyYXRvciooY29uc3QgYW55PE9wZXJhdGlvbkxpc3Q+ICYgYSwgY29uc3QgYW55PE9wZXJh dGlvbkxpc3Q+ICYgYikKewogIHJldHVybiBtdWx0aXBsaWVzKCkoYSwgYik7Cn0KCgp0ZW1wbGF0 ZTxjbGFzcyBPcGVyYXRpb25MaXN0Pgphbnk8T3BlcmF0aW9uTGlzdD4Kb3BlcmF0b3IvKGNvbnN0 IGFueTxPcGVyYXRpb25MaXN0PiAmIGEsIGNvbnN0IGFueTxPcGVyYXRpb25MaXN0PiAmIGIpCnsK ICByZXR1cm4gZGl2aWRlcygpKGEsIGIpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9uTGlz dD4KYW55PE9wZXJhdGlvbkxpc3Q+Cm9wZXJhdG9yJShjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4g JiBhLCBjb25zdCBhbnk8T3BlcmF0aW9uTGlzdD4gJiBiKQp7CiAgcmV0dXJuIG1vZHVsdXMoKShh LCBiKTsKfQoKCnRlbXBsYXRlPGNsYXNzIENoYXIsIGNsYXNzIFRyYWl0cywgY2xhc3MgT3BlcmF0 aW9ucz4KOjpzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiAmIG9wZXJhdG9yPDwoCiAg OjpzdGQ6OmJhc2ljX29zdHJlYW08Q2hhciwgVHJhaXRzPiAmIG91dHB1dCwKICBjb25zdCBhbnk8 T3BlcmF0aW9ucz4gJiB2YWx1ZSkKewogIHJldHVybiB0b19iYXNpY19vc3RyZWFtPENoYXIsIFRy YWl0cz4oKShvdXRwdXQsIHZhbHVlKTsKfQoKCgp9IH0KIyAzMSAiLi4vLi4vLi4vYm9vc3QvZHlu YW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCiMgMSAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkv YXV4L2Z1bmN0aW9uX2FyZ3VtZW50cy5ocHAiIDEKCgoKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29z dC9ib29zdC9tcGwvcG9wX2Zyb250X2Z3ZC5ocHAiIDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbXBsL3BvcF9mcm9udF9md2QuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3Bh Y2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcgPiBzdHJ1Y3QgcG9wX2Zyb250X3RyYWl0 czsKdGVtcGxhdGU8IHR5cGVuYW1lIFNlcXVlbmNlID4gc3RydWN0IHBvcF9mcm9udDsKCn0KfQoj IDUgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBw IiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BvcF9iYWNrX2Z3ZC5ocHAi IDEKIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL3BvcF9iYWNrX2Z3ZC5ocHAi Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIFRh ZyA+IHN0cnVjdCBwb3BfYmFja190cmFpdHM7CnRlbXBsYXRlPCB0eXBlbmFtZSBTZXF1ZW5jZSA+ IHN0cnVjdCBwb3BfYmFjazsKCn0KfQojIDYgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1 eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBwIiAyCgoKCm5hbWVzcGFjZSBib29zdCB7IG5hbWVzcGFj ZSBkeW5hbWljX2FueSB7IG5hbWVzcGFjZSBhdXggewoKdGVtcGxhdGU8Y2xhc3MgRnVuVHJhaXRz LCBsb25nIE4+CnN0cnVjdCBhcmdfYXQ7Cgp0ZW1wbGF0ZTxjbGFzcyBTaWc+CnN0cnVjdCBmdW5f dHJhaXRzOwoKCgojIDEgIi4uLy4uLy4uL2Jvb3N0L2R5bmFtaWNfYW55L2F1eC9nZW5lcmF0ZWQv ZnVuY3Rpb25fYXJndW1lbnRzX2ltcGwxMC5ocHAiIDEKCgp0ZW1wbGF0ZTxjbGFzcyBSPgpzdHJ1 Y3QgZnVuX3RyYWl0czxSKCk+IHsKICBzdGF0aWMgY29uc3QgbG9uZyBhcml0eT0wOwogIHR5cGVk ZWYgUiByZXM7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0 eXBlZGVmIFIodHlwZSkoVCk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNo X2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4K ICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoKTsKICB9Owp9Owp0 ZW1wbGF0ZTxjbGFzcyBUcj4Kc3RydWN0IGFyZ19hdDxUciwwPiB7CiAgdHlwZWRlZiB0eXBlbmFt ZSBUcjo6dDAgdHlwZTsKfTsKdGVtcGxhdGU8Y2xhc3MgUixjbGFzcyBUMD4Kc3RydWN0IGZ1bl90 cmFpdHM8UihUMCk+IHsKICBzdGF0aWMgY29uc3QgbG9uZyBhcml0eT0xOwogIHR5cGVkZWYgUiBy ZXM7CiAgdHlwZWRlZiBUMCB0MDsKICB0eXBlZGVmIFIocG9wX2Zyb250KSgpOwogIHR5cGVkZWYg Uihwb3BfYmFjaykoKTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2Zyb250IHsK ICAgIHR5cGVkZWYgUih0eXBlKShULFQwKTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3Ry dWN0IHB1c2hfYmFjayB7CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVCk7CiAgfTsKICB0ZW1wbGF0 ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBlKShU MCk7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVjdCBhcmdfYXQ8VHIsMT4gewogIHR5 cGVkZWYgdHlwZW5hbWUgVHI6OnQxIHR5cGU7Cn07CnRlbXBsYXRlPGNsYXNzIFIsY2xhc3MgVDAs Y2xhc3MgVDE+CnN0cnVjdCBmdW5fdHJhaXRzPFIoVDAsVDEpPiB7CiAgc3RhdGljIGNvbnN0IGxv bmcgYXJpdHk9MjsKICB0eXBlZGVmIFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBU MSB0MTsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShU MCk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVm IFIodHlwZSkoVCxUMCxUMSk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNo X2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQpOwogIH07CiAgdGVtcGxhdGU8Y2xh c3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEp OwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDI+IHsKICB0eXBl ZGVmIHR5cGVuYW1lIFRyOjp0MiB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNs YXNzIFQxLGNsYXNzIFQyPgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyKT4gewogIHN0YXRp YyBjb25zdCBsb25nIGFyaXR5PTM7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVmIFQwIHQwOwog IHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFIocG9wX2Zyb250KShU MSxUMik7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4K ICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMik7CiAg fTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBS KHR5cGUpKFQwLFQxLFQyLFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmVi aW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIpOwogIH07Cn07CnRlbXBs YXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDM+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRy Ojp0MyB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQy LGNsYXNzIFQzPgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzKT4gewogIHN0YXRpYyBj b25zdCBsb25nIGFyaXR5PTQ7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVmIFQwIHQwOwogIHR5 cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFQzIHQzOwogIHR5cGVkZWYg Uihwb3BfZnJvbnQpKFQxLFQyLFQzKTsKICB0eXBlZGVmIFIocG9wX2JhY2spKFQwLFQxLFQyKTsK ICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2Zyb250IHsKICAgIHR5cGVkZWYgUih0 eXBlKShULFQwLFQxLFQyLFQzKTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3RydWN0IHB1 c2hfYmFjayB7CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVDEsVDIsVDMsVCk7CiAgfTsKICB0ZW1w bGF0ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBl KShUMCxUMSxUMixUMyk7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVjdCBhcmdfYXQ8 VHIsND4gewogIHR5cGVkZWYgdHlwZW5hbWUgVHI6OnQ0IHR5cGU7Cn07CnRlbXBsYXRlPGNsYXNz IFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQ+CnN0cnVjdCBm dW5fdHJhaXRzPFIoVDAsVDEsVDIsVDMsVDQpPiB7CiAgc3RhdGljIGNvbnN0IGxvbmcgYXJpdHk9 NTsKICB0eXBlZGVmIFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBUMSB0MTsKICB0 eXBlZGVmIFQyIHQyOwogIHR5cGVkZWYgVDMgdDM7CiAgdHlwZWRlZiBUNCB0NDsKICB0eXBlZGVm IFIocG9wX2Zyb250KShUMSxUMixUMyxUNCk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxU MixUMyk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBl ZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgog IHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQp OwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0 eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRy PgpzdHJ1Y3QgYXJnX2F0PFRyLDU+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0NSB0eXBlOwp9 Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNs YXNzIFQ0LGNsYXNzIFQ1PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1KT4g ewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTY7CiAgdHlwZWRlZiBSIHJlczsKICB0eXBlZGVm IFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVmIFQzIHQz OwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBlZGVmIFIocG9wX2Zyb250 KShUMSxUMixUMyxUNCxUNSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixUMyxUNCk7 CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBlZGVmIFIo dHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSk7CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0 cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQp OwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0 eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNz IFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDY+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0NiB0eXBl Owp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQz LGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQy LFQzLFQ0LFQ1LFQ2KT4gewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTc7CiAgdHlwZWRlZiBS IHJlczsKICB0eXBlZGVmIFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsK ICB0eXBlZGVmIFQzIHQzOwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBl ZGVmIFQ2IHQ2OwogIHR5cGVkZWYgUihwb3BfZnJvbnQpKFQxLFQyLFQzLFQ0LFQ1LFQ2KTsKICB0 eXBlZGVmIFIocG9wX2JhY2spKFQwLFQxLFQyLFQzLFQ0LFQ1KTsKICB0ZW1wbGF0ZTxjbGFzcyBU PgogIHN0cnVjdCBwdXNoX2Zyb250IHsKICAgIHR5cGVkZWYgUih0eXBlKShULFQwLFQxLFQyLFQz LFQ0LFQ1LFQ2KTsKICB9OwogIHRlbXBsYXRlPGNsYXNzIFQ+CiAgc3RydWN0IHB1c2hfYmFjayB7 CiAgICB0eXBlZGVmIFIodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVCk7CiAgfTsKICB0ZW1w bGF0ZTxjbGFzcyBVPgogIHN0cnVjdCByZWJpbmRfcmVzdWx0IHsKICAgIHR5cGVkZWYgVSh0eXBl KShUMCxUMSxUMixUMyxUNCxUNSxUNik7CiAgfTsKfTsKdGVtcGxhdGU8Y2xhc3MgVHI+CnN0cnVj dCBhcmdfYXQ8VHIsNz4gewogIHR5cGVkZWYgdHlwZW5hbWUgVHI6OnQ3IHR5cGU7Cn07CnRlbXBs YXRlPGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xhc3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQs Y2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDc+CnN0cnVjdCBmdW5fdHJhaXRzPFIoVDAsVDEsVDIs VDMsVDQsVDUsVDYsVDcpPiB7CiAgc3RhdGljIGNvbnN0IGxvbmcgYXJpdHk9ODsKICB0eXBlZGVm IFIgcmVzOwogIHR5cGVkZWYgVDAgdDA7CiAgdHlwZWRlZiBUMSB0MTsKICB0eXBlZGVmIFQyIHQy OwogIHR5cGVkZWYgVDMgdDM7CiAgdHlwZWRlZiBUNCB0NDsKICB0eXBlZGVmIFQ1IHQ1OwogIHR5 cGVkZWYgVDYgdDY7CiAgdHlwZWRlZiBUNyB0NzsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSxU MixUMyxUNCxUNSxUNixUNyk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixUMyxUNCxU NSxUNik7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9udCB7CiAgICB0eXBl ZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyk7CiAgfTsKICB0ZW1wbGF0ZTxj bGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBSKHR5cGUpKFQwLFQxLFQy LFQzLFQ0LFQ1LFQ2LFQ3LFQpOwogIH07CiAgdGVtcGxhdGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmVi aW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcp OwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3QgYXJnX2F0PFRyLDg+IHsKICB0eXBl ZGVmIHR5cGVuYW1lIFRyOjp0OCB0eXBlOwp9Owp0ZW1wbGF0ZTxjbGFzcyBSLGNsYXNzIFQwLGNs YXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNsYXNzIFQ1LGNsYXNzIFQ2LGNsYXNz IFQ3LGNsYXNzIFQ4PgpzdHJ1Y3QgZnVuX3RyYWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3 LFQ4KT4gewogIHN0YXRpYyBjb25zdCBsb25nIGFyaXR5PTk7CiAgdHlwZWRlZiBSIHJlczsKICB0 eXBlZGVmIFQwIHQwOwogIHR5cGVkZWYgVDEgdDE7CiAgdHlwZWRlZiBUMiB0MjsKICB0eXBlZGVm IFQzIHQzOwogIHR5cGVkZWYgVDQgdDQ7CiAgdHlwZWRlZiBUNSB0NTsKICB0eXBlZGVmIFQ2IHQ2 OwogIHR5cGVkZWYgVDcgdDc7CiAgdHlwZWRlZiBUOCB0ODsKICB0eXBlZGVmIFIocG9wX2Zyb250 KShUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxU MixUMyxUNCxUNSxUNixUNyk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9u dCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk7CiAg fTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRlZiBS KHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQpOwogIH07CiAgdGVtcGxhdGU8Y2xh c3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSkoVDAsVDEs VDIsVDMsVDQsVDUsVDYsVDcsVDgpOwogIH07Cn07CnRlbXBsYXRlPGNsYXNzIFRyPgpzdHJ1Y3Qg YXJnX2F0PFRyLDk+IHsKICB0eXBlZGVmIHR5cGVuYW1lIFRyOjp0OSB0eXBlOwp9Owp0ZW1wbGF0 ZTxjbGFzcyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0LGNs YXNzIFQ1LGNsYXNzIFQ2LGNsYXNzIFQ3LGNsYXNzIFQ4LGNsYXNzIFQ5PgpzdHJ1Y3QgZnVuX3Ry YWl0czxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5KT4gewogIHN0YXRpYyBjb25zdCBs b25nIGFyaXR5PTEwOwogIHR5cGVkZWYgUiByZXM7CiAgdHlwZWRlZiBUMCB0MDsKICB0eXBlZGVm IFQxIHQxOwogIHR5cGVkZWYgVDIgdDI7CiAgdHlwZWRlZiBUMyB0MzsKICB0eXBlZGVmIFQ0IHQ0 OwogIHR5cGVkZWYgVDUgdDU7CiAgdHlwZWRlZiBUNiB0NjsKICB0eXBlZGVmIFQ3IHQ3OwogIHR5 cGVkZWYgVDggdDg7CiAgdHlwZWRlZiBUOSB0OTsKICB0eXBlZGVmIFIocG9wX2Zyb250KShUMSxU MixUMyxUNCxUNSxUNixUNyxUOCxUOSk7CiAgdHlwZWRlZiBSKHBvcF9iYWNrKShUMCxUMSxUMixU MyxUNCxUNSxUNixUNyxUOCk7CiAgdGVtcGxhdGU8Y2xhc3MgVD4KICBzdHJ1Y3QgcHVzaF9mcm9u dCB7CiAgICB0eXBlZGVmIFIodHlwZSkoVCxUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCxUOSk7 CiAgfTsKICB0ZW1wbGF0ZTxjbGFzcyBUPgogIHN0cnVjdCBwdXNoX2JhY2sgewogICAgdHlwZWRl ZiBSKHR5cGUpKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LFQ5LFQpOwogIH07CiAgdGVtcGxh dGU8Y2xhc3MgVT4KICBzdHJ1Y3QgcmViaW5kX3Jlc3VsdCB7CiAgICB0eXBlZGVmIFUodHlwZSko VDAsVDEsVDIsVDMsVDQsVDUsVDYsVDcsVDgsVDkpOwogIH07Cn07CiMgMjAgIi4uLy4uLy4uL2Jv b3N0L2R5bmFtaWNfYW55L2F1eC9mdW5jdGlvbl9hcmd1bWVudHMuaHBwIiAyCgoKdGVtcGxhdGU8 Y2xhc3MgUywgbG9uZyBQb3NpdGlvbiwgbG9uZyBBcml0eT4Kc3RydWN0IGZ1bl9hcmdzX2l0ZXIK ewogICAgdHlwZWRlZiB0eXBlbmFtZSBhcmdfYXQ8ZnVuX3RyYWl0czxTPiwgUG9zaXRpb24+Ojp0 eXBlIHR5cGU7CiAgICB0eXBlZGVmIGZ1bl9hcmdzX2l0ZXI8UywgUG9zaXRpb24gKyAxLCBBcml0 eT4gbmV4dDsKICAgIHR5cGVkZWYgZnVuX2FyZ3NfaXRlcjxTLCBQb3NpdGlvbiAtIDEsIEFyaXR5 PiBwcmlvcjsKICAgIHR5cGVkZWYgOjpib29zdDo6bXBsOjpyYW5kb21fYWNjZXNzX2l0ZXJhdG9y X3RhZyBjYXRlZ29yeTsKICAgIHN0YXRpYyBjb25zdCBsb25nIHBvc2l0aW9uID0gUG9zaXRpb247 CgogICAgdGVtcGxhdGU8Y2xhc3MgRGVsdGE+CiAgICBzdHJ1Y3QgYWR2YW5jZQogICAgewogICAg ICAgIHR5cGVkZWYgZnVuX2FyZ3NfaXRlcjxTLCBwb3NpdGlvbiArIERlbHRhOjp2YWx1ZSwgQXJp dHk+IHR5cGU7CiAgICB9OwoKICAgIHRlbXBsYXRlPGNsYXNzIE90aGVyPgogICAgc3RydWN0IGRp c3RhbmNlCiAgICB7CiAgICAgICAgdHlwZWRlZiA6OmJvb3N0OjptcGw6OmludGVncmFsX2M8bG9u ZywgT3RoZXI6OnBvc2l0aW9uIC0gcG9zaXRpb24+IHR5cGU7CiAgICB9Owp9OwoKdGVtcGxhdGU8 Y2xhc3MgUywgbG9uZyBBcml0eT4Kc3RydWN0IGZ1bl9hcmdzX2l0ZXI8UywgQXJpdHksIEFyaXR5 Pgp7CiAgICB0eXBlZGVmIGZ1bl9hcmdzX2l0ZXI8UywgQXJpdHkgLSAxLCBBcml0eT4gcHJpb3I7 CiAgICB0eXBlZGVmIDo6Ym9vc3Q6Om1wbDo6cmFuZG9tX2FjY2Vzc19pdGVyYXRvcl90YWcgY2F0 ZWdvcnk7CiAgICBzdGF0aWMgY29uc3QgbG9uZyBwb3NpdGlvbiA9IEFyaXR5OwoKICAgIHRlbXBs YXRlPGNsYXNzIERlbHRhPgogICAgc3RydWN0IGFkdmFuY2UKICAgIHsKICAgICAgICB0eXBlZGVm IGZ1bl9hcmdzX2l0ZXI8UywgcG9zaXRpb24gKyBEZWx0YTo6dmFsdWUsIEFyaXR5PiB0eXBlOwog ICAgfTsKCiAgICB0ZW1wbGF0ZTxjbGFzcyBPdGhlcj4KICAgIHN0cnVjdCBkaXN0YW5jZQogICAg ewogICAgICAgIHR5cGVkZWYgOjpib29zdDo6bXBsOjppbnRlZ3JhbF9jPGxvbmcsIE90aGVyOjpw b3NpdGlvbiAtIHBvc2l0aW9uPiB0eXBlOwogICAgfTsKfTsKCnN0cnVjdCBmdW5jdGlvbl9hcmd1 bWVudHNfdGFnIHt9OwoKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZT4Kc3RydWN0IGZ1bmN0aW9u X2FyZ3VtZW50cwp7CgogICAgdHlwZWRlZiBTaWduYXR1cmUgc2lnbmF0dXJlOwogICAgdHlwZWRl ZiBmdW5fdHJhaXRzPFNpZ25hdHVyZT4gX3RyYWl0czsKICAgIHR5cGVkZWYgdHlwZW5hbWUgX3Ry YWl0czo6cmVzIHJlc3VsdF90eXBlOwoKICAgIHRlbXBsYXRlPGNsYXNzIFU+CiAgICBzdHJ1Y3Qg cmViaW5kX3Jlc3VsdCA6IF90cmFpdHM6OnRlbXBsYXRlIHJlYmluZF9yZXN1bHQ8VT4ge307Cgog ICAgc3RhdGljIGNvbnN0IDo6c3RkOjpzaXplX3QgYXJpdHkgPSBfdHJhaXRzOjphcml0eTsKCgog ICAgdHlwZWRlZiBmdW5fYXJnc19pdGVyPFNpZ25hdHVyZSwgMCwgYXJpdHk+IGJlZ2luOwogICAg dHlwZWRlZiBmdW5fYXJnc19pdGVyPFNpZ25hdHVyZSwgYXJpdHksIGFyaXR5PiBlbmQ7CiAgICB0 eXBlZGVmIGZ1bmN0aW9uX2FyZ3VtZW50c190YWcgdGFnOwp9OwoKfSB9IH0KCgpuYW1lc3BhY2Ug Ym9vc3QgeyBuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4Kc3RydWN0IGNsZWFyX3RyYWl0czwg Ojpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3RhZyA+CnsKICAg IHRlbXBsYXRlPGNsYXNzIFNlcXVlbmNlPgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAg ICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRz PAogICAgICAgICAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6cmVzdWx0X3R5cGUgKCk+IHR5cGU7CiAg ICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgcHVzaF9mcm9udF90cmFpdHM8IDo6Ym9vc3Q6OmR5 bmFtaWNfYW55OjphdXg6OmZ1bmN0aW9uX2FyZ3VtZW50c190YWcgPgp7CiAgICB0ZW1wbGF0ZTxj bGFzcyBTZXF1ZW5jZSwgY2xhc3MgVD4KICAgIHN0cnVjdCBhbGdvcml0aG0KICAgIHsKICAgICAg ICB0eXBlZGVmIDo6Ym9vc3Q6OmR5bmFtaWNfYW55OjphdXg6OmZ1bmN0aW9uX2FyZ3VtZW50czwK ICAgICAgICAgICAgdHlwZW5hbWUgU2VxdWVuY2U6Ol90cmFpdHM6OnRlbXBsYXRlIHB1c2hfZnJv bnQ8VD46OnR5cGU+IHR5cGU7CiAgICB9Owp9OwoKdGVtcGxhdGU8PgpzdHJ1Y3QgcHVzaF9iYWNr X3RyYWl0czwgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3Rh ZyA+CnsKICAgIHRlbXBsYXRlPGNsYXNzIFNlcXVlbmNlLCBjbGFzcyBUPgogICAgc3RydWN0IGFs Z29yaXRobQogICAgewogICAgICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6 ZnVuY3Rpb25fYXJndW1lbnRzPAogICAgICAgICAgICB0eXBlbmFtZSBTZXF1ZW5jZTo6X3RyYWl0 czo6dGVtcGxhdGUgcHVzaF9iYWNrPFQ+Ojp0eXBlPiB0eXBlOwogICAgfTsKfTsKCnRlbXBsYXRl PD4Kc3RydWN0IHBvcF9mcm9udF90cmFpdHM8IDo6Ym9vc3Q6OmR5bmFtaWNfYW55OjphdXg6OmZ1 bmN0aW9uX2FyZ3VtZW50c190YWcgPgp7CiAgICB0ZW1wbGF0ZTxjbGFzcyBTZXF1ZW5jZT4KICAg IHN0cnVjdCBhbGdvcml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIHR5cGVuYW1lIFNlcXVlbmNl OjpfdHJhaXRzIHRyOwogICAgICAgIHR5cGVkZWYgOjpib29zdDo6ZHluYW1pY19hbnk6OmF1eDo6 ZnVuY3Rpb25fYXJndW1lbnRzPAogICAgICAgICAgICB0eXBlbmFtZSB0cjo6cG9wX2Zyb250PiB0 eXBlOwogICAgfTsKfTsKCnRlbXBsYXRlPD4Kc3RydWN0IHBvcF9iYWNrX3RyYWl0czwgOjpib29z dDo6ZHluYW1pY19hbnk6OmF1eDo6ZnVuY3Rpb25fYXJndW1lbnRzX3RhZyA+CnsKICAgIHRlbXBs YXRlPGNsYXNzIFNlcXVlbmNlPgogICAgc3RydWN0IGFsZ29yaXRobQogICAgewogICAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgU2VxdWVuY2U6Ol90cmFpdHMgdHI7CiAgICAgICAgdHlwZWRlZiA6OmJv b3N0OjpkeW5hbWljX2FueTo6YXV4OjpmdW5jdGlvbl9hcmd1bWVudHM8CiAgICAgICAgICAgIHR5 cGVuYW1lIHRyOjpwb3BfYmFjaz4gdHlwZTsKICAgIH07Cn07Cgp9IH0KIyAzMiAiLi4vLi4vLi4v Ym9vc3QvZHluYW1pY19hbnkvZnVuY3Rpb24uaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgeyBuYW1l c3BhY2UgZHluYW1pY19hbnkgewoKY2xhc3MgYmFkX2Z1bmN0aW9uX2NhbGwgOiBwdWJsaWMgOjpz dGQ6OmV4Y2VwdGlvbgp7CnB1YmxpYzoKCiAgdmlydHVhbCBjb25zdCBjaGFyICogd2hhdCgpIGNv bnN0IHRocm93KCkKICB7CiAgICByZXR1cm4gImJvb3N0LmR5bmFtaWNfYW55OiBmYWlsZWQgZnVu Y3Rpb24gY2FsbCI7CiAgfQp9OwoKbmFtZXNwYWNlIGF1eCB7CgoKCgoKdGVtcGxhdGU8Y2xhc3Mg VD4Kc3RydWN0IGNvbnRhaW5zX2FueVQKewogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6cmVt b3ZlX3JlZmVyZW5jZTxUPjo6dHlwZSBub25yZWY7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0 OjpyZW1vdmVfY29uc3Q8bm9ucmVmPjo6dHlwZSBuYWtlZDsKICBzdGF0aWMgY29uc3QgYm9vbCB2 YWx1ZSA9ICg6OmJvb3N0Ojppc19zYW1lPG5ha2VkLGFueVQ+Ojp2YWx1ZSk7Cn07CgoKCgp0ZW1w bGF0ZTxjbGFzcyBULCBjbGFzcyBXaXRoPgpzdHJ1Y3QgYmluZF9hbnlUCnsKICB0eXBlZGVmIHR5 cGVuYW1lIDo6Ym9vc3Q6OnJlbW92ZV9yZWZlcmVuY2U8VD46OnR5cGUgdW5yZWZlZDsKICB0eXBl ZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6aWZfPAogICAgOjpib29zdDo6aXNfY29uc3Q8dW5y ZWZlZD4sIGNvbnN0IFdpdGgsIFdpdGg+Ojp0eXBlIG5vbnJlZjsKICB0eXBlZGVmIHR5cGVuYW1l IDo6Ym9vc3Q6Om1wbDo6aWZfPAogICAgOjpib29zdDo6aXNfcmVmZXJlbmNlPFQ+LCBub25yZWYg Jiwgbm9ucmVmPjo6dHlwZSB0eXBlOwp9OwoKCnRlbXBsYXRlPGNsYXNzIFQsIGNsYXNzIFdpdGg+ CnN0cnVjdCBiaW5kX2lmX2FueVQKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1w bDo6YXBwbHlfaWYKICAgIDwKICAgICAgY29udGFpbnNfYW55VDxUPiwKICAgICAgYmluZF9hbnlU PFQsV2l0aD4sCiAgICAgIDo6Ym9vc3Q6Om1wbDo6aWRlbnRpdHk8VD4KICAgID46OnR5cGUgdHlw ZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIFdpdGg+CnN0cnVjdCBiaW5k X2FueVRfYXJndW1lbnRzCnsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBiaW5kX2FueVRfYXJndW1l bnRzCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+LAogICAgICBXaXRo CiAgICA+Ojp0eXBlIGFyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSBhcmdzOjpzaWduYXR1cmUgdHlw ZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZSwgY2xhc3MgV2l0aD4Kc3RydWN0IGJpbmRf YW55VF9hcmd1bWVudHM8ZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4sIFdpdGg+CnsKICB0 eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OnRyYW5zZm9ybQogICAgPAogICAgICBm dW5jdGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPiwKICAgICAgYmluZF9pZl9hbnlUPCA6OmJvb3N0 OjptcGw6OmFyZzwxPiwgV2l0aD4KICAgID46OnR5cGUgdHlwZTsKfTsKCgoKdGVtcGxhdGU8Y2xh c3MgU2lnbmF0dXJlPgpzdHJ1Y3Qgc2lnMnR1cGxlOwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3Mg VDA+CnN0cnVjdCBzaWcydHVwbGU8UihUMCk+CnsKICB0eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQw PiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxPgpzdHJ1Y3Qg c2lnMnR1cGxlPFIoVDAsVDEpPgp7CiAgdHlwZWRlZiA6OmJvb3N0Ojp0dXBsZTxUMCxUMT4gdHlw ZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFIsIGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3MgVDI+CnN0 cnVjdCBzaWcydHVwbGU8UihUMCxUMSxUMik+CnsKICB0eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQw LFQxLFQyPiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxLCBj bGFzcyBUMiwgY2xhc3MgVDM+CnN0cnVjdCBzaWcydHVwbGU8UihUMCxUMSxUMixUMyk+CnsKICB0 eXBlZGVmIDo6Ym9vc3Q6OnR1cGxlPFQwLFQxLFQyLFQzPiB0eXBlOwp9OwoKdGVtcGxhdGU8Y2xh c3MgUiwgY2xhc3MgVDAsIGNsYXNzIFQxLCBjbGFzcyBUMiwgY2xhc3MgVDMsIGNsYXNzIFQ0Pgpz dHJ1Y3Qgc2lnMnR1cGxlPFIoVDAsVDEsVDIsVDMsVDQpPgp7CiAgdHlwZWRlZiA6OmJvb3N0Ojp0 dXBsZTxUMCxUMSxUMixUMyxUND4gdHlwZTsKfTsKCgoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0 IHBhcmFtX2Zvcl9jYWxsCnsKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OmNhbGxfdHJhaXRz PFQ+OjpwYXJhbV90eXBlIHR5cGU7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgU2lnbmF0dXJlPgpzdHJ1 Y3Qgb3B0aW1pemVfYXJndW1lbnRzX2NvcHlpbmcKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIG9w dGltaXplX2FyZ3VtZW50c19jb3B5aW5nCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxT aWduYXR1cmU+CiAgICA+Ojp0eXBlIGFyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSBhcmdzOjpzaWdu YXR1cmUgdHlwZTsKfTsKCnRlbXBsYXRlPGNsYXNzIFNpZ25hdHVyZT4Kc3RydWN0IG9wdGltaXpl X2FyZ3VtZW50c19jb3B5aW5nPGZ1bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+ID4KewogIHR5 cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6dHJhbnNmb3JtCiAgICA8CiAgICAgIGZ1 bmN0aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+LAogICAgICBwYXJhbV9mb3JfY2FsbDwgOjpib29z dDo6bXBsOjphcmc8MT4gPgogICAgPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBB cmdzLCBjbGFzcyBMLCBjbGFzcyBDdXIsIGNsYXNzIEVuZD4Kc3RydWN0IGNhbGNfY2FsbF9leF9h cmdzOwoKCnRlbXBsYXRlPGNsYXNzIEFyZ3MsIGNsYXNzIEwsIGNsYXNzIEN1ciwgY2xhc3MgRW5k PgpzdHJ1Y3QgaW5zZXJ0X2NhbGxfZXhfYXJncwp7CiAgdHlwZWRlZiB0eXBlbmFtZQogICAgOjpi b29zdDo6bXBsOjpkaXN0YW5jZQogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJl Z2luPEFyZ3M+Ojp0eXBlLAogICAgICBDdXIKICAgID46OnR5cGUgY3VyX3BvczsKCiAgdHlwZWRl ZiB0eXBlbmFtZQogICAgOjpib29zdDo6bXBsOjpwbHVzCiAgICA8CiAgICAgIGN1cl9wb3MsCiAg ICAgIDo6Ym9vc3Q6Om1wbDo6aW50ZWdyYWxfYzxsb25nLCAyPgogICAgPjo6dHlwZSBuZXdfcG9z OwoKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6aW5zZXJ0PAogICAgQXJncywgdHlw ZW5hbWUgQ3VyOjpuZXh0LCBjb25zdCBhbnk8TD4gJj46OnR5cGUgYXJnczsKCiAgdHlwZWRlZiB0 eXBlbmFtZQogICAgOjpib29zdDo6bXBsOjphZHZhbmNlCiAgICA8CiAgICAgIHR5cGVuYW1lIDo6 Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUsCiAgICAgIG5ld19wb3MKICAgID46OnR5cGUg bmV3X2N1cjsKCiAgdHlwZWRlZiB0eXBlbmFtZQogICAgY2FsY19jYWxsX2V4X2FyZ3MKICAgIDwK ICAgICAgYXJncywKICAgICAgTCwKICAgICAgbmV3X2N1ciwKICAgICAgdHlwZW5hbWUgOjpib29z dDo6bXBsOjplbmQ8YXJncz46OnR5cGUKICAgID46OnR5cGUgdHlwZTsKfTsKCgp0ZW1wbGF0ZTxj bGFzcyBBcmdzLCBjbGFzcyBMLCBjbGFzcyBDdXIsIGNsYXNzIEVuZD4Kc3RydWN0IGNhbGNfY2Fs bF9leF9hcmdzCnsKICB0eXBlZGVmIHR5cGVuYW1lIEN1cjo6bmV4dCBuZXh0OwogIHR5cGVkZWYg dHlwZW5hbWUKICAgOjpib29zdDo6bXBsOjphcHBseV9pZgogICA8CiAgICAgY29udGFpbnNfYW55 VDx0eXBlbmFtZSBDdXI6OnR5cGU+LAogICAgIGluc2VydF9jYWxsX2V4X2FyZ3M8QXJncywgTCwg Q3VyLCBFbmQ+LAogICAgIGNhbGNfY2FsbF9leF9hcmdzPEFyZ3MsIEwsIG5leHQsIEVuZD4KICAg Pjo6dHlwZSB0eXBlOwp9OwoKCnRlbXBsYXRlPGNsYXNzIEFyZ3MsIGNsYXNzIFQsIGNsYXNzIEVu ZD4Kc3RydWN0IGNhbGNfY2FsbF9leF9hcmdzPEFyZ3MsIFQsIEVuZCwgRW5kPgp7CiAgdHlwZWRl ZiBBcmdzIHR5cGU7Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBMPgpzdHJ1Y3QgY2Fs bF9leF9hcmd1bWVudHMKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGNhbGxfZXhfYXJndW1lbnRz CiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50czxTPiwKICAgICAgTAogICAgPjo6dHlwZSBh cmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgYXJnczo6c2lnbmF0dXJlIHR5cGU7Cn07Cgp0ZW1wbGF0 ZTxjbGFzcyBTLCBjbGFzcyBMPgpzdHJ1Y3QgY2FsbF9leF9hcmd1bWVudHM8ZnVuY3Rpb25fYXJn dW1lbnRzPFM+LCBMPgp7CiAgdHlwZWRlZiBmdW5jdGlvbl9hcmd1bWVudHM8Uz4gYXJnczsKICB0 eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUgYmVnaW47CiAg dHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxhcmdzPjo6dHlwZSBlbmQ7CiAgdHlw ZWRlZiB0eXBlbmFtZSBjYWxjX2NhbGxfZXhfYXJnczxhcmdzLCBMLCBiZWdpbiwgZW5kPjo6dHlw ZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIFQsIGNsYXNzIE9w ZXJhdGlvbnMsIGxvbmcgTj4Kc3RydWN0IGNhbGxfZXhfYXJndW1lbnQKewogIHR5cGVkZWYgdHlw ZW5hbWUKICAgIGNhbGxfZXhfYXJndW1lbnRzCiAgICA8CiAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50 czxTaWduYXR1cmU+LAogICAgICBPcGVyYXRpb25zCiAgICA+Ojp0eXBlIGFyZ3M7CgogIHR5cGVk ZWYgdHlwZW5hbWUgYmluZF9hbnlUX2FyZ3VtZW50czxhcmdzLFQ+Ojp0eXBlIGJvdW5kX2FyZ3M7 CiAgdHlwZWRlZiB0eXBlbmFtZSBvcHRpbWl6ZV9hcmd1bWVudHNfY29weWluZzxib3VuZF9hcmdz Pjo6dHlwZSBvcHRpbWl6ZWQ7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmF0X2M8 b3B0aW1pemVkLE4+Ojp0eXBlIHR5cGU7Cn07CgoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUs IGNsYXNzIFdpdGg+CnN0cnVjdCBiaW5kX3NpZ25hdHVyZQp7CiAgdHlwZWRlZiBmdW5jdGlvbl9h cmd1bWVudHM8U2lnbmF0dXJlPiBhcmdzOwoKICB0eXBlZGVmIHR5cGVuYW1lCiAgICBiaW5kX2lm X2FueVQKICAgIDwKICAgICAgdHlwZW5hbWUgYXJnczo6cmVzdWx0X3R5cGUsCiAgICAgIFdpdGgK ICAgID46OnR5cGUgYm91bmRfcmVzdWx0OwoKICB0eXBlZGVmIHR5cGVuYW1lIGJpbmRfYW55VF9h cmd1bWVudHM8YXJncywgV2l0aD46OnR5cGUgYm91bmRfYXJnczsKICB0eXBlZGVmIHR5cGVuYW1l IG9wdGltaXplX2FyZ3VtZW50c19jb3B5aW5nPGJvdW5kX2FyZ3M+Ojp0eXBlIG9wdGltaXplZDsK ICB0eXBlZGVmIHR5cGVuYW1lIG9wdGltaXplZDo6dGVtcGxhdGUgcmViaW5kX3Jlc3VsdDxib3Vu ZF9yZXN1bHQ+IHJlYmluZDsKICB0eXBlZGVmIHR5cGVuYW1lIHJlYmluZDo6dHlwZSB0eXBlOwp9 OwoKCgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGV4 ZWN1dGVfYXJndW1lbnQKewogIHR5cGVkZWYgdHlwZW5hbWUKICAgIGJpbmRfc2lnbmF0dXJlCiAg ICA8CiAgICAgIHR5cGVuYW1lIEZ1bmN0aW9uOjpzaWduYXR1cmUsCiAgICAgIGFueTxPcGVyYXRp b25zPgogICAgPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CiAgdHlwZWRlZiB0eXBlbmFtZSBzaWcy dHVwbGU8Ym91bmRfc2lnbmF0dXJlPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBG dW5jdGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGV4ZWN1dGVfcmVzdWx0CnsKICB0eXBl ZGVmIHR5cGVuYW1lCiAgICBiaW5kX3NpZ25hdHVyZQogICAgPAogICAgICB0eXBlbmFtZSBGdW5j dGlvbjo6c2lnbmF0dXJlLAogICAgICBhbnk8T3BlcmF0aW9ucz4KICAgID46OnR5cGUgYm91bmRf c2lnbmF0dXJlOwogIHR5cGVkZWYgdHlwZW5hbWUgZnVuY3Rpb25fYXJndW1lbnRzPGJvdW5kX3Np Z25hdHVyZT46OnJlc3VsdF90eXBlIHR5cGU7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgT3BlcmF0aW9u cywgY2xhc3MgQmVnaW4sIGNsYXNzIEVuZD4Kc3RydWN0IHBsYWNlaG9sZGVyX2V4ZWN1dGUKICA6 IHBsYWNlaG9sZGVyX2V4ZWN1dGU8T3BlcmF0aW9ucywgdHlwZW5hbWUgQmVnaW46Om5leHQsIEVu ZD4KewogIHR5cGVkZWYgdHlwZW5hbWUgQmVnaW46OnR5cGUgZnVuY3Rpb25fdHlwZTsKICB0eXBl ZGVmIHR5cGVuYW1lIGV4ZWN1dGVfcmVzdWx0PGZ1bmN0aW9uX3R5cGUsT3BlcmF0aW9ucz46OnR5 cGUgcmVzdWx0X3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBleGVjdXRlX2FyZ3VtZW50PGZ1bmN0 aW9uX3R5cGUsT3BlcmF0aW9ucz46OnR5cGUgYXJnX3R5cGU7CgogIHVzaW5nIHBsYWNlaG9sZGVy X2V4ZWN1dGU8T3BlcmF0aW9ucywgdHlwZW5hbWUgQmVnaW46Om5leHQsIEVuZD46OmV4ZWN1dGU7 CgogIHZpcnR1YWwgcmVzdWx0X3R5cGUgZXhlY3V0ZShjb25zdCBmdW5jdGlvbl90eXBlICYsCiAg ICAgICAgICBjb25zdCBhcmdfdHlwZSAmLCA6OnN0ZDo6c2l6ZV90LCBzaWcpID0gMDsKfTsKCgoK dGVtcGxhdGU8Y2xhc3MgU2lnbmF0dXJlPgpzdHJ1Y3Qgbm9fY2FsbF9kaXNwYXRjaGVyOwoKdGVt cGxhdGU8Y2xhc3MgUiwgY2xhc3MgVDA+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCk+ CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg Ojpib29zdDo6dHVwbGU8VDA+ICYgYXJncykgY29uc3QKICB7CiAgICByZXR1cm4gZi5ub19jYWxs KDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBS LCBjbGFzcyBUMCwgY2xhc3MgVDE+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCxUMSk+ CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg Ojpib29zdDo6dHVwbGU8VDAsVDE+ICYgYXJncykgY29uc3QKICB7CiAgICByZXR1cm4gZi5ub19j YWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAogICAgICAgICAgICAgICAgICAgICA6 OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSApOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIFIs IGNsYXNzIFQwLCBjbGFzcyBUMSwgY2xhc3MgVDI+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8 UihUMCxUMSxUMik+CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBG ICYgZiwgY29uc3QgOjpib29zdDo6dHVwbGU8VDAsVDEsVDI+ICYgYXJncykgY29uc3QKICB7CiAg ICByZXR1cm4gZi5ub19jYWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAogICAgICAg ICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSwKICAgICAgICAgICAg ICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mj4oYXJncykgKTsKICB9Cn07Cgp0ZW1wbGF0 ZTxjbGFzcyBSLCBjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNzIFQyLCBjbGFzcyBUMz4Kc3RydWN0 IG5vX2NhbGxfZGlzcGF0Y2hlcjxSKFQwLFQxLFQyLFQzKT4KewogIHRlbXBsYXRlPGNsYXNzIEY+ CiAgUiBvcGVyYXRvcigpKGNvbnN0IEYgJiBmLCBjb25zdCA6OmJvb3N0Ojp0dXBsZTxUMCxUMSxU MixUMz4gJiBhcmdzKSBjb25zdAogIHsKICAgIHJldHVybiBmLm5vX2NhbGwoOjpib29zdDo6dHVw bGVzOjpnZXQ8MD4oYXJncyksCiAgICAgICAgICAgICAgICAgICAgIDo6Ym9vc3Q6OnR1cGxlczo6 Z2V0PDE+KGFyZ3MpLAogICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwy PihhcmdzKSwKICAgICAgICAgICAgICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mz4oYXJn cykgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBSLCBjbGFzcyBUMCwgY2xhc3MgVDEsIGNsYXNz IFQyLCBjbGFzcyBUMywgY2xhc3MgVDQ+CnN0cnVjdCBub19jYWxsX2Rpc3BhdGNoZXI8UihUMCxU MSxUMixUMyxUNCk+CnsKICB0ZW1wbGF0ZTxjbGFzcyBGPgogIFIgb3BlcmF0b3IoKShjb25zdCBG ICYgZiwgY29uc3QgOjpib29zdDo6dHVwbGU8VDAsVDEsVDIsVDMsVDQ+ICYgYXJncykgY29uc3QK ICB7CiAgICByZXR1cm4gZi5ub19jYWxsKDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDA+KGFyZ3MpLAog ICAgICAgICAgICAgICAgICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDwxPihhcmdzKSwKICAgICAg ICAgICAgICAgICAgICAgOjpib29zdDo6dHVwbGVzOjpnZXQ8Mj4oYXJncyksCiAgICAgICAgICAg ICAgICAgICAgIDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PDM+KGFyZ3MpLAogICAgICAgICAgICAgICAg ICAgICA6OmJvb3N0Ojp0dXBsZXM6OmdldDw0PihhcmdzKSApOwogIH0KfTsKCgp0ZW1wbGF0ZTxj bGFzcyBSZXN1bHQsIGxvbmcgTj4Kc3RydWN0IGdldF90dXBsZV9lbGVtCnsKICB0ZW1wbGF0ZTxj bGFzcyBUdXBsZSwgY2xhc3MgVD4KICBSZXN1bHQgb3BlcmF0b3IoKShjb25zdCBUdXBsZSAmIGFy Z3MsIFQgJiwgOjpzdGQ6OnNpemVfdCkgY29uc3QKICB7CiAgICByZXR1cm4gOjpib29zdDo6dHVw bGVzOjpnZXQ8Tj4oYXJncyk7CiAgfQp9OwoKCnN0cnVjdCBjYW50X2V4dHJhY3Qge307CgoKdGVt cGxhdGU8Y2xhc3MgUmVzdWx0LCBsb25nIE4sIGxvbmcgTW9yZVRoZW5PbmVBbnlUPgpzdHJ1Y3Qg Z2V0X2V4dHJhY3RlZF9lbGVtCnsKICB0ZW1wbGF0ZTxjbGFzcyBUdXBsZSwgY2xhc3MgVD4KICBS ZXN1bHQgb3BlcmF0b3IoKShjb25zdCBUdXBsZSAmIGFyZ3MsIFQgJiBjdXJyZW50LCA6OnN0ZDo6 c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIGlmKGluZGV4ID09IE4pCiAgICAgIHJldHVybiBj dXJyZW50OwogICAgZWxzZQogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6OnJl bW92ZV9yZWZlcmVuY2U8UmVzdWx0Pjo6dHlwZSBub25yZWY7CiAgICAgIGlmKG5vbnJlZiAqIHB0 ciA9IGV4dHJhY3Q8bm9ucmVmPigmOjpib29zdDo6dHVwbGVzOjpnZXQ8Tj4oYXJncykpKQogICAg ICAgIHJldHVybiAqcHRyOwogICAgICBlbHNlCiAgICAgICAgdGhyb3cgY2FudF9leHRyYWN0KCk7 CiAgICB9CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUmVzdWx0LCBsb25nIE4+CnN0cnVjdCBnZXRf ZXh0cmFjdGVkX2VsZW08UmVzdWx0LE4sMT4KewogIHRlbXBsYXRlPGNsYXNzIFR1cGxlLCBjbGFz cyBUPgogIFJlc3VsdCBvcGVyYXRvcigpKGNvbnN0IFR1cGxlICYsIFQgJiBjdXJyZW50LCA6OnN0 ZDo6c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgICgodm9pZCkgKChpbmRleCA9PSBOKSA/IDAg OiAoX19hc3NlcnRfZmFpbCAoImluZGV4ID09IE4iLCAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19h bnkvZnVuY3Rpb24uaHBwIiwgNDQ5LCAoKGNvbnN0IGNoYXIgKikgMCkpLCAwKSkpOwogICAgcmV0 dXJuIGN1cnJlbnQ7CiAgfQp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmUsIGNsYXNzIE9w ZXJhdGlvbnMsIGxvbmcgTiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CnR5cGVuYW1lIGNhbGxfZXhf YXJndW1lbnQ8U2lnbmF0dXJlLFQsT3BlcmF0aW9ucyxOPjo6dHlwZQpnZXRfeChjb25zdCBUdXBs ZSAmIGFyZ3MsIFQgJiBjdXJyZW50LCA6OnN0ZDo6c2l6ZV90IGluZGV4KQp7CiAgdHlwZWRlZiB0 eXBlbmFtZQogICAgY2FsbF9leF9hcmd1bWVudHMKICAgIDwKICAgICAgZnVuY3Rpb25fYXJndW1l bnRzPFNpZ25hdHVyZT4sCiAgICAgIE9wZXJhdGlvbnMKICAgID46OnR5cGUgYWxsX2FyZ3M7Cgog IHR5cGVkZWYgOjpib29zdDo6bXBsOjppbnRlZ3JhbF9jPGxvbmcsTj4gbjsKICB0eXBlZGVmIHR5 cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZTwKICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6 YmVnaW48YWxsX2FyZ3M+Ojp0eXBlLCBuPjo6dHlwZSBjdXJfaXRlcjsKCiAgdHlwZWRlZiB0eXBl bmFtZQogICAgOjpib29zdDo6bXBsOjplcmFzZQogICAgPAogICAgICBhbGxfYXJncywKICAgICAg Y3VyX2l0ZXIsCiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6ZW5kPGFsbF9hcmdzPjo6dHlw ZQogICAgPjo6dHlwZSBhcmdzX3RvX2NvdW50OwoKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJv b3N0OjptcGw6OmNvdW50X2lmCiAgICA8CiAgICAgIGFyZ3NfdG9fY291bnQsCiAgICAgIGNvbnRh aW5zX2FueVQ8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAgID46OnR5cGUgZGVsdGE7CgogIHR5 cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjptaW51czxuLGRlbHRhPjo6dHlwZSBwb3M7Cgog IHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6Y291bnRfaWYKICAgIDwKICAgICAg YWxsX2FyZ3MsCiAgICAgIGNvbnRhaW5zX2FueVQ8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAg ID46OnR5cGUgYW55VF9jb3VudGVyOwoKICB0eXBlZGVmIHR5cGVuYW1lIGNhbGxfZXhfYXJndW1l bnQ8U2lnbmF0dXJlLFQsT3BlcmF0aW9ucyxOPjo6dHlwZSByZXN1bHQ7CgogIHR5cGVkZWYgdHlw ZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6aWZfCiAgICA8CiAgICAgIGNvbnRhaW5zX2FueVQ8dHlw ZW5hbWUgY3VyX2l0ZXI6OnR5cGU+LAogICAgICBnZXRfZXh0cmFjdGVkX2VsZW08cmVzdWx0LHBv czo6dmFsdWUsYW55VF9jb3VudGVyOjp2YWx1ZT4sCiAgICAgIGdldF90dXBsZV9lbGVtPHJlc3Vs dCxwb3M6OnZhbHVlPgogICAgPjo6dHlwZSBnZXRfZWxlbTsKCiAgcmV0dXJuIGdldF9lbGVtKCko YXJncywgY3VycmVudCwgaW5kZXgpOwp9CgoKdGVtcGxhdGU8Y2xhc3MgUmVzdWx0LCBjbGFzcyBP cGVyYXRpb25zLCBsb25nIEFyZ0NvdW50PgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyOwoKdGVt cGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hl cjxSLE9wZXJhdGlvbnMsMj4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFz cyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAg ICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5j YWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4 KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJn cywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3Bl cmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsMz4KewogIHRl bXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25z dCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVudCwg OjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNp Z25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxP cGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAg Z2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAg ICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJy ZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBSLCBjbGFzcyBPcGVyYXRpb25z PgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyPFIsT3BlcmF0aW9ucyw0Pgp7CiAgdGVtcGxhdGU8 Y2xhc3MgRiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CiAgUiBvcGVyYXRvcigpKGNvbnN0IEYgJiBm LCBjb25zdCBUdXBsZSAmIGFyZ3MsCiAgICAgICAgICAgICAgIFQgJiBjdXJyZW50LCA6OnN0ZDo6 c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIHR5cGVkZWYgdHlwZW5hbWUgRjo6c2lnbmF0dXJl IHNpZ25hdHVyZTsKICAgIHJldHVybiBmLmNhbGxfZXgoZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlv bnMsMD4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxz aWduYXR1cmUsT3BlcmF0aW9ucywxPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAg ICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDI+KGFyZ3MsIGN1cnJlbnQsIGlu ZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMz4o YXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3Mg T3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsNT4Kewog IHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShj b25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVu dCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6 OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVy ZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAg ICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAog ICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBj dXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVy YXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0 X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9 OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlz cGF0Y2hlcjxSLE9wZXJhdGlvbnMsNj4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxl LCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdz LAogICAgICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QK ICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1 cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQs IGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMs MT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWdu YXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAg ICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4 KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJn cywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUs T3BlcmF0aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1wbGF0ZTxj bGFzcyBSLCBjbGFzcyBPcGVyYXRpb25zPgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVyPFIsT3Bl cmF0aW9ucyw3Pgp7CiAgdGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3MgVHVwbGUsIGNsYXNzIFQ+CiAg UiBvcGVyYXRvcigpKGNvbnN0IEYgJiBmLCBjb25zdCBUdXBsZSAmIGFyZ3MsCiAgICAgICAgICAg ICAgIFQgJiBjdXJyZW50LCA6OnN0ZDo6c2l6ZV90IGluZGV4KSBjb25zdAogIHsKICAgIHR5cGVk ZWYgdHlwZW5hbWUgRjo6c2lnbmF0dXJlIHNpZ25hdHVyZTsKICAgIHJldHVybiBmLmNhbGxfZXgo Z2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMD4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAg ICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywxPihhcmdzLCBjdXJy ZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRp b25zLDI+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8 c2lnbmF0dXJlLE9wZXJhdGlvbnMsMz4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAg ICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucyw0PihhcmdzLCBjdXJyZW50LCBp bmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDU+ KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0 dXJlLE9wZXJhdGlvbnMsNj4oYXJncywgY3VycmVudCwgaW5kZXgpICk7CiAgfQp9OwoKdGVtcGxh dGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfZXhfZGlzcGF0Y2hlcjxS LE9wZXJhdGlvbnMsOD4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFzcyBU PgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAgICAg ICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAgICB0 eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5jYWxs X2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwK ICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJncywg Y3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3Bl cmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdl dF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAg ICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3VycmVu dCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9u cyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNp Z25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAg ICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsNz4oYXJncywgY3VycmVudCwgaW5k ZXgpICk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgUiwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0 IGNhbGxfZXhfZGlzcGF0Y2hlcjxSLE9wZXJhdGlvbnMsOT4KewogIHRlbXBsYXRlPGNsYXNzIEYs IGNsYXNzIFR1cGxlLCBjbGFzcyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3Qg VHVwbGUgJiBhcmdzLAogICAgICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBp bmRleCkgY29uc3QKICB7CiAgICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1 cmU7CiAgICByZXR1cm4gZi5jYWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFy Z3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJl LE9wZXJhdGlvbnMsMT4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAg ICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAg ICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1 cnJlbnQsIGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJh dGlvbnMsND4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRf eDxzaWduYXR1cmUsT3BlcmF0aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAg ICAgICAgICAgICAgIGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQs IGluZGV4KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMs Nz4oYXJncywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWdu YXR1cmUsT3BlcmF0aW9ucyw4PihhcmdzLCBjdXJyZW50LCBpbmRleCkgKTsKICB9Cn07Cgp0ZW1w bGF0ZTxjbGFzcyBSLCBjbGFzcyBPcGVyYXRpb25zPgpzdHJ1Y3QgY2FsbF9leF9kaXNwYXRjaGVy PFIsT3BlcmF0aW9ucywxMD4KewogIHRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIFR1cGxlLCBjbGFz cyBUPgogIFIgb3BlcmF0b3IoKShjb25zdCBGICYgZiwgY29uc3QgVHVwbGUgJiBhcmdzLAogICAg ICAgICAgICAgICBUICYgY3VycmVudCwgOjpzdGQ6OnNpemVfdCBpbmRleCkgY29uc3QKICB7CiAg ICB0eXBlZGVmIHR5cGVuYW1lIEY6OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgICByZXR1cm4gZi5j YWxsX2V4KGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDA+KGFyZ3MsIGN1cnJlbnQsIGluZGV4 KSwKICAgICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsMT4oYXJn cywgY3VycmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUs T3BlcmF0aW9ucywyPihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAg IGdldF94PHNpZ25hdHVyZSxPcGVyYXRpb25zLDM+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAg ICAgICAgICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsND4oYXJncywgY3Vy cmVudCwgaW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0 aW9ucyw1PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94 PHNpZ25hdHVyZSxPcGVyYXRpb25zLDY+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSwKICAgICAgICAg ICAgICAgICAgICAgZ2V0X3g8c2lnbmF0dXJlLE9wZXJhdGlvbnMsNz4oYXJncywgY3VycmVudCwg aW5kZXgpLAogICAgICAgICAgICAgICAgICAgICBnZXRfeDxzaWduYXR1cmUsT3BlcmF0aW9ucyw4 PihhcmdzLCBjdXJyZW50LCBpbmRleCksCiAgICAgICAgICAgICAgICAgICAgIGdldF94PHNpZ25h dHVyZSxPcGVyYXRpb25zLDk+KGFyZ3MsIGN1cnJlbnQsIGluZGV4KSApOwogIH0KfTsKCgp0ZW1w bGF0ZTxjbGFzcyBUPgpzdHJ1Y3QgZXhlY3V0ZV9pbXBsCnsKICB0ZW1wbGF0ZTxjbGFzcyBGdW5j dGlvbiwgY2xhc3MgT3BlcmF0aW9ucz4KICB0eXBlbmFtZSBleGVjdXRlX3Jlc3VsdDxGdW5jdGlv bixPcGVyYXRpb25zPjo6dHlwZQogIG9wZXJhdG9yKCkoY29uc3QgRnVuY3Rpb24gJiBmLAogICAg ICAgICAgICAgY29uc3QgdHlwZW5hbWUgZXhlY3V0ZV9hcmd1bWVudDxGdW5jdGlvbixPcGVyYXRp b25zPjo6dHlwZSAmIGFyZ3MsCiAgICAgICAgICAgICBwbGFjZWhvbGRlcjxPcGVyYXRpb25zPiAm IGN1cnJlbnQsIDo6c3RkOjpzaXplX3QgaW5kZXgpIGNvbnN0CiAgewogICAgdHlwZWRlZiB0eXBl bmFtZSBGdW5jdGlvbjo6c2lnbmF0dXJlIHNpZ25hdHVyZTsKICAgIHR5cGVkZWYgdHlwZW5hbWUK ICAgICAgY2FsbF9leF9hcmd1bWVudHMKICAgICAgPAogICAgICAgIGZ1bmN0aW9uX2FyZ3VtZW50 czxzaWduYXR1cmU+LAogICAgICAgIE9wZXJhdGlvbnMKICAgICAgPjo6dHlwZSB4X2FyZ3M7Cgog ICAgdHlwZWRlZiB0eXBlbmFtZSBleGVjdXRlX3Jlc3VsdDxGdW5jdGlvbixPcGVyYXRpb25zPjo6 dHlwZSByZXN1bHQ7CiAgICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6c2l6ZTx4X2Fy Z3M+Ojp0eXBlIGFueVRfY291bnRlcjsKCiAgICB0cnkKICAgIHsKICAgICAgcmV0dXJuIGNhbGxf ZXhfZGlzcGF0Y2hlcjxyZXN1bHQsT3BlcmF0aW9ucyxhbnlUX2NvdW50ZXI6OnZhbHVlPigpKAog ICAgICAgIGYsIGFyZ3MsIGV4dHJhY3RvcjxPcGVyYXRpb25zLFQ+KCkuc3RhdGljX2V4dHJhY3Qo Y3VycmVudCksIGluZGV4KTsKICAgIH0KICAgIGNhdGNoKGNhbnRfZXh0cmFjdCkKICAgIHsKCiAg ICB9CgogICAgdHlwZWRlZiB0eXBlbmFtZSBiaW5kX3NpZ25hdHVyZTwKICAgICAgc2lnbmF0dXJl LCBhbnk8T3BlcmF0aW9ucz4gPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CgogICAgcmV0dXJuIG5v X2NhbGxfZGlzcGF0Y2hlcjxib3VuZF9zaWduYXR1cmU+KCkoZiwgYXJncyk7CiAgfQp9OwoKCnRl bXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEJlZ2luLCBjbGFzcyBFbmQ+ CnN0cnVjdCBub25jbGFzc19ob2xkZXJfZXhlY3V0ZQogIDogbm9uY2xhc3NfaG9sZGVyX2V4ZWN1 dGUKICAgIDwKICAgICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUgQmVnaW46 Om5leHQsCiAgICAgIEVuZAogICAgPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBCZWdpbjo6dHlwZSBm dW5jdGlvbl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZXhlY3V0ZV9yZXN1bHQ8ZnVuY3Rpb25f dHlwZSxPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1lIGV4 ZWN1dGVfYXJndW1lbnQ8ZnVuY3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSBhcmdfdHlwZTsK CiAgdmlydHVhbCByZXN1bHRfdHlwZSBleGVjdXRlKGNvbnN0IGZ1bmN0aW9uX3R5cGUgJiBmLAog ICAgICAgICAgY29uc3QgYXJnX3R5cGUgJiBhcmdzLCA6OnN0ZDo6c2l6ZV90IGluZGV4LCBzaWcp CiAgewogICAgcmV0dXJuIGV4ZWN1dGVfaW1wbDxUPigpKGYsIGFyZ3MsICp0aGlzLCBpbmRleCk7 CiAgfQp9OwoKCnRlbXBsYXRlPGNsYXNzIE9wZXJhdGlvbnMsIGNsYXNzIFQsIGNsYXNzIEJlZ2lu LCBjbGFzcyBFbmQ+CnN0cnVjdCBjbGFzc19ob2xkZXJfZXhlY3V0ZQogIDogY2xhc3NfaG9sZGVy X2V4ZWN1dGUKICAgIDwKICAgICAgT3BlcmF0aW9ucywKICAgICAgVCwKICAgICAgdHlwZW5hbWUg QmVnaW46Om5leHQsCiAgICAgIEVuZAogICAgPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBCZWdpbjo6 dHlwZSBmdW5jdGlvbl90eXBlOwogIHR5cGVkZWYgdHlwZW5hbWUgZXhlY3V0ZV9yZXN1bHQ8ZnVu Y3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIGV4ZWN1dGVfYXJndW1lbnQ8ZnVuY3Rpb25fdHlwZSxPcGVyYXRpb25zPjo6dHlwZSBhcmdf dHlwZTsKCiAgdmlydHVhbCByZXN1bHRfdHlwZSBleGVjdXRlKGNvbnN0IGZ1bmN0aW9uX3R5cGUg JiBmLAogICAgICAgICAgY29uc3QgYXJnX3R5cGUgJiBhcmdzLCA6OnN0ZDo6c2l6ZV90IGluZGV4 LCBzaWcpCiAgewogICAgcmV0dXJuIGV4ZWN1dGVfaW1wbDxUPigpKGYsIGFyZ3MsICp0aGlzLCBp bmRleCk7CiAgfQp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmaXJzdF9h bnlUCnsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmZpbmRfaWYKICAgIDwK ICAgICAgZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4sCiAgICAgIGNvbnRhaW5zX2FueVQ8 IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+ID4KICAgID46OnR5cGUgZmlyc3RfYW55VF9pdGVyOwoKICB0 eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmRpc3RhbmNlCiAgICA8CiAgICAgIHR5 cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48ZnVuY3Rpb25fYXJndW1lbnRzPFNpZ25hdHVyZT4g Pjo6dHlwZSwKICAgICAgZmlyc3RfYW55VF9pdGVyCiAgICA+Ojp0eXBlIHBvc2l0aW9uOwoKCiAg dHlwZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFU SUNfQVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggKHBvc2l0aW9uOjp2YWx1ZSA8IGZ1bmN0aW9u X2FyZ3VtZW50czxTaWduYXR1cmU+Ojphcml0eSkgKSA+KT4gYm9vc3Rfc3RhdGljX2Fzc2VydF90 eXBlZGVmXzc2ODsKCgogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VF9pdGVyOjp0eXBlIHR5 cGU7Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmaXJzdF9hbnlUPGZ1bmN0 aW9uX2FyZ3VtZW50czxTaWduYXR1cmU+ID4KewogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55 VDxTaWduYXR1cmU+Ojpwb3NpdGlvbiBwb3NpdGlvbjsKICB0eXBlZGVmIHR5cGVuYW1lIGZpcnN0 X2FueVQ8U2lnbmF0dXJlPjo6dHlwZSB0eXBlOwp9OwoKCgp0ZW1wbGF0ZTxjbGFzcyBGdW5jdGlv biwgY2xhc3MgT3BlcmF0aW9ucz4Kc3RydWN0IGNhbGxfb3BlcmF0b3IKewogIHR5cGVkZWYgdHlw ZW5hbWUgRnVuY3Rpb246OnNpZ25hdHVyZSBzaWduYXR1cmU7CiAgdHlwZWRlZiB0eXBlbmFtZSBl eGVjdXRlX3Jlc3VsdDxGdW5jdGlvbixPcGVyYXRpb25zPjo6dHlwZSByZXN1bHRfdHlwZTsKICB0 eXBlZGVmIHR5cGVuYW1lIGV4ZWN1dGVfYXJndW1lbnQ8RnVuY3Rpb24sT3BlcmF0aW9ucz46OnR5 cGUgYXJnX3R5cGU7CgogIHJlc3VsdF90eXBlIG9wZXJhdG9yKCkoY29uc3QgRnVuY3Rpb24gJiBm LCBjb25zdCBhcmdfdHlwZSAmIGFyZ3MpIGNvbnN0CiAgewoKICAgIHR5cGVkZWYgdHlwZW5hbWUg Ojpib29zdDo6bXBsOjpjb250YWluczxPcGVyYXRpb25zLEZ1bmN0aW9uPjo6dHlwZSBjaGVjazsK ICAgIHR5cGVkZWYgOjpib29zdDo6c3RhdGljX2Fzc2VydF90ZXN0PCBzaXplb2YoOjpib29zdDo6 U1RBVElDX0FTU0VSVElPTl9GQUlMVVJFPCAoYm9vbCkoIGNoZWNrOjp2YWx1ZSApID4pPiBib29z dF9zdGF0aWNfYXNzZXJ0X3R5cGVkZWZfNzkzOwoKICAgIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3Rf YW55VDxzaWduYXR1cmU+Ojpwb3NpdGlvbiBwb3NpdGlvbjsKCiAgICBjb25zdCBhbnk8T3BlcmF0 aW9ucz4gJiBjciA9IDo6Ym9vc3Q6OnR1cGxlczo6Z2V0PChwb3NpdGlvbjo6dmFsdWUpPihhcmdz KTsKICAgIGFueTxPcGVyYXRpb25zPiAmIGN1cnJlbnQgPSBjb25zdF9jYXN0PGFueTxPcGVyYXRp b25zPiAmPihjcik7CgoKICAgIGlmKHBsYWNlaG9sZGVyPE9wZXJhdGlvbnM+ICogcCA9IGN1cnJl bnQubV9jb250ZW50KQogICAgICByZXR1cm4gcC0+ZXhlY3V0ZShmLCBhcmdzLCBwb3NpdGlvbjo6 dmFsdWUsIHNpZygpKTsKICAgIGVsc2UKICAgIHsKICAgICAgdHlwZWRlZiB0eXBlbmFtZQogICAg ICAgIGJpbmRfc2lnbmF0dXJlCiAgICAgICAgPAogICAgICAgICAgc2lnbmF0dXJlLAogICAgICAg ICAgYW55PE9wZXJhdGlvbnM+CiAgICAgICAgPjo6dHlwZSBib3VuZF9zaWduYXR1cmU7CgogICAg ICByZXR1cm4gbm9fY2FsbF9kaXNwYXRjaGVyPGJvdW5kX3NpZ25hdHVyZT4oKShmLCBhcmdzKTsK ICAgIH0KICB9Cn07CgoKCgoKdGVtcGxhdGU8Y2xhc3MgVD4Kc3RydWN0IGFueVRfcmVmCnsKICB0 eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmlmXwogICAgPAogICAgICA6OmJvb3N0 Ojppc19zYW1lPFQsIGFueVQgJj4sCiAgICAgIGFueVQgJiwKICAgICAgY29uc3QgYW55VCAmCiAg ICA+Ojp0eXBlIHR5cGU7Cn07CgoKbmFtZXNwYWNlIGdlbmVyYXRlZCB7CgoKCnN0cnVjdCBtYXhf YXJnX2NvdW50IDogcHVibGljIDo6Ym9vc3Q6Om1wbDo6aW50ZWdyYWxfYzxsb25nLCA1PiB7fTsK Cgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBGaXJzdEFueVJlZiwgbG9uZyBGaXJz dEFueVBvcz4Kc3RydWN0IGZpOwojIDg1MyAiLi4vLi4vLi4vYm9vc3QvZHluYW1pY19hbnkvZnVu Y3Rpb24uaHBwIgp0ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBULCBsb25nIE4+CnN0cnVjdCBiCnsK ICB0eXBlZGVmIGZ1bmN0aW9uX2FyZ3VtZW50czxTPiBhcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUg YmluZF9hbnlUX2FyZ3VtZW50czxhcmdzLCBUPjo6dHlwZSBib3VuZF9hcmdzOwogIHR5cGVkZWYg dHlwZW5hbWUgOjpib29zdDo6bXBsOjphdF9jPGJvdW5kX2FyZ3MsIE4+Ojp0eXBlIHQ7Cn07Cgp0 ZW1wbGF0ZTxjbGFzcyBTLCBjbGFzcyBMLCBsb25nIE4+CnN0cnVjdCBhCnsKICB0eXBlZGVmIHR5 cGVuYW1lIGI8UywgYW55PEw+LCBOPjo6dCB0Owp9OwoKCnRlbXBsYXRlPGNsYXNzIFMsIGNsYXNz IFQsIGNsYXNzIEwsIGxvbmcgTj4Kc3RydWN0IHgKewogIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF9l eF9hcmd1bWVudDxTLFQsTCxOPjo6dHlwZSB0Owp9OwoKdGVtcGxhdGU8Y2xhc3MgRiwgY2xhc3Mg TD4Kc3RydWN0IHIKewogIHR5cGVkZWYgdHlwZW5hbWUgY2FsbF9vcGVyYXRvcjxGLCBMPjo6cmVz dWx0X3R5cGUgdDsKfTsKCnRlbXBsYXRlPGNsYXNzIEYsIGNsYXNzIEw+CnN0cnVjdCB1CnsKICB0 eXBlZGVmIHR5cGVuYW1lIGNhbGxfb3BlcmF0b3I8RiwgTD46OmFyZ190eXBlIHQ7Cn07CgoKdGVt cGxhdGU8Y2xhc3MgU2lnbmF0dXJlLCBsb25nIE4+CnN0cnVjdCBmYQp7CiAgdHlwZWRlZiBmdW5j dGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPiBhcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29z dDo6bXBsOjphdF9jPGFyZ3MsIE4+Ojp0eXBlIHQ7Cn07CgoKdGVtcGxhdGU8Y2xhc3MgRiwgY2xh c3MgUywgY2xhc3MgU1g+CnN0cnVjdCBjeDsKCgpzdHJ1Y3Qgbm9hcmcge307Cgp0ZW1wbGF0ZTxj bGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBULCBjbGFzcyBMPgpzdHJ1Y3QgZ2V0X2N4CnsKICB0eXBl ZGVmIHR5cGVuYW1lIGNhbGxfZXhfYXJndW1lbnRzPGZ1bmN0aW9uX2FyZ3VtZW50czxTPiwgTD46 OnR5cGUgeF9hcmdzOwogIHR5cGVkZWYgdHlwZW5hbWUgb3B0aW1pemVfYXJndW1lbnRzX2NvcHlp bmc8eF9hcmdzPjo6dHlwZSBvcHRpbWl6ZWQ7CgoKCgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6 Ym9vc3Q6Om1wbDo6YWR2YW5jZQogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJl Z2luPG9wdGltaXplZD46OnR5cGUsCiAgICAgIHR5cGVuYW1lIGZpcnN0X2FueVQ8b3B0aW1pemVk Pjo6cG9zaXRpb24KICAgID46OnR5cGUgZmlyc3RfYW55VF9pdGVyOwoKICB0eXBlZGVmIHR5cGVu YW1lCiAgICA6OmJvb3N0OjptcGw6OmVyYXNlCiAgICA8CiAgICAgIG9wdGltaXplZCwKICAgICAg dHlwZW5hbWUgZmlyc3RfYW55VF9pdGVyOjpuZXh0CiAgICA+Ojp0eXBlIHNraXBlZDsKCiAgdHlw ZWRlZiB0eXBlbmFtZQogICAgZmlyc3RfYW55VAogICAgPAogICAgICB0eXBlbmFtZSA6OmJvb3N0 OjptcGw6OmVyYXNlPG9wdGltaXplZCwgZmlyc3RfYW55VF9pdGVyPjo6dHlwZQogICAgPjo6cG9z aXRpb24gc2Vjb25kX2FueVRfcG9zOwoKCgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6 Om1wbDo6Y29weQogICAgPAogICAgICBza2lwZWQsCiAgICAgIHNraXBlZCwKICAgICAgOjpib29z dDo6bXBsOjpwdXNoX2JhY2s8IDo6Ym9vc3Q6Om1wbDo6YXJnPDE+LCBub2FyZz4KICAgID46OnR5 cGUgZXh0cmE7CgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZV9j CiAgICA8CiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48ZXh0cmE+Ojp0eXBlLAog ICAgICAoMiAqIG1heF9hcmdfY291bnQ6OnZhbHVlIC0gc2Vjb25kX2FueVRfcG9zOjp2YWx1ZSkK ICAgID46OnR5cGUgZXJhc2Vfc3RhcnQ7CgogIHR5cGVkZWYgdHlwZW5hbWUKICAgIDo6Ym9vc3Q6 Om1wbDo6ZXJhc2UKICAgIDwKICAgICAgZXh0cmEsCiAgICAgIGVyYXNlX3N0YXJ0LAogICAgICB0 eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDxleHRyYT46OnR5cGUKICAgID46OnR5cGUgdW5ib3Vu ZDsKCiAgdHlwZWRlZiB0eXBlbmFtZSBiaW5kX2FueVRfYXJndW1lbnRzPHVuYm91bmQsIFQ+Ojp0 eXBlIGJvdW5kOwogIHR5cGVkZWYgY3g8RiwgUywgdHlwZW5hbWUgYm91bmQ6OnNpZ25hdHVyZT4g dHlwZTsKfTsKCgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBTWCwgbG9uZyBOPgpz dHJ1Y3QgbmV4dF9jeAp7CiAgdHlwZWRlZiBmdW5jdGlvbl9hcmd1bWVudHM8Uz4gYWxsX2FyZ3M7 CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmJlZ2luPGFsbF9hcmdzPjo6dHlwZSBi ZWdpbjsKICB0eXBlZGVmIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YWR2YW5jZV9jPGJlZ2luLCBO Pjo6dHlwZSBzdGFydDsKCgogIHR5cGVkZWYgdHlwZW5hbWUgOjpib29zdDo6bXBsOjplcmFzZTwK ICAgIGFsbF9hcmdzLCBiZWdpbiwgc3RhcnQ+Ojp0eXBlIGFyZ3M7CgogIHR5cGVkZWYgdHlwZW5h bWUgOjpib29zdDo6bXBsOjpmaW5kX2lmPGFyZ3MsCiAgICBjb250YWluc19hbnlUPCA6OmJvb3N0 OjptcGw6OmFyZzwxPiA+ID46OnR5cGUgbmV4dF9hbnlUX2l0ZXI7CgogIHR5cGVkZWYgdHlwZW5h bWUKICAgIDo6Ym9vc3Q6Om1wbDo6ZGlzdGFuY2UKICAgIDwKICAgICAgbmV4dF9hbnlUX2l0ZXIs CiAgICAgIHR5cGVuYW1lIDo6Ym9vc3Q6Om1wbDo6YmVnaW48YXJncz46OnR5cGUKICAgID46OnR5 cGUgbWludXNfZXJhc2VfY291bnQ7CgogIHR5cGVkZWYgZnVuY3Rpb25fYXJndW1lbnRzPFNYPiB4 X2FyZ3M7CiAgdHlwZWRlZiB0eXBlbmFtZSA6OmJvb3N0OjptcGw6OmVuZDx4X2FyZ3M+Ojp0eXBl IGVuZDsKICB0eXBlZGVmIHR5cGVuYW1lCiAgICA6OmJvb3N0OjptcGw6OmFkdmFuY2U8ZW5kLCBt aW51c19lcmFzZV9jb3VudD46OnR5cGUgZXJhc2Vfc3RhcnQ7CgogIHR5cGVkZWYgdHlwZW5hbWUK ICAgIDo6Ym9vc3Q6Om1wbDo6ZXJhc2U8eF9hcmdzLCBlcmFzZV9zdGFydCwgZW5kPjo6dHlwZSBz aWdfeDsKCiAgdHlwZWRlZiBjeDxGLCBTLCB0eXBlbmFtZSBzaWdfeDo6c2lnbmF0dXJlPiB0eXBl Owp9OwoKCnRlbXBsYXRlPGNsYXNzIEYsIGxvbmcgTj4KaW5saW5lIHZvaWQgY2EoKQp7CiAgdHlw ZWRlZiA6OmJvb3N0OjpzdGF0aWNfYXNzZXJ0X3Rlc3Q8IHNpemVvZig6OmJvb3N0OjpTVEFUSUNf QVNTRVJUSU9OX0ZBSUxVUkU8IChib29sKSggRjo6YXJpdHkgPT0gTiApID4pPiBib29zdF9zdGF0 aWNfYXNzZXJ0X3R5cGVkZWZfOTk2Owp9Cgp0ZW1wbGF0ZTxjbGFzcyBMLCBjbGFzcyBGLCBjbGFz cyBTLCBjbGFzcyBBLCBsb25nIE4+CmlubGluZSB0eXBlbmFtZSBjYWxsX29wZXJhdG9yPEYsTD46 OnJlc3VsdF90eXBlIGZjKAogIGNvbnN0IGZpPEYsUyxBLE4+ICogZmltcGwsIHR5cGVuYW1lIGNh bGxfb3BlcmF0b3I8RixMPjo6YXJnX3R5cGUgJiB0KQp7CiAgY2FsbF9vcGVyYXRvcjxGLEw+IG9w OwogIHJldHVybiBvcChzdGF0aWNfY2FzdDxjb25zdCBGJj4oKmZpbXBsKSwgdCk7Cn0KCgp0ZW1w bGF0ZTxjbGFzcyBULCBjbGFzcyBMLCBjbGFzcyBGLCBjbGFzcyBTLCBjbGFzcyBBLCBsb25nIE4+ CmlubGluZSB0eXBlbmFtZSBnZXRfY3g8RixTLFQsTD46OnR5cGUgbXgoY29uc3QgZmk8RixTLEEs Tj4gKiBmaW1wbCkKewogIHR5cGVkZWYgdHlwZW5hbWUgZ2V0X2N4PEYsUyxULEw+Ojp0eXBlIHJl c3VsdDsKICByZXR1cm4gcmVzdWx0KHN0YXRpY19jYXN0PGNvbnN0IEYmPigqZmltcGwpKTsKfQoK IyAxICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9hdXgvZ2VuZXJhdGVkL2ZpLmhwcCIgMQoK CgoKdGVtcGxhdGU8Y2xhc3MgRixjbGFzcyBTLGNsYXNzIFIsY2xhc3MgVDAsY2xhc3MgVDEsY2xh c3MgVDIsY2xhc3MgVDMsY2xhc3MgVDQsY2xhc3MgVDUsY2xhc3MgVDYsY2xhc3MgVDcsY2xhc3Mg VDg+CnN0cnVjdCBjeDxGLFMsUihUMCxUMSxUMixUMyxUNCxUNSxUNixUNyxUOCk+CnsKICB0eXBl ZGVmIHR5cGVuYW1lIG5leHRfY3g8RixTLFIoVDAsVDEsVDMsVDQsVDUsVDYsVDcsVDgpLDI+Ojp0 eXBlIGc7CiAgY29uc3QgRiZmOwogIGN4KGNvbnN0IEYmeSk6Zih5KXt9CiAgUiB4KFQwIHYwLFQx IHYxLFQyKQogIHsKICAgIHJldHVybiBmLmNhbGwodjAsdjEpOwogIH0KICBSIHgoVDAgdjAsVDEg djEsVDIsVDMgdjMpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Myk7CiAgfQogIFIgeChU MCB2MCxUMSB2MSxUMixUMyB2MyxUNCB2NCkKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAs djEsdjMsdjQpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIsVDMgdjMsVDQgdjQsVDUgdjUpCiAg ewogICAgZyBoKGYpOyByZXR1cm4gaC54KHYwLHYxLHYzLHY0LHY1KTsKICB9CiAgUiB4KFQwIHYw LFQxIHYxLFQyLFQzIHYzLFQ0IHY0LFQ1IHY1LFQ2IHY2KQogIHsKICAgIGcgaChmKTsgcmV0dXJu IGgueCh2MCx2MSx2Myx2NCx2NSx2Nik7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMixUMyB2MyxU NCB2NCxUNSB2NSxUNiB2NixUNyB2NykKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAsdjEs djMsdjQsdjUsdjYsdjcpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIsVDMgdjMsVDQsVDUgdjUs VDYsVDcgdjcsVDgpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Myx2NSx2Nyk7CiAgfQp9 Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFz cyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNixjbGFzcyBUNz4Kc3RydWN0 IGN4PEYsUyxSKFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3KT4KewogIHR5cGVkZWYgdHlwZW5hbWUg bmV4dF9jeDxGLFMsUihUMCxUMSxUMixUNCxUNSxUNixUNyksMz46OnR5cGUgZzsKICBjb25zdCBG JmY7CiAgY3goY29uc3QgRiZ5KTpmKHkpe30KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMpCiAg ewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mik7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMiB2 MixUMyxUNCB2NCkKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyLHY0KTsKICB9CiAgUiB4 KFQwIHYwLFQxIHYxLFQyIHYyLFQzLFQ0IHY0LFQ1IHY1KQogIHsKICAgIGcgaChmKTsgcmV0dXJu IGgueCh2MCx2MSx2Mix2NCx2NSk7CiAgfQogIFIgeChUMCB2MCxUMSB2MSxUMiB2MixUMyxUNCB2 NCxUNSB2NSxUNiB2NikKICB7CiAgICBnIGgoZik7IHJldHVybiBoLngodjAsdjEsdjIsdjQsdjUs djYpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMsVDQgdjQsVDUsVDYgdjYsVDcpCiAg ewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mix2NCx2Nik7CiAgfQp9Owp0ZW1wbGF0ZTxjbGFz cyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBUMSxjbGFzcyBUMixjbGFzcyBUMyxj bGFzcyBUNCxjbGFzcyBUNSxjbGFzcyBUNj4Kc3RydWN0IGN4PEYsUyxSKFQwLFQxLFQyLFQzLFQ0 LFQ1LFQ2KT4KewogIGNvbnN0IEYmZjsKICBjeChjb25zdCBGJnkpOmYoeSl7fQogIFIgeChUMCB2 MCxUMSB2MSxUMiB2MixUMyB2MyxUNCkKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyLHYz KTsKICB9CiAgUiB4KFQwIHYwLFQxIHYxLFQyIHYyLFQzIHYzLFQ0LFQ1IHY1KQogIHsKICAgIHJl dHVybiBmLmNhbGwodjAsdjEsdjIsdjMsdjUpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIs VDMgdjMsVDQsVDUgdjUsVDYpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSx2Mix2Myx2NSk7 CiAgfQp9Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFMsY2xhc3MgUixjbGFzcyBUMCxjbGFzcyBU MSxjbGFzcyBUMixjbGFzcyBUMyxjbGFzcyBUNCxjbGFzcyBUNT4Kc3RydWN0IGN4PEYsUyxSKFQw LFQxLFQyLFQzLFQ0LFQ1KT4KewogIGNvbnN0IEYmZjsKICBjeChjb25zdCBGJnkpOmYoeSl7fQog IFIgeChUMCB2MCxUMSB2MSxUMiB2MixUMyB2MyxUNCB2NCxUNSkKICB7CiAgICByZXR1cm4gZi5j YWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07CnRlbXBsYXRlPGNsYXNzIEYsY2xhc3MgUyxjbGFz cyBSLGNsYXNzIFQwLGNsYXNzIFQxLGNsYXNzIFQyLGNsYXNzIFQzLGNsYXNzIFQ0PgpzdHJ1Y3Qg Y3g8RixTLFIoVDAsVDEsVDIsVDMsVDQpPgp7CiAgY29uc3QgRiZmOwogIGN4KGNvbnN0IEYmeSk6 Zih5KXt9CiAgUiB4KFQwIHYwKQogIHsKICAgIHJldHVybiBmLmNhbGwodjApOwogIH0KICBSIHgo VDAgdjAsVDEgdjEpCiAgewogICAgcmV0dXJuIGYuY2FsbCh2MCx2MSk7CiAgfQogIFIgeChUMCB2 MCxUMSB2MSxUMiB2MikKICB7CiAgICByZXR1cm4gZi5jYWxsKHYwLHYxLHYyKTsKICB9CiAgUiB4 KFQwIHYwLFQxIHYxLFQyIHYyLFQzIHYzKQogIHsKICAgIHJldHVybiBmLmNhbGwodjAsdjEsdjIs djMpOwogIH0KICBSIHgoVDAgdjAsVDEgdjEsVDIgdjIsVDMgdjMsVDQgdjQpCiAgewogICAgcmV0 dXJuIGYuY2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9Owp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNz IFM+CnN0cnVjdCBmaTxGLFMsYW55VCYsMD4KewogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5h bWUgcjxGLEw+Ojp0IG5vX2NhbGwoYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0aHJvdyBiYWRf ZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixM Pjo6dCBvcGVyYXRvcigpKGFueTxMPiZ2MCkgY29uc3QKICB7CiAgICBjYTxGLDE+KCk7CiAgICB0 eXBlbmFtZSB1PEYsTD46OnQgdCh2MCk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAg dGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShhbnk8TD4m djAsdHlwZW5hbWUgYTxTLEwsMT46OnQgdjEpIGNvbnN0CiAgewogICAgY2E8RiwyPigpOwogICAg dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAg fQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoYW55 PEw+JnYwLHR5cGVuYW1lIGE8UyxMLDE+Ojp0IHYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKSBj b25zdAogIHsKICAgIGNhPEYsMz4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYy KTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5 cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGFueTxMPiZ2MCx0eXBlbmFtZSBhPFMsTCwxPjo6 dCB2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2MykgY29u c3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2Mix2 Myk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0 eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShhbnk8TD4mdjAsdHlwZW5hbWUgYTxTLEwsMT46 OnQgdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMsdHlw ZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlwZW5h bWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7 CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2Fs bF9leChUJnYwLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0 PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3Mg TD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGNvbnN0IGFueTxMPiYsdHlwZW5h bWUgYjxTLFQsMT46OnQgdjEpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0 IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4K ICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQs MT46OnQgdjEsdHlwZW5hbWUgeDxTLFQsTCwzPjo6dCB2MikgY29uc3QKICB7CiAgICByZXR1cm4g bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBM PgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KFQmdjAsYW55PEw+Jix0eXBlbmFtZSBiPFMs VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46 OnQgdjMpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myk7 CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2Fs bF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxTLFQs TCwzPjo6dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46 OnQgdjQpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2 NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQg Y2FsbF9leChUJnYwLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxT LFQsTCwzPjo6dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEws NT46OnQgdjQsdHlwZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSkgY29uc3QKICB7CiAgICByZXR1cm4g bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg VCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KFQmdjAsYW55PEw+Jix0eXBl bmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8 UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM LDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYpIGNvbnN0CiAgewogICAgcmV0dXJu IG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSx2Nik7CiAgfQogIHRlbXBsYXRlPGNs YXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGFueTxMPiYs dHlwZW5hbWUgYjxTLFQsMT46OnQgdjEsdHlwZW5hbWUgeDxTLFQsTCwzPjo6dCB2Mix0eXBlbmFt ZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQsdHlwZW5hbWUgeDxT LFQsTCw2Pjo6dCB2NSx0eXBlbmFtZSB4PFMsVCxMLDc+Ojp0IHY2LHR5cGVuYW1lIHg8UyxULEws OD46OnQgdjcpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2 Myx2NCx2NSx2Nix2Nyk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt ZSByPEYsTD46OnQgY2FsbF9leChUJnYwLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMT46 OnQgdjEsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mixjb25zdCBhbnk8TD4m LHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46 OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29u c3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFz cyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMD4KewogIHRlbXBsYXRlPGNs YXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG5vX2NhbGwoY29uc3QgYW55PEw+Ji4uLikgY29u c3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFz cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGNvbnN0IGFueTxMPiZ2KSBjb25z dAogIHsKICAgIGNhPEYsMT4oKTsKICAgIHR5cGVuYW1lIGE8UyxMLDA+Ojp0IHYwKHYpOwogICAg dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjApOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQog IHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoY29uc3Qg YW55PEw+JnYsdHlwZW5hbWUgYTxTLEwsMT46OnQgdjEpIGNvbnN0CiAgewogICAgY2E8RiwyPigp OwogICAgdHlwZW5hbWUgYTxTLEwsMD46OnQgdjAodik7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQg dCh2MCx2MSk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShjb25zdCBhbnk8TD4mdix0eXBlbmFt ZSBhPFMsTCwxPjo6dCB2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2MikgY29uc3QKICB7CiAgICBj YTxGLDM+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwwPjo6dCB2MCh2KTsKICAgIHR5cGVuYW1lIHU8 RixMPjo6dCB0KHYwLHYxLHYyKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1w bGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKGNvbnN0IGFueTxM PiZ2LHR5cGVuYW1lIGE8UyxMLDE+Ojp0IHYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyLHR5cGVu YW1lIGE8UyxMLDM+Ojp0IHYzKSBjb25zdAogIHsKICAgIGNhPEYsND4oKTsKICAgIHR5cGVuYW1l IGE8UyxMLDA+Ojp0IHYwKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMp OwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlw ZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoY29uc3QgYW55PEw+JnYsdHlwZW5hbWUgYTxTLEws MT46OnQgdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMs dHlwZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlw ZW5hbWUgYTxTLEwsMD46OnQgdjAodik7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2 Mix2Myx2NCk7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg VCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3Qg YW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMp LT5jYWxsKHYwKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8 RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwx Pjo6dCB2MSkgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMp LT5jYWxsKHYwLHYxKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l IHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMs VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyKSBjb25zdAogIHsKICAgIHJldHVy biBteDxULEw+KHRoaXMpLngodjAsdjEsdjIpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNz IEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoY29uc3QgVCZ2MCxjb25zdCBhbnk8TD4m LHR5cGVuYW1lIGI8UyxULDE+Ojp0IHYxLHR5cGVuYW1lIHg8UyxULEwsMz46OnQgdjIsdHlwZW5h bWUgeDxTLFQsTCw0Pjo6dCB2MykgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54 KHYwLHYxLHYyLHYzKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l IHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMs VCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46 OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8 VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFz cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+ Jix0eXBlbmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5cGVu YW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4 PFMsVCxMLDY+Ojp0IHY1KSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAs djEsdjIsdjMsdjQsdjUpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5h bWUgcjxGLEw+Ojp0IGNhbGxfZXgoY29uc3QgVCZ2MCxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8 UyxULDE+Ojp0IHYxLHR5cGVuYW1lIHg8UyxULEwsMz46OnQgdjIsdHlwZW5hbWUgeDxTLFQsTCw0 Pjo6dCB2Myx0eXBlbmFtZSB4PFMsVCxMLDU+Ojp0IHY0LHR5cGVuYW1lIHg8UyxULEwsNj46OnQg djUsdHlwZW5hbWUgeDxTLFQsTCw3Pjo6dCB2NikgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxM Pih0aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1LHY2KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxj bGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55 PEw+Jix0eXBlbmFtZSBiPFMsVCwxPjo6dCB2MSx0eXBlbmFtZSB4PFMsVCxMLDM+Ojp0IHYyLHR5 cGVuYW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFt ZSB4PFMsVCxMLDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYsdHlwZW5hbWUgeDxT LFQsTCw4Pjo6dCB2NykgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54KHYwLHYx LHYyLHYzLHY0LHY1LHY2LHY3KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5 cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KGNvbnN0IFQmdjAsY29uc3QgYW55PEw+Jix0eXBlbmFt ZSBiPFMsVCwxPjo6dCB2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLGNv bnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMz46OnQgdjMsY29uc3QgYW55PEw+Jix0eXBlbmFt ZSBiPFMsVCw0Pjo6dCB2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0 aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KfTsKCnRl bXBsYXRlPGNsYXNzIEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxhbnlUJiwxPgp7CiAgdHlwZWRl ZiB0eXBlbmFtZSBmYTxTLDA+Ojp0IF90MDsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1l IHI8RixMPjo6dCBub19jYWxsKF90MCxhbnk8TD4mLi4uKSBjb25zdAogIHsKICAgIHRocm93IGJh ZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG LEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLGFueTxMPiZ2MSkgY29uc3QKICB7CiAgICBjYTxGLDI+ KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSk7CiAgICByZXR1cm4gZmM8TD4odGhp cyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0 b3IoKShfdDAgdjAsYW55PEw+JnYxLHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKSBjb25zdAogIHsK ICAgIGNhPEYsMz4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyKTsKICAgIHJl dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8 RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxhbnk8TD4mdjEsdHlwZW5hbWUgYTxTLEwsMj46OnQg djIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMpIGNvbnN0CiAgewogICAgY2E8Riw0PigpOwogICAg dHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMs dCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9y KCkoX3QwIHYwLGFueTxMPiZ2MSx0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMs TCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0Pjo6dCB2NCkgY29uc3QKICB7CiAgICBjYTxGLDU+ KCk7CiAgICB0eXBlbmFtZSB1PEYsTD46OnQgdCh2MCx2MSx2Mix2Myx2NCk7CiAgICByZXR1cm4g ZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1l IHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxUJnYxLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewog ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSk7CiAgfQog IHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChf dDAgdjAsVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyKSBjb25zdAog IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIp OwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNh bGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mix0eXBlbmFt ZSB4PFMsVCxMLDQ+Ojp0IHYzKSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngo djAsdjEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUg cjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6 dCB2Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQp IGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCk7CiAg fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l eChfdDAgdjAsVCZ2MSxhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8 UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM LDY+Ojp0IHY1KSBjb25zdAogIHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAsdjEsdjIs djMsdjQsdjUpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG LEw+Ojp0IGNhbGxfZXgoX3QwIHYwLFQmdjEsYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2 Mix0eXBlbmFtZSB4PFMsVCxMLDQ+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQsdHlw ZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSx0eXBlbmFtZSB4PFMsVCxMLDc+Ojp0IHY2KSBjb25zdAog IHsKICAgIHJldHVybiBteDxULEw+KHRoaXMpLngodjAsdjEsdjIsdjMsdjQsdjUsdjYpOwogIH0K ICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgo X3QwIHYwLFQmdjEsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCwyPjo6dCB2Mixjb25zdCBh bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxT LFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0 ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMT4KewogIHR5cGVk ZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdGVtcGxhdGU8Y2xhc3MgTD4KICB0eXBlbmFt ZSByPEYsTD46OnQgbm9fY2FsbChfdDAsY29uc3QgYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0 aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVu YW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxjb25zdCBhbnk8TD4mdikgY29uc3QKICB7 CiAgICBjYTxGLDI+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVu YW1lIHU8RixMPjo6dCB0KHYwLHYxKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0 ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxj b25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2MikgY29uc3QKICB7CiAgICBjYTxG LDM+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVuYW1lIHU8RixM Pjo6dCB0KHYwLHYxLHYyKTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0 ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxjb25zdCBh bnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2Mykg Y29uc3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsK ICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzKTsKICAgIHJldHVybiBmYzxMPih0 aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVy YXRvcigpKF90MCB2MCxjb25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwyPjo6dCB2Mix0eXBl bmFtZSBhPFMsTCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0Pjo6dCB2NCkgY29uc3QKICB7CiAg ICBjYTxGLDU+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwxPjo6dCB2MSh2KTsKICAgIHR5cGVuYW1l IHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJldHVybiBmYzxMPih0aGlzLHQpOwog IH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxf ZXgoX3QwIHYwLGNvbnN0IFQmdjEsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4g c3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxKTsKICB9CiAgdGVtcGxhdGU8 Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxjb25z dCBUJnYxLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsMj46OnQgdjIpIGNvbnN0CiAgewog ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mik7CiAg fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l eChfdDAgdjAsY29uc3QgVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYy LHR5cGVuYW1lIHg8UyxULEwsND46OnQgdjMpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4o dGhpcykueCh2MCx2MSx2Mix2Myk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0 eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29uc3QgVCZ2MSxjb25zdCBhbnk8TD4m LHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8UyxULEwsND46OnQgdjMsdHlwZW5h bWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0aGlzKS54 KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVu YW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxjb25zdCBUJnYxLGNvbnN0IGFueTxMPiYsdHlw ZW5hbWUgYjxTLFQsMj46OnQgdjIsdHlwZW5hbWUgeDxTLFQsTCw0Pjo6dCB2Myx0eXBlbmFtZSB4 PFMsVCxMLDU+Ojp0IHY0LHR5cGVuYW1lIHg8UyxULEwsNj46OnQgdjUpIGNvbnN0CiAgewogICAg cmV0dXJuIG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSk7CiAgfQogIHRlbXBsYXRl PGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29u c3QgVCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLHR5cGVuYW1lIHg8 UyxULEwsND46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCx0eXBlbmFtZSB4PFMsVCxM LDY+Ojp0IHY1LHR5cGVuYW1lIHg8UyxULEwsNz46OnQgdjYpIGNvbnN0CiAgewogICAgcmV0dXJu IG14PFQsTD4odGhpcykueCh2MCx2MSx2Mix2Myx2NCx2NSx2Nik7CiAgfQogIHRlbXBsYXRlPGNs YXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsY29uc3Qg VCZ2MSxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDI+Ojp0IHYyLGNvbnN0IGFueTxMPiYs dHlwZW5hbWUgYjxTLFQsMz46OnQgdjMsY29uc3QgYW55PEw+Jix0eXBlbmFtZSBiPFMsVCw0Pjo6 dCB2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25z dCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNz IEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxhbnlUJiwyPgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBm YTxTLDA+Ojp0IF90MDsKICB0eXBlZGVmIHR5cGVuYW1lIGZhPFMsMT46OnQgX3QxOwogIHRlbXBs YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG5vX2NhbGwoX3QwLF90MSxhbnk8TD4m Li4uKSBjb25zdAogIHsKICAgIHRocm93IGJhZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRlbXBs YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2 MSxhbnk8TD4mdjIpIGNvbnN0CiAgewogICAgY2E8RiwzPigpOwogICAgdHlwZW5hbWUgdTxGLEw+ Ojp0IHQodjAsdjEsdjIpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRl PGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxh bnk8TD4mdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMpIGNvbnN0CiAgewogICAgY2E8Riw0Pigp OwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+ KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9w ZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxhbnk8TD4mdjIsdHlwZW5hbWUgYTxTLEwsMz46OnQgdjMs dHlwZW5hbWUgYTxTLEwsND46OnQgdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlw ZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMs dCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQg Y2FsbF9leChfdDAgdjAsX3QxIHYxLFQmdjIsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICBy ZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyKTsKICB9CiAg dGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90 MCB2MCxfdDEgdjEsVCZ2Mixjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzKSBj b25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAs djEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxG LEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxUJnYyLGFueTxMPiYsdHlwZW5hbWUgYjxTLFQs Mz46OnQgdjMsdHlwZW5hbWUgeDxTLFQsTCw1Pjo6dCB2NCkgY29uc3QKICB7CiAgICByZXR1cm4g bXg8VCxMPih0aGlzKS54KHYwLHYxLHYyLHYzLHY0KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxj bGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEsVCZ2Mixh bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLHR5cGVuYW1lIHg8UyxULEwsNT46OnQgdjQs dHlwZW5hbWUgeDxTLFQsTCw2Pjo6dCB2NSkgY29uc3QKICB7CiAgICByZXR1cm4gbXg8VCxMPih0 aGlzKS54KHYwLHYxLHYyLHYzLHY0LHY1KTsKICB9CiAgdGVtcGxhdGU8Y2xhc3MgVCxjbGFzcyBM PgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEsVCZ2Mixjb25zdCBh bnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxT LFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0 ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMsY29uc3QgYW55VCYsMj4KewogIHR5cGVk ZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDE+Ojp0 IF90MTsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90 MCxfdDEsY29uc3QgYW55PEw+Ji4uLikgY29uc3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25f Y2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVy YXRvcigpKF90MCB2MCxfdDEgdjEsY29uc3QgYW55PEw+JnYpIGNvbnN0CiAgewogICAgY2E8Riwz PigpOwogICAgdHlwZW5hbWUgYTxTLEwsMj46OnQgdjIodik7CiAgICB0eXBlbmFtZSB1PEYsTD46 OnQgdCh2MCx2MSx2Mik7CiAgICByZXR1cm4gZmM8TD4odGhpcyx0KTsKICB9CiAgdGVtcGxhdGU8 Y2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLGNv bnN0IGFueTxMPiZ2LHR5cGVuYW1lIGE8UyxMLDM+Ojp0IHYzKSBjb25zdAogIHsKICAgIGNhPEYs ND4oKTsKICAgIHR5cGVuYW1lIGE8UyxMLDI+Ojp0IHYyKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+ Ojp0IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBs YXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2 MSxjb25zdCBhbnk8TD4mdix0eXBlbmFtZSBhPFMsTCwzPjo6dCB2Myx0eXBlbmFtZSBhPFMsTCw0 Pjo6dCB2NCkgY29uc3QKICB7CiAgICBjYTxGLDU+KCk7CiAgICB0eXBlbmFtZSBhPFMsTCwyPjo6 dCB2Mih2KTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJl dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxjb25zdCBUJnYyLGNvbnN0IGFu eTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+ Y2FsbCh2MCx2MSx2Mik7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt ZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3QgYW55PEw+ Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2MykgY29uc3QKICB7CiAgICByZXR1cm4gc3RhdGljX2Nh c3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYyLHYzKTsKICB9CiAgdGVtcGxhdGU8Y2xh c3MgVCxjbGFzcyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBjYWxsX2V4KF90MCB2MCxfdDEgdjEs Y29uc3QgVCZ2Mixjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDM+Ojp0IHYzLHR5cGVuYW1l IHg8UyxULEwsNT46OnQgdjQpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcykueCh2 MCx2MSx2Mix2Myx2NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFt ZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3QgYW55PEw+ Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2Myx0eXBlbmFtZSB4PFMsVCxMLDU+Ojp0IHY0LHR5cGVu YW1lIHg8UyxULEwsNj46OnQgdjUpIGNvbnN0CiAgewogICAgcmV0dXJuIG14PFQsTD4odGhpcyku eCh2MCx2MSx2Mix2Myx2NCx2NSk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0 eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLGNvbnN0IFQmdjIsY29uc3Qg YW55PEw+Jix0eXBlbmFtZSBiPFMsVCwzPjo6dCB2Myxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8 UyxULDQ+Ojp0IHY0LGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19j YXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9OwoKdGVtcGxh dGU8Y2xhc3MgRixjbGFzcyBTPgpzdHJ1Y3QgZmk8RixTLGFueVQmLDM+CnsKICB0eXBlZGVmIHR5 cGVuYW1lIGZhPFMsMD46OnQgX3QwOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywxPjo6dCBfdDE7 CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDI+Ojp0IF90MjsKICB0ZW1wbGF0ZTxjbGFzcyBMPgog IHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLGFueTxMPiYuLi4pIGNvbnN0 CiAgewogICAgdGhyb3cgYmFkX2Z1bmN0aW9uX2NhbGwoKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLF90MiB2Mixh bnk8TD4mdjMpIGNvbnN0CiAgewogICAgY2E8Riw0PigpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0 IHQodjAsdjEsdjIsdjMpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRl PGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90MSB2MSxf dDIgdjIsYW55PEw+JnYzLHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIGNh PEYsNT4oKTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzLHY0KTsKICAgIHJl dHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBh bnk8TD4mKSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcykt PmNhbGwodjAsdjEsdjIsdjMpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlw ZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYwLF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBh bnk8TD4mLHR5cGVuYW1lIGI8UyxULDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIHJldHVybiBzdGF0 aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMsdjQpOwogIH0KICB0ZW1w bGF0ZTxjbGFzcyBULGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IGNhbGxfZXgoX3QwIHYw LF90MSB2MSxfdDIgdjIsVCZ2Myxjb25zdCBhbnk8TD4mLHR5cGVuYW1lIGI8UyxULDQ+Ojp0IHY0 LGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYq Pih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myx2NCk7CiAgfQp9OwoKdGVtcGxhdGU8Y2xhc3MgRixj bGFzcyBTPgpzdHJ1Y3QgZmk8RixTLGNvbnN0IGFueVQmLDM+CnsKICB0eXBlZGVmIHR5cGVuYW1l IGZhPFMsMD46OnQgX3QwOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywxPjo6dCBfdDE7CiAgdHlw ZWRlZiB0eXBlbmFtZSBmYTxTLDI+Ojp0IF90MjsKICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVu YW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLGNvbnN0IGFueTxMPiYuLi4pIGNvbnN0 CiAgewogICAgdGhyb3cgYmFkX2Z1bmN0aW9uX2NhbGwoKTsKICB9CiAgdGVtcGxhdGU8Y2xhc3Mg TD4KICB0eXBlbmFtZSByPEYsTD46OnQgb3BlcmF0b3IoKShfdDAgdjAsX3QxIHYxLF90MiB2Mixj b25zdCBhbnk8TD4mdikgY29uc3QKICB7CiAgICBjYTxGLDQ+KCk7CiAgICB0eXBlbmFtZSBhPFMs TCwzPjo6dCB2Myh2KTsKICAgIHR5cGVuYW1lIHU8RixMPjo6dCB0KHYwLHYxLHYyLHYzKTsKICAg IHJldHVybiBmYzxMPih0aGlzLHQpOwogIH0KICB0ZW1wbGF0ZTxjbGFzcyBMPgogIHR5cGVuYW1l IHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxfdDEgdjEsX3QyIHYyLGNvbnN0IGFueTxMPiZ2 LHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KSBjb25zdAogIHsKICAgIGNhPEYsNT4oKTsKICAgIHR5 cGVuYW1lIGE8UyxMLDM+Ojp0IHYzKHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0IHQodjAsdjEs djIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBsYXRlPGNsYXNz IFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLF90 MiB2Mixjb25zdCBUJnYzLGNvbnN0IGFueTxMPiYpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRp Y19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2FsbCh2MCx2MSx2Mix2Myk7CiAgfQogIHRlbXBsYXRl PGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3Qx IHYxLF90MiB2Mixjb25zdCBUJnYzLGNvbnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46OnQg djQpIGNvbnN0CiAgewogICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IEYqPih0aGlzKS0+Y2Fs bCh2MCx2MSx2Mix2Myx2NCk7CiAgfQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBl bmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAsX3QxIHYxLF90MiB2Mixjb25zdCBUJnYzLGNv bnN0IGFueTxMPiYsdHlwZW5hbWUgYjxTLFQsND46OnQgdjQsY29uc3QgYW55PEw+JikgY29uc3QK ICB7CiAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y29uc3QgRio+KHRoaXMpLT5jYWxsKHYwLHYxLHYy LHYzLHY0KTsKICB9Cn07Cgp0ZW1wbGF0ZTxjbGFzcyBGLGNsYXNzIFM+CnN0cnVjdCBmaTxGLFMs YW55VCYsND4KewogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywwPjo6dCBfdDA7CiAgdHlwZWRlZiB0 eXBlbmFtZSBmYTxTLDE+Ojp0IF90MTsKICB0eXBlZGVmIHR5cGVuYW1lIGZhPFMsMj46OnQgX3Qy OwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywzPjo6dCBfdDM7CiAgdGVtcGxhdGU8Y2xhc3MgTD4K ICB0eXBlbmFtZSByPEYsTD46OnQgbm9fY2FsbChfdDAsX3QxLF90MixfdDMsYW55PEw+JikgY29u c3QKICB7CiAgICB0aHJvdyBiYWRfZnVuY3Rpb25fY2FsbCgpOwogIH0KICB0ZW1wbGF0ZTxjbGFz cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBvcGVyYXRvcigpKF90MCB2MCxfdDEgdjEsX3QyIHYy LF90MyB2Myxhbnk8TD4mdjQpIGNvbnN0CiAgewogICAgY2E8Riw1PigpOwogICAgdHlwZW5hbWUg dTxGLEw+Ojp0IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAg fQogIHRlbXBsYXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9l eChfdDAgdjAsX3QxIHYxLF90MiB2MixfdDMgdjMsVCZ2NCxjb25zdCBhbnk8TD4mKSBjb25zdAog IHsKICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIs djMsdjQpOwogIH0KfTsKCnRlbXBsYXRlPGNsYXNzIEYsY2xhc3MgUz4Kc3RydWN0IGZpPEYsUyxj b25zdCBhbnlUJiw0Pgp7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDA+Ojp0IF90MDsKICB0eXBl ZGVmIHR5cGVuYW1lIGZhPFMsMT46OnQgX3QxOwogIHR5cGVkZWYgdHlwZW5hbWUgZmE8UywyPjo6 dCBfdDI7CiAgdHlwZWRlZiB0eXBlbmFtZSBmYTxTLDM+Ojp0IF90MzsKICB0ZW1wbGF0ZTxjbGFz cyBMPgogIHR5cGVuYW1lIHI8RixMPjo6dCBub19jYWxsKF90MCxfdDEsX3QyLF90Myxjb25zdCBh bnk8TD4mKSBjb25zdAogIHsKICAgIHRocm93IGJhZF9mdW5jdGlvbl9jYWxsKCk7CiAgfQogIHRl bXBsYXRlPGNsYXNzIEw+CiAgdHlwZW5hbWUgcjxGLEw+Ojp0IG9wZXJhdG9yKCkoX3QwIHYwLF90 MSB2MSxfdDIgdjIsX3QzIHYzLGNvbnN0IGFueTxMPiZ2KSBjb25zdAogIHsKICAgIGNhPEYsNT4o KTsKICAgIHR5cGVuYW1lIGE8UyxMLDQ+Ojp0IHY0KHYpOwogICAgdHlwZW5hbWUgdTxGLEw+Ojp0 IHQodjAsdjEsdjIsdjMsdjQpOwogICAgcmV0dXJuIGZjPEw+KHRoaXMsdCk7CiAgfQogIHRlbXBs YXRlPGNsYXNzIFQsY2xhc3MgTD4KICB0eXBlbmFtZSByPEYsTD46OnQgY2FsbF9leChfdDAgdjAs X3QxIHYxLF90MiB2MixfdDMgdjMsY29uc3QgVCZ2NCxjb25zdCBhbnk8TD4mKSBjb25zdAogIHsK ICAgIHJldHVybiBzdGF0aWNfY2FzdDxjb25zdCBGKj4odGhpcyktPmNhbGwodjAsdjEsdjIsdjMs djQpOwogIH0KfTsKIyAxMDE2ICIuLi8uLi8uLi9ib29zdC9keW5hbWljX2FueS9mdW5jdGlvbi5o cHAiIDIKCn0KCgp0ZW1wbGF0ZTxjbGFzcyBGLCBjbGFzcyBTPgpzdHJ1Y3Qgc2VsZWN0X2Z1bmN0 aW9uX2ltcGwKewogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VDxTPjo6dHlwZSBmaXJzdF9h bnlUX3R5cGU7CiAgdHlwZWRlZiB0eXBlbmFtZSBhbnlUX3JlZjxmaXJzdF9hbnlUX3R5cGU+Ojp0 eXBlIGZpcnN0X2FueVRfcmVmOwogIHR5cGVkZWYgdHlwZW5hbWUgZmlyc3RfYW55VDxTPjo6cG9z aXRpb24gZmlyc3RfYW55VDsKICB0eXBlZGVmIGdlbmVyYXRlZDo6Zmk8RiwgUywgZmlyc3RfYW55 VF9yZWYsIGZpcnN0X2FueVQ6OnZhbHVlPiB0eXBlOwp9OwoKfQoKCnRlbXBsYXRlPGNsYXNzIEZ1 bmN0aW9uLCBjbGFzcyBTaWduYXR1cmU+CnN0cnVjdCBmdW5jdGlvbiA6IGF1eDo6c2VsZWN0X2Z1 bmN0aW9uX2ltcGw8RnVuY3Rpb24sU2lnbmF0dXJlPjo6dHlwZQp7CiAgdHlwZWRlZiBTaWduYXR1 cmUgc2lnbmF0dXJlOwogIHN0YXRpYyBjb25zdCA6OnN0ZDo6c2l6ZV90IGFyaXR5ID0gYXV4Ojpm dW5jdGlvbl9hcmd1bWVudHM8U2lnbmF0dXJlPjo6YXJpdHk7CgoKCgoKfTsKCn0gfQojIDIgImlv X2FueS5jcHAiIDIKIyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9sZXhpY2FsX2Nhc3Qu aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L2xleGljYWxfY2FzdC5ocHAi CiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbGltaXRzLmhwcCIgMQojIDE5ICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9saW1pdHMuaHBwIgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2xpbWl0cyIgMSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xp bWl0cyIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2NwdV9saW1pdHMuaCIgMSAzCiMgNDkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2xpbWl0cyIgMiAzCiMgODg3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMK bmFtZXNwYWNlIHN0ZAp7CiAgZW51bSBmbG9hdF9yb3VuZF9zdHlsZQogIHsKICAgIHJvdW5kX2lu ZGV0ZXJtaW5hdGUgPSAtMSwKICAgIHJvdW5kX3Rvd2FyZF96ZXJvID0gMCwKICAgIHJvdW5kX3Rv X25lYXJlc3QgPSAxLAogICAgcm91bmRfdG93YXJkX2luZmluaXR5ID0gMiwKICAgIHJvdW5kX3Rv d2FyZF9uZWdfaW5maW5pdHkgPSAzCiAgfTsKCiAgZW51bSBmbG9hdF9kZW5vcm1fc3R5bGUKICB7 CiAgICBkZW5vcm1faW5kZXRlcm1pbmF0ZSA9IC0xLAogICAgZGVub3JtX2Fic2VudCA9IDAsCiAg ICBkZW5vcm1fcHJlc2VudCA9IDEKICB9OwoKCgoKICBzdHJ1Y3QgX19udW1lcmljX2xpbWl0c19i YXNlCiAgewogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSBmYWxzZTsKCiAg ICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDA7CiAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 czEwID0gMDsKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSBmYWxzZTsKICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAwOwoKICAgIHN0 YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgIHN0YXRpYyBjb25zdCBpbnQgbWlu X2V4cG9uZW50MTAgPSAwOwogICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwog ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVp ZXRfTmFOID0gZmFsc2U7CiAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZh bHNlOwoKICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IGZhbHNlOwogICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf bW9kdWxvID0gZmFsc2U7CgogICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSBmYWxzZTsKICAg IHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgc3RhdGljIGNv bnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAg fTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzIDog cHVibGljIF9fbnVtZXJpY19saW1pdHNfYmFzZQogICAgewogICAgICBzdGF0aWMgX1RwIG1pbigp IHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1Rw IG1heCgpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAgICBzdGF0 aWMgX1RwIGVwc2lsb24oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9UcD4oMCk7IH0K ICAgICAgc3RhdGljIF9UcCByb3VuZF9lcnJvcigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nh c3Q8X1RwPigwKTsgfQogICAgICBzdGF0aWMgX1RwIGluZmluaXR5KCkgdGhyb3coKSB7IHJldHVy biBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgcXVpZXRfTmFOKCkgdGhy b3coKSB7IHJldHVybiBzdGF0aWNfY2FzdDxfVHA+KDApOyB9CiAgICAgIHN0YXRpYyBfVHAgc2ln bmFsaW5nX05hTigpIHRocm93KCkgeyByZXR1cm4gc3RhdGljX2Nhc3Q8X1RwPigwKTsgfQogICAg ICBzdGF0aWMgX1RwIGRlbm9ybV9taW4oKSB0aHJvdygpIHsgcmV0dXJuIHN0YXRpY19jYXN0PF9U cD4oMCk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRz PGJvb2w+CiAgICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1 ZTsKCiAgICAgIHN0YXRpYyBib29sIG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gZmFsc2U7 IH0KCiAgICAgIHN0YXRpYyBib29sIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gdHJ1ZTsg fQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAxOwogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0czEwID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFk aXggPSAyOwogICAgICBzdGF0aWMgYm9vbCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVy biBmYWxzZTsgfQogICAgICBzdGF0aWMgYm9vbCByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAg eyByZXR1cm4gZmFsc2U7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0g MDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhf ZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0 aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50Owog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0 YXRpYyBib29sIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBmYWxzZTsgfQogICAg ICBzdGF0aWMgYm9vbCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGZhbHNlOyB9 CiAgICAgIHN0YXRpYyBib29sIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IGZhbHNlOyB9CiAgICAgIHN0YXRpYyBib29sIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIGZhbHNlOyB9CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pZWM1NTkgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX21vZHVsbyA9IGZhbHNlOwoKCgoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlCiAgICAgICAgICAgICAgIHx8IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRf cm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCiAg dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGNoYXI+CiAgICB7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjaGFy IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKGNoYXIpKC0xMjcgLSAxKTsgfQogICAgICBz dGF0aWMgY2hhciBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChjaGFyKTEyNzsgfQoKICAg ICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA3OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRp Z2l0czEwID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7 CiAgICAgIHN0YXRpYyBjaGFyIGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNoYXIo KTsgfQogICAgICBzdGF0aWMgY2hhciByb3VuZF9lcnJvcigpIHRocm93KCkKICAgICAgeyByZXR1 cm4gY2hhcigpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg Y2hhciBpbmZpbml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAgICAgIHN0 YXRpYyBjaGFyIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gY2hhcigpOyB9CiAg ICAgIHN0YXRpYyBjaGFyIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIGNo YXIoKTsgfQogICAgICBzdGF0aWMgY2hhciBkZW5vcm1fbWluKCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxjaGFyPigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEwNzEgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czxzaWduZWQgY2hhcj4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3Bl Y2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHNpZ25lZCBjaGFyIG1pbigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gKC0xMjcgLSAxKTsgfQogICAgICBzdGF0aWMgc2lnbmVkIGNoYXIgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAxMjc7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQg ZGlnaXRzID0gNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMxMCA9IDI7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2ludGVnZXIgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMg c2lnbmVkIGNoYXIgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0 IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3Jt X3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBpbmZp bml0eSgpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8c2lnbmVkIGNoYXI+KDAp OyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgc2lnbmVk IGNoYXIgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8 c2lnbmVkIGNoYXI+KDApOyB9CiAgICAgIHN0YXRpYyBzaWduZWQgY2hhciBkZW5vcm1fbWluKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxzaWduZWQgY2hhcj4oMCk7IH0KCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9k dWxvID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgdGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBmbG9hdF9yb3VuZF9zdHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwog ICAgfTsKIyAxMTI4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1w bGF0ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8dW5zaWduZWQgY2hhcj4KICAgIHsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBjaGFyIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDEyNyAqIDIg KyAxKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSA4OwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gMjsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2ludGVnZXIgPSB0cnVlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgcmFkaXggPSAyOwogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBlcHNpbG9uKCkgdGhyb3co KQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBjaGFyIHJvdW5kX2Vy cm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50 IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9O YU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBm YWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0g ZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0g ZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBpbmZpbml0eSgpIHRocm93KCkKICAg ICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oMCk7IH0KICAgICAgc3RhdGlj IHVuc2lnbmVkIGNoYXIgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNf Y2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBj aGFyPigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgY2hhciBkZW5vcm1fbWluKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigwKTsgfQoKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8g PSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9 OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx3Y2hhcl90Pgog ICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9IHRydWU7CgogICAg ICBzdGF0aWMgd2NoYXJfdCBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICh3Y2hhcl90KSgt MjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgd2NoYXJfdCBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuICh3Y2hhcl90KTIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3Qg aW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB3 Y2hhcl90IGVwc2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGlj IHdjaGFyX3Qgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAg IHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50 ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBz dGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNf c2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0 eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBo YXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB3Y2hhcl90IGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3RhdGljIHdjaGFyX3Qg cXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiB3Y2hhcl90KCk7IH0KICAgICAgc3Rh dGljIHdjaGFyX3Qgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gd2NoYXJf dCgpOyB9CiAgICAgIHN0YXRpYyB3Y2hhcl90IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHdjaGFyX3QoKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0g ZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUg PSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxl ID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyNDEgIi91c3IvbG9jYWwvaW5jbHVkZS9j KysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxz aG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVl OwoKICAgICAgc3RhdGljIHNob3J0IG1pbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gKC0zMjc2 NyAtIDEpOyB9CiAgICAgIHN0YXRpYyBzaG9ydCBtYXgoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu IDMyNzY3OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDE1OwogICAgICBzdGF0 aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2ln bmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAg ICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkK ICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQg PSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAg c3RhdGljIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzaG9ydCgpOyB9 CiAgICAgIHN0YXRpYyBzaG9ydCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHNo b3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHNob3J0KCk7IH0KICAgICAgc3RhdGljIHNob3J0IGRlbm9ybV9taW4oKSB0aHJv dygpCiAgICAgIHsgcmV0dXJuIHNob3J0KCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlz X2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVz c19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJv dW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDEyOTggIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czx1bnNpZ25lZCBzaG9ydD4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf c3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IG1pbigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgc2hvcnQgbWF4 KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoMzI3NjcgKiAyICsgMSk7IH0KCiAgICAgIHN0YXRp YyBjb25zdCBpbnQgZGlnaXRzID0gMTY7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAg PSA0OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCByb3VuZF9lcnJvcigpIHRocm93KCkKICAg ICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAw OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9l eHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRp YyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3Rh dGljIHVuc2lnbmVkIHNob3J0IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0 aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0 IHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQg c2hvcnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBzaG9ydCBzaWduYWxpbmdfTmFOKCkg dGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBzaG9ydD4oMCk7IH0K ICAgICAgc3RhdGljIHVuc2lnbmVkIHNob3J0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsg cmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PigwKTsgfQoKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfYm91 bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX21vZHVsbyA9IHRydWU7Cgog ICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91 bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dhcmRfemVybzsKICAgIH07CgoKCgoKCiAg dGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGltaXRzPGludD4KICAgIHsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIGludCBt aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIChpbnQpKC0yMTQ3NDgzNjQ3TCAtIDEpOyB9CiAg ICAgIHN0YXRpYyBpbnQgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoaW50KTIxNDc0ODM2 NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0cyA9IDMxOwogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAg IHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGlu dCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyBy ZXR1cm4gMDsgfQogICAgICBzdGF0aWMgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAg ICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29u c3QgaW50IG1heF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9u ZW50MTAgPSAwOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNv bnN0IGZsb2F0X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMg aW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxpbnQ+KDAp OyB9CiAgICAgIHN0YXRpYyBpbnQgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBz dGF0aWNfY2FzdDxpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyBpbnQgc2lnbmFsaW5nX05hTigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8aW50PigwKTsgfQogICAgICBzdGF0aWMg aW50IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGludD4o MCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAg c3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJk X3plcm87CiAgICB9OwojIDE0MTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIg MwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBpbnQ+CiAg ICB7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyB1bnNpZ25lZCBpbnQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAg ICAgICAgICBzdGF0aWMgdW5zaWduZWQgaW50IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4g KHVuc2lnbmVkKSgyMTQ3NDgzNjQ3TCAqIDJVICsgMSk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gMzI7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSA5OwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBpc19zaWduZWQgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBpbnQgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBz dGF0aWMgdW5zaWduZWQgaW50IHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAw OyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1h eF9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAw OwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0 X2Rlbm9ybV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgdW5zaWduZWQg aW50IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25l ZCBpbnQ+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBpbnQgcXVpZXRfTmFOKCkgdGhyb3co KQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KDApOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBpbnQgc2lnbmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4g c3RhdGljX2Nhc3Q8dW5zaWduZWQgaW50PigwKTsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgaW50 IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVk IGludD4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29u c3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsK ICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRf dG93YXJkX3plcm87CiAgICB9OwoKCgoKCgogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmlj X2xpbWl0czxsb25nPgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXpl ZCA9IHRydWU7CgogICAgICBzdGF0aWMgbG9uZyBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJu ICgtMjE0NzQ4MzY0N0wgLSAxKTsgfQogICAgICBzdGF0aWMgbG9uZyBtYXgoKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDIxNDc0ODM2NDdMOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gOTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0ID0gdHJ1ZTsK ICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBsb25nIGVwc2ls b24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KICAgICAgc3RhdGljIGxvbmcgcm91bmRf ZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQx MCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3Rh dGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQxMCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9v bCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0 X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9 IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0g PSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3Mg PSBmYWxzZTsKCiAgICAgIHN0YXRpYyBsb25nIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJl dHVybiBzdGF0aWNfY2FzdDxsb25nPigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBxdWlldF9OYU4o KSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CiAgICAgIHN0 YXRpYyBsb25nIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmc+KDApOyB9CgogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCBpc19pZWM1NTkgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVk ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfbW9kdWxvID0gdHJ1ZTsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg dGlueW5lc3NfYmVmb3JlID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBmbG9hdF9yb3VuZF9z dHlsZSByb3VuZF9zdHlsZSA9IHJvdW5kX3Rvd2FyZF96ZXJvOwogICAgfTsKIyAxNTIyICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0ZTw+CiAgICBzdHJ1Y3Qg bnVtZXJpY19saW1pdHM8dW5zaWduZWQgbG9uZz4KICAgIHsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfc3BlY2lhbGl6ZWQgPSB0cnVlOwoKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbWlu KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25n IG1heCgpIHRocm93KCkKICAgICAgeyByZXR1cm4gKDIxNDc0ODM2NDdMICogMlUgKyAxKTsgfQoK ICAgICAgc3RhdGljIGNvbnN0IGludCBkaWdpdHMgPSAzMjsKICAgICAgc3RhdGljIGNvbnN0IGlu dCBkaWdpdHMxMCA9IDk7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4 ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gMDsgfQogICAgICBzdGF0aWMgdW5zaWduZWQgbG9uZyByb3VuZF9lcnJvcigpIHRo cm93KCkKICAgICAgeyByZXR1cm4gMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhw b25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudDEwID0gMDsKICAg ICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQgPSAwOwogICAgICBzdGF0aWMgY29uc3Qg aW50IG1heF9leHBvbmVudDEwID0gMDsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZp bml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFs c2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAg ICAgIHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9h YnNlbnQ7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoK ICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIHN0YXRpY19jYXN0PHVuc2lnbmVkIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25l ZCBsb25nIHF1aWV0X05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5z aWduZWQgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgc2lnbmFsaW5nX05h TigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7 IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgZGVub3JtX21pbigpIHRocm93KCkKICAgICAg eyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2Jv dW5kZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoK ICAgICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3Qg Ym9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3Jv dW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwoKCgoKCgog IHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxsb25nIGxvbmc+CiAgICB7CiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRp YyBsb25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAoLTkyMjMzNzIwMzY4NTQ3 NzU4MDdMTCAtIDEpOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAg ICB7IHJldHVybiA5MjIzMzcyMDM2ODU0Nzc1ODA3TEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBp bnQgZGlnaXRzID0gNjM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxODsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0 IGJvb2wgaXNfaW50ZWdlciA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2V4YWN0 ID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAgIHN0YXRpYyBs b25nIGxvbmcgZXBzaWxvbigpIHRocm93KCkKICAgICAgeyByZXR1cm4gMDsgfQogICAgICBzdGF0 aWMgbG9uZyBsb25nIHJvdW5kX2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgaW50IG1pbl9leHBvbmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25z dCBpbnQgbWluX2V4cG9uZW50MTAgPSAwOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBv bmVudCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAgPSAwOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2luZmluaXR5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19xdWlldF9OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aGFzX3NpZ25hbGluZ19OYU4gPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X2Rlbm9y bV9zdHlsZSBoYXNfZGVub3JtID0gZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaGFzX2Rlbm9ybV9sb3NzID0gZmFsc2U7CgogICAgICBzdGF0aWMgbG9uZyBsb25nIGluZmlu aXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9 CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgcXVpZXRfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVy biBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyBsb25nIGxvbmcgc2ln bmFsaW5nX05hTigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZyBsb25n PigwKTsgfQogICAgICBzdGF0aWMgbG9uZyBsb25nIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oMCk7IH0KCiAgICAgIHN0YXRpYyBjb25z dCBib29sIGlzX2llYzU1OSA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5k ZWQgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSB0cnVlOwoKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgdHJhcHMgPSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9v bCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5k X3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93YXJkX3plcm87CiAgICB9OwojIDE2MzQgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVj dCBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBsb25nIGxvbmc+CiAgICB7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyB1bnNpZ25lZCBs b25nIGxvbmcgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0YXRpYyB1 bnNpZ25lZCBsb25nIGxvbmcgbWF4KCkgdGhyb3coKQogICAgICB7IHJldHVybiAoOTIyMzM3MjAz Njg1NDc3NTgwN0xMICogMlVMTCArIDEpOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gMTk7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX3NpZ25lZCA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBp c19pbnRlZ2VyID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfZXhhY3QgPSB0cnVl OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIHVuc2lnbmVk IGxvbmcgbG9uZyBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAwOyB9CiAgICAgIHN0 YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDA7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gMDsKICAgICAg c3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IDA7CiAgICAgIHN0YXRpYyBjb25zdCBp bnQgbWF4X2V4cG9uZW50ID0gMDsKICAgICAgc3RhdGljIGNvbnN0IGludCBtYXhfZXhwb25lbnQx MCA9IDA7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfaW5maW5pdHkgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX3F1aWV0X05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfc2lnbmFsaW5nX05hTiA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3Qg ZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPSBkZW5vcm1fYWJzZW50OwogICAgICBzdGF0 aWMgY29uc3QgYm9vbCBoYXNfZGVub3JtX2xvc3MgPSBmYWxzZTsKCiAgICAgIHN0YXRpYyB1bnNp Z25lZCBsb25nIGxvbmcgaW5maW5pdHkoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcg bG9uZyBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHN0YXRpY19jYXN0PHVuc2ln bmVkIGxvbmcgbG9uZz4oMCk7IH0KICAgICAgc3RhdGljIHVuc2lnbmVkIGxvbmcgbG9uZyBzaWdu YWxpbmdfTmFOKCkgdGhyb3coKQogICAgICB7IHJldHVybiBzdGF0aWNfY2FzdDx1bnNpZ25lZCBs b25nIGxvbmc+KDApOyB9CiAgICAgIHN0YXRpYyB1bnNpZ25lZCBsb25nIGxvbmcgZGVub3JtX21p bigpIHRocm93KCkKICAgICAgeyByZXR1cm4gc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZyBsb25n PigwKTsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNfaWVjNTU5ID0gdHJ1ZTsKICAgICAg c3RhdGljIGNvbnN0IGJvb2wgaXNfYm91bmRlZCA9IHRydWU7CiAgICAgIHN0YXRpYyBjb25zdCBi b29sIGlzX21vZHVsbyA9IHRydWU7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IHRy dWU7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRfc3R5bGUgcm91bmRfc3R5bGUgPSByb3VuZF90b3dh cmRfemVybzsKICAgIH07CgoKCgoKCiAgdGVtcGxhdGU8PgogICAgc3RydWN0IG51bWVyaWNfbGlt aXRzPGZsb2F0PgogICAgewogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19zcGVjaWFsaXplZCA9 IHRydWU7CgogICAgICBzdGF0aWMgZmxvYXQgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAx LjE3NTQ5NDM1ZS0zOEY7IH0KICAgICAgc3RhdGljIGZsb2F0IG1heCgpIHRocm93KCkKICAgICAg eyByZXR1cm4gMy40MDI4MjM0N2UrMzhGOyB9CgogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0 cyA9IDI0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0gNjsKICAgICAgc3RhdGlj IGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaXNf aW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZhbHNl OwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGZsb2F0IGVw c2lsb24oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMTkyMDkyOTBlLTA3RjsgfQogICAgICBz dGF0aWMgZmxvYXQgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDEuMEY7IH0K CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWluX2V4cG9uZW50ID0gLTEyNTsKICAgICAgc3RhdGlj IGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zNzsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQgPSAxMjg7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgbWF4X2V4cG9uZW50MTAg PSAzODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAg ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBj b25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBm bG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9IGRlbm9ybV9hYnNlbnQ7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGhhc19kZW5vcm1fbG9zcyA9IGZhbHNlOwoKICAgICAgc3RhdGljIGZsb2F0 IGluZmluaXR5KCkgdGhyb3coKQogICAgICB7IHJldHVybiAwLjBGOyB9CiAgICAgIHN0YXRpYyBm bG9hdCBxdWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0KICAgICAgc3Rh dGljIGZsb2F0IHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEY7IH0K ICAgICAgc3RhdGljIGZsb2F0IGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAu MEY7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwogICAgICBz dGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFwcyA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxzZTsKICAg ICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0gcm91bmRfdG93 YXJkX3plcm87CiAgICB9OwojIDE3NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xpbWl0 cyIgMwogIHRlbXBsYXRlPD4KICAgIHN0cnVjdCBudW1lcmljX2xpbWl0czxkb3VibGU+CiAgICB7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0 YXRpYyBkb3VibGUgbWluKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyNTA3Mzg1ODUwNzIw MTRlLTMwODsgfQogICAgICBzdGF0aWMgZG91YmxlIG1heCgpIHRocm93KCkKICAgICAgeyByZXR1 cm4gMS43OTc2OTMxMzQ4NjIzMTU3ZSszMDg7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGln aXRzID0gNTM7CiAgICAgIHN0YXRpYyBjb25zdCBpbnQgZGlnaXRzMTAgPSAxNTsKICAgICAgc3Rh dGljIGNvbnN0IGJvb2wgaXNfc2lnbmVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfaW50ZWdlciA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19leGFjdCA9IGZh bHNlOwogICAgICBzdGF0aWMgY29uc3QgaW50IHJhZGl4ID0gMjsKICAgICAgc3RhdGljIGRvdWJs ZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAyLjIyMDQ0NjA0OTI1MDMxMzFlLTE2 OyB9CiAgICAgIHN0YXRpYyBkb3VibGUgcm91bmRfZXJyb3IoKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDEuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQgPSAtMTAyMTsK ICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5fZXhwb25lbnQxMCA9IC0zMDc7CiAgICAgIHN0YXRp YyBjb25zdCBpbnQgbWF4X2V4cG9uZW50ID0gMTAyNDsKICAgICAgc3RhdGljIGNvbnN0IGludCBt YXhfZXhwb25lbnQxMCA9IDMwODsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0 eSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7 CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19zaWduYWxpbmdfTmFOID0gZmFsc2U7CiAgICAg IHN0YXRpYyBjb25zdCBmbG9hdF9kZW5vcm1fc3R5bGUgaGFzX2Rlbm9ybSA9CiAgICAgICAgICAg ICAgZGVub3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3Nz ID0gZmFsc2U7CgogICAgICBzdGF0aWMgZG91YmxlIGluZmluaXR5KCkgdGhyb3coKQogICAgICB7 IHJldHVybiAwLjA7IH0KICAgICAgc3RhdGljIGRvdWJsZSBxdWlldF9OYU4oKSB0aHJvdygpCiAg ICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0 aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQogICAgICBzdGF0aWMgZG91YmxlIGRlbm9ybV9t aW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMDsgfQoKICAgICAgc3RhdGljIGNvbnN0IGJv b2wgaXNfaWVjNTU5ID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2JvdW5kZWQg PSB0cnVlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19tb2R1bG8gPSBmYWxzZTsKCiAgICAg IHN0YXRpYyBjb25zdCBib29sIHRyYXBzID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IHRpbnluZXNzX2JlZm9yZSA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgZmxvYXRfcm91bmRf c3R5bGUgcm91bmRfc3R5bGUgPQogICAgICAgICAgICAgIHJvdW5kX3Rvd2FyZF96ZXJvOwogICAg fTsKIyAxODQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9saW1pdHMiIDMKICB0ZW1wbGF0 ZTw+CiAgICBzdHJ1Y3QgbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+CiAgICB7CiAgICAgIHN0 YXRpYyBjb25zdCBib29sIGlzX3NwZWNpYWxpemVkID0gdHJ1ZTsKCiAgICAgIHN0YXRpYyBsb25n IGRvdWJsZSBtaW4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDMuMzYyMTAzMTQzMTEyMDkzNTA2 MjZlLTQ5MzJMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBtYXgoKSB0aHJvdygpCiAgICAg IHsgcmV0dXJuIDEuMTg5NzMxNDk1MzU3MjMxNzY1MDJlKzQ5MzJMOyB9CgogICAgICBzdGF0aWMg Y29uc3QgaW50IGRpZ2l0cyA9IDY0OwogICAgICBzdGF0aWMgY29uc3QgaW50IGRpZ2l0czEwID0g MTg7CiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX3NpZ25lZCA9IHRydWU7CiAgICAgIHN0YXRp YyBjb25zdCBib29sIGlzX2ludGVnZXIgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wg aXNfZXhhY3QgPSBmYWxzZTsKICAgICAgc3RhdGljIGNvbnN0IGludCByYWRpeCA9IDI7CiAgICAg IHN0YXRpYyBsb25nIGRvdWJsZSBlcHNpbG9uKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjA4 NDIwMjE3MjQ4NTUwNDQzNDAxZS0xOUw7IH0KICAgICAgc3RhdGljIGxvbmcgZG91YmxlIHJvdW5k X2Vycm9yKCkgdGhyb3coKQogICAgICB7IHJldHVybiAxLjBMOyB9CgogICAgICBzdGF0aWMgY29u c3QgaW50IG1pbl9leHBvbmVudCA9IC0xNjM4MTsKICAgICAgc3RhdGljIGNvbnN0IGludCBtaW5f ZXhwb25lbnQxMCA9IC00OTMxOwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudCA9 IDE2Mzg0OwogICAgICBzdGF0aWMgY29uc3QgaW50IG1heF9leHBvbmVudDEwID0gNDkzMjsKCiAg ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc19pbmZpbml0eSA9IGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgYm9vbCBoYXNfcXVpZXRfTmFOID0gZmFsc2U7CiAgICAgIHN0YXRpYyBjb25zdCBib29s IGhhc19zaWduYWxpbmdfTmFOID0KICAgICAgICAgICAgICAgIGZhbHNlOwogICAgICBzdGF0aWMg Y29uc3QgZmxvYXRfZGVub3JtX3N0eWxlIGhhc19kZW5vcm0gPQogICAgICAgICAgICAgICAgZGVu b3JtX2Fic2VudDsKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzX2Rlbm9ybV9sb3NzID0KICAg ICAgICAgICAgICAgIGZhbHNlOwoKICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGluZmluaXR5KCkg dGhyb3coKQogICAgICB7IHJldHVybiAwLjBMOyB9CiAgICAgIHN0YXRpYyBsb25nIGRvdWJsZSBx dWlldF9OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0KICAgICAgc3RhdGljIGxv bmcgZG91YmxlIHNpZ25hbGluZ19OYU4oKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuIDAuMEw7IH0K ICAgICAgc3RhdGljIGxvbmcgZG91YmxlIGRlbm9ybV9taW4oKSB0aHJvdygpCiAgICAgIHsgcmV0 dXJuIDAuMEw7IH0KCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGlzX2llYzU1OSA9IGZhbHNlOwog ICAgICBzdGF0aWMgY29uc3QgYm9vbCBpc19ib3VuZGVkID0gdHJ1ZTsKICAgICAgc3RhdGljIGNv bnN0IGJvb2wgaXNfbW9kdWxvID0gZmFsc2U7CgogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0cmFw cyA9IGZhbHNlOwogICAgICBzdGF0aWMgY29uc3QgYm9vbCB0aW55bmVzc19iZWZvcmUgPSBmYWxz ZTsKICAgICAgc3RhdGljIGNvbnN0IGZsb2F0X3JvdW5kX3N0eWxlIHJvdW5kX3N0eWxlID0KICAg ICAgICByb3VuZF90b3dhcmRfemVybzsKICAgIH07CiMgMTkyNCAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvbGltaXRzIiAzCn0KIyAyMCAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbGlt aXRzLmhwcCIgMgojIDIxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9sZXhpY2FsX2Nhc3Qu aHBwIiAyCgoKCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zc3RyZWFtIiAxIDMK IyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMwoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9pc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvaXN0cmVhbSIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3Mi IDEgMwojIDQzICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pb3MiIDMKCgoKCgojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlZndkLmgiIDEgMwojIDQ0ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAzCgoKIyAxICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL2MrK2xvY2FsZS5oIiAx IDMKIyAzNiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0 cy9jKytsb2NhbGUuaCIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nsb2NhbGUi IDEgMwojIDQ4ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbG9jYWxlIiAzCgojIDEgIi91 c3IvaW5jbHVkZS9sb2NhbGUuaCIgMSAzCiMgMjkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwoj IDEgIi91c3IvbG9jYWwvbGliL2djYy1saWIvaTY4Ni1wYy1saW51eC1nbnUvMy4yL2luY2x1ZGUv c3RkZGVmLmgiIDEgMwojIDMwICIvdXNyL2luY2x1ZGUvbG9jYWxlLmgiIDIgMwojIDEgIi91c3Iv aW5jbHVkZS9iaXRzL2xvY2FsZS5oIiAxIDMKIyAyNyAiL3Vzci9pbmNsdWRlL2JpdHMvbG9jYWxl LmgiIDMKZW51bQp7CiAgX19MQ19DVFlQRSA9IDAsCiAgX19MQ19OVU1FUklDID0gMSwKICBfX0xD X1RJTUUgPSAyLAogIF9fTENfQ09MTEFURSA9IDMsCiAgX19MQ19NT05FVEFSWSA9IDQsCiAgX19M Q19NRVNTQUdFUyA9IDUsCiAgX19MQ19BTEwgPSA2LAogIF9fTENfUEFQRVIgPSA3LAogIF9fTENf TkFNRSA9IDgsCiAgX19MQ19BRERSRVNTID0gOSwKICBfX0xDX1RFTEVQSE9ORSA9IDEwLAogIF9f TENfTUVBU1VSRU1FTlQgPSAxMSwKICBfX0xDX0lERU5USUZJQ0FUSU9OID0gMTIKfTsKIyAzMSAi L3Vzci9pbmNsdWRlL2xvY2FsZS5oIiAyIDMKCmV4dGVybiAiQyIgewojIDUyICIvdXNyL2luY2x1 ZGUvbG9jYWxlLmgiIDMKc3RydWN0IGxjb252CnsKCgogIGNoYXIgKmRlY2ltYWxfcG9pbnQ7CiAg Y2hhciAqdGhvdXNhbmRzX3NlcDsKCgoKCgogIGNoYXIgKmdyb3VwaW5nOwoKCgoKCiAgY2hhciAq aW50X2N1cnJfc3ltYm9sOwogIGNoYXIgKmN1cnJlbmN5X3N5bWJvbDsKICBjaGFyICptb25fZGVj aW1hbF9wb2ludDsKICBjaGFyICptb25fdGhvdXNhbmRzX3NlcDsKICBjaGFyICptb25fZ3JvdXBp bmc7CiAgY2hhciAqcG9zaXRpdmVfc2lnbjsKICBjaGFyICpuZWdhdGl2ZV9zaWduOwogIGNoYXIg aW50X2ZyYWNfZGlnaXRzOwogIGNoYXIgZnJhY19kaWdpdHM7CgogIGNoYXIgcF9jc19wcmVjZWRl czsKCiAgY2hhciBwX3NlcF9ieV9zcGFjZTsKCiAgY2hhciBuX2NzX3ByZWNlZGVzOwoKICBjaGFy IG5fc2VwX2J5X3NwYWNlOwoKCgoKCgogIGNoYXIgcF9zaWduX3Bvc247CiAgY2hhciBuX3NpZ25f cG9zbjsKCgogIGNoYXIgaW50X3BfY3NfcHJlY2VkZXM7CgogIGNoYXIgaW50X3Bfc2VwX2J5X3Nw YWNlOwoKICBjaGFyIGludF9uX2NzX3ByZWNlZGVzOwoKICBjaGFyIGludF9uX3NlcF9ieV9zcGFj ZTsKCgoKCgoKICBjaGFyIGludF9wX3NpZ25fcG9zbjsKICBjaGFyIGludF9uX3NpZ25fcG9zbjsK IyAxMTkgIi91c3IvaW5jbHVkZS9sb2NhbGUuaCIgMwp9OwoKCgpleHRlcm4gY2hhciAqc2V0bG9j YWxlIChpbnQgX19jYXRlZ29yeSwgY29uc3QgY2hhciAqX19sb2NhbGUpIDsKCgpleHRlcm4gc3Ry dWN0IGxjb252ICpsb2NhbGVjb252ICh2b2lkKSA7CiMgMTQ5ICIvdXNyL2luY2x1ZGUvbG9jYWxl LmgiIDMKZXh0ZXJuIF9fbG9jYWxlX3QgX19uZXdsb2NhbGUgKGludCBfX2NhdGVnb3J5X21hc2ss IGNvbnN0IGNoYXIgKl9fbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19s b2NhbGVfdCBfX2Jhc2UpIDsKCgoKZXh0ZXJuIF9fbG9jYWxlX3QgX19kdXBsb2NhbGUgKF9fbG9j YWxlX3QgX19kYXRhc2V0KSA7CgoKCmV4dGVybiB2b2lkIF9fZnJlZWxvY2FsZSAoX19sb2NhbGVf dCBfX2RhdGFzZXQpIDsKCgp9CiMgNTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Nsb2Nh bGUiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6bGNvbnY7CiAgdXNpbmcgOjpz ZXRsb2NhbGU7CiAgdXNpbmcgOjpsb2NhbGVjb252Owp9CiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9sYW5naW5mby5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgi IDMKIyAxICIvdXNyL2luY2x1ZGUvbmxfdHlwZXMuaCIgMSAzCiMgMzEgIi91c3IvaW5jbHVkZS9u bF90eXBlcy5oIiAzCmV4dGVybiAiQyIgewoKCnR5cGVkZWYgdm9pZCAqbmxfY2F0ZDsKCgp0eXBl ZGVmIGludCBubF9pdGVtOwoKCmV4dGVybiBubF9jYXRkIGNhdG9wZW4gKGNvbnN0IGNoYXIgKl9f Y2F0X25hbWUsIGludCBfX2ZsYWcpIDsKCgoKZXh0ZXJuIGNoYXIgKmNhdGdldHMgKG5sX2NhdGQg X19jYXRhbG9nLCBpbnQgX19zZXQsIGludCBfX251bWJlciwKICAgICAgICAgICAgICAgICAgICAg IGNvbnN0IGNoYXIgKl9fc3RyaW5nKSA7CgoKZXh0ZXJuIGludCBjYXRjbG9zZSAobmxfY2F0ZCBf X2NhdGFsb2cpIDsKCn0KIyAyNSAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDIgMwoKIyAxICIv dXNyL2luY2x1ZGUvYml0cy9sb2NhbGUuaCIgMSAzCiMgMjcgIi91c3IvaW5jbHVkZS9sYW5naW5m by5oIiAyIDMKCgpleHRlcm4gIkMiIHsKIyA0MyAiL3Vzci9pbmNsdWRlL2xhbmdpbmZvLmgiIDMK ZW51bQp7CgoKCiAgQUJEQVlfMSA9ICgoKF9fTENfVElNRSkgPDwgMTYpIHwgKDApKSwKCiAgQUJE QVlfMiwKCiAgQUJEQVlfMywKCiAgQUJEQVlfNCwKCiAgQUJEQVlfNSwKCiAgQUJEQVlfNiwKCiAg QUJEQVlfNywKCgoKICBEQVlfMSwKCiAgREFZXzIsCgogIERBWV8zLAoKICBEQVlfNCwKCiAgREFZ XzUsCgogIERBWV82LAoKICBEQVlfNywKCgoKICBBQk1PTl8xLAoKICBBQk1PTl8yLAoKICBBQk1P Tl8zLAoKICBBQk1PTl80LAoKICBBQk1PTl81LAoKICBBQk1PTl82LAoKICBBQk1PTl83LAoKICBB Qk1PTl84LAoKICBBQk1PTl85LAoKICBBQk1PTl8xMCwKCiAgQUJNT05fMTEsCgogIEFCTU9OXzEy LAoKCgogIE1PTl8xLAoKICBNT05fMiwKCiAgTU9OXzMsCgogIE1PTl80LAoKICBNT05fNSwKCiAg TU9OXzYsCgogIE1PTl83LAoKICBNT05fOCwKCiAgTU9OXzksCgogIE1PTl8xMCwKCiAgTU9OXzEx LAoKICBNT05fMTIsCgoKICBBTV9TVFIsCgogIFBNX1NUUiwKCgogIERfVF9GTVQsCgogIERfRk1U LAoKICBUX0ZNVCwKCiAgVF9GTVRfQU1QTSwKCgogIEVSQSwKCiAgX19FUkFfWUVBUiwKCgoKICBF UkFfRF9GTVQsCgogIEFMVF9ESUdJVFMsCgogIEVSQV9EX1RfRk1ULAoKICBFUkFfVF9GTVQsCgoK ICBfTkxfVElNRV9FUkFfTlVNX0VOVFJJRVMsCiAgX05MX1RJTUVfRVJBX0VOVFJJRVMsCgogIF9O TF9XQUJEQVlfMSwKICBfTkxfV0FCREFZXzIsCiAgX05MX1dBQkRBWV8zLAogIF9OTF9XQUJEQVlf NCwKICBfTkxfV0FCREFZXzUsCiAgX05MX1dBQkRBWV82LAogIF9OTF9XQUJEQVlfNywKCgogIF9O TF9XREFZXzEsCiAgX05MX1dEQVlfMiwKICBfTkxfV0RBWV8zLAogIF9OTF9XREFZXzQsCiAgX05M X1dEQVlfNSwKICBfTkxfV0RBWV82LAogIF9OTF9XREFZXzcsCgoKICBfTkxfV0FCTU9OXzEsCiAg X05MX1dBQk1PTl8yLAogIF9OTF9XQUJNT05fMywKICBfTkxfV0FCTU9OXzQsCiAgX05MX1dBQk1P Tl81LAogIF9OTF9XQUJNT05fNiwKICBfTkxfV0FCTU9OXzcsCiAgX05MX1dBQk1PTl84LAogIF9O TF9XQUJNT05fOSwKICBfTkxfV0FCTU9OXzEwLAogIF9OTF9XQUJNT05fMTEsCiAgX05MX1dBQk1P Tl8xMiwKCgogIF9OTF9XTU9OXzEsCiAgX05MX1dNT05fMiwKICBfTkxfV01PTl8zLAogIF9OTF9X TU9OXzQsCiAgX05MX1dNT05fNSwKICBfTkxfV01PTl82LAogIF9OTF9XTU9OXzcsCiAgX05MX1dN T05fOCwKICBfTkxfV01PTl85LAogIF9OTF9XTU9OXzEwLAogIF9OTF9XTU9OXzExLAogIF9OTF9X TU9OXzEyLAoKICBfTkxfV0FNX1NUUiwKICBfTkxfV1BNX1NUUiwKCiAgX05MX1dEX1RfRk1ULAog IF9OTF9XRF9GTVQsCiAgX05MX1dUX0ZNVCwKICBfTkxfV1RfRk1UX0FNUE0sCgogIF9OTF9XRVJB X1lFQVIsCiAgX05MX1dFUkFfRF9GTVQsCiAgX05MX1dBTFRfRElHSVRTLAogIF9OTF9XRVJBX0Rf VF9GTVQsCiAgX05MX1dFUkFfVF9GTVQsCgogIF9OTF9USU1FX1dFRUtfTkRBWVMsCiAgX05MX1RJ TUVfV0VFS18xU1REQVksCiAgX05MX1RJTUVfV0VFS18xU1RXRUVLLAogIF9OTF9USU1FX0ZJUlNU X1dFRUtEQVksCiAgX05MX1RJTUVfRklSU1RfV09SS0RBWSwKICBfTkxfVElNRV9DQUxfRElSRUNU SU9OLAogIF9OTF9USU1FX1RJTUVaT05FLAoKICBfREFURV9GTVQsCgogIF9OTF9XX0RBVEVfRk1U LAoKICBfTkxfVElNRV9DT0RFU0VULAoKICBfTkxfTlVNX0xDX1RJTUUsCgoKCgogIF9OTF9DT0xM QVRFX05SVUxFUyA9ICgoKF9fTENfQ09MTEFURSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ09MTEFU RV9SVUxFU0VUUywKICBfTkxfQ09MTEFURV9UQUJMRU1CLAogIF9OTF9DT0xMQVRFX1dFSUdIVE1C LAogIF9OTF9DT0xMQVRFX0VYVFJBTUIsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RNQiwKICBfTkxf Q09MTEFURV9HQVAxLAogIF9OTF9DT0xMQVRFX0dBUDIsCiAgX05MX0NPTExBVEVfR0FQMywKICBf TkxfQ09MTEFURV9UQUJMRVdDLAogIF9OTF9DT0xMQVRFX1dFSUdIVFdDLAogIF9OTF9DT0xMQVRF X0VYVFJBV0MsCiAgX05MX0NPTExBVEVfSU5ESVJFQ1RXQywKICBfTkxfQ09MTEFURV9TWU1CX0hB U0hfU0laRU1CLAogIF9OTF9DT0xMQVRFX1NZTUJfVEFCTEVNQiwKICBfTkxfQ09MTEFURV9TWU1C X0VYVFJBTUIsCiAgX05MX0NPTExBVEVfQ09MTFNFUU1CLAogIF9OTF9DT0xMQVRFX0NPTExTRVFX QywKICBfTkxfQ09MTEFURV9DT0RFU0VULAogIF9OTF9OVU1fTENfQ09MTEFURSwKCgoKCiAgX05M X0NUWVBFX0NMQVNTID0gKCgoX19MQ19DVFlQRSkgPDwgMTYpIHwgKDApKSwKICBfTkxfQ1RZUEVf VE9VUFBFUiwKICBfTkxfQ1RZUEVfR0FQMSwKICBfTkxfQ1RZUEVfVE9MT1dFUiwKICBfTkxfQ1RZ UEVfR0FQMiwKICBfTkxfQ1RZUEVfQ0xBU1MzMiwKICBfTkxfQ1RZUEVfR0FQMywKICBfTkxfQ1RZ UEVfR0FQNCwKICBfTkxfQ1RZUEVfR0FQNSwKICBfTkxfQ1RZUEVfR0FQNiwKICBfTkxfQ1RZUEVf Q0xBU1NfTkFNRVMsCiAgX05MX0NUWVBFX01BUF9OQU1FUywKICBfTkxfQ1RZUEVfV0lEVEgsCiAg X05MX0NUWVBFX01CX0NVUl9NQVgsCiAgX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKICBDT0RFU0VU ID0gX05MX0NUWVBFX0NPREVTRVRfTkFNRSwKCiAgX05MX0NUWVBFX1RPVVBQRVIzMiwKICBfTkxf Q1RZUEVfVE9MT1dFUjMyLAogIF9OTF9DVFlQRV9DTEFTU19PRkZTRVQsCiAgX05MX0NUWVBFX01B UF9PRkZTRVQsCiAgX05MX0NUWVBFX0lORElHSVRTX01CX0xFTiwKICBfTkxfQ1RZUEVfSU5ESUdJ VFMwX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzFfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTMl9N QiwKICBfTkxfQ1RZUEVfSU5ESUdJVFMzX01CLAogIF9OTF9DVFlQRV9JTkRJR0lUUzRfTUIsCiAg X05MX0NUWVBFX0lORElHSVRTNV9NQiwKICBfTkxfQ1RZUEVfSU5ESUdJVFM2X01CLAogIF9OTF9D VFlQRV9JTkRJR0lUUzdfTUIsCiAgX05MX0NUWVBFX0lORElHSVRTOF9NQiwKICBfTkxfQ1RZUEVf SU5ESUdJVFM5X01CLAogIF9OTF9DVFlQRV9JTkRJR0lUU19XQ19MRU4sCiAgX05MX0NUWVBFX0lO RElHSVRTMF9XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFMxX1dDLAogIF9OTF9DVFlQRV9JTkRJR0lU UzJfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTM19XQywKICBfTkxfQ1RZUEVfSU5ESUdJVFM0X1dD LAogIF9OTF9DVFlQRV9JTkRJR0lUUzVfV0MsCiAgX05MX0NUWVBFX0lORElHSVRTNl9XQywKICBf TkxfQ1RZUEVfSU5ESUdJVFM3X1dDLAogIF9OTF9DVFlQRV9JTkRJR0lUUzhfV0MsCiAgX05MX0NU WVBFX0lORElHSVRTOV9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQwX01CLAogIF9OTF9DVFlQRV9P VVRESUdJVDFfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUMl9NQiwKICBfTkxfQ1RZUEVfT1VURElH SVQzX01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDRfTUIsCiAgX05MX0NUWVBFX09VVERJR0lUNV9N QiwKICBfTkxfQ1RZUEVfT1VURElHSVQ2X01CLAogIF9OTF9DVFlQRV9PVVRESUdJVDdfTUIsCiAg X05MX0NUWVBFX09VVERJR0lUOF9NQiwKICBfTkxfQ1RZUEVfT1VURElHSVQ5X01CLAogIF9OTF9D VFlQRV9PVVRESUdJVDBfV0MsCiAgX05MX0NUWVBFX09VVERJR0lUMV9XQywKICBfTkxfQ1RZUEVf T1VURElHSVQyX1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDNfV0MsCiAgX05MX0NUWVBFX09VVERJ R0lUNF9XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ1X1dDLAogIF9OTF9DVFlQRV9PVVRESUdJVDZf V0MsCiAgX05MX0NUWVBFX09VVERJR0lUN19XQywKICBfTkxfQ1RZUEVfT1VURElHSVQ4X1dDLAog IF9OTF9DVFlQRV9PVVRESUdJVDlfV0MsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RBQl9TSVpFLAog IF9OTF9DVFlQRV9UUkFOU0xJVF9GUk9NX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfRlJPTV9U QkwsCiAgX05MX0NUWVBFX1RSQU5TTElUX1RPX0lEWCwKICBfTkxfQ1RZUEVfVFJBTlNMSVRfVE9f VEJMLAogIF9OTF9DVFlQRV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkdfTEVOLAogIF9OTF9DVFlQ RV9UUkFOU0xJVF9ERUZBVUxUX01JU1NJTkcsCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRV9M RU4sCiAgX05MX0NUWVBFX1RSQU5TTElUX0lHTk9SRSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEs CiAgX05MX0NUWVBFX0VYVFJBX01BUF8yLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMywKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzQsCiAgX05MX0NUWVBFX0VYVFJBX01BUF81LAogIF9OTF9DVFlQRV9F WFRSQV9NQVBfNiwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzcsCiAgX05MX0NUWVBFX0VYVFJBX01B UF84LAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfOSwKICBfTkxfQ1RZUEVfRVhUUkFfTUFQXzEwLAog IF9OTF9DVFlQRV9FWFRSQV9NQVBfMTEsCiAgX05MX0NUWVBFX0VYVFJBX01BUF8xMiwKICBfTkxf Q1RZUEVfRVhUUkFfTUFQXzEzLAogIF9OTF9DVFlQRV9FWFRSQV9NQVBfMTQsCiAgX05MX05VTV9M Q19DVFlQRSwKCgoKCiAgX19JTlRfQ1VSUl9TWU1CT0wgPSAoKChfX0xDX01PTkVUQVJZKSA8PCAx NikgfCAoMCkpLAoKCgogIF9fQ1VSUkVOQ1lfU1lNQk9MLAoKCgogIF9fTU9OX0RFQ0lNQUxfUE9J TlQsCgoKCiAgX19NT05fVEhPVVNBTkRTX1NFUCwKCgoKICBfX01PTl9HUk9VUElORywKCgoKICBf X1BPU0lUSVZFX1NJR04sCgoKCiAgX19ORUdBVElWRV9TSUdOLAoKCgogIF9fSU5UX0ZSQUNfRElH SVRTLAoKCgogIF9fRlJBQ19ESUdJVFMsCgoKCiAgX19QX0NTX1BSRUNFREVTLAoKCgogIF9fUF9T RVBfQllfU1BBQ0UsCgoKCiAgX19OX0NTX1BSRUNFREVTLAoKCgogIF9fTl9TRVBfQllfU1BBQ0Us CgoKCiAgX19QX1NJR05fUE9TTiwKCgoKICBfX05fU0lHTl9QT1NOLAoKCgogIF9OTF9NT05FVEFS WV9DUk5DWVNUUiwKCiAgX19JTlRfUF9DU19QUkVDRURFUywKCgoKICBfX0lOVF9QX1NFUF9CWV9T UEFDRSwKCgoKICBfX0lOVF9OX0NTX1BSRUNFREVTLAoKCgogIF9fSU5UX05fU0VQX0JZX1NQQUNF LAoKCgogIF9fSU5UX1BfU0lHTl9QT1NOLAoKCgogIF9fSU5UX05fU0lHTl9QT1NOLAoKCgogIF9O TF9NT05FVEFSWV9EVU9fSU5UX0NVUlJfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fQ1VSUkVO Q1lfU1lNQk9MLAogIF9OTF9NT05FVEFSWV9EVU9fSU5UX0ZSQUNfRElHSVRTLAogIF9OTF9NT05F VEFSWV9EVU9fRlJBQ19ESUdJVFMsCiAgX05MX01PTkVUQVJZX0RVT19QX0NTX1BSRUNFREVTLAog IF9OTF9NT05FVEFSWV9EVU9fUF9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVUQVJZX0RVT19OX0NT X1BSRUNFREVTLAogIF9OTF9NT05FVEFSWV9EVU9fTl9TRVBfQllfU1BBQ0UsCiAgX05MX01PTkVU QVJZX0RVT19JTlRfUF9DU19QUkVDRURFUywKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9QX1NFUF9C WV9TUEFDRSwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX0NTX1BSRUNFREVTLAogIF9OTF9NT05F VEFSWV9EVU9fSU5UX05fU0VQX0JZX1NQQUNFLAogIF9OTF9NT05FVEFSWV9EVU9fUF9TSUdOX1BP U04sCiAgX05MX01PTkVUQVJZX0RVT19OX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lO VF9QX1NJR05fUE9TTiwKICBfTkxfTU9ORVRBUllfRFVPX0lOVF9OX1NJR05fUE9TTiwKICBfTkxf TU9ORVRBUllfVU5PX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX1VOT19WQUxJRF9UTywKICBf TkxfTU9ORVRBUllfRFVPX1ZBTElEX0ZST00sCiAgX05MX01PTkVUQVJZX0RVT19WQUxJRF9UTywK ICBfTkxfTU9ORVRBUllfQ09OVkVSU0lPTl9SQVRFLAogIF9OTF9NT05FVEFSWV9ERUNJTUFMX1BP SU5UX1dDLAogIF9OTF9NT05FVEFSWV9USE9VU0FORFNfU0VQX1dDLAogIF9OTF9NT05FVEFSWV9D T0RFU0VULAogIF9OTF9OVU1fTENfTU9ORVRBUlksCgoKCiAgX19ERUNJTUFMX1BPSU5UID0gKCgo X19MQ19OVU1FUklDKSA8PCAxNikgfCAoMCkpLAoKCgogIFJBRElYQ0hBUiA9IF9fREVDSU1BTF9Q T0lOVCwKCiAgX19USE9VU0FORFNfU0VQLAoKCgogIFRIT1VTRVAgPSBfX1RIT1VTQU5EU19TRVAs CgogIF9fR1JPVVBJTkcsCgoKCiAgX05MX05VTUVSSUNfREVDSU1BTF9QT0lOVF9XQywKICBfTkxf TlVNRVJJQ19USE9VU0FORFNfU0VQX1dDLAogIF9OTF9OVU1FUklDX0NPREVTRVQsCiAgX05MX05V TV9MQ19OVU1FUklDLAoKICBfX1lFU0VYUFIgPSAoKChfX0xDX01FU1NBR0VTKSA8PCAxNikgfCAo MCkpLAoKICBfX05PRVhQUiwKCiAgX19ZRVNTVFIsCgoKCiAgX19OT1NUUiwKCgoKICBfTkxfTUVT U0FHRVNfQ09ERVNFVCwKICBfTkxfTlVNX0xDX01FU1NBR0VTLAoKICBfTkxfUEFQRVJfSEVJR0hU ID0gKCgoX19MQ19QQVBFUikgPDwgMTYpIHwgKDApKSwKICBfTkxfUEFQRVJfV0lEVEgsCiAgX05M X1BBUEVSX0NPREVTRVQsCiAgX05MX05VTV9MQ19QQVBFUiwKCiAgX05MX05BTUVfTkFNRV9GTVQg PSAoKChfX0xDX05BTUUpIDw8IDE2KSB8ICgwKSksCiAgX05MX05BTUVfTkFNRV9HRU4sCiAgX05M X05BTUVfTkFNRV9NUiwKICBfTkxfTkFNRV9OQU1FX01SUywKICBfTkxfTkFNRV9OQU1FX01JU1Ms CiAgX05MX05BTUVfTkFNRV9NUywKICBfTkxfTkFNRV9DT0RFU0VULAogIF9OTF9OVU1fTENfTkFN RSwKCiAgX05MX0FERFJFU1NfUE9TVEFMX0ZNVCA9ICgoKF9fTENfQUREUkVTUykgPDwgMTYpIHwg KDApKSwKICBfTkxfQUREUkVTU19DT1VOVFJZX05BTUUsCiAgX05MX0FERFJFU1NfQ09VTlRSWV9Q T1NULAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIyLAogIF9OTF9BRERSRVNTX0NPVU5UUllfQUIz LAogIF9OTF9BRERSRVNTX0NPVU5UUllfQ0FSLAogIF9OTF9BRERSRVNTX0NPVU5UUllfTlVNLAog IF9OTF9BRERSRVNTX0NPVU5UUllfSVNCTiwKICBfTkxfQUREUkVTU19MQU5HX05BTUUsCiAgX05M X0FERFJFU1NfTEFOR19BQiwKICBfTkxfQUREUkVTU19MQU5HX1RFUk0sCiAgX05MX0FERFJFU1Nf TEFOR19MSUIsCiAgX05MX0FERFJFU1NfQ09ERVNFVCwKICBfTkxfTlVNX0xDX0FERFJFU1MsCgog IF9OTF9URUxFUEhPTkVfVEVMX0lOVF9GTVQgPSAoKChfX0xDX1RFTEVQSE9ORSkgPDwgMTYpIHwg KDApKSwKICBfTkxfVEVMRVBIT05FX1RFTF9ET01fRk1ULAogIF9OTF9URUxFUEhPTkVfSU5UX1NF TEVDVCwKICBfTkxfVEVMRVBIT05FX0lOVF9QUkVGSVgsCiAgX05MX1RFTEVQSE9ORV9DT0RFU0VU LAogIF9OTF9OVU1fTENfVEVMRVBIT05FLAoKICBfTkxfTUVBU1VSRU1FTlRfTUVBU1VSRU1FTlQg PSAoKChfX0xDX01FQVNVUkVNRU5UKSA8PCAxNikgfCAoMCkpLAogIF9OTF9NRUFTVVJFTUVOVF9D T0RFU0VULAogIF9OTF9OVU1fTENfTUVBU1VSRU1FTlQsCgogIF9OTF9JREVOVElGSUNBVElPTl9U SVRMRSA9ICgoKF9fTENfSURFTlRJRklDQVRJT04pIDw8IDE2KSB8ICgwKSksCiAgX05MX0lERU5U SUZJQ0FUSU9OX1NPVVJDRSwKICBfTkxfSURFTlRJRklDQVRJT05fQUREUkVTUywKICBfTkxfSURF TlRJRklDQVRJT05fQ09OVEFDVCwKICBfTkxfSURFTlRJRklDQVRJT05fRU1BSUwsCiAgX05MX0lE RU5USUZJQ0FUSU9OX1RFTCwKICBfTkxfSURFTlRJRklDQVRJT05fRkFYLAogIF9OTF9JREVOVElG SUNBVElPTl9MQU5HVUFHRSwKICBfTkxfSURFTlRJRklDQVRJT05fVEVSUklUT1JZLAogIF9OTF9J REVOVElGSUNBVElPTl9BVURJRU5DRSwKICBfTkxfSURFTlRJRklDQVRJT05fQVBQTElDQVRJT04s CiAgX05MX0lERU5USUZJQ0FUSU9OX0FCQlJFVklBVElPTiwKICBfTkxfSURFTlRJRklDQVRJT05f UkVWSVNJT04sCiAgX05MX0lERU5USUZJQ0FUSU9OX0RBVEUsCiAgX05MX0lERU5USUZJQ0FUSU9O X0NBVEVHT1JZLAogIF9OTF9JREVOVElGSUNBVElPTl9DT0RFU0VULAogIF9OTF9OVU1fTENfSURF TlRJRklDQVRJT04sCgoKICBfTkxfTlVNCn07CiMgNTc1ICIvdXNyL2luY2x1ZGUvbGFuZ2luZm8u aCIgMwpleHRlcm4gY2hhciAqbmxfbGFuZ2luZm8gKG5sX2l0ZW0gX19pdGVtKSA7CiMgNTg2ICIv dXNyL2luY2x1ZGUvbGFuZ2luZm8uaCIgMwpleHRlcm4gY2hhciAqX19ubF9sYW5naW5mb19sIChu bF9pdGVtIF9faXRlbSwgX19sb2NhbGVfdCBsKTsKCgp9CiMgMzggIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwojIDEgIi91 c3IvaW5jbHVkZS9pY29udi5oIiAxIDMKIyAyNCAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDMKIyAx ICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMtbGludXgtZ251LzMuMi9pbmNsdWRlL3N0 ZGRlZi5oIiAxIDMKIyAyNSAiL3Vzci9pbmNsdWRlL2ljb252LmgiIDIgMwoKCmV4dGVybiAiQyIg ewoKCnR5cGVkZWYgdm9pZCAqaWNvbnZfdDsKCgoKCmV4dGVybiBpY29udl90IGljb252X29wZW4g KGNvbnN0IGNoYXIgKl9fdG9jb2RlLCBjb25zdCBjaGFyICpfX2Zyb21jb2RlKQogICAgIDsKCgoK CmV4dGVybiBzaXplX3QgaWNvbnYgKGljb252X3QgX19jZCwgY2hhciAqKiBfX2luYnVmLAogICAg ICAgICAgICAgICAgICAgICBzaXplX3QgKiBfX2luYnl0ZXNsZWZ0LAogICAgICAgICAgICAgICAg ICAgICBjaGFyICoqIF9fb3V0YnVmLAogICAgICAgICAgICAgICAgICAgICBzaXplX3QgKiBfX291 dGJ5dGVzbGVmdCk7CgoKZXh0ZXJuIGludCBpY29udl9jbG9zZSAoaWNvbnZfdCBfX2NkKSA7Cgp9 CiMgMzkgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMv YysrbG9jYWxlLmgiIDIgMwojIDEgIi91c3IvaW5jbHVkZS9saWJpbnRsLmgiIDEgMwojIDMwICIv dXNyL2luY2x1ZGUvbGliaW50bC5oIiAzCmV4dGVybiAiQyIgewoKCgoKZXh0ZXJuIGNoYXIgKmdl dHRleHQgKGNvbnN0IGNoYXIgKl9fbXNnaWQpIDsKCgoKZXh0ZXJuIGNoYXIgKmRnZXR0ZXh0IChj b25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQpCiAgICAgOwpleHRl cm4gY2hhciAqX19kZ2V0dGV4dCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLCBjb25zdCBjaGFy ICpfX21zZ2lkKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmRjZ2V0dGV4dCAoY29uc3QgY2hhciAq X19kb21haW5uYW1lLAogICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21zZ2lk LCBpbnQgX19jYXRlZ29yeSkgOwpleHRlcm4gY2hhciAqX19kY2dldHRleHQgKGNvbnN0IGNoYXIg Kl9fZG9tYWlubmFtZSwKICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21z Z2lkLCBpbnQgX19jYXRlZ29yeSkKICAgICA7CgoKCgpleHRlcm4gY2hhciAqbmdldHRleHQgKGNv bnN0IGNoYXIgKl9fbXNnaWQxLCBjb25zdCBjaGFyICpfX21zZ2lkMiwKICAgICAgICAgICAgICAg ICAgICAgICB1bnNpZ25lZCBsb25nIGludCBfX24pCiAgICAgOwoKCgpleHRlcm4gY2hhciAqZG5n ZXR0ZXh0IChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsIGNvbnN0IGNoYXIgKl9fbXNnaWQxLAog ICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9u ZyBpbnQgX19uKQogICAgIDsKCgoKZXh0ZXJuIGNoYXIgKmRjbmdldHRleHQgKGNvbnN0IGNoYXIg Kl9fZG9tYWlubmFtZSwgY29uc3QgY2hhciAqX19tc2dpZDEsCiAgICAgICAgICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyICpfX21zZ2lkMiwgdW5zaWduZWQgbG9uZyBpbnQgX19uLAogICAgICAg ICAgICAgICAgICAgICAgICAgaW50IF9fY2F0ZWdvcnkpCiAgICAgOwoKCgoKCmV4dGVybiBjaGFy ICp0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUpIDsKCgoKZXh0ZXJuIGNoYXIg KmJpbmR0ZXh0ZG9tYWluIChjb25zdCBjaGFyICpfX2RvbWFpbm5hbWUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgY29uc3QgY2hhciAqX19kaXJuYW1lKSA7CgoKCmV4dGVybiBjaGFyICpi aW5kX3RleHRkb21haW5fY29kZXNldCAoY29uc3QgY2hhciAqX19kb21haW5uYW1lLAogICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIgKl9fY29kZXNldCkgOwoj IDExNSAiL3Vzci9pbmNsdWRlL2xpYmludGwuaCIgMwp9CiMgNDAgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvYysrbG9jYWxlLmgiIDIgMwoKCgpuYW1l c3BhY2Ugc3RkCnsKICB0eXBlZGVmIF9fbG9jYWxlX3QgX19jX2xvY2FsZTsKfQojIDQ3ICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9s b2NhbC9pbmNsdWRlL2MrKy8zLjIvY2N0eXBlIiAxIDMKIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvY2N0eXBlIiAzCgoKIyAxICIvdXNyL2luY2x1ZGUvY3R5cGUuaCIgMSAzCiMgMjkg Ii91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4dGVybiAiQyIgewojIDQ3ICIvdXNyL2luY2x1ZGUv Y3R5cGUuaCIgMwplbnVtCnsKICBfSVN1cHBlciA9ICgoMCkgPCA4ID8gKCgxIDw8ICgwKSkgPDwg OCkgOiAoKDEgPDwgKDApKSA+PiA4KSksCiAgX0lTbG93ZXIgPSAoKDEpIDwgOCA/ICgoMSA8PCAo MSkpIDw8IDgpIDogKCgxIDw8ICgxKSkgPj4gOCkpLAogIF9JU2FscGhhID0gKCgyKSA8IDggPyAo KDEgPDwgKDIpKSA8PCA4KSA6ICgoMSA8PCAoMikpID4+IDgpKSwKICBfSVNkaWdpdCA9ICgoMykg PCA4ID8gKCgxIDw8ICgzKSkgPDwgOCkgOiAoKDEgPDwgKDMpKSA+PiA4KSksCiAgX0lTeGRpZ2l0 ID0gKCg0KSA8IDggPyAoKDEgPDwgKDQpKSA8PCA4KSA6ICgoMSA8PCAoNCkpID4+IDgpKSwKICBf SVNzcGFjZSA9ICgoNSkgPCA4ID8gKCgxIDw8ICg1KSkgPDwgOCkgOiAoKDEgPDwgKDUpKSA+PiA4 KSksCiAgX0lTcHJpbnQgPSAoKDYpIDwgOCA/ICgoMSA8PCAoNikpIDw8IDgpIDogKCgxIDw8ICg2 KSkgPj4gOCkpLAogIF9JU2dyYXBoID0gKCg3KSA8IDggPyAoKDEgPDwgKDcpKSA8PCA4KSA6ICgo MSA8PCAoNykpID4+IDgpKSwKICBfSVNibGFuayA9ICgoOCkgPCA4ID8gKCgxIDw8ICg4KSkgPDwg OCkgOiAoKDEgPDwgKDgpKSA+PiA4KSksCiAgX0lTY250cmwgPSAoKDkpIDwgOCA/ICgoMSA8PCAo OSkpIDw8IDgpIDogKCgxIDw8ICg5KSkgPj4gOCkpLAogIF9JU3B1bmN0ID0gKCgxMCkgPCA4ID8g KCgxIDw8ICgxMCkpIDw8IDgpIDogKCgxIDw8ICgxMCkpID4+IDgpKSwKICBfSVNhbG51bSA9ICgo MTEpIDwgOCA/ICgoMSA8PCAoMTEpKSA8PCA4KSA6ICgoMSA8PCAoMTEpKSA+PiA4KSkKfTsKIyA3 NSAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKZXh0ZXJuIGNvbnN0IHVuc2lnbmVkIHNob3J0IGlu dCAqX19jdHlwZV9iOwpleHRlcm4gY29uc3QgX19pbnQzMl90ICpfX2N0eXBlX3RvbG93ZXI7CmV4 dGVybiBjb25zdCBfX2ludDMyX3QgKl9fY3R5cGVfdG91cHBlcjsKIyA5MSAiL3Vzci9pbmNsdWRl L2N0eXBlLmgiIDMKZXh0ZXJuIGludCBpc2FsbnVtIChpbnQpIDsKZXh0ZXJuIGludCBpc2FscGhh IChpbnQpIDsKZXh0ZXJuIGludCBpc2NudHJsIChpbnQpIDsKZXh0ZXJuIGludCBpc2RpZ2l0IChp bnQpIDsKZXh0ZXJuIGludCBpc2xvd2VyIChpbnQpIDsKZXh0ZXJuIGludCBpc2dyYXBoIChpbnQp IDsKZXh0ZXJuIGludCBpc3ByaW50IChpbnQpIDsKZXh0ZXJuIGludCBpc3B1bmN0IChpbnQpIDsK ZXh0ZXJuIGludCBpc3NwYWNlIChpbnQpIDsKZXh0ZXJuIGludCBpc3VwcGVyIChpbnQpIDsKZXh0 ZXJuIGludCBpc3hkaWdpdCAoaW50KSA7CgoKZXh0ZXJuIGludCBpc2JsYW5rIChpbnQpIDsKCgoK CmV4dGVybiBpbnQgdG9sb3dlciAoaW50IF9fYykgOwoKCmV4dGVybiBpbnQgdG91cHBlciAoaW50 IF9fYykgOwoKCgoKCgpleHRlcm4gaW50IGlzYXNjaWkgKGludCBfX2MpIDsKCgoKZXh0ZXJuIGlu dCB0b2FzY2lpIChpbnQgX19jKSA7CgoKCmV4dGVybiBpbnQgX3RvdXBwZXIgKGludCkgOwpleHRl cm4gaW50IF90b2xvd2VyIChpbnQpIDsKIyAyMjMgIi91c3IvaW5jbHVkZS9jdHlwZS5oIiAzCmV4 dGVybiBpbnQgX19pc2FsbnVtX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNh bHBoYV9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lzY250cmxfbCAoaW50LCBf X2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc2RpZ2l0X2wgKGludCwgX19sb2NhbGVfdCkgOwpl eHRlcm4gaW50IF9faXNsb3dlcl9sIChpbnQsIF9fbG9jYWxlX3QpIDsKZXh0ZXJuIGludCBfX2lz Z3JhcGhfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19pc3ByaW50X2wgKGludCwg X19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXNwdW5jdF9sIChpbnQsIF9fbG9jYWxlX3QpIDsK ZXh0ZXJuIGludCBfX2lzc3BhY2VfbCAoaW50LCBfX2xvY2FsZV90KSA7CmV4dGVybiBpbnQgX19p c3VwcGVyX2wgKGludCwgX19sb2NhbGVfdCkgOwpleHRlcm4gaW50IF9faXN4ZGlnaXRfbCAoaW50 LCBfX2xvY2FsZV90KSA7CgpleHRlcm4gaW50IF9faXNibGFua19sIChpbnQsIF9fbG9jYWxlX3Qp IDsKCgoKZXh0ZXJuIGludCBfX3RvbG93ZXJfbCAoaW50IF9fYywgX19sb2NhbGVfdCBfX2wpIDsK CgpleHRlcm4gaW50IF9fdG91cHBlcl9sIChpbnQgX19jLCBfX2xvY2FsZV90IF9fbCkgOwojIDI3 NiAiL3Vzci9pbmNsdWRlL2N0eXBlLmgiIDMKfQojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9jY3R5cGUiIDIgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jY3R5cGUi IDMKbmFtZXNwYWNlIHN0ZAp7CiAgdXNpbmcgOjppc2FsbnVtOwogIHVzaW5nIDo6aXNhbHBoYTsK ICB1c2luZyA6OmlzY250cmw7CiAgdXNpbmcgOjppc2RpZ2l0OwogIHVzaW5nIDo6aXNncmFwaDsK ICB1c2luZyA6OmlzbG93ZXI7CiAgdXNpbmcgOjppc3ByaW50OwogIHVzaW5nIDo6aXNwdW5jdDsK ICB1c2luZyA6Omlzc3BhY2U7CiAgdXNpbmcgOjppc3VwcGVyOwogIHVzaW5nIDo6aXN4ZGlnaXQ7 CiAgdXNpbmcgOjp0b2xvd2VyOwogIHVzaW5nIDo6dG91cHBlcjsKfQojIDQ5ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZWZ3ZC5oIiAyIDMKCiMgMSAiL3Vzci9sb2NhbC9p bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAxIDMKIyAzNCAiL3Vzci9sb2NhbC9p bmNsdWRlL2MrKy8zLjIvYml0cy9mdW5jdGV4Y2VwdC5oIiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvZXhjZXB0aW9uX2RlZmluZXMuaCIgMSAzCiMgMzUgIi91c3IvbG9jYWwvaW5j bHVkZS9jKysvMy4yL2JpdHMvZnVuY3RleGNlcHQuaCIgMiAzCgpuYW1lc3BhY2Ugc3RkCnsKCiAg dm9pZAogIF9fdGhyb3dfYmFkX2V4Y2VwdGlvbih2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2Jh ZF9hbGxvYyh2b2lkKTsKCgogIHZvaWQKICBfX3Rocm93X2JhZF9jYXN0KHZvaWQpOwoKICB2b2lk CiAgX190aHJvd19iYWRfdHlwZWlkKHZvaWQpOwoKCiAgdm9pZAogIF9fdGhyb3dfbG9naWNfZXJy b3IoY29uc3QgY2hhciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfZG9tYWluX2Vycm9yKGNvbnN0 IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X2ludmFsaWRfYXJndW1lbnQoY29uc3QgY2hh ciogX19zKTsKCiAgdm9pZAogIF9fdGhyb3dfbGVuZ3RoX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7 CgogIHZvaWQKICBfX3Rocm93X291dF9vZl9yYW5nZShjb25zdCBjaGFyKiBfX3MpOwoKICB2b2lk CiAgX190aHJvd19ydW50aW1lX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Ro cm93X3JhbmdlX2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X292ZXJm bG93X2Vycm9yKGNvbnN0IGNoYXIqIF9fcyk7CgogIHZvaWQKICBfX3Rocm93X3VuZGVyZmxvd19l cnJvcihjb25zdCBjaGFyKiBfX3MpOwoKCiAgdm9pZAogIF9fdGhyb3dfaW9zX2ZhaWx1cmUoY29u c3QgY2hhciogX19zKTsKfQojIDUxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xv Y2FsZWZ3ZC5oIiAyIDMKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgY2xhc3MgbG9jYWxlOwoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJU LCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5l IGJvb2wKICAgIGlzcHJpbnQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzY250cmwoX0NoYXJULCBjb25zdCBs b2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAg IGlzdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzbG93ZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzYWxwaGEo X0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg aW5saW5lIGJvb2wKICAgIGlzZGlnaXQoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzcHVuY3QoX0NoYXJULCBj b25zdCBsb2NhbGUmKTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJv b2wKICAgIGlzeGRpZ2l0KF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2FsbnVtKF9DaGFyVCwgY29uc3QgbG9j YWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c2dyYXBoKF9DaGFyVCwgY29uc3QgbG9jYWxlJik7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvdXBwZXIoX0NoYXJULCBjb25zdCBsb2NhbGUmKTsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG9sb3dl cihfQ2hhclQsIGNvbnN0IGxvY2FsZSYpOwoKCgogIGNsYXNzIGN0eXBlX2Jhc2U7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGU7CiAgdGVtcGxhdGU8PiBjbGFzcyBj dHlwZTxjaGFyPjsKCiAgdGVtcGxhdGU8PiBjbGFzcyBjdHlwZTx3Y2hhcl90PjsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgY3R5cGVfYnluYW1lOwoKCiAgY2xhc3MgY29k ZWN2dF9iYXNlOwogIGNsYXNzIF9fZW5jX3RyYWl0czsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50 ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2Rl Y3Z0OwogIHRlbXBsYXRlPD4gY2xhc3MgY29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+OwoK ICB0ZW1wbGF0ZTw+IGNsYXNzIGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5ULCB0eXBlbmFtZSBf U3RhdGVUPgogICAgY2xhc3MgY29kZWN2dF9ieW5hbWU7CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXIgPSBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVD4gPgog ICAgY2xhc3MgbnVtX2dldDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9P dXRJdGVyID0gb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG51bV9wdXQ7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPiBjbGFzcyBudW1wdW5jdDsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQ+IGNsYXNzIG51bXB1bmN0X2J5bmFtZTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGNsYXNzIGNvbGxhdGU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU PiBjbGFzcwogICAgY29sbGF0ZV9ieW5hbWU7CgoKICBjbGFzcyB0aW1lX2Jhc2U7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRv cjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfZ2V0OwogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX0luSXRlciA9IGlzdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBj bGFzcyB0aW1lX2dldF9ieW5hbWU7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfT3V0SXRlciA9IG9zdHJlYW1idWZfaXRlcmF0b3I8X0NoYXJUPiA+CiAgICBjbGFzcyB0aW1l X3B1dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0 cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIHRpbWVfcHV0X2J5bmFtZTsKCgog IGNsYXNzIG1vbmV5X2Jhc2U7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf SW5JdGVyID0gaXN0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X2dl dDsKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyID0gb3N0cmVh bWJ1Zl9pdGVyYXRvcjxfQ2hhclQ+ID4KICAgIGNsYXNzIG1vbmV5X3B1dDsKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIGJvb2wgX0ludGwgPSBmYWxzZT4KICAgIGNsYXNzIG1vbmV5cHVuY3Q7 CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsID0gZmFsc2U+CiAgICBjbGFz cyBtb25leXB1bmN0X2J5bmFtZTsKCgogIGNsYXNzIG1lc3NhZ2VzX2Jhc2U7CiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXM7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgY2xhc3MgbWVzc2FnZXNfYnluYW1lOwoKCiAgY2xhc3MgbG9jYWxlCiAgewog IHB1YmxpYzoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIGludCBjYXRlZ29yeTsKCgogICAgY2xhc3Mg ZmFjZXQ7CiAgICBjbGFzcyBpZDsKICAgIGNsYXNzIF9JbXBsOwoKICAgIGZyaWVuZCBjbGFzcyBm YWNldDsKICAgIGZyaWVuZCBjbGFzcyBfSW1wbDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFj ZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25zdCBsb2Nh bGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAg ICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKCgogICAgc3RhdGljIGNvbnN0 IGNhdGVnb3J5IG5vbmUgPSAwOwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGN0eXBlID0gMUwg PDwgMDsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBudW1lcmljID0gMUwgPDwgMTsKICAgIHN0 YXRpYyBjb25zdCBjYXRlZ29yeSBjb2xsYXRlID0gMUwgPDwgMjsKICAgIHN0YXRpYyBjb25zdCBj YXRlZ29yeSB0aW1lID0gMUwgPDwgMzsKICAgIHN0YXRpYyBjb25zdCBjYXRlZ29yeSBtb25ldGFy eSA9IDFMIDw8IDQ7CiAgICBzdGF0aWMgY29uc3QgY2F0ZWdvcnkgbWVzc2FnZXMgPSAxTCA8PCA1 OwogICAgc3RhdGljIGNvbnN0IGNhdGVnb3J5IGFsbCA9IChjb2xsYXRlIHwgY3R5cGUgfCBtb25l dGFyeSB8CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1lcmlj IHwgdGltZSB8IG1lc3NhZ2VzKTsKCgogICAgbG9jYWxlKCkgdGhyb3coKTsKCiAgICBsb2NhbGUo Y29uc3QgbG9jYWxlJiBfX290aGVyKSB0aHJvdygpOwoKICAgIGV4cGxpY2l0CiAgICBsb2NhbGUo Y29uc3QgY2hhciogX19zKTsKCiAgICBsb2NhbGUoY29uc3QgbG9jYWxlJiBfX2Jhc2UsIGNvbnN0 IGNoYXIqIF9fcywgY2F0ZWdvcnkgX19jYXQpOwoKICAgIGxvY2FsZShjb25zdCBsb2NhbGUmIF9f YmFzZSwgY29uc3QgbG9jYWxlJiBfX2FkZCwgY2F0ZWdvcnkgX19jYXQpOwoKICAgIHRlbXBsYXRl PHR5cGVuYW1lIF9GYWNldD4KICAgICAgbG9jYWxlKGNvbnN0IGxvY2FsZSYgX19vdGhlciwgX0Zh Y2V0KiBfX2YpOwoKICAgIH5sb2NhbGUoKSB0aHJvdygpOwoKICAgIGNvbnN0IGxvY2FsZSYKICAg IG9wZXJhdG9yPShjb25zdCBsb2NhbGUmIF9fb3RoZXIpIHRocm93KCk7CgogICAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgICBsb2NhbGUKICAgICAgY29tYmluZShjb25zdCBsb2NhbGUm IF9fb3RoZXIpIGNvbnN0OwoKCiAgICBzdHJpbmcKICAgIG5hbWUoKSBjb25zdDsKCiAgICBib29s CiAgICBvcGVyYXRvcj09KGNvbnN0IGxvY2FsZSYgX19vdGhlcikgY29uc3QgdGhyb3cgKCk7Cgog ICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yIT0oY29uc3QgbG9jYWxlJiBfX290aGVyKSBjb25z dCB0aHJvdyAoKQogICAgeyByZXR1cm4gISh0aGlzLT5vcGVyYXRvcj09KF9fb3RoZXIpKTsgfQoK ICAgIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyLCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICAgIGJvb2wKICAgICAgb3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8X0No YXIsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczEsCiAgICAgICAgICAgICAgICAgY29uc3QgYmFzaWNf c3RyaW5nPF9DaGFyLCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MyKSBjb25zdDsKCgogICAgc3RhdGlj IGxvY2FsZQogICAgZ2xvYmFsKGNvbnN0IGxvY2FsZSYpOwoKICAgIHN0YXRpYyBjb25zdCBsb2Nh bGUmCiAgICBjbGFzc2ljKCk7CgogIHByaXZhdGU6CgogICAgX0ltcGwqIF9NX2ltcGw7CgoKICAg IHN0YXRpYyBfSW1wbCogX1NfY2xhc3NpYzsKCgogICAgc3RhdGljIF9JbXBsKiBfU19nbG9iYWw7 CgogICAgc3RhdGljIGNvbnN0IHNpemVfdCBfU19udW1fY2F0ZWdvcmllcyA9IDY7CgogICAgZXhw bGljaXQKICAgIGxvY2FsZShfSW1wbCopIHRocm93KCk7CgogICAgc3RhdGljIGlubGluZSB2b2lk CiAgICBfU19pbml0aWFsaXplKCkKICAgIHsKICAgICAgaWYgKCFfU19jbGFzc2ljKQogICAgICAg IGNsYXNzaWMoKTsKICAgIH0KCiAgICBzdGF0aWMgY2F0ZWdvcnkKICAgIF9TX25vcm1hbGl6ZV9j YXRlZ29yeShjYXRlZ29yeSk7CgogICAgdm9pZAogICAgX01fY29hbGVzY2UoY29uc3QgbG9jYWxl JiBfX2Jhc2UsIGNvbnN0IGxvY2FsZSYgX19hZGQsIGNhdGVnb3J5IF9fY2F0KTsKICB9OwoKCgog IGNsYXNzIGxvY2FsZTo6X0ltcGwKICB7CiAgcHVibGljOgoKICAgIGZyaWVuZCBjbGFzcyBsb2Nh bGU7CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOjpmYWNldDsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBjb25zdCBfRmFjZXQmCiAgICAgIHVzZV9mYWNldChjb25z dCBsb2NhbGUmKTsKCiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBi b29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2NhbGUmKSB0aHJvdygpOwoKICBwcml2YXRlOgoK ICAgIF9BdG9taWNfd29yZCBfTV9yZWZlcmVuY2VzOwogICAgZmFjZXQqKiBfTV9mYWNldHM7CiAg ICBzaXplX3QgX01fZmFjZXRzX3NpemU7CiAgICBjb25zdCBjaGFyKiBfTV9uYW1lc1tfU19udW1f Y2F0ZWdvcmllc107CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY3R5 cGVbXTsKICAgIHN0YXRpYyBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9udW1lcmljW107 CiAgICBzdGF0aWMgY29uc3QgbG9jYWxlOjppZCogY29uc3QgX1NfaWRfY29sbGF0ZVtdOwogICAg c3RhdGljIGNvbnN0IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX3RpbWVbXTsKICAgIHN0YXRpYyBj b25zdCBsb2NhbGU6OmlkKiBjb25zdCBfU19pZF9tb25ldGFyeVtdOwogICAgc3RhdGljIGNvbnN0 IGxvY2FsZTo6aWQqIGNvbnN0IF9TX2lkX21lc3NhZ2VzW107CiAgICBzdGF0aWMgY29uc3QgbG9j YWxlOjppZCogY29uc3QqIGNvbnN0IF9TX2ZhY2V0X2NhdGVnb3JpZXNbXTsKCiAgICBpbmxpbmUg dm9pZAogICAgX01fYWRkX3JlZmVyZW5jZSgpIHRocm93KCkKICAgIHsgX19hdG9taWNfYWRkKCZf TV9yZWZlcmVuY2VzLCAxKTsgfQoKICAgIGlubGluZSB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJl bmNlKCkgdGhyb3coKQogICAgewogICAgICBpZiAoX19leGNoYW5nZV9hbmRfYWRkKCZfTV9yZWZl cmVuY2VzLCAtMSkgPT0gMSkKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgeyBk ZWxldGUgdGhpczsgfQogICAgICAgICAgY2F0Y2goLi4uKQogICAgICAgICAgICB7IH0KICAgICAg ICB9CiAgICB9CgogICAgX0ltcGwoY29uc3QgX0ltcGwmLCBzaXplX3QpOwogICAgX0ltcGwoY29u c3QgY2hhciosIHNpemVfdCk7CiAgICBfSW1wbChmYWNldCoqLCBzaXplX3QsIGJvb2wpOwoKICAg fl9JbXBsKCkgdGhyb3coKTsKCiAgICBfSW1wbChjb25zdCBfSW1wbCYpOwoKICAgIHZvaWQKICAg IG9wZXJhdG9yPShjb25zdCBfSW1wbCYpOwoKICAgIGlubGluZSBib29sCiAgICBfTV9jaGVja19z YW1lX25hbWUoKQogICAgewogICAgICBib29sIF9fcmV0ID0gdHJ1ZTsKICAgICAgZm9yIChzaXpl X3QgaSA9IDA7IF9fcmV0ICYmIGkgPCBfU19udW1fY2F0ZWdvcmllcyAtIDE7ICsraSkKICAgICAg ICBfX3JldCAmPSAoc3RyY21wKF9NX25hbWVzW2ldLCBfTV9uYW1lc1tpICsgMV0pID09IDApOwog ICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogICAgdm9pZAogICAgX01fcmVwbGFjZV9jYXRlZ29y aWVzKGNvbnN0IF9JbXBsKiwgY2F0ZWdvcnkpOwoKICAgIHZvaWQKICAgIF9NX3JlcGxhY2VfY2F0 ZWdvcnkoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKiBjb25zdCopOwoKICAgIHZvaWQK ICAgIF9NX3JlcGxhY2VfZmFjZXQoY29uc3QgX0ltcGwqLCBjb25zdCBsb2NhbGU6OmlkKik7Cgog ICAgdm9pZAogICAgX01faW5zdGFsbF9mYWNldChjb25zdCBsb2NhbGU6OmlkKiwgZmFjZXQqKTsK CiAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICAgIGlubGluZSB2b2lkCiAgICAgIF9N X2luaXRfZmFjZXQoX0ZhY2V0KiBfX2ZhY2V0KQogICAgICB7IF9NX2luc3RhbGxfZmFjZXQoJl9G YWNldDo6aWQsIF9fZmFjZXQpOyB9CiAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0Pgog ICAgbG9jYWxlOjpsb2NhbGUoY29uc3QgbG9jYWxlJiBfX290aGVyLCBfRmFjZXQqIF9fZikKICAg IHsKICAgICAgX01faW1wbCA9IG5ldyBfSW1wbCgqX19vdGhlci5fTV9pbXBsLCAxKTsKICAgICAg X01faW1wbC0+X01faW5zdGFsbF9mYWNldCgmX0ZhY2V0OjppZCwgX19mKTsKICAgICAgZm9yIChz aXplX3QgX19pID0gMDsgX19pIDwgX1NfbnVtX2NhdGVnb3JpZXM7ICsrX19pKQogICAgICAgIF9N X2ltcGwtPl9NX25hbWVzW19faV0gPSAiKiI7CiAgICB9CgoKICBjbGFzcyBsb2NhbGU6OmZhY2V0 CiAgewogIHByaXZhdGU6CiAgICBmcmllbmQgY2xhc3MgbG9jYWxlOwogICAgZnJpZW5kIGNsYXNz IGxvY2FsZTo6X0ltcGw7CgogICAgX0F0b21pY193b3JkIF9NX3JlZmVyZW5jZXM7CgogIHByb3Rl Y3RlZDoKCgogICAgc3RhdGljIF9fY19sb2NhbGUgX1NfY19sb2NhbGU7CgogICAgZXhwbGljaXQK ICAgIGZhY2V0KHNpemVfdCBfX3JlZnMgPSAwKSB0aHJvdygpOwoKICAgIHZpcnR1YWwKICAgIH5m YWNldCgpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19jcmVhdGVfY19sb2NhbGUoX19jX2xvY2Fs ZSYgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsCiAgICAgICAgICAgICAgICAgICAgICAgX19jX2xv Y2FsZSBfX29sZCA9IDApOwoKICAgIHN0YXRpYyBfX2NfbG9jYWxlCiAgICBfU19jbG9uZV9jX2xv Y2FsZShfX2NfbG9jYWxlJiBfX2Nsb2MpOwoKICAgIHN0YXRpYyB2b2lkCiAgICBfU19kZXN0cm95 X2NfbG9jYWxlKF9fY19sb2NhbGUmIF9fY2xvYyk7CgogIHByaXZhdGU6CiAgICB2b2lkCiAgICBf TV9hZGRfcmVmZXJlbmNlKCkgdGhyb3coKTsKCiAgICB2b2lkCiAgICBfTV9yZW1vdmVfcmVmZXJl bmNlKCkgdGhyb3coKTsKCiAgICBmYWNldChjb25zdCBmYWNldCYpOwoKICAgIHZvaWQKICAgIG9w ZXJhdG9yPShjb25zdCBmYWNldCYpOwogIH07CgoKCiAgY2xhc3MgbG9jYWxlOjppZAogIHsKICBw cml2YXRlOgogICAgZnJpZW5kIGNsYXNzIGxvY2FsZTsKICAgIGZyaWVuZCBjbGFzcyBsb2NhbGU6 Ol9JbXBsOwogICAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgICBmcmllbmQgY29uc3Qg X0ZhY2V0JgogICAgICB1c2VfZmFjZXQoY29uc3QgbG9jYWxlJik7CiAgICB0ZW1wbGF0ZTx0eXBl bmFtZSBfRmFjZXQ+CiAgICAgIGZyaWVuZCBib29sCiAgICAgIGhhc19mYWNldChjb25zdCBsb2Nh bGUmKSB0aHJvdyAoKTsKCgoKCiAgICBtdXRhYmxlIHNpemVfdCBfTV9pbmRleDsKCgogICAgc3Rh dGljIF9BdG9taWNfd29yZCBfU19oaWdod2F0ZXI7CgogICAgdm9pZAogICAgb3BlcmF0b3I9KGNv bnN0IGlkJik7CgogICAgaWQoY29uc3QgaWQmKTsKCiAgcHVibGljOgoKCiAgICBpZCgpOwoKICAg IGlubGluZSBzaXplX3QKICAgIF9NX2lkKCkgY29uc3QKICAgIHsKICAgICAgaWYgKCFfTV9pbmRl eCkKICAgICAgICBfTV9pbmRleCA9IDEgKyBfX2V4Y2hhbmdlX2FuZF9hZGQoJl9TX2hpZ2h3YXRl ciwgMSk7CiAgICAgIHJldHVybiBfTV9pbmRleCAtIDE7CiAgICB9CiAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0ZhY2V0PgogICAgY29uc3QgX0ZhY2V0JgogICAgdXNlX2ZhY2V0KGNvbnN0IGxv Y2FsZSYgX19sb2MpOwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfRmFjZXQ+CiAgICBib29sCiAgICBo YXNfZmFjZXQoY29uc3QgbG9jYWxlJiBfX2xvYykgdGhyb3coKTsKfQojIDQ5ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9pb3MiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvaW9zX2Jhc2UuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp dHMvaW9zX2Jhc2UuaCIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCgoKCiAgZW51bSBfSW9zX0ZtdGZs YWdzIHsgX01faW9zX2ZtdGZsYWdzX2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0Zt dGZsYWdzCiAgb3BlcmF0b3ImKF9Jb3NfRm10ZmxhZ3MgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikK ICB7IHJldHVybiBfSW9zX0ZtdGZsYWdzKHN0YXRpY19jYXN0PGludD4oX19hKSAmIHN0YXRpY19j YXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcnwoX0lv c19GbXRmbGFncyBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0dXJuIF9Jb3NfRm10Zmxh Z3Moc3RhdGljX2Nhc3Q8aW50PihfX2EpIHwgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBp bmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9yXihfSW9zX0ZtdGZsYWdzIF9fYSwgX0lvc19G bXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX0lvc19GbXRmbGFncyhzdGF0aWNfY2FzdDxpbnQ+KF9f YSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAg b3BlcmF0b3J8PShfSW9zX0ZtdGZsYWdzJiBfX2EsIF9Jb3NfRm10ZmxhZ3MgX19iKQogIHsgcmV0 dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lvc19GbXRmbGFncwogIG9wZXJhdG9y Jj0oX0lvc19GbXRmbGFncyYgX19hLCBfSW9zX0ZtdGZsYWdzIF9fYikKICB7IHJldHVybiBfX2Eg PSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfRm10ZmxhZ3MKICBvcGVyYXRvcl49KF9Jb3Nf Rm10ZmxhZ3MmIF9fYSwgX0lvc19GbXRmbGFncyBfX2IpCiAgeyByZXR1cm4gX19hID0gX19hIF4g X19iOyB9CgogIGlubGluZSBfSW9zX0ZtdGZsYWdzCiAgb3BlcmF0b3J+KF9Jb3NfRm10ZmxhZ3Mg X19hKQogIHsgcmV0dXJuIF9Jb3NfRm10ZmxhZ3MofnN0YXRpY19jYXN0PGludD4oX19hKSk7IH0K CgogIGVudW0gX0lvc19PcGVubW9kZSB7IF9NX2lvc19vcGVubW9kZV9lbmQgPSAxTCA8PCAxNiB9 OwoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yJihfSW9zX09wZW5tb2RlIF9fYSwg X0lvc19PcGVubW9kZSBfX2IpCiAgeyByZXR1cm4gX0lvc19PcGVubW9kZShzdGF0aWNfY2FzdDxp bnQ+KF9fYSkgJiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9CgogIGlubGluZSBfSW9zX09wZW5t b2RlCiAgb3BlcmF0b3J8KF9Jb3NfT3Blbm1vZGUgX19hLCBfSW9zX09wZW5tb2RlIF9fYikKICB7 IHJldHVybiBfSW9zX09wZW5tb2RlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0YXRpY19jYXN0 PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfT3Blbm1vZGUKICBvcGVyYXRvcl4oX0lvc19P cGVubW9kZSBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfT3Blbm1vZGUo c3RhdGljX2Nhc3Q8aW50PihfX2EpIF4gc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19PcGVubW9kZQogIG9wZXJhdG9yfD0oX0lvc19PcGVubW9kZSYgX19hLCBfSW9zX09w ZW5tb2RlIF9fYikKICB7IHJldHVybiBfX2EgPSBfX2EgfCBfX2I7IH0KCiAgaW5saW5lIF9Jb3Nf T3Blbm1vZGUKICBvcGVyYXRvciY9KF9Jb3NfT3Blbm1vZGUmIF9fYSwgX0lvc19PcGVubW9kZSBf X2IpCiAgeyByZXR1cm4gX19hID0gX19hICYgX19iOyB9CgogIGlubGluZSBfSW9zX09wZW5tb2Rl CiAgb3BlcmF0b3JePShfSW9zX09wZW5tb2RlJiBfX2EsIF9Jb3NfT3Blbm1vZGUgX19iKQogIHsg cmV0dXJuIF9fYSA9IF9fYSBeIF9fYjsgfQoKICBpbmxpbmUgX0lvc19PcGVubW9kZQogIG9wZXJh dG9yfihfSW9zX09wZW5tb2RlIF9fYSkKICB7IHJldHVybiBfSW9zX09wZW5tb2RlKH5zdGF0aWNf Y2FzdDxpbnQ+KF9fYSkpOyB9CgoKICBlbnVtIF9Jb3NfSW9zdGF0ZSB7IF9NX2lvc19pb3N0YXRl X2VuZCA9IDFMIDw8IDE2IH07CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvciYoX0lv c19Jb3N0YXRlIF9fYSwgX0lvc19Jb3N0YXRlIF9fYikKICB7IHJldHVybiBfSW9zX0lvc3RhdGUo c3RhdGljX2Nhc3Q8aW50PihfX2EpICYgc3RhdGljX2Nhc3Q8aW50PihfX2IpKTsgfQoKICBpbmxp bmUgX0lvc19Jb3N0YXRlCiAgb3BlcmF0b3J8KF9Jb3NfSW9zdGF0ZSBfX2EsIF9Jb3NfSW9zdGF0 ZSBfX2IpCiAgeyByZXR1cm4gX0lvc19Jb3N0YXRlKHN0YXRpY19jYXN0PGludD4oX19hKSB8IHN0 YXRpY19jYXN0PGludD4oX19iKSk7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQogIG9wZXJhdG9y XihfSW9zX0lvc3RhdGUgX19hLCBfSW9zX0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9Jb3NfSW9z dGF0ZShzdGF0aWNfY2FzdDxpbnQ+KF9fYSkgXiBzdGF0aWNfY2FzdDxpbnQ+KF9fYikpOyB9Cgog IGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcnw9KF9Jb3NfSW9zdGF0ZSYgX19hLCBfSW9z X0lvc3RhdGUgX19iKQogIHsgcmV0dXJuIF9fYSA9IF9fYSB8IF9fYjsgfQoKICBpbmxpbmUgX0lv c19Jb3N0YXRlCiAgb3BlcmF0b3ImPShfSW9zX0lvc3RhdGUmIF9fYSwgX0lvc19Jb3N0YXRlIF9f YikKICB7IHJldHVybiBfX2EgPSBfX2EgJiBfX2I7IH0KCiAgaW5saW5lIF9Jb3NfSW9zdGF0ZQog IG9wZXJhdG9yXj0oX0lvc19Jb3N0YXRlJiBfX2EsIF9Jb3NfSW9zdGF0ZSBfX2IpCiAgeyByZXR1 cm4gX19hID0gX19hIF4gX19iOyB9CgogIGlubGluZSBfSW9zX0lvc3RhdGUKICBvcGVyYXRvcn4o X0lvc19Jb3N0YXRlIF9fYSkKICB7IHJldHVybiBfSW9zX0lvc3RhdGUofnN0YXRpY19jYXN0PGlu dD4oX19hKSk7IH0KCiAgZW51bSBfSW9zX1NlZWtkaXIgeyBfTV9pb3Nfc2Vla2Rpcl9lbmQgPSAx TCA8PCAxNiB9OwoKCiAgY2xhc3MgaW9zX2Jhc2UKICB7CiAgcHVibGljOgoKCiAgICBjbGFzcyBm YWlsdXJlIDogcHVibGljIGV4Y2VwdGlvbgogICAgewogICAgcHVibGljOgoKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGZhaWx1cmUoY29uc3Qgc3RyaW5nJiBfX3N0cikgdGhyb3coKTsKCgoKICAgICAg dmlydHVhbAogICAgICB+ZmFpbHVyZSgpIHRocm93KCk7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNo YXIqCiAgICAgIHdoYXQoKSBjb25zdCB0aHJvdygpOwoKICAgIHByaXZhdGU6CiAgICAgIGVudW0g eyBfTV9idWZzaXplID0gMjU2IH07CiAgICAgIGNoYXIgX01fbmFtZVtfTV9idWZzaXplXTsKCiAg ICB9OwoKCiAgICB0eXBlZGVmIF9Jb3NfRm10ZmxhZ3MgZm10ZmxhZ3M7CgogICAgc3RhdGljIGNv bnN0IGZtdGZsYWdzIGJvb2xhbHBoYSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19ib29sYWxw aGEpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGRlYyA9IGZtdGZsYWdzKF9faW9zX2ZsYWdz OjpfU19kZWMpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGZpeGVkID0gZm10ZmxhZ3MoX19p b3NfZmxhZ3M6Ol9TX2ZpeGVkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBoZXggPSBmbXRm bGFncyhfX2lvc19mbGFnczo6X1NfaGV4KTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBpbnRl cm5hbCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19pbnRlcm5hbCk7CiAgICBzdGF0aWMgY29u c3QgZm10ZmxhZ3MgbGVmdCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19sZWZ0KTsKICAgIHN0 YXRpYyBjb25zdCBmbXRmbGFncyBvY3QgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1Nfb2N0KTsK ICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyByaWdodCA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpf U19yaWdodCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2NpZW50aWZpYyA9IGZtdGZsYWdz KF9faW9zX2ZsYWdzOjpfU19zY2llbnRpZmljKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBz aG93YmFzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU19zaG93YmFzZSk7CiAgICBzdGF0aWMg Y29uc3QgZm10ZmxhZ3Mgc2hvd3BvaW50ID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3Nob3dw b2ludCk7CiAgICBzdGF0aWMgY29uc3QgZm10ZmxhZ3Mgc2hvd3BvcyA9IGZtdGZsYWdzKF9faW9z X2ZsYWdzOjpfU19zaG93cG9zKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBza2lwd3MgPSBm bXRmbGFncyhfX2lvc19mbGFnczo6X1Nfc2tpcHdzKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFn cyB1bml0YnVmID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX3VuaXRidWYpOwogICAgc3RhdGlj IGNvbnN0IGZtdGZsYWdzIHVwcGVyY2FzZSA9IGZtdGZsYWdzKF9faW9zX2ZsYWdzOjpfU191cHBl cmNhc2UpOwogICAgc3RhdGljIGNvbnN0IGZtdGZsYWdzIGFkanVzdGZpZWxkID0gZm10ZmxhZ3Mo X19pb3NfZmxhZ3M6Ol9TX2FkanVzdGZpZWxkKTsKICAgIHN0YXRpYyBjb25zdCBmbXRmbGFncyBi YXNlZmllbGQgPSBmbXRmbGFncyhfX2lvc19mbGFnczo6X1NfYmFzZWZpZWxkKTsKICAgIHN0YXRp YyBjb25zdCBmbXRmbGFncyBmbG9hdGZpZWxkID0gZm10ZmxhZ3MoX19pb3NfZmxhZ3M6Ol9TX2Zs b2F0ZmllbGQpOwoKCiAgICB0eXBlZGVmIF9Jb3NfSW9zdGF0ZSBpb3N0YXRlOwogICAgc3RhdGlj IGNvbnN0IGlvc3RhdGUgYmFkYml0ID0gaW9zdGF0ZShfX2lvc19mbGFnczo6X1NfYmFkYml0KTsK ICAgIHN0YXRpYyBjb25zdCBpb3N0YXRlIGVvZmJpdCA9IGlvc3RhdGUoX19pb3NfZmxhZ3M6Ol9T X2VvZmJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBmYWlsYml0ID0gaW9zdGF0ZShfX2lv c19mbGFnczo6X1NfZmFpbGJpdCk7CiAgICBzdGF0aWMgY29uc3QgaW9zdGF0ZSBnb29kYml0ID0g aW9zdGF0ZSgwKTsKCgogICAgdHlwZWRlZiBfSW9zX09wZW5tb2RlIG9wZW5tb2RlOwogICAgc3Rh dGljIGNvbnN0IG9wZW5tb2RlIGFwcCA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19hcHApOwog ICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGF0ZSA9IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU19h dGUpOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGJpbmFyeSA9IG9wZW5tb2RlKF9faW9zX2Zs YWdzOjpfU19iaW4pOwogICAgc3RhdGljIGNvbnN0IG9wZW5tb2RlIGluID0gb3Blbm1vZGUoX19p b3NfZmxhZ3M6Ol9TX2luKTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSBvdXQgPSBvcGVubW9k ZShfX2lvc19mbGFnczo6X1Nfb3V0KTsKICAgIHN0YXRpYyBjb25zdCBvcGVubW9kZSB0cnVuYyA9 IG9wZW5tb2RlKF9faW9zX2ZsYWdzOjpfU190cnVuYyk7CgoKICAgIHR5cGVkZWYgX0lvc19TZWVr ZGlyIHNlZWtkaXI7CiAgICBzdGF0aWMgY29uc3Qgc2Vla2RpciBiZWcgPSBzZWVrZGlyKDApOwog ICAgc3RhdGljIGNvbnN0IHNlZWtkaXIgY3VyID0gc2Vla2RpcigxKTsKICAgIHN0YXRpYyBjb25z dCBzZWVrZGlyIGVuZCA9IHNlZWtkaXIoMik7CiMgMjI2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysr LzMuMi9iaXRzL2lvc19iYXNlLmgiIDMKICAgIGVudW0gZXZlbnQKICAgIHsKICAgICAgZXJhc2Vf ZXZlbnQsCiAgICAgIGltYnVlX2V2ZW50LAogICAgICBjb3B5Zm10X2V2ZW50CiAgICB9OwoKICAg IHR5cGVkZWYgdm9pZCAoKmV2ZW50X2NhbGxiYWNrKSAoZXZlbnQsIGlvc19iYXNlJiwgaW50KTsK CiAgICB2b2lkCiAgICByZWdpc3Rlcl9jYWxsYmFjayhldmVudF9jYWxsYmFjayBfX2ZuLCBpbnQg X19pbmRleCk7CgogIHByb3RlY3RlZDoKCiAgICBzdHJlYW1zaXplIF9NX3ByZWNpc2lvbjsKICAg IHN0cmVhbXNpemUgX01fd2lkdGg7CiAgICBmbXRmbGFncyBfTV9mbGFnczsKICAgIGlvc3RhdGUg X01fZXhjZXB0aW9uOwogICAgaW9zdGF0ZSBfTV9zdHJlYW1idWZfc3RhdGU7CgoKCiAgICBzdHJ1 Y3QgX0NhbGxiYWNrX2xpc3QKICAgIHsKCiAgICAgIF9DYWxsYmFja19saXN0KiBfTV9uZXh0Owog ICAgICBpb3NfYmFzZTo6ZXZlbnRfY2FsbGJhY2sgX01fZm47CiAgICAgIGludCBfTV9pbmRleDsK ICAgICAgX0F0b21pY193b3JkIF9NX3JlZmNvdW50OwoKICAgICAgX0NhbGxiYWNrX2xpc3QoaW9z X2Jhc2U6OmV2ZW50X2NhbGxiYWNrIF9fZm4sIGludCBfX2luZGV4LAogICAgICAgICAgICAgICAg ICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYikKICAgICAgOiBfTV9uZXh0KF9fY2IpLCBfTV9mbihf X2ZuKSwgX01faW5kZXgoX19pbmRleCksIF9NX3JlZmNvdW50KDApIHsgfQoKICAgICAgdm9pZAog ICAgICBfTV9hZGRfcmVmZXJlbmNlKCkgeyBfX2F0b21pY19hZGQoJl9NX3JlZmNvdW50LCAxKTsg fQoKCiAgICAgIGludAogICAgICBfTV9yZW1vdmVfcmVmZXJlbmNlKCkgeyByZXR1cm4gX19leGNo YW5nZV9hbmRfYWRkKCZfTV9yZWZjb3VudCwgLTEpOyB9CiAgICB9OwoKICAgICBfQ2FsbGJhY2tf bGlzdCogX01fY2FsbGJhY2tzOwoKICAgIHZvaWQKICAgIF9NX2NhbGxfY2FsbGJhY2tzKGV2ZW50 IF9fZXYpIHRocm93KCk7CgogICAgdm9pZAogICAgX01fZGlzcG9zZV9jYWxsYmFja3Modm9pZCk7 CgoKICAgIHN0cnVjdCBfV29yZHMKICAgIHsKICAgICAgdm9pZCogX01fcHdvcmQ7CiAgICAgIGxv bmcgX01faXdvcmQ7CiAgICAgIF9Xb3JkcygpIDogX01fcHdvcmQoMCksIF9NX2l3b3JkKDApIHsg fQogICAgfTsKCgogICAgX1dvcmRzIF9NX3dvcmRfemVybzsKCgogICAgc3RhdGljIGNvbnN0IGlu dCBfU19sb2NhbF93b3JkX3NpemUgPSA4OwogICAgX1dvcmRzIF9NX2xvY2FsX3dvcmRbX1NfbG9j YWxfd29yZF9zaXplXTsKCgogICAgaW50IF9NX3dvcmRfc2l6ZTsKICAgIF9Xb3JkcyogX01fd29y ZDsKCiAgICBfV29yZHMmCiAgICBfTV9ncm93X3dvcmRzKGludCBfX2luZGV4KTsKCgogICAgbG9j YWxlIF9NX2lvc19sb2NhbGU7CgogICAgdm9pZAogICAgX01faW5pdCgpOwoKICBwdWJsaWM6CgoK CgoKICAgIGNsYXNzIEluaXQKICAgIHsKICAgICAgZnJpZW5kIGNsYXNzIGlvc19iYXNlOwogICAg cHVibGljOgogICAgICBJbml0KCk7CiAgICAgIH5Jbml0KCk7CgogICAgICBzdGF0aWMgdm9pZAog ICAgICBfU19pb3NfY3JlYXRlKGJvb2wgX19zeW5jKTsKCiAgICAgIHN0YXRpYyB2b2lkCiAgICAg IF9TX2lvc19kZXN0cm95KCk7CgogICAgcHJpdmF0ZToKICAgICAgc3RhdGljIGludCBfU19pb3Nf YmFzZV9pbml0OwogICAgICBzdGF0aWMgYm9vbCBfU19zeW5jZWRfd2l0aF9zdGRpbzsKICAgIH07 CgoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoKSBjb25zdCB7IHJldHVybiBfTV9mbGFn czsgfQoKICAgIGlubGluZSBmbXRmbGFncwogICAgZmxhZ3MoZm10ZmxhZ3MgX19mbXRmbCkKICAg IHsKICAgICAgZm10ZmxhZ3MgX19vbGQgPSBfTV9mbGFnczsKICAgICAgX01fZmxhZ3MgPSBfX2Zt dGZsOwogICAgICByZXR1cm4gX19vbGQ7CiAgICB9CgogICAgaW5saW5lIGZtdGZsYWdzCiAgICBz ZXRmKGZtdGZsYWdzIF9fZm10ZmwpCiAgICB7CiAgICAgIGZtdGZsYWdzIF9fb2xkID0gX01fZmxh Z3M7CiAgICAgIF9NX2ZsYWdzIHw9IF9fZm10Zmw7CiAgICAgIHJldHVybiBfX29sZDsKICAgIH0K CiAgICBpbmxpbmUgZm10ZmxhZ3MKICAgIHNldGYoZm10ZmxhZ3MgX19mbXRmbCwgZm10ZmxhZ3Mg X19tYXNrKQogICAgewogICAgICBmbXRmbGFncyBfX29sZCA9IF9NX2ZsYWdzOwogICAgICBfTV9m bGFncyAmPSB+X19tYXNrOwogICAgICBfTV9mbGFncyB8PSAoX19mbXRmbCAmIF9fbWFzayk7CiAg ICAgIHJldHVybiBfX29sZDsKICAgIH0KCiAgICBpbmxpbmUgdm9pZAogICAgdW5zZXRmKGZtdGZs YWdzIF9fbWFzaykgeyBfTV9mbGFncyAmPSB+X19tYXNrOyB9CgogICAgaW5saW5lIHN0cmVhbXNp emUKICAgIHByZWNpc2lvbigpIGNvbnN0IHsgcmV0dXJuIF9NX3ByZWNpc2lvbjsgfQoKICAgIGlu bGluZSBzdHJlYW1zaXplCiAgICBwcmVjaXNpb24oc3RyZWFtc2l6ZSBfX3ByZWMpCiAgICB7CiAg ICAgIHN0cmVhbXNpemUgX19vbGQgPSBfTV9wcmVjaXNpb247CiAgICAgIF9NX3ByZWNpc2lvbiA9 IF9fcHJlYzsKICAgICAgcmV0dXJuIF9fb2xkOwogICAgfQoKICAgIGlubGluZSBzdHJlYW1zaXpl CiAgICB3aWR0aCgpIGNvbnN0IHsgcmV0dXJuIF9NX3dpZHRoOyB9CgogICAgaW5saW5lIHN0cmVh bXNpemUKICAgIHdpZHRoKHN0cmVhbXNpemUgX193aWRlKQogICAgewogICAgICBzdHJlYW1zaXpl IF9fb2xkID0gX01fd2lkdGg7CiAgICAgIF9NX3dpZHRoID0gX193aWRlOwogICAgICByZXR1cm4g X19vbGQ7CiAgICB9CgogICAgc3RhdGljIGJvb2wKICAgIHN5bmNfd2l0aF9zdGRpbyhib29sIF9f c3luYyA9IHRydWUpOwoKCiAgICBsb2NhbGUKICAgIGltYnVlKGNvbnN0IGxvY2FsZSYgX19sb2Mp OwoKICAgIGlubGluZSBsb2NhbGUKICAgIGdldGxvYygpIGNvbnN0IHsgcmV0dXJuIF9NX2lvc19s b2NhbGU7IH0KCgogICAgc3RhdGljIGludAogICAgeGFsbG9jKCkgdGhyb3coKTsKCiAgICBpbmxp bmUgbG9uZyYKICAgIGl3b3JkKGludCBfX2l4KQogICAgewogICAgICBfV29yZHMmIF9fd29yZCA9 IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAgICAgICAgICA/IF9NX3dvcmRb X19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1cm4gX193b3JkLl9NX2l3b3Jk OwogICAgfQoKICAgIGlubGluZSB2b2lkKiYKICAgIHB3b3JkKGludCBfX2l4KQogICAgewogICAg ICBfV29yZHMmIF9fd29yZCA9IChfX2l4IDwgX01fd29yZF9zaXplKQogICAgICAgICAgICAgICAg ICAgICAgICA/IF9NX3dvcmRbX19peF0gOiBfTV9ncm93X3dvcmRzKF9faXgpOwogICAgICByZXR1 cm4gX193b3JkLl9NX3B3b3JkOwogICAgfQoKCiAgICB+aW9zX2Jhc2UoKTsKCiAgcHJvdGVjdGVk OgogICAgaW9zX2Jhc2UoKTsKCgoKICBwcml2YXRlOgogICAgaW9zX2Jhc2UoY29uc3QgaW9zX2Jh c2UmKTsKCiAgICBpb3NfYmFzZSYKICAgIG9wZXJhdG9yPShjb25zdCBpb3NfYmFzZSYpOwoKICB9 OwoKCiAgaW5saW5lIGlvc19iYXNlJgogIGJvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQogIHsK ICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpib29sYWxwaGEpOwogICAgcmV0dXJuIF9fYmFzZTsK ICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub2Jvb2xhbHBoYShpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OmJvb2xhbHBoYSk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNob3diYXNlKGlvc19iYXNlJiBfX2Jhc2Up CiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBfX2Jh c2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93YmFzZShpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNob3diYXNlKTsKICAgIHJldHVybiBf X2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3BvaW50KGlvc19iYXNlJiBfX2Jh c2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnNob3dwb2ludCk7CiAgICByZXR1cm4g X19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIG5vc2hvd3BvaW50KGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3BvaW50KTsKICAgIHJl dHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2hvd3Bvcyhpb3NfYmFzZSYg X19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzaG93cG9zKTsKICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm9zaG93cG9zKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgX19iYXNlLnVuc2V0Zihpb3NfYmFzZTo6c2hvd3Bvcyk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHNraXB3cyhpb3NfYmFzZSYgX19i YXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpza2lwd3MpOwogICAgcmV0dXJuIF9f YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3NraXB3cyhpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnNraXB3cyk7CiAgICByZXR1cm4gX19i YXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVwcGVyY2FzZShpb3NfYmFzZSYgX19iYXNl KQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjp1cHBlcmNhc2UpOwogICAgcmV0dXJuIF9f YmFzZTsKICB9CgogIGlubGluZSBpb3NfYmFzZSYKICBub3VwcGVyY2FzZShpb3NfYmFzZSYgX19i YXNlKQogIHsKICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVwcGVyY2FzZSk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgogIHVuaXRidWYoaW9zX2Jhc2UmIF9f YmFzZSkKICB7CiAgICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJldHVy biBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgbm91bml0YnVmKGlvc19iYXNlJiBf X2Jhc2UpCiAgewogICAgIF9fYmFzZS51bnNldGYoaW9zX2Jhc2U6OnVuaXRidWYpOwogICAgIHJl dHVybiBfX2Jhc2U7CiAgfQoKCiAgaW5saW5lIGlvc19iYXNlJgogIGludGVybmFsKGlvc19iYXNl JiBfX2Jhc2UpCiAgewogICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjppbnRlcm5hbCwgaW9zX2Jh c2U6OmFkanVzdGZpZWxkKTsKICAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19i YXNlJgogIGxlZnQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFz ZTo6bGVmdCwgaW9zX2Jhc2U6OmFkanVzdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoK ICBpbmxpbmUgaW9zX2Jhc2UmCiAgcmlnaHQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jh c2Uuc2V0Zihpb3NfYmFzZTo6cmlnaHQsIGlvc19iYXNlOjphZGp1c3RmaWVsZCk7CiAgICByZXR1 cm4gX19iYXNlOwogIH0KCgogIGlubGluZSBpb3NfYmFzZSYKICBkZWMoaW9zX2Jhc2UmIF9fYmFz ZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihpb3NfYmFzZTo6ZGVjLCBpb3NfYmFzZTo6YmFzZWZpZWxk KTsKICAgIHJldHVybiBfX2Jhc2U7CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgaGV4KGlvc19i YXNlJiBfX2Jhc2UpCiAgewogICAgX19iYXNlLnNldGYoaW9zX2Jhc2U6OmhleCwgaW9zX2Jhc2U6 OmJhc2VmaWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCiAgaW5saW5lIGlvc19iYXNlJgog IG9jdChpb3NfYmFzZSYgX19iYXNlKQogIHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpvY3Qs IGlvc19iYXNlOjpiYXNlZmllbGQpOwogICAgcmV0dXJuIF9fYmFzZTsKICB9CgoKICBpbmxpbmUg aW9zX2Jhc2UmCiAgZml4ZWQoaW9zX2Jhc2UmIF9fYmFzZSkKICB7CiAgICBfX2Jhc2Uuc2V0Zihp b3NfYmFzZTo6Zml4ZWQsIGlvc19iYXNlOjpmbG9hdGZpZWxkKTsKICAgIHJldHVybiBfX2Jhc2U7 CiAgfQoKICBpbmxpbmUgaW9zX2Jhc2UmCiAgc2NpZW50aWZpYyhpb3NfYmFzZSYgX19iYXNlKQog IHsKICAgIF9fYmFzZS5zZXRmKGlvc19iYXNlOjpzY2llbnRpZmljLCBpb3NfYmFzZTo6ZmxvYXRm aWVsZCk7CiAgICByZXR1cm4gX19iYXNlOwogIH0KCn0KIyA1MCAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1i dWYiIDEgMwojIDQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9zdHJlYW1idWYiIDMKCgoK CgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxf Q2hhclQsIF9UcmFpdHM+JiBfaW9zLAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFt YnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2JpbiwKICAgICAgICAgICAgICAgICAgICAgIGJhc2lj X3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfX3Nib3V0KTsKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zgog ICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0 eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190 eXBlOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlw ZTo6b2ZmX3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxjaGFyX3R5cGU+IF9f Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBlLCB0cmFp dHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNf dHlwZTo6c3RhdGVfdHlwZSBfX3N0YXRlX3R5cGU7CgogICAgICBmcmllbmQgY2xhc3MgYmFzaWNf aW9zPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3MgYmFzaWNfaXN0 cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKICAgICAgZnJpZW5kIGNsYXNzIGJhc2ljX29z dHJlYW08Y2hhcl90eXBlLCB0cmFpdHNfdHlwZT47CiAgICAgIGZyaWVuZCBjbGFzcyBpc3RyZWFt YnVmX2l0ZXJhdG9yPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+OwogICAgICBmcmllbmQgY2xhc3Mg b3N0cmVhbWJ1Zl9pdGVyYXRvcjxjaGFyX3R5cGUsIHRyYWl0c190eXBlPjsKCiAgICAgIGZyaWVu ZCBzdHJlYW1zaXplCiAgICAgIF9fY29weV9zdHJlYW1idWZzPD4oYmFzaWNfaW9zPGNoYXJfdHlw ZSwgdHJhaXRzX3R5cGU+JiBfX2lvcywKICAgICAgICAgICAgICAgICAgICAgICAgICBfX3N0cmVh bWJ1Zl90eXBlKiBfX3NiaW4sX19zdHJlYW1idWZfdHlwZSogX19zYm91dCk7CgogICAgcHJvdGVj dGVkOgoKCgoKCiAgICAgIGNoYXJfdHlwZSogX01fYnVmOwoKCiAgICAgIHNpemVfdCBfTV9idWZf c2l6ZTsKCgogICAgICBzaXplX3QgX01fYnVmX3NpemVfb3B0OwoKCgogICAgICBib29sIF9NX2J1 Zl91bmlmaWVkOwoKCgoKCgogICAgICBjaGFyX3R5cGUqIF9NX2luX2JlZzsKICAgICAgY2hhcl90 eXBlKiBfTV9pbl9jdXI7CiAgICAgIGNoYXJfdHlwZSogX01faW5fZW5kOwogICAgICBjaGFyX3R5 cGUqIF9NX291dF9iZWc7CiAgICAgIGNoYXJfdHlwZSogX01fb3V0X2N1cjsKICAgICAgY2hhcl90 eXBlKiBfTV9vdXRfZW5kOwoKCiAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfTV9tb2RlOwoKCiAg ICAgIGxvY2FsZSBfTV9idWZfbG9jYWxlOwoKCiAgICAgIGJvb2wgX01fYnVmX2xvY2FsZV9pbml0 OwoKCgoKCgogICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IF9TX3BiYWNrX3NpemUgPSAxOwogICAg ICBjaGFyX3R5cGUgX01fcGJhY2tbX1NfcGJhY2tfc2l6ZV07CiAgICAgIGNoYXJfdHlwZSogX01f cGJhY2tfY3VyX3NhdmU7CiAgICAgIGNoYXJfdHlwZSogX01fcGJhY2tfZW5kX3NhdmU7CiAgICAg IGJvb2wgX01fcGJhY2tfaW5pdDsKCgogICAgICBmcG9zPF9fc3RhdGVfdHlwZT4gX01fcG9zOwoK CgoKICAgICAgdm9pZAogICAgICBfTV9wYmFja19jcmVhdGUoKQogICAgICB7CiAgICAgICAgaWYg KCFfTV9wYmFja19pbml0KQogICAgICAgICAgewogICAgICAgICAgICBzaXplX3QgX19kaXN0ID0g X01faW5fZW5kIC0gX01faW5fY3VyOwogICAgICAgICAgICBzaXplX3QgX19sZW4gPSBtaW4oX1Nf cGJhY2tfc2l6ZSwgX19kaXN0KTsKICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmNvcHkoX01fcGJh Y2ssIF9NX2luX2N1ciwgX19sZW4pOwogICAgICAgICAgICBfTV9wYmFja19jdXJfc2F2ZSA9IF9N X2luX2N1cjsKICAgICAgICAgICAgX01fcGJhY2tfZW5kX3NhdmUgPSBfTV9pbl9lbmQ7CiAgICAg ICAgICAgIHRoaXMtPnNldGcoX01fcGJhY2ssIF9NX3BiYWNrLCBfTV9wYmFjayArIF9fbGVuKTsK ICAgICAgICAgICAgX01fcGJhY2tfaW5pdCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgIH0KCgoK CiAgICAgIHZvaWQKICAgICAgX01fcGJhY2tfZGVzdHJveSgpCiAgICAgIHsKICAgICAgICBpZiAo X01fcGJhY2tfaW5pdCkKICAgICAgICAgIHsKCiAgICAgICAgICAgIHNpemVfdCBfX29mZl9jdXIg PSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKCgogICAgICAgICAgICBzaXplX3QgX19vZmZfZW5kID0g MDsKICAgICAgICAgICAgc2l6ZV90IF9fcGJhY2tfbGVuID0gX01faW5fZW5kIC0gX01fcGJhY2s7 CiAgICAgICAgICAgIHNpemVfdCBfX3NhdmVfbGVuID0gX01fcGJhY2tfZW5kX3NhdmUgLSBfTV9i dWY7CiAgICAgICAgICAgIGlmIChfX3BiYWNrX2xlbiA+IF9fc2F2ZV9sZW4pCiAgICAgICAgICAg ICAgX19vZmZfZW5kID0gX19wYmFja19sZW4gLSBfX3NhdmVfbGVuOwoKICAgICAgICAgICAgdGhp cy0+c2V0ZyhfTV9idWYsIF9NX3BiYWNrX2N1cl9zYXZlICsgX19vZmZfY3VyLAogICAgICAgICAg ICAgICAgICAgICAgIF9NX3BiYWNrX2VuZF9zYXZlICsgX19vZmZfZW5kKTsKICAgICAgICAgICAg X01fcGJhY2tfY3VyX3NhdmUgPSAwOwogICAgICAgICAgICBfTV9wYmFja19lbmRfc2F2ZSA9IDA7 CiAgICAgICAgICAgIF9NX3BiYWNrX2luaXQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgfQoK CgogICAgICB2b2lkCiAgICAgIF9NX2luX2N1cl9tb3ZlKG9mZl90eXBlIF9fbikKICAgICAgewog ICAgICAgIGJvb2wgX190ZXN0b3V0ID0gX01fb3V0X2N1cjsKICAgICAgICBfTV9pbl9jdXIgKz0g X19uOwogICAgICAgIGlmIChfX3Rlc3RvdXQgJiYgX01fYnVmX3VuaWZpZWQpCiAgICAgICAgICBf TV9vdXRfY3VyICs9IF9fbjsKICAgICAgfQojIDIwMiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvc3RyZWFtYnVmIiAzCiAgICAgIHZvaWQKICAgICAgX01fb3V0X2N1cl9tb3ZlKG9mZl90eXBl IF9fbikKICAgICAgewogICAgICAgIGJvb2wgX190ZXN0aW4gPSBfTV9pbl9jdXI7CgogICAgICAg IF9NX291dF9jdXIgKz0gX19uOwogICAgICAgIGlmIChfX3Rlc3RpbiAmJiBfTV9idWZfdW5pZmll ZCkKICAgICAgICAgIF9NX2luX2N1ciArPSBfX247CiAgICAgICAgaWYgKF9NX291dF9jdXIgPiBf TV9vdXRfZW5kKQogICAgICAgICAgewogICAgICAgICAgICBfTV9vdXRfZW5kID0gX01fb3V0X2N1 cjsKCiAgICAgICAgICAgIGlmIChfX3Rlc3RpbikKICAgICAgICAgICAgICBfTV9pbl9lbmQgKz0g X19uOwogICAgICAgICAgfQogICAgICB9CgoKCgogICAgICBvZmZfdHlwZQogICAgICBfTV9vdXRf YnVmX3NpemUoKQogICAgICB7CiAgICAgICAgb2ZmX3R5cGUgX19yZXQgPSAwOwogICAgICAgIGlm IChfTV9vdXRfY3VyKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX291dF9iZWcgPT0g X01fYnVmKQogICAgICAgICAgICAgIF9fcmV0ID0gX01fb3V0X2JlZyArIF9NX2J1Zl9zaXplIC0g X01fb3V0X2N1cjsKCiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBfX3JldCA9IF9NX291 dF9lbmQgLSBfTV9vdXRfY3VyOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfX3JldDsKICAg ICAgfQoKICBwdWJsaWM6CiAgICAgIHZpcnR1YWwKICAgICAgfmJhc2ljX3N0cmVhbWJ1ZigpCiAg ICAgIHsKICAgICAgICBfTV9idWZfdW5pZmllZCA9IGZhbHNlOwogICAgICAgIF9NX2J1Zl9zaXpl ID0gMDsKICAgICAgICBfTV9idWZfc2l6ZV9vcHQgPSAwOwogICAgICAgIF9NX21vZGUgPSBpb3Nf YmFzZTo6b3Blbm1vZGUoMCk7CiAgICAgICAgX01fYnVmX2xvY2FsZV9pbml0ID0gZmFsc2U7CiAg ICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgcHViaW1idWUoY29uc3QgbG9jYWxlICZfX2xvYykK ICAgICAgewogICAgICAgIGxvY2FsZSBfX3RtcCh0aGlzLT5nZXRsb2MoKSk7CiAgICAgICAgdGhp cy0+aW1idWUoX19sb2MpOwogICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgbG9j YWxlCiAgICAgIGdldGxvYygpIGNvbnN0CiAgICAgIHsKICAgICAgICBpZiAoX01fYnVmX2xvY2Fs ZV9pbml0KQogICAgICAgICAgcmV0dXJuIF9NX2J1Zl9sb2NhbGU7CiAgICAgICAgZWxzZQogICAg ICAgICAgcmV0dXJuIGxvY2FsZSgpOwogICAgICB9CgoKICAgICAgX19zdHJlYW1idWZfdHlwZSoK ICAgICAgcHVic2V0YnVmKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikKICAgICAgeyBy ZXR1cm4gdGhpcy0+c2V0YnVmKF9fcywgX19uKTsgfQoKICAgICAgcG9zX3R5cGUKICAgICAgcHVi c2Vla29mZihvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX193YXksCiAgICAgICAg ICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19i YXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtvZmYoX19vZmYsIF9fd2F5LCBfX21v ZGUpOyB9CgogICAgICBwb3NfdHlwZQogICAgICBwdWJzZWVrcG9zKHBvc190eXBlIF9fc3AsCiAg ICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbiB8 IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0dXJuIHRoaXMtPnNlZWtwb3MoX19zcCwgX19tb2Rl KTsgfQoKICAgICAgaW50CiAgICAgIHB1YnN5bmMoKSB7IHJldHVybiB0aGlzLT5zeW5jKCk7IH0K CgoKICAgICAgc3RyZWFtc2l6ZQogICAgICBpbl9hdmFpbCgpCiAgICAgIHsKICAgICAgICBzdHJl YW1zaXplIF9fcmV0OwogICAgICAgIGlmIChfTV9pbl9jdXIgJiYgX01faW5fY3VyIDwgX01faW5f ZW5kKQogICAgICAgICAgewogICAgICAgICAgICBpZiAoX01fcGJhY2tfaW5pdCkKICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICBzaXplX3QgX19zYXZlX2xlbiA9IF9NX3BiYWNrX2VuZF9z YXZlIC0gX01fcGJhY2tfY3VyX3NhdmU7CiAgICAgICAgICAgICAgICBzaXplX3QgX19wYmFja19s ZW4gPSBfTV9pbl9jdXIgLSBfTV9wYmFjazsKICAgICAgICAgICAgICAgIF9fcmV0ID0gX19zYXZl X2xlbiAtIF9fcGJhY2tfbGVuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZQogICAg ICAgICAgICAgIF9fcmV0ID0gdGhpcy0+ZWdwdHIoKSAtIHRoaXMtPmdwdHIoKTsKICAgICAgICAg IH0KICAgICAgICBlbHNlCiAgICAgICAgICBfX3JldCA9IHRoaXMtPnNob3dtYW55YygpOwogICAg ICAgIHJldHVybiBfX3JldDsKICAgICAgfQoKICAgICAgaW50X3R5cGUKICAgICAgc25leHRjKCkK ICAgICAgewogICAgICAgIGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAg ICAgIHJldHVybiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnNidW1wYygpLCBfX2Vv ZikKICAgICAgICAgICAgICAgID8gX19lb2YgOiB0aGlzLT5zZ2V0YygpKTsKICAgICAgfQoKICAg ICAgaW50X3R5cGUKICAgICAgc2J1bXBjKCk7CgogICAgICBpbnRfdHlwZQogICAgICBzZ2V0Yygp CiAgICAgIHsKICAgICAgICBpbnRfdHlwZSBfX3JldDsKICAgICAgICBpZiAoX01faW5fY3VyICYm IF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAgICAgICAgIF9fcmV0ID0gdHJhaXRzX3R5cGU6OnRv X2ludF90eXBlKCoodGhpcy0+Z3B0cigpKSk7CiAgICAgICAgZWxzZQogICAgICAgICAgX19yZXQg PSB0aGlzLT51bmRlcmZsb3coKTsKICAgICAgICByZXR1cm4gX19yZXQ7CiAgICAgIH0KCiAgICAg IHN0cmVhbXNpemUKICAgICAgc2dldG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQog ICAgICB7IHJldHVybiB0aGlzLT54c2dldG4oX19zLCBfX24pOyB9CgoKICAgICAgaW50X3R5cGUK ICAgICAgc3B1dGJhY2tjKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgaW50X3R5cGUKICAgICAgc3Vu Z2V0YygpOwoKCiAgICAgIGludF90eXBlCiAgICAgIHNwdXRjKGNoYXJfdHlwZSBfX2MpOwoKICAg ICAgc3RyZWFtc2l6ZQogICAgICBzcHV0bihjb25zdCBjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRoaXMtPnhzcHV0bihfX3MsIF9fbik7IH0KCiAgICBwcm90 ZWN0ZWQ6CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZigpCiAgICAgIDogX01fYnVmKDApLCBfTV9idWZf c2l6ZSgwKSwgX01fYnVmX3NpemVfb3B0KDgxOTIpLAogICAgICBfTV9idWZfdW5pZmllZChmYWxz ZSksIF9NX2luX2JlZygwKSwgX01faW5fY3VyKDApLCBfTV9pbl9lbmQoMCksCiAgICAgIF9NX291 dF9iZWcoMCksIF9NX291dF9jdXIoMCksIF9NX291dF9lbmQoMCksCiAgICAgIF9NX21vZGUoaW9z X2Jhc2U6Om9wZW5tb2RlKDApKSwgX01fYnVmX2xvY2FsZShsb2NhbGUoKSksCiAgICAgIF9NX2J1 Zl9sb2NhbGVfaW5pdChmYWxzZSksIF9NX3BiYWNrX2N1cl9zYXZlKDApLCBfTV9wYmFja19lbmRf c2F2ZSgwKSwKICAgICAgX01fcGJhY2tfaW5pdChmYWxzZSkKICAgICAgeyB9CgoKICAgICAgY2hh cl90eXBlKgogICAgICBlYmFjaygpIGNvbnN0IHsgcmV0dXJuIF9NX2luX2JlZzsgfQoKICAgICAg Y2hhcl90eXBlKgogICAgICBncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fY3VyOyB9CgogICAg ICBjaGFyX3R5cGUqCiAgICAgIGVncHRyKCkgY29uc3QgeyByZXR1cm4gX01faW5fZW5kOyB9Cgog ICAgICB2b2lkCiAgICAgIGdidW1wKGludCBfX24pIHsgX01faW5fY3VyICs9IF9fbjsgfQoKICAg ICAgdm9pZAogICAgICBzZXRnKGNoYXJfdHlwZSogX19nYmVnLCBjaGFyX3R5cGUqIF9fZ25leHQs IGNoYXJfdHlwZSogX19nZW5kKQogICAgICB7CiAgICAgICAgX01faW5fYmVnID0gX19nYmVnOwog ICAgICAgIF9NX2luX2N1ciA9IF9fZ25leHQ7CiAgICAgICAgX01faW5fZW5kID0gX19nZW5kOwog ICAgICAgIGlmICghKF9NX21vZGUgJiBpb3NfYmFzZTo6aW4pICYmIF9fZ2JlZyAmJiBfX2duZXh0 ICYmIF9fZ2VuZCkKICAgICAgICAgIF9NX21vZGUgPSBfTV9tb2RlIHwgaW9zX2Jhc2U6OmluOwog ICAgICB9CgoKICAgICAgY2hhcl90eXBlKgogICAgICBwYmFzZSgpIGNvbnN0IHsgcmV0dXJuIF9N X291dF9iZWc7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgcHB0cigpIGNvbnN0IHsgcmV0dXJu IF9NX291dF9jdXI7IH0KCiAgICAgIGNoYXJfdHlwZSoKICAgICAgZXBwdHIoKSBjb25zdCB7IHJl dHVybiBfTV9vdXRfZW5kOyB9CgogICAgICB2b2lkCiAgICAgIHBidW1wKGludCBfX24pIHsgX01f b3V0X2N1ciArPSBfX247IH0KCiAgICAgIHZvaWQKICAgICAgc2V0cChjaGFyX3R5cGUqIF9fcGJl ZywgY2hhcl90eXBlKiBfX3BlbmQpCiAgICAgIHsKICAgICAgICBfTV9vdXRfYmVnID0gX01fb3V0 X2N1ciA9IF9fcGJlZzsKICAgICAgICBfTV9vdXRfZW5kID0gX19wZW5kOwogICAgICAgIGlmICgh KF9NX21vZGUgJiBpb3NfYmFzZTo6b3V0KSAmJiBfX3BiZWcgJiYgX19wZW5kKQogICAgICAgICAg X01fbW9kZSA9IF9NX21vZGUgfCBpb3NfYmFzZTo6b3V0OwogICAgICB9CgoKCiAgICAgIHZpcnR1 YWwgdm9pZAogICAgICBpbWJ1ZShjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgICB7CiAgICAgICAg X01fYnVmX2xvY2FsZV9pbml0ID0gdHJ1ZTsKICAgICAgICBpZiAoX01fYnVmX2xvY2FsZSAhPSBf X2xvYykKICAgICAgICAgIF9NX2J1Zl9sb2NhbGUgPSBfX2xvYzsKICAgICAgfQoKCiAgICAgIHZp cnR1YWwgYmFzaWNfc3RyZWFtYnVmPGNoYXJfdHlwZSxfVHJhaXRzPioKICAgICAgc2V0YnVmKGNo YXJfdHlwZSosIHN0cmVhbXNpemUpCiAgICAgIHsgcmV0dXJuIHRoaXM7IH0KCiAgICAgIHZpcnR1 YWwgcG9zX3R5cGUKICAgICAgc2Vla29mZihvZmZfdHlwZSwgaW9zX2Jhc2U6OnNlZWtkaXIsCiAg ICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6 Om91dCkKICAgICAgeyByZXR1cm4gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKTsgfQoKICAgICAgdmly dHVhbCBwb3NfdHlwZQogICAgICBzZWVrcG9zKHBvc190eXBlLAogICAgICAgICAgICAgIGlvc19i YXNlOjpvcGVubW9kZSA9IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgcmV0 dXJuIHBvc190eXBlKG9mZl90eXBlKC0xKSk7IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIHN5 bmMoKSB7IHJldHVybiAwOyB9CgoKICAgICAgdmlydHVhbCBzdHJlYW1zaXplCiAgICAgIHNob3dt YW55YygpIHsgcmV0dXJuIDA7IH0KCiAgICAgIHZpcnR1YWwgc3RyZWFtc2l6ZQogICAgICB4c2dl dG4oY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHZpcnR1YWwgaW50X3R5 cGUKICAgICAgdW5kZXJmbG93KCkKICAgICAgeyByZXR1cm4gdHJhaXRzX3R5cGU6OmVvZigpOyB9 CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIHVmbG93KCkKICAgICAgewogICAgICAgIGlu dF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGJvb2wgX190ZXN0ZW9m ID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKHRoaXMtPnVuZGVyZmxvdygpLCBfX3JldCk7CiAg ICAgICAgYm9vbCBfX3Rlc3RwZW5kaW5nID0gX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2lu X2VuZDsKICAgICAgICBpZiAoIV9fdGVzdGVvZiAmJiBfX3Rlc3RwZW5kaW5nKQogICAgICAgICAg ewogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19pbnRfdHlwZSgqX01faW5fY3Vy KTsKICAgICAgICAgICAgKytfTV9pbl9jdXI7CiAgICAgICAgICAgIGlmIChfTV9idWZfdW5pZmll ZCAmJiBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAgICAgICArK19NX291dF9jdXI7 CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9fcmV0OwogICAgICB9CgoKICAgICAgdmlydHVh bCBpbnRfdHlwZQogICAgICBwYmFja2ZhaWwoaW50X3R5cGUgPSB0cmFpdHNfdHlwZTo6ZW9mKCkp CiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQoKCiAgICAgIHZpcnR1YWwgc3Ry ZWFtc2l6ZQogICAgICB4c3B1dG4oY29uc3QgY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19u KTsKCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgb3ZlcmZsb3coaW50X3R5cGUgPSB0cmFp dHNfdHlwZTo6ZW9mKCkpCiAgICAgIHsgcmV0dXJuIHRyYWl0c190eXBlOjplb2YoKTsgfQojIDQ4 NSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAzCiAgICBwcml2YXRlOgog ICAgICBiYXNpY19zdHJlYW1idWYoY29uc3QgX19zdHJlYW1idWZfdHlwZSYpIHsgfTsKCiAgICAg IF9fc3RyZWFtYnVmX3R5cGUmCiAgICAgIG9wZXJhdG9yPShjb25zdCBfX3N0cmVhbWJ1Zl90eXBl JikgeyByZXR1cm4gKnRoaXM7IH07CgogICAgfTsKfQoKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvYml0cy9zdHJlYW1idWYudGNjIiAzCgpuYW1lc3BhY2Ugc3RkCnsKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjb25zdCBzaXplX3QK ICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYmFja19zaXplOwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVh bWJ1ZjxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHNidW1wYygpCiAgICB7CiAgICAgIGludF90eXBl IF9fcmV0OwogICAgICBpZiAoX01faW5fY3VyICYmIF9NX2luX2N1ciA8IF9NX2luX2VuZCkKICAg ICAgICB7CiAgICAgICAgICBjaGFyX3R5cGUgX19jID0gKih0aGlzLT5ncHRyKCkpOwogICAgICAg ICAgX01faW5fY3VyX21vdmUoMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p bnRfdHlwZShfX2MpOwogICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fcmV0ID0gdGhpcy0+ dWZsb3coKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFp dHM+OjoKICAgIHNwdXRiYWNrYyhjaGFyX3R5cGUgX19jKQogICAgewogICAgICBpbnRfdHlwZSBf X3JldDsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9jdXIgJiYgX01faW5fYmVnIDwgX01f aW5fY3VyOwogICAgICBib29sIF9fdGVzdG5lID0gX01faW5fY3VyICYmICF0cmFpdHNfdHlwZTo6 ZXEoX19jLCB0aGlzLT5ncHRyKClbLTFdKTsKICAgICAgaWYgKCFfX3Rlc3Rwb3MgfHwgX190ZXN0 bmUpCiAgICAgICAgX19yZXQgPSBwYmFja2ZhaWwodHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKF9f YykpOwogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX01faW5fY3VyX21vdmUoLTEpOwog ICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoKnRoaXMtPmdwdHIoKSk7 CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmVhbWJ1Zjxf Q2hhclQsIF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgc3VuZ2V0YygpCiAgICB7CiAgICAgIGludF90eXBlIF9fcmV0OwogICAgICBp ZiAoX01faW5fY3VyICYmIF9NX2luX2JlZyA8IF9NX2luX2N1cikKICAgICAgICB7CiAgICAgICAg ICBfTV9pbl9jdXJfbW92ZSgtMSk7CiAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjp0b19p bnRfdHlwZSgqX01faW5fY3VyKTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9 IHRoaXMtPnBiYWNrZmFpbCgpOwogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFz aWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz46OmludF90eXBlCiAgICBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzcHV0YyhjaGFyX3R5cGUgX19jKQogICAgewogICAg ICBpbnRfdHlwZSBfX3JldDsKICAgICAgaWYgKF9NX291dF9idWZfc2l6ZSgpKQogICAgICAgIHsK ICAgICAgICAgICpfTV9vdXRfY3VyID0gX19jOwogICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEp OwogICAgICAgICAgX19yZXQgPSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19jKTsKICAgICAg ICB9CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHRoaXMtPm92ZXJmbG93KHRyYWl0c190eXBl Ojp0b19pbnRfdHlwZShfX2MpKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBi YXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c2dldG4oY2hhcl90eXBlKiBf X3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9fcmV0ID0gMDsKICAg ICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX2J1Zl9s ZW4gPSBfTV9pbl9lbmQgLSBfTV9pbl9jdXI7CiAgICAgICAgICBpZiAoX19idWZfbGVuID4gMCkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIHNpemVfdCBfX3JlbWFpbmluZyA9IF9fbiAtIF9f cmV0OwogICAgICAgICAgICAgIHNpemVfdCBfX2xlbiA9IG1pbihfX2J1Zl9sZW4sIF9fcmVtYWlu aW5nKTsKICAgICAgICAgICAgICB0cmFpdHNfdHlwZTo6Y29weShfX3MsIF9NX2luX2N1ciwgX19s ZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAgICAgICAgIF9fcyArPSBf X2xlbjsKICAgICAgICAgICAgICBfTV9pbl9jdXJfbW92ZShfX2xlbik7CiAgICAgICAgICAgIH0K CiAgICAgICAgICBpZiAoX19yZXQgPCBfX24pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp bnRfdHlwZSBfX2MgPSB0aGlzLT51ZmxvdygpOwogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgdHJhaXRzX3R5cGU6OmFzc2lnbigqX19zKyssIHRyYWl0c190 eXBlOjp0b19jaGFyX3R5cGUoX19jKSk7CiAgICAgICAgICAgICAgICAgICsrX19yZXQ7CiAgICAg ICAgICAgICAgICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgYnJlYWs7CiAg ICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXpl CiAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPjo6CiAgICB4c3B1dG4oY29uc3Qg Y2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzdHJlYW1zaXplIF9f cmV0ID0gMDsKICAgICAgd2hpbGUgKF9fcmV0IDwgX19uKQogICAgICAgIHsKICAgICAgICAgIG9m Zl90eXBlIF9fYnVmX2xlbiA9IF9NX291dF9idWZfc2l6ZSgpOwogICAgICAgICAgaWYgKF9fYnVm X2xlbiA+IDApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBvZmZfdHlwZSBfX3JlbWFpbmlu ZyA9IF9fbiAtIF9fcmV0OwogICAgICAgICAgICAgIG9mZl90eXBlIF9fbGVuID0gbWluKF9fYnVm X2xlbiwgX19yZW1haW5pbmcpOwogICAgICAgICAgICAgIHRyYWl0c190eXBlOjpjb3B5KF9NX291 dF9jdXIsIF9fcywgX19sZW4pOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9fbGVuOwogICAgICAg ICAgICAgIF9fcyArPSBfX2xlbjsKICAgICAgICAgICAgICBfTV9vdXRfY3VyX21vdmUoX19sZW4p OwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKF9fcmV0IDwgX19uKQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gdGhpcy0+b3ZlcmZsb3codHJhaXRzX3R5cGU6 OnRvX2ludF90eXBlKCpfX3MpKTsKICAgICAgICAgICAgICBpZiAoIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIHRyYWl0c190eXBlOjplb2YoKSkpCiAgICAgICAgICAgICAgICB7CiAgICAg ICAgICAgICAgICAgICsrX19yZXQ7CiAgICAgICAgICAgICAgICAgICsrX19zOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgoKCgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJlYW1zaXplCiAgICBf X2NvcHlfc3RyZWFtYnVmcyhiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPiYgX19pb3MsCiAgICAg ICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYmlu LAogICAgICAgICAgICAgICAgICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4q IF9fc2JvdXQpCiAgewogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGlu dF90eXBlOwoKICAgICAgc3RyZWFtc2l6ZSBfX3JldCA9IDA7CiAgICAgIHN0cmVhbXNpemUgX19i dWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICBzdHJlYW1zaXplIF9feHRyY3Q7CiAg ICAgIGJvb2wgX190ZXN0cHV0ID0gX19zYm91dC0+X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAg ICAgIHRyeQogICAgICAgIHsKICAgICAgICAgIHdoaWxlIChfX3Rlc3RwdXQgJiYgX19idWZzaXpl ICE9IC0xKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX194dHJjdCA9IF9fc2JvdXQtPnNw dXRuKF9fc2Jpbi0+Z3B0cigpLCBfX2J1ZnNpemUpOwogICAgICAgICAgICAgIF9fcmV0ICs9IF9f eHRyY3Q7CiAgICAgICAgICAgICAgX19zYmluLT5fTV9pbl9jdXJfbW92ZShfX3h0cmN0KTsKICAg ICAgICAgICAgICBpZiAoX194dHJjdCA9PSBfX2J1ZnNpemUpCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIGlmIChfVHJhaXRzOjplcV9pbnRfdHlwZShfX3NiaW4tPnNnZXRjKCks IF9UcmFpdHM6OmVvZigpKSkKICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg ICAgICAgX19idWZzaXplID0gX19zYmluLT5pbl9hdmFpbCgpOwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICB7CiAgICAgICAg ICBfX2lvcy5zZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICBpZiAoKF9faW9z LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpmYWlsYml0KSAhPSAwKQogICAgICAgICAgICB0aHJv dzsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUKICAgIHN0 cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJhc2ljX2lvczxjaGFyPiYsIGJhc2ljX3N0 cmVhbWJ1ZjxjaGFyPiosCiAgICAgICAgICAgICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8Y2hh cj4qKTsKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUKICAgIHN0cmVhbXNpemUKICAgIF9fY29weV9zdHJlYW1idWZzKGJh c2ljX2lvczx3Y2hhcl90PiYsIGJhc2ljX3N0cmVhbWJ1Zjx3Y2hhcl90PiosCiAgICAgICAgICAg ICAgICAgICAgICBiYXNpY19zdHJlYW1idWY8d2NoYXJfdD4qKTsKfQojIDQ5OSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvc3RyZWFtYnVmIiAyIDMKIyA1MSAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvaW9zIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jh c2ljX2lvcy5oIiAxIDMKIyAzOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNp Y19pb3MuaCIgMwoKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0cmVhbWJ1 Zl9pdGVyYXRvci5oIiAxIDMKIyA0MiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dHJlYW1idWZfaXRlcmF0b3IuaCIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGlzdHJlYW1idWZfaXRlcmF0 b3IKICAgIDogcHVibGljIGl0ZXJhdG9yPGlucHV0X2l0ZXJhdG9yX3RhZywgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzOjpvZmZfdHlwZSwKICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCosIF9D aGFyVCY+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7 CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1i dWY8X0NoYXJULCBfVHJhaXRzPiBzdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gaXN0cmVhbV90eXBlOwoKICAgIHByaXZhdGU6CgoKCgoK CgogICAgICBtdXRhYmxlIHN0cmVhbWJ1Zl90eXBlKiBfTV9zYnVmOwogICAgICBpbnRfdHlwZSBf TV9jOwoKICAgIHB1YmxpYzoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvcigpIHRocm93KCkKICAg ICAgOiBfTV9zYnVmKDApLCBfTV9jKHRyYWl0c190eXBlOjplb2YoKSkgeyB9CgogICAgICBpc3Ry ZWFtYnVmX2l0ZXJhdG9yKGlzdHJlYW1fdHlwZSYgX19zKSB0aHJvdygpCiAgICAgIDogX01fc2J1 ZihfX3MucmRidWYoKSksIF9NX2ModHJhaXRzX3R5cGU6OmVvZigpKSB7IH0KCiAgICAgIGlzdHJl YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3coKQogICAgICA6IF9NX3Ni dWYoX19zKSwgX01fYyh0cmFpdHNfdHlwZTo6ZW9mKCkpIHsgfQoKCiAgICAgIGNoYXJfdHlwZQog ICAgICBvcGVyYXRvciooKSBjb25zdAogICAgICB7IHJldHVybiB0cmFpdHNfdHlwZTo6dG9fY2hh cl90eXBlKF9NX2dldCgpKTsgfQoKICAgICAgaXN0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAgb3Bl cmF0b3IrKygpCiAgICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgICBpZiAoX01fc2J1ZiAmJiB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5 cGUoX01fc2J1Zi0+c2J1bXBjKCksIF9fZW9mKSkKICAgICAgICAgIF9NX3NidWYgPSAwOwogICAg ICAgIGVsc2UKICAgICAgICAgIF9NX2MgPSBfX2VvZjsKICAgICAgICByZXR1cm4gKnRoaXM7CiAg ICAgIH0KCiAgICAgIGlzdHJlYW1idWZfaXRlcmF0b3IKICAgICAgb3BlcmF0b3IrKyhpbnQpCiAg ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICBpc3RyZWFtYnVmX2l0ZXJhdG9yIF9fb2xkID0gKnRoaXM7CiAgICAgICAgaWYgKF9N X3NidWYKICAgICAgICAgICAgJiYgdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKChfX29sZC5fTV9j ID0gX01fc2J1Zi0+c2J1bXBjKCkpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19lb2YpKQogICAgICAgICAgX01fc2J1ZiA9IDA7CiAgICAgICAgZWxzZQogICAgICAg ICAgX01fYyA9IF9fZW9mOwogICAgICAgIHJldHVybiBfX29sZDsKICAgICAgfQoKCgoKICAgICAg Ym9vbAogICAgICBlcXVhbChjb25zdCBpc3RyZWFtYnVmX2l0ZXJhdG9yJiBfX2IpIGNvbnN0CiAg ICAgIHsKICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgICBib29sIF9fdGhpc2VvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfTV9nZXQo KSwgX19lb2YpOwogICAgICAgIGJvb2wgX19iZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYi5fTV9nZXQoKSwgX19lb2YpOwogICAgICAgIHJldHVybiAoX190aGlzZW9mICYmIF9fYmVv ZiB8fCAoIV9fdGhpc2VvZiAmJiAhX19iZW9mKSk7CiAgICAgIH0KCgogICAgcHJpdmF0ZToKICAg ICAgaW50X3R5cGUKICAgICAgX01fZ2V0KCkgY29uc3QKICAgICAgewogICAgICAgIGNvbnN0IGlu dF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgIGludF90eXBlIF9fcmV0 ID0gX19lb2Y7CiAgICAgICAgaWYgKF9NX3NidWYpCiAgICAgICAgICB7CiAgICAgICAgICAgIGlm ICghdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9NX2MsIF9fZW9mKSkKICAgICAgICAgICAgICBf X3JldCA9IF9NX2M7CiAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5 cGU6OmVxX2ludF90eXBlKChfX3JldCA9IF9NX3NidWYtPnNnZXRjKCkpLCBfX2VvZikpCiAgICAg ICAgICAgICAgICBfTV9zYnVmID0gMDsKICAgICAgICAgIH0KICAgICAgICByZXR1cm4gX19yZXQ7 CiAgICAgIH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IGlzdHJlYW1idWZfaXRl cmF0b3I8X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuIF9fYS5lcXVh bChfX2IpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4K ICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiYgX19hLAogICAgICAgICAgICAgICBjb25zdCBpc3RyZWFtYnVmX2l0 ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mIF9fYikKICAgIHsgcmV0dXJuICFfX2EuZXF1YWwoX19i KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBj bGFzcyBvc3RyZWFtYnVmX2l0ZXJhdG9yCiAgICA6IHB1YmxpYyBpdGVyYXRvcjxvdXRwdXRfaXRl cmF0b3JfdGFnLCB2b2lkLCB2b2lkLCB2b2lkLCB2b2lkPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRz X3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4gc3Ry ZWFtYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ IG9zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBzdHJlYW1idWZfdHlwZSogX01fc2J1 ZjsKICAgICAgYm9vbCBfTV9mYWlsZWQ7CgogICAgcHVibGljOgogICAgICBpbmxpbmUKICAgICAg b3N0cmVhbWJ1Zl9pdGVyYXRvcihvc3RyZWFtX3R5cGUmIF9fcykgdGhyb3cgKCkKICAgICAgOiBf TV9zYnVmKF9fcy5yZGJ1ZigpKSwgX01fZmFpbGVkKCFfTV9zYnVmKSB7IH0KCiAgICAgIG9zdHJl YW1idWZfaXRlcmF0b3Ioc3RyZWFtYnVmX3R5cGUqIF9fcykgdGhyb3cgKCkKICAgICAgOiBfTV9z YnVmKF9fcyksIF9NX2ZhaWxlZCghX01fc2J1ZikgeyB9CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvcj0oX0NoYXJUIF9fYyk7CgogICAgICBvc3RyZWFtYnVmX2l0ZXJh dG9yJgogICAgICBvcGVyYXRvciooKSB0aHJvdygpCiAgICAgIHsgcmV0dXJuICp0aGlzOyB9Cgog ICAgICBvc3RyZWFtYnVmX2l0ZXJhdG9yJgogICAgICBvcGVyYXRvcisrKGludCkgdGhyb3coKQog ICAgICB7IHJldHVybiAqdGhpczsgfQoKICAgICAgb3N0cmVhbWJ1Zl9pdGVyYXRvciYKICAgICAg b3BlcmF0b3IrKygpIHRocm93KCkKICAgICAgeyByZXR1cm4gKnRoaXM7IH0KCiAgICAgIGJvb2wK ICAgICAgZmFpbGVkKCkgY29uc3QgdGhyb3coKQogICAgICB7IHJldHVybiBfTV9mYWlsZWQ7IH0K ICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAg IGlubGluZSBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBvc3RyZWFt YnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPShfQ2hhclQgX19jKQogICAg ewogICAgICBpZiAoIV9NX2ZhaWxlZCAmJgogICAgICAgICAgX1RyYWl0czo6ZXFfaW50X3R5cGUo X01fc2J1Zi0+c3B1dGMoX19jKSwgX1RyYWl0czo6ZW9mKCkpKQogICAgICAgIF9NX2ZhaWxlZCA9 IHRydWU7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KfQojIDQxICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lvcy5oIiAyIDMKIyAxICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMuaCIgMSAzCiMgNDQgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCgoKIyAxICIvdXNyL2xvY2FsL2luY2x1 ZGUvYysrLzMuMi9jd2N0eXBlIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Y3djdHlwZSIgMwoKCgoKIyAxICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDEgMwojIDM1ICIvdXNy L2luY2x1ZGUvd2N0eXBlLmgiIDMKIyAxICIvdXNyL2xvY2FsL2xpYi9nY2MtbGliL2k2ODYtcGMt bGludXgtZ251LzMuMi9pbmNsdWRlL3N0ZGRlZi5oIiAxIDMKIyAzNiAiL3Vzci9pbmNsdWRlL3dj dHlwZS5oIiAyIDMKIyA2MSAiL3Vzci9pbmNsdWRlL3djdHlwZS5oIiAzCnR5cGVkZWYgdW5zaWdu ZWQgbG9uZyBpbnQgd2N0eXBlX3Q7CiMgNzkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwplbnVt CnsKICBfX0lTd3VwcGVyID0gMCwKICBfX0lTd2xvd2VyID0gMSwKICBfX0lTd2FscGhhID0gMiwK ICBfX0lTd2RpZ2l0ID0gMywKICBfX0lTd3hkaWdpdCA9IDQsCiAgX19JU3dzcGFjZSA9IDUsCiAg X19JU3dwcmludCA9IDYsCiAgX19JU3dncmFwaCA9IDcsCiAgX19JU3dibGFuayA9IDgsCiAgX19J U3djbnRybCA9IDksCiAgX19JU3dwdW5jdCA9IDEwLAogIF9fSVN3YWxudW0gPSAxMSwKCiAgX0lT d3VwcGVyID0gKChfX0lTd3VwcGVyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBlcikp IDw8IDI0KSA6ICgoX19JU3d1cHBlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd3VwcGVy KSkgPDwgOCkgOiAoKF9fSVN3dXBwZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d1cHBl cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3dXBwZXIpKSA+PiAyNCkpKSksCiAgX0lT d2xvd2VyID0gKChfX0lTd2xvd2VyKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dlcikp IDw8IDI0KSA6ICgoX19JU3dsb3dlcikgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2xvd2Vy KSkgPDwgOCkgOiAoKF9fSVN3bG93ZXIpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dsb3dl cikpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3bG93ZXIpKSA+PiAyNCkpKSksCiAgX0lT d2FscGhhID0gKChfX0lTd2FscGhhKSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBoYSkp IDw8IDI0KSA6ICgoX19JU3dhbHBoYSkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2FscGhh KSkgPDwgOCkgOiAoKF9fSVN3YWxwaGEpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dhbHBo YSkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3YWxwaGEpKSA+PiAyNCkpKSksCiAgX0lT d2RpZ2l0ID0gKChfX0lTd2RpZ2l0KSA8IDggPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdpdCkp IDw8IDI0KSA6ICgoX19JU3dkaWdpdCkgPCAxNiA/IChpbnQpICgoMVVMIDw8IChfX0lTd2RpZ2l0 KSkgPDwgOCkgOiAoKF9fSVN3ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19JU3dkaWdp dCkpID4+IDgpIDogKGludCkgKCgxVUwgPDwgKF9fSVN3ZGlnaXQpKSA+PiAyNCkpKSksCiAgX0lT d3hkaWdpdCA9ICgoX19JU3d4ZGlnaXQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdp dCkpIDw8IDI0KSA6ICgoX19JU3d4ZGlnaXQpIDwgMTYgPyAoaW50KSAoKDFVTCA8PCAoX19JU3d4 ZGlnaXQpKSA8PCA4KSA6ICgoX19JU3d4ZGlnaXQpIDwgMjQgPyAoaW50KSAoKDFVTCA8PCAoX19J U3d4ZGlnaXQpKSA+PiA4KSA6IChpbnQpICgoMVVMIDw8IChfX0lTd3hkaWdpdCkpID4+IDI0KSkp KSwKICBfSVN3c3BhY2UgPSAoKF9fSVN3c3BhY2UpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3NwYWNlKSkgPDwgMjQpIDogKChfX0lTd3NwYWNlKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3c3BhY2UpKSA8PCA4KSA6ICgoX19JU3dzcGFjZSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3NwYWNlKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dzcGFjZSkpID4+IDI0KSkp KSwKICBfSVN3cHJpbnQgPSAoKF9fSVN3cHJpbnQpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3ByaW50KSkgPDwgMjQpIDogKChfX0lTd3ByaW50KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3cHJpbnQpKSA8PCA4KSA6ICgoX19JU3dwcmludCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3ByaW50KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwcmludCkpID4+IDI0KSkp KSwKICBfSVN3Z3JhcGggPSAoKF9fSVN3Z3JhcGgpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2dyYXBoKSkgPDwgMjQpIDogKChfX0lTd2dyYXBoKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3Z3JhcGgpKSA8PCA4KSA6ICgoX19JU3dncmFwaCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2dyYXBoKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dncmFwaCkpID4+IDI0KSkp KSwKICBfSVN3YmxhbmsgPSAoKF9fSVN3YmxhbmspIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2JsYW5rKSkgPDwgMjQpIDogKChfX0lTd2JsYW5rKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YmxhbmspKSA8PCA4KSA6ICgoX19JU3dibGFuaykgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2JsYW5rKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dibGFuaykpID4+IDI0KSkp KSwKICBfSVN3Y250cmwgPSAoKF9fSVN3Y250cmwpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2NudHJsKSkgPDwgMjQpIDogKChfX0lTd2NudHJsKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3Y250cmwpKSA8PCA4KSA6ICgoX19JU3djbnRybCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2NudHJsKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3djbnRybCkpID4+IDI0KSkp KSwKICBfSVN3cHVuY3QgPSAoKF9fSVN3cHVuY3QpIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d3B1bmN0KSkgPDwgMjQpIDogKChfX0lTd3B1bmN0KSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3cHVuY3QpKSA8PCA4KSA6ICgoX19JU3dwdW5jdCkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd3B1bmN0KSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dwdW5jdCkpID4+IDI0KSkp KSwKICBfSVN3YWxudW0gPSAoKF9fSVN3YWxudW0pIDwgOCA/IChpbnQpICgoMVVMIDw8IChfX0lT d2FsbnVtKSkgPDwgMjQpIDogKChfX0lTd2FsbnVtKSA8IDE2ID8gKGludCkgKCgxVUwgPDwgKF9f SVN3YWxudW0pKSA8PCA4KSA6ICgoX19JU3dhbG51bSkgPCAyNCA/IChpbnQpICgoMVVMIDw8IChf X0lTd2FsbnVtKSkgPj4gOCkgOiAoaW50KSAoKDFVTCA8PCAoX19JU3dhbG51bSkpID4+IDI0KSkp KQp9OwoKCgpleHRlcm4gIkMiIHsKCgoKCgoKCmV4dGVybiBpbnQgaXN3YWxudW0gKHdpbnRfdCBf X3djKSA7CgoKCgoKZXh0ZXJuIGludCBpc3dhbHBoYSAod2ludF90IF9fd2MpIDsKCgpleHRlcm4g aW50IGlzd2NudHJsICh3aW50X3QgX193YykgOwoKCgpleHRlcm4gaW50IGlzd2RpZ2l0ICh3aW50 X3QgX193YykgOwoKCgpleHRlcm4gaW50IGlzd2dyYXBoICh3aW50X3QgX193YykgOwoKCgoKZXh0 ZXJuIGludCBpc3dsb3dlciAod2ludF90IF9fd2MpIDsKCgpleHRlcm4gaW50IGlzd3ByaW50ICh3 aW50X3QgX193YykgOwoKCgoKZXh0ZXJuIGludCBpc3dwdW5jdCAod2ludF90IF9fd2MpIDsKCgoK CmV4dGVybiBpbnQgaXN3c3BhY2UgKHdpbnRfdCBfX3djKSA7CgoKCgpleHRlcm4gaW50IGlzd3Vw cGVyICh3aW50X3QgX193YykgOwoKCgoKZXh0ZXJuIGludCBpc3d4ZGlnaXQgKHdpbnRfdCBfX3dj KSA7CgoKCgoKZXh0ZXJuIGludCBpc3dibGFuayAod2ludF90IF9fd2MpIDsKIyAxNzggIi91c3Iv aW5jbHVkZS93Y3R5cGUuaCIgMwpleHRlcm4gd2N0eXBlX3Qgd2N0eXBlIChjb25zdCBjaGFyICpf X3Byb3BlcnR5KSA7CgoKCmV4dGVybiBpbnQgaXN3Y3R5cGUgKHdpbnRfdCBfX3djLCB3Y3R5cGVf dCBfX2Rlc2MpIDsKIyAyNDkgIi91c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp0eXBlZGVmIGNvbnN0 IF9faW50MzJfdCAqd2N0cmFuc190OwoKCmV4dGVybiB3aW50X3QgdG93bG93ZXIgKHdpbnRfdCBf X3djKSA7CgoKZXh0ZXJuIHdpbnRfdCB0b3d1cHBlciAod2ludF90IF9fd2MpIDsKIyAyNzUgIi91 c3IvaW5jbHVkZS93Y3R5cGUuaCIgMwp9CiMgMjg4ICIvdXNyL2luY2x1ZGUvd2N0eXBlLmgiIDMK ZXh0ZXJuICJDIiB7CgoKCmV4dGVybiB3Y3RyYW5zX3Qgd2N0cmFucyAoY29uc3QgY2hhciAqX19w cm9wZXJ0eSkgOwoKCmV4dGVybiB3aW50X3QgdG93Y3RyYW5zICh3aW50X3QgX193Yywgd2N0cmFu c190IF9fZGVzYykgOwoKCgoKCgoKZXh0ZXJuIGludCBfX2lzd2FsbnVtX2wgKHdpbnRfdCBfX3dj LCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCgoKZXh0ZXJuIGludCBfX2lzd2FscGhhX2wgKHdp bnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKZXh0ZXJuIGludCBfX2lzd2NudHJs X2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCmV4dGVybiBpbnQgX19p c3dkaWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgpleHRlcm4g aW50IF9faXN3Z3JhcGhfbCAod2ludF90IF9fd2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIDsKCgoK CmV4dGVybiBpbnQgX19pc3dsb3dlcl9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2Fs ZSkgOwoKCmV4dGVybiBpbnQgX19pc3dwcmludF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBf X2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzd3B1bmN0X2wgKHdpbnRfdCBfX3djLCBfX2xv Y2FsZV90IF9fbG9jYWxlKSA7CgoKCgpleHRlcm4gaW50IF9faXN3c3BhY2VfbCAod2ludF90IF9f d2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpIDsKCgoKCmV4dGVybiBpbnQgX19pc3d1cHBlcl9sICh3 aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGludCBfX2lzd3hk aWdpdF9sICh3aW50X3QgX193YywgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgoKZXh0ZXJuIGlu dCBfX2lzd2JsYW5rX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9jYWxlKSA7CgoKCmV4 dGVybiB3Y3R5cGVfdCBfX3djdHlwZV9sIChjb25zdCBjaGFyICpfX3Byb3BlcnR5LCBfX2xvY2Fs ZV90IF9fbG9jYWxlKQogICAgIDsKCgoKZXh0ZXJuIGludCBfX2lzd2N0eXBlX2wgKHdpbnRfdCBf X3djLCB3Y3R5cGVfdCBfX2Rlc2MsIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgOwoKCgoKCgoK ZXh0ZXJuIHdpbnRfdCBfX3Rvd2xvd2VyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2FsZV90IF9fbG9j YWxlKSA7CgoKZXh0ZXJuIHdpbnRfdCBfX3Rvd3VwcGVyX2wgKHdpbnRfdCBfX3djLCBfX2xvY2Fs ZV90IF9fbG9jYWxlKSA7CgoKCmV4dGVybiB3Y3RyYW5zX3QgX193Y3RyYW5zX2wgKGNvbnN0IGNo YXIgKl9fcHJvcGVydHksIF9fbG9jYWxlX3QgX19sb2NhbGUpCiAgICAgOwoKCmV4dGVybiB3aW50 X3QgX190b3djdHJhbnNfbCAod2ludF90IF9fd2MsIHdjdHJhbnNfdCBfX2Rlc2MsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19sb2NhbGVfdCBfX2xvY2FsZSkgOwoKCgp9CiMgNTMgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2N3Y3R5cGUiIDIgMwojIDc3ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9jd2N0eXBlIiAzCm5hbWVzcGFjZSBzdGQKewogIHVzaW5nIDo6d2ludF90 OwoKICB1c2luZyA6OndjdHlwZV90OwogIHVzaW5nIDo6d2N0cmFuc190OwoKICB1c2luZyA6Omlz d2FsbnVtOwogIHVzaW5nIDo6aXN3YWxwaGE7CiAgdXNpbmcgOjppc3dibGFuazsKICB1c2luZyA6 Omlzd2NudHJsOwogIHVzaW5nIDo6aXN3ZGlnaXQ7CiAgdXNpbmcgOjppc3dncmFwaDsKICB1c2lu ZyA6Omlzd2xvd2VyOwogIHVzaW5nIDo6aXN3cHJpbnQ7CiAgdXNpbmcgOjppc3dwcmludDsKICB1 c2luZyA6Omlzd3B1bmN0OwogIHVzaW5nIDo6aXN3c3BhY2U7CiAgdXNpbmcgOjppc3d1cHBlcjsK ICB1c2luZyA6Omlzd3hkaWdpdDsKICB1c2luZyA6Omlzd2N0eXBlOwogIHVzaW5nIDo6dG93bG93 ZXI7CiAgdXNpbmcgOjp0b3d1cHBlcjsKICB1c2luZyA6OnRvd2N0cmFuczsKICB1c2luZyA6Ondj dHJhbnM7CiAgdXNpbmcgOjp3Y3R5cGU7Cn0KIyA0NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL2lvcyIgMSAzCiMgNDggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxl X2ZhY2V0cy5oIiAyIDMKCm5hbWVzcGFjZSBzdGQKewoKCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBzdHJ1Y3QgX19wYWQ7CgoKCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jdHlwZV9iYXNl LmgiIDEgMwojIDUwICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9pNjg2LXBjLWxpbnV4LWdu dS9iaXRzL2N0eXBlX2Jhc2UuaCIgMwogIHN0cnVjdCBjdHlwZV9iYXNlCiAgewoKICAgIHR5cGVk ZWYgY29uc3QgaW50KiBfX3RvX3R5cGU7CgoKCiAgICB0eXBlZGVmIHVuc2lnbmVkIHNob3J0IG1h c2s7CiAgICBzdGF0aWMgY29uc3QgbWFzayB1cHBlciA9IF9JU3VwcGVyOwogICAgc3RhdGljIGNv bnN0IG1hc2sgbG93ZXIgPSBfSVNsb3dlcjsKICAgIHN0YXRpYyBjb25zdCBtYXNrIGFscGhhID0g X0lTYWxwaGE7CiAgICBzdGF0aWMgY29uc3QgbWFzayBkaWdpdCA9IF9JU2RpZ2l0OwogICAgc3Rh dGljIGNvbnN0IG1hc2sgeGRpZ2l0ID0gX0lTeGRpZ2l0OwogICAgc3RhdGljIGNvbnN0IG1hc2sg c3BhY2UgPSBfSVNzcGFjZTsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHByaW50ID0gX0lTcHJpbnQ7 CiAgICBzdGF0aWMgY29uc3QgbWFzayBncmFwaCA9IF9JU2dyYXBoOwogICAgc3RhdGljIGNvbnN0 IG1hc2sgY250cmwgPSBfSVNjbnRybDsKICAgIHN0YXRpYyBjb25zdCBtYXNrIHB1bmN0ID0gX0lT cHVuY3Q7CiAgICBzdGF0aWMgY29uc3QgbWFzayBhbG51bSA9IF9JU2FsbnVtOwogIH07CiMgNjQg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9fY3R5cGVfYWJzdHJhY3RfYmFz ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBwdWJsaWMgY3R5cGVfYmFzZQogICAgewogICAgcHVi bGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwoKICAgICAgYm9vbAogICAgICBp cyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f aXMoX19tLCBfX2MpOyB9CgogICAgICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGlzKGNvbnN0IGNo YXJfdHlwZSAqX19sbywgY29uc3QgY2hhcl90eXBlICpfX2hpLCBtYXNrICpfX3ZlYykgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faXMoX19sbywgX19oaSwgX192ZWMpOyB9CgogICAgICBj b25zdCBjaGFyX3R5cGUqCiAgICAgIHNjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSog X19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5k b19zY2FuX2lzKF9fbSwgX19sbywgX19oaSk7IH0KCiAgICAgIGNvbnN0IGNoYXJfdHlwZSoKICAg ICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90 eXBlKiBfX2hpKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19zY2FuX25vdChfX20sIF9f bG8sIF9faGkpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdG91cHBlcihjaGFyX3R5cGUgX19j KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190b3VwcGVyKF9fYyk7IH0KCiAgICAgIGNv bnN0IGNoYXJfdHlwZSoKICAgICAgdG91cHBlcihjaGFyX3R5cGUgKl9fbG8sIGNvbnN0IGNoYXJf dHlwZSogX19oaSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG91cHBlcihfX2xvLCBf X2hpKTsgfQoKICAgICAgY2hhcl90eXBlCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlIF9fYykgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fdG9sb3dlcihfX2MpOyB9CgogICAgICBjb25zdCBj aGFyX3R5cGUqCiAgICAgIHRvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUq IF9faGkpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3RvbG93ZXIoX19sbywgX19oaSk7 IH0KCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFyIF9fYykgY29uc3QKICAgICAgeyBy ZXR1cm4gdGhpcy0+ZG9fd2lkZW4oX19jKTsgfQoKICAgICAgY29uc3QgY2hhcioKICAgICAgd2lk ZW4oY29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX3RvKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb193aWRlbihfX2xvLCBfX2hpLCBfX3RvKTsgfQoK ICAgICAgY2hhcgogICAgICBuYXJyb3coY2hhcl90eXBlIF9fYywgY2hhciBfX2RmYXVsdCkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmFycm93KF9fYywgX19kZmF1bHQpOyB9CgogICAg ICBjb25zdCBjaGFyX3R5cGUqCiAgICAgIG5hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNv bnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyICpf X3RvKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19uYXJyb3coX19sbywgX19oaSwgX19k ZmF1bHQsIF9fdG8pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICBleHBsaWNpdAogICAgICBfX2N0 eXBlX2Fic3RyYWN0X2Jhc2Uoc2l6ZV90IF9fcmVmcyA9IDApOiBsb2NhbGU6OmZhY2V0KF9fcmVm cykgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5fX2N0eXBlX2Fic3RyYWN0X2Jhc2UoKSB7IH0K CiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19pcyhtYXNrIF9fbSwgY2hhcl90eXBlIF9fYykg Y29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNv bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLAogICAgICAgICAgICBt YXNrKiBfX3ZlYykgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAg ICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywKICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwg Y29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90 eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBl KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fdG91 cHBlcihjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSkgY29uc3QgPSAwOwoK ICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0 ID0gMDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb190b2xvd2VyKGNo YXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb193aWRlbihjaGFyKSBjb25zdCA9IDA7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGksCiAgICAgICAgICAgICAgIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdCA9IDA7 CgogICAgICB2aXJ0dWFsIGNoYXIKICAgICAgZG9fbmFycm93KGNoYXJfdHlwZSwgY2hhciBfX2Rm YXVsdCkgY29uc3QgPSAwOwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRv X25hcnJvdyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAg ICAgICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0ID0gMDsKICAg IH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBjdHlwZSA6IHB1Ymxp YyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8X0NoYXJUPgogICAgewogICAgcHVibGljOgoKICAgICAg dHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIGN0eXBlOjpt YXNrIG1hc2s7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKSA6IF9fY3R5cGVfYWJzdHJhY3RfYmFzZTxfQ2hh clQ+KF9fcmVmcykgeyB9CgogICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmN0eXBl KCk7CgogICAgICB2aXJ0dWFsIGJvb2wKICAgICAgZG9faXMobWFzayBfX20sIGNoYXJfdHlwZSBf X2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX2lzKGNv bnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpLCBtYXNrKiBfX3ZlYykg Y29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXJfdHlwZSoKICAgICAgZG9fc2Nhbl9pcyht YXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNv bnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5fbm90KG1h c2sgX19tLCBjb25zdCBjaGFyX3R5cGUqIF9fbG8sCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQogICAgICBkb190 b3VwcGVyKGNoYXJfdHlwZSBfX2MpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBk b190b2xvd2VyKGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY2hhcl90eXBlCiAgICAgIGRvX3dpZGVuKGNoYXIgX19jKSBjb25zdDsK CiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcioKICAgICAgZG9fd2lkZW4oY29uc3QgY2hhciogX19s bywgY29uc3QgY2hhciogX19oaSwgY2hhcl90eXBlKiBfX2Rlc3QpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjaGFyCiAgICAgIGRvX25hcnJvdyhjaGFyX3R5cGUsIGNoYXIgX19kZmF1bHQpIGNvbnN0 OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX25hcnJvdyhjb25zdCBj aGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwKICAgICAgICAgICAgICAgIGNo YXIgX19kZmF1bHQsIGNoYXIqIF9fZGVzdCkgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGN0eXBlPF9DaGFyVD46OmlkOwoKCiAgdGVtcGxh dGU8PgogICAgY2xhc3MgY3R5cGU8Y2hhcj4gOiBwdWJsaWMgX19jdHlwZV9hYnN0cmFjdF9iYXNl PGNoYXI+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIGNoYXIgY2hhcl90eXBlOwoK ICAgIHByb3RlY3RlZDoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY3R5cGU7CiAgICAg IGJvb2wgX01fZGVsOwogICAgICBfX3RvX3R5cGUgX01fdG91cHBlcjsKICAgICAgX190b190eXBl IF9NX3RvbG93ZXI7CiAgICAgIGNvbnN0IG1hc2sqIF9NX3RhYmxlOwoKICAgIHB1YmxpYzoKICAg ICAgc3RhdGljIGxvY2FsZTo6aWQgaWQ7CiAgICAgIHN0YXRpYyBjb25zdCBzaXplX3QgdGFibGVf c2l6ZSA9IDEgKyBzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPigtMSk7CgogICAgICBleHBsaWNp dAogICAgICBjdHlwZShjb25zdCBtYXNrKiBfX3RhYmxlID0gMCwgYm9vbCBfX2RlbCA9IGZhbHNl LCBzaXplX3QgX19yZWZzID0gMCk7CgogICAgICBleHBsaWNpdAogICAgICBjdHlwZShfX2NfbG9j YWxlIF9fY2xvYywgY29uc3QgbWFzayogX190YWJsZSA9IDAsIGJvb2wgX19kZWwgPSBmYWxzZSwK ICAgICAgICAgICAgc2l6ZV90IF9fcmVmcyA9IDApOwoKICAgICAgaW5saW5lIGJvb2wKICAgICAg aXMobWFzayBfX20sIGNoYXIgX19jKSBjb25zdDsKCiAgICAgIGlubGluZSBjb25zdCBjaGFyKgog ICAgICBpcyhjb25zdCBjaGFyKiBfX2xvLCBjb25zdCBjaGFyKiBfX2hpLCBtYXNrKiBfX3ZlYykg Y29uc3Q7CgogICAgICBpbmxpbmUgY29uc3QgY2hhcioKICAgICAgc2Nhbl9pcyhtYXNrIF9fbSwg Y29uc3QgY2hhciogX19sbywgY29uc3QgY2hhciogX19oaSkgY29uc3Q7CgogICAgICBpbmxpbmUg Y29uc3QgY2hhcioKICAgICAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG8sIGNv bnN0IGNoYXIqIF9faGkpIGNvbnN0OwoKICAgIHByb3RlY3RlZDoKICAgICAgY29uc3QgbWFzayoK ICAgICAgdGFibGUoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIF9NX3RhYmxlOyB9Cgog ICAgICBzdGF0aWMgY29uc3QgbWFzayoKICAgICAgY2xhc3NpY190YWJsZSgpIHRocm93KCk7Cgog ICAgICB2aXJ0dWFsCiAgICAgIH5jdHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRv X2lzKG1hc2sgX19tLCBjaGFyX3R5cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3Qg Y2hhcl90eXBlKgogICAgICBkb19pcyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJf dHlwZSogX19oaSwgbWFzayogX192ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFy X3R5cGUqCiAgICAgIGRvX3NjYW5faXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywg Y29uc3QgY2hhcl90eXBlKiBfX2hpKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90 eXBlKgogICAgICBkb19zY2FuX25vdChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmly dHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAg dmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xv LCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUK ICAgICAgZG9fdG9sb3dlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBj aGFyX3R5cGUqCiAgICAgIGRvX3RvbG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5 cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4o Y2hhcikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNv bnN0IGNoYXIqIF9fbG8sIGNvbnN0IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgY2hhcgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9f ZGZhdWx0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19u YXJyb3coY29uc3QgY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAg ICAgICAgICAgICBjaGFyIF9fZGZhdWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwogICAgfTsKCiAg dGVtcGxhdGU8PgogICAgY29uc3QgY3R5cGU8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8Y3R5cGU8Y2hh cj4gPihjb25zdCBsb2NhbGUmIF9fbG9jKTsKCgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjdHlw ZTx3Y2hhcl90PiA6IHB1YmxpYyBfX2N0eXBlX2Fic3RyYWN0X2Jhc2U8d2NoYXJfdD4KICAgIHsK ICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgd2N0eXBlX3QgX193bWFza190eXBlOwoKICAgIHByb3RlY3RlZDoKICAgICAgX19jX2xvY2Fs ZSBfTV9jX2xvY2FsZV9jdHlwZTsKCiAgICBwdWJsaWM6CgogICAgICBzdGF0aWMgbG9jYWxlOjpp ZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKHNpemVfdCBfX3JlZnMgPSAwKTsKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZz ID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICBfX3dtYXNrX3R5cGUKICAgICAgX01fY29udmVy dF90b193bWFzayhjb25zdCBtYXNrIF9fbSkgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5j dHlwZSgpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2lzKG1hc2sgX19tLCBjaGFyX3R5 cGUgX19jKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19p cyhjb25zdCBjaGFyX3R5cGUqIF9fbG8sIGNvbnN0IGNoYXJfdHlwZSogX19oaSwgbWFzayogX192 ZWMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3NjYW5f aXMobWFzayBfX20sIGNvbnN0IGNoYXJfdHlwZSogX19sbywgY29uc3QgY2hhcl90eXBlKiBfX2hp KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19zY2FuX25v dChtYXNrIF9fbSwgY29uc3QgY2hhcl90eXBlKiBfX2xvLAogICAgICAgICAgICAgICAgICBjb25z dCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAg ZG9fdG91cHBlcihjaGFyX3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5 cGUqCiAgICAgIGRvX3RvdXBwZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9f aGkpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdG9sb3dlcihjaGFy X3R5cGUpIGNvbnN0OwoKICAgICAgdmlydHVhbCBjb25zdCBjaGFyX3R5cGUqCiAgICAgIGRvX3Rv bG93ZXIoY2hhcl90eXBlKiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGkpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fd2lkZW4oY2hhcikgY29uc3Q7CgogICAgICB2 aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICAgIGRvX3dpZGVuKGNvbnN0IGNoYXIqIF9fbG8sIGNvbnN0 IGNoYXIqIF9faGksIGNoYXJfdHlwZSogX19kZXN0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgY2hh cgogICAgICBkb19uYXJyb3coY2hhcl90eXBlLCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAg IHZpcnR1YWwgY29uc3QgY2hhcl90eXBlKgogICAgICBkb19uYXJyb3coY29uc3QgY2hhcl90eXBl KiBfX2xvLCBjb25zdCBjaGFyX3R5cGUqIF9faGksCiAgICAgICAgICAgICAgICBjaGFyIF9fZGZh dWx0LCBjaGFyKiBfX2Rlc3QpIGNvbnN0OwoKICAgIH07CgogIHRlbXBsYXRlPD4KICAgIGNvbnN0 IGN0eXBlPHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJiBfX2xvYyk7CgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1s aW51eC1nbnUvYml0cy9jdHlwZV9pbmxpbmUuaCIgMSAzCiMgMzcgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2k2ODYtcGMtbGludXgtZ251L2JpdHMvY3R5cGVfaW5saW5lLmgiIDMKICBib29s CiAgY3R5cGU8Y2hhcj46OgogIGlzKG1hc2sgX19tLCBjaGFyIF9fYykgY29uc3QKICB7IHJldHVy biBfTV90YWJsZVtzdGF0aWNfY2FzdDx1bnNpZ25lZCBjaGFyPihfX2MpXSAmIF9fbTsgfQoKICBj b25zdCBjaGFyKgogIGN0eXBlPGNoYXI+OjoKICBpcyhjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg Y2hhciogX19oaWdoLCBtYXNrKiBfX3ZlYykgY29uc3QKICB7CiAgICB3aGlsZSAoX19sb3cgPCBf X2hpZ2gpCiAgICAgICpfX3ZlYysrID0gX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hh cj4oKl9fbG93KyspXTsKICAgIHJldHVybiBfX2hpZ2g7CiAgfQoKICBjb25zdCBjaGFyKgogIGN0 eXBlPGNoYXI+OjoKICBzY2FuX2lzKG1hc2sgX19tLCBjb25zdCBjaGFyKiBfX2xvdywgY29uc3Qg Y2hhciogX19oaWdoKSBjb25zdAogIHsKICAgIHdoaWxlIChfX2xvdyA8IF9faGlnaAogICAgICAg ICAgICYmICEoX01fdGFibGVbc3RhdGljX2Nhc3Q8dW5zaWduZWQgY2hhcj4oKl9fbG93KV0gJiBf X20pKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KCiAgY29uc3QgY2hhcioK ICBjdHlwZTxjaGFyPjo6CiAgc2Nhbl9ub3QobWFzayBfX20sIGNvbnN0IGNoYXIqIF9fbG93LCBj b25zdCBjaGFyKiBfX2hpZ2gpIGNvbnN0CiAgewogICAgd2hpbGUgKF9fbG93IDwgX19oaWdoCiAg ICAgICAgICAgJiYgKF9NX3RhYmxlW3N0YXRpY19jYXN0PHVuc2lnbmVkIGNoYXI+KCpfX2xvdyld ICYgX19tKSAhPSAwKQogICAgICArK19fbG93OwogICAgcmV0dXJuIF9fbG93OwogIH0KIyA0MDEg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIGN0eXBlX2J5bmFtZSA6IHB1Ymxp YyBjdHlwZTxfQ2hhclQ+CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNo YXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIGN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiBf X3MsIHNpemVfdCBfX3JlZnMgPSAwKTsKCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAg ICAgfmN0eXBlX2J5bmFtZSgpIHsgfTsKICAgIH07CgoKICB0ZW1wbGF0ZTw+CiAgICBjdHlwZV9i eW5hbWU8Y2hhcj46OmN0eXBlX2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IHJlZnMpOwoKICB0 ZW1wbGF0ZTw+CiAgICBjdHlwZV9ieW5hbWU8d2NoYXJfdD46OmN0eXBlX2J5bmFtZShjb25zdCBj aGFyKiwgc2l6ZV90IHJlZnMpOwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9jb2RlY3Z0LmgiIDEgMwojIDQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Nv ZGVjdnQuaCIgMwoKCiAgY2xhc3MgY29kZWN2dF9iYXNlCiAgewogIHB1YmxpYzoKICAgIGVudW0g cmVzdWx0CiAgICB7CiAgICAgIG9rLAogICAgICBwYXJ0aWFsLAogICAgICBlcnJvciwKICAgICAg bm9jb252CiAgICB9OwogIH07CgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlw ZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBfX2NvZGVjdnRfYWJz dHJhY3RfYmFzZQogICAgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIGNvZGVjdnRfYmFz ZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCBy ZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0ludGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYg X0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX1N0YXRlVCBzdGF0ZV90eXBlOwoK CiAgICAgIHJlc3VsdAogICAgICBvdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJu X3R5cGUqIF9fZnJvbSwKICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBj b25zdCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19u ZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX291dChfX3N0YXRlLCBf X2Zyb20sIF9fZnJvbV9lbmQsIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgX190bywgX190b19lbmQsIF9fdG9fbmV4dCk7CiAgICAgIH0KCiAgICAgIHJlc3VsdAogICAg ICB1bnNoaWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLCBleHRlcm5f dHlwZSogX190b19lbmQsCiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Vuc2hpZnQoX19zdGF0ZSwgX190byxfX3RvX2Vu ZCxfX3RvX25leHQpOyB9CgogICAgICByZXN1bHQKICAgICAgaW4oc3RhdGVfdHlwZSYgX19zdGF0 ZSwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgIGlu dGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgIGludGVybl90 eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgICB7CiAgICAgICAgcmV0dXJuIHRoaXMtPmRvX2lu KF9fc3RhdGUsIF9fZnJvbSwgX19mcm9tX2VuZCwgX19mcm9tX25leHQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fdG8sIF9fdG9fZW5kLCBfX3RvX25leHQpOwogICAgICB9CgogICAgICBp bnQKICAgICAgZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2VuY29kaW5nKCk7IH0KCiAgICAgIGJvb2wKICAgICAgYWx3YXlzX25vY29udigpIGNvbnN0IHRo cm93KCkKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fYWx3YXlzX25vY29udigpOyB9CgogICAgICBp bnQKICAgICAgbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90 eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19lbmQsIHNpemVf dCBfX21heCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbGVuZ3RoKF9fc3RhdGUsIF9f ZnJvbSwgX19lbmQsIF9fbWF4KTsgfQoKICAgICAgaW50CiAgICAgIG1heF9sZW5ndGgoKSBjb25z dCB0aHJvdygpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX21heF9sZW5ndGgoKTsgfQoKICAgIHBy b3RlY3RlZDoKICAgICAgZXhwbGljaXQKICAgICAgX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2Uoc2l6 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgdmlydHVh bAogICAgICB+X19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2UoKSB7IH0KCiAgICAgIHZpcnR1YWwgcmVz dWx0CiAgICAgIGRvX291dChzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBpbnRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0 IGludGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190 bywgZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqJiBfX3Rv X25leHQpIGNvbnN0ID0gMDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQo c3RhdGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAg ZXh0ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QgPSAw OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAg ICBkb19lbmNvZGluZygpIGNvbnN0IHRocm93KCkgPSAwOwoKICAgICAgdmlydHVhbCBib29sCiAg ICAgIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpID0gMDsKCiAgICAgIHZpcnR1YWwg aW50CiAgICAgIGRvX2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90 IF9fbWF4KSBjb25zdCA9IDA7CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19tYXhfbGVuZ3Ro KCkgY29uc3QgdGhyb3coKSA9IDA7CiAgICB9OwoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRl cm5ULCB0eXBlbmFtZSBfRXh0ZXJuVCwgdHlwZW5hbWUgX1N0YXRlVD4KICAgIGNsYXNzIGNvZGVj dnQKICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPF9JbnRlcm5ULCBfRXh0ZXJu VCwgX1N0YXRlVD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY29kZWN2dF9iYXNl OjpyZXN1bHQgcmVzdWx0OwogICAgICB0eXBlZGVmIF9JbnRlcm5UIGludGVybl90eXBlOwogICAg ICB0eXBlZGVmIF9FeHRlcm5UIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIF9TdGF0ZVQgc3Rh dGVfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0 X2Jhc2U8X0ludGVyblQsX0V4dGVyblQsX1N0YXRlVD4gKF9fcmVmcykgeyB9CgogICAgcHJvdGVj dGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCkgeyB9CgogICAgICB2aXJ0dWFsIHJl c3VsdAogICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUq IF9fZnJvbSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25z dCBpbnRlcm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9f dG8sIGV4dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190 b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3Rh dGVfdHlwZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0 ZXJuX3R5cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAg ICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBl eHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9t X2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJu X3R5cGUqIF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5 cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2Rp bmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19u b2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3Ro KGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAg ICAgICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAg ICAgdmlydHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgICB9 OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQsIHR5cGVu YW1lIF9TdGF0ZVQ+CiAgICBsb2NhbGU6OmlkIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBf U3RhdGVUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PGNoYXIsIGNoYXIs IG1ic3RhdGVfdD4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPGNoYXIsIGNo YXIsIG1ic3RhdGVfdD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgY2hhciBpbnRl cm5fdHlwZTsKICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1i c3RhdGVfdCBzdGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAg ZXhwbGljaXQKICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVk OgogICAgICB2aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAog ICAgICBkb19vdXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJv bSwKICAgICAgICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRl cm5fdHlwZSomIF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4 dGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0 KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlw ZSYgX19zdGF0ZSwgZXh0ZXJuX3R5cGUqIF9fdG8sCiAgICAgICAgICAgICAgICAgZXh0ZXJuX3R5 cGUqIF9fdG9fZW5kLCBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0 dWFsIHJlc3VsdAogICAgICBkb19pbihzdGF0ZV90eXBlJiBfX3N0YXRlLCBjb25zdCBleHRlcm5f dHlwZSogX19mcm9tLAogICAgICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwg Y29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUq IF9fdG8sIGludGVybl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICAgaW50ZXJuX3R5cGUqJiBf X3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fZW5jb2RpbmcoKSBj b25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBib29sCiAgICAgIGRvX2Fsd2F5c19ub2NvbnYo KSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbCBpbnQKICAgICAgZG9fbGVuZ3RoKGNvbnN0 IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLAogICAgICAgICAgICAgICAg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0OwoKICAgICAgdmly dHVhbCBpbnQKICAgICAgZG9fbWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgoKICB0 ZW1wbGF0ZTw+CiAgICBjbGFzcyBjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4KICAg IDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNlPHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVf dD4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgd2NoYXJfdCBpbnRlcm5fdHlwZTsK ICAgICAgdHlwZWRlZiBjaGFyIGV4dGVybl90eXBlOwogICAgICB0eXBlZGVmIG1ic3RhdGVfdCBz dGF0ZV90eXBlOwoKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgY29kZWN2dChzaXplX3QgX19yZWZzID0gMCk7CgogICAgcHJvdGVjdGVkOgogICAgICB2 aXJ0dWFsCiAgICAgIH5jb2RlY3Z0KCk7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb19v dXQoc3RhdGVfdHlwZSYgX19zdGF0ZSwgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAg ICAgICAgIGNvbnN0IGludGVybl90eXBlKiBfX2Zyb21fZW5kLCBjb25zdCBpbnRlcm5fdHlwZSom IF9fZnJvbV9uZXh0LAogICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVybl90eXBl KiBfX3RvX2VuZCwKICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsK CiAgICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX3Vuc2hpZnQoc3RhdGVfdHlwZSYgX19zdGF0 ZSwKICAgICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190bywgZXh0ZXJuX3R5cGUqIF9fdG9f ZW5kLAogICAgICAgICAgICAgICAgIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAg ICAgIHZpcnR1YWwgcmVzdWx0CiAgICAgIGRvX2luKHN0YXRlX3R5cGUmIF9fc3RhdGUsCiAgICAg ICAgICAgICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tLCBjb25zdCBleHRlcm5fdHlwZSogX19m cm9tX2VuZCwKICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAg ICAgICAgICAgICBpbnRlcm5fdHlwZSogX190bywgaW50ZXJuX3R5cGUqIF9fdG9fZW5kLAogICAg ICAgICAgICAgaW50ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0OwoKICAgICAgdmlydHVhbAog ICAgICBpbnQgZG9fZW5jb2RpbmcoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAogICAg ICBib29sIGRvX2Fsd2F5c19ub2NvbnYoKSBjb25zdCB0aHJvdygpOwoKICAgICAgdmlydHVhbAog ICAgICBpbnQgZG9fbGVuZ3RoKGNvbnN0IHN0YXRlX3R5cGUmLCBjb25zdCBleHRlcm5fdHlwZSog X19mcm9tLAogICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6 ZV90IF9fbWF4KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgo KSBjb25zdCB0aHJvdygpOwogICAgfTsKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwg dHlwZW5hbWUgX0V4dGVyblQsIHR5cGVuYW1lIF9TdGF0ZVQ+CiAgICBjbGFzcyBjb2RlY3Z0X2J5 bmFtZSA6IHB1YmxpYyBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX1N0YXRlVD4KICAgIHsK ICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dF9ieW5hbWUoY29uc3QgY2hh ciosIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5U LCBfU3RhdGVUPihfX3JlZnMpIHsgfQogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAg IH5jb2RlY3Z0X2J5bmFtZSgpIHsgfQogICAgfTsKCgoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRl L2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUvYml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5o IiAxIDMKIyA0NiAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1nbnUv Yml0cy9jb2RlY3Z0X3NwZWNpYWxpemF0aW9ucy5oIiAzCiAgY2xhc3MgX19lbmNfdHJhaXRzCiAg ewogIHB1YmxpYzoKCgoKICAgIHR5cGVkZWYgaWNvbnZfdCBfX2Rlc2NfdHlwZTsKCiAgcHJvdGVj dGVkOgoKCiAgICBzdGF0aWMgY29uc3QgaW50IF9TX21heF9zaXplID0gMzI7CgogICAgY2hhciBf TV9pbnRfZW5jW19TX21heF9zaXplXTsKCiAgICBjaGFyIF9NX2V4dF9lbmNbX1NfbWF4X3NpemVd OwoKCiAgICBfX2Rlc2NfdHlwZSBfTV9pbl9kZXNjOwoKICAgIF9fZGVzY190eXBlIF9NX291dF9k ZXNjOwoKCiAgICBpbnQgX01fZXh0X2JvbTsKCgogICAgaW50IF9NX2ludF9ib207CgogIHB1Ymxp YzoKICAgIGV4cGxpY2l0IF9fZW5jX3RyYWl0cygpCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291 dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIG1lbXNl dChfTV9pbnRfZW5jLCAwLCBfU19tYXhfc2l6ZSk7CiAgICAgIG1lbXNldChfTV9leHRfZW5jLCAw LCBfU19tYXhfc2l6ZSk7CiAgICB9CgogICAgZXhwbGljaXQgX19lbmNfdHJhaXRzKGNvbnN0IGNo YXIqIF9faW50LCBjb25zdCBjaGFyKiBfX2V4dCwKICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgX19pYm9tID0gMCwgaW50IF9fZWJvbSA9IDApCiAgICA6IF9NX2luX2Rlc2MoMCksIF9NX291 dF9kZXNjKDApLCBfTV9leHRfYm9tKDApLCBfTV9pbnRfYm9tKDApCiAgICB7CiAgICAgIHN0cm5j cHkoX01faW50X2VuYywgX19pbnQsIF9TX21heF9zaXplKTsKICAgICAgc3RybmNweShfTV9leHRf ZW5jLCBfX2V4dCwgX1NfbWF4X3NpemUpOwogICAgfQoKCgoKCgogICAgX19lbmNfdHJhaXRzKGNv bnN0IF9fZW5jX3RyYWl0cyYgX19vYmopOiBfTV9pbl9kZXNjKDApLCBfTV9vdXRfZGVzYygwKQog ICAgewogICAgICBzdHJuY3B5KF9NX2ludF9lbmMsIF9fb2JqLl9NX2ludF9lbmMsIF9TX21heF9z aXplKTsKICAgICAgc3RybmNweShfTV9leHRfZW5jLCBfX29iai5fTV9leHRfZW5jLCBfU19tYXhf c2l6ZSk7CiAgICAgIF9NX2V4dF9ib20gPSBfX29iai5fTV9leHRfYm9tOwogICAgICBfTV9pbnRf Ym9tID0gX19vYmouX01faW50X2JvbTsKICAgIH0KCgogICAgX19lbmNfdHJhaXRzJgogICAgb3Bl cmF0b3I9KGNvbnN0IF9fZW5jX3RyYWl0cyYgX19vYmopCiAgICB7CiAgICAgIHN0cm5jcHkoX01f aW50X2VuYywgX19vYmouX01faW50X2VuYywgX1NfbWF4X3NpemUpOwogICAgICBzdHJuY3B5KF9N X2V4dF9lbmMsIF9fb2JqLl9NX2V4dF9lbmMsIF9TX21heF9zaXplKTsKICAgICAgX01faW5fZGVz YyA9IDA7CiAgICAgIF9NX291dF9kZXNjID0gMDsKICAgICAgX01fZXh0X2JvbSA9IF9fb2JqLl9N X2V4dF9ib207CiAgICAgIF9NX2ludF9ib20gPSBfX29iai5fTV9pbnRfYm9tOwogICAgICByZXR1 cm4gKnRoaXM7CiAgICB9CgogICAgfl9fZW5jX3RyYWl0cygpCiAgICB7CiAgICAgIF9fZGVzY190 eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2FzdDxpY29udl90PigtMSk7CiAgICAgIGlmIChfTV9p bl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnIpCiAgICAgICAgaWNvbnZfY2xvc2UoX01faW5f ZGVzYyk7CiAgICAgIGlmIChfTV9vdXRfZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycikKICAg ICAgICBpY29udl9jbG9zZShfTV9vdXRfZGVzYyk7CiAgICB9CgogICAgdm9pZAogICAgX01faW5p dCgpCiAgICB7CiAgICAgIGNvbnN0IF9fZGVzY190eXBlIF9fZXJyID0gcmVpbnRlcnByZXRfY2Fz dDxpY29udl90PigtMSk7CiAgICAgIGlmICghX01faW5fZGVzYykKICAgICAgICB7CiAgICAgICAg ICBfTV9pbl9kZXNjID0gaWNvbnZfb3BlbihfTV9pbnRfZW5jLCBfTV9leHRfZW5jKTsKICAgICAg ICAgIGlmIChfTV9pbl9kZXNjID09IF9fZXJyKQogICAgICAgICAgICBfX3Rocm93X3J1bnRpbWVf ZXJyb3IoImNyZWF0aW5nIGljb252IGlucHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAg IH0KICAgICAgaWYgKCFfTV9vdXRfZGVzYykKICAgICAgICB7CiAgICAgICAgICBfTV9vdXRfZGVz YyA9IGljb252X29wZW4oX01fZXh0X2VuYywgX01faW50X2VuYyk7CiAgICAgICAgICBpZiAoX01f b3V0X2Rlc2MgPT0gX19lcnIpCiAgICAgICAgICAgIF9fdGhyb3dfcnVudGltZV9lcnJvcigiY3Jl YXRpbmcgaWNvbnYgb3V0cHV0IGRlc2NyaXB0b3IgZmFpbGVkLiIpOwogICAgICAgIH0KICAgIH0K CiAgICBib29sCiAgICBfTV9nb29kKCkKICAgIHsKICAgICAgY29uc3QgX19kZXNjX3R5cGUgX19l cnIgPSByZWludGVycHJldF9jYXN0PGljb252X3Q+KC0xKTsKICAgICAgYm9vbCBfX3Rlc3QgPSBf TV9pbl9kZXNjICYmIF9NX2luX2Rlc2MgIT0gX19lcnI7CiAgICAgIF9fdGVzdCAmPSBfTV9vdXRf ZGVzYyAmJiBfTV9vdXRfZGVzYyAhPSBfX2VycjsKICAgICAgcmV0dXJuIF9fdGVzdDsKICAgIH0K CiAgICBjb25zdCBfX2Rlc2NfdHlwZSoKICAgIF9NX2dldF9pbl9kZXNjcmlwdG9yKCkKICAgIHsg cmV0dXJuICZfTV9pbl9kZXNjOyB9CgogICAgY29uc3QgX19kZXNjX3R5cGUqCiAgICBfTV9nZXRf b3V0X2Rlc2NyaXB0b3IoKQogICAgeyByZXR1cm4gJl9NX291dF9kZXNjOyB9CgogICAgaW50CiAg ICBfTV9nZXRfZXh0ZXJuYWxfYm9tKCkKICAgIHsgcmV0dXJuIF9NX2V4dF9ib207IH0KCiAgICBp bnQKICAgIF9NX2dldF9pbnRlcm5hbF9ib20oKQogICAgeyByZXR1cm4gX01faW50X2JvbTsgfQoK ICAgIGNvbnN0IGNoYXIqCiAgICBfTV9nZXRfaW50ZXJuYWxfZW5jKCkKICAgIHsgcmV0dXJuIF9N X2ludF9lbmM7IH0KCiAgICBjb25zdCBjaGFyKgogICAgX01fZ2V0X2V4dGVybmFsX2VuYygpCiAg ICB7IHJldHVybiBfTV9leHRfZW5jOyB9CiAgfTsKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0lu dGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY2xhc3MgY29kZWN2dDxfSW50ZXJuVCwgX0V4 dGVyblQsIF9fZW5jX3RyYWl0cz4KICAgIDogcHVibGljIF9fY29kZWN2dF9hYnN0cmFjdF9iYXNl PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAg ICAgdHlwZWRlZiBjb2RlY3Z0X2Jhc2U6OnJlc3VsdCByZXN1bHQ7CiAgICAgIHR5cGVkZWYgX0lu dGVyblQgaW50ZXJuX3R5cGU7CiAgICAgIHR5cGVkZWYgX0V4dGVyblQgZXh0ZXJuX3R5cGU7CiAg ICAgIHR5cGVkZWYgX19lbmNfdHJhaXRzIHN0YXRlX3R5cGU7CiAgICAgIHR5cGVkZWYgX19lbmNf dHJhaXRzOjpfX2Rlc2NfdHlwZSBfX2Rlc2NfdHlwZTsKICAgICAgdHlwZWRlZiBfX2VuY190cmFp dHMgX19lbmNfdHlwZTsKCgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxp Y2l0CiAgICAgIGNvZGVjdnQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fi c3RyYWN0X2Jhc2U8aW50ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMp CiAgICAgIHsgfQoKICAgICAgZXhwbGljaXQKICAgICAgY29kZWN2dChfX2VuY190eXBlKiBfX2Vu Yywgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogX19jb2RlY3Z0X2Fic3RyYWN0X2Jhc2U8aW50 ZXJuX3R5cGUsIGV4dGVybl90eXBlLCBzdGF0ZV90eXBlPihfX3JlZnMpCiAgICAgIHsgfQoKICAg IHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+Y29kZWN2dCgpIHsgfQoKICAgICAgdmly dHVhbCByZXN1bHQKICAgICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVy bl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAgICBjb25zdCBpbnRlcm5fdHlwZSogX19mcm9tX2Vu ZCwgY29uc3QgaW50ZXJuX3R5cGUqJiBfX2Zyb21fbmV4dCwKICAgICAgICAgICAgIGV4dGVybl90 eXBlKiBfX3RvLCBleHRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgICBleHRlcm5fdHlw ZSomIF9fdG9fbmV4dCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHJlc3VsdAogICAgICBkb191bnNo aWZ0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAg ICAgIGV4dGVybl90eXBlKiBfX3RvX2VuZCwgZXh0ZXJuX3R5cGUqJiBfX3RvX25leHQpIGNvbnN0 OwoKICAgICAgdmlydHVhbCByZXN1bHQKICAgICAgZG9faW4oc3RhdGVfdHlwZSYgX19zdGF0ZSwg Y29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAgICAgICAgICAgY29uc3QgZXh0ZXJuX3R5cGUq IF9fZnJvbV9lbmQsIGNvbnN0IGV4dGVybl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAg IGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19lbmQsCiAgICAgICAgICAgIGlu dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv X2VuY29kaW5nKCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgYm9vbAogICAgICBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKTsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRv X2xlbmd0aChjb25zdCBzdGF0ZV90eXBlJiwgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZnJvbSwKICAg ICAgICAgICAgICAgIGNvbnN0IGV4dGVybl90eXBlKiBfX2VuZCwgc2l6ZV90IF9fbWF4KSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX21heF9sZW5ndGgoKSBjb25zdCB0aHJvdygp OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5U PgogICAgbG9jYWxlOjppZAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3Ry YWl0cz46OmlkOwoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1Q+CiAgICBpbmxpbmUgc2l6ZV90 CiAgICBfX2ljb252X2FkYXB0b3Ioc2l6ZV90KCpfX2Z1bmMpKGljb252X3QsIF9ULCBzaXplX3Qq LCBjaGFyKiosIHNpemVfdCopLAogICAgICAgICAgICAgICAgICAgIGljb252X3QgX19jZCwgY2hh cioqIF9faW5idWYsIHNpemVfdCogX19pbmJ5dGVzLAogICAgICAgICAgICAgICAgICAgIGNoYXIq KiBfX291dGJ1Ziwgc2l6ZV90KiBfX291dGJ5dGVzKQogICAgeyByZXR1cm4gX19mdW5jKF9fY2Qs IChfVClfX2luYnVmLCBfX2luYnl0ZXMsIF9fb3V0YnVmLCBfX291dGJ5dGVzKTsgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBjb2RlY3Z0X2Jh c2U6OnJlc3VsdAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46 OgogICAgZG9fb3V0KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGludGVybl90eXBlKiBfX2Zy b20sCiAgICAgICAgICAgY29uc3QgaW50ZXJuX3R5cGUqIF9fZnJvbV9lbmQsIGNvbnN0IGludGVy bl90eXBlKiYgX19mcm9tX25leHQsCiAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fdG8sIGV4dGVy bl90eXBlKiBfX3RvX2VuZCwKICAgICAgICAgICBleHRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29u c3QKICAgIHsKICAgICAgcmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9N X2dvb2QoKSkKICAgICAgICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190 eXBlIF9fZGVzY190eXBlOwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9f c3RhdGUuX01fZ2V0X291dF9kZXNjcmlwdG9yKCk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX19m bXVsdGlwbGUgPSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fZmJ5dGVz ID0gX19mbXVsdGlwbGUgKiAoX19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBz aXplX3QgX190bXVsdGlwbGUgPSBzaXplb2YoZXh0ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90 IF9fdGJ5dGVzID0gX190bXVsdGlwbGUgKiAoX190b19lbmQgLSBfX3RvKTsKCgoKICAgICAgICAg IGNoYXIqIF9fY3RvID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX190byk7CiAgICAgICAgICBj aGFyKiBfX2Nmcm9tOwogICAgICAgICAgc2l6ZV90IF9fY29udjsKCgoKCgoKICAgICAgICAgIGlu dCBfX2ludF9ib20gPSBfX3N0YXRlLl9NX2dldF9pbnRlcm5hbF9ib20oKTsKICAgICAgICAgIGlm IChfX2ludF9ib20pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzaXplX3QgX19zaXplID0g X19mcm9tX2VuZCAtIF9fZnJvbTsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQg PSBzdGF0aWNfY2FzdDxpbnRlcm5fdHlwZSo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludGVy bl90eXBlKSAqIChfX3NpemUgKyAxKSkpOwogICAgICAgICAgICAgIF9fY2ZpeGVkWzBdID0gc3Rh dGljX2Nhc3Q8aW50ZXJuX3R5cGU+KF9faW50X2JvbSk7CiAgICAgICAgICAgICAgY2hhcl90cmFp dHM8aW50ZXJuX3R5cGU+Ojpjb3B5KF9fY2ZpeGVkICsgMSwgX19mcm9tLCBfX3NpemUpOwogICAg ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZieXRlcywg Jl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAg ICAgIHsKICAgICAgICAgICAgICBpbnRlcm5fdHlwZSogX19jZml4ZWQgPSBjb25zdF9jYXN0PGlu dGVybl90eXBlKj4oX19mcm9tKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0gcmVpbnRlcnByZXRf Y2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9IF9faWNvbnZfYWRh cHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sICZfX2ZieXRlcywKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgJl9fY3RvLCAmX190Ynl0ZXMpOwogICAgICAgICAgICB9 CgogICAgICAgICAgaWYgKF9fY29udiAhPSBzaXplX3QoLTEpKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0IGludGVybl90eXBl Kj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxl eHRlcm5fdHlwZSo+KF9fY3RvKTsKICAgICAgICAgICAgICBfX3JldCA9IG9rOwogICAgICAgICAg ICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX19mYnl0 ZXMgPCBfX2ZtdWx0aXBsZSAqIChfX2Zyb21fZW5kIC0gX19mcm9tKSkKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX19mcm9tX25leHQgPSByZWludGVycHJldF9jYXN0PGNvbnN0 IGludGVybl90eXBlKj4oX19jZnJvbSk7CiAgICAgICAgICAgICAgICAgIF9fdG9fbmV4dCA9IHJl aW50ZXJwcmV0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2N0byk7CiAgICAgICAgICAgICAgICAgIF9f cmV0ID0gcGFydGlhbDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAg ICAgICAgICAgICBfX3JldCA9IGVycm9yOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFt ZSBfRXh0ZXJuVD4KICAgIGNvZGVjdnRfYmFzZTo6cmVzdWx0CiAgICBjb2RlY3Z0PF9JbnRlcm5U LCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb191bnNoaWZ0KHN0YXRlX3R5cGUmIF9f c3RhdGUsIGV4dGVybl90eXBlKiBfX3RvLAogICAgICAgICAgICAgICBleHRlcm5fdHlwZSogX190 b19lbmQsIGV4dGVybl90eXBlKiYgX190b19uZXh0KSBjb25zdAogICAgewogICAgICByZXN1bHQg X19yZXQgPSBlcnJvcjsKICAgICAgaWYgKF9fc3RhdGUuX01fZ29vZCgpKQogICAgICAgIHsKICAg ICAgICAgIHR5cGVkZWYgc3RhdGVfdHlwZTo6X19kZXNjX3R5cGUgX19kZXNjX3R5cGU7CiAgICAg ICAgICBjb25zdCBfX2Rlc2NfdHlwZSogX19kZXNjID0gX19zdGF0ZS5fTV9nZXRfaW5fZGVzY3Jp cHRvcigpOwogICAgICAgICAgY29uc3Qgc2l6ZV90IF9fdG11bHRpcGxlID0gc2l6ZW9mKGludGVy bl90eXBlKTsKICAgICAgICAgIHNpemVfdCBfX3RsZW4gPSBfX3RtdWx0aXBsZSAqIChfX3RvX2Vu ZCAtIF9fdG8pOwoKCgogICAgICAgICAgY2hhciogX19jdG8gPSByZWludGVycHJldF9jYXN0PGNo YXIqPihfX3RvKTsKICAgICAgICAgIHNpemVfdCBfX2NvbnYgPSBfX2ljb252X2FkYXB0b3IoaWNv bnYsKl9fZGVzYywgMCwgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgJl9fY3RvLCAmX190bGVuKTsKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNpemVfdCgtMSkp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RvX25leHQgPSByZWludGVycHJldF9jYXN0 PGV4dGVybl90eXBlKj4oX19jdG8pOwogICAgICAgICAgICAgIGlmIChfX3RsZW4gPT0gX190bXVs dGlwbGUgKiAoX190b19lbmQgLSBfX3RvKSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gbm9jb252 OwogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGxlbiA9PSAwKQogICAgICAgICAgICAgICAgX19y ZXQgPSBvazsKICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3JldCA9IHBhcnRp YWw7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgX19yZXQgPSBlcnJv cjsKICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgY29kZWN2dF9iYXNlOjpyZXN1bHQK ICAgIGNvZGVjdnQ8X0ludGVyblQsIF9FeHRlcm5ULCBfX2VuY190cmFpdHM+OjoKICAgIGRvX2lu KHN0YXRlX3R5cGUmIF9fc3RhdGUsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAg ICBjb25zdCBleHRlcm5fdHlwZSogX19mcm9tX2VuZCwgY29uc3QgZXh0ZXJuX3R5cGUqJiBfX2Zy b21fbmV4dCwKICAgICAgICAgIGludGVybl90eXBlKiBfX3RvLCBpbnRlcm5fdHlwZSogX190b19l bmQsCiAgICAgICAgICBpbnRlcm5fdHlwZSomIF9fdG9fbmV4dCkgY29uc3QKICAgIHsKICAgICAg cmVzdWx0IF9fcmV0ID0gZXJyb3I7CiAgICAgIGlmIChfX3N0YXRlLl9NX2dvb2QoKSkKICAgICAg ICB7CiAgICAgICAgICB0eXBlZGVmIHN0YXRlX3R5cGU6Ol9fZGVzY190eXBlIF9fZGVzY190eXBl OwogICAgICAgICAgY29uc3QgX19kZXNjX3R5cGUqIF9fZGVzYyA9IF9fc3RhdGUuX01fZ2V0X2lu X2Rlc2NyaXB0b3IoKTsKICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2ZtdWx0aXBsZSA9IHNpemVv ZihleHRlcm5fdHlwZSk7CiAgICAgICAgICBzaXplX3QgX19mbGVuID0gX19mbXVsdGlwbGUgKiAo X19mcm9tX2VuZCAtIF9fZnJvbSk7CiAgICAgICAgICBjb25zdCBzaXplX3QgX190bXVsdGlwbGUg PSBzaXplb2YoaW50ZXJuX3R5cGUpOwogICAgICAgICAgc2l6ZV90IF9fdGxlbiA9IF9fdG11bHRp cGxlICogKF9fdG9fZW5kIC0gX190byk7CgoKCiAgICAgICAgICBjaGFyKiBfX2N0byA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fdG8pOwogICAgICAgICAgY2hhciogX19jZnJvbTsKICAgICAg ICAgIHNpemVfdCBfX2NvbnY7CgoKCgoKCiAgICAgICAgICBpbnQgX19leHRfYm9tID0gX19zdGF0 ZS5fTV9nZXRfZXh0ZXJuYWxfYm9tKCk7CiAgICAgICAgICBpZiAoX19leHRfYm9tKQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgc2l6ZV90IF9fc2l6ZSA9IF9fZnJvbV9lbmQgLSBfX2Zyb207 CiAgICAgICAgICAgICAgZXh0ZXJuX3R5cGUqIF9fY2ZpeGVkID0gc3RhdGljX2Nhc3Q8ZXh0ZXJu X3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihleHRlcm5fdHlwZSkgKiAoX19zaXplICsg MSkpKTsKICAgICAgICAgICAgICBfX2NmaXhlZFswXSA9IHN0YXRpY19jYXN0PGV4dGVybl90eXBl PihfX2V4dF9ib20pOwogICAgICAgICAgICAgIGNoYXJfdHJhaXRzPGV4dGVybl90eXBlPjo6Y29w eShfX2NmaXhlZCArIDEsIF9fZnJvbSwgX19zaXplKTsKICAgICAgICAgICAgICBfX2Nmcm9tID0g cmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oX19jZml4ZWQpOwogICAgICAgICAgICAgIF9fY29udiA9 IF9faWNvbnZfYWRhcHRvcihpY29udiwgKl9fZGVzYywgJl9fY2Zyb20sCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICZfX2ZsZW4sICZfX2N0bywgJl9fdGxlbik7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAgICAgewogICAgICAgICAgICAgIGV4dGVy bl90eXBlKiBfX2NmaXhlZCA9IGNvbnN0X2Nhc3Q8ZXh0ZXJuX3R5cGUqPihfX2Zyb20pOwogICAg ICAgICAgICAgIF9fY2Zyb20gPSByZWludGVycHJldF9jYXN0PGNoYXIqPihfX2NmaXhlZCk7CiAg ICAgICAgICAgICAgX19jb252ID0gX19pY29udl9hZGFwdG9yKGljb252LCAqX19kZXNjLCAmX19j ZnJvbSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fZmxlbiwgJl9f Y3RvLCAmX190bGVuKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19jb252ICE9IHNp emVfdCgtMSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2Zyb21fbmV4dCA9IHJlaW50 ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsKICAgICAgICAgICAgICBf X3RvX25leHQgPSByZWludGVycHJldF9jYXN0PGludGVybl90eXBlKj4oX19jdG8pOwogICAgICAg ICAgICAgIF9fcmV0ID0gb2s7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UKICAgICAgICAg ICAgewogICAgICAgICAgICAgIGlmIChfX2ZsZW4gPCBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fZnJv bV9lbmQgLSBfX2Zyb20pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX2Zy b21fbmV4dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgZXh0ZXJuX3R5cGUqPihfX2Nmcm9tKTsK ICAgICAgICAgICAgICAgICAgX190b19uZXh0ID0gcmVpbnRlcnByZXRfY2FzdDxpbnRlcm5fdHlw ZSo+KF9fY3RvKTsKICAgICAgICAgICAgICAgICAgX19yZXQgPSBwYXJ0aWFsOwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9fcmV0ID0gZXJyb3I7 CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19lbmNvZGlu ZygpIGNvbnN0IHRocm93KCkKICAgIHsKICAgICAgaW50IF9fcmV0ID0gMDsKICAgICAgaWYgKHNp emVvZihfRXh0ZXJuVCkgPD0gc2l6ZW9mKF9JbnRlcm5UKSkKICAgICAgICBfX3JldCA9IHNpemVv ZihfSW50ZXJuVCkvc2l6ZW9mKF9FeHRlcm5UKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW50ZXJuVCwgdHlwZW5hbWUgX0V4dGVyblQ+CiAgICBib29s CiAgICBjb2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19h bHdheXNfbm9jb252KCkgY29uc3QgdGhyb3coKQogICAgeyByZXR1cm4gZmFsc2U7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0ludGVyblQsIHR5cGVuYW1lIF9FeHRlcm5UPgogICAgaW50CiAgICBj b2RlY3Z0PF9JbnRlcm5ULCBfRXh0ZXJuVCwgX19lbmNfdHJhaXRzPjo6CiAgICBkb19sZW5ndGgo Y29uc3Qgc3RhdGVfdHlwZSYsIGNvbnN0IGV4dGVybl90eXBlKiBfX2Zyb20sCiAgICAgICAgICAg ICAgY29uc3QgZXh0ZXJuX3R5cGUqIF9fZW5kLCBzaXplX3QgX19tYXgpIGNvbnN0CiAgICB7IHJl dHVybiBtaW4oX19tYXgsIHN0YXRpY19jYXN0PHNpemVfdD4oX19lbmQgLSBfX2Zyb20pKTsgfQoK CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9JbnRlcm5ULCB0eXBlbmFtZSBfRXh0ZXJuVD4KICAgIGlu dAogICAgY29kZWN2dDxfSW50ZXJuVCwgX0V4dGVyblQsIF9fZW5jX3RyYWl0cz46OgogICAgZG9f bWF4X2xlbmd0aCgpIGNvbnN0IHRocm93KCkKICAgIHsgcmV0dXJuIDE7IH0KIyAzMzQgIi91c3Iv bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY29kZWN2dC5oIiAyIDMKIyA0MjYgIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAyIDMKCgoKICBjbGFzcyBf X251bV9iYXNlCiAgewogIHByb3RlY3RlZDoKCgogICAgc3RhdGljIGNvbnN0IGNoYXIgX1NfYXRv bXNbXTsKCiAgICBlbnVtCiAgICB7CiAgICAgIF9NX3plcm8sCiAgICAgIF9NX2UgPSBfTV96ZXJv ICsgMTAsCiAgICAgIF9NX0UgPSBfTV96ZXJvICsgMTEsCiAgICAgIF9NX3NpemUgPSAyMSArIDEK ICAgIH07CgoKCiAgICBzdGF0aWMgYm9vbAogICAgX1NfZm9ybWF0X2Zsb2F0KGNvbnN0IGlvc19i YXNlJiBfX2lvLCBjaGFyKiBfX2ZwdHIsIGNoYXIgX19tb2QsCiAgICAgICAgICAgICAgICAgICAg c3RyZWFtc2l6ZSBfX3ByZWMpOwoKCiAgICBzdGF0aWMgdm9pZAogICAgX1NfZm9ybWF0X2ludChj b25zdCBpb3NfYmFzZSYgX19pbywgY2hhciogX19mcHRyLCBjaGFyIF9fbW9kLCBjaGFyIF9fbW9k bCk7CiAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG51bXB1bmN0 IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJp bmdfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgIHByaXZhdGU6CiAgICAg IGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhvdXNhbmRz X3NlcDsKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7CiAgICAgIGNvbnN0IGNoYXJfdHlw ZSogX01fdHJ1ZW5hbWU7CiAgICAgIGNvbnN0IGNoYXJfdHlwZSogX01fZmFsc2VuYW1lOwoKICAg IHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgbnVtcHVuY3Qoc2l6ZV90IF9fcmVmcyA9IDAp IDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlhbGl6ZV9udW1wdW5jdCgp OyB9CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdChfX2NfbG9jYWxlIF9fY2xvYywgc2l6 ZV90IF9fcmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpCiAgICAgIHsgX01faW5pdGlh bGl6ZV9udW1wdW5jdChfX2Nsb2MpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgZGVjaW1hbF9w b2ludCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2RlY2ltYWxfcG9pbnQoKTsgfQoK ICAgICAgY2hhcl90eXBlCiAgICAgIHRob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb190aG91c2FuZHNfc2VwKCk7IH0KCiAgICAgIHN0cmluZwogICAgICBncm91cGlu ZygpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dyb3VwaW5nKCk7IH0KCiAgICAgIHN0 cmluZ190eXBlCiAgICAgIHRydWVuYW1lKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f dHJ1ZW5hbWUoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgZmFsc2VuYW1lKCkgY29uc3QK ICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZmFsc2VuYW1lKCk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfm51bXB1bmN0KCk7CgogICAgICB2aXJ0dWFsIGNoYXJfdHlwZQog ICAgICBkb19kZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZGVjaW1hbF9w b2ludDsgfQoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fdGhvdXNhbmRzX3NlcCgp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Rob3VzYW5kc19zZXA7IH0KCiAgICAgIHZpcnR1YWwg c3RyaW5nCiAgICAgIGRvX2dyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZ3JvdXBp bmc7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fdHJ1ZW5hbWUoKSBjb25z dAogICAgICB7IHJldHVybiBfTV90cnVlbmFtZTsgfQoKICAgICAgdmlydHVhbCBzdHJpbmdfdHlw ZQogICAgICBkb19mYWxzZW5hbWUoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9mYWxzZW5hbWU7 IH0KCgogICAgICB2b2lkCiAgICAgIF9NX2luaXRpYWxpemVfbnVtcHVuY3QoX19jX2xvY2FsZSBf X2Nsb2MgPSBfU19jX2xvY2FsZSk7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+ CiAgICBsb2NhbGU6OmlkIG51bXB1bmN0PF9DaGFyVD46OmlkOwoKICB0ZW1wbGF0ZTw+CiAgICBu dW1wdW5jdDxjaGFyPjo6fm51bXB1bmN0KCk7CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIG51 bXB1bmN0PGNoYXI+OjpfTV9pbml0aWFsaXplX251bXB1bmN0KF9fY19sb2NhbGUgX19jbG9jKTsK CgogIHRlbXBsYXRlPD4KICAgIG51bXB1bmN0PHdjaGFyX3Q+Ojp+bnVtcHVuY3QoKTsKCiAgdGVt cGxhdGU8PgogICAgdm9pZAogICAgbnVtcHVuY3Q8d2NoYXJfdD46Ol9NX2luaXRpYWxpemVfbnVt cHVuY3QoX19jX2xvY2FsZSBfX2Nsb2MpOwoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgog ICAgY2xhc3MgbnVtcHVuY3RfYnluYW1lIDogcHVibGljIG51bXB1bmN0PF9DaGFyVD4KICAgIHsK CiAgICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfbnVtcHVuY3Q7CgogICAgcHVibGljOgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAogICAgICBudW1wdW5jdF9ieW5hbWUo Y29uc3QgY2hhciogX19zLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBudW1wdW5jdDxfQ2hh clQ+KF9fcmVmcykKICAgICAgewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2Fs ZV9udW1wdW5jdCwgX19zKTsKICAgICAgICBfTV9pbml0aWFsaXplX251bXB1bmN0KF9NX2NfbG9j YWxlX251bXB1bmN0KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAg ICB+bnVtcHVuY3RfYnluYW1lKCkKICAgICAgeyBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9j YWxlX251bXB1bmN0KTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgY2xhc3MgbnVtX2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0LCBw dWJsaWMgX19udW1fYmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQg Y2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9Jbkl0ZXIgaXRlcl90eXBlOwoKICAgICAgc3RhdGlj IGxvY2FsZTo6aWQgaWQ7CgogICAgICBleHBsaWNpdAogICAgICBudW1fZ2V0KHNpemVfdCBfX3Jl ZnMgPSAwKSA6IGxvY2FsZTo6ZmFjZXQoX19yZWZzKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lvLCBfX2VyciwgX192KTsgfQoK ICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9u ZyYgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9f aW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBf X2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgogICAgICBp dGVyX3R5cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX2luLCBpdGVyX3R5cGUgX19lbmQsIGlvc19i YXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB1bnNpZ25lZCBp bnQmIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBf X2lvLCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUg X19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNl Ojppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJldHVy biB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAgICAg aXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBpb3Nf YmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgbG9uZyBsb25n JiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19p bywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9f aW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxvbmcgbG9uZyYgX192KSBjb25zdAogICAgICB7IHJl dHVybiB0aGlzLT5kb19nZXQoX19pbiwgX19lbmQsIF9faW8sIF9fZXJyLCBfX3YpOyB9CgoKICAg ICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19pbiwgaXRlcl90eXBlIF9fZW5kLCBp b3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgZmxvYXQm IF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9faW4sIF9fZW5kLCBfX2lv LCBfX2VyciwgX192KTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIGdldChpdGVyX3R5cGUgX19p biwgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGlvc19iYXNlOjpp b3N0YXRlJiBfX2VyciwgZG91YmxlJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRv X2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog ICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBfX3YpIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2luLCBfX2VuZCwgX19pbywgX19lcnIs IF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXQoaXRlcl90eXBlIF9faW4sIGl0ZXJf dHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHZvaWQqJiBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX2lu LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwgfm51bV9nZXQoKSB7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBfTV9leHRyYWN0X2Zsb2F0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwKICAg ICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYykgY29uc3Q7CgogICAgICBpdGVyX3R5 cGUKICAgICAgX01fZXh0cmFjdF9pbnQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwg aW9zX2Jhc2U6Omlvc3RhdGUmLAogICAgICAgICAgICAgICAgICAgICBzdHJpbmcmIF9feHRyYywg aW50JiBfX2Jhc2UpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiwgYm9v bCYpIGNvbnN0OwoKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5 cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYsIGxvbmcmKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJf dHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICAg dW5zaWduZWQgc2hvcnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRv X2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBpbnQmKSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICB1bnNpZ25lZCBsb25nJikgY29u c3Q7CgoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRl cl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAg IGxvbmcgbG9uZyYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0 KGl0ZXJfdHlwZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwKICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyYpIGNvbnN0OwoKCiAgICAgIHZpcnR1 YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldChpdGVyX3R5cGUsIGl0ZXJfdHlwZSwgaW9zX2Jhc2Um LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAgICAgICBmbG9hdCYpIGNvbnN0OwoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSwgaXRlcl90eXBl LCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAgICAgICAgIGRvdWJs ZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlw ZSwgaXRlcl90eXBlLCBpb3NfYmFzZSYsIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwKICAgICAg ICAgICAgIGxvbmcgZG91YmxlJikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQogICAg ICBkb19nZXQoaXRlcl90eXBlLCBpdGVyX3R5cGUsIGlvc19iYXNlJiwgaW9zX2Jhc2U6Omlvc3Rh dGUmIF9fZXJyLAogICAgICAgICAgICAgdm9pZComKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGxvY2FsZTo6aWQgbnVtX2dl dDxfQ2hhclQsIF9Jbkl0ZXI+OjppZDsKIyA3MjEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlX2ZhY2V0cy5oIiAzCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfT3V0SXRlcj4KICAgIGNsYXNzIG51bV9wdXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg cHVibGljIF9fbnVtX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfT3V0SXRlciBpdGVyX3R5cGU7CgogICAgICBzdGF0 aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG51bV9wdXQoc2l6ZV90IF9f cmVmcyA9IDApIDogbG9jYWxlOjpmYWNldChfX3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAg ICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19mLCBjaGFyX3R5cGUgX19maWxsLCBi b29sIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2Zp bGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9z X2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwgX19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2Zp bGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCgogICAgICBpdGVyX3R5cGUKICAg ICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsIGxv bmcgbG9uZyBfX3YpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9fZiwg X19maWxsLCBfX3YpOyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3Ms IGlvc19iYXNlJiBfX2YsIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICB1bnNpZ25lZCBsb25n IGxvbmcgX192KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wdXQoX19zLCBfX2YsIF9f ZmlsbCwgX192KTsgfQoKCiAgICAgIGl0ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywg aW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwgZG91YmxlIF9fdikgY29uc3QKICAgICAg eyByZXR1cm4gdGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0 ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBl IF9fZmlsbCwKICAgICAgICAgIGxvbmcgZG91YmxlIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fcHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICAgIGl0ZXJfdHlwZQog ICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9fZiwgY2hhcl90eXBlIF9fZmlsbCwK ICAgICAgICAgIGNvbnN0IHZvaWQqIF9fdikgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9f cHV0KF9fcywgX19mLCBfX2ZpbGwsIF9fdik7IH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHRlbXBs YXRlPHR5cGVuYW1lIF9WYWx1ZVQ+CiAgICAgICAgaXRlcl90eXBlCiAgICAgICAgX01fY29udmVy dF9mbG9hdChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAg ICAgICAgICAgICAgICAgICAgICAgY2hhciBfX21vZCwgX1ZhbHVlVCBfX3YpIGNvbnN0OwoKICAg ICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgICBpdGVyX3R5cGUKICAgICAgICBf TV9jb252ZXJ0X2ludChpdGVyX3R5cGUsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxs LAogICAgICAgICAgICAgICAgICAgICAgIGNoYXIgX19tb2QsIGNoYXIgX19tb2RsLCBfVmFsdWVU IF9fdikgY29uc3Q7CgogICAgICBpdGVyX3R5cGUKICAgICAgX01fd2lkZW5fZmxvYXQoaXRlcl90 eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY2hhciogX19jcywKICAgICAg ICAgICAgICAgICAgICAgaW50IF9fbGVuKSBjb25zdDsKCiAgICAgIGl0ZXJfdHlwZQogICAgICBf TV93aWRlbl9pbnQoaXRlcl90eXBlLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwg Y2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3Q7CgogICAgICBp dGVyX3R5cGUKICAgICAgX01faW5zZXJ0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmIF9faW8sIGNoYXJf dHlwZSBfX2ZpbGwsCiAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fd3MsIGludCBf X2xlbikgY29uc3Q7CgogICAgICB2aXJ0dWFsCiAgICAgIH5udW1fcHV0KCkgeyB9OwoKICAgICAg dmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFy X3R5cGUgX19maWxsLCBib29sIF9fdikgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcg X192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5 cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9fZmlsbCwgdW5zaWduZWQgbG9uZykgY29uc3Q7CgoK ICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9zX2Jhc2Um LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGxvbmcgX192KSBjb25zdDsKCiAgICAgIHZpcnR1YWwg aXRlcl90eXBlCiAgICAgIGRvX3B1dChpdGVyX3R5cGUsIGlvc19iYXNlJiwgY2hhcl90eXBlIF9f ZmlsbCwgdW5zaWduZWQgbG9uZyBsb25nKSBjb25zdDsKCgogICAgICB2aXJ0dWFsIGl0ZXJfdHlw ZQogICAgICBkb19wdXQoaXRlcl90eXBlLCBpb3NfYmFzZSYsIGNoYXJfdHlwZSBfX2ZpbGwsIGRv dWJsZSBfX3YpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0 ZXJfdHlwZSwgaW9zX2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBsb25nIGRvdWJsZSBfX3YpIGNv bnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSwgaW9z X2Jhc2UmLCBjaGFyX3R5cGUgX19maWxsLCBjb25zdCB2b2lkKiBfX3YpIGNvbnN0OwogICAgfTsK CiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBsb2Nh bGU6OmlkIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJUPgogICAgY2xhc3MgY29sbGF0ZSA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7 CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVk ZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAg ICAgIF9fY19sb2NhbGUgX01fY19sb2NhbGVfY29sbGF0ZTsKCiAgICBwdWJsaWM6CiAgICAgIHN0 YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQKICAgICAgY29sbGF0ZShzaXplX3Qg X19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xv Y2FsZV9jb2xsYXRlID0gX1NfY19sb2NhbGU7IH0KCgogICAgICBleHBsaWNpdAogICAgICBjb2xs YXRlKF9fY19sb2NhbGUgX19jbG9jLCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBsb2NhbGU6 OmZhY2V0KF9fcmVmcykKICAgICAgeyBfTV9jX2xvY2FsZV9jb2xsYXRlID0gX1NfY2xvbmVfY19s b2NhbGUoX19jbG9jKTsgfQoKICAgICAgaW50CiAgICAgIGNvbXBhcmUoY29uc3QgX0NoYXJUKiBf X2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICBjb25zdCBfQ2hhclQqIF9f bG8yLCBjb25zdCBfQ2hhclQqIF9faGkyKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19j b21wYXJlKF9fbG8xLCBfX2hpMSwgX19sbzIsIF9faGkyKTsgfQoKICAgICAgc3RyaW5nX3R5cGUK ICAgICAgdHJhbnNmb3JtKGNvbnN0IF9DaGFyVCogX19sbywgY29uc3QgX0NoYXJUKiBfX2hpKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb190cmFuc2Zvcm0oX19sbywgX19oaSk7IH0KCiAg ICAgIGxvbmcKICAgICAgaGFzaChjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19o aSkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9faGFzaChfX2xvLCBfX2hpKTsgfQoKCiAg ICAgIGludAogICAgICBfTV9jb21wYXJlKGNvbnN0IF9DaGFyVCosIGNvbnN0IF9DaGFyVCopIGNv bnN0OwoKICAgICAgc2l6ZV90CiAgICAgIF9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBfQ2hh clQqLCBzaXplX3QpIGNvbnN0OwoKICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfmNv bGxhdGUoKQogICAgICB7CiAgICAgICAgaWYgKF9NX2NfbG9jYWxlX2NvbGxhdGUgIT0gX1NfY19s b2NhbGUpCiAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX2NvbGxhdGUp OwogICAgICB9CgogICAgICB2aXJ0dWFsIGludAogICAgICBkb19jb21wYXJlKGNvbnN0IF9DaGFy VCogX19sbzEsIGNvbnN0IF9DaGFyVCogX19oaTEsCiAgICAgICAgICAgICAgICAgY29uc3QgX0No YXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3Q7CgogICAgICB2aXJ0dWFsIHN0 cmluZ190eXBlCiAgICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D aGFyVCogX19oaSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGxvbmcKICAgICAgZG9faGFzaChjb25z dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3Q7CiAgICB9OwoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBsb2NhbGU6OmlkIGNvbGxhdGU8X0NoYXJUPjo6aWQ7 CgoKICB0ZW1wbGF0ZTw+CiAgICBpbnQKICAgIGNvbGxhdGU8Y2hhcj46Ol9NX2NvbXBhcmUoY29u c3QgY2hhciosIGNvbnN0IGNoYXIqKSBjb25zdDsKCiAgdGVtcGxhdGU8PgogICAgc2l6ZV90CiAg ICBjb2xsYXRlPGNoYXI+OjpfTV90cmFuc2Zvcm0oY2hhciosIGNvbnN0IGNoYXIqLCBzaXplX3Qp IGNvbnN0OwoKCiAgdGVtcGxhdGU8PgogICAgaW50CiAgICBjb2xsYXRlPHdjaGFyX3Q+OjpfTV9j b21wYXJlKGNvbnN0IHdjaGFyX3QqLCBjb25zdCB3Y2hhcl90KikgY29uc3Q7CgogIHRlbXBsYXRl PD4KICAgIHNpemVfdAogICAgY29sbGF0ZTx3Y2hhcl90Pjo6X01fdHJhbnNmb3JtKHdjaGFyX3Qq LCBjb25zdCB3Y2hhcl90Kiwgc2l6ZV90KSBjb25zdDsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGNsYXNzIGNvbGxhdGVfYnluYW1lIDogcHVibGljIGNvbGxhdGU8X0NoYXJUPgog ICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5 cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBleHBsaWNpdAog ICAgICBjb2xsYXRlX2J5bmFtZShjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQog ICAgICA6IGNvbGxhdGU8X0NoYXJUPihfX3JlZnMpCiAgICAgIHsKICAgICAgICBpZiAoX01fY19s b2NhbGVfY29sbGF0ZSAhPSBfU19jX2xvY2FsZSkKICAgICAgICAgIF9TX2Rlc3Ryb3lfY19sb2Nh bGUoX01fY19sb2NhbGVfY29sbGF0ZSk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX2NvbGxhdGUsIF9fcyk7CiAgICAgIH0KCiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1 YWwKICAgICAgfmNvbGxhdGVfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgdGltZV9iYXNl CiAgewogIHB1YmxpYzoKICAgIGVudW0gZGF0ZW9yZGVyIHsgbm9fb3JkZXIsIGRteSwgbWR5LCB5 bWQsIHlkbSB9OwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIF9f dGltZXB1bmN0IDogcHVibGljIGxvY2FsZTo6ZmFjZXQKICAgIHsKICAgIHB1YmxpYzoKCiAgICAg IHR5cGVkZWYgX0NoYXJUIF9fY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxf Q2hhclQ+IF9fc3RyaW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCgogICAg ICBzdGF0aWMgY29uc3QgX0NoYXJUKiBfU190aW1lem9uZXNbMTRdOwoKICAgIHByb3RlY3RlZDoK ICAgICAgX19jX2xvY2FsZSBfTV9jX2xvY2FsZV90aW1lcHVuY3Q7CiAgICAgIGNvbnN0IGNoYXIq IF9NX25hbWVfdGltZXB1bmN0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZm9ybWF0Owog ICAgICBjb25zdCBfQ2hhclQqIF9NX2RhdGVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJU KiBfTV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV90aW1lX2VyYV9mb3JtYXQ7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF0ZV90aW1lX2Zvcm1hdDsKICAgICAgY29uc3QgX0No YXJUKiBfTV9kYXRlX3RpbWVfZXJhX2Zvcm1hdDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbTsK ICAgICAgY29uc3QgX0NoYXJUKiBfTV9wbTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9hbV9wbV9m b3JtYXQ7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXkxOwogICAgICBjb25zdCBfQ2hhclQq IF9NX2RheTI7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5MzsKICAgICAgY29uc3QgX0NoYXJU KiBfTV9kYXk0OwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheTU7CiAgICAgIGNvbnN0IF9DaGFy VCogX01fZGF5NjsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXk3OwoKCiAgICAgIGNvbnN0IF9D aGFyVCogX01fZGF5X2ExOwogICAgICBjb25zdCBfQ2hhclQqIF9NX2RheV9hMjsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9kYXlfYTM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E0OwogICAg ICBjb25zdCBfQ2hhclQqIF9NX2RheV9hNTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9kYXlfYTY7 CiAgICAgIGNvbnN0IF9DaGFyVCogX01fZGF5X2E3OwoKCiAgICAgIGNvbnN0IF9DaGFyVCogX01f bW9udGgwMTsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDAyOwogICAgICBjb25zdCBfQ2hh clQqIF9NX21vbnRoMDM7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNDsKICAgICAgY29u c3QgX0NoYXJUKiBfTV9tb250aDA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDY7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGgwNzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250 aDA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoMDk7CiAgICAgIGNvbnN0IF9DaGFyVCog X01fbW9udGgxMDsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aDExOwogICAgICBjb25zdCBf Q2hhclQqIF9NX21vbnRoMTI7CgoKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDE7CiAg ICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTAyOwogICAgICBjb25zdCBfQ2hhclQqIF9NX21v bnRoX2EwMzsKICAgICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDQ7CiAgICAgIGNvbnN0IF9D aGFyVCogX01fbW9udGhfYTA1OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwNjsKICAg ICAgY29uc3QgX0NoYXJUKiBfTV9tb250aF9hMDc7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9u dGhfYTA4OwogICAgICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2EwOTsKICAgICAgY29uc3QgX0No YXJUKiBfTV9tb250aF9hMTA7CiAgICAgIGNvbnN0IF9DaGFyVCogX01fbW9udGhfYTExOwogICAg ICBjb25zdCBfQ2hhclQqIF9NX21vbnRoX2ExMjsKCiAgICBwdWJsaWM6CiAgICAgIGV4cGxpY2l0 CiAgICAgIF9fdGltZXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFj ZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoIkMiKQogICAgICB7IF9NX2luaXRpYWxpemVf dGltZXB1bmN0KCk7IH0KCiAgICAgIGV4cGxpY2l0CiAgICAgIF9fdGltZXB1bmN0KF9fY19sb2Nh bGUgX19jbG9jLCBjb25zdCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKSwgX01fbmFtZV90aW1lcHVuY3QoX19zKQogICAgICB7IF9NX2lu aXRpYWxpemVfdGltZXB1bmN0KF9fY2xvYyk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0KF9D aGFyVCogX19zLCBzaXplX3QgX19tYXhsZW4sIGNvbnN0IF9DaGFyVCogX19mb3JtYXQsCiAgICAg ICAgICAgICBjb25zdCB0bSogX190bSkgY29uc3Q7CgogICAgICB2b2lkCiAgICAgIF9NX2RhdGVf Zm9ybWF0cyhjb25zdCBfQ2hhclQqKiBfX2RhdGUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX19k YXRlWzBdID0gX01fZGF0ZV9mb3JtYXQ7CiAgICAgICAgX19kYXRlWzFdID0gX01fZGF0ZV9lcmFf Zm9ybWF0OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX3RpbWVfZm9ybWF0cyhjb25zdCBf Q2hhclQqKiBfX3RpbWUpIGNvbnN0CiAgICAgIHsKCiAgICAgICAgX190aW1lWzBdID0gX01fdGlt ZV9mb3JtYXQ7CiAgICAgICAgX190aW1lWzFdID0gX01fdGltZV9lcmFfZm9ybWF0OwogICAgICB9 CgogICAgICB2b2lkCiAgICAgIF9NX2FtcG0oY29uc3QgX0NoYXJUKiogX19hbXBtKSBjb25zdAog ICAgICB7CiAgICAgICAgX19hbXBtWzBdID0gX01fYW07CiAgICAgICAgX19hbXBtWzFdID0gX01f cG07CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF0ZV90aW1lX2Zvcm1hdHMoY29uc3Qg X0NoYXJUKiogX19kdCkgY29uc3QKICAgICAgewoKICAgICAgICBfX2R0WzBdID0gX01fZGF0ZV90 aW1lX2Zvcm1hdDsKICAgICAgICBfX2R0WzFdID0gX01fZGF0ZV90aW1lX2VyYV9mb3JtYXQ7CiAg ICAgIH0KCiAgICAgIHZvaWQKICAgICAgX01fZGF5cyhjb25zdCBfQ2hhclQqKiBfX2RheXMpIGNv bnN0CiAgICAgIHsKICAgICAgICBfX2RheXNbMF0gPSBfTV9kYXkxOwogICAgICAgIF9fZGF5c1sx XSA9IF9NX2RheTI7CiAgICAgICAgX19kYXlzWzJdID0gX01fZGF5MzsKICAgICAgICBfX2RheXNb M10gPSBfTV9kYXk0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheTU7CiAgICAgICAgX19kYXlz WzVdID0gX01fZGF5NjsKICAgICAgICBfX2RheXNbNl0gPSBfTV9kYXk3OwogICAgICB9CgogICAg ICB2b2lkCiAgICAgIF9NX2RheXNfYWJicmV2aWF0ZWQoY29uc3QgX0NoYXJUKiogX19kYXlzKSBj b25zdAogICAgICB7CiAgICAgICAgX19kYXlzWzBdID0gX01fZGF5X2ExOwogICAgICAgIF9fZGF5 c1sxXSA9IF9NX2RheV9hMjsKICAgICAgICBfX2RheXNbMl0gPSBfTV9kYXlfYTM7CiAgICAgICAg X19kYXlzWzNdID0gX01fZGF5X2E0OwogICAgICAgIF9fZGF5c1s0XSA9IF9NX2RheV9hNTsKICAg ICAgICBfX2RheXNbNV0gPSBfTV9kYXlfYTY7CiAgICAgICAgX19kYXlzWzZdID0gX01fZGF5X2E3 OwogICAgICB9CgogICAgICB2b2lkCiAgICAgIF9NX21vbnRocyhjb25zdCBfQ2hhclQqKiBfX21v bnRocykgY29uc3QKICAgICAgewogICAgICAgIF9fbW9udGhzWzBdID0gX01fbW9udGgwMTsKICAg ICAgICBfX21vbnRoc1sxXSA9IF9NX21vbnRoMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9t b250aDAzOwogICAgICAgIF9fbW9udGhzWzNdID0gX01fbW9udGgwNDsKICAgICAgICBfX21vbnRo c1s0XSA9IF9NX21vbnRoMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aDA2OwogICAg ICAgIF9fbW9udGhzWzZdID0gX01fbW9udGgwNzsKICAgICAgICBfX21vbnRoc1s3XSA9IF9NX21v bnRoMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aDA5OwogICAgICAgIF9fbW9udGhz WzldID0gX01fbW9udGgxMDsKICAgICAgICBfX21vbnRoc1sxMF0gPSBfTV9tb250aDExOwogICAg ICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoMTI7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAg X01fbW9udGhzX2FiYnJldmlhdGVkKGNvbnN0IF9DaGFyVCoqIF9fbW9udGhzKSBjb25zdAogICAg ICB7CiAgICAgICAgX19tb250aHNbMF0gPSBfTV9tb250aF9hMDE7CiAgICAgICAgX19tb250aHNb MV0gPSBfTV9tb250aF9hMDI7CiAgICAgICAgX19tb250aHNbMl0gPSBfTV9tb250aF9hMDM7CiAg ICAgICAgX19tb250aHNbM10gPSBfTV9tb250aF9hMDQ7CiAgICAgICAgX19tb250aHNbNF0gPSBf TV9tb250aF9hMDU7CiAgICAgICAgX19tb250aHNbNV0gPSBfTV9tb250aF9hMDY7CiAgICAgICAg X19tb250aHNbNl0gPSBfTV9tb250aF9hMDc7CiAgICAgICAgX19tb250aHNbN10gPSBfTV9tb250 aF9hMDg7CiAgICAgICAgX19tb250aHNbOF0gPSBfTV9tb250aF9hMDk7CiAgICAgICAgX19tb250 aHNbOV0gPSBfTV9tb250aF9hMTA7CiAgICAgICAgX19tb250aHNbMTBdID0gX01fbW9udGhfYTEx OwogICAgICAgIF9fbW9udGhzWzExXSA9IF9NX21vbnRoX2ExMjsKICAgICAgfQoKICAgIHByb3Rl Y3RlZDoKICAgICAgdmlydHVhbAogICAgICB+X190aW1lcHVuY3QoKTsKCgogICAgICB2b2lkCiAg ICAgIF9NX2luaXRpYWxpemVfdGltZXB1bmN0KF9fY19sb2NhbGUgX19jbG9jID0gX1NfY19sb2Nh bGUpOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgbG9jYWxlOjppZCBf X3RpbWVwdW5jdDxfQ2hhclQ+OjppZDsKCgogIHRlbXBsYXRlPD4KICAgIF9fdGltZXB1bmN0PGNo YXI+Ojp+X190aW1lcHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgY29uc3QgY2hhcioKICAgIF9f dGltZXB1bmN0PGNoYXI+OjpfU190aW1lem9uZXNbMTRdOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lk CiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6X01faW5pdGlhbGl6ZV90aW1lcHVuY3QoX19jX2xvY2Fs ZSBfX2Nsb2MpOwoKICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBfX3RpbWVwdW5jdDxjaGFyPjo6 X01fcHV0KGNoYXIqLCBzaXplX3QsIGNvbnN0IGNoYXIqLCBjb25zdCB0bSopIGNvbnN0OwoKCiAg dGVtcGxhdGU8PgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46On5fX3RpbWVwdW5jdCgpOwoKICB0 ZW1wbGF0ZTw+CiAgICBjb25zdCB3Y2hhcl90KgogICAgX190aW1lcHVuY3Q8d2NoYXJfdD46Ol9T X3RpbWV6b25lc1sxNF07CgogIHRlbXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdj aGFyX3Q+OjpfTV9pbml0aWFsaXplX3RpbWVwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyk7CgogIHRl bXBsYXRlPD4KICAgIHZvaWQKICAgIF9fdGltZXB1bmN0PHdjaGFyX3Q+OjpfTV9wdXQod2NoYXJf dCosIHNpemVfdCwgY29uc3Qgd2NoYXJfdCosCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIGNvbnN0IHRtKikgY29uc3Q7CgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg Y29uc3QgX0NoYXJUKiBfX3RpbWVwdW5jdDxfQ2hhclQ+OjpfU190aW1lem9uZXNbMTRdOwoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgY2xhc3MgdGlt ZV9nZXQgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAg cHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9J bkl0ZXIgaXRlcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IF9fc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIHRpbWVfZ2V0KHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQgKF9f cmVmcykgeyB9CgogICAgICBkYXRlb3JkZXIKICAgICAgZGF0ZV9vcmRlcigpIGNvbnN0CiAgICAg IHsgcmV0dXJuIHRoaXMtPmRvX2RhdGVfb3JkZXIoKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAg IGdldF90aW1lKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19p bywKICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29u c3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0X3RpbWUoX19iZWcsIF9fZW5kLCBfX2lvLCBf X2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAgICBnZXRfZGF0ZShpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRo aXMtPmRvX2dldF9kYXRlKF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0pOyB9CgogICAg ICBpdGVyX3R5cGUKICAgICAgZ2V0X3dlZWtkYXkoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUg X19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0 ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19nZXRfd2Vl a2RheShfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3RtKTsgfQoKICAgICAgaXRlcl90eXBl CiAgICAgIGdldF9tb250aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2Vy ciwgdG0qIF9fdG0pIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF9tb250aG5hbWUo X19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSk7IH0KCiAgICAgIGl0ZXJfdHlwZQogICAg ICBnZXRfeWVhcihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNv bnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldF95ZWFyKF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9fdG0pOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH50aW1l X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBkYXRlb3JkZXIKICAgICAgZG9fZGF0ZV9vcmRlcigp IGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fZ2V0X3RpbWUoaXRlcl90 eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdDsKCiAgICAgIHZp cnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9kYXRlKGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90 eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlv c3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXRfd2Vla2RheShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9z X2Jhc2UmLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRt KiBfX3RtKSBjb25zdDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF9tb250 aG5hbWUoaXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiwKICAgICAg ICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25z dDsKCiAgICAgIHZpcnR1YWwgaXRlcl90eXBlCiAgICAgIGRvX2dldF95ZWFyKGl0ZXJfdHlwZSBf X2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAg aW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSkgY29uc3Q7CgoKICAgICAgdm9pZAog ICAgICBfTV9leHRyYWN0X251bShpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBp bnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICBpbnQgX19taW4sIGludCBfX21heCwg c2l6ZV90IF9fbGVuLAogICAgICAgICAgICAgICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBf X2N0eXBlLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNv bnN0OwoKCgogICAgICB2b2lkCiAgICAgIF9NX2V4dHJhY3RfbmFtZShpdGVyX3R5cGUmIF9fYmVn LCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAgICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiogX19uYW1lcywgc2l6ZV90IF9faW5kZXhsZW4sCiAgICAgICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0OwoKCiAgICAgIHZvaWQKICAg ICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KGl0ZXJfdHlwZSYgX19iZWcsIGl0ZXJfdHlwZSYgX19l bmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6 Omlvc3RhdGUmIF9fZXJyLCB0bSogX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IF9DaGFyVCogX19mb3JtYXQpIGNvbnN0OwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgbG9jYWxlOjppZCB0aW1lX2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5J dGVyPgogICAgY2xhc3MgdGltZV9nZXRfYnluYW1lIDogcHVibGljIHRpbWVfZ2V0PF9DaGFyVCwg X0luSXRlcj4KICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlw ZTsKICAgICAgdHlwZWRlZiBfSW5JdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAg IHRpbWVfZ2V0X2J5bmFtZShjb25zdCBjaGFyKiwgc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDog dGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPihfX3JlZnMpIHsgfQoKICAgIHByb3RlY3RlZDoKICAg ICAgdmlydHVhbAogICAgICB+dGltZV9nZXRfYnluYW1lKCkgeyB9CiAgICB9OwoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgY2xhc3MgdGltZV9wdXQg OiBwdWJsaWMgbG9jYWxlOjpmYWNldCwgcHVibGljIHRpbWVfYmFzZQogICAgewogICAgcHVibGlj OgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9PdXRJdGVy IGl0ZXJfdHlwZTsKCiAgICAgIHN0YXRpYyBsb2NhbGU6OmlkIGlkOwoKICAgICAgZXhwbGljaXQK ICAgICAgdGltZV9wdXQoc2l6ZV90IF9fcmVmcyA9IDApCiAgICAgIDogbG9jYWxlOjpmYWNldChf X3JlZnMpIHsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICBj b25zdCBfQ2hhclQqIF9fYmVnLCBjb25zdCBfQ2hhclQqIF9fZW5kKSBjb25zdDsKCiAgICAgIGl0 ZXJfdHlwZQogICAgICBwdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlw ZSBfX2ZpbGwsCiAgICAgICAgICBjb25zdCB0bSogX190bSwgY2hhciBfX2Zvcm1hdCwgY2hhciBf X21vZCA9IDApIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW8sIF9f ZmlsbCwgX190bSwgX19mb3JtYXQsIF9fbW9kKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmly dHVhbAogICAgICB+dGltZV9wdXQoKQogICAgICB7IH0KCiAgICAgIHZpcnR1YWwgaXRlcl90eXBl CiAgICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9f ZmlsbCwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgICBjaGFyIF9fZm9ybWF0LCBjaGFyIF9f bW9kKSBjb25zdDsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X091dEl0ZXI+CiAgICBsb2NhbGU6OmlkIHRpbWVfcHV0PF9DaGFyVCwgX091dEl0ZXI+OjppZDsK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIGNsYXNz IHRpbWVfcHV0X2J5bmFtZSA6IHB1YmxpYyB0aW1lX3B1dDxfQ2hhclQsIF9PdXRJdGVyPgogICAg ewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwogICAgICB0eXBl ZGVmIF9PdXRJdGVyIGl0ZXJfdHlwZTsKCiAgICAgIGV4cGxpY2l0CiAgICAgIHRpbWVfcHV0X2J5 bmFtZShjb25zdCBjaGFyKiAsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IHRpbWVfcHV0PF9D aGFyVCwgX091dEl0ZXI+KF9fcmVmcykKICAgICAgeyB9OwoKICAgIHByb3RlY3RlZDoKICAgICAg dmlydHVhbAogICAgICB+dGltZV9wdXRfYnluYW1lKCkgeyB9CiAgICB9OwoKCiAgY2xhc3MgbW9u ZXlfYmFzZQogIHsKICBwdWJsaWM6CiAgICBlbnVtIHBhcnQgeyBub25lLCBzcGFjZSwgc3ltYm9s LCBzaWduLCB2YWx1ZSB9OwogICAgc3RydWN0IHBhdHRlcm4geyBjaGFyIGZpZWxkWzRdOyB9OwoK ICAgIHN0YXRpYyBjb25zdCBwYXR0ZXJuIF9TX2RlZmF1bHRfcGF0dGVybjsKCgoKICAgIHN0YXRp YyBwYXR0ZXJuCiAgICBfU19jb25zdHJ1Y3RfcGF0dGVybihjaGFyIF9fcHJlY2VkZXMsIGNoYXIg X19zcGFjZSwgY2hhciBfX3Bvc24pOwogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg Ym9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3QgOiBwdWJsaWMgbG9jYWxlOjpmYWNldCwg cHVibGljIG1vbmV5X2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJU IGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBzdHJpbmdfdHlw ZTsKCiAgICAgIHN0YXRpYyBjb25zdCBib29sIGludGwgPSBfSW50bDsKICAgICAgc3RhdGljIGxv Y2FsZTo6aWQgaWQ7CgogICAgcHJpdmF0ZToKICAgICAgY29uc3QgY2hhciogX01fZ3JvdXBpbmc7 CiAgICAgIGNoYXJfdHlwZSBfTV9kZWNpbWFsX3BvaW50OwogICAgICBjaGFyX3R5cGUgX01fdGhv dXNhbmRzX3NlcDsKICAgICAgY29uc3QgY2hhcl90eXBlKiBfTV9jdXJyX3N5bWJvbDsKICAgICAg Y29uc3QgY2hhcl90eXBlKiBfTV9wb3NpdGl2ZV9zaWduOwogICAgICBjb25zdCBjaGFyX3R5cGUq IF9NX25lZ2F0aXZlX3NpZ247CiAgICAgIGludCBfTV9mcmFjX2RpZ2l0czsKICAgICAgcGF0dGVy biBfTV9wb3NfZm9ybWF0OwogICAgICBwYXR0ZXJuIF9NX25lZ19mb3JtYXQ7CgogICAgcHVibGlj OgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KHNpemVfdCBfX3JlZnMgPSAwKSA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdCgpOyB9 CgogICAgICBleHBsaWNpdAogICAgICBtb25leXB1bmN0KF9fY19sb2NhbGUgX19jbG9jLCBjb25z dCBjaGFyKiBfX3MsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19y ZWZzKQogICAgICB7IF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2Nsb2MsIF9fcyk7IH0KCiAg ICAgIGNoYXJfdHlwZQogICAgICBkZWNpbWFsX3BvaW50KCkgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fZGVjaW1hbF9wb2ludCgpOyB9CgogICAgICBjaGFyX3R5cGUKICAgICAgdGhvdXNh bmRzX3NlcCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3Rob3VzYW5kc19zZXAoKTsg fQoKICAgICAgc3RyaW5nCiAgICAgIGdyb3VwaW5nKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fZ3JvdXBpbmcoKTsgfQoKICAgICAgc3RyaW5nX3R5cGUKICAgICAgY3Vycl9zeW1ib2wo KSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jdXJyX3N5bWJvbCgpOyB9CgogICAgICBz dHJpbmdfdHlwZQogICAgICBwb3NpdGl2ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhp cy0+ZG9fcG9zaXRpdmVfc2lnbigpOyB9CgogICAgICBzdHJpbmdfdHlwZQogICAgICBuZWdhdGl2 ZV9zaWduKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fbmVnYXRpdmVfc2lnbigpOyB9 CgogICAgICBpbnQKICAgICAgZnJhY19kaWdpdHMoKSBjb25zdAogICAgICB7IHJldHVybiB0aGlz LT5kb19mcmFjX2RpZ2l0cygpOyB9CgogICAgICBwYXR0ZXJuCiAgICAgIHBvc19mb3JtYXQoKSBj b25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19wb3NfZm9ybWF0KCk7IH0KCiAgICAgIHBhdHRl cm4KICAgICAgbmVnX2Zvcm1hdCgpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX25lZ19m b3JtYXQoKTsgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5j dCgpOwoKICAgICAgdmlydHVhbCBjaGFyX3R5cGUKICAgICAgZG9fZGVjaW1hbF9wb2ludCgpIGNv bnN0CiAgICAgIHsgcmV0dXJuIF9NX2RlY2ltYWxfcG9pbnQ7IH0KCiAgICAgIHZpcnR1YWwgY2hh cl90eXBlCiAgICAgIGRvX3Rob3VzYW5kc19zZXAoKSBjb25zdAogICAgICB7IHJldHVybiBfTV90 aG91c2FuZHNfc2VwOyB9CgogICAgICB2aXJ0dWFsIHN0cmluZwogICAgICBkb19ncm91cGluZygp IGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX2dyb3VwaW5nOyB9CgogICAgICB2aXJ0dWFsIHN0cmlu Z190eXBlCiAgICAgIGRvX2N1cnJfc3ltYm9sKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fY3Vy cl9zeW1ib2w7IH0KCiAgICAgIHZpcnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fcG9zaXRpdmVf c2lnbigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3Bvc2l0aXZlX3NpZ247IH0KCiAgICAgIHZp cnR1YWwgc3RyaW5nX3R5cGUKICAgICAgZG9fbmVnYXRpdmVfc2lnbigpIGNvbnN0CiAgICAgIHsg cmV0dXJuIF9NX25lZ2F0aXZlX3NpZ247IH0KCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIGRvX2Zy YWNfZGlnaXRzKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fZnJhY19kaWdpdHM7IH0KCiAgICAg IHZpcnR1YWwgcGF0dGVybgogICAgICBkb19wb3NfZm9ybWF0KCkgY29uc3QKICAgICAgeyByZXR1 cm4gX01fcG9zX2Zvcm1hdDsgfQoKICAgICAgdmlydHVhbCBwYXR0ZXJuCiAgICAgIGRvX25lZ19m b3JtYXQoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9uZWdfZm9ybWF0OyB9CgoKICAgICAgIHZv aWQKICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlIF9fY2xvYyA9IF9T X2NfbG9jYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqIF9f bmFtZSA9IDApOwogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRs PgogICAgbG9jYWxlOjppZCBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+OjppZDsKCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCBib29sIF9JbnRsPgogICAgY29uc3QgYm9vbCBtb25leXB1bmN0 PF9DaGFyVCwgX0ludGw+OjppbnRsOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIs IHRydWU+Ojp+bW9uZXlwdW5jdCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PGNoYXIs IGZhbHNlPjo6fm1vbmV5cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlw dW5jdDxjaGFyLCB0cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsIGNv bnN0IGNoYXIqKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDxjaGFyLCBm YWxzZT46Ol9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfX2NfbG9jYWxlLCBjb25zdCBjaGFyKik7 CgoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+Ojp+bW9uZXlwdW5j dCgpOwoKICB0ZW1wbGF0ZTw+CiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6fm1vbmV5 cHVuY3QoKTsKCiAgdGVtcGxhdGU8PgogICAgdm9pZAogICAgbW9uZXlwdW5jdDx3Y2hhcl90LCB0 cnVlPjo6X01faW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY2hhciopOwoK ICB0ZW1wbGF0ZTw+CiAgICB2b2lkCiAgICBtb25leXB1bmN0PHdjaGFyX3QsIGZhbHNlPjo6X01f aW5pdGlhbGl6ZV9tb25leXB1bmN0KF9fY19sb2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXIqKTsKCgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4KICAgIGNsYXNzIG1vbmV5cHVuY3RfYnlu YW1lIDogcHVibGljIG1vbmV5cHVuY3Q8X0NoYXJULCBfSW50bD4KICAgIHsKICAgICAgX19jX2xv Y2FsZSBfTV9jX2xvY2FsZV9tb25leXB1bmN0OwoKICAgIHB1YmxpYzoKICAgICAgdHlwZWRlZiBf Q2hhclQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQ+IHN0cmlu Z190eXBlOwoKICAgICAgc3RhdGljIGNvbnN0IGJvb2wgaW50bCA9IF9JbnRsOwoKICAgICAgZXhw bGljaXQKICAgICAgbW9uZXlwdW5jdF9ieW5hbWUoY29uc3QgY2hhciogX19zLCBzaXplX3QgX19y ZWZzID0gMCkKICAgICAgOiBtb25leXB1bmN0PF9DaGFyVCwgX0ludGw+KF9fcmVmcykKICAgICAg ewogICAgICAgIF9TX2NyZWF0ZV9jX2xvY2FsZShfTV9jX2xvY2FsZV9tb25leXB1bmN0LCBfX3Mp OwogICAgICAgIF9NX2luaXRpYWxpemVfbW9uZXlwdW5jdChfTV9jX2xvY2FsZV9tb25leXB1bmN0 KTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKICAgICAgdmlydHVhbAogICAgICB+bW9uZXlwdW5j dF9ieW5hbWUoKQogICAgICB7IF9TX2Rlc3Ryb3lfY19sb2NhbGUoX01fY19sb2NhbGVfbW9uZXlw dW5jdCk7IH0KICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgYm9vbCBfSW50bD4K ICAgIGNvbnN0IGJvb2wgbW9uZXlwdW5jdF9ieW5hbWU8X0NoYXJULCBfSW50bD46OmludGw7Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIGNsYXNzIG1v bmV5X2dldCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0 eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgX0luSXRlciBpdGVyX3R5cGU7 CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5cGU7CgogICAgICBz dGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1vbmV5X2dldChzaXpl X3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykgeyB9CgogICAgICBpdGVyX3R5 cGUKICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGws IGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25n IGRvdWJsZSYgX191bml0cykgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZG9fZ2V0KF9fcywg X19lbmQsIF9faW50bCwgX19pbywgX19lcnIsIF9fdW5pdHMpOyB9CgogICAgICBpdGVyX3R5cGUK ICAgICAgZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2ludGwsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBzdHJpbmdf dHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX2dldChfX3MsIF9f ZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX2RpZ2l0cyk7IH0KCiAgICBwcm90ZWN0ZWQ6CiAg ICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X2dldCgpIHsgfQoKICAgICAgdmlydHVhbCBpdGVyX3R5 cGUKICAgICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX3MsIGl0ZXJfdHlwZSBfX2VuZCwgYm9vbCBfX2lu dGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBsb25nIGRvdWJsZSYgX191bml0cykgY29uc3Q7CgogICAgICB2aXJ0dWFsIGl0ZXJfdHlwZQog ICAgICBkb19nZXQoaXRlcl90eXBlIF9fcywgaXRlcl90eXBlIF9fZW5kLCBib29sIF9faW50bCwg aW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHN0 cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBsb2NhbGU6OmlkIG1vbmV5X2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjppZDsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0 SXRlcj4KICAgIGNsYXNzIG1vbmV5X3B1dCA6IHB1YmxpYyBsb2NhbGU6OmZhY2V0CiAgICB7CiAg ICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBf T3V0SXRlciBpdGVyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3Ry aW5nX3R5cGU7CgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAg ICAgIG1vbmV5X3B1dChzaXplX3QgX19yZWZzID0gMCkgOiBsb2NhbGU6OmZhY2V0KF9fcmVmcykg eyB9CgogICAgICBpdGVyX3R5cGUKICAgICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRs LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgIGNoYXJfdHlwZSBfX2ZpbGwsIGxvbmcgZG91Ymxl IF9fdW5pdHMpIGNvbnN0CiAgICAgIHsgcmV0dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwg X19pbywgX19maWxsLCBfX3VuaXRzKTsgfQoKICAgICAgaXRlcl90eXBlCiAgICAgIHB1dChpdGVy X3R5cGUgX19zLCBib29sIF9faW50bCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICBjaGFyX3R5 cGUgX19maWxsLCBjb25zdCBzdHJpbmdfdHlwZSYgX19kaWdpdHMpIGNvbnN0CiAgICAgIHsgcmV0 dXJuIHRoaXMtPmRvX3B1dChfX3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7IH0K CiAgICBwcm90ZWN0ZWQ6CiAgICAgIHZpcnR1YWwKICAgICAgfm1vbmV5X3B1dCgpIHsgfQoKICAg ICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19p bnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAgICAgICAgIGxvbmcg ZG91YmxlIF9fdW5pdHMpIGNvbnN0OwoKICAgICAgdmlydHVhbCBpdGVyX3R5cGUKICAgICAgZG9f cHV0KGl0ZXJfdHlwZSBfX3MsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBl IF9fZmlsbCwKICAgICAgICAgICAgIGNvbnN0IHN0cmluZ190eXBlJiBfX2RpZ2l0cykgY29uc3Q7 CiAgICB9OwoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgog ICAgbG9jYWxlOjppZCBtb25leV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OmlkOwoKCiAgc3RydWN0 IG1lc3NhZ2VzX2Jhc2UKICB7CiAgICB0eXBlZGVmIGludCBjYXRhbG9nOwogIH07CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGNsYXNzIG1lc3NhZ2VzIDogcHVibGljIGxvY2FsZTo6 ZmFjZXQsIHB1YmxpYyBtZXNzYWdlc19iYXNlCiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBl ZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4g c3RyaW5nX3R5cGU7CgogICAgcHJvdGVjdGVkOgoKCiAgICAgIF9fY19sb2NhbGUgX01fY19sb2Nh bGVfbWVzc2FnZXM7CgoKICAgICAgY29uc3QgY2hhciogX01fbmFtZV9tZXNzYWdlczsKCgogICAg cHVibGljOgogICAgICBzdGF0aWMgbG9jYWxlOjppZCBpZDsKCiAgICAgIGV4cGxpY2l0CiAgICAg IG1lc3NhZ2VzKHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxvY2FsZTo6ZmFjZXQoX19yZWZz KSwgX01fbmFtZV9tZXNzYWdlcygiQyIpCiAgICAgIHsgX01fY19sb2NhbGVfbWVzc2FnZXMgPSBf U19jX2xvY2FsZTsgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIG1lc3NhZ2VzKF9fY19sb2NhbGUg X19jbG9jLCBjb25zdCBjaGFyKiBfX25hbWUsIHNpemVfdCBfX3JlZnMgPSAwKQogICAgICA6IGxv Y2FsZTo6ZmFjZXQoX19yZWZzKQogICAgICB7CiAgICAgICAgX01fbmFtZV9tZXNzYWdlcyA9IF9f bmFtZTsKICAgICAgICBfTV9jX2xvY2FsZV9tZXNzYWdlcyA9IF9TX2Nsb25lX2NfbG9jYWxlKF9f Y2xvYyk7CiAgICAgIH0KCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihjb25zdCBiYXNpY19zdHJp bmc8Y2hhcj4mIF9fcywgY29uc3QgbG9jYWxlJiBfX2xvYykgY29uc3QKICAgICAgeyByZXR1cm4g dGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsgfQoKCiAgICAgIGNhdGFsb2cKICAgICAgb3Blbihj b25zdCBiYXNpY19zdHJpbmc8Y2hhcj4mLCBjb25zdCBsb2NhbGUmLCBjb25zdCBjaGFyKikgY29u c3Q7CgogICAgICBzdHJpbmdfdHlwZQogICAgICBnZXQoY2F0YWxvZyBfX2MsIGludCBfX3NldCwg aW50IF9fbXNnaWQsIGNvbnN0IHN0cmluZ190eXBlJiBfX3MpIGNvbnN0CiAgICAgIHsgcmV0dXJu IHRoaXMtPmRvX2dldChfX2MsIF9fc2V0LCBfX21zZ2lkLCBfX3MpOyB9CgogICAgICB2b2lkCiAg ICAgIGNsb3NlKGNhdGFsb2cgX19jKSBjb25zdAogICAgICB7IHJldHVybiB0aGlzLT5kb19jbG9z ZShfX2MpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0dWFsCiAgICAgIH5tZXNzYWdlcygp CiAgICAgICB7CiAgICAgICAgIGlmIChfTV9jX2xvY2FsZV9tZXNzYWdlcyAhPSBfU19jX2xvY2Fs ZSkKICAgICAgICAgICBfU19kZXN0cm95X2NfbG9jYWxlKF9NX2NfbG9jYWxlX21lc3NhZ2VzKTsK ICAgICAgIH0KCiAgICAgIHZpcnR1YWwgY2F0YWxvZwogICAgICBkb19vcGVuKGNvbnN0IGJhc2lj X3N0cmluZzxjaGFyPiYsIGNvbnN0IGxvY2FsZSYpIGNvbnN0OwoKICAgICAgdmlydHVhbCBzdHJp bmdfdHlwZQogICAgICBkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZ190eXBl JiBfX2RmYXVsdCkgY29uc3Q7CgogICAgICB2aXJ0dWFsIHZvaWQKICAgICAgZG9fY2xvc2UoY2F0 YWxvZykgY29uc3Q7CgoKICAgICAgY2hhcioKICAgICAgX01fY29udmVydF90b19jaGFyKGNvbnN0 IHN0cmluZ190eXBlJiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICByZXR1cm4gcmVpbnRl cnByZXRfY2FzdDxjaGFyKj4oY29uc3RfY2FzdDxfQ2hhclQqPihfX21zZy5jX3N0cigpKSk7CiAg ICAgIH0KCgogICAgICBzdHJpbmdfdHlwZQogICAgICBfTV9jb252ZXJ0X2Zyb21fY2hhcihjaGFy KiBfX21zZykgY29uc3QKICAgICAgewoKICAgICAgICBzaXplX3QgX19sZW4gPSBjaGFyX3RyYWl0 czxjaGFyPjo6bGVuZ3RoKF9fbXNnKSAtIDE7CiMgMTczMCAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDMKICAgICAgICByZXR1cm4gc3RyaW5nX3R5cGUo KTsKICAgICAgfQogICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGxvY2Fs ZTo6aWQgbWVzc2FnZXM8X0NoYXJUPjo6aWQ7CgoKICB0ZW1wbGF0ZTw+CiAgICBzdHJpbmcKICAg IG1lc3NhZ2VzPGNoYXI+Ojpkb19nZXQoY2F0YWxvZywgaW50LCBpbnQsIGNvbnN0IHN0cmluZyYp IGNvbnN0OwoKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaTY4Ni1wYy1saW51eC1n bnUvYml0cy9tZXNzYWdlc19tZW1iZXJzLmgiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUv YysrLzMuMi9pNjg2LXBjLWxpbnV4LWdudS9iaXRzL21lc3NhZ2VzX21lbWJlcnMuaCIgMwogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1lIG1lc3NhZ2VzPF9DaGFyVD46OmNh dGFsb2cKICAgIG1lc3NhZ2VzPF9DaGFyVD46Om9wZW4oY29uc3QgYmFzaWNfc3RyaW5nPGNoYXI+ JiBfX3MsIGNvbnN0IGxvY2FsZSYgX19sb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGNoYXIqIF9fZGlyKSBjb25zdAogICAgewogICAgICBiaW5kdGV4dGRvbWFpbihfX3MuY19z dHIoKSwgX19kaXIpOwogICAgICByZXR1cm4gdGhpcy0+ZG9fb3BlbihfX3MsIF9fbG9jKTsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgdHlwZW5hbWUgbWVzc2FnZXM8X0No YXJUPjo6Y2F0YWxvZwogICAgbWVzc2FnZXM8X0NoYXJUPjo6ZG9fb3Blbihjb25zdCBiYXNpY19z dHJpbmc8Y2hhcj4mIF9fcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbG9j YWxlJikgY29uc3QKICAgIHsKCgogICAgICB0ZXh0ZG9tYWluKF9fcy5jX3N0cigpKTsKICAgICAg cmV0dXJuIDA7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIHR5cGVuYW1l IG1lc3NhZ2VzPF9DaGFyVD46OnN0cmluZ190eXBlCiAgICBtZXNzYWdlczxfQ2hhclQ+Ojpkb19n ZXQoY2F0YWxvZywgaW50LCBpbnQsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qg c3RyaW5nX3R5cGUmIF9fZGZhdWx0KSBjb25zdAogICAgewoKCgoKCgogICAgICBjaGFyKiBfX29s ZCA9IHN0cmR1cChzZXRsb2NhbGUoX19MQ19BTEwsIDApKTsKICAgICAgc2V0bG9jYWxlKF9fTENf QUxMLCBfTV9uYW1lX21lc3NhZ2VzKTsKICAgICAgY2hhciogX19tc2cgPSBnZXR0ZXh0KF9NX2Nv bnZlcnRfdG9fY2hhcihfX2RmYXVsdCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9fb2xk KTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfTV9jb252ZXJ0X2Zyb21fY2hhcihf X21zZyk7CgogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICB2b2lkCiAgICBt ZXNzYWdlczxfQ2hhclQ+Ojpkb19jbG9zZShjYXRhbG9nKSBjb25zdAogICAgeyB9CiMgMTc0NCAi L3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9sb2NhbGVfZmFjZXRzLmgiIDIgMwoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBjbGFzcyBtZXNzYWdlc19ieW5hbWUgOiBwdWJs aWMgbWVzc2FnZXM8X0NoYXJUPgogICAgewogICAgcHVibGljOgogICAgICB0eXBlZGVmIF9DaGFy VCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVD4gc3RyaW5nX3R5 cGU7CgogICAgICBleHBsaWNpdAogICAgICBtZXNzYWdlc19ieW5hbWUoY29uc3QgY2hhciogX19z LCBzaXplX3QgX19yZWZzID0gMCkKICAgICAgOiBtZXNzYWdlczxfQ2hhclQ+KF9fcmVmcykKICAg ICAgewogICAgICAgIF9NX25hbWVfbWVzc2FnZXMgPSBfX3M7CiAgICAgICAgaWYgKF9NX2NfbG9j YWxlX21lc3NhZ2VzICE9IF9TX2NfbG9jYWxlKQogICAgICAgICAgX1NfZGVzdHJveV9jX2xvY2Fs ZShfTV9jX2xvY2FsZV9tZXNzYWdlcyk7CiAgICAgICAgX1NfY3JlYXRlX2NfbG9jYWxlKF9NX2Nf bG9jYWxlX21lc3NhZ2VzLCBfX3MpOwogICAgICB9CgogICAgcHJvdGVjdGVkOgogICAgICB2aXJ0 dWFsCiAgICAgIH5tZXNzYWdlc19ieW5hbWUoKQogICAgICB7IH0KICAgIH07CgoKCgoKCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzc3BhY2UoX0NoYXJU IF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc3ByaW50KF9DaGFyVCBfX2Ms IGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJU PiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjpwcmludCwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNjbnRybChfQ2hhclQgX19jLCBjb25z dCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihf X2xvYykuaXMoY3R5cGVfYmFzZTo6Y250cmwsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJUPgogICAgaW5saW5lIGJvb2wKICAgIGlzdXBwZXIoX0NoYXJUIF9fYywgY29uc3QgbG9j YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp LmlzKGN0eXBlX2Jhc2U6OnVwcGVyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VD4KICAgIGlubGluZSBib29sIGlzbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xv YykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBl X2Jhc2U6Omxvd2VyLCBfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlu bGluZSBib29sCiAgICBpc2FscGhhKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAg ICB7IHJldHVybiB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNl OjphbHBoYSwgX19jKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUg Ym9vbAogICAgaXNkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyBy ZXR1cm4gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6ZGln aXQsIF9fYyk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIGJvb2wK ICAgIGlzcHVuY3QoX0NoYXJUIF9fYywgY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsgcmV0dXJu IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpLmlzKGN0eXBlX2Jhc2U6OnB1bmN0LCBf X2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBp c3hkaWdpdChfQ2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6eGRpZ2l0LCBfX2Mp OyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVD4KICAgIGlubGluZSBib29sCiAgICBpc2Fs bnVtKF9DaGFyVCBfX2MsIGNvbnN0IGxvY2FsZSYgX19sb2MpCiAgICB7IHJldHVybiB1c2VfZmFj ZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKS5pcyhjdHlwZV9iYXNlOjphbG51bSwgX19jKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbmxpbmUgYm9vbAogICAgaXNncmFwaChf Q2hhclQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0 eXBlPF9DaGFyVD4gPihfX2xvYykuaXMoY3R5cGVfYmFzZTo6Z3JhcGgsIF9fYyk7IH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgaW5saW5lIF9DaGFyVAogICAgdG91cHBlcihfQ2hh clQgX19jLCBjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgeyByZXR1cm4gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYykudG91cHBlcihfX2MpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVD4KICAgIGlubGluZSBfQ2hhclQKICAgIHRvbG93ZXIoX0NoYXJUIF9fYywgY29uc3QgbG9j YWxlJiBfX2xvYykKICAgIHsgcmV0dXJuIHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2Mp LnRvbG93ZXIoX19jKTsgfQp9CiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv YmFzaWNfaW9zLmgiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lvcyA6IHB1YmxpYyBpb3Nf YmFzZQogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OmludF90eXBlIGludF90eXBlOwogICAgICB0 eXBlZGVmIHR5cGVuYW1lIF9UcmFpdHM6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBlZGVm IHR5cGVuYW1lIF9UcmFpdHM6Om9mZl90eXBlIG9mZl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFp dHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw ZTsKICAgICAgdHlwZWRlZiBvc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFyVCwgX1RyYWl0cz4gX19v c3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX3B1dDxfQ2hhclQsIF9fb3N0cmVhbWJ1 Zl9pdGVyPiBfX251bXB1dF90eXBlOwogICAgICB0eXBlZGVmIGlzdHJlYW1idWZfaXRlcmF0b3I8 X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1idWZfaXRlcjsKICAgICAgdHlwZWRlZiBudW1fZ2V0 PF9DaGFyVCwgX19pc3RyZWFtYnVmX2l0ZXI+IF9fbnVtZ2V0X3R5cGU7CgoKICAgIHByb3RlY3Rl ZDoKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KiBfTV90aWU7CiAgICAgIG11 dGFibGUgY2hhcl90eXBlIF9NX2ZpbGw7CiAgICAgIG11dGFibGUgYm9vbCBfTV9maWxsX2luaXQ7 CiAgICAgIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+KiBfTV9zdHJlYW1idWY7CgoK ICAgICAgY29uc3QgX19jdHlwZV90eXBlKiBfTV9mY3R5cGU7CgogICAgICBjb25zdCBfX251bXB1 dF90eXBlKiBfTV9mbnVtcHV0OwoKICAgICAgY29uc3QgX19udW1nZXRfdHlwZSogX01fZm51bWdl dDsKCiAgICBwdWJsaWM6CiAgICAgIG9wZXJhdG9yIHZvaWQqKCkgY29uc3QKICAgICAgeyByZXR1 cm4gdGhpcy0+ZmFpbCgpID8gMCA6IGNvbnN0X2Nhc3Q8YmFzaWNfaW9zKj4odGhpcyk7IH0KCiAg ICAgIGJvb2wKICAgICAgb3BlcmF0b3IhKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+ZmFp bCgpOyB9CgogICAgICBpb3N0YXRlCiAgICAgIHJkc3RhdGUoKSBjb25zdAogICAgICB7IHJldHVy biBfTV9zdHJlYW1idWZfc3RhdGU7IH0KCiAgICAgIHZvaWQKICAgICAgY2xlYXIoaW9zdGF0ZSBf X3N0YXRlID0gZ29vZGJpdCk7CgogICAgICB2b2lkCiAgICAgIHNldHN0YXRlKGlvc3RhdGUgX19z dGF0ZSkKICAgICAgeyB0aGlzLT5jbGVhcih0aGlzLT5yZHN0YXRlKCkgfCBfX3N0YXRlKTsgfQoK ICAgICAgYm9vbAogICAgICBnb29kKCkgY29uc3QKICAgICAgeyByZXR1cm4gdGhpcy0+cmRzdGF0 ZSgpID09IDA7IH0KCiAgICAgIGJvb2wKICAgICAgZW9mKCkgY29uc3QKICAgICAgeyByZXR1cm4g KHRoaXMtPnJkc3RhdGUoKSAmIGVvZmJpdCkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBmYWls KCkgY29uc3QKICAgICAgeyByZXR1cm4gKHRoaXMtPnJkc3RhdGUoKSAmIChiYWRiaXQgfCBmYWls Yml0KSkgIT0gMDsgfQoKICAgICAgYm9vbAogICAgICBiYWQoKSBjb25zdAogICAgICB7IHJldHVy biAodGhpcy0+cmRzdGF0ZSgpICYgYmFkYml0KSAhPSAwOyB9CgogICAgICBpb3N0YXRlCiAgICAg IGV4Y2VwdGlvbnMoKSBjb25zdAogICAgICB7IHJldHVybiBfTV9leGNlcHRpb247IH0KCiAgICAg IHZvaWQKICAgICAgZXhjZXB0aW9ucyhpb3N0YXRlIF9fZXhjZXB0KQogICAgICB7CiAgICAgICAg X01fZXhjZXB0aW9uID0gX19leGNlcHQ7CiAgICAgICAgdGhpcy0+Y2xlYXIoX01fc3RyZWFtYnVm X3N0YXRlKTsKICAgICAgfQoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lvcyhiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikgOiBpb3NfYmFzZSgpCiAgICAgIHsgdGhp cy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+YmFzaWNfaW9zKCkgeyB9CgoK ICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+KgogICAgICB0aWUoKSBjb25zdAog ICAgICB7IHJldHVybiBfTV90aWU7IH0KCiAgICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPioKICAgICAgdGllKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiogX190aWVzdHIp CiAgICAgIHsKICAgICAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0g X01fdGllOwogICAgICAgIF9NX3RpZSA9IF9fdGllc3RyOwogICAgICAgIHJldHVybiBfX29sZDsK ICAgICAgfQoKICAgICAgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qCiAgICAgIHJk YnVmKCkgY29uc3QKICAgICAgeyByZXR1cm4gX01fc3RyZWFtYnVmOyB9CgogICAgICBiYXNpY19z dHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgICAgcmRidWYoYmFzaWNfc3RyZWFtYnVmPF9D aGFyVCwgX1RyYWl0cz4qIF9fc2IpOwoKICAgICAgYmFzaWNfaW9zJgogICAgICBjb3B5Zm10KGNv bnN0IGJhc2ljX2lvcyYgX19yaHMpOwoKICAgICAgY2hhcl90eXBlCiAgICAgIGZpbGwoKSBjb25z dAogICAgICB7CiAgICAgICAgaWYgKCFfTV9maWxsX2luaXQpCiAgICAgICAgICB7CiAgICAgICAg ICAgIF9NX2ZpbGwgPSB0aGlzLT53aWRlbignICcpOwogICAgICAgICAgICBfTV9maWxsX2luaXQg PSB0cnVlOwogICAgICAgICAgfQogICAgICAgIHJldHVybiBfTV9maWxsOwogICAgICB9CgogICAg ICBjaGFyX3R5cGUKICAgICAgZmlsbChjaGFyX3R5cGUgX19jaCkKICAgICAgewogICAgICAgIGNo YXJfdHlwZSBfX29sZCA9IHRoaXMtPmZpbGwoKTsKICAgICAgICBfTV9maWxsID0gX19jaDsKICAg ICAgICByZXR1cm4gX19vbGQ7CiAgICAgIH0KCgogICAgICBsb2NhbGUKICAgICAgaW1idWUoY29u c3QgbG9jYWxlJiBfX2xvYyk7CgogICAgICBjaGFyCiAgICAgIG5hcnJvdyhjaGFyX3R5cGUgX19j LCBjaGFyIF9fZGZhdWx0KSBjb25zdDsKCiAgICAgIGNoYXJfdHlwZQogICAgICB3aWRlbihjaGFy IF9fYykgY29uc3Q7CgogICAgcHJvdGVjdGVkOgoKICAgICAgYmFzaWNfaW9zKCkgOiBpb3NfYmFz ZSgpCiAgICAgIHsgfQoKICAgICAgdm9pZAogICAgICBpbml0KGJhc2ljX3N0cmVhbWJ1ZjxfQ2hh clQsIF9UcmFpdHM+KiBfX3NiKTsKCiAgICAgIGJvb2wKICAgICAgX01fY2hlY2tfZmFjZXQoY29u c3QgbG9jYWxlOjpmYWNldCogX19mKSBjb25zdAogICAgICB7CiAgICAgICAgaWYgKCFfX2YpCiAg ICAgICAgICBfX3Rocm93X2JhZF9jYXN0KCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0K CiAgICAgIHZvaWQKICAgICAgX01fY2FjaGVfZmFjZXRzKGNvbnN0IGxvY2FsZSYgX19sb2MpOwog ICAgfTsKfQoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z LnRjYyIgMSAzCiMgMzQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvYmFzaWNfaW9z LnRjYyIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmNs ZWFyKGlvc3RhdGUgX19zdGF0ZSkKICAgIHsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkpCiAgICAg ICAgX01fc3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZTsKICAgICAgZWxzZQogICAgICAgICAgX01f c3RyZWFtYnVmX3N0YXRlID0gX19zdGF0ZSB8IGJhZGJpdDsKICAgICAgaWYgKCh0aGlzLT5yZHN0 YXRlKCkgJiB0aGlzLT5leGNlcHRpb25zKCkpKQogICAgICAgIF9fdGhyb3dfaW9zX2ZhaWx1cmUo ImJhc2ljX2lvczo6Y2xlYXIoaW9zdGF0ZSkgY2F1c2VkIGV4Y2VwdGlvbiIpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19zdHJl YW1idWY8X0NoYXJULCBfVHJhaXRzPioKICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+Ojpy ZGJ1ZihiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiogX19zYikKICAgIHsKICAgICAg YmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fb2xkID0gX01fc3RyZWFtYnVmOwog ICAgICBfTV9zdHJlYW1idWYgPSBfX3NiOwogICAgICB0aGlzLT5jbGVhcigpOwogICAgICByZXR1 cm4gX19vbGQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaW9zPF9DaGFy VCwgX1RyYWl0cz46OmNvcHlmbXQoY29uc3QgYmFzaWNfaW9zJiBfX3JocykKICAgIHsKCgoKCiAg ICAgIF9Xb3JkcyogX193b3JkcyA9IChfX3Jocy5fTV93b3JkX3NpemUgPD0gX1NfbG9jYWxfd29y ZF9zaXplKSA/CiAgICAgICAgX01fbG9jYWxfd29yZCA6IG5ldyBfV29yZHNbX19yaHMuX01fd29y ZF9zaXplXTsKCgogICAgICBfQ2FsbGJhY2tfbGlzdCogX19jYiA9IF9fcmhzLl9NX2NhbGxiYWNr czsKICAgICAgaWYgKF9fY2IpCiAgICAgICAgX19jYi0+X01fYWRkX3JlZmVyZW5jZSgpOwogICAg ICBfTV9jYWxsX2NhbGxiYWNrcyhlcmFzZV9ldmVudCk7CiAgICAgIGlmIChfTV93b3JkICE9IF9N X2xvY2FsX3dvcmQpCiAgICAgICAgewogICAgICAgICAgZGVsZXRlIFtdIF9NX3dvcmQ7CiAgICAg ICAgICBfTV93b3JkID0gMDsKICAgICAgICB9CiAgICAgIF9NX2Rpc3Bvc2VfY2FsbGJhY2tzKCk7 CgogICAgICBfTV9jYWxsYmFja3MgPSBfX2NiOwogICAgICBmb3IgKGludCBfX2kgPSAwOyBfX2kg PCBfX3Jocy5fTV93b3JkX3NpemU7ICsrX19pKQogICAgICAgIF9fd29yZHNbX19pXSA9IF9fcmhz Ll9NX3dvcmRbX19pXTsKICAgICAgaWYgKF9NX3dvcmQgIT0gX01fbG9jYWxfd29yZCkKICAgICAg ICB7CiAgICAgICAgICBkZWxldGUgW10gX01fd29yZDsKICAgICAgICAgIF9NX3dvcmQgPSAwOwog ICAgICAgIH0KICAgICAgX01fd29yZCA9IF9fd29yZHM7CiAgICAgIF9NX3dvcmRfc2l6ZSA9IF9f cmhzLl9NX3dvcmRfc2l6ZTsKCiAgICAgIHRoaXMtPmZsYWdzKF9fcmhzLmZsYWdzKCkpOwogICAg ICB0aGlzLT53aWR0aChfX3Jocy53aWR0aCgpKTsKICAgICAgdGhpcy0+cHJlY2lzaW9uKF9fcmhz LnByZWNpc2lvbigpKTsKICAgICAgdGhpcy0+dGllKF9fcmhzLnRpZSgpKTsKICAgICAgdGhpcy0+ ZmlsbChfX3Jocy5maWxsKCkpOwoKICAgICAgdGhpcy0+ZXhjZXB0aW9ucyhfX3Jocy5leGNlcHRp b25zKCkpOwoKICAgICAgX01fY2FsbF9jYWxsYmFja3MoY29weWZtdF9ldmVudCk7CiAgICAgIHJl dHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgY2hhcgogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46Om5hcnJvdyhj aGFyX3R5cGUgX19jLCBjaGFyIF9fZGZhdWx0KSBjb25zdAogICAgewogICAgICBjaGFyIF9fcmV0 ID0gX19kZmF1bHQ7CiAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mY3R5cGUpKQogICAgICAg IF9fcmV0ID0gX01fZmN0eXBlLT5uYXJyb3coX19jLCBfX2RmYXVsdCk7CiAgICAgIHJldHVybiBf X3JldDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRz PgogICAgX0NoYXJUCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6d2lkZW4oY2hhciBf X2MpIGNvbnN0CiAgICB7CiAgICAgIGNoYXJfdHlwZSBfX3JldCA9IGNoYXJfdHlwZSgpOwogICAg ICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZmN0eXBlKSkKICAgICAgICBfX3JldCA9IF9NX2ZjdHlw ZS0+d2lkZW4oX19jKTsKICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgbG9jYWxlCiAgICBiYXNpY19pb3M8 X0NoYXJULCBfVHJhaXRzPjo6aW1idWUoY29uc3QgbG9jYWxlJiBfX2xvYykKICAgIHsKICAgICAg bG9jYWxlIF9fb2xkKHRoaXMtPmdldGxvYygpKTsKICAgICAgaW9zX2Jhc2U6OmltYnVlKF9fbG9j KTsKICAgICAgX01fY2FjaGVfZmFjZXRzKF9fbG9jKTsKICAgICAgaWYgKHRoaXMtPnJkYnVmKCkg IT0gMCkKICAgICAgICB0aGlzLT5yZGJ1ZigpLT5wdWJpbWJ1ZShfX2xvYyk7CiAgICAgIHJldHVy biBfX29sZDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJh aXRzPgogICAgdm9pZAogICAgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz46OmluaXQoYmFzaWNf c3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4qIF9fc2IpCiAgICB7CgogICAgICBpb3NfYmFzZTo6 X01faW5pdCgpOwogICAgICBfTV9jYWNoZV9mYWNldHMoX01faW9zX2xvY2FsZSk7CiAgICAgIF9N X3RpZSA9IDA7CiMgMTU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2Jhc2ljX2lv cy50Y2MiIDMKICAgICAgX01fZmlsbCA9IF9DaGFyVCgpOwogICAgICBfTV9maWxsX2luaXQgPSBm YWxzZTsKCiAgICAgIF9NX2V4Y2VwdGlvbiA9IGdvb2RiaXQ7CiAgICAgIF9NX3N0cmVhbWJ1ZiA9 IF9fc2I7CiAgICAgIF9NX3N0cmVhbWJ1Zl9zdGF0ZSA9IF9fc2IgPyBnb29kYml0IDogYmFkYml0 OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAg ICB2b2lkCiAgICBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRzPjo6X01fY2FjaGVfZmFjZXRzKGNv bnN0IGxvY2FsZSYgX19sb2MpCiAgICB7CiAgICAgIGlmIChoYXNfZmFjZXQ8X19jdHlwZV90eXBl PihfX2xvYykpCiAgICAgICAgX01fZmN0eXBlID0gJnVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9f bG9jKTsKICAgICAgZWxzZQogICAgICAgIF9NX2ZjdHlwZSA9IDA7CgogICAgICBpZiAoaGFzX2Zh Y2V0PF9fbnVtcHV0X3R5cGU+KF9fbG9jKSkKICAgICAgICBfTV9mbnVtcHV0ID0gJnVzZV9mYWNl dDxfX251bXB1dF90eXBlPihfX2xvYyk7CiAgICAgIGVsc2UKICAgICAgICBfTV9mbnVtcHV0ID0g MDsKICAgICAgaWYgKGhhc19mYWNldDxfX251bWdldF90eXBlPihfX2xvYykpCiAgICAgICAgX01f Zm51bWdldCA9ICZ1c2VfZmFjZXQ8X19udW1nZXRfdHlwZT4oX19sb2MpOwogICAgICBlbHNlCiAg ICAgICAgX01fZm51bWdldCA9IDA7CiAgICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBi YXNpY19pb3M8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGJhc2ljX2lvczx3Y2hhcl90 PjsKfQojIDIwOCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9iYXNpY19pb3MuaCIg MiAzCiMgNTIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvcyIgMiAzCiMgNDUgIi91c3Iv bG9jYWwvaW5jbHVkZS9jKysvMy4yL2lzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNp Y19pc3RyZWFtIDogdmlydHVhbCBwdWJsaWMgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4KICAg IHsKICAgIHB1YmxpYzoKCiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlw ZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0 eXBlbmFtZSBfVHJhaXRzOjpwb3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfVHJhaXRzOjpvZmZfdHlwZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0 c190eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyZWFtYnVmPF9DaGFyVCwgX1RyYWl0cz4g X19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19pb3M8X0NoYXJULCBfVHJhaXRz PiBfX2lvc190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiBpc3RyZWFtYnVmX2l0ZXJhdG9yPF9DaGFy VCwgX1RyYWl0cz4gX19pc3RyZWFtYnVmX2l0ZXI7CiAgICAgIHR5cGVkZWYgbnVtX2dldDxfQ2hh clQsIF9faXN0cmVhbWJ1Zl9pdGVyPiBfX251bWdldF90eXBlOwogICAgICB0eXBlZGVmIGN0eXBl PF9DaGFyVD4gX19jdHlwZV90eXBlOwoKICAgIHByb3RlY3RlZDoKCiAgICAgIHN0cmVhbXNpemUg X01fZ2NvdW50OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJl YW0oX19zdHJlYW1idWZfdHlwZSogX19zYikKICAgICAgewogICAgICAgIHRoaXMtPmluaXQoX19z Yik7CiAgICAgICAgX01fZ2NvdW50ID0gc3RyZWFtc2l6ZSgwKTsKICAgICAgfQoKICAgICAgdmly dHVhbAogICAgICB+YmFzaWNfaXN0cmVhbSgpCiAgICAgIHsgX01fZ2NvdW50ID0gc3RyZWFtc2l6 ZSgwKTsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNsYXNzIHNlbnRyeTsK CgoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oX19pc3RyZWFtX3R5cGUm ICgqX19wZikoX19pc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAg b3BlcmF0b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7CgogICAgICBfX2lz dHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYp KTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pihib29sJiBfX24pOwoK ICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4oc2hvcnQmIF9fbik7CgogICAg ICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBzaG9ydCYgX19uKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGludCYgX19uKTsKCiAgICAg IF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGludCYgX19uKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcmIF9fbik7CgogICAgICBf X2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pOwoKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgbG9uZyYgX19uKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9uZyYg X19uKTsKCgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihmbG9hdCYgX19m KTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGRvdWJsZSYgX19mKTsK CiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX2Yp OwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPj4odm9pZComIF9fcCk7Cgog ICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I+PihfX3N0cmVhbWJ1Zl90eXBlKiBf X3NiKTsKCgogICAgICBpbmxpbmUgc3RyZWFtc2l6ZQogICAgICBnY291bnQodm9pZCkgY29uc3QK ICAgICAgeyByZXR1cm4gX01fZ2NvdW50OyB9CgogICAgICBpbnRfdHlwZQogICAgICBnZXQodm9p ZCk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KGNoYXJfdHlwZSYgX19jKTsKCiAg ICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUg X19uLCBjaGFyX3R5cGUgX19kZWxpbSk7CgogICAgICBpbmxpbmUgX19pc3RyZWFtX3R5cGUmCiAg ICAgIGdldChjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICAgIHsgcmV0dXJuIHRo aXMtPmdldChfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykpOyB9CgogICAgICBfX2lzdHJlYW1f dHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGlt KTsKCiAgICAgIGlubGluZSBfX2lzdHJlYW1fdHlwZSYKICAgICAgZ2V0KF9fc3RyZWFtYnVmX3R5 cGUmIF9fc2IpCiAgICAgIHsgcmV0dXJuIHRoaXMtPmdldChfX3NiLCB0aGlzLT53aWRlbignXG4n KSk7IH0KCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19z LCBzdHJlYW1zaXplIF9fbiwgY2hhcl90eXBlIF9fZGVsaW0pOwoKICAgICAgaW5saW5lIF9faXN0 cmVhbV90eXBlJgogICAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbikK ICAgICAgeyByZXR1cm4gdGhpcy0+Z2V0bGluZShfX3MsIF9fbiwgdGhpcy0+d2lkZW4oJ1xuJykp OyB9CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgaWdub3JlKHN0cmVhbXNpemUgX19uID0g MSwgaW50X3R5cGUgX19kZWxpbSA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICBpbnRfdHlw ZQogICAgICBwZWVrKHZvaWQpOwoKICAgICAgX19pc3RyZWFtX3R5cGUmCiAgICAgIHJlYWQoY2hh cl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIHN0cmVhbXNpemUKICAgICAgcmVh ZHNvbWUoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uKTsKCiAgICAgIF9faXN0cmVhbV90 eXBlJgogICAgICBwdXRiYWNrKGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19pc3RyZWFtX3R5cGUm CiAgICAgIHVuZ2V0KHZvaWQpOwoKICAgICAgaW50CiAgICAgIHN5bmModm9pZCk7CgogICAgICBw b3NfdHlwZQogICAgICB0ZWxsZyh2b2lkKTsKCiAgICAgIF9faXN0cmVhbV90eXBlJgogICAgICBz ZWVrZyhwb3NfdHlwZSk7CgogICAgICBfX2lzdHJlYW1fdHlwZSYKICAgICAgc2Vla2cob2ZmX3R5 cGUsIGlvc19iYXNlOjpzZWVrZGlyKTsKICAgIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGNsYXNzIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6c2VudHJ5CiAgICB7CiAgICBwdWJsaWM6CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFp dHNfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8X0NoYXJULCBfVHJhaXRzPiBf X3N0cmVhbWJ1Zl90eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiBfX2lzdHJlYW1fdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlw ZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBfX2ludF90eXBlOwoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5KGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcywgYm9vbCBfX25vc2tpcHdzID0gZmFs c2UpOwoKICAgICAgb3BlcmF0b3IgYm9vbCgpIHsgcmV0dXJuIF9NX29rOyB9CgogICAgcHJpdmF0 ZToKICAgICAgYm9vbCBfTV9vazsKICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pbiwgX0NoYXJU JiBfX2MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxjaGFy LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxjaGFyLCBfVHJhaXRzPiYg X19pbiwgdW5zaWduZWQgY2hhciYgX19jKQogICAgeyByZXR1cm4gKF9faW4gPj4gcmVpbnRlcnBy ZXRfY2FzdDxjaGFyJj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8Y2xhc3MgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08 Y2hhciwgX1RyYWl0cz4mIF9faW4sIHNpZ25lZCBjaGFyJiBfX2MpCiAgICB7IHJldHVybiAoX19p biA+PiByZWludGVycHJldF9jYXN0PGNoYXImPihfX2MpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19p biwgX0NoYXJUKiBfX3MpOwoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxjaGFyLF9UcmFpdHM+JgogICAgb3BlcmF0b3I+PihiYXNpY19pc3RyZWFtPGNoYXIsX1Ry YWl0cz4mIF9faW4sIHVuc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJuIChfX2luID4+IHJl aW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+ CiAgICBiYXNpY19pc3RyZWFtPGNoYXIsX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lz dHJlYW08Y2hhcixfVHJhaXRzPiYgX19pbiwgc2lnbmVkIGNoYXIqIF9fcykKICAgIHsgcmV0dXJu IChfX2luID4+IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19pb3N0cmVh bQogICAgOiBwdWJsaWMgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+LAogICAgICBwdWJs aWMgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgoKCiAg ICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJh aXRzOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfVHJhaXRzOjpvZmZfdHlw ZSBvZmZfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRyYWl0c190eXBlOwoKCgogICAgICB0 eXBlZGVmIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiBfX2lzdHJlYW1fdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7 CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19pb3N0cmVhbShiYXNpY19zdHJlYW1idWY8X0No YXJULCBfVHJhaXRzPiogX19zYikKICAgICAgOiBfX2lzdHJlYW1fdHlwZShfX3NiKSwgX19vc3Ry ZWFtX3R5cGUoX19zYikKICAgICAgeyB9CgogICAgICB2aXJ0dWFsCiAgICAgIH5iYXNpY19pb3N0 cmVhbSgpIHsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIHdzKGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19pcyk7Cn0KCgoKCgojIDEgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2xvY2FsZSIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2xv Y2FsZSIgMwoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2Zh Y2V0cy50Y2MiIDEgMwojIDM3ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2Fs ZV9mYWNldHMudGNjIiAzCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIg MSAzCiMgNDcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NlcnJubyIgMwoKIyAxICIvdXNy L2luY2x1ZGUvZXJybm8uaCIgMSAzCiMgMzIgIi91c3IvaW5jbHVkZS9lcnJuby5oIiAzCmV4dGVy biAiQyIgewoKCgojIDEgIi91c3IvaW5jbHVkZS9iaXRzL2Vycm5vLmgiIDEgMwojIDI1ICIvdXNy L2luY2x1ZGUvYml0cy9lcnJuby5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2xpbnV4L2Vycm5vLmgi IDEgMwoKCgojIDEgIi91c3IvaW5jbHVkZS9hc20vZXJybm8uaCIgMSAzCiMgNSAiL3Vzci9pbmNs dWRlL2xpbnV4L2Vycm5vLmgiIDIgMwojIDI2ICIvdXNyL2luY2x1ZGUvYml0cy9lcnJuby5oIiAy IDMKIyAzNiAiL3Vzci9pbmNsdWRlL2JpdHMvZXJybm8uaCIgMwpleHRlcm4gaW50IGVycm5vOwoK CmV4dGVybiBpbnQgKl9fZXJybm9fbG9jYXRpb24gKHZvaWQpIDsKIyAzNyAiL3Vzci9pbmNsdWRl L2Vycm5vLmgiIDIgMwojIDU1ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwpleHRlcm4gY2hhciAq cHJvZ3JhbV9pbnZvY2F0aW9uX25hbWUsICpwcm9ncmFtX2ludm9jYXRpb25fc2hvcnRfbmFtZTsK CgoKfQojIDY5ICIvdXNyL2luY2x1ZGUvZXJybm8uaCIgMwp0eXBlZGVmIGludCBlcnJvcl90Owoj IDQ5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jZXJybm8iIDIgMwojIDM5ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAyIDMKCgojIDEgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2NtYXRoIiAxIDMKIyA0OCAiL3Vzci9sb2NhbC9pbmNs dWRlL2MrKy8zLjIvY21hdGgiIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAxIDMKIyAy OSAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwpleHRlcm4gIkMiIHsKCgoKIyAxICIvdXNyL2luY2x1 ZGUvYml0cy9odWdlX3ZhbC5oIiAxIDMKIyAzOSAiL3Vzci9pbmNsdWRlL2JpdHMvaHVnZV92YWwu aCIgMwpzdGF0aWMgdW5pb24geyB1bnNpZ25lZCBjaGFyIF9fY1s4XTsgZG91YmxlIF9fZDsgfSBf X2h1Z2VfdmFsID0geyB7IDAsIDAsIDAsIDAsIDAsIDAsIDB4ZjAsIDB4N2YgfSB9OwojIDYzICIv dXNyL2luY2x1ZGUvYml0cy9odWdlX3ZhbC5oIiAzCnN0YXRpYyB1bmlvbiB7IHVuc2lnbmVkIGNo YXIgX19jWzRdOyBmbG9hdCBfX2Y7IH0gX19odWdlX3ZhbGYgPSB7IHsgMCwgMCwgMHg4MCwgMHg3 ZiB9IH07CiMgNzUgIi91c3IvaW5jbHVkZS9iaXRzL2h1Z2VfdmFsLmgiIDMKc3RhdGljIHVuaW9u IHsgdW5zaWduZWQgY2hhciBfX2NbMTJdOyBsb25nIGRvdWJsZSBfX2xkOyB9IF9faHVnZV92YWxs ID0geyB7IDAsIDAsIDAsIDAsIDAsIDAsIDAsIDB4ODAsIDB4ZmYsIDB4N2YsIDAsIDAgfSB9Owoj IDM0ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAyIDMKCgoKIyAxICIvdXNyL2luY2x1ZGUvYml0cy9u YW4uaCIgMSAzCiMgNDUgIi91c3IvaW5jbHVkZS9iaXRzL25hbi5oIiAzCnN0YXRpYyB1bmlvbiB7 IHVuc2lnbmVkIGNoYXIgX19jWzRdOyBmbG9hdCBfX2Q7IH0gX19uYW5fdW5pb24gPSB7IHsgMCwg MCwgMHhjMCwgMHg3ZiB9IH07CiMgMzggIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwoKCiMgMSAi L3Vzci9pbmNsdWRlL2JpdHMvbWF0aGRlZi5oIiAxIDMKIyAyOSAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGRlZi5oIiAzCnR5cGVkZWYgbG9uZyBkb3VibGUgZmxvYXRfdDsKCnR5cGVkZWYgbG9uZyBk b3VibGUgZG91YmxlX3Q7CiMgNDEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDYzICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0aGNhbGxzLmgiIDEg MwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRlcm4gZG91YmxlIGFj b3MgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Fjb3MgKGRvdWJsZSBfX3gpIDsKCmV4 dGVybiBkb3VibGUgYXNpbiAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXNpbiAoZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuIChkb3VibGUgX194KSA7IGV4dGVybiBkb3Vi bGUgX19hdGFuIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGF0YW4yIChkb3VibGUgX195 LCBkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19hdGFuMiAoZG91YmxlIF9feSwgZG91Ymxl IF9feCkgOwoKCmV4dGVybiBkb3VibGUgY29zIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUg X19jb3MgKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luIChkb3VibGUgX194KSA7IGV4 dGVybiBkb3VibGUgX19zaW4gKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgdGFuIChkb3Vi bGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW4gKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIHZv aWQgc2luY29zIChkb3VibGUgX194LCBkb3VibGUgKl9fc2lueCwgZG91YmxlICpfX2Nvc3gpIDsg ZXh0ZXJuIHZvaWQgX19zaW5jb3MgKGRvdWJsZSBfX3gsIGRvdWJsZSAqX19zaW54LCBkb3VibGUg Kl9fY29zeCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNvc2ggKGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGRvdWJsZSBfX2Nvc2ggKGRvdWJsZSBfX3gpIDsKCmV4dGVybiBkb3VibGUgc2luaCAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJs ZSB0YW5oIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX190YW5oIChkb3VibGUgX194KSA7 CgoKCmV4dGVybiBkb3VibGUgYWNvc2ggKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2Fj b3NoIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIGFzaW5oIChkb3VibGUgX194KSA7IGV4 dGVybiBkb3VibGUgX19hc2luaCAoZG91YmxlIF9feCkgOwoKZXh0ZXJuIGRvdWJsZSBhdGFuaCAo ZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fYXRhbmggKGRvdWJsZSBfX3gpIDsKCgoKCgpl eHRlcm4gZG91YmxlIGV4cCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwIChkb3Vi bGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgZXhwMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRv dWJsZSBfX2V4cDEwIChkb3VibGUgX194KSA7CgpleHRlcm4gZG91YmxlIHBvdzEwIChkb3VibGUg X194KSA7IGV4dGVybiBkb3VibGUgX19wb3cxMCAoZG91YmxlIF9feCkgOwoKCgpleHRlcm4gZG91 YmxlIGZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsgZXh0ZXJuIGRvdWJsZSBf X2ZyZXhwIChkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZG91YmxlIGxk ZXhwIChkb3VibGUgX194LCBpbnQgX19leHBvbmVudCkgOyBleHRlcm4gZG91YmxlIF9fbGRleHAg KGRvdWJsZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cgKGRvdWJs ZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZyAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3Vi bGUgbG9nMTAgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2xvZzEwIChkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGRvdWJsZSBtb2RmIChkb3VibGUgX194LCBkb3VibGUgKl9faXB0cikgOyBl eHRlcm4gZG91YmxlIF9fbW9kZiAoZG91YmxlIF9feCwgZG91YmxlICpfX2lwdHIpIDsKCgoKZXh0 ZXJuIGRvdWJsZSBleHBtMSAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fZXhwbTEgKGRv dWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGxvZzFwIChkb3VibGUgX194KSA7IGV4dGVybiBk b3VibGUgX19sb2cxcCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbG9nYiAoZG91Ymxl IF9feCkgOyBleHRlcm4gZG91YmxlIF9fbG9nYiAoZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGRv dWJsZSBleHAyIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19leHAyIChkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGRvdWJsZSBsb2cyIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19s b2cyIChkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBkb3VibGUgcG93IChkb3VibGUgX194LCBk b3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19wb3cgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IDsKCgpleHRlcm4gZG91YmxlIHNxcnQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3Nx cnQgKGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGRvdWJsZSBoeXBvdCAoZG91YmxlIF9feCwgZG91 YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9faHlwb3QgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kp IDsKCgoKCmV4dGVybiBkb3VibGUgY2JydCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f Y2JydCAoZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGNlaWwgKGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGRvdWJsZSBfX2NlaWwgKGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gZG91YmxlIGZh YnMgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJsZSBfX2ZhYnMgKGRvdWJsZSBfX3gpIDsKCgpl eHRlcm4gZG91YmxlIGZsb29yIChkb3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19mbG9vciAo ZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9f eSkgOyBleHRlcm4gZG91YmxlIF9fZm1vZCAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgoK ZXh0ZXJuIGludCBfX2lzaW5mIChkb3VibGUgX192YWx1ZSkgOwoKCmV4dGVybiBpbnQgX19maW5p dGUgKGRvdWJsZSBfX3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IGlzaW5mIChkb3VibGUgX192YWx1 ZSkgOwoKCmV4dGVybiBpbnQgZmluaXRlIChkb3VibGUgX192YWx1ZSkgOwoKCmV4dGVybiBkb3Vi bGUgZHJlbSAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRlcm4gZG91YmxlIF9fZHJlbSAo ZG91YmxlIF9feCwgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNpZ25pZmljYW5kIChk b3VibGUgX194KSA7IGV4dGVybiBkb3VibGUgX19zaWduaWZpY2FuZCAoZG91YmxlIF9feCkgOwoK CgoKZXh0ZXJuIGRvdWJsZSBjb3B5c2lnbiAoZG91YmxlIF9feCwgZG91YmxlIF9feSkgOyBleHRl cm4gZG91YmxlIF9fY29weXNpZ24gKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3kpIDsKCgoKCmV4dGVy biBkb3VibGUgbmFuIChjb25zdCBjaGFyICpfX3RhZ2IpIDsgZXh0ZXJuIGRvdWJsZSBfX25hbiAo Y29uc3QgY2hhciAqX190YWdiKSA7CgoKCgpleHRlcm4gaW50IF9faXNuYW4gKGRvdWJsZSBfX3Zh bHVlKSA7CgoKCmV4dGVybiBpbnQgaXNuYW4gKGRvdWJsZSBfX3ZhbHVlKSA7CgoKZXh0ZXJuIGRv dWJsZSBqMCAoZG91YmxlKSA7IGV4dGVybiBkb3VibGUgX19qMCAoZG91YmxlKSA7CmV4dGVybiBk b3VibGUgajEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fajEgKGRvdWJsZSkgOwpleHRlcm4g ZG91YmxlIGpuIChpbnQsIGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fam4gKGludCwgZG91Ymxl KSA7CmV4dGVybiBkb3VibGUgeTAgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9feTAgKGRvdWJs ZSkgOwpleHRlcm4gZG91YmxlIHkxIChkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3kxIChkb3Vi bGUpIDsKZXh0ZXJuIGRvdWJsZSB5biAoaW50LCBkb3VibGUpIDsgZXh0ZXJuIGRvdWJsZSBfX3lu IChpbnQsIGRvdWJsZSkgOwoKCgoKCmV4dGVybiBkb3VibGUgZXJmIChkb3VibGUpIDsgZXh0ZXJu IGRvdWJsZSBfX2VyZiAoZG91YmxlKSA7CmV4dGVybiBkb3VibGUgZXJmYyAoZG91YmxlKSA7IGV4 dGVybiBkb3VibGUgX19lcmZjIChkb3VibGUpIDsKZXh0ZXJuIGRvdWJsZSBsZ2FtbWEgKGRvdWJs ZSkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hIChkb3VibGUpIDsKCgoKZXh0ZXJuIGRvdWJsZSB0 Z2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fdGdhbW1hIChkb3VibGUpIDsKCgoKCmV4 dGVybiBkb3VibGUgZ2FtbWEgKGRvdWJsZSkgOyBleHRlcm4gZG91YmxlIF9fZ2FtbWEgKGRvdWJs ZSkgOwoKCgoKCgpleHRlcm4gZG91YmxlIGxnYW1tYV9yIChkb3VibGUsIGludCAqX19zaWduZ2Ft cCkgOyBleHRlcm4gZG91YmxlIF9fbGdhbW1hX3IgKGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7 CgoKCgoKCmV4dGVybiBkb3VibGUgcmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9f cmludCAoZG91YmxlIF9feCkgOwoKCmV4dGVybiBkb3VibGUgbmV4dGFmdGVyIChkb3VibGUgX194 LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19uZXh0YWZ0ZXIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIDsKCmV4dGVybiBkb3VibGUgbmV4dHRvd2FyZCAoZG91YmxlIF9feCwgbG9uZyBk b3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19uZXh0dG93YXJkIChkb3VibGUgX194LCBsb25n IGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGRvdWJsZSByZW1haW5kZXIgKGRvdWJsZSBfX3gsIGRv dWJsZSBfX3kpIDsgZXh0ZXJuIGRvdWJsZSBfX3JlbWFpbmRlciAoZG91YmxlIF9feCwgZG91Ymxl IF9feSkgOwoKCgpleHRlcm4gZG91YmxlIHNjYWxiIChkb3VibGUgX194LCBkb3VibGUgX19uKSA7 IGV4dGVybiBkb3VibGUgX19zY2FsYiAoZG91YmxlIF9feCwgZG91YmxlIF9fbikgOwoKCgoKZXh0 ZXJuIGRvdWJsZSBzY2FsYm4gKGRvdWJsZSBfX3gsIGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBf X3NjYWxibiAoZG91YmxlIF9feCwgaW50IF9fbikgOwoKCgpleHRlcm4gaW50IGlsb2diIChkb3Vi bGUgX194KSA7IGV4dGVybiBpbnQgX19pbG9nYiAoZG91YmxlIF9feCkgOwoKCgoKZXh0ZXJuIGRv dWJsZSBzY2FsYmxuIChkb3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJuIGRvdWJsZSBf X3NjYWxibG4gKGRvdWJsZSBfX3gsIGxvbmcgaW50IF9fbikgOwoKCgpleHRlcm4gZG91YmxlIG5l YXJieWludCAoZG91YmxlIF9feCkgOyBleHRlcm4gZG91YmxlIF9fbmVhcmJ5aW50IChkb3VibGUg X194KSA7CgoKCmV4dGVybiBkb3VibGUgcm91bmQgKGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGRvdWJs ZSBfX3JvdW5kIChkb3VibGUgX194KSA7CgoKCmV4dGVybiBkb3VibGUgdHJ1bmMgKGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGRvdWJsZSBfX3RydW5jIChkb3VibGUgX194KSA7CgoKCgpleHRlcm4gZG91 YmxlIHJlbXF1byAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOyBleHRlcm4g ZG91YmxlIF9fcmVtcXVvIChkb3VibGUgX194LCBkb3VibGUgX195LCBpbnQgKl9fcXVvKSA7CgoK CgoKCmV4dGVybiBsb25nIGludCBscmludCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQg X19scmludCAoZG91YmxlIF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJpbnQgKGRvdWJs ZSBfX3gpIDsgZXh0ZXJuIGxvbmcgbG9uZyBpbnQgX19sbHJpbnQgKGRvdWJsZSBfX3gpIDsKCgoK ZXh0ZXJuIGxvbmcgaW50IGxyb3VuZCAoZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBpbnQgX19s cm91bmQgKGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyb3VuZCAoZG91Ymxl IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscm91bmQgKGRvdWJsZSBfX3gpIDsKCgoK ZXh0ZXJuIGRvdWJsZSBmZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3Vi bGUgX19mZGltIChkb3VibGUgX194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWF4 IChkb3VibGUgX194LCBkb3VibGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWF4IChkb3VibGUg X194LCBkb3VibGUgX195KSA7CgoKZXh0ZXJuIGRvdWJsZSBmbWluIChkb3VibGUgX194LCBkb3Vi bGUgX195KSA7IGV4dGVybiBkb3VibGUgX19mbWluIChkb3VibGUgX194LCBkb3VibGUgX195KSA7 CgoKCmV4dGVybiBpbnQgX19mcGNsYXNzaWZ5IChkb3VibGUgX192YWx1ZSkKICAgICA7CgoKZXh0 ZXJuIGludCBfX3NpZ25iaXQgKGRvdWJsZSBfX3ZhbHVlKQogICAgIDsKCgoKZXh0ZXJuIGRvdWJs ZSBmbWEgKGRvdWJsZSBfX3gsIGRvdWJsZSBfX3ksIGRvdWJsZSBfX3opIDsgZXh0ZXJuIGRvdWJs ZSBfX2ZtYSAoZG91YmxlIF9feCwgZG91YmxlIF9feSwgZG91YmxlIF9feikgOwojIDY0ICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAyIDMKIyA4MiAiL3Vzci9pbmNsdWRlL21hdGguaCIgMwojIDEgIi91 c3IvaW5jbHVkZS9iaXRzL21hdGhjYWxscy5oIiAxIDMKIyA1NCAiL3Vzci9pbmNsdWRlL2JpdHMv bWF0aGNhbGxzLmgiIDMKZXh0ZXJuIGZsb2F0IGFjb3NmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZs b2F0IF9fYWNvc2YgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGFzaW5mIChmbG9hdCBfX3gp IDsgZXh0ZXJuIGZsb2F0IF9fYXNpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IGF0YW5m IChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRhbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IGF0YW4yZiAoZmxvYXQgX195LCBmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fYXRh bjJmIChmbG9hdCBfX3ksIGZsb2F0IF9feCkgOwoKCmV4dGVybiBmbG9hdCBjb3NmIChmbG9hdCBf X3gpIDsgZXh0ZXJuIGZsb2F0IF9fY29zZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgc2lu ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmYgKGZsb2F0IF9feCkgOwoKZXh0ZXJu IGZsb2F0IHRhbmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX190YW5mIChmbG9hdCBfX3gp IDsKCgoKZXh0ZXJuIHZvaWQgc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19zaW54LCBmbG9h dCAqX19jb3N4KSA7IGV4dGVybiB2b2lkIF9fc2luY29zZiAoZmxvYXQgX194LCBmbG9hdCAqX19z aW54LCBmbG9hdCAqX19jb3N4KSA7CgoKCgoKCmV4dGVybiBmbG9hdCBjb3NoZiAoZmxvYXQgX194 KSA7IGV4dGVybiBmbG9hdCBfX2Nvc2hmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBzaW5o ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3NpbmhmIChmbG9hdCBfX3gpIDsKCmV4dGVy biBmbG9hdCB0YW5oZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RhbmhmIChmbG9hdCBf X3gpIDsKCgoKZXh0ZXJuIGZsb2F0IGFjb3NoZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBf X2Fjb3NoZiAoZmxvYXQgX194KSA7CgpleHRlcm4gZmxvYXQgYXNpbmhmIChmbG9hdCBfX3gpIDsg ZXh0ZXJuIGZsb2F0IF9fYXNpbmhmIChmbG9hdCBfX3gpIDsKCmV4dGVybiBmbG9hdCBhdGFuaGYg KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19hdGFuaGYgKGZsb2F0IF9feCkgOwoKCgoKCmV4 dGVybiBmbG9hdCBleHBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwZiAoZmxvYXQg X194KSA7CgoKCmV4dGVybiBmbG9hdCBleHAxMGYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQg X19leHAxMGYgKGZsb2F0IF9feCkgOwoKZXh0ZXJuIGZsb2F0IHBvdzEwZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX3BvdzEwZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBmcmV4 cGYgKGZsb2F0IF9feCwgaW50ICpfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2ZyZXhwZiAo ZmxvYXQgX194LCBpbnQgKl9fZXhwb25lbnQpIDsKCgpleHRlcm4gZmxvYXQgbGRleHBmIChmbG9h dCBfX3gsIGludCBfX2V4cG9uZW50KSA7IGV4dGVybiBmbG9hdCBfX2xkZXhwZiAoZmxvYXQgX194 LCBpbnQgX19leHBvbmVudCkgOwoKCmV4dGVybiBmbG9hdCBsb2dmIChmbG9hdCBfX3gpIDsgZXh0 ZXJuIGZsb2F0IF9fbG9nZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzEwZiAoZmxv YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2xvZzEwZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZs b2F0IG1vZGZmIChmbG9hdCBfX3gsIGZsb2F0ICpfX2lwdHIpIDsgZXh0ZXJuIGZsb2F0IF9fbW9k ZmYgKGZsb2F0IF9feCwgZmxvYXQgKl9faXB0cikgOwoKCgpleHRlcm4gZmxvYXQgZXhwbTFmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fZXhwbTFmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4g ZmxvYXQgbG9nMXBmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMXBmIChmbG9hdCBf X3gpIDsKCgpleHRlcm4gZmxvYXQgbG9nYmYgKGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19s b2diZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4gZmxvYXQgZXhwMmYgKGZsb2F0IF9feCkgOyBl eHRlcm4gZmxvYXQgX19leHAyZiAoZmxvYXQgX194KSA7CgoKZXh0ZXJuIGZsb2F0IGxvZzJmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fbG9nMmYgKGZsb2F0IF9feCkgOwoKCgoKCgpleHRl cm4gZmxvYXQgcG93ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fcG93 ZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgpleHRlcm4gZmxvYXQgc3FydGYgKGZsb2F0IF9f eCkgOyBleHRlcm4gZmxvYXQgX19zcXJ0ZiAoZmxvYXQgX194KSA7CgoKCmV4dGVybiBmbG9hdCBo eXBvdGYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2h5cG90ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsKCgoKCmV4dGVybiBmbG9hdCBjYnJ0ZiAoZmxvYXQgX194KSA7 IGV4dGVybiBmbG9hdCBfX2NicnRmIChmbG9hdCBfX3gpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGNl aWxmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fY2VpbGYgKGZsb2F0IF9feCkgOwoKCmV4 dGVybiBmbG9hdCBmYWJzZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX2ZhYnNmIChmbG9h dCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZmxvb3JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0 IF9fZmxvb3JmIChmbG9hdCBfX3gpIDsKCgpleHRlcm4gZmxvYXQgZm1vZGYgKGZsb2F0IF9feCwg ZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX2Ztb2RmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkg OwoKCgoKZXh0ZXJuIGludCBfX2lzaW5mZiAoZmxvYXQgX192YWx1ZSkgOwoKCmV4dGVybiBpbnQg X19maW5pdGVmIChmbG9hdCBfX3ZhbHVlKSA7CgoKCgpleHRlcm4gaW50IGlzaW5mZiAoZmxvYXQg X192YWx1ZSkgOwoKCmV4dGVybiBpbnQgZmluaXRlZiAoZmxvYXQgX192YWx1ZSkgOwoKCmV4dGVy biBmbG9hdCBkcmVtZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZHJl bWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzaWduaWZpY2FuZGYg KGZsb2F0IF9feCkgOyBleHRlcm4gZmxvYXQgX19zaWduaWZpY2FuZGYgKGZsb2F0IF9feCkgOwoK CgoKZXh0ZXJuIGZsb2F0IGNvcHlzaWduZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJu IGZsb2F0IF9fY29weXNpZ25mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCgoKZXh0ZXJuIGZs b2F0IG5hbmYgKGNvbnN0IGNoYXIgKl9fdGFnYikgOyBleHRlcm4gZmxvYXQgX19uYW5mIChjb25z dCBjaGFyICpfX3RhZ2IpIDsKCgoKCmV4dGVybiBpbnQgX19pc25hbmYgKGZsb2F0IF9fdmFsdWUp IDsKCgoKZXh0ZXJuIGludCBpc25hbmYgKGZsb2F0IF9fdmFsdWUpIDsKCgpleHRlcm4gZmxvYXQg ajBmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qMGYgKGZsb2F0KSA7CmV4dGVybiBmbG9hdCBq MWYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2oxZiAoZmxvYXQpIDsKZXh0ZXJuIGZsb2F0IGpu ZiAoaW50LCBmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19qbmYgKGludCwgZmxvYXQpIDsKZXh0ZXJu IGZsb2F0IHkwZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feTBmIChmbG9hdCkgOwpleHRlcm4g ZmxvYXQgeTFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX195MWYgKGZsb2F0KSA7CmV4dGVybiBm bG9hdCB5bmYgKGludCwgZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9feW5mIChpbnQsIGZsb2F0KSA7 CgoKCgoKZXh0ZXJuIGZsb2F0IGVyZmYgKGZsb2F0KSA7IGV4dGVybiBmbG9hdCBfX2VyZmYgKGZs b2F0KSA7CmV4dGVybiBmbG9hdCBlcmZjZiAoZmxvYXQpIDsgZXh0ZXJuIGZsb2F0IF9fZXJmY2Yg KGZsb2F0KSA7CmV4dGVybiBmbG9hdCBsZ2FtbWFmIChmbG9hdCkgOyBleHRlcm4gZmxvYXQgX19s Z2FtbWFmIChmbG9hdCkgOwoKCgpleHRlcm4gZmxvYXQgdGdhbW1hZiAoZmxvYXQpIDsgZXh0ZXJu IGZsb2F0IF9fdGdhbW1hZiAoZmxvYXQpIDsKCgoKCmV4dGVybiBmbG9hdCBnYW1tYWYgKGZsb2F0 KSA7IGV4dGVybiBmbG9hdCBfX2dhbW1hZiAoZmxvYXQpIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IGxn YW1tYWZfciAoZmxvYXQsIGludCAqX19zaWduZ2FtcCkgOyBleHRlcm4gZmxvYXQgX19sZ2FtbWFm X3IgKGZsb2F0LCBpbnQgKl9fc2lnbmdhbXApIDsKCgoKCgoKZXh0ZXJuIGZsb2F0IHJpbnRmIChm bG9hdCBfX3gpIDsgZXh0ZXJuIGZsb2F0IF9fcmludGYgKGZsb2F0IF9feCkgOwoKCmV4dGVybiBm bG9hdCBuZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBleHRlcm4gZmxvYXQgX19u ZXh0YWZ0ZXJmIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKZXh0ZXJuIGZsb2F0IG5leHR0b3dh cmRmIChmbG9hdCBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gZmxvYXQgX19uZXh0dG93 YXJkZiAoZmxvYXQgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGZsb2F0IHJlbWFp bmRlcmYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBfX3JlbWFpbmRlcmYg KGZsb2F0IF9feCwgZmxvYXQgX195KSA7CgoKCmV4dGVybiBmbG9hdCBzY2FsYmYgKGZsb2F0IF9f eCwgZmxvYXQgX19uKSA7IGV4dGVybiBmbG9hdCBfX3NjYWxiZiAoZmxvYXQgX194LCBmbG9hdCBf X24pIDsKCgoKCmV4dGVybiBmbG9hdCBzY2FsYm5mIChmbG9hdCBfX3gsIGludCBfX24pIDsgZXh0 ZXJuIGZsb2F0IF9fc2NhbGJuZiAoZmxvYXQgX194LCBpbnQgX19uKSA7CgoKCmV4dGVybiBpbnQg aWxvZ2JmIChmbG9hdCBfX3gpIDsgZXh0ZXJuIGludCBfX2lsb2diZiAoZmxvYXQgX194KSA7CgoK CgpleHRlcm4gZmxvYXQgc2NhbGJsbmYgKGZsb2F0IF9feCwgbG9uZyBpbnQgX19uKSA7IGV4dGVy biBmbG9hdCBfX3NjYWxibG5mIChmbG9hdCBfX3gsIGxvbmcgaW50IF9fbikgOwoKCgpleHRlcm4g ZmxvYXQgbmVhcmJ5aW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBmbG9hdCBfX25lYXJieWludGYg KGZsb2F0IF9feCkgOwoKCgpleHRlcm4gZmxvYXQgcm91bmRmIChmbG9hdCBfX3gpIDsgZXh0ZXJu IGZsb2F0IF9fcm91bmRmIChmbG9hdCBfX3gpIDsKCgoKZXh0ZXJuIGZsb2F0IHRydW5jZiAoZmxv YXQgX194KSA7IGV4dGVybiBmbG9hdCBfX3RydW5jZiAoZmxvYXQgX194KSA7CgoKCgpleHRlcm4g ZmxvYXQgcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsgZXh0ZXJu IGZsb2F0IF9fcmVtcXVvZiAoZmxvYXQgX194LCBmbG9hdCBfX3ksIGludCAqX19xdW8pIDsKCgoK CgoKZXh0ZXJuIGxvbmcgaW50IGxyaW50ZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBf X2xyaW50ZiAoZmxvYXQgX194KSA7CmV4dGVybiBsb25nIGxvbmcgaW50IGxscmludGYgKGZsb2F0 IF9feCkgOyBleHRlcm4gbG9uZyBsb25nIGludCBfX2xscmludGYgKGZsb2F0IF9feCkgOwoKCgpl eHRlcm4gbG9uZyBpbnQgbHJvdW5kZiAoZmxvYXQgX194KSA7IGV4dGVybiBsb25nIGludCBfX2xy b3VuZGYgKGZsb2F0IF9feCkgOwpleHRlcm4gbG9uZyBsb25nIGludCBsbHJvdW5kZiAoZmxvYXQg X194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyb3VuZGYgKGZsb2F0IF9feCkgOwoKCgpl eHRlcm4gZmxvYXQgZmRpbWYgKGZsb2F0IF9feCwgZmxvYXQgX195KSA7IGV4dGVybiBmbG9hdCBf X2ZkaW1mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOwoKCmV4dGVybiBmbG9hdCBmbWF4ZiAoZmxv YXQgX194LCBmbG9hdCBfX3kpIDsgZXh0ZXJuIGZsb2F0IF9fZm1heGYgKGZsb2F0IF9feCwgZmxv YXQgX195KSA7CgoKZXh0ZXJuIGZsb2F0IGZtaW5mIChmbG9hdCBfX3gsIGZsb2F0IF9feSkgOyBl eHRlcm4gZmxvYXQgX19mbWluZiAoZmxvYXQgX194LCBmbG9hdCBfX3kpIDsKCgoKZXh0ZXJuIGlu dCBfX2ZwY2xhc3NpZnlmIChmbG9hdCBfX3ZhbHVlKQogICAgIDsKCgpleHRlcm4gaW50IF9fc2ln bmJpdGYgKGZsb2F0IF9fdmFsdWUpCiAgICAgOwoKCgpleHRlcm4gZmxvYXQgZm1hZiAoZmxvYXQg X194LCBmbG9hdCBfX3ksIGZsb2F0IF9feikgOyBleHRlcm4gZmxvYXQgX19mbWFmIChmbG9hdCBf X3gsIGZsb2F0IF9feSwgZmxvYXQgX196KSA7CiMgODMgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIg MwojIDk5ICIvdXNyL2luY2x1ZGUvbWF0aC5oIiAzCiMgMSAiL3Vzci9pbmNsdWRlL2JpdHMvbWF0 aGNhbGxzLmgiIDEgMwojIDU0ICIvdXNyL2luY2x1ZGUvYml0cy9tYXRoY2FsbHMuaCIgMwpleHRl cm4gbG9uZyBkb3VibGUgYWNvc2wgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19hY29zbCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXNpbmwg KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2lubCAobG9uZyBkb3Vi bGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgYXRhbmwgKGxvbmcgZG91YmxlIF9feCkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19hdGFubCAobG9uZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9u ZyBkb3VibGUgYXRhbjJsIChsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgOyBleHRl cm4gbG9uZyBkb3VibGUgX19hdGFuMmwgKGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX194 KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGNvc2wgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g bG9uZyBkb3VibGUgX19jb3NsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJs ZSBzaW5sIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2lubCAobG9u ZyBkb3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgdGFubCAobG9uZyBkb3VibGUgX194 KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3RhbmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRl cm4gdm9pZCBzaW5jb3NsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxv bmcgZG91YmxlICpfX2Nvc3gpIDsgZXh0ZXJuIHZvaWQgX19zaW5jb3NsIChsb25nIGRvdWJsZSBf X3gsIGxvbmcgZG91YmxlICpfX3NpbngsIGxvbmcgZG91YmxlICpfX2Nvc3gpIDsKCgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fY29zaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpbmhs IChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fc2luaGwgKGxvbmcgZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIHRhbmhsIChsb25nIGRvdWJsZSBfX3gpIDsg ZXh0ZXJuIGxvbmcgZG91YmxlIF9fdGFuaGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4g bG9uZyBkb3VibGUgYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fYWNvc2hsIChsb25nIGRvdWJsZSBfX3gpIDsKCmV4dGVybiBsb25nIGRvdWJsZSBhc2luaGwg KGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19hc2luaGwgKGxvbmcgZG91 YmxlIF9feCkgOwoKZXh0ZXJuIGxvbmcgZG91YmxlIGF0YW5obCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2F0YW5obCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGV4cGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3Vi bGUgX19leHBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGV4cDEw bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDEwbCAobG9uZyBk b3VibGUgX194KSA7CgpleHRlcm4gbG9uZyBkb3VibGUgcG93MTBsIChsb25nIGRvdWJsZSBfX3gp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcG93MTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGZyZXhwbCAobG9uZyBkb3VibGUgX194LCBpbnQgKl9fZXhwb25lbnQp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZnJleHBsIChsb25nIGRvdWJsZSBfX3gsIGludCAqX19l eHBvbmVudCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsZGV4cGwgKGxvbmcgZG91YmxlIF9feCwg aW50IF9fZXhwb25lbnQpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fbGRleHBsIChsb25nIGRvdWJs ZSBfX3gsIGludCBfX2V4cG9uZW50KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGxvZ2wgKGxvbmcg ZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19sb2dsIChsb25nIGRvdWJsZSBfX3gp IDsKCgpleHRlcm4gbG9uZyBkb3VibGUgbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJu IGxvbmcgZG91YmxlIF9fbG9nMTBsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4gbG9uZyBk b3VibGUgbW9kZmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgKl9faXB0cikgOyBleHRl cm4gbG9uZyBkb3VibGUgX19tb2RmbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSAqX19p cHRyKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19leHBtMWwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBs b25nIGRvdWJsZSBsb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19sb2cxcGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBsb2dibCAo bG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xvZ2JsIChsb25nIGRvdWJs ZSBfX3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBleHAybCAobG9uZyBkb3VibGUgX194KSA7 IGV4dGVybiBsb25nIGRvdWJsZSBfX2V4cDJsIChsb25nIGRvdWJsZSBfX3gpIDsKCgpleHRlcm4g bG9uZyBkb3VibGUgbG9nMmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19sb2cybCAobG9uZyBkb3VibGUgX194KSA7CgoKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBwb3ds IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19wb3dsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCmV4dGVybiBsb25n IGRvdWJsZSBzcXJ0bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3Nx cnRsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIGh5cG90bCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9faHlw b3RsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgoKZXh0ZXJuIGxvbmcg ZG91YmxlIGNicnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fY2Jy dGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY2VpbGwgKGxv bmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jZWlsbCAobG9uZyBkb3VibGUg X194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIGZhYnNsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fZmFic2wgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25n IGRvdWJsZSBmbG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19m bG9vcmwgKGxvbmcgZG91YmxlIF9feCkgOwoKCmV4dGVybiBsb25nIGRvdWJsZSBmbW9kbCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZm1v ZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gaW50IF9f aXNpbmZsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSA7CgoKZXh0ZXJuIGludCBfX2Zpbml0ZWwgKGxv bmcgZG91YmxlIF9fdmFsdWUpIDsKCgoKCmV4dGVybiBpbnQgaXNpbmZsIChsb25nIGRvdWJsZSBf X3ZhbHVlKSA7CgoKZXh0ZXJuIGludCBmaW5pdGVsIChsb25nIGRvdWJsZSBfX3ZhbHVlKSA7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGRyZW1sIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19kcmVtbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNpZ25pZmljYW5kbCAobG9uZyBkb3Vi bGUgX194KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3NpZ25pZmljYW5kbCAobG9uZyBkb3VibGUg X194KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgY29weXNpZ25sIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19jb3B5c2lnbmwgKGxvbmcg ZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbmFu bCAoY29uc3QgY2hhciAqX190YWdiKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX25hbmwgKGNvbnN0 IGNoYXIgKl9fdGFnYikgOwoKCgoKZXh0ZXJuIGludCBfX2lzbmFubCAobG9uZyBkb3VibGUgX192 YWx1ZSkgOwoKCgpleHRlcm4gaW50IGlzbmFubCAobG9uZyBkb3VibGUgX192YWx1ZSkgOwoKCmV4 dGVybiBsb25nIGRvdWJsZSBqMGwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2owbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGoxbCAobG9uZyBkb3VibGUp IDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fajFsIChsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBk b3VibGUgam5sIChpbnQsIGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2pubCAo aW50LCBsb25nIGRvdWJsZSkgOwpleHRlcm4gbG9uZyBkb3VibGUgeTBsIChsb25nIGRvdWJsZSkg OyBleHRlcm4gbG9uZyBkb3VibGUgX195MGwgKGxvbmcgZG91YmxlKSA7CmV4dGVybiBsb25nIGRv dWJsZSB5MWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX3kxbCAobG9uZyBk b3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIHlubCAoaW50LCBsb25nIGRvdWJsZSkgOyBleHRl cm4gbG9uZyBkb3VibGUgX195bmwgKGludCwgbG9uZyBkb3VibGUpIDsKCgoKCgpleHRlcm4gbG9u ZyBkb3VibGUgZXJmbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fZXJmbCAo bG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91YmxlIGVyZmNsIChsb25nIGRvdWJsZSkgOyBl eHRlcm4gbG9uZyBkb3VibGUgX19lcmZjbCAobG9uZyBkb3VibGUpIDsKZXh0ZXJuIGxvbmcgZG91 YmxlIGxnYW1tYWwgKGxvbmcgZG91YmxlKSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2xnYW1tYWwg KGxvbmcgZG91YmxlKSA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSB0Z2FtbWFsIChsb25nIGRvdWJs ZSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX190Z2FtbWFsIChsb25nIGRvdWJsZSkgOwoKCgoKZXh0 ZXJuIGxvbmcgZG91YmxlIGdhbW1hbCAobG9uZyBkb3VibGUpIDsgZXh0ZXJuIGxvbmcgZG91Ymxl IF9fZ2FtbWFsIChsb25nIGRvdWJsZSkgOwoKCgoKCgpleHRlcm4gbG9uZyBkb3VibGUgbGdhbW1h bF9yIChsb25nIGRvdWJsZSwgaW50ICpfX3NpZ25nYW1wKSA7IGV4dGVybiBsb25nIGRvdWJsZSBf X2xnYW1tYWxfciAobG9uZyBkb3VibGUsIGludCAqX19zaWduZ2FtcCkgOwoKCgoKCgpleHRlcm4g bG9uZyBkb3VibGUgcmludGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUg X19yaW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKZXh0ZXJuIGxvbmcgZG91YmxlIG5leHRhZnRl cmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJs ZSBfX25leHRhZnRlcmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgpleHRl cm4gbG9uZyBkb3VibGUgbmV4dHRvd2FyZGwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUg X195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX25leHR0b3dhcmRsIChsb25nIGRvdWJsZSBfX3gs IGxvbmcgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgcmVtYWluZGVybCAobG9u ZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fcmVt YWluZGVybCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsKCgoKZXh0ZXJuIGxv bmcgZG91YmxlIHNjYWxibCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX24pIDsgZXh0 ZXJuIGxvbmcgZG91YmxlIF9fc2NhbGJsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f bikgOwoKCgoKZXh0ZXJuIGxvbmcgZG91YmxlIHNjYWxibmwgKGxvbmcgZG91YmxlIF9feCwgaW50 IF9fbikgOyBleHRlcm4gbG9uZyBkb3VibGUgX19zY2FsYm5sIChsb25nIGRvdWJsZSBfX3gsIGlu dCBfX24pIDsKCgoKZXh0ZXJuIGludCBpbG9nYmwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4g aW50IF9faWxvZ2JsIChsb25nIGRvdWJsZSBfX3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSBz Y2FsYmxubCAobG9uZyBkb3VibGUgX194LCBsb25nIGludCBfX24pIDsgZXh0ZXJuIGxvbmcgZG91 YmxlIF9fc2NhbGJsbmwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBpbnQgX19uKSA7CgoKCmV4dGVy biBsb25nIGRvdWJsZSBuZWFyYnlpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg ZG91YmxlIF9fbmVhcmJ5aW50bCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRv dWJsZSByb3VuZGwgKGxvbmcgZG91YmxlIF9feCkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yb3Vu ZGwgKGxvbmcgZG91YmxlIF9feCkgOwoKCgpleHRlcm4gbG9uZyBkb3VibGUgdHJ1bmNsIChsb25n IGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgZG91YmxlIF9fdHJ1bmNsIChsb25nIGRvdWJsZSBf X3gpIDsKCgoKCmV4dGVybiBsb25nIGRvdWJsZSByZW1xdW9sIChsb25nIGRvdWJsZSBfX3gsIGxv bmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOyBleHRlcm4gbG9uZyBkb3VibGUgX19yZW1xdW9s IChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgaW50ICpfX3F1bykgOwoKCgoKCgpl eHRlcm4gbG9uZyBpbnQgbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcgaW50 IF9fbHJpbnRsIChsb25nIGRvdWJsZSBfX3gpIDsKZXh0ZXJuIGxvbmcgbG9uZyBpbnQgbGxyaW50 bCAobG9uZyBkb3VibGUgX194KSA7IGV4dGVybiBsb25nIGxvbmcgaW50IF9fbGxyaW50bCAobG9u ZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGludCBscm91bmRsIChsb25nIGRvdWJsZSBf X3gpIDsgZXh0ZXJuIGxvbmcgaW50IF9fbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CmV4dGVy biBsb25nIGxvbmcgaW50IGxscm91bmRsIChsb25nIGRvdWJsZSBfX3gpIDsgZXh0ZXJuIGxvbmcg bG9uZyBpbnQgX19sbHJvdW5kbCAobG9uZyBkb3VibGUgX194KSA7CgoKCmV4dGVybiBsb25nIGRv dWJsZSBmZGltbCAobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSBfX3kpIDsgZXh0ZXJuIGxv bmcgZG91YmxlIF9fZmRpbWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195KSA7CgoK ZXh0ZXJuIGxvbmcgZG91YmxlIGZtYXhsIChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9f eSkgOyBleHRlcm4gbG9uZyBkb3VibGUgX19mbWF4bCAobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIDsKCgpleHRlcm4gbG9uZyBkb3VibGUgZm1pbmwgKGxvbmcgZG91YmxlIF9feCwg bG9uZyBkb3VibGUgX195KSA7IGV4dGVybiBsb25nIGRvdWJsZSBfX2ZtaW5sIChsb25nIGRvdWJs ZSBfX3gsIGxvbmcgZG91YmxlIF9feSkgOwoKCgpleHRlcm4gaW50IF9fZnBjbGFzc2lmeWwgKGxv bmcgZG91YmxlIF9fdmFsdWUpCiAgICAgOwoKCmV4dGVybiBpbnQgX19zaWduYml0bCAobG9uZyBk b3VibGUgX192YWx1ZSkKICAgICA7CgoKCmV4dGVybiBsb25nIGRvdWJsZSBmbWFsIChsb25nIGRv dWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSwgbG9uZyBkb3VibGUgX196KSA7IGV4dGVybiBsb25n IGRvdWJsZSBfX2ZtYWwgKGxvbmcgZG91YmxlIF9feCwgbG9uZyBkb3VibGUgX195LCBsb25nIGRv dWJsZSBfX3opIDsKIyAxMDAgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDIgMwojIDExMyAiL3Vzci9p bmNsdWRlL21hdGguaCIgMwpleHRlcm4gaW50IHNpZ25nYW07CiMgMTU0ICIvdXNyL2luY2x1ZGUv bWF0aC5oIiAzCmVudW0KICB7CiAgICBGUF9OQU4sCgogICAgRlBfSU5GSU5JVEUsCgogICAgRlBf WkVSTywKCiAgICBGUF9TVUJOT1JNQUwsCgogICAgRlBfTk9STUFMCgogIH07CiMgMjQwICIvdXNy L2luY2x1ZGUvbWF0aC5oIiAzCnR5cGVkZWYgZW51bQp7CiAgX0lFRUVfID0gLTEsCiAgX1NWSURf LAogIF9YT1BFTl8sCiAgX1BPU0lYXywKICBfSVNPQ18KfSBfTElCX1ZFUlNJT05fVFlQRTsKCgoK CmV4dGVybiBfTElCX1ZFUlNJT05fVFlQRSBfTElCX1ZFUlNJT047CiMgMjYzICIvdXNyL2luY2x1 ZGUvbWF0aC5oIiAzCnN0cnVjdCBfX2V4Y2VwdGlvbgoKCgogIHsKICAgIGludCB0eXBlOwogICAg Y2hhciAqbmFtZTsKICAgIGRvdWJsZSBhcmcxOwogICAgZG91YmxlIGFyZzI7CiAgICBkb3VibGUg cmV0dmFsOwogIH07CgoKZXh0ZXJuIGludCBtYXRoZXJyIChzdHJ1Y3QgX19leGNlcHRpb24gKl9f ZXhjKSB0aHJvdyAoKTsKIyA0MTEgIi91c3IvaW5jbHVkZS9tYXRoLmgiIDMKfQojIDUyICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNzkgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2NtYXRoIiAzCm5hbWVzcGFjZSBzdGQKewoKCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPiBfVHAgX19jbWF0aF9wb3dlcihfVHAsIHVuc2lnbmVkIGludCk7CgogIGlubGluZSBkb3Vi bGUKICBhYnMoZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fZmFicyhfX3gpOyB9Cgog IGlubGluZSBmbG9hdAogIGFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNm KF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWJzKGxvbmcgZG91YmxlIF9feCkKICB7 IHJldHVybiBfX2J1aWx0aW5fZmFic2woX194KTsgfQoKCiAgaW5saW5lIGZsb2F0CiAgYWNvcyhm bG9hdCBfX3gpIHsgcmV0dXJuIDo6YWNvc2YoX194KTsgfQoKCgoKCiAgdXNpbmcgOjphY29zOwoK CiAgaW5saW5lIGxvbmcgZG91YmxlCiAgYWNvcyhsb25nIGRvdWJsZSBfX3gpIHsgcmV0dXJuIDo6 YWNvc2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjphc2luOwoKCiAgaW5saW5lIGZsb2F0CiAgYXNp bihmbG9hdCBfX3gpIHsgcmV0dXJuIDo6YXNpbmYoX194KTsgfQoKCgoKCgogIGlubGluZSBsb25n IGRvdWJsZQogIGFzaW4obG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmFzaW5sKF9feCk7IH0K CgoKCgogIHVzaW5nIDo6YXRhbjsKCgogIGlubGluZSBmbG9hdAogIGF0YW4oZmxvYXQgX194KSB7 IHJldHVybiA6OmF0YW5mKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBhdGFu KGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFubChfX3gpOyB9CgoKCgoKICB1c2luZyA6 OmF0YW4yOwoKCiAgaW5saW5lIGZsb2F0CiAgYXRhbjIoZmxvYXQgX195LCBmbG9hdCBfX3gpIHsg cmV0dXJuIDo6YXRhbjJmKF9feSwgX194KTsgfQoKCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUK ICBhdGFuMihsb25nIGRvdWJsZSBfX3ksIGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjphdGFu MmwoX195LCBfX3gpOyB9CgoKCgoKCiAgdXNpbmcgOjpjZWlsOwoKCiAgaW5saW5lIGZsb2F0CiAg Y2VpbChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6Y2VpbGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGNlaWwobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OmNlaWxsKF9feCk7 IH0KCgoKCgogIHVzaW5nIDo6Y29zOwoKICBpbmxpbmUgZmxvYXQKICBjb3MoZmxvYXQgX194KQog IHsgcmV0dXJuIF9fYnVpbHRpbl9jb3NmKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg Y29zKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fY29zbChfX3gpOyB9Cgog IHVzaW5nIDo6Y29zaDsKCgogIGlubGluZSBmbG9hdAogIGNvc2goZmxvYXQgX194KSB7IHJldHVy biA6OmNvc2hmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBjb3NoKGxvbmcg ZG91YmxlIF9feCkgeyByZXR1cm4gOjpjb3NobChfX3gpOyB9CgoKCgoKICB1c2luZyA6OmV4cDsK CgogIGlubGluZSBmbG9hdAogIGV4cChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6ZXhwZihfX3gpOyB9 CgoKCgoKCiAgaW5saW5lIGxvbmcgZG91YmxlCiAgZXhwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1 cm4gOjpleHBsKF9feCk7IH0KCgoKCgogIHVzaW5nIDo6ZmFiczsKCiAgaW5saW5lIGZsb2F0CiAg ZmFicyhmbG9hdCBfX3gpCiAgeyByZXR1cm4gX19idWlsdGluX2ZhYnNmKF9feCk7IH0KCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgZmFicyhsb25nIGRvdWJsZSBfX3gpCiAgeyByZXR1cm4gX19idWls dGluX2ZhYnNsKF9feCk7IH0KCiAgdXNpbmcgOjpmbG9vcjsKCgogIGlubGluZSBmbG9hdAogIGZs b29yKGZsb2F0IF9feCkgeyByZXR1cm4gOjpmbG9vcmYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGZsb29yKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpmbG9vcmwoX194 KTsgfQoKCgoKCiAgdXNpbmcgOjpmbW9kOwoKCiAgaW5saW5lIGZsb2F0CiAgZm1vZChmbG9hdCBf X3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpmbW9kZihfX3gsIF9feSk7IH0KCgoKCgoKCiAgaW5s aW5lIGxvbmcgZG91YmxlCiAgZm1vZChsb25nIGRvdWJsZSBfX3gsIGxvbmcgZG91YmxlIF9feSkg eyByZXR1cm4gOjpmbW9kbChfX3gsIF9feSk7IH0KCgoKCgoKICB1c2luZyA6OmZyZXhwOwoKCiAg aW5saW5lIGZsb2F0CiAgZnJleHAoZmxvYXQgX194LCBpbnQqIF9fZXhwKSB7IHJldHVybiA6OmZy ZXhwZihfX3gsIF9fZXhwKTsgfQoKCgoKCgogIGlubGluZSBsb25nIGRvdWJsZQogIGZyZXhwKGxv bmcgZG91YmxlIF9feCwgaW50KiBfX2V4cCkgeyByZXR1cm4gOjpmcmV4cGwoX194LCBfX2V4cCk7 IH0KCgoKCgoKICB1c2luZyA6OmxkZXhwOwoKCiAgaW5saW5lIGZsb2F0CiAgbGRleHAoZmxvYXQg X194LCBpbnQgX19leHApIHsgcmV0dXJuIDo6bGRleHBmKF9feCwgX19leHApOyB9CgoKCgoKCgog IGlubGluZSBsb25nIGRvdWJsZQogIGxkZXhwKGxvbmcgZG91YmxlIF9feCwgaW50IF9fZXhwKSB7 IHJldHVybiA6OmxkZXhwbChfX3gsIF9fZXhwKTsgfQoKCgoKCgogIHVzaW5nIDo6bG9nOwoKCiAg aW5saW5lIGZsb2F0CiAgbG9nKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2dmKF9feCk7IH0KCgoK CgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBsb2cobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6 OmxvZ2woX194KTsgfQoKCgoKCiAgdXNpbmcgOjpsb2cxMDsKCgogIGlubGluZSBmbG9hdAogIGxv ZzEwKGZsb2F0IF9feCkgeyByZXR1cm4gOjpsb2cxMGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIGxvZzEwKGxvbmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpsb2cxMGwoX194 KTsgfQoKCgoKCiAgdXNpbmcgOjptb2RmOwoKCiAgaW5saW5lIGZsb2F0CiAgbW9kZihmbG9hdCBf X3gsIGZsb2F0KiBfX2lwdHIpIHsgcmV0dXJuIDo6bW9kZmYoX194LCBfX2lwdHIpOyB9CiMgMzc1 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9jbWF0aCIgMwogIGlubGluZSBsb25nIGRvdWJs ZQogIG1vZGYobG9uZyBkb3VibGUgX194LCBsb25nIGRvdWJsZSogX19pcHRyKSB7IHJldHVybiA6 Om1vZGZsKF9feCwgX19pcHRyKTsgfQojIDM4OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Y21hdGgiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbmxpbmUgX1RwCiAgICBfX3Bv d19oZWxwZXIoX1RwIF9feCwgaW50IF9fbikKICAgIHsKICAgICAgcmV0dXJuIF9fbiA8IDAKICAg ICAgICA/IF9UcCgxKS9fX2NtYXRoX3Bvd2VyKF9feCwgLV9fbikKICAgICAgICA6IF9fY21hdGhf cG93ZXIoX194LCBfX24pOwogICAgfQoKICB1c2luZyA6OnBvdzsKCgogIGlubGluZSBmbG9hdAog IHBvdyhmbG9hdCBfX3gsIGZsb2F0IF9feSkgeyByZXR1cm4gOjpwb3dmKF9feCwgX195KTsgfQoK CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBwb3cobG9uZyBkb3VibGUgX194LCBsb25nIGRv dWJsZSBfX3kpIHsgcmV0dXJuIDo6cG93bChfX3gsIF9feSk7IH0KCgoKCgoKICBpbmxpbmUgZG91 YmxlCiAgcG93KGRvdWJsZSBfX3gsIGludCBfX2kpCiAgeyByZXR1cm4gX19wb3dfaGVscGVyKF9f eCwgX19pKTsgfQoKICBpbmxpbmUgZmxvYXQKICBwb3coZmxvYXQgX194LCBpbnQgX19uKQogIHsg cmV0dXJuIF9fcG93X2hlbHBlcihfX3gsIF9fbik7IH0KCiAgaW5saW5lIGxvbmcgZG91YmxlCiAg cG93KGxvbmcgZG91YmxlIF9feCwgaW50IF9fbikKICB7IHJldHVybiBfX3Bvd19oZWxwZXIoX194 LCBfX24pOyB9CgogIHVzaW5nIDo6c2luOwoKICBpbmxpbmUgZmxvYXQKICBzaW4oZmxvYXQgX194 KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zaW5mKF9feCk7IH0KCiAgaW5saW5lIGxvbmcgZG91Ymxl CiAgc2luKGxvbmcgZG91YmxlIF9feCkKICB7IHJldHVybiBfX2J1aWx0aW5fc2lubChfX3gpOyB9 CgogIHVzaW5nIDo6c2luaDsKCgogIGlubGluZSBmbG9hdAogIHNpbmgoZmxvYXQgX194KSB7IHJl dHVybiA6OnNpbmhmKF9feCk7IH0KCgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICBzaW5oKGxv bmcgZG91YmxlIF9feCkgeyByZXR1cm4gOjpzaW5obChfX3gpOyB9CgoKCgoKICB1c2luZyA6OnNx cnQ7CgogIGlubGluZSBmbG9hdAogIHNxcnQoZmxvYXQgX194KQogIHsgcmV0dXJuIF9fYnVpbHRp bl9zcXJ0ZihfX3gpOyB9CgogIGlubGluZSBsb25nIGRvdWJsZQogIHNxcnQobG9uZyBkb3VibGUg X194KQogIHsgcmV0dXJuIF9fYnVpbHRpbl9zcXJ0bChfX3gpOyB9CgogIHVzaW5nIDo6dGFuOwoK CiAgaW5saW5lIGZsb2F0CiAgdGFuKGZsb2F0IF9feCkgeyByZXR1cm4gOjp0YW5mKF9feCk7IH0K CgoKCgoKICBpbmxpbmUgbG9uZyBkb3VibGUKICB0YW4obG9uZyBkb3VibGUgX194KSB7IHJldHVy biA6OnRhbmwoX194KTsgfQoKCgoKCiAgdXNpbmcgOjp0YW5oOwoKCiAgaW5saW5lIGZsb2F0CiAg dGFuaChmbG9hdCBfX3gpIHsgcmV0dXJuIDo6dGFuaGYoX194KTsgfQoKCgoKCgogIGlubGluZSBs b25nIGRvdWJsZQogIHRhbmgobG9uZyBkb3VibGUgX194KSB7IHJldHVybiA6OnRhbmhsKF9feCk7 IH0KCgoKCn0KCgoKCgoKbmFtZXNwYWNlIF9fZ251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBfX2NhcHR1cmVfZnBjbGFzc2lmeShfVHAgX19mKSB7IHJldHVybiAo c2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX19mKSA6IHNp emVvZiAoX19mKSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fZikgOiBfX2Zw Y2xhc3NpZnlsIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAg IF9fY2FwdHVyZV9pc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNp emVvZiAoZmxvYXQpID8gX19maW5pdGVmIChfX2YpIDogc2l6ZW9mIChfX2YpID09IHNpemVvZiAo ZG91YmxlKSA/IF9fZmluaXRlIChfX2YpIDogX19maW5pdGVsIChfX2YpKTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc2luZihfVHAgX19mKSB7IHJl dHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQpID8gX19pc2luZmYgKF9fZikgOiBz aXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19pc2luZiAoX19mKSA6IF9faXNpbmZs IChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIF9fY2FwdHVy ZV9pc25hbihfVHAgX19mKSB7IHJldHVybiAoc2l6ZW9mIChfX2YpID09IHNpemVvZiAoZmxvYXQp ID8gX19pc25hbmYgKF9fZikgOiBzaXplb2YgKF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19p c25hbiAoX19mKSA6IF9faXNuYW5sIChfX2YpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+ CiAgICBpbnQKICAgIF9fY2FwdHVyZV9pc25vcm1hbChfVHAgX19mKSB7IHJldHVybiAoKHNpemVv ZiAoX19mKSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fZikgOiBzaXplb2Yg KF9fZikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX2YpIDogX19mcGNsYXNz aWZ5bCAoX19mKSkgPT0gRlBfTk9STUFMKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAg ICBpbnQKICAgIF9fY2FwdHVyZV9zaWduYml0KF9UcCBfX2YpIHsgcmV0dXJuIChzaXplb2YgKF9f ZikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX3NpZ25iaXRmIChfX2YpIDogc2l6ZW9mIChfX2YpID09 IHNpemVvZiAoZG91YmxlKSA/IF9fc2lnbmJpdCAoX19mKSA6IF9fc2lnbmJpdGwgKF9fZikpOyB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgX19jYXB0dXJlX2lzZ3JlYXRl cihfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7IHJldHVybiAoICh7IHR5cGVvZihfX2YxKSBfX3gg PSAoX19mMSk7IHR5cGVvZihfX2YyKSBfX3kgPSAoX19mMik7ICEoICh7IHR5cGVvZihfX3gpIF9f dSA9IChfX3gpOyB0eXBlb2YoX195KSBfX3YgPSAoX195KTsgKHNpemVvZiAoX191KSA9PSBzaXpl b2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9m IChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3UpIDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0g RlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlm IChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAo X192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09IEZQX05BTjsgfSkpICYmIF9feCA+IF9feTsg fSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQKICAgICBfX2NhcHR1cmVf aXNncmVhdGVyZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAgIHsgcmV0dXJuICggKHsgdHlw ZW9mKF9fZjEpIF9feCA9IChfX2YxKTsgdHlwZW9mKF9fZjIpIF9feSA9IChfX2YyKTsgISggKHsg dHlwZW9mKF9feCkgX191ID0gKF9feCk7IHR5cGVvZihfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9m IChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAo X191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3Np ZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/ IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8g X19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkg JiYgX194ID49IF9feTsgfSkpOyB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgICBpbnQK ICAgICBfX2NhcHR1cmVfaXNsZXNzKF9UcCBfX2YxLCBfVHAgX19mMikgeyByZXR1cm4gKCAoeyB0 eXBlb2YoX19mMSkgX194ID0gKF9fZjEpOyB0eXBlb2YoX19mMikgX195ID0gKF9fZjIpOyAhKCAo eyB0eXBlb2YoX194KSBfX3UgPSAoX194KTsgdHlwZW9mKF9feSkgX192ID0gKF9feSk7IChzaXpl b2YgKF9fdSkgPT0gc2l6ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3UpIDogc2l6ZW9m IChfX3UpID09IHNpemVvZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX191KSA6IF9fZnBjbGFz c2lmeWwgKF9fdSkpID09IEZQX05BTiB8fCAoc2l6ZW9mIChfX3YpID09IHNpemVvZiAoZmxvYXQp ID8gX19mcGNsYXNzaWZ5ZiAoX192KSA6IHNpemVvZiAoX192KSA9PSBzaXplb2YgKGRvdWJsZSkg PyBfX2ZwY2xhc3NpZnkgKF9fdikgOiBfX2ZwY2xhc3NpZnlsIChfX3YpKSA9PSBGUF9OQU47IH0p KSAmJiBfX3ggPCBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICAgaW50 CiAgICAgX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9UcCBfX2YxLCBfVHAgX19mMikKICAgICB7IHJl dHVybiAoICh7IHR5cGVvZihfX2YxKSBfX3ggPSAoX19mMSk7IHR5cGVvZihfX2YyKSBfX3kgPSAo X19mMik7ICEoICh7IHR5cGVvZihfX3gpIF9fdSA9IChfX3gpOyB0eXBlb2YoX195KSBfX3YgPSAo X195KTsgKHNpemVvZiAoX191KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9f dSkgOiBzaXplb2YgKF9fdSkgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3Up IDogX19mcGNsYXNzaWZ5bCAoX191KSkgPT0gRlBfTkFOIHx8IChzaXplb2YgKF9fdikgPT0gc2l6 ZW9mIChmbG9hdCkgPyBfX2ZwY2xhc3NpZnlmIChfX3YpIDogc2l6ZW9mIChfX3YpID09IHNpemVv ZiAoZG91YmxlKSA/IF9fZnBjbGFzc2lmeSAoX192KSA6IF9fZnBjbGFzc2lmeWwgKF9fdikpID09 IEZQX05BTjsgfSkpICYmIF9feCA8PSBfX3k7IH0pKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf VHA+CiAgICAgaW50CiAgICAgX19jYXB0dXJlX2lzbGVzc2dyZWF0ZXIoX1RwIF9fZjEsIF9UcCBf X2YyKQogICAgIHsgcmV0dXJuICggKHsgdHlwZW9mKF9fZjEpIF9feCA9IChfX2YxKTsgdHlwZW9m KF9fZjIpIF9feSA9IChfX2YyKTsgISggKHsgdHlwZW9mKF9feCkgX191ID0gKF9feCk7IHR5cGVv ZihfX3kpIF9fdiA9IChfX3kpOyAoc2l6ZW9mIChfX3UpID09IHNpemVvZiAoZmxvYXQpID8gX19m cGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2Zw Y2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnlsIChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVv ZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9fZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2Yg KF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19mcGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNz aWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSkgJiYgKF9feCA8IF9feSB8fCBfX3kgPCBfX3gpOyB9 KSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgIGludAogICAgIF9fY2FwdHVyZV9p c3Vub3JkZXJlZChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICAgeyByZXR1cm4gKCAoeyB0eXBlb2Yo X19mMSkgX191ID0gKF9fZjEpOyB0eXBlb2YoX19mMikgX192ID0gKF9fZjIpOyAoc2l6ZW9mIChf X3UpID09IHNpemVvZiAoZmxvYXQpID8gX19mcGNsYXNzaWZ5ZiAoX191KSA6IHNpemVvZiAoX191 KSA9PSBzaXplb2YgKGRvdWJsZSkgPyBfX2ZwY2xhc3NpZnkgKF9fdSkgOiBfX2ZwY2xhc3NpZnls IChfX3UpKSA9PSBGUF9OQU4gfHwgKHNpemVvZiAoX192KSA9PSBzaXplb2YgKGZsb2F0KSA/IF9f ZnBjbGFzc2lmeWYgKF9fdikgOiBzaXplb2YgKF9fdikgPT0gc2l6ZW9mIChkb3VibGUpID8gX19m cGNsYXNzaWZ5IChfX3YpIDogX19mcGNsYXNzaWZ5bCAoX192KSkgPT0gRlBfTkFOOyB9KSk7IH0K fQojIDU4MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvY21hdGgiIDMKbmFtZXNwYWNlIF9f Z251X2N4eAp7CiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBmcGNsYXNzaWZ5 KF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9mcGNsYXNzaWZ5KF9fZik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2Zpbml0ZShfVHAgX19mKSB7IHJldHVybiBf X2NhcHR1cmVfaXNmaW5pdGUoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBp bnQKICAgIGlzaW5mKF9UcCBfX2YpIHsgcmV0dXJuIF9fY2FwdHVyZV9pc2luZihfX2YpOyB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNuYW4oX1RwIF9fZikgeyByZXR1 cm4gX19jYXB0dXJlX2lzbmFuKF9fZik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwPgogICAg aW50CiAgICBpc25vcm1hbChfVHAgX19mKSB7IHJldHVybiBfX2NhcHR1cmVfaXNub3JtYWwoX19m KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIHNpZ25iaXQoX1RwIF9f ZikgeyByZXR1cm4gX19jYXB0dXJlX3NpZ25iaXQoX19mKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHA+CiAgICBpbnQKICAgIGlzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9fZjIpIHsgcmV0dXJu IF9fY2FwdHVyZV9pc2dyZWF0ZXIoX19mMSwgX19mMik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X1RwPgogICAgaW50CiAgICBpc2dyZWF0ZXJlcXVhbChfVHAgX19mMSwgX1RwIF9fZjIpCiAgICB7 IHJldHVybiBfX2NhcHR1cmVfaXNncmVhdGVyZXF1YWwoX19mMSwgX19mMik7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1RwPgogICAgaW50CiAgICBpc2xlc3MoX1RwIF9fZjEsIF9UcCBfX2YyKSB7 IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZXF1YWwoX1RwIF9fZjEsIF9UcCBfX2YyKQogICAg eyByZXR1cm4gX19jYXB0dXJlX2lzbGVzc2VxdWFsKF9fZjEsIF9fZjIpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9UcD4KICAgIGludAogICAgaXNsZXNzZ3JlYXRlcihfVHAgX19mMSwgX1RwIF9f ZjIpCiAgICB7IHJldHVybiBfX2NhcHR1cmVfaXNsZXNzZ3JlYXRlcihfX2YxLCBfX2YyKTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHA+CiAgICBpbnQKICAgIGlzdW5vcmRlcmVkKF9UcCBfX2Yx LCBfVHAgX19mMikKICAgIHsgcmV0dXJuIF9fY2FwdHVyZV9pc3Vub3JkZXJlZChfX2YxLCBfX2Yy KTsgfQp9CgpuYW1lc3BhY2Ugc3RkCnsKICB1c2luZyBfX2dudV9jeHg6OmZwY2xhc3NpZnk7CiAg dXNpbmcgX19nbnVfY3h4Ojppc2Zpbml0ZTsKICB1c2luZyBfX2dudV9jeHg6OmlzaW5mOwogIHVz aW5nIF9fZ251X2N4eDo6aXNuYW47CiAgdXNpbmcgX19nbnVfY3h4Ojppc25vcm1hbDsKICB1c2lu ZyBfX2dudV9jeHg6OnNpZ25iaXQ7CiAgdXNpbmcgX19nbnVfY3h4Ojppc2dyZWF0ZXI7CiAgdXNp bmcgX19nbnVfY3h4Ojppc2dyZWF0ZXJlcXVhbDsKICB1c2luZyBfX2dudV9jeHg6OmlzbGVzczsK ICB1c2luZyBfX2dudV9jeHg6OmlzbGVzc2VxdWFsOwogIHVzaW5nIF9fZ251X2N4eDo6aXNsZXNz Z3JlYXRlcjsKICB1c2luZyBfX2dudV9jeHg6OmlzdW5vcmRlcmVkOwp9CgoKCgojIDEgIi91c3Iv bG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvY21hdGgudGNjIiAxIDMKIyAzNSAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9jbWF0aC50Y2MiIDMKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGU8dHlwZW5hbWUgX1RwPgogICAgX1RwCiAgICBfX2NtYXRoX3Bvd2VyKF9UcCBfX3gsIHVu c2lnbmVkIGludCBfX24pCiAgICB7CiAgICAgIF9UcCBfX3kgPSBfX24gJSAyID8gX194IDogMTsK CiAgICAgIHdoaWxlIChfX24gPj49IDEpCiAgICAgICAgewogICAgICAgICAgX194ID0gX194ICog X194OwogICAgICAgICAgaWYgKF9fbiAlIDIpCiAgICAgICAgICAgIF9feSA9IF9feSAqIF9feDsK ICAgICAgICB9CgogICAgICByZXR1cm4gX195OwogICAgfQp9CiMgNjU1ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9jbWF0aCIgMiAzCiMgNDIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDIgMwoKCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGxvY2FsZQogICAgbG9jYWxlOjpjb21iaW5lKGNvbnN0 IGxvY2FsZSYgX19vdGhlcikgY29uc3QKICAgIHsKICAgICAgX0ltcGwqIF9fdG1wID0gbmV3IF9J bXBsKCpfTV9pbXBsLCAxKTsKICAgICAgX190bXAtPl9NX3JlcGxhY2VfZmFjZXQoX19vdGhlci5f TV9pbXBsLCAmX0ZhY2V0OjppZCk7CiAgICAgIHJldHVybiBsb2NhbGUoX190bXApOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9B bGxvYz4KICAgIGJvb2wKICAgIGxvY2FsZTo6b3BlcmF0b3IoKShjb25zdCBiYXNpY19zdHJpbmc8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3MxLAogICAgICAgICAgICAgICAgICAgICAgIGNv bnN0IGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4mIF9fczIpIGNvbnN0CiAg ICB7CiAgICAgIHR5cGVkZWYgc3RkOjpjb2xsYXRlPF9DaGFyVD4gX19jb2xsYXRlX3R5cGU7CiAg ICAgIGNvbnN0IF9fY29sbGF0ZV90eXBlJiBfX2NvbGxhdGUgPSB1c2VfZmFjZXQ8X19jb2xsYXRl X3R5cGU+KCp0aGlzKTsKICAgICAgcmV0dXJuIChfX2NvbGxhdGUuY29tcGFyZShfX3MxLmRhdGEo KSwgX19zMS5kYXRhKCkgKyBfX3MxLmxlbmd0aCgpLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fczIuZGF0YSgpLCBfX3MyLmRhdGEoKSArIF9fczIubGVuZ3RoKCkpIDwgMCk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9GYWNldD4KICAgIGNvbnN0IF9GYWNldCYKICAgIHVz ZV9mYWNldChjb25zdCBsb2NhbGUmIF9fbG9jKQogICAgewogICAgICBzaXplX3QgX19pID0gX0Zh Y2V0OjppZC5fTV9pZCgpOwogICAgICBsb2NhbGU6OmZhY2V0KiogX19mYWNldHMgPSBfX2xvYy5f TV9pbXBsLT5fTV9mYWNldHM7CiAgICAgIGlmICghKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9NX2Zh Y2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pKQogICAgICAgIF9fdGhyb3dfYmFkX2Nhc3QoKTsK ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNvbnN0IF9GYWNldCY+KCpfX2ZhY2V0c1tfX2ldKTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0ZhY2V0PgogICAgYm9vbAogICAgaGFzX2ZhY2V0 KGNvbnN0IGxvY2FsZSYgX19sb2MpIHRocm93KCkKICAgIHsKICAgICAgc2l6ZV90IF9faSA9IF9G YWNldDo6aWQuX01faWQoKTsKICAgICAgbG9jYWxlOjpmYWNldCoqIF9fZmFjZXRzID0gX19sb2Mu X01faW1wbC0+X01fZmFjZXRzOwogICAgICByZXR1cm4gKF9faSA8IF9fbG9jLl9NX2ltcGwtPl9N X2ZhY2V0c19zaXplICYmIF9fZmFjZXRzW19faV0pOwogICAgfQoKCgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0No YXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X2Zsb2F0KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0 ZXIgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 aW9zdGF0ZSYgX19lcnIsIHN0cmluZyYgX194dHJjKSBjb25zdAogICAgewogICAgICB0eXBlZGVm IGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAgY29uc3QgbG9jYWxlIF9f bG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlwZSA9 IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBjb25zdCBudW1wdW5jdDxf Q2hhclQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKICAg ICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29u c3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CiAgICAgIGludCBfX3Bv cyA9IDA7CiAgICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWc7CiAgICAgIGlmICgoX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX3BsdXMpIHx8IF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX19taW51cykp CiAgICAgICAgICAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX3h0cmMg Kz0gX19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgKytfX3BvczsKICAgICAg ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgfQoKCiAgICAgIGNvbnN0IGNoYXJfdHlwZSBf X3plcm8gPSBfX2N0eXBlLndpZGVuKF9TX2F0b21zW19NX3plcm9dKTsKICAgICAgYm9vbCBfX2Zv dW5kX3plcm8gPSBmYWxzZTsKICAgICAgd2hpbGUgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196 ZXJvKSAmJiBfX2JlZyAhPSBfX2VuZCkKICAgICAgICB7CiAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgICAgX19mb3VuZF96ZXJvID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIGlmIChf X2ZvdW5kX3plcm8pCiAgICAgICAgewogICAgICAgICAgX194dHJjICs9IF9TX2F0b21zW19NX3pl cm9dOwogICAgICAgICAgKytfX3BvczsKICAgICAgICB9CgoKICAgICAgY29uc3Qgc2l6ZV90IF9f bGVuID0gX01fRSAtIF9NX3plcm8gKyAxOwogICAgICBjaGFyX3R5cGUgX193YXRvbXNbX19sZW5d OwogICAgICBfX2N0eXBlLndpZGVuKF9TX2F0b21zLCBfU19hdG9tcyArIF9fbGVuLCBfX3dhdG9t cyk7CiAgICAgIGJvb2wgX19mb3VuZF9kZWMgPSBmYWxzZTsKICAgICAgYm9vbCBfX2ZvdW5kX3Nj aSA9IGZhbHNlOwogICAgICBjb25zdCBjaGFyX3R5cGUgX19kZWMgPSBfX25wLmRlY2ltYWxfcG9p bnQoKTsKCiAgICAgIHN0cmluZyBfX2ZvdW5kX2dyb3VwaW5nOwogICAgICBjb25zdCBzdHJpbmcg X19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgYm9vbCBfX2NoZWNrX2dyb3VwaW5n ID0gX19ncm91cGluZy5zaXplKCk7CiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwogICAgICBjb25z dCBjaGFyX3R5cGUgX19zZXAgPSBfX25wLnRob3VzYW5kc19zZXAoKTsKCiAgICAgIHdoaWxlIChf X2JlZyAhPSBfX2VuZCkKICAgICAgICB7CgogICAgICAgICAgY29uc3QgY2hhcl90eXBlKiBfX3Ag PSBfX3RyYWl0c190eXBlOjpmaW5kKF9fd2F0b21zLCAxMCwgX19jKTsKCgogICAgICAgICAgaWYg KF9fcCAmJiAhX190cmFpdHNfdHlwZTo6ZXEoX19jLCBjaGFyX3R5cGUoKSkpCiAgICAgICAgICAg IHsKCiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRv bXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAgICAgICsrX19zZXBfcG9zOwogICAgICAgICAg ICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX19zZXApCiAgICAgICAgICAgICAgICAgICAmJiBfX2NoZWNr X2dyb3VwaW5nICYmICFfX2ZvdW5kX2RlYykKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg aWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19mb3Vu ZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3MpOwogICAgICAgICAgICAg ICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwog ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAg ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNl IGlmIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9fZGVjKSAmJiAhX19mb3VuZF9kZWMpCiAgICAg ICAgICAgIHsKCgoKICAgICAgICAgICAgICBpZiAoX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAg ICAgICAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2Vw X3Bvcyk7CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBfX3h0cmMgKz0gJy4n OwogICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgX19mb3VuZF9k ZWMgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmICgoX190cmFpdHNfdHlw ZTo6ZXEoX19jLCBfX3dhdG9tc1tfTV9lXSkKICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0 c190eXBlOjplcShfX2MsIF9fd2F0b21zW19NX0VdKSkKICAgICAgICAgICAgICAgICAgICYmICFf X2ZvdW5kX3NjaSAmJiBfX3BvcykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICArK19fcG9z OwogICAgICAgICAgICAgIF9feHRyYyArPSBfX2N0eXBlLm5hcnJvdyhfX2MsIGNoYXIoKSk7CiAg ICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKCgogICAgICAgICAgICAgIGlmIChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9fcGx1cykKICAgICAgICAgICAgICAgICAgfHwgX190cmFpdHNfdHlw ZTo6ZXEoX19jLCBfX21pbnVzKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg KytfX3BvczsKICAgICAgICAgICAgICAgICAgX194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywg Y2hhcigpKTsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBfX2ZvdW5kX3NjaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAg ICAgICAgIGVsc2UKCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KCgoKICAgICAgaWYgKF9f Y2hlY2tfZ3JvdXBpbmcgJiYgX19mb3VuZF9ncm91cGluZy5zaXplKCkpCiAgICAgICAgewoKICAg ICAgICAgIGlmICghX19mb3VuZF9kZWMpCiAgICAgICAgICAgIF9fZm91bmRfZ3JvdXBpbmcgKz0g c3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgIGlmICghX192ZXJpZnlfZ3Jv dXBpbmcoX19ncm91cGluZywgX19mb3VuZF9ncm91cGluZykpCiAgICAgICAgICAgIF9fZXJyIHw9 IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgIH0KCgogICAgICBfX3h0cmMgKz0gY2hhcigpOwog ICAgICBpZiAoX19iZWcgPT0gX19lbmQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmVvZmJp dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJU LCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0 ZXI+OjoKICAgIF9NX2V4dHJhY3RfaW50KF9Jbkl0ZXIgX19iZWcsIF9Jbkl0ZXIgX19lbmQsIGlv c19iYXNlJiBfX2lvLAogICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCBzdHJpbmcmIF9feHRyYywgaW50JiBfX2Jhc2UpIGNvbnN0CiAgICB7CiAgICAgIHR5cGVkZWYg Y2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBjb25zdCBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIGNvbnN0IG51bXB1bmN0PF9D aGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg ICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19iYXNlZmllbGQgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFz ZTo6YmFzZWZpZWxkOwogICAgICBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6Om9jdCkKICAg ICAgICBfX2Jhc2UgPSA4OwogICAgICBlbHNlIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3NfYmFzZTo6 aGV4KQogICAgICAgIF9fYmFzZSA9IDE2OwogICAgICBlbHNlCiAgICAgICAgX19iYXNlID0gMTA7 CgoKICAgICAgaW50IF9fcG9zID0gMDsKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKICAg ICAgY29uc3QgY2hhcl90eXBlIF9fcGx1cyA9IF9fY3R5cGUud2lkZW4oJysnKTsKICAgICAgY29u c3QgY2hhcl90eXBlIF9fbWludXMgPSBfX2N0eXBlLndpZGVuKCctJyk7CgogICAgICBpZiAoKF9f dHJhaXRzX3R5cGU6OmVxKF9fYywgX19wbHVzKSB8fCBfX3RyYWl0c190eXBlOjplcShfX2MsIF9f bWludXMpKQogICAgICAgICAgJiYgX19iZWcgIT0gX19lbmQpCiAgICAgICAgewogICAgICAgICAg X194dHJjICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICsrX19wb3M7 CiAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgIH0KCgogICAgICBjb25zdCBjaGFy X3R5cGUgX196ZXJvID0gX19jdHlwZS53aWRlbihfU19hdG9tc1tfTV96ZXJvXSk7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3ggPSBfX2N0eXBlLndpZGVuKCd4Jyk7CiAgICAgIGNvbnN0IGNoYXJf dHlwZSBfX1ggPSBfX2N0eXBlLndpZGVuKCdYJyk7CiAgICAgIGlmIChfX2Jhc2UgPT0gMTApCiAg ICAgICAgewogICAgICAgICAgYm9vbCBfX2ZvdW5kX3plcm8gPSBmYWxzZTsKICAgICAgICAgIHdo aWxlIChfX3RyYWl0c190eXBlOjplcShfX2MsIF9femVybykgJiYgX19iZWcgIT0gX19lbmQpCiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAg IF9fZm91bmRfemVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX2ZvdW5k X3plcm8pCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX01f emVyb107CiAgICAgICAgICAgICAgKytfX3BvczsKICAgICAgICAgICAgICBpZiAoX19iYXNlZmll bGQgPT0gMCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgaWYgKChfX3RyYWl0 c190eXBlOjplcShfX2MsIF9feCkKICAgICAgICAgICAgICAgICAgICAgICB8fCBfX3RyYWl0c190 eXBlOjplcShfX2MsIF9fWCkpCiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2JlZyAhPSBfX2Vu ZCkKICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICBfX3h0cmMgKz0g X19jdHlwZS5uYXJyb3coX19jLCBjaGFyKCkpOwogICAgICAgICAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAg ICAgICAgICBfX2Jhc2UgPSAxNjsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Jhc2UgPSA4OwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX2Jhc2UgPT0gMTYpCiAg ICAgICAgewogICAgICAgICAgaWYgKF9fdHJhaXRzX3R5cGU6OmVxKF9fYywgX196ZXJvKSAmJiBf X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9feHRyYyArPSBfU19h dG9tc1tfTV96ZXJvXTsKICAgICAgICAgICAgICArK19fcG9zOwogICAgICAgICAgICAgIF9fYyA9 ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgaWYgKChfX3RyYWl0c190eXBlOjplcShfX2MsIF9f eCkgfHwgX190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX1gpKQogICAgICAgICAgICAgICAgICAmJiBf X2JlZyAhPSBfX2VuZCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX194dHJj ICs9IF9fY3R5cGUubmFycm93KF9fYywgY2hhcigpKTsKICAgICAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgfQogICAgICAgIH0KCgoKICAgICAgc2l6ZV90IF9fbGVuOwogICAgICBpZiAo X19iYXNlID09IDE2KQogICAgICAgIF9fbGVuID0gX01fc2l6ZTsKICAgICAgZWxzZQogICAgICAg IF9fbGVuID0gX19iYXNlOwoKCiAgICAgIGNoYXJfdHlwZSBfX3dhdG9tc1tfTV9zaXplXTsKICAg ICAgX19jdHlwZS53aWRlbihfU19hdG9tcywgX1NfYXRvbXMgKyBfX2xlbiwgX193YXRvbXMpOwog ICAgICBzdHJpbmcgX19mb3VuZF9ncm91cGluZzsKICAgICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBp bmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGJvb2wgX19jaGVja19ncm91cGluZyA9IF9fZ3Jv dXBpbmcuc2l6ZSgpOwogICAgICBpbnQgX19zZXBfcG9zID0gMDsKICAgICAgY29uc3QgY2hhcl90 eXBlIF9fc2VwID0gX19ucC50aG91c2FuZHNfc2VwKCk7CiAgICAgIHdoaWxlIChfX2JlZyAhPSBf X2VuZCkKICAgICAgICB7CiAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fcCA9IF9fdHJhaXRz X3R5cGU6OmZpbmQoX193YXRvbXMsIF9fbGVuLCBfX2MpOwoKCiAgICAgICAgICBpZiAoX19wICYm ICFfX3RyYWl0c190eXBlOjplcShfX2MsIGNoYXJfdHlwZSgpKSkKICAgICAgICAgICAgewoKICAg ICAgICAgICAgICBfX3h0cmMgKz0gX1NfYXRvbXNbX19wIC0gX193YXRvbXNdOwogICAgICAgICAg ICAgICsrX19wb3M7CiAgICAgICAgICAgICAgKytfX3NlcF9wb3M7CiAgICAgICAgICAgICAgX19j ID0gKigrK19fYmVnKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190cmFpdHNf dHlwZTo6ZXEoX19jLCBfX3NlcCkgJiYgX19jaGVja19ncm91cGluZykKICAgICAgICAgICAgewoK CiAgICAgICAgICAgICAgaWYgKF9fc2VwX3BvcykKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19mb3VuZF9ncm91cGluZyArPSBzdGF0aWNfY2FzdDxjaGFyPihfX3NlcF9wb3Mp OwogICAgICAgICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICBfX2Mg PSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9 CiAgICAgICAgICBlbHNlCgogICAgICAgICAgICBicmVhazsKICAgICAgICB9CgoKCiAgICAgIGlm IChfX2NoZWNrX2dyb3VwaW5nICYmIF9fZm91bmRfZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsK CiAgICAgICAgICBfX2ZvdW5kX2dyb3VwaW5nICs9IHN0YXRpY19jYXN0PGNoYXI+KF9fc2VwX3Bv cyk7CiAgICAgICAgICBpZiAoIV9fdmVyaWZ5X2dyb3VwaW5nKF9fZ3JvdXBpbmcsIF9fZm91bmRf Z3JvdXBpbmcpKQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAg ICB9CgoKICAgICAgX194dHJjICs9IGNoYXIoKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBf SW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlw ZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSYgX19lcnIsIGJvb2wmIF9fdikgY29uc3QKICAgIHsKCiAgICAgIGlmICgh KF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpib29sYWxwaGEpKQogICAgICAgIHsKCgogICAgICAg ICAgc3RyaW5nIF9feHRyYzsKICAgICAgICAgIGludCBfX2Jhc2U7CiAgICAgICAgICBfX2JlZyA9 IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNl KTsKCiAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgICAgICBfX2NvbnZlcnRfdG9f dihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAg ICAgICAgaWYgKCEoX19lcnIgJiBpb3NfYmFzZTo6ZmFpbGJpdCkgJiYgX191bCA8PSAxKQogICAg ICAgICAgICBfX3YgPSBfX3VsOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX2VyciB8PSBp b3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICB9CgoKICAgICAgZWxzZQogICAgICAgIHsKICAgICAg ICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICAgICAg dHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmluZ190eXBlOwoKICAgICAgICAgIGxv Y2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgICAgICBjb25zdCBudW1wdW5jdDxfQ2hh clQ+JiBfX25wID0gdXNlX2ZhY2V0PG51bXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgICAg ICBjb25zdCBfX3N0cmluZ190eXBlIF9fdHJ1ZSA9IF9fbnAudHJ1ZW5hbWUoKTsKICAgICAgICAg IGNvbnN0IF9fc3RyaW5nX3R5cGUgX19mYWxzZSA9IF9fbnAuZmFsc2VuYW1lKCk7CiAgICAgICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fdHJ1ZXMgPSBfX3RydWUuY19zdHIoKTsKICAgICAgICAgIGNv bnN0IGNoYXJfdHlwZSogX19mYWxzZXMgPSBfX2ZhbHNlLmNfc3RyKCk7CiAgICAgICAgICBjb25z dCBzaXplX3QgX190cnVlbiA9IF9fdHJ1ZS5zaXplKCkgLSAxOwogICAgICAgICAgY29uc3Qgc2l6 ZV90IF9fZmFsc2VuID0gX19mYWxzZS5zaXplKCkgLSAxOwoKICAgICAgICAgIGZvciAoc2l6ZV90 IF9fbiA9IDA7IF9fYmVnICE9IF9fZW5kOyArK19fbikKICAgICAgICAgICAgewogICAgICAgICAg ICAgIGNoYXJfdHlwZSBfX2MgPSAqX19iZWcrKzsKICAgICAgICAgICAgICBib29sIF9fdGVzdGYg PSBfX24gPD0gX19mYWxzZW4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA/IF9fdHJhaXRz X3R5cGU6OmVxKF9fYywgX19mYWxzZXNbX19uXSkgOiBmYWxzZTsKICAgICAgICAgICAgICBib29s IF9fdGVzdHQgPSBfX24gPD0gX190cnVlbgogICAgICAgICAgICAgICAgICAgICAgICAgICAgID8g X190cmFpdHNfdHlwZTo6ZXEoX19jLCBfX3RydWVzW19fbl0pIDogZmFsc2U7CiAgICAgICAgICAg ICAgaWYgKCEoX190ZXN0ZiB8fCBfX3Rlc3R0KSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJy ZWFrOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGYgJiYg X19uID09IF9fZmFsc2VuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3Yg PSAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBlbHNlIGlmIChfX3Rlc3R0ICYmIF9fbiA9PSBfX3RydWVuKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3YgPSAxOwogICAgICAgICAgICAgICAgICBicmVhazsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgaWYgKF9fYmVnID09IF9fZW5k KQogICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICAgIH0KICAgICAg cmV0dXJuIF9fYmVnOwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8s CiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nJiBfX3YpIGNvbnN0CiAg ICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0g X01fZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2Up OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX192LCBfX2VyciwgX1NfY19s b2NhbGUsIF9fYmFzZSk7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxf Q2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJy LCB1bnNpZ25lZCBzaG9ydCYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwog ICAgICBpbnQgX19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgdW5zaWduZWQgbG9uZyBfX3Vs OwogICAgICBfX2NvbnZlcnRfdG9fdihfX3h0cmMuY19zdHIoKSwgX191bCwgX19lcnIsIF9TX2Nf bG9jYWxlLCBfX2Jhc2UpOwogICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KQog ICAgICAgICAgJiYgX191bCA8PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZCBzaG9ydD46Om1heCgp KQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX3VsKTsKICAgICAg ZWxzZQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICByZXR1cm4gX19i ZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4K ICAgIF9Jbkl0ZXIKICAgIG51bV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQoaXRl cl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAg IGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdW5zaWduZWQgaW50JiBfX3YpIGNvbnN0CiAgICB7 CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAgIGludCBfX2Jhc2U7CiAgICAgIF9fYmVnID0gX01f ZXh0cmFjdF9pbnQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX194dHJjLCBfX2Jhc2UpOwog ICAgICB1bnNpZ25lZCBsb25nIF9fdWw7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0 cigpLCBfX3VsLCBfX2VyciwgX1NfY19sb2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJy ICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAmJiBfX3VsIDw9IG51bWVyaWNfbGltaXRz PHVuc2lnbmVkIGludD46Om1heCgpKQogICAgICAgIF9fdiA9IHN0YXRpY19jYXN0PHVuc2lnbmVk IGludD4oX191bCk7CiAgICAgIGVsc2UKICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJp dDsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxv bmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFz ZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBf X3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAg fQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUg X19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9zX2Jh c2U6Omlvc3RhdGUmIF9fZXJyLCBsb25nIGxvbmcmIF9fdikgY29uc3QKICAgIHsKICAgICAgc3Ry aW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2lu dChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFzZSk7CiAgICAgIF9fY29u dmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSwgX19iYXNl KTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRl cj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFz ZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHVuc2lnbmVkIGxv bmcgbG9uZyYgX192KSBjb25zdAogICAgewogICAgICBzdHJpbmcgX194dHJjOwogICAgICBpbnQg X19iYXNlOwogICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfaW50KF9fYmVnLCBfX2VuZCwgX19pbywg X19lcnIsIF9feHRyYywgX19iYXNlKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3Ry KCksIF9fdiwgX19lcnIsIF9TX2NfbG9jYWxlLCBfX2Jhc2UpOwogICAgICByZXR1cm4gX19iZWc7 CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAg ICBfSW5JdGVyCiAgICBudW1fZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJf dHlwZSBfX2JlZywgaXRlcl90eXBlIF9fZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBp b3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGZsb2F0JiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0 cmluZyBfX3h0cmM7CiAgICAgIF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9l eHRyYWN0X2Zsb2F0KF9fYmVnLCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9f Y29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAg ICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoK ICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9f aW8sCiAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCBkb3VibGUmIF9fdikgY29u c3QKICAgIHsKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgX194dHJjLnJlc2VydmUoMzIpOwog ICAgICBfX2JlZyA9IF9NX2V4dHJhY3RfZmxvYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2Vyciwg X194dHJjKTsKICAgICAgX19jb252ZXJ0X3RvX3YoX194dHJjLmNfc3RyKCksIF9fdiwgX19lcnIs IF9TX2NfbG9jYWxlKTsKICAgICAgcmV0dXJuIF9fYmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+CiAgICBfSW5JdGVyCiAgICBudW1fZ2V0PF9D aGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0KGl0ZXJfdHlwZSBfX2JlZywgaXRlcl90eXBlIF9f ZW5kLCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIs IGxvbmcgZG91YmxlJiBfX3YpIGNvbnN0CiAgICB7CiAgICAgIHN0cmluZyBfX3h0cmM7CiAgICAg IF9feHRyYy5yZXNlcnZlKDMyKTsKICAgICAgX19iZWcgPSBfTV9leHRyYWN0X2Zsb2F0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9feHRyYyk7CiAgICAgIF9fY29udmVydF90b192KF9feHRy Yy5jX3N0cigpLCBfX3YsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgIHJldHVybiBfX2JlZzsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg X0luSXRlcgogICAgbnVtX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5 cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgaW9z X2Jhc2U6Omlvc3RhdGUmIF9fZXJyLCB2b2lkKiYgX192KSBjb25zdAogICAgewoKICAgICAgdHlw ZWRlZiBpb3NfYmFzZTo6Zm10ZmxhZ3MgZm10ZmxhZ3M7CiAgICAgIGZtdGZsYWdzIF9fZm10ID0g X19pby5mbGFncygpOwogICAgICBmbXRmbGFncyBfX2ZtdG1hc2sgPSB+KGlvc19iYXNlOjpzaG93 cG9zIHwgaW9zX2Jhc2U6OmJhc2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg aW9zX2Jhc2U6OnVwcGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxh Z3MoX19mbXQgJiBfX2ZtdG1hc2sgfCAoaW9zX2Jhc2U6OmhleCB8IGlvc19iYXNlOjpzaG93YmFz ZSkpOwoKICAgICAgc3RyaW5nIF9feHRyYzsKICAgICAgaW50IF9fYmFzZTsKICAgICAgX19iZWcg PSBfTV9leHRyYWN0X2ludChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJyLCBfX3h0cmMsIF9fYmFz ZSk7CgoKICAgICAgX19pby5mbGFncyhfX2ZtdCk7CgogICAgICB1bnNpZ25lZCBsb25nIF9fdWw7 CiAgICAgIF9fY29udmVydF90b192KF9feHRyYy5jX3N0cigpLCBfX3VsLCBfX2VyciwgX1NfY19s b2NhbGUsIF9fYmFzZSk7CiAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpKQog ICAgICAgIF9fdiA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KF9fdWwpOwogICAgICBlbHNlCiAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KIyA2MTggIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50 Y2MiIDMKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAg dGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAgbnVtX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfZmxvYXQoX091dEl0ZXIgX19zLCBp b3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY2hhciBfX21vZCwKICAgICAgICAgICAgICAg ICAgICAgICBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCiAgICAgICAgY29uc3QgaW50IF9f bWF4X2RpZ2l0cyA9IG51bWVyaWNfbGltaXRzPF9WYWx1ZVQ+OjpkaWdpdHMxMCArIDE7CiAgICAg ICAgc3RyZWFtc2l6ZSBfX3ByZWMgPSBfX2lvLnByZWNpc2lvbigpOwoKICAgICAgICBpZiAoX19w cmVjID4gc3RhdGljX2Nhc3Q8c3RyZWFtc2l6ZT4oX19tYXhfZGlnaXRzKSkKICAgICAgICAgIF9f cHJlYyA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbWF4X2RpZ2l0cyk7CgoKICAgICAgICBj aGFyIF9fZmJ1ZlsxNl07CgoKICAgICAgICBpbnQgX19sZW47CgoKCiAgICAgICAgaW50IF9fY3Nf c2l6ZSA9IF9fbWF4X2RpZ2l0cyAqIDM7CiAgICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0 PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6ZSkpOwoKICAgICAgICBjb25zdCBib29s IF9fZnAgPSBfU19mb3JtYXRfZmxvYXQoX19pbywgX19mYnVmLCBfX21vZCwgX19wcmVjKTsKICAg ICAgICBpZiAoX19mcCkKICAgICAgICAgIF9fbGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBf X2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IF9TX2NfbG9jYWxlLCBfX3ByZWMpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9fbGVuID0gX19j b252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LCBfU19jX2xvY2FsZSk7 CgoKICAgICAgICBpZiAoX19sZW4gPj0gX19jc19zaXplKQogICAgICAgICAgewogICAgICAgICAg ICBfX2NzX3NpemUgPSBfX2xlbiArIDE7CiAgICAgICAgICAgIF9fY3MgPSBzdGF0aWNfY2FzdDxj aGFyKj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgICAgICAgaWYgKF9fZnAp CiAgICAgICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwg X19mYnVmLCBfX3YsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf bG9jYWxlLCBfX3ByZWMpOwogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgX19sZW4gPSBf X2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6ZSwgX19mYnVmLCBfX3YsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKICAgICAgICAgIH0KIyA2 ODEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvbG9jYWxlX2ZhY2V0cy50Y2MiIDMK ICAgICAgICByZXR1cm4gX01fd2lkZW5fZmxvYXQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fY3MsIF9f bGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJ dGVyPgogICAgdGVtcGxhdGU8dHlwZW5hbWUgX1ZhbHVlVD4KICAgICAgX091dEl0ZXIKICAgICAg bnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICAgIF9NX2NvbnZlcnRfaW50KF9PdXRJdGVy IF9fcywgaW9zX2Jhc2UmIF9faW8sIF9DaGFyVCBfX2ZpbGwsIGNoYXIgX19tb2QsCiAgICAgICAg ICAgICAgICAgICAgIGNoYXIgX19tb2RsLCBfVmFsdWVUIF9fdikgY29uc3QKICAgICAgewoKCgog ICAgICAgIGNoYXIgX19mYnVmWzE2XTsKICAgICAgICBfU19mb3JtYXRfaW50KF9faW8sIF9fZmJ1 ZiwgX19tb2QsIF9fbW9kbCk7CgoKICAgICAgICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgICAg Y2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nfc2l6 ZSkpOwogICAgICAgIGludCBfX2xlbiA9IF9fY29udmVydF9mcm9tX3YoX19jcywgX19jc19zaXpl LCBfX2ZidWYsIF9fdiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2Nf bG9jYWxlKTsKCiAgICAgICAgaWYgKF9fbGVuID49IF9fY3Nfc2l6ZSkKICAgICAgICAgIHsKICAg ICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwogICAgICAgICAgICBfX2NzID0gc3RhdGlj X2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX19jc19zaXplKSk7CiAgICAgICAgICAgIF9f bGVuID0gX19jb252ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsIF9fZmJ1ZiwgX192LAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX1NfY19sb2NhbGUpOwogICAgICAgICAg fQoKCgoKCgogICAgICAgIHJldHVybiBfTV93aWRlbl9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9f Y3MsIF9fbGVuKTsKICAgICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgX01fd2lkZW5fZmxvYXQoX091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9f ZmlsbCwgY2hhciogX19jcywKICAgICAgICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAg IHsKICAgICAgdHlwZWRlZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgoKICAg ICAgY29uc3QgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgY29uc3QgY3R5cGU8 X0NoYXJUPiYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNp emVvZihfQ2hhclQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKiBfX2xlbikpOwoKCiAgICAgIF9DaGFyVCogX193czIgPSBzdGF0aWNf Y2FzdDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICogX19sZW4g KiAyKSk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIF9fbGVuLCBfX3dzKTsKCgog ICAgICBjb25zdCBfQ2hhclQqIF9fcDsKICAgICAgY29uc3QgbnVtcHVuY3Q8X0NoYXJUPiYgX19u cCA9IHVzZV9mYWNldDxudW1wdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBpZiAoX19wID0g X190cmFpdHNfdHlwZTo6ZmluZChfX3dzLCBfX2xlbiwgX19jdHlwZS53aWRlbignLicpKSkKICAg ICAgICBfX3dzW19fcCAtIF9fd3NdID0gX19ucC5kZWNpbWFsX3BvaW50KCk7CgoKCgogICAgICBj b25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9fbnAuZ3JvdXBpbmcoKTsKICAgICAgaW9zX2Jhc2U6 OmZtdGZsYWdzIF9fYmFzZWZpZWxkID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVs ZDsKICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAgIHsKICAgICAgICAgIF9DaGFy VCogX19wMjsKICAgICAgICAgIGludCBfX2RlY2xlbiA9IF9fcCA/IF9fcCAtIF9fd3MgOiBfX2xl bjsKICAgICAgICAgIF9fcDIgPSBfX2FkZF9ncm91cGluZyhfX3dzMiwgX19ucC50aG91c2FuZHNf c2VwKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91cGluZy5jX3N0cigp LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fZ3JvdXBpbmcuY19zdHIoKSArIF9f Z3JvdXBpbmcuc2l6ZSgpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fd3MsIF9f d3MgKyBfX2RlY2xlbik7CiAgICAgICAgICBpbnQgX19uZXdsZW4gPSBfX3AyIC0gX193czI7CgoK ICAgICAgICAgIGlmIChfX3ApCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3RyYWl0c190 eXBlOjpjb3B5KF9fcDIsIF9fcCwgX19sZW4gLSBfX2RlY2xlbik7CiAgICAgICAgICAgICAgX19u ZXdsZW4gKz0gX19sZW4gLSBfX2RlY2xlbjsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBfX3dz ID0gX193czI7CiAgICAgICAgICBfX2xlbiA9IF9fbmV3bGVuOwogICAgICAgIH0KCiAgICAgIHJl dHVybiBfTV9pbnNlcnQoX19zLCBfX2lvLCBfX2ZpbGwsIF9fd3MsIF9fbGVuKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVy CiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIF9NX3dpZGVuX2ludChfT3V0SXRl ciBfX3MsIGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLCBjaGFyKiBfX2NzLAogICAgICAg ICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKCgogICAgICBjb25zdCBsb2NhbGUgX19s b2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0g dXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9DaGFyVCogX193cyA9IHN0 YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIF9f bGVuKSk7CgoKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVp bHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX2xlbiAqIDIpKTsKICAgICAgX19jdHlw ZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwoKCiAgICAgIGNvbnN0IG51bXB1bmN0 PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAg ICAgY29uc3Qgc3RyaW5nIF9fZ3JvdXBpbmcgPSBfX25wLmdyb3VwaW5nKCk7CiAgICAgIGNvbnN0 IGlvc19iYXNlOjpmbXRmbGFncyBfX2Jhc2VmaWVsZCA9IF9faW8uZmxhZ3MoKSAmIGlvc19iYXNl OjpiYXNlZmllbGQ7CiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSkKICAgICAgICB7CgoKCiAg ICAgICAgICBzdHJlYW1zaXplIF9fb2ZmID0gMDsKICAgICAgICAgIGlmIChfX2lvLmZsYWdzKCkg JiBpb3NfYmFzZTo6c2hvd2Jhc2UpCiAgICAgICAgICAgIGlmIChfX2Jhc2VmaWVsZCA9PSBpb3Nf YmFzZTo6b2N0KQogICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIF9fb2ZmID0gMTsKICAg ICAgICAgICAgICAgICpfX3dzMiA9ICpfX3dzOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAg ZWxzZSBpZiAoX19iYXNlZmllbGQgPT0gaW9zX2Jhc2U6OmhleCkKICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBfX29mZiA9IDI7CiAgICAgICAgICAgICAgICAqX193czIgPSAqX193czsK ICAgICAgICAgICAgICAgICooX193czIgKyAxKSA9ICooX193cyArIDEpOwogICAgICAgICAgICAg IH0KICAgICAgICAgIF9DaGFyVCogX19wOwogICAgICAgICAgX19wID0gX19hZGRfZ3JvdXBpbmco X193czIgKyBfX29mZiwgX19ucC50aG91c2FuZHNfc2VwKCksCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dyb3VwaW5nLmNfc3RyKCksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2dyb3VwaW5nLmNfc3RyKCkgKyBfX2dyb3VwaW5nLnNpemUoKSwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fd3MgKyBfX29mZiwgX193cyArIF9fbGVuKTsKICAgICAgICAg IF9fbGVuID0gX19wIC0gX193czI7CgogICAgICAgICAgX193cyA9IF9fd3MyOwogICAgICAgIH0K ICAgICAgcmV0dXJuIF9NX2luc2VydChfX3MsIF9faW8sIF9fZmlsbCwgX193cywgX19sZW4pOwog ICAgfQoKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAg ICBfT3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBfTV9pbnNlcnQo X091dEl0ZXIgX19zLCBpb3NfYmFzZSYgX19pbywgX0NoYXJUIF9fZmlsbCwgY29uc3QgX0NoYXJU KiBfX3dzLAogICAgICAgICAgICAgIGludCBfX2xlbikgY29uc3QKICAgIHsKICAgICAgdHlwZWRl ZiBjaGFyX3RyYWl0czxfQ2hhclQ+IF9fdHJhaXRzX3R5cGU7CgogICAgICBzdHJlYW1zaXplIF9f dyA9IF9faW8ud2lkdGgoKTsKICAgICAgX0NoYXJUKiBfX3dzMiA9IHN0YXRpY19jYXN0PF9DaGFy VCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiBfX3cpKTsKICAgICAgaWYg KF9fdyA+IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9fbGVuKSkKICAgICAgICB7CiAgICAgICAg ICBfX3BhZDxfQ2hhclQsIF9fdHJhaXRzX3R5cGU+OjpfU19wYWQoX19pbywgX19maWxsLCBfX3dz MiwgX193cywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBf X3csIF9fbGVuLCB0cnVlKTsKICAgICAgICAgIF9fbGVuID0gc3RhdGljX2Nhc3Q8aW50PihfX3cp OwoKICAgICAgICAgIF9fd3MgPSBfX3dzMjsKICAgICAgICB9CiAgICAgIF9faW8ud2lkdGgoMCk7 CgoKCiAgICAgIGZvciAoaW50IF9faiA9IDA7IF9faiA8IF9fbGVuOyArK19faiwgKytfX3MpCiAg ICAgICAgKl9fcyA9IF9fd3NbX19qXTsKICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBu dW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3Nf YmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwgYm9vbCBfX3YpIGNvbnN0CiAgICB7CiAgICAg IGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpZiAoKF9f ZmxhZ3MgJiBpb3NfYmFzZTo6Ym9vbGFscGhhKSA9PSAwKQogICAgICAgIHsKICAgICAgICAgIHVu c2lnbmVkIGxvbmcgX191diA9IF9fdjsKICAgICAgICAgIF9fcyA9IF9NX2NvbnZlcnRfaW50KF9f cywgX19pbywgX19maWxsLCAndScsIGNoYXIoKSwgX191dik7CiAgICAgICAgfQogICAgICBlbHNl CiAgICAgICAgewogICAgICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJUPiBfX3N0cmlu Z190eXBlOwogICAgICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgICAg IGNvbnN0IG51bXB1bmN0PF9DaGFyVD4mIF9fbnAgPSB1c2VfZmFjZXQ8bnVtcHVuY3Q8X0NoYXJU PiA+KF9fbG9jKTsKICAgICAgICAgIF9fc3RyaW5nX3R5cGUgX19uYW1lOwogICAgICAgICAgaWYg KF9fdikKICAgICAgICAgICAgX19uYW1lID0gX19ucC50cnVlbmFtZSgpOwogICAgICAgICAgZWxz ZQogICAgICAgICAgICBfX25hbWUgPSBfX25wLmZhbHNlbmFtZSgpOwogICAgICAgICAgX19zID0g X01faW5zZXJ0KF9fcywgX19pbywgX19maWxsLCBfX25hbWUuY19zdHIoKSwgX19uYW1lLnNpemUo KSk7CiAgICAgICAgfQogICAgICByZXR1cm4gX19zOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0No YXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lv LCBjaGFyX3R5cGUgX19maWxsLCBsb25nIF9fdikgY29uc3QKICAgIHsgcmV0dXJuIF9NX2NvbnZl cnRfaW50KF9fcywgX19pbywgX19maWxsLCAnZCcsIGNoYXIoKSwgX192KTsgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51 bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19i YXNlJiBfX2lvLCBjaGFyX3R5cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgX192 KSBjb25zdAogICAgeyByZXR1cm4gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2ZpbGwsICd1 JywgY2hhcigpLCBfX3YpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46Ogog ICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2IsIGNoYXJfdHlwZSBfX2ZpbGws IGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9f YiwgX19maWxsLCAnZCcsICdsJywgX192KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9PdXRJdGVyPgogICAgX091dEl0ZXIKICAgIG51bV9wdXQ8X0NoYXJULCBfT3V0 SXRlcj46OgogICAgZG9fcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5 cGUgX19maWxsLAogICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBfX3YpIGNvbnN0CiAgICB7 IHJldHVybiBfTV9jb252ZXJ0X2ludChfX3MsIF9faW8sIF9fZmlsbCwgJ3UnLCAnbCcsIF9fdik7 IH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBf T3V0SXRlcgogICAgbnVtX3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90 eXBlIF9fcywgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsIGRvdWJsZSBfX3YpIGNv bnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0KF9fcywgX19pbywgX19maWxsLCBjaGFy KCksIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRl cj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1 dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hhcl90eXBlIF9fZmlsbCwKICAgICAg ICAgICBsb25nIGRvdWJsZSBfX3YpIGNvbnN0CiAgICB7IHJldHVybiBfTV9jb252ZXJ0X2Zsb2F0 KF9fcywgX19pbywgX19maWxsLCAnTCcsIF9fdik7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICBudW1fcHV0PF9DaGFyVCwg X091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBpb3NfYmFzZSYgX19pbywgY2hh cl90eXBlIF9fZmlsbCwKICAgICAgICAgICBjb25zdCB2b2lkKiBfX3YpIGNvbnN0CiAgICB7CiAg ICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2ZsYWdzID0gX19pby5mbGFncygpOwogICAgICBpb3Nf YmFzZTo6Zm10ZmxhZ3MgX19mbXQgPSB+KGlvc19iYXNlOjpzaG93cG9zIHwgaW9zX2Jhc2U6OmJh c2VmaWVsZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgaW9zX2Jhc2U6OnVw cGVyY2FzZSB8IGlvc19iYXNlOjppbnRlcm5hbCk7CiAgICAgIF9faW8uZmxhZ3MoX19mbGFncyAm IF9fZm10IHwgKGlvc19iYXNlOjpoZXggfCBpb3NfYmFzZTo6c2hvd2Jhc2UpKTsKICAgICAgdHJ5 CiAgICAgICAgewogICAgICAgICAgX19zID0gX01fY29udmVydF9pbnQoX19zLCBfX2lvLCBfX2Zp bGwsICd1JywgY2hhcigpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVpbnRlcnBy ZXRfY2FzdDx1bnNpZ25lZCBsb25nPihfX3YpKTsKICAgICAgICAgIF9faW8uZmxhZ3MoX19mbGFn cyk7CiAgICAgICAgfQogICAgICBjYXRjaCAoLi4uKQogICAgICAgIHsKICAgICAgICAgIF9faW8u ZmxhZ3MoX19mbGFncyk7CiAgICAgICAgICB0aHJvdzsKICAgICAgICB9CiAgICAgIHJldHVybiBf X3M7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9Jbkl0ZXI+ CiAgICBfSW5JdGVyCiAgICBtb25leV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXQo aXRlcl90eXBlIF9fYmVnLCBpdGVyX3R5cGUgX19lbmQsIGJvb2wgX19pbnRsLCBpb3NfYmFzZSYg X19pbywKICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIGxvbmcgZG91YmxlJiBf X3VuaXRzKSBjb25zdAogICAgewogICAgICBzdHJpbmdfdHlwZSBfX3N0cjsKICAgICAgX19iZWcg PSB0aGlzLT5kb19nZXQoX19iZWcsIF9fZW5kLCBfX2ludGwsIF9faW8sIF9fZXJyLCBfX3N0cik7 CgogICAgICBjb25zdCBpbnQgX19uID0gbnVtZXJpY19saW1pdHM8bG9uZyBkb3VibGU+OjpkaWdp dHMxMDsKICAgICAgY2hhciogX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxs b2NhKF9fbikpOwogICAgICBjb25zdCBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAg ICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4g PihfX2xvYyk7CiAgICAgIGNvbnN0IF9DaGFyVCogX193Y3MgPSBfX3N0ci5jX3N0cigpOwogICAg ICBfX2N0eXBlLm5hcnJvdyhfX3djcywgX193Y3MgKyBfX3N0ci5zaXplKCkgKyAxLCBjaGFyKCks IF9fY3MpOwogICAgICBfX2NvbnZlcnRfdG9fdihfX2NzLCBfX3VuaXRzLCBfX2VyciwgX1NfY19s b2NhbGUpOwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIKICAgIG1vbmV5X2dldDxfQ2hhclQs IF9Jbkl0ZXI+OjoKICAgIGRvX2dldChpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwg Ym9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLAogICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRl JiBfX2Vyciwgc3RyaW5nX3R5cGUmIF9fdW5pdHMpIGNvbnN0CiAgICB7CgogICAgICB0eXBlZGVm IG1vbmV5cHVuY3Q8X0NoYXJULCB0cnVlPiBfX21vbmV5X3RydWU7CiAgICAgIHR5cGVkZWYgbW9u ZXlwdW5jdDxfQ2hhclQsIGZhbHNlPiBfX21vbmV5X2ZhbHNlOwogICAgICB0eXBlZGVmIG1vbmV5 X2Jhc2U6OnBhcnQgcGFydDsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBzdHJpbmdfdHlwZTo6c2l6 ZV90eXBlIHNpemVfdHlwZTsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9j KCk7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19tb25leV90 cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNlX2ZhY2V0 PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYgX19jdHlw ZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKICAgICAgY29uc3QgbW9uZXlf YmFzZTo6cGF0dGVybiBfX3AgPSBfX2ludGwgPyBfX21wdC5uZWdfZm9ybWF0KCkKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5uZWdfZm9ybWF0KCk7 CgogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3Bvc19zaWduID1fX2ludGwgPyBfX21wdC5wb3Np dGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDog X19tcGYucG9zaXRpdmVfc2lnbigpOwogICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX25lZ19zaWdu ID1fX2ludGwgPyBfX21wdC5uZWdhdGl2ZV9zaWduKCkKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwogICAgICBjb25zdCBj aGFyX3R5cGUgX19kID0gX19pbnRsID8gX19tcHQuZGVjaW1hbF9wb2ludCgpCiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAgICAgIGNv bnN0IGNoYXJfdHlwZSBfX3NlcCA9IF9faW50bCA/IF9fbXB0LnRob3VzYW5kc19zZXAoKQogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi50aG91c2FuZHNfc2VwKCk7 CgogICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n KCkgOiBfX21wZi5ncm91cGluZygpOwoKCiAgICAgIHN0cmluZ190eXBlIF9fc2lnbjsKCiAgICAg IHN0cmluZyBfX2dyb3VwaW5nX3RtcDsKCiAgICAgIGludCBfX3NlcF9wb3MgPSAwOwoKICAgICAg Ym9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CgogICAgICBib29sIF9fdGVzdGRlY2ZvdW5kID0gZmFs c2U7CgoKICAgICAgc3RyaW5nX3R5cGUgX190ZW1wX3VuaXRzOwoKICAgICAgY2hhcl90eXBlIF9f YyA9ICpfX2JlZzsKICAgICAgY2hhcl90eXBlIF9fZW9mID0gc3RhdGljX2Nhc3Q8Y2hhcl90eXBl PihjaGFyX3RyYWl0czxjaGFyX3R5cGU+Ojplb2YoKSk7CiAgICAgIGZvciAoaW50IF9faSA9IDA7 IF9fYmVnICE9IF9fZW5kICYmIF9faSA8IDQgJiYgX190ZXN0dmFsaWQ7ICsrX19pKQogICAgICAg IHsKICAgICAgICAgIHBhcnQgX193aGljaCA9IHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFtf X2ldKTsKICAgICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAo X19pby5mbGFncygpICYgaW9zX2Jhc2U6OnNob3diYXNlCiAgICAgICAgICAgICAgICAgICAgICB8 fCBfX2kgPCAyIHx8IF9fc2lnbi5zaXplKCkgPiAxCiAgICAgICAgICAgICAgICAgICAgICB8fCAo KHN0YXRpY19jYXN0PHBhcnQ+KF9fcC5maWVsZFszXSkgIT0gbW9uZXlfYmFzZTo6bm9uZSkKICAg ICAgICAgICAgICAgICAgICAgICAgICAmJiBfX2kgPT0gMikpCiAgICAgICAgICAgICAgICAgICAg ewoKCgoKCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJpbmdfdHlwZSBfX3N5bWJvbCA9 IF9faW50bCA/IF9fbXB0LmN1cnJfc3ltYm9sKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5jdXJyX3N5bWJvbCgpOwogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX19zeW1ib2wuc2l6ZSgpOwogICAg ICAgICAgICAgICAgICAgICAgc2l6ZV90eXBlIF9faiA9IDA7CiAgICAgICAgICAgICAgICAgICAg ICB3aGlsZSAoX19iZWcgIT0gX19lbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBf X2ogPCBfX2xlbiAmJiBfX3N5bWJvbFtfX2pdID09IF9fYykKICAgICAgICAgICAgICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgKytfX2o7CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCgogICAg ICAgICAgICAgICAgICAgICAgaWYgKF9faiAhPSBfX2xlbiAmJiAoX19pby5mbGFncygpICYgaW9z X2Jhc2U6OnNob3diYXNlKSkKICAgICAgICAgICAgICAgICAgICAgICAgX190ZXN0dmFsaWQgPSBm YWxzZTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAg ICAgICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzaWduOgoKICAgICAgICAgICAgICAgICAgaWYg KF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fbmVnX3NpZ24uc2l6ZSgpKQogICAgICAgICAgICAgICAg ICB7CgogICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19wb3Nfc2lnblswXSkKICAgICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19wb3Nf c2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChfX2MgPT0gX19uZWdf c2lnblswXSkKICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAg X19zaWduID0gX19uZWdfc2lnbjsKICAgICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19f YmVnKTsKICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICBlbHNlCiAg ICAgICAgICAgICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9fcG9zX3NpZ24uc2l6ZSgpICYmIF9fYyA9 PSBfX3Bvc19zaWduWzBdKQogICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg ICAgIF9fc2lnbiA9IF9fcG9zX3NpZ247CiAgICAgICAgICAgICAgICAgICAgICBfX2MgPSAqKCsr X19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgZWxzZSBpZiAo X19uZWdfc2lnbi5zaXplKCkgJiYgX19jID09IF9fbmVnX3NpZ25bMF0pCiAgICAgICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICAgICAgX19zaWduID0gX19uZWdfc2lnbjsKICAgICAg ICAgICAgICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6 dmFsdWU6CgoKICAgICAgICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9IF9fZW5kCiAgICAgICAg ICAgICAgICAgICAgICAgICAmJiAoX19jdHlwZS5pcyhjdHlwZV9iYXNlOjpkaWdpdCwgX19jKQog ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IChfX2MgPT0gX19kICYmICFfX3Rlc3RkZWNm b3VuZCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19zZXApKQogICAg ICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX2MgPT0gX19kKQog ICAgICAgICAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgX19ncm91 cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3NlcF9wb3MgPSAwOwogICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVz dGRlY2ZvdW5kID0gdHJ1ZTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoX19jID09IF9fc2VwKQogICAgICAgICAgICAgICAgICAgICAgICB7 CiAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg ICAgICAgICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19n cm91cGluZ190bXAgKz0gc3RhdGljX2Nhc3Q8Y2hhcj4oX19zZXBfcG9zKTsKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgX19zZXBfcG9zID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFs c2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg ICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAg ICAgICBfX3RlbXBfdW5pdHMgKz0gX19jOwogICAgICAgICAgICAgICAgICAgICAgICAgICsrX19z ZXBfcG9zOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICBf X2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlIG1vbmV5X2Jhc2U6OnNwYWNlOgogICAgICAgICAg ICAgICAgY2FzZSBtb25leV9iYXNlOjpub25lOgoKICAgICAgICAgICAgICAgICAgaWYgKF9faSAh PSAzKQogICAgICAgICAgICAgICAgICAgIHdoaWxlIChfX2JlZyAhPSBfX2VuZAogICAgICAgICAg ICAgICAgICAgICAgICAgICAmJiBfX2N0eXBlLmlzKGN0eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQog ICAgICAgICAgICAgICAgICAgICAgX19jID0gKigrK19fYmVnKTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgfQoKCiAgICAgIGlmIChfX3NpZ24uc2l6 ZSgpID4gMSkKICAgICAgICB7CiAgICAgICAgICBzaXplX3R5cGUgX19sZW4gPSBfX3NpZ24uc2l6 ZSgpOwogICAgICAgICAgc2l6ZV90eXBlIF9faSA9IDE7CiAgICAgICAgICBmb3IgKDsgX19jICE9 IF9fZW9mICYmIF9faSA8IF9fbGVuOyArK19faSkKICAgICAgICAgICAgd2hpbGUgKF9fYmVnICE9 IF9fZW5kICYmIF9fYyAhPSBfX3NpZ25bX19pXSkKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwoKICAgICAgICAgIGlmIChfX2kgIT0gX19sZW4pCiAgICAgICAgICAgIF9fdGVzdHZhbGlk ID0gZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIHdoaWxlIChfX3RlbXBfdW5pdHNbMF0gPT0gX19j dHlwZS53aWRlbignMCcpKQogICAgICAgIF9fdGVtcF91bml0cy5lcmFzZShfX3RlbXBfdW5pdHMu YmVnaW4oKSk7CgogICAgICBpZiAoX19zaWduLnNpemUoKSAmJiBfX3NpZ24gPT0gX19uZWdfc2ln bikKICAgICAgICBfX3RlbXBfdW5pdHMuaW5zZXJ0KF9fdGVtcF91bml0cy5iZWdpbigpLCBfX2N0 eXBlLndpZGVuKCctJykpOwoKCiAgICAgIGlmIChfX2dyb3VwaW5nLnNpemUoKSAmJiBfX2dyb3Vw aW5nX3RtcC5zaXplKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKCFfX3ZlcmlmeV9ncm91cGlu ZyhfX2dyb3VwaW5nLCBfX2dyb3VwaW5nX3RtcCkpCiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0g ZmFsc2U7CiAgICAgICAgfQoKCiAgICAgIGlmIChfX2MgPT0gX19lb2YpCiAgICAgICAgX19lcnIg fD0gaW9zX2Jhc2U6OmVvZmJpdDsKCgogICAgICBpZiAoIV9fdGVzdHZhbGlkIHx8ICFfX3RlbXBf dW5pdHMuc2l6ZSgpKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICBl bHNlCgogICAgICAgIF9fdGVtcF91bml0cy5zd2FwKF9fdW5pdHMpOwoKICAgICAgcmV0dXJuIF9f YmVnOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9PdXRJdGVy PgogICAgX091dEl0ZXIKICAgIG1vbmV5X3B1dDxfQ2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19w dXQoaXRlcl90eXBlIF9fcywgYm9vbCBfX2ludGwsIGlvc19iYXNlJiBfX2lvLCBjaGFyX3R5cGUg X19maWxsLAogICAgICAgICAgIGxvbmcgZG91YmxlIF9fdW5pdHMpIGNvbnN0CiAgICB7CiAgICAg IGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGNvbnN0IGN0eXBlPF9D aGFyVD4mIF9fY3R5cGUgPSB1c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKCgogICAg ICBpbnQgX19jc19zaXplID0gNjQ7CiAgICAgIGNoYXIqIF9fY3MgPSBzdGF0aWNfY2FzdDxjaGFy Kj4oX19idWlsdGluX2FsbG9jYShfX2NzX3NpemUpKTsKICAgICAgaW50IF9fbGVuID0gX19jb252 ZXJ0X2Zyb21fdihfX2NzLCBfX2NzX3NpemUsICIlLjAxTGYiLCBfX3VuaXRzLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9TX2NfbG9jYWxlKTsKCiAgICAgIGlmIChfX2xlbiA+ PSBfX2NzX3NpemUpCiAgICAgICAgewogICAgICAgICAgX19jc19zaXplID0gX19sZW4gKyAxOwog ICAgICAgICAgX19jcyA9IHN0YXRpY19jYXN0PGNoYXIqPihfX2J1aWx0aW5fYWxsb2NhKF9fY3Nf c2l6ZSkpOwogICAgICAgICAgX19sZW4gPSBfX2NvbnZlcnRfZnJvbV92KF9fY3MsIF9fY3Nfc2l6 ZSwgIiUuMDFMZiIsIF9fdW5pdHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg X1NfY19sb2NhbGUpOwogICAgICAgIH0KCgoKCgoKCiAgICAgIF9DaGFyVCogX193cyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX2NzX3Np emUpKTsKICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgX19sZW4sIF9fd3MpOwogICAg ICBzdHJpbmdfdHlwZSBfX2RpZ2l0cyhfX3dzKTsKICAgICAgcmV0dXJuIHRoaXMtPmRvX3B1dChf X3MsIF9faW50bCwgX19pbywgX19maWxsLCBfX2RpZ2l0cyk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgbW9uZXlf cHV0PF9DaGFyVCwgX091dEl0ZXI+OjoKICAgIGRvX3B1dChpdGVyX3R5cGUgX19zLCBib29sIF9f aW50bCwgaW9zX2Jhc2UmIF9faW8sIGNoYXJfdHlwZSBfX2ZpbGwsCiAgICAgICAgICAgY29uc3Qg c3RyaW5nX3R5cGUmIF9fZGlnaXRzKSBjb25zdAogICAgewogICAgICB0eXBlZGVmIHR5cGVuYW1l IHN0cmluZ190eXBlOjpzaXplX3R5cGUgc2l6ZV90eXBlOwogICAgICB0eXBlZGVmIG1vbmV5X2Jh c2U6OnBhcnQgcGFydDsKCiAgICAgIGNvbnN0IGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7 CiAgICAgIGNvbnN0IHNpemVfdHlwZSBfX3dpZHRoID0gc3RhdGljX2Nhc3Q8c2l6ZV90eXBlPihf X2lvLndpZHRoKCkpOwoKCiAgICAgIHR5cGVkZWYgbW9uZXlwdW5jdDxfQ2hhclQsIHRydWU+IF9f bW9uZXlfdHJ1ZTsKICAgICAgdHlwZWRlZiBtb25leXB1bmN0PF9DaGFyVCwgZmFsc2U+IF9fbW9u ZXlfZmFsc2U7CiAgICAgIGNvbnN0IF9fbW9uZXlfdHJ1ZSYgX19tcHQgPSB1c2VfZmFjZXQ8X19t b25leV90cnVlPihfX2xvYyk7CiAgICAgIGNvbnN0IF9fbW9uZXlfZmFsc2UmIF9fbXBmID0gdXNl X2ZhY2V0PF9fbW9uZXlfZmFsc2U+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwoKCgogICAgICBjb25z dCBjaGFyX3R5cGUqIF9fYmVnID0gX19kaWdpdHMuZGF0YSgpOwogICAgICBjb25zdCBjaGFyX3R5 cGUqIF9fZW5kID0gX19iZWcgKyBfX2RpZ2l0cy5zaXplKCk7CiAgICAgIG1vbmV5X2Jhc2U6OnBh dHRlcm4gX19wOwogICAgICBzdHJpbmdfdHlwZSBfX3NpZ247CiAgICAgIGlmICgqX19iZWcgIT0g X19jdHlwZS53aWRlbignLScpKQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f bXB0LnBvc19mb3JtYXQoKSA6IF9fbXBmLnBvc19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9 X19pbnRsID8gX19tcHQucG9zaXRpdmVfc2lnbigpIDogX19tcGYucG9zaXRpdmVfc2lnbigpOwog ICAgICAgIH0KICAgICAgZWxzZQogICAgICAgIHsKICAgICAgICAgIF9fcCA9IF9faW50bCA/IF9f bXB0Lm5lZ19mb3JtYXQoKSA6IF9fbXBmLm5lZ19mb3JtYXQoKTsKICAgICAgICAgIF9fc2lnbiA9 X19pbnRsID8gX19tcHQubmVnYXRpdmVfc2lnbigpIDogX19tcGYubmVnYXRpdmVfc2lnbigpOwog ICAgICAgICAgKytfX2JlZzsKICAgICAgICB9CgoKICAgICAgX19lbmQgPSBfX2N0eXBlLnNjYW5f bm90KGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2JlZywgX19lbmQpOwogICAgICBpZiAoX19iZWcgIT0g X19lbmQpCiAgICAgICAgewoKCgogICAgICAgICAgc3RyaW5nX3R5cGUgX19yZXM7CiAgICAgICAg ICBzdHJpbmdfdHlwZSBfX3ZhbHVlOwogICAgICAgICAgY29uc3Qgc3RyaW5nX3R5cGUgX19zeW1i b2wgPSBfX2ludGwgPyBfX21wdC5jdXJyX3N5bWJvbCgpCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBmLmN1cnJfc3ltYm9sKCk7CgoKICAgICAgICAg IGNvbnN0IGludCBfX2ZyYWMgPSBfX2ludGwgPyBfX21wdC5mcmFjX2RpZ2l0cygpCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogX19tcGYuZnJhY19kaWdpdHMoKTsKICAgICAg ICAgIGlmIChfX2ZyYWMgPiAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgY2hh cl90eXBlIF9fZCA9IF9faW50bCA/IF9fbXB0LmRlY2ltYWxfcG9pbnQoKQogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiBfX21wZi5kZWNpbWFsX3BvaW50KCk7CiAg ICAgICAgICAgICAgaWYgKF9fZW5kIC0gX19iZWcgPj0gX19mcmFjKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX3ZhbHVlID0gc3RyaW5nX3R5cGUoX19lbmQgLSBfX2ZyYWMs IF9fZW5kKTsKICAgICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigp LCBfX2QpOwogICAgICAgICAgICAgICAgICBfX2VuZCAtPSBfX2ZyYWM7CiAgICAgICAgICAgICAg ICB9CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewoKICAgICAgICAgICAgICAg ICAgX192YWx1ZSA9IHN0cmluZ190eXBlKF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAg IGludCBfX3BhZGRlYyA9IF9fZnJhYyAtIChfX2VuZCAtIF9fYmVnKTsKICAgICAgICAgICAgICAg ICAgY2hhcl90eXBlIF9femVybyA9IF9fY3R5cGUud2lkZW4oJzAnKTsKICAgICAgICAgICAgICAg ICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX3BhZGRlYywgX196ZXJvKTsKICAg ICAgICAgICAgICAgICAgX192YWx1ZS5pbnNlcnQoX192YWx1ZS5iZWdpbigpLCBfX2QpOwogICAg ICAgICAgICAgICAgICBfX2JlZyA9IF9fZW5kOwogICAgICAgICAgICAgICAgfQogICAgICAgICAg ICB9CgoKCiAgICAgICAgICBpZiAoX19iZWcgIT0gX19lbmQpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBjb25zdCBzdHJpbmcgX19ncm91cGluZyA9IF9faW50bCA/IF9fbXB0Lmdyb3VwaW5n KCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA6IF9fbXBm Lmdyb3VwaW5nKCk7CiAgICAgICAgICAgICAgaWYgKF9fZ3JvdXBpbmcuc2l6ZSgpKQogICAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUgX19zZXAgPSBfX2lu dGwgPyBfX21wdC50aG91c2FuZHNfc2VwKCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIDogX19tcGYudGhvdXNhbmRzX3NlcCgpOwogICAgICAgICAgICAg ICAgICBjb25zdCBjaGFyKiBfX2diZWcgPSBfX2dyb3VwaW5nLmNfc3RyKCk7CiAgICAgICAgICAg ICAgICAgIGNvbnN0IGNoYXIqIF9fZ2VuZCA9IF9fZ2JlZyArIF9fZ3JvdXBpbmcuc2l6ZSgpOwog ICAgICAgICAgICAgICAgICBjb25zdCBpbnQgX19uID0gKF9fZW5kIC0gX19iZWcpICogMjsKICAg ICAgICAgICAgICAgICAgX0NoYXJUKiBfX3dzMiA9CiAgICAgICAgICAgICAgICAgICAgc3RhdGlj X2Nhc3Q8X0NoYXJUKj4oX19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbikpOwog ICAgICAgICAgICAgICAgICBfQ2hhclQqIF9fd3NfZW5kID0gX19hZGRfZ3JvdXBpbmcoX193czIs IF9fc2VwLCBfX2diZWcsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX2dlbmQsIF9fYmVnLCBfX2VuZCk7CiAgICAgICAgICAgICAgICAgIF9fdmFs dWUuaW5zZXJ0KDAsIF9fd3MyLCBfX3dzX2VuZCAtIF9fd3MyKTsKICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBfX3ZhbHVlLmluc2VydCgwLCBzdHJp bmdfdHlwZShfX2JlZywgX19lbmQpKTsKICAgICAgICAgICAgfQoKCiAgICAgICAgICBpb3NfYmFz ZTo6Zm10ZmxhZ3MgX19mID0gX19pby5mbGFncygpICYgaW9zX2Jhc2U6OmFkanVzdGZpZWxkOwog ICAgICAgICAgc2l6ZV90eXBlIF9fbGVuID0gX192YWx1ZS5zaXplKCkgKyBfX3NpZ24uc2l6ZSgp OwogICAgICAgICAgX19sZW4gKz0gKF9faW8uZmxhZ3MoKSAmIGlvc19iYXNlOjpzaG93YmFzZSkg PyBfX3N5bWJvbC5zaXplKCkgOiAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpcGFkID0gX19mID09 IGlvc19iYXNlOjppbnRlcm5hbCAmJiBfX2xlbiA8IF9fd2lkdGg7CgoKICAgICAgICAgIGZvciAo aW50IF9faSA9IDA7IF9faSA8IDQ7ICsrX19pKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAg cGFydCBfX3doaWNoID0gc3RhdGljX2Nhc3Q8cGFydD4oX19wLmZpZWxkW19faV0pOwogICAgICAg ICAgICAgIHN3aXRjaCAoX193aGljaCkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg IGNhc2UgbW9uZXlfYmFzZTo6c3ltYm9sOgogICAgICAgICAgICAgICAgICBpZiAoX19pby5mbGFn cygpICYgaW9zX2Jhc2U6OnNob3diYXNlKQogICAgICAgICAgICAgICAgICAgIF9fcmVzICs9IF9f c3ltYm9sOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9u ZXlfYmFzZTo6c2lnbjoKCgoKICAgICAgICAgICAgICAgICAgaWYgKF9fc2lnbi5zaXplKCkpCiAg ICAgICAgICAgICAgICAgICAgX19yZXMgKz0gX19zaWduWzBdOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6dmFsdWU6CiAgICAgICAgICAg ICAgICAgIF9fcmVzICs9IF9fdmFsdWU7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSBtb25leV9iYXNlOjpzcGFjZToKCgoKICAgICAgICAgICAgICAgICAgaWYg KF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3RyaW5nX3R5cGUoX193 aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAg ICAgICAgICAgX19yZXMgKz0gX19jdHlwZS53aWRlbihfX2ZpbGwpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgbW9uZXlfYmFzZTo6bm9uZToKICAgICAgICAg ICAgICAgICAgaWYgKF9fdGVzdGlwYWQpCiAgICAgICAgICAgICAgICAgICAgX19yZXMgKz0gc3Ry aW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoKCiAgICAgICAgICBpZiAoX19zaWdu LnNpemUoKSA+IDEpCiAgICAgICAgICAgIF9fcmVzICs9IHN0cmluZ190eXBlKF9fc2lnbi5iZWdp bigpICsgMSwgX19zaWduLmVuZCgpKTsKCgogICAgICAgICAgX19sZW4gPSBfX3Jlcy5zaXplKCk7 CiAgICAgICAgICBpZiAoX193aWR0aCA+IF9fbGVuKQogICAgICAgICAgICB7CiAgICAgICAgICAg ICAgaWYgKF9fZiA9PSBpb3NfYmFzZTo6bGVmdCkKCiAgICAgICAgICAgICAgICBfX3Jlcy5hcHBl bmQoX193aWR0aCAtIF9fbGVuLCBfX2ZpbGwpOwogICAgICAgICAgICAgIGVsc2UKCiAgICAgICAg ICAgICAgICBfX3Jlcy5pbnNlcnQoMCwgc3RyaW5nX3R5cGUoX193aWR0aCAtIF9fbGVuLCBfX2Zp bGwpKTsKICAgICAgICAgICAgICBfX2xlbiA9IF9fd2lkdGg7CiAgICAgICAgICAgIH0KCgogICAg ICAgICAgZm9yIChzaXplX3R5cGUgX19qID0gMDsgX19qIDwgX19sZW47ICsrX19qLCArK19fcykK ICAgICAgICAgICAgKl9fcyA9IF9fcmVzW19fal07CiAgICAgICAgfQogICAgICBfX2lvLndpZHRo KDApOwogICAgICByZXR1cm4gX19zOwogICAgfQoKCgoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdGltZV9iYXNlOjpkYXRlb3JkZXIKICAgIHRpbWVf Z2V0PF9DaGFyVCwgX0luSXRlcj46OmRvX2RhdGVfb3JkZXIoKSBjb25zdAogICAgeyByZXR1cm4g dGltZV9iYXNlOjpub19vcmRlcjsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9Jbkl0ZXI+CiAgICB2b2lkCiAgICB0aW1lX2dldDxfQ2hhclQsIF9Jbkl0ZXI+OjoKICAg IF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChpdGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5k LCBpb3NfYmFzZSYgX19pbywKICAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9z dGF0ZSYgX19lcnIsIHRtKiBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IF9D aGFyVCogX19mb3JtYXQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0 bG9jKCk7CiAgICAgIF9fdGltZXB1bmN0PF9DaGFyVD4gY29uc3QmIF9fdHAgPSB1c2VfZmFjZXQ8 X190aW1lcHVuY3Q8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgY29uc3QgY3R5cGU8X0NoYXJUPiYg X19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxfQ2hhclQ+ID4oX19sb2MpOwogICAgICBzaXplX3Qg X19sZW4gPSBjaGFyX3RyYWl0czxfQ2hhclQ+OjpsZW5ndGgoX19mb3JtYXQpOwoKICAgICAgZm9y IChzaXplX3QgX19pID0gMDsgX19iZWcgIT0gX19lbmQgJiYgX19pIDwgX19sZW4gJiYgIV9fZXJy OyArK19faSkKICAgICAgICB7CiAgICAgICAgICBjaGFyIF9fYyA9IF9fZm9ybWF0W19faV07CiAg ICAgICAgICBpZiAoX19jID09ICclJykKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2Mg PSBfX2Zvcm1hdFsrK19faV07CiAgICAgICAgICAgICAgY2hhciBfX21vZCA9IDA7CiAgICAgICAg ICAgICAgaW50IF9fbWVtID0gMDsKICAgICAgICAgICAgICBpZiAoX19jID09ICdFJyB8fCBfX2Mg PT0gJ08nKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX21vZCA9IF9fYzsK ICAgICAgICAgICAgICAgICAgX19jID0gX19mb3JtYXRbKytfX2ldOwogICAgICAgICAgICAgICAg fQogICAgICAgICAgICAgIHN3aXRjaCAoX19jKQogICAgICAgICAgICAgICAgewogICAgICAgICAg ICAgICAgICBjb25zdCBjaGFyKiBfX2NzOwogICAgICAgICAgICAgICAgICBfQ2hhclQgX193Y3Nb MTBdOwogICAgICAgICAgICAgICAgY2FzZSAnYSc6CgogICAgICAgICAgICAgICAgICBjb25zdCBj aGFyX3R5cGUqIF9fZGF5czFbN107CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fZGF5c19hYmJy ZXZpYXRlZChfX2RheXMxKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVn LCBfX2VuZCwgX190bS0+dG1fd2RheSwgX19kYXlzMSwgNywKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICdBJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXlz Mls3XTsKICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXlzKF9fZGF5czIpOwogICAgICAgICAg ICAgICAgICBfTV9leHRyYWN0X25hbWUoX19iZWcsIF9fZW5kLCBfX3RtLT50bV93ZGF5LCBfX2Rh eXMyLCA3LAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2gnOgogICAgICAgICAgICAg ICAgY2FzZSAnYic6CgogICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fbW9udGhz MVsxMl07CiAgICAgICAgICAgICAgICAgIF9fdHAuX01fbW9udGhzX2FiYnJldmlhdGVkKF9fbW9u dGhzMSk7CiAgICAgICAgICAgICAgICAgIF9NX2V4dHJhY3RfbmFtZShfX2JlZywgX19lbmQsIF9f dG0tPnRtX21vbiwgX19tb250aHMxLCAxMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fZXJyKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBjYXNl ICdCJzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19tb250aHMyWzEyXTsK ICAgICAgICAgICAgICAgICAgX190cC5fTV9tb250aHMoX19tb250aHMyKTsKICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbW9uLCBfX21vbnRo czIsIDEyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19lcnIpOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ2MnOgoKICAgICAgICAgICAg ICAgICAgY29uc3QgY2hhcl90eXBlKiBfX2R0WzJdOwogICAgICAgICAgICAgICAgICBfX3RwLl9N X2RhdGVfdGltZV9mb3JtYXRzKF9fZHQpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3Zp YV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIF9fZHRbMF0pOwogICAgICAgICAgICAgICAgICBicmVh azsKICAgICAgICAgICAgICAgIGNhc2UgJ2QnOgoKICAgICAgICAgICAgICAgICAgX01fZXh0cmFj dF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9tZGF5LCAxLCAzMSwgMiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAgICBi cmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ0QnOgoKICAgICAgICAgICAgICAgICAgX19jcyA9 ICIlbS8lZC8leSI7CiAgICAgICAgICAgICAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyAr IDksIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVn LCBfX2VuZCwgX19pbywgX19lcnIsIF9fdG0sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3djcyk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgY2FzZSAnSCc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywgX19l bmQsIF9fdG0tPnRtX2hvdXIsIDAsIDIzLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg ICAgICAgY2FzZSAnSSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2JlZywg X19lbmQsIF9fdG0tPnRtX2hvdXIsIDEsIDEyLCAyLAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg ICAgICAgICAgY2FzZSAnbSc6CgogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X251bShfX2Jl ZywgX19lbmQsIF9fbWVtLCAxLCAxMiwgMiwgX19jdHlwZSwKICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19lcnIpOwogICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAg ICAgICAgICAgICAgIF9fdG0tPnRtX21vbiA9IF9fbWVtIC0gMTsKICAgICAgICAgICAgICAgICAg YnJlYWs7CiAgICAgICAgICAgICAgICBjYXNlICdNJzoKCiAgICAgICAgICAgICAgICAgIF9NX2V4 dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bS0+dG1fbWluLCAwLCA1OSwgMiwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAgICAgICAgICAgICAg ICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ24nOgogICAgICAgICAgICAgICAgICBpZiAo X19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKSA9PSAnXG4nKQogICAgICAgICAgICAgICAgICAgICsr X19iZWc7CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAg ICAgICBjYXNlICdSJzoKCiAgICAgICAgICAgICAgICAgIF9fY3MgPSAiJUg6JU0iOwogICAgICAg ICAgICAgICAgICBfX2N0eXBlLndpZGVuKF9fY3MsIF9fY3MgKyA2LCBfX3djcyk7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX193Y3MpOwog ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1MnOgoKICAgICAg ICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV9zZWMsIDAs IDU5LCAyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7 CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAndCc6CiAgICAg ICAgICAgICAgICAgIGlmIChfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApID09ICdcdCcpCiAgICAg ICAgICAgICAgICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAg ICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgIGJyZWFr OwogICAgICAgICAgICAgICAgY2FzZSAnVCc6CgogICAgICAgICAgICAgICAgICBfX2NzID0gIiVI OiVNOiVTIjsKICAgICAgICAgICAgICAgICAgX19jdHlwZS53aWRlbihfX2NzLCBfX2NzICsgOSwg X193Y3MpOwogICAgICAgICAgICAgICAgICBfTV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9f ZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fd2NzKTsKICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICBj YXNlICd4JzoKCiAgICAgICAgICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19kYXRlc1syXTsK ICAgICAgICAgICAgICAgICAgX190cC5fTV9kYXRlX2Zvcm1hdHMoX19kYXRlcyk7CiAgICAgICAg ICAgICAgICAgIF9NX2V4dHJhY3RfdmlhX2Zvcm1hdChfX2JlZywgX19lbmQsIF9faW8sIF9fZXJy LCBfX3RtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19kYXRlc1sw XSk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgY2FzZSAnWCc6Cgog ICAgICAgICAgICAgICAgICBjb25zdCBjaGFyX3R5cGUqIF9fdGltZXNbMl07CiAgICAgICAgICAg ICAgICAgIF9fdHAuX01fdGltZV9mb3JtYXRzKF9fdGltZXMpOwogICAgICAgICAgICAgICAgICBf TV9leHRyYWN0X3ZpYV9mb3JtYXQoX19iZWcsIF9fZW5kLCBfX2lvLCBfX2VyciwgX190bSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fdGltZXNbMF0pOwogICAgICAg ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ3knOgoKICAgICAgICAgICAg ICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtLT50bV95ZWFyLCAwLCA5OSwg MiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jdHlwZSwgX19lcnIpOwogICAg ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNhc2UgJ1knOgoKICAgICAgICAg ICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX21lbSwgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCksIDQsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUsIF9fZXJyKTsKICAgICAgICAg ICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0g X19tZW0gLSAxOTAwOwogICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgIGNh c2UgJ1onOgoKICAgICAgICAgICAgICAgICAgaWYgKF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6dXBw ZXIsICpfX2JlZykpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg aW50IF9fdG1wOwogICAgICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9uYW1lKF9fYmVnLCBf X2VuZCwgX190bXAsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX190aW1l cHVuY3Q8X0NoYXJUPjo6X1NfdGltZXpvbmVzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIDE0LCBfX2Vycik7CgoKICAgICAgICAgICAgICAgICAgICAgIGNoYXJfdHlwZSBf X2MgPSAqX19iZWc7CiAgICAgICAgICAgICAgICAgICAgICBpZiAoIV9fZXJyICYmIF9fdG1wID09 IDAKICAgICAgICAgICAgICAgICAgICAgICAgICAmJiAoX19jID09IF9fY3R5cGUud2lkZW4oJy0n KQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfX2MgPT0gX19jdHlwZS53aWRlbign KycpKSkKICAgICAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgICAg IF9NX2V4dHJhY3RfbnVtKF9fYmVnLCBfX2VuZCwgX190bXAsIDAsIDIzLCAyLAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2N0eXBlLCBfX2Vycik7CiAgICAgICAg ICAgICAgICAgICAgICAgICAgX01fZXh0cmFjdF9udW0oX19iZWcsIF9fZW5kLCBfX3RtcCwgMCwg NTksIDIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fY3R5cGUs IF9fZXJyKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAg X19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICAgICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgoKICAgICAgICAgICAgICAgICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB7CgogICAgICAgICAgICAg ICAgICBpZiAoX19jID09IF9fY3R5cGUubmFycm93KCpfX2JlZywgMCkpCiAgICAgICAgICAgICAg ICAgICAgKytfX2JlZzsKICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAgICAgICAgICAgICAgfQogICAgICAgIH0K ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAg dm9pZAogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X251bShp dGVyX3R5cGUmIF9fYmVnLCBpdGVyX3R5cGUmIF9fZW5kLCBpbnQmIF9fbWVtYmVyLAogICAgICAg ICAgICAgICAgICAgaW50IF9fbWluLCBpbnQgX19tYXgsIHNpemVfdCBfX2xlbiwKICAgICAgICAg ICAgICAgICAgIGNvbnN0IGN0eXBlPF9DaGFyVD4mIF9fY3R5cGUsCiAgICAgICAgICAgICAgICAg ICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAgIHNpemVfdCBfX2kg PSAwOwogICAgICBzdHJpbmcgX19kaWdpdHM7CiAgICAgIGJvb2wgX190ZXN0dmFsaWQgPSB0cnVl OwogICAgICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICB3aGlsZSAoX19iZWcgIT0gX19l bmQgJiYgX19pIDwgX19sZW4KICAgICAgICAgICAgICYmIF9fY3R5cGUuaXMoY3R5cGVfYmFzZTo6 ZGlnaXQsIF9fYykpCiAgICAgICAgewogICAgICAgICAgX19kaWdpdHMgKz0gX19jdHlwZS5uYXJy b3coX19jLCAwKTsKICAgICAgICAgIF9fYyA9ICooKytfX2JlZyk7CiAgICAgICAgICArK19faTsK ICAgICAgICB9CiAgICAgIGlmIChfX2kgPT0gX19sZW4pCiAgICAgICAgewogICAgICAgICAgaW50 IF9fdmFsdWUgPSBhdG9pKF9fZGlnaXRzLmNfc3RyKCkpOwogICAgICAgICAgaWYgKF9fbWluIDw9 IF9fdmFsdWUgJiYgX192YWx1ZSA8PSBfX21heCkKICAgICAgICAgICAgX19tZW1iZXIgPSBfX3Zh bHVlOwogICAgICAgICAgZWxzZQogICAgICAgICAgICBfX3Rlc3R2YWxpZCA9IGZhbHNlOwogICAg ICAgIH0KICAgICAgZWxzZQogICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgIGlmICgh X190ZXN0dmFsaWQpCiAgICAgICAgX19lcnIgfD0gaW9zX2Jhc2U6OmZhaWxiaXQ7CiAgICB9CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgdm9pZAog ICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBfTV9leHRyYWN0X25hbWUoaXRlcl90 eXBlJiBfX2JlZywgaXRlcl90eXBlJiBfX2VuZCwgaW50JiBfX21lbWJlciwKICAgICAgICAgICAg ICAgICAgICBjb25zdCBfQ2hhclQqKiBfX25hbWVzLCBzaXplX3QgX19pbmRleGxlbiwKICAgICAg ICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIpIGNvbnN0CiAgICB7CiAgICAg IHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBpbnQqIF9f bWF0Y2hlcyA9IHN0YXRpY19jYXN0PGludCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKGludCkg KiBfX2luZGV4bGVuKSk7CiAgICAgIHNpemVfdCBfX25tYXRjaGVzID0gMDsKICAgICAgc2l6ZV90 IF9fcG9zID0gMDsKICAgICAgYm9vbCBfX3Rlc3R2YWxpZCA9IHRydWU7CiAgICAgIGNvbnN0IGNo YXJfdHlwZSogX19uYW1lOwoKICAgICAgY2hhcl90eXBlIF9fYyA9ICpfX2JlZzsKCiAgICAgIGZv ciAoc2l6ZV90IF9faTEgPSAwOyBfX2kxIDwgX19pbmRleGxlbjsgKytfX2kxKQogICAgICAgIGlm IChfX2MgPT0gX19uYW1lc1tfX2kxXVswXSkKICAgICAgICAgIF9fbWF0Y2hlc1tfX25tYXRjaGVz KytdID0gX19pMTsKCiAgICAgIHdoaWxlKF9fbm1hdGNoZXMgPiAxKQogICAgICAgIHsKCiAgICAg ICAgICBzaXplX3QgX19taW5sZW4gPSAxMDsKICAgICAgICAgIGZvciAoc2l6ZV90IF9faTIgPSAw OyBfX2kyIDwgX19ubWF0Y2hlczsgKytfX2kyKQogICAgICAgICAgICBfX21pbmxlbiA9IG1pbihf X21pbmxlbiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgX190cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fbmFtZXNbX19tYXRjaGVzW19faTJdXSkpOwoKICAgICAgICAgIGlmIChfX3BvcyA8IF9fbWlu bGVuICYmIF9fYmVnICE9IF9fZW5kKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgKytfX3Bv czsKICAgICAgICAgICAgICBfX2MgPSAqKCsrX19iZWcpOwogICAgICAgICAgICAgIGZvciAoc2l6 ZV90IF9faTMgPSAwOyBfX2kzIDwgX19ubWF0Y2hlczsgKytfX2kzKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1tfX2kzXV07CiAg ICAgICAgICAgICAgICAgIGlmIChfX25hbWVbX19wb3NdICE9IF9fYykKICAgICAgICAgICAgICAg ICAgICBfX21hdGNoZXNbX19pM10gPSBfX21hdGNoZXNbLS1fX25tYXRjaGVzXTsKICAgICAgICAg ICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICBicmVhazsK ICAgICAgICB9CgogICAgICBpZiAoX19ubWF0Y2hlcyA9PSAxKQogICAgICAgIHsKCiAgICAgICAg ICBfX25hbWUgPSBfX25hbWVzW19fbWF0Y2hlc1swXV07CiAgICAgICAgICBjb25zdCBzaXplX3Qg X19sZW4gPSBfX3RyYWl0c190eXBlOjpsZW5ndGgoX19uYW1lKTsKICAgICAgICAgIHdoaWxlIChf X3BvcyA8IF9fbGVuICYmIF9fYmVnICE9IF9fZW5kICYmIF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVn KQogICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwoKICAgICAgICAgIGlmIChfX2xlbiA9PSBf X3BvcykKICAgICAgICAgICAgX19tZW1iZXIgPSBfX21hdGNoZXNbMF07CiAgICAgICAgICBlbHNl CiAgICAgICAgICAgIF9fdGVzdHZhbGlkID0gZmFsc2U7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgX190ZXN0dmFsaWQgPSBmYWxzZTsKICAgICAgaWYgKCFfX3Rlc3R2YWxpZCkKICAgICAg ICBfX2VyciB8PSBpb3NfYmFzZTo6ZmFpbGJpdDsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUg X0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJU LCBfSW5JdGVyPjo6CiAgICBkb19nZXRfdGltZShpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBf X2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYg X19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193Y3NbM107CiAgICAg IGNvbnN0IGNoYXIqIF9fY3MgPSAiJVgiOwogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxv YygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBl PF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywgX19jcyArIDMsIF9f d2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2VuZCwgX19pbywgX19l cnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAgIF9fZXJy IHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgIH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0luSXRlcgogICAgdGlt ZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfZGF0ZShpdGVyX3R5cGUgX19iZWcs IGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAgewogICAgICBfQ2hhclQgX193 Y3NbM107CiAgICAgIGNvbnN0IGNoYXIqIF9fY3MgPSAiJXgiOwogICAgICBsb2NhbGUgX19sb2Mg PSBfX2lvLmdldGxvYygpOwogICAgICBjdHlwZTxfQ2hhclQ+IGNvbnN0JiBfX2N0eXBlID0gdXNl X2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CiAgICAgIF9fY3R5cGUud2lkZW4oX19jcywg X19jcyArIDMsIF9fd2NzKTsKICAgICAgX01fZXh0cmFjdF92aWFfZm9ybWF0KF9fYmVnLCBfX2Vu ZCwgX19pbywgX19lcnIsIF9fdG0sIF9fd2NzKTsKICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQog ICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgogICAgX0lu SXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfd2Vla2RheShp dGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ewogICAgICB0eXBlZGVmIGNoYXJfdHJhaXRzPF9DaGFyVD4gX190cmFpdHNfdHlwZTsKICAgICAg bG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2MoKTsKICAgICAgX190aW1lcHVuY3Q8X0NoYXJUPiBj b25zdCYgX190cCA9IHVzZV9mYWNldDxfX3RpbWVwdW5jdDxfQ2hhclQ+ID4oX19sb2MpOwogICAg ICBjb25zdCBjaGFyX3R5cGUqIF9fZGF5c1s3XTsKICAgICAgX190cC5fTV9kYXlzX2FiYnJldmlh dGVkKF9fZGF5cyk7CiAgICAgIGludCBfX3RtcHdkYXk7CiAgICAgIF9NX2V4dHJhY3RfbmFtZShf X2JlZywgX19lbmQsIF9fdG1wd2RheSwgX19kYXlzLCA3LCBfX2Vycik7CgoKCgoKCgogICAgICBp ZiAoIV9fZXJyKQogICAgICAgIHsKICAgICAgICAgIHNpemVfdCBfX3BvcyA9IF9fdHJhaXRzX3R5 cGU6Omxlbmd0aChfX2RheXNbX190bXB3ZGF5XSk7CiAgICAgICAgICBfX3RwLl9NX2RheXMoX19k YXlzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19kYXlzW19fdG1wd2Rh eV07CiAgICAgICAgICBpZiAoX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAgICAgICAgICAgIHsK CiAgICAgICAgICAgICAgY29uc3Qgc2l6ZV90IF9fbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3Ro KF9fbmFtZSk7CiAgICAgICAgICAgICAgd2hpbGUgKF9fcG9zIDwgX19sZW4gJiYgX19iZWcgIT0g X19lbmQKICAgICAgICAgICAgICAgICAgICAgJiYgX19uYW1lW19fcG9zXSA9PSAqX19iZWcpCiAg ICAgICAgICAgICAgICArK19fYmVnLCArK19fcG9zOwogICAgICAgICAgICAgIGlmIChfX2xlbiAh PSBfX3BvcykKICAgICAgICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwogICAg ICAgICAgICB9CiAgICAgICAgICBpZiAoIV9fZXJyKQogICAgICAgICAgICBfX3RtLT50bV93ZGF5 ID0gX190bXB3ZGF5OwogICAgICAgIH0KICAgICAgaWYgKF9fYmVnID09IF9fZW5kKQogICAgICAg IF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2JlZzsKICAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX0luSXRlcj4KICAgIF9Jbkl0ZXIK ICAgIHRpbWVfZ2V0PF9DaGFyVCwgX0luSXRlcj46OgogICAgZG9fZ2V0X21vbnRobmFtZShpdGVy X3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwKICAgICAgICAgICAgICAgICAgICAgaW9zX2Jh c2UmIF9faW8sIGlvc19iYXNlOjppb3N0YXRlJiBfX2VyciwgdG0qIF9fdG0pIGNvbnN0CiAgICB7 CiAgICAgIHR5cGVkZWYgY2hhcl90cmFpdHM8X0NoYXJUPiBfX3RyYWl0c190eXBlOwogICAgICBs b2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNv bnN0JiBfX3RwID0gdXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CiAgICAg IGNvbnN0IGNoYXJfdHlwZSogX19tb250aHNbMTJdOwogICAgICBfX3RwLl9NX21vbnRoc19hYmJy ZXZpYXRlZChfX21vbnRocyk7CiAgICAgIGludCBfX3RtcG1vbjsKICAgICAgX01fZXh0cmFjdF9u YW1lKF9fYmVnLCBfX2VuZCwgX190bXBtb24sIF9fbW9udGhzLCAxMiwgX19lcnIpOwoKCgoKCgoK ICAgICAgaWYgKCFfX2VycikKICAgICAgICB7CiAgICAgICAgICBzaXplX3QgX19wb3MgPSBfX3Ry YWl0c190eXBlOjpsZW5ndGgoX19tb250aHNbX190bXBtb25dKTsKICAgICAgICAgIF9fdHAuX01f bW9udGhzKF9fbW9udGhzKTsKICAgICAgICAgIGNvbnN0IGNoYXJfdHlwZSogX19uYW1lID0gX19t b250aHNbX190bXBtb25dOwogICAgICAgICAgaWYgKF9fbmFtZVtfX3Bvc10gPT0gKl9fYmVnKQog ICAgICAgICAgICB7CgogICAgICAgICAgICAgIGNvbnN0IHNpemVfdCBfX2xlbiA9IF9fdHJhaXRz X3R5cGU6Omxlbmd0aChfX25hbWUpOwogICAgICAgICAgICAgIHdoaWxlIChfX3BvcyA8IF9fbGVu ICYmIF9fYmVnICE9IF9fZW5kCiAgICAgICAgICAgICAgICAgICAgICYmIF9fbmFtZVtfX3Bvc10g PT0gKl9fYmVnKQogICAgICAgICAgICAgICAgKytfX2JlZywgKytfX3BvczsKICAgICAgICAgICAg ICBpZiAoX19sZW4gIT0gX19wb3MpCiAgICAgICAgICAgICAgICBfX2VyciB8PSBpb3NfYmFzZTo6 ZmFpbGJpdDsKICAgICAgICAgICAgfQogICAgICAgICAgaWYgKCFfX2VycikKICAgICAgICAgICAg X190bS0+dG1fbW9uID0gX190bXBtb247CiAgICAgICAgfQoKICAgICAgaWYgKF9fYmVnID09IF9f ZW5kKQogICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjplb2ZiaXQ7CiAgICAgIHJldHVybiBfX2Jl ZzsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfSW5JdGVyPgog ICAgX0luSXRlcgogICAgdGltZV9nZXQ8X0NoYXJULCBfSW5JdGVyPjo6CiAgICBkb19nZXRfeWVh cihpdGVyX3R5cGUgX19iZWcsIGl0ZXJfdHlwZSBfX2VuZCwgaW9zX2Jhc2UmIF9faW8sCiAgICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsIHRtKiBfX3RtKSBjb25zdAogICAg ewogICAgICBsb2NhbGUgX19sb2MgPSBfX2lvLmdldGxvYygpOwogICAgICBjb25zdCBjdHlwZTxf Q2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9DaGFyVD4gPihfX2xvYyk7CgogICAg ICBjaGFyX3R5cGUgX19jID0gKl9fYmVnOwogICAgICBzaXplX3QgX19pID0gMDsKICAgICAgc3Ry aW5nIF9fZGlnaXRzOwogICAgICB3aGlsZSAoX19pIDwgNCAmJiBfX2JlZyAhPSBfX2VuZCAmJiBf X2N0eXBlLmlzKGN0eXBlX2Jhc2U6OmRpZ2l0LCBfX2MpKQogICAgICAgIHsKICAgICAgICAgIF9f ZGlnaXRzICs9IF9fY3R5cGUubmFycm93KF9fYywgMCk7CiAgICAgICAgICBfX2MgPSAqKCsrX19i ZWcpOwogICAgICAgICAgKytfX2k7CiAgICAgICAgfQogICAgICBpZiAoX19pID09IDIgfHwgX19p ID09IDQpCiAgICAgICAgewogICAgICAgICAgbG9uZyBfX2w7CiAgICAgICAgICBfX2NvbnZlcnRf dG9fdihfX2RpZ2l0cy5jX3N0cigpLCBfX2wsIF9fZXJyLCBfU19jX2xvY2FsZSk7CiAgICAgICAg ICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0KSAmJiBfX2wgPD0gMjE0NzQ4MzY0NykK ICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fbCA9IF9faSA9PSAyID8gX19sIDogX19sIC0g MTkwMDsKICAgICAgICAgICAgICBfX3RtLT50bV95ZWFyID0gc3RhdGljX2Nhc3Q8aW50PihfX2wp OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19lcnIgfD0gaW9z X2Jhc2U6OmZhaWxiaXQ7CiAgICAgIGlmIChfX2JlZyA9PSBfX2VuZCkKICAgICAgICBfX2VyciB8 PSBpb3NfYmFzZTo6ZW9mYml0OwogICAgICByZXR1cm4gX19iZWc7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX091dEl0ZXI+CiAgICBfT3V0SXRlcgogICAgdGlt ZV9wdXQ8X0NoYXJULCBfT3V0SXRlcj46OgogICAgcHV0KGl0ZXJfdHlwZSBfX3MsIGlvc19iYXNl JiBfX2lvLCBjaGFyX3R5cGUsIGNvbnN0IHRtKiBfX3RtLAogICAgICAgIGNvbnN0IF9DaGFyVCog X19iZWcsIGNvbnN0IF9DaGFyVCogX19lbmQpIGNvbnN0CiAgICB7CiAgICAgIGxvY2FsZSBfX2xv YyA9IF9faW8uZ2V0bG9jKCk7CiAgICAgIGN0eXBlPF9DaGFyVD4gY29uc3QmIF9fY3R5cGUgPSB1 c2VfZmFjZXQ8Y3R5cGU8X0NoYXJUPiA+KF9fbG9jKTsKICAgICAgd2hpbGUgKF9fYmVnICE9IF9f ZW5kKQogICAgICAgIHsKICAgICAgICAgIGNoYXIgX19jID0gX19jdHlwZS5uYXJyb3coKl9fYmVn LCAwKTsKICAgICAgICAgICsrX19iZWc7CiAgICAgICAgICBpZiAoX19jID09ICclJykKICAgICAg ICAgICAgewogICAgICAgICAgICAgIGNoYXIgX19mb3JtYXQ7CiAgICAgICAgICAgICAgY2hhciBf X21vZCA9IDA7CiAgICAgICAgICAgICAgc2l6ZV90IF9fbGVuID0gMTsKICAgICAgICAgICAgICBf X2MgPSBfX2N0eXBlLm5hcnJvdygqX19iZWcsIDApOwogICAgICAgICAgICAgICsrX19iZWc7CiAg ICAgICAgICAgICAgaWYgKF9fYyA9PSAnRScgfHwgX19jID09ICdPJykKICAgICAgICAgICAgICAg IHsKICAgICAgICAgICAgICAgICAgX19tb2QgPSBfX2M7CiAgICAgICAgICAgICAgICAgIF9fZm9y bWF0ID0gX19jdHlwZS5uYXJyb3coKl9fYmVnLCAwKTsKICAgICAgICAgICAgICAgICAgKytfX2Jl ZzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICBf X2Zvcm1hdCA9IF9fYzsKICAgICAgICAgICAgICBfX3MgPSB0aGlzLT5kb19wdXQoX19zLCBfX2lv LCBjaGFyX3R5cGUoKSwgX190bSwgX19mb3JtYXQsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgKl9fcyA9IF9fYzsKICAgICAgICAgICAgICArK19fczsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuIF9fczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfT3V0SXRlcj4KICAgIF9PdXRJdGVyCiAgICB0aW1lX3B1dDxf Q2hhclQsIF9PdXRJdGVyPjo6CiAgICBkb19wdXQoaXRlcl90eXBlIF9fcywgaW9zX2Jhc2UmIF9f aW8sIGNoYXJfdHlwZSwgY29uc3QgdG0qIF9fdG0sCiAgICAgICAgICAgY2hhciBfX2Zvcm1hdCwg Y2hhciBfX21vZCkgY29uc3QKICAgIHsKICAgICAgbG9jYWxlIF9fbG9jID0gX19pby5nZXRsb2Mo KTsKICAgICAgY3R5cGU8X0NoYXJUPiBjb25zdCYgX19jdHlwZSA9IHVzZV9mYWNldDxjdHlwZTxf Q2hhclQ+ID4oX19sb2MpOwogICAgICBfX3RpbWVwdW5jdDxfQ2hhclQ+IGNvbnN0JiBfX3RwID0g dXNlX2ZhY2V0PF9fdGltZXB1bmN0PF9DaGFyVD4gPihfX2xvYyk7CgoKCiAgICAgIGNvbnN0IHNp emVfdCBfX21heGxlbiA9IDY0OwogICAgICBjaGFyX3R5cGUqIF9fcmVzID0KICAgICAgICBzdGF0 aWNfY2FzdDxjaGFyX3R5cGUqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihjaGFyX3R5cGUpICog X19tYXhsZW4pKTsKCgoKCgoKICAgICAgY2hhcl90eXBlIF9fZm10WzRdOwogICAgICBfX2ZtdFsw XSA9IF9fY3R5cGUud2lkZW4oJyUnKTsKICAgICAgaWYgKCFfX21vZCkKICAgICAgICB7CiAgICAg ICAgICBfX2ZtdFsxXSA9IF9fZm9ybWF0OwogICAgICAgICAgX19mbXRbMl0gPSBjaGFyX3R5cGUo KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICBfX2ZtdFsxXSA9IF9f bW9kOwogICAgICAgICAgX19mbXRbMl0gPSBfX2Zvcm1hdDsKICAgICAgICAgIF9fZm10WzNdID0g Y2hhcl90eXBlKCk7CiAgICAgICAgfQoKICAgICAgX190cC5fTV9wdXQoX19yZXMsIF9fbWF4bGVu LCBfX2ZtdCwgX190bSk7CgoKICAgICAgc2l6ZV90IF9fbGVuID0gY2hhcl90cmFpdHM8Y2hhcl90 eXBlPjo6bGVuZ3RoKF9fcmVzKTsKICAgICAgZm9yIChzaXplX3QgX19pID0gMDsgX19pIDwgX19s ZW47ICsrX19pLCArK19fcykKICAgICAgICAqX19zID0gX19yZXNbX19pXTsKICAgICAgcmV0dXJu IF9fczsKICAgIH0KCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBpbnQKICAgIGNv bGxhdGU8X0NoYXJUPjo6X01fY29tcGFyZShjb25zdCBfQ2hhclQqLCBjb25zdCBfQ2hhclQqKSBj b25zdAogICAgeyByZXR1cm4gMDsgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAg c2l6ZV90CiAgICBjb2xsYXRlPF9DaGFyVD46Ol9NX3RyYW5zZm9ybShfQ2hhclQqLCBjb25zdCBf Q2hhclQqLCBzaXplX3QpIGNvbnN0CiAgICB7IHJldHVybiAwOyB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVD4KICAgIGludAogICAgY29sbGF0ZTxfQ2hhclQ+OjoKICAgIGRvX2NvbXBhcmUo Y29uc3QgX0NoYXJUKiBfX2xvMSwgY29uc3QgX0NoYXJUKiBfX2hpMSwKICAgICAgICAgICAgICAg Y29uc3QgX0NoYXJUKiBfX2xvMiwgY29uc3QgX0NoYXJUKiBfX2hpMikgY29uc3QKICAgIHsKICAg ICAgY29uc3Qgc3RyaW5nX3R5cGUgX19vbmUoX19sbzEsIF9faGkxKTsKICAgICAgY29uc3Qgc3Ry aW5nX3R5cGUgX190d28oX19sbzIsIF9faGkyKTsKICAgICAgcmV0dXJuIF9NX2NvbXBhcmUoX19v bmUuY19zdHIoKSwgX190d28uY19zdHIoKSk7CiAgICB9CgogdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJUPgogICAgdHlwZW5hbWUgY29sbGF0ZTxfQ2hhclQ+OjpzdHJpbmdfdHlwZQogICAgY29sbGF0 ZTxfQ2hhclQ+OjoKICAgIGRvX3RyYW5zZm9ybShjb25zdCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9D aGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgc2l6ZV90IF9fbGVuID0gKF9faGkgLSBfX2xv KSAqIDI7CgogICAgICBfQ2hhclQqIF9fYyA9CiAgICAgICAgc3RhdGljX2Nhc3Q8X0NoYXJUKj4o X19idWlsdGluX2FsbG9jYShzaXplb2YoX0NoYXJUKSAqIF9fbGVuKSk7CiAgICAgIHNpemVfdCBf X3JlcyA9IF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fbGVuKTsKCiAgICAgIGlmIChfX3JlcyA+ PSBfX2xlbikKICAgICAgICB7CiAgICAgICAgICBfX2MgPQogICAgICAgICAgICBzdGF0aWNfY2Fz dDxfQ2hhclQqPihfX2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fcmVzICsgMSkp KTsKICAgICAgICAgIF9NX3RyYW5zZm9ybShfX2MsIF9fbG8sIF9fcmVzICsgMSk7CiAgICAgICAg fQogICAgICByZXR1cm4gc3RyaW5nX3R5cGUoX19jKTsKICAgIH0KCiB0ZW1wbGF0ZTx0eXBlbmFt ZSBfQ2hhclQ+CiAgICBsb25nCiAgICBjb2xsYXRlPF9DaGFyVD46OgogICAgZG9faGFzaChjb25z dCBfQ2hhclQqIF9fbG8sIGNvbnN0IF9DaGFyVCogX19oaSkgY29uc3QKICAgIHsKICAgICAgdW5z aWduZWQgbG9uZyBfX3ZhbCA9IDA7CiAgICAgIGZvciAoOyBfX2xvIDwgX19oaTsgKytfX2xvKQog ICAgICAgIF9fdmFsID0gKl9fbG8gKyAoKF9fdmFsIDw8IDcpIHwKICAgICAgICAgICAgICAgICAg ICAgICAoX192YWwgPj4gKG51bWVyaWNfbGltaXRzPHVuc2lnbmVkIGxvbmc+OjpkaWdpdHMgLSA3 KSkpOwogICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8bG9uZz4oX192YWwpOwogICAgfQoKCgoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICB2b2lkCiAgICBfX2NvbnZlcnRfdG9fdihjb25zdCBj aGFyKiBfX2luLCBfVHYmIF9fb3V0LCBpb3NfYmFzZTo6aW9zdGF0ZSYgX19lcnIsCiAgICAgICAg ICAgICAgICAgICBjb25zdCBfX2NfbG9jYWxlJiBfX2Nsb2MsIGludCBfX2Jhc2UgPSAxMCk7CgoK CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVHY+CiAgICBpbnQKICAgIF9fY29udmVydF9mcm9tX3Yo Y2hhciogX19vdXQsIGNvbnN0IGludCBfX3NpemUsIGNvbnN0IGNoYXIqIF9fZm10LAogICAgICAg ICAgICAgICAgICAgICBfVHYgX192LCBjb25zdCBfX2NfbG9jYWxlJiwgaW50IF9fcHJlYyA9IC0x KQogICAgewogICAgICBpbnQgX19yZXQ7CiAgICAgIGNoYXIqIF9fb2xkID0gc3RyZHVwKHNldGxv Y2FsZShfX0xDX0FMTCwgMCkpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsICJDIik7CiAgICAg IGlmIChfX3ByZWMgPj0gMCkKICAgICAgICBfX3JldCA9IHNucHJpbnRmKF9fb3V0LCBfX3NpemUs IF9fZm10LCBfX3ByZWMsIF9fdik7CiAgICAgIGVsc2UKICAgICAgICBfX3JldCA9IHNucHJpbnRm KF9fb3V0LCBfX3NpemUsIF9fZm10LCBfX3YpOwogICAgICBzZXRsb2NhbGUoX19MQ19BTEwsIF9f b2xkKTsKICAgICAgZnJlZShfX29sZCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KIyAyMDE5 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgc3RydWN0IF9f cGFkCiAgICB7CiAgICAgIHN0YXRpYyB2b2lkCiAgICAgIF9TX3BhZChpb3NfYmFzZSYgX19pbywg X0NoYXJUIF9fZmlsbCwgX0NoYXJUKiBfX25ld3MsCiAgICAgICAgICAgICBjb25zdCBfQ2hhclQq IF9fb2xkcywgY29uc3Qgc3RyZWFtc2l6ZSBfX25ld2xlbiwKICAgICAgICAgICAgIGNvbnN0IHN0 cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pOwogICAgfTsKCiAgdGVtcGxhdGU8 dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdm9pZAogICAgX19wYWQ8X0No YXJULCBfVHJhaXRzPjo6X1NfcGFkKGlvc19iYXNlJiBfX2lvLCBfQ2hhclQgX19maWxsLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9DaGFyVCogX19uZXdzLCBjb25zdCBfQ2hh clQqIF9fb2xkcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJl YW1zaXplIF9fbmV3bGVuLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0 IHN0cmVhbXNpemUgX19vbGRsZW4sIGNvbnN0IGJvb2wgX19udW0pCiAgICB7CiAgICAgIHNpemVf dCBfX3BsZW4gPSBzdGF0aWNfY2FzdDxzaXplX3Q+KF9fbmV3bGVuIC0gX19vbGRsZW4pOwogICAg ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkgKiBfX3BsZW4pKTsKICAgICAgX1RyYWl0czo6YXNzaWduKF9fcGFkcywg X19wbGVuLCBfX2ZpbGwpOwoKICAgICAgX0NoYXJUKiBfX2JlZzsKICAgICAgX0NoYXJUKiBfX2Vu ZDsKICAgICAgc2l6ZV90IF9fbW9kID0gMDsKICAgICAgc2l6ZV90IF9fYmVnbGVuOwogICAgICBp b3NfYmFzZTo6Zm10ZmxhZ3MgX19hZGp1c3QgPSBfX2lvLmZsYWdzKCkgJiBpb3NfYmFzZTo6YWRq dXN0ZmllbGQ7CgogICAgICBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmxlZnQpCiAgICAgICAg ewoKICAgICAgICAgIF9fYmVnID0gY29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMpOwogICAgICAg ICAgX19iZWdsZW4gPSBfX29sZGxlbjsKICAgICAgICAgIF9fZW5kID0gX19wYWRzOwogICAgICAg IH0KICAgICAgZWxzZSBpZiAoX19hZGp1c3QgPT0gaW9zX2Jhc2U6OmludGVybmFsICYmIF9fbnVt KQogICAgICAgIHsKCgoKICAgICAgICAgIGxvY2FsZSBfX2xvYyA9IF9faW8uZ2V0bG9jKCk7CiAg ICAgICAgICBjb25zdCBjdHlwZTxfQ2hhclQ+JiBfX2N0eXBlID0gdXNlX2ZhY2V0PGN0eXBlPF9D aGFyVD4gPihfX2xvYyk7CiAgICAgICAgICBjb25zdCBfQ2hhclQgX19taW51cyA9IF9fY3R5cGUu d2lkZW4oJy0nKTsKICAgICAgICAgIGNvbnN0IF9DaGFyVCBfX3BsdXMgPSBfX2N0eXBlLndpZGVu KCcrJyk7CiAgICAgICAgICBib29sIF9fdGVzdHNpZ24gPSBfVHJhaXRzOjplcShfX29sZHNbMF0s IF9fbWludXMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBfVHJhaXRzOjplcShfX29s ZHNbMF0sIF9fcGx1cyk7CgogICAgICAgICAgYm9vbCBfX3Rlc3RoZXggPSBfVHJhaXRzOjplcShf X2N0eXBlLndpZGVuKCcwJyksIF9fb2xkc1swXSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg JiYgKF9UcmFpdHM6OmVxKF9fY3R5cGUud2lkZW4oJ3gnKSwgX19vbGRzWzFdKQogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgfHwgX1RyYWl0czo6ZXEoX19jdHlwZS53aWRlbignWCcpLCBf X29sZHNbMV0pKTsKICAgICAgICAgIGlmIChfX3Rlc3RoZXgpCiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBfX25ld3NbMF0gPSBfX29sZHNbMF07CiAgICAgICAgICAgICAgX19uZXdzWzFdID0g X19vbGRzWzFdOwogICAgICAgICAgICAgIF9fbW9kICs9IDI7CiAgICAgICAgICAgICAgX19uZXdz ICs9IDI7CiAgICAgICAgICAgICAgX19iZWcgPSBfX3BhZHM7CiAgICAgICAgICAgICAgX19iZWds ZW4gPSBfX3BsZW47CiAgICAgICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9f b2xkcyArIF9fbW9kKTsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoX190ZXN0c2ln bikKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9UcmFpdHM6OmVxKChfX25ld3NbMF0gPSBf X29sZHNbMF0pLCBfX3BsdXMpID8gX19wbHVzIDogX19taW51czsKICAgICAgICAgICAgICArK19f bW9kOwogICAgICAgICAgICAgICsrX19uZXdzOwogICAgICAgICAgICAgIF9fYmVnID0gX19wYWRz OwogICAgICAgICAgICAgIF9fYmVnbGVuID0gX19wbGVuOwogICAgICAgICAgICAgIF9fZW5kID0g Y29uc3RfY2FzdDxfQ2hhclQqPihfX29sZHMgKyBfX21vZCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGVsc2UKICAgICAgICAgICAgewoKICAgICAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAg ICAgICAgICAgICBfX2JlZ2xlbiA9IF9fcGxlbjsKICAgICAgICAgICAgICBfX2VuZCA9IGNvbnN0 X2Nhc3Q8X0NoYXJUKj4oX19vbGRzKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxz ZQogICAgICAgIHsKCiAgICAgICAgICBfX2JlZyA9IF9fcGFkczsKICAgICAgICAgIF9fYmVnbGVu ID0gX19wbGVuOwogICAgICAgICAgX19lbmQgPSBjb25zdF9jYXN0PF9DaGFyVCo+KF9fb2xkcyk7 CiAgICAgICAgfQogICAgICBfVHJhaXRzOjpjb3B5KF9fbmV3cywgX19iZWcsIF9fYmVnbGVuKTsK ICAgICAgX1RyYWl0czo6Y29weShfX25ld3MgKyBfX2JlZ2xlbiwgX19lbmQsCiAgICAgICAgICAg ICAgICAgICAgICAgICAgX19uZXdsZW4gLSBfX2JlZ2xlbiAtIF9fbW9kKTsKICAgIH0KIyAyMTE0 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL2xvY2FsZV9mYWNldHMudGNjIiAzCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJUPgogICAgYm9vbAogICAgX192ZXJpZnlfZ3JvdXBpbmco Y29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVD4mIF9fZ3JvdXBpbmcsCiAgICAgICAgICAgICAgICAg ICAgICBiYXNpY19zdHJpbmc8X0NoYXJUPiYgX19ncm91cGluZ190bXApCiAgICB7CiAgICAgIGlu dCBfX2kgPSAwOwogICAgICBpbnQgX19qID0gMDsKICAgICAgY29uc3QgaW50IF9fbGVuID0gX19n cm91cGluZy5zaXplKCk7CiAgICAgIGNvbnN0IGludCBfX24gPSBfX2dyb3VwaW5nX3RtcC5zaXpl KCk7CiAgICAgIGJvb2wgX190ZXN0ID0gdHJ1ZTsKCgoKCiAgICAgIHdoaWxlIChfX3Rlc3QgJiYg X19pIDwgX19uIC0gMSkKICAgICAgICBmb3IgKF9faiA9IDA7IF9fdGVzdCAmJiBfX2ogPCBfX2xl biAmJiBfX2kgPCBfX24gLSAxOyArK19faiwrK19faSkKICAgICAgICAgIF9fdGVzdCAmPSBfX2dy b3VwaW5nW19fal0gPT0gX19ncm91cGluZ190bXBbX19uIC0gX19pIC0gMV07CgoKICAgICAgX19q ID09IF9fbGVuID8gX19qID0gMCA6IF9fajsKICAgICAgX190ZXN0ICY9IF9fZ3JvdXBpbmdbX19q XSA+PSBfX2dyb3VwaW5nX3RtcFtfX24gLSBfX2kgLSAxXTsKICAgICAgcmV0dXJuIF9fdGVzdDsK ICAgIH0KCgoKCgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQ+CiAgICBfQ2hhclQqCiAgICBf X2FkZF9ncm91cGluZyhfQ2hhclQqIF9fcywgX0NoYXJUIF9fc2VwLAogICAgICAgICAgICAgICAg ICAgY29uc3QgY2hhciogX19nYmVnLCBjb25zdCBjaGFyKiBfX2dlbmQsCiAgICAgICAgICAgICAg ICAgICBjb25zdCBfQ2hhclQqIF9fZmlyc3QsIGNvbnN0IF9DaGFyVCogX19sYXN0KQogICAgewog ICAgICBpZiAoX19sYXN0IC0gX19maXJzdCA+ICpfX2diZWcpCiAgICAgICAgewogICAgICAgICAg X19zID0gX19hZGRfZ3JvdXBpbmcoX19zLCBfX3NlcCwKICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIChfX2diZWcgKyAxID09IF9fZ2VuZCA/IF9fZ2JlZyA6IF9fZ2JlZyArIDEpLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX19nZW5kLCBfX2ZpcnN0LCBfX2xhc3QgLSAqX19n YmVnKTsKICAgICAgICAgIF9fZmlyc3QgPSBfX2xhc3QgLSAqX19nYmVnOwogICAgICAgICAgKl9f cysrID0gX19zZXA7CiAgICAgICAgfQogICAgICBkbwogICAgICAgICpfX3MrKyA9ICpfX2ZpcnN0 Kys7CiAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCk7CiAgICAgIHJldHVybiBfX3M7CiAg ICB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PGNoYXIsIGZhbHNlPjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdDxjaGFyLCB0cnVlPjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgbW9uZXlwdW5jdF9ieW5hbWU8Y2hhciwgZmFsc2U+OwogIGV4dGVybiB0 ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTxjaGFyLCB0cnVlPjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgbW9uZXlfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25l eV9wdXQ8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3Q8d2NoYXJfdCwg ZmFsc2U+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0PHdjaGFyX3QsIHRydWU+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leXB1bmN0X2J5bmFtZTx3Y2hhcl90LCBmYWxz ZT47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG1vbmV5cHVuY3RfYnluYW1lPHdjaGFyX3QsIHRy dWU+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtb25leV9nZXQ8d2NoYXJfdD47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIG1vbmV5X3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgbnVtcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFt ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDxjaGFyPjsKICBleHRlcm4g dGVtcGxhdGUgY2xhc3MgbnVtX3B1dDxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVt cHVuY3Q8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIG51bXB1bmN0X2J5bmFtZTx3 Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbnVtX2dldDx3Y2hhcl90PjsKICBleHRl cm4gdGVtcGxhdGUgY2xhc3MgbnVtX3B1dDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgX190aW1lcHVuY3Q8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfcHV0PGNo YXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dF9ieW5hbWU8Y2hhcj47CiAgZXh0 ZXJuIHRlbXBsYXRlIGNsYXNzIHRpbWVfZ2V0PGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFz cyB0aW1lX2dldF9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIF9fdGltZXB1 bmN0PHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyB0aW1lX3B1dDx3Y2hhcl90PjsK ICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgdGltZV9wdXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVy biB0ZW1wbGF0ZSBjbGFzcyB0aW1lX2dldDx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xh c3MgdGltZV9nZXRfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNz YWdlczxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBtZXNzYWdlczx3Y2hhcl90PjsKICBleHRlcm4gdGVt cGxhdGUgY2xhc3MgbWVzc2FnZXNfYnluYW1lPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBj bGFzcyBjdHlwZV9ieW5hbWU8Y2hhcj47CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGN0eXBlX2J5 bmFtZTx3Y2hhcl90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5hbWU8Y2hh ciwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29kZWN2dF9ieW5h bWU8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29s bGF0ZTxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgY29sbGF0ZV9ieW5hbWU8Y2hhcj47 CiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNzIGNvbGxhdGU8d2NoYXJfdD47CiAgZXh0ZXJuIHRlbXBs YXRlIGNsYXNzIGNvbGxhdGVfYnluYW1lPHdjaGFyX3Q+OwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IGNvZGVjdnQ8Y2hhciwgY2hhciwgbWJzdGF0ZV90PiYKICAgIHVzZV9mYWNldDxjb2Rl Y3Z0PGNoYXIsIGNoYXIsIG1ic3RhdGVfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPGNoYXI+JgogICAgdXNlX2ZhY2V0PGNvbGxhdGU8Y2hh cj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBudW1wdW5j dDxjaGFyPiYKICAgIHVzZV9mYWNldDxudW1wdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9wdXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8 bnVtX3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNv bnN0IG51bV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8bnVtX2dldDxjaGFyPiA+KGNvbnN0IGxv Y2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgdHJ1 ZT4mCiAgICB1c2VfZmFjZXQ8bW9uZXlwdW5jdDxjaGFyLCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYp OwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+Jgog ICAgdXNlX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhciwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PG1vbmV5X3B1dDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAg IGNvbnN0IG1vbmV5X2dldDxjaGFyPiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8Y2hhcj4gPihj b25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3RpbWVwdW5jdDxj aGFyPiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PGNoYXI+JgogICAgdXNlX2ZhY2V0 PHRpbWVfcHV0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Y29uc3QgdGltZV9nZXQ8Y2hhcj4mCiAgICB1c2VfZmFjZXQ8dGltZV9nZXQ8Y2hhcj4gPihjb25z dCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBtZXNzYWdlczxjaGFyPiYK ICAgIHVzZV9mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4g dGVtcGxhdGUKICAgIGNvbnN0IGNvZGVjdnQ8d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiYKICAg IHVzZV9mYWNldDxjb2RlY3Z0PHdjaGFyX3QsIGNoYXIsIG1ic3RhdGVfdD4gPihsb2NhbGUgY29u c3QmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBjb2xsYXRlPHdjaGFyX3Q+JgogICAg dXNlX2ZhY2V0PGNvbGxhdGU8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBjb25zdCBudW1wdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxudW1wdW5j dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0 IG51bV9wdXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFjZXQ8bnVtX3B1dDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IG51bV9nZXQ8d2NoYXJfdD4m CiAgICB1c2VfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgdHJ1ZT4mCiAgICB1c2Vf ZmFjZXQ8bW9uZXlwdW5jdDx3Y2hhcl90LCB0cnVlPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGNvbnN0IG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+JgogICAgdXNl X2ZhY2V0PG1vbmV5cHVuY3Q8d2NoYXJfdCwgZmFsc2U+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4 dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgbW9uZXlfcHV0PHdjaGFyX3Q+JgogICAgdXNlX2ZhY2V0 PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUK ICAgIGNvbnN0IG1vbmV5X2dldDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtb25leV9nZXQ8d2No YXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBjb25zdCBfX3Rp bWVwdW5jdDx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxfX3RpbWVwdW5jdDx3Y2hhcl90PiA+KGNv bnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGNvbnN0IHRpbWVfcHV0PHdjaGFy X3Q+JgogICAgdXNlX2ZhY2V0PHRpbWVfcHV0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7Cgog IGV4dGVybiB0ZW1wbGF0ZQogICAgY29uc3QgdGltZV9nZXQ8d2NoYXJfdD4mCiAgICB1c2VfZmFj ZXQ8dGltZV9nZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBjb25zdCBtZXNzYWdlczx3Y2hhcl90PiYKICAgIHVzZV9mYWNldDxtZXNzYWdlczx3Y2hh cl90PiA+KGNvbnN0IGxvY2FsZSYpOwoKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBo YXNfZmFjZXQ8Y3R5cGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRl CiAgICBib29sCiAgICBoYXNfZmFjZXQ8Y29kZWN2dDxjaGFyLCBjaGFyLCBtYnN0YXRlX3Q+ID4o Y29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0 PGNvbGxhdGU8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBi b29sCiAgICBoYXNfZmFjZXQ8bnVtcHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0 ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX3B1dDxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxudW1f Z2V0PGNoYXI+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog ICAgaGFzX2ZhY2V0PG1vbmV5cHVuY3Q8Y2hhcj4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bW9uZXlfcHV0PGNoYXI+ID4oY29uc3Qg bG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG1vbmV5 X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxfX3RpbWVwdW5jdDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRl cm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1lX3B1dDxjaGFyPiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDx0aW1l X2dldDxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wK ICAgIGhhc19mYWNldDxtZXNzYWdlczxjaGFyPiA+KGNvbnN0IGxvY2FsZSYpOwoKIGV4dGVybiB0 ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGN0eXBlPHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PGNvZGVjdnQ8 d2NoYXJfdCwgY2hhciwgbWJzdGF0ZV90PiA+KGNvbnN0IGxvY2FsZSYpOwoKICBleHRlcm4gdGVt cGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxjb2xsYXRlPHdjaGFyX3Q+ID4oY29uc3QgbG9j YWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAogICAgaGFzX2ZhY2V0PG51bXB1bmN0 PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAgYm9vbAog ICAgaGFzX2ZhY2V0PG51bV9wdXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJu IHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8bnVtX2dldDx3Y2hhcl90PiA+KGNvbnN0 IGxvY2FsZSYpOwoKICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25l eXB1bmN0PHdjaGFyX3Q+ID4oY29uc3QgbG9jYWxlJik7CgogIGV4dGVybiB0ZW1wbGF0ZQogICAg Ym9vbAogICAgaGFzX2ZhY2V0PG1vbmV5X3B1dDx3Y2hhcl90PiA+KGNvbnN0IGxvY2FsZSYpOwoK ICBleHRlcm4gdGVtcGxhdGUKICAgIGJvb2wKICAgIGhhc19mYWNldDxtb25leV9nZXQ8d2NoYXJf dD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNf ZmFjZXQ8X190aW1lcHVuY3Q8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRl bXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9wdXQ8d2NoYXJfdD4gPihjb25zdCBs b2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29sCiAgICBoYXNfZmFjZXQ8dGltZV9n ZXQ8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKCiAgZXh0ZXJuIHRlbXBsYXRlCiAgICBib29s CiAgICBoYXNfZmFjZXQ8bWVzc2FnZXM8d2NoYXJfdD4gPihjb25zdCBsb2NhbGUmKTsKfQojIDQ3 ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9sb2NhbGUiIDIgMwojIDM4ICIvdXNyL2xvY2Fs L2luY2x1ZGUvYysrLzMuMi9iaXRzL2lzdHJlYW0udGNjIiAyIDMKIyAxICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9vc3RyZWFtIiAxIDMKIyA0NCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8z LjIvb3N0cmVhbSIgMwoKCgpuYW1lc3BhY2Ugc3RkCnsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgY2xhc3MgYmFzaWNfb3N0cmVhbSA6IHZpcnR1YWwg cHVibGljIGJhc2ljX2lvczxfQ2hhclQsIF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAg ICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0 czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6cG9z X3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6b2ZmX3R5cGUg b2ZmX3R5cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQsIF9UcmFpdHM+IF9fc3RyZWFtYnVmX3R5cGU7CiAg ICAgIHR5cGVkZWYgYmFzaWNfaW9zPF9DaGFyVCwgX1RyYWl0cz4gX19pb3NfdHlwZTsKICAgICAg dHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5cGU7CiAg ICAgIHR5cGVkZWYgb3N0cmVhbWJ1Zl9pdGVyYXRvcjxfQ2hhclQsIF9UcmFpdHM+IF9fb3N0cmVh bWJ1Zl9pdGVyOwogICAgICB0eXBlZGVmIG51bV9wdXQ8X0NoYXJULCBfX29zdHJlYW1idWZfaXRl cj4gX19udW1wdXRfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw ZTsKCgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19vc3RyZWFtKF9fc3RyZWFtYnVmX3R5cGUq IF9fc2IpCiAgICAgIHsgdGhpcy0+aW5pdChfX3NiKTsgfQoKICAgICAgdmlydHVhbAogICAgICB+ YmFzaWNfb3N0cmVhbSgpIHsgfQoKCiAgICAgIGNsYXNzIHNlbnRyeTsKICAgICAgZnJpZW5kIGNs YXNzIHNlbnRyeTsKCgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoX19v c3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUmKSk7CgogICAgICBfX29zdHJlYW1f dHlwZSYKICAgICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSk7 CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3Bm KSAoaW9zX2Jhc2UmKSk7CgoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwo bG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWdu ZWQgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoYm9v bCBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoc2hvcnQgX19u KQogICAgICB7CiAgICAgICAgaW9zX2Jhc2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3Mo KSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7CiAgICAgICAgaWYgKF9fZm10ICYgaW9zX2Jhc2U6Om9j dCB8fCBfX2ZtdCAmIGlvc19iYXNlOjpoZXgpCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0 b3I8PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPgogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHN0YXRpY19jYXN0PHVuc2lnbmVkIHNob3J0PihfX24pKSk7CiAgICAgICAgZWxz ZQogICAgICAgICAgcmV0dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8bG9uZz4oX19u KSk7CiAgICAgIH0KCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBvcGVyYXRvcjw8KHVuc2ln bmVkIHNob3J0IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNfY2Fz dDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPDwoaW50IF9fbikKICAgICAgewogICAgICAgIGlvc19iYXNlOjpmbXRmbGFncyBfX2Zt dCA9IHRoaXMtPmZsYWdzKCkgJiBpb3NfYmFzZTo6YmFzZWZpZWxkOwogICAgICAgIGlmIChfX2Zt dCAmIGlvc19iYXNlOjpvY3QgfHwgX19mbXQgJiBpb3NfYmFzZTo6aGV4KQogICAgICAgICAgcmV0 dXJuIHRoaXMtPm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8dW5zaWduZWQgbG9uZz4KICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1bnNpZ25lZCBpbnQ+KF9fbikp KTsKICAgICAgICBlbHNlCiAgICAgICAgICByZXR1cm4gdGhpcy0+b3BlcmF0b3I8PChzdGF0aWNf Y2FzdDxsb25nPihfX24pKTsKICAgICAgfQoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIG9w ZXJhdG9yPDwodW5zaWduZWQgaW50IF9fbikKICAgICAgeyByZXR1cm4gdGhpcy0+b3BlcmF0b3I8 PChzdGF0aWNfY2FzdDx1bnNpZ25lZCBsb25nPihfX24pKTsgfQoKCiAgICAgIF9fb3N0cmVhbV90 eXBlJgogICAgICBvcGVyYXRvcjw8KGxvbmcgbG9uZyBfX24pOwoKICAgICAgX19vc3RyZWFtX3R5 cGUmCiAgICAgIG9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbik7CgoKICAgICAgX19v c3RyZWFtX3R5cGUmCiAgICAgIG9wZXJhdG9yPDwoZG91YmxlIF9fZik7CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChmbG9hdCBfX2YpCiAgICAgIHsgcmV0dXJuIHRoaXMt Pm9wZXJhdG9yPDwoc3RhdGljX2Nhc3Q8ZG91YmxlPihfX2YpKTsgfQoKICAgICAgX19vc3RyZWFt X3R5cGUmCiAgICAgIG9wZXJhdG9yPDwobG9uZyBkb3VibGUgX19mKTsKCiAgICAgIF9fb3N0cmVh bV90eXBlJgogICAgICBvcGVyYXRvcjw8KGNvbnN0IHZvaWQqIF9fcCk7CgogICAgICBfX29zdHJl YW1fdHlwZSYKICAgICAgb3BlcmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiKTsKCgogICAg ICBfX29zdHJlYW1fdHlwZSYKICAgICAgcHV0KGNoYXJfdHlwZSBfX2MpOwoKICAgICAgX19vc3Ry ZWFtX3R5cGUmCiAgICAgIHdyaXRlKGNvbnN0IGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9f bik7CgogICAgICBfX29zdHJlYW1fdHlwZSYKICAgICAgZmx1c2goKTsKCgogICAgICBwb3NfdHlw ZQogICAgICB0ZWxscCgpOwoKICAgICAgX19vc3RyZWFtX3R5cGUmCiAgICAgIHNlZWtwKHBvc190 eXBlKTsKCiAgICAgIF9fb3N0cmVhbV90eXBlJgogICAgICBzZWVrcChvZmZfdHlwZSwgaW9zX2Jh c2U6OnNlZWtkaXIpOwogICAgfTsKCgogIHRlbXBsYXRlIDx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBjbGFzcyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OnNl bnRyeQogICAgewoKICAgICAgYm9vbCBfTV9vazsKICAgICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQs X1RyYWl0cz4mIF9NX29zOwoKICAgIHB1YmxpYzoKICAgICAgZXhwbGljaXQKICAgICAgc2VudHJ5 KGJhc2ljX29zdHJlYW08X0NoYXJULF9UcmFpdHM+JiBfX29zKTsKCiAgICAgIH5zZW50cnkoKQog ICAgICB7CgogICAgICAgIGlmIChfTV9vcy5mbGFncygpICYgaW9zX2Jhc2U6OnVuaXRidWYgJiYg IXVuY2F1Z2h0X2V4Y2VwdGlvbigpKQogICAgICAgICAgewoKICAgICAgICAgICAgaWYgKF9NX29z LnJkYnVmKCkgJiYgX01fb3MucmRidWYoKS0+cHVic3luYygpID09IC0xKQogICAgICAgICAgICAg IF9NX29zLnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgfQogICAgICB9Cgog ICAgICBvcGVyYXRvciBib29sKCkKICAgICAgeyByZXR1cm4gX01fb2s7IH0KICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgY2hh ciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwgX19vdXQud2lkZW4oX19jKSk7IH0KCgogIHRl bXBsYXRlIDxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYK ICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNoYXIg X19jKTsKCgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPGNoYXIs IF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBf X291dCwgc2lnbmVkIGNoYXIgX19jKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHN0YXRpY19jYXN0 PGNoYXI+KF9fYykpOyB9CgogIHRlbXBsYXRlPGNsYXNzIF9UcmFpdHM+CiAgICBiYXNpY19vc3Ry ZWFtPGNoYXIsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9U cmFpdHM+JiBfX291dCwgdW5zaWduZWQgY2hhciBfX2MpCiAgICB7IHJldHVybiAoX19vdXQgPDwg c3RhdGljX2Nhc3Q8Y2hhcj4oX19jKSk7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0 eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAg b3BlcmF0b3I8PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBf Q2hhclQqIF9fcyk7CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0 cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiAmCiAgICBvcGVyYXRvcjw8KGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNoYXIqIF9fcyk7CgoK ICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRz PiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNv bnN0IGNoYXIqIF9fcyk7CgoKICB0ZW1wbGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBf VHJhaXRzPiYgX19vdXQsIGNvbnN0IHNpZ25lZCBjaGFyKiBfX3MpCiAgICB7IHJldHVybiAoX19v dXQgPDwgcmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oX19zKSk7IH0KCiAgdGVtcGxhdGU8 Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4gJgogICAgb3Bl cmF0b3I8PChiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+JiBfX291dCwgY29uc3QgdW5zaWdu ZWQgY2hhciogX19zKQogICAgeyByZXR1cm4gKF9fb3V0IDw8IHJlaW50ZXJwcmV0X2Nhc3Q8Y29u c3QgY2hhcio+KF9fcykpOyB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1l IF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBlbmRsKGJh c2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJuIGZsdXNoKF9f b3MucHV0KF9fb3Mud2lkZW4oJ1xuJykpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBlbmRzKGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYgX19vcykKICAgIHsgcmV0dXJu IF9fb3MucHV0KF9DaGFyVCgpKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVu YW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBmbHVz aChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3MpCiAgICB7IHJldHVybiBfX29z LmZsdXNoKCk7IH0KCn0KCgoKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMv b3N0cmVhbS50Y2MiIDEgMwojIDM2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL29z dHJlYW0udGNjIiAzCgoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 c2VudHJ5OjoKICAgIHNlbnRyeShiYXNpY19vc3RyZWFtPF9DaGFyVCxfVHJhaXRzPiYgX19vcykK ICAgIDogX01fb2soX19vcy5nb29kKCkpLCBfTV9vcyhfX29zKQogICAgewoKICAgICAgaWYgKF9N X29rICYmIF9fb3MudGllKCkpCiAgICAgICAgX19vcy50aWUoKS0+Zmx1c2goKTsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0 cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ OjoKICAgIG9wZXJhdG9yPDwoX19vc3RyZWFtX3R5cGUmICgqX19wZikoX19vc3RyZWFtX3R5cGUm KSkKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46OgogICAgb3BlcmF0b3I8PChfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkK ICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAg ICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19wZigqdGhpcyk7IH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I8PChpb3NfYmFzZSYgKCpfX3BmKShpb3NfYmFzZSYpKQogICAgewog ICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX3BmKCp0aGlzKTsgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3Bl cmF0b3I8PChfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiaW4pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiICYmIF9fc2JpbikKICAgICAgICB7CiAgICAgICAg ICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmICghX19jb3B5X3N0cmVhbWJ1ZnMo KnRoaXMsIF9fc2JpbiwgdGhpcy0+cmRidWYoKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlv bnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAg ICAgICAgICAgfQogICAgICAgIH0KICAgICAgZWxzZSBpZiAoIV9fc2JpbikKICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19v c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46Om9wZXJhdG9yPDwoYm9vbCBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMp OwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7 CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg ICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19u KS5mYWlsZWQoKSkKICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJhdG9yPDwobG9uZyBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY2hhcl90eXBlIF9f YyA9IHRoaXMtPmZpbGwoKTsKICAgICAgICAgICAgICBpb3NfYmFzZTo6Zm10ZmxhZ3MgX19mbXQg PSB0aGlzLT5mbGFncygpICYgaW9zX2Jhc2U6OmJhc2VmaWVsZDsKICAgICAgICAgICAgICBpZiAo X01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIGJvb2wgX19iID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgIGlmICgoX19mbXQgJiBp b3NfYmFzZTo6b2N0KSB8fCAoX19mbXQgJiBpb3NfYmFzZTo6aGV4KSkKICAgICAgICAgICAgICAg ICAgICB7CiAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIF9fbCA9IHN0YXRpY19j YXN0PHVuc2lnbmVkIGxvbmc+KF9fbik7CiAgICAgICAgICAgICAgICAgICAgICBfX2IgPSBfTV9m bnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbCkuZmFpbGVkKCk7CiAgICAgICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgX19i ID0gX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgX19jLCBfX24pLmZhaWxlZCgpOwogICAg ICAgICAgICAgICAgICBpZiAoX19iKQogICAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAg ICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0 aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAg ICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFz aWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+OjpvcGVyYXRvcjw8KHVuc2lnbmVkIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkg X19jZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkK ICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0 KSkKICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlz LT5maWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8 PChsb25nIGxvbmcgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNoYXJfdHlwZSBfX2MgPSB0aGlzLT5maWxsKCk7CiAgICAgICAgICAgICAgaW9zX2Jh c2U6OmZtdGZsYWdzIF9fZm10ID0gdGhpcy0+ZmxhZ3MoKSAmIGlvc19iYXNlOjpiYXNlZmllbGQ7 CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgICBib29sIF9fYiA9IGZhbHNlOwogICAgICAgICAgICAg ICAgICBpZiAoKF9fZm10ICYgaW9zX2Jhc2U6Om9jdCkgfHwgKF9fZm10ICYgaW9zX2Jhc2U6Omhl eCkpCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQg bG9uZyBsb25nIF9fbDsKICAgICAgICAgICAgICAgICAgICAgIF9fbCA9IHN0YXRpY19jYXN0PHVu c2lnbmVkIGxvbmcgbG9uZz4oX19uKTsKICAgICAgICAgICAgICAgICAgICAgIF9fYiA9IF9NX2Zu dW1wdXQtPnB1dCgqdGhpcywgKnRoaXMsIF9fYywgX19sKS5mYWlsZWQoKTsKICAgICAgICAgICAg ICAgICAgICB9CiAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICBfX2Ig PSBfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCBfX2MsIF9fbikuZmFpbGVkKCk7CiAgICAg ICAgICAgICAgICAgIGlmIChfX2IpCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Om9wZXJhdG9yPDwodW5zaWduZWQgbG9uZyBsb25nIF9fbikKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAg dHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bXB1dCkpCiAgICAgICAgICAgICAgICBpZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywg dGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxlZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRz dGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46Om9wZXJh dG9yPDwoZG91YmxlIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAg IGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAg ICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bXB1dCkpCiAgICAgICAgICAgICAgICBp ZiAoX01fZm51bXB1dC0+cHV0KCp0aGlzLCAqdGhpcywgdGhpcy0+ZmlsbCgpLCBfX24pLmZhaWxl ZCgpKQogICAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsK ICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAg ICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkg IT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAg ICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5h bWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2lj X29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6b3BlcmF0b3I8PChsb25nIGRvdWJsZSBfX24pCiAg ICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNr X2ZhY2V0KF9NX2ZudW1wdXQpKQogICAgICAgICAgICAgICAgaWYgKF9NX2ZudW1wdXQtPnB1dCgq dGhpcywgKnRoaXMsIHRoaXMtPmZpbGwoKSwgX19uKS5mYWlsZWQoKSkKICAgICAgICAgICAgICAg ICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgIH0KICAgICAg ICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAg ICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRo aXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAg ICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAg fQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNp Y19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1Ry YWl0cz46Om9wZXJhdG9yPDwoY29uc3Qgdm9pZCogX19uKQogICAgewogICAgICBzZW50cnkgX19j ZXJiKCp0aGlzKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAg ICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtcHV0KSkK ICAgICAgICAgICAgICAgIGlmIChfTV9mbnVtcHV0LT5wdXQoKnRoaXMsICp0aGlzLCB0aGlzLT5m aWxsKCksIF9fbikuZmFpbGVkKCkpCiAgICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24m IF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBp b3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAg IH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjpwdXQoY2hhcl90eXBl IF9fYykKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgaW50X3R5cGUgX19wdXQgPSByZGJ1ZigpLT5zcHV0YyhfX2Mp OwogICAgICAgICAgaWYgKHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX3B1dCwgdHJhaXRzX3R5 cGU6OmVvZigpKSkKICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6d3JpdGUoY29uc3QgX0No YXJUKiBfX3MsIHN0cmVhbXNpemUgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlz KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICBzdHJlYW1zaXplIF9fcHV0 ID0gdGhpcy0+cmRidWYoKS0+c3B1dG4oX19zLCBfX24pOwogICAgICAgICAgaWYgKCBfX3B1dCAh PSBfX24pCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hh clQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m CiAgICBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OmZsdXNoKCkKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcyk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAg ICAgaWYgKHRoaXMtPnJkYnVmKCkgJiYgdGhpcy0+cmRidWYoKS0+cHVic3luYygpID09IC0xKQog ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ Ojpwb3NfdHlwZQogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+Ojp0ZWxscCgpCiAg ICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUoLTEpOwogICAgICBpZiAoIXRoaXMt PmZhaWwoKSkKICAgICAgICBfX3JldCA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoMCwgaW9z X2Jhc2U6OmN1ciwgaW9zX2Jhc2U6Om91dCk7CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgog IHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29z dHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRz Pjo6c2Vla3AocG9zX3R5cGUgX19wb3MpCiAgICB7CiAgICAgIGlmICghdGhpcy0+ZmFpbCgpKQog ICAgICAgIHsKCgogICAgICAgICAgcG9zX3R5cGUgX19lcnIgPSB0aGlzLT5yZGJ1ZigpLT5wdWJz ZWVrcG9zKF9fcG9zLCBpb3NfYmFzZTo6b3V0KTsKCgogICAgICAgICAgaWYgKF9fZXJyID09IHBv c190eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpmYWlsYml0KTsKCiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBzZWVrcChvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kKQogICAgewogICAg ICBpZiAoIXRoaXMtPmZhaWwoKSkKICAgICAgICB7CgoKICAgICAgICAgIHBvc190eXBlIF9fZXJy ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZihfX29mZiwgX19kLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvdXQpOwoKCiAg ICAgICAgICBpZiAoX19lcnIgPT0gcG9zX3R5cGUob2ZmX3R5cGUoLTEpKSkKICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICB9CiAgICAgIHJldHVy biAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1Ry YWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwo YmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX291dCwgX0NoYXJUIF9fYykKICAgIHsK ICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19vc3RyZWFtX3R5 cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJiKF9fb3V0KTsK ICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAg ICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eo c2l6ZW9mKF9DaGFyVCkgKiAoX193ICsgMSkpKTsKICAgICAgICAgICAgICBfX3BhZHNbMF0gPSBf X2M7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX2xlbiA9IDE7CiAgICAgICAgICAgICAgaWYg KF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3BhZDxf Q2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJl9fYywgX193LCBf X2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3BhZHMsIF9fbGVuKTsKICAgICAgICAg ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZSA8 Y2xhc3MgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mCiAgICBvcGVy YXRvcjw8KGJhc2ljX29zdHJlYW08Y2hhciwgX1RyYWl0cz4mIF9fb3V0LCBjaGFyIF9fYykKICAg IHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+IF9fb3N0cmVhbV90 eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX291dCk7 CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsK ICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICAg ICAgY2hhciogX19wYWRzID0gc3RhdGljX2Nhc3Q8Y2hhcio+KF9fYnVpbHRpbl9hbGxvY2EoX193 ICsgMSkpOwogICAgICAgICAgICAgIF9fcGFkc1swXSA9IF9fYzsKICAgICAgICAgICAgICBzdHJl YW1zaXplIF9fbGVuID0gMTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fcGFkPGNoYXIsIF9UcmFpdHM+OjpfU19wYWQo X19vdXQsIF9fb3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICZfX2MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAg ICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgX19vdXQu d3JpdGUoX19wYWRzLCBfX2xlbik7CiAgICAgICAgICAgICAgX19vdXQud2lkdGgoMCk7CiAgICAg ICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7 CgoKICAgICAgICAgICAgICBfX291dC5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAg ICAgICAgICBpZiAoKF9fb3V0LmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDAp CiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0 dXJuIF9fb3V0OwogICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBf VHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgb3BlcmF0b3I8 PChiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mIF9fb3V0LCBjb25zdCBfQ2hhclQqIF9f cykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19v c3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9fb3N0cmVhbV90eXBlOjpzZW50cnkgX19jZXJi KF9fb3V0KTsKICAgICAgaWYgKF9fY2VyYiAmJiBfX3MpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBzdHJlYW1zaXplIF9fdyA9IF9fb3V0LndpZHRo KCk7CiAgICAgICAgICAgICAgX0NoYXJUKiBfX3BhZHMgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihf X2J1aWx0aW5fYWxsb2NhKHNpemVvZihfQ2hhclQpICogX193KSk7CiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX2xlbiA9IHN0YXRpY19jYXN0PHN0cmVhbXNpemU+KF9UcmFpdHM6Omxlbmd0aChf X3MpKTsKICAgICAgICAgICAgICBpZiAoX193ID4gX19sZW4pCiAgICAgICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICAgIF9fcGFkPF9DaGFyVCwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19v dXQuZmlsbCgpLCBfX3BhZHMsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBfX3MsIF9fdywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19z ID0gX19wYWRzOwogICAgICAgICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAg IH0KICAgICAgICAgICAgICBfX291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBf X291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwgY29uc3QgY2hhciogX19zKQogICAgewogICAgICB0eXBlZGVmIGJhc2ljX29zdHJl YW08X0NoYXJULCBfVHJhaXRzPiBfX29zdHJlYW1fdHlwZTsKCgoKICAgICAgdHlwZWRlZiBjaGFy X3RyYWl0czxjaGFyPiBfX3RyYWl0c190eXBlOwoKICAgICAgdHlwZW5hbWUgX19vc3RyZWFtX3R5 cGU6OnNlbnRyeSBfX2NlcmIoX19vdXQpOwogICAgICBpZiAoX19jZXJiICYmIF9fcykKICAgICAg ICB7CiAgICAgICAgICBzaXplX3QgX19jbGVuID0gX190cmFpdHNfdHlwZTo6bGVuZ3RoKF9fcyk7 CiAgICAgICAgICBfQ2hhclQqIF9fd3MgPSBzdGF0aWNfY2FzdDxfQ2hhclQqPihfX2J1aWx0aW5f YWxsb2NhKHNpemVvZihfQ2hhclQpICogKF9fY2xlbiArIDEpKSk7CiAgICAgICAgICBmb3IgKHNp emVfdCBfX2kgPSAwOyBfX2kgPCBfX2NsZW47ICsrX19pKQogICAgICAgICAgICBfX3dzW19faV0g PSBfX291dC53aWRlbihfX3NbX19pXSk7CiAgICAgICAgICBfQ2hhclQqIF9fc3RyID0gX193czsK CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19s ZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX2NsZW4pOwogICAgICAgICAgICAgIHN0cmVh bXNpemUgX193ID0gX19vdXQud2lkdGgoKTsKICAgICAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9 IHN0YXRpY19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBf X3cpKTsKCiAgICAgICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICAgICAgewog ICAgICAgICAgICAgICAgICBfX3BhZDxfQ2hhclQsIF9UcmFpdHM+OjpfU19wYWQoX19vdXQsIF9f b3V0LmZpbGwoKSwgX19wYWRzLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX193cywgX193LCBfX2xlbiwgZmFsc2UpOwogICAgICAgICAgICAgICAgICBf X3N0ciA9IF9fcGFkczsKICAgICAgICAgICAgICAgICAgX19sZW4gPSBfX3c7CiAgICAgICAgICAg ICAgICB9CiAgICAgICAgICAgICAgX19vdXQud3JpdGUoX19zdHIsIF9fbGVuKTsKICAgICAgICAg ICAgICBfX291dC53aWR0aCgwKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1w bGF0ZTxjbGFzcyBfVHJhaXRzPgogICAgYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYKICAg IG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxjaGFyLCBfVHJhaXRzPiYgX19vdXQsIGNvbnN0IGNo YXIqIF9fcykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19vc3RyZWFtPGNoYXIsIF9UcmFpdHM+ IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlwZTo6c2VudHJ5IF9f Y2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIgJiYgX19zKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX3cgPSBfX291dC53 aWR0aCgpOwogICAgICAgICAgICAgIGNoYXIqIF9fcGFkcyA9IHN0YXRpY19jYXN0PGNoYXIqPihf X2J1aWx0aW5fYWxsb2NhKF9fdykpOwogICAgICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBz dGF0aWNfY2FzdDxzdHJlYW1zaXplPihfVHJhaXRzOjpsZW5ndGgoX19zKSk7CgogICAgICAgICAg ICAgIGlmIChfX3cgPiBfX2xlbikKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg X19wYWQ8Y2hhciwgX1RyYWl0cz46Ol9TX3BhZChfX291dCwgX19vdXQuZmlsbCgpLCBfX3BhZHMs CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX3MsIF9f dywgX19sZW4sIGZhbHNlKTsKICAgICAgICAgICAgICAgICAgX19zID0gX19wYWRzOwogICAgICAg ICAgICAgICAgICBfX2xlbiA9IF9fdzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBf X291dC53cml0ZShfX3MsIF9fbGVuKTsKICAgICAgICAgICAgICBfX291dC53aWR0aCgwKTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgoX19vdXQuZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBl bHNlIGlmICghX19zKQogICAgICAgIF9fb3V0LnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwog ICAgICByZXR1cm4gX19vdXQ7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5 cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJhc2ljX29zdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPDwoYmFzaWNfb3N0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JiBfX291dCwKICAgICAgICAgICAgICAgY29uc3QgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0 cywgX0FsbG9jPiYgX19zdHIpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxfQ2hh clQsIF9UcmFpdHM+IF9fb3N0cmVhbV90eXBlOwogICAgICB0eXBlbmFtZSBfX29zdHJlYW1fdHlw ZTo6c2VudHJ5IF9fY2VyYihfX291dCk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAg ICAgICAgY29uc3QgX0NoYXJUKiBfX3MgPSBfX3N0ci5kYXRhKCk7CiAgICAgICAgICBzdHJlYW1z aXplIF9fdyA9IF9fb3V0LndpZHRoKCk7CiAgICAgICAgICBfQ2hhclQqIF9fcGFkcyA9IHN0YXRp Y19jYXN0PF9DaGFyVCo+KF9fYnVpbHRpbl9hbGxvY2Eoc2l6ZW9mKF9DaGFyVCkgKiBfX3cpKTsK ICAgICAgICAgIHN0cmVhbXNpemUgX19sZW4gPSBzdGF0aWNfY2FzdDxzdHJlYW1zaXplPihfX3N0 ci5zaXplKCkpOwoKCgogICAgICAgICAgaWYgKF9fdyA+IF9fbGVuKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgX19wYWQ8X0NoYXJULCBfVHJhaXRzPjo6X1NfcGFkKF9fb3V0LCBfX291dC5m aWxsKCksIF9fcGFkcywgX19zLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfX3csIF9fbGVuLCBmYWxzZSk7CiAgICAgICAgICAgICAgX19zID0gX19wYWRzOwog ICAgICAgICAgICAgIF9fbGVuID0gX193OwogICAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1z aXplIF9fcmVzID0gX19vdXQucmRidWYoKS0+c3B1dG4oX19zLCBfX2xlbik7CiAgICAgICAgICBf X291dC53aWR0aCgwKTsKICAgICAgICAgIGlmIChfX3JlcyAhPSBfX2xlbikKICAgICAgICAgICAg X19vdXQuc2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgIH0KICAgICAgcmV0dXJu IF9fb3V0OwogICAgfQoKCgoKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfb3N0cmVhbTxj aGFyPjsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgZW5kbChvc3RyZWFtJik7CiAgZXh0ZXJu IHRlbXBsYXRlIG9zdHJlYW0mIGVuZHMob3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3Ry ZWFtJiBmbHVzaChvc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9zdHJlYW0mIG9wZXJhdG9y PDwob3N0cmVhbSYsIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFtJiBvcGVyYXRvcjw8 KG9zdHJlYW0mLCB1bnNpZ25lZCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgb3N0cmVhbSYgb3Bl cmF0b3I8PChvc3RyZWFtJiwgc2lnbmVkIGNoYXIpOwogIGV4dGVybiB0ZW1wbGF0ZSBvc3RyZWFt JiBvcGVyYXRvcjw8KG9zdHJlYW0mLCBjb25zdCBjaGFyKik7CiAgZXh0ZXJuIHRlbXBsYXRlIG9z dHJlYW0mIG9wZXJhdG9yPDwob3N0cmVhbSYsIGNvbnN0IHVuc2lnbmVkIGNoYXIqKTsKICBleHRl cm4gdGVtcGxhdGUgb3N0cmVhbSYgb3BlcmF0b3I8PChvc3RyZWFtJiwgY29uc3Qgc2lnbmVkIGNo YXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyZWFtPHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVhbSYgZW5kbCh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1w bGF0ZSB3b3N0cmVhbSYgZW5kcyh3b3N0cmVhbSYpOwogIGV4dGVybiB0ZW1wbGF0ZSB3b3N0cmVh bSYgZmx1c2god29zdHJlYW0mKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJhdG9y PDwod29zdHJlYW0mLCB3Y2hhcl90KTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh dG9yPDwod29zdHJlYW0mLCBjaGFyKTsKICBleHRlcm4gdGVtcGxhdGUgd29zdHJlYW0mIG9wZXJh dG9yPDwod29zdHJlYW0mLCBjb25zdCB3Y2hhcl90Kik7CiAgZXh0ZXJuIHRlbXBsYXRlIHdvc3Ry ZWFtJiBvcGVyYXRvcjw8KHdvc3RyZWFtJiwgY29uc3QgY2hhciopOwoKfQojIDI3NiAiL3Vzci9s b2NhbC9pbmNsdWRlL2MrKy8zLjIvb3N0cmVhbSIgMiAzCiMgMzkgIi91c3IvbG9jYWwvaW5jbHVk ZS9jKysvMy4yL2JpdHMvaXN0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVtcGxh dGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+OjpzZW50cnk6OgogICAgc2VudHJ5KGJhc2ljX2lzdHJlYW08X0NoYXJU LCBfVHJhaXRzPiYgX19pbiwgYm9vbCBfX25vc2tpcHdzKQogICAgewogICAgICBpZiAoX19pbi5n b29kKCkpCiAgICAgICAgewogICAgICAgICAgaWYgKF9faW4udGllKCkpCiAgICAgICAgICAgIF9f aW4udGllKCktPmZsdXNoKCk7CiAgICAgICAgICBpZiAoIV9fbm9za2lwd3MgJiYgKF9faW4uZmxh Z3MoKSAmIGlvc19iYXNlOjpza2lwd3MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29u c3QgX19pbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gX19pbi5yZGJ1ZigpOwogICAgICAgICAgICAgIF9faW50 X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgaWYgKF9faW4uX01fY2hl Y2tfZmFjZXQoX19pbi5fTV9mY3R5cGUpKQogICAgICAgICAgICAgICAgd2hpbGUgKCF0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikKICAgICAgICAgICAgICAgICAgICAgICAmJiBf X2luLl9NX2ZjdHlwZS0+aXMoY3R5cGVfYmFzZTo6c3BhY2UsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19jKSkp CiAgICAgICAgICAgICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwoKCgogICAgICAgICAgICAg IGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgICAg ICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjplb2ZiaXQpOwoKICAgICAgICAgICAgfQogICAgICAg IH0KCiAgICAgIGlmIChfX2luLmdvb2QoKSkKICAgICAgICBfTV9vayA9IHRydWU7CiAgICAgIGVs c2UKICAgICAgICB7CiAgICAgICAgICBfTV9vayA9IGZhbHNlOwogICAgICAgICAgX19pbi5zZXRz dGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I+PihfX2lzdHJlYW1fdHlwZSYgKCpfX3BmKShfX2lzdHJlYW1fdHlwZSYpKQogICAgewogICAg ICBfX3BmKCp0aGlzKTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I+PihfX2lvc190eXBlJiAoKl9fcGYpKF9faW9zX3R5cGUmKSkKICAgIHsKICAgICAgX19wZigq dGhpcyk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+ JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oaW9z X2Jhc2UmICgqX19wZikoaW9zX2Jhc2UmKSkKICAgIHsKICAgICAgX19wZigqdGhpcyk7CiAgICAg IHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFt ZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNf aXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oYm9vbCYgX19uKQogICAg ewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAg ICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFz ZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3Ry ZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46 OgogICAgb3BlcmF0b3I+PihzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0 aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAg ICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19i YXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBsb25nIF9fbDsK ICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAgICAg ICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19sKTsKCgogICAg ICAgICAgICAgIGlmICghKF9fZXJyICYgaW9zX2Jhc2U6OmZhaWxiaXQpCiAgICAgICAgICAgICAg ICAgICYmIChudW1lcmljX2xpbWl0czxzaG9ydD46Om1pbigpIDw9IF9fbAogICAgICAgICAgICAg ICAgICAgICAgJiYgX19sIDw9IG51bWVyaWNfbGltaXRzPHNob3J0Pjo6bWF4KCkpKQogICAgICAg ICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIF9f ZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShf X2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQog ICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFk Yml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAg IH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25l ZCBzaG9ydCYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlv c19iYXNlOjpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51 bWdldCkpCiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBf X2VyciwgX19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAg ICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoK ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAg ICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAg ICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu ICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFp dHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0b3I+PihpbnQmIF9fbikKICAgIHsKICAgICAg c2VudHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3Rh dGUgX19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAg ICAgICAgbG9uZyBfX2w7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1n ZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19l cnIsIF9fbCk7CgoKICAgICAgICAgICAgICBpZiAoIShfX2VyciAmIGlvc19iYXNlOjpmYWlsYml0 KQogICAgICAgICAgICAgICAgICAmJiAobnVtZXJpY19saW1pdHM8aW50Pjo6bWluKCkgPD0gX19s CiAgICAgICAgICAgICAgICAgICAgICAmJiBfX2wgPD0gbnVtZXJpY19saW1pdHM8aW50Pjo6bWF4 KCkpKQogICAgICAgICAgICAgICAgX19uID0gX19sOwogICAgICAgICAgICAgIGVsc2UKICAgICAg ICAgICAgICAgIF9fZXJyIHw9IGlvc19iYXNlOjpmYWlsYml0OwoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4Y2VwdGlv biYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShp b3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAm IGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJvdzsKICAgICAgICAg ICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I+Pih1bnNpZ25lZCBpbnQmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywg ZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6 aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2Zh Y2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAw LCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIp OwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAg ICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7 CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0 KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAg ICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBl bmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFz aWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4obG9uZyYgX19uKQog ICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBpb3Nf YmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNlOjpnb29kYml0 KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkpCiAgICAgICAg ICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2VyciwgX19uKTsKICAg ICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0KICAgICAgICAg IGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0 aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMt PmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0 aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz46OgogICAgb3BlcmF0b3I+Pih1bnNpZ25lZCBsb25nJiBfX24pCiAgICB7CiAgICAgIHNlbnRy eSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAg ICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9f ZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAg IGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1n ZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMt PnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9u JiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlv c19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYg aW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAg ICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgoKICB0ZW1wbGF0ZTx0eXBl bmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgb3BlcmF0 b3I+Pihsb25nIGxvbmcmIF9fbikKICAgIHsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgZmFs c2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAg ICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUgX19lcnIgPSBpb3NfYmFzZTo6aW9z dGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAgICAgaWYgKF9NX2NoZWNrX2ZhY2V0 KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51bWdldC0+Z2V0KCp0aGlzLCAwLCAq dGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoX19lcnIpOwog ICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAg ICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAg ICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAh PSAwKQogICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KHVuc2lnbmVkIGxvbmcgbG9u ZyYgX19uKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCBmYWxzZSk7CiAgICAgIGlm IChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAg ICAgICBpb3NfYmFzZTo6aW9zdGF0ZSBfX2VyciA9IGlvc19iYXNlOjppb3N0YXRlKGlvc19iYXNl Ojpnb29kYml0KTsKICAgICAgICAgICAgICBpZiAoX01fY2hlY2tfZmFjZXQoX01fZm51bWdldCkp CiAgICAgICAgICAgICAgICBfTV9mbnVtZ2V0LT5nZXQoKnRoaXMsIDAsICp0aGlzLCBfX2Vyciwg X19uKTsKICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShfX2Vycik7CiAgICAgICAgICAgIH0K ICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBp ZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAg ICAgICAgICB0aHJvdzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJuICp0aGlz OwogICAgfQoKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgog ICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+OjoKICAgIG9wZXJhdG9yPj4oZmxvYXQmIF9fbikKICAgIHsKICAgICAgc2Vu dHJ5IF9fY2VyYigqdGhpcywgZmFsc2UpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAg ICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgaW9zX2Jhc2U6Omlvc3RhdGUg X19lcnIgPSBpb3NfYmFzZTo6aW9zdGF0ZShpb3NfYmFzZTo6Z29vZGJpdCk7CiAgICAgICAgICAg ICAgaWYgKF9NX2NoZWNrX2ZhY2V0KF9NX2ZudW1nZXQpKQogICAgICAgICAgICAgICAgX01fZm51 bWdldC0+Z2V0KCp0aGlzLCAwLCAqdGhpcywgX19lcnIsIF9fbik7CiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoX19lcnIpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIG9wZXJh dG9yPj4oZG91YmxlJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNl KTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAg ewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3Rh dGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChf TV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRo aXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KGxvbmcgZG91YmxlJiBfX24p CiAgICB7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2Vy YikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlv c19iYXNlOjppb3N0YXRlIF9fZXJyID0gaW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2Ri aXQpOwogICAgICAgICAgICAgIGlmIChfTV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAg ICAgICAgICAgIF9NX2ZudW1nZXQtPmdldCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAg ICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhp cy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAg IHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9 CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2lj X2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6CiAgICBvcGVyYXRvcj4+KHZvaWQqJiBfX24pCiAgICB7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0 cnkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlvc19iYXNlOjppb3N0YXRlIF9fZXJyID0g aW9zX2Jhc2U6Omlvc3RhdGUoaW9zX2Jhc2U6Omdvb2RiaXQpOwogICAgICAgICAgICAgIGlmIChf TV9jaGVja19mYWNldChfTV9mbnVtZ2V0KSkKICAgICAgICAgICAgICAgIF9NX2ZudW1nZXQtPmdl dCgqdGhpcywgMCwgKnRoaXMsIF9fZXJyLCBfX24pOwogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKF9fZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2Zh aWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNl OjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jh c2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAg ICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBvcGVyYXRvcj4+KF9f c3RyZWFtYnVmX3R5cGUqIF9fc2JvdXQpCiAgICB7CiAgICAgICBzZW50cnkgX19jZXJiKCp0aGlz LCBmYWxzZSk7CiAgICAgICBpZiAoX19jZXJiKQogICAgICAgICB7CiAgICAgICAgICAgdHJ5CiAg ICAgICAgICAgICB7CiAgICAgICAgICAgICAgIHN0cmVhbXNpemUgX194dHJjdCA9IDA7CiAgICAg ICAgICAgICAgIGlmIChfX3Nib3V0KQogICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2JpbiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAg ICAgICAgICBfX3h0cmN0ID0gX19jb3B5X3N0cmVhbWJ1ZnMoKnRoaXMsIF9fc2JpbiwgX19zYm91 dCk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICBpZiAoIV9fc2JvdXQgfHwgIV9f eHRyY3QpCiAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQp OwogICAgICAgICAgICAgfQogICAgICAgICAgIGNhdGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAg ICAgICAgICAgewoKCiAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpi YWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgICB9CiAgICAg ICAgIH0KICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0No YXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgdHlwZW5hbWUgYmFzaWNfaXN0cmVhbTxfQ2hhclQs IF9UcmFpdHM+OjppbnRfdHlwZQogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoK ICAgIGdldCh2b2lkKQogICAgewogICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190 eXBlOjplb2YoKTsKICAgICAgaW50X3R5cGUgX19jID0gX19lb2Y7CiAgICAgIF9NX2djb3VudCA9 IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQog ICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19jID0g dGhpcy0+cmRidWYoKS0+c2J1bXBjKCk7CgogICAgICAgICAgICAgIGlmICghdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsK ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0IHwgaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBj YXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5l eGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhy b3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiBfX2M7CiAgICB9CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6 CiAgICBnZXQoY2hhcl90eXBlJiBfX2MpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUg X19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19idWZ2 YWwgPSB0aGlzLT5yZGJ1ZigpLT5zYnVtcGMoKTsKCiAgICAgICAgICAgICAgaWYgKCF0cmFpdHNf dHlwZTo6ZXFfaW50X3R5cGUoX19idWZ2YWwsIF9fZW9mKSkKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgX01fZ2NvdW50ID0gMTsKICAgICAgICAgICAgICAgICAgX19jID0gdHJh aXRzX3R5cGU6OnRvX2NoYXJfdHlwZShfX2J1ZnZhbCk7CiAgICAgICAgICAgICAgICB9CiAgICAg ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv ZmJpdCB8IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2go ZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNl dHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08 X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAg ICBnZXQoY2hhcl90eXBlKiBfX3MsIHN0cmVhbXNpemUgX19uLCBjaGFyX3R5cGUgX19kZWxpbSkK ICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1 ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2lkZWxpbSA9IHRyYWl0c190eXBlOjp0 b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgICAgICBjb25zdCBpbnRfdHlwZSBfX2VvZiA9 IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3Ni ID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRfdHlwZSBfX2MgPSBfX3NiLT5zZ2V0 YygpOwoKICAgICAgICAgICAgICB3aGlsZSAoX01fZ2NvdW50ICsgMSA8IF9fbgogICAgICAgICAg ICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAg ICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2lkZWxp bSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgICpfX3MrKyA9IHRyYWl0c190 eXBlOjp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgICAgX19jID0gX19zYi0+c25l eHRjKCk7CiAgICAgICAgICAgICAgICAgICsrX01fZ2NvdW50OwogICAgICAgICAgICAgICAgfQog ICAgICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAg ICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9mYml0KTsKICAgICAgICAg ICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgog ICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAg ICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAg ICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAqX19zID0g Y2hhcl90eXBlKCk7CiAgICAgIGlmICghX01fZ2NvdW50KQogICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgcmV0dXJuICp0aGlzOwogICAgfQoKICB0ZW1wbGF0 ZTx0eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9D aGFyVCwgX1RyYWl0cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAg Z2V0KF9fc3RyZWFtYnVmX3R5cGUmIF9fc2IsIGNoYXJfdHlwZSBfX2RlbGltKQogICAgewogICAg ICBfTV9nY291bnQgPSAwOwogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAg aWYgKF9fY2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAg ICAgICAgIGNvbnN0IGludF90eXBlIF9faWRlbGltID0gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBl KF9fZGVsaW0pOwogICAgICAgICAgICAgIGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5 cGU6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fdGhpc19zYiA9IHRo aXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX190aGlzX3NiLT5zZ2V0 YygpOwogICAgICAgICAgICAgIGNoYXJfdHlwZSBfX2MyID0gdHJhaXRzX3R5cGU6OnRvX2NoYXJf dHlwZShfX2MpOwoKICAgICAgICAgICAgICB3aGlsZSAoIXRyYWl0c190eXBlOjplcV9pbnRfdHlw ZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYywgX19pZGVsaW0pCiAgICAgICAgICAgICAgICAgICAgICYmICF0cmFpdHNfdHlw ZTo6ZXFfaW50X3R5cGUoX19zYi5zcHV0YyhfX2MyKSwgX19lb2YpKQogICAgICAgICAgICAgICAg ewogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAgICAgICAgX19jID0g X190aGlzX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgICAgX19jMiA9IHRyYWl0c190eXBl Ojp0b19jaGFyX3R5cGUoX19jKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAo dHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhp cy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNh dGNoKGV4Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICB0aGlz LT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKHRoaXMtPmV4 Y2VwdGlvbnMoKSAmIGlvc19iYXNlOjpiYWRiaXQpICE9IDApCiAgICAgICAgICAgICAgICB0aHJv dzsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBf VHJhaXRzPjo6CiAgICBnZXRsaW5lKGNoYXJfdHlwZSogX19zLCBzdHJlYW1zaXplIF9fbiwgY2hh cl90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBf X2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAg IHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19pZGVsaW0g PSB0cmFpdHNfdHlwZTo6dG9faW50X3R5cGUoX19kZWxpbSk7CiAgICAgICAgICAgICAgY29uc3Qg aW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJl YW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUg X19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9NX2djb3VudCArIDEg PCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9pbnRfdHlwZShf X2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAq X19zKysgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgICAg IF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAg ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVv ZmJpdCk7CiAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAg ICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pKQogICAgICAg ICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIF9fc2ItPnNidW1wYygpOwogICAg ICAgICAgICAgICAgICAgICAgKytfTV9nY291bnQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAg ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9z X2Jhc2U6OmZhaWxiaXQpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICpfX3MgPSBjaGFyX3R5cGUoKTsK ICAgICAgaWYgKCFfTV9nY291bnQpCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZh aWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9D aGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBpZ25vcmUoc3RyZWFt c2l6ZSBfX24sIGludF90eXBlIF9fZGVsaW0pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAg ICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiICYmIF9fbiA+ IDApCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBj b25zdCBpbnRfdHlwZSBfX2VvZiA9IHRyYWl0c190eXBlOjplb2YoKTsKICAgICAgICAgICAgICBf X3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhpcy0+cmRidWYoKTsKICAgICAgICAgICAgICBpbnRf dHlwZSBfX2MgPSBfX3NiLT5zZ2V0YygpOwoKICAgICAgICAgICAgICBfX24gPSBtaW4oX19uLCBu dW1lcmljX2xpbWl0czxzdHJlYW1zaXplPjo6bWF4KCkpOwogICAgICAgICAgICAgIHdoaWxlIChf TV9nY291bnQgPCBfX24KICAgICAgICAgICAgICAgICAgICAgJiYgIXRyYWl0c190eXBlOjplcV9p bnRfdHlwZShfX2MsIF9fZW9mKQogICAgICAgICAgICAgICAgICAgICAmJiAhdHJhaXRzX3R5cGU6 OmVxX2ludF90eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAg ICAgICAgIF9fYyA9IF9fc2ItPnNuZXh0YygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3Vu dDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAodHJhaXRzX3R5cGU6OmVxX2lu dF90eXBlKF9fYywgX19lb2YpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmVvZmJpdCk7CiAgICAgICAgICAgICAgZWxzZSBpZiAodHJhaXRzX3R5cGU6OmVxX2ludF90 eXBlKF9fYywgX19kZWxpbSkpCiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9f c2ItPnNidW1wYygpOwogICAgICAgICAgICAgICAgICArK19NX2djb3VudDsKICAgICAgICAgICAg ICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPjo6aW50X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBw ZWVrKHZvaWQpCiAgICB7CiAgICAgIGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKTsK ICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAg ICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsgX19j ID0gdGhpcy0+cmRidWYoKS0+c2dldGMoKTsgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBf X2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19i YXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9z X2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9 CiAgICAgICAgfQogICAgICByZXR1cm4gX19jOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf Q2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4mCiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcmVhZChjaGFyX3R5 cGUqIF9fcywgc3RyZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAg IHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsK ICAgICAgICAgIHRyeQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fZ2NvdW50ID0gdGhp cy0+cmRidWYoKS0+c2dldG4oX19zLCBfX24pOwogICAgICAgICAgICAgIGlmIChfTV9nY291bnQg IT0gX19uKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCB8 IGlvc19iYXNlOjpmYWlsYml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0 aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygp ICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAg ICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmZhaWxiaXQpOwogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIHN0cmVhbXNpemUKICAgIGJhc2ljX2lz dHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICByZWFkc29tZShjaGFyX3R5cGUqIF9fcywgc3Ry ZWFtc2l6ZSBfX24pCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2Nl cmIoKnRoaXMsIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRy eQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgc3RyZWFtc2l6ZSBfX251bSA9IHRoaXMtPnJk YnVmKCktPmluX2F2YWlsKCk7CiAgICAgICAgICAgICAgaWYgKF9fbnVtID4gMCkKICAgICAgICAg ICAgICAgIHsKICAgICAgICAgICAgICAgICAgX19udW0gPSBtaW4oX19udW0sIF9fbik7CiAgICAg ICAgICAgICAgICAgIGlmIChfX251bSkKICAgICAgICAgICAgICAgICAgICBfTV9nY291bnQgPSB0 aGlzLT5yZGJ1ZigpLT5zZ2V0bihfX3MsIF9fbnVtKTsKICAgICAgICAgICAgICAgIH0KICAgICAg ICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6ZW9m Yml0KTsKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAg ICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRi aXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJh ZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAg fQogICAgICBlbHNlCiAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwog ICAgICByZXR1cm4gX01fZ2NvdW50OwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfQ2hhclQs IHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4mCiAg ICBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgcHV0YmFjayhjaGFyX3R5cGUg X19jKQogICAgewogICAgICBzZW50cnkgX19jZXJiKCp0aGlzLCB0cnVlKTsKICAgICAgaWYgKF9f Y2VyYikKICAgICAgICB7CiAgICAgICAgICB0cnkKICAgICAgICAgICAgewogICAgICAgICAgICAg IGNvbnN0IGludF90eXBlIF9fZW9mID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICAgICAgICAg IF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSB0aGlzLT5yZGJ1ZigpOwogICAgICAgICAgICAgIGlm ICghX19zYgogICAgICAgICAgICAgICAgICB8fCB0cmFpdHNfdHlwZTo6ZXFfaW50X3R5cGUoX19z Yi0+c3B1dGJhY2tjKF9fYyksIF9fZW9mKSkKICAgICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRl KGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRp b24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUo aW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkg JiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5h bWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9U cmFpdHM+JgogICAgYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+OjoKICAgIHVuZ2V0KHZv aWQpCiAgICB7CiAgICAgIF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMs IHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAg ICAgICB7CiAgICAgICAgICAgICAgY29uc3QgaW50X3R5cGUgX19lb2YgPSB0cmFpdHNfdHlwZTo6 ZW9mKCk7CiAgICAgICAgICAgICAgX19zdHJlYW1idWZfdHlwZSogX19zYiA9IHRoaXMtPnJkYnVm KCk7CiAgICAgICAgICAgICAgaWYgKCFfX3NiCiAgICAgICAgICAgICAgICAgIHx8IHRyYWl0c190 eXBlOjplcV9pbnRfdHlwZShfX3NiLT5zdW5nZXRjKCksIF9fZW9mKSkKICAgICAgICAgICAgICAg IHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICB9CiAgICAgICAg ICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAg dGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlz LT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAg dGhyb3c7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB0aGlzLT5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgaW50CiAgICBi YXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz46OgogICAgc3luYyh2b2lkKQogICAgewogICAg ICBpbnQgX19yZXQgPSAtMTsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2Vy YigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5 CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX3N0cmVhbWJ1Zl90eXBlKiBfX3NiID0gdGhp cy0+cmRidWYoKTsKICAgICAgICAgICAgICBpZiAoX19zYikKICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgaWYgKF9fc2ItPnB1YnN5bmMoKSA9PSAtMSkKICAgICAgICAgICAgICAg ICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICAgICAg ZWxzZQogICAgICAgICAgICAgICAgICAgIF9fcmV0ID0gMDsKICAgICAgICAgICAgICAgIH0KICAg ICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhjZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAg IHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAg ICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0g MCkKICAgICAgICAgICAgICAgIHRocm93OwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBy ZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cz4KICAgIHR5cGVuYW1lIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6cG9z X3R5cGUKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICB0ZWxsZyh2b2lk KQogICAgewogICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKC0xKTsKICAgICAgX01fZ2Nv dW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhpcywgdHJ1ZSk7CiAgICAgIGlmIChfX2Nl cmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKICAgICAgICAgICAgIF9f cmV0ID0gdGhpcy0+cmRidWYoKS0+cHVic2Vla29mZigwLCBpb3NfYmFzZTo6Y3VyLCBpb3NfYmFz ZTo6aW4pOwogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9fZmFpbCkK ICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jhc2U6OmJh ZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3NfYmFzZTo6 YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFy VCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYK ICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBzZWVrZyhwb3NfdHlwZSBf X3BvcykKICAgIHsKICAgICAgX01fZ2NvdW50ID0gMDsKICAgICAgc2VudHJ5IF9fY2VyYigqdGhp cywgdHJ1ZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAg ICAgICAgIHsKCgogICAgICAgICAgICAgIHBvc190eXBlIF9fZXJyID0gdGhpcy0+cmRidWYoKS0+ cHVic2Vla3BvcyhfX3BvcywgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgICAgIGlmIChfX2Vy ciA9PSBwb3NfdHlwZShvZmZfdHlwZSgtMSkpKQogICAgICAgICAgICAgICAgdGhpcy0+c2V0c3Rh dGUoaW9zX2Jhc2U6OmZhaWxiaXQpOwoKICAgICAgICAgICAgfQogICAgICAgICAgY2F0Y2goZXhj ZXB0aW9uJiBfX2ZhaWwpCiAgICAgICAgICAgIHsKCgogICAgICAgICAgICAgIHRoaXMtPnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgodGhpcy0+ZXhjZXB0aW9u cygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93OwogICAg ICAgICAgICB9CiAgICAgICAgfQogICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0No YXJULCBfVHJhaXRzPiYKICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPjo6CiAgICBz ZWVrZyhvZmZfdHlwZSBfX29mZiwgaW9zX2Jhc2U6OnNlZWtkaXIgX19kaXIpCiAgICB7CiAgICAg IF9NX2djb3VudCA9IDA7CiAgICAgIHNlbnRyeSBfX2NlcmIoKnRoaXMsIHRydWUpOwogICAgICBp ZiAoX19jZXJiKQogICAgICAgIHsKICAgICAgICAgIHRyeQogICAgICAgICAgICB7CgoKICAgICAg ICAgICAgICBwb3NfdHlwZSBfX2VyciA9IHRoaXMtPnJkYnVmKCktPnB1YnNlZWtvZmYoX19vZmYs IF9fZGlyLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBpb3NfYmFzZTo6aW4pOwoKCiAgICAgICAgICAgICAgaWYgKF9fZXJyID09IHBvc190 eXBlKG9mZl90eXBlKC0xKSkpCiAgICAgICAgICAgICAgICB0aGlzLT5zZXRzdGF0ZShpb3NfYmFz ZTo6ZmFpbGJpdCk7CgogICAgICAgICAgICB9CiAgICAgICAgICBjYXRjaChleGNlcHRpb24mIF9f ZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgdGhpcy0+c2V0c3RhdGUoaW9zX2Jh c2U6OmJhZGJpdCk7CiAgICAgICAgICAgICAgaWYgKCh0aGlzLT5leGNlcHRpb25zKCkgJiBpb3Nf YmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAgICAgICAgIH0K ICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1l IF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cz4KICAgIGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJh aXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVhbTxfQ2hhclQsIF9UcmFpdHM+JiBfX2lu LCBfQ2hhclQmIF9fYykKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwg X1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90eXBlOjpz ZW50cnkgX19jZXJiKF9faW4sIGZhbHNlKTsKICAgICAgaWYgKF9fY2VyYikKICAgICAgICB7CiAg ICAgICAgICB0cnkKICAgICAgICAgICAgeyBfX2luLmdldChfX2MpOyB9CiAgICAgICAgICBjYXRj aChleGNlcHRpb24mIF9fZmFpbCkKICAgICAgICAgICAgewoKCiAgICAgICAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6YmFkYml0KTsKICAgICAgICAgICAgICBpZiAoKF9faW4uZXhjZXB0 aW9ucygpICYgaW9zX2Jhc2U6OmJhZGJpdCkgIT0gMCkKICAgICAgICAgICAgICAgIHRocm93Owog ICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBlbHNlCiAgICAgICAgX19pbi5zZXRzdGF0ZShp b3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHM+CiAgICBiYXNpY19pc3RyZWFtPF9DaGFy VCwgX1RyYWl0cz4mCiAgICBvcGVyYXRvcj4+KGJhc2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRz PiYgX19pbiwgX0NoYXJUKiBfX3MpCiAgICB7CiAgICAgIHR5cGVkZWYgYmFzaWNfaXN0cmVhbTxf Q2hhclQsIF9UcmFpdHM+IF9faXN0cmVhbV90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9f aXN0cmVhbV90eXBlOjpfX3N0cmVhbWJ1Zl90eXBlIF9fc3RyZWFtYnVmX3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgX1RyYWl0czo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5cGVkZWYg X0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBjdHlwZTxfQ2hhclQ+IF9fY3R5cGVfdHlw ZTsKICAgICAgc3RyZWFtc2l6ZSBfX2V4dHJhY3RlZCA9IDA7CgogICAgICB0eXBlbmFtZSBfX2lz dHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBmYWxzZSk7CiAgICAgIGlmIChfX2NlcmIp CiAgICAgICAgewogICAgICAgICAgdHJ5CiAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgc3Ry ZWFtc2l6ZSBfX251bSA9IF9faW4ud2lkdGgoKTsKICAgICAgICAgICAgICBpZiAoX19udW0gPT0g MCkKICAgICAgICAgICAgICAgIF9fbnVtID0gbnVtZXJpY19saW1pdHM8c3RyZWFtc2l6ZT46Om1h eCgpOwoKICAgICAgICAgICAgICBjb25zdCBfX2N0eXBlX3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFj ZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsKICAgICAgICAgICAgICBjb25zdCBpbnRf dHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAgICAgICAgICAgIF9fc3RyZWFtYnVmX3R5 cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICAgICAgaW50X3R5cGUgX19jID0gX19z Yi0+c2dldGMoKTsKCiAgICAgICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVkIDwgX19udW0gLSAx CiAgICAgICAgICAgICAgICAgICAgICYmIF9fYyAhPSBfX2VvZiAmJiAhX19jdHlwZS5pcyhjdHlw ZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAg Kl9fcysrID0gX19jOwogICAgICAgICAgICAgICAgICArK19fZXh0cmFjdGVkOwogICAgICAgICAg ICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAg ICAgICBpZiAoX19jID09IF9fZW9mKQogICAgICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3Nf YmFzZTo6ZW9mYml0KTsKCgoKICAgICAgICAgICAgICAqX19zID0gY2hhcl90eXBlKCk7CgogICAg ICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIGNhdGNoKGV4 Y2VwdGlvbiYgX19mYWlsKQogICAgICAgICAgICB7CgoKICAgICAgICAgICAgICBfX2luLnNldHN0 YXRlKGlvc19iYXNlOjpiYWRiaXQpOwogICAgICAgICAgICAgIGlmICgoX19pbi5leGNlcHRpb25z KCkgJiBpb3NfYmFzZTo6YmFkYml0KSAhPSAwKQogICAgICAgICAgICAgICAgdGhyb3c7CiAgICAg ICAgICAgIH0KICAgICAgICB9CiAgICAgIGlmICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5z ZXRzdGF0ZShpb3NfYmFzZTo6ZmFpbGJpdCk7CiAgICAgIHJldHVybiBfX2luOwogICAgfQoKCiAg dGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzPgogICAgYmFzaWNfaXN0 cmVhbTxfQ2hhclQsX1RyYWl0cz4mCiAgICB3cyhiYXNpY19pc3RyZWFtPF9DaGFyVCxfVHJhaXRz PiYgX19pbikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0 cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6 Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFt ZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVfdHlwZTsKICAgICAgdHlwZWRl ZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6aW50X3R5cGUgX19pbnRfdHlwZTsKCiAgICAgIGNv bnN0IF9fY3R5cGVfdHlwZSYgX19jdHlwZSA9IHVzZV9mYWNldDxfX2N0eXBlX3R5cGU+KF9faW4u Z2V0bG9jKCkpOwogICAgICBjb25zdCBfX2ludF90eXBlIF9fZW9mID0gX1RyYWl0czo6ZW9mKCk7 CiAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgIF9faW50 X3R5cGUgX19jID0gX19zYi0+c2dldGMoKTsKCiAgICAgIHdoaWxlIChfX2MgIT0gX19lb2YgJiYg X19jdHlwZS5pcyhjdHlwZV9iYXNlOjpzcGFjZSwgX19jKSkKICAgICAgICBfX2MgPSBfX3NiLT5z bmV4dGMoKTsKICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICBfX2luLnNldHN0YXRlKGlv c19iYXNlOjplb2ZiaXQpOwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfQ2hhclQsIHR5cGVuYW1lIF9UcmFpdHMsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGJh c2ljX2lzdHJlYW08X0NoYXJULCBfVHJhaXRzPiYKICAgIG9wZXJhdG9yPj4oYmFzaWNfaXN0cmVh bTxfQ2hhclQsIF9UcmFpdHM+JiBfX2luLAogICAgICAgICAgICAgICBiYXNpY19zdHJpbmc8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+JiBfX3N0cikKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19p c3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlw ZW5hbWUgX19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYg dHlwZW5hbWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlw ZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9f Y3R5cGVfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBf QWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlw ZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwogICAgICBfX3NpemVfdHlwZSBfX2V4dHJhY3RlZCA9 IDA7CgogICAgICB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6c2VudHJ5IF9fY2VyYihfX2luLCBm YWxzZSk7CiAgICAgIGlmIChfX2NlcmIpCiAgICAgICAgewogICAgICAgICAgX19zdHIuZXJhc2Uo KTsKICAgICAgICAgIHN0cmVhbXNpemUgX193ID0gX19pbi53aWR0aCgpOwogICAgICAgICAgX19z aXplX3R5cGUgX19uOwogICAgICAgICAgX19uID0gX193ID4gMCA/IHN0YXRpY19jYXN0PF9fc2l6 ZV90eXBlPihfX3cpIDogX19zdHIubWF4X3NpemUoKTsKCiAgICAgICAgICBjb25zdCBfX2N0eXBl X3R5cGUmIF9fY3R5cGUgPSB1c2VfZmFjZXQ8X19jdHlwZV90eXBlPihfX2luLmdldGxvYygpKTsK ICAgICAgICAgIGNvbnN0IF9faW50X3R5cGUgX19lb2YgPSBfVHJhaXRzOjplb2YoKTsKICAgICAg ICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2IgPSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2lu dF90eXBlIF9fYyA9IF9fc2ItPnNnZXRjKCk7CgogICAgICAgICAgd2hpbGUgKF9fZXh0cmFjdGVk IDwgX19uCiAgICAgICAgICAgICAgICAgJiYgX19jICE9IF9fZW9mICYmICFfX2N0eXBlLmlzKGN0 eXBlX2Jhc2U6OnNwYWNlLCBfX2MpKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIg Kz0gX1RyYWl0czo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3Rl ZDsKICAgICAgICAgICAgICBfX2MgPSBfX3NiLT5zbmV4dGMoKTsKICAgICAgICAgICAgfQogICAg ICAgICAgaWYgKF9fYyA9PSBfX2VvZikKICAgICAgICAgICAgX19pbi5zZXRzdGF0ZShpb3NfYmFz ZTo6ZW9mYml0KTsKICAgICAgICAgIF9faW4ud2lkdGgoMCk7CiAgICAgICAgfQoKCiAgICAgIGlm ICghX19leHRyYWN0ZWQpCiAgICAgICAgX19pbi5zZXRzdGF0ZSAoaW9zX2Jhc2U6OmZhaWxiaXQp OwoKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9DaGFyVCwg dHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgYmFzaWNfaXN0cmVhbTxfQ2hh clQsIF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4m IF9fc3RyLCBfQ2hhclQgX19kZWxpbSkKICAgIHsKICAgICAgdHlwZWRlZiBiYXNpY19pc3RyZWFt PF9DaGFyVCwgX1RyYWl0cz4gX19pc3RyZWFtX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUg X19pc3RyZWFtX3R5cGU6OmludF90eXBlIF9faW50X3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5h bWUgX19pc3RyZWFtX3R5cGU6Ol9fc3RyZWFtYnVmX3R5cGUgX19zdHJlYW1idWZfdHlwZTsKICAg ICAgdHlwZWRlZiB0eXBlbmFtZSBfX2lzdHJlYW1fdHlwZTo6X19jdHlwZV90eXBlIF9fY3R5cGVf dHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmc8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+ IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6 ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgICAgX19zaXplX3R5cGUgX19leHRyYWN0ZWQgPSAwOwog ICAgICBib29sIF9fdGVzdGRlbGltID0gZmFsc2U7CiAgICAgIHR5cGVuYW1lIF9faXN0cmVhbV90 eXBlOjpzZW50cnkgX19jZXJiKF9faW4sIHRydWUpOwogICAgICBpZiAoX19jZXJiKQogICAgICAg IHsKICAgICAgICAgIF9fc3RyLmVyYXNlKCk7CiAgICAgICAgICBfX3NpemVfdHlwZSBfX24gPSBf X3N0ci5tYXhfc2l6ZSgpOwoKICAgICAgICAgIF9faW50X3R5cGUgX19pZGVsaW0gPSBfVHJhaXRz Ojp0b19pbnRfdHlwZShfX2RlbGltKTsKICAgICAgICAgIF9fc3RyZWFtYnVmX3R5cGUqIF9fc2Ig PSBfX2luLnJkYnVmKCk7CiAgICAgICAgICBfX2ludF90eXBlIF9fYyA9IF9fc2ItPnNidW1wYygp OwogICAgICAgICAgY29uc3QgX19pbnRfdHlwZSBfX2VvZiA9IF9UcmFpdHM6OmVvZigpOwogICAg ICAgICAgX190ZXN0ZGVsaW0gPSBfVHJhaXRzOjplcV9pbnRfdHlwZShfX2MsIF9faWRlbGltKTsK CiAgICAgICAgICB3aGlsZSAoX19leHRyYWN0ZWQgPD0gX19uCiAgICAgICAgICAgICAgICAgJiYg IV9UcmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19lb2YpCiAgICAgICAgICAgICAgICAgJiYgIV9f dGVzdGRlbGltKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19zdHIgKz0gX1RyYWl0czo6 dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAgKytfX2V4dHJhY3RlZDsKICAgICAgICAg ICAgICBfX2MgPSBfX3NiLT5zYnVtcGMoKTsKICAgICAgICAgICAgICBfX3Rlc3RkZWxpbSA9IF9U cmFpdHM6OmVxX2ludF90eXBlKF9fYywgX19pZGVsaW0pOwogICAgICAgICAgICB9CiAgICAgICAg ICBpZiAoX1RyYWl0czo6ZXFfaW50X3R5cGUoX19jLCBfX2VvZikpCiAgICAgICAgICAgIF9faW4u c2V0c3RhdGUoaW9zX2Jhc2U6OmVvZmJpdCk7CiAgICAgICAgfQogICAgICBpZiAoIV9fZXh0cmFj dGVkICYmICFfX3Rlc3RkZWxpbSkKICAgICAgICBfX2luLnNldHN0YXRlKGlvc19iYXNlOjpmYWls Yml0KTsKICAgICAgcmV0dXJuIF9faW47CiAgICB9CgogIHRlbXBsYXRlPGNsYXNzIF9DaGFyVCwg Y2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgaW5saW5lIGJhc2ljX2lzdHJlYW08X0No YXJULF9UcmFpdHM+JgogICAgZ2V0bGluZShiYXNpY19pc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4m IF9faW4sCiAgICAgICAgICAgIGJhc2ljX3N0cmluZzxfQ2hhclQsX1RyYWl0cyxfQWxsb2M+JiBf X3N0cikKICAgIHsgcmV0dXJuIGdldGxpbmUoX19pbiwgX19zdHIsIF9faW4ud2lkZW4oJ1xuJykp OyB9CgoKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPGNoYXI+OwogIGV4 dGVybiB0ZW1wbGF0ZSBpc3RyZWFtJiB3cyhpc3RyZWFtJik7CiAgZXh0ZXJuIHRlbXBsYXRlIGlz dHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIGNoYXImKTsKICBleHRlcm4gdGVtcGxhdGUgaXN0 cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgY2hhciopOwogIGV4dGVybiB0ZW1wbGF0ZSBpc3Ry ZWFtJiBvcGVyYXRvcj4+KGlzdHJlYW0mLCB1bnNpZ25lZCBjaGFyJik7CiAgZXh0ZXJuIHRlbXBs YXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHNpZ25lZCBjaGFyJik7CiAgZXh0ZXJu IHRlbXBsYXRlIGlzdHJlYW0mIG9wZXJhdG9yPj4oaXN0cmVhbSYsIHVuc2lnbmVkIGNoYXIqKTsK ICBleHRlcm4gdGVtcGxhdGUgaXN0cmVhbSYgb3BlcmF0b3I+Pihpc3RyZWFtJiwgc2lnbmVkIGNo YXIqKTsKCgogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyZWFtPHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSB3aXN0cmVhbSYgd3Mod2lzdHJlYW0mKTsKICBleHRlcm4gdGVtcGxh dGUgd2lzdHJlYW0mIG9wZXJhdG9yPj4od2lzdHJlYW0mLCB3Y2hhcl90Jik7CiAgZXh0ZXJuIHRl bXBsYXRlIHdpc3RyZWFtJiBvcGVyYXRvcj4+KHdpc3RyZWFtJiwgd2NoYXJfdCopOwoKfQojIDI5 OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvaXN0cmVhbSIgMiAzCiMgNDUgIi91c3IvbG9j YWwvaW5jbHVkZS9jKysvMy4yL3NzdHJlYW0iIDIgMwoKCm5hbWVzcGFjZSBzdGQKewogIHRlbXBs YXRlPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUgX1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgog ICAgY2xhc3MgYmFzaWNfc3RyaW5nYnVmIDogcHVibGljIGJhc2ljX3N0cmVhbWJ1ZjxfQ2hhclQs IF9UcmFpdHM+CiAgICB7CiAgICBwdWJsaWM6CgogICAgICB0eXBlZGVmIF9DaGFyVCBjaGFyX3R5 cGU7CiAgICAgIHR5cGVkZWYgX1RyYWl0cyB0cmFpdHNfdHlwZTsKCgogICAgICB0eXBlZGVmIF9B bGxvYyBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6 OmludF90eXBlIGludF90eXBlOwogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpw b3NfdHlwZSBwb3NfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6b2Zm X3R5cGUgb2ZmX3R5cGU7CgoKICAgICAgdHlwZWRlZiBiYXNpY19zdHJlYW1idWY8Y2hhcl90eXBl LCB0cmFpdHNfdHlwZT4gX19zdHJlYW1idWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNpY19zdHJp bmc8Y2hhcl90eXBlLCBfVHJhaXRzLCBfQWxsb2M+IF9fc3RyaW5nX3R5cGU7CiAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgX19zdHJpbmdfdHlwZTo6c2l6ZV90eXBlIF9fc2l6ZV90eXBlOwoKICAgIHBy b3RlY3RlZDoKCiAgICAgIF9fc3RyaW5nX3R5cGUgX01fc3RyaW5nOwoKICAgIHB1YmxpYzoKCiAg ICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX3N0cmluZ2J1Zihpb3NfYmFzZTo6b3Blbm1vZGUgX19t b2RlID0gaW9zX2Jhc2U6OmluIHwgaW9zX2Jhc2U6Om91dCkKICAgICAgOiBfX3N0cmVhbWJ1Zl90 eXBlKCksIF9NX3N0cmluZygpCiAgICAgIHsgX01fc3RyaW5nYnVmX2luaXQoX19tb2RlKTsgfQoK ICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nYnVmKGNvbnN0IF9fc3RyaW5nX3R5cGUm IF9fc3RyLAogICAgICAgICAgICAgICAgICAgICAgaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9 IGlvc19iYXNlOjppbiB8IGlvc19iYXNlOjpvdXQpCiAgICAgIDogX19zdHJlYW1idWZfdHlwZSgp LCBfTV9zdHJpbmcoX19zdHIuZGF0YSgpLCBfX3N0ci5zaXplKCkpCiAgICAgIHsgX01fc3RyaW5n YnVmX2luaXQoX19tb2RlKTsgfQoKCiAgICAgIF9fc3RyaW5nX3R5cGUKICAgICAgc3RyKCkgY29u c3QKICAgICAgewogICAgICAgIGlmIChfTV9tb2RlICYgaW9zX2Jhc2U6Om91dCkKICAgICAgICAg IHsKCgoKCiAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gX01fc3RyaW5nLnNpemUoKTsK ICAgICAgICAgICAgaWYgKF9NX291dF9jdXIgPiBfTV9vdXRfYmVnKQogICAgICAgICAgICAgIF9f bGVuID0gbWF4KF9fc2l6ZV90eXBlKF9NX291dF9lbmQgLSBfTV9vdXRfYmVnKSwgX19sZW4pOwog ICAgICAgICAgICByZXR1cm4gX19zdHJpbmdfdHlwZShfTV9vdXRfYmVnLCBfTV9vdXRfYmVnICsg X19sZW4pOwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiBfTV9zdHJp bmc7CiAgICAgIH0KCiAgICAgIHZvaWQKICAgICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9f cykKICAgICAgewogICAgICAgIF9NX3N0cmluZyA9IF9fczsKICAgICAgICBfTV9zdHJpbmdidWZf aW5pdChfTV9tb2RlKTsKICAgICAgfQoKICAgIHByb3RlY3RlZDoKCiAgICAgIHZvaWQKICAgICAg X01fc3RyaW5nYnVmX2luaXQoaW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSkKICAgICAgewoKCgoK CiAgICAgICAgX01fYnVmX3NpemUgPSBfTV9zdHJpbmcuc2l6ZSgpOwoKCgoKCiAgICAgICAgX01f YnVmX3NpemVfb3B0ID0gNTEyOwogICAgICAgIF9NX21vZGUgPSBfX21vZGU7CiAgICAgICAgaWYg KF9NX21vZGUgJiAoaW9zX2Jhc2U6OmF0ZSB8IGlvc19iYXNlOjphcHApKQogICAgICAgICAgX01f cmVhbGx5X3N5bmMoMCwgX01fYnVmX3NpemUpOwogICAgICAgIGVsc2UKICAgICAgICAgIF9NX3Jl YWxseV9zeW5jKDAsIDApOwogICAgICB9CgoKICAgICAgdmlydHVhbCBpbnRfdHlwZQogICAgICB1 bmRlcmZsb3coKQogICAgICB7CiAgICAgICAgaWYgKF9NX2luX2N1ciAmJiBfTV9pbl9jdXIgPCBf TV9pbl9lbmQpCiAgICAgICAgICByZXR1cm4gdHJhaXRzX3R5cGU6OnRvX2ludF90eXBlKCpncHRy KCkpOwogICAgICAgIGVsc2UKICAgICAgICAgIHJldHVybiB0cmFpdHNfdHlwZTo6ZW9mKCk7CiAg ICAgIH0KCiAgICAgIHZpcnR1YWwgaW50X3R5cGUKICAgICAgcGJhY2tmYWlsKGludF90eXBlIF9f YyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFsIGludF90eXBlCiAgICAgIG92 ZXJmbG93KGludF90eXBlIF9fYyA9IHRyYWl0c190eXBlOjplb2YoKSk7CgogICAgICB2aXJ0dWFs IF9fc3RyZWFtYnVmX3R5cGUqCiAgICAgIHNldGJ1ZihjaGFyX3R5cGUqIF9fcywgc3RyZWFtc2l6 ZSBfX24pCiAgICAgIHsKICAgICAgICBpZiAoX19zICYmIF9fbikKICAgICAgICAgIHsKICAgICAg ICAgICAgX01fc3RyaW5nID0gX19zdHJpbmdfdHlwZShfX3MsIF9fbik7CiAgICAgICAgICAgIF9N X3JlYWxseV9zeW5jKDAsIDApOwogICAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzOwogICAg ICB9CgogICAgICB2aXJ0dWFsIHBvc190eXBlCiAgICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYs IGlvc19iYXNlOjpzZWVrZGlyIF9fd2F5LAogICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9k ZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCiAgICAgIHZpcnR1YWwg cG9zX3R5cGUKICAgICAgc2Vla3Bvcyhwb3NfdHlwZSBfX3NwLAogICAgICAgICAgICAgIGlvc19i YXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4gfCBpb3NfYmFzZTo6b3V0KTsKCgoK CgoKCiAgICAgIHZpcnR1YWwgaW50CiAgICAgIF9NX3JlYWxseV9zeW5jKF9fc2l6ZV90eXBlIF9f aSwgX19zaXplX3R5cGUgX19vKQogICAgICB7CiAgICAgICAgY2hhcl90eXBlKiBfX2Jhc2UgPSBj b25zdF9jYXN0PGNoYXJfdHlwZSo+KF9NX3N0cmluZy5kYXRhKCkpOwogICAgICAgIGJvb2wgX190 ZXN0aW4gPSBfTV9tb2RlICYgaW9zX2Jhc2U6OmluOwogICAgICAgIGJvb2wgX190ZXN0b3V0ID0g X01fbW9kZSAmIGlvc19iYXNlOjpvdXQ7CiAgICAgICAgX19zaXplX3R5cGUgX19sZW4gPSBfTV9z dHJpbmcuc2l6ZSgpOwoKICAgICAgICBfTV9idWYgPSBfX2Jhc2U7CiAgICAgICAgaWYgKF9fdGVz dGluKQogICAgICAgICAgICB0aGlzLT5zZXRnKF9fYmFzZSwgX19iYXNlICsgX19pLCBfX2Jhc2Ug KyBfX2xlbik7CiAgICAgICAgaWYgKF9fdGVzdG91dCkKICAgICAgICAgIHsKICAgICAgICAgICAg dGhpcy0+c2V0cChfX2Jhc2UsIF9fYmFzZSArIF9fbGVuKTsKICAgICAgICAgICAgX01fb3V0X2N1 ciArPSBfX287CiAgICAgICAgICB9CiAgICAgICAgcmV0dXJuIDA7CiAgICAgIH0KICAgIH07CgoK CiAgdGVtcGxhdGU8dHlwZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBf QWxsb2M+CiAgICBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtIDogcHVibGljIGJhc2ljX2lzdHJl YW08X0NoYXJULCBfVHJhaXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hh clQgY2hhcl90eXBlOwogICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAg dHlwZWRlZiBfQWxsb2MgYWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRy YWl0c190eXBlOjppbnRfdHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFp dHNfdHlwZTo6cG9zX3R5cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRz X3R5cGU6Om9mZl90eXBlIG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9D aGFyVCwgX1RyYWl0cywgX0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2lj X3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAg ICAgdHlwZWRlZiBiYXNpY19pc3RyZWFtPGNoYXJfdHlwZSwgdHJhaXRzX3R5cGU+IF9faXN0cmVh bV90eXBlOwoKICAgIHByaXZhdGU6CiAgICAgIF9fc3RyaW5nYnVmX3R5cGUgX01fc3RyaW5nYnVm OwoKICAgIHB1YmxpYzoKCiAgICAgIGV4cGxpY2l0CiAgICAgIGJhc2ljX2lzdHJpbmdzdHJlYW0o aW9zX2Jhc2U6Om9wZW5tb2RlIF9fbW9kZSA9IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lzdHJl YW1fdHlwZSgwKSwgX01fc3RyaW5nYnVmKF9fbW9kZSB8IGlvc19iYXNlOjppbikKICAgICAgeyB0 aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19p c3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fc3RyLAogICAgICAgICAgICAgICAg ICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6aW4pCiAgICAg IDogX19pc3RyZWFtX3R5cGUoMCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tb2RlIHwgaW9zX2Jh c2U6OmluKQogICAgICB7IHRoaXMtPmluaXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNp Y19pc3RyaW5nc3RyZWFtKCkKICAgICAgeyB9CgoKICAgICAgX19zdHJpbmdidWZfdHlwZSoKICAg ICAgcmRidWYoKSBjb25zdAogICAgICB7IHJldHVybiBjb25zdF9jYXN0PF9fc3RyaW5nYnVmX3R5 cGUqPigmX01fc3RyaW5nYnVmKTsgfQoKICAgICAgX19zdHJpbmdfdHlwZQogICAgICBzdHIoKSBj b25zdAogICAgICB7IHJldHVybiBfTV9zdHJpbmdidWYuc3RyKCk7IH0KCiAgICAgIHZvaWQKICAg ICAgc3RyKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9fcykKICAgICAgeyBfTV9zdHJpbmdidWYuc3Ry KF9fcyk7IH0KICAgIH07CgoKCiAgdGVtcGxhdGUgPHR5cGVuYW1lIF9DaGFyVCwgdHlwZW5hbWUg X1RyYWl0cywgdHlwZW5hbWUgX0FsbG9jPgogICAgY2xhc3MgYmFzaWNfb3N0cmluZ3N0cmVhbSA6 IHB1YmxpYyBiYXNpY19vc3RyZWFtPF9DaGFyVCwgX1RyYWl0cz4KICAgIHsKICAgIHB1YmxpYzoK CiAgICAgIHR5cGVkZWYgX0NoYXJUIGNoYXJfdHlwZTsKICAgICAgdHlwZWRlZiBfVHJhaXRzIHRy YWl0c190eXBlOwoKCiAgICAgIHR5cGVkZWYgX0FsbG9jIGFsbG9jYXRvcl90eXBlOwoKICAgICAg dHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6aW50X3R5cGUgaW50X3R5cGU7CiAgICAgIHR5 cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6OnBvc190eXBlIHBvc190eXBlOwogICAgICB0eXBl ZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjpvZmZfdHlwZSBvZmZfdHlwZTsKCgogICAgICB0eXBl ZGVmIGJhc2ljX3N0cmluZzxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdfdHlwZTsK ICAgICAgdHlwZWRlZiBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+IF9f c3RyaW5nYnVmX3R5cGU7CiAgICAgIHR5cGVkZWYgYmFzaWNfb3N0cmVhbTxjaGFyX3R5cGUsIHRy YWl0c190eXBlPiBfX29zdHJlYW1fdHlwZTsKCiAgICBwcml2YXRlOgogICAgICBfX3N0cmluZ2J1 Zl90eXBlIF9NX3N0cmluZ2J1ZjsKCiAgICBwdWJsaWM6CgogICAgICBleHBsaWNpdAogICAgICBi YXNpY19vc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUgPSBpb3NfYmFzZTo6 b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBlKDApLCBfTV9zdHJpbmdidWYoX19tb2RlIHwgaW9z X2Jhc2U6Om91dCkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBl eHBsaWNpdAogICAgICBiYXNpY19vc3RyaW5nc3RyZWFtKGNvbnN0IF9fc3RyaW5nX3R5cGUmIF9f c3RyLAogICAgICAgICAgICAgICAgICAgICAgICAgIGlvc19iYXNlOjpvcGVubW9kZSBfX21vZGUg PSBpb3NfYmFzZTo6b3V0KQogICAgICA6IF9fb3N0cmVhbV90eXBlKDApLCBfTV9zdHJpbmdidWYo X19zdHIsIF9fbW9kZSB8IGlvc19iYXNlOjpvdXQpCiAgICAgIHsgdGhpcy0+aW5pdCgmX01fc3Ry aW5nYnVmKTsgfQoKICAgICAgfmJhc2ljX29zdHJpbmdzdHJlYW0oKQogICAgICB7IH0KCgogICAg ICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIGNv bnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9CgogICAgICBfX3N0 cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0cmluZ2J1Zi5z dHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlwZSYgX19zKQog ICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKCgoKICB0ZW1wbGF0ZSA8dHlw ZW5hbWUgX0NoYXJULCB0eXBlbmFtZSBfVHJhaXRzLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBjbGFz cyBiYXNpY19zdHJpbmdzdHJlYW0gOiBwdWJsaWMgYmFzaWNfaW9zdHJlYW08X0NoYXJULCBfVHJh aXRzPgogICAgewogICAgcHVibGljOgoKICAgICAgdHlwZWRlZiBfQ2hhclQgY2hhcl90eXBlOwog ICAgICB0eXBlZGVmIF9UcmFpdHMgdHJhaXRzX3R5cGU7CgoKICAgICAgdHlwZWRlZiBfQWxsb2Mg YWxsb2NhdG9yX3R5cGU7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIHRyYWl0c190eXBlOjppbnRf dHlwZSBpbnRfdHlwZTsKICAgICAgdHlwZWRlZiB0eXBlbmFtZSB0cmFpdHNfdHlwZTo6cG9zX3R5 cGUgcG9zX3R5cGU7CiAgICAgIHR5cGVkZWYgdHlwZW5hbWUgdHJhaXRzX3R5cGU6Om9mZl90eXBl IG9mZl90eXBlOwoKCiAgICAgIHR5cGVkZWYgYmFzaWNfc3RyaW5nPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPiBfX3N0cmluZ190eXBlOwogICAgICB0eXBlZGVmIGJhc2ljX3N0cmluZ2J1ZjxfQ2hh clQsIF9UcmFpdHMsIF9BbGxvYz4gX19zdHJpbmdidWZfdHlwZTsKICAgICAgdHlwZWRlZiBiYXNp Y19pb3N0cmVhbTxjaGFyX3R5cGUsIHRyYWl0c190eXBlPiBfX2lvc3RyZWFtX3R5cGU7CgogICAg cHJpdmF0ZToKICAgICAgX19zdHJpbmdidWZfdHlwZSBfTV9zdHJpbmdidWY7CgogICAgcHVibGlj OgoKICAgICAgZXhwbGljaXQKICAgICAgYmFzaWNfc3RyaW5nc3RyZWFtKGlvc19iYXNlOjpvcGVu bW9kZSBfX20gPSBpb3NfYmFzZTo6b3V0IHwgaW9zX2Jhc2U6OmluKQogICAgICA6IF9faW9zdHJl YW1fdHlwZSgwKSwgX01fc3RyaW5nYnVmKF9fbSkKICAgICAgeyB0aGlzLT5pbml0KCZfTV9zdHJp bmdidWYpOyB9CgogICAgICBleHBsaWNpdAogICAgICBiYXNpY19zdHJpbmdzdHJlYW0oY29uc3Qg X19zdHJpbmdfdHlwZSYgX19zdHIsCiAgICAgICAgICAgICAgICAgICAgICAgICBpb3NfYmFzZTo6 b3Blbm1vZGUgX19tID0gaW9zX2Jhc2U6Om91dCB8IGlvc19iYXNlOjppbikKICAgICAgOiBfX2lv c3RyZWFtX3R5cGUoMCksIF9NX3N0cmluZ2J1ZihfX3N0ciwgX19tKQogICAgICB7IHRoaXMtPmlu aXQoJl9NX3N0cmluZ2J1Zik7IH0KCiAgICAgIH5iYXNpY19zdHJpbmdzdHJlYW0oKQogICAgICB7 IH0KCgogICAgICBfX3N0cmluZ2J1Zl90eXBlKgogICAgICByZGJ1ZigpIGNvbnN0CiAgICAgIHsg cmV0dXJuIGNvbnN0X2Nhc3Q8X19zdHJpbmdidWZfdHlwZSo+KCZfTV9zdHJpbmdidWYpOyB9Cgog ICAgICBfX3N0cmluZ190eXBlCiAgICAgIHN0cigpIGNvbnN0CiAgICAgIHsgcmV0dXJuIF9NX3N0 cmluZ2J1Zi5zdHIoKTsgfQoKICAgICAgdm9pZAogICAgICBzdHIoY29uc3QgX19zdHJpbmdfdHlw ZSYgX19zKQogICAgICB7IF9NX3N0cmluZ2J1Zi5zdHIoX19zKTsgfQogICAgfTsKfQoKCgoKCiMg MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zc3RyZWFtLnRjYyIgMSAzCiMgMzkg Ii91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDMKCiMgMSAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMSAzCiMgNDEgIi91c3IvbG9jYWwvaW5j bHVkZS9jKysvMy4yL2JpdHMvc3N0cmVhbS50Y2MiIDIgMwoKbmFtZXNwYWNlIHN0ZAp7CiAgdGVt cGxhdGUgPGNsYXNzIF9DaGFyVCwgY2xhc3MgX1RyYWl0cywgY2xhc3MgX0FsbG9jPgogICAgdHlw ZW5hbWUgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywgX0FsbG9jPjo6aW50X3R5cGUK ICAgIGJhc2ljX3N0cmluZ2J1ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OgogICAgcGJhY2tm YWlsKGludF90eXBlIF9fYykKICAgIHsKICAgICAgaW50X3R5cGUgX19yZXQgPSB0cmFpdHNfdHlw ZTo6ZW9mKCk7CiAgICAgIGJvb2wgX190ZXN0ZW9mID0gdHJhaXRzX3R5cGU6OmVxX2ludF90eXBl KF9fYywgdHJhaXRzX3R5cGU6OmVvZigpKTsKICAgICAgYm9vbCBfX3Rlc3Rwb3MgPSBfTV9pbl9j dXIgJiYgX01faW5fYmVnIDwgX01faW5fY3VyOwoKCgogICAgICBpZiAoX190ZXN0cG9zKQogICAg ICAgIHsKICAgICAgICAgIGlmICh0cmFpdHNfdHlwZTo6ZXEodHJhaXRzX3R5cGU6OnRvX2NoYXJf dHlwZShfX2MpLCB0aGlzLT5ncHRyKClbLTFdKQogICAgICAgICAgICAgICYmICFfX3Rlc3Rlb2Yp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAtLV9NX2luX2N1cjsKICAgICAgICAgICAgICBf X3JldCA9IF9fYzsKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZSBpZiAoIV9fdGVzdGVvZikK ICAgICAgICAgICAgewogICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgICpf TV9pbl9jdXIgPSB0cmFpdHNfdHlwZTo6dG9fY2hhcl90eXBlKF9fYyk7CiAgICAgICAgICAgICAg X19yZXQgPSBfX2M7CiAgICAgICAgICAgIH0KICAgICAgICAgIGVsc2UgaWYgKF9fdGVzdGVvZikK ICAgICAgICAgICAgewogICAgICAgICAgICAgIC0tX01faW5fY3VyOwogICAgICAgICAgICAgIF9f cmV0ID0gdHJhaXRzX3R5cGU6Om5vdF9lb2YoX19jKTsKICAgICAgICAgICAgfQogICAgICAgIH0K ICAgICAgcmV0dXJuIF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFz cyBfVHJhaXRzLCBjbGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0No YXJULCBfVHJhaXRzLCBfQWxsb2M+OjppbnRfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFy VCwgX1RyYWl0cywgX0FsbG9jPjo6CiAgICBvdmVyZmxvdyhpbnRfdHlwZSBfX2MpCiAgICB7CiAg ICAgIGludF90eXBlIF9fcmV0ID0gdHJhaXRzX3R5cGU6OmVvZigpOwogICAgICBib29sIF9fdGVz dGVvZiA9IHRyYWl0c190eXBlOjplcV9pbnRfdHlwZShfX2MsIF9fcmV0KTsKICAgICAgYm9vbCBf X3Rlc3R3cml0ZSA9IF9NX291dF9jdXIgPCBfTV9idWYgKyBfTV9idWZfc2l6ZTsKICAgICAgYm9v bCBfX3Rlc3RvdXQgPSBfTV9tb2RlICYgaW9zX2Jhc2U6Om91dDsKCgoKICAgICAgaWYgKF9fdGVz dG91dCkKICAgICAgICB7CiAgICAgICAgICBpZiAoIV9fdGVzdGVvZikKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fc2l6ZV90eXBlIF9fbGVuID0gbWF4KF9NX2J1Zl9zaXplLCBfTV9idWZf c2l6ZV9vcHQpOwogICAgICAgICAgICAgIF9fbGVuICo9IDI7CgogICAgICAgICAgICAgIGlmIChf X3Rlc3R3cml0ZSkKICAgICAgICAgICAgICAgIF9fcmV0ID0gdGhpcy0+c3B1dGModHJhaXRzX3R5 cGU6OnRvX2NoYXJfdHlwZShfX2MpKTsKICAgICAgICAgICAgICBlbHNlIGlmIChfX2xlbiA8PSBf TV9zdHJpbmcubWF4X3NpemUoKSkKICAgICAgICAgICAgICAgIHsKCiAgICAgICAgICAgICAgICAg IF9NX3N0cmluZyA9IHRoaXMtPnN0cigpOwogICAgICAgICAgICAgICAgICBfTV9zdHJpbmcucmVz ZXJ2ZShfX2xlbik7CiAgICAgICAgICAgICAgICAgIF9NX2J1Zl9zaXplID0gX19sZW47CiAgICAg ICAgICAgICAgICAgIF9NX3JlYWxseV9zeW5jKF9NX2luX2N1ciAtIF9NX2luX2JlZywKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgX01fb3V0X2N1ciAtIF9NX291dF9iZWcpOwogICAg ICAgICAgICAgICAgICAqX01fb3V0X2N1ciA9IHRyYWl0c190eXBlOjp0b19jaGFyX3R5cGUoX19j KTsKICAgICAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKDEpOwogICAgICAgICAgICAgICAg ICBfX3JldCA9IF9fYzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAg ZWxzZQogICAgICAgICAgICBfX3JldCA9IHRyYWl0c190eXBlOjpub3RfZW9mKF9fYyk7CiAgICAg ICAgfQogICAgICByZXR1cm4gX19yZXQ7CiAgICB9CgogIHRlbXBsYXRlIDxjbGFzcyBfQ2hhclQs IGNsYXNzIF9UcmFpdHMsIGNsYXNzIF9BbGxvYz4KICAgIHR5cGVuYW1lIGJhc2ljX3N0cmluZ2J1 ZjxfQ2hhclQsIF9UcmFpdHMsIF9BbGxvYz46OnBvc190eXBlCiAgICBiYXNpY19zdHJpbmdidWY8 X0NoYXJULCBfVHJhaXRzLCBfQWxsb2M+OjoKICAgIHNlZWtvZmYob2ZmX3R5cGUgX19vZmYsIGlv c19iYXNlOjpzZWVrZGlyIF9fd2F5LCBpb3NfYmFzZTo6b3Blbm1vZGUgX19tb2RlKQogICAgewog ICAgICBwb3NfdHlwZSBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKC0xKSk7CiAgICAgIGJvb2wg X190ZXN0aW4gPSAoaW9zX2Jhc2U6OmluICYgX01fbW9kZSAmIF9fbW9kZSkgIT0gMDsKICAgICAg Ym9vbCBfX3Rlc3RvdXQgPSAoaW9zX2Jhc2U6Om91dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7 CiAgICAgIGJvb2wgX190ZXN0Ym90aCA9IF9fdGVzdGluICYmIF9fdGVzdG91dCAmJiBfX3dheSAh PSBpb3NfYmFzZTo6Y3VyOwogICAgICBfX3Rlc3RpbiAmPSAhKF9fbW9kZSAmIGlvc19iYXNlOjpv dXQpOwogICAgICBfX3Rlc3RvdXQgJj0gIShfX21vZGUgJiBpb3NfYmFzZTo6aW4pOwoKICAgICAg aWYgKF9NX2J1Zl9zaXplICYmIChfX3Rlc3RpbiB8fCBfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkp CiAgICAgICAgewogICAgICAgICAgY2hhcl90eXBlKiBfX2JlZyA9IF9NX2J1ZjsKICAgICAgICAg IGNoYXJfdHlwZSogX19jdXJpID0gMDsKICAgICAgICAgIGNoYXJfdHlwZSogX19jdXJvID0gMDsK ICAgICAgICAgIGNoYXJfdHlwZSogX19lbmRpID0gMDsKICAgICAgICAgIGNoYXJfdHlwZSogX19l bmRvID0gMDsKCiAgICAgICAgICBpZiAoX190ZXN0aW4gfHwgX190ZXN0Ym90aCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgIF9fY3VyaSA9IHRoaXMtPmdwdHIoKTsKICAgICAgICAgICAgICBf X2VuZGkgPSB0aGlzLT5lZ3B0cigpOwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX190ZXN0 b3V0IHx8IF9fdGVzdGJvdGgpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX2N1cm8gPSB0 aGlzLT5wcHRyKCk7CiAgICAgICAgICAgICAgX19lbmRvID0gdGhpcy0+ZXBwdHIoKTsKICAgICAg ICAgICAgfQoKICAgICAgICAgIG9mZl90eXBlIF9fbmV3b2ZmaSA9IDA7CiAgICAgICAgICBvZmZf dHlwZSBfX25ld29mZm8gPSAwOwogICAgICAgICAgaWYgKF9fd2F5ID09IGlvc19iYXNlOjpjdXIp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBfX25ld29mZmkgPSBfX2N1cmkgLSBfX2JlZzsK ICAgICAgICAgICAgICBfX25ld29mZm8gPSBfX2N1cm8gLSBfX2JlZzsKICAgICAgICAgICAgfQog ICAgICAgICAgZWxzZSBpZiAoX193YXkgPT0gaW9zX2Jhc2U6OmVuZCkKICAgICAgICAgICAgewog ICAgICAgICAgICAgIF9fbmV3b2ZmaSA9IF9fZW5kaSAtIF9fYmVnOwogICAgICAgICAgICAgIF9f bmV3b2ZmbyA9IF9fZW5kbyAtIF9fYmVnOwogICAgICAgICAgICB9CgogICAgICAgICAgaWYgKChf X3Rlc3RpbiB8fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICAgICYmIF9fbmV3b2ZmaSArIF9fb2Zm ID49IDAgJiYgX19lbmRpIC0gX19iZWcgPj0gX19uZXdvZmZpICsgX19vZmYpCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfTV9pbl9jdXIgPSBfX2JlZyArIF9fbmV3b2ZmaSArIF9fb2ZmOwog ICAgICAgICAgICAgIF9fcmV0ID0gcG9zX3R5cGUoX19uZXdvZmZpKTsKICAgICAgICAgICAgfQog ICAgICAgICAgaWYgKChfX3Rlc3RvdXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgICAmJiBf X25ld29mZm8gKyBfX29mZiA+PSAwICYmIF9fZW5kbyAtIF9fYmVnID49IF9fbmV3b2ZmbyArIF9f b2ZmKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fb3V0X2N1cl9tb3ZlKF9fbmV3b2Zm byArIF9fb2ZmIC0gKF9NX291dF9jdXIgLSBfX2JlZykpOwogICAgICAgICAgICAgIF9fcmV0ID0g cG9zX3R5cGUoX19uZXdvZmZvKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgcmV0dXJu IF9fcmV0OwogICAgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0NoYXJULCBjbGFzcyBfVHJhaXRzLCBj bGFzcyBfQWxsb2M+CiAgICB0eXBlbmFtZSBiYXNpY19zdHJpbmdidWY8X0NoYXJULCBfVHJhaXRz LCBfQWxsb2M+Ojpwb3NfdHlwZQogICAgYmFzaWNfc3RyaW5nYnVmPF9DaGFyVCwgX1RyYWl0cywg X0FsbG9jPjo6CiAgICBzZWVrcG9zKHBvc190eXBlIF9fc3AsIGlvc19iYXNlOjpvcGVubW9kZSBf X21vZGUpCiAgICB7CiAgICAgIHBvc190eXBlIF9fcmV0ID0gcG9zX3R5cGUob2ZmX3R5cGUoLTEp KTsKCiAgICAgIGlmIChfTV9idWZfc2l6ZSkKICAgICAgICB7CiAgICAgICAgICBvZmZfdHlwZSBf X3BvcyA9IF9fc3A7CiAgICAgICAgICBjaGFyX3R5cGUqIF9fYmVnID0gMDsKICAgICAgICAgIGNo YXJfdHlwZSogX19lbmQgPSAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RpbiA9IChpb3NfYmFzZTo6 aW4gJiBfTV9tb2RlICYgX19tb2RlKSAhPSAwOwogICAgICAgICAgYm9vbCBfX3Rlc3RvdXQgPSAo aW9zX2Jhc2U6Om91dCAmIF9NX21vZGUgJiBfX21vZGUpICE9IDA7CiAgICAgICAgICBib29sIF9f dGVzdGJvdGggPSBfX3Rlc3RpbiAmJiBfX3Rlc3RvdXQ7CiAgICAgICAgICBfX3Rlc3RpbiAmPSAh KF9fbW9kZSAmIGlvc19iYXNlOjpvdXQpOwogICAgICAgICAgX190ZXN0b3V0ICY9ICEoX19tb2Rl ICYgaW9zX2Jhc2U6OmluKTsKCgogICAgICAgICAgYm9vbCBfX3Rlc3Rwb3NpID0gZmFsc2U7CiAg ICAgICAgICBib29sIF9fdGVzdHBvc28gPSBmYWxzZTsKICAgICAgICAgIGlmIChfX3Rlc3RpbiB8 fCBfX3Rlc3Rib3RoKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX19iZWcgPSB0aGlzLT5l YmFjaygpOwogICAgICAgICAgICAgIF9fZW5kID0gdGhpcy0+ZWdwdHIoKTsKICAgICAgICAgICAg ICBpZiAoMCA8PSBfX3BvcyAmJiBfX3BvcyA8PSBfX2VuZCAtIF9fYmVnKQogICAgICAgICAgICAg ICAgX190ZXN0cG9zaSA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgIGlmIChfX3Rlc3Rv dXQgfHwgX190ZXN0Ym90aCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9fYmVnID0gdGhp cy0+cGJhc2UoKTsKICAgICAgICAgICAgICBfX2VuZCA9IF9NX2J1ZiArIF9NX2J1Zl9zaXplOwog ICAgICAgICAgICAgIGlmICgwIDw9IF9fcG9zICYmIF9fcG9zIDw9IF9fZW5kIC0gX19iZWcpCiAg ICAgICAgICAgICAgICBfX3Rlc3Rwb3NvID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAg aWYgKF9fdGVzdHBvc2kgfHwgX190ZXN0cG9zbykKICAgICAgICAgICAgewogICAgICAgICAgICAg IGlmIChfX3Rlc3Rwb3NpKQogICAgICAgICAgICAgICAgX01faW5fY3VyID0gX01faW5fYmVnICsg X19wb3M7CiAgICAgICAgICAgICAgaWYgKF9fdGVzdHBvc28pCiAgICAgICAgICAgICAgICBfTV9v dXRfY3VyX21vdmUoKF9fcG9zKSAtIChfTV9vdXRfY3VyIC0gX19iZWcpKTsKICAgICAgICAgICAg ICBfX3JldCA9IHBvc190eXBlKG9mZl90eXBlKF9fcG9zKSk7CiAgICAgICAgICAgIH0KICAgICAg ICB9CiAgICAgIHJldHVybiBfX3JldDsKICAgIH0KCgoKCiAgZXh0ZXJuIHRlbXBsYXRlIGNsYXNz IGJhc2ljX3N0cmluZ2J1ZjxjaGFyPjsKICBleHRlcm4gdGVtcGxhdGUgY2xhc3MgYmFzaWNfc3Ry aW5nYnVmPHdjaGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3Ry ZWFtPGNoYXI+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19pc3RyaW5nc3RyZWFtPHdj aGFyX3Q+OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPGNoYXI+ OwogIGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19vc3RyaW5nc3RyZWFtPHdjaGFyX3Q+Owog IGV4dGVybiB0ZW1wbGF0ZSBjbGFzcyBiYXNpY19zdHJpbmdzdHJlYW08Y2hhcj47CiAgZXh0ZXJu IHRlbXBsYXRlIGNsYXNzIGJhc2ljX3N0cmluZ3N0cmVhbTx3Y2hhcl90PjsKfQojIDM2OCAiL3Vz ci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvc3N0cmVhbSIgMiAzCiMgMjcgIi91c3IvbG9jYWwvc3Jj L2Jvb3N0L2Jvb3N0L2xleGljYWxfY2FzdC5ocHAiIDIKIyA0MSAiL3Vzci9sb2NhbC9zcmMvYm9v c3QvYm9vc3QvbGV4aWNhbF9jYXN0LmhwcCIKbmFtZXNwYWNlIGJvb3N0CnsKCiAgICBjbGFzcyBi YWRfbGV4aWNhbF9jYXN0IDogcHVibGljIHN0ZDo6YmFkX2Nhc3QKICAgIHsKICAgIHB1YmxpYzoK ICAgICAgICB2aXJ0dWFsIH5iYWRfbGV4aWNhbF9jYXN0KCkgdGhyb3coKQogICAgICAgIHsKICAg ICAgICB9CiAgICB9OwoKICAgIG5hbWVzcGFjZSBkZXRhaWwKICAgIHsKICAgICAgICB0ZW1wbGF0 ZTx0eXBlbmFtZSBUYXJnZXQsIHR5cGVuYW1lIFNvdXJjZT4KICAgICAgICBjbGFzcyBub19sZXhp Y2FsX2NvbnZlcnNpb24gOiBwdWJsaWMgYmFkX2xleGljYWxfY2FzdAogICAgICAgIHsKICAgICAg ICBwdWJsaWM6CiAgICAgICAgICAgIG5vX2xleGljYWxfY29udmVyc2lvbigpCiAgICAgICAgICAg ICAgOiBkZXNjcmlwdGlvbigKICAgICAgICAgICAgICAgICAgc3RkOjpzdHJpbmcoKSArICJiYWQg bGV4aWNhbCBjYXN0OiAiICsKICAgICAgICAgICAgICAgICAgInNvdXJjZSB0eXBlIHZhbHVlIGNv dWxkIG5vdCBiZSBpbnRlcnByZXRlZCBhcyB0YXJnZXQsIFRhcmdldD0iICsKICAgICAgICAgICAg ICAgICAgdHlwZWlkKFRhcmdldCkubmFtZSgpICsgIiwgU291cmNlPSIgKyB0eXBlaWQoU291cmNl KS5uYW1lKCkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgfQogICAgICAgICAgICB2aXJ0dWFs IH5ub19sZXhpY2FsX2NvbnZlcnNpb24oKSB0aHJvdygpCiAgICAgICAgICAgIHsKICAgICAgICAg ICAgfQogICAgICAgICAgICB2aXJ0dWFsIGNvbnN0IGNoYXIgKndoYXQoKSBjb25zdCB0aHJvdygp CiAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgIHJldHVybiBkZXNjcmlwdGlvbi5jX3N0cigp OwogICAgICAgICAgICB9CiAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgY29uc3Qgc3RkOjpz dHJpbmcgZGVzY3JpcHRpb247CiAgICAgICAgfTsKICAgIH0KCiAgICBuYW1lc3BhY2UgZGV0YWls CiAgICB7CiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KICAgICAgICBzdHJ1Y3Qgc3Ry ZWFtX2NoYXIKICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgY2hhciB0eXBlOwogICAgICAg IH07CgoKICAgICAgICB0ZW1wbGF0ZTw+CiAgICAgICAgc3RydWN0IHN0cmVhbV9jaGFyPHdjaGFy X3Q+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIHdjaGFyX3QgdHlwZTsKICAgICAgICB9 OwoKICAgICAgICB0ZW1wbGF0ZTw+CiAgICAgICAgc3RydWN0IHN0cmVhbV9jaGFyPHdjaGFyX3Qg Kj4KICAgICAgICB7CiAgICAgICAgICAgIHR5cGVkZWYgd2NoYXJfdCB0eXBlOwogICAgICAgIH07 CgogICAgICAgIHRlbXBsYXRlPD4KICAgICAgICBzdHJ1Y3Qgc3RyZWFtX2NoYXI8Y29uc3Qgd2No YXJfdCAqPgogICAgICAgIHsKICAgICAgICAgICAgdHlwZWRlZiB3Y2hhcl90IHR5cGU7CiAgICAg ICAgfTsKCiAgICAgICAgdGVtcGxhdGU8PgogICAgICAgIHN0cnVjdCBzdHJlYW1fY2hhcjxzdGQ6 OndzdHJpbmc+CiAgICAgICAgewogICAgICAgICAgICB0eXBlZGVmIHdjaGFyX3QgdHlwZTsKICAg ICAgICB9OwoKCiAgICAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVGFyZ2V0Q2hhciwgdHlwZW5hbWUg U291cmNlQ2hhcj4KICAgICAgICBzdHJ1Y3Qgd2lkZXN0X2NoYXIKICAgICAgICB7CiAgICAgICAg ICAgIHR5cGVkZWYgVGFyZ2V0Q2hhciB0eXBlOwogICAgICAgIH07CgogICAgICAgIHRlbXBsYXRl PD4KICAgICAgICBzdHJ1Y3Qgd2lkZXN0X2NoYXI8Y2hhciwgd2NoYXJfdD4KICAgICAgICB7CiAg ICAgICAgICAgIHR5cGVkZWYgd2NoYXJfdCB0eXBlOwogICAgICAgIH07CiAgICB9CgogICAgbmFt ZXNwYWNlIGRldGFpbAogICAgewogICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlw ZW5hbWUgU291cmNlPgogICAgICAgIGNsYXNzIGxleGljYWxfc3RyZWFtCiAgICAgICAgewogICAg ICAgIHB1YmxpYzoKICAgICAgICAgICAgbGV4aWNhbF9zdHJlYW0oKQogICAgICAgICAgICB7CiAg ICAgICAgICAgICAgICBzdHJlYW0udW5zZXRmKHN0ZDo6aW9zOjpza2lwd3MpOwoKICAgICAgICAg ICAgICAgIGlmKHN0ZDo6bnVtZXJpY19saW1pdHM8VGFyZ2V0Pjo6aXNfc3BlY2lhbGl6ZWQpCiAg ICAgICAgICAgICAgICAgICAgc3RyZWFtLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPFRh cmdldD46OmRpZ2l0czEwICsgMSk7CiAgICAgICAgICAgICAgICBlbHNlIGlmKHN0ZDo6bnVtZXJp Y19saW1pdHM8U291cmNlPjo6aXNfc3BlY2lhbGl6ZWQpCiAgICAgICAgICAgICAgICAgICAgc3Ry ZWFtLnByZWNpc2lvbihzdGQ6Om51bWVyaWNfbGltaXRzPFNvdXJjZT46OmRpZ2l0czEwICsgMSk7 CiAgICAgICAgICAgIH0KICAgICAgICAgICAgfmxleGljYWxfc3RyZWFtKCkKICAgICAgICAgICAg ewoKCgogICAgICAgICAgICB9CiAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I8PChjb25zdCBTb3Vy Y2UgJmlucHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gc3RyZWFtIDw8 IGlucHV0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRlbXBsYXRlPHR5cGVuYW1lIElucHV0 U3RyZWFtYWJsZT4KICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj4+KElucHV0U3RyZWFtYWJsZSAm b3V0cHV0KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICByZXR1cm4gIWlzX3BvaW50ZXI8 SW5wdXRTdHJlYW1hYmxlPjo6dmFsdWUgJiYKICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW0g Pj4gb3V0cHV0ICYmCiAgICAgICAgICAgICAgICAgICAgICAgKHN0cmVhbSA+PiBzdGQ6OndzKS5l b2YoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBib29sIG9wZXJhdG9yPj4oc3RkOjpzdHJp bmcgJm91dHB1dCkKICAgICAgICAgICAgewoKCgogICAgICAgICAgICAgICAgb3V0cHV0ID0gc3Ry ZWFtLnN0cigpOwogICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAg ICAgICAgICAgIGJvb2wgb3BlcmF0b3I+PihzdGQ6OndzdHJpbmcgJm91dHB1dCkKICAgICAgICAg ICAgewogICAgICAgICAgICAgICAgb3V0cHV0ID0gc3RyZWFtLnN0cigpOwogICAgICAgICAgICAg ICAgcmV0dXJuIHRydWU7CiAgICAgICAgICAgIH0KCiAgICAgICAgcHJpdmF0ZToKICAgICAgICAg ICAgdHlwZWRlZiB0eXBlbmFtZSB3aWRlc3RfY2hhcjwKICAgICAgICAgICAgICAgIHR5cGVuYW1l IHN0cmVhbV9jaGFyPFRhcmdldD46OnR5cGUsCiAgICAgICAgICAgICAgICB0eXBlbmFtZSBzdHJl YW1fY2hhcjxTb3VyY2U+Ojp0eXBlPjo6dHlwZSBjaGFyX3R5cGU7CgoKCgoKCiAgICAgICAgICAg IHN0ZDo6YmFzaWNfc3RyaW5nc3RyZWFtPGNoYXJfdHlwZT4gc3RyZWFtOwoKICAgICAgICB9Owog ICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIFRhcmdldCwgdHlwZW5hbWUgU291cmNlPgogICAg VGFyZ2V0IGxleGljYWxfY2FzdChTb3VyY2UgYXJnKQogICAgewogICAgICAgIGRldGFpbDo6bGV4 aWNhbF9zdHJlYW08VGFyZ2V0LCBTb3VyY2U+IGludGVycHJldGVyOwogICAgICAgIFRhcmdldCBy ZXN1bHQ7CgogICAgICAgIGlmKCEoaW50ZXJwcmV0ZXIgPDwgYXJnICYmIGludGVycHJldGVyID4+ IHJlc3VsdCkpCiAgICAgICAgICAgIHRocm93IGRldGFpbDo6bm9fbGV4aWNhbF9jb252ZXJzaW9u PFRhcmdldCwgU291cmNlPigpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9Cn0KIyAzICJp b19hbnkuY3BwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QuaHBw IiAxCiMgMjUgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGltaXRzL2xpc3QuaHBwIiAxCiMgMjYgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIgMgoKCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHAiIDEKIyAxNiAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2luYy5ocHAiCiMgMSAiL3Vzci9sb2NhbC9z cmMvYm9vc3QvYm9vc3QvcHJlcHJvY2Vzc29yL2FyaXRobWV0aWMvaW5jLmhwcCIgMQojIDE3ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9wcmVwcm9jZXNzb3IvaW5jLmhwcCIgMgojIDI5ICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC5ocHAiIDIKCgoKCgoKCiMgMSAiL3Vz ci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlzdDEwLmhwcCIgMQojIDIxICIvdXNy L2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MTAuaHBwIgojIDEgIi91c3IvbG9j YWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhwcCIgMQojIDIxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMv Ym9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9wdXNoX2Zyb250LmhwcCIgMQojIDIyICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL3B1c2hfZnJvbnQuaHBwIgojIDEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vbm9kZS5ocHAiIDEKIyAyMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9ub2RlLmhwcCIKIyAxICIv dXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL3RhZy5ocHAiIDEKIyAyMCAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy90YWcuaHBwIgpuYW1lc3Bh Y2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKbmFtZXNwYWNlIGF1eCB7CgpzdHJ1Y3QgbGlzdF90 YWc7Cgp9Cn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhf L25vZGUuaHBwIiAyCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRl PAogICAgICB0eXBlbmFtZSBTaXplCiAgICAsIHR5cGVuYW1lIFQKICAgICwgdHlwZW5hbWUgTmV4 dAogICAgPgpzdHJ1Y3QgbGlzdF9ub2RlCnsKICAgIHR5cGVkZWYgYXV4OjpsaXN0X3RhZyB0YWc7 CiAgICB0eXBlZGVmIGxpc3Rfbm9kZSB0eXBlOwoKICAgIHR5cGVkZWYgU2l6ZSBzaXplOwogICAg dHlwZWRlZiBUIGl0ZW07CiAgICB0eXBlZGVmIE5leHQgbmV4dDsKfTsKCnN0cnVjdCBudWxsX25v ZGUKewogICAgdHlwZWRlZiBhdXg6Omxpc3RfdGFnIHRhZzsKICAgIHR5cGVkZWYgbnVsbF9ub2Rl IHR5cGU7CiAgICB0eXBlZGVmIGludGVncmFsX2M8bG9uZywwPiBzaXplOwp9OwoKfQp9CiMgMjMg Ii91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vcHVzaF9mcm9udC5ocHAi IDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4Kc3RydWN0 IHB1c2hfZnJvbnRfdHJhaXRzPCBhdXg6Omxpc3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVu YW1lIExpc3QsIHR5cGVuYW1lIFQgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICB7CiAgICAgICAgdHlw ZWRlZiBsaXN0X25vZGU8CiAgICAgICAgICAgICAgdHlwZW5hbWUgTGlzdDo6c2l6ZTo6bmV4dAog ICAgICAgICAgICAsIFQKICAgICAgICAgICAgLCB0eXBlbmFtZSBMaXN0Ojp0eXBlCiAgICAgICAg ICAgID4gdHlwZTsKICAgIH07Cn07Cgp9Cn0KIyAyMiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2xpc3QvbGlzdDAuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3Qv bXBsL2xpc3QvYXV4Xy9wb3BfZnJvbnQuaHBwIiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9saXN0L2F1eF8vcG9wX2Zyb250LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFt ZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBwb3BfZnJvbnRfdHJhaXRzPCBhdXg6Omxp c3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lIExpc3QgPiBzdHJ1Y3QgYWxnb3JpdGht CiAgICB7CiAgICAgICAgdHlwZWRlZiB0eXBlbmFtZSBMaXN0OjpuZXh0IHR5cGU7CiAgICB9Owp9 OwoKfQp9CiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhw cCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vZnJvbnQu aHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vZnJv bnQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mcm9udF9md2QuaHBw IiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9mcm9udF9md2QuaHBwIgpu YW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFtZSBUYWcg PiBzdHJ1Y3QgZnJvbnRfdHJhaXRzOwp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2UgPiBzdHJ1 Y3QgZnJvbnQ7Cgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3Qv YXV4Xy9mcm9udC5ocHAiIDIKCgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRl bXBsYXRlPD4Kc3RydWN0IGZyb250X3RyYWl0czwgYXV4OjpsaXN0X3RhZyA+CnsKICAgIHRlbXBs YXRlPCB0eXBlbmFtZSBMaXN0ID4gc3RydWN0IGFsZ29yaXRobQogICAgewogICAgICAgIHR5cGVk ZWYgdHlwZW5hbWUgTGlzdDo6aXRlbSB0eXBlOwogICAgfTsKfTsKCn0KfQojIDI0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiIDIKIyAxICIvdXNyL2xvY2Fs L3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2NsZWFyLmhwcCIgMQojIDI0ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2NsZWFyLmhwcCIKbmFtZXNwYWNlIGJv b3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBjbGVhcl90cmFpdHM8IGF1 eDo6bGlzdF90YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdv cml0aG0KICAgIHsKICAgICAgICB0eXBlZGVmIG51bGxfbm9kZSB0eXBlOwogICAgfTsKfTsKCn0K fQojIDI1ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MC5ocHAiIDIK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL08xX3NpemUuaHBw IiAxCiMgMjMgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vTzFfc2l6 ZS5ocHAiCm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8PgpzdHJ1 Y3QgTzFfc2l6ZV90cmFpdHM8IGF1eDo6bGlzdF90YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5h bWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IExpc3Q6OnNpemUKICAgIHsKICAg IH07Cn07Cgp9Cn0KIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlz dDAuaHBwIiAyCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9z aXplLmhwcCIgMQojIDIzICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhf L3NpemUuaHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPD4K c3RydWN0IHNpemVfdHJhaXRzPCBhdXg6Omxpc3RfdGFnID4KewogICAgdGVtcGxhdGU8IHR5cGVu YW1lIExpc3QgPiBzdHJ1Y3QgYWxnb3JpdGhtCiAgICAgICAgOiBMaXN0OjpzaXplCiAgICB7CiAg ICB9Owp9OwoKfQp9CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xp c3QwLmhwcCIgMgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8v ZW1wdHkuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1 eF8vZW1wdHkuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9lbXB0eV9m d2QuaHBwIiAxCiMgMjAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9lbXB0eV9md2Qu aHBwIgpuYW1lc3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPCB0eXBlbmFt ZSBUYWcgPiBzdHJ1Y3QgZW1wdHlfdHJhaXRzOwp0ZW1wbGF0ZTwgdHlwZW5hbWUgU2VxdWVuY2Ug PiBzdHJ1Y3QgZW1wdHk7Cgp9Cn0KIyAyMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBs L2xpc3QvYXV4Xy9lbXB0eS5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1w bCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBlbXB0eV90cmFpdHM8IGF1eDo6bGlzdF90YWcgPgp7CiAg ICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAgICAgICA6IG5v dF88dHlwZW5hbWUgTGlzdDo6c2l6ZT4KICAgIHsKICAgIH07Cn07Cgp9Cn0KIyAyOCAiL3Vzci9s b2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvbGlzdDAuaHBwIiAyCiMgMSAiL3Vzci9sb2Nh bC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9iZWdpbl9lbmQuaHBwIiAxCiMgMjEgIi91 c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vYmVnaW5fZW5kLmhwcCIKIyAx ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9yLmhwcCIg MQojIDI0ICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9hdXhfL2l0ZXJhdG9y LmhwcCIKbmFtZXNwYWNlIGJvb3N0IHsKbmFtZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTwgdHlwZW5h bWUgTm9kZSA+CnN0cnVjdCBsaXN0X2l0ZXJhdG9yCnsKICAgIHR5cGVkZWYgZm9yd2FyZF9pdGVy YXRvcl90YWcgY2F0ZWdvcnk7CiAgICB0eXBlZGVmIHR5cGVuYW1lIE5vZGU6Oml0ZW0gdHlwZTsK ICAgIHR5cGVkZWYgbGlzdF9pdGVyYXRvcjx0eXBlbmFtZSBOb2RlOjpuZXh0PiBuZXh0Owp9OwoK dGVtcGxhdGU8PgpzdHJ1Y3QgbGlzdF9pdGVyYXRvcjxudWxsX25vZGU+CnsKICAgIHR5cGVkZWYg Zm9yd2FyZF9pdGVyYXRvcl90YWcgY2F0ZWdvcnk7Cn07Cgp0ZW1wbGF0ZTwgdHlwZW5hbWUgVDEg PiBzdHJ1Y3QgbGFtYmRhPCBsaXN0X2l0ZXJhdG9yPCBUMSA+ID4geyB0eXBlZGVmIGxpc3RfaXRl cmF0b3I8IFQxID4gdHlwZTsgfTsKCn0KfQojIDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29z dC9tcGwvbGlzdC9hdXhfL2JlZ2luX2VuZC5ocHAiIDIKCgoKbmFtZXNwYWNlIGJvb3N0IHsKbmFt ZXNwYWNlIG1wbCB7Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBiZWdpbl90cmFpdHM8IGF1eDo6bGlzdF90 YWcgPgp7CiAgICB0ZW1wbGF0ZTwgdHlwZW5hbWUgTGlzdCA+IHN0cnVjdCBhbGdvcml0aG0KICAg IHsKICAgICAgICB0eXBlZGVmIGxpc3RfaXRlcmF0b3I8dHlwZW5hbWUgTGlzdDo6dHlwZT4gdHlw ZTsKICAgIH07Cn07Cgp0ZW1wbGF0ZTw+CnN0cnVjdCBlbmRfdHJhaXRzPCBhdXg6Omxpc3RfdGFn ID4KewogICAgdGVtcGxhdGU8IHR5cGVuYW1lID4gc3RydWN0IGFsZ29yaXRobQogICAgewogICAg ICAgIHR5cGVkZWYgbGlzdF9pdGVyYXRvcjxudWxsX25vZGU+IHR5cGU7CiAgICB9Owp9OwoKfQp9 CiMgMjkgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QwLmhwcCIgMgoK Cm5hbWVzcGFjZSBib29zdCB7Cm5hbWVzcGFjZSBtcGwgewoKdGVtcGxhdGU8IHR5cGVuYW1lIER1 bW15ID0gdm9pZF8gPiBzdHJ1Y3QgbGlzdDA7CnRlbXBsYXRlPD4gc3RydWN0IGxpc3QwPHZvaWRf PgogICAgOiBudWxsX25vZGUKewogICAgdHlwZWRlZiBudWxsX25vZGUgdHlwZTsKfTsKCn0KfQoj IDIyICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC9saXN0MTAuaHBwIiAyCiMg MzAgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2xpc3QxMC5ocHAiCiMgMSAi L3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4Xy9pbmNsdWRlX3ByZXByb2Nl c3NlZC5ocHAiIDEKIyAyNiAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xpc3QvYXV4 Xy9pbmNsdWRlX3ByZXByb2Nlc3NlZC5ocHAiCiMgMSAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9v c3QvbXBsL2xpc3QvYXV4Xy9wcmVwcm9jZXNzZWQvcGxhaW4vbGlzdDEwLmhwcCIgMQoKCgpuYW1l c3BhY2UgYm9vc3QgewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBU MAogICAgPgpzdHJ1Y3QgbGlzdDEKICAgIDogbGlzdF9ub2RlPAogICAgICAgICAgaW50ZWdyYWxf YzwgbG9uZywxID4KICAgICAgICAsIFQwCiAgICAgICAgLCBudWxsX25vZGUKICAgICAgICA+CnsK ICAgIHR5cGVkZWYgbGlzdDEgdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwg dHlwZW5hbWUgVDEKICAgID4Kc3RydWN0IGxpc3QyCiAgICA6IGxpc3Rfbm9kZTwKICAgICAgICAg IGludGVncmFsX2M8IGxvbmcsMiA+CiAgICAgICAgLCBUMAogICAgICAgICwgbGlzdDE8VDE+CiAg ICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3QyIHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlw ZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMgogICAgPgpzdHJ1Y3QgbGlzdDMKICAg IDogbGlzdF9ub2RlPAogICAgICAgICAgaW50ZWdyYWxfYzwgbG9uZywzID4KICAgICAgICAsIFQw CiAgICAgICAgLCBsaXN0MjwgVDEsVDIgPgogICAgICAgID4KewogICAgdHlwZWRlZiBsaXN0MyB0 eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5h bWUgVDIsIHR5cGVuYW1lIFQzCiAgICA+CnN0cnVjdCBsaXN0NAogICAgOiBsaXN0X25vZGU8CiAg ICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDQgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Qz PCBUMSxUMixUMyA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q0IHR5cGU7Cn07Cgp0ZW1w bGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5h bWUgVDMsIHR5cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsaXN0NQogICAgOiBsaXN0X25vZGU8CiAg ICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDUgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q0 PCBUMSxUMixUMyxUNCA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q1IHR5cGU7Cn07Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlw ZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1CiAgICA+CnN0cnVjdCBsaXN0 NgogICAgOiBsaXN0X25vZGU8CiAgICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDYgPgogICAgICAg ICwgVDAKICAgICAgICAsIGxpc3Q1PCBUMSxUMixUMyxUNCxUNSA+CiAgICAgICAgPgp7CiAgICB0 eXBlZGVmIGxpc3Q2IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVu YW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVu YW1lIFQ1LCB0eXBlbmFtZSBUNgogICAgPgpzdHJ1Y3QgbGlzdDcKICAgIDogbGlzdF9ub2RlPAog ICAgICAgICAgaW50ZWdyYWxfYzwgbG9uZyw3ID4KICAgICAgICAsIFQwCiAgICAgICAgLCBsaXN0 NjwgVDEsVDIsVDMsVDQsVDUsVDYgPgogICAgICAgID4KewogICAgdHlwZWRlZiBsaXN0NyB0eXBl Owp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUg VDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUg VDYsIHR5cGVuYW1lIFQ3CiAgICA+CnN0cnVjdCBsaXN0OAogICAgOiBsaXN0X25vZGU8CiAgICAg ICAgICBpbnRlZ3JhbF9jPCBsb25nLDggPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q3PCBU MSxUMixUMyxUNCxUNSxUNixUNyA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3Q4IHR5cGU7 Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBU MiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1lIFQ1LCB0eXBlbmFtZSBU NiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4CiAgICA+CnN0cnVjdCBsaXN0OQogICAgOiBsaXN0 X25vZGU8CiAgICAgICAgICBpbnRlZ3JhbF9jPCBsb25nLDkgPgogICAgICAgICwgVDAKICAgICAg ICAsIGxpc3Q4PCBUMSxUMixUMyxUNCxUNSxUNixUNyxUOCA+CiAgICAgICAgPgp7CiAgICB0eXBl ZGVmIGxpc3Q5IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1l IFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5cGVuYW1lIFQ0CiAgICAsIHR5cGVuYW1l IFQ1LCB0eXBlbmFtZSBUNiwgdHlwZW5hbWUgVDcsIHR5cGVuYW1lIFQ4LCB0eXBlbmFtZSBUOQog ICAgPgpzdHJ1Y3QgbGlzdDEwCiAgICA6IGxpc3Rfbm9kZTwKICAgICAgICAgIGludGVncmFsX2M8 IGxvbmcsMTAgPgogICAgICAgICwgVDAKICAgICAgICAsIGxpc3Q5PCBUMSxUMixUMyxUNCxUNSxU NixUNyxUOCxUOSA+CiAgICAgICAgPgp7CiAgICB0eXBlZGVmIGxpc3QxMCB0eXBlOwp9OwoKfQp9 CiMgMjcgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0L2F1eF8vaW5jbHVkZV9w cmVwcm9jZXNzZWQuaHBwIiAyCiMgMzEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9s aXN0L2xpc3QxMC5ocHAiIDIKIyAzNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2xp c3QuaHBwIiAyCiMgNDYgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21wbC9saXN0LmhwcCIK IyAxICIvdXNyL2xvY2FsL3NyYy9ib29zdC9ib29zdC9tcGwvYXV4Xy9pbmNsdWRlX3ByZXByb2Nl c3NlZC5ocHAiIDEKIyAyNyAiL3Vzci9sb2NhbC9zcmMvYm9vc3QvYm9vc3QvbXBsL2F1eF8vaW5j bHVkZV9wcmVwcm9jZXNzZWQuaHBwIgojIDEgIi91c3IvbG9jYWwvc3JjL2Jvb3N0L2Jvb3N0L21w bC9hdXhfL3ByZXByb2Nlc3NlZC9wbGFpbi9saXN0LmhwcCIgMQoKCgpuYW1lc3BhY2UgYm9vc3Qg ewpuYW1lc3BhY2UgbXBsIHsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCA9IHZvaWRfLCB0 eXBlbmFtZSBUMSA9IHZvaWRfLCB0eXBlbmFtZSBUMiA9IHZvaWRfCiAgICAsIHR5cGVuYW1lIFQz ID0gdm9pZF8sIHR5cGVuYW1lIFQ0ID0gdm9pZF8sIHR5cGVuYW1lIFQ1ID0gdm9pZF8KICAgICwg dHlwZW5hbWUgVDYgPSB2b2lkXywgdHlwZW5hbWUgVDcgPSB2b2lkXywgdHlwZW5hbWUgVDggPSB2 b2lkXwogICAgLCB0eXBlbmFtZSBUOSA9IHZvaWRfCiAgICA+CnN0cnVjdCBsaXN0OwoKdGVtcGxh dGU8CgogICAgPgpzdHJ1Y3QgbGlzdDwKICAgICAgICAgIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZv aWRfLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8KICAgICAgICAsIHZvaWRfCiAg ICAgICAgPgogICAgOiBsaXN0MDwgPgp7CiAgICB0eXBlZGVmIGxpc3QwPCA+IHR5cGU7Cn07Cgp0 ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAKICAgID4Kc3RydWN0IGxpc3Q8CiAgICAgICAgICBU MCwgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8sIHZvaWRf LCB2b2lkXwogICAgICAgID4KICAgIDogbGlzdDE8VDA+CnsKICAgIHR5cGVkZWYgbGlzdDE8VDA+ IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAgICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxCiAgICA+ CnN0cnVjdCBsaXN0PAogICAgICAgICAgVDAsIFQxLCB2b2lkXywgdm9pZF8sIHZvaWRfLCB2b2lk Xywgdm9pZF8sIHZvaWRfLCB2b2lkXywgdm9pZF8KICAgICAgICA+CiAgICA6IGxpc3QyPCBUMCxU MSA+CnsKICAgIHR5cGVkZWYgbGlzdDI8IFQwLFQxID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAg ICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyCiAgICA+CnN0cnVjdCBsaXN0 PCBUMCxUMSxUMix2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyx2b2lkXyA+CiAg ICA6IGxpc3QzPCBUMCxUMSxUMiA+CnsKICAgIHR5cGVkZWYgbGlzdDM8IFQwLFQxLFQyID4gdHlw ZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1l IFQyLCB0eXBlbmFtZSBUMwogICAgPgpzdHJ1Y3QgbGlzdDwgVDAsVDEsVDIsVDMsdm9pZF8sdm9p ZF8sdm9pZF8sdm9pZF8sdm9pZF8sdm9pZF8gPgogICAgOiBsaXN0NDwgVDAsVDEsVDIsVDMgPgp7 CiAgICB0eXBlZGVmIGxpc3Q0PCBUMCxUMSxUMixUMyA+IHR5cGU7Cn07Cgp0ZW1wbGF0ZTwKICAg ICAgdHlwZW5hbWUgVDAsIHR5cGVuYW1lIFQxLCB0eXBlbmFtZSBUMiwgdHlwZW5hbWUgVDMsIHR5 cGVuYW1lIFQ0CiAgICA+CnN0cnVjdCBsaXN0PCBUMCxUMSxUMixUMyxUNCx2b2lkXyx2b2lkXyx2 b2lkXyx2b2lkXyx2b2lkXyA+CiAgICA6IGxpc3Q1PCBUMCxUMSxUMixUMyxUNCA+CnsKICAgIHR5 cGVkZWYgbGlzdDU8IFQwLFQxLFQyLFQzLFQ0ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0 eXBlbmFtZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5h bWUgVDQKICAgICwgdHlwZW5hbWUgVDUKICAgID4Kc3RydWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0 LFQ1LHZvaWRfLHZvaWRfLHZvaWRfLHZvaWRfID4KICAgIDogbGlzdDY8IFQwLFQxLFQyLFQzLFQ0 LFQ1ID4KewogICAgdHlwZWRlZiBsaXN0NjwgVDAsVDEsVDIsVDMsVDQsVDUgPiB0eXBlOwp9OwoK dGVtcGxhdGU8CiAgICAgIHR5cGVuYW1lIFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5 cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAogICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYKICAg ID4Kc3RydWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LHZvaWRfLHZvaWRfLHZvaWRfID4K ICAgIDogbGlzdDc8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2ID4KewogICAgdHlwZWRlZiBsaXN0Nzwg VDAsVDEsVDIsVDMsVDQsVDUsVDYgPiB0eXBlOwp9OwoKdGVtcGxhdGU8CiAgICAgIHR5cGVuYW1l IFQwLCB0eXBlbmFtZSBUMSwgdHlwZW5hbWUgVDIsIHR5cGVuYW1lIFQzLCB0eXBlbmFtZSBUNAog ICAgLCB0eXBlbmFtZSBUNSwgdHlwZW5hbWUgVDYsIHR5cGVuYW1lIFQ3CiAgICA+CnN0cnVjdCBs aXN0PCBUMCxUMSxUMixUMyxUNCxUNSxUNixUNyx2b2lkXyx2b2lkXyA+CiAgICA6IGxpc3Q4PCBU MCxUMSxUMixUMyxUNCxUNSxUNixUNyA+CnsKICAgIHR5cGVkZWYgbGlzdDg8IFQwLFQxLFQyLFQz LFQ0LFQ1LFQ2LFQ3ID4gdHlwZTsKfTsKCnRlbXBsYXRlPAogICAgICB0eXBlbmFtZSBUMCwgdHlw ZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQKICAgICwgdHlw ZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgKICAgID4Kc3Ry dWN0IGxpc3Q8IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4LHZvaWRfID4KICAgIDogbGlzdDk8 IFQwLFQxLFQyLFQzLFQ0LFQ1LFQ2LFQ3LFQ4ID4KewogICAgdHlwZWRlZiBsaXN0OTwgVDAsVDEs VDIsVDMsVDQsVDUsVDYsVDcsVDggPiB0eXBlOwp9OwoKCnRlbXBsYXRlPAogICAgICB0eXBlbmFt ZSBUMCwgdHlwZW5hbWUgVDEsIHR5cGVuYW1lIFQyLCB0eXBlbmFtZSBUMywgdHlwZW5hbWUgVDQK ICAgICwgdHlwZW5hbWUgVDUsIHR5cGVuYW1lIFQ2LCB0eXBlbmFtZSBUNywgdHlwZW5hbWUgVDgs IHR5cGVuYW1lIFQ5CiAgICA+CnN0cnVjdCBsaXN0CiAgICA6IGxpc3QxMDwgVDAsVDEsVDIsVDMs VDQsVDUsVDYsVDcsVDgsVDkgPgp7CiAgICB0eXBlZGVmIGxpc3QxMDwgVDAsVDEsVDIsVDMsVDQs VDUsVDYsVDcsVDgsVDkgPiB0eXBlOwp9OwoKfQp9CiMgMjggIi91c3IvbG9jYWwvc3JjL2Jvb3N0 L2Jvb3N0L21wbC9hdXhfL2luY2x1ZGVfcHJlcHJvY2Vzc2VkLmhwcCIgMgojIDQ3ICIvdXNyL2xv Y2FsL3NyYy9ib29zdC9ib29zdC9tcGwvbGlzdC5ocHAiIDIKIyA0ICJpb19hbnkuY3BwIiAyCgoj IDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2lvc3RyZWFtIiAxIDMKIyA0MyAiL3Vzci9s b2NhbC9pbmNsdWRlL2MrKy8zLjIvaW9zdHJlYW0iIDMKCgoKCgpuYW1lc3BhY2Ugc3RkCnsKICBl eHRlcm4gaXN0cmVhbSBjaW47CiAgZXh0ZXJuIG9zdHJlYW0gY291dDsKICBleHRlcm4gb3N0cmVh bSBjZXJyOwogIGV4dGVybiBvc3RyZWFtIGNsb2c7CgogIGV4dGVybiB3aXN0cmVhbSB3Y2luOwog IGV4dGVybiB3b3N0cmVhbSB3Y291dDsKICBleHRlcm4gd29zdHJlYW0gd2NlcnI7CiAgZXh0ZXJu IHdvc3RyZWFtIHdjbG9nOwoKCgogIHN0YXRpYyBpb3NfYmFzZTo6SW5pdCBfX2lvaW5pdDsKfQoj IDYgImlvX2FueS5jcHAiIDIKCgojIDEgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0ZGV4 Y2VwdCIgMSAzCiMgNDMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL3N0ZGV4Y2VwdCIgMwoK CgoKbmFtZXNwYWNlIHN0ZAp7CgoKCgoKICBjbGFzcyBsb2dpY19lcnJvciA6IHB1YmxpYyBleGNl cHRpb24KICB7CiAgICBzdHJpbmcgX01fbXNnOwoKICBwdWJsaWM6CgogICAgZXhwbGljaXQKICAg IGxvZ2ljX2Vycm9yKGNvbnN0IHN0cmluZyYgX19hcmcpOwoKICAgIHZpcnR1YWwKICAgIH5sb2dp Y19lcnJvcigpIHRocm93KCk7CgoKCiAgICB2aXJ0dWFsIGNvbnN0IGNoYXIqCiAgICB3aGF0KCkg Y29uc3QgdGhyb3coKTsKICB9OwoKCgogIGNsYXNzIGRvbWFpbl9lcnJvciA6IHB1YmxpYyBsb2dp Y19lcnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBkb21haW5fZXJyb3IoY29uc3Qgc3Ry aW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIGludmFsaWRfYXJndW1lbnQgOiBwdWJsaWMgbG9n aWNfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgaW52YWxpZF9hcmd1bWVudChjb25z dCBzdHJpbmcmIF9fYXJnKTsKICB9OwoKCgogIGNsYXNzIGxlbmd0aF9lcnJvciA6IHB1YmxpYyBs b2dpY19lcnJvcgogIHsKICBwdWJsaWM6CiAgICBleHBsaWNpdCBsZW5ndGhfZXJyb3IoY29uc3Qg c3RyaW5nJiBfX2FyZyk7CiAgfTsKCgoKICBjbGFzcyBvdXRfb2ZfcmFuZ2UgOiBwdWJsaWMgbG9n aWNfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgb3V0X29mX3JhbmdlKGNvbnN0IHN0 cmluZyYgX19hcmcpOwogIH07CgoKCgoKCiAgY2xhc3MgcnVudGltZV9lcnJvciA6IHB1YmxpYyBl eGNlcHRpb24KICB7CiAgICBzdHJpbmcgX01fbXNnOwoKICBwdWJsaWM6CgogICAgZXhwbGljaXQK ICAgIHJ1bnRpbWVfZXJyb3IoY29uc3Qgc3RyaW5nJiBfX2FyZyk7CgogICAgdmlydHVhbAogICAg fnJ1bnRpbWVfZXJyb3IoKSB0aHJvdygpOwoKCgogICAgdmlydHVhbCBjb25zdCBjaGFyKgogICAg d2hhdCgpIGNvbnN0IHRocm93KCk7CiAgfTsKCgogIGNsYXNzIHJhbmdlX2Vycm9yIDogcHVibGlj IHJ1bnRpbWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgcmFuZ2VfZXJyb3IoY29u c3Qgc3RyaW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIG92ZXJmbG93X2Vycm9yIDogcHVibGlj IHJ1bnRpbWVfZXJyb3IKICB7CiAgcHVibGljOgogICAgZXhwbGljaXQgb3ZlcmZsb3dfZXJyb3Io Y29uc3Qgc3RyaW5nJiBfX2FyZyk7CiAgfTsKCgogIGNsYXNzIHVuZGVyZmxvd19lcnJvciA6IHB1 YmxpYyBydW50aW1lX2Vycm9yCiAgewogIHB1YmxpYzoKICAgIGV4cGxpY2l0IHVuZGVyZmxvd19l cnJvcihjb25zdCBzdHJpbmcmIF9fYXJnKTsKICB9Owp9CiMgOSAiaW9fYW55LmNwcCIgMgoKIyAx ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9tYXAiIDEgMwojIDY1ICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9tYXAiIDMKCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfdHJlZS5oIiAxIDMKIyA5MSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfdHJlZS5oIiAzCm5hbWVzcGFjZSBzdGQKewogIGVudW0gX1JiX3RyZWVfY29sb3IgeyBfTV9y ZWQgPSBmYWxzZSwgX01fYmxhY2sgPSB0cnVlIH07CgogIHN0cnVjdCBfUmJfdHJlZV9ub2RlX2Jh c2UKICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZSogX0Jhc2VfcHRyOwoKICAgIF9S Yl90cmVlX2NvbG9yIF9NX2NvbG9yOwogICAgX0Jhc2VfcHRyIF9NX3BhcmVudDsKICAgIF9CYXNl X3B0ciBfTV9sZWZ0OwogICAgX0Jhc2VfcHRyIF9NX3JpZ2h0OwoKICAgIHN0YXRpYyBfQmFzZV9w dHIKICAgIF9TX21pbmltdW0oX0Jhc2VfcHRyIF9feCkKICAgIHsKICAgICAgd2hpbGUgKF9feC0+ X01fbGVmdCAhPSAwKSBfX3ggPSBfX3gtPl9NX2xlZnQ7CiAgICAgIHJldHVybiBfX3g7CiAgICB9 CgogICAgc3RhdGljIF9CYXNlX3B0cgogICAgX1NfbWF4aW11bShfQmFzZV9wdHIgX194KQogICAg ewogICAgICB3aGlsZSAoX194LT5fTV9yaWdodCAhPSAwKSBfX3ggPSBfX3gtPl9NX3JpZ2h0Owog ICAgICByZXR1cm4gX194OwogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWw+CiAg ICBzdHJ1Y3QgX1JiX3RyZWVfbm9kZSA6IHB1YmxpYyBfUmJfdHJlZV9ub2RlX2Jhc2UKICAgIHsK ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlPF9WYWw+KiBfTGlua190eXBlOwogICAgICBfVmFs IF9NX3ZhbHVlX2ZpZWxkOwogICAgfTsKCiAgc3RydWN0IF9SYl90cmVlX2Jhc2VfaXRlcmF0b3IK ICB7CiAgICB0eXBlZGVmIF9SYl90cmVlX25vZGVfYmFzZTo6X0Jhc2VfcHRyIF9CYXNlX3B0cjsK ICAgIHR5cGVkZWYgYmlkaXJlY3Rpb25hbF9pdGVyYXRvcl90YWcgaXRlcmF0b3JfY2F0ZWdvcnk7 CiAgICB0eXBlZGVmIHB0cmRpZmZfdCBkaWZmZXJlbmNlX3R5cGU7CgogICAgX0Jhc2VfcHRyIF9N X25vZGU7CgogICAgdm9pZAogICAgX01faW5jcmVtZW50KCkKICAgIHsKICAgICAgaWYgKF9NX25v ZGUtPl9NX3JpZ2h0ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fbm9kZSA9IF9NX25vZGUt Pl9NX3JpZ2h0OwogICAgICAgICAgd2hpbGUgKF9NX25vZGUtPl9NX2xlZnQgIT0gMCkKICAgICAg ICAgICAgX01fbm9kZSA9IF9NX25vZGUtPl9NX2xlZnQ7CiAgICAgICAgfQogICAgICBlbHNlCiAg ICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9NX25vZGUtPl9NX3BhcmVudDsKICAg ICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fcmlnaHQpCiAgICAgICAgICAgIHsKICAg ICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgICAgICAgIF9feSA9IF9feS0+X01fcGFy ZW50OwogICAgICAgICAgICB9CiAgICAgICAgICBpZiAoX01fbm9kZS0+X01fcmlnaHQgIT0gX195 KQogICAgICAgICAgICBfTV9ub2RlID0gX195OwogICAgICAgIH0KICAgIH0KCiAgICB2b2lkCiAg ICBfTV9kZWNyZW1lbnQoKQogICAgewogICAgICBpZiAoX01fbm9kZS0+X01fY29sb3IgPT0gX01f cmVkCiAgICAgICAgICAmJiBfTV9ub2RlLT5fTV9wYXJlbnQtPl9NX3BhcmVudCA9PSBfTV9ub2Rl KQogICAgICAgIF9NX25vZGUgPSBfTV9ub2RlLT5fTV9yaWdodDsKICAgICAgZWxzZSBpZiAoX01f bm9kZS0+X01fbGVmdCAhPSAwKQogICAgICAgIHsKICAgICAgICAgIF9CYXNlX3B0ciBfX3kgPSBf TV9ub2RlLT5fTV9sZWZ0OwogICAgICAgICAgd2hpbGUgKF9feS0+X01fcmlnaHQgIT0gMCkKICAg ICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAg ICAgICAgfQogICAgICBlbHNlCiAgICAgICAgewogICAgICAgICAgX0Jhc2VfcHRyIF9feSA9IF9N X25vZGUtPl9NX3BhcmVudDsKICAgICAgICAgIHdoaWxlIChfTV9ub2RlID09IF9feS0+X01fbGVm dCkKICAgICAgICAgICAgewogICAgICAgICAgICAgIF9NX25vZGUgPSBfX3k7CiAgICAgICAgICAg ICAgX195ID0gX195LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIF9NX25vZGUg PSBfX3k7CiAgICAgICAgfQogICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9WYWwsIHR5 cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfaXRlcmF0b3Ig OiBwdWJsaWMgX1JiX3RyZWVfYmFzZV9pdGVyYXRvcgogICAgewogICAgICB0eXBlZGVmIF9WYWwg dmFsdWVfdHlwZTsKICAgICAgdHlwZWRlZiBfUmVmIHJlZmVyZW5jZTsKICAgICAgdHlwZWRlZiBf UHRyIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYs IF9WYWwqPiBpdGVyYXRvcjsKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBj b25zdCBfVmFsJiwgY29uc3QgX1ZhbCo+CiAgICAgIGNvbnN0X2l0ZXJhdG9yOwogICAgICB0eXBl ZGVmIF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYsIF9QdHI+IF9TZWxmOwogICAgICB0eXBl ZGVmIF9SYl90cmVlX25vZGU8X1ZhbD4qIF9MaW5rX3R5cGU7CgogICAgICBfUmJfdHJlZV9pdGVy YXRvcigpIHt9CiAgICAgIF9SYl90cmVlX2l0ZXJhdG9yKF9MaW5rX3R5cGUgX194KSB7IF9NX25v ZGUgPSBfX3g7IH0KICAgICAgX1JiX3RyZWVfaXRlcmF0b3IoY29uc3QgaXRlcmF0b3ImIF9faXQp IHsgX01fbm9kZSA9IF9faXQuX01fbm9kZTsgfQoKICAgICAgcmVmZXJlbmNlCiAgICAgIG9wZXJh dG9yKigpIGNvbnN0IHsgcmV0dXJuIF9MaW5rX3R5cGUoX01fbm9kZSktPl9NX3ZhbHVlX2ZpZWxk OyB9CgogICAgICBwb2ludGVyCiAgICAgIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmKG9w ZXJhdG9yKigpKTsgfQoKICAgICAgX1NlbGYmCiAgICAgIG9wZXJhdG9yKysoKQogICAgICB7CiAg ICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgICB9CgogICAg ICBfU2VsZgogICAgICBvcGVyYXRvcisrKGludCkKICAgICAgewogICAgICAgIF9TZWxmIF9fdG1w ID0gKnRoaXM7CiAgICAgICAgX01faW5jcmVtZW50KCk7CiAgICAgICAgcmV0dXJuIF9fdG1wOwog ICAgICB9CgogICAgICBfU2VsZiYKICAgICAgb3BlcmF0b3ItLSgpIHsgX01fZGVjcmVtZW50KCk7 IHJldHVybiAqdGhpczsgfQoKICAgICAgX1NlbGYKICAgICAgb3BlcmF0b3ItLShpbnQpCiAgICAg IHsKICAgICAgICBfU2VsZiBfX3RtcCA9ICp0aGlzOwogICAgICAgIF9NX2RlY3JlbWVudCgpOwog ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQogIH07CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9W YWwsIHR5cGVuYW1lIF9SZWYsIHR5cGVuYW1lIF9QdHI+CiAgICBpbmxpbmUgYm9vbAogICAgb3Bl cmF0b3I9PShjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYgX194LAog ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBfUmVmLCBfUHRyPiYg X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9S Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIGNvbnN0IF9WYWwmLCBjb25zdCBfVmFsKj4mIF9feCwKICAg ICAgICAgICAgICAgY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYg X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1ZhbD4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcj09KGNvbnN0IF9S Yl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9WYWwmLCBfVmFsKj4mIF9feCwKICAgICAgICAgICAgICAg Y29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9WYWwqPiYg X195KQogICAgeyByZXR1cm4gX194Ll9NX25vZGUgPT0gX195Ll9NX25vZGU7IH0KCiAgdGVtcGxh dGU8dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX1JlZiwgdHlwZW5hbWUgX1B0cj4KICAgIGlubGlu ZSBib29sCiAgICBvcGVyYXRvciE9KGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWwsIF9SZWYs IF9QdHI+JiBfX3gsCiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlX2l0ZXJhdG9yPF9WYWws IF9SZWYsIF9QdHI+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgY29uc3QgX1ZhbCYsIGNvbnN0IF9W YWwqPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBf VmFsJiwgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k ZTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfVmFsPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yIT0oY29uc3QgX1JiX3RyZWVfaXRlcmF0b3I8X1ZhbCwgX1ZhbCYsIF9WYWwqPiYgX194LAog ICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZV9pdGVyYXRvcjxfVmFsLCBjb25zdCBfVmFsJiwg Y29uc3QgX1ZhbCo+JiBfX3kpCiAgICB7IHJldHVybiBfX3guX01fbm9kZSAhPSBfX3kuX01fbm9k ZTsgfQoKICBpbmxpbmUgdm9pZAogIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9SYl90cmVlX25vZGVf YmFzZSogX194LCBfUmJfdHJlZV9ub2RlX2Jhc2UqJiBfX3Jvb3QpCiAgewogICAgX1JiX3RyZWVf bm9kZV9iYXNlKiBfX3kgPSBfX3gtPl9NX3JpZ2h0OwogICAgX194LT5fTV9yaWdodCA9IF9feS0+ X01fbGVmdDsKICAgIGlmIChfX3ktPl9NX2xlZnQgIT0wKQogICAgICBfX3ktPl9NX2xlZnQtPl9N X3BhcmVudCA9IF9feDsKICAgIF9feS0+X01fcGFyZW50ID0gX194LT5fTV9wYXJlbnQ7CgogICAg aWYgKF9feCA9PSBfX3Jvb3QpCiAgICAgIF9fcm9vdCA9IF9feTsKICAgIGVsc2UgaWYgKF9feCA9 PSBfX3gtPl9NX3BhcmVudC0+X01fbGVmdCkKICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2xlZnQg PSBfX3k7CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9yaWdodCA9IF9feTsKICAg IF9feS0+X01fbGVmdCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5s aW5lIHZvaWQKICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gs IF9SYl90cmVlX25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfUmJfdHJlZV9ub2RlX2Jhc2Uq IF9feSA9IF9feC0+X01fbGVmdDsKICAgIF9feC0+X01fbGVmdCA9IF9feS0+X01fcmlnaHQ7CiAg ICBpZiAoX195LT5fTV9yaWdodCAhPSAwKQogICAgICBfX3ktPl9NX3JpZ2h0LT5fTV9wYXJlbnQg PSBfX3g7CiAgICBfX3ktPl9NX3BhcmVudCA9IF9feC0+X01fcGFyZW50OwoKICAgIGlmIChfX3gg PT0gX19yb290KQogICAgICBfX3Jvb3QgPSBfX3k7CiAgICBlbHNlIGlmIChfX3ggPT0gX194LT5f TV9wYXJlbnQtPl9NX3JpZ2h0KQogICAgICBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQgPSBfX3k7 CiAgICBlbHNlCiAgICAgIF9feC0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX195OwogICAgX195LT5f TV9yaWdodCA9IF9feDsKICAgIF9feC0+X01fcGFyZW50ID0gX195OwogIH0KCiAgaW5saW5lIHZv aWQKICBfUmJfdHJlZV9yZWJhbGFuY2UoX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3gsIF9SYl90cmVl X25vZGVfYmFzZSomIF9fcm9vdCkKICB7CiAgICBfX3gtPl9NX2NvbG9yID0gX01fcmVkOwogICAg d2hpbGUgKF9feCAhPSBfX3Jvb3QKICAgICAgICAgICAmJiBfX3gtPl9NX3BhcmVudC0+X01fY29s b3IgPT0gX01fcmVkKQogICAgICB7CiAgICAgICAgaWYgKF9feC0+X01fcGFyZW50ID09IF9feC0+ X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQpCiAgICAgICAgICB7CiAgICAgICAgICAgIF9S Yl90cmVlX25vZGVfYmFzZSogX195ID0gX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fcmln aHQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAg ICAgICAgICAgewogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01f YmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAg ICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAg ICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFyZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAg ICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgaWYg KF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fcmlnaHQpCiAgICAgICAgICAgICAgICAgIHsKICAg ICAgICAgICAgICAgICAgICBfX3ggPSBfX3gtPl9NX3BhcmVudDsKICAgICAgICAgICAgICAgICAg ICBfUmJfdHJlZV9yb3RhdGVfbGVmdChfX3gsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIH0K ICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAg ICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9NX3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7 CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3RhdGVfcmlnaHQoX194LT5fTV9wYXJlbnQtPl9N X3BhcmVudCwgX19yb290KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgZWxz ZQogICAgICAgICAgewogICAgICAgICAgICBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9feSA9IF9feC0+ X01fcGFyZW50LT5fTV9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgIGlmIChfX3kgJiYgX195 LT5fTV9jb2xvciA9PSBfTV9yZWQpCiAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgX194 LT5fTV9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3ktPl9N X2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICBfX3gtPl9NX3BhcmVudC0+X01fcGFy ZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01fcGFy ZW50LT5fTV9wYXJlbnQ7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgewogICAgICAgICAgICAgICAgaWYgKF9feCA9PSBfX3gtPl9NX3BhcmVudC0+X01fbGVm dCkKICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgIF9feCA9IF9feC0+X01f cGFyZW50OwogICAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9yaWdodChfX3gsIF9f cm9vdCk7CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIF9feC0+X01fcGFyZW50 LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAgICAgX194LT5fTV9wYXJlbnQtPl9N X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICBfUmJfdHJlZV9yb3Rh dGVfbGVmdChfX3gtPl9NX3BhcmVudC0+X01fcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAg IH0KICAgICAgICAgIH0KICAgICAgfQogICAgX19yb290LT5fTV9jb2xvciA9IF9NX2JsYWNrOwog IH0KCiAgaW5saW5lIF9SYl90cmVlX25vZGVfYmFzZSoKICBfUmJfdHJlZV9yZWJhbGFuY2VfZm9y X2VyYXNlKF9SYl90cmVlX25vZGVfYmFzZSogX196LAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19yb290LAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiYgX19sZWZ0bW9zdCwKICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIF9SYl90cmVlX25vZGVfYmFzZSomIF9fcmlnaHRtb3N0KQogIHsKICAg IF9SYl90cmVlX25vZGVfYmFzZSogX195ID0gX196OwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBf X3ggPSAwOwogICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3hfcGFyZW50ID0gMDsKICAgIGlmIChf X3ktPl9NX2xlZnQgPT0gMCkKICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgIGVsc2UKICAg ICAgaWYgKF9feS0+X01fcmlnaHQgPT0gMCkKICAgICAgICBfX3ggPSBfX3ktPl9NX2xlZnQ7CiAg ICAgIGVsc2UKICAgICAgICB7CgogICAgICAgICAgX195ID0gX195LT5fTV9yaWdodDsKICAgICAg ICAgIHdoaWxlIChfX3ktPl9NX2xlZnQgIT0gMCkKICAgICAgICAgICAgX195ID0gX195LT5fTV9s ZWZ0OwogICAgICAgICAgX194ID0gX195LT5fTV9yaWdodDsKICAgICAgICB9CiAgICBpZiAoX195 ICE9IF9feikKICAgICAgewoKICAgICAgICBfX3otPl9NX2xlZnQtPl9NX3BhcmVudCA9IF9feTsK ICAgICAgICBfX3ktPl9NX2xlZnQgPSBfX3otPl9NX2xlZnQ7CiAgICAgICAgaWYgKF9feSAhPSBf X3otPl9NX3JpZ2h0KQogICAgICAgICAgewogICAgICAgICAgICBfX3hfcGFyZW50ID0gX195LT5f TV9wYXJlbnQ7CiAgICAgICAgICAgIGlmIChfX3gpIF9feC0+X01fcGFyZW50ID0gX195LT5fTV9w YXJlbnQ7CiAgICAgICAgICAgIF9feS0+X01fcGFyZW50LT5fTV9sZWZ0ID0gX194OwogICAgICAg ICAgICBfX3ktPl9NX3JpZ2h0ID0gX196LT5fTV9yaWdodDsKICAgICAgICAgICAgX196LT5fTV9y aWdodC0+X01fcGFyZW50ID0gX195OwogICAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICAg IF9feF9wYXJlbnQgPSBfX3k7CiAgICAgICAgaWYgKF9fcm9vdCA9PSBfX3opCiAgICAgICAgICBf X3Jvb3QgPSBfX3k7CiAgICAgICAgZWxzZSBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0g X196KQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPSBfX3k7CiAgICAgICAgZWxz ZQogICAgICAgICAgX196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX195OwogICAgICAgIF9feS0+ X01fcGFyZW50ID0gX196LT5fTV9wYXJlbnQ7CiAgICAgICAgc3RkOjpzd2FwKF9feS0+X01fY29s b3IsIF9fei0+X01fY29sb3IpOwogICAgICAgIF9feSA9IF9fejsKCiAgICAgIH0KICAgIGVsc2UK ICAgICAgewogICAgICAgIF9feF9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBpZiAo X194KQogICAgICAgICAgX194LT5fTV9wYXJlbnQgPSBfX3ktPl9NX3BhcmVudDsKICAgICAgICBp ZiAoX19yb290ID09IF9feikKICAgICAgICAgIF9fcm9vdCA9IF9feDsKICAgICAgICBlbHNlCiAg ICAgICAgICBpZiAoX196LT5fTV9wYXJlbnQtPl9NX2xlZnQgPT0gX196KQogICAgICAgICAgICBf X3otPl9NX3BhcmVudC0+X01fbGVmdCA9IF9feDsKICAgICAgICAgIGVsc2UKICAgICAgICAgICAg X196LT5fTV9wYXJlbnQtPl9NX3JpZ2h0ID0gX194OwogICAgICAgIGlmIChfX2xlZnRtb3N0ID09 IF9feikKICAgICAgICAgIGlmIChfX3otPl9NX3JpZ2h0ID09IDApCiAgICAgICAgICAgIF9fbGVm dG1vc3QgPSBfX3otPl9NX3BhcmVudDsKCiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIF9fbGVm dG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21pbmltdW0oX194KTsKICAgICAgICBpZiAo X19yaWdodG1vc3QgPT0gX196KQogICAgICAgICAgaWYgKF9fei0+X01fbGVmdCA9PSAwKQogICAg ICAgICAgICBfX3JpZ2h0bW9zdCA9IF9fei0+X01fcGFyZW50OwoKICAgICAgICAgIGVsc2UKICAg ICAgICAgICAgX19yaWdodG1vc3QgPSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194 KTsKICAgICAgfQogICAgaWYgKF9feS0+X01fY29sb3IgIT0gX01fcmVkKQogICAgICB7CiAgICAg ICAgd2hpbGUgKF9feCAhPSBfX3Jvb3QgJiYgKF9feCA9PSAwIHx8IF9feC0+X01fY29sb3IgPT0g X01fYmxhY2spKQogICAgICAgICAgaWYgKF9feCA9PSBfX3hfcGFyZW50LT5fTV9sZWZ0KQogICAg ICAgICAgICB7CiAgICAgICAgICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFy ZW50LT5fTV9yaWdodDsKICAgICAgICAgICAgICBpZiAoX193LT5fTV9jb2xvciA9PSBfTV9yZWQp CiAgICAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfTV9i bGFjazsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9yZWQ7CiAg ICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9feF9wYXJlbnQsIF9fcm9vdCk7 CiAgICAgICAgICAgICAgICAgIF9fdyA9IF9feF9wYXJlbnQtPl9NX3JpZ2h0OwogICAgICAgICAg ICAgICAgfQogICAgICAgICAgICAgIGlmICgoX193LT5fTV9sZWZ0ID09IDAgfHwKICAgICAgICAg ICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPT0gX01fYmxhY2spICYmCiAgICAgICAg ICAgICAgICAgIChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+ X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSkKICAgICAgICAgICAgICAgIHsKICAgICAg ICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX194 ID0gX194X3BhcmVudDsKICAgICAgICAgICAgICAgICAgX194X3BhcmVudCA9IF9feF9wYXJlbnQt Pl9NX3BhcmVudDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBlbHNlCiAgICAgICAg ICAgICAgICB7CiAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX3JpZ2h0ID09IDAKICAgICAg ICAgICAgICAgICAgICAgIHx8IF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKQog ICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgIGlmIChfX3ctPl9NX2xl ZnQpIF9fdy0+X01fbGVmdC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAgICAgICAgICAgICAg ICAgIF9fdy0+X01fY29sb3IgPSBfTV9yZWQ7CiAgICAgICAgICAgICAgICAgICAgICBfUmJfdHJl ZV9yb3RhdGVfcmlnaHQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICAgICAgX193ID0g X194X3BhcmVudC0+X01fcmlnaHQ7CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAg ICAgICBfX3ctPl9NX2NvbG9yID0gX194X3BhcmVudC0+X01fY29sb3I7CiAgICAgICAgICAgICAg ICAgIF9feF9wYXJlbnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIGlm IChfX3ctPl9NX3JpZ2h0KQogICAgICAgICAgICAgICAgICAgIF9fdy0+X01fcmlnaHQtPl9NX2Nv bG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3JvdGF0ZV9sZWZ0KF9f eF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg ICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHsKCiAgICAgICAg ICAgICAgX1JiX3RyZWVfbm9kZV9iYXNlKiBfX3cgPSBfX3hfcGFyZW50LT5fTV9sZWZ0OwogICAg ICAgICAgICAgIGlmIChfX3ctPl9NX2NvbG9yID09IF9NX3JlZCkKICAgICAgICAgICAgICAgIHsK ICAgICAgICAgICAgICAgICAgX193LT5fTV9jb2xvciA9IF9NX2JsYWNrOwogICAgICAgICAgICAg ICAgICBfX3hfcGFyZW50LT5fTV9jb2xvciA9IF9NX3JlZDsKICAgICAgICAgICAgICAgICAgX1Ji X3RyZWVfcm90YXRlX3JpZ2h0KF9feF9wYXJlbnQsIF9fcm9vdCk7CiAgICAgICAgICAgICAgICAg IF9fdyA9IF9feF9wYXJlbnQtPl9NX2xlZnQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg ICAgaWYgKChfX3ctPl9NX3JpZ2h0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01f cmlnaHQtPl9NX2NvbG9yID09IF9NX2JsYWNrKSAmJgogICAgICAgICAgICAgICAgICAoX193LT5f TV9sZWZ0ID09IDAgfHwKICAgICAgICAgICAgICAgICAgIF9fdy0+X01fbGVmdC0+X01fY29sb3Ig PT0gX01fYmxhY2spKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICBfX3ctPl9N X2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAgICAgICBfX3ggPSBfX3hfcGFyZW50OwogICAg ICAgICAgICAgICAgICBfX3hfcGFyZW50ID0gX194X3BhcmVudC0+X01fcGFyZW50OwogICAgICAg ICAgICAgICAgfQogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHsKICAgICAgICAg ICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCA9PSAwIHx8IF9fdy0+X01fbGVmdC0+X01fY29sb3Ig PT0gX01fYmxhY2spCiAgICAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICAg aWYgKF9fdy0+X01fcmlnaHQpIF9fdy0+X01fcmlnaHQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAg ICAgICAgICAgICAgICAgICAgICBfX3ctPl9NX2NvbG9yID0gX01fcmVkOwogICAgICAgICAgICAg ICAgICAgICAgX1JiX3RyZWVfcm90YXRlX2xlZnQoX193LCBfX3Jvb3QpOwogICAgICAgICAgICAg ICAgICAgICAgX193ID0gX194X3BhcmVudC0+X01fbGVmdDsKICAgICAgICAgICAgICAgICAgICB9 CiAgICAgICAgICAgICAgICAgIF9fdy0+X01fY29sb3IgPSBfX3hfcGFyZW50LT5fTV9jb2xvcjsK ICAgICAgICAgICAgICAgICAgX194X3BhcmVudC0+X01fY29sb3IgPSBfTV9ibGFjazsKICAgICAg ICAgICAgICAgICAgaWYgKF9fdy0+X01fbGVmdCkKICAgICAgICAgICAgICAgICAgICBfX3ctPl9N X2xlZnQtPl9NX2NvbG9yID0gX01fYmxhY2s7CiAgICAgICAgICAgICAgICAgIF9SYl90cmVlX3Jv dGF0ZV9yaWdodChfX3hfcGFyZW50LCBfX3Jvb3QpOwogICAgICAgICAgICAgICAgICBicmVhazsK ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIGlmIChfX3gpIF9feC0+X01f Y29sb3IgPSBfTV9ibGFjazsKICAgICAgfQogICAgcmV0dXJuIF9feTsKICB9CgoKCgoKCgogIHRl bXBsYXRlPHR5cGVuYW1lIF9UcCwgdHlwZW5hbWUgX0FsbG9jLCBib29sIF9TX2luc3RhbmNlbGVz cz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2UKICAgIHsKICAgIHB1YmxpYzoKICAgIHR5 cGVkZWYgdHlwZW5hbWUgX0FsbG9jX3RyYWl0czxfVHAsIF9BbGxvYz46OmFsbG9jYXRvcl90eXBl IGFsbG9jYXRvcl90eXBlOwoKICAgICAgYWxsb2NhdG9yX3R5cGUKICAgICAgZ2V0X2FsbG9jYXRv cigpIGNvbnN0IHsgcmV0dXJuIF9NX25vZGVfYWxsb2NhdG9yOyB9CgogICAgICBfUmJfdHJlZV9h bGxvY19iYXNlKGNvbnN0IGFsbG9jYXRvcl90eXBlJiBfX2EpCiAgICAgIDogX01fbm9kZV9hbGxv Y2F0b3IoX19hKSwgX01faGVhZGVyKDApIHt9CgogICAgcHJvdGVjdGVkOgogICAgICB0eXBlbmFt ZSBfQWxsb2NfdHJhaXRzPF9SYl90cmVlX25vZGU8X1RwPiwgX0FsbG9jPjo6YWxsb2NhdG9yX3R5 cGUKICAgICAgX01fbm9kZV9hbGxvY2F0b3I7CgogICAgICBfUmJfdHJlZV9ub2RlPF9UcD4qIF9N X2hlYWRlcjsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7 IHJldHVybiBfTV9ub2RlX2FsbG9jYXRvci5hbGxvY2F0ZSgxKTsgfQoKICAgICAgdm9pZAogICAg ICBfTV9wdXRfbm9kZShfUmJfdHJlZV9ub2RlPF9UcD4qIF9fcCkKICAgICAgeyBfTV9ub2RlX2Fs bG9jYXRvci5kZWFsbG9jYXRlKF9fcCwgMSk7IH0KICAgIH07CgoKICB0ZW1wbGF0ZTx0eXBlbmFt ZSBfVHAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGNsYXNzIF9SYl90cmVlX2FsbG9jX2Jhc2U8X1Rw LCBfQWxsb2MsIHRydWU+CiAgICB7CiAgICBwdWJsaWM6CiAgICB0eXBlZGVmIHR5cGVuYW1lIF9B bGxvY190cmFpdHM8X1RwLCBfQWxsb2M+OjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsK ICAgICAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIGFsbG9j YXRvcl90eXBlKCk7IH0KCiAgICAgIF9SYl90cmVlX2FsbG9jX2Jhc2UoY29uc3QgYWxsb2NhdG9y X3R5cGUmKSA6IF9NX2hlYWRlcigwKSB7fQoKICAgIHByb3RlY3RlZDoKICAgICAgX1JiX3RyZWVf bm9kZTxfVHA+KiBfTV9oZWFkZXI7CgogICAgICB0eXBlZGVmIHR5cGVuYW1lIF9BbGxvY190cmFp dHM8X1JiX3RyZWVfbm9kZTxfVHA+LCBfQWxsb2M+OjpfQWxsb2NfdHlwZQogICAgICBfQWxsb2Nf dHlwZTsKCiAgICAgIF9SYl90cmVlX25vZGU8X1RwPioKICAgICAgX01fZ2V0X25vZGUoKSB7IHJl dHVybiBfQWxsb2NfdHlwZTo6YWxsb2NhdGUoMSk7IH0KCiAgICAgIHZvaWQKICAgICAgX01fcHV0 X25vZGUoX1JiX3RyZWVfbm9kZTxfVHA+KiBfX3ApIHsgX0FsbG9jX3R5cGU6OmRlYWxsb2NhdGUo X19wLCAxKTsgfQogICAgfTsKCiAgdGVtcGxhdGU8dHlwZW5hbWUgX1RwLCB0eXBlbmFtZSBfQWxs b2M+CiAgICBzdHJ1Y3QgX1JiX3RyZWVfYmFzZSA6IHB1YmxpYyBfUmJfdHJlZV9hbGxvY19iYXNl PF9UcCwgX0FsbG9jLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX0FsbG9jX3Ry YWl0czxfVHAsIF9BbGxvYz46Ol9TX2luc3RhbmNlbGVzcz4KICAgIHsKICAgICAgdHlwZWRlZiBf UmJfdHJlZV9hbGxvY19iYXNlPF9UcCwKICAgICAgICBfQWxsb2MsIF9BbGxvY190cmFpdHM8X1Rw LCBfQWxsb2M+OjpfU19pbnN0YW5jZWxlc3M+IF9CYXNlOwogICAgICB0eXBlZGVmIHR5cGVuYW1l IF9CYXNlOjphbGxvY2F0b3JfdHlwZSBhbGxvY2F0b3JfdHlwZTsKCiAgICAgIF9SYl90cmVlX2Jh c2UoY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSkKICAgICAgOiBfQmFzZShfX2EpIHsgX01faGVh ZGVyID0gX01fZ2V0X25vZGUoKTsgfQogICAgICB+X1JiX3RyZWVfYmFzZSgpIHsgX01fcHV0X25v ZGUoX01faGVhZGVyKTsgfQogICAgfTsKCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVu YW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21w YXJlLCB0eXBlbmFtZSBfQWxsb2MgPSBhbGxvY2F0b3I8X1ZhbD4gPgogICAgY2xhc3MgX1JiX3Ry ZWUgOiBwcm90ZWN0ZWQgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+CiAgICB7CiAgICAgIHR5 cGVkZWYgX1JiX3RyZWVfYmFzZTxfVmFsLCBfQWxsb2M+IF9CYXNlOwoKICAgIHByb3RlY3RlZDoK ICAgICAgdHlwZWRlZiBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9CYXNlX3B0cjsKICAgICAgdHlwZWRl ZiBfUmJfdHJlZV9ub2RlPF9WYWw+IF9SYl90cmVlX25vZGU7CgogICAgcHVibGljOgogICAgICB0 eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgICAgIHR5cGVkZWYgX1ZhbCB2YWx1ZV90eXBlOwogICAg ICB0eXBlZGVmIHZhbHVlX3R5cGUqIHBvaW50ZXI7CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVf dHlwZSogY29uc3RfcG9pbnRlcjsKICAgICAgdHlwZWRlZiB2YWx1ZV90eXBlJiByZWZlcmVuY2U7 CiAgICAgIHR5cGVkZWYgY29uc3QgdmFsdWVfdHlwZSYgY29uc3RfcmVmZXJlbmNlOwogICAgICB0 eXBlZGVmIF9SYl90cmVlX25vZGUqIF9MaW5rX3R5cGU7CiAgICAgIHR5cGVkZWYgc2l6ZV90IHNp emVfdHlwZTsKICAgICAgdHlwZWRlZiBwdHJkaWZmX3QgZGlmZmVyZW5jZV90eXBlOwoKICAgICAg dHlwZWRlZiB0eXBlbmFtZSBfQmFzZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CiAg ICAgIGFsbG9jYXRvcl90eXBlIGdldF9hbGxvY2F0b3IoKSBjb25zdCB7IHJldHVybiBfQmFzZTo6 Z2V0X2FsbG9jYXRvcigpOyB9CgogICAgcHJvdGVjdGVkOgogICAgICB1c2luZyBfQmFzZTo6X01f Z2V0X25vZGU7CiAgICAgIHVzaW5nIF9CYXNlOjpfTV9wdXRfbm9kZTsKICAgICAgdXNpbmcgX0Jh c2U6Ol9NX2hlYWRlcjsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY3JlYXRlX25vZGUoY29u c3QgdmFsdWVfdHlwZSYgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3RtcCA9IF9N X2dldF9ub2RlKCk7CiAgICAgICAgdHJ5CiAgICAgICAgICB7IF9Db25zdHJ1Y3QoJl9fdG1wLT5f TV92YWx1ZV9maWVsZCwgX194KTsgfQogICAgICAgIGNhdGNoKC4uLikKICAgICAgICAgIHsKICAg ICAgICAgIF9NX3B1dF9ub2RlKF9fdG1wKTsKICAgICAgICAgIHRocm93OwogICAgICAgICAgfQog ICAgICAgIHJldHVybiBfX3RtcDsKICAgICAgfQoKICAgICAgX0xpbmtfdHlwZQogICAgICBfTV9j bG9uZV9ub2RlKF9MaW5rX3R5cGUgX194KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3Rt cCA9IF9NX2NyZWF0ZV9ub2RlKF9feC0+X01fdmFsdWVfZmllbGQpOwogICAgICAgIF9fdG1wLT5f TV9jb2xvciA9IF9feC0+X01fY29sb3I7CiAgICAgICAgX190bXAtPl9NX2xlZnQgPSAwOwogICAg ICAgIF9fdG1wLT5fTV9yaWdodCA9IDA7CiAgICAgICAgcmV0dXJuIF9fdG1wOwogICAgICB9Cgog ICAgICB2b2lkCiAgICAgIGRlc3Ryb3lfbm9kZShfTGlua190eXBlIF9fcCkKICAgICAgewogICAg ICAgIF9EZXN0cm95KCZfX3AtPl9NX3ZhbHVlX2ZpZWxkKTsKICAgICAgICBfTV9wdXRfbm9kZShf X3ApOwogICAgICB9CgogICAgICBzaXplX3R5cGUgX01fbm9kZV9jb3VudDsKICAgICAgX0NvbXBh cmUgX01fa2V5X2NvbXBhcmU7CgogICAgICBfTGlua190eXBlJgogICAgICBfTV9yb290KCkgY29u c3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3BhcmVudDsgfQoKICAgICAg X0xpbmtfdHlwZSYKICAgICAgX01fbGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiAoX0xpbmtfdHlw ZSYpIF9NX2hlYWRlci0+X01fbGVmdDsgfQoKICAgICAgX0xpbmtfdHlwZSYKICAgICAgX01fcmln aHRtb3N0KCkgY29uc3QgeyByZXR1cm4gKF9MaW5rX3R5cGUmKSBfTV9oZWFkZXItPl9NX3JpZ2h0 OyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfTGlua190eXBlIF9f eCkgeyByZXR1cm4gKF9MaW5rX3R5cGUmKShfX3gtPl9NX2xlZnQpOyB9CgogICAgICBzdGF0aWMg X0xpbmtfdHlwZSYKICAgICAgX1NfcmlnaHQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlu a190eXBlJikoX194LT5fTV9yaWdodCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190eXBlJgogICAg ICBfU19wYXJlbnQoX0xpbmtfdHlwZSBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5f TV9wYXJlbnQpOyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9MaW5r X3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX3ZhbHVlX2ZpZWxkOyB9CgogICAgICBzdGF0aWMg Y29uc3QgX0tleSYKICAgICAgX1Nfa2V5KF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfS2V5T2ZW YWx1ZSgpKF9TX3ZhbHVlKF9feCkpOyB9CgogICAgICBzdGF0aWMgX1JiX3RyZWVfY29sb3ImCiAg ICAgIF9TX2NvbG9yKF9MaW5rX3R5cGUgX194KSB7IHJldHVybiBfX3gtPl9NX2NvbG9yOyB9Cgog ICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfbGVmdChfQmFzZV9wdHIgX194KSB7IHJl dHVybiAoX0xpbmtfdHlwZSYpKF9feC0+X01fbGVmdCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190 eXBlJgogICAgICBfU19yaWdodChfQmFzZV9wdHIgX194KSB7IHJldHVybiAoX0xpbmtfdHlwZSYp KF9feC0+X01fcmlnaHQpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZSYKICAgICAgX1NfcGFy ZW50KF9CYXNlX3B0ciBfX3gpIHsgcmV0dXJuIChfTGlua190eXBlJikoX194LT5fTV9wYXJlbnQp OyB9CgogICAgICBzdGF0aWMgcmVmZXJlbmNlCiAgICAgIF9TX3ZhbHVlKF9CYXNlX3B0ciBfX3gp IHsgcmV0dXJuICgoX0xpbmtfdHlwZSlfX3gpLT5fTV92YWx1ZV9maWVsZDsgfQoKICAgICAgc3Rh dGljIGNvbnN0IF9LZXkmCiAgICAgIF9TX2tleShfQmFzZV9wdHIgX194KSB7IHJldHVybiBfS2V5 T2ZWYWx1ZSgpKF9TX3ZhbHVlKF9MaW5rX3R5cGUoX194KSkpO30KCiAgICAgIHN0YXRpYyBfUmJf dHJlZV9jb2xvciYKICAgICAgX1NfY29sb3IoX0Jhc2VfcHRyIF9feCkgeyByZXR1cm4gKF9MaW5r X3R5cGUoX194KS0+X01fY29sb3IpOyB9CgogICAgICBzdGF0aWMgX0xpbmtfdHlwZQogICAgICBf U19taW5pbXVtKF9MaW5rX3R5cGUgX194KQogICAgICB7IHJldHVybiAoX0xpbmtfdHlwZSkgX1Ji X3RyZWVfbm9kZV9iYXNlOjpfU19taW5pbXVtKF9feCk7IH0KCiAgICAgIHN0YXRpYyBfTGlua190 eXBlCiAgICAgIF9TX21heGltdW0oX0xpbmtfdHlwZSBfX3gpCiAgICAgIHsgcmV0dXJuIChfTGlu a190eXBlKSBfUmJfdHJlZV9ub2RlX2Jhc2U6Ol9TX21heGltdW0oX194KTsgfQoKICAgIHB1Ymxp YzoKICAgICAgdHlwZWRlZiBfUmJfdHJlZV9pdGVyYXRvcjx2YWx1ZV90eXBlLCByZWZlcmVuY2Us IHBvaW50ZXI+IGl0ZXJhdG9yOwogICAgICB0eXBlZGVmIF9SYl90cmVlX2l0ZXJhdG9yPHZhbHVl X3R5cGUsIGNvbnN0X3JlZmVyZW5jZSwgY29uc3RfcG9pbnRlcj4KICAgICAgY29uc3RfaXRlcmF0 b3I7CgogICAgICB0eXBlZGVmIHJldmVyc2VfaXRlcmF0b3I8Y29uc3RfaXRlcmF0b3I+IGNvbnN0 X3JldmVyc2VfaXRlcmF0b3I7CiAgICAgIHR5cGVkZWYgcmV2ZXJzZV9pdGVyYXRvcjxpdGVyYXRv cj4gcmV2ZXJzZV9pdGVyYXRvcjsKCiAgICBwcml2YXRlOgogICAgICBpdGVyYXRvcgogICAgICBf TV9pbnNlcnQoX0Jhc2VfcHRyIF9feCwgX0Jhc2VfcHRyIF9feSwgY29uc3QgdmFsdWVfdHlwZSYg X192KTsKCiAgICAgIF9MaW5rX3R5cGUKICAgICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xp bmtfdHlwZSBfX3ApOwoKICAgICAgdm9pZAogICAgICBfTV9lcmFzZShfTGlua190eXBlIF9feCk7 CgogICAgcHVibGljOgoKICAgICAgX1JiX3RyZWUoKQogICAgICAgIDogX0Jhc2UoYWxsb2NhdG9y X3R5cGUoKSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9jb21wYXJlKCkKICAgICAgeyBfTV9l bXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9SYl90cmVlKGNvbnN0IF9Db21wYXJlJiBfX2Nv bXApCiAgICAgICAgOiBfQmFzZShhbGxvY2F0b3JfdHlwZSgpKSwgX01fbm9kZV9jb3VudCgwKSwg X01fa2V5X2NvbXBhcmUoX19jb21wKQogICAgICB7IF9NX2VtcHR5X2luaXRpYWxpemUoKTsgfQoK ICAgICAgX1JiX3RyZWUoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwgY29uc3QgYWxsb2NhdG9yX3R5 cGUmIF9fYSkKICAgICAgICA6IF9CYXNlKF9fYSksIF9NX25vZGVfY291bnQoMCksIF9NX2tleV9j b21wYXJlKF9fY29tcCkKICAgICAgeyBfTV9lbXB0eV9pbml0aWFsaXplKCk7IH0KCiAgICAgIF9S Yl90cmVlKGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+JiBfX3gpCiAgICAgICAgOiBfQmFzZShfX3guZ2V0X2FsbG9jYXRvcigpKSwgX01fbm9kZV9j b3VudCgwKSwKICAgICAgICAgICAgICAgICBfTV9rZXlfY29tcGFyZShfX3guX01fa2V5X2NvbXBh cmUpCiAgICAgIHsKICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9PSAwKQogICAgICAgICAgX01f ZW1wdHlfaW5pdGlhbGl6ZSgpOwogICAgICAgIGVsc2UKICAgICAgICAgIHsKICAgICAgICAgICAg X1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsKICAgICAgICAgICAgX01fcm9vdCgpID0gX01f Y29weShfX3guX01fcm9vdCgpLCBfTV9oZWFkZXIpOwogICAgICAgICAgICBfTV9sZWZ0bW9zdCgp ID0gX1NfbWluaW11bShfTV9yb290KCkpOwogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9T X21heGltdW0oX01fcm9vdCgpKTsKICAgICAgICAgIH0KICAgICAgICBfTV9ub2RlX2NvdW50ID0g X194Ll9NX25vZGVfY291bnQ7CiAgICAgIH0KCiAgICAgIH5fUmJfdHJlZSgpIHsgY2xlYXIoKTsg fQoKICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m CiAgICAgIG9wZXJhdG9yPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194KTsKCiAgICBwcml2YXRlOgogICAgICB2b2lkIF9NX2VtcHR5X2lu aXRpYWxpemUoKQogICAgICB7CiAgICAgICAgX1NfY29sb3IoX01faGVhZGVyKSA9IF9NX3JlZDsK CiAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVy OwogICAgICAgIF9NX3JpZ2h0bW9zdCgpID0gX01faGVhZGVyOwogICAgICB9CgogICAgcHVibGlj OgoKICAgICAgX0NvbXBhcmUKICAgICAga2V5X2NvbXAoKSBjb25zdCB7IHJldHVybiBfTV9rZXlf Y29tcGFyZTsgfQoKICAgICAgaXRlcmF0b3IKICAgICAgYmVnaW4oKSB7IHJldHVybiBfTV9sZWZ0 bW9zdCgpOyB9CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICBiZWdpbigpIGNvbnN0IHsgcmV0 dXJuIF9NX2xlZnRtb3N0KCk7IH0KCiAgICAgIGl0ZXJhdG9yCiAgICAgIGVuZCgpIHsgcmV0dXJu IF9NX2hlYWRlcjsgfQoKICAgICAgY29uc3RfaXRlcmF0b3IKICAgICAgZW5kKCkgY29uc3QgeyBy ZXR1cm4gX01faGVhZGVyOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJiZWdpbigp IHsgcmV0dXJuIHJldmVyc2VfaXRlcmF0b3IoZW5kKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNl X2l0ZXJhdG9yCiAgICAgIHJiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGNvbnN0X3JldmVyc2VfaXRl cmF0b3IoZW5kKCkpOyB9CgogICAgICByZXZlcnNlX2l0ZXJhdG9yCiAgICAgIHJlbmQoKSB7IHJl dHVybiByZXZlcnNlX2l0ZXJhdG9yKGJlZ2luKCkpOyB9CgogICAgICBjb25zdF9yZXZlcnNlX2l0 ZXJhdG9yCiAgICAgIHJlbmQoKSBjb25zdCB7IHJldHVybiBjb25zdF9yZXZlcnNlX2l0ZXJhdG9y KGJlZ2luKCkpOyB9CgogICAgICBib29sCiAgICAgIGVtcHR5KCkgY29uc3QgeyByZXR1cm4gX01f bm9kZV9jb3VudCA9PSAwOyB9CgogICAgICBzaXplX3R5cGUKICAgICAgc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX25vZGVfY291bnQ7IH0KCiAgICAgIHNpemVfdHlwZQogICAgICBtYXhfc2l6ZSgp IGNvbnN0IHsgcmV0dXJuIHNpemVfdHlwZSgtMSk7IH0KCiAgICAgIHZvaWQKICAgICAgc3dhcChf UmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX190KQogICAg ICB7CiAgICAgICAgc3RkOjpzd2FwKF9NX2hlYWRlciwgX190Ll9NX2hlYWRlcik7CiAgICAgICAg c3RkOjpzd2FwKF9NX25vZGVfY291bnQsIF9fdC5fTV9ub2RlX2NvdW50KTsKICAgICAgICBzdGQ6 OnN3YXAoX01fa2V5X2NvbXBhcmUsIF9fdC5fTV9rZXlfY29tcGFyZSk7CiAgICAgIH0KCgogICAg ICBwYWlyPGl0ZXJhdG9yLGJvb2w+CiAgICAgIGluc2VydF91bmlxdWUoY29uc3QgdmFsdWVfdHlw ZSYgX194KTsKCiAgICAgIGl0ZXJhdG9yCiAgICAgIGluc2VydF9lcXVhbChjb25zdCB2YWx1ZV90 eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAgaW5zZXJ0X3VuaXF1ZShpdGVyYXRvciBf X3Bvc2l0aW9uLCBjb25zdCB2YWx1ZV90eXBlJiBfX3gpOwoKICAgICAgaXRlcmF0b3IKICAgICAg aW5zZXJ0X2VxdWFsKGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZhbHVlX3R5cGUmIF9feCk7 CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9pZAogICAg ICBpbnNlcnRfdW5pcXVlKF9JbnB1dEl0ZXJhdG9yIF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9f bGFzdCk7CgogICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBfSW5wdXRJdGVyYXRvcj4KICAgICAgdm9p ZAogICAgICBpbnNlcnRfZXF1YWwoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0 b3IgX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbik7 CgogICAgICBzaXplX3R5cGUKICAgICAgZXJhc2UoY29uc3Qga2V5X3R5cGUmIF9feCk7CgogICAg ICB2b2lkCiAgICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCk7Cgog ICAgICB2b2lkCiAgICAgIGVyYXNlKGNvbnN0IGtleV90eXBlKiBfX2ZpcnN0LCBjb25zdCBrZXlf dHlwZSogX19sYXN0KTsKCiAgICAgIHZvaWQKICAgICAgY2xlYXIoKQogICAgICB7CiAgICAgICAg aWYgKF9NX25vZGVfY291bnQgIT0gMCkKICAgICAgICAgIHsKICAgICAgICAgICAgX01fZXJhc2Uo X01fcm9vdCgpKTsKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9NX2hlYWRlcjsKICAgICAg ICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAgICAgX01fcmlnaHRtb3N0KCkgPSBfTV9oZWFk ZXI7CiAgICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgfQogICAgICB9CgoK ICAgICAgaXRlcmF0b3IKICAgICAgZmluZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAgIGNv bnN0X2l0ZXJhdG9yCiAgICAgIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg ICBzaXplX3R5cGUKICAgICAgY291bnQoY29uc3Qga2V5X3R5cGUmIF9feCkgY29uc3Q7CgogICAg ICBpdGVyYXRvcgogICAgICBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KTsKCiAgICAg IGNvbnN0X2l0ZXJhdG9yCiAgICAgIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0OwoKICAgICAgaXRlcmF0b3IKICAgICAgdXBwZXJfYm91bmQoY29uc3Qga2V5X3R5cGUmIF9f eCk7CgogICAgICBjb25zdF9pdGVyYXRvcgogICAgICB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlw ZSYgX194KSBjb25zdDsKCiAgICAgIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+CiAgICAgIGVxdWFs X3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpOwoKICAgICAgcGFpcjxjb25zdF9pdGVyYXRvciwg Y29uc3RfaXRlcmF0b3I+CiAgICAgIGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNv bnN0OwoKCiAgICAgIGJvb2wKICAgICAgX19yYl92ZXJpZnkoKSBjb25zdDsKICAgIH07CgogIHRl bXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVl LAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxp bmUgYm9vbAogICAgb3BlcmF0b3I9PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFs dWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgewogICAgICBy ZXR1cm4gX194LnNpemUoKSA9PSBfX3kuc2l6ZSgpICYmCiAgICAgICAgZXF1YWwoX194LmJlZ2lu KCksIF9feC5lbmQoKSwgX195LmJlZ2luKCkpOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJh dG9yPChjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j PiYgX194LAogICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpCiAgICB7CiAgICAgIHJldHVybiBsZXhpY29ncmFwaGlj YWxfY29tcGFyZShfX3guYmVnaW4oKSwgX194LmVuZCgpLAogICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgX195LmJlZ2luKCksIF9feS5lbmQoKSk7CiAgICB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3IhPShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogICAgeyByZXR1cm4gIShfX3gg PT0gX195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBl bmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUg X0FsbG9jPgogICAgaW5saW5lIGJvb2wKICAgIG9wZXJhdG9yPihjb25zdCBfUmJfdHJlZTxfS2V5 LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgIGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3kp CiAgICB7IHJldHVybiBfX3kgPCBfX3g7IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlw ZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0Nv bXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGluZSBib29sCiAgICBvcGVyYXRvcjw9KGNv bnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs CiAgICAgICAgICAgICAgIGNvbnN0IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29t cGFyZSxfQWxsb2M+JiBfX3kpCiAgeyByZXR1cm4gIShfX3kgPCBfX3gpOyB9CgogIHRlbXBsYXRl PHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAg ICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICBpbmxpbmUgYm9v bAogICAgb3BlcmF0b3I+PShjb25zdCBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0Nv bXBhcmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICBjb25zdCBfUmJfdHJlZTxfS2V5LF9W YWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPiYgX195KQogIHsgcmV0dXJuICEoX194IDwg X195KTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFt ZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0Fs bG9jPgogICAgaW5saW5lIHZvaWQKICAgIHN3YXAoX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZh bHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgX1JiX3RyZWU8X0tleSxfVmFsLF9L ZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mIF9feSkKICAgIHsgX194LnN3YXAoX195KTsgfQoK ICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZW YWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4mCiAgICBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBvcGVyYXRv cj0oY29uc3QgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz4m IF9feCkKICAgIHsKICAgICAgaWYgKHRoaXMgIT0gJl9feCkKICAgICAgICB7CgogICAgICAgICAg Y2xlYXIoKTsKICAgICAgICAgIF9NX25vZGVfY291bnQgPSAwOwogICAgICAgICAgX01fa2V5X2Nv bXBhcmUgPSBfX3guX01fa2V5X2NvbXBhcmU7CiAgICAgICAgICBpZiAoX194Ll9NX3Jvb3QoKSA9 PSAwKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX01fcm9vdCgpID0gMDsKICAgICAgICAg ICAgICBfTV9sZWZ0bW9zdCgpID0gX01faGVhZGVyOwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9z dCgpID0gX01faGVhZGVyOwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IHsKICAgICAgICAgICAgICBfTV9yb290KCkgPSBfTV9jb3B5KF9feC5fTV9yb290KCksIF9NX2hl YWRlcik7CiAgICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9TX21pbmltdW0oX01fcm9vdCgp KTsKICAgICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9TX21heGltdW0oX01fcm9vdCgpKTsK ICAgICAgICAgICAgICBfTV9ub2RlX2NvdW50ID0gX194Ll9NX25vZGVfY291bnQ7CiAgICAgICAg ICAgIH0KICAgICAgICB9CiAgICAgIHJldHVybiAqdGhpczsKICAgIH0KCiAgdGVtcGxhdGU8dHlw ZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAg ICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90 cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcgogICAg X1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01f aW5zZXJ0KF9CYXNlX3B0ciBfX3hfLCBfQmFzZV9wdHIgX195XywgY29uc3QgX1ZhbCYgX192KQog ICAgewogICAgICBfTGlua190eXBlIF9feCA9IChfTGlua190eXBlKSBfX3hfOwogICAgICBfTGlu a190eXBlIF9feSA9IChfTGlua190eXBlKSBfX3lfOwogICAgICBfTGlua190eXBlIF9fejsKCiAg ICAgIGlmIChfX3kgPT0gX01faGVhZGVyIHx8IF9feCAhPSAwIHx8CiAgICAgICAgICBfTV9rZXlf Y29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9TX2tleShfX3kpKSkKICAgICAgICB7CiAgICAg ICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAgX1NfbGVmdChfX3kpID0g X196OwoKICAgICAgICAgIGlmIChfX3kgPT0gX01faGVhZGVyKQogICAgICAgICAgICB7CiAgICAg ICAgICAgICAgX01fcm9vdCgpID0gX196OwogICAgICAgICAgICAgIF9NX3JpZ2h0bW9zdCgpID0g X196OwogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlIGlmIChfX3kgPT0gX01fbGVmdG1vc3Qo KSkKICAgICAgICAgICAgX01fbGVmdG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIGVsc2UK ICAgICAgICB7CiAgICAgICAgICBfX3ogPSBfTV9jcmVhdGVfbm9kZShfX3YpOwogICAgICAgICAg X1NfcmlnaHQoX195KSA9IF9fejsKCiAgICAgICAgICBpZiAoX195ID09IF9NX3JpZ2h0bW9zdCgp KQogICAgICAgICAgICBfTV9yaWdodG1vc3QoKSA9IF9fejsKICAgICAgICB9CiAgICAgIF9TX3Bh cmVudChfX3opID0gX195OwogICAgICBfU19sZWZ0KF9feikgPSAwOwogICAgICBfU19yaWdodChf X3opID0gMDsKICAgICAgX1JiX3RyZWVfcmViYWxhbmNlKF9feiwgX01faGVhZGVyLT5fTV9wYXJl bnQpOwogICAgICArK19NX25vZGVfY291bnQ7CiAgICAgIHJldHVybiBpdGVyYXRvcihfX3opOwog ICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBf S2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9j PgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9B bGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBh cmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1YWwoY29uc3QgX1ZhbCYgX192KQogICAgewogICAg ICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlwZSBfX3ggPSBfTV9y b290KCk7CiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICB7CiAgICAgICAgICBfX3kgPSBf X3g7CiAgICAgICAgICBfX3ggPSBfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiksIF9T X2tleShfX3gpKSA/CiAgICAgICAgICAgIF9TX2xlZnQoX194KSA6IF9TX3JpZ2h0KF9feCk7CiAg ICAgICAgfQogICAgICByZXR1cm4gX01faW5zZXJ0KF9feCwgX195LCBfX3YpOwogICAgfQoKICB0 ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1 ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgcGFp cjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6aXRlcmF0b3IsCiAgICBib29sPgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46OgogICAgaW5zZXJ0X3VuaXF1ZShjb25zdCBfVmFsJiBfX3YpCiAg ICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190eXBlIF9f eCA9IF9NX3Jvb3QoKTsKICAgICAgYm9vbCBfX2NvbXAgPSB0cnVlOwogICAgICB3aGlsZSAoX194 ICE9IDApCiAgICAgICAgewogICAgICAgICAgX195ID0gX194OwogICAgICAgICAgX19jb21wID0g X01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLCBfU19rZXkoX194KSk7CiAgICAgICAg ICBfX3ggPSBfX2NvbXAgPyBfU19sZWZ0KF9feCkgOiBfU19yaWdodChfX3gpOwogICAgICAgIH0K ICAgICAgaXRlcmF0b3IgX19qID0gaXRlcmF0b3IoX195KTsKICAgICAgaWYgKF9fY29tcCkKICAg ICAgICBpZiAoX19qID09IGJlZ2luKCkpCiAgICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixi b29sPihfTV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICAgIGVsc2UKICAgICAg ICAgIC0tX19qOwogICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fai5fTV9ub2RlKSwg X0tleU9mVmFsdWUoKShfX3YpKSkKICAgICAgICByZXR1cm4gcGFpcjxpdGVyYXRvcixib29sPihf TV9pbnNlcnQoX194LCBfX3ksIF9fdiksIHRydWUpOwogICAgICByZXR1cm4gcGFpcjxpdGVyYXRv cixib29sPihfX2osIGZhbHNlKTsKICAgIH0KCgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9D b21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFs LCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxf S2V5LCBfVmFsLCBfS2V5T2ZWYWx1ZSwgX0NvbXBhcmUsIF9BbGxvYz46OgogICAgaW5zZXJ0X3Vu aXF1ZShpdGVyYXRvciBfX3Bvc2l0aW9uLCBjb25zdCBfVmFsJiBfX3YpCiAgICB7CiAgICAgIGlm IChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVhZGVyLT5fTV9sZWZ0KQogICAgICAgIHsKCiAg ICAgICAgICBpZiAoc2l6ZSgpID4gMCAmJgogICAgICAgICAgICAgIF9NX2tleV9jb21wYXJlKF9L ZXlPZlZhbHVlKCkoX192KSwgX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSkpKQogICAgICAgICAg ICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19wb3NpdGlvbi5fTV9ub2Rl LCBfX3YpOwoKICAgICAgICAgIGVsc2UKICAgICAgICAgICAgcmV0dXJuIGluc2VydF91bmlxdWUo X192KS5maXJzdDsKICAgICAgICB9CiAgICAgIGVsc2UgaWYgKF9fcG9zaXRpb24uX01fbm9kZSA9 PSBfTV9oZWFkZXIpCiAgICAgICAgewoKICAgICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfU19r ZXkoX01fcmlnaHRtb3N0KCkpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpKQogICAgICAgICAgICByZXR1 cm4gX01faW5zZXJ0KDAsIF9NX3JpZ2h0bW9zdCgpLCBfX3YpOwogICAgICAgICAgZWxzZQogICAg ICAgICAgICByZXR1cm4gaW5zZXJ0X3VuaXF1ZShfX3YpLmZpcnN0OwogICAgICAgIH0KICAgICAg ZWxzZQogICAgICAgIHsKICAgICAgICAgIGl0ZXJhdG9yIF9fYmVmb3JlID0gX19wb3NpdGlvbjsK ICAgICAgICAgIC0tX19iZWZvcmU7CiAgICAgICAgICBpZiAoX01fa2V5X2NvbXBhcmUoX1Nfa2V5 KF9fYmVmb3JlLl9NX25vZGUpLCBfS2V5T2ZWYWx1ZSgpKF9fdikpCiAgICAgICAgICAgICAgJiYg X01fa2V5X2NvbXBhcmUoX0tleU9mVmFsdWUoKShfX3YpLF9TX2tleShfX3Bvc2l0aW9uLl9NX25v ZGUpKSkKICAgICAgICAgICAgewogICAgICAgICAgICAgIGlmIChfU19yaWdodChfX2JlZm9yZS5f TV9ub2RlKSA9PSAwKQogICAgICAgICAgICAgICAgcmV0dXJuIF9NX2luc2VydCgwLCBfX2JlZm9y ZS5fTV9ub2RlLCBfX3YpOwogICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgIHJldHVy biBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUsIF9fdik7 CgogICAgICAgICAgICB9CiAgICAgICAgICBlbHNlCiAgICAgICAgICAgIHJldHVybiBpbnNlcnRf dW5pcXVlKF9fdikuZmlyc3Q7CiAgICAgICAgfQogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBf S2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBl bmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tl eSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6CiAgICBpbnNlcnRfZXF1 YWwoaXRlcmF0b3IgX19wb3NpdGlvbiwgY29uc3QgX1ZhbCYgX192KQogICAgewogICAgICBpZiAo X19wb3NpdGlvbi5fTV9ub2RlID09IF9NX2hlYWRlci0+X01fbGVmdCkKICAgICAgICB7CgogICAg ICAgICAgaWYgKHNpemUoKSA+IDAgJiYKICAgICAgICAgICAgICAhX01fa2V5X2NvbXBhcmUoX1Nf a2V5KF9fcG9zaXRpb24uX01fbm9kZSksIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAg IHJldHVybiBfTV9pbnNlcnQoX19wb3NpdGlvbi5fTV9ub2RlLCBfX3Bvc2l0aW9uLl9NX25vZGUs IF9fdik7CgogICAgICAgICAgZWxzZQogICAgICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9f dik7CiAgICAgICAgfQogICAgICBlbHNlIGlmIChfX3Bvc2l0aW9uLl9NX25vZGUgPT0gX01faGVh ZGVyKQogICAgICAgIHsKCiAgICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9LZXlPZlZhbHVl KCkoX192KSwgX1Nfa2V5KF9NX3JpZ2h0bW9zdCgpKSkpCiAgICAgICAgICAgIHJldHVybiBfTV9p bnNlcnQoMCwgX01fcmlnaHRtb3N0KCksIF9fdik7CiAgICAgICAgICBlbHNlCiAgICAgICAgICAg IHJldHVybiBpbnNlcnRfZXF1YWwoX192KTsKICAgICAgICB9CiAgICAgIGVsc2UKICAgICAgICB7 CiAgICAgICAgICBpdGVyYXRvciBfX2JlZm9yZSA9IF9fcG9zaXRpb247CiAgICAgICAgICAtLV9f YmVmb3JlOwogICAgICAgICAgaWYgKCFfTV9rZXlfY29tcGFyZShfS2V5T2ZWYWx1ZSgpKF9fdiks IF9TX2tleShfX2JlZm9yZS5fTV9ub2RlKSkKICAgICAgICAgICAgICAmJiAhX01fa2V5X2NvbXBh cmUoX1Nfa2V5KF9fcG9zaXRpb24uX01fbm9kZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIF9LZXlPZlZhbHVlKCkoX192KSkpCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBp ZiAoX1NfcmlnaHQoX19iZWZvcmUuX01fbm9kZSkgPT0gMCkKICAgICAgICAgICAgICAgIHJldHVy biBfTV9pbnNlcnQoMCwgX19iZWZvcmUuX01fbm9kZSwgX192KTsKICAgICAgICAgICAgICBlbHNl CiAgICAgICAgICAgICAgICByZXR1cm4gX01faW5zZXJ0KF9fcG9zaXRpb24uX01fbm9kZSwgX19w b3NpdGlvbi5fTV9ub2RlLCBfX3YpOwoKICAgICAgICAgICAgfQogICAgICAgICAgZWxzZQogICAg ICAgICAgICByZXR1cm4gaW5zZXJ0X2VxdWFsKF9fdik7CiAgICAgICAgfQogICAgfQoKICB0ZW1w bGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAg ICAgIHR5cGVuYW1lIF9DbXAsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHRlbXBsYXRlPGNsYXNzIF9J ST4KICAgICAgdm9pZAogICAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tvVixfQ21wLF9BbGxvYz46 OgogICAgICBpbnNlcnRfZXF1YWwoX0lJIF9fZmlyc3QsIF9JSSBfX2xhc3QpCiAgICAgIHsKICAg ICAgICBmb3IgKCA7IF9fZmlyc3QgIT0gX19sYXN0OyArK19fZmlyc3QpCiAgICAgICAgICBpbnNl cnRfZXF1YWwoKl9fZmlyc3QpOwogICAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5 cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9Lb1YsCiAgICAgICAgICAgdHlwZW5hbWUgX0NtcCwgdHlw ZW5hbWUgX0FsbG9jPgogICAgdGVtcGxhdGU8Y2xhc3MgX0lJPgogICAgdm9pZAogICAgX1JiX3Ry ZWU8X0tleSxfVmFsLF9Lb1YsX0NtcCxfQWxsb2M+OjoKICAgIGluc2VydF91bmlxdWUoX0lJIF9f Zmlyc3QsIF9JSSBfX2xhc3QpCiAgICB7CiAgICAgIGZvciAoIDsgX19maXJzdCAhPSBfX2xhc3Q7 ICsrX19maXJzdCkKICAgICAgICBpbnNlcnRfdW5pcXVlKCpfX2ZpcnN0KTsKICAgIH0KCiAgdGVt cGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUs CiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIGlubGlu ZSB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9j Pjo6ZXJhc2UoaXRlcmF0b3IgX19wb3NpdGlvbikKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kg PQogICAgICAgIChfTGlua190eXBlKSBfUmJfdHJlZV9yZWJhbGFuY2VfZm9yX2VyYXNlKF9fcG9z aXRpb24uX01fbm9kZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBfTV9oZWFkZXItPl9NX3BhcmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBfTV9oZWFkZXItPl9NX2xlZnQsCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX01faGVhZGVyLT5fTV9yaWdodCk7 CiAgICAgIGRlc3Ryb3lfbm9kZShfX3kpOwogICAgICAtLV9NX25vZGVfY291bnQ7CiAgICB9Cgog IHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZh bHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0 eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6 c2l6ZV90eXBlCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6ZXJhc2UoY29uc3QgX0tleSYgX194KQogICAgewogICAgICBwYWlyPGl0ZXJhdG9yLGl0 ZXJhdG9yPiBfX3AgPSBlcXVhbF9yYW5nZShfX3gpOwogICAgICBzaXplX3R5cGUgX19uID0gZGlz dGFuY2UoX19wLmZpcnN0LCBfX3Auc2Vjb25kKTsKICAgICAgZXJhc2UoX19wLmZpcnN0LCBfX3Au c2Vjb25kKTsKICAgICAgcmV0dXJuIF9fbjsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tl eSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tvViwKICAgICAgICAgICB0eXBlbmFtZSBfQ29t cGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSwgX1ZhbCwg X0tvViwgX0NvbXBhcmUsIF9BbGxvYz46Ol9MaW5rX3R5cGUKICAgIF9SYl90cmVlPF9LZXksX1Zh bCxfS29WLF9Db21wYXJlLF9BbGxvYz46OgogICAgX01fY29weShfTGlua190eXBlIF9feCwgX0xp bmtfdHlwZSBfX3ApCiAgICB7CgogICAgICBfTGlua190eXBlIF9fdG9wID0gX01fY2xvbmVfbm9k ZShfX3gpOwogICAgICBfX3RvcC0+X01fcGFyZW50ID0gX19wOwoKICAgICAgdHJ5CiAgICAgICAg ewogICAgICAgICAgaWYgKF9feC0+X01fcmlnaHQpCiAgICAgICAgICAgIF9fdG9wLT5fTV9yaWdo dCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX190b3ApOwogICAgICAgICAgX19wID0gX190b3A7 CiAgICAgICAgICBfX3ggPSBfU19sZWZ0KF9feCk7CgogICAgICAgICAgd2hpbGUgKF9feCAhPSAw KQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9jbG9uZV9u b2RlKF9feCk7CiAgICAgICAgICAgICAgX19wLT5fTV9sZWZ0ID0gX195OwogICAgICAgICAgICAg IF9feS0+X01fcGFyZW50ID0gX19wOwogICAgICAgICAgICAgIGlmIChfX3gtPl9NX3JpZ2h0KQog ICAgICAgICAgICAgICAgX195LT5fTV9yaWdodCA9IF9NX2NvcHkoX1NfcmlnaHQoX194KSwgX195 KTsKICAgICAgICAgICAgICBfX3AgPSBfX3k7CiAgICAgICAgICAgICAgX194ID0gX1NfbGVmdChf X3gpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICBjYXRjaCguLi4pCiAgICAgICAgewog ICAgICAgICAgX01fZXJhc2UoX190b3ApOwogICAgICAgICAgdGhyb3c7CiAgICAgICAgfQogICAg ICByZXR1cm4gX190b3A7CiAgICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1l IF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgICB2b2lkCiAgICBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9m VmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6X01fZXJhc2UoX0xpbmtfdHlwZSBfX3gpCiAgICB7Cgog ICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgewogICAgICAgICAgX01fZXJhc2UoX1Nfcmln aHQoX194KSk7CiAgICAgICAgICBfTGlua190eXBlIF9feSA9IF9TX2xlZnQoX194KTsKICAgICAg ICAgIGRlc3Ryb3lfbm9kZShfX3gpOwogICAgICAgICAgX194ID0gX195OwogICAgICAgIH0KICAg IH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tl eU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4K ICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjoKICAgIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9fbGFzdCkKICAgIHsK ICAgICAgaWYgKF9fZmlyc3QgPT0gYmVnaW4oKSAmJiBfX2xhc3QgPT0gZW5kKCkpCiAgICAgICAg Y2xlYXIoKTsKICAgICAgZWxzZQogICAgICAgIHdoaWxlIChfX2ZpcnN0ICE9IF9fbGFzdCkgZXJh c2UoX19maXJzdCsrKTsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUg X1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUs IHR5cGVuYW1lIF9BbGxvYz4KICAgIHZvaWQKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZW YWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVyYXNlKGNvbnN0IF9LZXkqIF9fZmlyc3QsIGNv bnN0IF9LZXkqIF9fbGFzdCkKICAgIHsKICAgICAgd2hpbGUgKF9fZmlyc3QgIT0gX19sYXN0KQog ICAgICAgIGVyYXNlKCpfX2ZpcnN0KyspOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5 LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFt ZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxf VmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46Oml0ZXJhdG9yCiAgICBfUmJfdHJlZTxf S2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6ZmluZChjb25zdCBfS2V5JiBf X2spCiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVyOwogICAgICBfTGlua190 eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgIHdoaWxlIChfX3ggIT0gMCkKICAgICAgICBpZiAo IV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2spKQogICAgICAgICAgX195ID0gX194LCBf X3ggPSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQo X194KTsKCiAgICAgIGl0ZXJhdG9yIF9faiA9IGl0ZXJhdG9yKF9feSk7CiAgICAgIHJldHVybiAo X19qID09IGVuZCgpIHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkp ID8KICAgICAgICBlbmQoKSA6IF9fajsKICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwg dHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUg X0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxvYz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3Ry ZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgZmluZChjb25z dCBfS2V5JiBfX2spIGNvbnN0CiAgICB7CiAgICAgIF9MaW5rX3R5cGUgX195ID0gX01faGVhZGVy OwogICAgICBfTGlua190eXBlIF9feCA9IF9NX3Jvb3QoKTsKCiAgICAgd2hpbGUgKF9feCAhPSAw KQogICAgICAgewogICAgICAgICBpZiAoIV9NX2tleV9jb21wYXJlKF9TX2tleShfX3gpLCBfX2sp KQogICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgICBlbHNl CiAgICAgICAgICAgX194ID0gX1NfcmlnaHQoX194KTsKICAgICAgIH0KICAgICBjb25zdF9pdGVy YXRvciBfX2ogPSBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgIHJldHVybiAoX19qID09IGVuZCgp IHx8IF9NX2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9fai5fTV9ub2RlKSkpID8KICAgICAgIGVu ZCgpIDogX19qOwogICAgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFs LCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAgICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlw ZW5hbWUgX0FsbG9jPgogICAgdHlwZW5hbWUgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46OnNpemVfdHlwZQogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlP ZlZhbHVlLF9Db21wYXJlLF9BbGxvYz46OgogICAgY291bnQoY29uc3QgX0tleSYgX19rKSBjb25z dAogICAgewogICAgICBwYWlyPGNvbnN0X2l0ZXJhdG9yLCBjb25zdF9pdGVyYXRvcj4gX19wID0g ZXF1YWxfcmFuZ2UoX19rKTsKICAgICAgc2l6ZV90eXBlIF9fbiA9IGRpc3RhbmNlKF9fcC5maXJz dCwgX19wLnNlY29uZCk7CiAgICAgIHJldHVybiBfX247CiAgICB9CgogIHRlbXBsYXRlPHR5cGVu YW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAgICAg IHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJfdHJl ZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAgIF9S Yl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2Vy X2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9o ZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9f eCAhPSAwKQogICAgICAgIGlmICghX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAg ICAgICAgICBfX3kgPSBfX3gsIF9feCA9IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAg ICAgICBfX3ggPSBfU19yaWdodChfX3gpOwoKICAgICAgcmV0dXJuIGl0ZXJhdG9yKF9feSk7CiAg ICB9CgogIHRlbXBsYXRlPHR5cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9L ZXlPZlZhbHVlLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+ CiAgICB0eXBlbmFtZSBfUmJfdHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0Fs bG9jPjo6Y29uc3RfaXRlcmF0b3IKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxf Q29tcGFyZSxfQWxsb2M+OjoKICAgIGxvd2VyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykgY29uc3QK ICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBfTV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUg X194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUgKF9feCAhPSAwKQogICAgICAgIGlmICghX01f a2V5X2NvbXBhcmUoX1Nfa2V5KF9feCksIF9faykpCiAgICAgICAgICBfX3kgPSBfX3gsIF9feCA9 IF9TX2xlZnQoX194KTsKICAgICAgICBlbHNlCiAgICAgICAgICBfX3ggPSBfU19yaWdodChfX3gp OwoKICAgICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yKF9feSk7CiAgICB9CgogIHRlbXBsYXRlPHR5 cGVuYW1lIF9LZXksIHR5cGVuYW1lIF9WYWwsIHR5cGVuYW1lIF9LZXlPZlZhbHVlLAogICAgICAg ICAgIHR5cGVuYW1lIF9Db21wYXJlLCB0eXBlbmFtZSBfQWxsb2M+CiAgICB0eXBlbmFtZSBfUmJf dHJlZTxfS2V5LF9WYWwsX0tleU9mVmFsdWUsX0NvbXBhcmUsX0FsbG9jPjo6aXRlcmF0b3IKICAg IF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIHVw cGVyX2JvdW5kKGNvbnN0IF9LZXkmIF9faykKICAgIHsKICAgICAgX0xpbmtfdHlwZSBfX3kgPSBf TV9oZWFkZXI7CiAgICAgIF9MaW5rX3R5cGUgX194ID0gX01fcm9vdCgpOwoKICAgICAgd2hpbGUg KF9feCAhPSAwKQogICAgICAgIGlmIChfTV9rZXlfY29tcGFyZShfX2ssIF9TX2tleShfX3gpKSkK ICAgICAgICAgIF9feSA9IF9feCwgX194ID0gX1NfbGVmdChfX3gpOwogICAgICAgIGVsc2UKICAg ICAgICAgIF9feCA9IF9TX3JpZ2h0KF9feCk7CgogICAgICByZXR1cm4gaXRlcmF0b3IoX195KTsK ICAgIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1ZhbCwgdHlwZW5hbWUg X0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5cGVuYW1lIF9BbGxv Yz4KICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxf QWxsb2M+Ojpjb25zdF9pdGVyYXRvcgogICAgX1JiX3RyZWU8X0tleSxfVmFsLF9LZXlPZlZhbHVl LF9Db21wYXJlLF9BbGxvYz46OgogICAgdXBwZXJfYm91bmQoY29uc3QgX0tleSYgX19rKSBjb25z dAogICAgewogICAgICBfTGlua190eXBlIF9feSA9IF9NX2hlYWRlcjsKICAgICAgX0xpbmtfdHlw ZSBfX3ggPSBfTV9yb290KCk7CgogICAgICB3aGlsZSAoX194ICE9IDApCiAgICAgICAgaWYgKF9N X2tleV9jb21wYXJlKF9faywgX1Nfa2V5KF9feCkpKQogICAgICAgICAgX195ID0gX194LCBfX3gg PSBfU19sZWZ0KF9feCk7CiAgICAgICAgZWxzZQogICAgICAgICAgX194ID0gX1NfcmlnaHQoX194 KTsKCiAgICAgIHJldHVybiBjb25zdF9pdGVyYXRvcihfX3kpOwogICAgfQoKICB0ZW1wbGF0ZTx0 eXBlbmFtZSBfS2V5LCB0eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS2V5T2ZWYWx1ZSwKICAgICAg ICAgICB0eXBlbmFtZSBfQ29tcGFyZSwgdHlwZW5hbWUgX0FsbG9jPgogICAgaW5saW5lCiAgICBw YWlyPHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxs b2M+OjppdGVyYXRvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGVuYW1lIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5 T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjppdGVyYXRvcj4KICAgIF9SYl90cmVlPF9LZXksX1Zh bCxfS2V5T2ZWYWx1ZSxfQ29tcGFyZSxfQWxsb2M+OjoKICAgIGVxdWFsX3JhbmdlKGNvbnN0IF9L ZXkmIF9faykKICAgIHsgcmV0dXJuIHBhaXI8aXRlcmF0b3IsIGl0ZXJhdG9yPihsb3dlcl9ib3Vu ZChfX2spLCB1cHBlcl9ib3VuZChfX2spKTsgfQoKICB0ZW1wbGF0ZTx0eXBlbmFtZSBfS2V5LCB0 eXBlbmFtZSBfVmFsLCB0eXBlbmFtZSBfS29WLAogICAgICAgICAgIHR5cGVuYW1lIF9Db21wYXJl LCB0eXBlbmFtZSBfQWxsb2M+CiAgaW5saW5lCiAgcGFpcjx0eXBlbmFtZSBfUmJfdHJlZTxfS2V5 LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29uc3RfaXRlcmF0b3IsCiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0 eXBlbmFtZSBfUmJfdHJlZTxfS2V5LCBfVmFsLCBfS29WLCBfQ29tcGFyZSwgX0FsbG9jPjo6Y29u c3RfaXRlcmF0b3I+CiAgX1JiX3RyZWU8X0tleSwgX1ZhbCwgX0tvViwgX0NvbXBhcmUsIF9BbGxv Yz4KICA6OmVxdWFsX3JhbmdlKGNvbnN0IF9LZXkmIF9faykgY29uc3QKICB7CiAgICByZXR1cm4g cGFpcjxjb25zdF9pdGVyYXRvcixjb25zdF9pdGVyYXRvcj4obG93ZXJfYm91bmQoX19rKSwKICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cHBlcl9ib3VuZChf X2spKTsKICB9CgogIGlubGluZSBpbnQKICBfX2JsYWNrX2NvdW50KF9SYl90cmVlX25vZGVfYmFz ZSogX19ub2RlLCBfUmJfdHJlZV9ub2RlX2Jhc2UqIF9fcm9vdCkKICB7CiAgICBpZiAoX19ub2Rl ID09IDApCiAgICAgIHJldHVybiAwOwogICAgaW50IF9fc3VtID0gMDsKICAgIGRvCiAgICAgIHsK ICAgICAgICBpZiAoX19ub2RlLT5fTV9jb2xvciA9PSBfTV9ibGFjaykKICAgICAgICAgICsrX19z dW07CiAgICAgICAgaWYgKF9fbm9kZSA9PSBfX3Jvb3QpCiAgICAgICAgICBicmVhazsKICAgICAg ICBfX25vZGUgPSBfX25vZGUtPl9NX3BhcmVudDsKICAgICAgfQogICAgd2hpbGUgKDEpOwogICAg cmV0dXJuIF9fc3VtOwogIH0KCiAgdGVtcGxhdGU8dHlwZW5hbWUgX0tleSwgdHlwZW5hbWUgX1Zh bCwgdHlwZW5hbWUgX0tleU9mVmFsdWUsCiAgICAgICAgICAgdHlwZW5hbWUgX0NvbXBhcmUsIHR5 cGVuYW1lIF9BbGxvYz4KICAgIGJvb2wKICAgIF9SYl90cmVlPF9LZXksX1ZhbCxfS2V5T2ZWYWx1 ZSxfQ29tcGFyZSxfQWxsb2M+OjpfX3JiX3ZlcmlmeSgpIGNvbnN0CiAgICB7CiAgICBpZiAoX01f bm9kZV9jb3VudCA9PSAwIHx8IGJlZ2luKCkgPT0gZW5kKCkpCiAgICAgIHJldHVybiBfTV9ub2Rl X2NvdW50ID09IDAgJiYgYmVnaW4oKSA9PSBlbmQoKSAmJgogICAgICAgIF9NX2hlYWRlci0+X01f bGVmdCA9PSBfTV9oZWFkZXIgJiYgX01faGVhZGVyLT5fTV9yaWdodCA9PSBfTV9oZWFkZXI7Cgog ICAgaW50IF9fbGVuID0gX19ibGFja19jb3VudChfTV9sZWZ0bW9zdCgpLCBfTV9yb290KCkpOwog ICAgZm9yIChjb25zdF9pdGVyYXRvciBfX2l0ID0gYmVnaW4oKTsgX19pdCAhPSBlbmQoKTsgKytf X2l0KQogICAgICB7CiAgICAgICAgX0xpbmtfdHlwZSBfX3ggPSAoX0xpbmtfdHlwZSkgX19pdC5f TV9ub2RlOwogICAgICAgIF9MaW5rX3R5cGUgX19MID0gX1NfbGVmdChfX3gpOwogICAgICAgIF9M aW5rX3R5cGUgX19SID0gX1NfcmlnaHQoX194KTsKCiAgICAgICAgaWYgKF9feC0+X01fY29sb3Ig PT0gX01fcmVkKQogICAgICAgICAgaWYgKChfX0wgJiYgX19MLT5fTV9jb2xvciA9PSBfTV9yZWQp CiAgICAgICAgICAgICAgfHwgKF9fUiAmJiBfX1ItPl9NX2NvbG9yID09IF9NX3JlZCkpCiAgICAg ICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKF9fTCAmJiBfTV9rZXlfY29tcGFyZShf U19rZXkoX194KSwgX1Nfa2V5KF9fTCkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg IGlmIChfX1IgJiYgX01fa2V5X2NvbXBhcmUoX1Nfa2V5KF9fUiksIF9TX2tleShfX3gpKSkKICAg ICAgICAgIHJldHVybiBmYWxzZTsKCiAgICAgICAgaWYgKCFfX0wgJiYgIV9fUiAmJiBfX2JsYWNr X2NvdW50KF9feCwgX01fcm9vdCgpKSAhPSBfX2xlbikKICAgICAgICAgIHJldHVybiBmYWxzZTsK ICAgICAgfQoKICAgIGlmIChfTV9sZWZ0bW9zdCgpICE9IF9SYl90cmVlX25vZGVfYmFzZTo6X1Nf bWluaW11bShfTV9yb290KCkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBpZiAoX01fcmlnaHRt b3N0KCkgIT0gX1JiX3RyZWVfbm9kZV9iYXNlOjpfU19tYXhpbXVtKF9NX3Jvb3QoKSkpCiAgICAg IHJldHVybiBmYWxzZTsKICAgIHJldHVybiB0cnVlOwogICAgfQp9CiMgNjcgIi91c3IvbG9jYWwv aW5jbHVkZS9jKysvMy4yL21hcCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIv Yml0cy9zdGxfbWFwLmgiIDEgMwojIDY2ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9tYXAuaCIgMwpuYW1lc3BhY2Ugc3RkCnsKIyA3NyAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfbWFwLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAgICAgICAgY2xhc3MgX0FsbG9jID0gYWxs b2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4KY2xhc3MgbWFwCnsKCiAKICA7CgpwdWJs aWM6CgogIHR5cGVkZWYgX0tleSBrZXlfdHlwZTsKICB0eXBlZGVmIF9UcCBkYXRhX3R5cGU7CiAg dHlwZWRlZiBfVHAgbWFwcGVkX3R5cGU7CiAgdHlwZWRlZiBwYWlyPGNvbnN0IF9LZXksIF9UcD4g dmFsdWVfdHlwZTsKICB0eXBlZGVmIF9Db21wYXJlIGtleV9jb21wYXJlOwoKICBjbGFzcyB2YWx1 ZV9jb21wYXJlCiAgICA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVf dHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9j PjsKICBwcm90ZWN0ZWQgOgogICAgX0NvbXBhcmUgY29tcDsKICAgIHZhbHVlX2NvbXBhcmUoX0Nv bXBhcmUgX19jKSA6IGNvbXAoX19jKSB7fQogIHB1YmxpYzoKICAgIGJvb2wgb3BlcmF0b3IoKShj b25zdCB2YWx1ZV90eXBlJiBfX3gsIGNvbnN0IHZhbHVlX3R5cGUmIF9feSkgY29uc3QgewogICAg ICByZXR1cm4gY29tcChfX3guZmlyc3QsIF9feS5maXJzdCk7CiAgICB9CiAgfTsKCnByaXZhdGU6 CiAgdHlwZWRlZiBfUmJfdHJlZTxrZXlfdHlwZSwgdmFsdWVfdHlwZSwKICAgICAgICAgICAgICAg ICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBfdHlw ZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBl Ojpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X3Bv aW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVmZXJl bmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVmZXJl bmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRlcmF0 b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJhdG9y IGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNlX2l0 ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNv bnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVuYW1l IF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVmIHR5 cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAgbWFw KCkgOiBfTV90KF9Db21wYXJlKCksIGFsbG9jYXRvcl90eXBlKCkpIHt9CiAgZXhwbGljaXQgbWFw KGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgICAgIGNvbnN0IGFsbG9jYXRvcl90 eXBlJiBfX2EgPSBhbGxvY2F0b3JfdHlwZSgpKQogICAgOiBfTV90KF9fY29tcCwgX19hKSB7fQoK ICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9yIF9f Zmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCkKICAgIDogX01fdChfQ29tcGFyZSgpLCBhbGxv Y2F0b3JfdHlwZSgpKQogICAgeyBfTV90Lmluc2VydF91bmlxdWUoX19maXJzdCwgX19sYXN0KTsg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0b3I+CiAgbWFwKF9JbnB1dEl0ZXJhdG9y IF9fZmlyc3QsIF9JbnB1dEl0ZXJhdG9yIF9fbGFzdCwgY29uc3QgX0NvbXBhcmUmIF9fY29tcCwK ICAgICAgY29uc3QgYWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6 IF9NX3QoX19jb21wLCBfX2EpIHsgX01fdC5pbnNlcnRfdW5pcXVlKF9fZmlyc3QsIF9fbGFzdCk7 IH0KICBtYXAoY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90 KF9feC5fTV90KSB7fQoKICBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVyYXRv cj0oY29uc3QgbWFwPF9LZXksIF9UcCwgX0NvbXBhcmUsIF9BbGxvYz4mIF9feCkKICB7CiAgICBf TV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJlIGtl eV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29tcGFy ZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9jb21w KCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJuIF9N X3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJuIF9N X3QuYmVnaW4oKTsgfQoKCgoKCiAgY29uc3RfaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy biBfTV90LmJlZ2luKCk7IH0KCgoKCgogIGl0ZXJhdG9yIGVuZCgpIHsgcmV0dXJuIF9NX3QuZW5k KCk7IH0KCgoKCgoKICBjb25zdF9pdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBfTV90LmVu ZCgpOyB9CgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIHsgcmV0dXJuIF9NX3QucmJl Z2luKCk7IH0KCgoKCgoKICBjb25zdF9yZXZlcnNlX2l0ZXJhdG9yIHJiZWdpbigpIGNvbnN0IHsg cmV0dXJuIF9NX3QucmJlZ2luKCk7IH0KCgoKCgoKICByZXZlcnNlX2l0ZXJhdG9yIHJlbmQoKSB7 IHJldHVybiBfTV90LnJlbmQoKTsgfQoKCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmVu ZCgpIGNvbnN0IHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKICBib29sIGVtcHR5KCkgY29uc3Qg eyByZXR1cm4gX01fdC5lbXB0eSgpOyB9CgogIHNpemVfdHlwZSBzaXplKCkgY29uc3QgeyByZXR1 cm4gX01fdC5zaXplKCk7IH0KCiAgc2l6ZV90eXBlIG1heF9zaXplKCkgY29uc3QgeyByZXR1cm4g X01fdC5tYXhfc2l6ZSgpOyB9CiMgMjIxICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRz L3N0bF9tYXAuaCIgMwogIF9UcCYgb3BlcmF0b3JbXShjb25zdCBrZXlfdHlwZSYgX19rKSB7CiAg ICBpdGVyYXRvciBfX2kgPSBsb3dlcl9ib3VuZChfX2spOwoKICAgIGlmIChfX2kgPT0gZW5kKCkg fHwga2V5X2NvbXAoKShfX2ssICgqX19pKS5maXJzdCkpCiAgICAgIF9faSA9IGluc2VydChfX2ks IHZhbHVlX3R5cGUoX19rLCBfVHAoKSkpOwogICAgcmV0dXJuICgqX19pKS5zZWNvbmQ7CiAgfQoK ICB2b2lkIHN3YXAobWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgeyBfTV90LnN3 YXAoX194Ll9NX3QpOyB9CiMgMjQ0ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0 bF9tYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsYm9vbD4gaW5zZXJ0KGNvbnN0IHZhbHVlX3R5cGUm IF9feCkKICAgIHsgcmV0dXJuIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX3gpOyB9CiMgMjYxICIvdXNy L2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGluc2Vy dChpdGVyYXRvciBwb3NpdGlvbiwgY29uc3QgdmFsdWVfdHlwZSYgX194KQogICAgeyByZXR1cm4g X01fdC5pbnNlcnRfdW5pcXVlKHBvc2l0aW9uLCBfX3gpOyB9CgoKCgoKCgogIHRlbXBsYXRlIDxj bGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2VydChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0 LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9NX3QuaW5zZXJ0X3VuaXF1ZShfX2ZpcnN0 LCBfX2xhc3QpOwogIH0KIyAyODQgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X21hcC5oIiAzCiAgdm9pZCBlcmFzZShpdGVyYXRvciBfX3Bvc2l0aW9uKSB7IF9NX3QuZXJhc2Uo X19wb3NpdGlvbik7IH0KIyAyOTcgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3Rs X21hcC5oIiAzCiAgc2l6ZV90eXBlIGVyYXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJu IF9NX3QuZXJhc2UoX194KTsgfQojIDMwOSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfbWFwLmgiIDMKICB2b2lkIGVyYXNlKGl0ZXJhdG9yIF9fZmlyc3QsIGl0ZXJhdG9yIF9f bGFzdCkKICAgIHsgX01fdC5lcmFzZShfX2ZpcnN0LCBfX2xhc3QpOyB9CgoKCgoKCiAgdm9pZCBj bGVhcigpIHsgX01fdC5jbGVhcigpOyB9CiMgMzMyICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMu Mi9iaXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGZpbmQoY29uc3Qga2V5X3R5cGUmIF9feCkg eyByZXR1cm4gX01fdC5maW5kKF9feCk7IH0KIyAzNDUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysv My4yL2JpdHMvc3RsX21hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlw ZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQojIDM1NCAiL3Vzci9sb2Nh bC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBzaXplX3R5cGUgY291bnQoY29u c3Qga2V5X3R5cGUmIF9feCkgY29uc3QgewogICAgcmV0dXJuIF9NX3QuZmluZChfX3gpID09IF9N X3QuZW5kKCkgPyAwIDogMTsKICB9CiMgMzY5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9i aXRzL3N0bF9tYXAuaCIgMwogIGl0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBf X3gpIHtyZXR1cm4gX01fdC5sb3dlcl9ib3VuZChfX3gpOyB9CiMgMzgyICIvdXNyL2xvY2FsL2lu Y2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2Jv dW5kKF9feCk7CiAgfQojIDM5MyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf bWFwLmgiIDMKICBpdGVyYXRvciB1cHBlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0 dXJuIF9NX3QudXBwZXJfYm91bmQoX194KTsgfQojIDQwMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2Mr Ky8zLjIvYml0cy9zdGxfbWFwLmgiIDMKICBjb25zdF9pdGVyYXRvciB1cHBlcl9ib3VuZChjb25z dCBrZXlfdHlwZSYgX194KSBjb25zdCB7CiAgICByZXR1cm4gX01fdC51cHBlcl9ib3VuZChfX3gp OwogIH0KIyA0MjMgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX21hcC5oIiAz CiAgcGFpcjxpdGVyYXRvcixpdGVyYXRvcj4gZXF1YWxfcmFuZ2UoY29uc3Qga2V5X3R5cGUmIF9f eCkgewogICAgcmV0dXJuIF9NX3QuZXF1YWxfcmFuZ2UoX194KTsKICB9CiMgNDQzICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tYXAuaCIgMwogIHBhaXI8Y29uc3RfaXRlcmF0 b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0 IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoKICB0ZW1wbGF0ZSA8Y2xh c3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9w ZXJhdG9yPT0gKGNvbnN0IG1hcDxfSzEsIF9UMSwgX0MxLCBfQTE+JiwKICAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwogIHRlbXBsYXRlIDxj bGFzcyBfSzEsIGNsYXNzIF9UMSwgY2xhc3MgX0MxLCBjbGFzcyBfQTE+CiAgZnJpZW5kIGJvb2wg b3BlcmF0b3I8IChjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAg ICAgICAgICAgICBjb25zdCBtYXA8X0sxLCBfVDEsIF9DMSwgX0ExPiYpOwp9OwoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3I9PShjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRl IDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+Cmlu bGluZSBib29sIG9wZXJhdG9yPChjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYg X194LAogICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiBfX3guX01fdCA8IF9feS5fTV90Owp9Cgp0ZW1wbGF0ZSA8 Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxp bmUgYm9vbCBvcGVyYXRvciE9KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feSkgewogIHJldHVybiAhKF9feCA9PSBfX3kpOwp9Cgp0ZW1wbGF0ZSA8Y2xhc3Mg X0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9v bCBvcGVyYXRvcj4oY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAg ICAgICAgICAgICAgICAgICAgIGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcjw9 KGNvbnN0IG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAg ICAgICAgICAgY29uc3QgbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feSkgewogIHJl dHVybiAhKF9feSA8IF9feCk7Cn0KCnRlbXBsYXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNs YXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29sIG9wZXJhdG9yPj0oY29uc3Qg bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBtYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEo X194IDwgX195KTsKfQoKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0Nv bXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5saW5lIHZvaWQgc3dhcChtYXA8X0tleSxfVHAsX0NvbXBh cmUsX0FsbG9jPiYgX194LAogICAgICAgICAgICAgICAgIG1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjggIi91c3IvbG9jYWwvaW5j bHVkZS9jKysvMy4yL21hcCIgMiAzCiMgMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0 cy9zdGxfbXVsdGltYXAuaCIgMSAzCiMgNjYgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2Jp dHMvc3RsX211bHRpbWFwLmgiIDMKbmFtZXNwYWNlIHN0ZAp7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tl eSwgY2xhc3MgX1RwLAogICAgICAgICAgY2xhc3MgX0NvbXBhcmUgPSBsZXNzPF9LZXk+LAogICAg ICAgICAgY2xhc3MgX0FsbG9jID0gYWxsb2NhdG9yPHBhaXI8Y29uc3QgX0tleSwgX1RwPiA+ID4K Y2xhc3MgbXVsdGltYXA7Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBf Q29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IG11bHRp bWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAg ICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpOwoKdGVtcGxh dGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4K aW5saW5lIGJvb2wgb3BlcmF0b3I8KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LZXksX1Rw LF9Db21wYXJlLF9BbGxvYz4mIF9feSk7CiMgOTAgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4y L2JpdHMvc3RsX211bHRpbWFwLmgiIDMKdGVtcGxhdGUgPGNsYXNzIF9LZXksIGNsYXNzIF9UcCwg Y2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KY2xhc3MgbXVsdGltYXAKewoKIAogIDsKCnB1 YmxpYzoKCgoKICB0eXBlZGVmIF9LZXkga2V5X3R5cGU7CiAgdHlwZWRlZiBfVHAgZGF0YV90eXBl OwogIHR5cGVkZWYgX1RwIG1hcHBlZF90eXBlOwogIHR5cGVkZWYgcGFpcjxjb25zdCBfS2V5LCBf VHA+IHZhbHVlX3R5cGU7CiAgdHlwZWRlZiBfQ29tcGFyZSBrZXlfY29tcGFyZTsKCiAgY2xhc3Mg dmFsdWVfY29tcGFyZSA6IHB1YmxpYyBiaW5hcnlfZnVuY3Rpb248dmFsdWVfdHlwZSwgdmFsdWVf dHlwZSwgYm9vbD4gewogIGZyaWVuZCBjbGFzcyBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+OwogIHByb3RlY3RlZDoKICAgIF9Db21wYXJlIGNvbXA7CiAgICB2YWx1ZV9jb21wYXJl KF9Db21wYXJlIF9fYykgOiBjb21wKF9fYykge30KICBwdWJsaWM6CiAgICBib29sIG9wZXJhdG9y KCkoY29uc3QgdmFsdWVfdHlwZSYgX194LCBjb25zdCB2YWx1ZV90eXBlJiBfX3kpIGNvbnN0IHsK ICAgICAgcmV0dXJuIGNvbXAoX194LmZpcnN0LCBfX3kuZmlyc3QpOwogICAgfQogIH07Cgpwcml2 YXRlOgogIHR5cGVkZWYgX1JiX3RyZWU8a2V5X3R5cGUsIHZhbHVlX3R5cGUsCiAgICAgICAgICAg ICAgICAgIF9TZWxlY3Qxc3Q8dmFsdWVfdHlwZT4sIGtleV9jb21wYXJlLCBfQWxsb2M+IF9SZXBf dHlwZTsKICBfUmVwX3R5cGUgX01fdDsKcHVibGljOgogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90 eXBlOjpwb2ludGVyIHBvaW50ZXI7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0 X3BvaW50ZXIgY29uc3RfcG9pbnRlcjsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6cmVm ZXJlbmNlIHJlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6Y29uc3RfcmVm ZXJlbmNlIGNvbnN0X3JlZmVyZW5jZTsKICB0eXBlZGVmIHR5cGVuYW1lIF9SZXBfdHlwZTo6aXRl cmF0b3IgaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6OmNvbnN0X2l0ZXJh dG9yIGNvbnN0X2l0ZXJhdG9yOwogIHR5cGVkZWYgdHlwZW5hbWUgX1JlcF90eXBlOjpyZXZlcnNl X2l0ZXJhdG9yIHJldmVyc2VfaXRlcmF0b3I7CiAgdHlwZWRlZiB0eXBlbmFtZSBfUmVwX3R5cGU6 OmNvbnN0X3JldmVyc2VfaXRlcmF0b3IgY29uc3RfcmV2ZXJzZV9pdGVyYXRvcjsKICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6c2l6ZV90eXBlIHNpemVfdHlwZTsKICB0eXBlZGVmIHR5cGVu YW1lIF9SZXBfdHlwZTo6ZGlmZmVyZW5jZV90eXBlIGRpZmZlcmVuY2VfdHlwZTsKICB0eXBlZGVm IHR5cGVuYW1lIF9SZXBfdHlwZTo6YWxsb2NhdG9yX3R5cGUgYWxsb2NhdG9yX3R5cGU7CgoKCiAg bXVsdGltYXAoKSA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkgeyB9CiAgZXhw bGljaXQgbXVsdGltYXAoY29uc3QgX0NvbXBhcmUmIF9fY29tcCwKICAgICAgICAgICAgICAgICAg ICBjb25zdCBhbGxvY2F0b3JfdHlwZSYgX19hID0gYWxsb2NhdG9yX3R5cGUoKSkKICAgIDogX01f dChfX2NvbXAsIF9fYSkgeyB9CgogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICBt dWx0aW1hcChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpCiAg ICA6IF9NX3QoX0NvbXBhcmUoKSwgYWxsb2NhdG9yX3R5cGUoKSkKICAgIHsgX01fdC5pbnNlcnRf ZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0lucHV0SXRlcmF0 b3I+CiAgbXVsdGltYXAoX0lucHV0SXRlcmF0b3IgX19maXJzdCwgX0lucHV0SXRlcmF0b3IgX19s YXN0LAogICAgICAgICAgIGNvbnN0IF9Db21wYXJlJiBfX2NvbXAsCiAgICAgICAgICAgY29uc3Qg YWxsb2NhdG9yX3R5cGUmIF9fYSA9IGFsbG9jYXRvcl90eXBlKCkpCiAgICA6IF9NX3QoX19jb21w LCBfX2EpIHsgX01fdC5pbnNlcnRfZXF1YWwoX19maXJzdCwgX19sYXN0KTsgfQogIG11bHRpbWFw KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCkgOiBfTV90KF9f eC5fTV90KSB7IH0KCiAgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYKICBvcGVy YXRvcj0oY29uc3QgbXVsdGltYXA8X0tleSxfVHAsX0NvbXBhcmUsX0FsbG9jPiYgX194KSB7CiAg ICBfTV90ID0gX194Ll9NX3Q7CiAgICByZXR1cm4gKnRoaXM7CiAgfQoKCgogIGtleV9jb21wYXJl IGtleV9jb21wKCkgY29uc3QgeyByZXR1cm4gX01fdC5rZXlfY29tcCgpOyB9CiAgdmFsdWVfY29t cGFyZSB2YWx1ZV9jb21wKCkgY29uc3QgeyByZXR1cm4gdmFsdWVfY29tcGFyZShfTV90LmtleV9j b21wKCkpOyB9CiAgYWxsb2NhdG9yX3R5cGUgZ2V0X2FsbG9jYXRvcigpIGNvbnN0IHsgcmV0dXJu IF9NX3QuZ2V0X2FsbG9jYXRvcigpOyB9CgoKCgoKICBpdGVyYXRvciBiZWdpbigpIHsgcmV0dXJu IF9NX3QuYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X2l0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyBy ZXR1cm4gX01fdC5iZWdpbigpOyB9CgoKCgoKICBpdGVyYXRvciBlbmQoKSB7IHJldHVybiBfTV90 LmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gX01f dC5lbmQoKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgeyByZXR1cm4gX01f dC5yYmVnaW4oKTsgfQoKCgoKCgogIGNvbnN0X3JldmVyc2VfaXRlcmF0b3IgcmJlZ2luKCkgY29u c3QgeyByZXR1cm4gX01fdC5yYmVnaW4oKTsgfQoKCgoKCgogIHJldmVyc2VfaXRlcmF0b3IgcmVu ZCgpIHsgcmV0dXJuIF9NX3QucmVuZCgpOyB9CgoKCgoKCiAgY29uc3RfcmV2ZXJzZV9pdGVyYXRv ciByZW5kKCkgY29uc3QgeyByZXR1cm4gX01fdC5yZW5kKCk7IH0KCgogIGJvb2wgZW1wdHkoKSBj b25zdCB7IHJldHVybiBfTV90LmVtcHR5KCk7IH0KCgogIHNpemVfdHlwZSBzaXplKCkgY29uc3Qg eyByZXR1cm4gX01fdC5zaXplKCk7IH0KCgogIHNpemVfdHlwZSBtYXhfc2l6ZSgpIGNvbnN0IHsg cmV0dXJuIF9NX3QubWF4X3NpemUoKTsgfQoKICB2b2lkIHN3YXAobXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX194KSB7IF9NX3Quc3dhcChfX3guX01fdCk7IH0KIyAyNDIgIi91 c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBpdGVyYXRv ciBpbnNlcnQoY29uc3QgdmFsdWVfdHlwZSYgX194KSB7IHJldHVybiBfTV90Lmluc2VydF9lcXVh bChfX3gpOyB9CiMgMjU5ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0 aW1hcC5oIiAzCiAgaXRlcmF0b3IgaW5zZXJ0KGl0ZXJhdG9yIF9fcG9zaXRpb24sIGNvbnN0IHZh bHVlX3R5cGUmIF9feCkgewogICAgcmV0dXJuIF9NX3QuaW5zZXJ0X2VxdWFsKF9fcG9zaXRpb24s IF9feCk7CiAgfQojIDI3MCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVs dGltYXAuaCIgMwogIHRlbXBsYXRlIDxjbGFzcyBfSW5wdXRJdGVyYXRvcj4KICB2b2lkIGluc2Vy dChfSW5wdXRJdGVyYXRvciBfX2ZpcnN0LCBfSW5wdXRJdGVyYXRvciBfX2xhc3QpIHsKICAgIF9N X3QuaW5zZXJ0X2VxdWFsKF9fZmlyc3QsIF9fbGFzdCk7CiAgfQojIDI4NCAiL3Vzci9sb2NhbC9p bmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHZvaWQgZXJhc2UoaXRlcmF0 b3IgX19wb3NpdGlvbikgeyBfTV90LmVyYXNlKF9fcG9zaXRpb24pOyB9CiMgMjk3ICIvdXNyL2xv Y2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9tdWx0aW1hcC5oIiAzCiAgc2l6ZV90eXBlIGVy YXNlKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3QuZXJhc2UoX194KTsgfQojIDMw OSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwogIHZv aWQgZXJhc2UoaXRlcmF0b3IgX19maXJzdCwgaXRlcmF0b3IgX19sYXN0KQogICAgeyBfTV90LmVy YXNlKF9fZmlyc3QsIF9fbGFzdCk7IH0KCgoKCgoKICB2b2lkIGNsZWFyKCkgeyBfTV90LmNsZWFy KCk7IH0KIyAzMzIgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFw LmgiIDMKICBpdGVyYXRvciBmaW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHsgcmV0dXJuIF9NX3Qu ZmluZChfX3gpOyB9CiMgMzQ1ICIvdXNyL2xvY2FsL2luY2x1ZGUvYysrLzMuMi9iaXRzL3N0bF9t dWx0aW1hcC5oIiAzCiAgY29uc3RfaXRlcmF0b3IgZmluZChjb25zdCBrZXlfdHlwZSYgX194KSBj b25zdCB7IHJldHVybiBfTV90LmZpbmQoX194KTsgfQoKCgoKCgogIHNpemVfdHlwZSBjb3VudChj b25zdCBrZXlfdHlwZSYgX194KSBjb25zdCB7IHJldHVybiBfTV90LmNvdW50KF9feCk7IH0KIyAz NjUgIi91c3IvbG9jYWwvaW5jbHVkZS9jKysvMy4yL2JpdHMvc3RsX211bHRpbWFwLmgiIDMKICBp dGVyYXRvciBsb3dlcl9ib3VuZChjb25zdCBrZXlfdHlwZSYgX194KSB7cmV0dXJuIF9NX3QubG93 ZXJfYm91bmQoX194KTsgfQojIDM3OCAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9z dGxfbXVsdGltYXAuaCIgMwogIGNvbnN0X2l0ZXJhdG9yIGxvd2VyX2JvdW5kKGNvbnN0IGtleV90 eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90Lmxvd2VyX2JvdW5kKF9feCk7CiAgfQoK CgoKCgogIGl0ZXJhdG9yIHVwcGVyX2JvdW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIHtyZXR1cm4g X01fdC51cHBlcl9ib3VuZChfX3gpOyB9CgoKCgoKCgogIGNvbnN0X2l0ZXJhdG9yIHVwcGVyX2Jv dW5kKGNvbnN0IGtleV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LnVwcGVyX2Jv dW5kKF9feCk7CiAgfQojIDQxMyAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxf bXVsdGltYXAuaCIgMwogIHBhaXI8aXRlcmF0b3IsaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0 IGtleV90eXBlJiBfX3gpIHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAgfQoj IDQzMSAiL3Vzci9sb2NhbC9pbmNsdWRlL2MrKy8zLjIvYml0cy9zdGxfbXVsdGltYXAuaCIgMwog IHBhaXI8Y29uc3RfaXRlcmF0b3IsY29uc3RfaXRlcmF0b3I+IGVxdWFsX3JhbmdlKGNvbnN0IGtl eV90eXBlJiBfX3gpIGNvbnN0IHsKICAgIHJldHVybiBfTV90LmVxdWFsX3JhbmdlKF9feCk7CiAg fQoKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9DMSwgY2xhc3MgX0Ex PgogIGZyaWVuZCBib29sIG9wZXJhdG9yPT0gKGNvbnN0IG11bHRpbWFwPF9LMSwgX1QxLCBfQzEs IF9BMT4mLAogICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpbWFwPF9LMSwgX1Qx LCBfQzEsIF9BMT4mKTsKICB0ZW1wbGF0ZSA8Y2xhc3MgX0sxLCBjbGFzcyBfVDEsIGNsYXNzIF9D MSwgY2xhc3MgX0ExPgogIGZyaWVuZCBib29sIG9wZXJhdG9yPCAoY29uc3QgbXVsdGltYXA8X0sx LCBfVDEsIF9DMSwgX0ExPiYsCiAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1h cDxfSzEsIF9UMSwgX0MxLCBfQTE+Jik7Cn07Cgp0ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3Mg X1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgppbmxpbmUgYm9vbCBvcGVyYXRvcj09 KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4mIF9feCwKICAgICAgICAg ICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBf X3kpIHsKICByZXR1cm4gX194Ll9NX3QgPT0gX195Ll9NX3Q7Cn0KCnRlbXBsYXRlIDxjbGFzcyBf S2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+CmlubGluZSBib29s IG9wZXJhdG9yPChjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3gs CiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX194Ll9NX3QgPCBfX3kuX01fdDsKfQoKdGVtcGxhdGUg PGNsYXNzIF9LZXksIGNsYXNzIF9UcCwgY2xhc3MgX0NvbXBhcmUsIGNsYXNzIF9BbGxvYz4KaW5s aW5lIGJvb2wgb3BlcmF0b3IhPShjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxs b2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgbXVsdGltYXA8X0tleSxfVHAs X0NvbXBhcmUsX0FsbG9jPiYgX195KSB7CiAgcmV0dXJuICEoX194ID09IF9feSk7Cn0KCnRlbXBs YXRlIDxjbGFzcyBfS2V5LCBjbGFzcyBfVHAsIGNsYXNzIF9Db21wYXJlLCBjbGFzcyBfQWxsb2M+ CmlubGluZSBib29sIG9wZXJhdG9yPihjb25zdCBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxf QWxsb2M+JiBfX3gsCiAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gX195IDwgX194Owp9Cgp0ZW1wbGF0 ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9jPgpp bmxpbmUgYm9vbCBvcGVyYXRvcjw9KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9B bGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5LF9U cCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3kgPCBfX3gpOwp9Cgp0ZW1w bGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0FsbG9j PgppbmxpbmUgYm9vbCBvcGVyYXRvcj49KGNvbnN0IG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJl LF9BbGxvYz4mIF9feCwKICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBtdWx0aW1hcDxfS2V5 LF9UcCxfQ29tcGFyZSxfQWxsb2M+JiBfX3kpIHsKICByZXR1cm4gIShfX3ggPCBfX3kpOwp9Cgp0 ZW1wbGF0ZSA8Y2xhc3MgX0tleSwgY2xhc3MgX1RwLCBjbGFzcyBfQ29tcGFyZSwgY2xhc3MgX0Fs bG9jPgppbmxpbmUgdm9pZCBzd2FwKG11bHRpbWFwPF9LZXksX1RwLF9Db21wYXJlLF9BbGxvYz4m IF9feCwKICAgICAgICAgICAgICAgICBtdWx0aW1hcDxfS2V5LF9UcCxfQ29tcGFyZSxfQWxsb2M+ JiBfX3kpIHsKICBfX3guc3dhcChfX3kpOwp9Cgp9CiMgNjkgIi91c3IvbG9jYWwvaW5jbHVkZS9j KysvMy4yL21hcCIgMiAzCiMgMTEgImlvX2FueS5jcHAiIDIKCnVzaW5nIGJvb3N0OjpkeW5hbWlj X2FueTo6YW55VDsKdXNpbmcgYm9vc3Q6OmR5bmFtaWNfYW55OjpleHRyYWN0OwoKc3RydWN0IHJl YWRlcgogIDogYm9vc3Q6OmR5bmFtaWNfYW55OjpmdW5jdGlvbgogICAgPAogICAgICByZWFkZXIs CiAgICAgIHN0ZDo6aXN0cmVhbSAmIChzdGQ6OmlzdHJlYW0gJiwgYW55VCAmKQogICAgPgp7CiAg ICB0ZW1wbGF0ZTxjbGFzcyBUPgogICAgc3RkOjppc3RyZWFtICYgY2FsbChzdGQ6OmlzdHJlYW0g JiBpbiwgVCAmIG9iaikgY29uc3QKICAgIHsKICAgICAgICByZXR1cm4gaW4gPj4gb2JqOwogICAg fQp9OwoKc3RydWN0IHdyaXRlcgogIDogYm9vc3Q6OmR5bmFtaWNfYW55OjpmdW5jdGlvbgogICAg PAogICAgICB3cml0ZXIsCiAgICAgIHN0ZDo6b3N0cmVhbSAmIChzdGQ6Om9zdHJlYW0gJiwgY29u c3QgYW55VCAmKQogICAgPgp7CiAgICB0ZW1wbGF0ZTxjbGFzcyBUPgogICAgc3RkOjpvc3RyZWFt ICYgY2FsbChzdGQ6Om9zdHJlYW0gJiBvdXQsIGNvbnN0IFQgJiBvYmopIGNvbnN0CiAgICB7CiAg ICAgICAgcmV0dXJuIG91dCA8PCBvYmo7CiAgICB9Cn07CgoKc3RydWN0IHZpc2l0b3IKewogICAg dmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoaW50KSA9IDA7CiAgICB2aXJ0dWFsIHZvaWQgb3BlcmF0 b3IoKShjb25zdCBzdGQ6OnN0cmluZyAmKSA9IDA7Cn07CgoKc3RydWN0IHRvX2ludCA6IHZpc2l0 b3IKewogICAgdmlydHVhbCB2b2lkIG9wZXJhdG9yKCkoaW50KTsKICAgIHZpcnR1YWwgdm9pZCBv cGVyYXRvcigpKGNvbnN0IHN0ZDo6c3RyaW5nICYpOwoKICAgIGludCByZXN1bHQ7Cn07Cgp2b2lk IHRvX2ludDo6b3BlcmF0b3IoKShpbnQgdmFsdWUpCnsKICAgIHJlc3VsdCA9IHZhbHVlOwp9Cgp2 b2lkIHRvX2ludDo6b3BlcmF0b3IoKShjb25zdCBzdGQ6OnN0cmluZyAmIHZhbHVlKQp7CiAgICBy ZXN1bHQgPSBib29zdDo6bGV4aWNhbF9jYXN0PGludD4odmFsdWUpOwp9CgoKc3RydWN0IHZpc2l0 CiAgOiBib29zdDo6ZHluYW1pY19hbnk8dmlzaXQsIHZvaWQgKHZpc2l0b3IgJiwgY29uc3QgYW55 VCAmKT4KewogICAgdGVtcGxhdGU8Y2xhc3MgVD4KICAgIHZvaWQgY2FsbCh2aXNpdG9yICYgdiwg Y29uc3QgVCAmIHZhbHVlKSBjb25zdAogICAgewogICAgICAgIHYodmFsdWUpOwogICAgfQp9OwoK dHlwZWRlZiBib29zdDo6ZHluYW1pY19hbnk6OmFueQogICAgICAgIDwKICAgICAgICAgICAgYm9v c3Q6Om1wbDo6bGlzdDxyZWFkZXIsIHdyaXRlciwgdmlzaXQ+CiAgICAgICAgPiBpb19hbnk7CgoK c3RkOjptYXA8Y2hhciwgaW9fYW55PiBleGFtcGxlczsKc3RkOjptYXA8Y29uc3Qgc3RkOjp0eXBl X2luZm8gKiwgY2hhcj4gcHJlZml4ZXM7CgoKaW9fYW55IHJlYWQoc3RkOjppc3RyZWFtICYgaW4p CnsKICAgIGNoYXIgcHJlZml4OwogICAgaWYoaW4gPj4gcHJlZml4KQogICAgewogICAgICAgIHN0 ZDo6bWFwPGNoYXIsIGlvX2FueT46OmNvbnN0X2l0ZXJhdG9yIGYgPSBleGFtcGxlcy5maW5kKHBy ZWZpeCk7CiAgICAgICAgaWYoZiA9PSBleGFtcGxlcy5lbmQoKSkKICAgICAgICAgICAgdGhyb3cg c3RkOjpydW50aW1lX2Vycm9yKCJpbnZhbGlkIHByZWZpeCIpOwogICAgICAgIGlvX2FueSByZXN1 bHQgPSBmLT5zZWNvbmQ7CiAgICAgICAgaWYocmVhZGVyKCkoaW4sIHJlc3VsdCkpCiAgICAgICAg ICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICB0aHJvdyBzdGQ6OnJ1bnRpbWVfZXJyb3IoInBy b2JsZW0gd2l0aCBpbnB1dCBzdHJlYW0iKTsKfQoKc3RkOjpvc3RyZWFtICYgd3JpdGUoc3RkOjpv c3RyZWFtICYgb3V0LCBjb25zdCBpb19hbnkgJiBvYmopCnsKICAgIGNvbnN0IHN0ZDo6dHlwZV9p bmZvICYgdCA9IG9iai50eXBlKCk7CiAgICBzdGQ6Om1hcDxjb25zdCBzdGQ6OnR5cGVfaW5mbyAq LCBjaGFyPjo6Y29uc3RfaXRlcmF0b3IgZiA9CiAgICAgICAgcHJlZml4ZXMuZmluZCgmdCk7CiAg ICBpZihmID09IHByZWZpeGVzLmVuZCgpKQogICAgICAgIHRocm93IHN0ZDo6cnVudGltZV9lcnJv cigidW5rb253biB0eXBlIG9mIGlvX2FueSIpOwogICAgY2hhciBwcmVmaXggPSBmLT5zZWNvbmQ7 CiAgICBvdXQgPDwgcHJlZml4OwogICAgcmV0dXJuIHdyaXRlcigpKG91dCwgb2JqKTsKfQoKCnRl bXBsYXRlPGNsYXNzIFQ+CnZvaWQgcmVnaXN0ZXJfdHlwZShjaGFyIHByZWZpeCwgY29uc3QgVCAm IGV4YW1wbGUgPSBUKCkpCnsKICAgIGV4YW1wbGVzW3ByZWZpeF0gPSBleGFtcGxlOwogICAgY29u c3QgaW9fYW55ICYgciA9IGV4YW1wbGVzLmZpbmQocHJlZml4KS0+c2Vjb25kOwogICAgY29uc3Qg c3RkOjp0eXBlX2luZm8gJiB0ID0gci50eXBlKCk7CiAgICBwcmVmaXhlc1smdF0gPSBwcmVmaXg7 Cn0KCgppbnQgbWFpbigpCnsKICAgIHRyeQogICAgewogICAgICAgIHJlZ2lzdGVyX3R5cGU8aW50 PignaScpOwogICAgICAgIHJlZ2lzdGVyX3R5cGU8c3RkOjpzdHJpbmc+KCdzJyk7CgogICAgICAg IHN0ZDo6aXN0cmluZ3N0cmVhbSBpbnB1dCgiaTEzN3NoZWxsbyIpOwoKICAgICAgICBpb19hbnkg aSA9IHJlYWQoaW5wdXQpOwogICAgICAgIGlvX2FueSBzID0gcmVhZChpbnB1dCk7CgogICAgICAg IHdyaXRlKHN0ZDo6Y291dCwgaSk7CiAgICAgICAgd3JpdGUoc3RkOjpjb3V0LCBzKTsKCiAgICAg ICAgc3RkOjpjb3V0IDw8ICdcbic7CiAgICB9CiAgICBjYXRjaChjb25zdCBzdGQ6OmV4Y2VwdGlv biAmIGV4KQogICAgewogICAgICAgIHN0ZDo6Y2VyciA8PCAiQysrIGV4Y2VwdGlvbjogIiA8PCBl eC53aGF0KCkgPDwgJ1xuJzsKICAgIH0KfQo=