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.96) (envelope-from ) id 1w6Hem-0048q7-0l for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 00:36:05 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w6Hej-00D5Oe-2A for pgsql-hackers@arkaria.postgresql.org; Sat, 28 Mar 2026 00:36:02 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w6Hei-00D5OV-12 for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2026 00:36:01 +0000 Received: from mail-wm1-x330.google.com ([2a00:1450:4864:20::330]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w6Hee-00000001PqB-1aS8 for pgsql-hackers@lists.postgresql.org; Sat, 28 Mar 2026 00:35:59 +0000 Received: by mail-wm1-x330.google.com with SMTP id 5b1f17b1804b1-48538c5956bso25977485e9.0 for ; Fri, 27 Mar 2026 17:35:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1774658153; cv=none; d=google.com; s=arc-20240605; b=GUmack7SHQrKEEdK/NMH+UXkmMoceGIc3OFLtG9AZzzJzqdVZtlhGDlIVeJYPgfq38 m2zdzNsSwm2Cw7DD7pdwYbbTXxTOvHSYL3VoEqe0ir2xATIIUzGX6DkFiGa6TKFiSe0/ 7DH/PMCDG7Op8C+JHfzBmGlLX50saVumDCTqK1WaDM08qkqXnzh9K6xo7P0hg6r86iLy wYyYfq9QBFPfvE+ztUJo1FDs3TnrvK6cL73HIRDcmq6ZtzGF9vATBXMwwV/9EuE4CgoI AaahE47zcAEtP5tg1LwMpuBmEKExvQAkyFdb22oD9obC0aXTI+tUNXXWmENRZfcE1+t2 earA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=Onq4v57o2kI8pxdSUOSsazml8lX+PsBo8Z9xAO+iphQ=; fh=Qh7axg5Jc9jsSXVrbYbJkULfmLAcd6pVffWnAlP77nc=; b=CGVY0Sue8EwU1UVpEIiYkloOcH5ztO8BvR1nLWVviNlyj6na4sMQ1exTRrm1olzUao 7os/zkE1cxRQFwTyWNgpUgUV59TvaIEPaG96TpoRTHSdqcAP1eK/oIz8fqsp7MqrTDo4 jSiC7y0ZrvEBZxt+YAXMG70t2mXq+pcU3C4s07bOfC8pTJCszg2ACicLyCcYeiBcIvb3 jDY84GU+WKyGhqXJrZIPviZSLaOfEUS3riG18zyqd7kLSC6DH8tXwMl7xxEcJNZhLtaQ LYtrhv7jUQaDI7HaVWbD+tvibEP7OymvCW5OiW+N6UD+y+wdV7BQheHDenwPMy7TD/9+ Y8Jg==; darn=lists.postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1774658153; x=1775262953; darn=lists.postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=Onq4v57o2kI8pxdSUOSsazml8lX+PsBo8Z9xAO+iphQ=; b=hcMDH7zm9eASdG/YXcueLShp+CbuLwxnqWUBYNHcdI6iWSzmlljZTzM84bh8r9KvHP 7JgRfa3zQAqUDrp9pctA0ZLbZWbNOzOtPU2KxVHqqpT9hgbt2pBebLVmhlQ30ldKg86u wtBHnEAaqHlVzfbUwbfUvVyBbEOrmUp7t0BfwR64VRTlkz07yZ8RZHgeG/znQkNOqCSu 1np5JnfpF8ZzU3VFtVBB4mYF+7T+ejSUP0rn4YsJEpXlTs0lNtPwQonYXoiMytyolxil /OmAb5NjYt7bvVtmYdqalU3NlbPBDV3NrezWddS+UQzaxKM41K4j/MqPCe/cCAVQxS/9 +1KA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1774658153; x=1775262953; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=Onq4v57o2kI8pxdSUOSsazml8lX+PsBo8Z9xAO+iphQ=; b=Wsd8lGmegDMCmyicmzRyCgngtnxLqBlioisvidrwSAXQXqGDlOE0vzXBpjl+gRakzM nHWXzYrzfBiEcIwRQs1v1M33YgKPTs3W4Osipo+1FkmC8Z/HS1O/rXo2DE3PKZTc3KVo C+lPx4gWCXHf8W5TQo+6aiQJkujjuLPnWjj3QCAf6xVteOv0pN+9PytTtorMgg3i03V4 T7zmBCzJxSr1R16RPLrKH4mmRfczHj1SetpmbnPtrQy4McKxjzXrsqqpSBOJpXryxoze g22L490SAvhbPUQLtkwPgaWSXsNEbQcylSTCLRj+v0kAFbMdK/2wQ4yffXR/gs5JfJLT 21jw== X-Forwarded-Encrypted: i=1; AJvYcCVc5xFN7qmYDhjkB0rPhaBqtVtDVKNdTxeaAdWbDWMzEMsG4tma2GiRPNdEfJPrAB+FCUvYhqbZoq68uSYl@lists.postgresql.org X-Gm-Message-State: AOJu0YyKWTXs4T0vAVwjvlcC4cXbf5jUrURIjvK8iCDD5V/OBhD3HHn0 tnNAK2djY1wA0YWMo5BFiWjUyOS8P/WYWXOOFft5/YDGhqd2+3NR4NJG7izy8vKpSvzSZgmkpVt tcYceG1YmEg2mMkZsfsNQuG8dF8mxUrOsa8bAYbZs1g== X-Gm-Gg: ATEYQzwCpMdwNtumH9pdjABDPxgGChxDdvml2+kSEHxvkmN2JcRNSglt6MAIZ7fbWsb /YqgSBbW4thQ7VcYe+a+em30fTG7T4yMriuZDbcpuv7qyTRppAzXvwN6O0lKeqaLZsfFocd5v8W UgTcs+edFPiXQe1kpPPjUfN0Wtq8QYE+W+1ZjFwUM4yi0DTsVTs7i63p6ev5qTeaDFGQTPcR8fx noTv9ZnFgFuICO+gQbsI2205vv1XgIbVeqQRcgd7ZjZhbPDN6xgRExxlmoYOGkbag6p4HAuDl/+ VYuR3kTAywsjUkLeCsRcIMyqwCP8Cz0XHnou6AfnqqpuFZYGVyTiew== X-Received: by 2002:a05:600c:4f11:b0:487:203c:c146 with SMTP id 5b1f17b1804b1-48722b8f849mr146535165e9.5.1774658152544; Fri, 27 Mar 2026 17:35:52 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Peter Geoghegan Date: Fri, 27 Mar 2026 20:35:24 -0400 X-Gm-Features: AQROBzBYRL2fgUe8Ew3PKVO6usp824jSE2bLQi1t9y-rIDrln-OLe08DQw8ISsY Message-ID: Subject: Re: index prefetching To: Andres Freund Cc: Tomas Vondra , Alexandre Felipe , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="000000000000c86eaf064e0acc3f" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000c86eaf064e0acc3f Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Mar 22, 2026 at 9:14=E2=80=AFPM Peter Geoghegan wrote: > V17 is attached. This addresses most of your feedback, but defers > dealing with the trickier parts for now. Attached is v18, which addresses the tricky issues I skipped in v17. Highlights: * New commit (the first) that adds a heapam_indexscan.c file, and moves all of the relevant existing heapam_handler.c functions over to this new file. This commit is strictly mechanical, and has no functional impact. * Another new commit (the second) adds the new slot-based index scan interface, and pushes the VM lookups that currently take place in nodeIndexonlyScan.c into heapam. This includes the instrumentation changes that were previously in their own small patch. It also includes the VISITED_PAGES_LIMIT stuff -- there's no longer any commit that breaks VISITED_PAGES_LIMIT, nor is there a later commit that subsequently restores the functionality. * We now extract one key piece of infrastructure that other table AMs can now reuse to manage their own index scan batches: a new inline function called tableam_util_fetch_next_batch now appears as an indexbatch.h inline function. This function (which appeared under a different name in v17) manages deciding whether to call amgetbatch (performing the amgetbatch call when needed) or to simply return the next batch in line (because such a batch already exists/is already loaded in the ring buffer from earlier). It also detects and handles cross-batch changes in scan direction, and sets/reads the fields that track when a batch is definitely the last one in the given scan direction. I tried to go further by also placing the bulk of the code in heapam_index_getnext_scanbatch_pos in indexbatch.h, but ultimately concluded that it wasn't worth it. There isn't much code in heapam_index_getnext_scanbatch_pos to generalize. Some of that code coordinates quite directly with the heapam read stream callback. * Added an "isGuarded" field to IndexScanBatchData. That way we can assert that any batch loaded within the read stream callback is already unguarded/has no batch index page buffer pin still held. The field isn't just for assertions, though. We also rely on it in one or two places during release builds, which seemed clearer to me. For example, we no longer require that amunguardbatch routines be idempotent, which seems like a minor improvement. * Other work is broken out into its own commit, to better highlight issues that aren't strictly related to the amgetbatch changes. Specifically, a new commit adds the "don't unpin on rescan" behavior. These changes, which first appeared in the main amgetbatch commit, aim to minimize regressions with cached workloads (this was discussed briefly upthread, plus Andres and I discussed it over IM some weeks back). * Replaced what was previously an assert with an equivalent pg_assume(), within heapam_index_getnext_scanbatch_pos -- which is a very hot function. We now "pg_assume(batchringbuf->headBatch =3D=3D scanPos->batch)", allowing the compiler to exploit this existing invariant. This seems to help the compiler generate better code, presumably by allowing more efficient register allocation. I haven't looked at the disassembly just yet, but it helps with certain microbenchmarks enough to matter. * The "Add UnlockBufferGetLSN utility function" commit now uses an atomic operation (in the common case where it actually drops the index page's pin), just like UnlockReleaseBuffer itself following Andres' commit f39cb8c011062d65e146c1e9d1aae221e96d8320 from today. I completed this item quickly, after pulling from master a little while ago. The expectation for UnlockBufferGetLSN is that it be at least as good as a BufferGetLSNAtomic followed by a UnlockReleaseBuffer, so IMV it made sense to include this last minute addition in v18. * The "don't wait" patches are no longer included, since Andres committed them to the master branch just now. Thanks to both you (Andres) and Melanie for taking care of this very thorny issue! I believe I have now acted on all of Andres' feedback, with one minor exception: Andres disliked how we use 'if (scan->xs_heapfetch)' to determine whether to use the scan's batch cache (we don't want to use it at all if the scan is ending). I just ran out of steam, so this version doesn't address the problem. But I'm still tracking it as an open item (I don't disagree with Andres, but this problem is slightly awkward). Note that I *did* create a helper function here, so we at least avoid having 2 copies of the loop that looks for a free cache batch slot. -- Peter Geoghegan --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0017-Dirty-hack-to-make-read_stream_reset-end-not-wai.patch" Content-Disposition: attachment; filename="v18-0017-Dirty-hack-to-make-read_stream_reset-end-not-wai.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll36j2 RnJvbSA3MGJhMjZmZjJmMjgyNGEyYTVlMTFiZjk4NzYwYTQ5Nzc1ODFhZWNmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDY6NTggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAx Ny8xOV0gRGlydHkgaGFjayB0byBtYWtlIHJlYWRfc3RyZWFtX3Jlc2V0KCkvZW5kKCkgbm90CiB3 YWl0IGZvciBJTwoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmggICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYyAgICAgICAgIHwgMjcg KysrKysrKysrKysrKysrKysrKysrKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMyICsrKysrKysrKysrKysrKysrKysrKystLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCA1 NCBpbnNlcnRpb25zKCspLCA2IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L3N0b3JhZ2UvYWlvLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpby5oCmluZGV4IGVjNTQzYjc4 NC4uYzE4NGU5N2E5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpby5oCisrKyBi L3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvLmgKQEAgLTMyOCw2ICszMjgsNyBAQCBleHRlcm4gaW50 CXBnYWlvX3dyZWZfZ2V0X2lkKFBnQWlvV2FpdFJlZiAqaW93KTsKIGV4dGVybiB2b2lkIHBnYWlv X3dyZWZfd2FpdChQZ0Fpb1dhaXRSZWYgKmlvdyk7CiBleHRlcm4gYm9vbCBwZ2Fpb193cmVmX2No ZWNrX2RvbmUoUGdBaW9XYWl0UmVmICppb3cpOwogCitleHRlcm4gdm9pZCBwZ2Fpb193cmVmX2Rp c2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KTsKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9haW8uYwppbmRleCA0ZTc0MjAzOGQuLjQ5ZWI2NzdhZCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKQEAgLTEwNTUsNiArMTA1NSwzMyBAQCBwZ2Fpb193cmVmX2NoZWNr X2RvbmUoUGdBaW9XYWl0UmVmICppb3cpCiAJcmV0dXJuIGZhbHNlOwogfQogCit2b2lkCitwZ2Fp b193cmVmX2Rpc2NhcmRfcmVzdWx0KFBnQWlvV2FpdFJlZiAqaW93KQoreworCXVpbnQ2NAkJcmVm X2dlbmVyYXRpb247CisJYm9vbAkJYW1fb3duZXI7CisJUGdBaW9IYW5kbGUgKmlvaDsKKwlQZ0Fp b0hhbmRsZVN0YXRlIHN0YXRlOworCisJaW9oID0gcGdhaW9faW9fZnJvbV93cmVmKGlvdywgJnJl Zl9nZW5lcmF0aW9uKTsKKworCWFtX293bmVyID0gaW9oLT5vd25lcl9wcm9jbm8gPT0gTXlQcm9j TnVtYmVyOworCisJaWYgKCFhbV9vd25lcikKKwkJZWxvZyhFUlJPUiwgIm5vdCB5b3UiKTsKKwor CWlmIChwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCByZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSkK KwkJcmV0dXJuOworCisJcGdhaW9fZGVidWdfaW8oREVCVUcyLCBpb2gsCisJCQkJICAgImRpc2Nh cmRpbmcgcmVzdWx0ICVwIiwKKwkJCQkgICBpb2gtPnJlcG9ydF9yZXR1cm4pOworCisJaWYgKGlv aC0+cmVzb3duZXIpCisJCXBnYWlvX2lvX3JlbGVhc2VfcmVzb3duZXIoJmlvaC0+cmVzb3duZXJf bm9kZSwgZmFsc2UpOworfQorCisKIAogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggZTNjMTZiZDE3Li5kMzBjZGE4Njgg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtNTI0LDcgKzUyNCw3IEBA IHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVhZFN0cmVhbSAqc3RyZWFtKQogCQkoc3RyZWFtLT5w ZW5kaW5nX3JlYWRfbmJsb2NrcyA9PSBzdHJlYW0tPmlvX2NvbWJpbmVfbGltaXQgfHwKIAkJIChz dHJlYW0tPnBlbmRpbmdfcmVhZF9uYmxvY2tzID49IHN0cmVhbS0+ZGlzdGFuY2UgJiYKIAkJICBz dHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApIHx8Ci0JCSBzdHJlYW0tPmRpc3RhbmNlID09IDAp ICYmCisJCSBzdHJlYW0tPmRpc3RhbmNlIDw9IDApICYmCiAJCXN0cmVhbS0+aW9zX2luX3Byb2dy ZXNzIDwgc3RyZWFtLT5tYXhfaW9zKQogCQlyZWFkX3N0cmVhbV9zdGFydF9wZW5kaW5nX3JlYWQo c3RyZWFtKTsKIApAQCAtNTM0LDcgKzUzNCw3IEBAIHJlYWRfc3RyZWFtX2xvb2tfYWhlYWQoUmVh ZFN0cmVhbSAqc3RyZWFtKQogCSAqIHN0cmVhbS4gIEluIHRoZSB3b3JzdCBjYXNlIHdlIGNhbiBh bHdheXMgbWFrZSBwcm9ncmVzcyBvbmUgYnVmZmVyIGF0IGEKIAkgKiB0aW1lLgogCSAqLwotCUFz c2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNlID09IDAp OworCUFzc2VydChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID4gMCB8fCBzdHJlYW0tPmRpc3RhbmNl IDw9IDApOwogCiAJaWYgKHN0cmVhbS0+YmF0Y2hfbW9kZSkKIAkJcGdhaW9fZXhpdF9iYXRjaG1v ZGUoKTsKQEAgLTkxMCw3ICs5MTAsNyBAQCByZWFkX3N0cmVhbV9uZXh0X2J1ZmZlcihSZWFkU3Ry ZWFtICpzdHJlYW0sIHZvaWQgKipwZXJfYnVmZmVyX2RhdGEpCiAJCUFzc2VydChzdHJlYW0tPm9s ZGVzdF9idWZmZXJfaW5kZXggPT0gc3RyZWFtLT5uZXh0X2J1ZmZlcl9pbmRleCk7CiAKIAkJLyog RW5kIG9mIHN0cmVhbSByZWFjaGVkPyAgKi8KLQkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPT0gMCkK KwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPD0gMCkKIAkJCXJldHVybiBJbnZhbGlkQnVmZmVyOwog CiAJCS8qCkBAIC05MjQsNyArOTI0LDcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCQkvKiBFbmQgb2Ygc3RyZWFt IHJlYWNoZWQ/ICovCiAJCWlmIChzdHJlYW0tPnBpbm5lZF9idWZmZXJzID09IDApCiAJCXsKLQkJ CUFzc2VydChzdHJlYW0tPmRpc3RhbmNlID09IDApOworCQkJQXNzZXJ0KHN0cmVhbS0+ZGlzdGFu Y2UgPD0gMCk7CiAJCQlyZXR1cm4gSW52YWxpZEJ1ZmZlcjsKIAkJfQogCX0KQEAgLTk1Miw3ICs5 NTIsMjcgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lk ICoqcGVyX2J1ZmZlcl9kYXRhKQogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1 ZmZlcnMgPT0KIAkJCSAgICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwog Ci0JCW5lZWRlZF93YWl0ID0gV2FpdFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0u b3ApOworCQkvKgorCQkgKiBJZiB0aGUgc3RyZWFtIGhhcyBiZWVuIHJlc2V0LCBkb24ndCBldmVu IHdhaXQgZm9yIHRoZSBJTywganVzdAorCQkgKiBkaXNjYXJkIGl0LgorCQkgKi8KKwkJaWYgKHN0 cmVhbS0+ZGlzdGFuY2UgPCAwKQorCQl7CisJCQlpZiAocGdhaW9fd3JlZl92YWxpZCgmc3RyZWFt LT5pb3NbaW9faW5kZXhdLm9wLmlvX3dyZWYpICYmCisJCQkJIXN0cmVhbS0+aW9zW2lvX2luZGV4 XS5vcC5mb3JlaWduX2lvKQorCQkJeworCQkJCXBnYWlvX3dyZWZfZGlzY2FyZF9yZXN1bHQoJnN0 cmVhbS0+aW9zW2lvX2luZGV4XS5vcC5pb193cmVmKTsKKwkJCQlwZ2Fpb193cmVmX2NsZWFyKCZz dHJlYW0tPmlvc1tpb19pbmRleF0ub3AuaW9fd3JlZik7CisJCQl9CisJCQllbHNlCisJCQkJV2Fp dFJlYWRCdWZmZXJzKCZzdHJlYW0tPmlvc1tpb19pbmRleF0ub3ApOworCisJCQluZWVkZWRfd2Fp dCA9IGZhbHNlOworCQl9CisJCWVsc2UKKwkJeworCQkJbmVlZGVkX3dhaXQgPSBXYWl0UmVhZEJ1 ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CisJCX0KIAogCQlBc3NlcnQoc3RyZWFt LT5pb3NfaW5fcHJvZ3Jlc3MgPiAwKTsKIAkJc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MtLTsKQEAg LTExMjksNyArMTE0OSw3IEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJlYW0gKnN0cmVhbSkK IAlCdWZmZXIJCWJ1ZmZlcjsKIAogCS8qIFN0b3AgbG9va2luZyBhaGVhZC4gKi8KLQlzdHJlYW0t PmRpc3RhbmNlID0gMDsKKwlzdHJlYW0tPmRpc3RhbmNlID0gLTE7CiAKIAkvKiBGb3JnZXQgYnVm ZmVyZWQgYmxvY2sgbnVtYmVyIGFuZCBmYXN0IHBhdGggc3RhdGUuICovCiAJc3RyZWFtLT5idWZm ZXJlZF9ibG9ja251bSA9IEludmFsaWRCbG9ja051bWJlcjsKLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0016-WIP-instrumentation-Account-for-resource-usage-u.patch" Content-Disposition: attachment; filename="v18-0016-WIP-instrumentation-Account-for-resource-usage-u.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll36n3 RnJvbSA0NDQ3NWU2MjA4ZGRiNWQwM2UwYzY5MmVmZDNlZjg4ZjhjYmNmYTJlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFRodSwgMTkgTWFyIDIwMjYgMjM6MDg6MjkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAx Ni8xOV0gV0lQOiBpbnN0cnVtZW50YXRpb246IEFjY291bnQgZm9yIHJlc291cmNlIHVzYWdlCiB1 cmluZyByZXNjYW5zCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5j IHwgMTkgKysrKysrKysrKysrKysrKystLQogMSBmaWxlIGNoYW5nZWQsIDE3IGluc2VydGlvbnMo KyksIDIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0FtaS5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCmluZGV4IDk3OWE4NTJmZS4u MDM5Mzk1MjFiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKKysr IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0FtaS5jCkBAIC03Nyw5ICs3NywxNSBAQCBzdGF0 aWMgYm9vbCBJbmRleFN1cHBvcnRzQmFja3dhcmRTY2FuKE9pZCBpbmRleGlkKTsKIHZvaWQKIEV4 ZWNSZVNjYW4oUGxhblN0YXRlICpub2RlKQogewotCS8qIElmIGNvbGxlY3RpbmcgdGltaW5nIHN0 YXRzLCB1cGRhdGUgdGhlbSAqLwogCWlmIChub2RlLT5pbnN0cnVtZW50KQotCQlJbnN0ckVuZExv b3Aobm9kZS0+aW5zdHJ1bWVudCk7CisJeworCQkvKgorCQkgKiBSZXNjYW4gaW4gc29tZSBub2Rl IHR5cGVzIGNhbiB0YWtlIGxvbmcgZW5vdWdoIHRvIGJlIHdvcnRoCisJCSAqIGFjY291bnRpbmcg Zm9yLgorCQkgKi8KKwkJaWYgKG5vZGUtPmluc3RydW1lbnQtPnJ1bm5pbmcpCisJCQlJbnN0clN0 YXJ0Tm9kZShub2RlLT5pbnN0cnVtZW50KTsKKwl9CiAKIAkvKgogCSAqIElmIHdlIGhhdmUgY2hh bmdlZCBwYXJhbWV0ZXJzLCBwcm9wYWdhdGUgdGhhdCBpbmZvLgpAQCAtMzA5LDYgKzMxNSwxNSBA QCBFeGVjUmVTY2FuKFBsYW5TdGF0ZSAqbm9kZSkKIAkJYm1zX2ZyZWUobm9kZS0+Y2hnUGFyYW0p OwogCQlub2RlLT5jaGdQYXJhbSA9IE5VTEw7CiAJfQorCisJaWYgKG5vZGUtPmluc3RydW1lbnQp CisJeworCQlpZiAobm9kZS0+aW5zdHJ1bWVudC0+cnVubmluZykKKwkJCUluc3RyU3RvcE5vZGUo bm9kZS0+aW5zdHJ1bWVudCwgMCk7CisKKwkJLyogSWYgY29sbGVjdGluZyB0aW1pbmcgc3RhdHMs IHVwZGF0ZSB0aGVtICovCisJCUluc3RyRW5kTG9vcChub2RlLT5pbnN0cnVtZW50KTsKKwl9CiB9 CiAKIC8qCi0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0019-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Disposition: attachment; filename="v18-0019-WIP-aio-bufmgr-Fix-race-condition-leading-to-dea.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll3620 RnJvbSAzYTJhYjAyMzBjMWU3MWY0NWQ2MDdhNTg2OTdkYjk4YjU4NjFlNGI1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTk6MDggLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAx OS8xOV0gV0lQOiBhaW86IGJ1Zm1ncjogRml4IHJhY2UgY29uZGl0aW9uIGxlYWRpbmcgdG8KIGRl YWRsb2NrcyB3aXRoIGlvX3VyaW5nCgpJZiBiYWNrZW5kIEEgaXMgaW4gdGhlIHByb2Nlc3Mgb2Yg c3RhcnRpbmcgSU8gZm9yIGEgYnVmZmVyLCB0aGVyZSBpcyBhIHNob3J0CnBlcmlvZCBpbiB3aGlj aCB0aGUgYnVmZmVyIGlzIG1hcmtlZCBhcyBJT19JTl9QUk9HUkVTUyB3aXRob3V0IGhhdmluZyBh bgphc3NvY2lhdGVkIEFJTyB3YWl0IHJlZmVyZW5jZS4gSWYgYSBiYWNrZW5kIEIgZG9lcyBXYWl0 SU8oKSBvbiB0aGF0IGJ1ZmZlciwKaXQnbGwgd2FpdCBmb3IgdGhlIGJ1ZmZlcidzIElPIGNvbmRp dGlvbiB2YXJpYWJsZSB0byBiZSBzZXQuIE1vc3Qgb2YgdGhlIHRpbWUKdGhhdCBpcyBPSywgd2hl biB0aGUgSU8gb24gdGhlIGJ1ZmZlciBmaW5pc2hlcywgdGhlIENWIHdpbGwgYmUgc2lnbmFsbGVk LgpIb3dldmVyLCB3aXRoIGlvX3VyaW5nLCBpdCBpcyBwb3NzaWJsZSB0aGF0IHRoZSBpc3N1ZXIg KEEpIG9mIHRoZSBJTyBuZXZlcgpnZXRzIGFyb3VuZCB0byBkb2luZyBzbywgZS5nLiBiZWNhdXNl IGl0IGlzIHdhaXRpbmcgZm9yIHNvbWV0aGluZyBkb25lIGJ5IEIuCgpUbyBmaXggdGhhdCwgd2Ug bmVlZCB0byBzaWduYWwgdGhlIENWIHdoZW4gc3RhZ2luZyBJTy4gVGhhdCdzIGFubm95aW5nIGFz IENWCmJyb2FkY2FzdHMgYXJlIG5vdCBjaGVhcC4gU28gd2UgYXQgbGVhc3QgYXZvaWQgaXQgZm9y IHRoZSBjb21tb24gY2FzZSBvZiBJTwpiZWluZyBleGVjdXRlZCBzeW5jaHJvbm91c2x5LgoKSSBo b3BlIHRoYXQgZXZlbnR1YWxseSB3ZSBjYW4gZ2V0IGF3YXkgZnJvbSBuZWVkaW5nIG11bHRpcGxl IHN5c3RlbXMgZm9yCnNpZ25hbGxpbmcgSU8gY29tcGxldGlvbiwgYnV0IHdlIGFyZSBjbGVhcmx5 IG5vdCB0aGVyZSB5ZXQuCi0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAyMiArKysrKysrKysrKysrKysrKysrLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTkgaW5zZXJ0aW9u cygrKSwgMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCmluZGV4 IDg5NmVjMmE0ZS4uZTFjNDRmMDVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2J1 ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYwpA QCAtODM2NCw3ICs4MzY0LDcgQEAgTWFya0RpcnR5QWxsVW5waW5uZWRCdWZmZXJzKGludDMyICpi dWZmZXJzX2RpcnRpZWQsCiAgKiByZXBsYWNlZCB3aGlsZSBJTyBpcyBvbmdvaW5nLgogICovCiBz dGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgdm9pZAotYnVmZmVyX3N0YWdlX2NvbW1v bihQZ0Fpb0hhbmRsZSAqaW9oLCBib29sIGlzX3dyaXRlLCBib29sIGlzX3RlbXApCitidWZmZXJf c3RhZ2VfY29tbW9uKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ4IGNiX2RhdGEsIGJvb2wgaXNfd3Jp dGUsIGJvb2wgaXNfdGVtcCkKIHsKIAl1aW50NjQJICAgKmlvX2RhdGE7CiAJdWludDgJCWhhbmRs ZV9kYXRhX2xlbjsKQEAgLTg0NjMsNyArODQ2MywyMyBAQCBidWZmZXJfc3RhZ2VfY29tbW9uKFBn QWlvSGFuZGxlICppb2gsIGJvb2wgaXNfd3JpdGUsIGJvb2wgaXNfdGVtcCkKIAkJICoga2VlcHMg dHJhY2suCiAJCSAqLwogCQlpZiAoIWlzX3RlbXApCisJCXsKIAkJCVJlc291cmNlT3duZXJGb3Jn ZXRCdWZmZXJJTyhDdXJyZW50UmVzb3VyY2VPd25lciwgYnVmZmVyKTsKKworCQkJLyoKKwkJCSAq IEEgYmFja2VuZCBtaWdodCBoYXZlIHN0YXJ0ZWQgd2FpdGluZyBmb3IgdGhlIElPIHVzaW5nIHRo ZQorCQkJICogYnVmZmVyJ3MgY29uZGl0aW9uIHZhcmlhYmxlLCBidXQgb25jZSB0aGUgSU8gaXMg c3VibWl0dGVkLCBpdAorCQkJICogc2hvdWxkIHdhaXQgdmlhIHRoZSBBSU8gc3Vic3lzdGVtLCBh cyBhIHdhaXRlciBtaWdodCBuZWVkIHRvCisJCQkgKiBjb21wbGV0ZSB0aGUgSU8uCisJCQkgKgor CQkJICogSG93ZXZlciwgZG9pbmcgYnJvYWRjYXN0cyBpcyBub3QgZnJlZSwgc28gd2UgbGlrZSB0 byBhdm9pZCBpdAorCQkJICogd2hlbiBub3QgbmVjZXNzYXJ5LiBJZiB0aGUgSU8gaXMgYmVpbmcg ZXhlY3V0ZWQgc3luY2hyb25vdXNseSwKKwkJCSAqIHRoaXMgYmFja2VuZCB3aWxsIGFsd2F5cyBl bmQgdXAgc2lnbmFsbGluZyB0aGUgSU9DViB3aXRob3V0CisJCQkgKiBmdXJ0aGVyIHdhaXRpbmcs IHRoZXJlZm9yZSBhdm9pZCBkb2luZyBzbyBoZXJlLgorCQkJICovCisJCQlpZiAoIShjYl9kYXRh ICYgUkVBRF9CVUZGRVJTX1NZTkNIUk9OT1VTTFkpKQorCQkJCUNvbmRpdGlvblZhcmlhYmxlQnJv YWRjYXN0KEJ1ZmZlckRlc2NyaXB0b3JHZXRJT0NWKGJ1Zl9oZHIpKTsKKwkJfQogCX0KIH0KIApA QCAtODk1Miw3ICs4OTY4LDcgQEAgYnVmZmVyX3JlYWR2X3JlcG9ydChQZ0Fpb1Jlc3VsdCByZXN1 bHQsIGNvbnN0IFBnQWlvVGFyZ2V0RGF0YSAqdGQsCiBzdGF0aWMgdm9pZAogc2hhcmVkX2J1ZmZl cl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQogewotCWJ1ZmZl cl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgZmFsc2UpOworCWJ1ZmZlcl9zdGFnZV9jb21tb24o aW9oLCBjYl9kYXRhLCBmYWxzZSwgZmFsc2UpOwogfQogCiBzdGF0aWMgUGdBaW9SZXN1bHQKQEAg LTkwMDMsNyArOTAxOSw3IEBAIHNoYXJlZF9idWZmZXJfcmVhZHZfY29tcGxldGVfbG9jYWwoUGdB aW9IYW5kbGUgKmlvaCwgUGdBaW9SZXN1bHQgcHJpb3JfcmVzdWx0LAogc3RhdGljIHZvaWQKIGxv Y2FsX2J1ZmZlcl9yZWFkdl9zdGFnZShQZ0Fpb0hhbmRsZSAqaW9oLCB1aW50OCBjYl9kYXRhKQog ewotCWJ1ZmZlcl9zdGFnZV9jb21tb24oaW9oLCBmYWxzZSwgdHJ1ZSk7CisJYnVmZmVyX3N0YWdl X2NvbW1vbihpb2gsIGNiX2RhdGEsIGZhbHNlLCB0cnVlKTsKIH0KIAogc3RhdGljIFBnQWlvUmVz dWx0Ci0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0018-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Disposition: attachment; filename="v18-0018-aio-Fix-pgaio_io_wait-for-staged-IOs-B.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll36f1 RnJvbSAyYTFlMTlmNjFjYTM4ZjE0NWVmNWFjMWZjNmVmMWJjOTQ3MGY1MmM3IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFN1biwgMjIgTWFyIDIwMjYgMTU6MTI6NDEgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAx OC8xOV0gYWlvOiBGaXggcGdhaW9faW9fd2FpdCgpIGZvciBzdGFnZWQgSU9zIChCKS4KClByZXZp b3VzbHksIHBnYWlvX2lvX3dhaXQoKSdzIGNhc2VzIGZvciBQR0FJT19IU19ERUZJTkVEIGFuZApQ R0FJT19IU19TVEFHRUQgZmVsbCB0aHJvdWdoIHRvIHdhaXRpbmcgZm9yIGNvbXBsZXRpb24uICBU aGUgb3duZXIgb25seQpwcm9taXNlcyB0byBhZHZhbmNlIGl0IHRvIFBHQUlPX0hTX1NVQk1JVFRF RC4gIFRoZSB3YWl0ZXIgbmVlZHMgdG8gYmUKcHJlcGFyZWQgdG8gY2FsbCAtPndhaXRfb25lKCkg aXRzZWxmIG9uY2UgdGhlIElPIGlzIHN1Ym1pdHRlZCBpbiBvcmRlcgp0byBndWFyYW50ZWUgcHJv Z3Jlc3MgYW5kIGF2b2lkIGRlYWRsb2NrcyBvbiBJTyBtZXRob2RzIHRoYXQgcHJvdmlkZQotPndh aXRfb25lKCkuCgpJbnRyb2R1Y2UgYSBuZXcgcGVyLWJhY2tlbmQgY29uZGl0aW9uIHZhcmlhYmxl IHN1Ym1pdF9jdiwgd29rZW4gYnkgYnkKcGdhaW9fc3VibWl0X3N0YWdlKCksIGFuZCB1c2UgaXQg dG8gd2FpdCBmb3IgdGhlIHN0YXRlIHRvIGFkdmFuY2UuICBUaGUKbmV3IGJyb2FkY2FzdCBkb2Vz bid0IHNlZW0gdG8gY2F1c2UgYW55IG1lYXN1cmFibGUgc2xvd2Rvd24sIHNvIGlkZWFzCmZvciBv cHRpbWl6aW5nIHRoZSBjb21tb24gbm8td2FpdGVycyBjYXNlIHdlcmUgYWJhbmRvbmVkIGZvciBu b3cuCgpJdCBtYXkgbm90IGJlIHBvc3NpYmxlIHRvIHJlYWNoIGFueSByZWFsIGRlYWRsb2NrIHdp dGggZXhpc3RpbmcgQUlPCnVzZXJzLCBidXQgdGhhdCBzaXR1YXRpb24gY291bGQgY2hhbmdlLiAg VGhlcmUncyBhbHNvIG5vIHJlYXNvbiB0aGUKd2FpdGVyIHNob3VsZG4ndCBiZWdpbiB0byB3YWl0 IHZpYSB0aGUgSU8gbWV0aG9kIGFzIHNvb24gYXMgcG9zc2libGUKZXZlbiB3aXRob3V0IGEgZGVh ZGxvY2suCgpQaWNrZWQgdXAgYnkgdGVzdGluZyBhIHByb3Bvc2VkIElPIG1ldGhvZCB0aGF0IGhh cyAtPndhaXRfb25lKCksIGxpa2UKaW9fbWV0aG9kPWlvX3VyaW5nLCBhbmQgY29kZSByZXZpZXcu CgpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKUmV2aWV3ZWQtYnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQSUyQmhVS0cl MkJtWllyU2RuaGstWHJCWU8xOEg4MjlLNzdTOWdNS1VzeWtPaVRKdHFCNDNnJTQwbWFpbC5nbWFp bC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oICAgICAgICAgICAg fCAgNyArKysKIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgICAgICB8 IDUwICsrKysrKysrKysrKysrKystLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpb19pbml0 LmMgICAgICAgICAgICB8ICAxICsKIC4uLi91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVz LnR4dCAgICAgICB8ICAxICsKIDQgZmlsZXMgY2hhbmdlZCwgNTEgaW5zZXJ0aW9ucygrKSwgOCBk ZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5h bC5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwuaAppbmRleCAzM2UxZTJkYzAu LmRlZWM4M2JkMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9haW9faW50ZXJuYWwu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCkBAIC0yMTQsNiArMjE0 LDEzIEBAIHR5cGVkZWYgc3RydWN0IFBnQWlvQmFja2VuZAogCXVpbnQxNgkJbnVtX3N0YWdlZF9p b3M7CiAJUGdBaW9IYW5kbGUgKnN0YWdlZF9pb3NbUEdBSU9fU1VCTUlUX0JBVENIX1NJWkVdOwog CisJLyoKKwkgKiBPdGhlciBiYWNrZW5kcyBzb21ldGltZXMgbmVlZCB0byB3YWl0IGZvciB0aGUg b3duaW5nIGJhY2tlbmQgdG8gc3VibWl0LgorCSAqIFRoZSBwZXItSU8gQ1Ygd291bGQgd29yayBm b3IgdGhhdCBwdXJwb3NlLCBidXQgYSBwZXItYmFja2VuZCBDViBhbGxvd3MKKwkgKiBmb3IganVz dCBvbmUgYnJvYWRjYXN0IHBlciBzdWJtaXR0ZWQgYmF0Y2guCisJICovCisJQ29uZGl0aW9uVmFy aWFibGUgc3VibWl0X2N2OworCiAJLyoKIAkgKiBMaXN0IG9mIGluLWZsaWdodCBJT3MuIEFsc28g Y29udGFpbnMgSU9zIHRoYXQgYXJlbid0IHN0cmljdGx5IHNwZWFraW5nCiAJICogaW4tZmxpZ2h0 IGFueW1vcmUsIGJ1dCBoYXZlIGJlZW4gd2FpdGVkLWZvciBhbmQgY29tcGxldGVkIGJ5IGFub3Ro ZXIKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jIGIvc3JjL2JhY2tl bmQvc3RvcmFnZS9haW8vYWlvLmMKaW5kZXggNDllYjY3N2FkLi42OWMxMmU4ZjMgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL2Fpby5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3Jh Z2UvYWlvL2Fpby5jCkBAIC01NzEsNiArNTcxLDE2IEBAIHBnYWlvX2lvX3dhc19yZWN5Y2xlZChQ Z0Fpb0hhbmRsZSAqaW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24sIFBnQWlvSGFuZGxlU3RhdGUK IAlyZXR1cm4gaW9oLT5nZW5lcmF0aW9uICE9IHJlZl9nZW5lcmF0aW9uOwogfQogCisvKgorICog V2hldGhlciB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QuIERvbid0IGNoZWNrIHZp YSB0aGUgSU8gbWV0aG9kIGlmCisgKiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZyB0 aGUgSU8gc3luY2hyb25vdXNseS4KKyAqLworc3RhdGljIGJvb2wKK3BnYWlvX2lvX25lZWRzX3dh aXRfb25lKFBnQWlvSGFuZGxlICppb2gpCit7CisJcmV0dXJuIHBnYWlvX21ldGhvZF9vcHMtPndh aXRfb25lICYmICEoaW9oLT5mbGFncyAmIFBHQUlPX0hGX1NZTkNIUk9OT1VTKTsKK30KKwogLyoK ICAqIFdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLiBFeHRlcm5hbCBjb2RlIHNob3VsZCBuZXZlciB1 c2UgdGhpcywgb3V0c2lkZSBvZgogICogdGhlIEFJTyBzdWJzeXN0ZW0gd2FpdHMgYXJlIG9ubHkg YWxsb3dlZCB2aWEgcGdhaW9fd3JlZl93YWl0KCkuCkBAIC02MTAsMjMgKzYyMCwzOCBAQCBwZ2Fp b19pb193YWl0KFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQll bG9nKEVSUk9SLCAiSU8gaW4gd3Jvbmcgc3RhdGU6ICVkIiwgc3RhdGUpOwogCQkJCWJyZWFrOwog Ci0JCQljYXNlIFBHQUlPX0hTX1NVQk1JVFRFRDoKKwkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoK KwkJCWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCiAJCQkJLyoKLQkJCQkgKiBJZiB3ZSBuZWVkIHRv IHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRvIHNvIG5vdy4gRG9uJ3QKLQkJCQkgKiBjaGVjayB2 aWEgdGhlIElPIG1ldGhvZCBpZiB0aGUgaXNzdWluZyBiYWNrZW5kIGlzIGV4ZWN1dGluZwotCQkJ CSAqIHRoZSBJTyBzeW5jaHJvbm91c2x5LgorCQkJCSAqIFRoZSBvd25lciBoYXNuJ3Qgc3VibWl0 dGVkIHRoZSBJTyB5ZXQuIElmIHdlIG5lZWQgdG8gd2FpdAorCQkJCSAqIHZpYSB0aGUgSU8gbWV0 aG9kLCB3YWl0IGZvciBzdWJtaXNzaW9uLCBnaXZpbmcgdGhpcyBiYWNrZW5kCisJCQkJICogdGhl IGNoYW5jZSB0byBjYWxsIC0+d2FpdF9vbmUoKS4KIAkJCQkgKi8KLQkJCQlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUgJiYgIShpb2gtPmZsYWdzICYgUEdBSU9fSEZfU1lOQ0hST05PVVMp KQorCQkJCWlmIChwZ2Fpb19pb19uZWVkc193YWl0X29uZShpb2gpKQorCQkJCXsKKwkJCQkJUGdB aW9CYWNrZW5kICpiYWNrZW5kID0gJnBnYWlvX2N0bC0+YmFja2VuZF9zdGF0ZVtpb2gtPm93bmVy X3Byb2Nub107CisKKwkJCQkJQ29uZGl0aW9uVmFyaWFibGVQcmVwYXJlVG9TbGVlcCgmYmFja2Vu ZC0+c3VibWl0X2N2KTsKKwkJCQkJd2hpbGUgKCFwZ2Fpb19pb193YXNfcmVjeWNsZWQoaW9oLCBy ZWZfZ2VuZXJhdGlvbiwgJnN0YXRlKSAmJgorCQkJCQkJICAgKHN0YXRlID09IFBHQUlPX0hTX0RF RklORUQgfHwKKwkJCQkJCQlzdGF0ZSA9PSBQR0FJT19IU19TVEFHRUQpKQorCQkJCQkJQ29uZGl0 aW9uVmFyaWFibGVTbGVlcCgmYmFja2VuZC0+c3VibWl0X2N2LCBXQUlUX0VWRU5UX0FJT19JT19T VUJNSVQpOworCQkJCQlDb25kaXRpb25WYXJpYWJsZUNhbmNlbFNsZWVwKCk7CisJCQkJCWNvbnRp bnVlOworCQkJCX0KKwkJCQlwZ19mYWxsdGhyb3VnaDsKKworCQkJY2FzZSBQR0FJT19IU19TVUJN SVRURUQ6CisKKwkJCQkvKiBJZiB3ZSBuZWVkIHRvIHdhaXQgdmlhIHRoZSBJTyBtZXRob2QsIGRv IHNvIG5vdy4gKi8KKwkJCQlpZiAocGdhaW9faW9fbmVlZHNfd2FpdF9vbmUoaW9oKSkKIAkJCQl7 CiAJCQkJCXBnYWlvX21ldGhvZF9vcHMtPndhaXRfb25lKGlvaCwgcmVmX2dlbmVyYXRpb24pOwog CQkJCQljb250aW51ZTsKIAkJCQl9CiAJCQkJcGdfZmFsbHRocm91Z2g7CiAKLQkJCQkvKiB3YWl0 aW5nIGZvciBvd25lciB0byBzdWJtaXQgKi8KLQkJCWNhc2UgUEdBSU9fSFNfREVGSU5FRDoKLQkJ CWNhc2UgUEdBSU9fSFNfU1RBR0VEOgogCQkJCS8qIHdhaXRpbmcgZm9yIHJlYXBlciB0byBjb21w bGV0ZSAqLwogCQkJCS8qIGZhbGx0aHJvdWdoICovCiAJCQljYXNlIFBHQUlPX0hTX0NPTVBMRVRF RF9JTzoKQEAgLTExODQsNiArMTIwOSwxNSBAQCBwZ2Fpb19zdWJtaXRfc3RhZ2VkKHZvaWQpCiAK IAlwZ2Fpb19teV9iYWNrZW5kLT5udW1fc3RhZ2VkX2lvcyA9IDA7CiAKKwkvKgorCSAqIFdha2Ug YW55IGJhY2tlbmQgdGhhdCBzdGFydGVkIHdhaXRpbmcgZm9yIGFueSBvZiB0aGVzZSBJT3MgYmVm b3JlCisJICogc3VibWlzc2lvbiwgaWYgaXQgaXMgbmVjZXNzYXJ5IHRvIGNhbGwgLT53YWl0X29u ZSgpIHRvIGd1YXJhbnRlZQorCSAqIHByb2dyZXNzIHdpdGggdGhlIGNvbmZpZ3VyZWQgSU8gbWV0 aG9kLiAgT24gaXRzIHNpZGUsIHBnYWlvX2lvX3dhaXQoKQorCSAqIG9ubHkgd2FpdHMgZm9yIHN1 Ym1pdF9jdiBvbiBJTyBtZXRob2RzIG5lZWRpbmcgdGhhdC4KKwkgKi8KKwlpZiAocGdhaW9fbWV0 aG9kX29wcy0+d2FpdF9vbmUpCisJCUNvbmRpdGlvblZhcmlhYmxlQnJvYWRjYXN0KCZwZ2Fpb19t eV9iYWNrZW5kLT5zdWJtaXRfY3YpOworCiAJcGdhaW9fZGVidWcoREVCVUc0LAogCQkJCSJhaW86 IHN1Ym1pdHRlZCAlZCBJT3MiLAogCQkJCXRvdGFsX3N1Ym1pdHRlZCk7CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2Fpby9haW9faW5pdC5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vYWlvX2luaXQuYwppbmRleCBkM2M2OGQ4YjAuLmMyMDk1ZWY3NyAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvX2luaXQuYworKysgYi9zcmMvYmFja2VuZC9zdG9yYWdl L2Fpby9haW9faW5pdC5jCkBAIC0xODQsNiArMTg0LDcgQEAgQWlvU2htZW1Jbml0KHZvaWQpCiAK IAkJZGNsaXN0X2luaXQoJmJzLT5pZGxlX2lvcyk7CiAJCW1lbXNldChicy0+c3RhZ2VkX2lvcywg MCwgc2l6ZW9mKFBnQWlvSGFuZGxlICopICogUEdBSU9fU1VCTUlUX0JBVENIX1NJWkUpOworCQlD b25kaXRpb25WYXJpYWJsZUluaXQoJmJzLT5zdWJtaXRfY3YpOwogCQlkY2xpc3RfaW5pdCgmYnMt PmluX2ZsaWdodF9pb3MpOwogCiAJCS8qIGluaXRpYWxpemUgcGVyLWJhY2tlbmQgSU9zICovCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0eS93YWl0X2V2ZW50X25hbWVzLnR4 dCBiL3NyYy9iYWNrZW5kL3V0aWxzL2FjdGl2aXR5L3dhaXRfZXZlbnRfbmFtZXMudHh0CmluZGV4 IDZiZTgwZDJkYS4uOTQ3MTM1YTRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9hY3Rp dml0eS93YWl0X2V2ZW50X25hbWVzLnR4dAorKysgYi9zcmMvYmFja2VuZC91dGlscy9hY3Rpdml0 eS93YWl0X2V2ZW50X25hbWVzLnR4dApAQCAtMTk3LDYgKzE5Nyw3IEBAIEFCSV9jb21wYXRpYmls aXR5OgogU2VjdGlvbjogQ2xhc3NOYW1lIC0gV2FpdEV2ZW50SU8KIAogQUlPX0lPX0NPTVBMRVRJ T04JIldhaXRpbmcgZm9yIGFub3RoZXIgcHJvY2VzcyB0byBjb21wbGV0ZSBJTy4iCitBSU9fSU9f U1VCTUlUCSJXYWl0aW5nIGZvciBhbm90aGVyIHByb2Nlc3MgdG8gc3VibWl0IElPLiIKIEFJT19J T19VUklOR19TVUJNSVQJIldhaXRpbmcgZm9yIElPIHN1Ym1pc3Npb24gdmlhIGlvX3VyaW5nLiIK IEFJT19JT19VUklOR19FWEVDVVRJT04JIldhaXRpbmcgZm9yIElPIGV4ZWN1dGlvbiB2aWEgaW9f dXJpbmcuIgogQkFTRUJBQ0tVUF9SRUFECSJXYWl0aW5nIGZvciBiYXNlIGJhY2t1cCB0byByZWFk IGZyb20gYSBmaWxlLiIKLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Disposition: attachment; filename="v18-0015-WIP-aio-io_uring-Use-IO-size-not-IO-queue-to-tri.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll36s4 RnJvbSAxZjE2Y2QxYjExMmFhZDkxZThlN2EyM2FiMTRhOTVmNGExMjk3NDJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAyMDoyMzo1NSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDE1 LzE5XSBXSVA6IGFpbzogaW9fdXJpbmc6IFVzZSBJTyBzaXplIG5vdCBJTyBxdWV1ZSB0bwogdHJp Z2dlciBhc3luYyBwcm9jZXNzaW5nCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMgfCA1NyArKysrKysrKysrKysrKy0tLS0tLS0tLQogMSBmaWxl IGNoYW5nZWQsIDM1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIGIvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKaW5kZXggNTJhMThhMzU3Li41ZGM0MjdhZjIg MTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jCkBAIC00MDksNyAr NDA5LDYgQEAgc3RhdGljIGludAogcGdhaW9fdXJpbmdfc3VibWl0KHVpbnQxNiBudW1fc3RhZ2Vk X2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogewogCXN0cnVjdCBpb191cmluZyAqdXJp bmdfaW5zdGFuY2UgPSAmcGdhaW9fbXlfdXJpbmdfY29udGV4dC0+aW9fdXJpbmdfcmluZzsKLQlp bnQJCQlpbl9mbGlnaHRfYmVmb3JlID0gZGNsaXN0X2NvdW50KCZwZ2Fpb19teV9iYWNrZW5kLT5p bl9mbGlnaHRfaW9zKTsKIAogCUFzc2VydChudW1fc3RhZ2VkX2lvcyA8PSBQR0FJT19TVUJNSVRf QkFUQ0hfU0laRSk7CiAKQEAgLTQyNSwyNyArNDI0LDYgQEAgcGdhaW9fdXJpbmdfc3VibWl0KHVp bnQxNiBudW1fc3RhZ2VkX2lvcywgUGdBaW9IYW5kbGUgKipzdGFnZWRfaW9zKQogCiAJCXBnYWlv X2lvX3ByZXBhcmVfc3VibWl0KGlvaCk7CiAJCXBnYWlvX3VyaW5nX3NxX2Zyb21faW8oaW9oLCBz cWUpOwotCi0JCS8qCi0JCSAqIGlvX3VyaW5nIGV4ZWN1dGVzIElPIGluIHByb2Nlc3MgY29udGV4 dCBpZiBwb3NzaWJsZS4gVGhhdCdzCi0JCSAqIGdlbmVyYWxseSBnb29kLCBhcyBpdCByZWR1Y2Vz IGNvbnRleHQgc3dpdGNoaW5nLiBXaGVuIHBlcmZvcm1pbmcgYQotCQkgKiBsb3Qgb2YgYnVmZmVy ZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbiBwYWdlIGNhY2hlIGFuZAotCQkg KiB1c2Vyc3BhY2UgbWVtb3J5IGhhcHBlbnMgaW4gdGhlIGZvcmVncm91bmQsIGFzIGl0IGNhbid0 IGJlCi0JCSAqIG9mZmxvYWRlZCB0byBETUEgaGFyZHdhcmUgYXMgaXMgcG9zc2libGUgd2hlbiB1 c2luZyBkaXJlY3QgSU8uIFdoZW4KLQkJICogZXhlY3V0aW5nIGEgbG90IG9mIGJ1ZmZlcmVkIElP IHRoaXMgY2F1c2VzIGlvX3VyaW5nIHRvIGJlIHNsb3dlcgotCQkgKiB0aGFuIHdvcmtlciBtb2Rl LCBhcyB3b3JrZXIgbW9kZSBwYXJhbGxlbGl6ZXMgdGhlIGNvcHlpbmcuIGlvX3VyaW5nCi0JCSAq IGNhbiBiZSB0b2xkIHRvIG9mZmxvYWQgd29yayB0byB3b3JrZXIgdGhyZWFkcyBpbnN0ZWFkLgot CQkgKgotCQkgKiBJZiBhbiBJTyBpcyBidWZmZXJlZCBJTyBhbmQgd2UgYWxyZWFkeSBoYXZlIElP cyBpbiBmbGlnaHQgb3IKLQkJICogbXVsdGlwbGUgSU9zIGFyZSBiZWluZyBzdWJtaXR0ZWQsIHdl IHRodXMgdGVsbCBpb191cmluZyB0byBleGVjdXRlCi0JCSAqIHRoZSBJTyBpbiB0aGUgYmFja2dy b3VuZC4gV2UgZG9uJ3QgZG8gc28gZm9yIHRoZSBmaXJzdCBmZXcgSU9zCi0JCSAqIGJlaW5nIHN1 Ym1pdHRlZCBhcyBleGVjdXRpbmcgaW4gdGhpcyBwcm9jZXNzJyBjb250ZXh0IGhhcyBsb3dlcgot CQkgKiBsYXRlbmN5LgotCQkgKi8KLQkJaWYgKGluX2ZsaWdodF9iZWZvcmUgPiA0ICYmIChpb2gt PmZsYWdzICYgUEdBSU9fSEZfQlVGRkVSRUQpKQotCQkJaW9fdXJpbmdfc3FlX3NldF9mbGFncyhz cWUsIElPU1FFX0FTWU5DKTsKLQotCQlpbl9mbGlnaHRfYmVmb3JlKys7CiAJfQogCiAJd2hpbGUg KHRydWUpCkBAIC03MDksNiArNjg3LDcgQEAgc3RhdGljIHZvaWQKIHBnYWlvX3VyaW5nX3NxX2Zy b21faW8oUGdBaW9IYW5kbGUgKmlvaCwgc3RydWN0IGlvX3VyaW5nX3NxZSAqc3FlKQogewogCXN0 cnVjdCBpb3ZlYyAqaW92OworCXNpemVfdAkJaW9fc2l6ZSA9IDA7CiAKIAlzd2l0Y2ggKChQZ0Fp b09wKSBpb2gtPm9wKQogCXsKQEAgLTcyMSw2ICs3MDAsOCBAQCBwZ2Fpb191cmluZ19zcV9mcm9t X2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVjdCBpb191cmluZ19zcWUgKnNxZSkKIAkJCQkJCQkJ ICAgaW92LT5pb3ZfYmFzZSwKIAkJCQkJCQkJICAgaW92LT5pb3ZfbGVuLAogCQkJCQkJCQkgICBp b2gtPm9wX2RhdGEucmVhZC5vZmZzZXQpOworCisJCQkJaW9fc2l6ZSA9IGlvdi0+aW92X2xlbjsK IAkJCX0KIAkJCWVsc2UKIAkJCXsKQEAgLTczMCw3ICs3MTEsMzkgQEAgcGdhaW9fdXJpbmdfc3Ff ZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJpbmdfc3FlICpzcWUpCiAJCQkJ CQkJCQlpb2gtPm9wX2RhdGEucmVhZC5pb3ZfbGVuZ3RoLAogCQkJCQkJCQkJaW9oLT5vcF9kYXRh LnJlYWQub2Zmc2V0KTsKIAorCQkJCWZvciAoaW50IGkgPSAwOyBpIDw9IGlvaC0+b3BfZGF0YS5y ZWFkLmlvdl9sZW5ndGg7IGkrKywgaW92KyspCisJCQkJCWlvX3NpemUgKz0gaW92LT5pb3ZfbGVu OwogCQkJfQorCisKKwkJCS8qCisJCQkgKiBpb191cmluZyBleGVjdXRlcyBJTyBpbiBwcm9jZXNz IGNvbnRleHQgaWYgcG9zc2libGUuIFRoYXQncworCQkJICogZ2VuZXJhbGx5IGdvb2QsIGFzIGl0 IHJlZHVjZXMgY29udGV4dCBzd2l0Y2hpbmcuIFdoZW4KKwkJCSAqIHBlcmZvcm1pbmcgYSBsb3Qg b2YgYnVmZmVyZWQgSU8gdGhhdCBtZWFucyB0aGF0IGNvcHlpbmcgYmV0d2VlbgorCQkJICogcGFn ZSBjYWNoZSBhbmQgdXNlcnNwYWNlIG1lbW9yeSBoYXBwZW5zIGluIHRoZSBmb3JlZ3JvdW5kLCBh cworCQkJICogaXQgY2FuJ3QgYmUgb2ZmbG9hZGVkIHRvIERNQSBoYXJkd2FyZSBhcyBpcyBwb3Nz aWJsZSB3aGVuIHVzaW5nCisJCQkgKiBkaXJlY3QgSU8uIFdoZW4gZXhlY3V0aW5nIGEgbG90IG9m IGJ1ZmZlcmVkIElPIHRoaXMgY2F1c2VzCisJCQkgKiBpb191cmluZyB0byBiZSBzbG93ZXIgdGhh biB3b3JrZXIgbW9kZSwgYXMgd29ya2VyIG1vZGUKKwkJCSAqIHBhcmFsbGVsaXplcyB0aGUgY29w eWluZy4gaW9fdXJpbmcgY2FuIGJlIHRvbGQgdG8gb2ZmbG9hZCB3b3JrCisJCQkgKiB0byB3b3Jr ZXIgdGhyZWFkcyBpbnN0ZWFkLgorCQkJICoKKwkJCSAqIElmIHRoZSBJT3MgYXJlIHNtYWxsLCB0 aGVyZSBpcyBubyBiZW5lZml0IGZyb20gZm9yY2luZyB0aGluZ3MKKwkJCSAqIGludG8gdGhlIGJh Y2tncm91bmQsIHRoZSBvdmVyaGVhZCBmcm9tIGNvbnRleHQgc3dpdGNoaW5nIGlzCisJCQkgKiBo aWdoZXIgdGhhbiB0aGUgZ2Fpbi4gIFRoZXJlZm9yZSB3ZSB1c2UgdGhlIHNpemUgb2YgdGhlIHJl YWQgYXMKKwkJCSAqIGEgaGV1cmlzdGljLgorCQkJICoKKwkJCSAqIFhYWDogV2UgdXNlZCB0byBu b3QgZG8gdGhpcyBmb3IgdGhlIGZpcnN0IGZldyBJT3MgaW4gZmxpZ2h0LAorCQkJICogYnV0IG5v dyB3ZSBoYXZlIGEgaGV1cmlzdGljIHByZXZlbnRpbmcgZGVlcGVyIElPIHF1ZXVlcyBpZiBJT3MK KwkJCSAqIGZpbmlzaCBpbiB0aW1lLCB3aGljaCB3aWxsIG9mdGVuIHByZXZlbnQgdXMgZnJvbSBl dmVyIHJlYWNoaW5nCisJCQkgKiB0aGF0IGRlZXAgcXVldWVzLiAgTWF5YmUgdGhlcmUncyBhIGJl dHRlciB3YXk/CisJCQkgKgorCQkJICogWFhYOiBOZWVkIHRvIGV2YWx1YXRlIHRoZSBudW1iZXIg b2YgYmxvY2tzIHdoZW4gSU9TUUVfQVNZTkMKKwkJCSAqIHN0YXJ0cyB0byBtYWtlIHNlbnNlLgor CQkJICovCisJCQlpZiAoaW9fc2l6ZSA+PSAoQkxDS1NaICogNCkgJiYKKwkJCQkoaW9oLT5mbGFn cyAmIFBHQUlPX0hGX0JVRkZFUkVEKSkKKwkJCQlpb191cmluZ19zcWVfc2V0X2ZsYWdzKHNxZSwg SU9TUUVfQVNZTkMpOworCiAJCQlicmVhazsKIAogCQljYXNlIFBHQUlPX09QX1dSSVRFVjoKLS0g CjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Disposition: attachment; filename="v18-0013-WIP-read_stream-Only-increase-distance-when-wait.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll3746 RnJvbSBhMmNkMTYwYWZmYzkyZWVkNThjNWI1MGEzYmY1MzAyYmYxNTg3YzkwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxODowMDo1MyAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEz LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBPbmx5IGluY3JlYXNlIGRpc3RhbmNlIHdoZW4KIHdhaXRp bmcgZm9yIElPCgpUaGlzIGF2b2lkcyBpbmNyZWFzaW5nIHRoZSBkaXN0YW5jZSB0byB0aGUgbWF4 aW11bSBpbiBjYXNlcyB3aGVyZSB0aGUgSU8Kc3Vic3lzdGVtIGlzIGFscmVhZHkga2VlcGluZyB1 cC4KClRPRE86IFRoaXMgbWlnaHQgYmUgdG9vIGFnZ3Jlc3NpdmUgd2l0aG91dCBhIHN1YnNlcXVl bnQgcGF0Y2ggdGhhdCByZWR1Y2VzIGhvdwpvZnRlbiB3ZSBkZWNyZWFzZSB0aGUgZGlzdGFuY2Uu CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpC YWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyB8IDI0 ICsrKysrKysrKysrKysrKysrKystLS0tLQogMSBmaWxlIGNoYW5nZWQsIDE5IGluc2VydGlvbnMo KyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v cmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5k ZXggMzY2N2Q2N2FiLi5lMjhhYjVkZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYwpAQCAtOTMxLDIyICs5MzEsMzYgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0 cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZlcl9kYXRhKQogCXsKIAkJaW50MTYJCWlvX2lu ZGV4ID0gc3RyZWFtLT5vbGRlc3RfaW9faW5kZXg7CiAJCWludDMyCQlkaXN0YW5jZTsJLyogd2lk ZXIgdGVtcG9yYXJ5IHZhbHVlLCBjbGFtcGVkIGJlbG93ICovCisJCWJvb2wJCW5lZWRlZF93YWl0 OwogCiAJCS8qIFNhbml0eSBjaGVjayB0aGF0IHdlIHN0aWxsIGFncmVlIG9uIHRoZSBidWZmZXJz LiAqLwogCQlBc3NlcnQoc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wLmJ1ZmZlcnMgPT0KIAkJCSAg ICZzdHJlYW0tPmJ1ZmZlcnNbb2xkZXN0X2J1ZmZlcl9pbmRleF0pOwogCi0JCVdhaXRSZWFkQnVm ZmVycygmc3RyZWFtLT5pb3NbaW9faW5kZXhdLm9wKTsKKwkJbmVlZGVkX3dhaXQgPSBXYWl0UmVh ZEJ1ZmZlcnMoJnN0cmVhbS0+aW9zW2lvX2luZGV4XS5vcCk7CiAKIAkJQXNzZXJ0KHN0cmVhbS0+ aW9zX2luX3Byb2dyZXNzID4gMCk7CiAJCXN0cmVhbS0+aW9zX2luX3Byb2dyZXNzLS07CiAJCWlm ICgrK3N0cmVhbS0+b2xkZXN0X2lvX2luZGV4ID09IHN0cmVhbS0+bWF4X2lvcykKIAkJCXN0cmVh bS0+b2xkZXN0X2lvX2luZGV4ID0gMDsKIAotCQkvKiBMb29rLWFoZWFkIGRpc3RhbmNlIHJhbXBz IHVwIHJhcGlkbHkgYWZ0ZXIgd2UgZG8gSS9PLiAqLwotCQlkaXN0YW5jZSA9IHN0cmVhbS0+ZGlz dGFuY2UgKiAyOwotCQlkaXN0YW5jZSA9IE1pbihkaXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVk X2J1ZmZlcnMpOwotCQlzdHJlYW0tPmRpc3RhbmNlID0gZGlzdGFuY2U7CisJCS8qCisJCSAqIExv b2stYWhlYWQgZGlzdGFuY2UgcmFtcHMgdXAgcmFwaWRseSBhZnRlciB3ZSBuZWVkZWQgdG8gd2Fp dCBmb3IKKwkJICogSU8uIFdlIG9ubHkgaW5jcmVhc2UgdGhlIGRpc3RhbmNlIHdoZW4gd2UgbmVl ZGVkIHRvIHdhaXQsIHRvIGF2b2lkCisJCSAqIGluY3JlYXNpbmcgdGhlIGRpc3RhbmNlIGZ1cnRo ZXIgdGhhbiBuZWNlc3NhcnksIGFzIHVubmVjZXNzYXJpbHkKKwkJICogcGlubmluZyBtYW55IGJ1 ZmZlcnMgY2FuIGJlIGNvc3RseS4KKwkJICoKKwkJICogTkI6IE1heSBub3QgaW5jcmVhc2UgdGhl IGRpc3RhbmNlIGlmIHdlIHJlYWNoZWQgdGhlIGVuZCBvZiB0aGUKKwkJICogc3RyZWFtLgorCQkg Ki8KKwkJaWYgKHN0cmVhbS0+ZGlzdGFuY2UgPiAwICYmIG5lZWRlZF93YWl0KQorCQl7CisJCQlk aXN0YW5jZSA9IHN0cmVhbS0+ZGlzdGFuY2UgKiAyOworCQkJaWYgKGRpc3RhbmNlICYmIGRpc3Rh bmNlIDwgUEdfSU5UMTZfTUFYKQorCQkJCWRpc3RhbmNlKys7CisJCQlkaXN0YW5jZSA9IE1pbihk aXN0YW5jZSwgc3RyZWFtLT5tYXhfcGlubmVkX2J1ZmZlcnMpOworCQkJc3RyZWFtLT5kaXN0YW5j ZSA9IGRpc3RhbmNlOworCQl9CiAKIAkJLyoKIAkJICogSWYgd2UndmUgcmVhY2hlZCB0aGUgZmly c3QgYmxvY2sgb2YgYSBzZXF1ZW50aWFsIHJlZ2lvbiB3ZSdyZQotLSAKMi41My4wCgo= --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Disposition: attachment; filename="v18-0012-bufmgr-Return-whether-WaitReadBuffers-needed-to-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll3777 RnJvbSBlMGFiZDZhYWJhODJkMzBlNWQ3NTAzZDQyM2E3NzVlYjQ4ZDRhMzY1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo1MDo1MCAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEy LzE5XSBidWZtZ3I6IFJldHVybiB3aGV0aGVyIFdhaXRSZWFkQnVmZmVycygpIG5lZWRlZCB0bwog d2FpdAoKSW4gYSBzdWJzZXF1ZW50IGNvbW1pdCByZWFkX3N0cmVhbS5jIHdpbGwgdXNlIHRoaXMg YXMgYW4gaW5wdXQgdG8gdGhlIHJlYWQKYWhlYWQgZGlzdGFuY2UuCgpBdXRob3I6ClJldmlld2Vk LWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3Jj L2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaCAgICAgICAgfCAgMiArLQogc3JjL2JhY2tlbmQvc3Rv cmFnZS9idWZmZXIvYnVmbWdyLmMgfCAxOCArKysrKysrKysrKysrKysrKy0KIDIgZmlsZXMgY2hh bmdlZCwgMTggaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApp bmRleCA2ODFhM2U1NmYuLjI5NmVmYWI1MyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFn ZS9idWZtZ3IuaAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0yNTEsNyAr MjUxLDcgQEAgZXh0ZXJuIGJvb2wgU3RhcnRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlv biAqb3BlcmF0aW9uLAogCQkJCQkJCSBCbG9ja051bWJlciBibG9ja051bSwKIAkJCQkJCQkgaW50 ICpuYmxvY2tzLAogCQkJCQkJCSBpbnQgZmxhZ3MpOwotZXh0ZXJuIHZvaWQgV2FpdFJlYWRCdWZm ZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOworZXh0ZXJuIGJvb2wgV2FpdFJl YWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pOwogCiBleHRlcm4gdm9p ZCBSZWxlYXNlQnVmZmVyKEJ1ZmZlciBidWZmZXIpOwogZXh0ZXJuIHZvaWQgVW5sb2NrUmVsZWFz ZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5k ZXggNGNkYjU2NWU0Li44OTZlYzJhNGUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CkBAIC0xNzQwLDEyICsxNzQwLDIwIEBAIFByb2Nlc3NSZWFkQnVmZmVyc1Jlc3VsdChSZWFkQnVm ZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCUFzc2VydChvcGVyYXRpb24tPm5ibG9ja3NfZG9u ZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOwogfQogCi12b2lkCisvKgorICogV2FpdCBmb3IgdGhl IElPIG9wZXJhdGlvbiBpbml0aWF0ZWQgYnkgU3RhcnRSZWFkQnVmZmVycygpIGV0IGFsIHRvCisg KiBjb21wbGV0ZS4KKyAqCisgKiBSZXR1cm5zIHdoZXRoZXIgdGhlIElPIG9wZXJhdGlvbiBhbHJl YWR5IGhhZCBjb21wbGV0ZWQgYnkgdGhlIHRpbWUgb2YgdGhpcworICogY2FsbC4KKyAqLworYm9v bAogV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiB7CiAJ UGdBaW9SZXR1cm4gKmFpb19yZXQgPSAmb3BlcmF0aW9uLT5pb19yZXR1cm47CiAJSU9Db250ZXh0 CWlvX2NvbnRleHQ7CiAJSU9PYmplY3QJaW9fb2JqZWN0OworCWJvb2wJCW5lZWRlZF93YWl0ID0g ZmFsc2U7CiAKIAlpZiAob3BlcmF0aW9uLT5wZXJzaXN0ZW5jZSA9PSBSRUxQRVJTSVNURU5DRV9U RU1QKQogCXsKQEAgLTE4MTAsNiArMTgxOCw3IEBAIFdhaXRSZWFkQnVmZmVycyhSZWFkQnVmZmVy c09wZXJhdGlvbiAqb3BlcmF0aW9uKQogCQkJCWluc3RyX3RpbWUJaW9fc3RhcnQgPSBwZ3N0YXRf cHJlcGFyZV9pb190aW1lKHRyYWNrX2lvX3RpbWluZyk7CiAKIAkJCQlwZ2Fpb193cmVmX3dhaXQo Jm9wZXJhdGlvbi0+aW9fd3JlZik7CisJCQkJbmVlZGVkX3dhaXQgPSB0cnVlOwogCiAJCQkJLyoK IAkJCQkgKiBUaGUgSU8gb3BlcmF0aW9uIGl0c2VsZiB3YXMgYWxyZWFkeSBjb3VudGVkIGVhcmxp ZXIsIGluCkBAIC0xODc0LDYgKzE4ODMsMTIgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJz T3BlcmF0aW9uICpvcGVyYXRpb24pCiAKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIAorCQkv KgorCQkgKiBJZiB0aGUgSU8gY29tcGxldGVkIG9ubHkgcGFydGlhbGx5LCB3ZSBuZWVkIHRvIHBl cmZvcm0gYWRkaXRpb25hbAorCQkgKiB3b3JrLCBjb25zaWRlciB0aGF0IGEgZm9ybSBvZiBoYXZp bmcgaGFkIHRvIHdhaXQuCisJCSAqLworCQluZWVkZWRfd2FpdCA9IHRydWU7CisKIAkJLyoKIAkJ ICogVGhpcyBtYXkgb25seSBjb21wbGV0ZSB0aGUgSU8gcGFydGlhbGx5LCBlaXRoZXIgYmVjYXVz ZSBzb21lCiAJCSAqIGJ1ZmZlcnMgd2VyZSBhbHJlYWR5IHZhbGlkLCBvciBiZWNhdXNlIG9mIGEg cGFydGlhbCByZWFkLgpAQCAtMTg5MCw2ICsxOTA1LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRC dWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJQ2hlY2tSZWFkQnVmZmVyc09wZXJhdGlvbihv cGVyYXRpb24sIHRydWUpOwogCiAJLyogTkI6IFJFQURfRE9ORSB0cmFjZXBvaW50IHdhcyBhbHJl YWR5IGV4ZWN1dGVkIGluIGNvbXBsZXRpb24gY2FsbGJhY2sgKi8KKwlyZXR1cm4gbmVlZGVkX3dh aXQ7CiB9CiAKIC8qCi0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Disposition: attachment; filename="v18-0011-WIP-aio-io_uring-Allow-IO-methods-to-check-if-IO.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll3798 RnJvbSA0N2Q2ZmMzOTJjOTc1ZDJlMTcxNjdlMGZlZGE1NTgyZGYzNzA2YmNiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjo0MDozNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEx LzE5XSBXSVA6IGFpbzogaW9fdXJpbmc6IEFsbG93IElPIG1ldGhvZHMgdG8gY2hlY2sgaWYgSU8K IGNvbXBsZXRlZCBpbiB0aGUgYmFja2dyb3VuZAoKQXV0aG9yOgpSZXZpZXdlZC1ieToKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS8KQmFja3BhdGNoOgotLS0KIHNyYy9pbmNsdWRlL3N0 b3JhZ2UvYWlvX2ludGVybmFsLmggICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL2Fpby5jICAgICAgICAgICAgIHwgMTUgKysrKysrKysKIHNyYy9iYWNrZW5kL3N0 b3JhZ2UvYWlvL21ldGhvZF9pb191cmluZy5jIHwgNDcgKysrKysrKysrKysrKysrKysrKysrKysK IDMgZmlsZXMgY2hhbmdlZCwgNzcgaW5zZXJ0aW9ucygrKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL3N0b3JhZ2UvYWlvX2ludGVybmFsLmggYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2Fpb19pbnRl cm5hbC5oCmluZGV4IDVmZWVhMTViZS4uMzNlMWUyZGMwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9zdG9yYWdlL2Fpb19pbnRlcm5hbC5oCisrKyBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYWlvX2lu dGVybmFsLmgKQEAgLTMyOCw2ICszMjgsMjEgQEAgdHlwZWRlZiBzdHJ1Y3QgSW9NZXRob2RPcHMK IAkgKi8KIAl2b2lkCQkoKndhaXRfb25lKSAoUGdBaW9IYW5kbGUgKmlvaCwKIAkJCQkJCQkgdWlu dDY0IHJlZl9nZW5lcmF0aW9uKTsKKworCS8qIC0tLQorCSAqIENoZWNrIGlmIElPIGhhcyBhbHJl YWR5IGNvbXBsZXRlZC4gT3B0aW9uYWwuCisJICoKKwkgKiBTb21lIElPIG1ldGhvZHMgbmVlZCB0 byBwb2xsIGEga2VybmVsIG9iamVjdCB0byBzZWUgaWYgSU8gaGFzIGFscmVhZHkKKwkgKiBjb21w bGV0ZWQgaW4gdGhlIGJhY2tncm91bmQuIFRoaXMgY2FsbGJhY2sgYWxsb3dzIHRvIGRvIHNvLgor CSAqCisJICogVGhpcyBjYWxsYmFjayBtYXkgbm90IHdhaXQgZm9yIElPIHRvIGNvbXBsZXRlLCBo b3dldmVyIGl0IGlzIGFsbG93ZWQsCisJICogYWx0aG91Z2ggbm90IGRlc2lyYWJsZSwgdG8gd2Fp dCBmb3Igc2hvcnQtbGl2ZWQgbG9ja3MuIEl0IGlzIG9rIGZyb20gYQorCSAqIGNvcnJlY3RuZXNz IHBlcnNwZWN0aXZlIHRvIG5vdCBwcm9jZXNzIGFueS9hbGwgYXZhaWxhYmxlIGNvbXBsZXRpb25z LAorCSAqIGl0IGp1c3QgY2FuIGxlYWQgdG8gaW5mZXJpb3IgcGVyZm9ybWFuY2UuCisJICogLS0t CisJICovCisJdm9pZAkJKCpjaGVja19vbmUpIChQZ0Fpb0hhbmRsZSAqaW9oLAorCQkJCQkJCSAg dWludDY0IHJlZl9nZW5lcmF0aW9uKTsKIH0gSW9NZXRob2RPcHM7CiAKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9h aW8uYwppbmRleCBlNGFlMzAzMWYuLjRlNzQyMDM4ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vYWlvLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vYWlvLmMKQEAg LTEwMTksNiArMTAxOSwyMSBAQCBwZ2Fpb193cmVmX2NoZWNrX2RvbmUoUGdBaW9XYWl0UmVmICpp b3cpCiAKIAlhbV9vd25lciA9IGlvaC0+b3duZXJfcHJvY25vID09IE15UHJvY051bWJlcjsKIAor CS8qCisJICogSWYgdGhlIElPIGlzIG5vdCBleGVjdXRpbmcgc3luY2hyb25vdXNseSwgYWxsb3cg dGhlIElPIG1ldGhvZCB0byBjaGVjaworCSAqIGlmIHRoZSBJTyBhbHJlYWR5IGhhcyBjb21wbGV0 ZWQuCisJICovCisJaWYgKHBnYWlvX21ldGhvZF9vcHMtPmNoZWNrX29uZSAmJiAhKGlvaC0+Zmxh Z3MgJiBQR0FJT19IRl9TWU5DSFJPTk9VUykpCisJeworCQlwZ2Fpb19tZXRob2Rfb3BzLT5jaGVj a19vbmUoaW9oLCByZWZfZ2VuZXJhdGlvbik7CisKKwkJaWYgKHBnYWlvX2lvX3dhc19yZWN5Y2xl ZChpb2gsIHJlZl9nZW5lcmF0aW9uLCAmc3RhdGUpKQorCQkJcmV0dXJuIHRydWU7CisKKwkJaWYg KHN0YXRlID09IFBHQUlPX0hTX0lETEUpCisJCQlyZXR1cm4gdHJ1ZTsKKwl9CisKIAlpZiAoc3Rh dGUgPT0gUEdBSU9fSFNfQ09NUExFVEVEX1NIQVJFRCB8fAogCQlzdGF0ZSA9PSBQR0FJT19IU19D T01QTEVURURfTE9DQUwpCiAJewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8v bWV0aG9kX2lvX3VyaW5nLmMgYi9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9tZXRob2RfaW9fdXJp bmcuYwppbmRleCA0ODY3ZGVkMzUuLjUyYTE4YTM1NyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vbWV0aG9kX2lvX3VyaW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vbWV0aG9kX2lvX3VyaW5nLmMKQEAgLTU0LDYgKzU0LDcgQEAgc3RhdGljIHZvaWQgcGdhaW9f dXJpbmdfc2htZW1faW5pdChib29sIGZpcnN0X3RpbWUpOwogc3RhdGljIHZvaWQgcGdhaW9fdXJp bmdfaW5pdF9iYWNrZW5kKHZvaWQpOwogc3RhdGljIGludAlwZ2Fpb191cmluZ19zdWJtaXQodWlu dDE2IG51bV9zdGFnZWRfaW9zLCBQZ0Fpb0hhbmRsZSAqKnN0YWdlZF9pb3MpOwogc3RhdGljIHZv aWQgcGdhaW9fdXJpbmdfd2FpdF9vbmUoUGdBaW9IYW5kbGUgKmlvaCwgdWludDY0IHJlZl9nZW5l cmF0aW9uKTsKK3N0YXRpYyB2b2lkIHBnYWlvX3VyaW5nX2NoZWNrX29uZShQZ0Fpb0hhbmRsZSAq aW9oLCB1aW50NjQgcmVmX2dlbmVyYXRpb24pOwogCiAvKiBoZWxwZXIgZnVuY3Rpb25zICovCiBz dGF0aWMgdm9pZCBwZ2Fpb191cmluZ19zcV9mcm9tX2lvKFBnQWlvSGFuZGxlICppb2gsIHN0cnVj dCBpb191cmluZ19zcWUgKnNxZSk7CkBAIC03NSw2ICs3Niw3IEBAIGNvbnN0IElvTWV0aG9kT3Bz IHBnYWlvX3VyaW5nX29wcyA9IHsKIAogCS5zdWJtaXQgPSBwZ2Fpb191cmluZ19zdWJtaXQsCiAJ LndhaXRfb25lID0gcGdhaW9fdXJpbmdfd2FpdF9vbmUsCisJLmNoZWNrX29uZSA9IHBnYWlvX3Vy aW5nX2NoZWNrX29uZSwKIH07CiAKIC8qCkBAIC02NTgsNiArNjYwLDUxIEBAIHBnYWlvX3VyaW5n X3dhaXRfb25lKFBnQWlvSGFuZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKIAkJCQl3 YWl0ZWQpOwogfQogCitzdGF0aWMgdm9pZAorcGdhaW9fdXJpbmdfY2hlY2tfb25lKFBnQWlvSGFu ZGxlICppb2gsIHVpbnQ2NCByZWZfZ2VuZXJhdGlvbikKK3sKKwlQcm9jTnVtYmVyCW93bmVyX3By b2NubyA9IGlvaC0+b3duZXJfcHJvY25vOworCVBnQWlvVXJpbmdDb250ZXh0ICpvd25lcl9jb250 ZXh0ID0gJnBnYWlvX3VyaW5nX2NvbnRleHRzW293bmVyX3Byb2Nub107CisJaW50CQkJd2FpdGVk ID0gMDsKKworCS8qCisJICogVGhpcyBjaGVjayBpcyBub3QgcmVsaWFibGUgd2hlbiBub3QgaG9s ZGluZyB0aGUgY29tcGxldGlvbiBsb2NrLCBidXQKKwkgKiBpdCdzIGEgdXNlZnVsIGNoZWFwIHBy ZS1jaGVjayB0byBzZWUgaWYgaXQncyB3b3J0aCB0cnlpbmcgdG8gZ2V0IHRoZQorCSAqIGNvbXBs ZXRpb24gbG9jay4KKwkgKi8KKwlpZiAoIWlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0 LT5pb191cmluZ19yaW5nKSkKKwkJcmV0dXJuOworCisJLyoKKwkgKiBJZiB0aGUgY29tcGxldGlv biBsb2NrIGlzIGN1cnJlbnRseSBoZWxkLCB0aGUgaG9sZGVyIHdpbGwgbGlrZWx5CisJICogcHJv Y2VzcyBhbnkgcGVuZGluZyBjb21wbGV0aW9ucywgZ2l2ZSB1cC4KKwkgKi8KKwlpZiAoIUxXTG9j a0NvbmRpdGlvbmFsQWNxdWlyZSgmb3duZXJfY29udGV4dC0+Y29tcGxldGlvbl9sb2NrLCBMV19F WENMVVNJVkUpKQorCQlyZXR1cm47CisKKwlwZ2Fpb19kZWJ1Z19pbyhERUJVRzMsIGlvaCwKKwkJ CQkgICAiY2hlY2tfb25lIGlvX2dlbjogJSIgUFJJdTY0ICIsIHJlZl9nZW46ICUiIFBSSXU2NCAi LCBjeWNsZSAlZCIsCisJCQkJICAgaW9oLT5nZW5lcmF0aW9uLAorCQkJCSAgIHJlZl9nZW5lcmF0 aW9uLAorCQkJCSAgIHdhaXRlZCk7CisKKwkvKgorCSAqIFJlY2hlY2sgaWYgdGhlcmUgYXJlIGFu eSBjb21wbGV0aW9ucywgYW5vdGhlciBiYWNrZW5kIGNvdWxkIGhhdmUKKwkgKiBwcm9jZXNzZWQg dGhlbSBzaW5jZSB3ZSBjaGVja2VkIGFib3ZlLCBvciBvdXIgdW5sb2NrZWQgcHJlLWNoZWNrIGNv dWxkCisJICogaGF2ZSBiZWVuIHJlYWRpbmcgb3V0ZGF0ZWQgdmFsdWVzLgorCSAqCisJICogSXQg aXMgcG9zc2libGUgdGhhdCB0aGUgSU8gaGFuZGxlIGhhcyBiZWVuIHJldXNlZCBzaW5jZSB0aGUg c3RhcnQgb2YKKwkgKiB0aGUgY2FsbCwgYnV0IG5vdyB0aGF0IHdlIGhhdmUgdGhlIGxvY2ssIHdl IGNhbiBqdXN0IGFzIHdlbGwgZHJhaW4gYWxsCisJICogY29tcGxldGlvbnMuCisJICovCisJaWYg KGlvX3VyaW5nX2NxX3JlYWR5KCZvd25lcl9jb250ZXh0LT5pb191cmluZ19yaW5nKSkKKwl7CisJ CXBnYWlvX3VyaW5nX2RyYWluX2xvY2tlZChvd25lcl9jb250ZXh0KTsKKwl9CisKKwlMV0xvY2tS ZWxlYXNlKCZvd25lcl9jb250ZXh0LT5jb21wbGV0aW9uX2xvY2spOworfQorCiBzdGF0aWMgdm9p ZAogcGdhaW9fdXJpbmdfc3FfZnJvbV9pbyhQZ0Fpb0hhbmRsZSAqaW9oLCBzdHJ1Y3QgaW9fdXJp bmdfc3FlICpzcWUpCiB7Ci0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Disposition: attachment; filename="v18-0010-WIP-read_stream-Issue-IO-synchronously-while-in-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37c9 RnJvbSAxNzhmYzExZGE5MzZjOGYyZjA2MjI3ZTU0ZWE5OTA0ZGI3N2Y5YTJhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNjoyNTo0MSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEw LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBJc3N1ZSBJTyBzeW5jaHJvbm91c2x5IHdoaWxlIGluCiBm YXN0IHBhdGgKCldoaWxlIGluIGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdo dCBlbmNvdW50ZXIKc3luY2hyb25vdXNseS4gQmVjYXVzZSB3ZSBhcmUsIHJpZ2h0IG5vdywgbm90 IHJlYWRpbmcgYWhlYWQsIGRpc3BhdGNoaW5nIGFueQpvY2Nhc2lvbmFsIElPIHRvIHdvcmtlcnMg d291bGQgaGF2ZSB0aGUgb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2VycywKd2l0aG91 dCBhbnkgcmVhbGlzdGljIGNoYW5jZSBvZiB0aGUgSU8gY29tcGxldGluZyBiZWZvcmUgd2UgbmVl ZCBpdC4KCkF1dGhvcjoKUmV2aWV3ZWQtYnk6CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVz L20vCkJhY2twYXRjaDoKLS0tCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5j IHwgMTUgKysrKysrKysrKysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMTUgaW5zZXJ0aW9ucygrKQoK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMgYi9zcmMv YmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCmluZGV4IGNkNTRjMWE3NC4uMzY2N2Q2 N2FiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9yZWFkX3N0cmVhbS5jCisr KyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKQEAgLTgzMyw2ICs4MzMs MTkgQEAgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoq cGVyX2J1ZmZlcl9kYXRhKQogCQkJaWYgKHN0cmVhbS0+YWR2aWNlX2VuYWJsZWQpCiAJCQkJZmxh Z3MgfD0gUkVBRF9CVUZGRVJTX0lTU1VFX0FEVklDRTsKIAorCQkJLyoKKwkJCSAqIFdoaWxlIGlu IGZhc3QtcGF0aCwgZXhlY3V0ZSBhbnkgSU8gdGhhdCB3ZSBtaWdodCBlbmNvdW50ZXIKKwkJCSAq IHN5bmNocm9ub3VzbHkuIEJlY2F1c2Ugd2UgYXJlLCByaWdodCBub3csIG5vdCByZWFkaW5nIGFo ZWFkLAorCQkJICogZGlzcGF0Y2hpbmcgYW55IG9jY2FzaW9uYWwgSU8gdG8gd29ya2VycyB3b3Vs ZCBoYXZlIHRoZQorCQkJICogb3ZlcmhlYWQgb2YgZGlzcGF0Y2hpbmcgdG8gd29ya2Vycywgd2l0 aG91dCBhbnkgcmVhbGlzdGljCisJCQkgKiBjaGFuY2Ugb2YgdGhlIElPIGNvbXBsZXRpbmcgYmVm b3JlIHdlIG5lZWQgaXQuIFdlIHdpbGwgc3dpdGNoCisJCQkgKiB0byBub24tc3luY2hyb25vdXMg SU8gYWZ0ZXIgdGhpcy4KKwkJCSAqCisJCQkgKiBYWFg6IFNob3VsZCB3ZSBkbyBzbyBvbmx5IGZv ciB3b3JrZXIsIG9yIGFsc28gaW9fdXJpbmc/IFRoZXJlJ3MKKwkJCSAqIG5vdCBtdWNoIGRpc3Bh dGNoIG92ZXJoZWFkIHdpdGggaW9fdXJpbmcsIGNvbXBhcmVkIHRvIHdvcmtlci4uLgorCQkJICov CisJCQlmbGFncyB8PSBSRUFEX0JVRkZFUlNfU1lOQ0hST05PVVNMWTsKKwogCQkJLyoKIAkJCSAq IFBpbiBhIGJ1ZmZlciBmb3IgdGhlIG5leHQgY2FsbC4gIFNhbWUgYnVmZmVyIGVudHJ5LCBhbmQK IAkJCSAqIGFyYml0cmFyeSBJL08gZW50cnkgKHRoZXkncmUgYWxsIGZyZWUpLiAgV2UgZG9uJ3Qg aGF2ZSB0bwpAQCAtODYwLDYgKzg3Myw4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJCXN0cmVhbS0+aW9zX2lu X3Byb2dyZXNzID0gMTsKIAkJCXN0cmVhbS0+aW9zWzBdLmJ1ZmZlcl9pbmRleCA9IG9sZGVzdF9i dWZmZXJfaW5kZXg7CiAJCQlzdHJlYW0tPnNlcV9ibG9ja251bSA9IG5leHRfYmxvY2tudW0gKyAx OworCisJCQkvKiBGSVhNRTogaXQgd291bGQgcHJvYmFibHkgd29ydGggaXNzdWluZyByZWFkYWhl YWQgaGVyZSAqLwogCQl9CiAJCWVsc2UKIAkJewotLSAKMi41My4wCgo= --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Disposition: attachment; filename="v18-0014-WIP-read_stream-Prevent-distance-from-decaying-t.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll36x5 RnJvbSAyNzQ3MGYwNTM1MTg0OTE5Y2JlZjE1MGU1Njk2ZTJhYWM5M2Q0M2NjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IFR1ZSwgMyBNYXIgMjAyNiAxNzoyNToyNSAtMDUwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDE0 LzE5XSBXSVA6IHJlYWRfc3RyZWFtOiBQcmV2ZW50IGRpc3RhbmNlIGZyb20gZGVjYXlpbmcKIHRv byBxdWlja2x5CgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rn ci5lcy9tLwpCYWNrcGF0Y2g6Ci0tLQogc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJl YW0uYyB8IDMzICsrKysrKysrKysrKysrKysrKysrKysrKy0tLQogMSBmaWxlIGNoYW5nZWQsIDMw IGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv c3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRf c3RyZWFtLmMKaW5kZXggZTI4YWI1ZGUwLi5lM2MxNmJkMTcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9h aW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1Y3QgUmVhZFN0cmVhbQogCWlu dDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVkX2J1ZmZlcnM7CiAJaW50MTYJ CWRpc3RhbmNlOworCXVpbnQxNgkJZGlzdGFuY2VfZGVjYXlfaG9sZG9mZjsKIAlpbnQxNgkJaW5p dGlhbGl6ZWRfYnVmZmVyczsKIAlpbnQxNgkJcmVzdW1lX2Rpc3RhbmNlOwogCWludAkJCXJlYWRf YnVmZmVyc19mbGFnczsKQEAgLTM2NCw5ICszNjUsMjIgQEAgcmVhZF9zdHJlYW1fc3RhcnRfcGVu ZGluZ19yZWFkKFJlYWRTdHJlYW0gKnN0cmVhbSkKIAkvKiBSZW1lbWJlciB3aGV0aGVyIHdlIG5l ZWQgdG8gd2FpdCBiZWZvcmUgcmV0dXJuaW5nIHRoaXMgYnVmZmVyLiAqLwogCWlmICghbmVlZF93 YWl0KQogCXsKLQkJLyogTG9vay1haGVhZCBkaXN0YW5jZSBkZWNheXMsIG5vIEkvTyBuZWNlc3Nh cnkuICovCi0JCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSkKLQkJCXN0cmVhbS0+ZGlzdGFuY2Ut LTsKKwkJLyoKKwkJICogSWYgdGhlcmUgY3VycmVudGx5IGlzIG5vIElPIGluIHByb2dyZXNzLCBh bmQgd2UgaGF2ZSBub3QgbmVlZGVkIHRvCisJCSAqIGlzc3VlIElPIHJlY2VudGx5LCBkZWNheSB0 aGUgbG9vay1haGVhZCBkaXN0YW5jZS4gIFdlIGRldGVjdCBpZiB3ZQorCQkgKiBoYWQgdG8gaXNz dWUgSU8gcmVjZW50bHkgYnkgaGF2aW5nIGEgZGVjYXkgaG9sZG9mZiB0aGF0J3Mgc2V0IHRvCisJ CSAqIHRoZSBtYXggbG9va2FoZWFkIGRpc3RhbmNlIHdoZW5ldmVyIHdlIG5lZWQgdG8gZG8gSU8u ICBUaGlzIGlzCisJCSAqIGltcG9ydGFudCB0byBlbnN1cmUgd2UgZXZlbnR1YWxseSByZWFjaCBh IGhpZ2ggZW5vdWdoIGRpc3RhbmNlIHRvCisJCSAqIHBlcmZvcm0gSU8gYXN5bmNocm9ub3VzbHkg d2hlbiBzdGFydGluZyBvdXQgd2l0aCBhIHNtYWxsIGxvb2thaGVhZAorCQkgKiBkaXN0YW5jZS4K KwkJICovCisJCWlmIChzdHJlYW0tPmRpc3RhbmNlID4gMSAmJiBzdHJlYW0tPmlvc19pbl9wcm9n cmVzcyA9PSAwKQorCQl7CisJCQlpZiAoc3RyZWFtLT5kaXN0YW5jZV9kZWNheV9ob2xkb2ZmID09 IDApCisJCQkJc3RyZWFtLT5kaXN0YW5jZS0tOworCQkJZWxzZQorCQkJCXN0cmVhbS0+ZGlzdGFu Y2VfZGVjYXlfaG9sZG9mZi0tOworCQl9CiAJfQogCWVsc2UKIAl7CkBAIC03MDIsNiArNzE2LDcg QEAgcmVhZF9zdHJlYW1fYmVnaW5faW1wbChpbnQgZmxhZ3MsCiAJc3RyZWFtLT5zZXFfYmxvY2tu dW0gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJc3RyZWFtLT5zZXFfdW50aWxfcHJvY2Vzc2VkID0g SW52YWxpZEJsb2NrTnVtYmVyOwogCXN0cmVhbS0+dGVtcG9yYXJ5ID0gU21ncklzVGVtcChzbWdy KTsKKwlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5X2hvbGRvZmYgPSAwOwogCiAJLyoKIAkgKiBTa2lw IHRoZSBpbml0aWFsIHJhbXAtdXAgcGhhc2UgaWYgdGhlIGNhbGxlciBzYXlzIHdlJ3JlIGdvaW5n IHRvIGJlCkBAIC05NDQsNiArOTU5LDE4IEBAIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKFJlYWRT dHJlYW0gKnN0cmVhbSwgdm9pZCAqKnBlcl9idWZmZXJfZGF0YSkKIAkJaWYgKCsrc3RyZWFtLT5v bGRlc3RfaW9faW5kZXggPT0gc3RyZWFtLT5tYXhfaW9zKQogCQkJc3RyZWFtLT5vbGRlc3RfaW9f aW5kZXggPSAwOwogCisJCS8qCisJCSAqIEFzIHdlIG5lZWRlZCBJTywgcHJldmVudCBkaXN0YW5j ZSBmcm9tIGJlaW5nIHJlZHVjZWQgd2l0aGluIG91cgorCQkgKiBtYXhpbXVtIGxvb2thaGVhZCB3 aW5kb3cuIFRoaXMgYXZvaWRzIGhhdmluZyBkaXN0YW5jZSBjb2xsYXBzZSB0b28KKwkJICogcXVp Y2tseSBpbiB3b3JrbG9hZHMgd2hlcmUgbW9zdCBvZiB0aGUgcmVxdWlyZWQgYmxvY2tzIGFyZSBj YWNoZWQsCisJCSAqIGJ1dCB3aGVyZSB0aGUgcmVtYWluaW5nIElPcyBhcmUgYSBzdWZmaWNpZW50 IGVub3VnaCBmYWN0b3IgdG8gY2F1c2UKKwkJICogYSBzdWJzdGFudGlhbCBzbG93ZG93biBpZiBl eGVjdXRlZCBzeW5jaHJvbm91c2x5LgorCQkgKgorCQkgKiBYWFg6IE5vdCBvYnZpb3VzIHdoZXRo ZXIgd2Ugc2hvdWxkIHVzZSBtYXhfaW9zIG9yCisJCSAqIG1heF9waW5uZWRfYnVmZmVycy4gT3Ig c29tZXRoaW5nIGVsc2UgZW50aXJlbHkuCisJCSAqLworCQlzdHJlYW0tPmRpc3RhbmNlX2RlY2F5 X2hvbGRvZmYgPSBzdHJlYW0tPm1heF9pb3M7CisKIAkJLyoKIAkJICogTG9vay1haGVhZCBkaXN0 YW5jZSByYW1wcyB1cCByYXBpZGx5IGFmdGVyIHdlIG5lZWRlZCB0byB3YWl0IGZvcgogCQkgKiBJ Ty4gV2Ugb25seSBpbmNyZWFzZSB0aGUgZGlzdGFuY2Ugd2hlbiB3ZSBuZWVkZWQgdG8gd2FpdCwg dG8gYXZvaWQKLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Disposition: attachment; filename="v18-0008-heapam-Add-index-scan-I-O-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37i11 RnJvbSA2ZGE2Y2Y4MTkyYTllNjI5OTVkMzExM2ExZmExNWZkYmQ0MjM5NjA5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NTg6MDkgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwOC8xOV0g aGVhcGFtOiBBZGQgaW5kZXggc2NhbiBJL08gcHJlZmV0Y2hpbmcuCgpUaGlzIGNvbW1pdCBpbXBs ZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMgKGFuZCBpbmRleC1vbmx5CnNj YW5zIHRoYXQgcmVxdWlyZSBoZWFwIGZldGNoZXMpLiBUaGlzIHdhcyBtYWRlIHBvc3NpYmxlIGJ5 IHRoZSByZWNlbnQKYWRkaXRpb24gb2YgYmF0Y2hpbmcgaW50ZXJmYWNlcyB0byBib3RoIHRoZSB0 YWJsZSBBTSBhbmQgaW5kZXggQU0gQVBJcy4KClRoZSBhbWdldGJhdGNoIGluZGV4IEFNIGludGVy ZmFjZSBwcm92aWRlcyBiYXRjaGVzIG9mIG1hdGNoaW5nIFRJRHMKKHJhdGhlciB0aGFuIG9uZSB0 dXBsZSBhdCBhIHRpbWUpLCBlYWNoIG9mIHdoaWNoIG11c3QgYmUgdGFrZW4gZnJvbQppbmRleCB0 dXBsZXMgdGhhdCBhcHBlYXIgdG9nZXRoZXIgb24gYSBzaW5nbGUgaW5kZXggcGFnZS4gIFRoaXMg YWxsb3dzCm11bHRpcGxlIGJhdGNoZXMgdG8gYmUgaGVsZCBvcGVuIHNpbXVsdGFuZW91c2x5LiAg R2l2aW5nIHRoZSB0YWJsZSBBTSBhbgpleHBsaWNpdCB1bmRlcnN0YW5kaW5nIG9mIGluZGV4IEFN IGNvbmNlcHRzL2luZGV4IHBhZ2UgYm91bmRhcmllcyBhbGxvd3MKaXQgdG8gY29uc2lkZXIgYWxs IG9mIHRoZSByZWxldmFudCBjb3N0cyBhbmQgYmVuZWZpdHMuCgpQcmVmZXRjaGluZyBpcyBpbXBs ZW1lbnRlZCB1c2luZyBhIHByZWZldGNoaW5nIHBvc2l0aW9uIHVuZGVyIHRoZQpjb250cm9sIG9m IHRoZSB0YWJsZSBBTSBhbmQgY29yZSBjb2RlLiAgVGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlCnNjYW4gcG9zaXRpb24gYWRkZWQgYnkgY29tbWl0IEZJWE1FLCB3aGljaCBpbnRyb2R1Y2Vk IHRoZSBhbWdldGJhdGNoCmludGVyZmFjZS4gIEEgcmVhZCBzdHJlYW0gY2FsbGJhY2sgYWR2YW5j ZXMgdGhlIHJlYWQgc3RyZWFtIGFzIG5lZWRlZCB0bwpwcm92aWRlIHN1ZmZpY2llbnRseSBtYW55 IGhlYXAgYmxvY2sgbnVtYmVycyB0byBtYWludGFpbiB0aGUgcmVhZApzdHJlYW0ncyB0YXJnZXQg cHJlZmV0Y2ggZGlzdGFuY2UuCgpUZXN0aW5nIGhhcyBzaG93biB0aGF0IGluZGV4IHByZWZldGNo aW5nIGNhbiBtYWtlIGluZGV4IHNjYW5zIG11Y2gKZmFzdGVyLiAgTGFyZ2UgcmFuZ2Ugc2NhbnMg dGhhdCByZXR1cm4gbWFueSB0dXBsZXMgY2FuIGJlIGFzIG11Y2ggYXMgMzV4CmZhc3RlciB3aXRo IGxvY2FsIFNTRHMsIGFuZCA1MHggZmFzdGVyIG9yIG1vcmUgd2l0aCBoaWdoZXItbGF0ZW5jeQpz dG9yYWdlIHN1Y2ggYXMgbmV0d29yay1hdHRhY2hlZCBibG9jayBkZXZpY2VzLCB3aGVyZSB0aGUg YmVuZWZpdCBvZgpoaWRpbmcgSS9PIGxhdGVuY3kgdGhyb3VnaCBwcmVmZXRjaGluZyBpcyBldmVu IGdyZWF0ZXIuCgpBIG5ldyBHVUMgKGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gpIGNvbnRyb2xz IHRoZSB1c2Ugb2YgaW5kZXgKcHJlZmV0Y2hpbmcuICBUaGUgZGVmYXVsdCBzZXR0aW5nIGlzICdv bicsIHNvIGFsbCBwbGFpbiBpbmRleCBzY2FucyB1c2UKcHJlZmV0Y2hpbmcgd2hlcmUgc3VwcG9y dCBleGlzdHMuICBBbGwgaW5kZXgtb25seSBzY2FucyB3aWxsIGFsc28gdXNlCnByZWZldGNoaW5n IGF1dG9tYXRpY2FsbHkgd2hlcmUgc3VwcG9ydGVkIChvbmNlIHRoZSBzY2FuIHN0YXJ0cyB0bwpy ZXF1aXJlIGEgc2lnbmlmaWNhbnQgbnVtYmVyIG9mIGhlYXAgZmV0Y2hlcykuCgpBbiBpbXBvcnRh bnQgZ29hbCBvZiB0aGUgYW1nZXRiYXRjaCBkZXNpZ24gaXMgdG8gZW5hYmxlIHRoZSB0YWJsZSBB TSdzCnJlYWQgc3RyZWFtIGNhbGxiYWNrIHRvIGFkdmFuY2UgaXRzIHByZWZldGNoIHBvc2l0aW9u IHVzaW5nIFRJRHMgdGhhdAphcHBlYXIgb24gYSBsZWFmIHBhZ2UgdGhhdCdzIGFoZWFkIG9mIHRo ZSBjdXJyZW50IHNjYW4gcG9zaXRpb24ncyBsZWFmCnBhZ2UuICBUaGlzIGlzIGNydWNpYWwgd2l0 aCBzY2FucyBvZiBpbmRleGVzIHdoZXJlIGVhY2ggbGVhZiBwYWdlCmhhcHBlbnMgdG8gaGF2ZSBy ZWxhdGl2ZWx5IGZldyBkaXN0aW5jdCBoZWFwIGJsb2NrcyBhbW9uZyBpdHMgbWF0Y2hpbmcKVElE cyAoYXMgd2VsbCBhcyB3aXRoIHNjYW5zIHdpdGggbGVhZiBwYWdlcyB0aGF0IGhhdmUgcmVsYXRp dmVseSBmZXcKdG90YWwgbWF0Y2hpbmcgaXRlbXMpLiAgSW5kZXggc2NhbnMgY2FuIGhhdmUgYXMg bWFueSBhcyA2NCBvcGVuIGJhdGNoZXMsCndoaWNoIHRlc3RpbmcgaGFzIHNob3duIHRvIGJlIGFi b3V0IHRoZSBtYXhpbXVtIG51bWJlciB0aGF0IGNhbiBldmVyIGJlCnVzZWZ1bC4gIEJhdGNoZXMg YXJlIG1haW50YWluZWQgaW4gc2NhbiBvcmRlciB1c2luZyBhIHNpbXBsZSByaW5nIGJ1ZmZlcgpk YXRhIHN0cnVjdHVyZS4KCkluIHJhcmUgY2FzZXMgd2hlcmUgdGhlIHNjYW4gZXhjZWVkcyB0aGlz IHF1YXNpLWFyYml0cmFyeSBsaW1pdCBvZiA2NCwKdGhlIHJlYWQgc3RyZWFtIGlzIHRlbXBvcmFy aWx5IHBhdXNlZCB1c2luZyB0aGUgcmVhZCBzdHJlYW0gcGF1c2luZwptZWNoYW5pc20gYWRkZWQg YnkgY29tbWl0IDM4MjI5Y2I5LiAgUHJlZmV0Y2hpbmcgKHZpYSB0aGUgcmVhZCBzdHJlYW0pCmlz IHJlc3VtZWQgb25seSBhZnRlciB0aGUgc2NhbiBwb3NpdGlvbiBhZHZhbmNlcyBiZXlvbmQgaXRz IGN1cnJlbnQgb3BlbgpiYXRjaCBhbmQgdGhlbiBmcmVlcyBhbmQgcmVtb3ZlcyB0aGUgYmF0Y2gg ZnJvbSB0aGUgc2NhbidzIGJhdGNoIHJpbmcKYnVmZmVyLiAgVGVzdGluZyBoYXMgc2hvd24gdGhh dCBpdCBpc24ndCB2ZXJ5IGNvbW1vbiBmb3Igc2NhbnMgdG8gaG9sZApvcGVuIG1vcmUgdGhhbiBh Ym91dCAxMCBiYXRjaGVzIHRvIGdldCB0aGUgZGVzaXJlZCBJL08gcHJlZmV0Y2gKZGlzdGFuY2Uu CgpUaGUgaGV1cmlzdGljIHVzZWQgdG8gZGVjaWRlIHdoZW4gdG8gYmVnaW4gcHJlZmV0Y2hpbmcg ZGVsYXlzCmluaXRpYWxpemF0aW9uIG9mIHRoZSBzY2FuJ3MgcmVhZCBzdHJlYW0gdW50aWwgdGhl IHNjYW4gdHJhbnNpdGlvbnMgZnJvbQppdHMgZmlyc3QgYmF0Y2ggdG8gaXRzIHNlY29uZCBiYXRj aC4gIEVhY2ggYmF0Y2ggY29ycmVzcG9uZHMgdG8gbWF0Y2hpbmcKVElEcyBmcm9tIGEgc2luZ2xl IGluZGV4IGxlYWYgcGFnZSwgc28gcHJlZmV0Y2hpbmcgb25seSBiZWdpbnMgb25jZSB0aGUKc2Nh biByZWFkcyBmcm9tIGl0cyBzZWNvbmQgbGVhZiBwYWdlIGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25l IG1hdGNoaW5nCml0ZW0uICBBIHNlbGVjdGl2ZSBpbmRleCBzY2FuIHRoYXQgdG91Y2hlcyBvbmx5 IG9uZSBsZWFmIHBhZ2UgbmV2ZXIKcmVhY2hlcyB0aGUgc2Vjb25kIGJhdGNoLCBzbyB0aGUgaGV1 cmlzdGljIGNvcnJlY3RseSBhdm9pZHMgcHJlZmV0Y2hpbmcKb3ZlcmhlYWQuICBUaGUgcGljdHVy ZSBmb3IgbW9yZSBjb21wbGljYXRlZCBjYXNlcyBpcyBtaXhlZC4KClRoZSBzYW1lIHByaW5jaXBs ZSBhcHBsaWVzIHRvIG5lc3Rsb29wIGlubmVyIGluZGV4IHNjYW5zIHdpdGggdmVyeSB0aWdodAps aW1pdHMgKGUuZy4sIGEgY29ycmVsYXRlZCBzdWJxdWVyeSB3aXRoIExJTUlUIDEpLCB3aGVyZSBl YWNoIHJlc2NhbgpyZWFkcyBmcm9tIG9ubHkgYSBzaW5nbGUgbGVhZiBwYWdlOiB0aGUgaGV1cmlz dGljIGF2b2lkcyB0aGUgY29zdCBvZgpyZXBlYXRlZGx5IGNyZWF0aW5nIGFuZCByZXNldHRpbmcg YSByZWFkIHN0cmVhbSBhY3Jvc3MgbWFueSByZXNjYW5zLgpPbiB0aGUgb3RoZXIgaGFuZCwgc29t ZSBzZWxlY3RpdmUgc2NhbnMgdGhhdCBhY2Nlc3MgcmFuZG9tbHktb3JkZXJlZApoZWFwIHBhZ2Vz IHdvdWxkIGdlbnVpbmVseSBiZW5lZml0IGZyb20gcHJlZmV0Y2hpbmcsIGJ1dCBuZXZlciBnZXQg YXMKZmFyIGFzIHJlYWNoaW5nIHRoZWlyIHNlY29uZCBiYXRjaCAtLSBhIG1pc3NlZCBvcHBvcnR1 bml0eSwgd2hlcmUgdGhlCmhldXJpc3RpYyBpcyBvdmVybHkgY2F1dGlvdXMuCgpDb252ZXJzZWx5 LCB0aGUgaGV1cmlzdGljIGlzIG5vdCBjYXV0aW91cyBlbm91Z2ggd2l0aCBzbGlnaHRseSBsZXNz CnNlbGVjdGl2ZSBuZXN0bG9vcCBpbm5lciBzY2FucyAoZS5nLiwgTElNSVQgMyB3aXRoaW4gYSBM QVRFUkFMIGpvaW4pLgpUaGVzZSByZXNjYW5zIG1heSBzcGFuIHR3byBsZWFmIHBhZ2VzLCBqdXN0 IGJhcmVseSBjcm9zc2luZyB0aGUKc2Vjb25kLWJhdGNoIHRocmVzaG9sZCwgd2hpbGUgc3RpbGwg b25seSBuZWVkaW5nIHRvIGZldGNoIHR3byBvciB0aHJlZQpoZWFwIHBhZ2VzIC0tIG5vdCBlbm91 Z2ggZm9yIHByZWZldGNoaW5nIHRvIHJlYWxpc3RpY2FsbHkgaGVscCBvciBwYXkKZm9yIGl0c2Vs ZiBvbiBhbnkgaW5kaXZpZHVhbCByZXNjYW4uICBTdWNoIGNhc2VzIGFyZSByZWdyZXNzZWQgYnkg YXMKbXVjaCBhcyA1JSByZWxhdGl2ZSB0byBQb3N0Z3JlU1FMIDE4LCB0aG91Z2ggb25seSB3aGVu IHRoZSBzY2FuIGhhcyB0bwpyZWFkIGhlYXAgcGFnZXMgZnJvbSB0aGUgZmlsZXN5c3RlbS4KCkFk ZGluZyBhIHNtYXJ0ZXIgaGV1cmlzdGljIHRoYXQgYWRkcmVzc2VzIGJvdGggc2hvcnRjb21pbmdz IHJlbWFpbnMgYXMKd29yayBmb3IgYSBmdXR1cmUgcmVsZWFzZS4gIFBhc3NpbmcgZG93biBhbiBF eGVjU2V0VHVwbGVCb3VuZCBzdHlsZSBoaW50CmFuZCB1c2luZyB0aGF0IGhpbnQgdG8gaW5mbHVl bmNlIGhvdyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXRzCmRpc3RhbmNlIHNlZW1zIGxpa2Ug YSBwcm9taXNpbmcgYXBwcm9hY2guCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJh Lm1lPgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFu ZHJlcyBGcmV1bmQgPGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5y byA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMv bS9jZjg1ZjQ2Zi1iMDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQot LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICAgICB8ICAxMiAr CiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oICAgICAgICAgICAgICAgfCAgIDggKy0K IHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8ICAzNSArKwog c3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCAgICAgICAgICAgICAgICAgIHwgICAxICsKIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyAgICB8IDQwNSArKysrKysr KysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAg ICB8ICA0OSArKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXplLmMgICAgICAg ICB8ICAgMSArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0ZXJzLmRhdCAgICAg fCAgIDcgKwogc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIHwg ICAxICsKIGRvYy9zcmMvc2dtbC9jb25maWcuc2dtbCAgICAgICAgICAgICAgICAgICAgICB8ICAx NiArCiBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgNjYg KystCiBkb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21sICAgICAgICAgICAgICAgICAgICAgfCAgIDgg Kwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgICAgICAgIHwgICAzICst CiAxMyBmaWxlcyBjaGFuZ2VkLCA1OTkgaW5zZXJ0aW9ucygrKSwgMTMgZGVsZXRpb25zKC0pCgpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hlYXBhbS5oCmluZGV4IDY2OTk0Y2IwMy4uMjY2NWI5ZGI2IDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5o CkBAIC0xMzcsNiArMTM3LDE4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQog CS8qIFBsYWluIGluZGV4IHNjYW4geHNfbGFzdGluYmxvY2sgb3B0aW1pemF0aW9uICovCiAJYm9v bAkJeHNfbGFzdGluYmxvY2s7IC8qIGxhc3QgVElEIG9uIHRoaXMgYmxvY2sgaW4gY3VycmVudCBi YXRjaD8gKi8KIAorCS8qCisJICogVGhlIHJlYWQgc3RyZWFtIGlzIGFsbG9jYXRlZCBhdCB0aGUg YmVnaW5uaW5nIG9mIHRoZSBzY2FuIGFuZCByZXNldCBvbgorCSAqIHJlc2NhbiBvciB3aGVuIHRo ZSBzY2FuIGRpcmVjdGlvbiBjaGFuZ2VzLiBUaGUgc2NhbiBkaXJlY3Rpb24gaXMgc2F2ZWQKKwkg KiBlYWNoIHRpbWUgYSBuZXcgdHVwbGUgaXMgcmVxdWVzdGVkLiBJZiB0aGUgc2NhbiBkaXJlY3Rp b24gY2hhbmdlcyBmcm9tCisJICogb25lIHR1cGxlIHRvIHRoZSBuZXh0LCB0aGUgcmVhZCBzdHJl YW0gcmVsZWFzZXMgYWxsIHByZXZpb3VzbHkgcGlubmVkCisJICogYnVmZmVycyBhbmQgcmVzZXRz IHRoZSBwcmVmZXRjaCBibG9jay4KKwkgKi8KKwlib29sCQl4c19wYXVzZWQ7CQkvKiBwYXVzZWQg dW50aWwgbmV4dCBiYXRjaCBpcyByZWFkPyAqLworCVNjYW5EaXJlY3Rpb24geHNfcmVhZF9zdHJl YW1fZGlyOwkvKiBpbmRleCBzY2FuIGRpcmVjdGlvbiAqLworCUJsb2NrTnVtYmVyIHhzX3ByZWZl dGNoX2Jsb2NrOwkvKiBsYXN0IGJsb2NrIHJldHVybmVkIHRvIHhzX3JlYWRfc3RyZWFtICovCisJ UmVhZFN0cmVhbSAqeHNfcmVhZF9zdHJlYW07IC8qIGluZGV4IEkvTyBwcmVmZXRjaGluZyByZWFk IHN0cmVhbSAqLworCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3Ny Yy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhi YXRjaC5oCmluZGV4IDM3NTRmNzAyZS4uNmU5NTliYTI1IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaW5kZXhiYXRjaC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNo LmgKQEAgLTQwLDE2ICs0MCwxNiBAQCBleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9i YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogLyoKICAqIEZl dGNoIHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhl IGZpcnN0KS4KICAqCi0gKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNz ZWQgdG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKLSAqIG1hdGNoaW5nIGl0ZW1zIGlu IHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCi0gKiBwcmlv ckJhdGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICogQ2FsbGVkIHdo ZW4gY2FsbGVyJ3MgY3VycmVudCBzY2FuQmF0Y2gvcHJlZmV0Y2hCYXRjaCAocGFzc2VkIHRvIHVz IGFzCisgKiBwcmlvckJhdGNoKSBoYXMgbm8gbW9yZSBtYXRjaGluZyBpdGVtcyBpbiB0aGUgZ2l2 ZW4gc2NhbiBkaXJlY3Rpb24uICBDYWxsZXIKKyAqIHBhc3NlcyBhIE5VTEwgcHJpb3JCYXRjaCBv biB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgc2Nhbi4KICAqCiAgKiBSZXR1cm5zIHRoZSBu ZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSBjYWxsZXIgaW4gdGhlIGdpdmVuIHNjYW4KICAq IGRpcmVjdGlvbiwgb3IgTlVMTCB3aGVuIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoZXMgaW4gdGhh dCBkaXJlY3Rpb24uCiAgKgogICogVGhpcyBpcyB3aGVyZSBiYXRjaGVzIGFyZSBhcHBlbmRlZCB0 byB0aGUgc2NhbidzIHJpbmcgYnVmZmVyLiAgV2UgZG9uJ3QKICAqIGZyZWUgYW55IGJhdGNoZXMg aGVyZSwgdGhvdWdoOyB0aGF0IGlzIGxlZnQgdXAgdG8gdGhlIGNhbGxlci4gIFRoZSBjYWxsZXIK LSAqIGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBwb3NpdGlvbi4KKyAq IGlzIGFsc28gcmVzcG9uc2libGUgZm9yIGFkdmFuY2luZyB0aGVpciBzY2FuUG9zL3ByZWZldGNo UG9zIHBvc2l0aW9uLgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5k ZXhTY2FuQmF0Y2gKIHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9h Y2Nlc3MvcmVsc2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCA5NTAz MTIxOTkuLmQxYmM4NWQ0NyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4u aAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xOTYsNiArMTk2LDEwIEBA IHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YQogCSAqIFRoaXMgYWxsb3dzIHRhYmxl IEFNcyB0byBhdm9pZCByZWR1bmRhbnQgYW1nZXRiYXRjaCBjYWxscyB3aXRoIHRoZSBzYW1lCiAJ ICogcHJpb3JiYXRjaCAtLSB0aGUgaW5kZXggQU0gbWlnaHQgbmVlZCB0byByZWFkIGFkZGl0aW9u YWwgaW5kZXggcGFnZXMgdG8KIAkgKiBkZXRlcm1pbmUgdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hp bmcgaXRlbXMgYmV5b25kIGNhbGxlcidzIHByaW9yYmF0Y2guCisJICogSW4gcGFydGljdWxhciwg ZHVyaW5nIHByZWZldGNoaW5nIHRoZSByZWFkIHN0cmVhbSBjYWxsYmFjayBkaXNjb3ZlcnMKKwkg KiB0aGUgZW5kLW9mLXNjYW4gdmlhIHByZWZldGNoQmF0Y2guICB0YWJsZWFtX3V0aWxfZmV0Y2hf bmV4dF9iYXRjaCgpCisJICogY2hlY2tzIHRoZXNlIGZsYWdzIHNvIHRoYXQgdGhlIHNjYW4gc2lk ZSBkb2Vzbid0IHJlcGVhdCB0aGUgc2FtZQorCSAqIGFtZ2V0YmF0Y2ggY2FsbCB3aGVuIGl0IGxh dGVyIHJlYWNoZXMgdGhhdCBiYXRjaCBhcyBzY2FuQmF0Y2guCiAJICovCiAJYm9vbAkJa25vd25F bmRCYWNrd2FyZDsKIAlib29sCQlrbm93bkVuZEZvcndhcmQ7CkBAIC0yNDgsMTIgKzI1MiwyMSBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5CYXRjaERhdGEgKkluZGV4U2NhbkJhdGNoOwogICog bWF0Y2hlcyBpbi4gIEhvd2V2ZXIsIHRhYmxlIEFNcyBhcmUgZnJlZSB0byBmZXRjaCB0YWJsZSB0 dXBsZXMgaW4gd2hhdGV2ZXIKICAqIG9yZGVyIGlzIG1vc3QgY29udmVuaWVudC9lZmZpY2llbnQg LS0gcHJvdmlkZWQgdGhhdCBzdWNoIHJlb3JkZXJpbmcgY2Fubm90CiAgKiBhZmZlY3QgdGhlIG9y ZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IGxhdGVyIHJldHVybnMgdHVwbGVzIGlu LgorICoKKyAqIFRoaXMgZGF0YSBzdHJ1Y3R1cmUgYWxzbyBwcm92aWRlcyB0YWJsZSBBTXMgd2l0 aCBhIHdheSB0byByZWFkIGFoZWFkIG9mIHRoZQorICogY3VycmVudCByZWFkIHBvc2l0aW9uIGJ5 IF9tdWx0aXBsZV8gYmF0Y2hlcy9pbmRleCBwYWdlcy4gIFRoZSBmdXJ0aGVyIG91dAorICogdGhl IHRhYmxlIEFNIHJlYWRzIGFoZWFkIGxpa2UgdGhpcywgdGhlIGZ1cnRoZXIgaXQgY2FuIHNlZSBp bnRvIHRoZSBmdXR1cmUuCisgKiBUaGF0IHdheSB0aGUgdGFibGUgQU0gaXMgYWJsZSB0byByZW9y ZGVyIHdvcmsgYXMgYWdncmVzc2l2ZWx5IGFzIGRlc2lyZWQuCisgKiBGb3IgZXhhbXBsZSwgaW5k ZXggc2NhbnMgc29tZXRpbWVzIG5lZWQgdG8gcmVhZGFoZWFkIGJ5IGFzIG1hbnkgYXMgYSBmZXcK KyAqIGRvemVuIGFtZ2V0YmF0Y2ggYmF0Y2hlcyBpbiBvcmRlciB0byBtYWludGFpbiBhbiBvcHRp bWFsIEkvTyBwcmVmZXRjaAorICogZGlzdGFuY2UgKGRpc3RhbmNlIGZvciByZWFkaW5nIHRhYmxl IGJsb2Nrcy9mZXRjaGluZyB0YWJsZSB0dXBsZXMpLgogICovCiB0eXBlZGVmIHN0cnVjdCBCYXRj aFJpbmdCdWZmZXIKIHsKIAkvKiBjdXJyZW50IHBvc2l0aW9ucyBpbiBJbmRleFNjYW5EZXNjRGF0 YS5iYXRjaGJ1ZltdIGZvciBzY2FuICovCiAJQmF0Y2hSaW5nSXRlbVBvcyBzY2FuUG9zOwkvKiBz Y2FuJ3MgcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUmluZ0l0ZW1Qb3MgbWFya1BvczsJLyogbWFy ay9yZXN0b3JlIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRlbVBvcyBwcmVmZXRjaFBvczsJLyog cHJlZmV0Y2hpbmcgcG9zaXRpb24gKi8KIAogCS8qIG1hcmtQb3MncyBiYXRjaCAobm90IGluIHJp bmcgYnVmZmVyIHdoZW4gbWFya0JhdGNoICE9IHNjYW5CYXRjaCkgKi8KIAlJbmRleFNjYW5CYXRj aCBtYXJrQmF0Y2g7CkBAIC00ODcsNiArNTAwLDI4IEBAIGluZGV4X3NjYW5fYmF0Y2hfYXBwZW5k KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIAlyaW5nYnVm LT5uZXh0QmF0Y2grKzsKIH0KIAorLyoKKyAqIENvbXBhcmUgdHdvIGJhdGNoIHJpbmcgcG9zaXRp b25zIGluIHRoZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4KKyAqCisgKiBSZXR1cm5zIG5lZ2F0aXZl IGlmIHBvczEgaXMgYmVoaW5kIHBvczIsIDAgaWYgZXF1YWwsIHBvc2l0aXZlIGlmIHBvczEgaXMK KyAqIGFoZWFkIG9mIHBvczIuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitpbmRleF9zY2FuX3Bv c19jbXAoQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMSwgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zMiwKKwkJ CQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlpbnQ4CQliYXRjaGRpZmYgPSAoaW50 OCkgKHBvczEtPmJhdGNoIC0gcG9zMi0+YmF0Y2gpOworCisJaWYgKGJhdGNoZGlmZiAhPSAwKQor CQlyZXR1cm4gYmF0Y2hkaWZmOworCisJLyogU2FtZSBiYXRjaCwgY29tcGFyZSBpdGVtcyAqLwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcmVjdGlvbikpCisJCXJldHVybiBwb3MxLT5p dGVtIC0gcG9zMi0+aXRlbTsKKwllbHNlCisJCXJldHVybiBwb3MyLT5pdGVtIC0gcG9zMS0+aXRl bTsKK30KKwogLyoKICAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBpbiB0aGUg YmF0Y2guCiAgKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggZjJmZDVkMzE1Li40MTkzMDBhNmIgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUv b3B0aW1pemVyL2Nvc3QuaApAQCAtNTIsNiArNTIsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgaW50 IG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9v bCBlbmFibGVfc2Vxc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNj YW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfaW5kZXhvbmx5c2NhbjsKK2V4dGVy biBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g7CiBleHRlcm4gUEdE TExJTVBPUlQgYm9vbCBlbmFibGVfYml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29s IGVuYWJsZV90aWRzY2FuOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJvb2wgZW5hYmxlX3NvcnQ7CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggYzBkZDA5N2Fh Li4xNzQ3MWY2ZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2Fu LmMKQEAgLTE4LDYgKzE4LDcgQEAKICNpbmNsdWRlICJhY2Nlc3MvaGVhcGFtLmgiCiAjaW5jbHVk ZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIKICNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5o IgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcmVkaWNh dGUuaCIKICNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIApAQCAtNTIsNiArNTMs MTQgQEAgc3RhdGljIHZvaWQgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4 U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKIAkJCQkJ CQkJCQkJICBIZWFwQmF0Y2hEYXRhICpoYmF0Y2gsCiAJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRl bVBvcyAqcG9zKTsKK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkIGhlYXBhbV9pbmRleF9kaXJjaGFu Z2VfcmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiwKKwkJCQkJCQkJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJIEJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hy aW5nYnVmKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSB2b2lkIGhlYXBhbV9p bmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ CQkJCQkJCQkgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2Nhbik7CitzdGF0aWMgQmxvY2tOdW1iZXIg aGVhcGFtX2luZGV4X3ByZWZldGNoX25leHRfYmxvY2soUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJ CQkJCQkJCQkJCXZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJCQkJCQl2b2lk ICpwZXJfYnVmZmVyX2RhdGEpOwogCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIEluZGV4IFNjYW4g Q2FsbGJhY2tzIGZvciBoZWFwIEFNCkBAIC03OCw2ICs4NywxMCBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCS8qIHhzX2xhc3RpbmJsb2NrIG9wdGltaXphdGlvbiBz dGF0ZSAqLwogCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKIAorCS8qIFJlYWQgc3Ry ZWFtIHN0YXRlIChvdGhlciBmaWVsZHMgaW5pdGlhbGl6ZWQgYnkgY2FsbGJhY2spICovCisJQXNz ZXJ0KGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXIgPT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24p OworCUFzc2VydChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0gPT0gTlVMTCk7CisKIAlyZXR1cm4gJmhz Y2FuLT54c19iYXNlOwogfQogCkBAIC04OSw2ICsxMDIsMjMgQEAgaGVhcGFtX2luZGV4X2ZldGNo X3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJLyogUmVzY2FucyBzaG91bGQgYXZv aWQgYW4gZXhjZXNzaXZlIG51bWJlciBvZiBWTSBsb29rdXBzICovCiAJaHNjYW4tPnhzX3ZtX2l0 ZW1zID0gMTsKIAorCS8qIERlZmVuc2l2ZWx5IGRvIGFuIHVuY29uZGl0aW9uYWwgcmVhZCBzdHJl YW0gZGlyZWN0aW9uIHJlc2V0ICovCisJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IE5vTW92 ZW1lbnRTY2FuRGlyZWN0aW9uOworCisJLyoKKwkgKiBSZXNldCByZWFkIHN0cmVhbSBpdHNlbGYs IGFuZCBvdGhlciBhc3NvY2lhdGVkIHN0YXRlLgorCSAqCisJICogTm90ZTogd2UgZXhwZWN0IHRo ZSBjb3JlIGV4ZWN1dG9yIHRvIGNhbGwgaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0ICh3aGVuCisJICog dGhlIHNjYW4gaXMgdXNlYmF0Y2hyaW5nKS4gIFRoaXMgd2lsbCBpbnZhbGlkYXRlIHRoZSBzY2Fu J3MgYmF0Y2ggcmluZworCSAqIGJ1ZmZlciBzdGF0ZSwgaW5jbHVkaW5nIHNjYW5Qb3MgYW5kIHBy ZWZldGNoUG9zLgorCSAqLworCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJeworCQloc2Nh bi0+eHNfcHJlZmV0Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IAkJLyogZGVmZW5zaXZl ICovCisJCWhzY2FuLT54c19wYXVzZWQgPSBmYWxzZTsKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNj YW4tPnhzX3JlYWRfc3RyZWFtKTsKKwl9CisKIAkvKgogCSAqIERlbGliZXJhdGVseSBhdm9pZCBk cm9wcGluZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgogCSAqIFRo aXMgc2F2ZXMgY3ljbGVzIGR1cmluZyBjZXJ0YWluIHRpZ2h0IG5lc3RlZCBsb29wIGpvaW5zLCBh bmQgZHVyaW5nCkBAIC0xMTAsNiArMTQwLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRl eEZldGNoVGFibGVEYXRhICpzY2FuKQogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsKIAorCWlmIChoc2Nh bi0+eHNfcmVhZF9zdHJlYW0pCisJCXJlYWRfc3RyZWFtX2VuZChoc2Nhbi0+eHNfcmVhZF9zdHJl YW0pOworCiAJcGZyZWUoaHNjYW4pOwogCiAJLyoKQEAgLTI0Niw3ICsyNzksMTQgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4s CiAJCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIo aHNjYW4tPnhzX2NidWYpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+ eHNfYmFzZS5yZWwsIGhzY2FuLT54c19ibGspOworCQkvKgorCQkgKiBXaGVuIHVzaW5nIGEgcmVh ZCBzdHJlYW0sIHRoZSBzdHJlYW0gd2lsbCBhbHJlYWR5IGtub3cgd2hpY2ggYmxvY2sKKwkJICog bnVtYmVyIGNvbWVzIG5leHQgKHRob3VnaCBhbiBhc3NlcnRpb24gd2lsbCB2ZXJpZnkgYSBtYXRj aCBiZWxvdykKKwkJICovCisJCWlmIChoc2Nhbi0+eHNfcmVhZF9zdHJlYW0pCisJCQloc2Nhbi0+ eHNfY2J1ZiA9IHJlYWRfc3RyZWFtX25leHRfYnVmZmVyKGhzY2FuLT54c19yZWFkX3N0cmVhbSwg TlVMTCk7CisJCWVsc2UKKwkJCWhzY2FuLT54c19jYnVmID0gUmVhZEJ1ZmZlcihoc2Nhbi0+eHNf YmFzZS5yZWwsIGhzY2FuLT54c19ibGspOwogCiAJCS8qCiAJCSAqIFBydW5lIHBhZ2Ugd2hlbiBp dCBpcyBwaW5uZWQgZm9yIHRoZSBmaXJzdCB0aW1lCkBAIC01MjUsNiArNTY1LDEyIEBAIGhlYXBh bV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLAogCUFzc2Vy dChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDApOwog CUFzc2VydChhbGxfdmlzaWJsZSA9PSBOVUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CiAKKwkv KiBIYW5kbGUgcmVzZXR0aW5nIHRoZSByZWFkIHN0cmVhbSB3aGVuIHNjYW4gZGlyZWN0aW9uIGNo YW5nZXMgKi8KKwlpZiAoaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9PSBOb01vdmVtZW50U2Nh bkRpcmVjdGlvbikKKwkJaHNjYW4tPnhzX3JlYWRfc3RyZWFtX2RpciA9IGRpcmVjdGlvbjsJLyog Zmlyc3QgY2FsbCAqLworCWVsc2UgaWYgKHVubGlrZWx5KGhzY2FuLT54c19yZWFkX3N0cmVhbV9k aXIgIT0gZGlyZWN0aW9uKSkKKwkJaGVhcGFtX2luZGV4X2RpcmNoYW5nZV9yZXNldChoc2Nhbiwg ZGlyZWN0aW9uLCBiYXRjaHJpbmdidWYpOworCiAJLyoKIAkgKiBDaGVjayBpZiB0aGVyZSdzIGFu IGV4aXN0aW5nIGxvYWRlZCBzY2FuQmF0Y2ggZm9yIHVzIHRvIHJldHVybiB0aGUgbmV4dAogCSAq IG1hdGNoaW5nIGl0ZW0ncyBUSUQvaW5kZXggdHVwbGUgZnJvbQpAQCAtNTM0LDcgKzU4MCw3IEBA IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLAog CXsKIAkJLyoKIAkJICogc2NhblBvcyBpcyB2YWxpZCwgc28gc2NhbkJhdGNoIG11c3QgYWxyZWFk eSBiZSBsb2FkZWQgaW4gYmF0Y2ggcmluZwotCQkgKiBidWZmZXIuICBXZSByZWx5IG9uIHRoYXQg aGVyZS4KKwkJICogYnVmZmVyLiAgV2UgcmVseSBvbiB0aGF0IGhlcmUgKGNhbid0IGRvIHRoaXMg d2l0aCBwcmVmZXRjaEJhdGNoKS4KIAkJICovCiAJCXBnX2Fzc3VtZShiYXRjaHJpbmdidWYtPmhl YWRCYXRjaCA9PSBzY2FuUG9zLT5iYXRjaCk7CiAKQEAgLTU2NSw2ICs2MTEsMTcgQEAgaGVhcGFt X2luZGV4X2dldG5leHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCiAJCXJldHVy biBOVUxMOwogCX0KIAorCWlmIChoYWRFeGlzdGluZ1NjYW5CYXRjaCAmJiAhaHNjYW4tPnhzX3Jl YWRfc3RyZWFtKQorCXsKKwkJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3Mu dmFsaWQpOworCisJCS8qCisJCSAqIE5vdCB1c2luZyBhIHJlYWQgc3RyZWFtIHRvIGRvIGluZGV4 IHByZWZldGNoaW5nLiAgRGVjaWRlIHdoZXRoZXIgdG8KKwkJICogc3RhcnQgb25lIG5vdy4KKwkJ ICovCisJCWhlYXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhzY2FuLCBoc2Nhbik7CisJ fQorCiAJLyoKIAkgKiBBZHZhbmNlZCBzY2FuQmF0Y2guICBOb3cgcG9zaXRpb24gc2NhblBvcyB0 byB0aGUgc3RhcnQgb2YgbmV3CiAJICogc2NhbkJhdGNoLgpAQCAtNTgwLDYgKzYzNyw3IEBAIGhl YXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuLAogCXsK IAkJSW5kZXhTY2FuQmF0Y2ggaGVhZEJhdGNoID0gaW5kZXhfc2Nhbl9iYXRjaChzY2FuLAogCQkJ CQkJCQkJCQkJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKTsKKwkJQmF0Y2hSaW5nSXRlbVBvcyAq cHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKIAogCQlBc3NlcnQoaGVh ZEJhdGNoICE9IHNjYW5CYXRjaCk7CiAJCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCAh PSBzY2FuUG9zLT5iYXRjaCk7CkBAIC01ODcsMTIgKzY0NSw0NCBAQCBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zY2FuYmF0Y2hfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJLyogZnJlZSBvYnNvbGVz Y2VudCBoZWFkIGJhdGNoICh1bmxlc3MgaXQgaXMgc2NhbidzIG1hcmtCYXRjaCkgKi8KIAkJdGFi bGVhbV91dGlsX2ZyZWVfYmF0Y2goc2NhbiwgaGVhZEJhdGNoKTsKIAorCQkvKgorCQkgKiBJZiB3 ZSdyZSBhYm91dCB0byByZWxlYXNlIHRoZSBiYXRjaCB0aGF0IHByZWZldGNoUG9zIGN1cnJlbnRs eQorCQkgKiBwb2ludHMgdG8sIGp1c3QgaW52YWxpZGF0ZSBwcmVmZXRjaFBvcy4gIFdlJ2xsIHJl aW5pdGlhbGl6ZSBpdAorCQkgKiB1c2luZyBzY2FuUG9zIGlmIGFuZCB3aGVuIGhlYXBhbV9pbmRl eF9wcmVmZXRjaF9uZXh0X2Jsb2NrIGlzIG5leHQKKwkJICogY2FsbGVkLiAoV2UgbXVzdCBhdm9p ZCBjb25mdXNpbmcgYSBwcmVmZXRjaFBvcy0+YmF0Y2ggdGhhdCdzCisJCSAqIGFjdHVhbGx5IGJl Zm9yZSBoZWFkQmF0Y2ggd2l0aCBvbmUgdGhhdCdzIGFmdGVyIG5leHRCYXRjaCBkdWUgdG8KKwkJ ICogdWludDggb3ZlcmZsb3c7IHNpbXBsZXN0IHdheSBpcyB0byBpbnZhbGlkYXRlIHByZWZldGNo UG9zIGhlcmUuKQorCQkgKgorCQkgKiBUaGlzIGhhbmRsaW5nIGlzIGFwcHJveGltYXRlbHkgdGhl IG9wcG9zaXRlIG9mIHJlc3VtaW5nIGEgcGF1c2VkCisJCSAqIHJlYWQgc3RyZWFtOiB0aGlzIGhl bHBzIHRoZSBzY2FuIGRlYWwgd2l0aCBwcmVmZXRjaFBvcyBmYWxsaW5nCisJCSAqIGJlaGluZCBz Y2FuUG9zLCB3aGVyZWFzIHBhdXNpbmcgaXMgdXNlZCB3aGVuIHNjYW5Qb3MgaGFzIGZhbGxlbgor CQkgKiBiZWhpbmQgKHZlcnkgZmFyIGJlaGluZCkgcHJlZmV0Y2hQb3MuCisJCSAqLworCQlpZiAo cHJlZmV0Y2hQb3MtPnZhbGlkICYmCisJCQlwcmVmZXRjaFBvcy0+YmF0Y2ggPT0gYmF0Y2hyaW5n YnVmLT5oZWFkQmF0Y2gpCisJCQlwcmVmZXRjaFBvcy0+dmFsaWQgPSBmYWxzZTsKKwogCQkvKiBS ZW1vdmUgdGhlIGJhdGNoIGZyb20gdGhlIHJpbmcgYnVmZmVyIChldmVuIGlmIGl0J3MgbWFya0Jh dGNoKSAqLwogCQliYXRjaHJpbmdidWYtPmhlYWRCYXRjaCsrOworCisJCWlmICh1bmxpa2VseSho c2Nhbi0+eHNfcGF1c2VkKSkKKwkJeworCQkJLyoKKwkJCSAqIGhlYXBhbV9pbmRleF9wcmVmZXRj aF9uZXh0X2Jsb2NrIHBhdXNlZCB0aGUgc2NhbidzIHJlYWQgc3RyZWFtCisJCQkgKiBkdWUgdG8g b3VyIHJ1bm5pbmcgb3V0IG9mIGZyZWUgYmF0Y2ggc2xvdHMuICBOb3cgdGhhdCB3ZSd2ZQorCQkJ ICogZnJlZWQgdXAgb25lIHN1Y2ggc2xvdCwgd2UgY2FuIHJlc3VtZSB0aGUgcmVhZCBzdHJlYW0g KHNpbmNlCisJCQkgKiB0aGVyZSdzIG5vdyBzcGFjZSBmb3IgaGVhcGFtX2luZGV4X3ByZWZldGNo X25leHRfYmxvY2sgdG8gc3RvcmUKKwkJCSAqIG9uZSBtb3JlIGJhdGNoKS4KKwkJCSAqLworCQkJ QXNzZXJ0KCFpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCQkJcmVhZF9zdHJlYW1fcmVz dW1lKGhzY2FuLT54c19yZWFkX3N0cmVhbSk7CisJCQloc2Nhbi0+eHNfcGF1c2VkID0gZmFsc2U7 CisJCX0KIAl9CiAKIAkvKiBJbiBwcmFjdGljZSBzY2FuQmF0Y2ggd2lsbCBhbHdheXMgYmUgdGhl IHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNoICovCiAJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJh dGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOwogCiAJ cmV0dXJuIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoc2NhbiwgaHNjYW4sIGRpcmVj dGlvbiwKIAkJCQkJCQkJCQkgICBzY2FuQmF0Y2gsIHNjYW5Qb3MsIGFsbF92aXNpYmxlKTsKQEAg LTY5OSw2ICs3ODksMTMgQEAgaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChJbmRleFNj YW5EZXNjIHNjYW4sIEluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4sCiAgKiAoaW1wb3J0YW50IGZv ciBpbm5lciBpbmRleCBzY2FucyBvZiBhbnRpLWpvaW5zIGFuZCBzZW1pLWpvaW5zKSwgYW5kIHRo ZQogICogbmVlZCB0byB1bmd1YXJkIGJhdGNoZXMgcHJvbXB0bHkuCiAgKgorICogSW4gbm8gZXZl bnQgd2lsbCB0aGUgc2NhbiBiZSBhbGxvd2VkIHRvIGd1YXJkIG1vcmUgdGhhbiBvbmUgYmF0Y2gg YXQgYQorICogdGltZS4gIFRoZSBwcmltYXJ5IHJlYXNvbiBmb3IgdGhpcyByZXN0cmljdGlvbiBp cyB0byBhdm9pZCB1bmludGVuZGVkCisgKiBpbnRlcmFjdGlvbnMgd2l0aCB0aGUgcmVhZCBzdHJl YW0sIHdoaWNoIGhhcyBpdHMgb3duIHN0cmF0ZWd5IGZvciBrZWVwaW5nCisgKiB0aGUgbnVtYmVy IG9mIHBpbnMgaGVsZCBieSB0aGUgYmFja2VuZCB1bmRlciBjb250cm9sLiAgKFVuZ3VhcmRpbmcg dmlhCisgKiB0aGUgYW11bmd1YXJkYmF0Y2ggY2FsbGJhY2sgb2Z0ZW4gbWVhbnMgcmVsZWFzaW5n IGEgYnVmZmVyIHBpbiBvbiBhbgorICogaW5kZXggcGFnZSwgd2hpY2ggY291bnRzIGFnYWluc3Qg dGhlIHNhbWUgc2hhcmVkIHBpbiBsaW1pdC4pCisgKgogICogT25jZSB3ZSd2ZSByZXNvbHZlZCB2 aXNpYmlsaXR5IGZvciBhbGwgaXRlbXMgaW4gYSBiYXRjaCwgd2UgY2FuIHNhZmVseQogICogdW5n dWFyZCBpdCBieSBjYWxsaW5nIGFtdW5ndWFyZGJhdGNoLiAgVGhpcyBpcyBzYWZlIHdpdGggcmVz cGVjdCB0bwogICogY29uY3VycmVudCBWQUNVVU0gYmVjYXVzZSB0aGUgYmF0Y2gncyBndWFyZCAo dHlwaWNhbGx5IGEgYnVmZmVyIHBpbiBvbiB0aGUKQEAgLTgyNSwzICs5MjIsMzA3IEBAIGhlYXBh bV9pbmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyZWN0aW9uLAogCWVsc2UKIAkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4 aXRlbXNiYXRjaDsKIH0KKworLyoKKyAqIEhhbmRsZSBhIGNoYW5nZSBpbiBpbmRleCBzY2FuIGRp cmVjdGlvbiAoYXQgdGhlIHR1cGxlIGdyYW51bGFyaXR5KS4KKyAqCisgKiBSZXNldHMgdGhlIHJl YWQgc3RyZWFtLCBzaW5jZSB3ZSBjYW4ndCByZWx5IG9uIHNjYW5Qb3MgY29udGludWluZyB0byBh Z3JlZQorICogd2l0aCB0aGUgYmxvY2tzIHRoYXQgcmVhZCBzdHJlYW0gYWxyZWFkeSBjb25zdW1l ZCB1c2luZyBwcmVmZXRjaFBvcy4KKyAqCisgKiBOb3RlOiBpZmYgdGhlIHNjYW4gX2NvbnRpbnVl c18gaW4gdGhpcyBuZXcgZGlyZWN0aW9uLCBhbmQgYWN0dWFsbHkgc3RlcHMKKyAqIG9mZiBzY2Fu QmF0Y2ggdG8gYW4gZWFybGllciBpbmRleCBwYWdlLCB0YWJsZWFtX3V0aWxfZmV0Y2hfbmV4dF9i YXRjaCB3aWxsCisgKiBkZWFsIHdpdGggaXQuICBCdXQgdGhhdCBtaWdodCBuZXZlciBoYXBwZW47 IHRoZSBzY2FuIG1pZ2h0IHlldCBjaGFuZ2UKKyAqIGRpcmVjdGlvbiBhZ2FpbiAob3IganVzdCBl bmQgYmVmb3JlIHJldHVybmluZyBtb3JlIGl0ZW1zKS4KKyAqLworc3RhdGljIHBnX25vaW5saW5l IHZvaWQKK2hlYXBhbV9pbmRleF9kaXJjaGFuZ2VfcmVzZXQoSW5kZXhGZXRjaEhlYXBEYXRhICpo c2NhbiwKKwkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJIEJhdGNoUmlu Z0J1ZmZlciAqYmF0Y2hyaW5nYnVmKQoreworCS8qIFJlc2V0IHJlYWQgc3RyZWFtIHN0YXRlICov CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCWhzY2FuLT54c19w YXVzZWQgPSBmYWxzZTsKKwloc2Nhbi0+eHNfcmVhZF9zdHJlYW1fZGlyID0gZGlyZWN0aW9uOwor CisJLyogUmVzZXQgcmVhZCBzdHJlYW0gaXRzZWxmICovCisJaWYgKGhzY2FuLT54c19yZWFkX3N0 cmVhbSkKKwkJcmVhZF9zdHJlYW1fcmVzZXQoaHNjYW4tPnhzX3JlYWRfc3RyZWFtKTsKK30KKwor LyoKKyAqIERlY2lkZSB3aGV0aGVyIHRvIHN0YXJ0IGEgcmVhZCBzdHJlYW0gZm9yIGhlYXAgYmxv Y2sgcHJlZmV0Y2hpbmcgZHVyaW5nIGFuCisgKiBpbmRleCBzY2FuLgorICoKKyAqIENhbGxlZCBl YWNoIHRpbWUgYSBuZXcgYmF0Y2ggaXMgb2J0YWluZWQgZnJvbSB0aGUgaW5kZXggQU0sIGJhcnJp bmcgdGhlCisgKiBmaXJzdCB0aW1lIHRoYXQgaGFwcGVucy4gIFdlIGRlbGF5IGluaXRpYWxpemlu ZyB0aGUgc3RyZWFtIHVudGlsIHJlYWRpbmcKKyAqIGZyb20gdGhlIHNjYW4ncyBzZWNvbmQgYmF0 Y2guICBUaGlzIGhldXJpc3RpYyBhdm9pZHMgd2FzdGluZyBjeWNsZXMgb24KKyAqIHN0YXJ0aW5n IGEgcmVhZCBzdHJlYW0gZm9yIHZlcnkgc2VsZWN0aXZlIGluZGV4IHNjYW5zLgorICoKKyAqIFdl IGF2b2lkIHByZWZldGNoaW5nIGR1cmluZyBzY2FucyB3aGVyZSB3ZSdyZSB1bmFibGUgdG8gZHJv cCBlYWNoIGJhdGNoJ3MKKyAqIGJ1ZmZlciBwaW4gcmlnaHQgYXdheSAobm9uLU1WQ0Mgc25hcHNo b3Qgc2NhbnMpLiAgV2UgYXJlIG5vdCBwcmVwYXJlZCB0bworICogc2Vuc2libHkgbGltaXQgdGhl IHRvdGFsIG51bWJlciBvZiBidWZmZXIgcGlucyBoZWxkIChyZWFkIHN0cmVhbSBoYW5kbGVzCisg KiBhbGwgcGluIHJlc291cmNlIG1hbmFnZW1lbnQgZm9yIHVzLCBhbmQga25vd3Mgbm90aGluZyBh Ym91dCBwaW5zIGhlbGQgb24KKyAqIGluZGV4IHBhZ2VzL3dpdGhpbiBiYXRjaGVzKS4KKyAqCisg KiBXZSBhbHNvIGRlbGF5IGNyZWF0aW5nIGEgcmVhZCBzdHJlYW0gZHVyaW5nIGluZGV4LW9ubHkg c2NhbnMgdGhhdCBoYXZlbid0CisgKiBkb25lIGFueSBoZWFwIGZldGNoZXMgeWV0LiAgV2UgZG9u J3Qgd2FudCB0byB3YXN0ZSBhbnkgY3ljbGVzIG9uCisgKiBhbGxvY2F0aW5nIGEgcmVhZCBzdHJl YW0gdW50aWwgd2UgaGF2ZSBhIGRlbW9uc3RyYXRlZCBuZWVkIHRvIHBlcmZvcm0KKyAqIGhlYXAg ZmV0Y2hlcy4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIHZvaWQKK2hl YXBhbV9pbmRleF9jb25zaWRlcl9wcmVmZXRjaGluZyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJ CQkJCSAgSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbikKK3sKKwlBc3NlcnQoIWhzY2FuLT54c19y ZWFkX3N0cmVhbSk7CisJQXNzZXJ0KCFzY2FuLT5iYXRjaHJpbmdidWYucHJlZmV0Y2hQb3MudmFs aWQpOworCisJaWYgKHNjYW4tPk1WQ0NTY2FuICYmIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gg JiYKKwkJaHNjYW4tPnhzX2JsayAhPSBJbnZhbGlkQmxvY2tOdW1iZXIpCS8qIGZvciBpbmRleC1v bmx5IHNjYW5zICovCisJCWhzY2FuLT54c19yZWFkX3N0cmVhbSA9CisJCQlyZWFkX3N0cmVhbV9i ZWdpbl9yZWxhdGlvbihSRUFEX1NUUkVBTV9ERUZBVUxULCBOVUxMLAorCQkJCQkJCQkJICAgc2Nh bi0+aGVhcFJlbGF0aW9uLCBNQUlOX0ZPUktOVU0sCisJCQkJCQkJCQkgICBoZWFwYW1faW5kZXhf cHJlZmV0Y2hfbmV4dF9ibG9jaywKKwkJCQkJCQkJCSAgIHNjYW4sIDApOworCS8qIGVsc2UgZG9u J3Qgc3RhcnQgYSByZWFkIHN0cmVhbSBmb3IgcHJlZmV0Y2hpbmcgKG5vdCB5ZXQsIGF0IGxlYXN0 KSAqLworfQorCisvKgorICogUmV0dXJuIHRoZSBuZXh0IGJsb2NrIHRvIHRoZSByZWFkIHN0cmVh bSB3aGVuIHBlcmZvcm1pbmcgaW5kZXggcHJlZmV0Y2hpbmcuCisgKgorICogVGhlIGluaXRpYWwg YmF0Y2ggaXMgYWx3YXlzIGxvYWRlZCBieSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zY2FuYmF0Y2hf cG9zLgorICogV2UgZG9uJ3QgZ2V0IGNhbGxlZCB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1f bmV4dF9idWZmZXIgY2FsbCwgd2hlbiBhCisgKiBoZWFwIGJsb2NrIGlzIHJlcXVlc3RlZCBmcm9t IHRoZSBzY2FuJ3Mgc3RyZWFtIGZvciB0aGUgZmlyc3QgdGltZS4KKyAqCisgKiBUaGUgcG9zaXRp b24gb2YgdGhlIHJlYWRfc3RyZWFtIGlzIHN0b3JlZCBpbiBwcmVmZXRjaFBvcy4gIEl0IGlzIHR5 cGljYWwKKyAqIGZvciBwcmVmZXRjaFBvcyB0byBjb25zaXN0ZW50bHkgc3RheSBhaGVhZCBvZiB0 aGUgc2NhblBvcyBwb3NpdGlvbiB0aGF0J3MKKyAqIHVzZWQgdG8gdHJhY2sgdGhlIG5leHQgVElE IGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCByZXR1cm4KKyAqIHRvIHRo ZSBzY2FuIChhZnRlciB0aGUgZmlyc3QgdGltZSB3ZSBnZXQgY2FsbGVkKS4gIEhvd2V2ZXIsIHRo YXQgaXNuJ3QgYQorICogcHJlY29uZGl0aW9uLiAgVGhlcmUgaXMgYSBzdHJpY3QgcG9zdGNvbmRp dGlvbiwgdGhvdWdoOiB3aGVuIHdlIHJldHVybgorICogd2UnbGwgYWx3YXlzIGxlYXZlIHNjYW5Q b3MgPD0gcHJlZmV0Y2hQb3MgKHVudGlsIHByZWZldGNoaW5nIGVuZHMpLgorICovCitzdGF0aWMg QmxvY2tOdW1iZXIKK2hlYXBhbV9pbmRleF9wcmVmZXRjaF9uZXh0X2Jsb2NrKFJlYWRTdHJlYW0g KnN0cmVhbSwKKwkJCQkJCQkJIHZvaWQgKmNhbGxiYWNrX3ByaXZhdGVfZGF0YSwKKwkJCQkJCQkJ IHZvaWQgKnBlcl9idWZmZXJfZGF0YSkKK3sKKwlJbmRleFNjYW5EZXNjIHNjYW4gPSAoSW5kZXhT Y2FuRGVzYykgY2FsbGJhY2tfcHJpdmF0ZV9kYXRhOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlCYXRjaFJp bmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5n SXRlbVBvcyAqc2NhblBvcyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJQmF0Y2hSaW5nSXRl bVBvcyAqcHJlZmV0Y2hQb3MgPSAmYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvczsKKwlTY2FuRGly ZWN0aW9uIHhzX3JlYWRfc3RyZWFtX2RpciA9IGhzY2FuLT54c19yZWFkX3N0cmVhbV9kaXI7CisJ SW5kZXhTY2FuQmF0Y2ggcHJlZmV0Y2hCYXRjaDsKKwlib29sCQlmcm9tU2NhblBvcyA9IGZhbHNl OworCisJLyoKKwkgKiBzY2FuUG9zIG11c3QgYWx3YXlzIGJlIHZhbGlkIHdoZW4gcHJlZmV0Y2hp bmcgdGFrZXMgcGxhY2UuICBUaGVyZSBoYXMKKwkgKiB0byBiZSBhdCBsZWFzdCBvbmUgYmF0Y2gs IGxvYWRlZCBhcyBvdXIgc2NhbkJhdGNoLiAgVGhlIHNjYW4gZGlyZWN0aW9uCisJICogbXVzdCBi ZSBlc3RhYmxpc2hlZCwgdG9vLgorCSAqLworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoX2NvdW50 KHNjYW4pID4gMCk7CisJQXNzZXJ0KHNjYW5Qb3MtPnZhbGlkICYmIGluZGV4X3NjYW5fYmF0Y2hf bG9hZGVkKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSk7CisJQXNzZXJ0KHNjYW4tPk1WQ0NTY2FuKTsK KwlBc3NlcnQoIWhzY2FuLT54c19wYXVzZWQpOworCUFzc2VydCh4c19yZWFkX3N0cmVhbV9kaXIg IT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJLyoKKwkgKiBwcmVmZXRjaFBvcyBtaWdo dCBub3QgeWV0IGJlIHZhbGlkLiAgSXQgbWlnaHQgaGF2ZSBhbHNvIGZhbGxlbiBiZWhpbmQKKwkg KiBzY2FuUG9zLiAgRGVhbCB3aXRoIGJvdGguCisJICoKKwkgKiBJZiBwcmVmZXRjaFBvcyBoYXMg bm90IGJlZW4gaW5pdGlhbGl6ZWQgeWV0LCB0aGF0IHR5cGljYWxseSBpbmRpY2F0ZXMKKwkgKiB0 aGF0IHRoaXMgaXMgdGhlIGZpcnN0IGNhbGwgaGVyZSBmb3IgdGhlIGVudGlyZSBzY2FuLiAgV2Ug aW5pdGlhbGl6ZQorCSAqIHByZWZldGNoUG9zIHVzaW5nIHRoZSBjdXJyZW50IHNjYW5Qb3MsIHNp bmNlIHRoZSBjdXJyZW50IHNjYW5CYXRjaAorCSAqIGl0ZW0ncyBUSUQgc2hvdWxkIGhhdmUgaXRz IGJsb2NrIG51bWJlciByZXR1cm5lZCBieSB0aGUgcmVhZCBzdHJlYW0KKwkgKiBmaXJzdC4gIEl0 J3MgbGlrZWx5IHRoYXQgcHJlZmV0Y2hQb3Mgd2lsbCBnZXQgYWhlYWQgb2Ygc2NhblBvcyBiZWZv cmUKKwkgKiBsb25nLCBidXQgdGhhdCBoYXNuJ3QgaGFwcGVuZWQgeWV0LgorCSAqCisJICogSXQn cyBhbHNvIHBvc3NpYmxlIGZvciBwcmVmZXRjaFBvcyB0byAiZmFsbCBiZWhpbmQiIHNjYW5Qb3Ms IGF0IGxlYXN0CisJICogaW4gYSB0cml2aWFsIHNlbnNlOiBpZiBtYW55IGFkamFjZW50IGl0ZW1z IGFyZSByZXR1cm5lZCB0aGF0IGNvbnRhaW4KKwkgKiBUSURzIHRoYXQgcG9pbnQgdG8gdGhlIHNh bWUgaGVhcCBibG9jaywgc2NhblBvcyBjYW4gYWN0dWFsbHkgb3ZlcnRha2UKKwkgKiBwcmVmZXRj aFBvcyAocHJlZmV0Y2hQb3MgY2FuJ3QgYWR2YW5jZSB1bnRpbCB3ZSdyZSBhY3R1YWxseSBjYWxs ZWQpLgorCSAqIFJlaW5pdGlhbGl6aW5nIGZyb20gc2NhblBvcyBpcyBlbm91Z2ggdG8gZW5zdXJl IHRoYXQgcHJlZmV0Y2hQb3Mgc3RpbGwKKwkgKiBmZXRjaGVzIHRoZSBuZXh0IGhlYXAgYmxvY2sg dGhhdCBzY2FuUG9zIHdpbGwgcmVxdWlyZSAocHJlZmV0Y2hQb3MgY2FuCisJICogbmV2ZXIgZmFs bCBiZWhpbmQgImJ5IG1vcmUgdGhhbiBvbmUgZ3JvdXAgb2YgaXRlbXMgdGhhdCBhbGwgcG9pbnQg dG8KKwkgKiB0aGUgc2FtZSBoZWFwIGJsb2NrIiwgc28gdGhpcyBpcyBzYWZlKS4gIFRoaXMgaXMg cGFydGljdWxhcmx5IGxpa2VseQorCSAqIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zIHRoYXQgcmVx dWlyZSBvbmx5IGEgZmV3IGhlYXAgZmV0Y2hlczogd2UnbGwKKwkgKiBvbmx5IGJlIGNhbGxlZCB3 aGVuIHJlYWRfc3RyZWFtX25leHRfYnVmZmVyIGlzIGNhbGxlZCwgd2hpY2ggaGFwcGVucworCSAq IGZhciBsZXNzIG9mdGVuIHRoYW4gaXQgd291bGQgZHVyaW5nIGFuIGVxdWl2YWxlbnQgcGxhaW4g aW5kZXggc2Nhbi4KKwkgKgorCSAqIE5vdGU6IHdoZW4gaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyBmcmVlcyBhIGJhdGNoIHRoYXQKKwkgKiBwcmVmZXRjaFBvcyBwb2ludHMgdG8s IGl0J2xsIGludmFsaWRhdGUgcHJlZmV0Y2hQb3MgZm9yIHVzLiAgVGhpcworCSAqIHJlbW92ZXMg YW55IGRhbmdlciBvZiBwcmVmZXRjaFBvcy5iYXRjaCBmYWxsaW5nIHNvIGZhciBiZWhpbmQKKwkg KiBzY2FuUG9zLmJhdGNoIHRoYXQgaXQgd3JhcHMgYXJvdW5kIChhbmQgYXBwZWFycyB0byBiZSBh aGVhZCBvZiBzY2FuUG9zCisJICogaW5zdGVhZCBvZiBiZWhpbmQgaXQpLgorCSAqLworCWlmICgh cHJlZmV0Y2hQb3MtPnZhbGlkIHx8CisJCWluZGV4X3NjYW5fcG9zX2NtcChwcmVmZXRjaFBvcywg c2NhblBvcywgeHNfcmVhZF9zdHJlYW1fZGlyKSA8IDApCisJeworCQloc2Nhbi0+eHNfcHJlZmV0 Y2hfYmxvY2sgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCSpwcmVmZXRjaFBvcyA9ICpzY2FuUG9z OworCQlmcm9tU2NhblBvcyA9IHRydWU7CisKKwkJLyoKKwkJICogV2UgbXVzdCBhdm9pZCBrZWVw aW5nIGFueSBiYXRjaCBndWFyZGVkIGZvciBtb3JlIHRoYW4gYW4gaW5zdGFudCwKKwkJICogdG8g YXZvaWQgdW5kZXNpcmFibGUgaW50ZXJhY3Rpb25zIHdpdGggdGhlIHNjYW4ncyByZWFkIHN0cmVh bS4KKwkJICogU2VlIGNvbW1lbnQgYW5kIGFzc2VydGlvbiBhdCB0aGUgdG9wIG9mIHRoZSBsb29w IGJlbG93LgorCQkgKi8KKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJeworCQkJSGVhcEJh dGNoRGF0YSAqaGJhdGNoOworCisJCQkvKgorCQkJICogTWFrZSBoZWFwYW1faW5kZXhfYmF0Y2hf cG9zX3Zpc2liaWxpdHkgcmVsZWFzZSByZXNvdXJjZXMKKwkJCSAqIGVhZ2VybHkKKwkJCSAqLwor CQkJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gc2Nhbi0+bWF4aXRlbXNiYXRjaDsKKworCQkJLyogTWFr ZSBzdXJlIHRoYXQgdGhpcyBuZXcgcHJlZmV0Y2hCYXRjaCBoYXMgbm8gcmVzb3VyY2VzIGhlbGQg Ki8KKwkJCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHByZWZldGNoUG9z LT5iYXRjaCk7CisJCQloYmF0Y2ggPSBoZWFwX2JhdGNoX2RhdGEocHJlZmV0Y2hCYXRjaCwgc2Nh bik7CisKKwkJCS8qIFNldCB2aXNpYmlsaXR5IGluZm8gbm90IHNldCB0aHJvdWdoIHNjYW5CYXRj aCAqLworCQkJaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KHNjYW4sIHhzX3JlYWRf c3RyZWFtX2RpciwKKwkJCQkJCQkJCQkJICBwcmVmZXRjaEJhdGNoLCBoYmF0Y2gsCisJCQkJCQkJ CQkJCSAgcHJlZmV0Y2hQb3MpOworCQl9CisJCWVsc2UKKwkJCUFzc2VydChzY2FuLT5iYXRjaElt bWVkaWF0ZVVuZ3VhcmQpOworCX0KKworCXByZWZldGNoQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNo KHNjYW4sIHByZWZldGNoUG9zLT5iYXRjaCk7CisJZm9yICg7OykKKwl7CisJCUJhdGNoTWF0Y2hp bmdJdGVtICppdGVtOworCQlCbG9ja051bWJlciBwcmVmZXRjaF9ibG9jazsKKworCQkvKgorCQkg KiBXZSBuZXZlciBjYWxsIGFtZ2V0YmF0Y2ggd2l0aG91dCBpbW1lZGlhdGVseSB1bmd1YXJkaW5n IHRoZSBiYXRjaCwKKwkJICogZWl0aGVyIHdpdGhpbiB0aGUgaW5kZXggQU0gb3IgaGVyZSAod2hl biB3ZSBlYWdlcmx5IGxvYWQgYWxsIG9mIHRoZQorCQkgKiBiYXRjaCdzIHZpc2liaWxpdHkgaW5m b3JtYXRpb24gZHVyaW5nIGFuIGluZGV4LW9ubHkgc2NhbikuICBUaGUKKwkJICogaW5kZXggQU0g d29uJ3QgaG9sZCBvbnRvIFRJRCBpbnRlcmxvY2sgYnVmZmVyIHBpbnMsIGtlZXBpbmcgdGhlCisJ CSAqIGFic29sdXRlIG51bWJlciBvZiBwaW5zIGhlbGQgdG8gYSBtaW5pbXVtLgorCQkgKgorCQkg KiBUaGlzIGlzIGRlZmVuc2l2ZS4gIFRoZSByZWFkIHN0cmVhbSB0cmllcyB0byBiZSBjYXJlZnVs IGFib3V0IG5vdAorCQkgKiBwaW5uaW5nIHRvbyBtYW55IGJ1ZmZlcnMsIGFuZCB0aGF0J3MgaGFy ZGVyIHRvIGRvIHJlbGlhYmx5IGlmIHRoZXJlCisJCSAqIGFyZSB2YXJpYWJsZSBudW1iZXJzIG9m IHBpbnMgdGFrZW4gd2l0aG91dCBzdWNoIGNhcmUuCisJCSAqLworCQlBc3NlcnQoIXByZWZldGNo QmF0Y2gtPmlzR3VhcmRlZCk7CisJCWlmIChmcm9tU2NhblBvcykKKwkJeworCQkJLyoKKwkJCSAq IERvbid0IGluY3JlbWVudCBpdGVtIHdoZW4gcHJlZmV0Y2hQb3Mgd2FzIGp1c3QgaW5pdGlhbGl6 ZWQKKwkJCSAqIHVzaW5nIHNjYW5Qb3MuICBXZSdsbCByZXR1cm4gdGhlIHNjYW5Qb3MgaXRlbSdz IGhlYXAgYmxvY2sKKwkJCSAqIGRpcmVjdGx5IG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUuICBJbiBv dGhlciB3b3Jkcywgd2UnbGwgcmV0dXJuCisJCQkgKiB0aGUgaGVhcCBibG9jayBmcm9tIFRJRCBw YXNzZWQgdG8gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwKKwkJCSAqIGF0IHRoZSBwb2lu dCB3aGVyZSBpdCBjYWxsZWQgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIgZm9yIHRoZQorCQkJICog Zmlyc3QgdGltZSBkdXJpbmcgdGhlIHNjYW4uCisJCQkgKi8KKwkJCWZyb21TY2FuUG9zID0gZmFs c2U7CisJCX0KKwkJZWxzZSBpZiAoIWluZGV4X3NjYW5fcG9zX2FkdmFuY2UoeHNfcmVhZF9zdHJl YW1fZGlyLAorCQkJCQkJCQkJCSBwcmVmZXRjaEJhdGNoLCBwcmVmZXRjaFBvcykpCisJCXsKKwkJ CS8qCisJCQkgKiBSYW4gb3V0IG9mIGl0ZW1zIGZyb20gcHJlZmV0Y2hCYXRjaC4gIFRyeSB0byBh ZHZhbmNlIHRvIHRoZQorCQkJICogc2NhbidzIG5leHQgYmF0Y2guCisJCQkgKi8KKwkJCWlmICh1 bmxpa2VseShpbmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpKQorCQkJeworCQkJCS8qCisJCQkJ ICogQ2FuJ3QgYWR2YW5jZSBwcmVmZXRjaEJhdGNoIGJlY2F1c2UgYWxsIGF2YWlsYWJsZQorCQkJ CSAqIGJhdGNocmluZ2J1ZiBiYXRjaCBzbG90cyBhcmUgY3VycmVudGx5IGluIHVzZS4KKwkJCQkg KgorCQkJCSAqIERlYWwgd2l0aCB0aGlzIGJ5IG1vbWVudGFyaWx5IHBhdXNpbmcgdGhlIHJlYWQg c3RyZWFtLgorCQkJCSAqIGhlYXBhbV9pbmRleF9nZXRuZXh0X3NjYW5iYXRjaF9wb3Mgd2lsbCBy ZXN1bWUgdGhlIHJlYWQKKwkJCQkgKiBzdHJlYW0gbGF0ZXIsIHRob3VnaCBvbmx5IGFmdGVyIHNj YW5Qb3MgaGFzIGNvbnN1bWVkIGFsbAorCQkJCSAqIHJlbWFpbmluZyBpdGVtcyBmcm9tIHNjYW5C YXRjaCAoYXQgd2hpY2ggcG9pbnQgdGhlIGN1cnJlbnQKKwkJCQkgKiBoZWFkIGJhdGNoIHdpbGwg YmUgZnJlZWQsIG1ha2luZyBhIHNsb3QgYXZhaWxhYmxlIGZvciByZXVzZQorCQkJCSAqIGhlcmUg YnkgdXMpLgorCQkJCSAqCisJCQkJICogSW4gcHJhY3RpY2Ugd2UgaGFyZGx5IGV2ZXIgbmVlZCB0 byBkbyB0aGlzLiAgSXQgd291bGQgYmUKKwkJCQkgKiBwb3NzaWJsZSB0byBhdm9pZCB0aGUgbmVl ZCB0byBwYXVzZSB0aGUgcmVhZCBzdHJlYW0gYnkKKwkJCQkgKiBkeW5hbWljYWxseSBhbGxvY2F0 aW5nIHNsb3RzLCBidXQgdGhhdCB3b3VsZCBhZGQgY29tcGxleGl0eQorCQkJCSAqIGZvciBubyBy ZWFsIGJlbmVmaXQuICBJdCBhbHNvIHNlZW1zIGxpa2UgYSBnb29kIGlkZWEgdG8KKwkJCQkgKiBp bXBvc2Ugc29tZSBoYXJkIGxpbWl0IG9uIHRoZSBudW1iZXIgb2YgYmF0Y2hlcyB0aGF0CisJCQkJ ICogcHJlZmV0Y2hQb3MgY2FuIGdldCBhaGVhZCBvZiBzY2FuUG9zIGJ5IChlc3BlY2lhbGx5IGlu IHRoZQorCQkJCSAqIGNhc2Ugb2YgaW5kZXgtb25seSBzY2Fucywgd2hlcmUgd2Ugb2Z0ZW4gd29u J3QgaGF2ZSBhbnkKKwkJCQkgKiBoZWFwIGJsb2NrIHRvIHJldHVybiBmcm9tIG1vc3Qgb2YgdGhl IHNjYW4ncyBiYXRjaGVzKS4KKwkJCQkgKi8KKwkJCQloc2Nhbi0+eHNfcGF1c2VkID0gdHJ1ZTsK KwkJCQlyZXR1cm4gcmVhZF9zdHJlYW1fcGF1c2Uoc3RyZWFtKTsKKwkJCX0KKworCQkJcHJlZmV0 Y2hCYXRjaCA9IHRhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJ CQkJCSAgeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJCQkJCQkJCQkJCQkgIHByZWZldGNoQmF0Y2gs CisJCQkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJaWYgKCFwcmVmZXRjaEJhdGNoKQor CQkJeworCQkJCS8qCisJCQkJICogTm8gbW9yZSBiYXRjaGVzIGluIHRoaXMgZGlyZWN0aW9uLCBz byBhbGwgdGhlIGJhdGNoZXMgdGhhdAorCQkJCSAqIHRoZSBzY2FuIHdpbGwgZXZlciByZXF1aXJl IChiYXJyaW5nIGEgY2hhbmdlIGluIHNjYW4KKwkJCQkgKiBkaXJlY3Rpb24pIGFyZSBub3cgbG9h ZGVkCisJCQkJICovCisJCQkJcmV0dXJuIEludmFsaWRCbG9ja051bWJlcjsKKwkJCX0KKworCQkJ LyogUG9zaXRpb24gcHJlZmV0Y2hQb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldyBwcmVmZXRjaEJhdGNo ICovCisJCQlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goeHNfcmVhZF9zdHJlYW1fZGlyLAorCQkJ CQkJCQkJIHByZWZldGNoQmF0Y2gsIHByZWZldGNoUG9zKTsKKworCQkJaWYgKHNjYW4tPnhzX3dh bnRfaXR1cCkKKwkJCXsKKwkJCQlIZWFwQmF0Y2hEYXRhICpoYmF0Y2ggPSBoZWFwX2JhdGNoX2Rh dGEocHJlZmV0Y2hCYXRjaCwgc2Nhbik7CisKKwkJCQkvKiBtYWtlIHN1cmUgd2UgaGF2ZSB2aXNp YmlsaXR5IGluZm8gZm9yIHRoZSBlbnRpcmUgYmF0Y2ggKi8KKwkJCQlBc3NlcnQoaHNjYW4tPnhz X3ZtX2l0ZW1zID09IHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJCWhlYXBhbV9pbmRleF9iYXRj aF9wb3NfdmlzaWJpbGl0eShzY2FuLCB4c19yZWFkX3N0cmVhbV9kaXIsCisJCQkJCQkJCQkJCQkg IHByZWZldGNoQmF0Y2gsIGhiYXRjaCwKKwkJCQkJCQkJCQkJCSAgcHJlZmV0Y2hQb3MpOworCQkJ fQorCQkJZWxzZQorCQkJCUFzc2VydChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpOworCQl9 CisKKwkJLyoKKwkJICogcHJlZmV0Y2hQb3Mgbm93IHBvaW50cyB0byB0aGUgbmV4dCBpdGVtIHdo b3NlIFRJRCdzIGhlYXAgYmxvY2sKKwkJICogbnVtYmVyIG1pZ2h0IG5lZWQgdG8gYmUgcHJlZmV0 Y2hlZAorCQkgKi8KKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgcHJlZmV0Y2hQb3Mt PmJhdGNoKSA9PSBwcmVmZXRjaEJhdGNoKTsKKwkJQXNzZXJ0KHByZWZldGNoUG9zLT5pdGVtID49 IHByZWZldGNoQmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgcHJlZmV0Y2hQb3MtPml0ZW0gPD0g cHJlZmV0Y2hCYXRjaC0+bGFzdEl0ZW0pOworCQkvKiBzY2FuUG9zIGlzIGFsd2F5cyA8PSBwcmVm ZXRjaFBvcyB3aGVuIHdlIHJldHVybiAqLworCQlBc3NlcnQoaW5kZXhfc2Nhbl9wb3NfY21wKHNj YW5Qb3MsIHByZWZldGNoUG9zLCB4c19yZWFkX3N0cmVhbV9kaXIpIDw9IDApOworCisJCWlmIChz Y2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCUhlYXBCYXRjaERhdGEgKmhiYXRjaCA9IGhlYXBf YmF0Y2hfZGF0YShwcmVmZXRjaEJhdGNoLCBzY2FuKTsKKworCQkJQXNzZXJ0KGhiYXRjaC0+dmlz SW5mb1twcmVmZXRjaFBvcy0+aXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsKKwkJCWlm IChoYmF0Y2gtPnZpc0luZm9bcHJlZmV0Y2hQb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxM X1ZJU0lCTEUpCisJCQl7CisJCQkJLyogaXRlbSBpcyBrbm93biB0byBiZSBhbGwtdmlzaWJsZSAt LSBkb24ndCBwcmVmZXRjaCAqLworCQkJCWNvbnRpbnVlOworCQkJfQorCQl9CisKKwkJaXRlbSA9 ICZwcmVmZXRjaEJhdGNoLT5pdGVtc1twcmVmZXRjaFBvcy0+aXRlbV07CisJCXByZWZldGNoX2Js b2NrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcigmaXRlbS0+dGFibGVUaWQpOworCisJCWlm IChwcmVmZXRjaF9ibG9jayA9PSBoc2Nhbi0+eHNfcHJlZmV0Y2hfYmxvY2spCisJCXsKKwkJCS8q CisJCQkgKiBwcmVmZXRjaF9ibG9jayBtYXRjaGVzIHRoZSBsYXN0IHByZWZldGNoUG9zIGl0ZW0n cyBUSUQncyBoZWFwCisJCQkgKiBibG9jayBudW1iZXI7IHdlIG11c3Qgbm90IHJldHVybiB0aGUg c2FtZSBwcmVmZXRjaF9ibG9jayB0d2ljZQorCQkJICogKHR3aWNlIGluIHN1Y2Nlc3Npb24pCisJ CQkgKi8KKwkJCWNvbnRpbnVlOworCQl9CisKKwkJLyogV2UgaGF2ZSBhIG5ldyBoZWFwIGJsb2Nr IG51bWJlciB0byByZXR1cm4gdG8gcmVhZCBzdHJlYW0gKi8KKwkJaHNjYW4tPnhzX3ByZWZldGNo X2Jsb2NrID0gcHJlZmV0Y2hfYmxvY2s7CisJCXJldHVybiBwcmVmZXRjaF9ibG9jazsKKwl9CisK KwlyZXR1cm4gSW52YWxpZEJsb2NrTnVtYmVyOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRl eGJhdGNoLmMKaW5kZXggNTY1MTgyNDMwLi44ZTkxMzIyNWIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YmF0Y2guYwpAQCAtMTAsNyArMTAsMTAgQEAKICAqIGFwcHJvYWNoIGVuYWJsZXMg ZWZmaWNpZW50IHByZWZldGNoaW5nIG9mIHRhYmxlIEFNIGJsb2NrcyBkdXJpbmcgb3JkZXJlZAog ICogaW5kZXggc2NhbnMuCiAgKgotICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMgaW4g aW5kZXgga2V5IHNwYWNlIG9yZGVyLgorICogVGhlIHJpbmcgYnVmZmVyIGxvYWRzIGJhdGNoZXMg aW4gaW5kZXgga2V5IHNwYWNlIG9yZGVyLiAgVGhpcyBhbGxvd3MgdGhlCisgKiB0YWJsZSBBTSB0 byBtYWludGFpbiBhbiBhZGVxdWF0ZSBwcmVmZXRjaCBkaXN0YW5jZTogaXRzIHJlYWQgc3RyZWFt CisgKiBjYWxsYmFjayBpcyB0aGVyZWJ5IGFibGUgdG8gcmVxdWVzdCB0YWJsZSBibG9ja3MgcmVm ZXJlbmNlZCBieSBpbmRleCBwYWdlcworICogdGhhdCBhcmUgd2VsbCBhaGVhZCBvZiB0aGUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uJ3MgaW5kZXggcGFnZS4KICAqCiAgKiBUaGVyZSdzIHRocmVlIHR5 cGVzIG9mIGZ1bmN0aW9ucyBpbiB0aGlzIG1vZHVsZToKICAqCkBAIC0zMCw2ICszMywyNSBAQAog ICogICAgQU1zIHRoYXQgaW1wbGVtZW50IHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIFRoZXNl IG1hbmFnZSBiYXRjaAogICogICAgYWxsb2NhdGlvbiwgaW5kZXggcGFnZSBidWZmZXIgbG9jayBy ZWxlYXNlLCBhbmQgYmF0Y2ggbWVtb3J5IHJlY3ljbGluZy4KICAqCisgKiBUaGVzZSB0aHJlZSBs YXllcnMgY29vcmRpbmF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvdXBsaW5nOiB0aGUgY29yZSBsaWZl Y3ljbGUKKyAqIGZ1bmN0aW9ucyBhc3N1bWUgdGhhdCB0YWJsZSBBTXMgdXNlIHNjYW5Qb3Mvc2Nh bkJhdGNoIGFuZCBwcmVmZXRjaFBvcy8KKyAqIHByZWZldGNoQmF0Y2ggaW4gYSBzdGFuZGFyZGl6 ZWQgd2F5IChzZWUgaGVhcGFtX2luZGV4c2Nhbi5jIGZvciB0aGUKKyAqIHJlZmVyZW5jZSBpbXBs ZW1lbnRhdGlvbiksIHdoaWxlIHRhYmxlIEFNcyBhc3N1bWUgdGhhdCBpbmRleCBBTXMgZnJlZSBh bmQKKyAqIHVubG9jayBiYXRjaGVzIGFjY29yZGluZyB0byB0aGUgY29udmVudGlvbnMgZXN0YWJs aXNoZWQgaGVyZS4gIFNlZQorICogaW5kZXhhbS5zZ21sIGZvciB0aGUgZnVsbCBzcGVjaWZpY2F0 aW9uIG9mIHRoaXMgY29udHJhY3QuCisgKgorICogVGhlIHRhYmxlIEFNIGZ1bGx5IGNvbnRyb2xz IHRoZSByZWFkIHN0cmVhbSBhcyBpdHMgb3duIHByaXZhdGUgc3RhdGUuCisgKiBXaGVuIHRoZSBz Y2FuIGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgdGFibGUgQU0gbXVzdCBpbW1lZGlhdGVseSByZXNl dCBpdHMKKyAqIHJlYWQgc3RyZWFtIGFuZCBpbnZhbGlkYXRlIHByZWZldGNoUG9zIC0tIGJsb2Nr cyBhbHJlYWR5IHJlcXVlc3RlZCB2aWEKKyAqIHByZWZldGNoUG9zIHdpbGwgbm8gbG9uZ2VyIG1h dGNoIHdoYXQgc2NhblBvcyBuZWVkcyB0byByZXR1cm4uCisgKgorICogQ3Jvc3NpbmcgYSBiYXRj aCBib3VuZGFyeSBpbiBhIG5ldyBzY2FuIGRpcmVjdGlvbiBpcyBhIHNlcGFyYXRlIHByb2Nlc3Ms CisgKiBoYW5kbGVkIGhlcmU6IHRhYmxlIEFNcyBhcmUgcmVxdWlyZWQgdG8gY2FsbCB0YWJsZWFt X3V0aWxfYmF0Y2hfZGlyY2hhbmdlCisgKiB0byBsZWF2ZSB0aGUgc2NhbidzIGJhdGNoIHJpbmcg YnVmZmVyIGluIGEgY29uc2lzdGVudCBzdGF0ZS4gIFRoZSBjdXJyZW50CisgKiBpbXBsZW1lbnRh dGlvbiBoYW5kbGVzIHRoaXMgYnkgc2ltcGx5IGRpc2NhcmRpbmcgbW9zdCBiYXRjaGVzLiAgVGhl IGtleQorICogaW52YXJpYW50IGlzIHRoYXQgYWxsIGxvYWRlZCBiYXRjaGVzIG11c3QgYmUgaW4g YSBjb25zaXN0ZW50IHNjYW4gZGlyZWN0aW9uCisgKiBvcmRlci4KKyAqCiAgKiBQb3J0aW9ucyBD b3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3Jv dXAKICAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVy c2l0eSBvZiBDYWxpZm9ybmlhCiAgKgpAQCAtNjQsNiArODYsNyBAQCBpbmRleF9iYXRjaHNjYW5f aW5pdChJbmRleFNjYW5EZXNjIHNjYW4pCiAKIAlzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvcy52 YWxpZCA9IGZhbHNlOwogCXNjYW4tPmJhdGNocmluZ2J1Zi5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisJc2Nhbi0+YmF0Y2hyaW5nYnVmLnByZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAlzY2Fu LT5iYXRjaHJpbmdidWYubWFya0JhdGNoID0gTlVMTDsKIAlzY2FuLT5iYXRjaHJpbmdidWYuaGVh ZEJhdGNoID0gMDsKQEAgLTg0LDYgKzEwNyw3IEBAIGluZGV4X2JhdGNoc2Nhbl9yZXNldChJbmRl eFNjYW5EZXNjIHNjYW4pCiAKIAliYXRjaHJpbmdidWYtPnNjYW5Qb3MudmFsaWQgPSBmYWxzZTsK IAliYXRjaHJpbmdidWYtPm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKwliYXRjaHJpbmdidWYtPnBy ZWZldGNoUG9zLnZhbGlkID0gZmFsc2U7CiAKIAkvKgogCSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxf ZnJlZV9iYXRjaCB3b24ndCBza2lwIHRoZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wCkBAIC0y MDAsNyArMjI0LDEzIEBAIGluZGV4X2JhdGNoc2Nhbl9tYXJrX3BvcyhJbmRleFNjYW5EZXNjIHNj YW4pCiAgKiB0aGUgY3VycmVudCBzY2FuQmF0Y2ggd2hlbiBuZWVkZWQuCiAgKgogICogV2UganVz dCBkaXNjYXJkIGFsbCBiYXRjaGVzIChvdGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2Fu QmF0Y2gpLAotICogZXhjZXB0IHdoZW4gbWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBj dXJyZW50IHNjYW5CYXRjaC4KKyAqIGV4Y2VwdCB3aGVuIG1hcmtCYXRjaCBpcyBhbHJlYWR5IHRo ZSBzY2FuJ3MgY3VycmVudCBzY2FuQmF0Y2guICBXZSBhbHdheXMKKyAqIGludmFsaWRhdGUgcHJl ZmV0Y2hQb3MuICBUaGUgcmVhZCBzdHJlYW0gYW5kIHJlbGF0ZWQgcHJlZmV0Y2hpbmcgc3RhdGUg YXJlCisgKiByZXNldCBieSB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCgpLCBjYWxsZWQgYmVmb3Jl IHRoaXMgZnVuY3Rpb24uICBUaGlzCisgKiBhcHByb2FjaCBrZWVwcyB0aGluZ3Mgc2ltcGxlIGZv ciB0YWJsZSBBTXM6IG1vc3QgY29kZSB0aGF0IGRlYWxzIHdpdGgKKyAqIGJhdGNoZXMgaXMgdGhl cmVieSBhYmxlIHRvIGFzc3VtZSB0aGF0IHRoZSBjb21tb24gY2FzZSB3aGVyZSBzY2FuIGRpcmVj dGlvbgorICogbmV2ZXIgY2hhbmdlcyBpcyB0aGUgb25seSBjYXNlICh0YWJsZWFtX3V0aWxfYmF0 Y2hfZGlyY2hhbmdlIHRha2VzIGEKKyAqIHNpbWlsYXIgYXBwcm9hY2ggdG8gaGFuZGxpbmcgYSBj cm9zcy1iYXRjaCBjaGFuZ2UgaW4gc2NhbiBkaXJlY3Rpb24pLgogICovCiB2b2lkCiBpbmRleF9i YXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQpAQCAtMjE1LDYgKzI0NSwx NCBAQCBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUFz c2VydChzY2FuLT54c19oZWFwZmV0Y2gpOwogCUFzc2VydChtYXJrUG9zLT52YWxpZCk7CiAKKwkv KgorCSAqIFJlc3RvcmluZyBhIG1hcmsgYWx3YXlzIHJlcXVpcmVzIHN0b3BwaW5nIHByZWZldGNo aW5nLiAgVGhpcyBpcyBzaW1pbGFyCisJICogdG8gdGhlIGhhbmRsaW5nIHRhYmxlIEFNcyBpbXBs ZW1lbnQgdG8gZGVhbCB3aXRoIGEgdHVwbGUtbGV2ZWwgY2hhbmdlCisJICogaW4gdGhlIHNjYW4n cyBkaXJlY3Rpb24uICBUaGUgcmVhZCBzdHJlYW0gbXVzdCBoYXZlIGFscmVhZHkgYmVlbiByZXNl dAorCSAqIGJ5IHRoZSBjYWxsZXIgKHZpYSB0YWJsZV9pbmRleF9mZXRjaF9yZXNldCkuCisJICov CisJYmF0Y2hyaW5nYnVmLT5wcmVmZXRjaFBvcy52YWxpZCA9IGZhbHNlOworCiAJaWYgKHNjYW5C YXRjaCA9PSBtYXJrQmF0Y2gpCiAJewogCQkvKiBtYXJrQmF0Y2ggaXMgYWxyZWFkeSBzY2FuQmF0 Y2g7IG5lZWRuJ3QgY2hhbmdlIGJhdGNocmluZ2J1ZiAqLwpAQCAtMjg0LDYgKzMyMiwxMyBAQCBp bmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogICogdG8gZGV0 ZXJtaW5lIHdoaWNoIGJhdGNoIGNvbWVzIG5leHQgaW4gdGhlIG5ldyBzY2FuIGRpcmVjdGlvbi4g IFRoaXMKICAqIGFwcHJvYWNoIGlzbid0IHBhcnRpY3VsYXJseSBlZmZpY2llbnQsIGJ1dCBpdCB3 b3JrcyB3ZWxsIGVub3VnaCBmb3Igd2hhdAogICogb3VnaHQgdG8gYmUgYSByZWxhdGl2ZWx5IHJh cmUgb2NjdXJyZW5jZS4KKyAqCisgKiBDYWxsZXIgbXVzdCBoYXZlIHJlc2V0IHRoZSBzY2FuJ3Mg cmVhZCBzdHJlYW0gYmVmb3JlIGNhbGxpbmcgaGVyZS4gIFRoYXQKKyAqIG5lZWRzIHRvIGhhcHBl biBhcyBzb29uIGFzIHRoZSBzY2FuIHJlcXVlc3RzIGEgdHVwbGUgaW4gd2hhdGV2ZXIgc2Nhbgor ICogZGlyZWN0aW9uIGlzIG9wcG9zaXRlLXRvLWN1cnJlbnQuICBXZSBvbmx5IGRlYWwgd2l0aCB0 aGUgY2FzZSB3aGVyZSB0aGUKKyAqIHNjYW4gYmFja3MgdXAgYnkgZW5vdWdoIGl0ZW1zIHRvIGNy b3NzIGEgYmF0Y2ggYm91bmRhcnkgKHdoZW4gdGhlIHNjYW4KKyAqIHJlc3VtZXMgc2Nhbm5pbmcg aW4gaXRzIG9yaWdpbmFsIGRpcmVjdGlvbi9lbmRzIGJlZm9yZSBjcm9zc2luZyBhIGJvdW5kYXJ5 LAorICogdGhlcmUgaXNuJ3QgYW55IG5lZWQgdG8gY2FsbCBoZXJlKS4KICAqLwogdm9pZAogdGFi bGVhbV91dGlsX2JhdGNoX2RpcmNoYW5nZShJbmRleFNjYW5EZXNjIHNjYW4pCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvY29zdHNpemUuYwppbmRleCAxYzU3NWU1NmYuLjZmY2I4MTVmNyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvY29zdHNpemUuYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGF0aC9jb3N0c2l6ZS5jCkBAIC0xNDYsNiArMTQ2LDcgQEAgaW50CQkJ bWF4X3BhcmFsbGVsX3dvcmtlcnNfcGVyX2dhdGhlciA9IDI7CiBib29sCQllbmFibGVfc2Vxc2Nh biA9IHRydWU7CiBib29sCQllbmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKIGJvb2wJCWVuYWJsZV9p bmRleG9ubHlzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggPSB0 cnVlOwogYm9vbAkJZW5hYmxlX2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNj YW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3NvcnQgPSB0cnVlOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQgYi9zcmMvYmFja2VuZC91dGlscy9t aXNjL2d1Y19wYXJhbWV0ZXJzLmRhdAppbmRleCAwYTg2MjY5M2YuLjJiNTYyMGY5YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKKysrIGIvc3Jj L2JhY2tlbmQvdXRpbHMvbWlzYy9ndWNfcGFyYW1ldGVycy5kYXQKQEAgLTkzMSw2ICs5MzEsMTMg QEAKICAgYm9vdF92YWwgPT4gJ3RydWUnLAogfSwKIAoreyBuYW1lID0+ICdlbmFibGVfaW5kZXhz Y2FuX3ByZWZldGNoJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywg Z3JvdXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAorICBzaG9ydF9kZXNjID0+ICdFbmFibGVz IHByZWZldGNoaW5nIGZvciBpbmRleCBzY2FucyBhbmQgaW5kZXgtb25seSBzY2Fucy4nLAorICBm bGFncyA9PiAnR1VDX0VYUExBSU4nLAorICB2YXJpYWJsZSA9PiAnZW5hYmxlX2luZGV4c2Nhbl9w cmVmZXRjaCcsCisgIGJvb3RfdmFsID0+ICd0cnVlJywKK30sCisKIHsgbmFtZSA9PiAnZW5hYmxl X21hdGVyaWFsJywgdHlwZSA9PiAnYm9vbCcsIGNvbnRleHQgPT4gJ1BHQ19VU0VSU0VUJywgZ3Jv dXAgPT4gJ1FVRVJZX1RVTklOR19NRVRIT0QnLAogICBzaG9ydF9kZXNjID0+ICdFbmFibGVzIHRo ZSBwbGFubmVyXCdzIHVzZSBvZiBtYXRlcmlhbGl6YXRpb24uJywKICAgZmxhZ3MgPT4gJ0dVQ19F WFBMQUlOJywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5j b25mLnNhbXBsZSBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvcG9zdGdyZXNxbC5jb25mLnNhbXBs ZQppbmRleCBjZjE1NTk3MzguLjIxMzVlYTUyNCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL21p c2MvcG9zdGdyZXNxbC5jb25mLnNhbXBsZQpAQCAtNDIwLDYgKzQyMCw3IEBACiAjZW5hYmxlX2lu Y3JlbWVudGFsX3NvcnQgPSBvbgogI2VuYWJsZV9pbmRleHNjYW4gPSBvbgogI2VuYWJsZV9pbmRl eG9ubHlzY2FuID0gb24KKyNlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoID0gb24KICNlbmFibGVf bWF0ZXJpYWwgPSBvbgogI2VuYWJsZV9tZW1vaXplID0gb24KICNlbmFibGVfbWVyZ2Vqb2luID0g b24KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbCBiL2RvYy9zcmMvc2dtbC9j b25maWcuc2dtbAppbmRleCAyMjlmNDEzNTMuLjMzNmM2MjFkNSAxMDA2NDQKLS0tIGEvZG9jL3Ny Yy9zZ21sL2NvbmZpZy5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9jb25maWcuc2dtbApAQCAtNTcx Miw2ICs1NzEyLDIyIEBAIEFOWSA8cmVwbGFjZWFibGUgY2xhc3M9InBhcmFtZXRlciI+bnVtX3N5 bmM8L3JlcGxhY2VhYmxlPiAoIDxyZXBsYWNlYWJsZSBjbGFzcz0iCiAgICAgICA8L2xpc3RpdGVt PgogICAgICA8L3Zhcmxpc3RlbnRyeT4KIAorICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5h YmxlLWluZGV4c2Nhbi1wcmVmZXRjaCIgeHJlZmxhYmVsPSJlbmFibGVfaW5kZXhzY2FuX3ByZWZl dGNoIj4KKyAgICAgIDx0ZXJtPjx2YXJuYW1lPmVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2g8L3Zh cm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikKKyAgICAgIDxpbmRleHRlcm0+CisgICAgICAg PHByaW1hcnk+PHZhcm5hbWU+ZW5hYmxlX2luZGV4c2Nhbl9wcmVmZXRjaDwvdmFybmFtZT4gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXI8L3ByaW1hcnk+CisgICAgICA8L2luZGV4dGVybT4KKyAgICAg IDwvdGVybT4KKyAgICAgIDxsaXN0aXRlbT4KKyAgICAgICA8cGFyYT4KKyAgICAgICAgRW5hYmxl cyBvciBkaXNhYmxlcyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbiBhbmQgaW5kZXgtb25seSBz Y2FuCisgICAgICAgIHBsYW4gdHlwZXMuICBQcmVmZXRjaGluZyBjYW4gaW1wcm92ZSBwZXJmb3Jt YW5jZSBieSByZWFkaW5nIHRhYmxlIEFNCisgICAgICAgIHBhZ2VzIGFoZWFkIG9mIHdoZW4gdGhl eSBhcmUgbmVlZGVkIGR1cmluZyBpbmRleCBzY2Fucy4gIFRoZSBkZWZhdWx0CisgICAgICAgIGlz IDxsaXRlcmFsPm9uPC9saXRlcmFsPi4KKyAgICAgICA8L3BhcmE+CisgICAgICA8L2xpc3RpdGVt PgorICAgICA8L3Zhcmxpc3RlbnRyeT4KKwogICAgICA8dmFybGlzdGVudHJ5IGlkPSJndWMtZW5h YmxlLW1hdGVyaWFsIiB4cmVmbGFiZWw9ImVuYWJsZV9tYXRlcmlhbCI+CiAgICAgICA8dGVybT48 dmFybmFtZT5lbmFibGVfbWF0ZXJpYWw8L3Zhcm5hbWU+ICg8dHlwZT5ib29sZWFuPC90eXBlPikK ICAgICAgIDxpbmRleHRlcm0+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s IGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCAwZjZjMzczYjEuLjI1YjUxNmJhNiAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sCkBAIC04MDcsOSArODA3LDEyIEBAIGFtZ2V0YmF0Y2ggKEluZGV4U2NhbkRl c2Mgc2NhbiwKICAgPHBhcmE+CiAgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9u PiBpbnRlcmZhY2UgaXMgYW4gYWx0ZXJuYXRpdmUgdG8KICAgIDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gdGhhdCByZXR1cm5zIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaW4gYmF0Y2hl cwotICAgcmF0aGVyIHRoYW4gb25lIGF0IGEgdGltZS4gIEJ5IHJldHVybmluZyBhbGwgbWF0Y2hp bmcgaW5kZXggZW50cmllcyBmcm9tIGEKLSAgIHNpbmdsZSBpbmRleCBwYWdlIHRvZ2V0aGVyLCB0 aGUgdGFibGUgQU0gZ2FpbnMgdmlzaWJpbGl0eSBpbnRvIHdoaWNoIHRhYmxlCi0gICBibG9ja3Mg d2lsbCBiZSBuZWVkZWQgaW4gdGhlIG5lYXIgZnV0dXJlLgorICAgcmF0aGVyIHRoYW4gb25lIGF0 IGEgdGltZS4gVGhpcyBlbmFibGVzIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIHRvCisgICBvcHRp bWl6ZSB0YWJsZSBibG9jayBhY2Nlc3MgcGF0dGVybnMgYW5kIHBlcmZvcm0gSS9PIHByZWZldGNo aW5nLgorICAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVzIGZyb20gYSBz aW5nbGUgaW5kZXggcGFnZSB0b2dldGhlciwKKyAgIHRoZSB0YWJsZSBBTSBjYW4gcmVhZGFoZWFk IHRocm91Z2ggdGhlIGluZGV4IGFuZCBpZGVudGlmeSB3aGljaCB0YWJsZQorICAgYmxvY2tzIHdp bGwgYmUgbmVlZGVkLCBhbGxvd2luZyBwcmVmZXRjaGluZyBvZiB0YWJsZSBBTSBwYWdlcyBkdXJp bmcKKyAgIG9yZGVyZWQgaW5kZXggc2NhbnMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KQEAgLTEw MDEsNyArMTAwNCw4IEBAIGFtdW5ndWFyZGJhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBm cmVlIHRoZSBwaW5zIGF0IGFuIG9wcG9ydHVuZSBwb2ludCAoZm9yIGV4YW1wbGUgd2hlbiA8ZnVu Y3Rpb24+YW1yZXNjYW48L2Z1bmN0aW9uPgogICAgYW5kL29yIDxmdW5jdGlvbj5hbWVuZHNjYW48 L2Z1bmN0aW9uPiBhcmUgY2FsbGVkKS4gIEl0IG11c3QgYWxzbyBrZWVwIHRoZQogICAgbnVtYmVy IG9mIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLCB0byBhdm9pZCBleGhhdXN0aW5nIHRo ZSBiYWNrZW5kJ3MKLSAgIGJ1ZmZlciBwaW4gbGltaXQuCisgICBidWZmZXIgcGluIGxpbWl0ICh3 aGljaCBpcyBzaGFyZWQgd2l0aCB0aGUgdGFibGUgQU0ncyByZWFkIHN0cmVhbQorICAgZm9yIGlu ZGV4IHNjYW4gcHJlZmV0Y2hpbmcpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC0xMzc2LDYg KzEzODAsNjAgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBlLCBPaWQg b3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgb3IgdmljZSB2ZXJzYSwgaWYgaXRzIGludGVy bmFsIGltcGxlbWVudGF0aW9uIGlzIHVuc3VpdGVkIHRvIG9uZSBBUEkgb3IgdGhlIG90aGVyLgog ICA8L3BhcmE+CiAKKyAgPHNlY3QyIGlkPSJpbmRleC1zY2FubmluZy1iYXRjaGVzIj4KKyAgIDx0 aXRsZT5UYWJsZSBBTSBDb25zaWRlcmF0aW9ucyBmb3IgQmF0Y2ggU2Nhbm5pbmc8L3RpdGxlPgor CisgICA8cGFyYT4KKyAgICBUaGlzIHNlY3Rpb24gaXMgcHJpbWFyaWx5IHJlbGV2YW50IHRvCisg ICAgPGxpbmsgbGlua2VuZD0idGFibGVhbSI+dGFibGUgYWNjZXNzIG1ldGhvZDwvbGluaz4gYXV0 aG9ycy4KKyAgICBXaGVuIGFuIGluZGV4IHNjYW4gdXNlcyB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UsCisgICAgdGhlIHRhYmxlIEFNIGlzIHJlc3BvbnNpYmxl IGZvciBtYW5hZ2luZyBwb3NpdGlvbiBzdGF0ZSB3aXRoaW4gdGhlCisgICAgPHN0cnVjdG5hbWU+ SW5kZXhTY2FuRGVzYzwvc3RydWN0bmFtZT4ncworICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdi dWY8L3N0cnVjdGZpZWxkPiBhbmQgZm9yIGNvbnRyb2xsaW5nIHdoZW4KKyAgICBidWZmZXIgcGlu cyBvbiBpbmRleCBwYWdlcyBhcmUgcmVsZWFzZWQuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgor ICAgIFRoZSA8c3RydWN0ZmllbGQ+c2NhblBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHdpdGhpbgor ICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaHJpbmdidWY8L3N0cnVjdGZpZWxkPiB0cmFja3Mgd2hpY2gg YmF0Y2ggYW5kIGl0ZW0gd2l0aGluCisgICAgdGhhdCBiYXRjaCB3aWxsIGJlIHJldHVybmVkIG5l eHQgdG8gdGhlIGV4ZWN1dG9yLiAgVGhlIHRhYmxlIEFNIG11c3QgYWR2YW5jZQorICAgIDxzdHJ1 Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYXMgdHVwbGVzIGFyZSByZXR1cm5lZCBieQor ICAgIDxmdW5jdGlvbj50YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Q8L2Z1bmN0aW9uPi4gIFRoZSBj b3JlIGNvZGUgbWF5IGFsc28KKyAgICBtb2RpZnkgdGhpcyBmaWVsZCBkdXJpbmcgb3BlcmF0aW9u cyBzdWNoIGFzIG1hcmsvcmVzdG9yZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgVGhl IDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIHRyYWNrcyB0aGUg cG9zaXRpb24gdXNlZAorICAgIGZvciBJL08gcHJlZmV0Y2hpbmcuICBJdCBpcyBnZW5lcmFsbHkg YWR2YW5jZWQgYnkgaW5pdGlhbGl6aW5nIGl0IGZyb20KKyAgICA8c3RydWN0ZmllbGQ+c2NhblBv czwvc3RydWN0ZmllbGQ+IHdpdGhpbiBhIHJlYWQgc3RyZWFtIGNhbGxiYWNrLCBhbGxvd2luZwor ICAgIHRoZSB0YWJsZSBBTSB0byBwcmVmZXRjaCB0YWJsZSBibG9ja3MgcG9pbnRlZCB0byBieSBp dGVtcyB0aGF0IGFyZSB3ZWxsCisgICAgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlv bi4gIEluaXRpYWxseQorICAgIDxzdHJ1Y3RmaWVsZD5wcmVmZXRjaFBvczwvc3RydWN0ZmllbGQ+ IHN0YXJ0cyBhdAorICAgIDxzdHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4sIGJ1dCBh cyB0aGUgcmVhZCBzdHJlYW0gcmFtcHMgdXAgaXQgY2FuCisgICAgZ2V0IGZhciBhaGVhZCAmbWRh c2g7IHNwYW5uaW5nIG11bHRpcGxlIGluZGV4IHBhZ2VzIGlmIG5lY2Vzc2FyeSB0bworICAgIG1h aW50YWluIGFuIG9wdGltYWwgSS9PIHByZWZldGNoIGRpc3RhbmNlIGZvciB0YWJsZSBibG9jayBy ZWFkcy4gIEEgbWFqb3IKKyAgICBnb2FsIG9mIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+IGludGVyZmFjZSBpcyB0byBhbGxvdyB0aGUKKyAgICB0YWJsZSBBTSB0byBwcmVmZXRj aCB3aXRob3V0IGJlaW5nIGxpbWl0ZWQgdG8gaXRlbXMgZnJvbSB0aGUgY3VycmVudAorICAgIDxz dHJ1Y3RmaWVsZD5zY2FuUG9zPC9zdHJ1Y3RmaWVsZD4gYmF0Y2gncyBpbmRleCBsZWFmIHBhZ2Uu CisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIEJvdGggPHN0cnVjdGZpZWxkPnNjYW5Qb3M8 L3N0cnVjdGZpZWxkPiBhbmQKKyAgICA8c3RydWN0ZmllbGQ+cHJlZmV0Y2hQb3M8L3N0cnVjdGZp ZWxkPiBhcmUgY29udHJvbGxlZCBieSB0aGUgdGFibGUgQU0gYW5kCisgICAgY29yZSBjb2RlOyBp bmRleCBhY2Nlc3MgbWV0aG9kcyBzaG91bGQgbm90IGFjY2VzcyBvciBtYW5pcHVsYXRlIHRoZXNl CisgICAgZmllbGRzLiAgU2VlIHRoZSA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv PC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBmb3IgYSByZWZlcmVuY2UgZXhhbXBsZS4K KyAgIDwvcGFyYT4KKworICAgPHBhcmE+CisgICAgRm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBt YW5hZ2VtZW50IGR1cmluZyBiYXRjaCBzY2FucywgaW5jbHVkaW5nIHRoZQorICAgIDxzdHJ1Y3Rm aWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ8L3N0cnVjdGZpZWxkPiBwb2xpY3kgYW5kIHRoZQor ICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVuY3Rpb24+IGNhbGxiYWNrLCBzZWUKKyAg ICA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgorICAgPC9wYXJhPgorCisgIDwvc2Vj dDI+CisKICA8L3NlY3QxPgogCiAgPHNlY3QxIGlkPSJpbmRleC1sb2NraW5nIj4KZGlmZiAtLWdp dCBhL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwgYi9kb2Mvc3JjL3NnbWwvdGFibGVhbS5zZ21s CmluZGV4IDljY2Y1YjczOS4uOGU3MGE2MTk2IDEwMDY0NAotLS0gYS9kb2Mvc3JjL3NnbWwvdGFi bGVhbS5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC90YWJsZWFtLnNnbWwKQEAgLTEyOSw2ICsxMjks MTQgQEAgbXlfdGFibGVhbV9oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAgIG9wdGlvbmFsKSwg dGhlIGJsb2NrIG51bWJlciBuZWVkcyB0byBwcm92aWRlIGxvY2FsaXR5LgogIDwvcGFyYT4KIAor IDxwYXJhPgorICBUYWJsZSBhY2Nlc3MgbWV0aG9kcyBjYW4gc3VwcG9ydCBvcmRlcmVkIGluZGV4 IHNjYW5zIHVzaW5nIHRoZQorICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVy ZmFjZS4gU2VlIGFsc28KKyAgPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmctYmF0Y2hlcyIv PiBmb3IgZGV0YWlscyBvbiBpbnRlcmZhY2luZyB3aXRoCisgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gaW5kZXggYWNjZXNzIG1ldGhvZHMsIGFuZCBtYW5hZ2luZyB0aGUKKyAgc2Nh bidzIHBvc2l0aW9uLgorIDwvcGFyYT4KKwogIDxwYXJhPgogICBGb3IgY3Jhc2ggc2FmZXR5LCBh biBBTSBjYW4gdXNlIHBvc3RncmVzJyA8bGluawogICBsaW5rZW5kPSJ3YWwiPjxhY3JvbnltPldB TDwvYWNyb255bT48L2xpbms+LCBvciBhIGN1c3RvbSBpbXBsZW1lbnRhdGlvbi4KZGlmZiAtLWdp dCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0IGIvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKaW5kZXggMTMyYjU2YTU4Li4zMmJjM2RkM2UgMTAw NjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CisrKyBiL3Ny Yy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvc3lzdmlld3Mub3V0CkBAIC0xNjYsNiArMTY2LDcgQEAg c2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1lIGxpa2UgJ2Vu YWJsZSUnOwogIGVuYWJsZV9pbmNyZW1lbnRhbF9zb3J0ICAgICAgICB8IG9uCiAgZW5hYmxlX2lu ZGV4b25seXNjYW4gICAgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhzY2FuICAgICAgICAgICAg ICAgfCBvbgorIGVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2ggICAgICB8IG9uCiAgZW5hYmxlX21h dGVyaWFsICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfbWVtb2l6ZSAgICAgICAgICAgICAg ICAgfCBvbgogIGVuYWJsZV9tZXJnZWpvaW4gICAgICAgICAgICAgICB8IG9uCkBAIC0xODAsNyAr MTgxLDcgQEAgc2VsZWN0IG5hbWUsIHNldHRpbmcgZnJvbSBwZ19zZXR0aW5ncyB3aGVyZSBuYW1l IGxpa2UgJ2VuYWJsZSUnOwogIGVuYWJsZV9zZXFzY2FuICAgICAgICAgICAgICAgICB8IG9uCiAg ZW5hYmxlX3NvcnQgICAgICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfdGlkc2NhbiAgICAg ICAgICAgICAgICAgfCBvbgotKDI1IHJvd3MpCisoMjYgcm93cykKIAogLS0gVGhlcmUgYXJlIGFs d2F5cyB3YWl0IGV2ZW50IGRlc2NyaXB0aW9ucyBmb3IgdmFyaW91cyB0eXBlcy4gIEluamVjdGlv blBvaW50CiAtLSBtYXkgYmUgcHJlc2VudCBvciBhYnNlbnQsIGRlcGVuZGluZyBvbiBoaXN0b3J5 IHNpbmNlIGxhc3QgcG9zdG1hc3RlciBzdGFydC4KLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v18-0009-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37f10 RnJvbSAzY2VjMTc3NTNjNTVhOTAyYjU5YjVkMDc3MDA2Njg5MzlmZTgzOGZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHYxOCAwOS8xOV0g TWFrZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFz aGdldHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0 aGUKbmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlIGFkZGVkIGJ5IGNvbW1pdCBGSVhNRS4gIFBsYWlu IGluZGV4IHNjYW5zIG9mCmhhc2ggaW5kZXhlcyBub3cgcmV0dXJuIG1hdGNoaW5nIGl0ZW1zIGlu IGJhdGNoZXMgY29uc2lzdGluZyBvZiBhbGwgb2YKdGhlIG1hdGNoZXMgZnJvbSBhIGdpdmVuIGJ1 Y2tldCBvciBvdmVyZmxvdyBwYWdlLiAgVGhpcyBnaXZlcyB0aGUgdGFibGUKQU0gdGhlIGFiaWxp dHkgdG8gcGVyZm9ybSBvcHRpbWl6YXRpb25zIGxpa2UgaW5kZXggcHJlZmV0Y2hpbmcgZHVyaW5n Cmhhc2ggaW5kZXggc2NhbnMuCgpiYXRjaEltbWVkaWF0ZVVuZ3VhcmQgaXMgYWx3YXlzIHRydWUg ZHVyaW5nIGhhc2ggaW5kZXggc2NhbnMgKHNpbmNlIGhhc2gKZG9lc24ndCBzdXBwb3J0IGluZGV4 LW9ubHkgc2NhbnMgYW5kIGFsd2F5cyB1c2VzIGFuIE1WQ0Mgc25hcHNob3QpLCBzbwp0aGUgYnVm ZmVyIHBpbiBpbnRlcmxvY2sgaGVsZCBvbiBlYWNoIGJhdGNoIGlzIGFsd2F5cyBkcm9wcGVkIGF0 IHVubG9jawp0aW1lIC0tIGJlZm9yZSB0aGUgYmF0Y2ggaXMgZXZlbiByZXR1cm5lZCB0byB0aGUg dGFibGUgQU0uICBUaGlzIGRpZmZlcnMKZnJvbSBoYXNoJ3MgcHJldmlvdXMgYXBwcm9hY2ggb2Yg aG9sZGluZyBvbiB0byBhIHBpbiBmb3IgYXQgbGVhc3QgYXMKbG9uZyBhcyB0aGUgc2NhbiB3YXMg c3RvcHBlZCBvbiB0aGUgcGlubmVkIGluZGV4IHBhZ2UuCgpHdWFyYW50ZWVpbmcgdGhhdCByZXR1 cm5lZCBiYXRjaGVzIGhvbGQgbm8gYnVmZmVyIHBpbnMgb24gaW5kZXggcGFnZXMKZ3JlYXRseSBz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLCB3 aGVyZQp0aGUgcmVhZCBzdHJlYW0gaXMgZXhwZWN0ZWQgdG8gaG9sZCBtYW55IHBpbnMgb24gaGVh cCBwYWdlcy4gIFRoZQphbWdldGJhdGNoIGludGVyZmFjZSByZXF1aXJlcyB0aGF0IGluZGV4IEFN cyB0YWtlIHRoZSBzYW1lIHN0YW5kYXJkaXplZAphcHByb2FjaCB0byBwaW4gbWFuYWdlbWVudCBm b3IgcGlucyB0aGF0IGFyZSB1c2VkIHRvIHByZXZlbnQgdW5zYWZlCmNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0gKHRoYXQgd2F5IHByZWZldGNoaW5nIGNhbiBob2xkIG9wZW4KbXVs dGlwbGUgYmF0Y2hlcyB3aXRob3V0IGl0IGFmZmVjdGluZyB0aGUgcmVhZCBzdHJlYW0pLiAgTm90 ZSwgaG93ZXZlciwKdGhhdCBoYXNoIHN0aWxsIGhvbGRzIG9uIHRvIHBpbnMgbmVlZGVkIGZvciBp dHMgb3duIGludGVybmFsIHB1cnBvc2VzCihlLmcuLCBpdCdsbCBzdGlsbCBob2xkIG9udG8gYSBw aW4gZHVyaW5nIGEgYnVja2V0IHNwbGl0KS4KCmhhc2hraWxsaXRlbXNiYXRjaCAodGhlIGhhc2gg aW1wbGVtZW50YXRpb24gb2YgdGhlIG5ldyBhbWtpbGxpdGVtc2JhdGNoCmludGVyZmFjZSkgcGVy Zm9ybXMgTFBfREVBRCBtYXJraW5nIG9mIGRlYWQgaW5kZXggZW50cmllcywgd2hpbGUKZm9sbG93 aW5nIHNsaWdodGx5IGRpZmZlcmVudCBydWxlcyB0byB0aGUgb2xkIGFwcHJvYWNoLiAgSXQgcmVs aWVzIG9uCmNvbXBhcmluZyB0aGUgYmF0Y2gncyBzYXZlZCBMU04gYWdhaW5zdCB0aGUgY3VycmVu dCBwYWdlIExTTiB0byBkZXRlY3QKY29uY3VycmVudCBwYWdlIG1vZGlmaWNhdGlvbnMsIHdoaWNo IGluIHR1cm4gcmVxdWlyZXMgZmFrZSBMU04gc3VwcG9ydApmb3IgdW5sb2dnZWQgcmVsYXRpb25z LiAgUHJlcGFyYXRvcnkgY29tbWl0IGU1ODM2ZjdiIGFkZGVkIHRoYXQgc3VwcG9ydAp0byB0aGUg aGFzaCBpbmRleCBBTS4KCmhhc2h1bmd1YXJkYmF0Y2ggaXMgYWxzbyBwcm92aWRlZCwgZXZlbiB0 aG91Z2ggaXQgaXMgbm90IGN1cnJlbnRseQpleGVyY2lzZWQ6IGhhc2ggZG9lcyBub3Qgc3VwcG9y dCBpbmRleC1vbmx5IHNjYW5zIChhbmQgYWx3YXlzIHVzZXMgYW4KTVZDQyBzbmFwc2hvdCksIHNv IGJhdGNoSW1tZWRpYXRlVW5ndWFyZCBpcyBhbHdheXMgdHJ1ZSBmb3IgaGFzaCBpbmRleApzY2Fu cyB3aXRoIGhlYXBhbSAoYXMgbm90ZWQgYWxyZWFkeSwgaW4gcHJhY3RpY2UgZXZlcnkgYmF0Y2gn cyBsb2NrIGFuZApwaW4gYXJlIHJlbGVhc2VkIGF0IHVubG9jayB0aW1lIGR1cmluZyBoYXNoIHNj YW5zKS4gIFRoZSBjYWxsYmFjayBpcyBhCnJlcXVpcmVtZW50IGZvciBhbWdldGJhdGNoIGluZGV4 IEFNcy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTog VG9tYXMgVm9uZHJhIDx0b21hc0B2b25kcmEubWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5k IDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FI Mi1Xem1ZcWhhY0JIMTYxcGVBV2I1ZUY9SmE3Q0ZBUSswalNFTXE9cW5mTFZUT09nQG1haWwuZ21h aWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCAgICAgICAgICAgIHwgIDgxICsr LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURNRSAgICAgICB8ICAzMSArLS0KIHNy Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyAgICAgICB8IDIxMCArKysrKysrKysrLS0tLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYyAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMgICB8ICAyMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2hhc2gvaGFzaHNlYXJjaC5jIHwgMzQ1ICsrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYyAgIHwgMTI5ICstLS0tLS0tLS0KIGRvYy9z cmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAgICAgICB8ICAyMSArLQogc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QgICAgIHwgICAzICstCiA5IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNl cnRpb25zKCspLCA1MDYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li43 M2RkOGNhYmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hhc2guaApAQCAtMTgsNiArMTgsNyBAQAogI2RlZmluZSBIQVNIX0gK IAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mvc2Rpci5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtMTAwLDU3ICsxMDEsMTggQEAgdHlwZWRl ZiBIYXNoUGFnZU9wYXF1ZURhdGEgKkhhc2hQYWdlT3BhcXVlOwogICovCiAjZGVmaW5lIEhBU0hP X1BBR0VfSUQJCTB4RkY4MAogCi10eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0l0ZW0JLyogd2hh dCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0Y2ggZGF0YSBwcml2 YXRlIHRvIHRoZSBoYXNoIGluZGV4IEFNICovCit0eXBlZGVmIHN0cnVjdCBIYXNoQmF0Y2hEYXRh CiB7Ci0JSXRlbVBvaW50ZXJEYXRhIGhlYXBUaWQ7CS8qIFRJRCBvZiByZWZlcmVuY2VkIGhlYXAg aXRlbSAqLwotCU9mZnNldE51bWJlciBpbmRleE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0 aW9uIHdpdGhpbiBwYWdlICovCi19IEhhc2hTY2FuUG9zSXRlbTsKKwlCdWZmZXIJCWJ1ZjsJCQkv KiBpbmRleCBwYWdlIGJ1ZmZlciBwaW4gKFRJRCByZXVzZSBpbnRlcmxvY2spICovCisJQmxvY2tO dW1iZXIgY3VyclBhZ2U7CQkvKiBpbmRleCBwYWdlIHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlC bG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQYWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tO dW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdzIHJpZ2h0IGxpbmsgKi8KK30gSGFzaEJhdGNo RGF0YTsKIAotdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5Qb3NEYXRhCi17Ci0JQnVmZmVyCQlidWY7 CQkJLyogaWYgdmFsaWQsIHRoZSBidWZmZXIgaXMgcGlubmVkICovCi0JQmxvY2tOdW1iZXIgY3Vy clBhZ2U7CQkvKiBjdXJyZW50IGhhc2ggaW5kZXggcGFnZSAqLwotCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogbmV4dCBvdmVyZmxvdyBwYWdlICovCi0JQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkv KiBwcmV2IG92ZXJmbG93IG9yIGJ1Y2tldCBwYWdlICovCi0KLQkvKgotCSAqIFRoZSBpdGVtcyBh cnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkg KiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50 IHRvIGZpbGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhl IGxhc3Qgc2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEg Zmlyc3QtdmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0 ZW1JbmRleCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVk IHRvIGNhbGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRl eCBpbiBpdGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGlu IGl0ZW1zW10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1z W10gKi8KLQotCUhhc2hTY2FuUG9zSXRlbSBpdGVtc1tNYXhJbmRleFR1cGxlc1BlclBhZ2VdOwkv KiBNVVNUIEJFIExBU1QgKi8KLX0gSGFzaFNjYW5Qb3NEYXRhOwotCi0jZGVmaW5lIEhhc2hTY2Fu UG9zSXNQaW5uZWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0TWFjcm8oQmxvY2tOdW1iZXJJc1Zh bGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFCdWZmZXJJc1ZhbGlkKChzY2FucG9z KS5idWYpKSwgXAotCUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikgXAotKQotCi0jZGVmaW5l IEhhc2hTY2FuUG9zSXNWYWxpZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051 bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQo KHNjYW5wb3MpLmJ1ZikpLCBcCi0JQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFn ZSkgXAotKQotCi0jZGVmaW5lIEhhc2hTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9zKSBcCi0JZG8g eyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2FucG9zKS5jdXJy UGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCQkoc2NhbnBvcykubmV4dFBhZ2UgPSBJbnZh bGlkQmxvY2tOdW1iZXI7IFwKLQkJKHNjYW5wb3MpLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVt YmVyOyBcCi0JCShzY2FucG9zKS5maXJzdEl0ZW0gPSAwOyBcCi0JCShzY2FucG9zKS5sYXN0SXRl bSA9IDA7IFwKLQkJKHNjYW5wb3MpLml0ZW1JbmRleCA9IDA7IFwKLQl9IHdoaWxlICgwKQorLyog QWNjZXNzIHRoZSBoYXNoLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5C YXRjaCBwb2ludGVyICovCisjZGVmaW5lIEhhc2hCYXRjaEdldERhdGEoc2NhbiwgYmF0Y2gpIFwK KwlpbmRleGFtX3V0aWxfYmF0Y2hfZ2V0X2FtZGF0YShzY2FuLCBiYXRjaCwgSGFzaEJhdGNoRGF0 YSkKIAogLyoKICAqCUhhc2hTY2FuT3BhcXVlRGF0YSBpcyBwcml2YXRlIHN0YXRlIGZvciBhIGhh c2ggaW5kZXggc2Nhbi4KQEAgLTE3OCwxNSArMTQwLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNj YW5PcGFxdWVEYXRhCiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVk IGlzIHRydWUuCiAJICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0 IGtpbGxlZCBpdGVtcyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkg Ki8KLQlpbnQJCSAgICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtp bGxlZCBpdGVtcyAqLwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkg c3RvcmVkIGl0ZW1zICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRl bXMgb24gYSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8K LQlIYXNoU2NhblBvc0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9 IEhhc2hTY2FuT3BhcXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hT Y2FuT3BhcXVlOwpAQCAtMzY4LDExICszMjEsMTUgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChS ZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhV bmlxdWVDaGVjayBjaGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJ CQkJICAgc3RydWN0IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRl eFNjYW5CYXRjaCBoYXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBJ bmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7 CiBleHRlcm4gaW50NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1h cCAqdGJtKTsKIGV4dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVs LCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAg U2NhbktleSBvcmRlcmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoa2lsbGl0 ZW1zYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitleHRl cm4gdm9pZCBoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsK IGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhhc2hidWxrZGVsZXRlKEluZGV4VmFjdXVt SW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBA IC00NDUsOCArNDAyLDkgQEAgZXh0ZXJuIHZvaWQgX2hhc2hfZmluaXNoX3NwbGl0KFJlbGF0aW9u IHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVmLAogCQkJCQkJCSAgIHVpbnQzMiBsb3dt YXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRlcm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwotZXh0ZXJuIGJvb2wgX2hhc2hfZmly c3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRlcm4gSW5kZXhT Y2FuQmF0Y2ggX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LAorCQkJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCk7CitleHRlcm4gSW5kZXhTY2Fu QmF0Y2ggX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3RydWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9w YXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAtNDc2LDcgKzQzNCw2IEBAIGV4dGVybiBC bG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJvbV9uZXdidWNrZXQoUmVsYXRpb24gcmVs LCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1iZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zy b21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1 Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVj a2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWludDMyIGxvd21hc2ssIHVpbnQzMiBtYXhi dWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p OwogCiAvKiBoYXNoLmMgKi8KIGV4dGVybiB2b2lkIGhhc2hidWNrZXRjbGVhbnVwKFJlbGF0aW9u IHJlbCwgQnVja2V0IGN1cl9idWNrZXQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mv aGFzaC9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKaW5kZXggZmM5MDMx MTE3Li45NzJiYjY2NmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL1JFQURN RQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9SRUFETUUKQEAgLTI1NSwyOCArMjU1LDI5 IEBAIFRoZSByZWFkZXIgYWxnb3JpdGhtIGlzOgogCQlyZXRha2UgdGhlIGJ1ZmZlciBjb250ZW50 IGxvY2sgb24gbmV3IGJ1Y2tldAogCQlhcnJhbmdlIHRvIHNjYW4gdGhlIG9sZCBidWNrZXQgbm9y bWFsbHkgYW5kIHRoZSBuZXcgYnVja2V0IGZvcgogICAgICAgICAgdHVwbGVzIHdoaWNoIGFyZSBu b3QgbW92ZWQtYnktc3BsaXQKLS0tIHRoZW4sIHBlciByZWFkIHJlcXVlc3Q6CistLSB0aGVuLCBw ZXIgYmF0Y2ggKHBhZ2UpIHJlcXVlc3Q6CiAJcmVhY3F1aXJlIGNvbnRlbnQgbG9jayBvbiBjdXJy ZW50IHBhZ2UKIAlzdGVwIHRvIG5leHQgcGFnZSBpZiBuZWNlc3NhcnkgKG5vIGNoYWluaW5nIG9m IGNvbnRlbnQgbG9ja3MsIGJ1dCBrZWVwCiAJdGhlIHBpbiBvbiB0aGUgcHJpbWFyeSBidWNrZXQg dGhyb3VnaG91dCB0aGUgc2NhbikKLQlzYXZlIGFsbCB0aGUgbWF0Y2hpbmcgdHVwbGVzIGZyb20g Y3VycmVudCBpbmRleCBwYWdlIGludG8gYW4gaXRlbXMgYXJyYXkKLQlyZWxlYXNlIHBpbiBhbmQg Y29udGVudCBsb2NrIChidXQgaWYgaXQgaXMgcHJpbWFyeSBidWNrZXQgcGFnZSByZXRhaW4KLQlp dHMgcGluIHRpbGwgdGhlIGVuZCBvZiB0aGUgc2NhbikKLQlnZXQgdHVwbGUgZnJvbSBhbiBpdGVt IGFycmF5CisJc2F2ZSBhbGwgdGhlIG1hdGNoaW5nIHR1cGxlcyBmcm9tIGN1cnJlbnQgaW5kZXgg cGFnZSBpbnRvIGEgYmF0Y2gKKwlyZWxlYXNlIGNvbnRlbnQgbG9jayBvbiBjdXJyZW50IHBhZ2Ug cmV0dXJuIGJhdGNoIHRvIHRhYmxlIEFNICh0YWJsZSBBTQorCXdpbGwgZHJvcCBiYXRjaCdzIGJ1 ZmZlciBwaW4sIHRob3VnaCBwcmltYXJ5IGJ1Y2tldCBwYWdlIHBpbiBpcyBrZXB0CisJdW50aWwg dGhlIGVuZCBvZiB0aGUgc2NhbikKIC0tIGF0IHNjYW4gc2h1dGRvd246Ci0JcmVsZWFzZSBhbGwg cGlucyBzdGlsbCBoZWxkCisJcmVsZWFzZSBzY2FuLW93bmVkIHBpbnMgKGUuZy4sIHByaW1hcnkg YnVja2V0IHBhZ2UgcGluKSBhcyBuZWVkZWQKIAogSG9sZGluZyB0aGUgYnVmZmVyIHBpbiBvbiB0 aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBmb3IgdGhlIHdob2xlIHNjYW4gcHJldmVudHMKLXRoZSBy ZWFkZXIncyBjdXJyZW50LXR1cGxlIHBvaW50ZXIgZnJvbSBiZWluZyBpbnZhbGlkYXRlZCBieSBz cGxpdHMgb3IKLWNvbXBhY3Rpb25zLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3Rp bGwgYmUgc3BsaXQgb3IgY29tcGFjdGVkLikKK3RoZSBidWNrZXQgZnJvbSBiZWluZyByZW9yZ2Fu aXplZCBieSBzcGxpdHMgb3IgY29tcGFjdGlvbnMgd2hpbGUgdGhlIHNjYW4gaXMKK2luIHByb2dy ZXNzLiAgKE9mIGNvdXJzZSwgb3RoZXIgYnVja2V0cyBjYW4gc3RpbGwgYmUgc3BsaXQgb3IgY29t cGFjdGVkLikKIAotVG8gbWluaW1pemUgbG9jay91bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBz Y2FuIGFsd2F5cyBzZWFyY2hlcyB0aGUgZW50aXJlCi1oYXNoIHBhZ2UgdG8gaWRlbnRpZnkgYWxs IHRoZSBtYXRjaGluZyBpdGVtcyBhdCBvbmNlLCBjb3B5aW5nIHRoZWlyIGhlYXAgdHVwbGUKLUlE cyBpbnRvIGJhY2tlbmQtbG9jYWwgc3RvcmFnZS4gVGhlIGhlYXAgdHVwbGUgSURzIGFyZSB0aGVu IHByb2Nlc3NlZCB3aGlsZSBub3QKLWhvbGRpbmcgYW55IHBhZ2UgbG9jayB3aXRoaW4gdGhlIGlu ZGV4IHRoZXJlYnksIGFsbG93aW5nIGNvbmN1cnJlbnQgaW5zZXJ0aW9uCi10byBoYXBwZW4gb24g dGhlIHNhbWUgaW5kZXggcGFnZSB3aXRob3V0IGFueSByZXF1aXJlbWVudCBvZiByZS1maW5kaW5n IHRoZQotY3VycmVudCBzY2FuIHBvc2l0aW9uIGZvciB0aGUgcmVhZGVyLiBXZSBkbyBjb250aW51 ZSB0byBob2xkIGEgcGluIG9uIHRoZQotYnVja2V0IHBhZ2UsIHRvIHByb3RlY3QgYWdhaW5zdCBj b25jdXJyZW50IGRlbGV0aW9ucyBhbmQgYnVja2V0IHNwbGl0LgorVG8gbWluaW1pemUgbG9jay91 bmxvY2sgdHJhZmZpYywgaGFzaCBpbmRleCBzY2FucyBhbHdheXMgc2VhcmNoIHRoZSBlbnRpcmUK K2hhc2ggcGFnZSB0byBpZGVudGlmeSBhbGwgdGhlIG1hdGNoaW5nIGl0ZW1zIGF0IG9uY2UsIHJl dHVybmluZyB0aGVtIGluCitiYXRjaGVzIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBw cm9jZXNzZXMgYmF0Y2hlcyB3aGlsZSBubyBwYWdlIGxvY2sKK2lzIGhlbGQgd2l0aGluIHRoZSBp bmRleCwgYWxsb3dpbmcgY29uY3VycmVudCBpbnNlcnRpb24gdG8gaGFwcGVuIG9uIHRoZQorc2Ft ZSBpbmRleCBwYWdlIHdpdGhvdXQgYW55IHJlcXVpcmVtZW50IG9mIHJlLWZpbmRpbmcgdGhlIGN1 cnJlbnQgc2NhbgorcG9zaXRpb24gZm9yIHRoZSByZWFkZXIuICBUaGUgdGFibGUgQU0gY29udHJv bHMgd2hlbiBiYXRjaCBidWZmZXIgcGlucyBhcmUKK2Ryb3BwZWQuICBXZSBkbyBjb250aW51ZSB0 byBob2xkIGEgcGluIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCB0bworcHJvdGVjdCBhZ2Fp bnN0IGNvbmN1cnJlbnQgYnVja2V0IHNwbGl0cy4KIAogVG8gYWxsb3cgZm9yIHNjYW5zIGR1cmlu ZyBhIGJ1Y2tldCBzcGxpdCwgaWYgYXQgdGhlIHN0YXJ0IG9mIHRoZSBzY2FuLCB0aGUKIGJ1Y2tl dCBpcyBtYXJrZWQgYXMgYnVja2V0LWJlaW5nLXBvcHVsYXRlZCwgaXQgc2NhbiBhbGwgdGhlIHR1 cGxlcyBpbiB0aGF0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKaW5kZXggMmUzMmJlMjMzLi42NWYzOGM5 M2UgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYworKysgYi9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKQEAgLTExMywxMCArMTEzLDEwIEBAIGhhc2hoYW5k bGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBoYXNoYWRqdXN0bWVt YmVycywKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gaGFz aHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCi0JCS5hbWdldGJhdGNoID0g TlVMTCwKLQkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAotCQkuYW11bmd1YXJkYmF0Y2ggPSBO VUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gaGFzaGdldGJhdGNo LAorCQkuYW1raWxsaXRlbXNiYXRjaCA9IGhhc2hraWxsaXRlbXNiYXRjaCwKKwkJLmFtdW5ndWFy ZGJhdGNoID0gaGFzaHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gaGFzaGdldGJpdG1h cCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAogCQkuYW1wb3NyZXNldCA9IE5VTEwsCkBA IC0yOTksNTMgKzI5OSwyOCBAQCBoYXNoaW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVl cywgYm9vbCAqaXNudWxsLAogCiAKIC8qCi0gKgloYXNoZ2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5l eHQgdHVwbGUgaW4gdGhlIHNjYW4uCisgKgloYXNoZ2V0YmF0Y2goKSAtLSBHZXQgdGhlIGZpcnN0 IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJvb2wKLWhhc2hnZXR0 dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorSW5kZXhTY2FuQmF0 Y2gKK2hhc2hnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIHByaW9y YmF0Y2gsIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJcmVzOwogCiAJLyogSGFzaCBpbmRleGVz IGFyZSBhbHdheXMgbG9zc3kgc2luY2Ugd2Ugc3RvcmUgb25seSB0aGUgaGFzaCBjb2RlICovCiAJ c2Nhbi0+eHNfcmVjaGVjayA9IHRydWU7CiAKLQkvKgotCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5p dGlhbGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluIHRoZQotCSAqIGFw cHJvcHJpYXRlIGRpcmVjdGlvbi4gIElmIHdlIGhhdmVuJ3QgZG9uZSBzbyB5ZXQsIHdlIGNhbGwg YSByb3V0aW5lIHRvCi0JICogZ2V0IHRoZSBmaXJzdCBpdGVtIGluIHRoZSBzY2FuLgotCSAqLwot CWlmICghSGFzaFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSkKLQkJcmVzID0gX2hhc2hfZmly c3Qoc2NhbiwgZGlyKTsKLQllbHNlCisJaWYgKHByaW9yYmF0Y2ggPT0gTlVMTCkKIAl7Ci0JCS8q Ci0JCSAqIENoZWNrIHRvIHNlZSBpZiB3ZSBzaG91bGQga2lsbCB0aGUgcHJldmlvdXNseS1mZXRj aGVkIHR1cGxlLgotCQkgKi8KLQkJaWYgKHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCXsKLQkJ CS8qCi0JCQkgKiBZZXMsIHNvIHJlbWVtYmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0 aCBhbGwgc3VjaCB0dXBsZXMKLQkJCSAqIGF0IG9uY2UgcmlnaHQgYWZ0ZXIgbGVhdmluZyB0aGUg aW5kZXggcGFnZSBvciBhdCBlbmQgb2Ygc2Nhbi4pCi0JCQkgKiBJbiBjYXNlIGlmIGNhbGxlciBy ZXZlcnNlcyB0aGUgaW5kZXhzY2FuIGRpcmVjdGlvbiBpdCBpcyBxdWl0ZQotCQkJICogcG9zc2li bGUgdGhhdCB0aGUgc2FtZSBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRpcGxlIHRpbWVzLgot CQkJICogQnV0LCB3ZSBkb24ndCBkZXRlY3QgdGhhdDsgaW5zdGVhZCwgd2UganVzdCBmb3JnZXQg YW55IGV4Y2VzcwotCQkJICogZW50cmllcy4KLQkJCSAqLwotCQkJaWYgKHNvLT5raWxsZWRJdGVt cyA9PSBOVUxMKQotCQkJCXNvLT5raWxsZWRJdGVtcyA9IHBhbGxvY19hcnJheShpbnQsIE1heElu ZGV4VHVwbGVzUGVyUGFnZSk7CisJCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247 CiAKLQkJCWlmIChzby0+bnVtS2lsbGVkIDwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQotCQkJCXNv LT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4Owot CQl9CisJCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JCS8qCi0JCSAqIE5vdyBjb250 aW51ZSB0aGUgc2Nhbi4KLQkJICovCi0JCXJlcyA9IF9oYXNoX25leHQoc2NhbiwgZGlyKTsKKwkJ LyogSW5pdGlhbGl6ZSB0aGUgc2NhbiwgYW5kIHJldHVybiBmaXJzdCBiYXRjaCBvZiBtYXRjaGlu ZyBpdGVtcyAqLworCQlyZXR1cm4gX2hhc2hfZmlyc3Qoc2NhbiwgZGlyKTsKIAl9CiAKLQlyZXR1 cm4gcmVzOworCS8qIFJldHVybiBiYXRjaCBwb3NpdGlvbmVkIGFmdGVyIGNhbGxlcidzIGJhdGNo IChpbiBkaXJlY3Rpb24gJ2RpcicpICovCisJcmV0dXJuIF9oYXNoX25leHQoc2NhbiwgZGlyLCBw cmlvcmJhdGNoKTsKIH0KIAogCkBAIC0zNTUsMjYgKzMzMCwyNiBAQCBoYXNoZ2V0dHVwbGUoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIGludDY0CiBoYXNoZ2V0Yml0bWFw KEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7Ci0JSGFzaFNjYW5PcGFxdWUg c28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29sCQlyZXM7CisJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2g7CiAJaW50NjQJCW50aWRzID0gMDsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1 cnJJdGVtOwogCi0JcmVzID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24p OworCWJhdGNoID0gX2hhc2hfZmlyc3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pOwogCi0J d2hpbGUgKHJlcykKKwl3aGlsZSAoYmF0Y2ggIT0gTlVMTCkKIAl7Ci0JCWN1cnJJdGVtID0gJnNv LT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07CisJCWZvciAoaW50IGl0ZW1J bmRleCA9IGJhdGNoLT5maXJzdEl0ZW07CisJCQkgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRl bTsKKwkJCSBpdGVtSW5kZXgrKykKKwkJeworCQkJdGJtX2FkZF90dXBsZXModGJtLCAmYmF0Y2gt Pml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQsIDEsIHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQog CiAJCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBfaGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUg ZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5ldmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVw bGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJlJ3MKLQkJICogbm90aGluZyB0byBkbyBoZXJl IGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhlIFRJREJpdG1hcC4KKwkJICogX2hhc2hfbmV4 dCByZWxlYXNlcyB0aGUgcHJpb3IgYmF0Y2ggZm9yIGJpdG1hcCBjYWxsZXJzIGJlZm9yZQorCQkg KiBhbGxvY2F0aW5nIHRoZSBuZXh0IG9uZSwgc28gb25seSBvbmUgYmF0Y2ggaXMgZXZlciB1c2Vk IGF0IGEgdGltZQogCQkgKi8KLQkJdGJtX2FkZF90dXBsZXModGJtLCAmKGN1cnJJdGVtLT5oZWFw VGlkKSwgMSwgdHJ1ZSk7Ci0JCW50aWRzKys7Ci0KLQkJcmVzID0gX2hhc2hfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbik7CisJCWJhdGNoID0gX2hhc2hfbmV4dChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgYmF0Y2gpOwogCX0KIAogCXJldHVybiBudGlkczsKQEAgLTM5NiwxNyAr MzcxLDE2IEBAIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMsIGludCBub3Jk ZXJieXMpCiAJc2NhbiA9IFJlbGF0aW9uR2V0SW5kZXhTY2FuKHJlbCwgbmtleXMsIG5vcmRlcmJ5 cyk7CiAKIAlzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgcGFsbG9jX29iamVjdChIYXNoU2Nhbk9wYXF1 ZURhdGEpOwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7CiAJc28tPmhhc2hz b19idWNrZXRfYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYgPSBJbnZhbGlkQnVmZmVyOwogCiAJc28tPmhhc2hzb19idWNfcG9wdWxhdGVkID0gZmFsc2U7 CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKIAotCXNvLT5raWxsZWRJdGVtcyA9IE5V TEw7Ci0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KIAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT5t YXhpdGVtc2JhdGNoID0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlOworCXNjYW4tPmJhdGNoX2luZGV4 X29wYXF1ZV9zaXplID0gTUFYQUxJR04oc2l6ZW9mKEhhc2hCYXRjaERhdGEpKTsKKwlzY2FuLT5i YXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKIAogCXJldHVybiBzY2FuOwogfQpAQCAtNDIxLDE4 ICszOTUsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbktleSBzY2Fua2V5 LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKIAotCWlm IChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZp bmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28t Pm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCX0KLQogCV9oYXNo X2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGludmFsaWQgKHRoaXMg d2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9zSW52YWxpZGF0ZShz by0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3IG9uZSBpcyBnaXZl biAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCW1lbWNweShz Y2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nhbktl eURhdGEpKTsKQEAgLTQ0MSw2ICs0MDUsMTExIEBAIGhhc2hyZXNjYW4oSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJc28tPmhhc2hzb19idWNfc3Bs aXQgPSBmYWxzZTsKIH0KIAorLyoKKyAqCWhhc2hraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVh ZCBpdGVtcycgaW5kZXggdHVwbGVzIExQX0RFQUQKKyAqLwordm9pZAoraGFzaGtpbGxpdGVtc2Jh dGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKKwlIYXNoQmF0Y2hEYXRhICpoYXNoYmF0Y2gg PSBIYXNoQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKKwlCdWZmZXIJCWJ1ZjsKKwlQYWdlCQlw YWdlOworCUhhc2hQYWdlT3BhcXVlIG9wYXF1ZTsKKwlPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CW1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKKwlYTG9nUmVjUHRyCWxh dGVzdGxzbjsKKworCUFzc2VydChiYXRjaC0+bnVtRGVhZCA+IDApOworCisJYnVmID0gX2hhc2hf Z2V0YnVmKHJlbCwgaGFzaGJhdGNoLT5jdXJyUGFnZSwgSEFTSF9SRUFELAorCQkJCQkgICBMSF9C VUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOworCisJbGF0ZXN0bHNuID0gQnVmZmVyR2V0 TFNOQXRvbWljKGJ1Zik7CisJQXNzZXJ0KGJhdGNoLT5sc24gPD0gbGF0ZXN0bHNuKTsKKwlpZiAo YmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCisJeworCQkvKiBNb2RpZmllZCwgZ2l2ZSB1cCBvbiBo aW50aW5nICovCisJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBh Z2UpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVy YXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1tdIGluIGluZGV4IHBhZ2Ugb3JkZXIgKi8KKwlm b3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1EZWFkOyBpKyspCisJeworCQlpbnQJCQlpdGVt SW5kZXggPSBiYXRjaC0+ZGVhZEl0ZW1zW2ldOworCQlCYXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0 ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CisKKwkJb2ZmbnVtID0gY3Vyckl0ZW0tPmlu ZGV4T2Zmc2V0OworCisJCUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgor CQkJICAgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRlbSk7CisKKwkJd2hpbGUgKG9mZm51bSA8 PSBtYXhvZmYpCisJCXsKKwkJCUl0ZW1JZAkJaWlkID0gUGFnZUdldEl0ZW1JZChwYWdlLCBvZmZu dW0pOworCQkJSW5kZXhUdXBsZQlpdHVwbGUgPSAoSW5kZXhUdXBsZSkgUGFnZUdldEl0ZW0ocGFn ZSwgaWlkKTsKKworCQkJaWYgKEl0ZW1Qb2ludGVyRXF1YWxzKCZpdHVwbGUtPnRfdGlkLCAmY3Vy ckl0ZW0tPnRhYmxlVGlkKSkKKwkJCXsKKwkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKKwkJCQl7 CisJCQkJCS8qCisJCQkJCSAqIFVzZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hl Y2sgaWYgd2UgY2FuCisJCQkJCSAqIHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcg YSBzaGFyZSBsb2NrLiBJZiB3ZQorCQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8g cG9pbnQgY29udGludWluZy4KKwkJCQkJICovCisJCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50 Qml0cyhidWYpKQorCQkJCQkJZ290byB1bmxvY2tfcGFnZTsKKwkJCQl9CisKKwkJCQkvKiBmb3Vu ZCB0aGUgaXRlbSAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRo aW5nID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8K KwkJCX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKwor CS8qCisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBh cyBkaXJ0eSBoaW50LiBXaGVuZXZlcgorCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2Ug YWxzbyBzZXQgdGhlIHBhZ2UncworCSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdo aWNoIGlzIGxpa2V3aXNlIGp1c3QgYSBoaW50LgorCSAqLworCWlmIChraWxsZWRzb21ldGhpbmcp CisJeworCQlvcGFxdWUtPmhhc2hvX2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7CisJ CUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQorCit1bmxvY2tf cGFnZToKKwlfaGFzaF9yZWxidWYocmVsLCBidWYpOworfQorCisvKgorICoJaGFzaHVuZ3VhcmRi YXRjaCgpIC0tIERyb3AgYmF0Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoYnVmZmVyIHBp bikKKyAqCisgKiBDYWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Ag dGhlIGJ1ZmZlciBwaW4gaGVsZCB0bworICogcHJldmVudCBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkgVkFDVVVNLgorICovCit2b2lkCitoYXNodW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNo ID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVk IGV4YWN0bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nh bi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisK KwlSZWxlYXNlQnVmZmVyKGhhc2hiYXRjaC0+YnVmKTsKK30KKwogLyoKICAqCWhhc2hlbmRzY2Fu KCkgLS0gY2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDUwLDE3ICs1MTksOCBAQCBoYXNoZW5k c2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9u OwogCi0JaWYgKEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JewotCQkvKiBCZWZv cmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0J CWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0JfQot CiAJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CiAKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9 IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJdGVtcyk7CiAJcGZyZWUoc28pOwogCXNjYW4tPm9w YXF1ZSA9IE5VTEw7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo X3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hfeGxvZy5jCmluZGV4IDIwNjA2 MjBjNy4uZTI2ZWU4YmI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo X3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoX3hsb2cuYwpAQCAtMTE0 MSwxNCArMTE0MSwxNCBAQCBoYXNoX21hc2soY2hhciAqcGFnZWRhdGEsIEJsb2NrTnVtYmVyIGJs a25vKQogCQkvKgogCQkgKiBJbiBoYXNoIGJ1Y2tldCBhbmQgb3ZlcmZsb3cgcGFnZXMsIGl0IGlz IHBvc3NpYmxlIHRvIG1vZGlmeSB0aGUKIAkJICogTFBfRkxBR1Mgd2l0aG91dCBlbWl0dGluZyBh bnkgV0FMIHJlY29yZC4gSGVuY2UsIG1hc2sgdGhlIGxpbmUKLQkJICogcG9pbnRlciBmbGFncy4g U2VlIGhhc2hnZXR0dXBsZSgpLCBfaGFzaF9raWxsX2l0ZW1zKCkgZm9yIGRldGFpbHMuCisJCSAq IHBvaW50ZXIgZmxhZ3MuIFNlZSBoYXNoa2lsbGl0ZW1zYmF0Y2goKSBmb3IgZGV0YWlscy4KIAkJ ICovCiAJCW1hc2tfbHBfZmxhZ3MocGFnZSk7CiAJfQogCiAJLyoKIAkgKiBJdCBpcyBwb3NzaWJs ZSB0aGF0IHRoZSBoaW50IGJpdCBMSF9QQUdFX0hBU19ERUFEX1RVUExFUyBtYXkgcmVtYWluCi0J ICogdW5sb2dnZWQuIFNvLCBtYXNrIGl0LiBTZWUgX2hhc2hfa2lsbF9pdGVtcygpIGZvciBkZXRh aWxzLgorCSAqIHVubG9nZ2VkLiBTbywgbWFzayBpdC4gU2VlIGhhc2hraWxsaXRlbXNiYXRjaCgp IGZvciBkZXRhaWxzLgogCSAqLwogCW9wYXF1ZS0+aGFzaG9fZmxhZyAmPSB+TEhfUEFHRV9IQVNf REVBRF9UVVBMRVM7CiB9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2UuYwppbmRleCA4MDk5YjBk MDIuLjExZTNkYjQ3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBh Z2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNocGFnZS5jCkBAIC0yODAsMzEg KzI4MCwyNCBAQCBfaGFzaF9kcm9wYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIH0KIAog LyoKLSAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIHVzZWQgaW4gc2Nh bi4KKyAqCV9oYXNoX2Ryb3BzY2FuYnVmKCkgLS0gcmVsZWFzZSBidWZmZXJzIG93bmVkIGJ5IHNj YW4uCiAgKgotICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyB1c2VkIGR1cmluZyBz Y2FuIG9uIHdoaWNoIHdlCi0gKiBob2xkIG5vIGxvY2suCisgKiBUaGlzIHJvdXRpbmUgdW5waW5z IHRoZSBidWZmZXJzIGZvciB0aGUgcHJpbWFyeSBidWNrZXQgcGFnZSBhbmQgZm9yIHRoZQorICog YnVja2V0IHBhZ2Ugb2YgYSBidWNrZXQgYmVpbmcgc3BsaXQgYXMgbmVlZGVkLgogICovCiB2b2lk CiBfaGFzaF9kcm9wc2NhbmJ1ZihSZWxhdGlvbiByZWwsIEhhc2hTY2FuT3BhcXVlIHNvKQogewot CS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNrZXQgcGFnZSAqLwotCWlmIChC dWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fYnVja2V0X2J1ZikgJiYKLQkJc28tPmhhc2hzb19idWNr ZXRfYnVmICE9IHNvLT5jdXJyUG9zLmJ1ZikKKwkvKiByZWxlYXNlIHBpbiBoZWxkIG9uIHByaW1h cnkgYnVja2V0IHBhZ2UgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tldF9i dWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhhc2hzb19idWNrZXRfYnVmKTsKIAlzby0+ aGFzaHNvX2J1Y2tldF9idWYgPSBJbnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBwaW4gd2Ug aG9sZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlICBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KLQlp ZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpICYmCi0JCXNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJLyogcmVsZWFzZSBw aW4gaGVsZCBvbiBwcmltYXJ5IGJ1Y2tldCBwYWdlIG9mIGJ1Y2tldCBiZWluZyBzcGxpdCAqLwor CWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikpCiAJCV9oYXNo X2Ryb3BidWYocmVsLCBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpOwogCXNvLT5oYXNoc29f c3BsaXRfYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAKLQkvKiByZWxlYXNlIGFueSBwaW4g d2Ugc3RpbGwgaG9sZCAqLwotCWlmIChCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCi0J CV9oYXNoX2Ryb3BidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLmJ1ZiA9 IEludmFsaWRCdWZmZXI7Ci0KIAkvKiByZXNldCBzcGxpdCBzY2FuICovCiAJc28tPmhhc2hzb19i dWNfcG9wdWxhdGVkID0gZmFsc2U7CiAJc28tPmhhc2hzb19idWNfc3BsaXQgPSBmYWxzZTsKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwppbmRleCA4OWQxYzViYzYuLmE2ODEyYzZhMiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHNlYXJjaC5jCisrKyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYwpAQCAtMjIsMTA1ICsyMiw5NCBAQAog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAK LXN0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpi dWZQLAotCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIpOworc3RhdGljIGJvb2wgX2hhc2hfcmVh ZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgYnVmLCBTY2FuRGlyZWN0aW9uIGRpciwK KwkJCQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIHN0YXRpYyBpbnQJX2hhc2hfbG9hZF9x dWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkJCQkg ICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgaW5saW5l IHZvaWQgX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCisJ CQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCQkJ CQkJCSAgIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfaGFzaF9z YXZlaXRlbShJbmRleFNjYW5CYXRjaCBiYXRjaCwgaW50IGl0ZW1JbmRleCwKIAkJCQkJCQkJICBP ZmZzZXROdW1iZXIgb2ZmbnVtLCBJbmRleFR1cGxlIGl0dXApOwogc3RhdGljIHZvaWQgX2hhc2hf cmVhZG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCdWZmZXIgKmJ1ZnAsCiAJCQkJCQkgICBQYWdl ICpwYWdlcCwgSGFzaFBhZ2VPcGFxdWUgKm9wYXF1ZXApOwogCiAvKgotICoJX2hhc2hfbmV4dCgp IC0tIEdldCB0aGUgbmV4dCBpdGVtIGluIGEgc2Nhbi4KKyAqCV9oYXNoX25leHQoKSAtLSBHZXQg dGhlIG5leHQgYmF0Y2ggb2YgaXRlbXMgaW4gYSBzY2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28t PmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50IHBhZ2UsIHdoaWNoIG1heQotICoJCWJlIHBp bm5lZCBidXQgbm90IGxvY2tlZCwgYW5kIHNvLT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVz Ci0gKgkJd2hpY2ggaXRlbSB3YXMgcHJldmlvdXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwg cHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSBiYXRjaCB3aXRoIGl0ZW1zCisg KgkJYWxyZWFkeSByZXR1cm5lZC4KICAqCi0gKgkJT24gc3VjY2Vzc2Z1bCBleGl0LCBzY2FuLT54 c19oZWFwdGlkIGlzIHNldCB0byB0aGUgVElEIG9mIHRoZSBuZXh0Ci0gKgkJaGVhcCB0dXBsZS4g IHNvLT5jdXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLgorICoJCU9uIHN1Y2Nlc3NmdWwgZXhp dCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcgaXRlbXMgZnJvbQorICoJCW5l eHQgcGFnZS4gIE90aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBh cmUgbm8KKyAqCQlmdXJ0aGVyIG1hdGNoZXMuICBObyBsb2NrcyBhcmUgZXZlciBoZWxkIHdoZW4g d2UgcmV0dXJuLgogICoKLSAqCQlPbiBmYWlsdXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2Ug cmV0dXJuIGZhbHNlIHdpdGggcGluCi0gKgkJaGVsZCBvbiBidWNrZXQgcGFnZSBidXQgbm8gcGlu cyBvciBsb2NrcyBoZWxkIG9uIG92ZXJmbG93Ci0gKgkJcGFnZS4KKyAqCQlSZXRhaW5zIHBpbnMg YWNjb3JkaW5nIHRvIHRoZSBzYW1lIHJ1bGVzIGFzIF9oYXNoX2ZpcnN0LgogICovCi1ib29sCi1f aGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRleFNj YW5CYXRjaAorX2hhc2hfbmV4dChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBJbmRleFNjYW5CYXRjaCBwcmlvcmJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmlu ZGV4UmVsYXRpb247CiAJSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKLQlIYXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtOworCUhhc2hCYXRjaERhdGEgKmhh c2hwcmlvcmJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBwcmlvcmJhdGNoKTsKIAlCbG9j a051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQlib29sCQllbmRfb2Zfc2NhbiA9IGZhbHNl OworCUluZGV4U2NhbkJhdGNoIGJhdGNoOwogCiAJLyoKLQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0 IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlmIGRvbmUsIHRyeSB0byByZWFkCi0JICog ZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBhZ2UgYmFzZWQgb24gdGhlIHNjYW4gZGly ZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZSBt YWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRoZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkg KiBUaGUgY29yZSBjb2RlIG11c3QgZGVhbCB3aXRoIGNyb3NzLWJhdGNoIHNjYW4gZGlyZWN0aW9u IGNoYW5nZXMgZm9yIHVzLgorCSAqIEEgYmF0Y2ggbWFuYWdlbWVudCByb3V0aW5lIHRoYXQgZmxp cHMgcHJpb3JiYXRjaCdzIHNjYW4gZGlyZWN0aW9uIGlzCisJICogdXNlZCBmb3IgdGhpcy4KKwkg Ki8KKwlBc3NlcnQocHJpb3JiYXRjaC0+ZGlyID09IGRpcik7CisKKwkvKgorCSAqIERldGVybWlu ZSB3aGljaCBwYWdlIHRvIHJlYWQgbmV4dCBiYXNlZCBvbiBzY2FuIGRpcmVjdGlvbiBhbmQgZGV0 YWlscworCSAqIHRha2VuIGZyb20gdGhlIHByaW9yIGJhdGNoCiAJICovCiAJaWYgKFNjYW5EaXJl Y3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+ IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0J CQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsKKwkJYmxrbm8gPSBoYXNocHJpb3JiYXRjaC0+bmV4 dFBhZ2U7CisJZWxzZQorCQlibGtubyA9IGhhc2hwcmlvcmJhdGNoLT5wcmV2UGFnZTsKIAotCQkJ Ymxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKLQkJCWlmIChCbG9ja051bWJlcklzVmFsaWQo Ymxrbm8pKQotCQkJewotCQkJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JF QUQsIExIX09WRVJGTE9XX1BBR0UpOwotCQkJCWlmICghX2hhc2hfcmVhZHBhZ2Uoc2NhbiwgJmJ1 ZiwgZGlyKSkKLQkJCQkJZW5kX29mX3NjYW4gPSB0cnVlOwotCQkJfQotCQkJZWxzZQotCQkJCWVu ZF9vZl9zY2FuID0gdHJ1ZTsKLQkJfQotCX0KKwkvKgorCSAqIEZvciBiaXRtYXAgc2NhbiBjYWxs ZXJzLCByZWxlYXNlIHRoZSBwcmlvciBiYXRjaCBub3cgc28gdGhhdCB0aGUKKwkgKiBhbGxvY2F0 aW9uIGJlbG93IGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5zIG5l dmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCisJICovCisJaWYg KCFzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4s IHByaW9yYmF0Y2gpOworCisJaWYgKCFCbG9ja051bWJlcklzVmFsaWQoYmxrbm8pKQorCQlyZXR1 cm4gTlVMTDsKKworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJYmF0Y2gg PSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1ZmZlciBm b3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCisJCWJ1 ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0Up OwogCWVsc2UKIAl7Ci0JCWlmICgtLXNvLT5jdXJyUG9zLml0ZW1JbmRleCA8IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSkKLQkJewotCQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tp bGxfaXRlbXMoc2Nhbik7CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JF QUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOwogCi0JCQli bGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChi bGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVB RCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKLQotCQkJ CS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9y IHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRpb24sIHNvIHJlbGVhc2luZyB0aGUgYWRkaXRpb25h bCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJCSAqIGhlcmUuCi0JCQkJICovCi0JCQkJaWYgKGJ1 ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQkJYnVmID09IHNvLT5oYXNoc29fc3Bs aXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0KLQkJCQlpZiAo IV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9zY2FuID0gdHJ1 ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCX0KKwkJLyoKKwkJ ICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0IHBhZ2UgZm9yIHdob2xlIHNj YW4gb3BlcmF0aW9uLAorCQkgKiBzbyByZWxlYXNpbmcgdGhlIGFkZGl0aW9uYWwgcGluIHdlIGhh dmUgYWNxdWlyZWQgaGVyZS4KKwkJICovCisJCWlmIChidWYgPT0gc28tPmhhc2hzb19idWNrZXRf YnVmIHx8CisJCQlidWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQorCQkJX2hhc2hf ZHJvcGJ1ZihyZWwsIGJ1Zik7CiAJfQogCi0JaWYgKGVuZF9vZl9zY2FuKQorCS8qIFJlYWQgdGhl IG5leHQgcGFnZSBhbmQgbG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICgh X2hhc2hfcmVhZHBhZ2Uoc2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKIAl7Ci0JCV9oYXNoX2Ryb3Bz Y2FuYnVmKHJlbCwgc28pOwotCQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwot CQlyZXR1cm4gZmFsc2U7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGJhdGNo KTsKKwkJcmV0dXJuIE5VTEw7CiAJfQogCi0JLyogT0ssIGl0ZW1JbmRleCBzYXlzIHdoYXQgdG8g cmV0dXJuICovCi0JY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRl bUluZGV4XTsKLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhlYXBUaWQ7Ci0KLQlyZXR1 cm4gdHJ1ZTsKKwkvKiBSZXR1cm4gdGhlIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hlZCBpdGVtcyBm cm9tIG5leHQgcGFnZSAqLworCXJldHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI3MCwyMiArMjU5 LDIwIEBAIF9oYXNoX3JlYWRwcmV2KEluZGV4U2NhbkRlc2Mgc2NhbiwKIH0KIAogLyoKLSAqCV9o YXNoX2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3QgaXRlbSBpbiBhIHNjYW4uCisgKglfaGFzaF9m aXJzdCgpIC0tIEZpbmQgdGhlIGZpcnN0IGJhdGNoIG9mIGl0ZW1zIGluIGEgc2Nhbi4KICAqCi0g KgkJV2UgZmluZCB0aGUgZmlyc3QgaXRlbSAob3IsIGlmIGJhY2t3YXJkIHNjYW4sIHRoZSBsYXN0 IGl0ZW0pIGluIHRoZQotICoJCWluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9u IGFzc29jaWF0ZWQgd2l0aCB0aGUgc2NhbgotICoJCWRlc2NyaXB0b3IuCisgKgkJV2UgZmluZCB0 aGUgZmlyc3QgYmF0Y2ggb2YgaXRlbXMgKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdAor ICoJCWJhdGNoKSBpbiB0aGUgaW5kZXggdGhhdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24g YXNzb2NpYXRlZCB3aXRoCisgKgkJdGhlIHNjYW4gZGVzY3JpcHRvci4KICAqCi0gKgkJT24gc3Vj Y2Vzc2Z1bCBleGl0LCBpZiB0aGUgcGFnZSBjb250YWluaW5nIGN1cnJlbnQgaW5kZXggdHVwbGUg aXMgYW4KLSAqCQlvdmVyZmxvdyBwYWdlLCBib3RoIHBpbiBhbmQgbG9jayBhcmUgcmVsZWFzZWQg d2hlcmVhcyBpZiBpdCBpcyBhIGJ1Y2tldAotICoJCXBhZ2UgdGhlbiBpdCBpcyBwaW5uZWQgYnV0 IG5vdCBsb2NrZWQgYW5kIGRhdGEgYWJvdXQgdGhlIG1hdGNoaW5nCi0gKgkJdHVwbGUocykgb24g dGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGludG8gc28tPmN1cnJQb3MsCi0gKgkJc2Nhbi0+eHNf aGVhcHRpZCBpcyBzZXQgdG8gdGhlIGhlYXAgVElEIG9mIHRoZSBjdXJyZW50IHR1cGxlLgorICoJ CU9uIHN1Y2Nlc3NmdWwgZXhpdCwgcmV0dXJucyBhIGJhdGNoIGNvbnRhaW5pbmcgbWF0Y2hpbmcg aXRlbXMuCisgKgkJT3RoZXJ3aXNlIHJldHVybnMgTlVMTCwgaW5kaWNhdGluZyB0aGF0IHRoZXJl IGFyZSBubyBmdXJ0aGVyIG1hdGNoZXMuCisgKgkJTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVu IHdlIHJldHVybi4KICAqCi0gKgkJT24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdl IHJldHVybiBmYWxzZSwgd2l0aCBwaW4gaGVsZCBvbgotICoJCWJ1Y2tldCBwYWdlIGJ1dCBubyBw aW5zIG9yIGxvY2tzIGhlbGQgb24gb3ZlcmZsb3cgcGFnZS4KKyAqCQlXZSBhbHdheXMgcmV0YWlu IG91ciBvd24gcGluIG9uIHRoZSBidWNrZXQgcGFnZS4gIFdoZW4gd2UgcmV0dXJuIGEKKyAqCQli YXRjaCB3aXRoIGEgYnVja2V0IHBhZ2UsIGl0IHdpbGwgcmV0YWluIGl0cyBvd24gcmVmZXJlbmNl IHBpbi4KICAqLwotYm9vbAorSW5kZXhTY2FuQmF0Y2gKIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsKQEAgLTI5Niw3ICsyODMsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJ SGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJSW5k ZXhTY2FuQmF0Y2ggYmF0Y2g7CiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwogCWlm IChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI2LDcgKzMxMyw3IEBAIF9oYXNoX2ZpcnN0KEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGluZGV4 LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFsc2U7 CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gga2V5 LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTksMTkxICs0 MDYsMTUyIEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJfQog Ci0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8KLQlB c3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9zLmJ1 ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRjaCA9 IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0aGUg dHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlpZiAo IV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBS ZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNoICov CisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsKKwl9 CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhzX2hl YXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNoX3Jl YWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0dXJu IHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7CiB9 CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQgaW5k ZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0 YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBhbGwg dGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRvCi0g Kglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5vIG1h dGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZpY2F0 aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50IHBh Z2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNrZXQg Y2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRydWUg aWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAqLwog c3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVyICpi dWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBJbmRleFNjYW5CYXRjaCBi YXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hTY2Fu T3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQlidWY7 CisJSGFzaEJhdGNoRGF0YSAqaGFzaGJhdGNoID0gSGFzaEJhdGNoR2V0RGF0YShzY2FuLCBiYXRj aCk7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVy IG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRleDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChC dWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VU X1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwog CW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0g YnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK KwloYXNoYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0 QmxvY2tOdW1iZXIoYnVmKTsKKwliYXRjaC0+ZGlyID0gZGlyOwogCiAJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCUJsb2NrTnVtYmVyIHByZXZfYmxrbm8gPSBJbnZhbGlk QmxvY2tOdW1iZXI7Ci0KIAkJZm9yICg7OykKIAkJewogCQkJLyogbmV3IHBhZ2UsIGxvY2F0ZSBz dGFydGluZyBwb3NpdGlvbiBieSBiaW5hcnkgc2VhcmNoICovCiAJCQlvZmZudW0gPSBfaGFzaF9i aW5zZWFyY2gocGFnZSwgc28tPmhhc2hzb19za19oYXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hh c2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRl bUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBk aXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAKIAkJCWlmIChpdGVtSW5kZXggIT0gMCkKIAkJ CQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBs ZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92ZSB0bwotCQkJICogdGhlIG5leHQgcGFnZS4gQmVm b3JlIGxlYXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueQotCQkJICoga2lsbGVk IGl0ZW1zLgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUg Y3VycmVudCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIG5leHQgcGFnZQogCQkJICov Ci0JCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuKTsK LQotCQkJLyoKLQkJCSAqIElmIHRoaXMgaXMgYSBwcmltYXJ5IGJ1Y2tldCBwYWdlLCBoYXNob19w cmV2Ymxrbm8gaXMgbm90IGEgcmVhbAotCQkJICogYmxvY2sgbnVtYmVyLgotCQkJICovCi0JCQlp ZiAoc28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJcHJldl9ibGtu byA9IEludmFsaWRCbG9ja051bWJlcjsKLQkJCWVsc2UKLQkJCQlwcmV2X2Jsa25vID0gb3BhcXVl LT5oYXNob19wcmV2Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRuZXh0KHNjYW4sICZidWYsICZwYWdl LCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCi0JCQl7Ci0JCQkJc28tPmN1 cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0Qmxv Y2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsKLQkJCQkvKgotCQkJCSAqIFJlbWVt YmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMgZm9yIHNjcm9sbGFibGUKLQkJCQkg KiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9uIGFuZCByZXR1cm4gZmFsc2UKLQkJ CQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGluZyB0dXBsZXMgd2VyZSBmb3VuZC4g QWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBvciBsc24sIGJlY2F1c2Ugd2UgZXhw ZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBjYWxsZWQgZm9yIHRoZSBvbGQgcGFn ZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJucy4KLQkJCQkgKi8KLQkJCQlzby0+ Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJc28tPmN1cnJQb3MubmV4dFBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOworCQkJaWYg KCFCdWZmZXJJc1ZhbGlkKGJ1ZikpCiAJCQkJcmV0dXJuIGZhbHNlOwotCQkJfQorCisJCQloYXNo YmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWhhc2hiYXRjaC0+Y3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9j a051bWJlcihidWYpOwogCQl9CiAKLQkJc28tPmN1cnJQb3MuZmlyc3RJdGVtID0gMDsKLQkJc28t PmN1cnJQb3MubGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5k ZXggPSAwOworCQliYXRjaC0+Zmlyc3RJdGVtID0gMDsKKwkJYmF0Y2gtPmxhc3RJdGVtID0gaXRl bUluZGV4IC0gMTsKIAl9CiAJZWxzZQogCXsKLQkJQmxvY2tOdW1iZXIgbmV4dF9ibGtubyA9IElu dmFsaWRCbG9ja051bWJlcjsKLQogCQlmb3IgKDs7KQogCQl7CiAJCQkvKiBuZXcgcGFnZSwgbG9j YXRlIHN0YXJ0aW5nIHBvc2l0aW9uIGJ5IGJpbmFyeSBzZWFyY2ggKi8KIAkJCW9mZm51bSA9IF9o YXNoX2JpbnNlYXJjaF9sYXN0KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1J bmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGly KTsKKwkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2Us IG9mZm51bSwgZGlyLAorCQkJCQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4 ICE9IE1heEluZGV4VHVwbGVzUGVyUGFnZSkKIAkJCQlicmVhazsKIAogCQkJLyoKLQkJCSAqIENv dWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgbW92 ZSB0bwotCQkJICogdGhlIHByZXZpb3VzIHBhZ2UuIEJlZm9yZSBsZWF2aW5nIHRoZSBjdXJyZW50 IHBhZ2UsIGRlYWwgd2l0aAotCQkJICogYW55IGtpbGxlZCBpdGVtcy4KKwkJCSAqIENvdWxkIG5v dCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQgcGFnZSwgdHJ5IHRvCisJ CQkgKiBtb3ZlIHRvIHRoZSBwcmV2aW91cyBwYWdlCiAJCQkgKi8KLQkJCWlmIChzby0+bnVtS2ls bGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlpZiAoc28tPmN1cnJQ b3MuYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9 PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCi0JCQkJbmV4dF9ibGtubyA9IG9wYXF1ZS0+ aGFzaG9fbmV4dGJsa25vOwotCiAJCQlfaGFzaF9yZWFkcHJldihzY2FuLCAmYnVmLCAmcGFnZSwg Jm9wYXF1ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQotCQkJewotCQkJCXNvLT5jdXJy UG9zLmJ1ZiA9IGJ1ZjsKLQkJCQlzby0+Y3VyclBvcy5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2Nr TnVtYmVyKGJ1Zik7Ci0JCQl9Ci0JCQllbHNlCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBSZW1lbWJl ciBuZXh0IGFuZCBwcmV2aW91cyBibG9jayBudW1iZXJzIGZvciBzY3JvbGxhYmxlCi0JCQkJICog Y3Vyc29ycyB0byBrbm93IHRoZSBzdGFydCBwb3NpdGlvbiBhbmQgcmV0dXJuIGZhbHNlCi0JCQkJ ICogaW5kaWNhdGluZyB0aGF0IG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIHdlcmUgZm91bmQuIEFs c28sCi0JCQkJICogZG9uJ3QgcmVzZXQgY3VyclBhZ2Ugb3IgbHNuLCBiZWNhdXNlIHdlIGV4cGVj dAotCQkJCSAqIF9oYXNoX2tpbGxfaXRlbXMgdG8gYmUgY2FsbGVkIGZvciB0aGUgb2xkIHBhZ2Ug YWZ0ZXIgdGhpcwotCQkJCSAqIGZ1bmN0aW9uIHJldHVybnMuCi0JCQkJICovCi0JCQkJc28tPmN1 cnJQb3MucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQb3MubmV4 dFBhZ2UgPSBuZXh0X2Jsa25vOwotCQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IGJ1ZjsKKwkJCWlmICgh QnVmZmVySXNWYWxpZChidWYpKQogCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KKworCQkJaGFzaGJh dGNoLT5idWYgPSBidWY7CisJCQloYXNoYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tO dW1iZXIoYnVmKTsKIAkJfQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsK LQkJc28tPmN1cnJQb3MubGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlz by0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRj aC0+Zmlyc3RJdGVtID0gaXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1 cGxlc1BlclBhZ2UgLSAxOwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hz b19idWNrZXRfYnVmIHx8Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1 Y2tldF9idWYpCisJLyoKKwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRl bXNbXS4gIFByZXBhcmUgZm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0 aWFsaXppbmcgcmVtYWluaW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChoYXNo YmF0Y2gtPmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKKwkJaGFzaGJhdGNoLT5idWYg PT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQogCXsKLQkJc28tPmN1cnJQb3MucHJldlBh Z2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVl LT5oYXNob19uZXh0Ymxrbm87Ci0JCUxvY2tCdWZmZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJf TE9DS19VTkxPQ0spOworCQkvKgorCQkgKiBCYXRjaCdzIGJ1ZmZlciBpcyBlaXRoZXIgdGhlIHBy aW1hcnkgYnVja2V0LCBvciBhIGJ1Y2tldCBiZWluZworCQkgKiBwb3B1bGF0ZWQgZHVlIHRvIGEg c3BsaXQuCisJCSAqCisJCSAqIEluY3JlbWVudCBsb2NhbCByZWZlcmVuY2UgY291bnQgc28gdGhh dCBiYXRjaCBnZXRzIGFuIGluZGVwZW5kZW50CisJCSAqIGJ1ZmZlciByZWZlcmVuY2UgdGhhdCBj YW4gYmUgcmVsZWFzZWQgKGJ5IHRoZSBjb3JlIGNvZGUvdGFibGUgQU0pCisJCSAqIGJlZm9yZSB0 aGUgaGFzaHNvX2J1Y2tldF9idWYvaGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgcmVmZXJlbmNlcyBh cmUKKwkJICogcmVsZWFzZWQuCisJCSAqLworCQlJbmNyQnVmZmVyUmVmQ291bnQoaGFzaGJhdGNo LT5idWYpOworCisJCS8qIENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hvX25leHRibGtubyAqLwor CQloYXNoYmF0Y2gtPnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOworCQloYXNoYmF0Y2gt Pm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJfQogCWVsc2UKIAl7Ci0JCXNv LT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5oYXNob19wcmV2Ymxrbm87Ci0JCXNvLT5jdXJy UG9zLm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0JCV9oYXNoX3JlbGJ1Zihy ZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7 CisJCS8qIENhbiB1c2Ugb3BhcXVlLT5oYXNob19wcmV2Ymxrbm8gYW5kIG9wYXF1ZS0+aGFzaG9f bmV4dGJsa25vICovCisJCWhhc2hiYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3ByZXZi bGtubzsKKwkJaGFzaGJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwog CX0KIAotCUFzc2VydChzby0+Y3VyclBvcy5maXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0 ZW0pOworCS8qIHdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gYmF0Y2guaXRlbXNbXSAq LworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGhhc2hiYXRjaC0+YnVm KTsKKworCUFzc2VydChiYXRjaC0+Zmlyc3RJdGVtIDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAJcmV0 dXJuIHRydWU7CiB9CiAKIC8qCiAgKiBMb2FkIGFsbCB0aGUgcXVhbGlmaWVkIGl0ZW1zIGZyb20g YSBjdXJyZW50IGluZGV4IHBhZ2UKLSAqIGludG8gc28tPmN1cnJQb3MuIEhlbHBlciBmdW5jdGlv biBmb3IgX2hhc2hfcmVhZHBhZ2UuCisgKiBpbnRvIGJhdGNoLiBIZWxwZXIgZnVuY3Rpb24gZm9y IF9oYXNoX3JlYWRwYWdlLgogICovCiBzdGF0aWMgaW50CiBfaGFzaF9sb2FkX3F1YWxpZmllZF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKLQkJCQkJCSAgIE9mZnNldE51bWJl ciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQorCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCkKIHsK IAlIYXNoU2Nhbk9wYXF1ZSBzbyA9IChIYXNoU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUlu ZGV4VHVwbGUJaXR1cDsKQEAgLTY0MCw3ICs1ODgsNyBAQCBfaGFzaF9sb2FkX3F1YWxpZmllZF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCQlfaGFzaF9jaGVja3F1YWwo c2NhbiwgaXR1cCkpCiAJCQl7CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJl ciBpdCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7 CisJCQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJ CQlpdGVtSW5kZXgrKzsKIAkJCX0KIAkJCWVsc2UKQEAgLTY4Nyw3ICs2MzUsNyBAQCBfaGFzaF9s b2FkX3F1YWxpZmllZF9pdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4sIFBhZ2UgcGFnZSwKIAkJCXsK IAkJCQlpdGVtSW5kZXgtLTsKIAkJCQkvKiB0dXBsZSBpcyBxdWFsaWZpZWQsIHNvIHJlbWVtYmVy IGl0ICovCi0JCQkJX2hhc2hfc2F2ZWl0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsK KwkJCQlfaGFzaF9zYXZlaXRlbShiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwogCQkJ fQogCQkJZWxzZQogCQkJewpAQCAtNzA2LDEzICs2NTQsMTQgQEAgX2hhc2hfbG9hZF9xdWFsaWZp ZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJfQogfQogCi0vKiBTYXZl IGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdICovCisvKiBT YXZlIGFuIGluZGV4IGl0ZW0gaW50byBiYXRjaC0+aXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGlj IGlubGluZSB2b2lkCi1faGFzaF9zYXZlaXRlbShIYXNoU2Nhbk9wYXF1ZSBzbywgaW50IGl0ZW1J bmRleCwKK19oYXNoX3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIGJhdGNoLCBpbnQgaXRlbUluZGV4 LAogCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgSW5kZXhUdXBsZSBpdHVwKQogewotCUhhc2hT Y2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlC YXRjaE1hdGNoaW5nSXRlbSAqY3Vyckl0ZW0gPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF07CiAK LQljdXJySXRlbS0+aGVhcFRpZCA9IGl0dXAtPnRfdGlkOworCWN1cnJJdGVtLT50YWJsZVRpZCA9 IGl0dXAtPnRfdGlkOwogCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKwljdXJySXRl bS0+dHVwbGVPZmZzZXQgPSAwOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hh c2gvaGFzaHV0aWwuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMKaW5kZXgg MDgxYWRiYzg4Li4zMzFkNWY0ZGEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNo L2hhc2h1dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHV0aWwuYwpAQCAt MTYsNyArMTYsNiBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2hhc2guaCIKICNpbmNsdWRlICJhY2Nl c3MvcmVsb3B0aW9ucy5oIgotI2luY2x1ZGUgImFjY2Vzcy9yZWxzY2FuLmgiCiAjaW5jbHVkZSAi cG9ydC9wZ19iaXR1dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1 ZGUgInV0aWxzL3JlbC5oIgpAQCAtMzMsNyArMzIsNyBAQCBfaGFzaF9jaGVja3F1YWwoSW5kZXhT Y2FuRGVzYyBzY2FuLCBJbmRleFR1cGxlIGl0dXApCiAJLyoKIAkgKiBDdXJyZW50bHksIHdlIGNh bid0IGNoZWNrIGFueSBvZiB0aGUgc2NhbiBjb25kaXRpb25zIHNpbmNlIHdlIGRvIG5vdAogCSAq IGhhdmUgdGhlIG9yaWdpbmFsIGluZGV4IGVudHJ5IHZhbHVlIHRvIHN1cHBseSB0byB0aGUgc2tf ZnVuYy4gQWx3YXlzCi0JICogcmV0dXJuIHRydWU7IHdlIGV4cGVjdCB0aGF0IGhhc2hnZXR0dXBs ZSBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCisJICogcmV0dXJuIHRydWU7IHdlIGV4cGVj dCB0aGF0IGhhc2hnZXRiYXRjaCBhbHJlYWR5IHNldCB0aGUgcmVjaGVjayBmbGFnCiAJICogdG8g bWFrZSB0aGUgbWFpbiBpbmRleHNjYW4gY29kZSBkbyBpdC4KIAkgKi8KICNpZmRlZiBOT1RfVVNF RApAQCAtNTA1LDEyOSArNTA0LDMgQEAgX2hhc2hfZ2V0X25ld2J1Y2tldF9mcm9tX29sZGJ1Y2tl dChSZWxhdGlvbiByZWwsIEJ1Y2tldCBvbGRfYnVja2V0LAogCiAJcmV0dXJuIG5ld19idWNrZXQ7 CiB9Ci0KLS8qCi0gKiBfaGFzaF9raWxsX2l0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0 ZW1zIGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCi0gKiB0b2xkIHVzIHdlcmUga2lsbGVkLgotICoK LSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBsb2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5z IGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3VycmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVz IHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNv LT5udW1LaWxsZWQgPiAwKS4KLSAqCi0gKiBUaGUgY2FsbGVyIGRvZXMgbm90IGhhdmUgYSBsb2Nr IG9uIHRoZSBwYWdlIGFuZCBtYXkgb3IgbWF5IG5vdCBoYXZlIHRoZQotICogcGFnZSBwaW5uZWQg aW4gYSBidWZmZXIuICBOb3RlIHRoYXQgcmVhZC1sb2NrIGlzIHN1ZmZpY2llbnQgZm9yIHNldHRp bmcKLSAqIExQX0RFQUQgc3RhdHVzICh3aGljaCBpcyBvbmx5IGEgaGludCkuCi0gKgotICogVGhl IGNhbGxlciBtdXN0IGhhdmUgcGluIG9uIGJ1Y2tldCBidWZmZXIsIGJ1dCBtYXkgb3IgbWF5IG5v dCBoYXZlIHBpbgotICogb24gb3ZlcmZsb3cgYnVmZmVyLCBhcyBpbmRpY2F0ZWQgYnkgSGFzaFNj YW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykuCi0gKgotICogV2UgbWF0Y2ggaXRlbXMgYnkgaGVh cCBUSUQgYmVmb3JlIGFzc3VtaW5nIHRoZXkgYXJlIHRoZSByaWdodCBvbmVzIHRvCi0gKiBkZWxl dGUuCi0gKgotICogVGhlcmUgYXJlIG5ldmVyIGFueSBzY2FucyBhY3RpdmUgaW4gYSBidWNrZXQg YXQgdGhlIHRpbWUgVkFDVVVNIGJlZ2lucywKLSAqIGJlY2F1c2UgVkFDVVVNIHRha2VzIGEgY2xl YW51cCBsb2NrIG9uIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlIGFuZCBzY2FucwotICogaG9sZCBh IHBpbi4gIEEgc2NhbiBjYW4gYmVnaW4gYWZ0ZXIgVkFDVVVNIGxlYXZlcyB0aGUgcHJpbWFyeSBi dWNrZXQgcGFnZQotICogYnV0IGJlZm9yZSBpdCBmaW5pc2hlcyB0aGUgZW50aXJlIGJ1Y2tldCwg YnV0IGl0IGNhbiBuZXZlciBwYXNzIFZBQ1VVTSwKLSAqIGJlY2F1c2UgVkFDVVVNIGFsd2F5cyBs b2NrcyB0aGUgbmV4dCBwYWdlIGJlZm9yZSByZWxlYXNpbmcgdGhlIGxvY2sgb24KLSAqIHRoZSBw cmV2aW91cyBvbmUuICBUaGVyZWZvcmUsIHdlIGRvbid0IGhhdmUgdG8gd29ycnkgYWJvdXQgYWNj aWRlbnRhbGx5Ci0gKiBraWxsaW5nIGEgVElEIHRoYXQgaGFzIGJlZW4gcmV1c2VkIGZvciBhbiB1 bnJlbGF0ZWQgdHVwbGUuCi0gKi8KLXZvaWQKLV9oYXNoX2tpbGxfaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuKQotewotCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7Ci0JUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQlCbG9ja051bWJl ciBibGtubzsKLQlCdWZmZXIJCWJ1ZjsKLQlQYWdlCQlwYWdlOwotCUhhc2hQYWdlT3BhcXVlIG9w YXF1ZTsKLQlPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCW1heG9mZjsKLQlpbnQJCQludW1LaWxs ZWQgPSBzby0+bnVtS2lsbGVkOwotCWludAkJCWk7Ci0JYm9vbAkJa2lsbGVkc29tZXRoaW5nID0g ZmFsc2U7Ci0JYm9vbAkJaGF2ZVBpbiA9IGZhbHNlOwotCi0JQXNzZXJ0KHNvLT5udW1LaWxsZWQg PiAwKTsKLQlBc3NlcnQoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpOwotCUFzc2VydChIYXNoU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQotCS8qCi0JICogQWx3YXlzIHJlc2V0IHRoZSBz Y2FuIHN0YXRlLCBzbyB3ZSBkb24ndCBsb29rIGZvciBzYW1lIGl0ZW1zIG9uIG90aGVyCi0JICog cGFnZXMuCi0JICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQlibGtubyA9IHNvLT5jdXJyUG9z LmN1cnJQYWdlOwotCWlmIChIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQl7Ci0J CS8qCi0JCSAqIFdlIGFscmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBidWZmZXIsIHNvLCBhbGwgd2Ug bmVlZCB0byBkbyBpcwotCQkgKiBhY3F1aXJlIGxvY2sgb24gaXQuCi0JCSAqLwotCQloYXZlUGlu ID0gdHJ1ZTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOwotCQlMb2NrQnVmZmVyKGJ1ZiwgQlVG RkVSX0xPQ0tfU0hBUkUpOwotCX0KLQllbHNlCi0JCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJs a25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9XX1BBR0UpOwotCi0JcGFnZSA9IEJ1ZmZlckdldFBh Z2UoYnVmKTsKLQlvcGFxdWUgPSBIYXNoUGFnZUdldE9wYXF1ZShwYWdlKTsKLQltYXhvZmYgPSBQ YWdlR2V0TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpOwotCi0JZm9yIChpID0gMDsgaSA8IG51bUtpbGxl ZDsgaSsrKQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlI YXNoU2NhblBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07 Ci0KLQkJb2ZmbnVtID0gY3Vyckl0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFzc2VydChpdGVtSW5k ZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5kZXggPD0gc28tPmN1 cnJQb3MubGFzdEl0ZW0pOwotCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJ dGVtSWQJCWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJ aXR1cGxlID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0KLQkJCWlmIChJ dGVtUG9pbnRlckVxdWFscygmaXR1cGxlLT50X3RpZCwgJmN1cnJJdGVtLT5oZWFwVGlkKSkKLQkJ CXsKLQkJCQlpZiAoIWtpbGxlZHNvbWV0aGluZykKLQkJCQl7Ci0JCQkJCS8qCi0JCQkJCSAqIFVz ZSB0aGUgaGludCBiaXQgaW5mcmFzdHJ1Y3R1cmUgdG8gY2hlY2sgaWYgd2UgY2FuCi0JCQkJCSAq IHVwZGF0ZSB0aGUgcGFnZSB3aGlsZSBqdXN0IGhvbGRpbmcgYSBzaGFyZSBsb2NrLiBJZiB3ZQot CQkJCQkgKiBhcmUgbm90IGFsbG93ZWQsIHRoZXJlJ3Mgbm8gcG9pbnQgY29udGludWluZy4KLQkJ CQkJICovCi0JCQkJCWlmICghQnVmZmVyQmVnaW5TZXRIaW50Qml0cyhidWYpKQotCQkJCQkJZ290 byB1bmxvY2tfcGFnZTsKLQkJCQl9Ci0KLQkJCQkvKiBmb3VuZCB0aGUgaXRlbSAqLwotCQkJCUl0 ZW1JZE1hcmtEZWFkKGlpZCk7Ci0JCQkJa2lsbGVkc29tZXRoaW5nID0gdHJ1ZTsKLQkJCQlicmVh azsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KLQkJCX0KLQkJCW9mZm51bSA9IE9m ZnNldE51bWJlck5leHQob2ZmbnVtKTsKLQkJfQotCX0KLQotCS8qCi0JICogU2luY2UgdGhpcyBj YW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBkaXJ0eSBoaW50LiBXaGVuZXZl cgotCSAqIHdlIG1hcmsgYW55dGhpbmcgTFBfREVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2Uncwot CSAqIExIX1BBR0VfSEFTX0RFQURfVFVQTEVTIGZsYWcsIHdoaWNoIGlzIGxpa2V3aXNlIGp1c3Qg YSBoaW50LgotCSAqLwotCWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmhhc2hv X2ZsYWcgfD0gTEhfUEFHRV9IQVNfREVBRF9UVVBMRVM7Ci0JCUJ1ZmZlckZpbmlzaFNldEhpbnRC aXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7Ci0JfQotCi11bmxvY2tfcGFnZToKLQlpZiAoc28tPmhhc2hz b19idWNrZXRfYnVmID09IHNvLT5jdXJyUG9zLmJ1ZiB8fAotCQloYXZlUGluKQotCQlMb2NrQnVm ZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKLQllbHNlCi0JCV9oYXNo X3JlbGJ1ZihyZWwsIGJ1Zik7Ci19CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5z Z21sIGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCAyNWI1MTZiYTYuLmVkYTAzZjI2 MSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3Nn bWwvaW5kZXhhbS5zZ21sCkBAIC04NDUsNyArODQ1LDggQEAgYW1nZXRiYXRjaCAoSW5kZXhTY2Fu RGVzYyBzY2FuLAogICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoPC9mdW5jdGlv bj4pLiAgTm90ZSBhbHNvIHRoYXQKICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4g ZnVuY3Rpb25zIG11c3QgbmV2ZXIgbW9kaWZ5IHRoZQogICAgPHN0cnVjdGZpZWxkPnByaW9yYmF0 Y2g8L3N0cnVjdGZpZWxkPiBwYXJhbWV0ZXIuICBUaGUgY29yZQotICAgPGZpbGVuYW1lPnNyYy9i YWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gaW1wbGVtZW50YXRpb24gcHJvdmlkZXMg YQorICAgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4gYW5k CisgICA8ZmlsZW5hbWU+c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvPC9maWxlbmFtZT4gaW1wbGVt ZW50YXRpb25zIHByb3ZpZGUKICAgIHJlZmVyZW5jZSBleGFtcGxlcyBvZiB0aGUgPGZ1bmN0aW9u PmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UuCiAgIDwvcGFyYT4KIApAQCAtOTIxLDgg KzkyMiw4IEBAIGFta2lsbGl0ZW1zYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgPHBhcmE+ CiAgICBXaGlsZSBpbXBsZW1lbnRpbmcgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0 aW9uPiBpcyBvcHRpb25hbCwKICAgIGRvaW5nIHNvIGlzIHJlY29tbWVuZGVkIGZvciBwZXJmb3Jt YW5jZSwgYXMgaXQgYWxsb3dzIGZ1dHVyZSBzY2FucyB0byBza2lwCi0gICBrbm93bi1kZWFkIGlu ZGV4IGVudHJpZXMuICBUaGUgY29yZSBpbmRleCBhY2Nlc3MgbWV0aG9kIHRoYXQgY3VycmVudGx5 Ci0gICBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gKEItdHJlZSkgaW1w bGVtZW50cworICAga25vd24tZGVhZCBpbmRleCBlbnRyaWVzLiAgQm90aCBjb3JlIGluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgY3VycmVudGx5CisgICBzdXBwb3J0IDxmdW5jdGlvbj5hbWdldGJh dGNoPC9mdW5jdGlvbj4gKEItdHJlZSBhbmQgaGFzaCkgaW1wbGVtZW50CiAgICA8bGl0ZXJhbD5M UF9ERUFEPC9saXRlcmFsPiBtYXJraW5nLCB0aG91Z2ggdGhpcmQtcGFydHkgaW5kZXggYWNjZXNz IG1ldGhvZHMKICAgIGFyZSBmcmVlIHRvIGNob29zZSB3aGV0aGVyIHRvIGltcGxlbWVudCB0aGlz IGZlYXR1cmUuCiAgICBUaGUgdGFibGUgQU0gbWF5IGNhbGwKQEAgLTk2MSw4ICs5NjIsOCBAQCBh bWtpbGxpdGVtc2JhdGNoIChJbmRleFNjYW5EZXNjIHNjYW4sCiAgICBhbHdheXMgc2FmZSB0byBz a2lwIGl0LiAgTm90ZSB0aGF0IHRoaXMgTFNOIGNvbXBhcmlzb24gdGVjaG5pcXVlIHJlcXVpcmVz CiAgICB0aGUgaW5kZXggQU0gdG8gdXNlIGZha2UgKG1vbm90b25pY2FsbHkgaW5jcmVhc2luZykg TFNOcyBvbiBpdHMgcGFnZXMgZm9yCiAgICByZWxhdGlvbnMgd2hlcmUgV0FMIGlzIG5vdCBnZW5l cmF0ZWQsIHNpbmNlIHJlYWwgTFNOcyBhcmUgbm90IGF2YWlsYWJsZSBpbgotICAgdGhhdCBjYXNl LiAgU2VlIHRoZSBCLXRyZWUgaW5kZXggaW1wbGVtZW50YXRpb24gZm9yIGEgcmVmZXJlbmNlCi0g ICBleGFtcGxlIG9mIHRoaXMgdGVjaG5pcXVlLiAgQW4gaW5kZXggQU0gdGhhdCBkb2VzIG5vdCBp bXBsZW1lbnQgZmFrZSBMU05zCisgICB0aGF0IGNhc2UuICBTZWUgdGhlIEItdHJlZSBhbmQgaGFz aCBpbmRleCBpbXBsZW1lbnRhdGlvbnMgZm9yIHJlZmVyZW5jZQorICAgZXhhbXBsZXMgb2YgdGhp cyB0ZWNobmlxdWUuICBBbiBpbmRleCBBTSB0aGF0IGRvZXMgbm90IGltcGxlbWVudCBmYWtlIExT TnMKICAgIGNhbiBzdGlsbCBwcm92aWRlIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5j dGlvbj4sIGJ1dCBzaG91bGQgc2ltcGx5CiAgICBkbyBub3RoaW5nIHdoZW4gdGhlIHJlbGF0aW9u IGRvZXMgbm90IGdlbmVyYXRlIFdBTCAoaS5lLiwgd2hlbgogICAgPGZ1bmN0aW9uPlJlbGF0aW9u TmVlZHNXQUwoKTwvZnVuY3Rpb24+IGlzIGZhbHNlKSwgc2luY2UgdGhlIExTTiBjb21wYXJpc29u CkBAIC05ODksOSArOTkwLDkgQEAgYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwK ICAgIGxlYWYgcGFnZSwgd2hpY2ggcHJldmVudHMgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5 CiAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LgogICAgRm9ybWFsbHksIGFuIGluZGV4IEFN IG1heSBob2xkIGEgZGlmZmVyZW50IGtpbmQgb2YgaW50ZXJsb2NrLCBvciBtdWx0aXBsZQotICAg aW50ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNl IHRoZSBidWlsdC1pbgotICAgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+ICZtZGFzaDsgQi10cmVlCi0gICAmbWRhc2g7IGhvbGRzIGEgc2luZ2xl IGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgorICAgaW50 ZXJsb2NrcywgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUgYXJlYSwgYnV0IGluIHByYWN0aWNlIGJv dGggYnVpbHQtaW4KKyAgIGluZGV4IEFNcyB0aGF0IHN1cHBvcnQgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPiAmbWRhc2g7IEItdHJlZSBhbmQKKyAgIGhhc2ggJm1kYXNoOyBob2xkIGEg c2luZ2xlIGJ1ZmZlciBwaW4uICBTZWUgPHhyZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPgog ICAgZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50IGR1cmluZyBpbmRleCBzY2Fu cy4gIFRoaXMgZnVuY3Rpb24KICAgIHdpbGwgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBmb3IgZWFj aCBndWFyZGVkIGJhdGNoLgogICA8L3BhcmE+CkBAIC0xMDYxLDggKzEwNjIsOCBAQCBhbWdldGJp dG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5j dGlvbj4gc2NhbnM7IGR1cmluZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CiAgICBz Y2FucyB0aGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQg YnkgdGhlIHRhYmxlIEFNCiAgICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3Qg bmV2ZXIgcmVsZWFzZSBpdC4gIFNlZQotICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4g Zm9yIGEKLSAgIHJlZmVyZW5jZSBleGFtcGxlLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hl ZCBpbnRlcm5hbGx5IGFuZCByZXVzZWQgYnkKKyAgIDxmdW5jdGlvbj5fYnRfbmV4dDwvZnVuY3Rp b24+IGFuZCA8ZnVuY3Rpb24+X2hhc2hfbmV4dDwvZnVuY3Rpb24+IGZvcgorICAgcmVmZXJlbmNl IGV4YW1wbGVzLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCBy ZXVzZWQgYnkKICAgIHRoZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8 L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZwogICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24g ZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KICAgPC9wYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xz L3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlz dAppbmRleCAzMWE3MmE5NmEuLjg0ODFlNmRjNiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5k ZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QK QEAgLTEyMDYsNiArMTIwNiw3IEBAIEhhc2gKIEhhc2hBZ2dCYXRjaAogSGFzaEFnZ1NwaWxsCiBI YXNoQWxsb2NGdW5jCitIYXNoQmF0Y2hEYXRhCiBIYXNoQnVpbGRTdGF0ZQogSGFzaEJ1bGtEZWxl dGVTdHJlYW1Qcml2YXRlCiBIYXNoQ29tcGFyZUZ1bmMKQEAgLTEyMjcsOCArMTIyOCw2IEBAIEhh c2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNoU2Nhbk9wYXF1ZURhdGEK LUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tld0J1Y2tldAogSGFzaFN0 YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Disposition: attachment; filename="v18-0007-Add-UnlockBufferGetLSN-utility-function.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37k12 RnJvbSA1Y2ZkOThjMTMyNTU2YWE2YTk1ZDc0ZjcxNTBhNDA0ODI0M2U2NWU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTcgTWFyIDIwMjYgMTM6MjU6MTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwNy8xOV0g QWRkIFVubG9ja0J1ZmZlckdldExTTiB1dGlsaXR5IGZ1bmN0aW9uLgoKVGhpcyBjb21iaW5lcyB0 aGUgZnVuY3Rpb25hbGl0eSBvZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoClVubG9ja1JlbGVh c2VCdWZmZXIsIHdpdGggdGhlIG9wdGlvbiBvZiBub3QgcmVsZWFzaW5nIGJ1ZmZlciBwaW4uCgpB dXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9DQUgyLVd6a3lHMDE2ODJ6d3F5VVR3Vj1acStNX3FHZ2kxTmJYd3AxSC1waVJT ZkpzZ1FAbWFpbC5nbWFpbC5jb20KLS0tCiBzcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oICAg ICAgICAgIHwgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyB8IDEy ICstLS0KIHNyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jICAgfCA5MCArKysrKysr KysrKysrKysrKysrKysrKysrKysKIDMgZmlsZXMgY2hhbmdlZCwgOTIgaW5zZXJ0aW9ucygrKSwg MTEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aCBiL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKaW5kZXggZGQ0MWI5MmY5Li42ODFhM2U1 NmYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3N0b3JhZ2UvYnVmbWdyLmgKKysrIGIvc3JjL2lu Y2x1ZGUvc3RvcmFnZS9idWZtZ3IuaApAQCAtMjU1LDYgKzI1NSw3IEBAIGV4dGVybiB2b2lkIFdh aXRSZWFkQnVmZmVycyhSZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uKTsKIAogZXh0ZXJu IHZvaWQgUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiB2b2lkIFVubG9ja1Jl bGVhc2VCdWZmZXIoQnVmZmVyIGJ1ZmZlcik7CitleHRlcm4gWExvZ1JlY1B0ciBVbmxvY2tCdWZm ZXJHZXRMU04oQnVmZmVyIGJ1ZmZlciwgYm9vbCByZWxlYXNlKTsKIGV4dGVybiBib29sIEJ1ZmZl cklzTG9ja2VkQnlNZShCdWZmZXIgYnVmZmVyKTsKIGV4dGVybiBib29sIEJ1ZmZlcklzTG9ja2Vk QnlNZUluTW9kZShCdWZmZXIgYnVmZmVyLCBCdWZmZXJMb2NrTW9kZSBtb2RlKTsKIGV4dGVybiBi b29sIEJ1ZmZlcklzRGlydHkoQnVmZmVyIGJ1ZmZlcik7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2lu ZGV4YmF0Y2guYwppbmRleCAzYWJmNTg0NTMuLjU2NTE4MjQzMCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aW5kZXgvaW5kZXhiYXRjaC5jCkBAIC00OTEsMTcgKzQ5MSw3IEBAIGluZGV4YW1fdXRpbF9iYXRj aF91bmxvY2soSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVy IGJ1ZikKIAkJICogTm9uLWltbWVkaWF0ZS11bmd1YXJkIHNjYW5zIHJldGFpbiB0aGUgcGluOyB0 aGUgdGFibGUgQU0gd2lsbCBjYWxsCiAJCSAqIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3AgdGhlIGlu dGVybG9jayB3aGVuIHJlYWR5LgogCQkgKi8KLQkJYmF0Y2gtPmxzbiA9IEJ1ZmZlckdldExTTkF0 b21pYyhidWYpOwotCQlpZiAoc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKQotCQl7Ci0JCQkv KiBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4gKi8KLQkJCVVubG9ja1JlbGVhc2VCdWZm ZXIoYnVmKTsKLQkJfQotCQllbHNlCi0JCXsKLQkJCS8qIGp1c3QgZHJvcCB0aGUgbG9jayAoaG9s ZCBvbiB0byBpbnRlcmxvY2sgcGluKSAqLwotCQkJVW5sb2NrQnVmZmVyKGJ1Zik7Ci0JCX0KKwkJ YmF0Y2gtPmxzbiA9IFVubG9ja0J1ZmZlckdldExTTihidWYsIHNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZCk7CiAKIAkJLyogSWYgd2UgcmVsZWFzZWQgYnVmZmVyIHBpbiwgYmF0Y2ggaXMgbm93 IHVuZ3VhcmRlZCAqLwogCQliYXRjaC0+aXNHdWFyZGVkID0gIXNjYW4tPmJhdGNoSW1tZWRpYXRl VW5ndWFyZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j IGIvc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMKaW5kZXggY2QyMWFlM2ZjLi40 Y2RiNTY1ZTQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5j CisrKyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYnVmZmVyL2J1Zm1nci5jCkBAIC01NjM4LDYgKzU2 MzgsOTYgQEAgVW5sb2NrUmVsZWFzZUJ1ZmZlcihCdWZmZXIgYnVmZmVyKQogCVJFU1VNRV9JTlRF UlJVUFRTKCk7CiB9CiAKKy8qCisgKiBVbmxvY2tCdWZmZXJHZXRMU04KKyAqCQlSZWFkIGEgYnVm ZmVyJ3MgTFNOLCB0aGVuIHVubG9jayB0aGUgYnVmZmVyLiAgT3B0aW9uYWxseSByZWxlYXNlIHRo ZQorICoJCXBpbiB0b28uCisgKgorICogVGhpcyBjb21iaW5lcyB0aGUgZnVuY3Rpb25hbGl0eSBv ZiBCdWZmZXJHZXRMU05BdG9taWMoKSB3aXRoCisgKiBVbmxvY2tSZWxlYXNlQnVmZmVyLCB3aXRo IHRoZSBvcHRpb24gb2Ygbm90IHJlbGVhc2luZyBidWZmZXIgcGluLgorICoKKyAqIFVzZWQgdG8g dW5sb2NrIGEgYnVmZmVyIGxvY2sgKGFuZCBwb3NzaWJseSB0byByZWxlYXNlIGl0cyBwaW4pIHdo ZW4gaGVsZCBvbgorICogYW4gaW5kZXggcGFnZS4gIFRoaXMgaXMgbmVlZGVkIGZyZXF1ZW50bHkg ZW5vdWdoIHRvIGp1c3RpZnkgc3BlY2lhbGl6YXRpb24uCisgKi8KK1hMb2dSZWNQdHIKK1VubG9j a0J1ZmZlckdldExTTihCdWZmZXIgYnVmZmVyLCBib29sIHJlbGVhc2UpCit7CisJQnVmZmVyRGVz YyAqYnVmX2hkcjsKKwlQYWdlCQlwYWdlOworCVhMb2dSZWNQdHIJbHNuOworCWludAkJCW1vZGU7 CisJdWludDY0CQlzdWI7CisJdWludDY0CQlsb2Nrc3RhdGU7CisJUHJpdmF0ZVJlZkNvdW50RW50 cnkgKnJlZjsKKworCUFzc2VydChCdWZmZXJJc1ZhbGlkKGJ1ZmZlcikpOworCUFzc2VydChCdWZm ZXJJc1Bpbm5lZChidWZmZXIpKTsKKworCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZlcikpCisJewor CQlidWZfaGRyID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZmZXIgLSAxKTsKKwkJcGFn ZSA9IChQYWdlKSBMb2NhbEJ1ZkhkckdldEJsb2NrKGJ1Zl9oZHIpOworCQlsc24gPSBQYWdlR2V0 TFNOKHBhZ2UpOworCQlpZiAocmVsZWFzZSkKKwkJCVVucGluTG9jYWxCdWZmZXIoYnVmZmVyKTsK KwkJcmV0dXJuIGxzbjsKKwl9CisKKwlidWZfaGRyID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZm ZXIgLSAxKTsKKwlwYWdlID0gKFBhZ2UpIEJ1ZkhkckdldEJsb2NrKGJ1Zl9oZHIpOworCisjaWZk ZWYgUEdfSEFWRV84QllURV9TSU5HTEVfQ09QWV9BVE9NSUNJVFkKKwlsc24gPSBQYWdlR2V0TFNO KHBhZ2UpOworI2Vsc2UKKwlsc24gPSBCdWZmZXJHZXRMU05BdG9taWMoYnVmZmVyKTsKKyNlbmRp ZgorCisJaWYgKCFyZWxlYXNlKQorCXsKKwkJLyogSnVzdCByZWxlYXNlIHRoZSBsb2NrICovCisJ CUJ1ZmZlckxvY2tVbmxvY2soYnVmZmVyLCBidWZfaGRyKTsKKwkJcmV0dXJuIGxzbjsKKwl9CisK KwkvKiBSZWxlYXNlIGJvdGggbG9jayBhbmQgcGluIGluIG9uZSBhdG9taWMgb3AgKi8KKwlSZXNv dXJjZU93bmVyRm9yZ2V0QnVmZmVyKEN1cnJlbnRSZXNvdXJjZU93bmVyLCBidWZmZXIpOworCisJ bW9kZSA9IEJ1ZmZlckxvY2tEaXNvd25JbnRlcm5hbChidWZmZXIsIGJ1Zl9oZHIpOworCisJLyog Y29tcHV0ZSBzdGF0ZSBtb2RpZmljYXRpb24gZm9yIGxvY2sgcmVsZWFzZSAqLworCXN1YiA9IEJ1 ZmZlckxvY2tSZWxlYXNlU3ViKG1vZGUpOworCisJLyogY29tcHV0ZSBzdGF0ZSBtb2RpZmljYXRp b24gZm9yIHBpbiByZWxlYXNlICovCisJcmVmID0gR2V0UHJpdmF0ZVJlZkNvdW50RW50cnkoYnVm ZmVyLCBmYWxzZSk7CisJQXNzZXJ0KHJlZiAhPSBOVUxMKTsKKwlBc3NlcnQocmVmLT5kYXRhLnJl ZmNvdW50ID4gMCk7CisJcmVmLT5kYXRhLnJlZmNvdW50LS07CisKKwkvKiBubyBtb3JlIGJhY2tl bmQgbG9jYWwgcGlucywgcmVkdWNlIHNoYXJlZCBwaW4gY291bnQgKi8KKwlpZiAobGlrZWx5KHJl Zi0+ZGF0YS5yZWZjb3VudCA9PSAwKSkKKwl7CisJCS8qIFNlZSBjb21tZW50IGluIFVucGluQnVm ZmVyTm9Pd25lcigpICovCisJCVZBTEdSSU5EX01BS0VfTUVNX05PQUNDRVNTKEJ1ZkhkckdldEJs b2NrKGJ1Zl9oZHIpLCBCTENLU1opOworCisJCXN1YiB8PSBCVUZfUkVGQ09VTlRfT05FOworCQlG b3JnZXRQcml2YXRlUmVmQ291bnRFbnRyeShyZWYpOworCX0KKworCS8qIHBlcmZvcm0gdGhlIGxv Y2sgYW5kIHBpbiByZWxlYXNlIGluIG9uZSBhdG9taWMgb3AgKi8KKwlsb2Nrc3RhdGUgPSBwZ19h dG9taWNfc3ViX2ZldGNoX3U2NCgmYnVmX2hkci0+c3RhdGUsIHN1Yik7CisKKwkvKiB3YWtlIHVw IHdhaXRlcnMgZm9yIHRoZSBsb2NrICovCisJQnVmZmVyTG9ja1Byb2Nlc3NSZWxlYXNlKGJ1Zl9o ZHIsIG1vZGUsIGxvY2tzdGF0ZSk7CisKKwkvKiB3YWtlIHVwIHdhaXRlciBmb3IgdGhlIHBpbiBy ZWxlYXNlICovCisJaWYgKGxvY2tzdGF0ZSAmIEJNX1BJTl9DT1VOVF9XQUlURVIpCisJCVdha2VQ aW5Db3VudFdhaXRlcihidWZfaGRyKTsKKworCVJFU1VNRV9JTlRFUlJVUFRTKCk7CisKKwlyZXR1 cm4gbHNuOworfQorCiAvKgogICogSW5jckJ1ZmZlclJlZkNvdW50CiAgKgkJSW5jcmVtZW50IHRo ZSBwaW4gY291bnQgb24gYSBidWZmZXIgdGhhdCB3ZSBoYXZlICphbHJlYWR5KiBwaW5uZWQKLS0g CjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0006-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Disposition: attachment; filename="v18-0006-heapam-Optimize-pin-transfers-during-index-scans.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37l13 RnJvbSA4ZmZiMTVjNzkzOGYzMWMwMDc4NGY2MmU0MjAxNzdiZWIzNTE4NjZmIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MjI6MDYgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwNi8xOV0g aGVhcGFtOiBPcHRpbWl6ZSBwaW4gdHJhbnNmZXJzIGR1cmluZyBpbmRleCBzY2Fucy4KCkFkZCBh biB4c19sYXN0aW5ibG9jayBmbGFnIHRvIEluZGV4RmV0Y2hIZWFwRGF0YSB0aGF0IHRyYWNrcyB3 aGV0aGVyIHRoZQpjdXJyZW50IFRJRCBpcyB0aGUgbGFzdCBvbmUgb24gaXRzIGhlYXAgYmxvY2sg d2l0aGluIHRoZSBjdXJyZW50IGJhdGNoLgpXaGVuIGl0IGlzLCBoZWFwYW1faW5kZXhfZmV0Y2hf dHVwbGUgY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIgcGluIHRvIHRoZQpzbG90ICh2aWEgRXhlY1N0 b3JlUGlubmVkQnVmZmVySGVhcFR1cGxlKSBpbnN0ZWFkIG9mIGluY3JlbWVudGluZyB0aGUKcGlu IGNvdW50LCBzYXZpbmcgYSBwYWlyIG9mIEluY3JCdWZmZXJSZWZDb3VudC9SZWxlYXNlQnVmZmVy IGNhbGxzLgpUaGlzIG9wdGltaXphdGlvbiBpcyBub3QgdXNlZCBmb3IgaW5kZXgtb25seSBzY2Fu cyBiZWNhdXNlIGFsbC12aXNpYmxlCml0ZW1zIGNhbiBiZSBza2lwcGVkLCB3aGljaCB3b3VsZCBi cmVhayBibG9jayBkZWR1cGxpY2F0aW9uIHN5bW1ldHJ5CmJldHdlZW4gdGhlIHNjYW4gYW5kIHRo ZSByZWFkIHN0cmVhbSAoYmVzaWRlcywgdGhlIHBlcmZvcm1hbmNlIG9mIHRoaXMKY29kZSBwYXRo IGNhbiBvbmx5IG1hdHRlciB3aGVuIG1hbnkgaGVhcCBmZXRjaGVzIGFyZSByZXF1aXJlZCwgd2hp Y2ggaXMKaG9wZWZ1bGx5IHJhcmUgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMpLgoKQWxzbyBhZGQg YW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUgdG8gdGhlIGJsb2NrLXN3aXRjaCBwYXRoIGluCmhl YXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsIHRvIHJlbGVhc2UgdGhlIHBpbiB0cmFuc2ZlcnJl ZCB0byB0aGUgc2xvdApvbiB0aGUgcHJldmlvdXMgY2FsbCAoanVzdCBiZWZvcmUgY2FsbGluZyBS ZWxlYXNlQnVmZmVyIGFzIHBhcnQgb2YKbW92aW5nIG9uIHRvIHRoZSBzY2FuJ3MgbmV4dCBibG9j aykuICBUaGlzIGZpeGVzIGEgcGVyZm9ybWFuY2UgcHJvYmxlbQp3aGVyZSB0aGUgY29kZSBwYXRo IGluIHF1ZXN0aW9uIHRyaWdnZXJzIEdldFByaXZhdGVSZWZDb3VudEVudHJ5U2xvdwpjYWxscyBt b3JlIG9mdGVuIHRoYW4gb25lIHdvdWxkIGhvcGUuICBUaGUgdW5kZXJseWluZyBpc3N1ZSBoYXMg YmVlbgp0aWVkIHRvIHRoZSBwaW4gaW4gdGhlIHNsb3QgYmVpbmcgaGVsZCwgZXZlbiBpZiB3ZSBk ZWNpZGUgdG8gcmVsZWFzZSB0aGUKYnVmZmVyIGFuZCBtb3ZlIG9uOiBFeGVjU3RvcmVCdWZmZXJI ZWFwVHVwbGUgd2lsbCBmaXJzdCBmYWlsIHRvIGhpdCB0aGUKYmFja2VuZC1sb2NhbCBjYWNoZSBm b3IgdGhlIHJlbGVhc2Ugb2YgdGhlIG9sZCBwaW4gKGJlY2F1c2Ugd2UganVzdApwaW5uZWQgYW5k IGxvY2tlZCB0aGUgbmV3IGJ1ZmZlciksIGNhdXNpbmcgYSBjYWNoZSBtaXNzIGluc2lkZQpJbmNy QnVmZmVyUmVmQ291bnQuCgpBdXRob3I6IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KU3Vn Z2VzdGVkLWJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5 OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8v cG9zdGdyLmVzL20vQ0FIMi1Xej1ENExydTlCa3ZxYVJuRlJQRGFaYmZUT2RXY3h3MTN6eUc2R1ZG VHR6X3Z3QG1haWwuZ21haWwuY29tCi0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAg ICAgICAgICAgICAgIHwgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jIHwgNzMgKysrKysrKysrKysrKysrKysrKysrLQogMiBmaWxlcyBjaGFuZ2VkLCA3NCBp bnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2Fj Y2Vzcy9oZWFwYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAppbmRleCA1OTk5YWY5 ODIuLjY2OTk0Y2IwMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCisr KyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaApAQCAtMTM0LDYgKzEzNCw5IEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CS8qIHZp c2liaWxpdHkgbWFwIGJ1ZmZlciAqLwogCWludAkJCXhzX3ZtX2l0ZW1zOwkvKiAjIGl0ZW1zIHRv IHJlc29sdmUgdmlzaWJpbGl0eSBpbmZvIGZvciAqLwogCisJLyogUGxhaW4gaW5kZXggc2NhbiB4 c19sYXN0aW5ibG9jayBvcHRpbWl6YXRpb24gKi8KKwlib29sCQl4c19sYXN0aW5ibG9jazsgLyog bGFzdCBUSUQgb24gdGhpcyBibG9jayBpbiBjdXJyZW50IGJhdGNoPyAqLworCiB9IEluZGV4RmV0 Y2hIZWFwRGF0YTsKIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYwppbmRleCAyNWIxOTFlYTEuLmMwZGQwOTdhYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9pbmRleHNjYW4uYwpAQCAtNzUsNiArNzUsOSBAQCBoZWFwYW1faW5kZXhfZmV0 Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogCUFzc2VydChoc2Nhbi0+eHNfdm1idWZmZXIgPT0gSW52 YWxpZEJ1ZmZlcik7CiAJaHNjYW4tPnhzX3ZtX2l0ZW1zID0gMTsKIAorCS8qIHhzX2xhc3RpbmJs b2NrIG9wdGltaXphdGlvbiBzdGF0ZSAqLworCUFzc2VydCghaHNjYW4tPnhzX2xhc3RpbmJsb2Nr KTsKKwogCXJldHVybiAmaHNjYW4tPnhzX2Jhc2U7CiB9CiAKQEAgLTIzMiw2ICsyMzUsMTQgQEAg aGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEg KnNjYW4sCiAJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVyJ3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0 IHRpbWUgKi8KIAkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlk KTsKIAorCQkvKgorCQkgKiBEcm9wIHRoZSB4c19ibGsgcGluIGluZGVwZW5kZW50bHkgaGVsZCBv biBieSBzbG90IChpZiBhbnkpIG5vdywKKwkJICogYmVmb3JlIGNhbGxpbmcgUmVsZWFzZUJ1ZmZl ci4gIFRoaXMgYXZvaWRzIGV4cGVuc2l2ZSBjYWxscyB0bworCQkgKiBHZXRQcml2YXRlUmVmQ291 bnRFbnRyeVNsb3cgY2F1c2VkIGJ5IEV4ZWNTdG9yZUJ1ZmZlckhlYXBUdXBsZQorCQkgKiBmYWls aW5nIHRvIGhpdCB0aGUgYmFja2VuZCdzIGNhY2hlIGZvciB0aGUgcmVsZWFzZSBvZiB0aGUgb2xk IHBpbi4KKwkJICovCisJCUV4ZWNDbGVhclR1cGxlKHNsb3QpOworCiAJCWlmIChCdWZmZXJJc1Zh bGlkKGhzY2FuLT54c19jYnVmKSkKIAkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwog CkBAIC0yNjgsNyArMjc5LDMzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKHN0cnVj dCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkqaGVhcF9jb250aW51ZSA9ICFJc01WQ0NM aWtlU25hcHNob3Qoc25hcHNob3QpOwogCiAJCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9u R2V0UmVsaWQoc2Nhbi0+cmVsKTsKLQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+ YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nhbi0+eHNfY2J1Zik7CisKKwkJLyoKKwkJICogSWYgdGhp cyBpcyB0aGUgbGFzdCBUSUQgb24gdGhlIGN1cnJlbnQgaGVhcCBibG9jayB3aXRoaW4gdGhlIGJh dGNoLAorCQkgKiB0cmFuc2ZlciBvdXIgYnVmZmVyIHBpbiB0byB0aGUgc2xvdCByYXRoZXIgdGhh biBoYXZpbmcgdGhlIHNsb3QKKwkJICogaW5jcmVtZW50IHRoZSBwaW4gY291bnQuICBUaGlzIHNh dmVzIGEgcGFpciBvZiBJbmNyQnVmZmVyUmVmQ291bnQKKwkJICogYW5kIFJlbGVhc2VCdWZmZXIg Y2FsbHMsIHNpbmNlIHRoZSBjYWxsZXIgd291bGQganVzdCByZWxlYXNlIGl0cworCQkgKiBwaW4g b24geHNfY2J1ZiB3aGVuIHN3aXRjaGluZyB0byB0aGUgbmV4dCBibG9jayBhbnl3YXkuCisJCSAq CisJCSAqIFdlIGNhbiBvbmx5IGRvIHRoaXMgd2hlbiBoZWFwX2NvbnRpbnVlIGlzIGZhbHNlLCBz aW5jZSBvdGhlcndpc2UKKwkJICogdGhlIGNhbGxlciB3aWxsIG5lZWQgeHNfY2J1ZiB0byByZW1h aW4gdmFsaWQgZm9yIHRoZSBuZXh0IGNhbGwuCisJCSAqLworCQlpZiAoaHNjYW4tPnhzX2xhc3Rp bmJsb2NrICYmICEqaGVhcF9jb250aW51ZSkKKwkJeworCQkJRXhlY1N0b3JlUGlubmVkQnVmZmVy SGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJCSAgIGhzY2Fu LT54c19jYnVmKTsKKwkJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKKwkJCWhzY2Fu LT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisKKwkJCS8qCisJCQkgKiBOb3RlOiB0aGUg cGluIG5vdyBvd25lZCBieSB0aGUgc2xvdCBpcyBleHBlY3RlZCB0byBiZSByZWxlYXNlZAorCQkJ ICogb24gdGhlIG5leHQgY2FsbCBoZXJlLCB2aWEgYW4gZXhwbGljaXQgRXhlY0NsZWFyVHVwbGUu ICBUaGlzCisJCQkgKiBhdm9pZHMgY2h1cm4gaW4gdGhlIGJhY2tlbmQncyBwcml2YXRlIHJlZmNv dW50IGNhY2hlLgorCQkJICovCisJCX0KKwkJZWxzZQorCQkJRXhlY1N0b3JlQnVmZmVySGVhcFR1 cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LAorCQkJCQkJCQkJIGhzY2FuLT54c19jYnVm KTsKIAl9CiAJZWxzZQogCXsKQEAgLTU4NCwxMCArNjIxLDQyIEBAIGhlYXBhbV9pbmRleF9yZXR1 cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhz Y2FuLAogCiAJaWYgKGFsbF92aXNpYmxlID09IE5VTEwpCiAJeworCQlpbnQJCQluZXh0SXRlbTsK KwkJYm9vbAkJaGFzTmV4dDsKKwogCQkvKgogCQkgKiBQbGFpbiBpbmRleCBzY2FuLgorCQkgKgor CQkgKiBEZXRlcm1pbmUgaWYgdGhlIG5leHQgaXRlbSBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVj dGlvbiBpcyBvbiBhCisJCSAqIGRpZmZlcmVudCBoZWFwIGJsb2NrLiAgV2hlbiBpdCBpcywgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwKKwkJICogY2FuIHRyYW5zZmVyIGl0cyBidWZmZXIg cGluIHRvIHRoZSBzbG90IGluc3RlYWQgb2YgaW5jcmVtZW50aW5nIHRoZQorCQkgKiBwaW4gY291 bnQsIHNhdmluZyBhIHBhaXIgb2YgSW5jckJ1ZmZlclJlZkNvdW50L1JlbGVhc2VCdWZmZXIgY2Fs bHMuCisJCSAqCisJCSAqIE5vdGU6IFdlIGNhbm5vdCBkbyB0aGlzIGZvciBpbmRleC1vbmx5IHNj YW5zIGJlY2F1c2UgYWxsLXZpc2libGUKKwkJICogaXRlbXMgYXJlIHNraXBwZWQgYnkgYm90aCB0 aGUgc2NhbiBhbmQgdGhlIHJlYWQgc3RyZWFtIGNhbGxiYWNrLgorCQkgKiBJdCBkb2Vzbid0IHNl ZW0gd29ydGggdGhlIHRyb3VibGUgb2YgcmVhc29uaW5nIGFib3V0IHRoZXNlIGlzc3VlcywKKwkJ ICogc2luY2UgdGhlIG9wdGltaXphdGlvbiBvbmx5IGhlbHBzIHdoZW4gaGVhcCBmZXRjaGVzIGFy ZSByZXF1aXJlZC4KKwkJICoKKwkJICogTm90ZTogV2UgZGVsaWJlcmF0ZWx5IGRvbid0IGNvbnNp ZGVyIHRoZSBiYXRjaCBhZnRlciBzY2FuQmF0Y2gsCisJCSAqIGJlY2F1c2UgZG9pbmcgc28gd291 bGQgYWRkIGNvbXBsZXhpdHkgZm9yIGxpdHRsZSBiZW5lZml0LiAgSXQncworCQkgKiBva2F5IGlm IHhzX2xhc3RpbmJsb2NrIGlzIHNwdXJpb3VzbHkgc2V0IHRvIGZhbHNlLgogCQkgKi8KIAkJQXNz ZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXJlY3Rpb24pKQorCQl7CisJCQluZXh0SXRlbSA9IHNjYW5Qb3MtPml0ZW0gKyAxOworCQkJaGFz TmV4dCA9IChuZXh0SXRlbSA8PSBzY2FuQmF0Y2gtPmxhc3RJdGVtKTsKKwkJfQorCQllbHNlCisJ CXsKKwkJCW5leHRJdGVtID0gc2NhblBvcy0+aXRlbSAtIDE7CisJCQloYXNOZXh0ID0gKG5leHRJ dGVtID49IHNjYW5CYXRjaC0+Zmlyc3RJdGVtKTsKKwkJfQorCisJCWhzY2FuLT54c19sYXN0aW5i bG9jayA9IGhhc05leHQgJiYKKwkJCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJnNjYW5CYXRj aC0+aXRlbXNbbmV4dEl0ZW1dLnRhYmxlVGlkKSAhPQorCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051 bWJlcigmc2Nhbi0+eHNfaGVhcHRpZCk7CisKIAkJcmV0dXJuICZzY2FuLT54c19oZWFwdGlkOwog CX0KIApAQCAtNTk2LDcgKzY2NSw3IEBAIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQo SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuLAogCSAqCiAJICog QWxzbyBzZXQgeHNfaXR1cCwgd2hpY2ggaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdCBuZWVkcyB0 b28uCiAJICovCi0JQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJQXNzZXJ0KHNjYW4tPnhz X3dhbnRfaXR1cCAmJiAhaHNjYW4tPnhzX2xhc3RpbmJsb2NrKTsKIAlzY2FuLT54c19pdHVwID0g KEluZGV4VHVwbGUpIChzY2FuQmF0Y2gtPmN1cnJUdXBsZXMgKwogCQkJCQkJCQkgIHNjYW5CYXRj aC0+aXRlbXNbc2NhblBvcy0+aXRlbV0udHVwbGVPZmZzZXQpOwogCi0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0005-Add-interfaces-that-enable-index-prefetching.patch" Content-Disposition: attachment; filename="v18-0005-Add-interfaces-that-enable-index-prefetching.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37o14 RnJvbSA2MzU4NGJjMDdiY2RiNjA0NjIxMmM5MjA5ZDYzZjkyZmJhOTk4MDhhIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMTY6NDg6NDMgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwNS8xOV0g QWRkIGludGVyZmFjZXMgdGhhdCBlbmFibGUgaW5kZXggcHJlZmV0Y2hpbmcuCgpBZGQgYSBuZXcg YW1nZXRiYXRjaCBpbmRleCBBTSBpbnRlcmZhY2UgdGhhdCBhbGxvd3MgaW5kZXggYWNjZXNzIG1l dGhvZHMKdG8gaW1wbGVtZW50IHBsYWluL29yZGVyZWQgaW5kZXggc2NhbnMgdGhhdCByZXR1cm4g aW5kZXggZW50cmllcyBpbgpiYXRjaGVzIGNvbXByaXNpbmcgYWxsIG1hdGNoaW5nIGl0ZW1zIGZy b20gYW4gaW5kZXggcGFnZSwgcmF0aGVyIHRoYW4Kb25lIG1hdGNoIGF0IGEgdGltZS4KClRoaXMg ZXhwYW5kcyB0aGUgc2xvdC1iYXNlZCB0YWJsZSBBTSBpbnRlcmZhY2UgYWRkZWQgYnkgY29tbWl0 IEZJWE1FCmZyb20gdHdvIGNhbGxiYWNrcyAoZm9yIGFtZ2V0dHVwbGUgcGxhaW4gYW5kIGluZGV4 LW9ubHkgc2NhbnMpIHRvIGZvdXIsCmFkZGluZyBhbWdldGJhdGNoIHZhcmlhbnRzIGZvciBib3Ro IHNjYW4gdHlwZXMuICBUaGUgYW1nZXRiYXRjaAppbnRlcmZhY2UgaXMgdGlnaHRseSBjb3VwbGVk IHdpdGggdGhpcyBhcHByb2FjaCB0byBpbmRleCBzY2FuczogdGhlCnRhYmxlIEFNIGNhbiBhcHBs eSBrbm93bGVkZ2Ugb2Ygd2hpY2ggVElEcyB3aWxsIGJlIHJldHVybmVkIHRvIHRoZSBzY2FuCmlu IHRoZSBuZWFyIGZ1dHVyZSB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFByZWZldGNoaW5n IHdpbGwgYmUKYWRkZWQgYnkgYW4gdXBjb21pbmcgY29tbWl0LgoKV2l0aCBhbWdldGJhdGNoLCBh IHNjYW4tbGV2ZWwgcG9saWN5IGRldGVybWluZXMgd2hldGhlciBlYWNoIGJhdGNoJ3MKaW5kZXgg cGFnZSBidWZmZXIgcGluIGlzIGRyb3BwZWQgZWFnZXJseSBieSB0aGUgaW5kZXggQU0gKGZvciBw bGFpbgpzY2FucyB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHdoZXJlIHRoZSBzbmFwc2hvdCBpdHNl bGYgcHJldmVudHMgVElECnJlY3ljbGluZyBwcm9ibGVtcykgb3IgcmV0YWluZWQgYXMgYW4gaW50 ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQKcmVjeWNsaW5nIGJ5IFZBQ1VVTS4gIFRoZSBp bnRlcmxvY2sgaXMgcmV0YWluZWQgZm9yIG5vbi1NVkNDIHNjYW5zIGFuZApmb3IgaW5kZXgtb25s eSBzY2FucywgYW5kIGlzIGRyb3BwZWQgYnkgdGhlIHRhYmxlIEFNIHZpYSB0aGUgbmV3CmFtdW5n dWFyZGJhdGNoIGNhbGxiYWNrIHdoZW4gaXQgaXMgc2FmZSB0byBkbyBzby4gKEFjdHVhbGx5LCBp bmRleCBBTXMKYXJlIHVzdWFsbHkgYWJsZSB0byBkcm9wIHRoZSBwaW4gYXQgdGhlIHNhbWUgdGlt ZSB0aGF0IHRoZXkgcmVsZWFzZSB0aGUKbG9jay4gIEluIHByYWN0aWNlLCB0aGUgYW11bmd1YXJk YmF0Y2ggY2FsbGJhY2sgaXMgb25seSByZWFsbHkgbmVlZGVkCmR1cmluZyBpbmRleC1vbmx5IHNj YW5zLCB3aGVyZSBkcm9wcGluZyB0aGUgcGluIGludGVybG9jayBtaWdodCBuZWVkIHRvCmJlIGRl bGF5ZWQgZXZlciBzbyBzbGlnaHRseSwgYXMgZXhwbGFpbmVkIGJlbG93LikKClRoaXMgZXh0ZW5k cyB0aGUgZHJvcFBpbiBtZWNoYW5pc20gYWRkZWQgdG8gbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3 ZiwKYW5kIGdlbmVyYWxpemVzIGl0IHRvIHdvcmsgd2l0aCBhbGwgaW5kZXggQU1zIHRoYXQgc3Vw cG9ydCB0aGUgbmV3CmFtZ2V0YmF0Y2ggaW50ZXJmYWNlIChMUF9ERUFEIG1hcmtpbmcgb2YgaW5k ZXggZW50cmllcyBtdXN0IGJlIHBlcmZvcm1lZApieSBpbXBsZW1lbnRpbmcgdGhlIG5ldyBhbWtp bGxpdGVtc2JhdGNoIGNhbGxiYWNrLCB3aGljaCBoYXMgYQpkb2N1bWVudGVkIGNvbnRyYWN0IGRl c2NyaWJpbmcgaG93IGluZGV4IEFNcyBtdXN0IHJlYXNvbiBhYm91dApjb25jdXJyZW50IFRJRCBy ZWN5Y2xpbmcpLiAgU2NhbnMgY2FuIGFsd2F5cyBzYWZlbHkgZHJvcCBpbmRleCBwYWdlIHBpbnMK ZWFnZXJseSwgcHJvdmlkZWQgdGhlIHNjYW4gdXNlcyBhbiBNVkNDIHNuYXBzaG90ICh1bmxpa2Ug dGhlIG5idHJlZQpkcm9wUGluIG9wdGltaXphdGlvbiwgd2hpY2ggaGFzIG5vIHBvc3NpYmxlIHdh eSBvZiBkb2luZyB0aGlzIHNhZmVseQpkdXJpbmcgaW5kZXgtb25seSBzY2FucywgYW5kIG9ubHkg Z2FpbmVkIHRoZSBhYmlsaXR5IHRvIGRvIGl0IHdpdGggcGxhaW4Kc2NhbnMgb2YgdW5sb2dnZWQg cmVsYXRpb25zIGluIHJlY2VudCBjb21taXQgOGE4NzkxMTkpLgoKVGhlIG9sZCBhbW1hcmtwb3Mg YW5kIGFtcmVzdHJwb3MgaW5kZXggQU0gY2FsbGJhY2tzIGFyZSByZW1vdmVkLiAgV2l0aAphbWdl dGJhdGNoLCBtYXJrL3Jlc3RvcmUgb2Ygc2NhbiBwb3NpdGlvbnMgaXMgbWFuYWdlZCBieSBjb3Jl IGJhdGNoCnV0aWxpdGllcywgd2l0aCBjb29wZXJhdGlvbiBmcm9tIHRoZSB0YWJsZSBBTSwgcmF0 aGVyIHRoYW4gYmVpbmcKZGVsZWdhdGVkIHRvIHRoZSBpbmRleCBBTS4gIEFsbCBhbWdldGJhdGNo LWNhcGFibGUgaW5kZXggQU1zIGluaGVyZW50bHkKc3VwcG9ydCBtYXJrL3Jlc3RvcmUgd2l0aG91 dCBuZWVkaW5nIHRvIGltcGxlbWVudCBpdCB0aGVtc2VsdmVzLgoKQW4gdXBjb21pbmcgY29tbWl0 IHRoYXQgd2lsbCBhZGQgaW5kZXggcHJlZmV0Y2hpbmcgd2lsbCB1c2UgYSByZWFkCnN0cmVhbSB0 byByZWFkIGhlYXAgcGFnZXMgZHVyaW5nIGluZGV4IHNjYW5zLiAgUmVhZCBzdHJlYW0gaXMgY2Fy ZWZ1bCB0bwpsaW1pdCBob3cgbWFueSB0aGluZ3MgaXQgcGlucywgbGVzdCB3ZSBydW4gaW50byBw cm9ibGVtcyBkdWUgdG8gaGF2aW5nCnRvbyBtYW55IGJ1ZmZlcnMgcGlubmVkLiAgU2ltcGx5IG5l dmVyIGhvbGRpbmcgb24gdG8gaW5kZXggcGFnZSBidWZmZXIKcGlucyBncmVhdGx5IHNpbXBsaWZp ZXMgcmVzb3VyY2UgbWFuYWdlbWVudCBmb3IgaW5kZXggcHJlZmV0Y2hpbmc7CnRoZXJlJ3Mgbm8g cmlzayBvZiB1bmludGVuZGVkIGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZSByZWFkIHN0cmVhbSBh bmQKaW5kZXggQU0uICBUaGUgb25seSBkb3duc2lkZSBpcyB0aGF0IHdlIGNhbm5vdCBzdXBwb3J0 IHByZWZldGNoaW5nCmR1cmluZyBzY2FucyB0aGF0IHVzZSBhIG5vbi1NVkNDIHNuYXBzaG90LCB3 aGljaCBzZWVtcyBxdWl0ZSBhY2NlcHRhYmxlLgoKSW4gcHJhY3RpY2UsIGhlYXBhbSBkb2Vzbid0 IGRyb3AgZWFjaCBiYXRjaCdzIGluZGV4IHBhZ2UgYnVmZmVyIHBpbiBhdAp0aGUgZWFybGllc3Qg b3Bwb3J0dW5pdHkgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMuICBUaGlzIHdhcyBkZWVtZWQKbmVj ZXNzYXJ5IHRvIGF2b2lkIHJlZ3Jlc3NpbmcgaW5kZXgtb25seSBzY2FucyB3aXRoIGEgTElNSVQs IGluCnBhcnRpY3VsYXIgd2l0aCBuZXN0bG9vcCBhbnRpLWpvaW5zIGFuZCBuZXN0bG9vcCBzZW1p LWpvaW5zOyBlYWdlcmx5CmxvYWRpbmcgYWxsIHRoZSB2aXNpYmlsaXR5IGluZm9ybWF0aW9uIHVw IGZyb250IHJlZ3Jlc3NlZCBzdWNoIHF1ZXJpZXMuClRoZSBuZXcgYW1nZXRiYXRjaCBpbnRlcmZh Y2UgZ2l2ZXMgdGFibGUgQU1zIHRoZSBhdXRob3JpdHkgdG8gZGVjaWRlCndoZW4gYW5kIHdoZXJl IHRvIGRyb3AgaW5kZXggcGFnZSBwaW5zLCBzbyB0aGlzIGNhbiBiZSBjb25zaWRlcmVkIGEKaGVh cGFtIGltcGxlbWVudGF0aW9uIGRldGFpbCAoaW5kZXggQU1zIGRvbid0IG5lZWQgdG8ga25vdyBh Ym91dCBpdCkuClRoaXMgc2NoZW1lIHN0aWxsIGFsbG93cyBpbmRleCBwcmVmZXRjaGluZyB0byBj b25zaXN0ZW50bHkgaG9sZCBubyBtb3JlCnRoYW4gb25lIGJhdGNoIGluZGV4IHBhZ2UgcGluIGF0 IGEgdGltZSwgZXZlbiB3aGVuIGFuIGluZGV4LW9ubHkgc2NhbgoodGhhdCBtdXN0IHBlcmZvcm0g c29tZSBoZWFwIGZldGNoZXMpIGhvbGRzIG9wZW4gc2V2ZXJhbCBpbmRleCBiYXRjaGVzCmF0IG9u Y2UgaW4gb3JkZXIgdG8gbWFpbnRhaW4gYW4gYWRlcXVhdGUgcHJlZmV0Y2ggZGlzdGFuY2UuCgpJ bmRleCBhY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgcGxhaW4gaW5kZXggc2NhbnMgbXVzdCBu b3cgaW1wbGVtZW50CmVpdGhlciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2Ugb3IgdGhlIGFtZ2V0 dHVwbGUgaW50ZXJmYWNlIChub3QgYm90aCkuClRoZSBhbWdldHR1cGxlIGludGVyZmFjZSBpcyBz dGlsbCB1c2VkIGJ5IHRoZSBHaVNUIGFuZCBTUC1HaVNUIGluZGV4CkFNcywgYm90aCBvZiB3aGlj aCBzaGFyZSBhIHNldCBvZiBwcm9ibGVtcyB0aGF0IG1ha2UgaXQgdW5jbGVhciBob3cKdG8gZ28g YWJvdXQgYWRkaW5nIHN1cHBvcnQgZm9yIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZS4KCkJvdGgg QU1zIHJlY29uc3RydWN0IGluZGV4IGRhdGEgYXMgSGVhcFR1cGxlcyB2aWEgaGVhcF9mb3JtX3R1 cGxlIGR1cmluZwppbmRleC1vbmx5IHNjYW5zLCBwZXJmb3JtaW5nIHJldGFpbCBwYWxsb2MgYWxs b2NhdGlvbnMgdGhhdCBhcmUKaW5jb21wYXRpYmxlIHdpdGggdGhlIGZsYXQsIGZpeGVkLXNpemUs IHJlY3ljbGFibGUgcGVyLWJhdGNoIG1lbW9yeQptb2RlbCB0aGF0IGFtZ2V0YmF0Y2gncyBjdXJy VHVwbGVzIHdvcmtzcGFjZSByZXF1aXJlcy4gIE1vcmVvdmVyLCBib3RoCkFNcyBoYXZlIGtub3du IGJ1Z3MgaW52b2x2aW5nIGJ1ZmZlciBwaW4gbWFuYWdlbWVudCBkdXJpbmcgaW5kZXgtb25seQpz Y2FuczogdGhleSByZWxlYXNlIGluZGV4IGxlYWYgcGFnZSBwaW5zIGltbWVkaWF0ZWx5LCByYXRo ZXIgdGhhbgpob2xkaW5nIHRoZW0gYXMgYW4gaW50ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBU SUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSwKY3JlYXRpbmcgYSByYWNlIGNvbmRpdGlvbiBpbiB3aGlj aCBWQUNVVU0gY2FuIHJlbW92ZSBhIGhlYXAgdHVwbGUgYW5kCnRoZW4gbWFyayBpdHMgcGFnZSBh bGwtdmlzaWJsZSB3aGlsZSB0aGUgaW5kZXgtb25seSBzY2FuIHN0aWxsIGhvbGRzIGEKcmVmZXJl bmNlIHRvIHRoZSBub3ctcmVjeWNsZWQgVElEIFsxXS4gIFRoZXNlIGluZGV4IEFNcyBjYW5ub3Qg YWRvcHQKYW1nZXRiYXRjaCB3aXRob3V0IGZpcnN0IGZpeGluZyB0aGUgcGluLWhhbmRsaW5nIGRl ZmljaWVuY3kgdGhhdCB0aGV5CmFscmVhZHkgaGF2ZSB1bmRlciBhbWdldHR1cGxlIChpdCdzIG5v dCBjbGVhciBob3cgdG8gZml4IHRoZSBwcm9ibGVtCndpdGhpbiB0aGUgY29uZmluZXMgb2YgdGhl IGN1cnJlbnQgYW1nZXR0dXBsZSBkZXNpZ24sIGxldCBhbG9uZSBpbiBhIHdheQp0aGF0J3MgY29t cGF0aWJsZSB3aXRoIGFtZ2V0YmF0Y2gpLgoKWzFdIGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1X eiUzRGpqaU5MOUZDaDhDMUwtR1VIMTVmNFdGVFd1YjJ4JTJCX051Y25nY0REY0hLdyU0MG1haWwu Z21haWwuY29tCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6 IFBldGVyIEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQg PGFuZHJlc0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11 bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1i MDJmLTA1YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBo dHRwczovL3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0 MHZvbmRyYS5tZQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oICAgICAgICAgICAgICAg ICAgICB8ICAyNyArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmggICAgICAgICAgICAgICAg ICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICAg ICB8ICAzOSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaCAgICAgICAgICAgICAg IHwgMTY1ICsrKysKIHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAg ICB8IDE4NCArKy0tLQogc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCAgICAgICAgICAgICAg ICAgIHwgMzQxICsrKysrKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAg ICAgICAgICAgfCAgNDIgKy0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAg ICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jICAgICAgICAg ICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jICAgICAgICAg ICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jICAgICAgICAg ICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lzdC5jICAgICAgICAgICAg ICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMgICAgICAgICAgICAg ICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICAg ICB8ICAgMyArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgICAg fCA0NTEgKysrKysrKysrKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZSAgICAg ICAgICAgICB8ICAgMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMgICAgICAg ICAgICAgIHwgICA1ICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAg ICAgICB8ICAgNSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jICAgICAgICAg ICAgfCAgNTYgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMgICAgICAg ICB8IDc0OCArKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNv bi5idWlsZCAgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURN RSAgICAgICAgICAgICAgfCAgNzQgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFn ZS5jICAgICAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFk cGFnZS5jICAgICAgIHwgMjA3ICsrKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl ZS5jICAgICAgICAgICAgfCA0NjkgKysrKystLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMgICAgICAgICB8IDU1OSArKysrKystLS0tLS0tCiBzcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMgICAgICAgICAgfCAyNDUgLS0tLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHhsb2cuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9zcGdpc3Qvc3BndXRpbHMuYyAgICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv Y29tbWFuZHMvaW5kZXhjbWRzLmMgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9l eGVjdXRvci9leGVjQW1pLmMgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5kL2V4 ZWN1dG9yL25vZGVNZXJnZWpvaW4uYyAgICAgICAgICB8ICAgNCArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvaW5keHBhdGguYyAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL3JlcGxp Y2F0aW9uL2xvZ2ljYWwvcmVsYXRpb24uYyAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQvdXRpbHMv YWR0L2FtdXRpbHMuYyAgICAgICAgICAgICAgIHwgICA4ICstCiBjb250cmliL2FtY2hlY2svdmVy aWZ5X25idHJlZS5jICAgICAgICAgICAgICAgfCAgIDIgKy0KIGNvbnRyaWIvYmxvb20vYmx1dGls cy5jICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZG9jL3NyYy9zZ21sL2luZGV4YW0u c2dtbCAgICAgICAgICAgICAgICAgICAgIHwgNTIwICsrKysrKysrKystLQogZG9jL3NyYy9zZ21s L3JlZi9jcmVhdGVfdGFibGUuc2dtbCAgICAgICAgICAgIHwgIDEzICstCiAuLi4vbW9kdWxlcy9k dW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jICAgfCAgIDYgKy0KIHNyYy90b29scy9wZ2lu ZGVudC90eXBlZGVmcy5saXN0ICAgICAgICAgICAgICB8ICAxMiArLQogNDIgZmlsZXMgY2hhbmdl ZCwgMjk5MyBpbnNlcnRpb25zKCspLCAxMjkxIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAw NjQ0IHNyYy9pbmNsdWRlL2FjY2Vzcy9pbmRleGJhdGNoLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jCgpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL2FtYXBpLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAppbmRleCBl Y2ZiZDAxN2QuLjliZDMxNDFmYyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBp LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2FtYXBpLmgKQEAgLTE5OCw2ICsxOTgsMTkgQEAg dHlwZWRlZiB2b2lkICgqYW1yZXNjYW5fZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiB0 eXBlZGVmIGJvb2wgKCphbWdldHR1cGxlX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAog CQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKIAorLyogbmV4dCBiYXRjaCBvZiB2 YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgSW5kZXhTY2FuQmF0Y2ggKCphbWdldGJhdGNoX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkgICBJbmRleFNjYW5CYXRjaCBw cmlvcmJhdGNoLAorCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7CisKKy8q IG1hcmsgZGVhZCBpdGVtcyBpbiBpbmRleCBwYWdlICovCit0eXBlZGVmIHZvaWQgKCphbWtpbGxp dGVtc2JhdGNoX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIElu ZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyogZHJvcCBUSUQgcmVjeWNsaW5nIGludGVybG9jayBo ZWxkIHRvIHByZXZlbnQgY29uY3VycmVudCBWQUNVVU0gcmVjeWNsaW5nICovCit0eXBlZGVmIHZv aWQgKCphbXVuZ3VhcmRiYXRjaF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJ CQkJCQkgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworCiAvKiBmZXRjaCBhbGwgdmFsaWQgdHVwbGVz ICovCiB0eXBlZGVmIGludDY0ICgqYW1nZXRiaXRtYXBfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNj IHNjYW4sCiAJCQkJCQkJCQkgICBUSURCaXRtYXAgKnRibSk7CkBAIC0yMDUsMTEgKzIxOCw5IEBA IHR5cGVkZWYgaW50NjQgKCphbWdldGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nh biwKIC8qIGVuZCBpbmRleCBzY2FuICovCiB0eXBlZGVmIHZvaWQgKCphbWVuZHNjYW5fZnVuY3Rp b24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwogCi0vKiBtYXJrIGN1cnJlbnQgc2NhbiBwb3NpdGlv biAqLwotdHlwZWRlZiB2b2lkICgqYW1tYXJrcG9zX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKLQotLyogcmVzdG9yZSBtYXJrZWQgc2NhbiBwb3NpdGlvbiAqLwotdHlwZWRlZiB2b2lk ICgqYW1yZXN0cnBvc19mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7CisvKiBpbnZhbGlk YXRlIGluZGV4IEFNIHN0YXRlIHRoYXQgaW5kZXBlbmRlbnRseSB0cmFja3Mgc2NhbidzIHBvc2l0 aW9uICovCit0eXBlZGVmIHZvaWQgKCphbXBvc3Jlc2V0X2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVz YyBzY2FuLAorCQkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKIAogLyoKICAqIENhbGxi YWNrIGZ1bmN0aW9uIHNpZ25hdHVyZXMgLSBmb3IgcGFyYWxsZWwgaW5kZXggc2NhbnMuCkBAIC0z MDksMTAgKzMyMCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFtUm91dGluZQogCWFtYmVnaW5z Y2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogCWFtcmVzY2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwog CWFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBsZTsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWdl dGJhdGNoX2Z1bmN0aW9uIGFtZ2V0YmF0Y2g7IC8qIGNhbiBiZSBOVUxMICovCisJYW1raWxsaXRl bXNiYXRjaF9mdW5jdGlvbiBhbWtpbGxpdGVtc2JhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLworCWFt dW5ndWFyZGJhdGNoX2Z1bmN0aW9uIGFtdW5ndWFyZGJhdGNoOyAvKiBjYW4gYmUgTlVMTCAqLwog CWFtZ2V0Yml0bWFwX2Z1bmN0aW9uIGFtZ2V0Yml0bWFwOwkvKiBjYW4gYmUgTlVMTCAqLwogCWFt ZW5kc2Nhbl9mdW5jdGlvbiBhbWVuZHNjYW47Ci0JYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3Bv czsJLyogY2FuIGJlIE5VTEwgKi8KLQlhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7IC8q IGNhbiBiZSBOVUxMICovCisJYW1wb3NyZXNldF9mdW5jdGlvbiBhbXBvc3Jlc2V0OyAvKiBjYW4g YmUgTlVMTCAqLwogCiAJLyogaW50ZXJmYWNlIGZ1bmN0aW9ucyB0byBzdXBwb3J0IHBhcmFsbGVs IGluZGV4IHNjYW5zICovCiAJYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbiBhbWVzdGlt YXRlcGFyYWxsZWxzY2FuOyAvKiBjYW4gYmUgTlVMTCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1 ZGUvYWNjZXNzL2dlbmFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAppbmRleCBhN2Q3 ODkzNWMuLmRlYzAyY2U5MCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2dlbmFtLmgKQEAgLTk2LDYgKzk2LDcgQEAgdHlwZWRl ZiBib29sICgqSW5kZXhCdWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2 b2lkICpzdGF0ZSk7CiAKIC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5o ICovCiB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5 cGVkZWYgc3RydWN0IEluZGV4U2NhbkJhdGNoRGF0YSAqSW5kZXhTY2FuQmF0Y2g7CiB0eXBlZGVm IHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQ YXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CmRpZmYgLS1n aXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVh cGFtLmgKaW5kZXggYWRkYjg4M2NlLi41OTk5YWY5ODIgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRl L2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAgLTEz MCwxMCArMTMwLDM2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUJ1ZmZl cgkJeHNfY2J1ZjsKIAlCbG9ja051bWJlciB4c19ibGs7CiAKLQkvKiBDdXJyZW50IGhlYXAgYmxv Y2sncyBjb3JyZXNwb25kaW5nIHBhZ2UgaW4gdGhlIHZpc2liaWxpdHkgbWFwICovCi0JQnVmZmVy CQl4c192bWJ1ZmZlcjsKKwkvKiBGb3IgdmlzaWJpbGl0eSBtYXAgY2hlY2tzIChpbmRleC1vbmx5 IHNjYW5zIGFuZCBvbi1hY2Nlc3MgcHJ1bmluZykgKi8KKwlCdWZmZXIJCXhzX3ZtYnVmZmVyOwkv KiB2aXNpYmlsaXR5IG1hcCBidWZmZXIgKi8KKwlpbnQJCQl4c192bV9pdGVtczsJLyogIyBpdGVt cyB0byByZXNvbHZlIHZpc2liaWxpdHkgaW5mbyBmb3IgKi8KKwogfSBJbmRleEZldGNoSGVhcERh dGE7CiAKKy8qCisgKiBQZXItYmF0Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBoZWFwIHRhYmxlIEFN LgorICoKKyAqIFN0b3JlZCBhdCBhIG5lZ2F0aXZlIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5C YXRjaCBwb2ludGVyLCBpbiB0aGUKKyAqIHRhYmxlIEFNIG9wYXF1ZSBhcmVhIG9mIGVhY2ggYmF0 Y2ggYWxsb2NhdGlvbi4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgSGVhcEJhdGNoRGF0YQoreworCXVp bnQ4CSAgICp2aXNJbmZvOwkJLyogcGVyLWl0ZW0gdmlzaWJpbGl0eSBmbGFncywgb3IgTlVMTCAq LworfSBIZWFwQmF0Y2hEYXRhOworCisvKgorICogUGVyLWl0ZW0gdmlzaWJpbGl0eSBmbGFncyBz dG9yZWQgaW4gSGVhcEJhdGNoRGF0YS52aXNJbmZvIGFycmF5CisgKi8KKyNkZWZpbmUgSEVBUF9C QVRDSF9WSVNfQ0hFQ0tFRAkJMHgwMQkvKiBjaGVja2VkIGl0ZW0gaW4gVk0/ICovCisjZGVmaW5l IEhFQVBfQkFUQ0hfVklTX0FMTF9WSVNJQkxFCTB4MDIJLyogYmxvY2sgaXMga25vd24gYWxsLXZp c2libGU/ICovCisKKy8qIEFjY2VzcyB0aGUgaGVhcC1wcml2YXRlIHBlci1iYXRjaCBkYXRhIGZy b20gYW4gSW5kZXhTY2FuQmF0Y2ggcG9pbnRlciAqLworc3RhdGljIGlubGluZSBIZWFwQmF0Y2hE YXRhICoKK2hlYXBfYmF0Y2hfZGF0YShJbmRleFNjYW5CYXRjaCBiYXRjaCwgSW5kZXhTY2FuRGVz YyBzY2FuKQoreworCXJldHVybiAoSGVhcEJhdGNoRGF0YSAqKSAoKGNoYXIgKikgYmF0Y2ggLSBz Y2FuLT5iYXRjaF90YWJsZV9vZmZzZXQpOworfQorCiAvKiBSZXN1bHQgY29kZXMgZm9yIEhlYXBU dXBsZVNhdGlzZmllc1ZhY3V1bSAqLwogdHlwZWRlZiBlbnVtCiB7CkBAIC00MzcsNiArNDYzLDE1 IEBAIGV4dGVybiBUcmFuc2FjdGlvbklkIGhlYXBfaW5kZXhfZGVsZXRlX3R1cGxlcyhSZWxhdGlv biByZWwsCiBleHRlcm4gSW5kZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2Jl Z2luKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CiBleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0 Y2hfZW5kKEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pOworZXh0ZXJuIHZvaWQgaGVhcGFtX2lu ZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgSW5k ZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkJICBib29sIG5ld19hbGxvYyk7CitleHRlcm4g Ym9vbCBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBib29sIGhlYXBhbV9p bmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0 dHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCQkJCQkgICBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAq c2xvdCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5oIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2luZGV4YmF0Y2guaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAuLjM3NTRmNzAyZQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9pbmRleGJhdGNoLmgKQEAgLTAsMCArMSwxNjUgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoK KyAqIGluZGV4YmF0Y2guaAorICoJICBCYXRjaC1iYXNlZCBpbmRleCBzY2FuIGluZnJhc3RydWN0 dXJlIGZvciB0aGUgYW1nZXRiYXRjaCBpbnRlcmZhY2UuCisgKgorICoKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91 cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJz aXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3MvaW5kZXhiYXRjaC5o CisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgSU5ERVhCQVRDSF9ICisjZGVm aW5lIElOREVYQkFUQ0hfSAorCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAi YWNjZXNzL2dlbmFtLmgiCisjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKKyNpbmNsdWRlICJz dG9yYWdlL2J1Zi5oIgorI2luY2x1ZGUgInV0aWxzL3JlbC5oIgorCisvKgorICogYW1nZXRiYXRj aCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYworICovCitleHRlcm4gdm9pZCBpbmRleF9i YXRjaHNjYW5faW5pdChJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0 Y2hzY2FuX3Jlc2V0KEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRj aHNjYW5fZW5kKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaHNj YW5fbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4X2JhdGNo c2Nhbl9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworCisvKgorICogYW1nZXRiYXRj aCB1dGlsaXRpZXMgY2FsbGVkIGJ5IHRhYmxlIEFNcworICovCitleHRlcm4gdm9pZCB0YWJsZWFt X3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCB0 YWJsZWFtX3V0aWxfa2lsbF9zY2FucG9zaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJu IHZvaWQgdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCk7CitleHRlcm4gdm9pZCB0YWJsZWFtX3V0aWxfdW5ndWFyZF9iYXRjaChJ bmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKKworLyoKKyAqIEZldGNo IHRoZSBuZXh0IGJhdGNoIG9mIG1hdGNoaW5nIGl0ZW1zIGZvciB0aGUgc2NhbiAob3IgdGhlIGZp cnN0KS4KKyAqCisgKiBDYWxsZWQgd2hlbiBjYWxsZXIncyBjdXJyZW50IGJhdGNoIChwYXNzZWQg dG8gdXMgYXMgcHJpb3JCYXRjaCkgaGFzIG5vIG1vcmUKKyAqIG1hdGNoaW5nIGl0ZW1zIGluIHRo ZSBnaXZlbiBzY2FuIGRpcmVjdGlvbi4gIENhbGxlciBwYXNzZXMgYSBOVUxMCisgKiBwcmlvckJh dGNoIG9uIHRoZSBmaXJzdCBjYWxsIGhlcmUgZm9yIHRoZSBzY2FuLgorICoKKyAqIFJldHVybnMg dGhlIG5leHQgYmF0Y2ggdG8gYmUgcHJvY2Vzc2VkIGJ5IGNhbGxlciBpbiB0aGUgZ2l2ZW4gc2Nh bgorICogZGlyZWN0aW9uLCBvciBOVUxMIHdoZW4gdGhlcmUgYXJlIG5vIG1vcmUgbWF0Y2hlcyBp biB0aGF0IGRpcmVjdGlvbi4KKyAqCisgKiBUaGlzIGlzIHdoZXJlIGJhdGNoZXMgYXJlIGFwcGVu ZGVkIHRvIHRoZSBzY2FuJ3MgcmluZyBidWZmZXIuICBXZSBkb24ndAorICogZnJlZSBhbnkgYmF0 Y2hlcyBoZXJlLCB0aG91Z2g7IHRoYXQgaXMgbGVmdCB1cCB0byB0aGUgY2FsbGVyLiAgVGhlIGNh bGxlcgorICogaXMgYWxzbyByZXNwb25zaWJsZSBmb3IgYWR2YW5jaW5nIHRoZWlyIHBvc2l0aW9u LgorICovCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgSW5kZXhTY2FuQmF0Y2gK K3RhYmxlYW1fdXRpbF9mZXRjaF9uZXh0X2JhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJICBJbmRleFNjYW5CYXRjaCBwcmlvckJhdGNoLCBC YXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOwor CUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmIFBHX1VTRURfRk9SX0FTU0VSVFNfT05MWSA9 ICZzY2FuLT5iYXRjaHJpbmdidWY7CisKKwlpZiAoIXByaW9yQmF0Y2gpCisJeworCQkvKiBGaXJz dCBjYWxsIGZvciB0aGUgc2NhbiAqLworCQlBc3NlcnQocG9zID09ICZiYXRjaHJpbmdidWYtPnNj YW5Qb3MpOworCX0KKwllbHNlIGlmICh1bmxpa2VseShwcmlvckJhdGNoLT5kaXIgIT0gZGlyZWN0 aW9uKSkKKwl7CisJCS8qCisJCSAqIFdlIGRldGVjdGVkIGEgY2hhbmdlIGluIHNjYW4gZGlyZWN0 aW9uIGFjcm9zcyBiYXRjaGVzLiAgUHJlcGFyZQorCQkgKiBzY2FuJ3MgYmF0Y2hyaW5nYnVmIHN0 YXRlIGZvciB1cyB0byBnZXQgdGhlIG5leHQgYmF0Y2ggZm9yIHRoZQorCQkgKiBvcHBvc2l0ZSBz Y2FuIGRpcmVjdGlvbiB0byB0aGUgb25lIHVzZWQgd2hlbiBwcmlvckJhdGNoIHdhcworCQkgKiBy ZXR1cm5lZCBieSBhbWdldGJhdGNoLgorCQkgKi8KKwkJdGFibGVhbV91dGlsX2JhdGNoX2RpcmNo YW5nZShzY2FuKTsKKworCQkvKiBwcmlvckJhdGNoIGlzIG5vdyBiYXRjaHJpbmdidWYncyBvbmx5 IGJhdGNoICovCisJCUFzc2VydChwb3MtPmJhdGNoID09IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNo KTsKKwkJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gMSk7CisJfQorCWVs c2UgaWYgKGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVkKHNjYW4sIHBvcy0+YmF0Y2ggKyAxKSkKKwl7 CisJCS8qIE5leHQgYmF0Y2ggYWxyZWFkeSBsb2FkZWQgZm9yIHVzICovCisJCWJhdGNoID0gaW5k ZXhfc2Nhbl9iYXRjaChzY2FuLCBwb3MtPmJhdGNoICsgMSk7CisKKwkJQXNzZXJ0KHByaW9yQmF0 Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24p OworCQlyZXR1cm4gYmF0Y2g7CisJfQorCisJLyoKKwkgKiBBc3NlcnQgcHJlY29uZGl0aW9ucyBm b3IgY2FsbGluZyBhbWdldGJhdGNoLgorCSAqCisJICogcHJpb3JCYXRjaCBoYWQgYmV0dGVyIGJl IGZvciB0aGUgbGFzdCB2YWxpZCBiYXRjaCBjdXJyZW50bHkgaW4gdGhlIHJpbmcKKwkgKiBidWZm ZXIgKGJhdGNoZXMgbXVzdCBzdGF5IGluIHNjYW4gb3JkZXIpLiAgSWYgaXQgaXNuJ3QgdGhlbiB3 ZSBzaG91bGQKKwkgKiBoYXZlIGFscmVhZHkgcmV0dXJuZWQgc29tZSBleGlzdGluZyBsb2FkZWQg YmF0Y2ggZWFybGllci4KKwkgKi8KKwlBc3NlcnQoIWluZGV4X3NjYW5fYmF0Y2hfZnVsbChzY2Fu KSk7CisJQXNzZXJ0KCFwcmlvckJhdGNoIHx8CisJCSAgIChpbmRleF9zY2FuX2JhdGNoX2NvdW50 KHNjYW4pID4gMCAmJiBwcmlvckJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uICYmCisJCQlpbmRleF9z Y2FuX2JhdGNoKHNjYW4sIGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMSkgPT0gcHJpb3JCYXRj aCkpOworCisJLyoKKwkgKiBCZWZvcmUgd2UgY2FsbCBhbWdldGJhdGNoIGFnYWluLCBjaGVjayBp ZiBwcmlvckJhdGNoIGlzIGFscmVhZHkga25vd24KKwkgKiB0byBiZSB0aGUgbGFzdCBiYXRjaCB3 aXRoIG1hdGNoaW5nIGl0ZW1zIGluIHRoaXMgc2NhbiBkaXJlY3Rpb24KKwkgKi8KKwlpZiAocHJp b3JCYXRjaCAmJgorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pID8KKwkJIHBy aW9yQmF0Y2gtPmtub3duRW5kRm9yd2FyZCA6CisJCSBwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3 YXJkKSkKKwkJcmV0dXJuIE5VTEw7CisKKwliYXRjaCA9IHNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWdldGJhdGNoKHNjYW4sIHByaW9yQmF0Y2gsCisJCQkJCQkJCQkJCQkJICBkaXJl Y3Rpb24pOworCWlmIChiYXRjaCkKKwl7CisJCS8qIFdlIGdvdCB0aGUgYmF0Y2ggZnJvbSB0aGUg aW5kZXggQU0gKi8KKwkJQXNzZXJ0KGJhdGNoLT5kaXIgPT0gZGlyZWN0aW9uKTsKKworCQkvKiBB cHBlbmQgYmF0Y2ggdG8gdGhlIGVuZCBvZiByaW5nIGJ1ZmZlci93cml0ZSBpdCB0byBidWZmZXIg aW5kZXggKi8KKwkJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgYmF0Y2gpOworCX0KKwll bHNlCisJeworCQkvKiBhbWdldGJhdGNoIHJldHVybmVkIE5VTEwgKi8KKwkJaWYgKHByaW9yQmF0 Y2gpCisJCXsKKwkJCS8qCisJCQkgKiBUaGVyZSBhcmUgbm8gZnVydGhlciBtYXRjaGVzIHRvIGJl IGZvdW5kIGluIHRoZSBjdXJyZW50IHNjYW4KKwkJCSAqIGRpcmVjdGlvbiwgZm9sbG93aW5nIHBy aW9yQmF0Y2guICBSZW1lbWJlciB0aGF0IHByaW9yQmF0Y2ggaXMKKwkJCSAqIHRoZSBsYXN0IGJh dGNoIHdpdGggbWF0Y2hpbmcgaXRlbXMuCisJCQkgKi8KKwkJCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcmVjdGlvbikpCisJCQkJcHJpb3JCYXRjaC0+a25vd25FbmRGb3J3YXJkID0gdHJ1 ZTsKKwkJCWVsc2UKKwkJCQlwcmlvckJhdGNoLT5rbm93bkVuZEJhY2t3YXJkID0gdHJ1ZTsKKwkJ fQorCX0KKworCS8qIHhzX2hpdHVwIGlzbid0IGN1cnJlbnRseSBzdXBwb3J0ZWQgYnkgYW1nZXRi YXRjaCBzY2FucyAqLworCUFzc2VydCghc2Nhbi0+eHNfaGl0dXApOworCisJcmV0dXJuIGJhdGNo OworfQorCisvKgorICogYW1nZXRiYXRjaCB1dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4IEFNcwor ICovCitleHRlcm4gdm9pZCBpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKEluZGV4U2NhbkRlc2Mg c2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJCQkgIEJ1ZmZlciBidWYpOworZXh0 ZXJuIEluZGV4U2NhbkJhdGNoIGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhJbmRleFNjYW5EZXNj IHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UoSW5kZXhTY2Fu RGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CisKKy8qCisgKiBVdGlsaXR5IG1hY3Jv IGZvciBhY2Nlc3NpbmcgdGhlIGluZGV4IEFNJ3MgcGVyLWJhdGNoIG9wYXF1ZSBkYXRhLgorICoK KyAqIEVhY2ggYmF0Y2ggYWxsb2NhdGlvbiBwbGFjZXMgdGhlIGluZGV4IEFNIG9wYXF1ZSBhcmVh IGF0IGEgZml4ZWQgbmVnYXRpdmUKKyAqIG9mZnNldCBmcm9tIHRoZSBJbmRleFNjYW5CYXRjaCBw b2ludGVyIChzZWUgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKS4KKyAqIFRoaXMgbWFjcm8gcmV0 dXJucyBhIHR5cGVkIHBvaW50ZXIgdG8gdGhhdCBhcmVhLCBhc3NlcnRpbmcgdGhhdCBldmVyeWJv ZHkKKyAqIGhhcyB0aGUgc2FtZSBpZGVhIGFib3V0IHdoZXJlIHRoZSBpbmRleCBBTSBvcGFxdWUg YXJlYSBpcyBpbiBwYXNzaW5nLgorICovCisjZGVmaW5lIGluZGV4YW1fdXRpbF9iYXRjaF9nZXRf YW1kYXRhKHNjYW4sIGJhdGNoLCB0eXBlKSBcCisJKEFzc2VydE1hY3JvKChzY2FuKS0+YmF0Y2hf aW5kZXhfb3BhcXVlX3NpemUgPT0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSksIFwKKwkgKCh0eXBl ICopICgoY2hhciAqKSAoYmF0Y2gpIC0gTUFYQUxJR04oc2l6ZW9mKHR5cGUpKSkpKQorCisjZW5k aWYJCQkJCQkJLyogSU5ERVhCQVRDSF9IICovCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvbmJ0cmVlLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKaW5kZXggZGE3NTAzYzU3 Li45NWYxYzQ3YWMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAorKysg Yi9zcmMvaW5jbHVkZS9hY2Nlc3MvbmJ0cmVlLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUg TkJUUkVFX0gKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2luY2x1ZGUgImFjY2Vzcy9p bmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKICNpbmNsdWRlICJhY2Nlc3Mv c2Rpci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfYW1fZC5oIgpAQCAtOTI0LDExMSArOTI1LDIw IEBAIHR5cGVkZWYgc3RydWN0IEJUVmFjdXVtUG9zdGluZ0RhdGEKIAogdHlwZWRlZiBCVFZhY3V1 bVBvc3RpbmdEYXRhICpCVFZhY3V1bVBvc3Rpbmc7CiAKLS8qCi0gKiBCVFNjYW5PcGFxdWVEYXRh IGlzIHRoZSBidHJlZS1wcml2YXRlIHN0YXRlIG5lZWRlZCBmb3IgYW4gaW5kZXhzY2FuLgotICog VGhpcyBjb25zaXN0cyBvZiBwcmVwcm9jZXNzZWQgc2NhbiBrZXlzIChzZWUgX2J0X3ByZXByb2Nl c3Nfa2V5cygpIGZvcgotICogZGV0YWlscyBvZiB0aGUgcHJlcHJvY2Vzc2luZyksIGluZm9ybWF0 aW9uIGFib3V0IHRoZSBjdXJyZW50IGxvY2F0aW9uCi0gKiBvZiB0aGUgc2NhbiwgYW5kIGluZm9y bWF0aW9uIGFib3V0IHRoZSBtYXJrZWQgbG9jYXRpb24sIGlmIGFueS4gIChXZSB1c2UKLSAqIEJU U2NhblBvc0RhdGEgdG8gcmVwcmVzZW50IHRoZSBkYXRhIG5lZWRlZCBmb3IgZWFjaCBvZiBjdXJy ZW50IGFuZCBtYXJrZWQKLSAqIGxvY2F0aW9ucy4pCUluIGFkZGl0aW9uIHdlIGNhbiByZW1lbWJl ciBzb21lIGtub3duLWtpbGxlZCBpbmRleCBlbnRyaWVzCi0gKiB0aGF0IG11c3QgYmUgbWFya2Vk IGJlZm9yZSB3ZSBjYW4gbW92ZSBvZmYgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBJbmRleCBz Y2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWU6IHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdl LCBpZGVudGlmeQotICogYWxsIHRoZSBtYXRjaGluZyBpdGVtcyBvbiB0aGUgcGFnZSBhbmQgc2F2 ZSB0aGVtIGluIEJUU2NhblBvc0RhdGEsIHRoZW4KLSAqIHJlbGVhc2UgdGhlIHJlYWQtbG9jayB3 aGlsZSByZXR1cm5pbmcgdGhlIGl0ZW1zIHRvIHRoZSBjYWxsZXIgZm9yCi0gKiBwcm9jZXNzaW5n LiAgVGhpcyBhcHByb2FjaCBtaW5pbWl6ZXMgbG9jay91bmxvY2sgdHJhZmZpYy4gIFdlIG11c3Qg YWx3YXlzCi0gKiBkcm9wIHRoZSBsb2NrIHRvIG1ha2UgaXQgb2theSBmb3IgY2FsbGVyIHRvIHBy b2Nlc3MgdGhlIHJldHVybmVkIGl0ZW1zLgotICogV2hldGhlciBvciBub3Qgd2UgY2FuIGFsc28g cmVsZWFzZSB0aGUgcGluIGR1cmluZyB0aGlzIHdpbmRvdyB3aWxsIHZhcnkuCi0gKiBXZSBkcm9w IHRoZSBwaW4gKHdoZW4gc28tPmRyb3BQaW4pIHRvIGF2b2lkIGJsb2NraW5nIHByb2dyZXNzIGJ5 IFZBQ1VVTQotICogKHNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gYWJvdXQgbWFraW5nIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyBzYWZlKS4KLSAqIFdlJ2xsIGFsd2F5cyByZWxlYXNlIGJvdGgg dGhlIGxvY2sgYW5kIHRoZSBwaW4gb24gdGhlIGN1cnJlbnQgcGFnZSBiZWZvcmUKLSAqIG1vdmlu ZyBvbiB0byBpdHMgc2libGluZyBwYWdlLgotICoKLSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRl eC1vbmx5IHNjYW4sIHdlIHNhdmUgdGhlIGVudGlyZSBJbmRleFR1cGxlIGZvciBlYWNoCi0gKiBt YXRjaGVkIGl0ZW0sIG90aGVyd2lzZSBvbmx5IGl0cyBoZWFwIFRJRCBhbmQgb2Zmc2V0LiAgVGhl IEluZGV4VHVwbGVzIGdvCi0gKiBpbnRvIGEgc2VwYXJhdGUgd29ya3NwYWNlIGFycmF5OyBlYWNo IEJUU2NhblBvc0l0ZW0gc3RvcmVzIGl0cyB0dXBsZSdzCi0gKiBvZmZzZXQgd2l0aGluIHRoYXQg YXJyYXkuICBQb3N0aW5nIGxpc3QgdHVwbGVzIHN0b3JlIGEgImJhc2UiIHR1cGxlIG9uY2UsCi0g KiBhbGxvd2luZyB0aGUgc2FtZSBrZXkgdG8gYmUgcmV0dXJuZWQgZm9yIGVhY2ggVElEIGluIHRo ZSBwb3N0aW5nIGxpc3QKLSAqIHR1cGxlLgotICovCi0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBv c0l0ZW0JLyogd2hhdCB3ZSByZW1lbWJlciBhYm91dCBlYWNoIG1hdGNoICovCisvKiBQZXItYmF0 Y2ggZGF0YSBwcml2YXRlIHRvIHRoZSBidHJlZSBpbmRleCBBTSAqLwordHlwZWRlZiBzdHJ1Y3Qg QlRCYXRjaERhdGEKIHsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJlZmVy ZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRleCBp dGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlvbkluZGV4IHR1cGxlT2Zmc2V0 OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55ICovCi19IEJUU2Nh blBvc0l0ZW07CisJQnVmZmVyCQlidWY7CQkJLyogaW5kZXggcGFnZSBidWZmZXIgcGluIChUSUQg cmV1c2UgaW50ZXJsb2NrKSAqLworCUJsb2NrTnVtYmVyIGN1cnJQYWdlOwkJLyogaW5kZXggcGFn ZSB3aXRoIG1hdGNoaW5nIGl0ZW1zICovCisJQmxvY2tOdW1iZXIgcHJldlBhZ2U7CQkvKiBjdXJy UGFnZSdzIGxlZnQgc2libGluZyAqLworCUJsb2NrTnVtYmVyIG5leHRQYWdlOwkJLyogY3VyclBh Z2UncyByaWdodCBzaWJsaW5nICovCisJYm9vbAkJbW9yZUxlZnQ7CQkvKiBtb3JlIG1hdGNoaW5n IHBhZ2VzIHRvIHRoZSBsZWZ0PyAqLworCWJvb2wJCW1vcmVSaWdodDsJCS8qIG1vcmUgbWF0Y2hp bmcgcGFnZXMgdG8gdGhlIHJpZ2h0PyAqLworfSBCVEJhdGNoRGF0YTsKIAotdHlwZWRlZiBzdHJ1 Y3QgQlRTY2FuUG9zRGF0YQotewotCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52 YWxpZCBtZWFucyB1bnBpbm5lZCkgKi8KLQotCS8qIHBhZ2UgZGV0YWlscyBhcyBvZiB0aGUgc2F2 ZWQgcG9zaXRpb24ncyBjYWxsIHRvIF9idF9yZWFkcGFnZSAqLwotCUJsb2NrTnVtYmVyIGN1cnJQ YWdlOwkJLyogcGFnZSByZWZlcmVuY2VkIGJ5IGl0ZW1zIGFycmF5ICovCi0JQmxvY2tOdW1iZXIg cHJldlBhZ2U7CQkvKiBjdXJyUGFnZSdzIGxlZnQgbGluayAqLwotCUJsb2NrTnVtYmVyIG5leHRQ YWdlOwkJLyogY3VyclBhZ2UncyByaWdodCBsaW5rICovCi0JWExvZ1JlY1B0cglsc247CQkJLyog Y3VyclBhZ2UncyBMU04gKHdoZW4gc28tPmRyb3BQaW4pICovCi0KLQkvKiBzY2FuIGRpcmVjdGlv biBmb3IgdGhlIHNhdmVkIHBvc2l0aW9uJ3MgY2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlTY2Fu RGlyZWN0aW9uIGRpcjsKLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkg c2NhbiwgbmV4dFR1cGxlT2Zmc2V0IGlzIHRoZSBmaXJzdCBmcmVlCi0JICogbG9jYXRpb24gaW4g dGhlIGFzc29jaWF0ZWQgdHVwbGUgc3RvcmFnZSB3b3Jrc3BhY2UuCi0JICovCi0JaW50CQkJbmV4 dFR1cGxlT2Zmc2V0OwotCi0JLyoKLQkgKiBtb3JlTGVmdCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdo ZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNoaW5nCi0JICogaW5kZXggZW50cmllcyB0 byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJlbnQgcGFnZSwgcmVzcGVjdGl2ZWx5Lgot CSAqLwotCWJvb2wJCW1vcmVMZWZ0OwotCWJvb2wJCW1vcmVSaWdodDsKLQotCS8qCi0JICogVGhl IGl0ZW1zIGFycmF5IGlzIGFsd2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVh c2luZwotCSAqIGluZGV4b2Zmc2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNv bnZlbmllbnQgdG8gZmlsbCB0aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFy dCBhdCB0aGUgbGFzdCBzbG90IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVk IGJvdGggYSBmaXJzdC12YWxpZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIu Ci0JICogaXRlbUluZGV4IGlzIGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3Qg cmV0dXJuZWQgdG8gY2FsbGVyLgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQg aW5kZXggaW4gaXRlbXNbXSAqLwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXgg aW4gaXRlbXNbXSAqLwotCi0JQlRTY2FuUG9zSXRlbSBpdGVtc1tNYXhUSURzUGVyQlRyZWVQYWdl XTsJLyogTVVTVCBCRSBMQVNUICovCi19IEJUU2NhblBvc0RhdGE7Ci0KLXR5cGVkZWYgQlRTY2Fu UG9zRGF0YSAqQlRTY2FuUG9zOwotCi0jZGVmaW5lIEJUU2NhblBvc0lzUGlubmVkKHNjYW5wb3Mp IFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBh Z2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSksIFwKLQlCdWZmZXJJ c1ZhbGlkKChzY2FucG9zKS5idWYpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zVW5waW4oc2NhbnBv cykgXAotCWRvIHsgXAotCQlSZWxlYXNlQnVmZmVyKChzY2FucG9zKS5idWYpOyBcCi0JCShzY2Fu cG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JfSB3aGlsZSAoMCkKLSNkZWZpbmUgQlRTY2Fu UG9zVW5waW5JZlBpbm5lZChzY2FucG9zKSBcCi0JZG8geyBcCi0JCWlmIChCVFNjYW5Qb3NJc1Bp bm5lZChzY2FucG9zKSkgXAotCQkJQlRTY2FuUG9zVW5waW4oc2NhbnBvcyk7IFwKLQl9IHdoaWxl ICgwKQotCi0jZGVmaW5lIEJUU2NhblBvc0lzVmFsaWQoc2NhbnBvcykgXAotKCBcCi0JQXNzZXJ0 TWFjcm8oQmxvY2tOdW1iZXJJc1ZhbGlkKChzY2FucG9zKS5jdXJyUGFnZSkgfHwgXAotCQkJCSFC dWZmZXJJc1ZhbGlkKChzY2FucG9zKS5idWYpKSwgXAotCUJsb2NrTnVtYmVySXNWYWxpZCgoc2Nh bnBvcykuY3VyclBhZ2UpIFwKLSkKLSNkZWZpbmUgQlRTY2FuUG9zSW52YWxpZGF0ZShzY2FucG9z KSBcCi0JZG8geyBcCi0JCShzY2FucG9zKS5idWYgPSBJbnZhbGlkQnVmZmVyOyBcCi0JCShzY2Fu cG9zKS5jdXJyUGFnZSA9IEludmFsaWRCbG9ja051bWJlcjsgXAotCX0gd2hpbGUgKDApCisvKiBB Y2Nlc3MgdGhlIGJ0cmVlLXByaXZhdGUgcGVyLWJhdGNoIGRhdGEgZnJvbSBhbiBJbmRleFNjYW5C YXRjaCBwb2ludGVyICovCisjZGVmaW5lIEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKSBcCisJ aW5kZXhhbV91dGlsX2JhdGNoX2dldF9hbWRhdGEoc2NhbiwgYmF0Y2gsIEJUQmF0Y2hEYXRhKQog CiAvKiBXZSBuZWVkIG9uZSBvZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJD SEFSUkFZIHNjYW4ga2V5ICovCiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwpAQCAtMTA1 MCw2ICs5NjAsMjggQEAgdHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQlo aWdoX2NvbXBhcmU7CS8qIGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5 S2V5SW5mbzsKIAorLyoKKyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUg c3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXBy b2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRh aWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJy ZW50IGFycmF5CisgKiBrZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUg Y3VycmVudCBhcnJheSBrZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNj YW4gdGhyb3VnaCB0aGUgaW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFu ZCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFu eXRoaW5nIGFib3V0IHRoZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVl IHN0cnVjdC4KKyAqCisgKiBJbmRleCBzY2FucyB3b3JrIGEgcGFnZSBhdCBhIHRpbWUsIGFzIHJl cXVpcmVkIGJ5IHRoZSBhbWdldGJhdGNoIGNvbnRyYWN0OgorICogd2UgcGluIGFuZCByZWFkLWxv Y2sgdGhlIHBhZ2UsIGlkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gdGhlIHBhZ2UK KyAqIGFuZCByZXR1cm4gdGhlbSBpbiBhIG5ld2x5IGFsbG9jYXRlZCBiYXRjaC4gIFdlIHRoZW4g cmVsZWFzZSB0aGUgcmVhZC1sb2NrCisgKiB1c2luZyBhbWdldGJhdGNoIHV0aWxpdHkgcm91dGlu ZXMuICBUaGlzIGFwcHJvYWNoIG1pbmltaXplcyBsb2NrL3VubG9jaworICogdHJhZmZpYy4gX2J0 X25leHQgaXMgcGFzc2VkIHByaW9yYmF0Y2gsIHdoaWNoIGNvbnRhaW5zIGRldGFpbHMgb2Ygd2hp Y2gKKyAqIHBhZ2UgaXMgbmV4dCBpbiBsaW5lIHRvIGJlIHJlYWQgKHByaW9yYmF0Y2ggaXMgcHJv dmlkZWQgYXMgYW4gYXJndW1lbnQgdG8KKyAqIGJ0Z2V0YmF0Y2ggYnkgY29yZSBjb2RlKS4KKyAq CisgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBzYXZlIHRoZSBlbnRp cmUgSW5kZXhUdXBsZSBmb3IgZWFjaAorICogbWF0Y2hlZCBpdGVtLCBvdGhlcndpc2Ugb25seSBp dHMgaGVhcCBUSUQgYW5kIG9mZnNldC4gIFRoaXMgaXMgYWxzbyBwZXIgdGhlCisgKiBhbWdldGJh dGNoIGNvbnRyYWN0LiAgUG9zdGluZyBsaXN0IHR1cGxlcyBzdG9yZSBhICJiYXNlIiB0dXBsZSBv bmNlLAorICogYWxsb3dpbmcgdGhlIHNhbWUga2V5IHRvIGJlIHJldHVybmVkIGZvciBlYWNoIFRJ RCBpbiB0aGUgcG9zdGluZyBsaXN0LgorICovCiB0eXBlZGVmIHN0cnVjdCBCVFNjYW5PcGFxdWVE YXRhCiB7CiAJLyogdGhlc2UgZmllbGRzIGFyZSBzZXQgYnkgX2J0X3ByZXByb2Nlc3Nfa2V5cygp OiAqLwpAQCAtMTA2NiwzMiArOTk4LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0 YQogCUJUQXJyYXlLZXlJbmZvICphcnJheUtleXM7CS8qIGluZm8gYWJvdXQgZWFjaCBlcXVhbGl0 eS10eXBlIGFycmF5IGtleSAqLwogCUZtZ3JJbmZvICAgKm9yZGVyUHJvY3M7CQkvKiBPUkRFUiBw cm9jcyBmb3IgcmVxdWlyZWQgZXF1YWxpdHkga2V5cyAqLwogCU1lbW9yeUNvbnRleHQgYXJyYXlD b250ZXh0OyAvKiBzY2FuLWxpZmVzcGFuIGNvbnRleHQgZm9yIGFycmF5IGRhdGEgKi8KLQotCS8q IGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlmIGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBu ZXZlciB1c2VkKSAqLwotCWludAkJICAgKmtpbGxlZEl0ZW1zOwkvKiBjdXJyUG9zLml0ZW1zIGlu ZGV4ZXMgb2Yga2lsbGVkIGl0ZW1zICovCi0JaW50CQkJbnVtS2lsbGVkOwkJLyogbnVtYmVyIG9m IGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KLQlib29sCQlkcm9wUGluOwkJLyogZHJvcCBsZWFm IHBpbiBiZWZvcmUgYnRnZXR0dXBsZSByZXR1cm5zPyAqLwotCi0JLyoKLQkgKiBJZiB3ZSBhcmUg ZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB0aGVzZSBhcmUgdGhlIHR1cGxlIHN0b3JhZ2UKLQkg KiB3b3Jrc3BhY2VzIGZvciB0aGUgY3VyclBvcyBhbmQgbWFya1BvcyByZXNwZWN0aXZlbHkuICBF YWNoIGlzIG9mIHNpemUKLQkgKiBCTENLU1osIHNvIGl0IGNhbiBob2xkIGFzIG11Y2ggYXMgYSBm dWxsIHBhZ2UncyB3b3J0aCBvZiB0dXBsZXMuCi0JICovCi0JY2hhcgkgICAqY3VyclR1cGxlczsJ CS8qIHR1cGxlIHN0b3JhZ2UgZm9yIGN1cnJQb3MgKi8KLQljaGFyCSAgICptYXJrVHVwbGVzOwkJ LyogdHVwbGUgc3RvcmFnZSBmb3IgbWFya1BvcyAqLwotCi0JLyoKLQkgKiBJZiB0aGUgbWFya2Vk IHBvc2l0aW9uIGlzIG9uIHRoZSBzYW1lIHBhZ2UgYXMgY3VycmVudCBwb3NpdGlvbiwgd2UKLQkg KiBkb24ndCB1c2UgbWFya1BvcywgYnV0IGp1c3Qga2VlcCB0aGUgbWFya2VkIGl0ZW1JbmRleCBp biBtYXJrSXRlbUluZGV4Ci0JICogKGFsbCB0aGUgcmVzdCBvZiBjdXJyUG9zIGlzIHZhbGlkIGZv ciB0aGUgbWFyayBwb3NpdGlvbikuIEhlbmNlLCB0bwotCSAqIGRldGVybWluZSBpZiB0aGVyZSBp cyBhIG1hcmssIGZpcnN0IGxvb2sgYXQgbWFya0l0ZW1JbmRleCwgdGhlbiBhdAotCSAqIG1hcmtQ b3MuCi0JICovCi0JaW50CQkJbWFya0l0ZW1JbmRleDsJLyogaXRlbUluZGV4LCBvciAtMSBpZiBu b3QgdmFsaWQgKi8KLQotCS8qIGtlZXAgdGhlc2UgbGFzdCBpbiBzdHJ1Y3QgZm9yIGVmZmljaWVu Y3kgKi8KLQlCVFNjYW5Qb3NEYXRhIGN1cnJQb3M7CQkvKiBjdXJyZW50IHBvc2l0aW9uIGRhdGEg Ki8KLQlCVFNjYW5Qb3NEYXRhIG1hcmtQb3M7CQkvKiBtYXJrZWQgcG9zaXRpb24sIGlmIGFueSAq LwogfSBCVFNjYW5PcGFxdWVEYXRhOwogCiB0eXBlZGVmIEJUU2Nhbk9wYXF1ZURhdGEgKkJUU2Nh bk9wYXF1ZTsKQEAgLTExNjAsMTQgKzEwNjYsMTcgQEAgZXh0ZXJuIGJvb2wgYnRpbnNlcnQoUmVs YXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiBleHRlcm4gSW5kZXhTY2Fu RGVzYyBidGJlZ2luc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7 CiBleHRlcm4gU2l6ZSBidGVzdGltYXRlcGFyYWxsZWxzY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5r ZXlzLCBpbnQgbm9yZGVyYnlzKTsKIGV4dGVybiB2b2lkIGJ0aW5pdHBhcmFsbGVsc2Nhbih2b2lk ICp0YXJnZXQpOwotZXh0ZXJuIGJvb2wgYnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBidGdldGJhdGNoKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJIEluZGV4U2NhbkJhdGNoIHByaW9yYmF0Y2gsCisJCQkJ CQkJCSBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50NjQgYnRnZXRiaXRtYXAoSW5kZXhT Y2FuRGVzYyBzY2FuLCBUSURCaXRtYXAgKnRibSk7CiBleHRlcm4gdm9pZCBidHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJIFNj YW5LZXkgb3JkZXJieXMsIGludCBub3JkZXJieXMpOworZXh0ZXJuIHZvaWQgYnRraWxsaXRlbXNi YXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKTsKK2V4dGVybiB2 b2lkIGJ0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0 Y2gpOwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pOwog ZXh0ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7Ci1leHRlcm4gdm9pZCBi dG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lkIGJ0cmVzdHJwb3MoSW5k ZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiBleHRlcm4gSW5kZXhCdWxrRGVsZXRlUmVzdWx0 ICpidGJ1bGtkZWxldGUoSW5kZXhWYWN1dW1JbmZvICppbmZvLAogCQkJCQkJCQkJCSAgIEluZGV4 QnVsa0RlbGV0ZVJlc3VsdCAqc3RhdHMsCiAJCQkJCQkJCQkJICAgSW5kZXhCdWxrRGVsZXRlQ2Fs bGJhY2sgY2FsbGJhY2ssCkBAIC0xMjcxLDggKzExODAsOSBAQCBleHRlcm4gdm9pZCBfYnRfcHJl cHJvY2Vzc19rZXlzKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiAvKgogICogcHJvdG90eXBlcyBmb3Ig ZnVuY3Rpb25zIGluIG5idHJlYWRwYWdlLmMKICAqLwotZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCi0JCQkJCQkgT2Zmc2V0TnVt YmVyIG9mZm51bSwgYm9vbCBmaXJzdHBhZ2UpOworZXh0ZXJuIGJvb2wgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsCisJCQkJCQkgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCisJCQkJCQkgYm9vbCBmaXJzdHBhZ2Up OwogZXh0ZXJuIHZvaWQgX2J0X3N0YXJ0X2FycmF5X2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50CV9idF9iaW5zcmNoX2FycmF5X3NrZXkoRm1n ckluZm8gKm9yZGVycHJvYywKIAkJCQkJCQkJICAgYm9vbCBjdXJfZWxlbV90cmlnLCBTY2FuRGly ZWN0aW9uIGRpciwKQEAgLTEyODcsMTUgKzExOTcsMTUgQEAgZXh0ZXJuIEJUU3RhY2sgX2J0X3Nl YXJjaChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJ CQkJCQkgIEJ1ZmZlciAqYnVmUCwgaW50IGFjY2VzcywgYm9vbCByZXR1cm5zdGFjayk7CiBleHRl cm4gT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoX2luc2VydChSZWxhdGlvbiByZWwsIEJUSW5zZXJ0 U3RhdGUgaW5zZXJ0c3RhdGUpOwogZXh0ZXJuIGludDMyIF9idF9jb21wYXJlKFJlbGF0aW9uIHJl bCwgQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdlLCBPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLWV4 dGVybiBib29sIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KTsKLWV4dGVybiBib29sIF9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpOworZXh0ZXJuIEluZGV4U2NhbkJhdGNoIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBJbmRleFNjYW5CYXRjaCBfYnRfbmV4dChJ bmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCSAgIEluZGV4U2Nh bkJhdGNoIHByaW9yYmF0Y2gpOwogZXh0ZXJuIEJ1ZmZlciBfYnRfZ2V0X2VuZHBvaW50KFJlbGF0 aW9uIHJlbCwgdWludDMyIGxldmVsLCBib29sIHJpZ2h0bW9zdCk7CiAKIC8qCiAgKiBwcm90b3R5 cGVzIGZvciBmdW5jdGlvbnMgaW4gbmJ0dXRpbHMuYwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0 IF9idF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwotZXh0ZXJuIHZv aWQgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOwogZXh0ZXJuIEJUQ3ljbGVJZCBf YnRfdmFjdXVtX2N5Y2xlaWQoUmVsYXRpb24gcmVsKTsKIGV4dGVybiBCVEN5Y2xlSWQgX2J0X3N0 YXJ0X3ZhY3V1bShSZWxhdGlvbiByZWwpOwogZXh0ZXJuIHZvaWQgX2J0X2VuZF92YWN1dW0oUmVs YXRpb24gcmVsKTsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCmluZGV4IDllMzJmMDIwOS4uOTUwMzEyMTk5IDEw MDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9yZWxzY2FuLmgKQEAgLTEyNCwxNSArMTI0LDE4MCBAQCB0eXBlZGVmIHN0cnVjdCBQ YXJhbGxlbEJsb2NrVGFibGVTY2FuV29ya2VyRGF0YSAqUGFyYWxsZWxCbG9ja1RhYmxlU2Nhbldv cmtlcjsKIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEKIHsKIAlSZWxhdGlvbgly ZWw7CisKKwkvKiBUYWJsZSBBTSBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgc2l6ZSAoTUFYQUxJR04n ZCksIHNldCBieSBBTSAqLworCXVpbnQxNgkJYmF0Y2hfb3BhcXVlX3NpemU7CisKKwkvKiBQZXIt aXRlbSB0cmFpbGluZyBkYXRhIHNpemUgaW4gZWFjaCBiYXRjaCAqLworCXVpbnQxNgkJYmF0Y2hf cGVyX2l0ZW1fc2l6ZTsKIH0gSW5kZXhGZXRjaFRhYmxlRGF0YTsKIAorLyoKKyAqIExvY2F0aW9u IG9mIGEgQmF0Y2hNYXRjaGluZ0l0ZW0gdGhhdCBhcHBlYXJzIGluIGEgSW5kZXhTY2FuQmF0Y2gg cmV0dXJuZWQKKyAqIGJ5IChhbmQgc3Vic2VxdWVudGx5IHBhc3NlZCB0bykgYW4gYW1nZXRiYXRj aCByb3V0aW5lCisgKi8KK3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0l0ZW1Qb3MKK3sKKwkvKiBQ b3NpdGlvbiByZWZlcmVuY2VzIGEgdmFsaWQgSW5kZXhTY2FuRGVzY0RhdGEuYmF0Y2hidWZbXSBl bnRyeT8gKi8KKwlib29sCQl2YWxpZDsKKworCS8qIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVm W10td2lzZSBpbmRleCB0byByZWxldmFudCBJbmRleFNjYW5CYXRjaCAqLworCXVpbnQ4CQliYXRj aDsKKworCS8qIEluZGV4U2NhbkJhdGNoLml0ZW1zW10td2lzZSBpbmRleCB0byByZWxldmFudCBC YXRjaE1hdGNoaW5nSXRlbSAqLworCWludAkJCWl0ZW07CisKK30gQmF0Y2hSaW5nSXRlbVBvczsK KworLyoKKyAqIE1hdGNoaW5nIGl0ZW0gcmV0dXJuZWQgYnkgYW1nZXRiYXRjaCAoaW4gcmV0dXJu ZWQgSW5kZXhTY2FuQmF0Y2gpIGR1cmluZyBhbgorICogaW5kZXggc2Nhbi4gIFVzZWQgYnkgdGFi bGUgQU0gdG8gbG9jYXRlIHJlbGV2YW50IG1hdGNoaW5nIHRhYmxlIHR1cGxlLgorICovCit0eXBl ZGVmIHN0cnVjdCBCYXRjaE1hdGNoaW5nSXRlbQoreworCUl0ZW1Qb2ludGVyRGF0YSB0YWJsZVRp ZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgdGFibGUgaXRlbSAqLworCU9mZnNldE51bWJlciBpbmRl eE9mZnNldDsJLyogaW5kZXggaXRlbSdzIGxvY2F0aW9uIHdpdGhpbiBwYWdlICovCisJTG9jYXRp b25JbmRleCB0dXBsZU9mZnNldDsJLyogSW5kZXhUdXBsZSdzIG9mZnNldCBpbiB3b3Jrc3BhY2Us IGlmIGFueSAqLworfSBCYXRjaE1hdGNoaW5nSXRlbTsKKworLyoKKyAqIERhdGEgYWJvdXQgb25l IGJhdGNoIG9mIGl0ZW1zIHJldHVybmVkIGJ5IChhbmQgcGFzc2VkIHRvKSBhbWdldGJhdGNoIGR1 cmluZworICogaW5kZXggc2NhbnMuCisgKgorICogRWFjaCBiYXRjaCBhbGxvY2F0aW9uIGhhcyB0 aGUgZm9sbG93aW5nIG1lbW9yeSBsYXlvdXQ6CisgKgorICogICBbdGFibGUgQU0gb3BhcXVlIGFy ZWFdICAgIDwtIGF0IC0oYmF0Y2hfdGFibGVfb2Zmc2V0KSBmcm9tIGJhdGNoIHB0cgorICogICBb aW5kZXggQU0gb3BhcXVlIGFyZWFdICAgIDwtIGF0IC0oYmF0Y2hfaW5kZXhfb3BhcXVlX3NpemUp IGZyb20gYmF0Y2ggcHRyCisgKiAgIFtJbmRleFNjYW5CYXRjaERhdGFdICAgICAgPC0gdGhlIHJl dHVybmVkIHBvaW50ZXIKKyAqICAgW2l0ZW1zW21heGl0ZW1zYmF0Y2hdXQorICogICBbdGFibGUg QU0gdHJhaWxpbmcgZGF0YV0gIDwtIGUuZy4gcGVyLWl0ZW0gdmlzaWJpbGl0eSBmbGFncworICog ICBbY3VyclR1cGxlcyB3b3Jrc3BhY2VdICAgIDwtIHNpemVkIGJ5IGluZGV4IEFNIChiYXRjaF90 dXBsZXNfd29ya3NwYWNlKQorICoKKyAqIFRoZSBBTS1zcGVjaWZpYyBvcGFxdWUgYXJlYXMgYXJl IGFjY2Vzc2VkIHZpYSBhY2Nlc3NvciBmdW5jdGlvbnMgZGVmaW5lZCBieQorICogZWFjaCB0YWJs ZSBBTSBhbmQgaW5kZXggQU0gdGhhdCBzdXBwb3J0cyB0aGUgYmF0Y2ggaW50ZXJmYWNlcy4KKyAq LwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRhCit7CisJLyogSW5kZXggcGFnZSdz IExTTiwgb3B0aW9uYWxseSB1c2VkIGJ5IGFta2lsbGl0ZW1zYmF0Y2ggcm91dGluZXMgKi8KKwlY TG9nUmVjUHRyCWxzbjsKKworCS8qIHNjYW4gZGlyZWN0aW9uIHdoZW4gdGhlIGluZGV4IHBhZ2Ug d2FzIHJlYWQgKi8KKwlTY2FuRGlyZWN0aW9uIGRpcjsKKworCS8qCisJICoga25vd25FbmRCYWNr d2FyZCBhbmQga25vd25FbmRGb3J3YXJkIGFyZSBzZXQgYnkgdGhlIHRhYmxlIEFNIHRvCisJICog aW5kaWNhdGUgdGhhdCB0aGlzIGJhdGNoIGlzIHRoZSBsYXN0IG9uZSB3aXRoIG1hdGNoaW5nIGl0 ZW1zIGluIHRoZQorCSAqIHJlbGV2YW50IHNjYW4gZGlyZWN0aW9uLiAgV2hlbiBhbWdldGJhdGNo IHJldHVybnMgTlVMTCBmb3IgYSBnaXZlbgorCSAqIGRpcmVjdGlvbiwgdGhlIHRhYmxlIEFNIHNl dHMgdGhlIGNvcnJlc3BvbmRpbmcgZmxhZyBvbiB0aGUgcHJpb3JiYXRjaAorCSAqIHRoYXQgd2Fz IHBhc3NlZCB0byB0aGF0IGNhbGwuICBXZSBjYW5ub3Qga25vdyB0aGlzIHdoZW4gYSBiYXRjaCBp cworCSAqIGZpcnN0IHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2g7IGl0IG9ubHkgYmVjb21lcyBhcHBh cmVudCB3aGVuIHdlIHRyeSBhbmQKKwkgKiBmYWlsIHRvIGNvbnRpbnVlIHRoZSBzY2FuIHBhc3Qg aXQuCisJICoKKwkgKiBUaGlzIGFsbG93cyB0YWJsZSBBTXMgdG8gYXZvaWQgcmVkdW5kYW50IGFt Z2V0YmF0Y2ggY2FsbHMgd2l0aCB0aGUgc2FtZQorCSAqIHByaW9yYmF0Y2ggLS0gdGhlIGluZGV4 IEFNIG1pZ2h0IG5lZWQgdG8gcmVhZCBhZGRpdGlvbmFsIGluZGV4IHBhZ2VzIHRvCisJICogZGV0 ZXJtaW5lIHRoZXJlIGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGJleW9uZCBjYWxsZXIncyBw cmlvcmJhdGNoLgorCSAqLworCWJvb2wJCWtub3duRW5kQmFja3dhcmQ7CisJYm9vbAkJa25vd25F bmRGb3J3YXJkOworCisJLyoKKwkgKiBCYXRjaCBzdGlsbCBob2xkcyBUSUQgcmVjeWNsaW5nIGlu dGVybG9jaz8KKwkgKi8KKwlib29sCQlpc0d1YXJkZWQ7CisKKwkvKgorCSAqIE1hdGNoaW5nIGl0 ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLiAgT3V0cHV0IGJ5IGluZGV4IEFNIGZvciB0YWJsZSBB TS4KKwkgKgorCSAqIFRoZSBpdGVtcyBhcnJheSBpcyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBv cmRlciAoaWUsIGJ5IGluY3JlYXNpbmcKKwkgKiBpbmRleG9mZnNldCkuICBXaGVuIHNjYW5uaW5n IGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IGZvciBpbmRleCBBTXMKKwkgKiB0byBmaWxsIHRo ZSBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBpdGVtIHNsb3Qg YW5kCisJICogZmlsbCBkb3dud2FyZHMuICBUaGlzIGlzIHdoeSB3ZSBuZWVkIGJvdGggYSBmaXJz dC12YWxpZC1lbnRyeSBhbmQgYQorCSAqIGxhc3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKgor CSAqIE5vdGU6IHRoZXNlIGFyZSBzaWduZWQgYmVjYXVzZSBpdCdzIHNvbWV0aW1lcyBjb252ZW5p ZW50IHRvIHVzZSAtMSB0bworCSAqIHJlcHJlc2VudCBhbiBvdXQtb2YtYm91bmRzIHNwYWNlIGp1 c3QgYmVmb3JlIGZpcnN0SXRlbSAod2hlbiBpdCdzIDApLgorCSAqLworCWludAkJCWZpcnN0SXRl bTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKwlpbnQJCQlsYXN0SXRlbTsJ CS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAqLworCisJLyogaW5mbyBhYm91dCBkZWFk IGl0ZW1zIGlmIGFueSAoZGVhZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KKwlpbnQJ CQludW1EZWFkOwkJLyogbnVtYmVyIG9mIGN1cnJlbnRseSBzdG9yZWQgaXRlbXMgKi8KKwlpbnQJ CSAgICpkZWFkSXRlbXM7CQkvKiBpbmRleGVzIG9mIGRlYWQgaXRlbXMgKi8KKworCS8qCisJICog SWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhpcyBpcyB0aGUgdHVwbGUgc3Rv cmFnZSB3b3Jrc3BhY2UKKwkgKiBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVy ZW5jZWQgYnkgaXRlbXNbXSkuICBUaGUgd29ya3NwYWNlCisJICogc2l6ZSBpcyBkZXRlcm1pbmVk IGJ5IHRoZSBpbmRleCBBTSAoYmF0Y2hfdHVwbGVzX3dvcmtzcGFjZSkuCisJICoKKwkgKiBjdXJy VHVwbGVzIHBvaW50cyBpbnRvIHRoZSB0cmFpbGluZyBwb3J0aW9uIG9mIHRoaXMgYWxsb2NhdGlv biwgcGFzdAorCSAqIGl0ZW1zW10gYW5kIGFueSB0YWJsZSBBTSB0cmFpbGluZyBkYXRhLiAgSXQg aXMgTlVMTCBmb3IgcGxhaW4gaW5kZXgKKwkgKiBzY2Fucy4KKwkgKi8KKwljaGFyCSAgICpjdXJy VHVwbGVzOwkJLyogdHVwbGUgc3RvcmFnZSBmb3IgaXRlbXNbXSAqLworCUJhdGNoTWF0Y2hpbmdJ dGVtIGl0ZW1zW0ZMRVhJQkxFX0FSUkFZX01FTUJFUl07IC8qIG1hdGNoaW5nIGl0ZW1zICovCit9 IEluZGV4U2NhbkJhdGNoRGF0YTsKKwordHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuQmF0Y2hEYXRh ICpJbmRleFNjYW5CYXRjaDsKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUgQU1zIHRvIG1h bmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICogaW50ZXJmYWNl LiAgU2NhbnMgdXNlIGEgcmluZyBidWZmZXIgb2YgYmF0Y2hlcyByZXR1cm5lZCBieSBhbWdldGJh dGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQgdGhleSB3ZXJl IHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRoZSBzYW1lIG9y ZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisgKiBtYXRjaGVz IGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxlIHR1cGxlcyBp biB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVudCAtLSBwcm92 aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUgb3JkZXIgdGhh dCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMgaW4uCisgKi8K K3R5cGVkZWYgc3RydWN0IEJhdGNoUmluZ0J1ZmZlcgoreworCS8qIGN1cnJlbnQgcG9zaXRpb25z IGluIEluZGV4U2NhbkRlc2NEYXRhLmJhdGNoYnVmW10gZm9yIHNjYW4gKi8KKwlCYXRjaFJpbmdJ dGVtUG9zIHNjYW5Qb3M7CS8qIHNjYW4ncyByZWFkIHBvc2l0aW9uICovCisJQmF0Y2hSaW5nSXRl bVBvcyBtYXJrUG9zOwkvKiBtYXJrL3Jlc3RvcmUgcG9zaXRpb24gKi8KKworCS8qIG1hcmtQb3Mn cyBiYXRjaCAobm90IGluIHJpbmcgYnVmZmVyIHdoZW4gbWFya0JhdGNoICE9IHNjYW5CYXRjaCkg Ki8KKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2g7CisKKwkvKgorCSAqIGhlYWRCYXRjaCBpcyBh biBpbmRleCB0byB0aGUgZWFybGllc3Qgc3RpbGwtdmFsaWQgcmluZyBidWZmZXIgYmF0Y2gKKwkg KiBzbG90IGluIGJhdGNoYnVmW10uICBUaGUgYWN0dWFsIGFycmF5IHBvc2l0aW9uIGZvciBpdHMg SW5kZXhTY2FuQmF0Y2gKKwkgKiBpcyBoZWFkQmF0Y2ggJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hF UyAtIDEpLCBzaW5jZSB0aGVzZSBpbmRleGVzIHVzZQorCSAqIHVuc2lnbmVkIHdyYXBwaW5nIGFy aXRobWV0aWMuICBoZWFkQmF0Y2ggbXVzdCBiZSB0aGUgc2NhbidzIGN1cnJlbnQKKwkgKiBzY2Fu QmF0Y2ggKGkuZS4gdGhlIGN1cnJlbnQgc2NhblBvcyBiYXRjaCkuCisJICovCisJdWludDgJCWhl YWRCYXRjaDsKKworCS8qCisJICogbmV4dEJhdGNoIGlzIGFuIGluZGV4IHRvIHRoZSBuZXh0IF9l bXB0eV8gcmluZyBidWZmZXIgYmF0Y2ggc2xvdCBpbgorCSAqIGJhdGNoYnVmW10uICBBcyB3aXRo IGhlYWRCYXRjaCwgdGhlIGFjdHVhbCBiYXRjaGJ1ZltdIGFycmF5IHBvc2l0aW9uIGlzCisJICog bmV4dEJhdGNoICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKS4gIEEgbmV3IGJhdGNoIGNh biBvbmx5IGJlCisJICogYXBwZW5kZWQgdG8gdGhpcyBwb3NpdGlvbi9zbG90IHdoZW4gIWluZGV4 X3NjYW5fYmF0Y2hfZnVsbCgpLgorCSAqCisJICogTm90ZTogdGhlIHNjYW4ncyBtb3N0IHJlY2Vu dGx5IGFwcGVuZGVkIGJhdGNoIChpdHMgdGFpbCBiYXRjaCkgaXMKKwkgKiBhbHdheXMgbG9jYXRl ZCBhdCAobmV4dEJhdGNoIC0gMSkgJiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpLgorCSAq LworCXVpbnQ4CQluZXh0QmF0Y2g7Cit9IEJhdGNoUmluZ0J1ZmZlcjsKKwogc3RydWN0IEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbjsKIAogLyoKICAqIFdlIHVzZSB0aGUgc2FtZSBJbmRleFNjYW5E ZXNjRGF0YSBzdHJ1Y3R1cmUgZm9yIGJvdGggYW1nZXR0dXBsZS1iYXNlZAogICogYW5kIGFtZ2V0 Yml0bWFwLWJhc2VkIGluZGV4IHNjYW5zLiAgU29tZSBmaWVsZHMgYXJlIG9ubHkgcmVsZXZhbnQg aW4KLSAqIGFtZ2V0dHVwbGUtYmFzZWQgc2NhbnMuCisgKiBhbWdldHR1cGxlLWJhc2VkIHNjYW5z LiAgT3RoZXJzIGFyZSBvbmx5IHVzZWQgaW4gYW1nZXRiYXRjaC1iYXNlZCBzY2Fucy4KKyAqCisg KiBUaGUgcmluZyBidWZmZXIgdXNlZCBieSBhbWdldGJhdGNoIHNjYW5zIGlzIHN0b3JlZCBoZXJl IGFzIGEgZml4ZWQgYXJyYXkgb2YKKyAqIHBvaW50ZXJzIHRvIGJhdGNoZXMuICBXZSBuZWVkIGEg bWluaW11bSBvZiB0d28sIHNpbmNlIHdlJ2xsIG9ubHkgY29uc2lkZXIKKyAqIHJlbGVhc2luZyBv bmUgYmF0Y2ggd2hlbiBhbm90aGVyIGlzIHJlYWQuCiAgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9D QUNIRV9CQVRDSEVTCTIKKyNkZWZpbmUgSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUwkJNjQKKworU3Rh dGljQXNzZXJ0RGVjbChJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIDw9IFBHX1VJTlQ4X01BWCArIDEs CisJCQkJICJJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIG11c3QgZml0IGluIHVpbnQ4IHJpbmcgYnVm ZmVyIGluZGV4ZXMiKTsKK1N0YXRpY0Fzc2VydERlY2woKElOREVYX1NDQU5fTUFYX0JBVENIRVMg JiAoSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUyAtIDEpKSA9PSAwLAorCQkJCSAiSU5ERVhfU0NBTl9N QVhfQkFUQ0hFUyBtdXN0IGJlIGEgcG93ZXIgb2YgMiIpOworCiB0eXBlZGVmIHN0cnVjdCBJbmRl eFNjYW5EZXNjRGF0YQogewogCS8qIHNjYW4gcGFyYW1ldGVycyAqLwpAQCAtMTQzLDYgKzMwOCwy NiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWludAkJCW51bWJlck9mT3Jk ZXJCeXM7CS8qIG51bWJlciBvZiBvcmRlcmluZyBvcGVyYXRvcnMgKi8KIAlzdHJ1Y3QgU2Nhbktl eURhdGEgKmtleURhdGE7CS8qIGFycmF5IG9mIGluZGV4IHF1YWxpZmllciBkZXNjcmlwdG9ycyAq LwogCXN0cnVjdCBTY2FuS2V5RGF0YSAqb3JkZXJCeURhdGE7CS8qIGFycmF5IG9mIG9yZGVyaW5n IG9wIGRlc2NyaXB0b3JzICovCisKKwkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBz dGF0ZSAqLworCXZvaWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGlu Zm8gKi8KKworCS8qIHNjYW4ncyBhbWdldGJhdGNoIHN0YXRlIChvbmx5IHVzZWQgYnkgYW1nZXRi YXRjaC91c2ViYXRjaHJpbmcgc2NhbnMpICovCisJQmF0Y2hSaW5nQnVmZmVyIGJhdGNocmluZ2J1 ZjsKKworCS8qCisJICogQXJyYXkgb2YgcG9pbnRlcnMgdG8gcmVjeWNsYWJsZSBiYXRjaGVzLCB1 c2VkIGJ5IGFsbCBhbWdldGJhdGNoIHNjYW5zCisJICogYW5kIGJ5IGFtZ2V0Yml0bWFwIHNjYW5z IG9mIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgYW1nZXRiYXRjaAorCSAqLworCUluZGV4U2Nh bkJhdGNoIGJhdGNoY2FjaGVbSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTXTsKKworCS8qIEFycmF5 IG9mIHBvaW50ZXJzIHRvIGJhdGNoZXMsIHJlZmVyZW5jZWQgd2l0aGluIGJhdGNocmluZ2J1ZiAq LworCUluZGV4U2NhbkJhdGNoIGJhdGNoYnVmW0lOREVYX1NDQU5fTUFYX0JBVENIRVNdOworCisJ Ym9vbAkJdXNlYmF0Y2hyaW5nOwkvKiBzY2FuIHVzZXMgYW1nZXRiYXRjaC9iYXRjaHJpbmdidWY/ ICovCisJYm9vbAkJYmF0Y2hJbW1lZGlhdGVVbmd1YXJkOwkvKiBkcm9wIFRJRCByZWN5Y2xpbmcg aW50ZXJsb2NrIGluCisJCQkJCQkJCQkJICogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jaz8gKi8K KwogCWJvb2wJCXhzX3dhbnRfaXR1cDsJLyogY2FsbGVyIHJlcXVlc3RzIGluZGV4IHR1cGxlcyAq LwogCWJvb2wJCXhzX3RlbXBfc25hcDsJLyogdW5yZWdpc3RlciBzbmFwc2hvdCBhdCBzY2FuIGVu ZD8gKi8KIApAQCAtMTU0LDkgKzMzOSw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NE YXRhCiAJLyogeHNfc25hcHNob3QgdXNlcyBhbiBNVkNDIHNuYXBzaG90PyAqLwogCWJvb2wJCU1W Q0NTY2FuOwogCi0JLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KLQl2 b2lkCSAgICpvcGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCi0KIAkv KgogCSAqIEluc3RydW1lbnRhdGlvbiBjb3VudGVycyBtYWludGFpbmVkIGJ5IGFsbCBpbmRleCBB TXMgZHVyaW5nIGJvdGgKIAkgKiBhbWdldHR1cGxlIGNhbGxzIGFuZCBhbWdldGJpdG1hcCBjYWxs cyAodW5sZXNzIGZpZWxkIHJlbWFpbnMgTlVMTCkKQEAgLTE2NCwxMCArMzQ2LDEwIEBAIHR5cGVk ZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJc3RydWN0IEluZGV4U2Nhbkluc3RydW1lbnRh dGlvbiAqaW5zdHJ1bWVudDsKIAogCS8qCi0JICogSW4gYW4gaW5kZXgtb25seSBzY2FuLCBhIHN1 Y2Nlc3NmdWwgYW1nZXR0dXBsZSBjYWxsIG11c3QgZmlsbCBlaXRoZXIKLQkgKiB4c19pdHVwIChh bmQgeHNfaXR1cGRlc2MpIG9yIHhzX2hpdHVwIChhbmQgeHNfaGl0dXBkZXNjKSB0byBwcm92aWRl IHRoZQotCSAqIGRhdGEgcmV0dXJuZWQgYnkgdGhlIHNjYW4uICBJdCBjYW4gZmlsbCBib3RoLCBp biB3aGljaCBjYXNlIHRoZSBoZWFwCi0JICogZm9ybWF0IHdpbGwgYmUgdXNlZC4KKwkgKiBJbiBh biBpbmRleC1vbmx5IHNjYW4sIGEgc3VjY2Vzc2Z1bCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qg Y2FsbCBtdXN0CisJICogZmlsbCBlaXRoZXIgeHNfaXR1cCAoYW5kIHhzX2l0dXBkZXNjKSBvciB4 c19oaXR1cCAoYW5kIHhzX2hpdHVwZGVzYykgdG8KKwkgKiBwcm92aWRlIHRoZSBkYXRhIHJldHVy bmVkIGJ5IHRoZSBzY2FuLiAgSXQgY2FuIGZpbGwgYm90aCwgaW4gd2hpY2ggY2FzZQorCSAqIHRo ZSBoZWFwIGZvcm1hdCB3aWxsIGJlIHVzZWQuCiAJICovCiAJSW5kZXhUdXBsZQl4c19pdHVwOwkJ LyogaW5kZXggdHVwbGUgcmV0dXJuZWQgYnkgQU0gKi8KIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAq eHNfaXR1cGRlc2M7CS8qIHJvd3R5cGUgZGVzY3JpcHRvciBvZiB4c19pdHVwICovCkBAIC0xNzUs NiArMzU3LDkgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVw bGVEZXNjRGF0YSAqeHNfaGl0dXBkZXNjOyAvKiByb3d0eXBlIGRlc2NyaXB0b3Igb2YgeHNfaGl0 dXAgKi8KIAogCUl0ZW1Qb2ludGVyRGF0YSB4c19oZWFwdGlkOyAvKiByZXN1bHQgKi8KKworCXVp bnQxNgkJbWF4aXRlbXNiYXRjaDsJLyogc2V0IGJ5IGFtYmVnaW5zY2FuIHdoZW4gYW1nZXRiYXRj aCB1c2VkICovCisKIAlJbmRleEZldGNoVGFibGVEYXRhICp4c19oZWFwZmV0Y2g7CiAKIAkvKiBS ZXNvbHZlZCBnZXRuZXh0X3Nsb3QgaW1wbGVtZW50YXRpb24sIHNldCBieSBpbmRleF9iZWdpbnNj YW4gKi8KQEAgLTE4NCw2ICszNjksMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0Rh dGEKIAogCWJvb2wJCXhzX3JlY2hlY2s7CQkvKiBUIG1lYW5zIHNjYW4ga2V5cyBtdXN0IGJlIHJl Y2hlY2tlZCAqLwogCisJLyogUGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHNpemVzLCBzZXQgYnkgaW5k ZXggQU0gaW4gYW1iZWdpbnNjYW4gKi8KKwl1aW50MTYJCWJhdGNoX2luZGV4X29wYXF1ZV9zaXpl OwkvKiBNQVhBTElHTidkIGluZGV4IEFNIG9wYXF1ZSBzaXplICovCisJdWludDE2CQliYXRjaF90 dXBsZXNfd29ya3NwYWNlOyAvKiBjdXJyVHVwbGVzIHdvcmtzcGFjZSBzaXplICovCisKKwkvKiBD b21wdXRlZCBvZmZzZXQsIHVzZWQgdG8gZ2V0IHRhYmxlIEFNJ3Mgb3BhcXVlIGFyZWEgZnJvbSBh IGJhdGNoICovCisJdWludDE2CQliYXRjaF90YWJsZV9vZmZzZXQ7CisKIAkvKgogCSAqIFdoZW4g ZmV0Y2hpbmcgd2l0aCBhbiBvcmRlcmluZyBvcGVyYXRvciwgdGhlIHZhbHVlcyBvZiB0aGUgT1JE RVIgQlkKIAkgKiBleHByZXNzaW9ucyBvZiB0aGUgbGFzdCByZXR1cm5lZCB0dXBsZSwgYWNjb3Jk aW5nIHRvIHRoZSBpbmRleC4gIElmCkBAIC0yMTYsOCArNDA4LDYgQEAgdHlwZWRlZiBzdHJ1Y3Qg UGFyYWxsZWxJbmRleFNjYW5EZXNjRGF0YQogCWNoYXIJCXBzX3NuYXBzaG90X2RhdGFbRkxFWElC TEVfQVJSQVlfTUVNQkVSXTsKIH0JCQlQYXJhbGxlbEluZGV4U2NhbkRlc2NEYXRhOwogCi1zdHJ1 Y3QgVHVwbGVUYWJsZVNsb3Q7Ci0KIC8qIFN0cnVjdCBmb3Igc3RvcmFnZS1vci1pbmRleCBzY2Fu cyBvZiBzeXN0ZW0gdGFibGVzICovCiB0eXBlZGVmIHN0cnVjdCBTeXNTY2FuRGVzY0RhdGEKIHsK QEAgLTIyOSw0ICs0MTksMTM1IEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0YQogCXN0 cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisvKgorICog UmV0dXJuIHRoZSB0cnVlIGFsbG9jYXRpb24gYmFzZSBvZiBhIGJhdGNoIChhY2NvdW50aW5nIGZv ciBBTSBvcGFxdWUgYXJlYXMKKyAqIHN0b3JlZCBiZWZvcmUgdGhlIEluZGV4U2NhbkJhdGNoRGF0 YSBwb2ludGVyKS4KKyAqLworc3RhdGljIGlubGluZSB2b2lkICoKK2JhdGNoX2FsbG9jX2Jhc2Uo SW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVy biAoY2hhciAqKSBiYXRjaCAtIHNjYW4tPmJhdGNoX3RhYmxlX29mZnNldDsKK30KKworLyoKKyAq IENvdW50IGhvdyBtYW55IGJhdGNoZXMgYXJlIGN1cnJlbnRseSBsb2FkZWQgaW4gdGhlIHJpbmcg YnVmZmVyLgorICovCitzdGF0aWMgaW5saW5lIHVpbnQ4CitpbmRleF9zY2FuX2JhdGNoX2NvdW50 KEluZGV4U2NhbkRlc2NEYXRhICpzY2FuKQoreworCXJldHVybiAodWludDgpIChzY2FuLT5iYXRj aHJpbmdidWYubmV4dEJhdGNoIC0KKwkJCQkJc2Nhbi0+YmF0Y2hyaW5nYnVmLmhlYWRCYXRjaCk7 Cit9CisKKy8qCisgKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGggdGhlIHJlcXVlc3Rl ZCBpbmRleD8KKyAqCisgKiBOT1RFOiBhIHN0YWxlIGJhdGNoIGlkeCBjYW4gYWxpYXMgYSBjdXJy ZW50bHktbG9hZGVkIHJhbmdlIGFmdGVyIHVpbnQ4CisgKiBvdmVyZmxvdywgcHJvZHVjaW5nIGEg ZmFsc2UgcG9zaXRpdmUuICBGYWxzZSBuZWdhdGl2ZXMgYXJlIG5vdCBwb3NzaWJsZS4KKyAqLwor c3RhdGljIGlubGluZSBib29sCitpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChJbmRleFNjYW5EZXNj RGF0YSAqc2NhbiwgdWludDggaWR4KQoreworCXJldHVybiAoaW50OCkgKGlkeCAtIHNjYW4tPmJh dGNocmluZ2J1Zi5oZWFkQmF0Y2gpID49IDAgJiYKKwkJKGludDgpIChpZHggLSBzY2FuLT5iYXRj aHJpbmdidWYubmV4dEJhdGNoKSA8IDA7Cit9CisKKy8qCisgKiBIYXZlIHdlIGxvYWRlZCB0aGUg bWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcz8KKyAqLworc3RhdGljIGlubGluZSBib29sCitpbmRl eF9zY2FuX2JhdGNoX2Z1bGwoSW5kZXhTY2FuRGVzY0RhdGEgKnNjYW4pCit7CisJcmV0dXJuIGlu ZGV4X3NjYW5fYmF0Y2hfY291bnQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUzsKK30K KworLyoKKyAqIFJldHVybiBiYXRjaCBmb3IgdGhlIHByb3ZpZGVkIGluZGV4LgorICovCitzdGF0 aWMgaW5saW5lIEluZGV4U2NhbkJhdGNoCitpbmRleF9zY2FuX2JhdGNoKEluZGV4U2NhbkRlc2NE YXRhICpzY2FuLCB1aW50OCBpZHgpCit7CisJQXNzZXJ0KGluZGV4X3NjYW5fYmF0Y2hfbG9hZGVk KHNjYW4sIGlkeCkpOworCisJcmV0dXJuIHNjYW4tPmJhdGNoYnVmW2lkeCAmIChJTkRFWF9TQ0FO X01BWF9CQVRDSEVTIC0gMSldOworfQorCisvKgorICogQXBwZW5kIGdpdmVuIGJhdGNoIHRvIHNj YW4ncyBiYXRjaCByaW5nIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCitpbmRleF9z Y2FuX2JhdGNoX2FwcGVuZChJbmRleFNjYW5EZXNjRGF0YSAqc2NhbiwgSW5kZXhTY2FuQmF0Y2gg YmF0Y2gpCit7CisJQmF0Y2hSaW5nQnVmZmVyICpyaW5nYnVmID0gJnNjYW4tPmJhdGNocmluZ2J1 ZjsKKwl1aW50OAkJbmV4dEJhdGNoID0gcmluZ2J1Zi0+bmV4dEJhdGNoOworCisJQXNzZXJ0KCFp bmRleF9zY2FuX2JhdGNoX2Z1bGwoc2NhbikpOworCisJc2Nhbi0+YmF0Y2hidWZbbmV4dEJhdGNo ICYgKElOREVYX1NDQU5fTUFYX0JBVENIRVMgLSAxKV0gPSBiYXRjaDsKKwlyaW5nYnVmLT5uZXh0 QmF0Y2grKzsKK30KKworLyoKKyAqIEFkdmFuY2UgcG9zaXRpb24gdG8gaXRzIG5leHQgaXRlbSBp biB0aGUgYmF0Y2guCisgKgorICogQWR2YW5jZSB0byB0aGUgbmV4dCBpdGVtIHdpdGhpbiB0aGUg cHJvdmlkZWQgYmF0Y2ggKG9yIHRvIHRoZSBwcmV2aW91cyBpdGVtLAorICogd2hlbiBzY2Fubmlu ZyBiYWNrd2FyZHMpLgorICoKKyAqIFJldHVybnMgdHJ1ZSBpZiB0aGUgcG9zaXRpb24gY291bGQg YmUgYWR2YW5jZWQuICBSZXR1cm5zIGZhbHNlIHdoZW4gdGhlcmUKKyAqIGFyZSBubyBtb3JlIGl0 ZW1zIGZyb20gdGhlIGJhdGNoIHJlbWFpbmluZyBpbiB0aGUgZ2l2ZW4gc2NhbiBkaXJlY3Rpb24u CisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAoraW5kZXhfc2Nhbl9wb3NfYWR2YW5jZShTY2FuRGly ZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEJhdGNoUmlu Z0l0ZW1Qb3MgKnBvcykKK3sKKwlBc3NlcnQocG9zLT52YWxpZCk7CisKKwlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJaWYgKCsrcG9zLT5pdGVtID4gYmF0Y2gt Pmxhc3RJdGVtKQorCQkJcmV0dXJuIGZhbHNlOworCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVj dGlvbklzQmFja3dhcmQgKi8KKwl7CisJCWlmICgtLXBvcy0+aXRlbSA8IGJhdGNoLT5maXJzdEl0 ZW0pCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJLyogQWR2YW5jZWQgd2l0aGluIGJhdGNoICov CisJcmV0dXJuIHRydWU7Cit9CisKKy8qCisgKiBBZHZhbmNlIGJhdGNoIHBvc2l0aW9uIHRvIHRo ZSBzdGFydCBvZiBpdHMgbmV3IGJhdGNoLgorICoKKyAqIFdoZW4gd2UncmUgY2FsbGVkLCB0aGlz IHBvc2l0aW9uIHNob3VsZCBwb2ludCB0byBhIGJhdGNoIHRoYXQgY2FsbGVyIGp1c3QKKyAqIGZp bmlzaGVkIGNvbnN1bWluZyBmcm9tLiAgV2hlbiB3ZSByZXR1cm4sIHRoaXMgcG9zaXRpb24gd2ls bCBwb2ludCB0bworICogbmV4dEJhdGNoLCB0aGUgbmV4dCBiYXRjaCBmcm9tIHRoZSByaW5nIGJ1 ZmZlci4gIFdlJ2xsIGhhdmUgYWxzbyBzZXQgdGhlCisgKiBwb3NpdGlvbidzIGl0ZW0gb2Zmc2V0 IHRvIG5leHRCYXRjaCdzIGZpcnN0IGl0ZW0gaW4gdGhlIGdpdmVuIGRpcmVjdGlvbgorICogKHdo aWNoIGlzIGFjdHVhbGx5IG5leHRCYXRjaCdzIF9sYXN0XyBpdGVtIHdoZW4gc2Nhbm5pbmcgYmFj a3dhcmRzKS4KKyAqCisgKiBuZXh0QmF0Y2ggZG9lc24ndCBoYXZlIHRvIGJlIChhbmQgb2Z0ZW4g aXNuJ3QpIHRoZSBtb3N0IHJlY2VudGx5IGFwcGVuZGVkCisgKiBiYXRjaCBpbiB0aGUgc2Nhbidz IHJpbmcgYnVmZmVyLiAgSXQgaXMgbWVyZWx5IHRoZSBuZXh0IGJhdGNoIGluIGxpbmUgdG8gYmUK KyAqIGNvbnN1bWVkIGZyb20gdGhlIHBvaW50IG9mIHZpZXcgb2Ygb3VyIGNhbGxlci4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCitpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkgSW5kZXhTY2FuQmF0Y2ggbmV4dEJhdGNoLCBCYXRjaFJpbmdJ dGVtUG9zICpwb3MpCit7CisJQXNzZXJ0KG5leHRCYXRjaC0+ZGlyID09IGRpcmVjdGlvbik7CisK KwkvKiBJbmNyZW1lbnQgYmF0Y2ggKG1pZ2h0IHdyYXApLCBvciBpbml0aWFsaXplIGl0IHRvIHpl cm8gKi8KKwlpZiAocG9zLT52YWxpZCkKKwkJcG9zLT5iYXRjaCsrOworCWVsc2UKKwkJcG9zLT5i YXRjaCA9IDA7CisKKwlwb3MtPnZhbGlkID0gdHJ1ZTsKKworCWlmIChTY2FuRGlyZWN0aW9uSXNG b3J3YXJkKGRpcmVjdGlvbikpCisJCXBvcy0+aXRlbSA9IG5leHRCYXRjaC0+Zmlyc3RJdGVtOwor CWVsc2UKKwkJcG9zLT5pdGVtID0gbmV4dEJhdGNoLT5sYXN0SXRlbTsKK30KKwogI2VuZGlmCQkJ CQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxl YW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMDkwZDBjNTU2Li5kM2E2 NDg4NzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNDE4LDcgKzQxOCw3IEBAIHR5cGVkZWYgc3Ry dWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogSW5kZXhGZXRjaFRhYmxlRGF0YSwgd2hpY2ggdGhlIEFN IHdpbGwgdHlwaWNhbGx5IGVtYmVkIGluIGEgbGFyZ2VyCiAJICogc3RydWN0dXJlIHdpdGggYWRk aXRpb25hbCBpbmZvcm1hdGlvbi4KIAkgKgotCSAqIFR1cGxlcyBmb3IgYW4gaW5kZXggc2NhbiBj YW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBvbmUgb2YgdGhlCisJICogVHVwbGVzIGZvciBhbiBpbmRl eCBzY2FuIGNhbiB0aGVuIGJlIGZldGNoZWQgdmlhIG9uZSBvZiB0aGUgZm91cgogCSAqIHNsb3Qt YmFzZWQgY2FsbGJhY2tzIGNhbGxlZCB0aHJvdWdoIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCwg b3IgdmlhCiAJICogdGhlIGxvd2VyLWxldmVsIFRJRC1iYXNlZCBpbmRleF9mZXRjaF90dXBsZSBp bnRlcmZhY2UuCiAJICovCkBAIC00MzUsMTQgKzQzNSwzNCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJs ZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5kZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4 RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCisJLyoKKwkgKiBJbml0aWFsaXplIHRhYmxlIEFNJ3Mg cGVyLWJhdGNoIG9wYXF1ZSBhcmVhIHdpdGhpbiBhIGJhdGNoIGFsbG9jYXRpb24uCisJICoKKwkg KiBDYWxsZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5 Y2xlZCBiYXRjaC4KKwkgKiBUYWJsZSBBTXMgc2hvdWxkIHNldCB1cCBpdHMgb3BhcXVlIGFyZWEg KGF0IGEgbmVnYXRpdmUgb2Zmc2V0IGZyb20gdGhlCisJICogYmF0Y2ggcG9pbnRlcikgYW5kIGFu eSB0cmFpbGluZyBwZXItaXRlbSBkYXRhIChlLmcuIHZpc2liaWxpdHkgZmxhZ3MpLgorCSAqCisJ ICogJ25ld19hbGxvYycgaXMgdHJ1ZSBmb3IgZnJlc2hseSBwYWxsb2MnZCBiYXRjaGVzLCBmYWxz ZSBmb3IgYmF0Y2hlcworCSAqIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlLgorCSAqLworCXZvaWQJ CSgqaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCkgKEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJ CQkgICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkgICBib29sIG5ld19hbGxvYyk7 CisKIAkvKgogCSAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2Nhbiwgc2Nh bm5pbmcgaW4gdGhlIHNwZWNpZmllZAogCSAqIGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVlIGlm IGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuCiAJICoKLQkgKiBUd28gdmFyaWFu dHMgY292ZXIge3BsYWluLCBpbmRleC1vbmx5fSBpbmRleCBzY2FucyB0aGF0IHVzZSBhbWdldHR1 cGxlLgotCSAqIGluZGV4X2JlZ2luc2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50IHRvIHVzZS4g IENhbGxlcnMgdXNlCisJICogRm91ciB2YXJpYW50cyBjb3ZlciB0aGUge3BsYWluLCBpbmRleC1v bmx5fSB4IHthbWdldGJhdGNoLCBhbWdldHR1cGxlfQorCSAqIG1hdHJpeC4gIGluZGV4X2JlZ2lu c2NhbiByZXNvbHZlcyB3aGljaCB2YXJpYW50IHRvIHVzZS4gIENhbGxlcnMgdXNlCiAJICogdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90KCksIHdoaWNoIGNhbGxzIHRocm91Z2ggdGhhdCBwb2ludGVy IGRpcmVjdGx5LgogCSAqLworCWJvb2wJCSgqaW5kZXhfcGxhaW5fYW1nZXRiYXRjaF9nZXRuZXh0 X3Nsb3QpIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCVNjYW5EaXJlY3Rpb24g ZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQlUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisJYm9vbAkJ KCppbmRleF9vbmx5X2FtZ2V0YmF0Y2hfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2Fu LAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJ CSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKIAlib29sCQkoKmluZGV4X3BsYWluX2FtZ2V0dHVw bGVfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJCQkJCQlTY2Fu RGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNsb3Qp OwpAQCAtMTIyOCw2ICsxMjQ4LDE5IEBAIHRhYmxlX2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5k ZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAlzY2FuLT5yZWwtPnJkX3RhYmxlYW0tPmluZGV4X2Zl dGNoX2VuZChzY2FuKTsKIH0KIAorLyoKKyAqIEluaXRpYWxpemUgdGFibGUgQU0ncyBwZXItYmF0 Y2ggb3BhcXVlIGFyZWEgd2l0aGluIGEgYmF0Y2ggYWxsb2NhdGlvbi4KKyAqCisgKiBDYWxsZWQg YnkgaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jIGZvciBlYWNoIG5ldyBvciByZWN5Y2xlZCBiYXRj aC4KKyAqLworc3RhdGljIGlubGluZSB2b2lkCit0YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0 KEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJIGJvb2wg bmV3X2FsbG9jKQoreworCXNjYW4tPmhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfZmV0 Y2hfYmF0Y2hfaW5pdChzY2FuLCBiYXRjaCwKKwkJCQkJCQkJCQkJCQkJICAgbmV3X2FsbG9jKTsK K30KKwogLyoKICAqIEZldGNoIHRoZSBuZXh0IHR1cGxlIGZyb20gYW4gaW5kZXggc2NhbiBpbnRv IGBzbG90YCwgc2Nhbm5pbmcgaW4gdGhlCiAgKiBzcGVjaWZpZWQgZGlyZWN0aW9uLiBSZXR1cm5z IHRydWUgaWYgYSB0dXBsZSB3YXMgZm91bmQsIGZhbHNlIG90aGVyd2lzZS4KQEAgLTEyNzQsNiAr MTMwNyw5IEBAIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKICAqIGVudHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVy ZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgb25seQogICogZXZhbHVhdGVzIHRo ZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRzaWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUg dHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hh dCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZh Y2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBjYWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQg ZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9z c2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9vbAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUo c3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmluZGV4 IDc5NDdkODNkNS4uNTM2MWM4MmNkIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRo bm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTQzNywxMiAr MTQzNywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleE9wdEluZm8KIAlib29sCQlhbW9wdGlvbmFs a2V5OwogCWJvb2wJCWFtc2VhcmNoYXJyYXk7CiAJYm9vbAkJYW1zZWFyY2hudWxsczsKLQkvKiBk b2VzIEFNIGhhdmUgYW1nZXR0dXBsZSBpbnRlcmZhY2U/ICovCi0JYm9vbAkJYW1oYXNnZXR0dXBs ZTsKKwkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiYXRjaCAob3IgZ2V0dHVwbGUpIGludGVyZmFjZT8g Ki8KKwlib29sCQlhbWNhbnBsYWluc2NhbjsKIAkvKiBkb2VzIEFNIGhhdmUgYW1nZXRiaXRtYXAg aW50ZXJmYWNlPyAqLwogCWJvb2wJCWFtaGFzZ2V0Yml0bWFwOwogCWJvb2wJCWFtY2FucGFyYWxs ZWw7Ci0JLyogZG9lcyBBTSBoYXZlIGFtbWFya3BvcyBpbnRlcmZhY2U/ICovCisJLyogaXMgQU0g cHJlcGFyZWQgZm9yIHVzIHRvIHJlc3RvcmUgYSBtYXJrPyAqLwogCWJvb2wJCWFtY2FubWFya3Bv czsKIAkvKiBBTSdzIGNvc3QgZXN0aW1hdG9yICovCiAJLyogUmF0aGVyIHRoYW4gaW5jbHVkZSBh bWFwaS5oIGhlcmUsIHdlIGRlY2xhcmUgYW1jb3N0ZXN0aW1hdGUgbGlrZSB0aGlzICovCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMgYi9zcmMvYmFja2VuZC9hY2Nl c3MvYnJpbi9icmluLmMKaW5kZXggMmEwZjhjOGUzLi4wYjQzOTY1MGYgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvYnJp bi9icmluLmMKQEAgLTI5OCwxMCArMjk4LDEyIEBAIGJyaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FS R1MpCiAJCS5hbWJlZ2luc2NhbiA9IGJyaW5iZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJyaW5y ZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQku YW1raWxsaXRlbXNiYXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5h bWdldGJpdG1hcCA9IGJyaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBicmluZW5kc2NhbiwK LQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVz ZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRw YXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNz L2dpbi9naW5nZXQuYwppbmRleCA2YjE0OGU2OWEuLjhmNzAzM2Q2MiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2lu L2dpbmdldC5jCkBAIC0xOTUzLDkgKzE5NTMsOSBAQCBnaW5nZXRiaXRtYXAoSW5kZXhTY2FuRGVz YyBzY2FuLCBUSURCaXRtYXAgKnRibSkKIAkgKiBpbnRvIHRoZSBtYWluIGluZGV4LCBhbmQgc28g d2UgbWlnaHQgdmlzaXQgaXQgYSBzZWNvbmQgdGltZSBkdXJpbmcgdGhlCiAJICogbWFpbiBzY2Fu LiAgVGhpcyBpcyBva2F5IGJlY2F1c2Ugd2UnbGwganVzdCByZS1zZXQgdGhlIHNhbWUgYml0IGlu IHRoZQogCSAqIGJpdG1hcC4gIChUaGUgcG9zc2liaWxpdHkgb2YgZHVwbGljYXRlIHZpc2l0cyBp cyBhIG1ham9yIHJlYXNvbiB3aHkgR0lOCi0JICogY2FuJ3Qgc3VwcG9ydCB0aGUgYW1nZXR0dXBs ZSBBUEksIGhvd2V2ZXIuKSBOb3RlIHRoYXQgaXQgd291bGQgbm90IGRvCi0JICogdG8gc2NhbiB0 aGUgbWFpbiBpbmRleCBiZWZvcmUgdGhlIHBlbmRpbmcgbGlzdCwgc2luY2UgY29uY3VycmVudAot CSAqIGNsZWFudXAgY291bGQgdGhlbiBtYWtlIHVzIG1pc3MgZW50cmllcyBlbnRpcmVseS4KKwkg KiBjYW4ndCBzdXBwb3J0IGVpdGhlciB0aGUgYW1nZXR0dXBsZSBvciBhbWdldGJhdGNoIEFQSS4p IE5vdGUgdGhhdCBpdAorCSAqIHdvdWxkIG5vdCBkbyB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJl Zm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZQorCSAqIGNvbmN1cnJlbnQgY2xlYW51cCBjb3Vs ZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgogCSAqLwogCXNjYW5QZW5kaW5n SW5zZXJ0KHNjYW4sIHRibSwgJm50aWRzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2dpbi9naW51dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwppbmRl eCBmZTdiOTg0ZmYuLjcxMGYzZjljMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dp bi9naW51dGlsLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW51dGlsLmMKQEAgLTgy LDEwICs4MiwxMiBAQCBnaW5oYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IGdpbmJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lucmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBO VUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBnaW5nZXRi aXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwK LQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGlt YXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJ CS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwppbmRleCA4NTY1 ZTIyNWIuLmE0ODRjOGIyYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2dpc3QvZ2lz dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAzLDEwICsxMDMs MTIgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZ2lz dGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBn aXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2gg PSBOVUxMLAorCQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBnaXN0 Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gZ2lzdGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBO VUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2hhc2gvaGFzaC5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4 IDhkOGNkMzBkYy4uMmUzMmJlMjMzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMTQsMTAg KzExNCwxMiBAQCBoYXNoaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4g PSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IGhhc2hnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1raWxsaXRlbXNi YXRjaCA9IE5VTEwsCisJCS5hbXVuZ3VhcmRiYXRjaCA9IE5VTEwsCiAJCS5hbWdldGJpdG1hcCA9 IGhhc2hnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBoYXNoZW5kc2NhbiwKLQkJLmFtbWFya3Bv cyA9IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAog CQkuYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4g PSBOVUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hl YXAvaGVhcGFtX2hhbmRsZXIuYwppbmRleCAzMjIyNmRjZTIuLmY4NDI4YTMyOCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCkBAIC0yNTUyLDYgKzI1NTIsOSBAQCBz dGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhvZHMgPSB7CiAJLmluZGV4X2Zl dGNoX2JlZ2luID0gaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luLAogCS5pbmRleF9mZXRjaF9yZXNl dCA9IGhlYXBhbV9pbmRleF9mZXRjaF9yZXNldCwKIAkuaW5kZXhfZmV0Y2hfZW5kID0gaGVhcGFt X2luZGV4X2ZldGNoX2VuZCwKKwkuaW5kZXhfZmV0Y2hfYmF0Y2hfaW5pdCA9IGhlYXBhbV9pbmRl eF9mZXRjaF9iYXRjaF9pbml0LAorCS5pbmRleF9wbGFpbl9hbWdldGJhdGNoX2dldG5leHRfc2xv dCA9IGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldGJhdGNoX2dldG5leHRfc2xvdCwKKwkuaW5kZXhf b25seV9hbWdldGJhdGNoX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X2FtZ2V0YmF0 Y2hfZ2V0bmV4dF9zbG90LAogCS5pbmRleF9wbGFpbl9hbWdldHR1cGxlX2dldG5leHRfc2xvdCA9 IGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldHR1cGxlX2dldG5leHRfc2xvdCwKIAkuaW5kZXhfb25s eV9hbWdldHR1cGxlX2dldG5leHRfc2xvdCA9IGhlYXBhbV9pbmRleF9vbmx5X2FtZ2V0dHVwbGVf Z2V0bmV4dF9zbG90LAogCS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90 dXBsZSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYwppbmRleCA3 ZDQ2M2JmZDEuLjI1YjE5MWVhMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAv aGVhcGFtX2luZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgi CiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5oIgorI2luY2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNo LmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJzdG9yYWdl L3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3Bnc3RhdF9pbnRlcm5hbC5oIgpAQCAtMzAs MTAgKzMxLDI3IEBAIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBh bV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKHN0cnVjdCBJbmRlCiBzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwKIAkJCQkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJ CQkJCQkJCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJCQkJCQkJCQkJCSBib29s IGluZGV4X29ubHkpOworCQkJCQkJCQkJCQkJCQkJCSBib29sIGluZGV4X29ubHksCisJCQkJCQkJ CQkJCQkJCQkJIGJvb2wgYW1nZXRiYXRjaCk7CiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sCiAJ CQkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKLQkJCQkJCQkJCQkJCQkJCSAg IGJvb2wgKmhlYXBfY29udGludWUpOworCQkJCQkJCQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250 aW51ZSwKKwkJCQkJCQkJCQkJCQkJCSAgIGJvb2wgYW1nZXRiYXRjaCk7CitzdGF0aWMgcGdfYXR0 cmlidXRlX2Fsd2F5c19pbmxpbmUgSXRlbVBvaW50ZXIgaGVhcGFtX2luZGV4X2dldG5leHRfc2Nh bmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQkJCQkJCQkJCQkJCQkgU2NhbkRpcmVjdGlv biBkaXJlY3Rpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkJCSBib29sICphbGxfdmlzaWJsZSk7Citz dGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyIGhlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQo SW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQkgIEluZGV4RmV0Y2hIZWFwRGF0YSAq aHNjYW4sCisJCQkJCQkJCQkJCQkJCSAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJ CQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQkJCQkJCQkgIEJhdGNo UmluZ0l0ZW1Qb3MgKnNjYW5Qb3MsCisJCQkJCQkJCQkJCQkJCSAgYm9vbCAqYWxsX3Zpc2libGUp Oworc3RhdGljIHZvaWQgaGVhcGFtX2luZGV4X2JhdGNoX3Bvc192aXNpYmlsaXR5KEluZGV4U2Nh bkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJ CQkJCQkJICBJbmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkJCQkJICBIZWFwQmF0Y2hEYXRh ICpoYmF0Y2gsCisJCQkJCQkJCQkJCSAgQmF0Y2hSaW5nSXRlbVBvcyAqcG9zKTsKIAogLyogLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgKiBJbmRleCBTY2FuIENhbGxiYWNrcyBmb3IgaGVhcCBBTQpAQCAtNDYs OSArNjQsMTYgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAlJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuID0gcGFsbG9jMF9vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRh KTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9IHJlbDsKLQloc2Nhbi0+eHNfY2J1ZiA9IEludmFs aWRCdWZmZXI7CisJaHNjYW4tPnhzX2Jhc2UuYmF0Y2hfb3BhcXVlX3NpemUgPSBNQVhBTElHTihz aXplb2YoSGVhcEJhdGNoRGF0YSkpOworCWhzY2FuLT54c19iYXNlLmJhdGNoX3Blcl9pdGVtX3Np emUgPSBzaXplb2YodWludDgpOyAvKiB2aXNJbmZvIGVsZW1lbnQgc2l6ZSAqLworCisJLyogQ3Vy cmVudCBoZWFwIGJsb2NrIHN0YXRlICovCisJQXNzZXJ0KGhzY2FuLT54c19jYnVmID09IEludmFs aWRCdWZmZXIpOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JaHNjYW4t PnhzX3ZtYnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKworCS8qIFZNIHJlbGF0ZWQgc3RhdGUgKi8K KwlBc3NlcnQoaHNjYW4tPnhzX3ZtYnVmZmVyID09IEludmFsaWRCdWZmZXIpOworCWhzY2FuLT54 c192bV9pdGVtcyA9IDE7CiAKIAlyZXR1cm4gJmhzY2FuLT54c19iYXNlOwogfQpAQCAtNTgsOCAr ODMsOCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nh bikKIHsKIAlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAq KSBzY2FuOwogCi0JLyogUmVzZXRzIGFyZSBhIG5vLW9wIChYWFggYW1nZXRiYXRjaCBjb21taXQg cmVzZXRzIHhzX3ZtX2l0ZW1zIGhlcmUpICovCi0JKHZvaWQpIGhzY2FuOworCS8qIFJlc2NhbnMg c2hvdWxkIGF2b2lkIGFuIGV4Y2Vzc2l2ZSBudW1iZXIgb2YgVk0gbG9va3VwcyAqLworCWhzY2Fu LT54c192bV9pdGVtcyA9IDE7CiAKIAkvKgogCSAqIERlbGliZXJhdGVseSBhdm9pZCBkcm9wcGlu ZyBwaW5zIG5vdyBoZWxkIGluIHhzX2NidWYgYW5kIHhzX3ZtYnVmZmVyLgpAQCAtODMsNiArMTA4 LDcxIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikK IAkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOwogCiAJcGZyZWUoaHNjYW4pOwor CisJLyoKKwkgKiBOb3RlOiB3ZSBleHBlY3QgdGhlIGNvcmUgZXhlY3V0b3IgdG8gY2FsbCBpbmRl eF9iYXRjaHNjYW5fZW5kICh3aGVuIHRoZQorCSAqIHNjYW4gaXMgdXNlYmF0Y2hyaW5nKS4gIFRo aXMgd2lsbCBmcmVlIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKwkgKi8KK30KKworLyoK KyAqIEluaXRpYWxpemUgdGhlIGhlYXAgdGFibGUgQU0ncyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEg KEhlYXBCYXRjaERhdGEpLgorICoKKyAqIENhbGxlZCBieSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2MgZm9yIGVhY2ggbmV3IG9yIHJlY3ljbGVkIGJhdGNoLgorICogU2V0cyB1cCB0aGUgdmlzSW5m byBwb2ludGVyIGZvciBpbmRleC1vbmx5IHNjYW5zLCBvciBOVUxMIG90aGVyd2lzZS4KKyAqLwor dm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJ bmRleFNjYW5CYXRjaCBiYXRjaCwKKwkJCQkJCQkgIGJvb2wgbmV3X2FsbG9jKQoreworCUhlYXBC YXRjaERhdGEgKmhiYXRjaCA9IGhlYXBfYmF0Y2hfZGF0YShiYXRjaCwgc2Nhbik7CisKKwlpZiAo c2Nhbi0+eHNfd2FudF9pdHVwKQorCXsKKwkJaWYgKG5ld19hbGxvYykKKwkJeworCQkJLyoKKwkJ CSAqIFBvaW50IHZpc0luZm8gaW50byB0aGUgdHJhaWxpbmcgcGVyLWl0ZW0gYXJlYSB0aGF0IGZv bGxvd3MKKwkJCSAqIGl0ZW1zW10gaW4gdGhlIGJhdGNoIGFsbG9jYXRpb24uCisJCQkgKi8KKwkJ CVNpemUJCWl0ZW1zRW5kOworCisJCQlpdGVtc0VuZCA9IE1BWEFMSUdOKG9mZnNldG9mKEluZGV4 U2NhbkJhdGNoRGF0YSwgaXRlbXMpICsKKwkJCQkJCQkJc2l6ZW9mKEJhdGNoTWF0Y2hpbmdJdGVt KSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCQkJaGJhdGNoLT52aXNJbmZvID0gKHVpbnQ4ICop ICgoY2hhciAqKSBiYXRjaCArIGl0ZW1zRW5kKTsKKwkJfQorCisJCS8qIENsZWFyIHZpc2liaWxp dHkgZmxhZ3MgKG5lZWRlZCBmb3IgYm90aCBuZXcgYW5kIHJlY3ljbGVkIGJhdGNoZXMpICovCisJ CW1lbXNldChoYmF0Y2gtPnZpc0luZm8sIDAsIHNjYW4tPm1heGl0ZW1zYmF0Y2gpOworCX0KKwll bHNlCisJeworCQloYmF0Y2gtPnZpc0luZm8gPSBOVUxMOworCX0KK30KKworLyogYW1nZXRiYXRj aCwgcGxhaW4gaW5kZXggc2NhbiAqLworcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5k ZXhfcGxhaW5fYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJ CQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIFR1cGxlVGFi bGVTbG90ICpzbG90KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwICYmIHNjYW4tPnVz ZWJhdGNocmluZyk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdl dGJhdGNoICE9IE5VTEwpOworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2Nh biwgZGlyZWN0aW9uLCBzbG90LCBmYWxzZSwgdHJ1ZSk7Cit9CisKKy8qIGFtZ2V0YmF0Y2gsIGlu ZGV4LW9ubHkgc2NhbiAqLworcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfb25s eV9hbWdldGJhdGNoX2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJ ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpz bG90KQoreworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgc2Nhbi0+dXNlYmF0Y2hyaW5n KTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0g TlVMTCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rp b24sIHNsb3QsIHRydWUsIHRydWUpOwogfQogCiAvKiBhbWdldHR1cGxlLCBwbGFpbiBpbmRleCBz Y2FuICovCkBAIC05MSwxMCArMTgxLDEwIEBAIGhlYXBhbV9pbmRleF9wbGFpbl9hbWdldHR1cGxl X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkJICAgU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24sCiAJCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCiB7Ci0J QXNzZXJ0KCFzY2FuLT54c193YW50X2l0dXApOworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVw ICYmICFzY2FuLT51c2ViYXRjaHJpbmcpOwogCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5y ZF9pbmRhbS0+YW1nZXR0dXBsZSAhPSBOVUxMKTsKIAotCXJldHVybiBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UpOworCXJldHVybiBoZWFwYW1f aW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIGRpcmVjdGlvbiwgc2xvdCwgZmFsc2UsIGZhbHNlKTsK IH0KIAogLyogYW1nZXR0dXBsZSwgaW5kZXgtb25seSBzY2FuICovCkBAIC0xMDMsMTAgKzE5Mywx MCBAQCBoZWFwYW1faW5kZXhfb25seV9hbWdldHR1cGxlX2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sCiAJCQkJCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCQkJCQkJ CQkgIFR1cGxlVGFibGVTbG90ICpzbG90KQogewotCUFzc2VydChzY2FuLT54c193YW50X2l0dXAp OworCUFzc2VydChzY2FuLT54c193YW50X2l0dXAgJiYgIXNjYW4tPnVzZWJhdGNocmluZyk7CiAJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwp OwogCi0JcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCB0cnVlKTsKKwlyZXR1cm4gaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJl Y3Rpb24sIHNsb3QsIHRydWUsIGZhbHNlKTsKIH0KIAogYm9vbApAQCAtMTkwLDcgKzI4MCw3IEBA IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZV9pbXBsKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuLAogfQogCiAvKgotICogQ29tbW9uIGltcGxlbWVudGF0aW9uIGZvciBib3RoIGhlYXBh bV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4KKyAqIENvbW1vbiBpbXBsZW1lbnRhdGlv biBmb3IgYWxsIGZvdXIgaGVhcGFtX2luZGV4XypfZ2V0bmV4dF9zbG90IHZhcmlhbnRzLgogICoK ICAqIFRoZSByZXN1bHQgaXMgdHJ1ZSBpZiBhIHR1cGxlIHNhdGlzZnlpbmcgdGhlIHNjYW4ga2V5 cyBhbmQgdGhlIHNuYXBzaG90IHdhcwogICogZm91bmQsIGZhbHNlIG90aGVyd2lzZS4gIFRoZSB0 dXBsZSBpcyBzdG9yZWQgaW4gdGhlIHNwZWNpZmllZCBzbG90LgpAQCAtMTk5LDEyICsyODksMTMg QEAgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKnNjYW4sCiAgKiBkcm9wcGVkIGJ5IGEgZnV0dXJlIGNhbGwgaGVyZSAob3IgYnkgYSBsYXRl ciBjYWxsIHRvIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQKICAqIHRocm91Z2ggaW5kZXhfZW5kc2Nh bikuCiAgKgotICogVGhlIGluZGV4X29ubHkgcGFyYW1ldGVyIGlzIGEgY29tcGlsZS10aW1lIGNv bnN0YW50IGF0IGVhY2ggY2FsbCBzaXRlLAotICogYWxsb3dpbmcgdGhlIGNvbXBpbGVyIHRvIHNw ZWNpYWxpemUgdGhlIGNvZGUgZm9yIGVhY2ggdmFyaWFudC4KKyAqIFRoZSBpbmRleF9vbmx5IGFu ZCBhbWdldGJhdGNoIHBhcmFtZXRlcnMgYXJlIGNvbXBpbGUtdGltZSBjb25zdGFudHMgYXQgZWFj aAorICogY2FsbCBzaXRlLCBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lhbGl6ZSB0aGUg Y29kZSBmb3IgZWFjaCB2YXJpYW50OgogICovCiBzdGF0aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19p bmxpbmUgYm9vbAogaGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4s IFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwg Ym9vbCBpbmRleF9vbmx5KQorCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqc2xvdCwgYm9vbCBpbmRl eF9vbmx5LAorCQkJCQkJICBib29sIGFtZ2V0YmF0Y2gpCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRh ICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwogCUl0 ZW1Qb2ludGVyIHRpZDsKQEAgLTIyMiwxNCArMzEzLDIwIEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0 X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJaWYg KCFoZWFwX2NvbnRpbnVlKQogCQl7CiAJCQkvKiBHZXQgdGhlIG5leHQgVElEIGZyb20gdGhlIGlu ZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBkaXJlY3Rpb24pOworCQkJ aWYgKGFtZ2V0YmF0Y2gpCisJCQkJdGlkID0gaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJhdGNo X3BvcyhzY2FuLCBoc2NhbiwKKwkJCQkJCQkJCQkJCQkJIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJ CQkJIGluZGV4X29ubHkgPworCQkJCQkJCQkJCQkJCQkgJmFsbF92aXNpYmxlIDogTlVMTCk7CisJ CQllbHNlCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKIAog CQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KIAkJCWlm ICh0aWQgPT0gTlVMTCkKIAkJCQlicmVhazsKIAotCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMs IGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLwotCQkJaWYgKGluZGV4X29ubHkpCisJCQkvKiBG b3Igbm9uLWJhdGNoIGluZGV4LW9ubHkgc2NhbnMsIGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAq LworCQkJaWYgKGluZGV4X29ubHkgJiYgIWFtZ2V0YmF0Y2gpCiAJCQkJYWxsX3Zpc2libGUgPSBW TV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCiAJCQkJCQkJCQkJCSBJdGVtUG9pbnRl ckdldEJsb2NrTnVtYmVyKHRpZCksCiAJCQkJCQkJCQkJCSAmaHNjYW4tPnhzX3ZtYnVmZmVyKTsK QEAgLTI1Myw3ICszNTAsOCBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJaWYgKHNjYW4tPmluc3RydW1l bnQpCiAJCQkJCXNjYW4tPmluc3RydW1lbnQtPm50YWJsZWZldGNoZXMrKzsKIAotCQkJCWlmICgh aGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUpKQorCQkJ CWlmICghaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUs CisJCQkJCQkJCQkJCSBhbWdldGJhdGNoKSkKIAkJCQl7CiAJCQkJCS8qCiAJCQkJCSAqIE5vIHZp c2libGUgdHVwbGUuICBJZiBjYWxsZXIgc2V0IGEgdmlzaXRlZC1wYWdlcyBsaW1pdApAQCAtMzEx LDcgKzQwOSw4IEBAIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKIAkJCSAqIGVudHJ5LiAgSWYgd2UgZG9uJ3QgZmlu ZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlCiAJCQkgKiBuZXh0IFRJRCBmcm9t IHRoZSBpbmRleC4KIAkJCSAqLwotCQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKHNjYW4s IHNsb3QsICZoZWFwX2NvbnRpbnVlKSkKKwkJCWlmIChoZWFwYW1faW5kZXhfZmV0Y2hfaGVhcChz Y2FuLCBzbG90LCAmaGVhcF9jb250aW51ZSwKKwkJCQkJCQkJCQlhbWdldGJhdGNoKSkKIAkJCQly ZXR1cm4gdHJ1ZTsKIAkJfQogCX0KQEAgLTMzMyw3ICs0MzIsNyBAQCBoZWFwYW1faW5kZXhfZ2V0 bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAg Ki8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBib29sCiBoZWFwYW1faW5kZXhf ZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJ CQkJYm9vbCAqaGVhcF9jb250aW51ZSkKKwkJCQkJCWJvb2wgKmhlYXBfY29udGludWUsIGJvb2wg YW1nZXRiYXRjaCkKIHsKIAlib29sCQlhbGxfZGVhZCA9IGZhbHNlOwogCWJvb2wJCWZvdW5kOwpA QCAtMzQ2LDE0ICs0NDUsMzE0IEBAIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNo KHNjYW4tPmluZGV4UmVsYXRpb24pOwogCiAJLyoKLQkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUg SE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4Ci0JICogQU0g dG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4g dGhlIG5leHQKLQkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdl IGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KLQkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9s YXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KLQkgKiBSZWxhdGlvbkdldEluZGV4 U2NhbigpLgorCSAqIElmIHdlIHNjYW5uZWQgYSB3aG9sZSBIT1QgY2hhaW4gYW5kIGZvdW5kIG9u bHkgZGVhZCB0dXBsZXMsIHJlbWVtYmVyIGl0CisJICogZm9yIGxhdGVyLiAgV2UgZG8gbm90IGRv IHRoaXMgd2hlbiBpbiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9sYXRlCisJICogTVZDQyB0 byBkbyBzby4gIFNlZSBjb21tZW50cyBpbiBSZWxhdGlvbkdldEluZGV4U2NhbigpLgogCSAqLwog CWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQotCQlzY2FuLT5raWxsX3ByaW9yX3R1 cGxlID0gYWxsX2RlYWQ7CisJeworCQlpZiAoYW1nZXRiYXRjaCkKKwkJeworCQkJaWYgKGFsbF9k ZWFkKQorCQkJCXRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKHNjYW4pOworCQl9CisJCWVs c2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0dXBsZS1iYXNlZCBpbmRleCBBTSB0byBr aWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAqICh0aGlzIHdpbGwgdGFrZSBlZmZlY3Qg aW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQpCisJCQkgKi8KKwkJCXNjYW4t PmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0KIAogCXJldHVybiBmb3VuZDsK IH0KKworLyoKKyAqIEdldCBuZXh0IFRJRCBmcm9tIGJhdGNoIHJpbmcgYnVmZmVyLCBtb3Zpbmcg aW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLgorICogQWxzbyBzZXRzICphbGxfdmlzaWJsZSBm b3IgaXRlbSB3aGVuIGNhbGxlciBwYXNzZXMgYSBub24tTlVMTCBhcmcuCisgKi8KK3N0YXRpYyBw Z19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZSBJdGVtUG9pbnRlcgoraGVhcGFtX2luZGV4X2dldG5l eHRfc2NhbmJhdGNoX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCSAgIEluZGV4RmV0 Y2hIZWFwRGF0YSAqaHNjYW4sCisJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAor CQkJCQkJCQkgICBib29sICphbGxfdmlzaWJsZSkKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNo cmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBv cyA9ICZiYXRjaHJpbmdidWYtPnNjYW5Qb3M7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoID0g TlVMTDsKKwlib29sCQloYWRFeGlzdGluZ1NjYW5CYXRjaDsKKworCUFzc2VydCghc2NhblBvcy0+ dmFsaWQgfHwgYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2ggPT0gc2NhblBvcy0+YmF0Y2gpOworCUFz c2VydChzY2FuUG9zLT52YWxpZCB8fCBpbmRleF9zY2FuX2JhdGNoX2NvdW50KHNjYW4pID09IDAp OworCUFzc2VydChhbGxfdmlzaWJsZSA9PSBOVUxMIHx8IHNjYW4tPnhzX3dhbnRfaXR1cCk7CisK KwkvKgorCSAqIENoZWNrIGlmIHRoZXJlJ3MgYW4gZXhpc3RpbmcgbG9hZGVkIHNjYW5CYXRjaCBm b3IgdXMgdG8gcmV0dXJuIHRoZSBuZXh0CisJICogbWF0Y2hpbmcgaXRlbSdzIFRJRC9pbmRleCB0 dXBsZSBmcm9tCisJICovCisJaGFkRXhpc3RpbmdTY2FuQmF0Y2ggPSBzY2FuUG9zLT52YWxpZDsK KwlpZiAoc2NhblBvcy0+dmFsaWQpCisJeworCQkvKgorCQkgKiBzY2FuUG9zIGlzIHZhbGlkLCBz byBzY2FuQmF0Y2ggbXVzdCBhbHJlYWR5IGJlIGxvYWRlZCBpbiBiYXRjaCByaW5nCisJCSAqIGJ1 ZmZlci4gIFdlIHJlbHkgb24gdGhhdCBoZXJlLgorCQkgKi8KKwkJcGdfYXNzdW1lKGJhdGNocmlu Z2J1Zi0+aGVhZEJhdGNoID09IHNjYW5Qb3MtPmJhdGNoKTsKKworCQlzY2FuQmF0Y2ggPSBpbmRl eF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKTsKKworCQlpZiAoaW5kZXhfc2Nhbl9w b3NfYWR2YW5jZShkaXJlY3Rpb24sIHNjYW5CYXRjaCwgc2NhblBvcykpCisJCQlyZXR1cm4gaGVh cGFtX2luZGV4X3JldHVybl9zY2FucG9zX3RpZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJICAgc2NhbkJhdGNoLCBzY2FuUG9zLAorCQkJCQkJCQkJCQkJICAgYWxsX3Zpc2li bGUpOworCX0KKworCS8qCisJICogRWl0aGVyIHJhbiBvdXQgb2YgaXRlbXMgZnJvbSBvdXIgZXhp c3Rpbmcgc2NhbkJhdGNoLCBvciBpdCBoYXNuJ3QgYmVlbgorCSAqIGxvYWRlZCB5ZXQgKGJlY2F1 c2UgdGhpcyBpcyB0aGUgZmlyc3QgY2FsbCBoZXJlIGZvciB0aGUgZW50aXJlIHNjYW4pLgorCSAq IFRyeSB0byBhZHZhbmNlIHNjYW5CYXRjaCB0byB0aGUgbmV4dCBiYXRjaCAob3IgZ2V0IHRoZSBm aXJzdCBiYXRjaCkuCisJICovCisJc2NhbkJhdGNoID0gdGFibGVhbV91dGlsX2ZldGNoX25leHRf YmF0Y2goc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkgIHNjYW5CYXRjaCwgc2NhblBvcyk7 CisKKwlpZiAoIXNjYW5CYXRjaCkKKwl7CisJCS8qCisJCSAqIFdlJ3JlIGRvbmU7IG5vIG1vcmUg YmF0Y2hlcyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4KKwkJICoKKwkJICogTm90ZTog c2NhblBvcyBpcyBnZW5lcmFsbHkgc3RpbGwgdmFsaWQgYXQgdGhpcyBwb2ludC4gIFRoZSBzY2Fu CisJCSAqIG1pZ2h0IHN0aWxsIGJhY2sgdXAgaW4gdGhlIG90aGVyIGRpcmVjdGlvbi4KKwkJICov CisJCXJldHVybiBOVUxMOworCX0KKworCS8qCisJICogQWR2YW5jZWQgc2NhbkJhdGNoLiAgTm93 IHBvc2l0aW9uIHNjYW5Qb3MgdG8gdGhlIHN0YXJ0IG9mIG5ldworCSAqIHNjYW5CYXRjaC4KKwkg Ki8KKwlpbmRleF9zY2FuX3Bvc19uZXh0YmF0Y2goZGlyZWN0aW9uLCBzY2FuQmF0Y2gsIHNjYW5Q b3MpOworCUFzc2VydChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJhdGNoKSA9PSBz Y2FuQmF0Y2gpOworCisJLyoKKwkgKiBSZW1vdmUgdGhlIGhlYWQgYmF0Y2ggZnJvbSB0aGUgYmF0 Y2ggcmluZyBidWZmZXIgKGV4Y2VwdCB3aGVuIHRoaXMgbmV3CisJICogc2NhbkJhdGNoIGlzIG91 ciBvbmx5IG9uZSkKKwkgKi8KKwlpZiAoaGFkRXhpc3RpbmdTY2FuQmF0Y2gpCisJeworCQlJbmRl eFNjYW5CYXRjaCBoZWFkQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sCisJCQkJCQkJCQkJ CQkJYmF0Y2hyaW5nYnVmLT5oZWFkQmF0Y2gpOworCisJCUFzc2VydChoZWFkQmF0Y2ggIT0gc2Nh bkJhdGNoKTsKKwkJQXNzZXJ0KGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoICE9IHNjYW5Qb3MtPmJh dGNoKTsKKworCQkvKiBmcmVlIG9ic29sZXNjZW50IGhlYWQgYmF0Y2ggKHVubGVzcyBpdCBpcyBz Y2FuJ3MgbWFya0JhdGNoKSAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBoZWFk QmF0Y2gpOworCisJCS8qIFJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUgcmluZyBidWZmZXIgKGV2 ZW4gaWYgaXQncyBtYXJrQmF0Y2gpICovCisJCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoKys7CisJ fQorCisJLyogSW4gcHJhY3RpY2Ugc2NhbkJhdGNoIHdpbGwgYWx3YXlzIGJlIHRoZSByaW5nIGJ1 ZmZlcidzIGhlYWRCYXRjaCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBz Y2FuUG9zLT5iYXRjaCk7CisKKwlyZXR1cm4gaGVhcGFtX2luZGV4X3JldHVybl9zY2FucG9zX3Rp ZChzY2FuLCBoc2NhbiwgZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIHNjYW5CYXRjaCwgc2NhblBv cywgYWxsX3Zpc2libGUpOworfQorCisvKgorICogU2F2ZSB0aGUgY3VycmVudCBzY2FuUG9zL3Nj YW5CYXRjaCBpdGVtJ3MgVElEIGluIHNjYW4ncyB4c19oZWFwdGlkLCBhbmQKKyAqIHJldHVybiBh IHBvaW50ZXIgdG8gdGhhdCBUSUQuICBXaGVuIGFsbF92aXNpYmxlIGlzbid0IE5VTEwgKGR1cmlu ZyBhbgorICogaW5kZXgtb25seSBzY2FuKSwgYWxzbyBzZXRzIGl0ZW0ncyB2aXNpYmlsaXR5IHN0 YXR1cyBpbiAqYWxsX3Zpc2libGUuCisgKgorICogaGVhcGFtX2luZGV4X2dldG5leHRfc2NhbmJh dGNoX3BvcyBoZWxwZXIgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBpbmxpbmUgSXRlbVBvaW50ZXIK K2hlYXBhbV9pbmRleF9yZXR1cm5fc2NhbnBvc190aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRl eEZldGNoSGVhcERhdGEgKmhzY2FuLAorCQkJCQkJCQlTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCQkJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoLAorCQkJCQkJCQlCYXRjaFJpbmdJdGVt UG9zICpzY2FuUG9zLAorCQkJCQkJCQlib29sICphbGxfdmlzaWJsZSkKK3sKKwlIZWFwQmF0Y2hE YXRhICpoYmF0Y2g7CisKKwlwZ3N0YXRfY291bnRfaW5kZXhfdHVwbGVzKHNjYW4tPmluZGV4UmVs YXRpb24sIDEpOworCisJLyogU2V0IHhzX2hlYXB0aWQsIHdoaWNoIGhlYXBhbV9pbmRleF9nZXRu ZXh0X3Nsb3Qgd2lsbCBuZWVkICovCisJc2Nhbi0+eHNfaGVhcHRpZCA9IHNjYW5CYXRjaC0+aXRl bXNbc2NhblBvcy0+aXRlbV0udGFibGVUaWQ7CisKKwlpZiAoYWxsX3Zpc2libGUgPT0gTlVMTCkK Kwl7CisJCS8qCisJCSAqIFBsYWluIGluZGV4IHNjYW4uCisJCSAqLworCQlBc3NlcnQoIXNjYW4t PnhzX3dhbnRfaXR1cCk7CisJCXJldHVybiAmc2Nhbi0+eHNfaGVhcHRpZDsKKwl9CisKKwkvKgor CSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkgKgorCSAqIEFsc28gc2V0IHhzX2l0dXAsIHdoaWNoIGhl YXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgbmVlZHMgdG9vLgorCSAqLworCUFzc2VydChzY2FuLT54 c193YW50X2l0dXApOworCXNjYW4tPnhzX2l0dXAgPSAoSW5kZXhUdXBsZSkgKHNjYW5CYXRjaC0+ Y3VyclR1cGxlcyArCisJCQkJCQkJCSAgc2NhbkJhdGNoLT5pdGVtc1tzY2FuUG9zLT5pdGVtXS50 dXBsZU9mZnNldCk7CisKKwkvKgorCSAqIFNldCB2aXNpYmlsaXR5IGluZm8gZm9yIHRoZSBjdXJy ZW50IHNjYW5Qb3MgaXRlbSAocGx1cyBwb3NzaWJseSBzb21lCisJICogYWRkaXRpb25hbCBpdGVt cyBpbiB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbikgYXMgbmVlZGVkCisJICovCisJaGJhdGNo ID0gaGVhcF9iYXRjaF9kYXRhKHNjYW5CYXRjaCwgc2Nhbik7CisJaWYgKCEoaGJhdGNoLT52aXNJ bmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpCisJCWhlYXBhbV9p bmRleF9iYXRjaF9wb3NfdmlzaWJpbGl0eShzY2FuLCBkaXJlY3Rpb24sIHNjYW5CYXRjaCwgaGJh dGNoLAorCQkJCQkJCQkJCSAgc2NhblBvcyk7CisKKwkvKiBGaW5hbGx5LCBzZXQgYWxsX3Zpc2li bGUgZm9yIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3QgKi8KKwkqYWxsX3Zpc2libGUgPQorCQko aGJhdGNoLT52aXNJbmZvW3NjYW5Qb3MtPml0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQUxMX1ZJU0lC TEUpICE9IDA7CisKKwlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7Cit9CisKKy8qCisgKiBPYnRh aW4gdmlzaWJpbGl0eSBpbmZvcm1hdGlvbiBmb3IgYSBUSUQgZnJvbSBjYWxsZXIncyBiYXRjaC4K KyAqCisgKiBDYWxsZWQgZHVyaW5nIGFtZ2V0YmF0Y2ggaW5kZXgtb25seSBzY2Fucy4gIFdlIGFs d2F5cyBjaGVjayB0aGUgdmlzaWJpbGl0eQorICogb2YgY2FsbGVyJ3MgaXRlbSAoYW4gb2Zmc2V0 IGludG8gY2FsbGVyJ3MgYmF0Y2gtPml0ZW1zW10gYXJyYXkpLiAgV2UgbWlnaHQKKyAqIGFsc28g c2V0IHZpc2liaWxpdHkgaW5mbyBmb3Igb3RoZXIgaXRlbXMgZnJvbSBjYWxsZXIncyBiYXRjaCBt b3JlCisgKiBwcm9hY3RpdmVseSB3aGVuIHRoYXQgbWFrZXMgc2Vuc2UuCisgKgorICogV2Uga2Vl cCB0d28gY29tcGV0aW5nIGNvbnNpZGVyYXRpb25zIGluIGJhbGFuY2Ugd2hlbiBkZXRlcm1pbmlu ZyB3aGV0aGVyIHRvCisgKiBjaGVjayBhZGRpdGlvbmFsIGl0ZW1zOiB0aGUgbmVlZCB0byBrZWVw IHRoZSBjb3N0IG9mIHZpc2liaWxpdHkgbWFwIGFjY2VzcworICogdW5kZXIgY29udHJvbCB3aGVu IG1vc3QgaXRlbXMgd2lsbCBuZXZlciBiZSByZXR1cm5lZCBieSB0aGUgc2NhbiBhbnl3YXkKKyAq IChpbXBvcnRhbnQgZm9yIGlubmVyIGluZGV4IHNjYW5zIG9mIGFudGktam9pbnMgYW5kIHNlbWkt am9pbnMpLCBhbmQgdGhlCisgKiBuZWVkIHRvIHVuZ3VhcmQgYmF0Y2hlcyBwcm9tcHRseS4KKyAq CisgKiBPbmNlIHdlJ3ZlIHJlc29sdmVkIHZpc2liaWxpdHkgZm9yIGFsbCBpdGVtcyBpbiBhIGJh dGNoLCB3ZSBjYW4gc2FmZWx5CisgKiB1bmd1YXJkIGl0IGJ5IGNhbGxpbmcgYW11bmd1YXJkYmF0 Y2guICBUaGlzIGlzIHNhZmUgd2l0aCByZXNwZWN0IHRvCisgKiBjb25jdXJyZW50IFZBQ1VVTSBi ZWNhdXNlIHRoZSBiYXRjaCdzIGd1YXJkICh0eXBpY2FsbHkgYSBidWZmZXIgcGluIG9uIHRoZQor ICogb3JpZ2luYXRpbmcgaW5kZXggcGFnZSkgYmxvY2tzIFZBQ1VVTSBmcm9tIGFjcXVpcmluZyBh IGNvbmZsaWN0aW5nIGNsZWFudXAKKyAqIGxvY2sgb24gdGhhdCBwYWdlLiAgQ29weWluZyB0aGUg cmVsZXZhbnQgdmlzaWJpbGl0eSBtYXAgZGF0YSBpbnRvIG91ciBsb2NhbAorICogY2FjaGUgc3Vm ZmljZXMgdG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nOiBpZiBhbnkg b2YgdGhlc2UKKyAqIFRJRHMgcG9pbnQgdG8gZGVhZCBoZWFwIHR1cGxlcywgVkFDVVVNIGNhbm5v dCBwb3NzaWJseSByZXR1cm4gZnJvbQorICogYW1idWxrZGVsZXRlIGFuZCBtYXJrIHRoZSBwb2lu dGVkLXRvIGhlYXAgcGFnZXMgYXMgYWxsLXZpc2libGUuICBWQUNVVU0KKyAqIF9jYW5fIGRvIHNv IG9uY2UgdGhlIGJhdGNoIGlzIHVuZ3VhcmRlZCwgYnV0IHRoYXQncyBva2F5OyB3ZSdsbCBiZSB3 b3JraW5nCisgKiBvZmYgb2YgY2FjaGVkIHZpc2liaWxpdHkgaW5mbyB0aGF0IGluZGljYXRlcyB0 aGF0IHRoZSBkZWFkIFRJRHMgYXJlIE5PVAorICogYWxsLXZpc2libGUuCisgKgorICogV2hhdCBh Ym91dCB0aGUgb3Bwb3NpdGUgY2FzZSwgd2hlcmUgYSBwYWdlIHdhcyBhbGwtdmlzaWJsZSB3aGVu IHdlIGNhY2hlZAorICogdGhlIFZNIGJpdHMgYnV0IHR1cGxlcyBvbiBpdCBhcmUgZGVsZXRlZCBh ZnRlcndhcmRzPyAgVGhhdCBpcyBzYWZlIHRvbzogYW55CisgKiB0dXBsZSB0aGF0IHdhcyB2aXNp YmxlIHRvIGFsbCB3aGVuIHdlIHJlYWQgdGhlIFZNIG11c3QgYWxzbyBiZSB2aXNpYmxlIHRvCisg KiBvdXIgTVZDQyBzbmFwc2hvdCwgc28gaXQgaXMgY29ycmVjdCB0byBza2lwIHRoZSBoZWFwIGZl dGNoIGZvciB0aG9zZSBUSURzLgorICovCitzdGF0aWMgdm9pZAoraGVhcGFtX2luZGV4X2JhdGNo X3Bvc192aXNpYmlsaXR5KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sCisJCQkJCQkJCSAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsIEhlYXBCYXRjaERhdGEgKmhiYXRj aCwKKwkJCQkJCQkJICBCYXRjaFJpbmdJdGVtUG9zICpwb3MpCit7CisJSW5kZXhGZXRjaEhlYXBE YXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNoOwor CWludAkJCXBvc0l0ZW0gPSBwb3MtPml0ZW07CisJYm9vbAkJYWxsYmF0Y2hpdGVtc3Zpc2libGU7 CisJQmxvY2tOdW1iZXIgY3Vydm1oZWFwYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJdWlu dDgJCWN1cnZtaGVhcGJsa2ZsYWdzID0gMDsKKworCUFzc2VydChoYmF0Y2ggPT0gaGVhcF9iYXRj aF9kYXRhKGJhdGNoLCBzY2FuKSk7CisKKwkvKgorCSAqIFRoZSBiYXRjaCBtdXN0IHN0aWxsIGJl IGd1YXJkZWQgKGFtdW5ndWFyZGJhdGNoIGhhcyBub3QgYmVlbiBjYWxsZWQKKwkgKiB5ZXQpLCBz byB0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgaXMgc3RpbGwgaW4gZWZmZWN0LgorCSAqLwor CUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKworCS8qCisJICogU2V0IHZp c2liaWxpdHkgaW5mbyBmb3IgYSByYW5nZSBvZiBpdGVtcywgaW4gc2NhbiBvcmRlci4KKwkgKgor CSAqIE5vdGU6IHZpc2liaWxpdHltYXBfZ2V0X3N0YXR1cyBkb2VzIG5vdCBsb2NrIHRoZSB2aXNp YmlsaXR5IG1hcCBidWZmZXIsCisJICogc28gdGhlIHJlc3VsdCBjb3VsZCBiZSBzbGlnaHRseSBz dGFsZS4gIFNlZSB0aGUgIk1lbW9yeSBvcmRlcmluZworCSAqIGVmZmVjdHMiIGRpc2N1c3Npb24g YWJvdmUgdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGZvciBhbiBleHBsYW5hdGlvbgorCSAqIG9m IHdoeSB0aGlzIGlzIG9rYXkuCisJICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly ZWN0aW9uKSkKKwl7CisJCWludAkJCWxhc3RTZXRJdGVtID0gTWluKGJhdGNoLT5sYXN0SXRlbSwK KwkJCQkJCQkJCSAgcG9zSXRlbSArIGhzY2FuLT54c192bV9pdGVtcyAtIDEpOworCisJCWZvciAo aW50IHNldEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtIDw9IGxhc3RTZXRJdGVtOyBzZXRJdGVtKysp CisJCXsKKwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0udGFibGVU aWQ7CisJCQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVy KHRpZCk7CisJCQl1aW50OAkJZmxhZ3M7CisKKwkJCWlmIChoZWFwYmxrbm8gPT0gY3Vydm1oZWFw Ymxrbm8pCisJCQl7CisJCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxr ZmxhZ3M7CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZsYWdzID0gSEVBUF9CQVRDSF9WSVNf Q0hFQ0tFRDsKKwkJCWlmIChWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sIGhlYXBi bGtubywgJmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQkJZmxhZ3MgfD0gSEVBUF9CQVRDSF9WSVNf QUxMX1ZJU0lCTEU7CisKKwkJCWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJs a2ZsYWdzID0gZmxhZ3M7CisJCQljdXJ2bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwkJfQorCisJ CWFsbGJhdGNoaXRlbXN2aXNpYmxlID0gbGFzdFNldEl0ZW0gPj0gYmF0Y2gtPmxhc3RJdGVtICYm CisJCQkocG9zSXRlbSA9PSBiYXRjaC0+Zmlyc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5m b1tiYXRjaC0+Zmlyc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpKTsKKwl9CisJZWxz ZQorCXsKKwkJaW50CQkJbGFzdFNldEl0ZW0gPSBNYXgoYmF0Y2gtPmZpcnN0SXRlbSwKKwkJCQkJ CQkJCSAgcG9zSXRlbSAtIGhzY2FuLT54c192bV9pdGVtcyArIDEpOworCisJCWZvciAoaW50IHNl dEl0ZW0gPSBwb3NJdGVtOyBzZXRJdGVtID49IGxhc3RTZXRJdGVtOyBzZXRJdGVtLS0pCisJCXsK KwkJCUl0ZW1Qb2ludGVyIHRpZCA9ICZiYXRjaC0+aXRlbXNbc2V0SXRlbV0udGFibGVUaWQ7CisJ CQlCbG9ja051bWJlciBoZWFwYmxrbm8gPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7 CisJCQl1aW50OAkJZmxhZ3M7CisKKwkJCWlmIChoZWFwYmxrbm8gPT0gY3Vydm1oZWFwYmxrbm8p CisJCQl7CisJCQkJaGJhdGNoLT52aXNJbmZvW3NldEl0ZW1dID0gY3Vydm1oZWFwYmxrZmxhZ3M7 CisJCQkJY29udGludWU7CisJCQl9CisKKwkJCWZsYWdzID0gSEVBUF9CQVRDSF9WSVNfQ0hFQ0tF RDsKKwkJCWlmIChWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sIGhlYXBibGtubywg JmhzY2FuLT54c192bWJ1ZmZlcikpCisJCQkJZmxhZ3MgfD0gSEVBUF9CQVRDSF9WSVNfQUxMX1ZJ U0lCTEU7CisKKwkJCWhiYXRjaC0+dmlzSW5mb1tzZXRJdGVtXSA9IGN1cnZtaGVhcGJsa2ZsYWdz ID0gZmxhZ3M7CisJCQljdXJ2bWhlYXBibGtubyA9IGhlYXBibGtubzsKKwkJfQorCisJCWFsbGJh dGNoaXRlbXN2aXNpYmxlID0gbGFzdFNldEl0ZW0gPD0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJ KHBvc0l0ZW0gPT0gYmF0Y2gtPmxhc3RJdGVtIHx8CisJCQkgKGhiYXRjaC0+dmlzSW5mb1tiYXRj aC0+bGFzdEl0ZW1dICYgSEVBUF9CQVRDSF9WSVNfQ0hFQ0tFRCkpOworCX0KKworCS8qCisJICog SXQncyBzYWZlIHRvIHVuZ3VhcmQgdGhlIGJhdGNoICh2aWEgYW11bmd1YXJkYmF0Y2gpIGFzIHNv b24gYXMgd2UndmUKKwkgKiByZXNvbHZlZCB0aGUgdmlzaWJpbGl0eSBzdGF0dXMgb2YgYWxsIG9m IGl0cyBpdGVtcyAodW5sZXNzIHRoaXMgaXMgYQorCSAqIG5vbi1NVkNDIHNjYW4pCisJICovCisJ aWYgKGFsbGJhdGNoaXRlbXN2aXNpYmxlKQorCXsKKwkJQXNzZXJ0KGhiYXRjaC0+dmlzSW5mb1ti YXRjaC0+Zmlyc3RJdGVtXSAmIEhFQVBfQkFUQ0hfVklTX0NIRUNLRUQpOworCQlBc3NlcnQoaGJh dGNoLT52aXNJbmZvW2JhdGNoLT5sYXN0SXRlbV0gJiBIRUFQX0JBVENIX1ZJU19DSEVDS0VEKTsK KworCQlpZiAoYmF0Y2gtPmlzR3VhcmRlZCAmJiBzY2FuLT5NVkNDU2NhbikKKwkJCXRhYmxlYW1f dXRpbF91bmd1YXJkX2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIEVsc2UgY2hl Y2sgdmlzaWJpbGl0eSBmb3IgdHdpY2UgYXMgbWFueSBpdGVtcyBuZXh0IHRpbWUsIG9yIGFsbCBp dGVtcy4KKwkgKiBXZSBjaGVjayBhbGwgaXRlbXMgaW4gb25lIGdvIG9uY2Ugd2UncmUgcGFzc2Vk IHRoZSBzY2FuJ3MgZmlyc3QgYmF0Y2guCisJICovCisJZWxzZSBpZiAoaHNjYW4tPnhzX3ZtX2l0 ZW1zIDwgKGJhdGNoLT5sYXN0SXRlbSAtIGJhdGNoLT5maXJzdEl0ZW0pKQorCQloc2Nhbi0+eHNf dm1faXRlbXMgKj0gMjsKKwllbHNlCisJCWhzY2FuLT54c192bV9pdGVtcyA9IHNjYW4tPm1heGl0 ZW1zYmF0Y2g7Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZp bGUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKaW5kZXggNmYyZTMwNjFhLi5l NmQ2ODFiNDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9NYWtlZmlsZQor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvTWFrZWZpbGUKQEAgLTE2LDYgKzE2LDcgQEAg T0JKUyA9IFwKIAlhbWFwaS5vIFwKIAlhbXZhbGlkYXRlLm8gXAogCWdlbmFtLm8gXAotCWluZGV4 YW0ubworCWluZGV4YW0ubyBcCisJaW5kZXhiYXRjaC5vCiAKIGluY2x1ZGUgJCh0b3Bfc3JjZGly KS9zcmMvYmFja2VuZC9jb21tb24ubWsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9p bmRleC9hbWFwaS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2FtYXBpLmMKaW5kZXggZWZh MDA3MDMwLi5hYmE5ZTJiNDYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9h bWFwaS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9hbWFwaS5jCkBAIC01NSw2ICs1 NSwxMSBAQCBHZXRJbmRleEFtUm91dGluZShPaWQgYW1oYW5kbGVyKQogCUFzc2VydChyb3V0aW5l LT5hbXJlc2NhbiAhPSBOVUxMKTsKIAlBc3NlcnQocm91dGluZS0+YW1lbmRzY2FuICE9IE5VTEwp OwogCisJLyogQXNzZXJ0IHRoYXQgQU0gZG9lc24ndCBoYXZlIGFuIGludmFsaWQgY29tYmluYXRp b24gb2YgY2FsbGJhY2tzICovCisJQXNzZXJ0KHJvdXRpbmUtPmFta2lsbGl0ZW1zYmF0Y2ggPT0g TlVMTCB8fCByb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwpOworCUFzc2VydCgocm91dGluZS0+ YW1nZXRiYXRjaCAhPSBOVUxMKSA9PSAocm91dGluZS0+YW11bmd1YXJkYmF0Y2ggIT0gTlVMTCkp OworCUFzc2VydChyb3V0aW5lLT5hbWdldGJhdGNoICE9IE5VTEwgfHwgcm91dGluZS0+YW1wb3Ny ZXNldCA9PSBOVUxMKTsKKwogCXJldHVybiByb3V0aW5lOwogfQogCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9n ZW5hbS5jCmluZGV4IDBmZjc3MTM1ZC4uNzVlNmYyZGVlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2Vu YW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNob3Qg PSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCXNj YW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBub3Jk ZXJieXM7CisJc2Nhbi0+dXNlYmF0Y2hyaW5nID0gZmFsc2U7IC8qIHNldCBsYXRlciBmb3IgYW1n ZXRiYXRjaCBjYWxsZXJzICovCisJbWVtc2V0KCZzY2FuLT5iYXRjaGNhY2hlLCAwLCBzaXplb2Yo c2Nhbi0+YmF0Y2hjYWNoZSkpOwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29ya3NwYWNl IGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAtMTI2LDYg KzEyOCw5IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sIGlu dCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzY2FuLT54c19oaXR1cCA9IE5VTEw7CiAJc2Nhbi0+ eHNfaGl0dXBkZXNjID0gTlVMTDsKIAorCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID0g MDsKKwlzY2FuLT5iYXRjaF90dXBsZXNfd29ya3NwYWNlID0gMDsKKwlzY2FuLT5iYXRjaF90YWJs ZV9vZmZzZXQgPSAwOwogCXNjYW4tPnhzX3Zpc2l0ZWRfcGFnZXNfbGltaXQgPSAwOwogCiAJcmV0 dXJuIHNjYW47CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwppbmRleCAxODllNjc2ODQuLmUx MGVhYmFiZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCkBAIC00Miw2ICs0Miw3IEBA CiAjaW5jbHVkZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9hbWFwaS5oIgorI2lu Y2x1ZGUgImFjY2Vzcy9pbmRleGJhdGNoLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3JlbGF0aW9uLmgi CiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9wdGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nh bi5oIgpAQCAtMjk1LDYgKzI5Niw3IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKIAkJCQkJICAgaW50IG5rZXlzKQogewogCUFzc2VydChzbmFwc2hvdCAh PSBJbnZhbGlkU25hcHNob3QpOworCUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3Qp KTsKIAogCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtl eXMsIDAsIHNuYXBzaG90LCBOVUxMLAogCQkJCQkJCQkJZmFsc2UsIE5VTEwsIGZhbHNlLCBpbnN0 cnVtZW50KTsKQEAgLTMwNCw3ICszMDYsNyBAQCBpbmRleF9iZWdpbnNjYW5fYml0bWFwKFJlbGF0 aW9uIGluZGV4UmVsYXRpb24sCiAgKiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwgLS0tIGNvbW1v biBjb2RlIGZvciBpbmRleF9iZWdpbnNjYW4gdmFyaWFudHMKICAqCiAgKiBXaGVuIGhlYXBSZWxh dGlvbiBpcyBub3QgTlVMTCwgYWxzbyBpbml0aWFsaXplcyBoZWFwLXNpZGUgc2NhbiBzdGF0ZToK LSAqIGdldG5leHRfc2xvdCByZXNvbHV0aW9uIGFuZCB0YWJsZSBmZXRjaCBpbml0aWFsaXphdGlv bi4KKyAqIGJhdGNoIHJpbmcgc2V0dXAsIGdldG5leHRfc2xvdCByZXNvbHV0aW9uLCBhbmQgdGFi bGUgZmV0Y2ggaW5pdGlhbGl6YXRpb24uCiAgKi8KIHN0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlz X2lubGluZSBJbmRleFNjYW5EZXNjCiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24g aW5kZXhSZWxhdGlvbiwKQEAgLTM0NywxMyArMzQ5LDE5IEBAIGluZGV4X2JlZ2luc2Nhbl9pbnRl cm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAogCXsKIAkJc2Nhbi0+aGVhcFJlbGF0aW9uID0g aGVhcFJlbGF0aW9uOwogCQlzY2FuLT54c193YW50X2l0dXAgPSBpbmRleF9vbmx5X3NjYW47CisJ CXNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCA9IChzY2FuLT5NVkNDU2NhbiAmJiAhaW5kZXhf b25seV9zY2FuKTsKKworCQlpZiAoaW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2gg IT0gTlVMTCkKKwkJCWluZGV4X2JhdGNoc2Nhbl9pbml0KHNjYW4pOwogCiAJCS8qIFJlc29sdmUg d2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uIHRvIHVzZSBmb3IgdGhpcyBzY2FuICov CiAJCWlmIChpbmRleF9vbmx5X3NjYW4pCi0JCQlzY2FuLT54c19nZXRuZXh0X3Nsb3QgPQorCQkJ c2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0gc2Nhbi0+dXNlYmF0Y2hyaW5nID8KKwkJCQloZWFwUmVs YXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X29ubHlfYW1nZXRiYXRjaF9nZXRuZXh0X3Nsb3QgOgog CQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhfb25seV9hbWdldHR1cGxlX2dldG5l eHRfc2xvdDsKIAkJZWxzZQotCQkJc2Nhbi0+eHNfZ2V0bmV4dF9zbG90ID0KKwkJCXNjYW4tPnhz X2dldG5leHRfc2xvdCA9IHNjYW4tPnVzZWJhdGNocmluZyA/CisJCQkJaGVhcFJlbGF0aW9uLT5y ZF90YWJsZWFtLT5pbmRleF9wbGFpbl9hbWdldGJhdGNoX2dldG5leHRfc2xvdCA6CiAJCQkJaGVh cFJlbGF0aW9uLT5yZF90YWJsZWFtLT5pbmRleF9wbGFpbl9hbWdldHR1cGxlX2dldG5leHRfc2xv dDsKIAogCQkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwpA QCAtMzkyLDYgKzQwMCw5IEBAIGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAKIAlz Y2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KIAorCWlmIChz Y2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4X2JhdGNoc2Nhbl9yZXNldChzY2FuKTsKKwogCXNj YW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXJlc2NhbihzY2FuLCBrZXlzLCBua2V5cywK IAkJCQkJCQkJCQkJb3JkZXJieXMsIG5vcmRlcmJ5cyk7CiB9CkBAIC00MDYsNiArNDE3LDEzIEBA IGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNL X1NDQU5fUFJPQ0VEVVJFKGFtZW5kc2Nhbik7CiAKKwkvKiBGcmVlIGNhY2hlZCBiaXRtYXAgYmF0 Y2ggaWYgYW55IChiaXRtYXAgc2NhbnMgdXNlIGJhdGNoY2FjaGVbMF0pICovCisJaWYgKCFzY2Fu LT51c2ViYXRjaHJpbmcgJiYgc2Nhbi0+YmF0Y2hjYWNoZVswXSAhPSBOVUxMKQorCXsKKwkJcGZy ZWUoYmF0Y2hfYWxsb2NfYmFzZShzY2FuLT5iYXRjaGNhY2hlWzBdLCBzY2FuKSk7CisJCXNjYW4t PmJhdGNoY2FjaGVbMF0gPSBOVUxMOworCX0KKwogCS8qIFJlbGVhc2UgcmVzb3VyY2VzIChsaWtl IGJ1ZmZlciBwaW5zKSBmcm9tIHRhYmxlIGFjY2Vzc2VzICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKIAl7CkBAIC00MTMsNiArNDMxLDEwIEBAIGluZGV4X2VuZHNjYW4oSW5kZXhTY2FuRGVz YyBzY2FuKQogCQlzY2FuLT54c19oZWFwZmV0Y2ggPSBOVUxMOwogCX0KIAorCS8qIENsZWFudXAg YmF0Y2hpbmcsIHNvIHRoYXQgdGhlIEFNIGNhbiByZWxlYXNlIHBpbnMgYW5kIHNvIG9uLiAqLwor CWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4X2JhdGNoc2Nhbl9lbmQoc2Nhbik7CisK IAkvKiBFbmQgdGhlIEFNJ3Mgc2NhbiAqLwogCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFt LT5hbWVuZHNjYW4oc2Nhbik7CiAKQEAgLTQzNCwyNCArNDU2LDI1IEBAIHZvaWQKIGluZGV4X21h cmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogewogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1NDQU5f UFJPQ0VEVVJFKGFtbWFya3Bvcyk7CisJQ0hFQ0tfU0NBTl9QUk9DRURVUkUoYW1nZXRiYXRjaCk7 CiAKLQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1tYXJrcG9zKHNjYW4pOworCS8q IE9ubHkgYW1nZXRiYXRjaCBpbmRleCBBTXMgc3VwcG9ydCBtYXJrIGFuZCByZXN0b3JlICovCisJ aW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKHNjYW4pOwogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0t CiAgKgkJaW5kZXhfcmVzdHJwb3MJLSByZXN0b3JlIGEgc2NhbiBwb3NpdGlvbgogICoKLSAqIE5P VEU6IHRoaXMgb25seSByZXN0b3JlcyB0aGUgaW50ZXJuYWwgc2NhbiBzdGF0ZSBvZiB0aGUgaW5k ZXggQU0uICBTZWUKLSAqIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3MoKS4KKyAqIE5PVEU6IHRo aXMgb25seSByZXN0b3JlcyB0aGUgYmF0Y2ggcG9zaXRpb25hbCBzdGF0ZSBzaGFyZWQgYnkgdGhl IHRhYmxlIGFuZAorICogaW5kZXggQU1zLiAgU2VlIGNvbW1lbnRzIGZvciBFeGVjUmVzdHJQb3Mo KS4KICAqCiAgKiBOT1RFOiBGb3IgaGVhcCwgaW4gdGhlIHByZXNlbmNlIG9mIEhPVCBjaGFpbnMs IG1hcmsvcmVzdG9yZSBvbmx5IHdvcmtzCiAgKiBjb3JyZWN0bHkgaWYgdGhlIHNjYW4ncyBzbmFw c2hvdCBpcyBNVkNDLXNhZmU7IHRoYXQgZW5zdXJlcyB0aGF0IHRoZXJlJ3MgYXQKICAqIG1vc3Qg b25lIHJldHVybmFibGUgdHVwbGUgaW4gZWFjaCBIT1QgY2hhaW4sIGFuZCBzbyByZXN0b3Jpbmcg dGhlIHByaW9yCi0gKiBzdGF0ZSBhdCB0aGUgZ3JhbnVsYXJpdHkgb2YgdGhlIGluZGV4IEFNIGlz IHN1ZmZpY2llbnQuICBTaW5jZSB0aGUgb25seQotICogY3VycmVudCB1c2VyIG9mIG1hcmsvcmVz dG9yZSBmdW5jdGlvbmFsaXR5IGlzIG5vZGVNZXJnZWpvaW4uYywgdGhpcwotICogZWZmZWN0aXZl bHkgbWVhbnMgdGhhdCBtZXJnZS1qb2luIHBsYW5zIG9ubHkgd29yayBmb3IgTVZDQyBzbmFwc2hv dHMuICBUaGlzCi0gKiBjb3VsZCBiZSBmaXhlZCBpZiBuZWNlc3NhcnksIGJ1dCBmb3Igbm93IGl0 IHNlZW1zIHVuaW1wb3J0YW50LgorICogc3RhdGUgYXQgdGhlIHNjYW4gaXRlbSBncmFudWxhcml0 eSBpcyBzdWZmaWNpZW50LiAgU2luY2UgdGhlIG9ubHkgY3VycmVudAorICogdXNlciBvZiBtYXJr L3Jlc3RvcmUgZnVuY3Rpb25hbGl0eSBpcyBub2RlTWVyZ2Vqb2luLmMsIHRoaXMgZWZmZWN0aXZl bHkKKyAqIG1lYW5zIHRoYXQgbWVyZ2Utam9pbiBwbGFucyBvbmx5IHdvcmsgZm9yIE1WQ0Mgc25h cHNob3RzLiAgVGhpcyBjb3VsZCBiZQorICogZml4ZWQgaWYgbmVjZXNzYXJ5LCBidXQgZm9yIG5v dyBpdCBzZWVtcyB1bmltcG9ydGFudC4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwogdm9pZApA QCAtNDYwLDE1ICs0ODMsMTQgQEAgaW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQog CUFzc2VydChJc01WQ0NMaWtlU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5f Q0hFQ0tTOwotCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5f UFJPQ0VEVVJFKGFtZ2V0YmF0Y2gpOwogCiAJLyogcmVzZXQgdGFibGUgQU0gc3RhdGUgZm9yIHJl c2NhbiAqLwogCWlmIChzY2FuLT54c19oZWFwZmV0Y2gpCiAJCXRhYmxlX2luZGV4X2ZldGNoX3Jl c2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKLQlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFs c2U7IC8qIGZvciBzYWZldHkgKi8KLQotCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bXJlc3RycG9zKHNjYW4pOworCS8qIGFsc28gbm90aWZ5IHRhYmxlIEFNIGFuZCBpbmRleCBBTSAq LworCWluZGV4X2JhdGNoc2Nhbl9yZXN0b3JlX3BvcyhzY2FuKTsKIH0KIAogLyoKQEAgLTU5MCw2 ICs2MTIsOSBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYg KHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNf aGVhcGZldGNoKTsKIAorCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJCWluZGV4X2JhdGNoc2Nh bl9yZXNldChzY2FuKTsKKwogCS8qIGFtcGFyYWxsZWxyZXNjYW4gaXMgb3B0aW9uYWw7IGFzc3Vt ZSBuby1vcCBpZiBub3QgcHJvdmlkZWQgYnkgQU0gKi8KIAlpZiAoc2Nhbi0+aW5kZXhSZWxhdGlv bi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4gIT0gTlVMTCkKIAkJc2Nhbi0+aW5kZXhSZWxh dGlvbi0+cmRfaW5kYW0tPmFtcGFyYWxsZWxyZXNjYW4oc2Nhbik7CkBAIC02MzgsNiArNjYzLDcg QEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKIAogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0dHVw bGUpOworCUFzc2VydCghc2Nhbi0+dXNlYmF0Y2hyaW5nKTsKIAogCS8qIFhYWDogd2Ugc2hvdWxk IGFzc2VydCB0aGF0IGEgc25hcHNob3QgaXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KIAlBc3Nl cnQoVHJhbnNhY3Rpb25JZElzVmFsaWQoUmVjZW50WG1pbikpOwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwLi4zYWJm NTg0NTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhi YXRjaC5jCkBAIC0wLDAgKzEsNzQ4IEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiBpbmRl eGJhdGNoLmMKKyAqCSAgQmF0Y2gtYmFzZWQgaW5kZXggc2NhbiBpbmZyYXN0cnVjdHVyZSBmb3Ig dGhlIGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLgorICoKKyAqIFRoaXMgbW9kdWxlIHByb3ZpZGVzIHRo ZSBjb3JlIGluZnJhc3RydWN0dXJlIGZvciBiYXRjaC1iYXNlZCBpbmRleCBzY2FucywKKyAqIHdo aWNoIGFsbG93IGluZGV4IEFNcyB0byByZXR1cm4gbXVsdGlwbGUgbWF0Y2hpbmcgVElEcyBwZXIg cGFnZSBpbiBhIHNpbmdsZQorICogY2FsbC4gIFRoZSBiYXRjaCByaW5nIGJ1ZmZlciBpcyBtYW5h Z2VkIGJ5IHRoZSB0YWJsZSBBTSwgd2l0aCBoZWxwIGZyb20gdXMsCisgKiBhbmQgd2l0aCBoZWxw IGZyb20gdGhlIHJpbmcgYnVmZmVyIGlubGluZSBmdW5jdGlvbnMgaW4gcmVsc2Nhbi5oLiAgVGhp cworICogYXBwcm9hY2ggZW5hYmxlcyBlZmZpY2llbnQgcHJlZmV0Y2hpbmcgb2YgdGFibGUgQU0g YmxvY2tzIGR1cmluZyBvcmRlcmVkCisgKiBpbmRleCBzY2Fucy4KKyAqCisgKiBUaGUgcmluZyBi dWZmZXIgbG9hZHMgYmF0Y2hlcyBpbiBpbmRleCBrZXkgc3BhY2Ugb3JkZXIuCisgKgorICogVGhl cmUncyB0aHJlZSB0eXBlcyBvZiBmdW5jdGlvbnMgaW4gdGhpcyBtb2R1bGU6CisgKgorICogMS4g Q29yZSBiYXRjaCBzY2FuIGxpZmVjeWNsZSAoaW5kZXhfYmF0Y2hzY2FuXyopOiBGdW5jdGlvbnMg dGhhdCBtYW5hZ2UKKyAqICAgIGJhdGNoIHNjYW4gc3RhdGUgaW5jbHVkaW5nIGluaXRpYWxpemF0 aW9uLCByZXNldCwgY2xlYW51cCwgYW5kIHRoZQorICogICAgbWFyay9yZXN0b3JlIG9wZXJhdGlv bnMgbmVlZGVkIGZvciBtZXJnZSBqb2lucy4gIENhbGxlZCBieSBpbmRleGFtLmMKKyAqICAgIHJv dXRpbmVzIHRoYXQgbWFuYWdlIGluZGV4IHNjYW5zIG9uIGJlaGFsZiBvZiB0aGUgY29yZSBleGVj dXRvci4KKyAqCisgKiAyLiBUYWJsZSBBTSB1dGlsaXRpZXMgKHRhYmxlYW1fdXRpbF8qKTogSGVs cGVyIGZ1bmN0aW9ucyBjYWxsZWQgYnkgdGFibGUKKyAqICAgIEFNcyBkdXJpbmcgYW1nZXRiYXRj aCBpbmRleCBzY2Fucy4gIFRoZXNlIGhhbmRsZSBjcm9zcy1iYXRjaCBkaXJlY3Rpb24KKyAqICAg IGNoYW5nZXMsIHJlY29yZGluZyBkZWFkIGl0ZW1zIGZvciBhIGxhdGVyIGNhbGwgdG8gYW1raWxs aXRlbXNiYXRjaCwKKyAqICAgIGZyZWVpbmcgYmF0Y2hlcyB3aGVuIHRoZSB0YWJsZSBBTSBpcyBk b25lIHdpdGggdGhlbSwgYW5kIGNhbGxpbmcKKyAqICAgIGFtdW5ndWFyZGJhdGNoIHRvIGRyb3Ag dGhlIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrICh0aGUgZ3VhcmQgdGhhdAorICogICAgcHJldmVu dHMgVkFDVVVNIGZyb20gcmVjeWNsaW5nIFRJRHMgd2hpbGUgYSBzY2FuIGlzIGluIGZsaWdodCku CisgKgorICogMy4gSW5kZXggQU0gdXRpbGl0aWVzIChpbmRleGFtX3V0aWxfKik6IEhlbHBlciBm dW5jdGlvbnMgY2FsbGVkIGJ5IGluZGV4CisgKiAgICBBTXMgdGhhdCBpbXBsZW1lbnQgdGhlIGFt Z2V0YmF0Y2ggaW50ZXJmYWNlLiAgVGhlc2UgbWFuYWdlIGJhdGNoCisgKiAgICBhbGxvY2F0aW9u LCBpbmRleCBwYWdlIGJ1ZmZlciBsb2NrIHJlbGVhc2UsIGFuZCBiYXRjaCBtZW1vcnkgcmVjeWNs aW5nLgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FM IEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0 LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICogSURF TlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwor ICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlcy5oIgorCisj aW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCisjaW5jbHVkZSAiYWNjZXNzL2luZGV4YmF0Y2guaCIK KyNpbmNsdWRlICJhY2Nlc3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNp bmNsdWRlICJsaWIvcXVuaXF1ZS5oIgorCitzdGF0aWMgaW5saW5lIGJvb2wgYmF0Y2hfY2FjaGVf c3RvcmUoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CitzdGF0aWMg aW50CWJhdGNoX2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2Yik7CisK Ky8qCisgKiBTZXRzIHVwIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBzdHJ1Y3R1cmUgZm9yIHVzZSBi eSBhbiBpbmRleCBzY2FuLgorICoKKyAqIE9ubHkgY2FsbCBoZXJlIHdoZW4gYWxsIG9mIHRoZSBp bmRleCByZWxhdGVkIGZpZWxkcyBpbiAnc2Nhbicgd2VyZSBhbHJlYWR5CisgKiBpbml0aWFsaXpl ZC4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQor eworCUFzc2VydChzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1nZXRiYXRjaCAhPSBO VUxMKTsKKworCXNjYW4tPmJhdGNocmluZ2J1Zi5zY2FuUG9zLnZhbGlkID0gZmFsc2U7CisJc2Nh bi0+YmF0Y2hyaW5nYnVmLm1hcmtQb3MudmFsaWQgPSBmYWxzZTsKKworCXNjYW4tPmJhdGNocmlu Z2J1Zi5tYXJrQmF0Y2ggPSBOVUxMOworCXNjYW4tPmJhdGNocmluZ2J1Zi5oZWFkQmF0Y2ggPSAw OworCXNjYW4tPmJhdGNocmluZ2J1Zi5uZXh0QmF0Y2ggPSAwOworCisJc2Nhbi0+dXNlYmF0Y2hy aW5nID0gdHJ1ZTsKK30KKworLyoKKyAqIFJlc2V0IHN0YXRlIHVzZWQgZm9yIGEgYmF0Y2ggaW5k ZXggc2NhbgorICovCit2b2lkCitpbmRleF9iYXRjaHNjYW5fcmVzZXQoSW5kZXhTY2FuRGVzYyBz Y2FuKQoreworCUJhdGNoUmluZ0J1ZmZlciAqYmF0Y2hyaW5nYnVmID0gJnNjYW4tPmJhdGNocmlu Z2J1ZjsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRj aDsKKwlib29sCQltYXJrQmF0Y2hGcmVlZCA9IGZhbHNlOworCisJYmF0Y2hyaW5nYnVmLT5zY2Fu UG9zLnZhbGlkID0gZmFsc2U7CisJYmF0Y2hyaW5nYnVmLT5tYXJrUG9zLnZhbGlkID0gZmFsc2U7 CisKKwkvKgorCSAqIEVuc3VyZSB0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaCB3b24ndCBza2lwIHRo ZSBvbGQgbWFya0JhdGNoIGluIHRoZSBsb29wCisJICogYmVsb3cKKwkgKi8KKwliYXRjaHJpbmdi dWYtPm1hcmtCYXRjaCA9IE5VTEw7CisKKwlmb3IgKHVpbnQ4IGkgPSBiYXRjaHJpbmdidWYtPmhl YWRCYXRjaDsgaSAhPSBiYXRjaHJpbmdidWYtPm5leHRCYXRjaDsgaSsrKQorCXsKKwkJSW5kZXhT Y2FuQmF0Y2ggYmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIGkpOworCisJCWlmIChiYXRj aCA9PSBtYXJrQmF0Y2gpCisJCQltYXJrQmF0Y2hGcmVlZCA9IHRydWU7CisKKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCWlmICghbWFya0JhdGNoRnJlZWQg JiYgdW5saWtlbHkobWFya0JhdGNoKSkKKwkJdGFibGVhbV91dGlsX2ZyZWVfYmF0Y2goc2Nhbiwg bWFya0JhdGNoKTsKKworCWJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gMDsKKwliYXRjaHJpbmdi dWYtPm5leHRCYXRjaCA9IDA7Cit9CisKKy8qCisgKiBGcmVlIHJlc291cmNlcyBhdCBlbmQgb2Yg YmF0Y2ggaW5kZXggc2NhbgorICoKKyAqIENhbGxlZCB3aGVuIGFuIGluZGV4IHNjYW4gaXMgYmVp bmcgZW5kZWQsIHJpZ2h0IGJlZm9yZSB0aGUgb3duaW5nIHNjYW4KKyAqIGRlc2NyaXB0b3IgZ29l cyBhd2F5LiAgQ2xlYW5zIHVwIGFsbCBiYXRjaCByZWxhdGVkIHJlc291cmNlcy4KKyAqLwordm9p ZAoraW5kZXhfYmF0Y2hzY2FuX2VuZChJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJLyogRnJlZSBh bGwgcmVtYWluaW5nIGxvYWRlZCBiYXRjaGVzIChldmVuIG1hcmtCYXRjaCkgKi8KKwlBc3NlcnQo IXNjYW4tPnhzX2hlYXBmZXRjaCk7CisJaW5kZXhfYmF0Y2hzY2FuX3Jlc2V0KHNjYW4pOworCisJ Zm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwl7CisJ CUluZGV4U2NhbkJhdGNoIGNhY2hlZCA9IHNjYW4tPmJhdGNoY2FjaGVbaV07CisKKwkJaWYgKGNh Y2hlZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGNhY2hlZC0+ZGVhZEl0ZW1zKQor CQkJcGZyZWUoY2FjaGVkLT5kZWFkSXRlbXMpOworCQlwZnJlZShiYXRjaF9hbGxvY19iYXNlKGNh Y2hlZCwgc2NhbikpOworCX0KK30KKworLyoKKyAqIFNldCBhIG1hcmsgZnJvbSBzY2FuUG9zIHBv c2l0aW9uCisgKgorICogU2F2ZXMgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiBhbmQgYXNzb2Np YXRlZCBiYXRjaCBzbyB0aGF0IHRoZSBzY2FuIGNhbgorICogYmUgcmVzdG9yZWQgdG8gdGhpcyBw b2ludCBsYXRlciwgdmlhIGEgY2FsbCB0byBpbmRleF9iYXRjaHNjYW5fcmVzdG9yZV9wb3MuCisg KiBUaGUgbWFya2VkIGJhdGNoIGlzIHJldGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcg bWFyayBpcyBzZXQgb3IgdGhlCisgKiBzY2FuIGVuZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJl c3RvcmVkKS4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hzY2FuX21hcmtfcG9zKEluZGV4U2NhbkRl c2Mgc2NhbikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRj aHJpbmdidWY7CisJQmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdi dWYuc2NhblBvczsKKwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+ bWFya1BvczsKKwlJbmRleFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNj YW4sIHNjYW5Qb3MtPmJhdGNoKTsKKwlJbmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJp bmdidWYtPm1hcmtCYXRjaDsKKwlib29sCQlmcmVlTWFya0JhdGNoOworCisJQXNzZXJ0KHNjYW4t Pk1WQ0NTY2FuKTsKKworCS8qCisJICogRnJlZSB0aGUgcHJldmlvdXMgbWFyayBiYXRjaCAoaWYg YW55KSAtLSBidXQgb25seSBpZiBpdCBpc24ndCBvdXIKKwkgKiBzY2FuQmF0Y2ggKGRlZmVuc2l2 ZWx5IG1ha2Ugc3VyZSB0aGF0IG1hcmtCYXRjaCBpc24ndCBzb21lIGxhdGVyCisJICogc3RpbGwt bmVlZGVkIGJhdGNoLCB0b28pCisJICovCisJaWYgKCFtYXJrQmF0Y2ggfHwgbWFya0JhdGNoID09 IHNjYW5CYXRjaCkKKwl7CisJCS8qIERlZmluaXRlbHkgbm8gbWFya0JhdGNoIHRoYXQgd2Ugc2hv dWxkIGZyZWUgbm93ICovCisJCWZyZWVNYXJrQmF0Y2ggPSBmYWxzZTsKKwl9CisJZWxzZSBpZiAo bGlrZWx5KCFpbmRleF9zY2FuX2JhdGNoX2xvYWRlZChzY2FuLCBtYXJrUG9zLT5iYXRjaCkpKQor CXsKKwkJLyogRGVmaW5pdGVseSBoYXZlIGEgbm8tbG9uZ2VyLWxvYWRlZCBtYXJrQmF0Y2ggdG8g ZnJlZSAqLworCQlmcmVlTWFya0JhdGNoID0gdHJ1ZTsKKwl9CisJZWxzZQorCXsKKwkJLyoKKwkJ ICogaW5kZXhfc2Nhbl9iYXRjaF9sb2FkZWQgaW5kaWNhdGVzIHRoYXQgbWFya1Bvcy0+YmF0Y2gg aXMgbG9hZGVkLAorCQkgKiBidXQgYWZ0ZXIgdWludDggb3ZlcmZsb3cgYSBzdGFsZSBiYXRjaCBv ZmZzZXQgY2FuIGFsaWFzIGEKKwkJICogY3VycmVudGx5LWxvYWRlZCByYW5nZSAoZmFsc2UgcG9z aXRpdmUpLiAgQ29uZmlybSBieSBjaGVja2luZworCQkgKiB3aGV0aGVyIHRoZSBiYXRjaCBwb2lu dGVyIGluIG1hcmtQb3MtPmJhdGNoJ3Mgc2xvdCBzdGlsbCBtYXRjaGVzLgorCQkgKi8KKwkJZnJl ZU1hcmtCYXRjaCA9IChpbmRleF9zY2FuX2JhdGNoKHNjYW4sIG1hcmtQb3MtPmJhdGNoKSAhPSBt YXJrQmF0Y2gpOworCX0KKworCWlmIChmcmVlTWFya0JhdGNoKQorCXsKKwkJLyogRnJlZSBtYXJr QmF0Y2gsIHNpbmNlIGl0IGlzbid0IGxvYWRlZC9uZWVkZWQgZm9yIGJhdGNocmluZ2J1ZiAqLwor CQliYXRjaHJpbmdidWYtPm1hcmtCYXRjaCA9IE5VTEw7IC8qIGVsc2UgY2FsbCB3b24ndCBmcmVl IG1hcmtCYXRjaCAqLworCQl0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChzY2FuLCBtYXJrQmF0Y2gp OworCX0KKworCS8qIGNvcHkgdGhlIHNjYW4ncyBwb3NpdGlvbiAqLworCWJhdGNocmluZ2J1Zi0+ bWFya1BvcyA9ICpzY2FuUG9zOworCWJhdGNocmluZ2J1Zi0+bWFya0JhdGNoID0gc2NhbkJhdGNo OworfQorCisvKgorICogUmVzdG9yZSBtYXJrIHRvIHNjYW5Qb3MgcG9zaXRpb24KKyAqCisgKiBS ZXN0b3JlcyB0aGUgc2NhbiB0byBhIHBvc2l0aW9uIHNhdmVkIGJ5IGluZGV4X2JhdGNoc2Nhbl9t YXJrX3BvcyBlYXJsaWVyLgorICogVGhlIHNjYW4ncyBtYXJrUG9zIGJlY29tZXMgaXRzIHNjYW5Q b3MuICBUaGUgbWFya2VkIGJhdGNoIGlzIHJlc3RvcmVkIGFzCisgKiB0aGUgY3VycmVudCBzY2Fu QmF0Y2ggd2hlbiBuZWVkZWQuCisgKgorICogV2UganVzdCBkaXNjYXJkIGFsbCBiYXRjaGVzIChv dGhlciB0aGFuIG1hcmtCYXRjaC9yZXN0b3JlZCBzY2FuQmF0Y2gpLAorICogZXhjZXB0IHdoZW4g bWFya0JhdGNoIGlzIGFscmVhZHkgdGhlIHNjYW4ncyBjdXJyZW50IHNjYW5CYXRjaC4KKyAqLwor dm9pZAoraW5kZXhfYmF0Y2hzY2FuX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK3sK KwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdidWY7CisJ QmF0Y2hSaW5nSXRlbVBvcyAqc2NhblBvcyA9ICZzY2FuLT5iYXRjaHJpbmdidWYuc2NhblBvczsK KwlCYXRjaFJpbmdJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocmluZ2J1Zi0+bWFya1BvczsKKwlJ bmRleFNjYW5CYXRjaCBtYXJrQmF0Y2ggPSBiYXRjaHJpbmdidWYtPm1hcmtCYXRjaDsKKwlJbmRl eFNjYW5CYXRjaCBzY2FuQmF0Y2ggPSBpbmRleF9zY2FuX2JhdGNoKHNjYW4sIHNjYW5Qb3MtPmJh dGNoKTsKKworCUFzc2VydChzY2FuLT5NVkNDU2Nhbik7CisJQXNzZXJ0KHNjYW4tPnhzX2hlYXBm ZXRjaCk7CisJQXNzZXJ0KG1hcmtQb3MtPnZhbGlkKTsKKworCWlmIChzY2FuQmF0Y2ggPT0gbWFy a0JhdGNoKQorCXsKKwkJLyogbWFya0JhdGNoIGlzIGFscmVhZHkgc2NhbkJhdGNoOyBuZWVkbid0 IGNoYW5nZSBiYXRjaHJpbmdidWYgKi8KKwkJQXNzZXJ0KHNjYW5Qb3MtPmJhdGNoID09IG1hcmtQ b3MtPmJhdGNoKTsKKworCQlzY2FuUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKKwkJcmV0dXJu OworCX0KKworCS8qCisJICogbWFya0JhdGNoIGlzIGJlaGluZCBzY2FuQmF0Y2gsIGFuZCBzbyBt dXN0IG5vdCBiZSBzYXZlZCBpbiByaW5nIGJ1ZmZlcgorCSAqIGFueW1vcmUuICBXZSBoYXZlIHRv IGRlYWwgd2l0aCByZXN0b3JpbmcgdGhlIG1hcmsgdGhlIGhhcmQgd2F5OiBieQorCSAqIGludmFs aWRhdGluZyBhbGwgb3RoZXIgbG9hZGVkIGJhdGNoZXMuICBUaGlzIGlzIHNpbWlsYXIgdG8gdGhl IGNhc2UKKwkgKiB3aGVyZSB0aGUgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcyBhbmQgdGhlIHNjYW4g YWN0dWFsbHkgY3Jvc3NlcworCSAqIGJhdGNoL2luZGV4IHBhZ2UgYm91bmRhcmllcyAoc2VlIHRh YmxlYW1fdXRpbF9iYXRjaF9kaXJjaGFuZ2UpLgorCSAqCisJICogRmlyc3QsIGZyZWUgYWxsIGJh dGNoZXMgdGhhdCBhcmUgc3RpbGwgaW4gdGhlIHJpbmcgYnVmZmVyLgorCSAqLworCWZvciAodWlu dDggaSA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoOyBpICE9IGJhdGNocmluZ2J1Zi0+bmV4dEJh dGNoOyBpKyspCisJeworCQlJbmRleFNjYW5CYXRjaCBiYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2go c2NhbiwgaSk7CisKKwkJQXNzZXJ0KGJhdGNoICE9IG1hcmtCYXRjaCk7CisKKwkJdGFibGVhbV91 dGlsX2ZyZWVfYmF0Y2goc2NhbiwgYmF0Y2gpOworCX0KKworCS8qCisJICogTmV4dCAiYXBwZW5k IiBzdGFuZGFsb25lIG1hcmtCYXRjaCwgd2hpY2ggd2lsbCBiZWNvbWUgc2NhbkJhdGNoCisJICog KHNjYW5CYXRjaCBpcyBhbHdheXMgdGhlIHJpbmcgYnVmZmVyJ3MgaGVhZEJhdGNoKQorCSAqLwor CW1hcmtQb3MtPmJhdGNoID0gMDsKKwliYXRjaHJpbmdidWYtPnNjYW5Qb3MgPSAqbWFya1BvczsK KwliYXRjaHJpbmdidWYtPm5leHRCYXRjaCA9IGJhdGNocmluZ2J1Zi0+aGVhZEJhdGNoID0gbWFy a1Bvcy0+YmF0Y2g7CisJaW5kZXhfc2Nhbl9iYXRjaF9hcHBlbmQoc2NhbiwgbWFya0JhdGNoKTsK KwlBc3NlcnQoaW5kZXhfc2Nhbl9iYXRjaChzY2FuLCBiYXRjaHJpbmdidWYtPnNjYW5Qb3MuYmF0 Y2gpID09IG1hcmtCYXRjaCk7CisKKwkvKgorCSAqIEZpbmFsbHksIGNhbGwgYW1wb3NyZXNldCB0 byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlkYXRlIGFueSBwcml2YXRlCisJICogc3RhdGUg dGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2NhbidzIHByb2dyZXNzCisJICovCisJaWYg KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wb3NyZXNldChzY2FuLCBtYXJrQmF0Y2gpOworCisJLyoK KwkgKiBOb3RlOiBtYXJrQmF0Y2guZGVhZEl0ZW1zW10gbWlnaHQgYWxyZWFkeSBjb250YWluIGRl YWQgaXRlbXMsIGFuZCBtaWdodAorCSAqIHlldCBoYXZlIG1vcmUgZGVhZCBpdGVtcyBzYXZlZC4g IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoIGlzIHByZXBhcmVkCisJICogZm9yIHRoYXQuCisJICov Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IHRhYmxl IEFNcworICogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorICovCisKKy8qCisgKiBIYW5kbGUgY3Jvc3MtYmF0Y2ggY2hhbmdl IGluIHNjYW4gZGlyZWN0aW9uCisgKgorICogQ2FsbGVkIGJ5IHRhYmxlIEFNIHdoZW4gaXRzIHNj YW4gY2hhbmdlcyBkaXJlY3Rpb24gaW4gYSB3YXkgdGhhdAorICogbmVjZXNzaXRhdGVzIGJhY2tp bmcgdGhlIHNjYW4gdXAgdG8gYW4gaW5kZXggcGFnZSBvcmlnaW5hbGx5IGFzc29jaWF0ZWQKKyAq IHdpdGggYSBub3ctZnJlZWQgYmF0Y2guCisgKgorICogV2hlbiB3ZSByZXR1cm4sIGJhdGNocmlu Z2J1ZiB3aWxsIG9ubHkgY29udGFpbiBvbmUgYmF0Y2ggKHRoZSBjdXJyZW50CisgKiBoZWFkQmF0 Y2gvc2NhbkJhdGNoKSBhbmQgd2lsbCBsb29rIGFzIGlmIHRoZSBuZXcgc2NhbiBkaXJlY3Rpb24g aGFkIGJlZW4KKyAqIHVzZWQgZnJvbSB0aGUgc3RhcnQuICBDYWxsZXIgY2FuIHRoZW4gc2FmZWx5 IHBhc3MgdGhpcyBiYXRjaCB0byBhbWdldGJhdGNoCisgKiB0byBkZXRlcm1pbmUgd2hpY2ggYmF0 Y2ggY29tZXMgbmV4dCBpbiB0aGUgbmV3IHNjYW4gZGlyZWN0aW9uLiAgVGhpcworICogYXBwcm9h Y2ggaXNuJ3QgcGFydGljdWxhcmx5IGVmZmljaWVudCwgYnV0IGl0IHdvcmtzIHdlbGwgZW5vdWdo IGZvciB3aGF0CisgKiBvdWdodCB0byBiZSBhIHJlbGF0aXZlbHkgcmFyZSBvY2N1cnJlbmNlLgor ICovCit2b2lkCit0YWJsZWFtX3V0aWxfYmF0Y2hfZGlyY2hhbmdlKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwlCYXRjaFJpbmdCdWZmZXIgKmJhdGNocmluZ2J1ZiA9ICZzY2FuLT5iYXRjaHJpbmdi dWY7CisJSW5kZXhTY2FuQmF0Y2ggc2NhbkJhdGNoOworCisJLyoKKwkgKiBSZWxlYXNlIGJhdGNo ZXMgc3RhcnRpbmcgZnJvbSB0aGUgY3VycmVudCAidGFpbCIgYmF0Y2gsIHdvcmtpbmcKKwkgKiBi YWNrd2FyZHMgdW50aWwgdGhlIGN1cnJlbnQgaGVhZCBiYXRjaCAod2hpY2ggaXMgYWxzbyB0aGUg Y3VycmVudAorCSAqIHNjYW5CYXRjaCkgaXMgdGhlIG9ubHkgYmF0Y2ggaGFzbid0IGJlZW4gZnJl ZWQKKwkgKi8KKwl3aGlsZSAoaW5kZXhfc2Nhbl9iYXRjaF9jb3VudChzY2FuKSA+IDEpCisJewor CQl1aW50OAkJdGFpbGlkeCA9IGJhdGNocmluZ2J1Zi0+bmV4dEJhdGNoIC0gMTsKKwkJSW5kZXhT Y2FuQmF0Y2ggdGFpbCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgdGFpbGlkeCk7CisKKwkJQXNz ZXJ0KHRhaWxpZHggIT0gYmF0Y2hyaW5nYnVmLT5zY2FuUG9zLmJhdGNoKTsKKworCQl0YWJsZWFt X3V0aWxfZnJlZV9iYXRjaChzY2FuLCB0YWlsKTsKKwkJYmF0Y2hyaW5nYnVmLT5uZXh0QmF0Y2gt LTsKKwl9CisKKwkvKiBzY2FuQmF0Y2ggaXMgbm93IHRoZSBvbmx5IGJhdGNoIHN0aWxsIGxvYWRl ZCAqLworCUFzc2VydChiYXRjaHJpbmdidWYtPmhlYWRCYXRjaCA9PSBiYXRjaHJpbmdidWYtPnNj YW5Qb3MuYmF0Y2gpOworCXNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2NhbiwgYmF0Y2hy aW5nYnVmLT5oZWFkQmF0Y2gpOworCisJLyoKKwkgKiBGbGlwIHNjYW5CYXRjaCdzIHNjYW4gZGly ZWN0aW9uIHRvIHJlZmxlY3QgdGhlIHJldmVyc2FsLiAgQWxzbyByZXNldAorCSAqIGFueSBpbmRl eCBBTSBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHNjYW4gcHJvZ3Jlc3MuCisJICov CisJc2NhbkJhdGNoLT5kaXIgPSAtc2NhbkJhdGNoLT5kaXI7CisJaWYgKHNjYW4tPmluZGV4UmVs YXRpb24tPnJkX2luZGFtLT5hbXBvc3Jlc2V0KQorCQlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9p bmRhbS0+YW1wb3NyZXNldChzY2FuLCBzY2FuQmF0Y2gpOworfQorCisvKgorICogUmVjb3JkIHRo YXQgc2NhblBvcyBpdGVtIGlzIGRlYWQKKyAqCisgKiBSZWNvcmRzIGFuIG9mZnNldCB0byB0aGUg Y3VycmVudCBzY2FuQmF0Y2gvc2NhblBvcyBpdGVtLCBzYXZpbmcgaXQgaW4KKyAqIHNjYW5CYXRj aCdzIGRlYWRJdGVtcyBhcnJheS4gIFRoZSBpdGVtcycgaW5kZXggdHVwbGVzIHdpbGwgbGF0ZXIg YmUKKyAqIG1hcmtlZCBMUF9ERUFEIHdoZW4gY3VycmVudCBzY2FuQmF0Y2ggaXMgZnJlZWQuCisg Ki8KK3ZvaWQKK3RhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtKEluZGV4U2NhbkRlc2Mgc2Nh bikKK3sKKwlCYXRjaFJpbmdJdGVtUG9zICpzY2FuUG9zID0gJnNjYW4tPmJhdGNocmluZ2J1Zi5z Y2FuUG9zOworCUluZGV4U2NhbkJhdGNoIHNjYW5CYXRjaCA9IGluZGV4X3NjYW5fYmF0Y2goc2Nh biwgc2NhblBvcy0+YmF0Y2gpOworCisJaWYgKHNjYW5CYXRjaC0+ZGVhZEl0ZW1zID09IE5VTEwp CisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRl bXNiYXRjaCk7CisJaWYgKHNjYW5CYXRjaC0+bnVtRGVhZCA8IHNjYW4tPm1heGl0ZW1zYmF0Y2gp CisJCXNjYW5CYXRjaC0+ZGVhZEl0ZW1zW3NjYW5CYXRjaC0+bnVtRGVhZCsrXSA9IHNjYW5Qb3Mt Pml0ZW07Cit9CisKKy8qCisgKiBSZWxlYXNlIHJlc291cmNlcyBhc3NvY2lhdGVkIHdpdGggYSBi YXRjaAorICoKKyAqIENhbGxlZCBieSB0YWJsZSBBTSdzIG9yZGVyZWQgaW5kZXggc2NhbiBpbXBs ZW1lbnRhdGlvbiB3aGVuIGl0IGlzIGZpbmlzaGVkCisgKiB3aXRoIGEgYmF0Y2ggYW5kIHdpc2hl cyB0byByZWxlYXNlIGl0cyByZXNvdXJjZXMuCisgKgorICogV2UgY2FsbCBhbXVuZ3VhcmRiYXRj aCB0byBkcm9wIHRoZSBUSUQgcmVjeWNsaW5nIGludGVybG9jayAoZS5nLiBidWZmZXIKKyAqIHBp bikgd2hlbiBpdCBoYXNuJ3QgYmVlbiBkcm9wcGVkIHlldC4gIEZvciBwbGFpbiBNVkNDIHNjYW5z ICh3aGVyZQorICogYmF0Y2hJbW1lZGlhdGVVbmd1YXJkIGlzIHNldCksIHRoZSBpbnRlcmxvY2sg d2FzIGFscmVhZHkgZHJvcHBlZCBlYWdlcmx5CisgKiBpbiBpbmRleGFtX3V0aWxfYmF0Y2hfdW5s b2NrLCBzbyB3ZSBza2lwIHRoZSBhbXVuZ3VhcmRiYXRjaCBjYWxsIGhlcmUuCisgKiBJbmRleC1v bmx5IHNjYW5zIG11c3QgZGVsYXkgZHJvcHBpbmcgdGhlIGludGVybG9jayB1bnRpbCB2aXNpYmls aXR5IGlzCisgKiByZXNvbHZlZCBmb3IgYWxsIGl0ZW1zIGluIHRoZSBiYXRjaCwgc28gYW11bmd1 YXJkYmF0Y2ggbWF5IHN0aWxsIG5lZWQgdG8KKyAqIGFjdCBoZXJlLiAgRm9yIG5vbi1NVkNDIHNu YXBzaG90IHNjYW5zLCB0aGUgaW50ZXJsb2NrIGlzIGFsd2F5cyBoZWxkCisgKiB1bnRpbCBhbXVu Z3VhcmRiYXRjaCBkcm9wcyBpdCBoZXJlIC0tIHRoaXMgaXMgdGhlIG9ubHkgcGxhY2Ugd2lsbGlu ZyB0bworICogdW5ndWFyZCBhIG5vbi1NVkNDIHNjYW4ncyBiYXRjaC4KKyAqCisgKiBXaGVuIHRo ZSBiYXRjaCBoYXMgZGVhZCBpdGVtcyAobnVtRGVhZCA+IDApIGFuZCB0aGUgaW5kZXggQU0gcHJv dmlkZXMgYW4KKyAqIGFta2lsbGl0ZW1zYmF0Y2ggY2FsbGJhY2ssIHdlIGNhbGwgaXQgdG8gc2V0 IExQX0RFQUQgYml0cyBpbiB0aGUgaW5kZXgKKyAqIHBhZ2UuICBXZSBhbHdheXMgcmVjeWNsZSB0 aGUgYmF0Y2ggbWVtb3J5IHZpYSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZS4KKyAqCisgKiBO b3RlOiBDYWxsaW5nIGhlcmUgd2hlbiAnYmF0Y2gnIGlzIGFsc28gYmF0Y2hyaW5nYnVmLm1hcmtC YXRjaCBpcyBhIG5vLW9wLgorICogQ2FsbGVycyB0aGF0IGRvbid0IHdhbnQgdGhpcyBzaG91bGQg c2V0IGJhdGNocmluZ2J1Zi5tYXJrQmF0Y2ggdG8gTlVMTAorICogYmVmb3JlIGNhbGxpbmcgdXMu ICBOb3RlIHRoYXQgbWFya0JhdGNoIGhhcyB0byBiZSBleHBsaWNpdGx5IGZyZWVkLgorICovCit2 b2lkCit0YWJsZWFtX3V0aWxfZnJlZV9iYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2Nh bkJhdGNoIGJhdGNoKQoreworCUFzc2VydCghKHNjYW4tPmJhdGNoSW1tZWRpYXRlVW5ndWFyZCAm JiBiYXRjaC0+aXNHdWFyZGVkKSk7CisJQXNzZXJ0KGJhdGNoLT5pc0d1YXJkZWQgfHwgc2Nhbi0+ TVZDQ1NjYW4pOworCisJLyogZG9uJ3QgZnJlZSBjYWxsZXIncyBiYXRjaCBpZiBpdCBpcyBzY2Fu J3MgY3VycmVudCBtYXJrQmF0Y2ggKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+YmF0Y2hyaW5nYnVm Lm1hcmtCYXRjaCkKKwkJcmV0dXJuOworCisJLyogRHJvcCBUSUQgcmVjeWNsaW5nIGludGVybG9j ayB2aWEgYW11bmd1YXJkYmF0Y2ggYXMgbmVlZGVkICovCisJaWYgKCFzY2FuLT5iYXRjaEltbWVk aWF0ZVVuZ3VhcmQgJiYgYmF0Y2gtPmlzR3VhcmRlZCkKKwkJdGFibGVhbV91dGlsX3VuZ3VhcmRf YmF0Y2goc2NhbiwgYmF0Y2gpOworCisJLyoKKwkgKiBMZXQgdGhlIGluZGV4IEFNIHNldCBMUF9E RUFEIGJpdHMgaW4gdGhlIGluZGV4IHBhZ2UsIGlmIGFwcGxpY2FibGUuCisJICoKKwkgKiBiYXRj aC5kZWFkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQg aXRlbXMgaW4uCisJICogV2UgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElE IHR3aWNlLgorCSAqCisJICogU29ydCBhbmQgdW5pcXVlLWlmeSBkZWFkSXRlbXNbXS4gIFRoYXQg d2F5IHRoZSBpbmRleCBBTSBjYW4gc2FmZWx5CisJICogYXNzdW1lIHRoYXQgaXRlbXMgd2lsbCBh bHdheXMgYmUgaW4gdGhlaXIgb3JpZ2luYWwgaW5kZXggcGFnZSBvcmRlci4KKwkgKi8KKwlpZiAo YmF0Y2gtPm51bURlYWQgPiAwICYmCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5h bWtpbGxpdGVtc2JhdGNoICE9IE5VTEwpCisJeworCQlpZiAoYmF0Y2gtPm51bURlYWQgPiAxKQor CQl7CisJCQlxc29ydChiYXRjaC0+ZGVhZEl0ZW1zLCBiYXRjaC0+bnVtRGVhZCwgc2l6ZW9mKGlu dCksCisJCQkJICBiYXRjaF9jb21wYXJlX2ludCk7CisJCQliYXRjaC0+bnVtRGVhZCA9IHF1bmlx dWUoYmF0Y2gtPmRlYWRJdGVtcywgYmF0Y2gtPm51bURlYWQsCisJCQkJCQkJCQkgc2l6ZW9mKGlu dCksIGJhdGNoX2NvbXBhcmVfaW50KTsKKwkJfQorCisJCXNjYW4tPmluZGV4UmVsYXRpb24tPnJk X2luZGFtLT5hbWtpbGxpdGVtc2JhdGNoKHNjYW4sIGJhdGNoKTsKKwl9CisKKwkvKgorCSAqIFRy eSB0byBzdG9yZSBjYWxsZXIncyBiYXRjaCBpbiB0aGlzIGFtZ2V0YmF0Y2ggc2NhbidzIGNhY2hl IG9mCisJICogcHJldmlvdXNseSByZWxlYXNlZCBiYXRjaGVzIGZpcnN0ICh1bmxlc3Mgc2NhbiBp cyBzaHV0dGluZyBkb3duKQorCSAqLworCWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYgYmF0Y2hf Y2FjaGVfc3RvcmUoc2NhbiwgYmF0Y2gpKQorCQlyZXR1cm47CisKKwkvKiBzY2FuIGlzIHNodXR0 aW5nIGRvd24gb3IgY2FjaGUgaXMgZnVsbDsgZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlp ZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJcGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUo YmF0Y2hfYWxsb2NfYmFzZShiYXRjaCwgc2NhbikpOworfQorCisvKgorICogRHJvcCB0aGUgYmF0 Y2gncyBUSUQgcmVjeWNsaW5nIGludGVybG9jayB2aWEgYW11bmd1YXJkYmF0Y2gKKyAqCisgKiBD YWxsZWQgYnkgdGhlIHRhYmxlIEFNIHdoZW4gaXQncyBzYWZlIHRvIGRyb3Agd2hhdGV2ZXIgaW50 ZXJsb2NrIHRoZSBpbmRleAorICogQU0gaG9sZHMgdG8gcHJldmVudCB1bnNhZmUgY29uY3VycmVu dCBUSUQgcmVjeWNsaW5nIGJ5IFZBQ1VVTSAodHlwaWNhbGx5IGEKKyAqIGJ1ZmZlciBwaW4gb24g dGhlIGJhdGNoJ3MgaW5kZXggcGFnZSBpbiBiYXRjaCdzIG9wYXF1ZSBhcmVhKS4KKyAqLwordm9p ZAordGFibGVhbV91dGlsX3VuZ3VhcmRfYmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNj YW5CYXRjaCBiYXRjaCkKK3sKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBpZmYg IWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+YmF0Y2hJbW1lZGlhdGVV bmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlzY2FuLT5pbmRleFJlbGF0 aW9uLT5yZF9pbmRhbS0+YW11bmd1YXJkYmF0Y2goc2NhbiwgYmF0Y2gpOworCisJYmF0Y2gtPmlz R3VhcmRlZCA9IGZhbHNlOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgkJCXV0aWxpdHkgZnVuY3Rpb25z IGNhbGxlZCBieSBhbWdldGJhdGNoIGluZGV4IEFNcworICoKKyAqIFRoZXNlIGZ1bmN0aW9ucyBt YW5hZ2UgYmF0Y2ggYWxsb2NhdGlvbiwgdW5sb2NrL3BpbiBtYW5hZ2VtZW50LCBhbmQgYmF0Y2gK KyAqIHJlc291cmNlIHJlY3ljbGluZy4KKyAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqLworCisvKgorICogVW5sb2Nr IGJhdGNoJ3MgaW5kZXggcGFnZSBidWZmZXIgbG9jaworICoKKyAqIFVubG9ja3MgdGhlIGdpdmVu IGJ1ZmZlciBpbiBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAq IHNhdmVkIGluIHRoYXQgYmF0Y2guICBQZXJmb3JtcyBleHRyYSBzdGVwcyByZXF1aXJlZCBieSBh bWdldGJhdGNoIGNhbGxlcnMKKyAqIGluIHBhc3NpbmcuCisgKgorICogT25seSBjYWxsIGhlcmUg d2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNp bmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJp dG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0 Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhl IGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29u dmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiYXRjaCBhbmQK KyAqIGFtZ2V0Yml0bWFwIHRvIGNvbnNpc3RlbnRseSB1c2UgdGhlIHNhbWUgYmF0Y2ggbWFuYWdl bWVudCBhcHByb2FjaCwgc2luY2UKKyAqIHRoYXQgYXZvaWRzIGludHJvZHVjaW5nIHNwZWNpYWwg Y2FzZXMgdG8gbG93ZXItbGV2ZWwgY29kZS4gIFdlIGRyb3AgYm90aAorICogdGhlIGxvY2sgYW5k IHRoZSBwaW4gb24gYmF0Y2gncyBwYWdlIG9uIGJlaGFsZiBvZiBhbWdldGJpdG1hcCBjYWxsZXJz LgorICoKKyAqIEZvciBhbWdldGJhdGNoIGNhbGxlcnMsIHdoZW4gYmF0Y2hJbW1lZGlhdGVVbmd1 YXJkIGlzIHNldCAocGxhaW4gTVZDQworICogc2NhbnMpLCB3ZSBhbHNvIHJlbGVhc2UgdGhlIHBp biBoZXJlICh0aGUgVElEIHJlY3ljbGluZyBpbnRlcmxvY2spLCBzbworICogdGhhdCBubyBsYXRl ciBhbXVuZ3VhcmRiYXRjaCBjYWxsYmFjayB3aWxsIGJlIG5lZWRlZC4gIE90aGVyd2lzZSB0aGUg dGFibGUKKyAqIEFNIHdpbGwgY2FsbCBhbXVuZ3VhcmRiYXRjaCBsYXRlciB3aGVuIGl0J3Mgc2Fm ZSB0byBkcm9wIHRoZSBpbnRlcmxvY2suCisgKgorICogSW5kZXggQU1zIHdob3NlIFRJRCByZWN5 Y2xpbmcgaW50ZXJsb2NrIGlzIG5vdCBqdXN0IGEgYnVmZmVyIHBpbiwgb3Igd2hvc2UKKyAqIGFt dW5ndWFyZGJhdGNoIGRvZXMgbm90IHNpbXBseSByZWxlYXNlIGEgcGluLCBhcmUgbm90IG9ibGln YXRlZCB0byB1c2UgdGhpcworICogZnVuY3Rpb24uICBUaGV5IGNhbiBpbXBsZW1lbnQgdGhlaXIg b3duIGVxdWl2YWxlbnQuCisgKi8KK3ZvaWQKK2luZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soSW5k ZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKK3sKKwkv KiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hpbmcgaXRlbXMgcmV0dXJuZWQgYnkg aW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA+PSAwICYmIGJhdGNoLT5maXJz dEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmIChzY2FuLT51c2ViYXRjaHJpbmcpCisJ eworCQkvKiBhbWdldGJhdGNoIChub3QgYW1nZXRiaXRtYXApIGNhbGxlciAqLworCQlBc3NlcnQo c2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJCS8qCisJCSAqIEhhdmUgdG8gc2V0IGJh dGNoLT5sc24gc28gdGhhdCBhbWtpbGxpdGVtc2JhdGNoIGhhcyBhIHdheSB0byBkZXRlY3QKKwkJ ICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3ljbGluZyBieSBWQUNVVU0gbWlnaHQgaGF2 ZSB0YWtlbgorCQkgKiBwbGFjZS4gIEl0J2xsIG9ubHkgYmUgc2FmZSB0byBzZXQgYW55IGluZGV4 IHR1cGxlIExQX0RFQUQgYml0cyB3aGVuCisJCSAqIHRoZSBwYWdlIExTTiBoYXNuJ3QgYWR2YW5j ZWQuCisJCSAqCisJCSAqIFBsYWluIE1WQ0Mgc2NhbnMgKGJhdGNoSW1tZWRpYXRlVW5ndWFyZCkg YWxzbyByZWxlYXNlIHRoZSBwaW4gbm93LAorCQkgKiBkcm9wcGluZyB0aGUgVElEIHJlY3ljbGlu ZyBpbnRlcmxvY2sgc28gdGhhdCBubyBhbXVuZ3VhcmRiYXRjaAorCQkgKiBjYWxsYmFjayB3aWxs IGJlIG5lZWRlZCBsYXRlci4gIFRoZSBpbmRleCBBTSBjYWxsZXIgbXVzdCBjbGVhciBpdHMKKwkJ ICogb3duIG9wYXF1ZSBidWYgZmllbGQgYWZ0ZXIgd2UgcmV0dXJuLgorCQkgKgorCQkgKiBOb24t aW1tZWRpYXRlLXVuZ3VhcmQgc2NhbnMgcmV0YWluIHRoZSBwaW47IHRoZSB0YWJsZSBBTSB3aWxs IGNhbGwKKwkJICogYW11bmd1YXJkYmF0Y2ggdG8gZHJvcCB0aGUgaW50ZXJsb2NrIHdoZW4gcmVh ZHkuCisJCSAqLworCQliYXRjaC0+bHNuID0gQnVmZmVyR2V0TFNOQXRvbWljKGJ1Zik7CisJCWlm IChzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQpCisJCXsKKwkJCS8qIGRyb3AgYm90aCB0aGUg bG9jayBhbmQgdGhlIHBpbiAqLworCQkJVW5sb2NrUmVsZWFzZUJ1ZmZlcihidWYpOworCQl9CisJ CWVsc2UKKwkJeworCQkJLyoganVzdCBkcm9wIHRoZSBsb2NrIChob2xkIG9uIHRvIGludGVybG9j ayBwaW4pICovCisJCQlVbmxvY2tCdWZmZXIoYnVmKTsKKwkJfQorCisJCS8qIElmIHdlIHJlbGVh c2VkIGJ1ZmZlciBwaW4sIGJhdGNoIGlzIG5vdyB1bmd1YXJkZWQgKi8KKwkJYmF0Y2gtPmlzR3Vh cmRlZCA9ICFzY2FuLT5iYXRjaEltbWVkaWF0ZVVuZ3VhcmQ7CisJfQorCWVsc2UKKwl7CisJCS8q IGFtZ2V0Yml0bWFwIChub3QgYW1nZXRiYXRjaCkgY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5o ZWFwUmVsYXRpb24gPT0gTlVMTCk7CisKKwkJLyogZHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUg cGluICovCisJCVVubG9ja1JlbGVhc2VCdWZmZXIoYnVmKTsKKwl9Cit9CisKKy8qCisgKiBBbGxv Y2F0ZSBhIG5ldyBiYXRjaAorICoKKyAqIFVzZWQgYnkgaW5kZXggQU1zIHRoYXQgc3VwcG9ydCBh bWdldGJhdGNoIGludGVyZmFjZSAoYm90aCBkdXJpbmcgYW1nZXRiYXRjaAorICogYW5kIGFtZ2V0 Yml0bWFwIHNjYW5zKS4KKyAqCisgKiBSZXR1cm5zIEluZGV4U2NhbkJhdGNoIHdpdGggc3BhY2Ug dG8gZml0IHNjYW4tPm1heGl0ZW1zYmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50 cmllcy4gIFRoaXMgd2lsbCBlaXRoZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisg KiBhIGJhdGNoIHJlY3ljbGVkIGZyb20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2UuICBTZWUKKyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlLgorICoKKyAqIEhvdXNla2VlcGluZyBmaWVsZHMgKGJ1Ziwga25vd25FbmRCYWNr d2FyZC9Gb3J3YXJkLCBmaXJzdEl0ZW0sIGxhc3RJdGVtLAorICogbnVtRGVhZCwgZGVhZEl0ZW1z LCBjdXJyVHVwbGVzKSBhcmUgaW5pdGlhbGl6ZWQgaGVyZS4gIFRoZSB0YWJsZSBBTSdzCisgKiBi YXRjaF9pbml0IGNhbGxiYWNrIGlzIGludm9rZWQgaGVyZSB0byBpbml0aWFsaXplIHRoZSB0YWJs ZSBBTSBvcGFxdWUgYXJlYS4KKyAqIFRoZSBpbmRleCBBTSBjYWxsZXIgaXMgcmVzcG9uc2libGUg Zm9yIGZpbGxpbmcgaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUKKyAqIGZpZWxkcyBhbmQgdGhlIG1h dGNoaW5nIGl0ZW1zW10gYXJyYXkuCisgKgorICogT25jZSB0aGUgYmF0Y2ggaGFzIHRoZSByZXF1 aXJlZCBtYXRjaGluZyBpdGVtcywgY2FsbGVyIHNob3VsZCBnZW5lcmFsbHkKKyAqIHBhc3MgaXQg dG8gaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jaywgYWhlYWQgb2YgaXQgYmVpbmcgcmV0dXJuZWQg dGhyb3VnaAorICogaW5kZXggQU0ncyBhbWdldGJhdGNoIHJvdXRpbmUuICBJZiBpdCB0dXJucyBv dXQgdGhhdCB0aGUgYmF0Y2ggd29uJ3QgbmVlZAorICogdG8gYmUgcmV0dXJuZWQgbGlrZSB0aGlz IChlLmcuLCBkdWUgdG8gdGhlIHNjYW4gaGF2aW5nIG5vIG1vcmUgbWF0Y2hlcyksCisgKiBjYWxs ZXIgc2hvdWxkIHBhc3MgaXRzIGVtcHR5L3VudXNlZCBiYXRjaCB0byBpbmRleGFtX3V0aWxfYmF0 Y2hfcmVsZWFzZS4KKyAqLworSW5kZXhTY2FuQmF0Y2gKK2luZGV4YW1fdXRpbF9iYXRjaF9hbGxv YyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJSW5kZXhTY2FuQmF0Y2ggYmF0Y2ggPSBOVUxMOwor CWJvb2wJCW5ld19hbGxvYyA9IGZhbHNlOworCisJLyoKKwkgKiBMYXppbHkgY29tcHV0ZSBiYXRj aF90YWJsZV9vZmZzZXQgb24gZmlyc3QgYWxsb2NhdGlvbi4gIFRoaXMgY29tYmluZXMKKwkgKiB0 aGUgdGFibGUgQU0gYW5kIGluZGV4IEFNIG9wYXF1ZSBzaXplcyBpbnRvIGEgc2luZ2xlIG9mZnNl dCB0aGF0IGNhbiBiZQorCSAqIHVzZWQgdG8gZmluZCB0aGUgdGFibGUgQU0gb3BhcXVlIGFyZWEg KGFuZCB0aGUgdHJ1ZSBhbGxvY2F0aW9uIGJhc2UpCisJICogZnJvbSB0aGUgYmF0Y2ggcG9pbnRl ci4KKwkgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hfdGFibGVfb2Zmc2V0ID09IDAgJiYKKwkJKHNjYW4t PmJhdGNoX2luZGV4X29wYXF1ZV9zaXplID4gMCB8fAorCQkgKHNjYW4tPnhzX2hlYXBmZXRjaCAm JiBzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNoX29wYXF1ZV9zaXplID4gMCkpKQorCXsKKwkJdWlu dDE2CQl0YWJsZV9vcGFxdWUgPSBzY2FuLT54c19oZWFwZmV0Y2ggPworCQkJc2Nhbi0+eHNfaGVh cGZldGNoLT5iYXRjaF9vcGFxdWVfc2l6ZSA6IDA7CisKKwkJc2Nhbi0+YmF0Y2hfdGFibGVfb2Zm c2V0ID0gdGFibGVfb3BhcXVlICsKKwkJCXNjYW4tPmJhdGNoX2luZGV4X29wYXF1ZV9zaXplOwor CX0KKworCS8qIEZpcnN0IGxvb2sgZm9yIGFuIGV4aXN0aW5nIGJhdGNoIGZyb20gdGhlIGNhY2hl ICovCisJaWYgKHNjYW4tPnVzZWJhdGNocmluZykKKwl7CisJCWZvciAoaW50IGkgPSAwOyBpIDwg SU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKyspCisJCXsKKwkJCWlmIChzY2FuLT5iYXRjaGNh Y2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJLyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQg YmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4tPmJhdGNoY2FjaGVbaV07CisJCQkJc2Nhbi0+YmF0 Y2hjYWNoZVtpXSA9IE5VTEw7CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKwl9CisJZWxzZSBpZiAo c2Nhbi0+YmF0Y2hjYWNoZVswXSAhPSBOVUxMKQorCXsKKwkJLyoKKwkJICogUmV1c2UgY2FjaGVk IGJhdGNoIGZyb20gcHJpb3IgYW1nZXRiaXRtYXAgaXRlcmF0aW9uLiAgVGhpcyBwYXRoIGlzCisJ CSAqIGhpdCBvbiBldmVyeSBhbWdldGJpdG1hcCBjYWxsIGhlcmUgYWZ0ZXIgdGhlIHNjYW4ncyBm aXJzdC4KKwkJICovCisJCWJhdGNoID0gc2Nhbi0+YmF0Y2hjYWNoZVswXTsKKwkJc2Nhbi0+YmF0 Y2hjYWNoZVswXSA9IE5VTEw7CisJfQorCisJaWYgKCFiYXRjaCkKKwl7CisJCVNpemUJCXByZWZp eF9zejsKKwkJU2l6ZQkJYmFzZV9zejsKKwkJU2l6ZQkJdHJhaWxpbmdfc3o7CisJCVNpemUJCWFs bG9jc3o7CisJCWNoYXIJICAgKnJhdzsKKworCQkvKiBBTSBvcGFxdWUgYXJlYXMgYmVmb3JlIHRo ZSBiYXRjaCBwb2ludGVyICovCisJCXByZWZpeF9zeiA9IHNjYW4tPmJhdGNoX3RhYmxlX29mZnNl dDsKKworCQkvKiBJbmRleFNjYW5CYXRjaERhdGEgaGVhZGVyICsgaXRlbXNbXSAqLworCQliYXNl X3N6ID0gb2Zmc2V0b2YoSW5kZXhTY2FuQmF0Y2hEYXRhLCBpdGVtcykgKworCQkJc2l6ZW9mKEJh dGNoTWF0Y2hpbmdJdGVtKSAqIHNjYW4tPm1heGl0ZW1zYmF0Y2g7CisKKwkJLyoKKwkJICogVHJh aWxpbmcgZGF0YSBhZnRlciBpdGVtc1tdOiB0YWJsZSBBTSBwZXItaXRlbSBkYXRhIChlLmcuIHZp c0luZm8pCisJCSAqIGFuZCBjdXJyVHVwbGVzIGluZGV4IEFNIHR1cGxlIHdvcmtzcGFjZS4KKwkJ ICovCisJCXRyYWlsaW5nX3N6ID0gMDsKKwkJaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCkKKwkJewor CQkJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCAmJgorCQkJCXNjYW4tPnhzX2hlYXBmZXRjaC0+YmF0 Y2hfcGVyX2l0ZW1fc2l6ZSA+IDApCisJCQkJdHJhaWxpbmdfc3ogKz0gTUFYQUxJR04oc2Nhbi0+ eHNfaGVhcGZldGNoLT5iYXRjaF9wZXJfaXRlbV9zaXplICoKKwkJCQkJCQkJCQlzY2FuLT5tYXhp dGVtc2JhdGNoKTsKKwkJCXRyYWlsaW5nX3N6ICs9IHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3Bh Y2U7CisJCX0KKworCQlhbGxvY3N6ID0gcHJlZml4X3N6ICsgTUFYQUxJR04oYmFzZV9zeikgKyB0 cmFpbGluZ19zejsKKwkJcmF3ID0gcGFsbG9jKGFsbG9jc3opOworCQliYXRjaCA9IChJbmRleFNj YW5CYXRjaCkgKHJhdyArIHByZWZpeF9zeik7CisKKwkJLyogU2V0IHVwIGN1cnJUdXBsZXMgcG9p bnRlciBmb3IgaW5kZXgtb25seSBzY2FucyAqLworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwICYm IHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwKQorCQl7CisJCQlTaXplCQlpdGVtc0Vu ZCA9IE1BWEFMSUdOKGJhc2Vfc3opOworCQkJU2l6ZQkJdGFibGVUcmFpbGluZyA9IDA7CisKKwkJ CWlmIChzY2FuLT54c19oZWFwZmV0Y2ggJiYKKwkJCQlzY2FuLT54c19oZWFwZmV0Y2gtPmJhdGNo X3Blcl9pdGVtX3NpemUgPiAwKQorCQkJCXRhYmxlVHJhaWxpbmcgPSBNQVhBTElHTihzY2FuLT54 c19oZWFwZmV0Y2gtPmJhdGNoX3Blcl9pdGVtX3NpemUgKgorCQkJCQkJCQkJCSBzY2FuLT5tYXhp dGVtc2JhdGNoKTsKKwkJCWJhdGNoLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgYmF0Y2ggKyBpdGVt c0VuZCArIHRhYmxlVHJhaWxpbmc7CisJCX0KKwkJZWxzZQorCQkJYmF0Y2gtPmN1cnJUdXBsZXMg PSBOVUxMOworCisJCS8qCisJCSAqIEJhdGNoZXMgYWxsb2NhdGUgZGVhZEl0ZW1zIGxhemlseSAo dGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQgYmF0Y2hlcworCQkgKiBrZWVwIHRoZWlyIGRlYWRJdGVt cyBhbGxvY2F0aW9uIHdoZW4gcmVjeWNsZWQpCisJCSAqLworCQliYXRjaC0+ZGVhZEl0ZW1zID0g TlVMTDsKKwkJbmV3X2FsbG9jID0gdHJ1ZTsKKwl9CisKKwkvKiB4c193YW50X2l0dXAgc2NhbnMg bXVzdCBnZXQgYSBjdXJyVHVwbGVzIHNwYWNlICovCisJQXNzZXJ0KCEoc2Nhbi0+eHNfd2FudF9p dHVwICYmIHNjYW4tPmJhdGNoX3R1cGxlc193b3Jrc3BhY2UgPiAwICYmCisJCQkgYmF0Y2gtPmN1 cnJUdXBsZXMgPT0gTlVMTCkpOworCisJLyogTGV0IHRoZSB0YWJsZSBBTSBpbml0aWFsaXplIGl0 cyBwZXItYmF0Y2ggb3BhcXVlIGFyZWEgKi8KKwlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQorCQl0 YWJsZV9pbmRleF9mZXRjaF9iYXRjaF9pbml0KHNjYW4sIGJhdGNoLCBuZXdfYWxsb2MpOworCisJ Lyogc2hhcmVkIGluaXRpYWxpemF0aW9uICovCisJYmF0Y2gtPmtub3duRW5kQmFja3dhcmQgPSBm YWxzZTsKKwliYXRjaC0+a25vd25FbmRGb3J3YXJkID0gZmFsc2U7CisJYmF0Y2gtPmlzR3VhcmRl ZCA9IGZhbHNlOworCWJhdGNoLT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAt MTsKKwliYXRjaC0+bnVtRGVhZCA9IDA7CisKKwlyZXR1cm4gYmF0Y2g7Cit9CisKKy8qCisgKiBS ZWxlYXNlIGFsbG9jYXRlZCBiYXRjaAorICoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGJ5 IGluZGV4IEFNcyB0byByZWxlYXNlIGEgYmF0Y2ggYWxsb2NhdGVkIGJ5CisgKiBpbmRleGFtX3V0 aWxfYmF0Y2hfYWxsb2MuICBCYXRjaGVzIGFyZSBjYWNoZWQgaGVyZSBmb3IgcmV1c2UgdG8gcmVk dWNlCisgKiBwYWxsb2MvcGZyZWUgb3ZlcmhlYWQuCisgKgorICogSXQncyBzYWZlIHRvIHJlbGVh c2UgYSBiYXRjaCBpbW1lZGlhdGVseSB3aGVuIGl0IHdhcyB1c2VkIHRvIHJlYWQgYSBwYWdlCisg KiB0aGF0IHJldHVybmVkIG5vIG1hdGNoZXMgdG8gdGhlIHNjYW4uICBCYXRjaGVzIGFjdHVhbGx5 IHJldHVybmVkIGJ5IGluZGV4CisgKiBBTSdzIGFtZ2V0YmF0Y2ggcm91dGluZSAoaS5lLiBiYXRj aGVzIGZvciBwYWdlcyB3aXRoIG9uZSBvciBtb3JlIG1hdGNoZXMpCisgKiBtdXN0IGJlIHJlbGVh c2VkIGJ5IHRhYmxlYW1fdXRpbF9mcmVlX2JhdGNoLCB3aGljaCBjYWxscyBoZXJlIGFmdGVyIHRo ZQorICogaW5kZXggQU0ncyBhbWtpbGxpdGVtc2JhdGNoIHJvdXRpbmUgKGlmIGFueSkuICBJbmRl eCBBTXMgdGhhdCB1c2UgYmF0Y2hlcworICogc2hvdWxkIGNhbGwgaGVyZSB0byByZWxlYXNlIGEg YmF0Y2ggZnJvbSB0aGVpciBhbWdldGJhdGNoIG9yIGFtZ2V0Yml0bWFwCisgKiByb3V0aW5lcy4K KyAqCisgKiBUaGUgcnVsZXMgZm9yIGJhdGNoIG93bmVyc2hpcCBkaWZmZXIgc2xpZ2h0bHkgZm9y IGFtZ2V0Yml0bWFwIHNjYW5zOyBzZWUKKyAqIHRoZSBhbWdldGJpdG1hcCBkb2N1bWVudGF0aW9u IGluIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgZm9yIGRldGFpbHMuCisgKi8KK3ZvaWQKK2lu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggYmF0Y2gpCit7CisJaWYgKCFzY2FuLT51c2ViYXRjaHJpbmcpCisJeworCQkvKgorCQkgKiBh bWdldGJpdG1hcCBzY2FuIGNhbGxlci4KKwkJICoKKwkJICogYW1nZXRiaXRtYXAgcm91dGluZXMg YXJlIHJlcXVpcmVkIHRvIGFsbG9jYXRlIG5vIG1vcmUgdGhhbiBvbmUKKwkJICogYmF0Y2ggYXQg YSB0aW1lLCBzbyB3ZSdsbCBhbHdheXMgaGF2ZSBhIGZyZWUgc2xvdC4KKwkJICovCisJCUFzc2Vy dChzY2FuLT5iYXRjaGNhY2hlWzBdID09IE5VTEwpOworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0 aW9uID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmRlYWRJdGVtcyA9PSBOVUxMKTsKKwkJQXNz ZXJ0KGJhdGNoLT5jdXJyVHVwbGVzID09IE5VTEwpOworCisJCXNjYW4tPmJhdGNoY2FjaGVbMF0g PSBiYXRjaDsKKwkJcmV0dXJuOworCX0KKworCS8qIGFtZ2V0YmF0Y2ggc2NhbiBjYWxsZXIgKi8K KwlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5VTEwpOworCisJLyoKKwkgKiBUcnkgdG8g c3RvcmUgY2FsbGVyJ3MgYmF0Y2ggaW4gdGhpcyBhbWdldGJhdGNoIHNjYW4ncyBjYWNoZSBvZgor CSAqIHByZXZpb3VzbHkgcmVsZWFzZWQgYmF0Y2hlcyBmaXJzdAorCSAqLworCWlmIChiYXRjaF9j YWNoZV9zdG9yZShzY2FuLCBiYXRjaCkpCisJCXJldHVybjsKKworCS8qIENhY2hlIGZ1bGw7IGp1 c3QgZnJlZSB0aGUgY2FsbGVyJ3MgYmF0Y2ggKi8KKwlpZiAoYmF0Y2gtPmRlYWRJdGVtcykKKwkJ cGZyZWUoYmF0Y2gtPmRlYWRJdGVtcyk7CisJcGZyZWUoYmF0Y2hfYWxsb2NfYmFzZShiYXRjaCwg c2NhbikpOworfQorCisvKgorICogVHJ5IHRvIHN0b3JlIGEgYmF0Y2ggaW4gdGhlIHNjYW4ncyBi YXRjaCBjYWNoZS4KKyAqCisgKiBSZXR1cm5zIHRydWUgaWYgYSBmcmVlIHNsb3Qgd2FzIGZvdW5k LCBmYWxzZSBpZiB0aGUgY2FjaGUgaXMgZnVsbC4KKyAqLworc3RhdGljIGlubGluZSBib29sCiti YXRjaF9jYWNoZV9zdG9yZShJbmRleFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNo KQoreworCWZvciAoaW50IGkgPSAwOyBpIDwgSU5ERVhfU0NBTl9DQUNIRV9CQVRDSEVTOyBpKysp CisJeworCQlpZiAoc2Nhbi0+YmF0Y2hjYWNoZVtpXSA9PSBOVUxMKQorCQl7CisJCQlzY2FuLT5i YXRjaGNhY2hlW2ldID0gYmF0Y2g7CisJCQlyZXR1cm4gdHJ1ZTsKKwkJfQorCX0KKworCXJldHVy biBmYWxzZTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBh cnJheXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEs IGNvbnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOworCWlu dAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKaW5kZXggZGE2NGNiNTk1Li44M2Rm YTNmMmIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVpbGQKQEAgLTUsNCArNSw1IEBA IGJhY2tlbmRfc291cmNlcyArPSBmaWxlcygKICAgJ2FtdmFsaWRhdGUuYycsCiAgICdnZW5hbS5j JywKICAgJ2luZGV4YW0uYycsCisgICdpbmRleGJhdGNoLmMnLAogKQpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVl L1JFQURNRQppbmRleCBjYjkyMWNhMmUuLmEzNzg2OWI3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9SRUFETUUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9S RUFETUUKQEAgLTE3OSwxOCArMTc5LDE1IEBAIGhvbGQgb24gdG8gdGhlIHBpbiAodXNlZCB3aGVu IHJlYWRpbmcgZnJvbSB0aGUgbGVhZiBwYWdlKSB1bnRpbCBfYWZ0ZXJfCiB0aGV5J3JlIGRvbmUg dmlzaXRpbmcgdGhlIGhlYXAgKGZvciBUSURzIGZyb20gcGlubmVkIGxlYWYgcGFnZSkgcHJldmVu dHMKIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZy4gIFZBQ1VVTSBjYW5ub3QgZ2V0IGEgY29uZmxp Y3RpbmcgY2xlYW51cCBsb2NrCiB1bnRpbCB0aGUgaW5kZXggc2NhbiBpcyB0b3RhbGx5IGZpbmlz aGVkIHByb2Nlc3NpbmcgaXRzIGxlYWYgcGFnZS4KK1RoaXMgaXMgcmVxdWlyZWQgYnkgYW55IGlu ZGV4IEFNIHRoYXQgaW1wbGVtZW50cyB0aGUgYW1nZXRiYXRjaAoraW50ZXJmYWNlLiAgKFNlZSBh bHNvLCBkb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21sKS4KIAotVGhpcyBhcHByb2FjaCBpcyBmYWly bHkgY29hcnNlLCBzbyB3ZSBhdm9pZCBpdCB3aGVuZXZlciBwb3NzaWJsZS4gIEluCi1wcmFjdGlj ZSBtb3N0IGluZGV4IHNjYW5zIHdvbid0IGhvbGQgb250byB0aGVpciBwaW4sIGFuZCBzbyB3b24n dCBibG9jawotVkFDVVVNLiAgVGhlc2UgaW5kZXggc2NhbnMgbXVzdCBkZWFsIHdpdGggVElEIHJl Y3ljbGluZyBkaXJlY3RseSwgd2hpY2ggaXMKLW1vcmUgY29tcGxpY2F0ZWQgYW5kIG5vdCBhbHdh eXMgcG9zc2libGUuICBTZWUgbGF0ZXIgc2VjdGlvbiBvbiBtYWtpbmcKLWNvbmN1cnJlbnQgVElE IHJlY3ljbGluZyBzYWZlLgotCi1PcHBvcnR1bmlzdGljIGluZGV4IHR1cGxlIGRlbGV0aW9uIHBl cmZvcm1zIGFsbW9zdCB0aGUgc2FtZSBwYWdlLWxldmVsCi1tb2RpZmljYXRpb25zIHdoaWxlIG9u bHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4gIFRoaXMgaXMgc2FmZSBiZWNhdXNlCi10aGVy ZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNsaW5nIHRha2luZyBwbGFjZSBsYXRlciBvbiAt LSBvbmx5IFZBQ1VVTQotY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxlLiAgU2VlIGFsc28gc2ltcGxl IGRlbGV0aW9uIGFuZCBib3R0b20tdXAKLWRlbGV0aW9uLCBiZWxvdy4KK09wcG9ydHVuaXN0aWMg aW5kZXggdHVwbGUgZGVsZXRpb24gcGVyZm9ybXMgdGhlIHNhbWUgcGFnZS1sZXZlbAorbW9kaWZp Y2F0aW9ucyBhcyBWQUNVVU0sIHdoaWxlIG9ubHkgaG9sZGluZyBhbiBleGNsdXNpdmUgbG9jay4g IFRoaXMgaXMKK3NhZmUgYmVjYXVzZSB0aGVyZSBpcyBubyBxdWVzdGlvbiBvZiBUSUQgcmVjeWNs aW5nIHRha2luZyBwbGFjZSAtLSBvbmx5CitWQUNVVU0gY2FuIG1ha2UgVElEcyByZWN5Y2xhYmxl LiAgSW4gb3RoZXIgd29yZHMsIFZBQ1VVTSdzIGNsZWFudXAgbG9jaworc2VydmVzIHRvIHByb3Rl Y3Qgbm9uLU1WQ0Mgc25hcHNob3Qgc2NhbnMgZnJvbSBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcK K2hhemFyZHM7IGl0IGRvZXNuJ3QgcHJvdGVjdCB0aGUgQi1UcmVlIHN0cnVjdHVyZSBpdHNlbGYu CiAKIEJlY2F1c2UgYSBwaW4gaXMgbm90IGFsd2F5cyBoZWxkLCBhbmQgYSBwYWdlIGNhbiBiZSBz cGxpdCBldmVuIHdoaWxlCiBzb21lb25lIGRvZXMgaG9sZCBhIHBpbiBvbiBpdCwgaXQgaXMgcG9z c2libGUgdGhhdCBhbiBpbmRleHNjYW4gd2lsbApAQCAtNDQwLDU0ICs0MzcsNiBAQCB3aGVuZXZl ciBpdCBpcyBzdWJzZXF1ZW50bHkgdGFrZW4gZnJvbSB0aGUgRlNNIGZvciByZXVzZS4gIFRoZSBk ZWxldGVkCiBwYWdlJ3MgY29udGVudHMgd2lsbCBiZSBvdmVyd3JpdHRlbiBieSB0aGUgc3BsaXQg b3BlcmF0aW9uIChpdCB3aWxsIGJlY29tZQogdGhlIG5ldyByaWdodCBzaWJsaW5nIHBhZ2UpLgog Ci1NYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIHNhZmUKLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLQotCi1BcyBleHBsYWluZWQgaW4gdGhlIGVhcmxpZXIgc2VjdGlv biBhYm91dCBkZWxldGluZyBpbmRleCB0dXBsZXMgZHVyaW5nCi1WQUNVVU0sIHdlIGltcGxlbWVu dCBhIGxvY2tpbmcgcHJvdG9jb2wgdGhhdCBhbGxvd3MgaW5kaXZpZHVhbCBpbmRleCBzY2Fucwot dG8gYXZvaWQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nLiAgSW5kZXggc2NhbnMgb3B0LW91dCAo YW5kIHNvIGRyb3AgdGhlaXIKLWxlYWYgcGFnZSBwaW4gd2hlbiB2aXNpdGluZyB0aGUgaGVhcCkg d2hlbmV2ZXIgaXQncyBzYWZlIHRvIGRvIHNvLCB0aG91Z2guCi1Ecm9wcGluZyB0aGUgcGluIGVh cmx5IGlzIHVzZWZ1bCBiZWNhdXNlIGl0IGF2b2lkcyBibG9ja2luZyBwcm9ncmVzcyBieQotVkFD VVVNLiAgVGhpcyBpcyBwYXJ0aWN1bGFybHkgaW1wb3J0YW50IHdpdGggaW5kZXggc2NhbnMgdXNl ZCBieSBjdXJzb3JzLAotc2luY2UgaWRsZSBjdXJzb3JzIHNvbWV0aW1lcyBzdG9wIGZvciByZWxh dGl2ZWx5IGxvbmcgcGVyaW9kcyBvZiB0aW1lLiAgSW4KLWV4dHJlbWUgY2FzZXMsIGEgY2xpZW50 IGFwcGxpY2F0aW9uIG1heSBob2xkIG9uIHRvIGFuIGlkbGUgY3Vyc29ycyBmb3IKLWhvdXJzIG9y IGV2ZW4gZGF5cy4gIEJsb2NraW5nIFZBQ1VVTSBmb3IgdGhhdCBsb25nIGNvdWxkIGJlIGRpc2Fz dHJvdXMuCi0KLUluZGV4IHNjYW5zIHRoYXQgZG9uJ3QgaG9sZCBvbiB0byBhIGJ1ZmZlciBwaW4g YXJlIHByb3RlY3RlZCBieSBob2xkaW5nIGFuCi1NVkNDIHNuYXBzaG90IGluc3RlYWQuICBUaGlz IG1vcmUgbGltaXRlZCBpbnRlcmxvY2sgcHJldmVudHMgd3JvbmcgYW5zd2VycwotdG8gcXVlcmll cywgYnV0IGl0IGRvZXMgbm90IHByZXZlbnQgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGl0c2Vs ZiAob25seQotaG9sZGluZyBvbnRvIHRoZSBsZWFmIHBhZ2UgcGluIHdoaWxlIGFjY2Vzc2luZyB0 aGUgaGVhcCBlbnN1cmVzIHRoYXQpLgotCi1JbmRleC1vbmx5IHNjYW5zIGNhbiBuZXZlciBkcm9w IHRoZWlyIGJ1ZmZlciBwaW4sIHNpbmNlIHRoZXkgYXJlIHVuYWJsZSB0bwotdG9sZXJhdGUgaGF2 aW5nIGEgcmVmZXJlbmNlZCBUSUQgYmVjb21lIHJlY3ljbGFibGUuICBJbmRleC1vbmx5IHNjYW5z Ci10eXBpY2FsbHkganVzdCB2aXNpdCB0aGUgdmlzaWJpbGl0eSBtYXAgKG5vdCB0aGUgaGVhcCBw cm9wZXIpLCBhbmQgc28gd2lsbAotbm90IHJlbGlhYmx5IG5vdGljZSB0aGF0IGFueSBzdGFsZSBU SUQgcmVmZXJlbmNlIChmb3IgYSBUSUQgdGhhdCBwb2ludGVkCi10byBhIGRlYWQtdG8tYWxsIGhl YXAgaXRlbSBhdCBmaXJzdCkgd2FzIGNvbmN1cnJlbnRseSBtYXJrZWQgTFBfVU5VU0VEIGluCi10 aGUgaGVhcCBieSBWQUNVVU0uICBUaGlzIGNvdWxkIGVhc2lseSBhbGxvdyBWQUNVVU0gdG8gc2V0 IHRoZSB3aG9sZSBoZWFwCi1wYWdlIHRvIGFsbC12aXNpYmxlIGluIHRoZSB2aXNpYmlsaXR5IG1h cCBpbW1lZGlhdGVseSBhZnRlcndhcmRzLiAgQW4gTVZDQwotc25hcHNob3QgaXMgb25seSBzdWZm aWNpZW50IHRvIGF2b2lkIHByb2JsZW1zIGR1cmluZyBwbGFpbiBpbmRleCBzY2FucwotYmVjYXVz ZSB0aGV5IG11c3QgYWNjZXNzIGdyYW51bGFyIHZpc2liaWxpdHkgaW5mb3JtYXRpb24gZnJvbSB0 aGUgaGVhcAotcHJvcGVyLiAgQSBwbGFpbiBpbmRleCBzY2FuIHdpbGwgZXZlbiByZWNvZ25pemUg TFBfVU5VU0VEIGl0ZW1zIGluIHRoZQotaGVhcCAoaXRlbXMgdGhhdCBjb3VsZCBiZSByZWN5Y2xl ZCBidXQgaGF2ZW4ndCBiZWVuIGp1c3QgeWV0KSBhcyAibm90Ci12aXNpYmxlIiAtLSBldmVuIHdo ZW4gdGhlIGhlYXAgcGFnZSBpcyBnZW5lcmFsbHkgY29uc2lkZXJlZCBhbGwtdmlzaWJsZS4KLQot TFBfREVBRCBzZXR0aW5nIG9mIGluZGV4IHR1cGxlcyBieSB0aGUga2lsbF9wcmlvcl90dXBsZSBv cHRpbWl6YXRpb24KLShkZXNjcmliZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93 KSBpcyBhbHNvIG1vcmUgY29tcGxpY2F0ZWQgZm9yCi1pbmRleCBzY2FucyB0aGF0IGRyb3AgdGhl aXIgbGVhZiBwYWdlIHBpbnMuICBXZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKLUxQX0RFQUQt bWFya2luZyBhbnkgbmV3IGluZGV4IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQg aW5kZXgKLXR1cGxlIGJlY2F1c2UgaXQgaGFwcGVucyB0byBzaGFyZSB0aGUgc2FtZSBUSUQsIGZv bGxvd2luZyBjb25jdXJyZW50IFRJRAotcmVjeWNsaW5nLiAgSXQncyBqdXN0IGFib3V0IHBvc3Np YmxlIHRoYXQgc29tZSBvdGhlciBzZXNzaW9uIGluc2VydGVkIGEKLW5ldywgdW5yZWxhdGVkIGlu ZGV4IHR1cGxlLCBvbiB0aGUgc2FtZSBsZWFmIHBhZ2UsIHdoaWNoIGhhcyB0aGUgc2FtZQotb3Jp Z2luYWwgVElELiAgSXQgd291bGQgYmUgdG90YWxseSB3cm9uZyB0byBMUF9ERUFELXNldCB0aGlz IG5ldywKLXVucmVsYXRlZCBpbmRleCB0dXBsZS4KLQotV2UgaGFuZGxlIHRoaXMga2lsbF9wcmlv cl90dXBsZSByYWNlIGNvbmRpdGlvbiBieSBoYXZpbmcgYWZmZWN0ZWQgaW5kZXgKLXNjYW5zIGNv bnNlcnZhdGl2ZWx5IGFzc3VtZSB0aGF0IGFueSBjaGFuZ2UgdG8gdGhlIGxlYWYgcGFnZSBhdCBh bGwKLWltcGxpZXMgdGhhdCBpdCB3YXMgcmVhY2hlZCBieSBidGJ1bGtkZWxldGUgaW4gdGhlIGlu dGVyaW0gcGVyaW9kIHdoZW4gbm8KLWJ1ZmZlciBwaW4gd2FzIGhlbGQuICBUaGlzIGlzIGltcGxl bWVudGVkIGJ5IG5vdCBzZXR0aW5nIGFueSBMUF9ERUFEIGJpdHMKLW9uIHRoZSBsZWFmIHBhZ2Ug YXQgYWxsIHdoZW4gdGhlIHBhZ2UncyBMU04gaGFzIGNoYW5nZWQuICAoVGhpcyBpcyB3aHkgd2UK LWltcGxlbWVudCAiZmFrZSIgTFNOcyBmb3IgdW5sb2dnZWQgaW5kZXggcmVsYXRpb25zLikKLQog RmFzdHBhdGggRm9yIEluZGV4IEluc2VydGlvbgogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQogCkBAIC03MzQsNyArNjgzLDcgQEAgb2YgcmVhZGVycyBjb3VsZCBzdGlsbCBtb3ZlIHJpZ2h0 IHRvIHJlY292ZXIgaWYgd2UgZGlkbid0IGNvdXBsZQogc2FtZS1sZXZlbCBsb2NrcyksIGJ1dCB3 ZSBwcmVmZXIgdG8gYmUgY29uc2VydmF0aXZlIGhlcmUuCiAKIER1cmluZyByZWNvdmVyeSBhbGwg aW5kZXggc2NhbnMgc3RhcnQgd2l0aCBpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IGZhbHNlCi1hbmQg d2UgbmV2ZXIgc2V0IGtpbGxfcHJpb3JfdHVwbGUuIFdlIGRvIHRoaXMgYmVjYXVzZSB0aGUgb2xk ZXN0IHhtaW4KK2FuZCB3ZSBuZXZlciBMUF9ERUFELW1hcmsgdHVwbGVzLiBXZSBkbyB0aGlzIGJl Y2F1c2UgdGhlIG9sZGVzdCB4bWluCiBvbiB0aGUgc3RhbmRieSBzZXJ2ZXIgY2FuIGJlIG9sZGVy IHRoYW4gdGhlIG9sZGVzdCB4bWluIG9uIHRoZSBwcmltYXJ5CiBzZXJ2ZXIsIHdoaWNoIG1lYW5z IHR1cGxlcyBjYW4gYmUgbWFya2VkIExQX0RFQUQgZXZlbiB3aGVuIHRoZXkgYXJlCiBzdGlsbCB2 aXNpYmxlIG9uIHRoZSBzdGFuZGJ5LiBXZSBkb24ndCBXQUwgbG9nIHR1cGxlIExQX0RFQUQgYml0 cywgYnV0CkBAIC03NTYsOSArNzA1LDggQEAgbm9uLU1WQ0Mgc2NhbnMgaXMgbm90IHJlcXVpcmVk IG9uIHN0YW5kYnkgbm9kZXMuIFdlIHN0aWxsIGdldCBhIGZ1bGwKIGNsZWFudXAgbG9jayB3aGVu IHJlcGxheWluZyBWQUNVVU0gcmVjb3JkcyBkdXJpbmcgcmVjb3ZlcnksIGJ1dCByZWNvdmVyeQog ZG9lcyBub3QgbmVlZCB0byBsb2NrIGV2ZXJ5IGxlYWYgcGFnZSAob25seSB0aG9zZSBsZWFmIHBh Z2VzIHRoYXQgaGF2ZQogaXRlbXMgdG8gZGVsZXRlKSAtLSB0aGF0J3Mgc3VmZmljaWVudCB0byBh dm9pZCBicmVha2luZyBpbmRleC1vbmx5IHNjYW5zCi1kdXJpbmcgcmVjb3ZlcnkgKHNlZSBzZWN0 aW9uIGFib3ZlIGFib3V0IG1ha2luZyBUSUQgcmVjeWNsaW5nIHNhZmUpLiBUaGF0Ci1sZWF2ZXMg Y29uY2VybiBvbmx5IGZvciBwbGFpbiBpbmRleCBzY2Fucy4gKFhYWDogTm90IGFjdHVhbGx5IGNs ZWFyIHdoeQotdGhpcyBpcyB0b3RhbGx5IHVubmVjZXNzYXJ5IGR1cmluZyByZWNvdmVyeS4pCitk dXJpbmcgcmVjb3ZlcnkuIFRoYXQgbGVhdmVzIGNvbmNlcm4gb25seSBmb3IgcGxhaW4gaW5kZXgg c2NhbnMuCisoWFhYOiBOb3QgYWN0dWFsbHkgY2xlYXIgd2h5IHRoaXMgaXMgdG90YWxseSB1bm5l Y2Vzc2FyeSBkdXJpbmcgcmVjb3ZlcnkuKQogCiBNVkNDIHNuYXBzaG90IHBsYWluIGluZGV4IHNj YW5zIGFyZSBhbHdheXMgc2FmZSwgZm9yIHRoZSBzYW1lIHJlYXNvbnMgdGhhdAogdGhleSdyZSBz YWZlIGR1cmluZyBvcmlnaW5hbCBleGVjdXRpb24uICBIZWFwVHVwbGVTYXRpc2ZpZXNUb2FzdCgp IGRvZXNuJ3QKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRwYWdlLmMKaW5kZXggMDU0NzAzODYxLi4w MDQ2Yzg0ZDEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5j CisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCkBAIC0xMDYwLDYgKzEw NjAsOSBAQCBfYnRfcmVsYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKICAqIExvY2sgaXMg YWNxdWlyZWQgd2l0aG91dCBhY3F1aXJpbmcgYW5vdGhlciBwaW4uICBUaGlzIGlzIGxpa2UgYSBy YXcKICAqIExvY2tCdWZmZXIoKSBjYWxsLCBidXQgcGVyZm9ybXMgZXh0cmEgc3RlcHMgbmVlZGVk IGJ5IFZhbGdyaW5kLgogICoKKyAqIE5vdGU6IF9idF9iYXRjaF91bmxvY2sgaW4gbmJ0c2VhcmNo LmMgKGluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgd3JhcHBlcgorICogZnVuY3Rpb24pIGhhcyBt YXRjaGluZyBWYWxncmluZCBidWZmZXIgbG9jayBpbnN0cnVtZW50YXRpb24uCisgKgogICogTm90 ZTogQ2FsbGVyIG1heSBuZWVkIHRvIGNhbGwgX2J0X2NoZWNrcGFnZSgpIHdpdGggYnVmIHdoZW4g cGluIG9uIGJ1ZgogICogd2Fzbid0IG9yaWdpbmFsbHkgYWNxdWlyZWQgaW4gX2J0X2dldGJ1Zigp IG9yIF9idF9yZWxhbmRnZXRidWYoKS4KICAqLwpAQCAtMTEwMSwxMyArMTEwNCwxOSBAQCBfYnRf dW5sb2NrYnVmKFJlbGF0aW9uIHJlbCwgQnVmZmVyIGJ1ZikKIAkgKiBCdWZmZXIgaXMgcGlubmVk IGFuZCBsb2NrZWQsIHdoaWNoIG1lYW5zIHRoYXQgaXQgaXMgZXhwZWN0ZWQgdG8gYmUKIAkgKiBk ZWZpbmVkIGFuZCBhZGRyZXNzYWJsZS4gIENoZWNrIHRoYXQgcHJvYWN0aXZlbHkuCiAJICovCi0J VkFMR1JJTkRfQ0hFQ0tfTUVNX0lTX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1op OworI2lmIGRlZmluZWQoVVNFX1ZBTEdSSU5EKQorCVBhZ2UJCXBhZ2UgPSBCdWZmZXJHZXRQYWdl KGJ1Zik7CisKKwlWQUxHUklORF9DSEVDS19NRU1fSVNfREVGSU5FRChwYWdlLCBCTENLU1opOwor I2VuZGlmCiAKIAkvKiBMb2NrQnVmZmVyKCkgYXNzZXJ0cyB0aGF0IHBpbiBpcyBoZWxkIGJ5IHRo aXMgYmFja2VuZCAqLwogCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwogCisj aWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCiAJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMo cmVsKSkKLQkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShidWYpLCBC TENLU1opOworCQlWQUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhwYWdlLCBCTENLU1opOworI2Vu ZGlmCiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl YWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXgg MmJhMWNhNjYwLi4zOWM2NjE0OTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRw YWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7 CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNr a2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24g Ki8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICov CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZz ZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUn cyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdp dGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2Fu YmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAog CQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJf Y2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJ CSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2Fu T3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5P cGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAotCQkJCQkJCQkgIEluZGV4VHVwbGUgaXR1 cCk7Ci1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X3NhdmVwb3N0aW5naXRlbShCVFNjYW5PcGFxdWUg c28sIGludCBpdGVtSW5kZXgsCi0JCQkJCQkJCQkgICBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJ CQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IHR1cGxlT2Zmc2V0KTsKK3N0YXRpYyB2 b2lkIF9idF9zYXZlaXRlbShJbmRleFNjYW5CYXRjaCBuZXdiYXRjaCwgaW50IGl0ZW1JbmRleCwg T2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCQkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVP ZmZzZXQpOworc3RhdGljIGludAlfYnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2gg bmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwg Y29uc3QgSXRlbVBvaW50ZXJEYXRhICp0YWJsZVRpZCwKKwkJCQkJCQkJICBJbmRleFR1cGxlIGl0 dXAsIGludCAqdHVwbGVPZmZzZXQpOworc3RhdGljIGlubGluZSB2b2lkIF9idF9zYXZlcG9zdGlu Z2l0ZW0oSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJl ciBvZmZudW0sCisJCQkJCQkJCQkgICBJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZz ZXQpOwogc3RhdGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVh ZFBhZ2VTdGF0ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5kZXhUdXBsZSB0 dXBsZSwgaW50IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJlKEluZGV4 U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBz dGF0aWMgYm9vbCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBz Y2FuKTsKIAogCiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVu dCBpbmRleCBwYWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQg ZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoKLSAqIENhbGxl ciBtdXN0IGhhdmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5idWY7IHRoZSBi dWZmZXIncyBzdGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1cnJQb3MubW9y ZUxlZnQgYW5kIG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUgdXBkYXRlZCBh cyBhcHByb3ByaWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3MgYXJlCisgKiBD YWxsZXIgbXVzdCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVmOyB0aGUg YnVmZmVyJ3Mgc3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBuZXdiYXRjaCdz IG1vcmVMZWZ0IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkgYXJlIHVwZGF0 ZWQgYXMgYXBwcm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZQogICog aW5pdGlhbGl6ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVu dCBwYWdlIHN0YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAq IGRpcmVjdGlvbi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQg aW50byBjdXJyUG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRo ZSBzY2FuIGtleXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3Ig bW9yZVJpZ2h0IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJl cG9ydHMKICAqIHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJl bnQgcHJpbWl0aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDEx ICsxMzEsMTIgQEAgc3RhdGljIGJvb2wgX2J0X3ZlcmlmeV9rZXlzX3dpdGhfYXJyYXlrZXlzKElu ZGV4U2NhbkRlc2Mgc2Nhbik7CiAgKiBSZXR1cm5zIHRydWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1z IGZvdW5kIG9uIHRoZSBwYWdlLCBmYWxzZSBpZiBub25lLgogICovCiBib29sCi1fYnRfcmVhZHBh Z2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9m Zm51bSwKLQkJCSBib29sIGZpcnN0cGFnZSkKK19idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNj YW4sIEluZGV4U2NhbkJhdGNoIG5ld2JhdGNoLCBTY2FuRGlyZWN0aW9uIGRpciwKKwkJCSBPZmZz ZXROdW1iZXIgb2ZmbnVtLCBib29sIGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2Fu LT5pbmRleFJlbGF0aW9uOwogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4t Pm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRuZXdiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4s IG5ld2JhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0 TnVtYmVyIG1pbm9mZjsKQEAgLTE0NCwyMyArMTQ1LDIwIEBAIF9idF9yZWFkcGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCWJv b2wJCWFycmF5S2V5cywKIAkJCQlpZ25vcmVfa2lsbGVkX3R1cGxlcyA9IHNjYW4tPmlnbm9yZV9r aWxsZWRfdHVwbGVzOwogCWludAkJCWl0ZW1JbmRleCwKKwkJCQl0dXBsZU9mZnNldCA9IDAsCiAJ CQkJaW5kbmF0dHM7CiAKIAkvKiBzYXZlIHRoZSBwYWdlL2J1ZmZlciBibG9jayBudW1iZXIsIGFs b25nIHdpdGggaXRzIHNpYmxpbmcgbGlua3MgKi8KLQlwYWdlID0gQnVmZmVyR2V0UGFnZShzby0+ Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ0bmV3YmF0Y2gtPmJ1Zik7CiAJ b3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0g QnVmZmVyR2V0QmxvY2tOdW1iZXIoc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5wcmV2 UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2OwotCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gb3BhcXVl LT5idHBvX25leHQ7Ci0JLyogZGVsYXkgc2V0dGluZyBzby0+Y3VyclBvcy5sc24gdW50aWwgX2J0 X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluICovCi0JcHN0YXRlLmRpciA9IHNvLT5jdXJyUG9zLmRp ciA9IGRpcjsKLQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgPSAwOworCXBzdGF0ZS5jdXJy cGFnZSA9IGJ0bmV3YmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnRuZXdi YXRjaC0+YnVmKTsKKwlidG5ld2JhdGNoLT5wcmV2UGFnZSA9IG9wYXF1ZS0+YnRwb19wcmV2Owor CWJ0bmV3YmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5idHBvX25leHQ7CisJcHN0YXRlLmRpciA9 IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkvKiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0 IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUgdW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0KFNjYW5E aXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0JCSAgIHNv LT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3NlcnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIp ID8gYnRuZXdiYXRjaC0+bW9yZVJpZ2h0IDogYnRuZXdiYXRjaC0+bW9yZUxlZnQpOwogCUFzc2Vy dCghUF9JR05PUkUob3BhcXVlKSk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJy UG9zKSk7CiAJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKIAogCS8qIGluaXRpYWxpemUgbG9j YWwgdmFyaWFibGVzICovCkBAIC0xODgsMTQgKzE4NiwxNCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAl7 CiAJCS8qIGFsbG93IG5leHQvcHJldiBwYWdlIHRvIGJlIHJlYWQgYnkgb3RoZXIgd29ya2VyIHdp dGhvdXQgZGVsYXkgKi8KIAkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJCV9i dF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLm5leHRQYWdlLAotCQkJCQkJCQkg c28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2NhbiwgYnRu ZXdiYXRjaC0+bmV4dFBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFnZSk7CiAJCWVs c2UKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9zLnByZXZQYWdlLAot CQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uo c2NhbiwgYnRuZXdiYXRjaC0+cHJldlBhZ2UsCisJCQkJCQkJCSBidG5ld2JhdGNoLT5jdXJyUGFn ZSk7CiAJfQogCi0JUHJlZGljYXRlTG9ja1BhZ2UocmVsLCBzby0+Y3VyclBvcy5jdXJyUGFnZSwg c2Nhbi0+eHNfc25hcHNob3QpOworCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgcHN0YXRlLmN1cnJw YWdlLCBzY2FuLT54c19zbmFwc2hvdCk7CiAKIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChk aXIpKQogCXsKQEAgLTIxMiwxMSArMjEwLDExIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCQkhX2J0 X3NjYW5iZWhpbmRfY2hlY2trZXlzKHNjYW4sIGRpciwgcHN0YXRlLmZpbmFsdHVwKSkKIAkJCQl7 CiAJCQkJCS8qIFNjaGVkdWxlIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gYWZ0ZXIgYWxs ICovCi0JCQkJCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IGZhbHNlOworCQkJCQlidG5ld2JhdGNo LT5tb3JlUmlnaHQgPSBmYWxzZTsKIAkJCQkJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CiAJCQkJ CWlmIChzY2FuLT5wYXJhbGxlbF9zY2FuKQogCQkJCQkJX2J0X3BhcmFsbGVsX3ByaW1zY2FuX3Nj aGVkdWxlKHNjYW4sCi0JCQkJCQkJCQkJCQkJICAgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJ CQkJCQkJCQkJCSAgIGJ0bmV3YmF0Y2gtPmN1cnJQYWdlKTsKIAkJCQkJcmV0dXJuIGZhbHNlOwog CQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc4LDI2IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCQkJCWlm ICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7CiAJCQkJCS8qIFJlbWVtYmVyIGl0 ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOworCQkJ CQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwLCAmdHVwbGVP ZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJCQkJZWxzZQogCQkJCXsKLQkJCQkJ aW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VPZmZzZXQ7CiAKIAkJCQkJLyogU2V0 IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVyIGZpcnN0IFRJRCkgKi8KLQkJCQkJ dHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGluZ2l0ZW1zKHNvLCBpdGVtSW5kZXgs IG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMo bmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJCQkJCQkgIEJUcmVlVHVwbGVHZXRQ b3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVwKTsKKwkJCQkJCQkJCQkJICBpdHVw LCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAogCQkJCQkvKiBSZW1lbWJlciBh bGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUpICovCiAJCQkJCWZvciAoaW50IGkg PSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOyBpKyspCiAJCQkJCXsKLQkJCQkJ CV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQkJX2J0X3Nh dmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCUJU cmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJCQkJCQkJdHVwbGVPZmZzZXQpOwor CQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1JbmRleCsrOwogCQkJCQl9CiAJCQkJ fQpAQCAtMzM5LDEyICszMzcsMTEgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg U2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCX0KIAogCQlpZiAoIXBz dGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJ CWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCiAJCUFzc2VydChpdGVtSW5kZXggPD0g TWF4VElEc1BlckJUcmVlUGFnZSk7Ci0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IDA7Ci0JCXNv LT5jdXJyUG9zLmxhc3RJdGVtID0gaXRlbUluZGV4IC0gMTsKLQkJc28tPmN1cnJQb3MuaXRlbUlu ZGV4ID0gMDsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IDA7CisJCW5ld2JhdGNoLT5sYXN0SXRl bSA9IGl0ZW1JbmRleCAtIDE7CiAJfQogCWVsc2UKIAl7CkBAIC0zNjEsMTEgKzM1OCwxMSBAQCBf YnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0 TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9zY2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIs IHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewogCQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1p dGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAqLwotCQkJCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9 IGZhbHNlOworCQkJCQlidG5ld2JhdGNoLT5tb3JlTGVmdCA9IGZhbHNlOwogCQkJCQlzby0+bmVl ZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCiAJCQkJCQlf YnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+ Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQkJCQkJCQkJICAgYnRuZXdiYXRjaC0+Y3VyclBhZ2Up OwogCQkJCQlyZXR1cm4gZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NjMsMjcgQEAg X2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNl dE51bWJlciBvZmZudW0sCiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVt SW5kZXgtLTsKLQkJCQkJX2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7 CisJCQkJCV9idF9zYXZlaXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0 dXBsZU9mZnNldCk7CiAJCQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1z ID0gQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsK KwkJCQkJaW50CQkJYmFzZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0 YXRlIChhbmQgcmVtZW1iZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0 dXBsZU9mZnNldCA9Ci0JCQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwg b2ZmbnVtLAorCQkJCQliYXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhu ZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBv c3RpbmdOKGl0dXAsIG5pdGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJ CQkgIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJ RHMgKG11c3QgYmUgYXQgbGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0g MjsgaSA+PSAwOyBpLS0pCiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3Nh dmVwb3N0aW5naXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3Rp bmdpdGVtKG5ld2JhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBs ZUdldFBvc3RpbmdOKGl0dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJ CQkJCWJhc2VPZmZzZXQpOwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0OTksMTEg QEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9m ZnNldE51bWJlciBvZmZudW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBz dGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJ YnRuZXdiYXRjaC0+bW9yZUxlZnQgPSBmYWxzZTsKIAogCQlBc3NlcnQoaXRlbUluZGV4ID49IDAp OwotCQlzby0+Y3VyclBvcy5maXJzdEl0ZW0gPSBpdGVtSW5kZXg7Ci0JCXNvLT5jdXJyUG9zLmxh c3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7Ci0JCXNvLT5jdXJyUG9zLml0ZW1JbmRl eCA9IE1heFRJRHNQZXJCVHJlZVBhZ2UgLSAxOworCQluZXdiYXRjaC0+Zmlyc3RJdGVtID0gaXRl bUluZGV4OworCQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBNYXhUSURzUGVyQlRyZWVQYWdlIC0gMTsK IAl9CiAKIAkvKgpAQCAtNTI0LDcgKzUyMCw3IEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCSAqLwogCUFz c2VydCghcHN0YXRlLmZvcmNlbm9ucmVxdWlyZWQpOwogCi0JcmV0dXJuIChzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOworCXJldHVybiAobmV3YmF0Y2gtPmZp cnN0SXRlbSA8PSBuZXdiYXRjaC0+bGFzdEl0ZW0pOwogfQogCiAvKgpAQCAtMTAyNyw5MCArMTAy Myw5MSBAQCBfYnRfb3Bwb2Rpcl9jaGVja2tleXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGly ZWN0aW9uIGRpciwKIAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2ZSBhbiBpbmRleCBpdGVt IGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSAqLwogc3RhdGljIHZvaWQKLV9idF9zYXZl aXRlbShCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsCi0JCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgSW5kZXhUdXBsZSBpdHVwKQorX2J0X3NhdmVpdGVtKEluZGV4U2NhbkJhdGNoIG5ld2Jh dGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJIEluZGV4VHVwbGUg aXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOwotCiAJQXNzZXJ0KCFCVHJlZVR1cGxlSXNQaXZv dChpdHVwKSAmJiAhQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSk7CiAKLQljdXJySXRlbS0+aGVh cFRpZCA9IGl0dXAtPnRfdGlkOwotCWN1cnJJdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKLQlp ZiAoc28tPmN1cnJUdXBsZXMpCisJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udGFibGVUaWQg PSBpdHVwLT50X3RpZDsKKwluZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9 IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0dXBz eiA9IEluZGV4VHVwbGVTaXplKGl0dXApOwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNv LT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsgc28t PmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBvcy5u ZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJR04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1zW2l0 ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAqdHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRjaC0+ Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zmc2V0 ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJfQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8gc2F2 ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5nbGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAqIFNh dmVzIGFuIGluZGV4IGl0ZW0gaW50byBzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBU SUQgdGhhdCBpcwotICogcmV0dXJuZWQgdG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1 ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlzdCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxpbmcg X2J0X3NhdmVwb3N0aW5naXRlbSgpLgorICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2Jh dGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9yIFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBzY2Fu IGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNlcXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3Vs ZCBiZSBzYXZlZAorICogYnkgY2FsbGluZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgotICog UmV0dXJucyBhbiBvZmZzZXQgaW50byB0dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBs ZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5lZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwgYW4g b2Zmc2V0IGludG8gdHVwbGUgc3RvcmFnZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAqIHN0 b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8KIHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3RpbmdpdGVt cyhCVFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0J CQkJCSAgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCitf YnRfc2V0dXBwb3N0aW5naXRlbXMoSW5kZXhTY2FuQmF0Y2ggbmV3YmF0Y2gsIGludCBpdGVtSW5k ZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICp0 YWJsZVRpZCwKKwkJCQkJICBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVPZmZzZXQpCiB7Ci0J QlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsK KwlCYXRjaE1hdGNoaW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsK IAogCUFzc2VydChCVHJlZVR1cGxlSXNQb3N0aW5nKGl0dXApKTsKIAotCWN1cnJJdGVtLT5oZWFw VGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwotCWlmIChz by0+Y3VyclR1cGxlcykKKwlpdGVtLT50YWJsZVRpZCA9ICp0YWJsZVRpZDsKKwlpdGVtLT5pbmRl eE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRjaC0+Y3VyclR1cGxlcykKIAl7CiAJCS8q IFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBwb3N0aW5nIGxpc3QpICovCiAJCUluZGV4 VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRyZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQo aXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1cHN6KTsKLQkJY3Vyckl0ZW0tPnR1cGxl T2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0OwotCQliYXNlID0gKEluZGV4VHVw bGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7CisJCWl0 ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0OworCQliYXNlID0gKEluZGV4VHVwbGUpIChu ZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNldCk7CiAJCW1lbWNweShiYXNlLCBpdHVw LCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1Y2Ugd29yayBhcmVhIGluZGV4IHR1cGxl IGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAmPSB+SU5ERVhfU0laRV9NQVNLOwogCQli YXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0g aXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6OwogCi0JCXJldHVybiBjdXJySXRlbS0+ dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBsZU9mZnNldDsKIAl9CiAKIAlyZXR1cm4g MDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1z W2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZworICogU2F2ZSBhbiBpbmRleCBpdGVtIGlu dG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3IgY3VycmVudCBwb3N0aW5nCiAgKiB0dXBs ZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVwcG9zdGluZ2l0ZW1zKCkgaGFzIGFscmVh ZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxl ciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBsZU9mZnNldC4KKyAqIHBvc3RpbmcgbGlz dCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyBiYXNlT2Zmc2V0Lgog ICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVl IHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAotCQkJCQlJdGVtUG9pbnRl ciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRfc2F2ZXBvc3RpbmdpdGVtKEluZGV4U2Nh bkJhdGNoIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CQlJdGVtUG9pbnRlciB0YWJsZVRpZCwgaW50IGJhc2VPZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRl bSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XTsKKwlCYXRjaE1hdGNo aW5nSXRlbSAqaXRlbSA9ICZuZXdiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAotCWN1cnJJdGVt LT5oZWFwVGlkID0gKmhlYXBUaWQ7Ci0JY3Vyckl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwor CWl0ZW0tPnRhYmxlVGlkID0gKnRhYmxlVGlkOworCWl0ZW0tPmluZGV4T2Zmc2V0ID0gb2ZmbnVt OwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMgcmV0dXJuIHRoZSBzYW1lIGJhc2Ug SW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBvcmlnaW5hdGVzIGZyb20gdGhlIHNh bWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQljdXJySXRlbS0+ dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3YmF0Y2gtPmN1cnJUdXBsZXMpCisJ CWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0KIAogI2RlZmluZSBMT09LX0FIRUFE X1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIxLDE0ICsyODE4LDE1IEBAIG5ld19wcmltX3Nj YW46CiAJICoKIAkgKiBOb3RlOiBXZSBtYWtlIGEgc29mdCBhc3N1bXB0aW9uIHRoYXQgdGhlIGN1 cnJlbnQgc2NhbiBkaXJlY3Rpb24gd2lsbAogCSAqIGFsc28gYmUgdXNlZCB3aXRoaW4gX2J0X25l eHQsIHdoZW4gaXQgaXMgYXNrZWQgdG8gc3RlcCBvZmYgdGhpcyBwYWdlLgotCSAqIEl0IGlzIHVw IHRvIF9idF9uZXh0IHRvIGNhbmNlbCB0aGlzIHNjaGVkdWxlZCBwcmltaXRpdmUgaW5kZXggc2Nh bgotCSAqIHdoZW5ldmVyIGl0IHN0ZXBzIHRvIGEgcGFnZSBpbiB0aGUgZGlyZWN0aW9uIG9wcG9z aXRlIGN1cnJQb3MuZGlyLgorCSAqIFRoZSBzY2FuIGRpcmVjdGlvbiBtaWdodCBiZSByZXZlcnNl ZCBkdXJpbmcgdGhlIG5leHQgYW1nZXRiYXRjaCBjYWxsLAorCSAqIGJ1dCBub3QgYmVmb3JlIGEg Y2FsbCB0byBidHBvc3Jlc2V0IHRoYXQgcmVzZXRzIHRoZSBhcnJheSBrZXlzIHRvIHRoZQorCSAq IGZpcnN0IHBvc2l0aW9ucy9lbGVtZW50cyB1c2VkIHdoZW4gc2Nhbm5pbmcgaW4gdGhpcyBvdGhl ciBkaXJlY3Rpb24uCiAJICovCiAJcHN0YXRlLT5jb250aW51ZXNjYW4gPSBmYWxzZTsJLyogVGVs bCBfYnRfcmVhZHBhZ2Ugd2UncmUgZG9uZS4uLiAqLwogCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVl OwkvKiAuLi5idXQgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KIAogCWlmIChzY2FuLT5wYXJhbGxl bF9zY2FuKQotCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2Nhbiwgc28tPmN1cnJQ b3MuY3VyclBhZ2UpOworCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgcHN0 YXRlLT5jdXJycGFnZSk7CiAKIAkvKiBDYWxsZXIncyB0dXBsZSBkb2Vzbid0IG1hdGNoIHRoZSBu ZXcgcXVhbCAqLwogCXJldHVybiBmYWxzZTsKQEAgLTI4NDEsOSArMjgzOSw4IEBAIGVuZF90b3Bs ZXZlbF9zY2FuOgogCSAqIFRoaXMgZW5kcyB0aGUgZW50aXJlIHRvcC1sZXZlbCBzY2FuIGluIHRo ZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgogCSAqCiAJICogTm90ZTogVGhlIHNjYW4ncyBhcnJh eXMgKGluY2x1ZGluZyBhbnkgbm9uLXJlcXVpcmVkIGFycmF5cykgYXJlIG5vdyBpbgotCSAqIHRo ZWlyIGZpbmFsIHBvc2l0aW9ucyBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uICBJZiB0 aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBoYXBwZW5zIHRvIGNoYW5nZSwgdGhlbiB0aGUgYXJyYXlz IHdpbGwgYWxyZWFkeSBiZSBpbiB0aGVpcgotCSAqIGZpcnN0IHBvc2l0aW9ucyBmb3Igd2hhdCB3 aWxsIHRoZW4gYmUgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCisJICogdGhlaXIgZmluYWwg cG9zaXRpb25zIGZvciB0aGUgY3VycmVudCBzY2FuIGRpcmVjdGlvbi4gIFRoaXMgaXMganVzdAor CSAqIGRlZmVuc2l2ZS4KIAkgKi8KIAlwc3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBU ZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBkb25lLi4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IGZh bHNlOwkvKiAuLi5hbmQgZG9uJ3QgY2FsbCBfYnRfZmlyc3QgYWdhaW4gKi8KQEAgLTI5MTAsMTcg KzI5MDcsOSBAQCBfYnRfYWR2YW5jZV9hcnJheV9rZXlzX2luY3JlbWVudChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAogCS8qCiAJICogVGhlIGFycmF5IGtleXMgYXJlIG5v dyBleGhhdXN0ZWQuCiAJICoKLQkgKiBSZXN0b3JlIHRoZSBhcnJheSBrZXlzIHRvIHRoZSBzdGF0 ZSB0aGV5IHdlcmUgaW4gaW1tZWRpYXRlbHkgYmVmb3JlIHdlCi0JICogd2VyZSBjYWxsZWQuICBU aGlzIGVuc3VyZXMgdGhhdCB0aGUgYXJyYXlzIG9ubHkgZXZlciByYXRjaGV0IGluIHRoZQotCSAq IGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24uCi0JICoKLQkgKiBXaXRob3V0IHRoaXMsIHNjYW5zIGNv dWxkIG92ZXJsb29rIG1hdGNoaW5nIHR1cGxlcyB3aGVuIHRoZSBzY2FuCi0JICogZGlyZWN0aW9u IGdldHMgcmV2ZXJzZWQganVzdCBiZWZvcmUgYnRnZXR0dXBsZSBydW5zIG91dCBvZiBpdGVtcyB0 bwotCSAqIHJldHVybiwgYnV0IGp1c3QgYWZ0ZXIgX2J0X3JlYWRwYWdlIHByZXBhcmVzIGFsbCB0 aGUgaXRlbXMgZnJvbSB0aGUKLQkgKiBzY2FuJ3MgZmluYWwgcGFnZSBpbiBzby0+Y3VyclBvcy4g IFdoZW4gd2UncmUgb24gdGhlIGZpbmFsIHBhZ2UgaXQgaXMKLQkgKiB0eXBpY2FsIGZvciBzby0+ Y3VyclBvcyB0byBnZXQgaW52YWxpZGF0ZWQgb25jZSBidGdldHR1cGxlIGZpbmFsbHkKLQkgKiBy ZXR1cm5zIGZhbHNlLCB3aGljaCdsbCBlZmZlY3RpdmVseSBpbnZhbGlkYXRlIHRoZSBzY2FuJ3Mg YXJyYXkga2V5cy4KLQkgKiBUaGF0IGhhc24ndCBoYXBwZW5lZCB5ZXQsIHRob3VnaCAtLSBhbmQg aW4gZ2VuZXJhbCBpdCBtYXkgbmV2ZXIgaGFwcGVuLgorCSAqIERlZmVuc2l2ZWx5IHJlc3RvcmUg dGhlIGFycmF5IGtleXMgdG8gdGhlIHBvc2l0aW9ucyB0aGV5IHdlcmUgaW4KKwkgKiBpbW1lZGlh dGVseSBiZWZvcmUgd2Ugd2VyZSBjYWxsZWQgKGkuZS4gdG8gdGhlaXIgZmluYWwgcG9zaXRpb25z IGZvcgorCSAqIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uKS4KIAkgKi8KIAlfYnRfc3RhcnRf YXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKaW5k ZXggNmQ4NzBlNGViLi43N2FmMDlmNGMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYwpA QCAtMTYxLDExICsxNjEsMTMgQEAgYnRoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWFk anVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJlZ2luc2NhbiA9IGJ0YmVnaW5z Y2FuLAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0dHVwbGUgPSBidGdldHR1cGxl LAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0gYnRnZXRiYXRjaCwKKwkJ LmFta2lsbGl0ZW1zYmF0Y2ggPSBidGtpbGxpdGVtc2JhdGNoLAorCQkuYW11bmd1YXJkYmF0Y2gg PSBidHVuZ3VhcmRiYXRjaCwKIAkJLmFtZ2V0Yml0bWFwID0gYnRnZXRiaXRtYXAsCiAJCS5hbWVu ZHNjYW4gPSBidGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBidG1hcmtwb3MsCi0JCS5hbXJlc3Ry cG9zID0gYnRyZXN0cnBvcywKKwkJLmFtcG9zcmVzZXQgPSBidHBvc3Jlc2V0LAogCQkuYW1lc3Rp bWF0ZXBhcmFsbGVsc2NhbiA9IGJ0ZXN0aW1hdGVwYXJhbGxlbHNjYW4sCiAJCS5hbWluaXRwYXJh bGxlbHNjYW4gPSBidGluaXRwYXJhbGxlbHNjYW4sCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gYnRw YXJhbGxlbHJlc2NhbiwKQEAgLTIyNCwxMyArMjI2LDEzIEBAIGJ0aW5zZXJ0KFJlbGF0aW9uIHJl bCwgRGF0dW0gKnZhbHVlcywgYm9vbCAqaXNudWxsLAogfQogCiAvKgotICoJYnRnZXR0dXBsZSgp IC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWJ0Z2V0YmF0Y2goKSAtLSBH ZXQgdGhlIGZpcnN0IG9yIG5leHQgYmF0Y2ggb2YgdHVwbGVzIGluIHRoZSBzY2FuCiAgKi8KLWJv b2wKLWJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK0lu ZGV4U2NhbkJhdGNoCitidGdldGJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0 Y2ggcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0g KEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwotCWJvb2wJCXJlczsKKwlJbmRleFNjYW5CYXRj aCBiYXRjaCA9IHByaW9yYmF0Y2g7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uICE9IE5V TEwpOwogCkBAIC0yNDMsNDUgKzI0NSwyMCBAQCBidGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCS8qCiAJCSAqIElmIHdlJ3ZlIGFscmVhZHkgaW5pdGlh bGl6ZWQgdGhpcyBzY2FuLCB3ZSBjYW4ganVzdCBhZHZhbmNlIGl0IGluCiAJCSAqIHRoZSBhcHBy b3ByaWF0ZSBkaXJlY3Rpb24uICBJZiB3ZSBoYXZlbid0IGRvbmUgc28geWV0LCB3ZSBjYWxsCi0J CSAqIF9idF9maXJzdCgpIHRvIGdldCB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgc2Nhbi4KKwkJICog X2J0X2ZpcnN0KCkgdG8gZ2V0IHRoZSBmaXJzdCBiYXRjaCBpbiB0aGUgc2Nhbi4KIAkJICovCi0J CWlmICghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCQlyZXMgPSBfYnRfZmlyc3Qo c2NhbiwgZGlyKTsKKwkJaWYgKGJhdGNoID09IE5VTEwpCisJCQliYXRjaCA9IF9idF9maXJzdChz Y2FuLCBkaXIpOwogCQllbHNlCi0JCXsKLQkJCS8qCi0JCQkgKiBDaGVjayB0byBzZWUgaWYgd2Ug c2hvdWxkIGtpbGwgdGhlIHByZXZpb3VzbHktZmV0Y2hlZCB0dXBsZS4KLQkJCSAqLwotCQkJaWYg KHNjYW4tPmtpbGxfcHJpb3JfdHVwbGUpCi0JCQl7Ci0JCQkJLyoKLQkJCQkgKiBZZXMsIHJlbWVt YmVyIGl0IGZvciBsYXRlci4gKFdlJ2xsIGRlYWwgd2l0aCBhbGwgc3VjaAotCQkJCSAqIHR1cGxl cyBhdCBvbmNlIHJpZ2h0IGJlZm9yZSBsZWF2aW5nIHRoZSBpbmRleCBwYWdlLikgIFRoZQotCQkJ CSAqIHRlc3QgZm9yIG51bUtpbGxlZCBvdmVycnVuIGlzIG5vdCBqdXN0IHBhcmFub2lhOiBpZiB0 aGUKLQkJCQkgKiBjYWxsZXIgcmV2ZXJzZXMgZGlyZWN0aW9uIGluIHRoZSBpbmRleHNjYW4gdGhl biB0aGUgc2FtZQotCQkJCSAqIGl0ZW0gbWlnaHQgZ2V0IGVudGVyZWQgbXVsdGlwbGUgdGltZXMu IEl0J3Mgbm90IHdvcnRoCi0JCQkJICogdHJ5aW5nIHRvIG9wdGltaXplIHRoYXQsIHNvIHdlIGRv bid0IGRldGVjdCBpdCwgYnV0IGluc3RlYWQKLQkJCQkgKiBqdXN0IGZvcmdldCBhbnkgZXhjZXNz IGVudHJpZXMuCi0JCQkJICovCi0JCQkJaWYgKHNvLT5raWxsZWRJdGVtcyA9PSBOVUxMKQotCQkJ CQlzby0+a2lsbGVkSXRlbXMgPSBwYWxsb2NfYXJyYXkoaW50LCBNYXhUSURzUGVyQlRyZWVQYWdl KTsKLQkJCQlpZiAoc28tPm51bUtpbGxlZCA8IE1heFRJRHNQZXJCVHJlZVBhZ2UpCi0JCQkJCXNv LT5raWxsZWRJdGVtc1tzby0+bnVtS2lsbGVkKytdID0gc28tPmN1cnJQb3MuaXRlbUluZGV4Owot CQkJfQorCQkJYmF0Y2ggPSBfYnRfbmV4dChzY2FuLCBkaXIsIGJhdGNoKTsKIAotCQkJLyoKLQkJ CSAqIE5vdyBjb250aW51ZSB0aGUgc2Nhbi4KLQkJCSAqLwotCQkJcmVzID0gX2J0X25leHQoc2Nh biwgZGlyKTsKLQkJfQotCi0JCS8qIElmIHdlIGhhdmUgYSB0dXBsZSwgcmV0dXJuIGl0IC4uLiAq LwotCQlpZiAocmVzKQorCQkvKiBJZiB3ZSBoYXZlIGEgYmF0Y2gsIHJldHVybiBpdCAuLi4gKi8K KwkJaWYgKGJhdGNoKQogCQkJYnJlYWs7CiAJCS8qIC4uLiBvdGhlcndpc2Ugc2VlIGlmIHdlIG5l ZWQgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiAqLwogCX0gd2hpbGUgKHNvLT5udW1BcnJh eUtleXMgJiYgX2J0X3N0YXJ0X3ByaW1fc2NhbihzY2FuKSk7CiAKLQlyZXR1cm4gcmVzOworCXJl dHVybiBiYXRjaDsKIH0KIAogLyoKQEAgLTI5MSwzOCArMjY4LDQzIEBAIGludDY0CiBidGdldGJp dG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewogCUJUU2Nhbk9wYXF1 ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlJbmRleFNjYW5CYXRjaCBiYXRj aDsKIAlpbnQ2NAkJbnRpZHMgPSAwOwotCUl0ZW1Qb2ludGVyIGhlYXBUaWQ7CisJSXRlbVBvaW50 ZXIgdGFibGVUaWQ7CiAKIAlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9uID09IE5VTEwpOwogCiAJ LyogRWFjaCBsb29wIGl0ZXJhdGlvbiBwZXJmb3JtcyBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBz Y2FuICovCiAJZG8KIAl7Ci0JCS8qIEZldGNoIHRoZSBmaXJzdCBwYWdlICYgdHVwbGUgKi8KLQkJ aWYgKF9idF9maXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCS8qIEZldGNoIHRo ZSBmaXJzdCBiYXRjaCAqLworCQlpZiAoKGJhdGNoID0gX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRT Y2FuRGlyZWN0aW9uKSkpCiAJCXsKLQkJCS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBz Y2FubmluZyAqLwotCQkJaGVhcFRpZCA9ICZzY2FuLT54c19oZWFwdGlkOwotCQkJdGJtX2FkZF90 dXBsZXModGJtLCBoZWFwVGlkLCAxLCBmYWxzZSk7CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOwor CisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElEICovCisJCQl0YWJsZVRpZCA9ICZiYXRjaC0+ aXRlbXNbaXRlbUluZGV4XS50YWJsZVRpZDsKKwkJCXRibV9hZGRfdHVwbGVzKHRibSwgdGFibGVU aWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJCWZvciAoOzspCiAJCQl7Ci0JCQkJLyoK LQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBz YW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBfYnRfbmV4dCgpLgotCQkJCSAqLwotCQkJ CWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJ CS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBhZ2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlp ZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0pCiAJCQkJewotCQkJCQkvKiBsZXQgX2J0 X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJCQkJaWYgKCFfYnRfbmV4dChzY2FuLCBG b3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCS8qCisJCQkJCSAqIF9idF9uZXh0IHJlbGVhc2Vz IHRoZSBwcmlvciBiYXRjaCBmb3IgYml0bWFwIGNhbGxlcnMKKwkJCQkJICogYmVmb3JlIGFsbG9j YXRpbmcgdGhlIG5leHQgb25lLCBzbyBvbmx5IG9uZSBiYXRjaCBpcworCQkJCQkgKiBldmVyIHVz ZWQgYXQgYSB0aW1lCisJCQkJCSAqLworCQkJCQlpdGVtSW5kZXggPSAwOworCQkJCQliYXRjaCA9 IF9idF9uZXh0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBiYXRjaCk7CisJCQkJCWlmICgh YmF0Y2gpCiAJCQkJCQlicmVhazsKIAkJCQl9CiAKLQkJCQkvKiBTYXZlIHR1cGxlIElELCBhbmQg Y29udGludWUgc2Nhbm5pbmcgKi8KLQkJCQloZWFwVGlkID0gJnNvLT5jdXJyUG9zLml0ZW1zW3Nv LT5jdXJyUG9zLml0ZW1JbmRleF0uaGVhcFRpZDsKLQkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIGhl YXBUaWQsIDEsIGZhbHNlKTsKKwkJCQl0YWJsZVRpZCA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4 XS50YWJsZVRpZDsKKwkJCQl0Ym1fYWRkX3R1cGxlcyh0Ym0sIHRhYmxlVGlkLCAxLCBmYWxzZSk7 CiAJCQkJbnRpZHMrKzsKIAkJCX0KIAkJfQpAQCAtMzQ5LDggKzMzMSw2IEBAIGJ0YmVnaW5zY2Fu KFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUg cHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBhbGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0 YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4tPm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5r ZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2FuLT5udW1iZXJPZktleXMgKiBzaXplb2YoU2Nh bktleURhdGEpKTsKIAllbHNlCkBAIC0zNjQsMTkgKzM0NCwxMSBAQCBidGJlZ2luc2NhbihSZWxh dGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAlzby0+b3JkZXJQcm9jcyA9IE5V TEw7CiAJc28tPmFycmF5Q29udGV4dCA9IE5VTEw7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBOVUxM OwkJLyogdW50aWwgbmVlZGVkICovCi0Jc28tPm51bUtpbGxlZCA9IDA7Ci0KLQkvKgotCSAqIFdl IGRvbid0IGtub3cgeWV0IHdoZXRoZXIgdGhlIHNjYW4gd2lsbCBiZSBpbmRleC1vbmx5LCBzbyB3 ZSBkbyBub3QKLQkgKiBhbGxvY2F0ZSB0aGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cyB1bnRpbCBi dHJlc2Nhbi4gIEhvd2V2ZXIsIHdlIHNldCB1cAotCSAqIHNjYW4tPnhzX2l0dXBkZXNjIHdoZXRo ZXIgd2UnbGwgbmVlZCBpdCBvciBub3QsIHNpbmNlIHRoYXQncyBzbyBjaGVhcC4KLQkgKi8KLQlz by0+Y3VyclR1cGxlcyA9IHNvLT5tYXJrVHVwbGVzID0gTlVMTDsKLQotCXNjYW4tPnhzX2l0dXBk ZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nh bi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7CisJc2Nhbi0+bWF4aXRlbXNi YXRjaCA9IE1heFRJRHNQZXJCVHJlZVBhZ2U7CisJc2Nhbi0+YmF0Y2hfaW5kZXhfb3BhcXVlX3Np emUgPSBNQVhBTElHTihzaXplb2YoQlRCYXRjaERhdGEpKTsKKwlzY2FuLT5iYXRjaF90dXBsZXNf d29ya3NwYWNlID0gQkxDS1NaOwogCiAJcmV0dXJuIHNjYW47CiB9CkBAIC0zOTAsNjQgKzM2Miwx ODUgQEAgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBu c2NhbmtleXMsCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3Bh cXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBk cm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsK LQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBp dGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4p OwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52 YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JfQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJs eSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhp cyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24g dGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMg ZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZv bHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0 J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mg c25hcHNob3QuCi0JICoKLQkgKiBBbHNvIG9wdCBvdXQgb2YgZHJvcHBpbmcgbGVhZiBwYWdlIHBp bnMgZWFnZXJseSBkdXJpbmcgYml0bWFwIHNjYW5zLgotCSAqIFBpbnMgY2Fubm90IGJlIGhlbGQg Zm9yIG1vcmUgdGhhbiBhbiBpbnN0YW50IGR1cmluZyBiaXRtYXAgc2NhbnMgZWl0aGVyCi0JICog d2F5LCBzbyB3ZSBtaWdodCBhcyB3ZWxsIGF2b2lkIHdhc3RpbmcgY3ljbGVzIG9uIGFjcXVpcmlu ZyBwYWdlIExTTnMuCi0JICoKLQkgKiBTZWUgbmJ0cmVlL1JFQURNRSBzZWN0aW9uIG9uIG1ha2lu ZyBjb25jdXJyZW50IFRJRCByZWN5Y2xpbmcgc2FmZS4KLQkgKgotCSAqIE5vdGU6IHNvLT5kcm9w UGluIHNob3VsZCBuZXZlciBjaGFuZ2UgYWNyb3NzIHJlc2NhbnMuCi0JICovCi0Jc28tPmRyb3BQ aW4gPSAoIXNjYW4tPnhzX3dhbnRfaXR1cCAmJgotCQkJCSAgIElzTVZDQ0xpa2VTbmFwc2hvdChz Y2FuLT54c19zbmFwc2hvdCkgJiYKLQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVMTCk7 Ci0KLQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK LQlzby0+c2NhbkJlaGluZCA9IGZhbHNlOwotCXNvLT5vcHBvc2l0ZURpckNoZWNrID0gZmFsc2U7 Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFya1Bvcyk7Ci0JQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+bWFya1Bvcyk7Ci0KLQkvKgotCSAqIEFsbG9jYXRlIHR1cGxlIHdvcmtzcGFjZSBh cnJheXMsIGlmIG5lZWRlZCBmb3IgYW4gaW5kZXgtb25seSBzY2FuIGFuZAotCSAqIG5vdCBhbHJl YWR5IGRvbmUgaW4gYSBwcmV2aW91cyByZXNjYW4gY2FsbC4gIFRvIHNhdmUgb24gcGFsbG9jCi0J ICogb3ZlcmhlYWQsIGJvdGggd29ya3NwYWNlcyBhcmUgYWxsb2NhdGVkIGFzIG9uZSBwYWxsb2Mg YmxvY2s7IG9ubHkgdGhpcwotCSAqIGZ1bmN0aW9uIGFuZCBidGVuZHNjYW4ga25vdyB0aGF0Lgot CSAqLwotCWlmIChzY2FuLT54c193YW50X2l0dXAgJiYgc28tPmN1cnJUdXBsZXMgPT0gTlVMTCkK LQl7Ci0JCXNvLT5jdXJyVHVwbGVzID0gKGNoYXIgKikgcGFsbG9jKEJMQ0tTWiAqIDIpOwotCQlz by0+bWFya1R1cGxlcyA9IHNvLT5jdXJyVHVwbGVzICsgQkxDS1NaOwotCX0KLQogCS8qCiAJICog UmVzZXQgdGhlIHNjYW4ga2V5cwogCSAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9m S2V5cyA+IDApCiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJP ZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKKwlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7 CisJc28tPnNjYW5CZWhpbmQgPSBmYWxzZTsKKwlzby0+b3Bwb3NpdGVEaXJDaGVjayA9IGZhbHNl OwogCXNvLT5udW1iZXJPZktleXMgPSAwOwkJLyogdW50aWwgX2J0X3ByZXByb2Nlc3Nfa2V5cyBz ZXRzIGl0ICovCiAJc28tPm51bUFycmF5S2V5cyA9IDA7CQkvKiBkaXR0byAqLwogfQogCisvKgor ICoJYnRraWxsaXRlbXNiYXRjaCgpIC0tIE1hcmsgZGVhZCBpdGVtcycgaW5kZXggdHVwbGVzIExQ X0RFQUQKKyAqLwordm9pZAorYnRraWxsaXRlbXNiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIElu ZGV4U2NhbkJhdGNoIGJhdGNoKQoreworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRp b247CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7 CisJUGFnZQkJcGFnZTsKKwlCVFBhZ2VPcGFxdWUgb3BhcXVlOworCU9mZnNldE51bWJlciBtaW5v ZmY7CisJT2Zmc2V0TnVtYmVyIG1heG9mZjsKKwlib29sCQlraWxsZWRzb21ldGhpbmcgPSBmYWxz ZTsKKwlCdWZmZXIJCWJ1ZjsKKwlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCS8qIFRhYmxlIEFN IHNob3VsZCBoYXZlIGFscmVhZHkgcmVsZWFzZWQgYmF0Y2ggcGFnZSdzIHBpbiBieSBub3cgKi8K KwlBc3NlcnQoYmF0Y2gtPm51bURlYWQgPiAwKTsKKworCWJ1ZiA9IF9idF9nZXRidWYocmVsLCBi dGJhdGNoLT5jdXJyUGFnZSwgQlRfUkVBRCk7CisKKwlsYXRlc3Rsc24gPSBCdWZmZXJHZXRMU05B dG9taWMoYnVmKTsKKwlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCWlmIChiYXRj aC0+bHNuICE9IGxhdGVzdGxzbikKKwl7CisJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRp bmcgKi8KKwkJX2J0X3JlbGJ1ZihyZWwsIGJ1Zik7CisJCXJldHVybjsKKwl9CisKKwlwYWdlID0g QnVmZmVyR2V0UGFnZShidWYpOworCW9wYXF1ZSA9IEJUUGFnZUdldE9wYXF1ZShwYWdlKTsKKwlt aW5vZmYgPSBQX0ZJUlNUREFUQUtFWShvcGFxdWUpOworCW1heG9mZiA9IFBhZ2VHZXRNYXhPZmZz ZXROdW1iZXIocGFnZSk7CisKKwkvKiBJdGVyYXRlIHRocm91Z2ggYmF0Y2gtPmRlYWRJdGVtc1td IGluIGxlYWYgcGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bURl YWQ7IGkrKykKKwl7CisJCWludAkJCWl0ZW1JbmRleCA9IGJhdGNoLT5kZWFkSXRlbXNbaV07CisJ CUJhdGNoTWF0Y2hpbmdJdGVtICpraXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKKwkJ T2Zmc2V0TnVtYmVyIG9mZm51bSA9IGtpdGVtLT5pbmRleE9mZnNldDsKKworCQlBc3NlcnQoaXRl bUluZGV4ID49IGJhdGNoLT5maXJzdEl0ZW0gJiYgaXRlbUluZGV4IDw9IGJhdGNoLT5sYXN0SXRl bSk7CisJCUFzc2VydChpID09IDAgfHwKKwkJCSAgIG9mZm51bSA+PSBiYXRjaC0+aXRlbXNbYmF0 Y2gtPmRlYWRJdGVtc1tpIC0gMV1dLmluZGV4T2Zmc2V0KTsKKworCQlpZiAob2ZmbnVtIDwgbWlu b2ZmKQorCQkJY29udGludWU7CQkJLyogcHVyZSBwYXJhbm9pYSAqLworCQl3aGlsZSAob2ZmbnVt IDw9IG1heG9mZikKKwkJeworCQkJSXRlbUlkCQlpaWQgPSBQYWdlR2V0SXRlbUlkKHBhZ2UsIG9m Zm51bSk7CisJCQlJbmRleFR1cGxlCWl0dXBsZSA9IChJbmRleFR1cGxlKSBQYWdlR2V0SXRlbShw YWdlLCBpaWQpOworCQkJYm9vbAkJa2lsbHR1cGxlID0gZmFsc2U7CisKKwkJCWlmIChCVHJlZVR1 cGxlSXNQb3N0aW5nKGl0dXBsZSkpCisJCQl7CisJCQkJaW50CQkJcGkgPSBpICsgMTsKKwkJCQlp bnQJCQlucG9zdGluZyA9IEJUcmVlVHVwbGVHZXROUG9zdGluZyhpdHVwbGUpOworCQkJCWludAkJ CWo7CisKKwkJCQlmb3IgKGogPSAwOyBqIDwgbnBvc3Rpbmc7IGorKykKKwkJCQl7CisJCQkJCUl0 ZW1Qb2ludGVyIGl0ZW0gPSBCVHJlZVR1cGxlR2V0UG9zdGluZ04oaXR1cGxlLCBqKTsKKworCQkJ CQlpZiAoIUl0ZW1Qb2ludGVyRXF1YWxzKGl0ZW0sICZraXRlbS0+dGFibGVUaWQpKQorCQkJCQkJ YnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLworCisJCQkJCUFzc2VydChraXRl bS0+aW5kZXhPZmZzZXQgPT0gb2ZmbnVtKTsKKworCQkJCQkvKgorCQkJCQkgKiBSZWFkLWFoZWFk IHRvIGxhdGVyIGtpdGVtcyBoZXJlLgorCQkJCQkgKgorCQkJCQkgKiBXZSByZWx5IG9uIHRoZSBh c3N1bXB0aW9uIHRoYXQgbm90IGFkdmFuY2luZyBraXRlbSBoZXJlCisJCQkJCSAqIHdpbGwgcHJl dmVudCB1cyBmcm9tIGNvbnNpZGVyaW5nIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUKKwkJCQkJICog ZnVsbHkgZGVhZCBieSBub3QgbWF0Y2hpbmcgaXRzIG5leHQgaGVhcCBUSUQgaW4gbmV4dAorCQkJ CQkgKiBsb29wIGl0ZXJhdGlvbi4KKwkJCQkJICoKKwkJCQkJICogSWYsIG9uIHRoZSBvdGhlciBo YW5kLCB0aGlzIGlzIHRoZSBmaW5hbCBoZWFwIFRJRCBpbgorCQkJCQkgKiB0aGUgcG9zdGluZyBs aXN0IHR1cGxlLCB0aGVuIHR1cGxlIGdldHMga2lsbGVkCisJCQkJCSAqIHJlZ2FyZGxlc3MgKGku ZS4gd2UgaGFuZGxlIHRoZSBjYXNlIHdoZXJlIHRoZSBsYXN0CisJCQkJCSAqIGtpdGVtIGlzIGFs c28gdGhlIGxhc3QgaGVhcCBUSUQgaW4gdGhlIGxhc3QgaW5kZXggdHVwbGUKKwkJCQkJICogY29y cmVjdGx5IC0tIHBvc3RpbmcgdHVwbGUgc3RpbGwgZ2V0cyBraWxsZWQpLgorCQkJCQkgKi8KKwkJ CQkJaWYgKHBpIDwgYmF0Y2gtPm51bURlYWQpCisJCQkJCQlraXRlbSA9ICZiYXRjaC0+aXRlbXNb YmF0Y2gtPmRlYWRJdGVtc1twaSsrXV07CisJCQkJfQorCisJCQkJLyoKKwkJCQkgKiBEb24ndCBi b3RoZXIgYWR2YW5jaW5nIHRoZSBvdXRlcm1vc3QgbG9vcCdzIGludCBpdGVyYXRvciB0bworCQkJ CSAqIGF2b2lkIHByb2Nlc3NpbmcgZGVhZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQor CQkJCSAqIG9mZm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlv biBoYXJkbHkKKwkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2Yg dGhlIG91dGVybW9zdCBsb29wCisJCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2Ft ZSBwb3N0aW5nIGxpc3QncyBmaXJzdCBoZWFwCisJCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xs IGFkdmFuY2UgdG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4CisJCQkJICogdHVwbGUgcHJldHR5IHF1 aWNrbHkuKQorCQkJCSAqLworCQkJCWlmIChqID09IG5wb3N0aW5nKQorCQkJCQlraWxsdHVwbGUg PSB0cnVlOworCQkJfQorCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90 aWQsICZraXRlbS0+dGFibGVUaWQpKQorCQkJCWtpbGx0dXBsZSA9IHRydWU7CisKKwkJCS8qCisJ CQkgKiBNYXJrIGluZGV4IGl0ZW0gYXMgZGVhZCwgaWYgaXQgaXNuJ3QgYWxyZWFkeS4gIFNpbmNl IHRoaXMKKwkJCSAqIGhhcHBlbnMgd2hpbGUgaG9sZGluZyBhIHNoYXJlZCBidWZmZXIgbG9jaywg aXQncyBwb3NzaWJsZSB0aGF0CisJCQkgKiBtdWx0aXBsZSBwcm9jZXNzZXMgYXR0ZW1wdCB0byBk byB0aGlzIHNpbXVsdGFuZW91c2x5LCBsZWFkaW5nCisJCQkgKiB0byBtdWx0aXBsZSBmdWxsLXBh Z2UgaW1hZ2VzIGJlaW5nIHNlbnQgdG8gV0FMIChpZgorCQkJICogd2FsX2xvZ19oaW50cyBvciBk YXRhIGNoZWNrc3VtcyBhcmUgZW5hYmxlZCksIHdoaWNoIGlzCisJCQkgKiB1bmRlc2lyYWJsZS4K KwkJCSAqLworCQkJaWYgKGtpbGx0dXBsZSAmJiAhSXRlbUlkSXNEZWFkKGlpZCkpCisJCQl7CisJ CQkJaWYgKCFraWxsZWRzb21ldGhpbmcpCisJCQkJeworCQkJCQkvKgorCQkJCQkgKiBVc2UgdGhl IGhpbnQgYml0IGluZnJhc3RydWN0dXJlIHRvIGNoZWNrIGlmIHdlIGNhbgorCQkJCQkgKiB1cGRh dGUgdGhlIHBhZ2Ugd2hpbGUganVzdCBob2xkaW5nIGEgc2hhcmUgbG9jay4gSWYgd2UKKwkJCQkJ ICogYXJlIG5vdCBhbGxvd2VkLCB0aGVyZSdzIG5vIHBvaW50IGNvbnRpbnVpbmcuCisJCQkJCSAq LworCQkJCQlpZiAoIUJ1ZmZlckJlZ2luU2V0SGludEJpdHMoYnVmKSkKKwkJCQkJCWdvdG8gdW5s b2NrX3BhZ2U7CisJCQkJfQorCisJCQkJLyogZm91bmQgdGhlIGl0ZW0vYWxsIHBvc3RpbmcgbGlz dCBpdGVtcyAqLworCQkJCUl0ZW1JZE1hcmtEZWFkKGlpZCk7CisJCQkJa2lsbGVkc29tZXRoaW5n ID0gdHJ1ZTsKKwkJCQlicmVhazsJCQkvKiBvdXQgb2YgaW5uZXIgc2VhcmNoIGxvb3AgKi8KKwkJ CX0KKwkJCW9mZm51bSA9IE9mZnNldE51bWJlck5leHQob2ZmbnVtKTsKKwkJfQorCX0KKworCS8q CisJICogU2luY2UgdGhpcyBjYW4gYmUgcmVkb25lIGxhdGVyIGlmIG5lZWRlZCwgbWFyayBhcyBk aXJ0eSBoaW50LgorCSAqCisJICogV2hlbmV2ZXIgd2UgbWFyayBhbnl0aGluZyBMUF9ERUFELCB3 ZSBhbHNvIHNldCB0aGUgcGFnZSdzCisJICogQlRQX0hBU19HQVJCQUdFIGZsYWcsIHdoaWNoIGlz IGxpa2V3aXNlIGp1c3QgYSBoaW50LiAgKE5vdGUgdGhhdCB3ZQorCSAqIG9ubHkgcmVseSBvbiB0 aGUgcGFnZS1sZXZlbCBmbGFnIGluICFoZWFwa2V5c3BhY2UgaW5kZXhlcy4pCisJICovCisJaWYg KGtpbGxlZHNvbWV0aGluZykKKwl7CisJCW9wYXF1ZS0+YnRwb19mbGFncyB8PSBCVFBfSEFTX0dB UkJBR0U7CisJCUJ1ZmZlckZpbmlzaFNldEhpbnRCaXRzKGJ1ZiwgdHJ1ZSwgdHJ1ZSk7CisJfQor Cit1bmxvY2tfcGFnZToKKwlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKK30KKworLyoKKyAqCWJ0dW5n dWFyZGJhdGNoKCkgLS0gRHJvcCBiYXRjaCdzIFRJRCByZWN5Y2xpbmcgaW50ZXJsb2NrIChidWZm ZXIgcGluKQorICoKKyAqIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCdzIHNhZmUgdG8g ZHJvcCB0aGUgYnVmZmVyIHBpbiBoZWxkIHRvCisgKiBwcmV2ZW50IGNvbmN1cnJlbnQgVElEIHJl Y3ljbGluZyBieSBWQUNVVU0uCisgKi8KK3ZvaWQKK2J0dW5ndWFyZGJhdGNoKEluZGV4U2NhbkRl c2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpCit7CisJQlRCYXRjaERhdGEgKmJ0YmF0Y2gg PSBCVEJhdGNoR2V0RGF0YShzY2FuLCBiYXRjaCk7CisKKwkvKiBTaG91bGQgYmUgY2FsbGVkIGV4 YWN0bHkgb25jZSBpZmYgIWJhdGNoSW1tZWRpYXRlVW5ndWFyZCAqLworCUFzc2VydCghc2Nhbi0+ YmF0Y2hJbW1lZGlhdGVVbmd1YXJkKTsKKwlBc3NlcnQoYmF0Y2gtPmlzR3VhcmRlZCk7CisKKwlS ZWxlYXNlQnVmZmVyKGJ0YmF0Y2gtPmJ1Zik7Cit9CisKIC8qCiAgKglidGVuZHNjYW4oKSAtLSBj bG9zZSBkb3duIGEgc2NhbgogICovCkBAIC00NTYsMTE2ICs1NDksNjMgQEAgYnRlbmRzY2FuKElu ZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBz Y2FuLT5vcGFxdWU7CiAKLQkvKiB3ZSBhcmVuJ3QgaG9sZGluZyBhbnkgcmVhZCBsb2NrcywgYnV0 IGdvdHRhIGRyb3AgdGhlIHBpbnMgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBv cykpCi0JewotCQkvKiBCZWZvcmUgbGVhdmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkg a2lsbGVkIGl0ZW1zICovCi0JCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCV9idF9raWxsaXRl bXMoc2Nhbik7Ci0JCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOwotCX0KLQot CXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+bWFy a1Bvcyk7Ci0KLQkvKiBObyBuZWVkIHRvIGludmFsaWRhdGUgcG9zaXRpb25zLCB0aGUgUkFNIGlz IGFib3V0IHRvIGJlIGZyZWVkLiAqLwotCiAJLyogUmVsZWFzZSBzdG9yYWdlICovCiAJaWYgKHNv LT5rZXlEYXRhICE9IE5VTEwpCiAJCXBmcmVlKHNvLT5rZXlEYXRhKTsKIAkvKiBzby0+YXJyYXlL ZXlzIGFuZCBzby0+b3JkZXJQcm9jcyBhcmUgaW4gYXJyYXlDb250ZXh0ICovCiAJaWYgKHNvLT5h cnJheUNvbnRleHQgIT0gTlVMTCkKIAkJTWVtb3J5Q29udGV4dERlbGV0ZShzby0+YXJyYXlDb250 ZXh0KTsKLQlpZiAoc28tPmtpbGxlZEl0ZW1zICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5raWxsZWRJ dGVtcyk7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzICE9IE5VTEwpCi0JCXBmcmVlKHNvLT5jdXJyVHVw bGVzKTsKLQkvKiBzby0+bWFya1R1cGxlcyBzaG91bGQgbm90IGJlIHBmcmVlJ2QsIHNlZSBidHJl c2NhbiAqLwogCXBmcmVlKHNvKTsKIH0KIAogLyoKLSAqCWJ0bWFya3BvcygpIC0tIHNhdmUgY3Vy cmVudCBzY2FuIHBvc2l0aW9uCisgKglidHBvc3Jlc2V0KCkgLS0gcmVzZXQgYXJyYXkga2V5IHN0 YXRlIGZvciBzY2FuIHBvc2l0aW9uIGNoYW5nZQorICoKKyAqIENhbGxlZCBieSB0aGUgY29yZSBz eXN0ZW0gd2hlbiB0aGUgc2NhbidzIGxvZ2ljYWwgcG9zaXRpb24gaXMgYWJvdXQgdG8KKyAqIGNo YW5nZSBpbiBhIHdheSB0aGF0IGludmFsaWRhdGVzIG91ciBhcnJheSBrZXkgc3RhdGUuICBUaGlz IGhhcHBlbnMgd2hlbgorICogcmVzdG9yaW5nIGEgbWFya2VkIHBvc2l0aW9uLCBvciB3aGVuIHRo ZSBzY2FuIGNyb3NzZXMgYSBiYXRjaCBib3VuZGFyeQorICogd2hpbGUgbW92aW5nIGluIHRoZSBv cHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSBvcmlnaW5hbGx5IHVzZWQuCisgKgorICogRm9y IGRpcmVjdGlvbiBjaGFuZ2VzLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxp cHBlZCB0aGUKKyAqIGJhdGNoJ3MgZGlyIGZpZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmU7IHdlIHVz ZSB0aGlzIHVwZGF0ZWQgZGlyZWN0aW9uIHdoZW4KKyAqIHJlc2V0dGluZyBvdXIgYXJyYXkga2V5 cy4gIEZvciBtYXJrIHJlc3RvcmF0aW9uLCB0aGUgYmF0Y2gncyBkaXIgd2lsbAorICogcmV0YWlu IGl0cyBvcmlnaW5hbCB2YWx1ZSAoZnJvbSB3aGVuIGJ0Z2V0YmF0Y2ggcmV0dXJuZWQgaXQpLgog ICovCiB2b2lkCi1idG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQorYnRwb3NyZXNldChJbmRl eFNjYW5EZXNjIHNjYW4sIEluZGV4U2NhbkJhdGNoIGJhdGNoKQogewogCUJUU2Nhbk9wYXF1ZSBz byA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRiYXRjaCA9 IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGJhdGNoKTsKIAotCS8qIFRoZXJlIG1heSBiZSBhbiBvbGQg bWFyayB3aXRoIGEgcGluIChidXQgbm8gbG9jaykuICovCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5l ZChzby0+bWFya1Bvcyk7CisJaWYgKCFzby0+bnVtQXJyYXlLZXlzKQorCQlyZXR1cm47CiAKIAkv KgotCSAqIEp1c3QgcmVjb3JkIHRoZSBjdXJyZW50IGl0ZW1JbmRleC4gIElmIHdlIGxhdGVyIHN0 ZXAgdG8gbmV4dCBwYWdlCi0JICogYmVmb3JlIHJlbGVhc2luZyB0aGUgbWFya2VkIHBvc2l0aW9u LCBfYnRfc3RlcHBhZ2UgbWFrZXMgYSBmdWxsIGNvcHkgb2YKLQkgKiB0aGUgY3VyclBvcyBzdHJ1 Y3QgaW4gbWFya1Bvcy4gIElmIChhcyBvZnRlbiBoYXBwZW5zKSB0aGUgbWFyayBpcyBtb3ZlZAot CSAqIGJlZm9yZSB3ZSBsZWF2ZSB0aGUgcGFnZSwgd2UgZG9uJ3QgaGF2ZSB0byBkbyB0aGF0IHdv cmsuCisJICogUmVzZXQgYXJyYXkga2V5cyB0byBpbml0aWFsIHN0YXRlIGZvciB0aGUgYmF0Y2gn cyBzY2FuIGRpcmVjdGlvbi4gIEFsc28KKwkgKiBjbGVhciBuZWVkUHJpbVNjYW4gYW5kIHJlbGF0 ZWQgZmxhZ3MuICBUaGVzZSB3ZXJlIHNldCBiYXNlZCBvbiB0aGUgc29mdAorCSAqIGFzc3VtcHRp b24gdGhhdCB0aGUgc2NhbiB3b3VsZCBhbHdheXMgcHJvY2VlZCBpbiB0aGUgc2FtZSBkaXJlY3Rp b24uCisJICoKKwkgKiBUaGVzZSBzdGVwcyB3b3JrIGFyb3VuZCB0aGUgc29mdCBhc3N1bXB0aW9u IGJlaW5nIHZpb2xhdGVkOiB0aGV5IGZvcmNlCisJICogdGhlIHNjYW4gdG8gc3RlcCB0byB0aGUg bmV4dC9wcmV2aW91cyBwYWdlLCBtYWtpbmcgdGhlIGFycmF5cyByZWNvdmVyLgorCSAqIFdoZW4g d2UgZ28gdG8gcmVhZCB0aGF0IHBhZ2UsIF9idF9yZWFkcGFnZSB3aWxsIHJlbGlhYmx5IGRldGVy bWluZSBpZiBhCisJICogcHJpbWl0aXZlIHNjYW4gcmVhbGx5IGlzIG5lZWRlZCBiYXNlZCBvbiB0 aGUgcGFnZSdzIHR1cGxlcy4gIElmIHRoZXJlJ3MKKwkgKiBhIHByaW1pdGl2ZSBzY2FuLCBpdCB3 aWxsIHJlcG9zaXRpb24gdGhlIHNjYW4gdXNpbmcgbmV3IGFycmF5IHZhbHVlcworCSAqIChiYXNl ZCBvbiB0aGUgdHVwbGVzIGZyb20gdGhlIG5laWdoYm9yaW5nIHBhZ2Ugd2UnbGwgc3RlcCBvbiB0 bykuCisJICoKKwkgKiBXZSBuZWVkIHRvIHJlc2V0IHRoZSBhcnJheSBrZXkgc3RhdGUgaW4gdGhl IGNvcnJlY3QgZGlyZWN0aW9uIHNvIHRoYXQKKwkgKiB3ZSB3b24ndCBnZXQgY29uZnVzZWQuICBX aGVuIHRoZSBhcnJheSBrZXlzIGFyZSBiZWhpbmQgdGhlIGtleSBzcGFjZQorCSAqIGZvciB0aGUg cGFnZSB3ZSdyZSBzdGVwcGluZyBvbiB0byAoYmVoaW5kIGluIHRlcm1zIG9mIHRoZSBzY2FuIGRp ciksCisJICogdGhleSB3aWxsIGNhdGNoIHVwIGF1dG9tYXRpY2FsbHkuICBCdXQgd2hlbiB0aGV5 J3JlIGFoZWFkIG9mIHRoYXQKKwkgKiBwYWdlJ3Mga2V5IHNwYWNlLCB0aGUgc2NhbiBjb3VsZCBt aXNzIG1hdGNoaW5nIHR1cGxlcy4KIAkgKi8KLQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3Vy clBvcykpCi0JCXNvLT5tYXJrSXRlbUluZGV4ID0gc28tPmN1cnJQb3MuaXRlbUluZGV4OworCV9i dF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIGJhdGNoLT5kaXIpOworCWlmIChTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGJhdGNoLT5kaXIpKQorCQlidGJhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCWVs c2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPm1hcmtQb3MpOwotCQlzby0+bWFya0l0 ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNj YW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12b2lkCi1idHJlc3RycG9zKEluZGV4U2Nh bkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRo ZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBwYWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsu ICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRleC4KLQkJICoKLQkJICogTkI6IEluIHRo aXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGluZyBpbiBzby0+bWFya1BvcyB0byBiZQot CQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IHNvLT5tYXJr SXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgotCQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBh IG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5v dyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAgV2UgYXJlbid0IGhvbGRpbmcgYW55IHJl YWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGlsbCBob2xkaW5nIHRoZSBwaW4gZm9yIHRo ZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAo QlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0JCXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5n IGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxsZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+ bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQkJQlRTY2FuUG9zVW5w aW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChz by0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGluIG9uIG1hcmsgYnVmZmVyIGZvciBhc3Np Z25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28t Pm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3VudChzby0+bWFya1Bvcy5idWYpOwotCQkJ bWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9zLAotCQkJCSAgIG9mZnNldG9mKEJUU2Nh blBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28tPm1hcmtQb3MubGFzdEl0ZW0gKiBzaXpl b2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5jdXJyVHVwbGVzKQotCQkJCW1lbWNweShz by0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0JCQkJCSAgIHNvLT5tYXJrUG9zLm5leHRU dXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2NhbidzIGFycmF5IGtleXMgKHNlZSBfYnRf c3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+bnVtQXJyYXlLZXlzKQotCQkJewotCQkJ CV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5jdXJyUG9zLmRpcik7Ci0JCQkJc28tPm5l ZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0JCWVsc2UKLQkJCUJUU2NhblBvc0ludmFs aWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJYnRiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5v cHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiB9CiAKIC8qCkBAIC04ODEsMTUgKzkyMSw2IEBAIF9i dF9wYXJhbGxlbF9zZWl6ZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyICpuZXh0X3Nj YW5fcGFnZSwKIAkqbmV4dF9zY2FuX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJKmxhc3Rf Y3Vycl9wYWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCi0JLyoKLQkgKiBSZXNldCBzby0+Y3Vy clBvcywgYW5kIGluaXRpYWxpemUgbW9yZUxlZnQvbW9yZVJpZ2h0IHN1Y2ggdGhhdCB0aGUgbmV4 dAotCSAqIGNhbGwgdG8gX2J0X3JlYWRuZXh0cGFnZSB0cmVhdHMgdGhpcyBiYWNrZW5kIHNpbWls YXJseSB0byBhIHNlcmlhbAotCSAqIGJhY2tlbmQgdGhhdCBzdGVwcyBmcm9tICpsYXN0X2N1cnJf cGFnZSB0byAqbmV4dF9zY2FuX3BhZ2UgKHVubGVzcyB0aGlzCi0JICogYmFja2VuZCdzIHNvLT5j dXJyUG9zIGlzIGluaXRpYWxpemVkIGJ5IF9idF9yZWFkZmlyc3RwYWdlIGJlZm9yZSB0aGVuKS4K LQkgKi8KLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQlzby0+Y3VyclBvcy5t b3JlTGVmdCA9IHNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7Ci0KIAlpZiAoZmlyc3QpCiAJ ewogCQkvKgpAQCAtMTAzOSw4ICsxMDcwLDYgQEAgX2J0X3BhcmFsbGVsX2RvbmUoSW5kZXhTY2Fu RGVzYyBzY2FuKQogCUJUUGFyYWxsZWxTY2FuRGVzYyBidHNjYW47CiAJYm9vbAkJc3RhdHVzX2No YW5nZWQgPSBmYWxzZTsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCiAJLyogRG8gbm90aGluZywgZm9yIG5vbi1wYXJhbGxlbCBzY2FucyAqLwogCWlmIChwYXJh bGxlbF9zY2FuID09IE5VTEwpCiAJCXJldHVybjsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvbmJ0c2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNl YXJjaC5jCmluZGV4IGFhZTZhY2I3Zi4uOGFlYjkxYmU5IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0c2VhcmNoLmMKQEAgLTIzLDUzICsyMyw0OSBAQAogI2luY2x1ZGUgInBnc3RhdC5oIgog I2luY2x1ZGUgInN0b3JhZ2UvcHJlZGljYXRlLmgiCiAjaW5jbHVkZSAidXRpbHMvbHN5c2NhY2hl LmgiCisjaW5jbHVkZSAidXRpbHMvbWVtZGVidWcuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIK IAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0 aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfYmF0Y2hf dW5sb2NrKEluZGV4U2NhbkRlc2Mgc2NhbiwgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gsCisJCQkJCQkJ CQlCdWZmZXIgYnVmKTsKIHN0YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWws IFJlbGF0aW9uIGhlYXByZWwsIEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1Ziwg Ym9vbCBmb3J1cGRhdGUsIEJUU3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0 aWMgT2Zmc2V0TnVtYmVyIF9idF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtl eSwgQnVmZmVyIGJ1Zik7CiBzdGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5z ZXJ0IGtleSwgUGFnZSBwYWdlLAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRp YyBpbmxpbmUgdm9pZCBfYnRfcmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9w YXF1ZSBzbyk7Ci1zdGF0aWMgYm9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNj YW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9u IGRpcik7Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2Nhbiwg QmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNj YW5EaXJlY3Rpb24gZGlyLAotCQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgSW5kZXhTY2Fu QmF0Y2ggX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRj aCBmaXJzdGJhdGNoLAorCQkJCQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rp b24gZGlyKTsKK3N0YXRpYyBJbmRleFNjYW5CYXRjaCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBs YXN0Y3VycmJsa25vLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3Rw YWdlKTsKIHN0YXRpYyBCdWZmZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24g cmVsLCBCbG9ja051bWJlciAqYmxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJy Ymxrbm8pOwotc3RhdGljIGJvb2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpOworc3RhdGljIEluZGV4U2NhbkJhdGNoIF9idF9lbmRwb2ludChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBJbmRleFNjYW5C YXRjaCBmaXJzdGJhdGNoKTsKIAogCiAvKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGlu KCkKKyAqIF9idF9iYXRjaF91bmxvY2soKSAtLSBuYnRyZWUgd3JhcHBlciBmb3IgaW5kZXhhbV91 dGlsX2JhdGNoX3VubG9jay4KICAqCi0gKiBVbmxvY2sgc28tPmN1cnJQb3MuYnVmLiAgSWYgc2Nh biBpcyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0b28uCi0gKiBEcm9wcGluZyB0aGUgcGlu IHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9uIGFjcXVpcmluZyBhIGNsZWFudXAgbG9j ay4KKyAqIFBlcmZvcm1zIHRoZSBzYW1lIFZhbGdyaW5kIGluc3RydW1lbnRhdGlvbiBhcyBfYnRf dW5sb2NrYnVmLgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9kcm9wX2xvY2tfYW5kX21h eWJlX3BpbihSZWxhdGlvbiByZWwsIEJUU2Nhbk9wYXF1ZSBzbykKK19idF9iYXRjaF91bmxvY2so SW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBiYXRjaCwgQnVmZmVyIGJ1ZikKIHsK LQlpZiAoIXNvLT5kcm9wUGluKQotCXsKLQkJLyogSnVzdCBkcm9wIHRoZSBsb2NrIChub3QgdGhl IHBpbikgKi8KLQkJX2J0X3VubG9ja2J1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXJldHVy bjsKLQl9CisjaWYgZGVmaW5lZChVU0VfVkFMR1JJTkQpCisJUGFnZQkJcGFnZSA9IEJ1ZmZlckdl dFBhZ2UoYnVmKTsKIAotCS8qCi0JICogRHJvcCBib3RoIHRoZSBsb2NrIGFuZCB0aGUgcGluLgot CSAqCi0JICogSGF2ZSB0byBzZXQgc28tPmN1cnJQb3MubHNuIHNvIHRoYXQgX2J0X2tpbGxpdGVt cyBoYXMgYSB3YXkgdG8gZGV0ZWN0Ci0JICogd2hlbiBjb25jdXJyZW50IGhlYXAgVElEIHJlY3lj bGluZyBieSBWQUNVVU0gbWlnaHQgaGF2ZSB0YWtlbiBwbGFjZS4KLQkgKi8KLQlzby0+Y3VyclBv cy5sc24gPSBCdWZmZXJHZXRMU05BdG9taWMoc28tPmN1cnJQb3MuYnVmKTsKLQlfYnRfcmVsYnVm KHJlbCwgc28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVy OworCVZBTEdSSU5EX0NIRUNLX01FTV9JU19ERUZJTkVEKHBhZ2UsIEJMQ0tTWik7CisjZW5kaWYK KworCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgYmF0Y2gsIGJ1Zik7CisKKyNpZiBk ZWZpbmVkKFVTRV9WQUxHUklORCkKKwlpZiAoIVJlbGF0aW9uVXNlc0xvY2FsQnVmZmVycyhzY2Fu LT5pbmRleFJlbGF0aW9uKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fTk9BQ0NFU1MocGFnZSwgQkxD S1NaKTsKKyNlbmRpZgogfQogCiAvKgpAQCAtODYwLDI2ICs4NTYsMjUgQEAgX2J0X2NvbXBhcmUo UmVsYXRpb24gcmVsLAogfQogCiAvKgotICoJX2J0X2ZpcnN0KCkgLS0gRmluZCB0aGUgZmlyc3Qg aXRlbSBpbiBhIHNjYW4uCisgKglfYnRfZmlyc3QoKSAtLSBGaW5kIHRoZSBmaXJzdCBiYXRjaCBp biBhIHNjYW4uCiAgKgogICoJCVdlIG5lZWQgdG8gYmUgY2xldmVyIGFib3V0IHRoZSBkaXJlY3Rp b24gb2Ygc2NhbiwgdGhlIHNlYXJjaAotICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRl cmluZy4gIFdlIGZpbmQgdGhlIGZpcnN0IGl0ZW0gKG9yLAotICoJCWlmIGJhY2t3YXJkcyBzY2Fu LCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUgdHJlZSB0aGF0IHNhdGlzZmllcyB0aGUKLSAqCQlxdWFs aWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbiBzdWNjZXNzIGV4aXQsIGRhdGEgYWJvdXQg dGhlCi0gKgkJbWF0Y2hpbmcgdHVwbGUocykgb24gdGhlIHBhZ2UgaGFzIGJlZW4gbG9hZGVkIGlu dG8gc28tPmN1cnJQb3MuICBXZSdsbAotICoJCWRyb3AgYWxsIGxvY2tzIGFuZCBob2xkIG9udG8g YSBwaW4gb24gcGFnZSdzIGJ1ZmZlciwgZXhjZXB0IGR1cmluZwotICoJCXNvLT5kcm9wUGluIHNj YW5zLCB3aGVuIHdlIGRyb3AgYm90aCB0aGUgbG9jayBhbmQgdGhlIHBpbi4KLSAqCQlfYnRfcmV0 dXJuaXRlbSBzZXRzIHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHNjYW4gb24gc3VjY2VzcyBl eGl0LgorICoJCWNvbmRpdGlvbnMsIGFuZCB0aGUgdHJlZSBvcmRlcmluZy4gIFdlIGZpbmQgdGhl IGZpcnN0IGxlYWYgcGFnZSAob3IKKyAqCQl0aGUgbGFzdCBsZWFmIHBhZ2UsIHdoZW4gc2Nhbm5p bmcgYmFja3dhcmRzKSBpbiB0aGUgdHJlZSB3aXRoIGF0IGxlYXN0CisgKgkJb25lIHR1cGxlIHRo YXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9ucyBpbiB0aGUgc2NhbiBrZXkuICBPbgorICoJ CXN1Y2Nlc3MgZXhpdCwgd2UgcmV0dXJuIGEgbmV3IGJhdGNoIHdpdGggdGhhdCBwYWdlJ3MgbWF0 Y2hpbmcgaXRlbXMuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRo ZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQu ICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBpbnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1h dGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCAoaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uKSwK KyAqIHdlIGp1c3QgcmV0dXJuIE5VTEwuICBOb3RlIHRoYXQgcmV0dXJuaW5nIE5VTEwgZG9lc24n dCBuZWNlc3NhcmlseSBtZWFuIHRoZQorICogZW5kIG9mIHRoZSB0b3AtbGV2ZWwgc2NhbjsgY2Fs bGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvCisgKiBkZXRlcm1pbmUgaWYgYW5v dGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBpcyByZXF1aXJlZC4KICAqCiAgKiBOb3RlIHRoYXQg c2Nhbi0+a2V5RGF0YVtdLCBhbmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9t IGl0LAogICogYXJlIGJvdGggc2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1F IGZvciBtb3JlIGFib3V0IHRoaXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQg YSB0ZW1wb3JhcnkgaW5zZXJ0aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5n IHRoZSBzY2FuIHN0YXJ0IHBvc2l0aW9uLgogICovCi1ib29sCitJbmRleFNjYW5CYXRjaAogX2J0 X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKQEAgLTg5Miw4ICs4ODcsMTIgQEAgX2J0X2Zp cnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1i ZXIgc3RyYXRfdG90YWwgPSBJbnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJ bnZhbGlkQmxvY2tOdW1iZXIsCiAJCQkJbGFzdGN1cnJibGtubzsKKwlJbmRleFNjYW5CYXRjaCBm aXJzdGJhdGNoOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2g7CiAKLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3Qg YmF0Y2ggKi8KKwlmaXJzdGJhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jKHNjYW4pOwor CWJ0Zmlyc3RiYXRjaCA9IEJUQmF0Y2hHZXREYXRhKHNjYW4sIGZpcnN0YmF0Y2gpOwogCiAJLyoK IAkgKiBFeGFtaW5lIHRoZSBzY2FuIGtleXMgYW5kIGVsaW1pbmF0ZSBhbnkgcmVkdW5kYW50IGtl eXM7IGFsc28gbWFyayB0aGUKQEAgLTkwOSw2ICs5MDgsNyBAQCBfYnRfZmlyc3QoSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAl7CiAJCUFzc2VydCghc28tPm5lZWRQcmlt U2Nhbik7CiAJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4pOworCQlpbmRleGFtX3V0aWxfYmF0Y2hf cmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJcmV0dXJuIGZhbHNlOwogCX0KIApAQCAtOTE4 LDcgKzkxOCwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcikKIAkgKi8KIAlpZiAoc2Nhbi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMICYmCiAJCSFfYnRf cGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25vLCAmbGFzdGN1cnJibGtubywgdHJ1ZSkpCi0JCXJl dHVybiBmYWxzZTsKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCQlyZXR1cm4gZmFsc2U7CQkJLyogZGVmaW5pdGVseSBkb25lIChzby0+bmVlZFBy aW1TY2FuIGlzIHVuc2V0KSAqLworCX0KIAogCS8qCiAJICogSW5pdGlhbGl6ZSB0aGUgc2Nhbidz IGFycmF5cyAoaWYgYW55KSBmb3IgdGhlIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24KQEAgLTkzOCwx MSArOTQxLDkgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIpCiAJCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7CiAJCUFzc2VydChibGtubyAhPSBQX05P TkUpOwogCi0JCWlmICghX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtu bywgZGlyLCB0cnVlKSkKLQkJCXJldHVybiBmYWxzZTsKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3Jl bGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAKLQkJX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwot CQlyZXR1cm4gdHJ1ZTsKKwkJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxrbm8sIGxh c3RjdXJyYmxrbm8sIGRpciwgdHJ1ZSk7CiAJfQogCiAJLyoKQEAgLTEyNDIsNyArMTI0Myw3IEBA IF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIE5v dGU6IGNhbGxzIF9idF9yZWFkZmlyc3RwYWdlIGZvciB1cywgd2hpY2ggcmVsZWFzZXMgdGhlIHBh cmFsbGVsIHNjYW4uCiAJICovCiAJaWYgKGtleXN6ID09IDApCi0JCXJldHVybiBfYnRfZW5kcG9p bnQoc2NhbiwgZGlyKTsKKwkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIsIGZpcnN0YmF0 Y2gpOwogCiAJLyoKIAkgKiBXZSB3YW50IHRvIHN0YXJ0IHRoZSBzY2FuIHNvbWV3aGVyZSB3aXRo aW4gdGhlIGluZGV4LiAgU2V0IHVwIGFuCkBAIC0xNTEwLDkgKzE1MTEsOSBAQCBfYnRfZmlyc3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBwb3NpdGlvbiBvdXJz ZWx2ZXMgb24gdGhlIHRhcmdldCBsZWFmIHBhZ2UuCiAJICovCiAJQXNzZXJ0KFNjYW5EaXJlY3Rp b25Jc0JhY2t3YXJkKGRpcikgPT0gaW5za2V5LmJhY2t3YXJkKTsKLQlfYnRfc2VhcmNoKHJlbCwg TlVMTCwgJmluc2tleSwgJnNvLT5jdXJyUG9zLmJ1ZiwgQlRfUkVBRCwgZmFsc2UpOworCV9idF9z ZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmYnRmaXJzdGJhdGNoLT5idWYsIEJUX1JFQUQsIGZh bHNlKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCWlmICh1bmxp a2VseSghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFz by0+bmVlZFByaW1TY2FuKTsKIApAQCAtMTUyOCwyMiArMTUyOSwyMyBAQCBfYnRfZmlyc3QoSW5k ZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2Vy aWFsaXphYmxlKCkpCiAJCXsKIAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhz X3NuYXBzaG90KTsKLQkJCV9idF9zZWFyY2gocmVsLCBOVUxMLCAmaW5za2V5LCAmc28tPmN1cnJQ b3MuYnVmLCBCVF9SRUFELCBmYWxzZSk7CisJCQlfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tl eSwgJmJ0Zmlyc3RiYXRjaC0+YnVmLCBCVF9SRUFELCBmYWxzZSk7CiAJCX0KIAotCQlpZiAoIUJ1 ZmZlcklzVmFsaWQoc28tPmN1cnJQb3MuYnVmKSkKKwkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ0Zmly c3RiYXRjaC0+YnVmKSkKIAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRl eGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJCXJldHVybiBmYWxz ZTsKIAkJfQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24gdGhlIHBh Z2UgKi8KLQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJyUG9zLmJ1 Zik7CisJb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBidGZpcnN0YmF0Y2gtPmJ1 Zik7CiAKIAkvKgogCSAqIE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUg c2NhbiAodXN1YWxseSB0aGUgcGFnZQotCSAqIGN1cnJlbnRseSBpbiBzby0+Y3VyclBvcy5idWYp LgorCSAqIGN1cnJlbnRseSBpbiBmaXJzdGJhdGNoLmJ1ZikuCiAJICoKIAkgKiBJZiBpbnNrZXku bmV4dGtleSA9IGZhbHNlIGFuZCBpbnNrZXkuYmFja3dhcmQgPSBmYWxzZSwgb2ZmbnVtIGlzCiAJ ICogcG9zaXRpb25lZCBhdCB0aGUgZmlyc3Qgbm9uLXBpdm90IHR1cGxlID49IGluc2tleS5zY2Fu a2V5cy4KQEAgLTE1NjEsMTY0ICsxNTYzLDcyIEBAIF9idF9maXJzdChJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCSAqIGZvciB0aGUgcGFnZS4gIEZvciBleGFtcGxlLCB3 aGVuIGluc2tleSBpcyBib3RoIDwgdGhlIGxlYWYgcGFnZSdzIGhpZ2gKIAkgKiBrZXkgYW5kID4g YWxsIG9mIGl0cyBub24tcGl2b3QgdHVwbGVzLCBvZmZudW0gd2lsbCBiZSAibWF4b2ZmICsgMSIu CiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0cGFnZShzY2FuLCBvZmZudW0sIGRpcikpCi0JCXJl dHVybiBmYWxzZTsKLQotCV9idF9yZXR1cm5pdGVtKHNjYW4sIHNvKTsKLQlyZXR1cm4gdHJ1ZTsK KwlyZXR1cm4gX2J0X3JlYWRmaXJzdHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgb2ZmbnVtLCBkaXIp OwogfQogCiAvKgotICoJX2J0X25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRlbSBpbiBhIHNjYW4u CisgKglfYnRfbmV4dCgpIC0tIEdldCB0aGUgbmV4dCBiYXRjaCBpbiBhIHNjYW4uCiAgKgotICoJ CU9uIGVudHJ5LCBzby0+Y3VyclBvcyBkZXNjcmliZXMgdGhlIGN1cnJlbnQgcGFnZSwgd2hpY2gg bWF5IGJlIHBpbm5lZAotICoJCWJ1dCBpcyBub3QgbG9ja2VkLCBhbmQgc28tPmN1cnJQb3MuaXRl bUluZGV4IGlkZW50aWZpZXMgd2hpY2ggaXRlbSB3YXMKLSAqCQlwcmV2aW91c2x5IHJldHVybmVk LgorICoJCU9uIGVudHJ5LCBwcmlvcmJhdGNoIGRlc2NyaWJlcyB0aGUgYmF0Y2ggdGhhdCB3YXMg bGFzdCByZXR1cm5lZCBieQorICoJCWJ0Z2V0YmF0Y2guICBXZSdsbCB1c2UgdGhlIHByaW9yIGJh dGNoJ3MgcG9zaXRpb25pbmcgaW5mb3JtYXRpb24gdG8KKyAqCQlkZWNpZGUgd2hpY2ggbGVhZiBw YWdlIHRvIHJlYWQgbmV4dC4KICAqCi0gKgkJT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBp cyB1cGRhdGVkIGFzIG5lZWRlZCwgYW5kIF9idF9yZXR1cm5pdGVtCi0gKgkJc2V0cyB0aGUgbmV4 dCBpdGVtIHRvIHJldHVybiB0byB0aGUgc2Nhbi4gIHNvLT5jdXJyUG9zIHJlbWFpbnMgdmFsaWQu Ci0gKgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSBpbnZhbGlkYXRl IHNvLT5jdXJyUG9zLiAgSXQnbGwKLSAqCQlzdGlsbCBiZSBwb3NzaWJsZSBmb3IgdGhlIHNjYW4g dG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rpb24sCi0gKgkJdGhvdWdoIHdlJ2xs IG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0IG90aGVyIGRpcmVjdGlvbi4KKyAq CQlPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBUaGVyZSBtdXN0IGJl IGF0IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1cm5lZCBiYXRjaCAo ZWxzZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgorICoJCU5vdGUgdGhhdCByZXR1cm5pbmcgTlVM TCBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVuZCBvZiB0aGUKKyAqCQl0b3AtbGV2ZWwg c2NhbjsgY2FsbGVyIHNob3VsZCBjaGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZQor ICoJCWlmIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gaXMgcmVxdWlyZWQuCiAgKi8KLWJv b2wKLV9idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitJbmRl eFNjYW5CYXRjaAorX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp ciwgSW5kZXhTY2FuQmF0Y2ggcHJpb3JiYXRjaCkKIHsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+ Y3VyclBvcykpOwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBw YWdlOyBvciBpZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQg cGFnZSB3aXRoIGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkK LQl7Ci0JCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVt KQotCQl7Ci0JCQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxz ZTsKLQkJfQotCX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBz by0+Y3VyclBvcy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRp cikpCi0JCQkJcmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwg c28pOwotCXJldHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZy b20gc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGlu ZGV4IHNjYW4gYnkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4 IHNjYW4gZGVzY3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVt KEluZGV4U2NhbkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0g KmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0K LQkvKiBNb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFz c2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9z Lml0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBv cy5pdGVtSW5kZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQg aXRlbSwgcGVyIGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vy ckl0ZW0tPmhlYXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0g KEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19 Ci0KLS8qCi0gKglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5n IHZhbGlkIGRhdGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2Ug dGhhdCBwZXJmb3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBP biBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBw aW5uZWQsIHRob3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQ aW4gdGhlcmUgd29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9z LmN1cnJQYWdlIG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAq Lwotc3RhdGljIGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJl Y3Rpb24gZGlyKQotewotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKKwlCVEJhdGNoRGF0YSAqYnRwcmlvcmJhdGNoID0gQlRCYXRjaEdldERhdGEoc2Nhbiwg cHJpb3JiYXRjaCk7CiAJQmxvY2tOdW1iZXIgYmxrbm8sCiAJCQkJbGFzdGN1cnJibGtubzsKLQot CUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0KLQkvKiBCZWZvcmUgbGVh dmluZyBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkga2lsbGVkIGl0ZW1zICovCi0JaWYgKHNv LT5udW1LaWxsZWQgPiAwKQotCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOworCWJvb2wJCW1vcmVJbkRp cjsKIAogCS8qCi0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0 aGUgcGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRz IGl0LgorCSAqIFRoZSBjb3JlIGNvZGUgbXVzdCBkZWFsIHdpdGggY3Jvc3MtYmF0Y2ggc2NhbiBk aXJlY3Rpb24gY2hhbmdlcyBmb3IgdXMuCisJICogQSBiYXRjaCBtYW5hZ2VtZW50IHJvdXRpbmUg dGhhdCBmbGlwcyBwcmlvcmJhdGNoJ3Mgc2NhbiBkaXJlY3Rpb24gKGFuZAorCSAqIGNhbGxzIGJ0 cG9zcmVzZXQgdG8gZGVhbCB3aXRoIHRoZSBzY2FuJ3MgYXJyYXkga2V5cykgaXMgdXNlZCBmb3Ig dGhpcy4KIAkgKi8KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXggPj0gMCkKLQl7Ci0JCS8qIGJ1bXAg cGluIG9uIGN1cnJlbnQgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIG1hcmsgYnVmZmVyICovCi0J CWlmIChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpCi0JCQlJbmNyQnVmZmVyUmVmQ291 bnQoc28tPmN1cnJQb3MuYnVmKTsKLQkJbWVtY3B5KCZzby0+bWFya1BvcywgJnNvLT5jdXJyUG9z LAotCQkJICAgb2Zmc2V0b2YoQlRTY2FuUG9zRGF0YSwgaXRlbXNbMV0pICsKLQkJCSAgIHNvLT5j dXJyUG9zLmxhc3RJdGVtICogc2l6ZW9mKEJUU2NhblBvc0l0ZW0pKTsKLQkJaWYgKHNvLT5tYXJr VHVwbGVzKQotCQkJbWVtY3B5KHNvLT5tYXJrVHVwbGVzLCBzby0+Y3VyclR1cGxlcywKLQkJCQkg ICBzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQpOwotCQlzby0+bWFya1Bvcy5pdGVtSW5kZXgg PSBzby0+bWFya0l0ZW1JbmRleDsKLQkJc28tPm1hcmtJdGVtSW5kZXggPSAtMTsKLQotCQkvKgot CQkgKiBJZiB3ZSdyZSBqdXN0IGFib3V0IHRvIHN0YXJ0IHRoZSBuZXh0IHByaW1pdGl2ZSBpbmRl eCBzY2FuCi0JCSAqIChwb3NzaWJsZSB3aXRoIGEgc2NhbiB0aGF0IGhhcyBhcnJheXMga2V5cywg YW5kIG5lZWRzIHRvIHNraXAgdG8KLQkJICogY29udGludWUgaW4gdGhlIGN1cnJlbnQgc2NhbiBk aXJlY3Rpb24pLCBtb3JlTGVmdC9tb3JlUmlnaHQgb25seQotCQkgKiBpbmRpY2F0ZSB0aGUgZW5k IG9mIHRoZSBjdXJyZW50IHByaW1pdGl2ZSBpbmRleCBzY2FuLiAgVGhleSBtdXN0Ci0JCSAqIG5l dmVyIGJlIHRha2VuIHRvIGluZGljYXRlIHRoYXQgdGhlIHRvcC1sZXZlbCBpbmRleCBzY2FuIGhh cyBlbmRlZAotCQkgKiAodGhhdCB3b3VsZCBiZSB3cm9uZykuCi0JCSAqCi0JCSAqIFdlIGNvdWxk IGhhbmRsZSB0aGlzIGNhc2UgYnkgdHJlYXRpbmcgdGhlIGN1cnJlbnQgYXJyYXkga2V5cyBhcwot CQkgKiBtYXJrUG9zIHN0YXRlLiAgQnV0IGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBhcnJheSBz dGF0ZSBsaWtlIHRoaXMKLQkJICogd291bGQgYWRkIGNvbXBsZXhpdHkuICBJbnN0ZWFkLCB3ZSBq dXN0IHVuc2V0IG1hcmtQb3MncyBjb3B5IG9mCi0JCSAqIG1vcmVSaWdodCBvciBtb3JlTGVmdCAo d2hpY2hldmVyIG1pZ2h0IGJlIGFmZmVjdGVkKSwgd2hpbGUgbWFraW5nCi0JCSAqIGJ0cmVzdHJw b3MgcmVzZXQgdGhlIHNjYW4ncyBhcnJheXMgdG8gdGhlaXIgaW5pdGlhbCBzY2FuIHBvc2l0aW9u cy4KLQkJICogSW4gZWZmZWN0LCBidHJlc3RycG9zIGxlYXZlcyBhZHZhbmNpbmcgdGhlIGFycmF5 cyB1cCB0byB0aGUgZmlyc3QKLQkJICogX2J0X3JlYWRwYWdlIGNhbGwgKHRoYXQgdGFrZXMgcGxh Y2UgYWZ0ZXIgaXQgaGFzIHJlc3RvcmVkIG1hcmtQb3MpLgotCQkgKi8KLQkJaWYgKHNvLT5uZWVk UHJpbVNjYW4pCi0JCXsKLQkJCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKHNvLT5jdXJyUG9z LmRpcikpCi0JCQkJc28tPm1hcmtQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKLQkJCWVsc2UKLQkJCQlz by0+bWFya1Bvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCX0KLQotCQkvKiBtYXJrL3Jlc3RvcmUgbm90 IHN1cHBvcnRlZCBieSBwYXJhbGxlbCBzY2FucyAqLwotCQlBc3NlcnQoIXNjYW4tPnBhcmFsbGVs X3NjYW4pOwotCX0KLQotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPmN1cnJQb3MpOworCUFz c2VydChwcmlvcmJhdGNoLT5kaXIgPT0gZGlyKTsKIAogCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFn ZSB3aXRoIGRhdGEgKi8KIAlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQotCQlibGtu byA9IHNvLT5jdXJyUG9zLm5leHRQYWdlOworCQlibGtubyA9IGJ0cHJpb3JiYXRjaC0+bmV4dFBh Z2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCWxhc3RjdXJyYmxr bm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBidHByaW9yYmF0Y2gtPnByZXZQ YWdlOworCWxhc3RjdXJyYmxrbm8gPSBidHByaW9yYmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRp ciA9IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0cHJpb3JiYXRjaC0+bW9yZVJp Z2h0IDogYnRwcmlvcmJhdGNoLT5tb3JlTGVmdDsKIAogCS8qCi0JICogQ2FuY2VsIHByaW1pdGl2 ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2NoZWR1bGVkIHdoZW4gdGhlIGNhbGwgdG8KLQkgKiBf YnRfcmVhZHBhZ2UgZm9yIGN1cnJQb3MgaGFwcGVuZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJl Y3Rpb24gdG8gdGhlCi0JICogb25lIHRoYXQgd2UncmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mg b2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5Ci0JICoga2V5cyBhcy1pcywgc2luY2UgdGhl IG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5jZSB0aGVtLikKKwkgKiBGb3IgYml0bWFwIHNj YW4gY2FsbGVycywgcmVsZWFzZSB0aGUgcHJpb3IgYmF0Y2ggbm93IHNvIHRoYXQKKwkgKiBfYnRf cmVhZG5leHRwYWdlIGNhbiByZXVzZSBpdHMgbWVtb3J5LiAgVGhhdCB3YXkgYml0bWFwIHNjYW5z IG5ldmVyCisJICogbmVlZCBtb3JlIHRoYW4gb25lIGJhdGNoIGFsbG9jYXRpb24uCiAJICovCi0J aWYgKHNvLT5jdXJyUG9zLmRpciAhPSBkaXIpCi0JCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsK KwlpZiAoIXNjYW4tPnVzZWJhdGNocmluZykKKwkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uo c2NhbiwgcHJpb3JiYXRjaCk7CisKKwlpZiAoYmxrbm8gPT0gUF9OT05FIHx8ICFtb3JlSW5EaXIp CisJeworCQkvKgorCQkgKiBwcmlvcmJhdGNoJ3MgcGFnZSBpcyBrbm93biB0byBiZSB0aGUgZmlu YWwgbGVhZiBwYWdlIHdpdGggbWF0Y2hlcworCQkgKiBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uIChp dHMgX2J0X3JlYWRwYWdlIGNhbGwgZmlndXJlZCB0aGF0IG91dCkuCisJCSAqCisJCSAqIE5vdGU6 IGlmIHNvLT5uZWVkUHJpbVNjYW4gaXMgc2V0LCB0aGVuIHByaW9yYmF0Y2gncyBsZWFmIHBhZ2Ug aXMKKwkJICogYWN0dWFsbHkganVzdCB0aGUgZmluYWwgcGFnZSBmb3IgdGhlIGN1cnJlbnQgcHJp bWl0aXZlIGluZGV4IHNjYW4KKwkJICogaW4gdGhpcyBzY2FuIGRpcmVjdGlvbiAodGhlIHNjYW4g d2lsbCBjb250aW51ZSBpbiBfYnRfZmlyc3QpLgorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3Vy cmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJp bVNjYW4gd2Fzbid0IHNldCAqLwogCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQpAQCAtMTczMiwxNzggKzE2NDIsMTY5 IEBAIF9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQog ICogdG8gc3RvcCB0aGUgc2NhbiBvbiB0aGlzIHBhZ2UgYnkgY2FsbGluZyBfYnRfY2hlY2trZXlz IGFnYWluc3QgdGhlIGhpZ2gKICAqIGtleS4gIFNlZSBfYnRfcmVhZHBhZ2UgZm9yIGZ1bGwgZGV0 YWlscy4KICAqCi0gKiBPbiBlbnRyeSwgc28tPmN1cnJQb3MgbXVzdCBiZSBwaW5uZWQgYW5kIGxv Y2tlZCAoc28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KKyAqIE9uIGVudHJ5LCBmaXJzdGJhdGNoIG11 c3QgYmUgcGlubmVkIGFuZCBsb2NrZWQgKHNvIG9mZm51bSBzdGF5cyB2YWxpZCkuCiAgKiBQYXJh bGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGlu ZyBoZXJlLgogICoKLSAqIE9uIGV4aXQsIHdlJ2xsIGhhdmUgdXBkYXRlZCBzby0+Y3VyclBvcyBh bmQgcmV0YWluZWQgbG9ja3MgYW5kIHBpbnMKLSAqIGFjY29yZGluZyB0byB0aGUgc2FtZSBydWxl cyBhcyB0aG9zZSBsYWlkIG91dCBmb3IgX2J0X3JlYWRuZXh0cGFnZSBleGl0LgotICogTGlrZSBf YnRfcmVhZG5leHRwYWdlLCBvdXIgcmV0dXJuIHZhbHVlIGluZGljYXRlcyBpZiB0aGVyZSBhcmUg YW55IG1hdGNoaW5nCi0gKiByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24uCisgKiBPbiBz dWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2ggY29udGFpbmluZyBkYXRhIGZyb20g dGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIGl0ZW0uICBJ ZiB0aGVyZSBhcmUgbm8gbWF0Y2hpbmcgaXRlbXMgaW4gdGhlCisgKiBnaXZlbiBzY2FuIGRpcmVj dGlvbiwgd2UganVzdCByZXR1cm4gTlVMTC4gIE5vdGUgdGhhdCByZXR1cm5pbmcgTlVMTAorICog ZG9lc24ndCBuZWNlc3NhcmlseSBtZWFuIHRoZSBlbmQgb2YgdGhlIHRvcC1sZXZlbCBzY2FuOyBi dGdldGJhdGNoIGFuZAorICogYnRnZXRiaXRtYXAgY2hlY2sgc28tPm5lZWRQcmltU2NhbiB0byBk ZXRlcm1pbmUgaWYgYW5vdGhlciBwcmltaXRpdmUgaW5kZXgKKyAqIHNjYW4gaXMgcmVxdWlyZWQu CiAgKgogICogV2UgYWx3YXlzIHJlbGVhc2UgdGhlIHNjYW4gZm9yIGEgcGFyYWxsZWwgc2NhbiBj YWxsZXIsIHJlZ2FyZGxlc3Mgb2YKICAqIHN1Y2Nlc3Mgb3IgZmFpbHVyZTsgd2UnbGwgY2FsbCBf YnRfcGFyYWxsZWxfcmVsZWFzZSBhcyBzb29uIGFzIHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9v bAotX2J0X3JlYWRmaXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBPZmZzZXROdW1iZXIgb2Zm bnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBJbmRleFNjYW5CYXRjaAorX2J0X3JlYWRm aXJzdHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoLAor CQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJQlRTY2Fu T3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpi dGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShzY2FuLCBmaXJzdGJhdGNoKTsKKwlCbG9ja051 bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJsa25vOworCWJvb2wJCW1vcmVJbkRpcjsKIAotCXNv LT5udW1LaWxsZWQgPSAwOwkJCS8qIGp1c3QgcGFyYW5vaWEgKi8KLQlzby0+bWFya0l0ZW1JbmRl eCA9IC0xOwkJLyogZGl0dG8gKi8KLQotCS8qIEluaXRpYWxpemUgc28tPmN1cnJQb3MgZm9yIHRo ZSBmaXJzdCBwYWdlIChwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZikgKi8KKwkvKiBJbml0aWFsaXpl IGZpcnN0YmF0Y2gncyBwb3NpdGlvbiBmb3IgdGhlIGZpcnN0IHBhZ2UgKi8KIAlpZiAoc28tPm5l ZWRQcmltU2NhbikKIAl7CiAJCUFzc2VydChzby0+bnVtQXJyYXlLZXlzKTsKIAotCQlzby0+Y3Vy clBvcy5tb3JlTGVmdCA9IHRydWU7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJ CWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdo dCA9IHRydWU7CiAJCXNvLT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKIAl9CiAJZWxzZSBpZiAoU2Nh bkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCXsKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSBm YWxzZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwkJYnRmaXJzdGJhdGNoLT5t b3JlTGVmdCA9IGZhbHNlOworCQlidGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJfQog CWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3Mu bW9yZVJpZ2h0ID0gZmFsc2U7CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQli dGZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IGZhbHNlOwogCX0KIAogCS8qCiAJICogQXR0ZW1wdCB0 byBsb2FkIG1hdGNoaW5nIHR1cGxlcyBmcm9tIHRoZSBmaXJzdCBwYWdlLgogCSAqCi0JICogTm90 ZSB0aGF0IF9idF9yZWFkcGFnZSB3aWxsIGZpbmlzaCBpbml0aWFsaXppbmcgdGhlIHNvLT5jdXJy UG9zIGZpZWxkcy4KKwkgKiBOb3RlIHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRp YWxpemluZyB0aGUgZmlyc3RiYXRjaCBmaWVsZHMuCiAJICogX2J0X3JlYWRwYWdlIGFsc28gcmVs ZWFzZXMgcGFyYWxsZWwgc2NhbiAoZXZlbiB3aGVuIGl0IHJldHVybnMgZmFsc2UpLgogCSAqLwot CWlmIChfYnRfcmVhZHBhZ2Uoc2NhbiwgZGlyLCBvZmZudW0sIHRydWUpKQorCWlmIChfYnRfcmVh ZHBhZ2Uoc2NhbiwgZmlyc3RiYXRjaCwgZGlyLCBvZmZudW0sIHRydWUpKQogCXsKLQkJUmVsYXRp b24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlvbjsKLQotCQkvKgotCQkgKiBfYnRfcmVhZHBhZ2Ug c3VjY2VlZGVkLiAgRHJvcCB0aGUgbG9jayAoYW5kIG1heWJlIHRoZSBwaW4pIG9uCi0JCSAqIHNv LT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVw bGVzLgotCQkgKi8KLQkJQXNzZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0J CV9idF9kcm9wX2xvY2tfYW5kX21heWJlX3BpbihyZWwsIHNvKTsKLQkJcmV0dXJuIHRydWU7CisJ CS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVzIGluIGZpcnN0YmF0Y2gu aXRlbXNbXSAqLworCQlfYnRfYmF0Y2hfdW5sb2NrKHNjYW4sIGZpcnN0YmF0Y2gsIGJ0Zmlyc3Ri YXRjaC0+YnVmKTsKKwkJcmV0dXJuIGZpcnN0YmF0Y2g7CiAJfQogCi0JLyogVGhlcmUncyBubyBh Y3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlIGluIHNvLT5jdXJyUG9zLmJ1ZiAqLwot CV9idF91bmxvY2tidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgc28tPmN1cnJQb3MuYnVmKTsKKwkv KiBUaGVyZSdzIG5vIGFjdHVhbGx5LW1hdGNoaW5nIGRhdGEgb24gdGhlIHBhZ2UgcmV0dXJuZWQg YnkgX2J0X3NlYXJjaCAqLworCV9idF9yZWxidWYoc2Nhbi0+aW5kZXhSZWxhdGlvbiwgYnRmaXJz dGJhdGNoLT5idWYpOwogCi0JLyogQ2FsbCBfYnRfcmVhZG5leHRwYWdlIHVzaW5nIGl0cyBfYnRf c3RlcHBhZ2Ugd3JhcHBlciBmdW5jdGlvbiAqLwotCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRp cikpCi0JCXJldHVybiBmYWxzZTsKKwkvKiBXYWxrIHRvIHRoZSBuZXh0IHBhZ2Ugd2l0aCBkYXRh ICovCisJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKKwkJYmxrbm8gPSBidGZpcnN0 YmF0Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBidGZpcnN0YmF0Y2gtPnByZXZQYWdl OworCWxhc3RjdXJyYmxrbm8gPSBidGZpcnN0YmF0Y2gtPmN1cnJQYWdlOworCW1vcmVJbkRpciA9 IFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJCWJ0Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0 IDogYnRmaXJzdGJhdGNoLT5tb3JlTGVmdDsKIAotCS8qIF9idF9yZWFkcGFnZSBmb3IgYSBsYXRl ciBwYWdlIChub3cgaW4gc28tPmN1cnJQb3MpIHN1Y2NlZWRlZCAqLwotCXJldHVybiB0cnVlOwor CS8qIFJlbGVhc2UgZmlyc3RiYXRjaCAod2lsbCBiZSByZWN5Y2xlZCBpZiB3ZSByZWFjaCBfYnRf cmVhZG5leHRwYWdlKSAqLworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCisJaWYgKGJsa25vID09IFBfTk9ORSB8fCAhbW9yZUluRGlyKQorCXsKKwkJLyoK KwkJICogZmlyc3RiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGly ZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2Fu IHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3Vy cmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJp bVNjYW4gd2Fzbid0IHNldCAqLworCisJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCiAvKgogICoJX2J0X3JlYWRuZXh0 cGFnZSgpIC0tIFJlYWQgbmV4dCBwYWdlIGNvbnRhaW5pbmcgdmFsaWQgZGF0YSBmb3IgX2J0X25l eHQKICAqCi0gKiBDYWxsZXIncyBibGtubyBpcyB0aGUgbmV4dCBpbnRlcmVzdGluZyBwYWdlJ3Mg bGluaywgdGFrZW4gZnJvbSBlaXRoZXIgdGhlCi0gKiBwcmV2aW91c2x5LXNhdmVkIHJpZ2h0IGxp bmsgb3IgbGVmdCBsaW5rLiAgbGFzdGN1cnJibGtubyBpcyB0aGUgcGFnZSB0aGF0Ci0gKiB3YXMg Y3VycmVudCBhdCB0aGUgcG9pbnQgd2hlcmUgdGhlIGJsa25vIGxpbmsgd2FzIHNhdmVkLCB3aGlj aCB3ZSB1c2UgdG8KLSAqIHJlYXNvbiBhYm91dCBjb25jdXJyZW50IHBhZ2Ugc3BsaXRzL3BhZ2Ug ZGVsZXRpb25zIGR1cmluZyBiYWNrd2FyZHMgc2NhbnMuCi0gKiBJbiB0aGUgY29tbW9uIGNhc2Ug d2hlcmUgc2VpemVkPWZhbHNlLCBibGtubyBpcyBlaXRoZXIgc28tPmN1cnJQb3MubmV4dFBhZ2UK LSAqIG9yIHNvLT5jdXJyUG9zLnByZXZQYWdlLCBhbmQgbGFzdGN1cnJibGtubyBpcyBzby0+Y3Vy clBvcy5jdXJyUGFnZS4KKyAqIENhbGxlcidzIGJsa25vIGlzIHRoZSBwcmlvciBiYXRjaCdzIG5l eHRQYWdlIG9yIHByZXZQYWdlIChkZXBlbmRpbmcgb24gdGhlCisgKiBjdXJyZW50IHNjYW4gZGly ZWN0aW9uKSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgdGhlIHByaW9yIGJhdGNoJ3MgY3VyclBhZ2Uu CisgKiBXZSB1c2UgbGFzdGN1cnJibGtubyB0byByZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdl IHNwbGl0cy9wYWdlIGRlbGV0aW9ucworICogZHVyaW5nIGJhY2t3YXJkcyBzY2Fucy4KICAqCi0g KiBPbiBlbnRyeSwgc28tPmN1cnJQb3Mgc2hvdWxkbid0IGJlIGxvY2tlZCBieSBjYWxsZXIuICBz by0+Y3VyclBvcy5idWYgbXVzdAotICogYmUgSW52YWxpZEJ1ZmZlci91bnBpbm5lZCBhcyBuZWVk ZWQgYnkgY2FsbGVyIChub3RlIHRoYXQgbGFzdGN1cnJibGtubwotICogd29uJ3QgbmVlZCB0byBi ZSByZWFkIGFnYWluIGluIGFsbW9zdCBhbGwgY2FzZXMpLiAgUGFyYWxsZWwgc2NhbiBjYWxsZXJz Ci0gKiB0aGF0IHNlaXplZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlIHNob3VsZCBwYXNz IHNlaXplZD10cnVlOyBzdWNoIGEKLSAqIGNhbGxlcidzIGJsa25vIGFuZCBsYXN0Y3VycmJsa25v IGFyZ3VtZW50cyBjb21lIGZyb20gdGhlIHNlaXplZCBzY2FuLgotICogc2VpemVkPWZhbHNlIGNh bGxlcnMganVzdCBwYXNzIHVzIHRoZSBibGtuby9sYXN0Y3VycmJsa25vIHRha2VuIGZyb20gdGhl aXIKLSAqIHNvLT5jdXJyUG9zLCB3aGljaCAoYWxvbmcgd2l0aCBzby0+Y3VyclBvcyBpdHNlbGYp IGNhbiBiZSB1c2VkIHRvIGVuZCB0aGUKLSAqIHNjYW4uICBBIHNlaXplZD1mYWxzZSBjYWxsZXIn cyBibGtubyBjYW4gbmV2ZXIgYmUgYXNzdW1lZCB0byBiZSB0aGUgcGFnZQotICogdGhhdCBtdXN0 IGJlIHJlYWQgbmV4dCBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLCB0aG91Z2guICBXZSBtdXN0IGZp Z3VyZSB0aGF0Ci0gKiBwYXJ0IG91dCBmb3Igb3Vyc2VsdmVzIGJ5IHNlaXppbmcgdGhlIHNjYW4g KHRoZSBjb3JyZWN0IHBhZ2UgdG8gcmVhZCBtaWdodAotICogYWxyZWFkeSBiZSBiZXlvbmQgdGhl IHNlaXplZD1mYWxzZSBjYWxsZXIncyBibGtubyBkdXJpbmcgYSBwYXJhbGxlbCBzY2FuLAotICog dW5sZXNzIGJsa25vL3NvLT5jdXJyUG9zLm5leHRQYWdlL3NvLT5jdXJyUG9zLnByZXZQYWdlIGlz IGFscmVhZHkgUF9OT05FLAotICogb3IgdW5sZXNzIHNvLT5jdXJyUG9zLm1vcmVSaWdodC9zby0+ Y3VyclBvcy5tb3JlTGVmdCBpcyBhbHJlYWR5IHVuc2V0KS4KKyAqIE9uIGVudHJ5LCBubyBwYWdl IHNob3VsZCBiZSBsb2NrZWQgYnkgY2FsbGVyLgogICoKLSAqIE9uIHN1Y2Nlc3MgZXhpdCwgc28t PmN1cnJQb3MgaXMgdXBkYXRlZCB0byBjb250YWluIGRhdGEgZnJvbSB0aGUgbmV4dAotICogaW50 ZXJlc3RpbmcgcGFnZSwgYW5kIHdlIHJldHVybiB0cnVlLiAgV2UgaG9sZCBhIHBpbiBvbiB0aGUg YnVmZmVyIG9uCi0gKiBzdWNjZXNzIGV4aXQgKGV4Y2VwdCBkdXJpbmcgc28tPmRyb3BQaW4gaW5k ZXggc2NhbnMsIHdoZW4gd2UgZHJvcCB0aGUgcGluCi0gKiBlYWdlcmx5IHRvIGF2b2lkIGJsb2Nr aW5nIFZBQ1VVTSkuCisgKiBPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdW5sb2NrZWQgYmF0Y2gg Y29udGFpbmluZyBkYXRhIGZyb20gdGhlIG5leHQgcGFnZQorICogdGhhdCBoYXMgYXQgbGVhc3Qg b25lIG1hdGNoaW5nIGl0ZW0uICBJZiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGluZyBpdGVtcwor ICogaW4gdGhlIGdpdmVuIHNjYW4gZGlyZWN0aW9uLCB3ZSBqdXN0IHJldHVybiBOVUxMLiAgTm90 ZSB0aGF0IHJldHVybmluZyBOVUxMCisgKiBkb2Vzbid0IG5lY2Vzc2FyaWx5IG1lYW4gdGhlIGVu ZCBvZiB0aGUgdG9wLWxldmVsIHNjYW47IGJ0Z2V0YmF0Y2ggYW5kCisgKiBidGdldGJpdG1hcCBj aGVjayBzby0+bmVlZFByaW1TY2FuIHRvIGRldGVybWluZSBpZiBhbm90aGVyIHByaW1pdGl2ZSBp bmRleAorICogc2NhbiBpcyByZXF1aXJlZC4KICAqCi0gKiBJZiB0aGVyZSBhcmUgbm8gbW9yZSBt YXRjaGluZyByZWNvcmRzIGluIHRoZSBnaXZlbiBkaXJlY3Rpb24sIHdlIGludmFsaWRhdGUKLSAq IHNvLT5jdXJyUG9zICh3aGlsZSBlbnN1cmluZyBpdCByZXRhaW5zIG5vIGxvY2tzIG9yIHBpbnMp LCBhbmQgcmV0dXJuIGZhbHNlLgotICoKLSAqIFdlIGFsd2F5cyByZWxlYXNlIHRoZSBzY2FuIGZv ciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9mCi0gKiBzdWNjZXNzIG9yIGZh aWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2UgYXMgc29vbiBhcyBwb3NzaWJs ZS4KKyAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IHNlaXplIHRoZSBzY2FuIGJlZm9yZSBj YWxsaW5nIGhlcmUuICBibGtubyBhbmQKKyAqIGxhc3RjdXJyYmxrbm8gc2hvdWxkIGNvbWUgZnJv bSB0aGUgc2VpemVkIHNjYW4uICBXZSdsbCByZWxlYXNlIHRoZSBzY2FuIGFzCisgKiBzb29uIGFz IHBvc3NpYmxlLgogICovCi1zdGF0aWMgYm9vbAorc3RhdGljIEluZGV4U2NhbkJhdGNoCiBfYnRf cmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCi0JCQkJ IEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29sIHNlaXpl ZCkKKwkJCQkgQmxvY2tOdW1iZXIgbGFzdGN1cnJibGtubywgU2NhbkRpcmVjdGlvbiBkaXIsIGJv b2wgZmlyc3RwYWdlKQogewogCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247Ci0J QlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUluZGV4U2Nh bkJhdGNoIG5ld2JhdGNoOworCUJUQmF0Y2hEYXRhICpidG5ld2JhdGNoOwogCi0JQXNzZXJ0KHNv LT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gfHwgc2VpemVkKTsKLQlBc3NlcnQo IShibGtubyA9PSBQX05PTkUgJiYgc2VpemVkKSk7Ci0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5l ZChzby0+Y3VyclBvcykpOworCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXcgYmF0Y2ggKi8KKwlu ZXdiYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKKwlidG5ld2JhdGNoID0g QlRCYXRjaEdldERhdGEoc2NhbiwgbmV3YmF0Y2gpOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0 IHRoZSBzY2FuIGFscmVhZHkgcmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQK LQkgKiBvZiBibGtubyAob3IgcmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBm b3IgYmFja3dhcmRzIHNjYW5zKQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJhdGNoIGZvciBi bGtubywgYSBwYWdlIHRvIHRoZSByaWdodCBvZgorCSAqIGxhc3RjdXJyYmxrbm8gKG9yIHRvIHRo ZSBsZWZ0LCB3aGVuIHRoZSBzY2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpLgorCSAqCisJICogTm90 ZTogY2FsbGVyJ3MgYmxrbm8gaXMgdGVudGF0aXZlLiAgbmV3YmF0Y2ggYWN0dWFsbHkgc3RvcmVz IG1hdGNoZXMKKwkgKiBmcm9tIHRoZSBuZXh0IGxlYWYgcGFnZSBpbiB0aGlzIHNjYW4gZGlyZWN0 aW9uIHRoYXQgaGFzIGF0IGxlYXN0IG9uZQorCSAqIG1hdGNoaW5nIGl0ZW0uICBUaGlzIGlzIHVz dWFsbHkgY2FsbGVyJ3MgYmxrbm8gcGFnZSwgYnV0IG1pZ2h0IGJlIHNvbWUKKwkgKiBvdGhlciBw YWdlIHRvIGl0cyByaWdodCAob3IgdG8gaXRzIGxlZnQpIGluc3RlYWQuCiAJICovCi0JaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVl OwotCWVsc2UKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwlidG5ld2JhdGNoLT5t b3JlTGVmdCA9IHRydWU7CS8qIGZvciBsYXN0Y3VycmJsa25vIChvciB0ZW50YXRpdmUpICovCisJ YnRuZXdiYXRjaC0+bW9yZVJpZ2h0ID0gdHJ1ZTsJLyogdGVudGF0aXZlIChvciBmb3IgbGFzdGN1 cnJibGtubykgKi8KIAogCWZvciAoOzspCiAJewogCQlQYWdlCQlwYWdlOwogCQlCVFBhZ2VPcGFx dWUgb3BhcXVlOwogCi0JCWlmIChibGtubyA9PSBQX05PTkUgfHwKLQkJCShTY2FuRGlyZWN0aW9u SXNGb3J3YXJkKGRpcikgPwotCQkJICFzby0+Y3VyclBvcy5tb3JlUmlnaHQgOiAhc28tPmN1cnJQ b3MubW9yZUxlZnQpKQotCQl7Ci0JCQkvKiBtb3N0IHJlY2VudCBfYnRfcmVhZHBhZ2UgY2FsbCAo Zm9yIGxhc3RjdXJyYmxrbm8pIGVuZGVkIHNjYW4gKi8KLQkJCUFzc2VydChzby0+Y3VyclBvcy5j dXJyUGFnZSA9PSBsYXN0Y3VycmJsa25vICYmICFzZWl6ZWQpOwotCQkJQlRTY2FuUG9zSW52YWxp ZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsJLyogaWZmICFz by0+bmVlZFByaW1TY2FuICovCi0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KLQotCQlBc3NlcnQoIXNv LT5uZWVkUHJpbVNjYW4pOwotCi0JCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBuZXZlciBhY3R1YWxs eSB2aXNpdCBzby0+Y3VyclBvcyBibGtubyAqLwotCQlpZiAoIXNlaXplZCAmJiBzY2FuLT5wYXJh bGxlbF9zY2FuICE9IE5VTEwgJiYKLQkJCSFfYnRfcGFyYWxsZWxfc2VpemUoc2NhbiwgJmJsa25v LCAmbGFzdGN1cnJibGtubywgZmFsc2UpKQotCQl7Ci0JCQkvKiB3aG9sZSBzY2FuIGlzIG5vdyBk b25lIChvciBhbm90aGVyIHByaW1pdGl2ZSBzY2FuIHJlcXVpcmVkKSAqLwotCQkJQlRTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0JCQlyZXR1cm4gZmFsc2U7Ci0JCX0KKwkJQXNzZXJ0 KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKKwkJQXNzZXJ0 KGJsa25vICE9IFBfTk9ORSAmJiBsYXN0Y3VycmJsa25vICE9IFBfTk9ORSk7CiAKIAkJaWYgKFNj YW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAkJewogCQkJLyogcmVhZCBibGtubywgYnV0IGNo ZWNrIGZvciBpbnRlcnJ1cHRzIGZpcnN0ICovCiAJCQlDSEVDS19GT1JfSU5URVJSVVBUUygpOwot CQkJc28tPmN1cnJQb3MuYnVmID0gX2J0X2dldGJ1ZihyZWwsIGJsa25vLCBCVF9SRUFEKTsKKwkJ CWJ0bmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywgQlRfUkVBRCk7CiAJCX0K IAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyByYWNlIChhbHNvIGNoZWNr cyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9idF9sb2NrX2FuZF92 YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAorCQkJYnRuZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tf YW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8sCiAJCQkJCQkJCQkJCQkJCSBsYXN0Y3VycmJs a25vKTsKLQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gSW52YWxpZEJ1ZmZlcikKKwkJCWlmIChi dG5ld2JhdGNoLT5idWYgPT0gSW52YWxpZEJ1ZmZlcikKIAkJCXsKIAkJCQkvKiBtdXN0IGhhdmUg YmVlbiBhIGNvbmN1cnJlbnQgZGVsZXRpb24gb2YgbGVmdG1vc3QgcGFnZSAqLwotCQkJCUJUU2Nh blBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCQkJCV9idF9wYXJhbGxlbF9kb25lKHNjYW4p OwotCQkJCXJldHVybiBmYWxzZTsKKwkJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2Fu LCBuZXdiYXRjaCk7CisJCQkJcmV0dXJuIE5VTEw7CiAJCQl9CiAJCX0KIAotCQlwYWdlID0gQnVm ZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCQlwYWdlID0gQnVmZmVyR2V0UGFnZShidG5l d2JhdGNoLT5idWYpOwogCQlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3Rj dXJyYmxrbm8gPSBibGtubzsKIAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0x OTExLDE3ICsxODEyLDE3IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBC bG9ja051bWJlciBibGtubywKIAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24g dGhpcyBwYWdlICovCiAJCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewot CQkJCS8qIG5vdGUgdGhhdCB0aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9w ICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1 ZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAor CQkJCQkJCQkgUF9GSVJTVERBVEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7 Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IGJ0bmV3YmF0 Y2gtPm5leHRQYWdlOwogCQkJfQogCQkJZWxzZQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0aGlz IHdpbGwgY2xlYXIgbW9yZUxlZnQgaWYgd2UgY2FuIHN0b3AgKi8KLQkJCQlpZiAoX2J0X3JlYWRw YWdlKHNjYW4sIGRpciwgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKSwgc2VpemVkKSkKKwkJ CQlpZiAoX2J0X3JlYWRwYWdlKHNjYW4sIG5ld2JhdGNoLCBkaXIsCisJCQkJCQkJCSBQYWdlR2V0 TWF4T2Zmc2V0TnVtYmVyKHBhZ2UpLCBmaXJzdHBhZ2UpKQogCQkJCQlicmVhazsKLQkJCQlibGtu byA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOworCQkJCWJsa25vID0gYnRuZXdiYXRjaC0+cHJldlBh Z2U7CiAJCQl9CiAJCX0KIAkJZWxzZQpAQCAtMTkzNiwxOSArMTgzNywzOCBAQCBfYnRfcmVhZG5l eHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8sCiAJCX0KIAogCQkv KiBubyBtYXRjaGluZyB0dXBsZXMgb24gdGhpcyBwYWdlICovCi0JCV9idF9yZWxidWYocmVsLCBz by0+Y3VyclBvcy5idWYpOwotCQlzZWl6ZWQgPSBmYWxzZTsJCQkvKiByZWxlYXNlZCBieSBfYnRf cmVhZHBhZ2UgKG9yIGJ5IHVzKSAqLworCQlfYnRfcmVsYnVmKHJlbCwgYnRuZXdiYXRjaC0+YnVm KTsKKworCQkvKiBDb250aW51ZSB0aGUgc2NhbiBpbiB0aGlzIGRpcmVjdGlvbj8gKi8KKwkJaWYg KGJsa25vID09IFBfTk9ORSB8fAorCQkJKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/CisJ CQkgIWJ0bmV3YmF0Y2gtPm1vcmVSaWdodCA6ICFidG5ld2JhdGNoLT5tb3JlTGVmdCkpCisJCXsK KwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMg ZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNldCB0aGUg c2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLworCQkJX2J0X3BhcmFsbGVs X2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBuZXdiYXRj aCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAoc2Nhbi0+cGFyYWxsZWxfc2Nh biAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3Rj dXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2Nh biwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBkb25lIGlmZiBzby0+bmVlZFByaW1T Y2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJCWZpcnN0cGFnZSA9IGZhbHNlOwkJLyogbmV4dCBw YWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8qCi0JICogX2J0X3JlYWRwYWdlIHN1Y2Nl ZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCSAqIHNvLT5jdXJy UG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVwbGVzLgot CSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtubyk7Ci0JQXNzZXJ0KEJU U2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVf cGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBtYXRjaGVz IGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlBc3NlcnQoYnRuZXdiYXRjaC0+Y3VyclBhZ2UgPT0g Ymxrbm8pOworCV9idF9iYXRjaF91bmxvY2soc2NhbiwgbmV3YmF0Y2gsIGJ0bmV3YmF0Y2gtPmJ1 Zik7CiAKLQlyZXR1cm4gdHJ1ZTsKKwlyZXR1cm4gbmV3YmF0Y2g7CiB9CiAKIC8qCkBAIC0yMTc0 LDI1ICsyMDk0LDI0IEBAIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRpb24gcmVsLCB1aW50MzIgbGV2 ZWwsIGJvb2wgcmlnaHRtb3N0KQogICogUGFyYWxsZWwgc2NhbiBjYWxsZXJzIG11c3QgaGF2ZSBz ZWl6ZWQgdGhlIHNjYW4gYmVmb3JlIGNhbGxpbmcgaGVyZS4KICAqIEV4aXQgY29uZGl0aW9ucyBh cmUgdGhlIHNhbWUgYXMgZm9yIF9idF9maXJzdCgpLgogICovCi1zdGF0aWMgYm9vbAotX2J0X2Vu ZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitzdGF0aWMgSW5k ZXhTY2FuQmF0Y2gKK19idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rp b24gZGlyLCBJbmRleFNjYW5CYXRjaCBmaXJzdGJhdGNoKQogewogCVJlbGF0aW9uCXJlbCA9IHNj YW4tPmluZGV4UmVsYXRpb247Ci0JQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nh bi0+b3BhcXVlOworCUJUQmF0Y2hEYXRhICpidGZpcnN0YmF0Y2ggPSBCVEJhdGNoR2V0RGF0YShz Y2FuLCBmaXJzdGJhdGNoKTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJ T2Zmc2V0TnVtYmVyIHN0YXJ0OwogCi0JQXNzZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJy UG9zKSk7Ci0JQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsKKwlBc3NlcnQoISgoQlRTY2FuT3Bh cXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNjYW4pOwogCiAJLyoKIAkgKiBTY2FuIGRvd24g dG8gdGhlIGxlZnRtb3N0IG9yIHJpZ2h0bW9zdCBsZWFmIHBhZ2UuICBUaGlzIGlzIGEgc2ltcGxp ZmllZAogCSAqIHZlcnNpb24gb2YgX2J0X3NlYXJjaCgpLgogCSAqLwotCXNvLT5jdXJyUG9zLmJ1 ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIp KTsKKwlidGZpcnN0YmF0Y2gtPmJ1ZiA9IF9idF9nZXRfZW5kcG9pbnQocmVsLCAwLCBTY2FuRGly ZWN0aW9uSXNCYWNrd2FyZChkaXIpKTsKIAotCWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBv cy5idWYpKQorCWlmICghQnVmZmVySXNWYWxpZChidGZpcnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkv KgogCQkgKiBFbXB0eSBpbmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5vdGhpbmcg ZmluZXIgdG8gbG9jawpAQCAtMjIwMyw3ICsyMTIyLDcgQEAgX2J0X2VuZHBvaW50KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlw YWdlID0gQnVmZmVyR2V0UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQ YWdlKGJ0Zmlyc3RiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7 CiAJQXNzZXJ0KFBfSVNMRUFGKG9wYXF1ZSkpOwogCkBAIC0yMjI5LDkgKzIxNDgsNSBAQCBfYnRf ZW5kcG9pbnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkvKgogCSAq IE5vdyBsb2FkIGRhdGEgZnJvbSB0aGUgZmlyc3QgcGFnZSBvZiB0aGUgc2Nhbi4KIAkgKi8KLQlp ZiAoIV9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIHN0YXJ0LCBkaXIpKQotCQlyZXR1cm4gZmFsc2U7 Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRydWU7CisJcmV0dXJuIF9i dF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIHN0YXJ0LCBkaXIpOwogfQpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jIGIvc3JjL2JhY2tlbmQv YWNjZXNzL25idHJlZS9uYnR1dGlscy5jCmluZGV4IDczMmJjNzUwYy4uNDE1ZTJhMWMwIDEwMDY0 NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHV0aWxzLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCkBAIC0xOSwxMCArMTksNyBAQAogCiAjaW5j bHVkZSAiYWNjZXNzL25idHJlZS5oIgogI2luY2x1ZGUgImFjY2Vzcy9yZWxvcHRpb25zLmgiCi0j aW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJjb21tYW5kcy9wcm9ncmVzcy5o IgotI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKLSNpbmNsdWRlICJsaWIvcXVuaXF1ZS5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgogI2luY2x1ZGUgInN0b3JhZ2UvbHdsb2NrLmgiCiAjaW5jbHVk ZSAidXRpbHMvZGF0dW0uaCIKQEAgLTMwLDcgKzI3LDYgQEAKICNpbmNsdWRlICJ1dGlscy9yZWwu aCIKIAogCi1zdGF0aWMgaW50CV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qg dm9pZCAqdmIpOwogc3RhdGljIGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4 VHVwbGUgbGFzdGxlZnQsCiAJCQkJCQkgICBJbmRleFR1cGxlIGZpcnN0cmlnaHQsIEJUU2Nhbklu c2VydCBpdHVwX2tleSk7CiAKQEAgLTE0NSwyNDcgKzE0MSw2IEBAIF9idF9ta3NjYW5rZXkoUmVs YXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApCiAJcmV0dXJuIGtleTsKIH0KIAotLyoKLSAqIHFz b3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9yIGludCBhcnJheXMKLSAqLwotc3RhdGljIGludAot X2J0X2NvbXBhcmVfaW50KGNvbnN0IHZvaWQgKnZhLCBjb25zdCB2b2lkICp2YikKLXsKLQlpbnQJ CQlhID0gKigoY29uc3QgaW50ICopIHZhKTsKLQlpbnQJCQliID0gKigoY29uc3QgaW50ICopIHZi KTsKLQotCXJldHVybiBwZ19jbXBfczMyKGEsIGIpOwotfQotCi0vKgotICogX2J0X2tpbGxpdGVt cyAtIHNldCBMUF9ERUFEIHN0YXRlIGZvciBpdGVtcyBhbiBpbmRleHNjYW4gY2FsbGVyIGhhcwot ICogdG9sZCB1cyB3ZXJlIGtpbGxlZAotICoKLSAqIHNjYW4tPm9wYXF1ZSwgcmVmZXJlbmNlZCBs b2NhbGx5IHRocm91Z2ggc28sIGNvbnRhaW5zIGluZm9ybWF0aW9uIGFib3V0IHRoZQotICogY3Vy cmVudCBwYWdlIGFuZCBraWxsZWQgdHVwbGVzIHRoZXJlb24gKGdlbmVyYWxseSwgdGhpcyBzaG91 bGQgb25seSBiZQotICogY2FsbGVkIGlmIHNvLT5udW1LaWxsZWQgPiAwKS4KLSAqCi0gKiBDYWxs ZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgc28tPmN1cnJQb3MgcGFnZSwgYnV0IG11 c3QgaG9sZCBhCi0gKiBidWZmZXIgcGluIHdoZW4gIXNvLT5kcm9wUGluLiAgV2hlbiB3ZSByZXR1 cm4sIGl0IHN0aWxsIHdvbid0IGJlIGxvY2tlZC4KLSAqIEl0J2xsIGNvbnRpbnVlIHRvIGhvbGQg d2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcgaGVyZS4KLSAqCi0gKiBXZSBt YXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0 IG9uZXMgdG8gc2V0Ci0gKiBMUF9ERUFELiAgSWYgdGhlIHNjYW4gaXMgb25lIHRoYXQgaG9sZHMg YSBidWZmZXIgcGluIG9uIHRoZSB0YXJnZXQgcGFnZQotICogY29udGludW91c2x5IGZyb20gaW5p dGlhbGx5IHJlYWRpbmcgdGhlIGl0ZW1zIHVudGlsIGFwcGx5aW5nIHRoaXMgZnVuY3Rpb24KLSAq IChpZiBpdCBpcyBhICFzby0+ZHJvcFBpbiBzY2FuKSwgVkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0 ZWQgYW55IGl0ZW1zIG9uIHRoZQotICogcGFnZSwgc28gdGhlIHBhZ2UncyBUSURzIGNhbid0IGhh dmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdzIG5vIHJpc2sKLSAqIHRoYXQgd2UnbGwg Y29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhhcHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQg VElECi0gKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUgd2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQg dXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKLSAqIHBhZ2UpLiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0 IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBpbnMgZWFnZXJseQotICogKHNvLT5kcm9w UGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNvbmRpdGlvbiBzZXR0aW5nIExQX0RFQUQg Yml0cyBvbgotICogdGhlIHBhZ2UgTFNOIGhhdmluZyBub3QgY2hhbmdlZCBzaW5jZSBiYWNrIHdo ZW4gX2J0X3JlYWRwYWdlIHNhdyB0aGUgcGFnZS4KLSAqIFdlIHRvdGFsbHkgZ2l2ZSB1cCBvbiBz ZXR0aW5nIExQX0RFQUQgYml0cyB3aGVuIHRoZSBwYWdlIExTTiBjaGFuZ2VkLgotICoKLSAqIFdl IGdpdmUgdXAgbXVjaCBsZXNzIG9mdGVuIGR1cmluZyAhc28tPmRyb3BQaW4gc2NhbnMsIGJ1dCBp dCBzdGlsbCBoYXBwZW5zLgotICogV2UgY29wZSB3aXRoIGNhc2VzIHdoZXJlIGl0ZW1zIGhhdmUg bW92ZWQgcmlnaHQgZHVlIHRvIGluc2VydGlvbnMuICBJZiBhbgotICogaXRlbSBoYXMgbW92ZWQg b2ZmIHRoZSBjdXJyZW50IHBhZ2UgZHVlIHRvIGEgc3BsaXQsIHdlJ2xsIGZhaWwgdG8gZmluZCBp dAotICogYW5kIGp1c3QgZ2l2ZSB1cCBvbiBpdC4KLSAqLwotdm9pZAotX2J0X2tpbGxpdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4pCi17Ci0JUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxhdGlv bjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JUGFn ZQkJcGFnZTsKLQlCVFBhZ2VPcGFxdWUgb3BhcXVlOwotCU9mZnNldE51bWJlciBtaW5vZmY7Ci0J T2Zmc2V0TnVtYmVyIG1heG9mZjsKLQlpbnQJCQludW1LaWxsZWQgPSBzby0+bnVtS2lsbGVkOwot CWJvb2wJCWtpbGxlZHNvbWV0aGluZyA9IGZhbHNlOwotCUJ1ZmZlcgkJYnVmOwotCi0JQXNzZXJ0 KG51bUtpbGxlZCA+IDApOwotCUFzc2VydChCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7 Ci0JQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRt YXAgaW5kZXggc2NhbiAqLwotCi0JLyogQWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1z W10gYmVmb3JlIGxlYXZpbmcgc28tPmN1cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQot CS8qCi0JICogV2UgbmVlZCB0byBpdGVyYXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4g bGVhZiBwYWdlIG9yZGVyOyB0aGUKLQkgKiBsb29wIGJlbG93IGV4cGVjdHMgdGhpcyAod2hlbiBt YXJraW5nIHBvc3RpbmcgbGlzdCB0dXBsZXMsIGF0IGxlYXN0KS4KLQkgKiBzby0+a2lsbGVkSXRl bXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIgb3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4u Ci0JICogU2Nyb2xsYWJsZSBjdXJzb3Igc2NhbnMgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBz YW1lIGl0ZW0vVElEIHR3aWNlLgotCSAqCi0JICogU29ydCBhbmQgdW5pcXVlLWlmeSBzby0+a2ls bGVkSXRlbXNbXSB0byBkZWFsIHdpdGggYWxsIHRoaXMuCi0JICovCi0JaWYgKG51bUtpbGxlZCA+ IDEpCi0JewotCQlxc29ydChzby0+a2lsbGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCks IF9idF9jb21wYXJlX2ludCk7Ci0JCW51bUtpbGxlZCA9IHF1bmlxdWUoc28tPmtpbGxlZEl0ZW1z LCBudW1LaWxsZWQsIHNpemVvZihpbnQpLAotCQkJCQkJCV9idF9jb21wYXJlX2ludCk7Ci0JfQot Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qCi0JCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGlu IG9uIHRoaXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCi0JCSAqIHNvIGFs bCB3ZSBuZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQK LQkJICogY29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBv biB0aGUgcGFnZS4KLQkJICovCi0JCUFzc2VydChCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBv cykpOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7Ci0JCV9idF9sb2NrYnVmKHJlbCwgYnVmLCBC VF9SRUFEKTsKLQl9Ci0JZWxzZQotCXsKLQkJWExvZ1JlY1B0cglsYXRlc3Rsc247Ci0KLQkJQXNz ZXJ0KCFCVFNjYW5Qb3NJc1Bpbm5lZChzby0+Y3VyclBvcykpOwotCQlidWYgPSBfYnRfZ2V0YnVm KHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIEJUX1JFQUQpOwotCi0JCWxhdGVzdGxzbiA9IEJ1 ZmZlckdldExTTkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxhdGVz dGxzbik7Ci0JCWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQotCQl7Ci0JCQkvKiBN b2RpZmllZCwgZ2l2ZSB1cCBvbiBoaW50aW5nICovCi0JCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsK LQkJCXJldHVybjsKLQkJfQotCi0JCS8qIFVubW9kaWZpZWQsIGhpbnRpbmcgaXMgc2FmZSAqLwot CX0KLQotCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGJ1Zik7Ci0Jb3BhcXVlID0gQlRQYWdlR2V0T3Bh cXVlKHBhZ2UpOwotCW1pbm9mZiA9IFBfRklSU1REQVRBS0VZKG9wYXF1ZSk7Ci0JbWF4b2ZmID0g UGFnZUdldE1heE9mZnNldE51bWJlcihwYWdlKTsKLQotCS8qIEl0ZXJhdGUgdGhyb3VnaCBzby0+ a2lsbGVkSXRlbXNbXSBpbiBsZWFmIHBhZ2Ugb3JkZXIgKi8KLQlmb3IgKGludCBpID0gMDsgaSA8 IG51bUtpbGxlZDsgaSsrKQotCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1z W2ldOwotCQlCVFNjYW5Qb3NJdGVtICpraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5k ZXhdOwotCQlPZmZzZXROdW1iZXIgb2ZmbnVtID0ga2l0ZW0tPmluZGV4T2Zmc2V0OwotCi0JCUFz c2VydChpdGVtSW5kZXggPj0gc28tPmN1cnJQb3MuZmlyc3RJdGVtICYmCi0JCQkgICBpdGVtSW5k ZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCQlBc3NlcnQoaSA9PSAwIHx8Ci0JCQkgICBv ZmZudW0gPj0gc28tPmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhP ZmZzZXQpOwotCi0JCWlmIChvZmZudW0gPCBtaW5vZmYpCi0JCQljb250aW51ZTsJCQkvKiBwdXJl IHBhcmFub2lhICovCi0JCXdoaWxlIChvZmZudW0gPD0gbWF4b2ZmKQotCQl7Ci0JCQlJdGVtSWQJ CWlpZCA9IFBhZ2VHZXRJdGVtSWQocGFnZSwgb2ZmbnVtKTsKLQkJCUluZGV4VHVwbGUJaXR1cGxl ID0gKEluZGV4VHVwbGUpIFBhZ2VHZXRJdGVtKHBhZ2UsIGlpZCk7Ci0JCQlib29sCQlraWxsdHVw bGUgPSBmYWxzZTsKLQotCQkJaWYgKEJUcmVlVHVwbGVJc1Bvc3RpbmcoaXR1cGxlKSkKLQkJCXsK LQkJCQlpbnQJCQlwaSA9IGkgKyAxOwotCQkJCWludAkJCW5wb3N0aW5nID0gQlRyZWVUdXBsZUdl dE5Qb3N0aW5nKGl0dXBsZSk7Ci0JCQkJaW50CQkJajsKLQotCQkJCS8qCi0JCQkJICogTm90ZSB0 aGF0IHRoZSBwYWdlIG1heSBoYXZlIGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJ CQkgKiBzaW5jZSB3ZSBmaXJzdCByZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBz byBpdCdzCi0JCQkJICogcG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNu J3QgYSBwb3N0aW5nIGxpc3QKLQkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVk IGl0cyBoZWFwIFRJRHMuCi0JCQkJICovCi0JCQkJZm9yIChqID0gMDsgaiA8IG5wb3N0aW5nOyBq KyspCi0JCQkJewotCQkJCQlJdGVtUG9pbnRlciBpdGVtID0gQlRyZWVUdXBsZUdldFBvc3RpbmdO KGl0dXBsZSwgaik7Ci0KLQkJCQkJaWYgKCFJdGVtUG9pbnRlckVxdWFscyhpdGVtLCAma2l0ZW0t PmhlYXBUaWQpKQotCQkJCQkJYnJlYWs7CS8qIG91dCBvZiBwb3N0aW5nIGxpc3QgbG9vcCAqLwot Ci0JCQkJCS8qCi0JCQkJCSAqIGtpdGVtIG11c3QgaGF2ZSBtYXRjaGluZyBvZmZudW0gd2hlbiBo ZWFwIFRJRHMgbWF0Y2gsCi0JCQkJCSAqIHRob3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3 aGVyZSB0aGUgcGFnZSBjYW4ndAotCQkJCQkgKiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlm aWVkCi0JCQkJCSAqLwotCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8 fCAhc28tPmRyb3BQaW4pOwotCi0JCQkJCS8qCi0JCQkJCSAqIFJlYWQtYWhlYWQgdG8gbGF0ZXIg a2l0ZW1zIGhlcmUuCi0JCQkJCSAqCi0JCQkJCSAqIFdlIHJlbHkgb24gdGhlIGFzc3VtcHRpb24g dGhhdCBub3QgYWR2YW5jaW5nIGtpdGVtIGhlcmUKLQkJCQkJICogd2lsbCBwcmV2ZW50IHVzIGZy b20gY29uc2lkZXJpbmcgdGhlIHBvc3RpbmcgbGlzdCB0dXBsZQotCQkJCQkgKiBmdWxseSBkZWFk IGJ5IG5vdCBtYXRjaGluZyBpdHMgbmV4dCBoZWFwIFRJRCBpbiBuZXh0Ci0JCQkJCSAqIGxvb3Ag aXRlcmF0aW9uLgotCQkJCQkgKgotCQkJCQkgKiBJZiwgb24gdGhlIG90aGVyIGhhbmQsIHRoaXMg aXMgdGhlIGZpbmFsIGhlYXAgVElEIGluCi0JCQkJCSAqIHRoZSBwb3N0aW5nIGxpc3QgdHVwbGUs IHRoZW4gdHVwbGUgZ2V0cyBraWxsZWQKLQkJCQkJICogcmVnYXJkbGVzcyAoaS5lLiB3ZSBoYW5k bGUgdGhlIGNhc2Ugd2hlcmUgdGhlIGxhc3QKLQkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFz dCBoZWFwIFRJRCBpbiB0aGUgbGFzdCBpbmRleCB0dXBsZQotCQkJCQkgKiBjb3JyZWN0bHkgLS0g cG9zdGluZyB0dXBsZSBzdGlsbCBnZXRzIGtpbGxlZCkuCi0JCQkJCSAqLwotCQkJCQlpZiAocGkg PCBudW1LaWxsZWQpCi0JCQkJCQlraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVk SXRlbXNbcGkrK11dOwotCQkJCX0KLQotCQkJCS8qCi0JCQkJICogRG9uJ3QgYm90aGVyIGFkdmFu Y2luZyB0aGUgb3V0ZXJtb3N0IGxvb3AncyBpbnQgaXRlcmF0b3IgdG8KLQkJCQkgKiBhdm9pZCBw cm9jZXNzaW5nIGtpbGxlZCBpdGVtcyB0aGF0IHJlbGF0ZSB0byB0aGUgc2FtZQotCQkJCSAqIG9m Zm51bS9wb3N0aW5nIGxpc3QgdHVwbGUuICBUaGlzIG1pY3JvLW9wdGltaXphdGlvbiBoYXJkbHkK LQkJCQkgKiBzZWVtcyB3b3J0aCBpdC4gIChGdXJ0aGVyIGl0ZXJhdGlvbnMgb2YgdGhlIG91dGVy bW9zdCBsb29wCi0JCQkJICogd2lsbCBmYWlsIHRvIG1hdGNoIG9uIHRoaXMgc2FtZSBwb3N0aW5n IGxpc3QncyBmaXJzdCBoZWFwCi0JCQkJICogVElEIGluc3RlYWQsIHNvIHdlJ2xsIGFkdmFuY2Ug dG8gdGhlIG5leHQgb2ZmbnVtL2luZGV4Ci0JCQkJICogdHVwbGUgcHJldHR5IHF1aWNrbHkuKQot CQkJCSAqLwotCQkJCWlmIChqID09IG5wb3N0aW5nKQotCQkJCQlraWxsdHVwbGUgPSB0cnVlOwot CQkJfQotCQkJZWxzZSBpZiAoSXRlbVBvaW50ZXJFcXVhbHMoJml0dXBsZS0+dF90aWQsICZraXRl bS0+aGVhcFRpZCkpCi0JCQkJa2lsbHR1cGxlID0gdHJ1ZTsKLQotCQkJLyoKLQkJCSAqIE1hcmsg aW5kZXggaXRlbSBhcyBkZWFkLCBpZiBpdCBpc24ndCBhbHJlYWR5LiAgU2luY2UgdGhpcwotCQkJ ICogaGFwcGVucyB3aGlsZSBob2xkaW5nIGEgYnVmZmVyIGxvY2sgcG9zc2libHkgaW4gc2hhcmVk IG1vZGUsCi0JCQkgKiBpdCdzIHBvc3NpYmxlIHRoYXQgbXVsdGlwbGUgcHJvY2Vzc2VzIGF0dGVt cHQgdG8gZG8gdGhpcwotCQkJICogc2ltdWx0YW5lb3VzbHksIGxlYWRpbmcgdG8gbXVsdGlwbGUg ZnVsbC1wYWdlIGltYWdlcyBiZWluZyBzZW50Ci0JCQkgKiB0byBXQUwgKGlmIHdhbF9sb2dfaGlu dHMgb3IgZGF0YSBjaGVja3N1bXMgYXJlIGVuYWJsZWQpLCB3aGljaAotCQkJICogaXMgdW5kZXNp cmFibGUuCi0JCQkgKi8KLQkJCWlmIChraWxsdHVwbGUgJiYgIUl0ZW1JZElzRGVhZChpaWQpKQot CQkJewotCQkJCWlmICgha2lsbGVkc29tZXRoaW5nKQotCQkJCXsKLQkJCQkJLyoKLQkJCQkJICog VXNlIHRoZSBoaW50IGJpdCBpbmZyYXN0cnVjdHVyZSB0byBjaGVjayBpZiB3ZSBjYW4KLQkJCQkJ ICogdXBkYXRlIHRoZSBwYWdlIHdoaWxlIGp1c3QgaG9sZGluZyBhIHNoYXJlIGxvY2suIElmIHdl Ci0JCQkJCSAqIGFyZSBub3QgYWxsb3dlZCwgdGhlcmUncyBubyBwb2ludCBjb250aW51aW5nLgot CQkJCQkgKi8KLQkJCQkJaWYgKCFCdWZmZXJCZWdpblNldEhpbnRCaXRzKGJ1ZikpCi0JCQkJCQln b3RvIHVubG9ja19wYWdlOwotCQkJCX0KLQotCQkJCS8qIGZvdW5kIHRoZSBpdGVtL2FsbCBwb3N0 aW5nIGxpc3QgaXRlbXMgKi8KLQkJCQlJdGVtSWRNYXJrRGVhZChpaWQpOwotCQkJCWtpbGxlZHNv bWV0aGluZyA9IHRydWU7Ci0JCQkJYnJlYWs7CQkJLyogb3V0IG9mIGlubmVyIHNlYXJjaCBsb29w ICovCi0JCQl9Ci0JCQlvZmZudW0gPSBPZmZzZXROdW1iZXJOZXh0KG9mZm51bSk7Ci0JCX0KLQl9 Ci0KLQkvKgotCSAqIFNpbmNlIHRoaXMgY2FuIGJlIHJlZG9uZSBsYXRlciBpZiBuZWVkZWQsIG1h cmsgYXMgZGlydHkgaGludC4KLQkgKgotCSAqIFdoZW5ldmVyIHdlIG1hcmsgYW55dGhpbmcgTFBf REVBRCwgd2UgYWxzbyBzZXQgdGhlIHBhZ2UncwotCSAqIEJUUF9IQVNfR0FSQkFHRSBmbGFnLCB3 aGljaCBpcyBsaWtld2lzZSBqdXN0IGEgaGludC4gIChOb3RlIHRoYXQgd2UKLQkgKiBvbmx5IHJl bHkgb24gdGhlIHBhZ2UtbGV2ZWwgZmxhZyBpbiAhaGVhcGtleXNwYWNlIGluZGV4ZXMuKQotCSAq LwotCWlmIChraWxsZWRzb21ldGhpbmcpCi0JewotCQlvcGFxdWUtPmJ0cG9fZmxhZ3MgfD0gQlRQ X0hBU19HQVJCQUdFOwotCQlCdWZmZXJGaW5pc2hTZXRIaW50Qml0cyhidWYsIHRydWUsIHRydWUp OwotCX0KLQotdW5sb2NrX3BhZ2U6Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQkJX2J0X3VubG9ja2J1 ZihyZWwsIGJ1Zik7Ci0JZWxzZQotCQlfYnRfcmVsYnVmKHJlbCwgYnVmKTsKLX0KLQotCiAvKgog ICogVGhlIGZvbGxvd2luZyByb3V0aW5lcyBtYW5hZ2UgYSBzaGFyZWQtbWVtb3J5IGFyZWEgaW4g d2hpY2ggd2UgdHJhY2sKICAqIGFzc2lnbm1lbnQgb2YgInZhY3V1bSBjeWNsZSBJRHMiIHRvIGN1 cnJlbnRseS1hY3RpdmUgYnRyZWUgdmFjdXVtaW5nCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHhsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0eGxv Zy5jCmluZGV4IGRmZjdkMjg2Zi4uM2JjNWU1Y2NkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvbmJ0cmVlL25idHhsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25i dHhsb2cuYwpAQCAtMTA5NSwxNSArMTA5NSwxNSBAQCBidHJlZV9tYXNrKGNoYXIgKnBhZ2VkYXRh LCBCbG9ja051bWJlciBibGtubykKIAkJLyoKIAkJICogSW4gYnRyZWUgbGVhZiBwYWdlcywgaXQg aXMgcG9zc2libGUgdG8gbW9kaWZ5IHRoZSBMUF9GTEFHUyB3aXRob3V0CiAJCSAqIGVtaXR0aW5n IGFueSBXQUwgcmVjb3JkLiBIZW5jZSwgbWFzayB0aGUgbGluZSBwb2ludGVyIGZsYWdzLiBTZWUK LQkJICogX2J0X2tpbGxpdGVtcygpLCBfYnRfY2hlY2tfdW5pcXVlKCkgZm9yIGRldGFpbHMuCisJ CSAqIGJ0a2lsbGl0ZW1zYmF0Y2goKSwgX2J0X2NoZWNrX3VuaXF1ZSgpIGZvciBkZXRhaWxzLgog CQkgKi8KIAkJbWFza19scF9mbGFncyhwYWdlKTsKIAl9CiAKIAkvKgogCSAqIEJUUF9IQVNfR0FS QkFHRSBpcyBqdXN0IGFuIHVuLWxvZ2dlZCBoaW50IGJpdC4gU28sIG1hc2sgaXQuIFNlZQotCSAq IF9idF9kZWxldGVfb3JfZGVkdXBfb25lX3BhZ2UoKSwgX2J0X2tpbGxpdGVtcygpLCBhbmQgX2J0 X2NoZWNrX3VuaXF1ZSgpCi0JICogZm9yIGRldGFpbHMuCisJICogX2J0X2RlbGV0ZV9vcl9kZWR1 cF9vbmVfcGFnZSgpLCBidGtpbGxpdGVtc2JhdGNoKCksIGFuZAorCSAqIF9idF9jaGVja191bmlx dWUoKSBmb3IgZGV0YWlscy4KIAkgKi8KIAltYXNrb3BhcS0+YnRwb19mbGFncyAmPSB+QlRQX0hB U19HQVJCQUdFOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKaW5kZXggYTQ2OTRi ZDgwLi5lNjMzZGJjYWYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9zcGdpc3Qvc3Bn dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0aWxzLmMKQEAgLTg4 LDEwICs4OCwxMiBAQCBzcGdoYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IHNwZ2JlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gc3BncmVzY2FuLAogCQkuYW1nZXR0dXBs ZSA9IHNwZ2dldHR1cGxlLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2Jh dGNoID0gTlVMTCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g c3BnZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gc3BnZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9 IE5VTEwsCi0JCS5hbXJlc3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQku YW1lc3RpbWF0ZXBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBO VUxMLAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5j CmluZGV4IGRkNTkzY2NiYy4uZGE5ZjY4N2M3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21t YW5kcy9pbmRleGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpA QCAtODg1LDcgKzg4NSw3IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQko ZXJyY29kZShFUlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNj ZXNzIG1ldGhvZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwK IAkJCQkJCWFjY2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUt PmFtZ2V0dHVwbGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0 dXBsZSA9PSBOVUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0 KEVSUk9SLAogCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJ CQkgZXJybXNnKCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lv biBjb25zdHJhaW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1p LmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggMzdmZTAzZmRjLi45Nzlh ODUyZmUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9z cmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOSw3ICs0MjksNyBAQCBFeGVjU3Vw cG9ydHNNYXJrUmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46 CiAKIAkJCS8qCi0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3Jl LgorCQkJICogTm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJ CSAqLwogCQkJcmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8t PmFtY2FubWFya3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1l cmdlam9pbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCmluZGV4IGY4 NDIxYTc0Yy4uY2I0YmVmNzZhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl TWVyZ2Vqb2luLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1lcmdlam9pbi5jCkBA IC01NCw4ICs1NCw4IEBACiAgKgkJdGhlIGlubmVyICI1J3MiLiBUaGlzIHJlcXVpcmVzIHJlcG9z aXRpb25pbmcgdGhlIGlubmVyICJjdXJzb3IiCiAgKgkJdG8gcG9pbnQgYXQgdGhlIGZpcnN0IGlu bmVyICI1Ii4gVGhpcyBpcyBkb25lIGJ5ICJtYXJraW5nIiB0aGUKICAqCQlmaXJzdCBpbm5lciA1 IHNvIHdlIGNhbiByZXN0b3JlIHRoZSAiY3Vyc29yIiB0byBpdCBiZWZvcmUgam9pbmluZwotICoJ CXdpdGggdGhlIHNlY29uZCBvdXRlciA1LiBUaGUgYWNjZXNzIG1ldGhvZCBpbnRlcmZhY2UgcHJv dmlkZXMKLSAqCQlyb3V0aW5lcyB0byBtYXJrIGFuZCByZXN0b3JlIHRvIGEgdHVwbGUuCisgKgkJ d2l0aCB0aGUgc2Vjb25kIG91dGVyIDUuIFRoZSBpbmRleGJhdGNoLmMgaW50ZXJmYWNlIHByb3Zp ZGVzCisgKgkJcm91dGluZXMgdG8gbWFyayBhbmQgcmVzdG9yZSB0byBhIHR1cGxlIGR1cmluZyBp bmRleCBzY2Fucy4KICAqCiAgKgogICoJCUVzc2VudGlhbCBvcGVyYXRpb24gb2YgdGhlIG1lcmdl IGpvaW4gYWxnb3JpdGhtIGlzIGFzIGZvbGxvd3M6CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvcGF0aC9pbmR4cGF0aC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvaW5k eHBhdGguYwppbmRleCA2N2Q5ZGMzNWYuLmVkYzdlNDczNiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvaW5keHBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9pbmR4cGF0aC5jCkBAIC00Myw3ICs0Myw3IEBACiAvKiBXaGV0aGVyIHdlIGFyZSBsb29r aW5nIGZvciBwbGFpbiBpbmRleHNjYW4sIGJpdG1hcCBzY2FuLCBvciBlaXRoZXIgKi8KIHR5cGVk ZWYgZW51bQogewotCVNUX0lOREVYU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0dHVwbGUg Ki8KKwlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxlIG9yIGFtZ2V0 YmF0Y2ggKi8KIAlTVF9CSVRNQVBTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXRiaXRtYXAg Ki8KIAlTVF9BTllTQ0FOLAkJCQkJLyogZWl0aGVyIGlzIG9rYXkgKi8KIH0gU2NhblR5cGVDb250 cm9sOwpAQCAtNzQ3LDcgKzc0Nyw3IEBAIGdldF9pbmRleF9wYXRocyhQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcmVsLAogCXsKIAkJSW5kZXhQYXRoICAqaXBhdGggPSAoSW5kZXhQYXRo ICopIGxmaXJzdChsYyk7CiAKLQkJaWYgKGluZGV4LT5hbWhhc2dldHR1cGxlKQorCQlpZiAoaW5k ZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJYWRkX3BhdGgocmVsLCAoUGF0aCAqKSBpcGF0aCk7CiAK IAkJaWYgKGluZGV4LT5hbWhhc2dldGJpdG1hcCAmJgpAQCAtODM1LDcgKzgzNSw3IEBAIGJ1aWxk X2luZGV4X3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJc3dpdGNo IChzY2FudHlwZSkKIAl7CiAJCWNhc2UgU1RfSU5ERVhTQ0FOOgotCQkJaWYgKCFpbmRleC0+YW1o YXNnZXR0dXBsZSkKKwkJCWlmICghaW5kZXgtPmFtY2FucGxhaW5zY2FuKQogCQkJCXJldHVybiBO SUw7CiAJCQlicmVhazsKIAkJY2FzZSBTVF9CSVRNQVBTQ0FOOgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvcGxhbmNhdC5jCmluZGV4IGIyZmJkNmEwOC4uNDlhNmFjYzNlIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jCkBAIC0zMTAsMTEgKzMxMCwxMSBAQCBnZXRfcmVsYXRpb25faW5m byhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFyZW50 LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBhbXJvdXRpbmUtPmFtc2VhcmNoYXJyYXk7CiAJ CQkJaW5mby0+YW1zZWFyY2hudWxscyA9IGFtcm91dGluZS0+YW1zZWFyY2hudWxsczsKIAkJCQlp bmZvLT5hbWNhbnBhcmFsbGVsID0gYW1yb3V0aW5lLT5hbWNhbnBhcmFsbGVsOwotCQkJCWluZm8t PmFtaGFzZ2V0dHVwbGUgPSAoYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOworCQkJCWlu Zm8tPmFtY2FucGxhaW5zY2FuID0gKGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMIHx8CisJ CQkJCQkJCQkJYW1yb3V0aW5lLT5hbWdldHR1cGxlICE9IE5VTEwpOwogCQkJCWluZm8tPmFtaGFz Z2V0Yml0bWFwID0gYW1yb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMICYmCiAJCQkJCXJlbGF0 aW9uLT5yZF90YWJsZWFtLT5zY2FuX2JpdG1hcF9uZXh0X3R1cGxlICE9IE5VTEw7Ci0JCQkJaW5m by0+YW1jYW5tYXJrcG9zID0gKGFtcm91dGluZS0+YW1tYXJrcG9zICE9IE5VTEwgJiYKLQkJCQkJ CQkJCSAgYW1yb3V0aW5lLT5hbXJlc3RycG9zICE9IE5VTEwpOworCQkJCWluZm8tPmFtY2FubWFy a3BvcyA9IGFtcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMOwogCQkJCWluZm8tPmFtY29zdGVz dGltYXRlID0gYW1yb3V0aW5lLT5hbWNvc3Rlc3RpbWF0ZTsKIAkJCQlBc3NlcnQoaW5mby0+YW1j b3N0ZXN0aW1hdGUgIT0gTlVMTCk7CiAKQEAgLTQxMSw3ICs0MTEsNyBAQCBnZXRfcmVsYXRpb25f aW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsIGJvb2wgaW5ocGFy ZW50LAogCQkJCWluZm8tPmFtc2VhcmNoYXJyYXkgPSBmYWxzZTsKIAkJCQlpbmZvLT5hbXNlYXJj aG51bGxzID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGZhbHNlOwotCQkJCWlu Zm8tPmFtaGFzZ2V0dHVwbGUgPSBmYWxzZTsKKwkJCQlpbmZvLT5hbWNhbnBsYWluc2NhbiA9IGZh bHNlOwogCQkJCWluZm8tPmFtaGFzZ2V0Yml0bWFwID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jYW5t YXJrcG9zID0gZmFsc2U7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBOVUxMOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDBiMWQ4MGI1Yi4uMGQw YmQ0NjhmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBA IC04MzYsNiArODM2LDcgQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVs YXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogewogCUF0dHJOdW1iZXIJa2V5Y29sOwog CW9pZHZlY3RvciAgKmluZGNsYXNzOworCWNvbnN0IEluZGV4QW1Sb3V0aW5lICphbXJvdXRpbmU7 CiAKIAkvKiBUaGUgaW5kZXggbXVzdCBub3QgYmUgYSBwYXJ0aWFsIGluZGV4ICovCiAJaWYgKCFo ZWFwX2F0dGlzbnVsbChpZHhyZWwtPnJkX2luZGV4dHVwbGUsIEFudW1fcGdfaW5kZXhfaW5kcHJl ZCwgTlVMTCkpCkBAIC04ODcsMTAgKzg4OCwxMiBAQCBJc0luZGV4VXNhYmxlRm9yUmVwbGljYUlk ZW50aXR5RnVsbChSZWxhdGlvbiBpZHhyZWwsIEF0dHJNYXAgKmF0dHJtYXApCiAJCXJldHVybiBm YWxzZTsKIAogCS8qCi0JICogVGhlIGdpdmVuIGluZGV4IGFjY2VzcyBtZXRob2QgbXVzdCBpbXBs ZW1lbnQgImFtZ2V0dHVwbGUiLCB3aGljaCB3aWxsCi0JICogYmUgdXNlZCBsYXRlciB0byBmZXRj aCB0aGUgdHVwbGVzLiAgU2VlIFJlbGF0aW9uRmluZFJlcGxUdXBsZUJ5SW5kZXgoKS4KKwkgKiBU aGUgZ2l2ZW4gaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IGltcGxlbWVudCAiYW1nZXR0dXBsZSIg b3IKKwkgKiAiYW1nZXRiYXRjaCIsIHdoaWNoIHdpbGwgYmUgdXNlZCBsYXRlciB0byBmZXRjaCB0 aGUgdHVwbGVzLiAgU2VlCisJICogUmVsYXRpb25GaW5kUmVwbFR1cGxlQnlJbmRleCgpLgogCSAq LwotCWlmIChHZXRJbmRleEFtUm91dGluZUJ5QW1JZChpZHhyZWwtPnJkX3JlbC0+cmVsYW0sIGZh bHNlKS0+YW1nZXR0dXBsZSA9PSBOVUxMKQorCWFtcm91dGluZSA9IEdldEluZGV4QW1Sb3V0aW5l QnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpOworCWlmIChhbXJvdXRpbmUtPmFt Z2V0dHVwbGUgPT0gTlVMTCAmJiBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0 dXJuIGZhbHNlOwogCiAJcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGls cy9hZHQvYW11dGlscy5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBj ODFmYjYxYTAuLmRkZmQxYjU1YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2Ft dXRpbHMuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAg KzM2MywxMSBAQCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJP UF9JTkRFWF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0 cnVlIDogZmFsc2UpOworCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0g TlVMTCB8fAorCQkJCQkJCSAgIHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNh c2UgQU1QUk9QX0JJVE1BUF9TQ0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0 Yml0bWFwID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdl dGJpdG1hcCAhPSBOVUxMKTsKIAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQ R19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBA QCBpbmRleGFtX3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJO X0JPT0wocm91dGluZS0+YW1jYW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xV REU6Ci0JCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNl KTsKKwkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJ CQkJICAgcm91dGluZS0+YW1nZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5f SU5DTFVERToKIAkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYg LS1naXQgYS9jb250cmliL2FtY2hlY2svdmVyaWZ5X25idHJlZS5jIGIvY29udHJpYi9hbWNoZWNr L3ZlcmlmeV9uYnRyZWUuYwppbmRleCBiNzRhYjVmN2EuLjA2NTUzNjA5YiAxMDA2NDQKLS0tIGEv Y29udHJpYi9hbWNoZWNrL3ZlcmlmeV9uYnRyZWUuYworKysgYi9jb250cmliL2FtY2hlY2svdmVy aWZ5X25idHJlZS5jCkBAIC0zOTMsNyArMzkzLDcgQEAgYnRfY2hlY2tfZXZlcnlfbGV2ZWwoUmVs YXRpb24gcmVsLCBSZWxhdGlvbiBoZWFwcmVsLCBib29sIGhlYXBrZXlzcGFjZSwKIAkJCSBSZWxh dGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKIAogCS8qCi0JICogVGhpcyBhc3NlcnRpb24gbWF0 Y2hlcyB0aGUgb25lIGluIGluZGV4X2dldG5leHRfdGlkKCkuICBTZWUgcGFnZQorCSAqIFRoaXMg YXNzZXJ0aW9uIG1hdGNoZXMgdGhlIG9uZSBpbiBoZWFwYW1fYmF0Y2hfZ2V0bmV4dCgpLiAgU2Vl IHBhZ2UKIAkgKiByZWN5Y2xpbmcvInZpc2libGUgdG8gZXZlcnlvbmUiIG5vdGVzIGluIG5idHJl ZSBSRUFETUUuCiAJICovCiAJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1ZhbGlkKFJlY2VudFhtaW4p KTsKZGlmZiAtLWdpdCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9i bHV0aWxzLmMKaW5kZXggNTExMWNkYzZkLi40NzZiNjRlOGIgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIv Ymxvb20vYmx1dGlscy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAg KzE0NiwxMiBAQCBibGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0g YmxiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5V TEwsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFta2lsbGl0ZW1zYmF0Y2ggPSBOVUxMLAor CQkuYW11bmd1YXJkYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAgPSBibGdldGJpdG1hcCwK IAkJLmFtZW5kc2NhbiA9IGJsZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJl c3RycG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFs bGVsc2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJh bGxlbHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvaW5kZXhhbS5zZ21s IGIvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAppbmRleCBmNDhkYTMxODUuLjBmNmMzNzNiMSAx MDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwv aW5kZXhhbS5zZ21sCkBAIC0xNjcsMTAgKzE2NywxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleEFt Um91dGluZQogICAgIGFtYmVnaW5zY2FuX2Z1bmN0aW9uIGFtYmVnaW5zY2FuOwogICAgIGFtcmVz Y2FuX2Z1bmN0aW9uIGFtcmVzY2FuOwogICAgIGFtZ2V0dHVwbGVfZnVuY3Rpb24gYW1nZXR0dXBs ZTsgICAgIC8qIGNhbiBiZSBOVUxMICovCisgICAgYW1nZXRiYXRjaF9mdW5jdGlvbiBhbWdldGJh dGNoOyAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFta2lsbGl0ZW1zYmF0Y2hfZnVuY3Rpb24gYW1r aWxsaXRlbXNiYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbXVuZ3VhcmRiYXRjaF9mdW5j dGlvbiBhbXVuZ3VhcmRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9m dW5jdGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9m dW5jdGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAg ICAgLyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7 ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNl dDsgLyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3Vw cG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5f ZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAg LTY3Niw4ICs2NzgsMzggQEAgYW1iZWdpbnNjYW4gKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAg ICA8ZW1waGFzaXM+bXVzdDwvZW1waGFzaXM+IGNyZWF0ZSB0aGlzIHN0cnVjdCBieSBjYWxsaW5n CiAgICA8ZnVuY3Rpb24+UmVsYXRpb25HZXRJbmRleFNjYW4oKTwvZnVuY3Rpb24+LiAgSW4gbW9z dCBjYXNlcwogICAgPGZ1bmN0aW9uPmFtYmVnaW5zY2FuPC9mdW5jdGlvbj4gZG9lcyBsaXR0bGUg YmV5b25kIG1ha2luZyB0aGF0IGNhbGwgYW5kIHBlcmhhcHMKLSAgIGFjcXVpcmluZyBsb2NrczsK KyAgIGFjcXVpcmluZyBsb2NrcyBhbmQgaW5pdGlhbGl6aW5nIHN0YW5kYXJkIDxzdHJ1Y3RuYW1l PkluZGV4U2NhbkRlc2M8L3N0cnVjdG5hbWU+IGZpZWxkczsKICAgIHRoZSBpbnRlcmVzdGluZyBw YXJ0cyBvZiBpbmRleC1zY2FuIHN0YXJ0dXAgYXJlIGluIDxmdW5jdGlvbj5hbXJlc2NhbjwvZnVu Y3Rpb24+LgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICBtdXN0IGFsc28gc2V0IHRoZSBmb2xs b3dpbmcgZmllbGRzIGluIHRoZSBzY2FuIGRlc2NyaXB0b3I6CisgICA8aXRlbWl6ZWRsaXN0Pgor ICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8bGl0ZXJhbD5zY2FuLSZndDttYXhp dGVtc2JhdGNoPC9saXRlcmFsPjogdGhlIG1heGltdW0gbnVtYmVyIG9mIGl0ZW1zCisgICAgICB0 aGF0IGNhbiBhcHBlYXIgaW4gYSBzaW5nbGUgYmF0Y2ggKHR5cGljYWxseSBkZXJpdmVkIGZyb20g dGhlIGluZGV4IHBhZ2UKKyAgICAgIHNpemUsIGUuZy4sIDxsaXRlcmFsPk1heEluZGV4VHVwbGVz UGVyUGFnZTwvbGl0ZXJhbD4pLgorICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgICA8 bGlzdGl0ZW0+CisgICAgIDxwYXJhPgorICAgICAgPGxpdGVyYWw+c2Nhbi0mZ3Q7YmF0Y2hfaW5k ZXhfb3BhcXVlX3NpemU8L2xpdGVyYWw+OiB0aGUKKyAgICAgIDxmdW5jdGlvbj5NQVhBTElHTjwv ZnVuY3Rpb24+J2Qgc2l6ZSBvZiB0aGUgaW5kZXggQU0ncyBwZXItYmF0Y2ggb3BhcXVlCisgICAg ICBhcmVhLiAgRWFjaCBiYXRjaCBhbGxvY2F0aW9uIHJlc2VydmVzIHRoaXMgbXVjaCBzcGFjZSBp bW1lZGlhdGVseSBiZWZvcmUKKyAgICAgIHRoZSA8c3RydWN0bmFtZT5JbmRleFNjYW5CYXRjaERh dGE8L3N0cnVjdG5hbWU+IHBvaW50ZXIsIGZvciB1c2UgYnkgdGhlCisgICAgICBpbmRleCBBTSB0 byBzdG9yZSBwZXItcGFnZSBuYXZpZ2F0aW9uIHN0YXRlIChlLmcuLCBiYXRjaCBpbmRleCBwYWdl J3MKKyAgICAgIGJ1ZmZlciBwaW4gYW5kIHNpYmxpbmcgcGFnZSBsaW5rcykuCisgICAgIDwvcGFy YT4KKyAgICA8L2xpc3RpdGVtPgorICAgIDxsaXN0aXRlbT4KKyAgICAgPHBhcmE+CisgICAgICA8 bGl0ZXJhbD5zY2FuLSZndDtiYXRjaF90dXBsZXNfd29ya3NwYWNlPC9saXRlcmFsPjogdGhlIHNp emUgaW4gYnl0ZXMKKyAgICAgIG9mIHRoZSBwZXItYmF0Y2ggdHVwbGUgc3RvcmFnZSB3b3Jrc3Bh Y2UgdXNlZCBmb3IgaW5kZXgtb25seSBzY2FucworICAgICAgKHR5cGljYWxseSA8bGl0ZXJhbD5C TENLU1o8L2xpdGVyYWw+KSwgb3IgMCBpZiB0aGUgaW5kZXggQU0gZG9lcyBub3QKKyAgICAgIHN1 cHBvcnQgaW5kZXgtb25seSBzY2Fucy4gIFRoZSB3b3Jrc3BhY2UgaXMgYWNjZXNzaWJsZSB2aWEK KyAgICAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0mZ3Q7Y3VyclR1cGxlczwvc3RydWN0ZmllbGQ+Lgor ICAgICA8L3BhcmE+CisgICAgPC9saXN0aXRlbT4KKyAgIDwvaXRlbWl6ZWRsaXN0PgogICA8L3Bh cmE+CiAKICAgPHBhcmE+CkBAIC03NDksNiArNzgxLDIzMyBAQCBhbWdldHR1cGxlIChJbmRleFNj YW5EZXNjIHNjYW4sCiAgICA8c3RydWN0ZmllbGQ+YW1nZXR0dXBsZTwvc3RydWN0ZmllbGQ+IGZp ZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KICAgIHN0 cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgogICA8L3BhcmE+CisgIDxub3RlPgorICAgPHBhcmE+ CisgICAgQXMgb2YgPHByb2R1Y3RuYW1lPlBvc3RncmVTUUw8L3Byb2R1Y3RuYW1lPiB2ZXJzaW9u IDE5LCBwb3NpdGlvbiBtYXJraW5nCisgICAgYW5kIHJlc3RvcmF0aW9uIG9mIHNjYW5zIGlzIG5v IGxvbmdlciBzdXBwb3J0ZWQgZm9yIHRoZQorICAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5j dGlvbj4gaW50ZXJmYWNlOyBvbmx5IHRoZQorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlIHN1cHBvcnRzIHRoaXMgZmVhdHVyZS4KKyAgIDwvcGFyYT4KKyAgPC9u b3RlPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgorSW5kZXhTY2FuQmF0Y2gKK2FtZ2V0 YmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgIEluZGV4U2NhbkJhdGNoIHBy aW9yYmF0Y2gsCisgICAgICAgICAgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dy YW1saXN0aW5nPgorICAgUmV0dXJuIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0 aGUgZ2l2ZW4gc2NhbiwgbW92aW5nIGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJk IG9yIGJhY2t3YXJkIGluIHRoZSBpbmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8 dHlwZT5JbmRleFNjYW5CYXRjaDwvdHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgor ICAgPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVw bGVzIGluIHRoZSBnaXZlbgorICAgc2NhbiBkaXJlY3Rpb24uCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSBpcyBh biBhbHRlcm5hdGl2ZSB0bworICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiB0aGF0 IHJldHVybnMgbWF0Y2hpbmcgaW5kZXggZW50cmllcyBpbiBiYXRjaGVzCisgICByYXRoZXIgdGhh biBvbmUgYXQgYSB0aW1lLiAgQnkgcmV0dXJuaW5nIGFsbCBtYXRjaGluZyBpbmRleCBlbnRyaWVz IGZyb20gYQorICAgc2luZ2xlIGluZGV4IHBhZ2UgdG9nZXRoZXIsIHRoZSB0YWJsZSBBTSBnYWlu cyB2aXNpYmlsaXR5IGludG8gd2hpY2ggdGFibGUKKyAgIGJsb2NrcyB3aWxsIGJlIG5lZWRlZCBp biB0aGUgbmVhciBmdXR1cmUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSB0YWJsZSBB TSBwYXNzZXMgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gaW5kaWNhdGUgd2hlcmUg dGhlCisgICBpbmRleCBBTSBzaG91bGQgY29udGludWUgc2Nhbm5pbmcgZnJvbSAob3IgPGxpdGVy YWw+TlVMTDwvbGl0ZXJhbD4gb24gdGhlCisgICBmaXJzdCBjYWxsIGZvciB0aGUgc2NhbikuICBU aGUgaW5kZXggQU0gdXNlcyBpbmZvcm1hdGlvbiBmcm9tCisgICA8bGl0ZXJhbD5wcmlvcmJhdGNo PC9saXRlcmFsPiB0byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkIG5leHQuCisg ICBVbmxpa2UgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiwgd2hlcmUgdGhlIGluZGV4 IEFNIG1haW50YWlucyBpdHMKKyAgIG93biBzY2FuIHBvc2l0aW9uLCB3aXRoIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gaXQgaXMgdGhlIGNhbGxlcgorICAgdGhhdCBjb250cm9scyB0 aGUgcHJvZ3Jlc3Mgb2YgdGhlIHNjYW4gdGhyb3VnaCB0aGUgaW5kZXguICBUaGUgY2FsbGVyCisg ICB3aWxsIHR5cGljYWxseSBwYXNzIHRoZSBtb3N0IHJlY2VudGx5IHJldHVybmVkIGJhdGNoLCBi dXQgdGhpcyBpcyBub3QKKyAgIGd1YXJhbnRlZWQgJm1kYXNoOyBmb3IgZXhhbXBsZSwgZHVyaW5n IG1hcmsvcmVzdG9yZSBhIHByZXZpb3VzbHkKKyAgIHJldHVybmVkIGJhdGNoIG1heSBiZSBwYXNz ZWQgaW5zdGVhZC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgQSBiYXRjaCByZXR1cm5lZCBi eSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlzIGFzc29jaWF0ZWQgd2l0aCBhbgor ICAgaW5kZXggcGFnZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyBpdGVtL3R1cGxl LiAgQSBidWZmZXIKKyAgIHBpbiBjYW4gYmUgaGVsZCBvbnRvIGJ5IHRoZSB0YWJsZSBBTSBhcyBh biBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50IFRJRAorICAgcmVjeWNsaW5nIGJ5IDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4uICBUaGUgdGFibGUgQU0gZHJvcHMgdGhpcyBpbnRlcmxvY2sK KyAgIGJ5IGNhbGxpbmcgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj4gd2hlbiBp dCBpcyBzYWZlIHRvIGRvIHNvLgorICAgU2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmci Lz4gZm9yIGRldGFpbHMgb24gYnVmZmVyIHBpbiBtYW5hZ2VtZW50CisgICBkdXJpbmcgaW5kZXgg c2NhbnMuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIEEgPHR5cGU+SW5kZXhTY2FuQmF0Y2g8 L3R5cGU+IHRoYXQgaXMgcmV0dXJuZWQgYnkKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaXMgbm8gbG9uZ2VyIG1hbmFnZWQgYnkgdGhlIGFjY2VzcyBtZXRob2QuCisgICBJdCBp cyB1cCB0byB0aGUgdGFibGUgQU0gY2FsbGVyIHRvIGRlY2lkZSB3aGVuIGl0IHNob3VsZCBiZSBm cmVlZCAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX2ZyZWVfYmF0Y2g8L2Z1bmN0aW9u PikuICBOb3RlIGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBm dW5jdGlvbnMgbXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRj aDwvc3RydWN0ZmllbGQ+IHBhcmFtZXRlci4gIFRoZSBjb3JlCisgICA8ZmlsZW5hbWU+c3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBh CisgICByZWZlcmVuY2UgZXhhbXBsZXMgb2YgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5j dGlvbj4gaW50ZXJmYWNlLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBUaGUgc2FtZSBjYXZl YXRzIGRlc2NyaWJlZCBmb3IgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhcHBseSBo ZXJlCisgICB0b286IGFuIGVudHJ5IGluIHRoZSByZXR1cm5lZCBiYXRjaCBtZWFucyBvbmx5IHRo YXQgdGhlIGluZGV4IGNvbnRhaW5zCisgICBhbiBlbnRyeSB0aGF0IG1hdGNoZXMgdGhlIHNjYW4g a2V5cywgbm90IHRoYXQgdGhlIHR1cGxlIG5lY2Vzc2FyaWx5IHN0aWxsCisgICBleGlzdHMgaW4g dGhlIGhlYXAgb3Igd2lsbCBwYXNzIHRoZSBjYWxsZXIncyBzbmFwc2hvdCB0ZXN0LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBhY2Nlc3MgbWV0aG9kcyB1c2luZyA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IG11c3Qgc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19y ZWNoZWNrPC9saXRlcmFsPiB0byBpbmRpY2F0ZSB3aGV0aGVyIHJlY2hlY2tpbmcgb2YKKyAgIHNj YW4ga2V5cyBpcyByZXF1aXJlZCwgaW4gdGhlIHNhbWUgd2F5IGFzIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4KKyAgIGRvZXMuIEhvd2V2ZXIsIDxsaXRlcmFsPnNjYW4tJmd0O3hzX3Jl Y2hlY2s8L2xpdGVyYWw+IG11c3QgYmUgc2V0IGNvbnNpc3RlbnRseQorICAgZm9yIGFuIGVudGly ZSBzY2FuIHJhdGhlciB0aGFuIHZhcnlpbmcgb24gYSBwZXItdHVwbGUgYmFzaXMuIFRoaXMgaXMg YSBrZXkKKyAgIGRpZmZlcmVuY2UgZnJvbSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ LCB3aGljaCBjYW4gc2V0CisgICA8bGl0ZXJhbD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFs PiBpbmRlcGVuZGVudGx5IGZvciBlYWNoIHR1cGxlIGl0IHJldHVybnMuCisgICBJbmRleCBhY2Nl c3MgbWV0aG9kcyB0aGF0IHJlcXVpcmUgZ3JhbnVsYXIgY29udHJvbCBvdmVyCisgICA8bGl0ZXJh bD5zY2FuLSZndDt4c19yZWNoZWNrPC9saXRlcmFsPiBtdXN0IHVzZSB0aGUgPGZ1bmN0aW9uPmFt Z2V0dHVwbGU8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlIGluc3RlYWQgb2YgPGZ1bmN0aW9uPmFt Z2V0YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgU2ltaWxhcmx5 LCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2UgZG9lcyBub3Qg Y3VycmVudGx5CisgICBzdXBwb3J0IGluZGV4LW9ubHkgc2NhbnMgdGhhdCByZXR1cm4gZGF0YSBp biB0aGUgZm9ybSBvZiBhCisgICA8c3RydWN0bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHBv aW50ZXIuICBJbmRleC1vbmx5IHNjYW5zIHdvcmsgYnkKKyAgIGNvcHlpbmcgPHN0cnVjdG5hbWU+ SW5kZXhUdXBsZTwvc3RydWN0bmFtZT4gcmVjb3JkcyBmcm9tIGluZGV4IHBhZ2VzIGludG8gYQor ICAgbG9jYWwgYnVmZmVyIGFzc29jaWF0ZWQgd2l0aCBlYWNoIGJhdGNoLiAgPGxpdGVyYWw+eHNf aXR1cGRlc2M8L2xpdGVyYWw+CisgICB3b3JrcyBpbiB0aGUgc2FtZSB3YXkgYXMgYWxyZWFkeSBk ZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4uCisgICBUaGUgaW5k ZXggYWNjZXNzIG1ldGhvZCBtdXN0IG5vdCBzZXQgdGhlIDxsaXRlcmFsPnNjYW4tJmd0O3hzX2l0 dXA8L2xpdGVyYWw+CisgICBmaWVsZCBpdHNlbGYuCisgICBXaXRoIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTSBzZXRzCisgICA8bGl0ZXJhbD5zY2FuLSZndDt4 c19oaXR1cDwvbGl0ZXJhbD4gdG8gcG9pbnQgdG8gYSByZWNvbnN0cnVjdGVkCisgICA8c3RydWN0 bmFtZT5IZWFwVHVwbGU8L3N0cnVjdG5hbWU+IHdob3NlIGxpZmV0aW1lIGV4dGVuZHMgdW50aWwg dGhlIG5leHQKKyAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gY2FsbCAmbWRhc2g7 IG9ubHkgb25lIHR1cGxlIGlzIHZhbGlkIGF0IGEKKyAgIHRpbWUuICBXaXRoIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4sIG11bHRpcGxlIGJhdGNoZXMgYXJlIGhlbGQgb3BlbgorICAg c2ltdWx0YW5lb3VzbHkgYW5kIGl0ZW1zIGFyZSBjb25zdW1lZCBhc3luY2hyb25vdXNseSBieSB0 aGUgdGFibGUgQU0sIHNvCisgICB0aGVyZSBpcyBubyBlcXVpdmFsZW50IHNpbmdsZS10dXBsZSBs aWZldGltZSBmb3IgcGVyLWl0ZW0KKyAgIDxzdHJ1Y3RuYW1lPkhlYXBUdXBsZTwvc3RydWN0bmFt ZT4gcG9pbnRlcnMuICBUaGUgYmF0Y2ggaW5mcmFzdHJ1Y3R1cmUKKyAgIHByb3ZpZGVzIHBlci1i YXRjaCBzdG9yYWdlIGZvciA8c3RydWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBjb3Bp ZXMsCisgICBidXQgaGFzIG5vIGFuYWxvZ291cyBtZWNoYW5pc20gZm9yIDxzdHJ1Y3RuYW1lPkhl YXBUdXBsZTwvc3RydWN0bmFtZT4gZGF0YQorICAgKHVzZWQgYnkgaW5kZXggQU1zIHN1Y2ggYXMg PGFjcm9ueW0+R2lTVDwvYWNyb255bT4gYW5kCisgICA8YWNyb255bT5TUC1HaVNUPC9hY3Jvbnlt PiBmb3IgcmVjb25zdHJ1Y3RlZCB0dXBsZXMgdGhhdCBtaWdodCBub3QgZml0IGluCisgICA8c3Ry dWN0bmFtZT5JbmRleFR1cGxlPC9zdHJ1Y3RuYW1lPiBmb3JtYXQpLiAgVGhpcyBsaW1pdGF0aW9u IGNvdWxkIGJlCisgICBhZGRyZXNzZWQgaW4gYSBmdXR1cmUgdmVyc2lvbiBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBU aGUgaW5kZXggYWNjZXNzIG1ldGhvZCBtdXN0IHByb3ZpZGUgZWl0aGVyIDxmdW5jdGlvbj5hbWdl dHR1cGxlPC9mdW5jdGlvbj4KKyAgIG9yIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4s IGJ1dCBub3QgYm90aC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRo ZQorICAgYWNjZXNzIG1ldGhvZCBzdXBwb3J0cyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBz Y2Fucy4gIElmIGl0IGRvZXNuJ3QsCisgICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBmaWVsZCBpbiBpdHMKKyAgIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3Ru YW1lPiBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor PHByb2dyYW1saXN0aW5nPgordm9pZAorYW1raWxsaXRlbXNiYXRjaCAoSW5kZXhTY2FuRGVzYyBz Y2FuLAorICAgICAgICAgICAgICAgICAgSW5kZXhTY2FuQmF0Y2ggYmF0Y2gpOworPC9wcm9ncmFt bGlzdGluZz4KKyAgIENhbGxlZCBieSB0aGUgdGFibGUgQU0gd2hlbiBpdCBoYXMgZmluaXNoZWQg cHJvY2Vzc2luZyBhIGJhdGNoIHRoYXQKKyAgIGNvbnRhaW5zIGRlYWQgaXRlbXMsIHRvIHNldCA8 bGl0ZXJhbD5MUF9ERUFEPC9saXRlcmFsPiBiaXRzIGluIHRoZSBiYXRjaCdzCisgICBpbmRleCBw YWdlLiAgVGhlIGJhdGNoJ3MgaW5kZXggcGFnZSB3aWxsIG5vdCBiZSBsb2NrZWQgYnkgdGhlIGNh bGxlcjsgdGhlCisgICBpbmRleCBBTSBtdXN0IGFjcXVpcmUgYW5kIHJlbGVhc2UgaXRzIG93biBs b2NrIChhbmQgcGluKSBvbiB0aGUgaW5kZXggcGFnZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgV2hpbGUgaW1wbGVtZW50aW5nIDxmdW5jdGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlv bj4gaXMgb3B0aW9uYWwsCisgICBkb2luZyBzbyBpcyByZWNvbW1lbmRlZCBmb3IgcGVyZm9ybWFu Y2UsIGFzIGl0IGFsbG93cyBmdXR1cmUgc2NhbnMgdG8gc2tpcAorICAga25vd24tZGVhZCBpbmRl eCBlbnRyaWVzLiAgVGhlIGNvcmUgaW5kZXggYWNjZXNzIG1ldGhvZCB0aGF0IGN1cnJlbnRseQor ICAgc3VwcG9ydCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IChCLXRyZWUpIGltcGxl bWVudHMKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IG1hcmtpbmcsIHRob3VnaCB0aGly ZC1wYXJ0eSBpbmRleCBhY2Nlc3MgbWV0aG9kcworICAgYXJlIGZyZWUgdG8gY2hvb3NlIHdoZXRo ZXIgdG8gaW1wbGVtZW50IHRoaXMgZmVhdHVyZS4KKyAgIFRoZSB0YWJsZSBBTSBtYXkgY2FsbAor ICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4gdG8g bWFyayBkZWFkIGl0ZW1zIGFzCisgICB0aGUgc2NhbiBwcm9ncmVzc2VzLiAgSWYgdGhlIGJhdGNo IGNvbnRhaW5zIGFueSBzdWNoIGRlYWQgaXRlbXMsIHRoZSBiYXRjaCdzCisgICA8c3RydWN0Zmll bGQ+ZGVhZEl0ZW1zPC9zdHJ1Y3RmaWVsZD4gYXJyYXkgd2lsbCBoYXZlIGJlZW4gc29ydGVkIGFu ZAorICAgZGVkdXBsaWNhdGVkIGJlZm9yZSA8ZnVuY3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVu Y3Rpb24+IGlzIGNhbGxlZCwgd2l0aAorICAgaXRlbSBvZmZzZXRzIGFwcGVhcmluZyBpbiBhc2Nl bmRpbmcgb3JkZXIgKHRoYXQgaXMsIGluIGluZGV4IHBhZ2Ugb3JkZXIsCisgICB3aGljaCBpcyBh bHNvIGJhdGNoIG9yZGVyKSBhbmQgbm8gb2Zmc2V0IGFwcGVhcmluZyBtb3JlIHRoYW4gb25jZS4g IEluZGV4CisgICBhY2Nlc3MgbWV0aG9kcyBjYW4gcmVseSBvbiB0aGlzIG9yZGVyaW5nIHdoZW4g cHJvY2Vzc2luZyBkZWFkIGl0ZW1zOiB0aGUKKyAgIDxzdHJ1Y3RmaWVsZD5kZWFkSXRlbXM8L3N0 cnVjdGZpZWxkPiBhcnJheSBjYW4gYmUgd2Fsa2VkIGluIGxvY2tzdGVwIHdpdGgKKyAgIHRoZSBp bmRleCBwYWdlJ3MgaXRlbSBwb2ludGVycywgc2luY2UgYm90aCBhcmUgaW4gYXNjZW5kaW5nIG9m ZnNldCBvcmRlci4KKyAgIFRoaXMgYWxzbyBtZWFucyB0aGUgdGFibGUgQU0gbmVlZCBub3QgY2Fs bAorICAgPGZ1bmN0aW9uPnRhYmxlYW1fdXRpbF9raWxsX3NjYW5wb3NpdGVtPC9mdW5jdGlvbj4g aW4gYW55IHBhcnRpY3VsYXIgb3JkZXIuCisgICAoSW5kZXggYWNjZXNzIG1ldGhvZHMgdXNpbmcg PGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiByZWx5IG9uIHRoZQorICAgPHN0cnVjdGZp ZWxkPmtpbGxfcHJpb3JfdHVwbGU8L3N0cnVjdGZpZWxkPiBtZWNoYW5pc20gaW5zdGVhZCB0byBt YXJrIGRlYWQKKyAgIHR1cGxlczsgdGhlIDxmaWxlbmFtZT5zcmMvYmFja2VuZC9hY2Nlc3MvZ2lz dC88L2ZpbGVuYW1lPiBpbXBsZW1lbnRhdGlvbgorICAgcHJvdmlkZXMgYSByZWZlcmVuY2UgZXhh bXBsZS4pCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFdoZW4gaW1wbGVtZW50aW5nIDxmdW5j dGlvbj5hbWtpbGxpdGVtc2JhdGNoPC9mdW5jdGlvbj4sIHRoZSBpbmRleCBBTQorICAgc2hvdWxk IHZlcmlmeSB0aGF0IHRoZSBpbmRleCBwYWdlIGhhcyBub3QgYmVlbiBtb2RpZmllZCBzaW5jZSB0 aGUgYmF0Y2ggd2FzCisgICBvcmlnaW5hbGx5IHJlYWQuICBUaGUgYmF0Y2gncyA8c3RydWN0Zmll bGQ+bHNuPC9zdHJ1Y3RmaWVsZD4gZmllbGQgcmVjb3JkcworICAgdGhlIHBhZ2UgTFNOIGF0IHRo ZSB0aW1lIHRoZSBpbmRleCBwYWdlIGxvY2sgd2FzIHJlbGVhc2VkIGJ5CisgICA8ZnVuY3Rpb24+ aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jazwvZnVuY3Rpb24+IChzZXQgYXV0b21hdGljYWxseSBi eSB0aGUKKyAgIGNvcmUgY29kZSwgdGhvdWdoIGluZGV4IEFNcyBhcmUgbm90IHN0cmljdGx5IHJl cXVpcmVkIHRvIHVzZQorICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1 bmN0aW9uPikuICBUaGUgaW5kZXggQU0gc2hvdWxkCisgICByZS1yZWFkIHRoZSBwYWdlLCBjb21w YXJlIHRoZSBjdXJyZW50IHBhZ2UgTFNOIGFnYWluc3QKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaC0m Z3Q7bHNuPC9zdHJ1Y3RmaWVsZD4sIGFuZCBnaXZlIHVwIG9uIHNldHRpbmcKKyAgIDxsaXRlcmFs PkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaWYgdGhlIExTTiBoYXMgYWR2YW5jZWQuICBBbiBhZHZh bmNlZCBMU04KKyAgIGluZGljYXRlcyB0aGF0IHRoZSBwYWdlIHdhcyBtb2RpZmllZCAmbWRhc2g7 IHBvc3NpYmx5IGJ5CisgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGluZyBoZWFw IFRJRHMgJm1kYXNoOyBzbyBpdCB3b3VsZCBiZSB1bnNhZmUKKyAgIHRvIGFzc3VtZSB0aGF0IGlu ZGV4IGVudHJpZXMgc3RpbGwgcG9pbnQgdG8gdGhlIHNhbWUgaGVhcCB0dXBsZXMuICBTaW5jZQor ICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0ZXJhbD4gbWFya2luZyBpcyBvbmx5IGFuIG9wdGltaXph dGlvbiBoaW50LCBpdCBpcworICAgYWx3YXlzIHNhZmUgdG8gc2tpcCBpdC4gIE5vdGUgdGhhdCB0 aGlzIExTTiBjb21wYXJpc29uIHRlY2huaXF1ZSByZXF1aXJlcworICAgdGhlIGluZGV4IEFNIHRv IHVzZSBmYWtlIChtb25vdG9uaWNhbGx5IGluY3JlYXNpbmcpIExTTnMgb24gaXRzIHBhZ2VzIGZv cgorICAgcmVsYXRpb25zIHdoZXJlIFdBTCBpcyBub3QgZ2VuZXJhdGVkLCBzaW5jZSByZWFsIExT TnMgYXJlIG5vdCBhdmFpbGFibGUgaW4KKyAgIHRoYXQgY2FzZS4gIFNlZSB0aGUgQi10cmVlIGlu ZGV4IGltcGxlbWVudGF0aW9uIGZvciBhIHJlZmVyZW5jZQorICAgZXhhbXBsZSBvZiB0aGlzIHRl Y2huaXF1ZS4gIEFuIGluZGV4IEFNIHRoYXQgZG9lcyBub3QgaW1wbGVtZW50IGZha2UgTFNOcwor ICAgY2FuIHN0aWxsIHByb3ZpZGUgPGZ1bmN0aW9uPmFta2lsbGl0ZW1zYmF0Y2g8L2Z1bmN0aW9u PiwgYnV0IHNob3VsZCBzaW1wbHkKKyAgIGRvIG5vdGhpbmcgd2hlbiB0aGUgcmVsYXRpb24gZG9l cyBub3QgZ2VuZXJhdGUgV0FMIChpLmUuLCB3aGVuCisgICA8ZnVuY3Rpb24+UmVsYXRpb25OZWVk c1dBTCgpPC9mdW5jdGlvbj4gaXMgZmFsc2UpLCBzaW5jZSB0aGUgTFNOIGNvbXBhcmlzb24KKyAg IHdvdWxkIGJlIHVucmVsaWFibGUuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVu Y3Rpb24+YW1raWxsaXRlbXNiYXRjaDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGlzIG9wdGlvbmFsLiAg SW5kZXgKKyAgIGFjY2VzcyBtZXRob2RzIHRoYXQgd2FudCB0byBtYXJrIGRlYWQgaW5kZXggdHVw bGVzIHdpdGgKKyAgIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgc2hvdWxkIHByb3Zp ZGUgaXQ7IHRob3NlIHRoYXQgZG9uJ3QgY2FuCisgICBsZWF2ZSBpdCBzZXQgdG8gPGxpdGVyYWw+ TlVMTDwvbGl0ZXJhbD4gZXZlbiB3aGVuIHRoZXkgcHJvdmlkZQorICAgPGZ1bmN0aW9uPmFtZ2V0 YmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5n Pgordm9pZAorYW11bmd1YXJkYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAg ICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgQ2FsbGVk IGJ5IHRoZSB0YWJsZSBBTSAodmlhCisgICA8ZnVuY3Rpb24+dGFibGVhbV91dGlsX3VuZ3VhcmRf YmF0Y2g8L2Z1bmN0aW9uPikgd2hlbiBpdCBpcyBzYWZlIHRvIGRyb3AKKyAgIHRoZSBUSUQgcmVj eWNsaW5nIGludGVybG9jayB0aGF0IHRoZSBpbmRleCBBTSBob2xkcyBvbiB0aGUgYmF0Y2gncyBp bmRleAorICAgbGVhZiBwYWdlLCB3aGljaCBwcmV2ZW50cyBjb25jdXJyZW50IFRJRCByZWN5Y2xp bmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uCisgICBGb3JtYWxseSwgYW4gaW5k ZXggQU0gbWF5IGhvbGQgYSBkaWZmZXJlbnQga2luZCBvZiBpbnRlcmxvY2ssIG9yIG11bHRpcGxl CisgICBpbnRlcmxvY2tzLCBpbiBpdHMgcGVyLWJhdGNoIG9wYXF1ZSBhcmVhLCBidXQgaW4gcHJh Y3RpY2UgdGhlIGJ1aWx0LWluCisgICBpbmRleCBBTSB0aGF0IHN1cHBvcnRzIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gJm1kYXNoOyBCLXRyZWUKKyAgICZtZGFzaDsgaG9sZHMgYSBz aW5nbGUgYnVmZmVyIHBpbi4gIFNlZSA8eHJlZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+Cisg ICBmb3IgZGV0YWlscyBvbiBidWZmZXIgcGluIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHNjYW5z LiAgVGhpcyBmdW5jdGlvbgorICAgd2lsbCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGZvciBlYWNo IGd1YXJkZWQgYmF0Y2guCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBt YXkgY2hvb3NlIHRvIHJldGFpbiBpdHMgb3duIGJ1ZmZlciBwaW5zIHdoZW4gdGhpcyBzZXJ2ZXMg YW4KKyAgIGludGVybmFsIHB1cnBvc2UgKGZvciBleGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2Nl bnQgc3RhY2sgb2YgcGlubmVkIGluZGV4CisgICBwYWdlcyBmb3IgcmV1c2UgYWNyb3NzIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbHMpLiAgSG93ZXZlciwKKyAgIGFueSBzY2hl bWUgdGhhdCByZXRhaW5zIGJ1ZmZlciBwaW5zIG1hbmFnZWQgYnkgdGhlIGluZGV4IEFNIG11c3Qg YmUgc3VyZSB0bworICAgZnJlZSB0aGUgcGlucyBhdCBhbiBvcHBvcnR1bmUgcG9pbnQgKGZvciBl eGFtcGxlIHdoZW4gPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4KKyAgIGFuZC9vciA8ZnVu Y3Rpb24+YW1lbmRzY2FuPC9mdW5jdGlvbj4gYXJlIGNhbGxlZCkuICBJdCBtdXN0IGFsc28ga2Vl cCB0aGUKKyAgIG51bWJlciBvZiByZXRhaW5lZCBwaW5zIGZpeGVkIGFuZCBzbWFsbCwgdG8gYXZv aWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzCisgICBidWZmZXIgcGluIGxpbWl0LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlv bj4gZnVuY3Rpb24gaXMgcmVxdWlyZWQgZm9yIGFueSBpbmRleAorICAgYWNjZXNzIG1ldGhvZCB0 aGF0IHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uCisgIDwvcGFyYT4K IAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICsxMDI3LDggQEAgYW1nZXRi aXRtYXAgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIGl0c2VsZiwgYW5kIHRoZXJlZm9yZSBjYWxs ZXJzIHJlY2hlY2sgYm90aCB0aGUgc2NhbiBjb25kaXRpb25zIGFuZCB0aGUKICAgIHBhcnRpYWwg aW5kZXggcHJlZGljYXRlIChpZiBhbnkpIGZvciByZWNoZWNrYWJsZSB0dXBsZXMuICBUaGF0IG1p Z2h0IG5vdAogICAgYWx3YXlzIGJlIHRydWUsIGhvd2V2ZXIuCi0gICA8ZnVuY3Rpb24+YW1nZXRi aXRtYXA8L2Z1bmN0aW9uPiBhbmQKLSAgIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4g Y2Fubm90IGJlIHVzZWQgaW4gdGhlIHNhbWUgaW5kZXggc2NhbjsgdGhlcmUKKyAgIE9ubHkgb25l IG9mIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+LCA8ZnVuY3Rpb24+YW1nZXR0dXBs ZTwvZnVuY3Rpb24+LAorICAgb3IgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYW4g YmUgdXNlZCBpbiBhbnkgZ2l2ZW4gaW5kZXggc2NhbjsgdGhlcmUKICAgIGFyZSBvdGhlciByZXN0 cmljdGlvbnMgdG9vIHdoZW4gdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4s IGFzIGV4cGxhaW5lZAogICAgaW4gPHhyZWYgbGlua2VuZD0iaW5kZXgtc2Nhbm5pbmciLz4uCiAg IDwvcGFyYT4KQEAgLTc4MSw2ICsxMDQwLDI5IEBAIGFtZ2V0Yml0bWFwIChJbmRleFNjYW5EZXNj IHNjYW4sCiAgICBzdHJ1Y3QgbXVzdCBiZSBzZXQgdG8gTlVMTC4KICAgPC9wYXJhPgogCisgIDxw YXJhPgorICAgSW5kZXggYWNjZXNzIG1ldGhvZHMgdGhhdCB1c2UgdGhlIDxmdW5jdGlvbj5hbWdl dGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlCisgICB3aWxsIGdlbmVyYWxseSBhbHNvIHdhbnQg dG8gdXNlIHRoZSBiYXRjaCBhbGxvY2F0aW9uIGluZnJhc3RydWN0dXJlCisgICAoPGZ1bmN0aW9u PmluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYzwvZnVuY3Rpb24+IGFuZAorICAgPGZ1bmN0aW9uPmlu ZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlPC9mdW5jdGlvbj4pIHdpdGhpbiB0aGVpcgorICAgPGZ1 bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW1wbGVtZW50YXRpb24uICBUaGUgY29udmVu dGlvbiBpcyB0aGF0IG9ubHkKKyAgIG9uZSBiYXRjaCBpcyBhbGxvY2F0ZWQgYXQgYSB0aW1lIGR1 cmluZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiwKKyAgIHVubGlrZSA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHdoZXJlIHNldmVyYWwgYmF0Y2hlcyBtYXkgYmUKKyAg IG91dHN0YW5kaW5nIGluIHRoZSBiYXRjaCByaW5nIGJ1ZmZlciBjb25jdXJyZW50bHkuICBUbyBt YWludGFpbiB0aGlzCisgICBvbmUtYmF0Y2gtYXQtYS10aW1lIGludmFyaWFudCwgdGhlIGluZGV4 IEFNIGl0c2VsZiByZWxlYXNlcyBpdHMgcHJpb3IgYmF0Y2gKKyAgIHZpYSA8ZnVuY3Rpb24+aW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2U8L2Z1bmN0aW9uPiBqdXN0IGFzIHRoZSBzY2FuIGxlYXZl cworICAgdGhhdCBiYXRjaCdzIGluZGV4IHBhZ2UgYW5kIGlzIGFib3V0IHRvIGdlbmVyYXRlIHRo ZSBuZXh0IGJhdGNoICZtZGFzaDsgdGhlCisgICBzYW1lIHBvaW50IHdoZXJlIGl0IGV4dHJhY3Rz IG5hdmlnYXRpb24gc3RhdGUgKHN1Y2ggYXMgc2libGluZy1wYWdlIGxpbmtzKQorICAgZnJvbSA8 bGl0ZXJhbD5wcmlvcmJhdGNoPC9saXRlcmFsPi4gIFRoaXMgZWFybHkgcmVsZWFzZSBpcyBzcGVj aWZpYyB0bworICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gc2NhbnM7IGR1cmlu ZyA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICBzY2FucyB0aGUgPGxpdGVyYWw+ cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgc3RyaWN0bHkgb3duZWQgYnkgdGhlIHRhYmxlIEFNCisg ICBhbmQgY29yZSBjb2RlLCBhbmQgdGhlIGluZGV4IEFNIG11c3QgbmV2ZXIgcmVsZWFzZSBpdC4g IFNlZQorICAgPGZ1bmN0aW9uPl9idF9uZXh0PC9mdW5jdGlvbj4gZm9yIGEKKyAgIHJlZmVyZW5j ZSBleGFtcGxlLiAgVGhlIHJlbGVhc2VkIGJhdGNoIGlzIGNhY2hlZCBpbnRlcm5hbGx5IGFuZCBy ZXVzZWQgYnkKKyAgIHRoZSBuZXh0IDxmdW5jdGlvbj5pbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2M8 L2Z1bmN0aW9uPiBjYWxsLCBhdm9pZGluZworICAgcmVwZWF0ZWQgbWVtb3J5IGFsbG9jYXRpb24g ZHVyaW5nIHRoZSBiaXRtYXAgc2Nhbi4KKyAgPC9wYXJhPgorCiAgIDxwYXJhPgogPHByb2dyYW1s aXN0aW5nPgogdm9pZApAQCAtNzk1LDMyICsxMDc3LDQ0IEBAIGFtZW5kc2NhbiAoSW5kZXhTY2Fu RGVzYyBzY2FuKTsKICAgPHBhcmE+CiA8cHJvZ3JhbWxpc3Rpbmc+CiB2b2lkCi1hbW1hcmtwb3Mg KEluZGV4U2NhbkRlc2Mgc2Nhbik7CithbXBvc3Jlc2V0IChJbmRleFNjYW5EZXNjIHNjYW4sCisg ICAgICAgICAgICBJbmRleFNjYW5CYXRjaCBiYXRjaCk7CiA8L3Byb2dyYW1saXN0aW5nPgotICAg TWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUgYWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkg c3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBwb3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5v dGlmeSB0aGUgaW5kZXggQU0gdGhhdCB0aGUgdGFibGUgQU0gaXMgYWJvdXQgdG8gY2hhbmdlIHRo ZSBzY2FuJ3MKKyAgIGxvZ2ljYWwgcG9zaXRpb24gaW4gYSB3YXkgdGhhdCByZXF1aXJlcyB0aGUg aW5kZXggQU0gdG8gcmVzZXQgYW55IHN0YXRlCisgICB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tz IHRoZSBzY2FuJ3MgcHJvZ3Jlc3MuICBGb3IgZXhhbXBsZSwgQi10cmVlIG11c3QKKyAgIHJlc2V0 IHRoZSBhcnJheSBrZXlzIHVzZWQgYnkgPGxpdGVyYWw+U2NhbGFyQXJyYXlPcEV4cHI8L2xpdGVy YWw+IHF1YWwKKyAgIGV2YWx1YXRpb24gd2hlbiB0aGUgc2NhbiBwb3NpdGlvbiBjaGFuZ2VzLiAg VGhpcyBjYWxsYmFjayBpcyBpbnZva2VkIHdoZW4KKyAgIHRoZSB0YWJsZSBBTSBpcyBhYm91dCB0 byBwcm9jZXNzIGEgYmF0Y2ggaW4gYSBkaWZmZXJlbnQgZGlyZWN0aW9uIHRoYW4KKyAgIHdhcyB1 c2VkIHdoZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkIGJ5CisgICA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+LCBhbmQgYWxzbyB3aGVuIGEgbWFya2VkIHNjYW4gcG9z aXRpb24gaXMKKyAgIGFib3V0IHRvIGJlIHJlc3RvcmVkLgogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGZ1bmN0aW9uIG5lZWQgb25s eSBiZSBwcm92aWRlZCBpZiB0aGUgYWNjZXNzCi0gICBtZXRob2Qgc3VwcG9ydHMgb3JkZXJlZCBz Y2Fucy4gIElmIGl0IGRvZXNuJ3QsCi0gICB0aGUgPHN0cnVjdGZpZWxkPmFtbWFya3Bvczwvc3Ry dWN0ZmllbGQ+IGZpZWxkIGluIGl0cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0 bmFtZT4KLSAgIHN0cnVjdCBtYXkgYmUgc2V0IHRvIE5VTEwuCisgICBXaGVuIDxmdW5jdGlvbj5h bXBvc3Jlc2V0PC9mdW5jdGlvbj4gaXMgY2FsbGVkIGR1ZSB0byBhIGNyb3NzLWJhdGNoCisgICBk aXJlY3Rpb24gY2hhbmdlLCB0aGUgY29yZSBzeXN0ZW0gd2lsbCBoYXZlIGFscmVhZHkgZmxpcHBl ZCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0ZmllbGQ+IGZpZWxkIHRv IHJlZmxlY3QgdGhlIG5ldyBzY2FuIGRpcmVjdGlvbgorICAgYmVmb3JlIG1ha2luZyB0aGUgY2Fs bC4gIFRoZSBpbmRleCBBTSBzaG91bGQgdXNlIHRoaXMgdXBkYXRlZCBkaXJlY3Rpb24KKyAgIHdo ZW4gcmVzZXR0aW5nIGFueSBzdGF0ZSB0aGF0IGRlcGVuZHMgb24ga25vd2luZyB3aGljaCB3YXkg dGhlIHNjYW4gaXMKKyAgIHByb2NlZWRpbmcuICBXaGVuIGNhbGxlZCB0byByZXN0b3JlIGEgbWFy a2VkIHBvc2l0aW9uLCB0aGUgYmF0Y2gncworICAgPHN0cnVjdGZpZWxkPmRpcjwvc3RydWN0Zmll bGQ+IGlzIG5vdCBtb2RpZmllZDsgaXQgcmV0YWlucyB0aGUgZGlyZWN0aW9uCisgICBmcm9tIHdo ZW4gdGhlIGJhdGNoIHdhcyBvcmlnaW5hbGx5IHJldHVybmVkLiAgSW4gYm90aCBjYXNlcywgdGhl IGJhdGNoCisgICBwYXNzZWQgdG8gPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBpcyB0 aGUgYmF0Y2ggdGhhdCB3aWxsIGJlIHVzZWQKKyAgIHRvIGNvbnRpbnVlIHRoZSBzY2FuLgogICA8 L3BhcmE+CiAKICAgPHBhcmE+Ci08cHJvZ3JhbWxpc3Rpbmc+Ci12b2lkCi1hbXJlc3RycG9zIChJ bmRleFNjYW5EZXNjIHNjYW4pOwotPC9wcm9ncmFtbGlzdGluZz4KLSAgIFJlc3RvcmUgdGhlIHNj YW4gdG8gdGhlIG1vc3QgcmVjZW50bHkgbWFya2VkIHBvc2l0aW9uLgotICA8L3BhcmE+Ci0KLSAg PHBhcmE+Ci0gICBUaGUgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPiBmdW5jdGlvbiBu ZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlIGFjY2VzcwotICAgbWV0aG9kIHN1cHBvcnRzIG9y ZGVyZWQgc2NhbnMuICBJZiBpdCBkb2Vzbid0LAotICAgdGhlIDxzdHJ1Y3RmaWVsZD5hbXJlc3Ry cG9zPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5l PC9zdHJ1Y3RuYW1lPgotICAgc3RydWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KKyAgIEluZGV4IGFj Y2VzcyBtZXRob2RzIHRoYXQgaGF2ZSBwcml2YXRlIHN0YXRlIHdoaWNoIG11c3QgYmUgcmVzZXQg d2hlbiB0aGUKKyAgIHNjYW4gcG9zaXRpb24gY2hhbmdlcyBtdXN0IHByb3ZpZGUgYW4gPGZ1bmN0 aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPgorICAgaW1wbGVtZW50YXRpb24uICBJbmRleCBBTXMg d2l0aCBubyBzdWNoIHN0YXRlIG1heSBzZXQKKyAgIDxzdHJ1Y3RmaWVsZD5hbXBvc3Jlc2V0PC9z dHJ1Y3RmaWVsZD4gdG8gTlVMTC4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rp b24+IGZ1bmN0aW9uIGNhbiBvbmx5IGJlIHByb3ZpZGVkIHdoZW4gdGhlCisgICBhY2Nlc3MgbWV0 aG9kIHN1cHBvcnRzIG9yZGVyZWQgc2NhbnMgdGhyb3VnaCB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPgorICAgaW50ZXJmYWNlLiAgKE5vdGUgdGhhdCB3aGVuIDxzdHJ1Y3RmaWVs ZD5hbWNhbmJhY2t3YXJkPC9zdHJ1Y3RmaWVsZD4gaXMKKyAgIGZhbHNlLCB0aGUgc2NhbiBkaXJl Y3Rpb24gY2Fubm90IGNoYW5nZSwgc28KKyAgIDxmdW5jdGlvbj5hbXBvc3Jlc2V0PC9mdW5jdGlv bj4gd2lsbCBvbmx5IGJlIGNhbGxlZCBkdWUgdG8gbWFyay9yZXN0b3JlCisgICBpbiB0aGF0IGNh c2UuKQogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBAIC05NzUsNiArMTI2OSw4IEBAIGFtdHJhbnNs YXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50 eXBlKTsKICAgICAgICBBY2Nlc3MgbWV0aG9kcyB0aGF0IGFsd2F5cyByZXR1cm4gZW50cmllcyBp biB0aGUgbmF0dXJhbCBvcmRlcmluZwogICAgICAgIG9mIHRoZWlyIGRhdGEgKHN1Y2ggYXMgYnRy ZWUpIHNob3VsZCBzZXQKICAgICAgICA8c3RydWN0ZmllbGQ+YW1jYW5vcmRlcjwvc3RydWN0Zmll bGQ+IHRvIHRydWUuCisgICAgICAgQm90aCA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+ IGFuZCA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+CisgICAgICAgc2NhbnMgc3VwcG9y dCB0aGlzIGNhcGFiaWxpdHkuCiAgICAgICAgQ3VycmVudGx5LCBzdWNoIGFjY2VzcyBtZXRob2Rz IG11c3QgdXNlIGJ0cmVlLWNvbXBhdGlibGUgc3RyYXRlZ3kKICAgICAgICBudW1iZXJzIGZvciB0 aGVpciBlcXVhbGl0eSBhbmQgb3JkZXJpbmcgb3BlcmF0b3JzLgogICAgICAgPC9wYXJhPgpAQCAt OTk0LDM0ICsxMjkwLDQyIEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlw ZSwgT2lkIG9wZmFtaWx5LCBPaWQgb3BjaW50eXBlKTsKICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgVGhlIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gZnVuY3Rpb24gaGFzIGEgPGxp dGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVudCwKKyAgIE5vdGUgdGhhdCA8ZnVuY3Rp b24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHNjYW5zIGRvIG5vdCBjdXJyZW50bHkgc3VwcG9ydAor ICAgb3JkZXJpbmcgb3BlcmF0b3JzLiAgVGhlIGNvcmUgZXhlY3V0b3IgZXhwZWN0cyA8ZnVuY3Rp b24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+CisgICB0byBzZXQgPHN0cnVjdGZpZWxkPnhzX29yZGVy Ynl2YWxzPC9zdHJ1Y3RmaWVsZD4gZm9yIGVhY2ggcmV0dXJuZWQgdHVwbGUsCisgICBidXQgdGhl cmUgaXMgY3VycmVudGx5IG5vIG1lY2hhbmlzbSB0byBhc3NvY2lhdGUgcGVyLWl0ZW0gb3JkZXJp bmcgdmFsdWVzCisgICB3aXRoIGluZGl2aWR1YWwgaXRlbXMgd2l0aGluIGEgYmF0Y2guICBUaGlz IHdvdWxkIHJlcXVpcmUgYW4gYWRkaXRpb25hbAorICAgbGF5ZXIgb2YgaW5kaXJlY3Rpb24gdGhh dCBkb2VzIG5vdCB5ZXQgZXhpc3QsIGJ1dCBjb3VsZCBiZSBhZGRlZCBpbiBhCisgICBmdXR1cmUg dmVyc2lvbiBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+LgorICA8L3Bh cmE+CisKKyAgPHBhcmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBm dW5jdGlvbiBoYXMgYSA8bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAogICAg d2hpY2ggY2FuIGJlIGVpdGhlciA8bGl0ZXJhbD5Gb3J3YXJkU2NhbkRpcmVjdGlvbjwvbGl0ZXJh bD4gKHRoZSBub3JtYWwgY2FzZSkKICAgIG9yICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rp b248L2xpdGVyYWw+LiAgSWYgdGhlIGZpcnN0IGNhbGwgYWZ0ZXIKICAgIDxmdW5jdGlvbj5hbXJl c2NhbjwvZnVuY3Rpb24+IHNwZWNpZmllcyA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+LCB0aGVuIHRoZQotICAgc2V0IG9mIG1hdGNoaW5nIGluZGV4IGVudHJpZXMgaXMg dG8gYmUgc2Nhbm5lZCBiYWNrLXRvLWZyb250IHJhdGhlciB0aGFuIGluCi0gICB0aGUgbm9ybWFs IGZyb250LXRvLWJhY2sgZGlyZWN0aW9uLCBzbyA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IG11c3QgcmV0dXJuCi0gICB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUgaW5kZXgs IHJhdGhlciB0aGFuIHRoZSBmaXJzdCBvbmUgYXMgaXQKLSAgIG5vcm1hbGx5IHdvdWxkLiAgKFRo aXMgd2lsbCBvbmx5IG9jY3VyIGZvciBhY2Nlc3MKLSAgIG1ldGhvZHMgdGhhdCBzZXQgPHN0cnVj dGZpZWxkPmFtY2Fub3JkZXI8L3N0cnVjdGZpZWxkPiB0byB0cnVlLikgIEFmdGVyIHRoZQotICAg Zmlyc3QgY2FsbCwgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBh cmVkIHRvIGFkdmFuY2UgdGhlIHNjYW4gaW4KKyAgIHJldHVybmVkIGJhdGNoIG11c3QgYmUgdGhl IGJhdGNoIGNvbnRhaW5pbmcgdGhlIGxhc3QgbWF0Y2hpbmcgaXRlbShzKSwKKyAgIHJhdGhlciB0 aGFuIHRoZSBiYXRjaCBjb250YWluaW5nIHRoZSBmaXJzdCBtYXRjaGluZyBpdGVtKHMpLgorICAg PGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IGJlIHByZXBhcmVkIHRvIGFkdmFu Y2UgdGhlIHNjYW4gaW4KICAgIGVpdGhlciBkaXJlY3Rpb24gZnJvbSB0aGUgbW9zdCByZWNlbnRs eSByZXR1cm5lZCBlbnRyeS4gIChCdXQgaWYKICAgIDxzdHJ1Y3RmaWVsZD5hbWNhbmJhY2t3YXJk PC9zdHJ1Y3RmaWVsZD4gaXMgZmFsc2UsIGFsbCBzdWJzZXF1ZW50CiAgICBjYWxscyB3aWxsIGhh dmUgdGhlIHNhbWUgZGlyZWN0aW9uIGFzIHRoZSBmaXJzdCBvbmUuKQogICA8L3BhcmE+CiAKICAg PHBhcmE+Ci0gICBBY2Nlc3MgbWV0aG9kcyB0aGF0IHN1cHBvcnQgb3JkZXJlZCBzY2FucyBtdXN0 IHN1cHBvcnQgPHF1b3RlPm1hcmtpbmc8L3F1b3RlPiBhCi0gICBwb3NpdGlvbiBpbiBhIHNjYW4g YW5kIGxhdGVyIHJldHVybmluZyB0byB0aGUgbWFya2VkIHBvc2l0aW9uLiAgVGhlIHNhbWUKLSAg IHBvc2l0aW9uIG1pZ2h0IGJlIHJlc3RvcmVkIG11bHRpcGxlIHRpbWVzLiAgSG93ZXZlciwgb25s eSBvbmUgcG9zaXRpb24gbmVlZAotICAgYmUgcmVtZW1iZXJlZCBwZXIgc2NhbjsgYSBuZXcgPGZ1 bmN0aW9uPmFtbWFya3BvczwvZnVuY3Rpb24+IGNhbGwgb3ZlcnJpZGVzIHRoZQotICAgcHJldmlv dXNseSBtYXJrZWQgcG9zaXRpb24uICBBbiBhY2Nlc3MgbWV0aG9kIHRoYXQgZG9lcyBub3Qgc3Vw cG9ydCBvcmRlcmVkCi0gICBzY2FucyBuZWVkIG5vdCBwcm92aWRlIDxmdW5jdGlvbj5hbW1hcmtw b3M8L2Z1bmN0aW9uPiBhbmQgPGZ1bmN0aW9uPmFtcmVzdHJwb3M8L2Z1bmN0aW9uPgotICAgZnVu Y3Rpb25zIGluIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPjsgc2V0IHRo b3NlIHBvaW50ZXJzIHRvIE5VTEwKLSAgIGluc3RlYWQuCisgICBTY2FucyB1c2luZyB0aGUgPGZ1 bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9ydAorICAgPHF1b3Rl Pm1hcmtpbmc8L3F1b3RlPiBhIHBvc2l0aW9uIGluIGEgc2NhbiBhbmQgbGF0ZXIgcmV0dXJuaW5n IHRvIHRoZQorICAgbWFya2VkIHBvc2l0aW9uLiAgVGhlIGNvcmUgZXhlY3V0b3IgbWFuYWdlcyB0 aGUgcHJvY2VzcyBvZiBzYXZpbmcgYW5kCisgICByZXN0b3JpbmcgYmF0Y2ggcG9zaXRpb25hbCBz dGF0ZSB3aXRob3V0IGV4cGxpY2l0IGNvb3JkaW5hdGluZyB3aXRoIHRoZQorICAgdGFibGUgQU0u ICBIb3dldmVyLCBpdCB3aWxsIGNhbGwgdGhlIGluZGV4IEFNJ3MgPGZ1bmN0aW9uPmFtcG9zcmVz ZXQ8L2Z1bmN0aW9uPgorICAgY2FsbGJhY2sgYXMgbmVlZGVkIHdoZW4gcmVzdG9yaW5nIGEgbWFy aywgdG8gaW52YWxpZGF0ZSBhbnkgaW5kZXggQU0gc3RhdGUKKyAgIHRoYXQgaW5kZXBlbmRlbnRs eSB0cmFja3MgdGhlIHByb2dyZXNzIG9mIHRoZSBzY2FuIChzdWNoIGFzIGFycmF5IGtleQorICAg c3RhdGUpLiAgU2VlIHRoZSBkZXNjcmlwdGlvbiBvZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVu Y3Rpb24+IGluCisgICA8eHJlZiBsaW5rZW5kPSJpbmRleC1mdW5jdGlvbnMiLz4gZm9yIGRldGFp bHMuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEJvdGggdGhlIHNjYW4gcG9zaXRpb24gYW5k IHRoZSBtYXJrIHBvc2l0aW9uIChpZiBhbnkpIG11c3QgYmUgbWFpbnRhaW5lZAorICAgVGhlIHNj YW4gcG9zaXRpb24gKGlmIGFueSkgbXVzdCBiZSBtYWludGFpbmVkIGJ5IHRoZSB0YWJsZSBBTSBh bmQgaW5kZXggQU0KICAgIGNvbnNpc3RlbnRseSBpbiB0aGUgZmFjZSBvZiBjb25jdXJyZW50IGlu c2VydGlvbnMgb3IgZGVsZXRpb25zIGluIHRoZQogICAgaW5kZXguICBJdCBpcyBPSyBpZiBhIGZy ZXNobHktaW5zZXJ0ZWQgZW50cnkgaXMgbm90IHJldHVybmVkIGJ5IGEgc2NhbiB0aGF0CiAgICB3 b3VsZCBoYXZlIGZvdW5kIHRoZSBlbnRyeSBpZiBpdCBoYWQgZXhpc3RlZCB3aGVuIHRoZSBzY2Fu IHN0YXJ0ZWQsIG9yIGZvcgpAQCAtMTA0NCwxMiArMTM0OCwxNCBAQCBhbXRyYW5zbGF0ZWNtcHR5 cGUgKENvbXBhcmVUeXBlIGNtcHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAg IDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluc3RlYWQgb2YgdXNpbmcgPGZ1bmN0aW9uPmFtZ2V0 dHVwbGU8L2Z1bmN0aW9uPiwgYW4gaW5kZXggc2NhbiBjYW4gYmUgZG9uZSB3aXRoCi0gICA8ZnVu Y3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiB0byBmZXRjaCBhbGwgdHVwbGVzIGluIG9uZSBj YWxsLiAgVGhpcyBjYW4gYmUKLSAgIG5vdGljZWFibHkgbW9yZSBlZmZpY2llbnQgdGhhbiA8ZnVu Y3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IGJlY2F1c2UgaXQgYWxsb3dzCi0gICBhdm9pZGlu ZyBsb2NrL3VubG9jayBjeWNsZXMgd2l0aGluIHRoZSBhY2Nlc3MgbWV0aG9kLiAgSW4gcHJpbmNp cGxlCi0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBzaG91bGQgaGF2ZSB0aGUg c2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkCi0gICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rp b24+IGNhbGxzLCBidXQgd2UgaW1wb3NlIHNldmVyYWwgcmVzdHJpY3Rpb25zIHRvCisgICBJbnN0 ZWFkIG9mIHVzaW5nIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5j dGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGFuIGluZGV4IHNjYW4gY2FuIGJlIGRvbmUgd2l0 aAorICAgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gdG8gZmV0Y2ggYWxsIHR1cGxl cyBpbiBvbmUgY2FsbC4gIFRoaXMgY2FuCisgICBiZSBub3RpY2VhYmx5IG1vcmUgZWZmaWNpZW50 IHRoYW4gd2l0aCBhbiA8cXVvdGU+b3JkZXJlZDwvcXVvdGU+IHNjYW4KKyAgIGJlY2F1c2UgaXQg YWxsb3dzIGVmZmljaWVudCBzZXF1ZW50aWFsIGFjY2VzcyB0byB0YWJsZSBBTSBwYWdlcyBjb250 YWluaW5nCisgICBtYXRjaGVzLiAgSW4gcHJpbmNpcGxlIDxmdW5jdGlvbj5hbWdldGJpdG1hcDwv ZnVuY3Rpb24+IHNob3VsZCBoYXZlIHRoZQorICAgc2FtZSBlZmZlY3RzIGFzIHJlcGVhdGVkIDxm dW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gb3IKKyAgIDxmdW5jdGlvbj5hbWdldGJhdGNo PC9mdW5jdGlvbj4gY2FsbHMsIGJ1dCB3ZSBpbXBvc2Ugc2V2ZXJhbCByZXN0cmljdGlvbnMgdG8K ICAgIHNpbXBsaWZ5IG1hdHRlcnMuICBGaXJzdCBvZiBhbGwsIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+IHJldHVybnMgYWxsCiAgICB0dXBsZXMgYXQgb25jZSBhbmQgbWFya2luZyBv ciByZXN0b3Jpbmcgc2NhbiBwb3NpdGlvbnMgaXNuJ3QKICAgIHN1cHBvcnRlZC4gU2Vjb25kbHks IHRoZSB0dXBsZXMgYXJlIHJldHVybmVkIGluIGEgYml0bWFwIHdoaWNoIGRvZXNuJ3QKQEAgLTEw NTksMTUgKzEzNjUsMTUgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgQWxzbywgdGhlcmUgaXMgbm8gcHJv dmlzaW9uIGZvciBpbmRleC1vbmx5IHNjYW5zIHdpdGgKICAgIDxmdW5jdGlvbj5hbWdldGJpdG1h cDwvZnVuY3Rpb24+LCBzaW5jZSB0aGVyZSBpcyBubyB3YXkgdG8gcmV0dXJuIHRoZSBjb250ZW50 cyBvZgogICAgaW5kZXggdHVwbGVzLgotICAgRmluYWxseSwgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFw PC9mdW5jdGlvbj4KLSAgIGRvZXMgbm90IGd1YXJhbnRlZSBhbnkgbG9ja2luZyBvZiB0aGUgcmV0 dXJuZWQgdHVwbGVzLCB3aXRoIGltcGxpY2F0aW9ucwotICAgc3BlbGxlZCBvdXQgaW4gPHhyZWYg bGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPi4KKyAgIEZpbmFsbHksIDxmdW5jdGlvbj5hbWdldGJp dG1hcDwvZnVuY3Rpb24+IGRvZXMgbm90IGhvbGQgYW55IGluZGV4IHBhZ2UgcGlucworICAgYWZ0 ZXIgaXQgcmV0dXJucyAoc2ltaWxhcmx5IHRvIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gc2NhbnMgd2l0aAorICAgYW4gTVZDQyBzbmFwc2hvdCksIGFzIGRlc2NyaWJlZCBpbiA8eHJl ZiBsaW5rZW5kPSJpbmRleC1sb2NraW5nIi8+LgogICA8L3BhcmE+CiAKICAgPHBhcmE+CiAgICBO b3RlIHRoYXQgaXQgaXMgcGVybWl0dGVkIGZvciBhbiBhY2Nlc3MgbWV0aG9kIHRvIGltcGxlbWVu dCBvbmx5Ci0gICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5j dGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4sIG9yIHZpY2UgdmVyc2EsCi0gICBpZiBpdHMgaW50 ZXJuYWwgaW1wbGVtZW50YXRpb24gaXMgdW5zdWl0ZWQgdG8gb25lIEFQSSBvciB0aGUgb3RoZXIu CisgICA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1bmN0aW9uPiBhbmQgbm90IDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4vPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiwKKyAg IG9yIHZpY2UgdmVyc2EsIGlmIGl0cyBpbnRlcm5hbCBpbXBsZW1lbnRhdGlvbiBpcyB1bnN1aXRl ZCB0byBvbmUgQVBJIG9yIHRoZSBvdGhlci4KICAgPC9wYXJhPgogCiAgPC9zZWN0MT4KQEAgLTEx MjMsMTEgKzE0MjksMTcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0eXBl LCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICAgICA8L2xpc3RpdGVtPgogICAgICA8 bGlzdGl0ZW0+CiAgICAgICA8cGFyYT4KLSAgICAgICBBbiBpbmRleCBzY2FuIG11c3QgbWFpbnRh aW4gYSBwaW4KLSAgICAgICBvbiB0aGUgaW5kZXggcGFnZSBob2xkaW5nIHRoZSBpdGVtIGxhc3Qg cmV0dXJuZWQgYnkKLSAgICAgICA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+LCBhbmQg PGZ1bmN0aW9uPmFtYnVsa2RlbGV0ZTwvZnVuY3Rpb24+IGNhbm5vdCBkZWxldGUKLSAgICAgICBl bnRyaWVzIGZyb20gcGFnZXMgdGhhdCBhcmUgcGlubmVkIGJ5IG90aGVyIGJhY2tlbmRzLiAgVGhl IG5lZWQKLSAgICAgICBmb3IgdGhpcyBydWxlIGlzIGV4cGxhaW5lZCBiZWxvdy4KKyAgICAgICBB IHBpbiBtdXN0IGJlIGhlbGQgb24gYW55IGluZGV4IHBhZ2Ugd2hvc2UgaXRlbXMgbWlnaHQgc3Rp bGwgbmVlZCB0bworICAgICAgIGJlIGZvbGxvd2VkLCBhbmQgPGZ1bmN0aW9uPmFtYnVsa2RlbGV0 ZTwvZnVuY3Rpb24+IG11c3QgYWNxdWlyZSBhCisgICAgICAgY2xlYW51cCBsb2NrIG9uIGVhY2gg aW5kZXggcGFnZSwgd2hpY2ggd2lsbCBibG9jayBpZiBhbnkgb3RoZXIKKyAgICAgICBiYWNrZW5k IGhvbGRzIGEgcGluIG9uIHRoYXQgcGFnZS4KKyAgICAgICBGb3IgPGZ1bmN0aW9uPmFtZ2V0dHVw bGU8L2Z1bmN0aW9uPiBzY2FucywgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAgICAgICBtYW5h Z2VzIHRoaXMgcGluIGRpcmVjdGx5LgorICAgICAgIEZvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwv ZnVuY3Rpb24+IHNjYW5zLCB0aGUgaW5kZXggQU0gaG9sZHMgYSBidWZmZXIKKyAgICAgICBwaW4g b24gZWFjaCBiYXRjaCdzIGluZGV4IGxlYWYgcGFnZSAoaW4gaXRzIHBlci1iYXRjaCBvcGFxdWUg YXJlYSksCisgICAgICAgd2hpbGUgdGhlIHRhYmxlIEFNIGNvbnRyb2xzIHdoZW4gdGhlIGludGVy bG9jayBpcyBkcm9wcGVkIHZpYQorICAgICAgIDxmdW5jdGlvbj5hbXVuZ3VhcmRiYXRjaDwvZnVu Y3Rpb24+LgorICAgICAgIFRoZSBuZWVkIGZvciB0aGlzIHJ1bGUgaXMgZXhwbGFpbmVkIGJlbG93 LgogICAgICAgPC9wYXJhPgogICAgICA8L2xpc3RpdGVtPgogICAgIDwvaXRlbWl6ZWRsaXN0PgpA QCAtMTEzOCwzOSArMTQ1MCw5MSBAQCBhbXRyYW5zbGF0ZWNtcHR5cGUgKENvbXBhcmVUeXBlIGNt cHR5cGUsIE9pZCBvcGZhbWlseSwgT2lkIG9wY2ludHlwZSk7CiAgICA8Y29tbWFuZD5WQUNVVU08 L2NvbW1hbmQ+LgogICAgVGhpcyBjcmVhdGVzIG5vIHNlcmlvdXMgcHJvYmxlbXMgaWYgdGhhdCBp dGVtCiAgICBudW1iZXIgaXMgc3RpbGwgdW51c2VkIHdoZW4gdGhlIHJlYWRlciByZWFjaGVzIGl0 LCBzaW5jZSBhbiBlbXB0eQotICAgaXRlbSBzbG90IHdpbGwgYmUgaWdub3JlZCBieSA8ZnVuY3Rp b24+aGVhcF9mZXRjaCgpPC9mdW5jdGlvbj4uICBCdXQgd2hhdCBpZiBhCisgICBpdGVtIHNsb3Qg d2lsbCBzaW1wbHkgYmUgdHJlYXRlZCBhcyBub3QtdmlzaWJsZS4gIEJ1dCB3aGF0IGlmIGEKICAg IHRoaXJkIGJhY2tlbmQgaGFzIGFscmVhZHkgcmUtdXNlZCB0aGUgaXRlbSBzbG90IGZvciBzb21l dGhpbmcgZWxzZT8KICAgIFdoZW4gdXNpbmcgYW4gTVZDQy1jb21wbGlhbnQgc25hcHNob3QsIHRo ZXJlIGlzIG5vIHByb2JsZW0gYmVjYXVzZQogICAgdGhlIG5ldyBvY2N1cGFudCBvZiB0aGUgc2xv dCBpcyBjZXJ0YWluIHRvIGJlIHRvbyBuZXcgdG8gcGFzcyB0aGUKICAgIHNuYXBzaG90IHRlc3Qu ICBIb3dldmVyLCB3aXRoIGEgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90IChzdWNoIGFzCiAg ICA8bGl0ZXJhbD5TbmFwc2hvdEFueTwvbGl0ZXJhbD4pLCBpdCB3b3VsZCBiZSBwb3NzaWJsZSB0 byBhY2NlcHQgYW5kIHJldHVybgotICAgYSByb3cgdGhhdCBkb2VzIG5vdCBpbiBmYWN0IG1hdGNo IHRoZSBzY2FuIGtleXMuICBXZSBjb3VsZCBkZWZlbmQKLSAgIGFnYWluc3QgdGhpcyBzY2VuYXJp byBieSByZXF1aXJpbmcgdGhlIHNjYW4ga2V5cyB0byBiZSByZWNoZWNrZWQKLSAgIGFnYWluc3Qg dGhlIGhlYXAgcm93IGluIGFsbCBjYXNlcywgYnV0IHRoYXQgaXMgdG9vIGV4cGVuc2l2ZS4gIElu c3RlYWQsCi0gICB3ZSB1c2UgYSBwaW4gb24gYW4gaW5kZXggcGFnZSBhcyBhIHByb3h5IHRvIGlu ZGljYXRlIHRoYXQgdGhlIHJlYWRlcgotICAgbWlnaHQgc3RpbGwgYmUgPHF1b3RlPmluIGZsaWdo dDwvcXVvdGU+IGZyb20gdGhlIGluZGV4IGVudHJ5IHRvIHRoZSBtYXRjaGluZwotICAgaGVhcCBl bnRyeS4gIE1ha2luZyA8ZnVuY3Rpb24+YW1idWxrZGVsZXRlPC9mdW5jdGlvbj4gYmxvY2sgb24g c3VjaCBhIHBpbiBlbnN1cmVzCi0gICB0aGF0IDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4gY2Fu bm90IGRlbGV0ZSB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlcgotICAgaXMgZG9uZSB3 aXRoIGl0LiAgVGhpcyBzb2x1dGlvbiBjb3N0cyBsaXR0bGUgaW4gcnVuIHRpbWUsIGFuZCBhZGRz IGJsb2NraW5nCi0gICBvdmVyaGVhZCBvbmx5IGluIHRoZSByYXJlIGNhc2VzIHdoZXJlIHRoZXJl IGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuCisgICBhIHdob2xseSB1bnJlbGF0ZWQgcm93IChvbmUg dGhhdCBkb2VzIG5vdCBuZWNlc3NhcmlseSBzYXRpc2Z5IHRoZSBzY2FuCisgICBrZXlzKS4gIFdl IGNhbiBvcHRpb25hbGx5IHVzZSBhIHBpbiBvbiBhbiBpbmRleCBwYWdlIGFzIGEgcHJveHkgdG8g aW5kaWNhdGUKKyAgIHRoYXQgdGhlIHJlYWRlciBtaWdodCBzdGlsbCBiZSA8cXVvdGU+aW4gZmxp Z2h0PC9xdW90ZT4gZnJvbSB0aGUgaW5kZXgKKyAgIGVudHJ5IHRvIHRoZSBtYXRjaGluZyBoZWFw IGVudHJ5LiAgTWFraW5nIDxmdW5jdGlvbj5hbWJ1bGtkZWxldGU8L2Z1bmN0aW9uPgorICAgYmxv Y2sgb24gc3VjaCBhIHBpbiBlbnN1cmVzIHRoYXQgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBj YW5ub3QgZGVsZXRlCisgICB0aGUgaGVhcCBlbnRyeSBiZWZvcmUgdGhlIHJlYWRlciBpcyBkb25l IHdpdGggaXQuICBUaGlzIHNvbHV0aW9uIGNvc3RzCisgICBsaXR0bGUgaW4gcnVuIHRpbWUsIGFu ZCBhZGRzIGJsb2NraW5nIG92ZXJoZWFkIG9ubHkgaW4gdGhlIHJhcmUgY2FzZXMgd2hlcmUKKyAg IHRoZXJlIGFjdHVhbGx5IGlzIGEgY29uZmxpY3QuICBXaGVuIHRoZSBzY2FuIHVzZXMgYW4gTVZD Qy1jb21wbGlhbnQKKyAgIHNuYXBzaG90LCBob2xkaW5nIHRoZSBwaW4gaXMgdW5uZWNlc3Nhcnkg YmVjYXVzZSB0aGUgc25hcHNob3QgaXRzZWxmIHdpbGwKKyAgIHJlamVjdCBhbnkgcmVjeWNsZWQg VElEJ3MgbmV3IG9jY3VwYW50IChzZWUgYmVsb3cpLgogICA8L3BhcmE+CiAKICAgPHBhcmE+Ci0g ICBUaGlzIHNvbHV0aW9uIHJlcXVpcmVzIHRoYXQgaW5kZXggc2NhbnMgYmUgPHF1b3RlPnN5bmNo cm9ub3VzPC9xdW90ZT46IHdlIGhhdmUKLSAgIHRvIGZldGNoIGVhY2ggaGVhcCB0dXBsZSBpbW1l ZGlhdGVseSBhZnRlciBzY2FubmluZyB0aGUgY29ycmVzcG9uZGluZyBpbmRleAotICAgZW50cnku ICBUaGlzIGlzIGV4cGVuc2l2ZSBmb3IgYSBudW1iZXIgb2YgcmVhc29ucy4gIEFuCi0gICA8cXVv dGU+YXN5bmNocm9ub3VzPC9xdW90ZT4gc2NhbiBpbiB3aGljaCB3ZSBjb2xsZWN0IG1hbnkgVElE cyBmcm9tIHRoZSBpbmRleCwKLSAgIGFuZCBvbmx5IHZpc2l0IHRoZSBoZWFwIHR1cGxlcyBzb21l dGltZSBsYXRlciwgcmVxdWlyZXMgbXVjaCBsZXNzIGluZGV4Ci0gICBsb2NraW5nIG92ZXJoZWFk IGFuZCBjYW4gYWxsb3cgYSBtb3JlIGVmZmljaWVudCBoZWFwIGFjY2VzcyBwYXR0ZXJuLgotICAg UGVyIHRoZSBhYm92ZSBhbmFseXNpcywgd2UgbXVzdCB1c2UgdGhlIHN5bmNocm9ub3VzIGFwcHJv YWNoIGZvcgotICAgbm9uLU1WQ0MtY29tcGxpYW50IHNuYXBzaG90cywgYnV0IGFuIGFzeW5jaHJv bm91cyBzY2FuIGlzIHdvcmthYmxlCi0gICBmb3IgYSBxdWVyeSB1c2luZyBhbiBNVkNDIHNuYXBz aG90LgorICAgVGhpcyBzb2x1dGlvbiByZXF1aXJlcyB0aGF0IDxmdW5jdGlvbj5hbWdldHR1cGxl PC9mdW5jdGlvbj4gaW5kZXggc2NhbnMgYmUKKyAgIDxxdW90ZT5zeW5jaHJvbm91czwvcXVvdGU+ OiB0aGUgdGFibGUgQU0gbXVzdCBmZXRjaCBlYWNoIGhlYXAgdHVwbGUKKyAgIGltbWVkaWF0ZWx5 IGFmdGVyIHNjYW5uaW5nIHRoZSBjb3JyZXNwb25kaW5nIGluZGV4IGVudHJ5LiAgVGhpcyBpcwor ICAgZXhwZW5zaXZlIGZvciBhIG51bWJlciBvZiByZWFzb25zLiAgVGhlCisgICA8ZnVuY3Rpb24+ YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGludGVyZmFjZSwgYnkgY29udHJhc3QsIHdhcyBkZXNpZ25l ZCB0bworICAgYWxsb3cgc2NhbnMgdG8gYmUgPHF1b3RlPmFzeW5jaHJvbm91czwvcXVvdGU+OiBi eSBjb2xsZWN0aW5nIGJhdGNoZXMgb2YKKyAgIFRJRHMgZnJvbSBtdWx0aXBsZSBpbmRleCBwYWdl cywgdGhlIHRhYmxlIEFNIGNhbiBwcmVmZXRjaCB0aGUgY29ycmVzcG9uZGluZworICAgdGFibGUg YmxvY2tzIHdlbGwgYWhlYWQgb2YgdGhlIGN1cnJlbnQgc2NhbiBwb3NpdGlvbiAodXNpbmcgYXN5 bmNocm9ub3VzCisgICBJL08gd2hlbiBhdmFpbGFibGUpLCBhbGxvd2luZyBhIG1vcmUgZWZmaWNp ZW50IGhlYXAgYWNjZXNzIHBhdHRlcm4uICBOb3QKKyAgIGFsbCBzY2FucyBlbmQgdXAgYmVpbmcg YXN5bmNocm9ub3VzIGluIHByYWN0aWNlLCBidXQgdGhlIGludGVyZmFjZSBpcworICAgZGVzaWdu ZWQgdG8gYWxsb3cgaXQuICBQZXIgdGhlIGFib3ZlIGFuYWx5c2lzLCB3ZSBtdXN0IHVzZSB0aGUg c3luY2hyb25vdXMKKyAgIGFwcHJvYWNoIGZvciBub24tTVZDQy1jb21wbGlhbnQgc25hcHNob3Rz LCBidXQgYW4gYXN5bmNocm9ub3VzIHNjYW4gaXMKKyAgIHdvcmthYmxlIGZvciBhIHF1ZXJ5IHVz aW5nIGFuIE1WQ0Mgc25hcHNob3QuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIEluIGFuIDxm dW5jdGlvbj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGluZGV4IHNjYW4sIHRoZSBhY2Nlc3MgbWV0 aG9kIGRvZXMgbm90Ci0gICBrZWVwIGFuIGluZGV4IHBpbiBvbiBhbnkgb2YgdGhlIHJldHVybmVk IHR1cGxlcy4gIFRoZXJlZm9yZQotICAgaXQgaXMgb25seSBzYWZlIHRvIHVzZSBzdWNoIHNjYW5z IHdpdGggTVZDQy1jb21wbGlhbnQgc25hcHNob3RzLgorICAgQmVjYXVzZSB0aGUgdGFibGUgQU0g cmVhZHMgbXVsdGlwbGUgaW5kZXggbGVhZiBwYWdlcyBhaGVhZCB2aWEKKyAgIDxmdW5jdGlvbj5h bWdldGJhdGNoPC9mdW5jdGlvbj4gdG8gZmFjaWxpdGF0ZSB0aGlzIHByZWZldGNoaW5nLCBpdCBj YW5ub3QKKyAgIHByYWN0aWNhbGx5IGhvbGQgcGlucyBvbiBhbGwgdGhvc2UgcGFnZXMgc2ltdWx0 YW5lb3VzbHkuICBUaGVyZWZvcmUsCisgICBJL08gcHJlZmV0Y2hpbmcgd2l0aAorICAgPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpcyBvbmx5IHBvc3NpYmxlIHdoZW4gYW4gTVZDQy1j b21wbGlhbnQKKyAgIHNuYXBzaG90IGlzIGluIHVzZS4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgor ICAgV2hldGhlciBhIGJhdGNoJ3MgVElEIHJlY3ljbGluZyBpbnRlcmxvY2sgKHR5cGljYWxseSBh biBpbmRleCBwYWdlIGJ1ZmZlcgorICAgcGluKSBpcyBkcm9wcGVkIGltbWVkaWF0ZWx5IG9yIGRl ZmVycmVkIGlzIGNvbnRyb2xsZWQgYnkgYSBnZW5lcmljLAorICAgc2Nhbi1sZXZlbCBwb2xpY3kg dGhhdCBpcyBkZXRlcm1pbmVkIHdoZW4gdGhlIHNjYW4gaXMgb3BlbmVkICZtZGFzaDsgaXQgaXMK KyAgIG5vdCB1bmRlciB0aGUgY29udHJvbCBvZiBlaXRoZXIgdGhlIGluZGV4IEFNIG9yIHRoZSB0 YWJsZSBBTS4gIFRoZSBzY2FuJ3MKKyAgIDxzdHJ1Y3RmaWVsZD5iYXRjaEltbWVkaWF0ZVVuZ3Vh cmQ8L3N0cnVjdGZpZWxkPiBmbGFnIGVuY29kZXMgdGhpcyBwb2xpY3kuCisgICBJdCBpcyBzZXQg YmFzZWQgb24gdHdvIGNyaXRlcmlhIHRoYXQgYXJlIGtub3duIHRvIHRoZSBjb3JlIHNjYW4gbWFj aGluZXJ5OgorICAgd2hldGhlciB0aGUgc2NhbiB1c2VzIGFuIE1WQ0MtY29tcGxpYW50IHNuYXBz aG90LCBhbmQgd2hldGhlciBpdCBpcyBhbgorICAgaW5kZXgtb25seSBzY2FuLiAgU3BlY2lmaWNh bGx5LAorICAgPHN0cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+ IGlzIHRydWUgd2hlbiB0aGUgc2NhbiB1c2VzCisgICBhbiBNVkNDIHNuYXBzaG90IGFuZCBpcyA8 ZW1waGFzaXM+bm90PC9lbXBoYXNpcz4gYW4gaW5kZXgtb25seSBzY2FuLiAgV2hlbgorICAgPHN0 cnVjdGZpZWxkPmJhdGNoSW1tZWRpYXRlVW5ndWFyZDwvc3RydWN0ZmllbGQ+IGlzIHRydWUsIHRo ZSBpbnRlcmxvY2sgaXMKKyAgIGRyb3BwZWQgaW5zaWRlIDxmdW5jdGlvbj5pbmRleGFtX3V0aWxf YmF0Y2hfdW5sb2NrPC9mdW5jdGlvbj4gKGJlZm9yZSB0aGUKKyAgIGJhdGNoIGlzIGV2ZW4gcmV0 dXJuZWQgdG8gdGhlIHRhYmxlIEFNKSwgYmVjYXVzZSBhIHBsYWluIGluZGV4IHNjYW4gd2l0aCBh bgorICAgTVZDQyBzbmFwc2hvdCB3aWxsIGFsd2F5cyB2aXNpdCB0aGUgaGVhcCBwYWdlLCB3aGVy ZSB0aGUgTVZDQyB2aXNpYmlsaXR5CisgICBjaGVjayBpcyBhdXRob3JpdGF0aXZlICZtZGFzaDsg ZXZlbiBpZiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IHJlY3ljbGVzIGEKKyAgIFRJRCwgdGhl IG5ldyBvY2N1cGFudCBjYW5ub3QgcGFzcyB0aGUgc25hcHNob3QgdGVzdC4gIFdoZW4gaXQgaXMg ZmFsc2UsIHRoZQorICAgaW50ZXJsb2NrIGlzIHJldGFpbmVkIHVudGlsIHRoZSB0YWJsZSBBTSBl eHBsaWNpdGx5IGNhbGxzCisgICA8ZnVuY3Rpb24+YW11bmd1YXJkYmF0Y2g8L2Z1bmN0aW9uPiwg YmVjYXVzZSB0aGUgc2NhbiBjYW5ub3QgcmVseSBvbiB0aGF0CisgICBoZWFwIHBhZ2UgTVZDQyBi YWNrc3RvcC4gIEZvciBub24tTVZDQyBzY2FucywgdGhlcmUgaXMgbm8gTVZDQyBzbmFwc2hvdCB0 bworICAgcmVqZWN0IGEgcmVjeWNsZWQgVElEJ3MgbmV3IG9jY3VwYW50IGF0IGFsbC4gIEZvciBp bmRleC1vbmx5IHNjYW5zLCBldmVuCisgICB3aXRoIGFuIE1WQ0Mgc25hcHNob3QsIHRoZSBzY2Fu IHR5cGljYWxseSBhdm9pZHMgdmlzaXRpbmcgdGhlIGhlYXAgcGFnZQorICAgYWx0b2dldGhlciAo dXNpbmcgdGhlIHZpc2liaWxpdHkgbWFwIGluc3RlYWQpLCBzbyB0aGUgTVZDQyBjaGVjayB0aGF0 IHdvdWxkCisgICBjYXRjaCBhIHJlY3ljbGVkIFRJRCB1c3VhbGx5IG5ldmVyIHJ1bnMuICBJbiBi b3RoIGNhc2VzIHRoZSBpbnRlcmxvY2sgb24KKyAgIHRoZSBpbmRleCBwYWdlIGlzIHdoYXQgcHJl dmVudHMgPGNvbW1hbmQ+VkFDVVVNPC9jb21tYW5kPiBmcm9tIHJlY3ljbGluZworICAgVElEcyB3 aGlsZSB0aGUgc2NhbiBpcyBzdGlsbCBpbiBmbGlnaHQuICBJbiBhbGwgY2FzZXMsIHRoZSB0YWJs ZSBBTSBkZWNpZGVzCisgICA8ZW1waGFzaXM+d2hlbjwvZW1waGFzaXM+IHRvIGNhbGwgPGZ1bmN0 aW9uPmFtdW5ndWFyZGJhdGNoPC9mdW5jdGlvbj47IHRoZQorICAgaW5kZXggQU0gZGVjaWRlcyA8 ZW1waGFzaXM+d2hhdDwvZW1waGFzaXM+IHRvIHJlbGVhc2UuCisgIDwvcGFyYT4KKworICA8cGFy YT4KKyAgIFNpbWlsYXJseSwgYW4gPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4gaW5k ZXggc2NhbiBpcyBpbmhlcmVudGx5CisgICBhc3luY2hyb25vdXM6IGFsbCBtYXRjaGluZyBUSURz IGFyZSBjb2xsZWN0ZWQgaW50byBhIGJpdG1hcCBiZWZvcmUgYW55IGhlYXAKKyAgIGFjY2VzcyBi ZWdpbnMuICBTdWNoIHNjYW5zIHRoZXJlZm9yZSByZXF1aXJlIGFuIE1WQ0MtY29tcGxpYW50IHNu YXBzaG90LAorICAgYW5kIHRoZXJlIGlzIG5vIG5lZWQgZm9yIHRoZSBhY2Nlc3MgbWV0aG9kIHRv IGhvbGQgaW5kZXggcGFnZSBwaW5zLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyB0aGF0IHVzZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IG11 c3QgbWFuYWdlCisgICBwaW4gbGlmZXRpbWUgdGhlbXNlbHZlcywgc2luY2UgdGhlcmUgaXMgbm8g dGFibGUgQU0gaW50ZXJtZWRpYXJ5ICh1bmxpa2UKKyAgIHdpdGggPGZ1bmN0aW9uPmFtZ2V0YmF0 Y2g8L2Z1bmN0aW9uPikuICBUaGUgaW5kZXggQU0gbXVzdCBob2xkIGEgcGluIG9uIHRoZQorICAg Y3VycmVudCBpbmRleCBwYWdlIHVudGlsIHRoZSBzY2FuIG1vdmVzIHRvIGEgZGlmZmVyZW50IHBh Z2Ugb3IgZW5kcy4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9z Z21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxl LnNnbWwKaW5kZXggODA4MjliMjM5Li5jZjBiYTViMGMgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dt bC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwKKysrIGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbApAQCAtMTE3MywxMiArMTE3MywxMyBAQCBXSVRIICggTU9EVUxVUyA8cmVwbGFjZWFi bGUgY2xhc3M9InBhcmFtZXRlciI+bnVtZXJpY19saXRlcmFsPC9yZXBsYWNlYWJsZT4sIFJFTQog ICAgICA8L3BhcmE+CiAKICAgICAgPHBhcmE+Ci0gICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0 IHN1cHBvcnQgPGxpdGVyYWw+YW1nZXR0dXBsZTwvbGl0ZXJhbD4gKHNlZSA8eHJlZgotICAgICAg bGlua2VuZD0iaW5kZXhhbSIvPik7IGF0IHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48 L2Fjcm9ueW0+Ci0gICAgICBjYW5ub3QgYmUgdXNlZC4gIEFsdGhvdWdoIGl0J3MgYWxsb3dlZCwg dGhlcmUgaXMgbGl0dGxlIHBvaW50IGluIHVzaW5nCi0gICAgICBCLXRyZWUgb3IgaGFzaCBpbmRl eGVzIHdpdGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcwotICAgICAgZG9l cyBub3RoaW5nIHRoYXQgYW4gb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBi ZXR0ZXIuCi0gICAgICBTbyBpbiBwcmFjdGljZSB0aGUgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5 cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBvcgorICAgICAgVGhlIGFjY2VzcyBtZXRob2Qg bXVzdCBzdXBwb3J0IGVpdGhlciA8bGl0ZXJhbD5hbWdldHR1cGxlPC9saXRlcmFsPgorICAgICAg b3IgPGxpdGVyYWw+YW1nZXRiYXRjaDwvbGl0ZXJhbD4gKHNlZSA8eHJlZiBsaW5rZW5kPSJpbmRl eGFtIi8+KTsgYXQKKyAgICAgIHByZXNlbnQgdGhpcyBtZWFucyA8YWNyb255bT5HSU48L2Fjcm9u eW0+IGNhbm5vdCBiZSB1c2VkLiAgQWx0aG91Z2gKKyAgICAgIGl0J3MgYWxsb3dlZCwgdGhlcmUg aXMgbGl0dGxlIHBvaW50IGluIHVzaW5nIEItdHJlZSBvciBoYXNoIGluZGV4ZXMKKyAgICAgIHdp dGggYW4gZXhjbHVzaW9uIGNvbnN0cmFpbnQsIGJlY2F1c2UgdGhpcyBkb2VzIG5vdGhpbmcgdGhh dCBhbgorICAgICAgb3JkaW5hcnkgdW5pcXVlIGNvbnN0cmFpbnQgZG9lc24ndCBkbyBiZXR0ZXIu ICBTbyBpbiBwcmFjdGljZSB0aGUKKyAgICAgIGFjY2VzcyBtZXRob2Qgd2lsbCBhbHdheXMgYmUg PGFjcm9ueW0+R2lTVDwvYWNyb255bT4gb3IKICAgICAgIDxhY3JvbnltPlNQLUdpU1Q8L2Fjcm9u eW0+LgogICAgICA8L3BhcmE+CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlf aW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYyBiL3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhf YW0vZHVtbXlfaW5kZXhfYW0uYwppbmRleCAzMWY4ZDJiODEuLmUyYjg2NWZiNCAxMDA2NDQKLS0t IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCisrKyBi L3NyYy90ZXN0L21vZHVsZXMvZHVtbXlfaW5kZXhfYW0vZHVtbXlfaW5kZXhfYW0uYwpAQCAtMzM0 LDEwICszMzQsMTIgQEAgZGloYW5kbGVyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCS5hbWJlZ2luc2Nh biA9IGRpYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBkaXJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUg PSBOVUxMLAorCQkuYW1nZXRiYXRjaCA9IE5VTEwsCisJCS5hbWtpbGxpdGVtc2JhdGNoID0gTlVM TCwKKwkJLmFtdW5ndWFyZGJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJ LmFtZW5kc2NhbiA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IGUzYzEwMDdhYi4u MzFhNzJhOTZhIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjA2LDYgKzIwNiw3IEBA IEJPT0wKIEJPT0xFQU4KIEJPWAogQlRBcnJheUtleUluZm8KK0JUQmF0Y2hEYXRhCiBCVEJ1aWxk U3RhdGUKIEJUQ2FsbGJhY2tTdGF0ZQogQlRDeWNsZUlkCkBAIC0yMzMsOCArMjM0LDYgQEAgQlRT Y2FuSW5zZXJ0RGF0YQogQlRTY2FuS2V5UHJlcHJvYwogQlRTY2FuT3BhcXVlCiBCVFNjYW5PcGFx dWVEYXRhCi1CVFNjYW5Qb3NEYXRhCi1CVFNjYW5Qb3NJdGVtCiBCVFNoYXJlZAogQlRTb3J0QXJy YXlDb250ZXh0CiBCVFNwb29sCkBAIC0yNjMsNiArMjYyLDkgQEAgQmFzZUJhY2t1cENtZAogQmFz ZUJhY2t1cFRhcmdldEhhbmRsZQogQmFzZUJhY2t1cFRhcmdldFR5cGUKIEJhdGNoTVZDQ1N0YXRl CitCYXRjaE1hdGNoaW5nSXRlbQorQmF0Y2hSaW5nQnVmZmVyCitCYXRjaFJpbmdJdGVtUG9zCiBC ZWdpbkRpcmVjdE1vZGlmeV9mdW5jdGlvbgogQmVnaW5Gb3JlaWduSW5zZXJ0X2Z1bmN0aW9uCiBC ZWdpbkZvcmVpZ25Nb2RpZnlfZnVuY3Rpb24KQEAgLTEyMzQsNiArMTIzNiw3IEBAIEhiYUxpbmUK IEhlYWRsaW5lSnNvblN0YXRlCiBIZWFkbGluZVBhcnNlZFRleHQKIEhlYWRsaW5lV29yZEVudHJ5 CitIZWFwQmF0Y2hEYXRhCiBIZWFwQ2hlY2tDb250ZXh0CiBIZWFwQ2hlY2tSZWFkU3RyZWFtRGF0 YQogSGVhcFBhZ2VGcmVlemUKQEAgLTEzMTMsNiArMTMxNiw4IEBAIEluZGV4T3JkZXJCeURpc3Rh bmNlCiBJbmRleFBhdGgKIEluZGV4UnVudGltZUtleUluZm8KIEluZGV4U2NhbgorSW5kZXhTY2Fu QmF0Y2gKK0luZGV4U2NhbkJhdGNoRGF0YQogSW5kZXhTY2FuRGVzYwogSW5kZXhTY2FuRGVzY0Rh dGEKIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbgpAQCAtMzUyNiwxOCArMzUzMSwxNyBAQCBhbWNh bnJldHVybl9mdW5jdGlvbgogYW1jb3N0ZXN0aW1hdGVfZnVuY3Rpb24KIGFtZW5kc2Nhbl9mdW5j dGlvbgogYW1lc3RpbWF0ZXBhcmFsbGVsc2Nhbl9mdW5jdGlvbgorYW1nZXRiYXRjaF9mdW5jdGlv bgogYW1nZXRiaXRtYXBfZnVuY3Rpb24KIGFtZ2V0dHJlZWhlaWdodF9mdW5jdGlvbgogYW1nZXR0 dXBsZV9mdW5jdGlvbgogYW1pbml0cGFyYWxsZWxzY2FuX2Z1bmN0aW9uCiBhbWluc2VydF9mdW5j dGlvbgogYW1pbnNlcnRjbGVhbnVwX2Z1bmN0aW9uCi1hbW1hcmtwb3NfZnVuY3Rpb24KIGFtb3B0 aW9uc19mdW5jdGlvbgogYW1wYXJhbGxlbHJlc2Nhbl9mdW5jdGlvbgogYW1wcm9wZXJ0eV9mdW5j dGlvbgogYW1yZXNjYW5fZnVuY3Rpb24KLWFtcmVzdHJwb3NfZnVuY3Rpb24KIGFtdHJhbnNsYXRl X2NtcHR5cGVfZnVuY3Rpb24KIGFtdHJhbnNsYXRlX3N0cmF0ZWd5X2Z1bmN0aW9uCiBhbXZhY3V1 bWNsZWFudXBfZnVuY3Rpb24KLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0002-Add-slot-based-table-AM-interface-for-index-scan.patch" Content-Disposition: attachment; filename="v18-0002-Add-slot-based-table-AM-interface-for-index-scan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37u17 RnJvbSBhMGIxZmU5Y2NmZGM5NWVlMmUyYTM2YjE0ZmE3NjYxYTYzZmIwYWZiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFN1 biwgMjIgTWFyIDIwMjYgMDI6MzY6NTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwMi8xOV0g QWRkIHNsb3QtYmFzZWQgdGFibGUgQU0gaW50ZXJmYWNlIGZvciBpbmRleCBzY2Fucy4KCkFkZCB0 YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QsIGEgbmV3IHRhYmxlIEFNIGNhbGxiYWNrIHRoYXQgd3Jh cHMgYm90aApwbGFpbiBhbmQgaW5kZXgtb25seSBpbmRleCBzY2FucyB0aGF0IHVzZSBhbWdldHR1 cGxlLiAgVHdvIG5ldwpUYWJsZUFtUm91dGluZSBjYWxsYmFja3MgYXJlIGludHJvZHVjZWQgLS0g b25lIGZvciBwbGFpbiBzY2FucyBhbmQgb25lCmZvciBpbmRleC1vbmx5IHNjYW5zIC0tIHdoaWNo IGFuIHVwY29taW5nIGNvbW1pdCB0aGF0IGFkZHMgdGhlCmFtZ2V0YmF0Y2ggaW50ZXJmYWNlIHdp bGwgZXhwYW5kIHRvIGZvdXIuICBUaGUgYXBwcm9wcmlhdGUgY2FsbGJhY2sgaXMKcmVzb2x2ZWQg b25jZSBpbiBpbmRleF9iZWdpbnNjYW4sIGFuZCBjYWxsZWQgdGhyb3VnaCBhIGZ1bmN0aW9uIHBv aW50ZXIKKHhzX2dldG5leHRfc2xvdCkgb24gdGhlIEluZGV4U2NhbkRlc2Mgd2hlbiB0aGUgdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90CnNoaW0gZnVuY3Rpb24gaXMgY2FsbGVkIGZyb20gZXhlY3V0 b3Igbm9kZXMuCgpUaGlzIG1vdmVzIFZNIGNoZWNrcyBmb3IgaW5kZXgtb25seSBzY2FucyBhbmQg aGVhcCB0dXBsZSBmZXRjaGluZyBmb3IKcGxhaW4gaW5kZXggc2NhbnMgb3V0IG9mIHRoZSBleGVj dXRvciBhbmQgaW50byBoZWFwYW0sIHdoZXJlIHRoZXkgY2FuIGJlCm1haW50YWluZWQgYWxvbmdz aWRlIHRoZSByZXN0IG9mIHRoZSB0YWJsZSBBTSBsb2dpYy4gIFRoaXMgaGlnaGVyIGxldmVsCmlu dGVyZmFjZSBncmVhdGx5IHNpbXBsaWZpZXMgbm9kZUluZGV4b25seXNjYW4uYywgd2hpY2ggbm8g bG9uZ2VyIG5lZWRzCnRvIGtub3cgYW55dGhpbmcgYWJvdXQgdGhlIHZpc2liaWxpdHkgbWFwIChu b3IgYWJvdXQgcHJlZGljYXRlIGxvY2tpbmcpLgoKQSBzbWFsbCBtaW5vcml0eSBvZiBjYWxsZXJz ICgyIGNhbGxlcnMgaW4gdG90YWwpIGNvbnRpbnVlIHRvIHVzZSB0aGUgb2xkCnRhYmxlX2luZGV4 X2ZldGNoX3R1cGxlIGludGVyZmFjZS4gIFRoaXMgaXMgc3RpbGwgbmVjZXNzYXJ5IHdpdGggY2Fs bGVycwp0aGF0IGZ1bmRhbWVudGFsbHkgbmVlZCB0byBwYXNzIGEgVElEIHRvIHRoZSB0YWJsZSBB TS4gIEluIHByYWN0aWNlIGJvdGgKY2FsbGVycyBwZXJmb3JtIHNvbWUga2luZCBvZiBjb25zdHJh aW50IGVuZm9yY2VtZW50LgoKWFhYIERvIHdlIHN0aWxsIG5lZWQgSW5kZXhGZXRjaFRhYmxlRGF0 YS5yZWw/ICBXZSBhcmUgbm93IG1vc3RseSB1c2luZwpJbmRleFNjYW5EZXNjRGF0YS5oZWFwUmVs YXRpb24sIGJ1dCB3ZSBjb3VsZCB1c2UgaXQgZm9yIGFic29sdXRlbHkKZXZlcnl0aGluZyBpZiB3 ZSB3ZXJlIHdpbGxpbmcgdG8gcmV2aXNlIHRoZSBzaWduYXR1cmUgb2YgdGhlIG9sZAp0YWJsZV9p bmRleF9mZXRjaF90dXBsZSBpbnRlcmZhY2UgYnkgZ2l2aW5nIGl0IGl0cyBvd24gaGVhcFJlbGF0 aW9uIGFyZy4KCkluZGV4LW9ubHkgc2NhbiBjYWxsZXJzIHBhc3MgdGFibGVfaW5kZXhfZ2V0bmV4 dF9zbG90IGEgVHVwbGVUYWJsZVNsb3QKKHdoaWNoIHRoZSB0YWJsZSBBTSBuZWVkcyBpbnRlcm5h bGx5IGZvciBoZWFwIGZldGNoZXMpLCBidXQgY29udGludWUgdG8KcmVhZCB0aGVpciByZXN1bHRz IGZyb20gSW5kZXhTY2FuRGVzY0RhdGEgZmllbGRzIHN1Y2ggYXMgeHNfaXR1cCAocmF0aGVyCnRo YW4gZnJvbSB0aGUgc2xvdCBpdHNlbGYpLiAgVGhpcyBjb252ZW50aW9uIGxldHMgYm90aCBwbGFp biBhbmQKaW5kZXgtb25seSBzY2FucyB1c2UgdGhlIHNhbWUgdGFibGVfaW5kZXhfZ2V0bmV4dF9z bG90IGludGVyZmFjZS4gIEFsbApjYWxsZXJzIGNhbiBjb250aW51ZSB0byByZWx5IG9uIHRoZSBz Y2FuIGRlc2NyaXB0b3IncyB4c19oZWFwdGlkIGZpZWxkCmJlaW5nIHNldCBvbiBlYWNoIGNhbGwu IChleGVjQ3VycmVudE9mIGlzIHRoZSBvbmx5IGNhbGxlciB0aGF0IHJlYWRzCnRoaXMgZmllbGQg ZGlyZWN0bHksIHRvIGRldGVybWluZSB0aGUgY3VycmVudCByb3cgb2YgYW4gaW5kZXgtb25seSBz Y2FuLApidXQgaXQgc2VlbXMgbGlrZSBhIGdvb2QgaWRlYSB0byBkbyB0aGUgc2FtZSB0aGluZyBm b3IgYWxsIGNhbGxlcnMpLgoKWFhYIFNob3VsZCBleGVjQ3VycmVudE9mIGNvbnRpbnVlIHRvIGRv IHRoaXM/ICBDYW4ndCBpdCBnZXQgdGhlIHNhbWUgVElECmZyb20gdGhlIHRhYmxlIHNsb3QgaW5z dGVhZD8KClRoZSBWSVNJVEVEX1BBR0VTX0xJTUlUIG1lY2hhbmlzbSB1c2VkIGJ5IGdldF9hY3R1 YWxfdmFyaWFibGVfcmFuZ2UgdG8KY2FwIHNjYW4gb3ZlcmhlYWQgZHVyaW5nIHBsYW5uaW5nIGlz IHJld29ya2VkIHRvIGdvIHRocm91Z2ggYSBuZXcgc2NhbgpkZXNjcmlwdG9yIGludGVyZmFjZSAo eHNfdmlzaXRlZF9wYWdlc19saW1pdCksIHJhdGhlciB0aGFuIHRyYWNraW5nIHRoZQpjb3N0cyBk aXJlY3RseSBhbmQgdGVybWluYXRpbmcgdGhlIHNjYW4gaXRzZWxmLCBpbiBhbiBhZC1ob2Mgd2F5 LiAgVGhpcwppcyBuZWNlc3NhcnkgYmVjYXVzZSBjYWxsZXJzIHRoYXQgdXNlIHRoZSBuZXcgc2xv dC1iYXNlZCBpbnRlcmZhY2Ugbm8KbG9uZ2VyIGhhdmUgZGlyZWN0IGFjY2VzcyB0byB3aGljaCBo ZWFwIGJsb2NrcyB3ZXJlIGZldGNoZWQgYnkgdGhlIHRhYmxlCkFNLiAgU2ltaWxhcmx5LCBub2Rl SW5kZXhvbmx5c2Nhbi5jIGNhbiBubyBsb25nZXIgdXNlIEluc3RyQ291bnRUdXBsZXMyCnRvIGNv dW50IGhlYXAgZmV0Y2hlcyBkdXJpbmcgYW4gRVhQTEFJTiBBTkFMWVpFLiAgSW5zdGVhZCBpdCBy ZWxpZXMgb24KaGVhcGFtIG1haW50YWluaW5nIGEgbmV3IEluZGV4U2Nhbkluc3RydW1lbnRhdGlv bi5udGFibGVmZXRjaGVzIGZpZWxkLgoKVGhvdWdoIGluZGVwZW5kZW50bHkgdXNlZnVsLCB0aGlz IGNvbW1pdCBpcyBhbHNvIHByZXBhcmF0b3J5IHdvcmsgZm9yIGFuCnVwY29taW5nIGNvbW1pdCB0 aGF0IHdpbGwgYWRkIGFuIGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlLCB3aGVyZQp0aGUg dGFibGUgQU0gdGFrZXMgZnVsbCByZXNwb25zaWJpbGl0eSBmb3IgbWFuYWdpbmcgdGhlIHByb2dy ZXNzIG9mCmluZGV4IHNjYW5zLgoKVGhlIGhlYXBhbSBpbXBsZW1lbnRhdGlvbnMgbWFrZSBhZ2dy ZXNzaXZlIHVzZSBvZiBmb3JjZWQgaW5saW5pbmcgdG8KZW5zdXJlIHRoYXQgcGxhaW4gYW5kIGlu ZGV4LW9ubHkgY29kZSBwYXRocyBhcmUgZnVsbHkgc3BlY2lhbGl6ZWQgYXQKY29tcGlsZSB0aW1l IGRlc3BpdGUgc2hhcmluZyBhIGNvbW1vbiBpbXBsZW1lbnRhdGlvbi4gIFRlc3RpbmcgaGFzIHNo b3duCnRoaXMgaXMgbmVjZXNzYXJ5IHRvIGtlZXAgaWNhY2hlIG1pc3NlcyB0byBhIG1pbmltdW0s IGF0IGxlYXN0IHdpdGggdGhlCnR3byB1cGNvbWluZyBhbWdldGJhdGNoIHZhcmlhbnRzLgoKQXV0 aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJl dW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJldmlld2VkLUJ5OiBUb21hcyBWb25kcmEgPHRvbWFz QHZvbmRyYS5tZT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9DQUgyLVd6bVlxaGFj QkgxNjFwZUFXYjVlRj1KYTdDRkFRKzBqU0VNcT1xbmZMVlRPT2dAbWFpbC5nbWFpbC5jb20KLS0t CiBzcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaCAgICAgICAgICAgICAgICAgfCAgIDUgKy0KIHNy Yy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAgICB8ICAgNiArCiBzcmMvaW5j bHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAgICAgICAgICAgICAgfCAgMTggKy0KIHNyYy9pbmNsdWRl L2FjY2Vzcy90YWJsZWFtLmggICAgICAgICAgICAgICB8ICA0NiArKysrLQogc3JjL2luY2x1ZGUv ZXhlY3V0b3IvaW5zdHJ1bWVudF9ub2RlLmggICAgIHwgICA1ICsKIHNyYy9pbmNsdWRlL25vZGVz L2V4ZWNub2Rlcy5oICAgICAgICAgICAgICB8ICAgMiAtCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVh cC9oZWFwYW1faGFuZGxlci5jICAgfCAgIDggKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hl YXBhbV9pbmRleHNjYW4uYyB8IDIyMyArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYyAgICB8ICAyNyArKy0KIHNyYy9iYWNrZW5kL2Fj Y2Vzcy9pbmRleC9nZW5hbS5jICAgICAgICAgICB8ICAxMSArLQogc3JjL2JhY2tlbmQvYWNjZXNz L2luZGV4L2luZGV4YW0uYyAgICAgICAgIHwgMjAzICsrKysrKy0tLS0tLS0tLS0tLS0KIHNyYy9i YWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyAgICAgICAgICAgICB8ICAyMyArKy0KIHNyYy9iYWNr ZW5kL2V4ZWN1dG9yL2V4ZWNJbmRleGluZy5jICAgICAgICB8ICAgNiArLQogc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgICAgIHwgICA4ICstCiBzcmMvYmFja2VuZC9leGVj dXRvci9ub2RlQml0bWFwSW5kZXhzY2FuLmMgfCAgIDEgKwogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYyAgIHwgMTA5ICstLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2V4ZWN1 dG9yL25vZGVJbmRleHNjYW4uYyAgICAgICB8ICAxMyArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0 L3NlbGZ1bmNzLmMgICAgICAgICAgIHwgIDYxICstLS0tLQogMTggZmlsZXMgY2hhbmdlZCwgNDQw IGluc2VydGlvbnMoKyksIDMzNSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvZ2VuYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCmluZGV4IDFhMjdi ZjA2MC4uYTdkNzg5MzVjIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaAor KysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvZ2VuYW0uaApAQCAtMTU2LDYgKzE1Niw3IEBAIGV4dGVy biB2b2lkIGluZGV4X2luc2VydF9jbGVhbnVwKFJlbGF0aW9uIGluZGV4UmVsYXRpb24sCiAKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24s CiAJCQkJCQkJCQkgUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKKwkJCQkJCQkJCSBib29sIGluZGV4 X29ubHlfc2NhbiwKIAkJCQkJCQkJCSBTbmFwc2hvdCBzbmFwc2hvdCwKIAkJCQkJCQkJCSBJbmRl eFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkJCQkgaW50IG5rZXlzLCBp bnQgbm9yZGVyYnlzKTsKQEAgLTE4MiwxNCArMTgzLDEyIEBAIGV4dGVybiB2b2lkIGluZGV4X3Bh cmFsbGVsc2Nhbl9pbml0aWFsaXplKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIGV4dGVybiB2b2lk IGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7CiBleHRlcm4gSW5kZXhT Y2FuRGVzYyBpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwoUmVsYXRpb24gaGVhcHJlbCwKIAkJCQkJ CQkJCQkJICBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCQkJCQkJICBib29sIGluZGV4X29ubHlf c2NhbiwKIAkJCQkJCQkJCQkJICBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQs CiAJCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJCQkJCQkgIFBh cmFsbGVsSW5kZXhTY2FuRGVzYyBwc2Nhbik7CiBleHRlcm4gSXRlbVBvaW50ZXIgaW5kZXhfZ2V0 bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLAogCQkJCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGly ZWN0aW9uKTsKLWV4dGVybiBib29sIGluZGV4X2ZldGNoX2hlYXAoSW5kZXhTY2FuRGVzYyBzY2Fu LCBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7Ci1leHRlcm4gYm9vbCBpbmRleF9nZXRuZXh0X3Nsb3Qo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKLQkJCQkJCQkgICBU dXBsZVRhYmxlU2xvdCAqc2xvdCk7CiBleHRlcm4gaW50NjQgaW5kZXhfZ2V0Yml0bWFwKEluZGV4 U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICpiaXRtYXApOwogCiBleHRlcm4gSW5kZXhCdWxrRGVs ZXRlUmVzdWx0ICppbmRleF9idWxrX2RlbGV0ZShJbmRleFZhY3V1bUluZm8gKmluZm8sCmRpZmYg LS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3Mv aGVhcGFtLmgKaW5kZXggNjJmMTVlMGIxLi44ZjljYzJmODggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKQEAg LTQzNiw2ICs0MzYsMTIgQEAgZXh0ZXJuIFRyYW5zYWN0aW9uSWQgaGVhcF9pbmRleF9kZWxldGVf dHVwbGVzKFJlbGF0aW9uIHJlbCwKIGV4dGVybiBJbmRleEZldGNoVGFibGVEYXRhICpoZWFwYW1f aW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKTsKIGV4dGVybiB2b2lkIGhlYXBhbV9pbmRl eF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKTsKIGV4dGVybiB2b2lkIGhl YXBhbV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nhbik7CitleHRlcm4g Ym9vbCBoZWFwYW1faW5kZXhfcGxhaW5fYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2Fu RGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJ CQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90KTsKK2V4dGVybiBib29sIGhlYXBhbV9p bmRleF9vbmx5X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwKKwkJ CQkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCSAgVHVw bGVUYWJsZVNsb3QgKnNsb3QpOwogZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxl KHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkJCQkJCQkJIEl0ZW1Qb2ludGVy IHRpZCwgU25hcHNob3Qgc25hcHNob3QsCiAJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs IGJvb2wgKmhlYXBfY29udGludWUsCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBjZTM0MGMwNzYuLjll MzJmMDIwOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0xNiw2ICsxNiw3IEBACiAKICNpbmNsdWRl ICJhY2Nlc3MvaHR1cF9kZXRhaWxzLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2l0dXAuaCIKKyNpbmNs dWRlICJhY2Nlc3Mvc2Rpci5oIgogI2luY2x1ZGUgIm5vZGVzL3RpZGJpdG1hcC5oIgogI2luY2x1 ZGUgInBvcnQvYXRvbWljcy5oIgogI2luY2x1ZGUgInN0b3JhZ2UvcmVsZmlsZWxvY2F0b3IuaCIK QEAgLTI0LDYgKzI1LDcgQEAKIAogCiBzdHJ1Y3QgUGFyYWxsZWxUYWJsZVNjYW5EZXNjRGF0YTsK K3N0cnVjdCBUdXBsZVRhYmxlU2xvdDsKIAogLyoKICAqIEdlbmVyaWMgZGVzY3JpcHRvciBmb3Ig dGFibGUgc2NhbnMuIFRoaXMgaXMgdGhlIGJhc2UtY2xhc3MgZm9yIHRhYmxlIHNjYW5zLApAQCAt MTQ5LDYgKzE1MSw4IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJ aWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8K IAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5n IGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLworCS8qIHhzX3NuYXBzaG90IHVzZXMgYW4g TVZDQyBzbmFwc2hvdD8gKi8KKwlib29sCQlNVkNDU2NhbjsKIAogCS8qIGluZGV4IGFjY2VzcyBt ZXRob2QncyBwcml2YXRlIHN0YXRlICovCiAJdm9pZAkgICAqb3BhcXVlOwkJCS8qIGFjY2Vzcy1t ZXRob2Qtc3BlY2lmaWMgaW5mbyAqLwpAQCAtMTcxLDEwICsxNzUsMTMgQEAgdHlwZWRlZiBzdHJ1 Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlzdHJ1Y3QgVHVwbGVEZXNjRGF0YSAqeHNfaGl0dXBkZXNj OyAvKiByb3d0eXBlIGRlc2NyaXB0b3Igb2YgeHNfaGl0dXAgKi8KIAogCUl0ZW1Qb2ludGVyRGF0 YSB4c19oZWFwdGlkOyAvKiByZXN1bHQgKi8KLQlib29sCQl4c19oZWFwX2NvbnRpbnVlOwkvKiBU IGlmIG11c3Qga2VlcCB3YWxraW5nLCBwb3RlbnRpYWwKLQkJCQkJCQkJCSAqIGZ1cnRoZXIgcmVz dWx0cyAqLwogCUluZGV4RmV0Y2hUYWJsZURhdGEgKnhzX2hlYXBmZXRjaDsKIAorCS8qIFJlc29s dmVkIGdldG5leHRfc2xvdCBpbXBsZW1lbnRhdGlvbiwgc2V0IGJ5IGluZGV4X2JlZ2luc2NhbiAq LworCWJvb2wJCSgqeHNfZ2V0bmV4dF9zbG90KSAoc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhICpz Y2FuLAorCQkJCQkJCQkJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCisJCQkJCQkJCQlzdHJ1Y3Qg VHVwbGVUYWJsZVNsb3QgKnNsb3QpOworCiAJYm9vbAkJeHNfcmVjaGVjazsJCS8qIFQgbWVhbnMg c2NhbiBrZXlzIG11c3QgYmUgcmVjaGVja2VkICovCiAKIAkvKgpAQCAtMTg4LDYgKzE5NSwxMyBA QCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5EZXNjRGF0YQogCWJvb2wJICAgKnhzX29yZGVyYnlu dWxsczsKIAlib29sCQl4c19yZWNoZWNrb3JkZXJieTsKIAorCS8qCisJICogQW4gYXBwcm94aW1h dGUgbGltaXQgb24gdGhlIGFtb3VudCBvZiB3b3JrLCBtZWFzdXJlZCBpbiBwYWdlcyB0b3VjaGVk LAorCSAqIGltcG9zZWQgb24gdGhlIGluZGV4IHNjYW4uICBUaGUgZGVmYXVsdCwgMCwgbWVhbnMg bm8gbGltaXQuICBVc2VkIGJ5CisJICogc2VsZnVuY3MuYyB0byBib3VuZCB0aGUgY29zdCBvZiBn ZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KCkuCisJICovCisJdWludDgJCXhzX3Zpc2l0ZWRf cGFnZXNfbGltaXQ7CisKIAkvKiBwYXJhbGxlbCBpbmRleCBzY2FuIGluZm9ybWF0aW9uLCBpbiBz aGFyZWQgbWVtb3J5ICovCiAJc3RydWN0IFBhcmFsbGVsSW5kZXhTY2FuRGVzY0RhdGEgKnBhcmFs bGVsX3NjYW47CiB9IEluZGV4U2NhbkRlc2NEYXRhOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5kZXggMDYw ODQ3NTIyLi4wOTBkMGM1NTYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFt LmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNDE4LDcgKzQxOCw5IEBA IHR5cGVkZWYgc3RydWN0IFRhYmxlQW1Sb3V0aW5lCiAJICogSW5kZXhGZXRjaFRhYmxlRGF0YSwg d2hpY2ggdGhlIEFNIHdpbGwgdHlwaWNhbGx5IGVtYmVkIGluIGEgbGFyZ2VyCiAJICogc3RydWN0 dXJlIHdpdGggYWRkaXRpb25hbCBpbmZvcm1hdGlvbi4KIAkgKgotCSAqIFR1cGxlcyBmb3IgYW4g aW5kZXggc2NhbiBjYW4gdGhlbiBiZSBmZXRjaGVkIHZpYSBpbmRleF9mZXRjaF90dXBsZS4KKwkg KiBUdXBsZXMgZm9yIGFuIGluZGV4IHNjYW4gY2FuIHRoZW4gYmUgZmV0Y2hlZCB2aWEgb25lIG9m IHRoZQorCSAqIHNsb3QtYmFzZWQgY2FsbGJhY2tzIGNhbGxlZCB0aHJvdWdoIHRhYmxlX2luZGV4 X2dldG5leHRfc2xvdCwgb3IgdmlhCisJICogdGhlIGxvd2VyLWxldmVsIFRJRC1iYXNlZCBpbmRl eF9mZXRjaF90dXBsZSBpbnRlcmZhY2UuCiAJICovCiAJc3RydWN0IEluZGV4RmV0Y2hUYWJsZURh dGEgKigqaW5kZXhfZmV0Y2hfYmVnaW4pIChSZWxhdGlvbiByZWwpOwogCkBAIC00MzMsMTEgKzQz NSwzMCBAQCB0eXBlZGVmIHN0cnVjdCBUYWJsZUFtUm91dGluZQogCSAqLwogCXZvaWQJCSgqaW5k ZXhfZmV0Y2hfZW5kKSAoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKmRhdGEpOwogCisJLyoK KwkgKiBGZXRjaCB0aGUgbmV4dCB0dXBsZSBmcm9tIGFuIGluZGV4IHNjYW4sIHNjYW5uaW5nIGlu IHRoZSBzcGVjaWZpZWQKKwkgKiBkaXJlY3Rpb24sIGFuZCByZXR1cm4gdHJ1ZSBpZiBhIHR1cGxl IHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgorCSAqCisJICogVHdvIHZhcmlhbnRzIGNvdmVy IHtwbGFpbiwgaW5kZXgtb25seX0gaW5kZXggc2NhbnMgdGhhdCB1c2UgYW1nZXR0dXBsZS4KKwkg KiBpbmRleF9iZWdpbnNjYW4gcmVzb2x2ZXMgd2hpY2ggdmFyaWFudCB0byB1c2UuICBDYWxsZXJz IHVzZQorCSAqIHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCgpLCB3aGljaCBjYWxscyB0aHJvdWdo IHRoYXQgcG9pbnRlciBkaXJlY3RseS4KKwkgKi8KKwlib29sCQkoKmluZGV4X3BsYWluX2FtZ2V0 dHVwbGVfZ2V0bmV4dF9zbG90KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCQkJCQlT Y2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwKKwkJCQkJCQkJCQkJCQkJVHVwbGVUYWJsZVNsb3QgKnNs b3QpOworCWJvb2wJCSgqaW5kZXhfb25seV9hbWdldHR1cGxlX2dldG5leHRfc2xvdCkgKEluZGV4 U2NhbkRlc2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbiwK KwkJCQkJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNo IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVz dAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQg cGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVy d2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2Vz IGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBmYXZvciB0aGUgdGFi bGVfaW5kZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrcyB3aGVuZXZlcgorCSAqIHBvc3NpYmxlLgor CSAqCiAJICogTm90ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5k ZXhlcyB3aGVuIGluZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0 dXJuIHRoZSBjdXJyZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlz IHZpc2libGUgdG8gdGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBA IC0xMjA3LDYgKzEyMjgsMjkgQEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZl dGNoVGFibGVEYXRhICpzY2FuKQogCXNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hf ZW5kKHNjYW4pOwogfQogCisvKgorICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRl eCBzY2FuIGludG8gYHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAqIHNwZWNpZmllZCBkaXJlY3Rp b24uIFJldHVybnMgdHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgor ICoKKyAqIERpc3BhdGNoZXMgdGhyb3VnaCBzY2FuLT54c19nZXRuZXh0X3Nsb3QsIHdoaWNoIGlz IHJlc29sdmVkIG9uY2UgYnkKKyAqIGluZGV4X2JlZ2luc2Nhbi4KKyAqCisgKiBPbiBzdWNjZXNz LCB0aGUgZm9sbG93aW5nIEluZGV4U2NhbkRlc2MgZmllbGRzIGFyZSBzZXQgYnkgdGhlIGNhbGxi YWNrOgorICoKKyAqIHhzX3JlY2hlY2sgICAgLSB0cnVlIGlmIHNjYW4ga2V5cyBtdXN0IGJlIHJl Y2hlY2tlZCBhZ2FpbnN0IHRoZSB0dXBsZQorICogeHNfaGVhcHRpZCAgICAtIHRhYmxlIFRJRCBv ZiB0aGUgcmV0dXJuZWQgdHVwbGUKKyAqCisgKiBGb3IgaW5kZXgtb25seSBzY2FucywgdGhlIGNh bGxiYWNrIGFsc28gZmlsbHMgeHNfaXR1cC94c19pdHVwZGVzYyBvcgorICogeHNfaGl0dXAveHNf aGl0dXBkZXNjIChvciBib3RoKSBzbyB0aGF0IGluZGV4IGRhdGEgY2FuIGJlIHJldHVybmVkIHdp dGhvdXQKKyAqIGEgaGVhcCBmZXRjaC4KKyAqLworc3RhdGljIGlubGluZSBib29sCit0YWJsZV9p bmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBpc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJl Y3Rpb24sCisJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJcmV0dXJuIGlzY2FuLT54 c19nZXRuZXh0X3Nsb3QoaXNjYW4sIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRj aGVzLCBhcyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3Rg LCBhZnRlciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hv dGAuIElmIGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQKZGlmZiAtLWdpdCBhL3NyYy9pbmNs dWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oIGIvc3JjL2luY2x1ZGUvZXhlY3V0b3IvaW5z dHJ1bWVudF9ub2RlLmgKaW5kZXggODg0N2Q3Zjk0Li5jMzNmNjQ2NzUgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL2V4ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCisrKyBiL3NyYy9pbmNsdWRlL2V4 ZWN1dG9yL2luc3RydW1lbnRfbm9kZS5oCkBAIC00OCw2ICs0OCwxMSBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KIHsKIAkvKiBJbmRleCBzZWFyY2ggY291bnQgKGlu Y3JlbWVudGVkIHdpdGggcGdzdGF0X2NvdW50X2luZGV4X3NjYW4gY2FsbCkgKi8KIAl1aW50NjQJ CW5zZWFyY2hlczsKKworCS8qCisJICogdGFibGUgYmxvY2tzIGZldGNoZWQgY291bnQgKGluY3Jl bWVudGVkIGR1cmluZyBpbmRleC1vbmx5IHNjYW5zKQorCSAqLworCXVpbnQ2NAkJbnRhYmxlZmV0 Y2hlczsKIH0gSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uOwogCiAvKgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMu aAppbmRleCA2ODRlMzk4ZjguLjRjNmEwNjUyMyAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvZXhlY25vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmgKQEAgLTE3 NjMsNyArMTc2Myw2IEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhblN0YXRlCiAgKgkJSW5zdHJ1 bWVudAkJICAgbG9jYWwgaW5kZXggc2NhbiBpbnN0cnVtZW50YXRpb24KICAqCQlTaGFyZWRJbmZv CQkgICBwYXJhbGxlbCB3b3JrZXIgaW5zdHJ1bWVudGF0aW9uIChubyBsZWFkZXIgZW50cnkpCiAg KgkJVGFibGVTbG90CQkgICBzbG90IGZvciBob2xkaW5nIHR1cGxlcyBmZXRjaGVkIGZyb20gdGhl IHRhYmxlCi0gKgkJVk1CdWZmZXIJCSAgIGJ1ZmZlciBpbiB1c2UgZm9yIHZpc2liaWxpdHkgbWFw IHRlc3RpbmcsIGlmIGFueQogICoJCVBzY2FuTGVuCQkgICBzaXplIG9mIHBhcmFsbGVsIGluZGV4 LW9ubHkgc2NhbiBkZXNjcmlwdG9yCiAgKgkJTmFtZUNTdHJpbmdBdHROdW1zIGF0dG51bXMgb2Yg bmFtZSB0eXBlZCBjb2x1bW5zIHRvIHBhZCB0byBOQU1FREFUQUxFTgogICoJCU5hbWVDU3RyaW5n Q291bnQgICBudW1iZXIgb2YgZWxlbWVudHMgaW4gdGhlIE5hbWVDU3RyaW5nQXR0TnVtcyBhcnJh eQpAQCAtMTc4Niw3ICsxNzg1LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPbmx5U2NhblN0YXRl CiAJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX0luc3RydW1lbnQ7CiAJU2hhcmVkSW5k ZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppb3NzX1NoYXJlZEluZm87CiAJVHVwbGVUYWJsZVNsb3Qg Kmlvc3NfVGFibGVTbG90OwotCUJ1ZmZlcgkJaW9zc19WTUJ1ZmZlcjsKIAlTaXplCQlpb3NzX1Bz Y2FuTGVuOwogCUF0dHJOdW1iZXIgKmlvc3NfTmFtZUNTdHJpbmdBdHROdW1zOwogCWludAkJCWlv c3NfTmFtZUNTdHJpbmdDb3VudDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxl ci5jCmluZGV4IGVmZjI3NmYwZC4uMzIyMjZkY2UyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9oYW5kbGVyLmMKQEAgLTY1NCw3ICs2NTQsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29w eV9mb3JfY2x1c3RlcihSZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCXRh YmxlU2NhbiA9IE5VTEw7CiAJCWhlYXBTY2FuID0gTlVMTDsKLQkJaW5kZXhTY2FuID0gaW5kZXhf YmVnaW5zY2FuKE9sZEhlYXAsIE9sZEluZGV4LCBTbmFwc2hvdEFueSwgTlVMTCwgMCwgMCk7CisJ CWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgZmFsc2UsIFNu YXBzaG90QW55LAorCQkJCQkJCQkJTlVMTCwgMCwgMCk7CiAJCWluZGV4X3Jlc2NhbihpbmRleFNj YW4sIE5VTEwsIDAsIE5VTEwsIDApOwogCX0KIAllbHNlCkBAIC02OTEsNyArNjkyLDggQEAgaGVh cGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwgUmVsYXRpb24g TmV3SGVhcCwKIAogCQlpZiAoaW5kZXhTY2FuICE9IE5VTEwpCiAJCXsKLQkJCWlmICghaW5kZXhf Z2V0bmV4dF9zbG90KGluZGV4U2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQkJ aWYgKCF0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVj dGlvbiwKKwkJCQkJCQkJCQkgIHNsb3QpKQogCQkJCWJyZWFrOwogCiAJCQkvKiBTaW5jZSB3ZSB1 c2VkIG5vIHNjYW4ga2V5cywgc2hvdWxkIG5ldmVyIG5lZWQgdG8gcmVjaGVjayAqLwpAQCAtMjU1 MCw2ICsyNTUyLDggQEAgc3RhdGljIGNvbnN0IFRhYmxlQW1Sb3V0aW5lIGhlYXBhbV9tZXRob2Rz ID0gewogCS5pbmRleF9mZXRjaF9iZWdpbiA9IGhlYXBhbV9pbmRleF9mZXRjaF9iZWdpbiwKIAku aW5kZXhfZmV0Y2hfcmVzZXQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQsCiAJLmluZGV4X2Zl dGNoX2VuZCA9IGhlYXBhbV9pbmRleF9mZXRjaF9lbmQsCisJLmluZGV4X3BsYWluX2FtZ2V0dHVw bGVfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4X3BsYWluX2FtZ2V0dHVwbGVfZ2V0bmV4dF9z bG90LAorCS5pbmRleF9vbmx5X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90ID0gaGVhcGFtX2luZGV4 X29ubHlfYW1nZXR0dXBsZV9nZXRuZXh0X3Nsb3QsCiAJLmluZGV4X2ZldGNoX3R1cGxlID0gaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlLAogCiAJLnR1cGxlX2luc2VydCA9IGhlYXBhbV90dXBsZV9p bnNlcnQsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhz Y2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKaW5kZXgg NGU4MjMwODM0Li5kZTgxMmE0NjIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1f aW5kZXhzY2FuLmMKQEAgLTE0LDkgKzE0LDI3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5o IgogCisjaW5jbHVkZSAiYWNjZXNzL2FtYXBpLmgiCiAjaW5jbHVkZSAiYWNjZXNzL2hlYXBhbS5o IgorI2luY2x1ZGUgImFjY2Vzcy92aXNpYmlsaXR5bWFwLmgiCisjaW5jbHVkZSAic3RvcmFnZS9w cmVkaWNhdGUuaCIKKyNpbmNsdWRlICJ1dGlscy9wZ3N0YXRfaW50ZXJuYWwuaCIKIAogCitzdGF0 aWMgcGdfYXR0cmlidXRlX2Fsd2F5c19pbmxpbmUgYm9vbCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGVfaW1wbChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKKwkJCQkJCQkJCQkJCQkJ CQkJIEl0ZW1Qb2ludGVyIHRpZCwKKwkJCQkJCQkJCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90 LAorCQkJCQkJCQkJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCisJCQkJCQkJCQkJCQkJ CQkJCSBib29sICpoZWFwX2NvbnRpbnVlLAorCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCAqYWxsX2Rl YWQpOworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJvb2wgaGVhcGFtX2luZGV4 X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCQkJCQkJIFNjYW5E aXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCQkJCQkJCSBUdXBsZVRhYmxlU2xvdCAqc2xv dCwKKwkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5KTsKK3N0YXRpYyBwZ19hdHRyaWJ1 dGVfYWx3YXlzX2lubGluZSBib29sIGhlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRl c2Mgc2NhbiwKKwkJCQkJCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90LAorCQkJCQkJ CQkJCQkJCQkJICAgYm9vbCAqaGVhcF9jb250aW51ZSk7CisKIC8qIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQog ICogSW5kZXggU2NhbiBDYWxsYmFja3MgZm9yIGhlYXAgQU0KICAqIC0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA QCAtNjIsNiArODAsMzAgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVE YXRhICpzY2FuKQogCXBmcmVlKGhzY2FuKTsKIH0KIAorLyogYW1nZXR0dXBsZSwgcGxhaW4gaW5k ZXggc2NhbiAqLworcGdfYXR0cmlidXRlX2hvdCBib29sCitoZWFwYW1faW5kZXhfcGxhaW5fYW1n ZXR0dXBsZV9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJCSAgIFNj YW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAgIFR1cGxlVGFibGVTbG90ICpzbG90 KQoreworCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwlBc3NlcnQoc2Nhbi0+aW5kZXhS ZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0dHVwbGUgIT0gTlVMTCk7CisKKwlyZXR1cm4gaGVhcGFt X2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBkaXJlY3Rpb24sIHNsb3QsIGZhbHNlKTsKK30KKwor LyogYW1nZXR0dXBsZSwgaW5kZXgtb25seSBzY2FuICovCitwZ19hdHRyaWJ1dGVfaG90IGJvb2wK K2hlYXBhbV9pbmRleF9vbmx5X2FtZ2V0dHVwbGVfZ2V0bmV4dF9zbG90KEluZGV4U2NhbkRlc2Mg c2NhbiwKKwkJCQkJCQkJCQkgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJQXNzZXJ0KHNjYW4tPnhzX3dhbnRfaXR1cCk7CisJ QXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldHR1cGxlICE9IE5VTEwp OworCisJcmV0dXJuIGhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgZGlyZWN0aW9uLCBz bG90LCB0cnVlKTsKK30KKwogYm9vbAogaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJ bmRleEZldGNoVGFibGVEYXRhICpzY2FuLAogCQkJCQkJIEl0ZW1Qb2ludGVyIHRpZCwKQEAgLTY5 LDYgKzExMSwxOCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4sCiAJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsCiAJCQkJCQkgYm9v bCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCiB7CisKKwlyZXR1cm4gaGVhcGFtX2lu ZGV4X2ZldGNoX3R1cGxlX2ltcGwoc2NhbiwgdGlkLCBzbmFwc2hvdCwgc2xvdCwKKwkJCQkJCQkJ CQkgaGVhcF9jb250aW51ZSwgYWxsX2RlYWQpOworfQorCitzdGF0aWMgcGdfYXR0cmlidXRlX2Fs d2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlX2ltcGwoc3RydWN0IElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCisJCQkJCQkJICBJdGVtUG9pbnRlciB0aWQsCisJCQkJ CQkJICBTbmFwc2hvdCBzbmFwc2hvdCwKKwkJCQkJCQkgIFR1cGxlVGFibGVTbG90ICpzbG90LAor CQkJCQkJCSAgYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQpCit7CiAJSW5kZXhG ZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAlCdWZm ZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBsZVRhYmxlU2xvdCAq KSBzbG90OwogCWJvb2wJCWdvdF9oZWFwX3R1cGxlOwpAQCAtMTI0LDMgKzE3OCwxNzIgQEAgaGVh cGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAog CiAJcmV0dXJuIGdvdF9oZWFwX3R1cGxlOwogfQorCisvKgorICogQ29tbW9uIGltcGxlbWVudGF0 aW9uIGZvciBib3RoIGhlYXBhbV9pbmRleF8qX2dldG5leHRfc2xvdCB2YXJpYW50cy4KKyAqCisg KiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMg YW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVw bGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdp bGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNh bGwgdG8gaGVhcGFtX2luZGV4X2ZldGNoX2VuZAorICogdGhyb3VnaCBpbmRleF9lbmRzY2FuKS4K KyAqCisgKiBUaGUgaW5kZXhfb25seSBwYXJhbWV0ZXIgaXMgYSBjb21waWxlLXRpbWUgY29uc3Rh bnQgYXQgZWFjaCBjYWxsIHNpdGUsCisgKiBhbGxvd2luZyB0aGUgY29tcGlsZXIgdG8gc3BlY2lh bGl6ZSB0aGUgY29kZSBmb3IgZWFjaCB2YXJpYW50LgorICovCitzdGF0aWMgcGdfYXR0cmlidXRl X2Fsd2F5c19pbmxpbmUgYm9vbAoraGVhcGFtX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJICBUdXBsZVRhYmxlU2xv dCAqc2xvdCwgYm9vbCBpbmRleF9vbmx5KQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4g PSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW4tPnhzX2hlYXBmZXRjaDsKKwlJdGVtUG9pbnRl ciB0aWQ7CisJYm9vbAkJaGVhcF9jb250aW51ZSA9IGZhbHNlOworCWJvb2wJCWFsbF92aXNpYmxl ID0gZmFsc2U7CisJQmxvY2tOdW1iZXIgbGFzdF92aXNpdGVkX2Jsb2NrID0gSW52YWxpZEJsb2Nr TnVtYmVyOworCXVpbnQ4CQluX3Zpc2l0ZWRfcGFnZXMgPSAwLAorCQkJCXhzX3Zpc2l0ZWRfcGFn ZXNfbGltaXQgPSAwOworCisJaWYgKGluZGV4X29ubHkpCisJCXhzX3Zpc2l0ZWRfcGFnZXNfbGlt aXQgPSBzY2FuLT54c192aXNpdGVkX3BhZ2VzX2xpbWl0OworCisJZm9yICg7OykKKwl7CisJCWlm ICghaGVhcF9jb250aW51ZSkKKwkJeworCQkJLyogR2V0IHRoZSBuZXh0IFRJRCBmcm9tIHRoZSBp bmRleCAqLworCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90aWQoc2NhbiwgZGlyZWN0aW9uKTsKKwor CQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJpZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlm ICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKworCQkJLyogRm9yIGluZGV4LW9ubHkgc2NhbnMs IGNoZWNrIHRoZSB2aXNpYmlsaXR5IG1hcCAqLworCQkJaWYgKGluZGV4X29ubHkpCisJCQkJYWxs X3Zpc2libGUgPSBWTV9BTExfVklTSUJMRShzY2FuLT5oZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJ CSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCQkJCSAmaHNjYW4tPnhz X3ZtYnVmZmVyKTsKKwkJfQorCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhz X2hlYXB0aWQpKTsKKworCQlpZiAoaW5kZXhfb25seSkKKwkJeworCQkJLyoKKwkJCSAqIFdlIGNh biBza2lwIHRoZSBoZWFwIGZldGNoIGlmIHRoZSBUSUQgcmVmZXJlbmNlcyBhIGhlYXAgcGFnZSBv bgorCQkJICogd2hpY2ggYWxsIHR1cGxlcyBhcmUga25vd24gdmlzaWJsZSB0byBldmVyeWJvZHku ICBJbiBhbnkgY2FzZSwKKwkJCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBo ZWFwIHR1cGxlIGFzIHRoZSBkYXRhCisJCQkgKiBzb3VyY2UuCisJCQkgKi8KKwkJCWlmICghYWxs X3Zpc2libGUpCisJCQl7CisJCQkJLyoKKwkJCQkgKiBSYXRzLCB3ZSBoYXZlIHRvIHZpc2l0IHRo ZSBoZWFwIHRvIGNoZWNrIHZpc2liaWxpdHkuCisJCQkJICovCisJCQkJaWYgKHNjYW4tPmluc3Ry dW1lbnQpCisJCQkJCXNjYW4tPmluc3RydW1lbnQtPm50YWJsZWZldGNoZXMrKzsKKworCQkJCWlm ICghaGVhcGFtX2luZGV4X2ZldGNoX2hlYXAoc2Nhbiwgc2xvdCwgJmhlYXBfY29udGludWUpKQor CQkJCXsKKwkJCQkJLyoKKwkJCQkJICogTm8gdmlzaWJsZSB0dXBsZS4gIElmIGNhbGxlciBzZXQg YSB2aXNpdGVkLXBhZ2VzIGxpbWl0CisJCQkJCSAqIChvbmx5IHNlbGZ1bmNzLmMgZG9lcyB0aGlz KSwgY291bnQgZGlzdGluY3QgaGVhcCBwYWdlcworCQkJCQkgKiBhbmQgZ2l2ZSB1cCBvbmNlIHdl J3ZlIHZpc2l0ZWQgdG9vIG1hbnkuCisJCQkJCSAqLworCQkJCQlpZiAodW5saWtlbHkoeHNfdmlz aXRlZF9wYWdlc19saW1pdCA+IDApKQorCQkJCQl7CisJCQkJCQlCbG9ja051bWJlciBibGsgPSBJ dGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisKKwkJCQkJCWlmIChibGsgIT0gbGFzdF92 aXNpdGVkX2Jsb2NrKQorCQkJCQkJeworCQkJCQkJCWxhc3RfdmlzaXRlZF9ibG9jayA9IGJsazsK KwkJCQkJCQlpZiAoKytuX3Zpc2l0ZWRfcGFnZXMgPiB4c192aXNpdGVkX3BhZ2VzX2xpbWl0KQor CQkJCQkJCQlyZXR1cm4gZmFsc2U7CS8qIGdpdmUgdXAgKi8KKwkJCQkJCX0KKwkJCQkJfQorCQkJ CQljb250aW51ZTsJLyogbm8gdmlzaWJsZSB0dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8K KwkJCQl9CisKKwkJCQlFeGVjQ2xlYXJUdXBsZShzbG90KTsKKworCQkJCS8qCisJCQkJICogT25s eSBNVkNDIHNuYXBzaG90cyBhcmUgc3VwcG9ydGVkIHdpdGggc3RhbmRhcmQgaW5kZXgtb25seQor CQkJCSAqIHNjYW5zLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxvd2lu ZyB0aGUgSE9UCisJCQkJICogY2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzIGJlZW4gZm91 bmQuICBPdGhlciBjYWxsZXJzCisJCQkJICogKGN1cnJlbnRseSBvbmx5IHNlbGZ1bmNzLmMpIHVz ZSBTbmFwc2hvdE5vblZhY3V1bWFibGUsIGFuZAorCQkJCSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRo YXQganVzdCBoYXZpbmcgb25lIHZpc2libGUgdHVwbGUgaW4gdGhlCisJCQkJICogaG90IGNoYWlu IGlzIGFsd2F5cyBnb29kIGVub3VnaC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIShoZWFwX2NvbnRp bnVlICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhzX3NuYXBzaG90KSkpOworCQkJfQorCQkJZWxz ZQorCQkJeworCQkJCS8qCisJCQkJICogV2UgZGlkbid0IGFjY2VzcyB0aGUgaGVhcCwgc28gd2Un bGwgbmVlZCB0byB0YWtlIGEKKwkJCQkgKiBwcmVkaWNhdGUgbG9jayBleHBsaWNpdGx5LCBhcyBp ZiB3ZSBoYWQuICBGb3Igbm93IHdlIGRvCisJCQkJICogdGhhdCBhdCBwYWdlIGxldmVsLgorCQkJ CSAqLworCQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW4tPmhlYXBSZWxhdGlvbiwKKwkJCQkJCQkJ ICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJCQkJCSAgc2Nhbi0+eHNfc25h cHNob3QpOworCQkJfQorCisJCQkvKgorCQkJICogUmV0dXJuIG1hdGNoaW5nIGluZGV4IHR1cGxl IG5vdyBzZXQgaW4gc2Nhbi0+eHNfaXR1cCAob3IgcmV0dXJuCisJCQkgKiBtYXRjaGluZyBoZWFw IHR1cGxlIG5vdyBzZXQgaW4gc2Nhbi0+eHNfaGl0dXApCisJCQkgKi8KKwkJCXJldHVybiB0cnVl OworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5 KSB2aXNpYmxlIGhlYXAgdHVwbGUgZm9yIHRoaXMgaW5kZXgKKwkJCSAqIGVudHJ5LiAgSWYgd2Ug ZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQgYW5kIGdyYWIgdGhlCisJCQkgKiBuZXh0 IFRJRCBmcm9tIHRoZSBpbmRleC4KKwkJCSAqLworCQkJaWYgKGhlYXBhbV9pbmRleF9mZXRjaF9o ZWFwKHNjYW4sIHNsb3QsICZoZWFwX2NvbnRpbnVlKSkKKwkJCQlyZXR1cm4gdHJ1ZTsKKwkJfQor CX0KKworCXJldHVybiBmYWxzZTsKK30KKworLyoKKyAqIEdldCB0aGUgc2NhbidzIG5leHQgaGVh cCB0dXBsZS4KKyAqCisgKiBUaGUgcmVzdWx0IGlzIGEgdmlzaWJsZSBoZWFwIHR1cGxlIGFzc29j aWF0ZWQgd2l0aCB0aGUgaW5kZXggVElEIG1vc3QKKyAqIHJlY2VudGx5IGZldGNoZWQgYnkgb3Vy IGNhbGxlciBpbiBzY2FuLT54c19oZWFwdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUKKyAqIG1hdGNo aW5nIHR1cGxlcyBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGluZyB0 dXBsZSBiZWNhdXNlCisgKiBvZiBIT1QgY2hhaW5zLCBhbHRob3VnaCB3aGVuIHVzaW5nIGFuIE1W Q0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUKKyAqIGZvciBtb3JlIHRoYW4gb25l IHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQorICoKKyAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIgY29u dGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkLiAgVGhlIHBpbiBtdXN0IGJlCisgKiBkcm9w cGVkIGVsc2V3aGVyZS4KKyAqLworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIGJv b2wKK2hlYXBhbV9pbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQlib29sICpoZWFwX2NvbnRpbnVlKQoreworCWJvb2wJCWFsbF9k ZWFkID0gZmFsc2U7CisJYm9vbAkJZm91bmQ7CisKKwlmb3VuZCA9IGhlYXBhbV9pbmRleF9mZXRj aF90dXBsZV9pbXBsKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCisJCQkJ CQkJCQkJICBzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKKwkJCQkJCQkJCQkgIGhlYXBfY29udGlu dWUsICZhbGxfZGVhZCk7CisKKwlpZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNo KHNjYW4tPmluZGV4UmVsYXRpb24pOworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUg SE9UIGNoYWluIGFuZCBmb3VuZCBvbmx5IGRlYWQgdHVwbGVzLCB0ZWxsIGluZGV4CisJICogQU0g dG8ga2lsbCBpdHMgZW50cnkgZm9yIHRoYXQgVElEICh0aGlzIHdpbGwgdGFrZSBlZmZlY3QgaW4g dGhlIG5leHQKKwkgKiBhbWdldHR1cGxlIGNhbGwsIGluIGluZGV4X2dldG5leHRfdGlkKS4gIFdl IGRvIG5vdCBkbyB0aGlzIHdoZW4gaW4KKwkgKiByZWNvdmVyeSBiZWNhdXNlIGl0IG1heSB2aW9s YXRlIE1WQ0MgdG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4KKwkgKiBSZWxhdGlvbkdldEluZGV4 U2NhbigpLgorCSAqLworCWlmICghc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5KQorCQlzY2Fu LT5raWxsX3ByaW9yX3R1cGxlID0gYWxsX2RlYWQ7CisKKwlyZXR1cm4gZm91bmQ7Cit9CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKaW5kZXggNGZkNDcwNzAyLi40YmE5ZjQ4 ZTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL3Zpc2liaWxpdHltYXAuYwor KysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC92aXNpYmlsaXR5bWFwLmMKQEAgLTMxMyw3ICsz MTMsMzIgQEAgdmlzaWJpbGl0eW1hcF9zZXQoQmxvY2tOdW1iZXIgaGVhcEJsaywKICAqIHNpbmNl IHdlIGRvbid0IGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIHBhZ2UgZWl0aGVyLCBpdCdzIGV2ZW4g cG9zc2libGUgdGhhdAogICogc29tZW9uZSBlbHNlIGNvdWxkIGhhdmUgY2hhbmdlZCB0aGUgYml0 IGp1c3QgYmVmb3JlIHdlIGxvb2sgYXQgaXQsIGJ1dCB5ZXQKICAqIHdlIG1pZ2h0IHNlZSB0aGUg b2xkIHZhbHVlLiAgSXQgaXMgdGhlIGNhbGxlcidzIHJlc3BvbnNpYmlsaXR5IHRvIGRlYWwgd2l0 aAotICogYWxsIGNvbmN1cnJlbmN5IGlzc3VlcyEKKyAqIGFsbCBjb25jdXJyZW5jeSBpc3N1ZXMh ICBJbiBwcmFjdGljZSBpdCBjYW4ndCBiZSBzdGFsZSBlbm91Z2ggdG8gbWF0dGVyIGZvcgorICog dGhlIHByaW1hcnkgdXNlIGNhc2U6IGluZGV4LW9ubHkgc2NhbnMgdGhhdCBjaGVjayB3aGV0aGVy IGEgaGVhcCBmZXRjaCBjYW4KKyAqIGJlIHNraXBwZWQuCisgKgorICogVGhlIGFyZ3VtZW50IGZv ciB3aHkgaXQgY2FuJ3QgYmUgc3RhbGUgZW5vdWdoIHRvIG1hdHRlciBmb3IgdGhlIHByaW1hcnkg dXNlCisgKiBjYXNlIGlzIGFzIGZvbGxvd3M6CisgKgorICogSW5zZXJ0czogd2UgbmVlZCB0byBk ZXRlY3QgdGhhdCBhIFZNIGJpdCB3YXMgY2xlYXJlZCBieSBhbiBpbnNlcnQgcmlnaHQKKyAqIGF3 YXksIGJlY2F1c2UgdGhlIG5ldyB0dXBsZSBpcyBwcmVzZW50IGluIHRoZSBpbmRleCBidXQgbm90 IHlldCB2aXNpYmxlLgorICogUmVhZGluZyB0aGUgVElEIGZyb20gdGhlIGluZGV4IHBhZ2UgKHVu ZGVyIGEgc2hhcmVkIGxvY2sgb24gdGhlIGluZGV4CisgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQg d2l0aCB0aGUgaW5zZXJ0aW9uIG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXggKHVuZGVyCisgKiBh biBleGNsdXNpdmUgbG9jayBvbiB0aGUgc2FtZSBpbmRleCBidWZmZXIpLiAgQmVjYXVzZSB0aGUg Vk0gYml0IGlzIGNsZWFyZWQKKyAqIGJlZm9yZSB0aGUgaW5kZXggaXMgdXBkYXRlZCwgYW5kIGxv Y2tpbmcvdW5sb2NraW5nIG9mIHRoZSBpbmRleCBwYWdlIGFjdHMKKyAqIGFzIGEgZnVsbCBtZW1v cnkgYmFycmllciwgd2UgYXJlIHN1cmUgdG8gc2VlIHRoZSBjbGVhcmVkIGJpdCB3aGVuZXZlciB3 ZQorICogc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgorICoKKyAqIERlbGV0ZXM6IHRoZSBj bGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIE5PVCBzZXJpYWxpemVkIHdpdGgg dGhlCisgKiBpbmRleCBwYWdlIGFjY2VzcywgYmVjYXVzZSBkZWxldGVzIGRvIG5vdCB1cGRhdGUg dGhlIGluZGV4IHBhZ2UgKG9ubHkKKyAqIFZBQ1VVTSByZW1vdmVzIHRoZSBpbmRleCBUSUQpLiAg U28gd2UgbWF5IHNlZSBhIHNpZ25pZmljYW50bHkgc3RhbGUgdmFsdWUuCisgKiBIb3dldmVyLCB3 ZSBkb24ndCBuZWVkIHRvIGRldGVjdCB0aGUgZGVsZXRlIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhl IHR1cGxlCisgKiByZW1haW5zIHZpc2libGUgdW50aWwgdGhlIGRlbGV0aW5nIHRyYW5zYWN0aW9u IGNvbW1pdHMgb3IgdGhlIHN0YXRlbWVudAorICogZW5kcyAoaWYgaXQncyBvdXIgb3duIHRyYW5z YWN0aW9uKS4gIEluIGVpdGhlciBjYXNlLCB0aGUgbG9jayBvbiB0aGUgVk0KKyAqIGJ1ZmZlciB3 aWxsIGhhdmUgYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIg Y2xlYXJpbmcKKyAqIHRoZSBiaXQuICBBbmQgZm9yIHVzIHRvIGhhdmUgYSBzbmFwc2hvdCB0aGF0 IGluY2x1ZGVzIHRoZSBkZWxldGluZworICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUg aW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCisgKiBQcm9jQXJyYXlMb2NrIGFmdGVy IHRoYXQgdGltZSwgYWN0aW5nIGFzIGEgcmVhZCBiYXJyaWVyLgogICovCiB1aW50OAogdmlzaWJp bGl0eW1hcF9nZXRfc3RhdHVzKFJlbGF0aW9uIHJlbCwgQmxvY2tOdW1iZXIgaGVhcEJsaywgQnVm ZmVyICp2bWJ1ZikKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2dlbmFtLmMKaW5kZXggNWU4OWI4NmE2Li4wZmY3 NzEzNWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9nZW5hbS5jCkBAIC0xMjYsNiArMTI2LDggQEAgUmVs YXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCXNjYW4tPnhzX2hpdHVwID0gTlVMTDsKIAlzY2FuLT54c19oaXR1cGRlc2Mg PSBOVUxMOwogCisJc2Nhbi0+eHNfdmlzaXRlZF9wYWdlc19saW1pdCA9IDA7CisKIAlyZXR1cm4g c2NhbjsKIH0KIApAQCAtNDU0LDcgKzQ1Niw3IEBAIHN5c3RhYmxlX2JlZ2luc2NhbihSZWxhdGlv biBoZWFwUmVsYXRpb24sCiAJCQkJZWxvZyhFUlJPUiwgImNvbHVtbiBpcyBub3QgaW4gaW5kZXgi KTsKIAkJfQogCi0JCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlv biwgaXJlbCwKKwkJc3lzc2Nhbi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9u LCBpcmVsLCBmYWxzZSwKIAkJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAkJ aW5kZXhfcmVzY2FuKHN5c3NjYW4tPmlzY2FuLCBpZHhrZXksIG5rZXlzLCBOVUxMLCAwKTsKIAkJ c3lzc2Nhbi0+c2NhbiA9IE5VTEw7CkBAIC01MTcsNyArNTE5LDggQEAgc3lzdGFibGVfZ2V0bmV4 dChTeXNTY2FuRGVzYyBzeXNzY2FuKQogCiAJaWYgKHN5c3NjYW4tPmlyZWwpCiAJewotCQlpZiAo aW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwg c3lzc2Nhbi0+c2xvdCkpCisJCWlmICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc3lzc2Nhbi0+ aXNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLAorCQkJCQkJCQkJIHN5c3NjYW4tPnNsb3QpKQog CQl7CiAJCQlib29sCQlzaG91bGRGcmVlOwogCkBAIC03MTUsNyArNzE4LDcgQEAgc3lzdGFibGVf YmVnaW5zY2FuX29yZGVyZWQoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCWlmIChUcmFuc2FjdGlv bklkSXNWYWxpZChDaGVja1hpZEFsaXZlKSkKIAkJYnN5c3NjYW4gPSB0cnVlOwogCi0Jc3lzc2Nh bi0+aXNjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAor CXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxh dGlvbiwgZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRl eF9yZXNjYW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3Nj YW4tPnNjYW4gPSBOVUxMOwpAQCAtNzM0LDcgKzczNyw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3Jk ZXJlZChTeXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFw VHVwbGUJaHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4 X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkK KwlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24s IHN5c3NjYW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2Fu LT5zbG90LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4 dCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggZmJmYzMzMTU5Li41MjdlMDZl MDkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJ CWluZGV4X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2Fu CiAgKgkJaW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBv ZiBhbiBpbmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwg aW5kZXggc2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9t IGEgc2NhbgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFw IHR1cGxlCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20g YSBzY2FuCisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBl ciByb3V0aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNj YW4KICAqCQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVz CiAgKgkJaW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4g aW5kZXgKQEAgLTEwNSw5ICsxMDMsMTUgQEAgZG8geyBcCiAJCQkgQ3BwQXNTdHJpbmcocG5hbWUp LCBSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShzY2FuLT5pbmRleFJlbGF0aW9uKSk7IFwKIH0gd2hp bGUoMCkKIAotc3RhdGljIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKFJl bGF0aW9uIGluZGV4UmVsYXRpb24sCi0JCQkJCQkJCQkJCSAgaW50IG5rZXlzLCBpbnQgbm9yZGVy YnlzLCBTbmFwc2hvdCBzbmFwc2hvdCwKLQkJCQkJCQkJCQkJICBQYXJhbGxlbEluZGV4U2NhbkRl c2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwKTsKK3N0YXRpYyBwZ19hdHRyaWJ1dGVfYWx3YXlzX2lu bGluZSBJbmRleFNjYW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRl eFJlbGF0aW9uLAorCQkJCQkJCQkJCQkJCQkJCQkJIGludCBua2V5cywKKwkJCQkJCQkJCQkJCQkJ CQkJCSBpbnQgbm9yZGVyYnlzLAorCQkJCQkJCQkJCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90 LAorCQkJCQkJCQkJCQkJCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbiwKKwkJCQkJ CQkJCQkJCQkJCQkJCSBib29sIHRlbXBfc25hcCwKKwkJCQkJCQkJCQkJCQkJCQkJCSBSZWxhdGlv biBoZWFwUmVsYXRpb24sCisJCQkJCQkJCQkJCQkJCQkJCQkgYm9vbCBpbmRleF9vbmx5X3NjYW4s CisJCQkJCQkJCQkJCQkJCQkJCQkgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50 KTsKIHN0YXRpYyBpbmxpbmUgdm9pZCB2YWxpZGF0ZV9yZWxhdGlvbl9hc19pbmRleChSZWxhdGlv biByKTsKIAogCkBAIC0yNTYsMTIgKzI2MCwxMSBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxh dGlvbiBpbmRleFJlbGF0aW9uLAogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wg aW5kZXhfb25seV9zY2FuLAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbklu c3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMp CiB7Ci0JSW5kZXhTY2FuRGVzYyBzY2FuOwotCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRT bmFwc2hvdCk7CiAKIAkvKiBDaGVjayB0aGF0IGEgaGlzdG9yaWMgc25hcHNob3QgaXMgbm90IHVz ZWQgZm9yIG5vbi1jYXRhbG9nIHRhYmxlcyAqLwpAQCAtMjc0LDIwICsyNzcsOSBAQCBpbmRleF9i ZWdpbnNjYW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCQkJUmVsYXRpb25HZXRSZWxhdGlv bk5hbWUoaGVhcFJlbGF0aW9uKSkpKTsKIAl9CiAKLQlzY2FuID0gaW5kZXhfYmVnaW5zY2FuX2lu dGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LCBOVUxMLCBm YWxzZSk7Ci0KLQkvKgotCSAqIFNhdmUgYWRkaXRpb25hbCBwYXJhbWV0ZXJzIGludG8gdGhlIHNj YW5kZXNjLiAgRXZlcnl0aGluZyBlbHNlIHdhcyBzZXQKLQkgKiB1cCBieSBSZWxhdGlvbkdldElu ZGV4U2Nhbi4KLQkgKi8KLQlzY2FuLT5oZWFwUmVsYXRpb24gPSBoZWFwUmVsYXRpb247Ci0Jc2Nh bi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVu dDsKLQotCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0J c2Nhbi0+eHNfaGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcFJlbGF0aW9u KTsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5k ZXhSZWxhdGlvbiwgbmtleXMsIG5vcmRlcmJ5cywgc25hcHNob3QsCisJCQkJCQkJCQlOVUxMLCBm YWxzZSwgaGVhcFJlbGF0aW9uLAorCQkJCQkJCQkJaW5kZXhfb25seV9zY2FuLCBpbnN0cnVtZW50 KTsKIH0KIAogLyoKQEAgLTMwMiwyOSArMjk0LDI0IEBAIGluZGV4X2JlZ2luc2Nhbl9iaXRtYXAo UmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAkJCQkJICAgSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9u ICppbnN0cnVtZW50LAogCQkJCQkgICBpbnQgbmtleXMpCiB7Ci0JSW5kZXhTY2FuRGVzYyBzY2Fu OwotCiAJQXNzZXJ0KHNuYXBzaG90ICE9IEludmFsaWRTbmFwc2hvdCk7CiAKLQlzY2FuID0gaW5k ZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4UmVsYXRpb24sIG5rZXlzLCAwLCBzbmFwc2hvdCwg TlVMTCwgZmFsc2UpOwotCi0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRv IHRoZSBzY2FuZGVzYy4gIEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgUmVsYXRp b25HZXRJbmRleFNjYW4uCi0JICovCi0Jc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKLQlz Y2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCXJldHVybiBzY2FuOworCXJldHVybiBp bmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhSZWxhdGlvbiwgbmtleXMsIDAsIHNuYXBzaG90 LCBOVUxMLAorCQkJCQkJCQkJZmFsc2UsIE5VTEwsIGZhbHNlLCBpbnN0cnVtZW50KTsKIH0KIAog LyoKICAqIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbCAtLS0gY29tbW9uIGNvZGUgZm9yIGluZGV4 X2JlZ2luc2NhbiB2YXJpYW50cworICoKKyAqIFdoZW4gaGVhcFJlbGF0aW9uIGlzIG5vdCBOVUxM LCBhbHNvIGluaXRpYWxpemVzIGhlYXAtc2lkZSBzY2FuIHN0YXRlOgorICogZ2V0bmV4dF9zbG90 IHJlc29sdXRpb24gYW5kIHRhYmxlIGZldGNoIGluaXRpYWxpemF0aW9uLgogICovCi1zdGF0aWMg SW5kZXhTY2FuRGVzYworc3RhdGljIHBnX2F0dHJpYnV0ZV9hbHdheXNfaW5saW5lIEluZGV4U2Nh bkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9pbnRlcm5hbChSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAog CQkJCQkJIGludCBua2V5cywgaW50IG5vcmRlcmJ5cywgU25hcHNob3Qgc25hcHNob3QsCi0JCQkJ CQkgUGFyYWxsZWxJbmRleFNjYW5EZXNjIHBzY2FuLCBib29sIHRlbXBfc25hcCkKKwkJCQkJCSBQ YXJhbGxlbEluZGV4U2NhbkRlc2MgcHNjYW4sIGJvb2wgdGVtcF9zbmFwLAorCQkJCQkJIFJlbGF0 aW9uIGhlYXBSZWxhdGlvbiwgYm9vbCBpbmRleF9vbmx5X3NjYW4sCisJCQkJCQkgSW5kZXhTY2Fu SW5zdHJ1bWVudGF0aW9uICppbnN0cnVtZW50KQogewogCUluZGV4U2NhbkRlc2Mgc2NhbjsKIApA QCAtMzQ4LDYgKzMzNSwzMSBAQCBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoUmVsYXRpb24gaW5k ZXhSZWxhdGlvbiwKIAlzY2FuLT5wYXJhbGxlbF9zY2FuID0gcHNjYW47CiAJc2Nhbi0+eHNfdGVt cF9zbmFwID0gdGVtcF9zbmFwOwogCisJc2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKKwlz Y2FuLT5NVkNDU2NhbiA9IElzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisJc2Nhbi0+aW5z dHJ1bWVudCA9IGluc3RydW1lbnQ7CisKKwkvKgorCSAqIEluaXRpYWxpemUgaGVhcC1zaWRlIHNj YW4gc3RhdGUgd2hlbiBhIGhlYXAgcmVsYXRpb24gaXMgcHJvdmlkZWQuCisJICogQml0bWFwIHNj YW5zIGRvbid0IHByb3ZpZGUgb25lLCBzaW5jZSB0aGV5IGFjY2VzcyB0aGUgaGVhcCBzZXBhcmF0 ZWx5LgorCSAqLworCWlmIChoZWFwUmVsYXRpb24gIT0gTlVMTCkKKwl7CisJCXNjYW4tPmhlYXBS ZWxhdGlvbiA9IGhlYXBSZWxhdGlvbjsKKwkJc2Nhbi0+eHNfd2FudF9pdHVwID0gaW5kZXhfb25s eV9zY2FuOworCisJCS8qIFJlc29sdmUgd2hpY2ggZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9u IHRvIHVzZSBmb3IgdGhpcyBzY2FuICovCisJCWlmIChpbmRleF9vbmx5X3NjYW4pCisJCQlzY2Fu LT54c19nZXRuZXh0X3Nsb3QgPQorCQkJCWhlYXBSZWxhdGlvbi0+cmRfdGFibGVhbS0+aW5kZXhf b25seV9hbWdldHR1cGxlX2dldG5leHRfc2xvdDsKKwkJZWxzZQorCQkJc2Nhbi0+eHNfZ2V0bmV4 dF9zbG90ID0KKwkJCQloZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmluZGV4X3BsYWluX2FtZ2V0 dHVwbGVfZ2V0bmV4dF9zbG90OworCisJCS8qIHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hl cyBmcm9tIHRhYmxlICovCisJCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNo X2JlZ2luKGhlYXBSZWxhdGlvbik7CisJfQorCiAJcmV0dXJuIHNjYW47CiB9CiAKQEAgLTM3OSw3 ICszOTEsNiBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCQl0YWJsZV9pbmRl eF9mZXRjaF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCiAJc2Nhbi0+a2lsbF9wcmlvcl90 dXBsZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCi0Jc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9 IGZhbHNlOwogCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2FuKHNjYW4s IGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKQEAgLTQ1Niw3 ICs0NjcsNiBAQCBpbmRleF9yZXN0cnBvcyhJbmRleFNjYW5EZXNjIHNjYW4pCiAJCXRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaCk7CiAKIAlzY2FuLT5raWxsX3ByaW9y X3R1cGxlID0gZmFsc2U7IC8qIGZvciBzYWZldHkgKi8KLQlzY2FuLT54c19oZWFwX2NvbnRpbnVl ID0gZmFsc2U7CiAKIAlzY2FuLT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhz Y2FuKTsKIH0KQEAgLTU5Miw0MCArNjAyLDMzIEBAIGluZGV4X3BhcmFsbGVscmVzY2FuKEluZGV4 U2NhbkRlc2Mgc2NhbikKICAqLwogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuX3BhcmFs bGVsKFJlbGF0aW9uIGhlYXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJIGJvb2wgaW5k ZXhfb25seV9zY2FuLAogCQkJCQkJIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVu dCwKIAkJCQkJCSBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkgUGFyYWxsZWxJbmRl eFNjYW5EZXNjIHBzY2FuKQogewogCVNuYXBzaG90CXNuYXBzaG90OwotCUluZGV4U2NhbkRlc2Mg c2NhbjsKIAogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhoZWFwcmVsLT5yZF9sb2NhdG9y LCBwc2Nhbi0+cHNfbG9jYXRvcikpOwogCUFzc2VydChSZWxGaWxlTG9jYXRvckVxdWFscyhpbmRl eHJlbC0+cmRfbG9jYXRvciwgcHNjYW4tPnBzX2luZGV4bG9jYXRvcikpOwogCiAJc25hcHNob3Qg PSBSZXN0b3JlU25hcHNob3QocHNjYW4tPnBzX3NuYXBzaG90X2RhdGEpOwogCVJlZ2lzdGVyU25h cHNob3Qoc25hcHNob3QpOwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW5faW50ZXJuYWwoaW5kZXhy ZWwsIG5rZXlzLCBub3JkZXJieXMsIHNuYXBzaG90LAotCQkJCQkJCQkJcHNjYW4sIHRydWUpOwog Ci0JLyoKLQkgKiBTYXZlIGFkZGl0aW9uYWwgcGFyYW1ldGVycyBpbnRvIHRoZSBzY2FuZGVzYy4g IEV2ZXJ5dGhpbmcgZWxzZSB3YXMgc2V0Ci0JICogdXAgYnkgaW5kZXhfYmVnaW5zY2FuX2ludGVy bmFsLgotCSAqLwotCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXByZWw7Ci0Jc2Nhbi0+eHNfc25h cHNob3QgPSBzbmFwc2hvdDsKLQlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1bWVudDsKLQotCS8q IHByZXBhcmUgdG8gZmV0Y2ggaW5kZXggbWF0Y2hlcyBmcm9tIHRhYmxlICovCi0Jc2Nhbi0+eHNf aGVhcGZldGNoID0gdGFibGVfaW5kZXhfZmV0Y2hfYmVnaW4oaGVhcHJlbCk7Ci0KLQlyZXR1cm4g c2NhbjsKKwlyZXR1cm4gaW5kZXhfYmVnaW5zY2FuX2ludGVybmFsKGluZGV4cmVsLCBua2V5cywg bm9yZGVyYnlzLCBzbmFwc2hvdCwKKwkJCQkJCQkJCXBzY2FuLCB0cnVlLCBoZWFwcmVsLCBpbmRl eF9vbmx5X3NjYW4sCisJCQkJCQkJCQlpbnN0cnVtZW50KTsKIH0KIAogLyogLS0tLS0tLS0tLS0t LS0tLQotICogaW5kZXhfZ2V0bmV4dF90aWQgLSBnZXQgdGhlIG5leHQgVElEIGZyb20gYSBzY2Fu CisgKiBpbmRleF9nZXRuZXh0X3RpZCAtIGFtZ2V0dHVwbGUgaW50ZXJmYWNlCiAgKgogICogVGhl IHJlc3VsdCBpcyB0aGUgbmV4dCBUSUQgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzLAogICogb3Ig TlVMTCBpZiBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyBleGlzdC4KKyAqCisgKiBUaGlzIHNob3Vs ZCBvbmx5IGJlIGNhbGxlZCBieSB0YWJsZSBBTSdzIGluZGV4X2dldG5leHRfc2xvdCBpbXBsZW1l bnRhdGlvbiwKKyAqIGFuZCBvbmx5IGdpdmVuIGFuIGluZGV4IEFNIHRoYXQgc3VwcG9ydHMgdGhl IHNpbmdsZS10dXBsZSBhbWdldHR1cGxlCisgKiBpbnRlcmZhY2UuCiAgKiAtLS0tLS0tLS0tLS0t LS0tCiAgKi8KIEl0ZW1Qb2ludGVyCkBAIC02NDksNyArNjUyLDYgQEAgaW5kZXhfZ2V0bmV4dF90 aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAogCS8qIFJl c2V0IGtpbGwgZmxhZyBpbW1lZGlhdGVseSBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+a2lsbF9wcmlv cl90dXBsZSA9IGZhbHNlOwotCXNjYW4tPnhzX2hlYXBfY29udGludWUgPSBmYWxzZTsKIAogCS8q IElmIHdlJ3JlIG91dCBvZiBpbmRleCBlbnRyaWVzLCB3ZSdyZSBkb25lICovCiAJaWYgKCFmb3Vu ZCkKQEAgLTY2OCw5NyArNjcwLDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhzX2hlYXB0aWQ7 CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0IHRo ZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBhIHZpc2libGUg aGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0gKiByZWNlbnRs eSBmZXRjaGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1vcmUgbWF0Y2hp bmcgdHVwbGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9uZSBtYXRjaGlu ZyB0dXBsZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVuIHVzaW5nIGFu IE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUgdGhhbgotICog b25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRoZSBidWZmZXIg Y29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwgYmUKLSAqIGRy b3BwZWQgaW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNoX2hlYXAgb3Ig aW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sg c2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKLSAqIHNjYW4g a2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24n dCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhl IGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAotaW5kZXhfZmV0 Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90KQotewotCWJv b2wJCWFsbF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9IHRhYmxlX2lu ZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCi0J CQkJCQkJCQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2FuLT54c19oZWFw X2NvbnRpbnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRfY291bnRfaGVh cF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ugc2Nhbm5lZCBh IHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVsbCBpbmRleAot CSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxsIHRha2UgZWZm ZWN0IGluIHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9nZXRuZXh0X3Rp ZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVjYXVzZSBpdCBt YXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICogUmVsYXRpb25H ZXRJbmRleFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkK LQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJuIGZvdW5kOwot fQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90IC0gZ2V0IHRo ZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0cnVlIGlmIGEg dHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qgd2FzCi0gKiBm b3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0aGUgc3BlY2lm aWVkIHNsb3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5z KSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVkIGJ5IGEgZnV0 dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4X2VuZHNjYW4K LSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4tPnhzX3JlY2hl Y2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMgaWYgcmVxdWly ZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2ZQotICogZW5v dWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5lcmFsIGNhc2Uu Ci0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRhYmxlU2xvdCAq c2xvdCkKLXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2NvbnRpbnVlKQot CQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2ggdGhlIG5leHQg VElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3RpZChzY2FuLCBk aXJlY3Rpb24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmllcywgd2UncmUg ZG9uZSAqLwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlBc3NlcnQoSXRl bVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0KLQkJLyoKLQkJ ICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBmb3IgdGhpcyBp bmRleCBlbnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9vcCBhcm91bmQg YW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkgKi8KLQkJQXNz ZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlpZiAoaW5kZXhf ZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQotCXJldHVybiBm YWxzZTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJpdG1hcCAtIGdl dCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhw bGFpbi5jCmluZGV4IGU0YjcwMTY2Yi4uY2E3NTliMGFjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9jb21tYW5kcy9leHBsYWluLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5j CkBAIC0xMzYsNyArMTM2LDcgQEAgc3RhdGljIHZvaWQgc2hvd19yZWN1cnNpdmVfdW5pb25faW5m byhSZWN1cnNpdmVVbmlvblN0YXRlICpyc3RhdGUsCiBzdGF0aWMgdm9pZCBzaG93X21lbW9pemVf aW5mbyhNZW1vaXplU3RhdGUgKm1zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJCQkJCSAgRXhw bGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAq YWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwotc3RhdGljIHZvaWQgc2hvd19pbmRleHNlYXJj aGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpOworc3RhdGlj IHZvaWQgc2hvd19pbmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0 YXRlICplcyk7CiBzdGF0aWMgdm9pZCBzaG93X3RpZGJpdG1hcF9pbmZvKEJpdG1hcEhlYXBTY2Fu U3RhdGUgKnBsYW5zdGF0ZSwKIAkJCQkJCQkJRXhwbGFpblN0YXRlICplcyk7CiBzdGF0aWMgdm9p ZCBzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudChjb25zdCBjaGFyICpxbGFiZWwsIGludCB3aGlj aCwKQEAgLTE5NzQsNyArMTk3NCw3IEBAIEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRl LCBMaXN0ICphbmNlc3RvcnMsCiAJCQlpZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1l bnRhdGlvbl9jb3VudCgiUm93cyBSZW1vdmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAg cGxhbnN0YXRlLCBlcyk7Ci0JCQlzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVz KTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxhbnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJ Y2FzZSBUX0luZGV4T25seVNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEluZGV4T25seVNjYW4g KikgcGxhbiktPmluZGV4cXVhbCwKQEAgLTE5ODgsMTUgKzE5ODgsMTIgQEAgRXhwbGFpbk5vZGUo UGxhblN0YXRlICpwbGFuc3RhdGUsIExpc3QgKmFuY2VzdG9ycywKIAkJCWlmIChwbGFuLT5xdWFs KQogCQkJCXNob3dfaW5zdHJ1bWVudGF0aW9uX2NvdW50KCJSb3dzIFJlbW92ZWQgYnkgRmlsdGVy IiwgMSwKIAkJCQkJCQkJCQkgICBwbGFuc3RhdGUsIGVzKTsKLQkJCWlmIChlcy0+YW5hbHl6ZSkK LQkJCQlFeHBsYWluUHJvcGVydHlGbG9hdCgiSGVhcCBGZXRjaGVzIiwgTlVMTCwKLQkJCQkJCQkJ CSBwbGFuc3RhdGUtPmluc3RydW1lbnQtPm50dXBsZXMyLCAwLCBlcyk7Ci0JCQlzaG93X2luZGV4 c2VhcmNoZXNfaW5mbyhwbGFuc3RhdGUsIGVzKTsKKwkJCXNob3dfaW5kZXhzY2FuX2luZm8ocGxh bnN0YXRlLCBlcyk7CiAJCQlicmVhazsKIAkJY2FzZSBUX0JpdG1hcEluZGV4U2NhbjoKIAkJCXNo b3dfc2Nhbl9xdWFsKCgoQml0bWFwSW5kZXhTY2FuICopIHBsYW4pLT5pbmRleHF1YWxvcmlnLAog CQkJCQkJICAgIkluZGV4IENvbmQiLCBwbGFuc3RhdGUsIGFuY2VzdG9ycywgZXMpOwotCQkJc2hv d19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9p bmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBIZWFwU2NhbjoK IAkJCXNob3dfc2Nhbl9xdWFsKCgoQml0bWFwSGVhcFNjYW4gKikgcGxhbiktPmJpdG1hcHF1YWxv cmlnLApAQCAtMzg2MCwxNSArMzg1NywxNiBAQCBzaG93X2hhc2hhZ2dfaW5mbyhBZ2dTdGF0ZSAq YWdnc3RhdGUsIEV4cGxhaW5TdGF0ZSAqZXMpCiB9CiAKIC8qCi0gKiBTaG93IHRoZSB0b3RhbCBu dW1iZXIgb2YgaW5kZXggc2VhcmNoZXMgZm9yIGEKKyAqIFNob3cgaW5kZXggc2NhbiByZWxhdGVk IGV4ZWN1dG9yIGluc3RydW1lbnRhdGlvbiBmb3IgYQogICogSW5kZXhTY2FuL0luZGV4T25seVNj YW4vQml0bWFwSW5kZXhTY2FuIG5vZGUKICAqLwogc3RhdGljIHZvaWQKLXNob3dfaW5kZXhzZWFy Y2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQorc2hvd19p bmRleHNjYW5faW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRlICplcykKIHsK IAlQbGFuCSAgICpwbGFuID0gcGxhbnN0YXRlLT5wbGFuOwogCVNoYXJlZEluZGV4U2Nhbkluc3Ry dW1lbnRhdGlvbiAqU2hhcmVkSW5mbyA9IE5VTEw7Ci0JdWludDY0CQluc2VhcmNoZXMgPSAwOwor CXVpbnQ2NAkJbnNlYXJjaGVzID0gMCwKKwkJCQludGFibGVmZXRjaGVzID0gMDsKIAogCWlmICgh ZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODksNiArMzg4Nyw3IEBAIHNob3dfaW5kZXhz ZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogCQkJ CUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5U2NhblN0YXRlICop IHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRlLT5pb3NzX0luc3RydW1l bnQtPm5zZWFyY2hlczsKKwkJCQludGFibGVmZXRjaGVzID0gaW5kZXhzdGF0ZS0+aW9zc19JbnN0 cnVtZW50LT5udGFibGVmZXRjaGVzOwogCQkJCVNoYXJlZEluZm8gPSBpbmRleHN0YXRlLT5pb3Nz X1NoYXJlZEluZm87CiAJCQkJYnJlYWs7CiAJCQl9CkBAIC0zOTEyLDkgKzM5MTEsMTMgQEAgc2hv d19pbmRleHNlYXJjaGVzX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5TdGF0ZSAq ZXMpCiAJCQlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKndpbnN0cnVtZW50ID0gJlNoYXJlZElu Zm8tPndpbnN0cnVtZW50W2ldOwogCiAJCQluc2VhcmNoZXMgKz0gd2luc3RydW1lbnQtPm5zZWFy Y2hlczsKKwkJCW50YWJsZWZldGNoZXMgKz0gd2luc3RydW1lbnQtPm50YWJsZWZldGNoZXM7CiAJ CX0KIAl9CiAKKwlpZiAobm9kZVRhZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJCUV4cGxh aW5Qcm9wZXJ0eVVJbnRlZ2VyKCJIZWFwIEZldGNoZXMiLCBOVUxMLCBudGFibGVmZXRjaGVzLCBl cyk7CisKIAlFeHBsYWluUHJvcGVydHlVSW50ZWdlcigiSW5kZXggU2VhcmNoZXMiLCBOVUxMLCBu c2VhcmNoZXMsIGVzKTsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA5 ZDA3MWU0OTUuLjNmMGM4NDUzZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y0luZGV4aW5nLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAg LTgxNSwxMCArODE1LDEyIEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChS ZWxhdGlvbiBoZWFwLCBSZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7 CiAJZm91bmRfc2VsZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVh cCwgaW5kZXgsICZEaXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhf c2NhbiA9IGluZGV4X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgZmFsc2UsICZEaXJ0eVNuYXBzaG90 LCBOVUxMLAorCQkJCQkJCQkgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9z Y2FuLCBzY2Fua2V5cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dl dG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xv dCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCWV4aXN0aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rp b25JZCB4d2FpdDsKIAkJWExUV19PcGVyCXJlYXNvbl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9l eGVjUmVwbGljYXRpb24uYwppbmRleCAyNDk3ZWU3ZWQuLjJmNjM2YmEzZSAxMDA2NDQKLS0tIGEv c3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTIwNSw3ICsyMDUsNyBAQCBSZWxhdGlvbkZp bmRSZXBsVHVwbGVCeUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9m ZiA9IGJ1aWxkX3JlcGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xv dCk7CiAKIAkvKiBTdGFydCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNj YW4ocmVsLCBpZHhyZWwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgZmFsc2UsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9m ZiwgMCk7CiAKIHJldHJ5OgogCWZvdW5kID0gZmFsc2U7CkBAIC0yMTMsNyArMjEzLDcgQEAgcmV0 cnk6CiAJaW5kZXhfcmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAog CS8qIFRyeSB0byBmaW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRl eF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsK IAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBp cyBwcmltYXJ5IGtleSBvcgpAQCAtNjY2LDEyICs2NjYsMTIgQEAgUmVsYXRpb25GaW5kRGVsZXRl ZFR1cGxlSW5mb0J5SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQg Y29tbWl0dGVkIG9yIHRob3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQog CSAqIGV4Y2x1ZGVkIGluIHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICov Ci0Jc2NhbiA9IGluZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgU25hcHNob3RBbnksIE5VTEws IHNrZXlfYXR0b2ZmLCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBm YWxzZSwgU25hcHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogCWluZGV4X3Jlc2Nh bihzY2FuLCBza2V5LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0 aGUgdHVwbGUgKi8KLQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2Fu RGlyZWN0aW9uLCBzY2Fuc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZv aWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBv cgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCmluZGV4IDcwYzU1 ZWU2ZC4uNzA0NWU1OGVmIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0 bWFwSW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4 c2Nhbi5jCkBAIC0yMDQsNiArMjA0LDcgQEAgRXhlY0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJ bmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcElu ZGV4U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNl YXJjaGVzICs9IG5vZGUtPmJpc3NfSW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQlBc3NlcnQobm9k ZS0+Ymlzc19JbnN0cnVtZW50LT5udGFibGVmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYwppbmRleCA5ZWFiODFmZDEuLmJmNDY2 NWIyMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4u YworKysgYi9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCw3 ICszNCw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbHNjYW4uaCIKICNpbmNsdWRlICJhY2Nlc3Mv dGFibGVhbS5oIgogI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCi0jaW5jbHVkZSAiYWNjZXNz L3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5cGUuaCIKICNpbmNsdWRl ICJleGVjdXRvci9leGVjdXRvci5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2luc3RydW1lbnQuaCIK QEAgLTQyLDcgKzQxLDYgQEAKICNpbmNsdWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAj aW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNs dWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAj aW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKQEAgLTY2LDcgKzY0LDYgQEAgSW5kZXhPbmx5TmV4dChJ bmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5k ZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlUdXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRl ciB0aWQ7CiAKIAkvKgogCSAqIGV4dHJhY3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5k ZXggc2NhbiBub2RlCkBAIC05MSwxOCArODgsMTQgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlT Y2FuU3RhdGUgKm5vZGUpCiAJCSAqIHBhcmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRl eF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2Rl LT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2Ms IHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5vZGUt Pmlvc3NfSW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aW9zc19OdW1TY2FuS2V5cywKIAkJ CQkJCQkJICAgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cyk7CiAKIAkJbm9kZS0+aW9zc19TY2Fu RGVzYyA9IHNjYW5kZXNjOwotCi0KLQkJLyogU2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4g Ki8KLQkJbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQkJbm9kZS0+ aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisJCUFzc2VydChub2RlLT5pb3NzX1NjYW5E ZXNjLT54c193YW50X2l0dXApOwogCiAJCS8qCiAJCSAqIElmIG5vIHJ1bi10aW1lIGtleXMgdG8g Y2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBhaGVhZCBhbmQKQEAgLTExOSw3OCArMTEy LDExIEBAIEluZGV4T25seU5leHQoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCS8qCiAJICog T0ssIG5vdyB0aGF0IHdlIGhhdmUgd2hhdCB3ZSBuZWVkLCBmZXRjaCB0aGUgbmV4dCB0dXBsZS4K IAkgKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dldG5leHRfdGlkKHNjYW5kZXNjLCBkaXJlY3Rp b24pKSAhPSBOVUxMKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbmRlc2Ms IGRpcmVjdGlvbiwKKwkJCQkJCQkJCW5vZGUtPmlvc3NfVGFibGVTbG90KSkKIAl7Ci0JCWJvb2wJ CXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAK LQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAgZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVu Y2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2li bGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0JCSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXgg dHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBkYXRhIHNvdXJjZS4KLQkJICoKLQkJICog Tm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czogdmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVz IGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxpdHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJl Zm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVyZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFs ZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVub3VnaCB0bwotCQkgKiBtYXR0ZXIuCi0J CSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1ZSB0byBhbiBp bnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0 aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRoZQotCQkgKiByZWFkaW5nIG9mIHRoZSBU SUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBsb2NrIG9uIHRoZSBpbmRleAotCQkgKiBi dWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUg aW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBsb2NrIG9uIHRoZSBpbmRleCBidWZmZXIp LiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xlYXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhl IGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhlCi0JCSAqIGluZGV4IHBhZ2UgYWN0 cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFyZSBzdXJlIHRvIHNlZSB0aGUKLQkJICog Y2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHktaW5zZXJ0ZWQgVElELgotCQkgKgotCQkg KiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwg Y2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUgY2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBi eSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXplZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywg YW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0JCSAqIHNpZ25pZmljYW50bHkgc3RhbGUu IEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhlIGRlbGV0ZSByaWdodAotCQkgKiBhd2F5 LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNpYmxlIHVudGlsIHRoZSBkZWxldGluZwot CQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBv dXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIgY2FzZSwgdGhlIGxvY2sgb24gdGhlIFZN IGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxlYXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUg YmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4KLQkJICogQW5kIGZvciB1cyB0byBoYXZl IGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVsZXRpbmcKLQkJICogdHJhbnNhY3Rpb24g KG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2UgbXVzdCBoYXZlIGFjcXVpcmVkCi0JCSAq IFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBhY3RpbmcgYXMgYSByZWFkIGJhcnJpZXIu Ci0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhyb3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8g YXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNh dXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAqLwotCQlpZiAoIVZNX0FMTF9WSVNJQkxF KHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJSXRlbVBvaW50ZXJHZXRCbG9ja051bWJl cih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVmZmVyKSkKLQkJewotCQkJLyoKLQkJCSAq IFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAgdG8gY2hlY2sgdmlzaWJpbGl0eS4KLQkJ CSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwgMSk7Ci0JCQlpZiAoIWluZGV4X2ZldGNo X2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVTbG90KSkKLQkJCQljb250aW51ZTsJCS8q IG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCi0KLQkJCUV4ZWNDbGVh clR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQotCQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBz bmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAq IG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBjaGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRy eSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBkaWQgd2FudCB0byBhbGxvdyB0aGF0LCB3 ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0ZSB0byByZW1lbWJlciBub3QgdG8gY2Fs bCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0JCQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+ eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9SLCAibm9uLU1WQ0Mgc25hcHNob3RzIGFy ZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKTsKLQotCQkJLyoKLQkJCSAqIE5v dGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAgcGFnZSwg YXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54c19jYnVmLiAgV2UgY291bGQgcmVsZWFz ZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBub3QgY2xlYXIgd2hldGhlciBpdCdzIGEg d2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJCSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUg YSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0JCQkgKi8KLQotCQkJdHVwbGVfZnJvbV9o ZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZpbGwgdGhlIHNjYW4gdHVwbGUgc2xvdCB3 aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1pZ2h0IGJlCiAJCSAqIHByb3ZpZGVkIGlu IGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBmb3JtYXQuICBDb25jZWl2YWJseSBhbgpA QCAtMjM5LDE2ICsxNjUsNiBAQCBJbmRleE9ubHlOZXh0KEluZGV4T25seVNjYW5TdGF0ZSAqbm9k ZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1Rf U1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kgZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBu b3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMiKSkpOwotCi0JCS8qCi0JCSAqIElmIHdl IGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2UnbGwgbmVlZCB0byB0YWtlIGEgcHJlZGlj YXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0 aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAoIXR1cGxlX2Zyb21faGVhcCkKLQkJCVBy ZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJICBlc3RhdGUtPmVzX3NuYXBzaG90KTsK LQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwOCwxMyArMzI0LDYgQEAgRXhlY0VuZEluZGV4 T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCWluZGV4UmVsYXRpb25EZXNjID0g bm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhTY2FuRGVzYyA9IG5vZGUtPmlvc3NfU2Nh bkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBwaW4sIGlmIGFueS4gKi8KLQlpZiAobm9k ZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihu b2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9zc19WTUJ1ZmZlciA9IEludmFsaWRCdWZm ZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBhIHBhcmFsbGVsIHdvcmtlciwgY29weSB0 aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkgKiB3b3JrZXIgYmFjayBpbnRvIHNoYXJl ZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2VkIHVwIGJ5IHRoZSBtYWluCkBAIC00MzQs NiArMzQzLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJv ZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlvc3Nf SW5zdHJ1bWVudC0+bnNlYXJjaGVzOworCQl3aW5zdHJ1bWVudC0+bnRhYmxlZmV0Y2hlcyArPSBu b2RlLT5pb3NzX0luc3RydW1lbnQtPm50YWJsZWZldGNoZXM7CiAJfQogCiAJLyoKQEAgLTc5MCwx MyArNzAwLDEyIEBAIEV4ZWNJbmRleE9ubHlTY2FuSW5pdGlhbGl6ZURTTShJbmRleE9ubHlTY2Fu U3RhdGUgKm5vZGUsCiAKIAlub2RlLT5pb3NzX1NjYW5EZXNjID0KIAkJaW5kZXhfYmVnaW5zY2Fu X3BhcmFsbGVsKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJIG5vZGUtPmlv c3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUs CiAJCQkJCQkJCSBub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pb3NzX051 bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1PcmRlckJ5S2V5cywKIAkJCQkJCQkJ IHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwID0gdHJ1ZTsKLQlu b2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsKKwlBc3NlcnQobm9kZS0+aW9zc19T Y2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICogSWYgbm8gcnVuLXRpbWUga2V5cyB0 byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFoZWFkIGFuZCBwYXNzCkBAIC04NTYs MTIgKzc2NSwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhPbmx5 U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2FuRGVzYyA9CiAJCWluZGV4X2JlZ2lu c2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRpb24sCi0JCQkJCQkJCSBub2Rl LT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlvc3NfUmVsYXRpb25EZXNjLCB0 cnVlLAogCQkJCQkJCQkgbm9kZS0+aW9zc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aW9z c19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtT3JkZXJCeUtleXMsCiAJCQkJ CQkJCSBwaXNjYW4pOwotCW5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7 CisJQXNzZXJ0KG5vZGUtPmlvc3NfU2NhbkRlc2MtPnhzX3dhbnRfaXR1cCk7CiAKIAkvKgogCSAq IElmIG5vIHJ1bi10aW1lIGtleXMgdG8gY2FsY3VsYXRlIG9yIHRoZXkgYXJlIHJlYWR5LCBnbyBh aGVhZCBhbmQgcGFzcwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4 c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCmluZGV4IDA2MTQz ZTk0Yy4uNzdhOGI4OGIyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlSW5k ZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCkBAIC0x MDksNyArMTA5LDcgQEAgSW5kZXhOZXh0KEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJp YWxseSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFs bGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJ CQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5l c19zbmFwc2hvdCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX0luc3RydW1lbnQsCiAJCQkJCQkJCSAg IG5vZGUtPmlzc19OdW1TY2FuS2V5cywKQEAgLTEzMCw3ICsxMzAsNyBAQCBJbmRleE5leHQoSW5k ZXhTY2FuU3RhdGUgKm5vZGUpCiAJLyoKIAkgKiBvaywgbm93IHRoYXQgd2UgaGF2ZSB3aGF0IHdl IG5lZWQsIGZldGNoIHRoZSBuZXh0IHR1cGxlLgogCSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0 X3Nsb3Qoc2NhbmRlc2MsIGRpcmVjdGlvbiwgc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dl dG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkKIAl7CiAJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7CiAKQEAgLTIwNSw3ICsyMDUsNyBAQCBJbmRleE5leHRXaXRoUmVvcmRlcihJ bmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNj YW4gdGhhdCB3YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0g aW5kZXhfYmVnaW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAg bm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywgZmFsc2UsCiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgIG5v ZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBub2RlLT5pc3NfTnVtU2NhbktleXMsCkBA IC0yNjIsNyArMjYyLDcgQEAgSW5kZXhOZXh0V2l0aFJlb3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5v ZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0aGUgaW5kZXguCiAJCSAqLwogbmV4dF9p bmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNj YW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2Fu ZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQogCQl7CiAJCQkvKgogCQkJICogTm8g bW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQgd2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBh bnkKQEAgLTgxNCw2ICs4MTQsNyBAQCBFeGVjRW5kSW5kZXhTY2FuKEluZGV4U2NhblN0YXRlICpu b2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6 ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5vZGUtPmlz c19JbnN0cnVtZW50LT5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5pc3NfSW5zdHJ1bWVudC0+ bnRhYmxlZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAtMTcyNiw3ICsxNzI3LDcgQEAgRXhl Y0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3RhdGUgKm5vZGUsCiAKIAlub2RlLT5p c3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3Vy cmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJ IG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgbm9kZS0+aXNzX0luc3Ry dW1lbnQsCiAJCQkJCQkJCSBub2RlLT5pc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5p c3NfTnVtT3JkZXJCeUtleXMsCkBAIC0xNzkwLDcgKzE3OTEsNyBAQCBFeGVjSW5kZXhTY2FuSW5p dGlhbGl6ZVdvcmtlcihJbmRleFNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlzc19TY2FuRGVz YyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVsYXRp b24sCi0JCQkJCQkJCSBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkgbm9kZS0+aXNz X1JlbGF0aW9uRGVzYywgZmFsc2UsCiAJCQkJCQkJCSBub2RlLT5pc3NfSW5zdHJ1bWVudCwKIAkJ CQkJCQkJIG5vZGUtPmlzc19OdW1TY2FuS2V5cywKIAkJCQkJCQkJIG5vZGUtPmlzc19OdW1PcmRl ckJ5S2V5cywKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNzLmMKaW5kZXggNTNmODVjY2RlLi45ZjYyM2Q5 N2IgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCisrKyBiL3Ny Yy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5jCkBAIC0xMDIsNyArMTAyLDYgQEAKICNpbmNs dWRlICJhY2Nlc3MvZ2luLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAi YWNjZXNzL3RhYmxlYW0uaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1hcC5oIgogI2lu Y2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0aW9uLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wZ19vcGVy YXRvci5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfc3RhdGlzdGljLmgiCkBAIC03MTIxLDEwICs3 MTIwLDYgQEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAog CWJvb2wJCWhhdmVfZGF0YSA9IGZhbHNlOwogCVNuYXBzaG90RGF0YSBTbmFwc2hvdE5vblZhY3V1 bWFibGU7CiAJSW5kZXhTY2FuRGVzYyBpbmRleF9zY2FuOwotCUJ1ZmZlcgkJdm1idWZmZXIgPSBJ bnZhbGlkQnVmZmVyOwotCUJsb2NrTnVtYmVyIGxhc3RfaGVhcF9ibG9jayA9IEludmFsaWRCbG9j a051bWJlcjsKLQlpbnQJCQluX3Zpc2l0ZWRfaGVhcF9wYWdlcyA9IDA7Ci0JSXRlbVBvaW50ZXIg dGlkOwogCURhdHVtCQl2YWx1ZXNbSU5ERVhfTUFYX0tFWVNdOwogCWJvb2wJCWlzbnVsbFtJTkRF WF9NQVhfS0VZU107CiAJTWVtb3J5Q29udGV4dCBvbGRjb250ZXh0OwpAQCAtNzE3Miw2MSArNzE2 NywyNSBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJ ICogYSBodWdlIGFtb3VudCBvZiB0aW1lIGhlcmUsIHNvIHdlIGdpdmUgdXAgb25jZSB3ZSd2ZSBy ZWFkIHRvbyBtYW55IGhlYXAKIAkgKiBwYWdlcy4gIFdoZW4gd2UgZmFpbCBmb3IgdGhhdCByZWFz b24sIHRoZSBjYWxsZXIgd2lsbCBlbmQgdXAgdXNpbmcKIAkgKiB3aGF0ZXZlciBleHRyZW1hbCB2 YWx1ZSBpcyByZWNvcmRlZCBpbiBwZ19zdGF0aXN0aWMuCisJICoKKwkgKiBXZSBzZXQgeHNfdmlz aXRlZF9wYWdlc19saW1pdCB0byB0ZWxsIHRoZSB0YWJsZSBBTSB0byBjb3VudCBkaXN0aW5jdAor CSAqIGhlYXAgcGFnZXMgdmlzaXRlZCBmb3Igbm9uLXZpc2libGUgdHVwbGVzIGFuZCBnaXZlIHVw IGFmdGVyIHRoZSBsaW1pdAorCSAqIGlzIGV4Y2VlZGVkLgogCSAqLworI2RlZmluZSBWSVNJVEVE X1BBR0VTX0xJTUlUIDEwMAogCUluaXROb25WYWN1dW1hYmxlU25hcHNob3QoU25hcHNob3ROb25W YWN1dW1hYmxlLAogCQkJCQkJCSAgR2xvYmFsVmlzVGVzdEZvcihoZWFwUmVsKSk7CiAKLQlpbmRl eF9zY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWwsIGluZGV4UmVsLAorCWluZGV4X3NjYW4g PSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsIHRydWUsCiAJCQkJCQkJCSAmU25h cHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAogCQkJCQkJCQkgMSwgMCk7Ci0JLyogU2V0IGl0IHVw IGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0dXAgPSB0cnVl OworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOworCWluZGV4X3NjYW4tPnhzX3Zp c2l0ZWRfcGFnZXNfbGltaXQgPSBWSVNJVEVEX1BBR0VTX0xJTUlUOwogCWluZGV4X3Jlc2Nhbihp bmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJzdC9uZXh0 IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGluZGV4X2dl dG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hpbGUgKHRh YmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHRhYmxlc2xv dCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIo dGlkKTsKLQotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0J CQkJCQkJJnZtYnVmZmVyKSkKLQkJewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUg aGVhcCB0byBjaGVjayB2aXNpYmlsaXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5k ZXhfc2NhbiwgdGFibGVzbG90KSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2libGUgdHVw bGUgZm9yIHRoaXMgaW5kZXggZW50cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRv IHRoZSBuZXh0IGVudHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJICogcGFn ZSBmZXRjaGVzIGFuZCBnaXZlIHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJ CQkgKiBXZSBkb24ndCBjaGFyZ2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVh cCBwYWdlCi0JCQkJICogYXMgdGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29u c2VydmF0aXZlIHNpZGUsCi0JCQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQgcGFn ZXMgYXJlIHByb2JhYmx5IHN0aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdzIGdv b2QgZW5vdWdoIGZvciB0aGlzIGhldXJpc3RpYy4KLQkJCQkgKi8KLSNkZWZpbmUgVklTSVRFRF9Q QUdFU19MSU1JVCAxMDAKLQotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJ ewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVkX2hlYXBfcGFn ZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9QQUdFU19MSU1J VCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0 dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1 cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhl cmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47 IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICovCi0JCX0KLQog CQkvKgogCQkgKiBXZSBleHBlY3QgdGhhdCB0aGUgaW5kZXggd2lsbCByZXR1cm4gZGF0YSBpbiBJ bmRleFR1cGxlIG5vdAogCQkgKiBIZWFwVHVwbGUgZm9ybWF0LgpAQCAtNzI1OCw4ICs3MjE3LDYg QEAgZ2V0X2FjdHVhbF92YXJpYWJsZV9lbmRwb2ludChSZWxhdGlvbiBoZWFwUmVsLAogCQlicmVh azsKIAl9CiAKLQlpZiAodm1idWZmZXIgIT0gSW52YWxpZEJ1ZmZlcikKLQkJUmVsZWFzZUJ1ZmZl cih2bWJ1ZmZlcik7CiAJaW5kZXhfZW5kc2NhbihpbmRleF9zY2FuKTsKIAogCXJldHVybiBoYXZl X2RhdGE7Ci0tIAoyLjUzLjAKCg== --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0004-heapam-Keep-buffer-pins-across-index-scan-rescan.patch" Content-Disposition: attachment; filename="v18-0004-heapam-Keep-buffer-pins-across-index-scan-rescan.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37q15 RnJvbSBiODhiMzk0YjVhMGI4NzZmY2EyZDUwNTNjMGIzNjlkOTcyYmJhZDVlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFRo dSwgMjYgTWFyIDIwMjYgMTg6NDU6MjcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwNC8xOV0g aGVhcGFtOiBLZWVwIGJ1ZmZlciBwaW5zIGFjcm9zcyBpbmRleCBzY2FuIHJlc2NhbnMuCgpBdm9p ZCBkcm9wcGluZyB0aGUgaGVhcCBwYWdlIHBpbiAoeHNfY2J1ZikgYW5kIHZpc2liaWxpdHkgbWFw IHBpbgooeHNfdm1idWZmZXIpIGR1cmluZyBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQuICBSZXRh aW5pbmcgdGhlc2UgcGlucwpzYXZlcyBjeWNsZXMgZHVyaW5nIHRpZ2h0IG5lc3RlZCBsb29wIGpv aW5zIGFuZCBtZXJnZSBqb2lucyB0aGF0CmZyZXF1ZW50bHkgcmVzdG9yZSBhIHNhdmVkIG1hcmss IHNpbmNlIHRoZSBuZXh0IHR1cGxlIGZldGNoZWQgYWZ0ZXIgYQpyZXNjYW4gb2Z0ZW4gZmFsbHMg b24gdGhlIHNhbWUgaGVhcCBwYWdlLiAgSXQgY2FuIGFsc28gYXZvaWQgcmVwZWF0ZWQKcGlubmlu ZyBhbmQgdW5waW5uaW5nIG9mIHRoZSBzYW1lIGJ1ZmZlciB3aGVuIHJlc2NhbnMgaGFwcGVuIHRv IHJldmlzaXQKdGhlIHNhbWUgcGFnZS4KClByZXBhcmF0aW9uIGZvciBhbiB1cGNvbWluZyBwYXRj aCB0aGF0IHdpbGwgYWRkIHRoZSBhbWdldGJhdGNoCmludGVyZmFjZSB0byBlbmFibGUgb3B0aW1p emF0aW9ucyBzdWNoIGFzIEkvTyBwcmVmZXRjaGluZy4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2Fu IDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVzIEZyZXVuZCA8YW5kcmVzQGFuYXJhemVs LmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3o9Zz1KVFN5REI0VXRC NXN1MlpjdnNTN1ZiUCtaTXZ2YUc2QUJvQ2IrczhMd0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyB8IDI3ICsrKysrKysrKysrKy0t LS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICB8ICA0 ICsrLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTcgaW5zZXJ0aW9ucygrKSwgMTQgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5j IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCmluZGV4IGNmOTM2 NmFkNC4uN2Q0NjNiZmQxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW1faW5kZXhzY2FuLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4 c2Nhbi5jCkBAIC01OCwxOCArNTgsMTUgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4 RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJ bmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54 c19jYnVmKSkKLQl7Ci0JCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwotCQloc2Nhbi0+ eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7Ci0JCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tO dW1iZXI7Ci0JfQorCS8qIFJlc2V0cyBhcmUgYSBuby1vcCAoWFhYIGFtZ2V0YmF0Y2ggY29tbWl0 IHJlc2V0cyB4c192bV9pdGVtcyBoZXJlKSAqLworCSh2b2lkKSBoc2NhbjsKIAotCWlmIChCdWZm ZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2Fu LT54c192bWJ1ZmZlcik7Ci0JCWhzY2FuLT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0J fQorCS8qCisJICogRGVsaWJlcmF0ZWx5IGF2b2lkIGRyb3BwaW5nIHBpbnMgbm93IGhlbGQgaW4g eHNfY2J1ZiBhbmQgeHNfdm1idWZmZXIuCisJICogVGhpcyBzYXZlcyBjeWNsZXMgZHVyaW5nIGNl cnRhaW4gdGlnaHQgbmVzdGVkIGxvb3Agam9pbnMsIGFuZCBkdXJpbmcKKwkgKiBtZXJnZSBqb2lu cyB0aGF0IGZyZXF1ZW50bHkgcmVzdG9yZSBhIHNhdmVkIG1hcmsuICBJdCBjYW4gYWxzbyBhdm9p ZAorCSAqIHJlcGVhdGVkIHBpbm5pbmcgYW5kIHVucGlubmluZyBvZiB0aGUgc2FtZSBidWZmZXIg YWNyb3NzIHJlc2NhbnMuCisJICovCiB9CiAKIHZvaWQKQEAgLTc3LDcgKzc0LDEzIEBAIGhlYXBh bV9pbmRleF9mZXRjaF9lbmQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIHsKIAlJbmRleEZl dGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAqKSBzY2FuOwogCi0JaGVh cGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNjYW4pOworCS8qIGRyb3AgcGluIGlmIHRoZXJlJ3MgYSBw aW5uZWQgaGVhcCBwYWdlICovCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQor CQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKworCS8qIGRyb3AgcGluIGlmIHRoZXJl J3MgYSBwaW5uZWQgdmlzaWJpbGl0eSBtYXAgcGFnZSAqLworCWlmIChCdWZmZXJJc1ZhbGlkKGhz Y2FuLT54c192bWJ1ZmZlcikpCisJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX3ZtYnVmZmVyKTsK IAogCXBmcmVlKGhzY2FuKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9pbmRleGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IDUy N2UwNmUwOS4uMTg5ZTY3Njg0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv aW5kZXhhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTM4 Niw3ICszODYsNyBAQCBpbmRleF9yZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLAogCUFzc2VydChu a2V5cyA9PSBzY2FuLT5udW1iZXJPZktleXMpOwogCUFzc2VydChub3JkZXJieXMgPT0gc2Nhbi0+ bnVtYmVyT2ZPcmRlckJ5cyk7CiAKLQkvKiBSZWxlYXNlIHJlc291cmNlcyAobGlrZSBidWZmZXIg cGlucykgZnJvbSB0YWJsZSBhY2Nlc3NlcyAqLworCS8qIHJlc2V0IHRhYmxlIEFNIHN0YXRlIGZv ciByZXNjYW4gKi8KIAlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoKQogCQl0YWJsZV9pbmRleF9mZXRj aF9yZXNldChzY2FuLT54c19oZWFwZmV0Y2gpOwogCkBAIC00NjIsNyArNDYyLDcgQEAgaW5kZXhf cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCVNDQU5fQ0hFQ0tTOwogCUNIRUNLX1NDQU5f UFJPQ0VEVVJFKGFtcmVzdHJwb3MpOwogCi0JLyogcmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVm ZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KKwkvKiByZXNldCB0YWJsZSBBTSBzdGF0 ZSBmb3IgcmVzY2FuICovCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkKIAkJdGFibGVfaW5kZXhf ZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAotLSAKMi41My4wCgo= --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0003-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Disposition: attachment; filename="v18-0003-heapam-Track-heap-block-in-IndexFetchHeapData.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37s16 RnJvbSBkMDdiOTI5MzAxMDU2NDZjMzE2ZGI1ZWFkZDRlYTIzZDE3ZTMwYWI5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMTAgTWFyIDIwMjYgMTQ6NDA6MzUgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwMy8xOV0g aGVhcGFtOiBUcmFjayBoZWFwIGJsb2NrIGluIEluZGV4RmV0Y2hIZWFwRGF0YS4KCkFkZCBhbiBl eHBsaWNpdCBCbG9ja051bWJlciBmaWVsZCAoeHNfYmxrKSB0byBJbmRleEZldGNoSGVhcERhdGEg dGhhdAp0cmFja3Mgd2hpY2ggaGVhcCBibG9jayBpcyBjdXJyZW50bHkgcGlubmVkIGluIHhzX2Ni dWYuCgpoZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUgbm93IHVzZXMgeHNfYmxrIHRvIGRldGVybWlu ZSB3aGVuIGJ1ZmZlcgpzd2l0Y2hpbmcgaXMgbmVlZGVkLCByZXBsYWNpbmcgdGhlIHByZXZpb3Vz IGFwcHJvYWNoIHRoYXQgY29tcGFyZWQKYnVmZmVyIGlkZW50aXRpZXMgdmlhIFJlbGVhc2VBbmRS ZWFkQnVmZmVyIG9uIGV2ZXJ5IG5vbi1IT1QtY2hhaW4gY2FsbC4KClRoaXMgaXMgcHJlcGFyYXRv cnkgd29yayBmb3IgYW4gdXBjb21pbmcgY29tbWl0IHRoYXQgd2lsbCBhZGQgaW5kZXgKcHJlZmV0 Y2hpbmcgdXNpbmcgYSByZWFkIHN0cmVhbS4gIERlbGVnYXRpbmcgdGhlIHJlbGVhc2Ugb2YgYSBj dXJyZW50bHkKcGlubmVkIGJ1ZmZlciB0byBSZWxlYXNlQW5kUmVhZEJ1ZmZlciB3b24ndCB3b3Jr IGFueW1vcmUgLS0gYXQgbGVhc3Qgbm90CndoZW4gdGhlIG5leHQgYnVmZmVyIHRoYXQgdGhlIHNj YW4gbmVlZHMgdG8gcGluIGlzIG9uZSByZXR1cm5lZCBieQpyZWFkX3N0cmVhbV9uZXh0X2J1ZmZl ciAobm90IGEgYnVmZmVyIHJldHVybmVkIGJ5IFJlYWRCdWZmZXIpLgoKQXV0aG9yOiBQZXRlciBH ZW9naGVnYW4gPHBnQGJvd3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNA YW5hcmF6ZWwuZGU+CkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vQ0FIMi1Xej1nPUpU U3lEQjRVdEI1c3UyWmN2c1M3VmJQK1pNdnZhRzZBQm9DYitzOEx3QG1haWwuZ21haWwuY29tCi0t LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgIHwgIDUgKystLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jIHwgMzUgKysrKysrKysr KysrKy0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAyNCBpbnNlcnRpb25zKCspLCAxNiBkZWxl dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmggYi9zcmMv aW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKaW5kZXggOGY5Y2MyZjg4Li5hZGRiODgzY2UgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nl c3MvaGVhcGFtLmgKQEAgLTEyNCwxMCArMTI0LDExIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4RmV0 Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyogQU0gaW5kZXBlbmRl bnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJLyoKLQkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4sIGlmIGFueS4gTkI6IGlmIHhzX2NidWYgaXMgbm90Ci0JICogSW52YWxpZEJ1 ZmZlciwgd2UgaG9sZCBhIHBpbiBvbiB0aGF0IGJ1ZmZlci4KKwkgKiBDdXJyZW50IGhlYXAgYnVm ZmVyIGluIHNjYW4gKGFuZCBpdHMgYmxvY2sgbnVtYmVyKSwgaWYgYW55LiAgTkI6IGlmCisJICog eHNfYmxrIGlzIG5vdCBJbnZhbGlkQmxvY2tOdW1iZXIsIHdlIGhvbGQgYSBwaW4gaW4geHNfY2J1 Zi4KIAkgKi8KIAlCdWZmZXIJCXhzX2NidWY7CisJQmxvY2tOdW1iZXIgeHNfYmxrOwogCiAJLyog Q3VycmVudCBoZWFwIGJsb2NrJ3MgY29ycmVzcG9uZGluZyBwYWdlIGluIHRoZSB2aXNpYmlsaXR5 IG1hcCAqLwogCUJ1ZmZlcgkJeHNfdm1idWZmZXI7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9o ZWFwYW1faW5kZXhzY2FuLmMKaW5kZXggZGU4MTJhNDYyLi5jZjkzNjZhZDQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faW5kZXhzY2FuLmMKQEAgLTQ3LDYgKzQ3LDcgQEAgaGVh cGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCkKIAogCWhzY2FuLT54c19iYXNlLnJl bCA9IHJlbDsKIAloc2Nhbi0+eHNfY2J1ZiA9IEludmFsaWRCdWZmZXI7CisJaHNjYW4tPnhzX2Js ayA9IEludmFsaWRCbG9ja051bWJlcjsKIAloc2Nhbi0+eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVm ZmVyOwogCiAJcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsKQEAgLTYxLDYgKzYyLDcgQEAgaGVhcGFt X2luZGV4X2ZldGNoX3Jlc2V0KEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiAJewogCQlSZWxl YXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKIAkJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVm ZmVyOworCQloc2Nhbi0+eHNfYmxrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCX0KIAogCWlmIChC dWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1ZmZlcikpCkBAIC0xMjksMjQgKzEzMSwyOSBAQCBo ZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGVfaW1wbChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAq c2NhbiwKIAogCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwogCi0JLyogV2UgY2Fu IHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBjaGFp bi4gKi8KLQlpZiAoISpoZWFwX2NvbnRpbnVlKQorCS8qIFdlIGNhbiBza2lwIHRoZSBidWZmZXIt c3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIG9uIHRoZSBzYW1lIHBhZ2UuICovCisJaWYgKGhzY2Fu LT54c19ibGsgIT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQogCXsKLQkJLyogU3dp dGNoIHRvIGNvcnJlY3QgYnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlC dWZmZXIJCXByZXZfYnVmID0gaHNjYW4tPnhzX2NidWY7CisJCUFzc2VydCghKmhlYXBfY29udGlu dWUpOwogCi0JCWhzY2FuLT54c19jYnVmID0gUmVsZWFzZUFuZFJlYWRCdWZmZXIoaHNjYW4tPnhz X2NidWYsCi0JCQkJCQkJCQkJCSAgaHNjYW4tPnhzX2Jhc2UucmVsLAotCQkJCQkJCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKSk7CisJCS8qIFJlbWVtYmVyIHRoaXMgYnVmZmVy J3MgYmxvY2sgbnVtYmVyIGZvciBuZXh0IHRpbWUgKi8KKwkJaHNjYW4tPnhzX2JsayA9IEl0ZW1Q b2ludGVyR2V0QmxvY2tOdW1iZXIodGlkKTsKKworCQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+ eHNfY2J1ZikpCisJCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKKworCQloc2Nhbi0+ eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsK IAogCQkvKgotCQkgKiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkg b24gdGhpcyBwYWdlCisJCSAqIFBydW5lIHBhZ2Ugd2hlbiBpdCBpcyBwaW5uZWQgZm9yIHRoZSBm aXJzdCB0aW1lCiAJCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQlo ZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0J CQkJCQkJCSZoc2Nhbi0+eHNfdm1idWZmZXIpOworCQloZWFwX3BhZ2VfcHJ1bmVfb3B0KGhzY2Fu LT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCisJCQkJCQkJJmhzY2FuLT54c192bWJ1ZmZl cik7CiAJfQogCisJQXNzZXJ0KEJ1ZmZlckdldEJsb2NrTnVtYmVyKGhzY2FuLT54c19jYnVmKSA9 PSBoc2Nhbi0+eHNfYmxrKTsKKwlBc3NlcnQoaHNjYW4tPnhzX2JsayA9PSBJdGVtUG9pbnRlckdl dEJsb2NrTnVtYmVyKHRpZCkpOworCiAJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZl ciBzbyB3ZSBjYW4gZXhhbWluZSB2aXNpYmlsaXR5ICovCiAJTG9ja0J1ZmZlcihoc2Nhbi0+eHNf Y2J1ZiwgQlVGRkVSX0xPQ0tfU0hBUkUpOwogCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2Vh cmNoX2J1ZmZlcih0aWQsCkBAIC0yNTIsMTEgKzI1OSwxMSBAQCBoZWFwYW1faW5kZXhfZ2V0bmV4 dF9zbG90KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24sCiAJCQkJ CSAqLwogCQkJCQlpZiAodW5saWtlbHkoeHNfdmlzaXRlZF9wYWdlc19saW1pdCA+IDApKQogCQkJ CQl7Ci0JCQkJCQlCbG9ja051bWJlciBibGsgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRp ZCk7CisJCQkJCQlBc3NlcnQoaHNjYW4tPnhzX2JsayA9PSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCkpOwogCi0JCQkJCQlpZiAoYmxrICE9IGxhc3RfdmlzaXRlZF9ibG9jaykKKwkJCQkJ CWlmIChoc2Nhbi0+eHNfYmxrICE9IGxhc3RfdmlzaXRlZF9ibG9jaykKIAkJCQkJCXsKLQkJCQkJ CQlsYXN0X3Zpc2l0ZWRfYmxvY2sgPSBibGs7CisJCQkJCQkJbGFzdF92aXNpdGVkX2Jsb2NrID0g aHNjYW4tPnhzX2JsazsKIAkJCQkJCQlpZiAoKytuX3Zpc2l0ZWRfcGFnZXMgPiB4c192aXNpdGVk X3BhZ2VzX2xpbWl0KQogCQkJCQkJCQlyZXR1cm4gZmFsc2U7CS8qIGdpdmUgdXAgKi8KIAkJCQkJ CX0KLS0gCjIuNTMuMAoK --000000000000c86eaf064e0acc3f Content-Type: application/octet-stream; name="v18-0001-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Disposition: attachment; filename="v18-0001-Move-heapam_handler.c-index-scan-code-to-new-fil.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mn9ll37x18 RnJvbSBjZTczNWVhNzkyYmRmNDBkZGRmMWQzOGI2NGM0OGRhMWYzN2UzZmRjIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFdl ZCwgMjUgTWFyIDIwMjYgMDA6MjI6MTcgLTA0MDAKU3ViamVjdDogW1BBVENIIHYxOCAwMS8xOV0g TW92ZSBoZWFwYW1faGFuZGxlci5jIGluZGV4IHNjYW4gY29kZSB0byBuZXcgZmlsZS4KCk1vdmUg dGhlIGhlYXBhbSBpbmRleCBmZXRjaCBjYWxsYmFja3MgKGluZGV4X2ZldGNoX2JlZ2luLAppbmRl eF9mZXRjaF9yZXNldCwgaW5kZXhfZmV0Y2hfZW5kLCBhbmQgaW5kZXhfZmV0Y2hfdHVwbGUpIGlu dG8gYQpkZWRpY2F0ZWQgZmlsZS4gIFRoaXMgaXMgYSBwdXJlbHkgbWVjaGFuaWNhbCBtb3ZlIHdp dGggbm8gZnVuY3Rpb25hbApjaGFuZ2VzLgoKVXBjb21pbmcgd29yayB0byBhZGQgYSBzbG90LWJh c2VkIHRhYmxlIEFNIGludGVyZmFjZSBmb3IgaW5kZXggc2NhbnMKd2lsbCBzdWJzdGFudGlhbGx5 IGV4cGFuZCB0aGlzIGNvZGUuICBLZWVwaW5nIGl0IGluIGhlYXBhbV9oYW5kbGVyLmMKd291bGQg Y2x1dHRlciBhIGZpbGUgd2hvc2UgcHJpbWFyeSByb2xlIGlzIHRvIHdpcmUgdXAgdGhlIFRhYmxl QW1Sb3V0aW5lCmNhbGxiYWNrcy4gIEJpdG1hcCBoZWFwIHNjYW5zIGFuZCBzZXF1ZW50aWFsIHNj YW5zIHdvdWxkIGJlbmVmaXQgZnJvbQpzaW1pbGFyIHNlcGFyYXRpb24gaW4gdGhlIGZ1dHVyZS4K CkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpSZXZpZXdlZC1CeTogQW5kcmVz IEZyZXVuZCA8YW5kcmVzQGFuYXJhemVsLmRlPgpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5l cy9tL2JtYnJraXlqeG9hbDZvNXhhZHp2NWJ2ZW95bnJ0M3gzN3dxY2g3dzNqbnd1bWtxMnlvQGI0 em10bnJmczRtaAotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9oZWFwYW0uaCAgICAgICAgICAgICAg ICB8ICAgOSArKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvTWFrZWZpbGUgICAgICAgICAgIHwg ICAxICsKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgICB8IDEwOSAt LS0tLS0tLS0tLS0tLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9pbmRleHNj YW4uYyB8IDEyNiArKysrKysrKysrKysrKysrKysrKysKIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L21lc29uLmJ1aWxkICAgICAgICB8ICAgMSArCiA1IGZpbGVzIGNoYW5nZWQsIDEzNyBpbnNlcnRp b25zKCspLCAxMDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2JhY2tlbmQv YWNjZXNzL2hlYXAvaGVhcGFtX2luZGV4c2Nhbi5jCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv YWNjZXNzL2hlYXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IDliNDAz MjAzMC4uNjJmMTVlMGIxIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgK KysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC00MzIsNiArNDMyLDE1IEBAIGV4 dGVybiB2b2lkIHNpbXBsZV9oZWFwX3VwZGF0ZShSZWxhdGlvbiByZWxhdGlvbiwgY29uc3QgSXRl bVBvaW50ZXJEYXRhICpvdGlkLAogZXh0ZXJuIFRyYW5zYWN0aW9uSWQgaGVhcF9pbmRleF9kZWxl dGVfdHVwbGVzKFJlbGF0aW9uIHJlbCwKIAkJCQkJCQkJCQkJICBUTV9JbmRleERlbGV0ZU9wICpk ZWxzdGF0ZSk7CiAKKy8qIGluIGhlYXAvaGVhcGFtX2luZGV4c2Nhbi5jICovCitleHRlcm4gSW5k ZXhGZXRjaFRhYmxlRGF0YSAqaGVhcGFtX2luZGV4X2ZldGNoX2JlZ2luKFJlbGF0aW9uIHJlbCk7 CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0 YSAqc2Nhbik7CitleHRlcm4gdm9pZCBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kKEluZGV4RmV0Y2hU YWJsZURhdGEgKnNjYW4pOworZXh0ZXJuIGJvb2wgaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHN0 cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuLAorCQkJCQkJCQkJIEl0ZW1Qb2ludGVyIHRp ZCwgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkJCQkgVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGJv b2wgKmhlYXBfY29udGludWUsCisJCQkJCQkJCQkgYm9vbCAqYWxsX2RlYWQpOworCiAvKiBpbiBo ZWFwL3BydW5laGVhcC5jICovCiBleHRlcm4gdm9pZCBoZWFwX3BhZ2VfcHJ1bmVfb3B0KFJlbGF0 aW9uIHJlbGF0aW9uLCBCdWZmZXIgYnVmZmVyLAogCQkJCQkJCQlCdWZmZXIgKnZtYnVmZmVyKTsK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvTWFrZWZpbGUKaW5kZXggMzk0NTM0MTcyLi4xZDI3Y2NiOTEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL01ha2VmaWxlCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy9oZWFwL01ha2VmaWxlCkBAIC0xNSw2ICsxNSw3IEBAIGluY2x1ZGUgJCh0b3BfYnVp bGRkaXIpL3NyYy9NYWtlZmlsZS5nbG9iYWwKIE9CSlMgPSBcCiAJaGVhcGFtLm8gXAogCWhlYXBh bV9oYW5kbGVyLm8gXAorCWhlYXBhbV9pbmRleHNjYW4ubyBcCiAJaGVhcGFtX3Zpc2liaWxpdHku byBcCiAJaGVhcGFtX3hsb2cubyBcCiAJaGVhcHRvYXN0Lm8gXApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZDQwODc4OTI4Li5lZmYyNzZmMGQgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtNzUsMTE1ICs3NSw2IEBAIGhl YXBhbV9zbG90X2NhbGxiYWNrcyhSZWxhdGlvbiByZWxhdGlvbikKIH0KIAogCi0vKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCi0gKiAtLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KLSAqLwotCi1zdGF0aWMgSW5kZXhGZXRjaFRhYmxlRGF0YSAqCi1oZWFwYW1faW5k ZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVhcERhdGEpOwotCi0JaHNjYW4tPnhzX2Jh c2UucmVsID0gcmVsOwotCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1ZmZlcjsKLQloc2Nhbi0+ eHNfdm1idWZmZXIgPSBJbnZhbGlkQnVmZmVyOwotCi0JcmV0dXJuICZoc2Nhbi0+eHNfYmFzZTsK LX0KLQotc3RhdGljIHZvaWQKLWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChJbmRleEZldGNoVGFi bGVEYXRhICpzY2FuKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRj aEhlYXBEYXRhICopIHNjYW47Ci0KLQlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfY2J1Zikp Ci0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c19jYnVmKTsKLQkJaHNjYW4tPnhzX2NidWYg PSBJbnZhbGlkQnVmZmVyOwotCX0KLQotCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c192bWJ1 ZmZlcikpCi0JewotCQlSZWxlYXNlQnVmZmVyKGhzY2FuLT54c192bWJ1ZmZlcik7Ci0JCWhzY2Fu LT54c192bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotfQotCi1zdGF0aWMgdm9pZAotaGVh cGFtX2luZGV4X2ZldGNoX2VuZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQotewotCUluZGV4 RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0KLQlo ZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbik7Ci0KLQlwZnJlZShoc2Nhbik7Ci19Ci0KLXN0 YXRpYyBib29sCi1oZWFwYW1faW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJs ZURhdGEgKnNjYW4sCi0JCQkJCQkgSXRlbVBvaW50ZXIgdGlkLAotCQkJCQkJIFNuYXBzaG90IHNu YXBzaG90LAotCQkJCQkJIFR1cGxlVGFibGVTbG90ICpzbG90LAotCQkJCQkJIGJvb2wgKmNhbGxf YWdhaW4sIGJvb2wgKmFsbF9kZWFkKQotewotCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSAo SW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47Ci0JQnVmZmVySGVhcFR1cGxlVGFibGVTbG90ICpi c2xvdCA9IChCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKikgc2xvdDsKLQlib29sCQlnb3RfaGVh cF90dXBsZTsKLQotCUFzc2VydChUVFNfSVNfQlVGRkVSVFVQTEUoc2xvdCkpOwotCi0JLyogV2Ug Y2FuIHNraXAgdGhlIGJ1ZmZlci1zd2l0Y2hpbmcgbG9naWMgaWYgd2UncmUgaW4gbWlkLUhPVCBj aGFpbi4gKi8KLQlpZiAoISpjYWxsX2FnYWluKQotCXsKLQkJLyogU3dpdGNoIHRvIGNvcnJlY3Qg YnVmZmVyIGlmIHdlIGRvbid0IGhhdmUgaXQgYWxyZWFkeSAqLwotCQlCdWZmZXIJCXByZXZfYnVm ID0gaHNjYW4tPnhzX2NidWY7Ci0KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5kUmVhZEJ1 ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5yZWwsCi0J CQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKLQotCQkvKgotCQkg KiBQcnVuZSBwYWdlLCBidXQgb25seSBpZiB3ZSB3ZXJlbid0IGFscmVhZHkgb24gdGhpcyBwYWdl Ci0JCSAqLwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2Vf cHJ1bmVfb3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYsCi0JCQkJCQkJCSZo c2Nhbi0+eHNfdm1idWZmZXIpOwotCX0KLQotCS8qIE9idGFpbiBzaGFyZS1sb2NrIG9uIHRoZSBi dWZmZXIgc28gd2UgY2FuIGV4YW1pbmUgdmlzaWJpbGl0eSAqLwotCUxvY2tCdWZmZXIoaHNjYW4t PnhzX2NidWYsIEJVRkZFUl9MT0NLX1NIQVJFKTsKLQlnb3RfaGVhcF90dXBsZSA9IGhlYXBfaG90 X3NlYXJjaF9idWZmZXIodGlkLAotCQkJCQkJCQkJCQloc2Nhbi0+eHNfYmFzZS5yZWwsCi0JCQkJ CQkJCQkJCWhzY2FuLT54c19jYnVmLAotCQkJCQkJCQkJCQlzbmFwc2hvdCwKLQkJCQkJCQkJCQkJ JmJzbG90LT5iYXNlLnR1cGRhdGEsCi0JCQkJCQkJCQkJCWFsbF9kZWFkLAotCQkJCQkJCQkJCQkh KmNhbGxfYWdhaW4pOwotCWJzbG90LT5iYXNlLnR1cGRhdGEudF9zZWxmID0gKnRpZDsKLQlMb2Nr QnVmZmVyKGhzY2FuLT54c19jYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOwotCi0JaWYgKGdvdF9o ZWFwX3R1cGxlKQotCXsKLQkJLyoKLQkJICogT25seSBpbiBhIG5vbi1NVkNDIHNuYXBzaG90IGNh biBtb3JlIHRoYW4gb25lIG1lbWJlciBvZiB0aGUgSE9UCi0JCSAqIGNoYWluIGJlIHZpc2libGUu Ci0JCSAqLwotCQkqY2FsbF9hZ2FpbiA9ICFJc01WQ0NMaWtlU25hcHNob3Qoc25hcHNob3QpOwot Ci0JCXNsb3QtPnR0c190YWJsZU9pZCA9IFJlbGF0aW9uR2V0UmVsaWQoc2Nhbi0+cmVsKTsKLQkJ RXhlY1N0b3JlQnVmZmVySGVhcFR1cGxlKCZic2xvdC0+YmFzZS50dXBkYXRhLCBzbG90LCBoc2Nh bi0+eHNfY2J1Zik7Ci0JfQotCWVsc2UKLQl7Ci0JCS8qIFdlJ3ZlIHJlYWNoZWQgdGhlIGVuZCBv ZiB0aGUgSE9UIGNoYWluLiAqLwotCQkqY2FsbF9hZ2FpbiA9IGZhbHNlOwotCX0KLQotCXJldHVy biBnb3RfaGVhcF90dXBsZTsKLX0KLQotCiAvKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIENhbGxiYWNr cyBmb3Igbm9uLW1vZGlmeWluZyBvcGVyYXRpb25zIG9uIGluZGl2aWR1YWwgdHVwbGVzIGZvciBo ZWFwIEFNCiAgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oZWFwL2hlYXBhbV9pbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBh bV9pbmRleHNjYW4uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAuLjRlODIz MDgzNAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9p bmRleHNjYW4uYwpAQCAtMCwwICsxLDEyNiBAQAorLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICog aGVhcGFtX2luZGV4c2Nhbi5jCisgKgkgIGhlYXAgdGFibGUgcGxhaW4gaW5kZXggc2NhbiBhbmQg aW5kZXgtb25seSBzY2FuIGNvZGUKKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICoKKyAqIElERU5USUZJQ0FUSU9OCisgKgkgIHNyYy9iYWNrZW5kL2FjY2Vzcy9oZWFw L2hlYXBhbV9pbmRleHNjYW4uYworICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisjaW5jbHVk ZSAicG9zdGdyZXMuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9oZWFwYW0uaCIKKworCisvKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqIEluZGV4IFNjYW4gQ2FsbGJhY2tzIGZvciBoZWFwIEFNCisgKiAtLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0KKyAqLworCitJbmRleEZldGNoVGFibGVEYXRhICoKK2hlYXBhbV9pbmRleF9m ZXRjaF9iZWdpbihSZWxhdGlvbiByZWwpCit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IHBhbGxvYzBfb2JqZWN0KEluZGV4RmV0Y2hIZWFwRGF0YSk7CisKKwloc2Nhbi0+eHNfYmFzZS5y ZWwgPSByZWw7CisJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c192 bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7CisKKwlyZXR1cm4gJmhzY2FuLT54c19iYXNlOworfQor Cit2b2lkCitoZWFwYW1faW5kZXhfZmV0Y2hfcmVzZXQoSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2Nh bikKK3sKKwlJbmRleEZldGNoSGVhcERhdGEgKmhzY2FuID0gKEluZGV4RmV0Y2hIZWFwRGF0YSAq KSBzY2FuOworCisJaWYgKEJ1ZmZlcklzVmFsaWQoaHNjYW4tPnhzX2NidWYpKQorCXsKKwkJUmVs ZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfY2J1Zik7CisJCWhzY2FuLT54c19jYnVmID0gSW52YWxpZEJ1 ZmZlcjsKKwl9CisKKwlpZiAoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNfdm1idWZmZXIpKQorCXsK KwkJUmVsZWFzZUJ1ZmZlcihoc2Nhbi0+eHNfdm1idWZmZXIpOworCQloc2Nhbi0+eHNfdm1idWZm ZXIgPSBJbnZhbGlkQnVmZmVyOworCX0KK30KKwordm9pZAoraGVhcGFtX2luZGV4X2ZldGNoX2Vu ZChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQoreworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNj YW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CisKKwloZWFwYW1faW5kZXhfZmV0Y2hf cmVzZXQoc2Nhbik7CisKKwlwZnJlZShoc2Nhbik7Cit9CisKK2Jvb2wKK2hlYXBhbV9pbmRleF9m ZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKKwkJCQkJCSBJdGVt UG9pbnRlciB0aWQsCisJCQkJCQkgU25hcHNob3Qgc25hcHNob3QsCisJCQkJCQkgVHVwbGVUYWJs ZVNsb3QgKnNsb3QsCisJCQkJCQkgYm9vbCAqaGVhcF9jb250aW51ZSwgYm9vbCAqYWxsX2RlYWQp Cit7CisJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikg c2NhbjsKKwlCdWZmZXJIZWFwVHVwbGVUYWJsZVNsb3QgKmJzbG90ID0gKEJ1ZmZlckhlYXBUdXBs ZVRhYmxlU2xvdCAqKSBzbG90OworCWJvb2wJCWdvdF9oZWFwX3R1cGxlOworCisJQXNzZXJ0KFRU U19JU19CVUZGRVJUVVBMRShzbG90KSk7CisKKwkvKiBXZSBjYW4gc2tpcCB0aGUgYnVmZmVyLXN3 aXRjaGluZyBsb2dpYyBpZiB3ZSdyZSBpbiBtaWQtSE9UIGNoYWluLiAqLworCWlmICghKmhlYXBf Y29udGludWUpCisJeworCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3Qg aGF2ZSBpdCBhbHJlYWR5ICovCisJCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsK KworCQloc2Nhbi0+eHNfY2J1ZiA9IFJlbGVhc2VBbmRSZWFkQnVmZmVyKGhzY2FuLT54c19jYnVm LAorCQkJCQkJCQkJCQkgIGhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJICBJdGVtUG9p bnRlckdldEJsb2NrTnVtYmVyKHRpZCkpOworCisJCS8qCisJCSAqIFBydW5lIHBhZ2UsIGJ1dCBv bmx5IGlmIHdlIHdlcmVuJ3QgYWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICovCisJCWlmIChwcmV2 X2J1ZiAhPSBoc2Nhbi0+eHNfY2J1ZikKKwkJCWhlYXBfcGFnZV9wcnVuZV9vcHQoaHNjYW4tPnhz X2Jhc2UucmVsLCBoc2Nhbi0+eHNfY2J1ZiwKKwkJCQkJCQkJJmhzY2FuLT54c192bWJ1ZmZlcik7 CisJfQorCisJLyogT2J0YWluIHNoYXJlLWxvY2sgb24gdGhlIGJ1ZmZlciBzbyB3ZSBjYW4gZXhh bWluZSB2aXNpYmlsaXR5ICovCisJTG9ja0J1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwgQlVGRkVSX0xP Q0tfU0hBUkUpOworCWdvdF9oZWFwX3R1cGxlID0gaGVhcF9ob3Rfc2VhcmNoX2J1ZmZlcih0aWQs CisJCQkJCQkJCQkJCWhzY2FuLT54c19iYXNlLnJlbCwKKwkJCQkJCQkJCQkJaHNjYW4tPnhzX2Ni dWYsCisJCQkJCQkJCQkJCXNuYXBzaG90LAorCQkJCQkJCQkJCQkmYnNsb3QtPmJhc2UudHVwZGF0 YSwKKwkJCQkJCQkJCQkJYWxsX2RlYWQsCisJCQkJCQkJCQkJCSEqaGVhcF9jb250aW51ZSk7CisJ YnNsb3QtPmJhc2UudHVwZGF0YS50X3NlbGYgPSAqdGlkOworCUxvY2tCdWZmZXIoaHNjYW4tPnhz X2NidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CisKKwlpZiAoZ290X2hlYXBfdHVwbGUpCisJewor CQkvKgorCQkgKiBPbmx5IGluIGEgbm9uLU1WQ0Mgc25hcHNob3QgY2FuIG1vcmUgdGhhbiBvbmUg bWVtYmVyIG9mIHRoZSBIT1QKKwkJICogY2hhaW4gYmUgdmlzaWJsZS4KKwkJICovCisJCSpoZWFw X2NvbnRpbnVlID0gIUlzTVZDQ0xpa2VTbmFwc2hvdChzbmFwc2hvdCk7CisKKwkJc2xvdC0+dHRz X3RhYmxlT2lkID0gUmVsYXRpb25HZXRSZWxpZChzY2FuLT5yZWwpOworCQlFeGVjU3RvcmVCdWZm ZXJIZWFwVHVwbGUoJmJzbG90LT5iYXNlLnR1cGRhdGEsIHNsb3QsIGhzY2FuLT54c19jYnVmKTsK Kwl9CisJZWxzZQorCXsKKwkJLyogV2UndmUgcmVhY2hlZCB0aGUgZW5kIG9mIHRoZSBIT1QgY2hh aW4uICovCisJCSpoZWFwX2NvbnRpbnVlID0gZmFsc2U7CisJfQorCisJcmV0dXJuIGdvdF9oZWFw X3R1cGxlOworfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVp bGQgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9tZXNvbi5idWlsZAppbmRleCA5MmFiOGJlM2Qu LjAwZWMwN2Q3ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVp bGQKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvbWVzb24uYnVpbGQKQEAgLTMsNiArMyw3 IEBACiBiYWNrZW5kX3NvdXJjZXMgKz0gZmlsZXMoCiAgICdoZWFwYW0uYycsCiAgICdoZWFwYW1f aGFuZGxlci5jJywKKyAgJ2hlYXBhbV9pbmRleHNjYW4uYycsCiAgICdoZWFwYW1fdmlzaWJpbGl0 eS5jJywKICAgJ2hlYXBhbV94bG9nLmMnLAogICAnaGVhcHRvYXN0LmMnLAotLSAKMi41My4wCgo= --000000000000c86eaf064e0acc3f--