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 1tR7Pp-007PVb-NG for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Dec 2024 10:17:58 +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 1tR7Oq-008zOB-3p for pgsql-hackers@arkaria.postgresql.org; Fri, 27 Dec 2024 10:16:55 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.94.2) (envelope-from ) id 1tR7Op-008zO3-H6 for pgsql-hackers@lists.postgresql.org; Fri, 27 Dec 2024 10:16:55 +0000 Received: from mail-ej1-x631.google.com ([2a00:1450:4864:20::631]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1tR7Om-000mdF-37 for pgsql-hackers@postgresql.org; Fri, 27 Dec 2024 10:16:53 +0000 Received: by mail-ej1-x631.google.com with SMTP id a640c23a62f3a-aa659775dd5so109873466b.0 for ; Fri, 27 Dec 2024 02:16:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; t=1735294610; x=1735899410; darn=postgresql.org; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:from:to:cc:subject:date:message-id :reply-to; bh=V7jSXMTciV7q77xAymcacMguIz/1iMrsqsTP+CjaDVE=; b=f0QgqXESN23TRGnGLqQqCz7PKUDckLQAQ1eAbnwZtAfhJSrPGZPXjBaoIrX6PlAceb YbPdJnu4okP6rymhApQG1YL3ymu+hWDOY/CYgp7Q3WTmSrEbCzP9mktKB67nC5/+UymB 6VzmheDaPXtRF1Ueh/Mm6c+85ws21kOjFEz4RTYNifbJ9tnVxXxSk+o78C6QsqacOb2e wD2Aq1GH29ATgBx5T7l9zcmbzG88/jUxEtFVJ9hTCLoFZj/1C1FZjAuiVHlqUpfzYySk coHR8GmZWiUKqQ+i0aPdI94TqE9j1w0LruuEzjQneHRnedRvJGXBi3YE7gs47NSlCeS6 NWAA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1735294610; x=1735899410; h=in-reply-to:content-language:references:to:from:subject:user-agent :mime-version:date:message-id:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=V7jSXMTciV7q77xAymcacMguIz/1iMrsqsTP+CjaDVE=; b=szDhDGfKajyeDsH90A+x6m11GlsWM0gwcDGgCLC6Cj/+FcnH7hXaN82CzXtB0GwrfS Y/nrATjnCW/BgSWg5vB46lXmRBb4vratzfSdvpYva5WeGm3Giq5Qo2kfMB3Auf8dObUi gQJ+RECgMs1+CFr75A+OCYoboQt4KN2SQ5AngN+Z82CVSvG2160kX+HBJpdzUHJ8Ja3Y Ik4KMMHTTUnH+YS2iDZ1K4Iy1TQz13HfK6HOy1EEEsCiLwd/Xrfd4mU2/wAro+SrjSg7 kI45D7mH016DVaPKPBqody6TKLIFv1ee9Z/gByVg6RFWDLan0Wl1U5pV/D47ymubRkbw 4Cew== X-Gm-Message-State: AOJu0YzAAMCm028xBD51g+Wp0BxenQsd6aflEFTZbiXPYDg5G72Qj3z/ z2vjbUfac2eBu3x79msJbF3EglNs/cb2LMeD+8d6uG82GnaRNUbPFnvzAk1GG4pqtoI3cC4Y8Os K4z3FrSyxFBn29NNlrMqPZK+PjZbpGIeYuwS2wE93z0Lx5ALSZskOMvgcz0pyk2zoylfoT7axJ4 6nkNCXdtTRLGyosT74m/QGYTkSedtACA8s3Jhq9df7E2+zOjLyvYktqgZ92yk= X-Gm-Gg: ASbGnctPVS1YLylVusDa7lf4x3KzxTQ7jUeAVEQNZZ385lR+CcDcCuy6Qp0SqGVag4a gWZbwIrhofGVkxvJQ0DHq1S5Z4bDcnp6xmk95rDwqtIVeNJxWwTV4Nd1nwdV+08dOts3xAYhDx5 VqASKOEdoq4Kt2U//QsiaBsl9TgzFyAK9h++onxkVRdrXPwCIKyxRqQDffaQ1rN+LLp8l/BBlTZ 2qgwa1azIrblp94qGAjiLXW9mZlPT5L5Rviag04ZxkhkKpF44uhtDyLrNq9voXm9e/VvRnvnHmI ph7M9EU7afWtcwTiRbd99o9Pd7D9rGvAF6YqslQ7UukGvo0YB0n40J05vHtZPGf0JJmmWi1lAb8 +DpbRd9F6swx8biph0PvKSgOGBIe5RYAIsV4J4dengWR4u7pJqw== X-Google-Smtp-Source: AGHT+IGnTQlMzBl+X0aGzscn+M7GGQjZZZNIhd+ZeVUKe1kNGGGtIYM4NgX0GjLojha0KglkJ85Fqg== X-Received: by 2002:a17:907:d9f:b0:aa6:6e2e:b7b with SMTP id a640c23a62f3a-aac27247cf9mr800157966b.1.1735294610011; Fri, 27 Dec 2024 02:16:50 -0800 (PST) Received: from ?IPV6:2003:c2:7709:d031:a48c:80f7:d65d:5fc0? (p200300c27709d031a48c80f7d65d5fc0.dip0.t-ipconnect.de. [2003:c2:7709:d031:a48c:80f7:d65d:5fc0]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-aac0f015ae1sm1095165266b.147.2024.12.27.02.16.47 for (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 27 Dec 2024 02:16:47 -0800 (PST) Content-Type: multipart/mixed; boundary="------------iWnndLhMOw8StcdKXgjj9suj" Message-ID: <3da52a89-d57c-492e-b987-0467f062a1bd@enterprisedb.com> Date: Fri, 27 Dec 2024 11:16:46 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Convert macros to static inline functions From: Peter Eisentraut To: pgsql-hackers References: <5b558da8-99fb-0a99-83dd-f72f05388517@enterprisedb.com> Content-Language: en-US In-Reply-To: <5b558da8-99fb-0a99-83dd-f72f05388517@enterprisedb.com> List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------iWnndLhMOw8StcdKXgjj9suj Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 16.05.22 10:27, Peter Eisentraut wrote: > Inspired by [0], I looked to convert more macros to inline functions. This is an older thread where I left something unfinished: > Note 2: Many macros in htup_details.h operate both on HeapTupleHeader > and on MinimalTuple, so converting them to a function doesn't work in a > straightforward way.  I have some in-progress work in that area, but I > have not included any of that here. Here is the patch set for this. There are actually only two macros that operate on both HeapTupleHeader and MinimalTuple, so it wasn't as much as I had written above. I just left those as macros. I converted the rest to inline functions in a straightforward way as before. A small amount of reordering was necessary. But just for language-nerd fun, I'm including here an additional patch showing how the remaining ones could be done with C11 generic selection. I'm not planning to commit that one at this time. --------------iWnndLhMOw8StcdKXgjj9suj Content-Type: text/plain; charset=UTF-8; name="0001-Add-some-const-decorations-htup.h.patch" Content-Disposition: attachment; filename="0001-Add-some-const-decorations-htup.h.patch" Content-Transfer-Encoding: base64 RnJvbSA0MjIxODExNjNiZmUxYTI5MmVlNTE5NDFhMDA3ZDU0YmMxMjdjY2VjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyNyBEZWMgMjAyNCAxMTowNzozNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMS8zXSBBZGQgc29tZSBjb25zdCBkZWNvcmF0aW9ucyAoaHR1cC5oKQoKLS0t CiBzcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFwYW0uYyAgfCA2ICsrKy0tLQogc3JjL2Jh Y2tlbmQvdXRpbHMvdGltZS9jb21ib2NpZC5jIHwgNiArKystLS0KIHNyYy9pbmNsdWRlL2Fj Y2Vzcy9odHVwLmggICAgICAgICB8IDggKysrKy0tLS0KIDMgZmlsZXMgY2hhbmdlZCwgMTAg aW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvYWNjZXNzL2hlYXAvaGVhcGFtLmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvaGVhcC9oZWFw YW0uYwppbmRleCAzMjllNzI3ZjgwZC4uNzUxNzFlOGYyYzAgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy9oZWFwL2hlYXBhbS5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy9o ZWFwL2hlYXBhbS5jCkBAIC03NDE5LDEwICs3NDE5LDEwIEBAIE11bHRpWGFjdElkR2V0VXBk YXRlWGlkKFRyYW5zYWN0aW9uSWQgeG1heCwgdWludDE2IHRfaW5mb21hc2spCiAgKiBjaGVj a2luZyB0aGUgaGludCBiaXRzLgogICovCiBUcmFuc2FjdGlvbklkCi1IZWFwVHVwbGVHZXRV cGRhdGVYaWQoSGVhcFR1cGxlSGVhZGVyIHR1cGxlKQorSGVhcFR1cGxlR2V0VXBkYXRlWGlk KGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKIHsKLQlyZXR1cm4gTXVsdGlYYWN0 SWRHZXRVcGRhdGVYaWQoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heCh0dXBsZSksCi0JCQkJ CQkJCSAgIHR1cGxlLT50X2luZm9tYXNrKTsKKwlyZXR1cm4gTXVsdGlYYWN0SWRHZXRVcGRh dGVYaWQoSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heCh0dXApLAorCQkJCQkJCQkgICB0dXAt PnRfaW5mb21hc2spOwogfQogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMv dGltZS9jb21ib2NpZC5jIGIvc3JjL2JhY2tlbmQvdXRpbHMvdGltZS9jb21ib2NpZC5jCmlu ZGV4IGY4NTUxMGI3NGZmLi4xZWNkYzkzYjdlMiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQv dXRpbHMvdGltZS9jb21ib2NpZC5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL3RpbWUvY29t Ym9jaWQuYwpAQCAtMTAxLDcgKzEwMSw3IEBAIHN0YXRpYyBDb21tYW5kSWQgR2V0UmVhbENt YXgoQ29tbWFuZElkIGNvbWJvY2lkKTsKICAqLwogCiBDb21tYW5kSWQKLUhlYXBUdXBsZUhl YWRlckdldENtaW4oSGVhcFR1cGxlSGVhZGVyIHR1cCkKK0hlYXBUdXBsZUhlYWRlckdldENt aW4oY29uc3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQogewogCUNvbW1hbmRJZAljaWQg PSBIZWFwVHVwbGVIZWFkZXJHZXRSYXdDb21tYW5kSWQodHVwKTsKIApAQCAtMTE1LDcgKzEx NSw3IEBAIEhlYXBUdXBsZUhlYWRlckdldENtaW4oSGVhcFR1cGxlSGVhZGVyIHR1cCkKIH0K IAogQ29tbWFuZElkCi1IZWFwVHVwbGVIZWFkZXJHZXRDbWF4KEhlYXBUdXBsZUhlYWRlciB0 dXApCitIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEg KnR1cCkKIHsKIAlDb21tYW5kSWQJY2lkID0gSGVhcFR1cGxlSGVhZGVyR2V0UmF3Q29tbWFu ZElkKHR1cCk7CiAKQEAgLTE1MCw3ICsxNTAsNyBAQCBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4 KEhlYXBUdXBsZUhlYWRlciB0dXApCiAgKiBjaGFuZ2VzIHRoZSB0dXBsZSBpbiBzaGFyZWQg YnVmZmVycy4KICAqLwogdm9pZAotSGVhcFR1cGxlSGVhZGVyQWRqdXN0Q21heChIZWFwVHVw bGVIZWFkZXIgdHVwLAorSGVhcFR1cGxlSGVhZGVyQWRqdXN0Q21heChjb25zdCBIZWFwVHVw bGVIZWFkZXJEYXRhICp0dXAsCiAJCQkJCQkgIENvbW1hbmRJZCAqY21heCwKIAkJCQkJCSAg Ym9vbCAqaXNjb21ibykKIHsKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vzcy9odHVw LmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaHR1cC5oCmluZGV4IDExNmNiMWJiMjczLi5hNWYx ZWYyNDQxZCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXAuaAorKysgYi9z cmMvaW5jbHVkZS9hY2Nlc3MvaHR1cC5oCkBAIC03OCwxMiArNzgsMTIgQEAgdHlwZWRlZiBI ZWFwVHVwbGVEYXRhICpIZWFwVHVwbGU7CiAjZGVmaW5lIEhlYXBUdXBsZUlzVmFsaWQodHVw bGUpIFBvaW50ZXJJc1ZhbGlkKHR1cGxlKQogCiAvKiBIZWFwVHVwbGVIZWFkZXIgZnVuY3Rp b25zIGltcGxlbWVudGVkIGluIHV0aWxzL3RpbWUvY29tYm9jaWQuYyAqLwotZXh0ZXJuIENv bW1hbmRJZCBIZWFwVHVwbGVIZWFkZXJHZXRDbWluKEhlYXBUdXBsZUhlYWRlciB0dXApOwot ZXh0ZXJuIENvbW1hbmRJZCBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4KEhlYXBUdXBsZUhlYWRl ciB0dXApOwotZXh0ZXJuIHZvaWQgSGVhcFR1cGxlSGVhZGVyQWRqdXN0Q21heChIZWFwVHVw bGVIZWFkZXIgdHVwLAorZXh0ZXJuIENvbW1hbmRJZCBIZWFwVHVwbGVIZWFkZXJHZXRDbWlu KGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCk7CitleHRlcm4gQ29tbWFuZElkIEhl YXBUdXBsZUhlYWRlckdldENtYXgoY29uc3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKTsK K2V4dGVybiB2b2lkIEhlYXBUdXBsZUhlYWRlckFkanVzdENtYXgoY29uc3QgSGVhcFR1cGxl SGVhZGVyRGF0YSAqdHVwLAogCQkJCQkJCQkJICBDb21tYW5kSWQgKmNtYXgsIGJvb2wgKmlz Y29tYm8pOwogCiAvKiBQcm90b3R5cGUgZm9yIEhlYXBUdXBsZUhlYWRlciBhY2Nlc3NvcnMg aW4gaGVhcGFtLmMgKi8KLWV4dGVybiBUcmFuc2FjdGlvbklkIEhlYXBUdXBsZUdldFVwZGF0 ZVhpZChIZWFwVHVwbGVIZWFkZXIgdHVwbGUpOworZXh0ZXJuIFRyYW5zYWN0aW9uSWQgSGVh cFR1cGxlR2V0VXBkYXRlWGlkKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCk7CiAK ICNlbmRpZgkJCQkJCQkvKiBIVFVQX0ggKi8KCmJhc2UtY29tbWl0OiBkODVjZTAxMmY5OWY2 MzI0OWJiNDVhNzhmY2VjYjdhMjM4MzkyMGIxCi0tIAoyLjQ3LjEKCg== --------------iWnndLhMOw8StcdKXgjj9suj Content-Type: text/plain; charset=UTF-8; name="0002-Convert-macros-to-static-inline-functions-htup_detai.patch" Content-Disposition: attachment; filename*0="0002-Convert-macros-to-static-inline-functions-htup_detai.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA4OTMwOGUwNDQ2MjU5YTFhZTYxOWUzOTYwMzMyNGQyYzJiOGVkNjZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyNyBEZWMgMjAyNCAxMTowNzozNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMi8zXSBDb252ZXJ0IG1hY3JvcyB0byBzdGF0aWMgaW5saW5lIGZ1bmN0aW9u cwogKGh0dXBfZGV0YWlscy5oLCBpdHVwLmgpCgotLS0KIGNvbnRyaWIvcGFnZWluc3BlY3Qv aGVhcGZ1bmNzLmMgICB8ICAxNSArLQogc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWls cy5oIHwgNTQzICsrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUv YWNjZXNzL2l0dXAuaCAgICAgICAgIHwgIDIwICstCiAzIGZpbGVzIGNoYW5nZWQsIDM1MiBp bnNlcnRpb25zKCspLCAyMjYgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9w YWdlaW5zcGVjdC9oZWFwZnVuY3MuYyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvaGVhcGZ1bmNz LmMKaW5kZXggNDFmZjU5NzE5OWMuLjQ5NjFhM2M4NjZjIDEwMDY0NAotLS0gYS9jb250cmli L3BhZ2VpbnNwZWN0L2hlYXBmdW5jcy5jCisrKyBiL2NvbnRyaWIvcGFnZWluc3BlY3QvaGVh cGZ1bmNzLmMKQEAgLTQyLDEzICs0MiwxNCBAQAogICogd2FzIHVzZWQgdG8gdXBncmFkZSBm cm9tIGFuIG9sZGVyIHZlcnNpb24sIHR1cGxlcyBtaWdodCBzdGlsbCBoYXZlIGFuCiAgKiBv aWQuIFNlZW1zIHdvcnRod2hpbGUgdG8gZGlzcGxheSB0aGF0LgogICovCi0jZGVmaW5lIEhl YXBUdXBsZUhlYWRlckdldE9pZE9sZCh0dXApIFwKLSggXAotCSgodHVwKS0+dF9pbmZvbWFz ayAmIEhFQVBfSEFTT0lEX09MRCkgPyBcCi0JICAgKigoT2lkICopICgoY2hhciAqKSh0dXAp ICsgKHR1cCktPnRfaG9mZiAtIHNpemVvZihPaWQpKSkgXAotCTogXAotCQlJbnZhbGlkT2lk IFwKLSkKK3N0YXRpYyBpbmxpbmUgT2lkCitIZWFwVHVwbGVIZWFkZXJHZXRPaWRPbGQoY29u c3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCWlmICh0dXAtPnRfaW5mb21hc2sg JiBIRUFQX0hBU09JRF9PTEQpCisJCXJldHVybiAqKChPaWQgKikgKChjaGFyICopICh0dXAp ICsgKHR1cCktPnRfaG9mZiAtIHNpemVvZihPaWQpKSk7CisJZWxzZQorCQlyZXR1cm4gSW52 YWxpZE9pZDsKK30KIAogCiAvKgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2h0 dXBfZGV0YWlscy5oIGIvc3JjL2luY2x1ZGUvYWNjZXNzL2h0dXBfZGV0YWlscy5oCmluZGV4 IDBkMWFkZmY1NDBmLi5iYWI0ODBmZTJmMCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYWNj ZXNzL2h0dXBfZGV0YWlscy5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFp bHMuaApAQCAtMjI1LDEyICsyMjUsMTMgQEAgc3RydWN0IEhlYXBUdXBsZUhlYWRlckRhdGEK ICAqCiAgKiBTZWUgYWxzbyBIZWFwVHVwbGVIZWFkZXJJc09ubHlMb2NrZWQsIHdoaWNoIGFs c28gY2hlY2tzIGZvciBhIHBvc3NpYmxlCiAgKiBhYm9ydGVkIHVwZGF0ZXIgdHJhbnNhY3Rp b24uCi0gKgotICogQmV3YXJlIG9mIG11bHRpcGxlIGV2YWx1YXRpb25zIG9mIHRoZSBhcmd1 bWVudC4KICAqLwotI2RlZmluZSBIRUFQX1hNQVhfSVNfTE9DS0VEX09OTFkoaW5mb21hc2sp IFwKLQkoKChpbmZvbWFzaykgJiBIRUFQX1hNQVhfTE9DS19PTkxZKSB8fCBcCi0JICgoKGlu Zm9tYXNrKSAmIChIRUFQX1hNQVhfSVNfTVVMVEkgfCBIRUFQX0xPQ0tfTUFTSykpID09IEhF QVBfWE1BWF9FWENMX0xPQ0spKQorc3RhdGljIGlubGluZSBib29sCitIRUFQX1hNQVhfSVNf TE9DS0VEX09OTFkodWludDE2IGluZm9tYXNrKQoreworCXJldHVybiAoaW5mb21hc2sgJiBI RUFQX1hNQVhfTE9DS19PTkxZKSB8fAorCQkoaW5mb21hc2sgJiAoSEVBUF9YTUFYX0lTX01V TFRJIHwgSEVBUF9MT0NLX01BU0spKSA9PSBIRUFQX1hNQVhfRVhDTF9MT0NLOworfQogCiAv KgogICogQSB0dXBsZSB0aGF0IGhhcyBIRUFQX1hNQVhfSVNfTVVMVEkgYW5kIEhFQVBfWE1B WF9MT0NLX09OTFkgYnV0IG5laXRoZXIgb2YKQEAgLTI1MCwyMiArMjUxLDM1IEBAIHN0cnVj dCBIZWFwVHVwbGVIZWFkZXJEYXRhCiAgKiBib2d1cywgcmVnYXJkbGVzcyBvZiB3aGVyZSB0 aGV5IHN0YW5kIHdpdGggcmVzcGVjdCB0byB0aGUgY3VycmVudCB2YWxpZAogICogbXVsdGl4 YWN0IHJhbmdlLgogICovCi0jZGVmaW5lIEhFQVBfTE9DS0VEX1VQR1JBREVEKGluZm9tYXNr KSBcCi0oIFwKLQkgKChpbmZvbWFzaykgJiBIRUFQX1hNQVhfSVNfTVVMVEkpICE9IDAgJiYg XAotCSAoKGluZm9tYXNrKSAmIEhFQVBfWE1BWF9MT0NLX09OTFkpICE9IDAgJiYgXAotCSAo KChpbmZvbWFzaykgJiAoSEVBUF9YTUFYX0VYQ0xfTE9DSyB8IEhFQVBfWE1BWF9LRVlTSFJf TE9DSykpID09IDApIFwKLSkKK3N0YXRpYyBpbmxpbmUgYm9vbAorSEVBUF9MT0NLRURfVVBH UkFERUQodWludDE2IGluZm9tYXNrKQoreworCXJldHVybgorCQkoaW5mb21hc2sgJiBIRUFQ X1hNQVhfSVNfTVVMVEkpICE9IDAgJiYKKwkJKGluZm9tYXNrICYgSEVBUF9YTUFYX0xPQ0tf T05MWSkgIT0gMCAmJgorCQkoaW5mb21hc2sgJiAoSEVBUF9YTUFYX0VYQ0xfTE9DSyB8IEhF QVBfWE1BWF9LRVlTSFJfTE9DSykpID09IDA7Cit9CiAKIC8qCiAgKiBVc2UgdGhlc2UgdG8g dGVzdCB3aGV0aGVyIGEgcGFydGljdWxhciBsb2NrIGlzIGFwcGxpZWQgdG8gYSB0dXBsZQog ICovCi0jZGVmaW5lIEhFQVBfWE1BWF9JU19TSFJfTE9DS0VEKGluZm9tYXNrKSBcCi0JKCgo aW5mb21hc2spICYgSEVBUF9MT0NLX01BU0spID09IEhFQVBfWE1BWF9TSFJfTE9DSykKLSNk ZWZpbmUgSEVBUF9YTUFYX0lTX0VYQ0xfTE9DS0VEKGluZm9tYXNrKSBcCi0JKCgoaW5mb21h c2spICYgSEVBUF9MT0NLX01BU0spID09IEhFQVBfWE1BWF9FWENMX0xPQ0spCi0jZGVmaW5l IEhFQVBfWE1BWF9JU19LRVlTSFJfTE9DS0VEKGluZm9tYXNrKSBcCi0JKCgoaW5mb21hc2sp ICYgSEVBUF9MT0NLX01BU0spID09IEhFQVBfWE1BWF9LRVlTSFJfTE9DSykKK3N0YXRpYyBp bmxpbmUgYm9vbAorSEVBUF9YTUFYX0lTX1NIUl9MT0NLRUQoaW50MTYgaW5mb21hc2spCit7 CisJcmV0dXJuIChpbmZvbWFzayAmIEhFQVBfTE9DS19NQVNLKSA9PSBIRUFQX1hNQVhfU0hS X0xPQ0s7Cit9CisKK3N0YXRpYyBpbmxpbmUgYm9vbAorSEVBUF9YTUFYX0lTX0VYQ0xfTE9D S0VEKGludDE2IGluZm9tYXNrKQoreworCXJldHVybiAoaW5mb21hc2sgJiBIRUFQX0xPQ0tf TUFTSykgPT0gSEVBUF9YTUFYX0VYQ0xfTE9DSzsKK30KKworc3RhdGljIGlubGluZSBib29s CitIRUFQX1hNQVhfSVNfS0VZU0hSX0xPQ0tFRChpbnQxNiBpbmZvbWFzaykKK3sKKwlyZXR1 cm4gKGluZm9tYXNrICYgSEVBUF9MT0NLX01BU0spID09IEhFQVBfWE1BWF9LRVlTSFJfTE9D SzsKK30KIAogLyogdHVybiB0aGVzZSBhbGwgb2ZmIHdoZW4gWG1heCBpcyB0byBjaGFuZ2Ug Ki8KICNkZWZpbmUgSEVBUF9YTUFYX0JJVFMgKEhFQVBfWE1BWF9DT01NSVRURUQgfCBIRUFQ X1hNQVhfSU5WQUxJRCB8IFwKQEAgLTI5MiwxMiArMzA2LDExIEBAIHN0cnVjdCBIZWFwVHVw bGVIZWFkZXJEYXRhCiAjZGVmaW5lIEhFQVBfVFVQTEVfSEFTX01BVENICUhFQVBfT05MWV9U VVBMRSAvKiB0dXBsZSBoYXMgYSBqb2luIG1hdGNoICovCiAKIC8qCi0gKiBIZWFwVHVwbGVI ZWFkZXIgYWNjZXNzb3IgbWFjcm9zCi0gKgotICogTm90ZTogYmV3YXJlIG9mIG11bHRpcGxl IGV2YWx1YXRpb25zIG9mICJ0dXAiIGFyZ3VtZW50LiAgQnV0IHRoZSBTZXQKLSAqIG1hY3Jv cyBldmFsdWF0ZSB0aGVpciBvdGhlciBhcmd1bWVudCBvbmx5IG9uY2UuCisgKiBIZWFwVHVw bGVIZWFkZXIgYWNjZXNzb3IgZnVuY3Rpb25zCiAgKi8KIAorc3RhdGljIGJvb2wgSGVhcFR1 cGxlSGVhZGVyWG1pbkZyb3plbihjb25zdCBIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXApOwor CiAvKgogICogSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1pbiByZXR1cm5zIHRoZSAicmF3IiB4 bWluIGZpZWxkLCB3aGljaCBpcyB0aGUgeGlkCiAgKiBvcmlnaW5hbGx5IHVzZWQgdG8gaW5z ZXJ0IHRoZSB0dXBsZS4gIEhvd2V2ZXIsIHRoZSB0dXBsZSBtaWdodCBhY3R1YWxseQpAQCAt MzA2LDU2ICszMTksNzggQEAgc3RydWN0IEhlYXBUdXBsZUhlYWRlckRhdGEKICAqIHRoZSB4 bWluIHRvIEZyb3plblRyYW5zYWN0aW9uSWQsIGFuZCB0aGF0IHZhbHVlIG1heSBzdGlsbCBi ZSBlbmNvdW50ZXJlZAogICogb24gZGlzay4KICAqLwotI2RlZmluZSBIZWFwVHVwbGVIZWFk ZXJHZXRSYXdYbWluKHR1cCkgXAotKCBcCi0JKHR1cCktPnRfY2hvaWNlLnRfaGVhcC50X3ht aW4gXAotKQorc3RhdGljIGlubGluZSBUcmFuc2FjdGlvbklkCitIZWFwVHVwbGVIZWFkZXJH ZXRSYXdYbWluKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKK3sKKwlyZXR1cm4g dHVwLT50X2Nob2ljZS50X2hlYXAudF94bWluOworfQogCi0jZGVmaW5lIEhlYXBUdXBsZUhl YWRlckdldFhtaW4odHVwKSBcCi0oIFwKLQlIZWFwVHVwbGVIZWFkZXJYbWluRnJvemVuKHR1 cCkgPyBcCi0JCUZyb3plblRyYW5zYWN0aW9uSWQgOiBIZWFwVHVwbGVIZWFkZXJHZXRSYXdY bWluKHR1cCkgXAotKQorc3RhdGljIGlubGluZSBUcmFuc2FjdGlvbklkCitIZWFwVHVwbGVI ZWFkZXJHZXRYbWluKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKK3sKKwlyZXR1 cm4gSGVhcFR1cGxlSGVhZGVyWG1pbkZyb3plbih0dXApID8KKwkJRnJvemVuVHJhbnNhY3Rp b25JZCA6IEhlYXBUdXBsZUhlYWRlckdldFJhd1htaW4odHVwKTsKK30KIAotI2RlZmluZSBI ZWFwVHVwbGVIZWFkZXJTZXRYbWluKHR1cCwgeGlkKSBcCi0oIFwKLQkodHVwKS0+dF9jaG9p Y2UudF9oZWFwLnRfeG1pbiA9ICh4aWQpIFwKLSkKK3N0YXRpYyBpbmxpbmUgdm9pZAorSGVh cFR1cGxlSGVhZGVyU2V0WG1pbihIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXAsIFRyYW5zYWN0 aW9uSWQgeGlkKQoreworCXR1cC0+dF9jaG9pY2UudF9oZWFwLnRfeG1pbiA9IHhpZDsKK30K IAotI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJYbWluQ29tbWl0dGVkKHR1cCkgXAotKCBcCi0J KCh0dXApLT50X2luZm9tYXNrICYgSEVBUF9YTUlOX0NPTU1JVFRFRCkgIT0gMCBcCi0pCitz dGF0aWMgaW5saW5lIGJvb2wKK0hlYXBUdXBsZUhlYWRlclhtaW5Db21taXR0ZWQoY29uc3Qg SGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCXJldHVybiAodHVwLT50X2luZm9tYXNr ICYgSEVBUF9YTUlOX0NPTU1JVFRFRCkgIT0gMDsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVI ZWFkZXJYbWluSW52YWxpZCh0dXApIFwKLSggXAotCSgodHVwKS0+dF9pbmZvbWFzayAmIChI RUFQX1hNSU5fQ09NTUlUVEVEfEhFQVBfWE1JTl9JTlZBTElEKSkgPT0gXAotCQlIRUFQX1hN SU5fSU5WQUxJRCBcCi0pCitzdGF0aWMgaW5saW5lIGJvb2wKK0hlYXBUdXBsZUhlYWRlclht aW5JbnZhbGlkKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkgXAoreworCXJldHVy biAodHVwLT50X2luZm9tYXNrICYgKEhFQVBfWE1JTl9DT01NSVRURUQgfCBIRUFQX1hNSU5f SU5WQUxJRCkpID09CisJCUhFQVBfWE1JTl9JTlZBTElEOworfQogCi0jZGVmaW5lIEhlYXBU dXBsZUhlYWRlclhtaW5Gcm96ZW4odHVwKSBcCi0oIFwKLQkoKHR1cCktPnRfaW5mb21hc2sg JiAoSEVBUF9YTUlOX0ZST1pFTikpID09IEhFQVBfWE1JTl9GUk9aRU4gXAotKQorc3RhdGlj IGlubGluZSBib29sCitIZWFwVHVwbGVIZWFkZXJYbWluRnJvemVuKGNvbnN0IEhlYXBUdXBs ZUhlYWRlckRhdGEgKnR1cCkKK3sKKwlyZXR1cm4gKHR1cC0+dF9pbmZvbWFzayAmIEhFQVBf WE1JTl9GUk9aRU4pID09IEhFQVBfWE1JTl9GUk9aRU47Cit9CiAKLSNkZWZpbmUgSGVhcFR1 cGxlSGVhZGVyU2V0WG1pbkNvbW1pdHRlZCh0dXApIFwKLSggXAotCUFzc2VydE1hY3JvKCFI ZWFwVHVwbGVIZWFkZXJYbWluSW52YWxpZCh0dXApKSwgXAotCSgodHVwKS0+dF9pbmZvbWFz ayB8PSBIRUFQX1hNSU5fQ09NTUlUVEVEKSBcCi0pCitzdGF0aWMgaW5saW5lIHZvaWQKK0hl YXBUdXBsZUhlYWRlclNldFhtaW5Db21taXR0ZWQoSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVw KQoreworCUFzc2VydCghSGVhcFR1cGxlSGVhZGVyWG1pbkludmFsaWQodHVwKSk7CisJdHVw LT50X2luZm9tYXNrIHw9IEhFQVBfWE1JTl9DT01NSVRURUQ7Cit9CiAKLSNkZWZpbmUgSGVh cFR1cGxlSGVhZGVyU2V0WG1pbkludmFsaWQodHVwKSBcCi0oIFwKLQlBc3NlcnRNYWNybygh SGVhcFR1cGxlSGVhZGVyWG1pbkNvbW1pdHRlZCh0dXApKSwgXAotCSgodHVwKS0+dF9pbmZv bWFzayB8PSBIRUFQX1hNSU5fSU5WQUxJRCkgXAotKQorc3RhdGljIGlubGluZSB2b2lkCitI ZWFwVHVwbGVIZWFkZXJTZXRYbWluSW52YWxpZChIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXAp Cit7CisJQXNzZXJ0KCFIZWFwVHVwbGVIZWFkZXJYbWluQ29tbWl0dGVkKHR1cCkpOworCXR1 cC0+dF9pbmZvbWFzayB8PSBIRUFQX1hNSU5fSU5WQUxJRDsKK30KIAotI2RlZmluZSBIZWFw VHVwbGVIZWFkZXJTZXRYbWluRnJvemVuKHR1cCkgXAotKCBcCi0JQXNzZXJ0TWFjcm8oIUhl YXBUdXBsZUhlYWRlclhtaW5JbnZhbGlkKHR1cCkpLCBcCi0JKCh0dXApLT50X2luZm9tYXNr IHw9IEhFQVBfWE1JTl9GUk9aRU4pIFwKLSkKK3N0YXRpYyBpbmxpbmUgdm9pZAorSGVhcFR1 cGxlSGVhZGVyU2V0WG1pbkZyb3plbihIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXApCit7CisJ QXNzZXJ0KCFIZWFwVHVwbGVIZWFkZXJYbWluSW52YWxpZCh0dXApKTsKKwl0dXAtPnRfaW5m b21hc2sgfD0gSEVBUF9YTUlOX0ZST1pFTjsKK30KIAorc3RhdGljIGlubGluZSBUcmFuc2Fj dGlvbklkCitIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4KGNvbnN0IEhlYXBUdXBsZUhlYWRl ckRhdGEgKnR1cCkKK3sKKwlyZXR1cm4gdHVwLT50X2Nob2ljZS50X2hlYXAudF94bWF4Owor fQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0hlYXBUdXBsZUhlYWRlclNldFhtYXgoSGVhcFR1 cGxlSGVhZGVyRGF0YSAqdHVwLCBUcmFuc2FjdGlvbklkIHhpZCkKK3sKKwl0dXAtPnRfY2hv aWNlLnRfaGVhcC50X3htYXggPSB4aWQ7Cit9CisKKyNpZm5kZWYgRlJPTlRFTkQKIC8qCiAg KiBIZWFwVHVwbGVIZWFkZXJHZXRSYXdYbWF4IGdldHMgeW91IHRoZSByYXcgWG1heCBmaWVs ZC4gIFRvIGZpbmQgb3V0IHRoZSBYaWQKICAqIHRoYXQgdXBkYXRlZCBhIHR1cGxlLCB5b3Ug bWlnaHQgbmVlZCB0byByZXNvbHZlIHRoZSBNdWx0aVhhY3RJZCBpZiBjZXJ0YWluCkBAIC0z NjMsMjUgKzM5OCwxNyBAQCBzdHJ1Y3QgSGVhcFR1cGxlSGVhZGVyRGF0YQogICogdG8gcmVz b2x2ZSB0aGUgTXVsdGlYYWN0SWQgaWYgbmVjZXNzYXJ5LiAgVGhpcyBtaWdodCBpbnZvbHZl IG11bHRpeGFjdCBJL08sCiAgKiBzbyBpdCBzaG91bGQgb25seSBiZSB1c2VkIGlmIGFic29s dXRlbHkgbmVjZXNzYXJ5LgogICovCi0jZGVmaW5lIEhlYXBUdXBsZUhlYWRlckdldFVwZGF0 ZVhpZCh0dXApIFwKLSggXAotCSghKCh0dXApLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lO VkFMSUQpICYmIFwKLQkgKCh0dXApLT50X2luZm9tYXNrICYgSEVBUF9YTUFYX0lTX01VTFRJ KSAmJiBcCi0JICEoKHR1cCktPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfTE9DS19PTkxZKSkg PyBcCi0JCUhlYXBUdXBsZUdldFVwZGF0ZVhpZCh0dXApIFwKLQk6IFwKLQkJSGVhcFR1cGxl SGVhZGVyR2V0UmF3WG1heCh0dXApIFwKLSkKLQotI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJH ZXRSYXdYbWF4KHR1cCkgXAotKCBcCi0JKHR1cCktPnRfY2hvaWNlLnRfaGVhcC50X3htYXgg XAotKQotCi0jZGVmaW5lIEhlYXBUdXBsZUhlYWRlclNldFhtYXgodHVwLCB4aWQpIFwKLSgg XAotCSh0dXApLT50X2Nob2ljZS50X2hlYXAudF94bWF4ID0gKHhpZCkgXAotKQorc3RhdGlj IGlubGluZSBUcmFuc2FjdGlvbklkCitIZWFwVHVwbGVIZWFkZXJHZXRVcGRhdGVYaWQoY29u c3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCWlmICghKCh0dXApLT50X2luZm9t YXNrICYgSEVBUF9YTUFYX0lOVkFMSUQpICYmCisJCSgodHVwKS0+dF9pbmZvbWFzayAmIEhF QVBfWE1BWF9JU19NVUxUSSkgJiYKKwkJISgodHVwKS0+dF9pbmZvbWFzayAmIEhFQVBfWE1B WF9MT0NLX09OTFkpKQorCQlyZXR1cm4gSGVhcFR1cGxlR2V0VXBkYXRlWGlkKHR1cCk7CisJ ZWxzZQorCQlyZXR1cm4gSGVhcFR1cGxlSGVhZGVyR2V0UmF3WG1heCh0dXApOworfQorI2Vu ZGlmCQkJCQkJCS8qIEZST05URU5EICovCiAKIC8qCiAgKiBIZWFwVHVwbGVIZWFkZXJHZXRS YXdDb21tYW5kSWQgd2lsbCBnaXZlIHlvdSB3aGF0J3MgaW4gdGhlIGhlYWRlciB3aGV0aGVy CkBAIC0zODksMTQ3ICs0MTYsMTY4IEBAIHN0cnVjdCBIZWFwVHVwbGVIZWFkZXJEYXRhCiAg KiBIZWFwVHVwbGVIZWFkZXJHZXRDbWF4IGluc3RlYWQsIGJ1dCBub3RlIHRoYXQgdGhvc2Ug QXNzZXJ0IHRoYXQgeW91IGNhbgogICogZ2V0IGEgbGVnaXRpbWF0ZSByZXN1bHQsIGllIHlv dSBhcmUgaW4gdGhlIG9yaWdpbmF0aW5nIHRyYW5zYWN0aW9uIQogICovCi0jZGVmaW5lIEhl YXBUdXBsZUhlYWRlckdldFJhd0NvbW1hbmRJZCh0dXApIFwKLSggXAotCSh0dXApLT50X2No b2ljZS50X2hlYXAudF9maWVsZDMudF9jaWQgXAotKQorc3RhdGljIGlubGluZSBDb21tYW5k SWQKK0hlYXBUdXBsZUhlYWRlckdldFJhd0NvbW1hbmRJZChjb25zdCBIZWFwVHVwbGVIZWFk ZXJEYXRhICp0dXApCit7CisJcmV0dXJuIHR1cC0+dF9jaG9pY2UudF9oZWFwLnRfZmllbGQz LnRfY2lkOworfQogCiAvKiBTZXRDbWluIGlzIHJlYXNvbmFibHkgc2ltcGxlIHNpbmNlIHdl IG5ldmVyIG5lZWQgYSBjb21ibyBDSUQgKi8KLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVyU2V0 Q21pbih0dXAsIGNpZCkgXAotZG8geyBcCi0JQXNzZXJ0KCEoKHR1cCktPnRfaW5mb21hc2sg JiBIRUFQX01PVkVEKSk7IFwKLQkodHVwKS0+dF9jaG9pY2UudF9oZWFwLnRfZmllbGQzLnRf Y2lkID0gKGNpZCk7IFwKLQkodHVwKS0+dF9pbmZvbWFzayAmPSB+SEVBUF9DT01CT0NJRDsg XAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorSGVhcFR1cGxlSGVhZGVyU2V0 Q21pbihIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXAsIENvbW1hbmRJZCBjaWQpCit7CisJQXNz ZXJ0KCEodHVwLT50X2luZm9tYXNrICYgSEVBUF9NT1ZFRCkpOworCXR1cC0+dF9jaG9pY2Uu dF9oZWFwLnRfZmllbGQzLnRfY2lkID0gY2lkOworCXR1cC0+dF9pbmZvbWFzayAmPSB+SEVB UF9DT01CT0NJRDsKK30KIAogLyogU2V0Q21heCBtdXN0IGJlIHVzZWQgYWZ0ZXIgSGVhcFR1 cGxlSGVhZGVyQWRqdXN0Q21heDsgc2VlIGNvbWJvY2lkLmMgKi8KLSNkZWZpbmUgSGVhcFR1 cGxlSGVhZGVyU2V0Q21heCh0dXAsIGNpZCwgaXNjb21ibykgXAotZG8geyBcCi0JQXNzZXJ0 KCEoKHR1cCktPnRfaW5mb21hc2sgJiBIRUFQX01PVkVEKSk7IFwKLQkodHVwKS0+dF9jaG9p Y2UudF9oZWFwLnRfZmllbGQzLnRfY2lkID0gKGNpZCk7IFwKLQlpZiAoaXNjb21ibykgXAot CQkodHVwKS0+dF9pbmZvbWFzayB8PSBIRUFQX0NPTUJPQ0lEOyBcCi0JZWxzZSBcCi0JCSh0 dXApLT50X2luZm9tYXNrICY9IH5IRUFQX0NPTUJPQ0lEOyBcCi19IHdoaWxlICgwKQotCi0j ZGVmaW5lIEhlYXBUdXBsZUhlYWRlckdldFh2YWModHVwKSBcCi0oIFwKLQkoKHR1cCktPnRf aW5mb21hc2sgJiBIRUFQX01PVkVEKSA/IFwKLQkJKHR1cCktPnRfY2hvaWNlLnRfaGVhcC50 X2ZpZWxkMy50X3h2YWMgXAotCTogXAotCQlJbnZhbGlkVHJhbnNhY3Rpb25JZCBcCi0pCitz dGF0aWMgaW5saW5lIHZvaWQKK0hlYXBUdXBsZUhlYWRlclNldENtYXgoSGVhcFR1cGxlSGVh ZGVyRGF0YSAqdHVwLCBDb21tYW5kSWQgY2lkLCBib29sIGlzY29tYm8pCit7CisJQXNzZXJ0 KCEoKHR1cCktPnRfaW5mb21hc2sgJiBIRUFQX01PVkVEKSk7CisJdHVwLT50X2Nob2ljZS50 X2hlYXAudF9maWVsZDMudF9jaWQgPSBjaWQ7CisJaWYgKGlzY29tYm8pCisJCXR1cC0+dF9p bmZvbWFzayB8PSBIRUFQX0NPTUJPQ0lEOworCWVsc2UKKwkJdHVwLT50X2luZm9tYXNrICY9 IH5IRUFQX0NPTUJPQ0lEOworfQorCitzdGF0aWMgaW5saW5lIFRyYW5zYWN0aW9uSWQKK0hl YXBUdXBsZUhlYWRlckdldFh2YWMoY29uc3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQor eworCWlmICh0dXAtPnRfaW5mb21hc2sgJiBIRUFQX01PVkVEKQorCQlyZXR1cm4gdHVwLT50 X2Nob2ljZS50X2hlYXAudF9maWVsZDMudF94dmFjOworCWVsc2UKKwkJcmV0dXJuIEludmFs aWRUcmFuc2FjdGlvbklkOworfQogCi0jZGVmaW5lIEhlYXBUdXBsZUhlYWRlclNldFh2YWMo dHVwLCB4aWQpIFwKLWRvIHsgXAotCUFzc2VydCgodHVwKS0+dF9pbmZvbWFzayAmIEhFQVBf TU9WRUQpOyBcCi0JKHR1cCktPnRfY2hvaWNlLnRfaGVhcC50X2ZpZWxkMy50X3h2YWMgPSAo eGlkKTsgXAotfSB3aGlsZSAoMCkKK3N0YXRpYyBpbmxpbmUgdm9pZAorSGVhcFR1cGxlSGVh ZGVyU2V0WHZhYyhIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXAsIFRyYW5zYWN0aW9uSWQgeGlk KQoreworCUFzc2VydCh0dXAtPnRfaW5mb21hc2sgJiBIRUFQX01PVkVEKTsKKwl0dXAtPnRf Y2hvaWNlLnRfaGVhcC50X2ZpZWxkMy50X3h2YWMgPSB4aWQ7Cit9CiAKIFN0YXRpY0Fzc2Vy dERlY2woTWF4T2Zmc2V0TnVtYmVyIDwgU3BlY1Rva2VuT2Zmc2V0TnVtYmVyLAogCQkJCSAi aW52YWxpZCBzcGVjdWxhdGl2ZSB0b2tlbiBjb25zdGFudCIpOwogCi0jZGVmaW5lIEhlYXBU dXBsZUhlYWRlcklzU3BlY3VsYXRpdmUodHVwKSBcCi0oIFwKLQkoSXRlbVBvaW50ZXJHZXRP ZmZzZXROdW1iZXJOb0NoZWNrKCYodHVwKS0+dF9jdGlkKSA9PSBTcGVjVG9rZW5PZmZzZXRO dW1iZXIpIFwKLSkKK3N0YXRpYyBpbmxpbmUgYm9vbAorSGVhcFR1cGxlSGVhZGVySXNTcGVj dWxhdGl2ZShjb25zdCBIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXApCit7CisJcmV0dXJuIEl0 ZW1Qb2ludGVyR2V0T2Zmc2V0TnVtYmVyTm9DaGVjaygmdHVwLT50X2N0aWQpID09IFNwZWNU b2tlbk9mZnNldE51bWJlcjsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJHZXRTcGVj dWxhdGl2ZVRva2VuKHR1cCkgXAotKCBcCi0JQXNzZXJ0TWFjcm8oSGVhcFR1cGxlSGVhZGVy SXNTcGVjdWxhdGl2ZSh0dXApKSwgXAotCUl0ZW1Qb2ludGVyR2V0QmxvY2tOdW1iZXIoJih0 dXApLT50X2N0aWQpIFwKLSkKK3N0YXRpYyBpbmxpbmUgQmxvY2tOdW1iZXIKK0hlYXBUdXBs ZUhlYWRlckdldFNwZWN1bGF0aXZlVG9rZW4oY29uc3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAq dHVwKQoreworCUFzc2VydChIZWFwVHVwbGVIZWFkZXJJc1NwZWN1bGF0aXZlKHR1cCkpOwor CXJldHVybiBJdGVtUG9pbnRlckdldEJsb2NrTnVtYmVyKCZ0dXAtPnRfY3RpZCk7Cit9CiAK LSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVyU2V0U3BlY3VsYXRpdmVUb2tlbih0dXAsIHRva2Vu KQlcCi0oIFwKLQlJdGVtUG9pbnRlclNldCgmKHR1cCktPnRfY3RpZCwgdG9rZW4sIFNwZWNU b2tlbk9mZnNldE51bWJlcikgXAotKQorc3RhdGljIGlubGluZSB2b2lkCitIZWFwVHVwbGVI ZWFkZXJTZXRTcGVjdWxhdGl2ZVRva2VuKEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCwgQmxv Y2tOdW1iZXIgdG9rZW4pCit7CisJSXRlbVBvaW50ZXJTZXQoJnR1cC0+dF9jdGlkLCB0b2tl biwgU3BlY1Rva2VuT2Zmc2V0TnVtYmVyKTsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVIZWFk ZXJJbmRpY2F0ZXNNb3ZlZFBhcnRpdGlvbnModHVwKSBcCi0JSXRlbVBvaW50ZXJJbmRpY2F0 ZXNNb3ZlZFBhcnRpdGlvbnMoJih0dXApLT50X2N0aWQpCitzdGF0aWMgaW5saW5lIGJvb2wK K0hlYXBUdXBsZUhlYWRlckluZGljYXRlc01vdmVkUGFydGl0aW9ucyhjb25zdCBIZWFwVHVw bGVIZWFkZXJEYXRhICp0dXApCit7CisJcmV0dXJuIEl0ZW1Qb2ludGVySW5kaWNhdGVzTW92 ZWRQYXJ0aXRpb25zKCZ0dXAtPnRfY3RpZCk7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGVh ZGVyU2V0TW92ZWRQYXJ0aXRpb25zKHR1cCkgXAotCUl0ZW1Qb2ludGVyU2V0TW92ZWRQYXJ0 aXRpb25zKCYodHVwKS0+dF9jdGlkKQorc3RhdGljIGlubGluZSB2b2lkCitIZWFwVHVwbGVI ZWFkZXJTZXRNb3ZlZFBhcnRpdGlvbnMoSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQorewor CUl0ZW1Qb2ludGVyU2V0TW92ZWRQYXJ0aXRpb25zKCZ0dXAtPnRfY3RpZCk7Cit9CiAKLSNk ZWZpbmUgSGVhcFR1cGxlSGVhZGVyR2V0RGF0dW1MZW5ndGgodHVwKSBcCi0JVkFSU0laRSh0 dXApCitzdGF0aWMgaW5saW5lIHVpbnQzMgorSGVhcFR1cGxlSGVhZGVyR2V0RGF0dW1MZW5n dGgoY29uc3QgSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCXJldHVybiBWQVJTSVpF KHR1cCk7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVyU2V0RGF0dW1MZW5ndGgodHVw LCBsZW4pIFwKLQlTRVRfVkFSU0laRSh0dXAsIGxlbikKK3N0YXRpYyBpbmxpbmUgdm9pZAor SGVhcFR1cGxlSGVhZGVyU2V0RGF0dW1MZW5ndGgoSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVw LCB1aW50MzIgbGVuKQoreworCVNFVF9WQVJTSVpFKHR1cCwgbGVuKTsKK30KIAotI2RlZmlu ZSBIZWFwVHVwbGVIZWFkZXJHZXRUeXBlSWQodHVwKSBcCi0oIFwKLQkodHVwKS0+dF9jaG9p Y2UudF9kYXR1bS5kYXR1bV90eXBlaWQgXAotKQorc3RhdGljIGlubGluZSBPaWQKK0hlYXBU dXBsZUhlYWRlckdldFR5cGVJZChjb25zdCBIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXApCit7 CisJcmV0dXJuIHR1cC0+dF9jaG9pY2UudF9kYXR1bS5kYXR1bV90eXBlaWQ7Cit9CiAKLSNk ZWZpbmUgSGVhcFR1cGxlSGVhZGVyU2V0VHlwZUlkKHR1cCwgdHlwZWlkKSBcCi0oIFwKLQko dHVwKS0+dF9jaG9pY2UudF9kYXR1bS5kYXR1bV90eXBlaWQgPSAodHlwZWlkKSBcCi0pCitz dGF0aWMgaW5saW5lIHZvaWQKK0hlYXBUdXBsZUhlYWRlclNldFR5cGVJZChIZWFwVHVwbGVI ZWFkZXJEYXRhICp0dXAsIE9pZCB0eXBlaWQpCit7CisJdHVwLT50X2Nob2ljZS50X2RhdHVt LmRhdHVtX3R5cGVpZCA9IHR5cGVpZDsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJH ZXRUeXBNb2QodHVwKSBcCi0oIFwKLQkodHVwKS0+dF9jaG9pY2UudF9kYXR1bS5kYXR1bV90 eXBtb2QgXAotKQorc3RhdGljIGlubGluZSBpbnQzMgorSGVhcFR1cGxlSGVhZGVyR2V0VHlw TW9kKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKK3sKKwlyZXR1cm4gdHVwLT50 X2Nob2ljZS50X2RhdHVtLmRhdHVtX3R5cG1vZDsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVI ZWFkZXJTZXRUeXBNb2QodHVwLCB0eXBtb2QpIFwKLSggXAotCSh0dXApLT50X2Nob2ljZS50 X2RhdHVtLmRhdHVtX3R5cG1vZCA9ICh0eXBtb2QpIFwKLSkKK3N0YXRpYyBpbmxpbmUgdm9p ZAorSGVhcFR1cGxlSGVhZGVyU2V0VHlwTW9kKEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCwg aW50MzIgdHlwbW9kKQoreworCXR1cC0+dF9jaG9pY2UudF9kYXR1bS5kYXR1bV90eXBtb2Qg PSB0eXBtb2Q7Cit9CiAKIC8qCiAgKiBOb3RlIHRoYXQgd2Ugc3RvcCBjb25zaWRlcmluZyBh IHR1cGxlIEhPVC11cGRhdGVkIGFzIHNvb24gYXMgaXQgaXMga25vd24KICAqIGFib3J0ZWQg b3IgdGhlIHdvdWxkLWJlIHVwZGF0aW5nIHRyYW5zYWN0aW9uIGlzIGtub3duIGFib3J0ZWQu ICBGb3IgYmVzdAotICogZWZmaWNpZW5jeSwgY2hlY2sgdHVwbGUgdmlzaWJpbGl0eSBiZWZv cmUgdXNpbmcgdGhpcyBtYWNybywgc28gdGhhdCB0aGUKKyAqIGVmZmljaWVuY3ksIGNoZWNr IHR1cGxlIHZpc2liaWxpdHkgYmVmb3JlIHVzaW5nIHRoaXMgZnVuY3Rpb24sIHNvIHRoYXQg dGhlCiAgKiBJTlZBTElEIGJpdHMgd2lsbCBiZSBhcyB1cCB0byBkYXRlIGFzIHBvc3NpYmxl LgogICovCi0jZGVmaW5lIEhlYXBUdXBsZUhlYWRlcklzSG90VXBkYXRlZCh0dXApIFwKLSgg XAotCSgodHVwKS0+dF9pbmZvbWFzazIgJiBIRUFQX0hPVF9VUERBVEVEKSAhPSAwICYmIFwK LQkoKHR1cCktPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkgPT0gMCAmJiBcCi0J IUhlYXBUdXBsZUhlYWRlclhtaW5JbnZhbGlkKHR1cCkgXAotKQotCi0jZGVmaW5lIEhlYXBU dXBsZUhlYWRlclNldEhvdFVwZGF0ZWQodHVwKSBcCi0oIFwKLQkodHVwKS0+dF9pbmZvbWFz azIgfD0gSEVBUF9IT1RfVVBEQVRFRCBcCi0pCi0KLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVy Q2xlYXJIb3RVcGRhdGVkKHR1cCkgXAotKCBcCi0JKHR1cCktPnRfaW5mb21hc2syICY9IH5I RUFQX0hPVF9VUERBVEVEIFwKLSkKK3N0YXRpYyBpbmxpbmUgYm9vbAorSGVhcFR1cGxlSGVh ZGVySXNIb3RVcGRhdGVkKGNvbnN0IEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKK3sKKwly ZXR1cm4KKwkJKHR1cC0+dF9pbmZvbWFzazIgJiBIRUFQX0hPVF9VUERBVEVEKSAhPSAwICYm CisJCSh0dXAtPnRfaW5mb21hc2sgJiBIRUFQX1hNQVhfSU5WQUxJRCkgPT0gMCAmJgorCQkh SGVhcFR1cGxlSGVhZGVyWG1pbkludmFsaWQodHVwKTsKK30KIAotI2RlZmluZSBIZWFwVHVw bGVIZWFkZXJJc0hlYXBPbmx5KHR1cCkgXAotKCBcCi0gICgodHVwKS0+dF9pbmZvbWFzazIg JiBIRUFQX09OTFlfVFVQTEUpICE9IDAgXAotKQorc3RhdGljIGlubGluZSB2b2lkCitIZWFw VHVwbGVIZWFkZXJTZXRIb3RVcGRhdGVkKEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKK3sK Kwl0dXAtPnRfaW5mb21hc2syIHw9IEhFQVBfSE9UX1VQREFURUQ7Cit9CiAKLSNkZWZpbmUg SGVhcFR1cGxlSGVhZGVyU2V0SGVhcE9ubHkodHVwKSBcCi0oIFwKLSAgKHR1cCktPnRfaW5m b21hc2syIHw9IEhFQVBfT05MWV9UVVBMRSBcCi0pCitzdGF0aWMgaW5saW5lIHZvaWQKK0hl YXBUdXBsZUhlYWRlckNsZWFySG90VXBkYXRlZChIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXAp Cit7CisJdHVwLT50X2luZm9tYXNrMiAmPSB+SEVBUF9IT1RfVVBEQVRFRDsKK30KIAotI2Rl ZmluZSBIZWFwVHVwbGVIZWFkZXJDbGVhckhlYXBPbmx5KHR1cCkgXAotKCBcCi0gICh0dXAp LT50X2luZm9tYXNrMiAmPSB+SEVBUF9PTkxZX1RVUExFIFwKLSkKK3N0YXRpYyBpbmxpbmUg Ym9vbAorSGVhcFR1cGxlSGVhZGVySXNIZWFwT25seShjb25zdCBIZWFwVHVwbGVIZWFkZXJE YXRhICp0dXApIFwKK3sKKwlyZXR1cm4gKHR1cC0+dF9pbmZvbWFzazIgJiBIRUFQX09OTFlf VFVQTEUpICE9IDA7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVySGFzTWF0Y2godHVw KSBcCi0oIFwKLSAgKCh0dXApLT50X2luZm9tYXNrMiAmIEhFQVBfVFVQTEVfSEFTX01BVENI KSAhPSAwIFwKLSkKK3N0YXRpYyBpbmxpbmUgdm9pZAorSGVhcFR1cGxlSGVhZGVyU2V0SGVh cE9ubHkoSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCXR1cC0+dF9pbmZvbWFzazIg fD0gSEVBUF9PTkxZX1RVUExFOworfQogCi0jZGVmaW5lIEhlYXBUdXBsZUhlYWRlclNldE1h dGNoKHR1cCkgXAotKCBcCi0gICh0dXApLT50X2luZm9tYXNrMiB8PSBIRUFQX1RVUExFX0hB U19NQVRDSCBcCi0pCitzdGF0aWMgaW5saW5lIHZvaWQKK0hlYXBUdXBsZUhlYWRlckNsZWFy SGVhcE9ubHkoSGVhcFR1cGxlSGVhZGVyRGF0YSAqdHVwKQoreworCXR1cC0+dF9pbmZvbWFz azIgJj0gfkhFQVBfT05MWV9UVVBMRTsKK30KIAotI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJD bGVhck1hdGNoKHR1cCkgXAotKCBcCi0gICh0dXApLT50X2luZm9tYXNrMiAmPSB+SEVBUF9U VVBMRV9IQVNfTUFUQ0ggXAotKQorLyoKKyAqIFRoZXNlIGFyZSB1c2VkIHdpdGggYm90aCBI ZWFwVHVwbGUgYW5kIE1pbmltYWxUdXBsZSwgc28gdGhleSBtdXN0IGJlCisgKiBtYWNyb3Mu CisgKi8KIAogI2RlZmluZSBIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyh0dXApIFwKIAkoKHR1 cCktPnRfaW5mb21hc2syICYgSEVBUF9OQVRUU19NQVNLKQpAQCAtNTQ3LDcgKzU5NSwxMSBA QCBTdGF0aWNBc3NlcnREZWNsKE1heE9mZnNldE51bWJlciA8IFNwZWNUb2tlbk9mZnNldE51 bWJlciwKICAqIEJJVE1BUExFTihOQVRUUykgLQogICoJCUNvbXB1dGVzIHNpemUgb2YgbnVs bCBiaXRtYXAgZ2l2ZW4gbnVtYmVyIG9mIGRhdGEgY29sdW1ucy4KICAqLwotI2RlZmluZSBC SVRNQVBMRU4oTkFUVFMpCSgoKGludCkoTkFUVFMpICsgNykgLyA4KQorc3RhdGljIGlubGlu ZSBpbnQKK0JJVE1BUExFTihpbnQgTkFUVFMpCit7CisJcmV0dXJuIChOQVRUUyArIDcpIC8g ODsKK30KIAogLyoKICAqIE1heEhlYXBUdXBsZVNpemUgaXMgdGhlIG1heGltdW0gYWxsb3dl ZCBzaXplIG9mIGEgaGVhcCB0dXBsZSwgaW5jbHVkaW5nCkBAIC02NTEsNDggKzcwMywxMDcg QEAgc3RydWN0IE1pbmltYWxUdXBsZURhdGEKIAogI2RlZmluZSBTaXplb2ZNaW5pbWFsVHVw bGVIZWFkZXIgb2Zmc2V0b2YoTWluaW1hbFR1cGxlRGF0YSwgdF9iaXRzKQogCisvKgorICog TWluaW1hbFR1cGxlIGFjY2Vzc29yIGZ1bmN0aW9ucworICovCisKK3N0YXRpYyBpbmxpbmUg Ym9vbAorSGVhcFR1cGxlSGVhZGVySGFzTWF0Y2goY29uc3QgTWluaW1hbFR1cGxlRGF0YSAq dHVwKQoreworCXJldHVybiAodHVwLT50X2luZm9tYXNrMiAmIEhFQVBfVFVQTEVfSEFTX01B VENIKSAhPSAwOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0hlYXBUdXBsZUhlYWRlclNl dE1hdGNoKE1pbmltYWxUdXBsZURhdGEgKnR1cCkKK3sKKwl0dXAtPnRfaW5mb21hc2syIHw9 IEhFQVBfVFVQTEVfSEFTX01BVENIOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQKK0hlYXBU dXBsZUhlYWRlckNsZWFyTWF0Y2goTWluaW1hbFR1cGxlRGF0YSAqdHVwKQoreworCXR1cC0+ dF9pbmZvbWFzazIgJj0gfkhFQVBfVFVQTEVfSEFTX01BVENIOworfQorCiAKIC8qCiAgKiBH RVRTVFJVQ1QgLSBnaXZlbiBhIEhlYXBUdXBsZSBwb2ludGVyLCByZXR1cm4gYWRkcmVzcyBv ZiB0aGUgdXNlciBkYXRhCiAgKi8KLSNkZWZpbmUgR0VUU1RSVUNUKFRVUCkgKChjaGFyICop ICgoVFVQKS0+dF9kYXRhKSArIChUVVApLT50X2RhdGEtPnRfaG9mZikKK3N0YXRpYyBpbmxp bmUgdm9pZCAqCitHRVRTVFJVQ1QoY29uc3QgSGVhcFR1cGxlRGF0YSAqdHVwbGUpCit7CisJ cmV0dXJuICgoY2hhciAqKSAodHVwbGUtPnRfZGF0YSkgKyB0dXBsZS0+dF9kYXRhLT50X2hv ZmYpOworfQogCiAvKgotICogQWNjZXNzb3IgbWFjcm9zIHRvIGJlIHVzZWQgd2l0aCBIZWFw VHVwbGUgcG9pbnRlcnMuCisgKiBBY2Nlc3NvciBmdW5jdGlvbnMgdG8gYmUgdXNlZCB3aXRo IEhlYXBUdXBsZSBwb2ludGVycy4KICAqLwogCi0jZGVmaW5lIEhlYXBUdXBsZUhhc051bGxz KHR1cGxlKSBcCi0JCSgoKHR1cGxlKS0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9IQVNO VUxMKSAhPSAwKQorc3RhdGljIGlubGluZSBib29sCitIZWFwVHVwbGVIYXNOdWxscyhjb25z dCBIZWFwVHVwbGVEYXRhICp0dXBsZSkKK3sKKwlyZXR1cm4gKHR1cGxlLT50X2RhdGEtPnRf aW5mb21hc2sgJiBIRUFQX0hBU05VTEwpICE9IDA7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxl Tm9OdWxscyh0dXBsZSkgXAotCQkoISgodHVwbGUpLT50X2RhdGEtPnRfaW5mb21hc2sgJiBI RUFQX0hBU05VTEwpKQorc3RhdGljIGlubGluZSBib29sCitIZWFwVHVwbGVOb051bGxzKGNv bnN0IEhlYXBUdXBsZURhdGEgKnR1cGxlKQoreworCXJldHVybiAhSGVhcFR1cGxlSGFzTnVs bHModHVwbGUpOworfQogCi0jZGVmaW5lIEhlYXBUdXBsZUhhc1ZhcldpZHRoKHR1cGxlKSBc Ci0JCSgoKHR1cGxlKS0+dF9kYXRhLT50X2luZm9tYXNrICYgSEVBUF9IQVNWQVJXSURUSCkg IT0gMCkKK3N0YXRpYyBpbmxpbmUgYm9vbAorSGVhcFR1cGxlSGFzVmFyV2lkdGgoY29uc3Qg SGVhcFR1cGxlRGF0YSAqdHVwbGUpCit7CisJcmV0dXJuICh0dXBsZS0+dF9kYXRhLT50X2lu Zm9tYXNrICYgSEVBUF9IQVNWQVJXSURUSCkgIT0gMDsKK30KIAotI2RlZmluZSBIZWFwVHVw bGVBbGxGaXhlZCh0dXBsZSkgXAotCQkoISgodHVwbGUpLT50X2RhdGEtPnRfaW5mb21hc2sg JiBIRUFQX0hBU1ZBUldJRFRIKSkKK3N0YXRpYyBpbmxpbmUgYm9vbAorSGVhcFR1cGxlQWxs Rml4ZWQoY29uc3QgSGVhcFR1cGxlRGF0YSAqdHVwbGUpCit7CisJcmV0dXJuICFIZWFwVHVw bGVIYXNWYXJXaWR0aCh0dXBsZSk7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGFzRXh0ZXJu YWwodHVwbGUpIFwKLQkJKCgodHVwbGUpLT50X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX0hB U0VYVEVSTkFMKSAhPSAwKQorc3RhdGljIGlubGluZSBib29sCitIZWFwVHVwbGVIYXNFeHRl cm5hbChjb25zdCBIZWFwVHVwbGVEYXRhICp0dXBsZSkKK3sKKwlyZXR1cm4gKHR1cGxlLT50 X2RhdGEtPnRfaW5mb21hc2sgJiBIRUFQX0hBU0VYVEVSTkFMKSAhPSAwOworfQogCi0jZGVm aW5lIEhlYXBUdXBsZUlzSG90VXBkYXRlZCh0dXBsZSkgXAotCQlIZWFwVHVwbGVIZWFkZXJJ c0hvdFVwZGF0ZWQoKHR1cGxlKS0+dF9kYXRhKQorc3RhdGljIGlubGluZSBib29sCitIZWFw VHVwbGVJc0hvdFVwZGF0ZWQoY29uc3QgSGVhcFR1cGxlRGF0YSAqdHVwbGUpCit7CisJcmV0 dXJuIEhlYXBUdXBsZUhlYWRlcklzSG90VXBkYXRlZCh0dXBsZS0+dF9kYXRhKTsKK30KIAot I2RlZmluZSBIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKHR1cGxlKSBcCi0JCUhlYXBUdXBsZUhl YWRlclNldEhvdFVwZGF0ZWQoKHR1cGxlKS0+dF9kYXRhKQorc3RhdGljIGlubGluZSB2b2lk CitIZWFwVHVwbGVTZXRIb3RVcGRhdGVkKGNvbnN0IEhlYXBUdXBsZURhdGEgKnR1cGxlKQor eworCUhlYXBUdXBsZUhlYWRlclNldEhvdFVwZGF0ZWQodHVwbGUtPnRfZGF0YSk7Cit9CiAK LSNkZWZpbmUgSGVhcFR1cGxlQ2xlYXJIb3RVcGRhdGVkKHR1cGxlKSBcCi0JCUhlYXBUdXBs ZUhlYWRlckNsZWFySG90VXBkYXRlZCgodHVwbGUpLT50X2RhdGEpCitzdGF0aWMgaW5saW5l IHZvaWQKK0hlYXBUdXBsZUNsZWFySG90VXBkYXRlZChjb25zdCBIZWFwVHVwbGVEYXRhICp0 dXBsZSkKK3sKKwlIZWFwVHVwbGVIZWFkZXJDbGVhckhvdFVwZGF0ZWQodHVwbGUtPnRfZGF0 YSk7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSXNIZWFwT25seSh0dXBsZSkgXAotCQlIZWFw VHVwbGVIZWFkZXJJc0hlYXBPbmx5KCh0dXBsZSktPnRfZGF0YSkKK3N0YXRpYyBpbmxpbmUg Ym9vbAorSGVhcFR1cGxlSXNIZWFwT25seShjb25zdCBIZWFwVHVwbGVEYXRhICp0dXBsZSkK K3sKKwlyZXR1cm4gSGVhcFR1cGxlSGVhZGVySXNIZWFwT25seSh0dXBsZS0+dF9kYXRhKTsK K30KIAotI2RlZmluZSBIZWFwVHVwbGVTZXRIZWFwT25seSh0dXBsZSkgXAotCQlIZWFwVHVw bGVIZWFkZXJTZXRIZWFwT25seSgodHVwbGUpLT50X2RhdGEpCitzdGF0aWMgaW5saW5lIHZv aWQKK0hlYXBUdXBsZVNldEhlYXBPbmx5KGNvbnN0IEhlYXBUdXBsZURhdGEgKnR1cGxlKQor eworCUhlYXBUdXBsZUhlYWRlclNldEhlYXBPbmx5KHR1cGxlLT50X2RhdGEpOworfQogCi0j ZGVmaW5lIEhlYXBUdXBsZUNsZWFySGVhcE9ubHkodHVwbGUpIFwKLQkJSGVhcFR1cGxlSGVh ZGVyQ2xlYXJIZWFwT25seSgodHVwbGUpLT50X2RhdGEpCitzdGF0aWMgaW5saW5lIHZvaWQK K0hlYXBUdXBsZUNsZWFySGVhcE9ubHkoY29uc3QgSGVhcFR1cGxlRGF0YSAqdHVwbGUpCit7 CisJSGVhcFR1cGxlSGVhZGVyQ2xlYXJIZWFwT25seSh0dXBsZS0+dF9kYXRhKTsKK30KIAog LyogcHJvdG90eXBlcyBmb3IgZnVuY3Rpb25zIGluIGNvbW1vbi9oZWFwdHVwbGUuYyAqLwog ZXh0ZXJuIFNpemUgaGVhcF9jb21wdXRlX2RhdGFfc2l6ZShUdXBsZURlc2MgdHVwbGVEZXNj LApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL2l0dXAuaCBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9pdHVwLmgKaW5kZXggNDM5M2IxOWE3ZmQuLmJjZTBlOGFhOGJlIDEwMDY0NAot LS0gYS9zcmMvaW5jbHVkZS9hY2Nlc3MvaXR1cC5oCisrKyBiL3NyYy9pbmNsdWRlL2FjY2Vz cy9pdHVwLmgKQEAgLTY4LDkgKzY4LDIzIEBAIHR5cGVkZWYgSW5kZXhBdHRyaWJ1dGVCaXRN YXBEYXRhICogSW5kZXhBdHRyaWJ1dGVCaXRNYXA7CiAjZGVmaW5lIElOREVYX1ZBUl9NQVNL CTB4NDAwMAogI2RlZmluZSBJTkRFWF9OVUxMX01BU0sgMHg4MDAwCiAKLSNkZWZpbmUgSW5k ZXhUdXBsZVNpemUoaXR1cCkJCSgoU2l6ZSkgKChpdHVwKS0+dF9pbmZvICYgSU5ERVhfU0la RV9NQVNLKSkKLSNkZWZpbmUgSW5kZXhUdXBsZUhhc051bGxzKGl0dXApCSgoKChJbmRleFR1 cGxlKSAoaXR1cCkpLT50X2luZm8gJiBJTkRFWF9OVUxMX01BU0spKQotI2RlZmluZSBJbmRl eFR1cGxlSGFzVmFyd2lkdGhzKGl0dXApICgoKChJbmRleFR1cGxlKSAoaXR1cCkpLT50X2lu Zm8gJiBJTkRFWF9WQVJfTUFTSykpCitzdGF0aWMgaW5saW5lIFNpemUKK0luZGV4VHVwbGVT aXplKGNvbnN0IEluZGV4VHVwbGVEYXRhICppdHVwKQoreworCXJldHVybiAoaXR1cC0+dF9p bmZvICYgSU5ERVhfU0laRV9NQVNLKTsKK30KKworc3RhdGljIGlubGluZSBib29sCitJbmRl eFR1cGxlSGFzTnVsbHMoY29uc3QgSW5kZXhUdXBsZURhdGEgKml0dXApCit7CisJcmV0dXJu IGl0dXAtPnRfaW5mbyAmIElOREVYX05VTExfTUFTSzsKK30KKworc3RhdGljIGlubGluZSBi b29sCitJbmRleFR1cGxlSGFzVmFyd2lkdGhzKGNvbnN0IEluZGV4VHVwbGVEYXRhICppdHVw KQoreworCXJldHVybiBpdHVwLT50X2luZm8gJiBJTkRFWF9WQVJfTUFTSzsKK30KIAogCiAv KiByb3V0aW5lcyBpbiBpbmRleHR1cGxlLmMgKi8KLS0gCjIuNDcuMQoK --------------iWnndLhMOw8StcdKXgjj9suj Content-Type: text/plain; charset=UTF-8; name="0003-WIP-Use-some-generic-selection.patch" Content-Disposition: attachment; filename="0003-WIP-Use-some-generic-selection.patch" Content-Transfer-Encoding: base64 RnJvbSBiOGYyYzJmMTQ0YzE3NjMwMjliYThiODQwOTNhMTg4NWY1NzYyN2ExIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogRnJpLCAyNyBEZWMgMjAyNCAxMTowNzozNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggMy8zXSBXSVA6IFVzZSBzb21lIGdlbmVyaWMgc2VsZWN0aW9uCgpVc2UgZ2Vu ZXJpYyBzZWxlY3Rpb24gKEMxMSBfR2VuZXJpYykgdG8gYWxsb3cgYSBmZXcgZnVuY3Rpb25z IGluCmh0dXBfZGV0YWlscy5oIHRvIHdvcmsgd2l0aCBib3RoIEhlYXBUdXBsZSBhbmQgTWlu aW1hbFR1cGxlLgotLS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9odHVwX2RldGFpbHMuaCB8IDUw ICsrKysrKysrKysrKysrKysrKysrKysrLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAzNyBp bnNlcnRpb25zKCspLCAxMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9hY2Nlc3MvaHR1cF9kZXRhaWxzLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvaHR1cF9kZXRh aWxzLmgKaW5kZXggYmFiNDgwZmUyZjAuLmNiODYyZmYwODlkIDEwMDY0NAotLS0gYS9zcmMv aW5jbHVkZS9hY2Nlc3MvaHR1cF9kZXRhaWxzLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNz L2h0dXBfZGV0YWlscy5oCkBAIC01NzQsMjEgKzU3NCwyMyBAQCBIZWFwVHVwbGVIZWFkZXJD bGVhckhlYXBPbmx5KEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCkKIAl0dXAtPnRfaW5mb21h c2syICY9IH5IRUFQX09OTFlfVFVQTEU7CiB9CiAKLS8qCi0gKiBUaGVzZSBhcmUgdXNlZCB3 aXRoIGJvdGggSGVhcFR1cGxlIGFuZCBNaW5pbWFsVHVwbGUsIHNvIHRoZXkgbXVzdCBiZQot ICogbWFjcm9zLgotICovCi0KLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVyR2V0TmF0dHModHVw KSBcCi0JKCh0dXApLT50X2luZm9tYXNrMiAmIEhFQVBfTkFUVFNfTUFTSykKK3N0YXRpYyBp bmxpbmUgaW50CitIZWFwVHVwbGVIZWFkZXJHZXROYXR0cyhjb25zdCBIZWFwVHVwbGVIZWFk ZXJEYXRhICp0dXApCit7CisJcmV0dXJuIHR1cC0+dF9pbmZvbWFzazIgJiBIRUFQX05BVFRT X01BU0s7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVyU2V0TmF0dHModHVwLCBuYXR0 cykgXAotKCBcCi0JKHR1cCktPnRfaW5mb21hc2syID0gKCh0dXApLT50X2luZm9tYXNrMiAm IH5IRUFQX05BVFRTX01BU0spIHwgKG5hdHRzKSBcCi0pCitzdGF0aWMgaW5saW5lIHZvaWQK K0hlYXBUdXBsZUhlYWRlclNldE5hdHRzKEhlYXBUdXBsZUhlYWRlckRhdGEgKnR1cCwgaW50 IG5hdHRzKQoreworCXR1cC0+dF9pbmZvbWFzazIgPSAodHVwLT50X2luZm9tYXNrMiAmIH5I RUFQX05BVFRTX01BU0spIHwgbmF0dHM7Cit9CiAKLSNkZWZpbmUgSGVhcFR1cGxlSGVhZGVy SGFzRXh0ZXJuYWwodHVwKSBcCi0JCSgoKHR1cCktPnRfaW5mb21hc2sgJiBIRUFQX0hBU0VY VEVSTkFMKSAhPSAwKQorc3RhdGljIGlubGluZSBib29sCitIZWFwVHVwbGVIZWFkZXJIYXNF eHRlcm5hbChIZWFwVHVwbGVIZWFkZXJEYXRhICp0dXApCit7CisJcmV0dXJuICh0dXAtPnRf aW5mb21hc2sgJiBIRUFQX0hBU0VYVEVSTkFMKSAhPSAwOworfQogCiAKIC8qCkBAIC03MjUs NiArNzI3LDI4IEBAIEhlYXBUdXBsZUhlYWRlckNsZWFyTWF0Y2goTWluaW1hbFR1cGxlRGF0 YSAqdHVwKQogCXR1cC0+dF9pbmZvbWFzazIgJj0gfkhFQVBfVFVQTEVfSEFTX01BVENIOwog fQogCisvKgorICogQWNjZXNzb3IgZnVuY3Rpb25zIGZvciBib3RoIEhlYXBUdXBsZUhlYWRl ciBhbmQgTWluaW1hbFR1cGxlCisgKi8KKworc3RhdGljIGlubGluZSBib29sCitNaW5pbWFs VHVwbGVIYXNFeHRlcm5hbChNaW5pbWFsVHVwbGVEYXRhICp0dXApCit7CisJcmV0dXJuICh0 dXAtPnRfaW5mb21hc2sgJiBIRUFQX0hBU0VYVEVSTkFMKSAhPSAwOworfQorCisjZGVmaW5l IEhlYXBUdXBsZUhlYWRlckhhc0V4dGVybmFsKHR1cCkgXAorCV9HZW5lcmljKCh0dXApLCBI ZWFwVHVwbGVIZWFkZXJEYXRhKjogSGVhcFR1cGxlSGVhZGVySGFzRXh0ZXJuYWwsIE1pbmlt YWxUdXBsZURhdGEqOiBNaW5pbWFsVHVwbGVIYXNFeHRlcm5hbCkodHVwKQorCitzdGF0aWMg aW5saW5lIHZvaWQKK01pbmltYWxUdXBsZVNldE5hdHRzKE1pbmltYWxUdXBsZURhdGEgKnR1 cCwgaW50IG5hdHRzKQoreworCXR1cC0+dF9pbmZvbWFzazIgPSAodHVwLT50X2luZm9tYXNr MiAmIH5IRUFQX05BVFRTX01BU0spIHwgbmF0dHM7Cit9CisKKyNkZWZpbmUgSGVhcFR1cGxl SGVhZGVyU2V0TmF0dHModHVwLCBuYXR0cykgXAorCV9HZW5lcmljKCh0dXApLCBIZWFwVHVw bGVIZWFkZXJEYXRhKjogSGVhcFR1cGxlSGVhZGVyU2V0TmF0dHMsIE1pbmltYWxUdXBsZURh dGEqOiBNaW5pbWFsVHVwbGVTZXROYXR0cykodHVwLCBuYXR0cykKKwogCiAvKgogICogR0VU U1RSVUNUIC0gZ2l2ZW4gYSBIZWFwVHVwbGUgcG9pbnRlciwgcmV0dXJuIGFkZHJlc3Mgb2Yg dGhlIHVzZXIgZGF0YQotLSAKMi40Ny4xCgo= --------------iWnndLhMOw8StcdKXgjj9suj--