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 1vdYdz-002BAi-0u for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Jan 2026 18:52:32 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vdYcy-00F70e-2V for pgsql-hackers@arkaria.postgresql.org; Wed, 07 Jan 2026 18:51:29 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vdYcy-00F70V-0W for pgsql-hackers@lists.postgresql.org; Wed, 07 Jan 2026 18:51:29 +0000 Received: from mail-wr1-x434.google.com ([2a00:1450:4864:20::434]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vdYcv-0057qN-2w for pgsql-hackers@lists.postgresql.org; Wed, 07 Jan 2026 18:51:28 +0000 Received: by mail-wr1-x434.google.com with SMTP id ffacd0b85a97d-4327778df7fso1425753f8f.3 for ; Wed, 07 Jan 2026 10:51:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=bowt-ie.20230601.gappssmtp.com; s=20230601; t=1767811880; x=1768416680; 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=+oZQSJBtj0VtuzU4R3HeB/1tanFtMrDKeU3DELgfRjg=; b=DPjGrCQUgJI12PwI4tZbKVuTz3b4cE15U8qgRyc1HPcxjsfVQwbMVci1SHLBTUbsh7 8sHKDmJIY7s79utnmwTF0kGlsvbjgtNLlcxJAxFJ/Te7lEmrx6WZ+Z7mYSFfWwnn3K4B F7PttNH56MN8L4hbbNU+ig/MI75FpozDzSYz7Of+O9LK7lRx5gyQJLs0WtgBxjJmbx3c xMAGG3b09JU6VqnnobE845HABh7kyr0ROCXIuPBHaLWOntN+ojdtIwMOXmjbWASWm7+3 MPKS0CfaQi1hWFHbybkPK6Mq750JZ7wuRI5/4f19O2mmjNuirqOyk5qCkTgf6LS7J0Xb a4Vw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1767811880; x=1768416680; 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=+oZQSJBtj0VtuzU4R3HeB/1tanFtMrDKeU3DELgfRjg=; b=aidJ0OVY4A23ZZOISCz8LqAUTkr8takn+vHWD/B3N5jHSg44KpfUAGpjfy5V+ZBv2o I/MCco1HxMgO0XbWfGQE8ghum1LLYYeWPY4Z6aZLslgsaIdxh6zfkx6g44Yz48UA39a4 83l8S52G4f0hT1hqwMoX1TlXwhRRcCrBAxJ3lSDlGw4UmWt0EN/1LwiOcWiekkd1h6Kj CjD5LmhwQ0myMP3/PfaCfbf0MY6YMfGeuN7/H8HGDxJdeXjbcxJsAmSvs/hPeEArJsUp eFCxNPqXXe2wJKLBOS7jwWw6vK2uiKzHI72voEypSIkJULBQwppOrPENXMksUrCqJAqK EEqg== X-Forwarded-Encrypted: i=1; AJvYcCWaC3/O9fNKCH2h/d2QGMJCHcUIiYv+ZpoZctB81MxmC/E2w1ifSARAPOjhDgR6+AdN1bwpfCVz+2ZXe5uP@lists.postgresql.org X-Gm-Message-State: AOJu0YwdVskTCT/a1hD1gH0DdXSIe6ISKK3bSNZNhXYZDmGQ1+CjVrVy RCUfeEzzoIpjh0+a7k+5VjI83Xj3BcuLMkbnFG8NZULiSugIbvQyEP8u7x402oWdn1hJhgQNXL5 s2QSZG2Ro9ljYvztuu42h1rlNYrA6FbNkHzrneFUXsw== X-Gm-Gg: AY/fxX68a8yn2o+9TJe36Xl3l6RV8Jjdy8DfqQkMrnoiYYVXroyz9oxiyno45HmNsa/ 0nQ61xLTFpNU1vA1TPhok7babswT99B9dAH76XipPnVvGTKtgO0p8wbO3+Ug1Hc411bHlodpK1a 0ok2AVcXxYYBRJ1M4OposBiX/ZDifaiqSi1lybOsYyLBpqW+sc+DXeHcGUA5XuTS98sawrDaLV/ 5JlxRHH+itbZ6rFN4U1dHPeucjiWyqvza+HcuzKVR7+qU/t2YMsvTL4CltTBB4qiAr1IBI= X-Google-Smtp-Source: AGHT+IEnonrwHpLY6YlxNzkS+W7PKNgKqEDWxW0xb2ArEfrH/1UpxPzs6OFfn85SNkTZPsJB5k4d6lbQiDD8n8Y/20U= X-Received: by 2002:adf:f609:0:b0:432:5bef:ecf7 with SMTP id ffacd0b85a97d-432c375b500mr3652467f8f.37.1767811880230; Wed, 07 Jan 2026 10:51:20 -0800 (PST) MIME-Version: 1.0 References: <6d59c277-c440-4d1f-a46e-157958c06a5f@vondra.me> <5pltwb73d7cynsxo2yb54ygjk7haviatkrx43mnzihc6kkield@ahnstpgof46i> <931afce3-8c86-4c96-9861-0ffa17c6560f@vondra.me> <4zeu5yb73byiquvf3eefsunnrydyqfxy3eup66jrliutrtd4xl@5iifjey4n5m5> In-Reply-To: From: Peter Geoghegan Date: Wed, 7 Jan 2026 13:50:53 -0500 X-Gm-Features: AQt7F2oaBPndQKgFshMJm-nWnHpgyoPEaEbeE7dPBbDhx72Nkv1cIr3wWmp98v8 Message-ID: Subject: Re: index prefetching To: Tomas Vondra Cc: Andres Freund , Thomas Munro , Nazir Bilal Yavuz , Robert Haas , Melanie Plageman , PostgreSQL Hackers , Georgios , Konstantin Knizhnik , Dilip Kumar Content-Type: multipart/mixed; boundary="00000000000026d6270647d0c7f3" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --00000000000026d6270647d0c7f3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sun, Dec 21, 2025 at 12:55=E2=80=AFPM Peter Geoghegan wrote= : > Attached is v5. Attached is v6. I'm posting this a little earlier than planned in order to make sure that the patch continues to apply cleanly against HEAD (v5 stopped cleanly applying about a week back). v6 focusses on simplifying the batch management code in heapam_batch_getnext_tid. Importantly, heapam_batch_getnext_tid no longer uses a loop to process items from the currently loaded batch/to load the next batch. The control flow in heapam_batch_getnext_tid is a lot simpler in general compared to v5. I still haven't had time to produce an implementation of the "heap buffer locking minimization" optimization that's clean enough to present to the list. The heapam_batch_getnext_tid refactoring in v6 is groundwork for that, though; the previous complicated loop-based control flow in heapam_batch_getnext_tid made that harder. Hopefully I'll manage to have that in shape in the next revision. The corresponding "batch management" control flow used by the stream callback (added by the second/prefetching patch) still needs to use a loop -- that can't be avoided/actually makes sense. But I did manage to make those parts a bit simpler and clearer for v6. Work remains to simplify that stream callback control flow. We still need to invent clear invariants that describe the relationship between readPos/readBatch and streamPos/streamBatch. Some verifying assertions would also go a long way towards making the readstream callback clean and maintainable. --=20 Peter Geoghegan --00000000000026d6270647d0c7f3 Content-Type: application/octet-stream; name="v6-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Disposition: attachment; filename="v6-0003-bufmgr-aio-Prototype-for-not-waiting-for-already-.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk4cbt152 RnJvbSAxYjFkNTlmNjY3YzIzYTZkYTgzMjNiOTAzNjM0YzBiNWMzYmQwOGRiIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+CkRh dGU6IEZyaSwgMTUgQXVnIDIwMjUgMTE6MDE6NTIgLTA0MDAKU3ViamVjdDogW1BBVENIIHY2IDMv NF0gYnVmbWdyOiBhaW86IFByb3RvdHlwZSBmb3Igbm90IHdhaXRpbmcgZm9yCiBhbHJlYWR5LWlu LXByb2dyZXNzIElPCgpBdXRob3I6ClJldmlld2VkLWJ5OgpEaXNjdXNzaW9uOiBodHRwczovL3Bv c3Rnci5lcy9tL3psamVyZ3dlcXRpN3g2N2xnNWlqZTJyemp1c2llMzduc2xzbmtqa2tieTRsYXFx YmZ3QDNwM3p1NTIyeXlrdgpCYWNrcGF0Y2g6Ci0tLQogc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZt Z3IuaCAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvc3RvcmFnZS9idWZmZXIvYnVmbWdyLmMg fCAxNTAgKysrKysrKysrKysrKysrKysrKysrKysrKystLQogMiBmaWxlcyBjaGFuZ2VkLCAxNDIg aW5zZXJ0aW9ucygrKSwgOSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9z dG9yYWdlL2J1Zm1nci5oIGIvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3IuaAppbmRleCA3MTVh ZTk2ZjAuLjBiNmZhODQ4YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvc3RvcmFnZS9idWZtZ3Iu aAorKysgYi9zcmMvaW5jbHVkZS9zdG9yYWdlL2J1Zm1nci5oCkBAIC0xNDcsNiArMTQ3LDcgQEAg c3RydWN0IFJlYWRCdWZmZXJzT3BlcmF0aW9uCiAJaW50CQkJZmxhZ3M7CiAJaW50MTYJCW5ibG9j a3M7CiAJaW50MTYJCW5ibG9ja3NfZG9uZTsKKwlib29sCQlmb3JlaWduX2lvOwogCVBnQWlvV2Fp dFJlZiBpb193cmVmOwogCVBnQWlvUmV0dXJuIGlvX3JldHVybjsKIH07CmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYyBiL3NyYy9iYWNrZW5kL3N0b3JhZ2Uv YnVmZmVyL2J1Zm1nci5jCmluZGV4IGEwMzZjMmFhMi4uZDNkZDY0ODA4IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9zdG9yYWdlL2J1ZmZlci9idWZtZ3IuYworKysgYi9zcmMvYmFja2VuZC9zdG9y YWdlL2J1ZmZlci9idWZtZ3IuYwpAQCAtMTYzMiw2ICsxNjMyLDQ2IEBAIFJlYWRCdWZmZXJzQ2Fu U3RhcnRJT09uY2UoQnVmZmVyIGJ1ZmZlciwgYm9vbCBub3dhaXQpCiAJCXJldHVybiBTdGFydEJ1 ZmZlcklPKEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSksIHRydWUsIG5vd2FpdCk7CiB9 CiAKKy8qCisgKiBDaGVjayBpZiB0aGUgYnVmZmVyIGlzIGFscmVhZHkgdW5kZXJnb2luZyByZWFk IEFJTy4gSWYgaXQgaXMsIGFzc2lnbiB0aGUKKyAqIElPJ3Mgd2FpdCByZWZlcmVuY2UgdG8gb3Bl cmF0aW9uLT5pb193cmVmLCB0aGVyZWJ5IGFsbG93aW5nIHRoZSBjYWxsZXIgdG8KKyAqIHdhaXQg Zm9yIHRoYXQgSU8uCisgKi8KK3N0YXRpYyBpbmxpbmUgYm9vbAorUmVhZEJ1ZmZlcnNJT0FscmVh ZHlJblByb2dyZXNzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24sIEJ1ZmZlciBidWZm ZXIpCit7CisJQnVmZmVyRGVzYyAqZGVzYzsKKwl1aW50MzIJCWJ1Zl9zdGF0ZTsKKwlQZ0Fpb1dh aXRSZWYgaW93OworCisJcGdhaW9fd3JlZl9jbGVhcigmaW93KTsKKworCWlmIChCdWZmZXJJc0xv Y2FsKGJ1ZmZlcikpCisJeworCQlkZXNjID0gR2V0TG9jYWxCdWZmZXJEZXNjcmlwdG9yKC1idWZm ZXIgLSAxKTsKKwkJYnVmX3N0YXRlID0gcGdfYXRvbWljX3JlYWRfdTMyKCZkZXNjLT5zdGF0ZSk7 CisJCWlmICgoYnVmX3N0YXRlICYgQk1fSU9fSU5fUFJPR1JFU1MpICYmICEoYnVmX3N0YXRlICYg Qk1fVkFMSUQpKQorCQkJaW93ID0gZGVzYy0+aW9fd3JlZjsKKwl9CisJZWxzZQorCXsKKwkJZGVz YyA9IEdldEJ1ZmZlckRlc2NyaXB0b3IoYnVmZmVyIC0gMSk7CisJCWJ1Zl9zdGF0ZSA9IExvY2tC dWZIZHIoZGVzYyk7CisKKwkJaWYgKChidWZfc3RhdGUgJiBCTV9JT19JTl9QUk9HUkVTUykgJiYg IShidWZfc3RhdGUgJiBCTV9WQUxJRCkpCisJCQlpb3cgPSBkZXNjLT5pb193cmVmOworCQlVbmxv Y2tCdWZIZHIoZGVzYyk7CisJfQorCisJaWYgKHBnYWlvX3dyZWZfdmFsaWQoJmlvdykpCisJewor CQlvcGVyYXRpb24tPmlvX3dyZWYgPSBpb3c7CisJCXJldHVybiB0cnVlOworCX0KKworCXJldHVy biBmYWxzZTsKK30KKwogLyoKICAqIEhlbHBlciBmb3IgQXN5bmNSZWFkQnVmZmVycyB0aGF0IHRy aWVzIHRvIGdldCB0aGUgYnVmZmVyIHJlYWR5IGZvciBJTy4KICAqLwpAQCAtMTc2NCw3ICsxODA0 LDcgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVyYXRpb24pCiAJ CQkgKgogCQkJICogd2UgZmlyc3QgY2hlY2sgaWYgd2UgYWxyZWFkeSBrbm93IHRoZSBJTyBpcyBj b21wbGV0ZS4KIAkJCSAqLwotCQkJaWYgKGFpb19yZXQtPnJlc3VsdC5zdGF0dXMgPT0gUEdBSU9f UlNfVU5LTk9XTiAmJgorCQkJaWYgKChvcGVyYXRpb24tPmZvcmVpZ25faW8gfHwgYWlvX3JldC0+ cmVzdWx0LnN0YXR1cyA9PSBQR0FJT19SU19VTktOT1dOKSAmJgogCQkJCSFwZ2Fpb193cmVmX2No ZWNrX2RvbmUoJm9wZXJhdGlvbi0+aW9fd3JlZikpCiAJCQl7CiAJCQkJaW5zdHJfdGltZQlpb19z dGFydCA9IHBnc3RhdF9wcmVwYXJlX2lvX3RpbWUodHJhY2tfaW9fdGltaW5nKTsKQEAgLTE3ODMs MTEgKzE4MjMsNjYgQEAgV2FpdFJlYWRCdWZmZXJzKFJlYWRCdWZmZXJzT3BlcmF0aW9uICpvcGVy YXRpb24pCiAJCQkJQXNzZXJ0KHBnYWlvX3dyZWZfY2hlY2tfZG9uZSgmb3BlcmF0aW9uLT5pb193 cmVmKSk7CiAJCQl9CiAKLQkJCS8qCi0JCQkgKiBXZSBub3cgYXJlIHN1cmUgdGhlIElPIGNvbXBs ZXRlZC4gQ2hlY2sgdGhlIHJlc3VsdHMuIFRoaXMKLQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBv biBlcnJvcnMgaWYgdGhlcmUgd2VyZSBhbnkuCi0JCQkgKi8KLQkJCVByb2Nlc3NSZWFkQnVmZmVy c1Jlc3VsdChvcGVyYXRpb24pOworCQkJaWYgKHVubGlrZWx5KG9wZXJhdGlvbi0+Zm9yZWlnbl9p bykpCisJCQl7CisJCQkJQnVmZmVyCQlidWZmZXIgPSBvcGVyYXRpb24tPmJ1ZmZlcnNbb3BlcmF0 aW9uLT5uYmxvY2tzX2RvbmVdOworCQkJCUJ1ZmZlckRlc2MgKmRlc2M7CisJCQkJdWludDMyCQli dWZfc3RhdGU7CisKKwkJCQlpZiAoQnVmZmVySXNMb2NhbChidWZmZXIpKQorCQkJCXsKKwkJCQkJ ZGVzYyA9IEdldExvY2FsQnVmZmVyRGVzY3JpcHRvcigtYnVmZmVyIC0gMSk7CisJCQkJCWJ1Zl9z dGF0ZSA9IHBnX2F0b21pY19yZWFkX3UzMigmZGVzYy0+c3RhdGUpOworCQkJCX0KKwkJCQllbHNl CisJCQkJeworCQkJCQlkZXNjID0gR2V0QnVmZmVyRGVzY3JpcHRvcihidWZmZXIgLSAxKTsKKwkJ CQkJYnVmX3N0YXRlID0gTG9ja0J1ZkhkcihkZXNjKTsKKwkJCQkJVW5sb2NrQnVmSGRyKGRlc2Mp OworCQkJCX0KKworCQkJCWlmIChidWZfc3RhdGUgJiBCTV9WQUxJRCkKKwkJCQl7CisJCQkJCW9w ZXJhdGlvbi0+bmJsb2Nrc19kb25lICs9IDE7CisJCQkJCUFzc2VydChvcGVyYXRpb24tPm5ibG9j a3NfZG9uZSA8PSBvcGVyYXRpb24tPm5ibG9ja3MpOworCisJCQkJCS8qCisJCQkJCSAqIFJlcG9y dCBhbmQgdHJhY2sgdGhpcyBhcyBhICdoaXQnIGZvciB0aGlzIGJhY2tlbmQsIGV2ZW4KKwkJCQkJ ICogdGhvdWdoIGl0IG11c3QgaGF2ZSBzdGFydGVkIG91dCBhcyBhIG1pc3MgaW4KKwkJCQkJICog UGluQnVmZmVyRm9yQmxvY2soKS4gVGhlIG90aGVyIGJhY2tlbmQgKG9yIG91cnNlbHZlcywKKwkJ CQkJICogYXMgcGFydCBvZiBhIHJlYWQgc3RhcnRlZCBlYXJsaWVyKSB3aWxsIHRyYWNrIHRoaXMg YXMgYQorCQkJCQkgKiAncmVhZCcuCisJCQkJCSAqLworCQkJCQlUUkFDRV9QT1NUR1JFU1FMX0JV RkZFUl9SRUFEX0RPTkUob3BlcmF0aW9uLT5mb3JrbnVtLAorCQkJCQkJCQkJCQkJCSAgb3BlcmF0 aW9uLT5ibG9ja251bSArIG9wZXJhdGlvbi0+bmJsb2Nrc19kb25lLAorCQkJCQkJCQkJCQkJCSAg b3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3Iuc3BjT2lkLAorCQkJCQkJCQkJ CQkJCSAgb3BlcmF0aW9uLT5zbWdyLT5zbWdyX3Jsb2NhdG9yLmxvY2F0b3IuZGJPaWQsCisJCQkJ CQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IubG9jYXRvci5yZWxOdW1i ZXIsCisJCQkJCQkJCQkJCQkJICBvcGVyYXRpb24tPnNtZ3ItPnNtZ3JfcmxvY2F0b3IuYmFja2Vu ZCwKKwkJCQkJCQkJCQkJCQkgIHRydWUpOworCisJCQkJCWlmIChCdWZmZXJJc0xvY2FsKGJ1ZmZl cikpCisJCQkJCQlwZ0J1ZmZlclVzYWdlLmxvY2FsX2Jsa3NfaGl0ICs9IDE7CisJCQkJCWVsc2UK KwkJCQkJCXBnQnVmZmVyVXNhZ2Uuc2hhcmVkX2Jsa3NfaGl0ICs9IDE7CisKKwkJCQkJaWYgKG9w ZXJhdGlvbi0+cmVsKQorCQkJCQkJcGdzdGF0X2NvdW50X2J1ZmZlcl9oaXQob3BlcmF0aW9uLT5y ZWwpOworCisJCQkJCXBnc3RhdF9jb3VudF9pb19vcChpb19vYmplY3QsIGlvX2NvbnRleHQsIElP T1BfSElULCAxLCAwKTsKKworCQkJCQlpZiAoVmFjdXVtQ29zdEFjdGl2ZSkKKwkJCQkJCVZhY3V1 bUNvc3RCYWxhbmNlICs9IFZhY3V1bUNvc3RQYWdlSGl0OworCQkJCX0KKwkJCX0KKwkJCWVsc2UK KwkJCXsKKwkJCQkvKgorCQkJCSAqIFdlIG5vdyBhcmUgc3VyZSB0aGUgSU8gY29tcGxldGVkLiBD aGVjayB0aGUgcmVzdWx0cy4gVGhpcworCQkJCSAqIGluY2x1ZGVzIHJlcG9ydGluZyBvbiBlcnJv cnMgaWYgdGhlcmUgd2VyZSBhbnkuCisJCQkJICovCisJCQkJUHJvY2Vzc1JlYWRCdWZmZXJzUmVz dWx0KG9wZXJhdGlvbik7CisJCQl9CiAJCX0KIAogCQkvKgpAQCAtMTg3Myw2ICsxOTY4LDQzIEBA IEFzeW5jUmVhZEJ1ZmZlcnMoUmVhZEJ1ZmZlcnNPcGVyYXRpb24gKm9wZXJhdGlvbiwgaW50ICpu YmxvY2tzX3Byb2dyZXNzKQogCQlpb19vYmplY3QgPSBJT09CSkVDVF9SRUxBVElPTjsKIAl9CiAK KwkvKgorCSAqIElmIEFJTyBpcyBpbiBwcm9ncmVzcywgYmUgaXQgaW4gdGhpcyBiYWNrZW5kIG9y IGFub3RoZXIgYmFja2VuZCwgd2UKKwkgKiBqdXN0IGFzc29jaWF0ZSB0aGUgd2FpdCByZWZlcmVu Y2Ugd2l0aCB0aGUgb3BlcmF0aW9uIGFuZCB3YWl0IGluCisJICogV2FpdFJlYWRCdWZmZXJzKCku IFRoaXMgdHVybnMgb3V0IHRvIGJlIGltcG9ydGFudCBmb3IgcGVyZm9ybWFuY2UgaW4KKwkgKiB0 d28gd29ya2xvYWRzOgorCSAqCisJICogMSkgQSByZWFkIHN0cmVhbSB0aGF0IGhhcyB0byByZWFk IHRoZSBzYW1lIGJsb2NrIG11bHRpcGxlIHRpbWVzIHdpdGhpbgorCSAqIHRoZSByZWFkYWhlYWQg ZGlzdGFuY2UuIFRoaXMgY2FuIGhhcHBlbiBlLmcuIGZvciB0aGUgdGFibGUgYWNjZXNzZXMgb2YK KwkgKiBhbiBpbmRleCBzY2FuLgorCSAqCisJICogMikgQ29uY3VycmVudCBzY2FucyBieSBtdWx0 aXBsZSBiYWNrZW5kcyBvbiB0aGUgc2FtZSByZWxhdGlvbi4KKwkgKgorCSAqIElmIHdlIHdlcmUg dG8gc3luY2hyb25vdXNseSB3YWl0IGZvciB0aGUgaW4tcHJvZ3Jlc3MgSU8sIHdlJ2Qgbm90IGJl CisJICogYWJsZSB0byBrZWVwIGVub3VnaCBJL08gaW4gZmxpZ2h0LgorCSAqCisJICogSWYgd2Ug ZG8gZmluZCB0aGVyZSBpcyBvbmdvaW5nIEkvTyBmb3IgdGhlIGJ1ZmZlciwgd2Ugc2V0IHVwIGEg MS1ibG9jaworCSAqIFJlYWRCdWZmZXJzT3BlcmF0aW9uIHRoYXQgV2FpdFJlYWRCdWZmZXJzIHRo ZW4gY2FuIHdhaXQgb24uCisJICoKKwkgKiBJdCdzIHBvc3NpYmxlIHRoYXQgYW5vdGhlciBiYWNr ZW5kIHN0YXJ0cyBJTyBvbiB0aGUgYnVmZmVyIGJldHdlZW4gdGhpcworCSAqIGNoZWNrIGFuZCB0 aGUgUmVhZEJ1ZmZlcnNDYW5TdGFydElPKG5vd2FpdCA9IGZhbHNlKSBiZWxvdy4gSW4gdGhhdCBj YXNlCisJICogd2Ugd2lsbCBzeW5jaHJvbm91c2x5IHdhaXQgZm9yIHRoZSBJTyBiZWxvdywgYnV0 IHRoZSB3aW5kb3cgZm9yIHRoYXQgaXMKKwkgKiBzbWFsbCBlbm91Z2ggdGhhdCBpdCB3b24ndCBo YXBwZW4gb2Z0ZW4gZW5vdWdoIHRvIGhhdmUgYSBzaWduaWZpY2FudAorCSAqIHBlcmZvcm1hbmNl IGltcGFjdC4KKwkgKi8KKwlpZiAoUmVhZEJ1ZmZlcnNJT0FscmVhZHlJblByb2dyZXNzKG9wZXJh dGlvbiwgYnVmZmVyc1tuYmxvY2tzX2RvbmVdKSkKKwl7CisJCSpuYmxvY2tzX3Byb2dyZXNzID0g MTsKKwkJb3BlcmF0aW9uLT5mb3JlaWduX2lvID0gdHJ1ZTsKKworCQlDaGVja1JlYWRCdWZmZXJz T3BlcmF0aW9uKG9wZXJhdGlvbiwgZmFsc2UpOworCisKKwkJcmV0dXJuIHRydWU7CisJfQorCisJ b3BlcmF0aW9uLT5mb3JlaWduX2lvID0gZmFsc2U7CisKIAkvKgogCSAqIElmIHplcm9fZGFtYWdl ZF9wYWdlcyBpcyBlbmFibGVkLCBhZGQgdGhlIFJFQURfQlVGRkVSU19aRVJPX09OX0VSUk9SCiAJ ICogZmxhZy4gVGhlIHJlYXNvbiBmb3IgdGhhdCBpcyB0aGF0LCBob3BlZnVsbHksIHplcm9fZGFt YWdlZF9wYWdlcyBpc24ndApAQCAtMTkzMCw5ICsyMDYyLDkgQEAgQXN5bmNSZWFkQnVmZmVycyhS ZWFkQnVmZmVyc09wZXJhdGlvbiAqb3BlcmF0aW9uLCBpbnQgKm5ibG9ja3NfcHJvZ3Jlc3MpCiAJ LyoKIAkgKiBDaGVjayBpZiB3ZSBjYW4gc3RhcnQgSU8gb24gdGhlIGZpcnN0IHRvLWJlLXJlYWQg YnVmZmVyLgogCSAqCi0JICogSWYgYW4gSS9PIGlzIGFscmVhZHkgaW4gcHJvZ3Jlc3MgaW4gYW5v dGhlciBiYWNrZW5kLCB3ZSB3YW50IHRvIHdhaXQKLQkgKiBmb3IgdGhlIG91dGNvbWU6IGVpdGhl ciBkb25lLCBvciBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQgd2Ugd2lsbAotCSAqIHJldHJ5Lgor CSAqIElmIGEgc3luY2hyb25vdXMgSS9PIGlzIGluIHByb2dyZXNzIGluIGFub3RoZXIgYmFja2Vu ZCAoaXQgY2FuJ3QgYmUKKwkgKiB0aGlzIGJhY2tlbmQpLCB3ZSB3YW50IHRvIHdhaXQgZm9yIHRo ZSBvdXRjb21lOiBlaXRoZXIgZG9uZSwgb3IKKwkgKiBzb21ldGhpbmcgd2VudCB3cm9uZyBhbmQg d2Ugd2lsbCByZXRyeS4KIAkgKi8KIAlpZiAoIVJlYWRCdWZmZXJzQ2FuU3RhcnRJTyhidWZmZXJz W25ibG9ja3NfZG9uZV0sIGZhbHNlKSkKIAl7Ci0tIAoyLjUxLjAKCg== --00000000000026d6270647d0c7f3 Content-Type: application/octet-stream; name="v6-0004-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Disposition: attachment; filename="v6-0004-Make-hash-index-AM-use-amgetbatch-interface.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk4cbt111 RnJvbSA0OWFiNmM1MTI4ODk4M2UyZTEyNTI5MmYwMDZhNzZkMjQ3Y2NjNDAwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgMjUgTm92IDIwMjUgMTg6MDM6MTUgLTA1MDAKU3ViamVjdDogW1BBVENIIHY2IDQvNF0gTWFr ZSBoYXNoIGluZGV4IEFNIHVzZSBhbWdldGJhdGNoIGludGVyZmFjZS4KClJlcGxhY2UgaGFzaGdl dHR1cGxlIHdpdGggaGFzaGdldGJhdGNoLCBhIGZ1bmN0aW9uIHRoYXQgaW1wbGVtZW50cyB0aGUK bmV3IGFtZ2V0YmF0Y2ggaW50ZXJmYWNlLiAgUGxhaW4gaW5kZXggc2NhbnMgb2YgaGFzaCBpbmRl eGVzIG5vdyByZXR1cm4KbWF0Y2hpbmcgaXRlbXMgaW4gYmF0Y2hlcyBjb25zaXN0aW5nIG9mIGFs bCBvZiB0aGUgbWF0Y2hlcyBmcm9tIGEgZ2l2ZW4KYnVja2V0IG9yIG92ZXJmbG93IHBhZ2UuICBU aGlzIGdpdmVzIHRoZSBjb3JlIGV4ZWN1dG9yIHRoZSBhYmlsaXR5IHRvCnBlcmZvcm0gb3B0aW1p emF0aW9ucyBsaWtlIGluZGV4IHByZWZldGNoaW5nIGR1cmluZyBoYXNoIGluZGV4IHNjYW5zLgoK Tm90ZSB0aGF0IHRoaXMgbWFrZXMgaGFzaCBpbmRleCBzY2FucyB1c2UgdGhlIGRyb3BQaW4gb3B0 aW1pemF0aW9uLApzaW5jZSB0aGF0IGlzIHJlcXVpcmVkIHRvIHVzZSB0aGUgYW1nZXRiYXRjaCBp bnRlcmZhY2UuICBUaGlzIHdvbid0CmF2b2lkIG1ha2luZyBoYXNoIGluZGV4IHZhY3V1bWluZyB3 YWl0IGZvciBhIGNsZWFudXAgbG9jayB3aGVuIGFuIGluZGV4CnNjYW4gaG9sZHMgb250byBhIGNv bmZsaWN0aW5nIHBpbiwgc2luY2Ugc3VjaCBpbmRleCBzY2FucyBzdGlsbCBuZWVkIHRvCmhvbGQg b250byBhIGNvbmZsaWN0aW5nIGJ1Y2tldCBwYWdlIHBpbiBmb3IgdGhlIGR1cmF0aW9uIG9mIHRo ZSBzY2FuLgpJbiBvdGhlciB3b3JkcywgdXNlIG9mIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiB3 b24ndCBiZW5lZml0IGhhc2ggaW5kZXgKc2NhbnMgaW4gdGhlIHNhbWUgd2F5IHRoYXQgaXQgYmVu ZWZpdHMgbmJ0cmVlIGluZGV4IHNjYW5zIGZvbGxvd2luZwpjb21taXQgMmVkNWI4N2YuICBIb3dl dmVyLCB0aGVyZSBpcyBzdGlsbCBzb21lIHZhbHVlIGluIGtlZXBpbmcgdGhlCm51bWJlciBvZiBi dWZmZXIgcGlucyBoZWxkIGF0IGFueSBvbmUgdGltZSB0byBhIG1pbmltdW0uCgpJbmRleCBwcmVm ZXRjaGluZyB0ZW5kcyB0byBob2xkIG9wZW4gYXMgbWFueSBhcyBzZXZlcmFsIGRvemVuIGJhdGNo ZXMKd2l0aCBjZXJ0YWluIHdvcmtsb2FkcyAod29ya2xvYWRzIHdoZXJlIHRoZSBzdHJlYW0gcG9z aXRpb24gaGFzIHRvIGdldApxdWl0ZSBmYXIgYWhlYWQgb2YgdGhlIHJlYWQgcG9zaXRpb24gaW4g b3JkZXIgdG8gbWFpbnRhaW4gdGhlCmFwcHJvcHJpYXRlIHByZWZldGNoIGRpc3RhbmNlIG9uIHRo ZSBoZWFwYW0gc2lkZSkuICBHdWFyYW50ZWVpbmcgdGhhdApvcGVuIGJhdGNoZXMgd29uJ3QgaG9s ZCBidWZmZXIgcGlucyBvbiBpbmRleCBwYWdlcyAoYXQgbGVhc3QgaW4gdGhlCmNvbW1vbiBjYXNl IHdoZXJlIHRoZSBkcm9wUGluIG9wdGltaXphdGlvbiBpcyBzYWZlIHRvIHVzZSkgdGhlcmVieQpz aW1wbGlmaWVzIHJlc291cmNlIG1hbmFnZW1lbnQgZHVyaW5nIGluZGV4IHByZWZldGNoaW5nLgoK QWxzbyBhZGQgVmFsZ3JpbmQgYnVmZmVyIGxvY2sgaW5zdHJ1bWVudGF0aW9uIHRvIGhhc2gsIGJy aW5naW5nIGl0IGluCmxpbmUgd2l0aCBuYnRyZWUgZm9sbG93aW5nIGNvbW1pdCA0YTcwZjgyOS4g IFRoaXMgaXMgYW5vdGhlciByZXF1aXJlbWVudAp3aGVuIHVzaW5nIHRoZSBhbWdldGJhdGNoIGlu dGVyZmFjZS4KCkF1dGhvcjogUGV0ZXIgR2VvZ2hlZ2FuIDxwZ0Bib3d0LmllPgpEaXNjdXNzaW9u OiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3ptWXFoYWNCSDE2MXBlQVdiNWVGPUphN0NGQVEr MGpTRU1xPXFuZkxWVE9PZ0BtYWlsLmdtYWlsLmNvbQotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9o YXNoLmggICAgICAgICAgICB8ICA3MyArLS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hh c2guYyAgICAgICB8IDEyMyArKysrLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo cGFnZS5jICAgfCAgMjYgKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMg fCAzMjggKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jICAgfCAxMDAgKysrKy0tLS0KIHNyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0ICAgICB8ICAgMiAtCiA2IGZpbGVzIGNoYW5nZWQsIDI1NSBpbnNlcnRpb25zKCspLCAz OTcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hhc2guaCBi L3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKaW5kZXggYTg3MDJmMGU1Li4xYjgwZmQ3ZWQgMTAw NjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9oYXNoLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL2hhc2guaApAQCAtMTAwLDU4ICsxMDAsNiBAQCB0eXBlZGVmIEhhc2hQYWdlT3BhcXVlRGF0 YSAqSGFzaFBhZ2VPcGFxdWU7CiAgKi8KICNkZWZpbmUgSEFTSE9fUEFHRV9JRAkJMHhGRjgwCiAK LXR5cGVkZWYgc3RydWN0IEhhc2hTY2FuUG9zSXRlbQkvKiB3aGF0IHdlIHJlbWVtYmVyIGFib3V0 IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyogVElEIG9mIHJl ZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0OwkvKiBpbmRl eCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLX0gSGFzaFNjYW5Qb3NJdGVtOwotCi10 eXBlZGVmIHN0cnVjdCBIYXNoU2NhblBvc0RhdGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBpZiB2 YWxpZCwgdGhlIGJ1ZmZlciBpcyBwaW5uZWQgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8q IGN1cnJlbnQgaGFzaCBpbmRleCBwYWdlICovCi0JQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBu ZXh0IG92ZXJmbG93IHBhZ2UgKi8KLQlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIHByZXYgb3Zl cmZsb3cgb3IgYnVja2V0IHBhZ2UgKi8KLQotCS8qCi0JICogVGhlIGl0ZW1zIGFycmF5IGlzIGFs d2F5cyBvcmRlcmVkIGluIGluZGV4IG9yZGVyIChpZSwgaW5jcmVhc2luZwotCSAqIGluZGV4b2Zm c2V0KS4gIFdoZW4gc2Nhbm5pbmcgYmFja3dhcmRzIGl0IGlzIGNvbnZlbmllbnQgdG8gZmlsbCB0 aGUKLQkgKiBhcnJheSBiYWNrLXRvLWZyb250LCBzbyB3ZSBzdGFydCBhdCB0aGUgbGFzdCBzbG90 IGFuZCBmaWxsIGRvd253YXJkcy4KLQkgKiBIZW5jZSB3ZSBuZWVkIGJvdGggYSBmaXJzdC12YWxp ZC1lbnRyeSBhbmQgYSBsYXN0LXZhbGlkLWVudHJ5IGNvdW50ZXIuCi0JICogaXRlbUluZGV4IGlz IGEgY3Vyc29yIHNob3dpbmcgd2hpY2ggZW50cnkgd2FzIGxhc3QgcmV0dXJuZWQgdG8gY2FsbGVy LgotCSAqLwotCWludAkJCWZpcnN0SXRlbTsJCS8qIGZpcnN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KLQlpbnQJCQlsYXN0SXRlbTsJCS8qIGxhc3QgdmFsaWQgaW5kZXggaW4gaXRlbXNbXSAq LwotCWludAkJCWl0ZW1JbmRleDsJCS8qIGN1cnJlbnQgaW5kZXggaW4gaXRlbXNbXSAqLwotCi0J SGFzaFNjYW5Qb3NJdGVtIGl0ZW1zW01heEluZGV4VHVwbGVzUGVyUGFnZV07CS8qIE1VU1QgQkUg TEFTVCAqLwotfSBIYXNoU2NhblBvc0RhdGE7Ci0KLSNkZWZpbmUgSGFzaFNjYW5Qb3NJc1Bpbm5l ZChzY2FucG9zKSBcCi0oIFwKLQlBc3NlcnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5w b3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJIUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBc Ci0JQnVmZmVySXNWYWxpZCgoc2NhbnBvcykuYnVmKSBcCi0pCi0KLSNkZWZpbmUgSGFzaFNjYW5Q b3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVtYmVySXNWYWxp ZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgoc2NhbnBvcyku YnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSBcCi0pCi0K LSNkZWZpbmUgSGFzaFNjYW5Qb3NJbnZhbGlkYXRlKHNjYW5wb3MpIFwKLQlkbyB7IFwKLQkJKHNj YW5wb3MpLmJ1ZiA9IEludmFsaWRCdWZmZXI7IFwKLQkJKHNjYW5wb3MpLmN1cnJQYWdlID0gSW52 YWxpZEJsb2NrTnVtYmVyOyBcCi0JCShzY2FucG9zKS5uZXh0UGFnZSA9IEludmFsaWRCbG9ja051 bWJlcjsgXAotCQkoc2NhbnBvcykucHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQkJ KHNjYW5wb3MpLmZpcnN0SXRlbSA9IDA7IFwKLQkJKHNjYW5wb3MpLmxhc3RJdGVtID0gMDsgXAot CQkoc2NhbnBvcykuaXRlbUluZGV4ID0gMDsgXAotCX0gd2hpbGUgKDApCi0KIC8qCiAgKglIYXNo U2Nhbk9wYXF1ZURhdGEgaXMgcHJpdmF0ZSBzdGF0ZSBmb3IgYSBoYXNoIGluZGV4IHNjYW4uCiAg Ki8KQEAgLTE3OCwxNSArMTI2LDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSGFzaFNjYW5PcGFxdWVEYXRh CiAJICogcmVmZXJyZWQgb25seSB3aGVuIGhhc2hzb19idWNfcG9wdWxhdGVkIGlzIHRydWUuCiAJ ICovCiAJYm9vbAkJaGFzaHNvX2J1Y19zcGxpdDsKLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVt cyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAg ICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAq LwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1z ICovCi0KLQkvKgotCSAqIElkZW50aWZ5IGFsbCB0aGUgbWF0Y2hpbmcgaXRlbXMgb24gYSBwYWdl IGFuZCBzYXZlIHRoZW0gaW4KLQkgKiBIYXNoU2NhblBvc0RhdGEKLQkgKi8KLQlIYXNoU2NhblBv c0RhdGEgY3VyclBvczsJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCiB9IEhhc2hTY2FuT3Bh cXVlRGF0YTsKIAogdHlwZWRlZiBIYXNoU2Nhbk9wYXF1ZURhdGEgKkhhc2hTY2FuT3BhcXVlOwpA QCAtMzY4LDExICszMDcsMTQgQEAgZXh0ZXJuIGJvb2wgaGFzaGluc2VydChSZWxhdGlvbiByZWws IERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVsbCwKIAkJCQkJICAgSW5kZXhVbmlxdWVDaGVjayBj aGVja1VuaXF1ZSwKIAkJCQkJICAgYm9vbCBpbmRleFVuY2hhbmdlZCwKIAkJCQkJICAgc3RydWN0 IEluZGV4SW5mbyAqaW5kZXhJbmZvKTsKLWV4dGVybiBib29sIGhhc2hnZXR0dXBsZShJbmRleFNj YW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBo YXNoZ2V0YmF0Y2goSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2Nh biBwcmlvcmJhdGNoLAorCQkJCQkJCQkgICBTY2FuRGlyZWN0aW9uIGRpcik7CiBleHRlcm4gaW50 NjQgaGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKTsKIGV4 dGVybiBJbmRleFNjYW5EZXNjIGhhc2hiZWdpbnNjYW4oUmVsYXRpb24gcmVsLCBpbnQgbmtleXMs IGludCBub3JkZXJieXMpOwogZXh0ZXJuIHZvaWQgaGFzaHJlc2NhbihJbmRleFNjYW5EZXNjIHNj YW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAkJCQkJICAgU2NhbktleSBvcmRl cmJ5cywgaW50IG5vcmRlcmJ5cyk7CitleHRlcm4gdm9pZCBoYXNoZnJlZWJhdGNoKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgaGFzaGVuZHNj YW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKmhh c2hidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKIAkJCQkJCQkJCQkJIEluZGV4QnVs a0RlbGV0ZVJlc3VsdCAqc3RhdHMsCkBAIC00NDUsOCArMzg3LDkgQEAgZXh0ZXJuIHZvaWQgX2hh c2hfZmluaXNoX3NwbGl0KFJlbGF0aW9uIHJlbCwgQnVmZmVyIG1ldGFidWYsIEJ1ZmZlciBvYnVm LAogCQkJCQkJCSAgIHVpbnQzMiBsb3dtYXNrKTsKIAogLyogaGFzaHNlYXJjaC5jICovCi1leHRl cm4gYm9vbCBfaGFzaF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwotZXh0ZXJuIGJvb2wgX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfbmV4dChJbmRleFNjYW5EZXNj IHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgQmF0Y2hJbmRleFNjYW4gcHJpb3Ji YXRjaCk7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2hhc2hfZmlyc3QoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CiAKIC8qIGhhc2hzb3J0LmMgKi8KIHR5cGVkZWYgc3Ry dWN0IEhTcG9vbCBIU3Bvb2w7CS8qIG9wYXF1ZSBzdHJ1Y3QgaW4gaGFzaHNvcnQuYyAqLwpAQCAt NDc2LDcgKzQxOSw3IEBAIGV4dGVybiBCbG9ja051bWJlciBfaGFzaF9nZXRfb2xkYmxvY2tfZnJv bV9uZXdidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgbmV3X2J1CiBleHRlcm4gQmxvY2tOdW1i ZXIgX2hhc2hfZ2V0X25ld2Jsb2NrX2Zyb21fb2xkYnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0 IG9sZF9idWNrZXQpOwogZXh0ZXJuIEJ1Y2tldCBfaGFzaF9nZXRfbmV3YnVja2V0X2Zyb21fb2xk YnVja2V0KFJlbGF0aW9uIHJlbCwgQnVja2V0IG9sZF9idWNrZXQsCiAJCQkJCQkJCQkJCQkgdWlu dDMyIGxvd21hc2ssIHVpbnQzMiBtYXhidWNrZXQpOwotZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9p dGVtcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgX2hhc2hfa2lsbF9pdGVtcyhJ bmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKTsKIAogLyogaGFzaC5jICov CiBleHRlcm4gdm9pZCBoYXNoYnVja2V0Y2xlYW51cChSZWxhdGlvbiByZWwsIEJ1Y2tldCBjdXJf YnVja2V0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jIGIvc3Jj L2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCmluZGV4IDZhMjBiNjdmNi4uZDVmMWM0ZjhjIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNoLmMKKysrIGIvc3JjL2JhY2tl bmQvYWNjZXNzL2hhc2gvaGFzaC5jCkBAIC0xMDEsOSArMTAxLDkgQEAgaGFzaGhhbmRsZXIoUEdf RlVOQ1RJT05fQVJHUykKIAkJLmFtYWRqdXN0bWVtYmVycyA9IGhhc2hhZGp1c3RtZW1iZXJzLAog CQkuYW1iZWdpbnNjYW4gPSBoYXNoYmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBoYXNocmVzY2Fu LAotCQkuYW1nZXR0dXBsZSA9IGhhc2hnZXR0dXBsZSwKLQkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAot CQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gaGFzaGdldGJhdGNoLAorCQkuYW1mcmVlYmF0Y2ggPSBoYXNoZnJlZWJhdGNoLAogCQku YW1nZXRiaXRtYXAgPSBoYXNoZ2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gaGFzaGVuZHNjYW4s CiAJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKQEAgLTI4Niw1MyArMjg2LDIyIEBAIGhhc2hpbnNlcnQo UmVsYXRpb24gcmVsLCBEYXR1bSAqdmFsdWVzLCBib29sICppc251bGwsCiAKIAogLyoKLSAqCWhh c2hnZXR0dXBsZSgpIC0tIEdldCB0aGUgbmV4dCB0dXBsZSBpbiB0aGUgc2Nhbi4KKyAqCWhhc2hn ZXRiYXRjaCgpIC0tIEdldCB0aGUgZmlyc3Qgb3IgbmV4dCBiYXRjaCBvZiB0dXBsZXMgaW4gdGhl IHNjYW4KICAqLwotYm9vbAotaGFzaGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgoraGFzaGdldGJhdGNoKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmF0Y2hJbmRleFNjYW4gcHJpb3JiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7Ci0J SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKLQlib29s CQlyZXM7Ci0KIAkvKiBIYXNoIGluZGV4ZXMgYXJlIGFsd2F5cyBsb3NzeSBzaW5jZSB3ZSBzdG9y ZSBvbmx5IHRoZSBoYXNoIGNvZGUgKi8KIAlzY2FuLT54c19yZWNoZWNrID0gdHJ1ZTsKIAotCS8q Ci0JICogSWYgd2UndmUgYWxyZWFkeSBpbml0aWFsaXplZCB0aGlzIHNjYW4sIHdlIGNhbiBqdXN0 IGFkdmFuY2UgaXQgaW4gdGhlCi0JICogYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2 ZW4ndCBkb25lIHNvIHlldCwgd2UgY2FsbCBhIHJvdXRpbmUgdG8KLQkgKiBnZXQgdGhlIGZpcnN0 IGl0ZW0gaW4gdGhlIHNjYW4uCi0JICovCi0JaWYgKCFIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1 cnJQb3MpKQotCQlyZXMgPSBfaGFzaF9maXJzdChzY2FuLCBkaXIpOwotCWVsc2UKKwlpZiAocHJp b3JiYXRjaCA9PSBOVUxMKQogCXsKLQkJLyoKLQkJICogQ2hlY2sgdG8gc2VlIGlmIHdlIHNob3Vs ZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCSAqLwotCQlpZiAoc2Nhbi0+ a2lsbF9wcmlvcl90dXBsZSkKLQkJewotCQkJLyoKLQkJCSAqIFllcywgc28gcmVtZW1iZXIgaXQg Zm9yIGxhdGVyLiAoV2UnbGwgZGVhbCB3aXRoIGFsbCBzdWNoIHR1cGxlcwotCQkJICogYXQgb25j ZSByaWdodCBhZnRlciBsZWF2aW5nIHRoZSBpbmRleCBwYWdlIG9yIGF0IGVuZCBvZiBzY2FuLikK LQkJCSAqIEluIGNhc2UgaWYgY2FsbGVyIHJldmVyc2VzIHRoZSBpbmRleHNjYW4gZGlyZWN0aW9u IGl0IGlzIHF1aXRlCi0JCQkgKiBwb3NzaWJsZSB0aGF0IHRoZSBzYW1lIGl0ZW0gbWlnaHQgZ2V0 IGVudGVyZWQgbXVsdGlwbGUgdGltZXMuCi0JCQkgKiBCdXQsIHdlIGRvbid0IGRldGVjdCB0aGF0 OyBpbnN0ZWFkLCB3ZSBqdXN0IGZvcmdldCBhbnkgZXhjZXNzCi0JCQkgKiBlbnRyaWVzLgotCQkJ ICovCi0JCQlpZiAoc28tPmtpbGxlZEl0ZW1zID09IE5VTEwpCi0JCQkJc28tPmtpbGxlZEl0ZW1z ID0gcGFsbG9jX2FycmF5KGludCwgTWF4SW5kZXhUdXBsZXNQZXJQYWdlKTsKLQotCQkJaWYgKHNv LT5udW1LaWxsZWQgPCBNYXhJbmRleFR1cGxlc1BlclBhZ2UpCi0JCQkJc28tPmtpbGxlZEl0ZW1z W3NvLT5udW1LaWxsZWQrK10gPSBzby0+Y3VyclBvcy5pdGVtSW5kZXg7Ci0JCX0KLQotCQkvKgot CQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCSAqLwotCQlyZXMgPSBfaGFzaF9uZXh0KHNj YW4sIGRpcik7CisJCS8qIEluaXRpYWxpemUgdGhlIHNjYW4sIGFuZCByZXR1cm4gZmlyc3QgYmF0 Y2ggb2YgbWF0Y2hpbmcgaXRlbXMgKi8KKwkJcmV0dXJuIF9oYXNoX2ZpcnN0KHNjYW4sIGRpcik7 CiAJfQogCi0JcmV0dXJuIHJlczsKKwkvKiBSZXR1cm4gYmF0Y2ggcG9zaXRpb25lZCBhZnRlciBj YWxsZXIncyBiYXRjaCAoaW4gZGlyZWN0aW9uICdkaXInKSAqLworCXJldHVybiBfaGFzaF9uZXh0 KHNjYW4sIGRpciwgcHJpb3JiYXRjaCk7CiB9CiAKIApAQCAtMzQyLDI2ICszMTEsMjMgQEAgaGFz aGdldHR1cGxlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiBpbnQ2NAog aGFzaGdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1hcCAqdGJtKQogewotCUhh c2hTY2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JYm9vbAkJ cmVzOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7Ci0JSGFzaFNj YW5Qb3NJdGVtICpjdXJySXRlbTsKKwlpbnQJCQlpdGVtSW5kZXg7CiAKLQlyZXMgPSBfaGFzaF9m aXJzdChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CisJYmF0Y2ggPSBfaGFzaF9maXJzdChz Y2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbik7CiAKLQl3aGlsZSAocmVzKQorCXdoaWxlIChiYXRj aCAhPSBOVUxMKQogCXsKLQkJY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQ b3MuaXRlbUluZGV4XTsKKwkJZm9yIChpdGVtSW5kZXggPSBiYXRjaC0+Zmlyc3RJdGVtOworCQkJ IGl0ZW1JbmRleCA8PSBiYXRjaC0+bGFzdEl0ZW07CisJCQkgaXRlbUluZGV4KyspCisJCXsKKwkJ CXRibV9hZGRfdHVwbGVzKHRibSwgJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQsIDEs IHRydWUpOworCQkJbnRpZHMrKzsKKwkJfQogCi0JCS8qCi0JCSAqIF9oYXNoX2ZpcnN0IGFuZCBf aGFzaF9uZXh0IGhhbmRsZSBlbGltaW5hdGUgZGVhZCBpbmRleCBlbnRyaWVzCi0JCSAqIHdoZW5l dmVyIHNjYW4tPmlnbm9yZV9raWxsZWRfdHVwbGVzIGlzIHRydWUuICBUaGVyZWZvcmUsIHRoZXJl J3MKLQkJICogbm90aGluZyB0byBkbyBoZXJlIGV4Y2VwdCBhZGQgdGhlIHJlc3VsdHMgdG8gdGhl IFRJREJpdG1hcC4KLQkJICovCi0JCXRibV9hZGRfdHVwbGVzKHRibSwgJihjdXJySXRlbS0+aGVh cFRpZCksIDEsIHRydWUpOwotCQludGlkcysrOwotCi0JCXJlcyA9IF9oYXNoX25leHQoc2Nhbiwg Rm9yd2FyZFNjYW5EaXJlY3Rpb24pOworCQliYXRjaCA9IF9oYXNoX25leHQoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sIGJhdGNoKTsKIAl9CiAKIAlyZXR1cm4gbnRpZHM7CkBAIC0zODMsMTcg KzM0OSwxNCBAQCBoYXNoYmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9y ZGVyYnlzKQogCXNjYW4gPSBSZWxhdGlvbkdldEluZGV4U2NhbihyZWwsIG5rZXlzLCBub3JkZXJi eXMpOwogCiAJc28gPSAoSGFzaFNjYW5PcGFxdWUpIHBhbGxvY19vYmplY3QoSGFzaFNjYW5PcGFx dWVEYXRhKTsKLQlIYXNoU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwogCXNvLT5oYXNo c29fYnVja2V0X2J1ZiA9IEludmFsaWRCdWZmZXI7CiAJc28tPmhhc2hzb19zcGxpdF9idWNrZXRf YnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNl OwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CiAKLQlzby0+a2lsbGVkSXRlbXMgPSBO VUxMOwotCXNvLT5udW1LaWxsZWQgPSAwOwotCiAJc2Nhbi0+b3BhcXVlID0gc287CisJc2Nhbi0+ bWF4aXRlbXNiYXRjaCA9IE1heEluZGV4VHVwbGVzUGVyUGFnZTsKIAogCXJldHVybiBzY2FuOwog fQpAQCAtNDA4LDE4ICszNzEsOCBAQCBoYXNocmVzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bktleSBzY2Fua2V5LCBpbnQgbnNjYW5rZXlzLAogCUhhc2hTY2FuT3BhcXVlIHNvID0gKEhhc2hT Y2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyog QmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAq LwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwot CX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JLyogc2V0IHBvc2l0aW9uIGlu dmFsaWQgKHRoaXMgd2lsbCBjYXVzZSBfaGFzaF9maXJzdCBjYWxsKSAqLwotCUhhc2hTY2FuUG9z SW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0KIAkvKiBVcGRhdGUgc2NhbiBrZXksIGlmIGEgbmV3 IG9uZSBpcyBnaXZlbiAqLwogCWlmIChzY2Fua2V5ICYmIHNjYW4tPm51bWJlck9mS2V5cyA+IDAp CiAJCW1lbWNweShzY2FuLT5rZXlEYXRhLCBzY2Fua2V5LCBzY2FuLT5udW1iZXJPZktleXMgKiBz aXplb2YoU2NhbktleURhdGEpKTsKQEAgLTQyOCw2ICszODEsMjUgQEAgaGFzaHJlc2NhbihJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5LZXkgc2NhbmtleSwgaW50IG5zY2Fua2V5cywKIAlzby0+aGFz aHNvX2J1Y19zcGxpdCA9IGZhbHNlOwogfQogCisvKgorICoJaGFzaGZyZWViYXRjaCgpIC0tIEZy ZWUgYmF0Y2ggcmVzb3VyY2VzLCBpbmNsdWRpbmcgaXRzIGJ1ZmZlciBwaW4KKyAqLwordm9pZAor aGFzaGZyZWViYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQor eworCWlmIChiYXRjaC0+bnVtS2lsbGVkID4gMCkKKwkJX2hhc2hfa2lsbF9pdGVtcyhzY2FuLCBi YXRjaCk7CisKKwlpZiAoIXNjYW4tPmRyb3BQaW4pCisJeworCQkvKiBpbmRleGFtX3V0aWxfYmF0 Y2hfdW5sb2NrIGRpZG4ndCB1bnBpbiBwYWdlIGVhcmxpZXIsIGRvIGl0IG5vdyAqLworCQlSZWxl YXNlQnVmZmVyKGJhdGNoLT5idWYpOworCQliYXRjaC0+YnVmID0gSW52YWxpZEJ1ZmZlcjsKKwl9 CisKKwlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBiYXRjaCk7Cit9CisKIC8qCiAg KgloYXNoZW5kc2NhbigpIC0tIGNsb3NlIGRvd24gYSBzY2FuCiAgKi8KQEAgLTQzNywxNyArNDA5 LDggQEAgaGFzaGVuZHNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKQogCUhhc2hTY2FuT3BhcXVlIHNv ID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKIAotCWlmIChIYXNoU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQot CXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxl ZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfaGFzaF9raWxsX2l0ZW1z KHNjYW4pOwotCX0KLQogCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwogCi0JaWYgKHNvLT5r aWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVkSXRlbXMpOwogCXBmcmVlKHNv KTsKIAlzY2FuLT5vcGFxdWUgPSBOVUxMOwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL2hhc2gvaGFzaHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2hwYWdlLmMK aW5kZXggOGUyMjBhM2FlLi45YjY5MTE5MDUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9oYXNoL2hhc2hwYWdlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaHBhZ2Uu YwpAQCAtMzUsNiArMzUsNyBAQAogI2luY2x1ZGUgInBvcnQvcGdfYml0dXRpbHMuaCIKICNpbmNs dWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc21nci5oIgorI2lu Y2x1ZGUgInV0aWxzL21lbWRlYnVnLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAKIHN0YXRp YyBib29sIF9oYXNoX2FsbG9jX2J1Y2tldHMoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciBmaXJz dGJsb2NrLApAQCAtNzksNiArODAsOSBAQCBfaGFzaF9nZXRidWYoUmVsYXRpb24gcmVsLCBCbG9j a051bWJlciBibGtubywgaW50IGFjY2VzcywgaW50IGZsYWdzKQogCWlmIChhY2Nlc3MgIT0gSEFT SF9OT0xPQ0spCiAJCUxvY2tCdWZmZXIoYnVmLCBhY2Nlc3MpOwogCisJaWYgKCFSZWxhdGlvblVz ZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJVkFMR1JJTkRfTUFLRV9NRU1fREVGSU5FRChCdWZmZXJH ZXRQYWdlKGJ1ZiksIEJMQ0tTWik7CisKIAkvKiByZWYgY291bnQgYW5kIGxvY2sgdHlwZSBhcmUg Y29ycmVjdCAqLwogCiAJX2hhc2hfY2hlY2twYWdlKHJlbCwgYnVmLCBmbGFncyk7CkBAIC0xMDgs NiArMTEyLDkgQEAgX2hhc2hfZ2V0YnVmX3dpdGhfY29uZGxvY2tfY2xlYW51cChSZWxhdGlvbiBy ZWwsIEJsb2NrTnVtYmVyIGJsa25vLCBpbnQgZmxhZ3MpCiAJCXJldHVybiBJbnZhbGlkQnVmZmVy OwogCX0KIAorCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJCVZBTEdSSU5E X01BS0VfTUVNX0RFRklORUQoQnVmZmVyR2V0UGFnZShidWYpLCBCTENLU1opOworCiAJLyogcmVm IGNvdW50IGFuZCBsb2NrIHR5cGUgYXJlIGNvcnJlY3QgKi8KIAogCV9oYXNoX2NoZWNrcGFnZShy ZWwsIGJ1ZiwgZmxhZ3MpOwpAQCAtMjgwLDMxICsyODcsMjQgQEAgX2hhc2hfZHJvcGJ1ZihSZWxh dGlvbiByZWwsIEJ1ZmZlciBidWYpCiB9CiAKIC8qCi0gKglfaGFzaF9kcm9wc2NhbmJ1ZigpIC0t IHJlbGVhc2UgYnVmZmVycyB1c2VkIGluIHNjYW4uCisgKglfaGFzaF9kcm9wc2NhbmJ1ZigpIC0t IHJlbGVhc2UgYnVmZmVycyBvd25lZCBieSBzY2FuLgogICoKLSAqIFRoaXMgcm91dGluZSB1bnBp bnMgdGhlIGJ1ZmZlcnMgdXNlZCBkdXJpbmcgc2NhbiBvbiB3aGljaCB3ZQotICogaG9sZCBubyBs b2NrLgorICogVGhpcyByb3V0aW5lIHVucGlucyB0aGUgYnVmZmVycyBmb3IgdGhlIHByaW1hcnkg YnVja2V0IHBhZ2UgYW5kIGZvciB0aGUKKyAqIGJ1Y2tldCBwYWdlIG9mIGEgYnVja2V0IGJlaW5n IHNwbGl0IGFzIG5lZWRlZC4KICAqLwogdm9pZAogX2hhc2hfZHJvcHNjYW5idWYoUmVsYXRpb24g cmVsLCBIYXNoU2Nhbk9wYXF1ZSBzbykKIHsKIAkvKiByZWxlYXNlIHBpbiB3ZSBob2xkIG9uIHBy aW1hcnkgYnVja2V0IHBhZ2UgKi8KLQlpZiAoQnVmZmVySXNWYWxpZChzby0+aGFzaHNvX2J1Y2tl dF9idWYpICYmCi0JCXNvLT5oYXNoc29fYnVja2V0X2J1ZiAhPSBzby0+Y3VyclBvcy5idWYpCisJ aWYgKEJ1ZmZlcklzVmFsaWQoc28tPmhhc2hzb19idWNrZXRfYnVmKSkKIAkJX2hhc2hfZHJvcGJ1 ZihyZWwsIHNvLT5oYXNoc29fYnVja2V0X2J1Zik7CiAJc28tPmhhc2hzb19idWNrZXRfYnVmID0g SW52YWxpZEJ1ZmZlcjsKIAotCS8qIHJlbGVhc2UgcGluIHdlIGhvbGQgb24gcHJpbWFyeSBidWNr ZXQgcGFnZSAgb2YgYnVja2V0IGJlaW5nIHNwbGl0ICovCi0JaWYgKEJ1ZmZlcklzVmFsaWQoc28t Pmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKSAmJgotCQlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9i dWYgIT0gc28tPmN1cnJQb3MuYnVmKQorCS8qIHJlbGVhc2UgcGluIGhlbGQgb24gcHJpbWFyeSBi dWNrZXQgcGFnZSBvZiBidWNrZXQgYmVpbmcgc3BsaXQgKi8KKwlpZiAoQnVmZmVySXNWYWxpZChz by0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpKQogCQlfaGFzaF9kcm9wYnVmKHJlbCwgc28tPmhh c2hzb19zcGxpdF9idWNrZXRfYnVmKTsKIAlzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYgPSBJ bnZhbGlkQnVmZmVyOwogCi0JLyogcmVsZWFzZSBhbnkgcGluIHdlIHN0aWxsIGhvbGQgKi8KLQlp ZiAoQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQotCQlfaGFzaF9kcm9wYnVmKHJlbCwg c28tPmN1cnJQb3MuYnVmKTsKLQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlkQnVmZmVyOwotCiAJ LyogcmVzZXQgc3BsaXQgc2NhbiAqLwogCXNvLT5oYXNoc29fYnVjX3BvcHVsYXRlZCA9IGZhbHNl OwogCXNvLT5oYXNoc29fYnVjX3NwbGl0ID0gZmFsc2U7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvaGFzaC9oYXNoc2VhcmNoLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNo c2VhcmNoLmMKaW5kZXggZGZiMDUxN2IzLi4yNjAyZjNlNjQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2hzZWFyY2guYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNoc2VhcmNoLmMKQEAgLTIxLDEwNSArMjEsODkgQEAKICNpbmNsdWRlICJzdG9yYWdlL3By ZWRpY2F0ZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogCi1zdGF0aWMgYm9vbCBfaGFzaF9y ZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJ1ZmZlciAqYnVmUCwKLQkJCQkJCSAgIFNjYW5E aXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBib29sIF9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkgICBCYXRjaEluZGV4 U2NhbiBiYXRjaCk7CiBzdGF0aWMgaW50CV9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKEluZGV4 U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAotCQkJCQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51 bSwgU2NhbkRpcmVjdGlvbiBkaXIpOwotc3RhdGljIGlubGluZSB2b2lkIF9oYXNoX3NhdmVpdGVt KEhhc2hTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAorCQkJCQkJCQkJICAgT2Zmc2V0TnVt YmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJCQkgICBCYXRjaEluZGV4U2Nh biBiYXRjaCk7CitzdGF0aWMgaW5saW5lIHZvaWQgX2hhc2hfc2F2ZWl0ZW0oQmF0Y2hJbmRleFNj YW4gYmF0Y2gsIGludCBpdGVtSW5kZXgsCiAJCQkJCQkJCSAgT2Zmc2V0TnVtYmVyIG9mZm51bSwg SW5kZXhUdXBsZSBpdHVwKTsKIHN0YXRpYyB2b2lkIF9oYXNoX3JlYWRuZXh0KEluZGV4U2NhbkRl c2Mgc2NhbiwgQnVmZmVyICpidWZwLAogCQkJCQkJICAgUGFnZSAqcGFnZXAsIEhhc2hQYWdlT3Bh cXVlICpvcGFxdWVwKTsKIAogLyoKLSAqCV9oYXNoX25leHQoKSAtLSBHZXQgdGhlIG5leHQgaXRl bSBpbiBhIHNjYW4uCisgKglfaGFzaF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGJhdGNoIG9mIGl0 ZW1zIGluIGEgc2Nhbi4KICAqCi0gKgkJT24gZW50cnksIHNvLT5jdXJyUG9zIGRlc2NyaWJlcyB0 aGUgY3VycmVudCBwYWdlLCB3aGljaCBtYXkKLSAqCQliZSBwaW5uZWQgYnV0IG5vdCBsb2NrZWQs IGFuZCBzby0+Y3VyclBvcy5pdGVtSW5kZXggaWRlbnRpZmllcwotICoJCXdoaWNoIGl0ZW0gd2Fz IHByZXZpb3VzbHkgcmV0dXJuZWQuCisgKgkJT24gZW50cnksIHByaW9yYmF0Y2ggZGVzY3JpYmVz IHRoZSBjdXJyZW50IHBhZ2UgYmF0Y2ggd2l0aCBpdGVtcworICoJCWFscmVhZHkgcmV0dXJuZWQu CiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwgc2Nhbi0+eHNfaGVhcHRpZCBpcyBzZXQgdG8g dGhlIFRJRCBvZiB0aGUgbmV4dAotICoJCWhlYXAgdHVwbGUuICBzby0+Y3VyclBvcyBpcyB1cGRh dGVkIGFzIG5lZWRlZC4KKyAqCQlPbiBzdWNjZXNzZnVsIGV4aXQsIHJldHVybnMgYSBiYXRjaCBj b250YWluaW5nIG1hdGNoaW5nIGl0ZW1zIGZyb20KKyAqCQluZXh0IHBhZ2UuICBPdGhlcndpc2Ug cmV0dXJucyBOVUxMLCBpbmRpY2F0aW5nIHRoYXQgdGhlcmUgYXJlIG5vCisgKgkJZnVydGhlciBt YXRjaGVzLiAgTm8gbG9ja3MgYXJlIGV2ZXIgaGVsZCB3aGVuIHdlIHJldHVybi4KICAqCi0gKgkJ T24gZmFpbHVyZSBleGl0IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBmYWxzZSB3aXRoIHBp bgotICoJCWhlbGQgb24gYnVja2V0IHBhZ2UgYnV0IG5vIHBpbnMgb3IgbG9ja3MgaGVsZCBvbiBv dmVyZmxvdwotICoJCXBhZ2UuCisgKgkJUmV0YWlucyBwaW5zIGFjY29yZGluZyB0byB0aGUgc2Ft ZSBydWxlcyBhcyBfaGFzaF9maXJzdC4KICAqLwotYm9vbAotX2hhc2hfbmV4dChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQorQmF0Y2hJbmRleFNjYW4KK19oYXNoX25leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgQmF0Y2hJbmRleFNjYW4gcHJp b3JiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hT Y2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JSGFzaFNjYW5Q b3NJdGVtICpjdXJySXRlbTsKIAlCbG9ja051bWJlciBibGtubzsKIAlCdWZmZXIJCWJ1ZjsKLQli b29sCQllbmRfb2Zfc2NhbiA9IGZhbHNlOworCUJhdGNoSW5kZXhTY2FuIGJhdGNoOwogCiAJLyoK LQkgKiBBZHZhbmNlIHRvIHRoZSBuZXh0IHR1cGxlIG9uIHRoZSBjdXJyZW50IHBhZ2U7IG9yIGlm IGRvbmUsIHRyeSB0byByZWFkCi0JICogZGF0YSBmcm9tIHRoZSBuZXh0IG9yIHByZXZpb3VzIHBh Z2UgYmFzZWQgb24gdGhlIHNjYW4gZGlyZWN0aW9uLiBCZWZvcmUKLQkgKiBtb3ZpbmcgdG8gdGhl IG5leHQgb3IgcHJldmlvdXMgcGFnZSBtYWtlIHN1cmUgdGhhdCB3ZSBkZWFsIHdpdGggYWxsIHRo ZQotCSAqIGtpbGxlZCBpdGVtcy4KKwkgKiBEZXRlcm1pbmUgd2hpY2ggcGFnZSB0byByZWFkIG5l eHQgYmFzZWQgb24gc2NhbiBkaXJlY3Rpb24gYW5kIGRldGFpbHMKKwkgKiB0YWtlbiBmcm9tIHRo ZSBwcmlvciBiYXRjaAogCSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikpCiAJ ewotCQlpZiAoKytzby0+Y3VyclBvcy5pdGVtSW5kZXggPiBzby0+Y3VyclBvcy5sYXN0SXRlbSkK KwkJYmxrbm8gPSBwcmlvcmJhdGNoLT5uZXh0UGFnZTsKKwkJaWYgKCFCbG9ja051bWJlcklzVmFs aWQoYmxrbm8pIHx8ICFwcmlvcmJhdGNoLT5tb3JlUmlnaHQpCiAJCXsKLQkJCWlmIChzby0+bnVt S2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4pOwotCi0JCQlibGtubyA9IHNv LT5jdXJyUG9zLm5leHRQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVySXNWYWxpZChibGtubykpCi0J CQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVBRCwgTEhfT1ZF UkZMT1dfUEFHRSk7Ci0JCQkJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCAmYnVmLCBkaXIpKQot CQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7Ci0JCQl9Ci0JCQllbHNlCi0JCQkJZW5kX29mX3NjYW4g PSB0cnVlOworCQkJX2hhc2hfZHJvcHNjYW5idWYocmVsLCBzbyk7CisJCQlyZXR1cm4gTlVMTDsK IAkJfQogCX0KIAllbHNlCiAJewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+ Y3VyclBvcy5maXJzdEl0ZW0pCisJCWJsa25vID0gcHJpb3JiYXRjaC0+cHJldlBhZ2U7CisJCWlm ICghQmxvY2tOdW1iZXJJc1ZhbGlkKGJsa25vKSB8fCAhcHJpb3JiYXRjaC0+bW9yZUxlZnQpCiAJ CXsKLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfaGFzaF9raWxsX2l0ZW1zKHNjYW4p OwotCi0JCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdlOwotCQkJaWYgKEJsb2NrTnVtYmVy SXNWYWxpZChibGtubykpCi0JCQl7Ci0JCQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8s IEhBU0hfUkVBRCwKLQkJCQkJCQkJICAgTEhfQlVDS0VUX1BBR0UgfCBMSF9PVkVSRkxPV19QQUdF KTsKLQotCQkJCS8qCi0JCQkJICogV2UgYWx3YXlzIG1haW50YWluIHRoZSBwaW4gb24gYnVja2V0 IHBhZ2UgZm9yIHdob2xlIHNjYW4KLQkJCQkgKiBvcGVyYXRpb24sIHNvIHJlbGVhc2luZyB0aGUg YWRkaXRpb25hbCBwaW4gd2UgaGF2ZSBhY3F1aXJlZAotCQkJCSAqIGhlcmUuCi0JCQkJICovCi0J CQkJaWYgKGJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQkJYnVmID09IHNvLT5o YXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQkJX2hhc2hfZHJvcGJ1ZihyZWwsIGJ1Zik7Ci0K LQkJCQlpZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCQkJCWVuZF9vZl9z Y2FuID0gdHJ1ZTsKLQkJCX0KLQkJCWVsc2UKLQkJCQllbmRfb2Zfc2NhbiA9IHRydWU7CisJCQlf aGFzaF9kcm9wc2NhbmJ1ZihyZWwsIHNvKTsKKwkJCXJldHVybiBOVUxMOwogCQl9CiAJfQogCi0J aWYgKGVuZF9vZl9zY2FuKQorCS8qIEFsbG9jYXRlIHNwYWNlIGZvciBuZXh0IGJhdGNoICovCisJ YmF0Y2ggPSBpbmRleGFtX3V0aWxfYmF0Y2hfYWxsb2Moc2Nhbik7CisKKwkvKiBHZXQgdGhlIGJ1 ZmZlciBmb3IgbmV4dCBiYXRjaCAqLworCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikp CisJCWJ1ZiA9IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsIExIX09WRVJGTE9X X1BBR0UpOworCWVsc2UKIAl7Ci0JCV9oYXNoX2Ryb3BzY2FuYnVmKHJlbCwgc28pOwotCQlIYXNo U2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCQlyZXR1cm4gZmFsc2U7CisJCWJ1ZiA9 IF9oYXNoX2dldGJ1ZihyZWwsIGJsa25vLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRf UEFHRSB8IExIX09WRVJGTE9XX1BBR0UpOworCisJCS8qCisJCSAqIFdlIGFsd2F5cyBtYWludGFp biB0aGUgcGluIG9uIGJ1Y2tldCBwYWdlIGZvciB3aG9sZSBzY2FuIG9wZXJhdGlvbiwKKwkJICog c28gcmVsZWFzaW5nIHRoZSBhZGRpdGlvbmFsIHBpbiB3ZSBoYXZlIGFjcXVpcmVkIGhlcmUuCisJ CSAqLworCQlpZiAoYnVmID09IHNvLT5oYXNoc29fYnVja2V0X2J1ZiB8fAorCQkJYnVmID09IHNv LT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKKwkJCV9oYXNoX2Ryb3BidWYocmVsLCBidWYpOwog CX0KIAotCS8qIE9LLCBpdGVtSW5kZXggc2F5cyB3aGF0IHRvIHJldHVybiAqLwotCWN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0Jc2Nhbi0+eHNf aGVhcHRpZCA9IGN1cnJJdGVtLT5oZWFwVGlkOworCS8qIFJlYWQgdGhlIG5leHQgcGFnZSBhbmQg bG9hZCBpdGVtcyBpbnRvIGFsbG9jYXRlZCBiYXRjaCAqLworCWlmICghX2hhc2hfcmVhZHBhZ2Uo c2NhbiwgYnVmLCBkaXIsIGJhdGNoKSkKKwl7CisJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNl KHNjYW4sIGJhdGNoKTsKKwkJcmV0dXJuIE5VTEw7CisJfQogCi0JcmV0dXJuIHRydWU7CisJLyog UmV0dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgZnJvbSBuZXh0IHBhZ2Ug Ki8KKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yNjksMjIgKzI1MywyMSBAQCBfaGFzaF9y ZWFkcHJldihJbmRleFNjYW5EZXNjIHNjYW4sCiB9CiAKIC8qCi0gKglfaGFzaF9maXJzdCgpIC0t IEZpbmQgdGhlIGZpcnN0IGl0ZW0gaW4gYSBzY2FuLgorICoJX2hhc2hfZmlyc3QoKSAtLSBGaW5k IHRoZSBmaXJzdCBiYXRjaCBvZiBpdGVtcyBpbiBhIHNjYW4uCiAgKgotICoJCVdlIGZpbmQgdGhl IGZpcnN0IGl0ZW0gKG9yLCBpZiBiYWNrd2FyZCBzY2FuLCB0aGUgbGFzdCBpdGVtKSBpbiB0aGUK LSAqCQlpbmRleCB0aGF0IHNhdGlzZmllcyB0aGUgcXVhbGlmaWNhdGlvbiBhc3NvY2lhdGVkIHdp dGggdGhlIHNjYW4KLSAqCQlkZXNjcmlwdG9yLgorICoJCVdlIGZpbmQgdGhlIGZpcnN0IGJhdGNo IG9mIGl0ZW1zIChvciwgaWYgYmFja3dhcmQgc2NhbiwgdGhlIGxhc3QKKyAqCQliYXRjaCkgaW4g dGhlIGluZGV4IHRoYXQgc2F0aXNmaWVzIHRoZSBxdWFsaWZpY2F0aW9uIGFzc29jaWF0ZWQgd2l0 aAorICoJCXRoZSBzY2FuIGRlc2NyaXB0b3IuCiAgKgotICoJCU9uIHN1Y2Nlc3NmdWwgZXhpdCwg aWYgdGhlIHBhZ2UgY29udGFpbmluZyBjdXJyZW50IGluZGV4IHR1cGxlIGlzIGFuCi0gKgkJb3Zl cmZsb3cgcGFnZSwgYm90aCBwaW4gYW5kIGxvY2sgYXJlIHJlbGVhc2VkIHdoZXJlYXMgaWYgaXQg aXMgYSBidWNrZXQKLSAqCQlwYWdlIHRoZW4gaXQgaXMgcGlubmVkIGJ1dCBub3QgbG9ja2VkIGFu ZCBkYXRhIGFib3V0IHRoZSBtYXRjaGluZwotICoJCXR1cGxlKHMpIG9uIHRoZSBwYWdlIGhhcyBi ZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLAotICoJCXNjYW4tPnhzX2hlYXB0aWQgaXMgc2V0 IHRvIHRoZSBoZWFwIFRJRCBvZiB0aGUgY3VycmVudCB0dXBsZS4KKyAqCQlPbiBzdWNjZXNzZnVs IGV4aXQsIHJldHVybnMgYSBiYXRjaCBjb250YWluaW5nIG1hdGNoaW5nIGl0ZW1zLgorICoJCU90 aGVyd2lzZSByZXR1cm5zIE5VTEwsIGluZGljYXRpbmcgdGhhdCB0aGVyZSBhcmUgbm8gZnVydGhl ciBtYXRjaGVzLgorICoJCU5vIGxvY2tzIGFyZSBldmVyIGhlbGQgd2hlbiB3ZSByZXR1cm4uCiAg KgotICoJCU9uIGZhaWx1cmUgZXhpdCAobm8gbW9yZSB0dXBsZXMpLCB3ZSByZXR1cm4gZmFsc2Us IHdpdGggcGluIGhlbGQgb24KLSAqCQlidWNrZXQgcGFnZSBidXQgbm8gcGlucyBvciBsb2NrcyBo ZWxkIG9uIG92ZXJmbG93IHBhZ2UuCisgKgkJV2UgYWx3YXlzIHJldGFpbiBvdXIgb3duIHBpbiBv biB0aGUgYnVja2V0IHBhZ2UuICBXaGVuIHdlIHJldHVybiBhCisgKgkJYmF0Y2ggd2l0aCBhIGJ1 Y2tldCBwYWdlLCBpdCB3aWxsIHJldGFpbiBpdHMgb3duIHJlZmVyZW5jZSBwaW4gaWZmCisgKgkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UgZGV0ZXJtaW5lZCB0aGF0IHRhYmxlIEFNIHJlcXVp cmVzIG9uZS4KICAqLwotYm9vbAorQmF0Y2hJbmRleFNjYW4KIF9oYXNoX2ZpcnN0KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKQEAgLTI5NSw3ICsyNzgsNyBAQCBfaGFzaF9maXJzdChJbmRleFNjYW5E ZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7 CiAJSGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwotCUhhc2hTY2FuUG9zSXRlbSAqY3Vyckl0ZW07CisJ QmF0Y2hJbmRleFNjYW4gYmF0Y2g7CiAKIAlwZ3N0YXRfY291bnRfaW5kZXhfc2NhbihyZWwpOwog CWlmIChzY2FuLT5pbnN0cnVtZW50KQpAQCAtMzI1LDcgKzMwOCw3IEBAIF9oYXNoX2ZpcnN0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICogaXRlbXMgaW4gdGhlIGlu ZGV4LgogCSAqLwogCWlmIChjdXItPnNrX2ZsYWdzICYgU0tfSVNOVUxMKQotCQlyZXR1cm4gZmFs c2U7CisJCXJldHVybiBOVUxMOwogCiAJLyoKIAkgKiBPa2F5IHRvIGNvbXB1dGUgdGhlIGhhc2gg a2V5LiAgV2Ugd2FudCB0byBkbyB0aGlzIGJlZm9yZSBhY3F1aXJpbmcgYW55CkBAIC00MTgsMTkx ICs0MDEsMTU5IEBAIF9oYXNoX2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1ZSk7CiAJ fQogCi0JLyogcmVtZW1iZXIgd2hpY2ggYnVmZmVyIHdlIGhhdmUgcGlubmVkLCBpZiBhbnkgKi8K LQlBc3NlcnQoQnVmZmVySXNJbnZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpOwotCXNvLT5jdXJyUG9z LmJ1ZiA9IGJ1ZjsKKwkvKiBBbGxvY2F0ZSBzcGFjZSBmb3IgZmlyc3QgYmF0Y2ggKi8KKwliYXRj aCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyhzY2FuKTsKIAotCS8qIE5vdyBmaW5kIGFsbCB0 aGUgdHVwbGVzIHNhdGlzZnlpbmcgdGhlIHF1YWxpZmljYXRpb24gZnJvbSBhIHBhZ2UgKi8KLQlp ZiAoIV9oYXNoX3JlYWRwYWdlKHNjYW4sICZidWYsIGRpcikpCi0JCXJldHVybiBmYWxzZTsKKwkv KiBSZWFkIHRoZSBmaXJzdCBwYWdlIGFuZCBsb2FkIGl0ZW1zIGludG8gYWxsb2NhdGVkIGJhdGNo ICovCisJaWYgKCFfaGFzaF9yZWFkcGFnZShzY2FuLCBidWYsIGRpciwgYmF0Y2gpKQorCXsKKwkJ aW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworCQlyZXR1cm4gTlVMTDsK Kwl9CiAKLQkvKiBPSywgaXRlbUluZGV4IHNheXMgd2hhdCB0byByZXR1cm4gKi8KLQljdXJySXRl bSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+Y3VyclBvcy5pdGVtSW5kZXhdOwotCXNjYW4tPnhz X2hlYXB0aWQgPSBjdXJySXRlbS0+aGVhcFRpZDsKLQotCS8qIGlmIHdlJ3JlIGhlcmUsIF9oYXNo X3JlYWRwYWdlIGZvdW5kIGEgdmFsaWQgdHVwbGVzICovCi0JcmV0dXJuIHRydWU7CisJLyogUmV0 dXJuIHRoZSBiYXRjaCBjb250YWluaW5nIG1hdGNoZWQgaXRlbXMgKi8KKwlyZXR1cm4gYmF0Y2g7 CiB9CiAKIC8qCi0gKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9tIGN1cnJlbnQg aW5kZXggcGFnZSBpbnRvIHNvLT5jdXJyUG9zCisgKglfaGFzaF9yZWFkcGFnZSgpIC0tIExvYWQg ZGF0YSBmcm9tIGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIGJhdGNoCiAgKgogICoJV2Ugc2NhbiBh bGwgdGhlIGl0ZW1zIGluIHRoZSBjdXJyZW50IGluZGV4IHBhZ2UgYW5kIHNhdmUgdGhlbSBpbnRv Ci0gKglzby0+Y3VyclBvcyBpZiBpdCBzYXRpc2ZpZXMgdGhlIHF1YWxpZmljYXRpb24uIElmIG5v IG1hdGNoaW5nIGl0ZW1zCisgKgl0aGUgYmF0Y2ggaWYgdGhleSBzYXRpc2Z5IHRoZSBxdWFsaWZp Y2F0aW9uLiBJZiBubyBtYXRjaGluZyBpdGVtcwogICoJYXJlIGZvdW5kIGluIHRoZSBjdXJyZW50 IHBhZ2UsIHdlIG1vdmUgdG8gdGhlIG5leHQgb3IgcHJldmlvdXMgcGFnZQogICoJaW4gYSBidWNr ZXQgY2hhaW4gYXMgaW5kaWNhdGVkIGJ5IHRoZSBkaXJlY3Rpb24uCiAgKgogICoJUmV0dXJuIHRy dWUgaWYgYW55IG1hdGNoaW5nIGl0ZW1zIGFyZSBmb3VuZCBlbHNlIHJldHVybiBmYWxzZS4KICAq Lwogc3RhdGljIGJvb2wKLV9oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQnVmZmVy ICpidWZQLCBTY2FuRGlyZWN0aW9uIGRpcikKK19oYXNoX3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mg c2NhbiwgQnVmZmVyIGJ1ZiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgICBCYXRjaEluZGV4U2Nh biBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwogCUhhc2hT Y2FuT3BhcXVlIHNvID0gKEhhc2hTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0JQnVmZmVyCQli dWY7CiAJUGFnZQkJcGFnZTsKIAlIYXNoUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVy IG9mZm51bTsKIAl1aW50MTYJCWl0ZW1JbmRleDsKIAotCWJ1ZiA9ICpidWZQOwogCUFzc2VydChC dWZmZXJJc1ZhbGlkKGJ1ZikpOwogCV9oYXNoX2NoZWNrcGFnZShyZWwsIGJ1ZiwgTEhfQlVDS0VU X1BBR0UgfCBMSF9PVkVSRkxPV19QQUdFKTsKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShidWYpOwog CW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCi0Jc28tPmN1cnJQb3MuYnVmID0g YnVmOwotCXNvLT5jdXJyUG9zLmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsK KwliYXRjaC0+YnVmID0gYnVmOworCWJhdGNoLT5jdXJyUGFnZSA9IEJ1ZmZlckdldEJsb2NrTnVt YmVyKGJ1Zik7CisJYmF0Y2gtPmRpciA9IGRpcjsKIAogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcikpCiAJewotCQlCbG9ja051bWJlciBwcmV2X2Jsa25vID0gSW52YWxpZEJsb2NrTnVt YmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJCS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcg cG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAqLwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNo KHBhZ2UsIHNvLT5oYXNoc29fc2tfaGFzaCk7CiAKLQkJCWl0ZW1JbmRleCA9IF9oYXNoX2xvYWRf cXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyKTsKKwkJCWl0ZW1JbmRleCA9 IF9oYXNoX2xvYWRfcXVhbGlmaWVkX2l0ZW1zKHNjYW4sIHBhZ2UsIG9mZm51bSwgZGlyLAorCQkJ CQkJCQkJCQkJICAgYmF0Y2gpOwogCiAJCQlpZiAoaXRlbUluZGV4ICE9IDApCiAJCQkJYnJlYWs7 CiAKIAkJCS8qCi0JCQkgKiBDb3VsZCBub3QgZmluZCBhbnkgbWF0Y2hpbmcgdHVwbGVzIGluIHRo ZSBjdXJyZW50IHBhZ2UsIG1vdmUgdG8KLQkJCSAqIHRoZSBuZXh0IHBhZ2UuIEJlZm9yZSBsZWF2 aW5nIHRoZSBjdXJyZW50IHBhZ2UsIGRlYWwgd2l0aCBhbnkKLQkJCSAqIGtpbGxlZCBpdGVtcy4K KwkJCSAqIENvdWxkIG5vdCBmaW5kIGFueSBtYXRjaGluZyB0dXBsZXMgaW4gdGhlIGN1cnJlbnQg cGFnZSwgdHJ5IHRvCisJCQkgKiBtb3ZlIHRvIHRoZSBuZXh0IHBhZ2UKIAkJCSAqLwotCQkJaWYg KHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0KLQkJCS8q Ci0JCQkgKiBJZiB0aGlzIGlzIGEgcHJpbWFyeSBidWNrZXQgcGFnZSwgaGFzaG9fcHJldmJsa25v IGlzIG5vdCBhIHJlYWwKLQkJCSAqIGJsb2NrIG51bWJlci4KLQkJCSAqLwotCQkJaWYgKHNvLT5j dXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX2J1Y2tldF9idWYgfHwKLQkJCQlzby0+Y3VyclBvcy5i dWYgPT0gc28tPmhhc2hzb19zcGxpdF9idWNrZXRfYnVmKQotCQkJCXByZXZfYmxrbm8gPSBJbnZh bGlkQmxvY2tOdW1iZXI7Ci0JCQllbHNlCi0JCQkJcHJldl9ibGtubyA9IG9wYXF1ZS0+aGFzaG9f cHJldmJsa25vOwotCiAJCQlfaGFzaF9yZWFkbmV4dChzY2FuLCAmYnVmLCAmcGFnZSwgJm9wYXF1 ZSk7Ci0JCQlpZiAoQnVmZmVySXNWYWxpZChidWYpKQorCQkJaWYgKCFCdWZmZXJJc1ZhbGlkKGJ1 ZikpCiAJCQl7Ci0JCQkJc28tPmN1cnJQb3MuYnVmID0gYnVmOwotCQkJCXNvLT5jdXJyUG9zLmN1 cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKLQkJCX0KLQkJCWVsc2UKLQkJCXsK LQkJCQkvKgotCQkJCSAqIFJlbWVtYmVyIG5leHQgYW5kIHByZXZpb3VzIGJsb2NrIG51bWJlcnMg Zm9yIHNjcm9sbGFibGUKLQkJCQkgKiBjdXJzb3JzIHRvIGtub3cgdGhlIHN0YXJ0IHBvc2l0aW9u IGFuZCByZXR1cm4gZmFsc2UKLQkJCQkgKiBpbmRpY2F0aW5nIHRoYXQgbm8gbW9yZSBtYXRjaGlu ZyB0dXBsZXMgd2VyZSBmb3VuZC4gQWxzbywKLQkJCQkgKiBkb24ndCByZXNldCBjdXJyUGFnZSBv ciBsc24sIGJlY2F1c2Ugd2UgZXhwZWN0Ci0JCQkJICogX2hhc2hfa2lsbF9pdGVtcyB0byBiZSBj YWxsZWQgZm9yIHRoZSBvbGQgcGFnZSBhZnRlciB0aGlzCi0JCQkJICogZnVuY3Rpb24gcmV0dXJu cy4KLQkJCQkgKi8KLQkJCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IHByZXZfYmxrbm87Ci0JCQkJ c28tPmN1cnJQb3MubmV4dFBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7Ci0JCQkJc28tPmN1cnJQ b3MuYnVmID0gYnVmOworCQkJCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwogCQkJCXJldHVy biBmYWxzZTsKIAkJCX0KKworCQkJYmF0Y2gtPmJ1ZiA9IGJ1ZjsKKwkJCWJhdGNoLT5jdXJyUGFn ZSA9IEJ1ZmZlckdldEJsb2NrTnVtYmVyKGJ1Zik7CiAJCX0KIAotCQlzby0+Y3VyclBvcy5maXJz dEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0JCXNv LT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCWJhdGNoLT5maXJzdEl0ZW0gPSAwOworCQliYXRj aC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewotCQlCbG9ja051bWJl ciBuZXh0X2Jsa25vID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCiAJCWZvciAoOzspCiAJCXsKIAkJ CS8qIG5ldyBwYWdlLCBsb2NhdGUgc3RhcnRpbmcgcG9zaXRpb24gYnkgYmluYXJ5IHNlYXJjaCAq LwogCQkJb2ZmbnVtID0gX2hhc2hfYmluc2VhcmNoX2xhc3QocGFnZSwgc28tPmhhc2hzb19za19o YXNoKTsKIAotCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRlbXMoc2Nhbiwg cGFnZSwgb2ZmbnVtLCBkaXIpOworCQkJaXRlbUluZGV4ID0gX2hhc2hfbG9hZF9xdWFsaWZpZWRf aXRlbXMoc2NhbiwgcGFnZSwgb2ZmbnVtLCBkaXIsCisJCQkJCQkJCQkJCQkgICBiYXRjaCk7CiAK IAkJCWlmIChpdGVtSW5kZXggIT0gTWF4SW5kZXhUdXBsZXNQZXJQYWdlKQogCQkJCWJyZWFrOwog CiAJCQkvKgotCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUg Y3VycmVudCBwYWdlLCBtb3ZlIHRvCi0JCQkgKiB0aGUgcHJldmlvdXMgcGFnZS4gQmVmb3JlIGxl YXZpbmcgdGhlIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoCi0JCQkgKiBhbnkga2lsbGVkIGl0ZW1z LgorCQkJICogQ291bGQgbm90IGZpbmQgYW55IG1hdGNoaW5nIHR1cGxlcyBpbiB0aGUgY3VycmVu dCBwYWdlLCB0cnkgdG8KKwkJCSAqIG1vdmUgdG8gdGhlIHByZXZpb3VzIHBhZ2UKIAkJCSAqLwot CQkJaWYgKHNvLT5udW1LaWxsZWQgPiAwKQotCQkJCV9oYXNoX2tpbGxfaXRlbXMoc2Nhbik7Ci0K LQkJCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8Ci0JCQkJ c28tPmN1cnJQb3MuYnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVja2V0X2J1ZikKLQkJCQluZXh0 X2Jsa25vID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87Ci0KIAkJCV9oYXNoX3JlYWRwcmV2KHNj YW4sICZidWYsICZwYWdlLCAmb3BhcXVlKTsKLQkJCWlmIChCdWZmZXJJc1ZhbGlkKGJ1ZikpCisJ CQlpZiAoIUJ1ZmZlcklzVmFsaWQoYnVmKSkKIAkJCXsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBi dWY7Ci0JCQkJc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJlcihidWYp OwotCQkJfQotCQkJZWxzZQotCQkJewotCQkJCS8qCi0JCQkJICogUmVtZW1iZXIgbmV4dCBhbmQg cHJldmlvdXMgYmxvY2sgbnVtYmVycyBmb3Igc2Nyb2xsYWJsZQotCQkJCSAqIGN1cnNvcnMgdG8g a25vdyB0aGUgc3RhcnQgcG9zaXRpb24gYW5kIHJldHVybiBmYWxzZQotCQkJCSAqIGluZGljYXRp bmcgdGhhdCBubyBtb3JlIG1hdGNoaW5nIHR1cGxlcyB3ZXJlIGZvdW5kLiBBbHNvLAotCQkJCSAq IGRvbid0IHJlc2V0IGN1cnJQYWdlIG9yIGxzbiwgYmVjYXVzZSB3ZSBleHBlY3QKLQkJCQkgKiBf aGFzaF9raWxsX2l0ZW1zIHRvIGJlIGNhbGxlZCBmb3IgdGhlIG9sZCBwYWdlIGFmdGVyIHRoaXMK LQkJCQkgKiBmdW5jdGlvbiByZXR1cm5zLgotCQkJCSAqLwotCQkJCXNvLT5jdXJyUG9zLnByZXZQ YWdlID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCQkJCXNvLT5jdXJyUG9zLm5leHRQYWdlID0gbmV4 dF9ibGtubzsKLQkJCQlzby0+Y3VyclBvcy5idWYgPSBidWY7CisJCQkJYmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CiAJCQkJcmV0dXJuIGZhbHNlOwogCQkJfQorCisJCQliYXRjaC0+YnVmID0g YnVmOworCQkJYmF0Y2gtPmN1cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIoYnVmKTsKIAkJ fQogCi0JCXNvLT5jdXJyUG9zLmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKLQkJc28tPmN1cnJQb3Mu bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVt SW5kZXggPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAxOworCQliYXRjaC0+Zmlyc3RJdGVtID0g aXRlbUluZGV4OworCQliYXRjaC0+bGFzdEl0ZW0gPSBNYXhJbmRleFR1cGxlc1BlclBhZ2UgLSAx OwogCX0KIAotCWlmIChzby0+Y3VyclBvcy5idWYgPT0gc28tPmhhc2hzb19idWNrZXRfYnVmIHx8 Ci0JCXNvLT5jdXJyUG9zLmJ1ZiA9PSBzby0+aGFzaHNvX3NwbGl0X2J1Y2tldF9idWYpCisJLyoK KwkgKiBTYXZlZCBhdCBsZWFzdCBvbmUgbWF0Y2ggaW4gYmF0Y2guaXRlbXNbXS4gIFByZXBhcmUg Zm9yIGhhc2hnZXRiYXRjaCB0bworCSAqIHJldHVybiBpdCBieSBpbml0aWFsaXppbmcgcmVtYWlu aW5nIHVuaW5pdGlhbGl6ZWQgZmllbGRzLgorCSAqLworCWlmIChiYXRjaC0+YnVmID09IHNvLT5o YXNoc29fYnVja2V0X2J1ZiB8fAorCQliYXRjaC0+YnVmID09IHNvLT5oYXNoc29fc3BsaXRfYnVj a2V0X2J1ZikKIAl7Ci0JCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gSW52YWxpZEJsb2NrTnVtYmVy OwotCQlzby0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlM b2NrQnVmZmVyKHNvLT5jdXJyUG9zLmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJLyoKKwkJ ICogQmF0Y2gncyBidWZmZXIgaXMgZWl0aGVyIHRoZSBwcmltYXJ5IGJ1Y2tldCwgb3IgYSBidWNr ZXQgYmVpbmcKKwkJICogcG9wdWxhdGVkIGR1ZSB0byBhIHNwbGl0LgorCQkgKgorCQkgKiBJbmNy ZW1lbnQgbG9jYWwgcmVmZXJlbmNlIGNvdW50IHNvIHRoYXQgYmF0Y2ggZ2V0cyBhbiBpbmRlcGVu ZGVudAorCQkgKiBidWZmZXIgcmVmZXJlbmNlIHRoYXQgY2FuIGJlIHJlbGVhc2VkIChieSBoYXNo ZnJlZWJhdGNoKSBiZWZvcmUgdGhlCisJCSAqIGhhc2hzb19idWNrZXRfYnVmL2hhc2hzb19zcGxp dF9idWNrZXRfYnVmIHJlZmVyZW5jZXMgYXJlIHJlbGVhc2VkLgorCQkgKi8KKwkJSW5jckJ1ZmZl clJlZkNvdW50KGJhdGNoLT5idWYpOworCisJCS8qIENhbiBvbmx5IHVzZSBvcGFxdWUtPmhhc2hv X25leHRibGtubyAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CisJ CWJhdGNoLT5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwogCX0KIAllbHNlCiAJ ewotCQlzby0+Y3VyclBvcy5wcmV2UGFnZSA9IG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vOwotCQlz by0+Y3VyclBvcy5uZXh0UGFnZSA9IG9wYXF1ZS0+aGFzaG9fbmV4dGJsa25vOwotCQlfaGFzaF9y ZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlzby0+Y3VyclBvcy5idWYgPSBJbnZhbGlk QnVmZmVyOworCQkvKiBDYW4gdXNlIG9wYXF1ZS0+aGFzaG9fcHJldmJsa25vIGFuZCBvcGFxdWUt Pmhhc2hvX25leHRibGtubyAqLworCQliYXRjaC0+cHJldlBhZ2UgPSBvcGFxdWUtPmhhc2hvX3By ZXZibGtubzsKKwkJYmF0Y2gtPm5leHRQYWdlID0gb3BhcXVlLT5oYXNob19uZXh0Ymxrbm87CiAJ fQogCi0JQXNzZXJ0KHNvLT5jdXJyUG9zLmZpcnN0SXRlbSA8PSBzby0+Y3VyclBvcy5sYXN0SXRl bSk7CisJYmF0Y2gtPm1vcmVMZWZ0ID0gQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5wcmV2UGFn ZSk7CisJYmF0Y2gtPm1vcmVSaWdodCA9IEJsb2NrTnVtYmVySXNWYWxpZChiYXRjaC0+bmV4dFBh Z2UpOworCisJLyogVW5sb2NrIChhbmQgbGlrZWx5IHVucGluKSBidWZmZXIsIHBlciBhbWdldGJh dGNoIGNvbnRyYWN0ICovCisJaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhzY2FuLCBiYXRjaCk7 CisKKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0pOwogCXJldHVy biB0cnVlOwogfQogCiAvKgogICogTG9hZCBhbGwgdGhlIHF1YWxpZmllZCBpdGVtcyBmcm9tIGEg Y3VycmVudCBpbmRleCBwYWdlCi0gKiBpbnRvIHNvLT5jdXJyUG9zLiBIZWxwZXIgZnVuY3Rpb24g Zm9yIF9oYXNoX3JlYWRwYWdlLgorICogaW50byBiYXRjaC4gSGVscGVyIGZ1bmN0aW9uIGZvciBf aGFzaF9yZWFkcGFnZS4KICAqLwogc3RhdGljIGludAogX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCi0JCQkJCQkgICBPZmZzZXROdW1iZXIg b2ZmbnVtLCBTY2FuRGlyZWN0aW9uIGRpcikKKwkJCQkJCSAgIE9mZnNldE51bWJlciBvZmZudW0s IFNjYW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJICAgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7CiAJ SGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlJbmRl eFR1cGxlCWl0dXA7CkBAIC02MzksNyArNTkwLDcgQEAgX2hhc2hfbG9hZF9xdWFsaWZpZWRfaXRl bXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQkJX2hhc2hfY2hlY2txdWFsKHNj YW4sIGl0dXApKQogCQkJewogCQkJCS8qIHR1cGxlIGlzIHF1YWxpZmllZCwgc28gcmVtZW1iZXIg aXQgKi8KLQkJCQlfaGFzaF9zYXZlaXRlbShzbywgaXRlbUluZGV4LCBvZmZudW0sIGl0dXApOwor CQkJCV9oYXNoX3NhdmVpdGVtKGJhdGNoLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CiAJCQkJ aXRlbUluZGV4Kys7CiAJCQl9CiAJCQllbHNlCkBAIC02ODYsNyArNjM3LDcgQEAgX2hhc2hfbG9h ZF9xdWFsaWZpZWRfaXRlbXMoSW5kZXhTY2FuRGVzYyBzY2FuLCBQYWdlIHBhZ2UsCiAJCQl7CiAJ CQkJaXRlbUluZGV4LS07CiAJCQkJLyogdHVwbGUgaXMgcXVhbGlmaWVkLCBzbyByZW1lbWJlciBp dCAqLwotCQkJCV9oYXNoX3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJ CQkJX2hhc2hfc2F2ZWl0ZW0oYmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLCBpdHVwKTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKQEAgLTcwNSwxMyArNjU2LDE0IEBAIF9oYXNoX2xvYWRfcXVhbGlmaWVk X2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbiwgUGFnZSBwYWdlLAogCX0KIH0KIAotLyogU2F2ZSBh biBpbmRleCBpdGVtIGludG8gc28tPmN1cnJQb3MuaXRlbXNbaXRlbUluZGV4XSAqLworLyogU2F2 ZSBhbiBpbmRleCBpdGVtIGludG8gYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyBp bmxpbmUgdm9pZAotX2hhc2hfc2F2ZWl0ZW0oSGFzaFNjYW5PcGFxdWUgc28sIGludCBpdGVtSW5k ZXgsCitfaGFzaF9zYXZlaXRlbShCYXRjaEluZGV4U2NhbiBiYXRjaCwgaW50IGl0ZW1JbmRleCwK IAkJCSAgIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUgaXR1cCkKIHsKLQlIYXNoU2Nh blBvc0l0ZW0gKmN1cnJJdGVtID0gJnNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF07CisJQmF0 Y2hNYXRjaGluZ0l0ZW0gKmN1cnJJdGVtID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJ Y3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKIAljdXJySXRlbS0+aW5kZXhPZmZzZXQg PSBvZmZudW07CisJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gMDsKIH0KZGlmZiAtLWdpdCBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2h1dGlsLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGFz aC9oYXNodXRpbC5jCmluZGV4IGNmN2YwYjkwMS4uZjk5MTA1ZDNiIDEwMDY0NAotLS0gYS9zcmMv YmFja2VuZC9hY2Nlc3MvaGFzaC9oYXNodXRpbC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o YXNoL2hhc2h1dGlsLmMKQEAgLTUxMCw4MSArNTEwLDg0IEBAIF9oYXNoX2dldF9uZXdidWNrZXRf ZnJvbV9vbGRidWNrZXQoUmVsYXRpb24gcmVsLCBCdWNrZXQgb2xkX2J1Y2tldCwKICAqIF9oYXNo X2tpbGxfaXRlbXMgLSBzZXQgTFBfREVBRCBzdGF0ZSBmb3IgaXRlbXMgYW4gaW5kZXhzY2FuIGNh bGxlciBoYXMKICAqIHRvbGQgdXMgd2VyZSBraWxsZWQuCiAgKgotICogc2Nhbi0+b3BhcXVlLCBy ZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5mb3JtYXRpb24gYWJvdXQg dGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhlcmVvbiAoZ2VuZXJhbGx5 LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51bUtpbGxlZCA+IDApLgor ICogVGhlIGJhdGNoIHBhcmFtZXRlciBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgY3Vy cmVudCBwYWdlIGFuZCBraWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9uICh0aGlzIHNob3VsZCBvbmx5 IGJlIGNhbGxlZCBpZiBiYXRjaC0+bnVtS2lsbGVkID4gMCkuCiAgKgotICogVGhlIGNhbGxlciBk b2VzIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgcGFnZSBhbmQgbWF5IG9yIG1heSBub3QgaGF2ZSB0 aGUKLSAqIHBhZ2UgcGlubmVkIGluIGEgYnVmZmVyLiAgTm90ZSB0aGF0IHJlYWQtbG9jayBpcyBz dWZmaWNpZW50IGZvciBzZXR0aW5nCi0gKiBMUF9ERUFEIHN0YXR1cyAod2hpY2ggaXMgb25seSBh IGhpbnQpLgorICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIGJhdGNoIHBv c2l0aW9uJ3MgcGFnZSwgYnV0IG11c3QgaG9sZCBhCisgKiBidWZmZXIgcGluIHdoZW4gIWRyb3BQ aW4uICBXaGVuIHdlIHJldHVybiwgaXQgc3RpbGwgd29uJ3QgYmUgbG9ja2VkLiAgSXQnbGwKKyAq IGNvbnRpbnVlIHRvIGhvbGQgd2hhdGV2ZXIgcGlucyB3ZXJlIGhlbGQgYmVmb3JlIGNhbGxpbmcg aGVyZS4KICAqCi0gKiBUaGUgY2FsbGVyIG11c3QgaGF2ZSBwaW4gb24gYnVja2V0IGJ1ZmZlciwg YnV0IG1heSBvciBtYXkgbm90IGhhdmUgcGluCi0gKiBvbiBvdmVyZmxvdyBidWZmZXIsIGFzIGlu ZGljYXRlZCBieSBIYXNoU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKS4KLSAqCi0gKiBXZSBt YXRjaCBpdGVtcyBieSBoZWFwIFRJRCBiZWZvcmUgYXNzdW1pbmcgdGhleSBhcmUgdGhlIHJpZ2h0 IG9uZXMgdG8KLSAqIGRlbGV0ZS4KLSAqCi0gKiBUaGVyZSBhcmUgbmV2ZXIgYW55IHNjYW5zIGFj dGl2ZSBpbiBhIGJ1Y2tldCBhdCB0aGUgdGltZSBWQUNVVU0gYmVnaW5zLAotICogYmVjYXVzZSBW QUNVVU0gdGFrZXMgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHByaW1hcnkgYnVja2V0IHBhZ2UgYW5k IHNjYW5zCi0gKiBob2xkIGEgcGluLiAgQSBzY2FuIGNhbiBiZWdpbiBhZnRlciBWQUNVVU0gbGVh dmVzIHRoZSBwcmltYXJ5IGJ1Y2tldCBwYWdlCi0gKiBidXQgYmVmb3JlIGl0IGZpbmlzaGVzIHRo ZSBlbnRpcmUgYnVja2V0LCBidXQgaXQgY2FuIG5ldmVyIHBhc3MgVkFDVVVNLAotICogYmVjYXVz ZSBWQUNVVU0gYWx3YXlzIGxvY2tzIHRoZSBuZXh0IHBhZ2UgYmVmb3JlIHJlbGVhc2luZyB0aGUg bG9jayBvbgotICogdGhlIHByZXZpb3VzIG9uZS4gIFRoZXJlZm9yZSwgd2UgZG9uJ3QgaGF2ZSB0 byB3b3JyeSBhYm91dCBhY2NpZGVudGFsbHkKLSAqIGtpbGxpbmcgYSBUSUQgdGhhdCBoYXMgYmVl biByZXVzZWQgZm9yIGFuIHVucmVsYXRlZCB0dXBsZS4KKyAqIFdlIG1hdGNoIGl0ZW1zIGJ5IGhl YXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUgcmlnaHQgb25lcyB0byBzZXQKKyAq IExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBob2xkcyBhIGJ1ZmZlciBwaW4gb24g dGhlIHRhcmdldCBwYWdlCisgKiBjb250aW51b3VzbHkgZnJvbSBpbml0aWFsbHkgcmVhZGluZyB0 aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlvbgorICogKGlmIGl0IGlzIGEgIWRy b3BQaW4gc2NhbiksIFZBQ1VVTSBjYW5ub3QgaGF2ZSBkZWxldGVkIGFueSBpdGVtcyBvbiB0aGUK KyAqIHBhZ2UsIHNvIHRoZSBwYWdlJ3MgVElEcyBjYW4ndCBoYXZlIGJlZW4gcmVjeWNsZWQgYnkg bm93LiAgVGhlcmUncyBubyByaXNrCisgKiB0aGF0IHdlJ2xsIGNvbmZ1c2UgYSBuZXcgaW5kZXgg dHVwbGUgdGhhdCBoYXBwZW5zIHRvIHVzZSBhIHJlY3ljbGVkIFRJRAorICogd2l0aCBhIG5vdy1y ZW1vdmVkIHR1cGxlIHdpdGggdGhlIHNhbWUgVElEICh0aGF0IHVzZWQgdG8gYmUgb24gdGhpcyBz YW1lCisgKiBwYWdlKS4gIFdlIGNhbid0IHJlbHkgb24gdGhhdCBkdXJpbmcgc2NhbnMgdGhhdCBk cm9wIGJ1ZmZlciBwaW5zIGVhZ2VybHkKKyAqIChpLmUuIGRyb3BQaW4gc2NhbnMpLCB0aG91Z2gs IHNvIHdlIG11c3QgY29uZGl0aW9uIHNldHRpbmcgTFBfREVBRCBiaXRzIG9uCisgKiB0aGUgcGFn ZSBMU04gaGF2aW5nIG5vdCBjaGFuZ2VkIHNpbmNlIGJhY2sgd2hlbiBfaGFzaF9yZWFkcGFnZSBz YXcgdGhlIHBhZ2UuCisgKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9ERUFEIGJp dHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KICAqLwogdm9pZAotX2hhc2hfa2lsbF9pdGVt cyhJbmRleFNjYW5EZXNjIHNjYW4pCitfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpCiB7Ci0JSGFzaFNjYW5PcGFxdWUgc28gPSAoSGFzaFNj YW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0 aW9uOwotCUJsb2NrTnVtYmVyIGJsa25vOwogCUJ1ZmZlcgkJYnVmOwogCVBhZ2UJCXBhZ2U7CiAJ SGFzaFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJbWF4b2Zm OwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5udW1LaWxsZWQ7Ci0JaW50CQkJaTsKIAlib29sCQlr aWxsZWRzb21ldGhpbmcgPSBmYWxzZTsKLQlib29sCQloYXZlUGluID0gZmFsc2U7CiAKLQlBc3Nl cnQoc28tPm51bUtpbGxlZCA+IDApOwotCUFzc2VydChzby0+a2lsbGVkSXRlbXMgIT0gTlVMTCk7 Ci0JQXNzZXJ0KEhhc2hTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOworCUFzc2VydChiYXRj aC0+bnVtS2lsbGVkID4gMCk7CisJQXNzZXJ0KGJhdGNoLT5raWxsZWRJdGVtcyAhPSBOVUxMKTsK KwlBc3NlcnQoQmxvY2tOdW1iZXJJc1ZhbGlkKGJhdGNoLT5jdXJyUGFnZSkpOwogCi0JLyoKLQkg KiBBbHdheXMgcmVzZXQgdGhlIHNjYW4gc3RhdGUsIHNvIHdlIGRvbid0IGxvb2sgZm9yIHNhbWUg aXRlbXMgb24gb3RoZXIKLQkgKiBwYWdlcy4KLQkgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQot CWJsa25vID0gc28tPmN1cnJQb3MuY3VyclBhZ2U7Ci0JaWYgKEhhc2hTY2FuUG9zSXNQaW5uZWQo c28tPmN1cnJQb3MpKQorCWlmICghc2Nhbi0+ZHJvcFBpbikKIAl7CiAJCS8qCi0JCSAqIFdlIGFs cmVhZHkgaGF2ZSBwaW4gb24gdGhpcyBidWZmZXIsIHNvLCBhbGwgd2UgbmVlZCB0byBkbyBpcwot CQkgKiBhY3F1aXJlIGxvY2sgb24gaXQuCisJCSAqIFdlIGhhdmUgaGVsZCB0aGUgcGluIG9uIHRo aXMgcGFnZSBzaW5jZSB3ZSByZWFkIHRoZSBpbmRleCB0dXBsZXMsCisJCSAqIHNvIGFsbCB3ZSBu ZWVkIHRvIGRvIGlzIGxvY2sgaXQuICBUaGUgcGluIHdpbGwgaGF2ZSBwcmV2ZW50ZWQKKwkJICog Y29uY3VycmVudCBWQUNVVU1zIGZyb20gcmVjeWNsaW5nIGFueSBvZiB0aGUgVElEcyBvbiB0aGUg cGFnZS4KIAkJICovCi0JCWhhdmVQaW4gPSB0cnVlOwotCQlidWYgPSBzby0+Y3VyclBvcy5idWY7 CisJCWJ1ZiA9IGJhdGNoLT5idWY7CiAJCUxvY2tCdWZmZXIoYnVmLCBCVUZGRVJfTE9DS19TSEFS RSk7CiAJfQogCWVsc2UKLQkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwgYmxrbm8sIEhBU0hfUkVB RCwgTEhfT1ZFUkZMT1dfUEFHRSk7CisJeworCQlYTG9nUmVjUHRyCWxhdGVzdGxzbjsKKworCQlB c3NlcnQoUmVsYXRpb25OZWVkc1dBTChyZWwpKTsKKwkJYnVmID0gX2hhc2hfZ2V0YnVmKHJlbCwg YmF0Y2gtPmN1cnJQYWdlLCBIQVNIX1JFQUQsCisJCQkJCQkgICBMSF9CVUNLRVRfUEFHRSB8IExI X09WRVJGTE9XX1BBR0UpOworCisJCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhidWYp OworCQlBc3NlcnQoYmF0Y2gtPmxzbiA8PSBsYXRlc3Rsc24pOworCQlpZiAoYmF0Y2gtPmxzbiAh PSBsYXRlc3Rsc24pCisJCXsKKwkJCS8qIE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8K KwkJCV9oYXNoX3JlbGJ1ZihyZWwsIGJ1Zik7CisJCQlyZXR1cm47CisJCX0KKworCQkvKiBVbm1v ZGlmaWVkLCBoaW50aW5nIGlzIHNhZmUgKi8KKwl9CiAKIAlwYWdlID0gQnVmZmVyR2V0UGFnZShi dWYpOwogCW9wYXF1ZSA9IEhhc2hQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCW1heG9mZiA9IFBhZ2VH ZXRNYXhPZmZzZXROdW1iZXIocGFnZSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgbnVtS2lsbGVkOyBp KyspCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5raWxsZWRJdGVtc1tdIGluIGluZGV4IHBh Z2Ugb3JkZXIgKi8KKwlmb3IgKGludCBpID0gMDsgaSA8IGJhdGNoLT5udW1LaWxsZWQ7IGkrKykK IAl7Ci0JCWludAkJCWl0ZW1JbmRleCA9IHNvLT5raWxsZWRJdGVtc1tpXTsKLQkJSGFzaFNjYW5Q b3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJ CQlpdGVtSW5kZXggPSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVt ICpjdXJySXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAogCQlvZmZudW0gPSBjdXJy SXRlbS0+aW5kZXhPZmZzZXQ7CiAKLQkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBzby0+Y3VyclBvcy5m aXJzdEl0ZW0gJiYKLQkJCSAgIGl0ZW1JbmRleCA8PSBzby0+Y3VyclBvcy5sYXN0SXRlbSk7CisJ CUFzc2VydChpdGVtSW5kZXggPj0gYmF0Y2gtPmZpcnN0SXRlbSAmJgorCQkJICAgaXRlbUluZGV4 IDw9IGJhdGNoLT5sYXN0SXRlbSk7CiAKIAkJd2hpbGUgKG9mZm51bSA8PSBtYXhvZmYpCiAJCXsK QEAgLTYxMyw5ICs2MTYsOCBAQCBfaGFzaF9raWxsX2l0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikK IAkJTWFya0J1ZmZlckRpcnR5SGludChidWYsIHRydWUpOwogCX0KIAotCWlmIChzby0+aGFzaHNv X2J1Y2tldF9idWYgPT0gc28tPmN1cnJQb3MuYnVmIHx8Ci0JCWhhdmVQaW4pCi0JCUxvY2tCdWZm ZXIoc28tPmN1cnJQb3MuYnVmLCBCVUZGRVJfTE9DS19VTkxPQ0spOworCWlmICghc2Nhbi0+ZHJv cFBpbikKKwkJTG9ja0J1ZmZlcihidWYsIEJVRkZFUl9MT0NLX1VOTE9DSyk7CiAJZWxzZQogCQlf aGFzaF9yZWxidWYocmVsLCBidWYpOwogfQpkaWZmIC0tZ2l0IGEvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAppbmRleCBh MjJlNmZjNGIuLjdkYzJhZTlhZiAxMDA2NDQKLS0tIGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVk ZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKQEAgLTExOTQs OCArMTE5NCw2IEBAIEhhc2hQYWdlU3RhdAogSGFzaFBhdGgKIEhhc2hTY2FuT3BhcXVlCiBIYXNo U2Nhbk9wYXF1ZURhdGEKLUhhc2hTY2FuUG9zRGF0YQotSGFzaFNjYW5Qb3NJdGVtCiBIYXNoU2tl d0J1Y2tldAogSGFzaFN0YXRlCiBIYXNoVmFsdWVGdW5jCi0tIAoyLjUxLjAKCg== --00000000000026d6270647d0c7f3 Content-Type: application/octet-stream; name="v6-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Disposition: attachment; filename="v6-0001-Add-batching-interfaces-used-by-heapam-and-nbtree.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk4cbt0s0 RnJvbSAzYjJiYTVkY2Y1MjI5NjQzODhkZTYyYTkwYTk0NTg3OWEwZDVjNjU5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFR1 ZSwgOSBTZXAgMjAyNSAxOTo1MDowMyAtMDQwMApTdWJqZWN0OiBbUEFUQ0ggdjYgMS80XSBBZGQg YmF0Y2hpbmcgaW50ZXJmYWNlcyB1c2VkIGJ5IGhlYXBhbSBhbmQgbmJ0cmVlLgoKQWRkIGEgbmV3 IGFtZ2V0YmF0Y2ggaW5kZXggQU0gaW50ZXJmYWNlIHRoYXQgYWxsb3dzIGluZGV4IGFjY2VzcyBt ZXRob2RzCnRvIGltcGxlbWVudCBwbGFpbi9vcmRlcmVkIGluZGV4IHNjYW5zIHRoYXQgcmV0dXJu IGluZGV4IGVudHJpZXMgaW4KcGVyLWxlYWYtcGFnZSBiYXRjaGVzLCByYXRoZXIgdGhhbiBvbmUg YXQgYSB0aW1lLiAgVGhpcyBlbmFibGVzIGEKdmFyaWV0eSBvZiBvcHRpbWl6YXRpb25zIG9uIHRo ZSB0YWJsZSBBTSBzaWRlLCBtb3N0IG5vdGFibHkgSS9PCnByZWZldGNoaW5nIG9mIGhlYXAgdHVw bGVzIGR1cmluZyBvcmRlcmVkIGluZGV4IHNjYW5zLiAgSXQgd2lsbCBhbHNvCmVuYWJsZSBhbiBv cHRpbWl6YXRpb24gdGhhdCBoYXMgaGVhcGFtIGF2b2lkIHJlcGVhdGVkbHkgbG9ja2luZyBhbmQK dW5sb2NraW5nIHRoZSBzYW1lIGhlYXAgcGFnZSdzIGJ1ZmZlci4KCkluZGV4IGFjY2VzcyBtZXRo b2RzIHRoYXQgc3VwcG9ydCBwbGFpbiBpbmRleCBzY2FucyBtdXN0IG5vdyBpbXBsZW1lbnQKZWl0 aGVyIHRoZSBhbWdldGJhdGNoIGludGVyZmFjZSBPUiB0aGUgYW1nZXR0dXBsZSBpbnRlcmZhY2Uu ICBUaGUKYW1nZXR0dXBsZSBpbnRlcmZhY2Ugd2lsbCBzdGlsbCBiZSB1c2VkIGJ5IGluZGV4IEFN cyB0aGF0IHJlcXVpcmUgZGlyZWN0CmNvbnRyb2wgb3ZlciB0aGUgcHJvZ3Jlc3Mgb2YgaW5kZXgg c2NhbnMgKGUuZy4sIEdpU1Qgd2l0aCBLTk4gb3JkZXJlZApzY2FucykuCgpUaGlzIGNvbW1pdCBh bHNvIGFkZHMgYSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlIGNhbGxiYWNrLCBjYWxsZWQgYnkgdGhl CmNvcmUgZXhlY3V0b3IgdGhyb3VnaCB0aGUgbmV3IHRhYmxlX2luZGV4X2dldG5leHRfc2xvdCBz aGltIGZ1bmN0aW9uLgpUaGlzIGFsbG93cyB0aGUgdGFibGUgQU0gdG8gZGlyZWN0bHkgbWFuYWdl IHRoZSBwcm9ncmVzcyBvZiBpbmRleCBzY2FucwpyYXRoZXIgdGhhbiBoYXZpbmcgaW5kaXZpZHVh bCBUSURzIHBhc3NlZCBpbiBieSB0aGUgY2FsbGVyLiBUaGUKYW1nZXRiYXRjaCBpbnRlcmZhY2Ug aXMgdGlnaHRseSBjb3VwbGVkIHdpdGggdGhlIG5ldyBhcHByb2FjaCB0byBvcmRlcmVkCmluZGV4 IHNjYW5zIGFkZGVkIHRvIHRoZSB0YWJsZSBBTS4gIFRoZSB0YWJsZSBBTSBjYW4gYXBwbHkga25v d2xlZGdlIG9mCndoaWNoIFRJRHMgd2lsbCBiZSByZXR1cm5lZCB0byBzY2FuIGluIHRoZSBuZWFy IGZ1dHVyZSB0byBvcHRpbWl6ZSBhbmQKYmF0Y2ggdGFibGUgQU0gYmxvY2sgYWNjZXNzZXMsIGFu ZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZy4gIFRoZXNlCm9wdGltaXphdGlvbnMgYXJlIGxl ZnQgYXMgd29yayBmb3IgbGF0ZXIgY29tbWl0cy4KCkJhdGNoZXMgcmV0dXJuZWQgZnJvbSBhbWdl dGJhdGNoIGFyZSBndWFyYW50ZWVkIHRvIGJlIGFzc29jaWF0ZWQgd2l0aCBhbgppbmRleCBwYWdl IGNvbnRhaW5pbmcgYXQgbGVhc3Qgb25lIG1hdGNoaW5nIHR1cGxlLiAgVGhlIGFtZ2V0YmF0Y2gK aW50ZXJmYWNlIG1heSBob2xkIGJ1ZmZlciBwaW5zIGFzIGludGVybG9ja3MgYWdhaW5zdCBjb25j dXJyZW50IFRJRApyZWN5Y2xpbmcgYnkgVkFDVVVNLiAgVGhpcyBleHRlbmRzL2dlbmVyYWxpemVz IHRoZSBtZWNoYW5pc20gYWRkZWQgdG8KbmJ0cmVlIGJ5IGNvbW1pdCAyZWQ1Yjg3ZiB0byBhbGwg aW5kZXggQU1zIHRoYXQgYWRkIHN1cHBvcnQgZm9yIHRoZSBuZXcKYW1nZXRiYXRjaCBpbnRlcmZh Y2UuCgpBdXRob3I6IFRvbWFzIFZvbmRyYSA8dG9tYXNAdm9uZHJhLm1lPgpBdXRob3I6IFBldGVy IEdlb2doZWdhbiA8cGdAYm93dC5pZT4KUmV2aWV3ZWQtQnk6IEFuZHJlcyBGcmV1bmQgPGFuZHJl c0BhbmFyYXplbC5kZT4KUmV2aWV3ZWQtQnk6IFRob21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdt YWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jZjg1ZjQ2Zi1iMDJmLTA1 YjItNTI0OC01MDAwYjg5NGViYWJAZW50ZXJwcmlzZWRiLmNvbQpEaXNjdXNzaW9uOiBodHRwczov L3Bvc3Rnci5lcy9tL2VmYWMzMjM4LTZmMzQtNDFlYS1hMzkzLTI2Y2MwNDQxYjUwNiU0MHZvbmRy YS5tZQpEaXNjdXNzaW9uOiBodHRwczovL3Bvc3Rnci5lcy9tL0NBSDItV3prOSUzRHglM0RhMlRi Y3FZY1glMkJYWG1ESFFyNSUzRDF2OW00Wl92OGEtS3dGMVpvejBBJTQwbWFpbC5nbWFpbC5jb20K LS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaCAgICAgICAgICAgICAgICAgICAgfCAgMjIg Ky0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oICAgICAgICAgICAgICAgICAgICB8ICAzMSAr LQogc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oICAgICAgICAgICAgICAgICAgIHwgICAzICsK IHNyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaCAgICAgICAgICAgICAgICAgICB8IDE3NiArKy0t LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmggICAgICAgICAgICAgICAgICB8IDI0MiAr KysrKystCiBzcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oICAgICAgICAgICAgICAgICAgfCAg NDIgKysKIHNyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oICAgICAgICAgICAgICAgICB8ICAg MiAtCiBzcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCAgICAgICAgICAgICAgICAgfCAgIDIg Ky0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9icmluL2JyaW4uYyAgICAgICAgICAgICAgICB8ICAgNSAr LQogc3JjL2JhY2tlbmQvYWNjZXNzL2dpbi9naW5nZXQuYyAgICAgICAgICAgICAgIHwgICA2ICst CiBzcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYyAgICAgICAgICAgICAgfCAgIDUgKy0K IHNyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyAgICAgICAgICAgICAgICB8ICAgNSArLQog c3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jICAgICAgICAgICAgICAgIHwgICA1ICstCiBz cmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jICAgICAgfCA0NTQgKysrKysr KysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxlICAgICAgICAgICAgIHwg ICAzICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyAgICAgICAgICAgICAgfCAg MTUgKy0KIHNyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgICAgICAgICAgICB8IDEz NSArKy0tCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCA1 OTYgKysrKysrKysrKysrKysrKysrCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvbWVzb24uYnVp bGQgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9SRUFETUUgICAg ICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYyAg ICAgICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWFkcGFnZS5j ICAgICAgIHwgMTkyICsrKy0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyAg ICAgICAgICAgIHwgMjk3ICsrKy0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRz ZWFyY2guYyAgICAgICAgIHwgNTEwICsrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnR1dGlscy5jICAgICAgICAgIHwgIDkzICstLQogc3JjL2JhY2tlbmQvYWNjZXNz L3NwZ2lzdC9zcGd1dGlscy5jICAgICAgICAgIHwgICA1ICstCiBzcmMvYmFja2VuZC9jb21tYW5k cy9leHBsYWluLmMgICAgICAgICAgICAgICAgfCAgMjMgKy0KIHNyYy9iYWNrZW5kL2NvbW1hbmRz L2luZGV4Y21kcy5jICAgICAgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Iv ZXhlY0FtaS5jICAgICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9leGVjdXRvci9l eGVjSW5kZXhpbmcuYyAgICAgICAgICAgfCAgIDYgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4 ZWNSZXBsaWNhdGlvbi5jICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9k ZUJpdG1hcEluZGV4c2Nhbi5jICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleG9ubHlzY2FuLmMgICAgICB8IDEwOCArLS0tCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2Rl SW5kZXhzY2FuLmMgICAgICAgICAgfCAgMTMgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2luZHhwYXRoLmMgICAgICAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGxhbmNhdC5jICAgICAgICAgIHwgICA2ICstCiBzcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dp Y2FsL3JlbGF0aW9uLmMgICAgfCAgIDMgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9hbXV0aWxz LmMgICAgICAgICAgICAgICB8ICAgOCArLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3NlbGZ1bmNz LmMgICAgICAgICAgICAgIHwgIDY4ICstCiBjb250cmliL2Jsb29tL2JsdXRpbHMuYyAgICAgICAg ICAgICAgICAgICAgICAgfCAgIDUgKy0KIGRvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwgICAgICAg ICAgICAgICAgICAgICB8IDMxMCArKysrKysrLS0KIGRvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3Rh YmxlLnNnbWwgICAgICAgICAgICB8ICAxMyArLQogLi4uL21vZHVsZXMvZHVtbXlfaW5kZXhfYW0v ZHVtbXlfaW5kZXhfYW0uYyAgIHwgICA1ICstCiBzcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCAgICAgICAgICAgICAgfCAgIDQgLQogNDQgZmlsZXMgY2hhbmdlZCwgMjIwNCBpbnNlcnRp b25zKCspLCAxMjM5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IHNyYy9iYWNrZW5k L2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nl c3MvYW1hcGkuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9hbWFwaS5oCmluZGV4IGVjZmJkMDE3ZC4u OTYyYzcwZjQzIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvYW1hcGkuaApAQCAtMTk4LDYgKzE5OCwxNSBAQCB0eXBlZGVmIHZv aWQgKCphbXJlc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIHR5cGVkZWYgYm9v bCAoKmFtZ2V0dHVwbGVfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkg U2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24pOwogCisvKiBuZXh0IGJhdGNoIG9mIHZhbGlkIHR1cGxl cyAqLwordHlwZWRlZiBCYXRjaEluZGV4U2NhbiAoKmFtZ2V0YmF0Y2hfZnVuY3Rpb24pIChJbmRl eFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkJCSAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gs CisJCQkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKTsKKworLyogcmVsZWFzZSBi YXRjaCBvZiB2YWxpZCB0dXBsZXMgKi8KK3R5cGVkZWYgdm9pZCAoKmFtZnJlZWJhdGNoX2Z1bmN0 aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICBCYXRjaEluZGV4U2NhbiBiYXRj aCk7CisKIC8qIGZldGNoIGFsbCB2YWxpZCB0dXBsZXMgKi8KIHR5cGVkZWYgaW50NjQgKCphbWdl dGJpdG1hcF9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2NhbiwKIAkJCQkJCQkJCSAgIFRJREJp dG1hcCAqdGJtKTsKQEAgLTIwNSwxMSArMjE0LDkgQEAgdHlwZWRlZiBpbnQ2NCAoKmFtZ2V0Yml0 bWFwX2Z1bmN0aW9uKSAoSW5kZXhTY2FuRGVzYyBzY2FuLAogLyogZW5kIGluZGV4IHNjYW4gKi8K IHR5cGVkZWYgdm9pZCAoKmFtZW5kc2Nhbl9mdW5jdGlvbikgKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiAKLS8qIG1hcmsgY3VycmVudCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbW1h cmtwb3NfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4pOwotCi0vKiByZXN0b3JlIG1hcmtl ZCBzY2FuIHBvc2l0aW9uICovCi10eXBlZGVmIHZvaWQgKCphbXJlc3RycG9zX2Z1bmN0aW9uKSAo SW5kZXhTY2FuRGVzYyBzY2FuKTsKKy8qIGludmFsaWRhdGUgaW5kZXggQU0gc3RhdGUgdGhhdCBp bmRlcGVuZGVudGx5IHRyYWNrcyBzY2FuJ3MgcG9zaXRpb24gKi8KK3R5cGVkZWYgdm9pZCAoKmFt cG9zcmVzZXRfZnVuY3Rpb24pIChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJCQkgQmF0Y2hJ bmRleFNjYW4gYmF0Y2gpOwogCiAvKgogICogQ2FsbGJhY2sgZnVuY3Rpb24gc2lnbmF0dXJlcyAt IGZvciBwYXJhbGxlbCBpbmRleCBzY2Fucy4KQEAgLTMwOSwxMCArMzE2LDExIEBAIHR5cGVkZWYg c3RydWN0IEluZGV4QW1Sb3V0aW5lCiAJYW1iZWdpbnNjYW5fZnVuY3Rpb24gYW1iZWdpbnNjYW47 CiAJYW1yZXNjYW5fZnVuY3Rpb24gYW1yZXNjYW47CiAJYW1nZXR0dXBsZV9mdW5jdGlvbiBhbWdl dHR1cGxlOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtZ2V0YmF0Y2hfZnVuY3Rpb24gYW1nZXRiYXRj aDsgLyogY2FuIGJlIE5VTEwgKi8KKwlhbWZyZWViYXRjaF9mdW5jdGlvbiBhbWZyZWViYXRjaDsJ LyogY2FuIGJlIE5VTEwgKi8KIAlhbWdldGJpdG1hcF9mdW5jdGlvbiBhbWdldGJpdG1hcDsJLyog Y2FuIGJlIE5VTEwgKi8KIAlhbWVuZHNjYW5fZnVuY3Rpb24gYW1lbmRzY2FuOwotCWFtbWFya3Bv c19mdW5jdGlvbiBhbW1hcmtwb3M7CS8qIGNhbiBiZSBOVUxMICovCi0JYW1yZXN0cnBvc19mdW5j dGlvbiBhbXJlc3RycG9zOyAvKiBjYW4gYmUgTlVMTCAqLworCWFtcG9zcmVzZXRfZnVuY3Rpb24g YW1wb3NyZXNldDsgLyogY2FuIGJlIE5VTEwgKi8KIAogCS8qIGludGVyZmFjZSBmdW5jdGlvbnMg dG8gc3VwcG9ydCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogCWFtZXN0aW1hdGVwYXJhbGxlbHNj YW5fZnVuY3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgLyogY2FuIGJlIE5VTEwgKi8KZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2dlbmFtLmgKaW5kZXggZTM3ODM0YzQwLi42MjdlZGQ0ODYgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL2FjY2Vzcy9nZW5hbS5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9nZW5hbS5oCkBAIC00 MCw2ICs0MCwxMiBAQCB0eXBlZGVmIHN0cnVjdCBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24KIHsK IAkvKiBJbmRleCBzZWFyY2ggY291bnQgKGluY3JlbWVudGVkIHdpdGggcGdzdGF0X2NvdW50X2lu ZGV4X3NjYW4gY2FsbCkgKi8KIAl1aW50NjQJCW5zZWFyY2hlczsKKworCS8qCisJICogaGVhcCBi bG9ja3MgZmV0Y2hlZCBjb3VudHMgKGluY3JlbWVudGVkIGJ5IGluZGV4X2dldG5leHRfc2xvdCBj YWxscworCSAqIHdpdGhpbiB0YWJsZSBBTXMsIHRob3VnaCBvbmx5IGR1cmluZyBpbmRleC1vbmx5 IHNjYW5zKQorCSAqLworCXVpbnQ2NAkJbmhlYXBmZXRjaGVzOwogfSBJbmRleFNjYW5JbnN0cnVt ZW50YXRpb247CiAKIC8qCkBAIC0xMTUsNiArMTIxLDcgQEAgdHlwZWRlZiBib29sICgqSW5kZXhC dWxrRGVsZXRlQ2FsbGJhY2spIChJdGVtUG9pbnRlciBpdGVtcHRyLCB2b2lkICpzdGF0ZSk7CiAK IC8qIHN0cnVjdCBkZWZpbml0aW9ucyBhcHBlYXIgaW4gcmVsc2Nhbi5oICovCiB0eXBlZGVmIHN0 cnVjdCBJbmRleFNjYW5EZXNjRGF0YSAqSW5kZXhTY2FuRGVzYzsKK3R5cGVkZWYgc3RydWN0IEJh dGNoSW5kZXhTY2FuRGF0YSAqQmF0Y2hJbmRleFNjYW47CiB0eXBlZGVmIHN0cnVjdCBTeXNTY2Fu RGVzY0RhdGEgKlN5c1NjYW5EZXNjOwogCiB0eXBlZGVmIHN0cnVjdCBQYXJhbGxlbEluZGV4U2Nh bkRlc2NEYXRhICpQYXJhbGxlbEluZGV4U2NhbkRlc2M7CkBAIC0xNzUsNiArMTgyLDcgQEAgZXh0 ZXJuIHZvaWQgaW5kZXhfaW5zZXJ0X2NsZWFudXAoUmVsYXRpb24gaW5kZXhSZWxhdGlvbiwKIAog ZXh0ZXJuIEluZGV4U2NhbkRlc2MgaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxhdGlv biwKIAkJCQkJCQkJCSBSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCQkJCQkJIGJvb2wgeHNf d2FudF9pdHVwLAogCQkJCQkJCQkJIFNuYXBzaG90IHNuYXBzaG90LAogCQkJCQkJCQkJIEluZGV4 U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJCQkJCQkJCSBpbnQgbmtleXMsIGlu dCBub3JkZXJieXMpOwpAQCAtMjAxLDE0ICsyMDksMTIgQEAgZXh0ZXJuIHZvaWQgaW5kZXhfcGFy YWxsZWxzY2FuX2luaXRpYWxpemUoUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogZXh0ZXJuIHZvaWQg aW5kZXhfcGFyYWxsZWxyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuKTsKIGV4dGVybiBJbmRleFNj YW5EZXNjIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFwcmVsLAogCQkJCQkJ CQkJCQkgIFJlbGF0aW9uIGluZGV4cmVsLAorCQkJCQkJCQkJCQkgIGJvb2wgeHNfd2FudF9pdHVw LAogCQkJCQkJCQkJCQkgIEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW5zdHJ1bWVudCwKIAkJ CQkJCQkJCQkJICBpbnQgbmtleXMsIGludCBub3JkZXJieXMsCiAJCQkJCQkJCQkJCSAgUGFyYWxs ZWxJbmRleFNjYW5EZXNjIHBzY2FuKTsKIGV4dGVybiBJdGVtUG9pbnRlciBpbmRleF9nZXRuZXh0 X3RpZChJbmRleFNjYW5EZXNjIHNjYW4sCiAJCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24pOwotZXh0ZXJuIGJvb2wgaW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1 cGxlVGFibGVTbG90ICpzbG90KTsKLWV4dGVybiBib29sIGluZGV4X2dldG5leHRfc2xvdChJbmRl eFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAotCQkJCQkJCSAgIFR1cGxl VGFibGVTbG90ICpzbG90KTsKIGV4dGVybiBpbnQ2NCBpbmRleF9nZXRiaXRtYXAoSW5kZXhTY2Fu RGVzYyBzY2FuLCBUSURCaXRtYXAgKmJpdG1hcCk7CiAKIGV4dGVybiBJbmRleEJ1bGtEZWxldGVS ZXN1bHQgKmluZGV4X2J1bGtfZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywKQEAgLTI3Miw0 ICsyNzgsMjMgQEAgZXh0ZXJuIHZvaWQgc3lzdGFibGVfaW5wbGFjZV91cGRhdGVfYmVnaW4oUmVs YXRpb24gcmVsYXRpb24sCiBleHRlcm4gdm9pZCBzeXN0YWJsZV9pbnBsYWNlX3VwZGF0ZV9maW5p c2godm9pZCAqc3RhdGUsIEhlYXBUdXBsZSB0dXBsZSk7CiBleHRlcm4gdm9pZCBzeXN0YWJsZV9p bnBsYWNlX3VwZGF0ZV9jYW5jZWwodm9pZCAqc3RhdGUpOwogCisvKgorICogYW1nZXRiYXRjaCB1 dGlsaXRpZXMgY2FsbGVkIGJ5IGluZGV4YW0uYyAoaW4gaW5kZXhiYXRjaC5jKQorICovCitzdHJ1 Y3QgQmF0Y2hRdWV1ZUl0ZW1Qb3M7CitleHRlcm4gdm9pZCBpbmRleF9iYXRjaF9pbml0KEluZGV4 U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBiYXRjaF9mcmVlKEluZGV4U2NhbkRlc2Mgc2Nh biwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0Y2hfcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuLCBib29sIGNvbXBsZXRlKTsKK2V4dGVybiB2b2lkIGluZGV4X2Jh dGNoX21hcmtfcG9zKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRj aF9yZXN0b3JlX3BvcyhJbmRleFNjYW5EZXNjIHNjYW4pOworZXh0ZXJuIHZvaWQgaW5kZXhfYmF0 Y2hfa2lsbF9pdGVtKEluZGV4U2NhbkRlc2Mgc2Nhbik7CitleHRlcm4gdm9pZCBpbmRleF9iYXRj aF9lbmQoSW5kZXhTY2FuRGVzYyBzY2FuKTsKKworLyoKKyAqIGFtZ2V0YmF0Y2ggdXRpbGl0aWVz IGNhbGxlZCBieSBpbmRleCBBTXMgKGluIGluZGV4YmF0Y2guYykKKyAqLworZXh0ZXJuIHZvaWQg aW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhT Y2FuIGJhdGNoKTsKK2V4dGVybiBCYXRjaEluZGV4U2NhbiBpbmRleGFtX3V0aWxfYmF0Y2hfYWxs b2MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGluZGV4YW1fdXRpbF9iYXRjaF9y ZWxlYXNlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gYmF0Y2gpOworCiAjZW5k aWYJCQkJCQkJLyogR0VOQU1fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2hl YXBhbS5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCmluZGV4IGNlNDhmYWM0Mi4uYTIz ZmQ5NDFlIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaGVhcGFtLmgKKysrIGIvc3Jj L2luY2x1ZGUvYWNjZXNzL2hlYXBhbS5oCkBAIC0xMTcsNyArMTE3LDEwIEBAIHR5cGVkZWYgc3Ry dWN0IEluZGV4RmV0Y2hIZWFwRGF0YQogCUluZGV4RmV0Y2hUYWJsZURhdGEgeHNfYmFzZTsJLyog QU0gaW5kZXBlbmRlbnQgcGFydCBvZiB0aGUgZGVzY3JpcHRvciAqLwogCiAJQnVmZmVyCQl4c19j YnVmOwkJLyogY3VycmVudCBoZWFwIGJ1ZmZlciBpbiBzY2FuLCBpZiBhbnkgKi8KKwlCbG9ja051 bWJlciB4c19ibGs7CQkJLyogeHNfY2J1ZidzIGJsb2NrIG51bWJlciwgaWYgYW55ICovCiAJLyog TkI6IGlmIHhzX2NidWYgaXMgbm90IEludmFsaWRCdWZmZXIsIHdlIGhvbGQgYSBwaW4gb24gdGhh dCBidWZmZXIgKi8KKworCUJ1ZmZlcgkJdm1idWY7CQkJLyogdmlzaWJpbGl0eSBtYXAgYnVmZmVy ICovCiB9IEluZGV4RmV0Y2hIZWFwRGF0YTsKIAogLyogUmVzdWx0IGNvZGVzIGZvciBIZWFwVHVw bGVTYXRpc2ZpZXNWYWN1dW0gKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRy ZWUuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9uYnRyZWUuaAppbmRleCA3NzIyNDg1OTYuLjJjYzMw NmQwOSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL25idHJlZS5oCisrKyBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9uYnRyZWUuaApAQCAtOTI0LDExMiArOTI0LDYgQEAgdHlwZWRlZiBzdHJ1 Y3QgQlRWYWN1dW1Qb3N0aW5nRGF0YQogCiB0eXBlZGVmIEJUVmFjdXVtUG9zdGluZ0RhdGEgKkJU VmFjdXVtUG9zdGluZzsKIAotLyoKLSAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXBy aXZhdGUgc3RhdGUgbmVlZGVkIGZvciBhbiBpbmRleHNjYW4uCi0gKiBUaGlzIGNvbnNpc3RzIG9m IHByZXByb2Nlc3NlZCBzY2FuIGtleXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCi0g KiBkZXRhaWxzIG9mIHRoZSBwcmVwcm9jZXNzaW5nKSwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIGN1 cnJlbnQgbG9jYXRpb24KLSAqIG9mIHRoZSBzY2FuLCBhbmQgaW5mb3JtYXRpb24gYWJvdXQgdGhl IG1hcmtlZCBsb2NhdGlvbiwgaWYgYW55LiAgKFdlIHVzZQotICogQlRTY2FuUG9zRGF0YSB0byBy ZXByZXNlbnQgdGhlIGRhdGEgbmVlZGVkIGZvciBlYWNoIG9mIGN1cnJlbnQgYW5kIG1hcmtlZAot ICogbG9jYXRpb25zLikJSW4gYWRkaXRpb24gd2UgY2FuIHJlbWVtYmVyIHNvbWUga25vd24ta2ls bGVkIGluZGV4IGVudHJpZXMKLSAqIHRoYXQgbXVzdCBiZSBtYXJrZWQgYmVmb3JlIHdlIGNhbiBt b3ZlIG9mZiB0aGUgY3VycmVudCBwYWdlLgotICoKLSAqIEluZGV4IHNjYW5zIHdvcmsgYSBwYWdl IGF0IGEgdGltZTogd2UgcGluIGFuZCByZWFkLWxvY2sgdGhlIHBhZ2UsIGlkZW50aWZ5Ci0gKiBh bGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlIGFuZCBzYXZlIHRoZW0gaW4gQlRTY2Fu UG9zRGF0YSwgdGhlbgotICogcmVsZWFzZSB0aGUgcmVhZC1sb2NrIHdoaWxlIHJldHVybmluZyB0 aGUgaXRlbXMgdG8gdGhlIGNhbGxlciBmb3IKLSAqIHByb2Nlc3NpbmcuICBUaGlzIGFwcHJvYWNo IG1pbmltaXplcyBsb2NrL3VubG9jayB0cmFmZmljLiAgV2UgbXVzdCBhbHdheXMKLSAqIGRyb3Ag dGhlIGxvY2sgdG8gbWFrZSBpdCBva2F5IGZvciBjYWxsZXIgdG8gcHJvY2VzcyB0aGUgcmV0dXJu ZWQgaXRlbXMuCi0gKiBXaGV0aGVyIG9yIG5vdCB3ZSBjYW4gYWxzbyByZWxlYXNlIHRoZSBwaW4g ZHVyaW5nIHRoaXMgd2luZG93IHdpbGwgdmFyeS4KLSAqIFdlIGRyb3AgdGhlIHBpbiAod2hlbiBz by0+ZHJvcFBpbikgdG8gYXZvaWQgYmxvY2tpbmcgcHJvZ3Jlc3MgYnkgVkFDVVVNCi0gKiAoc2Vl IG5idHJlZS9SRUFETUUgc2VjdGlvbiBhYm91dCBtYWtpbmcgY29uY3VycmVudCBUSUQgcmVjeWNs aW5nIHNhZmUpLgotICogV2UnbGwgYWx3YXlzIHJlbGVhc2UgYm90aCB0aGUgbG9jayBhbmQgdGhl IHBpbiBvbiB0aGUgY3VycmVudCBwYWdlIGJlZm9yZQotICogbW92aW5nIG9uIHRvIGl0cyBzaWJs aW5nIHBhZ2UuCi0gKgotICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nhbiwgd2Ug c2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gKLSAqIG1hdGNoZWQgaXRlbSwgb3Ro ZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQuICBUaGUgSW5kZXhUdXBsZXMgZ28K LSAqIGludG8gYSBzZXBhcmF0ZSB3b3Jrc3BhY2UgYXJyYXk7IGVhY2ggQlRTY2FuUG9zSXRlbSBz dG9yZXMgaXRzIHR1cGxlJ3MKLSAqIG9mZnNldCB3aXRoaW4gdGhhdCBhcnJheS4gIFBvc3Rpbmcg bGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKLSAqIGFsbG93aW5nIHRoZSBz YW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdAot ICogdHVwbGUuCi0gKi8KLQotdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuUG9zSXRlbQkvKiB3aGF0IHdl IHJlbWVtYmVyIGFib3V0IGVhY2ggbWF0Y2ggKi8KLXsKLQlJdGVtUG9pbnRlckRhdGEgaGVhcFRp ZDsJLyogVElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCi0JT2Zmc2V0TnVtYmVyIGluZGV4 T2Zmc2V0OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KLQlMb2NhdGlv bkluZGV4IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwg aWYgYW55ICovCi19IEJUU2NhblBvc0l0ZW07Ci0KLXR5cGVkZWYgc3RydWN0IEJUU2NhblBvc0Rh dGEKLXsKLQlCdWZmZXIJCWJ1ZjsJCQkvKiBjdXJyUGFnZSBidWYgKGludmFsaWQgbWVhbnMgdW5w aW5uZWQpICovCi0KLQkvKiBwYWdlIGRldGFpbHMgYXMgb2YgdGhlIHNhdmVkIHBvc2l0aW9uJ3Mg Y2FsbCB0byBfYnRfcmVhZHBhZ2UgKi8KLQlCbG9ja051bWJlciBjdXJyUGFnZTsJCS8qIHBhZ2Ug cmVmZXJlbmNlZCBieSBpdGVtcyBhcnJheSAqLwotCUJsb2NrTnVtYmVyIHByZXZQYWdlOwkJLyog Y3VyclBhZ2UncyBsZWZ0IGxpbmsgKi8KLQlCbG9ja051bWJlciBuZXh0UGFnZTsJCS8qIGN1cnJQ YWdlJ3MgcmlnaHQgbGluayAqLwotCVhMb2dSZWNQdHIJbHNuOwkJCS8qIGN1cnJQYWdlJ3MgTFNO ICh3aGVuIHNvLT5kcm9wUGluKSAqLwotCi0JLyogc2NhbiBkaXJlY3Rpb24gZm9yIHRoZSBzYXZl ZCBwb3NpdGlvbidzIGNhbGwgdG8gX2J0X3JlYWRwYWdlICovCi0JU2NhbkRpcmVjdGlvbiBkaXI7 Ci0KLQkvKgotCSAqIElmIHdlIGFyZSBkb2luZyBhbiBpbmRleC1vbmx5IHNjYW4sIG5leHRUdXBs ZU9mZnNldCBpcyB0aGUgZmlyc3QgZnJlZQotCSAqIGxvY2F0aW9uIGluIHRoZSBhc3NvY2lhdGVk IHR1cGxlIHN0b3JhZ2Ugd29ya3NwYWNlLgotCSAqLwotCWludAkJCW5leHRUdXBsZU9mZnNldDsK LQotCS8qCi0JICogbW9yZUxlZnQgYW5kIG1vcmVSaWdodCB0cmFjayB3aGV0aGVyIHdlIHRoaW5r IHRoZXJlIG1heSBiZSBtYXRjaGluZwotCSAqIGluZGV4IGVudHJpZXMgdG8gdGhlIGxlZnQgYW5k IHJpZ2h0IG9mIHRoZSBjdXJyZW50IHBhZ2UsIHJlc3BlY3RpdmVseS4KLQkgKi8KLQlib29sCQlt b3JlTGVmdDsKLQlib29sCQltb3JlUmlnaHQ7Ci0KLQkvKgotCSAqIFRoZSBpdGVtcyBhcnJheSBp cyBhbHdheXMgb3JkZXJlZCBpbiBpbmRleCBvcmRlciAoaWUsIGluY3JlYXNpbmcKLQkgKiBpbmRl eG9mZnNldCkuICBXaGVuIHNjYW5uaW5nIGJhY2t3YXJkcyBpdCBpcyBjb252ZW5pZW50IHRvIGZp bGwgdGhlCi0JICogYXJyYXkgYmFjay10by1mcm9udCwgc28gd2Ugc3RhcnQgYXQgdGhlIGxhc3Qg c2xvdCBhbmQgZmlsbCBkb3dud2FyZHMuCi0JICogSGVuY2Ugd2UgbmVlZCBib3RoIGEgZmlyc3Qt dmFsaWQtZW50cnkgYW5kIGEgbGFzdC12YWxpZC1lbnRyeSBjb3VudGVyLgotCSAqIGl0ZW1JbmRl eCBpcyBhIGN1cnNvciBzaG93aW5nIHdoaWNoIGVudHJ5IHdhcyBsYXN0IHJldHVybmVkIHRvIGNh bGxlci4KLQkgKi8KLQlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJzdCB2YWxpZCBpbmRleCBpbiBp dGVtc1tdICovCi0JaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZhbGlkIGluZGV4IGluIGl0ZW1z W10gKi8KLQlpbnQJCQlpdGVtSW5kZXg7CQkvKiBjdXJyZW50IGluZGV4IGluIGl0ZW1zW10gKi8K LQotCUJUU2NhblBvc0l0ZW0gaXRlbXNbTWF4VElEc1BlckJUcmVlUGFnZV07CS8qIE1VU1QgQkUg TEFTVCAqLwotfSBCVFNjYW5Qb3NEYXRhOwotCi10eXBlZGVmIEJUU2NhblBvc0RhdGEgKkJUU2Nh blBvczsKLQotI2RlZmluZSBCVFNjYW5Qb3NJc1Bpbm5lZChzY2FucG9zKSBcCi0oIFwKLQlBc3Nl cnRNYWNybyhCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdlKSB8fCBcCi0JCQkJ IUJ1ZmZlcklzVmFsaWQoKHNjYW5wb3MpLmJ1ZikpLCBcCi0JQnVmZmVySXNWYWxpZCgoc2NhbnBv cykuYnVmKSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc1VucGluKHNjYW5wb3MpIFwKLQlkbyB7IFwK LQkJUmVsZWFzZUJ1ZmZlcigoc2NhbnBvcykuYnVmKTsgXAotCQkoc2NhbnBvcykuYnVmID0gSW52 YWxpZEJ1ZmZlcjsgXAotCX0gd2hpbGUgKDApCi0jZGVmaW5lIEJUU2NhblBvc1VucGluSWZQaW5u ZWQoc2NhbnBvcykgXAotCWRvIHsgXAotCQlpZiAoQlRTY2FuUG9zSXNQaW5uZWQoc2NhbnBvcykp IFwKLQkJCUJUU2NhblBvc1VucGluKHNjYW5wb3MpOyBcCi0JfSB3aGlsZSAoMCkKLQotI2RlZmlu ZSBCVFNjYW5Qb3NJc1ZhbGlkKHNjYW5wb3MpIFwKLSggXAotCUFzc2VydE1hY3JvKEJsb2NrTnVt YmVySXNWYWxpZCgoc2NhbnBvcykuY3VyclBhZ2UpIHx8IFwKLQkJCQkhQnVmZmVySXNWYWxpZCgo c2NhbnBvcykuYnVmKSksIFwKLQlCbG9ja051bWJlcklzVmFsaWQoKHNjYW5wb3MpLmN1cnJQYWdl KSBcCi0pCi0jZGVmaW5lIEJUU2NhblBvc0ludmFsaWRhdGUoc2NhbnBvcykgXAotCWRvIHsgXAot CQkoc2NhbnBvcykuYnVmID0gSW52YWxpZEJ1ZmZlcjsgXAotCQkoc2NhbnBvcykuY3VyclBhZ2Ug PSBJbnZhbGlkQmxvY2tOdW1iZXI7IFwKLQl9IHdoaWxlICgwKQotCiAvKiBXZSBuZWVkIG9uZSBv ZiB0aGVzZSBmb3IgZWFjaCBlcXVhbGl0eS10eXBlIFNLX1NFQVJDSEFSUkFZIHNjYW4ga2V5ICov CiB0eXBlZGVmIHN0cnVjdCBCVEFycmF5S2V5SW5mbwogewpAQCAtMTA1MCw2ICs5NDQsMzAgQEAg dHlwZWRlZiBzdHJ1Y3QgQlRBcnJheUtleUluZm8KIAlTY2FuS2V5CQloaWdoX2NvbXBhcmU7CS8q IGFycmF5J3MgPCBvciA8PSB1cHBlciBib3VuZCAqLwogfSBCVEFycmF5S2V5SW5mbzsKIAorLyoK KyAqIEJUU2Nhbk9wYXF1ZURhdGEgaXMgdGhlIGJ0cmVlLXByaXZhdGUgc3RhdGUgbmVlZGVkIGZv ciBhbiBpbmRleHNjYW4uCisgKiBUaGlzIGNvbnNpc3RzIG9mIHByZXByb2Nlc3NlZCBzY2FuIGtl eXMgKHNlZSBfYnRfcHJlcHJvY2Vzc19rZXlzKCkgZm9yCisgKiBkZXRhaWxzIG9mIHRoZSBwcmVw cm9jZXNzaW5nKSwgYW5kIGluZm9ybWF0aW9uIGFib3V0IHRoZSBjdXJyZW50IGFycmF5CisgKiBr ZXlzLiAgVGhlcmUgYXJlIGFzc3VtcHRpb25zIGFib3V0IGhvdyB0aGUgY3VycmVudCBhcnJheSBr ZXlzIHRyYWNrIHRoZQorICogcHJvZ3Jlc3Mgb2YgdGhlIGluZGV4IHNjYW4gdGhyb3VnaCB0aGUg aW5kZXgncyBrZXkgc3BhY2UgKHNlZSBfYnRfcmVhZHBhZ2UKKyAqIGFuZCBfYnRfYWR2YW5jZV9h cnJheV9rZXlzKSwgYnV0IHdlIGRvbid0IGFjdHVhbGx5IHRyYWNrIGFueXRoaW5nIGFib3V0IHRo ZQorICogY3VycmVudCBzY2FuIHBvc2l0aW9uIGluIHRoaXMgb3BhcXVlIHN0cnVjdC4gIFRoYXQg aXMgdHJhY2tlZCBleHRlcm5hbGx5LAorICogYnkgaW1wbGVtZW50aW5nIGEgcXVldWUgb2YgImJh dGNoZXMiLCB3aGVyZSBlYWNoIGJhdGNoIHJlcHJlc2VudHMgdGhlIGl0ZW1zCisgKiByZXR1cm5l ZCBieSBidGdldGJhdGNoIHdpdGhpbiBhIHNpbmdsZSBsZWFmIHBhZ2UuCisgKgorICogSW5kZXgg c2NhbnMgd29yayBhIHBhZ2UgYXQgYSB0aW1lLCBhcyByZXF1aXJlZCBieSB0aGUgYW1nZXRiYXRj aCBjb250cmFjdDoKKyAqIHdlIHBpbiBhbmQgcmVhZC1sb2NrIHRoZSBwYWdlLCBpZGVudGlmeSBh bGwgdGhlIG1hdGNoaW5nIGl0ZW1zIG9uIHRoZSBwYWdlCisgKiBhbmQgcmV0dXJuIHRoZW0gaW4g YSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2guICBXZSB0aGVuIHJlbGVhc2UgdGhlIHJlYWQtbG9jawor ICogdXNpbmcgYW1nZXRiYXRjaCB1dGlsaXR5IHJvdXRpbmVzLiAgVGhpcyBhcHByb2FjaCBtaW5p bWl6ZXMgbG9jay91bmxvY2sKKyAqIHRyYWZmaWMuIF9idF9uZXh0IGlzIHBhc3NlZCBwcmlvcmJh dGNoLCB3aGljaCBjb250YWlucyBkZXRhaWxzIG9mIHdoaWNoCisgKiBwYWdlIGlzIG5leHQgaW4g bGluZSB0byBiZSByZWFkIChwcmlvcmJhdGNoIGlzIHByb3ZpZGVkIGFzIGFuIGFyZ3VtZW50IHRv CisgKiBidGdldGJhdGNoIGJ5IGNvcmUgY29kZSkuCisgKgorICogSWYgd2UgYXJlIGRvaW5nIGFu IGluZGV4LW9ubHkgc2Nhbiwgd2Ugc2F2ZSB0aGUgZW50aXJlIEluZGV4VHVwbGUgZm9yIGVhY2gK KyAqIG1hdGNoZWQgaXRlbSwgb3RoZXJ3aXNlIG9ubHkgaXRzIGhlYXAgVElEIGFuZCBvZmZzZXQu ICBUaGlzIGlzIGFsc28gcGVyIHRoZQorICogYW1nZXRiYXRjaCBjb250cmFjdC4gIFBvc3Rpbmcg bGlzdCB0dXBsZXMgc3RvcmUgYSAiYmFzZSIgdHVwbGUgb25jZSwKKyAqIGFsbG93aW5nIHRoZSBz YW1lIGtleSB0byBiZSByZXR1cm5lZCBmb3IgZWFjaCBUSUQgaW4gdGhlIHBvc3RpbmcgbGlzdC4K KyAqLwogdHlwZWRlZiBzdHJ1Y3QgQlRTY2FuT3BhcXVlRGF0YQogewogCS8qIHRoZXNlIGZpZWxk cyBhcmUgc2V0IGJ5IF9idF9wcmVwcm9jZXNzX2tleXMoKTogKi8KQEAgLTEwNjYsMzIgKzk4NCw2 IEBAIHR5cGVkZWYgc3RydWN0IEJUU2Nhbk9wYXF1ZURhdGEKIAlCVEFycmF5S2V5SW5mbyAqYXJy YXlLZXlzOwkvKiBpbmZvIGFib3V0IGVhY2ggZXF1YWxpdHktdHlwZSBhcnJheSBrZXkgKi8KIAlG bWdySW5mbyAgICpvcmRlclByb2NzOwkJLyogT1JERVIgcHJvY3MgZm9yIHJlcXVpcmVkIGVxdWFs aXR5IGtleXMgKi8KIAlNZW1vcnlDb250ZXh0IGFycmF5Q29udGV4dDsgLyogc2Nhbi1saWZlc3Bh biBjb250ZXh0IGZvciBhcnJheSBkYXRhICovCi0KLQkvKiBpbmZvIGFib3V0IGtpbGxlZCBpdGVt cyBpZiBhbnkgKGtpbGxlZEl0ZW1zIGlzIE5VTEwgaWYgbmV2ZXIgdXNlZCkgKi8KLQlpbnQJCSAg ICpraWxsZWRJdGVtczsJLyogY3VyclBvcy5pdGVtcyBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAq LwotCWludAkJCW51bUtpbGxlZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1z ICovCi0JYm9vbAkJZHJvcFBpbjsJCS8qIGRyb3AgbGVhZiBwaW4gYmVmb3JlIGJ0Z2V0dHVwbGUg cmV0dXJucz8gKi8KLQotCS8qCi0JICogSWYgd2UgYXJlIGRvaW5nIGFuIGluZGV4LW9ubHkgc2Nh biwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCi0JICogd29ya3NwYWNlcyBmb3IgdGhlIGN1 cnJQb3MgYW5kIG1hcmtQb3MgcmVzcGVjdGl2ZWx5LiAgRWFjaCBpcyBvZiBzaXplCi0JICogQkxD S1NaLCBzbyBpdCBjYW4gaG9sZCBhcyBtdWNoIGFzIGEgZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVw bGVzLgotCSAqLwotCWNoYXIJICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBj dXJyUG9zICovCi0JY2hhcgkgICAqbWFya1R1cGxlczsJCS8qIHR1cGxlIHN0b3JhZ2UgZm9yIG1h cmtQb3MgKi8KLQotCS8qCi0JICogSWYgdGhlIG1hcmtlZCBwb3NpdGlvbiBpcyBvbiB0aGUgc2Ft ZSBwYWdlIGFzIGN1cnJlbnQgcG9zaXRpb24sIHdlCi0JICogZG9uJ3QgdXNlIG1hcmtQb3MsIGJ1 dCBqdXN0IGtlZXAgdGhlIG1hcmtlZCBpdGVtSW5kZXggaW4gbWFya0l0ZW1JbmRleAotCSAqIChh bGwgdGhlIHJlc3Qgb2YgY3VyclBvcyBpcyB2YWxpZCBmb3IgdGhlIG1hcmsgcG9zaXRpb24pLiBI ZW5jZSwgdG8KLQkgKiBkZXRlcm1pbmUgaWYgdGhlcmUgaXMgYSBtYXJrLCBmaXJzdCBsb29rIGF0 IG1hcmtJdGVtSW5kZXgsIHRoZW4gYXQKLQkgKiBtYXJrUG9zLgotCSAqLwotCWludAkJCW1hcmtJ dGVtSW5kZXg7CS8qIGl0ZW1JbmRleCwgb3IgLTEgaWYgbm90IHZhbGlkICovCi0KLQkvKiBrZWVw IHRoZXNlIGxhc3QgaW4gc3RydWN0IGZvciBlZmZpY2llbmN5ICovCi0JQlRTY2FuUG9zRGF0YSBj dXJyUG9zOwkJLyogY3VycmVudCBwb3NpdGlvbiBkYXRhICovCi0JQlRTY2FuUG9zRGF0YSBtYXJr UG9zOwkJLyogbWFya2VkIHBvc2l0aW9uLCBpZiBhbnkgKi8KIH0gQlRTY2FuT3BhcXVlRGF0YTsK IAogdHlwZWRlZiBCVFNjYW5PcGFxdWVEYXRhICpCVFNjYW5PcGFxdWU7CkBAIC0xMTYwLDE0ICsx MDUyLDE2IEBAIGV4dGVybiBib29sIGJ0aW5zZXJ0KFJlbGF0aW9uIHJlbCwgRGF0dW0gKnZhbHVl cywgYm9vbCAqaXNudWxsLAogZXh0ZXJuIEluZGV4U2NhbkRlc2MgYnRiZWdpbnNjYW4oUmVsYXRp b24gcmVsLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpOwogZXh0ZXJuIFNpemUgYnRlc3RpbWF0 ZXBhcmFsbGVsc2NhbihSZWxhdGlvbiByZWwsIGludCBua2V5cywgaW50IG5vcmRlcmJ5cyk7CiBl eHRlcm4gdm9pZCBidGluaXRwYXJhbGxlbHNjYW4odm9pZCAqdGFyZ2V0KTsKLWV4dGVybiBib29s IGJ0Z2V0dHVwbGUoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7CitleHRl cm4gQmF0Y2hJbmRleFNjYW4gYnRnZXRiYXRjaChJbmRleFNjYW5EZXNjIHNjYW4sCisJCQkJCQkJ CSBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoLAorCQkJCQkJCQkgU2NhbkRpcmVjdGlvbiBkaXIp OwogZXh0ZXJuIGludDY0IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFw ICp0Ym0pOwogZXh0ZXJuIHZvaWQgYnRyZXNjYW4oSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuS2V5 IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiAJCQkJCSBTY2FuS2V5IG9yZGVyYnlzLCBpbnQgbm9y ZGVyYnlzKTsKK2V4dGVybiB2b2lkIGJ0ZnJlZWJhdGNoKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmF0 Y2hJbmRleFNjYW4gYmF0Y2gpOwogZXh0ZXJuIHZvaWQgYnRwYXJhbGxlbHJlc2NhbihJbmRleFNj YW5EZXNjIHNjYW4pOwogZXh0ZXJuIHZvaWQgYnRlbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2Nhbik7 Ci1leHRlcm4gdm9pZCBidG1hcmtwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLWV4dGVybiB2b2lk IGJ0cmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIGJ0cG9zcmVzZXQo SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpOwogZXh0ZXJuIElu ZGV4QnVsa0RlbGV0ZVJlc3VsdCAqYnRidWxrZGVsZXRlKEluZGV4VmFjdXVtSW5mbyAqaW5mbywK IAkJCQkJCQkJCQkgICBJbmRleEJ1bGtEZWxldGVSZXN1bHQgKnN0YXRzLAogCQkJCQkJCQkJCSAg IEluZGV4QnVsa0RlbGV0ZUNhbGxiYWNrIGNhbGxiYWNrLApAQCAtMTI3MSw4ICsxMTY1LDkgQEAg ZXh0ZXJuIHZvaWQgX2J0X3ByZXByb2Nlc3Nfa2V5cyhJbmRleFNjYW5EZXNjIHNjYW4pOwogLyoK ICAqIHByb3RvdHlwZXMgZm9yIGZ1bmN0aW9ucyBpbiBuYnRyZWFkcGFnZS5jCiAgKi8KLWV4dGVy biBib29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIGJvb2wgZmlyc3RwYWdlKTsKK2V4dGVybiBi b29sIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIG5ld2Jh dGNoLAorCQkJCQkJIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJ CQkJIGJvb2wgZmlyc3RwYWdlKTsKIGV4dGVybiB2b2lkIF9idF9zdGFydF9hcnJheV9rZXlzKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwogZXh0ZXJuIGludAlfYnRfYmlu c3JjaF9hcnJheV9za2V5KEZtZ3JJbmZvICpvcmRlcnByb2MsCiAJCQkJCQkJCSAgIGJvb2wgY3Vy X2VsZW1fdHJpZywgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMjg3LDggKzExODIsOSBAQCBleHRl cm4gQlRTdGFjayBfYnRfc2VhcmNoKFJlbGF0aW9uIHJlbCwgUmVsYXRpb24gaGVhcHJlbCwgQlRT Y2FuSW5zZXJ0IGtleSwKIAkJCQkJCSAgQnVmZmVyICpidWZQLCBpbnQgYWNjZXNzKTsKIGV4dGVy biBPZmZzZXROdW1iZXIgX2J0X2JpbnNyY2hfaW5zZXJ0KFJlbGF0aW9uIHJlbCwgQlRJbnNlcnRT dGF0ZSBpbnNlcnRzdGF0ZSk7CiBleHRlcm4gaW50MzIgX2J0X2NvbXBhcmUoUmVsYXRpb24gcmVs LCBCVFNjYW5JbnNlcnQga2V5LCBQYWdlIHBhZ2UsIE9mZnNldE51bWJlciBvZmZudW0pOwotZXh0 ZXJuIGJvb2wgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIp OwotZXh0ZXJuIGJvb2wgX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9u IGRpcik7CitleHRlcm4gQmF0Y2hJbmRleFNjYW4gX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpOworZXh0ZXJuIEJhdGNoSW5kZXhTY2FuIF9idF9uZXh0KElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkJCQkJICAgQmF0Y2hJbmRl eFNjYW4gcHJpb3JiYXRjaCk7CiBleHRlcm4gQnVmZmVyIF9idF9nZXRfZW5kcG9pbnQoUmVsYXRp b24gcmVsLCB1aW50MzIgbGV2ZWwsIGJvb2wgcmlnaHRtb3N0KTsKIAogLyoKQEAgLTEyOTYsNyAr MTE5Miw3IEBAIGV4dGVybiBCdWZmZXIgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVp bnQzMiBsZXZlbCwgYm9vbCByaWdodG1vc3QpOwogICovCiBleHRlcm4gQlRTY2FuSW5zZXJ0IF9i dF9ta3NjYW5rZXkoUmVsYXRpb24gcmVsLCBJbmRleFR1cGxlIGl0dXApOwogZXh0ZXJuIHZvaWQg X2J0X2ZyZWVzdGFjayhCVFN0YWNrIHN0YWNrKTsKLWV4dGVybiB2b2lkIF9idF9raWxsaXRlbXMo SW5kZXhTY2FuRGVzYyBzY2FuKTsKK2V4dGVybiB2b2lkIF9idF9raWxsaXRlbXMoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCk7CiBleHRlcm4gQlRDeWNsZUlkIF9idF92 YWN1dW1fY3ljbGVpZChSZWxhdGlvbiByZWwpOwogZXh0ZXJuIEJUQ3ljbGVJZCBfYnRfc3RhcnRf dmFjdXVtKFJlbGF0aW9uIHJlbCk7CiBleHRlcm4gdm9pZCBfYnRfZW5kX3ZhY3V1bShSZWxhdGlv biByZWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaCBiL3NyYy9p bmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKaW5kZXggOWIzNDJkNWJkLi5kNmEzNGMxOTMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9yZWxzY2FuLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL3JlbHNjYW4uaApAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSAiYWNjZXNzL2h0dXBf ZGV0YWlscy5oIgogI2luY2x1ZGUgImFjY2Vzcy9pdHVwLmgiCisjaW5jbHVkZSAiYWNjZXNzL3Nk aXIuaCIKICNpbmNsdWRlICJub2Rlcy90aWRiaXRtYXAuaCIKICNpbmNsdWRlICJwb3J0L2F0b21p Y3MuaCIKICNpbmNsdWRlICJzdG9yYWdlL2J1Zi5oIgpAQCAtMTI1LDYgKzEyNiwxNzQgQEAgdHlw ZWRlZiBzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YQogCVJlbGF0aW9uCXJlbDsKIH0gSW5kZXhG ZXRjaFRhYmxlRGF0YTsKIAorLyoKKyAqIFF1ZXVlLXdpc2UgbG9jYXRpb24gb2YgYSBCYXRjaE1h dGNoaW5nSXRlbSB0aGF0IGFwcGVhcnMgaW4gYSBCYXRjaEluZGV4U2NhbgorICogcmV0dXJuZWQg YnkgKGFuZCBzdWJzZXF1ZW50bHkgcGFzc2VkIHRvKSBhbiBhbWdldGJhdGNoIHJvdXRpbmUKKyAq LwordHlwZWRlZiBzdHJ1Y3QgQmF0Y2hRdWV1ZUl0ZW1Qb3MKK3sKKwkvKiBCYXRjaFF1ZXVlLmJh dGNoZXNbXS13aXNlIGluZGV4IHRvIHJlbGV2YW50IEJhdGNoSW5kZXhTY2FuICovCisJaW50CQkJ YmF0Y2g7CisKKwkvKiBCYXRjaEluZGV4U2Nhbi5pdGVtc1tdLXdpc2UgaW5kZXggdG8gcmVsZXZh bnQgQmF0Y2hNYXRjaGluZ0l0ZW0gKi8KKwlpbnQJCQlpdGVtOworfSBCYXRjaFF1ZXVlSXRlbVBv czsKKworc3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9yZXNldF9wb3MoQmF0Y2hRdWV1ZUl0ZW1Q b3MgKnBvcykKK3sKKwlwb3MtPmJhdGNoID0gLTE7CisJcG9zLT5pdGVtID0gLTE7Cit9CisKKy8q CisgKiBNYXRjaGluZyBpdGVtIHJldHVybmVkIGJ5IGFtZ2V0YmF0Y2ggKGluIHJldHVybmVkIEJh dGNoSW5kZXhTY2FuKSBkdXJpbmcgYW4KKyAqIGluZGV4IHNjYW4uICBVc2VkIGJ5IHRhYmxlIEFN IHRvIGxvY2F0ZSByZWxldmFudCBtYXRjaGluZyB0YWJsZSB0dXBsZS4KKyAqLwordHlwZWRlZiBz dHJ1Y3QgQmF0Y2hNYXRjaGluZ0l0ZW0KK3sKKwlJdGVtUG9pbnRlckRhdGEgaGVhcFRpZDsJLyog VElEIG9mIHJlZmVyZW5jZWQgaGVhcCBpdGVtICovCisJT2Zmc2V0TnVtYmVyIGluZGV4T2Zmc2V0 OwkvKiBpbmRleCBpdGVtJ3MgbG9jYXRpb24gd2l0aGluIHBhZ2UgKi8KKwlMb2NhdGlvbkluZGV4 IHR1cGxlT2Zmc2V0OwkvKiBJbmRleFR1cGxlJ3Mgb2Zmc2V0IGluIHdvcmtzcGFjZSwgaWYgYW55 ICovCit9IEJhdGNoTWF0Y2hpbmdJdGVtOworCisvKgorICogRGF0YSBhYm91dCBvbmUgYmF0Y2gg b2YgaXRlbXMgcmV0dXJuZWQgYnkgKGFuZCBwYXNzZWQgdG8pIGFtZ2V0YmF0Y2ggZHVyaW5nCisg KiBpbmRleCBzY2FucworICovCit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEKK3sK KwkvKgorCSAqIEluZm9ybWF0aW9uIG91dHB1dCBieSBhbWdldGJhdGNoIGluZGV4IEFNcyB1cG9u IHJldHVybmluZyBhIGJhdGNoIHdpdGgKKwkgKiBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcywg ZGVzY3JpYmluZyBkZXRhaWxzIG9mIHRoZSBpbmRleCBwYWdlIHdoZXJlCisJICogbWF0Y2hlcyB3 ZXJlIGxvY2F0ZWQuCisJICoKKwkgKiBVc2VkIGluIHRoZSBuZXh0IGFtZ2V0YmF0Y2ggY2FsbCB0 byBkZXRlcm1pbmUgd2hpY2ggaW5kZXggcGFnZSB0byByZWFkCisJICogbmV4dCAob3IgdG8gZGV0 ZXJtaW5lIGlmIHRoZXJlJ3Mgbm8gZnVydGhlciBtYXRjaGVzIGluIGN1cnJlbnQgc2NhbgorCSAq IGRpcmVjdGlvbikuCisJICovCisJQmxvY2tOdW1iZXIgY3VyclBhZ2U7CQkvKiBJbmRleCBwYWdl IHdpdGggbWF0Y2hpbmcgaXRlbXMgKi8KKwlCbG9ja051bWJlciBwcmV2UGFnZTsJCS8qIGN1cnJQ YWdlJ3MgbGVmdCBsaW5rICovCisJQmxvY2tOdW1iZXIgbmV4dFBhZ2U7CQkvKiBjdXJyUGFnZSdz IHJpZ2h0IGxpbmsgKi8KKworCUJ1ZmZlcgkJYnVmOwkJCS8qIGN1cnJQYWdlIGJ1ZiAoaW52YWxp ZCBtZWFucyB1bnBpbm5lZCkgKi8KKwlYTG9nUmVjUHRyCWxzbjsJCQkvKiBjdXJyUGFnZSdzIExT TiAod2hlbiBkcm9wUGluKSAqLworCisJLyogc2NhbiBkaXJlY3Rpb24gd2hlbiB0aGUgaW5kZXgg cGFnZSB3YXMgcmVhZCAqLworCVNjYW5EaXJlY3Rpb24gZGlyOworCisJLyoKKwkgKiBtb3JlTGVm dCBhbmQgbW9yZVJpZ2h0IHRyYWNrIHdoZXRoZXIgd2UgdGhpbmsgdGhlcmUgbWF5IGJlIG1hdGNo aW5nCisJICogaW5kZXggZW50cmllcyB0byB0aGUgbGVmdCBhbmQgcmlnaHQgb2YgdGhlIGN1cnJl bnQgcGFnZSwgcmVzcGVjdGl2ZWx5CisJICovCisJYm9vbAkJbW9yZUxlZnQ7CisJYm9vbAkJbW9y ZVJpZ2h0OworCisJLyoKKwkgKiBUaGUgaXRlbXMgYXJyYXkgaXMgYWx3YXlzIG9yZGVyZWQgaW4g aW5kZXggb3JkZXIgKGllLCBpbmNyZWFzaW5nCisJICogaW5kZXhvZmZzZXQpLiAgV2hlbiBzY2Fu bmluZyBiYWNrd2FyZHMgaXQgaXMgY29udmVuaWVudCB0byBmaWxsIHRoZQorCSAqIGFycmF5IGJh Y2stdG8tZnJvbnQsIHNvIHdlIHN0YXJ0IGF0IHRoZSBsYXN0IHNsb3QgYW5kIGZpbGwgZG93bndh cmRzLgorCSAqIEhlbmNlIHdlIG5lZWQgYm90aCBhIGZpcnN0LXZhbGlkLWVudHJ5IGFuZCBhIGxh c3QtdmFsaWQtZW50cnkgY291bnRlci4KKwkgKi8KKwlpbnQJCQlmaXJzdEl0ZW07CQkvKiBmaXJz dCB2YWxpZCBpbmRleCBpbiBpdGVtc1tdICovCisJaW50CQkJbGFzdEl0ZW07CQkvKiBsYXN0IHZh bGlkIGluZGV4IGluIGl0ZW1zW10gKi8KKworCS8qIGluZm8gYWJvdXQga2lsbGVkIGl0ZW1zIGlm IGFueSAoa2lsbGVkSXRlbXMgaXMgTlVMTCBpZiBuZXZlciB1c2VkKSAqLworCWludAkJICAgKmtp bGxlZEl0ZW1zOwkvKiBpbmRleGVzIG9mIGtpbGxlZCBpdGVtcyAqLworCWludAkJCW51bUtpbGxl ZDsJCS8qIG51bWJlciBvZiBjdXJyZW50bHkgc3RvcmVkIGl0ZW1zICovCisKKwkvKgorCSAqIE1h dGNoaW5nIGl0ZW1zIHN0YXRlIGZvciB0aGlzIGJhdGNoLgorCSAqCisJICogSWYgd2UgYXJlIGRv aW5nIGFuIGluZGV4LW9ubHkgc2NhbiwgdGhlc2UgYXJlIHRoZSB0dXBsZSBzdG9yYWdlCisJICog d29ya3NwYWNlcyBmb3IgdGhlIG1hdGNoaW5nIHR1cGxlcyAodHVwbGVzIHJlZmVyZW5jZWQgYnkg aXRlbXNbXSkuIEVhY2gKKwkgKiBpcyBvZiBzaXplIEJMQ0tTWiwgc28gaXQgY2FuIGhvbGQgYXMg bXVjaCBhcyBhIGZ1bGwgcGFnZSdzIHdvcnRoIG9mCisJICogdHVwbGVzLgorCSAqLworCWNoYXIJ ICAgKmN1cnJUdXBsZXM7CQkvKiB0dXBsZSBzdG9yYWdlIGZvciBpdGVtc1tdICovCisJQmF0Y2hN YXRjaGluZ0l0ZW0gaXRlbXNbRkxFWElCTEVfQVJSQVlfTUVNQkVSXTsKK30gQmF0Y2hJbmRleFNj YW5EYXRhOworCit0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEgKkJhdGNoSW5kZXhT Y2FuOworCisvKgorICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdlcykgd2Ug Y2FuIGtlZXAgaW4gbWVtb3J5LiAgV2UgbmVlZCBhCisgKiBtaW5pbXVtIG9mIHR3bywgc2luY2Ug d2UnbGwgb25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhlcgorICog aXMgcmVhZC4KKyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTCQkyCisjZGVmaW5l IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwkyCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfQ09V TlQoc2NhbikgXAorCSgoc2NhbiktPmJhdGNocXVldWUtPm5leHRCYXRjaCAtIChzY2FuKS0+YmF0 Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCisvKiBEaWQgd2UgYWxyZWFkeSBsb2FkIGJhdGNoIHdpdGgg dGhlIHJlcXVlc3RlZCBpbmRleD8gKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9CQVRDSF9MT0FERUQo c2NhbiwgaWR4KSBcCisJKChpZHgpID49IDAgJiYgKGlkeCkgPCAoc2NhbiktPmJhdGNocXVldWUt Pm5leHRCYXRjaCkKKworLyogSGF2ZSB3ZSBsb2FkZWQgdGhlIG1heGltdW0gbnVtYmVyIG9mIGJh dGNoZXM/ICovCisjZGVmaW5lIElOREVYX1NDQU5fQkFUQ0hfRlVMTChzY2FuKSBcCisJKElOREVY X1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPT0gSU5ERVhfU0NBTl9NQVhfQkFUQ0hFUykKKworLyog UmV0dXJuIGJhdGNoIGZvciB0aGUgcHJvdmlkZWQgaW5kZXguICovCisjZGVmaW5lIElOREVYX1ND QU5fQkFUQ0goc2NhbiwgaWR4KQlcCisJCSgoc2NhbiktPmJhdGNocXVldWUtPmJhdGNoZXNbKGlk eCkgJSBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTXSkKKworLyogSXMgdGhlIHBvc2l0aW9uIGludmFs aWQvdW5kZWZpbmVkPyAqLworI2RlZmluZSBJTkRFWF9TQ0FOX1BPU19JTlZBTElEKHBvcykgXAor CQkoKChwb3MpLT5iYXRjaCA9PSAtMSkgJiYgKChwb3MpLT5pdGVtID09IC0xKSkKKworI2lmZGVm IElOREVYQU1fREVCVUcKKyNkZWZpbmUgREVCVUdfTE9HKC4uLikgZWxvZyhBbVJlZ3VsYXJCYWNr ZW5kUHJvY2VzcygpID8gTk9USUNFIDogREVCVUcyLCBfX1ZBX0FSR1NfXykKKyNlbHNlCisjZGVm aW5lIERFQlVHX0xPRyguLi4pCisjZW5kaWYKKworLyoKKyAqIFN0YXRlIHVzZWQgYnkgdGFibGUg QU1zIHRvIG1hbmFnZSBhbiBpbmRleCBzY2FuIHRoYXQgdXNlcyB0aGUgYW1nZXRiYXRjaAorICog aW50ZXJmYWNlLiAgU2NhbnMgd29yayB3aXRoIGEgcXVldWUgb2YgYmF0Y2hlcyByZXR1cm5lZCBi eSBhbWdldGJhdGNoLgorICoKKyAqIEJhdGNoZXMgYXJlIGtlcHQgaW4gdGhlIG9yZGVyIHRoYXQg dGhleSB3ZXJlIHJldHVybmVkIGluIGJ5IGFtZ2V0YmF0Y2gsCisgKiBzaW5jZSB0aGF0IGlzIHRo ZSBzYW1lIG9yZGVyIHRoYXQgdGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90IHdpbGwgcmV0dXJuCisg KiBtYXRjaGVzIGluLiAgSG93ZXZlciwgdGFibGUgQU1zIGFyZSBmcmVlIHRvIGZldGNoIHRhYmxl IHR1cGxlcyBpbiB3aGF0ZXZlcgorICogb3JkZXIgaXMgbW9zdCBjb252ZW5pZW50L2VmZmljaWVu dCAtLSBwcm92aWRlZCB0aGF0IHN1Y2ggcmVvcmRlcmluZyBjYW5ub3QKKyAqIGFmZmVjdCB0aGUg b3JkZXIgdGhhdCB0YWJsZV9pbmRleF9nZXRuZXh0X3Nsb3QgbGF0ZXIgcmV0dXJucyB0dXBsZXMg aW4uCisgKgorICogVGhpcyBkYXRhIHN0cnVjdHVyZSBhbHNvIHByb3ZpZGVzIHRhYmxlIEFNcyB3 aXRoIGEgd2F5IHRvIHJlYWQgYWhlYWQgb2YgdGhlCisgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24g YnkgX211bHRpcGxlXyBiYXRjaGVzL2luZGV4IHBhZ2VzLiAgVGhlIGZ1cnRoZXIgb3V0CisgKiB0 aGUgdGFibGUgQU0gcmVhZHMgYWhlYWQgbGlrZSB0aGlzLCB0aGUgZnVydGhlciBpdCBjYW4gc2Vl IGludG8gdGhlIGZ1dHVyZS4KKyAqIFRoYXQgd2F5IHRoZSB0YWJsZSBBTSBpcyBhYmxlIHRvIHJl b3JkZXIgd29yayBhcyBhZ2dyZXNzaXZlbHkgYXMgZGVzaXJlZC4KKyAqIEZvciBleGFtcGxlLCBp bmRleCBzY2FucyBzb21ldGltZXMgbmVlZCB0byByZWFkYWhlYWQgYnkgYXMgbWFueSBhcyBhIGZl dworICogZG96ZW4gYW1nZXRiYXRjaCBiYXRjaGVzIGluIG9yZGVyIHRvIG1haW50YWluIGFuIG9w dGltYWwgSS9PIHByZWZldGNoCisgKiBkaXN0YW5jZSAoZGlzdGFuY2UgZm9yIHJlYWRpbmcgdGFi bGUgYmxvY2tzL2ZldGNoaW5nIHRhYmxlIHR1cGxlcykuCisgKi8KK3R5cGVkZWYgc3RydWN0IEJh dGNoUXVldWUKK3sKKwkvKiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJlbnRs eSBsb2FkZWQgYmF0Y2hlcyAqLworCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOworCisJLyogY3Vy cmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCisJQmF0Y2hRdWV1ZUl0ZW1Q b3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIG1hcmtQ b3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCisJQmF0Y2hJbmRleFNjYW4gbWFya0Jh dGNoOworCisJLyoKKwkgKiBBcnJheSBvZiBiYXRjaGVzIHJldHVybmVkIGJ5IHRoZSBBTS4gVGhl IGFycmF5IGhhcyBhIGNhcGFjaXR5IChidXQgY2FuCisJICogYmUgcmVzaXplZCBpZiBuZWVkZWQp LiBUaGUgaGVhZEJhdGNoIGlzIGFuIGluZGV4IG9mIHRoZSBiYXRjaCB3ZSdyZQorCSAqIGN1cnJl bnRseSByZWFkaW5nIGZyb20gKHRoaXMgbmVlZHMgdG8gYmUgdHJhbnNsYXRlZCBieSBtb2R1bG8K KwkgKiBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIGludG8gaW5kZXggaW4gdGhlIGJhdGNoZXMgYXJy YXkpLgorCSAqLworCWludAkJCWhlYWRCYXRjaDsJCS8qIGhlYWQgYmF0Y2ggc2xvdCAqLworCWlu dAkJCW5leHRCYXRjaDsJCS8qIG5leHQgZW1wdHkgYmF0Y2ggc2xvdCAqLworCisJLyogQXJyYXkg b2YgcG9pbnRlcnMgdG8gY2FjaGVkIHJlY3ljbGFibGUgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhT Y2FuIGNhY2hlW0lOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFU107CisKKwkvKiBBcnJheSBvZiBwb2lu dGVycyB0byBxdWV1ZWQgYmF0Y2hlcyAqLworCUJhdGNoSW5kZXhTY2FuIGJhdGNoZXNbSU5ERVhf U0NBTl9NQVhfQkFUQ0hFU107CisKK30gQmF0Y2hRdWV1ZTsKKwogc3RydWN0IEluZGV4U2Nhbklu c3RydW1lbnRhdGlvbjsKIAogLyoKQEAgLTE0Miw2ICszMTEsMTMgQEAgdHlwZWRlZiBzdHJ1Y3Qg SW5kZXhTY2FuRGVzY0RhdGEKIAlpbnQJCQludW1iZXJPZk9yZGVyQnlzOwkvKiBudW1iZXIgb2Yg b3JkZXJpbmcgb3BlcmF0b3JzICovCiAJc3RydWN0IFNjYW5LZXlEYXRhICprZXlEYXRhOwkvKiBh cnJheSBvZiBpbmRleCBxdWFsaWZpZXIgZGVzY3JpcHRvcnMgKi8KIAlzdHJ1Y3QgU2NhbktleURh dGEgKm9yZGVyQnlEYXRhOwkvKiBhcnJheSBvZiBvcmRlcmluZyBvcCBkZXNjcmlwdG9ycyAqLwor CisJLyogaW5kZXggYWNjZXNzIG1ldGhvZCdzIHByaXZhdGUgc3RhdGUgKi8KKwl2b2lkCSAgICpv cGFxdWU7CQkJLyogYWNjZXNzLW1ldGhvZC1zcGVjaWZpYyBpbmZvICovCisKKwkvKiB0YWJsZSBh Y2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBhbWdldGJhdGNoIHN0YXRlICovCisJQmF0Y2hRdWV1ZSAq YmF0Y2hxdWV1ZTsJCS8qIGFtZ2V0YmF0Y2ggcmVsYXRlZCBzdGF0ZSAqLworCiAJYm9vbAkJeHNf d2FudF9pdHVwOwkvKiBjYWxsZXIgcmVxdWVzdHMgaW5kZXggdHVwbGVzICovCiAJYm9vbAkJeHNf dGVtcF9zbmFwOwkvKiB1bnJlZ2lzdGVyIHNuYXBzaG90IGF0IHNjYW4gZW5kPyAqLwogCkBAIC0x NTAsOSArMzI2LDEzIEBAIHR5cGVkZWYgc3RydWN0IEluZGV4U2NhbkRlc2NEYXRhCiAJYm9vbAkJ aWdub3JlX2tpbGxlZF90dXBsZXM7CS8qIGRvIG5vdCByZXR1cm4ga2lsbGVkIGVudHJpZXMgKi8K IAlib29sCQl4YWN0U3RhcnRlZEluUmVjb3Zlcnk7CS8qIHByZXZlbnRzIGtpbGxpbmcvc2VlaW5n IGtpbGxlZAogCQkJCQkJCQkJCSAqIHR1cGxlcyAqLworCS8qIGFtZ2V0YmF0Y2ggY2FuIHNhZmVs eSBkcm9wIHBpbnMgb24gcmV0dXJuZWQgYmF0Y2gncyBpbmRleCBwYWdlPyAqLworCWJvb2wJCWRy b3BQaW47CiAKLQkvKiBpbmRleCBhY2Nlc3MgbWV0aG9kJ3MgcHJpdmF0ZSBzdGF0ZSAqLwotCXZv aWQJICAgKm9wYXF1ZTsJCQkvKiBhY2Nlc3MtbWV0aG9kLXNwZWNpZmljIGluZm8gKi8KKwkvKgor CSAqIERpZCB3ZSByZWFkIHRoZSBmaW5hbCBiYXRjaCBpbiB0aGlzIHNjYW4gZGlyZWN0aW9uPwor CSAqLworCWJvb2wJCWZpbmlzaGVkOwogCiAJLyoKIAkgKiBJbnN0cnVtZW50YXRpb24gY291bnRl cnMgbWFpbnRhaW5lZCBieSBhbGwgaW5kZXggQU1zIGR1cmluZyBib3RoCkBAIC0xNzcsNiArMzU3 LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhTY2FuRGVzY0RhdGEKIAlJbmRleEZldGNoVGFibGVE YXRhICp4c19oZWFwZmV0Y2g7CiAKIAlib29sCQl4c19yZWNoZWNrOwkJLyogVCBtZWFucyBzY2Fu IGtleXMgbXVzdCBiZSByZWNoZWNrZWQgKi8KKwl1aW50MTYJCW1heGl0ZW1zYmF0Y2g7CS8qIHNl dCBieSBhbWJlZ2luc2NhbiB3aGVuIGFtZ2V0YmF0Y2ggdXNlZCAqLwogCiAJLyoKIAkgKiBXaGVu IGZldGNoaW5nIHdpdGggYW4gb3JkZXJpbmcgb3BlcmF0b3IsIHRoZSB2YWx1ZXMgb2YgdGhlIE9S REVSIEJZCkBAIC0yMTYsNCArMzk3LDYxIEBAIHR5cGVkZWYgc3RydWN0IFN5c1NjYW5EZXNjRGF0 YQogCXN0cnVjdCBUdXBsZVRhYmxlU2xvdCAqc2xvdDsKIH0gU3lzU2NhbkRlc2NEYXRhOwogCisv KgorICogQ2hlY2sgdGhhdCBhIHBvc2l0aW9uIChiYXRjaCxpdGVtKSBpcyB2YWxpZCB3aXRoIHJl c3BlY3QgdG8gdGhlIGJhdGNoZXMgd2UKKyAqIGhhdmUgY3VycmVudGx5IGxvYWRlZC4KKyAqLwor c3RhdGljIGlubGluZSB2b2lkCitiYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKEluZGV4U2NhbkRlc2NE YXRhICpzY2FuLCBCYXRjaFF1ZXVlSXRlbVBvcyAqcG9zKQoreworI2lmZGVmIFVTRV9BU1NFUlRf Q0hFQ0tJTkcKKwlCYXRjaFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKwor CS8qIG1ha2Ugc3VyZSB0aGUgcG9zaXRpb24gaXMgdmFsaWQgZm9yIGN1cnJlbnRseSBsb2FkZWQg YmF0Y2hlcyAqLworCUFzc2VydChwb3MtPmJhdGNoID49IGJhdGNocXVldWUtPmhlYWRCYXRjaCk7 CisJQXNzZXJ0KHBvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5uZXh0QmF0Y2gpOworI2VuZGlmCit9 CisKKy8qCisgKiBDaGVjayBhIHNpbmdsZSBiYXRjaCBpcyB2YWxpZC4KKyAqLworc3RhdGljIGlu bGluZSB2b2lkCitiYXRjaF9hc3NlcnRfYmF0Y2hfdmFsaWQoSW5kZXhTY2FuRGVzY0RhdGEgKnNj YW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCS8qIGJhdGNoIG11c3QgaGF2ZSBvbmUgb3Ig bW9yZSBtYXRjaGluZyBpdGVtcyByZXR1cm5lZCBieSBpbmRleCBBTSAqLworCUFzc2VydChiYXRj aC0+Zmlyc3RJdGVtID49IDAgJiYgYmF0Y2gtPmZpcnN0SXRlbSA8PSBiYXRjaC0+bGFzdEl0ZW0p OworCUFzc2VydChiYXRjaC0+aXRlbXMgIT0gTlVMTCk7CisKKwkvKgorCSAqIFRoZSBudW1iZXIg b2Yga2lsbGVkIGl0ZW1zIG11c3QgYmUgdmFsaWQsIGFuZCB0aGVyZSBtdXN0IGJlIGFuIGFycmF5 IG9mCisJICogaW5kZXhlcyBpZiB0aGVyZSBhcmUgaXRlbXMuCisJICovCisJQXNzZXJ0KGJhdGNo LT5udW1LaWxsZWQgPj0gMCk7CisJQXNzZXJ0KCEoYmF0Y2gtPm51bUtpbGxlZCA+IDAgJiYgYmF0 Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkCitiYXRj aF9hc3NlcnRfYmF0Y2hlc192YWxpZChJbmRleFNjYW5EZXNjRGF0YSAgKnNjYW4pCit7CisjaWZk ZWYgVVNFX0FTU0VSVF9DSEVDS0lORworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5i YXRjaHF1ZXVlOworCisJLyogd2Ugc2hvdWxkIGhhdmUgYmF0Y2hlcyBpbml0aWFsaXplZCAqLwor CUFzc2VydChiYXRjaHF1ZXVlICE9IE5VTEwpOworCisJLyogVGhlIGhlYWQvbmV4dCBpbmRleGVz IHNob3VsZCBkZWZpbmUgYSB2YWxpZCByYW5nZSAqLworCUFzc2VydChiYXRjaHF1ZXVlLT5oZWFk QmF0Y2ggPj0gMCAmJgorCQkgICBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPD0gYmF0Y2hxdWV1ZS0+ bmV4dEJhdGNoKTsKKworCS8qIENoZWNrIGFsbCBjdXJyZW50IGJhdGNoZXMgKi8KKwlmb3IgKGlu dCBpID0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoOyBpIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBp KyspCisJeworCQlCYXRjaEluZGV4U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nhbiwg aSk7CisKKwkJYmF0Y2hfYXNzZXJ0X2JhdGNoX3ZhbGlkKHNjYW4sIGJhdGNoKTsKKwl9CisjZW5k aWYKK30KKwogI2VuZGlmCQkJCQkJCS8qIFJFTFNDQU5fSCAqLwpkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL3RhYmxlYW0uaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKaW5k ZXggZTJlYzUyODlkLi4zODQ2NTZjZTEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3RhYmxlYW0uaApAQCAtNDMzLDExICs0 MzMsMjkgQEAgdHlwZWRlZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkgKi8KIAl2b2lkCQkoKmlu ZGV4X2ZldGNoX2VuZCkgKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpkYXRhKTsKIAorCS8q CisJICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8gc2xvdCwg c2Nhbm5pbmcgaW4gdGhlCisJICogc3BlY2lmaWVkIGRpcmVjdGlvbiwgYW5kIHJldHVybiB0cnVl IGlmIGEgdHVwbGUgd2FzIGZvdW5kLCBmYWxzZQorCSAqIG90aGVyd2lzZS4KKwkgKgorCSAqIFRo aXMgY2FsbGJhY2sgYWxsb3dzIHRoZSB0YWJsZSBBTSB0byBkaXJlY3RseSBtYW5hZ2UgdGhlIHNj YW4gcHJvY2VzcywKKwkgKiBpbmNsdWRpbmcgaW50ZXJmYWNpbmcgd2l0aCB0aGUgaW5kZXggQU0u IFRoZSBjYWxsZXIgc2ltcGx5IHNwZWNpZmllcworCSAqIHRoZSBkaXJlY3Rpb24gb2YgdGhlIHNj YW47IHRoZSB0YWJsZSBBTSB0YWtlcyBjYXJlIG9mIHJldHJpZXZpbmcgVElEcworCSAqIGZyb20g dGhlIGluZGV4LCBwZXJmb3JtaW5nIHZpc2liaWxpdHkgY2hlY2tzLCBhbmQgcmV0dXJuaW5nIHR1 cGxlcyBpbgorCSAqIHRoZSBzbG90LgorCSAqLworCWJvb2wJCSgqaW5kZXhfZ2V0bmV4dF9zbG90 KSAoSW5kZXhTY2FuRGVzYyBzY2FuLAorCQkJCQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXJlY3Rp b24sCisJCQkJCQkJCQkgICBUdXBsZVRhYmxlU2xvdCAqc2xvdCk7CisKIAkvKgogCSAqIEZldGNo IHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRlciBkb2luZyBhIHZpc2liaWxpdHkgdGVz dAogCSAqIGFjY29yZGluZyB0byBgc25hcHNob3RgLiBJZiBhIHR1cGxlIHdhcyBmb3VuZCBhbmQg cGFzc2VkIHRoZSB2aXNpYmlsaXR5CiAJICogdGVzdCwgcmV0dXJuIHRydWUsIGZhbHNlIG90aGVy d2lzZS4KIAkgKgorCSAqIFRoaXMgaXMgYSBsb3dlci1sZXZlbCBjYWxsYmFjayB0aGF0IHRha2Vz IGEgVElEIGZyb20gdGhlIGNhbGxlci4KKwkgKiBDYWxsZXJzIHNob3VsZCBmYXZvciB0aGUgaW5k ZXhfZ2V0bmV4dF9zbG90IGNhbGxiYWNrIHdoZW5ldmVyIHBvc3NpYmxlLgorCSAqCiAJICogTm90 ZSB0aGF0IEFNcyB0aGF0IGRvIG5vdCBuZWNlc3NhcmlseSB1cGRhdGUgaW5kZXhlcyB3aGVuIGlu ZGV4ZWQKIAkgKiBjb2x1bW5zIGRvIG5vdCBjaGFuZ2UsIG5lZWQgdG8gcmV0dXJuIHRoZSBjdXJy ZW50L2NvcnJlY3QgdmVyc2lvbiBvZgogCSAqIHRoZSB0dXBsZSB0aGF0IGlzIHZpc2libGUgdG8g dGhlIHNuYXBzaG90LCBldmVuIGlmIHRoZSB0aWQgcG9pbnRzIHRvIGFuCkBAIC0xMTg4LDYgKzEy MDYsMjcgQEAgdGFibGVfaW5kZXhfZmV0Y2hfZW5kKHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRh ICpzY2FuKQogCXNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZmV0Y2hfZW5kKHNjYW4pOwog fQogCisvKgorICogRmV0Y2ggdGhlIG5leHQgdHVwbGUgZnJvbSBhbiBpbmRleCBzY2FuIGludG8g YHNsb3RgLCBzY2FubmluZyBpbiB0aGUKKyAqIHNwZWNpZmllZCBkaXJlY3Rpb24uIFJldHVybnMg dHJ1ZSBpZiBhIHR1cGxlIHdhcyBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLgorICoKKyAqIFRoZSBp bmRleCBzY2FuIHNob3VsZCBoYXZlIGJlZW4gc3RhcnRlZCB2aWEgdGFibGVfaW5kZXhfZmV0Y2hf YmVnaW4oKS4KKyAqIENhbGxlcnMgbXVzdCBjaGVjayBzY2FuLT54c19yZWNoZWNrIGFuZCByZWNo ZWNrIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4KKyAqCisgKiBJbmRleC1vbmx5IHNjYW4gY2FsbGVy cyAodGhhdCBwYXNzIHhzX3dhbnRfaXR1cD10cnVlIHRvIGluZGV4X2JlZ2luc2NhbikKKyAqIGNh biBjb25zdW1lIGluZGV4IHR1cGxlIHJlc3VsdHMgYnkgZXhhbWluaW5nIEluZGV4U2NhbkRlc2NE YXRhIGZpZWxkcyBzdWNoCisgKiBhcyB4c19pdHVwIGFuZCB4c19oaXR1cC4gIFRoZSB0YWJsZSBB TSB3b24ndCB1c3VhbGx5IGZldGNoIGEgaGVhcCB0dXBsZQorICogaW50byB0aGUgcHJvdmlkZWQg c2xvdCBpbiB0aGUgY2FzZSBvZiB4c193YW50X2l0dXA9dHJ1ZSBjYWxsZXJzLgorICovCitzdGF0 aWMgaW5saW5lIGJvb2wKK3RhYmxlX2luZGV4X2dldG5leHRfc2xvdChJbmRleFNjYW5EZXNjIGlk eHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLAorCQkJCQkJIFR1cGxlVGFibGVTbG90ICpz bG90KQoreworCXN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhICpzY2FuID0gaWR4c2Nhbi0+eHNf aGVhcGZldGNoOworCisJcmV0dXJuIHNjYW4tPnJlbC0+cmRfdGFibGVhbS0+aW5kZXhfZ2V0bmV4 dF9zbG90KGlkeHNjYW4sIGRpcmVjdGlvbiwgc2xvdCk7Cit9CisKIC8qCiAgKiBGZXRjaGVzLCBh cyBwYXJ0IG9mIGFuIGluZGV4IHNjYW4sIHR1cGxlIGF0IGB0aWRgIGludG8gYHNsb3RgLCBhZnRl ciBkb2luZwogICogYSB2aXNpYmlsaXR5IHRlc3QgYWNjb3JkaW5nIHRvIGBzbmFwc2hvdGAuIElm IGEgdHVwbGUgd2FzIGZvdW5kIGFuZCBwYXNzZWQKQEAgLTEyMTEsNiArMTI1MCw5IEBAIHRhYmxl X2luZGV4X2ZldGNoX2VuZChzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKICAqIGVu dHJ5IChsaWtlIGhlYXAncyBIT1QpLiBXaGVyZWFzIHRhYmxlX3R1cGxlX2ZldGNoX3Jvd192ZXJz aW9uKCkgb25seQogICogZXZhbHVhdGVzIHRoZSB0dXBsZSBleGFjdGx5IGF0IGB0aWRgLiBPdXRz aWRlIG9mIGluZGV4IGVudHJ5IC0+dGFibGUgdHVwbGUKICAqIGxvb2t1cHMsIHRhYmxlX3R1cGxl X2ZldGNoX3Jvd192ZXJzaW9uKCkgaXMgd2hhdCdzIHVzdWFsbHkgbmVlZGVkLgorICoKKyAqIFRo aXMgaXMgYSBsb3dlci1sZXZlbCBpbnRlcmZhY2UgdGhhdCB0YWtlcyBhIFRJRCBmcm9tIHRoZSBj YWxsZXIuICBDYWxsZXJzCisgKiBzaG91bGQgZmF2b3IgdGhlIHRhYmxlX2luZGV4X2dldG5leHRf c2xvdCBpbnRlcmZhY2Ugd2hlbmV2ZXIgcG9zc2libGUuCiAgKi8KIHN0YXRpYyBpbmxpbmUgYm9v bAogdGFibGVfaW5kZXhfZmV0Y2hfdHVwbGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNj YW4sCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaCBiL3NyYy9pbmNs dWRlL25vZGVzL2V4ZWNub2Rlcy5oCmluZGV4IDAyMjY1NDU2OS4uMWJiNjNhNzg3IDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9leGVjbm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaApAQCAtMTc1MSw3ICsxNzUxLDYgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhT Y2FuU3RhdGUKICAqCQlJbnN0cnVtZW50CQkgICBsb2NhbCBpbmRleCBzY2FuIGluc3RydW1lbnRh dGlvbgogICoJCVNoYXJlZEluZm8JCSAgIHBhcmFsbGVsIHdvcmtlciBpbnN0cnVtZW50YXRpb24g KG5vIGxlYWRlciBlbnRyeSkKICAqCQlUYWJsZVNsb3QJCSAgIHNsb3QgZm9yIGhvbGRpbmcgdHVw bGVzIGZldGNoZWQgZnJvbSB0aGUgdGFibGUKLSAqCQlWTUJ1ZmZlcgkJICAgYnVmZmVyIGluIHVz ZSBmb3IgdmlzaWJpbGl0eSBtYXAgdGVzdGluZywgaWYgYW55CiAgKgkJUHNjYW5MZW4JCSAgIHNp emUgb2YgcGFyYWxsZWwgaW5kZXgtb25seSBzY2FuIGRlc2NyaXB0b3IKICAqCQlOYW1lQ1N0cmlu Z0F0dE51bXMgYXR0bnVtcyBvZiBuYW1lIHR5cGVkIGNvbHVtbnMgdG8gcGFkIHRvIE5BTUVEQVRB TEVOCiAgKgkJTmFtZUNTdHJpbmdDb3VudCAgIG51bWJlciBvZiBlbGVtZW50cyBpbiB0aGUgTmFt ZUNTdHJpbmdBdHROdW1zIGFycmF5CkBAIC0xNzc0LDcgKzE3NzMsNiBAQCB0eXBlZGVmIHN0cnVj dCBJbmRleE9ubHlTY2FuU3RhdGUKIAlJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gaW9zc19JbnN0 cnVtZW50OwogCVNoYXJlZEluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqaW9zc19TaGFyZWRJbmZv OwogCVR1cGxlVGFibGVTbG90ICppb3NzX1RhYmxlU2xvdDsKLQlCdWZmZXIJCWlvc3NfVk1CdWZm ZXI7CiAJU2l6ZQkJaW9zc19Qc2NhbkxlbjsKIAlBdHRyTnVtYmVyICppb3NzX05hbWVDU3RyaW5n QXR0TnVtczsKIAlpbnQJCQlpb3NzX05hbWVDU3RyaW5nQ291bnQ7CmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5o CmluZGV4IDQ0OTg4NWI5My4uM2M4MTYwMmI0IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rl cy9wYXRobm9kZXMuaAorKysgYi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtMTM0 NCw3ICsxMzQ0LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgSW5kZXhPcHRJbmZvCiAJLyogZG9lcyBBTSBo YXZlIGFtZ2V0Yml0bWFwIGludGVyZmFjZT8gKi8KIAlib29sCQlhbWhhc2dldGJpdG1hcDsKIAli b29sCQlhbWNhbnBhcmFsbGVsOwotCS8qIGRvZXMgQU0gaGF2ZSBhbW1hcmtwb3MgaW50ZXJmYWNl PyAqLworCS8qIGlzIEFNIHByZXBhcmVkIGZvciB1cyB0byByZXN0b3JlIGEgbWFyaz8gKi8KIAli b29sCQlhbWNhbm1hcmtwb3M7CiAJLyogQU0ncyBjb3N0IGVzdGltYXRvciAqLwogCS8qIFJhdGhl ciB0aGFuIGluY2x1ZGUgYW1hcGkuaCBoZXJlLCB3ZSBkZWNsYXJlIGFtY29zdGVzdGltYXRlIGxp a2UgdGhpcyAqLwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jIGIv c3JjL2JhY2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCmluZGV4IDY4ODdlNDIxNC4uZDVkMDFiODc3 IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvYnJpbi9icmluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2JyaW4vYnJpbi5jCkBAIC0yOTQsMTAgKzI5NCwxMSBAQCBicmluaGFuZGxl cihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4gPSBicmluYmVnaW5zY2FuLAogCQku YW1yZXNjYW4gPSBicmlucmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJh dGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gYnJp bmdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGJyaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9zID0g TlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5h bWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5V TEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9naW4vZ2luZ2V0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbmdldC5jCmlu ZGV4IDZiMTQ4ZTY5YS4uOGY3MDMzZDYyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mv Z2luL2dpbmdldC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2luZ2V0LmMKQEAgLTE5 NTMsOSArMTk1Myw5IEBAIGdpbmdldGJpdG1hcChJbmRleFNjYW5EZXNjIHNjYW4sIFRJREJpdG1h cCAqdGJtKQogCSAqIGludG8gdGhlIG1haW4gaW5kZXgsIGFuZCBzbyB3ZSBtaWdodCB2aXNpdCBp dCBhIHNlY29uZCB0aW1lIGR1cmluZyB0aGUKIAkgKiBtYWluIHNjYW4uICBUaGlzIGlzIG9rYXkg YmVjYXVzZSB3ZSdsbCBqdXN0IHJlLXNldCB0aGUgc2FtZSBiaXQgaW4gdGhlCiAJICogYml0bWFw LiAgKFRoZSBwb3NzaWJpbGl0eSBvZiBkdXBsaWNhdGUgdmlzaXRzIGlzIGEgbWFqb3IgcmVhc29u IHdoeSBHSU4KLQkgKiBjYW4ndCBzdXBwb3J0IHRoZSBhbWdldHR1cGxlIEFQSSwgaG93ZXZlci4p IE5vdGUgdGhhdCBpdCB3b3VsZCBub3QgZG8KLQkgKiB0byBzY2FuIHRoZSBtYWluIGluZGV4IGJl Zm9yZSB0aGUgcGVuZGluZyBsaXN0LCBzaW5jZSBjb25jdXJyZW50Ci0JICogY2xlYW51cCBjb3Vs ZCB0aGVuIG1ha2UgdXMgbWlzcyBlbnRyaWVzIGVudGlyZWx5LgorCSAqIGNhbid0IHN1cHBvcnQg ZWl0aGVyIHRoZSBhbWdldHR1cGxlIG9yIGFtZ2V0YmF0Y2ggQVBJLikgTm90ZSB0aGF0IGl0CisJ ICogd291bGQgbm90IGRvIHRvIHNjYW4gdGhlIG1haW4gaW5kZXggYmVmb3JlIHRoZSBwZW5kaW5n IGxpc3QsIHNpbmNlCisJICogY29uY3VycmVudCBjbGVhbnVwIGNvdWxkIHRoZW4gbWFrZSB1cyBt aXNzIGVudHJpZXMgZW50aXJlbHkuCiAJICovCiAJc2NhblBlbmRpbmdJbnNlcnQoc2NhbiwgdGJt LCAmbnRpZHMpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naW4vZ2ludXRpbC5jCmluZGV4IGE1NDZjYWMxOC4uYjYz MGU2NmIzIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvZ2luL2dpbnV0aWwuYwpAQCAtODIsMTAgKzgyLDExIEBAIGdp bmhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZ2luYmVnaW5zY2Fu LAogCQkuYW1yZXNjYW4gPSBnaW5yZXNjYW4sCiAJCS5hbWdldHR1cGxlID0gTlVMTCwKKwkJLmFt Z2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBOVUxMLAogCQkuYW1nZXRiaXRtYXAg PSBnaW5nZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBnaW5lbmRzY2FuLAotCQkuYW1tYXJrcG9z ID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJ CS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9 IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2FjY2Vzcy9naXN0L2dpc3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpp bmRleCBkNTk0NDIwNWQuLjljMjE5Y2FkZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNz L2dpc3QvZ2lzdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9naXN0L2dpc3QuYwpAQCAtMTAz LDEwICsxMDMsMTEgQEAgZ2lzdGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5z Y2FuID0gZ2lzdGJlZ2luc2NhbiwKIAkJLmFtcmVzY2FuID0gZ2lzdHJlc2NhbiwKIAkJLmFtZ2V0 dHVwbGUgPSBnaXN0Z2V0dHVwbGUsCisJCS5hbWdldGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJh dGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gZ2lzdGdldGJpdG1hcCwKIAkJLmFtZW5kc2Nh biA9IGdpc3RlbmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBO VUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0g TlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2Fu ID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYyBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwppbmRleCBlODhkZGIzMmEuLjZhMjBiNjdmNiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hhc2gvaGFzaC5jCisrKyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9oYXNoL2hhc2guYwpAQCAtMTAyLDEwICsxMDIsMTEgQEAgaGFzaGhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gaGFzaGJlZ2luc2NhbiwKIAkJLmFt cmVzY2FuID0gaGFzaHJlc2NhbiwKIAkJLmFtZ2V0dHVwbGUgPSBoYXNoZ2V0dHVwbGUsCisJCS5h bWdldGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFw ID0gaGFzaGdldGJpdG1hcCwKIAkJLmFtZW5kc2NhbiA9IGhhc2hlbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQkuYW1wb3NyZXNldCA9IE5VTEws CiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJLmFtaW5pdHBhcmFsbGVsc2Nh biA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv aGVhcC9oZWFwYW1faGFuZGxlci5jCmluZGV4IDA5YTQ1NmU5OS4uZGQ0NmNjYjNiIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW1faGFuZGxlci5jCisrKyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKQEAgLTgxLDEwICs4MSwxMiBAQCBo ZWFwYW1fc2xvdF9jYWxsYmFja3MoUmVsYXRpb24gcmVsYXRpb24pCiBzdGF0aWMgSW5kZXhGZXRj aFRhYmxlRGF0YSAqCiBoZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4oUmVsYXRpb24gcmVsKQogewot CUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2MwX29iamVjdChJbmRleEZldGNoSGVh cERhdGEpOworCUluZGV4RmV0Y2hIZWFwRGF0YSAqaHNjYW4gPSBwYWxsb2Nfb2JqZWN0KEluZGV4 RmV0Y2hIZWFwRGF0YSk7CiAKIAloc2Nhbi0+eHNfYmFzZS5yZWwgPSByZWw7CiAJaHNjYW4tPnhz X2NidWYgPSBJbnZhbGlkQnVmZmVyOworCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CisJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsKIAogCXJldHVybiAmaHNjYW4tPnhz X2Jhc2U7CiB9CkBAIC05NCwxMCArOTYsMTIgQEAgaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KElu ZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4pCiB7CiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9 IChJbmRleEZldGNoSGVhcERhdGEgKikgc2NhbjsKIAorCS8qIGRlbGliZXJhdGVseSBkb24ndCBk cm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54c19j YnVmKSkKIAl7CiAJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhzX2NidWYpOwogCQloc2Nhbi0+eHNf Y2J1ZiA9IEludmFsaWRCdWZmZXI7CisJCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1i ZXI7CiAJfQogfQogCkBAIC0xMDgsNiArMTEyLDEyIEBAIGhlYXBhbV9pbmRleF9mZXRjaF9lbmQo SW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbikKIAogCWhlYXBhbV9pbmRleF9mZXRjaF9yZXNldChz Y2FuKTsKIAorCWlmIChoc2Nhbi0+dm1idWYgIT0gSW52YWxpZEJ1ZmZlcikKKwl7CisJCVJlbGVh c2VCdWZmZXIoaHNjYW4tPnZtYnVmKTsKKwkJaHNjYW4tPnZtYnVmID0gSW52YWxpZEJ1ZmZlcjsK Kwl9CisKIAlwZnJlZShoc2Nhbik7CiB9CiAKQEAgLTEyNSwyMiArMTM1LDMyIEBAIGhlYXBhbV9p bmRleF9mZXRjaF90dXBsZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlBc3Nl cnQoVFRTX0lTX0JVRkZFUlRVUExFKHNsb3QpKTsKIAogCS8qIFdlIGNhbiBza2lwIHRoZSBidWZm ZXItc3dpdGNoaW5nIGxvZ2ljIGlmIHdlJ3JlIGluIG1pZC1IT1QgY2hhaW4uICovCi0JaWYgKCEq Y2FsbF9hZ2FpbikKKwlpZiAoaHNjYW4tPnhzX2JsayAhPSBJdGVtUG9pbnRlckdldEJsb2NrTnVt YmVyKHRpZCkpCiAJewotCQkvKiBTd2l0Y2ggdG8gY29ycmVjdCBidWZmZXIgaWYgd2UgZG9uJ3Qg aGF2ZSBpdCBhbHJlYWR5ICovCi0JCUJ1ZmZlcgkJcHJldl9idWYgPSBoc2Nhbi0+eHNfY2J1ZjsK KwkJQXNzZXJ0KCEqY2FsbF9hZ2Fpbik7CiAKLQkJaHNjYW4tPnhzX2NidWYgPSBSZWxlYXNlQW5k UmVhZEJ1ZmZlcihoc2Nhbi0+eHNfY2J1ZiwKLQkJCQkJCQkJCQkJICBoc2Nhbi0+eHNfYmFzZS5y ZWwsCi0JCQkJCQkJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKTsKKwkJLyog UmVtZW1iZXIgdGhpcyBidWZmZXIncyBibG9jayBudW1iZXIgZm9yIG5leHQgdGltZSAqLworCQlo c2Nhbi0+eHNfYmxrID0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpOworCisJCWlmIChC dWZmZXJJc1ZhbGlkKGhzY2FuLT54c19jYnVmKSkKKwkJCVJlbGVhc2VCdWZmZXIoaHNjYW4tPnhz X2NidWYpOwogCiAJCS8qCi0JCSAqIFBydW5lIHBhZ2UsIGJ1dCBvbmx5IGlmIHdlIHdlcmVuJ3Qg YWxyZWFkeSBvbiB0aGlzIHBhZ2UKKwkJICogV2hlbiB1c2luZyBhIHJlYWQgc3RyZWFtLCB0aGUg c3RyZWFtIHdpbGwgYWxyZWFkeSBrbm93IHdoaWNoIGJsb2NrCisJCSAqIG51bWJlciBjb21lcyBu ZXh0ICh0aG91Z2ggYW4gYXNzZXJ0aW9uIHdpbGwgdmVyaWZ5IGEgbWF0Y2ggYmVsb3cpCiAJCSAq LwotCQlpZiAocHJldl9idWYgIT0gaHNjYW4tPnhzX2NidWYpCi0JCQloZWFwX3BhZ2VfcHJ1bmVf b3B0KGhzY2FuLT54c19iYXNlLnJlbCwgaHNjYW4tPnhzX2NidWYpOworCQloc2Nhbi0+eHNfY2J1 ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nhbi0+eHNfYmxrKTsKKworCQkv KgorCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZvciB0aGUgZmlyc3QgdGltZQor CQkgKi8KKwkJaGVhcF9wYWdlX3BydW5lX29wdChoc2Nhbi0+eHNfYmFzZS5yZWwsIGhzY2FuLT54 c19jYnVmKTsKIAl9CiAKKwkvKiBBc3NlcnQgdGhhdCB0aGUgVElEJ3MgYmxvY2sgbnVtYmVyJ3Mg YnVmZmVyIGlzIG5vdyBwaW5uZWQgKi8KKwlBc3NlcnQoQnVmZmVySXNWYWxpZChoc2Nhbi0+eHNf Y2J1ZikpOworCUFzc2VydChCdWZmZXJHZXRCbG9ja051bWJlcihoc2Nhbi0+eHNfY2J1ZikgPT0g aHNjYW4tPnhzX2Jsayk7CisKIAkvKiBPYnRhaW4gc2hhcmUtbG9jayBvbiB0aGUgYnVmZmVyIHNv IHdlIGNhbiBleGFtaW5lIHZpc2liaWxpdHkgKi8KIAlMb2NrQnVmZmVyKGhzY2FuLT54c19jYnVm LCBCVUZGRVJfTE9DS19TSEFSRSk7CiAJZ290X2hlYXBfdHVwbGUgPSBoZWFwX2hvdF9zZWFyY2hf YnVmZmVyKHRpZCwKQEAgLTE3Myw2ICsxOTMsNDEzIEBAIGhlYXBhbV9pbmRleF9mZXRjaF90dXBs ZShzdHJ1Y3QgSW5kZXhGZXRjaFRhYmxlRGF0YSAqc2NhbiwKIAlyZXR1cm4gZ290X2hlYXBfdHVw bGU7CiB9CiAKK3N0YXRpYyBwZ19ub2lubGluZSB2b2lkCitoZWFwYW1fYmF0Y2hfcmV3aW5kKElu ZGV4U2NhbkRlc2Mgc2NhbiwgQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSwKKwkJCQkJU2NhbkRpcmVj dGlvbiBkaXJlY3Rpb24pCit7CisJLyoKKwkgKiBIYW5kbGUgYSBjaGFuZ2UgaW4gdGhlIHNjYW4n cyBkaXJlY3Rpb24uCisJICoKKwkgKiBSZWxlYXNlIGZ1dHVyZSBiYXRjaGVzIHByb3Blcmx5LCB0 byBtYWtlIGl0IGxvb2sgbGlrZSB0aGUgY3VycmVudCBiYXRjaAorCSAqIGlzIHRoZSBvbmx5IG9u ZSB3ZSBsb2FkZWQuCisJICovCisJd2hpbGUgKGJhdGNocXVldWUtPm5leHRCYXRjaCA+IGJhdGNo cXVldWUtPmhlYWRCYXRjaCArIDEpCisJeworCQkvKiByZWxlYXNlICJsYXRlciIgYmF0Y2hlcyBp biByZXZlcnNlIG9yZGVyICovCisJCUJhdGNoSW5kZXhTY2FuIGZiYXRjaDsKKworCQliYXRjaHF1 ZXVlLT5uZXh0QmF0Y2gtLTsKKwkJZmJhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2FuLCBiYXRj aHF1ZXVlLT5uZXh0QmF0Y2gpOworCQliYXRjaF9mcmVlKHNjYW4sIGZiYXRjaCk7CisJfQorCisJ LyoKKwkgKiBSZW1lbWJlciB0aGUgbmV3IGRpcmVjdGlvbiwgYW5kIG1ha2Ugc3VyZSB0aGUgc2Nh biBpcyBub3QgbWFya2VkIGFzCisJICogImZpbmlzaGVkIiAod2UgbWlnaHQgaGF2ZSBhbHJlYWR5 IHJlYWQgdGhlIGxhc3QgYmF0Y2gsIGJ1dCBub3cgd2UgbmVlZAorCSAqIHRvIHN0YXJ0IG92ZXIp LgorCSAqLworCWJhdGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVjdGlvbjsKKwlzY2FuLT5maW5p c2hlZCA9IGZhbHNlOworfQorCitzdGF0aWMgaW5saW5lIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0 Y2hfcmV0dXJuX3RpZChJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIHJlYWRCYXRj aCwKKwkJCQkJCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9zKQoreworCWJhdGNoX2Fzc2VydF9w b3NfdmFsaWQoc2NhbiwgcmVhZFBvcyk7CisKKwkvKiBzZXQgdGhlIFRJRCAvIGl0dXAgZm9yIHRo ZSBzY2FuICovCisJc2Nhbi0+eHNfaGVhcHRpZCA9IHJlYWRCYXRjaC0+aXRlbXNbcmVhZFBvcy0+ aXRlbV0uaGVhcFRpZDsKKworCWlmIChzY2FuLT54c193YW50X2l0dXApCisJCXNjYW4tPnhzX2l0 dXAgPQorCQkJKEluZGV4VHVwbGUpIChyZWFkQmF0Y2gtPmN1cnJUdXBsZXMgKworCQkJCQkJICBy ZWFkQmF0Y2gtPml0ZW1zW3JlYWRQb3MtPml0ZW1dLnR1cGxlT2Zmc2V0KTsKKworCXJldHVybiAm c2Nhbi0+eHNfaGVhcHRpZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBfYmF0 Y2hfZ2V0bmV4dCAtIGdldCB0aGUgbmV4dCBiYXRjaCBvZiBUSURzIGZyb20gYSBzY2FuCisgKgor ICogQ2FsbGVkIHdoZW4gd2UgbmVlZCB0byBsb2FkIHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IGVu dHJpZXMgdG8gcHJvY2VzcyBpbgorICogdGhlIGdpdmVuIGRpcmVjdGlvbi4KKyAqCisgKiBSZXR1 cm5zIHRoZSBuZXh0IGJhdGNoIHRvIGJlIHByb2Nlc3NlZCBieSB0aGUgaW5kZXggc2Nhbiwgb3Ig TlVMTCB3aGVuCisgKiB0aGVyZSBhcmUgbm8gbW9yZSBtYXRjaGVzIGluIHRoZSBnaXZlbiBzY2Fu IGRpcmVjdGlvbi4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIEJhdGNoSW5kZXhT Y2FuCitoZWFwX2JhdGNoX2dldG5leHQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2Nh biBwcmlvcmJhdGNoLAorCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uKQoreworCUJhdGNo UXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCUJhdGNoSW5kZXhTY2FuIGJh dGNoID0gTlVMTDsKKworCS8qIFhYWDogd2Ugc2hvdWxkIGFzc2VydCB0aGF0IGEgc25hcHNob3Qg aXMgcHVzaGVkIG9yIHJlZ2lzdGVyZWQgKi8KKwlBc3NlcnQoVHJhbnNhY3Rpb25JZElzVmFsaWQo UmVjZW50WG1pbikpOworCUFzc2VydCghSU5ERVhfU0NBTl9CQVRDSF9GVUxMKHNjYW4pKTsKKwor CWJhdGNoID0gc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtZ2V0YmF0Y2goc2Nhbiwg cHJpb3JiYXRjaCwKKwkJCQkJCQkJCQkJCQkgIGRpcmVjdGlvbik7CisJaWYgKGJhdGNoICE9IE5V TEwpCisJeworCQkvKiBXZSBnb3QgdGhlIGJhdGNoIGZyb20gdGhlIEFNIC0tIGFkZCBpdCB0byBv dXIgcXVldWUgKi8KKwkJaW50CQkJYmF0Y2hJbmRleCA9IGJhdGNocXVldWUtPm5leHRCYXRjaDsK KworCQlBc3NlcnQoYmF0Y2gtPmRpciA9PSBkaXJlY3Rpb24pOworCisJCUlOREVYX1NDQU5fQkFU Q0goc2NhbiwgYmF0Y2hJbmRleCkgPSBiYXRjaDsKKworCQliYXRjaHF1ZXVlLT5uZXh0QmF0Y2gr KzsKKworCQlERUJVR19MT0coImJhdGNoX2dldG5leHQgaGVhZEJhdGNoICVkIG5leHRCYXRjaCAl ZCBiYXRjaCAlcCIsCisJCQkJICBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gsIGJhdGNocXVldWUtPm5l eHRCYXRjaCwgYmF0Y2gpOworCX0KKworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4p OworCisJcmV0dXJuIGJhdGNoOworfQorCisvKiAtLS0tLS0tLS0tLS0tLS0tCisgKgkJaGVhcGFt X2JhdGNoX2dldG5leHRfdGlkIC0gZ2V0IG5leHQgVElEIGZyb20gaW5kZXggc2NhbiBiYXRjaCBx dWV1ZQorICoKKyAqIFRoaXMgZnVuY3Rpb24gaW1wbGVtZW50cyBoZWFwYW0ncyB2ZXJzaW9uIG9m IGdldHRpbmcgdGhlIG5leHQgVElEIGZyb20gYW4KKyAqIGluZGV4IHNjYW4gdGhhdCB1c2VzIHRo ZSBhbWdldGJhdGNoIGludGVyZmFjZS4gIEl0IGlzIGltcGxlbWVudGVkIHVzaW5nCisgKiB2YXJp b3VzIGluZGV4YmF0Y2guYyB1dGlsaXR5IHJvdXRpbmVzLgorICoKKyAqIFRoZSByb3V0aW5lcyBm cm9tIGluZGV4YmF0Y2guYyBhcmUgc3RhdGVsZXNzIC0tIHRoZXkganVzdCBpbXBsZW1lbnQgYmF0 Y2gKKyAqIHF1ZXVlIG1lY2hhbmljcy4gIGhlYXBhbV9iYXRjaF9nZXRuZXh0X3RpZCBpbXBsZW1l bnRzIHRoZSBoZWFwYW0gcG9saWN5OyBpdAorICogZGVjaWRlcyB3aGVuIHRvIGxvYWQvZnJlZSBi YXRjaGVzLCBhbmQgY29udHJvbHMgc2NhbiBkaXJlY3Rpb24gY2hhbmdlcy4KKyAqIC0tLS0tLS0t LS0tLS0tLS0KKyAqLworc3RhdGljIEl0ZW1Qb2ludGVyCitoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90 aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKwlCYXRj aFF1ZXVlICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKKwlCYXRjaFF1ZXVlSXRlbVBv cyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOworCUJhdGNoSW5kZXhTY2FuIHJlYWRC YXRjaCA9IE5VTEw7CisKKwkvKiBzaG91bGRuJ3QgZ2V0IGhlcmUgd2l0aG91dCBiYXRjaGluZyAq LworCWJhdGNoX2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOworCisJLyogSW5pdGlhbGl6ZSBk aXJlY3Rpb24gb24gZmlyc3QgY2FsbCAqLworCWlmIChiYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPT0g Tm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pCisJCWJhdGNocXVldWUtPmRpcmVjdGlvbiA9IGRpcmVj dGlvbjsKKworCS8qCisJICogVHJ5IGFkdmFuY2luZyB0aGUgYmF0Y2ggcG9zaXRpb24uIElmIHRo YXQgZG9lc24ndCBzdWNjZWVkLCBpdCBtZWFucyB3ZQorCSAqIGRvbid0IGhhdmUgbW9yZSBpdGVt cyBpbiB0aGUgY3VycmVudCBiYXRjaCwgYW5kIHRoZXJlJ3Mgbm8gZnV0dXJlIGJhdGNoCisJICog bG9hZGVkLiBTbyB0cnkgbG9hZGluZyBhbm90aGVyIGJhdGNoLCBhbmQgcmV0cnkgaWYgbmVlZGVk LgorCSAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChzY2FuLCByZWFkUG9zLT5iYXRj aCkpCisJeworCQlyZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJh dGNoKTsKKwkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJeworCQkJ aWYgKCsrcmVhZFBvcy0+aXRlbSA+IHJlYWRCYXRjaC0+bGFzdEl0ZW0pCisJCQkJZ290byBuZXh0 YmF0Y2g7CisJCX0KKwkJZWxzZQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwkJ eworCQkJaWYgKC0tcmVhZFBvcy0+aXRlbSA8IHJlYWRCYXRjaC0+Zmlyc3RJdGVtKQorCQkJCWdv dG8gbmV4dGJhdGNoOworCQl9CisKKwkJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2FuLT5p bmRleFJlbGF0aW9uLCAxKTsKKwkJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNjYW4s IHJlYWRCYXRjaCwgcmVhZFBvcyk7CisJfQorCituZXh0YmF0Y2g6CisKKwlpZiAodW5saWtlbHko YmF0Y2hxdWV1ZS0+ZGlyZWN0aW9uICE9IGRpcmVjdGlvbikpCisJeworCQloZWFwYW1fYmF0Y2hf cmV3aW5kKHNjYW4sIGJhdGNocXVldWUsIGRpcmVjdGlvbik7CisJCXJlYWRQb3MtPmJhdGNoID0g YmF0Y2hxdWV1ZS0+bmV4dEJhdGNoIC0gMTsKKwl9CisKKwlpZiAoKHJlYWRCYXRjaCA9IGhlYXBf YmF0Y2hfZ2V0bmV4dChzY2FuLCByZWFkQmF0Y2gsIGRpcmVjdGlvbikpICE9IE5VTEwpCisJewor CQkvKiB4c19oaXR1cCBpcyBub3Qgc3VwcG9ydGVkIGJ5IGFtZ2V0YmF0Y2ggc2NhbnMgKi8KKwkJ QXNzZXJ0KCFzY2FuLT54c19oaXR1cCk7CisKKwkJcmVhZFBvcy0+YmF0Y2grKzsKKworCQkvKgor CQkgKiBHZXQgdGhlIGluaXRpYWwgYmF0Y2ggKHdoaWNoIG11c3QgYmUgdGhlIGhlYWQpLCBhbmQg aW5pdGlhbGl6ZSB0aGUKKwkJICogcG9zaXRpb24gdG8gdGhlIGFwcHJvcHJpYXRlIGl0ZW0gZm9y IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uCisJCSAqLworCQlpZiAoU2NhbkRpcmVjdGlvbklz Rm9yd2FyZChkaXJlY3Rpb24pKQorCQkJcmVhZFBvcy0+aXRlbSA9IHJlYWRCYXRjaC0+Zmlyc3RJ dGVtOworCQllbHNlCisJCQlyZWFkUG9zLT5pdGVtID0gcmVhZEJhdGNoLT5sYXN0SXRlbTsKKwor CQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHJlYWRQb3MpOworCisJCS8qCisJCSAqIElm IHdlIGFkdmFuY2VkIHRvIHRoZSBuZXh0IGJhdGNoLCByZWxlYXNlIHRoZSBiYXRjaCB3ZSBubyBs b25nZXIKKwkJICogbmVlZC4gIFRoZSBwb3NpdGlvbnMgaXMgdGhlICJyZWFkIiBwb3NpdGlvbiwg YW5kIHdlIGNhbiBjb21wYXJlIGl0CisJCSAqIHRvIGhlYWRCYXRjaC4KKwkJICovCisJCWlmIChy ZWFkUG9zLT5iYXRjaCAhPSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCisJCXsKKwkJCUJhdGNoSW5k ZXhTY2FuIGhlYWRCYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwKKwkJCQkJCQkJCQkJCQkJ YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKTsKKworCQkJLyogRnJlZSB0aGUgaGVhZCBiYXRjaCAoZXhj ZXB0IHdoZW4gaXQncyBtYXJrQmF0Y2gpICovCisJCQliYXRjaF9mcmVlKHNjYW4sIGhlYWRCYXRj aCk7CisKKwkJCS8qCisJCQkgKiBJbiBhbnkgY2FzZSwgcmVtb3ZlIHRoZSBiYXRjaCBmcm9tIHRo ZSByZWd1bGFyIHF1ZXVlLCBldmVuIGlmCisJCQkgKiB3ZSBrZXB0IGl0IGZvciBtYXJrL3Jlc3Rv cmUKKwkJCSAqLworCQkJYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKys7CisKKwkJCS8qIHdlIGNhbid0 IHNraXAgYW55IGJhdGNoZXMgKi8KKwkJCUFzc2VydChiYXRjaHF1ZXVlLT5oZWFkQmF0Y2ggPT0g cmVhZFBvcy0+YmF0Y2gpOworCQl9CisKKwkJcGdzdGF0X2NvdW50X2luZGV4X3R1cGxlcyhzY2Fu LT5pbmRleFJlbGF0aW9uLCAxKTsKKwkJcmV0dXJuIGhlYXBhbV9iYXRjaF9yZXR1cm5fdGlkKHNj YW4sIHJlYWRCYXRjaCwgcmVhZFBvcyk7CisJfQorCisJLyoKKwkgKiBJZiB3ZSBnZXQgaGVyZSwg d2UgZmFpbGVkIHRvIGFkdmFuY2UgdGhlIHBvc2l0aW9uIGFuZCB0aGVyZSBhcmUgbm8gbW9yZQor CSAqIGJhdGNoZXMgdG8gYmUgbG9hZGVkIGluIHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLiAg RGVmZW5zaXZlbHkgcmVzZXQKKwkgKiB0aGUgcmVhZCBwb3NpdGlvbi4KKwkgKi8KKwliYXRjaF9y ZXNldF9wb3MocmVhZFBvcyk7CisJc2Nhbi0+ZmluaXNoZWQgPSB0cnVlOworCisJcmV0dXJuIE5V TEw7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9mZXRjaF9oZWFwIC0gZ2V0 IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCisgKgorICogVGhlIHJlc3VsdCBpcyBhIHZpc2li bGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0CisgKiByZWNl bnRseSBmZXRjaGVkIGJ5IG91ciBjYWxsZXIgaW4gc2Nhbi0+eHNfaGVhcHRpZCwgb3IgTlVMTCBp ZiBubyBtb3JlCisgKiBtYXRjaGluZyB0dXBsZXMgZXhpc3QuICAoVGhlcmUgY2FuIGJlIG1vcmUg dGhhbiBvbmUgbWF0Y2hpbmcgdHVwbGUgYmVjYXVzZQorICogb2YgSE9UIGNoYWlucywgYWx0aG91 Z2ggd2hlbiB1c2luZyBhbiBNVkNDIHNuYXBzaG90IGl0IHNob3VsZCBiZSBpbXBvc3NpYmxlCisg KiBmb3IgbW9yZSB0aGFuIG9uZSBzdWNoIHR1cGxlIHRvIGV4aXN0LikKKyAqCisgKiBPbiBzdWNj ZXNzLCB0aGUgYnVmZmVyIGNvbnRhaW5pbmcgdGhlIGhlYXAgdHVwIGlzIHBpbm5lZC4gIFRoZSBw aW4gbXVzdCBiZQorICogZHJvcHBlZCBlbHNld2hlcmUuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisg Ki8KK3N0YXRpYyBib29sCitpbmRleF9mZXRjaF9oZWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVHVw bGVUYWJsZVNsb3QgKnNsb3QpCit7CisJYm9vbAkJYWxsX2RlYWQgPSBmYWxzZTsKKwlib29sCQlm b3VuZDsKKworCWZvdW5kID0gaGVhcGFtX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBm ZXRjaCwgJnNjYW4tPnhzX2hlYXB0aWQsCisJCQkJCQkJCQkgc2Nhbi0+eHNfc25hcHNob3QsIHNs b3QsCisJCQkJCQkJCQkgJnNjYW4tPnhzX2hlYXBfY29udGludWUsICZhbGxfZGVhZCk7CisKKwlp ZiAoZm91bmQpCisJCXBnc3RhdF9jb3VudF9oZWFwX2ZldGNoKHNjYW4tPmluZGV4UmVsYXRpb24p OworCisJLyoKKwkgKiBJZiB3ZSBzY2FubmVkIGEgd2hvbGUgSE9UIGNoYWluIGFuZCBmb3VuZCBv bmx5IGRlYWQgdHVwbGVzLCByZW1lbWJlciBpdAorCSAqIGZvciBsYXRlci4gIFdlIGRvIG5vdCBk byB0aGlzIHdoZW4gaW4gcmVjb3ZlcnkgYmVjYXVzZSBpdCBtYXkgdmlvbGF0ZQorCSAqIE1WQ0Mg dG8gZG8gc28uICBTZWUgY29tbWVudHMgaW4gUmVsYXRpb25HZXRJbmRleFNjYW4oKS4KKwkgKi8K KwlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5SZWNvdmVyeSkKKwl7CisJCWlmIChzY2FuLT5iYXRj aHF1ZXVlKQorCQl7CisJCQlpZiAoYWxsX2RlYWQpCisJCQkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVt KHNjYW4pOworCQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIFRlbGwgYW1nZXR0dXBsZS1i YXNlZCBpbmRleCBBTSB0byBraWxsIGl0cyBlbnRyeSBmb3IgdGhhdCBUSUQKKwkJCSAqICh0aGlz IHdpbGwgdGFrZSBlZmZlY3QgaW4gdGhlIG5leHQgY2FsbCwgaW4gaW5kZXhfZ2V0bmV4dF90aWQp CisJCQkgKi8KKwkJCXNjYW4tPmtpbGxfcHJpb3JfdHVwbGUgPSBhbGxfZGVhZDsKKwkJfQorCX0K KworCXJldHVybiBmb3VuZDsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWhlYXBhbV9p bmRleF9nZXRuZXh0X3Nsb3QgLSBnZXQgdGhlIG5leHQgdHVwbGUgZnJvbSBhIHNjYW4KKyAqCisg KiBUaGUgcmVzdWx0IGlzIHRydWUgaWYgYSB0dXBsZSBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMg YW5kIHRoZSBzbmFwc2hvdCB3YXMKKyAqIGZvdW5kLCBmYWxzZSBvdGhlcndpc2UuICBUaGUgdHVw bGUgaXMgc3RvcmVkIGluIHRoZSBzcGVjaWZpZWQgc2xvdC4KKyAqCisgKiBPbiBzdWNjZXNzLCBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGFyZSBsaWtlbHkgdG8gYmUgaGVsZCwgYW5kIHdp bGwgYmUKKyAqIGRyb3BwZWQgYnkgYSBmdXR1cmUgY2FsbCBoZXJlIChvciBieSBhIGxhdGVyIGNh bGwgdG8gaW5kZXhfZW5kc2NhbikuCisgKgorICogTm90ZTogY2FsbGVyIG11c3QgY2hlY2sgc2Nh bi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUKKyAqIHNjYW4ga2V5 cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVzZSB3ZSBkb24ndCBo YXZlCisgKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50bHkgaW4gdGhlIGdl bmVyYWwgY2FzZS4KKyAqIC0tLS0tLS0tLS0tLS0tLS0KKyAqLworc3RhdGljIGJvb2wKK2hlYXBh bV9pbmRleF9nZXRuZXh0X3Nsb3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbiwKKwkJCQkJCSAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJSW5kZXhGZXRjaEhl YXBEYXRhICpoc2NhbiA9IChJbmRleEZldGNoSGVhcERhdGEgKikgc2Nhbi0+eHNfaGVhcGZldGNo OworCUl0ZW1Qb2ludGVyIHRpZCA9IE5VTEw7CisKKwlmb3IgKDs7KQorCXsKKwkJaWYgKCFzY2Fu LT54c19oZWFwX2NvbnRpbnVlKQorCQl7CisJCQkvKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4g YW1nZXRiYXRjaCBpbmRleCBBTSBhcmUgbWFuYWdlZCBieSBoZWFwYW0ncworCQkJICogaW5kZXgg c2NhbiBtYW5hZ2VyLiAgVGhpcyBnaXZlcyBoZWFwYW0gdGhlIGFiaWxpdHkgdG8gcmVhZCBoZWFw CisJCQkgKiB0dXBsZXMgaW4gYSBmbGV4aWJsZSBvcmRlciB0aGF0IGlzIGF0dHVuZWQgdG8gYm90 aCBjb3N0cyBhbmQKKwkJCSAqIGJlbmVmaXRzIG9uIHRoZSBoZWFwYW0gYW5kIHRhYmxlIEFNIHNp ZGUuCisJCQkgKgorCQkJICogU2NhbnMgdGhhdCB1c2UgYW4gYW1nZXR0dXBsZSBpbmRleCBBTSBz aW1wbHkgY2FsbCB0aHJvdWdoIHRvCisJCQkgKiBpbmRleF9nZXRuZXh0X3RpZCB0byBnZXQgdGhl IG5leHQgVElEIHJldHVybmVkIGJ5IGluZGV4IEFNLiBUaGUKKwkJCSAqIHByb2dyZXNzIG9mIHRo ZSBzY2FuIHdpbGwgYmUgdW5kZXIgdGhlIGNvbnRyb2wgb2YgaW5kZXggQU0gKHdlCisJCQkgKiBq dXN0IHBhc3MgaXQgdGhyb3VnaCBhIGRpcmVjdGlvbiB0byBnZXQgdGhlIG5leHQgdHVwbGUgaW4p LCBzbworCQkJICogd2UgY2Fubm90IHJlb3JkZXIgYW55IHdvcmsuCisJCQkgKi8KKwkJCWlmIChz Y2FuLT5iYXRjaHF1ZXVlICE9IE5VTEwpCisJCQkJdGlkID0gaGVhcGFtX2JhdGNoX2dldG5leHRf dGlkKHNjYW4sIGRpcmVjdGlvbik7CisJCQllbHNlCisJCQkJdGlkID0gaW5kZXhfZ2V0bmV4dF90 aWQoc2NhbiwgZGlyZWN0aW9uKTsKKworCQkJLyogSWYgd2UncmUgb3V0IG9mIGluZGV4IGVudHJp ZXMsIHdlJ3JlIGRvbmUgKi8KKwkJCWlmICh0aWQgPT0gTlVMTCkKKwkJCQlicmVhazsKKwkJfQor CisJCS8qCisJCSAqIEZldGNoIHRoZSBuZXh0IChvciBvbmx5KSB2aXNpYmxlIGhlYXAgdHVwbGUg Zm9yIHRoaXMgaW5kZXggZW50cnkuCisJCSAqIElmIHdlIGRvbid0IGZpbmQgYW55dGhpbmcsIGxv b3AgYXJvdW5kIGFuZCBncmFiIHRoZSBuZXh0IFRJRCBmcm9tCisJCSAqIHRoZSBpbmRleC4KKwkJ ICovCisJCUFzc2VydChJdGVtUG9pbnRlcklzVmFsaWQoJnNjYW4tPnhzX2hlYXB0aWQpKTsKKwkJ aWYgKCFzY2FuLT54c193YW50X2l0dXApCisJCXsKKwkJCS8qIFBsYWluIGluZGV4IHNjYW4gKi8K KwkJCWlmIChpbmRleF9mZXRjaF9oZWFwKHNjYW4sIHNsb3QpKQorCQkJCXJldHVybiB0cnVlOwor CQl9CisJCWVsc2UKKwkJeworCQkJLyoKKwkJCSAqIEluZGV4LW9ubHkgc2Nhbi4KKwkJCSAqCisJ CQkgKiBXZSBjYW4gc2tpcCB0aGUgaGVhcCBmZXRjaCBpZiB0aGUgVElEIHJlZmVyZW5jZXMgYSBo ZWFwIHBhZ2Ugb24KKwkJCSAqIHdoaWNoIGFsbCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8g ZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCisJCQkgKiB3ZSdsbCB1c2UgdGhlIGluZGV4IHR1cGxl IG5vdCB0aGUgaGVhcCB0dXBsZSBhcyB0aGUgZGF0YQorCQkJICogc291cmNlLgorCQkJICoKKwkJ CSAqIE5vdGUgb24gTWVtb3J5IE9yZGVyaW5nIEVmZmVjdHM6IHZpc2liaWxpdHltYXBfZ2V0X3N0 YXR1cyBkb2VzCisJCQkgKiBub3QgbG9jayB0aGUgdmlzaWJpbGl0eSBtYXAgYnVmZmVyLCBhbmQg dGhlcmVmb3JlIHRoZSByZXN1bHQgd2UKKwkJCSAqIHJlYWQgaGVyZSBjb3VsZCBiZSBzbGlnaHRs eSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlCisJCQkgKiBlbm91Z2ggdG8gbWF0 dGVyLgorCQkJICoKKwkJCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFyaW5nIGEgVk0gYml0IGR1 ZSB0byBhbiBpbnNlcnQgcmlnaHQKKwkJCSAqIGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHBy ZXNlbnQgaW4gdGhlIGluZGV4IHBhZ2UgYnV0IG5vdAorCQkJICogdmlzaWJsZS4gVGhlIHJlYWRp bmcgb2YgdGhlIFRJRCBieSB0aGlzIHNjYW4gKHVzaW5nIGEgc2hhcmVkCisJCQkgKiBsb2NrIG9u IHRoZSBpbmRleCBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5zZXJ0IG9mIHRoZQor CQkJICogVElEIGludG8gdGhlIGluZGV4ICh1c2luZyBhbiBleGNsdXNpdmUgbG9jayBvbiB0aGUg aW5kZXgKKwkJCSAqIGJ1ZmZlcikuIEJlY2F1c2UgdGhlIFZNIGJpdCBpcyBjbGVhcmVkIGJlZm9y ZSB1cGRhdGluZyB0aGUKKwkJCSAqIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2YgdGhl IGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwKKwkJCSAqIG1lbW9yeSBiYXJyaWVyLCB3ZSBhcmUg c3VyZSB0byBzZWUgdGhlIGNsZWFyZWQgYml0IGlmIHdlIHNlZSBhCisJCQkgKiByZWNlbnRseS1p bnNlcnRlZCBUSUQuCisJCQkgKgorCQkJICogRGVsZXRlcyBkbyBub3QgdXBkYXRlIHRoZSBpbmRl eCBwYWdlIChvbmx5IFZBQ1VVTSB3aWxsIGNsZWFyCisJCQkgKiBvdXQgdGhlIFRJRCksIHNvIHRo ZSBjbGVhcmluZyBvZiB0aGUgVk0gYml0IGJ5IGEgZGVsZXRlIGlzIG5vdAorCQkJICogc2VyaWFs aXplZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlz CisJCQkgKiBzaWduaWZpY2FudGx5IHN0YWxlLiBIb3dldmVyLCB3ZSBkb24ndCBjYXJlIGFib3V0 IHRoZSBkZWxldGUKKwkJCSAqIHJpZ2h0IGF3YXksIGJlY2F1c2UgdGhlIHR1cGxlIGlzIHN0aWxs IHZpc2libGUgdW50aWwgdGhlCisJCQkgKiBkZWxldGluZyB0cmFuc2FjdGlvbiBjb21taXRzIG9y IHRoZSBzdGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKKwkJCSAqIHRyYW5zYWN0aW9uKS4gSW4g ZWl0aGVyIGNhc2UsIHRoZSBsb2NrIG9uIHRoZSBWTSBidWZmZXIgd2lsbAorCQkJICogaGF2ZSBi ZWVuIHJlbGVhc2VkIChhY3RpbmcgYXMgYSB3cml0ZSBiYXJyaWVyKSBhZnRlciBjbGVhcmluZwor CQkJICogdGhlIGJpdC4gQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRl cyB0aGUKKwkJCSAqIGRlbGV0aW5nIHRyYW5zYWN0aW9uIChtYWtpbmcgdGhlIHR1cGxlIGludmlz aWJsZSksIHdlIG11c3QgaGF2ZQorCQkJICogYWNxdWlyZWQgUHJvY0FycmF5TG9jayBhZnRlciB0 aGF0IHRpbWUsIGFjdGluZyBhcyBhIHJlYWQKKwkJCSAqIGJhcnJpZXIuCisJCQkgKgorCQkJICog SXQncyB3b3J0aCBnb2luZyB0aHJvdWdoIHRoaXMgY29tcGxleGl0eSB0byBhdm9pZCBuZWVkaW5n IHRvCisJCQkgKiBsb2NrIHRoZSBWTSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmlj YW50IGNvbnRlbnRpb24uCisJCQkgKi8KKwkJCWlmICghVk1fQUxMX1ZJU0lCTEUoaHNjYW4tPnhz X2Jhc2UucmVsLAorCQkJCQkJCQlJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCisJCQkJ CQkJCSZoc2Nhbi0+dm1idWYpKQorCQkJeworCQkJCS8qCisJCQkJICogUmF0cywgd2UgaGF2ZSB0 byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNpYmlsaXR5LgorCQkJCSAqLworCQkJCWlmIChz Y2FuLT5pbnN0cnVtZW50KQorCQkJCQlzY2FuLT5pbnN0cnVtZW50LT5uaGVhcGZldGNoZXMrKzsK KworCQkJCWlmICghaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKKwkJCQkJY29udGludWU7 CS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4IGVudHJ5ICovCisKKwkJCQlFeGVj Q2xlYXJUdXBsZShzbG90KTsKKworCQkJCS8qCisJCQkJICogT25seSBNVkNDIHNuYXBzaG90cyBh cmUgc3VwcG9ydGVkIHdpdGggc3RhbmRhcmQgaW5kZXgtb25seQorCQkJCSAqIHNjYW5zLCBzbyB0 aGVyZSBzaG91bGQgYmUgbm8gbmVlZCB0byBrZWVwIGZvbGxvd2luZyB0aGUgSE9UCisJCQkJICog Y2hhaW4gb25jZSBhIHZpc2libGUgZW50cnkgaGFzIGJlZW4gZm91bmQuICBPdGhlciBjYWxsZXJz CisJCQkJICogKGN1cnJlbnRseSBvbmx5IHNlbGZ1bmNzLmMpIHVzZSBTbmFwc2hvdE5vblZhY3V1 bWFibGUsIGFuZAorCQkJCSAqIHdhbnQgdXMgdG8gYXNzdW1lIHRoYXQganVzdCBoYXZpbmcgb25l IHZpc2libGUgdHVwbGUgaW4gdGhlCisJCQkJICogaG90IGNoYWluIGlzIGFsd2F5cyBnb29kIGVu b3VnaC4KKwkJCQkgKi8KKwkJCQlBc3NlcnQoIShzY2FuLT54c19oZWFwX2NvbnRpbnVlICYmCisJ CQkJCQkgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKSk7CisKKwkJCQkvKgorCQkJ CSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcgYSBwaW4gb24gdGhlIGhlYXAg cGFnZSwKKwkJCQkgKiBhcyByZWNvcmRlZCBpbiBJbmRleEZldGNoSGVhcERhdGEueHNfY2J1Zi4g IFdlIGNvdWxkCisJCQkJICogcmVsZWFzZSB0aGF0IHBpbiBub3csIGJ1dCB3ZSBwcmVmZXIgdG8g aG9sZCBvbiB0byBWTSBwaW5zLgorCQkJCSAqIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdCB0aGUg aW5kZXggZW50cnkgd2lsbCByZXF1aXJlIGEKKwkJCQkgKiB2aXNpdCB0byB0aGUgc2FtZSBoZWFw IHBhZ2UuICBJdCdzIGV2ZW4gbW9yZSBsaWtlbHkgdGhhdAorCQkJCSAqIHRoZSBpbmRleCBlbnRy eSB3aWxsIGZvcmNlIHVzIHRvIHBlcmZvcm0gYSBsb29rdXAgdGhhdCB1c2VzCisJCQkJICogdGhl IHNhbWUgYWxyZWFkeS1waW5uZWQgVk0gcGFnZS4KKwkJCQkgKi8KKwkJCX0KKwkJCWVsc2UKKwkJ CXsKKwkJCQkvKgorCQkJCSAqIFdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHNvIHdlJ2xsIG5l ZWQgdG8gdGFrZSBhCisJCQkJICogcHJlZGljYXRlIGxvY2sgZXhwbGljaXRseSwgYXMgaWYgd2Ug aGFkLiAgRm9yIG5vdyB3ZSBkbworCQkJCSAqIHRoYXQgYXQgcGFnZSBsZXZlbC4KKwkJCQkgKi8K KwkJCQlQcmVkaWNhdGVMb2NrUGFnZShoc2Nhbi0+eHNfYmFzZS5yZWwsCisJCQkJCQkJCSAgSXRl bVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkJCQkgIHNjYW4tPnhzX3NuYXBzaG90 KTsKKwkJCX0KKworCQkJcmV0dXJuIHRydWU7CisJCX0KKwl9CisKKwlyZXR1cm4gZmFsc2U7Cit9 CiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICogQ2FsbGJhY2tzIGZvciBub24tbW9kaWZ5aW5nIG9w ZXJhdGlvbnMgb24gaW5kaXZpZHVhbCB0dXBsZXMgZm9yIGhlYXAgQU0KQEAgLTc1Myw3ICsxMTgw LDggQEAgaGVhcGFtX3JlbGF0aW9uX2NvcHlfZm9yX2NsdXN0ZXIoUmVsYXRpb24gT2xkSGVhcCwg UmVsYXRpb24gTmV3SGVhcCwKIAogCQl0YWJsZVNjYW4gPSBOVUxMOwogCQloZWFwU2NhbiA9IE5V TEw7Ci0JCWluZGV4U2NhbiA9IGluZGV4X2JlZ2luc2NhbihPbGRIZWFwLCBPbGRJbmRleCwgU25h cHNob3RBbnksIE5VTEwsIDAsIDApOworCQlpbmRleFNjYW4gPSBpbmRleF9iZWdpbnNjYW4oT2xk SGVhcCwgT2xkSW5kZXgsIGZhbHNlLCBTbmFwc2hvdEFueSwKKwkJCQkJCQkJCU5VTEwsIDAsIDAp OwogCQlpbmRleF9yZXNjYW4oaW5kZXhTY2FuLCBOVUxMLCAwLCBOVUxMLCAwKTsKIAl9CiAJZWxz ZQpAQCAtNzkwLDcgKzEyMTgsOCBAQCBoZWFwYW1fcmVsYXRpb25fY29weV9mb3JfY2x1c3RlcihS ZWxhdGlvbiBPbGRIZWFwLCBSZWxhdGlvbiBOZXdIZWFwLAogCiAJCWlmIChpbmRleFNjYW4gIT0g TlVMTCkKIAkJewotCQkJaWYgKCFpbmRleF9nZXRuZXh0X3Nsb3QoaW5kZXhTY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2xvdCkpCisJCQlpZiAoIWhlYXBhbV9pbmRleF9nZXRuZXh0X3Nsb3Qo aW5kZXhTY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCQkgICBzbG90KSkKIAkJ CQlicmVhazsKIAogCQkJLyogU2luY2Ugd2UgdXNlZCBubyBzY2FuIGtleXMsIHNob3VsZCBuZXZl ciBuZWVkIHRvIHJlY2hlY2sgKi8KQEAgLTI2MzMsNiArMzA2Miw3IEBAIHN0YXRpYyBjb25zdCBU YWJsZUFtUm91dGluZSBoZWFwYW1fbWV0aG9kcyA9IHsKIAkuaW5kZXhfZmV0Y2hfYmVnaW4gPSBo ZWFwYW1faW5kZXhfZmV0Y2hfYmVnaW4sCiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2lu ZGV4X2ZldGNoX3Jlc2V0LAogCS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hf ZW5kLAorCS5pbmRleF9nZXRuZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAog CS5pbmRleF9mZXRjaF90dXBsZSA9IGhlYXBhbV9pbmRleF9mZXRjaF90dXBsZSwKIAogCS50dXBs ZV9pbnNlcnQgPSBoZWFwYW1fdHVwbGVfaW5zZXJ0LApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv YWNjZXNzL2luZGV4L01ha2VmaWxlIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxl CmluZGV4IDZmMmUzMDYxYS4uZTZkNjgxYjQwIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvTWFrZWZpbGUKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L01ha2VmaWxl CkBAIC0xNiw2ICsxNiw3IEBAIE9CSlMgPSBcCiAJYW1hcGkubyBcCiAJYW12YWxpZGF0ZS5vIFwK IAlnZW5hbS5vIFwKLQlpbmRleGFtLm8KKwlpbmRleGFtLm8gXAorCWluZGV4YmF0Y2gubwogCiBp bmNsdWRlICQodG9wX3NyY2Rpcikvc3JjL2JhY2tlbmQvY29tbW9uLm1rCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRl eC9nZW5hbS5jCmluZGV4IGEyOWJlNmY0Ni4uZjAwM2U5NTRkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9hY2Nlc3MvaW5kZXgvZ2VuYW0uYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgv Z2VuYW0uYwpAQCAtODksNiArODksOCBAQCBSZWxhdGlvbkdldEluZGV4U2NhbihSZWxhdGlvbiBp bmRleFJlbGF0aW9uLCBpbnQgbmtleXMsIGludCBub3JkZXJieXMpCiAJc2Nhbi0+eHNfc25hcHNo b3QgPSBJbnZhbGlkU25hcHNob3Q7CS8qIGNhbGxlciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwog CXNjYW4tPm51bWJlck9mS2V5cyA9IG5rZXlzOwogCXNjYW4tPm51bWJlck9mT3JkZXJCeXMgPSBu b3JkZXJieXM7CisJc2Nhbi0+YmF0Y2hxdWV1ZSA9IE5VTEw7CS8qIHNldCBsYXRlciBmb3IgYW1n ZXRiYXRjaCBjYWxsZXJzICovCisJc2Nhbi0+eHNfd2FudF9pdHVwID0gZmFsc2U7IC8qIGNhbGxl ciBtdXN0IGluaXRpYWxpemUgdGhpcyAqLwogCiAJLyoKIAkgKiBXZSBhbGxvY2F0ZSBrZXkgd29y a3NwYWNlIGhlcmUsIGJ1dCBpdCB3b24ndCBnZXQgZmlsbGVkIHVudGlsIGFtcmVzY2FuLgpAQCAt MTAyLDggKzEwNCw2IEBAIFJlbGF0aW9uR2V0SW5kZXhTY2FuKFJlbGF0aW9uIGluZGV4UmVsYXRp b24sIGludCBua2V5cywgaW50IG5vcmRlcmJ5cykKIAllbHNlCiAJCXNjYW4tPm9yZGVyQnlEYXRh ID0gTlVMTDsKIAotCXNjYW4tPnhzX3dhbnRfaXR1cCA9IGZhbHNlOyAvKiBtYXkgYmUgc2V0IGxh dGVyICovCi0KIAkvKgogCSAqIER1cmluZyByZWNvdmVyeSB3ZSBpZ25vcmUga2lsbGVkIHR1cGxl cyBhbmQgZG9uJ3QgYm90aGVyIHRvIGtpbGwgdGhlbQogCSAqIGVpdGhlci4gV2UgZG8gdGhpcyBi ZWNhdXNlIHRoZSB4bWluIG9uIHRoZSBwcmltYXJ5IG5vZGUgY291bGQgZWFzaWx5IGJlCkBAIC0x MTUsNiArMTE1LDggQEAgUmVsYXRpb25HZXRJbmRleFNjYW4oUmVsYXRpb24gaW5kZXhSZWxhdGlv biwgaW50IG5rZXlzLCBpbnQgbm9yZGVyYnlzKQogCSAqIHNob3VsZCBub3QgYmUgYWx0ZXJlZCBi eSBpbmRleCBBTXMuCiAJICovCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGZhbHNlOworCXNj YW4tPmRyb3BQaW4gPSB0cnVlOwkJLyogZm9yIG5vdyAqLworCXNjYW4tPmZpbmlzaGVkID0gZmFs c2U7CiAJc2Nhbi0+eGFjdFN0YXJ0ZWRJblJlY292ZXJ5ID0gVHJhbnNhY3Rpb25TdGFydGVkRHVy aW5nUmVjb3ZlcnkoKTsKIAlzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlcyA9ICFzY2FuLT54YWN0 U3RhcnRlZEluUmVjb3Zlcnk7CiAKQEAgLTQ0Niw3ICs0NDgsNyBAQCBzeXN0YWJsZV9iZWdpbnNj YW4oUmVsYXRpb24gaGVhcFJlbGF0aW9uLAogCQkJCWVsb2coRVJST1IsICJjb2x1bW4gaXMgbm90 IGluIGluZGV4Iik7CiAJCX0KIAotCQlzeXNzY2FuLT5pc2NhbiA9IGluZGV4X2JlZ2luc2Nhbiho ZWFwUmVsYXRpb24sIGlyZWwsCisJCXN5c3NjYW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhl YXBSZWxhdGlvbiwgaXJlbCwgZmFsc2UsCiAJCQkJCQkJCQkJIHNuYXBzaG90LCBOVUxMLCBua2V5 cywgMCk7CiAJCWluZGV4X3Jlc2NhbihzeXNzY2FuLT5pc2NhbiwgaWR4a2V5LCBua2V5cywgTlVM TCwgMCk7CiAJCXN5c3NjYW4tPnNjYW4gPSBOVUxMOwpAQCAtNTE3LDcgKzUxOSw4IEBAIHN5c3Rh YmxlX2dldG5leHQoU3lzU2NhbkRlc2Mgc3lzc2NhbikKIAogCWlmIChzeXNzY2FuLT5pcmVsKQog CXsKLQkJaWYgKGluZGV4X2dldG5leHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgRm9yd2FyZFNjYW5E aXJlY3Rpb24sIHN5c3NjYW4tPnNsb3QpKQorCQlpZiAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90 KHN5c3NjYW4tPmlzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwKKwkJCQkJCQkJCSBzeXNzY2Fu LT5zbG90KSkKIAkJewogCQkJYm9vbAkJc2hvdWxkRnJlZTsKIApAQCAtNzA3LDcgKzcxMCw3IEBA IHN5c3RhYmxlX2JlZ2luc2Nhbl9vcmRlcmVkKFJlbGF0aW9uIGhlYXBSZWxhdGlvbiwKIAkJCWVs b2coRVJST1IsICJjb2x1bW4gaXMgbm90IGluIGluZGV4Iik7CiAJfQogCi0Jc3lzc2Nhbi0+aXNj YW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbGF0aW9uLCBpbmRleFJlbGF0aW9uLAorCXN5c3Nj YW4tPmlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKGhlYXBSZWxhdGlvbiwgaW5kZXhSZWxhdGlvbiwg ZmFsc2UsCiAJCQkJCQkJCQkgc25hcHNob3QsIE5VTEwsIG5rZXlzLCAwKTsKIAlpbmRleF9yZXNj YW4oc3lzc2Nhbi0+aXNjYW4sIGlkeGtleSwgbmtleXMsIE5VTEwsIDApOwogCXN5c3NjYW4tPnNj YW4gPSBOVUxMOwpAQCAtNzM0LDcgKzczNyw3IEBAIHN5c3RhYmxlX2dldG5leHRfb3JkZXJlZChT eXNTY2FuRGVzYyBzeXNzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlIZWFwVHVwbGUJ aHR1cCA9IE5VTEw7CiAKIAlBc3NlcnQoc3lzc2Nhbi0+aXJlbCk7Ci0JaWYgKGluZGV4X2dldG5l eHRfc2xvdChzeXNzY2FuLT5pc2NhbiwgZGlyZWN0aW9uLCBzeXNzY2FuLT5zbG90KSkKKwlpZiAo dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHN5c3NjYW4tPmlzY2FuLCBkaXJlY3Rpb24sIHN5c3Nj YW4tPnNsb3QpKQogCQlodHVwID0gRXhlY0ZldGNoU2xvdEhlYXBUdXBsZShzeXNzY2FuLT5zbG90 LCBmYWxzZSwgTlVMTCk7CiAKIAkvKiBTZWUgbm90ZXMgaW4gc3lzdGFibGVfZ2V0bmV4dCAqLwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKaW5kZXggNGVkMDUwOGM2Li5hNTljNzY3NTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YW0uYwpAQCAtMjQsOSArMjQsNyBAQAogICoJCWluZGV4 X3BhcmFsbGVsc2Nhbl9pbml0aWFsaXplIC0gaW5pdGlhbGl6ZSBwYXJhbGxlbCBzY2FuCiAgKgkJ aW5kZXhfcGFyYWxsZWxyZXNjYW4gIC0gKHJlKXN0YXJ0IGEgcGFyYWxsZWwgc2NhbiBvZiBhbiBp bmRleAogICoJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbCAtIGpvaW4gcGFyYWxsZWwgaW5kZXgg c2NhbgotICoJCWluZGV4X2dldG5leHRfdGlkCS0gZ2V0IHRoZSBuZXh0IFRJRCBmcm9tIGEgc2Nh bgotICoJCWluZGV4X2ZldGNoX2hlYXAJCS0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxl Ci0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90CS0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2Fu CisgKgkJaW5kZXhfZ2V0bmV4dF90aWQJLSBhbWdldHR1cGxlIHRhYmxlIEFNIGhlbHBlciByb3V0 aW5lCiAgKgkJaW5kZXhfZ2V0Yml0bWFwIC0gZ2V0IGFsbCB0dXBsZXMgZnJvbSBhIHNjYW4KICAq CQlpbmRleF9idWxrX2RlbGV0ZQktIGJ1bGsgZGVsZXRpb24gb2YgaW5kZXggdHVwbGVzCiAgKgkJ aW5kZXhfdmFjdXVtX2NsZWFudXAJLSBwb3N0LWRlbGV0aW9uIGNsZWFudXAgb2YgYW4gaW5kZXgK QEAgLTI1NSw2ICsyNTMsNyBAQCBpbmRleF9pbnNlcnRfY2xlYW51cChSZWxhdGlvbiBpbmRleFJl bGF0aW9uLAogSW5kZXhTY2FuRGVzYwogaW5kZXhfYmVnaW5zY2FuKFJlbGF0aW9uIGhlYXBSZWxh dGlvbiwKIAkJCQlSZWxhdGlvbiBpbmRleFJlbGF0aW9uLAorCQkJCWJvb2wgeHNfd2FudF9pdHVw LAogCQkJCVNuYXBzaG90IHNuYXBzaG90LAogCQkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAq aW5zdHJ1bWVudCwKIAkJCQlpbnQgbmtleXMsIGludCBub3JkZXJieXMpCkBAIC0yODIsNiArMjgx LDEwIEBAIGluZGV4X2JlZ2luc2NhbihSZWxhdGlvbiBoZWFwUmVsYXRpb24sCiAJc2Nhbi0+aGVh cFJlbGF0aW9uID0gaGVhcFJlbGF0aW9uOwogCXNjYW4tPnhzX3NuYXBzaG90ID0gc25hcHNob3Q7 CiAJc2Nhbi0+aW5zdHJ1bWVudCA9IGluc3RydW1lbnQ7CisJc2Nhbi0+eHNfd2FudF9pdHVwID0g eHNfd2FudF9pdHVwOworCisJaWYgKGluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbWdldGJhdGNo ICE9IE5VTEwpCisJCWluZGV4X2JhdGNoX2luaXQoc2Nhbik7CiAKIAkvKiBwcmVwYXJlIHRvIGZl dGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwogCXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRh YmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXBSZWxhdGlvbik7CkBAIC0zODAsNiArMzgzLDE1IEBA IGluZGV4X3Jlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4sCiAJc2Nhbi0+a2lsbF9wcmlvcl90dXBs ZSA9IGZhbHNlOyAvKiBmb3Igc2FmZXR5ICovCiAJc2Nhbi0+eHNfaGVhcF9jb250aW51ZSA9IGZh bHNlOwogCisJLyoKKwkgKiBiYXRjaHF1ZXVlIHNob3VsZG4ndCBiZSBtYXJrZWQgZmluaXNoZWQg KG11c3QgbWFrZSBzdXJlIHRoYXQKKwkgKiBpbmRleF9iYXRjaF9yZXNldCBkb2Vzbid0IHNlZSB0 aGlzLCBzaW5jZSBpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZQorCSAqIHdpbGwgYmUgYWZmZWN0 ZWQpCisJICovCisJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKKworCWluZGV4X2JhdGNoX3Jlc2V0 KHNjYW4sIHRydWUpOworCiAJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFtcmVzY2Fu KHNjYW4sIGtleXMsIG5rZXlzLAogCQkJCQkJCQkJCQlvcmRlcmJ5cywgbm9yZGVyYnlzKTsKIH0K QEAgLTM5NCw2ICs0MDYsOSBAQCBpbmRleF9lbmRzY2FuKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlT Q0FOX0NIRUNLUzsKIAlDSEVDS19TQ0FOX1BST0NFRFVSRShhbWVuZHNjYW4pOwogCisJLyogQ2xl YW51cCBiYXRjaGluZywgc28gdGhhdCB0aGUgQU0gY2FuIHJlbGVhc2UgcGlucyBhbmQgc28gb24u ICovCisJaW5kZXhfYmF0Y2hfZW5kKHNjYW4pOworCiAJLyogUmVsZWFzZSByZXNvdXJjZXMgKGxp a2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAoc2Nhbi0+eHNfaGVh cGZldGNoKQogCXsKQEAgLTQyMiw5ICs0MzcsMTAgQEAgdm9pZAogaW5kZXhfbWFya3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCiB7CiAJU0NBTl9DSEVDS1M7Ci0JQ0hFQ0tfU0NBTl9QUk9DRURVUkUo YW1tYXJrcG9zKTsKKwlDSEVDS19TQ0FOX1BST0NFRFVSRShhbXBvc3Jlc2V0KTsKIAotCXNjYW4t PmluZGV4UmVsYXRpb24tPnJkX2luZGFtLT5hbW1hcmtwb3Moc2Nhbik7CisJLyogT25seSBhbWdl dGJhdGNoIGluZGV4IEFNcyBzdXBwb3J0IG1hcmsgYW5kIHJlc3RvcmUgKi8KKwlpbmRleF9iYXRj aF9tYXJrX3BvcyhzY2FuKTsKIH0KIAogLyogLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDQ4LDcgKzQ2 NCw4IEBAIGluZGV4X3Jlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlBc3NlcnQoSXNNVkND U25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpKTsKIAogCVNDQU5fQ0hFQ0tTOwotCUNIRUNLX1ND QU5fUFJPQ0VEVVJFKGFtcmVzdHJwb3MpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtZ2V0YmF0 Y2gpOworCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCiAJLyogcmVsZWFzZSBy ZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMgKi8KIAlpZiAo c2Nhbi0+eHNfaGVhcGZldGNoKQpAQCAtNDU3LDcgKzQ3NCw3IEBAIGluZGV4X3Jlc3RycG9zKElu ZGV4U2NhbkRlc2Mgc2NhbikKIAlzY2FuLT5raWxsX3ByaW9yX3R1cGxlID0gZmFsc2U7IC8qIGZv ciBzYWZldHkgKi8KIAlzY2FuLT54c19oZWFwX2NvbnRpbnVlID0gZmFsc2U7CiAKLQlzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1yZXN0cnBvcyhzY2FuKTsKKwlpbmRleF9iYXRjaF9y ZXN0b3JlX3BvcyhzY2FuKTsKIH0KIAogLyoKQEAgLTU3OSw2ICs1OTYsOCBAQCBpbmRleF9wYXJh bGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAJaWYgKHNjYW4tPnhzX2hlYXBmZXRjaCkK IAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIAorCWluZGV4 X2JhdGNoX3Jlc2V0KHNjYW4sIHRydWUpOworCiAJLyogYW1wYXJhbGxlbHJlc2NhbiBpcyBvcHRp b25hbDsgYXNzdW1lIG5vLW9wIGlmIG5vdCBwcm92aWRlZCBieSBBTSAqLwogCWlmIChzY2FuLT5p bmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbiAhPSBOVUxMKQogCQlzY2Fu LT5pbmRleFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1wYXJhbGxlbHJlc2NhbihzY2FuKTsKQEAgLTU5 MSw2ICs2MTAsNyBAQCBpbmRleF9wYXJhbGxlbHJlc2NhbihJbmRleFNjYW5EZXNjIHNjYW4pCiAg Ki8KIEluZGV4U2NhbkRlc2MKIGluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChSZWxhdGlvbiBoZWFw cmVsLCBSZWxhdGlvbiBpbmRleHJlbCwKKwkJCQkJCSBib29sIHhzX3dhbnRfaXR1cCwKIAkJCQkJ CSBJbmRleFNjYW5JbnN0cnVtZW50YXRpb24gKmluc3RydW1lbnQsCiAJCQkJCQkgaW50IG5rZXlz LCBpbnQgbm9yZGVyYnlzLAogCQkJCQkJIFBhcmFsbGVsSW5kZXhTY2FuRGVzYyBwc2NhbikKQEAg LTYxMyw2ICs2MzMsMTAgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhlYXBy ZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogCXNjYW4tPmhlYXBSZWxhdGlvbiA9IGhlYXByZWw7CiAJ c2Nhbi0+eHNfc25hcHNob3QgPSBzbmFwc2hvdDsKIAlzY2FuLT5pbnN0cnVtZW50ID0gaW5zdHJ1 bWVudDsKKwlzY2FuLT54c193YW50X2l0dXAgPSB4c193YW50X2l0dXA7CisKKwlpZiAoaW5kZXhy ZWwtPnJkX2luZGFtLT5hbWdldGJhdGNoICE9IE5VTEwpCisJCWluZGV4X2JhdGNoX2luaXQoc2Nh bik7CiAKIAkvKiBwcmVwYXJlIHRvIGZldGNoIGluZGV4IG1hdGNoZXMgZnJvbSB0YWJsZSAqLwog CXNjYW4tPnhzX2hlYXBmZXRjaCA9IHRhYmxlX2luZGV4X2ZldGNoX2JlZ2luKGhlYXByZWwpOwpA QCAtNjIxLDEwICs2NDUsMTQgQEAgaW5kZXhfYmVnaW5zY2FuX3BhcmFsbGVsKFJlbGF0aW9uIGhl YXByZWwsIFJlbGF0aW9uIGluZGV4cmVsLAogfQogCiAvKiAtLS0tLS0tLS0tLS0tLS0tCi0gKiBp bmRleF9nZXRuZXh0X3RpZCAtIGdldCB0aGUgbmV4dCBUSUQgZnJvbSBhIHNjYW4KKyAqIGluZGV4 X2dldG5leHRfdGlkIC0gYW1nZXR0dXBsZSBpbnRlcmZhY2UKICAqCiAgKiBUaGUgcmVzdWx0IGlz IHRoZSBuZXh0IFRJRCBzYXRpc2Z5aW5nIHRoZSBzY2FuIGtleXMsCiAgKiBvciBOVUxMIGlmIG5v IG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGV4aXN0LgorICoKKyAqIFRoaXMgc2hvdWxkIG9ubHkgYmUg Y2FsbGVkIGJ5IHRhYmxlIEFNJ3MgaW5kZXhfZ2V0bmV4dF9zbG90IGltcGxlbWVudGF0aW9uLAor ICogYW5kIG9ubHkgZ2l2ZW4gYW4gaW5kZXggQU0gdGhhdCBzdXBwb3J0cyB0aGUgc2luZ2xlLXR1 cGxlIGFtZ2V0dHVwbGUKKyAqIGludGVyZmFjZS4KICAqIC0tLS0tLS0tLS0tLS0tLS0KICAqLwog SXRlbVBvaW50ZXIKQEAgLTY2Nyw5NyArNjk1LDYgQEAgaW5kZXhfZ2V0bmV4dF90aWQoSW5kZXhT Y2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbikKIAlyZXR1cm4gJnNjYW4tPnhz X2hlYXB0aWQ7CiB9CiAKLS8qIC0tLS0tLS0tLS0tLS0tLS0KLSAqCQlpbmRleF9mZXRjaF9oZWFw IC0gZ2V0IHRoZSBzY2FuJ3MgbmV4dCBoZWFwIHR1cGxlCi0gKgotICogVGhlIHJlc3VsdCBpcyBh IHZpc2libGUgaGVhcCB0dXBsZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluZGV4IFRJRCBtb3N0Ci0g KiByZWNlbnRseSBmZXRjaGVkIGJ5IGluZGV4X2dldG5leHRfdGlkLCBvciBOVUxMIGlmIG5vIG1v cmUgbWF0Y2hpbmcgdHVwbGVzCi0gKiBleGlzdC4gIChUaGVyZSBjYW4gYmUgbW9yZSB0aGFuIG9u ZSBtYXRjaGluZyB0dXBsZSBiZWNhdXNlIG9mIEhPVCBjaGFpbnMsCi0gKiBhbHRob3VnaCB3aGVu IHVzaW5nIGFuIE1WQ0Mgc25hcHNob3QgaXQgc2hvdWxkIGJlIGltcG9zc2libGUgZm9yIG1vcmUg dGhhbgotICogb25lIHN1Y2ggdHVwbGUgdG8gZXhpc3QuKQotICoKLSAqIE9uIHN1Y2Nlc3MsIHRo ZSBidWZmZXIgY29udGFpbmluZyB0aGUgaGVhcCB0dXAgaXMgcGlubmVkICh0aGUgcGluIHdpbGwg YmUKLSAqIGRyb3BwZWQgaW4gYSBmdXR1cmUgaW5kZXhfZ2V0bmV4dF90aWQsIGluZGV4X2ZldGNo X2hlYXAgb3IgaW5kZXhfZW5kc2NhbgotICogY2FsbCkuCi0gKgotICogTm90ZTogY2FsbGVyIG11 c3QgY2hlY2sgc2Nhbi0+eHNfcmVjaGVjaywgYW5kIHBlcmZvcm0gcmVjaGVja2luZyBvZiB0aGUK LSAqIHNjYW4ga2V5cyBpZiByZXF1aXJlZC4gIFdlIGRvIG5vdCBkbyB0aGF0IGhlcmUgYmVjYXVz ZSB3ZSBkb24ndCBoYXZlCi0gKiBlbm91Z2ggaW5mb3JtYXRpb24gdG8gZG8gaXQgZWZmaWNpZW50 bHkgaW4gdGhlIGdlbmVyYWwgY2FzZS4KLSAqIC0tLS0tLS0tLS0tLS0tLS0KLSAqLwotYm9vbAot aW5kZXhfZmV0Y2hfaGVhcChJbmRleFNjYW5EZXNjIHNjYW4sIFR1cGxlVGFibGVTbG90ICpzbG90 KQotewotCWJvb2wJCWFsbF9kZWFkID0gZmFsc2U7Ci0JYm9vbAkJZm91bmQ7Ci0KLQlmb3VuZCA9 IHRhYmxlX2luZGV4X2ZldGNoX3R1cGxlKHNjYW4tPnhzX2hlYXBmZXRjaCwgJnNjYW4tPnhzX2hl YXB0aWQsCi0JCQkJCQkJCQlzY2FuLT54c19zbmFwc2hvdCwgc2xvdCwKLQkJCQkJCQkJCSZzY2Fu LT54c19oZWFwX2NvbnRpbnVlLCAmYWxsX2RlYWQpOwotCi0JaWYgKGZvdW5kKQotCQlwZ3N0YXRf Y291bnRfaGVhcF9mZXRjaChzY2FuLT5pbmRleFJlbGF0aW9uKTsKLQotCS8qCi0JICogSWYgd2Ug c2Nhbm5lZCBhIHdob2xlIEhPVCBjaGFpbiBhbmQgZm91bmQgb25seSBkZWFkIHR1cGxlcywgdGVs bCBpbmRleAotCSAqIEFNIHRvIGtpbGwgaXRzIGVudHJ5IGZvciB0aGF0IFRJRCAodGhpcyB3aWxs IHRha2UgZWZmZWN0IGluIHRoZSBuZXh0Ci0JICogYW1nZXR0dXBsZSBjYWxsLCBpbiBpbmRleF9n ZXRuZXh0X3RpZCkuICBXZSBkbyBub3QgZG8gdGhpcyB3aGVuIGluCi0JICogcmVjb3ZlcnkgYmVj YXVzZSBpdCBtYXkgdmlvbGF0ZSBNVkNDIHRvIGRvIHNvLiAgU2VlIGNvbW1lbnRzIGluCi0JICog UmVsYXRpb25HZXRJbmRleFNjYW4oKS4KLQkgKi8KLQlpZiAoIXNjYW4tPnhhY3RTdGFydGVkSW5S ZWNvdmVyeSkKLQkJc2Nhbi0+a2lsbF9wcmlvcl90dXBsZSA9IGFsbF9kZWFkOwotCi0JcmV0dXJu IGZvdW5kOwotfQotCi0vKiAtLS0tLS0tLS0tLS0tLS0tCi0gKgkJaW5kZXhfZ2V0bmV4dF9zbG90 IC0gZ2V0IHRoZSBuZXh0IHR1cGxlIGZyb20gYSBzY2FuCi0gKgotICogVGhlIHJlc3VsdCBpcyB0 cnVlIGlmIGEgdHVwbGUgc2F0aXNmeWluZyB0aGUgc2NhbiBrZXlzIGFuZCB0aGUgc25hcHNob3Qg d2FzCi0gKiBmb3VuZCwgZmFsc2Ugb3RoZXJ3aXNlLiAgVGhlIHR1cGxlIGlzIHN0b3JlZCBpbiB0 aGUgc3BlY2lmaWVkIHNsb3QuCi0gKgotICogT24gc3VjY2VzcywgcmVzb3VyY2VzIChsaWtlIGJ1 ZmZlciBwaW5zKSBhcmUgbGlrZWx5IHRvIGJlIGhlbGQsIGFuZCB3aWxsIGJlCi0gKiBkcm9wcGVk IGJ5IGEgZnV0dXJlIGluZGV4X2dldG5leHRfdGlkLCBpbmRleF9mZXRjaF9oZWFwIG9yIGluZGV4 X2VuZHNjYW4KLSAqIGNhbGwpLgotICoKLSAqIE5vdGU6IGNhbGxlciBtdXN0IGNoZWNrIHNjYW4t PnhzX3JlY2hlY2ssIGFuZCBwZXJmb3JtIHJlY2hlY2tpbmcgb2YgdGhlCi0gKiBzY2FuIGtleXMg aWYgcmVxdWlyZWQuICBXZSBkbyBub3QgZG8gdGhhdCBoZXJlIGJlY2F1c2Ugd2UgZG9uJ3QgaGF2 ZQotICogZW5vdWdoIGluZm9ybWF0aW9uIHRvIGRvIGl0IGVmZmljaWVudGx5IGluIHRoZSBnZW5l cmFsIGNhc2UuCi0gKiAtLS0tLS0tLS0tLS0tLS0tCi0gKi8KLWJvb2wKLWluZGV4X2dldG5leHRf c2xvdChJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uLCBUdXBsZVRh YmxlU2xvdCAqc2xvdCkKLXsKLQlmb3IgKDs7KQotCXsKLQkJaWYgKCFzY2FuLT54c19oZWFwX2Nv bnRpbnVlKQotCQl7Ci0JCQlJdGVtUG9pbnRlciB0aWQ7Ci0KLQkJCS8qIFRpbWUgdG8gZmV0Y2gg dGhlIG5leHQgVElEIGZyb20gdGhlIGluZGV4ICovCi0JCQl0aWQgPSBpbmRleF9nZXRuZXh0X3Rp ZChzY2FuLCBkaXJlY3Rpb24pOwotCi0JCQkvKiBJZiB3ZSdyZSBvdXQgb2YgaW5kZXggZW50cmll cywgd2UncmUgZG9uZSAqLwotCQkJaWYgKHRpZCA9PSBOVUxMKQotCQkJCWJyZWFrOwotCi0JCQlB c3NlcnQoSXRlbVBvaW50ZXJFcXVhbHModGlkLCAmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQl9Ci0K LQkJLyoKLQkJICogRmV0Y2ggdGhlIG5leHQgKG9yIG9ubHkpIHZpc2libGUgaGVhcCB0dXBsZSBm b3IgdGhpcyBpbmRleCBlbnRyeS4KLQkJICogSWYgd2UgZG9uJ3QgZmluZCBhbnl0aGluZywgbG9v cCBhcm91bmQgYW5kIGdyYWIgdGhlIG5leHQgVElEIGZyb20KLQkJICogdGhlIGluZGV4LgotCQkg Ki8KLQkJQXNzZXJ0KEl0ZW1Qb2ludGVySXNWYWxpZCgmc2Nhbi0+eHNfaGVhcHRpZCkpOwotCQlp ZiAoaW5kZXhfZmV0Y2hfaGVhcChzY2FuLCBzbG90KSkKLQkJCXJldHVybiB0cnVlOwotCX0KLQot CXJldHVybiBmYWxzZTsKLX0KLQogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWluZGV4X2dldGJp dG1hcCAtIGdldCBhbGwgdHVwbGVzIGF0IG9uY2UgZnJvbSBhbiBpbmRleCBzY2FuCiAgKgpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9iYWNr ZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwLi43ZmFkMDAwODQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvaW5kZXgvaW5kZXhiYXRjaC5jCkBAIC0wLDAgKzEsNTk2IEBACisvKi0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0KKyAqCisgKiBpbmRleGJhdGNoLmMKKyAqCSAgYW1nZXRiYXRjaCBpbXBsZW1lbnRhdGlvbiBy b3V0aW5lcworICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI1LCBQb3N0Z3Jl U1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAx OTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKgorICog SURFTlRJRklDQVRJT04KKyAqCSAgc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2gu YworICoKKyAqIElOVEVSRkFDRSBST1VUSU5FUworICoJCWluZGV4X2JhdGNoX2luaXQgLSBJbml0 aWFsaXplIGZpZWxkcyBuZWVkZWQgYnkgYmF0Y2hpbmcKKyAqCQlpbmRleF9iYXRjaF9yZXNldCAt IHJlc2V0IGEgYmF0Y2gKKyAqCQlpbmRleF9iYXRjaF9tYXJrX3BvcyAtIHNldCBhIG1hcmsgZnJv bSBjdXJyZW50IGJhdGNoIHBvc2l0aW9uCisgKgkJaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MgLSBy ZXN0b3JlIG1hcmsgdG8gY3VycmVudCBiYXRjaCBwb3NpdGlvbgorICoJCWluZGV4X2JhdGNoX2tp bGxfaXRlbSAtIHJlY29yZCBkZWFkIGluZGV4IHR1cGxlCisgKgkJaW5kZXhfYmF0Y2hfZW5kIC0g ZW5kIGJhdGNoCisgKgorICoJCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgLSB1bmxvY2sgYmF0 Y2gncyBidWZmZXIgbG9jaworICoJCWluZGV4YW1fdXRpbF9iYXRjaF9hbGxvYyAtIGFsbG9jYXRl IGFub3RoZXIgYmF0Y2gKKyAqCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZSAtIHJlbGVhc2Ug YWxsb2NhdGVkIGJhdGNoCisgKgorICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworI2luY2x1ZGUg InBvc3RncmVzLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvYW1hcGkuaCIKKyNpbmNsdWRlICJhY2Nl c3MvdGFibGVhbS5oIgorI2luY2x1ZGUgImNvbW1vbi9pbnQuaCIKKyNpbmNsdWRlICJsaWIvcXVu aXF1ZS5oIgorI2luY2x1ZGUgInBnc3RhdC5oIgorI2luY2x1ZGUgInV0aWxzL21lbWRlYnVnLmgi CisKK3N0YXRpYyBpbnQJYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEsIGNvbnN0IHZv aWQgKnZiKTsKK3N0YXRpYyB2b2lkIGJhdGNoX2RlYnVnX3ByaW50X2JhdGNoZXMoY29uc3QgY2hh ciAqbGFiZWwsIEluZGV4U2NhbkRlc2Mgc2Nhbik7CisKKy8qCisgKiBpbmRleF9iYXRjaF9pbml0 CisgKgkJSW5pdGlhbGl6ZSB2YXJpb3VzIGZpZWxkcyBhbmQgYXJyYXlzIG5lZWRlZCBieSBiYXRj aGluZy4KKyAqCisgKiBTZXRzIHVwIHRoZSBiYXRjaCBxdWV1ZSBzdHJ1Y3R1cmUgYW5kIGl0cyBp bml0aWFsIHJlYWQgcG9zaXRpb24uICBBbHNvCisgKiBkZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHNj YW4gd2lsbCBlYWdlcmx5IGRyb3AgaW5kZXggcGFnZSBwaW5zLgorICoKKyAqIE9ubHkgY2FsbCBo ZXJlIHdoZW4gYWxsIG9mIHRoZSBpbmRleCByZWxhdGVkIGZpZWxkcyBpbiAnc2Nhbicgd2VyZSBh bHJlYWR5CisgKiBpbml0aWFsaXplZC4KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfaW5pdChJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJLyogQm90aCBhbWdldGJhdGNoIGFuZCBhbWZyZWViYXRjaCBt dXN0IGJlIHByZXNlbnQgdG9nZXRoZXIgKi8KKwlBc3NlcnQoc2Nhbi0+aW5kZXhSZWxhdGlvbi0+ cmRfaW5kYW0tPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CisJQXNzZXJ0KHNjYW4tPmluZGV4UmVsYXRp b24tPnJkX2luZGFtLT5hbWZyZWViYXRjaCAhPSBOVUxMKTsKKworCXNjYW4tPmJhdGNocXVldWUg PSBwYWxsb2Nfb2JqZWN0KEJhdGNoUXVldWUpOworCisJLyoKKwkgKiBXZSBwcmVmZXIgdG8gZWFn ZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJlZm9yZSBhbWdldGJhdGNoIHJldHVybnMuCisJICog VGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sg b24gdGhlIHBhZ2UuCisJICoKKwkgKiBXZSBjYW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBp bnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMgZHVlIHRvIGEKKwkgKiByYWNlIGNvbmRpdGlvbiBp bnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFnZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgorCSAq IEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWluIGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1W Q0Mgc25hcHNob3QuCisJICoKKwkgKiBXaGVuIHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVj aGFuaXNtIHRoYXQgbWFya3MgaW5kZXggdHVwbGVzIGFzCisJICogTFBfREVBRCBoYXMgdG8gZGVh bCB3aXRoIGNvbmN1cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4gIFRoZSBzY2hlbWUKKwkgKiB1 c2VkIHRvIGRldGVjdCB1bnNhZmUgVElEIHJlY3ljbGluZyB3b24ndCB3b3JrIHdoZW4gc2Nhbm5p bmcgdW5sb2dnZWQKKwkgKiByZWxhdGlvbnMgKHNpbmNlIGl0IGludm9sdmVzIHNhdmluZyBhbiBh ZmZlY3RlZCBwYWdlJ3MgTFNOKS4gIE9wdCBvdXQKKwkgKiBvZiBlYWdlciBwaW4gZHJvcHBpbmcg ZHVyaW5nIHVubG9nZ2VkIHJlbGF0aW9uIHNjYW5zIGZvciBub3cuCisJICovCisJc2Nhbi0+ZHJv cFBpbiA9CisJCSghc2Nhbi0+eHNfd2FudF9pdHVwICYmIElzTVZDQ1NuYXBzaG90KHNjYW4tPnhz X3NuYXBzaG90KSAmJgorCQkgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSk7 CisJc2Nhbi0+ZmluaXNoZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rpb24g PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbjsKKworCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVldWUg b2YgYmF0Y2hlcyAqLworCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVhZFBv cyk7CisJYmF0Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKworCXNj YW4tPmJhdGNocXVldWUtPm1hcmtCYXRjaCA9IE5VTEw7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+aGVh ZEJhdGNoID0gMDsJLyogaW5pdGlhbCBoZWFkIGJhdGNoICovCisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBzdGFydHMgZW1wdHkgKi8KKwltZW1zZXQo JnNjYW4tPmJhdGNocXVldWUtPmNhY2hlLCAwLCBzaXplb2Yoc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2Fj aGUpKTsKK30KKworLyogLS0tLS0tLS0tLS0tLS0tLQorICoJCWluZGV4X2JhdGNoX3Jlc2V0IC0g cmVzZXQgYmF0Y2ggcXVldWUgYW5kIHJlYWQgcG9zaXRpb24KKyAqCisgKiBSZXNldHMgYWxsIGxv YWRlZCBiYXRjaGVzIGluIHRoZSBxdWV1ZSwgYW5kIHJlc2V0cyB0aGUgcmVhZCBwb3NpdGlvbiB0 byB0aGUKKyAqIGluaXRpYWwgc3RhdGUgKG9yIGp1c3QgaW5pdGlhbGl6ZSBxdWV1ZSBzdGF0ZSku ICBXaGVuICdjb21wbGV0ZScgaXMgdHJ1ZSwKKyAqIGFsc28gZnJlZXMgdGhlIHNjYW4ncyBtYXJr ZWQgYmF0Y2ggKGlmIGFueSksIHdoaWNoIGlzIHVzZWZ1bCB3aGVuIGVuZGluZyBhbgorICogYW1n ZXRiYXRjaC1iYXNlZCBpbmRleCBzY2FuLgorICogLS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lk CitpbmRleF9iYXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCit7 CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNocXVldWU7CisKKwkvKiBiYWls IG91dCBpZiBiYXRjaGluZyBub3QgZW5hYmxlZCAqLworCWlmICghYmF0Y2hxdWV1ZSkKKwkJcmV0 dXJuOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CisJYmF0Y2hfZGVidWdf cHJpbnRfYmF0Y2hlcygiaW5kZXhfYmF0Y2hfcmVzZXQiLCBzY2FuKTsKKwlBc3NlcnQoc2Nhbi0+ eHNfaGVhcGZldGNoKTsKKworCS8qIHJlc2V0IHRoZSBwb3NpdGlvbnMgKi8KKwliYXRjaF9yZXNl dF9wb3MoJmJhdGNocXVldWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBXaXRoICJjb21wbGV0ZSIg cmVzZXQsIG1ha2Ugc3VyZSB0byBhbHNvIGZyZWUgdGhlIG1hcmtlZCBiYXRjaCwgZWl0aGVyCisJ ICogYnkganVzdCBmb3JnZXR0aW5nIGl0IChpZiBpdCdzIHN0aWxsIGluIHRoZSBxdWV1ZSksIG9y IGJ5IGV4cGxpY2l0bHkKKwkgKiBmcmVlaW5nIGl0LgorCSAqLworCWlmIChjb21wbGV0ZSAmJiB1 bmxpa2VseShiYXRjaHF1ZXVlLT5tYXJrQmF0Y2ggIT0gTlVMTCkpCisJeworCQlCYXRjaFF1ZXVl SXRlbVBvcyAqbWFya1BvcyA9ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOworCQlCYXRjaEluZGV4U2Nh biBtYXJrQmF0Y2ggPSBiYXRjaHF1ZXVlLT5tYXJrQmF0Y2g7CisKKwkJLyogYWx3YXlzIHJlc2V0 IHRoZSBwb3NpdGlvbiwgZm9yZ2V0IHRoZSBtYXJrZWQgYmF0Y2ggKi8KKwkJYmF0Y2hxdWV1ZS0+ bWFya0JhdGNoID0gTlVMTDsKKworCQkvKgorCQkgKiBJZiB3ZSd2ZSBhbHJlYWR5IG1vdmVkIHBh c3QgdGhlIG1hcmtlZCBiYXRjaCAoaXQncyBub3QgaW4gdGhlCisJCSAqIGN1cnJlbnQgcXVldWUp LCBmcmVlIGl0IGV4cGxpY2l0bHkuIE90aGVyd2lzZSBpdCdsbCBiZSBpbiB0aGUgZnJlZWQKKwkJ ICogbGF0ZXIuCisJCSAqLworCQlpZiAobWFya1Bvcy0+YmF0Y2ggPCBiYXRjaHF1ZXVlLT5oZWFk QmF0Y2ggfHwKKwkJCW1hcmtQb3MtPmJhdGNoID49IGJhdGNocXVldWUtPm5leHRCYXRjaCkKKwkJ CWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsKKworCQkvKiByZXNldCBwb3NpdGlvbiBvbmx5 IGFmdGVyIHRoZSBxdWV1ZSByYW5nZSBjaGVjayAqLworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNo cXVldWUtPm1hcmtQb3MpOworCX0KKworCS8qIG5vdyByZWxlYXNlIGFsbCBvdGhlciBjdXJyZW50 bHkgbG9hZGVkIGJhdGNoZXMgKi8KKwl3aGlsZSAoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoIDwgYmF0 Y2hxdWV1ZS0+bmV4dEJhdGNoKQorCXsKKwkJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBJTkRFWF9T Q0FOX0JBVENIKHNjYW4sIGJhdGNocXVldWUtPmhlYWRCYXRjaCk7CisKKwkJREVCVUdfTE9HKCJm cmVlaW5nIGJhdGNoICVkICVwIiwgYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoLCBiYXRjaCk7CisKKwkJ YmF0Y2hfZnJlZShzY2FuLCBiYXRjaCk7CisKKwkJLyogdXBkYXRlIHRoZSB2YWxpZCByYW5nZSwg c28gdGhhdCBhc3NlcnRzIC8gZGVidWdnaW5nIHdvcmtzICovCisJCWJhdGNocXVldWUtPmhlYWRC YXRjaCsrOworCX0KKworCS8qIHJlc2V0IHJlbGV2YW50IGJhdGNoIHN0YXRlIGZpZWxkcyAqLwor CWJhdGNocXVldWUtPmhlYWRCYXRjaCA9IDA7CS8qIGluaXRpYWwgYmF0Y2ggKi8KKwliYXRjaHF1 ZXVlLT5uZXh0QmF0Y2ggPSAwOwkvKiBpbml0aWFsIGJhdGNoIGlzIGVtcHR5ICovCisKKwlzY2Fu LT5maW5pc2hlZCA9IGZhbHNlOworCisJYmF0Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7 Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9tYXJrX3BvcyAtIG1h cmsgY3VycmVudCBwb3NpdGlvbiBpbiBzY2FuIGZvciByZXN0b3JhdGlvbgorICoKKyAqIFNhdmVz IHRoZSBjdXJyZW50IHJlYWQgcG9zaXRpb24gYW5kIGFzc29jaWF0ZWQgYmF0Y2ggc28gdGhhdCB0 aGUgc2NhbiBjYW4KKyAqIGJlIHJlc3RvcmVkIHRvIHRoaXMgcG9pbnQgbGF0ZXIsIHZpYSBhIGNh bGwgdG8gaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MuCisgKiBUaGUgbWFya2VkIGJhdGNoIGlzIHJl dGFpbmVkIGFuZCBub3QgZnJlZWQgdW50aWwgYSBuZXcgbWFyayBpcyBzZXQgb3IgdGhlCisgKiBz Y2FuIGVuZHMgKG9yIHVudGlsIHRoZSBtYXJrIGlzIHJlc3RvcmVkKS4KKyAqIC0tLS0tLS0tLS0t LS0tLS0KKyAqLwordm9pZAoraW5kZXhfYmF0Y2hfbWFya19wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu KQoreworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCUJhdGNo UXVldWVJdGVtUG9zICptYXJrUG9zID0gJmJhdGNocXVldWUtPm1hcmtQb3M7CisJQmF0Y2hJbmRl eFNjYW4gbWFya0JhdGNoID0gYmF0Y2hxdWV1ZS0+bWFya0JhdGNoOworCisJLyoKKwkgKiBGcmVl IHRoZSBwcmV2aW91cyBtYXJrIGJhdGNoIChpZiBhbnkpLCBidXQgb25seSBpZiB0aGUgYmF0Y2gg aXMgbm8KKwkgKiBsb25nZXIgdmFsaWQgKGluIHRoZSBjdXJyZW50IGhlYWQvbmV4dCByYW5nZSku ICBOb3RlIHRoYXQgd2UgZG9uJ3QgaGF2ZQorCSAqIHRvIGRvIHRoaXMgaW4gdGhlIGNvbW1vbiBj YXNlIHdoZXJlIHdlIG1hcmsgYSBwb3NpdGlvbiB0aGF0IGNvbWVzIGZyb20KKwkgKiBvdXIgY3Vy cmVudCByZWFkQmF0Y2guCisJICovCisJaWYgKG1hcmtCYXRjaCAhPSBOVUxMICYmIChtYXJrUG9z LT5iYXRjaCA8IGJhdGNocXVldWUtPmhlYWRCYXRjaCB8fAorCQkJCQkJCSAgbWFya1Bvcy0+YmF0 Y2ggPj0gYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKSkKKwl7CisJCWJhdGNocXVldWUtPm1hcmtCYXRj aCA9IE5VTEw7CisJCWJhdGNoX2ZyZWUoc2NhbiwgbWFya0JhdGNoKTsKKwl9CisKKwkvKiBjb3B5 IHRoZSByZWFkIHBvc2l0aW9uICovCisJYmF0Y2hxdWV1ZS0+bWFya1BvcyA9IGJhdGNocXVldWUt PnJlYWRQb3M7CisJYmF0Y2hxdWV1ZS0+bWFya0JhdGNoID0gSU5ERVhfU0NBTl9CQVRDSChzY2Fu LCBiYXRjaHF1ZXVlLT5tYXJrUG9zLmJhdGNoKTsKKworCS8qIHJlYWRQb3MvbWFya1BvcyBtdXN0 IGJlIHZhbGlkICovCisJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCAmYmF0Y2hxdWV1ZS0+ bWFya1Bvcyk7Cit9CisKKy8qIC0tLS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9yZXN0 b3JlX3BvcyAtIHJlc3RvcmUgc2NhbiB0byBhIHByZXZpb3VzbHkgbWFya2VkIHBvc2l0aW9uCisg KgorICogUmVzdG9yZXMgdGhlIHNjYW4gdG8gYSBwb3NpdGlvbiBwcmV2aW91c2x5IHNhdmVkIGJ5 IGluZGV4X2JhdGNoX21hcmtfcG9zLgorICogVGhlIG1hcmtlZCBiYXRjaCBpcyByZXN0b3JlZCBh cyB0aGUgY3VycmVudCBiYXRjaCwgYWxsb3dpbmcgdGhlIHNjYW4gdG8KKyAqIHJlc3VtZSBmcm9t IHRoZSBtYXJrZWQgcG9zaXRpb24uICBBbHNvIG5vdGlmaWVzIHRoZSBpbmRleCBBTSB2aWEgYSBj YWxsIHRvCisgKiBpdHMgYW1wb3NyZXNldCByb3V0aW5lLCB3aGljaCBhbGxvd3MgaXQgdG8gaW52 YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQorICogdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyBz Y2FuIHByb2dyZXNzIChzdWNoIGFzIGFycmF5IGtleSBzdGF0ZSkKKyAqCisgKiBGdW5jdGlvbiBj dXJyZW50bHkganVzdCBkaXNjYXJkcyBtb3N0IGJhdGNoIHF1ZXVlIHN0YXRlLiAgSXQgbWlnaHQg bWFrZQorICogc2Vuc2UgdG8gdGVhY2ggaXQgdG8gaG9sZCBvbiB0byBvdGhlciBuZWFyYnkgYmF0 Y2hlcyAoc3RpbGwtaGVsZCBiYXRjaGVzCisgKiB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgbmVlZGVk IG9uY2UgdGhlIHNjYW4gZmluaXNoZXMgcmV0dXJuaW5nIG1hdGNoaW5nCisgKiBpdGVtcyBmcm9t IHRoZSByZXN0b3JlZCBiYXRjaCkgYXMgYW4gb3B0aW1pemF0aW9uLiAgU3VjaCBhIHNjaGVtZSB3 b3VsZAorICogaGF2ZSB0aGUgYmVuZWZpdCBvZiBhdm9pZGluZyByZXBlYXQgY2FsbHMgdG8gYW1n ZXRiYXRjaC9yZXBlYXRlZGx5IHJlYWRpbmcKKyAqIHRoZSBzYW1lIGluZGV4IHBhZ2VzLgorICog LS0tLS0tLS0tLS0tLS0tLQorICovCit2b2lkCitpbmRleF9iYXRjaF9yZXN0b3JlX3BvcyhJbmRl eFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJhdGNo cXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKm1hcmtQb3MgPSAmYmF0Y2hxdWV1ZS0+bWFya1Bv czsKKwlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9zOwor CUJhdGNoSW5kZXhTY2FuIG1hcmtCYXRjaCA9IGJhdGNocXVldWUtPm1hcmtCYXRjaDsKKworCWlm IChyZWFkUG9zLT5iYXRjaCA9PSBtYXJrUG9zLT5iYXRjaCAmJgorCQlyZWFkUG9zLT5iYXRjaCA9 PSBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gpCisJeworCQkvKgorCQkgKiBXZSBkb24ndCBoYXZlIHRv IGRpc2NhcmQgdGhlIHNjYW4ncyBzdGF0ZSBhZnRlciBhbGwsIHNpbmNlIHRoZQorCQkgKiBjdXJy ZW50IGhlYWRCYXRjaCBpcyBhbHNvIHRoZSBiYXRjaCB0aGF0IHdlJ3JlIHJlc3RvcmluZyB0bwor CQkgKi8KKwkJcmVhZFBvcy0+aXRlbSA9IG1hcmtQb3MtPml0ZW07CisJCXJldHVybjsKKwl9CisK KwkvKgorCSAqIENhbGwgYW1wb3NyZXNldCB0byBsZXQgaW5kZXggQU0ga25vdyB0byBpbnZhbGlk YXRlIGFueSBwcml2YXRlIHN0YXRlCisJICogdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUg c2NhbidzIHByb2dyZXNzCisJICovCisJc2Nhbi0+aW5kZXhSZWxhdGlvbi0+cmRfaW5kYW0tPmFt cG9zcmVzZXQoc2NhbiwgbWFya0JhdGNoKTsKKworCS8qCisJICogUmVzZXQgdGhlIGJhdGNoaW5n IHN0YXRlLCBleGNlcHQgZm9yIHRoZSBtYXJrZWQgYmF0Y2gsIGFuZCBtYWtlIGl0IGxvb2sKKwkg KiBsaWtlIHdlIGhhdmUgYSBzaW5nbGUgYmF0Y2ggLS0gdGhlIG1hcmtlZCBvbmUuCisJICovCisJ aW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgZmFsc2UpOworCisJYmF0Y2hxdWV1ZS0+cmVhZFBvcyA9 ICptYXJrUG9zOworCWJhdGNocXVldWUtPmhlYWRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoOworCWJh dGNocXVldWUtPm5leHRCYXRjaCA9IG1hcmtQb3MtPmJhdGNoICsgMTsKKworCUlOREVYX1NDQU5f QkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bWFya1Bvcy5iYXRjaCkgPSBtYXJrQmF0Y2g7CisJYmF0 Y2hxdWV1ZS0+bWFya0JhdGNoID0gbWFya0JhdGNoOworfQorCisvKgorICogYmF0Y2hfZnJlZQor ICoJCVJlbGVhc2UgcmVzb3VyY2VzIGFzc29jaWF0ZWQgd2l0aCBhIGJhdGNoIHJldHVybmVkIGJ5 IHRoZSBpbmRleCBBTS4KKyAqCisgKiBDYWxsZWQgYnkgdGFibGUgQU0ncyBvcmRlcmVkIGluZGV4 IHNjYW4gaW1wbGVtZW50YXRpb24gd2hlbiBpdCBpcyBmaW5pc2hlZAorICogd2l0aCBhIGJhdGNo IGFuZCB3aXNoZXMgdG8gcmVsZWFzZSBpdHMgcmVzb3VyY2VzLgorICoKKyAqIFRoaXMgY2FsbHMg dGhlIGluZGV4IEFNJ3MgYW1mcmVlYmF0Y2ggY2FsbGJhY2sgdG8gcmVsZWFzZSBBTS1zcGVjaWZp YworICogcmVzb3VyY2VzLCBhbmQgdG8gc2V0IExQX0RFQUQgYml0cyBvbiB0aGUgYmF0Y2gncyBp bmRleCBwYWdlLiAgSXQgaXNuJ3QKKyAqIHNhZmUgZm9yIHRhYmxlIEFNcyB0byBmZXRjaCB0YWJs ZSB0dXBsZXMgdXNpbmcgVElEcyBzYXZlZCBmcm9tIGEgYmF0Y2ggdGhhdAorICogd2FzIGFscmVh ZHkgZnJlZWQ6ICdkcm9wUGluJyBzY2FucyBuZWVkIHRoZSBpbmRleCBBTSB0byByZXRhaW4gYSBw aW4gb24gdGhlCisgKiBUSUQncyBpbmRleCBwYWdlLCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBj b25jdXJyZW50IFRJRCByZWN5Y2xpbmcuCisgKi8KK3ZvaWQKK2JhdGNoX2ZyZWUoSW5kZXhTY2Fu RGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwliYXRjaF9hc3NlcnRfYmF0Y2hf dmFsaWQoc2NhbiwgYmF0Y2gpOworCisJLyogZG9uJ3QgZnJlZSB0aGUgYmF0Y2ggdGhhdCBpcyBt YXJrZWQgKi8KKwlpZiAoYmF0Y2ggPT0gc2Nhbi0+YmF0Y2hxdWV1ZS0+bWFya0JhdGNoKQorCQly ZXR1cm47CisKKwkvKgorCSAqIGtpbGxlZEl0ZW1zW10gaXMgbm93IGluIHdoYXRldmVyIG9yZGVy IHRoZSBzY2FuIHJldHVybmVkIGl0ZW1zIGluLgorCSAqIFNjcm9sbGFibGUgY3Vyc29yIHNjYW5z IG1pZ2h0IGhhdmUgZXZlbiBzYXZlZCB0aGUgc2FtZSBpdGVtL1RJRCB0d2ljZS4KKwkgKgorCSAq IFNvcnQgYW5kIHVuaXF1ZS1pZnkga2lsbGVkSXRlbXNbXS4gIFRoYXQgd2F5IHRoZSBpbmRleCBB TSBjYW4gc2FmZWx5CisJICogYXNzdW1lIHRoYXQgaXRlbXMgd2lsbCBhbHdheXMgYmUgaW4gdGhl aXIgb3JpZ2luYWwgaW5kZXggcGFnZSBvcmRlci4KKwkgKi8KKwlpZiAoYmF0Y2gtPm51bUtpbGxl ZCA+IDEpCisJeworCQlxc29ydChiYXRjaC0+a2lsbGVkSXRlbXMsIGJhdGNoLT5udW1LaWxsZWQs IHNpemVvZihpbnQpLAorCQkJICBiYXRjaF9jb21wYXJlX2ludCk7CisJCWJhdGNoLT5udW1LaWxs ZWQgPSBxdW5pcXVlKGJhdGNoLT5raWxsZWRJdGVtcywgYmF0Y2gtPm51bUtpbGxlZCwKKwkJCQkJ CQkJICAgc2l6ZW9mKGludCksIGJhdGNoX2NvbXBhcmVfaW50KTsKKwl9CisKKwlzY2FuLT5pbmRl eFJlbGF0aW9uLT5yZF9pbmRhbS0+YW1mcmVlYmF0Y2goc2NhbiwgYmF0Y2gpOworfQorCisvKiAt LS0tLS0tLS0tLS0tLS0tCisgKgkJaW5kZXhfYmF0Y2hfa2lsbF9pdGVtIC0gcmVjb3JkIGl0ZW0g Zm9yIGRlZmVycmVkIExQX0RFQUQgbWFya2luZworICoKKyAqIFJlY29yZHMgdGhlIGl0ZW0gaW5k ZXggb2YgdGhlIGN1cnJlbnRseS1yZWFkIHR1cGxlIGluIHJlYWRCYXRjaCdzCisgKiBraWxsZWRJ dGVtcyBhcnJheS4gVGhlIGl0ZW1zJyBpbmRleCB0dXBsZXMgd2lsbCBsYXRlciBiZSBtYXJrZWQg TFBfREVBRAorICogd2hlbiBjdXJyZW50IHJlYWRCYXRjaCBpcyBmcmVlZCBieSBhbWZyZWViYXRj aCByb3V0aW5lIChzZWUgYmF0Y2hfZnJlZSkuCisgKiAtLS0tLS0tLS0tLS0tLS0tCisgKi8KK3Zv aWQKK2luZGV4X2JhdGNoX2tpbGxfaXRlbShJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hR dWV1ZUl0ZW1Qb3MgKnJlYWRQb3MgPSAmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVhZFBvczsKKwlCYXRj aEluZGV4U2NhbiByZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sIHJlYWRQb3MtPmJh dGNoKTsKKworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgcmVhZFBvcyk7CisKKwlpZiAo cmVhZEJhdGNoLT5raWxsZWRJdGVtcyA9PSBOVUxMKQorCQlyZWFkQmF0Y2gtPmtpbGxlZEl0ZW1z ID0gcGFsbG9jX2FycmF5KGludCwgc2Nhbi0+bWF4aXRlbXNiYXRjaCk7CisJaWYgKHJlYWRCYXRj aC0+bnVtS2lsbGVkIDwgc2Nhbi0+bWF4aXRlbXNiYXRjaCkKKwkJcmVhZEJhdGNoLT5raWxsZWRJ dGVtc1tyZWFkQmF0Y2gtPm51bUtpbGxlZCsrXSA9IHJlYWRQb3MtPml0ZW07Cit9CisKKy8qIC0t LS0tLS0tLS0tLS0tLS0KKyAqCQlpbmRleF9iYXRjaF9lbmQgLSBlbmQgYSBiYXRjaCBzY2FuIGFu ZCBmcmVlIGFsbCByZXNvdXJjZXMKKyAqCisgKiBDYWxsZWQgd2hlbiBhbiBpbmRleCBzY2FuIGlz IGJlaW5nIGVuZGVkLCByaWdodCBiZWZvcmUgdGhlIG93bmluZyBzY2FuCisgKiBkZXNjcmlwdG9y IGdvZXMgYXdheS4gIENsZWFucyB1cCBhbGwgYmF0Y2ggcmVsYXRlZCByZXNvdXJjZXMuCisgKiAt LS0tLS0tLS0tLS0tLS0tCisgKi8KK3ZvaWQKK2luZGV4X2JhdGNoX2VuZChJbmRleFNjYW5EZXNj IHNjYW4pCit7CisJaW5kZXhfYmF0Y2hfcmVzZXQoc2NhbiwgdHJ1ZSk7CisKKwkvKiBiYWlsIG91 dCB3aXRob3V0IGJhdGNoaW5nICovCisJaWYgKCFzY2FuLT5iYXRjaHF1ZXVlKQorCQlyZXR1cm47 CisKKwlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQor CXsKKwkJQmF0Y2hJbmRleFNjYW4gY2FjaGVkID0gc2Nhbi0+YmF0Y2hxdWV1ZS0+Y2FjaGVbaV07 CisKKwkJaWYgKGNhY2hlZCA9PSBOVUxMKQorCQkJY29udGludWU7CisKKwkJaWYgKGNhY2hlZC0+ a2lsbGVkSXRlbXMpCisJCQlwZnJlZShjYWNoZWQtPmtpbGxlZEl0ZW1zKTsKKwkJaWYgKGNhY2hl ZC0+Y3VyclR1cGxlcykKKwkJCXBmcmVlKGNhY2hlZC0+Y3VyclR1cGxlcyk7CisJCXBmcmVlKGNh Y2hlZCk7CisJfQorCisJcGZyZWUoc2Nhbi0+YmF0Y2hxdWV1ZSk7Cit9CisKKy8qIC0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAqCQkJdXRpbGl0eSBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFtZ2V0YmF0Y2ggaW5kZXggQU1zCisg KgorICogVGhlc2UgZnVuY3Rpb25zIG1hbmFnZSBiYXRjaCBhbGxvY2F0aW9uLCB1bmxvY2svcGlu IG1hbmFnZW1lbnQsIGFuZCBiYXRjaAorICogcmVzb3VyY2UgcmVjeWNsaW5nLiAgSW5kZXggQU1z IGltcGxlbWVudGluZyBhbWdldGJhdGNoIHNob3VsZCB1c2UgdGhlc2UKKyAqIHJhdGhlciB0aGFu IG1hbmFnaW5nIGJ1ZmZlcnMgZGlyZWN0bHkuCisgKiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgKi8KKworLyoKKyAqIGlu ZGV4YW1fdXRpbF9iYXRjaF91bmxvY2sgLSBEcm9wIGxvY2sgYW5kIGNvbmRpdGlvbmFsbHkgZHJv cCBwaW4gb24gYmF0Y2ggcGFnZQorICoKKyAqIFVubG9ja3MgY2FsbGVyJ3MgYmF0Y2gtPmJ1ZiBp biBwcmVwYXJhdGlvbiBmb3IgYW1nZXRiYXRjaCByZXR1cm5pbmcgaXRlbXMKKyAqIHNhdmVkIGlu IHRoYXQgYmF0Y2guICBNYW5hZ2VzIHRoZSBkZXRhaWxzIG9mIGRyb3BwaW5nIHRoZSBsb2NrIGFu ZCBwb3NzaWJseQorICogdGhlIHBpbiBmb3IgaW5kZXggQU0gY2FsbGVyIChkcm9wcGluZyB0aGUg cGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nCisgKiBvbiBhY3F1aXJpbmcgYSBjbGVh bnVwIGxvY2ssIGJ1dCBpc24ndCBhbHdheXMgc2FmZSkuCisgKgorICogT25seSBjYWxsIGhlcmUg d2hlbiBhIGJhdGNoIGhhcyBvbmUgb3IgbW9yZSBtYXRjaGluZyBpdGVtcyB0byByZXR1cm4gdXNp bmcKKyAqIGFtZ2V0YmF0Y2ggKG9yIGZvciBhbWdldGJpdG1hcCB0byBsb2FkIGludG8gaXRzIGJp dG1hcCBvZiBtYXRjaGluZyBUSURzKS4KKyAqIFdoZW4gYW4gaW5kZXggcGFnZSBoYXMgbm8gbWF0 Y2hlcywgaXQncyBhbHdheXMgc2FmZSBmb3IgaW5kZXggQU1zIHRvIGRyb3AKKyAqIGJvdGggdGhl IGxvY2sgYW5kIHRoZSBwaW4gZm9yIHRoZW1zZWx2ZXMuCisgKgorICogTm90ZTogSXQgaXMgY29u dmVuaWVudCBmb3IgaW5kZXggQU1zIHRoYXQgaW1wbGVtZW50IGJvdGggYW1nZXRiaXRtYXAgYW5k CisgKiBhbWdldGJpdG1hcCB0byBjb25zaXN0ZW50bHkgdXNlIHRoZSBzYW1lIGJhdGNoIG1hbmFn ZW1lbnQgYXBwcm9hY2gsIHNpbmNlCisgKiB0aGF0IGF2b2lkcyBpbnRyb2R1Y2luZyBzcGVjaWFs IGNhc2VzIHRvIGxvd2VyLWxldmVsIGNvZGUuICBXZSBhbHdheXMgZHJvcAorICogYm90aCB0aGUg bG9jayBhbmQgdGhlIHBpbiBvbiBiYXRjaCdzIHBhZ2Ugb24gYmVoYWxmIG9mIGFtZ2V0Yml0bWFw IGNhbGxlcnMuCisgKiBTdWNoIGFtZ2V0Yml0bWFwIGNhbGxlcnMgbXVzdCBiZSBjYXJlZnVsIHRv IGZyZWUgYWxsIGJhdGNoZXMgd2l0aCBtYXRjaGluZworICogaXRlbXMgb25jZSB0aGV5J3JlIGRv bmUgc2F2aW5nIHRoZSBtYXRjaGluZyBUSURzICh0aGVyZSB3aWxsIG5ldmVyIGJlIGFueQorICog Y2FsbHMgdG8gYW1mcmVlYmF0Y2gsIHNvIGFtZ2V0Yml0bWFwIG11c3QgY2FsbCBpbmRleGFtX3V0 aWxfYmF0Y2hfcmVsZWFzZQorICogZGlyZWN0bHksIGluIGxpZXUgb2YgYSBkZWZlcnJlZCBjYWxs IHRvIGFtZnJlZWJhdGNoIGZyb20gY29yZSBjb2RlKS4KKyAqLwordm9pZAoraW5kZXhhbV91dGls X2JhdGNoX3VubG9jayhJbmRleFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQor eworCVJlbGF0aW9uCXJlbCA9IHNjYW4tPmluZGV4UmVsYXRpb247CisJYm9vbAkJZHJvcFBpbiA9 IHNjYW4tPmRyb3BQaW47CisKKwkvKiBiYXRjaCBtdXN0IGhhdmUgb25lIG9yIG1vcmUgbWF0Y2hp bmcgaXRlbXMgcmV0dXJuZWQgYnkgaW5kZXggQU0gKi8KKwlBc3NlcnQoYmF0Y2gtPmZpcnN0SXRl bSA+PSAwICYmIGJhdGNoLT5maXJzdEl0ZW0gPD0gYmF0Y2gtPmxhc3RJdGVtKTsKKworCWlmICgh ZHJvcFBpbikKKwl7CisJCWlmICghUmVsYXRpb25Vc2VzTG9jYWxCdWZmZXJzKHJlbCkpCisJCQlW QUxHUklORF9NQUtFX01FTV9OT0FDQ0VTUyhCdWZmZXJHZXRQYWdlKGJhdGNoLT5idWYpLCBCTENL U1opOworCisJCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRoZSBwaW4pICovCisJCUxvY2tC dWZmZXIoYmF0Y2gtPmJ1ZiwgQlVGRkVSX0xPQ0tfVU5MT0NLKTsKKwkJcmV0dXJuOworCX0KKwor CWlmIChzY2FuLT5iYXRjaHF1ZXVlKQorCXsKKwkJLyogYW1nZXRiYXRjaCAobm90IGFtZ2V0Yml0 bWFwKSBjYWxsZXIgKi8KKwkJQXNzZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKKwor CQkvKgorCQkgKiBIYXZlIHRvIHNldCBiYXRjaC0+bHNuIHNvIHRoYXQgYW1mcmVlYmF0Y2ggaGFz IGEgd2F5IHRvIGRldGVjdCB3aGVuCisJCSAqIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5n IGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgorCQkgKiBJdCdsbCBvbmx5IGJlIHNh ZmUgdG8gc2V0IGFueSBpbmRleCB0dXBsZSBMUF9ERUFEIGJpdHMgd2hlbiB0aGUKKwkJICogcGFn ZSBMU04gaGFzbid0IGFkdmFuY2VkLgorCQkgKi8KKwkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwo cmVsKSk7CisJCUFzc2VydCghc2Nhbi0+eHNfd2FudF9pdHVwKTsKKwkJYmF0Y2gtPmxzbiA9IEJ1 ZmZlckdldExTTkF0b21pYyhiYXRjaC0+YnVmKTsKKwl9CisKKwkvKiBEcm9wIGJvdGggdGhlIGxv Y2sgYW5kIHRoZSBwaW4gKi8KKwlMb2NrQnVmZmVyKGJhdGNoLT5idWYsIEJVRkZFUl9MT0NLX1VO TE9DSyk7CisJaWYgKCFSZWxhdGlvblVzZXNMb2NhbEJ1ZmZlcnMocmVsKSkKKwkJVkFMR1JJTkRf TUFLRV9NRU1fTk9BQ0NFU1MoQnVmZmVyR2V0UGFnZShiYXRjaC0+YnVmKSwgQkxDS1NaKTsKKwlS ZWxlYXNlQnVmZmVyKGJhdGNoLT5idWYpOworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOwor fQorCisvKgorICogaW5kZXhhbV91dGlsX2JhdGNoX2FsbG9jCisgKgkJQWxsb2NhdGUgYSBiYXRj aCBkdXJpbmcgYSBhbWdldGJhdGNoIChvciBhbWdldGJpdG1hcCkgaW5kZXggc2Nhbi4KKyAqCisg KiBSZXR1cm5zIEJhdGNoSW5kZXhTY2FuIHdpdGggc3BhY2UgdG8gZml0IHNjYW4tPm1heGl0ZW1z YmF0Y2gtbWFueQorICogQmF0Y2hNYXRjaGluZ0l0ZW0gZW50cmllcy4gIFRoaXMgd2lsbCBlaXRo ZXIgYmUgYSBuZXdseSBhbGxvY2F0ZWQgYmF0Y2gsIG9yCisgKiBhIGJhdGNoIHJlY3ljbGVkIGZy b20gdGhlIGNhY2hlIG1hbmFnZWQgYnkgaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVhc2UuICBTZWUK KyAqIGNvbW1lbnRzIGFib3ZlIGluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlLgorICoKKyAqIElu ZGV4IEFNcyB0aGF0IHVzZSBiYXRjaGVzIHNob3VsZCBjYWxsIHRoaXMgZnJvbSBlaXRoZXIgdGhl aXIgYW1nZXRiYXRjaCBvcgorICogYW1nZXRiaXRtYXAgcm91dGluZXMgb25seS4gIE5vdGUgaW4g cGFydGljdWxhciB0aGF0IGl0IGNhbm5vdCBzYWZlbHkgYmUKKyAqIGNhbGxlZCBmcm9tIGEgYW1m cmVlYmF0Y2ggcm91dGluZS4KKyAqLworQmF0Y2hJbmRleFNjYW4KK2luZGV4YW1fdXRpbF9iYXRj aF9hbGxvYyhJbmRleFNjYW5EZXNjIHNjYW4pCit7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBO VUxMOworCisJLyogRmlyc3QgbG9vayBmb3IgYW4gZXhpc3RpbmcgYmF0Y2ggZnJvbSBxdWV1ZSdz IGNhY2hlIG9mIGJhdGNoZXMgKi8KKwlpZiAoc2Nhbi0+YmF0Y2hxdWV1ZSAhPSBOVUxMKQorCXsK KwkJZm9yIChpbnQgaSA9IDA7IGkgPCBJTkRFWF9TQ0FOX0NBQ0hFX0JBVENIRVM7IGkrKykKKwkJ eworCQkJaWYgKHNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldICE9IE5VTEwpCisJCQl7CisJCQkJ LyogUmV0dXJuIGNhY2hlZCB1bnJlZmVyZW5jZWQgYmF0Y2ggKi8KKwkJCQliYXRjaCA9IHNjYW4t PmJhdGNocXVldWUtPmNhY2hlW2ldOworCQkJCXNjYW4tPmJhdGNocXVldWUtPmNhY2hlW2ldID0g TlVMTDsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWlmICghYmF0Y2gpCisJeworCQli YXRjaCA9IHBhbGxvYyhvZmZzZXRvZihCYXRjaEluZGV4U2NhbkRhdGEsIGl0ZW1zKSArCisJCQkJ CSAgIHNpemVvZihCYXRjaE1hdGNoaW5nSXRlbSkgKiBzY2FuLT5tYXhpdGVtc2JhdGNoKTsKKwor CQkvKgorCQkgKiBJZiB3ZSBhcmUgZG9pbmcgYW4gaW5kZXgtb25seSBzY2FuLCB3ZSBuZWVkIGEg dHVwbGUgc3RvcmFnZQorCQkgKiB3b3Jrc3BhY2UuIFdlIGFsbG9jYXRlIEJMQ0tTWiBmb3IgdGhp cywgd2hpY2ggc2hvdWxkIGFsd2F5cyBnaXZlCisJCSAqIHRoZSBpbmRleCBBTSBlbm91Z2ggc3Bh Y2UgdG8gZml0IGEgZnVsbCBwYWdlJ3Mgd29ydGggb2YgdHVwbGVzLgorCQkgKi8KKwkJYmF0Y2gt PmN1cnJUdXBsZXMgPSBOVUxMOworCQlpZiAoc2Nhbi0+eHNfd2FudF9pdHVwKQorCQkJYmF0Y2gt PmN1cnJUdXBsZXMgPSBwYWxsb2MoQkxDS1NaKTsKKworCQkvKgorCQkgKiBCYXRjaGVzIGFsbG9j YXRlIGtpbGxlZEl0ZW1zIGxhemlseSAodGhvdWdoIG5vdGUgdGhhdCBjYWNoZWQKKwkJICogYmF0 Y2hlcyBrZWVwIHRoZWlyIGtpbGxlZEl0ZW1zIGFsbG9jYXRpb24gd2hlbiByZWN5Y2xlZCkKKwkJ ICovCisJCWJhdGNoLT5raWxsZWRJdGVtcyA9IE5VTEw7CisJfQorCisJLyogeHNfd2FudF9pdHVw IHNjYW5zIG11c3QgZ2V0IGEgY3VyclR1cGxlcyBzcGFjZSAqLworCUFzc2VydCghKHNjYW4tPnhz X3dhbnRfaXR1cCAmJiAoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCkpKTsKKworCS8qIHNoYXJl ZCBpbml0aWFsaXphdGlvbiAqLworCWJhdGNoLT5idWYgPSBJbnZhbGlkQnVmZmVyOworCWJhdGNo LT5maXJzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bGFzdEl0ZW0gPSAtMTsKKwliYXRjaC0+bnVtS2ls bGVkID0gMDsKKworCXJldHVybiBiYXRjaDsKK30KKworLyoKKyAqIGluZGV4YW1fdXRpbF9iYXRj aF9yZWxlYXNlCisgKgkJRWl0aGVyIHN0YXNoIHRoZSBiYXRjaCBpbiBhIHNtYWxsIGNhY2hlIGZv ciByZXVzZSwgb3IgZnJlZSBpdC4KKyAqCisgKiBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBieSBp bmRleCBBTXMgdG8gcmVsZWFzZSBhIGJhdGNoIGFsbG9jYXRlZCBieQorICogaW5kZXhhbV91dGls X2JhdGNoX2FsbG9jLiAgQmF0Y2hlcyBhcmUgY2FjaGVkIGhlcmUgZm9yIHJldXNlICh3aGVuIHNj YW4KKyAqIGhhc24ndCBhbHJlYWR5IGZpbmlzaGVkKSB0byByZWR1Y2UgcGFsbG9jL3BmcmVlIG92 ZXJoZWFkLgorICoKKyAqIEl0J3Mgc2FmZSB0byByZWxlYXNlIGEgYmF0Y2ggaW1tZWRpYXRlbHkg d2hlbiBpdCB3YXMgdXNlZCB0byByZWFkIGEgcGFnZQorICogdGhhdCByZXR1cm5lZCBubyBtYXRj aGVzIHRvIHRoZSBzY2FuLiAgQmF0Y2hlcyBhY3R1YWxseSByZXR1cm5lZCBieSBpbmRleAorICog QU0ncyBhbWdldGJhdGNoIHJvdXRpbmUgKGkuZS4gYmF0Y2hlcyBmb3IgcGFnZXMgd2l0aCBvbmUg b3IgbW9yZSBtYXRjaGVzKQorICogbXVzdCBiZSByZWxlYXNlZCBieSBjYWxsaW5nIGhlcmUgYXQg dGhlIGVuZCBvZiB0aGVpciBhbWZyZWViYXRjaCByb3V0aW5lLgorICogSW5kZXggQU1zIHRoYXQg dXNlcyBiYXRjaGVzIHNob3VsZCBjYWxsIGhlcmUgdG8gcmVsZWFzZSBhIGJhdGNoIGZyb20gYW55 IG9mCisgKiB0aGVpciBhbWdldGJhdGNoLCBhbWdldGJpdG1hcCwgYW5kIGFtZnJlZWJhdGNoIHJv dXRpbmVzLgorICovCit2b2lkCitpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShJbmRleFNjYW5E ZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIGJhdGNoKQoreworCUFzc2VydChiYXRjaC0+YnVmID09 IEludmFsaWRCdWZmZXIpOworCisJaWYgKHNjYW4tPmJhdGNocXVldWUpCisJeworCQkvKiBhbWdl dGJhdGNoIHNjYW4gY2FsbGVyICovCisJCUFzc2VydChzY2FuLT5oZWFwUmVsYXRpb24gIT0gTlVM TCk7CisKKwkJaWYgKHNjYW4tPmZpbmlzaGVkKQorCQl7CisJCQkvKiBEb24ndCBib3RoZXIgdXNp bmcgY2FjaGUgd2hlbiBzY2FuIGlzIGVuZGluZyAqLworCQl9CisJCWVsc2UKKwkJeworCQkJLyoK KwkJCSAqIFVzZSBjYWNoZS4gIFRoaXMgaXMgZ2VuZXJhbGx5IG9ubHkgYmVuZWZpY2lhbCB3aGVu IHRoZXJlIGFyZQorCQkJICogbWFueSBzbWFsbCByZXNjYW5zIG9mIGFuIGluZGV4LgorCQkJICov CisJCQlmb3IgKGludCBpID0gMDsgaSA8IElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUzsgaSsrKQor CQkJeworCQkJCWlmIChzY2FuLT5iYXRjaHF1ZXVlLT5jYWNoZVtpXSA9PSBOVUxMKQorCQkJCXsK KwkJCQkJLyogZm91bmQgZW1wdHkgc2xvdCwgd2UncmUgZG9uZSAqLworCQkJCQlzY2FuLT5iYXRj aHF1ZXVlLT5jYWNoZVtpXSA9IGJhdGNoOworCQkJCQlyZXR1cm47CisJCQkJfQorCQkJfQorCQl9 CisKKwkJLyoKKwkJICogRmFpbGVkIHRvIGZpbmQgYSBmcmVlIHNsb3QgZm9yIHRoaXMgYmF0Y2gu ICBXZSdsbCBqdXN0IGZyZWUgaXQKKwkJICogb3Vyc2VsdmVzLiAgVGhpcyBpc24ndCByZWFsbHkg ZXhwZWN0ZWQ7IGl0J3MganVzdCBkZWZlbnNpdmUuCisJCSAqLworCQlpZiAoYmF0Y2gtPmtpbGxl ZEl0ZW1zKQorCQkJcGZyZWUoYmF0Y2gtPmtpbGxlZEl0ZW1zKTsKKwkJaWYgKGJhdGNoLT5jdXJy VHVwbGVzKQorCQkJcGZyZWUoYmF0Y2gtPmN1cnJUdXBsZXMpOworCX0KKwllbHNlCisJeworCQkv KiBhbWdldGJpdG1hcCBzY2FuIGNhbGxlciAqLworCQlBc3NlcnQoc2Nhbi0+aGVhcFJlbGF0aW9u ID09IE5VTEwpOworCQlBc3NlcnQoYmF0Y2gtPmtpbGxlZEl0ZW1zID09IE5VTEwpOworCQlBc3Nl cnQoYmF0Y2gtPmN1cnJUdXBsZXMgPT0gTlVMTCk7CisJfQorCisJLyogbm8gZnJlZSBzbG90IHRv IHNhdmUgdGhpcyBiYXRjaCAoZXhwZWN0ZWQgd2l0aCBhbWdldGJpdG1hcCBjYWxsZXJzKSAqLwor CXBmcmVlKGJhdGNoKTsKK30KKworLyoKKyAqIHFzb3J0IGNvbXBhcmlzb24gZnVuY3Rpb24gZm9y IGludCBhcnJheXMKKyAqLworc3RhdGljIGludAorYmF0Y2hfY29tcGFyZV9pbnQoY29uc3Qgdm9p ZCAqdmEsIGNvbnN0IHZvaWQgKnZiKQoreworCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEp OworCWludAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOworCisJcmV0dXJuIHBnX2NtcF9zMzIo YSwgYik7Cit9CisKK3N0YXRpYyB2b2lkCitiYXRjaF9kZWJ1Z19wcmludF9iYXRjaGVzKGNvbnN0 IGNoYXIgKmxhYmVsLCBJbmRleFNjYW5EZXNjIHNjYW4pCit7CisjaWZkZWYgSU5ERVhBTV9ERUJV RworCUJhdGNoUXVldWUgKmJhdGNocXVldWUgPSBzY2FuLT5iYXRjaHF1ZXVlOworCisJaWYgKCFz Y2FuLT5iYXRjaHF1ZXVlKQorCQlyZXR1cm47CisKKwlpZiAoIUFtUmVndWxhckJhY2tlbmRQcm9j ZXNzKCkpCisJCXJldHVybjsKKwlpZiAoSXNDYXRhbG9nUmVsYXRpb24oc2Nhbi0+aW5kZXhSZWxh dGlvbikpCisJCXJldHVybjsKKworCURFQlVHX0xPRygiJXM6IGJhdGNoZXMgaGVhZEJhdGNoICVk IG5leHRCYXRjaCAlZCIsCisJCQkgIGxhYmVsLAorCQkJICBiYXRjaHF1ZXVlLT5oZWFkQmF0Y2gs IGJhdGNocXVldWUtPm5leHRCYXRjaCk7CisKKwlmb3IgKGludCBpID0gYmF0Y2hxdWV1ZS0+aGVh ZEJhdGNoOyBpIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoOyBpKyspCisJeworCQlCYXRjaEluZGV4 U2NhbiBiYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2NhbiwgaSk7CisKKwkJREVCVUdfTE9HKCIg ICAgYmF0Y2ggJWQgY3VyclBhZ2UgJXUgJXAgZmlyc3RJdGVtICVkIGxhc3RJdGVtICVkIGtpbGxl ZCAlZCIsCisJCQkJICBpLCBiYXRjaC0+Y3VyclBhZ2UsIGJhdGNoLCBiYXRjaC0+Zmlyc3RJdGVt LAorCQkJCSAgYmF0Y2gtPmxhc3RJdGVtLCBiYXRjaC0+bnVtS2lsbGVkKTsKKwl9CisjZW5kaWYK K30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZCBiL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZAppbmRleCBkYTY0Y2I1OTUuLjgzZGZh M2YyYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L21lc29uLmJ1aWxkCisr KyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9tZXNvbi5idWlsZApAQCAtNSw0ICs1LDUgQEAg YmFja2VuZF9zb3VyY2VzICs9IGZpbGVzKAogICAnYW12YWxpZGF0ZS5jJywKICAgJ2dlbmFtLmMn LAogICAnaW5kZXhhbS5jJywKKyAgJ2luZGV4YmF0Y2guYycsCiApCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRSBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUv UkVBRE1FCmluZGV4IDUzZDRhNjFkYy4uMjMxZGEyMGU0IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvbmJ0cmVlL1JFQURNRQorKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL1JF QURNRQpAQCAtNDcxLDcgKzQ3MSw3IEBAIHByb3Blci4gIEEgcGxhaW4gaW5kZXggc2NhbiB3aWxs IGV2ZW4gcmVjb2duaXplIExQX1VOVVNFRCBpdGVtcyBpbiB0aGUKIGhlYXAgKGl0ZW1zIHRoYXQg Y291bGQgYmUgcmVjeWNsZWQgYnV0IGhhdmVuJ3QgYmVlbiBqdXN0IHlldCkgYXMgIm5vdAogdmlz aWJsZSIgLS0gZXZlbiB3aGVuIHRoZSBoZWFwIHBhZ2UgaXMgZ2VuZXJhbGx5IGNvbnNpZGVyZWQg YWxsLXZpc2libGUuCiAKLUxQX0RFQUQgc2V0dGluZyBvZiBpbmRleCB0dXBsZXMgYnkgdGhlIGtp bGxfcHJpb3JfdHVwbGUgb3B0aW1pemF0aW9uCitPcHBvcnR1bmlzdGljIExQX0RFQUQgc2V0dGlu ZyBvZiBrbm93bi1kZWFkIGluZGV4IHR1cGxlcyBkdXJpbmcgaW5kZXggc2NhbnMKIChkZXNjcmli ZWQgaW4gZnVsbCBpbiBzaW1wbGUgZGVsZXRpb24sIGJlbG93KSBpcyBhbHNvIG1vcmUgY29tcGxp Y2F0ZWQgZm9yCiBpbmRleCBzY2FucyB0aGF0IGRyb3AgdGhlaXIgbGVhZiBwYWdlIHBpbnMuICBX ZSBtdXN0IGJlIGNhcmVmdWwgdG8gYXZvaWQKIExQX0RFQUQtbWFya2luZyBhbnkgbmV3IGluZGV4 IHR1cGxlIHRoYXQgbG9va3MgbGlrZSBhIGtub3duLWRlYWQgaW5kZXgKQEAgLTQ4MSw3ICs0ODEs NyBAQCBuZXcsIHVucmVsYXRlZCBpbmRleCB0dXBsZSwgb24gdGhlIHNhbWUgbGVhZiBwYWdlLCB3 aGljaCBoYXMgdGhlIHNhbWUKIG9yaWdpbmFsIFRJRC4gIEl0IHdvdWxkIGJlIHRvdGFsbHkgd3Jv bmcgdG8gTFBfREVBRC1zZXQgdGhpcyBuZXcsCiB1bnJlbGF0ZWQgaW5kZXggdHVwbGUuCiAKLVdl IGhhbmRsZSB0aGlzIGtpbGxfcHJpb3JfdHVwbGUgcmFjZSBjb25kaXRpb24gYnkgaGF2aW5nIGFm ZmVjdGVkIGluZGV4CitXZSBoYW5kbGUgdGhpcyBMUF9ERUFEIHNldHRpbmcgcmFjZSBjb25kaXRp b24gYnkgaGF2aW5nIGFmZmVjdGVkIGluZGV4CiBzY2FucyBjb25zZXJ2YXRpdmVseSBhc3N1bWUg dGhhdCBhbnkgY2hhbmdlIHRvIHRoZSBsZWFmIHBhZ2UgYXQgYWxsCiBpbXBsaWVzIHRoYXQgaXQg d2FzIHJlYWNoZWQgYnkgYnRidWxrZGVsZXRlIGluIHRoZSBpbnRlcmltIHBlcmlvZCB3aGVuIG5v CiBidWZmZXIgcGluIHdhcyBoZWxkLiAgVGhpcyBpcyBpbXBsZW1lbnRlZCBieSBub3Qgc2V0dGlu ZyBhbnkgTFBfREVBRCBiaXRzCkBAIC03MzUsNyArNzM1LDcgQEAgb2YgcmVhZGVycyBjb3VsZCBz dGlsbCBtb3ZlIHJpZ2h0IHRvIHJlY292ZXIgaWYgd2UgZGlkbid0IGNvdXBsZQogc2FtZS1sZXZl bCBsb2NrcyksIGJ1dCB3ZSBwcmVmZXIgdG8gYmUgY29uc2VydmF0aXZlIGhlcmUuCiAKIER1cmlu ZyByZWNvdmVyeSBhbGwgaW5kZXggc2NhbnMgc3RhcnQgd2l0aCBpZ25vcmVfa2lsbGVkX3R1cGxl cyA9IGZhbHNlCi1hbmQgd2UgbmV2ZXIgc2V0IGtpbGxfcHJpb3JfdHVwbGUuIFdlIGRvIHRoaXMg YmVjYXVzZSB0aGUgb2xkZXN0IHhtaW4KK2FuZCB3ZSBuZXZlciBMUF9ERUFELW1hcmsgdHVwbGVz LiBXZSBkbyB0aGlzIGJlY2F1c2UgdGhlIG9sZGVzdCB4bWluCiBvbiB0aGUgc3RhbmRieSBzZXJ2 ZXIgY2FuIGJlIG9sZGVyIHRoYW4gdGhlIG9sZGVzdCB4bWluIG9uIHRoZSBwcmltYXJ5CiBzZXJ2 ZXIsIHdoaWNoIG1lYW5zIHR1cGxlcyBjYW4gYmUgbWFya2VkIExQX0RFQUQgZXZlbiB3aGVuIHRo ZXkgYXJlCiBzdGlsbCB2aXNpYmxlIG9uIHRoZSBzdGFuZGJ5LiBXZSBkb24ndCBXQUwgbG9nIHR1 cGxlIExQX0RFQUQgYml0cywgYnV0CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHBhZ2UuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cGFnZS5jCmluZGV4 IDJmZjAwODViOS4uMmM1NWU5Y2U4IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0 cmVlL25idHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHBhZ2UuYwpA QCAtMTAzMyw2ICsxMDMzLDkgQEAgX2J0X3JlbGJ1ZihSZWxhdGlvbiByZWwsIEJ1ZmZlciBidWYp CiAgKiBMb2NrIGlzIGFjcXVpcmVkIHdpdGhvdXQgYWNxdWlyaW5nIGFub3RoZXIgcGluLiAgVGhp cyBpcyBsaWtlIGEgcmF3CiAgKiBMb2NrQnVmZmVyKCkgY2FsbCwgYnV0IHBlcmZvcm1zIGV4dHJh IHN0ZXBzIG5lZWRlZCBieSBWYWxncmluZC4KICAqCisgKiBOb3RlOiBpbmRleGFtX3V0aWxfYmF0 Y2hfdW5sb2NrIGhhcyBzaW1pbGFyIFZhbGdyaW5kIGJ1ZmZlciBsb2NrCisgKiBpbnN0cnVtZW50 YXRpb24sIHdoaWNoIHdlIHJlbHkgb24gaGVyZS4KKyAqCiAgKiBOb3RlOiBDYWxsZXIgbWF5IG5l ZWQgdG8gY2FsbCBfYnRfY2hlY2twYWdlKCkgd2l0aCBidWYgd2hlbiBwaW4gb24gYnVmCiAgKiB3 YXNuJ3Qgb3JpZ2luYWxseSBhY3F1aXJlZCBpbiBfYnRfZ2V0YnVmKCkgb3IgX2J0X3JlbGFuZGdl dGJ1ZigpLgogICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJl YWRwYWdlLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRwYWdlLmMKaW5kZXgg MzcyNDI2ZjZhLi5iYmU1M2UwMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0cmVhZHBhZ2UuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHJlYWRw YWdlLmMKQEAgLTMyLDYgKzMyLDcgQEAgdHlwZWRlZiBzdHJ1Y3QgQlRSZWFkUGFnZVN0YXRlCiB7 CiAJLyogSW5wdXQgcGFyYW1ldGVycywgc2V0IGJ5IF9idF9yZWFkcGFnZSBmb3IgX2J0X2NoZWNr a2V5cyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyOwkJCS8qIGN1cnJlbnQgc2NhbiBkaXJlY3Rpb24g Ki8KKwlCbG9ja051bWJlciBjdXJycGFnZTsJCS8qIGN1cnJlbnQgcGFnZSBiZWluZyByZWFkICov CiAJT2Zmc2V0TnVtYmVyIG1pbm9mZjsJCS8qIExvd2VzdCBub24tcGl2b3QgdHVwbGUncyBvZmZz ZXQgKi8KIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwkJLyogSGlnaGVzdCBub24tcGl2b3QgdHVwbGUn cyBvZmZzZXQgKi8KIAlJbmRleFR1cGxlCWZpbmFsdHVwOwkJLyogTmVlZGVkIGJ5IHNjYW5zIHdp dGggYXJyYXkga2V5cyAqLwpAQCAtNjMsMTQgKzY0LDEzIEBAIHN0YXRpYyBib29sIF9idF9zY2Fu YmVoaW5kX2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLAog CQkJCQkJCQkJIEluZGV4VHVwbGUgZmluYWx0dXApOwogc3RhdGljIGJvb2wgX2J0X29wcG9kaXJf Y2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJCQkJCQkJ CSAgSW5kZXhUdXBsZSBmaW5hbHR1cCk7Ci1zdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQlRTY2Fu T3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJCQkJIE9mZnNldE51bWJlciBvZmZudW0sIElu ZGV4VHVwbGUgaXR1cCk7Ci1zdGF0aWMgaW50CV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5P cGFxdWUgc28sIGludCBpdGVtSW5kZXgsCitzdGF0aWMgdm9pZCBfYnRfc2F2ZWl0ZW0oQmF0Y2hJ bmRleFNjYW4gbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCisJ CQkJCQkgSW5kZXhUdXBsZSBpdHVwLCBpbnQgKnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbnQJX2J0 X3NldHVwcG9zdGluZ2l0ZW1zKEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4 LAogCQkJCQkJCQkgIE9mZnNldE51bWJlciBvZmZudW0sIGNvbnN0IEl0ZW1Qb2ludGVyRGF0YSAq aGVhcFRpZCwKLQkJCQkJCQkJICBJbmRleFR1cGxlIGl0dXApOwotc3RhdGljIGlubGluZSB2b2lk IF9idF9zYXZlcG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LAotCQkJ CQkJCQkJICAgT2Zmc2V0TnVtYmVyIG9mZm51bSwKLQkJCQkJCQkJCSAgIEl0ZW1Qb2ludGVyIGhl YXBUaWQsIGludCB0dXBsZU9mZnNldCk7CisJCQkJCQkJCSAgSW5kZXhUdXBsZSBpdHVwLCBpbnQg KnR1cGxlT2Zmc2V0KTsKK3N0YXRpYyBpbmxpbmUgdm9pZCBfYnRfc2F2ZXBvc3RpbmdpdGVtKEJh dGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIgb2ZmbnVt LAorCQkJCQkJCQkJICAgSXRlbVBvaW50ZXIgaGVhcFRpZCwgaW50IGJhc2VPZmZzZXQpOwogc3Rh dGljIGJvb2wgX2J0X2NoZWNra2V5cyhJbmRleFNjYW5EZXNjIHNjYW4sIEJUUmVhZFBhZ2VTdGF0 ZSAqcHN0YXRlLCBib29sIGFycmF5S2V5cywKIAkJCQkJCSAgSW5kZXhUdXBsZSB0dXBsZSwgaW50 IHR1cG5hdHRzKTsKIHN0YXRpYyBib29sIF9idF9jaGVja19jb21wYXJlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCkBAIC0xMTEsMTUgKzExMSwxNSBAQCBzdGF0aWMgYm9v bCBfYnRfdmVyaWZ5X2tleXNfd2l0aF9hcnJheWtleXMoSW5kZXhTY2FuRGVzYyBzY2FuKTsKIAog CiAvKgotICoJX2J0X3JlYWRwYWdlKCkgLS0gTG9hZCBkYXRhIGZyb20gY3VycmVudCBpbmRleCBw YWdlIGludG8gc28tPmN1cnJQb3MKKyAqCV9idF9yZWFkcGFnZSgpIC0tIExvYWQgZGF0YSBmcm9t IGN1cnJlbnQgaW5kZXggcGFnZSBpbnRvIG5ld2JhdGNoLgogICoKLSAqIENhbGxlciBtdXN0IGhh dmUgcGlubmVkIGFuZCByZWFkLWxvY2tlZCBzby0+Y3VyclBvcy5idWY7IHRoZSBidWZmZXIncyBz dGF0ZQotICogaXMgbm90IGNoYW5nZWQgaGVyZS4gIEFsc28sIGN1cnJQb3MubW9yZUxlZnQgYW5k IG1vcmVSaWdodCBtdXN0IGJlIHZhbGlkOwotICogdGhleSBhcmUgdXBkYXRlZCBhcyBhcHByb3By aWF0ZS4gIEFsbCBvdGhlciBmaWVsZHMgb2Ygc28tPmN1cnJQb3MgYXJlCisgKiBDYWxsZXIgbXVz dCBoYXZlIHBpbm5lZCBhbmQgcmVhZC1sb2NrZWQgbmV3YmF0Y2guYnVmOyB0aGUgYnVmZmVyJ3Mg c3RhdGUgaXMKKyAqIG5vdCBjaGFuZ2VkIGhlcmUuICBBbHNvLCBuZXdiYXRjaCdzIG1vcmVMZWZ0 IGFuZCBtb3JlUmlnaHQgbXVzdCBiZSB2YWxpZDsKKyAqIHRoZXkgYXJlIHVwZGF0ZWQgYXMgYXBw cm9wcmlhdGUuICBBbGwgb3RoZXIgZmllbGRzIG9mIG5ld2JhdGNoIGFyZQogICogaW5pdGlhbGl6 ZWQgZnJvbSBzY3JhdGNoIGhlcmUuCiAgKgogICogV2Ugc2NhbiB0aGUgY3VycmVudCBwYWdlIHN0 YXJ0aW5nIGF0IG9mZm51bSBhbmQgbW92aW5nIGluIHRoZSBpbmRpY2F0ZWQKLSAqIGRpcmVjdGlv bi4gIEFsbCBpdGVtcyBtYXRjaGluZyB0aGUgc2NhbiBrZXlzIGFyZSBsb2FkZWQgaW50byBjdXJy UG9zLml0ZW1zLgorICogZGlyZWN0aW9uLiAgQWxsIGl0ZW1zIG1hdGNoaW5nIHRoZSBzY2FuIGtl eXMgYXJlIHNhdmVkIGluIG5ld2JhdGNoLml0ZW1zLgogICogbW9yZUxlZnQgb3IgbW9yZVJpZ2h0 IChhcyBhcHByb3ByaWF0ZSkgaXMgY2xlYXJlZCBpZiBfYnRfY2hlY2trZXlzIHJlcG9ydHMKICAq IHRoYXQgdGhlcmUgY2FuIGJlIG5vIG1vcmUgbWF0Y2hpbmcgdHVwbGVzIGluIHRoZSBjdXJyZW50 IHNjYW4gZGlyZWN0aW9uCiAgKiAoY291bGQganVzdCBiZSBmb3IgdGhlIGN1cnJlbnQgcHJpbWl0 aXZlIGluZGV4IHNjYW4gd2hlbiBzY2FuIGhhcyBhcnJheXMpLgpAQCAtMTMxLDggKzEzMSw4IEBA IHN0YXRpYyBib29sIF9idF92ZXJpZnlfa2V5c193aXRoX2FycmF5a2V5cyhJbmRleFNjYW5EZXNj IHNjYW4pOwogICogUmV0dXJucyB0cnVlIGlmIGFueSBtYXRjaGluZyBpdGVtcyBmb3VuZCBvbiB0 aGUgcGFnZSwgZmFsc2UgaWYgbm9uZS4KICAqLwogYm9vbAotX2J0X3JlYWRwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkg Ym9vbCBmaXJzdHBhZ2UpCitfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaElu ZGV4U2NhbiBuZXdiYXRjaCwgU2NhbkRpcmVjdGlvbiBkaXIsCisJCQkgT2Zmc2V0TnVtYmVyIG9m Zm51bSwgYm9vbCBmaXJzdHBhZ2UpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5kZXhSZWxh dGlvbjsKIAlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7CkBA IC0xNDQsMjMgKzE0NCwyMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2Fu RGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAlib29sCQlhcnJheUtleXMsCiAJ CQkJaWdub3JlX2tpbGxlZF90dXBsZXMgPSBzY2FuLT5pZ25vcmVfa2lsbGVkX3R1cGxlczsKIAlp bnQJCQlpdGVtSW5kZXgsCisJCQkJdHVwbGVPZmZzZXQgPSAwLAogCQkJCWluZG5hdHRzOwogCiAJ Lyogc2F2ZSB0aGUgcGFnZS9idWZmZXIgYmxvY2sgbnVtYmVyLCBhbG9uZyB3aXRoIGl0cyBzaWJs aW5nIGxpbmtzICovCi0JcGFnZSA9IEJ1ZmZlckdldFBhZ2Uoc28tPmN1cnJQb3MuYnVmKTsKKwlw YWdlID0gQnVmZmVyR2V0UGFnZShuZXdiYXRjaC0+YnVmKTsKIAlvcGFxdWUgPSBCVFBhZ2VHZXRP cGFxdWUocGFnZSk7Ci0Jc28tPmN1cnJQb3MuY3VyclBhZ2UgPSBCdWZmZXJHZXRCbG9ja051bWJl cihzby0+Y3VyclBvcy5idWYpOwotCXNvLT5jdXJyUG9zLnByZXZQYWdlID0gb3BhcXVlLT5idHBv X3ByZXY7Ci0Jc28tPmN1cnJQb3MubmV4dFBhZ2UgPSBvcGFxdWUtPmJ0cG9fbmV4dDsKLQkvKiBk ZWxheSBzZXR0aW5nIHNvLT5jdXJyUG9zLmxzbiB1bnRpbCBfYnRfZHJvcF9sb2NrX2FuZF9tYXli ZV9waW4gKi8KLQlwc3RhdGUuZGlyID0gc28tPmN1cnJQb3MuZGlyID0gZGlyOwotCXNvLT5jdXJy UG9zLm5leHRUdXBsZU9mZnNldCA9IDA7CisJcHN0YXRlLmN1cnJwYWdlID0gbmV3YmF0Y2gtPmN1 cnJQYWdlID0gQnVmZmVyR2V0QmxvY2tOdW1iZXIobmV3YmF0Y2gtPmJ1Zik7CisJbmV3YmF0Y2gt PnByZXZQYWdlID0gb3BhcXVlLT5idHBvX3ByZXY7CisJbmV3YmF0Y2gtPm5leHRQYWdlID0gb3Bh cXVlLT5idHBvX25leHQ7CisJcHN0YXRlLmRpciA9IG5ld2JhdGNoLT5kaXIgPSBkaXI7CiAKIAkv KiBlaXRoZXIgbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0IHNob3VsZCBiZSBzZXQgbm93IChtYXkgYmUg dW5zZXQgbGF0ZXIpICovCi0JQXNzZXJ0KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/IHNv LT5jdXJyUG9zLm1vcmVSaWdodCA6Ci0JCSAgIHNvLT5jdXJyUG9zLm1vcmVMZWZ0KTsKKwlBc3Nl cnQoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8gbmV3YmF0Y2gtPm1vcmVSaWdodCA6IG5l d2JhdGNoLT5tb3JlTGVmdCk7CiAJQXNzZXJ0KCFQX0lHTk9SRShvcGFxdWUpKTsKLQlBc3NlcnQo QlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKIAlBc3NlcnQoIXNvLT5uZWVkUHJpbVNj YW4pOwogCiAJLyogaW5pdGlhbGl6ZSBsb2NhbCB2YXJpYWJsZXMgKi8KQEAgLTE4OCwxNCArMTg1 LDEyIEBAIF9idF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly LCBPZmZzZXROdW1iZXIgb2ZmbnVtLAogCXsKIAkJLyogYWxsb3cgbmV4dC9wcmV2IHBhZ2UgdG8g YmUgcmVhZCBieSBvdGhlciB3b3JrZXIgd2l0aG91dCBkZWxheSAqLwogCQlpZiAoU2NhbkRpcmVj dGlvbklzRm9yd2FyZChkaXIpKQotCQkJX2J0X3BhcmFsbGVsX3JlbGVhc2Uoc2Nhbiwgc28tPmN1 cnJQb3MubmV4dFBhZ2UsCi0JCQkJCQkJCSBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQlfYnRf cGFyYWxsZWxfcmVsZWFzZShzY2FuLCBuZXdiYXRjaC0+bmV4dFBhZ2UsIG5ld2JhdGNoLT5jdXJy UGFnZSk7CiAJCWVsc2UKLQkJCV9idF9wYXJhbGxlbF9yZWxlYXNlKHNjYW4sIHNvLT5jdXJyUG9z LnByZXZQYWdlLAotCQkJCQkJCQkgc28tPmN1cnJQb3MuY3VyclBhZ2UpOworCQkJX2J0X3BhcmFs bGVsX3JlbGVhc2Uoc2NhbiwgbmV3YmF0Y2gtPnByZXZQYWdlLCBuZXdiYXRjaC0+Y3VyclBhZ2Up OwogCX0KIAotCVByZWRpY2F0ZUxvY2tQYWdlKHJlbCwgc28tPmN1cnJQb3MuY3VyclBhZ2UsIHNj YW4tPnhzX3NuYXBzaG90KTsKKwlQcmVkaWNhdGVMb2NrUGFnZShyZWwsIHBzdGF0ZS5jdXJycGFn ZSwgc2Nhbi0+eHNfc25hcHNob3QpOwogCiAJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGly KSkKIAl7CkBAIC0yMTIsMTEgKzIwNywxMCBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBTY2FuRGlyZWN0aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkJCQkJIV9idF9z Y2FuYmVoaW5kX2NoZWNra2V5cyhzY2FuLCBkaXIsIHBzdGF0ZS5maW5hbHR1cCkpCiAJCQkJewog CQkJCQkvKiBTY2hlZHVsZSBhbm90aGVyIHByaW1pdGl2ZSBpbmRleCBzY2FuIGFmdGVyIGFsbCAq LwotCQkJCQlzby0+Y3VyclBvcy5tb3JlUmlnaHQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1v cmVSaWdodCA9IGZhbHNlOwogCQkJCQlzby0+bmVlZFByaW1TY2FuID0gdHJ1ZTsKIAkJCQkJaWYg KHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCQkJCQlfYnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1 bGUoc2NhbiwKLQkJCQkJCQkJCQkJCQkgICBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCQkJCQlf YnRfcGFyYWxsZWxfcHJpbXNjYW5fc2NoZWR1bGUoc2NhbiwgbmV3YmF0Y2gtPmN1cnJQYWdlKTsK IAkJCQkJcmV0dXJuIGZhbHNlOwogCQkJCX0KIAkJCX0KQEAgLTI4MCwyNiArMjc0LDI2IEBAIF9i dF9yZWFkcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyLCBPZmZzZXRO dW1iZXIgb2ZmbnVtLAogCQkJCWlmICghQlRyZWVUdXBsZUlzUG9zdGluZyhpdHVwKSkKIAkJCQl7 CiAJCQkJCS8qIFJlbWVtYmVyIGl0ICovCi0JCQkJCV9idF9zYXZlaXRlbShzbywgaXRlbUluZGV4 LCBvZmZudW0sIGl0dXApOworCQkJCQlfYnRfc2F2ZWl0ZW0obmV3YmF0Y2gsIGl0ZW1JbmRleCwg b2ZmbnVtLCBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsKIAkJCQl9CiAJ CQkJZWxzZQogCQkJCXsKLQkJCQkJaW50CQkJdHVwbGVPZmZzZXQ7CisJCQkJCWludAkJCWJhc2VP ZmZzZXQ7CiAKIAkJCQkJLyogU2V0IHVwIHBvc3RpbmcgbGlzdCBzdGF0ZSAoYW5kIHJlbWVtYmVy IGZpcnN0IFRJRCkgKi8KLQkJCQkJdHVwbGVPZmZzZXQgPQotCQkJCQkJX2J0X3NldHVwcG9zdGlu Z2l0ZW1zKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwKKwkJCQkJYmFzZU9mZnNldCA9CisJCQkJCQlf YnRfc2V0dXBwb3N0aW5naXRlbXMobmV3YmF0Y2gsIGl0ZW1JbmRleCwgb2ZmbnVtLAogCQkJCQkJ CQkJCQkgIEJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCAwKSwKLQkJCQkJCQkJCQkJICBpdHVw KTsKKwkJCQkJCQkJCQkJICBpdHVwLCAmdHVwbGVPZmZzZXQpOwogCQkJCQlpdGVtSW5kZXgrKzsK IAogCQkJCQkvKiBSZW1lbWJlciBhbGwgbGF0ZXIgVElEcyAobXVzdCBiZSBhdCBsZWFzdCBvbmUp ICovCiAJCQkJCWZvciAoaW50IGkgPSAxOyBpIDwgQlRyZWVUdXBsZUdldE5Qb3N0aW5nKGl0dXAp OyBpKyspCiAJCQkJCXsKLQkJCQkJCV9idF9zYXZlcG9zdGluZ2l0ZW0oc28sIGl0ZW1JbmRleCwg b2ZmbnVtLAorCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBv ZmZudW0sCiAJCQkJCQkJCQkJCUJUcmVlVHVwbGVHZXRQb3N0aW5nTihpdHVwLCBpKSwKLQkJCQkJ CQkJCQkJdHVwbGVPZmZzZXQpOworCQkJCQkJCQkJCQliYXNlT2Zmc2V0KTsKIAkJCQkJCWl0ZW1J bmRleCsrOwogCQkJCQl9CiAJCQkJfQpAQCAtMzM5LDEyICszMzMsMTEgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0sCiAJCX0KIAogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNjYW4pCi0JCQlzby0+Y3VyclBvcy5t b3JlUmlnaHQgPSBmYWxzZTsKKwkJCW5ld2JhdGNoLT5tb3JlUmlnaHQgPSBmYWxzZTsKIAogCQlB c3NlcnQoaXRlbUluZGV4IDw9IE1heFRJRHNQZXJCVHJlZVBhZ2UpOwotCQlzby0+Y3VyclBvcy5m aXJzdEl0ZW0gPSAwOwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IGl0ZW1JbmRleCAtIDE7Ci0J CXNvLT5jdXJyUG9zLml0ZW1JbmRleCA9IDA7CisJCW5ld2JhdGNoLT5maXJzdEl0ZW0gPSAwOwor CQluZXdiYXRjaC0+bGFzdEl0ZW0gPSBpdGVtSW5kZXggLSAxOwogCX0KIAllbHNlCiAJewpAQCAt MzYxLDExICszNTQsMTAgQEAgX2J0X3JlYWRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRp cmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0sCiAJCQkJCSFfYnRfc2NhbmJlaGluZF9j aGVja2tleXMoc2NhbiwgZGlyLCBwc3RhdGUuZmluYWx0dXApKQogCQkJCXsKIAkJCQkJLyogU2No ZWR1bGUgYW5vdGhlciBwcmltaXRpdmUgaW5kZXggc2NhbiBhZnRlciBhbGwgKi8KLQkJCQkJc28t PmN1cnJQb3MubW9yZUxlZnQgPSBmYWxzZTsKKwkJCQkJbmV3YmF0Y2gtPm1vcmVMZWZ0ID0gZmFs c2U7CiAJCQkJCXNvLT5uZWVkUHJpbVNjYW4gPSB0cnVlOwogCQkJCQlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbikKLQkJCQkJCV9idF9wYXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLAotCQkJ CQkJCQkJCQkJCSAgIHNvLT5jdXJyUG9zLmN1cnJQYWdlKTsKKwkJCQkJCV9idF9wYXJhbGxlbF9w cmltc2Nhbl9zY2hlZHVsZShzY2FuLCBuZXdiYXRjaC0+Y3VyclBhZ2UpOwogCQkJCQlyZXR1cm4g ZmFsc2U7CiAJCQkJfQogCQkJfQpAQCAtNDY2LDI3ICs0NTgsMjcgQEAgX2J0X3JlYWRwYWdlKElu ZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZudW0s CiAJCQkJewogCQkJCQkvKiBSZW1lbWJlciBpdCAqLwogCQkJCQlpdGVtSW5kZXgtLTsKLQkJCQkJ X2J0X3NhdmVpdGVtKHNvLCBpdGVtSW5kZXgsIG9mZm51bSwgaXR1cCk7CisJCQkJCV9idF9zYXZl aXRlbShuZXdiYXRjaCwgaXRlbUluZGV4LCBvZmZudW0sIGl0dXAsICZ0dXBsZU9mZnNldCk7CiAJ CQkJfQogCQkJCWVsc2UKIAkJCQl7CiAJCQkJCXVpbnQxNgkJbml0ZW1zID0gQlRyZWVUdXBsZUdl dE5Qb3N0aW5nKGl0dXApOwotCQkJCQlpbnQJCQl0dXBsZU9mZnNldDsKKwkJCQkJaW50CQkJYmFz ZU9mZnNldDsKIAogCQkJCQkvKiBTZXQgdXAgcG9zdGluZyBsaXN0IHN0YXRlIChhbmQgcmVtZW1i ZXIgbGFzdCBUSUQpICovCiAJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQl0dXBsZU9mZnNldCA9Ci0J CQkJCQlfYnRfc2V0dXBwb3N0aW5naXRlbXMoc28sIGl0ZW1JbmRleCwgb2ZmbnVtLAorCQkJCQli YXNlT2Zmc2V0ID0KKwkJCQkJCV9idF9zZXR1cHBvc3RpbmdpdGVtcyhuZXdiYXRjaCwgaXRlbUlu ZGV4LCBvZmZudW0sCiAJCQkJCQkJCQkJCSAgQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0dXAsIG5p dGVtcyAtIDEpLAotCQkJCQkJCQkJCQkgIGl0dXApOworCQkJCQkJCQkJCQkgIGl0dXAsICZ0dXBs ZU9mZnNldCk7CiAKIAkJCQkJLyogUmVtZW1iZXIgYWxsIHByaW9yIFRJRHMgKG11c3QgYmUgYXQg bGVhc3Qgb25lKSAqLwogCQkJCQlmb3IgKGludCBpID0gbml0ZW1zIC0gMjsgaSA+PSAwOyBpLS0p CiAJCQkJCXsKIAkJCQkJCWl0ZW1JbmRleC0tOwotCQkJCQkJX2J0X3NhdmVwb3N0aW5naXRlbShz bywgaXRlbUluZGV4LCBvZmZudW0sCisJCQkJCQlfYnRfc2F2ZXBvc3RpbmdpdGVtKG5ld2JhdGNo LCBpdGVtSW5kZXgsIG9mZm51bSwKIAkJCQkJCQkJCQkJQlRyZWVUdXBsZUdldFBvc3RpbmdOKGl0 dXAsIGkpLAotCQkJCQkJCQkJCQl0dXBsZU9mZnNldCk7CisJCQkJCQkJCQkJCWJhc2VPZmZzZXQp OwogCQkJCQl9CiAJCQkJfQogCQkJfQpAQCAtNTAyLDEyICs0OTQsMTEgQEAgX2J0X3JlYWRwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsIE9mZnNldE51bWJlciBvZmZu dW0sCiAJCSAqIGJlIGZvdW5kIHRoZXJlCiAJCSAqLwogCQlpZiAoIXBzdGF0ZS5jb250aW51ZXNj YW4pCi0JCQlzby0+Y3VyclBvcy5tb3JlTGVmdCA9IGZhbHNlOworCQkJbmV3YmF0Y2gtPm1vcmVM ZWZ0ID0gZmFsc2U7CiAKIAkJQXNzZXJ0KGl0ZW1JbmRleCA+PSAwKTsKLQkJc28tPmN1cnJQb3Mu Zmlyc3RJdGVtID0gaXRlbUluZGV4OwotCQlzby0+Y3VyclBvcy5sYXN0SXRlbSA9IE1heFRJRHNQ ZXJCVHJlZVBhZ2UgLSAxOwotCQlzby0+Y3VyclBvcy5pdGVtSW5kZXggPSBNYXhUSURzUGVyQlRy ZWVQYWdlIC0gMTsKKwkJbmV3YmF0Y2gtPmZpcnN0SXRlbSA9IGl0ZW1JbmRleDsKKwkJbmV3YmF0 Y2gtPmxhc3RJdGVtID0gTWF4VElEc1BlckJUcmVlUGFnZSAtIDE7CiAJfQogCiAJLyoKQEAgLTUy NCw3ICs1MTUsNyBAQCBfYnRfcmVhZHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0 aW9uIGRpciwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKIAkgKi8KIAlBc3NlcnQoIXBzdGF0ZS5mb3Jj ZW5vbnJlcXVpcmVkKTsKIAotCXJldHVybiAoc28tPmN1cnJQb3MuZmlyc3RJdGVtIDw9IHNvLT5j dXJyUG9zLmxhc3RJdGVtKTsKKwlyZXR1cm4gKG5ld2JhdGNoLT5maXJzdEl0ZW0gPD0gbmV3YmF0 Y2gtPmxhc3RJdGVtKTsKIH0KIAogLyoKQEAgLTEwMjcsOTAgKzEwMTgsOTMgQEAgX2J0X29wcG9k aXJfY2hlY2trZXlzKEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJcmV0 dXJuIHRydWU7CiB9CiAKLS8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIHNvLT5jdXJyUG9zLml0 ZW1zW2l0ZW1JbmRleF0gKi8KKy8qIFNhdmUgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0 ZW1zW2l0ZW1JbmRleF0gKi8KIHN0YXRpYyB2b2lkCi1fYnRfc2F2ZWl0ZW0oQlRTY2FuT3BhcXVl IHNvLCBpbnQgaXRlbUluZGV4LAotCQkJIE9mZnNldE51bWJlciBvZmZudW0sIEluZGV4VHVwbGUg aXR1cCkKK19idF9zYXZlaXRlbShCYXRjaEluZGV4U2NhbiBuZXdiYXRjaCwgaW50IGl0ZW1JbmRl eCwgT2Zmc2V0TnVtYmVyIG9mZm51bSwKKwkJCSBJbmRleFR1cGxlIGl0dXAsIGludCAqdHVwbGVP ZmZzZXQpCiB7Ci0JQlRTY2FuUG9zSXRlbSAqY3Vyckl0ZW0gPSAmc28tPmN1cnJQb3MuaXRlbXNb aXRlbUluZGV4XTsKLQogCUFzc2VydCghQlRyZWVUdXBsZUlzUGl2b3QoaXR1cCkgJiYgIUJUcmVl VHVwbGVJc1Bvc3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSBpdHVwLT50X3Rp ZDsKLQljdXJySXRlbS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVz KQorCS8qIGNvcHkgdGhlIHBvcHVsYXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCW5l d2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQgPSBpdHVwLT50X3RpZDsKKwluZXdiYXRj aC0+aXRlbXNbaXRlbUluZGV4XS5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRj aC0+Y3VyclR1cGxlcykKIAl7CiAJCVNpemUJCWl0dXBzeiA9IEluZGV4VHVwbGVTaXplKGl0dXAp OwogCi0JCWN1cnJJdGVtLT50dXBsZU9mZnNldCA9IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNl dDsKLQkJbWVtY3B5KHNvLT5jdXJyVHVwbGVzICsgc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zmc2V0 LCBpdHVwLCBpdHVwc3opOwotCQlzby0+Y3VyclBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gTUFYQUxJ R04oaXR1cHN6KTsKKwkJbmV3YmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0udHVwbGVPZmZzZXQgPSAq dHVwbGVPZmZzZXQ7CisJCW1lbWNweShuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNl dCwgaXR1cCwgaXR1cHN6KTsKKwkJKnR1cGxlT2Zmc2V0ICs9IE1BWEFMSUdOKGl0dXBzeik7CiAJ fQogfQogCiAvKgogICogU2V0dXAgc3RhdGUgdG8gc2F2ZSBUSURzL2l0ZW1zIGZyb20gYSBzaW5n bGUgcG9zdGluZyBsaXN0IHR1cGxlLgogICoKLSAqIFNhdmVzIGFuIGluZGV4IGl0ZW0gaW50byBz by0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdIGZvciBUSUQgdGhhdCBpcwotICogcmV0dXJuZWQg dG8gc2NhbiBmaXJzdC4gIFNlY29uZCBvciBzdWJzZXF1ZW50IFRJRHMgZm9yIHBvc3RpbmcgbGlz dCBzaG91bGQKLSAqIGJlIHNhdmVkIGJ5IGNhbGxpbmcgX2J0X3NhdmVwb3N0aW5naXRlbSgpLgor ICogU2F2ZXMgYW4gaW5kZXggaXRlbSBpbnRvIG5ld2JhdGNoLml0ZW1zW2l0ZW1JbmRleF0gZm9y IFRJRCB0aGF0IGlzIHJldHVybmVkCisgKiB0byBzY2FuIGZpcnN0LiAgU2Vjb25kIG9yIHN1YnNl cXVlbnQgVElEcyBmb3IgcG9zdGluZyBsaXN0IHNob3VsZCBiZSBzYXZlZAorICogYnkgY2FsbGlu ZyBfYnRfc2F2ZXBvc3RpbmdpdGVtKCkuCiAgKgotICogUmV0dXJucyBhbiBvZmZzZXQgaW50byB0 dXBsZSBzdG9yYWdlIHNwYWNlIHRoYXQgbWFpbiB0dXBsZSBpcyBzdG9yZWQgYXQgaWYKLSAqIG5l ZWRlZC4KKyAqIFJldHVybnMgYmFzZU9mZnNldCwgYW4gb2Zmc2V0IGludG8gdHVwbGUgc3RvcmFn ZSBzcGFjZSB0aGF0IG1haW4gdHVwbGUgaXMKKyAqIHN0b3JlZCBhdCBpZiBuZWVkZWQuCiAgKi8K IHN0YXRpYyBpbnQKLV9idF9zZXR1cHBvc3RpbmdpdGVtcyhCVFNjYW5PcGFxdWUgc28sIGludCBp dGVtSW5kZXgsIE9mZnNldE51bWJlciBvZmZudW0sCi0JCQkJCSAgY29uc3QgSXRlbVBvaW50ZXJE YXRhICpoZWFwVGlkLCBJbmRleFR1cGxlIGl0dXApCitfYnRfc2V0dXBwb3N0aW5naXRlbXMoQmF0 Y2hJbmRleFNjYW4gbmV3YmF0Y2gsIGludCBpdGVtSW5kZXgsCisJCQkJCSAgT2Zmc2V0TnVtYmVy IG9mZm51bSwgY29uc3QgSXRlbVBvaW50ZXJEYXRhICpoZWFwVGlkLAorCQkJCQkgIEluZGV4VHVw bGUgaXR1cCwgaW50ICp0dXBsZU9mZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9 ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVt ID0gJm5ld2JhdGNoLT5pdGVtc1tpdGVtSW5kZXhdOwogCiAJQXNzZXJ0KEJUcmVlVHVwbGVJc1Bv c3RpbmcoaXR1cCkpOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRl bS0+aW5kZXhPZmZzZXQgPSBvZmZudW07Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQorCS8qIGNvcHkg dGhlIHBvcHVsYXRlZCBwYXJ0IG9mIHRoZSBpdGVtcyBhcnJheSAqLworCWl0ZW0tPmhlYXBUaWQg PSAqaGVhcFRpZDsKKwlpdGVtLT5pbmRleE9mZnNldCA9IG9mZm51bTsKKworCWlmIChuZXdiYXRj aC0+Y3VyclR1cGxlcykKIAl7CiAJCS8qIFNhdmUgYmFzZSBJbmRleFR1cGxlICh0cnVuY2F0ZSBw b3N0aW5nIGxpc3QpICovCiAJCUluZGV4VHVwbGUJYmFzZTsKIAkJU2l6ZQkJaXR1cHN6ID0gQlRy ZWVUdXBsZUdldFBvc3RpbmdPZmZzZXQoaXR1cCk7CiAKIAkJaXR1cHN6ID0gTUFYQUxJR04oaXR1 cHN6KTsKLQkJY3Vyckl0ZW0tPnR1cGxlT2Zmc2V0ID0gc28tPmN1cnJQb3MubmV4dFR1cGxlT2Zm c2V0OwotCQliYXNlID0gKEluZGV4VHVwbGUpIChzby0+Y3VyclR1cGxlcyArIHNvLT5jdXJyUG9z Lm5leHRUdXBsZU9mZnNldCk7CisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gKnR1cGxlT2Zmc2V0Owor CQliYXNlID0gKEluZGV4VHVwbGUpIChuZXdiYXRjaC0+Y3VyclR1cGxlcyArICp0dXBsZU9mZnNl dCk7CiAJCW1lbWNweShiYXNlLCBpdHVwLCBpdHVwc3opOwogCQkvKiBEZWZlbnNpdmVseSByZWR1 Y2Ugd29yayBhcmVhIGluZGV4IHR1cGxlIGhlYWRlciBzaXplICovCiAJCWJhc2UtPnRfaW5mbyAm PSB+SU5ERVhfU0laRV9NQVNLOwogCQliYXNlLT50X2luZm8gfD0gaXR1cHN6OwotCQlzby0+Y3Vy clBvcy5uZXh0VHVwbGVPZmZzZXQgKz0gaXR1cHN6OworCQkqdHVwbGVPZmZzZXQgKz0gaXR1cHN6 OwogCi0JCXJldHVybiBjdXJySXRlbS0+dHVwbGVPZmZzZXQ7CisJCXJldHVybiBpdGVtLT50dXBs ZU9mZnNldDsKIAl9CiAKIAlyZXR1cm4gMDsKIH0KIAogLyoKLSAqIFNhdmUgYW4gaW5kZXggaXRl bSBpbnRvIHNvLT5jdXJyUG9zLml0ZW1zW2l0ZW1JbmRleF0gZm9yIGN1cnJlbnQgcG9zdGluZwor ICogU2F2ZSBhbiBpbmRleCBpdGVtIGludG8gbmV3YmF0Y2guaXRlbXNbaXRlbUluZGV4XSBmb3Ig Y3VycmVudCBwb3N0aW5nCiAgKiB0dXBsZS4KICAqCiAgKiBBc3N1bWVzIHRoYXQgX2J0X3NldHVw cG9zdGluZ2l0ZW1zKCkgaGFzIGFscmVhZHkgYmVlbiBjYWxsZWQgZm9yIGN1cnJlbnQKLSAqIHBv c3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVybiB2YWx1ZSBhcyB0dXBs ZU9mZnNldC4KKyAqIHBvc3RpbmcgbGlzdCB0dXBsZS4gIENhbGxlciBwYXNzZXMgaXRzIHJldHVy biB2YWx1ZSBhcyBiYXNlT2Zmc2V0LgogICovCiBzdGF0aWMgaW5saW5lIHZvaWQKLV9idF9zYXZl cG9zdGluZ2l0ZW0oQlRTY2FuT3BhcXVlIHNvLCBpbnQgaXRlbUluZGV4LCBPZmZzZXROdW1iZXIg b2ZmbnVtLAotCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgdHVwbGVPZmZzZXQpCitfYnRf c2F2ZXBvc3RpbmdpdGVtKEJhdGNoSW5kZXhTY2FuIG5ld2JhdGNoLCBpbnQgaXRlbUluZGV4LCBP ZmZzZXROdW1iZXIgb2ZmbnVtLAorCQkJCQlJdGVtUG9pbnRlciBoZWFwVGlkLCBpbnQgYmFzZU9m ZnNldCkKIHsKLQlCVFNjYW5Qb3NJdGVtICpjdXJySXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tp dGVtSW5kZXhdOworCUJhdGNoTWF0Y2hpbmdJdGVtICppdGVtID0gJm5ld2JhdGNoLT5pdGVtc1tp dGVtSW5kZXhdOwogCi0JY3Vyckl0ZW0tPmhlYXBUaWQgPSAqaGVhcFRpZDsKLQljdXJySXRlbS0+ aW5kZXhPZmZzZXQgPSBvZmZudW07CisJaXRlbS0+aGVhcFRpZCA9ICpoZWFwVGlkOworCWl0ZW0t PmluZGV4T2Zmc2V0ID0gb2ZmbnVtOwogCiAJLyoKIAkgKiBIYXZlIGluZGV4LW9ubHkgc2NhbnMg cmV0dXJuIHRoZSBzYW1lIGJhc2UgSW5kZXhUdXBsZSBmb3IgZXZlcnkgVElECiAJICogdGhhdCBv cmlnaW5hdGVzIGZyb20gdGhlIHNhbWUgcG9zdGluZyBsaXN0CiAJICovCi0JaWYgKHNvLT5jdXJy VHVwbGVzKQotCQljdXJySXRlbS0+dHVwbGVPZmZzZXQgPSB0dXBsZU9mZnNldDsKKwlpZiAobmV3 YmF0Y2gtPmN1cnJUdXBsZXMpCisJCWl0ZW0tPnR1cGxlT2Zmc2V0ID0gYmFzZU9mZnNldDsKIH0K IAogI2RlZmluZSBMT09LX0FIRUFEX1JFUVVJUkVEX1JFQ0hFQ0tTIAkzCkBAIC0yODIyLDEzICsy ODE2LDEzIEBAIG5ld19wcmltX3NjYW46CiAJICogTm90ZTogV2UgbWFrZSBhIHNvZnQgYXNzdW1w dGlvbiB0aGF0IHRoZSBjdXJyZW50IHNjYW4gZGlyZWN0aW9uIHdpbGwKIAkgKiBhbHNvIGJlIHVz ZWQgd2l0aGluIF9idF9uZXh0LCB3aGVuIGl0IGlzIGFza2VkIHRvIHN0ZXAgb2ZmIHRoaXMgcGFn ZS4KIAkgKiBJdCBpcyB1cCB0byBfYnRfbmV4dCB0byBjYW5jZWwgdGhpcyBzY2hlZHVsZWQgcHJp bWl0aXZlIGluZGV4IHNjYW4KLQkgKiB3aGVuZXZlciBpdCBzdGVwcyB0byBhIHBhZ2UgaW4gdGhl IGRpcmVjdGlvbiBvcHBvc2l0ZSBjdXJyUG9zLmRpci4KKwkgKiB3aGVuZXZlciBpdCBzdGVwcyB0 byBhIHBhZ2UgaW4gdGhlIGRpcmVjdGlvbiBvcHBvc2l0ZSBwc3RhdGUtPmRpci4KIAkgKi8KIAlw c3RhdGUtPmNvbnRpbnVlc2NhbiA9IGZhbHNlOwkvKiBUZWxsIF9idF9yZWFkcGFnZSB3ZSdyZSBk b25lLi4uICovCiAJc28tPm5lZWRQcmltU2NhbiA9IHRydWU7CS8qIC4uLmJ1dCBjYWxsIF9idF9m aXJzdCBhZ2FpbiAqLwogCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4pCi0JCV9idF9wYXJhbGxl bF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBzby0+Y3VyclBvcy5jdXJyUGFnZSk7CisJCV9idF9w YXJhbGxlbF9wcmltc2Nhbl9zY2hlZHVsZShzY2FuLCBwc3RhdGUtPmN1cnJwYWdlKTsKIAogCS8q IENhbGxlcidzIHR1cGxlIGRvZXNuJ3QgbWF0Y2ggdGhlIG5ldyBxdWFsICovCiAJcmV0dXJuIGZh bHNlOwpAQCAtMjkxMywxNCArMjkwNyw2IEBAIF9idF9hZHZhbmNlX2FycmF5X2tleXNfaW5jcmVt ZW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIsCiAJICogUmVzdG9yZSB0 aGUgYXJyYXkga2V5cyB0byB0aGUgc3RhdGUgdGhleSB3ZXJlIGluIGltbWVkaWF0ZWx5IGJlZm9y ZSB3ZQogCSAqIHdlcmUgY2FsbGVkLiAgVGhpcyBlbnN1cmVzIHRoYXQgdGhlIGFycmF5cyBvbmx5 IGV2ZXIgcmF0Y2hldCBpbiB0aGUKIAkgKiBjdXJyZW50IHNjYW4gZGlyZWN0aW9uLgotCSAqCi0J ICogV2l0aG91dCB0aGlzLCBzY2FucyBjb3VsZCBvdmVybG9vayBtYXRjaGluZyB0dXBsZXMgd2hl biB0aGUgc2NhbgotCSAqIGRpcmVjdGlvbiBnZXRzIHJldmVyc2VkIGp1c3QgYmVmb3JlIGJ0Z2V0 dHVwbGUgcnVucyBvdXQgb2YgaXRlbXMgdG8KLQkgKiByZXR1cm4sIGJ1dCBqdXN0IGFmdGVyIF9i dF9yZWFkcGFnZSBwcmVwYXJlcyBhbGwgdGhlIGl0ZW1zIGZyb20gdGhlCi0JICogc2NhbidzIGZp bmFsIHBhZ2UgaW4gc28tPmN1cnJQb3MuICBXaGVuIHdlJ3JlIG9uIHRoZSBmaW5hbCBwYWdlIGl0 IGlzCi0JICogdHlwaWNhbCBmb3Igc28tPmN1cnJQb3MgdG8gZ2V0IGludmFsaWRhdGVkIG9uY2Ug YnRnZXR0dXBsZSBmaW5hbGx5Ci0JICogcmV0dXJucyBmYWxzZSwgd2hpY2gnbGwgZWZmZWN0aXZl bHkgaW52YWxpZGF0ZSB0aGUgc2NhbidzIGFycmF5IGtleXMuCi0JICogVGhhdCBoYXNuJ3QgaGFw cGVuZWQgeWV0LCB0aG91Z2ggLS0gYW5kIGluIGdlbmVyYWwgaXQgbWF5IG5ldmVyIGhhcHBlbi4K IAkgKi8KIAlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCAtZGlyKTsKIApkaWZmIC0tZ2l0IGEv c3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRyZWUuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9u YnRyZWUvbmJ0cmVlLmMKaW5kZXggM2RlYzFlZTY1Li5mNmNmNjdhYTEgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0cmVlLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNz L25idHJlZS9uYnRyZWUuYwpAQCAtMTU5LDExICsxNTksMTIgQEAgYnRoYW5kbGVyKFBHX0ZVTkNU SU9OX0FSR1MpCiAJCS5hbWFkanVzdG1lbWJlcnMgPSBidGFkanVzdG1lbWJlcnMsCiAJCS5hbWJl Z2luc2NhbiA9IGJ0YmVnaW5zY2FuLAogCQkuYW1yZXNjYW4gPSBidHJlc2NhbiwKLQkJLmFtZ2V0 dHVwbGUgPSBidGdldHR1cGxlLAorCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNo ID0gYnRnZXRiYXRjaCwKKwkJLmFtZnJlZWJhdGNoID0gYnRmcmVlYmF0Y2gsCiAJCS5hbWdldGJp dG1hcCA9IGJ0Z2V0Yml0bWFwLAogCQkuYW1lbmRzY2FuID0gYnRlbmRzY2FuLAotCQkuYW1tYXJr cG9zID0gYnRtYXJrcG9zLAotCQkuYW1yZXN0cnBvcyA9IGJ0cmVzdHJwb3MsCisJCS5hbXBvc3Jl c2V0ID0gYnRwb3NyZXNldCwKIAkJLmFtZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBidGVzdGltYXRl cGFyYWxsZWxzY2FuLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gYnRpbml0cGFyYWxsZWxzY2Fu LAogCQkuYW1wYXJhbGxlbHJlc2NhbiA9IGJ0cGFyYWxsZWxyZXNjYW4sCkBAIC0yMjIsMTMgKzIy MywxMyBAQCBidGluc2VydChSZWxhdGlvbiByZWwsIERhdHVtICp2YWx1ZXMsIGJvb2wgKmlzbnVs bCwKIH0KIAogLyoKLSAqCWJ0Z2V0dHVwbGUoKSAtLSBHZXQgdGhlIG5leHQgdHVwbGUgaW4gdGhl IHNjYW4uCisgKglidGdldGJhdGNoKCkgLS0gR2V0IHRoZSBmaXJzdCBvciBuZXh0IGJhdGNoIG9m IHR1cGxlcyBpbiB0aGUgc2NhbgogICovCi1ib29sCi1idGdldHR1cGxlKEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCitCYXRjaEluZGV4U2NhbgorYnRnZXRiYXRjaChJbmRl eFNjYW5EZXNjIHNjYW4sIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsIFNjYW5EaXJlY3Rpb24g ZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsK LQlib29sCQlyZXM7CisJQmF0Y2hJbmRleFNjYW4gYmF0Y2ggPSBwcmlvcmJhdGNoOwogCiAJQXNz ZXJ0KHNjYW4tPmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKIApAQCAtMjQzLDQzICsyNDQsMTggQEAg YnRnZXR0dXBsZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGlyKQogCQkgKiB0 aGUgYXBwcm9wcmlhdGUgZGlyZWN0aW9uLiAgSWYgd2UgaGF2ZW4ndCBkb25lIHNvIHlldCwgd2Ug Y2FsbAogCQkgKiBfYnRfZmlyc3QoKSB0byBnZXQgdGhlIGZpcnN0IGl0ZW0gaW4gdGhlIHNjYW4u CiAJCSAqLwotCQlpZiAoIUJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQkJcmVzID0g X2J0X2ZpcnN0KHNjYW4sIGRpcik7CisJCWlmIChiYXRjaCA9PSBOVUxMKQorCQkJYmF0Y2ggPSBf YnRfZmlyc3Qoc2NhbiwgZGlyKTsKIAkJZWxzZQotCQl7Ci0JCQkvKgotCQkJICogQ2hlY2sgdG8g c2VlIGlmIHdlIHNob3VsZCBraWxsIHRoZSBwcmV2aW91c2x5LWZldGNoZWQgdHVwbGUuCi0JCQkg Ki8KLQkJCWlmIChzY2FuLT5raWxsX3ByaW9yX3R1cGxlKQotCQkJewotCQkJCS8qCi0JCQkJICog WWVzLCByZW1lbWJlciBpdCBmb3IgbGF0ZXIuIChXZSdsbCBkZWFsIHdpdGggYWxsIHN1Y2gKLQkJ CQkgKiB0dXBsZXMgYXQgb25jZSByaWdodCBiZWZvcmUgbGVhdmluZyB0aGUgaW5kZXggcGFnZS4p ICBUaGUKLQkJCQkgKiB0ZXN0IGZvciBudW1LaWxsZWQgb3ZlcnJ1biBpcyBub3QganVzdCBwYXJh bm9pYTogaWYgdGhlCi0JCQkJICogY2FsbGVyIHJldmVyc2VzIGRpcmVjdGlvbiBpbiB0aGUgaW5k ZXhzY2FuIHRoZW4gdGhlIHNhbWUKLQkJCQkgKiBpdGVtIG1pZ2h0IGdldCBlbnRlcmVkIG11bHRp cGxlIHRpbWVzLiBJdCdzIG5vdCB3b3J0aAotCQkJCSAqIHRyeWluZyB0byBvcHRpbWl6ZSB0aGF0 LCBzbyB3ZSBkb24ndCBkZXRlY3QgaXQsIGJ1dCBpbnN0ZWFkCi0JCQkJICoganVzdCBmb3JnZXQg YW55IGV4Y2VzcyBlbnRyaWVzLgotCQkJCSAqLwotCQkJCWlmIChzby0+a2lsbGVkSXRlbXMgPT0g TlVMTCkKLQkJCQkJc28tPmtpbGxlZEl0ZW1zID0gcGFsbG9jX2FycmF5KGludCwgTWF4VElEc1Bl ckJUcmVlUGFnZSk7Ci0JCQkJaWYgKHNvLT5udW1LaWxsZWQgPCBNYXhUSURzUGVyQlRyZWVQYWdl KQotCQkJCQlzby0+a2lsbGVkSXRlbXNbc28tPm51bUtpbGxlZCsrXSA9IHNvLT5jdXJyUG9zLml0 ZW1JbmRleDsKLQkJCX0KKwkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgZGlyLCBiYXRjaCk7CiAK LQkJCS8qCi0JCQkgKiBOb3cgY29udGludWUgdGhlIHNjYW4uCi0JCQkgKi8KLQkJCXJlcyA9IF9i dF9uZXh0KHNjYW4sIGRpcik7Ci0JCX0KLQotCQkvKiBJZiB3ZSBoYXZlIGEgdHVwbGUsIHJldHVy biBpdCAuLi4gKi8KLQkJaWYgKHJlcykKKwkJLyogSWYgd2UgaGF2ZSBhIGJhdGNoLCByZXR1cm4g aXQgLi4uICovCisJCWlmIChiYXRjaCkKIAkJCWJyZWFrOwogCQkvKiAuLi4gb3RoZXJ3aXNlIHNl ZSBpZiB3ZSBuZWVkIGFub3RoZXIgcHJpbWl0aXZlIGluZGV4IHNjYW4gKi8KIAl9IHdoaWxlIChz by0+bnVtQXJyYXlLZXlzICYmIF9idF9zdGFydF9wcmltX3NjYW4oc2NhbikpOwogCi0JcmV0dXJu IHJlczsKKwlyZXR1cm4gYmF0Y2g7CiB9CiAKIC8qCkBAIC0yODksNiArMjY1LDcgQEAgaW50NjQK IGJ0Z2V0Yml0bWFwKEluZGV4U2NhbkRlc2Mgc2NhbiwgVElEQml0bWFwICp0Ym0pCiB7CiAJQlRT Y2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOworCUJhdGNoSW5kZXhT Y2FuIGJhdGNoOwogCWludDY0CQludGlkcyA9IDA7CiAJSXRlbVBvaW50ZXIgaGVhcFRpZDsKIApA QCAtMjk3LDI5ICsyNzQsMjkgQEAgYnRnZXRiaXRtYXAoSW5kZXhTY2FuRGVzYyBzY2FuLCBUSURC aXRtYXAgKnRibSkKIAkvKiBFYWNoIGxvb3AgaXRlcmF0aW9uIHBlcmZvcm1zIGFub3RoZXIgcHJp bWl0aXZlIGluZGV4IHNjYW4gKi8KIAlkbwogCXsKLQkJLyogRmV0Y2ggdGhlIGZpcnN0IHBhZ2Ug JiB0dXBsZSAqLwotCQlpZiAoX2J0X2ZpcnN0KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uKSkK KwkJLyogRmV0Y2ggdGhlIGZpcnN0IGJhdGNoICovCisJCWlmICgoYmF0Y2ggPSBfYnRfZmlyc3Qo c2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24pKSkKIAkJewotCQkJLyogU2F2ZSB0dXBsZSBJRCwg YW5kIGNvbnRpbnVlIHNjYW5uaW5nICovCi0JCQloZWFwVGlkID0gJnNjYW4tPnhzX2hlYXB0aWQ7 CisJCQlpbnQJCQlpdGVtSW5kZXggPSAwOworCisJCQkvKiBTYXZlIGZpcnN0IHR1cGxlJ3MgVElE ICovCisJCQloZWFwVGlkID0gJmJhdGNoLT5pdGVtc1tpdGVtSW5kZXhdLmhlYXBUaWQ7CiAJCQl0 Ym1fYWRkX3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCW50aWRzKys7CiAKIAkJ CWZvciAoOzspCiAJCQl7Ci0JCQkJLyoKLQkJCQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgd2l0 aGluIHBhZ2UuICBUaGlzIGlzIHRoZSBzYW1lIGFzIHRoZQotCQkJCSAqIGVhc3kgY2FzZSBpbiBf YnRfbmV4dCgpLgotCQkJCSAqLwotCQkJCWlmICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNv LT5jdXJyUG9zLmxhc3RJdGVtKQorCQkJCS8qIEFkdmFuY2UgdG8gbmV4dCBUSUQgd2l0aGluIHBh Z2Utc2l6ZWQgYmF0Y2ggKi8KKwkJCQlpZiAoKytpdGVtSW5kZXggPiBiYXRjaC0+bGFzdEl0ZW0p CiAJCQkJewogCQkJCQkvKiBsZXQgX2J0X25leHQgZG8gdGhlIGhlYXZ5IGxpZnRpbmcgKi8KLQkJ CQkJaWYgKCFfYnRfbmV4dChzY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbikpCisJCQkJCWl0ZW1J bmRleCA9IDA7CisJCQkJCWJhdGNoID0gX2J0X25leHQoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rp b24sIGJhdGNoKTsKKwkJCQkJaWYgKCFiYXRjaCkKIAkJCQkJCWJyZWFrOwogCQkJCX0KIAotCQkJ CS8qIFNhdmUgdHVwbGUgSUQsIGFuZCBjb250aW51ZSBzY2FubmluZyAqLwotCQkJCWhlYXBUaWQg PSAmc28tPmN1cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XS5oZWFwVGlkOworCQkJ CWhlYXBUaWQgPSAmYmF0Y2gtPml0ZW1zW2l0ZW1JbmRleF0uaGVhcFRpZDsKIAkJCQl0Ym1fYWRk X3R1cGxlcyh0Ym0sIGhlYXBUaWQsIDEsIGZhbHNlKTsKIAkJCQludGlkcysrOwogCQkJfQpAQCAt MzQ3LDggKzMyNCw2IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQg bm9yZGVyYnlzKQogCiAJLyogYWxsb2NhdGUgcHJpdmF0ZSB3b3Jrc3BhY2UgKi8KIAlzbyA9IHBh bGxvY19vYmplY3QoQlRTY2FuT3BhcXVlRGF0YSk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+ Y3VyclBvcyk7Ci0JQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+bWFya1Bvcyk7CiAJaWYgKHNjYW4t Pm51bWJlck9mS2V5cyA+IDApCiAJCXNvLT5rZXlEYXRhID0gKFNjYW5LZXkpIHBhbGxvYyhzY2Fu LT5udW1iZXJPZktleXMgKiBzaXplb2YoU2NhbktleURhdGEpKTsKIAllbHNlCkBAIC0zNjIsMTkg KzMzNyw5IEBAIGJ0YmVnaW5zY2FuKFJlbGF0aW9uIHJlbCwgaW50IG5rZXlzLCBpbnQgbm9yZGVy YnlzKQogCXNvLT5vcmRlclByb2NzID0gTlVMTDsKIAlzby0+YXJyYXlDb250ZXh0ID0gTlVMTDsK IAotCXNvLT5raWxsZWRJdGVtcyA9IE5VTEw7CQkvKiB1bnRpbCBuZWVkZWQgKi8KLQlzby0+bnVt S2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgZG9uJ3Qga25vdyB5ZXQgd2hldGhlciB0aGUgc2Nh biB3aWxsIGJlIGluZGV4LW9ubHksIHNvIHdlIGRvIG5vdAotCSAqIGFsbG9jYXRlIHRoZSB0dXBs ZSB3b3Jrc3BhY2UgYXJyYXlzIHVudGlsIGJ0cmVzY2FuLiAgSG93ZXZlciwgd2Ugc2V0IHVwCi0J ICogc2Nhbi0+eHNfaXR1cGRlc2Mgd2hldGhlciB3ZSdsbCBuZWVkIGl0IG9yIG5vdCwgc2luY2Ug dGhhdCdzIHNvIGNoZWFwLgotCSAqLwotCXNvLT5jdXJyVHVwbGVzID0gc28tPm1hcmtUdXBsZXMg PSBOVUxMOwotCi0Jc2Nhbi0+eHNfaXR1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKHJlbCk7Ci0K IAlzY2FuLT5vcGFxdWUgPSBzbzsKKwlzY2FuLT54c19pdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVz Y3IocmVsKTsKKwlzY2FuLT5tYXhpdGVtc2JhdGNoID0gTWF4VElEc1BlckJUcmVlUGFnZTsKIAog CXJldHVybiBzY2FuOwogfQpAQCAtMzg4LDcyICszNTMsMzcgQEAgYnRyZXNjYW4oSW5kZXhTY2Fu RGVzYyBzY2FuLCBTY2FuS2V5IHNjYW5rZXksIGludCBuc2NhbmtleXMsCiB7CiAJQlRTY2FuT3Bh cXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhv bGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJU U2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3Vy cmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtp bGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlu bmVkKHNvLT5jdXJyUG9zKTsKLQkJQlRTY2FuUG9zSW52YWxpZGF0ZShzby0+Y3VyclBvcyk7Ci0J fQotCi0JLyoKLQkgKiBXZSBwcmVmZXIgdG8gZWFnZXJseSBkcm9wIGxlYWYgcGFnZSBwaW5zIGJl Zm9yZSBidGdldHR1cGxlIHJldHVybnMuCi0JICogVGhpcyBhdm9pZHMgbWFraW5nIFZBQ1VVTSB3 YWl0IHRvIGFjcXVpcmUgYSBjbGVhbnVwIGxvY2sgb24gdGhlIHBhZ2UuCi0JICoKLQkgKiBXZSBj YW5ub3Qgc2FmZWx5IGRyb3AgbGVhZiBwYWdlIHBpbnMgZHVyaW5nIGluZGV4LW9ubHkgc2NhbnMg ZHVlIHRvIGEKLQkgKiByYWNlIGNvbmRpdGlvbiBpbnZvbHZpbmcgVkFDVVVNIHNldHRpbmcgcGFn ZXMgYWxsLXZpc2libGUgaW4gdGhlIFZNLgotCSAqIEl0J3MgYWxzbyB1bnNhZmUgZm9yIHBsYWlu IGluZGV4IHNjYW5zIHRoYXQgdXNlIGEgbm9uLU1WQ0Mgc25hcHNob3QuCi0JICoKLQkgKiBXaGVu IHdlIGRyb3AgcGlucyBlYWdlcmx5LCB0aGUgbWVjaGFuaXNtIHRoYXQgbWFya3Mgc28tPmtpbGxl ZEl0ZW1zW10KLQkgKiBpbmRleCB0dXBsZXMgTFBfREVBRCBoYXMgdG8gZGVhbCB3aXRoIGNvbmN1 cnJlbnQgVElEIHJlY3ljbGluZyByYWNlcy4KLQkgKiBUaGUgc2NoZW1lIHVzZWQgdG8gZGV0ZWN0 IHVuc2FmZSBUSUQgcmVjeWNsaW5nIHdvbid0IHdvcmsgd2hlbiBzY2FubmluZwotCSAqIHVubG9n Z2VkIHJlbGF0aW9ucyAoc2luY2UgaXQgaW52b2x2ZXMgc2F2aW5nIGFuIGFmZmVjdGVkIHBhZ2Un cyBMU04pLgotCSAqIE9wdCBvdXQgb2YgZWFnZXIgcGluIGRyb3BwaW5nIGR1cmluZyB1bmxvZ2dl ZCByZWxhdGlvbiBzY2FucyBmb3Igbm93Ci0JICogKHRoaXMgaXMgcHJlZmVyYWJsZSB0byBvcHRp bmcgb3V0IG9mIGtpbGxfcHJpb3JfdHVwbGUgTFBfREVBRCBzZXR0aW5nKS4KLQkgKgotCSAqIEFs c28gb3B0IG91dCBvZiBkcm9wcGluZyBsZWFmIHBhZ2UgcGlucyBlYWdlcmx5IGR1cmluZyBiaXRt YXAgc2NhbnMuCi0JICogUGlucyBjYW5ub3QgYmUgaGVsZCBmb3IgbW9yZSB0aGFuIGFuIGluc3Rh bnQgZHVyaW5nIGJpdG1hcCBzY2FucyBlaXRoZXIKLQkgKiB3YXksIHNvIHdlIG1pZ2h0IGFzIHdl bGwgYXZvaWQgd2FzdGluZyBjeWNsZXMgb24gYWNxdWlyaW5nIHBhZ2UgTFNOcy4KLQkgKgotCSAq IFNlZSBuYnRyZWUvUkVBRE1FIHNlY3Rpb24gb24gbWFraW5nIGNvbmN1cnJlbnQgVElEIHJlY3lj bGluZyBzYWZlLgotCSAqCi0JICogTm90ZTogc28tPmRyb3BQaW4gc2hvdWxkIG5ldmVyIGNoYW5n ZSBhY3Jvc3MgcmVzY2Fucy4KLQkgKi8KLQlzby0+ZHJvcFBpbiA9ICghc2Nhbi0+eHNfd2FudF9p dHVwICYmCi0JCQkJICAgSXNNVkNDU25hcHNob3Qoc2Nhbi0+eHNfc25hcHNob3QpICYmCi0JCQkJ ICAgUmVsYXRpb25OZWVkc1dBTChzY2FuLT5pbmRleFJlbGF0aW9uKSAmJgotCQkJCSAgIHNjYW4t PmhlYXBSZWxhdGlvbiAhPSBOVUxMKTsKLQotCXNvLT5tYXJrSXRlbUluZGV4ID0gLTE7Ci0Jc28t Pm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCXNvLT5zY2FuQmVoaW5kID0gZmFsc2U7Ci0Jc28tPm9w cG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKLQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJr UG9zKTsKLQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5tYXJrUG9zKTsKLQotCS8qCi0JICogQWxs b2NhdGUgdHVwbGUgd29ya3NwYWNlIGFycmF5cywgaWYgbmVlZGVkIGZvciBhbiBpbmRleC1vbmx5 IHNjYW4gYW5kCi0JICogbm90IGFscmVhZHkgZG9uZSBpbiBhIHByZXZpb3VzIHJlc2NhbiBjYWxs LiAgVG8gc2F2ZSBvbiBwYWxsb2MKLQkgKiBvdmVyaGVhZCwgYm90aCB3b3Jrc3BhY2VzIGFyZSBh bGxvY2F0ZWQgYXMgb25lIHBhbGxvYyBibG9jazsgb25seSB0aGlzCi0JICogZnVuY3Rpb24gYW5k IGJ0ZW5kc2NhbiBrbm93IHRoYXQuCi0JICovCi0JaWYgKHNjYW4tPnhzX3dhbnRfaXR1cCAmJiBz by0+Y3VyclR1cGxlcyA9PSBOVUxMKQotCXsKLQkJc28tPmN1cnJUdXBsZXMgPSAoY2hhciAqKSBw YWxsb2MoQkxDS1NaICogMik7Ci0JCXNvLT5tYXJrVHVwbGVzID0gc28tPmN1cnJUdXBsZXMgKyBC TENLU1o7Ci0JfQotCiAJLyoKIAkgKiBSZXNldCB0aGUgc2NhbiBrZXlzCiAJICovCiAJaWYgKHNj YW5rZXkgJiYgc2Nhbi0+bnVtYmVyT2ZLZXlzID4gMCkKIAkJbWVtY3B5KHNjYW4tPmtleURhdGEs IHNjYW5rZXksIHNjYW4tPm51bWJlck9mS2V5cyAqIHNpemVvZihTY2FuS2V5RGF0YSkpOworCXNv LT5uZWVkUHJpbVNjYW4gPSBmYWxzZTsKKwlzby0+c2NhbkJlaGluZCA9IGZhbHNlOworCXNvLT5v cHBvc2l0ZURpckNoZWNrID0gZmFsc2U7CiAJc28tPm51bWJlck9mS2V5cyA9IDA7CQkvKiB1bnRp bCBfYnRfcHJlcHJvY2Vzc19rZXlzIHNldHMgaXQgKi8KIAlzby0+bnVtQXJyYXlLZXlzID0gMDsJ CS8qIGRpdHRvICovCiB9CiAKKy8qCisgKglidGZyZWViYXRjaCgpIC0tIEZyZWUgYmF0Y2ggcmVz b3VyY2VzLCBpbmNsdWRpbmcgaXRzIGJ1ZmZlciBwaW4KKyAqLwordm9pZAorYnRmcmVlYmF0Y2go SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKK3sKKwlpZiAoYmF0Y2gt Pm51bUtpbGxlZCA+IDApCisJCV9idF9raWxsaXRlbXMoc2NhbiwgYmF0Y2gpOworCisJaWYgKCFz Y2FuLT5kcm9wUGluKQorCXsKKwkJLyogaW5kZXhhbV91dGlsX2JhdGNoX3VubG9jayBkaWRuJ3Qg dW5waW4gcGFnZSBlYXJsaWVyLCBkbyBpdCBub3cgKi8KKwkJUmVsZWFzZUJ1ZmZlcihiYXRjaC0+ YnVmKTsKKwkJYmF0Y2gtPmJ1ZiA9IEludmFsaWRCdWZmZXI7CisJfQorCisJaW5kZXhhbV91dGls X2JhdGNoX3JlbGVhc2Uoc2NhbiwgYmF0Y2gpOworfQorCiAvKgogICoJYnRlbmRzY2FuKCkgLS0g Y2xvc2UgZG93biBhIHNjYW4KICAqLwpAQCAtNDYyLDExNiArMzkyLDQ4IEBAIGJ0ZW5kc2NhbihJ bmRleFNjYW5EZXNjIHNjYW4pCiB7CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkg c2Nhbi0+b3BhcXVlOwogCi0JLyogd2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQgbG9ja3MsIGJ1 dCBnb3R0YSBkcm9wIHRoZSBwaW5zICovCi0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQ b3MpKQotCXsKLQkJLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55 IGtpbGxlZCBpdGVtcyAqLwotCQlpZiAoc28tPm51bUtpbGxlZCA+IDApCi0JCQlfYnRfa2lsbGl0 ZW1zKHNjYW4pOwotCQlCVFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5jdXJyUG9zKTsKLQl9Ci0K LQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCUJUU2NhblBvc1VucGluSWZQaW5uZWQoc28tPm1h cmtQb3MpOwotCi0JLyogTm8gbmVlZCB0byBpbnZhbGlkYXRlIHBvc2l0aW9ucywgdGhlIFJBTSBp cyBhYm91dCB0byBiZSBmcmVlZC4gKi8KLQogCS8qIFJlbGVhc2Ugc3RvcmFnZSAqLwogCWlmIChz by0+a2V5RGF0YSAhPSBOVUxMKQogCQlwZnJlZShzby0+a2V5RGF0YSk7CiAJLyogc28tPmFycmF5 S2V5cyBhbmQgc28tPm9yZGVyUHJvY3MgYXJlIGluIGFycmF5Q29udGV4dCAqLwogCWlmIChzby0+ YXJyYXlDb250ZXh0ICE9IE5VTEwpCiAJCU1lbW9yeUNvbnRleHREZWxldGUoc28tPmFycmF5Q29u dGV4dCk7Ci0JaWYgKHNvLT5raWxsZWRJdGVtcyAhPSBOVUxMKQotCQlwZnJlZShzby0+a2lsbGVk SXRlbXMpOwotCWlmIChzby0+Y3VyclR1cGxlcyAhPSBOVUxMKQotCQlwZnJlZShzby0+Y3VyclR1 cGxlcyk7Ci0JLyogc28tPm1hcmtUdXBsZXMgc2hvdWxkIG5vdCBiZSBwZnJlZSdkLCBzZWUgYnRy ZXNjYW4gKi8KIAlwZnJlZShzbyk7CiB9CiAKIC8qCi0gKglidG1hcmtwb3MoKSAtLSBzYXZlIGN1 cnJlbnQgc2NhbiBwb3NpdGlvbgorICoJYnRwb3NyZXNldCgpIC0tIGludmFsaWRhdGUgc2Nhbidz IGFycmF5IGtleXMKICAqLwogdm9pZAotYnRtYXJrcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKK2J0 cG9zcmVzZXQoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBtYXJrYmF0Y2gpCiB7 CiAJQlRTY2FuT3BhcXVlIHNvID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCi0JLyog VGhlcmUgbWF5IGJlIGFuIG9sZCBtYXJrIHdpdGggYSBwaW4gKGJ1dCBubyBsb2NrKS4gKi8KLQlC VFNjYW5Qb3NVbnBpbklmUGlubmVkKHNvLT5tYXJrUG9zKTsKKwlpZiAoIXNvLT5udW1BcnJheUtl eXMpCisJCXJldHVybjsKIAogCS8qCi0JICogSnVzdCByZWNvcmQgdGhlIGN1cnJlbnQgaXRlbUlu ZGV4LiAgSWYgd2UgbGF0ZXIgc3RlcCB0byBuZXh0IHBhZ2UKLQkgKiBiZWZvcmUgcmVsZWFzaW5n IHRoZSBtYXJrZWQgcG9zaXRpb24sIF9idF9zdGVwcGFnZSBtYWtlcyBhIGZ1bGwgY29weSBvZgot CSAqIHRoZSBjdXJyUG9zIHN0cnVjdCBpbiBtYXJrUG9zLiAgSWYgKGFzIG9mdGVuIGhhcHBlbnMp IHRoZSBtYXJrIGlzIG1vdmVkCi0JICogYmVmb3JlIHdlIGxlYXZlIHRoZSBwYWdlLCB3ZSBkb24n dCBoYXZlIHRvIGRvIHRoYXQgd29yay4KKwkgKiBDb3JlIHN5c3RlbSBpcyBhYm91dCB0byByZXN0 b3JlIGEgbWFyayBhc3NvY2lhdGVkIHdpdGggYSBwcmV2aW91c2x5CisJICogcmV0dXJuZWQgYmF0 Y2guICBSZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byBtYWtlIGFsbCB0aGlzIHNhZmUuCiAJICov Ci0JaWYgKEJUU2NhblBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKQotCQlzby0+bWFya0l0ZW1JbmRl eCA9IHNvLT5jdXJyUG9zLml0ZW1JbmRleDsKKwlfYnRfc3RhcnRfYXJyYXlfa2V5cyhzY2FuLCBt YXJrYmF0Y2gtPmRpcik7CisKKwkvKgorCSAqIENvcmUgc3lzdGVtIHdpbGwgaW52YWxpZGF0ZSBh bGwgb3RoZXIgYmF0Y2hlcy4KKwkgKgorCSAqIERlYWwgd2l0aCB0aGlzIGJ5IHVuc2V0dGluZyBu ZWVkUHJpbVNjYW4gYXMgd2VsbCBhcyBtb3JlUmlnaHQgKG9yIGFzCisJICogd2VsbCBhcyBtb3Jl TGVmdCwgd2hlbiBzY2FubmluZyBiYWNrd2FyZHMpLiAgVGhhdCB3YXksIHRoZSBuZXh0IHRpbWUK KwkgKiBfYnRfbmV4dCBpcyBjYWxsZWQgaXQgd2lsbCBzdGVwIHRvIHRoZSByaWdodCAob3IgdG8g dGhlIGxlZnQpLiAgQXQgdGhhdAorCSAqIHBvaW50IF9idF9yZWFkcGFnZSB3aWxsIHJlc3RvcmUg dGhlIHNjYW4ncyBhcnJheXMgdG8gZWxlbWVudHMgdGhhdAorCSAqIGNvcnJlY3RseSB0cmFjayB0 aGUgbmV4dCBwYWdlJ3MgcG9zaXRpb24gaW4gdGhlIGluZGV4J3Mga2V5IHNwYWNlLgorCSAqLwor CWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKG1hcmtiYXRjaC0+ZGlyKSkKKwkJbWFya2JhdGNo LT5tb3JlUmlnaHQgPSB0cnVlOwogCWVsc2UKLQl7Ci0JCUJUU2NhblBvc0ludmFsaWRhdGUoc28t Pm1hcmtQb3MpOwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCX0KLX0KLQotLyoKLSAqCWJ0 cmVzdHJwb3MoKSAtLSByZXN0b3JlIHNjYW4gdG8gbGFzdCBzYXZlZCBwb3NpdGlvbgotICovCi12 b2lkCi1idHJlc3RycG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKLXsKLQlCVFNjYW5PcGFxdWUgc28g PSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWU7Ci0KLQlpZiAoc28tPm1hcmtJdGVtSW5kZXgg Pj0gMCkKLQl7Ci0JCS8qCi0JCSAqIFRoZSBzY2FuIGhhcyBuZXZlciBtb3ZlZCB0byBhIG5ldyBw YWdlIHNpbmNlIHRoZSBsYXN0IG1hcmsuICBKdXN0Ci0JCSAqIHJlc3RvcmUgdGhlIGl0ZW1JbmRl eC4KLQkJICoKLQkJICogTkI6IEluIHRoaXMgY2FzZSB3ZSBjYW4ndCBjb3VudCBvbiBhbnl0aGlu ZyBpbiBzby0+bWFya1BvcyB0byBiZQotCQkgKiBhY2N1cmF0ZS4KLQkJICovCi0JCXNvLT5jdXJy UG9zLml0ZW1JbmRleCA9IHNvLT5tYXJrSXRlbUluZGV4OwotCX0KLQllbHNlCi0JewotCQkvKgot CQkgKiBUaGUgc2NhbiBtb3ZlZCB0byBhIG5ldyBwYWdlIGFmdGVyIGxhc3QgbWFyayBvciByZXN0 b3JlLCBhbmQgd2UgYXJlCi0JCSAqIG5vdyByZXN0b3JpbmcgdG8gdGhlIG1hcmtlZCBwYWdlLiAg V2UgYXJlbid0IGhvbGRpbmcgYW55IHJlYWQKLQkJICogbG9ja3MsIGJ1dCBpZiB3ZSdyZSBzdGls bCBob2xkaW5nIHRoZSBwaW4gZm9yIHRoZSBjdXJyZW50IHBvc2l0aW9uLAotCQkgKiB3ZSBtdXN0 IGRyb3AgaXQuCi0JCSAqLwotCQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpCi0J CXsKLQkJCS8qIEJlZm9yZSBsZWF2aW5nIGN1cnJlbnQgcGFnZSwgZGVhbCB3aXRoIGFueSBraWxs ZWQgaXRlbXMgKi8KLQkJCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJCQlfYnRfa2lsbGl0ZW1z KHNjYW4pOwotCQkJQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7Ci0JCX0KLQot CQlpZiAoQlRTY2FuUG9zSXNWYWxpZChzby0+bWFya1BvcykpCi0JCXsKLQkJCS8qIGJ1bXAgcGlu IG9uIG1hcmsgYnVmZmVyIGZvciBhc3NpZ25tZW50IHRvIGN1cnJlbnQgYnVmZmVyICovCi0JCQlp ZiAoQlRTY2FuUG9zSXNQaW5uZWQoc28tPm1hcmtQb3MpKQotCQkJCUluY3JCdWZmZXJSZWZDb3Vu dChzby0+bWFya1Bvcy5idWYpOwotCQkJbWVtY3B5KCZzby0+Y3VyclBvcywgJnNvLT5tYXJrUG9z LAotCQkJCSAgIG9mZnNldG9mKEJUU2NhblBvc0RhdGEsIGl0ZW1zWzFdKSArCi0JCQkJICAgc28t Pm1hcmtQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQkJaWYgKHNvLT5j dXJyVHVwbGVzKQotCQkJCW1lbWNweShzby0+Y3VyclR1cGxlcywgc28tPm1hcmtUdXBsZXMsCi0J CQkJCSAgIHNvLT5tYXJrUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCQkvKiBSZXNldCB0aGUgc2Nh bidzIGFycmF5IGtleXMgKHNlZSBfYnRfc3RlcHBhZ2UgZm9yIHdoeSkgKi8KLQkJCWlmIChzby0+ bnVtQXJyYXlLZXlzKQotCQkJewotCQkJCV9idF9zdGFydF9hcnJheV9rZXlzKHNjYW4sIHNvLT5j dXJyUG9zLmRpcik7Ci0JCQkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwotCQkJfQotCQl9Ci0J CWVsc2UKLQkJCUJUU2NhblBvc0ludmFsaWRhdGUoc28tPmN1cnJQb3MpOwotCX0KKwkJbWFya2Jh dGNoLT5tb3JlTGVmdCA9IHRydWU7CisJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOworCXNvLT5z Y2FuQmVoaW5kID0gZmFsc2U7CisJc28tPm9wcG9zaXRlRGlyQ2hlY2sgPSBmYWxzZTsKIH0KIAog LyoKQEAgLTg4NywxNSArNzQ5LDYgQEAgX2J0X3BhcmFsbGVsX3NlaXplKEluZGV4U2NhbkRlc2Mg c2NhbiwgQmxvY2tOdW1iZXIgKm5leHRfc2Nhbl9wYWdlLAogCSpuZXh0X3NjYW5fcGFnZSA9IElu dmFsaWRCbG9ja051bWJlcjsKIAkqbGFzdF9jdXJyX3BhZ2UgPSBJbnZhbGlkQmxvY2tOdW1iZXI7 CiAKLQkvKgotCSAqIFJlc2V0IHNvLT5jdXJyUG9zLCBhbmQgaW5pdGlhbGl6ZSBtb3JlTGVmdC9t b3JlUmlnaHQgc3VjaCB0aGF0IHRoZSBuZXh0Ci0JICogY2FsbCB0byBfYnRfcmVhZG5leHRwYWdl IHRyZWF0cyB0aGlzIGJhY2tlbmQgc2ltaWxhcmx5IHRvIGEgc2VyaWFsCi0JICogYmFja2VuZCB0 aGF0IHN0ZXBzIGZyb20gKmxhc3RfY3Vycl9wYWdlIHRvICpuZXh0X3NjYW5fcGFnZSAodW5sZXNz IHRoaXMKLQkgKiBiYWNrZW5kJ3Mgc28tPmN1cnJQb3MgaXMgaW5pdGlhbGl6ZWQgYnkgX2J0X3Jl YWRmaXJzdHBhZ2UgYmVmb3JlIHRoZW4pLgotCSAqLwotCUJUU2NhblBvc0ludmFsaWRhdGUoc28t PmN1cnJQb3MpOwotCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKLQogCWlmIChmaXJzdCkKIAl7CiAJCS8qCkBAIC0xMDQ1LDggKzg5OCw2IEBAIF9i dF9wYXJhbGxlbF9kb25lKEluZGV4U2NhbkRlc2Mgc2NhbikKIAlCVFBhcmFsbGVsU2NhbkRlc2Mg YnRzY2FuOwogCWJvb2wJCXN0YXR1c19jaGFuZ2VkID0gZmFsc2U7CiAKLQlBc3NlcnQoIUJUU2Nh blBvc0lzVmFsaWQoc28tPmN1cnJQb3MpKTsKLQogCS8qIERvIG5vdGhpbmcsIGZvciBub24tcGFy YWxsZWwgc2NhbnMgKi8KIAlpZiAocGFyYWxsZWxfc2NhbiA9PSBOVUxMKQogCQlyZXR1cm47CmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYwppbmRleCA4NmIwZjIzOWUuLjRiNTNlODUz MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL25idHJlZS9uYnRzZWFyY2guYworKysg Yi9zcmMvYmFja2VuZC9hY2Nlc3MvbmJ0cmVlL25idHNlYXJjaC5jCkBAIC0yNSw1MyArMjUsMjMg QEAKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAogCi1zdGF0aWMgaW5saW5lIHZvaWQgX2J0X2Ry b3BfbG9ja19hbmRfbWF5YmVfcGluKFJlbGF0aW9uIHJlbCwgQlRTY2FuT3BhcXVlIHNvKTsKIHN0 YXRpYyBCdWZmZXIgX2J0X21vdmVyaWdodChSZWxhdGlvbiByZWwsIFJlbGF0aW9uIGhlYXByZWws IEJUU2Nhbkluc2VydCBrZXksCiAJCQkJCQkJQnVmZmVyIGJ1ZiwgYm9vbCBmb3J1cGRhdGUsIEJU U3RhY2sgc3RhY2ssCiAJCQkJCQkJaW50IGFjY2Vzcyk7CiBzdGF0aWMgT2Zmc2V0TnVtYmVyIF9i dF9iaW5zcmNoKFJlbGF0aW9uIHJlbCwgQlRTY2FuSW5zZXJ0IGtleSwgQnVmZmVyIGJ1Zik7CiBz dGF0aWMgaW50CV9idF9iaW5zcmNoX3Bvc3RpbmcoQlRTY2FuSW5zZXJ0IGtleSwgUGFnZSBwYWdl LAogCQkJCQkJCQlPZmZzZXROdW1iZXIgb2ZmbnVtKTsKLXN0YXRpYyBpbmxpbmUgdm9pZCBfYnRf cmV0dXJuaXRlbShJbmRleFNjYW5EZXNjIHNjYW4sIEJUU2Nhbk9wYXF1ZSBzbyk7Ci1zdGF0aWMg Ym9vbCBfYnRfc3RlcHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcik7 Ci1zdGF0aWMgYm9vbCBfYnRfcmVhZGZpcnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNl dE51bWJlciBvZmZudW0sCi0JCQkJCQkJICBTY2FuRGlyZWN0aW9uIGRpcik7Ci1zdGF0aWMgYm9v bCBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tOdW1iZXIgYmxrbm8s Ci0JCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLAot CQkJCQkJCSBib29sIHNlaXplZCk7CitzdGF0aWMgQmF0Y2hJbmRleFNjYW4gX2J0X3JlYWRmaXJz dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoLAorCQkJ CQkJCQkJCU9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKTsKK3N0YXRpYyBC YXRjaEluZGV4U2NhbiBfYnRfcmVhZG5leHRwYWdlKEluZGV4U2NhbkRlc2Mgc2NhbiwgQmxvY2tO dW1iZXIgYmxrbm8sCisJCQkJCQkJCQkgICBCbG9ja051bWJlciBsYXN0Y3VycmJsa25vLAorCQkJ CQkJCQkJICAgU2NhbkRpcmVjdGlvbiBkaXIsIGJvb2wgZmlyc3RwYWdlKTsKIHN0YXRpYyBCdWZm ZXIgX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQoUmVsYXRpb24gcmVsLCBCbG9ja051bWJlciAq Ymxrbm8sCiAJCQkJCQkJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8pOwotc3RhdGljIGJv b2wgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpOwor c3RhdGljIEJhdGNoSW5kZXhTY2FuIF9idF9lbmRwb2ludChJbmRleFNjYW5EZXNjIHNjYW4sIFNj YW5EaXJlY3Rpb24gZGlyLAorCQkJCQkJCQkgICBCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoKTsK IAogCi0vKgotICoJX2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKCkKLSAqCi0gKiBVbmxvY2sg c28tPmN1cnJQb3MuYnVmLiAgSWYgc2NhbiBpcyBzby0+ZHJvcFBpbiwgZHJvcCB0aGUgcGluLCB0 b28uCi0gKiBEcm9wcGluZyB0aGUgcGluIHByZXZlbnRzIFZBQ1VVTSBmcm9tIGJsb2NraW5nIG9u IGFjcXVpcmluZyBhIGNsZWFudXAgbG9jay4KLSAqLwotc3RhdGljIGlubGluZSB2b2lkCi1fYnRf ZHJvcF9sb2NrX2FuZF9tYXliZV9waW4oUmVsYXRpb24gcmVsLCBCVFNjYW5PcGFxdWUgc28pCi17 Ci0JaWYgKCFzby0+ZHJvcFBpbikKLQl7Ci0JCS8qIEp1c3QgZHJvcCB0aGUgbG9jayAobm90IHRo ZSBwaW4pICovCi0JCV9idF91bmxvY2tidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCQlyZXR1 cm47Ci0JfQotCi0JLyoKLQkgKiBEcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRoZSBwaW4uCi0JICoK LQkgKiBIYXZlIHRvIHNldCBzby0+Y3VyclBvcy5sc24gc28gdGhhdCBfYnRfa2lsbGl0ZW1zIGhh cyBhIHdheSB0byBkZXRlY3QKLQkgKiB3aGVuIGNvbmN1cnJlbnQgaGVhcCBUSUQgcmVjeWNsaW5n IGJ5IFZBQ1VVTSBtaWdodCBoYXZlIHRha2VuIHBsYWNlLgotCSAqLwotCUFzc2VydChSZWxhdGlv bk5lZWRzV0FMKHJlbCkpOwotCXNvLT5jdXJyUG9zLmxzbiA9IEJ1ZmZlckdldExTTkF0b21pYyhz by0+Y3VyclBvcy5idWYpOwotCV9idF9yZWxidWYocmVsLCBzby0+Y3VyclBvcy5idWYpOwotCXNv LT5jdXJyUG9zLmJ1ZiA9IEludmFsaWRCdWZmZXI7Ci19Ci0KIC8qCiAgKglfYnRfc2VhcmNoKCkg LS0gU2VhcmNoIHRoZSB0cmVlIGZvciBhIHBhcnRpY3VsYXIgc2NhbmtleSwKICAqCQlvciBtb3Jl IHByZWNpc2VseSBmb3IgdGhlIGZpcnN0IGxlYWYgcGFnZSBpdCBjb3VsZCBiZSBvbi4KQEAgLTg2 MCwyMCArODMwLDE2IEBAIF9idF9jb21wYXJlKFJlbGF0aW9uIHJlbCwKICAqCQljb25kaXRpb25z LCBhbmQgdGhlIHRyZWUgb3JkZXJpbmcuICBXZSBmaW5kIHRoZSBmaXJzdCBpdGVtIChvciwKICAq CQlpZiBiYWNrd2FyZHMgc2NhbiwgdGhlIGxhc3QgaXRlbSkgaW4gdGhlIHRyZWUgdGhhdCBzYXRp c2ZpZXMgdGhlCiAgKgkJcXVhbGlmaWNhdGlvbnMgaW4gdGhlIHNjYW4ga2V5LiAgT24gc3VjY2Vz cyBleGl0LCBkYXRhIGFib3V0IHRoZQotICoJCW1hdGNoaW5nIHR1cGxlKHMpIG9uIHRoZSBwYWdl IGhhcyBiZWVuIGxvYWRlZCBpbnRvIHNvLT5jdXJyUG9zLiAgV2UnbGwKLSAqCQlkcm9wIGFsbCBs b2NrcyBhbmQgaG9sZCBvbnRvIGEgcGluIG9uIHBhZ2UncyBidWZmZXIsIGV4Y2VwdCBkdXJpbmcK LSAqCQlzby0+ZHJvcFBpbiBzY2Fucywgd2hlbiB3ZSBkcm9wIGJvdGggdGhlIGxvY2sgYW5kIHRo ZSBwaW4uCi0gKgkJX2J0X3JldHVybml0ZW0gc2V0cyB0aGUgbmV4dCBpdGVtIHRvIHJldHVybiB0 byBzY2FuIG9uIHN1Y2Nlc3MgZXhpdC4KKyAqCQltYXRjaGluZyB0dXBsZShzKSBvbiB0aGUgcGFn ZSBoYXMgYmVlbiBsb2FkZWQgaW50byB0aGUgcmV0dXJuZWQgYmF0Y2guCiAgKgotICogSWYgdGhl cmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwgd2UgcmV0dXJuIGZhbHNlLCB3 aXRoIG5vCi0gKiBwaW5zIG9yIGxvY2tzIGhlbGQuICBzby0+Y3VyclBvcyB3aWxsIHJlbWFpbiBp bnZhbGlkLgorICogSWYgdGhlcmUgYXJlIG5vIG1hdGNoaW5nIGl0ZW1zIGluIHRoZSBpbmRleCwg d2UganVzdCByZXR1cm4gTlVMTC4KICAqCiAgKiBOb3RlIHRoYXQgc2Nhbi0+a2V5RGF0YVtdLCBh bmQgdGhlIHNvLT5rZXlEYXRhW10gc2NhbmtleSBidWlsdCBmcm9tIGl0LAogICogYXJlIGJvdGgg c2VhcmNoLXR5cGUgc2NhbmtleXMgKHNlZSBuYnRyZWUvUkVBRE1FIGZvciBtb3JlIGFib3V0IHRo aXMpLgogICogV2l0aGluIHRoaXMgcm91dGluZSwgd2UgYnVpbGQgYSB0ZW1wb3JhcnkgaW5zZXJ0 aW9uLXR5cGUgc2NhbmtleSB0byB1c2UKICAqIGluIGxvY2F0aW5nIHRoZSBzY2FuIHN0YXJ0IHBv c2l0aW9uLgogICovCi1ib29sCitCYXRjaEluZGV4U2NhbgogX2J0X2ZpcnN0KEluZGV4U2NhbkRl c2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+aW5k ZXhSZWxhdGlvbjsKQEAgLTg4Nyw4ICs4NTMsMTAgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mg c2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJU3RyYXRlZ3lOdW1iZXIgc3RyYXRfdG90YWwgPSBJ bnZhbGlkU3RyYXRlZ3k7CiAJQmxvY2tOdW1iZXIgYmxrbm8gPSBJbnZhbGlkQmxvY2tOdW1iZXIs CiAJCQkJbGFzdGN1cnJibGtubzsKKwlCYXRjaEluZGV4U2NhbiBmaXJzdGJhdGNoOwogCi0JQXNz ZXJ0KCFCVFNjYW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7CisJLyogQWxsb2NhdGUgc3BhY2Ug Zm9yIGZpcnN0IGJhdGNoICovCisJZmlyc3RiYXRjaCA9IGluZGV4YW1fdXRpbF9iYXRjaF9hbGxv YyhzY2FuKTsKIAogCS8qCiAJICogRXhhbWluZSB0aGUgc2NhbiBrZXlzIGFuZCBlbGltaW5hdGUg YW55IHJlZHVuZGFudCBrZXlzOyBhbHNvIG1hcmsgdGhlCkBAIC05MDQsNiArODcyLDcgQEAgX2J0 X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJewogCQlBc3Nl cnQoIXNvLT5uZWVkUHJpbVNjYW4pOwogCQlfYnRfcGFyYWxsZWxfZG9uZShzY2FuKTsKKwkJaW5k ZXhhbV91dGlsX2JhdGNoX3JlbGVhc2Uoc2NhbiwgZmlyc3RiYXRjaCk7CiAJCXJldHVybiBmYWxz ZTsKIAl9CiAKQEAgLTkxMyw3ICs4ODIsMTAgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2Nh biwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJICovCiAJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0g TlVMTCAmJgogCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxr bm8sIHRydWUpKQotCQlyZXR1cm4gZmFsc2U7CisJeworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJcmV0dXJuIGZhbHNlOwkJCS8qIGRlZmluaXRlbHkg ZG9uZSAoc28tPm5lZWRQcmltU2NhbiBpcyB1bnNldCkgKi8KKwl9CiAKIAkvKgogCSAqIEluaXRp YWxpemUgdGhlIHNjYW4ncyBhcnJheXMgKGlmIGFueSkgZm9yIHRoZSBjdXJyZW50IHNjYW4gZGly ZWN0aW9uCkBAIC05MzAsMTQgKzkwMiwxMCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKIAkJICogX2J0X3JlYWRuZXh0cGFnZSByZWxlYXNlcyB0aGUg c2NhbiBmb3IgdXMgKG5vdCBfYnRfcmVhZGZpcnN0cGFnZSkuCiAJCSAqLwogCQlBc3NlcnQoc2Nh bi0+cGFyYWxsZWxfc2NhbiAhPSBOVUxMKTsKLQkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsK LQkJQXNzZXJ0KGJsa25vICE9IFBfTk9ORSk7CiAKLQkJaWYgKCFfYnRfcmVhZG5leHRwYWdlKHNj YW4sIGJsa25vLCBsYXN0Y3VycmJsa25vLCBkaXIsIHRydWUpKQotCQkJcmV0dXJuIGZhbHNlOwor CQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAotCQlfYnRf cmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JCXJldHVybiB0cnVlOworCQlyZXR1cm4gX2J0X3JlYWRu ZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywgZGlyLCB0cnVlKTsKIAl9CiAKIAkv KgpAQCAtMTIzNyw3ICsxMjA1LDcgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAJICogTm90ZTogY2FsbHMgX2J0X3JlYWRmaXJzdHBhZ2UgZm9yIHVz LCB3aGljaCByZWxlYXNlcyB0aGUgcGFyYWxsZWwgc2Nhbi4KIAkgKi8KIAlpZiAoa2V5c3ogPT0g MCkKLQkJcmV0dXJuIF9idF9lbmRwb2ludChzY2FuLCBkaXIpOworCQlyZXR1cm4gX2J0X2VuZHBv aW50KHNjYW4sIGRpciwgZmlyc3RiYXRjaCk7CiAKIAkvKgogCSAqIFdlIHdhbnQgdG8gc3RhcnQg dGhlIHNjYW4gc29tZXdoZXJlIHdpdGhpbiB0aGUgaW5kZXguICBTZXQgdXAgYW4KQEAgLTE1MDUs MTIgKzE0NzMsMTIgQEAgX2J0X2ZpcnN0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlv biBkaXIpCiAJICogcG9zaXRpb24gb3Vyc2VsdmVzIG9uIHRoZSB0YXJnZXQgbGVhZiBwYWdlLgog CSAqLwogCUFzc2VydChTY2FuRGlyZWN0aW9uSXNCYWNrd2FyZChkaXIpID09IGluc2tleS5iYWNr d2FyZCk7Ci0Jc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJnNvLT5jdXJy UG9zLmJ1ZiwgQlRfUkVBRCk7CisJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tl eSwgJmZpcnN0YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAKIAkvKiBkb24ndCBuZWVkIHRvIGtlZXAg dGhlIHN0YWNrIGFyb3VuZC4uLiAqLwogCV9idF9mcmVlc3RhY2soc3RhY2spOwogCi0JaWYgKCFC dWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYgKHVubGlrZWx5KCFCdWZmZXJJc1Zh bGlkKGZpcnN0YmF0Y2gtPmJ1ZikpKQogCXsKIAkJQXNzZXJ0KCFzby0+bmVlZFByaW1TY2FuKTsK IApAQCAtMTUyNiwyMyArMTQ5NCwyNCBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVzYyBzY2FuLCBT Y2FuRGlyZWN0aW9uIGRpcikKIAkJaWYgKElzb2xhdGlvbklzU2VyaWFsaXphYmxlKCkpCiAJCXsK IAkJCVByZWRpY2F0ZUxvY2tSZWxhdGlvbihyZWwsIHNjYW4tPnhzX3NuYXBzaG90KTsKLQkJCXN0 YWNrID0gX2J0X3NlYXJjaChyZWwsIE5VTEwsICZpbnNrZXksICZzby0+Y3VyclBvcy5idWYsIEJU X1JFQUQpOworCQkJc3RhY2sgPSBfYnRfc2VhcmNoKHJlbCwgTlVMTCwgJmluc2tleSwgJmZpcnN0 YmF0Y2gtPmJ1ZiwgQlRfUkVBRCk7CiAJCQlfYnRfZnJlZXN0YWNrKHN0YWNrKTsKIAkJfQogCi0J CWlmICghQnVmZmVySXNWYWxpZChzby0+Y3VyclBvcy5idWYpKQorCQlpZiAoIUJ1ZmZlcklzVmFs aWQoZmlyc3RiYXRjaC0+YnVmKSkKIAkJewogCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJ CQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKIAkJCXJldHVy biBmYWxzZTsKIAkJfQogCX0KIAogCS8qIHBvc2l0aW9uIHRvIHRoZSBwcmVjaXNlIGl0ZW0gb24g dGhlIHBhZ2UgKi8KLQlvZmZudW0gPSBfYnRfYmluc3JjaChyZWwsICZpbnNrZXksIHNvLT5jdXJy UG9zLmJ1Zik7CisJb2ZmbnVtID0gX2J0X2JpbnNyY2gocmVsLCAmaW5za2V5LCBmaXJzdGJhdGNo LT5idWYpOwogCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZyb20gdGhlIGZpcnN0IHBhZ2Ugb2Yg dGhlIHNjYW4gKHVzdWFsbHkgdGhlIHBhZ2UKLQkgKiBjdXJyZW50bHkgaW4gc28tPmN1cnJQb3Mu YnVmKS4KKwkgKiBjdXJyZW50bHkgaW4gZmlyc3RiYXRjaC5idWYpLgogCSAqCiAJICogSWYgaW5z a2V5Lm5leHRrZXkgPSBmYWxzZSBhbmQgaW5za2V5LmJhY2t3YXJkID0gZmFsc2UsIG9mZm51bSBp cwogCSAqIHBvc2l0aW9uZWQgYXQgdGhlIGZpcnN0IG5vbi1waXZvdCB0dXBsZSA+PSBpbnNrZXku c2NhbmtleXMuCkBAIC0xNTYwLDE2OCArMTUyOSw2OSBAQCBfYnRfZmlyc3QoSW5kZXhTY2FuRGVz YyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKIAkgKiBmb3IgdGhlIHBhZ2UuICBGb3IgZXhhbXBs ZSwgd2hlbiBpbnNrZXkgaXMgYm90aCA8IHRoZSBsZWFmIHBhZ2UncyBoaWdoCiAJICoga2V5IGFu ZCA+IGFsbCBvZiBpdHMgbm9uLXBpdm90IHR1cGxlcywgb2ZmbnVtIHdpbGwgYmUgIm1heG9mZiAr IDEiLgogCSAqLwotCWlmICghX2J0X3JlYWRmaXJzdHBhZ2Uoc2Nhbiwgb2ZmbnVtLCBkaXIpKQot CQlyZXR1cm4gZmFsc2U7Ci0KLQlfYnRfcmV0dXJuaXRlbShzY2FuLCBzbyk7Ci0JcmV0dXJuIHRy dWU7CisJcmV0dXJuIF9idF9yZWFkZmlyc3RwYWdlKHNjYW4sIGZpcnN0YmF0Y2gsIG9mZm51bSwg ZGlyKTsKIH0KIAogLyoKICAqCV9idF9uZXh0KCkgLS0gR2V0IHRoZSBuZXh0IGl0ZW0gaW4gYSBz Y2FuLgogICoKLSAqCQlPbiBlbnRyeSwgc28tPmN1cnJQb3MgZGVzY3JpYmVzIHRoZSBjdXJyZW50 IHBhZ2UsIHdoaWNoIG1heSBiZSBwaW5uZWQKLSAqCQlidXQgaXMgbm90IGxvY2tlZCwgYW5kIHNv LT5jdXJyUG9zLml0ZW1JbmRleCBpZGVudGlmaWVzIHdoaWNoIGl0ZW0gd2FzCi0gKgkJcHJldmlv dXNseSByZXR1cm5lZC4KKyAqCQlPbiBlbnRyeSwgcHJpb3JiYXRjaCBkZXNjcmliZXMgdGhlIGJh dGNoIHRoYXQgd2FzIGxhc3QgcmV0dXJuZWQgYnkKKyAqCQlidGdldGJhdGNoLiAgV2UnbGwgdXNl IHRoZSBwcmlvciBiYXRjaCdzIHBvc2l0aW9uaW5nIGluZm9ybWF0aW9uIHRvCisgKgkJZGVjaWRl IHdoaWNoIHBhZ2UgdG8gcmVhZCBuZXh0LgogICoKLSAqCQlPbiBzdWNjZXNzIGV4aXQsIHNvLT5j dXJyUG9zIGlzIHVwZGF0ZWQgYXMgbmVlZGVkLCBhbmQgX2J0X3JldHVybml0ZW0KLSAqCQlzZXRz IHRoZSBuZXh0IGl0ZW0gdG8gcmV0dXJuIHRvIHRoZSBzY2FuLiAgc28tPmN1cnJQb3MgcmVtYWlu cyB2YWxpZC4KKyAqCQlPbiBzdWNjZXNzIGV4aXQsIHJldHVybnMgdGhlIG5leHQgYmF0Y2guICBU aGVyZSBtdXN0IGJlIGF0IGxlYXN0IG9uZQorICoJCW1hdGNoaW5nIHR1cGxlIG9uIGFueSByZXR1 cm5lZCBiYXRjaCAoZWxzZSB3ZSdkIGp1c3QgcmV0dXJuIE5VTEwpLgogICoKLSAqCQlPbiBmYWls dXJlIGV4aXQgKG5vIG1vcmUgdHVwbGVzKSwgd2UgaW52YWxpZGF0ZSBzby0+Y3VyclBvcy4gIEl0 J2xsCi0gKgkJc3RpbGwgYmUgcG9zc2libGUgZm9yIHRoZSBzY2FuIHRvIHJldHVybiB0dXBsZXMg YnkgY2hhbmdpbmcgZGlyZWN0aW9uLAotICoJCXRob3VnaCB3ZSdsbCBuZWVkIHRvIGNhbGwgX2J0 X2ZpcnN0IGFuZXcgaW4gdGhhdCBvdGhlciBkaXJlY3Rpb24uCisgKgkJT24gZmFpbHVyZSBleGl0 IChubyBtb3JlIHR1cGxlcyksIHdlIHJldHVybiBOVUxMLiAgSXQnbGwgc3RpbGwgYmUKKyAqCQlw b3NzaWJsZSBmb3IgdGhlIHNjYW4gdG8gcmV0dXJuIHR1cGxlcyBieSBjaGFuZ2luZyBkaXJlY3Rp b24sIHRob3VnaAorICoJCXdlJ2xsIG5lZWQgdG8gY2FsbCBfYnRfZmlyc3QgYW5ldyBpbiB0aGF0 IG90aGVyIGRpcmVjdGlvbi4KICAqLwotYm9vbAotX2J0X25leHQoSW5kZXhTY2FuRGVzYyBzY2Fu LCBTY2FuRGlyZWN0aW9uIGRpcikKLXsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVl KSBzY2FuLT5vcGFxdWU7Ci0KLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCi0JLyoKLQkgKiBBZHZhbmNlIHRvIG5leHQgdHVwbGUgb24gY3VycmVudCBwYWdlOyBvciBp ZiB0aGVyZSdzIG5vIG1vcmUsIHRyeSB0bwotCSAqIHN0ZXAgdG8gdGhlIG5leHQgcGFnZSB3aXRo IGRhdGEuCi0JICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKLQl7Ci0JCWlm ICgrK3NvLT5jdXJyUG9zLml0ZW1JbmRleCA+IHNvLT5jdXJyUG9zLmxhc3RJdGVtKQotCQl7Ci0J CQlpZiAoIV9idF9zdGVwcGFnZShzY2FuLCBkaXIpKQotCQkJCXJldHVybiBmYWxzZTsKLQkJfQot CX0KLQllbHNlCi0JewotCQlpZiAoLS1zby0+Y3VyclBvcy5pdGVtSW5kZXggPCBzby0+Y3VyclBv cy5maXJzdEl0ZW0pCi0JCXsKLQkJCWlmICghX2J0X3N0ZXBwYWdlKHNjYW4sIGRpcikpCi0JCQkJ cmV0dXJuIGZhbHNlOwotCQl9Ci0JfQotCi0JX2J0X3JldHVybml0ZW0oc2Nhbiwgc28pOwotCXJl dHVybiB0cnVlOwotfQotCi0vKgotICogUmV0dXJuIHRoZSBpbmRleCBpdGVtIGZyb20gc28tPmN1 cnJQb3MuaXRlbXNbc28tPmN1cnJQb3MuaXRlbUluZGV4XSB0byB0aGUKLSAqIGluZGV4IHNjYW4g Ynkgc2V0dGluZyB0aGUgcmVsZXZhbnQgZmllbGRzIGluIGNhbGxlcidzIGluZGV4IHNjYW4gZGVz Y3JpcHRvcgotICovCi1zdGF0aWMgaW5saW5lIHZvaWQKLV9idF9yZXR1cm5pdGVtKEluZGV4U2Nh bkRlc2Mgc2NhbiwgQlRTY2FuT3BhcXVlIHNvKQotewotCUJUU2NhblBvc0l0ZW0gKmN1cnJJdGVt ID0gJnNvLT5jdXJyUG9zLml0ZW1zW3NvLT5jdXJyUG9zLml0ZW1JbmRleF07Ci0KLQkvKiBNb3N0 IHJlY2VudCBfYnRfcmVhZHBhZ2UgbXVzdCBoYXZlIHN1Y2NlZWRlZCAqLwotCUFzc2VydChCVFNj YW5Qb3NJc1ZhbGlkKHNvLT5jdXJyUG9zKSk7Ci0JQXNzZXJ0KHNvLT5jdXJyUG9zLml0ZW1JbmRl eCA+PSBzby0+Y3VyclBvcy5maXJzdEl0ZW0pOwotCUFzc2VydChzby0+Y3VyclBvcy5pdGVtSW5k ZXggPD0gc28tPmN1cnJQb3MubGFzdEl0ZW0pOwotCi0JLyogUmV0dXJuIG5leHQgaXRlbSwgcGVy IGFtZ2V0dHVwbGUgY29udHJhY3QgKi8KLQlzY2FuLT54c19oZWFwdGlkID0gY3Vyckl0ZW0tPmhl YXBUaWQ7Ci0JaWYgKHNvLT5jdXJyVHVwbGVzKQotCQlzY2FuLT54c19pdHVwID0gKEluZGV4VHVw bGUpIChzby0+Y3VyclR1cGxlcyArIGN1cnJJdGVtLT50dXBsZU9mZnNldCk7Ci19Ci0KLS8qCi0g KglfYnRfc3RlcHBhZ2UoKSAtLSBTdGVwIHRvIG5leHQgcGFnZSBjb250YWluaW5nIHZhbGlkIGRh dGEgZm9yIHNjYW4KLSAqCi0gKiBXcmFwcGVyIG9uIF9idF9yZWFkbmV4dHBhZ2UgdGhhdCBwZXJm b3JtcyBmaW5hbCBzdGVwcyBmb3IgdGhlIGN1cnJlbnQgcGFnZS4KLSAqCi0gKiBPbiBlbnRyeSwg c28tPmN1cnJQb3MgbXVzdCBiZSB2YWxpZC4gIEl0cyBidWZmZXIgd2lsbCBiZSBwaW5uZWQsIHRo b3VnaAotICogbmV2ZXIgbG9ja2VkLiAoQWN0dWFsbHksIHdoZW4gc28tPmRyb3BQaW4gdGhlcmUg d29uJ3QgZXZlbiBiZSBhIHBpbiBoZWxkLAotICogdGhvdWdoIHNvLT5jdXJyUG9zLmN1cnJQYWdl IG11c3Qgc3RpbGwgYmUgc2V0IHRvIGEgdmFsaWQgYmxvY2sgbnVtYmVyLikKLSAqLwotc3RhdGlj IGJvb2wKLV9idF9zdGVwcGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIFNjYW5EaXJlY3Rpb24gZGly KQorQmF0Y2hJbmRleFNjYW4KK19idF9uZXh0KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVj dGlvbiBkaXIsIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gpCiB7CiAJQlRTY2FuT3BhcXVlIHNv ID0gKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+b3BhcXVlOwogCUJsb2NrTnVtYmVyIGJsa25vLAogCQkJ CWxhc3RjdXJyYmxrbm87CiAKLQlBc3NlcnQoQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykp OwotCi0JLyogQmVmb3JlIGxlYXZpbmcgY3VycmVudCBwYWdlLCBkZWFsIHdpdGggYW55IGtpbGxl ZCBpdGVtcyAqLwotCWlmIChzby0+bnVtS2lsbGVkID4gMCkKLQkJX2J0X2tpbGxpdGVtcyhzY2Fu KTsKLQotCS8qCi0JICogQmVmb3JlIHdlIG1vZGlmeSBjdXJyUG9zLCBtYWtlIGEgY29weSBvZiB0 aGUgcGFnZSBkYXRhIGlmIHRoZXJlIHdhcyBhCi0JICogbWFyayBwb3NpdGlvbiB0aGF0IG5lZWRz IGl0LgotCSAqLwotCWlmIChzby0+bWFya0l0ZW1JbmRleCA+PSAwKQotCXsKLQkJLyogYnVtcCBw aW4gb24gY3VycmVudCBidWZmZXIgZm9yIGFzc2lnbm1lbnQgdG8gbWFyayBidWZmZXIgKi8KLQkJ aWYgKEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSkKLQkJCUluY3JCdWZmZXJSZWZDb3Vu dChzby0+Y3VyclBvcy5idWYpOwotCQltZW1jcHkoJnNvLT5tYXJrUG9zLCAmc28tPmN1cnJQb3Ms Ci0JCQkgICBvZmZzZXRvZihCVFNjYW5Qb3NEYXRhLCBpdGVtc1sxXSkgKwotCQkJICAgc28tPmN1 cnJQb3MubGFzdEl0ZW0gKiBzaXplb2YoQlRTY2FuUG9zSXRlbSkpOwotCQlpZiAoc28tPm1hcmtU dXBsZXMpCi0JCQltZW1jcHkoc28tPm1hcmtUdXBsZXMsIHNvLT5jdXJyVHVwbGVzLAotCQkJCSAg IHNvLT5jdXJyUG9zLm5leHRUdXBsZU9mZnNldCk7Ci0JCXNvLT5tYXJrUG9zLml0ZW1JbmRleCA9 IHNvLT5tYXJrSXRlbUluZGV4OwotCQlzby0+bWFya0l0ZW1JbmRleCA9IC0xOwotCi0JCS8qCi0J CSAqIElmIHdlJ3JlIGp1c3QgYWJvdXQgdG8gc3RhcnQgdGhlIG5leHQgcHJpbWl0aXZlIGluZGV4 IHNjYW4KLQkJICogKHBvc3NpYmxlIHdpdGggYSBzY2FuIHRoYXQgaGFzIGFycmF5cyBrZXlzLCBh bmQgbmVlZHMgdG8gc2tpcCB0bwotCQkgKiBjb250aW51ZSBpbiB0aGUgY3VycmVudCBzY2FuIGRp cmVjdGlvbiksIG1vcmVMZWZ0L21vcmVSaWdodCBvbmx5Ci0JCSAqIGluZGljYXRlIHRoZSBlbmQg b2YgdGhlIGN1cnJlbnQgcHJpbWl0aXZlIGluZGV4IHNjYW4uICBUaGV5IG11c3QKLQkJICogbmV2 ZXIgYmUgdGFrZW4gdG8gaW5kaWNhdGUgdGhhdCB0aGUgdG9wLWxldmVsIGluZGV4IHNjYW4gaGFz IGVuZGVkCi0JCSAqICh0aGF0IHdvdWxkIGJlIHdyb25nKS4KLQkJICoKLQkJICogV2UgY291bGQg aGFuZGxlIHRoaXMgY2FzZSBieSB0cmVhdGluZyB0aGUgY3VycmVudCBhcnJheSBrZXlzIGFzCi0J CSAqIG1hcmtQb3Mgc3RhdGUuICBCdXQgZGVwZW5kaW5nIG9uIHRoZSBjdXJyZW50IGFycmF5IHN0 YXRlIGxpa2UgdGhpcwotCQkgKiB3b3VsZCBhZGQgY29tcGxleGl0eS4gIEluc3RlYWQsIHdlIGp1 c3QgdW5zZXQgbWFya1BvcydzIGNvcHkgb2YKLQkJICogbW9yZVJpZ2h0IG9yIG1vcmVMZWZ0ICh3 aGljaGV2ZXIgbWlnaHQgYmUgYWZmZWN0ZWQpLCB3aGlsZSBtYWtpbmcKLQkJICogYnRyZXN0cnBv cyByZXNldCB0aGUgc2NhbidzIGFycmF5cyB0byB0aGVpciBpbml0aWFsIHNjYW4gcG9zaXRpb25z LgotCQkgKiBJbiBlZmZlY3QsIGJ0cmVzdHJwb3MgbGVhdmVzIGFkdmFuY2luZyB0aGUgYXJyYXlz IHVwIHRvIHRoZSBmaXJzdAotCQkgKiBfYnRfcmVhZHBhZ2UgY2FsbCAodGhhdCB0YWtlcyBwbGFj ZSBhZnRlciBpdCBoYXMgcmVzdG9yZWQgbWFya1BvcykuCi0JCSAqLwotCQlpZiAoc28tPm5lZWRQ cmltU2NhbikKLQkJewotCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoc28tPmN1cnJQb3Mu ZGlyKSkKLQkJCQlzby0+bWFya1Bvcy5tb3JlUmlnaHQgPSB0cnVlOwotCQkJZWxzZQotCQkJCXNv LT5tYXJrUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJfQotCi0JCS8qIG1hcmsvcmVzdG9yZSBub3Qg c3VwcG9ydGVkIGJ5IHBhcmFsbGVsIHNjYW5zICovCi0JCUFzc2VydCghc2Nhbi0+cGFyYWxsZWxf c2Nhbik7Ci0JfQotCi0JQlRTY2FuUG9zVW5waW5JZlBpbm5lZChzby0+Y3VyclBvcyk7CisJQXNz ZXJ0KEJsb2NrTnVtYmVySXNWYWxpZChwcmlvcmJhdGNoLT5jdXJyUGFnZSkpOwogCiAJLyogV2Fs ayB0byB0aGUgbmV4dCBwYWdlIHdpdGggZGF0YSAqLwogCWlmIChTY2FuRGlyZWN0aW9uSXNGb3J3 YXJkKGRpcikpCi0JCWJsa25vID0gc28tPmN1cnJQb3MubmV4dFBhZ2U7CisJCWJsa25vID0gcHJp b3JiYXRjaC0+bmV4dFBhZ2U7CiAJZWxzZQotCQlibGtubyA9IHNvLT5jdXJyUG9zLnByZXZQYWdl OwotCWxhc3RjdXJyYmxrbm8gPSBzby0+Y3VyclBvcy5jdXJyUGFnZTsKKwkJYmxrbm8gPSBwcmlv cmJhdGNoLT5wcmV2UGFnZTsKKwlsYXN0Y3VycmJsa25vID0gcHJpb3JiYXRjaC0+Y3VyclBhZ2U7 CiAKIAkvKgotCSAqIENhbmNlbCBwcmltaXRpdmUgaW5kZXggc2NhbnMgdGhhdCB3ZXJlIHNjaGVk dWxlZCB3aGVuIHRoZSBjYWxsIHRvCi0JICogX2J0X3JlYWRwYWdlIGZvciBjdXJyUG9zIGhhcHBl bmVkIHRvIHVzZSB0aGUgb3Bwb3NpdGUgZGlyZWN0aW9uIHRvIHRoZQotCSAqIG9uZSB0aGF0IHdl J3JlIHN0ZXBwaW5nIGluIG5vdy4gIChJdCdzIG9rYXkgdG8gbGVhdmUgdGhlIHNjYW4ncyBhcnJh eQotCSAqIGtleXMgYXMtaXMsIHNpbmNlIHRoZSBuZXh0IF9idF9yZWFkcGFnZSB3aWxsIGFkdmFu Y2UgdGhlbS4pCisJICogQ2FuY2VsIHByaW1pdGl2ZSBpbmRleCBzY2FucyB0aGF0IHdlcmUgc2No ZWR1bGVkIHdoZW4gcHJpb3JiYXRjaCdzIGNhbGwKKwkgKiB0byBfYnRfcmVhZHBhZ2UgaGFwcGVu ZWQgdG8gdXNlIHRoZSBvcHBvc2l0ZSBkaXJlY3Rpb24gdG8gdGhlIG9uZSB0aGF0CisJICogd2Un cmUgc3RlcHBpbmcgaW4gbm93LiAgKEl0J3Mgb2theSB0byBsZWF2ZSB0aGUgc2NhbidzIGFycmF5 IGtleXMKKwkgKiBhcy1pcywgc2luY2UgdGhlIG5leHQgX2J0X3JlYWRwYWdlIHdpbGwgYWR2YW5j ZSB0aGVtLikKIAkgKi8KLQlpZiAoc28tPmN1cnJQb3MuZGlyICE9IGRpcikKKwlpZiAocHJpb3Ji YXRjaC0+ZGlyICE9IGRpcikKIAkJc28tPm5lZWRQcmltU2NhbiA9IGZhbHNlOwogCisJaWYgKGJs a25vID09IFBfTk9ORSB8fAorCQkoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpID8KKwkJICFw cmlvcmJhdGNoLT5tb3JlUmlnaHQgOiAhcHJpb3JiYXRjaC0+bW9yZUxlZnQpKQorCXsKKwkJLyoK KwkJICogcHJpb3JiYXRjaCBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGluIHRoaXMgZGly ZWN0aW9uICh0aG91Z2gKKwkJICogaWYgc28tPm5lZWRQcmltU2NhbiB3YXMgc2V0IHRoZSBzY2Fu IHdpbGwgY29udGludWUgaW4gX2J0X2ZpcnN0KQorCQkgKi8KKwkJX2J0X3BhcmFsbGVsX2RvbmUo c2Nhbik7CisJCXJldHVybiBOVUxMOworCX0KKworCS8qIHBhcmFsbGVsIHNjYW4gbXVzdCBzZWl6 ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCWlmIChzY2FuLT5wYXJhbGxlbF9zY2Fu ICE9IE5VTEwgJiYKKwkJIV9idF9wYXJhbGxlbF9zZWl6ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3Vy cmJsa25vLCBmYWxzZSkpCisJCXJldHVybiBOVUxMOwkJCS8qIGRvbmUgaWZmIHNvLT5uZWVkUHJp bVNjYW4gd2Fzbid0IHNldCAqLworCiAJcmV0dXJuIF9idF9yZWFkbmV4dHBhZ2Uoc2NhbiwgYmxr bm8sIGxhc3RjdXJyYmxrbm8sIGRpciwgZmFsc2UpOwogfQogCisKIC8qCiAgKglfYnRfcmVhZGZp cnN0cGFnZSgpIC0tIFJlYWQgZmlyc3QgcGFnZSBjb250YWluaW5nIHZhbGlkIGRhdGEgZm9yIF9i dF9maXJzdAogICoKQEAgLTE3MzEsNzMgKzE2MDEsOTAgQEAgX2J0X3N0ZXBwYWdlKEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAgKiB0byBzdG9wIHRoZSBzY2FuIG9uIHRo aXMgcGFnZSBieSBjYWxsaW5nIF9idF9jaGVja2tleXMgYWdhaW5zdCB0aGUgaGlnaAogICoga2V5 LiAgU2VlIF9idF9yZWFkcGFnZSBmb3IgZnVsbCBkZXRhaWxzLgogICoKLSAqIE9uIGVudHJ5LCBz by0+Y3VyclBvcyBtdXN0IGJlIHBpbm5lZCBhbmQgbG9ja2VkIChzbyBvZmZudW0gc3RheXMgdmFs aWQpLgorICogT24gZW50cnksIGZpcnN0YmF0Y2ggbXVzdCBiZSBwaW5uZWQgYW5kIGxvY2tlZCAo c28gb2ZmbnVtIHN0YXlzIHZhbGlkKS4KICAqIFBhcmFsbGVsIHNjYW4gY2FsbGVycyBtdXN0IGhh dmUgc2VpemVkIHRoZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUuCiAgKgotICogT24gZXhpdCwg d2UnbGwgaGF2ZSB1cGRhdGVkIHNvLT5jdXJyUG9zIGFuZCByZXRhaW5lZCBsb2NrcyBhbmQgcGlu cworICogT24gZXhpdCwgd2UnbGwgaGF2ZSB1cGRhdGVkIGZpcnN0YmF0Y2ggYW5kIHJldGFpbmVk IGxvY2tzIGFuZCBwaW5zCiAgKiBhY2NvcmRpbmcgdG8gdGhlIHNhbWUgcnVsZXMgYXMgdGhvc2Ug bGFpZCBvdXQgZm9yIF9idF9yZWFkbmV4dHBhZ2UgZXhpdC4KLSAqIExpa2UgX2J0X3JlYWRuZXh0 cGFnZSwgb3VyIHJldHVybiB2YWx1ZSBpbmRpY2F0ZXMgaWYgdGhlcmUgYXJlIGFueSBtYXRjaGlu ZwotICogcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLgogICoKICAqIFdlIGFsd2F5cyBy ZWxlYXNlIHRoZSBzY2FuIGZvciBhIHBhcmFsbGVsIHNjYW4gY2FsbGVyLCByZWdhcmRsZXNzIG9m CiAgKiBzdWNjZXNzIG9yIGZhaWx1cmU7IHdlJ2xsIGNhbGwgX2J0X3BhcmFsbGVsX3JlbGVhc2Ug YXMgc29vbiBhcyBwb3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKLV9idF9yZWFkZmlyc3RwYWdl KEluZGV4U2NhbkRlc2Mgc2NhbiwgT2Zmc2V0TnVtYmVyIG9mZm51bSwgU2NhbkRpcmVjdGlvbiBk aXIpCitzdGF0aWMgQmF0Y2hJbmRleFNjYW4KK19idF9yZWFkZmlyc3RwYWdlKEluZGV4U2NhbkRl c2Mgc2NhbiwgQmF0Y2hJbmRleFNjYW4gZmlyc3RiYXRjaCwKKwkJCQkgIE9mZnNldE51bWJlciBv ZmZudW0sIFNjYW5EaXJlY3Rpb24gZGlyKQogewogCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5P cGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCbG9ja051bWJlciBibGtubywKKwkJCQlsYXN0Y3VycmJs a25vOwogCi0Jc28tPm51bUtpbGxlZCA9IDA7CQkJLyoganVzdCBwYXJhbm9pYSAqLwotCXNvLT5t YXJrSXRlbUluZGV4ID0gLTE7CQkvKiBkaXR0byAqLwotCi0JLyogSW5pdGlhbGl6ZSBzby0+Y3Vy clBvcyBmb3IgdGhlIGZpcnN0IHBhZ2UgKHBhZ2UgaW4gc28tPmN1cnJQb3MuYnVmKSAqLworCS8q IEluaXRpYWxpemUgZmlyc3RiYXRjaCdzIHBvc2l0aW9uIGZvciB0aGUgZmlyc3QgcGFnZSAqLwog CWlmIChzby0+bmVlZFByaW1TY2FuKQogCXsKIAkJQXNzZXJ0KHNvLT5udW1BcnJheUtleXMpOwog Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQb3MubW9yZVJpZ2h0 ID0gdHJ1ZTsKKwkJZmlyc3RiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCQlmaXJzdGJhdGNoLT5t b3JlUmlnaHQgPSB0cnVlOwogCQlzby0+bmVlZFByaW1TY2FuID0gZmFsc2U7CiAJfQogCWVsc2Ug aWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSkKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVM ZWZ0ID0gZmFsc2U7Ci0JCXNvLT5jdXJyUG9zLm1vcmVSaWdodCA9IHRydWU7CisJCWZpcnN0YmF0 Y2gtPm1vcmVMZWZ0ID0gZmFsc2U7CisJCWZpcnN0YmF0Y2gtPm1vcmVSaWdodCA9IHRydWU7CiAJ fQogCWVsc2UKIAl7Ci0JCXNvLT5jdXJyUG9zLm1vcmVMZWZ0ID0gdHJ1ZTsKLQkJc28tPmN1cnJQ b3MubW9yZVJpZ2h0ID0gZmFsc2U7CisJCWZpcnN0YmF0Y2gtPm1vcmVMZWZ0ID0gdHJ1ZTsKKwkJ Zmlyc3RiYXRjaC0+bW9yZVJpZ2h0ID0gZmFsc2U7CiAJfQogCiAJLyoKIAkgKiBBdHRlbXB0IHRv IGxvYWQgbWF0Y2hpbmcgdHVwbGVzIGZyb20gdGhlIGZpcnN0IHBhZ2UuCiAJICoKLQkgKiBOb3Rl IHRoYXQgX2J0X3JlYWRwYWdlIHdpbGwgZmluaXNoIGluaXRpYWxpemluZyB0aGUgc28tPmN1cnJQ b3MgZmllbGRzLgorCSAqIE5vdGUgdGhhdCBfYnRfcmVhZHBhZ2Ugd2lsbCBmaW5pc2ggaW5pdGlh bGl6aW5nIHRoZSBmaXJzdGJhdGNoIGZpZWxkcy4KIAkgKiBfYnRfcmVhZHBhZ2UgYWxzbyByZWxl YXNlcyBwYXJhbGxlbCBzY2FuIChldmVuIHdoZW4gaXQgcmV0dXJucyBmYWxzZSkuCiAJICovCi0J aWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCisJaWYgKF9idF9yZWFk cGFnZShzY2FuLCBmaXJzdGJhdGNoLCBkaXIsIG9mZm51bSwgdHJ1ZSkpCiAJewotCQlSZWxhdGlv bglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCi0JCS8qCi0JCSAqIF9idF9yZWFkcGFnZSBz dWNjZWVkZWQuICBEcm9wIHRoZSBsb2NrIChhbmQgbWF5YmUgdGhlIHBpbikgb24KLQkJICogc28t PmN1cnJQb3MuYnVmIGluIHByZXBhcmF0aW9uIGZvciBidGdldHR1cGxlIHJldHVybmluZyB0dXBs ZXMuCi0JCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKLQkJ X2J0X2Ryb3BfbG9ja19hbmRfbWF5YmVfcGluKHJlbCwgc28pOwotCQlyZXR1cm4gdHJ1ZTsKKwkJ LyogX2J0X3JlYWRwYWdlIHNhdmVkIG9uZSBvciBtb3JlIG1hdGNoZXMgaW4gZmlyc3RiYXRjaC5p dGVtc1tdICovCisJCWluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2soc2NhbiwgZmlyc3RiYXRjaCk7 CisJCXJldHVybiBmaXJzdGJhdGNoOwogCX0KIAotCS8qIFRoZXJlJ3Mgbm8gYWN0dWFsbHktbWF0 Y2hpbmcgZGF0YSBvbiB0aGUgcGFnZSBpbiBzby0+Y3VyclBvcy5idWYgKi8KLQlfYnRfdW5sb2Nr YnVmKHNjYW4tPmluZGV4UmVsYXRpb24sIHNvLT5jdXJyUG9zLmJ1Zik7CisJLyogVGhlcmUncyBu byBhY3R1YWxseS1tYXRjaGluZyBkYXRhIG9uIHRoZSBwYWdlICovCisJX2J0X3JlbGJ1ZihzY2Fu LT5pbmRleFJlbGF0aW9uLCBmaXJzdGJhdGNoLT5idWYpOworCWZpcnN0YmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CiAKLQkvKiBDYWxsIF9idF9yZWFkbmV4dHBhZ2UgdXNpbmcgaXRzIF9idF9z dGVwcGFnZSB3cmFwcGVyIGZ1bmN0aW9uICovCi0JaWYgKCFfYnRfc3RlcHBhZ2Uoc2NhbiwgZGly KSkKLQkJcmV0dXJuIGZhbHNlOworCS8qIFdhbGsgdG8gdGhlIG5leHQgcGFnZSB3aXRoIGRhdGEg Ki8KKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQorCQlibGtubyA9IGZpcnN0YmF0 Y2gtPm5leHRQYWdlOworCWVsc2UKKwkJYmxrbm8gPSBmaXJzdGJhdGNoLT5wcmV2UGFnZTsKKwls YXN0Y3VycmJsa25vID0gZmlyc3RiYXRjaC0+Y3VyclBhZ2U7CiAKLQkvKiBfYnRfcmVhZHBhZ2Ug Zm9yIGEgbGF0ZXIgcGFnZSAobm93IGluIHNvLT5jdXJyUG9zKSBzdWNjZWVkZWQgKi8KLQlyZXR1 cm4gdHJ1ZTsKKwlBc3NlcnQoZmlyc3RiYXRjaC0+ZGlyID09IGRpcik7CisKKwlpZiAoYmxrbm8g PT0gUF9OT05FIHx8CisJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJkKGRpcikgPworCQkgIWZpcnN0 YmF0Y2gtPm1vcmVSaWdodCA6ICFmaXJzdGJhdGNoLT5tb3JlTGVmdCkpCisJeworCQkvKgorCQkg KiBmaXJzdGJhdGNoIF9idF9yZWFkcGFnZSBjYWxsIGVuZGVkIHNjYW4gaW4gdGhpcyBkaXJlY3Rp b24gKHRob3VnaAorCQkgKiBpZiBzby0+bmVlZFByaW1TY2FuIHdhcyBzZXQgdGhlIHNjYW4gd2ls bCBjb250aW51ZSBpbiBfYnRfZmlyc3QpCisJCSAqLworCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVs ZWFzZShzY2FuLCBmaXJzdGJhdGNoKTsKKwkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7CisJCXJl dHVybiBOVUxMOworCX0KKworCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIGZpcnN0 YmF0Y2gpOworCisJLyogcGFyYWxsZWwgc2NhbiBtdXN0IHNlaXplIHRoZSBzY2FuIHRvIGdldCBu ZXh0IGJsa25vICovCisJaWYgKHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgorCQkhX2J0 X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywgJmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJ cmV0dXJuIE5VTEw7CQkJLyogZG9uZSBpZmYgc28tPm5lZWRQcmltU2NhbiB3YXNuJ3Qgc2V0ICov CisKKwlyZXR1cm4gX2J0X3JlYWRuZXh0cGFnZShzY2FuLCBibGtubywgbGFzdGN1cnJibGtubywg ZGlyLCBmYWxzZSk7CiB9CiAKIC8qCkBAIC0xODA3LDEwMiArMTY5NCw2NSBAQCBfYnRfcmVhZGZp cnN0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIE9mZnNldE51bWJlciBvZmZudW0sIFNjYW5EaXJl Y3Rpb24gZGlyKQogICogcHJldmlvdXNseS1zYXZlZCByaWdodCBsaW5rIG9yIGxlZnQgbGluay4g IGxhc3RjdXJyYmxrbm8gaXMgdGhlIHBhZ2UgdGhhdAogICogd2FzIGN1cnJlbnQgYXQgdGhlIHBv aW50IHdoZXJlIHRoZSBibGtubyBsaW5rIHdhcyBzYXZlZCwgd2hpY2ggd2UgdXNlIHRvCiAgKiBy ZWFzb24gYWJvdXQgY29uY3VycmVudCBwYWdlIHNwbGl0cy9wYWdlIGRlbGV0aW9ucyBkdXJpbmcg YmFja3dhcmRzIHNjYW5zLgotICogSW4gdGhlIGNvbW1vbiBjYXNlIHdoZXJlIHNlaXplZD1mYWxz ZSwgYmxrbm8gaXMgZWl0aGVyIHNvLT5jdXJyUG9zLm5leHRQYWdlCi0gKiBvciBzby0+Y3VyclBv cy5wcmV2UGFnZSwgYW5kIGxhc3RjdXJyYmxrbm8gaXMgc28tPmN1cnJQb3MuY3VyclBhZ2UuCisg KiBibGtubyBpcyB0aGUgcHJpb3IgYmF0Y2gncyBuZXh0UGFnZSBvciBwcmV2UGFnZSAoZGVwZW5k aW5nIG9uIHRoZSBjdXJyZW50CisgKiBzY2FuIGRpcmVjdGlvbiksIGFuZCBsYXN0Y3VycmJsa25v IGlzIHRoZSBwcmlvciBiYXRjaCdzIGN1cnJQYWdlLgogICoKLSAqIE9uIGVudHJ5LCBzby0+Y3Vy clBvcyBzaG91bGRuJ3QgYmUgbG9ja2VkIGJ5IGNhbGxlci4gIHNvLT5jdXJyUG9zLmJ1ZiBtdXN0 Ci0gKiBiZSBJbnZhbGlkQnVmZmVyL3VucGlubmVkIGFzIG5lZWRlZCBieSBjYWxsZXIgKG5vdGUg dGhhdCBsYXN0Y3VycmJsa25vCi0gKiB3b24ndCBuZWVkIHRvIGJlIHJlYWQgYWdhaW4gaW4gYWxt b3N0IGFsbCBjYXNlcykuICBQYXJhbGxlbCBzY2FuIGNhbGxlcnMKLSAqIHRoYXQgc2VpemVkIHRo ZSBzY2FuIGJlZm9yZSBjYWxsaW5nIGhlcmUgc2hvdWxkIHBhc3Mgc2VpemVkPXRydWU7IHN1Y2gg YQotICogY2FsbGVyJ3MgYmxrbm8gYW5kIGxhc3RjdXJyYmxrbm8gYXJndW1lbnRzIGNvbWUgZnJv bSB0aGUgc2VpemVkIHNjYW4uCi0gKiBzZWl6ZWQ9ZmFsc2UgY2FsbGVycyBqdXN0IHBhc3MgdXMg dGhlIGJsa25vL2xhc3RjdXJyYmxrbm8gdGFrZW4gZnJvbSB0aGVpcgotICogc28tPmN1cnJQb3Ms IHdoaWNoIChhbG9uZyB3aXRoIHNvLT5jdXJyUG9zIGl0c2VsZikgY2FuIGJlIHVzZWQgdG8gZW5k IHRoZQotICogc2Nhbi4gIEEgc2VpemVkPWZhbHNlIGNhbGxlcidzIGJsa25vIGNhbiBuZXZlciBi ZSBhc3N1bWVkIHRvIGJlIHRoZSBwYWdlCi0gKiB0aGF0IG11c3QgYmUgcmVhZCBuZXh0IGR1cmlu ZyBhIHBhcmFsbGVsIHNjYW4sIHRob3VnaC4gIFdlIG11c3QgZmlndXJlIHRoYXQKLSAqIHBhcnQg b3V0IGZvciBvdXJzZWx2ZXMgYnkgc2VpemluZyB0aGUgc2NhbiAodGhlIGNvcnJlY3QgcGFnZSB0 byByZWFkIG1pZ2h0Ci0gKiBhbHJlYWR5IGJlIGJleW9uZCB0aGUgc2VpemVkPWZhbHNlIGNhbGxl cidzIGJsa25vIGR1cmluZyBhIHBhcmFsbGVsIHNjYW4sCi0gKiB1bmxlc3MgYmxrbm8vc28tPmN1 cnJQb3MubmV4dFBhZ2Uvc28tPmN1cnJQb3MucHJldlBhZ2UgaXMgYWxyZWFkeSBQX05PTkUsCi0g KiBvciB1bmxlc3Mgc28tPmN1cnJQb3MubW9yZVJpZ2h0L3NvLT5jdXJyUG9zLm1vcmVMZWZ0IGlz IGFscmVhZHkgdW5zZXQpLgorICogT24gZW50cnksIG5vIHBhZ2Ugc2hvdWxkIGJlIGxvY2tlZCBi eSBjYWxsZXIuCiAgKgotICogT24gc3VjY2VzcyBleGl0LCBzby0+Y3VyclBvcyBpcyB1cGRhdGVk IHRvIGNvbnRhaW4gZGF0YSBmcm9tIHRoZSBuZXh0Ci0gKiBpbnRlcmVzdGluZyBwYWdlLCBhbmQg d2UgcmV0dXJuIHRydWUuICBXZSBob2xkIGEgcGluIG9uIHRoZSBidWZmZXIgb24KLSAqIHN1Y2Nl c3MgZXhpdCAoZXhjZXB0IGR1cmluZyBzby0+ZHJvcFBpbiBpbmRleCBzY2Fucywgd2hlbiB3ZSBk cm9wIHRoZSBwaW4KLSAqIGVhZ2VybHkgdG8gYXZvaWQgYmxvY2tpbmcgVkFDVVVNKS4KKyAqIE9u IHN1Y2Nlc3MgZXhpdCwgcmV0dXJucyBiYXRjaCBjb250YWluaW5nIGRhdGEgZnJvbSB0aGUgbmV4 dCBwYWdlIHRoYXQgaGFzCisgKiBhdCBsZWFzdCBvbmUgbWF0Y2hpbmcgaXRlbS4gIElmIHRoZXJl IGFyZSBubyBtb3JlIG1hdGNoaW5nIGl0ZW1zIGluIHRoZQorICogZ2l2ZW4gc2NhbiBkaXJlY3Rp b24sIHdlIGp1c3QgcmV0dXJuIE5VTEwuCiAgKgotICogSWYgdGhlcmUgYXJlIG5vIG1vcmUgbWF0 Y2hpbmcgcmVjb3JkcyBpbiB0aGUgZ2l2ZW4gZGlyZWN0aW9uLCB3ZSBpbnZhbGlkYXRlCi0gKiBz by0+Y3VyclBvcyAod2hpbGUgZW5zdXJpbmcgaXQgcmV0YWlucyBubyBsb2NrcyBvciBwaW5zKSwg YW5kIHJldHVybiBmYWxzZS4KLSAqCi0gKiBXZSBhbHdheXMgcmVsZWFzZSB0aGUgc2NhbiBmb3Ig YSBwYXJhbGxlbCBzY2FuIGNhbGxlciwgcmVnYXJkbGVzcyBvZgotICogc3VjY2VzcyBvciBmYWls dXJlOyB3ZSdsbCBjYWxsIF9idF9wYXJhbGxlbF9yZWxlYXNlIGFzIHNvb24gYXMgcG9zc2libGUu CisgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBzZWl6ZSB0aGUgc2NhbiBiZWZvcmUgY2Fs bGluZyBoZXJlLiAgYmxrbm8gYW5kCisgKiBsYXN0Y3VycmJsa25vIHNob3VsZCBjb21lIGZyb20g dGhlIHNlaXplZCBzY2FuLiAgV2UnbGwgcmVsZWFzZSB0aGUgc2NhbiBhcworICogc29vbiBhcyBw b3NzaWJsZS4KICAqLwotc3RhdGljIGJvb2wKK3N0YXRpYyBCYXRjaEluZGV4U2NhbgogX2J0X3Jl YWRuZXh0cGFnZShJbmRleFNjYW5EZXNjIHNjYW4sIEJsb2NrTnVtYmVyIGJsa25vLAotCQkJCSBC bG9ja051bWJlciBsYXN0Y3VycmJsa25vLCBTY2FuRGlyZWN0aW9uIGRpciwgYm9vbCBzZWl6ZWQp CisJCQkJIEJsb2NrTnVtYmVyIGxhc3RjdXJyYmxrbm8sIFNjYW5EaXJlY3Rpb24gZGlyLCBib29s IGZpcnN0cGFnZSkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5pbmRleFJlbGF0aW9uOwotCUJU U2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9wYXF1ZTsKKwlCYXRjaEluZGV4 U2NhbiBuZXdiYXRjaDsKIAotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBsYXN0Y3Vy cmJsa25vIHx8IHNlaXplZCk7Ci0JQXNzZXJ0KCEoYmxrbm8gPT0gUF9OT05FICYmIHNlaXplZCkp OwotCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsKKwkvKiBBbGxvY2F0 ZSBzcGFjZSBmb3IgbmV4dCBiYXRjaCAqLworCW5ld2JhdGNoID0gaW5kZXhhbV91dGlsX2JhdGNo X2FsbG9jKHNjYW4pOwogCiAJLyoKLQkgKiBSZW1lbWJlciB0aGF0IHRoZSBzY2FuIGFscmVhZHkg cmVhZCBsYXN0Y3VycmJsa25vLCBhIHBhZ2UgdG8gdGhlIGxlZnQKLQkgKiBvZiBibGtubyAob3Ig cmVtZW1iZXIgcmVhZGluZyBhIHBhZ2UgdG8gdGhlIHJpZ2h0LCBmb3IgYmFja3dhcmRzIHNjYW5z KQorCSAqIG5ld2JhdGNoIHdpbGwgYmUgdGhlIGJhdGNoIGZvciBsYXN0Y3VycmJsa25vLCBhIHBh Z2UgdG8gdGhlIGxlZnQgb2YKKwkgKiBibGtubyAob3IgdG8gdGhlIHJpZ2h0LCB3aGVuIHRoZSBz Y2FuIGlzIG1vdmluZyBiYWNrd2FyZHMpCiAJICovCi0JaWYgKFNjYW5EaXJlY3Rpb25Jc0Zvcndh cmQoZGlyKSkKLQkJc28tPmN1cnJQb3MubW9yZUxlZnQgPSB0cnVlOwotCWVsc2UKLQkJc28tPmN1 cnJQb3MubW9yZVJpZ2h0ID0gdHJ1ZTsKKwluZXdiYXRjaC0+bW9yZUxlZnQgPSB0cnVlOworCW5l d2JhdGNoLT5tb3JlUmlnaHQgPSB0cnVlOwogCiAJZm9yICg7OykKIAl7CiAJCVBhZ2UJCXBhZ2U7 CiAJCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAKLQkJaWYgKGJsa25vID09IFBfTk9ORSB8fAotCQkJ KFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyKSA/Ci0JCQkgIXNvLT5jdXJyUG9zLm1vcmVSaWdo dCA6ICFzby0+Y3VyclBvcy5tb3JlTGVmdCkpCi0JCXsKLQkJCS8qIG1vc3QgcmVjZW50IF9idF9y ZWFkcGFnZSBjYWxsIChmb3IgbGFzdGN1cnJibGtubykgZW5kZWQgc2NhbiAqLwotCQkJQXNzZXJ0 KHNvLT5jdXJyUG9zLmN1cnJQYWdlID09IGxhc3RjdXJyYmxrbm8gJiYgIXNlaXplZCk7Ci0JCQlC VFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCV9idF9wYXJhbGxlbF9kb25lKHNj YW4pOwkvKiBpZmYgIXNvLT5uZWVkUHJpbVNjYW4gKi8KLQkJCXJldHVybiBmYWxzZTsKLQkJfQot Ci0JCUFzc2VydCghc28tPm5lZWRQcmltU2Nhbik7Ci0KLQkJLyogcGFyYWxsZWwgc2NhbiBtdXN0 IG5ldmVyIGFjdHVhbGx5IHZpc2l0IHNvLT5jdXJyUG9zIGJsa25vICovCi0JCWlmICghc2VpemVk ICYmIHNjYW4tPnBhcmFsbGVsX3NjYW4gIT0gTlVMTCAmJgotCQkJIV9idF9wYXJhbGxlbF9zZWl6 ZShzY2FuLCAmYmxrbm8sICZsYXN0Y3VycmJsa25vLCBmYWxzZSkpCi0JCXsKLQkJCS8qIHdob2xl IHNjYW4gaXMgbm93IGRvbmUgKG9yIGFub3RoZXIgcHJpbWl0aXZlIHNjYW4gcmVxdWlyZWQpICov Ci0JCQlCVFNjYW5Qb3NJbnZhbGlkYXRlKHNvLT5jdXJyUG9zKTsKLQkJCXJldHVybiBmYWxzZTsK LQkJfQorCQlBc3NlcnQoISgoQlRTY2FuT3BhcXVlKSBzY2FuLT5vcGFxdWUpLT5uZWVkUHJpbVNj YW4pOworCQlBc3NlcnQoYmxrbm8gIT0gUF9OT05FICYmIGxhc3RjdXJyYmxrbm8gIT0gUF9OT05F KTsKIAogCQlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQl7CiAJCQkvKiByZWFk IGJsa25vLCBidXQgY2hlY2sgZm9yIGludGVycnVwdHMgZmlyc3QgKi8KIAkJCUNIRUNLX0ZPUl9J TlRFUlJVUFRTKCk7Ci0JCQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0YnVmKHJlbCwgYmxrbm8s IEJUX1JFQUQpOworCQkJbmV3YmF0Y2gtPmJ1ZiA9IF9idF9nZXRidWYocmVsLCBibGtubywgQlRf UkVBRCk7CiAJCX0KIAkJZWxzZQogCQl7CiAJCQkvKiByZWFkIGJsa25vLCBhdm9pZGluZyByYWNl IChhbHNvIGNoZWNrcyBmb3IgaW50ZXJydXB0cykgKi8KLQkJCXNvLT5jdXJyUG9zLmJ1ZiA9IF9i dF9sb2NrX2FuZF92YWxpZGF0ZV9sZWZ0KHJlbCwgJmJsa25vLAotCQkJCQkJCQkJCQkJCQkgbGFz dGN1cnJibGtubyk7Ci0JCQlpZiAoc28tPmN1cnJQb3MuYnVmID09IEludmFsaWRCdWZmZXIpCisJ CQluZXdiYXRjaC0+YnVmID0gX2J0X2xvY2tfYW5kX3ZhbGlkYXRlX2xlZnQocmVsLCAmYmxrbm8s CisJCQkJCQkJCQkJCQkJICAgbGFzdGN1cnJibGtubyk7CisJCQlpZiAobmV3YmF0Y2gtPmJ1ZiA9 PSBJbnZhbGlkQnVmZmVyKQogCQkJewogCQkJCS8qIG11c3QgaGF2ZSBiZWVuIGEgY29uY3VycmVu dCBkZWxldGlvbiBvZiBsZWZ0bW9zdCBwYWdlICovCi0JCQkJQlRTY2FuUG9zSW52YWxpZGF0ZShz by0+Y3VyclBvcyk7CiAJCQkJX2J0X3BhcmFsbGVsX2RvbmUoc2Nhbik7Ci0JCQkJcmV0dXJuIGZh bHNlOworCQkJCWluZGV4YW1fdXRpbF9iYXRjaF9yZWxlYXNlKHNjYW4sIG5ld2JhdGNoKTsKKwkJ CQlyZXR1cm4gTlVMTDsKIAkJCX0KIAkJfQogCi0JCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKHNvLT5j dXJyUG9zLmJ1Zik7CisJCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKG5ld2JhdGNoLT5idWYpOwogCQlv cGFxdWUgPSBCVFBhZ2VHZXRPcGFxdWUocGFnZSk7CiAJCWxhc3RjdXJyYmxrbm8gPSBibGtubzsK IAkJaWYgKGxpa2VseSghUF9JR05PUkUob3BhcXVlKSkpCkBAIC0xOTEwLDE3ICsxNzYwLDE3IEBA IF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBzY2FuLCBCbG9ja051bWJlciBibGtubywK IAkJCS8qIHNlZSBpZiB0aGVyZSBhcmUgYW55IG1hdGNoZXMgb24gdGhpcyBwYWdlICovCiAJCQlp ZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXIpKQogCQkJewotCQkJCS8qIG5vdGUgdGhhdCB0 aGlzIHdpbGwgY2xlYXIgbW9yZVJpZ2h0IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9y ZWFkcGFnZShzY2FuLCBkaXIsIFBfRklSU1REQVRBS0VZKG9wYXF1ZSksIHNlaXplZCkpCisJCQkJ aWYgKF9idF9yZWFkcGFnZShzY2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUF9GSVJTVERB VEFLRVkob3BhcXVlKSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+ Y3VyclBvcy5uZXh0UGFnZTsKKwkJCQlibGtubyA9IG5ld2JhdGNoLT5uZXh0UGFnZTsKIAkJCX0K IAkJCWVsc2UKIAkJCXsKLQkJCQkvKiBub3RlIHRoYXQgdGhpcyB3aWxsIGNsZWFyIG1vcmVMZWZ0 IGlmIHdlIGNhbiBzdG9wICovCi0JCQkJaWYgKF9idF9yZWFkcGFnZShzY2FuLCBkaXIsIFBhZ2VH ZXRNYXhPZmZzZXROdW1iZXIocGFnZSksIHNlaXplZCkpCisJCQkJaWYgKF9idF9yZWFkcGFnZShz Y2FuLCBuZXdiYXRjaCwgZGlyLAorCQkJCQkJCQkgUGFnZUdldE1heE9mZnNldE51bWJlcihwYWdl KSwgZmlyc3RwYWdlKSkKIAkJCQkJYnJlYWs7Ci0JCQkJYmxrbm8gPSBzby0+Y3VyclBvcy5wcmV2 UGFnZTsKKwkJCQlibGtubyA9IG5ld2JhdGNoLT5wcmV2UGFnZTsKIAkJCX0KIAkJfQogCQllbHNl CkBAIC0xOTM1LDE5ICsxNzg1LDM5IEBAIF9idF9yZWFkbmV4dHBhZ2UoSW5kZXhTY2FuRGVzYyBz Y2FuLCBCbG9ja051bWJlciBibGtubywKIAkJfQogCiAJCS8qIG5vIG1hdGNoaW5nIHR1cGxlcyBv biB0aGlzIHBhZ2UgKi8KLQkJX2J0X3JlbGJ1ZihyZWwsIHNvLT5jdXJyUG9zLmJ1Zik7Ci0JCXNl aXplZCA9IGZhbHNlOwkJCS8qIHJlbGVhc2VkIGJ5IF9idF9yZWFkcGFnZSAob3IgYnkgdXMpICov CisJCV9idF9yZWxidWYocmVsLCBuZXdiYXRjaC0+YnVmKTsKKwkJbmV3YmF0Y2gtPmJ1ZiA9IElu dmFsaWRCdWZmZXI7CisKKwkJLyogQ29udGludWUgdGhlIHNjYW4gaW4gdGhpcyBkaXJlY3Rpb24/ ICovCisJCWlmIChibGtubyA9PSBQX05PTkUgfHwKKwkJCShTY2FuRGlyZWN0aW9uSXNGb3J3YXJk KGRpcikgPworCQkJICFuZXdiYXRjaC0+bW9yZVJpZ2h0IDogIW5ld2JhdGNoLT5tb3JlTGVmdCkp CisJCXsKKwkJCS8qCisJCQkgKiBibGtubyBfYnRfcmVhZHBhZ2UgY2FsbCBlbmRlZCBzY2FuIGlu IHRoaXMgZGlyZWN0aW9uICh0aG91Z2ggaWYKKwkJCSAqIHNvLT5uZWVkUHJpbVNjYW4gd2FzIHNl dCB0aGUgc2NhbiB3aWxsIGNvbnRpbnVlIGluIF9idF9maXJzdCkKKwkJCSAqLworCQkJX2J0X3Bh cmFsbGVsX2RvbmUoc2Nhbik7CisJCQlpbmRleGFtX3V0aWxfYmF0Y2hfcmVsZWFzZShzY2FuLCBu ZXdiYXRjaCk7CisJCQlyZXR1cm4gTlVMTDsKKwkJfQorCisJCS8qIHBhcmFsbGVsIHNjYW4gbXVz dCBzZWl6ZSB0aGUgc2NhbiB0byBnZXQgbmV4dCBibGtubyAqLworCQlpZiAoc2Nhbi0+cGFyYWxs ZWxfc2NhbiAhPSBOVUxMICYmCisJCQkhX2J0X3BhcmFsbGVsX3NlaXplKHNjYW4sICZibGtubywg Jmxhc3RjdXJyYmxrbm8sIGZhbHNlKSkKKwkJeworCQkJaW5kZXhhbV91dGlsX2JhdGNoX3JlbGVh c2Uoc2NhbiwgbmV3YmF0Y2gpOworCQkJcmV0dXJuIE5VTEw7CQkvKiBkb25lIGlmZiBzby0+bmVl ZFByaW1TY2FuIHdhc24ndCBzZXQgKi8KKwkJfQorCisJCWZpcnN0cGFnZSA9IGZhbHNlOwkJLyog bmV4dCBwYWdlIGNhbm5vdCBiZSBmaXJzdCAqLwogCX0KIAotCS8qCi0JICogX2J0X3JlYWRwYWdl IHN1Y2NlZWRlZC4gIERyb3AgdGhlIGxvY2sgKGFuZCBtYXliZSB0aGUgcGluKSBvbgotCSAqIHNv LT5jdXJyUG9zLmJ1ZiBpbiBwcmVwYXJhdGlvbiBmb3IgYnRnZXR0dXBsZSByZXR1cm5pbmcgdHVw bGVzLgotCSAqLwotCUFzc2VydChzby0+Y3VyclBvcy5jdXJyUGFnZSA9PSBibGtubyk7Ci0JQXNz ZXJ0KEJUU2NhblBvc0lzUGlubmVkKHNvLT5jdXJyUG9zKSk7Ci0JX2J0X2Ryb3BfbG9ja19hbmRf bWF5YmVfcGluKHJlbCwgc28pOworCS8qIF9idF9yZWFkcGFnZSBzYXZlZCBvbmUgb3IgbW9yZSBt YXRjaGVzIGluIG5ld2JhdGNoLml0ZW1zW10gKi8KKwlBc3NlcnQobmV3YmF0Y2gtPmN1cnJQYWdl ID09IGJsa25vKTsKKwlpbmRleGFtX3V0aWxfYmF0Y2hfdW5sb2NrKHNjYW4sIG5ld2JhdGNoKTsK IAotCXJldHVybiB0cnVlOworCXJldHVybiBuZXdiYXRjaDsKIH0KIAogLyoKQEAgLTIxNzMsMjUg KzIwNDMsMjMgQEAgX2J0X2dldF9lbmRwb2ludChSZWxhdGlvbiByZWwsIHVpbnQzMiBsZXZlbCwg Ym9vbCByaWdodG1vc3QpCiAgKiBQYXJhbGxlbCBzY2FuIGNhbGxlcnMgbXVzdCBoYXZlIHNlaXpl ZCB0aGUgc2NhbiBiZWZvcmUgY2FsbGluZyBoZXJlLgogICogRXhpdCBjb25kaXRpb25zIGFyZSB0 aGUgc2FtZSBhcyBmb3IgX2J0X2ZpcnN0KCkuCiAgKi8KLXN0YXRpYyBib29sCi1fYnRfZW5kcG9p bnQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcikKK3N0YXRpYyBCYXRjaElu ZGV4U2NhbgorX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBk aXIsIEJhdGNoSW5kZXhTY2FuIGZpcnN0YmF0Y2gpCiB7CiAJUmVsYXRpb24JcmVsID0gc2Nhbi0+ aW5kZXhSZWxhdGlvbjsKLQlCVFNjYW5PcGFxdWUgc28gPSAoQlRTY2FuT3BhcXVlKSBzY2FuLT5v cGFxdWU7CiAJUGFnZQkJcGFnZTsKIAlCVFBhZ2VPcGFxdWUgb3BhcXVlOwogCU9mZnNldE51bWJl ciBzdGFydDsKIAotCUFzc2VydCghQlRTY2FuUG9zSXNWYWxpZChzby0+Y3VyclBvcykpOwotCUFz c2VydCghc28tPm5lZWRQcmltU2Nhbik7CisJQXNzZXJ0KCEoKEJUU2Nhbk9wYXF1ZSkgc2Nhbi0+ b3BhcXVlKS0+bmVlZFByaW1TY2FuKTsKIAogCS8qCiAJICogU2NhbiBkb3duIHRvIHRoZSBsZWZ0 bW9zdCBvciByaWdodG1vc3QgbGVhZiBwYWdlLiAgVGhpcyBpcyBhIHNpbXBsaWZpZWQKIAkgKiB2 ZXJzaW9uIG9mIF9idF9zZWFyY2goKS4KIAkgKi8KLQlzby0+Y3VyclBvcy5idWYgPSBfYnRfZ2V0 X2VuZHBvaW50KHJlbCwgMCwgU2NhbkRpcmVjdGlvbklzQmFja3dhcmQoZGlyKSk7CisJZmlyc3Ri YXRjaC0+YnVmID0gX2J0X2dldF9lbmRwb2ludChyZWwsIDAsIFNjYW5EaXJlY3Rpb25Jc0JhY2t3 YXJkKGRpcikpOwogCi0JaWYgKCFCdWZmZXJJc1ZhbGlkKHNvLT5jdXJyUG9zLmJ1ZikpCisJaWYg KCFCdWZmZXJJc1ZhbGlkKGZpcnN0YmF0Y2gtPmJ1ZikpCiAJewogCQkvKgogCQkgKiBFbXB0eSBp bmRleC4gTG9jayB0aGUgd2hvbGUgcmVsYXRpb24sIGFzIG5vdGhpbmcgZmluZXIgdG8gbG9jawpA QCAtMjIwMiw3ICsyMDcwLDcgQEAgX2J0X2VuZHBvaW50KEluZGV4U2NhbkRlc2Mgc2NhbiwgU2Nh bkRpcmVjdGlvbiBkaXIpCiAJCXJldHVybiBmYWxzZTsKIAl9CiAKLQlwYWdlID0gQnVmZmVyR2V0 UGFnZShzby0+Y3VyclBvcy5idWYpOworCXBhZ2UgPSBCdWZmZXJHZXRQYWdlKGZpcnN0YmF0Y2gt PmJ1Zik7CiAJb3BhcXVlID0gQlRQYWdlR2V0T3BhcXVlKHBhZ2UpOwogCUFzc2VydChQX0lTTEVB RihvcGFxdWUpKTsKIApAQCAtMjIyOCw5ICsyMDk2LDUgQEAgX2J0X2VuZHBvaW50KEluZGV4U2Nh bkRlc2Mgc2NhbiwgU2NhbkRpcmVjdGlvbiBkaXIpCiAJLyoKIAkgKiBOb3cgbG9hZCBkYXRhIGZy b20gdGhlIGZpcnN0IHBhZ2Ugb2YgdGhlIHNjYW4uCiAJICovCi0JaWYgKCFfYnRfcmVhZGZpcnN0 cGFnZShzY2FuLCBzdGFydCwgZGlyKSkKLQkJcmV0dXJuIGZhbHNlOwotCi0JX2J0X3JldHVybml0 ZW0oc2Nhbiwgc28pOwotCXJldHVybiB0cnVlOworCXJldHVybiBfYnRfcmVhZGZpcnN0cGFnZShz Y2FuLCBmaXJzdGJhdGNoLCBzdGFydCwgZGlyKTsKIH0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy9uYnRyZWUvbmJ0dXRpbHMuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRyZWUvbmJ0 dXRpbHMuYwppbmRleCA1YzUwZjBkZDEuLmI1MDVkNzg3NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvYWNjZXNzL25idHJlZS9uYnR1dGlscy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9uYnRy ZWUvbmJ0dXRpbHMuYwpAQCAtMjEsMTUgKzIxLDEyIEBACiAjaW5jbHVkZSAiYWNjZXNzL3JlbG9w dGlvbnMuaCIKICNpbmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImNvbW1hbmRz L3Byb2dyZXNzLmgiCi0jaW5jbHVkZSAiY29tbW9uL2ludC5oIgotI2luY2x1ZGUgImxpYi9xdW5p cXVlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAidXRpbHMvZGF0dW0uaCIK ICNpbmNsdWRlICJ1dGlscy9sc3lzY2FjaGUuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIKIAog Ci1zdGF0aWMgaW50CV9idF9jb21wYXJlX2ludChjb25zdCB2b2lkICp2YSwgY29uc3Qgdm9pZCAq dmIpOwogc3RhdGljIGludAlfYnRfa2VlcF9uYXR0cyhSZWxhdGlvbiByZWwsIEluZGV4VHVwbGUg bGFzdGxlZnQsCiAJCQkJCQkgICBJbmRleFR1cGxlIGZpcnN0cmlnaHQsIEJUU2Nhbkluc2VydCBp dHVwX2tleSk7CiAKQEAgLTE2MCwxMDQgKzE1Nyw2OSBAQCBfYnRfZnJlZXN0YWNrKEJUU3RhY2sg c3RhY2spCiAJfQogfQogCi0vKgotICogcXNvcnQgY29tcGFyaXNvbiBmdW5jdGlvbiBmb3IgaW50 IGFycmF5cwotICovCi1zdGF0aWMgaW50Ci1fYnRfY29tcGFyZV9pbnQoY29uc3Qgdm9pZCAqdmEs IGNvbnN0IHZvaWQgKnZiKQotewotCWludAkJCWEgPSAqKChjb25zdCBpbnQgKikgdmEpOwotCWlu dAkJCWIgPSAqKChjb25zdCBpbnQgKikgdmIpOwotCi0JcmV0dXJuIHBnX2NtcF9zMzIoYSwgYik7 Ci19Ci0KIC8qCiAgKiBfYnRfa2lsbGl0ZW1zIC0gc2V0IExQX0RFQUQgc3RhdGUgZm9yIGl0ZW1z IGFuIGluZGV4c2NhbiBjYWxsZXIgaGFzCiAgKiB0b2xkIHVzIHdlcmUga2lsbGVkCiAgKgotICog c2Nhbi0+b3BhcXVlLCByZWZlcmVuY2VkIGxvY2FsbHkgdGhyb3VnaCBzbywgY29udGFpbnMgaW5m b3JtYXRpb24gYWJvdXQgdGhlCi0gKiBjdXJyZW50IHBhZ2UgYW5kIGtpbGxlZCB0dXBsZXMgdGhl cmVvbiAoZ2VuZXJhbGx5LCB0aGlzIHNob3VsZCBvbmx5IGJlCi0gKiBjYWxsZWQgaWYgc28tPm51 bUtpbGxlZCA+IDApLgorICogVGhlIGJhdGNoIHBhcmFtZXRlciBjb250YWlucyBpbmZvcm1hdGlv biBhYm91dCB0aGUgY3VycmVudCBwYWdlIGFuZCBraWxsZWQKKyAqIHR1cGxlcyB0aGVyZW9uICh0 aGlzIHNob3VsZCBvbmx5IGJlIGNhbGxlZCBpZiBiYXRjaC0+bnVtS2lsbGVkID4gMCkuCiAgKgot ICogQ2FsbGVyIHNob3VsZCBub3QgaGF2ZSBhIGxvY2sgb24gdGhlIHNvLT5jdXJyUG9zIHBhZ2Us IGJ1dCBtdXN0IGhvbGQgYQotICogYnVmZmVyIHBpbiB3aGVuICFzby0+ZHJvcFBpbi4gIFdoZW4g d2UgcmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQuCi0gKiBJdCdsbCBjb250aW51ZSB0 byBob2xkIHdoYXRldmVyIHBpbnMgd2VyZSBoZWxkIGJlZm9yZSBjYWxsaW5nIGhlcmUuCisgKiBD YWxsZXIgc2hvdWxkIG5vdCBoYXZlIGEgbG9jayBvbiB0aGUgYmF0Y2ggcG9zaXRpb24ncyBwYWdl LCBidXQgbXVzdCBob2xkIGEKKyAqIGJ1ZmZlciBwaW4gd2hlbiAhZHJvcFBpbi4gIFdoZW4gd2Ug cmV0dXJuLCBpdCBzdGlsbCB3b24ndCBiZSBsb2NrZWQuICBJdCdsbAorICogY29udGludWUgdG8g aG9sZCB3aGF0ZXZlciBwaW5zIHdlcmUgaGVsZCBiZWZvcmUgY2FsbGluZyBoZXJlLgogICoKICAq IFdlIG1hdGNoIGl0ZW1zIGJ5IGhlYXAgVElEIGJlZm9yZSBhc3N1bWluZyB0aGV5IGFyZSB0aGUg cmlnaHQgb25lcyB0byBzZXQKICAqIExQX0RFQUQuICBJZiB0aGUgc2NhbiBpcyBvbmUgdGhhdCBo b2xkcyBhIGJ1ZmZlciBwaW4gb24gdGhlIHRhcmdldCBwYWdlCiAgKiBjb250aW51b3VzbHkgZnJv bSBpbml0aWFsbHkgcmVhZGluZyB0aGUgaXRlbXMgdW50aWwgYXBwbHlpbmcgdGhpcyBmdW5jdGlv bgotICogKGlmIGl0IGlzIGEgIXNvLT5kcm9wUGluIHNjYW4pLCBWQUNVVU0gY2Fubm90IGhhdmUg ZGVsZXRlZCBhbnkgaXRlbXMgb24gdGhlCisgKiAoaWYgaXQgaXMgYSAhZHJvcFBpbiBzY2FuKSwg VkFDVVVNIGNhbm5vdCBoYXZlIGRlbGV0ZWQgYW55IGl0ZW1zIG9uIHRoZQogICogcGFnZSwgc28g dGhlIHBhZ2UncyBUSURzIGNhbid0IGhhdmUgYmVlbiByZWN5Y2xlZCBieSBub3cuICBUaGVyZSdz IG5vIHJpc2sKICAqIHRoYXQgd2UnbGwgY29uZnVzZSBhIG5ldyBpbmRleCB0dXBsZSB0aGF0IGhh cHBlbnMgdG8gdXNlIGEgcmVjeWNsZWQgVElECiAgKiB3aXRoIGEgbm93LXJlbW92ZWQgdHVwbGUg d2l0aCB0aGUgc2FtZSBUSUQgKHRoYXQgdXNlZCB0byBiZSBvbiB0aGlzIHNhbWUKICAqIHBhZ2Up LiAgV2UgY2FuJ3QgcmVseSBvbiB0aGF0IGR1cmluZyBzY2FucyB0aGF0IGRyb3AgYnVmZmVyIHBp bnMgZWFnZXJseQotICogKHNvLT5kcm9wUGluIHNjYW5zKSwgdGhvdWdoLCBzbyB3ZSBtdXN0IGNv bmRpdGlvbiBzZXR0aW5nIExQX0RFQUQgYml0cyBvbgorICogKGkuZS4gZHJvcFBpbiBzY2Fucyks IHRob3VnaCwgc28gd2UgbXVzdCBjb25kaXRpb24gc2V0dGluZyBMUF9ERUFEIGJpdHMgb24KICAq IHRoZSBwYWdlIExTTiBoYXZpbmcgbm90IGNoYW5nZWQgc2luY2UgYmFjayB3aGVuIF9idF9yZWFk cGFnZSBzYXcgdGhlIHBhZ2UuCiAgKiBXZSB0b3RhbGx5IGdpdmUgdXAgb24gc2V0dGluZyBMUF9E RUFEIGJpdHMgd2hlbiB0aGUgcGFnZSBMU04gY2hhbmdlZC4KICAqCi0gKiBXZSBnaXZlIHVwIG11 Y2ggbGVzcyBvZnRlbiBkdXJpbmcgIXNvLT5kcm9wUGluIHNjYW5zLCBidXQgaXQgc3RpbGwgaGFw cGVucy4KKyAqIFdlIHRlbmQgdG8gZ2l2ZSB1cCBsZXNzIG9mdGVuIGR1cmluZyAhZHJvcFBpbiBz Y2FucywgYnV0IGl0IHN0aWxsIGhhcHBlbnMuCiAgKiBXZSBjb3BlIHdpdGggY2FzZXMgd2hlcmUg aXRlbXMgaGF2ZSBtb3ZlZCByaWdodCBkdWUgdG8gaW5zZXJ0aW9ucy4gIElmIGFuCiAgKiBpdGVt IGhhcyBtb3ZlZCBvZmYgdGhlIGN1cnJlbnQgcGFnZSBkdWUgdG8gYSBzcGxpdCwgd2UnbGwgZmFp bCB0byBmaW5kIGl0CiAgKiBhbmQganVzdCBnaXZlIHVwIG9uIGl0LgogICovCiB2b2lkCi1fYnRf a2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKK19idF9raWxsaXRlbXMoSW5kZXhTY2FuRGVz YyBzY2FuLCBCYXRjaEluZGV4U2NhbiBiYXRjaCkKIHsKIAlSZWxhdGlvbglyZWwgPSBzY2FuLT5p bmRleFJlbGF0aW9uOwotCUJUU2Nhbk9wYXF1ZSBzbyA9IChCVFNjYW5PcGFxdWUpIHNjYW4tPm9w YXF1ZTsKIAlQYWdlCQlwYWdlOwogCUJUUGFnZU9wYXF1ZSBvcGFxdWU7CiAJT2Zmc2V0TnVtYmVy IG1pbm9mZjsKIAlPZmZzZXROdW1iZXIgbWF4b2ZmOwotCWludAkJCW51bUtpbGxlZCA9IHNvLT5u dW1LaWxsZWQ7CiAJYm9vbAkJa2lsbGVkc29tZXRoaW5nID0gZmFsc2U7CiAJQnVmZmVyCQlidWY7 CiAKLQlBc3NlcnQobnVtS2lsbGVkID4gMCk7Ci0JQXNzZXJ0KEJUU2NhblBvc0lzVmFsaWQoc28t PmN1cnJQb3MpKTsKKwlBc3NlcnQoYmF0Y2gtPm51bUtpbGxlZCA+IDApOworCUFzc2VydChCbG9j a051bWJlcklzVmFsaWQoYmF0Y2gtPmN1cnJQYWdlKSk7CiAJQXNzZXJ0KHNjYW4tPmhlYXBSZWxh dGlvbiAhPSBOVUxMKTsgLyogY2FuJ3QgYmUgYSBiaXRtYXAgaW5kZXggc2NhbiAqLwogCi0JLyog QWx3YXlzIGludmFsaWRhdGUgc28tPmtpbGxlZEl0ZW1zW10gYmVmb3JlIGxlYXZpbmcgc28tPmN1 cnJQb3MgKi8KLQlzby0+bnVtS2lsbGVkID0gMDsKLQotCS8qCi0JICogV2UgbmVlZCB0byBpdGVy YXRlIHRocm91Z2ggc28tPmtpbGxlZEl0ZW1zW10gaW4gbGVhZiBwYWdlIG9yZGVyOyB0aGUKLQkg KiBsb29wIGJlbG93IGV4cGVjdHMgdGhpcyAod2hlbiBtYXJraW5nIHBvc3RpbmcgbGlzdCB0dXBs ZXMsIGF0IGxlYXN0KS4KLQkgKiBzby0+a2lsbGVkSXRlbXNbXSBpcyBub3cgaW4gd2hhdGV2ZXIg b3JkZXIgdGhlIHNjYW4gcmV0dXJuZWQgaXRlbXMgaW4uCi0JICogU2Nyb2xsYWJsZSBjdXJzb3Ig c2NhbnMgbWlnaHQgaGF2ZSBldmVuIHNhdmVkIHRoZSBzYW1lIGl0ZW0vVElEIHR3aWNlLgotCSAq Ci0JICogU29ydCBhbmQgdW5pcXVlLWlmeSBzby0+a2lsbGVkSXRlbXNbXSB0byBkZWFsIHdpdGgg YWxsIHRoaXMuCi0JICovCi0JaWYgKG51bUtpbGxlZCA+IDEpCi0JewotCQlxc29ydChzby0+a2ls bGVkSXRlbXMsIG51bUtpbGxlZCwgc2l6ZW9mKGludCksIF9idF9jb21wYXJlX2ludCk7Ci0JCW51 bUtpbGxlZCA9IHF1bmlxdWUoc28tPmtpbGxlZEl0ZW1zLCBudW1LaWxsZWQsIHNpemVvZihpbnQp LAotCQkJCQkJCV9idF9jb21wYXJlX2ludCk7Ci0JfQotCi0JaWYgKCFzby0+ZHJvcFBpbikKKwlp ZiAoIXNjYW4tPmRyb3BQaW4pCiAJewogCQkvKgogCQkgKiBXZSBoYXZlIGhlbGQgdGhlIHBpbiBv biB0aGlzIHBhZ2Ugc2luY2Ugd2UgcmVhZCB0aGUgaW5kZXggdHVwbGVzLAogCQkgKiBzbyBhbGwg d2UgbmVlZCB0byBkbyBpcyBsb2NrIGl0LiAgVGhlIHBpbiB3aWxsIGhhdmUgcHJldmVudGVkCiAJ CSAqIGNvbmN1cnJlbnQgVkFDVVVNcyBmcm9tIHJlY3ljbGluZyBhbnkgb2YgdGhlIFRJRHMgb24g dGhlIHBhZ2UuCiAJCSAqLwotCQlBc3NlcnQoQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3Mp KTsKLQkJYnVmID0gc28tPmN1cnJQb3MuYnVmOworCQlidWYgPSBiYXRjaC0+YnVmOwogCQlfYnRf bG9ja2J1ZihyZWwsIGJ1ZiwgQlRfUkVBRCk7CiAJfQogCWVsc2UKIAl7CiAJCVhMb2dSZWNQdHIJ bGF0ZXN0bHNuOwogCi0JCUFzc2VydCghQlRTY2FuUG9zSXNQaW5uZWQoc28tPmN1cnJQb3MpKTsK IAkJQXNzZXJ0KFJlbGF0aW9uTmVlZHNXQUwocmVsKSk7Ci0JCWJ1ZiA9IF9idF9nZXRidWYocmVs LCBzby0+Y3VyclBvcy5jdXJyUGFnZSwgQlRfUkVBRCk7CisJCWJ1ZiA9IF9idF9nZXRidWYocmVs LCBiYXRjaC0+Y3VyclBhZ2UsIEJUX1JFQUQpOwogCiAJCWxhdGVzdGxzbiA9IEJ1ZmZlckdldExT TkF0b21pYyhidWYpOwotCQlBc3NlcnQoc28tPmN1cnJQb3MubHNuIDw9IGxhdGVzdGxzbik7Ci0J CWlmIChzby0+Y3VyclBvcy5sc24gIT0gbGF0ZXN0bHNuKQorCQlBc3NlcnQoYmF0Y2gtPmxzbiA8 PSBsYXRlc3Rsc24pOworCQlpZiAoYmF0Y2gtPmxzbiAhPSBsYXRlc3Rsc24pCiAJCXsKIAkJCS8q IE1vZGlmaWVkLCBnaXZlIHVwIG9uIGhpbnRpbmcgKi8KIAkJCV9idF9yZWxidWYocmVsLCBidWYp OwpAQCAtMjcyLDE3ICsyMzQsMTYgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNjIHNjYW4p CiAJbWlub2ZmID0gUF9GSVJTVERBVEFLRVkob3BhcXVlKTsKIAltYXhvZmYgPSBQYWdlR2V0TWF4 T2Zmc2V0TnVtYmVyKHBhZ2UpOwogCi0JLyogSXRlcmF0ZSB0aHJvdWdoIHNvLT5raWxsZWRJdGVt c1tdIGluIGxlYWYgcGFnZSBvcmRlciAqLwotCWZvciAoaW50IGkgPSAwOyBpIDwgbnVtS2lsbGVk OyBpKyspCisJLyogSXRlcmF0ZSB0aHJvdWdoIGJhdGNoLT5raWxsZWRJdGVtc1tdIGluIGxlYWYg cGFnZSBvcmRlciAqLworCWZvciAoaW50IGkgPSAwOyBpIDwgYmF0Y2gtPm51bUtpbGxlZDsgaSsr KQogCXsKLQkJaW50CQkJaXRlbUluZGV4ID0gc28tPmtpbGxlZEl0ZW1zW2ldOwotCQlCVFNjYW5Q b3NJdGVtICpraXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tpdGVtSW5kZXhdOworCQlpbnQJCQlp dGVtSW5kZXggPSBiYXRjaC0+a2lsbGVkSXRlbXNbaV07CisJCUJhdGNoTWF0Y2hpbmdJdGVtICpr aXRlbSA9ICZiYXRjaC0+aXRlbXNbaXRlbUluZGV4XTsKIAkJT2Zmc2V0TnVtYmVyIG9mZm51bSA9 IGtpdGVtLT5pbmRleE9mZnNldDsKIAotCQlBc3NlcnQoaXRlbUluZGV4ID49IHNvLT5jdXJyUG9z LmZpcnN0SXRlbSAmJgotCQkJICAgaXRlbUluZGV4IDw9IHNvLT5jdXJyUG9zLmxhc3RJdGVtKTsK KwkJQXNzZXJ0KGl0ZW1JbmRleCA+PSBiYXRjaC0+Zmlyc3RJdGVtICYmIGl0ZW1JbmRleCA8PSBi YXRjaC0+bGFzdEl0ZW0pOwogCQlBc3NlcnQoaSA9PSAwIHx8Ci0JCQkgICBvZmZudW0gPj0gc28t PmN1cnJQb3MuaXRlbXNbc28tPmtpbGxlZEl0ZW1zW2kgLSAxXV0uaW5kZXhPZmZzZXQpOworCQkJ ICAgb2ZmbnVtID49IGJhdGNoLT5pdGVtc1tiYXRjaC0+a2lsbGVkSXRlbXNbaSAtIDFdXS5pbmRl eE9mZnNldCk7CiAKIAkJaWYgKG9mZm51bSA8IG1pbm9mZikKIAkJCWNvbnRpbnVlOwkJCS8qIHB1 cmUgcGFyYW5vaWEgKi8KQEAgLTMwMCw3ICsyNjEsNyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2Nh bkRlc2Mgc2NhbikKIAogCQkJCS8qCiAJCQkJICogTm90ZSB0aGF0IHRoZSBwYWdlIG1heSBoYXZl IGJlZW4gbW9kaWZpZWQgaW4gYWxtb3N0IGFueSB3YXkKLQkJCQkgKiBzaW5jZSB3ZSBmaXJzdCBy ZWFkIGl0IChpbiB0aGUgIXNvLT5kcm9wUGluIGNhc2UpLCBzbyBpdCdzCisJCQkJICogc2luY2Ug d2UgZmlyc3QgcmVhZCBpdCAoaW4gdGhlICFkcm9wUGluIGNhc2UpLCBzbyBpdCdzCiAJCQkJICog cG9zc2libGUgdGhhdCB0aGlzIHBvc3RpbmcgbGlzdCB0dXBsZSB3YXNuJ3QgYSBwb3N0aW5nIGxp c3QKIAkJCQkgKiB0dXBsZSB3aGVuIHdlIGZpcnN0IGVuY291bnRlcmVkIGl0cyBoZWFwIFRJRHMu CiAJCQkJICovCkBAIC0zMTYsNyArMjc3LDcgQEAgX2J0X2tpbGxpdGVtcyhJbmRleFNjYW5EZXNj IHNjYW4pCiAJCQkJCSAqIHRob3VnaCBvbmx5IGluIHRoZSBjb21tb24gY2FzZSB3aGVyZSB0aGUg cGFnZSBjYW4ndAogCQkJCQkgKiBoYXZlIGJlZW4gY29uY3VycmVudGx5IG1vZGlmaWVkCiAJCQkJ CSAqLwotCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc28tPmRy b3BQaW4pOworCQkJCQlBc3NlcnQoa2l0ZW0tPmluZGV4T2Zmc2V0ID09IG9mZm51bSB8fCAhc2Nh bi0+ZHJvcFBpbik7CiAKIAkJCQkJLyoKIAkJCQkJICogUmVhZC1haGVhZCB0byBsYXRlciBraXRl bXMgaGVyZS4KQEAgLTMzMiw4ICsyOTMsOCBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mg c2NhbikKIAkJCQkJICoga2l0ZW0gaXMgYWxzbyB0aGUgbGFzdCBoZWFwIFRJRCBpbiB0aGUgbGFz dCBpbmRleCB0dXBsZQogCQkJCQkgKiBjb3JyZWN0bHkgLS0gcG9zdGluZyB0dXBsZSBzdGlsbCBn ZXRzIGtpbGxlZCkuCiAJCQkJCSAqLwotCQkJCQlpZiAocGkgPCBudW1LaWxsZWQpCi0JCQkJCQlr aXRlbSA9ICZzby0+Y3VyclBvcy5pdGVtc1tzby0+a2lsbGVkSXRlbXNbcGkrK11dOworCQkJCQlp ZiAocGkgPCBiYXRjaC0+bnVtS2lsbGVkKQorCQkJCQkJa2l0ZW0gPSAmYmF0Y2gtPml0ZW1zW2Jh dGNoLT5raWxsZWRJdGVtc1twaSsrXV07CiAJCQkJfQogCiAJCQkJLyoKQEAgLTM4Myw3ICszNDQs NyBAQCBfYnRfa2lsbGl0ZW1zKEluZGV4U2NhbkRlc2Mgc2NhbikKIAkJTWFya0J1ZmZlckRpcnR5 SGludChidWYsIHRydWUpOwogCX0KIAotCWlmICghc28tPmRyb3BQaW4pCisJaWYgKCFzY2FuLT5k cm9wUGluKQogCQlfYnRfdW5sb2NrYnVmKHJlbCwgYnVmKTsKIAllbHNlCiAJCV9idF9yZWxidWYo cmVsLCBidWYpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGls cy5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCmluZGV4IDlmNTM3OWI4 Ny4uYTE4YTJmYTllIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvc3BnaXN0L3NwZ3V0 aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3NwZ2lzdC9zcGd1dGlscy5jCkBAIC04OCwx MCArODgsMTEgQEAgc3BnaGFuZGxlcihQR19GVU5DVElPTl9BUkdTKQogCQkuYW1iZWdpbnNjYW4g PSBzcGdiZWdpbnNjYW4sCiAJCS5hbXJlc2NhbiA9IHNwZ3Jlc2NhbiwKIAkJLmFtZ2V0dHVwbGUg PSBzcGdnZXR0dXBsZSwKKwkJLmFtZ2V0YmF0Y2ggPSBOVUxMLAorCQkuYW1mcmVlYmF0Y2ggPSBO VUxMLAogCQkuYW1nZXRiaXRtYXAgPSBzcGdnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBzcGdl bmRzY2FuLAotCQkuYW1tYXJrcG9zID0gTlVMTCwKLQkJLmFtcmVzdHJwb3MgPSBOVUxMLAorCQku YW1wb3NyZXNldCA9IE5VTEwsCiAJCS5hbWVzdGltYXRlcGFyYWxsZWxzY2FuID0gTlVMTCwKIAkJ LmFtaW5pdHBhcmFsbGVsc2NhbiA9IE5VTEwsCiAJCS5hbXBhcmFsbGVscmVzY2FuID0gTlVMTCwK ZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2V4cGxhaW4uYyBiL3NyYy9iYWNrZW5k L2NvbW1hbmRzL2V4cGxhaW4uYwppbmRleCAxZTY4YWQxNTYuLjU1YTU4ZTcyNyAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvY29tbWFuZHMvZXhwbGFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1h bmRzL2V4cGxhaW4uYwpAQCAtMTM1LDcgKzEzNSw3IEBAIHN0YXRpYyB2b2lkIHNob3dfcmVjdXJz aXZlX3VuaW9uX2luZm8oUmVjdXJzaXZlVW5pb25TdGF0ZSAqcnN0YXRlLAogc3RhdGljIHZvaWQg c2hvd19tZW1vaXplX2luZm8oTWVtb2l6ZVN0YXRlICptc3RhdGUsIExpc3QgKmFuY2VzdG9ycywK IAkJCQkJCQkgIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd19oYXNoYWdnX2lu Zm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKTsKLXN0YXRpYyB2b2lkIHNo b3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3RhdGUg KmVzKTsKK3N0YXRpYyB2b2lkIHNob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3Rh dGUsIEV4cGxhaW5TdGF0ZSAqZXMpOwogc3RhdGljIHZvaWQgc2hvd190aWRiaXRtYXBfaW5mbyhC aXRtYXBIZWFwU2NhblN0YXRlICpwbGFuc3RhdGUsCiAJCQkJCQkJCUV4cGxhaW5TdGF0ZSAqZXMp Owogc3RhdGljIHZvaWQgc2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoY29uc3QgY2hhciAqcWxh YmVsLCBpbnQgd2hpY2gsCkBAIC0xOTcwLDcgKzE5NzAsNyBAQCBFeHBsYWluTm9kZShQbGFuU3Rh dGUgKnBsYW5zdGF0ZSwgTGlzdCAqYW5jZXN0b3JzLAogCQkJaWYgKHBsYW4tPnF1YWwpCiAJCQkJ c2hvd19pbnN0cnVtZW50YXRpb25fY291bnQoIlJvd3MgUmVtb3ZlZCBieSBGaWx0ZXIiLCAxLAog CQkJCQkJCQkJCSAgIHBsYW5zdGF0ZSwgZXMpOwotCQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8o cGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwog CQkJYnJlYWs7CiAJCWNhc2UgVF9JbmRleE9ubHlTY2FuOgogCQkJc2hvd19zY2FuX3F1YWwoKChJ bmRleE9ubHlTY2FuICopIHBsYW4pLT5pbmRleHF1YWwsCkBAIC0xOTg0LDE1ICsxOTg0LDEyIEBA IEV4cGxhaW5Ob2RlKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBMaXN0ICphbmNlc3RvcnMsCiAJCQlp ZiAocGxhbi0+cXVhbCkKIAkJCQlzaG93X2luc3RydW1lbnRhdGlvbl9jb3VudCgiUm93cyBSZW1v dmVkIGJ5IEZpbHRlciIsIDEsCiAJCQkJCQkJCQkJICAgcGxhbnN0YXRlLCBlcyk7Ci0JCQlpZiAo ZXMtPmFuYWx5emUpCi0JCQkJRXhwbGFpblByb3BlcnR5RmxvYXQoIkhlYXAgRmV0Y2hlcyIsIE5V TEwsCi0JCQkJCQkJCQkgcGxhbnN0YXRlLT5pbnN0cnVtZW50LT5udHVwbGVzMiwgMCwgZXMpOwot CQkJc2hvd19pbmRleHNlYXJjaGVzX2luZm8ocGxhbnN0YXRlLCBlcyk7CisJCQlzaG93X2luZGV4 c2Nhbl9pbmZvKHBsYW5zdGF0ZSwgZXMpOwogCQkJYnJlYWs7CiAJCWNhc2UgVF9CaXRtYXBJbmRl eFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEluZGV4U2NhbiAqKSBwbGFuKS0+aW5k ZXhxdWFsb3JpZywKIAkJCQkJCSAgICJJbmRleCBDb25kIiwgcGxhbnN0YXRlLCBhbmNlc3RvcnMs IGVzKTsKLQkJCXNob3dfaW5kZXhzZWFyY2hlc19pbmZvKHBsYW5zdGF0ZSwgZXMpOworCQkJc2hv d19pbmRleHNjYW5faW5mbyhwbGFuc3RhdGUsIGVzKTsKIAkJCWJyZWFrOwogCQljYXNlIFRfQml0 bWFwSGVhcFNjYW46CiAJCQlzaG93X3NjYW5fcXVhbCgoKEJpdG1hcEhlYXBTY2FuICopIHBsYW4p LT5iaXRtYXBxdWFsb3JpZywKQEAgLTM4NTYsMTUgKzM4NTMsMTYgQEAgc2hvd19oYXNoYWdnX2lu Zm8oQWdnU3RhdGUgKmFnZ3N0YXRlLCBFeHBsYWluU3RhdGUgKmVzKQogfQogCiAvKgotICogU2hv dyB0aGUgdG90YWwgbnVtYmVyIG9mIGluZGV4IHNlYXJjaGVzIGZvciBhCisgKiBTaG93IGluZGV4 IHNjYW4gcmVsYXRlZCBleGVjdXRvciBpbnN0cnVtZW50YXRpb24gZm9yIGEKICAqIEluZGV4U2Nh bi9JbmRleE9ubHlTY2FuL0JpdG1hcEluZGV4U2NhbiBub2RlCiAgKi8KIHN0YXRpYyB2b2lkCi1z aG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFpblN0YXRl ICplcykKK3Nob3dfaW5kZXhzY2FuX2luZm8oUGxhblN0YXRlICpwbGFuc3RhdGUsIEV4cGxhaW5T dGF0ZSAqZXMpCiB7CiAJUGxhbgkgICAqcGxhbiA9IHBsYW5zdGF0ZS0+cGxhbjsKIAlTaGFyZWRJ bmRleFNjYW5JbnN0cnVtZW50YXRpb24gKlNoYXJlZEluZm8gPSBOVUxMOwotCXVpbnQ2NAkJbnNl YXJjaGVzID0gMDsKKwl1aW50NjQJCW5zZWFyY2hlcyA9IDAsCisJCQkJbmhlYXBmZXRjaGVzID0g MDsKIAogCWlmICghZXMtPmFuYWx5emUpCiAJCXJldHVybjsKQEAgLTM4ODUsNiArMzg4Myw3IEBA IHNob3dfaW5kZXhzZWFyY2hlc19pbmZvKFBsYW5TdGF0ZSAqcGxhbnN0YXRlLCBFeHBsYWluU3Rh dGUgKmVzKQogCQkJCUluZGV4T25seVNjYW5TdGF0ZSAqaW5kZXhzdGF0ZSA9ICgoSW5kZXhPbmx5 U2NhblN0YXRlICopIHBsYW5zdGF0ZSk7CiAKIAkJCQluc2VhcmNoZXMgPSBpbmRleHN0YXRlLT5p b3NzX0luc3RydW1lbnQubnNlYXJjaGVzOworCQkJCW5oZWFwZmV0Y2hlcyA9IGluZGV4c3RhdGUt Pmlvc3NfSW5zdHJ1bWVudC5uaGVhcGZldGNoZXM7CiAJCQkJU2hhcmVkSW5mbyA9IGluZGV4c3Rh dGUtPmlvc3NfU2hhcmVkSW5mbzsKIAkJCQlicmVhazsKIAkJCX0KQEAgLTM5MDgsOSArMzkwNywx MyBAQCBzaG93X2luZGV4c2VhcmNoZXNfaW5mbyhQbGFuU3RhdGUgKnBsYW5zdGF0ZSwgRXhwbGFp blN0YXRlICplcykKIAkJCUluZGV4U2Nhbkluc3RydW1lbnRhdGlvbiAqd2luc3RydW1lbnQgPSAm U2hhcmVkSW5mby0+d2luc3RydW1lbnRbaV07CiAKIAkJCW5zZWFyY2hlcyArPSB3aW5zdHJ1bWVu dC0+bnNlYXJjaGVzOworCQkJbmhlYXBmZXRjaGVzICs9IHdpbnN0cnVtZW50LT5uaGVhcGZldGNo ZXM7CiAJCX0KIAl9CiAKKwlpZiAobm9kZVRhZyhwbGFuKSA9PSBUX0luZGV4T25seVNjYW4pCisJ CUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJIZWFwIEZldGNoZXMiLCBOVUxMLCBuaGVhcGZldGNo ZXMsIGVzKTsKKwogCUV4cGxhaW5Qcm9wZXJ0eVVJbnRlZ2VyKCJJbmRleCBTZWFyY2hlcyIsIE5V TEwsIG5zZWFyY2hlcywgZXMpOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9jb21tYW5k cy9pbmRleGNtZHMuYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL2luZGV4Y21kcy5jCmluZGV4IDA4 Yzg2Y2MxNi4uZmZjYTgzYThjIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRl eGNtZHMuYworKysgYi9zcmMvYmFja2VuZC9jb21tYW5kcy9pbmRleGNtZHMuYwpAQCAtODg0LDcg Kzg4NCw3IEBAIERlZmluZUluZGV4KFBhcnNlU3RhdGUgKnBzdGF0ZSwKIAkJCQkoZXJyY29kZShF UlJDT0RFX0ZFQVRVUkVfTk9UX1NVUFBPUlRFRCksCiAJCQkJIGVycm1zZygiYWNjZXNzIG1ldGhv ZCBcIiVzXCIgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aWNvbHVtbiBpbmRleGVzIiwKIAkJCQkJCWFj Y2Vzc01ldGhvZE5hbWUpKSk7Ci0JaWYgKGV4Y2x1c2lvbiAmJiBhbVJvdXRpbmUtPmFtZ2V0dHVw bGUgPT0gTlVMTCkKKwlpZiAoZXhjbHVzaW9uICYmIGFtUm91dGluZS0+YW1nZXR0dXBsZSA9PSBO VUxMICYmIGFtUm91dGluZS0+YW1nZXRiYXRjaCA9PSBOVUxMKQogCQllcmVwb3J0KEVSUk9SLAog CQkJCShlcnJjb2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkgZXJybXNn KCJhY2Nlc3MgbWV0aG9kIFwiJXNcIiBkb2VzIG5vdCBzdXBwb3J0IGV4Y2x1c2lvbiBjb25zdHJh aW50cyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjQW1pLmMKaW5kZXggOTBhNjhjMGQxLi4wZGZiMDEzMzcgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNBbWkuYworKysgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjQW1pLmMKQEAgLTQyOCw3ICs0MjgsNyBAQCBFeGVjU3VwcG9ydHNNYXJr UmVzdG9yZShQYXRoICpwYXRobm9kZSkKIAkJY2FzZSBUX0luZGV4T25seVNjYW46CiAKIAkJCS8q Ci0JCQkgKiBOb3QgYWxsIGluZGV4IHR5cGVzIHN1cHBvcnQgbWFyay9yZXN0b3JlLgorCQkJICog Tm90IGFsbCBpbmRleCB0eXBlcyBzdXBwb3J0IHJlc3RvcmluZyBhIG1hcmsKIAkJCSAqLwogCQkJ cmV0dXJuIGNhc3ROb2RlKEluZGV4UGF0aCwgcGF0aG5vZGUpLT5pbmRleGluZm8tPmFtY2FubWFy a3BvczsKIApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMg Yi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjSW5kZXhpbmcuYwppbmRleCA2YWUwZjk1OTUuLjMw NDFkNWM3MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMK KysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0luZGV4aW5nLmMKQEAgLTgxNiwxMCArODE2 LDEyIEBAIGNoZWNrX2V4Y2x1c2lvbl9vcl91bmlxdWVfY29uc3RyYWludChSZWxhdGlvbiBoZWFw LCBSZWxhdGlvbiBpbmRleCwKIHJldHJ5OgogCWNvbmZsaWN0ID0gZmFsc2U7CiAJZm91bmRfc2Vs ZiA9IGZhbHNlOwotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcCwgaW5kZXgsICZE aXJ0eVNuYXBzaG90LCBOVUxMLCBpbmRua2V5YXR0cywgMCk7CisJaW5kZXhfc2NhbiA9IGluZGV4 X2JlZ2luc2NhbihoZWFwLCBpbmRleCwgZmFsc2UsICZEaXJ0eVNuYXBzaG90LCBOVUxMLAorCQkJ CQkJCQkgaW5kbmtleWF0dHMsIDApOwogCWluZGV4X3Jlc2NhbihpbmRleF9zY2FuLCBzY2Fua2V5 cywgaW5kbmtleWF0dHMsIE5VTEwsIDApOwogCi0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChp bmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlvbiwgZXhpc3Rpbmdfc2xvdCkpCisJd2hpbGUg KHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBGb3J3YXJkU2NhbkRpcmVjdGlv biwKKwkJCQkJCQkJCWV4aXN0aW5nX3Nsb3QpKQogCXsKIAkJVHJhbnNhY3Rpb25JZCB4d2FpdDsK IAkJWExUV19PcGVyCXJlYXNvbl93YWl0OwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvZXhlY3V0 b3IvZXhlY1JlcGxpY2F0aW9uLmMgYi9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjUmVwbGljYXRp b24uYwppbmRleCAxNzNkMmZlNTQuLjlmZjUwMzA4YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv ZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhl Y1JlcGxpY2F0aW9uLmMKQEAgLTIwNCw3ICsyMDQsNyBAQCBSZWxhdGlvbkZpbmRSZXBsVHVwbGVC eUluZGV4KFJlbGF0aW9uIHJlbCwgT2lkIGlkeG9pZCwKIAlza2V5X2F0dG9mZiA9IGJ1aWxkX3Jl cGxpbmRleF9zY2FuX2tleShza2V5LCByZWwsIGlkeHJlbCwgc2VhcmNoc2xvdCk7CiAKIAkvKiBT dGFydCBhbiBpbmRleCBzY2FuLiAqLwotCXNjYW4gPSBpbmRleF9iZWdpbnNjYW4ocmVsLCBpZHhy ZWwsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CisJc2NhbiA9IGluZGV4X2JlZ2luc2Nh bihyZWwsIGlkeHJlbCwgZmFsc2UsICZzbmFwLCBOVUxMLCBza2V5X2F0dG9mZiwgMCk7CiAKIHJl dHJ5OgogCWZvdW5kID0gZmFsc2U7CkBAIC0yMTIsNyArMjEyLDcgQEAgcmV0cnk6CiAJaW5kZXhf cmVzY2FuKHNjYW4sIHNrZXksIHNrZXlfYXR0b2ZmLCBOVUxMLCAwKTsKIAogCS8qIFRyeSB0byBm aW5kIHRoZSB0dXBsZSAqLwotCXdoaWxlIChpbmRleF9nZXRuZXh0X3Nsb3Qoc2NhbiwgRm9yd2Fy ZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQorCXdoaWxlICh0YWJsZV9pbmRleF9nZXRuZXh0X3Ns b3Qoc2NhbiwgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIG91dHNsb3QpKQogCXsKIAkJLyoKIAkJICog QXZvaWQgZXhwZW5zaXZlIGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtl eSBvcgpAQCAtNjY1LDEyICs2NjUsMTIgQEAgUmVsYXRpb25GaW5kRGVsZXRlZFR1cGxlSW5mb0J5 SW5kZXgoUmVsYXRpb24gcmVsLCBPaWQgaWR4b2lkLAogCSAqIG5vdCB5ZXQgY29tbWl0dGVkIG9y IHRob3NlIGp1c3QgY29tbWl0dGVkIHByaW9yIHRvIHRoZSBzY2FuIGFyZQogCSAqIGV4Y2x1ZGVk IGluIHVwZGF0ZV9tb3N0X3JlY2VudF9kZWxldGlvbl9pbmZvKCkuCiAJICovCi0Jc2NhbiA9IGlu ZGV4X2JlZ2luc2NhbihyZWwsIGlkeHJlbCwgU25hcHNob3RBbnksIE5VTEwsIHNrZXlfYXR0b2Zm LCAwKTsKKwlzY2FuID0gaW5kZXhfYmVnaW5zY2FuKHJlbCwgaWR4cmVsLCBmYWxzZSwgU25hcHNo b3RBbnksIE5VTEwsIHNrZXlfYXR0b2ZmLCAwKTsKIAogCWluZGV4X3Jlc2NhbihzY2FuLCBza2V5 LCBza2V5X2F0dG9mZiwgTlVMTCwgMCk7CiAKIAkvKiBUcnkgdG8gZmluZCB0aGUgdHVwbGUgKi8K LQl3aGlsZSAoaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW4sIEZvcndhcmRTY2FuRGlyZWN0aW9uLCBz Y2Fuc2xvdCkpCisJd2hpbGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChzY2FuLCBGb3J3YXJk U2NhbkRpcmVjdGlvbiwgc2NhbnNsb3QpKQogCXsKIAkJLyoKIAkJICogQXZvaWQgZXhwZW5zaXZl IGVxdWFsaXR5IGNoZWNrIGlmIHRoZSBpbmRleCBpcyBwcmltYXJ5IGtleSBvcgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jIGIvc3JjL2JhY2tl bmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCmluZGV4IDA1OGE1OWVmNS4uMjU4MGEw MTM5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlQml0bWFwSW5kZXhzY2Fu LmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUJpdG1hcEluZGV4c2Nhbi5jCkBAIC0y MDIsNiArMjAyLDcgQEAgRXhlY0VuZEJpdG1hcEluZGV4U2NhbihCaXRtYXBJbmRleFNjYW5TdGF0 ZSAqbm9kZSkKIAkJICogd2hpY2ggd2lsbCBoYXZlIGEgbmV3IEJpdG1hcEluZGV4U2NhblN0YXRl IGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+bnNlYXJjaGVzICs9IG5v ZGUtPmJpc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCUFzc2VydChub2RlLT5iaXNzX0luc3Ry dW1lbnQubmhlYXBmZXRjaGVzID09IDApOwogCX0KIAogCS8qCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Iv bm9kZUluZGV4b25seXNjYW4uYwppbmRleCBjMmQwOTM3NDUuLmZmM2U4ZjMwMiAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uYworKysgYi9zcmMvYmFj a2VuZC9leGVjdXRvci9ub2RlSW5kZXhvbmx5c2Nhbi5jCkBAIC0zNCwxNCArMzQsMTIgQEAKICNp bmNsdWRlICJhY2Nlc3MvcmVsc2Nhbi5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCiAj aW5jbHVkZSAiYWNjZXNzL3R1cGRlc2MuaCIKLSNpbmNsdWRlICJhY2Nlc3MvdmlzaWJpbGl0eW1h cC5oIgogI2luY2x1ZGUgImNhdGFsb2cvcGdfdHlwZS5oIgogI2luY2x1ZGUgImV4ZWN1dG9yL2V4 ZWN1dG9yLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3Ivbm9kZUluZGV4b25seXNjYW4uaCIKICNpbmNs dWRlICJleGVjdXRvci9ub2RlSW5kZXhzY2FuLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAj aW5jbHVkZSAic3RvcmFnZS9idWZtZ3IuaCIKLSNpbmNsdWRlICJzdG9yYWdlL3ByZWRpY2F0ZS5o IgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgiCiAK QEAgLTY1LDcgKzYzLDYgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUp CiAJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb247CiAJSW5kZXhTY2FuRGVzYyBzY2FuZGVzYzsKIAlU dXBsZVRhYmxlU2xvdCAqc2xvdDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAKIAkvKgogCSAqIGV4dHJh Y3QgbmVjZXNzYXJ5IGluZm9ybWF0aW9uIGZyb20gaW5kZXggc2NhbiBub2RlCkBAIC05MCwxOCAr ODcsMTQgQEAgSW5kZXhPbmx5TmV4dChJbmRleE9ubHlTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIHBh cmFsbGVsLgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3Nf Y3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJ CQkJCQkJICAgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsIHRydWUsCiAJCQkJCQkJCSAgIGVzdGF0 ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJCQkJ CQkJCSAgIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSAgIG5vZGUtPmlvc3NfTnVt T3JkZXJCeUtleXMpOwogCiAJCW5vZGUtPmlvc3NfU2NhbkRlc2MgPSBzY2FuZGVzYzsKLQotCi0J CS8qIFNldCBpdCB1cCBmb3IgaW5kZXgtb25seSBzY2FuICovCi0JCW5vZGUtPmlvc3NfU2NhbkRl c2MtPnhzX3dhbnRfaXR1cCA9IHRydWU7Ci0JCW5vZGUtPmlvc3NfVk1CdWZmZXIgPSBJbnZhbGlk QnVmZmVyOworCQlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAog CQkvKgogCQkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBvciB0aGV5IGFyZSBy ZWFkeSwgZ28gYWhlYWQgYW5kCkBAIC0xMTgsNzggKzExMSwxMCBAQCBJbmRleE9ubHlOZXh0KElu ZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIE9LLCBub3cgdGhhdCB3ZSBoYXZlIHdo YXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICovCi0Jd2hpbGUgKCh0aWQgPSBp bmRleF9nZXRuZXh0X3RpZChzY2FuZGVzYywgZGlyZWN0aW9uKSkgIT0gTlVMTCkKKwl3aGlsZSAo dGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIG5vZGUtPmlvc3Nf VGFibGVTbG90KSkKIAl7Ci0JCWJvb2wJCXR1cGxlX2Zyb21faGVhcCA9IGZhbHNlOwotCiAJCUNI RUNLX0ZPUl9JTlRFUlJVUFRTKCk7CiAKLQkJLyoKLQkJICogV2UgY2FuIHNraXAgdGhlIGhlYXAg ZmV0Y2ggaWYgdGhlIFRJRCByZWZlcmVuY2VzIGEgaGVhcCBwYWdlIG9uCi0JCSAqIHdoaWNoIGFs bCB0dXBsZXMgYXJlIGtub3duIHZpc2libGUgdG8gZXZlcnlib2R5LiAgSW4gYW55IGNhc2UsCi0J CSAqIHdlJ2xsIHVzZSB0aGUgaW5kZXggdHVwbGUgbm90IHRoZSBoZWFwIHR1cGxlIGFzIHRoZSBk YXRhIHNvdXJjZS4KLQkJICoKLQkJICogTm90ZSBvbiBNZW1vcnkgT3JkZXJpbmcgRWZmZWN0czog dmlzaWJpbGl0eW1hcF9nZXRfc3RhdHVzIGRvZXMgbm90Ci0JCSAqIGxvY2sgdGhlIHZpc2liaWxp dHkgbWFwIGJ1ZmZlciwgYW5kIHRoZXJlZm9yZSB0aGUgcmVzdWx0IHdlIHJlYWQKLQkJICogaGVy ZSBjb3VsZCBiZSBzbGlnaHRseSBzdGFsZS4gIEhvd2V2ZXIsIGl0IGNhbid0IGJlIHN0YWxlIGVu b3VnaCB0bwotCQkgKiBtYXR0ZXIuCi0JCSAqCi0JCSAqIFdlIG5lZWQgdG8gZGV0ZWN0IGNsZWFy aW5nIGEgVk0gYml0IGR1ZSB0byBhbiBpbnNlcnQgcmlnaHQgYXdheSwKLQkJICogYmVjYXVzZSB0 aGUgdHVwbGUgaXMgcHJlc2VudCBpbiB0aGUgaW5kZXggcGFnZSBidXQgbm90IHZpc2libGUuIFRo ZQotCQkgKiByZWFkaW5nIG9mIHRoZSBUSUQgYnkgdGhpcyBzY2FuICh1c2luZyBhIHNoYXJlZCBs b2NrIG9uIHRoZSBpbmRleAotCQkgKiBidWZmZXIpIGlzIHNlcmlhbGl6ZWQgd2l0aCB0aGUgaW5z ZXJ0IG9mIHRoZSBUSUQgaW50byB0aGUgaW5kZXgKLQkJICogKHVzaW5nIGFuIGV4Y2x1c2l2ZSBs b2NrIG9uIHRoZSBpbmRleCBidWZmZXIpLiBCZWNhdXNlIHRoZSBWTSBiaXQKLQkJICogaXMgY2xl YXJlZCBiZWZvcmUgdXBkYXRpbmcgdGhlIGluZGV4LCBhbmQgbG9ja2luZy91bmxvY2tpbmcgb2Yg dGhlCi0JCSAqIGluZGV4IHBhZ2UgYWN0cyBhcyBhIGZ1bGwgbWVtb3J5IGJhcnJpZXIsIHdlIGFy ZSBzdXJlIHRvIHNlZSB0aGUKLQkJICogY2xlYXJlZCBiaXQgaWYgd2Ugc2VlIGEgcmVjZW50bHkt aW5zZXJ0ZWQgVElELgotCQkgKgotCQkgKiBEZWxldGVzIGRvIG5vdCB1cGRhdGUgdGhlIGluZGV4 IHBhZ2UgKG9ubHkgVkFDVVVNIHdpbGwgY2xlYXIgb3V0Ci0JCSAqIHRoZSBUSUQpLCBzbyB0aGUg Y2xlYXJpbmcgb2YgdGhlIFZNIGJpdCBieSBhIGRlbGV0ZSBpcyBub3QKLQkJICogc2VyaWFsaXpl ZCB3aXRoIHRoaXMgdGVzdCBiZWxvdywgYW5kIHdlIG1heSBzZWUgYSB2YWx1ZSB0aGF0IGlzCi0J CSAqIHNpZ25pZmljYW50bHkgc3RhbGUuIEhvd2V2ZXIsIHdlIGRvbid0IGNhcmUgYWJvdXQgdGhl IGRlbGV0ZSByaWdodAotCQkgKiBhd2F5LCBiZWNhdXNlIHRoZSB0dXBsZSBpcyBzdGlsbCB2aXNp YmxlIHVudGlsIHRoZSBkZWxldGluZwotCQkgKiB0cmFuc2FjdGlvbiBjb21taXRzIG9yIHRoZSBz dGF0ZW1lbnQgZW5kcyAoaWYgaXQncyBvdXIKLQkJICogdHJhbnNhY3Rpb24pLiBJbiBlaXRoZXIg Y2FzZSwgdGhlIGxvY2sgb24gdGhlIFZNIGJ1ZmZlciB3aWxsIGhhdmUKLQkJICogYmVlbiByZWxl YXNlZCAoYWN0aW5nIGFzIGEgd3JpdGUgYmFycmllcikgYWZ0ZXIgY2xlYXJpbmcgdGhlIGJpdC4K LQkJICogQW5kIGZvciB1cyB0byBoYXZlIGEgc25hcHNob3QgdGhhdCBpbmNsdWRlcyB0aGUgZGVs ZXRpbmcKLQkJICogdHJhbnNhY3Rpb24gKG1ha2luZyB0aGUgdHVwbGUgaW52aXNpYmxlKSwgd2Ug bXVzdCBoYXZlIGFjcXVpcmVkCi0JCSAqIFByb2NBcnJheUxvY2sgYWZ0ZXIgdGhhdCB0aW1lLCBh Y3RpbmcgYXMgYSByZWFkIGJhcnJpZXIuCi0JCSAqCi0JCSAqIEl0J3Mgd29ydGggZ29pbmcgdGhy b3VnaCB0aGlzIGNvbXBsZXhpdHkgdG8gYXZvaWQgbmVlZGluZyB0byBsb2NrCi0JCSAqIHRoZSBW TSBidWZmZXIsIHdoaWNoIGNvdWxkIGNhdXNlIHNpZ25pZmljYW50IGNvbnRlbnRpb24uCi0JCSAq LwotCQlpZiAoIVZNX0FMTF9WSVNJQkxFKHNjYW5kZXNjLT5oZWFwUmVsYXRpb24sCi0JCQkJCQkJ SXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAotCQkJCQkJCSZub2RlLT5pb3NzX1ZNQnVm ZmVyKSkKLQkJewotCQkJLyoKLQkJCSAqIFJhdHMsIHdlIGhhdmUgdG8gdmlzaXQgdGhlIGhlYXAg dG8gY2hlY2sgdmlzaWJpbGl0eS4KLQkJCSAqLwotCQkJSW5zdHJDb3VudFR1cGxlczIobm9kZSwg MSk7Ci0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoc2NhbmRlc2MsIG5vZGUtPmlvc3NfVGFibGVT bG90KSkKLQkJCQljb250aW51ZTsJCS8qIG5vIHZpc2libGUgdHVwbGUsIHRyeSBuZXh0IGluZGV4 IGVudHJ5ICovCi0KLQkJCUV4ZWNDbGVhclR1cGxlKG5vZGUtPmlvc3NfVGFibGVTbG90KTsKLQot CQkJLyoKLQkJCSAqIE9ubHkgTVZDQyBzbmFwc2hvdHMgYXJlIHN1cHBvcnRlZCBoZXJlLCBzbyB0 aGVyZSBzaG91bGQgYmUgbm8KLQkJCSAqIG5lZWQgdG8ga2VlcCBmb2xsb3dpbmcgdGhlIEhPVCBj aGFpbiBvbmNlIGEgdmlzaWJsZSBlbnRyeSBoYXMKLQkJCSAqIGJlZW4gZm91bmQuICBJZiB3ZSBk aWQgd2FudCB0byBhbGxvdyB0aGF0LCB3ZSdkIG5lZWQgdG8ga2VlcAotCQkJICogbW9yZSBzdGF0 ZSB0byByZW1lbWJlciBub3QgdG8gY2FsbCBpbmRleF9nZXRuZXh0X3RpZCBuZXh0IHRpbWUuCi0J CQkgKi8KLQkJCWlmIChzY2FuZGVzYy0+eHNfaGVhcF9jb250aW51ZSkKLQkJCQllbG9nKEVSUk9S LCAibm9uLU1WQ0Mgc25hcHNob3RzIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2Nh bnMiKTsKLQotCQkJLyoKLQkJCSAqIE5vdGU6IGF0IHRoaXMgcG9pbnQgd2UgYXJlIGhvbGRpbmcg YSBwaW4gb24gdGhlIGhlYXAgcGFnZSwgYXMKLQkJCSAqIHJlY29yZGVkIGluIHNjYW5kZXNjLT54 c19jYnVmLiAgV2UgY291bGQgcmVsZWFzZSB0aGF0IHBpbiBub3csCi0JCQkgKiBidXQgaXQncyBu b3QgY2xlYXIgd2hldGhlciBpdCdzIGEgd2luIHRvIGRvIHNvLiAgVGhlIG5leHQgaW5kZXgKLQkJ CSAqIGVudHJ5IG1pZ2h0IHJlcXVpcmUgYSB2aXNpdCB0byB0aGUgc2FtZSBoZWFwIHBhZ2UuCi0J CQkgKi8KLQotCQkJdHVwbGVfZnJvbV9oZWFwID0gdHJ1ZTsKLQkJfQotCiAJCS8qCiAJCSAqIEZp bGwgdGhlIHNjYW4gdHVwbGUgc2xvdCB3aXRoIGRhdGEgZnJvbSB0aGUgaW5kZXguICBUaGlzIG1p Z2h0IGJlCiAJCSAqIHByb3ZpZGVkIGluIGVpdGhlciBIZWFwVHVwbGUgb3IgSW5kZXhUdXBsZSBm b3JtYXQuICBDb25jZWl2YWJseSBhbgpAQCAtMjM4LDE2ICsxNjMsNiBAQCBJbmRleE9ubHlOZXh0 KEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSkKIAkJCWVyZXBvcnQoRVJST1IsCiAJCQkJCShlcnJj b2RlKEVSUkNPREVfRkVBVFVSRV9OT1RfU1VQUE9SVEVEKSwKIAkJCQkJIGVycm1zZygibG9zc3kg ZGlzdGFuY2UgZnVuY3Rpb25zIGFyZSBub3Qgc3VwcG9ydGVkIGluIGluZGV4LW9ubHkgc2NhbnMi KSkpOwotCi0JCS8qCi0JCSAqIElmIHdlIGRpZG4ndCBhY2Nlc3MgdGhlIGhlYXAsIHRoZW4gd2Un bGwgbmVlZCB0byB0YWtlIGEgcHJlZGljYXRlCi0JCSAqIGxvY2sgZXhwbGljaXRseSwgYXMgaWYg d2UgaGFkLiAgRm9yIG5vdyB3ZSBkbyB0aGF0IGF0IHBhZ2UgbGV2ZWwuCi0JCSAqLwotCQlpZiAo IXR1cGxlX2Zyb21faGVhcCkKLQkJCVByZWRpY2F0ZUxvY2tQYWdlKHNjYW5kZXNjLT5oZWFwUmVs YXRpb24sCi0JCQkJCQkJICBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCksCi0JCQkJCQkJ ICBlc3RhdGUtPmVzX3NuYXBzaG90KTsKLQogCQlyZXR1cm4gc2xvdDsKIAl9CiAKQEAgLTQwNywx MyArMzIyLDYgQEAgRXhlY0VuZEluZGV4T25seVNjYW4oSW5kZXhPbmx5U2NhblN0YXRlICpub2Rl KQogCWluZGV4UmVsYXRpb25EZXNjID0gbm9kZS0+aW9zc19SZWxhdGlvbkRlc2M7CiAJaW5kZXhT Y2FuRGVzYyA9IG5vZGUtPmlvc3NfU2NhbkRlc2M7CiAKLQkvKiBSZWxlYXNlIFZNIGJ1ZmZlciBw aW4sIGlmIGFueS4gKi8KLQlpZiAobm9kZS0+aW9zc19WTUJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVy KQotCXsKLQkJUmVsZWFzZUJ1ZmZlcihub2RlLT5pb3NzX1ZNQnVmZmVyKTsKLQkJbm9kZS0+aW9z c19WTUJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JfQotCiAJLyoKIAkgKiBXaGVuIGVuZGluZyBh IHBhcmFsbGVsIHdvcmtlciwgY29weSB0aGUgc3RhdGlzdGljcyBnYXRoZXJlZCBieSB0aGUKIAkg KiB3b3JrZXIgYmFjayBpbnRvIHNoYXJlZCBtZW1vcnkgc28gdGhhdCBpdCBjYW4gYmUgcGlja2Vk IHVwIGJ5IHRoZSBtYWluCkBAIC00MzMsNiArMzQxLDcgQEAgRXhlY0VuZEluZGV4T25seVNjYW4o SW5kZXhPbmx5U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcgSW5k ZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVudC0+ bnNlYXJjaGVzICs9IG5vZGUtPmlvc3NfSW5zdHJ1bWVudC5uc2VhcmNoZXM7CisJCXdpbnN0cnVt ZW50LT5uaGVhcGZldGNoZXMgKz0gbm9kZS0+aW9zc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlczsK IAl9CiAKIAkvKgpAQCAtNzg0LDEzICs2OTMsMTIgQEAgRXhlY0luZGV4T25seVNjYW5Jbml0aWFs aXplRFNNKEluZGV4T25seVNjYW5TdGF0ZSAqbm9kZSwKIAogCW5vZGUtPmlvc3NfU2NhbkRlc2Mg PQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9u LAotCQkJCQkJCQkgbm9kZS0+aW9zc19SZWxhdGlvbkRlc2MsCisJCQkJCQkJCSBub2RlLT5pb3Nz X1JlbGF0aW9uRGVzYywgdHJ1ZSwKIAkJCQkJCQkJICZub2RlLT5pb3NzX0luc3RydW1lbnQsCiAJ CQkJCQkJCSBub2RlLT5pb3NzX051bVNjYW5LZXlzLAogCQkJCQkJCQkgbm9kZS0+aW9zc19OdW1P cmRlckJ5S2V5cywKIAkJCQkJCQkJIHBpc2Nhbik7Ci0Jbm9kZS0+aW9zc19TY2FuRGVzYy0+eHNf d2FudF9pdHVwID0gdHJ1ZTsKLQlub2RlLT5pb3NzX1ZNQnVmZmVyID0gSW52YWxpZEJ1ZmZlcjsK KwlBc3NlcnQobm9kZS0+aW9zc19TY2FuRGVzYy0+eHNfd2FudF9pdHVwKTsKIAogCS8qCiAJICog SWYgbm8gcnVuLXRpbWUga2V5cyB0byBjYWxjdWxhdGUgb3IgdGhleSBhcmUgcmVhZHksIGdvIGFo ZWFkIGFuZCBwYXNzCkBAIC04NTAsMTIgKzc1OCwxMiBAQCBFeGVjSW5kZXhPbmx5U2NhbkluaXRp YWxpemVXb3JrZXIoSW5kZXhPbmx5U2NhblN0YXRlICpub2RlLAogCiAJbm9kZS0+aW9zc19TY2Fu RGVzYyA9CiAJCWluZGV4X2JlZ2luc2Nhbl9wYXJhbGxlbChub2RlLT5zcy5zc19jdXJyZW50UmVs YXRpb24sCi0JCQkJCQkJCSBub2RlLT5pb3NzX1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUt Pmlvc3NfUmVsYXRpb25EZXNjLCB0cnVlLAogCQkJCQkJCQkgJm5vZGUtPmlvc3NfSW5zdHJ1bWVu dCwKIAkJCQkJCQkJIG5vZGUtPmlvc3NfTnVtU2NhbktleXMsCiAJCQkJCQkJCSBub2RlLT5pb3Nz X051bU9yZGVyQnlLZXlzLAogCQkJCQkJCQkgcGlzY2FuKTsKLQlub2RlLT5pb3NzX1NjYW5EZXNj LT54c193YW50X2l0dXAgPSB0cnVlOworCUFzc2VydChub2RlLT5pb3NzX1NjYW5EZXNjLT54c193 YW50X2l0dXApOwogCiAJLyoKIAkgKiBJZiBubyBydW4tdGltZSBrZXlzIHRvIGNhbGN1bGF0ZSBv ciB0aGV5IGFyZSByZWFkeSwgZ28gYWhlYWQgYW5kIHBhc3MKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL2V4ZWN1dG9yL25vZGVJbmRleHNjYW4uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL25vZGVJ bmRleHNjYW4uYwppbmRleCA4NDgyM2YwYjYuLmMzNGExM2E4NyAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvZXhlY3V0b3Ivbm9kZUluZGV4c2Nhbi5jCisrKyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L25vZGVJbmRleHNjYW4uYwpAQCAtMTA3LDcgKzEwNyw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5T dGF0ZSAqbm9kZSkKIAkJICogc2VyaWFsbHkgZXhlY3V0aW5nIGFuIGluZGV4IHNjYW4gdGhhdCB3 YXMgcGxhbm5lZCB0byBiZSBwYXJhbGxlbC4KIAkJICovCiAJCXNjYW5kZXNjID0gaW5kZXhfYmVn aW5zY2FuKG5vZGUtPnNzLnNzX2N1cnJlbnRSZWxhdGlvbiwKLQkJCQkJCQkJICAgbm9kZS0+aXNz X1JlbGF0aW9uRGVzYywKKwkJCQkJCQkJICAgbm9kZS0+aXNzX1JlbGF0aW9uRGVzYywgZmFsc2Us CiAJCQkJCQkJCSAgIGVzdGF0ZS0+ZXNfc25hcHNob3QsCiAJCQkJCQkJCSAgICZub2RlLT5pc3Nf SW5zdHJ1bWVudCwKIAkJCQkJCQkJICAgbm9kZS0+aXNzX051bVNjYW5LZXlzLApAQCAtMTI4LDcg KzEyOCw3IEBAIEluZGV4TmV4dChJbmRleFNjYW5TdGF0ZSAqbm9kZSkKIAkvKgogCSAqIG9rLCBu b3cgdGhhdCB3ZSBoYXZlIHdoYXQgd2UgbmVlZCwgZmV0Y2ggdGhlIG5leHQgdHVwbGUuCiAJICov Ci0Jd2hpbGUgKGluZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgZGlyZWN0aW9uLCBzbG90KSkK Kwl3aGlsZSAodGFibGVfaW5kZXhfZ2V0bmV4dF9zbG90KHNjYW5kZXNjLCBkaXJlY3Rpb24sIHNs b3QpKQogCXsKIAkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKIApAQCAtMjAzLDcgKzIwMyw3IEBA IEluZGV4TmV4dFdpdGhSZW9yZGVyKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiBzZXJpYWxs eSBleGVjdXRpbmcgYW4gaW5kZXggc2NhbiB0aGF0IHdhcyBwbGFubmVkIHRvIGJlIHBhcmFsbGVs LgogCQkgKi8KIAkJc2NhbmRlc2MgPSBpbmRleF9iZWdpbnNjYW4obm9kZS0+c3Muc3NfY3VycmVu dFJlbGF0aW9uLAotCQkJCQkJCQkgICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLAorCQkJCQkJCQkg ICBub2RlLT5pc3NfUmVsYXRpb25EZXNjLCBmYWxzZSwKIAkJCQkJCQkJICAgZXN0YXRlLT5lc19z bmFwc2hvdCwKIAkJCQkJCQkJICAgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgICBu b2RlLT5pc3NfTnVtU2NhbktleXMsCkBAIC0yNjAsNyArMjYwLDcgQEAgSW5kZXhOZXh0V2l0aFJl b3JkZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUpCiAJCSAqIEZldGNoIG5leHQgdHVwbGUgZnJvbSB0 aGUgaW5kZXguCiAJCSAqLwogbmV4dF9pbmRleHR1cGxlOgotCQlpZiAoIWluZGV4X2dldG5leHRf c2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3QpKQorCQlpZiAoIXRhYmxl X2luZGV4X2dldG5leHRfc2xvdChzY2FuZGVzYywgRm9yd2FyZFNjYW5EaXJlY3Rpb24sIHNsb3Qp KQogCQl7CiAJCQkvKgogCQkJICogTm8gbW9yZSB0dXBsZXMgZnJvbSB0aGUgaW5kZXguICBCdXQg d2Ugc3RpbGwgbmVlZCB0byBkcmFpbiBhbnkKQEAgLTgxMiw2ICs4MTIsNyBAQCBFeGVjRW5kSW5k ZXhTY2FuKEluZGV4U2NhblN0YXRlICpub2RlKQogCQkgKiB3aGljaCB3aWxsIGhhdmUgYSBuZXcg SW5kZXhPbmx5U2NhblN0YXRlIGFuZCB6ZXJvZWQgc3RhdHMuCiAJCSAqLwogCQl3aW5zdHJ1bWVu dC0+bnNlYXJjaGVzICs9IG5vZGUtPmlzc19JbnN0cnVtZW50Lm5zZWFyY2hlczsKKwkJQXNzZXJ0 KG5vZGUtPmlzc19JbnN0cnVtZW50Lm5oZWFwZmV0Y2hlcyA9PSAwKTsKIAl9CiAKIAkvKgpAQCAt MTcxOSw3ICsxNzIwLDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVEU00oSW5kZXhTY2FuU3Rh dGUgKm5vZGUsCiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFy YWxsZWwobm9kZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1Jl bGF0aW9uRGVzYywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJ CQkJCQkgJm5vZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5L ZXlzLAogCQkJCQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApAQCAtMTc4Myw3ICsxNzg0 LDcgQEAgRXhlY0luZGV4U2NhbkluaXRpYWxpemVXb3JrZXIoSW5kZXhTY2FuU3RhdGUgKm5vZGUs CiAKIAlub2RlLT5pc3NfU2NhbkRlc2MgPQogCQlpbmRleF9iZWdpbnNjYW5fcGFyYWxsZWwobm9k ZS0+c3Muc3NfY3VycmVudFJlbGF0aW9uLAotCQkJCQkJCQkgbm9kZS0+aXNzX1JlbGF0aW9uRGVz YywKKwkJCQkJCQkJIG5vZGUtPmlzc19SZWxhdGlvbkRlc2MsIGZhbHNlLAogCQkJCQkJCQkgJm5v ZGUtPmlzc19JbnN0cnVtZW50LAogCQkJCQkJCQkgbm9kZS0+aXNzX051bVNjYW5LZXlzLAogCQkJ CQkJCQkgbm9kZS0+aXNzX051bU9yZGVyQnlLZXlzLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BhdGgvaW5keHBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2lu ZHhwYXRoLmMKaW5kZXggNTFiOWQ2Njc3Li4wMzU5OGI1MGQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2luZHhwYXRoLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvaW5keHBhdGguYwpAQCAtNDUsNyArNDUsNyBAQAogLyogV2hldGhlciB3ZSBhcmUgbG9v a2luZyBmb3IgcGxhaW4gaW5kZXhzY2FuLCBiaXRtYXAgc2Nhbiwgb3IgZWl0aGVyICovCiB0eXBl ZGVmIGVudW0KIHsKLQlTVF9JTkRFWFNDQU4sCQkJCS8qIG11c3Qgc3VwcG9ydCBhbWdldHR1cGxl ICovCisJU1RfSU5ERVhTQ0FOLAkJCQkvKiBtdXN0IHN1cHBvcnQgYW1nZXR0dXBsZSBvciBhbWdl dGJhdGNoICovCiAJU1RfQklUTUFQU0NBTiwJCQkJLyogbXVzdCBzdXBwb3J0IGFtZ2V0Yml0bWFw ICovCiAJU1RfQU5ZU0NBTiwJCQkJCS8qIGVpdGhlciBpcyBva2F5ICovCiB9IFNjYW5UeXBlQ29u dHJvbDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRleCBhOTBlMWM5ZWUuLjM5 YTVlYTI5OSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMzEzLDExICsz MTMsMTEgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlv bk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkJCQlpbmZvLT5hbXNlYXJjaGFycmF5ID0gYW1y b3V0aW5lLT5hbXNlYXJjaGFycmF5OwogCQkJCWluZm8tPmFtc2VhcmNobnVsbHMgPSBhbXJvdXRp bmUtPmFtc2VhcmNobnVsbHM7CiAJCQkJaW5mby0+YW1jYW5wYXJhbGxlbCA9IGFtcm91dGluZS0+ YW1jYW5wYXJhbGxlbDsKLQkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+YW1n ZXR0dXBsZSAhPSBOVUxMKTsKKwkJCQlpbmZvLT5hbWhhc2dldHR1cGxlID0gKGFtcm91dGluZS0+ YW1nZXR0dXBsZSAhPSBOVUxMIHx8CisJCQkJCQkJCQkgICBhbXJvdXRpbmUtPmFtZ2V0YmF0Y2gg IT0gTlVMTCk7CiAJCQkJaW5mby0+YW1oYXNnZXRiaXRtYXAgPSBhbXJvdXRpbmUtPmFtZ2V0Yml0 bWFwICE9IE5VTEwgJiYKIAkJCQkJcmVsYXRpb24tPnJkX3RhYmxlYW0tPnNjYW5fYml0bWFwX25l eHRfdHVwbGUgIT0gTlVMTDsKLQkJCQlpbmZvLT5hbWNhbm1hcmtwb3MgPSAoYW1yb3V0aW5lLT5h bW1hcmtwb3MgIT0gTlVMTCAmJgotCQkJCQkJCQkJICBhbXJvdXRpbmUtPmFtcmVzdHJwb3MgIT0g TlVMTCk7CisJCQkJaW5mby0+YW1jYW5tYXJrcG9zID0gYW1yb3V0aW5lLT5hbXBvc3Jlc2V0ICE9 IE5VTEw7CiAJCQkJaW5mby0+YW1jb3N0ZXN0aW1hdGUgPSBhbXJvdXRpbmUtPmFtY29zdGVzdGlt YXRlOwogCQkJCUFzc2VydChpbmZvLT5hbWNvc3Rlc3RpbWF0ZSAhPSBOVUxMKTsKIApkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jIGIvc3JjL2Jh Y2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCmluZGV4IDJkZjkxMDM3OC4uMTBm OTY4NTVkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9yZXBsaWNhdGlvbi9sb2dpY2FsL3JlbGF0 aW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvcmVwbGljYXRpb24vbG9naWNhbC9yZWxhdGlvbi5jCkBA IC04ODksNyArODg5LDggQEAgSXNJbmRleFVzYWJsZUZvclJlcGxpY2FJZGVudGl0eUZ1bGwoUmVs YXRpb24gaWR4cmVsLCBBdHRyTWFwICphdHRybWFwKQogCSAqIFRoZSBnaXZlbiBpbmRleCBhY2Nl c3MgbWV0aG9kIG11c3QgaW1wbGVtZW50ICJhbWdldHR1cGxlIiwgd2hpY2ggd2lsbAogCSAqIGJl IHVzZWQgbGF0ZXIgdG8gZmV0Y2ggdGhlIHR1cGxlcy4gIFNlZSBSZWxhdGlvbkZpbmRSZXBsVHVw bGVCeUluZGV4KCkuCiAJICovCi0JaWYgKEdldEluZGV4QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+ cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxlID09IE5VTEwpCisJaWYgKEdldEluZGV4 QW1Sb3V0aW5lQnlBbUlkKGlkeHJlbC0+cmRfcmVsLT5yZWxhbSwgZmFsc2UpLT5hbWdldHR1cGxl ID09IE5VTEwgJiYKKwkJR2V0SW5kZXhBbVJvdXRpbmVCeUFtSWQoaWR4cmVsLT5yZF9yZWwtPnJl bGFtLCBmYWxzZSktPmFtZ2V0YmF0Y2ggPT0gTlVMTCkKIAkJcmV0dXJuIGZhbHNlOwogCiAJcmV0 dXJuIHRydWU7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jIGIv c3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYwppbmRleCBjODFmYjYxYTAuLmRkZmQxYjU1 YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2FtdXRpbHMuYworKysgYi9zcmMv YmFja2VuZC91dGlscy9hZHQvYW11dGlscy5jCkBAIC0zNjMsMTAgKzM2MywxMSBAQCBpbmRleGFt X3Byb3BlcnR5KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJCVBHX1JFVFVSTl9CT09MKHJv dXRpbmUtPmFtY2x1c3RlcmFibGUpOwogCiAJCQljYXNlIEFNUFJPUF9JTkRFWF9TQ0FOOgotCQkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgPyB0cnVlIDogZmFsc2UpOworCQkJ CVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJCSAg IHJvdXRpbmUtPmFtZ2V0YmF0Y2ggIT0gTlVMTCk7CiAKIAkJCWNhc2UgQU1QUk9QX0JJVE1BUF9T Q0FOOgotCQkJCVBHX1JFVFVSTl9CT09MKHJvdXRpbmUtPmFtZ2V0Yml0bWFwID8gdHJ1ZSA6IGZh bHNlKTsKKwkJCQlQR19SRVRVUk5fQk9PTChyb3V0aW5lLT5hbWdldGJpdG1hcCAhPSBOVUxMKTsK IAogCQkJY2FzZSBBTVBST1BfQkFDS1dBUkRfU0NBTjoKIAkJCQlQR19SRVRVUk5fQk9PTChyb3V0 aW5lLT5hbWNhbmJhY2t3YXJkKTsKQEAgLTM5Miw3ICszOTMsOCBAQCBpbmRleGFtX3Byb3BlcnR5 KEZ1bmN0aW9uQ2FsbEluZm8gZmNpbmZvLAogCQkJUEdfUkVUVVJOX0JPT0wocm91dGluZS0+YW1j YW5tdWx0aWNvbCk7CiAKIAkJY2FzZSBBTVBST1BfQ0FOX0VYQ0xVREU6Ci0JCQlQR19SRVRVUk5f Qk9PTChyb3V0aW5lLT5hbWdldHR1cGxlID8gdHJ1ZSA6IGZhbHNlKTsKKwkJCVBHX1JFVFVSTl9C T09MKHJvdXRpbmUtPmFtZ2V0dHVwbGUgIT0gTlVMTCB8fAorCQkJCQkJICAgcm91dGluZS0+YW1n ZXRiYXRjaCAhPSBOVUxMKTsKIAogCQljYXNlIEFNUFJPUF9DQU5fSU5DTFVERToKIAkJCVBHX1JF VFVSTl9CT09MKHJvdXRpbmUtPmFtY2FuaW5jbHVkZSk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvc2VsZnVuY3MuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9zZWxmdW5jcy5j CmluZGV4IDI5ZmVjNjU1NS4uYTcyMTM2NTRhIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGls cy9hZHQvc2VsZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvc2VsZnVuY3MuYwpA QCAtMTAyLDcgKzEwMiw2IEBACiAjaW5jbHVkZSAiYWNjZXNzL2dpbi5oIgogI2luY2x1ZGUgImFj Y2Vzcy90YWJsZS5oIgogI2luY2x1ZGUgImFjY2Vzcy90YWJsZWFtLmgiCi0jaW5jbHVkZSAiYWNj ZXNzL3Zpc2liaWxpdHltYXAuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgog I2luY2x1ZGUgImNhdGFsb2cvcGdfb3BlcmF0b3IuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3N0 YXRpc3RpYy5oIgpAQCAtNzEyNCwxMyArNzEyMywxMCBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxlX2Vu ZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJYm9vbAkJaGF2ZV9kYXRhID0gZmFsc2U7CiAJU25h cHNob3REYXRhIFNuYXBzaG90Tm9uVmFjdXVtYWJsZTsKIAlJbmRleFNjYW5EZXNjIGluZGV4X3Nj YW47Ci0JQnVmZmVyCQl2bWJ1ZmZlciA9IEludmFsaWRCdWZmZXI7Ci0JQmxvY2tOdW1iZXIgbGFz dF9oZWFwX2Jsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwotCWludAkJCW5fdmlzaXRlZF9oZWFw X3BhZ2VzID0gMDsKLQlJdGVtUG9pbnRlciB0aWQ7CiAJRGF0dW0JCXZhbHVlc1tJTkRFWF9NQVhf S0VZU107CiAJYm9vbAkJaXNudWxsW0lOREVYX01BWF9LRVlTXTsKIAlNZW1vcnlDb250ZXh0IG9s ZGNvbnRleHQ7CisJSW5kZXhTY2FuSW5zdHJ1bWVudGF0aW9uIGluc3RydW1lbnQ7CiAKIAkvKgog CSAqIFdlIHVzZSB0aGUgaW5kZXgtb25seS1zY2FuIG1hY2hpbmVyeSBmb3IgdGhpcy4gIFdpdGgg bW9zdGx5LXN0YXRpYwpAQCAtNzE3OSw1NiArNzE3NSwzMiBAQCBnZXRfYWN0dWFsX3ZhcmlhYmxl X2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJSW5pdE5vblZhY3V1bWFibGVTbmFwc2hvdChT bmFwc2hvdE5vblZhY3V1bWFibGUsCiAJCQkJCQkJICBHbG9iYWxWaXNUZXN0Rm9yKGhlYXBSZWwp KTsKIAotCWluZGV4X3NjYW4gPSBpbmRleF9iZWdpbnNjYW4oaGVhcFJlbCwgaW5kZXhSZWwsCi0J CQkJCQkJCSAmU25hcHNob3ROb25WYWN1dW1hYmxlLCBOVUxMLAorCS8qCisJICogU2V0IGl0IHVw IGZvciBpbnN0cnVtZW50ZWQgaW5kZXgtb25seSBzY2FuLiAgV2UgbmVlZCB0aGUKKwkgKiBpbnN0 cnVtZW50YXRpb24gdG8gbW9uaXRvciB0aGUgbnVtYmVyIG9mIGhlYXAgZmV0Y2hlcy4KKwkgKi8K KwltZW1zZXQoJmluc3RydW1lbnQsIDAsIHNpemVvZihpbnN0cnVtZW50KSk7CisJaW5kZXhfc2Nh biA9IGluZGV4X2JlZ2luc2NhbihoZWFwUmVsLCBpbmRleFJlbCwgdHJ1ZSwKKwkJCQkJCQkJICZT bmFwc2hvdE5vblZhY3V1bWFibGUsICZpbnN0cnVtZW50LAogCQkJCQkJCQkgMSwgMCk7Ci0JLyog U2V0IGl0IHVwIGZvciBpbmRleC1vbmx5IHNjYW4gKi8KLQlpbmRleF9zY2FuLT54c193YW50X2l0 dXAgPSB0cnVlOworCUFzc2VydChpbmRleF9zY2FuLT54c193YW50X2l0dXApOwogCWluZGV4X3Jl c2NhbihpbmRleF9zY2FuLCBzY2Fua2V5cywgMSwgTlVMTCwgMCk7CiAKIAkvKiBGZXRjaCBmaXJz dC9uZXh0IHR1cGxlIGluIHNwZWNpZmllZCBkaXJlY3Rpb24gKi8KLQl3aGlsZSAoKHRpZCA9IGlu ZGV4X2dldG5leHRfdGlkKGluZGV4X3NjYW4sIGluZGV4c2NhbmRpcikpICE9IE5VTEwpCisJd2hp bGUgKHRhYmxlX2luZGV4X2dldG5leHRfc2xvdChpbmRleF9zY2FuLCBpbmRleHNjYW5kaXIsIHRh Ymxlc2xvdCkpCiAJewotCQlCbG9ja051bWJlciBibG9jayA9IEl0ZW1Qb2ludGVyR2V0QmxvY2tO dW1iZXIodGlkKTsKKwkJLyogV2UgZG9uJ3QgYWN0dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBm b3IgYW55dGhpbmcgKi8KKwkJRXhlY0NsZWFyVHVwbGUodGFibGVzbG90KTsKIAotCQlpZiAoIVZN X0FMTF9WSVNJQkxFKGhlYXBSZWwsCi0JCQkJCQkJYmxvY2ssCi0JCQkJCQkJJnZtYnVmZmVyKSkK LQkJewotCQkJLyogUmF0cywgd2UgaGF2ZSB0byB2aXNpdCB0aGUgaGVhcCB0byBjaGVjayB2aXNp YmlsaXR5ICovCi0JCQlpZiAoIWluZGV4X2ZldGNoX2hlYXAoaW5kZXhfc2NhbiwgdGFibGVzbG90 KSkKLQkJCXsKLQkJCQkvKgotCQkJCSAqIE5vIHZpc2libGUgdHVwbGUgZm9yIHRoaXMgaW5kZXgg ZW50cnksIHNvIHdlIG5lZWQgdG8KLQkJCQkgKiBhZHZhbmNlIHRvIHRoZSBuZXh0IGVudHJ5LiAg QmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwCi0JCQkJICogcGFnZSBmZXRjaGVzIGFuZCBnaXZl IHVwIGlmIHdlJ3ZlIGRvbmUgdG9vIG1hbnkuCi0JCQkJICoKLQkJCQkgKiBXZSBkb24ndCBjaGFy Z2UgYSBwYWdlIGZldGNoIGlmIHRoaXMgaXMgdGhlIHNhbWUgaGVhcCBwYWdlCi0JCQkJICogYXMg dGhlIHByZXZpb3VzIHR1cGxlLiAgVGhpcyBpcyBvbiB0aGUgY29uc2VydmF0aXZlIHNpZGUsCi0J CQkJICogc2luY2Ugb3RoZXIgcmVjZW50bHktYWNjZXNzZWQgcGFnZXMgYXJlIHByb2JhYmx5IHN0 aWxsIGluCi0JCQkJICogYnVmZmVycyB0b287IGJ1dCBpdCdzIGdvb2QgZW5vdWdoIGZvciB0aGlz IGhldXJpc3RpYy4KLQkJCQkgKi8KKwkJLyoKKwkJICogTm8gdmlzaWJsZSB0dXBsZSBmb3IgdGhp cyBpbmRleCBlbnRyeSwgc28gd2UgbmVlZCB0byBhZHZhbmNlIHRvIHRoZQorCQkgKiBuZXh0IGVu dHJ5LiAgQmVmb3JlIGRvaW5nIHNvLCBjb3VudCBoZWFwIHBhZ2UgZmV0Y2hlcyBhbmQgZ2l2ZSB1 cAorCQkgKiBpZiB3ZSd2ZSBkb25lIHRvbyBtYW55LgorCQkgKi8KICNkZWZpbmUgVklTSVRFRF9Q QUdFU19MSU1JVCAxMDAKIAotCQkJCWlmIChibG9jayAhPSBsYXN0X2hlYXBfYmxvY2spCi0JCQkJ ewotCQkJCQlsYXN0X2hlYXBfYmxvY2sgPSBibG9jazsKLQkJCQkJbl92aXNpdGVkX2hlYXBfcGFn ZXMrKzsKLQkJCQkJaWYgKG5fdmlzaXRlZF9oZWFwX3BhZ2VzID4gVklTSVRFRF9QQUdFU19MSU1J VCkKLQkJCQkJCWJyZWFrOwotCQkJCX0KLQotCQkJCWNvbnRpbnVlOwkJLyogbm8gdmlzaWJsZSB0 dXBsZSwgdHJ5IG5leHQgaW5kZXggZW50cnkgKi8KLQkJCX0KLQotCQkJLyogV2UgZG9uJ3QgYWN0 dWFsbHkgbmVlZCB0aGUgaGVhcCB0dXBsZSBmb3IgYW55dGhpbmcgKi8KLQkJCUV4ZWNDbGVhclR1 cGxlKHRhYmxlc2xvdCk7Ci0KLQkJCS8qCi0JCQkgKiBXZSBkb24ndCBjYXJlIHdoZXRoZXIgdGhl cmUncyBtb3JlIHRoYW4gb25lIHZpc2libGUgdHVwbGUgaW4KLQkJCSAqIHRoZSBIT1QgY2hhaW47 IGlmIGFueSBhcmUgdmlzaWJsZSwgdGhhdCdzIGdvb2QgZW5vdWdoLgotCQkJICovCi0JCX0KKwkJ aWYgKGluc3RydW1lbnQubmhlYXBmZXRjaGVzID4gVklTSVRFRF9QQUdFU19MSU1JVCkKKwkJCWJy ZWFrOwogCiAJCS8qCiAJCSAqIFdlIGV4cGVjdCB0aGF0IHRoZSBpbmRleCB3aWxsIHJldHVybiBk YXRhIGluIEluZGV4VHVwbGUgbm90CkBAIC03MjYxLDggKzcyMzMsNiBAQCBnZXRfYWN0dWFsX3Zh cmlhYmxlX2VuZHBvaW50KFJlbGF0aW9uIGhlYXBSZWwsCiAJCWJyZWFrOwogCX0KIAotCWlmICh2 bWJ1ZmZlciAhPSBJbnZhbGlkQnVmZmVyKQotCQlSZWxlYXNlQnVmZmVyKHZtYnVmZmVyKTsKIAlp bmRleF9lbmRzY2FuKGluZGV4X3NjYW4pOwogCiAJcmV0dXJuIGhhdmVfZGF0YTsKZGlmZiAtLWdp dCBhL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jIGIvY29udHJpYi9ibG9vbS9ibHV0aWxzLmMKaW5k ZXggNTExMWNkYzZkLi43ZmQ5OGRiYTYgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvYmxvb20vYmx1dGls cy5jCisrKyBiL2NvbnRyaWIvYmxvb20vYmx1dGlscy5jCkBAIC0xNDYsMTAgKzE0NiwxMSBAQCBi bGhhbmRsZXIoUEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gYmxiZWdpbnNjYW4s CiAJCS5hbXJlc2NhbiA9IGJscmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdl dGJhdGNoID0gTlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0g YmxnZXRiaXRtYXAsCiAJCS5hbWVuZHNjYW4gPSBibGVuZHNjYW4sCi0JCS5hbW1hcmtwb3MgPSBO VUxMLAotCQkuYW1yZXN0cnBvcyA9IE5VTEwsCisJCS5hbXBvc3Jlc2V0ID0gTlVMTCwKIAkJLmFt ZXN0aW1hdGVwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1pbml0cGFyYWxsZWxzY2FuID0gTlVM TCwKIAkJLmFtcGFyYWxsZWxyZXNjYW4gPSBOVUxMLApkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21s L2luZGV4YW0uc2dtbCBiL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKaW5kZXggZjQ4ZGEzMTg1 Li5lMjdlMTI2OGIgMTAwNjQ0Ci0tLSBhL2RvYy9zcmMvc2dtbC9pbmRleGFtLnNnbWwKKysrIGIv ZG9jL3NyYy9zZ21sL2luZGV4YW0uc2dtbApAQCAtMTY3LDEwICsxNjcsMTEgQEAgdHlwZWRlZiBz dHJ1Y3QgSW5kZXhBbVJvdXRpbmUKICAgICBhbWJlZ2luc2Nhbl9mdW5jdGlvbiBhbWJlZ2luc2Nh bjsKICAgICBhbXJlc2Nhbl9mdW5jdGlvbiBhbXJlc2NhbjsKICAgICBhbWdldHR1cGxlX2Z1bmN0 aW9uIGFtZ2V0dHVwbGU7ICAgICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtZ2V0YmF0Y2hfZnVu Y3Rpb24gYW1nZXRiYXRjaDsgLyogY2FuIGJlIE5VTEwgKi8KKyAgICBhbWZyZWViYXRjaF9mdW5j dGlvbiBhbWZyZWViYXRjaDsJLyogY2FuIGJlIE5VTEwgKi8KICAgICBhbWdldGJpdG1hcF9mdW5j dGlvbiBhbWdldGJpdG1hcDsgICAvKiBjYW4gYmUgTlVMTCAqLwogICAgIGFtZW5kc2Nhbl9mdW5j dGlvbiBhbWVuZHNjYW47Ci0gICAgYW1tYXJrcG9zX2Z1bmN0aW9uIGFtbWFya3BvczsgICAgICAg LyogY2FuIGJlIE5VTEwgKi8KLSAgICBhbXJlc3RycG9zX2Z1bmN0aW9uIGFtcmVzdHJwb3M7ICAg ICAvKiBjYW4gYmUgTlVMTCAqLworICAgIGFtcG9zcmVzZXRfZnVuY3Rpb24gYW1wb3NyZXNldDsg LyogY2FuIGJlIE5VTEwgKi8KIAogICAgIC8qIGludGVyZmFjZSBmdW5jdGlvbnMgdG8gc3VwcG9y dCBwYXJhbGxlbCBpbmRleCBzY2FucyAqLwogICAgIGFtZXN0aW1hdGVwYXJhbGxlbHNjYW5fZnVu Y3Rpb24gYW1lc3RpbWF0ZXBhcmFsbGVsc2NhbjsgICAgLyogY2FuIGJlIE5VTEwgKi8KQEAgLTc0 OSw2ICs3NTAsMTM3IEBAIGFtZ2V0dHVwbGUgKEluZGV4U2NhbkRlc2Mgc2NhbiwKICAgIDxzdHJ1 Y3RmaWVsZD5hbWdldHR1cGxlPC9zdHJ1Y3RmaWVsZD4gZmllbGQgaW4gaXRzIDxzdHJ1Y3RuYW1l PkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgogICAgc3RydWN0IG11c3QgYmUgc2V0IHRvIE5V TEwuCiAgIDwvcGFyYT4KKyAgPG5vdGU+CisgICA8cGFyYT4KKyAgICBBcyBvZiA8cHJvZHVjdG5h bWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+IHZlcnNpb24gMTksIHBvc2l0aW9uIG1hcmtpbmcK KyAgICBhbmQgcmVzdG9yYXRpb24gb2Ygc2NhbnMgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZCBmb3Ig dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBpbnRlcmZhY2U7IG9ubHkg dGhlCisgICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBpbnRlcmZhY2Ugc3VwcG9y dHMgdGhpcyBmZWF0dXJlIHRocm91Z2gKKyAgICB0aGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1 bmN0aW9uPiBjYWxsYmFjay4KKyAgIDwvcGFyYT4KKyAgPC9ub3RlPgorCisgIDxwYXJhPgorPHBy b2dyYW1saXN0aW5nPgorQmF0Y2hJbmRleFNjYW4KK2FtZ2V0YmF0Y2ggKEluZGV4U2NhbkRlc2Mg c2NhbiwKKyAgICAgICAgICAgIEJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2gsCisgICAgICAgICAg ICBTY2FuRGlyZWN0aW9uIGRpcmVjdGlvbik7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmV0dXJu IHRoZSBuZXh0IGJhdGNoIG9mIGluZGV4IHR1cGxlcyBpbiB0aGUgZ2l2ZW4gc2NhbiwgbW92aW5n IGluIHRoZQorICAgZ2l2ZW4gZGlyZWN0aW9uIChmb3J3YXJkIG9yIGJhY2t3YXJkIGluIHRoZSBp bmRleCkuICBSZXR1cm5zIGFuIGluc3RhbmNlIG9mCisgICA8dHlwZT5CYXRjaEluZGV4U2Nhbjwv dHlwZT4gd2l0aCBpbmRleCB0dXBsZXMgbG9hZGVkLCBvcgorICAgPGxpdGVyYWw+TlVMTDwvbGl0 ZXJhbD4gaWYgdGhlcmUgYXJlIG5vIG1vcmUgaW5kZXggdHVwbGVzLgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gcGFyYW1ldGVyIHBh c3NlcyB0aGUgYmF0Y2ggcHJldmlvdXNseQorICAgcmV0dXJuZWQgYnkgYW4gZWFybGllciA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGNhbGwgKG9yCisgICA8bGl0ZXJhbD5OVUxMPC9s aXRlcmFsPiBvbiB0aGUgZmlyc3QgY2FsbCkuICBUaGUgaW5kZXggQU0gdXNlcworICAgPGxpdGVy YWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gdG8gZGV0ZXJtaW5lIHdoaWNoIGluZGV4IHBhZ2UgdG8g cmVhZCBuZXh0LAorICAgdHlwaWNhbGx5IGJ5IGZvbGxvd2luZyBwYWdlIGxpbmtzIGZvdW5kIGlu IDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+LgorICAgVGhlIHJldHVybmVkIGJhdGNoIGNv bnRhaW5zIG1hdGNoaW5nIGl0ZW1zIGltbWVkaWF0ZWx5IGFkamFjZW50IHRvIHRob3NlCisgICBm cm9tIDxsaXRlcmFsPnByaW9yYmF0Y2g8L2xpdGVyYWw+IGluIHRoZSBjb21tb24gY2FzZSB3aGVy ZQorICAgPGxpdGVyYWw+cHJpb3JiYXRjaDwvbGl0ZXJhbD4gaXMgdGhlIGJhdGNoIHRoYXQgd2Fz IHJldHVybmVkIGJ5IHRoZSBtb3N0CisgICByZWNlbnQgY2FsbCB0byA8ZnVuY3Rpb24+YW1nZXRi YXRjaDwvZnVuY3Rpb24+IGNhbGwgKHRob3VnaCBub3Qgd2hlbiB0aGUKKyAgIG1vc3QgcmVjZW50 IGNhbGwgdXNlZCB0aGUgb3Bwb3NpdGUgc2NhbiBkaXJlY3Rpb24gdG8gdGhpcyBjYWxsLCBhbmQg bm90CisgICB3aGVuIGEgbWFyayBoYXMgYmVlbiByZXN0b3JlZCkuCisgIDwvcGFyYT4KKworICA8 cGFyYT4KKyAgIEEgYmF0Y2ggcmV0dXJuZWQgYnkgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0 aW9uPiBpcyBndWFyYW50ZWVkIHRvIGJlCisgICBhc3NvY2lhdGVkIHdpdGggYW4gaW5kZXggcGFn ZSBjb250YWluaW5nIGF0IGxlYXN0IG9uZSBtYXRjaGluZyB0dXBsZS4KKyAgIFRoZSBpbmRleCBw YWdlIGFzc29jaWF0ZWQgd2l0aCB0aGUgYmF0Y2ggbWF5IGJlIHJldGFpbmVkIGluIGEgYnVmZmVy IHdpdGgKKyAgIGl0cyBwaW4gaGVsZCBhcyBhbiBpbnRlcmxvY2sgYWdhaW5zdCBjb25jdXJyZW50 IFRJRCByZWN5Y2xpbmcgYnkKKyAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4uICBTZWUgPHhy ZWYgbGlua2VuZD0iaW5kZXgtbG9ja2luZyIvPiBmb3IgZGV0YWlscworICAgb24gYnVmZmVyIHBp biBtYW5hZ2VtZW50IGR1cmluZyA8cXVvdGU+cGxhaW48L3F1b3RlPiBpbmRleCBzY2Fucy4KKyAg PC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlv bj4gaW50ZXJmYWNlIGRvZXMgbm90IHN1cHBvcnQgaW5kZXgtb25seQorICAgc2NhbnMgdGhhdCBy ZXR1cm4gZGF0YSB2aWEgdGhlIDxsaXRlcmFsPnhzX2hpdHVwPC9saXRlcmFsPiBtZWNoYW5pc20u CisgICBJbmRleC1vbmx5IHNjYW5zIGFyZSBzdXBwb3J0ZWQgdGhyb3VnaCB0aGUgPGxpdGVyYWw+ eHNfaXR1cDwvbGl0ZXJhbD4KKyAgIG1lY2hhbmlzbSBvbmx5LgorICA8L3BhcmE+CisKKyAgPHBh cmE+CisgICBUaGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbiBuZWVk IG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3MgbWV0aG9kIHN1cHBvcnRzIDxxdW90 ZT5wbGFpbjwvcXVvdGU+IGluZGV4IHNjYW5zLiAgSWYgaXQgZG9lc24ndCwKKyAgIHRoZSA8ZnVu Y3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGZpZWxkIGluIGl0cworICAgPHN0cnVjdG5hbWU+ SW5kZXhBbVJvdXRpbmU8L3N0cnVjdG5hbWU+IHN0cnVjdCBtdXN0IGJlIHNldCB0byBOVUxMLgor ICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICBBIDx0eXBlPkJhdGNoSW5kZXhTY2FuPC90eXBlPiB0 aGF0IGlzIHJldHVybmVkIGJ5CisgICA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IGlz IG5vIGxvbmdlciBtYW5hZ2VkIGJ5IHRoZSBhY2Nlc3MgbWV0aG9kLgorICAgSXQgaXMgdXAgdG8g dGhlIHRhYmxlIEFNIGNhbGxlciB0byBkZWNpZGUgd2hlbiBpdCBzaG91bGQgYmUgZnJlZWQgYnkK KyAgIHBhc3NpbmcgaXQgdG8gPGZ1bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4uICBOb3Rl IGFsc28gdGhhdAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBmdW5jdGlvbnMg bXVzdCBuZXZlciBtb2RpZnkgdGhlCisgICA8c3RydWN0ZmllbGQ+cHJpb3JiYXRjaDwvc3RydWN0 ZmllbGQ+IHBhcmFtZXRlci4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorICAgVGhlIGFjY2VzcyBt ZXRob2QgbWF5IHByb3ZpZGUgb25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0 aW9uPgorICAgYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2FsbGJhY2tzLCBu b3QgYm90aCAoWFhYIHVuY2VydGFpbikuCisgICBXaGVuIHRoZSBhY2Nlc3MgbWV0aG9kIHByb3Zp ZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4sIGl0IG11c3QKKyAgIGFsc28gcHJv dmlkZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4KKyAgPC9wYXJhPgorCisgIDxw YXJhPgorICAgVGhlIHNhbWUgY2F2ZWF0cyBkZXNjcmliZWQgZm9yIDxmdW5jdGlvbj5hbWdldHR1 cGxlPC9mdW5jdGlvbj4gYXBwbHkgaGVyZQorICAgdG9vOiBhbiBlbnRyeSBpbiB0aGUgcmV0dXJu ZWQgYmF0Y2ggbWVhbnMgb25seSB0aGF0IHRoZSBpbmRleCBjb250YWlucworICAgYW4gZW50cnkg dGhhdCBtYXRjaGVzIHRoZSBzY2FuIGtleXMsIG5vdCB0aGF0IHRoZSB0dXBsZSBuZWNlc3Nhcmls eSBzdGlsbAorICAgZXhpc3RzIGluIHRoZSBoZWFwIG9yIHdpbGwgcGFzcyB0aGUgY2FsbGVyJ3Mg c25hcHNob3QgdGVzdC4KKyAgPC9wYXJhPgorCisgIDxwYXJhPgorPHByb2dyYW1saXN0aW5nPgor dm9pZAorYW1mcmVlYmF0Y2ggKEluZGV4U2NhbkRlc2Mgc2NhbiwKKyAgICAgICAgICAgICBCYXRj aEluZGV4U2NhbiBiYXRjaCk7Cis8L3Byb2dyYW1saXN0aW5nPgorICAgUmVsZWFzZXMgYSBiYXRj aCByZXR1cm5lZCBieSB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxsYmFj ay4KKyAgIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGV4Y2x1c2l2ZWx5IGJ5IHRhYmxlIGFjY2Vz cyBtZXRob2RzIHRvIGluZGljYXRlCisgICB0aGF0IHByb2Nlc3Npbmcgb2YgdGhlIGJhdGNoIGlz IGNvbXBsZXRlOyBpdCBzaG91bGQgbmV2ZXIgYmUgY2FsbGVkIHdpdGhpbgorICAgdGhlIGluZGV4 IGFjY2VzcyBtZXRob2QgaXRzZWxmLgorICA8L3BhcmE+CisKKyAgPHBhcmE+CisgICA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBmcmVlcyBidWZmZXIgcGlucyBoZWxkIG9uIHRoZSBi YXRjaCdzCisgICBhc3NvY2lhdGVkIGluZGV4IHBhZ2UgYW5kIHJlbGVhc2VzIHJlbGF0ZWQgbWVt b3J5IGFuZCByZXNvdXJjZXMuICBUaGVzZQorICAgYnVmZmVyIHBpbnMgc2VydmUgYXMgYW4gaW50 ZXJsb2NrIGFnYWluc3QgY29uY3VycmVudCBUSUQgcmVjeWNsaW5nIGJ5CisgICA8Y29tbWFuZD5W QUNVVU08L2NvbW1hbmQ+LCBwcm90ZWN0aW5nIHRoZSB0YWJsZSBhY2Nlc3MgbWV0aG9kIGZyb20g Y29uZnVzaW9uCisgICBhYm91dCB3aGljaCBUSUQgY29ycmVzcG9uZHMgdG8gd2hpY2ggbG9naWNh bCByb3cuICBTZWUgPHhyZWYKKyAgIGxpbmtlbmQ9ImluZGV4LWxvY2tpbmciLz4gZm9yIGRldGFp bGVkIGRpc2N1c3Npb24gb2YgYnVmZmVyIHBpbiBtYW5hZ2VtZW50LgorICA8L3BhcmE+CisKKyAg PHBhcmE+CisgICBUaGUgaW5kZXggQU0gbWF5IGNob29zZSB0byByZXRhaW4gaXRzIG93biBidWZm ZXIgcGlucyBhY3Jvc3MgbXVsdGlwbGUKKyAgIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVuY3Rp b24+IGNhbGxzIHdoZW4gdGhpcyBzZXJ2ZXMgYW4gaW50ZXJuYWwgcHVycG9zZQorICAgKGZvciBl eGFtcGxlLCBtYWludGFpbmluZyBhIGRlc2NlbnQgc3RhY2sgb2YgcGlubmVkIGluZGV4IHBhZ2Vz IGZvciByZXVzZQorICAgYWNyb3NzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gY2Fs bHMpLiAgSG93ZXZlciwgYW55IHNjaGVtZSB0aGF0CisgICByZXRhaW5zIGJ1ZmZlciBwaW5zIG11 c3Qga2VlcCB0aGUgbnVtYmVyIG9mIHJldGFpbmVkIHBpbnMgZml4ZWQgYW5kIHNtYWxsLAorICAg dG8gYXZvaWQgZXhoYXVzdGluZyB0aGUgYmFja2VuZCdzIGJ1ZmZlciBwaW4gbGltaXQuCisgIDwv cGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSBpbmRleCBBTSBoYXMgdGhlIG9wdGlvbiBvZiBzZXR0 aW5nIDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgaW4KKyAgIHRoZSBpbmRleCBwYWdl IHRvIG1hcmsgZGVhZCB0dXBsZXMgYmVmb3JlIHJlbGVhc2luZyB0aGUgYnVmZmVyIHBpbi4gIFdo ZW4KKyAgIDxsaXRlcmFsPkJhdGNoUXVldWUuZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSBhbmQg dGhlIGJ1ZmZlciBwaW4gaXMgYmVpbmcKKyAgIGRyb3BwZWQgZWFnZXJseSwgdGhlIGluZGV4IEFN IG11c3QgY2hlY2sgPGxpdGVyYWw+QmF0Y2hJbmRleFNjYW4ubHNuPC9saXRlcmFsPgorICAgdG8g dmVyaWZ5IHRoYXQgdGhlIHBhZ2UgTFNOIGhhcyBub3QgYWR2YW5jZWQgc2luY2UgdGhlIGJhdGNo IHdhcyBvcmlnaW5hbGx5CisgICByZWFkIGJlZm9yZSBzZXR0aW5nIDxsaXRlcmFsPkxQX0RFQUQ8 L2xpdGVyYWw+IGJpdHMsIHRvIGF2b2lkIGNvbmN1cnJlbnQKKyAgIFRJRCByZWN5Y2xpbmcgaGF6 YXJkcy4gIFdoZW4gPGxpdGVyYWw+c2Nhbi0+YmF0Y2hxdWV1ZS0+ZHJvcFBpbjwvbGl0ZXJhbD4K KyAgIGlzIGZhbHNlIChyZXF1aXJpbmcgdGhhdCBhIGJ1ZmZlciBwaW4gYmUgaGVsZCB0aHJvdWdo b3V0IGZpcnN0IHJlYWRpbmcgdGhlCisgICBpbmRleCBsZWFmIHBhZ2UgYW5kIGNhbGxpbmcgPGZ1 bmN0aW9uPmFtZnJlZWJhdGNoPC9mdW5jdGlvbj4pLAorICAgPGxpdGVyYWw+TFBfREVBRDwvbGl0 ZXJhbD4gYml0cyBjYW4gYWx3YXlzIGJlIHNldCBzYWZlbHkgd2l0aG91dCBhbiBMU04gY2hlY2su CisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAgIFRoZSA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1 bmN0aW9uPiBmdW5jdGlvbiBuZWVkIG9ubHkgYmUgcHJvdmlkZWQgaWYgdGhlCisgICBhY2Nlc3Mg bWV0aG9kIHByb3ZpZGVzIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4uIE90aGVyd2lz ZSBpdCBoYXMgdG8KKyAgIHJlbWFpbiBzZXQgdG8gPGxpdGVyYWw+TlVMTDwvbGl0ZXJhbD4uCisg IDwvcGFyYT4KIAogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KQEAgLTc2OCw4ICs5MDAsOCBA QCBhbWdldGJpdG1hcCAoSW5kZXhTY2FuRGVzYyBzY2FuLAogICAgaXRzZWxmLCBhbmQgdGhlcmVm b3JlIGNhbGxlcnMgcmVjaGVjayBib3RoIHRoZSBzY2FuIGNvbmRpdGlvbnMgYW5kIHRoZQogICAg cGFydGlhbCBpbmRleCBwcmVkaWNhdGUgKGlmIGFueSkgZm9yIHJlY2hlY2thYmxlIHR1cGxlcy4g IFRoYXQgbWlnaHQgbm90CiAgICBhbHdheXMgYmUgdHJ1ZSwgaG93ZXZlci4KLSAgIDxmdW5jdGlv bj5hbWdldGJpdG1hcDwvZnVuY3Rpb24+IGFuZAotICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1 bmN0aW9uPiBjYW5ub3QgYmUgdXNlZCBpbiB0aGUgc2FtZSBpbmRleCBzY2FuOyB0aGVyZQorICAg T25seSBvbmUgb2YgPGZ1bmN0aW9uPmFtZ2V0Yml0bWFwPC9mdW5jdGlvbj4sIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4sCisgICBvciA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rp b24+IGNhbiBiZSB1c2VkIGluIGFueSBnaXZlbiBpbmRleCBzY2FuOyB0aGVyZQogICAgYXJlIG90 aGVyIHJlc3RyaWN0aW9ucyB0b28gd2hlbiB1c2luZyA8ZnVuY3Rpb24+YW1nZXRiaXRtYXA8L2Z1 bmN0aW9uPiwgYXMgZXhwbGFpbmVkCiAgICBpbiA8eHJlZiBsaW5rZW5kPSJpbmRleC1zY2Fubmlu ZyIvPi4KICAgPC9wYXJhPgpAQCAtNzk1LDMyICs5MjcsMjUgQEAgYW1lbmRzY2FuIChJbmRleFNj YW5EZXNjIHNjYW4pOwogICA8cGFyYT4KIDxwcm9ncmFtbGlzdGluZz4KIHZvaWQKLWFtbWFya3Bv cyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKK2FtcG9zcmVzZXQgKEluZGV4U2NhbkRlc2Mgc2Nhbik7 CiA8L3Byb2dyYW1saXN0aW5nPgotICAgTWFyayBjdXJyZW50IHNjYW4gcG9zaXRpb24uICBUaGUg YWNjZXNzIG1ldGhvZCBuZWVkIG9ubHkgc3VwcG9ydCBvbmUKLSAgIHJlbWVtYmVyZWQgc2NhbiBw b3NpdGlvbiBwZXIgc2Nhbi4KKyAgIE5vdGlmeSBpbmRleCBBTSB0aGF0IGNvcmUgY29kZSB3aWxs IGNoYW5nZSB0aGUgc2NhbidzIHBvc2l0aW9uIHRvIGFuIGl0ZW0KKyAgIHJldHVybmVkIGFzIHBh cnQgb2YgYW4gZWFybGllciBiYXRjaC4gIFRoZSBpbmRleCBBTSBtdXN0IHRoZXJlZm9yZQorICAg aW52YWxpZGF0ZSBhbnkgc3RhdGUgdGhhdCBpbmRlcGVuZGVudGx5IHRyYWNrcyB0aGUgc2Nhbidz IHByb2dyZXNzCisgICAoZS5nLiwgYXJyYXkga2V5cyB1c2VkIHdpdGggYSBTY2FsYXJBcnJheU9w RXhwciBxdWFsKS4gIENhbGxlZCBieSB0aGUgY29yZQorICAgc3lzdGVtIHdoZW4gaXQgaXMgYWJv dXQgdG8gcmVzdG9yZSBhIG1hcmsuCiAgIDwvcGFyYT4KIAogICA8cGFyYT4KLSAgIFRoZSA8ZnVu Y3Rpb24+YW1tYXJrcG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVk IGlmIHRoZSBhY2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQg ZG9lc24ndCwKLSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1tYXJrcG9zPC9zdHJ1Y3RmaWVsZD4gZmll bGQgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgotICAgc3Ry dWN0IG1heSBiZSBzZXQgdG8gTlVMTC4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotPHByb2dyYW1s aXN0aW5nPgotdm9pZAotYW1yZXN0cnBvcyAoSW5kZXhTY2FuRGVzYyBzY2FuKTsKLTwvcHJvZ3Jh bWxpc3Rpbmc+Ci0gICBSZXN0b3JlIHRoZSBzY2FuIHRvIHRoZSBtb3N0IHJlY2VudGx5IG1hcmtl ZCBwb3NpdGlvbi4KLSAgPC9wYXJhPgotCi0gIDxwYXJhPgotICAgVGhlIDxmdW5jdGlvbj5hbXJl c3RycG9zPC9mdW5jdGlvbj4gZnVuY3Rpb24gbmVlZCBvbmx5IGJlIHByb3ZpZGVkIGlmIHRoZSBh Y2Nlc3MKLSAgIG1ldGhvZCBzdXBwb3J0cyBvcmRlcmVkIHNjYW5zLiAgSWYgaXQgZG9lc24ndCwK LSAgIHRoZSA8c3RydWN0ZmllbGQ+YW1yZXN0cnBvczwvc3RydWN0ZmllbGQ+IGZpZWxkIGluIGl0 cyA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT4KLSAgIHN0cnVjdCBtYXkg YmUgc2V0IHRvIE5VTEwuCisgICBUaGUgPGZ1bmN0aW9uPmFtcG9zcmVzZXQ8L2Z1bmN0aW9uPiBm dW5jdGlvbiBjYW4gb25seSBiZSBwcm92aWRlZCBpZiB0aGUKKyAgIGFjY2VzcyBtZXRob2Qgc3Vw cG9ydHMgb3JkZXJlZCBzY2FucyB0aHJvdWdoIHRoZSA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVu Y3Rpb24+CisgICBpbnRlcmZhY2UuICBJZiBpdCBkb2Vzbid0LCB0aGUgPHN0cnVjdGZpZWxkPmFt cG9zcmVzZXQ8L3N0cnVjdGZpZWxkPiBmaWVsZAorICAgaW4gaXRzIDxzdHJ1Y3RuYW1lPkluZGV4 QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPiBzdHJ1Y3Qgc2hvdWxkIGJlIHNldCB0bworICAgTlVMTC4g IEluZGV4IEFNcyB0aGF0IGRvbid0IGhhdmUgYW55IHByaXZhdGUgc3RhdGUgdGhhdCBtaWdodCBu ZWVkIHRvIGJlCisgICBpbnZhbGlkYXRlZCBtaWdodCBzdGlsbCBmaW5kIGl0IHVzZWZ1bCB0byBw cm92aWRlIGFuIGVtcHR5CisgICA8c3RydWN0ZmllbGQ+YW1wb3NyZXNldDwvc3RydWN0ZmllbGQ+ IGZ1bmN0aW9uOyBpZiA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBpcyBzZXQg dG8gTlVMTCwgdGhlIGNvcmUgc3lzdGVtIHdpbGwgYXNzdW1lIHRoYXQgaXQgaXMgdW5zYWZlIHRv IHJlc3RvcmUgYQorICAgbWFya2VkIHBvc2l0aW9uLgogICA8L3BhcmE+CiAKICAgPHBhcmE+CkBA IC05OTQsMzAgKzExMTksNDcgQEAgYW10cmFuc2xhdGVjbXB0eXBlIChDb21wYXJlVHlwZSBjbXB0 eXBlLCBPaWQgb3BmYW1pbHksIE9pZCBvcGNpbnR5cGUpOwogICA8L3BhcmE+CiAKICAgPHBhcmE+ Ci0gICBUaGUgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBmdW5jdGlvbiBoYXMgYSA8 bGl0ZXJhbD5kaXJlY3Rpb248L2xpdGVyYWw+IGFyZ3VtZW50LAorICAgVGhlIDxmdW5jdGlvbj5h bWdldHR1cGxlPC9mdW5jdGlvbj4gYW5kIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4K KyAgIGZ1bmN0aW9ucyBoYXZlIGEgPGxpdGVyYWw+ZGlyZWN0aW9uPC9saXRlcmFsPiBhcmd1bWVu dCwKICAgIHdoaWNoIGNhbiBiZSBlaXRoZXIgPGxpdGVyYWw+Rm9yd2FyZFNjYW5EaXJlY3Rpb248 L2xpdGVyYWw+ICh0aGUgbm9ybWFsIGNhc2UpCiAgICBvciAgPGxpdGVyYWw+QmFja3dhcmRTY2Fu RGlyZWN0aW9uPC9saXRlcmFsPi4gIElmIHRoZSBmaXJzdCBjYWxsIGFmdGVyCiAgICA8ZnVuY3Rp b24+YW1yZXNjYW48L2Z1bmN0aW9uPiBzcGVjaWZpZXMgPGxpdGVyYWw+QmFja3dhcmRTY2FuRGly ZWN0aW9uPC9saXRlcmFsPiwgdGhlbiB0aGUKICAgIHNldCBvZiBtYXRjaGluZyBpbmRleCBlbnRy aWVzIGlzIHRvIGJlIHNjYW5uZWQgYmFjay10by1mcm9udCByYXRoZXIgdGhhbiBpbgotICAgdGhl IG5vcm1hbCBmcm9udC10by1iYWNrIGRpcmVjdGlvbiwgc28gPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBtdXN0IHJldHVybgotICAgdGhlIGxhc3QgbWF0Y2hpbmcgdHVwbGUgaW4gdGhl IGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0Ci0gICBub3JtYWxseSB3b3Vs ZC4gIChUaGlzIHdpbGwgb25seSBvY2N1ciBmb3IgYWNjZXNzCi0gICBtZXRob2RzIHRoYXQgc2V0 IDxzdHJ1Y3RmaWVsZD5hbWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4gdG8gdHJ1ZS4pICBBZnRlciB0 aGUKLSAgIGZpcnN0IGNhbGwsIDxmdW5jdGlvbj5hbWdldHR1cGxlPC9mdW5jdGlvbj4gbXVzdCBi ZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBzY2FuIGluCisgICB0aGUgbm9ybWFsIGZyb250LXRv LWJhY2sgZGlyZWN0aW9uLiAgSW4gdGhpcyBjYXNlLAorICAgPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8 L2Z1bmN0aW9uPiBtdXN0IHJldHVybiB0aGUgbGFzdCBtYXRjaGluZyB0dXBsZSBpbiB0aGUKKyAg IGluZGV4LCByYXRoZXIgdGhhbiB0aGUgZmlyc3Qgb25lIGFzIGl0IG5vcm1hbGx5IHdvdWxkLiAg U2ltaWxhcmx5LAorICAgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBtdXN0IHJldHVy biB0aGUgbGFzdCBtYXRjaGluZyBiYXRjaCBvZiBpdGVtcworICAgd2hlbiBlaXRoZXIgdGhlIGZp cnN0IGNhbGwgYWZ0ZXIgPGZ1bmN0aW9uPmFtcmVzY2FuPC9mdW5jdGlvbj4gc3BlY2lmaWVzCisg ICA8bGl0ZXJhbD5CYWNrd2FyZFNjYW5EaXJlY3Rpb248L2xpdGVyYWw+LCBvciBhIHN1YnNlcXVl bnQgY2FsbCBoYXMKKyAgIDxsaXRlcmFsPk5VTEw8L2xpdGVyYWw+IGFzIGl0cyA8c3RydWN0Zmll bGQ+cHJpb3JiYXRjaDwvc3RydWN0ZmllbGQ+IGFyZ3VtZW50CisgICAoaW5kaWNhdGluZyBhIGJh Y2t3YXJkIHNjYW4gcmVzdGFydCkuICAoVGhpcyBiYWNrd2FyZC1zY2FuIGJlaGF2aW9yIHdpbGwK KyAgIG9ubHkgb2NjdXIgZm9yIGFjY2VzcyBtZXRob2RzIHRoYXQgc2V0IDxzdHJ1Y3RmaWVsZD5h bWNhbm9yZGVyPC9zdHJ1Y3RmaWVsZD4KKyAgIHRvIHRydWUuKSAgQWZ0ZXIgdGhlIGZpcnN0IGNh bGwsIGJvdGggPGZ1bmN0aW9uPmFtZ2V0dHVwbGU8L2Z1bmN0aW9uPiBhbmQKKyAgIDxmdW5jdGlv bj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gbXVzdCBiZSBwcmVwYXJlZCB0byBhZHZhbmNlIHRoZSBz Y2FuIGluCiAgICBlaXRoZXIgZGlyZWN0aW9uIGZyb20gdGhlIG1vc3QgcmVjZW50bHkgcmV0dXJu ZWQgZW50cnkuICAoQnV0IGlmCiAgICA8c3RydWN0ZmllbGQ+YW1jYW5iYWNrd2FyZDwvc3RydWN0 ZmllbGQ+IGlzIGZhbHNlLCBhbGwgc3Vic2VxdWVudAogICAgY2FsbHMgd2lsbCBoYXZlIHRoZSBz YW1lIGRpcmVjdGlvbiBhcyB0aGUgZmlyc3Qgb25lLikKICAgPC9wYXJhPgogCiAgIDxwYXJhPgot ICAgQWNjZXNzIG1ldGhvZHMgdGhhdCBzdXBwb3J0IG9yZGVyZWQgc2NhbnMgbXVzdCBzdXBwb3J0 IDxxdW90ZT5tYXJraW5nPC9xdW90ZT4gYQotICAgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRl ciByZXR1cm5pbmcgdG8gdGhlIG1hcmtlZCBwb3NpdGlvbi4gIFRoZSBzYW1lCi0gICBwb3NpdGlv biBtaWdodCBiZSByZXN0b3JlZCBtdWx0aXBsZSB0aW1lcy4gIEhvd2V2ZXIsIG9ubHkgb25lIHBv c2l0aW9uIG5lZWQKLSAgIGJlIHJlbWVtYmVyZWQgcGVyIHNjYW47IGEgbmV3IDxmdW5jdGlvbj5h bW1hcmtwb3M8L2Z1bmN0aW9uPiBjYWxsIG92ZXJyaWRlcyB0aGUKLSAgIHByZXZpb3VzbHkgbWFy a2VkIHBvc2l0aW9uLiAgQW4gYWNjZXNzIG1ldGhvZCB0aGF0IGRvZXMgbm90IHN1cHBvcnQgb3Jk ZXJlZAotICAgc2NhbnMgbmVlZCBub3QgcHJvdmlkZSA8ZnVuY3Rpb24+YW1tYXJrcG9zPC9mdW5j dGlvbj4gYW5kIDxmdW5jdGlvbj5hbXJlc3RycG9zPC9mdW5jdGlvbj4KLSAgIGZ1bmN0aW9ucyBp biA8c3RydWN0bmFtZT5JbmRleEFtUm91dGluZTwvc3RydWN0bmFtZT47IHNldCB0aG9zZSBwb2lu dGVycyB0byBOVUxMCi0gICBpbnN0ZWFkLgorICAgQWNjZXNzIG1ldGhvZHMgdXNpbmcgdGhlIDxm dW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gaW50ZXJmYWNlIG1heQorICAgc3VwcG9ydCA8 cXVvdGU+bWFya2luZzwvcXVvdGU+IGEgcG9zaXRpb24gaW4gYSBzY2FuIGFuZCBsYXRlciByZXR1 cm5pbmcgdG8KKyAgIHRoZSBtYXJrZWQgcG9zaXRpb24sIHRob3VnaCB0aGlzIGlzIG9wdGlvbmFs LiAgSWYgdGhlIHNhbWUgbWFya2VkIHBvc2l0aW9uCisgICBtaWdodCBiZSByZXN0b3JlZCBtdWx0 aXBsZSB0aW1lcywgdGhlIGNvcmUgc3lzdGVtIG1hbmFnZXMgbWFya2luZyBhbmQKKyAgIHJlc3Rv cmF0aW9uIHRocm91Z2ggdGhlIDxmdW5jdGlvbj5pbmRleF9iYXRjaF9tYXJrX3BvczwvZnVuY3Rp b24+IGFuZAorICAgPGZ1bmN0aW9uPmluZGV4X2JhdGNoX3Jlc3RvcmVfcG9zPC9mdW5jdGlvbj4g aW50ZXJuYWwgZnVuY3Rpb25zLiAgV2hlbiBhCisgICBtYXJrZWQgcG9zaXRpb24gaXMgcmVzdG9y ZWQsIHRoZSBpbmRleCBBTSBpcyBub3RpZmllZCB2aWEgdGhlCisgICA8ZnVuY3Rpb24+YW1wb3Ny ZXNldDwvZnVuY3Rpb24+IGNhbGxiYWNrIHNvIGl0IGNhbiBpbnZhbGlkYXRlIGFueSBwcml2YXRl CisgICBzdGF0ZSB0aGF0IGluZGVwZW5kZW50bHkgdHJhY2tzIHRoZSBzY2FuJ3MgcHJvZ3Jlc3Mg KHN1Y2ggYXMgYXJyYXkga2V5CisgICBzdGF0ZSkuCisgIDwvcGFyYT4KKworICA8cGFyYT4KKyAg IFRoZSA8ZnVuY3Rpb24+YW1wb3NyZXNldDwvZnVuY3Rpb24+IGZ1bmN0aW9uIGluIDxzdHJ1Y3Ru YW1lPkluZGV4QW1Sb3V0aW5lPC9zdHJ1Y3RuYW1lPgorICAgc2hvdWxkIGJlIHNldCB0byBOVUxM IGZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIG5vdCBzdXBwb3J0IG1hcmsvcmVzdG9yZS4KKyAg IEZvciBhY2Nlc3MgbWV0aG9kcyB0aGF0IGRvIHN1cHBvcnQgdGhpcyBmZWF0dXJlLCA8ZnVuY3Rp b24+YW1wb3NyZXNldDwvZnVuY3Rpb24+CisgICBtdXN0IGJlIHByb3ZpZGVkICh0aG91Z2ggaXQg Y2FuIGJlIGEgbm8tb3AgZnVuY3Rpb24gaWYgdGhlIEFNIGhhcyBubyBwcml2YXRlCisgICBzdGF0 ZSB0byBpbnZhbGlkYXRlKS4KICAgPC9wYXJhPgogCiAgIDxwYXJhPgpAQCAtMTE4Niw2ICsxMzI4 LDk0IEBAIGFtdHJhbnNsYXRlY21wdHlwZSAoQ29tcGFyZVR5cGUgY21wdHlwZSwgT2lkIG9wZmFt aWx5LCBPaWQgb3BjaW50eXBlKTsKICAgIHJlZHVjZSB0aGUgZnJlcXVlbmN5IG9mIHN1Y2ggdHJh bnNhY3Rpb24gY2FuY2VsbGF0aW9ucy4KICAgPC9wYXJhPgogCisgIDxzZWN0MiBpZD0iaW5kZXgt bG9ja2luZy1iYXRjaGVzIj4KKyAgIDx0aXRsZT5CYXRjaCBTY2FubmluZyBhbmQgQnVmZmVyIFBp biBNYW5hZ2VtZW50PC90aXRsZT4KKworICAgPHBhcmE+CisgICAgSW5kZXggYWNjZXNzIG1ldGhv ZHMgdGhhdCBpbXBsZW1lbnQgdGhlIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4KKyAg ICBpbnRlcmZhY2UgbXVzdCBjb29wZXJhdGUgd2l0aCB0aGUgY29yZSBzeXN0ZW0gdG8gbWFuYWdl IGJ1ZmZlciBwaW5zIGluIGEKKyAgICB3YXkgdGhhdCBwcmV2ZW50cyBjb25jdXJyZW50IDxjb21t YW5kPlZBQ1VVTTwvY29tbWFuZD4gZnJvbSBjcmVhdGluZworICAgIFRJRCByZWN5Y2xpbmcgaGF6 YXJkcy4gIFVubGlrZSA8ZnVuY3Rpb24+YW1nZXR0dXBsZTwvZnVuY3Rpb24+IHNjYW5zLAorICAg IHdoaWNoIGtlZXAgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QgaW4gY29udHJvbCBvZiBzY2FuIHBy b2dyZXNzaW9uLAorICAgIDxmdW5jdGlvbj5hbWdldGJhdGNoPC9mdW5jdGlvbj4gc2NhbnMgZ2l2 ZSBjb250cm9sIHRvIHRoZSB0YWJsZSBhY2Nlc3MKKyAgICBtZXRob2QsIHdoaWNoIG1heSBmZXRj aCB0YWJsZSB0dXBsZXMgaW4gYSBkaWZmZXJlbnQgb3JkZXIgdGhhbiB0aGUgaW5kZXgKKyAgICBl bnRyaWVzIHdlcmUgcmV0dXJuZWQuICBUaGlzIGNyZWF0ZXMgdGhlIG5lZWQgZm9yIGV4cGxpY2l0 IGJ1ZmZlciBwaW4KKyAgICBtYW5hZ2VtZW50IHRvIGVuc3VyZSB0aGUgdGFibGUgYWNjZXNzIG1l dGhvZCBkb2VzIG5vdCBjb25mdXNlIGEgcmVjeWNsZWQKKyAgICBUSUQgd2l0aCB0aGUgb3JpZ2lu YWwgcm93IGl0IG1lYW50IHRvIHJlZmVyZW5jZS4KKyAgIDwvcGFyYT4KKworICAgPHBhcmE+Cisg ICAgV2hlbiA8ZnVuY3Rpb24+YW1nZXRiYXRjaDwvZnVuY3Rpb24+IHJldHVybnMgYSBiYXRjaCwg dGhlIGJhdGNoJ3MKKyAgICBhc3NvY2lhdGVkIGluZGV4IHBhZ2UgbWF5IGJlIHJldGFpbmVkIGlu IGEgYnVmZmVyIHdpdGggYSBwaW4gaGVsZCBvbiBpdC4KKyAgICBUaGlzIHBpbiBzZXJ2ZXMgYXMg YW4gaW50ZXJsb2NrOiA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+IGNhbm5vdCByZWN5Y2xlCisg ICAgVElEcyBvbiBhIHBpbm5lZCBwYWdlLiAgVGhlIGJ1ZmZlciBwaW4gcHJvdGVjdHMgb25seSB0 aGUgdGFibGUgYWNjZXNzCisgICAgbWV0aG9kJ3MgYWJpbGl0eSB0byBtYXAgVElEcyB0byByb3dz IGNvcnJlY3RseTsgaXQgZG9lcyBub3QgcHJvdGVjdCB0aGUKKyAgICBpbmRleCBzdHJ1Y3R1cmUg aXRzZWxmLiAgSW5kZXggYWNjZXNzIG1ldGhvZHMgbWF5IHVzZSBwaW5zIGZvciBvdGhlcgorICAg IHB1cnBvc2VzIChmb3IgZXhhbXBsZSwgbWFpbnRhaW5pbmcgYSBkZXNjZW50IHN0YWNrIG9mIHBp bm5lZCBwYWdlcyksIGJ1dAorICAgIHRob3NlIHVzZXMgYXJlIGludGVybmFsIHRvIHRoZSBhY2Nl c3MgbWV0aG9kIGFuZCBpbmRlcGVuZGVudCBvZiB0aGUKKyAgICB0YWJsZS1BTSBzeW5jaHJvbml6 YXRpb24gZGVzY3JpYmVkIGhlcmUuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFdoZXRo ZXIgYSBwaW4gc2hvdWxkIGJlIGhlbGQgd2hlbiByZXR1cm5pbmcgYSBiYXRjaCBpcyBjb250cm9s bGVkIGJ5IHRoZQorICAgIDxzdHJ1Y3RmaWVsZD5kcm9wUGluPC9zdHJ1Y3RmaWVsZD4gZmxhZyBp biB0aGUgPHR5cGU+QmF0Y2hRdWV1ZTwvdHlwZT4KKyAgICBzdHJ1Y3R1cmUuIFdoZW4gPGxpdGVy YWw+ZHJvcFBpbjwvbGl0ZXJhbD4gaXMgdHJ1ZSwgdGhlIGluZGV4IGFjY2VzcyBtZXRob2QKKyAg ICBkcm9wcyB0aGUgcGluIGJlZm9yZSByZXR1cm5pbmcgdGhlIGJhdGNoLCB3aGljaCBhdm9pZHMg YmxvY2tpbmcKKyAgICA8Y29tbWFuZD5WQUNVVU08L2NvbW1hbmQ+LiBXaGVuIDxsaXRlcmFsPmRy b3BQaW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUKKyAgICBpbmRleCBhY2Nlc3MgbWV0aG9kIG11 c3QgaG9sZCB0aGUgcGluIHVudGlsIHRoZSBiYXRjaCBpcyBmcmVlZCB2aWEKKyAgICA8ZnVuY3Rp b24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPi4gIFRoZSBjb3JlIHN5c3RlbSBzZXRzIHRoZQorICAg IDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGZsYWcgYmFzZWQgb24gc2NhbiB0eXBlOiBpdCBp cyB0cnVlIGZvcgorICAgIE1WQ0MtY29tcGxpYW50IHNuYXBzaG90cyBvbiBsb2dnZWQgcmVsYXRp b25zICh1bmxlc3MgaW5kZXgtb25seSBzY2FucyBhcmUKKyAgICBpbiB1c2UpLCBhbmQgZmFsc2Ug b3RoZXJ3aXNlLgorICAgPC9wYXJhPgorCisgICA8cGFyYT4KKyAgICBXaGVuIDxsaXRlcmFsPmRy b3BQaW48L2xpdGVyYWw+IGlzIHRydWUgYW5kIHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGlzCisg ICAgZWFnZXIgYWJvdXQgZHJvcHBpbmcgcGlucywgaXQgbXVzdCBzYXZlIHRoZSBwYWdlJ3MgTFNO IGluIHRoZSBiYXRjaCBiZWZvcmUKKyAgICByZXR1cm5pbmcuIExhdGVyLCB3aGVuIDxmdW5jdGlv bj5hbWZyZWViYXRjaDwvZnVuY3Rpb24+IGlzIGNhbGxlZCBhbmQgdGhlCisgICAgYWNjZXNzIG1l dGhvZCB3aXNoZXMgdG8gc2V0IDxsaXRlcmFsPkxQX0RFQUQ8L2xpdGVyYWw+IGJpdHMgdG8gbWFy ayBkZWFkCisgICAgdHVwbGVzLCBpdCBtdXN0IHZlcmlmeSB0aGF0IHRoZSBwYWdlJ3MgTFNOIGhh cyBub3QgY2hhbmdlZCBzaW5jZSB0aGUgYmF0Y2gKKyAgICB3YXMgcmVhZC4gSWYgdGhlIExTTiBo YXMgY2hhbmdlZCwgdGhlIHBhZ2UgbWF5IGhhdmUgYmVlbiBtb2RpZmllZCBieQorICAgIGNvbmN1 cnJlbnQgYWN0aXZpdHkgYW5kIGl0IGlzIHVuc2FmZSB0byBzZXQgPGxpdGVyYWw+TFBfREVBRDwv bGl0ZXJhbD4gYml0cy4KKyAgICBUaGlzIExTTi1iYXNlZCB2YWxpZGF0aW9uIHNjaGVtZSBwcm90 ZWN0cyBhZ2FpbnN0IFRJRCByZWN5Y2xpbmcgcmFjZXMgd2hlbgorICAgIHBpbnMgaGF2ZSBiZWVu IGRyb3BwZWQuICBXaGVuIDxsaXRlcmFsPmRyb3BQaW48L2xpdGVyYWw+IGlzIGZhbHNlLCB0aGUg cGluCisgICAgcHJldmVudHMgdW5zYWZlIGNvbmN1cnJlbnQgcmVtb3ZhbCBvZiB0YWJsZSBUSUQg cmVmZXJlbmNlcyBieQorICAgIDxjb21tYW5kPlZBQ1VVTTwvY29tbWFuZD4sIHNvIG5vIExTTiBj aGVjayBpcyBuZWNlc3NhcnkuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBjb3Jl IHN5c3RlbSBwcm92aWRlcyB0aHJlZSB1dGlsaXR5IGZ1bmN0aW9ucyBmb3IgbWFuYWdpbmcgYmF0 Y2gKKyAgICByZXNvdXJjZXM6CisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF9hbGxv YzwvZnVuY3Rpb24+IGFsbG9jYXRlcyBhIG5ldyBiYXRjaCBvcgorICAgIHJldXNlcyBhIGNhY2hl ZCBvbmUsCisgICAgPGZ1bmN0aW9uPmluZGV4YW1fdXRpbF9iYXRjaF91bmxvY2s8L2Z1bmN0aW9u PiBkcm9wcyB0aGUgbG9jayBhbmQKKyAgICBjb25kaXRpb25hbGx5IGRyb3BzIHRoZSBwaW4gb24g YSBiYXRjaCdzIGluZGV4IHBhZ2UgKGJhc2VkIG9uIHRoZQorICAgIDxsaXRlcmFsPmRyb3BQaW48 L2xpdGVyYWw+IHNldHRpbmcpLCBhbmQKKyAgICA8ZnVuY3Rpb24+aW5kZXhhbV91dGlsX2JhdGNo X3JlbGVhc2U8L2Z1bmN0aW9uPiBmcmVlcyBvciBjYWNoZXMgYSBiYXRjaC4KKyAgICBJbmRleCBh Y2Nlc3MgbWV0aG9kcyBzaG91bGQgdXNlIHRoZXNlIHV0aWxpdGllcyByYXRoZXIgdGhhbiBtYW5h Z2luZworICAgIGJ1ZmZlcnMgZGlyZWN0bHkuICBUaGUgPGZpbGVuYW1lPnNyYy9iYWNrZW5kL2Fj Y2Vzcy9uYnRyZWUvPC9maWxlbmFtZT4KKyAgICBpbXBsZW1lbnRhdGlvbiBwcm92aWRlcyBhIHJl ZmVyZW5jZSBleGFtcGxlIG9mIGNvcnJlY3QgdXNhZ2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJh PgorICAgIE5vdGUgdGhhdCA8ZnVuY3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiBpcyBjYWxs ZWQgb25seSBieSB0aGUgY29yZSBjb2RlCisgICAgYW5kIHRhYmxlIGFjY2VzcyBtZXRob2QsIG5l dmVyIGJ5IHRoZSBpbmRleCBhY2Nlc3MgbWV0aG9kIGl0c2VsZi4gVGhlCisgICAgaW5kZXggQU0g bXVzdCBub3QgYXNzdW1lIHRoYXQgYSBjYWxsIHRvIDxmdW5jdGlvbj5hbWZyZWViYXRjaDwvZnVu Y3Rpb24+CisgICAgd2lsbCB0YWtlIHBsYWNlIGJlZm9yZSBhbm90aGVyIGNhbGwgdG8gPGZ1bmN0 aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPgorICAgIChmb3IgdGhlIHNhbWUgaW5kZXggc2Nhbikg dGFrZXMgcGxhY2UuCisgICA8L3BhcmE+CisKKyAgIDxwYXJhPgorICAgIFRoZSBpbmRleCBBTSBt dXN0IGFsc28gYXZvaWQgcmVseWluZyBvbiB0aGUgY29yZSBjb2RlIGNhbGxpbmcKKyAgICA8ZnVu Y3Rpb24+YW1mcmVlYmF0Y2g8L2Z1bmN0aW9uPiB3aXRoIGJhdGNoZXMgdGhhdCBhcmUgaW4gYW55 IHBhcnRpY3VsYXIKKyAgICBvcmRlci4gIEZvciBleGFtcGxlLCBpdCBpcyBub3Qgb2theSBmb3Ig YW4gaW5kZXggQU0gdG8gYXNzdW1lIHRoYXQgY2FsbHMKKyAgICB0byA8ZnVuY3Rpb24+YW1mcmVl YmF0Y2g8L2Z1bmN0aW9uPiB3aWxsIHRha2UgcGxhY2UgaW4gdGhlIHNhbWUgb3JkZXIgYXMKKyAg ICB0aGUgPGZ1bmN0aW9uPmFtZ2V0YmF0Y2g8L2Z1bmN0aW9uPiBjYWxscyB0aGF0IGluaXRpYWxs eQorICAgIGFsbG9jYXRlZC9wb3B1bGF0ZWQvcmV0dXJuZWQgZWFjaCBiYXRjaC4KKyAgIDwvcGFy YT4KKworICA8L3NlY3QyPgorCiAgPC9zZWN0MT4KIAogIDxzZWN0MSBpZD0iaW5kZXgtdW5pcXVl LWNoZWNrcyI+CmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21s IGIvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAppbmRleCA3N2M1YTc2M2QuLjU1 YjcyMjJlOSAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFibGUuc2dtbAor KysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCkBAIC0xMTUyLDEyICsxMTUy LDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVyIj5udW1l cmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAgICAgIDwvcGFyYT4KIAogICAgICA8cGFy YT4KLSAgICAgIFRoZSBhY2Nlc3MgbWV0aG9kIG11c3Qgc3VwcG9ydCA8bGl0ZXJhbD5hbWdldHR1 cGxlPC9saXRlcmFsPiAoc2VlIDx4cmVmCi0gICAgICBsaW5rZW5kPSJpbmRleGFtIi8+KTsgYXQg cHJlc2VudCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4KLSAgICAgIGNhbm5vdCBi ZSB1c2VkLiAgQWx0aG91Z2ggaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4g dXNpbmcKLSAgICAgIEItdHJlZSBvciBoYXNoIGluZGV4ZXMgd2l0aCBhbiBleGNsdXNpb24gY29u c3RyYWludCwgYmVjYXVzZSB0aGlzCi0gICAgICBkb2VzIG5vdGhpbmcgdGhhdCBhbiBvcmRpbmFy eSB1bmlxdWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4KLSAgICAgIFNvIGluIHByYWN0 aWNlIHRoZSBhY2Nlc3MgbWV0aG9kIHdpbGwgYWx3YXlzIGJlIDxhY3JvbnltPkdpU1Q8L2Fjcm9u eW0+IG9yCisgICAgICBUaGUgYWNjZXNzIG1ldGhvZCBtdXN0IHN1cHBvcnQgZWl0aGVyIDxsaXRl cmFsPmFtZ2V0dHVwbGU8L2xpdGVyYWw+CisgICAgICBvciA8bGl0ZXJhbD5hbWdldGJhdGNoPC9s aXRlcmFsPiAoc2VlIDx4cmVmIGxpbmtlbmQ9ImluZGV4YW0iLz4pOyBhdAorICAgICAgcHJlc2Vu dCB0aGlzIG1lYW5zIDxhY3JvbnltPkdJTjwvYWNyb255bT4gY2Fubm90IGJlIHVzZWQuICBBbHRo b3VnaAorICAgICAgaXQncyBhbGxvd2VkLCB0aGVyZSBpcyBsaXR0bGUgcG9pbnQgaW4gdXNpbmcg Qi10cmVlIG9yIGhhc2ggaW5kZXhlcworICAgICAgd2l0aCBhbiBleGNsdXNpb24gY29uc3RyYWlu dCwgYmVjYXVzZSB0aGlzIGRvZXMgbm90aGluZyB0aGF0IGFuCisgICAgICBvcmRpbmFyeSB1bmlx dWUgY29uc3RyYWludCBkb2Vzbid0IGRvIGJldHRlci4gIFNvIGluIHByYWN0aWNlIHRoZQorICAg ICAgYWNjZXNzIG1ldGhvZCB3aWxsIGFsd2F5cyBiZSA8YWNyb255bT5HaVNUPC9hY3JvbnltPiBv cgogICAgICAgPGFjcm9ueW0+U1AtR2lTVDwvYWNyb255bT4uCiAgICAgIDwvcGFyYT4KIApkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5j IGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9pbmRleF9hbS9kdW1teV9pbmRleF9hbS5jCmluZGV4 IDllYjhmMGE2Yy4uOWQ0ZmRkZWM0IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9tb2R1bGVzL2R1bW15 X2luZGV4X2FtL2R1bW15X2luZGV4X2FtLmMKKysrIGIvc3JjL3Rlc3QvbW9kdWxlcy9kdW1teV9p bmRleF9hbS9kdW1teV9pbmRleF9hbS5jCkBAIC0zMTcsMTAgKzMxNywxMSBAQCBkaWhhbmRsZXIo UEdfRlVOQ1RJT05fQVJHUykKIAkJLmFtYmVnaW5zY2FuID0gZGliZWdpbnNjYW4sCiAJCS5hbXJl c2NhbiA9IGRpcmVzY2FuLAogCQkuYW1nZXR0dXBsZSA9IE5VTEwsCisJCS5hbWdldGJhdGNoID0g TlVMTCwKKwkJLmFtZnJlZWJhdGNoID0gTlVMTCwKIAkJLmFtZ2V0Yml0bWFwID0gTlVMTCwKIAkJ LmFtZW5kc2NhbiA9IGRpZW5kc2NhbiwKLQkJLmFtbWFya3BvcyA9IE5VTEwsCi0JCS5hbXJlc3Ry cG9zID0gTlVMTCwKKwkJLmFtcG9zcmVzZXQgPSBOVUxMLAogCQkuYW1lc3RpbWF0ZXBhcmFsbGVs c2NhbiA9IE5VTEwsCiAJCS5hbWluaXRwYXJhbGxlbHNjYW4gPSBOVUxMLAogCQkuYW1wYXJhbGxl bHJlc2NhbiA9IE5VTEwsCmRpZmYgLS1naXQgYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMu bGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CmluZGV4IDA5ZTdmMWQ0Mi4u YTIyZTZmYzRiIDEwMDY0NAotLS0gYS9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdAor KysgYi9zcmMvdG9vbHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdApAQCAtMjI2LDggKzIyNiw2IEBA IEJUU2Nhbkluc2VydERhdGEKIEJUU2NhbktleVByZXByb2MKIEJUU2Nhbk9wYXF1ZQogQlRTY2Fu T3BhcXVlRGF0YQotQlRTY2FuUG9zRGF0YQotQlRTY2FuUG9zSXRlbQogQlRTaGFyZWQKIEJUU29y dEFycmF5Q29udGV4dAogQlRTcG9vbApAQCAtMzQ3MCwxMiArMzQ2OCwxMCBAQCBhbWdldHR1cGxl X2Z1bmN0aW9uCiBhbWluaXRwYXJhbGxlbHNjYW5fZnVuY3Rpb24KIGFtaW5zZXJ0X2Z1bmN0aW9u CiBhbWluc2VydGNsZWFudXBfZnVuY3Rpb24KLWFtbWFya3Bvc19mdW5jdGlvbgogYW1vcHRpb25z X2Z1bmN0aW9uCiBhbXBhcmFsbGVscmVzY2FuX2Z1bmN0aW9uCiBhbXByb3BlcnR5X2Z1bmN0aW9u CiBhbXJlc2Nhbl9mdW5jdGlvbgotYW1yZXN0cnBvc19mdW5jdGlvbgogYW10cmFuc2xhdGVfY21w dHlwZV9mdW5jdGlvbgogYW10cmFuc2xhdGVfc3RyYXRlZ3lfZnVuY3Rpb24KIGFtdmFjdXVtY2xl YW51cF9mdW5jdGlvbgotLSAKMi41MS4wCgo= --00000000000026d6270647d0c7f3 Content-Type: application/octet-stream; name="v6-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Disposition: attachment; filename="v6-0002-Add-prefetching-to-index-scans-using-batch-interf.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mk4cbt183 RnJvbSBiMjIyODBmMDgzM2MzZjk2MzhhYTNmYmVjYWUxMGJmMGJhOWRhNDU1IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBHZW9naGVnYW4gPHBnQGJvd3QuaWU+CkRhdGU6IFNh dCwgMTUgTm92IDIwMjUgMTQ6MDM6NTggLTA1MDAKU3ViamVjdDogW1BBVENIIHY2IDIvNF0gQWRk IHByZWZldGNoaW5nIHRvIGluZGV4IHNjYW5zIHVzaW5nIGJhdGNoIGludGVyZmFjZXMuCgpUaGlz IGNvbW1pdCBpbXBsZW1lbnRzIEkvTyBwcmVmZXRjaGluZyBmb3IgaW5kZXggc2NhbnMsIG1hZGUg cG9zc2libGUgYnkKdGhlIHJlY2VudCBhZGRpdGlvbiBvZiBiYXRjaGluZyBpbnRlcmZhY2VzIHRv IGJvdGggdGhlIHRhYmxlIEFNIGFuZAppbmRleCBBTSBBUElzLgoKVGhlIGFtZ2V0YmF0Y2ggaW5k ZXggQU0gaW50ZXJmYWNlIHByb3ZpZGVzIGJhdGNoZXMgb2YgVElEcyAocmF0aGVyIHRoYW4Kb25l IGF0IGEgdGltZSkgZnJvbSBhIHNpbmdsZSBpbmRleCBsZWFmIHBhZ2UsIGFuZCBhbGxvd3MgbXVs dGlwbGUKYmF0Y2hlcyB0byBiZSBoZWxkIGluIG1lbW9yeS9waW5uZWQgc2ltdWx0YW5lb3VzbHku ICBUaGlzIGdpdmVzIHRoZQp0YWJsZSBBTSB0aGUgZnJlZWRvbSB0byByZWFkYWhlYWQgd2l0aGlu IGFuIGluZGV4IHNjYW4sIHdoaWNoIGlzIGNydWNpYWwKZm9yIEkvTyBwcmVmZXRjaGluZyB3aXRo IGNlcnRhaW4gd29ya2xvYWRzICh3b3JrbG9hZHMgdGhhdCB3b3VsZApvdGhlcndpc2UgYmUgdW5h YmxlIHRvIGtlZXAgYSBzdWZmaWNpZW50bHkgaGlnaCBwcmVmZXRjaCBkaXN0YW5jZSBmb3IKaGVh cCBibG9jayBJL08pLiAgUHJlZmV0Y2hpbmcgaXMgaW1wbGVtZW50ZWQgdXNpbmcgYSByZWFkIHN0 cmVhbSB1bmRlcgp0aGUgY29udHJvbCBvZiB0aGUgdGFibGUgQU0uCgpYWFggV2hlbiB0aGUgYmF0 Y2ggcXVldWUgcmVhY2hlcyBjYXBhY2l0eSwgdGhlIHN0cmVhbSBwYXVzZXMgdW50aWwKdGhlIHNj YW4gY2F0Y2hlcyB1cCBhbmQgZnJlZXMgc29tZSBiYXRjaGVzLiAgV2UgbmVlZCBhIG1vcmUgcHJp bmNpcGxlZAphcHByb2FjaCBoZXJlLiAgRXNzZW50aWFsbHksIHdlIG5lZWQgaW5mcmFzdHJ1Y3R1 cmUgdGhhdCBhbGxvd3MgYSByZWFkCnN0cmVhbSBjYWxsIGJhY2sgdG8gdGVsbCB0aGUgcmVhZCBz dHJlYW0gdG8gImJhY2sgb2ZmIiB3aXRob3V0IGl0IGZ1bGx5CmVuZGluZy9yZXNldHRpbmcgdGhl IHJlYWQgc3RyZWFtLgoKTm90ZTogRm9yIG5vdyBwcmVmZXRjaGluZyBpcyB0ZW1wb3JhcmlseSBk aXNhYmxlZCBkdXJpbmcgaW5kZXgtb25seQpzY2FucywgcGVuZGluZyB0aGUgcmVpbnRyb2R1Y3Rp b24gb2YgdmlzaWJpbGl0eSBtYXAgY2FjaGluZyBpbiBiYXRjaGVzLgpQcmV2aW91cyB2ZXJzaW9u cyBvZiB0aGUgcGF0Y2ggc2VyaWVzIGhhZCB0aGF0LCBidXQgaXQgd2FzIHJlbW92ZWQgd2hlbgp3 ZSBtb3ZlZCBvdmVyIHRvIHRoZSBuZXcgdGFibGUgQU0gaW50ZXJmYWNlLgoKQXV0aG9yOiBUb21h cyBWb25kcmEgPHRvbWFzQHZvbmRyYS5tZT4KQXV0aG9yOiBQZXRlciBHZW9naGVnYW4gPHBnQGJv d3QuaWU+ClJldmlld2VkLUJ5OiBBbmRyZXMgRnJldW5kIDxhbmRyZXNAYW5hcmF6ZWwuZGU+ClJl dmlld2VkLUJ5OiBUaG9tYXMgTXVucm8gPHRob21hcy5tdW5yb0BnbWFpbC5jb20+CkRpc2N1c3Np b246IGh0dHBzOi8vcG9zdGdyLmVzL20vY2Y4NWY0NmYtYjAyZi0wNWIyLTUyNDgtNTAwMGI4OTRl YmFiQGVudGVycHJpc2VkYi5jb20KLS0tCiBzcmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oICAg ICAgICAgICAgICAgICAgfCAgMzMgKy0KIHNyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmggICAg ICAgICAgICAgICAgICB8ICAxNSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvY29zdC5oICAgICAg ICAgICAgICAgICAgfCAgIDEgKwogc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRs ZXIuYyAgICAgIHwgMzg2ICsrKysrKysrKysrKysrKysrLQogc3JjL2JhY2tlbmQvYWNjZXNzL2lu ZGV4L2luZGV4YW0uYyAgICAgICAgICAgIHwgIDEwICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvaW5k ZXgvaW5kZXhiYXRjaC5jICAgICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9w YXRoL2Nvc3RzaXplLmMgICAgICAgICB8ICAgMSArCiBzcmMvYmFja2VuZC9zdG9yYWdlL2Fpby9y ZWFkX3N0cmVhbS5jICAgICAgICAgfCAgMTQgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3Vj X3BhcmFtZXRlcnMuZGF0ICAgICB8ICAgNyArCiBzcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3Rn cmVzcWwuY29uZi5zYW1wbGUgfCAgIDEgKwogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9zeXN2 aWV3cy5vdXQgICAgICAgIHwgICAzICstCiAxMSBmaWxlcyBjaGFuZ2VkLCA0ODEgaW5zZXJ0aW9u cygrKSwgNyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvcmVs c2Nhbi5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAppbmRleCBkNmEzNGMxOTMuLjhk Y2ZlYWU2ZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL3JlbHNjYW4uaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvcmVsc2Nhbi5oCkBAIC0yMCw2ICsyMCw3IEBACiAjaW5jbHVkZSAi bm9kZXMvdGlkYml0bWFwLmgiCiAjaW5jbHVkZSAicG9ydC9hdG9taWNzLmgiCiAjaW5jbHVkZSAi c3RvcmFnZS9idWYuaCIKKyNpbmNsdWRlICJzdG9yYWdlL3JlYWRfc3RyZWFtLmgiCiAjaW5jbHVk ZSAic3RvcmFnZS9yZWxmaWxlbG9jYXRvci5oIgogI2luY2x1ZGUgInN0b3JhZ2Uvc3Bpbi5oIgog I2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgiCkBAIC0xMjQsNiArMTI1LDcgQEAgdHlwZWRlZiBz dHJ1Y3QgUGFyYWxsZWxCbG9ja1RhYmxlU2NhbldvcmtlckRhdGEgKlBhcmFsbGVsQmxvY2tUYWJs ZVNjYW5Xb3JrZXI7CiB0eXBlZGVmIHN0cnVjdCBJbmRleEZldGNoVGFibGVEYXRhCiB7CiAJUmVs YXRpb24JcmVsOworCVJlYWRTdHJlYW0gKnJzOwogfSBJbmRleEZldGNoVGFibGVEYXRhOwogCiAv KgpAQCAtMjIwLDggKzIyMiwxNCBAQCB0eXBlZGVmIHN0cnVjdCBCYXRjaEluZGV4U2NhbkRhdGEg KkJhdGNoSW5kZXhTY2FuOwogICogTWF4aW11bSBudW1iZXIgb2YgYmF0Y2hlcyAobGVhZiBwYWdl cykgd2UgY2FuIGtlZXAgaW4gbWVtb3J5LiAgV2UgbmVlZCBhCiAgKiBtaW5pbXVtIG9mIHR3bywg c2luY2Ugd2UnbGwgb25seSBjb25zaWRlciByZWxlYXNpbmcgb25lIGJhdGNoIHdoZW4gYW5vdGhl cgogICogaXMgcmVhZC4KKyAqCisgKiBUaGUgY2hvaWNlIG9mIDY0IGJhdGNoZXMgaXMgYXJiaXRy YXJ5LiAgSXQncyBhYm91dCAxTUIgb2YgZGF0YSB3aXRoIDhLQgorICogcGFnZXMgKDUxMmtCIGZv ciBwYWdlcywgYW5kIHRoZW4gYSBiaXQgb2Ygb3ZlcmhlYWQpLiBXZSBzaG91bGQgbm90IHJlYWxs eQorICogbmVlZCB0aGlzIG1hbnkgYmF0Y2hlcyBpbiBtb3N0IGNhc2VzLCB0aG91Z2guIFRoZSBy ZWFkIHN0cmVhbSBsb29rcyBhaGVhZAorICoganVzdCBlbm91Z2ggdG8gcXVldWUgZW5vdWdoIElP cywgYWRqdXN0aW5nIHRoZSBkaXN0YW5jZSAoVElEcywgYnV0CisgKiB1bHRpbWF0ZWx5IHRoZSBu dW1iZXIgb2YgZnV0dXJlIGJhdGNoZXMpIHRvIG1lZXQgdGhhdC4KICAqLwotI2RlZmluZSBJTkRF WF9TQ0FOX01BWF9CQVRDSEVTCQkyCisjZGVmaW5lIElOREVYX1NDQU5fTUFYX0JBVENIRVMJCTY0 CiAjZGVmaW5lIElOREVYX1NDQU5fQ0FDSEVfQkFUQ0hFUwkyCiAjZGVmaW5lIElOREVYX1NDQU5f QkFUQ0hfQ09VTlQoc2NhbikgXAogCSgoc2NhbiktPmJhdGNocXVldWUtPm5leHRCYXRjaCAtIChz Y2FuKS0+YmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQpAQCAtMjY4LDEyICsyNzYsMzUgQEAgdHlwZWRl ZiBzdHJ1Y3QgQmF0Y2hJbmRleFNjYW5EYXRhICpCYXRjaEluZGV4U2NhbjsKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgQmF0Y2hRdWV1ZQogeworCWJvb2wJCXJlc2V0OworCisJLyoKKwkgKiBEaWQgd2Ug ZGlzYWJsZSBwcmVmZXRjaGluZy91c2Ugb2YgYSByZWFkIHN0cmVhbSBiZWNhdXNlIGl0IGRpZG4n dCBwYXkKKwkgKiBmb3IgaXRzZWxmPworCSAqLworCWJvb2wJCXByZWZldGNoaW5nTG9ja2VkSW47 CisJYm9vbAkJZGlzYWJsZWQ7CisKKwkvKgorCSAqIER1cmluZyBwcmVmZXRjaGluZywgY3VycmVu dFByZWZldGNoQmxvY2sgaXMgdGhlIHRhYmxlIEFNIGJsb2NrIG51bWJlcgorCSAqIHRoYXQgd2Fz IHJldHVybmVkIGJ5IG91ciByZWFkIHN0cmVhbSBjYWxsYmFjayBtb3N0IHJlY2VudGx5LiAgVXNl ZCB0bworCSAqIHN1cHByZXNzIGR1cGxpY2F0ZSBzdWNjZXNzaXZlIHJlYWQgc3RyZWFtIGJsb2Nr IHJlcXVlc3RzLgorCSAqCisJICogUHJlZmV0Y2hpbmcgY2FuIHN0aWxsIHBlcmZvcm0gbm9uLXN1 Y2Nlc3NpdmUgcmVxdWVzdHMgZm9yIHRoZSBzYW1lCisJICogYmxvY2sgbnVtYmVyIChpbiBnZW5l cmFsIHdlJ3JlIHByZWZldGNoaW5nIGluIGV4YWN0bHkgdGhlIHNhbWUgb3JkZXIKKwkgKiB0aGF0 IHRoZSBzY2FuIHdpbGwgcmV0dXJuIHRhYmxlIEFNIFRJRHMgaW4pLiAgV2UgbmVlZCB0byBhdm9p ZAorCSAqIGR1cGxpY2F0ZSBzdWNjZXNzaXZlIHJlcXVlc3RzIGJlY2F1c2UgdGFibGUgQU1zIGV4 cGVjdCB0byBiZSBhYmxlIHRvCisJICogaGFuZyBvbiB0byBidWZmZXIgcGlucyBhY3Jvc3MgdGFi bGVfaW5kZXhfZmV0Y2hfdHVwbGUgY2FsbHMuCisJICovCisJQmxvY2tOdW1iZXIgY3VycmVudFBy ZWZldGNoQmxvY2s7CisKIAkvKiBDdXJyZW50IHNjYW4gZGlyZWN0aW9uLCBmb3IgdGhlIGN1cnJl bnRseSBsb2FkZWQgYmF0Y2hlcyAqLwogCVNjYW5EaXJlY3Rpb24gZGlyZWN0aW9uOwogCiAJLyog Y3VycmVudCBwb3NpdGlvbnMgaW4gYmF0Y2hlc1tdIGZvciBzY2FuICovCiAJQmF0Y2hRdWV1ZUl0 ZW1Qb3MgcmVhZFBvczsJLyogcmVhZCBwb3NpdGlvbiAqLwogCUJhdGNoUXVldWVJdGVtUG9zIG1h cmtQb3M7CS8qIG1hcmsvcmVzdG9yZSBwb3NpdGlvbiAqLworCUJhdGNoUXVldWVJdGVtUG9zIHN0 cmVhbVBvczsJLyogc3RyZWFtIHBvc2l0aW9uIChmb3IgcHJlZmV0Y2hpbmcpICovCiAKIAlCYXRj aEluZGV4U2NhbiBtYXJrQmF0Y2g7CiAKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy90 YWJsZWFtLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCmluZGV4IDM4NDY1NmNlMS4u MDc2OTVhZGQwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvdGFibGVhbS5oCisrKyBi L3NyYy9pbmNsdWRlL2FjY2Vzcy90YWJsZWFtLmgKQEAgLTQ0OCw2ICs0NDgsMjEgQEAgdHlwZWRl ZiBzdHJ1Y3QgVGFibGVBbVJvdXRpbmUKIAkJCQkJCQkJCSAgIFNjYW5EaXJlY3Rpb24gZGlyZWN0 aW9uLAogCQkJCQkJCQkJICAgVHVwbGVUYWJsZVNsb3QgKnNsb3QpOwogCisJLyoKKwkgKiBSZWFk IHN0cmVhbSBjYWxsYmFjaywgdXNlZCB0byBwZXJmb3JtIEkvTyBwcmVmZXRjaGluZyBvZiB0YWJs ZSBBTSBwYWdlcworCSAqIGR1cmluZyBgaW5kZXhfZ2V0bmV4dF9zbG90YCBpbmRleCBzY2Fucy4K KwkgKgorCSAqIFRoaXMgY2FsbGJhY2sgaXMgZGlyZWN0bHkgcGFzc2VkIHRvIHJlYWRfc3RyZWFt X2JlZ2luX3JlbGF0aW9uLCBmcm9tCisJICogYmF0Y2hfZ2V0bmV4dCByb3V0aW5lLiAgSXQgd2ls bCBvbmx5IGJlIHVzZWQgZHVyaW5nIHNjYW5zIHdob3NlIGluZGV4CisJICogQU0gdXNlcyB0aGUg YW1nZXRiYXRjaCBpbnRlcmZhY2UuICAoU2NhbnMgd2l0aCBhbWdldHR1cGxlLWJhc2VkIGluZGV4 CisJICogQU1zIGNhbm5vdCByZWFzb25hYmx5IGJlIHVzZWQgZm9yIEkvTyBwcmVmZXRjaGluZywg c2luY2UgaXRzIG9wYXF1ZQorCSAqIHR1cGxlLWF0LWEtdGltZSBpbnRlcmZhY2UgbWFrZXMgaXQg aW1wb3NzaWJsZSB0byBzY2hlZHVsZSBpbmRleCBzY2FuCisJICogd29yayBzZW5zaWJseS4pCisJ ICovCisJQmxvY2tOdW1iZXIgKCppbmRleF9nZXRuZXh0X3N0cmVhbSkgKFJlYWRTdHJlYW0gKnN0 cmVhbSwKKwkJCQkJCQkJCQkgdm9pZCAqY2FsbGJhY2tfcHJpdmF0ZV9kYXRhLAorCQkJCQkJCQkJ CSB2b2lkICpwZXJfYnVmZmVyX2RhdGEpOworCiAJLyoKIAkgKiBGZXRjaCB0dXBsZSBhdCBgdGlk YCBpbnRvIGBzbG90YCwgYWZ0ZXIgZG9pbmcgYSB2aXNpYmlsaXR5IHRlc3QKIAkgKiBhY2NvcmRp bmcgdG8gYHNuYXBzaG90YC4gSWYgYSB0dXBsZSB3YXMgZm91bmQgYW5kIHBhc3NlZCB0aGUgdmlz aWJpbGl0eQpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2Nvc3QuaCBiL3NyYy9p bmNsdWRlL29wdGltaXplci9jb3N0LmgKaW5kZXggMDdiOGJmYTYzLi4zMTIzNmNlYWMgMTAwNjQ0 Ci0tLSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9jb3N0LmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0 aW1pemVyL2Nvc3QuaApAQCAtNTEsNiArNTEsNyBAQCBleHRlcm4gUEdETExJTVBPUlQgQ29zdCBk aXNhYmxlX2Nvc3Q7CiBleHRlcm4gUEdETExJTVBPUlQgaW50IG1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXI7CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVfc2Vxc2NhbjsKIGV4 dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV9pbmRleHNjYW47CitleHRlcm4gUEdETExJTVBP UlQgYm9vbCBlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoOwogZXh0ZXJuIFBHRExMSU1QT1JUIGJv b2wgZW5hYmxlX2luZGV4b25seXNjYW47CiBleHRlcm4gUEdETExJTVBPUlQgYm9vbCBlbmFibGVf Yml0bWFwc2NhbjsKIGV4dGVybiBQR0RMTElNUE9SVCBib29sIGVuYWJsZV90aWRzY2FuOwpkaWZm IC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVyLmMKaW5kZXggZGQ0NmNjYjNiLi5hZDQ5 ODdkNTggMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbV9oYW5kbGVy LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL2hlYXAvaGVhcGFtX2hhbmRsZXIuYwpAQCAtMzYs NiArMzYsNyBAQAogI2luY2x1ZGUgImNvbW1hbmRzL3Byb2dyZXNzLmgiCiAjaW5jbHVkZSAiZXhl Y3V0b3IvZXhlY3V0b3IuaCIKICNpbmNsdWRlICJtaXNjYWRtaW4uaCIKKyNpbmNsdWRlICJvcHRp bWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgInBnc3RhdC5oIgogI2luY2x1ZGUgInN0b3JhZ2UvYnVm bWdyLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9idWZwYWdlLmgiCkBAIC01OSw2ICs2MCw5IEBAIHN0 YXRpYyBCbG9ja051bWJlciBoZWFwYW1fc2Nhbl9nZXRfYmxvY2tzX2RvbmUoSGVhcFNjYW5EZXNj IGhzY2FuKTsKIHN0YXRpYyBib29sIEJpdG1hcEhlYXBTY2FuTmV4dEJsb2NrKFRhYmxlU2NhbkRl c2Mgc2NhbiwKIAkJCQkJCQkJCWJvb2wgKnJlY2hlY2ssCiAJCQkJCQkJCQl1aW50NjQgKmxvc3N5 X3BhZ2VzLCB1aW50NjQgKmV4YWN0X3BhZ2VzKTsKK3N0YXRpYyBCbG9ja051bWJlciBoZWFwYW1f Z2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVhbSAqc3RyZWFtLAorCQkJCQkJCQkJCSB2b2lkICpjYWxs YmFja19wcml2YXRlX2RhdGEsCisJCQkJCQkJCQkJIHZvaWQgKnBlcl9idWZmZXJfZGF0YSk7CiAK IAogLyogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC04NCw2ICs4OCw3IEBAIGhlYXBhbV9pbmRleF9mZXRj aF9iZWdpbihSZWxhdGlvbiByZWwpCiAJSW5kZXhGZXRjaEhlYXBEYXRhICpoc2NhbiA9IHBhbGxv Y19vYmplY3QoSW5kZXhGZXRjaEhlYXBEYXRhKTsKIAogCWhzY2FuLT54c19iYXNlLnJlbCA9IHJl bDsKKwloc2Nhbi0+eHNfYmFzZS5ycyA9IE5VTEw7CiAJaHNjYW4tPnhzX2NidWYgPSBJbnZhbGlk QnVmZmVyOwogCWhzY2FuLT54c19ibGsgPSBJbnZhbGlkQmxvY2tOdW1iZXI7CiAJaHNjYW4tPnZt YnVmID0gSW52YWxpZEJ1ZmZlcjsKQEAgLTk2LDYgKzEwMSw5IEBAIGhlYXBhbV9pbmRleF9mZXRj aF9yZXNldChJbmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogewogCUluZGV4RmV0Y2hIZWFwRGF0 YSAqaHNjYW4gPSAoSW5kZXhGZXRjaEhlYXBEYXRhICopIHNjYW47CiAKKwlpZiAoc2Nhbi0+cnMp CisJCXJlYWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnJzKTsKKwogCS8qIGRlbGliZXJhdGVseSBkb24n dCBkcm9wIFZNIGJ1ZmZlciBwaW4gaGVyZSAqLwogCWlmIChCdWZmZXJJc1ZhbGlkKGhzY2FuLT54 c19jYnVmKSkKIAl7CkBAIC0xMTIsNiArMTIwLDkgQEAgaGVhcGFtX2luZGV4X2ZldGNoX2VuZChJ bmRleEZldGNoVGFibGVEYXRhICpzY2FuKQogCiAJaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0KHNj YW4pOwogCisJaWYgKHNjYW4tPnJzKQorCQlyZWFkX3N0cmVhbV9lbmQoc2Nhbi0+cnMpOworCiAJ aWYgKGhzY2FuLT52bWJ1ZiAhPSBJbnZhbGlkQnVmZmVyKQogCXsKIAkJUmVsZWFzZUJ1ZmZlciho c2Nhbi0+dm1idWYpOwpAQCAtMTQ5LDcgKzE2MCwxMCBAQCBoZWFwYW1faW5kZXhfZmV0Y2hfdHVw bGUoc3RydWN0IEluZGV4RmV0Y2hUYWJsZURhdGEgKnNjYW4sCiAJCSAqIFdoZW4gdXNpbmcgYSBy ZWFkIHN0cmVhbSwgdGhlIHN0cmVhbSB3aWxsIGFscmVhZHkga25vdyB3aGljaCBibG9jawogCQkg KiBudW1iZXIgY29tZXMgbmV4dCAodGhvdWdoIGFuIGFzc2VydGlvbiB3aWxsIHZlcmlmeSBhIG1h dGNoIGJlbG93KQogCQkgKi8KLQkJaHNjYW4tPnhzX2NidWYgPSBSZWFkQnVmZmVyKGhzY2FuLT54 c19iYXNlLnJlbCwgaHNjYW4tPnhzX2Jsayk7CisJCWlmIChzY2FuLT5ycykKKwkJCWhzY2FuLT54 c19jYnVmID0gcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoc2Nhbi0+cnMsIE5VTEwpOworCQllbHNl CisJCQloc2Nhbi0+eHNfY2J1ZiA9IFJlYWRCdWZmZXIoaHNjYW4tPnhzX2Jhc2UucmVsLCBoc2Nh bi0+eHNfYmxrKTsKIAogCQkvKgogCQkgKiBQcnVuZSBwYWdlIHdoZW4gaXQgaXMgcGlubmVkIGZv ciB0aGUgZmlyc3QgdGltZQpAQCAtMjc1LDYgKzI4OSwxNyBAQCBoZWFwX2JhdGNoX2dldG5leHQo SW5kZXhTY2FuRGVzYyBzY2FuLCBCYXRjaEluZGV4U2NhbiBwcmlvcmJhdGNoLAogCiAJCURFQlVH X0xPRygiYmF0Y2hfZ2V0bmV4dCBoZWFkQmF0Y2ggJWQgbmV4dEJhdGNoICVkIGJhdGNoICVwIiwK IAkJCQkgIGJhdGNocXVldWUtPmhlYWRCYXRjaCwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoLCBiYXRj aCk7CisKKwkJLyogRGVsYXkgaW5pdGlhbGl6aW5nIHN0cmVhbSB1bnRpbCByZWFkaW5nIGZyb20g c2NhbidzIHNlY29uZCBiYXRjaCAqLworCQlpZiAoIXNjYW4tPnhzX2hlYXBmZXRjaC0+cnMgJiYg IWJhdGNocXVldWUtPmRpc2FibGVkICYmIHByaW9yYmF0Y2ggJiYKKwkJCSFzY2FuLT54c193YW50 X2l0dXAgJiYJLyogWFhYIHByZWZldGNoaW5nIGRpc2FibGVkIGZvciBJb1MsIGZvcgorCQkJCQkJ CQkJICogbm93ICovCisJCQllbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoKQorCQkJc2Nhbi0+eHNf aGVhcGZldGNoLT5ycyA9CisJCQkJcmVhZF9zdHJlYW1fYmVnaW5fcmVsYXRpb24oUkVBRF9TVFJF QU1fREVGQVVMVCwgTlVMTCwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24sIE1BSU5f Rk9SS05VTSwKKwkJCQkJCQkJCQkgICBzY2FuLT5oZWFwUmVsYXRpb24tPnJkX3RhYmxlYW0tPmlu ZGV4X2dldG5leHRfc3RyZWFtLAorCQkJCQkJCQkJCSAgIHNjYW4sIDApOwogCX0KIAogCWJhdGNo X2Fzc2VydF9iYXRjaGVzX3ZhbGlkKHNjYW4pOwpAQCAtMzA3LDYgKzMzMiwxNiBAQCBoZWFwYW1f YmF0Y2hfZ2V0bmV4dF90aWQoSW5kZXhTY2FuRGVzYyBzY2FuLCBTY2FuRGlyZWN0aW9uIGRpcmVj dGlvbikKIAkvKiBJbml0aWFsaXplIGRpcmVjdGlvbiBvbiBmaXJzdCBjYWxsICovCiAJaWYgKGJh dGNocXVldWUtPmRpcmVjdGlvbiA9PSBOb01vdmVtZW50U2NhbkRpcmVjdGlvbikKIAkJYmF0Y2hx dWV1ZS0+ZGlyZWN0aW9uID0gZGlyZWN0aW9uOworCWVsc2UgaWYgKHVubGlrZWx5KGJhdGNocXVl dWUtPmRpc2FibGVkICYmIHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpKQorCXsKKwkJLyoKKwkJICog SGFuZGxlIGNhbmNlbGxpbmcgdGhlIHVzZSBvZiB0aGUgcmVhZCBzdHJlYW0gZm9yIHByZWZldGNo aW5nCisJCSAqLworCQliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisK KwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycyk7CisJCXNjYW4tPnhz X2hlYXBmZXRjaC0+cnMgPSBOVUxMOworCX0KIAogCS8qCiAJICogVHJ5IGFkdmFuY2luZyB0aGUg YmF0Y2ggcG9zaXRpb24uIElmIHRoYXQgZG9lc24ndCBzdWNjZWVkLCBpdCBtZWFucyB3ZQpAQCAt MzM3LDYgKzM3Miw0NiBAQCBuZXh0YmF0Y2g6CiAJewogCQloZWFwYW1fYmF0Y2hfcmV3aW5kKHNj YW4sIGJhdGNocXVldWUsIGRpcmVjdGlvbik7CiAJCXJlYWRQb3MtPmJhdGNoID0gYmF0Y2hxdWV1 ZS0+bmV4dEJhdGNoIC0gMTsKKworCQlpZiAoc2Nhbi0+eHNfaGVhcGZldGNoLT5ycykKKwkJCXJl YWRfc3RyZWFtX3Jlc2V0KHNjYW4tPnhzX2hlYXBmZXRjaC0+cnMpOworCQliYXRjaF9yZXNldF9w b3MoJmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CisJfQorCisJaWYgKElOREVYX1NDQU5fQkFUQ0hf TE9BREVEKHNjYW4sIHJlYWRQb3MtPmJhdGNoICsgMSkpCisJeworCQkvKiBhZHZhbmNlIHRvIHRo ZSBuZXh0IGJhdGNoICovCisJCXJlYWRQb3MtPmJhdGNoKys7CisKKwkJcmVhZEJhdGNoID0gSU5E RVhfU0NBTl9CQVRDSChzY2FuLCByZWFkUG9zLT5iYXRjaCk7CisKKwkJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXJlYWRQb3MtPml0ZW0gPSByZWFkQmF0Y2gtPmZp cnN0SXRlbTsKKwkJZWxzZQorCQkJcmVhZFBvcy0+aXRlbSA9IHJlYWRCYXRjaC0+bGFzdEl0ZW07 CisKKwkJYmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCByZWFkUG9zKTsKKworCQlpZiAocmVh ZFBvcy0+YmF0Y2ggIT0gYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoKQorCQl7CisJCQlCYXRjaEluZGV4 U2NhbiBoZWFkQmF0Y2ggPSBJTkRFWF9TQ0FOX0JBVENIKHNjYW4sCisJCQkJCQkJCQkJCQkJCWJh dGNocXVldWUtPmhlYWRCYXRjaCk7CisKKwkJCS8qIEZyZWUgdGhlIGhlYWQgYmF0Y2ggKGV4Y2Vw dCB3aGVuIGl0J3MgbWFya0JhdGNoKSAqLworCQkJYmF0Y2hfZnJlZShzY2FuLCBoZWFkQmF0Y2gp OworCisJCQkvKgorCQkJICogSW4gYW55IGNhc2UsIHJlbW92ZSB0aGUgYmF0Y2ggZnJvbSB0aGUg cmVndWxhciBxdWV1ZSwgZXZlbiBpZgorCQkJICogd2Uga2VwdCBpdCBmb3IgbWFyay9yZXN0b3Jl CisJCQkgKi8KKwkJCWJhdGNocXVldWUtPmhlYWRCYXRjaCsrOworCisJCQkvKiB3ZSBjYW4ndCBz a2lwIGFueSBiYXRjaGVzICovCisJCQlBc3NlcnQoYmF0Y2hxdWV1ZS0+aGVhZEJhdGNoID09IHJl YWRQb3MtPmJhdGNoKTsKKwkJfQorCisJCXBnc3RhdF9jb3VudF9pbmRleF90dXBsZXMoc2Nhbi0+ aW5kZXhSZWxhdGlvbiwgMSk7CisJCXJldHVybiBoZWFwYW1fYmF0Y2hfcmV0dXJuX3RpZChzY2Fu LCByZWFkQmF0Y2gsIHJlYWRQb3MpOwogCX0KIAogCWlmICgocmVhZEJhdGNoID0gaGVhcF9iYXRj aF9nZXRuZXh0KHNjYW4sIHJlYWRCYXRjaCwgZGlyZWN0aW9uKSkgIT0gTlVMTCkKQEAgLTM5NSw2 ICs0NzAsMzE0IEBAIG5leHRiYXRjaDoKIAlyZXR1cm4gTlVMTDsKIH0KIAorLyoKKyAqIGhlYXBf YmF0Y2hfYWR2YW5jZV9zdHJlYW1wb3MKKyAqCQlBZHZhbmNlIHN0cmVhbVBvcyB0byB0aGUgbmV4 dCBpdGVtIGR1cmluZyBwcmVmZXRjaGluZy4KKyAqCisgKiBNb3ZlIHRvIHRoZSBuZXh0IGl0ZW0g d2l0aGluIHRoZSBiYXRjaCBwb2ludGVkIHRvIGJ5IGNhbGxlcidzIHBvcy4KKyAqIEFkdmFuY2Vz IHRoZSBwb3NpdGlvbiB0byB0aGUgbmV4dCBpdGVtLCBlaXRoZXIgaW4gdGhlIHNhbWUgYmF0Y2gg b3IgdGhlCisgKiBmb2xsb3dpbmcgb25lIChpZiBhbHJlYWR5IGF2YWlsYWJsZSkuCisgKgorICog V2UgY2FuIGFkdmFuY2Ugb25seSBpZiB3ZSBhbHJlYWR5IGhhdmUgc29tZSBiYXRjaGVzIGxvYWRl ZCwgYW5kIHRoZXJlJ3MKKyAqIGVpdGhlciBlbm91Z2ggaXRlbXMgaW4gdGhlIGN1cnJlbnQgYmF0 Y2gsIG9yIHNvbWUgbW9yZSBpdGVtcyBpbiB0aGUKKyAqIHN1YnNlcXVlbnQgYmF0Y2hlcy4KKyAq CisgKiBJZiB0aGlzIGlzIHRoZSBmaXJzdCBhZHZhbmNlIChyaWdodCBhZnRlciBsb2FkaW5nIHRo ZSBpbml0aWFsL2hlYWQgYmF0Y2gpLAorICogcG9zaXRpb24gaXMgc3RpbGwgdW5kZWZpbmVkLiAg T3RoZXJ3aXNlIHdlIGV4cGVjdCB0aGUgcG9zaXRpb24gdG8gYmUgdmFsaWQuCisgKgorICogUmV0 dXJucyB0cnVlIGlmIHRoZSBwb3NpdGlvbiB3YXMgYWR2YW5jZWQsIGZhbHNlIG90aGVyd2lzZS4g IFRoZSBwb3NpdGlvbgorICogaXMgZ3VhcmFudGVlZCB0byBiZSB2YWxpZCBvbmx5IGFmdGVyIGEg c3VjY2Vzc2Z1bCBhZHZhbmNlLgorICovCitwZ19hdHRyaWJ1dGVfYWx3YXlzX2lubGluZQorc3Rh dGljIGJvb2wKK2hlYXBfYmF0Y2hfYWR2YW5jZV9zdHJlYW1wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu LCBCYXRjaFF1ZXVlSXRlbVBvcyAqc3RyZWFtUG9zLAorCQkJCQkJCSBTY2FuRGlyZWN0aW9uIGRp cmVjdGlvbikKK3sKKwlCYXRjaEluZGV4U2NhbiBzdHJlYW1CYXRjaDsKKworCS8qIG1ha2Ugc3Vy ZSB3ZSBoYXZlIGJhdGNoaW5nIGluaXRpYWxpemVkIGFuZCBjb25zaXN0ZW50ICovCisJYmF0Y2hf YXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CisKKwkvKiBzaG91bGQga25vdyBkaXJlY3Rpb24g Ynkgbm93ICovCisJQXNzZXJ0KGRpcmVjdGlvbiA9PSBzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rp b24pOworCUFzc2VydChkaXJlY3Rpb24gIT0gTm9Nb3ZlbWVudFNjYW5EaXJlY3Rpb24pOworCisJ LyogV2UgY2FuJ3QgYWR2YW5jZSBpZiB0aGVyZSBhcmUgbm8gYmF0Y2hlcyBhdmFpbGFibGUuICov CisJaWYgKElOREVYX1NDQU5fQkFUQ0hfQ09VTlQoc2NhbikgPT0gMCkKKwkJcmV0dXJuIGZhbHNl OworCisJLyoKKwkgKiBUaGUgcG9zaXRpb24gaXMgYWxyZWFkeSBkZWZpbmVkLCBzbyB3ZSBzaG91 bGQgaGF2ZSBzb21lIGJhdGNoZXMgbG9hZGVkCisJICogYW5kIHRoZSBwb3NpdGlvbiBoYXMgdG8g YmUgdmFsaWQgd2l0aCByZXNwZWN0IHRvIHRob3NlLgorCSAqLworCUFzc2VydCghSU5ERVhfU0NB Tl9QT1NfSU5WQUxJRChzdHJlYW1Qb3MpKTsKKwliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4s IHN0cmVhbVBvcyk7CisKKwkvKgorCSAqIEFkdmFuY2UgdG8gdGhlIG5leHQgaXRlbSBpbiB0aGUg c2FtZSBiYXRjaCwgaWYgdGhlcmUgYXJlIG1vcmUgaXRlbXMuIElmCisJICogd2UncmUgYXQgdGhl IGxhc3QgaXRlbSwgd2UnbGwgdHJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dCBiYXRjaCBsYXRlci4K KwkgKi8KKwlzdHJlYW1CYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nhbiwgc3RyZWFtUG9zLT5i YXRjaCk7CisKKwlpZiAoU2NhbkRpcmVjdGlvbklzRm9yd2FyZChkaXJlY3Rpb24pKQorCXsKKwkJ aWYgKCsrc3RyZWFtUG9zLT5pdGVtIDw9IHN0cmVhbUJhdGNoLT5sYXN0SXRlbSkKKwkJeworCQkJ YmF0Y2hfYXNzZXJ0X3Bvc192YWxpZChzY2FuLCBzdHJlYW1Qb3MpOworCisJCQlyZXR1cm4gdHJ1 ZTsKKwkJfQorCX0KKwllbHNlCQkJCQkJLyogU2NhbkRpcmVjdGlvbklzQmFja3dhcmQgKi8KKwl7 CisJCWlmICgtLXN0cmVhbVBvcy0+aXRlbSA+PSBzdHJlYW1CYXRjaC0+Zmlyc3RJdGVtKQorCQl7 CisJCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHN0cmVhbVBvcyk7CisKKwkJCXJldHVy biB0cnVlOworCQl9CisJfQorCisJLyoKKwkgKiBXZSBjb3VsZG4ndCBhZHZhbmNlIHdpdGhpbiB0 aGUgc2FtZSBiYXRjaCwgdHJ5IGFkdmFuY2luZyB0byB0aGUgbmV4dAorCSAqIGJhdGNoLCBpZiBp dCdzIGFscmVhZHkgbG9hZGVkLgorCSAqLworCWlmIChJTkRFWF9TQ0FOX0JBVENIX0xPQURFRChz Y2FuLCBzdHJlYW1Qb3MtPmJhdGNoICsgMSkpCisJeworCQkvKiBhZHZhbmNlIHRvIHRoZSBuZXh0 IGJhdGNoICovCisJCXN0cmVhbVBvcy0+YmF0Y2grKzsKKworCQlzdHJlYW1CYXRjaCA9IElOREVY X1NDQU5fQkFUQ0goc2Nhbiwgc3RyZWFtUG9zLT5iYXRjaCk7CisKKwkJaWYgKFNjYW5EaXJlY3Rp b25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCXN0cmVhbVBvcy0+aXRlbSA9IHN0cmVhbUJhdGNo LT5maXJzdEl0ZW07CisJCWVsc2UKKwkJCXN0cmVhbVBvcy0+aXRlbSA9IHN0cmVhbUJhdGNoLT5s YXN0SXRlbTsKKworCQliYXRjaF9hc3NlcnRfcG9zX3ZhbGlkKHNjYW4sIHN0cmVhbVBvcyk7CisK KwkJcmV0dXJuIHRydWU7CisJfQorCisJLyogY2FuJ3QgYWR2YW5jZSAqLworCXJldHVybiBmYWxz ZTsKK30KKworLyoKKyAqIENvbnRyb2xzIHdoZW4gd2UgY2FuY2VsIHVzZSBvZiBhIHJlYWQgc3Ry ZWFtIHRvIGRvIHByZWZldGNoaW5nCisgKi8KKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5fRElTVEFO Q0VfTkJBVENIRVMJMjAKKyNkZWZpbmUgSU5ERVhfU0NBTl9NSU5fVFVQTEVfRElTVEFOQ0UJCTcK KworLyoKKyAqIGhlYXBhbV9nZXRuZXh0X3N0cmVhbQorICoJCXJldHVybiB0aGUgbmV4dCBibG9j ayB0byBwYXNzIHRvIHRoZSByZWFkIHN0cmVhbQorICoKKyAqIFRoaXMgYXNzdW1lcyB0aGUgImN1 cnJlbnQiIHNjYW4gZGlyZWN0aW9uLCByZXF1ZXN0ZWQgYnkgdGhlIGNhbGxlci4KKyAqCisgKiBJ ZiB0aGUgZGlyZWN0aW9uIGNoYW5nZXMgYmVmb3JlIGNvbnN1bWluZyBhbGwgYmxvY2tzLCB3ZSds bCByZXNldCB0aGUgc3RyZWFtCisgKiBhbmQgc3RhcnQgZnJvbSBzY3JhdGNoLiBUaGUgc2NhbiBk aXJlY3Rpb24gY2hhbmdlIGlzIGhhbmRsZWQgZWxzZXdoZXJlLgorICogSGVyZSB3ZSByZWx5IG9u IGhhdmluZyB0aGUgY29ycmVjdCB2YWx1ZSBpbiBiYXRjaHF1ZXVlLT5kaXJlY3Rpb24uCisgKgor ICogVGhlIHBvc2l0aW9uIG9mIHRoZSByZWFkX3N0cmVhbSBpcyBzdG9yZWQgaW4gc3RyZWFtUG9z LCB3aGljaCBtYXkgYmUgYWhlYWQgb2YKKyAqIHRoZSBjdXJyZW50IHJlYWRQb3MgKHdoaWNoIGlz IHdoYXQgZ290IGNvbnN1bWVkIGJ5IHRoZSBzY2FuKS4KKyAqCisgKiBUaGUgc3RyZWFtUG9zIGNh biBob3dldmVyIGFsc28gZ2V0IGJlaGluZCByZWFkUG9zIHRvbywgd2hlbiBzb21lIGJsb2NrcyBh cmUKKyAqIHNraXBwZWQgYW5kIG5vdCByZXR1cm5lZCB0byB0aGUgcmVhZF9zdHJlYW0uIEFuIGV4 YW1wbGUgaXMgYW4gaW5kZXggc2NhbiBvbgorICogYSBjb3JyZWxhdGVkIGluZGV4LCB3aXRoIG1h bnkgZHVwbGljYXRlIGJsb2NrcyBhcmUgc2tpcHBlZCwgb3IgYW4gSU9TIHdoZXJlCisgKiBhbGwt dmlzaWJsZSBibG9ja3MgYXJlIHNraXBwZWQuCisgKgorICogVGhlIGluaXRpYWwgYmF0Y2ggaXMg YWx3YXlzIGxvYWRlZCBieSBoZWFwYW1fYmF0Y2hfZ2V0bmV4dF90aWQuIFdlIGRvbid0CisgKiBn ZXQgaGVyZSB1bnRpbCB0aGUgZmlyc3QgcmVhZF9zdHJlYW1fbmV4dF9idWZmZXIoKSBjYWxsLCB3 aGVuIHB1bGxpbmcgdGhlCisgKiBmaXJzdCBoZWFwIHR1cGxlIGZyb20gdGhlIHN0cmVhbS4gQWZ0 ZXIgdGhhdCwgbW9zdCBiYXRjaGVzIHNob3VsZCBiZSBsb2FkZWQKKyAqIGJ5IHRoaXMgY2FsbGJh Y2ssIGRyaXZlbiBieSB0aGUgcmVhZF9zdHJlYW0gbG9vay1haGVhZCBkaXN0YW5jZS4gIEhvd2V2 ZXIsCisgKiB3aXRoIGRpc2FibGVkIHByZWZldGNoaW5nICh0aGF0IGlzLCB3aXRoIGVmZmVjdGl2 ZV9pb19jb25jdXJyZW5jeT0wKSwgYWxsCisgKiBiYXRjaGVzIHdpbGwgYmUgbG9hZGVkIGluIGhl YXBhbV9iYXRjaF9nZXRuZXh0X3RpZC4KKyAqCisgKiBJdCdzIHBvc3NpYmxlIHdlIGdvdCBoZXJl IG9ubHkgZmFpcmx5IGxhdGUgaW4gdGhlIHNjYW4sIGUuZy4gaWYgbWFueSB0dXBsZXMKKyAqIGdv dCBza2lwcGVkIGluIHRoZSBpbmRleC1vbmx5IHNjYW4sIGV0Yy4gSW4gdGhpcyBjYXNlIGp1c3Qg dXNlIHRoZSByZWFkCisgKiBwb3NpdGlvbiBhcyBhIHN0cmVhbVBvcyBzdGFydGluZyBwb2ludC4K KyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitoZWFwYW1fZ2V0bmV4dF9zdHJlYW0oUmVhZFN0cmVh bSAqc3RyZWFtLCB2b2lkICpjYWxsYmFja19wcml2YXRlX2RhdGEsCisJCQkJCSAgdm9pZCAqcGVy X2J1ZmZlcl9kYXRhKQoreworCUluZGV4U2NhbkRlc2Mgc2NhbiA9IChJbmRleFNjYW5EZXNjKSBj YWxsYmFja19wcml2YXRlX2RhdGE7CisJQmF0Y2hRdWV1ZSAqYmF0Y2hxdWV1ZSA9IHNjYW4tPmJh dGNocXVldWU7CisJQmF0Y2hRdWV1ZUl0ZW1Qb3MgKnN0cmVhbVBvcyA9ICZiYXRjaHF1ZXVlLT5z dHJlYW1Qb3M7CisJU2NhbkRpcmVjdGlvbiBkaXJlY3Rpb24gPSBiYXRjaHF1ZXVlLT5kaXJlY3Rp b247CisKKwkvKiBCeSBub3cgd2Ugc2hvdWxkIGtub3cgdGhlIGRpcmVjdGlvbiBvZiB0aGUgc2Nh bi4gKi8KKwlBc3NlcnQoZGlyZWN0aW9uICE9IE5vTW92ZW1lbnRTY2FuRGlyZWN0aW9uKTsKKwor CS8qCisJICogVGhlIHJlYWQgcG9zaXRpb24gKHJlYWRQb3MpIGhhcyB0byBiZSB2YWxpZC4KKwkg KgorCSAqIFdlIGluaXRpYWxpemUvYWR2YW5jZSBpdCBiZWZvcmUgZXZlbiBhdHRlbXB0aW5nIHRv IHJlYWQgdGhlIGhlYXAgdHVwbGUsCisJICogYW5kIGl0IGdldHMgaW52YWxpZGF0ZWQgd2hlbiB3 ZSByZWFjaCB0aGUgZW5kIG9mIHRoZSBzY2FuIChidXQgdGhlbiB3ZQorCSAqIGRvbid0IGludm9r ZSB0aGUgY2FsbGJhY2sgYWdhaW4pLgorCSAqCisJICogWFhYIFRoaXMgYXBwbGllcyB0byB0aGUg cmVhZFBvcy4gV2UnbGwgdXNlIHN0cmVhbVBvcyB0byBkZXRlcm1pbmUgd2hpY2gKKwkgKiBibG9j a3MgdG8gcGFzcyB0byB0aGUgc3RyZWFtLCBhbmQgcmVhZFBvcyBtYXkgYmUgdXNlZCB0byBpbml0 aWFsaXplIGl0LgorCSAqLworCWJhdGNoX2Fzc2VydF9wb3NfdmFsaWQoc2NhbiwgJmJhdGNocXVl dWUtPnJlYWRQb3MpOworCisJLyoKKwkgKiBUcnkgdG8gYWR2YW5jZSB0aGUgc3RyZWFtUG9zIHRv IHRoZSBuZXh0IGl0ZW0sIGFuZCBpZiB0aGF0IGRvZXNuJ3QKKwkgKiBzdWNjZWVkIChpZiB0aGVy ZSBhcmUgbm8gbW9yZSBpdGVtcyBpbiBsb2FkZWQgYmF0Y2hlcyksIHRyeSBsb2FkaW5nIHRoZQor CSAqIG5leHQgb25lLgorCSAqCisJICogRklYTUUgVGhpcyBjYW4gbG9vcCBtb3JlIHRoYW4gdHdp Y2UuICBJZiBtYW55IGJsb2NrcyBnZXQgc2tpcHBlZCBkdWUgdG8KKwkgKiBjdXJyZW50UHJlZmV0 Y2hCbG9jayBvciBhbGwtdmlzaWJpbGl0eSAocGVyIHRoZSAicHJlZmV0Y2giIGNhbGxiYWNrKSwK KwkgKiB3ZSBnZXQgdG8gbG9hZCBhZGRpdGlvbmFsIGJhdGNoZXMuIEluIHRoZSB3b3JzdCBjYXNl IHdlJ2xsIGhpdCB0aGUKKwkgKiBJTkRFWF9TQ0FOX01BWF9CQVRDSEVTIGxpbWl0IGFuZCBoYXZl IHRvICJwYXVzZSIvcmVzZXQgdGhlIHN0cmVhbS4KKwkgKi8KKwl3aGlsZSAodHJ1ZSkKKwl7CisJ CWJvb2wJCWFkdmFuY2VkID0gZmFsc2U7CisJCUJhdGNoSW5kZXhTY2FuIHByaW9yYmF0Y2ggPSBO VUxMOworCisJCS8qCisJCSAqIElmIHRoZSBzdHJlYW0gcG9zaXRpb24gaGFzIG5vdCBiZWVuIGlu aXRpYWxpemVkIHlldCwgc2V0IGl0IHRvIHRoZQorCQkgKiBjdXJyZW50IHJlYWQgcG9zaXRpb24u IFRoaXMgaXMgdGhlIGl0ZW0gdGhlIGNhbGxlciBpcyB0cnlpbmcgdG8KKwkJICogcmVhZCwgc28g aXQncyB3aGF0IHdlIHNob3VsZCByZXR1cm4gdG8gdGhlIHN0cmVhbS4KKwkJICovCisJCWlmIChJ TkRFWF9TQ0FOX1BPU19JTlZBTElEKHN0cmVhbVBvcykpCisJCXsKKwkJCSpzdHJlYW1Qb3MgPSBi YXRjaHF1ZXVlLT5yZWFkUG9zOworCQkJYWR2YW5jZWQgPSB0cnVlOworCQl9CisJCWVsc2UgaWYg KGhlYXBfYmF0Y2hfYWR2YW5jZV9zdHJlYW1wb3Moc2Nhbiwgc3RyZWFtUG9zLCBkaXJlY3Rpb24p KQorCQl7CisJCQlhZHZhbmNlZCA9IHRydWU7CisJCX0KKworCQkvKgorCQkgKiBGSVhNRSBNYXli ZSBjaGVjayB0aGUgc3RyZWFtUG9zIGlzIG5vdCBiZWhpbmQgcmVhZFBvcz8KKwkJICoKKwkJICog RklYTUUgQWN0dWFsbHksIGNvdWxkIHN0cmVhbVBvcyBnZXQgc3RhbGUvbGFnZ2luZyBiZWhpbmQg cmVhZFBvcywKKwkJICogYW5kIGlmIHllcyBob3cgbXVjaC4gQ291bGQgaXQgZ2V0IHNvIGZhciBi ZWhpbmQgdG8gbm90IGJlIHZhbGlkLAorCQkgKiBwb2ludGluZyBhdCBhIGZyZWVkIGJhdGNoPyBJ biB0aGF0IGNhc2Ugd2UgY2FuJ3QgZXZlbiBhZHZhbmNlIGl0LAorCQkgKiBhbmQgd2Ugc2hvdWxk IGp1c3QgaW5pdGlhbGl6ZSBpdCB0byByZWFkUG9zLiBXZSBtaWdodCBkbyB0aGF0CisJCSAqIGFu eXdheSwgSSBndWVzcywganVzdCB0byBzYXZlIG9uICJwb2ludGxlc3MiIGFkdmFuY2VzIChpdCBt dXN0CisJCSAqIGFncmVlIHdpdGggcmVhZFBvcywgd2UgY2FuJ3QgYWxsb3cgInJldHJvYWN0aXZl bHkiIGNoYW5naW5nIHRoZQorCQkgKiBibG9jayBzZXF1ZW5jZSkuCisJCSAqLworCisJCS8qCisJ CSAqIElmIHdlIGFkdmFuY2VkIHRoZSBwb3NpdGlvbiwgZWl0aGVyIHJldHVybiB0aGUgYmxvY2sg Zm9yIHRoZSBUSUQsCisJCSAqIG9yIHNraXAgaXQgKGFuZCB0aGVuIHRyeSBhZHZhbmNpbmcgYWdh aW4pLgorCQkgKgorCQkgKiBUaGUgYmxvY2sgbWF5IGJlICJza2lwcGVkIiBmb3IgdHdvIHJlYXNv bnMuIEZpcnN0LCB0aGUgY2FsbGVyIG1heQorCQkgKiBkZWZpbmUgYSAicHJlZmV0Y2giIGNhbGxi YWNrIHRoYXQgdGVsbHMgdXMgdG8gc2tpcCBpdGVtcyAoSU9TIGRvZXMKKwkJICogdGhpcyB0byBz a2lwIGFsbC12aXNpYmxlIHBhZ2VzKS4gU2Vjb25kLCBjdXJyZW50UHJlZmV0Y2hCbG9jayBpcwor CQkgKiB1c2VkIHRvIHNraXAgZHVwbGljYXRlIGJsb2NrIG51bWJlcnMgKGEgc2VxdWVuY2Ugb2Yg VElEUyBmb3IgdGhlCisJCSAqIHNhbWUgYmxvY2spLgorCQkgKi8KKwkJaWYgKGFkdmFuY2VkKQor CQl7CisJCQlCYXRjaEluZGV4U2NhbiBzdHJlYW1CYXRjaCA9IElOREVYX1NDQU5fQkFUQ0goc2Nh biwgc3RyZWFtUG9zLT5iYXRjaCk7CisJCQlJdGVtUG9pbnRlciB0aWQgPSAmc3RyZWFtQmF0Y2gt Pml0ZW1zW3N0cmVhbVBvcy0+aXRlbV0uaGVhcFRpZDsKKworCQkJREVCVUdfTE9HKCJoZWFwYW1f Z2V0bmV4dF9zdHJlYW06IGl0ZW0gJWQsIFRJRCAoJXUsJXUpIiwKKwkJCQkJICBzdHJlYW1Qb3Mt Pml0ZW0sCisJCQkJCSAgSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpLAorCQkJCQkgIEl0 ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyKHRpZCkpOworCisJCQkvKiBzYW1lIGJsb2NrIGFzIGJl Zm9yZSwgZG9uJ3QgbmVlZCB0byByZWFkIGl0ICovCisJCQlpZiAoYmF0Y2hxdWV1ZS0+Y3VycmVu dFByZWZldGNoQmxvY2sgPT0gSXRlbVBvaW50ZXJHZXRCbG9ja051bWJlcih0aWQpKQorCQkJewor CQkJCURFQlVHX0xPRygiaGVhcGFtX2dldG5leHRfc3RyZWFtOiBza2lwIGJsb2NrIChjdXJyZW50 UHJlZmV0Y2hCbG9jaykiKTsKKwkJCQljb250aW51ZTsKKwkJCX0KKworCQkJYmF0Y2hxdWV1ZS0+ Y3VycmVudFByZWZldGNoQmxvY2sgPSBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKHRpZCk7CisK KwkJCXJldHVybiBiYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jazsKKwkJfQorCisJCWlm IChzY2FuLT5maW5pc2hlZCkKKwkJCWJyZWFrOworCisJCS8qCisJCSAqIElmIHdlIGFscmVhZHkg dXNlZCB0aGUgbWF4aW11bSBudW1iZXIgb2YgYmF0Y2ggc2xvdHMgYXZhaWxhYmxlLAorCQkgKiBp dCdzIHBvaW50bGVzcyB0byB0cnkgbG9hZGluZyBhbm90aGVyIG9uZS4gVGhpcyBjYW4gaGFwcGVu IGZvcgorCQkgKiB2YXJpb3VzIHJlYXNvbnMsIGUuZy4gZm9yIGluZGV4LW9ubHkgc2NhbnMgb24g YWxsLXZpc2libGUgdGFibGUsIG9yCisJCSAqIHNraXBwaW5nIGR1cGxpY2F0ZSBibG9ja3Mgb24g cGVyZmVjdGx5IGNvcnJlbGF0ZWQgaW5kZXhlcywgZXRjLgorCQkgKgorCQkgKiBXZSBjb3VsZCBl bmxhcmdlIHRoZSBhcnJheSB0byBhbGxvdyBtb3JlIGJhdGNoZXMsIGJ1dCB0aGF0J3MKKwkJICog ZnV0aWxlLCB3ZSBjYW4gYWx3YXlzIGNvbnN0cnVjdCBhIGNhc2UgdXNpbmcgbW9yZSBtZW1vcnku IE5vdCBvbmx5CisJCSAqIGl0IHdvdWxkIHJpc2sgT09NLCBpdCdkIGFsc28gYmUgaW5lZmZpY2ll bnQgYmVjYXVzZSB0aGlzIGhhcHBlbnMKKwkJICogZWFybHkgaW4gdGhlIHNjYW4gKHNvIGl0J2Qg aW50ZXJmZXJlIHdpdGggTElNSVQgcXVlcmllcykuCisJCSAqLworCQlpZiAoSU5ERVhfU0NBTl9C QVRDSF9GVUxMKHNjYW4pKQorCQl7CisJCQlERUJVR19MT0coImJhdGNoX2dldG5leHQ6IHJhbiBv dXQgb2Ygc3BhY2UgZm9yIGJhdGNoZXMiKTsKKwkJCXNjYW4tPmJhdGNocXVldWUtPnJlc2V0ID0g dHJ1ZTsKKwkJCWJyZWFrOworCQl9CisKKwkJLyoKKwkJICogQ291bGRuJ3QgYWR2YW5jZSB0aGUg cG9zaXRpb24sIG5vIG1vcmUgaXRlbXMgaW4gdGhlIGxvYWRlZCBiYXRjaGVzLgorCQkgKiBUcnkg bG9hZGluZyB0aGUgbmV4dCBiYXRjaCAtIGlmIHRoYXQgc3VjY2VlZHMsIHRyeSBhZHZhbmNpbmcg YWdhaW4KKwkJICogKHRoaXMgdGltZSB0aGUgYWR2YW5jZSBzaG91bGQgd29yaywgYnV0IHdlIG1h eSBza2lwIGFsbCB0aGUgaXRlbXMpLgorCQkgKgorCQkgKiBJZiB3ZSBmYWlsIHRvIGxvYWQgdGhl IG5leHQgYmF0Y2gsIHdlJ3JlIGRvbmUuCisJCSAqLworCQlpZiAoYmF0Y2hxdWV1ZS0+aGVhZEJh dGNoIDwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoKQorCQkJcHJpb3JiYXRjaCA9IElOREVYX1NDQU5f QkFUQ0goc2NhbiwgYmF0Y2hxdWV1ZS0+bmV4dEJhdGNoIC0gMSk7CisJCWlmICghaGVhcF9iYXRj aF9nZXRuZXh0KHNjYW4sIHByaW9yYmF0Y2gsIGRpcmVjdGlvbikpCisJCQlicmVhazsKKworCQkv KgorCQkgKiBDb25zaWRlciBkaXNhYmxpbmcgcHJlZmV0Y2hpbmcgd2hlbiB3ZSBjYW4ndCBrZWVw IGEgc3VmZmljaWVudGx5CisJCSAqIGxhcmdlICJpbmRleCB0dXBsZSBkaXN0YW5jZSIgYmV0d2Vl biByZWFkUG9zIGFuZCBzdHJlYW1Qb3MuCisJCSAqCisJCSAqIE9ubHkgY29uc2lkZXIgZG9pbmcg dGhpcyB3aGVuIHdlJ3JlIG5vdCBvbiB0aGUgc2NhbidzIGluaXRpYWwKKwkJICogYmF0Y2gsIHdo ZW4gcmVhZFBvcyBhbmQgc3RyZWFtUG9zIHNoYXJlIHRoZSBzYW1lIGJhdGNoLgorCQkgKi8KKwkJ aWYgKCFzY2FuLT5maW5pc2hlZCAmJiAhYmF0Y2hxdWV1ZS0+cHJlZmV0Y2hpbmdMb2NrZWRJbikK KwkJeworCQkJaW50CQkJaXRlbWRpZmY7CisKKwkJCWlmIChzdHJlYW1Qb3MtPmJhdGNoIDw9IElO REVYX1NDQU5fTUlOX0RJU1RBTkNFX05CQVRDSEVTKQorCQkJeworCQkJCS8qIFRvbyBlYXJseSB0 byBjaGVjayBpZiBwcmVmZXRjaGluZyBzaG91bGQgYmUgZGlzYWJsZWQgKi8KKwkJCX0KKwkJCWVs c2UgaWYgKGJhdGNocXVldWUtPnJlYWRQb3MuYmF0Y2ggPT0gc3RyZWFtUG9zLT5iYXRjaCkKKwkJ CXsKKwkJCQlCYXRjaFF1ZXVlSXRlbVBvcyAqcmVhZFBvcyA9ICZiYXRjaHF1ZXVlLT5yZWFkUG9z OworCisJCQkJaWYgKFNjYW5EaXJlY3Rpb25Jc0ZvcndhcmQoZGlyZWN0aW9uKSkKKwkJCQkJaXRl bWRpZmYgPSBzdHJlYW1Qb3MtPml0ZW0gLSByZWFkUG9zLT5pdGVtOworCQkJCWVsc2UKKwkJCQl7 CisJCQkJCUJhdGNoSW5kZXhTY2FuIHJlYWRCYXRjaCA9CisJCQkJCQlJTkRFWF9TQ0FOX0JBVENI KHNjYW4sIHJlYWRQb3MtPmJhdGNoKTsKKworCQkJCQlpdGVtZGlmZiA9IChyZWFkUG9zLT5pdGVt IC0gcmVhZEJhdGNoLT5maXJzdEl0ZW0pIC0KKwkJCQkJCShzdHJlYW1Qb3MtPml0ZW0gLSByZWFk QmF0Y2gtPmZpcnN0SXRlbSk7CisJCQkJfQorCisJCQkJaWYgKGl0ZW1kaWZmIDwgSU5ERVhfU0NB Tl9NSU5fVFVQTEVfRElTVEFOQ0UpCisJCQkJeworCQkJCQliYXRjaHF1ZXVlLT5kaXNhYmxlZCA9 IHRydWU7CisJCQkJCXJldHVybiBJbnZhbGlkQmxvY2tOdW1iZXI7CisJCQkJfQorCQkJCWVsc2UK KwkJCQl7CisJCQkJCWJhdGNocXVldWUtPnByZWZldGNoaW5nTG9ja2VkSW4gPSB0cnVlOworCQkJ CX0KKwkJCX0KKwkJCWVsc2UKKwkJCQliYXRjaHF1ZXVlLT5wcmVmZXRjaGluZ0xvY2tlZEluID0g dHJ1ZTsKKwkJfQorCX0KKworCS8qIG5vIG1vcmUgaXRlbXMgaW4gdGhpcyBzY2FuICovCisJcmV0 dXJuIEludmFsaWRCbG9ja051bWJlcjsKK30KKwogLyogLS0tLS0tLS0tLS0tLS0tLQogICoJCWlu ZGV4X2ZldGNoX2hlYXAgLSBnZXQgdGhlIHNjYW4ncyBuZXh0IGhlYXAgdHVwbGUKICAqCkBAIC0z MDYzLDYgKzM0NDYsNyBAQCBzdGF0aWMgY29uc3QgVGFibGVBbVJvdXRpbmUgaGVhcGFtX21ldGhv ZHMgPSB7CiAJLmluZGV4X2ZldGNoX3Jlc2V0ID0gaGVhcGFtX2luZGV4X2ZldGNoX3Jlc2V0LAog CS5pbmRleF9mZXRjaF9lbmQgPSBoZWFwYW1faW5kZXhfZmV0Y2hfZW5kLAogCS5pbmRleF9nZXRu ZXh0X3Nsb3QgPSBoZWFwYW1faW5kZXhfZ2V0bmV4dF9zbG90LAorCS5pbmRleF9nZXRuZXh0X3N0 cmVhbSA9IGhlYXBhbV9nZXRuZXh0X3N0cmVhbSwKIAkuaW5kZXhfZmV0Y2hfdHVwbGUgPSBoZWFw YW1faW5kZXhfZmV0Y2hfdHVwbGUsCiAKIAkudHVwbGVfaW5zZXJ0ID0gaGVhcGFtX3R1cGxlX2lu c2VydCwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMgYi9z cmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCmluZGV4IGE1OWM3Njc1MC4uYWFmMmIz OWI0IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3MvaW5kZXgvaW5kZXhhbS5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGFtLmMKQEAgLTQ2Nyw3ICs0NjcsMTUgQEAg aW5kZXhfcmVzdHJwb3MoSW5kZXhTY2FuRGVzYyBzY2FuKQogCUNIRUNLX1NDQU5fUFJPQ0VEVVJF KGFtZ2V0YmF0Y2gpOwogCUNIRUNLX1NDQU5fUFJPQ0VEVVJFKGFtcG9zcmVzZXQpOwogCi0JLyog cmVsZWFzZSByZXNvdXJjZXMgKGxpa2UgYnVmZmVyIHBpbnMpIGZyb20gdGFibGUgYWNjZXNzZXMg Ki8KKwkvKgorCSAqIHJlbGVhc2UgcmVzb3VyY2VzIChsaWtlIGJ1ZmZlciBwaW5zKSBmcm9tIHRh YmxlIGFjY2Vzc2VzCisJICoKKwkgKiBYWFg6IEN1cnJlbnRseSwgdGhlIGRpc3RhbmNlIGlzIGFs d2F5cyByZW1lbWJlcmVkIGFjcm9zcyBhbnkKKwkgKiByZWFkX3N0cmVhbV9yZXNldCBjYWxscyAo dG8gd29yayBhcm91bmQgdGhlIHNjYW4tPmJhdGNocXVldWUtPnJlc2V0CisJICogYmVoYXZpb3Ig b2YgcmVzZXR0aW5nIHRoZSBzdHJlYW0gdG8gZGVhbCB3aXRoIHJ1bm5pbmcgb3V0IG9mIGJhdGNo ZXMpLgorCSAqIFdlIHByb2JhYmx5IF9zaG91bGRfIGJlIGZvcmdldHRpbmcgdGhlIGRpc3RhbmNl IHdoZW4gd2UgcmVzZXQgdGhlCisJICogc3RyZWFtIGhlcmUgKHRocm91Z2ggb3VyIHRhYmxlX2lu ZGV4X2ZldGNoX3Jlc2V0IGNhbGwpLCB0aG91Z2guCisJICovCiAJaWYgKHNjYW4tPnhzX2hlYXBm ZXRjaCkKIAkJdGFibGVfaW5kZXhfZmV0Y2hfcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKIApk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYyBiL3NyYy9i YWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKaW5kZXggN2ZhZDAwMDg0Li5kNTdlZDBl N2EgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9pbmRleC9pbmRleGJhdGNoLmMKKysr IGIvc3JjL2JhY2tlbmQvYWNjZXNzL2luZGV4L2luZGV4YmF0Y2guYwpAQCAtNzQsMTEgKzc0LDE2 IEBAIGluZGV4X2JhdGNoX2luaXQoSW5kZXhTY2FuRGVzYyBzY2FuKQogCQkoIXNjYW4tPnhzX3dh bnRfaXR1cCAmJiBJc01WQ0NTbmFwc2hvdChzY2FuLT54c19zbmFwc2hvdCkgJiYKIAkJIFJlbGF0 aW9uTmVlZHNXQUwoc2Nhbi0+aW5kZXhSZWxhdGlvbikpOwogCXNjYW4tPmZpbmlzaGVkID0gZmFs c2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVzZXQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVl LT5wcmVmZXRjaGluZ0xvY2tlZEluID0gZmFsc2U7CisJc2Nhbi0+YmF0Y2hxdWV1ZS0+ZGlzYWJs ZWQgPSBmYWxzZTsKKwlzY2FuLT5iYXRjaHF1ZXVlLT5jdXJyZW50UHJlZmV0Y2hCbG9jayA9IElu dmFsaWRCbG9ja051bWJlcjsKIAlzY2FuLT5iYXRjaHF1ZXVlLT5kaXJlY3Rpb24gPSBOb01vdmVt ZW50U2NhbkRpcmVjdGlvbjsKIAogCS8qIHBvc2l0aW9ucyBpbiB0aGUgcXVldWUgb2YgYmF0Y2hl cyAqLwogCWJhdGNoX3Jlc2V0X3Bvcygmc2Nhbi0+YmF0Y2hxdWV1ZS0+cmVhZFBvcyk7CiAJYmF0 Y2hfcmVzZXRfcG9zKCZzY2FuLT5iYXRjaHF1ZXVlLT5tYXJrUG9zKTsKKwliYXRjaF9yZXNldF9w b3MoJnNjYW4tPmJhdGNocXVldWUtPnN0cmVhbVBvcyk7CiAKIAlzY2FuLT5iYXRjaHF1ZXVlLT5t YXJrQmF0Y2ggPSBOVUxMOwogCXNjYW4tPmJhdGNocXVldWUtPmhlYWRCYXRjaCA9IDA7CS8qIGlu aXRpYWwgaGVhZCBiYXRjaCAqLwpAQCAtMTA3LDkgKzExMiwxMiBAQCBpbmRleF9iYXRjaF9yZXNl dChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCiAJYmF0Y2hfYXNzZXJ0X2JhdGNo ZXNfdmFsaWQoc2Nhbik7CiAJYmF0Y2hfZGVidWdfcHJpbnRfYmF0Y2hlcygiaW5kZXhfYmF0Y2hf cmVzZXQiLCBzY2FuKTsKIAlBc3NlcnQoc2Nhbi0+eHNfaGVhcGZldGNoKTsKKwlpZiAoc2Nhbi0+ eHNfaGVhcGZldGNoLT5ycykKKwkJcmVhZF9zdHJlYW1fcmVzZXQoc2Nhbi0+eHNfaGVhcGZldGNo LT5ycyk7CiAKIAkvKiByZXNldCB0aGUgcG9zaXRpb25zICovCiAJYmF0Y2hfcmVzZXRfcG9zKCZi YXRjaHF1ZXVlLT5yZWFkUG9zKTsKKwliYXRjaF9yZXNldF9wb3MoJmJhdGNocXVldWUtPnN0cmVh bVBvcyk7CiAKIAkvKgogCSAqIFdpdGggImNvbXBsZXRlIiByZXNldCwgbWFrZSBzdXJlIHRvIGFs c28gZnJlZSB0aGUgbWFya2VkIGJhdGNoLCBlaXRoZXIKQEAgLTE1NSw2ICsxNjMsOCBAQCBpbmRl eF9iYXRjaF9yZXNldChJbmRleFNjYW5EZXNjIHNjYW4sIGJvb2wgY29tcGxldGUpCiAJYmF0Y2hx dWV1ZS0+bmV4dEJhdGNoID0gMDsJLyogaW5pdGlhbCBiYXRjaCBpcyBlbXB0eSAqLwogCiAJc2Nh bi0+ZmluaXNoZWQgPSBmYWxzZTsKKwliYXRjaHF1ZXVlLT5yZXNldCA9IGZhbHNlOworCWJhdGNo cXVldWUtPmN1cnJlbnRQcmVmZXRjaEJsb2NrID0gSW52YWxpZEJsb2NrTnVtYmVyOwogCiAJYmF0 Y2hfYXNzZXJ0X2JhdGNoZXNfdmFsaWQoc2Nhbik7CiB9CkBAIC0yMTgsOSArMjI4LDEzIEBAIGlu ZGV4X2JhdGNoX3Jlc3RvcmVfcG9zKEluZGV4U2NhbkRlc2Mgc2NhbikKIHsKIAlCYXRjaFF1ZXVl ICpiYXRjaHF1ZXVlID0gc2Nhbi0+YmF0Y2hxdWV1ZTsKIAlCYXRjaFF1ZXVlSXRlbVBvcyAqbWFy a1BvcyA9ICZiYXRjaHF1ZXVlLT5tYXJrUG9zOwotCUJhdGNoUXVldWVJdGVtUG9zICpyZWFkUG9z ID0gJmJhdGNocXVldWUtPnJlYWRQb3M7CiAJQmF0Y2hJbmRleFNjYW4gbWFya0JhdGNoID0gYmF0 Y2hxdWV1ZS0+bWFya0JhdGNoOwogCisJLyoKKwkgKiBYWFggRGlzYWJsZSB0aGlzIG9wdGltaXph dGlvbiB3aGVuIEkvTyBwcmVmZXRjaGluZyBpcyBpbiB1c2UsIGF0IGxlYXN0CisJICogdW50aWwg dGhlIHBvc3NpYmxlIGludGVyYWN0aW9ucyB3aXRoIHN0cmVhbVBvcyBhcmUgZnVsbHkgdW5kZXJz dG9vZC4KKwkgKi8KKyNpZiAwCiAJaWYgKHJlYWRQb3MtPmJhdGNoID09IG1hcmtQb3MtPmJhdGNo ICYmCiAJCXJlYWRQb3MtPmJhdGNoID09IGJhdGNocXVldWUtPmhlYWRCYXRjaCkKIAl7CkBAIC0y MzEsNiArMjQ1LDcgQEAgaW5kZXhfYmF0Y2hfcmVzdG9yZV9wb3MoSW5kZXhTY2FuRGVzYyBzY2Fu KQogCQlyZWFkUG9zLT5pdGVtID0gbWFya1Bvcy0+aXRlbTsKIAkJcmV0dXJuOwogCX0KKyNlbmRp ZgogCiAJLyoKIAkgKiBDYWxsIGFtcG9zcmVzZXQgdG8gbGV0IGluZGV4IEFNIGtub3cgdG8gaW52 YWxpZGF0ZSBhbnkgcHJpdmF0ZSBzdGF0ZQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvY29zdHNpemUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2Nvc3RzaXpl LmMKaW5kZXggMTZiZjFmNjFhLi4yM2U3YzBhMmYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2Nvc3RzaXplLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv Y29zdHNpemUuYwpAQCAtMTQ0LDYgKzE0NCw3IEBAIGludAkJCW1heF9wYXJhbGxlbF93b3JrZXJz X3Blcl9nYXRoZXIgPSAyOwogCiBib29sCQllbmFibGVfc2Vxc2NhbiA9IHRydWU7CiBib29sCQll bmFibGVfaW5kZXhzY2FuID0gdHJ1ZTsKK2Jvb2wJCWVuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gg PSB0cnVlOwogYm9vbAkJZW5hYmxlX2luZGV4b25seXNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxl X2JpdG1hcHNjYW4gPSB0cnVlOwogYm9vbAkJZW5hYmxlX3RpZHNjYW4gPSB0cnVlOwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYyBiL3NyYy9iYWNrZW5k L3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKaW5kZXggODg3MTdjMmZmLi43NDYzNjUxZTAgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0b3JhZ2UvYWlvL3JlYWRfc3RyZWFtLmMKKysrIGIvc3Jj L2JhY2tlbmQvc3RvcmFnZS9haW8vcmVhZF9zdHJlYW0uYwpAQCAtOTksNiArOTksNyBAQCBzdHJ1 Y3QgUmVhZFN0cmVhbQogCWludDE2CQlmb3J3YXJkZWRfYnVmZmVyczsKIAlpbnQxNgkJcGlubmVk X2J1ZmZlcnM7CiAJaW50MTYJCWRpc3RhbmNlOworCWludDE2CQlkaXN0YW5jZV9vbGQ7CiAJaW50 MTYJCWluaXRpYWxpemVkX2J1ZmZlcnM7CiAJaW50CQkJcmVhZF9idWZmZXJzX2ZsYWdzOwogCWJv b2wJCXN5bmNfbW9kZTsJCS8qIHVzaW5nIGlvX21ldGhvZD1zeW5jICovCkBAIC00NjQsNiArNDY1 LDcgQEAgcmVhZF9zdHJlYW1fbG9va19haGVhZChSZWFkU3RyZWFtICpzdHJlYW0pCiAJCWlmIChi bG9ja251bSA9PSBJbnZhbGlkQmxvY2tOdW1iZXIpCiAJCXsKIAkJCS8qIEVuZCBvZiBzdHJlYW0u ICovCisJCQlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IHN0cmVhbS0+ZGlzdGFuY2U7CiAJCQlzdHJl YW0tPmRpc3RhbmNlID0gMDsKIAkJCWJyZWFrOwogCQl9CkBAIC04NjIsNiArODY0LDcgQEAgcmVh ZF9zdHJlYW1fbmV4dF9idWZmZXIoUmVhZFN0cmVhbSAqc3RyZWFtLCB2b2lkICoqcGVyX2J1ZmZl cl9kYXRhKQogCQllbHNlCiAJCXsKIAkJCS8qIE5vIG1vcmUgYmxvY2tzLCBlbmQgb2Ygc3RyZWFt LiAqLworCQkJc3RyZWFtLT5kaXN0YW5jZV9vbGQgPSBzdHJlYW0tPmRpc3RhbmNlOwogCQkJc3Ry ZWFtLT5kaXN0YW5jZSA9IDA7CiAJCQlzdHJlYW0tPm9sZGVzdF9idWZmZXJfaW5kZXggPSBzdHJl YW0tPm5leHRfYnVmZmVyX2luZGV4OwogCQkJc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9IDA7CkBA IC0xMDQ2LDYgKzEwNDksOSBAQCByZWFkX3N0cmVhbV9yZXNldChSZWFkU3RyZWFtICpzdHJlYW0p CiAJaW50MTYJCWluZGV4OwogCUJ1ZmZlcgkJYnVmZmVyOwogCisJLyogcmVtZW1iZXIgdGhlIG9s ZCBkaXN0YW5jZSAoaWYgd2UgcmVzZXQgYmVmb3JlIGVuZCBvZiB0aGUgc3RyZWFtKSAqLworCXN0 cmVhbS0+ZGlzdGFuY2Vfb2xkID0gTWF4KHN0cmVhbS0+ZGlzdGFuY2UsIHN0cmVhbS0+ZGlzdGFu Y2Vfb2xkKTsKKwogCS8qIFN0b3AgbG9va2luZyBhaGVhZC4gKi8KIAlzdHJlYW0tPmRpc3RhbmNl ID0gMDsKIApAQCAtMTA3OCw4ICsxMDg0LDEyIEBAIHJlYWRfc3RyZWFtX3Jlc2V0KFJlYWRTdHJl YW0gKnN0cmVhbSkKIAlBc3NlcnQoc3RyZWFtLT5waW5uZWRfYnVmZmVycyA9PSAwKTsKIAlBc3Nl cnQoc3RyZWFtLT5pb3NfaW5fcHJvZ3Jlc3MgPT0gMCk7CiAKLQkvKiBTdGFydCBvZmYgYXNzdW1p bmcgZGF0YSBpcyBjYWNoZWQuICovCi0Jc3RyZWFtLT5kaXN0YW5jZSA9IDE7CisJLyoKKwkgKiBS ZXN0b3JlIHRoZSBvbGQgZGlzdGFuY2UsIGlmIHdlIGhhdmUgb25lLiBPdGhlcndpc2Ugc3RhcnQg YXNzdW1pbmcgZGF0YQorCSAqIGlzIGNhY2hlZC4KKwkgKi8KKwlzdHJlYW0tPmRpc3RhbmNlID0g TWF4KDEsIHN0cmVhbS0+ZGlzdGFuY2Vfb2xkKTsKKwlzdHJlYW0tPmRpc3RhbmNlX29sZCA9IDA7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJhbWV0 ZXJzLmRhdCBiL3NyYy9iYWNrZW5kL3V0aWxzL21pc2MvZ3VjX3BhcmFtZXRlcnMuZGF0CmluZGV4 IDdjNjBiMTI1NS4uYTk5YWE0MWRiIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNj L2d1Y19wYXJhbWV0ZXJzLmRhdAorKysgYi9zcmMvYmFja2VuZC91dGlscy9taXNjL2d1Y19wYXJh bWV0ZXJzLmRhdApAQCAtODkxLDYgKzg5MSwxMyBAQAogICBib290X3ZhbCA9PiAndHJ1ZScsCiB9 LAogCit7IG5hbWUgPT4gJ2VuYWJsZV9pbmRleHNjYW5fcHJlZmV0Y2gnLCB0eXBlID0+ICdib29s JywgY29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhP RCcsCisgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgcHJlZmV0Y2hpbmcgZm9yIGluZGV4IHNjYW5z IGFuZCBpbmRleC1vbmx5LXNjYW5zLicsCisgIGZsYWdzID0+ICdHVUNfRVhQTEFJTicsCisgIHZh cmlhYmxlID0+ICdlbmFibGVfaW5kZXhzY2FuX3ByZWZldGNoJywKKyAgYm9vdF92YWwgPT4gJ3Ry dWUnLAorfSwKKwogeyBuYW1lID0+ICdlbmFibGVfbWF0ZXJpYWwnLCB0eXBlID0+ICdib29sJywg Y29udGV4dCA9PiAnUEdDX1VTRVJTRVQnLCBncm91cCA9PiAnUVVFUllfVFVOSU5HX01FVEhPRCcs CiAgIHNob3J0X2Rlc2MgPT4gJ0VuYWJsZXMgdGhlIHBsYW5uZXJcJ3MgdXNlIG9mIG1hdGVyaWFs aXphdGlvbi4nLAogICBmbGFncyA9PiAnR1VDX0VYUExBSU4nLApkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlIGIvc3JjL2JhY2tlbmQvdXRp bHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCmluZGV4IGRjOWUyMjU1Zi4uZGE1MGFlMTVm IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9taXNjL3Bvc3RncmVzcWwuY29uZi5zYW1w bGUKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvbWlzYy9wb3N0Z3Jlc3FsLmNvbmYuc2FtcGxlCkBA IC00MTIsNiArNDEyLDcgQEAKICNlbmFibGVfaW5jcmVtZW50YWxfc29ydCA9IG9uCiAjZW5hYmxl X2luZGV4c2NhbiA9IG9uCiAjZW5hYmxlX2luZGV4b25seXNjYW4gPSBvbgorI2VuYWJsZV9pbmRl eHNjYW5fcHJlZmV0Y2ggPSBvbgogI2VuYWJsZV9tYXRlcmlhbCA9IG9uCiAjZW5hYmxlX21lbW9p emUgPSBvbgogI2VuYWJsZV9tZXJnZWpvaW4gPSBvbgpkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3N5 c3ZpZXdzLm91dAppbmRleCAwNDExZGI4MzIuLmEyYThjM2FmYSAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9zeXN2aWV3cy5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9zeXN2aWV3cy5vdXQKQEAgLTE1OSw2ICsxNTksNyBAQCBzZWxlY3QgbmFtZSwgc2V0 dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7CiAgZW5hYmxl X2luY3JlbWVudGFsX3NvcnQgICAgICAgIHwgb24KICBlbmFibGVfaW5kZXhvbmx5c2NhbiAgICAg ICAgICAgfCBvbgogIGVuYWJsZV9pbmRleHNjYW4gICAgICAgICAgICAgICB8IG9uCisgZW5hYmxl X2luZGV4c2Nhbl9wcmVmZXRjaCAgICAgIHwgb24KICBlbmFibGVfbWF0ZXJpYWwgICAgICAgICAg ICAgICAgfCBvbgogIGVuYWJsZV9tZW1vaXplICAgICAgICAgICAgICAgICB8IG9uCiAgZW5hYmxl X21lcmdlam9pbiAgICAgICAgICAgICAgIHwgb24KQEAgLTE3Myw3ICsxNzQsNyBAQCBzZWxlY3Qg bmFtZSwgc2V0dGluZyBmcm9tIHBnX3NldHRpbmdzIHdoZXJlIG5hbWUgbGlrZSAnZW5hYmxlJSc7 CiAgZW5hYmxlX3NlcXNjYW4gICAgICAgICAgICAgICAgIHwgb24KICBlbmFibGVfc29ydCAgICAg ICAgICAgICAgICAgICAgfCBvbgogIGVuYWJsZV90aWRzY2FuICAgICAgICAgICAgICAgICB8IG9u Ci0oMjUgcm93cykKKygyNiByb3dzKQogCiAtLSBUaGVyZSBhcmUgYWx3YXlzIHdhaXQgZXZlbnQg ZGVzY3JpcHRpb25zIGZvciB2YXJpb3VzIHR5cGVzLiAgSW5qZWN0aW9uUG9pbnQKIC0tIG1heSBi ZSBwcmVzZW50IG9yIGFic2VudCwgZGVwZW5kaW5nIG9uIGhpc3Rvcnkgc2luY2UgbGFzdCBwb3N0 bWFzdGVyIHN0YXJ0LgotLSAKMi41MS4wCgo= --00000000000026d6270647d0c7f3--