Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uaWpE-006PWf-C0 for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jul 2025 09:47:20 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1uaWpC-008Ien-6P for pgsql-hackers@arkaria.postgresql.org; Sat, 12 Jul 2025 09:47:18 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1uaCRi-004RB1-Hw for pgsql-hackers@lists.postgresql.org; Fri, 11 Jul 2025 12:01:43 +0000 Received: from mx0a-001b2d01.pphosted.com ([148.163.156.1]) by magus.postgresql.org with esmtps (TLS1.2) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1uaCRg-00719C-1T for pgsql-hackers@lists.postgresql.org; Fri, 11 Jul 2025 12:01:42 +0000 Received: from pps.filterd (m0356517.ppops.net [127.0.0.1]) by mx0a-001b2d01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 56BAw4p2024822 for ; Fri, 11 Jul 2025 12:01:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ibm.com; h=cc :content-type:date:from:in-reply-to:message-id:mime-version :references:reply-to:subject:to; s=pp1; bh=xkmoDPXsD6BQKjH6d6ZTf 4JQ+QvNH6jMgi77Zm4VWiw=; b=SVM5OAtos4ORyqSTQduRIbNuOp2d8y+18bMSB ns0uvD5j4cMu0OZup0qEbgZjej0kV0fSbyNkkgCK3kjHnqqLEyQEyzoe9HTD1ypZ w1x1Qt37zfUcQ5+J7u4ujQDRyRndfhU3h2QusqOQRV0ZijxQZLKbrFrKZIgi35O9 GnYWzlwWotSHLIbtUBb+aeA6n974hZIfO3QeiKRspUE/rRZPQqkbaUvM6R8TRwGI 1xLjVEcGO5L4xyJAvrnVONPfp47COIzdjB82dvRpS7t9ycfwviCKXyYKl7UdCzVe j6OJaRRHNNS18H7Gh+is7pVVNJaP6eVVZBepqGyUoBL7GBTYQ== Received: from pps.reinject (localhost [127.0.0.1]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47pussjnxu-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT) for ; Fri, 11 Jul 2025 12:01:36 +0000 (GMT) Received: from m0356517.ppops.net (m0356517.ppops.net [127.0.0.1]) by pps.reinject (8.18.0.8/8.18.0.8) with ESMTP id 56BBxGRj025647 for ; Fri, 11 Jul 2025 12:01:35 GMT Received: from ppma11.dal12v.mail.ibm.com (db.9e.1632.ip4.static.sl-reverse.com [50.22.158.219]) by mx0a-001b2d01.pphosted.com (PPS) with ESMTPS id 47pussjnxp-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 12:01:35 +0000 (GMT) Received: from pps.filterd (ppma11.dal12v.mail.ibm.com [127.0.0.1]) by ppma11.dal12v.mail.ibm.com (8.18.1.2/8.18.1.2) with ESMTP id 56B8ED9q024277; Fri, 11 Jul 2025 12:01:34 GMT Received: from smtprelay04.fra02v.mail.ibm.com ([9.218.2.228]) by ppma11.dal12v.mail.ibm.com (PPS) with ESMTPS id 47qh32t97t-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Fri, 11 Jul 2025 12:01:34 +0000 Received: from smtpav06.fra02v.mail.ibm.com (smtpav06.fra02v.mail.ibm.com [10.20.54.105]) by smtprelay04.fra02v.mail.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 56BC1UKh34669220 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Fri, 11 Jul 2025 12:01:30 GMT Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 58D7320049; Fri, 11 Jul 2025 12:01:30 +0000 (GMT) Received: from smtpav06.fra02v.mail.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id E781420040; Fri, 11 Jul 2025 12:01:29 +0000 (GMT) Received: from [9.111.76.239] (unknown [9.111.76.239]) by smtpav06.fra02v.mail.ibm.com (Postfix) with ESMTP; Fri, 11 Jul 2025 12:01:29 +0000 (GMT) Message-ID: Subject: Re: [V2] Adding new CRC32C implementation for IBM S390X From: Eduard Stefes Reply-To: eddy@linux.ibm.com To: John Naylor Cc: "pgsql-hackers@lists.postgresql.org" , "brueckner@linux.ibm.com" , "iii@linux.ibm.com" , eddy@linux.ibm.com Date: Fri, 11 Jul 2025 14:01:29 +0200 In-Reply-To: References: <918d9941377f6e83fbfebe96ba496ccaefa3803f.camel@ibm.com> <421931ea921dd94340808089fc1dfcf967c4c163.camel@ibm.com> <2078ad39a456088fd4a5ea98084e7d72bdf8ff2b.camel@ibm.com> Organization: IBM Content-Type: multipart/mixed; boundary="=-RmcUC5Q/NNcXYel5UGTV" User-Agent: Evolution 3.56.2 (3.56.2-1.fc42) MIME-Version: 1.0 X-TM-AS-GCONF: 00 X-Authority-Analysis: v=2.4 cv=Vaj3PEp9 c=1 sm=1 tr=0 ts=6870fd20 cx=c_pps a=aDMHemPKRhS1OARIsFnwRA==:117 a=aDMHemPKRhS1OARIsFnwRA==:17 a=Wb1JkmetP80A:10 a=VnNF1IyMAAAA:8 a=9TIJxFwopoV6d465GgUA:9 a=QEXdDO2ut3YA:10 a=Z1O2hPhw_FdoLOl_amYA:9 a=B2y7HmGcmWMA:10 X-Proofpoint-GUID: pgax2UC2idc-xSOecaC7yL7NbaGQpKBY X-Proofpoint-ORIG-GUID: 100cV7riWmCsjjo6PzO7fQS9gC-c-neE X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwNzExMDA4MyBTYWx0ZWRfXzJ/qMYYryIm8 kkBak1DLPeO2Ft0rd8ZjnrKZEM9UAkMV42WVw9sa9l5rkRdCFhLmICXbNfp3XVsl/ravdUdDZn9 gCvh8NtstviFuevfomtvSIJPmVGjhfXsBrw6F/kuIJimGVT4/aUJ5k6giFxQglWNmW1abWLUuF3 8wRQMwirTcjmeJ7UALKQv8qSfyHT0pqLMBLwRWMEPOfF/og8sIoNK+Utn4JspdVGdh/QTRvocOG 11AKQLweprCAbqvw6DOYlnlWL/yK+qBtd7WfsAVdLpLNtpbhauWQcnHnD28WUdrrP6D1RtZIXdW aUfkRgQlexeVWgFbL9L0qxd3Heged/KCQjVkfNvloVPlGo/1qnlCgQLcDRVLw4/+RYla245nRGK U9BoJuXCh7+fjse4cwXxR++02CcqbtXMQBnK1cKuT12DnoG1ZbLFqGnlJPBv5se9CCFIQdB+ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1099,Hydra:6.1.7,FMLib:17.12.80.40 definitions=2025-07-11_03,2025-07-09_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 mlxlogscore=999 suspectscore=0 clxscore=1011 adultscore=0 lowpriorityscore=0 impostorscore=0 malwarescore=0 bulkscore=0 mlxscore=0 spamscore=0 phishscore=0 classifier=spam authscore=0 authtc=n/a authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2505280000 definitions=main-2507110083 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-RmcUC5Q/NNcXYel5UGTV Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hi, On Wed, 2025-07-09 at 13:53 +0700, John Naylor wrote: > v3 still has direct-call and runtime-check paths. Let's keep only > USE_S390X_CRC32C_WITH_RUNTIME_CHECK and discard the direct call > configure checks. Once that's done I'll take a closer look and test > as > well. The rest should be small details. done :) here is V5 with only runtime-check. --=20 Eduard Stefes IBM --=-RmcUC5Q/NNcXYel5UGTV Content-Disposition: attachment; filename*0=v4-0001-Added-crc32c-extension-for-ibm-s390x-based-on-VX-.pat; filename*1=ch Content-Type: text/x-patch; name="v4-0001-Added-crc32c-extension-for-ibm-s390x-based-on-VX-.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA4YmJiMjExZTUxMTQ3OGYwNzY4YTlkNzVjMDNjZmFiNDE2NzJjMzUzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiAiRWRkeSAoRWR1YXJkKSBTdGVmZXMiIDxlZHVhcmQuc3RlZmVz QGlibS5jb20+CkRhdGU6IFR1ZSwgMTUgQXByIDIwMjUgMTA6MjI6MDUgKzAyMDAKU3ViamVjdDog W1BBVENIIHY0XSBBZGRlZCBjcmMzMmMgZXh0ZW5zaW9uIGZvciBpYm0gczM5MHggYmFzZWQgb24g VlgKIGludHJpbnNpY3MKCi0tLQogY29uZmlnL2MtY29tcGlsZXIubTQgICAgICAgICB8ICAzOSAr KysrKwogY29uZmlndXJlICAgICAgICAgICAgICAgICAgICB8IDEyMCArKysrKysrKysrKysrLQog Y29uZmlndXJlLmFjICAgICAgICAgICAgICAgICB8ICAzNyArKysrLQogbWVzb24uYnVpbGQgICAg ICAgICAgICAgICAgICB8ICAyOSArKysrCiBzcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbiAgIHwg ICAzICsKIHNyYy9pbmNsdWRlL3BvcnQvcGdfY3JjMzJjLmggfCAgMTMgKysKIHNyYy9wb3J0L01h a2VmaWxlICAgICAgICAgICAgfCAgIDUgKy0KIHNyYy9wb3J0L21lc29uLmJ1aWxkICAgICAgICAg fCAgIDQgKwogc3JjL3BvcnQvcGdfY3JjMzJjX3MzOTB4LmMgICB8IDI5NSArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA1MzMgaW5zZXJ0aW9ucygr KSwgMTIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL3BvcnQvcGdfY3JjMzJj X3MzOTB4LmMKCmRpZmYgLS1naXQgYS9jb25maWcvYy1jb21waWxlci5tNCBiL2NvbmZpZy9jLWNv bXBpbGVyLm00CmluZGV4IDVmM2UxZDFmYWY5Li43M2ZiYmY2MzYyZSAxMDA2NDQKLS0tIGEvY29u ZmlnL2MtY29tcGlsZXIubTQKKysrIGIvY29uZmlnL2MtY29tcGlsZXIubTQKQEAgLTY4NCw2ICs2 ODQsNDUgQEAgZmkKIHVuZGVmaW5lKFtBY19jYWNoZXZhcl0pZG5sCiBdKSMgUEdBQ19MT09OR0FS Q0hfQ1JDMzJDX0lOVFJJTlNJQ1MKIAorIyBQR0FDX1MzOTBYX1ZFQ1RPUl9WWF9JTlRSSU5TSUNT CisjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisjIENoZWNrIGlmIHRoZSBjb21w aWxlciBzdXBwb3J0cyB0aGUgUzM5MFggdmVjdG9yIGludHJpbnNpY3MsIHVzaW5nCisjIF9fYXR0 cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpLCB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOAorIworIyBU aGVzZSBpbnN0cnVjdGlvbnMgd2hlcmUgaW50cm9kdWNlZCB3aXRoIC1tYXJjaD16MTMuCisjIHRo ZSB0ZXN0IGFyZzEgaXMgbWFuZGF0b3J5IGFuZCBzaG91bGQgYmUgZWl0aGVyOgorIyAnLWZ6dmVj dG9yJyBmb3IgY2xhbmcKKyMgJy1temFyY2gnIGZvciBnY2MKKyMKKyMgY29tcGlsYXRpb24gbWF5 IGZhaWwgd2l0aCBHQ0MgMTQuMC4wIDw9IGdjY192ZXJzaW9uIDwgMTQuMy4wIGFuZCBDbGFuZyAx OC4wLjAgPD0gY2xhbmdfdmVyc2lvbiA8IDE5LjEuMgorIworIyBJZiB0aGUgaW50cmluc2ljcyBh cmUgc3VwcG9ydGVkLCBzZXRzCisjIHBnYWNfczM5MHhfdmVjdG9yX2ludHJpbnNpY3MsIGFuZCBD RkxBR1NfQ1JDLgorQUNfREVGVU4oW1BHQUNfUzM5MFhfVkVDVE9SX1ZYX0lOVFJJTlNJQ1NdLAor W2RlZmluZShbQWNfY2FjaGV2YXJdLCBbQVNfVFJfU0goW3BnYWNfY3ZfczM5MHhfdmVjdG9yX2lu dHJpbnNpY3NfJDFfJDJdKV0pZG5sCitBQ19DQUNIRV9DSEVDSyhbZm9yIF9fYXR0cmlidXRlX18o KHZlY3Rvcl9zaXplKDE2KSkpLCB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOCB3aXRoIENGTEFHUz0kMSAk Ml0sIFtBY19jYWNoZXZhcl0sCitbcGdhY19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9IiRw Z2FjX3NhdmVfQ0ZMQUdTICQxICQyIgorQUNfTElOS19JRkVMU0UoW0FDX0xBTkdfUFJPR1JBTShb I2luY2x1ZGUgPHZlY2ludHJpbi5oPgorICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBhIF9fYXR0cmli dXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpID0geyAwIH07CisgICAgdW5zaWduZWQgbG9uZyBsb25n IGIgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSkgPSB7IDAgfTsKKyAgICB1bnNpZ25l ZCBjaGFyIGMgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSkgPSB7IDAgfTsKKyAgICBz dGF0aWMgdm9pZCB2ZWNpbnRfZ2Ztc3VtX2FjY3VtX3Rlc3Qodm9pZCl7CisgICAgICAgIGMgPSB2 ZWNfZ2Ztc3VtX2FjY3VtXzEyOChhLCBiLCBjKTsKKyAgICB9XSwKKyAgWworICAgdmVjaW50X2dm bXN1bV9hY2N1bV90ZXN0KCk7CisgICByZXR1cm4gMDtdKV0sCisgIFtBY19jYWNoZXZhcj15ZXNd LAorICBbQWNfY2FjaGV2YXI9bm9dKQorQ0ZMQUdTPSIkcGdhY19zYXZlX0NGTEFHUyJdKQoraWYg dGVzdCB4IiRBY19jYWNoZXZhciIgPSB4InllcyI7IHRoZW4KKyAgQ0ZMQUdTX0NSQz0iJDEgJDIi CisgIEFTX1RSX1NIKFtwZ2FjX3MzOTB4X3ZlY3Rvcl9pbnRyaW5zaWNzXyQxXyQyXSk9eWVzCitm aQordW5kZWZpbmUoW0FjX2NhY2hldmFyXSlkbmwKK10pIyBQR0FDX1MzOTBYX1ZFQ1RPUl9WWF9J TlRSSU5TSUNTCisKICMgUEdBQ19YU0FWRV9JTlRSSU5TSUNTCiAjIC0tLS0tLS0tLS0tLS0tLS0t LS0tLQogIyBDaGVjayBpZiB0aGUgY29tcGlsZXIgc3VwcG9ydHMgdGhlIFhTQVZFIGluc3RydWN0 aW9ucyB1c2luZyB0aGUgX3hnZXRidgpkaWZmIC0tZ2l0IGEvY29uZmlndXJlIGIvY29uZmlndXJl CmluZGV4IDRmMTUzNDdjYzk1Li40ZGFkZGI5N2Q4OCAxMDA3NTUKLS0tIGEvY29uZmlndXJlCisr KyBiL2NvbmZpZ3VyZQpAQCAtMTgwODgsNiArMTgwODgsMTAxIEBAIGlmIHRlc3QgeCIkcGdhY19j dl9sb29uZ2FyY2hfY3JjMzJjX2ludHJpbnNpY3MiID0geCJ5ZXMiOyB0aGVuCiBmaQogCiAKKyMg Q2hlY2sgZm9yIFMzOTBYIFZlY3RvciBpbnRyaW5zaWNzIHRvIGRvIENSQyBjYWxjdWxhdGlvbnMu CisjCisjIEZpcnN0IGNoZWNrIGZvciB0aGUgaG9zdCBjcHUKK2lmIHRlc3QgeCIkaG9zdF9jcHUi ID0geCJzMzkweCIgJiYgdGVzdCB4IiRhY19jdl9mdW5jX2dldGF1eHZhbCIgPSB4InllcyI7IHRo ZW4KKyAgIyBXZSBuZWVkIGRpZmZlcmVudCBDRkxBR1MgcGVyIGNvbXBpbGVyOgorICAjIC1menZl Y3RvciBmb3IgY2xhbmcKKyAgIyAtbXphcmNoIGZvciBnY2MKKyAgeyAkYXNfZWNobyAiJGFzX21l OiR7YXNfbGluZW5vLSRMSU5FTk99OiBjaGVja2luZyBmb3IgX19hdHRyaWJ1dGVfXygodmVjdG9y X3NpemUoMTYpKSksIHZlY19nZm1zdW1fYWNjdW1fMTI4IHdpdGggQ0ZMQUdTPS1menZlY3RvciAt bWFyY2g9ejEzIiA+JjUKKyRhc19lY2hvX24gImNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2 ZWN0b3Jfc2l6ZSgxNikpKSwgdmVjX2dmbXN1bV9hY2N1bV8xMjggd2l0aCBDRkxBR1M9LWZ6dmVj dG9yIC1tYXJjaD16MTMuLi4gIiA+JjY7IH0KK2lmICR7cGdhY19jdl9zMzkweF92ZWN0b3JfaW50 cmluc2ljc19fZnp2ZWN0b3JfX21hcmNoX3oxMys6fSBmYWxzZTsgdGhlbiA6CisgICRhc19lY2hv X24gIihjYWNoZWQpICIgPiY2CitlbHNlCisgIHBnYWNfc2F2ZV9DRkxBR1M9JENGTEFHUworQ0ZM QUdTPSIkcGdhY19zYXZlX0NGTEFHUyAtZnp2ZWN0b3IgLW1hcmNoPXoxMyIKK2NhdCBjb25mZGVm cy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQKKy8qIGVuZCBjb25mZGVmcy5oLiAgKi8K KyNpbmNsdWRlIDx2ZWNpbnRyaW4uaD4KKyAgICB1bnNpZ25lZCBsb25nIGxvbmcgYSBfX2F0dHJp YnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKSA9IHsgMCB9OworICAgIHVuc2lnbmVkIGxvbmcgbG9u ZyBiIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpID0geyAwIH07CisgICAgdW5zaWdu ZWQgY2hhciBjIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpID0geyAwIH07CisgICAg c3RhdGljIHZvaWQgdmVjaW50X2dmbXN1bV9hY2N1bV90ZXN0KHZvaWQpeworICAgICAgICBjID0g dmVjX2dmbXN1bV9hY2N1bV8xMjgoYSwgYiwgYyk7CisgICAgfQoraW50CittYWluICgpCit7CisK KyAgIHZlY2ludF9nZm1zdW1fYWNjdW1fdGVzdCgpOworICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0 dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoK KyAgcGdhY19jdl9zMzkweF92ZWN0b3JfaW50cmluc2ljc19fZnp2ZWN0b3JfX21hcmNoX3oxMz15 ZXMKK2Vsc2UKKyAgcGdhY19jdl9zMzkweF92ZWN0b3JfaW50cmluc2ljc19fZnp2ZWN0b3JfX21h cmNoX3oxMz1ubworZmkKK3JtIC1mIGNvcmUgY29uZnRlc3QuZXJyIGNvbmZ0ZXN0LiRhY19vYmpl eHQgXAorICAgIGNvbmZ0ZXN0JGFjX2V4ZWV4dCBjb25mdGVzdC4kYWNfZXh0CitDRkxBR1M9IiRw Z2FjX3NhdmVfQ0ZMQUdTIgorZmkKK3sgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElO RU5PfTogcmVzdWx0OiAkcGdhY19jdl9zMzkweF92ZWN0b3JfaW50cmluc2ljc19fZnp2ZWN0b3Jf X21hcmNoX3oxMyIgPiY1CiskYXNfZWNobyAiJHBnYWNfY3ZfczM5MHhfdmVjdG9yX2ludHJpbnNp Y3NfX2Z6dmVjdG9yX19tYXJjaF96MTMiID4mNjsgfQoraWYgdGVzdCB4IiRwZ2FjX2N2X3MzOTB4 X3ZlY3Rvcl9pbnRyaW5zaWNzX19menZlY3Rvcl9fbWFyY2hfejEzIiA9IHgieWVzIjsgdGhlbgor ICBDRkxBR1NfQ1JDPSItZnp2ZWN0b3IgLW1hcmNoPXoxMyIKKyAgcGdhY19zMzkweF92ZWN0b3Jf aW50cmluc2ljc19fZnp2ZWN0b3JfX21hcmNoX3oxMz15ZXMKK2ZpCisKKyAgaWYgdGVzdCB4IiRw Z2FjX3MzOTB4X3ZlY3Rvcl9pbnRyaW5zaWNzX19menZlY3Rvcl9fbWFyY2hfejEzIiAhPSB4Inll cyI7IHRoZW4KKyAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19saW5lbm8tJExJTkVOT306IGNo ZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKSwgdmVjX2dmbXN1bV9h Y2N1bV8xMjggd2l0aCBDRkxBR1M9LW16YXJjaCAtbWFyY2g9ejEzIiA+JjUKKyRhc19lY2hvX24g ImNoZWNraW5nIGZvciBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKSwgdmVjX2dmbXN1 bV9hY2N1bV8xMjggd2l0aCBDRkxBR1M9LW16YXJjaCAtbWFyY2g9ejEzLi4uICIgPiY2OyB9Citp ZiAke3BnYWNfY3ZfczM5MHhfdmVjdG9yX2ludHJpbnNpY3NfX216YXJjaF9fbWFyY2hfejEzKzp9 IGZhbHNlOyB0aGVuIDoKKyAgJGFzX2VjaG9fbiAiKGNhY2hlZCkgIiA+JjYKK2Vsc2UKKyAgcGdh Y19zYXZlX0NGTEFHUz0kQ0ZMQUdTCitDRkxBR1M9IiRwZ2FjX3NhdmVfQ0ZMQUdTIC1temFyY2gg LW1hcmNoPXoxMyIKK2NhdCBjb25mZGVmcy5oIC0gPDxfQUNFT0YgPmNvbmZ0ZXN0LiRhY19leHQK Ky8qIGVuZCBjb25mZGVmcy5oLiAgKi8KKyNpbmNsdWRlIDx2ZWNpbnRyaW4uaD4KKyAgICB1bnNp Z25lZCBsb25nIGxvbmcgYSBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKSA9IHsgMCB9 OworICAgIHVuc2lnbmVkIGxvbmcgbG9uZyBiIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2 KSkpID0geyAwIH07CisgICAgdW5zaWduZWQgY2hhciBjIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9z aXplKDE2KSkpID0geyAwIH07CisgICAgc3RhdGljIHZvaWQgdmVjaW50X2dmbXN1bV9hY2N1bV90 ZXN0KHZvaWQpeworICAgICAgICBjID0gdmVjX2dmbXN1bV9hY2N1bV8xMjgoYSwgYiwgYyk7Cisg ICAgfQoraW50CittYWluICgpCit7CisKKyAgIHZlY2ludF9nZm1zdW1fYWNjdW1fdGVzdCgpOwor ICAgcmV0dXJuIDA7CisgIDsKKyAgcmV0dXJuIDA7Cit9CitfQUNFT0YKK2lmIGFjX2ZuX2NfdHJ5 X2xpbmsgIiRMSU5FTk8iOyB0aGVuIDoKKyAgcGdhY19jdl9zMzkweF92ZWN0b3JfaW50cmluc2lj c19fbXphcmNoX19tYXJjaF96MTM9eWVzCitlbHNlCisgIHBnYWNfY3ZfczM5MHhfdmVjdG9yX2lu dHJpbnNpY3NfX216YXJjaF9fbWFyY2hfejEzPW5vCitmaQorcm0gLWYgY29yZSBjb25mdGVzdC5l cnIgY29uZnRlc3QuJGFjX29iamV4dCBcCisgICAgY29uZnRlc3QkYWNfZXhlZXh0IGNvbmZ0ZXN0 LiRhY19leHQKK0NGTEFHUz0iJHBnYWNfc2F2ZV9DRkxBR1MiCitmaQoreyAkYXNfZWNobyAiJGFz X21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6ICRwZ2FjX2N2X3MzOTB4X3ZlY3Rvcl9p bnRyaW5zaWNzX19temFyY2hfX21hcmNoX3oxMyIgPiY1CiskYXNfZWNobyAiJHBnYWNfY3ZfczM5 MHhfdmVjdG9yX2ludHJpbnNpY3NfX216YXJjaF9fbWFyY2hfejEzIiA+JjY7IH0KK2lmIHRlc3Qg eCIkcGdhY19jdl9zMzkweF92ZWN0b3JfaW50cmluc2ljc19fbXphcmNoX19tYXJjaF96MTMiID0g eCJ5ZXMiOyB0aGVuCisgIENGTEFHU19DUkM9Ii1temFyY2ggLW1hcmNoPXoxMyIKKyAgcGdhY19z MzkweF92ZWN0b3JfaW50cmluc2ljc19fbXphcmNoX19tYXJjaF96MTM9eWVzCitmaQorCisgIGZp CitmaQorCiAKIAogIyBTZWxlY3QgQ1JDLTMyQyBpbXBsZW1lbnRhdGlvbi4KQEAgLTE4MTQwLDkg KzE4MjM1LDE1IEBAIGlmIHRlc3QgeCIkVVNFX1NMSUNJTkdfQllfOF9DUkMzMkMiID0geCIiICYm IHRlc3QgeCIkVVNFX1NTRTQyX0NSQzMyQyIgPSB4IiIgJiYKICAgICAgICAgICBpZiB0ZXN0IHgi JHBnYWNfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzIiA9IHgieWVzIjsgdGhlbgogICAgICAg ICAgICAgVVNFX0xPT05HQVJDSF9DUkMzMkM9MQogICAgICAgICAgIGVsc2UKLSAgICAgICAgICAg ICMgZmFsbCBiYWNrIHRvIHNsaWNpbmctYnktOCBhbGdvcml0aG0sIHdoaWNoIGRvZXNuJ3QgcmVx dWlyZSBhbnkKLSAgICAgICAgICAgICMgc3BlY2lhbCBDUFUgc3VwcG9ydC4KLSAgICAgICAgICAg IFVTRV9TTElDSU5HX0JZXzhfQ1JDMzJDPTEKKyAgICAgICAgICAgICMgVXNlIFMzOTBYIHZlY3Rv ciBleHRlbnNpb24gd2l0aCBydW50aW1lIGNoZWNrLgorICAgICAgICAgICAgaWYgdGVzdCB4IiRw Z2FjX3MzOTB4X3ZlY3Rvcl9pbnRyaW5zaWNzX19menZlY3Rvcl9fbWFyY2hfejEzIiA9IHgieWVz IiB8fAorICAgICAgICAgICAgIHRlc3QgeCIkcGdhY19zMzkweF92ZWN0b3JfaW50cmluc2ljc19f bXphcmNoX19tYXJjaF96MTMiID0geCJ5ZXMiOyB0aGVuCisgICAgICAgICAgICBVU0VfUzM5MFhf Q1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSz0xCisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg ICAgICMgZmFsbCBiYWNrIHRvIHNsaWNpbmctYnktOCBhbGdvcml0aG0sIHdoaWNoIGRvZXNuJ3Qg cmVxdWlyZSBhbnkKKyAgICAgICAgICAgICAgIyBzcGVjaWFsIENQVSBzdXBwb3J0LgorICAgICAg ICAgICAgICBVU0VfU0xJQ0lOR19CWV84X0NSQzMyQz0xCisgICAgICAgICAgICBmaQogICAgICAg ICAgIGZpCiAgICAgICAgIGZpCiAgICAgICBmaQpAQCAtMTgxOTMsMTIgKzE4Mjk0LDIxIEBAICRh c19lY2hvICIjZGVmaW5lIFVTRV9MT09OR0FSQ0hfQ1JDMzJDIDEiID4+Y29uZmRlZnMuaAogICAg ICAgICAgIHsgJGFzX2VjaG8gIiRhc19tZToke2FzX2xpbmVuby0kTElORU5PfTogcmVzdWx0OiBM b29uZ0FyY2ggQ1JDQyBpbnN0cnVjdGlvbnMiID4mNQogJGFzX2VjaG8gIkxvb25nQXJjaCBDUkND IGluc3RydWN0aW9ucyIgPiY2OyB9CiAgICAgICAgIGVsc2UKKyAgICAgICAgICBpZiB0ZXN0IHgi JFVTRV9TMzkwWF9DUkMzMkNfV0lUSF9SVU5USU1FX0NIRUNLIiA9IHgiMSI7IHRoZW4KKworJGFz X2VjaG8gIiNkZWZpbmUgVVNFX1MzOTBYX0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0sgMSIgPj5j b25mZGVmcy5oCisKKyAgICAgICAgICAgIFBHX0NSQzMyQ19PQkpTPSJwZ19jcmMzMmNfczM5MHgu byBwZ19jcmMzMmNfc2I4Lm8iCisgICAgICAgICAgICB7ICRhc19lY2hvICIkYXNfbWU6JHthc19s aW5lbm8tJExJTkVOT306IHJlc3VsdDogUzM5MFggVmVjdG9yIGluc3RydWN0aW9ucyBmb3IgQ1JD IHdpdGggcnVudGltZSBjaGVjayIgPiY1CiskYXNfZWNobyAiUzM5MFggVmVjdG9yIGluc3RydWN0 aW9ucyBmb3IgQ1JDIHdpdGggcnVudGltZSBjaGVjayIgPiY2OyB9CisgICAgICAgICAgZWxzZQog CiAkYXNfZWNobyAiI2RlZmluZSBVU0VfU0xJQ0lOR19CWV84X0NSQzMyQyAxIiA+PmNvbmZkZWZz LmgKIAotICAgICAgICAgIFBHX0NSQzMyQ19PQkpTPSJwZ19jcmMzMmNfc2I4Lm8iCi0gICAgICAg ICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiByZXN1bHQ6IHNsaWNp bmctYnktOCIgPiY1CisgICAgICAgICAgICBQR19DUkMzMkNfT0JKUz0icGdfY3JjMzJjX3NiOC5v IgorICAgICAgICAgICAgeyAkYXNfZWNobyAiJGFzX21lOiR7YXNfbGluZW5vLSRMSU5FTk99OiBy ZXN1bHQ6IHNsaWNpbmctYnktOCIgPiY1CiAkYXNfZWNobyAic2xpY2luZy1ieS04IiA+JjY7IH0K KyAgICAgICAgICBmaQogICAgICAgICBmaQogICAgICAgZmkKICAgICBmaQpkaWZmIC0tZ2l0IGEv Y29uZmlndXJlLmFjIGIvY29uZmlndXJlLmFjCmluZGV4IDRiODMzNWRjNjEzLi44ZmUxODdkZjUy NCAxMDA2NDQKLS0tIGEvY29uZmlndXJlLmFjCisrKyBiL2NvbmZpZ3VyZS5hYwpAQCAtMjEzOSw2 ICsyMTM5LDE5IEBAIGZpCiAjIHdpdGggdGhlIGRlZmF1bHQgY29tcGlsZXIgZmxhZ3MuCiBQR0FD X0xPT05HQVJDSF9DUkMzMkNfSU5UUklOU0lDUygpCiAKKyMgQ2hlY2sgZm9yIFMzOTBYIFZlY3Rv ciBpbnRyaW5zaWNzIHRvIGRvIENSQyBjYWxjdWxhdGlvbnMuCisjCisjIEZpcnN0IGNoZWNrIGZv ciB0aGUgaG9zdCBjcHUKK2lmIHRlc3QgeCIkaG9zdF9jcHUiID0geCJzMzkweCIgJiYgdGVzdCB4 IiRhY19jdl9mdW5jX2dldGF1eHZhbCIgPSB4InllcyI7IHRoZW4KKyAgIyBXZSBuZWVkIGRpZmZl cmVudCBDRkxBR1MgcGVyIGNvbXBpbGVyOgorICAjIC1menZlY3RvciBmb3IgY2xhbmcKKyAgIyAt bXphcmNoIGZvciBnY2MKKyAgUEdBQ19TMzkwWF9WRUNUT1JfVlhfSU5UUklOU0lDUyhbLWZ6dmVj dG9yXSwgWy1tYXJjaD16MTNdKQorICBpZiB0ZXN0IHgiJHBnYWNfczM5MHhfdmVjdG9yX2ludHJp bnNpY3NfX2Z6dmVjdG9yX19tYXJjaF96MTMiICE9IHgieWVzIjsgdGhlbgorICAgIFBHQUNfUzM5 MFhfVkVDVE9SX1ZYX0lOVFJJTlNJQ1MoWy1temFyY2hdLCBbLW1hcmNoPXoxM10pCisgIGZpCitm aQorCiBBQ19TVUJTVChDRkxBR1NfQ1JDKQogCiAjIFNlbGVjdCBDUkMtMzJDIGltcGxlbWVudGF0 aW9uLgpAQCAtMjE5MSw5ICsyMjA0LDE1IEBAIGlmIHRlc3QgeCIkVVNFX1NMSUNJTkdfQllfOF9D UkMzMkMiID0geCIiICYmIHRlc3QgeCIkVVNFX1NTRTQyX0NSQzMyQyIgPSB4IiIgJiYKICAgICAg ICAgICBpZiB0ZXN0IHgiJHBnYWNfbG9vbmdhcmNoX2NyYzMyY19pbnRyaW5zaWNzIiA9IHgieWVz IjsgdGhlbgogICAgICAgICAgICAgVVNFX0xPT05HQVJDSF9DUkMzMkM9MQogICAgICAgICAgIGVs c2UKLSAgICAgICAgICAgICMgZmFsbCBiYWNrIHRvIHNsaWNpbmctYnktOCBhbGdvcml0aG0sIHdo aWNoIGRvZXNuJ3QgcmVxdWlyZSBhbnkKLSAgICAgICAgICAgICMgc3BlY2lhbCBDUFUgc3VwcG9y dC4KLSAgICAgICAgICAgIFVTRV9TTElDSU5HX0JZXzhfQ1JDMzJDPTEKKyAgICAgICAgICAgICMg VXNlIFMzOTBYIHZlY3RvciBleHRlbnNpb24gd2l0aCBydW50aW1lIGNoZWNrLgorICAgICAgICAg ICAgaWYgdGVzdCB4IiRwZ2FjX3MzOTB4X3ZlY3Rvcl9pbnRyaW5zaWNzX19menZlY3Rvcl9fbWFy Y2hfejEzIiA9IHgieWVzIiB8fAorICAgICAgICAgICAgIHRlc3QgeCIkcGdhY19zMzkweF92ZWN0 b3JfaW50cmluc2ljc19fbXphcmNoX19tYXJjaF96MTMiID0geCJ5ZXMiOyB0aGVuCisgICAgICAg ICAgICBVU0VfUzM5MFhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSz0xCisgICAgICAgICAgICBl bHNlCisgICAgICAgICAgICAgICMgZmFsbCBiYWNrIHRvIHNsaWNpbmctYnktOCBhbGdvcml0aG0s IHdoaWNoIGRvZXNuJ3QgcmVxdWlyZSBhbnkKKyAgICAgICAgICAgICAgIyBzcGVjaWFsIENQVSBz dXBwb3J0LgorICAgICAgICAgICAgICBVU0VfU0xJQ0lOR19CWV84X0NSQzMyQz0xCisgICAgICAg ICAgICBmaQogICAgICAgICAgIGZpCiAgICAgICAgIGZpCiAgICAgICBmaQpAQCAtMjIyOCw5ICsy MjQ3LDE1IEBAIGVsc2UKICAgICAgICAgICBQR19DUkMzMkNfT0JKUz0icGdfY3JjMzJjX2xvb25n YXJjaC5vIgogICAgICAgICAgIEFDX01TR19SRVNVTFQoTG9vbmdBcmNoIENSQ0MgaW5zdHJ1Y3Rp b25zKQogICAgICAgICBlbHNlCi0gICAgICAgICAgQUNfREVGSU5FKFVTRV9TTElDSU5HX0JZXzhf Q1JDMzJDLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNlIHNvZnR3YXJlIENSQy0zMkMgaW1wbGVtZW50 YXRpb24gKHNsaWNpbmctYnktOCkuXSkKLSAgICAgICAgICBQR19DUkMzMkNfT0JKUz0icGdfY3Jj MzJjX3NiOC5vIgotICAgICAgICAgIEFDX01TR19SRVNVTFQoc2xpY2luZy1ieS04KQorICAgICAg ICAgIGlmIHRlc3QgeCIkVVNFX1MzOTBYX0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0siID0geCIx IjsgdGhlbgorICAgICAgICAgICAgQUNfREVGSU5FKFVTRV9TMzkwWF9DUkMzMkNfV0lUSF9SVU5U SU1FX0NIRUNLLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNlIFMzOTBYIFZlY3RvciBpbnN0cnVjdGlv bnMgd2l0aCBydW50aW1lIGNoZWNrIGZvciBDUkMuXSkKKyAgICAgICAgICAgIFBHX0NSQzMyQ19P QkpTPSJwZ19jcmMzMmNfczM5MHgubyBwZ19jcmMzMmNfc2I4Lm8iCisgICAgICAgICAgICBBQ19N U0dfUkVTVUxUKFMzOTBYIFZlY3RvciBpbnN0cnVjdGlvbnMgZm9yIENSQyB3aXRoIHJ1bnRpbWUg Y2hlY2spCisgICAgICAgICAgZWxzZQorICAgICAgICAgICAgQUNfREVGSU5FKFVTRV9TTElDSU5H X0JZXzhfQ1JDMzJDLCAxLCBbRGVmaW5lIHRvIDEgdG8gdXNlIHNvZnR3YXJlIENSQy0zMkMgaW1w bGVtZW50YXRpb24gKHNsaWNpbmctYnktOCkuXSkKKyAgICAgICAgICAgIFBHX0NSQzMyQ19PQkpT PSJwZ19jcmMzMmNfc2I4Lm8iCisgICAgICAgICAgICBBQ19NU0dfUkVTVUxUKHNsaWNpbmctYnkt OCkKKyAgICAgICAgICBmaQogICAgICAgICBmaQogICAgICAgZmkKICAgICBmaQpkaWZmIC0tZ2l0 IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCBkMTQyZTNlNDA4Yi4uZmQ0YjE3ZTNj MzkgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxkCkBAIC0yNTQ3LDYg KzI1NDcsMzUgQEAgaW50IG1haW4odm9pZCkKICAgICBoYXZlX29wdGltaXplZF9jcmMgPSB0cnVl CiAgIGVuZGlmCiAKK2VsaWYgaG9zdF9jcHUgPT0gJ3MzOTB4JyBhbmQgY2MuaGFzX2Z1bmN0aW9u KCdnZXRhdXh2YWwnKQorICBpZiBjYy5nZXRfaWQoKSA9PSAnY2xhbmcnCisgICAgVkdGTUFGTEFH PSctZnp2ZWN0b3InCisgIGVsc2UKKyAgICBWR0ZNQUZMQUc9Jy1temFyY2gnCisgIGVuZGlmCisK KyAgIyBjb21waWxhdGlvbiBtYXkgZmFpbCB3aXRoIEdDQyAxNC4wLjAgPD0gZ2NjX3ZlcnNpb24g PCAxNC4zLjAgYW5kIENsYW5nIDE4LjAuMCA8PSBjbGFuZ192ZXJzaW9uIDwgMTkuMS4yCisgIHBy b2cgPSAnJycKKyNpbmNsdWRlIDx2ZWNpbnRyaW4uaD4KK3Vuc2lnbmVkIGxvbmcgbG9uZyBhIF9f YXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpID0geyAwIH07Cit1bnNpZ25lZCBsb25nIGxv bmcgYiBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6ZSgxNikpKSA9IHsgMCB9OwordW5zaWduZWQg Y2hhciBjIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpID0geyAwIH07CisKK2ludCBt YWluKHZvaWQpIHsKKyAgICAvLyB0ZXN0IGZvciB2ZWN0b3IgZXh0ZW5zaW9uCisgICAgLy8gd2Ug Y2FuIHNhZmVseSBhc3N1bWUgdGhhdCBpZiB3ZSBoYXZlIHZlY19nZm1zdW1fYWNjdW1fMTI4Cisg ICAgLy8gd2Ugd2lsbCBoYXZlIGFsbCBuZWVkZWQgYnVpbHRpbnMKKyAgICBjID0gdmVjX2dmbXN1 bV9hY2N1bV8xMjgoYSwgYiwgYyk7CisgICAgcmV0dXJuIGNbMF07Cit9JycnCisgIGlmIGNjLmxp bmtzKHByb2csIG5hbWU6ICdzMzkweF92ZWN0b3JfdngrbWFyY2g9ejEzJywgYXJnczogdGVzdF9j X2FyZ3MgKyBbVkdGTUFGTEFHLCAnLW1hcmNoPXoxMyddKQorICAgICMgVXNlIFMzOTBYIENSQyBF eHRlbnNpb24gd2l0aCBydW50aW1lIGNoZWNrCisgICAgIyBleHRlbmQgQ0ZMQUdTIHRvIGVuYWJs ZWQgdGhlIFZYIGV4dGVuc2lvbgorICAgIGNkYXRhLnNldCgnVVNFX1MzOTBYX0NSQzMyQ19XSVRI X1JVTlRJTUVfQ0hFQ0snLDEpCisgICAgY2ZsYWdzX2NyYyArPSBWR0ZNQUZMQUcKKyAgICBjZmxh Z3NfY3JjICs9ICctbWFyY2g9ejEzJworICAgIGhhdmVfb3B0aW1pemVkX2NyYyA9IHRydWUKKyAg ZW5kaWYKIGVuZGlmCiAKIGlmIG5vdCBoYXZlX29wdGltaXplZF9jcmMKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL3BnX2NvbmZpZy5oLmluIGIvc3JjL2luY2x1ZGUvcGdfY29uZmlnLmguaW4KaW5k ZXggNzI2YTdjMWJlMWYuLmZjYTIzN2FlZWRjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9wZ19j b25maWcuaC5pbgorKysgYi9zcmMvaW5jbHVkZS9wZ19jb25maWcuaC5pbgpAQCAtNjY2LDYgKzY2 Niw5IEBACiAvKiBEZWZpbmUgdG8gMSB0byB1c2UgQVJNdjggQ1JDIEV4dGVuc2lvbiB3aXRoIGEg cnVudGltZSBjaGVjay4gKi8KICN1bmRlZiBVU0VfQVJNVjhfQ1JDMzJDX1dJVEhfUlVOVElNRV9D SEVDSwogCisvKiBEZWZpbmUgdG8gMSB0byB1c2UgUzM5MFggQ1JDIEFsZ29yaXRobSB3aXRoIGEg cnVudGltZSBjaGVjay4gKi8KKyN1bmRlZiBVU0VfUzM5MFhfQ1JDMzJDX1dJVEhfUlVOVElNRV9D SEVDSworCiAvKiBEZWZpbmUgdG8gMSB0byBidWlsZCB3aXRoIGFzc2VydGlvbiBjaGVja3MuICgt LWVuYWJsZS1jYXNzZXJ0KSAqLwogI3VuZGVmIFVTRV9BU1NFUlRfQ0hFQ0tJTkcKIApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvcG9ydC9wZ19jcmMzMmMuaCBiL3NyYy9pbmNsdWRlL3BvcnQvcGdf Y3JjMzJjLmgKaW5kZXggODIzMTNiYjdmY2YuLmRmNTQzZjUyMTIxIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9wb3J0L3BnX2NyYzMyYy5oCisrKyBiL3NyYy9pbmNsdWRlL3BvcnQvcGdfY3JjMzJj LmgKQEAgLTE0Miw2ICsxNDIsMTkgQEAgZXh0ZXJuIHBnX2NyYzMyYyBwZ19jb21wX2NyYzMyY19z YjgocGdfY3JjMzJjIGNyYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKIGV4dGVybiBw Z19jcmMzMmMgKCpwZ19jb21wX2NyYzMyYykgKHBnX2NyYzMyYyBjcmMsIGNvbnN0IHZvaWQgKmRh dGEsIHNpemVfdCBsZW4pOwogZXh0ZXJuIHBnX2NyYzMyYyBwZ19jb21wX2NyYzMyY19hcm12OChw Z19jcmMzMmMgY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVuKTsKIAorI2VsaWYgZGVm aW5lZChVU0VfUzM5MFhfQ1JDMzJDX1dJVEhfUlVOVElNRV9DSEVDSykKKy8qCisgKiBVc2UgUzM5 MFggdmVjdG9yIGluc3RydWN0aW9ucyBvbmx5IGZvciBidWZmZXJzIGxvbmdlciB0aGVuIDMyIGJ5 dGUuCisgKiBGb3IgcnVudGltZSBjaGVjayB1c2UgcGdfY29tcF9jcmMzMmMuCisgKi8KKyNkZWZp bmUgQ09NUF9DUkMzMkMoY3JjLCBkYXRhLCBsZW4pCQkJCQkJCVwKKwkoKGNyYykgPSAobGVuKSA8 IDMyID8gcGdfY29tcF9jcmMzMmNfc2I4KChjcmMpLChkYXRhKSwobGVuKSkgOiBwZ19jb21wX2Ny YzMyYygoY3JjKSwgKGRhdGEpLCAobGVuKSkpCisjZGVmaW5lIEZJTl9DUkMzMkMoY3JjKSAoKGNy YykgPSBwZ19ic3dhcDMyKGNyYykgXiAweEZGRkZGRkZGKQorCitleHRlcm4gcGdfY3JjMzJjIHBn X2NvbXBfY3JjMzJjX3NiOChwZ19jcmMzMmMgY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3Qg bGVuKTsKK2V4dGVybiBwZ19jcmMzMmMgKCpwZ19jb21wX2NyYzMyYykgKHBnX2NyYzMyYyBjcmMs IGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4pOworZXh0ZXJuIHBnX2NyYzMyYyBwZ19jb21w X2NyYzMyY19zMzkweChwZ19jcmMzMmMgY3JjLCBjb25zdCB2b2lkICpkYXRhLCBzaXplX3QgbGVu KTsKKwogI2Vsc2UKIC8qCiAgKiBVc2Ugc2xpY2luZy1ieS04IGFsZ29yaXRobS4KZGlmZiAtLWdp dCBhL3NyYy9wb3J0L01ha2VmaWxlIGIvc3JjL3BvcnQvTWFrZWZpbGUKaW5kZXggNDI3NDk0OWRm YTQuLmZjMmMyOTA3YjM2IDEwMDY0NAotLS0gYS9zcmMvcG9ydC9NYWtlZmlsZQorKysgYi9zcmMv cG9ydC9NYWtlZmlsZQpAQCAtODUsMTAgKzg1LDEzIEBAIGxpYnBncG9ydC5hOiAkKE9CSlMpCiAJ cm0gLWYgJEAKIAkkKEFSKSAkKEFST1BUKSAkQCAkXgogCi0jIGFsbCB2ZXJzaW9ucyBvZiBwZ19j cmMzMmNfYXJtdjgubyBuZWVkIENGTEFHU19DUkMKKyMgYWxsIHZlcnNpb25zIG9mIHBnX2NyYzMy Y19hcm12OC5vIGFuZCBwZ19jcmMzMmNfczM5MHgubyBuZWVkIENGTEFHU19DUkMKIHBnX2NyYzMy Y19hcm12OC5vOiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIHBnX2NyYzMyY19hcm12OF9zaGxpYi5v OiBDRkxBR1MrPSQoQ0ZMQUdTX0NSQykKIHBnX2NyYzMyY19hcm12OF9zcnYubzogQ0ZMQUdTKz0k KENGTEFHU19DUkMpCitwZ19jcmMzMmNfczM5MHgubzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCitw Z19jcmMzMmNfczM5MHhfc2hsaWIubzogQ0ZMQUdTKz0kKENGTEFHU19DUkMpCitwZ19jcmMzMmNf czM5MHhfc3J2Lm86IENGTEFHUys9JChDRkxBR1NfQ1JDKQogCiAjCiAjIFNoYXJlZCBsaWJyYXJ5 IHZlcnNpb25zIG9mIG9iamVjdCBmaWxlcwpkaWZmIC0tZ2l0IGEvc3JjL3BvcnQvbWVzb24uYnVp bGQgYi9zcmMvcG9ydC9tZXNvbi5idWlsZAppbmRleCBmYzdiMDU5ZmVlNS4uNWFmMWFjOGRhMjYg MTAwNjQ0Ci0tLSBhL3NyYy9wb3J0L21lc29uLmJ1aWxkCisrKyBiL3NyYy9wb3J0L21lc29uLmJ1 aWxkCkBAIC0xMDAsNiArMTAwLDEwIEBAIHJlcGxhY2VfZnVuY3NfcG9zID0gWwogICAjIGxvb25n YXJjaAogICBbJ3BnX2NyYzMyY19sb29uZ2FyY2gnLCAnVVNFX0xPT05HQVJDSF9DUkMzMkMnXSwK IAorICAjIHMzOTB4CisgIFsncGdfY3JjMzJjX3MzOTB4JywgJ1VTRV9TMzkwWF9DUkMzMkNfV0lU SF9SVU5USU1FX0NIRUNLJywgJ2NyYyddLAorICBbJ3BnX2NyYzMyY19zYjgnLCAnVVNFX1MzOTBY X0NSQzMyQ19XSVRIX1JVTlRJTUVfQ0hFQ0snXSwKKwogICAjIGdlbmVyaWMgZmFsbGJhY2sKICAg WydwZ19jcmMzMmNfc2I4JywgJ1VTRV9TTElDSU5HX0JZXzhfQ1JDMzJDJ10sCiBdCmRpZmYgLS1n aXQgYS9zcmMvcG9ydC9wZ19jcmMzMmNfczM5MHguYyBiL3NyYy9wb3J0L3BnX2NyYzMyY19zMzkw eC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44M2M3MjFkNDMwOQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9wb3J0L3BnX2NyYzMyY19zMzkweC5jCkBAIC0wLDAgKzEs Mjk1IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBwZ19jcmMzMmNfczM5MHguYworICoJ ICBIYXJkd2FyZS1hY2NlbGVyYXRlZCBDUkMtMzJDIHZhcmlhbnRzIGZvciBMaW51eCBvbiBJQk0g WiAmIExpbnV4T05FCisgKgorICogVGhpcyBjb2RlIHdhcyBvcmlnaW5hbGx5IHdyaXR0ZW4gYnkg SGVuZHJpayBCcnVlY2tuZXIKKyAqIDxicnVlY2tuZXJAbGludXguaWJtLmNvbT4gZm9yIHVzZSBp biB0aGUgTGludXgga2VybmVsIGFuZCBoYXMgYmVlbgorICogcmVsaWNlbnNlZCB1bmRlciB0aGUg cG9zdGdyZXNxbC1saWNlbnNlLgorICoKKyAqIFVzZSB0aGUgei9BcmNoaXRlY3R1cmUgVmVjdG9y IEV4dGVuc2lvbiBGYWNpbGl0eSB0byBhY2NlbGVyYXRlIHRoZQorICogY29tcHV0aW5nIG9mIGJp dHJlZmxlY3RlZCBDUkMtMzJDIGNoZWNrc3Vtcy4KKyAqCisgKiBUaGlzIENSQy0zMkMgaW1wbGVt ZW50YXRpb24gYWxnb3JpdGhtIGlzIGJpdHJlZmxlY3RlZCBhbmQgcHJvY2Vzc2VzCisgKiB0aGUg bGVhc3Qtc2lnbmlmaWNhbnQgYml0IGZpcnN0IChMaXR0bGUtRW5kaWFuKS4KKyAqCisgKiBJREVO VElGSUNBVElPTgorICoJICBzcmMvcG9ydC9wZ19jcmMzMmNfczM5MHguYworICoKKyAqLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQorICovCisjaW5jbHVkZSAiYy5oIgorI2luY2x1ZGUgPHZlY2ludHJpbi5oPgor I2luY2x1ZGUgInBvcnQvcGdfY3JjMzJjLmgiCisKKyNkZWZpbmUgVlhfQUxJR05NRU5UIDE2TAor I2RlZmluZSBWWF9BTElHTl9NQVNLIChWWF9BTElHTk1FTlQgLSAxKQorCit0eXBlZGVmIHVuc2ln bmVkIGNoYXIgdXYxNnFpIF9fYXR0cmlidXRlX18oKHZlY3Rvcl9zaXplKDE2KSkpOwordHlwZWRl ZiB1bnNpZ25lZCBpbnQgdXY0c2kgX19hdHRyaWJ1dGVfXygodmVjdG9yX3NpemUoMTYpKSk7Cit0 eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1djJkaSBfX2F0dHJpYnV0ZV9fKCh2ZWN0b3Jfc2l6 ZSgxNikpKTsKKworI2lmZGVmIEhBVkVfR0VUQVVYVkFMCisjaW5jbHVkZSA8c3lzL2F1eHYuaD4K KyNlbmRpZgorCitzdGF0aWMgaW5saW5lIGJvb2wKK3BnX3MzOTB4X3Z4X2F2YWlsYWJsZSh2b2lk KQoreworI2lmZGVmIEhBVkVfR0VUQVVYVkFMCisJcmV0dXJuIChnZXRhdXh2YWwoQVRfSFdDQVAp ICYgSFdDQVBfUzM5MF9WWCk7CisjZWxzZQorCXJldHVybiBmYWxzZTsKKyNlbmRpZgorfQorCisv KgorICogVGhpcyBnZXRzIGNhbGxlZCBvbiB0aGUgZmlyc3QgY2FsbC4gSXQgcmVwbGFjZXMgdGhl IGZ1bmN0aW9uIHBvaW50ZXIKKyAqIHNvIHRoYXQgc3Vic2VxdWVudCBjYWxscyBhcmUgcm91dGVk IGRpcmVjdGx5IHRvIHRoZSBjaG9zZW4gaW1wbGVtZW50YXRpb24uCisgKi8KK3N0YXRpYyBpbmxp bmUgcGdfY3JjMzJjCitwZ19jb21wX2NyYzMyY19jaG9vc2UocGdfY3JjMzJjIGNyYywgY29uc3Qg dm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwlpZiAocGdfczM5MHhfdnhfYXZhaWxhYmxlKCkp CisJeworCQlwZ19jb21wX2NyYzMyYyA9IHBnX2NvbXBfY3JjMzJjX3MzOTB4OworCX0KKwllbHNl CisJeworCQlwZ19jb21wX2NyYzMyYyA9IHBnX2NvbXBfY3JjMzJjX3NiODsKKwl9CisKKwlyZXR1 cm4gcGdfY29tcF9jcmMzMmMoY3JjLCBkYXRhLCBsZW4pOworfQorCitwZ19jcmMzMmMJKCpwZ19j b21wX2NyYzMyYykgKHBnX2NyYzMyYyBjcmMsIGNvbnN0IHZvaWQgKmRhdGEsIHNpemVfdCBsZW4p ID0gcGdfY29tcF9jcmMzMmNfY2hvb3NlOworCitzdGF0aWMgdWludDMyX3QKK2NyYzMyX2xlX3Zn Zm1fMTYodWludDMyX3QgY3JjLCBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYsIHNpemVfdCBsZW4p Cit7CisJLyotLS0tLS0tLS0tCisJICogVGhlIENSQy0zMkMgY29uc3RhbnQgYmxvY2sgY29udGFp bnMgcmVkdWN0aW9uIGNvbnN0YW50cyB0byBmb2xkIGFuZAorCSAqIHByb2Nlc3MgcGFydGljdWxh ciBjaHVua3Mgb2YgdGhlIGlucHV0IGRhdGEgc3RyZWFtIGluIHBhcmFsbGVsLgorCSAqCisJICog Rm9yIHRoZSBDUkMtMzJDIHZhcmlhbnRzLCB0aGUgY29uc3RhbnRzIGFyZSBwcmVjb21wdXRlZCBh Y2NvcmRpbmcgdG8KKwkgKiB0aGVzZSBkZWZpbml0aW9uczoKKwkgKgorCSAqICAgICAgUjEgPSBb KHg0KjEyOCszMiBtb2QgUCcoeCkgPDwgMzIpXScgPDwgMQorCSAqICAgICAgUjIgPSBbKHg0KjEy OC0zMiBtb2QgUCcoeCkgPDwgMzIpXScgPDwgMQorCSAqICAgICAgUjMgPSBbKHgxMjgrMzIgbW9k IFAnKHgpIDw8IDMyKV0nICAgPDwgMQorCSAqICAgICAgUjQgPSBbKHgxMjgtMzIgbW9kIFAnKHgp IDw8IDMyKV0nICAgPDwgMQorCSAqICAgICAgUjUgPSBbKHg2NCBtb2QgUCcoeCkgPDwgMzIpXScg ICAgICAgPDwgMQorCSAqICAgICAgUjYgPSBbKHgzMiBtb2QgUCcoeCkgPDwgMzIpXScgICAgICAg PDwgMQorCSAqCisJICogICAgICBUaGUgYml0cmVmbGVjdGVkIEJhcnJldCByZWR1Y3Rpb24gY29u c3RhbnQsIHUnLCBpcyBkZWZpbmVkIGFzCisJICogICAgICB0aGUgYml0IHJldmVyc2FsIG9mIGZs b29yKHgqKjY0IC8gUCh4KSkuCisJICoKKwkgKiAgICAgIHdoZXJlIFAoeCkgaXMgdGhlIHBvbHlu b21pYWwgaW4gdGhlIG5vcm1hbCBkb21haW4gYW5kIHRoZSBQJyh4KSBpcyB0aGUKKwkgKiAgICAg IHBvbHlub21pYWwgaW4gdGhlIHJldmVyc2VkIChiaXRyZWZsZWN0ZWQpIGRvbWFpbi4KKwkgKgor CSAqIENSQy0zMkMgKENhc3RhZ25vbGkpIHBvbHlub21pYWxzOgorCSAqCisJICogICAgICBQKHgp ICA9IDB4MUVEQzZGNDEKKwkgKiAgICAgIFAnKHgpID0gMHg4MkY2M0I3OAorCSAqLworCWNvbnN0 CQl1djE2cWkgcGVybV9sZTJiZSA9IHsxNSwgMTQsIDEzLCAxMiwgMTEsIDEwLCA5LCA4LCA3LCA2 LCA1LCA0LCAzLCAyLCAxLCAwfTsgLyogQkUtPkxFIG1hc2sgKi8KKwljb25zdAkJdXYyZGkgcjJy MSA9IHsweDA5ZTRhZGRmOCwgMHg3NDBlZWYwMn07IC8qIFIyLCBSMSAqLworCWNvbnN0CQl1djJk aSByNHIzID0gezB4MTRjZDAwYmQ2LCAweGYyMGMwZGZlfTsgLyogUjQsIFIzICovCisJY29uc3QJ CXV2MmRpIHI1ID0gezAsIDB4MGRkNDVhYWI4fTsJLyogUjUgKi8KKwljb25zdAkJdXYyZGkgcnVf cG9seSA9IHswLCAweDBkZWE3MTNmMX07CS8qIHUnICovCisJY29uc3QJCXV2MmRpIGNyY19wb2x5 ID0gezAsIDB4MTA1ZWM3NmYwfTsJLyogUCcoeCkgPDwgMSAqLworCXV2MmRpCQl2MCA9IHswLCAw fTsKKwl1djJkaQkJdjEgPSB7MCwgMH07CisJdXYyZGkJCXYyID0gezAsIDB9OworCXV2MmRpCQl2 MyA9IHswLCAwfTsKKwl1djJkaQkJdjQgPSB7MCwgMH07CisJdXYxNnFpCQl2OSA9IHswLCAwLCAw LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwfTsKKworCS8qCisJICogTG9h ZCB0aGUgaW5pdGlhbCBDUkMgdmFsdWUuCisJICoKKwkgKiBUaGUgQ1JDIHZhbHVlIGlzIGxvYWRl ZCBpbnRvIHRoZSByaWdodG1vc3Qgd29yZCBvZiB0aGUgdmVjdG9yIHJlZ2lzdGVyCisJICogYW5k IGlzIGxhdGVyIFhPUmVkIHdpdGggdGhlIExTQiBwb3J0aW9uIG9mIHRoZSBsb2FkZWQgaW5wdXQg ZGF0YS4KKwkgKi8KKwl2MCA9ICh1djJkaSkgdmVjX2luc2VydChjcmMsICh1djRzaSkgdjAsIDMp OworCisJaWYgKGxlbiA+PSA2NCkKKwl7CisJCS8qIExvYWQgYSA2NC1ieXRlIGRhdGEgY2h1bmsg YW5kIFhPUiB3aXRoIENSQyAqLworCQl2MSA9IHZlY19wZXJtKCgodXYyZGkgKikgYnVmKVswXSwg KCh1djJkaSAqKSBidWYpWzBdLCBwZXJtX2xlMmJlKTsKKwkJdjIgPSB2ZWNfcGVybSgoKHV2MmRp ICopIGJ1ZilbMV0sICgodXYyZGkgKikgYnVmKVsxXSwgcGVybV9sZTJiZSk7CisJCXYzID0gdmVj X3Blcm0oKCh1djJkaSAqKSBidWYpWzJdLCAoKHV2MmRpICopIGJ1ZilbMl0sIHBlcm1fbGUyYmUp OworCQl2NCA9IHZlY19wZXJtKCgodXYyZGkgKikgYnVmKVszXSwgKCh1djJkaSAqKSBidWYpWzNd LCBwZXJtX2xlMmJlKTsKKworCQl2MSBePSB2MDsKKwkJYnVmICs9IDY0OworCQlsZW4gLT0gNjQ7 CisKKwkJd2hpbGUgKGxlbiA+PSA2NCkKKwkJeworCQkJLyogTG9hZCB0aGUgbmV4dCA2NC1ieXRl IGRhdGEgY2h1bmsgKi8KKwkJCXV2MTZxaQkJcGFydDEgPSB2ZWNfcGVybSgoKHV2MTZxaSAqKSBi dWYpWzBdLCAoKHV2MTZxaSAqKSBidWYpWzBdLCBwZXJtX2xlMmJlKTsKKwkJCXV2MTZxaQkJcGFy dDIgPSB2ZWNfcGVybSgoKHV2MTZxaSAqKSBidWYpWzFdLCAoKHV2MTZxaSAqKSBidWYpWzFdLCBw ZXJtX2xlMmJlKTsKKwkJCXV2MTZxaQkJcGFydDMgPSB2ZWNfcGVybSgoKHV2MTZxaSAqKSBidWYp WzJdLCAoKHV2MTZxaSAqKSBidWYpWzJdLCBwZXJtX2xlMmJlKTsKKwkJCXV2MTZxaQkJcGFydDQg PSB2ZWNfcGVybSgoKHV2MTZxaSAqKSBidWYpWzNdLCAoKHV2MTZxaSAqKSBidWYpWzNdLCBwZXJt X2xlMmJlKTsKKworCQkJLyoKKwkJCSAqIFBlcmZvcm0gYSBHRigyKSBtdWx0aXBsaWNhdGlvbiBv ZiB0aGUgZG91Ymxld29yZHMgaW4gVjEgd2l0aAorCQkJICogdGhlIFIxIGFuZCBSMiByZWR1Y3Rp b24gY29uc3RhbnRzIGluIFYwLiAgVGhlIGludGVybWVkaWF0ZQorCQkJICogcmVzdWx0IGlzIHRo ZW4gZm9sZGVkIChhY2N1bXVsYXRlZCkgd2l0aCB0aGUgbmV4dCBkYXRhIGNodW5rIGluCisJCQkg KiBQQVJUMSBhbmQgc3RvcmVkIGluIFYxLiBSZXBlYXQgdGhpcyBzdGVwIGZvciB0aGUgcmVnaXN0 ZXIKKwkJCSAqIGNvbnRlbnRzIGluIFYyLCBWMywgYW5kIFY0IHJlc3BlY3RpdmVseS4KKwkJCSAq LworCQkJdjEgPSAodXYyZGkpIHZlY19nZm1zdW1fYWNjdW1fMTI4KHIycjEsIHYxLCBwYXJ0MSk7 CisJCQl2MiA9ICh1djJkaSkgdmVjX2dmbXN1bV9hY2N1bV8xMjgocjJyMSwgdjIsIHBhcnQyKTsK KwkJCXYzID0gKHV2MmRpKSB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOChyMnIxLCB2MywgcGFydDMpOwor CQkJdjQgPSAodXYyZGkpIHZlY19nZm1zdW1fYWNjdW1fMTI4KHIycjEsIHY0LCBwYXJ0NCk7CisK KwkJCWJ1ZiArPSA2NDsKKwkJCWxlbiAtPSA2NDsKKwkJfQorCisJCS8qCisJCSAqIEZvbGQgVjEg dG8gVjQgaW50byBhIHNpbmdsZSAxMjgtYml0IHZhbHVlIGluIFYxLiAgTXVsdGlwbHkgVjEgd2l0 aAorCQkgKiBSMyBhbmQgUjQgYW5kIGFjY3VtdWxhdGluZyB0aGUgbmV4dCAxMjgtYml0IGNodW5r IHVudGlsIGEgc2luZ2xlCisJCSAqIDEyOC1iaXQgdmFsdWUgcmVtYWlucy4KKwkJICovCisJCXYx ID0gKHV2MmRpKSB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOChyNHIzLCB2MSwgKHV2MTZxaSkgdjIpOwor CQl2MSA9ICh1djJkaSkgdmVjX2dmbXN1bV9hY2N1bV8xMjgocjRyMywgdjEsICh1djE2cWkpIHYz KTsKKwkJdjEgPSAodXYyZGkpIHZlY19nZm1zdW1fYWNjdW1fMTI4KHI0cjMsIHYxLCAodXYxNnFp KSB2NCk7CisJfQorCWVsc2UKKwl7CisKKwkJLyoKKwkJICogTG9hZCBhIDE2LWJ5dGUgZGF0YSBj aHVuayBhbmQgWE9SIHdpdGggQ1JDCisJCSAqLworCQl2MSA9IHZlY19wZXJtKCgodXYyZGkgKikg YnVmKVswXSwgKCh1djJkaSAqKSBidWYpWzBdLCBwZXJtX2xlMmJlKTsKKwkJdjEgXj0gdjA7CisJ CWJ1ZiArPSAxNjsKKwkJbGVuIC09IDE2OworCX0KKworCXdoaWxlIChsZW4gPj0gMTYpCisJewor CQkvKiBMb2FkIG5leHQgZGF0YSBjaHVuayAqLworCQl2MiA9IHZlY19wZXJtKCoodXYyZGkgKikg YnVmLCAqKHV2MmRpICopIGJ1ZiwgcGVybV9sZTJiZSk7CisKKwkJLyogRm9sZCBuZXh0IGRhdGEg Y2h1bmsgKi8KKwkJdjEgPSAodXYyZGkpIHZlY19nZm1zdW1fYWNjdW1fMTI4KHI0cjMsIHYxLCAo dXYxNnFpKSB2Mik7CisKKwkJYnVmICs9IDE2OworCQlsZW4gLT0gMTY7CisJfQorCisJLyoKKwkg KiBTZXQgdXAgYSB2ZWN0b3IgcmVnaXN0ZXIgZm9yIGJ5dGUgc2hpZnRzLiAgVGhlIHNoaWZ0IHZh bHVlIG11c3QgYmUKKwkgKiBsb2FkZWQgaW4gYml0cyAxLTQgaW4gYnl0ZSBlbGVtZW50IDcgb2Yg YSB2ZWN0b3IgcmVnaXN0ZXIuIFNoaWZ0IGJ5IDgKKwkgKiBieXRlczogMHg0MCBTaGlmdCBieSA0 IGJ5dGVzOiAweDIwCisJICovCisKKwl2OSA9IHZlY19pbnNlcnQoKHVuc2lnbmVkIGNoYXIpIDB4 NDAsIHY5LCA3KTsKKworCS8qCisJICogUHJlcGFyZSBWMCBmb3IgdGhlIG5leHQgR0YoMikgbXVs dGlwbGljYXRpb246IHNoaWZ0IFYwIGJ5IDggYnl0ZXMgdG8KKwkgKiBtb3ZlIFI0IGludG8gdGhl IHJpZ2h0bW9zdCBkb3VibGV3b3JkIGFuZCBzZXQgdGhlIGxlZnRtb3N0IGRvdWJsZXdvcmQKKwkg KiB0byAweDEuCisJICovCisJdjAgPSB2ZWNfc3JiKHI0cjMsICh1djJkaSkgdjkpOworCXYwWzBd ID0gMTsKKworCS8qCisJICogQ29tcHV0ZSBHRigyKSBwcm9kdWN0IG9mIFYxIGFuZCBWMC4gIFRo ZSByaWdodG1vc3QgZG91Ymxld29yZCBvZiBWMSBpcworCSAqIG11bHRpcGxpZWQgd2l0aCBSNC4g IFRoZSBsZWZ0bW9zdCBkb3VibGV3b3JkIG9mIFYxIGlzIG11bHRpcGxpZWQgYnkgMHgxCisJICog YW5kIGlzIHRoZW4gWE9SZWQgd2l0aCByaWdodG1vc3QgcHJvZHVjdC4gSW1wbGljaXRseSwgdGhl IGludGVybWVkaWF0ZQorCSAqIGxlZnRtb3N0IHByb2R1Y3QgYmVjb21lcyBwYWRkZWQKKwkgKi8K Kwl2MSA9ICh1djJkaSkgdmVjX2dmbXN1bV8xMjgodjAsIHYxKTsKKworCS8qCisJICogTm93IGRv IHRoZSBmaW5hbCAzMi1iaXQgZm9sZCBieSBtdWx0aXBseWluZyB0aGUgcmlnaHRtb3N0IHdvcmQg aW4gVjEKKwkgKiB3aXRoIFI1IGFuZCBYT1IgdGhlIHJlc3VsdCB3aXRoIHRoZSByZW1haW5pbmcg Yml0cyBpbiBWMS4KKwkgKgorCSAqIFRvIGFjaGlldmUgdGhpcyBieSBhIHNpbmdsZSBWR0ZNQUcs IHJpZ2h0IHNoaWZ0IFYxIGJ5IGEgd29yZCBhbmQgc3RvcmUKKwkgKiB0aGUgcmVzdWx0IGluIFYy IHdoaWNoIGlzIHRoZW4gYWNjdW11bGF0ZWQuICBVc2UgdGhlIHZlY3RvciB1bnBhY2sKKwkgKiBp bnN0cnVjdGlvbiB0byBsb2FkIHRoZSByaWdodG1vc3QgaGFsZiBvZiB0aGUgZG91Ymxld29yZCBp bnRvIHRoZQorCSAqIHJpZ2h0bW9zdCBkb3VibGV3b3JkIGVsZW1lbnQgb2YgVjE7IHRoZSBvdGhl ciBoYWxmIGlzIGxvYWRlZCBpbiB0aGUKKwkgKiBsZWZ0bW9zdCBkb3VibGV3b3JkLiBUaGUgdmVj dG9yIHJlZ2lzdGVyIHdpdGggQ09OU1RfUjUgY29udGFpbnMgdGhlIFI1CisJICogY29uc3RhbnQg aW4gdGhlIHJpZ2h0bW9zdCBkb3VibGV3b3JkIGFuZCB0aGUgbGVmdG1vc3QgZG91Ymxld29yZCBp cworCSAqIHplcm8gdG8gaWdub3JlIHRoZSBsZWZ0bW9zdCBwcm9kdWN0IG9mIFYxLgorCSAqLwor CXY5ID0gdmVjX2luc2VydCgodW5zaWduZWQgY2hhcikgMHgyMCwgdjksIDcpOworCXYyID0gdmVj X3NyYih2MSwgKHV2MmRpKSB2OSk7CisJdjEgPSB2ZWNfdW5wYWNrbCgodXY0c2kpIHYxKTsJLyog U3BsaXQgcmlnaHRtb3N0IGRvdWJsZXdvcmQgKi8KKwl2MSA9ICh1djJkaSkgdmVjX2dmbXN1bV9h Y2N1bV8xMjgocjUsIHYxLCAodXYxNnFpKSB2Mik7CisKKwkvKi0tLS0tLS0tLS0KKwkgKiBBcHBs eSBhIEJhcnJldCByZWR1Y3Rpb24gdG8gY29tcHV0ZSB0aGUgZmluYWwgMzItYml0IENSQyB2YWx1 ZS4KKwkgKgorCSAqIFRoZSBpbnB1dCB2YWx1ZXMgdG8gdGhlIEJhcnJldCByZWR1Y3Rpb24gYXJl IHRoZSBkZWdyZWUtNjMgcG9seW5vbWlhbAorCSAqIGluIFYxIChSKHgpKSwgZGVncmVlLTMyIGdl bmVyYXRvciBwb2x5bm9taWFsLCBhbmQgdGhlIHJlZHVjdGlvbgorCSAqIGNvbnN0YW50IHUuICBU aGUgQmFycmV0IHJlZHVjdGlvbiByZXN1bHQgaXMgdGhlIENSQyB2YWx1ZSBvZiBSKHgpIG1vZAor CSAqIFAoeCkuCisJICoKKwkgKiBUaGUgQmFycmV0IHJlZHVjdGlvbiBhbGdvcml0aG0gaXMgZGVm aW5lZCBhczoKKwkgKgorCSAqICAgIDEuIFQxKHgpID0gZmxvb3IoIFIoeCkgLyB4XjMyICkgR0Yy TVVMIHUKKwkgKiAgICAyLiBUMih4KSA9IGZsb29yKCBUMSh4KSAvIHheMzIgKSBHRjJNVUwgUCh4 KQorCSAqICAgIDMuIEMoeCkgID0gUih4KSBYT1IgVDIoeCkgbW9kIHheMzIKKwkgKgorCSAqICBO b3RlOiBUaGUgbGVmdG1vc3QgZG91Ymxld29yZCBvZiB2ZWN0b3IgcmVnaXN0ZXIgY29udGFpbmlu ZworCSAqICBDT05TVF9SVV9QT0xZIGlzIHplcm8gYW5kLCB0aHVzLCB0aGUgaW50ZXJtZWRpYXRl IEdGKDIpIHByb2R1Y3QKKwkgKiAgaXMgemVybyBhbmQgZG9lcyBub3QgY29udHJpYnV0ZSB0byB0 aGUgZmluYWwgcmVzdWx0LgorCSAqLworCisJLyogVDEoeCkgPSBmbG9vciggUih4KSAvIHheMzIg KSBHRjJNVUwgdSAqLworCXYyID0gdmVjX3VucGFja2woKHV2NHNpKSB2MSk7CisJdjIgPSAodXYy ZGkpIHZlY19nZm1zdW1fMTI4KHJ1X3BvbHksIHYyKTsKKworCS8qCisJICogQ29tcHV0ZSB0aGUg R0YoMikgcHJvZHVjdCBvZiB0aGUgQ1JDIHBvbHlub21pYWwgd2l0aCBUMSh4KSBpbiBWMiBhbmQK KwkgKiBYT1IgdGhlIGludGVybWVkaWF0ZSByZXN1bHQsIFQyKHgpLCB3aXRoIHRoZSB2YWx1ZSBp biBWMS4gVGhlIGZpbmFsCisJICogcmVzdWx0IGlzIHN0b3JlZCBpbiB3b3JkIGVsZW1lbnQgMiBv ZiBWMi4KKwkgKi8KKwl2MiA9IHZlY191bnBhY2tsKCh1djRzaSkgdjIpOworCXYyID0gKHV2MmRp KSB2ZWNfZ2Ztc3VtX2FjY3VtXzEyOChjcmNfcG9seSwgdjIsICh1djE2cWkpIHYxKTsKKworCXJl dHVybiAoKHV2NHNpKSB2MilbMl07Cit9CisKK3BnX2NyYzMyYworcGdfY29tcF9jcmMzMmNfczM5 MHgocGdfY3JjMzJjIGNyYywgY29uc3Qgdm9pZCAqZGF0YSwgc2l6ZV90IGxlbikKK3sKKwl1aW50 cHRyX3QJcHJlYWxpZ24sCisJCQkJYWxpZ25lZCwKKwkJCQlyZW1haW5pbmc7CisJY29uc3QgdW5z aWduZWQgY2hhciAqYnVmID0gZGF0YTsKKworCS8qCisJICogUHJlcHJvY2VzcyBpbml0aWFsIGJ5 dGVzIHdpdGggc2I4IHNvIHRoZSBodyBjYW4gc3RhcnQgYXQgYW4gYWxpZ25lZAorCSAqIGFkZHJl c3MKKwkgKi8KKwlpZiAoKHVpbnRwdHJfdCkgYnVmICYgVlhfQUxJR05fTUFTSykKKwl7CisJCXBy ZWFsaWduID0gVlhfQUxJR05NRU5UIC0gKCh1aW50cHRyX3QpIGJ1ZiAmIFZYX0FMSUdOX01BU0sp OworCQlsZW4gLT0gcHJlYWxpZ247CisJCWNyYyA9IHBnX2NvbXBfY3JjMzJjX3NiOChjcmMsIGJ1 ZiwgcHJlYWxpZ24pOworCQlidWYgKz0gcHJlYWxpZ247CisJfQorCWFsaWduZWQgPSBsZW4gJiB+ VlhfQUxJR05fTUFTSzsKKwlyZW1haW5pbmcgPSBsZW4gJiBWWF9BTElHTl9NQVNLOworCisJLyog UHJvY2VzcyBtYWpvciBwYXJ0IG9mIHRoZSBkYXRhIHdpdGggaHcgYWNjZWxlcmF0aW9uICovCisJ aWYgKGFsaWduZWQpCisJeworCQljcmMgPSBwZ19ic3dhcDMyKGNyYzMyX2xlX3ZnZm1fMTYocGdf YnN3YXAzMihjcmMpLCBidWYsIChzaXplX3QpIGFsaWduZWQpKTsKKwl9CisKKwkvKiBQcm9jZXNz IHJlbWFpbmluZyBieXRlcyB0aGF0IGNvdWxkIG5vdCBiZSBoYW5kbGVkIGJ5IGh3ICovCisJaWYg KHJlbWFpbmluZykKKwl7CisJCWNyYyA9IHBnX2NvbXBfY3JjMzJjX3NiOChjcmMsIGJ1ZiArIGFs aWduZWQsIHJlbWFpbmluZyk7CisJfQorCisJcmV0dXJuIGNyYzsKK30KLS0gCjIuNTAuMAoK --=-RmcUC5Q/NNcXYel5UGTV--