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 1vD6e0-003tad-C3 for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Oct 2025 19:43:12 +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 1vD6dy-0055v2-UZ for pgsql-hackers@arkaria.postgresql.org; Sun, 26 Oct 2025 19:43:09 +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 1vD6dy-0055ut-4A for pgsql-hackers@lists.postgresql.org; Sun, 26 Oct 2025 19:43:09 +0000 Received: from mail-pf1-x42c.google.com ([2607:f8b0:4864:20::42c]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vD6ds-003tZv-38 for pgsql-hackers@postgresql.org; Sun, 26 Oct 2025 19:43:07 +0000 Received: by mail-pf1-x42c.google.com with SMTP id d2e1a72fcca58-7a213c3c3f5so4989381b3a.3 for ; Sun, 26 Oct 2025 12:43:04 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20230601.gappssmtp.com; s=20230601; t=1761507784; x=1762112584; darn=postgresql.org; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:from:to:cc:subject:date:message-id:reply-to; bh=SMDtoF3XU3VmtzdqXGAsJUGsjAbrjNrzQgToINch2sA=; b=XDbnQN1ZjKqdBvp1ykTRLio5OyBBXvx2aT8IHTG8/+ZETDg6PIth6fF8UfxZzNGJRv sqw+B6cvV00CXbi2bw9+AgHnsEm3ThFf5oXa6bz705pHXcQlRbtaJ5ySRFD5Akf3JCO8 8BDlgIcSSDh56QJxl/cxflaO9lAFhm4od+AySOYbMSAqZWGdH9WUh1K11NmdWK9naKgh kgYL2eyse8l5SNHy5HS972eSf6JgzKXRdIb4CM/nPY1mlY0uRAbZNEKpzr6qnexy2vvk QD6+3kncpCmgibJBOSb+rZVgoadyXo5izmtvdXlJmoheNp6imwZB4Cy/CTpPG3t7APbd bRtg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761507784; x=1762112584; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=SMDtoF3XU3VmtzdqXGAsJUGsjAbrjNrzQgToINch2sA=; b=iM3oGgHpB5quFf0yg0rB0WppOqYuUBGzrF1gQDxexkH29TxmuEU9SfOL3zkUDKwwJB e8kKPjjwLUrVhQVwuvtxxsK5rsuUXFh0LTe+zwqX1USN4/YVportJ4KikPgbxOGzefv2 iPZLy8V72BqVTr8CsSZq8l+5BkA9nGHx9aCdjuVHneltRRGsRmkudTFAG02p/i1Nd3Lp ST01kL2obmdaGurVcU5QXI7S1wY0PW6BX7q7a90eXFfTZStc8vmTtRPSWlyzU3rOPZH7 ct0s57GwVqCNRo3QbPCiGfqXGk8GLO7EG8Z7h8uiQ1bNrnmlO3/3XlZCT2zs3IkXf7QZ blgA== X-Forwarded-Encrypted: i=1; AJvYcCW0nunWudpj3XDjyTiL1In8hJRJkaXjqAJnFWaU40VD9cLSWKbqpY/i7DIzhgctHaR0fMzZlF+lR7vog+wi@postgresql.org X-Gm-Message-State: AOJu0YxW3NXwQDp5uUH++3jai7CRb2C1jOIeW6ypb4L92Z0UYHEiSlmx OYW8Qpa1CUBr+gXNjyKAd4pgQP1l9k734vdhr0Th1zws81ISszg3YiqLEwIVd3LNTEIMgttd0Rp +TgY= X-Gm-Gg: ASbGncty/8olJrGjJCrwyQn6qpRQEhJ7br02WyolkAuLflrgT4rE1W0pCmeb04VEfHK X3x3Qs1fKjEPECa8riYS2U3JFg16dQYcr66oQqzcwjsRcA+0t5UpkFOIiI3Z2NtzTGew+0QXANs O1/ptOJXsW1laxU6n621lYGfzxAM2JyzMNdTdU8ujalAPaQKcs6Soi/6NzmsQ3rcoYUIauG98o3 RxRRkOirPTq69rvWAc2Mb8pIGbgxPYJwQ6ecu9w9AL2nITjP+pN2yHfnJGBGl4Pa63h6xRHfBMu DwcdlUlxUjtebYQUgYsFQWdhd0Dfg2xw3Dr0ZTG4TqQgPTo0mGYaxnhsHe7Ls2AGLLBqWWdbfn4 CQzCul7H7Nf71QjnEmFi5xkwmBINgHSitan1qq7BbM0XrEsuUSenum/zr0z+5eob/gnRhgYedI0 UeS7eLq0jVsLciCnSjR8gTwcTfSfg3EBRdjM40psaAakc= X-Google-Smtp-Source: AGHT+IEaFv8Asw+cLJwapSH41p4VJZyQDDJemccWnVtvubP6HQ/46wP1XtD6Z9qQksRU0UeUiXu7WQ== X-Received: by 2002:a17:902:d4c7:b0:290:9a31:26de with SMTP id d9443c01a7336-2948ba3bbcdmr109731385ad.33.1761507783709; Sun, 26 Oct 2025 12:43:03 -0700 (PDT) Received: from jeff-ws-bridge.lan (c-24-7-19-3.hsd1.ca.comcast.net. [24.7.19.3]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-29498d2789bsm56079995ad.62.2025.10.26.12.43.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 26 Oct 2025 12:43:02 -0700 (PDT) Message-ID: Subject: Re: C11: should we use char32_t for unicode code points? From: Jeff Davis To: Thomas Munro Cc: Tatsuo Ishii , pgsql-hackers@postgresql.org Date: Sun, 26 Oct 2025 12:43:01 -0700 In-Reply-To: References: <20251024.184315.1449345234035166124.ishii@postgresql.org> <435cf6bcf14bb91235da065c70d782863ca9b80e.camel@j-davis.com> Content-Type: multipart/mixed; boundary="=-zu6WarS5aV63ZTxwQh0N" User-Agent: Evolution 3.52.3-0ubuntu1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-zu6WarS5aV63ZTxwQh0N Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Sat, 2025-10-25 at 16:21 +1300, Thomas Munro wrote: > I > guess you could static_assert(__STDC_UTF_32__, "char32_t must use > UTF-32 encoding"). Done. > =C2=A0 It's also defined as at least, not exactly, 32 > bits but we already require the machine to have uint32_t so it must > be > exactly 32 bits for us, and we could static_assert(sizeof(char32_t) > =3D=3D > 4) for good measure. What would be the problem if it were larger than 32 bits? I don't mind adding the asserts, but it's slightly awkward because StaticAssertDecl() isn't defined yet at the point we are including uchar.h. > IIUC you're proposing that all the stuff that only works when > database > encoding is UTF8 should be flipped over to the new type, and that > seems like a really good idea to me: remaining uses of pg_wchar would > be warnings that the encoding is only conditionally known. Exactly. The idea is to make=C2=A0pg_wchar stand out more as a platform- dependent (or encoding-dependent) representation, and remove the doubt when someone sees char32_t. > =C2=A0 It'd be > documentation without new type safety though: for example I think you > missed a spot, the return type of the definition of utf8_to_unicode() > (I didn't search exhaustively). Right, it's not offering type safety. Fixed the omission. > Do you consider explicit casts between eg pg_wchar and char32_t to be > useful documentation for humans, when coercion should just work?=C2=A0 I > kinda thought we were trying to cut down on useless casts, they might > signal something but can also hide bugs. The patch doesn't add any explicit casts, except in to_char32() and to_pg_wchar(), so I assume that the callsites of those functions are what you meant by "explicit casts"? We can get rid of those functions if you want. The main reason they exist is for a place to comment on the safety of converting pg_wchar to char32_t. I can put that somewhere else, though. > =C2=A0 Should the few places that > deal in surrogates be using char16_t instead? Yes, done. > I wonder if the XXX_libc_mb() functions that contain our hard-coded > assumptions that libc's wchar_t values are in UTF-16 or UTF-32 should > use your to_char32_t() too (probably with a longer name > pg_wchar_to_char32_t() if it's in a header for wider use). I don't think those functions do depend on UTF-32. iswalpha(), etc., take a wint_t, which is just a wchar_t that can also be WEOF. And if we don't use to_char32/to_pg_wchar in there, I don't see much need for it outside of pg_locale_builtin.c, but if the need arises we can move it to a header file and give it a longer name. > =C2=A0 That'd > highlight the exact points at which we make that assumption and > centralise the assertion about database encoding, and then the code > that compares with various known cut-off values would be clearly in > the char32_t world. The asserts about UTF-8 in pg_locale_libc.c are there because the previous code only took those code paths for UTF-8, and I preserved that. Also there is some code that depends on UTF-8 for decoding, but I don't think anything in there depends on UTF-32 specifically. > There is one small practical problem though: Apple hasn't got around > to supplying in its C SDK yet.=C2=A0 It's there for C++ only, > and > =C2=A0isn't needed for the type in C++ anyway.=C2=A0 I don't think that a= lone > warrants a new name wart, as the standard tells us it must match > uint32_least32_t so we can just define it ourselves if > !defined(__cplusplus__) && !defined(HAVE_UCHAR_H), until Apple gets > around to that. Thank you, I added a configure test for uchar.h and some more preprocessor logic in c.h. > Since it confused me briefly: Apple does provide > but > that's a coincidentally named ICU header, and on that subject I see > that ICU hasn't adopted these types yet but there are some hints that > they're thinking about it; meanwhile their C++ interfaces have begun > to document that they are acceptable in a few template functions. Even when they fully move to char32_t, we will still have to support the older ICU versions for a long time. > All other target systems have it AFAICS.=C2=A0 Windows: tested by CI, > MinGW: found discussion, *BSD, Solaris, Illumos: found man pages. Great, thank you! > They solve the "size and encoding of wchar_t is > undefined" problem One thing I never understood about this is that it's our code that converts from the server encoding to pg_wchar (e.g. pg_latin12wchar_with_len()), so we must understand the representation of pg_wchar. And we cast directly from pg_wchar to wchar_t, so we understand the encoding of wchar_t, too, right? > =C2=A0In passing, we seem to have a couple of mentions of "pg_wchar_t" > (bogus _t) in existing comments. Thank you. I'll fix that separately. Regards, Jeff Davis --=-zu6WarS5aV63ZTxwQh0N Content-Disposition: attachment; filename*0=v2-0001-Use-C11-char16_t-and-char32_t-for-Unicode-code-po.pat; filename*1=ch Content-Type: text/x-patch; name="v2-0001-Use-C11-char16_t-and-char32_t-for-Unicode-code-po.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBhMjg5ZGY4MTUxNGIxZjc4NGY5MjQyYTFjMjE0YmNjMDc0OWI2ZjljIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU dWUsIDIxIE9jdCAyMDI1IDEzOjE2OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gVXNlIEMx MSBjaGFyMTZfdCBhbmQgY2hhcjMyX3QgZm9yIFVuaWNvZGUgY29kZSBwb2ludHMuCgpSZXZpZXdl ZC1ieTogVGF0c3VvIElzaGlpIDxpc2hpaUBwb3N0Z3Jlc3FsLm9yZz4KUmV2aWV3ZWQtYnk6IFRo b21hcyBNdW5ybyA8dGhvbWFzLm11bnJvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9w b3N0Z3IuZXMvbS9iZWRjYzkzZDA2MjAzZGZkODk4MTViMTBmODE1Y2EyZGU4NjI2ZTg1LmNhbWVs JTQwai1kYXZpcy5jb20KLS0tCiBjb25maWd1cmUuYWMgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMSArCiBtZXNvbi5idWlsZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMSArCiBzcmMvYmFja2VuZC9wYXJzZXIvcGFyc2VyLmMgICAgICAgICAgICAgICAg ICAgfCAgOCArLS0KIHNyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwgICAgICAgICAgICAgICAgICAg ICB8ICA4ICstLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubCAgICAgICAg IHwgIDYgKy0KIHNyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jICAgICB8 IDQ0ICsrKysrKysrKystLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyAgICAg ICAgICAgICAgIHwgNDAgKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvdXRpbHMvbWIvbWJ1dGls cy5jICAgICAgICAgICAgICAgIHwgIDQgKy0KIHNyYy9jb21tb24vc2FzbHByZXAuYyAgICAgICAg ICAgICAgICAgICAgICAgICB8IDQ4ICsrKysrKysrLS0tLS0tLS0KIHNyYy9jb21tb24vdW5pY29k ZS9jYXNlX3Rlc3QuYyAgICAgICAgICAgICAgICB8IDIzICsrKystLS0tCiBzcmMvY29tbW9uL3Vu aWNvZGUvY2F0ZWdvcnlfdGVzdC5jICAgICAgICAgICAgfCAgMyArLQogLi4uL3VuaWNvZGUvZ2Vu ZXJhdGUtbm9ybV90ZXN0X3RhYmxlLnBsICAgICAgIHwgIDQgKy0KIC4uLi91bmljb2RlL2dlbmVy YXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbCAgICB8ICA3ICstLQogLi4uL2dlbmVyYXRlLXVuaWNv ZGVfY2F0ZWdvcnlfdGFibGUucGwgICAgICAgIHwgIDggKy0tCiBzcmMvY29tbW9uL3VuaWNvZGUv bm9ybV90ZXN0LmMgICAgICAgICAgICAgICAgfCAgNiArLQogc3JjL2NvbW1vbi91bmljb2RlX2Nh c2UuYyAgICAgICAgICAgICAgICAgICAgIHwgNTYgKysrKysrKysrLS0tLS0tLS0tLQogc3JjL2Nv bW1vbi91bmljb2RlX2NhdGVnb3J5LmMgICAgICAgICAgICAgICAgIHwgNTAgKysrKysrKystLS0t LS0tLS0KIHNyYy9jb21tb24vdW5pY29kZV9ub3JtLmMgICAgICAgICAgICAgICAgICAgICB8IDU2 ICsrKysrKysrKy0tLS0tLS0tLS0KIHNyYy9mZV91dGlscy9tYnByaW50LmMgICAgICAgICAgICAg ICAgICAgICAgICB8IDEwICsrLS0KIHNyYy9pbmNsdWRlL2MuaCAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICB8IDE5ICsrKysrKysKIHNyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2Uu aCAgICAgICAgICAgICB8IDEwICsrLS0KIHNyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2Vf dGFibGUuaCAgICAgICB8IDEzICsrLS0tCiBzcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRl Z29yeS5oICAgICAgICAgfCA0NiArKysrKysrKy0tLS0tLS0KIHNyYy9pbmNsdWRlL2NvbW1vbi91 bmljb2RlX2NhdGVnb3J5X3RhYmxlLmggICB8ICA4ICstLQogc3JjL2luY2x1ZGUvY29tbW9uL3Vu aWNvZGVfbm9ybS5oICAgICAgICAgICAgIHwgIDYgKy0KIHNyYy9pbmNsdWRlL21iL3BnX3djaGFy LmggICAgICAgICAgICAgICAgICAgICB8IDMyICsrKysrLS0tLS0tCiBzcmMvdG9vbHMvcGdpbmRl bnQvdHlwZWRlZnMubGlzdCAgICAgICAgICAgICAgfCAgMiArCiAyNyBmaWxlcyBjaGFuZ2VkLCAy NzYgaW5zZXJ0aW9ucygrKSwgMjQzIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3Vy ZS5hYyBiL2NvbmZpZ3VyZS5hYwppbmRleCBlNDQ5NDNhYTZmZS4uNmFiMmUxNTc1MzEgMTAwNjQ0 Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1cmUuYWMKQEAgLTE1MTMsNiArMTUxMyw3 IEBAIEFDX0NIRUNLX0hFQURFUlMobTRfbm9ybWFsaXplKFsKIAlzeXMvc2lnbmFsZmQuaAogCXN5 cy91Y3JlZC5oCiAJdGVybWlvcy5oCisJdWNoYXIuaAogCXVjcmVkLmgKIAl4bG9jYWxlLmgKIF0p KQpkaWZmIC0tZ2l0IGEvbWVzb24uYnVpbGQgYi9tZXNvbi5idWlsZAppbmRleCAzOTU0MTZhNjA2 MC4uYzMxMjhjNzU1NGYgMTAwNjQ0Ci0tLSBhL21lc29uLmJ1aWxkCisrKyBiL21lc29uLmJ1aWxk CkBAIC0yNjEzLDYgKzI2MTMsNyBAQCBoZWFkZXJfY2hlY2tzID0gWwogICAnc3lzL3NpZ25hbGZk LmgnLAogICAnc3lzL3VjcmVkLmgnLAogICAndGVybWlvcy5oJywKKyAgJ3VjaGFyLmgnLAogICAn dWNyZWQuaCcsCiAgICd4bG9jYWxlLmgnLAogXQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFy c2VyL3BhcnNlci5jIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlci5jCmluZGV4IDMzYTA0MDUw NmI0Li5hMzY3OWY4ZTg2YyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFyc2VyL3BhcnNlci5j CisrKyBiL3NyYy9iYWNrZW5kL3BhcnNlci9wYXJzZXIuYwpAQCAtMzM5LDcgKzMzOSw3IEBAIGhl eHZhbCh1bnNpZ25lZCBjaGFyIGMpCiAKIC8qIGlzIFVuaWNvZGUgY29kZSBwb2ludCBhY2NlcHRh YmxlPyAqLwogc3RhdGljIHZvaWQKLWNoZWNrX3VuaWNvZGVfdmFsdWUocGdfd2NoYXIgYykKK2No ZWNrX3VuaWNvZGVfdmFsdWUoY2hhcjMyX3QgYykKIHsKIAlpZiAoIWlzX3ZhbGlkX3VuaWNvZGVf Y29kZXBvaW50KGMpKQogCQllcmVwb3J0KEVSUk9SLApAQCAtMzc2LDcgKzM3Niw3IEBAIHN0cl91 ZGVlc2NhcGUoY29uc3QgY2hhciAqc3RyLCBjaGFyIGVzY2FwZSwKIAljaGFyCSAgICpuZXcsCiAJ CQkgICAqb3V0OwogCXNpemVfdAkJbmV3X2xlbjsKLQlwZ193Y2hhcglwYWlyX2ZpcnN0ID0gMDsK KwljaGFyMTZfdAlwYWlyX2ZpcnN0ID0gMDsKIAlTY2FubmVyQ2FsbGJhY2tTdGF0ZSBzY2JzdGF0 ZTsKIAogCS8qCkBAIC00MjAsNyArNDIwLDcgQEAgc3RyX3VkZWVzY2FwZShjb25zdCBjaGFyICpz dHIsIGNoYXIgZXNjYXBlLAogCQkJCQkgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGluWzNdKSAm JgogCQkJCQkgaXN4ZGlnaXQoKHVuc2lnbmVkIGNoYXIpIGluWzRdKSkKIAkJCXsKLQkJCQlwZ193 Y2hhcgl1bmljb2RlOworCQkJCWNoYXIzMl90CXVuaWNvZGU7CiAKIAkJCQl1bmljb2RlID0gKGhl eHZhbChpblsxXSkgPDwgMTIpICsKIAkJCQkJKGhleHZhbChpblsyXSkgPDwgOCkgKwpAQCAtNDU3 LDcgKzQ1Nyw3IEBAIHN0cl91ZGVlc2NhcGUoY29uc3QgY2hhciAqc3RyLCBjaGFyIGVzY2FwZSwK IAkJCQkJIGlzeGRpZ2l0KCh1bnNpZ25lZCBjaGFyKSBpbls2XSkgJiYKIAkJCQkJIGlzeGRpZ2l0 KCh1bnNpZ25lZCBjaGFyKSBpbls3XSkpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29kZTsKKwkJ CQljaGFyMzJfdAl1bmljb2RlOwogCiAJCQkJdW5pY29kZSA9IChoZXh2YWwoaW5bMl0pIDw8IDIw KSArCiAJCQkJCShoZXh2YWwoaW5bM10pIDw8IDE2KSArCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9wYXJzZXIvc2Nhbi5sIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubAppbmRleCAwODk5MDgz MWZlOC4uYTY3ODE1MzM5YjcgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnNlci9zY2FuLmwK KysrIGIvc3JjL2JhY2tlbmQvcGFyc2VyL3NjYW4ubApAQCAtMTIxLDcgKzEyMSw3IEBAIHN0YXRp YyB2b2lkIGFkZGxpdGNoYXIodW5zaWduZWQgY2hhciB5Y2hhciwgY29yZV95eXNjYW5fdCB5eXNj YW5uZXIpOwogc3RhdGljIGNoYXIgKmxpdGJ1ZmR1cChjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcik7 CiBzdGF0aWMgdW5zaWduZWQgY2hhciB1bmVzY2FwZV9zaW5nbGVfY2hhcih1bnNpZ25lZCBjaGFy IGMsIGNvcmVfeXlzY2FuX3QgeXlzY2FubmVyKTsKIHN0YXRpYyBpbnQJcHJvY2Vzc19pbnRlZ2Vy X2xpdGVyYWwoY29uc3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwsIGludCBiYXNlKTsKLXN0 YXRpYyB2b2lkIGFkZHVuaWNvZGUocGdfd2NoYXIgYywgeXlzY2FuX3QgeXlzY2FubmVyKTsKK3N0 YXRpYyB2b2lkIGFkZHVuaWNvZGUoY2hhcjMyX3QgYywgeXlzY2FuX3QgeXlzY2FubmVyKTsKIAog I2RlZmluZSB5eWVycm9yKG1zZykgIHNjYW5uZXJfeXllcnJvcihtc2csIHl5c2Nhbm5lcikKIApA QCAtNjQwLDcgKzY0MCw3IEBAIG90aGVyCQkJLgogCQkJCQlhZGRsaXQoeXl0ZXh0LCB5eWxlbmcs IHl5c2Nhbm5lcik7CiAJCQkJfQogPHhlPnt4ZXVuaWNvZGV9IHsKLQkJCQkJcGdfd2NoYXIJYyA9 IHN0cnRvdWwoeXl0ZXh0ICsgMiwgTlVMTCwgMTYpOworCQkJCQljaGFyMzJfdAljID0gc3RydG91 bCh5eXRleHQgKyAyLCBOVUxMLCAxNik7CiAKIAkJCQkJLyoKIAkJCQkJICogRm9yIGNvbnNpc3Rl bmN5IHdpdGggb3RoZXIgcHJvZHVjdGlvbnMsIGlzc3VlIGFueQpAQCAtNjY4LDcgKzY2OCw3IEBA IG90aGVyCQkJLgogCQkJCQlQT1BfWVlMTE9DKCk7CiAJCQkJfQogPHhldT57eGV1bmljb2RlfSB7 Ci0JCQkJCXBnX3djaGFyCWMgPSBzdHJ0b3VsKHl5dGV4dCArIDIsIE5VTEwsIDE2KTsKKwkJCQkJ Y2hhcjMyX3QJYyA9IHN0cnRvdWwoeXl0ZXh0ICsgMiwgTlVMTCwgMTYpOwogCiAJCQkJCS8qIFJl bWVtYmVyIHN0YXJ0IG9mIG92ZXJhbGwgc3RyaW5nIHRva2VuIC4uLiAqLwogCQkJCQlQVVNIX1lZ TExPQygpOwpAQCAtMTM3Niw3ICsxMzc2LDcgQEAgcHJvY2Vzc19pbnRlZ2VyX2xpdGVyYWwoY29u c3QgY2hhciAqdG9rZW4sIFlZU1RZUEUgKmx2YWwsIGludCBiYXNlKQogfQogCiBzdGF0aWMgdm9p ZAotYWRkdW5pY29kZShwZ193Y2hhciBjLCBjb3JlX3l5c2Nhbl90IHl5c2Nhbm5lcikKK2FkZHVu aWNvZGUoY2hhcjMyX3QgYywgY29yZV95eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJU2Nhbm5lckNh bGxiYWNrU3RhdGUgc2Nic3RhdGU7CiAJY2hhcgkJYnVmW01BWF9VTklDT0RFX0VRVUlWQUxFTlRf U1RSSU5HICsgMV07CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvanNvbnBhdGhf c2Nhbi5sIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4ubAppbmRleCBjN2Fh YjgzZWViNC4uOGMzYTBhOWM2NDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9q c29ucGF0aF9zY2FuLmwKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L2pzb25wYXRoX3NjYW4u bApAQCAtNTc0LDcgKzU3NCw3IEBAIGhleHZhbChjaGFyIGMsIGludCAqcmVzdWx0LCBzdHJ1Y3Qg Tm9kZSAqZXNjb250ZXh0LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiAKIC8qIEFkZCBnaXZlbiB1bmlj b2RlIGNoYXJhY3RlciB0byBzY2Fuc3RyaW5nICovCiBzdGF0aWMgYm9vbAotYWRkVW5pY29kZUNo YXIoaW50IGNoLCBzdHJ1Y3QgTm9kZSAqZXNjb250ZXh0LCB5eXNjYW5fdCB5eXNjYW5uZXIpCith ZGRVbmljb2RlQ2hhcihjaGFyMzJfdCBjaCwgc3RydWN0IE5vZGUgKmVzY29udGV4dCwgeXlzY2Fu X3QgeXlzY2FubmVyKQogewogCWlmIChjaCA9PSAwKQogCXsKQEAgLTYwNyw3ICs2MDcsNyBAQCBh ZGRVbmljb2RlQ2hhcihpbnQgY2gsIHN0cnVjdCBOb2RlICplc2NvbnRleHQsIHl5c2Nhbl90IHl5 c2Nhbm5lcikKIAogLyogQWRkIHVuaWNvZGUgY2hhcmFjdGVyLCBwcm9jZXNzaW5nIGFueSBzdXJy b2dhdGUgcGFpcnMgKi8KIHN0YXRpYyBib29sCi1hZGRVbmljb2RlKGludCBjaCwgaW50ICpoaV9z dXJyb2dhdGUsIHN0cnVjdCBOb2RlICplc2NvbnRleHQsIHl5c2Nhbl90IHl5c2Nhbm5lcikKK2Fk ZFVuaWNvZGUoY2hhcjMyX3QgY2gsIGludCAqaGlfc3Vycm9nYXRlLCBzdHJ1Y3QgTm9kZSAqZXNj b250ZXh0LCB5eXNjYW5fdCB5eXNjYW5uZXIpCiB7CiAJaWYgKGlzX3V0ZjE2X3N1cnJvZ2F0ZV9m aXJzdChjaCkpCiAJewpAQCAtNjU1LDcgKzY1NSw3IEBAIHBhcnNlVW5pY29kZShjaGFyICpzLCBp bnQgbCwgc3RydWN0IE5vZGUgKmVzY29udGV4dCwgeXlzY2FuX3QgeXlzY2FubmVyKQogCiAJZm9y IChpID0gMjsgaSA8IGw7IGkgKz0gMikJLyogc2tpcCAnXHUnICovCiAJewotCQlpbnQJCQljaCA9 IDA7CisJCWNoYXIzMl90CQljaCA9IDA7CiAJCWludAkJCWosCiAJCQkJCXNpOwogCmRpZmYgLS1n aXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNr ZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IDNkYzYxMWI1MGUxLi4xMDIx ZTBkMTI5YiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWls dGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAg LTE1LDcgKzE1LDYgQEAKICNpbmNsdWRlICJjYXRhbG9nL3BnX2NvbGxhdGlvbi5oIgogI2luY2x1 ZGUgImNvbW1vbi91bmljb2RlX2Nhc2UuaCIKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXRl Z29yeS5oIgotI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgi CiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKICNpbmNsdWRlICJ1dGlscy9wZ19sb2NhbGUu aCIKQEAgLTM1LDYgKzM0LDIzIEBAIHN0cnVjdCBXb3JkQm91bmRhcnlTdGF0ZQogCWJvb2wJCXBy ZXZfYWxudW07CiB9OwogCisvKgorICogSW4gVVRGLTgsIHBnX3djaGFyIGlzIGd1YXJhbnRlZWQg dG8gYmUgdGhlIGNvZGUgcG9pbnQgdmFsdWUuCisgKi8KK3N0YXRpYyBpbmxpbmUgY2hhcjMyX3QK K3RvX2NoYXIzMihwZ193Y2hhciB3YykKK3sKKwlBc3NlcnQoR2V0RGF0YWJhc2VFbmNvZGluZygp ID09IFBHX1VURjgpOworCXJldHVybiAoY2hhcjMyX3QpIHdjOworfQorCitzdGF0aWMgaW5saW5l IHBnX3djaGFyCit0b19wZ193Y2hhcihjaGFyMzJfdCBjMzIpCit7CisJQXNzZXJ0KEdldERhdGFi YXNlRW5jb2RpbmcoKSA9PSBQR19VVEY4KTsKKwlyZXR1cm4gKHBnX3djaGFyKSBjMzI7Cit9CisK IC8qCiAgKiBTaW1wbGUgd29yZCBib3VuZGFyeSBpdGVyYXRvciB0aGF0IGRyYXdzIGJvdW5kYXJp ZXMgZWFjaCB0aW1lIHRoZSByZXN1bHQgb2YKICAqIHBnX3VfaXNhbG51bSgpIGNoYW5nZXMuCkBA IC00Nyw3ICs2Myw3IEBAIGluaXRjYXBfd2JuZXh0KHZvaWQgKnN0YXRlKQogCXdoaWxlICh3YnN0 YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4gJiYKIAkJICAgd2JzdGF0ZS0+c3RyW3dic3RhdGUt Pm9mZnNldF0gIT0gJ1wwJykKIAl7Ci0JCXBnX3djaGFyCXUgPSB1dGY4X3RvX3VuaWNvZGUoKHVu c2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsKKwkJY2hhcjMyX3QJdSA9IHV0ZjhfdG9fdW5p Y29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0YXRlLT5zdHIgKwogCQkJCQkJCQkJCXdic3RhdGUt Pm9mZnNldCk7CiAJCWJvb2wJCWN1cnJfYWxudW0gPSBwZ191X2lzYWxudW0odSwgd2JzdGF0ZS0+ cG9zaXgpOwogCkBAIC0xMTIsNjEgKzEyOCw2MSBAQCBzdHJmb2xkX2J1aWx0aW4oY2hhciAqZGVz dCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXplX3Qgc3JjbGVuLAogc3Rh dGljIGJvb2wKIHdjX2lzZGlnaXRfYnVpbHRpbihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9j YWxlKQogewotCXJldHVybiBwZ191X2lzZGlnaXQod2MsICFsb2NhbGUtPmJ1aWx0aW4uY2FzZW1h cF9mdWxsKTsKKwlyZXR1cm4gcGdfdV9pc2RpZ2l0KHRvX2NoYXIzMih3YyksICFsb2NhbGUtPmJ1 aWx0aW4uY2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzYWxwaGFfYnVpbHRp bihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191X2lzYWxw aGEod2MpOworCXJldHVybiBwZ191X2lzYWxwaGEodG9fY2hhcjMyKHdjKSk7CiB9CiAKIHN0YXRp YyBib29sCiB3Y19pc2FsbnVtX2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2Fs ZSkKIHsKLQlyZXR1cm4gcGdfdV9pc2FsbnVtKHdjLCAhbG9jYWxlLT5idWlsdGluLmNhc2VtYXBf ZnVsbCk7CisJcmV0dXJuIHBnX3VfaXNhbG51bSh0b19jaGFyMzIod2MpLCAhbG9jYWxlLT5idWls dGluLmNhc2VtYXBfZnVsbCk7CiB9CiAKIHN0YXRpYyBib29sCiB3Y19pc3VwcGVyX2J1aWx0aW4o cGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc3VwcGVy KHdjKTsKKwlyZXR1cm4gcGdfdV9pc3VwcGVyKHRvX2NoYXIzMih3YykpOwogfQogCiBzdGF0aWMg Ym9vbAogd2NfaXNsb3dlcl9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUp CiB7Ci0JcmV0dXJuIHBnX3VfaXNsb3dlcih3Yyk7CisJcmV0dXJuIHBnX3VfaXNsb3dlcih0b19j aGFyMzIod2MpKTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzZ3JhcGhfYnVpbHRpbihwZ193Y2hh ciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiBwZ191X2lzZ3JhcGgod2MpOwor CXJldHVybiBwZ191X2lzZ3JhcGgodG9fY2hhcjMyKHdjKSk7CiB9CiAKIHN0YXRpYyBib29sCiB3 Y19pc3ByaW50X2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBnX2xvY2FsZV90IGxvY2FsZSkKIHsKLQly ZXR1cm4gcGdfdV9pc3ByaW50KHdjKTsKKwlyZXR1cm4gcGdfdV9pc3ByaW50KHRvX2NoYXIzMih3 YykpOwogfQogCiBzdGF0aWMgYm9vbAogd2NfaXNwdW5jdF9idWlsdGluKHBnX3djaGFyIHdjLCBw Z19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHBnX3VfaXNwdW5jdCh3YywgIWxvY2FsZS0+ YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOworCXJldHVybiBwZ191X2lzcHVuY3QodG9fY2hhcjMyKHdj KSwgIWxvY2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOwogfQogCiBzdGF0aWMgYm9vbAogd2Nf aXNzcGFjZV9idWlsdGluKHBnX3djaGFyIHdjLCBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0 dXJuIHBnX3VfaXNzcGFjZSh3Yyk7CisJcmV0dXJuIHBnX3VfaXNzcGFjZSh0b19jaGFyMzIod2Mp KTsKIH0KIAogc3RhdGljIGJvb2wKIHdjX2lzeGRpZ2l0X2J1aWx0aW4ocGdfd2NoYXIgd2MsIHBn X2xvY2FsZV90IGxvY2FsZSkKIHsKLQlyZXR1cm4gcGdfdV9pc3hkaWdpdCh3YywgIWxvY2FsZS0+ YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOworCXJldHVybiBwZ191X2lzeGRpZ2l0KHRvX2NoYXIzMih3 YyksICFsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsKTsKIH0KIAogc3RhdGljIGJvb2wKQEAg LTE3OSwxMyArMTk1LDEzIEBAIGNoYXJfaXNfY2FzZWRfYnVpbHRpbihjaGFyIGNoLCBwZ19sb2Nh bGVfdCBsb2NhbGUpCiBzdGF0aWMgcGdfd2NoYXIKIHdjX3RvdXBwZXJfYnVpbHRpbihwZ193Y2hh ciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiB1bmljb2RlX3VwcGVyY2FzZV9z aW1wbGUod2MpOworCXJldHVybiB0b19wZ193Y2hhcih1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUo dG9fY2hhcjMyKHdjKSkpOwogfQogCiBzdGF0aWMgcGdfd2NoYXIKIHdjX3RvbG93ZXJfYnVpbHRp bihwZ193Y2hhciB3YywgcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiB1bmljb2RlX2xv d2VyY2FzZV9zaW1wbGUod2MpOworCXJldHVybiB0b19wZ193Y2hhcih1bmljb2RlX2xvd2VyY2Fz ZV9zaW1wbGUodG9fY2hhcjMyKHdjKSkpOwogfQogCiBzdGF0aWMgY29uc3Qgc3RydWN0IGN0eXBl X21ldGhvZHMgY3R5cGVfbWV0aG9kc19idWlsdGluID0gewpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tl bmQvdXRpbHMvYWR0L3ZhcmxlbmEuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMK aW5kZXggMmMzOThjZDllNWMuLjhkNzM1Nzg2ZTUxIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC91 dGlscy9hZHQvdmFybGVuYS5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC92YXJsZW5hLmMK QEAgLTU0MTksMTIgKzU0MTksMTIgQEAgdW5pY29kZV9hc3NpZ25lZChQR19GVU5DVElPTl9BUkdT KQogCQllcmVwb3J0KEVSUk9SLAogCQkJCShlcnJtc2coIlVuaWNvZGUgY2F0ZWdvcml6YXRpb24g Y2FuIG9ubHkgYmUgcGVyZm9ybWVkIGlmIHNlcnZlciBlbmNvZGluZyBpcyBVVEY4IikpKTsKIAot CS8qIGNvbnZlcnQgdG8gcGdfd2NoYXIgKi8KKwkvKiBjb252ZXJ0IHRvIGNoYXIzMl90ICovCiAJ c2l6ZSA9IHBnX21ic3RybGVuX3dpdGhfbGVuKFZBUkRBVEFfQU5ZKGlucHV0KSwgVkFSU0laRV9B TllfRVhIRFIoaW5wdXQpKTsKIAlwID0gKHVuc2lnbmVkIGNoYXIgKikgVkFSREFUQV9BTlkoaW5w dXQpOwogCWZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQogCXsKLQkJcGdfd2NoYXIJdWNo YXIgPSB1dGY4X3RvX3VuaWNvZGUocCk7CisJCWNoYXIzMl90CXVjaGFyID0gdXRmOF90b191bmlj b2RlKHApOwogCQlpbnQJCQljYXRlZ29yeSA9IHVuaWNvZGVfY2F0ZWdvcnkodWNoYXIpOwogCiAJ CWlmIChjYXRlZ29yeSA9PSBQR19VX1VOQVNTSUdORUQpCkBAIC01NDQzLDI0ICs1NDQzLDI0IEBA IHVuaWNvZGVfbm9ybWFsaXplX2Z1bmMoUEdfRlVOQ1RJT05fQVJHUykKIAljaGFyCSAgICpmb3Jt c3RyID0gdGV4dF90b19jc3RyaW5nKFBHX0dFVEFSR19URVhUX1BQKDEpKTsKIAlVbmljb2RlTm9y bWFsaXphdGlvbkZvcm0gZm9ybTsKIAlpbnQJCQlzaXplOwotCXBnX3djaGFyICAgKmlucHV0X2No YXJzOwotCXBnX3djaGFyICAgKm91dHB1dF9jaGFyczsKKwljaGFyMzJfdCAgICppbnB1dF9jaGFy czsKKwljaGFyMzJfdCAgICpvdXRwdXRfY2hhcnM7CiAJdW5zaWduZWQgY2hhciAqcDsKIAl0ZXh0 CSAgICpyZXN1bHQ7CiAJaW50CQkJaTsKIAogCWZvcm0gPSB1bmljb2RlX25vcm1fZm9ybV9mcm9t X3N0cmluZyhmb3Jtc3RyKTsKIAotCS8qIGNvbnZlcnQgdG8gcGdfd2NoYXIgKi8KKwkvKiBjb252 ZXJ0IHRvIGNoYXIzMl90ICovCiAJc2l6ZSA9IHBnX21ic3RybGVuX3dpdGhfbGVuKFZBUkRBVEFf QU5ZKGlucHV0KSwgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpKTsKLQlpbnB1dF9jaGFycyA9IHBh bGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJaW5wdXRfY2hhcnMgPSBwYWxs b2MoKHNpemUgKyAxKSAqIHNpemVvZihjaGFyMzJfdCkpOwogCXAgPSAodW5zaWduZWQgY2hhciAq KSBWQVJEQVRBX0FOWShpbnB1dCk7CiAJZm9yIChpID0gMDsgaSA8IHNpemU7IGkrKykKIAl7CiAJ CWlucHV0X2NoYXJzW2ldID0gdXRmOF90b191bmljb2RlKHApOwogCQlwICs9IHBnX3V0Zl9tYmxl bihwKTsKIAl9Ci0JaW5wdXRfY2hhcnNbaV0gPSAocGdfd2NoYXIpICdcMCc7CisJaW5wdXRfY2hh cnNbaV0gPSAoY2hhcjMyX3QpICdcMCc7CiAJQXNzZXJ0KChjaGFyICopIHAgPT0gVkFSREFUQV9B TlkoaW5wdXQpICsgVkFSU0laRV9BTllfRVhIRFIoaW5wdXQpKTsKIAogCS8qIGFjdGlvbiAqLwpA QCAtNTQ2OCw3ICs1NDY4LDcgQEAgdW5pY29kZV9ub3JtYWxpemVfZnVuYyhQR19GVU5DVElPTl9B UkdTKQogCiAJLyogY29udmVydCBiYWNrIHRvIFVURi04IHN0cmluZyAqLwogCXNpemUgPSAwOwot CWZvciAocGdfd2NoYXIgKndwID0gb3V0cHV0X2NoYXJzOyAqd3A7IHdwKyspCisJZm9yIChjaGFy MzJfdCAqd3AgPSBvdXRwdXRfY2hhcnM7ICp3cDsgd3ArKykKIAl7CiAJCXVuc2lnbmVkIGNoYXIg YnVmWzRdOwogCkBAIC01NDgwLDcgKzU0ODAsNyBAQCB1bmljb2RlX25vcm1hbGl6ZV9mdW5jKFBH X0ZVTkNUSU9OX0FSR1MpCiAJU0VUX1ZBUlNJWkUocmVzdWx0LCBzaXplICsgVkFSSERSU1opOwog CiAJcCA9ICh1bnNpZ25lZCBjaGFyICopIFZBUkRBVEFfQU5ZKHJlc3VsdCk7Ci0JZm9yIChwZ193 Y2hhciAqd3AgPSBvdXRwdXRfY2hhcnM7ICp3cDsgd3ArKykKKwlmb3IgKGNoYXIzMl90ICp3cCA9 IG91dHB1dF9jaGFyczsgKndwOyB3cCsrKQogCXsKIAkJdW5pY29kZV90b191dGY4KCp3cCwgcCk7 CiAJCXAgKz0gcGdfdXRmX21ibGVuKHApOwpAQCAtNTUwOSw4ICs1NTA5LDggQEAgdW5pY29kZV9p c19ub3JtYWxpemVkKFBHX0ZVTkNUSU9OX0FSR1MpCiAJY2hhcgkgICAqZm9ybXN0ciA9IHRleHRf dG9fY3N0cmluZyhQR19HRVRBUkdfVEVYVF9QUCgxKSk7CiAJVW5pY29kZU5vcm1hbGl6YXRpb25G b3JtIGZvcm07CiAJaW50CQkJc2l6ZTsKLQlwZ193Y2hhciAgICppbnB1dF9jaGFyczsKLQlwZ193 Y2hhciAgICpvdXRwdXRfY2hhcnM7CisJY2hhcjMyX3QgICAqaW5wdXRfY2hhcnM7CisJY2hhcjMy X3QgICAqb3V0cHV0X2NoYXJzOwogCXVuc2lnbmVkIGNoYXIgKnA7CiAJaW50CQkJaTsKIAlVbmlj b2RlTm9ybWFsaXphdGlvblFDIHF1aWNrY2hlY2s7CkBAIC01NTE5LDE2ICs1NTE5LDE2IEBAIHVu aWNvZGVfaXNfbm9ybWFsaXplZChQR19GVU5DVElPTl9BUkdTKQogCiAJZm9ybSA9IHVuaWNvZGVf bm9ybV9mb3JtX2Zyb21fc3RyaW5nKGZvcm1zdHIpOwogCi0JLyogY29udmVydCB0byBwZ193Y2hh ciAqLworCS8qIGNvbnZlcnQgdG8gY2hhcjMyX3QgKi8KIAlzaXplID0gcGdfbWJzdHJsZW5fd2l0 aF9sZW4oVkFSREFUQV9BTlkoaW5wdXQpLCBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwotCWlu cHV0X2NoYXJzID0gcGFsbG9jKChzaXplICsgMSkgKiBzaXplb2YocGdfd2NoYXIpKTsKKwlpbnB1 dF9jaGFycyA9IHBhbGxvYygoc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90KSk7CiAJcCA9ICh1 bnNpZ25lZCBjaGFyICopIFZBUkRBVEFfQU5ZKGlucHV0KTsKIAlmb3IgKGkgPSAwOyBpIDwgc2l6 ZTsgaSsrKQogCXsKIAkJaW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7CiAJCXAg Kz0gcGdfdXRmX21ibGVuKHApOwogCX0KLQlpbnB1dF9jaGFyc1tpXSA9IChwZ193Y2hhcikgJ1ww JzsKKwlpbnB1dF9jaGFyc1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKIAlBc3NlcnQoKGNoYXIgKikg cCA9PSBWQVJEQVRBX0FOWShpbnB1dCkgKyBWQVJTSVpFX0FOWV9FWEhEUihpbnB1dCkpOwogCiAJ LyogcXVpY2sgY2hlY2sgKHNlZSBVQVggIzE1KSAqLwpAQCAtNTU0MiwxMSArNTU0MiwxMSBAQCB1 bmljb2RlX2lzX25vcm1hbGl6ZWQoUEdfRlVOQ1RJT05fQVJHUykKIAlvdXRwdXRfY2hhcnMgPSB1 bmljb2RlX25vcm1hbGl6ZShmb3JtLCBpbnB1dF9jaGFycyk7CiAKIAlvdXRwdXRfc2l6ZSA9IDA7 Ci0JZm9yIChwZ193Y2hhciAqd3AgPSBvdXRwdXRfY2hhcnM7ICp3cDsgd3ArKykKKwlmb3IgKGNo YXIzMl90ICp3cCA9IG91dHB1dF9jaGFyczsgKndwOyB3cCsrKQogCQlvdXRwdXRfc2l6ZSsrOwog CiAJcmVzdWx0ID0gKHNpemUgPT0gb3V0cHV0X3NpemUpICYmCi0JCShtZW1jbXAoaW5wdXRfY2hh cnMsIG91dHB1dF9jaGFycywgc2l6ZSAqIHNpemVvZihwZ193Y2hhcikpID09IDApOworCQkobWVt Y21wKGlucHV0X2NoYXJzLCBvdXRwdXRfY2hhcnMsIHNpemUgKiBzaXplb2YoY2hhcjMyX3QpKSA9 PSAwKTsKIAogCVBHX1JFVFVSTl9CT09MKHJlc3VsdCk7CiB9CkBAIC01NjAyLDcgKzU2MDIsNyBA QCB1bmlzdHIoUEdfRlVOQ1RJT05fQVJHUykKIAlpbnQJCQlsZW47CiAJU3RyaW5nSW5mb0RhdGEg c3RyOwogCXRleHQJICAgKnJlc3VsdDsKLQlwZ193Y2hhcglwYWlyX2ZpcnN0ID0gMDsKKwljaGFy MTZfdAlwYWlyX2ZpcnN0ID0gMDsKIAljaGFyCQljYnVmW01BWF9VTklDT0RFX0VRVUlWQUxFTlRf U1RSSU5HICsgMV07CiAKIAlpbnN0ciA9IFZBUkRBVEFfQU5ZKGlucHV0X3RleHQpOwpAQCAtNTYy Niw3ICs1NjI2LDcgQEAgdW5pc3RyKFBHX0ZVTkNUSU9OX0FSR1MpCiAJCQllbHNlIGlmICgobGVu ID49IDUgJiYgaXN4ZGlnaXRzX24oaW5zdHIgKyAxLCA0KSkgfHwKIAkJCQkJIChsZW4gPj0gNiAm JiBpbnN0clsxXSA9PSAndScgJiYgaXN4ZGlnaXRzX24oaW5zdHIgKyAyLCA0KSkpCiAJCQl7Ci0J CQkJcGdfd2NoYXIJdW5pY29kZTsKKwkJCQljaGFyMzJfdAl1bmljb2RlOwogCQkJCWludAkJCW9m ZnNldCA9IGluc3RyWzFdID09ICd1JyA/IDIgOiAxOwogCiAJCQkJdW5pY29kZSA9IGhleHZhbF9u KGluc3RyICsgb2Zmc2V0LCA0KTsKQEAgLTU2NjIsNyArNTY2Miw3IEBAIHVuaXN0cihQR19GVU5D VElPTl9BUkdTKQogCQkJfQogCQkJZWxzZSBpZiAobGVuID49IDggJiYgaW5zdHJbMV0gPT0gJysn ICYmIGlzeGRpZ2l0c19uKGluc3RyICsgMiwgNikpCiAJCQl7Ci0JCQkJcGdfd2NoYXIJdW5pY29k ZTsKKwkJCQljaGFyMzJfdAl1bmljb2RlOwogCiAJCQkJdW5pY29kZSA9IGhleHZhbF9uKGluc3Ry ICsgMiwgNik7CiAKQEAgLTU2OTcsNyArNTY5Nyw3IEBAIHVuaXN0cihQR19GVU5DVElPTl9BUkdT KQogCQkJfQogCQkJZWxzZSBpZiAobGVuID49IDEwICYmIGluc3RyWzFdID09ICdVJyAmJiBpc3hk aWdpdHNfbihpbnN0ciArIDIsIDgpKQogCQkJewotCQkJCXBnX3djaGFyCXVuaWNvZGU7CisJCQkJ Y2hhcjMyX3QJdW5pY29kZTsKIAogCQkJCXVuaWNvZGUgPSBoZXh2YWxfbihpbnN0ciArIDIsIDgp OwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMgYi9zcmMvYmFj a2VuZC91dGlscy9tYi9tYnV0aWxzLmMKaW5kZXggODg2ZWNiYWQ4NzEuLmZiNjI5ZWQ1YzhmIDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC91dGlscy9tYi9tYnV0aWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvdXRpbHMvbWIvbWJ1dGlscy5jCkBAIC04NjIsNyArODYyLDcgQEAgcGVyZm9ybV9kZWZhdWx0 X2VuY29kaW5nX2NvbnZlcnNpb24oY29uc3QgY2hhciAqc3JjLCBpbnQgbGVuLAogICogbWF5IGNh bGwgdGhpcyBvdXRzaWRlIGFueSB0cmFuc2FjdGlvbiwgb3IgaW4gYW4gYWJvcnRlZCB0cmFuc2Fj dGlvbi4KICAqLwogdm9pZAotcGdfdW5pY29kZV90b19zZXJ2ZXIocGdfd2NoYXIgYywgdW5zaWdu ZWQgY2hhciAqcykKK3BnX3VuaWNvZGVfdG9fc2VydmVyKGNoYXIzMl90IGMsIHVuc2lnbmVkIGNo YXIgKnMpCiB7CiAJdW5zaWduZWQgY2hhciBjX2FzX3V0ZjhbTUFYX01VTFRJQllURV9DSEFSX0xF TiArIDFdOwogCWludAkJCWNfYXNfdXRmOF9sZW47CkBAIC05MjQsNyArOTI0LDcgQEAgcGdfdW5p Y29kZV90b19zZXJ2ZXIocGdfd2NoYXIgYywgdW5zaWduZWQgY2hhciAqcykKICAqIGJ1dCBzaW1w bHkgcmV0dXJuIGZhbHNlIG9uIGNvbnZlcnNpb24gZmFpbHVyZS4KICAqLwogYm9vbAotcGdfdW5p Y29kZV90b19zZXJ2ZXJfbm9lcnJvcihwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICpzKQorcGdf dW5pY29kZV90b19zZXJ2ZXJfbm9lcnJvcihjaGFyMzJfdCBjLCB1bnNpZ25lZCBjaGFyICpzKQog ewogCXVuc2lnbmVkIGNoYXIgY19hc191dGY4W01BWF9NVUxUSUJZVEVfQ0hBUl9MRU4gKyAxXTsK IAlpbnQJCQljX2FzX3V0ZjhfbGVuOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi9zYXNscHJlcC5j IGIvc3JjL2NvbW1vbi9zYXNscHJlcC5jCmluZGV4IDk3YmViNDc5NDBiLi4xMDFlOGQ2NWE0ZCAx MDA2NDQKLS0tIGEvc3JjL2NvbW1vbi9zYXNscHJlcC5jCisrKyBiL3NyYy9jb21tb24vc2FzbHBy ZXAuYwpAQCAtNDcsNyArNDcsNyBAQAogCiAvKiBQcm90b3R5cGVzIGZvciBsb2NhbCBmdW5jdGlv bnMgKi8KIHN0YXRpYyBpbnQJY29kZXBvaW50X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25z dCB2b2lkICpiKTsKLXN0YXRpYyBib29sIGlzX2NvZGVfaW5fdGFibGUocGdfd2NoYXIgY29kZSwg Y29uc3QgcGdfd2NoYXIgKm1hcCwgaW50IG1hcHNpemUpOworc3RhdGljIGJvb2wgaXNfY29kZV9p bl90YWJsZShjaGFyMzJfdCBjb2RlLCBjb25zdCBjaGFyMzJfdCAqbWFwLCBpbnQgbWFwc2l6ZSk7 CiBzdGF0aWMgaW50CXBnX3V0Zjhfc3RyaW5nX2xlbihjb25zdCBjaGFyICpzb3VyY2UpOwogCiAv KgpAQCAtNjQsNyArNjQsNyBAQCBzdGF0aWMgaW50CXBnX3V0Zjhfc3RyaW5nX2xlbihjb25zdCBj aGFyICpzb3VyY2UpOwogICoKICAqIFRoZXNlIGFyZSBhbGwgbWFwcGVkIHRvIHRoZSBBU0NJSSBz cGFjZSBjaGFyYWN0ZXIgKFUrMDBBMCkuCiAgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciBub25f YXNjaWlfc3BhY2VfcmFuZ2VzW10gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IG5vbl9hc2NpaV9z cGFjZV9yYW5nZXNbXSA9CiB7CiAJMHgwMEEwLCAweDAwQTAsCiAJMHgxNjgwLCAweDE2ODAsCkBA IC03OSw3ICs3OSw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciBub25fYXNjaWlfc3BhY2VfcmFu Z2VzW10gPQogICoKICAqIElmIGFueSBvZiB0aGVzZSBhcHBlYXIgaW4gdGhlIGlucHV0LCB0aGV5 IGFyZSByZW1vdmVkLgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgY29tbW9ubHlfbWFwcGVk X3RvX25vdGhpbmdfcmFuZ2VzW10gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IGNvbW1vbmx5X21h cHBlZF90b19ub3RoaW5nX3Jhbmdlc1tdID0KIHsKIAkweDAwQUQsIDB4MDBBRCwKIAkweDAzNEYs IDB4MDM0RiwKQEAgLTExNCw3ICsxMTQsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgY29tbW9u bHlfbWFwcGVkX3RvX25vdGhpbmdfcmFuZ2VzW10gPQogICogdGFibGVzLCBzbyBvbmUgY29kZSBt aWdodCBvcmlnaW5hdGUgZnJvbSBtdWx0aXBsZSBzb3VyY2UgdGFibGVzLgogICogQWRqYWNlbnQg cmFuZ2VzIGhhdmUgYWxzbyBiZWVuIG1lcmdlZCB0b2dldGhlciwgdG8gc2F2ZSBzcGFjZS4KICAq Lwotc3RhdGljIGNvbnN0IHBnX3djaGFyIHByb2hpYml0ZWRfb3V0cHV0X3Jhbmdlc1tdID0KK3N0 YXRpYyBjb25zdCBjaGFyMzJfdCBwcm9oaWJpdGVkX291dHB1dF9yYW5nZXNbXSA9CiB7CiAJMHgw MDAwLCAweDAwMUYsCQkJCS8qIEMuMi4xICovCiAJMHgwMDdGLCAweDAwQTAsCQkJCS8qIEMuMS4y LCBDLjIuMSwgQy4yLjIgKi8KQEAgLTE1NSw3ICsxNTUsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2No YXIgcHJvaGliaXRlZF9vdXRwdXRfcmFuZ2VzW10gPQogfTsKIAogLyogQS4xIFVuYXNzaWduZWQg Y29kZSBwb2ludHMgaW4gVW5pY29kZSAzLjIgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hhciB1bmFz c2lnbmVkX2NvZGVwb2ludF9yYW5nZXNbXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgdW5hc3Np Z25lZF9jb2RlcG9pbnRfcmFuZ2VzW10gPQogewogCTB4MDIyMSwgMHgwMjIxLAogCTB4MDIzNCwg MHgwMjRGLApAQCAtNTU2LDcgKzU1Niw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciB1bmFzc2ln bmVkX2NvZGVwb2ludF9yYW5nZXNbXSA9CiB9OwogCiAvKiBELjEgQ2hhcmFjdGVycyB3aXRoIGJp ZGlyZWN0aW9uYWwgcHJvcGVydHkgIlIiIG9yICJBTCIgKi8KLXN0YXRpYyBjb25zdCBwZ193Y2hh ciBSYW5kQUxDYXRfY29kZXBvaW50X3Jhbmdlc1tdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBS YW5kQUxDYXRfY29kZXBvaW50X3Jhbmdlc1tdID0KIHsKIAkweDA1QkUsIDB4MDVCRSwKIAkweDA1 QzAsIDB4MDVDMCwKQEAgLTU5NSw3ICs1OTUsNyBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgUmFu ZEFMQ2F0X2NvZGVwb2ludF9yYW5nZXNbXSA9CiB9OwogCiAvKiBELjIgQ2hhcmFjdGVycyB3aXRo IGJpZGlyZWN0aW9uYWwgcHJvcGVydHkgIkwiICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIgTENh dF9jb2RlcG9pbnRfcmFuZ2VzW10gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IExDYXRfY29kZXBv aW50X3Jhbmdlc1tdID0KIHsKIAkweDAwNDEsIDB4MDA1QSwKIAkweDAwNjEsIDB4MDA3QSwKQEAg LTk2OCw4ICs5NjgsOCBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgTENhdF9jb2RlcG9pbnRfcmFu Z2VzW10gPQogc3RhdGljIGludAogY29kZXBvaW50X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBj b25zdCB2b2lkICpiKQogewotCWNvbnN0IHBnX3djaGFyICprZXkgPSAoY29uc3QgcGdfd2NoYXIg KikgYTsKLQljb25zdCBwZ193Y2hhciAqcmFuZ2UgPSAoY29uc3QgcGdfd2NoYXIgKikgYjsKKwlj b25zdCBjaGFyMzJfdCAqa2V5ID0gKGNvbnN0IGNoYXIzMl90ICopIGE7CisJY29uc3QgY2hhcjMy X3QgKnJhbmdlID0gKGNvbnN0IGNoYXIzMl90ICopIGI7CiAKIAlpZiAoKmtleSA8IHJhbmdlWzBd KQogCQlyZXR1cm4gLTE7CQkJCS8qIGxlc3MgdGhhbiBsb3dlciBib3VuZCAqLwpAQCAtOTgwLDE0 ICs5ODAsMTQgQEAgY29kZXBvaW50X3JhbmdlX2NtcChjb25zdCB2b2lkICphLCBjb25zdCB2b2lk ICpiKQogfQogCiBzdGF0aWMgYm9vbAotaXNfY29kZV9pbl90YWJsZShwZ193Y2hhciBjb2RlLCBj b25zdCBwZ193Y2hhciAqbWFwLCBpbnQgbWFwc2l6ZSkKK2lzX2NvZGVfaW5fdGFibGUoY2hhcjMy X3QgY29kZSwgY29uc3QgY2hhcjMyX3QgKm1hcCwgaW50IG1hcHNpemUpCiB7CiAJQXNzZXJ0KG1h cHNpemUgJSAyID09IDApOwogCiAJaWYgKGNvZGUgPCBtYXBbMF0gfHwgY29kZSA+IG1hcFttYXBz aXplIC0gMV0pCiAJCXJldHVybiBmYWxzZTsKIAotCWlmIChic2VhcmNoKCZjb2RlLCBtYXAsIG1h cHNpemUgLyAyLCBzaXplb2YocGdfd2NoYXIpICogMiwKKwlpZiAoYnNlYXJjaCgmY29kZSwgbWFw LCBtYXBzaXplIC8gMiwgc2l6ZW9mKGNoYXIzMl90KSAqIDIsCiAJCQkJY29kZXBvaW50X3Jhbmdl X2NtcCkpCiAJCXJldHVybiB0cnVlOwogCWVsc2UKQEAgLTEwNDYsOCArMTA0Niw4IEBAIHBnX3V0 Zjhfc3RyaW5nX2xlbihjb25zdCBjaGFyICpzb3VyY2UpCiBwZ19zYXNscHJlcF9yYwogcGdfc2Fz bHByZXAoY29uc3QgY2hhciAqaW5wdXQsIGNoYXIgKipvdXRwdXQpCiB7Ci0JcGdfd2NoYXIgICAq aW5wdXRfY2hhcnMgPSBOVUxMOwotCXBnX3djaGFyICAgKm91dHB1dF9jaGFycyA9IE5VTEw7CisJ Y2hhcjMyX3QgICAqaW5wdXRfY2hhcnMgPSBOVUxMOworCWNoYXIzMl90ICAgKm91dHB1dF9jaGFy cyA9IE5VTEw7CiAJaW50CQkJaW5wdXRfc2l6ZTsKIAljaGFyCSAgICpyZXN1bHQ7CiAJaW50CQkJ cmVzdWx0X3NpemU7CkBAIC0xMDU1LDcgKzEwNTUsNyBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFy ICppbnB1dCwgY2hhciAqKm91dHB1dCkKIAlpbnQJCQlpOwogCWJvb2wJCWNvbnRhaW5zX1JhbmRB TENhdDsKIAl1bnNpZ25lZCBjaGFyICpwOwotCXBnX3djaGFyICAgKndwOworCWNoYXIzMl90ICAg KndwOwogCiAJLyogRW5zdXJlIHdlIHJldHVybiAqb3V0cHV0IGFzIE5VTEwgb24gZmFpbHVyZSAq LwogCSpvdXRwdXQgPSBOVUxMOwpAQCAtMTA4MCwxMCArMTA4MCwxMCBAQCBwZ19zYXNscHJlcChj b25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkKIAlpbnB1dF9zaXplID0gcGdfdXRmOF9z dHJpbmdfbGVuKGlucHV0KTsKIAlpZiAoaW5wdXRfc2l6ZSA8IDApCiAJCXJldHVybiBTQVNMUFJF UF9JTlZBTElEX1VURjg7Ci0JaWYgKGlucHV0X3NpemUgPj0gTWF4QWxsb2NTaXplIC8gc2l6ZW9m KHBnX3djaGFyKSkKKwlpZiAoaW5wdXRfc2l6ZSA+PSBNYXhBbGxvY1NpemUgLyBzaXplb2YoY2hh cjMyX3QpKQogCQlnb3RvIG9vbTsKIAotCWlucHV0X2NoYXJzID0gQUxMT0MoKGlucHV0X3NpemUg KyAxKSAqIHNpemVvZihwZ193Y2hhcikpOworCWlucHV0X2NoYXJzID0gQUxMT0MoKGlucHV0X3Np emUgKyAxKSAqIHNpemVvZihjaGFyMzJfdCkpOwogCWlmICghaW5wdXRfY2hhcnMpCiAJCWdvdG8g b29tOwogCkBAIC0xMDkzLDcgKzEwOTMsNyBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1 dCwgY2hhciAqKm91dHB1dCkKIAkJaW5wdXRfY2hhcnNbaV0gPSB1dGY4X3RvX3VuaWNvZGUocCk7 CiAJCXAgKz0gcGdfdXRmX21ibGVuKHApOwogCX0KLQlpbnB1dF9jaGFyc1tpXSA9IChwZ193Y2hh cikgJ1wwJzsKKwlpbnB1dF9jaGFyc1tpXSA9IChjaGFyMzJfdCkgJ1wwJzsKIAogCS8qCiAJICog VGhlIHN0ZXBzIGJlbG93IGNvcnJlc3BvbmQgdG8gdGhlIHN0ZXBzIGxpc3RlZCBpbiBbUkZDMzQ1 NF0sIFNlY3Rpb24KQEAgLTExMDcsNyArMTEwNyw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIg KmlucHV0LCBjaGFyICoqb3V0cHV0KQogCWNvdW50ID0gMDsKIAlmb3IgKGkgPSAwOyBpIDwgaW5w dXRfc2l6ZTsgaSsrKQogCXsKLQkJcGdfd2NoYXIJY29kZSA9IGlucHV0X2NoYXJzW2ldOworCQlj aGFyMzJfdAljb2RlID0gaW5wdXRfY2hhcnNbaV07CiAKIAkJaWYgKElTX0NPREVfSU5fVEFCTEUo Y29kZSwgbm9uX2FzY2lpX3NwYWNlX3JhbmdlcykpCiAJCQlpbnB1dF9jaGFyc1tjb3VudCsrXSA9 IDB4MDAyMDsKQEAgLTExMTgsNyArMTExOCw3IEBAIHBnX3Nhc2xwcmVwKGNvbnN0IGNoYXIgKmlu cHV0LCBjaGFyICoqb3V0cHV0KQogCQllbHNlCiAJCQlpbnB1dF9jaGFyc1tjb3VudCsrXSA9IGNv ZGU7CiAJfQotCWlucHV0X2NoYXJzW2NvdW50XSA9IChwZ193Y2hhcikgJ1wwJzsKKwlpbnB1dF9j aGFyc1tjb3VudF0gPSAoY2hhcjMyX3QpICdcMCc7CiAJaW5wdXRfc2l6ZSA9IGNvdW50OwogCiAJ aWYgKGlucHV0X3NpemUgPT0gMCkKQEAgLTExMzgsNyArMTEzOCw3IEBAIHBnX3Nhc2xwcmVwKGNv bnN0IGNoYXIgKmlucHV0LCBjaGFyICoqb3V0cHV0KQogCSAqLwogCWZvciAoaSA9IDA7IGkgPCBp bnB1dF9zaXplOyBpKyspCiAJewotCQlwZ193Y2hhcgljb2RlID0gaW5wdXRfY2hhcnNbaV07CisJ CWNoYXIzMl90CWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKIAogCQlpZiAoSVNfQ09ERV9JTl9UQUJM RShjb2RlLCBwcm9oaWJpdGVkX291dHB1dF9yYW5nZXMpKQogCQkJZ290byBwcm9oaWJpdGVkOwpA QCAtMTE3MCw3ICsxMTcwLDcgQEAgcGdfc2FzbHByZXAoY29uc3QgY2hhciAqaW5wdXQsIGNoYXIg KipvdXRwdXQpCiAJY29udGFpbnNfUmFuZEFMQ2F0ID0gZmFsc2U7CiAJZm9yIChpID0gMDsgaSA8 IGlucHV0X3NpemU7IGkrKykKIAl7Ci0JCXBnX3djaGFyCWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsK KwkJY2hhcjMyX3QJY29kZSA9IGlucHV0X2NoYXJzW2ldOwogCiAJCWlmIChJU19DT0RFX0lOX1RB QkxFKGNvZGUsIFJhbmRBTENhdF9jb2RlcG9pbnRfcmFuZ2VzKSkKIAkJewpAQCAtMTE4MSwxMiAr MTE4MSwxMiBAQCBwZ19zYXNscHJlcChjb25zdCBjaGFyICppbnB1dCwgY2hhciAqKm91dHB1dCkK IAogCWlmIChjb250YWluc19SYW5kQUxDYXQpCiAJewotCQlwZ193Y2hhcglmaXJzdCA9IGlucHV0 X2NoYXJzWzBdOwotCQlwZ193Y2hhcglsYXN0ID0gaW5wdXRfY2hhcnNbaW5wdXRfc2l6ZSAtIDFd OworCQljaGFyMzJfdAlmaXJzdCA9IGlucHV0X2NoYXJzWzBdOworCQljaGFyMzJfdAlsYXN0ID0g aW5wdXRfY2hhcnNbaW5wdXRfc2l6ZSAtIDFdOwogCiAJCWZvciAoaSA9IDA7IGkgPCBpbnB1dF9z aXplOyBpKyspCiAJCXsKLQkJCXBnX3djaGFyCWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKKwkJCWNo YXIzMl90CWNvZGUgPSBpbnB1dF9jaGFyc1tpXTsKIAogCQkJaWYgKElTX0NPREVfSU5fVEFCTEUo Y29kZSwgTENhdF9jb2RlcG9pbnRfcmFuZ2VzKSkKIAkJCQlnb3RvIHByb2hpYml0ZWQ7CmRpZmYg LS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNv ZGUvY2FzZV90ZXN0LmMKaW5kZXggZmRmYjYyZTg1NTIuLjAwZDRmODVlNWE1IDEwMDY0NAotLS0g YS9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2Rl L2Nhc2VfdGVzdC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVf Y2FzZS5oIgogI2luY2x1ZGUgImNvbW1vbi91bmljb2RlX2NhdGVnb3J5LmgiCiAjaW5jbHVkZSAi Y29tbW9uL3VuaWNvZGVfdmVyc2lvbi5oIgorI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCiAKIC8q IGVub3VnaCB0byBob2xkIGxhcmdlc3Qgc291cmNlIG9yIHJlc3VsdCBzdHJpbmcsIGluY2x1ZGlu ZyBOVUwgKi8KICNkZWZpbmUgQlVGU1ogMjU2CkBAIC01NCw3ICs1NSw3IEBAIGluaXRjYXBfd2Ju ZXh0KHZvaWQgKnN0YXRlKQogCXdoaWxlICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4g JiYKIAkJICAgd2JzdGF0ZS0+c3RyW3dic3RhdGUtPm9mZnNldF0gIT0gJ1wwJykKIAl7Ci0JCXBn X3djaGFyCXUgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3Ry ICsKKwkJY2hhcjMyX3QJdSA9IHV0ZjhfdG9fdW5pY29kZSgodW5zaWduZWQgY2hhciAqKSB3YnN0 YXRlLT5zdHIgKwogCQkJCQkJCQkJCXdic3RhdGUtPm9mZnNldCk7CiAJCWJvb2wJCWN1cnJfYWxu dW0gPSBwZ191X2lzYWxudW0odSwgd2JzdGF0ZS0+cG9zaXgpOwogCkBAIC03NywxNiArNzgsMTYg QEAgaW5pdGNhcF93Ym5leHQodm9pZCAqc3RhdGUpCiAjaWZkZWYgVVNFX0lDVQogCiBzdGF0aWMg dm9pZAotaWN1X3Rlc3Rfc2ltcGxlKHBnX3djaGFyIGNvZGUpCitpY3VfdGVzdF9zaW1wbGUoY2hh cjMyX3QgY29kZSkKIHsKLQlwZ193Y2hhcglsb3dlciA9IHVuaWNvZGVfbG93ZXJjYXNlX3NpbXBs ZShjb2RlKTsKLQlwZ193Y2hhcgl0aXRsZSA9IHVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjb2Rl KTsKLQlwZ193Y2hhcgl1cHBlciA9IHVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZShjb2RlKTsKLQlw Z193Y2hhcglmb2xkID0gdW5pY29kZV9jYXNlZm9sZF9zaW1wbGUoY29kZSk7Ci0JcGdfd2NoYXIJ aWN1bG93ZXIgPSB1X3RvbG93ZXIoY29kZSk7Ci0JcGdfd2NoYXIJaWN1dGl0bGUgPSB1X3RvdGl0 bGUoY29kZSk7Ci0JcGdfd2NoYXIJaWN1dXBwZXIgPSB1X3RvdXBwZXIoY29kZSk7Ci0JcGdfd2No YXIJaWN1Zm9sZCA9IHVfZm9sZENhc2UoY29kZSwgVV9GT0xEX0NBU0VfREVGQVVMVCk7CisJY2hh cjMyX3QJbG93ZXIgPSB1bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJ dGl0bGUgPSB1bmljb2RlX3RpdGxlY2FzZV9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJdXBwZXIg PSB1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUoY29kZSk7CisJY2hhcjMyX3QJZm9sZCA9IHVuaWNv ZGVfY2FzZWZvbGRfc2ltcGxlKGNvZGUpOworCWNoYXIzMl90CWljdWxvd2VyID0gdV90b2xvd2Vy KGNvZGUpOworCWNoYXIzMl90CWljdXRpdGxlID0gdV90b3RpdGxlKGNvZGUpOworCWNoYXIzMl90 CWljdXVwcGVyID0gdV90b3VwcGVyKGNvZGUpOworCWNoYXIzMl90CWljdWZvbGQgPSB1X2ZvbGRD YXNlKGNvZGUsIFVfRk9MRF9DQVNFX0RFRkFVTFQpOwogCiAJaWYgKGxvd2VyICE9IGljdWxvd2Vy IHx8IHRpdGxlICE9IGljdXRpdGxlIHx8IHVwcGVyICE9IGljdXVwcGVyIHx8CiAJCWZvbGQgIT0g aWN1Zm9sZCkKQEAgLTE3Miw3ICsxNzMsNyBAQCB0ZXN0X2ljdSh2b2lkKQogCWludAkJCXN1Y2Nl c3NmdWwgPSAwOwogCWludAkJCXNraXBwZWRfbWlzbWF0Y2ggPSAwOwogCi0JZm9yIChwZ193Y2hh ciBjb2RlID0gMDsgY29kZSA8PSAweDEwZmZmZjsgY29kZSsrKQorCWZvciAoY2hhcjMyX3QgY29k ZSA9IDA7IGNvZGUgPD0gMHgxMGZmZmY7IGNvZGUrKykKIAl7CiAJCXBnX3VuaWNvZGVfY2F0ZWdv cnkgY2F0ZWdvcnkgPSB1bmljb2RlX2NhdGVnb3J5KGNvZGUpOwogCmRpZmYgLS1naXQgYS9zcmMv Y29tbW9uL3VuaWNvZGUvY2F0ZWdvcnlfdGVzdC5jIGIvc3JjL2NvbW1vbi91bmljb2RlL2NhdGVn b3J5X3Rlc3QuYwppbmRleCA1ZDM3YmEzOTE5Ni4uMWU4YzFmNzkwNWYgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb21tb24vdW5pY29kZS9jYXRlZ29yeV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2Rl L2NhdGVnb3J5X3Rlc3QuYwpAQCAtMjIsNiArMjIsNyBAQAogCiAjaW5jbHVkZSAiY29tbW9uL3Vu aWNvZGVfY2F0ZWdvcnkuaCIKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV92ZXJzaW9uLmgiCisj aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKIAogc3RhdGljIGludAlwZ191bmljb2RlX3ZlcnNpb24g PSAwOwogI2lmZGVmIFVTRV9JQ1UKQEAgLTU5LDcgKzYwLDcgQEAgaWN1X3Rlc3QoKQogCWludAkJ CXBnX3NraXBwZWRfY29kZXBvaW50cyA9IDA7CiAJaW50CQkJaWN1X3NraXBwZWRfY29kZXBvaW50 cyA9IDA7CiAKLQlmb3IgKHBnX3djaGFyIGNvZGUgPSAwOyBjb2RlIDw9IDB4MTBmZmZmOyBjb2Rl KyspCisJZm9yIChjaGFyMzJfdCBjb2RlID0gMDsgY29kZSA8PSAweDEwZmZmZjsgY29kZSsrKQog CXsKIAkJdWludDhfdAkJcGdfY2F0ZWdvcnkgPSB1bmljb2RlX2NhdGVnb3J5KGNvZGUpOwogCQl1 aW50OF90CQlpY3VfY2F0ZWdvcnkgPSB1X2NoYXJUeXBlKGNvZGUpOwpkaWZmIC0tZ2l0IGEvc3Jj L2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLW5vcm1fdGVzdF90YWJsZS5wbCBiL3NyYy9jb21tb24v dW5pY29kZS9nZW5lcmF0ZS1ub3JtX3Rlc3RfdGFibGUucGwKaW5kZXggMWI0MDFiZTk0MDkuLjFh OGI5MDhmZjMzIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtbm9ybV90 ZXN0X3RhYmxlLnBsCisrKyBiL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS1ub3JtX3Rlc3Rf dGFibGUucGwKQEAgLTQ3LDggKzQ3LDggQEAgcHJpbnQgJE9VVFBVVCA8PEhFQURFUjsKIHR5cGVk ZWYgc3RydWN0CiB7CiAJaW50CQkJbGluZW51bTsKLQlwZ193Y2hhcglpbnB1dFs1MF07Ci0JcGdf d2NoYXIJb3V0cHV0WzRdWzUwXTsKKwljaGFyMzJfdAlpbnB1dFs1MF07CisJY2hhcjMyX3QJb3V0 cHV0WzRdWzUwXTsKIH0gcGdfdW5pY29kZV90ZXN0OwogCiAvKiB0ZXN0IHRhYmxlICovCmRpZmYg LS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxlLnBs IGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbAppbmRl eCA1ZDlkZGQ2MjgwMy4uZjcxZWIyNWM5NGUgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29k ZS9nZW5lcmF0ZS11bmljb2RlX2Nhc2VfdGFibGUucGwKKysrIGIvc3JjL2NvbW1vbi91bmljb2Rl L2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5wbApAQCAtMjcwLDcgKzI3MCw2IEBAIHByaW50 ICRPVCA8PCJFT1MiOwogICovCiAKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXNlLmgiCi0j aW5jbHVkZSAibWIvcGdfd2NoYXIuaCIKIAogLyoKICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBj b2RlcG9pbnRzIHRoYXQgY2FuIHJlc3VsdCBmcm9tIGNhc2UgbWFwcGluZwpAQCAtMjk3LDcgKzI5 Niw3IEBAIHR5cGVkZWYgZW51bQogdHlwZWRlZiBzdHJ1Y3QKIHsKIAlpbnQxNgkJY29uZGl0aW9u czsKLQlwZ193Y2hhcgltYXBbTkNhc2VLaW5kXVtNQVhfQ0FTRV9FWFBBTlNJT05dOworCWNoYXIz Ml90CW1hcFtOQ2FzZUtpbmRdW01BWF9DQVNFX0VYUEFOU0lPTl07CiB9IHBnX3NwZWNpYWxfY2Fz ZTsKIAogLyoKQEAgLTQzMCw3ICs0MjksNyBAQCBmb3JlYWNoIG15ICRraW5kICgnbG93ZXInLCAn dGl0bGUnLCAndXBwZXInLCAnZm9sZCcpCiAgKiBUaGUgZW50cnkgY2FzZV9tYXBfJHtraW5kfVtj YXNlX2luZGV4KGNvZGVwb2ludCldIGlzIHRoZSBtYXBwaW5nIGZvciB0aGUKICAqIGdpdmVuIGNv ZGVwb2ludC4KICAqLwotc3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwXyRraW5kXFskaW5k ZXhcXSA9CitzdGF0aWMgY29uc3QgY2hhcjMyX3QgY2FzZV9tYXBfJGtpbmRcWyRpbmRleFxdID0K IHsKIEVPUwogCkBAIC01MDIsNyArNTAxLDcgQEAgcHJpbnQgJE9UIDw8IkVPUyI7CiAgKiB0aGUg b2Zmc2V0IGludG8gdGhlIG1hcHBpbmcgdGFibGVzLgogICovCiBzdGF0aWMgaW5saW5lIHVpbnQx NgotY2FzZV9pbmRleChwZ193Y2hhciBjcCkKK2Nhc2VfaW5kZXgoY2hhcjMyX3QgY3ApCiB7CiAJ LyogRmFzdCBwYXRoIGZvciBjb2RlcG9pbnRzIDwgJGZhc3RwYXRoX2xpbWl0ICovCiAJaWYgKGNw IDwgJGZhc3RwYXRoX2xpbWl0KQpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVy YXRlLXVuaWNvZGVfY2F0ZWdvcnlfdGFibGUucGwgYi9zcmMvY29tbW9uL3VuaWNvZGUvZ2VuZXJh dGUtdW5pY29kZV9jYXRlZ29yeV90YWJsZS5wbAppbmRleCBhYmFiNWNkOTY5Ni4uN2UwOTRiMTM3 MjAgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2NhdGVn b3J5X3RhYmxlLnBsCisrKyBiL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nh dGVnb3J5X3RhYmxlLnBsCkBAIC0zNjYsMTUgKzM2NiwxNSBAQCBwcmludCAkT1QgPDwiRU9TIjsK ICAqLwogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUgY29k ZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJY2hh cjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0OwkJ CS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiAJdWludDgJCWNhdGVnb3J5OwkJLyogR2VuZXJhbCBD YXRlZ29yeSAqLwogfSBwZ19jYXRlZ29yeV9yYW5nZTsKIAogdHlwZWRlZiBzdHJ1Y3QKIHsKLQl1 aW50MzIJCWZpcnN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCi0JdWludDMyCQlsYXN0OwkJ CS8qIFVuaWNvZGUgY29kZXBvaW50ICovCisJY2hhcjMyX3QJZmlyc3Q7CQkJLyogVW5pY29kZSBj b2RlcG9pbnQgKi8KKwljaGFyMzJfdAlsYXN0OwkJCS8qIFVuaWNvZGUgY29kZXBvaW50ICovCiB9 IHBnX3VuaWNvZGVfcmFuZ2U7CiAKIHR5cGVkZWYgc3RydWN0CmRpZmYgLS1naXQgYS9zcmMvY29t bW9uL3VuaWNvZGUvbm9ybV90ZXN0LmMgYi9zcmMvY29tbW9uL3VuaWNvZGUvbm9ybV90ZXN0LmMK aW5kZXggMjViYzU5NDYzZjIuLjA1ODgxN2YxNzE5IDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3Vu aWNvZGUvbm9ybV90ZXN0LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL25vcm1fdGVzdC5jCkBA IC0yMCw3ICsyMCw3IEBACiAjaW5jbHVkZSAibm9ybV90ZXN0X3RhYmxlLmgiCiAKIHN0YXRpYyBj aGFyICoKLXByaW50X3djaGFyX3N0cihjb25zdCBwZ193Y2hhciAqcykKK3ByaW50X3djaGFyX3N0 cihjb25zdCBjaGFyMzJfdCAqcykKIHsKICNkZWZpbmUgQlVGX0RJR0lUUyA1MAogCXN0YXRpYyBj aGFyIGJ1ZltCVUZfRElHSVRTICogMTEgKyAxXTsKQEAgLTQxLDcgKzQxLDcgQEAgcHJpbnRfd2No YXJfc3RyKGNvbnN0IHBnX3djaGFyICpzKQogfQogCiBzdGF0aWMgaW50Ci1wZ193Y3NjbXAoY29u c3QgcGdfd2NoYXIgKnMxLCBjb25zdCBwZ193Y2hhciAqczIpCitwZ193Y3NjbXAoY29uc3QgY2hh cjMyX3QgKnMxLCBjb25zdCBjaGFyMzJfdCAqczIpCiB7CiAJZm9yICg7OykKIAl7CkBAIC02NSw3 ICs2NSw3IEBAIG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogCXsKIAkJZm9yIChpbnQgZm9y bSA9IDA7IGZvcm0gPCA0OyBmb3JtKyspCiAJCXsKLQkJCXBnX3djaGFyICAgKnJlc3VsdDsKKwkJ CWNoYXIzMl90ICAgKnJlc3VsdDsKIAogCQkJcmVzdWx0ID0gdW5pY29kZV9ub3JtYWxpemUoZm9y bSwgdGVzdC0+aW5wdXQpOwogCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5j IGIvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYwppbmRleCAwNzNmYWY2YTBkNS4uZTVlNDk0ZGI0 M2MgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1v bi91bmljb2RlX2Nhc2UuYwpAQCAtMzAsNyArMzAsNyBAQCBlbnVtIENhc2VNYXBSZXN1bHQKIC8q CiAgKiBNYXAgZm9yIGVhY2ggY2FzZSBraW5kLgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIg KmNvbnN0IGNhc2VraW5kX21hcFtOQ2FzZUtpbmRdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCAq Y29uc3QgY2FzZWtpbmRfbWFwW05DYXNlS2luZF0gPQogewogCVtDYXNlTG93ZXJdID0gY2FzZV9t YXBfbG93ZXIsCiAJW0Nhc2VUaXRsZV0gPSBjYXNlX21hcF90aXRsZSwKQEAgLTM4LDQyICszOCw0 MiBAQCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgKmNvbnN0IGNhc2VraW5kX21hcFtOQ2FzZUtpbmRd ID0KIAlbQ2FzZUZvbGRdID0gY2FzZV9tYXBfZm9sZCwKIH07CiAKLXN0YXRpYyBwZ193Y2hhciBm aW5kX2Nhc2VfbWFwKHBnX3djaGFyIHVjcywgY29uc3QgcGdfd2NoYXIgKm1hcCk7CitzdGF0aWMg Y2hhcjMyX3QgZmluZF9jYXNlX21hcChjaGFyMzJfdCB1Y3MsIGNvbnN0IGNoYXIzMl90ICptYXAp Owogc3RhdGljIHNpemVfdCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJCQkJCSAgIENhc2VLaW5kIHN0cl9j YXNla2luZCwgYm9vbCBmdWxsLCBXb3JkQm91bmRhcnlOZXh0IHdibmV4dCwKIAkJCQkJCSAgIHZv aWQgKndic3RhdGUpOwotc3RhdGljIGVudW0gQ2FzZU1hcFJlc3VsdCBjYXNlbWFwKHBnX3djaGFy IHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAorc3RhdGljIGVudW0gQ2FzZU1hcFJl c3VsdCBjYXNlbWFwKGNoYXIzMl90IHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAog CQkJCQkJCQkgIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwgc2l6ZV90IHNyY29mZiwK LQkJCQkJCQkJICBwZ193Y2hhciAqc2ltcGxlLCBjb25zdCBwZ193Y2hhciAqKnNwZWNpYWwpOwor CQkJCQkJCQkgIGNoYXIzMl90ICpzaW1wbGUsIGNvbnN0IGNoYXIzMl90ICoqc3BlY2lhbCk7CiAK LXBnX3djaGFyCi11bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUocGdfd2NoYXIgY29kZSkKK2NoYXIz Ml90Cit1bmljb2RlX2xvd2VyY2FzZV9zaW1wbGUoY2hhcjMyX3QgY29kZSkKIHsKLQlwZ193Y2hh cgljcCA9IGZpbmRfY2FzZV9tYXAoY29kZSwgY2FzZV9tYXBfbG93ZXIpOworCWNoYXIzMl90CWNw ID0gZmluZF9jYXNlX21hcChjb2RlLCBjYXNlX21hcF9sb3dlcik7CiAKIAlyZXR1cm4gY3AgIT0g MCA/IGNwIDogY29kZTsKIH0KIAotcGdfd2NoYXIKLXVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShw Z193Y2hhciBjb2RlKQorY2hhcjMyX3QKK3VuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjaGFyMzJf dCBjb2RlKQogewotCXBnX3djaGFyCWNwID0gZmluZF9jYXNlX21hcChjb2RlLCBjYXNlX21hcF90 aXRsZSk7CisJY2hhcjMyX3QJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX3RpdGxl KTsKIAogCXJldHVybiBjcCAhPSAwID8gY3AgOiBjb2RlOwogfQogCi1wZ193Y2hhcgotdW5pY29k ZV91cHBlcmNhc2Vfc2ltcGxlKHBnX3djaGFyIGNvZGUpCitjaGFyMzJfdAordW5pY29kZV91cHBl cmNhc2Vfc2ltcGxlKGNoYXIzMl90IGNvZGUpCiB7Ci0JcGdfd2NoYXIJY3AgPSBmaW5kX2Nhc2Vf bWFwKGNvZGUsIGNhc2VfbWFwX3VwcGVyKTsKKwljaGFyMzJfdAljcCA9IGZpbmRfY2FzZV9tYXAo Y29kZSwgY2FzZV9tYXBfdXBwZXIpOwogCiAJcmV0dXJuIGNwICE9IDAgPyBjcCA6IGNvZGU7CiB9 CiAKLXBnX3djaGFyCi11bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShwZ193Y2hhciBjb2RlKQorY2hh cjMyX3QKK3VuaWNvZGVfY2FzZWZvbGRfc2ltcGxlKGNoYXIzMl90IGNvZGUpCiB7Ci0JcGdfd2No YXIJY3AgPSBmaW5kX2Nhc2VfbWFwKGNvZGUsIGNhc2VfbWFwX2ZvbGQpOworCWNoYXIzMl90CWNw ID0gZmluZF9jYXNlX21hcChjb2RlLCBjYXNlX21hcF9mb2xkKTsKIAogCXJldHVybiBjcCAhPSAw ID8gY3AgOiBjb2RlOwogfQpAQCAtMjMxLDEwICsyMzEsMTAgQEAgY29udmVydF9jYXNlKGNoYXIg KmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc3NpemVfdCBzcmNsZW4sCiAK IAl3aGlsZSAoKHNyY2xlbiA8IDAgfHwgc3Jjb2ZmIDwgc3JjbGVuKSAmJiBzcmNbc3Jjb2ZmXSAh PSAnXDAnKQogCXsKLQkJcGdfd2NoYXIJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKHVuc2lnbmVkIGNo YXIgKikgc3JjICsgc3Jjb2ZmKTsKKwkJY2hhcjMyX3QJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKHVu c2lnbmVkIGNoYXIgKikgc3JjICsgc3Jjb2ZmKTsKIAkJaW50CQkJdTFsZW4gPSB1bmljb2RlX3V0 ZjhsZW4odTEpOwotCQlwZ193Y2hhcglzaW1wbGUgPSAwOwotCQljb25zdCBwZ193Y2hhciAqc3Bl Y2lhbCA9IE5VTEw7CisJCWNoYXIzMl90CXNpbXBsZSA9IDA7CisJCWNvbnN0IGNoYXIzMl90ICpz cGVjaWFsID0gTlVMTDsKIAkJZW51bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXBfcmVzdWx0OwogCiAJ CWlmIChzdHJfY2FzZWtpbmQgPT0gQ2FzZVRpdGxlKQpAQCAtMjY1LDggKzI2NSw4IEBAIGNvbnZl cnRfY2FzZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNzaXpl X3Qgc3JjbGVuLAogCQkJY2FzZSBDQVNFTUFQX1NJTVBMRToKIAkJCQl7CiAJCQkJCS8qIHJlcGxh Y2Ugd2l0aCBzaW5nbGUgY2hhcmFjdGVyICovCi0JCQkJCXBnX3djaGFyCXUyID0gc2ltcGxlOwot CQkJCQlwZ193Y2hhcgl1MmxlbiA9IHVuaWNvZGVfdXRmOGxlbih1Mik7CisJCQkJCWNoYXIzMl90 CXUyID0gc2ltcGxlOworCQkJCQljaGFyMzJfdAl1MmxlbiA9IHVuaWNvZGVfdXRmOGxlbih1Mik7 CiAKIAkJCQkJQXNzZXJ0KHNwZWNpYWwgPT0gTlVMTCk7CiAJCQkJCWlmIChyZXN1bHRfbGVuICsg dTJsZW4gPD0gZHN0c2l6ZSkKQEAgLTI4MCw3ICsyODAsNyBAQCBjb252ZXJ0X2Nhc2UoY2hhciAq ZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzc2l6ZV90IHNyY2xlbiwKIAkJ CQlBc3NlcnQoc2ltcGxlID09IDApOwogCQkJCWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0NBU0Vf RVhQQU5TSU9OICYmIHNwZWNpYWxbaV07IGkrKykKIAkJCQl7Ci0JCQkJCXBnX3djaGFyCXUyID0g c3BlY2lhbFtpXTsKKwkJCQkJY2hhcjMyX3QJdTIgPSBzcGVjaWFsW2ldOwogCQkJCQlzaXplX3QJ CXUybGVuID0gdW5pY29kZV91dGY4bGVuKHUyKTsKIAogCQkJCQlpZiAocmVzdWx0X2xlbiArIHUy bGVuIDw9IGRzdHNpemUpCkBAIC0zMjAsNyArMzIwLDcgQEAgY2hlY2tfZmluYWxfc2lnbWEoY29u c3QgdW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCXsKIAkJ aWYgKChzdHJbaV0gJiAweDgwKSA9PSAwIHx8IChzdHJbaV0gJiAweEMwKSA9PSAweEMwKQogCQl7 Ci0JCQlwZ193Y2hhcgljdXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOworCQkJY2hhcjMy X3QJY3VyciA9IHV0ZjhfdG9fdW5pY29kZShzdHIgKyBpKTsKIAogCQkJaWYgKHBnX3VfcHJvcF9j YXNlX2lnbm9yYWJsZShjdXJyKSkKIAkJCQljb250aW51ZTsKQEAgLTM0NCw3ICszNDQsNyBAQCBj aGVja19maW5hbF9zaWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHNp emVfdCBvZmZzZXQpCiAJewogCQlpZiAoKHN0cltpXSAmIDB4ODApID09IDAgfHwgKHN0cltpXSAm IDB4QzApID09IDB4QzApCiAJCXsKLQkJCXBnX3djaGFyCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUo c3RyICsgaSk7CisJCQljaGFyMzJfdAljdXJyID0gdXRmOF90b191bmljb2RlKHN0ciArIGkpOwog CiAJCQlpZiAocGdfdV9wcm9wX2Nhc2VfaWdub3JhYmxlKGN1cnIpKQogCQkJCWNvbnRpbnVlOwpA QCAtMzk0LDkgKzM5NCw5IEBAIGNoZWNrX3NwZWNpYWxfY29uZGl0aW9ucyhpbnQgY29uZGl0aW9u cywgY29uc3QgY2hhciAqc3RyLCBzaXplX3QgbGVuLAogICogY2hhcmFjdGVyIHdpdGhvdXQgbW9k aWZpY2F0aW9uLgogICovCiBzdGF0aWMgZW51bSBDYXNlTWFwUmVzdWx0Ci1jYXNlbWFwKHBnX3dj aGFyIHUxLCBDYXNlS2luZCBjYXNla2luZCwgYm9vbCBmdWxsLAorY2FzZW1hcChjaGFyMzJfdCB1 MSwgQ2FzZUtpbmQgY2FzZWtpbmQsIGJvb2wgZnVsbCwKIAkJY29uc3QgY2hhciAqc3JjLCBzaXpl X3Qgc3JjbGVuLCBzaXplX3Qgc3Jjb2ZmLAotCQlwZ193Y2hhciAqc2ltcGxlLCBjb25zdCBwZ193 Y2hhciAqKnNwZWNpYWwpCisJCWNoYXIzMl90ICpzaW1wbGUsIGNvbnN0IGNoYXIzMl90ICoqc3Bl Y2lhbCkKIHsKIAl1aW50MTYJCWlkeDsKIApAQCAtNDM0LDggKzQzNCw4IEBAIGNhc2VtYXAocGdf d2NoYXIgdTEsIENhc2VLaW5kIGNhc2VraW5kLCBib29sIGZ1bGwsCiAgKiBGaW5kIGVudHJ5IGlu IHNpbXBsZSBjYXNlIG1hcC4KICAqIElmIHRoZSBlbnRyeSBkb2VzIG5vdCBleGlzdCwgMCB3aWxs IGJlIHJldHVybmVkLgogICovCi1zdGF0aWMgcGdfd2NoYXIKLWZpbmRfY2FzZV9tYXAocGdfd2No YXIgdWNzLCBjb25zdCBwZ193Y2hhciAqbWFwKQorc3RhdGljIGNoYXIzMl90CitmaW5kX2Nhc2Vf bWFwKGNoYXIzMl90IHVjcywgY29uc3QgY2hhcjMyX3QgKm1hcCkKIHsKIAkvKiBGYXN0IHBhdGgg Zm9yIGNvZGVwb2ludHMgPCAweDgwICovCiAJaWYgKHVjcyA8IDB4ODApCmRpZmYgLS1naXQgYS9z cmMvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXRlZ29y eS5jCmluZGV4IDQxMzZjNGQ0ZjkyLi5hYWI2NjdhN2JiNCAxMDA2NDQKLS0tIGEvc3JjL2NvbW1v bi91bmljb2RlX2NhdGVnb3J5LmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmMK QEAgLTEsNyArMSw3IEBACiAvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqIHVuaWNvZGVfY2F0ZWdvcnku YwogICoJCURldGVybWluZSBnZW5lcmFsIGNhdGVnb3J5IGFuZCBjaGFyYWN0ZXIgcHJvcGVydGll cyBvZiBVbmljb2RlCi0gKgkJY2hhcmFjdGVycy4gRW5jb2RpbmcgbXVzdCBiZSBVVEY4LCB3aGVy ZSB3ZSBhc3N1bWUgdGhhdCB0aGUgcGdfd2NoYXIKKyAqCQljaGFyYWN0ZXJzLiBFbmNvZGluZyBt dXN0IGJlIFVURjgsIHdoZXJlIHdlIGFzc3VtZSB0aGF0IHRoZSBjaGFyMzJfdAogICoJCXJlcHJl c2VudGF0aW9uIGlzIGEgY29kZSBwb2ludC4KICAqCiAgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMp IDIwMTctMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKQEAgLTc2LDEz ICs3NiwxMyBAQAogI2RlZmluZSBQR19VX0NIQVJBQ1RFUl9UQUIJMHgwOQogCiBzdGF0aWMgYm9v bCByYW5nZV9zZWFyY2goY29uc3QgcGdfdW5pY29kZV9yYW5nZSAqdGJsLCBzaXplX3Qgc2l6ZSwK LQkJCQkJCSBwZ193Y2hhciBjb2RlKTsKKwkJCQkJCSBjaGFyMzJfdCBjb2RlKTsKIAogLyoKICAq IFVuaWNvZGUgZ2VuZXJhbCBjYXRlZ29yeSBmb3IgdGhlIGdpdmVuIGNvZGVwb2ludC4KICAqLwog cGdfdW5pY29kZV9jYXRlZ29yeQotdW5pY29kZV9jYXRlZ29yeShwZ193Y2hhciBjb2RlKQordW5p Y29kZV9jYXRlZ29yeShjaGFyMzJfdCBjb2RlKQogewogCWludAkJCW1pbiA9IDA7CiAJaW50CQkJ bWlkOwpAQCAtMTA4LDcgKzEwOCw3IEBAIHVuaWNvZGVfY2F0ZWdvcnkocGdfd2NoYXIgY29kZSkK IH0KIAogYm9vbAotcGdfdV9wcm9wX2FscGhhYmV0aWMocGdfd2NoYXIgY29kZSkKK3BnX3VfcHJv cF9hbHBoYWJldGljKGNoYXIzMl90IGNvZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1 cm4gdW5pY29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9BTFBIQUJF VElDOwpAQCAtMTE5LDcgKzExOSw3IEBAIHBnX3VfcHJvcF9hbHBoYWJldGljKHBnX3djaGFyIGNv ZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF9sb3dlcmNhc2UocGdfd2NoYXIgY29kZSkKK3BnX3Vf cHJvcF9sb3dlcmNhc2UoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJl dHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX0xPV0VS Q0FTRTsKQEAgLTEzMCw3ICsxMzAsNyBAQCBwZ191X3Byb3BfbG93ZXJjYXNlKHBnX3djaGFyIGNv ZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF91cHBlcmNhc2UocGdfd2NoYXIgY29kZSkKK3BnX3Vf cHJvcF91cHBlcmNhc2UoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4ODApCiAJCXJl dHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9QUk9QX1VQUEVS Q0FTRTsKQEAgLTE0MSw3ICsxNDEsNyBAQCBwZ191X3Byb3BfdXBwZXJjYXNlKHBnX3djaGFyIGNv ZGUpCiB9CiAKIGJvb2wKLXBnX3VfcHJvcF9jYXNlZChwZ193Y2hhciBjb2RlKQorcGdfdV9wcm9w X2Nhc2VkKGNoYXIzMl90IGNvZGUpCiB7CiAJdWludDMyCQljYXRlZ29yeV9tYXNrOwogCkBAIC0x NTYsNyArMTU2LDcgQEAgcGdfdV9wcm9wX2Nhc2VkKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wK LXBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShwZ193Y2hhciBjb2RlKQorcGdfdV9wcm9wX2Nhc2Vf aWdub3JhYmxlKGNoYXIzMl90IGNvZGUpCiB7CiAJaWYgKGNvZGUgPCAweDgwKQogCQlyZXR1cm4g dW5pY29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGllcyAmIFBHX1VfUFJPUF9DQVNFX0lHTk9S QUJMRTsKQEAgLTE2Nyw3ICsxNjcsNyBAQCBwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUocGdfd2No YXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9wcm9wX3doaXRlX3NwYWNlKHBnX3djaGFyIGNvZGUp CitwZ191X3Byb3Bfd2hpdGVfc3BhY2UoY2hhcjMyX3QgY29kZSkKIHsKIAlpZiAoY29kZSA8IDB4 ODApCiAJCXJldHVybiB1bmljb2RlX29wdF9hc2NpaVtjb2RlXS5wcm9wZXJ0aWVzICYgUEdfVV9Q Uk9QX1dISVRFX1NQQUNFOwpAQCAtMTc4LDcgKzE3OCw3IEBAIHBnX3VfcHJvcF93aGl0ZV9zcGFj ZShwZ193Y2hhciBjb2RlKQogfQogCiBib29sCi1wZ191X3Byb3BfaGV4X2RpZ2l0KHBnX3djaGFy IGNvZGUpCitwZ191X3Byb3BfaGV4X2RpZ2l0KGNoYXIzMl90IGNvZGUpCiB7CiAJaWYgKGNvZGUg PCAweDgwKQogCQlyZXR1cm4gdW5pY29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGllcyAmIFBH X1VfUFJPUF9IRVhfRElHSVQ7CkBAIC0xODksNyArMTg5LDcgQEAgcGdfdV9wcm9wX2hleF9kaWdp dChwZ193Y2hhciBjb2RlKQogfQogCiBib29sCi1wZ191X3Byb3Bfam9pbl9jb250cm9sKHBnX3dj aGFyIGNvZGUpCitwZ191X3Byb3Bfam9pbl9jb250cm9sKGNoYXIzMl90IGNvZGUpCiB7CiAJaWYg KGNvZGUgPCAweDgwKQogCQlyZXR1cm4gdW5pY29kZV9vcHRfYXNjaWlbY29kZV0ucHJvcGVydGll cyAmIFBHX1VfUFJPUF9KT0lOX0NPTlRST0w7CkBAIC0yMDgsNyArMjA4LDcgQEAgcGdfdV9wcm9w X2pvaW5fY29udHJvbChwZ193Y2hhciBjb2RlKQogICovCiAKIGJvb2wKLXBnX3VfaXNkaWdpdChw Z193Y2hhciBjb2RlLCBib29sIHBvc2l4KQorcGdfdV9pc2RpZ2l0KGNoYXIzMl90IGNvZGUsIGJv b2wgcG9zaXgpCiB7CiAJaWYgKHBvc2l4KQogCQlyZXR1cm4gKCcwJyA8PSBjb2RlICYmIGNvZGUg PD0gJzknKTsKQEAgLTIxNywxOSArMjE3LDE5IEBAIHBnX3VfaXNkaWdpdChwZ193Y2hhciBjb2Rl LCBib29sIHBvc2l4KQogfQogCiBib29sCi1wZ191X2lzYWxwaGEocGdfd2NoYXIgY29kZSkKK3Bn X3VfaXNhbHBoYShjaGFyMzJfdCBjb2RlKQogewogCXJldHVybiBwZ191X3Byb3BfYWxwaGFiZXRp Yyhjb2RlKTsKIH0KIAogYm9vbAotcGdfdV9pc2FsbnVtKHBnX3djaGFyIGNvZGUsIGJvb2wgcG9z aXgpCitwZ191X2lzYWxudW0oY2hhcjMyX3QgY29kZSwgYm9vbCBwb3NpeCkKIHsKIAlyZXR1cm4g cGdfdV9pc2FscGhhKGNvZGUpIHx8IHBnX3VfaXNkaWdpdChjb2RlLCBwb3NpeCk7CiB9CiAKIGJv b2wKLXBnX3VfaXN3b3JkKHBnX3djaGFyIGNvZGUpCitwZ191X2lzd29yZChjaGFyMzJfdCBjb2Rl KQogewogCXVpbnQzMgkJY2F0ZWdvcnlfbWFzayA9IFBHX1VfQ0FURUdPUllfTUFTSyh1bmljb2Rl X2NhdGVnb3J5KGNvZGUpKTsKIApAQCAtMjQwLDMyICsyNDAsMzIgQEAgcGdfdV9pc3dvcmQocGdf d2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9pc3VwcGVyKHBnX3djaGFyIGNvZGUpCitwZ191 X2lzdXBwZXIoY2hhcjMyX3QgY29kZSkKIHsKIAlyZXR1cm4gcGdfdV9wcm9wX3VwcGVyY2FzZShj b2RlKTsKIH0KIAogYm9vbAotcGdfdV9pc2xvd2VyKHBnX3djaGFyIGNvZGUpCitwZ191X2lzbG93 ZXIoY2hhcjMyX3QgY29kZSkKIHsKIAlyZXR1cm4gcGdfdV9wcm9wX2xvd2VyY2FzZShjb2RlKTsK IH0KIAogYm9vbAotcGdfdV9pc2JsYW5rKHBnX3djaGFyIGNvZGUpCitwZ191X2lzYmxhbmsoY2hh cjMyX3QgY29kZSkKIHsKIAlyZXR1cm4gY29kZSA9PSBQR19VX0NIQVJBQ1RFUl9UQUIgfHwKIAkJ dW5pY29kZV9jYXRlZ29yeShjb2RlKSA9PSBQR19VX1NQQUNFX1NFUEFSQVRPUjsKIH0KIAogYm9v bAotcGdfdV9pc2NudHJsKHBnX3djaGFyIGNvZGUpCitwZ191X2lzY250cmwoY2hhcjMyX3QgY29k ZSkKIHsKIAlyZXR1cm4gdW5pY29kZV9jYXRlZ29yeShjb2RlKSA9PSBQR19VX0NPTlRST0w7CiB9 CiAKIGJvb2wKLXBnX3VfaXNncmFwaChwZ193Y2hhciBjb2RlKQorcGdfdV9pc2dyYXBoKGNoYXIz Ml90IGNvZGUpCiB7CiAJdWludDMyCQljYXRlZ29yeV9tYXNrID0gUEdfVV9DQVRFR09SWV9NQVNL KHVuaWNvZGVfY2F0ZWdvcnkoY29kZSkpOwogCkBAIC0yNzYsNyArMjc2LDcgQEAgcGdfdV9pc2dy YXBoKHBnX3djaGFyIGNvZGUpCiB9CiAKIGJvb2wKLXBnX3VfaXNwcmludChwZ193Y2hhciBjb2Rl KQorcGdfdV9pc3ByaW50KGNoYXIzMl90IGNvZGUpCiB7CiAJcGdfdW5pY29kZV9jYXRlZ29yeSBj YXRlZ29yeSA9IHVuaWNvZGVfY2F0ZWdvcnkoY29kZSk7CiAKQEAgLTI4Nyw3ICsyODcsNyBAQCBw Z191X2lzcHJpbnQocGdfd2NoYXIgY29kZSkKIH0KIAogYm9vbAotcGdfdV9pc3B1bmN0KHBnX3dj aGFyIGNvZGUsIGJvb2wgcG9zaXgpCitwZ191X2lzcHVuY3QoY2hhcjMyX3QgY29kZSwgYm9vbCBw b3NpeCkKIHsKIAl1aW50MzIJCWNhdGVnb3J5X21hc2s7CiAKQEAgLTMwOCwxMyArMzA4LDEzIEBA IHBnX3VfaXNwdW5jdChwZ193Y2hhciBjb2RlLCBib29sIHBvc2l4KQogfQogCiBib29sCi1wZ191 X2lzc3BhY2UocGdfd2NoYXIgY29kZSkKK3BnX3VfaXNzcGFjZShjaGFyMzJfdCBjb2RlKQogewog CXJldHVybiBwZ191X3Byb3Bfd2hpdGVfc3BhY2UoY29kZSk7CiB9CiAKIGJvb2wKLXBnX3VfaXN4 ZGlnaXQocGdfd2NoYXIgY29kZSwgYm9vbCBwb3NpeCkKK3BnX3VfaXN4ZGlnaXQoY2hhcjMyX3Qg Y29kZSwgYm9vbCBwb3NpeCkKIHsKIAlpZiAocG9zaXgpCiAJCXJldHVybiAoKCcwJyA8PSBjb2Rl ICYmIGNvZGUgPD0gJzknKSB8fApAQCAtNDc4LDcgKzQ3OCw3IEBAIHVuaWNvZGVfY2F0ZWdvcnlf YWJicmV2KHBnX3VuaWNvZGVfY2F0ZWdvcnkgY2F0ZWdvcnkpCiAgKiBnaXZlbiB0YWJsZS4KICAq Lwogc3RhdGljIGJvb2wKLXJhbmdlX3NlYXJjaChjb25zdCBwZ191bmljb2RlX3JhbmdlICp0Ymws IHNpemVfdCBzaXplLCBwZ193Y2hhciBjb2RlKQorcmFuZ2Vfc2VhcmNoKGNvbnN0IHBnX3VuaWNv ZGVfcmFuZ2UgKnRibCwgc2l6ZV90IHNpemUsIGNoYXIzMl90IGNvZGUpCiB7CiAJaW50CQkJbWlu ID0gMDsKIAlpbnQJCQltaWQ7CmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfbm9ybS5j IGIvc3JjL2NvbW1vbi91bmljb2RlX25vcm0uYwppbmRleCA2NjU0YjRjYmM0OS4uNDg5ZDk5Y2Q1 YWIgMTAwNjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZV9ub3JtLmMKKysrIGIvc3JjL2NvbW1v bi91bmljb2RlX25vcm0uYwpAQCAtNjksNyArNjksNyBAQCBjb252X2NvbXBhcmUoY29uc3Qgdm9p ZCAqcDEsIGNvbnN0IHZvaWQgKnAyKQogICogbG9va3VwLCB3aGlsZSB0aGUgZnJvbnRlbmQgdmVy c2lvbiB1c2VzIGEgYmluYXJ5IHNlYXJjaC4KICAqLwogc3RhdGljIGNvbnN0IHBnX3VuaWNvZGVf ZGVjb21wb3NpdGlvbiAqCi1nZXRfY29kZV9lbnRyeShwZ193Y2hhciBjb2RlKQorZ2V0X2NvZGVf ZW50cnkoY2hhcjMyX3QgY29kZSkKIHsKICNpZm5kZWYgRlJPTlRFTkQKIAlpbnQJCQloOwpAQCAt MTA5LDcgKzEwOSw3IEBAIGdldF9jb2RlX2VudHJ5KHBnX3djaGFyIGNvZGUpCiAgKiBHZXQgdGhl IGNvbWJpbmluZyBjbGFzcyBvZiB0aGUgZ2l2ZW4gY29kZXBvaW50LgogICovCiBzdGF0aWMgdWlu dDgKLWdldF9jYW5vbmljYWxfY2xhc3MocGdfd2NoYXIgY29kZSkKK2dldF9jYW5vbmljYWxfY2xh c3MoY2hhcjMyX3QgY29kZSkKIHsKIAljb25zdCBwZ191bmljb2RlX2RlY29tcG9zaXRpb24gKmVu dHJ5ID0gZ2V0X2NvZGVfZW50cnkoY29kZSk7CiAKQEAgLTEzMCwxNSArMTMwLDE1IEBAIGdldF9j YW5vbmljYWxfY2xhc3MocGdfd2NoYXIgY29kZSkKICAqIE5vdGU6IHRoZSByZXR1cm5lZCBwb2lu dGVyIGNhbiBwb2ludCB0byBzdGF0aWNhbGx5IGFsbG9jYXRlZCBidWZmZXIsIGFuZAogICogaXMg b25seSB2YWxpZCB1bnRpbCBuZXh0IGNhbGwgdG8gdGhpcyBmdW5jdGlvbiEKICAqLwotc3RhdGlj IGNvbnN0IHBnX3djaGFyICoKK3N0YXRpYyBjb25zdCBjaGFyMzJfdCAqCiBnZXRfY29kZV9kZWNv bXBvc2l0aW9uKGNvbnN0IHBnX3VuaWNvZGVfZGVjb21wb3NpdGlvbiAqZW50cnksIGludCAqZGVj X3NpemUpCiB7Ci0Jc3RhdGljIHBnX3djaGFyIHg7CisJc3RhdGljIGNoYXIzMl90IHg7CiAKIAlp ZiAoREVDT01QT1NJVElPTl9JU19JTkxJTkUoZW50cnkpKQogCXsKIAkJQXNzZXJ0KERFQ09NUE9T SVRJT05fU0laRShlbnRyeSkgPT0gMSk7Ci0JCXggPSAocGdfd2NoYXIpIGVudHJ5LT5kZWNfaW5k ZXg7CisJCXggPSAoY2hhcjMyX3QpIGVudHJ5LT5kZWNfaW5kZXg7CiAJCSpkZWNfc2l6ZSA9IDE7 CiAJCXJldHVybiAmeDsKIAl9CkBAIC0xNTYsNyArMTU2LDcgQEAgZ2V0X2NvZGVfZGVjb21wb3Np dGlvbihjb25zdCBwZ191bmljb2RlX2RlY29tcG9zaXRpb24gKmVudHJ5LCBpbnQgKmRlY19zaXpl KQogICogYXJlLCBpbiB0dXJuLCBkZWNvbXBvc2FibGUuCiAgKi8KIHN0YXRpYyBpbnQKLWdldF9k ZWNvbXBvc2VkX3NpemUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQpCitnZXRfZGVjb21wb3Nl ZF9zaXplKGNoYXIzMl90IGNvZGUsIGJvb2wgY29tcGF0KQogewogCWNvbnN0IHBnX3VuaWNvZGVf ZGVjb21wb3NpdGlvbiAqZW50cnk7CiAJaW50CQkJc2l6ZSA9IDA7CkBAIC0zMTgsNyArMzE4LDcg QEAgcmVjb21wb3NlX2NvZGUodWludDMyIHN0YXJ0LCB1aW50MzIgY29kZSwgdWludDMyICpyZXN1 bHQpCiAgKiBpbiB0aGUgYXJyYXkgcmVzdWx0LgogICovCiBzdGF0aWMgdm9pZAotZGVjb21wb3Nl X2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQg KmN1cnJlbnQpCitkZWNvbXBvc2VfY29kZShjaGFyMzJfdCBjb2RlLCBib29sIGNvbXBhdCwgY2hh cjMyX3QgKipyZXN1bHQsIGludCAqY3VycmVudCkKIHsKIAljb25zdCBwZ191bmljb2RlX2RlY29t cG9zaXRpb24gKmVudHJ5OwogCWludAkJCWk7CkBAIC0zMzcsNyArMzM3LDcgQEAgZGVjb21wb3Nl X2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQg KmN1cnJlbnQpCiAJCQkJCXYsCiAJCQkJCXRpbmRleCwKIAkJCQkJc2luZGV4OwotCQlwZ193Y2hh ciAgICpyZXMgPSAqcmVzdWx0OworCQljaGFyMzJfdCAgICpyZXMgPSAqcmVzdWx0OwogCiAJCXNp bmRleCA9IGNvZGUgLSBTQkFTRTsKIAkJbCA9IExCQVNFICsgc2luZGV4IC8gKFZDT1VOVCAqIFRD T1VOVCk7CkBAIC0zNjksNyArMzY5LDcgQEAgZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwg Ym9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCiAJaWYgKGVudHJ5 ID09IE5VTEwgfHwgREVDT01QT1NJVElPTl9TSVpFKGVudHJ5KSA9PSAwIHx8CiAJCSghY29tcGF0 ICYmIERFQ09NUE9TSVRJT05fSVNfQ09NUEFUKGVudHJ5KSkpCiAJewotCQlwZ193Y2hhciAgICpy ZXMgPSAqcmVzdWx0OworCQljaGFyMzJfdCAgICpyZXMgPSAqcmVzdWx0OwogCiAJCXJlc1sqY3Vy cmVudF0gPSBjb2RlOwogCQkoKmN1cnJlbnQpKys7CkBAIC0zODIsNyArMzgyLDcgQEAgZGVjb21w b3NlX2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21wYXQsIHBnX3djaGFyICoqcmVzdWx0LCBp bnQgKmN1cnJlbnQpCiAJZGVjb21wID0gZ2V0X2NvZGVfZGVjb21wb3NpdGlvbihlbnRyeSwgJmRl Y19zaXplKTsKIAlmb3IgKGkgPSAwOyBpIDwgZGVjX3NpemU7IGkrKykKIAl7Ci0JCXBnX3djaGFy CWxjb2RlID0gKHBnX3djaGFyKSBkZWNvbXBbaV07CisJCWNoYXIzMl90CWxjb2RlID0gKGNoYXIz Ml90KSBkZWNvbXBbaV07CiAKIAkJLyogTGVhdmUgaWYgbm8gbW9yZSBkZWNvbXBvc2l0aW9ucyAq LwogCQlkZWNvbXBvc2VfY29kZShsY29kZSwgY29tcGF0LCByZXN1bHQsIGN1cnJlbnQpOwpAQCAt Mzk4LDE3ICszOTgsMTcgQEAgZGVjb21wb3NlX2NvZGUocGdfd2NoYXIgY29kZSwgYm9vbCBjb21w YXQsIHBnX3djaGFyICoqcmVzdWx0LCBpbnQgKmN1cnJlbnQpCiAgKiBtYWxsb2MuIE9yIE5VTEwg aWYgd2UgcnVuIG91dCBvZiBtZW1vcnkuIEluIGJhY2tlbmQsIHRoZSByZXR1cm5lZAogICogc3Ry aW5nIGlzIHBhbGxvYydkIGluc3RlYWQsIGFuZCBPT00gaXMgcmVwb3J0ZWQgd2l0aCBlcmVwb3J0 KCkuCiAgKi8KLXBnX3djaGFyICoKLXVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0 aW9uRm9ybSBmb3JtLCBjb25zdCBwZ193Y2hhciAqaW5wdXQpCitjaGFyMzJfdCAqCit1bmljb2Rl X25vcm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3Qg KmlucHV0KQogewogCWJvb2wJCWNvbXBhdCA9IChmb3JtID09IFVOSUNPREVfTkZLQyB8fCBmb3Jt ID09IFVOSUNPREVfTkZLRCk7CiAJYm9vbAkJcmVjb21wb3NlID0gKGZvcm0gPT0gVU5JQ09ERV9O RkMgfHwgZm9ybSA9PSBVTklDT0RFX05GS0MpOwotCXBnX3djaGFyICAgKmRlY29tcF9jaGFyczsK LQlwZ193Y2hhciAgICpyZWNvbXBfY2hhcnM7CisJY2hhcjMyX3QgICAqZGVjb21wX2NoYXJzOwor CWNoYXIzMl90ICAgKnJlY29tcF9jaGFyczsKIAlpbnQJCQlkZWNvbXBfc2l6ZSwKIAkJCQljdXJy ZW50X3NpemU7CiAJaW50CQkJY291bnQ7Ci0JY29uc3QgcGdfd2NoYXIgKnA7CisJY29uc3QgY2hh cjMyX3QgKnA7CiAKIAkvKiB2YXJpYWJsZXMgZm9yIHJlY29tcG9zaXRpb24gKi8KIAlpbnQJCQls YXN0X2NsYXNzOwpAQCAtNDI1LDcgKzQyNSw3IEBAIHVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVO b3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBwZ193Y2hhciAqaW5wdXQpCiAJZm9yIChwID0g aW5wdXQ7ICpwOyBwKyspCiAJCWRlY29tcF9zaXplICs9IGdldF9kZWNvbXBvc2VkX3NpemUoKnAs IGNvbXBhdCk7CiAKLQlkZWNvbXBfY2hhcnMgPSAocGdfd2NoYXIgKikgQUxMT0MoKGRlY29tcF9z aXplICsgMSkgKiBzaXplb2YocGdfd2NoYXIpKTsKKwlkZWNvbXBfY2hhcnMgPSAoY2hhcjMyX3Qg KikgQUxMT0MoKGRlY29tcF9zaXplICsgMSkgKiBzaXplb2YoY2hhcjMyX3QpKTsKIAlpZiAoZGVj b21wX2NoYXJzID09IE5VTEwpCiAJCXJldHVybiBOVUxMOwogCkBAIC00NDgsOSArNDQ4LDkgQEAg dW5pY29kZV9ub3JtYWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBn X3djaGFyICppbnB1dCkKIAkgKi8KIAlmb3IgKGNvdW50ID0gMTsgY291bnQgPCBkZWNvbXBfc2l6 ZTsgY291bnQrKykKIAl7Ci0JCXBnX3djaGFyCXByZXYgPSBkZWNvbXBfY2hhcnNbY291bnQgLSAx XTsKLQkJcGdfd2NoYXIJbmV4dCA9IGRlY29tcF9jaGFyc1tjb3VudF07Ci0JCXBnX3djaGFyCXRt cDsKKwkJY2hhcjMyX3QJcHJldiA9IGRlY29tcF9jaGFyc1tjb3VudCAtIDFdOworCQljaGFyMzJf dAluZXh0ID0gZGVjb21wX2NoYXJzW2NvdW50XTsKKwkJY2hhcjMyX3QJdG1wOwogCQljb25zdCB1 aW50OCBwcmV2Q2xhc3MgPSBnZXRfY2Fub25pY2FsX2NsYXNzKHByZXYpOwogCQljb25zdCB1aW50 OCBuZXh0Q2xhc3MgPSBnZXRfY2Fub25pY2FsX2NsYXNzKG5leHQpOwogCkBAIC00ODcsNyArNDg3 LDcgQEAgdW5pY29kZV9ub3JtYWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNv bnN0IHBnX3djaGFyICppbnB1dCkKIAkgKiBsb25nZXIgdGhhbiB0aGUgZGVjb21wb3NlZCBvbmUs IHNvIG1ha2UgdGhlIGFsbG9jYXRpb24gb2YgdGhlIG91dHB1dAogCSAqIHN0cmluZyBiYXNlZCBv biB0aGF0IGFzc3VtcHRpb24uCiAJICovCi0JcmVjb21wX2NoYXJzID0gKHBnX3djaGFyICopIEFM TE9DKChkZWNvbXBfc2l6ZSArIDEpICogc2l6ZW9mKHBnX3djaGFyKSk7CisJcmVjb21wX2NoYXJz ID0gKGNoYXIzMl90ICopIEFMTE9DKChkZWNvbXBfc2l6ZSArIDEpICogc2l6ZW9mKGNoYXIzMl90 KSk7CiAJaWYgKCFyZWNvbXBfY2hhcnMpCiAJewogCQlGUkVFKGRlY29tcF9jaGFycyk7CkBAIC01 MDEsOSArNTAxLDkgQEAgdW5pY29kZV9ub3JtYWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3Jt IGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKIAogCWZvciAoY291bnQgPSAxOyBjb3VudCA8 IGRlY29tcF9zaXplOyBjb3VudCsrKQogCXsKLQkJcGdfd2NoYXIJY2ggPSBkZWNvbXBfY2hhcnNb Y291bnRdOworCQljaGFyMzJfdAljaCA9IGRlY29tcF9jaGFyc1tjb3VudF07CiAJCWludAkJCWNo X2NsYXNzID0gZ2V0X2Nhbm9uaWNhbF9jbGFzcyhjaCk7Ci0JCXBnX3djaGFyCWNvbXBvc2l0ZTsK KwkJY2hhcjMyX3QJY29tcG9zaXRlOwogCiAJCWlmIChsYXN0X2NsYXNzIDwgY2hfY2xhc3MgJiYK IAkJCXJlY29tcG9zZV9jb2RlKHN0YXJ0ZXJfY2gsIGNoLCAmY29tcG9zaXRlKSkKQEAgLTUyNCw3 ICs1MjQsNyBAQCB1bmljb2RlX25vcm1hbGl6ZShVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9y bSwgY29uc3QgcGdfd2NoYXIgKmlucHV0KQogCQkJcmVjb21wX2NoYXJzW3RhcmdldF9wb3MrK10g PSBjaDsKIAkJfQogCX0KLQlyZWNvbXBfY2hhcnNbdGFyZ2V0X3Bvc10gPSAocGdfd2NoYXIpICdc MCc7CisJcmVjb21wX2NoYXJzW3RhcmdldF9wb3NdID0gKGNoYXIzMl90KSAnXDAnOwogCiAJRlJF RShkZWNvbXBfY2hhcnMpOwogCkBAIC01NDAsNyArNTQwLDcgQEAgdW5pY29kZV9ub3JtYWxpemUo VW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1dCkKICNp Zm5kZWYgRlJPTlRFTkQKIAogc3RhdGljIGNvbnN0IHBnX3VuaWNvZGVfbm9ybXByb3BzICoKLXFj X2hhc2hfbG9va3VwKHBnX3djaGFyIGNoLCBjb25zdCBwZ191bmljb2RlX25vcm1pbmZvICpub3Jt aW5mbykKK3FjX2hhc2hfbG9va3VwKGNoYXIzMl90IGNoLCBjb25zdCBwZ191bmljb2RlX25vcm1p bmZvICpub3JtaW5mbykKIHsKIAlpbnQJCQloOwogCXVpbnQzMgkJaGFzaGtleTsKQEAgLTU3MSw3 ICs1NzEsNyBAQCBxY19oYXNoX2xvb2t1cChwZ193Y2hhciBjaCwgY29uc3QgcGdfdW5pY29kZV9u b3JtaW5mbyAqbm9ybWluZm8pCiAgKiBMb29rIHVwIHRoZSBub3JtYWxpemF0aW9uIHF1aWNrIGNo ZWNrIGNoYXJhY3RlciBwcm9wZXJ0eQogICovCiBzdGF0aWMgVW5pY29kZU5vcm1hbGl6YXRpb25R QwotcWNfaXNfYWxsb3dlZChVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgcGdfd2NoYXIg Y2gpCitxY19pc19hbGxvd2VkKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjaGFyMzJf dCBjaCkKIHsKIAljb25zdCBwZ191bmljb2RlX25vcm1wcm9wcyAqZm91bmQgPSBOVUxMOwogCkBA IC01OTUsNyArNTk1LDcgQEAgcWNfaXNfYWxsb3dlZChVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0g Zm9ybSwgcGdfd2NoYXIgY2gpCiB9CiAKIFVuaWNvZGVOb3JtYWxpemF0aW9uUUMKLXVuaWNvZGVf aXNfbm9ybWFsaXplZF9xdWlja2NoZWNrKFVuaWNvZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBj b25zdCBwZ193Y2hhciAqaW5wdXQpCit1bmljb2RlX2lzX25vcm1hbGl6ZWRfcXVpY2tjaGVjayhV bmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgY2hhcjMyX3QgKmlucHV0KQogewog CXVpbnQ4CQlsYXN0Q2Fub25pY2FsQ2xhc3MgPSAwOwogCVVuaWNvZGVOb3JtYWxpemF0aW9uUUMg cmVzdWx0ID0gVU5JQ09ERV9OT1JNX1FDX1lFUzsKQEAgLTYxMCw5ICs2MTAsOSBAQCB1bmljb2Rl X2lzX25vcm1hbGl6ZWRfcXVpY2tjaGVjayhVbmljb2RlTm9ybWFsaXphdGlvbkZvcm0gZm9ybSwg Y29uc3QgcGdfd2NoYXIgKgogCWlmIChmb3JtID09IFVOSUNPREVfTkZEIHx8IGZvcm0gPT0gVU5J Q09ERV9ORktEKQogCQlyZXR1cm4gVU5JQ09ERV9OT1JNX1FDX01BWUJFOwogCi0JZm9yIChjb25z dCBwZ193Y2hhciAqcCA9IGlucHV0OyAqcDsgcCsrKQorCWZvciAoY29uc3QgY2hhcjMyX3QgKnAg PSBpbnB1dDsgKnA7IHArKykKIAl7Ci0JCXBnX3djaGFyCWNoID0gKnA7CisJCWNoYXIzMl90CWNo ID0gKnA7CiAJCXVpbnQ4CQljYW5vbmljYWxDbGFzczsKIAkJVW5pY29kZU5vcm1hbGl6YXRpb25R QyBjaGVjazsKIApkaWZmIC0tZ2l0IGEvc3JjL2ZlX3V0aWxzL21icHJpbnQuYyBiL3NyYy9mZV91 dGlscy9tYnByaW50LmMKaW5kZXggZWIzZWVlZTk5MjUuLmFiZmZkYmUxOGEyIDEwMDY0NAotLS0g YS9zcmMvZmVfdXRpbHMvbWJwcmludC5jCisrKyBiL3NyYy9mZV91dGlscy9tYnByaW50LmMKQEAg LTQ5LDIwICs0OSwyMCBAQCBwZ19nZXRfdXRmOF9pZCh2b2lkKQogICoKICAqIE5vIGVycm9yIGNo ZWNrcyBoZXJlLCBjIG11c3QgcG9pbnQgdG8gYSBsb25nLWVub3VnaCBzdHJpbmcuCiAgKi8KLXN0 YXRpYyBwZ193Y2hhcgorc3RhdGljIGNoYXIzMl90CiB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5z aWduZWQgY2hhciAqYykKIHsKIAlpZiAoKCpjICYgMHg4MCkgPT0gMCkKLQkJcmV0dXJuIChwZ193 Y2hhcikgY1swXTsKKwkJcmV0dXJuIChjaGFyMzJfdCkgY1swXTsKIAllbHNlIGlmICgoKmMgJiAw eGUwKSA9PSAweGMwKQotCQlyZXR1cm4gKHBnX3djaGFyKSAoKChjWzBdICYgMHgxZikgPDwgNikg fAorCQlyZXR1cm4gKGNoYXIzMl90KSAoKChjWzBdICYgMHgxZikgPDwgNikgfAogCQkJCQkJICAg KGNbMV0gJiAweDNmKSk7CiAJZWxzZSBpZiAoKCpjICYgMHhmMCkgPT0gMHhlMCkKLQkJcmV0dXJu IChwZ193Y2hhcikgKCgoY1swXSAmIDB4MGYpIDw8IDEyKSB8CisJCXJldHVybiAoY2hhcjMyX3Qp ICgoKGNbMF0gJiAweDBmKSA8PCAxMikgfAogCQkJCQkJICAgKChjWzFdICYgMHgzZikgPDwgNikg fAogCQkJCQkJICAgKGNbMl0gJiAweDNmKSk7CiAJZWxzZSBpZiAoKCpjICYgMHhmOCkgPT0gMHhm MCkKLQkJcmV0dXJuIChwZ193Y2hhcikgKCgoY1swXSAmIDB4MDcpIDw8IDE4KSB8CisJCXJldHVy biAoY2hhcjMyX3QpICgoKGNbMF0gJiAweDA3KSA8PCAxOCkgfAogCQkJCQkJICAgKChjWzFdICYg MHgzZikgPDwgMTIpIHwKIAkJCQkJCSAgICgoY1syXSAmIDB4M2YpIDw8IDYpIHwKIAkJCQkJCSAg IChjWzNdICYgMHgzZikpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2luY2x1 ZGUvYy5oCmluZGV4IDlhYjVlNjE3OTk1Li41NGZhMjBiMGU4MyAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvYy5oCisrKyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNTEzLDYgKzUxMywyNSBAQCB0eXBl ZGVmIHZvaWQgKCpwZ19mdW5jcHRyX3QpICh2b2lkKTsKIAogI2luY2x1ZGUgPHN0ZGJvb2wuaD4K IAorLyoKKyAqIGNoYXIxNl90IGFuZCBjaGFyMzJfdAorICogICAgICBVbmljb2RlIGNvZGUgcG9p bnRzLgorICovCisjaWZuZGVmIF9fY3BsdXNwbHVzCisjaWZkZWYgSEFWRV9VQ0hBUl9ICisjaW5j bHVkZSA8dWNoYXIuaD4KKyNpZm5kZWYgX19TVERDX1VURl8xNl9fCisjZXJyb3IgImNoYXIxNl90 IG11c3QgdXNlIFVURi0xNiBlbmNvZGluZyIKKyNlbmRpZgorI2lmbmRlZiBfX1NURENfVVRGXzMy X18KKyNlcnJvciAiY2hhcjMyX3QgbXVzdCB1c2UgVVRGLTMyIGVuY29kaW5nIgorI2VuZGlmCisj ZWxzZQordHlwZWRlZiB1aW50MTZfdCBjaGFyMTZfdDsKK3R5cGVkZWYgdWludDMyX3QgY2hhcjMy X3Q7CisjZW5kaWYKKyNlbmRpZgorCiAKIC8qIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAqCQkJCVNlY3Rpb24gMzoJc3Rh bmRhcmQgc3lzdGVtIHR5cGVzCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29k ZV9jYXNlLmggYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXNlLmgKaW5kZXggNDFlMmMx ZjRiMzMuLjZiY2ZmZDM0OWMyIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29k ZV9jYXNlLmgKKysrIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oCkBAIC0xNCwx NCArMTQsMTIgQEAKICNpZm5kZWYgVU5JQ09ERV9DQVNFX0gKICNkZWZpbmUgVU5JQ09ERV9DQVNF X0gKIAotI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCi0KIHR5cGVkZWYgc2l6ZV90ICgqV29yZEJv dW5kYXJ5TmV4dCkgKHZvaWQgKndic3RhdGUpOwogCi1wZ193Y2hhcgl1bmljb2RlX2xvd2VyY2Fz ZV9zaW1wbGUocGdfd2NoYXIgY29kZSk7Ci1wZ193Y2hhcgl1bmljb2RlX3RpdGxlY2FzZV9zaW1w bGUocGdfd2NoYXIgY29kZSk7Ci1wZ193Y2hhcgl1bmljb2RlX3VwcGVyY2FzZV9zaW1wbGUocGdf d2NoYXIgY29kZSk7Ci1wZ193Y2hhcgl1bmljb2RlX2Nhc2Vmb2xkX3NpbXBsZShwZ193Y2hhciBj b2RlKTsKK2NoYXIzMl90CXVuaWNvZGVfbG93ZXJjYXNlX3NpbXBsZShjaGFyMzJfdCBjb2RlKTsK K2NoYXIzMl90CXVuaWNvZGVfdGl0bGVjYXNlX3NpbXBsZShjaGFyMzJfdCBjb2RlKTsKK2NoYXIz Ml90CXVuaWNvZGVfdXBwZXJjYXNlX3NpbXBsZShjaGFyMzJfdCBjb2RlKTsKK2NoYXIzMl90CXVu aWNvZGVfY2FzZWZvbGRfc2ltcGxlKGNoYXIzMl90IGNvZGUpOwogc2l6ZV90CQl1bmljb2RlX3N0 cmxvd2VyKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCQkJ CQkgc3NpemVfdCBzcmNsZW4sIGJvb2wgZnVsbCk7CiBzaXplX3QJCXVuaWNvZGVfc3RydGl0bGUo Y2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLApkaWZmIC0tZ2l0IGEv c3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oIGIvc3JjL2luY2x1ZGUvY29t bW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oCmluZGV4IGQ1MzExNzg2NTgyLi4wYTE0ZmIyZDk3YiAx MDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oCisrKyBi L3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUuaApAQCAtMTgsNyArMTgsNiBA QAogICovCiAKICNpbmNsdWRlICJjb21tb24vdW5pY29kZV9jYXNlLmgiCi0jaW5jbHVkZSAibWIv cGdfd2NoYXIuaCIKIAogLyoKICAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2RlcG9pbnRzIHRo YXQgY2FuIHJlc3VsdCBmcm9tIGNhc2UgbWFwcGluZwpAQCAtNDUsNyArNDQsNyBAQCB0eXBlZGVm IGVudW0KIHR5cGVkZWYgc3RydWN0CiB7CiAJaW50MTYJCWNvbmRpdGlvbnM7Ci0JcGdfd2NoYXIJ bWFwW05DYXNlS2luZF1bTUFYX0NBU0VfRVhQQU5TSU9OXTsKKwljaGFyMzJfdAltYXBbTkNhc2VL aW5kXVtNQVhfQ0FTRV9FWFBBTlNJT05dOwogfSBwZ19zcGVjaWFsX2Nhc2U7CiAKIC8qCkBAIC0x NjYsNyArMTY1LDcgQEAgc3RhdGljIGNvbnN0IHBnX3NwZWNpYWxfY2FzZSBzcGVjaWFsX2Nhc2Vb MTA2XSA9CiAgKiBUaGUgZW50cnkgY2FzZV9tYXBfbG93ZXJbY2FzZV9pbmRleChjb2RlcG9pbnQp XSBpcyB0aGUgbWFwcGluZyBmb3IgdGhlCiAgKiBnaXZlbiBjb2RlcG9pbnQuCiAgKi8KLXN0YXRp YyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF9sb3dlclsxNzA0XSA9CitzdGF0aWMgY29uc3QgY2hh cjMyX3QgY2FzZV9tYXBfbG93ZXJbMTcwNF0gPQogewogCTB4MDAwMDAwLAkJCQkJLyogcmVzZXJ2 ZWQgKi8KIAkweDAwMDAwMCwJCQkJCS8qIFUrMDAwMDAwICovCkBAIC0xODc5LDcgKzE4NzgsNyBA QCBzdGF0aWMgY29uc3QgcGdfd2NoYXIgY2FzZV9tYXBfbG93ZXJbMTcwNF0gPQogICogVGhlIGVu dHJ5IGNhc2VfbWFwX3RpdGxlW2Nhc2VfaW5kZXgoY29kZXBvaW50KV0gaXMgdGhlIG1hcHBpbmcg Zm9yIHRoZQogICogZ2l2ZW4gY29kZXBvaW50LgogICovCi1zdGF0aWMgY29uc3QgcGdfd2NoYXIg Y2FzZV9tYXBfdGl0bGVbMTcwNF0gPQorc3RhdGljIGNvbnN0IGNoYXIzMl90IGNhc2VfbWFwX3Rp dGxlWzE3MDRdID0KIHsKIAkweDAwMDAwMCwJCQkJCS8qIHJlc2VydmVkICovCiAJMHgwMDAwMDAs CQkJCQkvKiBVKzAwMDAwMCAqLwpAQCAtMzU5Miw3ICszNTkxLDcgQEAgc3RhdGljIGNvbnN0IHBn X3djaGFyIGNhc2VfbWFwX3RpdGxlWzE3MDRdID0KICAqIFRoZSBlbnRyeSBjYXNlX21hcF91cHBl cltjYXNlX2luZGV4KGNvZGVwb2ludCldIGlzIHRoZSBtYXBwaW5nIGZvciB0aGUKICAqIGdpdmVu IGNvZGVwb2ludC4KICAqLwotc3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwX3VwcGVyWzE3 MDRdID0KK3N0YXRpYyBjb25zdCBjaGFyMzJfdCBjYXNlX21hcF91cHBlclsxNzA0XSA9CiB7CiAJ MHgwMDAwMDAsCQkJCQkvKiByZXNlcnZlZCAqLwogCTB4MDAwMDAwLAkJCQkJLyogVSswMDAwMDAg Ki8KQEAgLTUzMDUsNyArNTMwNCw3IEBAIHN0YXRpYyBjb25zdCBwZ193Y2hhciBjYXNlX21hcF91 cHBlclsxNzA0XSA9CiAgKiBUaGUgZW50cnkgY2FzZV9tYXBfZm9sZFtjYXNlX2luZGV4KGNvZGVw b2ludCldIGlzIHRoZSBtYXBwaW5nIGZvciB0aGUKICAqIGdpdmVuIGNvZGVwb2ludC4KICAqLwot c3RhdGljIGNvbnN0IHBnX3djaGFyIGNhc2VfbWFwX2ZvbGRbMTcwNF0gPQorc3RhdGljIGNvbnN0 IGNoYXIzMl90IGNhc2VfbWFwX2ZvbGRbMTcwNF0gPQogewogCTB4MDAwMDAwLAkJCQkJLyogcmVz ZXJ2ZWQgKi8KIAkweDAwMDAwMCwJCQkJCS8qIFUrMDAwMDAwICovCkBAIC0xMzUyMiw3ICsxMzUy MSw3IEBAIHN0YXRpYyBjb25zdCB1aW50MTYgY2FzZV9tYXBbNDc3OF0gPQogICogdGhlIG9mZnNl dCBpbnRvIHRoZSBtYXBwaW5nIHRhYmxlcy4KICAqLwogc3RhdGljIGlubGluZSB1aW50MTYKLWNh c2VfaW5kZXgocGdfd2NoYXIgY3ApCitjYXNlX2luZGV4KGNoYXIzMl90IGNwKQogewogCS8qIEZh c3QgcGF0aCBmb3IgY29kZXBvaW50cyA8IDB4MDU4OCAqLwogCWlmIChjcCA8IDB4MDU4OCkKZGlm ZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5LmggYi9zcmMvaW5j bHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29yeS5oCmluZGV4IDhmZDhiNjdhNDE2Li42ODQxNDNk M2M4YSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnkuaAor KysgYi9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29yeS5oCkBAIC0xNCw4ICsxNCw2 IEBACiAjaWZuZGVmIFVOSUNPREVfQ0FURUdPUllfSAogI2RlZmluZSBVTklDT0RFX0NBVEVHT1JZ X0gKIAotI2luY2x1ZGUgIm1iL3BnX3djaGFyLmgiCi0KIC8qCiAgKiBVbmljb2RlIEdlbmVyYWwg Q2F0ZWdvcnkgVmFsdWVzCiAgKgpAQCAtNjEsMzEgKzU5LDMxIEBAIHR5cGVkZWYgZW51bSBwZ191 bmljb2RlX2NhdGVnb3J5CiAJUEdfVV9GSU5BTF9QVU5DVFVBVElPTiA9IDI5IC8qIFBmICovCiB9 IHBnX3VuaWNvZGVfY2F0ZWdvcnk7CiAKLWV4dGVybiBwZ191bmljb2RlX2NhdGVnb3J5IHVuaWNv ZGVfY2F0ZWdvcnkocGdfd2NoYXIgY29kZSk7CitleHRlcm4gcGdfdW5pY29kZV9jYXRlZ29yeSB1 bmljb2RlX2NhdGVnb3J5KGNoYXIzMl90IGNvZGUpOwogZXh0ZXJuIGNvbnN0IGNoYXIgKnVuaWNv ZGVfY2F0ZWdvcnlfc3RyaW5nKHBnX3VuaWNvZGVfY2F0ZWdvcnkgY2F0ZWdvcnkpOwogZXh0ZXJu IGNvbnN0IGNoYXIgKnVuaWNvZGVfY2F0ZWdvcnlfYWJicmV2KHBnX3VuaWNvZGVfY2F0ZWdvcnkg Y2F0ZWdvcnkpOwogCi1leHRlcm4gYm9vbCBwZ191X3Byb3BfYWxwaGFiZXRpYyhwZ193Y2hhciBj b2RlKTsKLWV4dGVybiBib29sIHBnX3VfcHJvcF9sb3dlcmNhc2UocGdfd2NoYXIgY29kZSk7Ci1l eHRlcm4gYm9vbCBwZ191X3Byb3BfdXBwZXJjYXNlKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJv b2wgcGdfdV9wcm9wX2Nhc2VkKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9wcm9w X2Nhc2VfaWdub3JhYmxlKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3do aXRlX3NwYWNlKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX2hleF9kaWdp dChwZ193Y2hhciBjb2RlKTsKLWV4dGVybiBib29sIHBnX3VfcHJvcF9qb2luX2NvbnRyb2wocGdf d2NoYXIgY29kZSk7CitleHRlcm4gYm9vbCBwZ191X3Byb3BfYWxwaGFiZXRpYyhjaGFyMzJfdCBj b2RlKTsKK2V4dGVybiBib29sIHBnX3VfcHJvcF9sb3dlcmNhc2UoY2hhcjMyX3QgY29kZSk7Citl eHRlcm4gYm9vbCBwZ191X3Byb3BfdXBwZXJjYXNlKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJv b2wgcGdfdV9wcm9wX2Nhc2VkKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9w X2Nhc2VfaWdub3JhYmxlKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX3do aXRlX3NwYWNlKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9wcm9wX2hleF9kaWdp dChjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfcHJvcF9qb2luX2NvbnRyb2woY2hh cjMyX3QgY29kZSk7CiAKLWV4dGVybiBib29sIHBnX3VfaXNkaWdpdChwZ193Y2hhciBjb2RlLCBi b29sIHBvc2l4KTsKLWV4dGVybiBib29sIHBnX3VfaXNhbHBoYShwZ193Y2hhciBjb2RlKTsKLWV4 dGVybiBib29sIHBnX3VfaXNhbG51bShwZ193Y2hhciBjb2RlLCBib29sIHBvc2l4KTsKLWV4dGVy biBib29sIHBnX3VfaXN3b3JkKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9pc3Vw cGVyKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9pc2xvd2VyKHBnX3djaGFyIGNv ZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9pc2JsYW5rKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJv b2wgcGdfdV9pc2NudHJsKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9pc2dyYXBo KHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdfdV9pc3ByaW50KHBnX3djaGFyIGNvZGUp OwotZXh0ZXJuIGJvb2wgcGdfdV9pc3B1bmN0KHBnX3djaGFyIGNvZGUsIGJvb2wgcG9zaXgpOwot ZXh0ZXJuIGJvb2wgcGdfdV9pc3NwYWNlKHBnX3djaGFyIGNvZGUpOwotZXh0ZXJuIGJvb2wgcGdf dV9pc3hkaWdpdChwZ193Y2hhciBjb2RlLCBib29sIHBvc2l4KTsKK2V4dGVybiBib29sIHBnX3Vf aXNkaWdpdChjaGFyMzJfdCBjb2RlLCBib29sIHBvc2l4KTsKK2V4dGVybiBib29sIHBnX3VfaXNh bHBoYShjaGFyMzJfdCBjb2RlKTsKK2V4dGVybiBib29sIHBnX3VfaXNhbG51bShjaGFyMzJfdCBj b2RlLCBib29sIHBvc2l4KTsKK2V4dGVybiBib29sIHBnX3VfaXN3b3JkKGNoYXIzMl90IGNvZGUp OworZXh0ZXJuIGJvb2wgcGdfdV9pc3VwcGVyKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wg cGdfdV9pc2xvd2VyKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9pc2JsYW5rKGNo YXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9pc2NudHJsKGNoYXIzMl90IGNvZGUpOwor ZXh0ZXJuIGJvb2wgcGdfdV9pc2dyYXBoKGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdf dV9pc3ByaW50KGNoYXIzMl90IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9pc3B1bmN0KGNoYXIz Ml90IGNvZGUsIGJvb2wgcG9zaXgpOworZXh0ZXJuIGJvb2wgcGdfdV9pc3NwYWNlKGNoYXIzMl90 IGNvZGUpOworZXh0ZXJuIGJvb2wgcGdfdV9pc3hkaWdpdChjaGFyMzJfdCBjb2RlLCBib29sIHBv c2l4KTsKIAogI2VuZGlmCQkJCQkJCS8qIFVOSUNPREVfQ0FURUdPUllfSCAqLwpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2F0ZWdvcnlfdGFibGUuaCBiL3NyYy9pbmNs dWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5X3RhYmxlLmgKaW5kZXggOTVhMWM2NWRhN2UuLjQ2 NmE0MWI3MmIwIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXRlZ29y eV90YWJsZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2NhdGVnb3J5X3RhYmxl LmgKQEAgLTIwLDE1ICsyMCwxNSBAQAogICovCiB0eXBlZGVmIHN0cnVjdAogewotCXVpbnQzMgkJ Zmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KLQl1aW50MzIJCWxhc3Q7CQkJLyogVW5p Y29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJfdAlmaXJzdDsJCQkvKiBVbmljb2RlIGNvZGVwb2lu dCAqLworCWNoYXIzMl90CWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KIAl1aW50OAkJ Y2F0ZWdvcnk7CQkvKiBHZW5lcmFsIENhdGVnb3J5ICovCiB9IHBnX2NhdGVnb3J5X3JhbmdlOwog CiB0eXBlZGVmIHN0cnVjdAogewotCXVpbnQzMgkJZmlyc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9p bnQgKi8KLQl1aW50MzIJCWxhc3Q7CQkJLyogVW5pY29kZSBjb2RlcG9pbnQgKi8KKwljaGFyMzJf dAlmaXJzdDsJCQkvKiBVbmljb2RlIGNvZGVwb2ludCAqLworCWNoYXIzMl90CWxhc3Q7CQkJLyog VW5pY29kZSBjb2RlcG9pbnQgKi8KIH0gcGdfdW5pY29kZV9yYW5nZTsKIAogdHlwZWRlZiBzdHJ1 Y3QKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX25vcm0uaCBiL3NyYy9p bmNsdWRlL2NvbW1vbi91bmljb2RlX25vcm0uaAppbmRleCA1YmMzYjc5ZTc4ZS4uNTE2YzE5MmNj NGMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX25vcm0uaAorKysgYi9z cmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9ub3JtLmgKQEAgLTE0LDggKzE0LDYgQEAKICNpZm5k ZWYgVU5JQ09ERV9OT1JNX0gKICNkZWZpbmUgVU5JQ09ERV9OT1JNX0gKIAotI2luY2x1ZGUgIm1i L3BnX3djaGFyLmgiCi0KIHR5cGVkZWYgZW51bQogewogCVVOSUNPREVfTkZDID0gMCwKQEAgLTMy LDggKzMwLDggQEAgdHlwZWRlZiBlbnVtCiAJVU5JQ09ERV9OT1JNX1FDX01BWUJFID0gLTEsCiB9 IFVuaWNvZGVOb3JtYWxpemF0aW9uUUM7CiAKLWV4dGVybiBwZ193Y2hhciAqdW5pY29kZV9ub3Jt YWxpemUoVW5pY29kZU5vcm1hbGl6YXRpb25Gb3JtIGZvcm0sIGNvbnN0IHBnX3djaGFyICppbnB1 dCk7CitleHRlcm4gY2hhcjMyX3QgKnVuaWNvZGVfbm9ybWFsaXplKFVuaWNvZGVOb3JtYWxpemF0 aW9uRm9ybSBmb3JtLCBjb25zdCBjaGFyMzJfdCAqaW5wdXQpOwogCi1leHRlcm4gVW5pY29kZU5v cm1hbGl6YXRpb25RQyB1bmljb2RlX2lzX25vcm1hbGl6ZWRfcXVpY2tjaGVjayhVbmljb2RlTm9y bWFsaXphdGlvbkZvcm0gZm9ybSwgY29uc3QgcGdfd2NoYXIgKmlucHV0KTsKK2V4dGVybiBVbmlj b2RlTm9ybWFsaXphdGlvblFDIHVuaWNvZGVfaXNfbm9ybWFsaXplZF9xdWlja2NoZWNrKFVuaWNv ZGVOb3JtYWxpemF0aW9uRm9ybSBmb3JtLCBjb25zdCBjaGFyMzJfdCAqaW5wdXQpOwogCiAjZW5k aWYJCQkJCQkJLyogVU5JQ09ERV9OT1JNX0ggKi8KZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL21i L3BnX3djaGFyLmggYi9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oCmluZGV4IDRiNGE5OTc0Yjc1 Li40ZDg0YmRjODFlNCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaAorKysg Yi9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oCkBAIC01MzIsMjUgKzUzMiwyNSBAQCB0eXBlZGVm IHVpbnQzMiAoKnV0Zl9sb2NhbF9jb252ZXJzaW9uX2Z1bmMpICh1aW50MzIgY29kZSk7CiAgKiBT b21lIGhhbmR5IGZ1bmN0aW9ucyBmb3IgVW5pY29kZS1zcGVjaWZpYyB0ZXN0cy4KICAqLwogc3Rh dGljIGlubGluZSBib29sCi1pc192YWxpZF91bmljb2RlX2NvZGVwb2ludChwZ193Y2hhciBjKQor aXNfdmFsaWRfdW5pY29kZV9jb2RlcG9pbnQoY2hhcjMyX3QgYykKIHsKIAlyZXR1cm4gKGMgPiAw ICYmIGMgPD0gMHgxMEZGRkYpOwogfQogCiBzdGF0aWMgaW5saW5lIGJvb2wKLWlzX3V0ZjE2X3N1 cnJvZ2F0ZV9maXJzdChwZ193Y2hhciBjKQoraXNfdXRmMTZfc3Vycm9nYXRlX2ZpcnN0KGNoYXIz Ml90IGMpCiB7CiAJcmV0dXJuIChjID49IDB4RDgwMCAmJiBjIDw9IDB4REJGRik7CiB9CiAKIHN0 YXRpYyBpbmxpbmUgYm9vbAotaXNfdXRmMTZfc3Vycm9nYXRlX3NlY29uZChwZ193Y2hhciBjKQor aXNfdXRmMTZfc3Vycm9nYXRlX3NlY29uZChjaGFyMzJfdCBjKQogewogCXJldHVybiAoYyA+PSAw eERDMDAgJiYgYyA8PSAweERGRkYpOwogfQogCi1zdGF0aWMgaW5saW5lIHBnX3djaGFyCi1zdXJy b2dhdGVfcGFpcl90b19jb2RlcG9pbnQocGdfd2NoYXIgZmlyc3QsIHBnX3djaGFyIHNlY29uZCkK K3N0YXRpYyBpbmxpbmUgY2hhcjMyX3QKK3N1cnJvZ2F0ZV9wYWlyX3RvX2NvZGVwb2ludChjaGFy MTZfdCBmaXJzdCwgY2hhcjE2X3Qgc2Vjb25kKQogewogCXJldHVybiAoKGZpcnN0ICYgMHgzRkYp IDw8IDEwKSArIDB4MTAwMDAgKyAoc2Vjb25kICYgMHgzRkYpOwogfQpAQCAtNTYxLDIwICs1NjEs MjAgQEAgc3Vycm9nYXRlX3BhaXJfdG9fY29kZXBvaW50KHBnX3djaGFyIGZpcnN0LCBwZ193Y2hh ciBzZWNvbmQpCiAgKgogICogTm8gZXJyb3IgY2hlY2tzIGhlcmUsIGMgbXVzdCBwb2ludCB0byBh IGxvbmctZW5vdWdoIHN0cmluZy4KICAqLwotc3RhdGljIGlubGluZSBwZ193Y2hhcgorc3RhdGlj IGlubGluZSBjaGFyMzJfdAogdXRmOF90b191bmljb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMp CiB7CiAJaWYgKCgqYyAmIDB4ODApID09IDApCi0JCXJldHVybiAocGdfd2NoYXIpIGNbMF07CisJ CXJldHVybiAoY2hhcjMyX3QpIGNbMF07CiAJZWxzZSBpZiAoKCpjICYgMHhlMCkgPT0gMHhjMCkK LQkJcmV0dXJuIChwZ193Y2hhcikgKCgoY1swXSAmIDB4MWYpIDw8IDYpIHwKKwkJcmV0dXJuIChj aGFyMzJfdCkgKCgoY1swXSAmIDB4MWYpIDw8IDYpIHwKIAkJCQkJCSAgIChjWzFdICYgMHgzZikp OwogCWVsc2UgaWYgKCgqYyAmIDB4ZjApID09IDB4ZTApCi0JCXJldHVybiAocGdfd2NoYXIpICgo KGNbMF0gJiAweDBmKSA8PCAxMikgfAorCQlyZXR1cm4gKGNoYXIzMl90KSAoKChjWzBdICYgMHgw ZikgPDwgMTIpIHwKIAkJCQkJCSAgICgoY1sxXSAmIDB4M2YpIDw8IDYpIHwKIAkJCQkJCSAgIChj WzJdICYgMHgzZikpOwogCWVsc2UgaWYgKCgqYyAmIDB4ZjgpID09IDB4ZjApCi0JCXJldHVybiAo cGdfd2NoYXIpICgoKGNbMF0gJiAweDA3KSA8PCAxOCkgfAorCQlyZXR1cm4gKGNoYXIzMl90KSAo KChjWzBdICYgMHgwNykgPDwgMTgpIHwKIAkJCQkJCSAgICgoY1sxXSAmIDB4M2YpIDw8IDEyKSB8 CiAJCQkJCQkgICAoKGNbMl0gJiAweDNmKSA8PCA2KSB8CiAJCQkJCQkgICAoY1szXSAmIDB4M2Yp KTsKQEAgLTU4OCw3ICs1ODgsNyBAQCB1dGY4X3RvX3VuaWNvZGUoY29uc3QgdW5zaWduZWQgY2hh ciAqYykKICAqIHVuaWNvZGVfdXRmOGxlbihjKSBieXRlcyBhdmFpbGFibGUuCiAgKi8KIHN0YXRp YyBpbmxpbmUgdW5zaWduZWQgY2hhciAqCi11bmljb2RlX3RvX3V0ZjgocGdfd2NoYXIgYywgdW5z aWduZWQgY2hhciAqdXRmOHN0cmluZykKK3VuaWNvZGVfdG9fdXRmOChjaGFyMzJfdCBjLCB1bnNp Z25lZCBjaGFyICp1dGY4c3RyaW5nKQogewogCWlmIChjIDw9IDB4N0YpCiAJewpAQCAtNjIwLDcg KzYyMCw3IEBAIHVuaWNvZGVfdG9fdXRmOChwZ193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICp1dGY4 c3RyaW5nKQogICogTnVtYmVyIG9mIGJ5dGVzIG5lZWRlZCB0byByZXByZXNlbnQgdGhlIGdpdmVu IGNoYXIgaW4gVVRGOC4KICAqLwogc3RhdGljIGlubGluZSBpbnQKLXVuaWNvZGVfdXRmOGxlbihw Z193Y2hhciBjKQordW5pY29kZV91dGY4bGVuKGNoYXIzMl90IGMpCiB7CiAJaWYgKGMgPD0gMHg3 RikKIAkJcmV0dXJuIDE7CkBAIC02NzYsOCArNjc2LDggQEAgZXh0ZXJuIGludAlwZ192YWxpZF9z ZXJ2ZXJfZW5jb2RpbmcoY29uc3QgY2hhciAqbmFtZSk7CiBleHRlcm4gYm9vbCBpc19lbmNvZGlu Z19zdXBwb3J0ZWRfYnlfaWN1KGludCBlbmNvZGluZyk7CiBleHRlcm4gY29uc3QgY2hhciAqZ2V0 X2VuY29kaW5nX25hbWVfZm9yX2ljdShpbnQgZW5jb2RpbmcpOwogCi1leHRlcm4gdW5zaWduZWQg Y2hhciAqdW5pY29kZV90b191dGY4KHBnX3djaGFyIGMsIHVuc2lnbmVkIGNoYXIgKnV0ZjhzdHJp bmcpOwotZXh0ZXJuIHBnX3djaGFyIHV0ZjhfdG9fdW5pY29kZShjb25zdCB1bnNpZ25lZCBjaGFy ICpjKTsKK2V4dGVybiB1bnNpZ25lZCBjaGFyICp1bmljb2RlX3RvX3V0ZjgoY2hhcjMyX3QgYywg dW5zaWduZWQgY2hhciAqdXRmOHN0cmluZyk7CitleHRlcm4gY2hhcjMyX3QgdXRmOF90b191bmlj b2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMpOwogZXh0ZXJuIGJvb2wgcGdfdXRmOF9pc2xlZ2Fs KGNvbnN0IHVuc2lnbmVkIGNoYXIgKnNvdXJjZSwgaW50IGxlbmd0aCk7CiBleHRlcm4gaW50CXBn X3V0Zl9tYmxlbihjb25zdCB1bnNpZ25lZCBjaGFyICpzKTsKIGV4dGVybiBpbnQJcGdfbXVsZV9t Ymxlbihjb25zdCB1bnNpZ25lZCBjaGFyICpzKTsKQEAgLTczOSw4ICs3MzksOCBAQCBleHRlcm4g Y2hhciAqcGdfc2VydmVyX3RvX2NsaWVudChjb25zdCBjaGFyICpzLCBpbnQgbGVuKTsKIGV4dGVy biBjaGFyICpwZ19hbnlfdG9fc2VydmVyKGNvbnN0IGNoYXIgKnMsIGludCBsZW4sIGludCBlbmNv ZGluZyk7CiBleHRlcm4gY2hhciAqcGdfc2VydmVyX3RvX2FueShjb25zdCBjaGFyICpzLCBpbnQg bGVuLCBpbnQgZW5jb2RpbmcpOwogCi1leHRlcm4gdm9pZCBwZ191bmljb2RlX3RvX3NlcnZlcihw Z193Y2hhciBjLCB1bnNpZ25lZCBjaGFyICpzKTsKLWV4dGVybiBib29sIHBnX3VuaWNvZGVfdG9f c2VydmVyX25vZXJyb3IocGdfd2NoYXIgYywgdW5zaWduZWQgY2hhciAqcyk7CitleHRlcm4gdm9p ZCBwZ191bmljb2RlX3RvX3NlcnZlcihjaGFyMzJfdCBjLCB1bnNpZ25lZCBjaGFyICpzKTsKK2V4 dGVybiBib29sIHBnX3VuaWNvZGVfdG9fc2VydmVyX25vZXJyb3IoY2hhcjMyX3QgYywgdW5zaWdu ZWQgY2hhciAqcyk7CiAKIGV4dGVybiB1bnNpZ25lZCBzaG9ydCBCSUc1dG9DTlModW5zaWduZWQg c2hvcnQgYmlnNSwgdW5zaWduZWQgY2hhciAqbGMpOwogZXh0ZXJuIHVuc2lnbmVkIHNob3J0IENO U3RvQklHNSh1bnNpZ25lZCBzaG9ydCBjbnMsIHVuc2lnbmVkIGNoYXIgbGMpOwpkaWZmIC0tZ2l0 IGEvc3JjL3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QgYi9zcmMvdG9vbHMvcGdpbmRlbnQv dHlwZWRlZnMubGlzdAppbmRleCA0M2ZlM2JjZDU5My4uY2UzODJjNTQ2ZTIgMTAwNjQ0Ci0tLSBh L3NyYy90b29scy9wZ2luZGVudC90eXBlZGVmcy5saXN0CisrKyBiL3NyYy90b29scy9wZ2luZGVu dC90eXBlZGVmcy5saXN0CkBAIC0zNTA2LDYgKzM1MDYsOCBAQCBjYl9jbGVhbnVwX2RpcgogY2Jf b3B0aW9ucwogY2JfdGFibGVzcGFjZQogY2JfdGFibGVzcGFjZV9tYXBwaW5nCitjaGFyMTZfdAor Y2hhcjMyX3QKIGNoZWNrX2FnZ19hcmd1bWVudHNfY29udGV4dAogY2hlY2tfZnVuY3Rpb25fY2Fs bGJhY2sKIGNoZWNrX25ldHdvcmtfZGF0YQotLSAKMi40My4wCgo= --=-zu6WarS5aV63ZTxwQh0N--