Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDPYd-008S4X-3v for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Oct 2025 15:54:54 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vDPYb-008BuL-T9 for pgsql-hackers@arkaria.postgresql.org; Mon, 27 Oct 2025 15:54:52 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1vDPYb-008BuD-F6 for pgsql-hackers@lists.postgresql.org; Mon, 27 Oct 2025 15:54:52 +0000 Received: from mail-qk1-x72b.google.com ([2607:f8b0:4864:20::72b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vDPYX-004XNR-2u for pgsql-hackers@lists.postgresql.org; Mon, 27 Oct 2025 15:54:52 +0000 Received: by mail-qk1-x72b.google.com with SMTP id af79cd13be357-88fbbec670aso81503685a.0 for ; Mon, 27 Oct 2025 08:54:49 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761580488; x=1762185288; 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=XE2Puwf1W0a1m7tXbp3hb6O0+RperYEiOzZlGBisBcM=; b=ZlkM9bL5ghVhFa+YA8s5HmQn7wEuWbSMdx7uzHYACIBuWZYSngM/wt/ezIw5XBiw3V pWlguTEbWmmMjPNe0+D88bD/MU7kx8+jT2AXUUjz52NeqNBZ9nGkx/ghOKqa4cAxkuGp qX95ragbJG7B3PyEHDoTsLPIfZElnyONcN9NON5mPC+dkB49pF4JW/ayCmIoVDx1sM+d ojeyLa8yY6f1g54yA/+/uvY9weHahBsEh1frv9zXnplOMNl+KCHciozg+5CvXpdLmUT5 IAyS/IGEnrP7VTgXZiebho5skZgHABwQpiScKxCJK22n1KsPnD7eEPEVgnyngK5xPqLS 7ASA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761580488; x=1762185288; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=XE2Puwf1W0a1m7tXbp3hb6O0+RperYEiOzZlGBisBcM=; b=CbP9G6VKhtf5oe0EdiZYmYNsQdS1+eTSFYYKxwd7oqUayOGNQYYvO/6UVhz7B4m73D P6jZ3eXttaObSa6KUFQ2WkNOyE+nc/6hPjXAkuLUJO5SLRsofo2xwLnXwudR9dJocEcp FZSHfnKxJ205PhbFfXFFGoHutqlkmE0ojXUYaxXa/Sa3SCdMM9sFgx276nmODd8gd0We JJLWwqVZL3rLonlf7/vm109UhQvvEiWyan/HQXwaDHcfB50++3Zp45+FSUPU8201GUFt 7i3pjMd1OTiVGqGjaTT2Y1+OqB4VppIyC55J8lL8HLjBK4SEKAqxV+AxAuFUYAkY5YDP /vKQ== X-Forwarded-Encrypted: i=1; AJvYcCUvkJb3Lqf4+GE0OIcMm8nBbUvRSEeFdIQwFc5Obtp2IpwEM/i91igaFXl0EOCFq+8+HGivuNA4mOXCuGn7@lists.postgresql.org X-Gm-Message-State: AOJu0Yxv/XikPAhHfAg4Pz91RskiuCH/c8n0L+WszFNCik5Ggel5JN58 xrX6BKbPe/IousfpiKX3TntvDT9iZR4hkuOQA5MXk8v+cXcV4Sav+Riscgu2pQCNBtn5h5WX6Zn 7ud9/TrredZwIWT8bQ/NQ3rBbJC9yK7w= X-Gm-Gg: ASbGnctUmQrA5ZTvHIVIZwDGSi89bEVYJ60eboEDv3/nDULw2MsHeBuGPR2vCoiTEE9 8rCikEIjsDYN5wM9Bgn8vbuBbmurufkuyWsZ+rIWqzxwp4wsyHqK2NEbkzUqNHVmOeSQOIABtoi PX6Q/hyGKmuGtWgw5UmqHQhkV1AdBCutbYSVxr8nsuZHnnsEh9pwk1M4kmat5xftXNmnFqhMjHs E4uiKQAY8M6sQUu7uyexNIXEdGbeTDd0P09fH+SktsAvFqQHftGNt1hfKgqtmctNHNYnh8= X-Google-Smtp-Source: AGHT+IF/EgsRnIwjQNvVPc/8i0OKc6qS5Tkx6Dvos3MTTpvBUI9mPD1kytUHddyNFdyF+jx7ZqFkEjaFl/3zDIZ5skw= X-Received: by 2002:a05:620a:28c9:b0:863:88f9:3edf with SMTP id af79cd13be357-8a6fa475540mr28163685a.13.1761580487929; Mon, 27 Oct 2025 08:54:47 -0700 (PDT) MIME-Version: 1.0 References: <4535f3aa-3220-4760-b1f5-2bc91f248e03@iki.fi> <2bc58592-9d74-4af0-bdd1-1a88e8683f7c@iki.fi> <36531c0e-292c-409d-bbc7-a252cf6e910a@iki.fi> In-Reply-To: From: Maxim Orlov Date: Mon, 27 Oct 2025 18:54:35 +0300 X-Gm-Features: AWmQ_bkosPriXVa2drDptIz_kEYfjQRON1JUaQUNEFfX7MWupkewBJtyjTDSrcQ Message-ID: Subject: Re: POC: make mxidoff 64 bits To: wenhui qiu Cc: Alexander Korotkov , Ashutosh Bapat , Heikki Linnakangas , Postgres hackers Content-Type: multipart/mixed; boundary="0000000000003b2089064225eb24" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --0000000000003b2089064225eb24 Content-Type: multipart/alternative; boundary="0000000000003b2088064225eb22" --0000000000003b2088064225eb22 Content-Type: text/plain; charset="UTF-8" Here is a new patch set @ 10b5bb3bffaee8 As previously stated, the patch set implements the concept of saving the "difference" between page offsets in order to save disc space. The second significant change was that I decided to modify the pg_upgrade portion as suggested by Heikki above. At the very least, the logic becomes much simpler and completely replicates what is done in the multxact.c module and provide some optimization. Perhaps this will be easier to comprehend and analyse than attempting to correctly convert bytes from one format to another. In the near future, I intend to focus on testing and implement a test suite. -- Best regards, Maxim Orlov. --0000000000003b2088064225eb22 Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
Here is a new patch set @ 10b5bb3bffaee8

As previously stated, the patch set implements the concept of saving the<= br>"difference" between page offsets in order to save disc space.=

The second significant change was that I decided to modify the
p= g_upgrade portion as suggested by Heikki above.

At the very least, t= he logic becomes much simpler and completely
replicates what is done in = the multxact.c module and provide some
optimization.

Perhaps this= will be easier to comprehend and analyse than attempting
to correctly c= onvert bytes from one format to another.

In the near future, I inte= nd to focus on testing and implement a test
suite.

--
Best regards,
Maxim Orlov.
--0000000000003b2088064225eb22-- --0000000000003b2089064225eb24 Content-Type: text/plain; charset="US-ASCII"; name="v18-0003-TEST-bump-catversion.patch.txt" Content-Disposition: attachment; filename="v18-0003-TEST-bump-catversion.patch.txt" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh9aovv62 RnJvbSA4YmZhN2UyMzY1YTBjZTdmZTRkMzBmODRlZmJkNWIxNjM2Yjc3NDBlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOCAzLzNd IFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0YtYm90IGNvbXBsYWlu cywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21taXQuCgpOT1RFOiBrZWVw IGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIKLS0t CiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8IDIgKy0KIDEgZmlsZSBjaGFuZ2Vk LCAxIGluc2VydGlvbigrKSwgMSBkZWxldGlvbigtKQoKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L2NhdGFsb2cvY2F0dmVyc2lvbi5oIGIvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmgK aW5kZXggMWIwYjE2YTM0M2YuLjZhMTNmYTNjZGIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9j YXRhbG9nL2NhdHZlcnNpb24uaAorKysgYi9zcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24u aApAQCAtNTcsNiArNTcsNiBAQAogICovCiAKIC8qCQkJCQkJCXl5eXltbWRkTiAqLwotI2RlZmlu ZSBDQVRBTE9HX1ZFUlNJT05fTk8JMjAyNTEwMjIxCisjZGVmaW5lIENBVEFMT0dfVkVSU0lPTl9O Twk5OTk5OTk5OTkKIAogI2VuZGlmCi0tIAoyLjUxLjAKCg== --0000000000003b2089064225eb24 Content-Type: application/octet-stream; name="v18-0002-Add-pg_upgarde-for-64-bit-multixact-offset.patch" Content-Disposition: attachment; filename="v18-0002-Add-pg_upgarde-for-64-bit-multixact-offset.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh9aovv11 RnJvbSA1Y2NjMjliYjIzYmZmZjUwOTU5NmJiMmYyNTFlNDIwYmIzZDQ1YmEwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENIIHYxOCAyLzNd IEFkZCBwZ191cGdhcmRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldAoKQXV0aG9yOiBNYXhp bSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkF1dGhvcjogSGVpa2tpIExpbm5ha2FuZ2FzIDxo bGlubmFrYUBpa2kuZmk+Ci0tLQogc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0 LmMgfCAgMzUgKy0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUgICAgICAgICAgICB8ICAg MyArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQgICAgICAgICB8ICAgMyArCiBzcmMv YmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jICAgICB8IDI0NSArKysrKysrKysrKysrKysr KysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuaCAgICAgfCAgMzEgKysrCiBz cmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jICAgICB8IDI5NiArKysrKysrKysrKysr KysrKysrKysrKysrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oICAgICB8ICAz MSArKysKIHNyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMgICAgICAgIHwgMTA4ICsrKysr KysrLQogc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgfCAgIDUgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYyAgICAgICAgICAgfCAyMjggKysrKysrKysrKysrKysr KysrKwogc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uaCAgICAgICAgICAgfCAgMzAgKysrCiAx MSBmaWxlcyBjaGFuZ2VkLCA5ODMgaW5zZXJ0aW9ucygrKSwgMzIgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwogY3JlYXRl IG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKIGNyZWF0ZSBt b2RlIDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaAogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBz cmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNj ZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYwppbmRleCBlNzg2MTYxNGJlYy4uMmQ0NGM3ODFmOTMgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xMjc2LDcgKzEyNzYsNiBAQCBHZXRNdWx0aVhhY3RJ ZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJ aW50CQkJc2xvdG5vOwogCU11bHRpWGFjdE9mZnNldCBvZmZzZXQ7CiAJaW50CQkJbGVuZ3RoOwot CWludAkJCXRydWVsZW5ndGg7CiAJTXVsdGlYYWN0SWQgb2xkZXN0TVhhY3Q7CiAJTXVsdGlYYWN0 SWQgbmV4dE1YYWN0OwogCU11bHRpWGFjdElkIHRtcE1YYWN0OwpAQCAtMTM3NSwxNSArMTM3NCw2 IEBAIEdldE11bHRpWGFjdElkTWVtYmVycyhNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0TWVt YmVyICoqbWVtYmVycywKIAkgKiB3ZSBoYXZlIGp1c3QgZm9yIHRoaXM7IHRoZSBwcm9jZXNzIGlu IGNoYXJnZSB3aWxsIHNpZ25hbCB0aGUgQ1YgYXMgc29vbgogCSAqIGFzIGl0IGhhcyBmaW5pc2hl ZCB3cml0aW5nIHRoZSBtdWx0aXhhY3Qgb2Zmc2V0LgogCSAqCi0JICogMy4gQmVjYXVzZSBHZXRO ZXdNdWx0aVhhY3RJZCBpbmNyZW1lbnRzIG9mZnNldCB6ZXJvIHRvIG9mZnNldCBvbmUgdG8KLQkg KiBoYW5kbGUgY2FzZSAjMiwgdGhlcmUgaXMgYW4gYW1iaWd1aXR5IG5lYXIgdGhlIHBvaW50IG9m IG9mZnNldAotCSAqIHdyYXBhcm91bmQuICBJZiB3ZSBzZWUgbmV4dCBtdWx0aXhhY3QncyBvZmZz ZXQgaXMgb25lLCBpcyB0aGF0IG91cgotCSAqIG11bHRpeGFjdCdzIGFjdHVhbCBlbmRwb2ludCwg b3IgZGlkIGl0IGVuZCBhdCB6ZXJvIHdpdGggYSBzdWJzZXF1ZW50Ci0JICogaW5jcmVtZW50PyAg V2UgaGFuZGxlIHRoaXMgdXNpbmcgdGhlIGtub3dsZWRnZSB0aGF0IGlmIHRoZSB6ZXJvJ3RoCi0J ICogbWVtYmVyIHNsb3Qgd2Fzbid0IGZpbGxlZCwgaXQnbGwgY29udGFpbiB6ZXJvLCBhbmQgemVy byBpc24ndCBhIHZhbGlkCi0JICogdHJhbnNhY3Rpb24gSUQgc28gaXQgY2FuJ3QgYmUgYSBtdWx0 aXhhY3QgbWVtYmVyLiAgVGhlcmVmb3JlLCBpZiB3ZQotCSAqIHJlYWQgYSB6ZXJvIGZyb20gdGhl IG1lbWJlcnMgYXJyYXksIGp1c3QgaWdub3JlIGl0LgotCSAqCiAJICogVGhpcyBpcyBhbGwgcHJl dHR5IG1lc3N5LCBidXQgdGhlIG1lc3Mgb2NjdXJzIG9ubHkgaW4gaW5mcmVxdWVudCBjb3JuZXIK IAkgKiBjYXNlcywgc28gaXQgc2VlbXMgYmV0dGVyIHRoYW4gaG9sZGluZyB0aGUgTXVsdGlYYWN0 R2VuTG9jayBmb3IgYSBsb25nCiAJICogdGltZSBvbiBldmVyeSBtdWx0aXhhY3QgY3JlYXRpb24u CkBAIC0xNDY3LDYgKzE0NTcsOSBAQCByZXRyeToKIAlMV0xvY2tSZWxlYXNlKGxvY2spOwogCWxv Y2sgPSBOVUxMOwogCisJLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVtYmVycyBzaG91bGQgbm90 IGhhcHBlbiAqLworCUFzc2VydChsZW5ndGggPiAwKTsKKwogCS8qCiAJICogSWYgd2Ugc2xlcHQg YWJvdmUsIGNsZWFuIHVwIHN0YXRlOyBpdCdzIG5vIGxvbmdlciBuZWVkZWQuCiAJICovCkBAIC0x NDc1LDcgKzE0NjgsNiBAQCByZXRyeToKIAogCXB0ciA9IChNdWx0aVhhY3RNZW1iZXIgKikgcGFs bG9jKGxlbmd0aCAqIHNpemVvZihNdWx0aVhhY3RNZW1iZXIpKTsKIAotCXRydWVsZW5ndGggPSAw OwogCXByZXZfcGFnZW5vID0gLTE7CiAJZm9yIChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKywg b2Zmc2V0KyspCiAJewpAQCAtMTUxMywzNiArMTUwNSwyNyBAQCByZXRyeToKIAkJeGFjdHB0ciA9 IChUcmFuc2FjdGlvbklkICopCiAJCQkoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2Vf YnVmZmVyW3Nsb3Rub10gKyBtZW1iZXJvZmYpOwogCi0JCWlmICghVHJhbnNhY3Rpb25JZElzVmFs aWQoKnhhY3RwdHIpKQotCQl7Ci0JCQkvKiBDb3JuZXIgY2FzZSAzOiB3ZSBtdXN0IGJlIGxvb2tp bmcgYXQgdW51c2VkIHNsb3QgemVybyAqLwotCQkJQXNzZXJ0KG9mZnNldCA9PSAwKTsKLQkJCWNv bnRpbnVlOwotCQl9CisJCUFzc2VydChUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpOwog CiAJCWZsYWdzb2ZmID0gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCk7CiAJCWJzaGlmdCA9 IE1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KG9mZnNldCk7CiAJCWZsYWdzcHRyID0gKHVpbnQzMiAq KSAoTXVsdGlYYWN0TWVtYmVyQ3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub10gKyBmbGFn c29mZik7CiAKLQkJcHRyW3RydWVsZW5ndGhdLnhpZCA9ICp4YWN0cHRyOwotCQlwdHJbdHJ1ZWxl bmd0aF0uc3RhdHVzID0gKCpmbGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1Rf QklUTUFTSzsKLQkJdHJ1ZWxlbmd0aCsrOworCQlwdHJbaV0ueGlkID0gKnhhY3RwdHI7CisJCXB0 cltpXS5zdGF0dXMgPSAoKmZsYWdzcHRyID4+IGJzaGlmdCkgJiBNWEFDVF9NRU1CRVJfWEFDVF9C SVRNQVNLOwogCX0KIAogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAKLQkvKiBBIG11bHRpeGlkIHdp dGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCi0JQXNzZXJ0KHRydWVsZW5ndGgg PiAwKTsKLQogCS8qCiAJICogQ29weSB0aGUgcmVzdWx0IGludG8gdGhlIGxvY2FsIGNhY2hlLgog CSAqLwotCW1YYWN0Q2FjaGVQdXQobXVsdGksIHRydWVsZW5ndGgsIHB0cik7CisJbVhhY3RDYWNo ZVB1dChtdWx0aSwgbGVuZ3RoLCBwdHIpOwogCiAJZGVidWdfZWxvZzMoREVCVUcyLCAiR2V0TWVt YmVyczogbm8gY2FjaGUgZm9yICVzIiwKLQkJCQlteGlkX3RvX3N0cmluZyhtdWx0aSwgdHJ1ZWxl bmd0aCwgcHRyKSk7CisJCQkJbXhpZF90b19zdHJpbmcobXVsdGksIGxlbmd0aCwgcHRyKSk7CiAJ Km1lbWJlcnMgPSBwdHI7Ci0JcmV0dXJuIHRydWVsZW5ndGg7CisJcmV0dXJuIGxlbmd0aDsKIH0K IAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZSBiL3NyYy9iaW4v cGdfdXBncmFkZS9NYWtlZmlsZQppbmRleCA2OWZjZjU5M2NhZS4uNDI5OTVkNTNiMGIgMTAwNjQ0 Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX3VwZ3Jh ZGUvTWFrZWZpbGUKQEAgLTE4LDExICsxOCwxNCBAQCBPQkpTID0gXAogCWZpbGUubyBcCiAJZnVu Y3Rpb24ubyBcCiAJaW5mby5vIFwKKwltdWx0aXhhY3RfbmV3Lm8gXAorCW11bHRpeGFjdF9vbGQu byBcCiAJb3B0aW9uLm8gXAogCXBhcmFsbGVsLm8gXAogCXBnX3VwZ3JhZGUubyBcCiAJcmVsZmls ZW51bWJlci5vIFwKIAlzZXJ2ZXIubyBcCisJc2xydV9pby5vIFwKIAl0YWJsZXNwYWNlLm8gXAog CXRhc2subyBcCiAJdXRpbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNv bi5idWlsZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBhYzk5MmYwZDE0 Yi4uM2U0NmM0NTEyY2YgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWls ZAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKQEAgLTgsMTEgKzgsMTQgQEAg cGdfdXBncmFkZV9zb3VyY2VzID0gZmlsZXMoCiAgICdmaWxlLmMnLAogICAnZnVuY3Rpb24uYycs CiAgICdpbmZvLmMnLAorICAnbXVsdGl4YWN0X25ldy5jJywKKyAgJ211bHRpeGFjdF9vbGQuYycs CiAgICdvcHRpb24uYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX3VwZ3JhZGUuYycsCiAgICdy ZWxmaWxlbnVtYmVyLmMnLAogICAnc2VydmVyLmMnLAorICAnc2xydV9pby5jJywKICAgJ3RhYmxl c3BhY2UuYycsCiAgICd0YXNrLmMnLAogICAndXRpbC5jJywKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5kNmYyZTM4YzI4 NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMK QEAgLTAsMCArMSwyNDUgQEAKKy8qCisgKiBtdWx0aXhhY3RfbmV3LmMKKyAqCisgKiBSZXdyaXRl IHByZS12MTkgbXVsdGl4YWN0cyB0byBuZXcgZm9ybWF0IHdpdGggNjQtYml0IE11bHRpWGFjdE9m ZnNldHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVs b3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jCisgKi8K KworI2luY2x1ZGUgIm11bHRpeGFjdF9uZXcuaCIKKworLyoKKyAqIE5PVEU6IEJlbG93IGFyZSBh IGJ1bmNoIG9mIGRlZmluaXRpb25zIGFuZCBzaW1wbGUgaW5saW5lIGZ1bmN0aW9ucyB0aGF0IGFy ZQorICogY29weS1wYXN0ZWQgZnJvbSBtdWx0aXhhY3QuYworICovCit0eXBlZGVmIHVpbnQzMiBT aG9ydE11bHRpWGFjdE9mZnNldDsKKworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZzZXQs IDggYnl0ZXMgZm9yIHRoZSBiYXNlICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9Q QUdFCQlcCisJKChCTENLU1ogLSBzaXplb2YoTXVsdGlYYWN0T2Zmc2V0KSkgLyBzaXplb2YoU2hv cnRNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhhY3RJZFRv T2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgLyBNVUxUSVhB Q1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK011bHRpWGFjdElk VG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkgJSBNVUxU SVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4 YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGluIGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJf QklUU19QRVJfWEFDVAkJCTgKKyNkZWZpbmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJ MQorI2RlZmluZSBNWEFDVF9NRU1CRVJfWEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJf QklUU19QRVJfWEFDVCkgLSAxKQorCisvKiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFy ZSB0aGVyZSBpbiBhIGdyb3VwPyAqLworI2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9H Uk9VUAkJNAorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShN VUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllU RSkKKy8qIHNpemUgaW4gYnl0ZXMgb2YgYSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBNVUxU SVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBcCisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBN VUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVS X1BBR0UJXAorCShNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01F TUJFUlNfUEVSX01FTUJFUkdST1VQKQorCisvKgorICogQmVjYXVzZSB0aGUgbnVtYmVyIG9mIGl0 ZW1zIHBlciBwYWdlIGlzIG5vdCBhIGRpdmlzb3Igb2YgdGhlIGxhc3QgaXRlbQorICogbnVtYmVy IChtZW1iZXIgMHhGRkZGRkZGRiksIHRoZSBsYXN0IHNlZ21lbnQgZG9lcyBub3QgdXNlIHRoZSBt YXhpbXVtIG51bWJlcgorICogb2YgcGFnZXMsIGFuZCBtb3Jlb3ZlciB0aGUgbGFzdCB1c2VkIHBh Z2UgdGhlcmVpbiBkb2VzIG5vdCB1c2UgdGhlIHNhbWUKKyAqIG51bWJlciBvZiBpdGVtcyBhcyBw cmV2aW91cyBwYWdlcy4gIChBbm90aGVyIHdheSB0byBzYXkgaXQgaXMgdGhhdCB0aGUKKyAqIDB4 RkZGRkZGRkYgbWVtYmVyIGlzIHNvbWV3aGVyZSBpbiB0aGUgbWlkZGxlIG9mIHRoZSBsYXN0IHBh Z2UsIHNvIHRoZSBwYWdlCisgKiBoYXMgc29tZSBlbXB0eSBzcGFjZSBhZnRlciB0aGF0IGl0ZW0u KQorICoKKyAqIFRoaXMgY29uc3RhbnQgaXMgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBs YXN0IHBhZ2Ugb2YgdGhlIGxhc3Qgc2VnbWVudC4KKyAqLworI2RlZmluZSBNQVhfTUVNQkVSU19J Tl9MQVNUX01FTUJFUlNfUEFHRSBcCisJCSgodWludDMyKSAoKDB4RkZGRkZGRkYgJSBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfUEFHRSkgKyAxKSkKKworLyogcGFnZSBpbiB3aGljaCBhIG1lbWJlciBp cyB0byBiZSBmb3VuZCAqLworc3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclBh Z2UoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gb2Zmc2V0IC8gTVVMVElYQUNU X01FTUJFUlNfUEVSX1BBR0U7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRoaW4g cGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBp bnQKK01YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCU11 bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1C RVJHUk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9V UFNfUEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1C RVJHUk9VUF9TSVpFOworCisJcmV0dXJuIGJ5dGVvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50 CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWlu dAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1C RVJHUk9VUDsKKwlpbnQJCQlic2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJf QklUU19QRVJfWEFDVDsKKworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qIExvY2F0aW9uIChieXRl IG9mZnNldCB3aXRoaW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8K K3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNl dCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNU X01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNl dChvZmZzZXQpICsKKwkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1iZXJf aW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9p ZAorTVhPZmZzZXRXcml0ZShjaGFyICpidWYsIGludCBlbnRyeW5vLCBNdWx0aVhhY3RPZmZzZXQg b2Zmc2V0KQoreworCU11bHRpWGFjdE9mZnNldAkJCSpvZmZwdHI7CisJU2hvcnRNdWx0aVhhY3RP ZmZzZXQJKm9mZjMycHRyOworCisJb2ZmcHRyID0gKE11bHRpWGFjdE9mZnNldCAqKSBidWY7CisJ aWYgKGVudHJ5bm8gIT0gMCkKKwl7CisJCW9mZjMycHRyID0gKFNob3J0TXVsdGlYYWN0T2Zmc2V0 ICopIChvZmZwdHIgKyAxKTsJLyogYnlwYXNzIGJhc2UgKi8KKwkJb2ZmMzJwdHIgKz0gZW50cnlu byAtIDE7CisJCSpvZmYzMnB0ciA9IChTaG9ydE11bHRpWGFjdE9mZnNldCkgKG9mZnNldCAtICpv ZmZwdHIpOworCisJCXJldHVybjsKKwl9CisKKwkvKgorCSAqIFRoZSBmaXJzdCBvZmZzZXQgb24g dGhlIHBhZ2UgaXMgYXNzaWduZWQgYSA2NC1iaXQgdmFsdWUuICBBbGwgb3RoZXIKKwkgKiBlbGVt ZW50cyBvbiB0aGUgcGFnZSB3aWxsIGJlIGNhbGN1bGF0ZWQgdXNpbmcgdGhpcyB2YWx1ZSBhcyBh IGJhc2UgYW5kCisJICogYWRkZWQgdG8gaXQgMzItYml0IHZhbHVlLgorCSAqLworCSpvZmZwdHIg PSBvZmZzZXQ7Cit9CisKK011bHRpWGFjdFdyaXRlciAqCitBbGxvY011bHRpWGFjdFdyaXRlKGNo YXIgKnBnZGF0YSwgTXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJCQkJTXVsdGlYYWN0T2Zmc2V0 IGZpcnN0T2Zmc2V0KQoreworCU11bHRpWGFjdFdyaXRlciAqc3RhdGUgPSBzdGF0ZSA9IHBnX21h bGxvYyhzaXplb2YoKnN0YXRlKSk7CisJY2hhcgkJCQlkaXJbTUFYUEdQQVRIXSA9IHswfTsKKwor CXN0YXRlLT5uZXh0TVhhY3QgPSBmaXJzdE11bHRpOworCXN0YXRlLT5uZXh0T2Zmc2V0ID0gZmly c3RPZmZzZXQ7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFjdC9vZmZzZXRzIiwg cGdkYXRhKTsKKwlzdGF0ZS0+b2Zmc2V0ID0gQWxsb2NTbHJ1V3JpdGUoZGlyKTsKKworCXBnX3Nw cmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJlcnMiLCBwZ2RhdGEpOworCXN0YXRlLT5t ZW1iZXJzID0gQWxsb2NTbHJ1V3JpdGUoZGlyKTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoK KyAqIFNpbXBsaWZpZWQgY29weSBvZiB0aGUgY29ycmVzcG9uZGluZyBzZXJ2ZXIgZnVuY3Rpb24K KyAqLworTXVsdGlYYWN0SWQKK0dldE5ld011bHRpWGFjdElkKE11bHRpWGFjdFdyaXRlciAqc3Rh dGUsIGludCBubWVtYmVycywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCit7CisJTXVsdGlYYWN0 SWQJCXJlc3VsdDsKKworCS8qIEhhbmRsZSB3cmFwYXJvdW5kIG9mIHRoZSBuZXh0TVhhY3QgY291 bnRlciAqLworCWlmIChzdGF0ZS0+bmV4dE1YYWN0IDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJc3Rh dGUtPm5leHRNWGFjdCA9IEZpcnN0TXVsdGlYYWN0SWQ7CisKKwkvKiBBc3NpZ24gdGhlIE1YSUQg Ki8KKwlyZXN1bHQgPSBzdGF0ZS0+bmV4dE1YYWN0OworCisJLyogUmVzZXJ2ZSB0aGUgbWVtYmVy cyBzcGFjZSwgc2ltaWxhcmx5IHRvIGFib3ZlLiAqLworCSpvZmZzZXQgPSBzdGF0ZS0+bmV4dE9m ZnNldDsKKworCS8qCisJICogQWR2YW5jZSBjb3VudGVycy4gIEFzIGluIEdldE5ld1RyYW5zYWN0 aW9uSWQoKSwgdGhpcyBtdXN0IG5vdCBoYXBwZW4KKwkgKiB1bnRpbCBhZnRlciBmaWxlIGV4dGVu c2lvbiBoYXMgc3VjY2VlZGVkIQorCSAqCisJICogV2UgZG9uJ3QgY2FyZSBhYm91dCBNdWx0aVhh Y3RJZCB3cmFwYXJvdW5kIGhlcmU7IGl0IHdpbGwgYmUgaGFuZGxlZCBieQorCSAqIHRoZSBuZXh0 IGl0ZXJhdGlvbi4gIEJ1dCBub3RlIHRoYXQgbmV4dE1YYWN0IG1heSBiZSBJbnZhbGlkTXVsdGlY YWN0SWQKKwkgKiBvciB0aGUgZmlyc3QgdmFsdWUgb24gYSBzZWdtZW50LWJlZ2lubmluZyBwYWdl IGFmdGVyIHRoaXMgcm91dGluZQorCSAqIGV4aXRzLCBzbyBhbnlvbmUgZWxzZSBsb29raW5nIGF0 IHRoZSB2YXJpYWJsZSBtdXN0IGJlIHByZXBhcmVkIHRvIGRlYWwKKwkgKiB3aXRoIGVpdGhlciBj YXNlLiAgU2ltaWxhcmx5LCBuZXh0T2Zmc2V0IG1heSBiZSB6ZXJvLCBidXQgd2Ugd29uJ3QgdXNl CisJICogdGhhdCBhcyB0aGUgYWN0dWFsIHN0YXJ0IG9mZnNldCBvZiB0aGUgbmV4dCBtdWx0aXhh Y3QuCisJICovCisJKHN0YXRlLT5uZXh0TVhhY3QpKys7CisKKwlzdGF0ZS0+bmV4dE9mZnNldCAr PSBubWVtYmVyczsKKworCXJldHVybiByZXN1bHQ7Cit9CisKKy8qCisgKiBXcml0ZSBhIG5ldyBt dWx0aXhhY3Qgd2l0aCBtZW1iZXJzLgorICoKKyAqIFNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUg Y29ycmVzcG9kaW5nIHNlcnZlciBmdW5jdGlvbiwgaGVuY2UgdGhlIG5hbWUuCisgKi8KK3ZvaWQK K1JlY29yZE5ld011bHRpWGFjdChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0LAorCQkJCSAgIE11bHRpWGFjdElkIG11bHRpLCBpbnQgbm1lbWJlcnMsIE11bHRp WGFjdE1lbWJlciAqbWVtYmVycykKK3sKKwlpbnQ2NAkJcGFnZW5vOworCWludDY0CQlwcmV2X3Bh Z2VubzsKKwlpbnQJCQllbnRyeW5vLAorCQkJCWk7CisJY2hhcgkgICAqYnVmOworCisJcGFnZW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpOworCWVudHJ5bm8gPSBNdWx0aVhhY3RJ ZFRvT2Zmc2V0RW50cnkobXVsdGkpOworCisJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFnZShzdGF0 ZS0+b2Zmc2V0LCBwYWdlbm8pOworCU1YT2Zmc2V0V3JpdGUoYnVmLCBlbnRyeW5vLCBvZmZzZXQp OworCisJcHJldl9wYWdlbm8gPSAtMTsKKworCWZvciAoaSA9IDA7IGkgPCBubWVtYmVyczsgaSsr LCBvZmZzZXQrKykKKwl7CisJCVRyYW5zYWN0aW9uSWQgKm1lbWJlcnB0cjsKKwkJdWludDMyCSAg ICpmbGFnc3B0cjsKKwkJdWludDMyCQlmbGFnc3ZhbDsKKwkJaW50CQkJYnNoaWZ0OworCQlpbnQJ CQlmbGFnc29mZjsKKwkJaW50CQkJbWVtYmVyb2ZmOworCisJCUFzc2VydChtZW1iZXJzW2ldLnN0 YXR1cyA8PSBNdWx0aVhhY3RTdGF0dXNVcGRhdGUpOworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9N ZW1iZXJQYWdlKG9mZnNldCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQo b2Zmc2V0KTsKKwkJZmxhZ3NvZmYgPSBNWE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KTsKKwkJ YnNoaWZ0ID0gTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQob2Zmc2V0KTsKKworCQlpZiAocGFnZW5v ICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBTbHJ1V3JpdGVTd2l0Y2hQYWdlKHN0YXRl LT5tZW1iZXJzLCBwYWdlbm8pOworCQkJcHJldl9wYWdlbm8gPSBwYWdlbm87CisJCX0KKworCQlt ZW1iZXJwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoYnVmICsgbWVtYmVyb2ZmKTsKKworCQkqbWVt YmVycHRyID0gbWVtYmVyc1tpXS54aWQ7CisKKwkJZmxhZ3NwdHIgPSAodWludDMyICopIChidWYg KyBmbGFnc29mZik7CisKKwkJZmxhZ3N2YWwgPSAqZmxhZ3NwdHI7CisJCWZsYWdzdmFsICY9IH4o KCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpIDw8IGJzaGlmdCk7CisJCWZs YWdzdmFsIHw9IChtZW1iZXJzW2ldLnN0YXR1cyA8PCBic2hpZnQpOworCQkqZmxhZ3NwdHIgPSBm bGFnc3ZhbDsKKwl9Cit9CisKK3ZvaWQKK0ZyZWVNdWx0aVhhY3RXcml0ZShNdWx0aVhhY3RXcml0 ZXIgKnN0YXRlKQoreworCUZyZWVTbHJ1V3JpdGUoc3RhdGUtPm9mZnNldCk7CisJRnJlZVNscnVX cml0ZShzdGF0ZS0+bWVtYmVycyk7CisKKwlwZnJlZShzdGF0ZSk7Cit9CmRpZmYgLS1naXQgYS9z cmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL211 bHRpeGFjdF9uZXcuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzNk NWQxYjgyMjIKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X25ldy5oCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisgKiBtdWx0aXhhY3RfbmV3LmgKKyAqCisgKiBD b3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisg KiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCisgKi8KKworI2luY2x1ZGUgInBv c3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJhY2Nlc3MvbXVsdGl4YWN0LmgiCisKKyNpbmNsdWRl ICJzbHJ1X2lvLmgiCisKK3R5cGVkZWYgc3RydWN0IE11bHRpWGFjdFdyaXRlcgoreworCU11bHRp WGFjdElkCQkJbmV4dE1YYWN0OworCU11bHRpWGFjdE9mZnNldAkJbmV4dE9mZnNldDsKKworCVNs cnVTZWdTdGF0ZQkgICAqb2Zmc2V0OworCVNscnVTZWdTdGF0ZQkgICAqbWVtYmVyczsKK30gTXVs dGlYYWN0V3JpdGVyOworCitleHRlcm4gTXVsdGlYYWN0V3JpdGVyICpBbGxvY011bHRpWGFjdFdy aXRlKGNoYXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJTXVsdGlYYWN0SWQgZmlyc3RNdWx0aSwKKwkJ CQkJCQkJCQkJTXVsdGlYYWN0T2Zmc2V0IGZpcnN0T2Zmc2V0KTsKK2V4dGVybiBNdWx0aVhhY3RJ ZCBHZXROZXdNdWx0aVhhY3RJZChNdWx0aVhhY3RXcml0ZXIgKnN0YXRlLCBpbnQgbm1lbWJlcnMs CisJCQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpOworZXh0ZXJuIHZvaWQgUmVjb3Jk TmV3TXVsdGlYYWN0KE11bHRpWGFjdFdyaXRlciAqc3RhdGUsIE11bHRpWGFjdE9mZnNldCBvZmZz ZXQsCisJCQkJCQkJICAgTXVsdGlYYWN0SWQgbXVsdGksIGludCBubWVtYmVycywKKwkJCQkJCQkg ICBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpOworZXh0ZXJuIHZvaWQgRnJlZU11bHRpWGFjdFdy aXRlKE11bHRpWGFjdFdyaXRlciAqd3JpdGVyKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBn cmFkZS9tdWx0aXhhY3Rfb2xkLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42Y2MzODRkMmNmMgotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKQEAgLTAs MCArMSwyOTYgQEAKKy8qCisgKiBtdWx0aXhhY3Rfb2xkLmMKKyAqCisgKiBSZXdyaXRlIHByZS12 MTkgbXVsdGl4YWN0cyB0byBuZXcgZm9ybWF0IHdpdGggNjQtYml0IE11bHRpWGFjdE9mZnNldHMK KyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50 IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCisgKi8KKworI2lu Y2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKworI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKKworLyoK KyAqIE5PVEU6IGJlbG93IGFyZSBhIGJ1bmNoIG9mIGRlZmluaXRpb25zIGFuZCBzaW1wbGUgc3R0 YWljIGlubGluZSBmdW5jdGlvbnMKKyAqIHRoYXQgYXJlIGNvcHktcGFzdGVkIGZyb20gbXVsdGl4 YWN0LmMgZnJvbSB2ZXJzaW9uIDE4LiAgVGhlIG9ubHkgZGlmZmVyZW5jZQorICogaXMgdGhhdCB3 ZSB1c2UgdGhlIE9sZE11bHRpWGFjdE9mZnNldCB0eXBlIGVxdWFsIHRvIHVpbnQzMiBpbnN0ZWFk IG9mCisgKiBNdWx0aVhhY3RPZmZzZXQgd2hpY2ggYmVjYW1lIHVpbnQ2NC4KKyAqLworCisvKiBX ZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCBhbmQgOCBieXRlcyBwZXIgYmFzZSBmb3IgZWFj aCBwYWdlLiAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8g c2l6ZW9mKE9sZE11bHRpWGFjdE9mZnNldCkpCisKK3N0YXRpYyBpbmxpbmUgaW50NjQKK011bHRp WGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBtdWx0aSAv IE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQorCitzdGF0aWMgaW5saW5lIGludAorTXVs dGlYYWN0SWRUb09mZnNldEVudHJ5KE11bHRpWGFjdElkIG11bHRpKQoreworCXJldHVybiBtdWx0 aSAlIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQorCisvKgorICogVGhlIHNpdHVhdGlv biBmb3IgbWVtYmVycyBpcyBhIGJpdCBtb3JlIGNvbXBsZXg6IHdlIHN0b3JlIG9uZSBieXRlIG9m CisgKiBhZGRpdGlvbmFsIGZsYWcgYml0cyBmb3IgZWFjaCBUcmFuc2FjdGlvbklkLiAgVG8gZG8g dGhpcyB3aXRob3V0IGdldHRpbmcKKyAqIGludG8gYWxpZ25tZW50IGlzc3Vlcywgd2Ugc3RvcmUg Zm91ciBieXRlcyBvZiBmbGFncywgYW5kIHRoZW4gdGhlCisgKiBjb3JyZXNwb25kaW5nIDQgWGlk cy4gIEVhY2ggc3VjaCA1LXdvcmQgKDIwLWJ5dGUpIHNldCB3ZSBjYWxsIGEgImdyb3VwIiwgYW5k CisgKiBhcmUgc3RvcmVkIGFzIGEgd2hvbGUgaW4gcGFnZXMuICBUaHVzLCB3aXRoIDhrQiBCTENL U1osIHdlIGtlZXAgNDA5IGdyb3VwcworICogcGVyIHBhZ2UuICBUaGlzIHdhc3RlcyAxMiBieXRl cyBwZXIgcGFnZSwgYnV0IHRoYXQncyBPSyAtLSBzaW1wbGljaXR5IChhbmQKKyAqIHBlcmZvcm1h bmNlKSB0cnVtcHMgc3BhY2UgZWZmaWNpZW5jeSBoZXJlLgorICoKKyAqIE5vdGUgdGhhdCB0aGUg Im9mZnNldCIgbWFjcm9zIHdvcmsgd2l0aCBieXRlIG9mZnNldCwgbm90IGFycmF5IGluZGV4ZXMs IHNvCisgKiBhcml0aG1ldGljIG11c3QgYmUgZG9uZSB1c2luZyAiY2hhciAqIiBwb2ludGVycy4K KyAqLworLyogV2UgbmVlZCBlaWdodCBiaXRzIHBlciB4YWN0LCBzbyBvbmUgeGFjdCBmaXRzIGlu IGEgYnl0ZSAqLworI2RlZmluZSBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVAkJCTgKKyNkZWZp bmUgTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFCQkJMQorI2RlZmluZSBNWEFDVF9NRU1CRVJf WEFDVF9CSVRNQVNLCSgoMSA8PCBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVCkgLSAxKQorCisv KiBob3cgbWFueSBmdWxsIGJ5dGVzIG9mIGZsYWdzIGFyZSB0aGVyZSBpbiBhIGdyb3VwPyAqLwor I2RlZmluZSBNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUAkJNAorI2RlZmluZSBNVUxUSVhB Q1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAJXAorCShNVUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9H Uk9VUCAqIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURSkKKy8qIHNpemUgaW4gYnl0ZXMgb2Yg YSBjb21wbGV0ZSBncm91cCAqLworI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0laRSBc CisJKHNpemVvZihUcmFuc2FjdGlvbklkKSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJH Uk9VUCArIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQKQorI2RlZmluZSBNVUxUSVhBQ1Rf TUVNQkVSR1JPVVBTX1BFUl9QQUdFIChCTENLU1ogLyBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBfU0la RSkKKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UJXAorCShNVUxUSVhBQ1RfTUVN QkVSR1JPVVBTX1BFUl9QQUdFICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQKQor CisvKiBwYWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCitzdGF0aWMgaW5s aW5lIGludDY0CitNWE9mZnNldFRvTWVtYmVyUGFnZShPbGRNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0 KQoreworCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKK30KKwor LyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBmbGFnIHdvcmQgZm9yIGEg Z2l2ZW4gbWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0 KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJT2xkTXVsdGlYYWN0T2Zmc2V0IGdyb3VwID0g b2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJCWdyb3Vw b25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01FTUJFUkdST1VQU19QRVJfUEFHRTsKKwlpbnQJCQli eXRlb2ZmID0gZ3JvdXBvbnBnICogTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkU7CisKKwlyZXR1 cm4gYnl0ZW9mZjsKK30KKworLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBv ZiBUcmFuc2FjdGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLworc3RhdGljIGlubGluZSBpbnQKK01Y T2Zmc2V0VG9NZW1iZXJPZmZzZXQoT2xkTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJ CQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVS R1JPVVA7CisKKwlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKworCQlNVUxU SVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCArCisJCW1lbWJlcl9pbl9ncm91cCAqIHNpemVvZihU cmFuc2FjdGlvbklkKTsKK30KKworc3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc0Jp dFNoaWZ0KE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dy b3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOworCWludAkJ CWJzaGlmdCA9IG1lbWJlcl9pbl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUOwor CisJcmV0dXJuIGJzaGlmdDsKK30KKworLyoKKyAqIENvbnN0cnVjdCByZWFkZXIgb2Ygb2xkIG11 bHRpeGFjdHMuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhl IGFsbCBvdGhlciBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworT2xkTXVsdGlYYWN0UmVhZGVy ICoKK0FsbG9jT2xkTXVsdGlYYWN0UmVhZChjaGFyICpwZ2RhdGEsIE11bHRpWGFjdElkIG5leHRN dWx0aSwKKwkJCQkJICBPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldCkKK3sKKwlPbGRNdWx0 aVhhY3RSZWFkZXIgKnN0YXRlID0gc3RhdGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOwor CWNoYXIJCQkJZGlyW01BWFBHUEFUSF0gPSB7MH07CisKKwlzdGF0ZS0+bmV4dE1YYWN0ID0gbmV4 dE11bHRpOworCXN0YXRlLT5uZXh0T2Zmc2V0ID0gbmV4dE9mZnNldDsKKworCXBnX3NwcmludGYo ZGlyLCAiJXMvcGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEpOworCXN0YXRlLT5vZmZzZXQg PSBBbGxvY1NscnVSZWFkKGRpcik7CisKKwlwZ19zcHJpbnRmKGRpciwgIiVzL3BnX211bHRpeGFj dC9tZW1iZXJzIiwgcGdkYXRhKTsKKwlzdGF0ZS0+bWVtYmVycyA9IEFsbG9jU2xydVJlYWQoZGly KTsKKworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIFRoaXMgaXMgYSBzaW1wbGlmaWVkIHZl cnNpb24gb2YgdGhlIEdldE11bHRpWGFjdElkTWVtYmVycygpIHNlcnZlciBmdW5jdGlvbi4KKyAq CisgKiAtIE9ubHkgcmV0dXJuIHRoZSB1cGRhdGluZyBtZW1iZXIsIGlmIGFueS4gVXBncmFkZSBv bmx5IGNhcmVzIGFib3V0IHRoZQorICogICB1cGRhdGVycy4gSWYgdGhlcmUgaXMgbm8gdXBkYXRp bmcgbWVtYmVyLCByZXR1cm4gdGhlIGZpcnN0IGxvY2tpbmctb25seQorICogICBtZW1iZXIuIFdl IGRvbid0IGhhdmUgYW55IHdheSB0byByZXByZXNlbnQgIm5vIG1lbWJlcnMiLCBidXQgd2UgYWxz byBkb24ndAorICogICBuZWVkIHRvIHByZXNlcnZlIGFsbCB0aGUgbG9ja2luZyBtZW1iZXJzLgor ICoKKyAqIC0gV2UgZG9uJ3QgbmVlZCB0byB3b3JyeSBhYm91dCBsb2NraW5nIGFuZCBzb21lIGNv cm5lciBjYXNlcyBiZWNhdXNlIHRoZXJlJ3MKKyAqICAgbm8gY29uY3VycmVudCBhY3Rpdml0eS4K KyAqLwordm9pZAorR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVh ZGVyICpzdGF0ZSwgTXVsdGlYYWN0SWQgbXVsdGksCisJCQkJCQkJICBUcmFuc2FjdGlvbklkICpy ZXN1bHQsIE11bHRpWGFjdFN0YXR1cyAqc3RhdHVzKQoreworCU11bHRpWGFjdElkCQluZXh0TVhh Y3QsCisJCQkJCW5leHRPZmZzZXQsCisJCQkJCXRtcE1YYWN0OworCWludDY0CQkJcGFnZW5vLAor CQkJCQlwcmV2X3BhZ2VubzsKKwlpbnQJCQkJZW50cnlubywKKwkJCQkJbGVuZ3RoOworCWNoYXIJ CSAgICpidWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHIsCisJCQkJCQlvZmZzZXQ7CisJ VHJhbnNhY3Rpb25JZAlyZXN1bHRfeGlkID0gSW52YWxpZFRyYW5zYWN0aW9uSWQ7CisJYm9vbAkJ CXJlc3VsdF9pc3VwZGF0ZSA9IGZhbHNlOworCisJbmV4dE1YYWN0ID0gc3RhdGUtPm5leHRNWGFj dDsKKwluZXh0T2Zmc2V0ID0gc3RhdGUtPm5leHRPZmZzZXQ7CisKKwkvKgorCSAqIFNlZSBHZXRN dWx0aVhhY3RJZE1lbWJlcnMgaW4gbXVsdGl4YWN0LmMKKwkgKgorCSAqIEZpbmQgb3V0IHRoZSBv ZmZzZXQgYXQgd2hpY2ggd2UgbmVlZCB0byBzdGFydCByZWFkaW5nIE11bHRpWGFjdE1lbWJlcnMK KwkgKiBhbmQgdGhlIG51bWJlciBvZiBtZW1iZXJzIGluIHRoZSBtdWx0aXhhY3QuICBXZSBkZXRl cm1pbmUgdGhlIGxhdHRlciBhcworCSAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtdWx0 aXhhY3QncyBzdGFydGluZyBvZmZzZXQgYW5kIHRoZSBuZXh0CisJICogb25lJ3MuICBIb3dldmVy LCB0aGVyZSBhcmUgc29tZSBjb3JuZXIgY2FzZXMgdG8gd29ycnkgYWJvdXQ6CisJICoKKwkgKiAx LiBUaGlzIG11bHRpeGFjdCBtYXkgYmUgdGhlIGxhdGVzdCBvbmUgY3JlYXRlZCwgaW4gd2hpY2gg Y2FzZSB0aGVyZSBpcworCSAqIG5vIG5leHQgb25lIHRvIGxvb2sgYXQuICBJbiB0aGlzIGNhc2Ug dGhlIG5leHRPZmZzZXQgdmFsdWUgd2UganVzdAorCSAqIHNhdmVkIGlzIHRoZSBjb3JyZWN0IGVu ZHBvaW50LgorCSAqCisJICogMi4gVGhlIG5leHQgbXVsdGl4YWN0IG1heSBzdGlsbCBiZSBpbiBw cm9jZXNzIG9mIGJlaW5nIGZpbGxlZCBpbi4uLgorCSAqIFRoaXMgY2Fubm90IGhhcHBlbiBkdXJp bmcgdXBncmFkZS4KKwkgKgorCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0SWQgaW5jcmVt ZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCisJICogaGFuZGxlIGNhc2UgIzIsIHRo ZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZzZXQKKwkgKiB3cmFwYXJv dW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0IGlzIG9uZSwgaXMgdGhhdCBv dXIKKwkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQsIG9yIGRpZCBpdCBlbmQgYXQgemVy byB3aXRoIGEgc3Vic2VxdWVudAorCSAqIGluY3JlbWVudD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5n IHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVybyd0aAorCSAqIG1lbWJlciBzbG90IHdhc24n dCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVybywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAorCSAq IHRyYW5zYWN0aW9uIElEIHNvIGl0IGNhbid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJl Zm9yZSwgaWYgd2UKKwkgKiByZWFkIGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0 IGlnbm9yZSBpdC4KKwkgKi8KKworCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11 bHRpKTsKKwllbnRyeW5vID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1 ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCW9mZnB0ciA9 IChPbGRNdWx0aVhhY3RPZmZzZXQgKikgYnVmOworCW9mZnB0ciArPSBlbnRyeW5vOworCW9mZnNl dCA9ICpvZmZwdHI7CisKKwlBc3NlcnQob2Zmc2V0ICE9IDApOworCisJLyoKKwkgKiBVc2UgdGhl IHNhbWUgaW5jcmVtZW50IHJ1bGUgYXMgR2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9u J3QKKwkgKiBoYW5kbGUgd3JhcGFyb3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkgKi8K Kwl0bXBNWGFjdCA9IG11bHRpICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhhY3QpCisJ eworCQkvKiBDb3JuZXIgY2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFjdCAqLworCQls ZW5ndGggPSBuZXh0T2Zmc2V0IC0gb2Zmc2V0OworCX0KKwllbHNlCisJeworCQlPbGRNdWx0aVhh Y3RPZmZzZXQgbmV4dE1YT2Zmc2V0OworCisJCS8qIGhhbmRsZSB3cmFwYXJvdW5kIGlmIG5lZWRl ZCAqLworCQlpZiAodG1wTVhhY3QgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJdG1wTVhhY3QgPSBG aXJzdE11bHRpWGFjdElkOworCisJCXByZXZfcGFnZW5vID0gcGFnZW5vOworCisJCXBhZ2VubyA9 IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHRtcE1YYWN0KTsKKwkJZW50cnlubyA9IE11bHRpWGFj dElkVG9PZmZzZXRFbnRyeSh0bXBNWGFjdCk7CisKKwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2Vu bykKKwkJCWJ1ZiA9IFNscnVSZWFkU3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOwor CisJCW9mZnB0ciA9IChPbGRNdWx0aVhhY3RPZmZzZXQgKikgYnVmOworCQlvZmZwdHIgKz0gZW50 cnlubzsKKwkJbmV4dE1YT2Zmc2V0ID0gKm9mZnB0cjsKKworCQkvKgorCQkgKiBDb3JuZXIgY2Fz ZSAyOiBuZXh0IG11bHRpeGFjdCBpcyBzdGlsbCBiZWluZyBmaWxsZWQgaW4sIHRoaXMgbXVzdAor CQkgKiBub3QgaGFwcGVuIGR1cmluZyB1cGdyYWRlLgorCQkgKi8KKwkJQXNzZXJ0KG5leHRNWE9m ZnNldCAhPSAwKTsKKworCQlsZW5ndGggPSBuZXh0TVhPZmZzZXQgLSBvZmZzZXQ7CisJfQorCisJ cHJldl9wYWdlbm8gPSAtMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBvZmZz ZXQrKykKKwl7CisJCVRyYW5zYWN0aW9uSWQgKnhhY3RwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3Nw dHI7CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCW1lbWJlcm9m ZjsKKwkJTXVsdGlYYWN0U3RhdHVzIHN0OworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1iZXJQ YWdlKG9mZnNldCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQob2Zmc2V0 KTsKKworCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYgPSBTbHJ1UmVh ZFN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2X3BhZ2VubyA9IHBh Z2VubzsKKwkJfQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAqKSAoYnVmICsgbWVtYmVy b2ZmKTsKKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFjdHB0cikpCisJCXsKKwkJCS8q IENvcm5lciBjYXNlIDM6IHdlIG11c3QgYmUgbG9va2luZyBhdCB1bnVzZWQgc2xvdCB6ZXJvICov CisJCQlBc3NlcnQob2Zmc2V0ID09IDApOworCQkJY29udGludWU7CisJCX0KKworCQlmbGFnc29m ZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRv RmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKGJ1ZiArIGZs YWdzb2ZmKTsKKworCQlzdCA9ICgqZmxhZ3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9Y QUNUX0JJVE1BU0s7CisKKwkJLyogVmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgdXBkYXRl IFhpZCBhbW9uZyB0aGUgZ2l2ZW4gbWVtYmVycy4gKi8KKwkJaWYgKElTVVBEQVRFX2Zyb21fbXhz dGF0dXMoc3QpKQorCQl7CisJCQlpZiAocmVzdWx0X2lzdXBkYXRlKQorCQkJCXBnX2ZhdGFsKCJt dWx0aXhhY3QgJXUgaGFzIG1vcmUgdGhhbiBvbmUgdXBkYXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBt dWx0aSk7CisJCQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJCQlyZXN1bHRfaXN1cGRhdGUgPSB0 cnVlOworCQl9CisJCWVsc2UgaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1bHRfeGlkKSkK KwkJCXJlc3VsdF94aWQgPSAqeGFjdHB0cjsKKwl9CisKKwkvKiBBIG11bHRpeGlkIHdpdGggemVy byBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJc1Zh bGlkKHJlc3VsdF94aWQpKTsKKworCSpyZXN1bHQgPSByZXN1bHRfeGlkOworCSpzdGF0dXMgPSBy ZXN1bHRfaXN1cGRhdGUgPyBNdWx0aVhhY3RTdGF0dXNVcGRhdGUgOgorCQkJCQkJCQlNdWx0aVhh Y3RTdGF0dXNGb3JLZXlTaGFyZTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCByZWFk ZXIuCisgKi8KK3ZvaWQKK0ZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlYYWN0UmVhZGVy ICpzdGF0ZSkKK3sKKwlGcmVlU2xydVJlYWQoc3RhdGUtPm9mZnNldCk7CisJRnJlZVNscnVSZWFk KHN0YXRlLT5tZW1iZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4 YWN0X29sZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi44ZDQ2NTli YTZhMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xk LmgKQEAgLTAsMCArMSwzMSBAQAorLyoKKyAqIG11bHRpeGFjdF9vbGQuaAorICoKKyAqIENvcHly aWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNy Yy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKKyAqLworCisjaW5jbHVkZSAicG9zdGdy ZXNfZmUuaCIKKworI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNsdWRlICJzbHJ1 X2lvLmgiCisKK3R5cGVkZWYgdWludDMyIE9sZE11bHRpWGFjdE9mZnNldDsKKwordHlwZWRlZiBz dHJ1Y3QgT2xkTXVsdGlYYWN0UmVhZGVyCit7CisJTXVsdGlYYWN0SWQJCQluZXh0TVhhY3Q7CisJ T2xkTXVsdGlYYWN0T2Zmc2V0CW5leHRPZmZzZXQ7CisKKwlTbHJ1U2VnU3RhdGUJICAgKm9mZnNl dDsKKwlTbHJ1U2VnU3RhdGUJICAgKm1lbWJlcnM7Cit9IE9sZE11bHRpWGFjdFJlYWRlcjsKKwor ZXh0ZXJuIE9sZE11bHRpWGFjdFJlYWRlciAqQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIgKnBn ZGF0YSwKKwkJCQkJCQkJCQkJCSBNdWx0aVhhY3RJZCBuZXh0TXVsdGksCisJCQkJCQkJCQkJCQkg T2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpOworZXh0ZXJuIHZvaWQgR2V0T2xkTXVsdGlY YWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVhZGVyICpzdGF0ZSwKKwkJCQkJCQkJCQkg IE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkJCSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LAor CQkJCQkJCQkJCSAgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpOworZXh0ZXJuIHZvaWQgRnJlZU9s ZE11bHRpWGFjdFJlYWRlcihPbGRNdWx0aVhhY3RSZWFkZXIgKnJlYWRlcik7CmRpZmYgLS1naXQg YS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3Bn X3VwZ3JhZGUuYwppbmRleCA0OTBlOThmYTI2Zi4uNTQzMmMwM2EyYjAgMTAwNjQ0Ci0tLSBhL3Ny Yy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3Bn X3VwZ3JhZGUuYwpAQCAtNDksNiArNDksOCBAQAogI2luY2x1ZGUgImNvbW1vbi9yZXN0cmljdGVk X3Rva2VuLmgiCiAjaW5jbHVkZSAiZmVfdXRpbHMvc3RyaW5nX3V0aWxzLmgiCiAjaW5jbHVkZSAi cGdfdXBncmFkZS5oIgorI2luY2x1ZGUgIm11bHRpeGFjdF9vbGQuaCIKKyNpbmNsdWRlICJtdWx0 aXhhY3RfbmV3LmgiCiAKIC8qCiAgKiBNYXhpbXVtIG51bWJlciBvZiBwZ19yZXN0b3JlIGFjdGlv bnMgKFRPQyBlbnRyaWVzKSB0byBwcm9jZXNzIHdpdGhpbiBvbmUKQEAgLTc2OSw2ICs3NzEsODIg QEAgY29weV9zdWJkaXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1YmRpciwgY29uc3QgY2hhciAq bmV3X3N1YmRpcikKIAljaGVja19vaygpOwogfQogCisvKgorICogQ29udmVydCBwZ19tdWx0aXhh Y3Qvb2Zmc2V0IGFuZCAvbWVtYmVycyB0byBuZXcgZm9ybWF0IHdpdGggNjQtYml0IG9mZnNldHMu CisgKi8KK3N0YXRpYyB2b2lkCitjb252ZXJ0X211bHRpeGFjdHMoTXVsdGlYYWN0SWQgKm5ld19u eHRtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpuZXdfbnh0bXhvZmYpCit7CisJTXVsdGlYYWN0SWQJ CQlvbGRlc3RfbXVsdGksCisJCQkJCQluZXh0X211bHRpOworCU9sZE11bHRpWGFjdFJlYWRlciAq b2xkX3JlYWRlcjsKKwlNdWx0aVhhY3RXcml0ZXIJICAgKm5ld193cml0ZXI7CisKKwlvbGRfcmVh ZGVyID0gQWxsb2NPbGRNdWx0aVhhY3RSZWFkKG9sZF9jbHVzdGVyLnBnZGF0YSwKKwkJCQkJCQkJ CSAgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSwKKwkJCQkJCQkJCSAg IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZik7CisJbmV3X3dyaXRlciA9 IEFsbG9jTXVsdGlYYWN0V3JpdGUobmV3X2NsdXN0ZXIucGdkYXRhLAorCQkJCQkJCQkJIG9sZF9j bHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAorCQkJCQkJCQkJIDEgLyogc2Vl IGJlbG93ICovKTsKKworCW9sZGVzdF9tdWx0aSA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNo a3BudF9vbGRzdE11bHRpOworCW5leHRfbXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5j aGtwbnRfbnh0bXVsdGk7CisKKwkvKiBoYW5kbGUgd3JhcGFyb3VuZCAqLworCWlmIChuZXh0X211 bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJbmV4dF9tdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7 CisKKwkvKgorCSAqIFJlYWQgbXVsdGl4aWRzIGZyb20gb2xkIGZpbGVzIG9uZSBieSBvbmUsIGFu ZCB3cml0ZSB0aGVtIGJhY2sgaW4gdGhlIG5ldworCSAqIGZvcm1hdC4KKwkgKgorCSAqIFRoZSBs b2NraW5nLW9ubHkgWElEcyB0aGF0IG1heSBiZSBwYXJ0IG9mIG11bHRpLXhpZHMgZG9uJ3QgbWF0 dGVyIGFmdGVyCisJICogdXBncmFkZSwgYXMgdGhlcmUgY2FuIGJlIG5vIHRyYW5zYWN0aW9ucyBy dW5uaW5nIGFjcm9zcyB1cGdyYWRlLiAgU28gYXMKKwkgKiBhIGxpdHRsZSBvcHRpbWl6YXRpb24s IHdlIG9ubHkgcmVhZCBvbmUgbWVtYmVyIGZyb20gZWFjaCBtdWx0aXhpZDogdGhlCisJICogb25l IHVwZGF0aW5nIG9uZSwgb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0ZSwgYXJiaXRyYXJpbHkgdGhl IGZpcnN0CisJICogbG9ja2luZyB4aWQuCisJICovCisJZm9yIChNdWx0aVhhY3RJZCBtdWx0aSA9 IG9sZGVzdF9tdWx0aTsgbXVsdGkgIT0gbmV4dF9tdWx0aTspCisJeworCQlUcmFuc2FjdGlvbklk CQl4aWQ7CisJCU11bHRpWGFjdFN0YXR1cwkJc3RhdHVzOworCQlNdWx0aVhhY3RNZW1iZXIJCW1l bWJlcjsKKwkJTXVsdGlYYWN0SWQJCQluZXdfbXVsdGkgUEdfVVNFRF9GT1JfQVNTRVJUU19PTkxZ OworCQlNdWx0aVhhY3RPZmZzZXQJCW9mZnNldDsKKworCQkvKiBSZWFkIHRoZSBvbGQgbXVsdGl4 aWQgKi8KKwkJR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIob2xkX3JlYWRlciwgbXVsdGks ICZ4aWQsICZzdGF0dXMpOworCisJCS8qIFdyaXRlIGl0IG91dCBpbiBuZXcgZm9ybWF0ICovCisJ CW1lbWJlci54aWQgPSB4aWQ7CisJCW1lbWJlci5zdGF0dXMgPSBzdGF0dXM7CisJCW5ld19tdWx0 aSA9IEdldE5ld011bHRpWGFjdElkKG5ld193cml0ZXIsIDEsICZvZmZzZXQpOworCisJCUFzc2Vy dChuZXdfbXVsdGkgPT0gbXVsdGkpOworCisJCVJlY29yZE5ld011bHRpWGFjdChuZXdfd3JpdGVy LCBvZmZzZXQsIG11bHRpLCAxLCAmbWVtYmVyKTsKKworCQltdWx0aSsrOworCQkvKiBoYW5kbGUg d3JhcGFyb3VuZCAqLworCQlpZiAobXVsdGkgPCBGaXJzdE11bHRpWGFjdElkKQorCQkJbXVsdGkg PSBGaXJzdE11bHRpWGFjdElkOworCX0KKworCS8qCisJICogVXBkYXRlIHRoZSBuZXh0TVhhY3Qv T2Zmc2V0IHZhbHVlcyBpbiB0aGUgY29udHJvbCBmaWxlIHRvIG1hdGNoIHdoYXQgd2UKKwkgKiB3 cm90ZS4gIFRoZSBuZXh0TVhhY3Qgc2hvdWxkIGJlIHVuY2hhbmdlZCwgYnV0IGJlY2F1c2Ugd2Ug aWdub3JlZCB0aGUKKwkgKiBsb2NraW5nIFhJRHMgbWVtYmVycywgdGhlIG5leHRPZmZzZXQgd2ls bCBiZSBkaWZmZXJlbnQuCisJICovCisJQXNzZXJ0KG5ld193cml0ZXItPm5leHRNWGFjdCA9PSBu ZXh0X211bHRpKTsKKworCSpuZXdfbnh0bXVsdGkgPSBuZXh0X211bHRpOworCSpuZXdfbnh0bXhv ZmYgPSBuZXdfd3JpdGVyLT5uZXh0T2Zmc2V0OworCisJLyogUmVsZWFzZSByZXNvdXJjZXMgKi8K KwlGcmVlTXVsdGlYYWN0V3JpdGUobmV3X3dyaXRlcik7CisJRnJlZU9sZE11bHRpWGFjdFJlYWRl cihvbGRfcmVhZGVyKTsKK30KKwogc3RhdGljIHZvaWQKIGNvcHlfeGFjdF94bG9nX3hpZCh2b2lk KQogewpAQCAtODE2LDggKzg5NCwyOCBAQCBjb3B5X3hhY3RfeGxvZ194aWQodm9pZCkKIAlpZiAo b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdF X0NBVF9WRVIgJiYKIAkJbmV3X2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhB Q1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJewotCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVs dGl4YWN0L29mZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiKTsKLQkJY29weV9zdWJkaXJf ZmlsZXMoInBnX211bHRpeGFjdC9tZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CisJ CU11bHRpWGFjdElkCQluZXdfbnh0bXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9sZGF0YS5jaGtw bnRfbnh0bXVsdGk7CisJCU11bHRpWGFjdE9mZnNldCBuZXdfbnh0bXhvZmYgPSBvbGRfY2x1c3Rl ci5jb250cm9sZGF0YS5jaGtwbnRfbnh0bXhvZmY7CisKKwkJLyoKKwkJICogSWYgdGhlIG9sZCBz ZXJ2ZXIgaXMgYmVmb3JlIHRoZSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIK KwkJICogaXQgbXVzdCBoYXZlIDMyLWJpdCBtdWx0aXhpZCBvZmZzZXRzLCB0aHVzIGl0IHNob3Vs ZCBiZSBjb252ZXJ0ZWQuCisJCSAqLworCQlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0 X3ZlciA8IE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiAmJgorCQkJbmV3X2Ns dXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RPRkZTRVRfRk9STUFUQ0hBTkdF X0NBVF9WRVIpCisJCXsKKwkJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0aXhhY3QvbWVtYmVy cyIsIGZhbHNlKTsKKwkJCXJlbW92ZV9uZXdfc3ViZGlyKCJwZ19tdWx0aXhhY3Qvb2Zmc2V0cyIs IGZhbHNlKTsKKworCQkJcHJlcF9zdGF0dXMoIkNvbnZlcnRpbmcgcGdfbXVsdGl4YWN0L29mZnNl dHMgdG8gNjQtYml0Iik7CisJCQljb252ZXJ0X211bHRpeGFjdHMoJm5ld19ueHRtdWx0aSwgJm5l d19ueHRteG9mZik7CisJCQljaGVja19vaygpOworCQl9CisJCWVsc2UKKwkJeworCQkJY29weV9z dWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9vZmZzZXRzIiwgInBnX211bHRpeGFjdC9vZmZzZXRz Iik7CisJCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L21lbWJlcnMiLCAicGdfbXVs dGl4YWN0L21lbWJlcnMiKTsKKwkJfQogCiAJCXByZXBfc3RhdHVzKCJTZXR0aW5nIG5leHQgbXVs dGl4YWN0IElEIGFuZCBvZmZzZXQgZm9yIG5ldyBjbHVzdGVyIik7CiAKQEAgLTgyNiwxMCArOTI0 LDggQEAgY29weV94YWN0X3hsb2dfeGlkKHZvaWQpCiAJCSAqIGNvdW50ZXJzIGhlcmUgYW5kIHRo ZSBvbGRlc3QgbXVsdGkgcHJlc2VudCBvbiBzeXN0ZW0uCiAJCSAqLwogCQlleGVjX3Byb2coVVRJ TElUWV9MT0dfRklMRSwgTlVMTCwgdHJ1ZSwgdHJ1ZSwKLQkJCQkgICJcIiVzL3BnX3Jlc2V0d2Fs XCIgLU8gJXUgLW0gJXUsJXUgXCIlc1wiIiwKLQkJCQkgIG5ld19jbHVzdGVyLmJpbmRpciwKLQkJ CQkgIG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRteG9mZiwKLQkJCQkgIG9sZF9j bHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSwKKwkJCQkgICJcIiVzL3BnX3Jlc2V0 d2FsXCIgLU8gJSIgUFJJdTY0ICIgLW0gJXUsJXUgXCIlc1wiIiwKKwkJCQkgIG5ld19jbHVzdGVy LmJpbmRpciwgbmV3X254dG14b2ZmLCBuZXdfbnh0bXVsdGksCiAJCQkJICBvbGRfY2x1c3Rlci5j b250cm9sZGF0YS5jaGtwbnRfb2xkc3RNdWx0aSwKIAkJCQkgIG5ld19jbHVzdGVyLnBnZGF0YSk7 CiAJCWNoZWNrX29rKCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFk ZS5oIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaAppbmRleCBlODYzMzZmNGJlOS4u MTI3YjJjYjAwZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9wZ191cGdyYWRlLmgK KysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuaApAQCAtMTE0LDYgKzExNCwxMSBA QCBleHRlcm4gY2hhciAqb3V0cHV0X2ZpbGVzW107CiAgKi8KICNkZWZpbmUgTVVMVElYQUNUX0ZP Uk1BVENIQU5HRV9DQVRfVkVSIDIwMTMwMTIzMQogCisvKgorICogU3dpY3RoIGZyb20gMzItYml0 IHRvIDY0LWJpdCBmb3IgbXVsdGl4aWQgb2Zmc2V0cy4KKyAqLworI2RlZmluZSBNVUxUSVhBQ1RP RkZTRVRfRk9STUFUQ0hBTkdFX0NBVF9WRVIgOTk5OTk5OTk5CisKIC8qCiAgKiBsYXJnZSBvYmpl Y3QgY2h1bmsgc2l6ZSBhZGRlZCB0byBwZ19jb250cm9sZGF0YSwKICAqIGNvbW1pdCA1ZjkzYzM3 ODA1ZTc0ODU0ODg0ODA5MTZiNDU4NWUwOThkM2NjODgzCmRpZmYgLS1naXQgYS9zcmMvYmluL3Bn X3VwZ3JhZGUvc2xydV9pby5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3NscnVfaW8uYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNmU1ZTBkYzViMTIKLS0tIC9kZXYvbnVs bAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCkBAIC0wLDAgKzEsMjI4IEBACisv KgorICogc2xydV9pby5jCisgKgorICogUm91dGluZXMgZm9yIHJlYWRpbmcgYW5kIHdyaXRpbmcg U0xSVSBmaWxlcyBkdXJpbmcgdXBncmFkZS4KKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBv c3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUv c2xydV9pby5jCisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlIDxm Y250bC5oPgorCisjaW5jbHVkZSAicGdfdXBncmFkZS5oIgorI2luY2x1ZGUgInNscnVfaW8uaCIK KworI2luY2x1ZGUgImNvbW1vbi9mZV9tZW11dGlscy5oIgorI2luY2x1ZGUgImNvbW1vbi9maWxl X3Blcm0uaCIKKyNpbmNsdWRlICJjb21tb24vZmlsZV91dGlscy5oIgorI2luY2x1ZGUgInBvcnQv cGdfaW92ZWMuaCIKKworLyoKKyAqIFN0YXRlIGZvciByZWFkaW5nIG9yIHdyaXRpbmcgYW4gU0xS VSwgd2l0aCBhIG9uZSBwYWdlIGJ1ZmZlci4KKyAqLwordHlwZWRlZiBzdHJ1Y3QgU2xydVNlZ1N0 YXRlCit7CisJYm9vbAkJd3JpdGluZzsKKworCWNoYXIJICAgKmRpcjsKKwljaGFyCSAgICpmbjsK KwlpbnQJCQlmZDsKKwlpbnQ2NAkJc2Vnbm87CisJdWludDY0CQlwYWdlbm87CisKKwlQR0FsaWdu ZWRCbG9jayBidWY7Cit9IFNscnVTZWdTdGF0ZTsKKworc3RhdGljIGlubGluZSBTbHJ1U2VnU3Rh dGUgKgorQWxsb2NTbHJ1U2VnU3RhdGUoY2hhciAqZGlyKQoreworCVNscnVTZWdTdGF0ZSAqc3Rh dGUgPSBwZ19tYWxsb2Moc2l6ZW9mKCpzdGF0ZSkpOworCisJc3RhdGUtPnNlZ25vID0gLTE7CisJ c3RhdGUtPnBhZ2VubyA9IDA7CisJc3RhdGUtPmRpciA9IHBzdHJkdXAoZGlyKTsKKwlzdGF0ZS0+ ZmQgPSAtMTsKKwlzdGF0ZS0+Zm4gPSBOVUxMOworCisJcmV0dXJuIHN0YXRlOworfQorCitzdGF0 aWMgaW5saW5lIHZvaWQKK1NscnVGbHVzaChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCXN0cnVj dCBpb3ZlYwlpb3ZlYyA9IHsKKwkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCS5pb3ZfbGVu ID0gQkxDS1NaLAorCX07CisJb2ZmX3QJCQlvZmZzZXQ7CisKKwlpZiAoc3RhdGUtPnNlZ25vID09 IC0xKQorCQlyZXR1cm47CisKKwlvZmZzZXQgPSAoc3RhdGUtPnBhZ2VubyAlIFNMUlVfUEFHRVNf UEVSX1NFR01FTlQpICogQkxDS1NaOworCisJaWYgKHBnX3B3cml0ZXZfd2l0aF9yZXRyeShzdGF0 ZS0+ZmQsICZpb3ZlYywgMSwgb2Zmc2V0KSA8IDApCisJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgd3Jp dGUgZmlsZSBcIiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKK30KKworLyoKKyAqIENyZWF0ZSBzbHJ1 IHJlYWRlciBmb3IgZGlyLgorICoKKyAqIFJldHVybnMgdGhlIG1hbGxvY2VkIG1lbW9yeSB1c2Vk IGJ5IHRoZSBhbGwgb3RoZXIgcmVhZCBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNl Z1N0YXRlICoKK0FsbG9jU2xydVJlYWQoY2hhciAqZGlyKQoreworCVNscnVTZWdTdGF0ZSAqc3Rh dGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndyaXRpbmcgPSBmYWxzZTsK KworCXJldHVybiBzdGF0ZTsKK30KKworLyoKKyAqIE9wZW4gZ2l2ZW4gcGFnZSBmb3IgcmVhZGlu Zy4KKyAqCisgKiBSZWFkaW5nIGNhbiBiZSBkb25lIGluIHJhbmRvbSBvcmRlci4KKyAqLworY2hh ciAqCitTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vu bykKK3sKKwlpbnQ2NCBzZWdubzsKKworCUFzc2VydCghc3RhdGUtPndyaXRpbmcpOwkvKiByZWFk IG9ubHkgbW9kZSAqLworCisJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSAmJiBwYWdlbm8gPT0gc3Rh dGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKKworCXNlZ25vID0gcGFnZW5v IC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlpZiAoc2Vnbm8gIT0gc3RhdGUtPnNlZ25vKQor CXsKKwkJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSkKKwkJeworCQkJY2xvc2Uoc3RhdGUtPmZkKTsK KwkJCXN0YXRlLT5mZCA9IC0xOworCisJCQlwZ19mcmVlKHN0YXRlLT5mbik7CisJCQlzdGF0ZS0+ Zm4gPSBOVUxMOworCQl9CisKKwkJLyogT3BlbiBuZXcgc2VnbWVudCAqLworCQlzdGF0ZS0+Zm4g PSBwc3ByaW50ZigiJXMvJTA0WCIsIHN0YXRlLT5kaXIsICh1bnNpZ25lZCBpbnQpIHNlZ25vKTsK KwkJaWYgKChzdGF0ZS0+ZmQgPSBvcGVuKHN0YXRlLT5mbiwgT19SRE9OTFkgfCBQR19CSU5BUlks IDApKSA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IG9wZW4gZmlsZSBcIiVzXCI6ICVtIiwg c3RhdGUtPmZuKTsKKwl9CisKKwlzdGF0ZS0+c2Vnbm8gPSBzZWdubzsKKworCXsKKwkJc3RydWN0 IGlvdmVjCWlvdmVjID0geworCQkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCQkuaW92X2xl biA9IEJMQ0tTWiwKKwkJfTsKKwkJb2ZmX3QJCQlvZmZzZXQgPSAocGFnZW5vICUgU0xSVV9QQUdF U19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisKKwkJaWYgKHBnX3ByZWFkdihzdGF0ZS0+ZmQsICZp b3ZlYywgMSwgb2Zmc2V0KSA8IDApCisJCQlwZ19mYXRhbCgiY291bGQgbm90IHJlYWQgZmlsZSBc IiVzXCI6ICVtIiwgc3RhdGUtPmZuKTsKKworCQlzdGF0ZS0+cGFnZW5vID0gcGFnZW5vOworCX0K KworCXJldHVybiBzdGF0ZS0+YnVmLmRhdGE7Cit9CisKKy8qCisgKiBGcmVlcyB0aGUgbWFsbG9j ZWQgcmVhZGVyLgorICovCit2b2lkCitGcmVlU2xydVJlYWQoU2xydVNlZ1N0YXRlICpzdGF0ZSkK K3sKKwlBc3NlcnQoIXN0YXRlLT53cml0aW5nKTsJLyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWNs b3NlKHN0YXRlLT5mZCk7CisJcGdfZnJlZShzdGF0ZSk7Cit9CisKKy8qCisgKiBPcGVuIHRoZSBn aXZlbiBwYWdlIGZvciB3cml0aW5nLgorICoKKyAqIE5PVEU6IFRoaXMgdXNlcyBPX0VYQ0wgd2hl biBzdGVwcGluZyB0byBhIG5ldyBzZWdtZW50LCBzbyB0aGlzIGFzc3VtZXMgdGhhdAorICogZWFj aCBzZWdtZW50IGlzIHdyaXR0ZW4gaW4gZnVsbCBiZWZvcmUgbW92aW5nIG9uIHRvIG5leHQgb25l LiAgVGhpcworICogbGltaXRhdGlvbiB3b3VsZCBiZSBlYXN5IHRvIGxpZnQgaWYgbmVlZGVkLCBi dXQgaXQgZml0cyB0aGUgdXNhZ2UgcGF0dGVybiBvZgorICogY3VycmVudCBjYWxsZXJzLgorICov CitjaGFyICoKK1NscnVXcml0ZVN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0 IHBhZ2VubykKK3sKKwlpbnQ2NAlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7CisJb2ZmX3QJb2Zmc2V0OworCisJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSAmJiBwYWdlbm8g PT0gc3RhdGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKKworCXNlZ25vID0g cGFnZW5vIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVDsKKwlvZmZzZXQgPSAocGFnZW5vICUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVCkgKiBCTENLU1o7CisKKwlTbHJ1Rmx1c2goc3RhdGUpOworCW1l bXNldChzdGF0ZS0+YnVmLmRhdGEsIDAsIEJMQ0tTWik7CisKKwlpZiAoc2Vnbm8gIT0gc3RhdGUt PnNlZ25vKQorCXsKKwkJaWYgKHN0YXRlLT5zZWdubyAhPSAtMSkKKwkJeworCQkJY2xvc2Uoc3Rh dGUtPmZkKTsKKwkJCXN0YXRlLT5mZCA9IC0xOworCisJCQlwZ19mcmVlKHN0YXRlLT5mbik7CisJ CQlzdGF0ZS0+Zm4gPSBOVUxMOworCQl9CisKKwkJLyogQ3JlYXRlIHRoZSBzZWdtZW50ICovCisJ CXN0YXRlLT5mbiA9IHBzcHJpbnRmKCIlcy8lMDRYIiwgc3RhdGUtPmRpciwgKHVuc2lnbmVkIGlu dCkgc2Vnbm8pOworCQlpZiAoKHN0YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JEV1IgfCBP X0NSRUFUIHwgT19FWENMIHwgUEdfQklOQVJZLAorCQkJCQkJCSAgcGdfZmlsZV9jcmVhdGVfbW9k ZSkpIDwgMCkKKwkJeworCQkJcGdfZmF0YWwoImNvdWxkIG5vdCBjcmVhdGUgZmlsZSBcIiVzXCI6 ICVtIiwgc3RhdGUtPmZuKTsKKwkJfQorCisJCXN0YXRlLT5zZWdubyA9IHNlZ25vOworCisJCWlm IChvZmZzZXQgPiAwICYmIHBnX3B3cml0ZV96ZXJvcyhzdGF0ZS0+ZmQsIG9mZnNldCwgMCkgPCAw KQorCQkJcGdfZmF0YWwoImNvdWxkIG5vdCB3cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+ Zm4pOworCX0KKworCXN0YXRlLT5wYWdlbm8gPSBwYWdlbm87CisKKwlyZXR1cm4gc3RhdGUtPmJ1 Zi5kYXRhOworfQorCisvKgorICogQ3JlYXRlIHNscnUgd3JpdGVyIGZvciBkaXIuCisgKgorICog UmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciB3cml0ZSBj YWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLworU2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVdyaXRl KGNoYXIgKmRpcikKK3sKKwlTbHJ1U2VnU3RhdGUgKnN0YXRlID0gQWxsb2NTbHJ1U2VnU3RhdGUo ZGlyKTsKKworCXN0YXRlLT53cml0aW5nID0gdHJ1ZTsKKworCXJldHVybiBzdGF0ZTsKK30KKwor LyoKKyAqIEZyZWVzIHRoZSBtYWxsb2NlZCB3cml0ZXIuCisgKi8KK3ZvaWQKK0ZyZWVTbHJ1V3Jp dGUoU2xydVNlZ1N0YXRlICpzdGF0ZSkKK3sKKwlBc3NlcnQoc3RhdGUtPndyaXRpbmcpOworCisJ U2xydUZsdXNoKHN0YXRlKTsKKworCWNsb3NlKHN0YXRlLT5mZCk7CisJcGdfZnJlZShzdGF0ZSk7 Cit9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oIGIvc3JjL2Jpbi9w Z191cGdyYWRlL3NscnVfaW8uaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MC4uMGFjN2NlYzQ0MGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xy dV9pby5oCkBAIC0wLDAgKzEsMzAgQEAKKy8qCisgKiBzbHJ1X2lvLmgKKyAqCisgKiBDb3B5cmln aHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERldmVsb3BtZW50IEdyb3VwCisgKiBzcmMv YmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCisgKi8KKworLyoKKyAqIFNvbWUga2luZCBvZiBpdGVy YXRvciBhc3NvY2lhdGVkIHdpdGggYSBwYXJ0aWN1bGFyIFNMUlUgc2VnbWVudC4gIFRoZSBpZGVh IGlzCisgKiB0byBzcGVjaWZ5IHRoZSBzZWdtZW50IGFuZCBwYWdlIG51bWJlciBhbmQgdGhlbiBt b3ZlIHRocm91Z2ggdGhlIHBhZ2VzLgorICovCisKKyNpbmNsdWRlICJwb3N0Z3Jlc19mZS5oIgor CisvKgorICogU2VlIGFjY2Vzcy9zbHJ1LmgKKyAqCisgKiBDb3B5IGhlcmUsIHNpbmNlIHNscnUu aCBjb3VsZCBub3QgYmUgaW5jbHVkZWQgaW4gZmUgY29kZS4KKyAqLworI2RlZmluZSBTTFJVX1BB R0VTX1BFUl9TRUdNRU5UIDMyCisKK3R5cGVkZWYgc3RydWN0IFNscnVTZWdTdGF0ZSBTbHJ1U2Vn U3RhdGU7CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVJlYWQoY2hhciAqZGlyKTsK K2V4dGVybiBjaGFyICpTbHJ1UmVhZFN3aXRjaFBhZ2UoU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWlu dDY0IHBhZ2Vubyk7CitleHRlcm4gdm9pZCBGcmVlU2xydVJlYWQoU2xydVNlZ1N0YXRlICpzdGF0 ZSk7CisKK2V4dGVybiBTbHJ1U2VnU3RhdGUgKkFsbG9jU2xydVdyaXRlKGNoYXIgKmRpcik7Citl eHRlcm4gY2hhciAqU2xydVdyaXRlU3dpdGNoUGFnZShTbHJ1U2VnU3RhdGUgKnN0YXRlLCB1aW50 NjQgcGFnZW5vKTsKK2V4dGVybiB2b2lkIEZyZWVTbHJ1V3JpdGUoU2xydVNlZ1N0YXRlICpzdGF0 ZSk7ClwgTm8gbmV3bGluZSBhdCBlbmQgb2YgZmlsZQotLSAKMi41MS4wCgo= --0000000000003b2089064225eb24 Content-Type: application/octet-stream; name="v18-0001-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v18-0001-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mh9aovuu0 RnJvbSBjMWI5MTFjZmZiYmI1MmE0NDc5ZjFiNDczMThjNGQ3M2JiNjcxYmI2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+CkRhdGU6 IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0ggdjE4IDEvM10g VXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0LWJpdCBtdWx0aXRy YW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0aGUKMl4zMiBsaW1pdCBv biB0aGVpciB0b3RhbCBudW1iZXIuCgpPbiB0aGUgb3RoZXIgaGFuZCwgdGhpcyBtb3ZlIGlzIGlu ZXZpdGFibGUgaW4gaW5jcmVhc2VkIGRpc2Mgc3BhY2UKdXRpbGlzYXRpb24uICBGb3J0dW5hdGVs eSwgbXVsdGl0cmFuc2FjdGlvbiBvZmZzZXRzIHJpc2UgbW9ub3RvbmljYWxseQphbmQgd2l0aG91 dCBnYXBzLiAgVG8gY29uc2VydmUgZGlzYyBzcGFjZSBjb25zdW1lZCBieSBzZWdtZW50cywgd2UK d3JpdGUgYSA2NC1iaXQgImJhc2UiIGF0IHRoZSBzdGFydCBvZiBlYWNoIHBhZ2UsIHdoaWNoIGFs c28gc2VydmVzIGFzCnRoZSBwYWdlJ3MgZmlyc3Qgb2Zmc2V0LiAgQWxsIHN1YnNlcXVlbnQgb2Zm c2V0cyBvbiB0aGUgcGFnZSBhcmUKY2FsY3VsYXRlZCByZWxhdGl2ZSB0byB0aGlzICJiYXNlIi4K CkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgotLS0KIHNyYy9iYWNrZW5k L2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYyAgIHwgICA0ICstCiBzcmMvYmFja2VuZC9hY2Nl c3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYyAgICB8ICAgMiArLQogc3JjL2JhY2tlbmQvYWNjZXNzL3Ry YW5zYW0vbXVsdGl4YWN0LmMgICAgfCAzNzUgKysrKysrKy0tLS0tLS0tLS0tLS0tLQogc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2NvbW1hbmRzL3ZhY3V1bS5jICAgICAgICAgICAgIHwgICAyICstCiBzcmMvYmFja2VuZC9wb3N0 bWFzdGVyL2F1dG92YWN1dW0uYyAgICAgICB8ICAgNCArLQogc3JjL2Jpbi9wZ19jb250cm9sZGF0 YS9wZ19jb250cm9sZGF0YS5jICAgfCAgIDIgKy0KIHNyYy9iaW4vcGdfcmVzZXR3YWwvcGdfcmVz ZXR3YWwuYyAgICAgICAgIHwgICA2ICstCiBzcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2lj LnBsICAgICAgICB8ICAgMiArLQogc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oICAgICAg ICAgICAgfCAgIDMgKy0KIHNyYy9pbmNsdWRlL2MuaCAgICAgICAgICAgICAgICAgICAgICAgICAg IHwgICAyICstCiAxMSBmaWxlcyBjaGFuZ2VkLCAxMjUgaW5zZXJ0aW9ucygrKSwgMjc5IGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRl c2MuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy9teGFjdGRlc2MuYwppbmRleCAzY2Ew NTgyZGIzNi4uMDUyZGQwYTRjZTUgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdy ZGVzYy9teGFjdGRlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3Rk ZXNjLmMKQEAgLTY1LDcgKzY1LDcgQEAgbXVsdGl4YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhM b2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCQl4bF9tdWx0aXhhY3RfY3JlYXRlICp4bHJlYyA9ICh4 bF9tdWx0aXhhY3RfY3JlYXRlICopIHJlYzsKIAkJaW50CQkJaTsKIAotCQlhcHBlbmRTdHJpbmdJ bmZvKGJ1ZiwgIiV1IG9mZnNldCAldSBubWVtYmVycyAlZDogIiwgeGxyZWMtPm1pZCwKKwkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICIldSBvZmZzZXQgJSIgUFJJdTY0ICIgbm1lbWJlcnMgJWQ6ICIs IHhscmVjLT5taWQsCiAJCQkJCQkgeGxyZWMtPm1vZmYsIHhscmVjLT5ubWVtYmVycyk7CiAJCWZv ciAoaSA9IDA7IGkgPCB4bHJlYy0+bm1lbWJlcnM7IGkrKykKIAkJCW91dF9tZW1iZXIoYnVmLCAm eGxyZWMtPm1lbWJlcnNbaV0pOwpAQCAtNzQsNyArNzQsNyBAQCBtdWx0aXhhY3RfZGVzYyhTdHJp bmdJbmZvIGJ1ZiwgWExvZ1JlYWRlclN0YXRlICpyZWNvcmQpCiAJewogCQl4bF9tdWx0aXhhY3Rf dHJ1bmNhdGUgKnhscmVjID0gKHhsX211bHRpeGFjdF90cnVuY2F0ZSAqKSByZWM7CiAKLQkJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsldSwgJXUpLCBtZW1iZXJzIFsldSwgJXUpIiwK KwkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJvZmZzZXRzIFsldSwgJXUpLCBtZW1iZXJzIFslIiBQ Ukl1NjQgIiwgJSIgUFJJdTY0ICIpIiwKIAkJCQkJCSB4bHJlYy0+c3RhcnRUcnVuY09mZiwgeGxy ZWMtPmVuZFRydW5jT2ZmLAogCQkJCQkJIHhscmVjLT5zdGFydFRydW5jTWVtYiwgeGxyZWMtPmVu ZFRydW5jTWVtYik7CiAJfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNj L3hsb2dkZXNjLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwppbmRl eCBjZDZjMmEyZjY1MC4uNDQxMDM0ZjU5MjkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vz cy9ybWdyZGVzYy94bG9nZGVzYy5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94 bG9nZGVzYy5jCkBAIC02Niw3ICs2Niw3IEBAIHhsb2dfZGVzYyhTdHJpbmdJbmZvIGJ1ZiwgWExv Z1JlYWRlclN0YXRlICpyZWNvcmQpCiAJCUNoZWNrUG9pbnQgKmNoZWNrcG9pbnQgPSAoQ2hlY2tQ b2ludCAqKSByZWM7CiAKIAkJYXBwZW5kU3RyaW5nSW5mbyhidWYsICJyZWRvICVYLyUwOFg7ICIK LQkJCQkJCSAidGxpICV1OyBwcmV2IHRsaSAldTsgZnB3ICVzOyB3YWxfbGV2ZWwgJXM7IHhpZCAl dToldTsgb2lkICV1OyBtdWx0aSAldTsgb2Zmc2V0ICV1OyAiCisJCQkJCQkgInRsaSAldTsgcHJl diB0bGkgJXU7IGZwdyAlczsgd2FsX2xldmVsICVzOyB4aWQgJXU6JXU7IG9pZCAldTsgbXVsdGkg JXU7IG9mZnNldCAlIiBQUkl1NjQgIjsgIgogCQkJCQkJICJvbGRlc3QgeGlkICV1IGluIERCICV1 OyBvbGRlc3QgbXVsdGkgJXUgaW4gREIgJXU7ICIKIAkJCQkJCSAib2xkZXN0L25ld2VzdCBjb21t aXQgdGltZXN0YW1wIHhpZDogJXUvJXU7ICIKIAkJCQkJCSAib2xkZXN0IHJ1bm5pbmcgeGlkICV1 OyAlcyIsCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3Qu YyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCmluZGV4IDlkNWYxMzBh ZjdlLi5lNzg2MTYxNGJlYyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0v bXVsdGl4YWN0LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMK QEAgLTg5LDIxICs4OSwzMSBAQAogI2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIAordHlw ZWRlZiBpbnQzMiBTaG9ydE11bHRpWGFjdE9mZnNldDsJLyogZm9yIGEgZGlzayBzdG9yYWdlICov CisKIC8qCiAgKiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFn ZSBpcyB0aGUgc2FtZSBCTENLU1ogYXMgaXMKICAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBv c3RncmVzLgogICoKLSAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0 cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKLSAqIE11bHRpWGFjdCBwYWdlIG51bWJl cmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VU U19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJ WEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NFR01FTlQuICBXZSBuZWVkCi0g KiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZhY3QgaW4gdGhpcyBtb2R1bGUsIGV4 Y2VwdCB3aGVuIGNvbXBhcmluZwotICogc2VnbWVudCBhbmQgcGFnZSBudW1iZXJzIGluIFRydW5j YXRlTXVsdGlYYWN0IChzZWUKLSAqIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcykuCisgKiBU aGVyZSBhcmUgdHdvIGtleSBmYWN0b3JzIHdoeSB1dGlsaXNpbmcgc3RyYWlnaHRmb3J3YXJkIDY0 LWJpdCBvZmZzZXQgdmFsdWVzCisgKiBmb3IgaXMgd2FzdGVmdWwgaW4gdGVybXMgb2YgZGlzYyBz cGFjZSB1c2FnZToKKyAqIDEpIG9mZnNldCB2YWx1ZXMgYXJlIHJlY29yZGVkIGluIGFzY2VuZGlu ZyBvcmRlciBhbmQgbm90IG92ZXJ3cml0dGVuOworICogMikgdGhlIGxhcmdlc3Qgc3VwcG9ydGVk IEJMQ0tTWiBpcyAzMmssIHdoaWNoIGNhbiBzdG9yZSB1cCB0byAyXjEzIDMyLWJpdAorICogICAg aXRlbXMgb24gYSBzaW5nbGUgcGFnZTsgIHRodXMsIHdpdGggTUFYX0JBQ0tFTkRTIGxpbWl0ZWQg dG8gMl4xOC0xIHdlIGhhdmUKKyAqICAgIDJeMTMgKiAoMl4xOC0xKSB3aGljaCBpcyBsZXNzIDJe MzEgYW5kIGZpdHMgMzItYml0cy4KKyAqCisgKiBJbiBvdGhlciB3b3JkcywgbWF4ICJkaXN0YW5j ZSIgZm9yIG9mZnNldHMgb24gYSBzaW5nbGUgcGFnZSBpcyBub3QgZXhlZWRlZAorICogMzItYml0 cy4gIFRvIG9wdGltaXNlIGRpc2Mgc3BhY2UgYWxsb2NhdGlvbiwgd2UgZW1wbG95IHRoZSBmb2xs b3dpbmcgc2NoZW1lLgorICogT24gZWFjaCBwYWdlLCB0aGUgYmFzaWMgNjQtYml0IG9mZnNldCwg a25vd24gYXMgdGhlIHBhZ2UgYmFzZSwgaXMgbG9jYXRlZAorICogZmlyc3QuICBOZXh0LCB0aGVy ZSBhcmUgMzItYml0IGRlbHRhcyByZWxhdGl2ZSB0byB0aGUgYmFzZSBlbGVtZW50IGFyZQorICog cGxhY2VkLiAgVGh1cywgdGhlIHJlcXVpcmVkIG9mZnNldCBmb3IgdGhlIDAtdGggZWxlbWVudCBp cyB0aGUgcGFnZSdzCisgKiBiYXNlOyB0aGUgdmFsdWUgZm9yIGVhY2ggc3Vic2VxdWVudCBvZmZz ZXQgb24gdGhlIHNhbWUgcGFnZSBpcyBjYWxjdWxhdGVkCisgKiBieSBhZGRpbmcgaXQgdG8gdGhl IHBhZ2UgYmFzZSAoMC10aCkgZWxlbWVudC4KICAqLwogCi0vKiBXZSBuZWVkIGZvdXIgYnl0ZXMg cGVyIG9mZnNldCAqLwotI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1Na IC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisvKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9m ZnNldCwgOCBieXRlcyBmb3IgdGhlIGJhc2UgKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNf UEVSX1BBR0UJCVwKKwkoKEJMQ0tTWiAtIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSAvIHNpemVv ZihTaG9ydE11bHRpWGFjdE9mZnNldCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKIE11bHRpWGFj dElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRpKQpAQCAtMjA4LDEwICsyMTgsMTQgQEAg TVhPZmZzZXRUb01lbWJlck9mZnNldChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQogCQltZW1iZXJf aW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7CiB9CiAKLS8qIE11bHRpeGFjdCBtZW1i ZXJzIHdyYXBhcm91bmQgdGhyZXNob2xkcy4gKi8KLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9T QUZFX1RIUkVTSE9MRAkJKE1heE11bHRpWGFjdE9mZnNldCAvIDIpCi0jZGVmaW5lIE1VTFRJWEFD VF9NRU1CRVJfREFOR0VSX1RIUkVTSE9MRAlcCi0JKE1heE11bHRpWGFjdE9mZnNldCAtIE1heE11 bHRpWGFjdE9mZnNldCAvIDQpCisvKgorICogTXVsdGl4YWN0IG1lbWJlcnMgd2FybmluZyB0aHJl c2hvbGQuCisgKgorICogSWYgZGlmZmVyZW5jZSBiZXR0d2VlbiBuZXh0T2Zmc2V0IGFuZCBvbGRl c3RPZmZzZXQgZXhjZWVkIHRoaXMgdmFsdWUsIHdlCisgKiB0cmlnZ2VyIGF1dG92YWN1dW1pbiBv cmRlciB0byByZWxlYXNlIHRoZSBkaXNrIHNwYWNlLCByZWR1Y2UgdGFibGUgYmxvYXQgaWYKKyAq IHBvc3NpYmxlLgorICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hP TEQJCVVJTlQ2NENPTlNUKDB4RkZGRkZGRkYpCiAKIHN0YXRpYyBpbmxpbmUgTXVsdGlYYWN0SWQK IFByZXZpb3VzTXVsdGlYYWN0SWQoTXVsdGlYYWN0SWQgbXVsdGkpCkBAIC0yMjgsNiArMjQyLDUx IEBAIHN0YXRpYyBTbHJ1Q3RsRGF0YSBNdWx0aVhhY3RNZW1iZXJDdGxEYXRhOwogI2RlZmluZSBN dWx0aVhhY3RPZmZzZXRDdGwJKCZNdWx0aVhhY3RPZmZzZXRDdGxEYXRhKQogI2RlZmluZSBNdWx0 aVhhY3RNZW1iZXJDdGwJKCZNdWx0aVhhY3RNZW1iZXJDdGxEYXRhKQogCisvKgorICogVG8gYXZv aWQgZGl2aW5nIGRlZXAgaW50byBhZGRyZXNzIGFyaXRobWV0aWMsIHdlIGRlY2xhcmUgYW4gYXV4 aWxpYXJ5CisgKiBzdHJ1Y3R1cmUgdGhhdCBhY2Nlc3MgdGhlIE11bHRpWGFjdE9mZnNldCBTTFJV IHBhZ2UuCisgKi8KK3R5cGVkZWYgc3RydWN0IE11bHRpWGFjdE9mZnNldFNMUlVQYWdlCit7CisJ TXVsdGlYYWN0T2Zmc2V0CQkJYmFzZTsKKwlTaG9ydE11bHRpWGFjdE9mZnNldAlvZmZzZXRbRkxF WElCTEVfQVJSQVlfTUVNQkVSXTsKK30gTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2U7CisKK3N0YXRp YyBpbmxpbmUgTXVsdGlYYWN0T2Zmc2V0CitNWE9mZnNldFJlYWQoaW50IGVudHJ5bm8sIGludCBz bG90bm8pCit7CisJTXVsdGlYYWN0T2Zmc2V0U0xSVVBhZ2UgKnBhZ2UgPQorCQkoTXVsdGlYYWN0 T2Zmc2V0U0xSVVBhZ2UgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVy W3Nsb3Rub107CisKKwlpZiAocGFnZS0+b2Zmc2V0W2VudHJ5bm9dICE9IDApCisJCXJldHVybiBw YWdlLT5iYXNlICsgKHBhZ2UtPm9mZnNldFtlbnRyeW5vXSBeIDB4ODAwMDAwMDApOworCisJcmV0 dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZAorTVhPZmZzZXRXcml0ZShpbnQgZW50cnlu bywgaW50IHNsb3RubywgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhhY3RPZmZz ZXRTTFJVUGFnZSAqcGFnZSA9CisJCShNdWx0aVhhY3RPZmZzZXRTTFJVUGFnZSAqKSBNdWx0aVhh Y3RPZmZzZXRDdGwtPnNoYXJlZC0+cGFnZV9idWZmZXJbc2xvdG5vXTsKKworCWlmIChwYWdlLT5i YXNlICE9IDApCisJCXBhZ2UtPm9mZnNldFtlbnRyeW5vXSA9IG9mZnNldCAtIHBhZ2UtPmJhc2U7 CisJZWxzZQorCXsKKwkJcGFnZS0+YmFzZSA9IG9mZnNldDsKKwkJcGFnZS0+b2Zmc2V0W2VudHJ5 bm9dID0gMDsKKwl9CisKKwkvKgorCSAqIFdlIG5lZWQgdG8gZGlzdGluZ3Vpc2ggYmV0d2VlbiB1 bmluaXRlZCB2YWx1ZSBhbmQgbm90IHlldCB3cml0dGVuIG9mZnNldC4KKwkgKiBTZWUgY2FzZSAy IGluIEdldE11bHRpWGFjdElkTWVtYmVycy4KKwkgKgorCSAqIFNvLCBtYXJrIHRoaXMgb2Zmc2V0 IGluaXRlZC4KKwkgKi8KKwlwYWdlLT5vZmZzZXRbZW50cnlub10gXj0gMHg4MDAwMDAwMDsKK30K KwogLyoKICAqIE11bHRpWGFjdCBzdGF0ZSBzaGFyZWQgYWNyb3NzIGFsbCBiYWNrZW5kcy4gIEFs bCB0aGlzIHN0YXRlIGlzIHByb3RlY3RlZAogICogYnkgTXVsdGlYYWN0R2VuTG9jay4gIChXZSBh bHNvIHVzZSBTTFJVIGJhbmsncyBsb2NrIG9mIE11bHRpWGFjdE9mZnNldCBhbmQKQEAgLTI2OCw5 ICszMjcsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhhY3RJ ZCBtdWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAotCS8qIHN1 cHBvcnQgZm9yIG1lbWJlcnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0JTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldFN0b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zmc2V0S25vd24gKi8K LQogCS8qCiAJICogVGhpcyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEgbXVsdGl4YWN0IG9mZnNl dCBpcyB3cml0dGVuIHdoZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0ZSB0aGUgbmV4dCBvbmUuCkBA IC00MDEsOCArNDU3LDYgQEAgc3RhdGljIGJvb2wgTXVsdGlYYWN0T2Zmc2V0UHJlY2VkZXMoTXVs dGlYYWN0T2Zmc2V0IG9mZnNldDEsCiAJCQkJCQkJCQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0Mik7 CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RPZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpOwog c3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQs IGludCBubWVtYmVycyk7Ci1zdGF0aWMgYm9vbCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVs dGlYYWN0T2Zmc2V0IGJvdW5kYXJ5LAotCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwg dWludDMyIGRpc3RhbmNlKTsKIHN0YXRpYyBib29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wg aXNfc3RhcnR1cCk7CiBzdGF0aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJ ZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1 bmNhdGVYbG9nUmVjKE9pZCBvbGRlc3RNdWx0aURCLApAQCAtOTExLDcgKzk2NSw2IEBAIFJlY29y ZE5ld011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwK IAlpbnQ2NAkJcHJldl9wYWdlbm87CiAJaW50CQkJZW50cnlubzsKIAlpbnQJCQlzbG90bm87Ci0J TXVsdGlYYWN0T2Zmc2V0ICpvZmZwdHI7CiAJaW50CQkJaTsKIAlMV0xvY2sJICAgKmxvY2s7CiAJ TFdMb2NrCSAgICpwcmV2bG9jayA9IE5VTEw7CkBAIC05MzAsMTAgKzk4Myw4IEBAIFJlY29yZE5l d011bHRpWGFjdChNdWx0aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCwKIAkg KiB0YWtlIHRoZSB0cm91YmxlIHRvIGdlbmVyYWxpemUgdGhlIHNscnUuYyBlcnJvciByZXBvcnRp bmcgY29kZS4KIAkgKi8KIAlzbG90bm8gPSBTaW1wbGVMcnVSZWFkUGFnZShNdWx0aVhhY3RPZmZz ZXRDdGwsIHBhZ2VubywgdHJ1ZSwgbXVsdGkpOwotCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0Jb2Zm cHRyICs9IGVudHJ5bm87CiAKLQkqb2ZmcHRyID0gb2Zmc2V0OworCU1YT2Zmc2V0V3JpdGUoZW50 cnlubywgc2xvdG5vLCBvZmZzZXQpOwogCiAJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBh Z2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CiAKQEAgLTExNTUsNzggKzEyMDYsNiBAQCBHZXROZXdN dWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCWVsc2UK IAkJKm9mZnNldCA9IG5leHRPZmZzZXQ7CiAKLQkvKi0tLS0tLS0tLS0KLQkgKiBQcm90ZWN0IGFn YWluc3Qgb3ZlcnJ1biBvZiB0aGUgbWVtYmVycyBzcGFjZSBhcyB3ZWxsLCB3aXRoIHRoZQotCSAq IGZvbGxvd2luZyBydWxlczoKLQkgKgotCSAqIElmIHdlJ3JlIHBhc3Qgb2Zmc2V0U3RvcExpbWl0 LCByZWZ1c2UgdG8gZ2VuZXJhdGUgbW9yZSBtdWx0aXMuCi0JICogSWYgd2UncmUgY2xvc2UgdG8g b2Zmc2V0U3RvcExpbWl0LCBlbWl0IGEgd2FybmluZy4KLQkgKgotCSAqIEFyYml0cmFyaWx5LCB3 ZSBzdGFydCBlbWl0dGluZyB3YXJuaW5ncyB3aGVuIHdlJ3JlIDIwIHNlZ21lbnRzIG9yIGxlc3MK LQkgKiBmcm9tIG9mZnNldFN0b3BMaW1pdC4KLQkgKgotCSAqIE5vdGUgd2UgaGF2ZW4ndCB1cGRh dGVkIHRoZSBzaGFyZWQgc3RhdGUgeWV0LCBzbyBpZiB3ZSBmYWlsIGF0IHRoaXMKLQkgKiBwb2lu dCwgdGhlIG11bHRpeGFjdCBJRCB3ZSBncmFiYmVkIGNhbiBzdGlsbCBiZSB1c2VkIGJ5IHRoZSBu ZXh0IGd1eS4KLQkgKgotCSAqIE5vdGUgdGhhdCB0aGVyZSBpcyBubyBwb2ludCBpbiBmb3JjaW5n IGF1dG92YWN1dW0gcnVucyBoZXJlOiB0aGUKLQkgKiBtdWx0aXhhY3QgZnJlZXplIHNldHRpbmdz IHdvdWxkIGhhdmUgdG8gYmUgcmVkdWNlZCBmb3IgdGhhdCB0byBoYXZlIGFueQotCSAqIGVmZmVj dC4KLQkgKi0tLS0tLS0tLS0KLQkgKi8KLSNkZWZpbmUgT0ZGU0VUX1dBUk5fU0VHTUVOVFMJMjAK LQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duICYmCi0JCU11bHRpWGFjdE9m ZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0LCBuZXh0T2Zmc2V0 LAotCQkJCQkJCQkgbm1lbWJlcnMpKQotCXsKLQkJLyogc2VlIGNvbW1lbnQgaW4gdGhlIGNvcnJl c3BvbmRpbmcgb2Zmc2V0cyB3cmFwYXJvdW5kIGNhc2UgKi8KLQkJU2VuZFBvc3RtYXN0ZXJTaWdu YWwoUE1TSUdOQUxfU1RBUlRfQVVUT1ZBQ19MQVVOQ0hFUik7Ci0KLQkJZXJlcG9ydChFUlJPUiwK LQkJCQkoZXJyY29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJt c2coIm11bHRpeGFjdCBcIm1lbWJlcnNcIiBsaW1pdCBleGNlZWRlZCIpLAotCQkJCSBlcnJkZXRh aWxfcGx1cmFsKCJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0IHdpdGggJXUg bWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2ggZm9yICV1IG1l bWJlci4iLAotCQkJCQkJCQkgICJUaGlzIGNvbW1hbmQgd291bGQgY3JlYXRlIGEgbXVsdGl4YWN0 IHdpdGggJXUgbWVtYmVycywgYnV0IHRoZSByZW1haW5pbmcgc3BhY2UgaXMgb25seSBlbm91Z2gg Zm9yICV1IG1lbWJlcnMuIiwKLQkJCQkJCQkJICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExp bWl0IC0gbmV4dE9mZnNldCAtIDEsCi0JCQkJCQkJCSAgbm1lbWJlcnMsCi0JCQkJCQkJCSAgTXVs dGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxKSwKLQkJCQkgZXJy aGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGluIGRhdGFiYXNlIHdpdGggT0lE ICV1IHdpdGggcmVkdWNlZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21pbl9hZ2VcIiBhbmQg XCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2VcIiBzZXR0aW5ncy4iLAotCQkJCQkJ IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQikpKTsKLQl9Ci0KLQkvKgotCSAqIENo ZWNrIHdoZXRoZXIgd2Ugc2hvdWxkIGtpY2sgYXV0b3ZhY3V1bSBpbnRvIGFjdGlvbiwgdG8gcHJl dmVudCBtZW1iZXJzCi0JICogd3JhcGFyb3VuZC4gTkIgd2UgdXNlIGEgbXVjaCBsYXJnZXIgd2lu ZG93IHRvIHRyaWdnZXIgYXV0b3ZhY3V1bSB0aGFuCi0JICoganVzdCB0aGUgd2FybmluZyBsaW1p dC4gVGhlIHdhcm5pbmcgaXMganVzdCBhIG1lYXN1cmUgb2YgbGFzdCByZXNvcnQgLQotCSAqIHRo aXMgaXMgaW4gbGluZSB3aXRoIEdldE5ld1RyYW5zYWN0aW9uSWQncyBiZWhhdmlvdXIuCi0JICov Ci0JaWYgKCFNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKE11bHRpWGFj dFN0YXRlLT5uZXh0T2Zmc2V0IC0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldAotCQkgPiBN VUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKSkKLQl7Ci0JCS8qCi0JCSAqIFRvIGF2b2lk IHN3YW1waW5nIHRoZSBwb3N0bWFzdGVyIHdpdGggc2lnbmFscywgd2UgaXNzdWUgdGhlIGF1dG92 YWMKLQkJICogcmVxdWVzdCBvbmx5IHdoZW4gY3Jvc3NpbmcgYSBzZWdtZW50IGJvdW5kYXJ5LiBX aXRoIGRlZmF1bHQKLQkJICogY29tcGlsYXRpb24gc2V0dGluZ3MgdGhhdCdzIHJvdWdobHkgYWZ0 ZXIgNTBrIG1lbWJlcnMuICBUaGlzIHN0aWxsCi0JCSAqIGdpdmVzIHBsZW50eSBvZiBjaGFuY2Vz IGJlZm9yZSB3ZSBnZXQgaW50byByZWFsIHRyb3VibGUuCi0JCSAqLwotCQlpZiAoKE1YT2Zmc2V0 VG9NZW1iZXJQYWdlKG5leHRPZmZzZXQpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkgIT0KLQkJ CShNWE9mZnNldFRvTWVtYmVyUGFnZShuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpIC8gU0xSVV9QQUdF U19QRVJfU0VHTUVOVCkpCi0JCQlTZW5kUG9zdG1hc3RlclNpZ25hbChQTVNJR05BTF9TVEFSVF9B VVRPVkFDX0xBVU5DSEVSKTsKLQl9Ci0KLQlpZiAoTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNl dEtub3duICYmCi0JCU11bHRpWGFjdE9mZnNldFdvdWxkV3JhcChNdWx0aVhhY3RTdGF0ZS0+b2Zm c2V0U3RvcExpbWl0LAotCQkJCQkJCQkgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5tZW1iZXJzICsg TVVMVElYQUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UICogT0ZG U0VUX1dBUk5fU0VHTUVOVFMpKQotCQllcmVwb3J0KFdBUk5JTkcsCi0JCQkJKGVycmNvZGUoRVJS Q09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNnX3BsdXJhbCgiZGF0YWJh c2Ugd2l0aCBPSUQgJXUgbXVzdCBiZSB2YWN1dW1lZCBiZWZvcmUgJWQgbW9yZSBtdWx0aXhhY3Qg bWVtYmVyIGlzIHVzZWQiLAotCQkJCQkJCSAgICJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJl IHZhY3V1bWVkIGJlZm9yZSAlZCBtb3JlIG11bHRpeGFjdCBtZW1iZXJzIGFyZSB1c2VkIiwKLQkJ CQkJCQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5t ZW1iZXJzLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3REQiwKLQkJ CQkJCQkgICBNdWx0aVhhY3RTdGF0ZS0+b2Zmc2V0U3RvcExpbWl0IC0gbmV4dE9mZnNldCArIG5t ZW1iZXJzKSwKLQkJCQkgZXJyaGludCgiRXhlY3V0ZSBhIGRhdGFiYXNlLXdpZGUgVkFDVVVNIGlu IHRoYXQgZGF0YWJhc2Ugd2l0aCByZWR1Y2VkIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWlu X2FnZVwiIGFuZCBcInZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX3RhYmxlX2FnZVwiIHNldHRpbmdz LiIpKSk7Ci0KIAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwgbm1lbWJlcnMpOwog CiAJLyoKQEAgLTEyNTUsNyArMTIzNCw4IEBAIEdldE5ld011bHRpWGFjdElkKGludCBubWVtYmVy cywgTXVsdGlYYWN0T2Zmc2V0ICpvZmZzZXQpCiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdl bkxvY2spOwogCi0JZGVidWdfZWxvZzQoREVCVUcyLCAiR2V0TmV3OiByZXR1cm5pbmcgJXUgb2Zm c2V0ICV1IiwgcmVzdWx0LCAqb2Zmc2V0KTsKKwlkZWJ1Z19lbG9nNChERUJVRzIsICJHZXROZXc6 IHJldHVybmluZyAldSBvZmZzZXQgJSIgUFJJdTY0LCByZXN1bHQsCisJCQkJKm9mZnNldCk7CiAJ cmV0dXJuIHJlc3VsdDsKIH0KIApAQCAtMTI5NCw3ICsxMjc0LDYgQEAgR2V0TXVsdGlYYWN0SWRN ZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCWlu dDY0CQlwcmV2X3BhZ2VubzsKIAlpbnQJCQllbnRyeW5vOwogCWludAkJCXNsb3RubzsKLQlNdWx0 aVhhY3RPZmZzZXQgKm9mZnB0cjsKIAlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0OwogCWludAkJCWxl bmd0aDsKIAlpbnQJCQl0cnVlbGVuZ3RoOwpAQCAtMTQxOCw5ICsxMzk3LDggQEAgcmV0cnk6CiAJ TFdMb2NrQWNxdWlyZShsb2NrLCBMV19FWENMVVNJVkUpOwogCiAJc2xvdG5vID0gU2ltcGxlTHJ1 UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIG11bHRpKTsKLQlvZmZw dHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdl X2J1ZmZlcltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpvZmZwdHI7 CisKKwlvZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKIAogCUFzc2VydChv ZmZzZXQgIT0gMCk7CiAKQEAgLTE0NjcsOSArMTQ0NSw3IEBAIHJldHJ5OgogCQkJc2xvdG5vID0g U2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIHRydWUsIHRtcE1Y YWN0KTsKIAkJfQogCi0JCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQgKikgTXVsdGlYYWN0T2Zm c2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107Ci0JCW9mZnB0ciArPSBlbnRyeW5v OwotCQluZXh0TVhPZmZzZXQgPSAqb2ZmcHRyOworCQluZXh0TVhPZmZzZXQgPSBNWE9mZnNldFJl YWQoZW50cnlubywgc2xvdG5vKTsKIAogCQlpZiAobmV4dE1YT2Zmc2V0ID09IDApCiAJCXsKQEAg LTE5NzMsNyArMTk0OSw3IEBAIE11bHRpWGFjdFNobWVtSW5pdCh2b2lkKQogCQkJCSAgInBnX211 bHRpeGFjdC9tZW1iZXJzIiwgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9CVUZGRVIsCiAJCQkJ ICBMV1RSQU5DSEVfTVVMVElYQUNUTUVNQkVSX1NMUlUsCiAJCQkJICBTWU5DX0hBTkRMRVJfTVVM VElYQUNUX01FTUJFUiwKLQkJCQkgIGZhbHNlKTsKKwkJCQkgIHRydWUpOwogCS8qIGRvZXNuJ3Qg Y2FsbCBTaW1wbGVMcnVUcnVuY2F0ZSgpIG9yIG1lZXQgY3JpdGVyaWEgZm9yIHVuaXQgdGVzdHMg Ki8KIAogCS8qIEluaXRpYWxpemUgb3VyIHNoYXJlZCBzdGF0ZSBzdHJ1Y3QgKi8KQEAgLTIxNDks OSArMjEyNSwyNCBAQCBUcmltTXVsdGlYYWN0KHZvaWQpCiAJCUxXTG9ja0FjcXVpcmUobG9jaywg TFdfRVhDTFVTSVZFKTsKIAkJc2xvdG5vID0gU2ltcGxlTHJ1UmVhZFBhZ2UoTXVsdGlYYWN0T2Zm c2V0Q3RsLCBwYWdlbm8sIHRydWUsIG5leHRNWGFjdCk7CiAJCW9mZnB0ciA9IChNdWx0aVhhY3RP ZmZzZXQgKikgTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfYnVmZmVyW3Nsb3Rub107 Ci0JCW9mZnB0ciArPSBlbnRyeW5vOwogCi0JCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWiAtIChl bnRyeW5vICogc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpKTsKKwkJaWYgKGVudHJ5bm8gPT0gMCkK KwkJCU1lbVNldChvZmZwdHIsIDAsIEJMQ0tTWik7CisJCWVsc2UKKwkJeworCQkJU2hvcnRNdWx0 aVhhY3RPZmZzZXQgKm9mZjMycHRyOworCisJCQlvZmYzMnB0ciA9IChTaG9ydE11bHRpWGFjdE9m ZnNldCAqKSAob2ZmcHRyICsgMSk7CisJCQlvZmYzMnB0ciArPSBlbnRyeW5vOworCisJCQkvKgor CQkJICogS25vd2luZyB0aGF0IG9mZnB0ciBwb2ludHMgdG8gdGhlIGJlZ2lubmluZyBvZiB0aGUg YnVmZmVyLAorCQkJICogYWRkcmVzcyBhcml0aG1ldGljIGNhbiBiZSB1c2VkIHRvIGRldGVybWlu ZSB0aGUgYW1vdW50IG9mCisJCQkgKiBieXRlcyByZW1haW5pbmcuCisJCQkgKi8KKwkJCU1lbVNl dChvZmYzMnB0ciwgMCwKKwkJCQkgICBCTENLU1ogLSAoKChjaGFyICopIG9mZjMycHRyIC0gKGNo YXIgKikgb2ZmcHRyKSkpOworCQl9CiAKIAkJTXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBh Z2VfZGlydHlbc2xvdG5vXSA9IHRydWU7CiAJCUxXTG9ja1JlbGVhc2UobG9jayk7CkBAIC0yMjIz LDcgKzIyMTQsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBpc19zaHV0ZG93biwK IAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVidWdfZWxvZzYoREVCVUcy LAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11bHRpICV1LCBuZXh0T2Zmc2V0 ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJIk11bHRpWGFjdDogY2hlY2twb2lu dCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIgUFJJdTY0ICIsIG9sZGVzdE11bHRpICV1 IGluIERCICV1IiwKIAkJCQkqbmV4dE11bHRpLCAqbmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVs dGksICpvbGRlc3RNdWx0aURCKTsKIH0KIApAQCAtMjI1OCw3ICsyMjQ5LDcgQEAgdm9pZAogTXVs dGlYYWN0U2V0TmV4dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIAkJCQkJICBNdWx0aVhh Y3RPZmZzZXQgbmV4dE11bHRpT2Zmc2V0KQogewotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRp WGFjdDogc2V0dGluZyBuZXh0IG11bHRpIHRvICV1IG9mZnNldCAldSIsCisJZGVidWdfZWxvZzQo REVCVUcyLCAiTXVsdGlYYWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICUiIFBS SXU2NCwKIAkJCQluZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJTFdMb2NrQWNxdWlyZShN dWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhh Y3QgPSBuZXh0TXVsdGk7CkBAIC0yNDQ5LDcgKzI0NDAsNyBAQCBNdWx0aVhhY3RBZHZhbmNlTmV4 dE1YYWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCX0KIAlpZiAoTXVsdGlYYWN0T2Zmc2V0UHJl Y2VkZXMoTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQsIG1pbk11bHRpT2Zmc2V0KSkKIAl7Ci0J CWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNldCB0byAl dSIsCisJCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNl dCB0byAlIiBQUklVNjQsCiAJCQkJCW1pbk11bHRpT2Zmc2V0KTsKIAkJTXVsdGlYYWN0U3RhdGUt Pm5leHRPZmZzZXQgPSBtaW5NdWx0aU9mZnNldDsKIAl9CkBAIC0yNjMzLDE1ICsyNjI0LDEzIEBA IEdldE9sZGVzdE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFn Z3Jlc3NpdmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgot ICogd3JhcGFyb3VuZC4KKyAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHZhY3V1bSBmb3IgbWVt YmVyIG9yIG5vdC4KICAqCiAgKiBUbyBkbyBzbyBkZXRlcm1pbmUgd2hhdCdzIHRoZSBvbGRlc3Qg bWVtYmVyIG9mZnNldCBhbmQgaW5zdGFsbCB0aGUgbGltaXQKICAqIGluZm8gaW4gTXVsdGlYYWN0 U3RhdGUsIHdoZXJlIGl0IGNhbiBiZSB1c2VkIHRvIHByZXZlbnQgb3ZlcnJ1biBvZiBvbGQgZGF0 YQogICogaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLgogICoKLSAqIFRoZSByZXR1cm4gdmFsdWUg aXMgdHJ1ZSBpZiBlbWVyZ2VuY3kgYXV0b3ZhY3V1bSBpcyByZXF1aXJlZCBhbmQgZmFsc2UKLSAq IG90aGVyd2lzZS4KKyAqIFRoZSByZXR1cm4gdmFsdWUgaXMgdHJ1ZSBpZiBhdXRvdmFjdXVtIGlz IHJlcXVpcmVkIGFuZCBmYWxzZSBvdGhlcndpc2UuCiAgKi8KIHN0YXRpYyBib29sCiBTZXRPZmZz ZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCkBAIC0yNjUzLDggKzI2NDIsNiBAQCBTZXRP ZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJTXVsdGlYYWN0T2Zmc2V0IG5leHRP ZmZzZXQ7CiAJYm9vbAkJb2xkZXN0T2Zmc2V0S25vd24gPSBmYWxzZTsKIAlib29sCQlwcmV2T2xk ZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0b3BMaW1pdCA9IDA7Ci0J TXVsdGlYYWN0T2Zmc2V0IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAKIAkvKgogCSAqIE5COiBIYXZl IHRvIHByZXZlbnQgY29uY3VycmVudCB0cnVuY2F0aW9uLCB3ZSBtaWdodCBvdGhlcndpc2UgdHJ5 IHRvCkBAIC0yNjY5LDcgKzI2NTYsNiBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0 YXJ0dXApCiAJbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwogCXByZXZP bGRlc3RPZmZzZXRLbm93biA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93bjsKIAlw cmV2T2xkZXN0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldDsKLQlwcmV2T2Zm c2V0U3RvcExpbWl0ID0gTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdDsKIAlBc3NlcnQo TXVsdGlYYWN0U3RhdGUtPmZpbmlzaGVkU3RhcnR1cCk7CiAJTFdMb2NrUmVsZWFzZShNdWx0aVhh Y3RHZW5Mb2NrKTsKIApAQCAtMjcwMCwxMSArMjY4Niw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0 KGJvb2wgaXNfc3RhcnR1cCkKIAkJb2xkZXN0T2Zmc2V0S25vd24gPQogCQkJZmluZF9tdWx0aXhh Y3Rfc3RhcnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpOwogCi0JCWlmIChvbGRl c3RPZmZzZXRLbm93bikKLQkJCWVyZXBvcnQoREVCVUcxLAotCQkJCQkoZXJybXNnX2ludGVybmFs KCJvbGRlc3QgTXVsdGlYYWN0SWQgbWVtYmVyIGlzIGF0IG9mZnNldCAldSIsCi0JCQkJCQkJCQkg b2xkZXN0T2Zmc2V0KSkpOwotCQllbHNlCisJCWlmICghb2xkZXN0T2Zmc2V0S25vd24pCiAJCQll cmVwb3J0KExPRywKIAkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJlciB3cmFwYXJvdW5kIHBy b3RlY3Rpb25zIGFyZSBkaXNhYmxlZCBiZWNhdXNlIG9sZGVzdCBjaGVja3BvaW50ZWQgTXVsdGlY YWN0ICV1IGRvZXMgbm90IGV4aXN0IG9uIGRpc2siLAogCQkJCQkJCW9sZGVzdE11bHRpWGFjdElk KSkpOwpAQCAtMjcxNywyNCArMjY5OSw3IEBAIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNf c3RhcnR1cCkKIAkgKiBvdmVycnVuIG9mIG9sZCBkYXRhIGluIHRoZSBtZW1iZXJzIFNMUlUgYXJl YS4gV2UgY2FuIG9ubHkgZG8gc28gaWYgdGhlCiAJICogb2xkZXN0IG9mZnNldCBpcyBrbm93biB0 aG91Z2guCiAJICovCi0JaWYgKG9sZGVzdE9mZnNldEtub3duKQotCXsKLQkJLyogbW92ZSBiYWNr IHRvIHN0YXJ0IG9mIHRoZSBjb3JyZXNwb25kaW5nIHNlZ21lbnQgKi8KLQkJb2Zmc2V0U3RvcExp bWl0ID0gb2xkZXN0T2Zmc2V0IC0gKG9sZGVzdE9mZnNldCAlCi0JCQkJCQkJCQkJICAoTVVMVElY QUNUX01FTUJFUlNfUEVSX1BBR0UgKiBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSk7Ci0KLQkJLyog YWx3YXlzIGxlYXZlIG9uZSBzZWdtZW50IGJlZm9yZSB0aGUgd3JhcGFyb3VuZCBwb2ludCAqLwot CQlvZmZzZXRTdG9wTGltaXQgLT0gKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFICogU0xSVV9Q QUdFU19QRVJfU0VHTUVOVCk7Ci0KLQkJaWYgKCFwcmV2T2xkZXN0T2Zmc2V0S25vd24gJiYgIWlz X3N0YXJ0dXApCi0JCQllcmVwb3J0KExPRywKLQkJCQkJKGVycm1zZygiTXVsdGlYYWN0IG1lbWJl ciB3cmFwYXJvdW5kIHByb3RlY3Rpb25zIGFyZSBub3cgZW5hYmxlZCIpKSk7Ci0KLQkJZXJlcG9y dChERUJVRzEsCi0JCQkJKGVycm1zZ19pbnRlcm5hbCgiTXVsdGlYYWN0IG1lbWJlciBzdG9wIGxp bWl0IGlzIG5vdyAldSBiYXNlZCBvbiBNdWx0aVhhY3QgJXUiLAotCQkJCQkJCQkgb2Zmc2V0U3Rv cExpbWl0LCBvbGRlc3RNdWx0aVhhY3RJZCkpKTsKLQl9Ci0JZWxzZSBpZiAocHJldk9sZGVzdE9m ZnNldEtub3duKQorCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCiAJewogCQkvKgogCQkgKiBJ ZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwgYnV0IHdlIGhh dmUgYQpAQCAtMjc0NCw2OSArMjcwOSwxOSBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlz X3N0YXJ0dXApCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0OwogCQlv bGRlc3RPZmZzZXRLbm93biA9IHRydWU7Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHByZXZPZmZzZXRT dG9wTGltaXQ7CiAJfQogCiAJLyogSW5zdGFsbCB0aGUgY29tcHV0ZWQgdmFsdWVzICovCiAJTFdM b2NrQWNxdWlyZShNdWx0aVhhY3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0 YXRlLT5vbGRlc3RPZmZzZXQgPSBvbGRlc3RPZmZzZXQ7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVz dE9mZnNldEtub3duID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0U3RhdGUtPm9mZnNl dFN0b3BMaW1pdCA9IG9mZnNldFN0b3BMaW1pdDsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdl bkxvY2spOwogCiAJLyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5jeSBhdXRvdmFjdXVtPwlJ ZiB3ZSdyZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KKwkgKiBEbyB3ZSBuZWVkIGF1dG92YWN1dW0/ CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwogCXJldHVybiAhb2xkZXN0T2Zm c2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVN QkVSX1NBRkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVyIGFkZGluZyAi ZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFyeSIuCi0gKgotICog V2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0aW9uIGlzICJ3cmFwcGlu ZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNlIHRoZSBuYW1lLiAgVGhlIHJl YXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxhcgotICogMl4zMS1tb2R1bG8gYXJp dGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBiZSBhYmxlIHRvIHVzZSB0aGUgd2hvbGUg b2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwgYWxsb3dpbmcgZm9yIG1vcmUgbXVsdGl4YWN0 cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3aXNlLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlY YWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zm c2V0IHN0YXJ0LAotCQkJCQkJIHVpbnQzMiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQg ZmluaXNoOwotCi0JLyoKLQkgKiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2Vk IChzZWUgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3Jh cHMgYXJvdW5kIHRoZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwot CWZpbmlzaCA9IHN0YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5p c2grKzsKLQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1l cmljYWxseSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1ZSBu dW1lcmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkgKgk8LS0t LVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChhbmQgVUlOVF9N QVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBbLS0tLV0gPSBGIHdy YXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1lcmljYWxseSBs ZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQotCSAqIFVJTlRfTUFYIHdyYXBh cm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0aGVuIGFsbCB2YWx1ZXMgaW4KLQkg KiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJPC0tLS1CLS0tLVMtLS0tPgotCSAqCVst LS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIgKGJ1dCB3cmFwcGVkIHBhc3QgVUlOVF9NQVgp Ci0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVkIHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJ ICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVkCi0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChz dGFydCA8IGJvdW5kYXJ5KQotCQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8 IHN0YXJ0OwotCWVsc2UKLQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBz dGFydDsKKwkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX0FV VE9WQUNfVEhSRVNIT0xEKTsKIH0KIAogLyoKQEAgLTI4MjUsNyArMjc0MCw2IEBAIGZpbmRfbXVs dGl4YWN0X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkK IAlpbnQ2NAkJcGFnZW5vOwogCWludAkJCWVudHJ5bm87CiAJaW50CQkJc2xvdG5vOwotCU11bHRp WGFjdE9mZnNldCAqb2ZmcHRyOwogCiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0 YXJ0dXApOwogCkBAIC0yODQzLDkgKzI3NTcsOSBAQCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0 aVhhY3RJZCBtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpyZXN1bHQpCiAKIAkvKiBsb2NrIGlzIGFj cXVpcmVkIGJ5IFNpbXBsZUxydVJlYWRQYWdlX1JlYWRPbmx5ICovCiAJc2xvdG5vID0gU2ltcGxl THJ1UmVhZFBhZ2VfUmVhZE9ubHkoTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdlbm8sIG11bHRpKTsK LQlvZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dOwotCW9mZnB0ciArPSBlbnRyeW5vOwotCW9mZnNldCA9ICpv ZmZwdHI7CisKKwlvZmZzZXQgPSBNWE9mZnNldFJlYWQoZW50cnlubywgc2xvdG5vKTsKKwogCUxX TG9ja1JlbGVhc2UoU2ltcGxlTHJ1R2V0QmFua0xvY2soTXVsdGlYYWN0T2Zmc2V0Q3RsLCBwYWdl bm8pKTsKIAogCSpyZXN1bHQgPSBvZmZzZXQ7CkBAIC0yODkzLDczICsyODA3LDYgQEAgR2V0TXVs dGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9mZnNldCAqbWVtYmVycywK IAlyZXR1cm4gdHJ1ZTsKIH0KIAotLyoKLSAqIE11bHRpeGFjdCBtZW1iZXJzIGNhbiBiZSByZW1v dmVkIG9uY2UgdGhlIG11bHRpeGFjdHMgdGhhdCByZWZlciB0byB0aGVtCi0gKiBhcmUgb2xkZXIg dGhhbiBldmVyeSBkYXRtaW5teGlkLiAgYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9h Z2UgYW5kCi0gKiB2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV90YWJsZV9hZ2Ugd29yayB0b2dldGhl ciB0byBtYWtlIHN1cmUgd2UgbmV2ZXIgaGF2ZQotICogdG9vIG1hbnkgbXVsdGl4YWN0czsgd2Ug aG9wZSB0aGF0LCBhdCBsZWFzdCB1bmRlciBub3JtYWwgY2lyY3Vtc3RhbmNlcywKLSAqIHRoaXMg d2lsbCBhbHNvIGJlIHN1ZmZpY2llbnQgdG8ga2VlcCB1cyBmcm9tIHVzaW5nIHRvbyBtYW55IG9m ZnNldHMuCi0gKiBIb3dldmVyLCBpZiB0aGUgYXZlcmFnZSBtdWx0aXhhY3QgaGFzIG1hbnkgbWVt YmVycywgd2UgbWlnaHQgZXhoYXVzdCB0aGUKLSAqIG1lbWJlcnMgc3BhY2Ugd2hpbGUgc3RpbGwg dXNpbmcgZmV3IGVub3VnaCBtZW1iZXJzIHRoYXQgdGhlc2UgbGltaXRzIGZhaWwKLSAqIHRvIHRy aWdnZXIgcmVsbWlubXhpZCBhZHZhbmNlbWVudCBieSBWQUNVVU0uICBBdCB0aGF0IHBvaW50LCB3 ZSdkIGhhdmUgbm8KLSAqIGNob2ljZSBidXQgdG8gc3RhcnQgZmFpbGluZyBtdWx0aXhhY3QtY3Jl YXRpbmcgb3BlcmF0aW9ucyB3aXRoIGFuIGVycm9yLgotICoKLSAqIFRvIHByZXZlbnQgdGhhdCwg aWYgbW9yZSB0aGFuIGEgdGhyZXNob2xkIHBvcnRpb24gb2YgdGhlIG1lbWJlcnMgc3BhY2UgaXMK LSAqIHVzZWQsIHdlIGVmZmVjdGl2ZWx5IHJlZHVjZSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSBhbmQKLSAqIHRvIGEgdmFsdWUganVzdCBsZXNzIHRoYW4gdGhlIG51bWJlciBv ZiBtdWx0aXhhY3RzIGluIHVzZS4gIFdlIGhvcGUgdGhhdAotICogdGhpcyB3aWxsIHF1aWNrbHkg dHJpZ2dlciBhdXRvdmFjdXVtaW5nIG9uIHRoZSB0YWJsZSBvciB0YWJsZXMgd2l0aCB0aGUKLSAq IG9sZGVzdCByZWxtaW5teGlkLCB0aHVzIGFsbG93aW5nIGRhdG1pbm14aWQgdmFsdWVzIHRvIGFk dmFuY2UgYW5kIHJlbW92aW5nCi0gKiBzb21lIG1lbWJlcnMuCi0gKgotICogQXMgdGhlIGZyYWN0 aW9uIG9mIHRoZSBtZW1iZXIgc3BhY2UgY3VycmVudGx5IGluIHVzZSBncm93cywgd2UgYmVjb21l Ci0gKiBtb3JlIGFnZ3Jlc3NpdmUgaW4gY2xhbXBpbmcgdGhpcyB2YWx1ZS4gIFRoYXQgbm90IG9u bHkgY2F1c2VzIGF1dG92YWN1dW0KLSAqIHRvIHJhbXAgdXAsIGJ1dCBhbHNvIG1ha2VzIGFueSBt YW51YWwgdmFjdXVtcyB0aGUgdXNlciBpc3N1ZXMgbW9yZQotICogYWdncmVzc2l2ZS4gIFRoaXMg aGFwcGVucyBiZWNhdXNlIHZhY3V1bV9nZXRfY3V0b2ZmcygpIHdpbGwgY2xhbXAgdGhlCi0gKiBm cmVlemUgdGFibGUgYW5kIHRoZSBtaW5pbXVtIGZyZWV6ZSBhZ2UgY3V0b2ZmcyBiYXNlZCBvbiB0 aGUgZWZmZWN0aXZlCi0gKiBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSB0aGlz IGZ1bmN0aW9uIHJldHVybnMuICBJbiB0aGUgd29yc3QKLSAqIGNhc2UsIHdlJ2xsIGNsYWltIHRo ZSBmcmVlemVfbWF4X2FnZSB0byB6ZXJvLCBhbmQgZXZlcnkgdmFjdXVtIG9mIGFueQotICogdGFi bGUgd2lsbCBmcmVlemUgZXZlcnkgbXVsdGl4YWN0LgotICovCi1pbnQKLU11bHRpWGFjdE1lbWJl ckZyZWV6ZVRocmVzaG9sZCh2b2lkKQotewotCU11bHRpWGFjdE9mZnNldCBtZW1iZXJzOwotCXVp bnQzMgkJbXVsdGl4YWN0czsKLQl1aW50MzIJCXZpY3RpbV9tdWx0aXhhY3RzOwotCWRvdWJsZQkJ ZnJhY3Rpb247Ci0JaW50CQkJcmVzdWx0OwotCU11bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElk OwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0KLQkvKiBJZiB3ZSBjYW4ndCBkZXRl cm1pbmUgbWVtYmVyIHNwYWNlIHV0aWxpemF0aW9uLCBhc3N1bWUgdGhlIHdvcnN0LiAqLwotCWlm ICghR2V0TXVsdGlYYWN0SW5mbygmbXVsdGl4YWN0cywgJm1lbWJlcnMsICZvbGRlc3RNdWx0aVhh Y3RJZCwgJm9sZGVzdE9mZnNldCkpCi0JCXJldHVybiAwOwotCi0JLyogSWYgbWVtYmVyIHNwYWNl IHV0aWxpemF0aW9uIGlzIGxvdywgbm8gc3BlY2lhbCBhY3Rpb24gaXMgcmVxdWlyZWQuICovCi0J aWYgKG1lbWJlcnMgPD0gTVVMVElYQUNUX01FTUJFUl9TQUZFX1RIUkVTSE9MRCkKLQkJcmV0dXJu IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwotCi0JLyoKLQkgKiBDb21wdXRl IGEgdGFyZ2V0IGZvciByZWxtaW5teGlkIGFkdmFuY2VtZW50LiAgVGhlIG51bWJlciBvZiBtdWx0 aXhhY3RzCi0JICogd2UgdHJ5IHRvIGVsaW1pbmF0ZSBmcm9tIHRoZSBzeXN0ZW0gaXMgYmFzZWQg b24gaG93IGZhciB3ZSBhcmUgcGFzdAotCSAqIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hP TEQuCi0JICovCi0JZnJhY3Rpb24gPSAoZG91YmxlKSAobWVtYmVycyAtIE1VTFRJWEFDVF9NRU1C RVJfU0FGRV9USFJFU0hPTEQpIC8KLQkJKE1VTFRJWEFDVF9NRU1CRVJfREFOR0VSX1RIUkVTSE9M RCAtIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpOwotCXZpY3RpbV9tdWx0aXhhY3Rz ID0gbXVsdGl4YWN0cyAqIGZyYWN0aW9uOwotCi0JLyogZnJhY3Rpb24gY291bGQgYmUgPiAxLjAs IGJ1dCBsb3dlc3QgcG9zc2libGUgZnJlZXplIGFnZSBpcyB6ZXJvICovCi0JaWYgKHZpY3RpbV9t dWx0aXhhY3RzID4gbXVsdGl4YWN0cykKLQkJcmV0dXJuIDA7Ci0JcmVzdWx0ID0gbXVsdGl4YWN0 cyAtIHZpY3RpbV9tdWx0aXhhY3RzOwotCi0JLyoKLQkgKiBDbGFtcCB0byBhdXRvdmFjdXVtX211 bHRpeGFjdF9mcmVlemVfbWF4X2FnZSwgc28gdGhhdCB3ZSBuZXZlciBtYWtlCi0JICogYXV0b3Zh Y3V1bSBsZXNzIGFnZ3Jlc3NpdmUgdGhhbiBpdCB3b3VsZCBvdGhlcndpc2UgYmUuCi0JICovCi0J cmV0dXJuIE1pbihyZXN1bHQsIGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlKTsK LX0KLQogdHlwZWRlZiBzdHJ1Y3QgbXh0cnVuY2luZm8KIHsKIAlpbnQ2NAkJZWFybGllc3RFeGlz dGluZ1BhZ2U7CkBAIC0zMTU5LDcgKzMwMDYsNyBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhh Y3RJZCBuZXdPbGRlc3RNdWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAKIAllbG9nKERFQlVH MSwgInBlcmZvcm1pbmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJICJvZmZzZXRzIFsldSwg JXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCSAi bWVtYmVycyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2 NCAiKSIsCisJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBz ZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCSBvbGRlc3RNdWx0aSwgbmV3 T2xkZXN0TXVsdGksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChvbGRlc3RNdWx0aSks CiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSksCkBAIC0zMjkw LDcgKzMxMzcsNyBAQCBNdWx0aVhhY3RJZFByZWNlZGVzT3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVs dGkxLCBNdWx0aVhhY3RJZCBtdWx0aTIpCiBzdGF0aWMgYm9vbAogTXVsdGlYYWN0T2Zmc2V0UHJl Y2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsIE11bHRpWGFjdE9mZnNldCBvZmZzZXQyKQog ewotCWludDMyCQlkaWZmID0gKGludDMyKSAob2Zmc2V0MSAtIG9mZnNldDIpOworCWludDY0CQlk aWZmID0gKGludDY0KSAob2Zmc2V0MSAtIG9mZnNldDIpOwogCiAJcmV0dXJuIChkaWZmIDwgMCk7 CiB9CkBAIC0zMzg3LDcgKzMyMzQsNyBAQCBtdWx0aXhhY3RfcmVkbyhYTG9nUmVhZGVyU3RhdGUg KnJlY29yZCkKIAogCQllbG9nKERFQlVHMSwgInJlcGxheWluZyBtdWx0aXhhY3QgdHJ1bmNhdGlv bjogIgogCQkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZzZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQg IiwgJSIgUFJJeDY0ICIpLCAiCi0JCQkgIm1lbWJlcnMgWyV1LCAldSksIG1lbWJlcnMgc2VnbWVu dHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAorCQkJICJtZW1iZXJzIFslIiBQUkl1NjQg IiwgJSIgUFJJdTY0ICIpLCBtZW1iZXJzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0 ICIpIiwKIAkJCSB4bHJlYy5zdGFydFRydW5jT2ZmLCB4bHJlYy5lbmRUcnVuY09mZiwKIAkJCSBN dWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5zdGFydFRydW5jT2ZmKSwKIAkJCSBNdWx0 aVhhY3RJZFRvT2Zmc2V0U2VnbWVudCh4bHJlYy5lbmRUcnVuY09mZiksCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyBiL3NyYy9iYWNrZW5kL2Fj Y2Vzcy90cmFuc2FtL3hsb2dyZWNvdmVyeS5jCmluZGV4IDNlM2M0ZGEwMWEyLi4zYjJiMGE1MjJj YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMK KysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMKQEAgLTg4NSw3 ICs4ODUsNyBAQCBJbml0V2FsUmVjb3ZlcnkoQ29udHJvbEZpbGVEYXRhICpDb250cm9sRmlsZSwg Ym9vbCAqd2FzU2h1dGRvd25fcHRyLAogCQkJCQkJCSBVNjRGcm9tRnVsbFRyYW5zYWN0aW9uSWQo Y2hlY2tQb2ludC5uZXh0WGlkKSwKIAkJCQkJCQkgY2hlY2tQb2ludC5uZXh0T2lkKSkpOwogCWVy ZXBvcnQoREVCVUcxLAotCQkJKGVycm1zZ19pbnRlcm5hbCgibmV4dCBNdWx0aVhhY3RJZDogJXU7 IG5leHQgTXVsdGlYYWN0T2Zmc2V0OiAldSIsCisJCQkoZXJybXNnX2ludGVybmFsKCJuZXh0IE11 bHRpWGFjdElkOiAldTsgbmV4dCBNdWx0aVhhY3RPZmZzZXQ6ICUiIFBSSXU2NCwKIAkJCQkJCQkg Y2hlY2tQb2ludC5uZXh0TXVsdGksIGNoZWNrUG9pbnQubmV4dE11bHRpT2Zmc2V0KSkpOwogCWVy ZXBvcnQoREVCVUcxLAogCQkJKGVycm1zZ19pbnRlcm5hbCgib2xkZXN0IHVuZnJvemVuIHRyYW5z YWN0aW9uIElEOiAldSwgaW4gZGF0YWJhc2UgJXUiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQv Y29tbWFuZHMvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9jb21tYW5kcy92YWN1dW0uYwppbmRleCBl ZDAzZTNiZDUwZC4uMjU5ZWY2MGJkMzEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2NvbW1hbmRz L3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1bS5jCkBAIC0xMTQ3LDcg KzExNDcsNyBAQCB2YWN1dW1fZ2V0X2N1dG9mZnMoUmVsYXRpb24gcmVsLCBjb25zdCBWYWN1dW1Q YXJhbXMgcGFyYW1zLAogCSAqIG5vcm1hbGx5IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9t YXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2UgYXJlCiAJICogc2hvcnQgb2YgbXVsdGl4YWN0 IG1lbWJlciBzcGFjZS4KIAkgKi8KLQllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdl ID0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CisJZWZmZWN0aXZlX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZSA9IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwog CiAJLyoKIAkgKiBBbG1vc3QgcmVhZHkgdG8gc2V0IGZyZWV6ZSBvdXRwdXQgcGFyYW1ldGVyczsg Y2hlY2sgaWYgT2xkZXN0WG1pbiBvcgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rl ci9hdXRvdmFjdXVtLmMgYi9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0uYwppbmRl eCA1MDg0YWY3ZGZiNi4uMjYzODU0NzBjMTkgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3Bvc3Rt YXN0ZXIvYXV0b3ZhY3V1bS5jCisrKyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1 bS5jCkBAIC0xMTUxLDcgKzExNTEsNyBAQCBkb19zdGFydF93b3JrZXIodm9pZCkKIAogCS8qIEFs c28gZGV0ZXJtaW5lIHRoZSBvbGRlc3QgZGF0bWlubXhpZCB3ZSB3aWxsIGNvbnNpZGVyLiAqLwog CXJlY2VudE11bHRpID0gUmVhZE5leHRNdWx0aVhhY3RJZCgpOwotCW11bHRpRm9yY2VMaW1pdCA9 IHJlY2VudE11bHRpIC0gTXVsdGlYYWN0TWVtYmVyRnJlZXplVGhyZXNob2xkKCk7CisJbXVsdGlG b3JjZUxpbWl0ID0gcmVjZW50TXVsdGkgLSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4 X2FnZTsKIAlpZiAobXVsdGlGb3JjZUxpbWl0IDwgRmlyc3RNdWx0aVhhY3RJZCkKIAkJbXVsdGlG b3JjZUxpbWl0IC09IEZpcnN0TXVsdGlYYWN0SWQ7CiAKQEAgLTE5MzksNyArMTkzOSw3IEBAIGRv X2F1dG92YWN1dW0odm9pZCkKIAkgKiBub3JtYWxseSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVl emVfbWF4X2FnZSwgYnV0IG1heSBiZSBsZXNzIGlmIHdlIGFyZQogCSAqIHNob3J0IG9mIG11bHRp eGFjdCBtZW1iZXIgc3BhY2UuCiAJICovCi0JZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4 X2FnZSA9IE11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCgpOworCWVmZmVjdGl2ZV9tdWx0 aXhhY3RfZnJlZXplX21heF9hZ2UgPSBhdXRvdmFjdXVtX211bHRpeGFjdF9mcmVlemVfbWF4X2Fn ZTsKIAogCS8qCiAJICogRmluZCB0aGUgcGdfZGF0YWJhc2UgZW50cnkgYW5kIHNlbGVjdCB0aGUg ZGVmYXVsdCBmcmVlemUgYWdlcy4gV2UgdXNlCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX2NvbnRy b2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRy b2xkYXRhLmMKaW5kZXggMTBkZTA1OGNlOTEuLjUyOTUxMDhhZGUzIDEwMDY0NAotLS0gYS9zcmMv YmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMKKysrIGIvc3JjL2Jpbi9wZ19jb250 cm9sZGF0YS9wZ19jb250cm9sZGF0YS5jCkBAIC0yNjQsNyArMjY0LDcgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE9p ZCk7CiAJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpWGFjdElkOiAgJXVc biIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsKLQlwcmlu dGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxuIiksCisJcHJp bnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAgJSIgUFJJdTY0ICJc biIpLAogCQkgICBDb250cm9sRmlsZS0+Y2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsK IAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAgICAgICAldVxuIiks CiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5vbGRlc3RYaWQpOwpkaWZmIC0tZ2l0 IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jIGIvc3JjL2Jpbi9wZ19yZXNldHdh bC9wZ19yZXNldHdhbC5jCmluZGV4IGE4OWQ3MmZjNWNmLi40ZTVlZWNlZDg5ZCAxMDA2NDQKLS0t IGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCisrKyBiL3NyYy9iaW4vcGdfcmVz ZXR3YWwvcGdfcmVzZXR3YWwuYwpAQCAtMjY3LDcgKzI2Nyw3IEBAIG1haW4oaW50IGFyZ2MsIGNo YXIgKmFyZ3ZbXSkKIAogCQkJY2FzZSAnTyc6CiAJCQkJZXJybm8gPSAwOwotCQkJCXNldF9teG9m ZiA9IHN0cnRvdWwob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRfbXhvZmYgPSBzdHJ0b3U2 NChvcHRhcmcsICZlbmRwdHIsIDApOwogCQkJCWlmIChlbmRwdHIgPT0gb3B0YXJnIHx8ICplbmRw dHIgIT0gJ1wwJyB8fCBlcnJubyAhPSAwKQogCQkJCXsKIAkJCQkJcGdfbG9nX2Vycm9yKCJpbnZh bGlkIGFyZ3VtZW50IGZvciBvcHRpb24gJXMiLCAiLU8iKTsKQEAgLTc0Myw3ICs3NDMsNyBAQCBQ cmludENvbnRyb2xWYWx1ZXMoYm9vbCBndWVzc2VkKQogCQkgICBDb250cm9sRmlsZS5jaGVja1Bv aW50Q29weS5uZXh0T2lkKTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVs dGlYYWN0SWQ6ICAldVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRN dWx0aSk7Ci0JcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAg JXVcbiIpLAorCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDog ICUiIFBSSXU2NCAiXG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11 bHRpT2Zmc2V0KTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBvbGRlc3RYSUQ6ICAg ICAgICAldVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm9sZGVzdFhpZCk7 CkBAIC04MTcsNyArODE3LDcgQEAgUHJpbnROZXdDb250cm9sVmFsdWVzKHZvaWQpCiAKIAlpZiAo c2V0X214b2ZmICE9IC0xKQogCXsKLQkJcHJpbnRmKF8oIk5leHRNdWx0aU9mZnNldDogICAgICAg ICAgICAgICAgICAgICAgJXVcbiIpLAorCQlwcmludGYoXygiTmV4dE11bHRpT2Zmc2V0OiAgICAg ICAgICAgICAgICAgICAgICAlIiBQUkl1NjQgIlxuIiksCiAJCQkgICBDb250cm9sRmlsZS5jaGVj a1BvaW50Q29weS5uZXh0TXVsdGlPZmZzZXQpOwogCX0KIApkaWZmIC0tZ2l0IGEvc3JjL2Jpbi9w Z19yZXNldHdhbC90LzAwMV9iYXNpYy5wbCBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFz aWMucGwKaW5kZXggZDZiYmJkMGNlZGEuLjE2YjVhNjIzOTAwIDEwMDY0NAotLS0gYS9zcmMvYmlu L3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCisrKyBiL3NyYy9iaW4vcGdfcmVzZXR3YWwvdC8w MDFfYmFzaWMucGwKQEAgLTIxMyw3ICsyMTMsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVk LCVkIiwgaGV4KCRmaWxlc1swXSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxl c1stMV0pKTsKIAogQGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZzZXRz Jyk7Ci0kbXVsdCA9IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogKCRibGNrc3ogLSA4 KSAvIDQ7CiAjIC0tbXVsdGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2ggQGNt ZCwKICAgJy0tbXVsdGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdC5oCmluZGV4IDgyZTRiYjkwZGQ1Li4xNmEwNzcyMzA4OCAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaApAQCAtMjgsNyArMjgsNyBAQAogCiAjZGVmaW5lIE11bHRpWGFjdElkSXNWYWxpZChtdWx0 aSkgKChtdWx0aSkgIT0gSW52YWxpZE11bHRpWGFjdElkKQogCi0jZGVmaW5lIE1heE11bHRpWGFj dE9mZnNldAkoKE11bHRpWGFjdE9mZnNldCkgMHhGRkZGRkZGRikKKyNkZWZpbmUgTWF4TXVsdGlY YWN0T2Zmc2V0CVVJTlQ2NENPTlNUKDB4RkZGRkZGRkZGRkZGRkZGRikKIAogLyoKICAqIFBvc3Np YmxlIG11bHRpeGFjdCBsb2NrIG1vZGVzICgic3RhdHVzIikuICBUaGUgZmlyc3QgZm91ciBtb2Rl cyBhcmUgZm9yCkBAIC0xNDcsNyArMTQ3LDYgQEAgZXh0ZXJuIHZvaWQgTXVsdGlYYWN0U2V0TmV4 dE1YYWN0KE11bHRpWGFjdElkIG5leHRNdWx0aSwKIGV4dGVybiB2b2lkIE11bHRpWGFjdEFkdmFu Y2VOZXh0TVhhY3QoTXVsdGlYYWN0SWQgbWluTXVsdGksCiAJCQkJCQkJCQkgIE11bHRpWGFjdE9m ZnNldCBtaW5NdWx0aU9mZnNldCk7CiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZhbmNlT2xkZXN0 KE11bHRpWGFjdElkIG9sZGVzdE11bHRpLCBPaWQgb2xkZXN0TXVsdGlEQik7Ci1leHRlcm4gaW50 CU11bHRpWGFjdE1lbWJlckZyZWV6ZVRocmVzaG9sZCh2b2lkKTsKIAogZXh0ZXJuIHZvaWQgbXVs dGl4YWN0X3R3b3BoYXNlX3JlY292ZXIoRnVsbFRyYW5zYWN0aW9uSWQgZnhpZCwgdWludDE2IGlu Zm8sCiAJCQkJCQkJCQkgICB2b2lkICpyZWNkYXRhLCB1aW50MzIgbGVuKTsKZGlmZiAtLWdpdCBh L3NyYy9pbmNsdWRlL2MuaCBiL3NyYy9pbmNsdWRlL2MuaAppbmRleCA5YWI1ZTYxNzk5NS4uN2Fi OWU2OGFmNmEgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2MuaAorKysgYi9zcmMvaW5jbHVkZS9j LmgKQEAgLTY2Niw3ICs2NjYsNyBAQCB0eXBlZGVmIHVpbnQzMiBTdWJUcmFuc2FjdGlvbklkOwog LyogTXVsdGlYYWN0SWQgbXVzdCBiZSBlcXVpdmFsZW50IHRvIFRyYW5zYWN0aW9uSWQsIHRvIGZp dCBpbiB0X3htYXggKi8KIHR5cGVkZWYgVHJhbnNhY3Rpb25JZCBNdWx0aVhhY3RJZDsKIAotdHlw ZWRlZiB1aW50MzIgTXVsdGlYYWN0T2Zmc2V0OwordHlwZWRlZiB1aW50NjQgTXVsdGlYYWN0T2Zm c2V0OwogCiB0eXBlZGVmIHVpbnQzMiBDb21tYW5kSWQ7CiAKLS0gCjIuNTEuMAoK --0000000000003b2089064225eb24--