From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-relay-3.sys.kth.se (smtp-relay-3.sys.kth.se [IPv6:2001:6b0:1:1200:250:56ff:fead:700c]) by sourceware.org (Postfix) with ESMTPS id 408653858D39; Thu, 21 Oct 2021 13:07:53 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 408653858D39 Received: from exdb6.ug.kth.se (exdb6.ug.kth.se [192.168.32.61]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp-relay-3.sys.kth.se (Postfix) with ESMTPS id 4HZnpG4R1SzPRyB; Thu, 21 Oct 2021 15:07:50 +0200 (CEST) DKIM-Filter: OpenDKIM Filter v2.11.0 smtp-relay-3.sys.kth.se 4HZnpG4R1SzPRyB Received: from exdb6.ug.kth.se (192.168.32.61) by exdb6.ug.kth.se (192.168.32.61) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.922.14; Thu, 21 Oct 2021 15:07:49 +0200 Received: from exdb6.ug.kth.se ([192.168.32.61]) by exdb6.ug.kth.se ([192.168.32.61]) with mapi id 15.02.0922.014; Thu, 21 Oct 2021 15:07:49 +0200 From: Petter Tomner To: "gcc-patches@gcc.gnu.org" , "jit@gcc.gnu.org" Subject: [PATCH 1/2] jit: Complex types and loong constants Thread-Topic: [PATCH 1/2] jit: Complex types and loong constants Thread-Index: AQHXxnylvWs49PYyo0WX5NUUp6WRLQ== Date: Thu, 21 Oct 2021 13:07:49 +0000 Message-ID: References: In-Reply-To: Accept-Language: sv-SE, en-US Content-Language: sv-SE X-MS-Has-Attach: yes X-MS-TNEF-Correlator: x-originating-ip: [192.168.32.250] Content-Type: multipart/mixed; boundary="_002_b85029f7b67f4b13b6a2144dac5c7e58kthse_" MIME-Version: 1.0 X-Spam-Status: No, score=-11.0 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_ASCII_DIVIDERS, KAM_DMARC_STATUS, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: jit@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Jit mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 21 Oct 2021 13:07:59 -0000 --_002_b85029f7b67f4b13b6a2144dac5c7e58kthse_ Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: quoted-printable This patch fixes support for complex types. It adds the entrypoints: gcc_jit_context_new_rvalue_from_complex_double gcc_jit_context_set_bool_enable_complex_types Aswell as the binary operator GCC_JIT_BINARY_OP_COMPLEX, to make complex numbers from two real number rvalues. Note that the complex types already are in the type enum, so I thought the cleanest solution is to enable them, rather than to have a "get_complex_typ= e" function. See attachement.= --_002_b85029f7b67f4b13b6a2144dac5c7e58kthse_ Content-Type: text/x-patch; name="0001-Complex.patch" Content-Description: 0001-Complex.patch Content-Disposition: attachment; filename="0001-Complex.patch"; size=91361; creation-date="Thu, 21 Oct 2021 13:07:11 GMT"; modification-date="Thu, 21 Oct 2021 13:07:11 GMT" Content-Transfer-Encoding: base64 RnJvbSA2ZDVkN2NlNDBmOWJiODRhNzk0M2U1MTEzYzg5NTRhZTRiOTQxOTA1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXR0ZXIgVG9tbmVyIDx0b21uZXJAa3RoLnNlPgpEYXRlOiBG cmksIDE1IE9jdCAyMDIxIDIwOjE2OjU0ICswMjAwClN1YmplY3Q6IFtQQVRDSCAxLzNdIENvbXBs ZXgKCkZpeCBzdXBwb3J0IGZvciBjb21wbGV4IHR5cGVzCgpUaGUgcGF0Y2ggYWRkcyBzdXBwb3J0 IG9mIGNvbXBsZXggZmxvYXRpbmcgcG9pbnQgdHlwZXMgdG8gbGliZ2Njaml0LgpBIG5ldyBiaW5h cnkgb3BlcmF0b3IgJ0NPTVBMRVgnIGlzIGFkZGVkIHRvIGNyZWF0ZSBjb21wbGV4IHZhbHVlcwpm cm9tIHJlYWwgdmFsdWVzLiBBc3dlbGwgYXMgYSBmdW5jdGlvbiB0byBjcmVhdGUgYSBjb21wbGV4 IGRvdWJsZQpsaXRlcmFsLgoKVG8gbm90aWZ5IHVzZXJzIGlmIGEgYmluYXJ5IGxpbmtpbmcgdG8g bGliZ2Njaml0IGRlcGVuZHMgb24gY29tcGxleAp0eXBlcywgY29tcGxleCB0eXBlIHN1cHBvcnQg bW9zdCBiZSBlbmFibGVkIHdpdGggYSBuZXcgb3B0aW9uIGZ1bmN0aW9uCnNpbmNlIHRoZXkgYWxs cmVhZHkgYXJlIGluIHRoZSB0eXBlcyBlbnVtLgoKU2lnbmVkLW9mZi1ieToKMjAyMS0xMC0yMQlQ ZXR0ZXIgVG9tbmVyCTx0b21uZXJAa3RoLnNlPgoKZ2NjL2ppdC8KCSogaml0LWNvbW1vbi5oIDog KElOTkVSX0JPT0xfT1BUSU9OX0VOQUJMRV9DT01QTEVYX1RZUEVTKTogTmV3CgkqIGppdC1wbGF5 YmFjay5jIDogQ3JlYXRlIGltYWdpbmFyeSBsaXRlcmFscywgY29udmVyc2lvbnMKCSAgKGNvbXBs ZXhfcmVhbF90b19yZWFsKSA6IE5ldwoJICAobmV3X3J2YWx1ZV9mcm9tX2NvbnN0PC4uLj4pIDog QWxzbyBidWlsZCBjb21wbGV4IGNvbnN0YW50cwoJICAobmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxf Q29tcGxleCBkb3VibGU+KSA6IE5ldwoJICAobmV3X2JpbmFyeV9vcCkgOiBBZGQgQ09NUExFWCBv cGVyYXRvcgoJICAoYnVpbGRfY2FzdCkgOiBDYXN0cyB0byBjb21wbGV4CgkgIChtZW1lbnRvX29m X25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91YmxlPikgOiBOZXcKCSAgKGJpbmFy eV9vcDo6bWFrZV9kZWJ1Z19zdHJpbmcpIDogSGFuZGxlIGNvbXBsZXggb3BlcmF0b3IKCSogaml0 LXJlY29yZGluZy5jIDogUmVwcm9kdWNlciwgZGVidWcgc3RyaW5ncywgZm9yd2FyZGluZwoJKiBq aXQtcmVjb3JkaW5nLmggOgoJICAoZmxvYXRfc2l6ZV9xdWFsKSA6IFBvbGwgc2l6ZSBxdWFsaWZp ZXIgb2YgZmxvYXQgdHlwZXMKCSAgKGlzX2NvbXBsZXgpIDogUG9sbCBpZiB0eXBlIGlzIGNvbXBs ZXgKCSogbGliZ2Njaml0KysuaCA6IE5ldyBlbnRyeXBvaW50cywgc2VlIGJlbG93CgkqIGxpYmdj Y2ppdC5jIDogSW1wbGVtZW50YXRpb24gb2YgbmV3IGVudHJ5IHBvaW50cywgc2VlIC5oCgkgIChn Y2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUpIDogRXh0ZW5kIHJhbmdlIGNoZWNrLCB2YWxpZGF0aW9u CgkgICh2YWxpZF9iaW5hcnlfb3BfcCkgOiBFeHRlbmQgcmFuZ2UgY2hlY2sKCSAgKGdjY19qaXRf Y29udGV4dF9uZXdfYmluYXJ5X29wKSA6IFZhbGlkYXRpb24KCSAgKGdjY19qaXRfY29udGV4dF9u ZXdfdW5hcnlfb3ApIDogVmFsaWRhdGlvbgoJICAoZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJp c29uKSA6IFZhbGlkYXRpb24KCSogbGliZ2Njaml0LmggOgoJICAoZ2NjX2ppdF9jb250ZXh0X25l d19ydmFsdWVfZnJvbV9jb21wbGV4X2RvdWJsZSkgOiBOZXcKCSAgKEdDQ19KSVRfQklOQVJZX09Q X0NPTVBMRVgpIDogTmV3CgkgIChMSUJHQ0NKSVRfSEFWRV9DT01QTEVYKSA6IE5ldwoJICAoZ2Nj X2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzKSA6IE5ldwoJKiBsaWJn Y2NqaXQubWFwIDogQWRkZWQgbmV3IGVudHJ5cG9pbnRzCgkgIChMSUJHQ0NKSVRfQUJJXzE2KSA6 IE5ldwoKZ2NjL3Rlc3RzdWl0ZS8KCSogaml0LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jIDog TmV3CgkqIGppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYyA6IE5ldwoJKiBqaXQuZGcvdGVz dC1jb21wbGV4LW1pc2MuYyA6IE5ldwoJKiBqaXQuZGcvdGVzdC1jb21wbGV4LW9wZXJhdG9ycy5j IDogTmV3CgkqIGppdC5kZy90ZXN0LWNvbXBsZXgtdHlwZXMuYyA6IE5ldwoJKiBqaXQuZGcvdGVz dC1lcnJvci1jb21wbGV4LW5vZW5hYmxlLmMgOiBOZXcKCmdjYy9qaXQvZG9jcy90b3BpY3MvCgkq IGNvbnRleHRzLnJzdCA6IFVwZGF0ZSBkb2NzCgkqIGV4cHJlc3Npb25zLnJzdAoJKiB0eXBlcy5y c3QKLS0tCiBnY2Mvaml0L2RvY3MvdG9waWNzL2NvbnRleHRzLnJzdCAgICAgICAgICAgICAgfCAg MjAgKwogZ2NjL2ppdC9kb2NzL3RvcGljcy9leHByZXNzaW9ucy5yc3QgICAgICAgICAgIHwgIDg5 ICsrLQogZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QgICAgICAgICAgICAgICAgIHwgIDEy ICstCiBnY2Mvaml0L2ppdC1jb21tb24uaCAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEg KwogZ2NjL2ppdC9qaXQtcGxheWJhY2suYyAgICAgICAgICAgICAgICAgICAgICAgIHwgMTY1ICsr KystCiBnY2Mvaml0L2ppdC1yZWNvcmRpbmcuYyAgICAgICAgICAgICAgICAgICAgICAgfCAxMjYg KysrLQogZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmggICAgICAgICAgICAgICAgICAgICAgIHwgIDI4 ICsKIGdjYy9qaXQvbGliZ2Njaml0KysuaCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAyMSAr CiBnY2Mvaml0L2xpYmdjY2ppdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgOTcgKyst CiBnY2Mvaml0L2xpYmdjY2ppdC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNDQgKy0K IGdjYy9qaXQvbGliZ2Njaml0Lm1hcCAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArCiBn Y2MvdGVzdHN1aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaCAgfCAgMzAgKwogZ2Nj L3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWJ1aWx0aW5zLmMgIHwgMjE3ICsrKysrKwog Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWxpdGVyYWxzLmMgIHwgMTQ1ICsrKysK IGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1taXNjLmMgICAgICB8IDIwNCArKysr KysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC1vcGVyYXRvcnMuYyB8IDM1MyAr KysrKysrKysKIGdjYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5jICAgICB8 IDY3NyArKysrKysrKysrKysrKysrKysKIC4uLi9qaXQuZGcvdGVzdC1lcnJvci1jb21wbGV4LW5v ZW5hYmxlLmMgICAgICB8ICAzMSArCiAxOCBmaWxlcyBjaGFuZ2VkLCAyMjIxIGluc2VydGlvbnMo KyksIDQ1IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGdjYy90ZXN0c3VpdGUvaml0 LmRnL3Rlc3QtY29tcGxleC1idWlsdGlucy5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWxpdGVyYWxzLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBn Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbWlzYy5jCiBjcmVhdGUgbW9kZSAxMDA2 NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW9wZXJhdG9ycy5jCiBjcmVhdGUg bW9kZSAxMDA2NDQgZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LXR5cGVzLmMKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBnY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWNvbXBsZXgt bm9lbmFibGUuYwoKZGlmZiAtLWdpdCBhL2djYy9qaXQvZG9jcy90b3BpY3MvY29udGV4dHMucnN0 IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9jb250ZXh0cy5yc3QKaW5kZXggMDBmYjE3ZTE1NWQuLmQ4 Njg5NDA3Y2M2IDEwMDY0NAotLS0gYS9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbnRleHRzLnJzdAor KysgYi9nY2Mvaml0L2RvY3MvdG9waWNzL2NvbnRleHRzLnJzdApAQCAtNDg5LDYgKzQ4OSwyNiBA QCBCb29sZWFuIG9wdGlvbnMKIAogICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX2djY19qaXRf Y29udGV4dF9zZXRfYm9vbF91c2VfZXh0ZXJuYWxfZHJpdmVyCiAKKy4uIGZ1bmN0aW9uOjogdm9p ZFwKKyAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4 X3R5cGVzIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsXAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBib29sX3ZhbHVlKTsKKwor ICAgVGhpcyBvcHRpb24gY2FuIGVuYWJsZSBjb21wbGV4IHR5cGUgc3VwcG9ydCBpbiBsaWJnY2Nq aXQuIEJ5IGRlZmF1bHQsCisgICBubyBjb21wbGV4IHR5cGVzIGNhbiBiZSB1c2VkLgorCisgICBJ ZiB5b3UgdXNlIGNvbXBsZXggdHlwZXMsIGl0IGlzIHJlY29tbWVuZGVkIHRvIHVzZSBidWlsdGlu IGZ1bmN0aW9ucworICAgYGNyZWFsYCwgYGNpbWFnYCBhbmQgYGNvbmpgIGV0Yy4gd2l0aCB0aGUg Y29ycmVjdCB0eXBlIHN1ZmZpeCwgc2luY2UKKyAgIHRob3NlIGFyZSBpbmxpbmVkIGludG8gdGhl IGNvZGUsIHJhdGhlciB0aGVuIGltcG9ydGVkIGZ1bmN0aW9ucyBmcm9tCisgICB0aGUgbWF0aCBs aWIgd2hpY2ggYXJlIG5vdC4gU2VlIDpyZWY6YGdjY19qaXRfY29udGV4dF9nZXRfYnVpbHRpbl9m dW5jdGlvbmAuCisKKyAgIFRoaXMgZW50cnlwb2ludCB3YXMgYWRkZWQgaW4gOnJlZjpgTElCR0ND SklUX0FCSV8xNmA7IHlvdSBjYW4gdGVzdCBmb3IKKyAgIGl0cyBwcmVzZW5jZSB1c2luZworCisg ICAuLiBjb2RlLWJsb2NrOjogYworCisgICAgICAjaWZkZWYgTElCR0NDSklUX0hBVkVfQ09NUExF WAorCisKIEludGVnZXIgb3B0aW9ucwogKioqKioqKioqKioqKioqCiAKZGlmZiAtLWdpdCBhL2dj Yy9qaXQvZG9jcy90b3BpY3MvZXhwcmVzc2lvbnMucnN0IGIvZ2NjL2ppdC9kb2NzL3RvcGljcy9l eHByZXNzaW9ucy5yc3QKaW5kZXggMzk2MjU5ZWYwN2UuLmE5OGYzNTU3MmI0IDEwMDY0NAotLS0g YS9nY2Mvaml0L2RvY3MvdG9waWNzL2V4cHJlc3Npb25zLnJzdAorKysgYi9nY2Mvaml0L2RvY3Mv dG9waWNzL2V4cHJlc3Npb25zLnJzdApAQCAtOTgsNiArOTgsMTUgQEAgU2ltcGxlIGV4cHJlc3Np b25zCiAgICBHaXZlbiBhIG51bWVyaWMgdHlwZSAoaW50ZWdlciBvciBmbG9hdGluZyBwb2ludCks IGJ1aWxkIGFuIHJ2YWx1ZSBmb3IKICAgIHRoZSBnaXZlbiBjb25zdGFudCA6Yzp0eXBlOmBkb3Vi bGVgIHZhbHVlLgogCisuLiBmdW5jdGlvbjo6IGdjY19qaXRfcnZhbHVlICpcCisgICAgICAgICAg ICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgXAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBfQ29tcGxleCBkb3VibGUgdmFsdWUpCisKKyAgIEdpdmVuIGEgZmxvYXRpbmcgcG9pbnQg dHlwZSwgYnVpbGQgYW4gcnZhbHVlIGZvcgorICAgdGhlIGdpdmVuIGNvbnN0YW50IDpjOnR5cGU6 YF9Db21wbGV4IGRvdWJsZWAuIFdoZW4gdGhlIHJlc3VsdCB0eXBlIGlzCisgICBub24tY29tcGxl eCwgdGhlIGltYWdpbmFyeSBwYXJ0IGlzIGRpc2NhcmRlZC4KKwogLi4gZnVuY3Rpb246OiBnY2Nf aml0X3J2YWx1ZSAqXAogICAgICAgICAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9m cm9tX3B0ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBcCiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnY2Nfaml0X3R5cGUgKnBvaW50ZXJfdHlwZSwg XApAQCAtMTY4LDE0ICsxNzcsMTQgQEAgVW5hcnkgT3BlcmF0aW9ucwogCiBUaGUgYXZhaWxhYmxl IHVuYXJ5IG9wZXJhdGlvbnMgYXJlOgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0gID09PT09PT09PT09PQotVW5hcnkgT3BlcmF0aW9uICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBDIGVxdWl2YWxlbnQKLT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PSAgPT09PT09PT09PT09Ci06YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9N SU5VU2AgICAgICAgICAgIGAtKEVYUFIpYAotOmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfQklU V0lTRV9ORUdBVEVgICBgfihFWFBSKWAKLTpjOm1hY3JvOmBHQ0NfSklUX1VOQVJZX09QX0xPR0lD QUxfTkVHQVRFYCAgYCEoRVhQUilgCi06YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9BQlNgICAg ICAgICAgICAgIGBhYnMgKEVYUFIpYAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09ICA9PT09PT09PT09PT0KKz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PSAgPT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09PT09PT09CitVbmFyeSBP cGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAgICAgIEMgZXF1aXZhbGVudCAgU3VwcG9y dGVkIHR5cGVzCis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0gID09 PT09PT09PT09PSAgPT09PT09PT09PT09PT09PT09PT09PQorOmM6bWFjcm86YEdDQ19KSVRfVU5B UllfT1BfTUlOVVNgICAgICAgICAgICBgLShFWFBSKWAgICAgIGludGVnZXIsIHJlYWwsIGNvbXBs ZXgKKzpjOm1hY3JvOmBHQ0NfSklUX1VOQVJZX09QX0JJVFdJU0VfTkVHQVRFYCAgYH4oRVhQUilg ICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9VTkFSWV9PUF9MT0dJQ0FMX05FR0FURWAg IGAhKEVYUFIpYCAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19KSVRfVU5BUllfT1BfQUJTYCAg ICAgICAgICAgICBgYWJzIChFWFBSKWAgIGludGVnZXIsIHJlYWwKKz09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09ICA9PT09PT09PT09PT09PT09 PT09PT09CiAKIC4uIGM6bWFjcm86OiBHQ0NfSklUX1VOQVJZX09QX01JTlVTCiAKQEAgLTIzNSwy MiArMjQ0LDIzIEBAIEJpbmFyeSBPcGVyYXRpb25zCiAKIFRoZSBhdmFpbGFibGUgYmluYXJ5IG9w ZXJhdGlvbnMgYXJlOgogCi09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 ICA9PT09PT09PT09PT0KLUJpbmFyeSBPcGVyYXRpb24gICAgICAgICAgICAgICAgICAgICAgICAg IEMgZXF1aXZhbGVudAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAg PT09PT09PT09PT09Ci06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfUExVU2AgICAgICAgICBg eCArIHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTUlOVVNgICAgICAgICBgeCAtIHlg Ci06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTVVMVGAgICAgICAgICBgeCAqIHlgCi06Yzpt YWNybzpgR0NDX0pJVF9CSU5BUllfT1BfRElWSURFYCAgICAgICBgeCAvIHlgCi06YzptYWNybzpg R0NDX0pJVF9CSU5BUllfT1BfTU9EVUxPYCAgICAgICBgeCAlIHlgCi06YzptYWNybzpgR0NDX0pJ VF9CSU5BUllfT1BfQklUV0lTRV9BTkRgICBgeCAmIHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5B UllfT1BfQklUV0lTRV9YT1JgICBgeCBeIHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1Bf QklUV0lTRV9PUmAgICBgeCB8IHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNB TF9BTkRgICBgeCAmJiB5YAotOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0xPR0lDQUxfT1Jg ICAgYHggfHwgeWAKLTpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9MU0hJRlRgICAgICAgIGB4 IDw8IHlgCi06YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfUlNISUZUYCAgICAgICBgeCA+PiB5 YAotPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09 Cis9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICA9PT09PT09PT09PT0g ICAgPT09PT09PT09PT09PT09PT09PT09PT0KK0JpbmFyeSBPcGVyYXRpb24gICAgICAgICAgICAg ICAgICAgICAgICAgIEMgZXF1aXZhbGVudCAgICBTdXBwb3J0ZWQgb3BlcmFuZCB0eXBlcworPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09ICAgID09 PT09PT09PT09PT09PT09PT09PT09Cis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfUExVU2Ag ICAgICAgICBgeCArIHlgICAgICAgICAgaW50ZWdlciwgcmVhbCwgY29tcGxleAorOmM6bWFjcm86 YEdDQ19KSVRfQklOQVJZX09QX01JTlVTYCAgICAgICAgYHggLSB5YCAgICAgICAgIGludGVnZXIs IHJlYWwsIGNvbXBsZXgKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9NVUxUYCAgICAgICAg IGB4ICogeWAgICAgICAgICBpbnRlZ2VyLCByZWFsLCBjb21wbGV4Cis6YzptYWNybzpgR0NDX0pJ VF9CSU5BUllfT1BfRElWSURFYCAgICAgICBgeCAvIHlgICAgICAgICAgaW50ZWdlciwgcmVhbCwg Y29tcGxleAorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX01PRFVMT2AgICAgICAgYHggJSB5 YCAgICAgICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9CSVRXSVNFX0FO RGAgIGB4ICYgeWAgICAgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1Bf QklUV0lTRV9YT1JgICBgeCBeIHlgICAgICAgICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19KSVRf QklOQVJZX09QX0JJVFdJU0VfT1JgICAgYHggfCB5YCAgICAgICAgIGludGVnZXIKKzpjOm1hY3Jv OmBHQ0NfSklUX0JJTkFSWV9PUF9MT0dJQ0FMX0FORGAgIGB4ICYmIHlgICAgICAgICBpbnRlZ2Vy Cis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUmAgICBgeCB8fCB5YCAgICAg ICAgaW50ZWdlcgorOmM6bWFjcm86YEdDQ19KSVRfQklOQVJZX09QX0xTSElGVGAgICAgICAgYHgg PDwgeWAgICAgICAgIGludGVnZXIKKzpjOm1hY3JvOmBHQ0NfSklUX0JJTkFSWV9PUF9SU0hJRlRg ICAgICAgIGB4ID4+IHlgICAgICAgICBpbnRlZ2VyCis6YzptYWNybzpgR0NDX0pJVF9CSU5BUllf T1BfQ09NUExFWGAgICAgICBgQ01QTFggKHIsIGkpYCAgcmVhbAorPT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09PT09ID09PT09PT09PT09PT09PT09 PT09PT09CiAKIC4uIGM6bWFjcm86OiBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTCiAKQEAgLTM3OCw2 ICszODgsMjUgQEAgQmluYXJ5IE9wZXJhdGlvbiAgICAgICAgICAgICAgICAgICAgICAgICAgQyBl cXVpdmFsZW50CiAKICAgIGluIEMuCiAKKy4uIGM6bWFjcm86OiBHQ0NfSklUX0JJTkFSWV9PUF9D T01QTEVYCisKKyAgIENyZWF0ZSBhIGNvbXBsZXggZmxvYXRpbmcgcG9pbnQgdmFsdWUgZnJvbQor ICAgdHdvIHJlYWwgZmxvYXRpbmcgcG9pbnQgdmFsdWVzIHdpdGggdGhlIHNhbWUKKyAgIHNpemUg cXVhbGlmaWVyIGFzIHRoZSBjb21wbGV4IHJlc3VsdCB0eXBlLgorICAgSS5lIHR3byBmbG9hdHMg Zm9yIGEgX0NvbXBsZXggZmxvYXQsIGV0Yy4KKworICAgQW5hbG9nb3VzIHRvOgorICAgICBDTVBM WCAocmVhbCxpbWFnKQorICAgaW4gQy4KKworICAgVGhlIGZpcnN0IG9wZXJhbmQgaXMgdGhlIHJl YWwgcGFydCwgdGhlIG90aGVyCisgICB0aGUgaW1hZ2luYXJ5LiBOZWdhdGl2ZSB6ZXJvZXMgYXJl IHByZXNlcnZlZAorICAgYW5kIEluZjpzIGRvIG5vdCBsZWFkIHRvIE5hTnMuCisKKyAgIFRoaXMg b3BlcmF0b3IgIHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE2OworICAgeW91IGNhbiB0ZXN0 IGZvciBpdHMgcHJlc2VuY2UgdXNpbmcKKyAgICAgICBgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NP TVBMRVhgCisKIENvbXBhcmlzb25zCiAqKioqKioqKioqKgogCkBAIC00MDIsNiArNDMxLDcgQEAg Q29tcGFyaXNvbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDIGVxdWl2YWxlbnQKIDpj Om1hY3JvOmBHQ0NfSklUX0NPTVBBUklTT05fR0VgICAgICAgICAgYHggPj0geWAKID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09PT09PT09PT09CiAKKyAgIE5vdGU6 IE9ubHkgYD09YCBhbmQgYCE9YCBhcmUgZGVmaW5lZCBmb3IgY29tcGxleCB0eXBlcy4KIAogRnVu Y3Rpb24gY2FsbHMKICoqKioqKioqKioqKioqCkBAIC01MDQsMTAgKzUzNCwxNyBAQCBUeXBlLWNv ZXJjaW9uCiAKICAgIEN1cnJlbnRseSBvbmx5IGEgbGltaXRlZCBzZXQgb2YgY29udmVyc2lvbnMg YXJlIHBvc3NpYmxlOgogCi0gICAgICogaW50IDwtPiBmbG9hdAotICAgICAqIGludCA8LT4gYm9v bAorICAgICAqIGludGVnZXIgPC0+IGludGVnZXIKKyAgICAgKiBmbG9hdGluZyBwb2ludCA8LT4g ZmxvYXRpbmcgcG9pbnQKKyAgICAgKiBpbnRlZ2VyIDwtPiBmbG9hdGluZyBwb2ludAorICAgICAq IGludGVnZXIgPC0+IGJvb2wKICAgICAgKiBQKiAgPC0+IFEqLCBmb3IgcG9pbnRlciB0eXBlcyBQ IGFuZCBRCiAKKyAgIE5vdGU6ICJmbG9hdGluZyBwb2ludCIgaW5jbHVkZXMgY29tcGxleCB0eXBl cy4KKworICAgV2hlbiBhIGNvbXBsZXggdHlwZSBpcyBjb252ZXJ0ZWQgdG8gYSBub24tY29tcGxl eCB0eXBlLCB0aGUKKyAgIGltYWdpbmFyeSBwYXJ0IGlzIGRpc2NhcmRlZC4KKwogTHZhbHVlcwog LS0tLS0tLQogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2RvY3MvdG9waWNzL3R5cGVzLnJzdCBiL2dj Yy9qaXQvZG9jcy90b3BpY3MvdHlwZXMucnN0CmluZGV4IDgzMWYxMWI2NzlhLi41YjViYTA1MDY1 OCAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9kb2NzL3RvcGljcy90eXBlcy5yc3QKKysrIGIvZ2NjL2pp dC9kb2NzL3RvcGljcy90eXBlcy5yc3QKQEAgLTgyLDExICs4MiwxNyBAQCBTdGFuZGFyZCB0eXBl cwogICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0NPTlNUX0NIQVJfUFRSYCAgICAgICBDIHR5cGU6 IGBgKGNvbnN0IGNoYXIgKilgYAogICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX1NJWkVfVGAgICAg ICAgICAgICAgICBDJ3MgYGBzaXplX3RgYCB0eXBlCiAgICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVf RklMRV9QVFJgICAgICAgICAgICAgIEMgdHlwZTogYGAoRklMRSAqKWBgCi0gICA6YzpkYXRhOmBH Q0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVGAgICAgICAgIEM5OSdzIGBgX0NvbXBsZXggZmxvYXRg YAotICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFYCAgICAgICBDOTkncyBg YF9Db21wbGV4IGRvdWJsZWBgCi0gICA6YzpkYXRhOmBHQ0NfSklUX1RZUEVfQ09NUExFWF9MT05H X0RPVUJMRWAgIEM5OSdzIGBgX0NvbXBsZXggbG9uZyBkb3VibGVgYAorICAgOmM6ZGF0YTpgR0ND X0pJVF9UWVBFX0NPTVBMRVhfRkxPQVRgICAgICAgICBDOTkncyBgYF9Db21wbGV4IGZsb2F0YGAs IEFCSSAxNgorICAgOmM6ZGF0YTpgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFYCAgICAgICBD OTkncyBgYF9Db21wbGV4IGRvdWJsZWBgLCBBQkkgMTYKKyAgIDpjOmRhdGE6YEdDQ19KSVRfVFlQ RV9DT01QTEVYX0xPTkdfRE9VQkxFYCAgQzk5J3MgYGBfQ29tcGxleCBsb25nIGRvdWJsZWBgLCBB QkkgMTYKICAgID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAgPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAorICAgVGhlIGNvbXBsZXggdHlwZXMgYXJl IGF2YWlsYWJsZSBmcm9tIDpyZWY6YExJQkdDQ0pJVF9BQklfMTZgIGFmdGVyCisgICBzZXR0aW5n IDpyZWY6YGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlc2AuCisK KyAgIFlvdSBjYW4gdGVzdCBmb3IgY29tcGxleCB0eXBlcyBzdXBwb3J0IHdpdGggdGhlIGRlZmlu ZQorICAgYCNpZmRlZiBMSUJHQ0NKSVRfSEFWRV9DT01QTEVYYC4KKwogLi4gZnVuY3Rpb246OiBn Y2Nfaml0X3R5cGUgKlwKICAgICAgICAgICAgICAgZ2NjX2ppdF9jb250ZXh0X2dldF9pbnRfdHlw ZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBcCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludCBudW1fYnl0ZXMsIGludCBpc19zaWduZWQpCmRpZmYgLS1naXQg YS9nY2Mvaml0L2ppdC1jb21tb24uaCBiL2djYy9qaXQvaml0LWNvbW1vbi5oCmluZGV4IGY4OGU2 NzU1YjAwLi5iYzA0NTNmYmEwNSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtY29tbW9uLmgKKysr IGIvZ2NjL2ppdC9qaXQtY29tbW9uLmgKQEAgLTE5OCw2ICsxOTgsNyBAQCBlbnVtIGlubmVyX2Jv b2xfb3B0aW9uCiB7CiAgIElOTkVSX0JPT0xfT1BUSU9OX0FMTE9XX1VOUkVBQ0hBQkxFX0JMT0NL UywKICAgSU5ORVJfQk9PTF9PUFRJT05fVVNFX0VYVEVSTkFMX0RSSVZFUiwKKyAgSU5ORVJfQk9P TF9PUFRJT05fRU5BQkxFX0NPTVBMRVhfVFlQRVMsCiAKICAgTlVNX0lOTkVSX0JPT0xfT1BUSU9O UwogfTsKZGlmZiAtLWdpdCBhL2djYy9qaXQvaml0LXBsYXliYWNrLmMgYi9nY2Mvaml0L2ppdC1w bGF5YmFjay5jCmluZGV4IDU5Mzk5ZGVlMjUxLi44YjFjYjgxOGI5MCAxMDA2NDQKLS0tIGEvZ2Nj L2ppdC9qaXQtcGxheWJhY2suYworKysgYi9nY2Mvaml0L2ppdC1wbGF5YmFjay5jCkBAIC00MCw2 ICs0MCw3IEBAIGFsb25nIHdpdGggR0NDOyBzZWUgdGhlIGZpbGUgQ09QWUlORzMuICBJZiBub3Qg c2VlCiAjaW5jbHVkZSAiZ2NjLmgiCiAjaW5jbHVkZSAiZGlhZ25vc3RpYy5oIgogI2luY2x1ZGUg InN0bXQuaCIKKyNpbmNsdWRlICJjb21wbGV4LmgiCiAKICNpbmNsdWRlIDxwdGhyZWFkLmg+CiAK QEAgLTc4LDYgKzc5LDggQEAgY29udmVydCAodHJlZSBkc3RfdHlwZSwgdHJlZSBleHByKQogICAg IGNhc2UgSU5URUdFUl9UWVBFOgogICAgIGNhc2UgRU5VTUVSQUxfVFlQRToKICAgICAgIHJldHVy biBmb2xkIChjb252ZXJ0X3RvX2ludGVnZXIgKGRzdF90eXBlLCBleHByKSk7CisgICAgY2FzZSBS RUFMX1RZUEU6CisgICAgICByZXR1cm4gZm9sZCAoY29udmVydF90b19yZWFsIChkc3RfdHlwZSwg ZXhwcikpOwogCiAgICAgZGVmYXVsdDoKICAgICAgIGdjY19hc3NlcnQgKGdjYzo6aml0OjphY3Rp dmVfcGxheWJhY2tfY3R4dCk7CkBAIC02NzksNiArNjgyLDI0IEBAIG5ld19nbG9iYWxfaW5pdGlh bGl6ZWQgKGxvY2F0aW9uICpsb2MsCiBuYW1lc3BhY2UgcGxheWJhY2sKIHsKIAorLyogUmV0dXJu IHRoZSBjb3JyZW5zcG9uZGluZyBub3QgY29tcGxleCBmbG9hdCB0eXBlIG9mIGEKKyAgIGZsb2F0 IHR5cGUuIEkuZS4gY29tcGxleCBmbG9hdCAtPiBmbG9hdCAqLworc3RhdGljIHRyZWUKK2NvbXBs ZXhfcmVhbF90b19yZWFsICh0cmVlIGNvbXBsZXhfdHlwZSkKK3sKKyAgaWYgKFRZUEVfQ0FOT05J Q0FMIChjb21wbGV4X3R5cGUpID09CisgICAgICBUWVBFX0NBTk9OSUNBTCAoY29tcGxleF9mbG9h dF90eXBlX25vZGUpKQorICAgIHJldHVybiBmbG9hdF90eXBlX25vZGU7CisgIGVsc2UgaWYgKFRZ UEVfQ0FOT05JQ0FMIChjb21wbGV4X3R5cGUpID09CisJICAgVFlQRV9DQU5PTklDQUwgKGNvbXBs ZXhfZG91YmxlX3R5cGVfbm9kZSkpCisgICAgcmV0dXJuIGRvdWJsZV90eXBlX25vZGU7CisgIGVs c2UgaWYgKFRZUEVfQ0FOT05JQ0FMIChjb21wbGV4X3R5cGUpID09CisJICAgVFlQRV9DQU5PTklD QUwgKGNvbXBsZXhfbG9uZ19kb3VibGVfdHlwZV9ub2RlKSkKKyAgICByZXR1cm4gbG9uZ19kb3Vi bGVfdHlwZV9ub2RlOworICBlbHNlCisgICAgZ2NjX3VucmVhY2hhYmxlKCk7Cit9CisKIC8qIFNw ZWNpYWxpemF0aW9uIG9mIG1ha2luZyBhbiBydmFsdWUgZnJvbSBhIGNvbnN0LCBmb3IgaG9zdCA8 aW50Pi4gICovCiAKIHRlbXBsYXRlIDw+CkBAIC02OTQsNiArNzE1LDI1IEBAIG5ld19ydmFsdWVf ZnJvbV9jb25zdCA8aW50PiAodHlwZSAqdHlwZSwKICAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9p bnRfY3N0IChpbm5lcl90eXBlLCB2YWx1ZSk7CiAgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhp cywgaW5uZXIpOwogICAgIH0KKyAgZWxzZSBpZiAoQ09NUExFWF9GTE9BVF9UWVBFX1AgKGlubmVy X3R5cGUpKQorICAgIHsKKyAgICAgIHRyZWUgdHJlZV9yZWFsOworICAgICAgdHJlZSB0cmVlX2lt YWc7CisgICAgICB0cmVlIHJlYWxfdHlwZTsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3Zh bHVlOworICAgICAgUkVBTF9WQUxVRV9UWVBFIGltYWdfdmFsdWU7CisKKyAgICAgIHJlYWxfdHlw ZSA9IGNvbXBsZXhfcmVhbF90b19yZWFsIChpbm5lcl90eXBlKTsKKworICAgICAgcmVhbF9mcm9t X2ludGVnZXIgKCZyZWFsX3ZhbHVlLCBWT0lEbW9kZSwgdmFsdWUsIFNJR05FRCk7CisgICAgICBy ZWFsX2Zyb21faW50ZWdlciAoJmltYWdfdmFsdWUsIFZPSURtb2RlLCAwLCBTSUdORUQpOworCisg ICAgICB0cmVlX3JlYWwgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIHJlYWxfdmFsdWUpOworICAg ICAgdHJlZV9pbWFnID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCBpbWFnX3ZhbHVlKTsKKworICAg ICAgdHJlZSBpbm5lciA9IGJ1aWxkX2NvbXBsZXggKGlubmVyX3R5cGUsIHRyZWVfcmVhbCwgdHJl ZV9pbWFnKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBpbm5lcik7CisgICAgfQog ICBlbHNlCiAgICAgewogICAgICAgUkVBTF9WQUxVRV9UWVBFIHJlYWxfdmFsdWU7CkBAIC03MTgs NiArNzU4LDI1IEBAIG5ld19ydmFsdWVfZnJvbV9jb25zdCA8bG9uZz4gKHR5cGUgKnR5cGUsCiAg ICAgICB0cmVlIGlubmVyID0gYnVpbGRfaW50X2NzdCAoaW5uZXJfdHlwZSwgdmFsdWUpOwogICAg ICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKICAgICB9CisgIGVsc2UgaWYgKENP TVBMRVhfRkxPQVRfVFlQRV9QIChpbm5lcl90eXBlKSkKKyAgICB7CisgICAgICB0cmVlIHRyZWVf cmVhbDsKKyAgICAgIHRyZWUgdHJlZV9pbWFnOworICAgICAgdHJlZSByZWFsX3R5cGU7CisgICAg ICBSRUFMX1ZBTFVFX1RZUEUgcmVhbF92YWx1ZTsKKyAgICAgIFJFQUxfVkFMVUVfVFlQRSBpbWFn X3ZhbHVlOworCisgICAgICByZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxfdG9fcmVhbCAoaW5uZXJf dHlwZSk7CisKKyAgICAgIHJlYWxfZnJvbV9pbnRlZ2VyICgmcmVhbF92YWx1ZSwgVk9JRG1vZGUs IHZhbHVlLCBTSUdORUQpOworICAgICAgcmVhbF9mcm9tX2ludGVnZXIgKCZpbWFnX3ZhbHVlLCBW T0lEbW9kZSwgMCwgU0lHTkVEKTsKKworICAgICAgdHJlZV9yZWFsID0gYnVpbGRfcmVhbCAocmVh bF90eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHRyZWVfaW1hZyA9IGJ1aWxkX3JlYWwgKHJlYWxf dHlwZSwgaW1hZ192YWx1ZSk7CisKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9jb21wbGV4IChp bm5lcl90eXBlLCB0cmVlX3JlYWwsIHRyZWVfaW1hZyk7CisgICAgICByZXR1cm4gbmV3IHJ2YWx1 ZSAodGhpcywgaW5uZXIpOworICAgIH0KICAgZWxzZQogICAgIHsKICAgICAgIFJFQUxfVkFMVUVf VFlQRSByZWFsX3ZhbHVlOwpAQCAtNzQzLDE5ICs4MDIsMTA0IEBAIG5ld19ydmFsdWVfZnJvbV9j b25zdCA8ZG91YmxlPiAodHlwZSAqdHlwZSwKICAgICAgcmVhbC5jOnJlYWxfZnJvbV90YXJnZXQg YXBwZWFycyB0byByZXF1aXJlIHRoZSByZXByZXNlbnRhdGlvbiB0byBiZQogICAgICBzcGxpdCBp bnRvIDMyLWJpdCB2YWx1ZXMsIGFuZCB0aGVuIHNlbnQgYXMgYW4gcGFpciBvZiBob3N0IGxvbmcK ICAgICAgaW50cy4gICovCisKKyAgdW5pb24KKyAgeworICAgIGRvdWJsZSBhc19kb3VibGU7Cisg ICAgdWludDMyX3QgYXNfdWludDMyc1syXTsKKyAgfSB1X3JlYWwsIHVfaW1hZzsKKworICB1X3Jl YWwuYXNfZG91YmxlID0gdmFsdWU7CisgIGxvbmcgaW50IGFzX2xvbmdfaW50c1syXTsKKyAgYXNf bG9uZ19pbnRzWzBdID0gdV9yZWFsLmFzX3VpbnQzMnNbMF07CisgIGFzX2xvbmdfaW50c1sxXSA9 IHVfcmVhbC5hc191aW50MzJzWzFdOworCiAgIFJFQUxfVkFMVUVfVFlQRSByZWFsX3ZhbHVlOwor ICByZWFsX2Zyb21fdGFyZ2V0ICgmcmVhbF92YWx1ZSwgYXNfbG9uZ19pbnRzLCBERm1vZGUpOwor CisgIGlmIChDT01QTEVYX0ZMT0FUX1RZUEVfUCAoaW5uZXJfdHlwZSkpCisgICAgeworICAgICAg dHJlZSB0cmVlX3JlYWw7CisgICAgICB0cmVlIHRyZWVfaW1hZzsKKyAgICAgIHRyZWUgcmVhbF90 eXBlOworCisgICAgICBSRUFMX1ZBTFVFX1RZUEUgaW1hZ192YWx1ZTsKKworICAgICAgbG9uZyBp bnQgemVyb19hc19sb25nX2ludHNbMl07CisgICAgICB1X2ltYWcuYXNfZG91YmxlID0gMC47Cisg ICAgICB6ZXJvX2FzX2xvbmdfaW50c1swXSA9IHVfaW1hZy5hc191aW50MzJzWzBdOworICAgICAg emVyb19hc19sb25nX2ludHNbMV0gPSB1X2ltYWcuYXNfdWludDMyc1sxXTsKKworICAgICAgcmVh bF9mcm9tX3RhcmdldCAoJmltYWdfdmFsdWUsIHplcm9fYXNfbG9uZ19pbnRzLCBERm1vZGUpOwor CisgICAgICByZWFsX3R5cGUgPSBjb21wbGV4X3JlYWxfdG9fcmVhbCAoaW5uZXJfdHlwZSk7CisK KyAgICAgIHRyZWVfcmVhbCA9IGJ1aWxkX3JlYWwgKHJlYWxfdHlwZSwgcmVhbF92YWx1ZSk7Cisg ICAgICB0cmVlX2ltYWcgPSBidWlsZF9yZWFsIChyZWFsX3R5cGUsIGltYWdfdmFsdWUpOworCisg ICAgICB0cmVlIGlubmVyID0gYnVpbGRfY29tcGxleCAoaW5uZXJfdHlwZSwgdHJlZV9yZWFsLCB0 cmVlX2ltYWcpOworICAgICAgcmV0dXJuIG5ldyBydmFsdWUgKHRoaXMsIGlubmVyKTsKKyAgICB9 CisgIGVsc2UKKyAgICB7CisgICAgICB0cmVlIGlubmVyID0gYnVpbGRfcmVhbCAoaW5uZXJfdHlw ZSwgcmVhbF92YWx1ZSk7CisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOwor ICAgIH0KK30KKworLyogU3BlY2lhbGl6YXRpb24gb2YgbWFraW5nIGFuIHJ2YWx1ZSBmcm9tIGEg Y29uc3QsCisgICBmb3IgaG9zdCA8ZG91YmxlIF9Db21wbGV4Pi4gKi8KKwordGVtcGxhdGUgPD4K K3J2YWx1ZSAqCitjb250ZXh0OjoKK25ld19ydmFsdWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91 YmxlPiAodHlwZSAqdHlwZSwKKwkJCQkJIF9Db21wbGV4IGRvdWJsZSAgdmFsdWUpCit7CisgIHRy ZWUgaW5uZXJfdHlwZSA9IHR5cGUtPmFzX3RyZWUgKCk7CisKICAgdW5pb24KICAgewogICAgIGRv dWJsZSBhc19kb3VibGU7CiAgICAgdWludDMyX3QgYXNfdWludDMyc1syXTsKLSAgfSB1OwotICB1 LmFzX2RvdWJsZSA9IHZhbHVlOworICB9IHVfcmVhbCwgdV9pbWFnOworCisgIHVfcmVhbC5hc19k b3VibGUgPSBjcmVhbCh2YWx1ZSk7CiAgIGxvbmcgaW50IGFzX2xvbmdfaW50c1syXTsKLSAgYXNf bG9uZ19pbnRzWzBdID0gdS5hc191aW50MzJzWzBdOwotICBhc19sb25nX2ludHNbMV0gPSB1LmFz X3VpbnQzMnNbMV07CisgIGFzX2xvbmdfaW50c1swXSA9IHVfcmVhbC5hc191aW50MzJzWzBdOwor ICBhc19sb25nX2ludHNbMV0gPSB1X3JlYWwuYXNfdWludDMyc1sxXTsKKworICBSRUFMX1ZBTFVF X1RZUEUgcmVhbF92YWx1ZTsKICAgcmVhbF9mcm9tX3RhcmdldCAoJnJlYWxfdmFsdWUsIGFzX2xv bmdfaW50cywgREZtb2RlKTsKLSAgdHJlZSBpbm5lciA9IGJ1aWxkX3JlYWwgKGlubmVyX3R5cGUs IHJlYWxfdmFsdWUpOwotICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIpOworCisgIGlm IChDT01QTEVYX0ZMT0FUX1RZUEVfUCAoaW5uZXJfdHlwZSkpCisgICAgeworICAgICAgdHJlZSB0 cmVlX3JlYWw7CisgICAgICB0cmVlIHRyZWVfaW1hZzsKKyAgICAgIHRyZWUgcmVhbF90eXBlOwor CisgICAgICBSRUFMX1ZBTFVFX1RZUEUgaW1hZ192YWx1ZTsKKworICAgICAgbG9uZyBpbnQgdmFs dWVfYXNfbG9uZ19pbnRzWzJdOworICAgICAgdV9pbWFnLmFzX2RvdWJsZSA9IGNpbWFnKHZhbHVl KTsKKyAgICAgIHZhbHVlX2FzX2xvbmdfaW50c1swXSA9IHVfaW1hZy5hc191aW50MzJzWzBdOwor ICAgICAgdmFsdWVfYXNfbG9uZ19pbnRzWzFdID0gdV9pbWFnLmFzX3VpbnQzMnNbMV07CisKKyAg ICAgIHJlYWxfZnJvbV90YXJnZXQgKCZpbWFnX3ZhbHVlLCB2YWx1ZV9hc19sb25nX2ludHMsIERG bW9kZSk7CisKKyAgICAgIHJlYWxfdHlwZSA9IGNvbXBsZXhfcmVhbF90b19yZWFsIChpbm5lcl90 eXBlKTsKKworICAgICAgdHJlZV9yZWFsID0gYnVpbGRfcmVhbCAocmVhbF90eXBlLCByZWFsX3Zh bHVlKTsKKyAgICAgIHRyZWVfaW1hZyA9IGJ1aWxkX3JlYWwgKHJlYWxfdHlwZSwgaW1hZ192YWx1 ZSk7CisKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9jb21wbGV4IChpbm5lcl90eXBlLCB0cmVl X3JlYWwsIHRyZWVfaW1hZyk7CisgICAgICByZXR1cm4gbmV3IHJ2YWx1ZSAodGhpcywgaW5uZXIp OworICAgIH0KKyAgZWxzZQorICAgIHsKKyAgICAgIHRyZWUgaW5uZXIgPSBidWlsZF9yZWFsIChp bm5lcl90eXBlLCByZWFsX3ZhbHVlKTsKKyAgICAgIHJldHVybiBuZXcgcnZhbHVlICh0aGlzLCBp bm5lcik7CisgICAgfQogfQogCiAvKiBTcGVjaWFsaXphdGlvbiBvZiBtYWtpbmcgYW4gcnZhbHVl IGZyb20gYSBjb25zdCwgZm9yIGhvc3QgPHZvaWQgKj4uICAqLwpAQCAtOTg1LDYgKzExMjksMTEg QEAgbmV3X2JpbmFyeV9vcCAobG9jYXRpb24gKmxvYywKICAgICBjYXNlIEdDQ19KSVRfQklOQVJZ X09QX1JTSElGVDoKICAgICAgIGlubmVyX29wID0gUlNISUZUX0VYUFI7CiAgICAgICBicmVhazsK KworICAgIC8qIENyZWF0ZSBjb21wbGV4IHZhbHVlIGZyb20gdHdvIHJlYWwgdmFsdWVzICovCisg ICAgY2FzZSBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYOgorICAgICAgaW5uZXJfb3AgPSBDT01Q TEVYX0VYUFI7CisgICAgICBicmVhazsKICAgICB9CiAKICAgdHJlZSBpbm5lcl9leHByID0gYnVp bGQyIChpbm5lcl9vcCwKQEAgLTExNjMsNiArMTMxMiwxMCBAQCBwbGF5YmFjazo6Y29udGV4dDo6 YnVpbGRfY2FzdCAocGxheWJhY2s6OmxvY2F0aW9uICpsb2MsCiAJCSAgICAgIGJ1aWxkX2ludF9j c3QgKFRSRUVfVFlQRSAodF9leHByKSwgMCkpOwogICAgICAgZ290byBtYXliZV9mb2xkOwogCisg ICAgY2FzZSBDT01QTEVYX1RZUEU6CisgICAgICB0X3JldCA9IGNvbnZlcnRfdG9fY29tcGxleCAo dF9kc3RfdHlwZSwgdF9leHByKTsKKyAgICAgIGdvdG8gbWF5YmVfZm9sZDsKKwogICAgIGNhc2Ug UkVBTF9UWVBFOgogICAgICAgdF9yZXQgPSBjb252ZXJ0X3RvX3JlYWwgKHRfZHN0X3R5cGUsIHRf ZXhwcik7CiAgICAgICBnb3RvIG1heWJlX2ZvbGQ7CmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1y ZWNvcmRpbmcuYyBiL2djYy9qaXQvaml0LXJlY29yZGluZy5jCmluZGV4IDExN2ZmNzAxMTRjLi5i M2JiNmFjZmViOSAxMDA2NDQKLS0tIGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmMKKysrIGIvZ2Nj L2ppdC9qaXQtcmVjb3JkaW5nLmMKQEAgLTI2LDYgKzI2LDcgQEAgYWxvbmcgd2l0aCBHQ0M7IHNl ZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJ0b3BsZXYuaCIKIAog I2luY2x1ZGUgPHB0aHJlYWQuaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CiAKICNpbmNsdWRlICJq aXQtYnVpbHRpbnMuaCIKICNpbmNsdWRlICJqaXQtcmVjb3JkaW5nLmgiCkBAIC0xNjA5LDcgKzE2 MTAsOCBAQCBzdGF0aWMgY29uc3QgY2hhciAqIGNvbnN0CiBzdGF0aWMgY29uc3QgY2hhciAqIGNv bnN0CiAgaW5uZXJfYm9vbF9vcHRpb25fcmVwcm9kdWNlcl9zdHJpbmdzW05VTV9JTk5FUl9CT09M X09QVElPTlNdID0gewogICAiZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2FsbG93X3VucmVhY2hh YmxlX2Jsb2NrcyIsCi0gICJnY2Nfaml0X2NvbnRleHRfc2V0X2Jvb2xfdXNlX2V4dGVybmFsX2Ry aXZlciIKKyAgImdjY19qaXRfY29udGV4dF9zZXRfYm9vbF91c2VfZXh0ZXJuYWxfZHJpdmVyIiwK KyAgImdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyIKIH07CiAK IC8qIFdyaXRlIHRoZSBjdXJyZW50IHZhbHVlIG9mIGFsbCBvcHRpb25zIHRvIHRoZSBsb2cgZmls ZSAoaWYgYW55KS4gICovCkBAIC0yNDIzLDYgKzI0MjUsNTkgQEAgcmVjb3JkaW5nOjptZW1lbnRv X29mX2dldF90eXBlOjppc19mbG9hdCAoKSBjb25zdAogICAgIH0KIH0KIAorLyogSW1wbGVtZW50 YXRpb24gb2YgcHVyZSB2aXJ0dWFsIGhvb2sgcmVjb3JkaW5nOjp0eXBlOjppc19jb21wbGV4IGZv cgorICAgcmVjb3JkaW5nOjptZW1lbnRvX29mX2dldF90eXBlLiAgKi8KKworYm9vbAorcmVjb3Jk aW5nOjptZW1lbnRvX29mX2dldF90eXBlOjppc19jb21wbGV4ICgpIGNvbnN0Cit7CisgIHN3aXRj aCAobV9raW5kKQorICAgIHsKKyAgICBkZWZhdWx0OiBnY2NfdW5yZWFjaGFibGUgKCk7CisKKyAg ICBjYXNlIEdDQ19KSVRfVFlQRV9WT0lEOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2Fz ZSBHQ0NfSklUX1RZUEVfVk9JRF9QVFI6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9CT09MOgorICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgY2FzZSBHQ0Nf SklUX1RZUEVfQ0hBUjoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9TSUdORURfQ0hBUjoKKyAgICBj YXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9DSEFSOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1NI T1JUOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX1VOU0lHTkVEX1NIT1JUOgorICAgIGNhc2UgR0ND X0pJVF9UWVBFX0lOVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9JTlQ6CisgICAg Y2FzZSBHQ0NfSklUX1RZUEVfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9VTlNJR05FRF9M T05HOgorICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfTE9ORzoKKyAgICBjYXNlIEdDQ19KSVRf VFlQRV9VTlNJR05FRF9MT05HX0xPTkc6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBjYXNl IEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9ET1VCTEU6CisgICAg Y2FzZSBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEU6CisgICAgICByZXR1cm4gZmFsc2U7CisKKyAg ICBjYXNlIEdDQ19KSVRfVFlQRV9DT05TVF9DSEFSX1BUUjoKKyAgICAgIHJldHVybiBmYWxzZTsK KworICAgIGNhc2UgR0NDX0pJVF9UWVBFX1NJWkVfVDoKKyAgICAgIHJldHVybiBmYWxzZTsKKwor ICAgIGNhc2UgR0NDX0pJVF9UWVBFX0ZJTEVfUFRSOgorICAgICAgcmV0dXJuIGZhbHNlOworCisg ICAgY2FzZSBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVDoKKyAgICBjYXNlIEdDQ19KSVRfVFlQ RV9DT01QTEVYX0RPVUJMRToKKyAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9V QkxFOgorICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorfQorCiAvKiBJbXBsZW1lbnRhdGlvbiBv ZiBwdXJlIHZpcnR1YWwgaG9vayByZWNvcmRpbmc6OnR5cGU6OmlzX2Jvb2wgZm9yCiAgICByZWNv cmRpbmc6Om1lbWVudG9fb2ZfZ2V0X3R5cGUuICAqLwogCkBAIC00NzA0LDYgKzQ3NTksNyBAQCBy ZWNvcmRpbmc6Omdsb2JhbDo6d3JpdGVfcmVwcm9kdWNlciAocmVwcm9kdWNlciAmcikKIHRlbXBs YXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPGlu dD47CiB0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9t X2NvbnN0IDxsb25nPjsKIHRlbXBsYXRlIGNsYXNzIHJlY29yZGluZzo6bWVtZW50b19vZl9uZXdf cnZhbHVlX2Zyb21fY29uc3QgPGRvdWJsZT47Cit0ZW1wbGF0ZSBjbGFzcyByZWNvcmRpbmc6Om1l bWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+OwogdGVtcGxh dGUgY2xhc3MgcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFsdWVfZnJvbV9jb25zdCA8dm9p ZCAqPjsKIAogLyogSW1wbGVtZW50YXRpb24gb2YgdGhlIHB1cmUgdmlydHVhbCBob29rIHJlY29y ZGluZzo6bWVtZW50bzo6cmVwbGF5X2ludG8KQEAgLTQ4ODEsNiArNDkzNyw1MyBAQCByZWNvcmRp bmc6Om1lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxkb3VibGU+Ojp3cml0ZV9yZXBy b2R1Y2VyIChyZXByb2R1YwogICAgIG1fdmFsdWUpOwogfQogCisvKiBUaGUgbWFrZV9kZWJ1Z19z dHJpbmcgc3BlY2lhbGl6YXRpb24gZm9yIDxkb3VibGUgY29tcGxleD4sIHJlbmRlcmluZyBpdCBh cworICAgICAoVEFSR0VUX1RZUEUpTElURVJBTAorICAgZS5nLgorICAgICAiKGNvbXBsZXggZmxv YXQpKDQyLjArNDIuMGopIi4gICovCisKK3RlbXBsYXRlIDw+CitzdHJpbmcgKgorbWVtZW50b19v Zl9uZXdfcnZhbHVlX2Zyb21fY29uc3QgPF9Db21wbGV4IGRvdWJsZT46Om1ha2VfZGVidWdfc3Ry aW5nICgpCit7CisgIGRvdWJsZSByZWFsID0gY3JlYWwobV92YWx1ZSk7CisgIGRvdWJsZSBpbWFn ID0gY2ltYWcobV92YWx1ZSk7CisgIHJldHVybiBzdHJpbmc6OmZyb21fcHJpbnRmIChtX2N0eHQs CisJCQkgICAgICAiKCVzKSglZyUrZ2opIiwKKwkJCSAgICAgIG1fdHlwZS0+Z2V0X2RlYnVnX3N0 cmluZyAoKSwKKwkJCSAgICAgIHJlYWwsIGltYWcpOworfQorCisvKiBUaGUgZ2V0X3dpZGVfaW50 IHNwZWNpYWxpemF0aW9uIGZvciA8ZG91YmxlIGNvbXBsZXg+LiAgKi8KKwordGVtcGxhdGUgPD4K K2Jvb2wKK21lbWVudG9fb2ZfbmV3X3J2YWx1ZV9mcm9tX2NvbnN0IDxfQ29tcGxleCBkb3VibGU+ OjoKK2dldF93aWRlX2ludCAod2lkZV9pbnQgKikgY29uc3QKK3sKKyAgcmV0dXJuIGZhbHNlOwor fQorCisvKiBUaGUgd3JpdGVfcmVwcm9kdWNlciBzcGVjaWFsaXphdGlvbiBmb3IgPGRvdWJsZT4u ICAqLworCit0ZW1wbGF0ZSA8Pgordm9pZAorcmVjb3JkaW5nOjptZW1lbnRvX29mX25ld19ydmFs dWVfZnJvbV9jb25zdCA8X0NvbXBsZXggZG91YmxlPjo6Cit3cml0ZV9yZXByb2R1Y2VyIChyZXBy b2R1Y2VyICZyKQoreworICBjb25zdCBjaGFyICppZCA9IHIubWFrZV9pZGVudGlmaWVyICh0aGlz LCAicnZhbHVlIik7CisgIGRvdWJsZSByZWFsID0gY3JlYWwobV92YWx1ZSk7CisgIGRvdWJsZSBp bWFnID0gY2ltYWcobV92YWx1ZSk7CisgIHIud3JpdGUgKCIgIGdjY19qaXRfcnZhbHVlIColcyA9 XG4iCisgICAgIiAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91 YmxlICglcywgLyogZ2NjX2ppdF9jb250ZXh0ICpjdHh0ICovXG4iCisgICAgIiAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJXMsIC8qIGdjY19qaXRfdHlwZSAqbnVt ZXJpY190eXBlICovXG4iCisgICAgIiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgJWYrJWZqKTsgLyogZG91YmxlIHZhbHVlICovXG4iLAorICAgIGlkLAorICAgIHIu Z2V0X2lkZW50aWZpZXIgKGdldF9jb250ZXh0ICgpKSwKKyAgICByLmdldF9pZGVudGlmaWVyX2Fz X3R5cGUgKG1fdHlwZSksCisgICAgcmVhbCwgaW1hZyk7Cit9CisKIC8qIFRoZSBtYWtlX2RlYnVn X3N0cmluZyBzcGVjaWFsaXphdGlvbiBmb3IgPHZvaWQgKj4sIHJlbmRlcmluZyBpdCBhcwogICAg ICAoVEFSR0VUX1RZUEUpSEVYCiAgICBlLmcuCkBAIC01MTc4LDE3ICs1MjgxLDI0IEBAIHN0YXRp YyBjb25zdCBjaGFyICogY29uc3QgYmluYXJ5X29wX3N0cmluZ3NbXSA9IHsKICAgInx8IiwgLyog R0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUiAqLwogICAiPDwiLCAvKiBHQ0NfSklUX0JJTkFS WV9PUF9MU0hJRlQgKi8KICAgIj4+IiwgLyogR0NDX0pJVF9CSU5BUllfT1BfUlNISUZUICovCisg ICIiLCAvKiBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYIC0gZHVtbXkgbm90IHVzZWQgKi8KIH07 CiAKIHJlY29yZGluZzo6c3RyaW5nICoKIHJlY29yZGluZzo6YmluYXJ5X29wOjptYWtlX2RlYnVn X3N0cmluZyAoKQogewogICBlbnVtIHByZWNlZGVuY2UgcHJlYyA9IGdldF9wcmVjZWRlbmNlICgp OwotICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAotCQkJICAgICAgIiVzICVz ICVzIiwKLQkJCSAgICAgIG1fYS0+Z2V0X2RlYnVnX3N0cmluZ19wYXJlbnMgKHByZWMpLAotCQkJ ICAgICAgYmluYXJ5X29wX3N0cmluZ3NbbV9vcF0sCi0JCQkgICAgICBtX2ItPmdldF9kZWJ1Z19z dHJpbmdfcGFyZW5zIChwcmVjKSk7CisgIGlmIChtX29wID09IEdDQ19KSVRfQklOQVJZX09QX0NP TVBMRVgpCisgICAgcmV0dXJuIHN0cmluZzo6ZnJvbV9wcmludGYgKG1fY3R4dCwKKwkJCQkiKCVz ICsgJXMgKiBfSW1hZ2luYXJ5X0kpIiwKKwkJCQltX2EtPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5z IChwcmVjKSwKKwkJCQltX2ItPmdldF9kZWJ1Z19zdHJpbmdfcGFyZW5zIChwcmVjKSk7CisgIGVs c2UKKyAgICByZXR1cm4gc3RyaW5nOjpmcm9tX3ByaW50ZiAobV9jdHh0LAorCQkJCSIlcyAlcyAl cyIsCisJCQkJbV9hLT5nZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJlYyksCisJCQkJYmluYXJ5 X29wX3N0cmluZ3NbbV9vcF0sCisJCQkJbV9iLT5nZXRfZGVidWdfc3RyaW5nX3BhcmVucyAocHJl YykpOwogfQogCiBjb25zdCBjaGFyICogY29uc3QgYmluYXJ5X29wX3JlcHJvZHVjZXJfc3RyaW5n c1tdID0gewpAQCAtNTIwMyw3ICs1MzEzLDggQEAgY29uc3QgY2hhciAqIGNvbnN0IGJpbmFyeV9v cF9yZXByb2R1Y2VyX3N0cmluZ3NbXSA9IHsKICAgIkdDQ19KSVRfQklOQVJZX09QX0xPR0lDQUxf QU5EIiwKICAgIkdDQ19KSVRfQklOQVJZX09QX0xPR0lDQUxfT1IiLAogICAiR0NDX0pJVF9CSU5B UllfT1BfTFNISUZUIiwKLSAgIkdDQ19KSVRfQklOQVJZX09QX1JTSElGVCIKKyAgIkdDQ19KSVRf QklOQVJZX09QX1JTSElGVCIsCisgICJHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYIiwKIH07CiAK IC8qIEltcGxlbWVudGF0aW9uIG9mIHJlY29yZGluZzo6bWVtZW50bzo6d3JpdGVfcmVwcm9kdWNl ciBmb3IgYmluYXJ5IG9wcy4gICovCkBAIC01MjQ0LDYgKzUzNTUsNyBAQCBzdGF0aWMgY29uc3Qg ZW51bSBwcmVjZWRlbmNlIGJpbmFyeV9vcF9wcmVjZWRlbmNlW10gPSB7CiAgIFBSRUNFREVOQ0Vf TE9HSUNBTF9PUiwgLyogR0NDX0pJVF9CSU5BUllfT1BfTE9HSUNBTF9PUiAqLwogICBQUkVDRURF TkNFX1NISUZULCAvKiBHQ0NfSklUX0JJTkFSWV9PUF9MU0hJRlQgKi8KICAgUFJFQ0VERU5DRV9T SElGVCwgLyogR0NDX0pJVF9CSU5BUllfT1BfUlNISUZUICovCisgIFBSRUNFREVOQ0VfQ0FTVCwg LyogR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWCAqLwogfTsKIH0gLyogbmFtZXNwYWNlIHJlY29y ZGluZyAqLwogCmRpZmYgLS1naXQgYS9nY2Mvaml0L2ppdC1yZWNvcmRpbmcuaCBiL2djYy9qaXQv aml0LXJlY29yZGluZy5oCmluZGV4IDAzZmExMTYwY2YwLi5kNWUwYzM1OWE0OCAxMDA2NDQKLS0t IGEvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgKKysrIGIvZ2NjL2ppdC9qaXQtcmVjb3JkaW5nLmgK QEAgLTU0NCwxMCArNTQ0LDE0IEBAIHB1YmxpYzoKICAgdmlydHVhbCBib29sIGlzX2ludCAoKSBj b25zdCA9IDA7CiAgIHZpcnR1YWwgYm9vbCBpc19mbG9hdCAoKSBjb25zdCA9IDA7CiAgIHZpcnR1 YWwgYm9vbCBpc19ib29sICgpIGNvbnN0ID0gMDsKKyAgdmlydHVhbCBib29sIGlzX2NvbXBsZXgg KCkgY29uc3QgPSAwOwogICB2aXJ0dWFsIHR5cGUgKmlzX3BvaW50ZXIgKCkgPSAwOwogICB2aXJ0 dWFsIHR5cGUgKmlzX2FycmF5ICgpID0gMDsKICAgdmlydHVhbCBib29sIGlzX3ZvaWQgKCkgY29u c3QgeyByZXR1cm4gZmFsc2U7IH0KICAgdmlydHVhbCBib29sIGhhc19rbm93bl9zaXplICgpIGNv bnN0IHsgcmV0dXJuIHRydWU7IH0KKyAgLyogVXNlZCB0byBwYWlyIGNvbXBsZXggZmxvYXQgdHlw ZXMgd2l0aCByZWFsIGZsb2F0IHR5cGUKKyAgICAgb2YgdGhlIHNhbWUgImJhc2UgdHlwZSIuICov CisgIHZpcnR1YWwgaW50IGZsb2F0X3NpemVfcXVhbCAoKSBjb25zdCB7IHJldHVybiAwOyB9CiAK ICAgYm9vbCBpc19udW1lcmljICgpIGNvbnN0CiAgIHsKQEAgLTU5OCw5ICs2MDIsMjggQEAgcHVi bGljOgogICAgIHJldHVybiB0eXBlOjphY2NlcHRzX3dyaXRlc19mcm9tIChydHlwZSk7CiAgIH0K IAorICBpbnQgZmxvYXRfc2l6ZV9xdWFsICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFCisgIHsKKyAg ICBzd2l0Y2ggKG1fa2luZCkKKyAgICAgIHsKKyAgICAgIGRlZmF1bHQ6CisJcmV0dXJuIDA7Cisg ICAgICBjYXNlIEdDQ19KSVRfVFlQRV9GTE9BVDoKKyAgICAgIGNhc2UgR0NDX0pJVF9UWVBFX0NP TVBMRVhfRkxPQVQ6CisJcmV0dXJuIDE7CisgICAgICBjYXNlIEdDQ19KSVRfVFlQRV9ET1VCTEU6 CisgICAgICBjYXNlIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRToKKwlyZXR1cm4gMjsKKyAg ICAgIGNhc2UgR0NDX0pJVF9UWVBFX0xPTkdfRE9VQkxFOgorICAgICAgY2FzZSBHQ0NfSklUX1RZ UEVfQ09NUExFWF9MT05HX0RPVUJMRToKKwlyZXR1cm4gMzsKKyAgICAgIH0KKyAgfQorCiAgIGJv b2wgaXNfaW50ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFOwogICBib29sIGlzX2Zsb2F0ICgpIGNv bnN0IEZJTkFMIE9WRVJSSURFOwogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgRklOQUwgT1ZFUlJJ REU7CisgIGJvb2wgaXNfY29tcGxleCAoKSBjb25zdCBGSU5BTCBPVkVSUklERTsKICAgdHlwZSAq aXNfcG9pbnRlciAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBkZXJlZmVyZW5jZSAoKTsgfQog ICB0eXBlICppc19hcnJheSAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CiAgIGJv b2wgaXNfdm9pZCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX2tpbmQgPT0gR0ND X0pJVF9UWVBFX1ZPSUQ7IH0KQEAgLTYzNSw2ICs2NTgsNyBAQCBwdWJsaWM6CiAgIGJvb2wgaXNf aW50ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgaXNf ZmxvYXQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBp c19ib29sICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wg aXNfY29tcGxleCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICB0 eXBlICppc19wb2ludGVyICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZTsg fQogICB0eXBlICppc19hcnJheSAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBOVUxMOyB9CiAK QEAgLTY2MSw2ICs2ODUsNyBAQCBwdWJsaWM6CiAgIGJvb2wgaXNfaW50ICgpIGNvbnN0IEZJTkFM IE9WRVJSSURFIHsgcmV0dXJuIG1fb3RoZXJfdHlwZS0+aXNfaW50ICgpOyB9CiAgIGJvb2wgaXNf ZmxvYXQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19m bG9hdCAoKTsgfQogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1 cm4gbV9vdGhlcl90eXBlLT5pc19ib29sICgpOyB9CisgIGJvb2wgaXNfY29tcGxleCAoKSBjb25z dCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX290aGVyX3R5cGUtPmlzX2NvbXBsZXggKCk7IH0K ICAgdHlwZSAqaXNfcG9pbnRlciAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVybiBtX290aGVyX3R5 cGUtPmlzX3BvaW50ZXIgKCk7IH0KICAgdHlwZSAqaXNfYXJyYXkgKCkgRklOQUwgT1ZFUlJJREUg eyByZXR1cm4gbV9vdGhlcl90eXBlLT5pc19hcnJheSAoKTsgfQogCkBAIC03NzEsNiArNzk2LDcg QEAgY2xhc3MgYXJyYXlfdHlwZSA6IHB1YmxpYyB0eXBlCiAgIGJvb2wgaXNfaW50ICgpIGNvbnN0 IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgaXNfZmxvYXQgKCkgY29u c3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBpc19ib29sICgpIGNv bnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wgaXNfY29tcGxleCAo KSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICB0eXBlICppc19wb2lu dGVyICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIE5VTEw7IH0KICAgdHlwZSAqaXNfYXJyYXkg KCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gbV9lbGVtZW50X3R5cGU7IH0KICAgaW50IG51bV9l bGVtZW50cyAoKSB7IHJldHVybiBtX251bV9lbGVtZW50czsgfQpAQCAtODA1LDYgKzgzMSw3IEBA IHB1YmxpYzoKICAgYm9vbCBpc19pbnQgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4g ZmFsc2U7IH0KICAgYm9vbCBpc19mbG9hdCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVy biBmYWxzZTsgfQogICBib29sIGlzX2Jvb2wgKCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1 cm4gZmFsc2U7IH0KKyAgYm9vbCBpc19jb21wbGV4ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsg cmV0dXJuIGZhbHNlOyB9CiAgIHR5cGUgKmlzX3BvaW50ZXIgKCkgRklOQUwgT1ZFUlJJREUgeyBy ZXR1cm4gTlVMTDsgfQogICB0eXBlICppc19hcnJheSAoKSBGSU5BTCBPVkVSUklERSB7IHJldHVy biBOVUxMOyB9CiAKQEAgLTkxOCw2ICs5NDUsNyBAQCBwdWJsaWM6CiAgIGJvb2wgaXNfaW50ICgp IGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CiAgIGJvb2wgaXNfZmxvYXQg KCkgY29uc3QgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gZmFsc2U7IH0KICAgYm9vbCBpc19ib29s ICgpIGNvbnN0IEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIGZhbHNlOyB9CisgIGJvb2wgaXNfY29t cGxleCAoKSBjb25zdCBGSU5BTCBPVkVSUklERSB7IHJldHVybiBmYWxzZTsgfQogICB0eXBlICpp c19wb2ludGVyICgpIEZJTkFMIE9WRVJSSURFIHsgcmV0dXJuIE5VTEw7IH0KICAgdHlwZSAqaXNf YXJyYXkgKCkgRklOQUwgT1ZFUlJJREUgeyByZXR1cm4gTlVMTDsgfQogCmRpZmYgLS1naXQgYS9n Y2Mvaml0L2xpYmdjY2ppdCsrLmggYi9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKaW5kZXggODI4MzFm ZjVkYTAuLmM5N2FlYjgyODEyIDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdCsrLmgKKysr IGIvZ2NjL2ppdC9saWJnY2NqaXQrKy5oCkBAIC0xMjgsNiArMTI4LDcgQEAgbmFtZXNwYWNlIGdj Y2ppdAogCiAgICAgdm9pZCBzZXRfYm9vbF9hbGxvd191bnJlYWNoYWJsZV9ibG9ja3MgKGludCBi b29sX3ZhbHVlKTsKICAgICB2b2lkIHNldF9ib29sX3VzZV9leHRlcm5hbF9kcml2ZXIgKGludCBi b29sX3ZhbHVlKTsKKyAgICB2b2lkIHNldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChpbnQg Ym9vbF92YWx1ZSk7CiAKICAgICB2b2lkIGFkZF9jb21tYW5kX2xpbmVfb3B0aW9uIChjb25zdCBj aGFyICpvcHRuYW1lKTsKICAgICB2b2lkIGFkZF9kcml2ZXJfb3B0aW9uIChjb25zdCBjaGFyICpv cHRuYW1lKTsKQEAgLTE5MSw2ICsxOTIsOCBAQCBuYW1lc3BhY2UgZ2Njaml0CiAgICAgcnZhbHVl IG9uZSAodHlwZSBudW1lcmljX3R5cGUpIGNvbnN0OwogICAgIHJ2YWx1ZSBuZXdfcnZhbHVlICh0 eXBlIG51bWVyaWNfdHlwZSwKIAkJICAgICAgIGRvdWJsZSB2YWx1ZSkgY29uc3Q7CisgICAgcnZh bHVlIG5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAorCQkgICAgICAgX0NvbXBsZXggZG91 YmxlIHZhbHVlKSBjb25zdDsKICAgICBydmFsdWUgbmV3X3J2YWx1ZSAodHlwZSBwb2ludGVyX3R5 cGUsCiAJCSAgICAgICB2b2lkICp2YWx1ZSkgY29uc3Q7CiAgICAgcnZhbHVlIG5ld19ydmFsdWUg KGNvbnN0IHN0ZDo6c3RyaW5nICZ2YWx1ZSkgY29uc3Q7CkBAIC03MzIsNiArNzM1LDEzIEBAIGNv bnRleHQ6OnNldF9ib29sX3VzZV9leHRlcm5hbF9kcml2ZXIgKGludCBib29sX3ZhbHVlKQogCQkJ CQkJYm9vbF92YWx1ZSk7CiB9CiAKK2lubGluZSB2b2lkCitjb250ZXh0OjpzZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlcyAoaW50IGJvb2xfdmFsdWUpCit7CisgIGdjY19qaXRfY29udGV4dF9z ZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAobV9pbm5lcl9jdHh0LAorCQkJCQkJIGJvb2xf dmFsdWUpOworfQorCiBpbmxpbmUgdm9pZAogY29udGV4dDo6YWRkX2NvbW1hbmRfbGluZV9vcHRp b24gKGNvbnN0IGNoYXIgKm9wdG5hbWUpCiB7CkBAIC05NTAsNiArOTYwLDE3IEBAIGNvbnRleHQ6 Om5ld19ydmFsdWUgKHR5cGUgbnVtZXJpY190eXBlLAogCQkJCQkgICAgdmFsdWUpKTsKIH0KIAor aW5saW5lIHJ2YWx1ZQorY29udGV4dDo6bmV3X3J2YWx1ZSAodHlwZSBudW1lcmljX3R5cGUsCisJ CSAgICAgX0NvbXBsZXggZG91YmxlIHZhbHVlKSBjb25zdAoreworICByZXR1cm4gcnZhbHVlICgK KyAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlICgKKyAg ICAgIG1faW5uZXJfY3R4dCwKKyAgICAgIG51bWVyaWNfdHlwZS5nZXRfaW5uZXJfdHlwZSAoKSwK KyAgICAgIHZhbHVlKSk7Cit9CisKIGlubGluZSBydmFsdWUKIGNvbnRleHQ6Om5ld19ydmFsdWUg KHR5cGUgcG9pbnRlcl90eXBlLAogCQkgICAgIHZvaWQgKnZhbHVlKSBjb25zdApkaWZmIC0tZ2l0 IGEvZ2NjL2ppdC9saWJnY2NqaXQuYyBiL2djYy9qaXQvbGliZ2Njaml0LmMKaW5kZXggN2ZhOTQ4 MDA3YWQuLjY0NjMwYjgxMGY0IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5jCisrKyBi L2djYy9qaXQvbGliZ2Njaml0LmMKQEAgLTQ0OCw5ICs0NDgsMTcgQEAgZ2NjX2ppdF9jb250ZXh0 X2dldF90eXBlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCiAgIEpJVF9MT0dfRlVOQyAoY3R4dC0+ Z2V0X2xvZ2dlciAoKSk7CiAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoCiAgICAgKHR5 cGUgPj0gR0NDX0pJVF9UWVBFX1ZPSUQKLSAgICAgJiYgdHlwZSA8PSBHQ0NfSklUX1RZUEVfRklM RV9QVFIpLAorICAgICAmJiB0eXBlIDw9IEdDQ19KSVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxF KSwKICAgICBjdHh0LCBOVUxMLAogICAgICJ1bnJlY29nbml6ZWQgdmFsdWUgZm9yIGVudW0gZ2Nj X2ppdF90eXBlczogJWkiLCB0eXBlKTsKKyAgaWYgKHR5cGUgPj0gR0NDX0pJVF9UWVBFX0NPTVBM RVhfRkxPQVQKKyAgICAgICYmIHR5cGUgPD0gR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19ET1VC TEUpCisgICAgUkVUVVJOX05VTExfSUZfRkFJTCAoCisgICAgICBjdHh0LT5nZXRfaW5uZXJfYm9v bF9vcHRpb24oCisJZ2NjOjpqaXQ6OklOTkVSX0JPT0xfT1BUSU9OX0VOQUJMRV9DT01QTEVYX1RZ UEVTKSwKKyAgICAgIGN0eHQsIE5VTEwsCisgICAgICAiY29tcGxleCB0eXBlcyBhcmUgb25seSBh dmFpbGFibGUgYWZ0ZXIgZW5hYmxpbmcgdGhlbSB3aXRoIgorICAgICAgIiBnY2Nfaml0X2NvbnRl eHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMoKSIpOwogCiAgIHJldHVybiAoZ2NjX2pp dF90eXBlICopY3R4dC0+Z2V0X3R5cGUgKHR5cGUpOwogfQpAQCAtMTMyMCw2ICsxMzI4LDI2IEBA IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fZG91YmxlIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsCiAJICAtPm5ld19ydmFsdWVfZnJvbV9jb25zdCA8ZG91YmxlPiAobnVtZXJpY190eXBl LCB2YWx1ZSkpOwogfQogCitnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCQkJCQln Y2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJCWRvdWJsZSBfQ29tcGxleCB2YWx1ZSkK K3sKKyAgUkVUVVJOX05VTExfSUZfRkFJTCAoY3R4dCwgTlVMTCwgTlVMTCwgIk5VTEwgY29udGV4 dCIpOworICBKSVRfTE9HX0ZVTkMgKGN0eHQtPmdldF9sb2dnZXIgKCkpOworICBSRVRVUk5fTlVM TF9JRl9GQUlMX05PTk5VTExfTlVNRVJJQ19UWVBFIChjdHh0LCBudW1lcmljX3R5cGUpOworCisg IFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMSAoCisgICAgbnVtZXJpY190eXBlLT5pc19mbG9h dCAoKSwKKyAgICBjdHh0LCBOVUxMLAorICAgICJub3QgYSBmbG9hdGluZyBwb2ludCB0eXBlICh0 eXBlOiAlcykiLAorICAgIG51bWVyaWNfdHlwZS0+Z2V0X2RlYnVnX3N0cmluZyAoKSk7CisKKyAg cmV0dXJuICgoZ2NjX2ppdF9ydmFsdWUgKiljdHh0CisJICAgLT5uZXdfcnZhbHVlX2Zyb21fY29u c3QgPGRvdWJsZSBfQ29tcGxleD4gKG51bWVyaWNfdHlwZSwgdmFsdWUpKTsKK30KKworCiAvKiBQ dWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2NqaXQuaC4KIAogICAg QWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBieSB0aGUKQEAgLTE0 MTUsNiArMTQ0MywxNCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X3VuYXJ5X29wIChnY2Nfaml0X2Nv bnRleHQgKmN0eHQsCiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJpbmcgKCkpOwogICBS RVRVUk5fTlVMTF9JRl9GQUlMIChydmFsdWUsIGN0eHQsIGxvYywgIk5VTEwgcnZhbHVlIik7CiAK KyAgaWYgKHJ2YWx1ZS0+Z2V0X3R5cGUgKCktPmlzX2NvbXBsZXggKCkpCisgICAgUkVUVVJOX05V TExfSUZfRkFJTF9QUklOVEYyICgKKyAgICAgIG9wID09IEdDQ19KSVRfVU5BUllfT1BfTUlOVVMs CisgICAgICBjdHh0LCBsb2MsCisgICAgICAib25seSB1bmFyeSBtaW51cyBkZWZpbmVkIGZvciBj b21wbGV4IHR5cGVzOiAlcyAodHlwZTogJXMpIiwKKyAgICAgIHJ2YWx1ZS0+Z2V0X2RlYnVnX3N0 cmluZyAoKSwKKyAgICAgIHJ2YWx1ZS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkp OworCiAgIHJldHVybiAoZ2NjX2ppdF9ydmFsdWUgKiljdHh0LT5uZXdfdW5hcnlfb3AgKGxvYywg b3AsIHJlc3VsdF90eXBlLCBydmFsdWUpOwogfQogCkBAIC0xNDI2LDcgKzE0NjIsNyBAQCBzdGF0 aWMgYm9vbAogdmFsaWRfYmluYXJ5X29wX3AgKGVudW0gZ2NjX2ppdF9iaW5hcnlfb3Agb3ApCiB7 CiAgIHJldHVybiAob3AgPj0gR0NDX0pJVF9CSU5BUllfT1BfUExVUwotCSAgJiYgb3AgPD0gR0ND X0pJVF9CSU5BUllfT1BfUlNISUZUKTsKKwkgICYmIG9wIDw9IEdDQ19KSVRfQklOQVJZX09QX0NP TVBMRVgpOwogfQogCiAvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBs aWJnY2NqaXQuaC4KQEAgLTE0NzAsNiArMTUwNiwzOCBAQCBnY2Nfaml0X2NvbnRleHRfbmV3X2Jp bmFyeV9vcCAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICAgIGEtPmdldF9kZWJ1Z19zdHJpbmcg KCksIGItPmdldF9kZWJ1Z19zdHJpbmcgKCksCiAgICAgcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19z dHJpbmcgKCkpOwogCisgIGlmIChvcCA9PSBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYKQorICAg IHsKKyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUwgKAorCXJlc3VsdF90eXBlLT5pc19jb21wbGV4 ICgpLAorCWN0eHQsIGxvYywKKyAgICAgICAicmV0dXJuIHR5cGUgaXMgbm90IGNvbXBsZXgiKTsK KyAgICAgIFJFVFVSTl9OVUxMX0lGX0ZBSUxfUFJJTlRGMyAoCisJIWEtPmdldF90eXBlICgpLT5p c19jb21wbGV4ICgpICYmCisJYS0+Z2V0X3R5cGUgKCktPmlzX2Zsb2F0ICgpLAorCWN0eHQsIGxv YywKKwkiZmlyc3Qgb3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJ Z2NjOjpqaXQ6OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWEtPmdldF9kZWJ1 Z19zdHJpbmcgKCksCisJYS0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAg ICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYzICgKKwkhYi0+Z2V0X3R5cGUgKCktPmlzX2Nv bXBsZXggKCkgJiYKKwliLT5nZXRfdHlwZSAoKS0+aXNfZmxvYXQgKCksCisJY3R4dCwgbG9jLAor CSIybmQgb3BlcmFuZCBvZiAlcyBpcyBub3QgcmVhbDogJXMgKHR5cGU6ICVzKSIsCisJZ2NjOjpq aXQ6OmJpbmFyeV9vcF9yZXByb2R1Y2VyX3N0cmluZ3Nbb3BdLAorCWItPmdldF9kZWJ1Z19zdHJp bmcgKCksCisJYi0+Z2V0X3R5cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCkpOworICAgICAgUkVU VVJOX05VTExfSUZfRkFJTF9QUklOVEYyICgKKwlhLT5nZXRfdHlwZSAoKS0+IGZsb2F0X3NpemVf cXVhbCAoKSA9PQorCXJlc3VsdF90eXBlLT5mbG9hdF9zaXplX3F1YWwgKCksCisJY3R4dCwgbG9j LAorCSJzaXplIHF1YWxpZmllcnMgb2YgY29tcGxleCBvcGVyYW5kJ3Mgbm90IHRoZSBzYW1lIGFz IHRoZSByZXN1bHQ6IgorCSIgb3BlcmFuZHM6ICVzLCByZXN1bHQ6ICAlcyIsCisJYS0+Z2V0X3R5 cGUgKCktPmdldF9kZWJ1Z19zdHJpbmcgKCksCisJcmVzdWx0X3R5cGUtPmdldF9kZWJ1Z19zdHJp bmcgKCkpOworICAgIH0KKwogICByZXR1cm4gKGdjY19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2Jp bmFyeV9vcCAobG9jLCBvcCwgcmVzdWx0X3R5cGUsIGEsIGIpOwogfQogCkBAIC0xNTA2LDYgKzE1 NzQsMTQgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19jb21wYXJpc29uIChnY2Nfaml0X2NvbnRleHQg KmN0eHQsCiAgICAgYi0+Z2V0X2RlYnVnX3N0cmluZyAoKSwKICAgICBiLT5nZXRfdHlwZSAoKS0+ Z2V0X2RlYnVnX3N0cmluZyAoKSk7CiAKKyAgaWYgKGEtPmdldF90eXBlICgpLT5pc19jb21wbGV4 KCkpCisgICAgUkVUVVJOX05VTExfSUZfRkFJTF9QUklOVEYxICgKKyAgICAgIChvcCA9PSBHQ0Nf SklUX0NPTVBBUklTT05fRVEKKyAgICAgICB8fCBvcCA9PSBHQ0NfSklUX0NPTVBBUklTT05fTkUp LAorICAgICAgY3R4dCwgbG9jLAorICAgICAgImludmFsaWQgZW51bSBnY2Nfaml0X2NvbXBhcmlz b24gZm9yIGNvbXBsZXggb3BlcmFuZHM6ICVpIiwKKyAgICAgIG9wKTsKKwogICByZXR1cm4gKGdj Y19qaXRfcnZhbHVlICopY3R4dC0+bmV3X2NvbXBhcmlzb24gKGxvYywgb3AsIGEsIGIpOwogfQog CkBAIC0yNzM1LDYgKzI4MTEsMjMgQEAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2FsbG93X3Vu cmVhY2hhYmxlX2Jsb2NrcyAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LAogICAgIGJvb2xfdmFsdWUp OwogfQogCisvKiBQdWJsaWMgZW50cnlwb2ludC4gIFNlZSBkZXNjcmlwdGlvbiBpbiBsaWJnY2Nq aXQuaC4KKworICAgQWZ0ZXIgZXJyb3ItY2hlY2tpbmcsIHRoZSByZWFsIHdvcmsgaXMgZG9uZSBi eSB0aGUKKyAgIGdjYzo6aml0OjpyZWNvcmRpbmc6OmNvbnRleHQ6OnNldF9pbm5lcl9ib29sX29w dGlvbiBtZXRob2QgaW4KKyAgIGppdC1yZWNvcmRpbmcuYy4gKi8KKwordm9pZAorZ2NjX2ppdF9j b250ZXh0X3NldF9ib29sX2VuYWJsZV9jb21wbGV4X3R5cGVzIChnY2Nfaml0X2NvbnRleHQgKmN0 eHQsCisJCQkJCSAgICAgICBpbnQgYm9vbF92YWx1ZSkKK3sKKyAgUkVUVVJOX0lGX0ZBSUwgKGN0 eHQsIE5VTEwsIE5VTEwsICJOVUxMIGNvbnRleHQiKTsKKyAgSklUX0xPR19GVU5DIChjdHh0LT5n ZXRfbG9nZ2VyICgpKTsKKyAgY3R4dC0+c2V0X2lubmVyX2Jvb2xfb3B0aW9uICgKKyAgICBnY2M6 OmppdDo6SU5ORVJfQk9PTF9PUFRJT05fRU5BQkxFX0NPTVBMRVhfVFlQRVMsCisgICAgYm9vbF92 YWx1ZSk7Cit9CisKIC8qIFB1YmxpYyBlbnRyeXBvaW50LiAgU2VlIGRlc2NyaXB0aW9uIGluIGxp YmdjY2ppdC5oLgogCiAgICBBZnRlciBlcnJvci1jaGVja2luZywgdGhlIHJlYWwgd29yayBpcyBk b25lIGJ5IHRoZQpkaWZmIC0tZ2l0IGEvZ2NjL2ppdC9saWJnY2NqaXQuaCBiL2djYy9qaXQvbGli Z2Njaml0LmgKaW5kZXggNWM3MjJjMmM1N2YuLmQ0YjEwZmMwNjQ0IDEwMDY0NAotLS0gYS9nY2Mv aml0L2xpYmdjY2ppdC5oCisrKyBiL2djYy9qaXQvbGliZ2Njaml0LmgKQEAgLTg0OCw2ICs4NDgs MTYgQEAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwKIAkJCQkJZ2NjX2ppdF90eXBlICpudW1lcmljX3R5cGUsCiAJCQkJCWRvdWJs ZSB2YWx1ZSk7CiAKKy8qIENvbXBsZXggZmxvYXRpbmctcG9pbnQgY29uc3RhbnRzLgorCisgICBU aGlzIEFQSSBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRfQUJJXzE2OyB5b3UgY2Fu IHRlc3QgZm9yIGl0cworICAgcHJlc2VuY2UgdXNpbmcKKyAgICAgI2lmZGVmIExJQkdDQ0pJVF9I QVZFX0NPTVBMRVggKi8KK2V4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCitnY2Nfaml0X2NvbnRleHRf bmV3X3J2YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJ CQkJCQlnY2Nfaml0X3R5cGUgKm51bWVyaWNfdHlwZSwKKwkJCQkJCV9Db21wbGV4IGRvdWJsZSB2 YWx1ZSk7CisKIC8qIFBvaW50ZXJzLiAgKi8KIGV4dGVybiBnY2Nfaml0X3J2YWx1ZSAqCiBnY2Nf aml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX3B0ciAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LApA QCAtOTU5LDcgKzk2OSwyNiBAQCBlbnVtIGdjY19qaXRfYmluYXJ5X29wCiAgIC8qIFJpZ2h0IHNo aWZ0OyBhbmFsb2dvdXMgdG86CiAgICAgICAgKEVYUFJfQSkgPj4gKEVYUFJfQikKICAgICAgaW4g Qy4gICovCi0gIEdDQ19KSVRfQklOQVJZX09QX1JTSElGVAorICBHQ0NfSklUX0JJTkFSWV9PUF9S U0hJRlQsCisKKyAgLyogQ3JlYXRlIGEgY29tcGxleCBmbG9hdGluZyBwb2ludCB2YWx1ZSBmcm9t CisgICAgIHR3byByZWFsIGZsb2F0aW5nIHBvaW50IHZhbHVlcy4gVGhlIG9wZXJhbmRzCisgICAg IGFuZCB0aGUgcmVzdWx0IG5lZWQgdG8gaGF2ZSB0aGUgc2FtZSBzaXplCisgICAgIHF1YWxpZmll ci4KKworICAgICBBbmFsb2dvdXMgdG86CisgICAgICAgQ01QTFggKHJlYWwsaW1hZykKKyAgICAg aW4gQy4KKworICAgICBUaGUgZmlyc3Qgb3BlcmFuZCBpcyB0aGUgcmVhbCBwYXJ0LCB0aGUgb3Ro ZXIKKyAgICAgdGhlIGltYWdpbmFyeS4gTmVnYXRpdmUgemVyb2VzIGFyZSBwcmVzZXJ2ZWQKKyAg ICAgYW5kIEluZjpzIGRvIG5vdCBsZWFkIHRvIE5hTnMuCisKKyAgICAgVGhpcyBvcGVyYXRvciAg d2FzIGFkZGVkIGluIExJQkdDQ0pJVF9BQklfMTY7CisgICAgIHlvdSBjYW4gdGVzdCBmb3IgaXRz IHByZXNlbmNlIHVzaW5nCisgICAgICAgI2lmZGVmIExJQkdDQ0pJVF9IQVZFX0NPTVBMRVgKKyAg Ki8KKyAgR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWAogfTsKIAogZXh0ZXJuIGdjY19qaXRfcnZh bHVlICoKQEAgLTE0MzQsNiArMTQ2MywxOSBAQCBnY2Nfaml0X3RpbWVyX3ByaW50IChnY2Nfaml0 X3RpbWVyICp0aW1lciwKIAkJICAgICBGSUxFICpmX291dCk7CiAKIAorI2RlZmluZSBMSUJHQ0NK SVRfSEFWRV9DT01QTEVYCisKKy8qIEVuYWJsZXMgY29tcGxleCB0eXBlIHN1cHBvcnQgaW4gbGli Z2Njaml0LgorCisgICBUaGlzIEFQSSBlbnRyeXBvaW50IHdhcyBhZGRlZCBpbiBMSUJHQ0NKSVRf QUJJXzE2OyB5b3UgY2FuIHRlc3QgZm9yIGl0cworICAgcHJlc2VuY2UgdXNpbmcKKyAgICAgI2lm ZGVmIExJQkdDQ0pJVF9IQVZFX0NPTVBMRVgKKyovCisKK2V4dGVybiB2b2lkCitnY2Nfaml0X2Nv bnRleHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMgKGdjY19qaXRfY29udGV4dCAqY3R4 dCwKKwkJCQkJICAgICAgIGludCBib29sX3ZhbHVlKTsKKwogI2RlZmluZSBMSUJHQ0NKSVRfSEFW RV9nY2Nfaml0X3J2YWx1ZV9zZXRfYm9vbF9yZXF1aXJlX3RhaWxfY2FsbAogCiAvKiBNYXJrL2Ns ZWFyIGEgY2FsbCBhcyBuZWVkaW5nIHRhaWwtY2FsbCBvcHRpbWl6YXRpb24uCmRpZmYgLS1naXQg YS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAgYi9nY2Mvaml0L2xpYmdjY2ppdC5tYXAKaW5kZXggMzM3 ZWE2YzdmZTQuLmM5YjA0NGRjOGY1IDEwMDY0NAotLS0gYS9nY2Mvaml0L2xpYmdjY2ppdC5tYXAK KysrIGIvZ2NjL2ppdC9saWJnY2NqaXQubWFwCkBAIC0yMDUsMyArMjA1LDkgQEAgTElCR0NDSklU X0FCSV8xNSB7CiAgICAgZ2NjX2ppdF9leHRlbmRlZF9hc21fYWRkX2Nsb2JiZXI7CiAgICAgZ2Nj X2ppdF9jb250ZXh0X2FkZF90b3BfbGV2ZWxfYXNtOwogfSBMSUJHQ0NKSVRfQUJJXzE0OworCitM SUJHQ0NKSVRfQUJJXzE2IHsKKyAgZ2xvYmFsOgorICAgIGdjY19qaXRfY29udGV4dF9uZXdfcnZh bHVlX2Zyb21fY29tcGxleF9kb3VibGU7CisgICAgZ2NjX2ppdF9jb250ZXh0X3NldF9ib29sX2Vu YWJsZV9jb21wbGV4X3R5cGVzOworfSBMSUJHQ0NKSVRfQUJJXzE1OwpcIE5vIG5ld2xpbmUgYXQg ZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvaml0LmRnL2FsbC1ub24tZmFp bGluZy10ZXN0cy5oIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcvYWxsLW5vbi1mYWlsaW5nLXRlc3Rz LmgKaW5kZXggODRlZjU0YTAzODYuLjdiNDVhY2Q0YjljIDEwMDY0NAotLS0gYS9nY2MvdGVzdHN1 aXRlL2ppdC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaAorKysgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy9hbGwtbm9uLWZhaWxpbmctdGVzdHMuaApAQCAtMTA1LDYgKzEwNSwzNiBAQAogI3VuZGVm IGNyZWF0ZV9jb2RlCiAjdW5kZWYgdmVyaWZ5X2NvZGUKIAorLyogdGVzdC1jb21wbGV4LWJ1aWx0 aW5zLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29tcGxleF9idWlsdGlu cworI2RlZmluZSB2ZXJpZnlfY29kZSB2ZXJpZnlfY29kZV9jb21wbGV4X2J1aWx0aW5zCisjaW5j bHVkZSAidGVzdC1jb21wbGV4LWJ1aWx0aW5zLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRl ZiB2ZXJpZnlfY29kZQorCisvKiB0ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYyAqLworI2RlZmluZSBj cmVhdGVfY29kZSBjcmVhdGVfY29kZV9jb21wbGV4X2xpdGVyYWxzCisjZGVmaW5lIHZlcmlmeV9j b2RlIHZlcmlmeV9jb2RlX2NvbXBsZXhfbGl0ZXJhbHMKKyNpbmNsdWRlICJ0ZXN0LWNvbXBsZXgt bGl0ZXJhbHMuYyIKKyN1bmRlZiBjcmVhdGVfY29kZQorI3VuZGVmIHZlcmlmeV9jb2RlCisKKy8q IHRlc3QtY29tcGxleC1taXNjLmMgKi8KKyNkZWZpbmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVf Y29tcGxleF9taXNjCisjZGVmaW5lIHZlcmlmeV9jb2RlIHZlcmlmeV9jb2RlX2NvbXBsZXhfbWlz YworI2luY2x1ZGUgInRlc3QtY29tcGxleC1taXNjLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1 bmRlZiB2ZXJpZnlfY29kZQorCisvKiB0ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgKi8KKyNkZWZp bmUgY3JlYXRlX2NvZGUgY3JlYXRlX2NvZGVfY29tcGxleF9vcGVyYXRvcnMKKyNkZWZpbmUgdmVy aWZ5X2NvZGUgdmVyaWZ5X2NvZGVfY29tcGxleF9vcGVyYXRvcnMKKyNpbmNsdWRlICJ0ZXN0LWNv bXBsZXgtb3BlcmF0b3JzLmMiCisjdW5kZWYgY3JlYXRlX2NvZGUKKyN1bmRlZiB2ZXJpZnlfY29k ZQorCisvKiB0ZXN0LWNvbXBsZXgtdHlwZXMuYzogUXVpdGUgbG9uZywgZG9uJ3QgaW5jbHVkZSBo ZXJlICovCisKIC8qIHRlc3QtY29tcG91bmQtYXNzaWdubWVudC5jICovCiAjZGVmaW5lIGNyZWF0 ZV9jb2RlIGNyZWF0ZV9jb2RlX2NvbXBvdW5kX2Fzc2lnbm1lbnQKICNkZWZpbmUgdmVyaWZ5X2Nv ZGUgdmVyaWZ5X2NvZGVfY29tcG91bmRfYXNzaWdubWVudApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3Rz dWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWJ1aWx0aW5zLmMgYi9nY2MvdGVzdHN1aXRlL2ppdC5k Zy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw MDAwMDAwMC4uZmNlMmM5YjJkMDkKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2pp dC5kZy90ZXN0LWNvbXBsZXgtYnVpbHRpbnMuYwpAQCAtMCwwICsxLDIxNyBAQAorLyoKKyAgVGhp cyB0ZXN0IGp1c3QgY2hlY2tzIHRoYXQgdGhlIGJ1aWx0aW5zIGNpbWFnLCBjcmVhbCBhbmQKKyAg Y29uaiBhcmUgdXNhYmxlLgorCisgIEFsc28sIHRoZXkgc2hvdWxkIGJlIGlubGluZWQsIHdoaWNo IGNhbiBiZSBjaGVja2VkIGJ5CisgIGRpc2Fzc2VtYmxpbmcgdGhlIG9iamVjdCBmaWxlIG1hbnVh bGx5LgorKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNp bmNsdWRlICJsaWJnY2NqaXQuaCIKKworI2luY2x1ZGUgImhhcm5lc3MuaCIKKworc3RhdGljIHZv aWQKK21ha2VfY29kZV91bm9wX2J1aWx0aW5zIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBj b25zdCBjaGFyICpmbl9uYW1lLAorCQkgaW50IHR5cGVfcmV0dXJuLAorCQkgaW50IHR5cGVfYXJn LAorCQkgZ2NjX2ppdF9mdW5jdGlvbiAqZm4pCit7IAorICBnY2Nfaml0X2Jsb2NrICpibG9jazsK KworICBnY2Nfaml0X3R5cGUgKnRyID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0 eXBlX3JldHVybik7CisgIGdjY19qaXRfdHlwZSAqdGEgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5 cGUgKGN0eHQsIHR5cGVfYXJnKTsKKyAgCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtMSA9IGdjY19q aXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIHRhLCAiZjEiKTsKKworICBnY2Nfaml0X3Bh cmFtICpwYXJhbXNbXSA9IHtwYXJhbTF9OworICAKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm9vID0g Z2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAgICBHQ0NfSklUX0ZVTkNU SU9OX0VYUE9SVEVELAorICAgIHRyLCBmbl9uYW1lLCAxLCBwYXJhbXMsIDApOworICAKKyAgYmxv Y2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICBnY2Nf aml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSAoCisgICAgZ2NjX2ppdF9m dW5jdGlvbl9nZXRfcGFyYW0gKGZvbywgMCkpOworCisgIGdjY19qaXRfcnZhbHVlICphcmdzW10g PSB7CisgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMSkKKyAgfTsKKyAgCisgIC8qIHJl dHVybiBmbihmMSk7ICovCisgIGdjY19qaXRfcnZhbHVlICpyID0gZ2NjX2ppdF9jb250ZXh0X25l d19jYWxsCisgICAgKGN0eHQsIDAsIGZuLAorICAgICAxLAorICAgICBhcmdzKTsKKyAgCisgIGdj Y19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwgcik7Cit9CisKK3N0YXRpYyB2 b2lkCittYWtlX2NvZGVfYmlub3BfYnVpbHRpbnMgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkJ IGNvbnN0IGNoYXIgKmZuX25hbWUsCisJCSBpbnQgdHlwZTEsCisJCSBpbnQgdHlwZTIsCisJCSBn Y2Nfaml0X2Z1bmN0aW9uICpidWlsdGluKQoreworICBnY2Nfaml0X2Jsb2NrICpibG9jazsKKyAg CisgIGdjY19qaXRfdHlwZSAqdDEgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIHR5 cGUxKTsKKyAgZ2NjX2ppdF90eXBlICp0MiA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4 dCwgdHlwZTIpOworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9jb250ZXh0 X25ld19wYXJhbSAoY3R4dCwgMCwgdDEsICJmMSIpOworICBnY2Nfaml0X3BhcmFtICpwYXJhbTIg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCB0MiwgImYyIik7CisKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW1zW10gPSB7cGFyYW0xLCBwYXJhbTJ9OworICAKKyAgZ2NjX2ppdF9m dW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAg ICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHQxLCBmbl9uYW1lLCAyLCBwYXJhbXMs IDApOworICAKKyAgYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3Rh cnQiKTsKKworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSAo CisgICAgZ2NjX2ppdF9mdW5jdGlvbl9nZXRfcGFyYW0oZm9vLCAwKSk7CisgIGdjY19qaXRfbHZh bHVlICpmMiA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBnY2Nfaml0X2Z1bmN0aW9u X2dldF9wYXJhbShmb28sIDEpKTsKKworICBnY2Nfaml0X3J2YWx1ZSAqYXJnc1tdID0geworICAg IGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1ZSAoZjEpLAorICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2 YWx1ZSAoZjIpCisgIH07CisgIAorICAvKiByZXR1cm4gYnVpbHRpbihmMSxmMik7ICovCisgIGdj Y19qaXRfcnZhbHVlICpyID0gZ2NjX2ppdF9jb250ZXh0X25ld19jYWxsCisgICAgKGN0eHQsIDAs IGJ1aWx0aW4sCisgICAgIDIsCisgICAgIGFyZ3MpOworICAKKyAgZ2NjX2ppdF9ibG9ja19lbmRf d2l0aF9yZXR1cm4gKGJsb2NrLCAwLCByKTsKK30KKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAodm9pZCkgdXNlcl9kYXRh OworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoY3R4 dCwgMSk7CisgIAorICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jcG93ID0gZ2NjX2ppdF9jb250ZXh0 X2dldF9idWlsdGluX2Z1bmN0aW9uCisgICAgKGN0eHQsICJfX2J1aWx0aW5fY3BvdyIpOworCisg IG1ha2VfY29kZV9iaW5vcF9idWlsdGlucyAoY3R4dCwgImNwb3dfYnVpbHRpbiIsCisJCSAgIEdD Q19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9V QkxFLAorCQkgICBmbl9jcG93KTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jb25qID0gZ2Nj X2ppdF9jb250ZXh0X2dldF9idWlsdGluX2Z1bmN0aW9uCisgICAgKGN0eHQsICJfX2J1aWx0aW5f Y29uaiIpOworICAKKyAgLyogSW4gYSBnb29kIHdvcmxkIGNvbmogc2hvdWxkIGJlIGlubGluZWQg Ki8KKyAgbWFrZV9jb2RlX3Vub3BfYnVpbHRpbnMgKGN0eHQsICJjb25qX2lubGluZWQiLAorCQkg IEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICBHQ0NfSklUX1RZUEVfQ09NUExFWF9E T1VCTEUsCisJCSAgZm5fY29uaik7CisKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5fY3JlYWwgPSBn Y2Nfaml0X2NvbnRleHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRp bl9jcmVhbCIpOworICBnY2Nfaml0X2Z1bmN0aW9uICpmbl9jcmVhbGYgPSBnY2Nfaml0X2NvbnRl eHRfZ2V0X2J1aWx0aW5fZnVuY3Rpb24KKyAgICAoY3R4dCwgIl9fYnVpbHRpbl9jcmVhbGYiKTsK KyAgZ2NjX2ppdF9mdW5jdGlvbiAqZm5fY3JlYWxsID0gZ2NjX2ppdF9jb250ZXh0X2dldF9idWls dGluX2Z1bmN0aW9uCisgICAgKGN0eHQsICJfX2J1aWx0aW5fY3JlYWxsIik7CisgIGdjY19qaXRf ZnVuY3Rpb24gKmZuX2NpbWFnID0gZ2NjX2ppdF9jb250ZXh0X2dldF9idWlsdGluX2Z1bmN0aW9u CisgICAgKGN0eHQsICJfX2J1aWx0aW5fY2ltYWciKTsKKworICAvKiBUaGVzZSBzaG91bGQgYmUg aW5saW5lZCB0b28gKi8KKyAgbWFrZV9jb2RlX3Vub3BfYnVpbHRpbnMgKGN0eHQsICJjcmVhbF9p bmxpbmVkIiwKKwkJICBHQ0NfSklUX1RZUEVfRE9VQkxFLAorCQkgIEdDQ19KSVRfVFlQRV9DT01Q TEVYX0RPVUJMRSwKKwkJICBmbl9jcmVhbCk7CisgIG1ha2VfY29kZV91bm9wX2J1aWx0aW5zIChj dHh0LCAiY2ltYWdfaW5saW5lZCIsCisJCSAgR0NDX0pJVF9UWVBFX0RPVUJMRSwKKwkJICBHQ0Nf SklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgZm5fY2ltYWcpOworCisgIG1ha2VfY29kZV91 bm9wX2J1aWx0aW5zIChjdHh0LCAiY3JlYWxmX2lubGluZWQiLAorCQkgIEdDQ19KSVRfVFlQRV9G TE9BVCwKKwkJICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICBmbl9jcmVhbGYpOwor ICBtYWtlX2NvZGVfdW5vcF9idWlsdGlucyAoY3R4dCwgImNyZWFsbF9pbmxpbmVkIiwKKwkJICBH Q0NfSklUX1RZUEVfTE9OR19ET1VCTEUsCisJCSAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19E T1VCTEUsCisJCSAgZm5fY3JlYWxsKTsKKyAgCisgIC8qIFVzZSB0byBpbnNwZWN0IGNvZGUgbWFu dWFsbHkgYW5kIGFzc3VyZSBjb25qLCBjcmVhbCwgY2ltYWcKKyAgICAgYXJlIGlubGluZWQuIEF0 IHRoZSB0aW1lIG9mIHdyaXRpbmcgdGhleSBhcmUgb24gbXkgeDY0IG1hY2hpbmUgKi8KKyAgI2lm IDAKKyAgZ2NjX2ppdF9jb250ZXh0X2NvbXBpbGVfdG9fZmlsZSAoY3R4dCwgR0NDX0pJVF9PVVRQ VVRfS0lORF9PQkpFQ1RfRklMRSwKKwkJCQkgICAidGVzdC1jb21wbGV4LWJ1aWx0aW5zLm8iKTsK KyAgI2VuZGlmCit9CisKK3R5cGVkZWYgX0NvbXBsZXggZG91YmxlICgqY2RfY2RjZCkoX0NvbXBs ZXggZG91YmxlLCBfQ29tcGxleCBkb3VibGUpOwordHlwZWRlZiBfQ29tcGxleCBkb3VibGUgKCpj ZF9jZCkoX0NvbXBsZXggZG91YmxlKTsKK3R5cGVkZWYgZG91YmxlICgqZF9jZCkoX0NvbXBsZXgg ZG91YmxlKTsKK3R5cGVkZWYgZmxvYXQgKCpmX2NmKShfQ29tcGxleCBmbG9hdCk7Cit0eXBlZGVm IGxvbmcgZG91YmxlICgqbGRfY2xkKShfQ29tcGxleCBsb25nIGRvdWJsZSk7CisKKy8qIFdlIG5l ZWQgdGhpcyB0byBmb29sIEdDQyBpbnRvIG5vdCBwcmVjb21wdXRpbmcgdGhlIGJ1aWx0LWluIC4u LgorICAgcHJlY29tcHV0aW5nIHNlZW1zIGxpa2UgYSBmZXV0dXJlIGxpYmdjY2ppdCBtaXNzZXMu ICovCit2b2xhdGlsZSBfQ29tcGxleCBkb3VibGUgaGFsZiA9IDAuNTsKKwordm9pZAordmVyaWZ5 X2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sK KyAgQ0hFQ0tfTk9OX05VTEwgKHJlc3VsdCk7CisKKyAgey8qIFRlc3QgYmluYXJ5IGJ1aWx0aW5z ICovCisgICAgeworICAgICAgIGNkX2NkY2QgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjcG93X2J1aWx0aW4iKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor ICAgICAgIAorICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMiwgMiksIDQuKTsKKyAgICAgICBfQ29t cGxleCBkb3VibGUgYW5zID0gZm4gKC0xLiwgMC41KTsKKyAgICAgICBfQ29tcGxleCBkb3VibGUg a2V5ID0gX19idWlsdGluX2Nwb3cgKC0xLiwgaGFsZik7CisKKyAgICAgICAvKiBUaGlzIHRlc3Qg ZmFpbHMgaWYgbGliZ2Njaml0IGNhbiBwcmVjb21wdXRlIGJ1aWx0aW5zICovCisgICAgICAgQ0hF Q0tfVkFMVUUgKGFucywga2V5KTsgLyogQWxtb3N0IDEuaiAqLworICAgIH0KKyAgfQorICB7Lyog VGVzdCB1bmFyeSBidWlsdGlucyAqLworICAgIHsgLyogY29uaiAqLworICAgICAgY2RfY2QgZm4g PSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29ual9pbmxpbmVkIik7CisgICAg ICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgCisgICAgICBDSEVDS19WQUxVRSggZm4gKDEu IC0gMS5qKSwgMS4gKyAxLmopOworICAgIH0KKyAgICB7IC8qIGNyZWFsICovCisgICAgICBkX2Nk IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsX2lubGluZWQiKTsK KyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChm biAoMS4gLSAxLmopLCAxLik7CisgICAgfQorICAgIHsgLyogY2ltYWcgKi8KKyAgICAgIGRfY2Qg Zm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY2ltYWdfaW5saW5lZCIpOwor ICAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKyAgICAgIAorICAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLiAtIDEuaiksIC0xLik7CisgICAgfQorICAgIHsgLyogY3JlYWxmICovCisgICAgICBmX2Nm IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsZl9pbmxpbmVkIik7 CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgCisgICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuZiAtIDEuZmopLCAxLmYpOworICAgIH0KKyAgICB7IC8qIGNyZWFsbCAqLworICAgICAg bGRfY2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNyZWFsbF9pbmxp bmVkIik7CisgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgCisgICAgICBDSEVDS19W QUxVRSAoZm4gKDEuTCAtIDEuTGopLCAxLkwpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEv Z2NjL3Rlc3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LWxpdGVyYWxzLmMgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwMC4uNDIyY2ZmMTA0OGQKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtbGl0ZXJhbHMuYwpAQCAtMCwwICsxLDE0NSBAQAor LyoKKyAgVGVzdCB0aGUgbmV3ICdnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9tX2NvbXBs ZXhfZG91YmxlKCknCisgIGFzd2VsbCBhcyB0ZXN0IHRoYXQgdGhlIG9sZCAnX2Zyb21faW50IC4u LiBfZnJvbV9kb3VibGUiCisgIGNhbiBwcm9kdWNlIGNvbXBsZXggdmFsdWVzLgorKi8KKworI2lu Y2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisKKyNpbmNsdWRlICJsaWJnY2Nq aXQuaCIKKyNpbmNsdWRlICJoYXJuZXNzLmgiCisKK3N0YXRpYyB2b2lkCittYWtlX2NvZGUgKGdj Y19qaXRfY29udGV4dCAqY3R4dCwKKwkgICBjb25zdCBjaGFyICpmbl9uYW1lLAorCSAgIGludCB0 eXBlLAorCSAgIF9Db21wbGV4IGRvdWJsZSBsb2NhbF92YWwsCisJICAgaW50IGxpdF90eXBlKQor eworICBnY2Nfaml0X3R5cGUgKnR0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0 eXBlKTsKKworICBnY2Nfaml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1 bmN0aW9uIChjdHh0LCAwLAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgdHQs IGZuX25hbWUsIDAsIDAsIDApOworICAKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0 X2Z1bmN0aW9uX25ld19ibG9jayAoZm9vLCAic3RhcnQiKTsKKworICAvKiBsb2NhbF90eXBlIGYx ID0gbG9jYWxfdmFsOyAqLworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X2Z1bmN0aW9u X25ld19sb2NhbCAoZm9vLCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9ydmFsdWUgKnIxOwor CisgIGlmIChsaXRfdHlwZSA9PSAnYycpCisgICAgcjEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X3J2 YWx1ZV9mcm9tX2NvbXBsZXhfZG91YmxlIChjdHh0LCB0dCwgbG9jYWxfdmFsKTsKKyAgZWxzZSBp ZiAobGl0X3R5cGUgPT0gJ2QnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVf ZnJvbV9kb3VibGUgKGN0eHQsIHR0LCBjcmVhbChsb2NhbF92YWwpKTsKKyAgZWxzZSBpZiAobGl0 X3R5cGUgPT0gJ2wnKQorICAgIHIxID0gZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9s b25nIChjdHh0LCB0dCwgY3JlYWwobG9jYWxfdmFsKSk7CisgIGVsc2UgaWYgKGxpdF90eXBlID09 ICdpJykKKyAgICByMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21faW50IChjdHh0 LCB0dCwgY3JlYWwobG9jYWxfdmFsKSk7CisgICAgCisgIGdjY19qaXRfYmxvY2tfYWRkX2Fzc2ln bm1lbnQgKGJsb2NrLCAwLCBmMSwgcjEpOworICAKKyAgZ2NjX2ppdF9ibG9ja19lbmRfd2l0aF9y ZXR1cm4gKGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUoZjEpKTsKK30KKwordm9p ZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQor eworICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFi bGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgbWFrZV9jb2RlIChjdHh0LCAiY29tcGxl eF9mbG9hdF9jbGl0XzFjMV8yYzJqIiwKKwkgICAgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxP QVQsCisJICAgICAgIDEuMSArIDIuMmosICdjJyk7CisgIG1ha2VfY29kZSAoY3R4dCwgImNvbXBs ZXhfZG91YmxlX2NsaXRfMWMxXzJjMmoiLAorCSAgICAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9E T1VCTEUsCisJICAgICAgIDEuMSArIDIuMmosICdjJyk7CisgIG1ha2VfY29kZSAoY3R4dCwgImNv bXBsZXhfbG9uZ19kb3VibGVfY2xpdF8xYzFfMmMyaiIsCisJICAgICAgIEdDQ19KSVRfVFlQRV9D T01QTEVYX0xPTkdfRE9VQkxFLAorCSAgICAgICAxLjEgKyAyLjJqLCAnYycpOworICBtYWtlX2Nv ZGUgKGN0eHQsICJmbG9hdF9jbGl0XzFjMSIsCisJICAgICAgIEdDQ19KSVRfVFlQRV9GTE9BVCwK KwkgICAgICAgMS4xICsgMi4yaiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAiZG91YmxlX2Ns aXRfMWMxIiwKKwkgICAgICAgR0NDX0pJVF9UWVBFX0RPVUJMRSwKKwkgICAgICAgMS4xICsgMi4y aiwgJ2MnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAibG9uZ19kb3VibGVfY2xpdF8xYzEiLAorCSAg ICAgICBHQ0NfSklUX1RZUEVfTE9OR19ET1VCTEUsCisJICAgICAgIDEuMSArIDIuMmosICdjJyk7 CisKKyAgLyogTWFrZSBjb21wbGV4IGZyb20gImZyb21fZG91YmxlIiwgImZyb21fbG9uZyIsImZy b21faW50IiAqLworICBtYWtlX2NvZGUgKGN0eHQsICJjb21wbGV4X2Zsb2F0X2RsaXRfMWMxIiwK KwkgICAgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJICAgICAgIDEuMSwgJ2QnKTsK KyAgbWFrZV9jb2RlIChjdHh0LCAiY29tcGxleF9kb3VibGVfZGxpdF8xYzEiLAorCSAgICAgICBH Q0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJICAgICAgIDEuMSwgJ2QnKTsKKyAgbWFrZV9j b2RlIChjdHh0LCAiY29tcGxleF9sb25nX2RvdWJsZV9kbGl0XzFjMSIsCisJICAgICAgIEdDQ19K SVRfVFlQRV9DT01QTEVYX0xPTkdfRE9VQkxFLAorCSAgICAgICAxLjEsICdkJyk7CisgIG1ha2Vf Y29kZSAoY3R4dCwgImNvbXBsZXhfZG91YmxlX2xsaXRfMiIsCisJICAgICAgIEdDQ19KSVRfVFlQ RV9DT01QTEVYX0RPVUJMRSwKKwkgICAgICAgMiwgJ2wnKTsKKyAgbWFrZV9jb2RlIChjdHh0LCAi Y29tcGxleF9kb3VibGVfaWxpdF8zIiwKKwkgICAgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9V QkxFLAorCSAgICAgICAzLCAnaScpOworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVM TCAocmVzdWx0KTsKKworICB7LyogVGVzdCBsaXRlcmFscyAqLworICAgIHsKKyAgICAgIF9Db21w bGV4IGZsb2F0ICgqZikoKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2Zsb2F0X2NsaXRfMWMxXzJjMmoiKTsKKworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4x ZiArIDIuMmZqKTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggZG91YmxlICgqZikoKSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV9jbGl0XzFj MV8yYzJqIik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAxLjEgKyAyLjJqKTsKKyAgICB9Cisg ICAgeworICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfY2xpdF8xYzFfMmMyaiIpOwor ICAgICAgLyogTm90ZTogVGhlIGxpdGVyYWwgaW4gdGhlIGZ1bmN0aW9uIGlzIGNvbXBsZXggZG91 YmxlICovCisgICAgICBDSEVDS19WQUxVRShmICgpLDEuMSArIDIuMmopOworICAgIH0KKyAgICB7 CisgICAgICBmbG9hdCAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAi ZmxvYXRfY2xpdF8xYzEiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMWYpOworICAgIH0K KyAgICB7CisgICAgICBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImRvdWJsZV9jbGl0XzFjMSIpOworICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4xKTsK KyAgICB9CisgICAgeworICAgICAgbG9uZyBkb3VibGUgKCpmKSgpID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImxvbmdfZG91YmxlX2NsaXRfMWMxIik7CisgICAgICBDSEVDS19W QUxVRShmICgpLCAxLjEpOworICAgIH0KKyAgICB7CisgICAgICBmbG9hdCAoKmYpKCkgPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF9kbGl0XzFjMSIpOwor ICAgICAgQ0hFQ0tfVkFMVUUoZiAoKSwgMS4xZik7CisgICAgfQorICAgIHsKKyAgICAgIF9Db21w bGV4IGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29t cGxleF9kb3VibGVfZGxpdF8xYzEiKTsKKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMSk7Cisg ICAgfQorICAgIHsKKyAgICAgIF9Db21wbGV4IGxvbmcgZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX2RsaXRfMWMxIik7 CisgICAgICAvKiBOb3RlOiBUaGUgbGl0ZXJhbCBpbiB0aGUgZnVuY3Rpb24gaXMgY29tcGxleCBk b3VibGUgKi8KKyAgICAgIENIRUNLX1ZBTFVFKGYgKCksIDEuMSk7CisgICAgfQorICAgIHsKKyAg ICAgIF9Db21wbGV4IGRvdWJsZSAoKmYpKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVz dWx0LCAiY29tcGxleF9kb3VibGVfbGxpdF8yIik7CisgICAgICBDSEVDS19WQUxVRShmICgpLCAy KTsKKyAgICB9CisgICAgeworICAgICAgX0NvbXBsZXggZG91YmxlICgqZikoKSA9IGdjY19qaXRf cmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV9pbGl0XzMiKTsKKyAgICAg IENIRUNLX1ZBTFVFKGYgKCksIDMpOworICAgIH0KKyAgfQorfQpkaWZmIC0tZ2l0IGEvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW1pc2MuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRn L3Rlc3QtY29tcGxleC1taXNjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw MDAuLmZlMGNkYWRlOTI3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9qaXQuZGcv dGVzdC1jb21wbGV4LW1pc2MuYwpAQCAtMCwwICsxLDIwNCBAQAorLyoKKyAgVGhpcyB0ZXN0IGNo ZWNrcyB3ZXRoZXIgY29tcGxleCB0eXBlcyB3b3JrIHdpdGggc3RydWN0cywgdW5pb25zCisgIGFu ZCBwb2ludGVycy4KKworICBBc3dlbGwgYXMgY29uc3QgYW5kIHZvbGF0aWxlLCBidXQgb25seSBp biB0aGUgc2Vuc2UgdGhhdCBoYXZpbmcKKyAgdGhvc2UgcXVhbGlmaWVycyBkb2Vzbid0IGNyYXNo IGdjYy4KKworKi8KKworI2luY2x1ZGUgPG1hdGguaD4KKyNpbmNsdWRlIDxjb21wbGV4Lmg+CisK KyNpbmNsdWRlICJsaWJnY2NqaXQuaCIKKworI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAor Y3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQorewor ICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4dF9zZXRfYm9vbF9lbmFibGVf Y29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgZ2NjX2ppdF90eXBlICp0eXBlX2ludCA9Cisg ICAgZ2NjX2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCBHQ0NfSklUX1RZUEVfSU5UKTsKKyAg Z2NjX2ppdF90eXBlICp0eXBlX2NkID0KKyAgICBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0 eHQsIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSk7CisKKyAgZ2NjX2ppdF9sdmFsdWUgKmNk X2dibCA9IGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCAwLCBHQ0NfSklU X0dMT0JBTF9FWFBPUlRFRCwKKyAgICB0eXBlX2NkLAorICAgICJhX2NvbXBsZXhfZ2xvYmFsX2Rv dWJsZV8yIik7CisKKyAgLyogVGhlc2UgZ2xvYmFscyBhcmUgbm90IHVzZWQgZm9yIGFueXRoaW5n ICovCisgIGdjY19qaXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCAwLCBHQ0NfSklU X0dMT0JBTF9FWFBPUlRFRCwKKyAgICBnY2Nfaml0X3R5cGVfZ2V0X3ZvbGF0aWxlICh0eXBlX2Nk KSwKKyAgICAiYV92b2xhdGlsZV9jb21wbGV4X2RvdWJsZSIpOworICBnY2Nfaml0X2NvbnRleHRf bmV3X2dsb2JhbCAoCisgICAgY3R4dCwgMCwgR0NDX0pJVF9HTE9CQUxfRVhQT1JURUQsCisgICAg Z2NjX2ppdF90eXBlX2dldF9jb25zdCAodHlwZV9jZCksCisgICAgImFfY29uc3RfY29tcGxleF9k b3VibGUiKTsKKworICBnY2Nfaml0X3R5cGUgKmFycl90eXBlID0KKyAgICBnY2Nfaml0X2NvbnRl eHRfbmV3X2FycmF5X3R5cGUgKGN0eHQsCisgICAgICAwLCB0eXBlX2NkLCAxMCk7CisgIGdjY19q aXRfY29udGV4dF9uZXdfZ2xvYmFsICgKKyAgICBjdHh0LCAwLCBHQ0NfSklUX0dMT0JBTF9FWFBP UlRFRCwKKyAgICBhcnJfdHlwZSwKKyAgICAiYV9jb25zdF9jb21wbGV4X2RvdWJsZV9hcnJheSIp OyAgCisKKyAgey8qIE1ha2UgYSBmdW5jdGlvbiByZXR1cm5pbmcgdW5pb24gd2l0aCAzLjE0ICsg MTUxNi5qIGluIGl0ICovCisgICAgZ2NjX2ppdF9maWVsZCAqY2RfZmllbGQgPSAKKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfZmllbGQgKGN0eHQsCisJCQkJIDAsCisJCQkgICAgICAgICB0eXBl X2NkLAorCQkJICAgICAgICAgImNkIik7CisgICAgZ2NjX2ppdF9maWVsZCAqaV9maWVsZCA9IAor ICAgICAgZ2NjX2ppdF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCSAgICAgICAgIDAsCisJ CQkgICAgICAgICB0eXBlX2ludCwKKwkJCSAgICAgICAgICJpIik7CisgICAgZ2NjX2ppdF9maWVs ZCAqZmllbGRzW10gPSB7Y2RfZmllbGQsIGlfZmllbGR9OworICAgIGdjY19qaXRfdHlwZSAqY2Rp ID0KKyAgICAgIGdjY19qaXRfY29udGV4dF9uZXdfdW5pb25fdHlwZSAoY3R4dCwKKwkJCQkgICAg ICAwLAorCQkJCSAgICAgICJjZGkiLAorCQkJCSAgICAgIDIsCisJCQkJICAgICAgZmllbGRzKTsK KworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rp b24gKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgICAgY2Rp LCAiYV91bmlvbnlfZm5fcmV0dXJuaW5nX3VuaW9uIiwgMCwgMCwgMCk7CisKKyAgICBnY2Nfaml0 X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIp OworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9CisgICAgICBnY2Nfaml0X2Z1bmN0aW9uX25l d19sb2NhbCAoZm9vLCAwLCBjZGksICJ1bmlvbl9sb2NhbCIpOworICAgIGdjY19qaXRfbHZhbHVl ICpsdl9maWVsZCA9IGdjY19qaXRfbHZhbHVlX2FjY2Vzc19maWVsZAorICAgICAgKGxvY2FsLCAw LCBjZF9maWVsZCk7CisgICAgZ2NjX2ppdF9ibG9ja19hZGRfYXNzaWdubWVudAorICAgICAgKGJs b2NrLCAwLCBsdl9maWVsZCwKKyAgICAgICBnY2Nfaml0X2NvbnRleHRfbmV3X3J2YWx1ZV9mcm9t X2NvbXBsZXhfZG91YmxlICgKKyAgICAgICAgIGN0eHQsIHR5cGVfY2QsIDMuMTQgKyAxNTkyLmop KTsKKworICAgIC8qIE5vdGU6IFdyaXRlcyB0byBnbG9iYWwgaGVyZSAqLworICAgIGdjY19qaXRf YmxvY2tfYWRkX2Fzc2lnbm1lbnQgKAorICAgICAgYmxvY2ssIDAsIGNkX2dibCwKKyAgICAgIGdj Y19qaXRfY29udGV4dF9uZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKAorICAgICAgICAg Y3R4dCwgdHlwZV9jZCwgNjUzNSArIDkuaikpOworICAgIAorICAgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuICgKKyAgICAgIGJsb2NrLCAwLCBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUg KGxvY2FsKSk7CisgIH0KKyAgey8qIE1ha2UgYSBmdW5jdGlvbiByZXR1cm5pbmcgYSBjb21wbGV4 eSBzdHJ1Y3QgKi8KKyAgICBnY2Nfaml0X2ZpZWxkICpjZF9maWVsZCA9IAorICAgICAgZ2NjX2pp dF9jb250ZXh0X25ld19maWVsZCAoY3R4dCwKKwkJCQkgMCwKKwkJCSAgICAgICAgIHR5cGVfY2Qs CisJCQkgICAgICAgICAiY2QiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICppX2ZpZWxkID0gCisgICAg ICBnY2Nfaml0X2NvbnRleHRfbmV3X2ZpZWxkIChjdHh0LAorCQkJICAgICAgICAgMCwKKwkJCSAg ICAgICAgIHR5cGVfaW50LAorCQkJICAgICAgICAgImkiKTsKKyAgICBnY2Nfaml0X2ZpZWxkICpm aWVsZHNbXSA9IHtjZF9maWVsZCwgaV9maWVsZH07CisgICAgZ2NjX2ppdF90eXBlICpjZGlfc3Ry dWN0ID0KKyAgICAgIGdjY19qaXRfc3RydWN0X2FzX3R5cGUoCisJZ2NjX2ppdF9jb250ZXh0X25l d19zdHJ1Y3RfdHlwZSAoY3R4dCwKKwkJCQkJMCwKKwkJCQkJImNkaV9zdHJ1Y3QiLAorCQkJCQky LAorCQkJCQlmaWVsZHMpKTsKKworICAgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19qaXRf Y29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgICBHQ0NfSklUX0ZVTkNUSU9OX0VY UE9SVEVELAorICAgICAgY2RpX3N0cnVjdCwgImFfc3RydWN0eV9mbl9yZXR1cm5pbmdfc3RydWN0 IiwgMCwgMCwgMCk7CisKKyAgICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rp b25fbmV3X2Jsb2NrIChmb28sICJzdGFydCIpOworICAgIGdjY19qaXRfbHZhbHVlICpsb2NhbCA9 CisgICAgICBnY2Nfaml0X2Z1bmN0aW9uX25ld19sb2NhbCAoZm9vLCAwLCBjZGlfc3RydWN0LCAi bG9jYWwiKTsKKyAgICBnY2Nfaml0X2x2YWx1ZSAqbHZfZmllbGQgPSBnY2Nfaml0X2x2YWx1ZV9h Y2Nlc3NfZmllbGQgKAorICAgICAgbG9jYWwsIDAsIGNkX2ZpZWxkKTsKKyAgICBnY2Nfaml0X2Js b2NrX2FkZF9hc3NpZ25tZW50ICgKKyAgICAgICBibG9jaywgMCwgbHZfZmllbGQsCisgICAgICAg LyogTm90ZTogUmVhZHMgZnJvbSBnbG9iYWwgaGVyZSAqLworICAgICAgIGdjY19qaXRfbHZhbHVl X2FzX3J2YWx1ZShjZF9nYmwpKTsKKyAgICAKKyAgICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3Jl dHVybiAoCisgICAgICBibG9jaywgMCwgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChsb2NhbCkp OworICB9CisgIHsvKiBNYWtlIGEgZnVuY3Rpb24gdGFraW5nIGEgcG9pbnRlciB0byBhIGNvbXBs ZXggZG91YmxlLAorICAgICAgYWRkIDErMS5qIHRvIGl0LCBhbmQgcmV0dXJuIHRoZSBwb2ludGVy ICovCisgICAgICBnY2Nfaml0X3R5cGUgKnR5cGVfcmV0dXJuID0KKwlnY2Nfaml0X3R5cGVfZ2V0 X3BvaW50ZXIgKHR5cGVfY2QpOworICAgICAgCisgICAgICBnY2Nfaml0X3BhcmFtICpwYXJhbSA9 IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKAorCWN0eHQsIDAsIGdjY19qaXRfdHlwZV9nZXRf cG9pbnRlciAodHlwZV9jZCksICJwY2QiKTsKKyAgICAgIAorICAgICAgZ2NjX2ppdF9mdW5jdGlv biAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKwlHQ0NfSklU X0ZVTkNUSU9OX0VYUE9SVEVELAorCXR5cGVfcmV0dXJuLAorCSJhX3BvaW50eV9mbl9yZXR1cm5p bmdfcG9pbnRzIiwgMSwgJnBhcmFtLCAwKTsKKyAgICAgIGdjY19qaXRfYmxvY2sgKmJsb2NrID0g Z2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2sgKGZvbywgInN0YXJ0Iik7CisgICAgICAKKyAgICAg IGdjY19qaXRfcnZhbHVlICpwYXJhbV9ydiA9IGdjY19qaXRfcGFyYW1fYXNfcnZhbHVlICgKKyAg ICAgICAgZ2NjX2ppdF9mdW5jdGlvbl9nZXRfcGFyYW0gKGZvbywgMCkpOworCisgICAgICBnY2Nf aml0X3J2YWx1ZSAqcnZhbCA9IGdjY19qaXRfY29udGV4dF9uZXdfYmluYXJ5X29wICgKKwljdHh0 LCAwLCBHQ0NfSklUX0JJTkFSWV9PUF9QTFVTLCB0eXBlX2NkLAorCWdjY19qaXRfY29udGV4dF9u ZXdfcnZhbHVlX2Zyb21fY29tcGxleF9kb3VibGUgKAorCSAgY3R4dCwgdHlwZV9jZCwgMSArIDEu aiksCisJZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlICgKKwkgIGdjY19qaXRfcnZhbHVlX2RlcmVm ZXJlbmNlICgKKwkgICAgcGFyYW1fcnYsIDApKSk7CisgICAgICBnY2Nfaml0X2Jsb2NrX2FkZF9h c3NpZ25tZW50IChibG9jaywgMCwKKyAgICAgICAgZ2NjX2ppdF9ydmFsdWVfZGVyZWZlcmVuY2Ug KAorCSAgICBwYXJhbV9ydiwgMCksCisJcnZhbCk7CisKKyAgICAgIGdjY19qaXRfYmxvY2tfZW5k X3dpdGhfcmV0dXJuICgKKwlibG9jaywgMCwgcGFyYW1fcnYpOworICB9Cit9CisKK3R5cGVkZWYg dW5pb24geworICBfQ29tcGxleCBkb3VibGUgY2Q7CisgIGludCBpOworfSBjb21wbGV4X3Rlc3Rf dW5pb247CisKK3R5cGVkZWYgc3RydWN0IHsKKyAgX0NvbXBsZXggZG91YmxlIGNkOworICBpbnQg aTsKK30gY29tcGxleF90ZXN0X3N0cnVjdDsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19qaXRf Y29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgQ0hFQ0tfTk9OX05V TEwgKHJlc3VsdCk7CisKKyAgeworICAgIGNvbXBsZXhfdGVzdF91bmlvbiAoKmZuKSgpID0gZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImFfdW5pb255X2ZuX3JldHVybmluZ191bmlv biIpOworICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICBjb21wbGV4X3Rlc3RfdW5pb24g dSA9IGZuKCk7CisgICAgQ0hFQ0tfVkFMVUUgKHUuY2QsIDMuMTQgKyAxNTkyLmopOworICB9Cisg IHsKKyAgICBjb21wbGV4X3Rlc3Rfc3RydWN0ICgqZm4pKCkgPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiYV9zdHJ1Y3R5X2ZuX3JldHVybmluZ19zdHJ1Y3QiKTsKKyAgICBDSEVD S19OT05fTlVMTCAoZm4pOworCisgICAgY29tcGxleF90ZXN0X3N0cnVjdCBzID0gZm4oKTsKKyAg ICBDSEVDS19WQUxVRSAocy5jZCwgNjUzNSArIDkuaik7CisgIH0KKyAgeworICAgIF9Db21wbGV4 IGRvdWJsZSAqCisgICAgKCpmbikoX0NvbXBsZXggZG91YmxlICopID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImFfcG9pbnR5X2ZuX3JldHVybmluZ19wb2ludHMiKTsKKyAgICBD SEVDS19OT05fTlVMTCAoZm4pOworCisgICAgX0NvbXBsZXggZG91YmxlIHMgPSAyLiArIDMuaTsK KyAgICBfQ29tcGxleCBkb3VibGUgKnAgPSBmbigmcyk7CisgICAgQ0hFQ0tfVkFMVUUgKHAsICZz KTsKKyAgICBDSEVDS19WQUxVRSAocywgMy4gKyA0LmkpOworICB9Cit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMgYi9nY2MvdGVzdHN1 aXRlL2ppdC5kZy90ZXN0LWNvbXBsZXgtb3BlcmF0b3JzLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLjA5MWI1NmZiNGQyCi0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rl c3RzdWl0ZS9qaXQuZGcvdGVzdC1jb21wbGV4LW9wZXJhdG9ycy5jCkBAIC0wLDAgKzEsMzUzIEBA CisvKgorICBUZXN0ID09LCAhPSwgdGhlIGNyZWF0ZS1jb21wbGV4LWZyb20tcmVhbHMtb3BlcmF0 b3IsCisgIHVuYXJ5IG1pbnVzIGFuZCAqLS8rCisgKi8KKworCisjaW5jbHVkZSA8bWF0aC5oPgor I2luY2x1ZGUgPGNvbXBsZXguaD4KKworI2luY2x1ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUg Imhhcm5lc3MuaCIKKworc3RhdGljIHZvaWQKK21ha2VfY29kZV9jb21wb3AgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwKKwkJICBjb25zdCBjaGFyICpmbl9uYW1lLAorCQkgIGludCB0eXBlLAorCQkg IGVudW0gZ2NjX2ppdF9jb21wYXJpc29uIG9wKQoreworICBnY2Nfaml0X3R5cGUgKnR0ID0gZ2Nj X2ppdF9jb250ZXh0X2dldF90eXBlIChjdHh0LCB0eXBlKTsKKyAgZ2NjX2ppdF90eXBlICpib29s X3R5cGUgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUgKGN0eHQsIEdDQ19KSVRfVFlQRV9CT09M KTsKKyAgCisgIGdjY19qaXRfcGFyYW0gKnBhcmFtMSA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFy YW0gKGN0eHQsIDAsIHR0LCAiZjEiKTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0yID0gZ2NjX2pp dF9jb250ZXh0X25ld19wYXJhbSAoY3R4dCwgMCwgdHQsICJmMiIpOworCisgIGdjY19qaXRfcGFy YW0gKnBhcmFtc1tdID0ge3BhcmFtMSwgcGFyYW0yfTsKKyAgCisgIGdjY19qaXRfZnVuY3Rpb24g KmZvbyA9IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJ VF9GVU5DVElPTl9FWFBPUlRFRCwKKyAgICBib29sX3R5cGUsIGZuX25hbWUsIDIsIHBhcmFtcywg MCk7CisgIAorICBnY2Nfaml0X2Jsb2NrICpibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Js b2NrIChmb28sICJzdGFydCIpOworCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFy YW1fYXNfbHZhbHVlICgKKyAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSk7 CisgIGdjY19qaXRfbHZhbHVlICpmMiA9IGdjY19qaXRfcGFyYW1fYXNfbHZhbHVlICgKKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAxKSk7CisgCisgIC8qIHJldHVybiBmMSBv cCBmMjsgKi8KKyAgZ2NjX2ppdF9ydmFsdWUgKnJjb21wb3AgPSBnY2Nfaml0X2NvbnRleHRfbmV3 X2NvbXBhcmlzb24KKyAgICAoY3R4dCwgMCwgb3AsCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2 YWx1ZSAoZjEpLAorICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFsdWUgKGYyKSk7CisgIAorICBn Y2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxvY2ssIDAsIHJjb21wb3ApOworfQorCitz dGF0aWMgdm9pZAorbWFrZV9jb2RlX2Jpbm9wIChnY2Nfaml0X2NvbnRleHQgKmN0eHQsCisJCSBj b25zdCBjaGFyICpmbl9uYW1lLAorCQkgaW50IHR5cGUxLAorCQkgaW50IHR5cGUyLAorCQkgaW50 IHJldHVybl90eXBlLAorCQkgZW51bSBnY2Nfaml0X2JpbmFyeV9vcCBvcCkKK3sKKyAgZ2NjX2pp dF90eXBlICp0dDEgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgdHlwZTEpOworICBn Y2Nfaml0X3R5cGUgKnR0MiA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZShjdHh0LCB0eXBlMik7 CisgIGdjY19qaXRfdHlwZSAqdHIgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5cGUoY3R4dCwgcmV0 dXJuX3R5cGUpOworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9jb250ZXh0 X25ld19wYXJhbShjdHh0LCAwLCB0dDEsICJmMSIpOworICBnY2Nfaml0X3BhcmFtICpwYXJhbTIg PSBnY2Nfaml0X2NvbnRleHRfbmV3X3BhcmFtKGN0eHQsIDAsIHR0MiwgImYyIik7CisKKyAgZ2Nj X2ppdF9wYXJhbSAqcGFyYW1zW10gPSB7cGFyYW0xLCBwYXJhbTJ9OworICAKKyAgZ2NjX2ppdF9m dW5jdGlvbiAqZm9vID0gZ2NjX2ppdF9jb250ZXh0X25ld19mdW5jdGlvbiAoY3R4dCwgMCwKKyAg ICBHQ0NfSklUX0ZVTkNUSU9OX0VYUE9SVEVELAorICAgIHRyLCBmbl9uYW1lLCAyLCBwYXJhbXMs IDApOworICAKKyAgZ2NjX2ppdF9ibG9jayAqYmxvY2sgPSBnY2Nfaml0X2Z1bmN0aW9uX25ld19i bG9jayhmb28sICJzdGFydCIpOworCisgIGdjY19qaXRfbHZhbHVlICpmMSA9IGdjY19qaXRfcGFy YW1fYXNfbHZhbHVlKAorICAgIGdjY19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtKGZvbywgMCkpOwor ICBnY2Nfaml0X2x2YWx1ZSAqZjIgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSgKKyAgICBnY2Nf aml0X2Z1bmN0aW9uX2dldF9wYXJhbShmb28sIDEpKTsKKyAKKyAgLyogcmV0dXJuIGYxIG9wIGYy OyAqLworICBnY2Nfaml0X3J2YWx1ZSAqcmJpbm9wID0gZ2NjX2ppdF9jb250ZXh0X25ld19iaW5h cnlfb3AKKyAgICAoY3R4dCwgMCwgb3AsIHRyLAorICAgICBnY2Nfaml0X2x2YWx1ZV9hc19ydmFs dWUgKGYxKSwKKyAgICAgZ2NjX2ppdF9sdmFsdWVfYXNfcnZhbHVlIChmMikpOworICAKKyAgZ2Nj X2ppdF9ibG9ja19lbmRfd2l0aF9yZXR1cm4gKGJsb2NrLCAwLCByYmlub3ApOworfQorCitzdGF0 aWMgdm9pZAorbWFrZV9jb2RlX3Vub3AgKGdjY19qaXRfY29udGV4dCAqY3R4dCwKKwkgICAgY29u c3QgY2hhciAqZm5fbmFtZSwKKwkgICAgaW50IHR5cGUxLAorCSAgICBlbnVtIGdjY19qaXRfdW5h cnlfb3Agb3ApCit7CisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5 cGUoY3R4dCwgdHlwZTEpOworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0xID0gZ2NjX2ppdF9j b250ZXh0X25ld19wYXJhbShjdHh0LCAwLCB0dCwgImYxIik7CisKKyAgZ2NjX2ppdF9wYXJhbSAq cGFyYW1zW10gPSB7cGFyYW0xfTsKKyAgCisgIGdjY19qaXRfZnVuY3Rpb24gKmZvbyA9IGdjY19q aXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5DVElPTl9F WFBPUlRFRCwKKyAgICB0dCwgZm5fbmFtZSwgMSwgcGFyYW1zLCAwKTsKKyAgCisgIGdjY19qaXRf YmxvY2sgKmJsb2NrID0gZ2NjX2ppdF9mdW5jdGlvbl9uZXdfYmxvY2soZm9vLCAic3RhcnQiKTsK KworICBnY2Nfaml0X2x2YWx1ZSAqZjEgPSBnY2Nfaml0X3BhcmFtX2FzX2x2YWx1ZSgKKyAgICBn Y2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbShmb28sIDApKTsKKyAKKyAgLyogcmV0dXJuIG9wIGYx OyAqLworICBnY2Nfaml0X3J2YWx1ZSAqcmJpbm9wID0gZ2NjX2ppdF9jb250ZXh0X25ld191bmFy eV9vcAorICAgIChjdHh0LCAwLCBvcCwgdHQsCisgICAgIGdjY19qaXRfbHZhbHVlX2FzX3J2YWx1 ZSAoZjEpKTsKKyAgCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwg cmJpbm9wKTsKK30KKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwg dm9pZCAqdXNlcl9kYXRhKQoreworICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29u dGV4dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgbWFrZV9j b2RlX2Jpbm9wIChjdHh0LCAicGx1c19jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiLAorCQkg ICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhf RkxPQVQsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX0JJ TkFSWV9PUF9QTFVTKTsKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAibWludXNfY29tcGxleF9m bG9hdF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJ CSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExF WF9GTE9BVCwKKwkJICAgR0NDX0pJVF9CSU5BUllfT1BfTUlOVVMpOworICBtYWtlX2NvZGVfYmlu b3AgKGN0eHQsICJkaXZfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0IiwKKwkJICAgR0NDX0pJ VF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAor CQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9CSU5BUllfT1Bf RElWSURFKTsKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0LCAibXVsX2NvbXBsZXhfZmxvYXRfY29t cGxleF9mbG9hdCIsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICBHQ0Nf SklUX1RZUEVfQ09NUExFWF9GTE9BVCwKKwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQs CisJCSAgIEdDQ19KSVRfQklOQVJZX09QX01VTFQpOworCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4 dCwgImNtcGx4X2Zsb2F0X2Zsb2F0IiwKKwkJICAgR0NDX0pJVF9UWVBFX0ZMT0FULAorCQkgICBH Q0NfSklUX1RZUEVfRkxPQVQsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkg ICBHQ0NfSklUX0JJTkFSWV9PUF9DT01QTEVYKTsKKworICAvKiBVbnVuZGVmIHRvIHRlc3QgZGlm ZmVyZW50IGVycm9yIG1zZ3MgKi8KKyNpZiAwCisgIG1ha2VfY29kZV9iaW5vcCAoY3R4dCwgInNo b3VsZF9ub3Rfd29yayIsCisJCSAgIEdDQ19KSVRfVFlQRV9GTE9BVCwKKwkJICAgR0NDX0pJVF9U WVBFX0ZMT0FULAorCQkgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUsCisJCSAgIEdDQ19K SVRfQklOQVJZX09QX0NPTVBMRVgpOworI2VuZGlmCisKKyAgbWFrZV9jb2RlX2Jpbm9wIChjdHh0 LCAiY21wbHhfZG91YmxlX2RvdWJsZSIsCisJCSAgIEdDQ19KSVRfVFlQRV9ET1VCTEUsCisJCSAg IEdDQ19KSVRfVFlQRV9ET1VCTEUsCisJCSAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwK KwkJICAgR0NDX0pJVF9CSU5BUllfT1BfQ09NUExFWCk7CisKKyAgbWFrZV9jb2RlX2Jpbm9wIChj dHh0LCAiY21wbHhfbG9uZ19kb3VibGVfbG9uZ19kb3VibGUiLAorCQkgICBHQ0NfSklUX1RZUEVf TE9OR19ET1VCTEUsCisJCSAgIEdDQ19KSVRfVFlQRV9MT05HX0RPVUJMRSwKKwkJICAgR0NDX0pJ VF9UWVBFX0NPTVBMRVhfTE9OR19ET1VCTEUsCisJCSAgIEdDQ19KSVRfQklOQVJZX09QX0NPTVBM RVgpOworICAKKyAgbWFrZV9jb2RlX3Vub3AgKGN0eHQsICJtaW51c19jb21wbGV4X2Zsb2F0IiwK KwkJICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRkxPQVQsCisJCSAgIEdDQ19KSVRfVU5BUllfT1Bf TUlOVVMpOworCisgIG1ha2VfY29kZV9jb21wb3AgKGN0eHQsICJlcXVhbF9jb21wbGV4X2Zsb2F0 IiwKKwkJICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICAgR0NDX0pJVF9DT01Q QVJJU09OX0VRKTsKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4dCwgIm5lcXVhbF9jb21wbGV4X2Zs b2F0IiwKKwkJICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0ZMT0FULAorCQkgICAgR0NDX0pJVF9D T01QQVJJU09OX05FKTsKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4dCwgImVxdWFsX2NvbXBsZXhf ZG91YmxlIiwKKwkJICAgIEdDQ19KSVRfVFlQRV9DT01QTEVYX0RPVUJMRSwKKwkJICAgIEdDQ19K SVRfQ09NUEFSSVNPTl9FUSk7CisgIG1ha2VfY29kZV9jb21wb3AgKGN0eHQsICJuZXF1YWxfY29t cGxleF9kb3VibGUiLAorCQkgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfRE9VQkxFLAorCQkgICAg R0NDX0pJVF9DT01QQVJJU09OX05FKTsKKyAgbWFrZV9jb2RlX2NvbXBvcCAoY3R4dCwgImVxdWFs X2NvbXBsZXhfbG9uZ19kb3VibGUiLAorCQkgICAgR0NDX0pJVF9UWVBFX0NPTVBMRVhfTE9OR19E T1VCTEUsCisJCSAgICBHQ0NfSklUX0NPTVBBUklTT05fRVEpOworICBtYWtlX2NvZGVfY29tcG9w IChjdHh0LCAibmVxdWFsX2NvbXBsZXhfbG9uZ19kb3VibGUiLAorCQkgICAgR0NDX0pJVF9UWVBF X0NPTVBMRVhfTE9OR19ET1VCTEUsCisJCSAgICBHQ0NfSklUX0NPTVBBUklTT05fTkUpOworCisg IC8qIFVudW5kZWYgdG8gdGVzdCBkaWZmZXJlbnQgZXJyb3IgbXNncyAqLworI2lmIDAKKyAgbWFr ZV9jb2RlX2NvbXBvcCAoY3R4dCwgInF3ZWFzZHp4YyIsCisJCSAgICBHQ0NfSklUX1RZUEVfQ09N UExFWF9MT05HX0RPVUJMRSwKKwkJICAgIEdDQ19KSVRfQ09NUEFSSVNPTl9HRSk7CisjZW5kaWYK KworfQorCit0eXBlZGVmIF9Db21wbGV4IGZsb2F0ICgqY2ZfY2ZjZikoX0NvbXBsZXggZmxvYXQs IF9Db21wbGV4IGZsb2F0KTsKK3R5cGVkZWYgX0NvbXBsZXggZmxvYXQgKCpjZl9jZikoX0NvbXBs ZXggZmxvYXQpOwordHlwZWRlZiBfQm9vbCAoKmJfY2ZjZikoX0NvbXBsZXggZmxvYXQsIF9Db21w bGV4IGZsb2F0KTsKK3R5cGVkZWYgX0Jvb2wgKCpiX2NkY2QpKF9Db21wbGV4IGRvdWJsZSwgX0Nv bXBsZXggZG91YmxlKTsKK3R5cGVkZWYgX0Jvb2wgKCpiX2NsZGNsZCkoX0NvbXBsZXggbG9uZyBk b3VibGUsIF9Db21wbGV4IGxvbmcgZG91YmxlKTsKKwordm9pZAordmVyaWZ5X2NvZGUgKGdjY19q aXRfY29udGV4dCAqY3R4dCwgZ2NjX2ppdF9yZXN1bHQgKnJlc3VsdCkKK3sKKyAgKHZvaWQpIGN0 eHQ7CisgIENIRUNLX05PTl9OVUxMIChyZXN1bHQpOworCisgIHsvKiBUZXN0IGJpbmFyeSBvcGVy YXRvcnMgKi8KKyAgICB7CisgICAgICBjZl9jZmNmIGZuID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAicGx1c19jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiKTsKKyAgICAg IENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5m ICsgMi5maiwgMy5mICsgNC5maiksICgxLmYgKyAyLmZqKSArICgzLmYgKyA0LmZqKSk7CisgICAg fQorICAgIHsKKyAgICAgIGNmX2NmY2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJtaW51c19jb21wbGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgIENIRUNL X05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMi5m aiwgMy5mICsgNC5maiksICgxLmYgKyAyLmZqKSAtICgzLmYgKyA0LmZqKSk7CisgICAgfQorICAg IHsKKyAgICAgIGNmX2NmY2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJkaXZfY29tcGxleF9mbG9hdF9jb21wbGV4X2Zsb2F0Iik7CisgICAgICBDSEVDS19OT05fTlVM TCAoZm4pOworICAgICAgCisgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDIuZmosIDMuZiAr IDQuZmopLCAoMS5mICsgMi5maikvKDMuZiArIDQuZmopKTsKKyAgICB9CisgICAgeworICAgICAg Y2ZfY2ZjZiBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm11bF9jb21w bGV4X2Zsb2F0X2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7Cisg ICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMi5maiwgMy5mICsgNC5maiksICgx LmYgKyAyLmZqKSooMy5mICsgNC5maikpOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBm bG9hdCAoKmZuKShmbG9hdCwgZmxvYXQpID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVz dWx0LCAiY21wbHhfZmxvYXRfZmxvYXQiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7Cisg ICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMSwgMiksIDEuZiArIDIuZmkpOworICAgICAg LyogTm90ZSB0aGF0IHRoZSByZWFsIGFuc3dlciBpcyAwIG5vdCBuYW4gYXMgaXQgd291bGQgaGF2 ZSBiZWVuIGJ5CisJIG11bHRpcGx5aW5nIElORiAqIDEuZmkgKi8KKyAgICAgIENIRUNLX1ZBTFVF IChmbiAoMCwgSU5GSU5JVFkpLCBDTVBMWEYgKDAsIElORklOSVRZKSk7CisgICAgICBDSEVDS19W QUxVRSAoZm4gKDAsIC1JTkZJTklUWSksIENNUExYRiAoMCwgLUlORklOSVRZKSk7CisKKyAgICAg IENIRUNLX1ZBTFVFIChjcmVhbGYgKGZuICgwLCBOQU4pKSwgY3JlYWxmIChDTVBMWEYgKDAsIE5B TikpKTsKKyAgICAgIENIRUNLIChpc25hbmYgKGNpbWFnZiAoZm4gKDAsIE5BTikpKSk7CisgICAg ICAKKyAgICAgIC8qIC0wIG5lZWQgYmUgcHJlc2VydmVkICovCisgICAgICBfQ29tcGxleCBmbG9h dCBmID0gZm4gKDAsIC0wLik7CisgICAgICBDSEVDSyAoc2lnbmJpdCAoIGNpbWFnZiAoZikpICE9 IDApOworICAgICAgQ0hFQ0tfVkFMVUUgKGYsIENNUExYRiAoMCwgLTAuKSk7IAorICAgIH0KKyAg ICB7CisgICAgICBfQ29tcGxleCBkb3VibGUgKCpmbikoZG91YmxlLCBkb3VibGUpID0KKyAgICAg ICAgZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNtcGx4X2RvdWJsZV9kb3VibGUi KTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVF IChmbiAoMSwgMiksIDEuICsgMi5pKTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgSU5GSU5J VFkpLCBDTVBMWCAoMCwgSU5GSU5JVFkpKTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgLUlO RklOSVRZKSwgQ01QTFggKDAsIC1JTkZJTklUWSkpOworICAgICAgCisgICAgICBDSEVDS19WQUxV RSAoY3JlYWwgKGZuICgwLCBOQU4pKSwgY3JlYWwgKENNUExYICgwLCBOQU4pKSk7CisgICAgICBD SEVDSyAoaXNuYW4gKGNpbWFnIChmbiAoMCwgTkFOKSkpKTsgICAgICAKKyAgICAgIAorICAgICAg X0NvbXBsZXggZG91YmxlIGYgPSBmbiAoMCwgLTAuKTsKKyAgICAgIENIRUNLIChzaWduYml0IChj aW1hZyAoZikpICE9IDApOworICAgICAgQ0hFQ0tfVkFMVUUgKGYsIENNUExYRiAoMCwgLTAuKSk7 IAorICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBsb25nIGRvdWJsZSAoKmZuKShsb25nIGRv dWJsZSwgbG9uZyBkb3VibGUpID0KKwlnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAi Y21wbHhfbG9uZ19kb3VibGVfbG9uZ19kb3VibGUiKTsKKyAgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisgICAgICAKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMSwgMiksIDEuTCArIDIuTGkpOwor ICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLCBJTkZJTklUWSksIENNUExYTCAoMCwgSU5GSU5JVFkp KTsKKyAgICAgIENIRUNLX1ZBTFVFIChmbiAoMCwgLUlORklOSVRZKSwgQ01QTFhMICgwLCAtSU5G SU5JVFkpKTsKKworICAgICAgQ0hFQ0tfVkFMVUUgKGNyZWFsbCAoZm4gKDAsIE5BTikpLCBjcmVh bGwgKENNUExYTCAoMCwgTkFOKSkpOworICAgICAgQ0hFQ0sgKGlzbmFubCAoY2ltYWdsIChmbiAo MCwgTkFOKSkpKTsgICAgICAKKworICAgICAgX0NvbXBsZXggbG9uZyBkb3VibGUgZiA9IGZuICgw LCAtMC4pOworICAgICAgQ0hFQ0sgKHNpZ25iaXQgKGNpbWFnIChmKSkgIT0gMCk7CisgICAgICBD SEVDS19WQUxVRSAoZiwgQ01QTFhMICgwLCAtMC4pKTsgCisgICAgfQorICB9CisKKyAgey8qIFRl c3QgdW5hcnkgb3BzICovCisgICAgeworICAgICAgIGNmX2NmIGZuID0KKwlnY2Nfaml0X3Jlc3Vs dF9nZXRfY29kZSAocmVzdWx0LCAibWludXNfY29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKyAgICAgIAorICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZq KSwgLSgxLmYgKyAyLmZqKSk7CisgICAgfQorICB9CisgIHsvKiBUZXN0IGNvbXAgb3BzICovCisg ICAgeworICAgICAgIGJfY2ZjZiBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3Vs dCwgImVxdWFsX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor ICAgICAgIAorICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMi5maiwgMS5mICsgMi5maiAp LCAxKTsKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEuZiArIDMuZmosIDEuZiArIDIuZmogKSwg MCk7CisgICAgfQorICAgIHsKKyAgICAgICBiX2NmY2YgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJuZXF1YWxfY29tcGxleF9mbG9hdCIpOworICAgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisgICAgICAgCisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLmYgKyAyLmZq LCAxLmYgKyAyLmZqICksIDApOworICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS5mICsgMy5maiwg MS5mICsgMi5maiApLCAxKTsKKyAgICB9CisgICAgeworICAgICAgIGJfY2RjZCBmbiA9CisJZ2Nj X2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImVxdWFsX2NvbXBsZXhfZG91YmxlIik7Cisg ICAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKyAgICAgICAKKyAgICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuICsgMi5qLCAxLiArIDIuaiApLCAxKTsKKyAgICAgICBDSEVDS19WQUxVRSAoZm4gKDEu ICsgMy5qLCAxLiArIDIuaiApLCAwKTsKKyAgICB9CisgICAgeworICAgICAgIGJfY2RjZCBmbiA9 CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgIm5lcXVhbF9jb21wbGV4X2RvdWJs ZSIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisgICAgICAgCisgICAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLiArIDIuaiwgMS4gKyAyLmogKSwgMCk7CisgICAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLiArIDMuaiwgMS4gKyAyLmogKSwgMSk7CisgICAgfQorICAgIHsKKyAgICAgICBiX2Ns ZGNsZCBmbiA9CisJZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImVxdWFsX2NvbXBs ZXhfbG9uZ19kb3VibGUiKTsKKyAgICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworICAgICAgIAor ICAgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4gKyAyLmosIDEuICsgMi5qICksIDEpOworICAgICAg IENIRUNLX1ZBTFVFIChmbiAoMS4gKyAzLmosIDEuICsgMi5qICksIDApOworICAgIH0KKyAgICB7 CisgICAgICAgYl9jbGRjbGQgZm4gPQorCWdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJuZXF1YWxfY29tcGxleF9sb25nX2RvdWJsZSIpOworICAgICAgIENIRUNLX05PTl9OVUxMIChm bik7CisgICAgICAgCisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLiArIDIuaiwgMS4gKyAyLmog KSwgMCk7CisgICAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLiArIDMuaiwgMS4gKyAyLmogKSwgMSk7 CisgICAgfQorICB9Cit9CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWNv bXBsZXgtdHlwZXMuYyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5jNTU1MTMzMzY3YgotLS0g L2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtY29tcGxleC10eXBlcy5j CkBAIC0wLDAgKzEsNjc3IEBACisvKgorICBUZXN0IGNhc3QgZnJvbSBhbGwgY29tcGxleCB0eXBl cyB0byBhbGwgcHJpbWl0aXZlIHR5cGVzCisgIGV4Y2VwdCBib29sIGFuZCBhbW9uZ3N0IHRoZSBj b21wbGV4IHR5cGVzIHRoZW0gc2VsZi4KKworICBBbHNvIHRlc3Qgc29tZSBjYXN0IGZyb20gbm9u LWNvbXBsZXggdG8gY29tcGxleC4KKworICBBbHNvIGNhbGwgYSBtYXRobGliIGNvbXBsZXggZnVu Y3Rpb24gYW5kIGNyZWF0ZSBhCisgIGNvbXBsZXggZ2xvYmFsLgorICovCisKKyNpbmNsdWRlIDxt YXRoLmg+CisjaW5jbHVkZSA8Y29tcGxleC5oPgorCisjaW5jbHVkZSAibGliZ2Njaml0LmgiCisj aW5jbHVkZSAiaGFybmVzcy5oIgorCisvKgorICBNYWtlIGNvZGUgMTogKGNoZWNrIHRoYXQgZnVu Y3Rpb24gY2FsbHMgd29ya3MpCisgICBjb21wbGV4IGZsb2F0IGNzcXJ0Zihjb21wbGV4IGZsb2F0 IGYpOworCisgICBjb21wbGV4IGZsb2F0IGNvbXBsZXhfZmxvYXRfZm9vKGNvbXBsZXggZmxvYXQg ZikKKyAgIHsKKyAgICAgcmV0dXJuIGNzcXJ0ZiggZiAqIChjb21wbGV4IGZsb2F0KTIuKTsKKyAg IH0KKworICBNYWtlIGNvZGUgMjogKGNoZWNrIGNhc3RzKQorICAgaW50IGZsb2F0IGNvbXBsZXhf ZmxvYXRfdG9faW50IChjb21wbGV4IGZsb2F0IGYpCisgICB7CisgICAgIHJldHVybiBmOworICAg fQorICAgCisgIHdpdGggZGlmZmVyZW50IHR5cGVzIGFuZCBmdW5jdGlvbiBuYW1lcy4KKyAqLwor CisKK3N0YXRpYyB2b2lkCittYWtlX2NvZGUxKGdjY19qaXRfY29udGV4dCogY3R4dCwKKwkgICBj b25zdCBjaGFyICpmbl9uYW1lLAorCSAgIGNvbnN0IGNoYXIgKnNxcnRfZm4sCisJICAgaW50IHR5 cGUpCit7CisgIGdjY19qaXRfcnZhbHVlICpydmFsMSwgKnJ2YWwyOworICBnY2Nfaml0X2Jsb2Nr ICpibG9jazsKKworICBnY2Nfaml0X3R5cGUgKmN0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LCB0eXBlKTsKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nfaml0X2NvbnRleHRf bmV3X3BhcmFtIChjdHh0LCAwLCBjdCwgImYiKTsKKyAgZ2NjX2ppdF9mdW5jdGlvbiAqZnVuYyA9 IGdjY19qaXRfY29udGV4dF9uZXdfZnVuY3Rpb24gKGN0eHQsIDAsCisgICAgR0NDX0pJVF9GVU5D VElPTl9JTVBPUlRFRCwKKyAgICBjdCwgc3FydF9mbiwgMSwgJnBhcmFtLCAwKTsKKworICBwYXJh bSA9IGdjY19qaXRfY29udGV4dF9uZXdfcGFyYW0gKGN0eHQsIDAsIGN0LCAiZiIpOworICBnY2Nf aml0X2Z1bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAw LAorICAgIEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgY3QsIGZuX25hbWUsIDEsICZw YXJhbSwgMCk7CisgIAorICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28s ICJzdGFydCIpOworICAKKyAgcnZhbDEgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2JpbmFyeV9vcCAo Y3R4dCwgMCwgR0NDX0pJVF9CSU5BUllfT1BfTVVMVCwgY3QsCisgICAgZ2NjX2ppdF9wYXJhbV9h c19ydmFsdWUgKAorICAgICAgICBnY2Nfaml0X2Z1bmN0aW9uX2dldF9wYXJhbSAoZm9vLCAwKSks CisgICAgZ2NjX2ppdF9jb250ZXh0X25ld19ydmFsdWVfZnJvbV9kb3VibGUgKGN0eHQsIGN0LCAy LikpOworICAKKyAgcnZhbDIgPSBnY2Nfaml0X2NvbnRleHRfbmV3X2NhbGwgKGN0eHQsIDAsIGZ1 bmMsIDEsICZydmFsMSk7CisgIAorICBnY2Nfaml0X2Jsb2NrX2VuZF93aXRoX3JldHVybiAoYmxv Y2ssIDAsIHJ2YWwyKTsKK30KKworc3RhdGljIHZvaWQKK21ha2VfY29kZTIgKGdjY19qaXRfY29u dGV4dCAqY3R4dCwKKwkgICAgY29uc3QgY2hhciAqZm5fbmFtZSwKKwkgICAgaW50IGNvbXBsZXhf dHlwZSwKKwkgICAgaW50IHRhcmdldF90eXBlKQoreworICBnY2Nfaml0X2Jsb2NrICpibG9jazsK KyAgZ2NjX2ppdF90eXBlICp0dCA9IGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgdGFy Z2V0X3R5cGUpOworICBnY2Nfaml0X3R5cGUgKmN0ID0gZ2NjX2ppdF9jb250ZXh0X2dldF90eXBl IChjdHh0LCBjb21wbGV4X3R5cGUpOworICAKKyAgZ2NjX2ppdF9wYXJhbSAqcGFyYW0gPSBnY2Nf aml0X2NvbnRleHRfbmV3X3BhcmFtIChjdHh0LCAwLCBjdCwgImYiKTsKKworICBnY2Nfaml0X2Z1 bmN0aW9uICpmb28gPSBnY2Nfaml0X2NvbnRleHRfbmV3X2Z1bmN0aW9uIChjdHh0LCAwLAorICAg IEdDQ19KSVRfRlVOQ1RJT05fRVhQT1JURUQsCisgICAgdHQsIGZuX25hbWUsIDEsICZwYXJhbSwg MCk7CisgIAorICBibG9jayA9IGdjY19qaXRfZnVuY3Rpb25fbmV3X2Jsb2NrIChmb28sICJzdGFy dCIpOworCisgIGdjY19qaXRfYmxvY2tfZW5kX3dpdGhfcmV0dXJuIChibG9jaywgMCwKKyAgICBn Y2Nfaml0X2NvbnRleHRfbmV3X2Nhc3QgKGN0eHQsIDAsCisgICAgICBnY2Nfaml0X3BhcmFtX2Fz X3J2YWx1ZSAoCisgICAgICAgIGdjY19qaXRfZnVuY3Rpb25fZ2V0X3BhcmFtIChmb28sIDApKSwg dHQpKTsKK30KKwordm9pZAorY3JlYXRlX2NvZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9p ZCAqdXNlcl9kYXRhKQoreworICAodm9pZCkgdXNlcl9kYXRhOworCisgIGdjY19qaXRfY29udGV4 dF9zZXRfYm9vbF9lbmFibGVfY29tcGxleF90eXBlcyAoY3R4dCwgMSk7CisKKyAgZ2NjX2ppdF9j b250ZXh0X25ld19nbG9iYWwgKAorICAgIGN0eHQsIDAsIEdDQ19KSVRfR0xPQkFMX0VYUE9SVEVE LAorICAgIGdjY19qaXRfY29udGV4dF9nZXRfdHlwZSAoY3R4dCwgR0NDX0pJVF9UWVBFX0NPTVBM RVhfRE9VQkxFKSwKKyAgICAiYV9jb21wbGV4X2dsb2JhbF9kb3VibGUiKTsKKyAgCisgIG1ha2Vf Y29kZTEgKGN0eHQsICJjb21wbGV4X2Zsb2F0X2ZvbyIsICJjc3FydGYiLCBHQ0NfSklUX1RZUEVf Q09NUExFWF9GTE9BVCk7CisgIG1ha2VfY29kZTEgKGN0eHQsICJjb21wbGV4X2RvdWJsZV9mb28i LCAiY3NxcnQiLCBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUpOworICBtYWtlX2NvZGUxIChj dHh0LCAiY29tcGxleF9sb25nX2RvdWJsZV9mb28iLCAiY3NxcnRsIiwgR0NDX0pJVF9UWVBFX0NP TVBMRVhfTE9OR19ET1VCTEUpOworCisjZGVmaW5lIE1BS0VfQ09ERV8yKG5hbWUgLGNvbXBsZXhf dHlwZSwgdGFyZ2V0X3R5cGUpXAorICBtYWtlX2NvZGUyIChjdHh0LCAjbmFtZSwgR0NDX0pJVF9U WVBFXyAjIyBjb21wbGV4X3R5cGUsIEdDQ19KSVRfVFlQRV8gIyMgdGFyZ2V0X3R5cGUpOworCisj ZGVmaW5lIE1BS0VfQ09ERV8yX09VVEVSKG5hbWUsIHR5cGUpXAorICBNQUtFX0NPREVfMihuYW1l ICMjIF90b19jaGFyLCB0eXBlLCBDSEFSKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fbG9u Z19kb3VibGUsIHR5cGUsIExPTkdfRE9VQkxFKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9f ZG91YmxlLCB0eXBlLCBET1VCTEUpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19mbG9hdCwg dHlwZSwgRkxPQVQpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19zaWduZWRfY2hhciwgdHlw ZSwgU0lHTkVEX0NIQVIpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19zaG9ydCwgdHlwZSwg U0hPUlQpXAorICBNQUtFX0NPREVfMihuYW1lICMjIF90b19pbnQsIHR5cGUsIElOVClcCisgIE1B S0VfQ09ERV8yKG5hbWUgIyMgX3RvX2xvbmcsIHR5cGUsIExPTkcpXAorICBNQUtFX0NPREVfMihu YW1lICMjIF90b19sb25nX2xvbmcsIHR5cGUsIExPTkdfTE9ORylcCisgIE1BS0VfQ09ERV8yKG5h bWUgIyMgX3RvX3VfY2hhciwgdHlwZSwgVU5TSUdORURfQ0hBUilcCisgIE1BS0VfQ09ERV8yKG5h bWUgIyMgX3RvX3Vfc2hvcnQsIHR5cGUsIFVOU0lHTkVEX1NIT1JUKVwKKyAgTUFLRV9DT0RFXzIo bmFtZSAjIyBfdG9fdV9pbnQsIHR5cGUsIFVOU0lHTkVEX0lOVClcCisgIE1BS0VfQ09ERV8yKG5h bWUgIyMgX3RvX3VfbG9uZywgdHlwZSwgVU5TSUdORURfTE9ORylcCisgIE1BS0VfQ09ERV8yKG5h bWUgIyMgX3RvX3VfbG9uZ19sb25nLCB0eXBlLCBVTlNJR05FRF9MT05HX0xPTkcpXAorICBNQUtF X0NPREVfMihuYW1lICMjIF90b19jb21wbGV4X2Zsb2F0LCB0eXBlLCBDT01QTEVYX0ZMT0FUKVwK KyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fY29tcGxleF9kb3VibGUsIHR5cGUsIENPTVBMRVhf RE9VQkxFKVwKKyAgTUFLRV9DT0RFXzIobmFtZSAjIyBfdG9fY29tcGxleF9sb25nX2RvdWJsZSwg dHlwZSwgQ09NUExFWF9MT05HX0RPVUJMRSkKKworICAvKiBUZXN0IGFsbCB0aGVzZSBjYXN0cyAq LworICBNQUtFX0NPREVfMl9PVVRFUiAoY29tcGxleF9mbG9hdCwgQ09NUExFWF9GTE9BVCkKKyAg TUFLRV9DT0RFXzJfT1VURVIgKGNvbXBsZXhfZG91YmxlLCBDT01QTEVYX0RPVUJMRSkKKyAgTUFL RV9DT0RFXzJfT1VURVIgKGNvbXBsZXhfbG9uZ19kb3VibGUsIENPTVBMRVhfTE9OR19ET1VCTEUp ICAgIAorCisgIC8qIFRlc3Qgc29tZSBvZiB0aGVzZSBjYXN0cyAqLworICBNQUtFX0NPREVfMl9P VVRFUih1bnNpZ25lZF9sb25nLCBVTlNJR05FRF9MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUihm bG9hdCwgRkxPQVQpCisgIE1BS0VfQ09ERV8yX09VVEVSKGludCwgSU5UKQorCisgIC8qIFdyaXRp bmcgdGhlIHJlcHJvZHVjZXIgdGFrZXMgYW5ub3lpbmdseSBsb25nIHRpbWUgd2l0aCBhbGwgdGhl c2UKKyAgICAgZnVuY3Rpb25zIGJlbGxvdywgc28gI2lmIHRoZW0gb3V0LiAqLworI2lmIDAKKyAg TUFLRV9DT0RFXzJfT1VURVIobG9uZ19kb3VibGUsTE9OR19ET1VCTEUpCisgIE1BS0VfQ09ERV8y X09VVEVSKGRvdWJsZSwgRE9VQkxFKQorICBNQUtFX0NPREVfMl9PVVRFUihsb25nX2xvbmcsIExP TkdfTE9ORykKKyAgTUFLRV9DT0RFXzJfT1VURVIobG9uZywgTE9ORykKKyAgTUFLRV9DT0RFXzJf T1VURVIoc2hvcnQsIFVOU0lHTkVEX1NIT1JUKQorICBNQUtFX0NPREVfMl9PVVRFUihzaWduZWRf Y2hhciwgU0lHTkVEX0NIQVIpCisgIE1BS0VfQ09ERV8yX09VVEVSKHVuc2lnbmVkX2xvbmdfbG9u ZywgVU5TSUdORURfTE9OR19MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9sb25n LCBVTlNJR05FRF9MT05HKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9pbnQsIFVOU0lH TkVEX0lOVCkKKyAgTUFLRV9DT0RFXzJfT1VURVIodW5zaWduZWRfc2hvcnQsIFVOU0lHTkVEX1NI T1JUKQorICBNQUtFX0NPREVfMl9PVVRFUih1bnNpZ25lZF9jaGFyLCBVTlNJR05FRF9DSEFSKQor CisgIE1BS0VfQ09ERV8yX09VVEVSKGNoYXIsIENIQVIpCisgIC8qIE5vdGU6IE5vIGJvb2wgKi8K KyNlbmRpZgorICAgIAorI3VuZGVmIE1BS0VfQ09ERV8yCisjdW5kZWYgTUFLRV9DT0RFXzJfT1VU RVIKK30KKwordHlwZWRlZiBjb21wbGV4IGxvbmcgZG91YmxlICgqbGRfZm9vcCkoKTsKK3R5cGVk ZWYgY29tcGxleCBkb3VibGUgKCpkX2Zvb3ApKCk7Cit0eXBlZGVmIGNvbXBsZXggZmxvYXQgKCpm X2Zvb3ApKCk7CisKKyNkZWZpbmUgRk9PX3RvX0JBUihmb28sIGZvb190eHQpIFwKK3R5cGVkZWYg bG9uZyBsb25nICgqIGZvb190eHQgIyMgX3RvX2xsKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYg bG9uZyAoKiBmb29fdHh0ICMjIF90b19sKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgaW50ICgq IGZvb190eHQgIyMgX3RvX2kpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBzaG9ydCAoKiBmb29f dHh0ICMjIF90b19oKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgc2lnbmVkIGNoYXIgKCogZm9v X3R4dCAjIyBfdG9fc2MpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiBjaGFyICgqIGZvb190eHQg IyMgX3RvX2MpKF9Db21wbGV4IGZvbyk7XAordHlwZWRlZiB1bnNpZ25lZCBsb25nIGxvbmcgKCog Zm9vX3R4dCAjIyBfdG9fdWxsKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgdW5zaWduZWQgbG9u ZyAoKiBmb29fdHh0ICMjIF90b191bCkoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHVuc2lnbmVk IGludCAoKiBmb29fdHh0ICMjIF90b191aSkoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIHVuc2ln bmVkIHNob3J0ICgqIGZvb190eHQgIyMgX3RvX3VoKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYg dW5zaWduZWQgY2hhciAoKiBmb29fdHh0ICMjIF90b191YykoX0NvbXBsZXggZm9vKTtcCit0eXBl ZGVmIGRvdWJsZSAoKiBmb29fdHh0ICMjIF90b19kKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYg ZmxvYXQgKCogZm9vX3R4dCAjIyBfdG9fZikoX0NvbXBsZXggZm9vKTtcCit0eXBlZGVmIGxvbmcg ZG91YmxlICgqIGZvb190eHQgIyMgX3RvX2xkKShfQ29tcGxleCBmb28pO1wKK3R5cGVkZWYgX0Nv bXBsZXggZG91YmxlICgqIGZvb190eHQgIyMgX3RvX2NkKShfQ29tcGxleCBmb28pO1wKK3R5cGVk ZWYgX0NvbXBsZXggZmxvYXQgKCogZm9vX3R4dCAjIyBfdG9fY2YpKF9Db21wbGV4IGZvbyk7XAor dHlwZWRlZiBfQ29tcGxleCBsb25nIGRvdWJsZSAoKiBmb29fdHh0ICMjIF90b19jbGQpKF9Db21w bGV4IGZvbyk7XAordHlwZWRlZiBfQm9vbCAoKiBmb29fdHh0ICMjIF90b19iKShfQ29tcGxleCBm b28pOworIAorRk9PX3RvX0JBUiAoZmxvYXQsIGNmKQorRk9PX3RvX0JBUiAoZG91YmxlLCBjZCkK K0ZPT190b19CQVIgKGxvbmcgZG91YmxlLCBjbGQpCisgICAgIAorI3VuZGVmIEZPT190b19CQVIK KyAgCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9jb250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jl c3VsdCAqcmVzdWx0KQoreworICBDSEVDS19OT05fTlVMTCAocmVzdWx0KTsKKworICB7CisgICB7 LyogSnVzdCBjaGVjayB0aGF0IHdlIGNhbiBnZXQgdGhlIGdsb2JhbC4gKi8KKyAgICAgX0NvbXBs ZXggZG91YmxlICpkID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2dsb2JhbCAocmVzdWx0LCAiYV9jb21w bGV4X2dsb2JhbF9kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGQpOworICAgfQorICB9 CisgIHsvKiBDaGVjayB0aGUgc3F1YXJlIHJvb3R5IHRoaW5nLiAqLworICAgeyAKKyAgICAgZF9m b29wIGRfZm9vcCA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Rv dWJsZV9mb28iKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGRfZm9vcCk7CisKKyAgICAgY29tcGxl eCBkb3VibGUgcSA9IDIuICsgMi5pOworICAgICBjb21wbGV4IGRvdWJsZSByZWYgPSBjc3FydCAo cSAqIDIuKTsKKyAgICAgY29tcGxleCBkb3VibGUgYW5zID0gZF9mb29wIChxKTsKKyAgICAgQ0hF Q0tfVkFMVUUgKHJlZiwgYW5zKTsKKyAgIH0KKyAgIHsKKyAgICAgZl9mb29wIGZfZm9vcCA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X2ZvbyIpOworICAg ICBDSEVDS19OT05fTlVMTCAoZl9mb29wKTsKKworICAgICBjb21wbGV4IGZsb2F0IHEgPSAyLmYg KyAyLmZpOworICAgICBjb21wbGV4IGZsb2F0IHJlZiA9IGNzcXJ0ZiAocSAqIDIuZik7CisgICAg IGNvbXBsZXggZmxvYXQgYW5zID0gZl9mb29wIChxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKHJlZiwg YW5zKTsKKyAgIH0KKyAgIHsKKyAgICAgbGRfZm9vcCBsZF9mb29wID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfZm9vIik7CisgICAgIENIRUNL X05PTl9OVUxMIChsZF9mb29wKTsKKworICAgICBjb21wbGV4IGxvbmcgZG91YmxlIHEgPSAyLkwg KyAyLkxpOworICAgICBjb21wbGV4IGxvbmcgZG91YmxlIHJlZiA9IGNzcXJ0bCAocSAqIDIuTCk7 CisgICAgIGNvbXBsZXggbG9uZyBkb3VibGUgYW5zID0gbGRfZm9vcCAocSk7CisgICAgIENIRUNL X1ZBTFVFIChyZWYsIGFucyk7CisgICB9CisgIH0KKyAgLyogV2l0aCB0aGUgcG93ZXIgb2YgTS13 IEMteSAqLworCisgIHsvKiBDYXN0IGhpdGhlciBhbmQgdGhpdGhlciAqLworICAgeworICAgICBj Zl90b19sZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zs b2F0X3RvX2xvbmdfZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLjFmICsgMC4wZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBmICsg Mi4yZmkpLCAwLjBmKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fZCBmbiA9IGdjY19qaXRfcmVz dWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX2RvdWJsZSIpOworICAgICBD SEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZp KSwgMS4xZik7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xZiArIDAuMGZpKSwgMS4xZik7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wZiArIDIuMmZpKSwgMC4wZik7CisgICB9CisgICB7Cisg ICAgIGNmX3RvX2YgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxl eF9mbG9hdF90b19mbG9hdCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMS4xZik7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xZiArIDAuZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJm aSksIDAuZik7CisgICB9CisgICB7CisgICAgIGNmX3RvX2xsIGZuID0gZ2NjX2ppdF9yZXN1bHRf Z2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fbG9uZ19sb25nIik7CisgICAgIENI RUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkp LCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC5maSksIDEpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDAuZiArIDIuMmZpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNmX3RvX2wg Zm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b19s b25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjFmICsgMi4yZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC5maSks IDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuZiArIDIuMmZpKSwgMCk7CisgICB9CisgICB7 CisgICAgIGNmX3RvX2kgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29t cGxleF9mbG9hdF90b19pbnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAw KTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9faCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX3Nob3J0Iik7CisgICAgIENIRUNLX05PTl9OVUxM IChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMi4yZmkpLCAxKTsKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC5maSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDAuZiArIDIuMmZpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNmX3RvX3NjIGZuID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fc2lnbmVkX2NoYXIi KTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAg ICAgY2ZfdG9fYyBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4 X2Zsb2F0X3RvX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsK KyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWxsIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fdV9sb25nX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9O X05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOwor ICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVF IChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWwgZm4gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b191X2xvbmci KTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEu MWYgKyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAg ICAgY2ZfdG9fdWkgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxl eF9mbG9hdF90b191X2ludCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENI RUNLX1ZBTFVFIChmbiAoMS4xZiArIDIuMmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAo MS4xZiArIDAuZmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLmYgKyAyLjJmaSksIDAp OworICAgfQorICAgeworICAgICBjZl90b191aCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX3Vfc2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05V TEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEpOworICAg ICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2ZfdG9fdWMgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9mbG9hdF90b191X2NoYXIiKTsK KyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYg KyAyLjJmaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAwLmZpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMC5mICsgMi4yZmkpLCAwKTsKKyAgIH0KKyAgfQorICAKKyAg ey8qIGNvbXBsZXggZG91YmxlIHRvIC4uLiAqLworICAgeworICAgICBjZF90b19sZCBmbiA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19sb25nX2Rv dWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChm biAoMS4xICsgMi4yaSksIDEuMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSks IDEuMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuKTsKKyAgIH0KKyAg IHsKKyAgICAgY2RfdG9fZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJj b21wbGV4X2RvdWJsZV90b19kb3VibGUiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKwor ICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMWYgKyAyLjJmaSksIDEuMWYpOworICAgICBDSEVDS19W QUxVRSAoZm4gKDEuMWYgKyAwLjBmaSksIDEuMWYpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAu MGYgKyAyLjJmaSksIDAuMGYpOworICAgfQorICAgeworICAgICBjZF90b19mIGZuID0gZ2NjX2pp dF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX2Zsb2F0Iik7Cisg ICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsg Mi4yZmkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFmICsgMC4wZmkpLCAxLjFm KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBmICsgMi4yZmkpLCAwLjBmKTsKKyAgIH0KKyAg IHsKKyAgICAgY2RfdG9fbGwgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAi Y29tcGxleF9kb3VibGVfdG9fbG9uZ19sb25nIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7 CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZB TFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIu MmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19sb25nIik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMSk7Cisg ICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEpOworICAgICBDSEVDS19WQUxVRSAo Zm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9faSBmbiA9IGdjY19q aXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19pbnQiKTsKKyAg ICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIu MmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENI RUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b19o IGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX3Rv X3Nob3J0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSks IDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsK KyAgICAgY2RfdG9fc2MgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29t cGxleF9kb3VibGVfdG9fc2lnbmVkX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4y aSksIDApOworICAgfQorICAgeworICAgICBjZF90b19jIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0 X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9O X05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAg ICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChm biAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191bGwgZm4gPSBnY2Nf aml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fdV9sb25nX2xv bmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAg ICBjZF90b191bCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4 X2RvdWJsZV90b191X2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBD SEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgx LjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOwor ICAgfQorICAgeworICAgICBjZF90b191aSBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191X2ludCIpOworICAgICBDSEVDS19OT05fTlVMTCAo Zm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAg KyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNkX3RvX3VoIGZuID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfZG91YmxlX3RvX3Vfc2hvcnQiKTsKKyAgICAg Q0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkp LCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNL X1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgeworICAgICBjZF90b191YyBm biA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b191 X2NoYXIiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICB9CisK KyAgey8qIGNvbXBsZXggbG9uZyBkb3VibGUgdG8gLi4uICovCisgICB7CisgICAgIGNsZF90b19s ZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91 YmxlX3RvX2xvbmdfZG91YmxlIik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAg Q0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjFMKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgxLjFMICsgMC4wTGkpLCAxLjFMKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBMICsg Mi4yTGkpLCAwLik7CisgICB9CisgICB7CisgICAgIGNsZF90b19kIGZuID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fZG91YmxlIik7Cisg ICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsg Mi4yTGkpLCAxLjEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMUwgKyAwLjBMaSksIDEuMSk7 CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wTCArIDIuMkxpKSwgMC4pOworICAgfQorICAgewor ICAgICBjbGRfdG9fZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21w bGV4X2xvbmdfZG91YmxlX3RvX2Zsb2F0Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjFmKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgw LjBMICsgMi4yTGkpLCAwLik7CisgICB9ICAgIAorICAgeworICAgICBjbGRfdG9fbGwgZm4gPSBn Y2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2RvdWJsZV90b19s b25nX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxV RSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBp KSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAg eworICAgICBjbGRfdG9fbCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJj b21wbGV4X2xvbmdfZG91YmxlX3RvX2xvbmciKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsK KworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgxLjEgKyAwLjBpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4y aSksIDApOworICAgfQorICAgeworICAgICBjbGRfdG9faSBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX2ludCIpOworICAgICBDSEVD S19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEp OworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFM VUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b19oIGZuID0g Z2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9f c2hvcnQiKTsKKyAgICAgQ0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAo Zm4gKDEuMSArIDIuMmkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwg MSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDApOworICAgfQorICAgewor ICAgICBjbGRfdG9fc2MgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29t cGxleF9sb25nX2RvdWJsZV90b19zaWduZWRfY2hhciIpOworICAgICBDSEVDS19OT05fTlVMTCAo Zm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVD S19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAg KyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b19jIGZuID0gZ2NjX2ppdF9yZXN1 bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fY2hhciIpOworICAg ICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4y aSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hF Q0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b191 bGwgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRfY29kZSAocmVzdWx0LCAiY29tcGxleF9sb25nX2Rv dWJsZV90b191X2xvbmdfbG9uZyIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOworCisgICAg IENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxVRSAoZm4g KDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7 CisgICB9CisgICB7CisgICAgIGNsZF90b191bCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2Rl IChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX3VfbG9uZyIpOworICAgICBDSEVDS19O T05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOwor ICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUg KGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b191aSBmbiA9IGdj Y19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX3Vf aW50Iik7CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZu ICgxLjEgKyAyLjJpKSwgMSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEp OworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwKTsKKyAgIH0KKyAgIHsKKyAg ICAgY2xkX3RvX3VoIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBs ZXhfbG9uZ19kb3VibGVfdG9fdV9zaG9ydCIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4pOwor CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEpOworICAgICBDSEVDS19WQUxV RSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJp KSwgMCk7CisgICB9CisgICB7CisgICAgIGNsZF90b191YyBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX3VfY2hhciIpOworICAgICBD SEVDS19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSks IDEpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxKTsKKyAgICAgQ0hFQ0tf VkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMCk7CisgICB9CisgIH0KKworICB7IC8qIFRyeSBjYXN0 aW5nIGNvbXBsZXggdHlwZXMgdG8gY29tcGxleCB0eXBlcyAqLworICAgeworICAgICBjbGRfdG9f Y2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImNvbXBsZXhfbG9uZ19k b3VibGVfdG9fY29tcGxleF9sb25nX2RvdWJsZSIpOworICAgICBDSEVDS19OT05fTlVMTCAoZm4p OworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xTCArIDIuMkxpKSwgMS4xTCArIDIuMkxpKTsK KyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjFMICsgMC4wTGkpOworICAg ICBDSEVDS19WQUxVRSAoZm4gKDAuMEwgKyAyLjJMaSksIDAuMEwgKyAyLjJMaSk7CisgICB9Cisg ICB7CisgICAgIGNsZF90b19jZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQs ICJjb21wbGV4X2xvbmdfZG91YmxlX3RvX2NvbXBsZXhfZG91YmxlIik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMi4yTGkpLCAxLjEg KyAyLjJpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjEgKyAwLjBp KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjBMICsgMi4yTGkpLCAwLjAgKyAyLjJpKTsKKyAg IH0KKyAgIHsKKyAgICAgY2xkX3RvX2NmIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfbG9uZ19kb3VibGVfdG9fY29tcGxleF9mbG9hdCIpOworICAgICBDSEVD S19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xTCArIDIuMkxpKSwg MS4xZiArIDIuMmZpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjFMICsgMC4wTGkpLCAxLjFm ICsgMC4wZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMEwgKyAyLjJMaSksIDAuMGYgKyAy LjJmaSk7CisgICB9CisgICB7CisgICAgIGNkX3RvX2NsZCBmbiA9IGdjY19qaXRfcmVzdWx0X2dl dF9jb2RlIChyZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19jb21wbGV4X2xvbmdfZG91YmxlIik7 CisgICAgIENIRUNLX05PTl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEg KyAyLjJpKSwgMS4xICsgMi4yaSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSks IDEuMSArIDAuMGkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwLjAgKyAy LjJpKTsKKyAgIH0KKyAgIHsKKyAgICAgY2RfdG9fY2QgZm4gPSBnY2Nfaml0X3Jlc3VsdF9nZXRf Y29kZSAocmVzdWx0LCAiY29tcGxleF9kb3VibGVfdG9fY29tcGxleF9kb3VibGUiKTsKKyAgICAg Q0hFQ0tfTk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkp LCAxLjEgKyAyLjJpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMS4xICsg MC4waSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuMCArIDIuMmkpOwor ICAgfQorICAgeworICAgICBjZF90b19jZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJjb21wbGV4X2RvdWJsZV90b19jb21wbGV4X2Zsb2F0Iik7CisgICAgIENIRUNLX05P Tl9OVUxMIChmbik7CisKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAyLjJpKSwgMS4xZiAr IDIuMmZpKTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgxLjEgKyAwLjBpKSwgMS4xZiArIDAuMGZp KTsKKyAgICAgQ0hFQ0tfVkFMVUUgKGZuICgwLjAgKyAyLjJpKSwgMC4wZiArIDIuMmZpKTsKKyAg IH0KKyAgIHsKKyAgICAgY2ZfdG9fY2xkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUgKHJl c3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fY29tcGxleF9sb25nX2RvdWJsZSIpOworICAgICBDSEVD S19OT05fTlVMTCAoZm4pOworCisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMi4yaSksIDEu MWYgKyAyLjJmaSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMS4xICsgMC4waSksIDEuMWYgKyAw LjBmaSk7CisgICAgIENIRUNLX1ZBTFVFIChmbiAoMC4wICsgMi4yaSksIDAuMGYgKyAyLjJmaSk7 CisgICB9CisgICB7CisgICAgIGNmX3RvX2NkIGZuID0gZ2NjX2ppdF9yZXN1bHRfZ2V0X2NvZGUg KHJlc3VsdCwgImNvbXBsZXhfZmxvYXRfdG9fY29tcGxleF9kb3VibGUiKTsKKyAgICAgQ0hFQ0tf Tk9OX05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjFm ICsgMi4yZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjFmICsgMC4w ZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwLjBmICsgMi4yZmkpOwor ICAgfQorICAgeworICAgICBjZl90b19jZiBmbiA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChy ZXN1bHQsICJjb21wbGV4X2Zsb2F0X3RvX2NvbXBsZXhfZmxvYXQiKTsKKyAgICAgQ0hFQ0tfTk9O X05VTEwgKGZuKTsKKworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDIuMmkpLCAxLjFmICsg Mi4yZmkpOworICAgICBDSEVDS19WQUxVRSAoZm4gKDEuMSArIDAuMGkpLCAxLjFmICsgMC4wZmkp OworICAgICBDSEVDS19WQUxVRSAoZm4gKDAuMCArIDIuMmkpLCAwLjBmICsgMi4yZmkpOworICAg fQorICB9CisKKyAgey8qIFRlc3Qgc29tZSBvZiB0aGUgbm9uLWNvbXBsZXggdG8gbm9uLWNvbXBs ZXgvY29tcGxleCBjYXN0cyAgKi8KKyAgICB7CisgICAgICBfQ29tcGxleCBmbG9hdCgqZm4pKGZs b2F0KSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbG9hdF90b19jb21wbGV4 X2Zsb2F0Iik7CisgICAgICBDSEVDS19WQUxVRSAoIGZuKDMuZiksIDMuZik7CisgICAgfQorICAg IHsKKyAgICAgIF9Db21wbGV4IGZsb2F0KCpmbikoaW50KSA9IGdjY19qaXRfcmVzdWx0X2dldF9j b2RlIChyZXN1bHQsICJpbnRfdG9fY29tcGxleF9mbG9hdCIpOworICAgICAgQ0hFQ0tfVkFMVUUg KCBmbigtMyksIC0zLmYpOworICAgIH0KKyAgICB7CisgICAgICBfQ29tcGxleCBkb3VibGUoKmZu KSh1bnNpZ25lZCBsb25nKSA9IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJ1bnNp Z25lZF9sb25nX3RvX2NvbXBsZXhfZG91YmxlIik7CisgICAgICBDSEVDS19WQUxVRSAoIGZuKDMp LCAzLmYpOworICAgIH0KKyAgICB7CisgICAgICBkb3VibGUoKmZuKShpbnQpID0gZ2NjX2ppdF9y ZXN1bHRfZ2V0X2NvZGUgKHJlc3VsdCwgImludF90b19kb3VibGUiKTsKKyAgICAgIENIRUNLX1ZB TFVFICggZm4oMyksIDMuZik7CisgICAgfQorICAgIHsKKyAgICAgIGludCgqZm4pKGZsb2F0KSA9 IGdjY19qaXRfcmVzdWx0X2dldF9jb2RlIChyZXN1bHQsICJmbG9hdF90b19pbnQiKTsKKyAgICAg IENIRUNLX1ZBTFVFICggZm4oMy4pLCAzKTsKKyAgICB9CisgIH0gCit9CmRpZmYgLS1naXQgYS9n Y2MvdGVzdHN1aXRlL2ppdC5kZy90ZXN0LWVycm9yLWNvbXBsZXgtbm9lbmFibGUuYyBiL2djYy90 ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY29tcGxleC1ub2VuYWJsZS5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYTdiYTEzMWYyOAotLS0gL2Rldi9udWxsCisr KyBiL2djYy90ZXN0c3VpdGUvaml0LmRnL3Rlc3QtZXJyb3ItY29tcGxleC1ub2VuYWJsZS5jCkBA IC0wLDAgKzEsMzEgQEAKKy8qCisgIFRlc3QgdGhhdCB3ZSBjYW4ndCBnZXQgYSBjb21wbGV4IHR5 cGUgd2l0aG91dCBlbmFibGluZyB0aGVtIGZpcnN0CisgIHdpdGgKKyAgICBnY2Nfaml0X2NvbnRl eHRfc2V0X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMgKGN0eHQsIDEpOworKi8KKworI2luY2x1 ZGUgImxpYmdjY2ppdC5oIgorI2luY2x1ZGUgImhhcm5lc3MuaCIKKwordm9pZAorY3JlYXRlX2Nv ZGUgKGdjY19qaXRfY29udGV4dCAqY3R4dCwgdm9pZCAqdXNlcl9kYXRhKQoreworICAodm9pZCkg dXNlcl9kYXRhOworCisgIGdjY19qaXRfdHlwZSAqdHQgPSBnY2Nfaml0X2NvbnRleHRfZ2V0X3R5 cGUgKGN0eHQsCisJCQkJCSAgICAgICBHQ0NfSklUX1RZUEVfQ09NUExFWF9ET1VCTEUpOworICBD SEVDS19WQUxVRSAodHQsIE5VTEwpOworfQorCit2b2lkCit2ZXJpZnlfY29kZSAoZ2NjX2ppdF9j b250ZXh0ICpjdHh0LCBnY2Nfaml0X3Jlc3VsdCAqcmVzdWx0KQoreworICAvKiBWZXJpZnkgdGhh dCB0aGUgZGlhZ25vc3RpYyBsZWQgdG8gdGhlIGNvbnRleHQgZmFpbGluZy4uLiAqLworICBDSEVD S19WQUxVRSAocmVzdWx0LCBOVUxMKTsKKworICAvKiAuLi5hbmQgdGhhdCB0aGUgbWVzc2FnZSB3 YXMgY2FwdHVyZWQgYnkgdGhlIEFQSS4gICovCisgIENIRUNLX1NUUklOR19WQUxVRSAoZ2NjX2pp dF9jb250ZXh0X2dldF9maXJzdF9lcnJvciAoY3R4dCksCisJCSAgICAgICJnY2Nfaml0X2NvbnRl eHRfZ2V0X3R5cGU6IGNvbXBsZXggdHlwZXMgYXJlIG9ubHkgIgorCQkgICAgICAiYXZhaWxhYmxl IGFmdGVyIGVuYWJsaW5nIHRoZW0gd2l0aCAiCisJCSAgICAgICJnY2Nfaml0X2NvbnRleHRfc2V0 X2Jvb2xfZW5hYmxlX2NvbXBsZXhfdHlwZXMoKSIpOworfQotLSAKMi4zMC4yCgo= --_002_b85029f7b67f4b13b6a2144dac5c7e58kthse_--