Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wcVbS-003POb-0B for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 21:57:50 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wcVbQ-002kLs-35 for pgsql-hackers@arkaria.postgresql.org; Wed, 24 Jun 2026 21:57:48 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1wcVbQ-002kLk-1J for pgsql-hackers@lists.postgresql.org; Wed, 24 Jun 2026 21:57:48 +0000 Received: from mail-dl1-x122a.google.com ([2607:f8b0:4864:20::122a]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wcVbN-000000006B6-1tFu for pgsql-hackers@postgresql.org; Wed, 24 Jun 2026 21:57:48 +0000 Received: by mail-dl1-x122a.google.com with SMTP id a92af1059eb24-139aff562e1so2191097c88.1 for ; Wed, 24 Jun 2026 14:57:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1782338263; x=1782943063; 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=F1dbFz85z6sY8hTWjMBO9ZTT9TrQeu2MQDTRIskS1EA=; b=LOcsfS3JCF9I9eZg11orWVCGovGGt2dPBeoA9SZX43nxGtk+srBwRzfBOzZIH/4+f4 YH9raC3zRuahm1zINPSAre0KCDOjBa6obRtqv1shG1FhCaBKUHYgiYho++0eK4gUj5MF mGrLBqWw5SrQfBPNvZZ7bZPhRsYd2OnWnEPaRxe5c9SeL5Xqcpemm5qih1b6jq52fuNu 9Ggz42ps1fZpzHE5ROfZzp+gdiI9J7DdBKX96hrZfo0Azkz+e/FhCrxy+BJFLYKBKL+F lTMZ8c1Ewq+Ada0fnii48m8fS4XYffeM0sXgoc5ZvqmtdnaVkmDd2Jiq1LGovAQOyGsU tIbg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1782338263; x=1782943063; h=mime-version:user-agent:references:in-reply-to:date:cc:to:from :subject:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject :date:message-id:reply-to; bh=F1dbFz85z6sY8hTWjMBO9ZTT9TrQeu2MQDTRIskS1EA=; b=U/tB2lgT3tOCxtL0TGRA97koqGpGtmofU0+OQb2W4l8H43iFk8U+FcJ/NOOI+A5syA N1aDQU3mYGLGD9sR3tmPh27axTYlXgYFvJNbGigit6gcmmzKEB7YZAzw3+g0OnHIKBli ZUjnQUSYMJcjSP1+eT2WHG+d4DsYYSm8rkcu0uNch48Dky0gcXO+EVsGMLBtEACQpjec M5Tzi2nJNRpyBytRoZak8gnq1FeO3jsTTuORnWMTWyRuCF+88WrKECPcUnALm0U1WIuP Yn4NSekqTdojLJMd+8FlxHKiUDe3iwv+5mPPoOcurAWcbdSqYdzCZg3heJ5VgaKmMFQ9 l6vg== X-Gm-Message-State: AOJu0YzDT8Yrefxw8NgmoLud9ikd5Row+PQOEtQcRmbM+9dp1ihLghLY 4LMLx1cO77adMSazExEiMstEKyRCeFk0x3YtWxJfFz5UlhitGX77iTAZF0786pG6HA== X-Gm-Gg: AfdE7ckC/2E60hob6L0EKjyQSTPzIhG88qe0BfXIJsuICRmcqfwNlFPP2625JjoAkIm WOqKZnfVdvNXDcl9r2z3YyPQRKqG5/M9pKwZ9w7x608NzY9ZQDztJvCyTUzTVi4cGRM2iGBFaUc ffiaW1//I4KcDJMWIWRHLe6RQ8BQzANPFmz6YtwKDndGCraIXjlEYjHUe/DnZy3J3xBh8XP1FtM JQWjU/X3ZT8A3BxPP9ne6PKOwMqwZeTc2fTcmFP2huPUtAws3Mf3e0HDq0AnEN6aq8D7Ba36Jwk U6e6RlWhZtXzU35QbLwFmswjq1PPY0xfNy/2goxPitHer1ef68qPcylvtcNdpvUGmiW9pzXaD7B 4MvI7Cb/pbDCB395ICiqZku3sTGX+BXXAnuAbNugDPWJNAXEJvUvEgJ3wAaHEywr5kLkpfOZc9h rwIVwv2aPMlhlq X-Received: by 2002:a05:7022:41a7:b0:139:7a48:651b with SMTP id a92af1059eb24-139d0c10467mr3487136c88.14.1782338263249; Wed, 24 Jun 2026 14:57:43 -0700 (PDT) Received: from [10.10.244.130] ([50.175.226.11]) by smtp.gmail.com with ESMTPSA id a92af1059eb24-139d90e971dsm2323157c88.10.2026.06.24.14.57.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 24 Jun 2026 14:57:42 -0700 (PDT) Message-ID: <592441c1d871a4ed0ac1708e132f447caa35869c.camel@j-davis.com> Subject: Re: Small patch to improve safety of utf8_to_unicode(). From: Jeff Davis To: Chao Li Cc: pgsql-hackers@postgresql.org Date: Wed, 24 Jun 2026 14:57:41 -0700 In-Reply-To: <313BCA0E-2E74-4EB6-9AA8-10DB7F439151@gmail.com> References: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> <313BCA0E-2E74-4EB6-9AA8-10DB7F439151@gmail.com> Content-Type: multipart/mixed; boundary="=-pBACy9Cj6vvohW6jbWR4" User-Agent: Evolution 3.52.3-0ubuntu1.1 MIME-Version: 1.0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --=-pBACy9Cj6vvohW6jbWR4 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2026-06-24 at 16:44 +0800, Chao Li wrote: > There is a compile warning against pg_wchar.h in 0004: Fixed. I also used a loop in utf8decode() which is slightly smaller, which is good if we intend it to be inlined by a lot of callers. Regards, Jeff Davis --=-pBACy9Cj6vvohW6jbWR4 Content-Disposition: attachment; filename="v5-0001-unicode_case.c-defend-against-invalid-UTF8.patch" Content-Type: text/x-patch; name="v5-0001-unicode_case.c-defend-against-invalid-UTF8.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5YTliZmJjNGYzODY2ZDc3ZTQ4OTMzZGYwNTIwODZhMjU1OGU3MjYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDIyIEp1biAyMDI2IDE2OjMwOjAxIC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NSAxLzVdIHVu aWNvZGVfY2FzZS5jOiBkZWZlbmQgYWdhaW5zdCBpbnZhbGlkIFVURjguCgpSZXZpZXdlZC1ieTog Q2hhbyBMaSA8bGkuZXZhbi5jaGFvQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogaHR0cHM6Ly9wb3N0 Z3IuZXMvbS9jMzU1MzU0ZTZjM2Y0YTdhYWZiMDQ3MzYxYjczZGIyNDcyNjBmY2EwLmNhbWVsQGot ZGF2aXMuY29tCkJhY2twYXRjaC10aHJvdWdoOiAxNwotLS0KIHNyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGVfYnVpbHRpbi5jIHwgMjQgKysrKysrKystLS0KIHNyYy9jb21tb24vdW5pY29k ZS9jYXNlX3Rlc3QuYyAgICAgICAgICAgIHwgIDggKysrKwogc3JjL2NvbW1vbi91bmljb2RlX2Nh c2UuYyAgICAgICAgICAgICAgICAgfCA1MiArKysrKysrKysrKysrKysrKysrLS0tLQogMyBmaWxl cyBjaGFuZ2VkLCA3MCBpbnNlcnRpb25zKCspLCAxNCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IDAxZDRmNTViMDdlLi43YzM2ZmQ1 MDkxYiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGlu LmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTYy LDIxICs2MiwzMyBAQCBpbml0Y2FwX3dibmV4dCh2b2lkICpzdGF0ZSkKIAogCXdoaWxlICh3YnN0 YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4pCiAJewotCQljaGFyMzJfdAl1ID0gdXRmOF90b191 bmljb2RlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArCisJCWludAkJCXVs ZW4gPSBwZ191dGZfbWJsZW4oKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsK IAkJCQkJCQkJCQl3YnN0YXRlLT5vZmZzZXQpOwotCQlib29sCQljdXJyX2FsbnVtID0gcGdfdV9p c2FsbnVtKHUsIHdic3RhdGUtPnBvc2l4KTsKKwkJY2hhcjMyX3QJdTsKKwkJYm9vbAkJY3Vycl9h bG51bTsKKwkJc2l6ZV90CQlwcmV2X29mZnNldCA9IHdic3RhdGUtPm9mZnNldDsKIAotCQlpZiAo IXdic3RhdGUtPmluaXQgfHwgY3Vycl9hbG51bSAhPSB3YnN0YXRlLT5wcmV2X2FsbnVtKQorCQkv KiBpbnZhbGlkIFVURjggKi8KKwkJaWYgKHdic3RhdGUtPm9mZnNldCArIHVsZW4gPiB3YnN0YXRl LT5sZW4pCiAJCXsKLQkJCXNpemVfdAkJcHJldl9vZmZzZXQgPSB3YnN0YXRlLT5vZmZzZXQ7CisJ CQl3YnN0YXRlLT5pbml0ID0gdHJ1ZTsKKwkJCXdic3RhdGUtPm9mZnNldCA9IHdic3RhdGUtPmxl bjsKKwkJCXJldHVybiBwcmV2X29mZnNldDsKKwkJfQogCisJCXUgPSB1dGY4X3RvX3VuaWNvZGUo KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsKKwkJCQkJCQl3YnN0YXRlLT5v ZmZzZXQpOworCQljdXJyX2FsbnVtID0gcGdfdV9pc2FsbnVtKHUsIHdic3RhdGUtPnBvc2l4KTsK KworCQlpZiAoIXdic3RhdGUtPmluaXQgfHwgY3Vycl9hbG51bSAhPSB3YnN0YXRlLT5wcmV2X2Fs bnVtKQorCQl7CiAJCQl3YnN0YXRlLT5pbml0ID0gdHJ1ZTsKLQkJCXdic3RhdGUtPm9mZnNldCAr PSB1bmljb2RlX3V0ZjhsZW4odSk7CisJCQl3YnN0YXRlLT5vZmZzZXQgKz0gdWxlbjsKIAkJCXdi c3RhdGUtPnByZXZfYWxudW0gPSBjdXJyX2FsbnVtOwogCQkJcmV0dXJuIHByZXZfb2Zmc2V0Owog CQl9CiAKLQkJd2JzdGF0ZS0+b2Zmc2V0ICs9IHVuaWNvZGVfdXRmOGxlbih1KTsKKwkJd2JzdGF0 ZS0+b2Zmc2V0ICs9IHVsZW47CiAJfQogCiAJcmV0dXJuIHdic3RhdGUtPmxlbjsKZGlmZiAtLWdp dCBhL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyBiL3NyYy9jb21tb24vdW5pY29kZS9j YXNlX3Rlc3QuYwppbmRleCBhMGRiZjAwYjY3MS4uMzFlYTk0NTEzYmYgMTAwNjQ0Ci0tLSBhL3Ny Yy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2Fz ZV90ZXN0LmMKQEAgLTI5Niw2ICsyOTYsOCBAQCB0ZnVuY19mb2xkKGNoYXIgKmRzdCwgc2l6ZV90 IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIHN0YXRpYyB2b2lkCiB0ZXN0X2NvbnZlcnRfY2Fz ZSh2b2lkKQogeworCXNpemVfdAkJbmVlZGVkOworCiAJLyogdGVzdCBzdHJpbmcgd2l0aCBubyBj YXNlIGNoYW5nZXMgKi8KIAl0ZXN0X2NvbnZlcnQodGZ1bmNfbG93ZXIsICLiiJriiJ4iLCAi4oia 4oieIik7CiAJLyogdGVzdCBhZGp1c3QtdG8tY2FzZWQgYmVoYXZpb3IgKi8KQEAgLTMyMCw2ICsz MjIsMTIgQEAgdGVzdF9jb252ZXJ0X2Nhc2Uodm9pZCkKIAkvKiBVK0ZGMTEgRlVMTFdJRFRIIE9O RSBpcyBhbHBoYW51bWVyaWMgZm9yIGZ1bGwgY2FzZSBtYXBwaW5nICovCiAJdGVzdF9jb252ZXJ0 KHRmdW5jX3RpdGxlLCAiXHVGRjExYSIsICJcdUZGMTFhIik7CiAKKwkvKiBpbnZhbGlkIFVURjg6 IHRydW5jYXRlZCBtdWx0aWJ5dGUgc2VxdWVuY2UgKi8KKwluZWVkZWQgPSB1bmljb2RlX3N0cmZv bGQoTlVMTCwgMCwgImFiY1x4Q0UiLCA0LCBmYWxzZSk7CisJQXNzZXJ0KG5lZWRlZCA9PSAzKTsK KwkvKiBpbnZhbGlkIFVURjg6IGludmFsaWQgYnl0ZSAqLworCW5lZWRlZCA9IHVuaWNvZGVfc3Ry Zm9sZChOVUxMLCAwLCAiYWJjXHhGOHh5eiIsIDcsIGZhbHNlKTsKKwlBc3NlcnQobmVlZGVkID09 IDMpOwogCiAjaWZkZWYgVVNFX0lDVQogCWljdV90ZXN0X2Z1bGwoIiIpOwpkaWZmIC0tZ2l0IGEv c3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKaW5k ZXggZDZlZTAwYjdkOWMuLjQyZWI3ZDIyMjExIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNv ZGVfY2FzZS5jCisrKyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKQEAgLTE4OSw2ICsxODks MjIgQEAgdW5pY29kZV9zdHJmb2xkKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNo YXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAkJCQkJCU5VTEwpOwogfQogCisvKiBsb2NhbCB2ZXJz aW9uIG9mIHBnX3V0Zl9tYmxlbigpIHRvIGJlIGlubGluYWJsZSAqLworc3RhdGljIGludAordXRm OF9tYmxlbihjb25zdCB1bnNpZ25lZCBjaGFyICpzKQoreworCWlmICgoKnMgJiAweDgwKSA9PSAw KQorCQlyZXR1cm4gMTsKKwllbHNlIGlmICgoKnMgJiAweGUwKSA9PSAweGMwKQorCQlyZXR1cm4g MjsKKwllbHNlIGlmICgoKnMgJiAweGYwKSA9PSAweGUwKQorCQlyZXR1cm4gMzsKKwllbHNlIGlm ICgoKnMgJiAweGY4KSA9PSAweGYwKQorCQlyZXR1cm4gNDsKKwllbHNlCisJCXJldHVybiAtMTsK K30KKwogLyoKICAqIEltcGxlbWVudCBVbmljb2RlIERlZmF1bHQgQ2FzZSBDb252ZXJzaW9uIGFs Z29yaXRobS4KICAqCkBAIC0yMjcsMTIgKzI0MywxOCBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0 LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCiAJd2hp bGUgKHNyY29mZiA8IHNyY2xlbikKIAl7Ci0JCWNoYXIzMl90CXUxID0gdXRmOF90b191bmljb2Rl KChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNyYyArIHNyY29mZik7Ci0JCWludAkJCXUxbGVuID0g dW5pY29kZV91dGY4bGVuKHUxKTsKKwkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1 bnNpZ25lZCBjaGFyICopIHNyYyArIHNyY29mZik7CisJCWNoYXIzMl90CXUxOwogCQljaGFyMzJf dAlzaW1wbGUgPSAwOwogCQljb25zdCBjaGFyMzJfdCAqc3BlY2lhbCA9IE5VTEw7CiAJCWVudW0g Q2FzZU1hcFJlc3VsdCBjYXNlbWFwX3Jlc3VsdDsKIAorCQkvKiBpbnZhbGlkIFVURjggKi8KKwkJ aWYgKHUxbGVuIDwgMCB8fCBzcmNvZmYgKyB1MWxlbiA+IHNyY2xlbikKKwkJCWJyZWFrOworCisJ CXUxID0gdXRmOF90b191bmljb2RlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNyYyArIHNyY29m Zik7CisKIAkJaWYgKHN0cl9jYXNla2luZCA9PSBDYXNlVGl0bGUpCiAJCXsKIAkJCWlmIChzcmNv ZmYgPT0gYm91bmRhcnkpCkBAIC0zMTYsNyArMzM4LDE0IEBAIGNoZWNrX2ZpbmFsX3NpZ21hKGNv bnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCkKIAl7CiAJ CWlmICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3RyW2ldICYgMHhDMCkgPT0gMHhDMCkKIAkJ ewotCQkJY2hhcjMyX3QJY3VyciA9IHV0ZjhfdG9fdW5pY29kZShzdHIgKyBpKTsKKwkJCWludAkJ CXUxbGVuID0gdXRmOF9tYmxlbigoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIgKyBpKTsKKwkJ CWNoYXIzMl90CWN1cnI7CisKKwkJCS8qIGludmFsaWQgVVRGOCAqLworCQkJaWYgKHUxbGVuIDwg MCB8fCBpICsgdTFsZW4gPiBsZW4pCisJCQkJcmV0dXJuIGZhbHNlOworCisJCQljdXJyID0gdXRm OF90b191bmljb2RlKHN0ciArIGkpOwogCiAJCQlpZiAocGdfdV9wcm9wX2Nhc2VfaWdub3JhYmxl KGN1cnIpKQogCQkJCWNvbnRpbnVlOwpAQCAtMzI3LDggKzM1Niw4IEBAIGNoZWNrX2ZpbmFsX3Np Z21hKGNvbnN0IHVuc2lnbmVkIGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCkK IAkJfQogCQllbHNlIGlmICgoc3RyW2ldICYgMHhDMCkgPT0gMHg4MCkKIAkJCWNvbnRpbnVlOwot Ci0JCUFzc2VydChmYWxzZSk7CQkJLyogaW52YWxpZCBVVEYtOCAqLworCQllbHNlCisJCQlyZXR1 cm4gZmFsc2U7CQkJLyogaW52YWxpZCBVVEY4ICovCiAJfQogCiAJLyogZW5kIG9mIHN0cmluZyBp cyBub3QgZm9sbG93ZWQgYnkgYSBDYXNlZCBjaGFyYWN0ZXIgKi8KQEAgLTM0MCw3ICszNjksMTQg QEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBzaXplX3QgbGVu LCBzaXplX3Qgb2Zmc2V0KQogCXsKIAkJaWYgKChzdHJbaV0gJiAweDgwKSA9PSAwIHx8IChzdHJb aV0gJiAweEMwKSA9PSAweEMwKQogCQl7Ci0JCQljaGFyMzJfdAljdXJyID0gdXRmOF90b191bmlj b2RlKHN0ciArIGkpOworCQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25l ZCBjaGFyICopIHN0ciArIGkpOworCQkJY2hhcjMyX3QJY3VycjsKKworCQkJLyogaW52YWxpZCBV VEY4ICovCisJCQlpZiAodTFsZW4gPCAwIHx8IGkgKyB1MWxlbiA+IGxlbikKKwkJCQlyZXR1cm4g ZmFsc2U7CisKKwkJCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoc3RyICsgaSk7CiAKIAkJCWlmIChw Z191X3Byb3BfY2FzZV9pZ25vcmFibGUoY3VycikpCiAJCQkJY29udGludWU7CkBAIC0zNTEsOCAr Mzg3LDggQEAgY2hlY2tfZmluYWxfc2lnbWEoY29uc3QgdW5zaWduZWQgY2hhciAqc3RyLCBzaXpl X3QgbGVuLCBzaXplX3Qgb2Zmc2V0KQogCQl9CiAJCWVsc2UgaWYgKChzdHJbaV0gJiAweEMwKSA9 PSAweDgwKQogCQkJY29udGludWU7Ci0KLQkJQXNzZXJ0KGZhbHNlKTsJCQkvKiBpbnZhbGlkIFVU Ri04ICovCisJCWVsc2UKKwkJCXJldHVybiBmYWxzZTsJCQkvKiBpbnZhbGlkIFVURjggKi8KIAl9 CiAKIAlyZXR1cm4gdHJ1ZTsKLS0gCjIuNDMuMAoK --=-pBACy9Cj6vvohW6jbWR4 Content-Disposition: attachment; filename="v5-0002-pg_unicode_fast-fix-final-sigma-logic.patch" Content-Type: text/x-patch; name="v5-0002-pg_unicode_fast-fix-final-sigma-logic.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBjMzg5ZThmM2Q0N2M1MTE4MzcwMmY0Njg4NDZjMGFkOGMzM2JlYWFlIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU dWUsIDIzIEp1biAyMDI2IDE3OjA5OjQ5IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NSAyLzVdIHBn X3VuaWNvZGVfZmFzdDogZml4IGZpbmFsIHNpZ21hIGxvZ2ljLgoKSWYgdGhlIHN0cmluZyBpcyBw cmVjZWRlZCBvbmx5IGJ5IENhc2UgSWdub3JhYmxlIGNoYXJhY3RlcnMsIGRvbid0CmNvbnNpZGVy IGl0IHRvIGJlIGEgZmluYWwgc2lnbWEuCgpJbiB0aGUgcHJvY2VzcywgcmVmYWN0b3Igc28gdGhh dCB0aGUgcHJlY2VkaW5nIGFuZCBmb2xsb3dpbmcKY2hhcmFjdGVycyBhcmUgZm91bmQgZmlyc3Qs IGFuZCB0aGVuIHRoZSBydWxlIGlzIGFwcGxpZWQsIHRvIGltcHJvdmUKY2xhcml0eS4KCkRpc2N1 c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFmYjA0NzM2MWI3M2Ri MjQ3MjYwZmNhMC5jYW1lbEBqLWRhdmlzLmNvbQpCYWNrcGF0Y2gtdGhyb3VnaDogMTgKLS0tCiBz cmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jICAgICAgICAgICAgICAgICAgfCA4OCArKysrKysrKysr LS0tLS0tLS0tLS0tCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxhdGUudXRmOC5vdXQg fCAgNiArKwogc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS51dGY4LnNxbCAgICAgIHwgIDEg KwogMyBmaWxlcyBjaGFuZ2VkLCA0NyBpbnNlcnRpb25zKCspLCA0OCBkZWxldGlvbnMoLSkKCmRp ZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jIGIvc3JjL2NvbW1vbi91bmljb2Rl X2Nhc2UuYwppbmRleCA0MmViN2QyMjIxMS4uZGQ1YjNiYTg2ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZV9jYXNlLmMKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYwpAQCAt MzIzLDc1ICszMjMsNjcgQEAgY29udmVydF9jYXNlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUs IGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKICAqIDMtMTcuIFRoZSBjaGFyYWN0ZXIg YXQgdGhlIGdpdmVuIG9mZnNldCBtdXN0IGJlIGRpcmVjdGx5IHByZWNlZGVkIGJ5IGEKICAqIENh c2VkIGNoYXJhY3RlciwgYW5kIG11c3Qgbm90IGJlIGRpcmVjdGx5IGZvbGxvd2VkIGJ5IGEgQ2Fz ZWQgY2hhcmFjdGVyLgogICoKLSAqIENhc2VfSWdub3JhYmxlIGNoYXJhY3RlcnMgYXJlIGlnbm9y ZWQuIE5COiBzb21lIGNoYXJhY3RlcnMgbWF5IGJlIGJvdGgKKyAqIENhc2VfSWdub3JhYmxlIGNo YXJhY3RlcnMgYXJlIGlnbm9yZWQuIE5laXRoZXIgYmVnaW5uaW5nIG9mIHN0cmluZyBub3IgZW5k CisgKiBvZiBzdHJpbmcgYXJlIGNvbnNpZGVyZWQgQ2FzZWQgY2hhcmFjdGVycy4gTkI6IHNvbWUg Y2hhcmFjdGVycyBtYXkgYmUgYm90aAogICogQ2FzZWQgYW5kIENhc2VfSWdub3JhYmxlLCBpbiB3 aGljaCBjYXNlIHRoZXkgYXJlIGlnbm9yZWQuCiAgKi8KIHN0YXRpYyBib29sCiBjaGVja19maW5h bF9zaWdtYShjb25zdCB1bnNpZ25lZCBjaGFyICpzdHIsIHNpemVfdCBsZW4sIHNpemVfdCBvZmZz ZXQpCiB7Ci0JLyogdGhlIHN0YXJ0IG9mIHRoZSBzdHJpbmcgaXMgbm90IHByZWNlZGVkIGJ5IGEg Q2FzZWQgY2hhcmFjdGVyICovCi0JaWYgKG9mZnNldCA9PSAwKQotCQlyZXR1cm4gZmFsc2U7CisJ Ym9vbAkJcHJlY2VkZWRfYnlfY2FzZWQgPSBmYWxzZTsKKwlib29sCQlmb2xsb3dlZF9ieV9jYXNl ZCA9IGZhbHNlOworCWNoYXIzMl90CWN1cnI7CisJaW50CQkJdWxlbjsKIAotCS8qIGl0ZXJhdGUg YmFja3dhcmRzLCBsb29raW5nIGZvciBDYXNlZCBjaGFyYWN0ZXIgKi8KLQlmb3IgKGludCBpID0g b2Zmc2V0IC0gMTsgaSA+PSAwOyBpLS0pCisJLyogaXRlcmF0ZSBiYWNrd2FyZHMgbG9va2luZyBm b3IgcHJlY2VkaW5nIGNoYXJhY3RlciAqLworCWZvciAoaW50IGkgPSBvZmZzZXQ7IGkgPiAwOykK IAl7Ci0JCWlmICgoc3RyW2ldICYgMHg4MCkgPT0gMCB8fCAoc3RyW2ldICYgMHhDMCkgPT0gMHhD MCkKLQkJewotCQkJaW50CQkJdTFsZW4gPSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFy ICopIHN0ciArIGkpOwotCQkJY2hhcjMyX3QJY3VycjsKKwkJLyogc2tpcCBiYWNrd2FyZHMgdGhy b3VnaCBjb250aW51YXRpb24gYnl0ZXMgKi8KKwkJaS0tOworCQlpZiAoKHN0cltpXSAmIDB4QzAp ID09IDB4ODApCisJCQljb250aW51ZTsKIAotCQkJLyogaW52YWxpZCBVVEY4ICovCi0JCQlpZiAo dTFsZW4gPCAwIHx8IGkgKyB1MWxlbiA+IGxlbikKLQkJCQlyZXR1cm4gZmFsc2U7CisJCS8qIG5v dyBhdCBsZWFkaW5nIGJ5dGUgb2YgcHJldmlvdXMgc2VxdWVuY2UgKi8KKwkJQXNzZXJ0KChzdHJb aV0gJiAweDgwKSA9PSAwIHx8IChzdHJbaV0gJiAweEMwKSA9PSAweEMwKTsKIAotCQkJY3VyciA9 IHV0ZjhfdG9fdW5pY29kZShzdHIgKyBpKTsKKwkJdWxlbiA9IHV0ZjhfbWJsZW4oKGNvbnN0IHVu c2lnbmVkIGNoYXIgKikgc3RyICsgaSk7CiAKLQkJCWlmIChwZ191X3Byb3BfY2FzZV9pZ25vcmFi bGUoY3VycikpCi0JCQkJY29udGludWU7Ci0JCQllbHNlIGlmIChwZ191X3Byb3BfY2FzZWQoY3Vy cikpCi0JCQkJYnJlYWs7Ci0JCQllbHNlCi0JCQkJcmV0dXJuIGZhbHNlOworCQkvKiBpbnZhbGlk IFVURjggKi8KKwkJaWYgKHVsZW4gPCAwIHx8IGkgKyB1bGVuID4gbGVuKQorCQkJcmV0dXJuIGZh bHNlOworCisJCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg c3RyICsgaSk7CisKKwkJaWYgKCFwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUoY3VycikpCisJCXsK KwkJCXByZWNlZGVkX2J5X2Nhc2VkID0gcGdfdV9wcm9wX2Nhc2VkKGN1cnIpOworCQkJYnJlYWs7 CiAJCX0KLQkJZWxzZSBpZiAoKHN0cltpXSAmIDB4QzApID09IDB4ODApCi0JCQljb250aW51ZTsK LQkJZWxzZQotCQkJcmV0dXJuIGZhbHNlOwkJCS8qIGludmFsaWQgVVRGOCAqLwogCX0KIAotCS8q IGVuZCBvZiBzdHJpbmcgaXMgbm90IGZvbGxvd2VkIGJ5IGEgQ2FzZWQgY2hhcmFjdGVyICovCi0J aWYgKG9mZnNldCA9PSBsZW4pCi0JCXJldHVybiB0cnVlOworCXVsZW4gPSB1dGY4X21ibGVuKChj b25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIG9mZnNldCk7CiAKLQkvKiBpdGVyYXRlIGZvcndh cmRzLCBsb29raW5nIGZvciBDYXNlZCBjaGFyYWN0ZXIgKi8KLQlmb3IgKGludCBpID0gb2Zmc2V0 ICsgMTsgaSA8IGxlbiAmJiBzdHJbaV0gIT0gJ1wwJzsgaSsrKQorCS8qIGl0ZXJhdGUgZm9yd2Fy ZCBsb29raW5nIGZvciBmb2xsb3dpbmcgY2hhcmFjdGVyICovCisJZm9yIChpbnQgaSA9IG9mZnNl dCArIHVsZW47IGkgPCBsZW47KQogCXsKLQkJaWYgKChzdHJbaV0gJiAweDgwKSA9PSAwIHx8IChz dHJbaV0gJiAweEMwKSA9PSAweEMwKQotCQl7Ci0JCQlpbnQJCQl1MWxlbiA9IHV0ZjhfbWJsZW4o KGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyICsgaSk7Ci0JCQljaGFyMzJfdAljdXJyOworCQl1 bGVuID0gdXRmOF9tYmxlbigoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIgKyBpKTsKIAotCQkJ LyogaW52YWxpZCBVVEY4ICovCi0JCQlpZiAodTFsZW4gPCAwIHx8IGkgKyB1MWxlbiA+IGxlbikK LQkJCQlyZXR1cm4gZmFsc2U7CisJCS8qIGludmFsaWQgVVRGOCAqLworCQlpZiAodWxlbiA8IDAg fHwgaSArIHVsZW4gPiBsZW4pCisJCQlyZXR1cm4gZmFsc2U7CiAKLQkJCWN1cnIgPSB1dGY4X3Rv X3VuaWNvZGUoc3RyICsgaSk7CisJCWN1cnIgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2ln bmVkIGNoYXIgKikgc3RyICsgaSk7CiAKLQkJCWlmIChwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUo Y3VycikpCi0JCQkJY29udGludWU7Ci0JCQllbHNlIGlmIChwZ191X3Byb3BfY2FzZWQoY3Vycikp Ci0JCQkJcmV0dXJuIGZhbHNlOwotCQkJZWxzZQotCQkJCWJyZWFrOworCQlpZiAoIXBnX3VfcHJv cF9jYXNlX2lnbm9yYWJsZShjdXJyKSkKKwkJeworCQkJZm9sbG93ZWRfYnlfY2FzZWQgPSBwZ191 X3Byb3BfY2FzZWQoY3Vycik7CisJCQlicmVhazsKIAkJfQotCQllbHNlIGlmICgoc3RyW2ldICYg MHhDMCkgPT0gMHg4MCkKLQkJCWNvbnRpbnVlOwotCQllbHNlCi0JCQlyZXR1cm4gZmFsc2U7CQkJ LyogaW52YWxpZCBVVEY4ICovCisKKwkJaSArPSB1bGVuOwogCX0KIAotCXJldHVybiB0cnVlOwor CXJldHVybiAocHJlY2VkZWRfYnlfY2FzZWQgJiYgIWZvbGxvd2VkX2J5X2Nhc2VkKTsKIH0KIAog LyoKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS51dGY4Lm91 dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvY29sbGF0ZS51dGY4Lm91dAppbmRleCAwYzNh YjVjODliMi4uOTlmZGMxMTFmYTQgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0 ZWQvY29sbGF0ZS51dGY4Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NvbGxh dGUudXRmOC5vdXQKQEAgLTI2Myw2ICsyNjMsMTIgQEAgU0VMRUNUIGxvd2VyKCfOkc2FzqPNhc6R JyBDT0xMQVRFIFBHX1VOSUNPREVfRkFTVCk7IC0tIDAzOTEgMDM0NSAwM0EzIDAzNDUgMDM5MQog IM6xzYXPg82FzrEKICgxIHJvdykKIAorU0VMRUNUIGxvd2VyKFUmJ1wwMzAwXDAzQTMnIENPTExB VEUgUEdfVU5JQ09ERV9GQVNUKTsKKyBsb3dlciAKKy0tLS0tLS0KKyDMgM+DCisoMSByb3cpCisK IC0tIHByb3BlcnRpZXMKIFNFTEVDVCAneHl6JyB+ICdbWzphbG51bTpdXScgQ09MTEFURSBQR19V TklDT0RFX0ZBU1Q7CiAgP2NvbHVtbj8gCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL3Nx bC9jb2xsYXRlLnV0Zjguc3FsIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29sbGF0ZS51dGY4LnNx bAppbmRleCBkNmQxNDIyMGFiMy4uMjJhZWNlZTNhNjAgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3Jl Z3Jlc3Mvc3FsL2NvbGxhdGUudXRmOC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvY29s bGF0ZS51dGY4LnNxbApAQCAtMTI4LDYgKzEyOCw3IEBAIFNFTEVDVCBsb3dlcignMM6jJyBDT0xM QVRFIFBHX1VOSUNPREVfRkFTVCk7IC0tIDAwMzAgMDNBMwogU0VMRUNUIGxvd2VyKCfOkc6jzpEn IENPTExBVEUgUEdfVU5JQ09ERV9GQVNUKTsgLS0gMDM5MSAwM0EzIDAzOTEKIFNFTEVDVCBsb3dl cignzpHNg86jzYPOkScgQ09MTEFURSBQR19VTklDT0RFX0ZBU1QpOyAtLSAwMzkxIDAzNDMgMDNB MyAwMzQzIDAzOTEKIFNFTEVDVCBsb3dlcignzpHNhc6jzYXOkScgQ09MTEFURSBQR19VTklDT0RF X0ZBU1QpOyAtLSAwMzkxIDAzNDUgMDNBMyAwMzQ1IDAzOTEKK1NFTEVDVCBsb3dlcihVJidcMDMw MFwwM0EzJyBDT0xMQVRFIFBHX1VOSUNPREVfRkFTVCk7CiAKIC0tIHByb3BlcnRpZXMKIAotLSAK Mi40My4wCgo= --=-pBACy9Cj6vvohW6jbWR4 Content-Disposition: attachment; filename*0=v5-0003-unicode_case.c-change-API-to-signal-UTF8-decoding.pat; filename*1=ch Content-Type: text/x-patch; name="v5-0003-unicode_case.c-change-API-to-signal-UTF8-decoding.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA3ZjI0OTRlOTBmMDQxY2I2ZTExOGMwYTZhMDYyYjllNTM2NGJjNzk5IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDIyIEp1biAyMDI2IDE2OjMxOjM4IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NSAzLzVdIHVu aWNvZGVfY2FzZS5jOiBjaGFuZ2UgQVBJIHRvIHNpZ25hbCBVVEY4IGRlY29kaW5nCiBlcnJvci4K CkVycm9ycyBhdCB0aGlzIHBvaW50IGFyZSBub3QgZXhwZWN0ZWQsIGJ1dCBpZiBlbmNvdW50ZXJl ZCwgc2lnbmFsIHRvCnRoZSBjYWxsZXIgc28gaXQgY2FuIHJhaXNlIHRoZSBhcHByb3ByaWF0ZSBl cnJvci4KCkRpc2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFm YjA0NzM2MWI3M2RiMjQ3MjYwZmNhMC5jYW1lbEBqLWRhdmlzLmNvbQotLS0KIHNyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jIHwgNTAgKysrKysrKysrKysrKysrKysrKy0t LS0KIHNyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyAgICAgICAgICAgIHwgMzcgKysrKysr KysrKy0tLS0tLS0KIHNyYy9jb21tb24vdW5pY29kZV9jYXNlLmMgICAgICAgICAgICAgICAgIHwg NDYgKysrKysrKysrKysrLS0tLS0tLS0tCiBzcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9jYXNl LmggICAgICAgICB8ICA4ICsrLS0KIDQgZmlsZXMgY2hhbmdlZCwgOTQgaW5zZXJ0aW9ucygrKSwg NDcgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xv Y2FsZV9idWlsdGluLmMgYi9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4u YwppbmRleCA3YzM2ZmQ1MDkxYi4uNTYxOWRhZjQzYzMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5k L3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCisrKyBiL3NyYy9iYWNrZW5kL3V0aWxzL2Fk dC9wZ19sb2NhbGVfYnVpbHRpbi5jCkBAIC05OCw4ICs5OCwxNiBAQCBzdGF0aWMgc2l6ZV90CiBz dHJsb3dlcl9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAq c3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJu IHVuaWNvZGVfc3RybG93ZXIoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJCQkJCWxv Y2FsZS0+YnVpbHRpbi5jYXNlbWFwX2Z1bGwpOworCXNpemVfdAkJY29uc3VtZWQ7CisJc2l6ZV90 CQlyZXN1bHQ7CisKKwlyZXN1bHQgPSB1bmljb2RlX3N0cmxvd2VyKGRlc3QsIGRlc3RzaXplLCBz cmMsIHNyY2xlbiwgJmNvbnN1bWVkLAorCQkJCQkJCSAgbG9jYWxlLT5idWlsdGluLmNhc2VtYXBf ZnVsbCk7CisJaWYgKGNvbnN1bWVkIDwgc3JjbGVuKQorCQlyZXBvcnRfaW52YWxpZF9lbmNvZGlu ZyhHZXREYXRhYmFzZUVuY29kaW5nKCksIHNyYyArIGNvbnN1bWVkLAorCQkJCQkJCQlzcmNsZW4g LSBjb25zdW1lZCk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgc2l6ZV90CkBAIC0x MTQsMjYgKzEyMiw1MCBAQCBzdHJ0aXRsZV9idWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0 c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkuaW5pdCA9IGZhbHNlLAog CQkucHJldl9hbG51bSA9IGZhbHNlLAogCX07CisJc2l6ZV90CQljb25zdW1lZDsKKwlzaXplX3QJ CXJlc3VsdDsKIAotCXJldHVybiB1bmljb2RlX3N0cnRpdGxlKGRlc3QsIGRlc3RzaXplLCBzcmMs IHNyY2xlbiwKLQkJCQkJCQlsb2NhbGUtPmJ1aWx0aW4uY2FzZW1hcF9mdWxsLAotCQkJCQkJCWlu aXRjYXBfd2JuZXh0LCAmd2JzdGF0ZSk7CisJcmVzdWx0ID0gdW5pY29kZV9zdHJ0aXRsZShkZXN0 LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sICZjb25zdW1lZCwKKwkJCQkJCQkgIGxvY2FsZS0+YnVp bHRpbi5jYXNlbWFwX2Z1bGwsCisJCQkJCQkJICBpbml0Y2FwX3dibmV4dCwgJndic3RhdGUpOwor CisJaWYgKGNvbnN1bWVkIDwgc3JjbGVuKQorCQlyZXBvcnRfaW52YWxpZF9lbmNvZGluZyhHZXRE YXRhYmFzZUVuY29kaW5nKCksIHNyYyArIGNvbnN1bWVkLAorCQkJCQkJCQlzcmNsZW4gLSBjb25z dW1lZCk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgc2l6ZV90CiBzdHJ1cHBlcl9i dWlsdGluKGNoYXIgKmRlc3QsIHNpemVfdCBkZXN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXpl X3Qgc3JjbGVuLAogCQkJCSBwZ19sb2NhbGVfdCBsb2NhbGUpCiB7Ci0JcmV0dXJuIHVuaWNvZGVf c3RydXBwZXIoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJCQkJCWxvY2FsZS0+YnVp bHRpbi5jYXNlbWFwX2Z1bGwpOworCXNpemVfdAkJY29uc3VtZWQ7CisJc2l6ZV90CQlyZXN1bHQ7 CisKKwlyZXN1bHQgPSB1bmljb2RlX3N0cnVwcGVyKGRlc3QsIGRlc3RzaXplLCBzcmMsIHNyY2xl biwgJmNvbnN1bWVkLAorCQkJCQkJCSAgbG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJ aWYgKGNvbnN1bWVkIDwgc3JjbGVuKQorCQlyZXBvcnRfaW52YWxpZF9lbmNvZGluZyhHZXREYXRh YmFzZUVuY29kaW5nKCksIHNyYyArIGNvbnN1bWVkLAorCQkJCQkJCQlzcmNsZW4gLSBjb25zdW1l ZCk7CisKKwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgc2l6ZV90CiBzdHJmb2xkX2J1aWx0 aW4oY2hhciAqZGVzdCwgc2l6ZV90IGRlc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBz cmNsZW4sCiAJCQkJcGdfbG9jYWxlX3QgbG9jYWxlKQogewotCXJldHVybiB1bmljb2RlX3N0cmZv bGQoZGVzdCwgZGVzdHNpemUsIHNyYywgc3JjbGVuLAotCQkJCQkJICAgbG9jYWxlLT5idWlsdGlu LmNhc2VtYXBfZnVsbCk7CisJc2l6ZV90CQljb25zdW1lZDsKKwlzaXplX3QJCXJlc3VsdDsKKwor CXJlc3VsdCA9IHVuaWNvZGVfc3RyZm9sZChkZXN0LCBkZXN0c2l6ZSwgc3JjLCBzcmNsZW4sICZj b25zdW1lZCwKKwkJCQkJCQkgbG9jYWxlLT5idWlsdGluLmNhc2VtYXBfZnVsbCk7CisJaWYgKGNv bnN1bWVkIDwgc3JjbGVuKQorCQlyZXBvcnRfaW52YWxpZF9lbmNvZGluZyhHZXREYXRhYmFzZUVu Y29kaW5nKCksIHNyYyArIGNvbnN1bWVkLAorCQkJCQkJCQlzcmNsZW4gLSBjb25zdW1lZCk7CisK KwlyZXR1cm4gcmVzdWx0OwogfQogCiBzdGF0aWMgYm9vbApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1v bi91bmljb2RlL2Nhc2VfdGVzdC5jIGIvc3JjL2NvbW1vbi91bmljb2RlL2Nhc2VfdGVzdC5jCmlu ZGV4IDMxZWE5NDUxM2JmLi4wODQyMWQ5ZTVjYSAxMDA2NDQKLS0tIGEvc3JjL2NvbW1vbi91bmlj b2RlL2Nhc2VfdGVzdC5jCisrKyBiL3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYwpAQCAt MTE1LDYgKzExNSw3IEBAIGljdV90ZXN0X2Z1bGwoY2hhciAqc3RyKQogCWNoYXIJCWljdV9mb2xk W0JVRlNaXTsKIAlVRXJyb3JDb2RlCXN0YXR1czsKIAlzaXplX3QJCWxlbiA9IHN0cmxlbihzdHIp OworCXNpemVfdAkJY29uc3VtZWQ7CiAKIAkvKiBmdWxsIGNhc2UgbWFwcGluZyBkb2Vzbid0IHVz ZSBwb3NpeCBzZW1hbnRpY3MgKi8KIAlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgd2JzdGF0ZSA9 IHsKQEAgLTEyNiwxMCArMTI3LDEwIEBAIGljdV90ZXN0X2Z1bGwoY2hhciAqc3RyKQogCQkucHJl dl9hbG51bSA9IGZhbHNlLAogCX07CiAKLQl1bmljb2RlX3N0cmxvd2VyKGxvd2VyLCBCVUZTWiwg c3RyLCBsZW4sIHRydWUpOwotCXVuaWNvZGVfc3RydGl0bGUodGl0bGUsIEJVRlNaLCBzdHIsIGxl biwgdHJ1ZSwgaW5pdGNhcF93Ym5leHQsICZ3YnN0YXRlKTsKLQl1bmljb2RlX3N0cnVwcGVyKHVw cGVyLCBCVUZTWiwgc3RyLCBsZW4sIHRydWUpOwotCXVuaWNvZGVfc3RyZm9sZChmb2xkLCBCVUZT Wiwgc3RyLCBsZW4sIHRydWUpOworCXVuaWNvZGVfc3RybG93ZXIobG93ZXIsIEJVRlNaLCBzdHIs IGxlbiwgJmNvbnN1bWVkLCB0cnVlKTsKKwl1bmljb2RlX3N0cnRpdGxlKHRpdGxlLCBCVUZTWiwg c3RyLCBsZW4sICZjb25zdW1lZCwgdHJ1ZSwgaW5pdGNhcF93Ym5leHQsICZ3YnN0YXRlKTsKKwl1 bmljb2RlX3N0cnVwcGVyKHVwcGVyLCBCVUZTWiwgc3RyLCBsZW4sICZjb25zdW1lZCwgdHJ1ZSk7 CisJdW5pY29kZV9zdHJmb2xkKGZvbGQsIEJVRlNaLCBzdHIsIGxlbiwgJmNvbnN1bWVkLCB0cnVl KTsKIAlzdGF0dXMgPSBVX1pFUk9fRVJST1I7CiAJdWNhc2VtYXBfdXRmOFRvTG93ZXIoY2FzZW1h cCwgaWN1X2xvd2VyLCBCVUZTWiwgc3RyLCBsZW4sICZzdGF0dXMpOwogCXN0YXR1cyA9IFVfWkVS T19FUlJPUjsKQEAgLTI2MCwxMyArMjYxLDE2IEBAIHN0YXRpYyBzaXplX3QKIHRmdW5jX2xvd2Vy KGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJCXNpemVfdCBz cmNsZW4pCiB7Ci0JcmV0dXJuIHVuaWNvZGVfc3RybG93ZXIoZHN0LCBkc3RzaXplLCBzcmMsIHNy Y2xlbiwgdHJ1ZSk7CisJc2l6ZV90CQljb25zdW1lZDsKKworCXJldHVybiB1bmljb2RlX3N0cmxv d2VyKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sICZjb25zdW1lZCwgdHJ1ZSk7CiB9CiAKIHN0 YXRpYyBzaXplX3QKIHRmdW5jX3RpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywKIAkJCXNpemVfdCBzcmNsZW4pCiB7CisJc2l6ZV90CQljb25zdW1lZDsKIAlz dHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgd2JzdGF0ZSA9IHsKIAkJLnN0ciA9IHNyYywKIAkJLmxl biA9IHNyY2xlbiwKQEAgLTI3NSwyOCArMjc5LDMzIEBAIHRmdW5jX3RpdGxlKGNoYXIgKmRzdCwg c2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywKIAkJLnByZXZfYWxudW0gPSBmYWxzZSwK IAl9OwogCi0JcmV0dXJuIHVuaWNvZGVfc3RydGl0bGUoZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xl biwgdHJ1ZSwgaW5pdGNhcF93Ym5leHQsCi0JCQkJCQkJJndic3RhdGUpOworCXJldHVybiB1bmlj b2RlX3N0cnRpdGxlKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sICZjb25zdW1lZCwgdHJ1ZSwK KwkJCQkJCQlpbml0Y2FwX3dibmV4dCwgJndic3RhdGUpOwogfQogCiBzdGF0aWMgc2l6ZV90CiB0 ZnVuY191cHBlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCiAJ CQlzaXplX3Qgc3JjbGVuKQogewotCXJldHVybiB1bmljb2RlX3N0cnVwcGVyKGRzdCwgZHN0c2l6 ZSwgc3JjLCBzcmNsZW4sIHRydWUpOworCXNpemVfdAkJY29uc3VtZWQ7CisKKwlyZXR1cm4gdW5p Y29kZV9zdHJ1cHBlcihkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCAmY29uc3VtZWQsIHRydWUp OwogfQogCiBzdGF0aWMgc2l6ZV90CiB0ZnVuY19mb2xkKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNp emUsIGNvbnN0IGNoYXIgKnNyYywKIAkJICAgc2l6ZV90IHNyY2xlbikKIHsKLQlyZXR1cm4gdW5p Y29kZV9zdHJmb2xkKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIHRydWUpOworCXNpemVfdAkJ Y29uc3VtZWQ7CisKKwlyZXR1cm4gdW5pY29kZV9zdHJmb2xkKGRzdCwgZHN0c2l6ZSwgc3JjLCBz cmNsZW4sICZjb25zdW1lZCwgdHJ1ZSk7CiB9CiAKIHN0YXRpYyB2b2lkCiB0ZXN0X2NvbnZlcnRf Y2FzZSh2b2lkKQogewogCXNpemVfdAkJbmVlZGVkOworCXNpemVfdAkJY29uc3VtZWQ7CiAKIAkv KiB0ZXN0IHN0cmluZyB3aXRoIG5vIGNhc2UgY2hhbmdlcyAqLwogCXRlc3RfY29udmVydCh0ZnVu Y19sb3dlciwgIuKImuKIniIsICLiiJriiJ4iKTsKQEAgLTMyMywxMSArMzMyLDExIEBAIHRlc3Rf Y29udmVydF9jYXNlKHZvaWQpCiAJdGVzdF9jb252ZXJ0KHRmdW5jX3RpdGxlLCAiXHVGRjExYSIs ICJcdUZGMTFhIik7CiAKIAkvKiBpbnZhbGlkIFVURjg6IHRydW5jYXRlZCBtdWx0aWJ5dGUgc2Vx dWVuY2UgKi8KLQluZWVkZWQgPSB1bmljb2RlX3N0cmZvbGQoTlVMTCwgMCwgImFiY1x4Q0UiLCA0 LCBmYWxzZSk7Ci0JQXNzZXJ0KG5lZWRlZCA9PSAzKTsKLQkvKiBpbnZhbGlkIFVURjg6IGludmFs aWQgYnl0ZSAqLwotCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9sZChOVUxMLCAwLCAiYWJjXHhGOHh5 eiIsIDcsIGZhbHNlKTsKLQlBc3NlcnQobmVlZGVkID09IDMpOworCW5lZWRlZCA9IHVuaWNvZGVf c3RyZm9sZChOVUxMLCAwLCAiYWJjXHhDRSIsIDQsICZjb25zdW1lZCwgZmFsc2UpOworCUFzc2Vy dChuZWVkZWQgPT0gMyAmJiBjb25zdW1lZCA9PSAzKTsKKwkvKiBpbnZhbGlkIFVURjg6IGxlYWRp bmcgYnl0ZSBpbnZhbGlkIGxlbmd0aCAqLworCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9sZChOVUxM LCAwLCAiYWJjXHhGOHh5eiIsIDcsICZjb25zdW1lZCwgZmFsc2UpOworCUFzc2VydChuZWVkZWQg PT0gMyAmJiBjb25zdW1lZCA9PSAzKTsKIAogI2lmZGVmIFVTRV9JQ1UKIAlpY3VfdGVzdF9mdWxs KCIiKTsKZGlmZiAtLWdpdCBhL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMgYi9zcmMvY29tbW9u L3VuaWNvZGVfY2FzZS5jCmluZGV4IGRkNWIzYmE4NmQwLi4yNDc1M2FhYWIwOSAxMDA2NDQKLS0t IGEvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGVfY2Fz ZS5jCkBAIC00MCw4ICs0MCw4IEBAIHN0YXRpYyBjb25zdCBjaGFyMzJfdCAqY29uc3QgY2FzZWtp bmRfbWFwW05DYXNlS2luZF0gPQogCiBzdGF0aWMgY2hhcjMyX3QgZmluZF9jYXNlX21hcChjaGFy MzJfdCB1Y3MsIGNvbnN0IGNoYXIzMl90ICptYXApOwogc3RhdGljIHNpemVfdCBjb252ZXJ0X2Nh c2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3Jj bGVuLAotCQkJCQkJICAgQ2FzZUtpbmQgc3RyX2Nhc2VraW5kLCBib29sIGZ1bGwsIFdvcmRCb3Vu ZGFyeU5leHQgd2JuZXh0LAotCQkJCQkJICAgdm9pZCAqd2JzdGF0ZSk7CisJCQkJCQkgICBzaXpl X3QgKnBjb25zdW1lZCwgQ2FzZUtpbmQgc3RyX2Nhc2VraW5kLCBib29sIGZ1bGwsCisJCQkJCQkg ICBXb3JkQm91bmRhcnlOZXh0IHdibmV4dCwgdm9pZCAqd2JzdGF0ZSk7CiBzdGF0aWMgZW51bSBD YXNlTWFwUmVzdWx0IGNhc2VtYXAoY2hhcjMyX3QgdTEsIENhc2VLaW5kIGNhc2VraW5kLCBib29s IGZ1bGwsCiAJCQkJCQkJCSAgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLCBzaXplX3Qg c3Jjb2ZmLAogCQkJCQkJCQkgIGNoYXIzMl90ICpzaW1wbGUsIGNvbnN0IGNoYXIzMl90ICoqc3Bl Y2lhbCk7CkBAIC04Miw3ICs4Miw4IEBAIHVuaWNvZGVfY2FzZWZvbGRfc2ltcGxlKGNoYXIzMl90 IGNvZGUpCiAgKiB1bmljb2RlX3N0cmxvd2VyKCkKICAqCiAgKiBDb252ZXJ0IHNyYyB0byBsb3dl cmNhc2UsIGFuZCByZXR1cm4gdGhlIHJlc3VsdCBsZW5ndGggKG5vdCBpbmNsdWRpbmcKLSAqIHRl cm1pbmF0aW5nIE5VTCkuCisgKiB0ZXJtaW5hdGluZyBOVUwpLiBTZXRzICpwY29uc3VtZWQgdG8g dGhlIGFtb3VudCBvZiBzcmMgc3VjY2Vzc2Z1bGx5CisgKiBjb25zdW1lZDsgaWYgbGVzcyB0aGFu IHNyY2xlbiwgaW5kaWNhdGVzIGEgZGVjb2RpbmcgZXJyb3IuCiAgKgogICogU3RyaW5nIHNyYyBt dXN0IGJlIGVuY29kZWQgaW4gVVRGLTguCiAgKgpAQCAtOTgsMTcgKzk5LDE4IEBAIHVuaWNvZGVf Y2FzZWZvbGRfc2ltcGxlKGNoYXIzMl90IGNvZGUpCiAgKi8KIHNpemVfdAogdW5pY29kZV9zdHJs b3dlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBz cmNsZW4sCi0JCQkJIGJvb2wgZnVsbCkKKwkJCQkgc2l6ZV90ICpwY29uc3VtZWQsIGJvb2wgZnVs bCkKIHsKLQlyZXR1cm4gY29udmVydF9jYXNlKGRzdCwgZHN0c2l6ZSwgc3JjLCBzcmNsZW4sIENh c2VMb3dlciwgZnVsbCwgTlVMTCwKLQkJCQkJCU5VTEwpOworCXJldHVybiBjb252ZXJ0X2Nhc2Uo ZHN0LCBkc3RzaXplLCBzcmMsIHNyY2xlbiwgcGNvbnN1bWVkLCBDYXNlTG93ZXIsIGZ1bGwsCisJ CQkJCQlOVUxMLCBOVUxMKTsKIH0KIAogLyoKICAqIHVuaWNvZGVfc3RydGl0bGUoKQogICoKICAq IENvbnZlcnQgc3JjIHRvIHRpdGxlY2FzZSwgYW5kIHJldHVybiB0aGUgcmVzdWx0IGxlbmd0aCAo bm90IGluY2x1ZGluZwotICogdGVybWluYXRpbmcgTlVMKS4KKyAqIHRlcm1pbmF0aW5nIE5VTCku IFNldHMgKnBjb25zdW1lZCB0byB0aGUgYW1vdW50IG9mIHNyYyBzdWNjZXNzZnVsbHkKKyAqIGNv bnN1bWVkOyBpZiBsZXNzIHRoYW4gc3JjbGVuLCBpbmRpY2F0ZXMgYSBkZWNvZGluZyBlcnJvci4K ICAqCiAgKiBTdHJpbmcgc3JjIG11c3QgYmUgZW5jb2RlZCBpbiBVVEYtOC4KICAqCkBAIC0xMzQs MTcgKzEzNiwxOSBAQCB1bmljb2RlX3N0cmxvd2VyKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUs IGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKICAqLwogc2l6ZV90CiB1bmljb2RlX3N0 cnRpdGxlKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90 IHNyY2xlbiwKLQkJCQkgYm9vbCBmdWxsLCBXb3JkQm91bmRhcnlOZXh0IHdibmV4dCwgdm9pZCAq d2JzdGF0ZSkKKwkJCQkgc2l6ZV90ICpwY29uc3VtZWQsIGJvb2wgZnVsbCwgV29yZEJvdW5kYXJ5 TmV4dCB3Ym5leHQsCisJCQkJIHZvaWQgKndic3RhdGUpCiB7Ci0JcmV0dXJuIGNvbnZlcnRfY2Fz ZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBDYXNlVGl0bGUsIGZ1bGwsIHdibmV4dCwKLQkJ CQkJCXdic3RhdGUpOworCXJldHVybiBjb252ZXJ0X2Nhc2UoZHN0LCBkc3RzaXplLCBzcmMsIHNy Y2xlbiwgcGNvbnN1bWVkLCBDYXNlVGl0bGUsIGZ1bGwsCisJCQkJCQl3Ym5leHQsIHdic3RhdGUp OwogfQogCiAvKgogICogdW5pY29kZV9zdHJ1cHBlcigpCiAgKgogICogQ29udmVydCBzcmMgdG8g dXBwZXJjYXNlLCBhbmQgcmV0dXJuIHRoZSByZXN1bHQgbGVuZ3RoIChub3QgaW5jbHVkaW5nCi0g KiB0ZXJtaW5hdGluZyBOVUwpLgorICogdGVybWluYXRpbmcgTlVMKS4gU2V0cyAqcGNvbnN1bWVk IHRvIHRoZSBhbW91bnQgb2Ygc3JjIHN1Y2Nlc3NmdWxseQorICogY29uc3VtZWQ7IGlmIGxlc3Mg dGhhbiBzcmNsZW4sIGluZGljYXRlcyBhIGRlY29kaW5nIGVycm9yLgogICoKICAqIFN0cmluZyBz cmMgbXVzdCBiZSBlbmNvZGVkIGluIFVURi04LgogICoKQEAgLTE2MCwxNyArMTY0LDE4IEBAIHVu aWNvZGVfc3RydGl0bGUoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3Jj LCBzaXplX3Qgc3JjbGVuLAogICovCiBzaXplX3QKIHVuaWNvZGVfc3RydXBwZXIoY2hhciAqZHN0 LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAotCQkJCSBi b29sIGZ1bGwpCisJCQkJIHNpemVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwpCiB7Ci0JcmV0dXJu IGNvbnZlcnRfY2FzZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBDYXNlVXBwZXIsIGZ1bGws IE5VTEwsCi0JCQkJCQlOVUxMKTsKKwlyZXR1cm4gY29udmVydF9jYXNlKGRzdCwgZHN0c2l6ZSwg c3JjLCBzcmNsZW4sIHBjb25zdW1lZCwgQ2FzZVVwcGVyLCBmdWxsLAorCQkJCQkJTlVMTCwgTlVM TCk7CiB9CiAKIC8qCiAgKiB1bmljb2RlX3N0cmZvbGQoKQogICoKICAqIENhc2UgZm9sZCBzcmMs IGFuZCByZXR1cm4gdGhlIHJlc3VsdCBsZW5ndGggKG5vdCBpbmNsdWRpbmcgdGVybWluYXRpbmcK LSAqIE5VTCkuCisgKiBOVUwpLiBTZXRzICpwY29uc3VtZWQgdG8gdGhlIGFtb3VudCBvZiBzcmMg c3VjY2Vzc2Z1bGx5IGNvbnN1bWVkOyBpZiBsZXNzCisgKiB0aGFuIHNyY2xlbiwgaW5kaWNhdGVz IGEgZGVjb2RpbmcgZXJyb3IuCiAgKgogICogU3RyaW5nIHNyYyBtdXN0IGJlIGVuY29kZWQgaW4g VVRGLTguCiAgKgpAQCAtMTgzLDEwICsxODgsMTAgQEAgdW5pY29kZV9zdHJ1cHBlcihjaGFyICpk c3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAgKi8K IHNpemVfdAogdW5pY29kZV9zdHJmb2xkKGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0 IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKLQkJCQlib29sIGZ1bGwpCisJCQkJc2l6ZV90ICpw Y29uc3VtZWQsIGJvb2wgZnVsbCkKIHsKLQlyZXR1cm4gY29udmVydF9jYXNlKGRzdCwgZHN0c2l6 ZSwgc3JjLCBzcmNsZW4sIENhc2VGb2xkLCBmdWxsLCBOVUxMLAotCQkJCQkJTlVMTCk7CisJcmV0 dXJuIGNvbnZlcnRfY2FzZShkc3QsIGRzdHNpemUsIHNyYywgc3JjbGVuLCBwY29uc3VtZWQsIENh c2VGb2xkLCBmdWxsLAorCQkJCQkJTlVMTCwgTlVMTCk7CiB9CiAKIC8qIGxvY2FsIHZlcnNpb24g b2YgcGdfdXRmX21ibGVuKCkgdG8gYmUgaW5saW5hYmxlICovCkBAIC0yMjMsOCArMjI4LDggQEAg dXRmOF9tYmxlbihjb25zdCB1bnNpZ25lZCBjaGFyICpzKQogICovCiBzdGF0aWMgc2l6ZV90CiBj b252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBz aXplX3Qgc3JjbGVuLAotCQkJIENhc2VLaW5kIHN0cl9jYXNla2luZCwgYm9vbCBmdWxsLCBXb3Jk Qm91bmRhcnlOZXh0IHdibmV4dCwKLQkJCSB2b2lkICp3YnN0YXRlKQorCQkJIHNpemVfdCAqcGNv bnN1bWVkLCBDYXNlS2luZCBzdHJfY2FzZWtpbmQsIGJvb2wgZnVsbCwKKwkJCSBXb3JkQm91bmRh cnlOZXh0IHdibmV4dCwgdm9pZCAqd2JzdGF0ZSkKIHsKIAkvKiBjaGFyYWN0ZXIgQ2FzZUtpbmQg dmFyaWVzIHdoaWxlIHRpdGxlY2FzaW5nICovCiAJQ2FzZUtpbmQJY2hyX2Nhc2VraW5kID0gc3Ry X2Nhc2VraW5kOwpAQCAtMzE1LDYgKzMyMCw3IEBAIGNvbnZlcnRfY2FzZShjaGFyICpkc3QsIHNp emVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJaWYgKHJlc3Vs dF9sZW4gPCBkc3RzaXplKQogCQlkc3RbcmVzdWx0X2xlbl0gPSAnXDAnOwogCisJKnBjb25zdW1l ZCA9IHNyY29mZjsKIAlyZXR1cm4gcmVzdWx0X2xlbjsKIH0KIApkaWZmIC0tZ2l0IGEvc3JjL2lu Y2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oIGIvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVf Y2FzZS5oCmluZGV4IDAzYWRkNzhjYWJlLi4xY2JjMGMxNGJjMiAxMDA2NDQKLS0tIGEvc3JjL2lu Y2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZS5oCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmlj b2RlX2Nhc2UuaApAQCAtMjEsMTMgKzIxLDEzIEBAIGNoYXIzMl90CXVuaWNvZGVfdGl0bGVjYXNl X3NpbXBsZShjaGFyMzJfdCBjb2RlKTsKIGNoYXIzMl90CXVuaWNvZGVfdXBwZXJjYXNlX3NpbXBs ZShjaGFyMzJfdCBjb2RlKTsKIGNoYXIzMl90CXVuaWNvZGVfY2FzZWZvbGRfc2ltcGxlKGNoYXIz Ml90IGNvZGUpOwogc2l6ZV90CQl1bmljb2RlX3N0cmxvd2VyKGNoYXIgKmRzdCwgc2l6ZV90IGRz dHNpemUsIGNvbnN0IGNoYXIgKnNyYywKLQkJCQkJCQkgc2l6ZV90IHNyY2xlbiwgYm9vbCBmdWxs KTsKKwkJCQkJCQkgc2l6ZV90IHNyY2xlbiwgc2l6ZV90ICpwY29uc3VtZWQsIGJvb2wgZnVsbCk7 CiBzaXplX3QJCXVuaWNvZGVfc3RydGl0bGUoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29u c3QgY2hhciAqc3JjLAotCQkJCQkJCSBzaXplX3Qgc3JjbGVuLCBib29sIGZ1bGwsCisJCQkJCQkJ IHNpemVfdCBzcmNsZW4sIHNpemVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwsCiAJCQkJCQkJIFdv cmRCb3VuZGFyeU5leHQgd2JuZXh0LCB2b2lkICp3YnN0YXRlKTsKIHNpemVfdAkJdW5pY29kZV9z dHJ1cHBlcihjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsCi0JCQkJ CQkJIHNpemVfdCBzcmNsZW4sIGJvb2wgZnVsbCk7CisJCQkJCQkJIHNpemVfdCBzcmNsZW4sIHNp emVfdCAqcGNvbnN1bWVkLCBib29sIGZ1bGwpOwogc2l6ZV90CQl1bmljb2RlX3N0cmZvbGQoY2hh ciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLAotCQkJCQkJCXNpemVfdCBz cmNsZW4sIGJvb2wgZnVsbCk7CisJCQkJCQkJc2l6ZV90IHNyY2xlbiwgc2l6ZV90ICpwY29uc3Vt ZWQsIGJvb2wgZnVsbCk7CiAKICNlbmRpZgkJCQkJCQkvKiBVTklDT0RFX0NBU0VfSCAqLwotLSAK Mi40My4wCgo= --=-pBACy9Cj6vvohW6jbWR4 Content-Disposition: attachment; filename*0=v5-0004-Validating-iterator-friendly-UTF8-encoder-decoder.pat; filename*1=ch Content-Type: text/x-patch; name="v5-0004-Validating-iterator-friendly-UTF8-encoder-decoder.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSAwOGFjZjY3NDMwNTE3MTAzNTViNmM4YzZjOTEwMmE3OTIyYTNkMTYzIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBU aHUsIDQgSnVuIDIwMjYgMTI6MDg6NTEgLTA3MDAKU3ViamVjdDogW1BBVENIIHY1IDQvNV0gVmFs aWRhdGluZywgaXRlcmF0b3ItZnJpZW5kbHkgVVRGOCBlbmNvZGVyL2RlY29kZXIKIEFQSS4KCkRp c2N1c3Npb246IGh0dHBzOi8vcG9zdGdyLmVzL20vYzM1NTM1NGU2YzNmNGE3YWFmYjA0NzM2MWI3 M2RiMjQ3MjYwZmNhMC5jYW1lbEBqLWRhdmlzLmNvbQotLS0KIHNyYy9pbmNsdWRlL21iL3BnX3dj aGFyLmggfCAxMzkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0KIDEgZmls ZSBjaGFuZ2VkLCAxMzcgaW5zZXJ0aW9ucygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9tYi9wZ193Y2hhci5oIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApp bmRleCBkZWVlMmE4MzJjMy4uYmM0NDViZTA2NzggMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL21i L3BnX3djaGFyLmgKKysrIGIvc3JjL2luY2x1ZGUvbWIvcGdfd2NoYXIuaApAQCAtMjcsNiArMjcs MTEgQEAKICAqLwogdHlwZWRlZiB1bnNpZ25lZCBpbnQgcGdfd2NoYXI7CiAKKy8qCisgKiBSZXR1 cm5lZCBmb3IgZGVjb2RpbmcgZmFpbHVyZXMgaW4gdXRmOGRlY29kZSgpIGFuZCB1dGY4X3RvX3Vu aWNvZGUoKS4KKyAqLworI2RlZmluZSBQR19JTlZBTElEX0NPREVQT0lOVAkweEZGRkZGRkZGCisK IC8qCiAgKiBNYXhpbXVtIGJ5dGUgbGVuZ3RoIG9mIG11bHRpYnl0ZSBjaGFyYWN0ZXJzIGluIGFu eSBiYWNrZW5kIGVuY29kaW5nCiAgKi8KQEAgLTM5MiwxMSArMzk3LDE0MCBAQCBzdXJyb2dhdGVf cGFpcl90b19jb2RlcG9pbnQoY2hhcjE2X3QgZmlyc3QsIGNoYXIxNl90IHNlY29uZCkKIAlyZXR1 cm4gKChmaXJzdCAmIDB4M0ZGKSA8PCAxMCkgKyAweDEwMDAwICsgKHNlY29uZCAmIDB4M0ZGKTsK IH0KIAorLyoKKyAqIEVuY29kZSB0aGUgY29kZXBvaW50IGFzIFVURjggYW5kIHJldHVybiB0aGUg bnVtYmVyIG9mIGJ5dGVzIHJlcXVpcmVkLiBJZgorICogdGhlIG51bWJlciBvZiBieXRlcyByZXF1 aXJlZCBleGNlZWRzIGRzdHNpemUsIGp1c3QgcmV0dXJuIHRoZSBudW1iZXIgb2YKKyAqIGJ5dGVz IHJlcXVpcmVkIHdpdGhvdXQgbW9kaWZ5aW5nIGRzdC4gSWYgZHN0c2l6ZSBpcyB6ZXJvLCBkc3Qg bWF5IGJlCisgKiBOVUxMLiBJZiBjb2RlcG9pbnQgaXMgbm90IGEgdmFsaWQgVW5pY29kZSBTY2Fs YXIsIHJldHVybiAtMS4KKyAqLworc3RhdGljIGlubGluZSBpbnQKK3V0ZjhlbmNvZGUodW5zaWdu ZWQgY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY2hhcjMyX3QgY29kZXBvaW50KQoreworCWlu dAkJCW5ieXRlczsKKworCWlmIChjb2RlcG9pbnQgPD0gMHg3RikKKwkJbmJ5dGVzID0gMTsKKwll bHNlIGlmIChjb2RlcG9pbnQgPD0gMHg3RkYpCisJCW5ieXRlcyA9IDI7CisJZWxzZSBpZiAoY29k ZXBvaW50IDw9IDB4RkZGRikKKwl7CisJCS8qIHN1cnJvZ2F0ZSBoYWx2ZXMgbm90IHZhbGlkIGZv ciBVVEY4ICovCisJCWlmIChjb2RlcG9pbnQgPj0gMHhEODAwICYmIGNvZGVwb2ludCA8PSAweERG RkYpCisJCQlyZXR1cm4gLTE7CisJCW5ieXRlcyA9IDM7CisJfQorCWVsc2UgaWYgKGNvZGVwb2lu dCA8PSAweDEwRkZGRikKKwkJbmJ5dGVzID0gNDsKKwllbHNlCisJCXJldHVybiAtMTsKKworCWlm ICgoc2l6ZV90KSBuYnl0ZXMgPiBkc3RzaXplKQorCQlyZXR1cm4gbmJ5dGVzOworCisJaWYgKGNv ZGVwb2ludCA8PSAweDdGKQorCXsKKwkJZHN0WzBdID0gY29kZXBvaW50OworCX0KKwllbHNlIGlm IChjb2RlcG9pbnQgPD0gMHg3RkYpCisJeworCQlkc3RbMF0gPSAweEMwIHwgKChjb2RlcG9pbnQg Pj4gNikgJiAweDFGKTsKKwkJZHN0WzFdID0gMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKTsKKwl9 CisJZWxzZSBpZiAoY29kZXBvaW50IDw9IDB4RkZGRikKKwl7CisJCWRzdFswXSA9IDB4RTAgfCAo KGNvZGVwb2ludCA+PiAxMikgJiAweDBGKTsKKwkJZHN0WzFdID0gMHg4MCB8ICgoY29kZXBvaW50 ID4+IDYpICYgMHgzRik7CisJCWRzdFsyXSA9IDB4ODAgfCAoY29kZXBvaW50ICYgMHgzRik7CisJ fQorCWVsc2UgaWYgKGNvZGVwb2ludCA8PSAweDEwRkZGRikKKwl7CisJCWRzdFswXSA9IDB4RjAg fCAoKGNvZGVwb2ludCA+PiAxOCkgJiAweDA3KTsKKwkJZHN0WzFdID0gMHg4MCB8ICgoY29kZXBv aW50ID4+IDEyKSAmIDB4M0YpOworCQlkc3RbMl0gPSAweDgwIHwgKChjb2RlcG9pbnQgPj4gNikg JiAweDNGKTsKKwkJZHN0WzNdID0gMHg4MCB8IChjb2RlcG9pbnQgJiAweDNGKTsKKwl9CisKKwly ZXR1cm4gbmJ5dGVzOworfQorCisvKgorICogRGVjb2RlIHRoZSBuZXh0IFVuaWNvZGUgY29kZXBv aW50IGZyb20gVVRGOCBhdCBzcmMsIHJlYWRpbmcgbm8gbW9yZSB0aGFuCisgKiBzcmNsZW4gYnl0 ZXMgKHdoaWNoIG11c3QgYmUgYXQgbGVhc3QgMSkuIE9uIHN1Y2Nlc3MsICpwY29kZXBvaW50IHdp bGwgYmUgYQorICogdmFsaWQgVW5pY29kZSBTY2FsYXI7IG90aGVyd2lzZSBpdCB3aWxsIGJlIHNl dCB0byBQR19JTlZBTElEX0NPREVQT0lOVC4KKyAqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2Yg Ynl0ZXMgY29uc3VtZWQuIElmIHNyY2xlbiBpcyBub3QgbGFyZ2UgZW5vdWdoCisgKiAoaS5lLiBz cmMgaXMgdHJ1bmNhdGVkIGluIHRoZSBtaWRkbGUgb2YgYSBzZXF1ZW5jZSksIHJldHVybnMgMC4g SWYgaW52YWxpZCwKKyAqIHJldHVybnMgLTEuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50Cit1dGY4 ZGVjb2RlKGNoYXIzMl90ICpwY29kZXBvaW50LCBjb25zdCB1bnNpZ25lZCBjaGFyICpzcmMsIHNp emVfdCBzcmNsZW4pCit7CisJaW50CQkJbmJ5dGVzOworCWNoYXIzMl90CWNvZGVwb2ludDsKKwlj aGFyMzJfdAltaW47CisKKwlBc3NlcnQoc3JjbGVuID49IDEpOworCisJaWYgKCgqc3JjICYgMHg4 MCkgPT0gMCkKKwl7CisJCSpwY29kZXBvaW50ID0gKGNoYXIzMl90KSBzcmNbMF07CisJCXJldHVy biAxOworCX0KKwllbHNlIGlmICgoKnNyYyAmIDB4ZTApID09IDB4YzApCisJeworCQluYnl0ZXMg PSAyOworCQltaW4gPSAweDgwOworCQljb2RlcG9pbnQgPSAoY2hhcjMyX3QpIHNyY1swXSAmIDB4 MWY7CisJfQorCWVsc2UgaWYgKCgqc3JjICYgMHhmMCkgPT0gMHhlMCkKKwl7CisJCW5ieXRlcyA9 IDM7CisJCW1pbiA9IDB4ODAwOworCQljb2RlcG9pbnQgPSAoY2hhcjMyX3QpIHNyY1swXSAmIDB4 MGY7CisJfQorCWVsc2UgaWYgKCgqc3JjICYgMHhmOCkgPT0gMHhmMCkKKwl7CisJCW5ieXRlcyA9 IDQ7CisJCW1pbiA9IDB4MTAwMDA7CisJCWNvZGVwb2ludCA9IChjaGFyMzJfdCkgc3JjWzBdICYg MHgwNzsKKwl9CisJZWxzZQorCQlnb3RvIGludmFsaWQ7CQkvKiBpbnZhbGlkIGxlYWRpbmcgYnl0 ZSAqLworCisJLyogdHJ1bmNhdGVkIG11bHRpYnl0ZSBzZXF1ZW5jZSAqLworCWlmIChzcmNsZW4g PCAoc2l6ZV90KSBuYnl0ZXMpCisJeworCQkqcGNvZGVwb2ludCA9IFBHX0lOVkFMSURfQ09ERVBP SU5UOworCQlyZXR1cm4gMDsKKwl9CisKKwlmb3IgKGludCBpID0gMTsgaSA8IG5ieXRlczsgaSsr KQorCXsKKwkJaWYgKChzcmNbaV0gJiAweGMwKSAhPSAweDgwKQorCQkJZ290byBpbnZhbGlkOwor CQljb2RlcG9pbnQgPSAoY29kZXBvaW50IDw8IDYpIHwgKHNyY1tpXSAmIDB4M2YpOworCX0KKwor CS8qIHJlamVjdCBvdmVybG9uZywgc3Vycm9nYXRlLCBhbmQgb3V0LW9mLXJhbmdlICovCisJaWYg KGNvZGVwb2ludCA8IG1pbiB8fCBjb2RlcG9pbnQgPiAweDEwRkZGRiB8fAorCQkoY29kZXBvaW50 ID49IDB4RDgwMCAmJiBjb2RlcG9pbnQgPD0gMHhERkZGKSkKKwkJZ290byBpbnZhbGlkOworCisJ KnBjb2RlcG9pbnQgPSBjb2RlcG9pbnQ7CisJcmV0dXJuIG5ieXRlczsKKworaW52YWxpZDoKKwkq cGNvZGVwb2ludCA9IFBHX0lOVkFMSURfQ09ERVBPSU5UOworCXJldHVybiAtMTsKK30KKwogLyoK ICAqIENvbnZlcnQgYSBVVEYtOCBjaGFyYWN0ZXIgdG8gYSBVbmljb2RlIGNvZGUgcG9pbnQuCiAg KiBUaGlzIGlzIGEgb25lLWNoYXJhY3RlciB2ZXJzaW9uIG9mIHBnX3V0ZjJ3Y2hhcl93aXRoX2xl bi4KICAqCiAgKiBObyBlcnJvciBjaGVja3MgaGVyZSwgYyBtdXN0IHBvaW50IHRvIGEgbG9uZy1l bm91Z2ggc3RyaW5nLgorICoKKyAqIFhYWDogQ2FsbGVycyBzaG91bGQgY29uc2lkZXIgdXRmOGRl Y29kZSgpIGluc3RlYWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgY2hhcjMyX3QKIHV0ZjhfdG9fdW5p Y29kZShjb25zdCB1bnNpZ25lZCBjaGFyICpjKQpAQCAtNDE2LDEzICs1NTAsMTQgQEAgdXRmOF90 b191bmljb2RlKGNvbnN0IHVuc2lnbmVkIGNoYXIgKmMpCiAJCQkJCQkgICAoKGNbMl0gJiAweDNm KSA8PCA2KSB8CiAJCQkJCQkgICAoY1szXSAmIDB4M2YpKTsKIAllbHNlCi0JCS8qIHRoYXQgaXMg YW4gaW52YWxpZCBjb2RlIG9uIHB1cnBvc2UgKi8KLQkJcmV0dXJuIDB4ZmZmZmZmZmY7CisJCXJl dHVybiBQR19JTlZBTElEX0NPREVQT0lOVDsKIH0KIAogLyoKICAqIE1hcCBhIFVuaWNvZGUgY29k ZSBwb2ludCB0byBVVEYtOC4gIHV0ZjhzdHJpbmcgbXVzdCBoYXZlIGF0IGxlYXN0CiAgKiB1bmlj b2RlX3V0ZjhsZW4oYykgYnl0ZXMgYXZhaWxhYmxlLgorICoKKyAqIFhYWDogQ2FsbGVycyBzaG91 bGQgY29uc2lkZXIgdXRmOGVuY29kZSgpIGluc3RlYWQuCiAgKi8KIHN0YXRpYyBpbmxpbmUgdW5z aWduZWQgY2hhciAqCiB1bmljb2RlX3RvX3V0ZjgoY2hhcjMyX3QgYywgdW5zaWduZWQgY2hhciAq dXRmOHN0cmluZykKLS0gCjIuNDMuMAoK --=-pBACy9Cj6vvohW6jbWR4 Content-Disposition: attachment; filename*0=v5-0005-unicode_case.c-use-new-utf8encode-utf8decode-APIs.pat; filename*1=ch Content-Type: text/x-patch; name="v5-0005-unicode_case.c-use-new-utf8encode-utf8decode-APIs.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSA5MWEwZjNjYWMzNGQzYTQwMzBjZDhhZGY4NTUzMjYxZjMzODA0ZDZkIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBG cmksIDE5IEp1biAyMDI2IDE0OjU4OjQ3IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2NSA1LzVdIHVu aWNvZGVfY2FzZS5jOiB1c2UgbmV3IHV0ZjhlbmNvZGUvdXRmOGRlY29kZSBBUElzLgoKRGlzY3Vz c2lvbjogaHR0cHM6Ly9wb3N0Z3IuZXMvbS9jMzU1MzU0ZTZjM2Y0YTdhYWZiMDQ3MzYxYjczZGIy NDcyNjBmY2EwLmNhbWVsQGotZGF2aXMuY29tCi0tLQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn X2xvY2FsZV9idWlsdGluLmMgfCAxMCArLS0KIHNyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3Qu YyAgICAgICAgICAgIHwgNDUgKysrKysrKysrLS0tLQogc3JjL2NvbW1vbi91bmljb2RlX2Nhc2Uu YyAgICAgICAgICAgICAgICAgfCA3NyArKysrKysrKysrKy0tLS0tLS0tLS0tLQogMyBmaWxlcyBj aGFuZ2VkLCA3NyBpbnNlcnRpb25zKCspLCA1NSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyBiL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IDU2MTlkYWY0M2MzLi42MzUxNmU3MTc0 ZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMK KysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9idWlsdGluLmMKQEAgLTYyLDIy ICs2MiwyMiBAQCBpbml0Y2FwX3dibmV4dCh2b2lkICpzdGF0ZSkKIAogCXdoaWxlICh3YnN0YXRl LT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4pCiAJewotCQlpbnQJCQl1bGVuID0gcGdfdXRmX21ibGVu KChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArCi0JCQkJCQkJCQkJd2JzdGF0 ZS0+b2Zmc2V0KTsKKwkJaW50CQkJdWxlbjsKIAkJY2hhcjMyX3QJdTsKIAkJYm9vbAkJY3Vycl9h bG51bTsKIAkJc2l6ZV90CQlwcmV2X29mZnNldCA9IHdic3RhdGUtPm9mZnNldDsKIAorCQl1bGVu ID0gdXRmOGRlY29kZSgmdSwgKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgd2JzdGF0ZS0+c3RyICsg d2JzdGF0ZS0+b2Zmc2V0LAorCQkJCQkJICB3YnN0YXRlLT5sZW4gLSB3YnN0YXRlLT5vZmZzZXQp OworCiAJCS8qIGludmFsaWQgVVRGOCAqLwotCQlpZiAod2JzdGF0ZS0+b2Zmc2V0ICsgdWxlbiA+ IHdic3RhdGUtPmxlbikKKwkJaWYgKHVsZW4gPD0gMCkKIAkJewogCQkJd2JzdGF0ZS0+aW5pdCA9 IHRydWU7CiAJCQl3YnN0YXRlLT5vZmZzZXQgPSB3YnN0YXRlLT5sZW47CiAJCQlyZXR1cm4gcHJl dl9vZmZzZXQ7CiAJCX0KIAotCQl1ID0gdXRmOF90b191bmljb2RlKChjb25zdCB1bnNpZ25lZCBj aGFyICopIHdic3RhdGUtPnN0ciArCi0JCQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKIAkJY3Vycl9h bG51bSA9IHBnX3VfaXNhbG51bSh1LCB3YnN0YXRlLT5wb3NpeCk7CiAKIAkJaWYgKCF3YnN0YXRl LT5pbml0IHx8IGN1cnJfYWxudW0gIT0gd2JzdGF0ZS0+cHJldl9hbG51bSkKZGlmZiAtLWdpdCBh L3NyYy9jb21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYyBiL3NyYy9jb21tb24vdW5pY29kZS9jYXNl X3Rlc3QuYwppbmRleCAwODQyMWQ5ZTVjYS4uOTQ2MWI1Njc0MmIgMTAwNjQ0Ci0tLSBhL3NyYy9j b21tb24vdW5pY29kZS9jYXNlX3Rlc3QuYworKysgYi9zcmMvY29tbW9uL3VuaWNvZGUvY2FzZV90 ZXN0LmMKQEAgLTUyLDI0ICs1MiwzNSBAQCBpbml0Y2FwX3dibmV4dCh2b2lkICpzdGF0ZSkKIHsK IAlzdHJ1Y3QgV29yZEJvdW5kYXJ5U3RhdGUgKndic3RhdGUgPSAoc3RydWN0IFdvcmRCb3VuZGFy eVN0YXRlICopIHN0YXRlOwogCi0Jd2hpbGUgKHdic3RhdGUtPm9mZnNldCA8IHdic3RhdGUtPmxl biAmJgotCQkgICB3YnN0YXRlLT5zdHJbd2JzdGF0ZS0+b2Zmc2V0XSAhPSAnXDAnKQorCXdoaWxl ICh3YnN0YXRlLT5vZmZzZXQgPCB3YnN0YXRlLT5sZW4pCiAJewotCQljaGFyMzJfdAl1ID0gdXRm OF90b191bmljb2RlKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdic3RhdGUtPnN0ciArCi0JCQkJ CQkJCQkJd2JzdGF0ZS0+b2Zmc2V0KTsKLQkJYm9vbAkJY3Vycl9hbG51bSA9IHBnX3VfaXNhbG51 bSh1LCB3YnN0YXRlLT5wb3NpeCk7CisJCWludAkJCXVsZW47CisJCWNoYXIzMl90CXU7CisJCWJv b2wJCWN1cnJfYWxudW07CisJCXNpemVfdAkJcHJldl9vZmZzZXQgPSB3YnN0YXRlLT5vZmZzZXQ7 CiAKLQkJaWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxudW0gIT0gd2JzdGF0ZS0+cHJldl9h bG51bSkKKwkJdWxlbiA9IHV0ZjhkZWNvZGUoJnUsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHdi c3RhdGUtPnN0ciArIHdic3RhdGUtPm9mZnNldCwKKwkJCQkJCSAgd2JzdGF0ZS0+bGVuIC0gd2Jz dGF0ZS0+b2Zmc2V0KTsKKworCQkvKiBpbnZhbGlkIFVURjggKi8KKwkJaWYgKHVsZW4gPD0gMCkK IAkJewotCQkJc2l6ZV90CQlwcmV2X29mZnNldCA9IHdic3RhdGUtPm9mZnNldDsKKwkJCXdic3Rh dGUtPmluaXQgPSB0cnVlOworCQkJd2JzdGF0ZS0+b2Zmc2V0ID0gd2JzdGF0ZS0+bGVuOworCQkJ cmV0dXJuIHByZXZfb2Zmc2V0OworCQl9CisKKwkJY3Vycl9hbG51bSA9IHBnX3VfaXNhbG51bSh1 LCB3YnN0YXRlLT5wb3NpeCk7CiAKKwkJaWYgKCF3YnN0YXRlLT5pbml0IHx8IGN1cnJfYWxudW0g IT0gd2JzdGF0ZS0+cHJldl9hbG51bSkKKwkJewogCQkJd2JzdGF0ZS0+aW5pdCA9IHRydWU7Ci0J CQl3YnN0YXRlLT5vZmZzZXQgKz0gdW5pY29kZV91dGY4bGVuKHUpOworCQkJd2JzdGF0ZS0+b2Zm c2V0ICs9IHVsZW47CiAJCQl3YnN0YXRlLT5wcmV2X2FsbnVtID0gY3Vycl9hbG51bTsKIAkJCXJl dHVybiBwcmV2X29mZnNldDsKIAkJfQogCi0JCXdic3RhdGUtPm9mZnNldCArPSB1bmljb2RlX3V0 ZjhsZW4odSk7CisJCXdic3RhdGUtPm9mZnNldCArPSB1bGVuOwogCX0KIAogCXJldHVybiB3YnN0 YXRlLT5sZW47CkBAIC0xNzksNyArMTkwLDcgQEAgdGVzdF9pY3Uodm9pZCkKIAl7CiAJCXBnX3Vu aWNvZGVfY2F0ZWdvcnkgY2F0ZWdvcnkgPSB1bmljb2RlX2NhdGVnb3J5KGNvZGUpOwogCi0JCWlm IChjYXRlZ29yeSAhPSBQR19VX1VOQVNTSUdORUQpCisJCWlmIChjYXRlZ29yeSAhPSBQR19VX1VO QVNTSUdORUQgJiYgY2F0ZWdvcnkgIT0gUEdfVV9TVVJST0dBVEUpCiAJCXsKIAkJCXVpbnQ4X3QJ CWljdV9jYXRlZ29yeSA9IHVfY2hhclR5cGUoY29kZSk7CiAJCQljaGFyCQljb2RlX3N0cls1XSA9 IHswfTsKQEAgLTE5MSw3ICsyMDIsNyBAQCB0ZXN0X2ljdSh2b2lkKQogCQkJfQogCiAJCQlpY3Vf dGVzdF9zaW1wbGUoY29kZSk7Ci0JCQl1bmljb2RlX3RvX3V0ZjgoY29kZSwgKHVuc2lnbmVkIGNo YXIgKikgY29kZV9zdHIpOworCQkJdXRmOGVuY29kZSgodW5zaWduZWQgY2hhciAqKSBjb2RlX3N0 ciwgNSwgY29kZSk7CiAJCQlpY3VfdGVzdF9mdWxsKGNvZGVfc3RyKTsKIAogCQkJc3VjY2Vzc2Z1 bCsrOwpAQCAtMzM3LDYgKzM0OCwxOCBAQCB0ZXN0X2NvbnZlcnRfY2FzZSh2b2lkKQogCS8qIGlu dmFsaWQgVVRGODogbGVhZGluZyBieXRlIGludmFsaWQgbGVuZ3RoICovCiAJbmVlZGVkID0gdW5p Y29kZV9zdHJmb2xkKE5VTEwsIDAsICJhYmNceEY4eHl6IiwgNywgJmNvbnN1bWVkLCBmYWxzZSk7 CiAJQXNzZXJ0KG5lZWRlZCA9PSAzICYmIGNvbnN1bWVkID09IDMpOworCS8qIGludmFsaWQgVVRG ODogc3Vycm9nYXRlcyAqLworCW5lZWRlZCA9IHVuaWNvZGVfc3RyZm9sZChOVUxMLCAwLCAiYWJj XHhFRFx4QTBceDgxeHl6IiwgNywgJmNvbnN1bWVkLCBmYWxzZSk7CisJQXNzZXJ0KG5lZWRlZCA9 PSAzICYmIGNvbnN1bWVkID09IDMpOworCS8qIGludmFsaWQgVVRGODogY29udGludWF0aW9uIHdp dGggbm8gbGVhZGluZyBieXRlICovCisJbmVlZGVkID0gdW5pY29kZV9zdHJmb2xkKE5VTEwsIDAs ICJhYmNceDgweHl6IiwgNywgJmNvbnN1bWVkLCBmYWxzZSk7CisJQXNzZXJ0KG5lZWRlZCA9PSAz ICYmIGNvbnN1bWVkID09IDMpOworCS8qIGludmFsaWQgVVRGODogb3V0IG9mIHJhbmdlICovCisJ bmVlZGVkID0gdW5pY29kZV9zdHJmb2xkKE5VTEwsIDAsICJhYmNceEY1XHg4MFx4ODBceDgweHl6 IiwgNywgJmNvbnN1bWVkLCBmYWxzZSk7CisJQXNzZXJ0KG5lZWRlZCA9PSAzICYmIGNvbnN1bWVk ID09IDMpOworCS8qIGludmFsaWQgVVRGODogb3ZlcmxvbmcgKi8KKwluZWVkZWQgPSB1bmljb2Rl X3N0cmZvbGQoTlVMTCwgMCwgImFiY1x4QzFceEJGeHl6IiwgNywgJmNvbnN1bWVkLCBmYWxzZSk7 CisJQXNzZXJ0KG5lZWRlZCA9PSAzICYmIGNvbnN1bWVkID09IDMpOwogCiAjaWZkZWYgVVNFX0lD VQogCWljdV90ZXN0X2Z1bGwoIiIpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlX2Nh c2UuYyBiL3NyYy9jb21tb24vdW5pY29kZV9jYXNlLmMKaW5kZXggMjQ3NTNhYWFiMDkuLjRkOGVl NzFlOGRjIDEwMDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jCisrKyBiL3NyYy9j b21tb24vdW5pY29kZV9jYXNlLmMKQEAgLTE5NCwyMiArMTk0LDYgQEAgdW5pY29kZV9zdHJmb2xk KGNoYXIgKmRzdCwgc2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xl biwKIAkJCQkJCU5VTEwsIE5VTEwpOwogfQogCi0vKiBsb2NhbCB2ZXJzaW9uIG9mIHBnX3V0Zl9t YmxlbigpIHRvIGJlIGlubGluYWJsZSAqLwotc3RhdGljIGludAotdXRmOF9tYmxlbihjb25zdCB1 bnNpZ25lZCBjaGFyICpzKQotewotCWlmICgoKnMgJiAweDgwKSA9PSAwKQotCQlyZXR1cm4gMTsK LQllbHNlIGlmICgoKnMgJiAweGUwKSA9PSAweGMwKQotCQlyZXR1cm4gMjsKLQllbHNlIGlmICgo KnMgJiAweGYwKSA9PSAweGUwKQotCQlyZXR1cm4gMzsKLQllbHNlIGlmICgoKnMgJiAweGY4KSA9 PSAweGYwKQotCQlyZXR1cm4gNDsKLQllbHNlCi0JCXJldHVybiAtMTsKLX0KLQogLyoKICAqIElt cGxlbWVudCBVbmljb2RlIERlZmF1bHQgQ2FzZSBDb252ZXJzaW9uIGFsZ29yaXRobS4KICAqCkBA IC0yNDgsMTggKzIzMiwxOSBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6 ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCiAJd2hpbGUgKHNyY29mZiA8IHNy Y2xlbikKIAl7Ci0JCWludAkJCXUxbGVuID0gdXRmOF9tYmxlbigoY29uc3QgdW5zaWduZWQgY2hh ciAqKSBzcmMgKyBzcmNvZmYpOwogCQljaGFyMzJfdAl1MTsKKwkJaW50CQkJdTFsZW47CiAJCWNo YXIzMl90CXNpbXBsZSA9IDA7CiAJCWNvbnN0IGNoYXIzMl90ICpzcGVjaWFsID0gTlVMTDsKIAkJ ZW51bSBDYXNlTWFwUmVzdWx0IGNhc2VtYXBfcmVzdWx0OwogCisJCXUxbGVuID0gdXRmOGRlY29k ZSgmdTEsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHNyYyArIHNyY29mZiwKKwkJCQkJCSAgIHNy Y2xlbiAtIHNyY29mZik7CisKIAkJLyogaW52YWxpZCBVVEY4ICovCi0JCWlmICh1MWxlbiA8IDAg fHwgc3Jjb2ZmICsgdTFsZW4gPiBzcmNsZW4pCisJCWlmICh1MWxlbiA8PSAwKQogCQkJYnJlYWs7 CiAKLQkJdTEgPSB1dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3JjICsg c3Jjb2ZmKTsKLQogCQlpZiAoc3RyX2Nhc2VraW5kID09IENhc2VUaXRsZSkKIAkJewogCQkJaWYg KHNyY29mZiA9PSBib3VuZGFyeSkKQEAgLTI4MCw2ICsyNjUsNyBAQCBjb252ZXJ0X2Nhc2UoY2hh ciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwgY29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAog CQkJCS8qIG5vIG1hcHBpbmc7IGNvcHkgYnl0ZXMgZnJvbSBzcmMgKi8KIAkJCQlBc3NlcnQoc2lt cGxlID09IDApOwogCQkJCUFzc2VydChzcGVjaWFsID09IE5VTEwpOworCiAJCQkJaWYgKHJlc3Vs dF9sZW4gKyB1MWxlbiA8PSBkc3RzaXplKQogCQkJCQltZW1jcHkoZHN0ICsgcmVzdWx0X2xlbiwg c3JjICsgc3Jjb2ZmLCB1MWxlbik7CiAKQEAgLTI4OSwxMSArMjc1LDE5IEBAIGNvbnZlcnRfY2Fz ZShjaGFyICpkc3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNs ZW4sCiAJCQkJewogCQkJCQkvKiByZXBsYWNlIHdpdGggc2luZ2xlIGNoYXJhY3RlciAqLwogCQkJ CQljaGFyMzJfdAl1MiA9IHNpbXBsZTsKLQkJCQkJY2hhcjMyX3QJdTJsZW4gPSB1bmljb2RlX3V0 ZjhsZW4odTIpOworCQkJCQlpbnQJCQl1MmxlbjsKKwkJCQkJc2l6ZV90CQlyZW1haW5pbmcgPSAw OworCQkJCQl1bnNpZ25lZCBjaGFyICpwID0gTlVMTDsKKworCQkJCQlpZiAoZHN0c2l6ZSA+IHJl c3VsdF9sZW4pCisJCQkJCXsKKwkJCQkJCXJlbWFpbmluZyA9IGRzdHNpemUgLSByZXN1bHRfbGVu OworCQkJCQkJcCA9ICh1bnNpZ25lZCBjaGFyICopIGRzdCArIHJlc3VsdF9sZW47CisJCQkJCX0K IAogCQkJCQlBc3NlcnQoc3BlY2lhbCA9PSBOVUxMKTsKLQkJCQkJaWYgKHJlc3VsdF9sZW4gKyB1 MmxlbiA8PSBkc3RzaXplKQotCQkJCQkJdW5pY29kZV90b191dGY4KHUyLCAodW5zaWduZWQgY2hh ciAqKSBkc3QgKyByZXN1bHRfbGVuKTsKKwkJCQkJdTJsZW4gPSB1dGY4ZW5jb2RlKHAsIHJlbWFp bmluZywgdTIpOworCQkJCQlBc3NlcnQodTJsZW4gPiAwKTsKIAogCQkJCQlyZXN1bHRfbGVuICs9 IHUybGVuOwogCQkJCX0KQEAgLTMwNCwxMCArMjk4LDE4IEBAIGNvbnZlcnRfY2FzZShjaGFyICpk c3QsIHNpemVfdCBkc3RzaXplLCBjb25zdCBjaGFyICpzcmMsIHNpemVfdCBzcmNsZW4sCiAJCQkJ Zm9yIChpbnQgaSA9IDA7IGkgPCBNQVhfQ0FTRV9FWFBBTlNJT04gJiYgc3BlY2lhbFtpXTsgaSsr KQogCQkJCXsKIAkJCQkJY2hhcjMyX3QJdTIgPSBzcGVjaWFsW2ldOwotCQkJCQlzaXplX3QJCXUy bGVuID0gdW5pY29kZV91dGY4bGVuKHUyKTsKKwkJCQkJaW50CQkJdTJsZW47CisJCQkJCXNpemVf dAkJcmVtYWluaW5nID0gMDsKKwkJCQkJdW5zaWduZWQgY2hhciAqcCA9IE5VTEw7CisKKwkJCQkJ aWYgKGRzdHNpemUgPiByZXN1bHRfbGVuKQorCQkJCQl7CisJCQkJCQlyZW1haW5pbmcgPSBkc3Rz aXplIC0gcmVzdWx0X2xlbjsKKwkJCQkJCXAgPSAodW5zaWduZWQgY2hhciAqKSBkc3QgKyByZXN1 bHRfbGVuOworCQkJCQl9CiAKLQkJCQkJaWYgKHJlc3VsdF9sZW4gKyB1MmxlbiA8PSBkc3RzaXpl KQotCQkJCQkJdW5pY29kZV90b191dGY4KHUyLCAodW5zaWduZWQgY2hhciAqKSBkc3QgKyByZXN1 bHRfbGVuKTsKKwkJCQkJdTJsZW4gPSB1dGY4ZW5jb2RlKHAsIHJlbWFpbmluZywgdTIpOworCQkJ CQlBc3NlcnQodTJsZW4gPiAwKTsKIAogCQkJCQlyZXN1bHRfbGVuICs9IHUybGVuOwogCQkJCX0K QEAgLTM1MiwxMyArMzU0LDEwIEBAIGNoZWNrX2ZpbmFsX3NpZ21hKGNvbnN0IHVuc2lnbmVkIGNo YXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCkKIAkJLyogbm93IGF0IGxlYWRpbmcg Ynl0ZSBvZiBwcmV2aW91cyBzZXF1ZW5jZSAqLwogCQlBc3NlcnQoKHN0cltpXSAmIDB4ODApID09 IDAgfHwgKHN0cltpXSAmIDB4QzApID09IDB4QzApOwogCi0JCXVsZW4gPSB1dGY4X21ibGVuKChj b25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIGkpOwotCi0JCS8qIGludmFsaWQgVVRGOCAqLwot CQlpZiAodWxlbiA8IDAgfHwgaSArIHVsZW4gPiBsZW4pCi0JCQlyZXR1cm4gZmFsc2U7CisJCXVs ZW4gPSB1dGY4ZGVjb2RlKCZjdXJyLCAoY29uc3QgdW5zaWduZWQgY2hhciAqKSBzdHIgKyBpLCBs ZW4gLSBpKTsKIAotCQljdXJyID0gdXRmOF90b191bmljb2RlKChjb25zdCB1bnNpZ25lZCBjaGFy ICopIHN0ciArIGkpOworCQlpZiAodWxlbiA8PSAwKQorCQkJcmV0dXJuIGZhbHNlOwkJLyogaW52 YWxpZCBVVEY4ICovCiAKIAkJaWYgKCFwZ191X3Byb3BfY2FzZV9pZ25vcmFibGUoY3VycikpCiAJ CXsKQEAgLTM2NywxOCArMzY2LDE4IEBAIGNoZWNrX2ZpbmFsX3NpZ21hKGNvbnN0IHVuc2lnbmVk IGNoYXIgKnN0ciwgc2l6ZV90IGxlbiwgc2l6ZV90IG9mZnNldCkKIAkJfQogCX0KIAotCXVsZW4g PSB1dGY4X21ibGVuKChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIG9mZnNldCk7CisJdWxl biA9IHV0ZjhkZWNvZGUoJmN1cnIsIChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIG9mZnNl dCwKKwkJCQkJICBsZW4gLSBvZmZzZXQpOworCWlmICh1bGVuIDw9IDApCisJCXJldHVybiBmYWxz ZTsJCQkvKiBpbnZhbGlkIFVURjggKi8KIAogCS8qIGl0ZXJhdGUgZm9yd2FyZCBsb29raW5nIGZv ciBmb2xsb3dpbmcgY2hhcmFjdGVyICovCiAJZm9yIChpbnQgaSA9IG9mZnNldCArIHVsZW47IGkg PCBsZW47KQogCXsKLQkJdWxlbiA9IHV0ZjhfbWJsZW4oKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikg c3RyICsgaSk7Ci0KLQkJLyogaW52YWxpZCBVVEY4ICovCi0JCWlmICh1bGVuIDwgMCB8fCBpICsg dWxlbiA+IGxlbikKLQkJCXJldHVybiBmYWxzZTsKKwkJdWxlbiA9IHV0ZjhkZWNvZGUoJmN1cnIs IChjb25zdCB1bnNpZ25lZCBjaGFyICopIHN0ciArIGksIGxlbiAtIGkpOwogCi0JCWN1cnIgPSB1 dGY4X3RvX3VuaWNvZGUoKGNvbnN0IHVuc2lnbmVkIGNoYXIgKikgc3RyICsgaSk7CisJCWlmICh1 bGVuIDw9IDApCisJCQlyZXR1cm4gZmFsc2U7CQkvKiBpbnZhbGlkIFVURjggKi8KIAogCQlpZiAo IXBnX3VfcHJvcF9jYXNlX2lnbm9yYWJsZShjdXJyKSkKIAkJewotLSAKMi40My4wCgo= --=-pBACy9Cj6vvohW6jbWR4--