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 1wkTvS-000hXV-0D for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Jul 2026 21:47:26 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1wkTvP-00FBPx-2x for pgsql-hackers@arkaria.postgresql.org; Thu, 16 Jul 2026 21:47:23 +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.96) (envelope-from ) id 1wkTvP-00FBPo-0D for pgsql-hackers@lists.postgresql.org; Thu, 16 Jul 2026 21:47:23 +0000 Received: from mail-ot1-x329.google.com ([2607:f8b0:4864:20::329]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1wkTvK-00000000Zhl-337T for pgsql-hackers@postgresql.org; Thu, 16 Jul 2026 21:47:21 +0000 Received: by mail-ot1-x329.google.com with SMTP id 46e09a7af769-7e9ed64d490so2665080a34.3 for ; Thu, 16 Jul 2026 14:47:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=j-davis-com.20251104.gappssmtp.com; s=20251104; t=1784238439; x=1784843239; darn=postgresql.org; h=mime-version:user-agent:content-type:references:in-reply-to:date:cc :to:from:subject:message-id:from:to:cc:subject:date:message-id :reply-to:content-type; bh=wMPURQz8gUmgFEG7bOKQOQJGDgARLsR+rwnRdvg6GeQ=; b=owExv/Gc7Gr+/6+1z5iZsExH5pSVwBgS6mkVIb2buv4Qo5DifINLQfzf9TLIq7C37g NhoxZQThz1LGs5FIWMXgQM+4A4LP2bilm2F2ezrsh5vO5vaMxxtt8YhubAu/4TFnEMPF q05RoBh9qv661hrsD5rpFBYHfYrMcmpbweEuvbX264Yh8ha53qIKTTAhjNphPHuoD6mz JD8q9hIvWjbBbfnReFiVQBAXbeqapRlND0OLJ2edcAk2Dd9SmbbUGdVqgZk7UsvmlJR4 JZo3laMFIhyxCoaTxklFrxrYIUCgrwrzUFNL1dmhaOg0yWrjR4B82GmwrGNZt1HEZe7A /PCQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784238439; x=1784843239; h=mime-version:user-agent:content-type: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:content-type; bh=wMPURQz8gUmgFEG7bOKQOQJGDgARLsR+rwnRdvg6GeQ=; b=eBi8AiPS5WtNp3Bo7ZBuOzBW/ZyLtMc+s4hQUSA5mGt7Bsin/k7R8hma+n0GfweolA BHSazwpo6U/CLU+6Yy5jb8ihrlLUrJ4Hp5vud0fnPYuPcJu25nQxPEiUwbKFj0E37wvH xjP/iAjiSSxZ9mr2xEFaXEEHrGb+LjlhPbDf5h2flGNMt5ml14+DHk/iyUMnPyqMJB+l 2i5lBvDNMW+VieazBPBmeyFeWbM89OV2COqWcCHwiS3EvCi5+GbXrZpPOoOIHn6uuGCM Uq1r9C2CoarMgcwrY9ngsNsPdcjaSwujO3FlM62Iw5eyHjEQLwF6o7Bqjmy2uHurBDt9 Dz8g== X-Forwarded-Encrypted: i=1; AHgh+RoiqJZLa469zttxec5NSPQk0MBX5KXtwofk9RDrat01Esz30DDwFSJqVqWyb1drTJ+tIOz1Uym0hVnFOSID@postgresql.org X-Gm-Message-State: AOJu0YwuiwQm/L4xkXJNl9h3YBFC0SreIx35c9lbiaIiHj6+HFL5Syh1 ilBXvSqS5mX8NOBoyh3TMBYsjkIM70Oer6OsetQRKwJx6bRhzgesWa4s531KNSF/8g== X-Gm-Gg: AfdE7cnzfYEBPW5AMpxjFTrCRP+r7WOA8SCnV9kyYkWyLENv+eNCFyqqjaw36nfiyJj 2J6eOxjY+i6Bd6xm4mahggIHgWEE09dKhFC5/wcdkocOGfS7gnIHOLfDcenmS4YPBpD3sYO++B+ mFuJUwXvCIPu5kSdCrPaQYf0jLxWTMAM7brju98ZnCPludFaCRIlsu+hePnfacF3PJuPyGOqLD+ vyloJbKpg+rakz4cc8+yqt09KyK7mqjiw1Q3WjK9b74bpji6e9tja5TLkElKQmZVipHu7EWXK2s SC6sWx6k87prEFgn4uRJSkzWiVeis5vN8a9ndVPxdeontwHZUNrmC27bG8qK51XsmdPDZ7ryBBD 2ElWg0WZnpT4kcXLZ1j0gBJD9sveR1NtXO4jwn1O73ce9UKcX3qvQjedgVKJ43XHbmPi5RwEHoX V8MnHXjmsgFIcR X-Received: by 2002:a05:6820:1f12:b0:6a3:89d6:b075 with SMTP id 006d021491bc7-6a3d9f058e9mr5637979eaf.23.1784238438739; Thu, 16 Jul 2026 14:47:18 -0700 (PDT) Received: from [10.10.242.174] ([12.63.242.123]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-451ff78897asm17105761fac.17.2026.07.16.14.47.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 16 Jul 2026 14:47:17 -0700 (PDT) Message-ID: <6a8164c5a98e45cd566e3f9bf88f0436de2a0dbb.camel@j-davis.com> Subject: Re: Small patch to improve safety of utf8_to_unicode(). From: Jeff Davis To: Tom Lane Cc: Chao Li , pgsql-hackers@postgresql.org Date: Thu, 16 Jul 2026 14:47:17 -0700 In-Reply-To: <3590905.1784154323@sss.pgh.pa.us> References: <541F240E-94AD-4D65-9794-7D6C316BC3FF@gmail.com> <313BCA0E-2E74-4EB6-9AA8-10DB7F439151@gmail.com> <592441c1d871a4ed0ac1708e132f447caa35869c.camel@j-davis.com> <3058CAA1-40E0-4098-893B-615F77CD35E1@gmail.com> <0cedb517aee8b79b8e31a4e42885ed88c2a67c5f.camel@j-davis.com> <16CAD4DB-9D4A-481A-BB4E-78775C4F4B2C@gmail.com> <3213927.1783950167@sss.pgh.pa.us> <3228110.1783963143@sss.pgh.pa.us> <32! 28230.1783963239@sss.pgh.pa.us> <765830662fd26e0861189c775443fc76ea8213da.camel@j-davis.com> <55491ca4edb3a78ecd62b8d313eca7dd57de5e79.camel@j-davis.com> <3590905.1784154323@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="=-PK7PGP7A5B16ycSqJ1vo" 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 --=-PK7PGP7A5B16ycSqJ1vo Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Wed, 2026-07-15 at 18:25 -0400, Tom Lane wrote: > Master seems sufficient. In that case I did a bit of refactoring to clean it up and put it in a new unicode_limits.h header. Regards, Jeff Davis --=-PK7PGP7A5B16ycSqJ1vo Content-Disposition: attachment; filename="v2-0001-Generate-unicode_limits.h.patch" Content-Type: text/x-patch; name="v2-0001-Generate-unicode_limits.h.patch"; charset="UTF-8" Content-Transfer-Encoding: base64 RnJvbSBiMDljNWJjMGE0MzdmZTE5Njk0MGQ3NjMzZmFjNDk4NWU1NTM4YTA2IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBKZWZmIERhdmlzIDxqZWZmQGotZGF2aXMuY29tPgpEYXRlOiBN b24sIDEzIEp1bCAyMDI2IDE5OjMxOjU2IC0wNzAwClN1YmplY3Q6IFtQQVRDSCB2Ml0gR2VuZXJh dGUgdW5pY29kZV9saW1pdHMuaC4KClRvIGVuc3VyZSB3ZSBkbyBub3Qgb3ZlcmZsb3cgYSBzaXpl X3Qgd2hpbGUgY2FzZSBtYXBwaW5nIG9uIGEgMzItYml0CnBsYXRmb3JtLCB3ZSBuZWVkIHRvIGtu b3cgdGhlIG1heGltdW0gYW1vdW50IGEgVVRGOCBzdHJpbmcgY2FuIGV4cGFuZC4KCkNhbGN1bGF0 ZSB0aGF0IG1heGltdW0gd2hpbGUgZ2VuZXJhdGluZyB1bmljb2RlIHRhYmxlcyBhcyBhIHBhcnQg b2YKdGhlIHVwZGF0ZS11bmljb2RlIHRhcmdldCwgYW5kIG91dHB1dCBpbnRvIGEgbmV3IGhlYWRl cgp1bmljb2RlX2xpbWl0cy5oLiBNaW5vciByZWZhY3RvcmluZyBhbG9uZyB0aGUgd2F5LgoKQWRk IGEgU3RhdGljQXNzZXJ0RGVjbCB0byBjaGVjayB0aGF0IGEgTWF4QWxsb2NTaXplIHRleHQgdmFs dWUKZXhwYW5kZWQgYnkgdGhhdCBhbW91bnQgd291bGQgc3RpbGwgaGF2ZSBhIGxlbmd0aCB0aGF0 IGZpdHMgaW4Kc2l6ZV90LiAoV2UgY291bGRuJ3QgYWN0dWFsbHkgY3JlYXRlIGEgbmV3IHRleHQg dmFsdWUgb3V0IG9mIHRoYXQsIGJ1dAp3ZSBzdGlsbCBuZWVkIHRvIGF2b2lkIG92ZXJmbG93LikK ClJlcG9ydGVkLWJ5OiBUb20gTGFuZSA8dGdsQHNzcy5wZ2gucGEudXM+CkRpc2N1c3Npb246IGh0 dHBzOi8vcG9zdGdyLmVzL20vMzIxMzkyNy4xNzgzOTUwMTY3QHNzcy5wZ2gucGEudXMKLS0tCiBz cmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4uYyAgICAgfCAgMTEgKwogc3Jj L2NvbW1vbi91bmljb2RlL01ha2VmaWxlICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiAuLi4v dW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nhc2VfdGFibGUucGwgICAgfCAxOTQgKysrKysrKysr KysrLS0tLS0tCiBzcmMvY29tbW9uL3VuaWNvZGUvbWVzb24uYnVpbGQgICAgICAgICAgICAgICAg fCAgIDIgKy0KIHNyYy9jb21tb24vdW5pY29kZV9jYXNlLmMgICAgICAgICAgICAgICAgICAgICB8 ICAxMiArLQogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oICAgICAgIHwg ICA5ICstCiBzcmMvaW5jbHVkZS9jb21tb24vdW5pY29kZV9saW1pdHMuaCAgICAgICAgICAgfCAg MzkgKysrKwogNyBmaWxlcyBjaGFuZ2VkLCAyMDIgaW5zZXJ0aW9ucygrKSwgNzEgZGVsZXRpb25z KC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfbGltaXRz LmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC91dGlscy9hZHQvcGdfbG9jYWxlX2J1aWx0aW4u YyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9wZ19sb2NhbGVfYnVpbHRpbi5jCmluZGV4IDU2MTlk YWY0M2MzLi41YzY3YzZmZmMzYSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3Bn X2xvY2FsZV9idWlsdGluLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3BnX2xvY2FsZV9i dWlsdGluLmMKQEAgLTE1LDExICsxNSwyMiBAQAogI2luY2x1ZGUgImNhdGFsb2cvcGdfY29sbGF0 aW9uLmgiCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgogI2luY2x1ZGUgImNvbW1v bi91bmljb2RlX2NhdGVnb3J5LmgiCisjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfbGltaXRzLmgi CiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKKyNp bmNsdWRlICJ1dGlscy9tZW11dGlscy5oIgogI2luY2x1ZGUgInV0aWxzL3BnX2xvY2FsZS5oIgog I2luY2x1ZGUgInV0aWxzL3N5c2NhY2hlLmgiCiAKKy8qCisgKiBUaGUgbGFyZ2VzdCB0ZXh0IHZh bHVlIG11c3QgZml0IGluIE1heEFsbG9jU2l6ZSwgYnV0IHRoZW4gbWF5IGdyb3cgZHVyaW5nCisg KiBjYXNlIG1hcHBpbmcuIFdoaWxlIHRoZSByZXN1bHRpbmcgc3RyaW5nIHdpbGwgbm90IGJlIHJl cHJlc2VudGFibGUgYXMgYSBuZXcKKyAqIHRleHQgdmFsdWUsIHdlIG11c3QgYXQgbGVhc3QgYmUg c3VyZSBub3QgdG8gb3ZlcmZsb3cgYSBzaXplX3Qgd2hpbGUKKyAqIHByb2Nlc3NpbmcgaXQuCisg Ki8KK1N0YXRpY0Fzc2VydERlY2woU0laRV9NQVggLyBVVEY4X01BWF9DQVNFTUFQX0VYUEFOU0lP TiA+IE1heEFsbG9jU2l6ZSwKKwkJCQkgImNhc2UgbWFwcGluZyBtYXkgb3ZlcmZsb3cgc2l6ZV90 Iik7CisKIGV4dGVybiBwZ19sb2NhbGVfdCBjcmVhdGVfcGdfbG9jYWxlX2J1aWx0aW4oT2lkIGNv bGxpZCwKIAkJCQkJCQkJCQkJTWVtb3J5Q29udGV4dCBjb250ZXh0KTsKIGV4dGVybiBjaGFyICpn ZXRfY29sbGF0aW9uX2FjdHVhbF92ZXJzaW9uX2J1aWx0aW4oY29uc3QgY2hhciAqY29sbGNvbGxh dGUpOwpkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlL01ha2VmaWxlIGIvc3JjL2NvbW1v bi91bmljb2RlL01ha2VmaWxlCmluZGV4IGMxNTBlNDAzY2RhLi43MTRjY2JlMDBiZCAxMDA2NDQK LS0tIGEvc3JjL2NvbW1vbi91bmljb2RlL01ha2VmaWxlCisrKyBiL3NyYy9jb21tb24vdW5pY29k ZS9NYWtlZmlsZQpAQCAtMjEsNyArMjEsNyBAQCBDUFBGTEFHUyArPSAkKElDVV9DRkxBR1MpCiAj IEJ5IGRlZmF1bHQsIGRvIG5vdGhpbmcuCiBhbGw6CiAKLXVwZGF0ZS11bmljb2RlOiB1bmljb2Rl X2Nhc2VfdGFibGUuaCB1bmljb2RlX2NhdGVnb3J5X3RhYmxlLmggdW5pY29kZV9lYXN0X2FzaWFu X2Z3X3RhYmxlLmggdW5pY29kZV9ub25zcGFjaW5nX3RhYmxlLmggdW5pY29kZV9ub3JtX2hhc2hm dW5jLmggdW5pY29kZV9ub3JtX3RhYmxlLmggdW5pY29kZV9ub3JtcHJvcHNfdGFibGUuaCB1bmlj b2RlX3ZlcnNpb24uaAordXBkYXRlLXVuaWNvZGU6IHVuaWNvZGVfY2FzZV90YWJsZS5oIHVuaWNv ZGVfY2F0ZWdvcnlfdGFibGUuaCB1bmljb2RlX2Vhc3RfYXNpYW5fZndfdGFibGUuaCB1bmljb2Rl X25vbnNwYWNpbmdfdGFibGUuaCB1bmljb2RlX25vcm1faGFzaGZ1bmMuaCB1bmljb2RlX2xpbWl0 cy5oIHVuaWNvZGVfbm9ybV90YWJsZS5oIHVuaWNvZGVfbm9ybXByb3BzX3RhYmxlLmggdW5pY29k ZV92ZXJzaW9uLmgKIAltdiAkXiAkKHRvcF9zcmNkaXIpL3NyYy9pbmNsdWRlL2NvbW1vbi8KIAkk KE1BS0UpIGNhc2UtY2hlY2sKIAkkKE1BS0UpIGNhdGVnb3J5LWNoZWNrCkBAIC0zNiw2ICszNiw4 IEBAIENvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQgQ2FzZUZvbGRpbmcudHh0IERlcml2ZWRDb3Jl UHJvcGVydGllcy50eHQgRGVyaXZlZE5vcm1hCiB1bmljb2RlX3ZlcnNpb24uaDogZ2VuZXJhdGUt dW5pY29kZV92ZXJzaW9uLnBsCiAJJChQRVJMKSAkPCAtLXZlcnNpb24gJChVTklDT0RFX1ZFUlNJ T04pCiAKK3VuaWNvZGVfbGltaXRzLmg6IHVuaWNvZGVfY2FzZV90YWJsZS5oCisKIHVuaWNvZGVf Y2FzZV90YWJsZS5oOiBnZW5lcmF0ZS11bmljb2RlX2Nhc2VfdGFibGUucGwgQ2FzZUZvbGRpbmcu dHh0IFNwZWNpYWxDYXNpbmcudHh0IFVuaWNvZGVEYXRhLnR4dAogCSQoUEVSTCkgJDwKIApAQCAt OTEsNCArOTMsNCBAQCBjbGVhbjoKIAlybSAtZiAkKE9CSlMpIGNhc2VfdGVzdCBjYXNlX3Rlc3Qu byBjYXRlZ29yeV90ZXN0IGNhdGVnb3J5X3Rlc3QubyBub3JtX3Rlc3Qgbm9ybV90ZXN0Lm8KIAog ZGlzdGNsZWFuOiBjbGVhbgotCXJtIC1mIENvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQgQ2FzZUZv bGRpbmcudHh0IERlcml2ZWRDb3JlUHJvcGVydGllcy50eHQgRGVyaXZlZE5vcm1hbGl6YXRpb25Q cm9wcy50eHQgRWFzdEFzaWFuV2lkdGgudHh0IE5vcm1hbGl6YXRpb25UZXN0LnR4dCBQcm9wTGlz dC50eHQgU3BlY2lhbENhc2luZy50eHQgVW5pY29kZURhdGEudHh0IG5vcm1fdGVzdF90YWJsZS5o IHVuaWNvZGVfY2FzZV90YWJsZS5oIHVuaWNvZGVfY2F0ZWdvcnlfdGFibGUuaCB1bmljb2RlX25v cm1fdGFibGUuaAorCXJtIC1mIENvbXBvc2l0aW9uRXhjbHVzaW9ucy50eHQgQ2FzZUZvbGRpbmcu dHh0IERlcml2ZWRDb3JlUHJvcGVydGllcy50eHQgRGVyaXZlZE5vcm1hbGl6YXRpb25Qcm9wcy50 eHQgRWFzdEFzaWFuV2lkdGgudHh0IE5vcm1hbGl6YXRpb25UZXN0LnR4dCBQcm9wTGlzdC50eHQg U3BlY2lhbENhc2luZy50eHQgVW5pY29kZURhdGEudHh0IG5vcm1fdGVzdF90YWJsZS5oIHVuaWNv ZGVfY2FzZV90YWJsZS5oIHVuaWNvZGVfY2F0ZWdvcnlfdGFibGUuaCB1bmljb2RlX2xpbWl0cy5o IHVuaWNvZGVfbm9ybV90YWJsZS5oCmRpZmYgLS1naXQgYS9zcmMvY29tbW9uL3VuaWNvZGUvZ2Vu ZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxlLnBsIGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRl LXVuaWNvZGVfY2FzZV90YWJsZS5wbAppbmRleCBjMWI5NGY0N2Y1Ni4uZDFkZDNhNWU4ZjIgMTAw NjQ0Ci0tLSBhL3NyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nhc2VfdGFibGUu cGwKKysrIGIvc3JjL2NvbW1vbi91bmljb2RlL2dlbmVyYXRlLXVuaWNvZGVfY2FzZV90YWJsZS5w bApAQCAtNCwxMyArNCwxNCBAQAogIyBvciBsb2NhbGUtc3BlY2lmaWMgbWFwcGluZ3MuCiAjCiAj IElucHV0OiBDYXNlRm9sZGluZy50eHQgU3BlY2lhbENhc2luZy50eHQgVW5pY29kZURhdGEudHh0 Ci0jIE91dHB1dDogdW5pY29kZV9jYXNlX3RhYmxlLmgKKyMgT3V0cHV0OiB1bmljb2RlX2Nhc2Vf dGFibGUuaCB1bmljb2RlX2xpbWl0cy5oCiAjCiAjIENvcHlyaWdodCAoYykgMjAwMC0yMDI2LCBQ b3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAogCiB1c2Ugc3RyaWN0OwogdXNlIHdh cm5pbmdzIEZBVEFMID0+ICdhbGwnOwogdXNlIEdldG9wdDo6TG9uZzsKK3VzZSBFbmNvZGUgcXco ZW5jb2RlX3V0ZjgpOwogCiB1c2UgRmluZEJpbjsKIHVzZSBsaWIgIiRGaW5kQmluOjpSZWFsQmlu Ly4uLy4uL3Rvb2xzLyI7CkBAIC0xOSwxMSArMjAsMjIgQEAgbXkgJG91dHB1dF9wYXRoID0gJy4n OwogCiBHZXRPcHRpb25zKCdvdXRkaXI6cycgPT4gXCRvdXRwdXRfcGF0aCk7CiAKK215ICRvdXRw dXRfbGltaXRzX2ZpbGUgPSAiJG91dHB1dF9wYXRoL3VuaWNvZGVfbGltaXRzLmgiOwogbXkgJG91 dHB1dF90YWJsZV9maWxlID0gIiRvdXRwdXRfcGF0aC91bmljb2RlX2Nhc2VfdGFibGUuaCI7CiAK KyMgVGhlIGZvbGxvd2luZyBhcmUgY29tcHV0ZWQgZHVyaW5nIHRhYmxlIGdlbmVyYXRpb246CisK ICMgVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGVwb2ludHMgdGhhdCBjYW4gcmVzdWx0IGZyb20g Y2FzZSBtYXBwaW5nCi0jIG9mIGEgc2luZ2xlIGNoYXJhY3Rlci4gU2VlIFVuaWNvZGUgc2VjdGlv biA1LjE4ICJDYXNlIE1hcHBpbmdzIi4KLW15ICRNQVhfQ0FTRV9FWFBBTlNJT04gPSAzOworIyBv ZiBhIHNpbmdsZSBjaGFyYWN0ZXIuCitteSAkVU5JQ09ERV9NQVhfQ0FTRU1BUF9DT0RFUE9JTlRT ID0gMDsKKworIyBUaGUgbWF4aW11bSBleHBhbnNpb24gZmFjdG9yIChpbiBieXRlcykgd2hlbiBj YXNlIG1hcHBpbmcgYSBVVEY4CisjIHN0cmluZy4KK215ICRVVEY4X01BWF9DQVNFTUFQX0VYUEFO U0lPTiA9IDA7CisKKyMgVGhlIG1heGltdW0gbnVtYmVyIG9mIFVURjggYnl0ZXMgdGhhdCBjYW4g cmVzdWx0IGZyb20gY2FzZSBtYXBwaW5nCisjIGEgc2luZ2xlIGNvZGUgcG9pbnQuCitteSAkVVRG OF9DQVNFTUFQX0JVRlNaID0gMDsKIAogbXkgJEZIOwogCkBAIC00NCwxNSArNTYsMjIgQEAgd2hp bGUgKG15ICRsaW5lID0gPCRGSD4pCiAJZGllICJTaW1wbGVfVGl0bGVjYXNlICRjb2RlIG91dCBv ZiByYW5nZSIgaWYgJHNpbXBsZV90aXRsZWNhc2UgPiAweDEwRkZGRjsKIAlkaWUgIlNpbXBsZV9V cHBlcmNhc2UgJGNvZGUgb3V0IG9mIHJhbmdlIiBpZiAkc2ltcGxlX3VwcGVyY2FzZSA+IDB4MTBG RkZGOwogCi0JaWYgKCRzaW1wbGVfbG93ZXJjYXNlIHx8ICRzaW1wbGVfdGl0bGVjYXNlIHx8ICRz aW1wbGVfdXBwZXJjYXNlKQotCXsKLQkJJHNpbXBsZXskY29kZX0gPSB7Ci0JCQlTaW1wbGVfTG93 ZXJjYXNlID0+ICgkc2ltcGxlX2xvd2VyY2FzZSB8fCAkY29kZSksCi0JCQlTaW1wbGVfVGl0bGVj YXNlID0+ICgkc2ltcGxlX3RpdGxlY2FzZSB8fCAkY29kZSksCi0JCQlTaW1wbGVfVXBwZXJjYXNl ID0+ICgkc2ltcGxlX3VwcGVyY2FzZSB8fCAkY29kZSksCi0JCQlTaW1wbGVfRm9sZGNhc2UgPT4g JGNvZGUsCi0JCX07Ci0JfQorCW5leHQgaWYgISRzaW1wbGVfbG93ZXJjYXNlICYmICEkc2ltcGxl X3RpdGxlY2FzZSAmJiAhJHNpbXBsZV91cHBlcmNhc2U7CisKKwkkc2ltcGxlX2xvd2VyY2FzZSB8 fD0gJGNvZGU7CisJJHNpbXBsZV90aXRsZWNhc2UgfHw9ICRjb2RlOworCSRzaW1wbGVfdXBwZXJj YXNlIHx8PSAkY29kZTsKKworCXVwZGF0ZV9saW1pdHMoJ3VwcGVyY2FzZScsICRjb2RlLCAoJHNp bXBsZV91cHBlcmNhc2UpKTsKKwl1cGRhdGVfbGltaXRzKCdsb3dlcmNhc2UnLCAkY29kZSwgKCRz aW1wbGVfbG93ZXJjYXNlKSk7CisJdXBkYXRlX2xpbWl0cygndGl0bGVjYXNlJywgJGNvZGUsICgk c2ltcGxlX3RpdGxlY2FzZSkpOworCisJJHNpbXBsZXskY29kZX0gPSB7CisJCVNpbXBsZV9Mb3dl cmNhc2UgPT4gJHNpbXBsZV9sb3dlcmNhc2UsCisJCVNpbXBsZV9UaXRsZWNhc2UgPT4gJHNpbXBs ZV90aXRsZWNhc2UsCisJCVNpbXBsZV9VcHBlcmNhc2UgPT4gJHNpbXBsZV91cHBlcmNhc2UsCisJ CVNpbXBsZV9Gb2xkY2FzZSA9PiAkY29kZSwKKwl9OwogfQogY2xvc2UgJEZIOwogCkBAIC0xMDUs MTkgKzEyNCw5IEBAIHdoaWxlIChteSAkbGluZSA9IDwkRkg+KQogCXB1c2ggQHVwcGVyLCAkY29k ZSBpZiAoc2NhbGFyIEB1cHBlciA9PSAwKTsKIAlwdXNoIEBmb2xkLCAkY29kZTsKIAotCSMgbm9u ZSBzaG91bGQgbWFwIHRvIG1vcmUgdGhhbiAzIGNvZGVwb2ludHMKLQlkaWUgImxvd2VyY2FzZSBl eHBhbnNpb24gZm9yIDB4JGVsdHNbMF0gZXhjZWVkcyBtYXhpbXVtOiAnJGVsdHNbMV0nIgotCSAg aWYgKHNjYWxhciBAbG93ZXIpID4gJE1BWF9DQVNFX0VYUEFOU0lPTjsKLQlkaWUgInRpdGxlY2Fz ZSBleHBhbnNpb24gZm9yIDB4JGVsdHNbMF0gZXhjZWVkcyBtYXhpbXVtOiAnJGVsdHNbMl0nIgot CSAgaWYgKHNjYWxhciBAdGl0bGUpID4gJE1BWF9DQVNFX0VYUEFOU0lPTjsKLQlkaWUgInVwcGVy Y2FzZSBleHBhbnNpb24gZm9yIDB4JGVsdHNbMF0gZXhjZWVkcyBtYXhpbXVtOiAnJGVsdHNbM10n IgotCSAgaWYgKHNjYWxhciBAdXBwZXIpID4gJE1BWF9DQVNFX0VYUEFOU0lPTjsKLQotCSMgcGFk IGFycmF5cyB0byBhIGZpeGVkIGxlbmd0aCBvZiAzCi0Jd2hpbGUgKHNjYWxhciBAdXBwZXIgPCAk TUFYX0NBU0VfRVhQQU5TSU9OKSB7IHB1c2ggQHVwcGVyLCAweDAwMDAwMCB9Ci0Jd2hpbGUgKHNj YWxhciBAbG93ZXIgPCAkTUFYX0NBU0VfRVhQQU5TSU9OKSB7IHB1c2ggQGxvd2VyLCAweDAwMDAw MCB9Ci0Jd2hpbGUgKHNjYWxhciBAdGl0bGUgPCAkTUFYX0NBU0VfRVhQQU5TSU9OKSB7IHB1c2gg QHRpdGxlLCAweDAwMDAwMCB9Ci0Jd2hpbGUgKHNjYWxhciBAZm9sZCA8ICRNQVhfQ0FTRV9FWFBB TlNJT04pICB7IHB1c2ggQGZvbGQsIDB4MDAwMDAwIH0KKwl1cGRhdGVfbGltaXRzKCdsb3dlcmNh c2UnLCAkY29kZSwgQGxvd2VyKTsKKwl1cGRhdGVfbGltaXRzKCd0aXRsZWNhc2UnLCAkY29kZSwg QHRpdGxlKTsKKwl1cGRhdGVfbGltaXRzKCd1cHBlcmNhc2UnLCAkY29kZSwgQHVwcGVyKTsKIAog CSMgQ2hhcmFjdGVycyB3aXRoIHNwZWNpYWwgbWFwcGluZ3MgbWF5IG5vdCBoYXZlIHNpbXBsZSBt YXBwaW5nczsKIAkjIGVuc3VyZSB0aGF0IGFuIGVudHJ5IGV4aXN0cy4KQEAgLTE3NCw2ICsxODMs OCBAQCB3aGlsZSAobXkgJGxpbmUgPSA8JEZIPikKIAlkaWUgInVuc3VwcG9ydGVkIHN0YXR1cyB0 eXBlICckc3RhdHVzJyIKIAkgIGlmICRzdGF0dXMgbmUgJ1MnICYmICRzdGF0dXMgbmUgJ0MnICYm ICRzdGF0dXMgbmUgJ0YnOwogCisJdXBkYXRlX2xpbWl0cygnY2FzZWZvbGQnLCAkY29kZSwgQGZv bGQpOworCiAJIyBpbml0aWFsaXplIHNpbXBsZSBjYXNlIG1hcHBpbmdzIGlmIHRoZXkgZG9uJ3Qg ZXhpc3QKIAkkc2ltcGxleyRjb2RlfSB8fD0gewogCQlTaW1wbGVfTG93ZXJjYXNlID0+ICRjb2Rl LApAQCAtMTk3LDI2ICsyMDgsMTIgQEAgd2hpbGUgKG15ICRsaW5lID0gPCRGSD4pCiAKIAlpZiAo JHN0YXR1cyBlcSAnRicgfHwgKCRzdGF0dXMgZXEgJ0MnICYmIGRlZmluZWQgJHNwZWNpYWx7JGNv ZGV9KSkKIAl7Ci0JCXdoaWxlIChzY2FsYXIgQGZvbGQgPCAkTUFYX0NBU0VfRVhQQU5TSU9OKSB7 IHB1c2ggQGZvbGQsIDB4MDAwMDAwIH0KLQogCQkjaW5pdGlhbGl6ZSBzcGVjaWFsIGNhc2UgbWFw cGluZ3MgaWYgdGhleSBkb24ndCBleGlzdAogCQlpZiAoIWRlZmluZWQgJHNwZWNpYWx7JGNvZGV9 KQogCQl7CiAJCQlteSBAbG93ZXIgPSAoJHNpbXBsZXskY29kZX17U2ltcGxlX0xvd2VyY2FzZX0p OwogCQkJbXkgQHRpdGxlID0gKCRzaW1wbGV7JGNvZGV9e1NpbXBsZV9UaXRsZWNhc2V9KTsKIAkJ CW15IEB1cHBlciA9ICgkc2ltcGxleyRjb2RlfXtTaW1wbGVfVXBwZXJjYXNlfSk7Ci0JCQl3aGls ZSAoc2NhbGFyIEBsb3dlciA8ICRNQVhfQ0FTRV9FWFBBTlNJT04pCi0JCQl7Ci0JCQkJcHVzaCBA bG93ZXIsIDB4MDAwMDAwOwotCQkJfQotCQkJd2hpbGUgKHNjYWxhciBAdGl0bGUgPCAkTUFYX0NB U0VfRVhQQU5TSU9OKQotCQkJewotCQkJCXB1c2ggQHRpdGxlLCAweDAwMDAwMDsKLQkJCX0KLQkJ CXdoaWxlIChzY2FsYXIgQHVwcGVyIDwgJE1BWF9DQVNFX0VYUEFOU0lPTikKLQkJCXsKLQkJCQlw dXNoIEB1cHBlciwgMHgwMDAwMDA7Ci0JCQl9CiAJCQkkc3BlY2lhbHskY29kZX0gPSB7CiAJCQkJ TG93ZXJjYXNlID0+IFxAbG93ZXIsCiAJCQkJVGl0bGVjYXNlID0+IFxAdGl0bGUsCkBAIC0yNDUs NiArMjQyLDUzIEBAIGRpZQogICAic3BlY2lhbCBjYXNlIG1hcCBjb250YWlucyAkbnVtX3NwZWNp YWwgZW50cmllcyB3aGljaCBjYW5ub3QgYmUgcmVwcmVzZW50ZWQgaW4gdWludDgiCiAgIGlmICgk bnVtX3NwZWNpYWwgPiAyNTYpOwogCitvcGVuIG15ICRMSU1JVFMsICc+JywgJG91dHB1dF9saW1p dHNfZmlsZQorICBvciBkaWUgIkNvdWxkIG5vdCBvcGVuIG91dHB1dCBmaWxlICRvdXRwdXRfbGlt aXRzX2ZpbGU6ICQhXG4iOworCitwcmludCAkTElNSVRTIDw8IkVPUyI7CisvKi0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAqCisgKiB1bmljb2RlX2xpbWl0cy5oCisgKgkgIFVzZWZ1bCBsaW1pdHMgY2FsY3Vs YXRlZCBmcm9tIFVuaWNvZGUgZGF0YS4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5 OTYtMjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25z IENvcHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9y bmlhCisgKgorICogc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfbGltaXRzLmgKKyAqCisgKi0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0KKyAqLworCisjaWZuZGVmIFVOSUNPREVfTElNSVRTX0gKKyNkZWZpbmUg VU5JQ09ERV9MSU1JVFNfSAorCisvKgorICogRmlsZSBhdXRvLWdlbmVyYXRlZCBieSBzcmMvY29t bW9uL3VuaWNvZGUvZ2VuZXJhdGUtdW5pY29kZV9jYXNlX3RhYmxlLnBsLAorICogZG8gbm90IGVk aXQuCisgKi8KKworLyoKKyAqIFRoZSBtYXhpbXVtIG51bWJlciBvZiBjb2RlcG9pbnRzIHRoYXQg Y2FuIHJlc3VsdCBmcm9tIGNhc2UgbWFwcGluZworICogb2YgYSBzaW5nbGUgY29kZSBwb2ludC4g U2VlIFVuaWNvZGUgc2VjdGlvbiA1LjE4ICJDYXNlIE1hcHBpbmdzIi4KKyAqLworI2RlZmluZSBV TklDT0RFX01BWF9DQVNFTUFQX0NPREVQT0lOVFMgJFVOSUNPREVfTUFYX0NBU0VNQVBfQ09ERVBP SU5UUworCisvKgorICogVGhlIG1heGltdW0gZXhwYW5zaW9uIGZhY3RvciBvZiBhIFVURjggc3Ry aW5nIGR1ZSB0byBjYXNlIG1hcHBpbmcuCisgKi8KKyNkZWZpbmUgVVRGOF9NQVhfQ0FTRU1BUF9F WFBBTlNJT04gJFVURjhfTUFYX0NBU0VNQVBfRVhQQU5TSU9OCisKKy8qCisgKiBUaGUgbWF4aW11 bSBudW1iZXIgb2YgVVRGOCBieXRlcyBuZWVkZWQgdG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBjYXNl CisgKiBtYXBwaW5nIGEgc2luZ2xlIGNvZGUgcG9pbnQuCisgKi8KKyNkZWZpbmUgVVRGOF9DQVNF TUFQX0JVRlNaICRVVEY4X0NBU0VNQVBfQlVGU1oKKworI2VuZGlmCitFT1MKKworY2xvc2UgJExJ TUlUUzsKKwogIyBTdGFydCB3cml0aW5nIG91dCB0aGUgb3V0cHV0IGZpbGVzCiBvcGVuIG15ICRP VCwgJz4nLCAkb3V0cHV0X3RhYmxlX2ZpbGUKICAgb3IgZGllICJDb3VsZCBub3Qgb3BlbiBvdXRw dXQgZmlsZSAkb3V0cHV0X3RhYmxlX2ZpbGU6ICQhXG4iOwpAQCAtMjcwLDEyICszMTQsNyBAQCBw cmludCAkT1QgPDwiRU9TIjsKICAqLwogCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5o IgotCi0vKgotICogVGhlIG1heGltdW0gbnVtYmVyIG9mIGNvZGVwb2ludHMgdGhhdCBjYW4gcmVz dWx0IGZyb20gY2FzZSBtYXBwaW5nCi0gKiBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFNlZSBVbmlj b2RlIHNlY3Rpb24gNS4xOCAiQ2FzZSBNYXBwaW5ncyIuCi0gKi8KLSNkZWZpbmUgTUFYX0NBU0Vf RVhQQU5TSU9OIDMKKyNpbmNsdWRlICJjb21tb24vdW5pY29kZV9saW1pdHMuaCIKIAogLyoKICAq IENhc2UgbWFwcGluZyBjb25kaXRpb24gZmxhZ3MuIEZvciBub3csIG9ubHkgRmluYWxfU2lnbWEg aXMgc3VwcG9ydGVkLgpAQCAtMjk2LDcgKzMzNSw3IEBAIHR5cGVkZWYgZW51bQogdHlwZWRlZiBz dHJ1Y3QKIHsKIAlpbnQxNgkJY29uZGl0aW9uczsKLQljaGFyMzJfdAltYXBbTkNhc2VLaW5kXVtN QVhfQ0FTRV9FWFBBTlNJT05dOworCWNoYXIzMl90CW1hcFtOQ2FzZUtpbmRdW1VOSUNPREVfTUFY X0NBU0VNQVBfQ09ERVBPSU5UU107CiB9IHBnX3NwZWNpYWxfY2FzZTsKIAogLyoKQEAgLTMxMCwx OCArMzQ5LDI2IEBAIEVPUwogCiBmb3JlYWNoIG15ICRjb2RlIChzb3J0IHsgJGEgPD0+ICRiIH0g KGtleXMgJXNwZWNpYWwpKQogewotCWRpZSBpZiBzY2FsYXIgQHsgJHNwZWNpYWx7JGNvZGV9e0xv d2VyY2FzZX0gfSAhPSAkTUFYX0NBU0VfRVhQQU5TSU9OOwotCWRpZSBpZiBzY2FsYXIgQHsgJHNw ZWNpYWx7JGNvZGV9e1RpdGxlY2FzZX0gfSAhPSAkTUFYX0NBU0VfRVhQQU5TSU9OOwotCWRpZSBp ZiBzY2FsYXIgQHsgJHNwZWNpYWx7JGNvZGV9e1VwcGVyY2FzZX0gfSAhPSAkTUFYX0NBU0VfRVhQ QU5TSU9OOwotCWRpZSBpZiBzY2FsYXIgQHsgJHNwZWNpYWx7JGNvZGV9e0ZvbGRjYXNlfSB9ICE9 ICRNQVhfQ0FTRV9FWFBBTlNJT047Ci0JbXkgJGxvd2VyID0gam9pbiAiLCAiLAotCSAgKG1hcCB7 IHNwcmludGYgIjB4JTA2eCIsICRfIH0gQHsgJHNwZWNpYWx7JGNvZGV9e0xvd2VyY2FzZX0gfSk7 Ci0JbXkgJHRpdGxlID0gam9pbiAiLCAiLAotCSAgKG1hcCB7IHNwcmludGYgIjB4JTA2eCIsICRf IH0gQHsgJHNwZWNpYWx7JGNvZGV9e1RpdGxlY2FzZX0gfSk7Ci0JbXkgJHVwcGVyID0gam9pbiAi LCAiLAotCSAgKG1hcCB7IHNwcmludGYgIjB4JTA2eCIsICRfIH0gQHsgJHNwZWNpYWx7JGNvZGV9 e1VwcGVyY2FzZX0gfSk7Ci0JbXkgJGZvbGQgPSBqb2luICIsICIsCi0JICAobWFwIHsgc3ByaW50 ZiAiMHglMDZ4IiwgJF8gfSBAeyAkc3BlY2lhbHskY29kZX17Rm9sZGNhc2V9IH0pOworCW15IEBs b3dlciA9IEB7ICRzcGVjaWFseyRjb2RlfXtMb3dlcmNhc2V9IH07CisJbXkgQHRpdGxlID0gQHsg JHNwZWNpYWx7JGNvZGV9e1RpdGxlY2FzZX0gfTsKKwlteSBAdXBwZXIgPSBAeyAkc3BlY2lhbHsk Y29kZX17VXBwZXJjYXNlfSB9OworCW15IEBmb2xkID0gQHsgJHNwZWNpYWx7JGNvZGV9e0ZvbGRj YXNlfSB9OworCisJIyBwYWQgdG8gZml4ZWQgbGVuZ3RoCisJcHVzaCBAbG93ZXIsIDB4MDAwMDAw CisJICB3aGlsZSAoc2NhbGFyIEBsb3dlciA8ICRVTklDT0RFX01BWF9DQVNFTUFQX0NPREVQT0lO VFMpOworCXB1c2ggQHRpdGxlLCAweDAwMDAwMAorCSAgd2hpbGUgKHNjYWxhciBAdGl0bGUgPCAk VU5JQ09ERV9NQVhfQ0FTRU1BUF9DT0RFUE9JTlRTKTsKKwlwdXNoIEB1cHBlciwgMHgwMDAwMDAK KwkgIHdoaWxlIChzY2FsYXIgQHVwcGVyIDwgJFVOSUNPREVfTUFYX0NBU0VNQVBfQ09ERVBPSU5U Uyk7CisJcHVzaCBAZm9sZCwgMHgwMDAwMDAKKwkgIHdoaWxlIChzY2FsYXIgQGZvbGQgPCAkVU5J Q09ERV9NQVhfQ0FTRU1BUF9DT0RFUE9JTlRTKTsKKworCW15ICRsb3dlciA9IGpvaW4gIiwgIiwg KG1hcCB7IHNwcmludGYgIjB4JTA2eCIsICRfIH0gQGxvd2VyKTsKKwlteSAkdGl0bGUgPSBqb2lu ICIsICIsIChtYXAgeyBzcHJpbnRmICIweCUwNngiLCAkXyB9IEB0aXRsZSk7CisJbXkgJHVwcGVy ID0gam9pbiAiLCAiLCAobWFwIHsgc3ByaW50ZiAiMHglMDZ4IiwgJF8gfSBAdXBwZXIpOworCW15 ICRmb2xkID0gam9pbiAiLCAiLCAobWFwIHsgc3ByaW50ZiAiMHglMDZ4IiwgJF8gfSBAZm9sZCk7 CisKIAlwcmludGYgJE9UICJcdHslcywgIiwgJHNwZWNpYWx7JGNvZGV9e0NvbmRpdGlvbnN9Owog CXByaW50ZiAkT1QKIAkgICJ7W0Nhc2VMb3dlcl0gPSB7JXN9LFtDYXNlVGl0bGVdID0geyVzfSxb Q2FzZVVwcGVyXSA9IHslc30sW0Nhc2VGb2xkXSA9IHslc319fSxcbiIsCkBAIC01MjIsNiArNTY5 LDM3IEBAIEVPUwogCiBjbG9zZSAkT1Q7CiAKKyMgY2FsY3VsYXRlLCBjaGVjaywgYW5kIHVwZGF0 ZSBsaW1pdHMKK3N1YiB1cGRhdGVfbGltaXRzCit7CisJbXkgKCRjYXNla2luZCwgJGNvZGVwb2lu dCwgQG1hcHBpbmcpID0gQF87CisJbXkgJG4gPSBzY2FsYXIgQG1hcHBpbmc7CisKKwkjIFNlZSBV bmljb2RlIHNlY3Rpb24gNS4xOCAiQ2FzZSBNYXBwaW5ncyIKKwlteSAkbWFwcGluZ19zdHIgPSBq b2luICcgJywgbWFwIHsgc3ByaW50ZiAiMHglMDZ4IiwgJF8gfSBAbWFwcGluZzsKKwlkaWUgc3By aW50ZigiJXMgZXhwYW5zaW9uIGZvciAweCUwNnggZXhjZWVkcyBtYXhpbXVtOiAlcyIsCisJCSRj YXNla2luZCwgJGNvZGVwb2ludCwgJG1hcHBpbmdfc3RyKQorCSAgaWYgJG4gPiAzOworCisJJFVO SUNPREVfTUFYX0NBU0VNQVBfQ09ERVBPSU5UUyA9ICRuCisJICBpZiAkbiA+ICRVTklDT0RFX01B WF9DQVNFTUFQX0NPREVQT0lOVFM7CisKKwlteSAkdXRmOGxlbjEgPSBsZW5ndGgoZW5jb2RlX3V0 ZjgoY2hyICRjb2RlcG9pbnQpKTsKKwlteSAkdXRmOGxlbjIgPSBsZW5ndGgoZW5jb2RlX3V0Zjgo am9pbiAnJywgbWFwIHsgY2hyIH0gQG1hcHBpbmcpKTsKKwlteSAkZmFjdG9yID0gaW50KCgkdXRm OGxlbjEgKyAkdXRmOGxlbjIgLSAxKSAvICR1dGY4bGVuMSk7CisJJFVURjhfTUFYX0NBU0VNQVBf RVhQQU5TSU9OID0gJGZhY3RvcgorCSAgaWYgJGZhY3RvciA+ICRVVEY4X01BWF9DQVNFTUFQX0VY UEFOU0lPTjsKKworCSMgTm90IGd1YXJhbnRlZWQgYnkgVW5pY29kZSBzdGFuZGFyZC4gSWYgbGFy Z2VyIHRoYW4gZXhwZWN0ZWQsCisJIyB0aGVuIGV2YWx1YXRlIEMgdHlwZSBvdmVyZmxvdyByaXNr cyBiZWZvcmUgdXNpbmcgdGhlIGdlbmVyYXRlZAorCSMgdGFibGUuCisJZGllICJVVEY4IGNhc2Vt YXAgZXhwYW5zaW9uIGlzIGdyZWF0ZXIgdGhhbiAzIgorCSAgaWYgJFVURjhfTUFYX0NBU0VNQVBf RVhQQU5TSU9OID4gMzsKKworCSRVVEY4X0NBU0VNQVBfQlVGU1ogPSAkdXRmOGxlbjIKKwkgIGlm ICR1dGY4bGVuMiA+ICRVVEY4X0NBU0VNQVBfQlVGU1o7Cit9CisKICMgVGhlIGZ1bmN0aW9uIGdl bmVyYXRlcyBDIGNvZGUgd2l0aCBhIHNlcmllcyBvZiBuZXN0ZWQgaWYtZWxzZSBjb25kaXRpb25z CiAjIHRvIHNlYXJjaCBmb3IgdGhlIG1hdGNoaW5nIGludGVydmFsLgogc3ViIGJyYW5jaApkaWZm IC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlL21lc29uLmJ1aWxkIGIvc3JjL2NvbW1vbi91bmlj b2RlL21lc29uLmJ1aWxkCmluZGV4IDhhMzFmZTQwZjZjLi5hMzJkNDRkMTgxNiAxMDA2NDQKLS0t IGEvc3JjL2NvbW1vbi91bmljb2RlL21lc29uLmJ1aWxkCisrKyBiL3NyYy9jb21tb24vdW5pY29k ZS9tZXNvbi5idWlsZApAQCAtMjgsNyArMjgsNyBAQCB1cGRhdGVfdW5pY29kZV9jb21tb25fdGFy Z2V0cyA9IFtdCiB1cGRhdGVfdW5pY29kZV9jb21tb25fdGFyZ2V0cyArPSBcCiAgIGN1c3RvbV90 YXJnZXQoJ3VuaWNvZGVfY2FzZV90YWJsZS5oJywKICAgICBpbnB1dDogW3VuaWNvZGVfZGF0YVsn Q2FzZUZvbGRpbmcudHh0J10sIHVuaWNvZGVfZGF0YVsnU3BlY2lhbENhc2luZy50eHQnXSwgdW5p Y29kZV9kYXRhWydVbmljb2RlRGF0YS50eHQnXV0sCi0gICAgb3V0cHV0OiBbJ3VuaWNvZGVfY2Fz ZV90YWJsZS5oJ10sCisgICAgb3V0cHV0OiBbJ3VuaWNvZGVfY2FzZV90YWJsZS5oJywgJ3VuaWNv ZGVfbGltaXRzLmgnXSwKICAgICBjb21tYW5kOiBbCiAgICAgICBwZXJsLCBmaWxlcygnZ2VuZXJh dGUtdW5pY29kZV9jYXNlX3RhYmxlLnBsJyksCiAgICAgICAnLS1vdXRkaXInLCAnQE9VVERJUkAn LCAnQElOUFVUQCddLApkaWZmIC0tZ2l0IGEvc3JjL2NvbW1vbi91bmljb2RlX2Nhc2UuYyBiL3Ny Yy9jb21tb24vdW5pY29kZV9jYXNlLmMKaW5kZXggMzk5ZjA4MjM1YTkuLjAwNjY4YTdkNGYzIDEw MDY0NAotLS0gYS9zcmMvY29tbW9uL3VuaWNvZGVfY2FzZS5jCisrKyBiL3NyYy9jb21tb24vdW5p Y29kZV9jYXNlLmMKQEAgLTIzNyw2ICsyMzcsMTIgQEAgY29udmVydF9jYXNlKGNoYXIgKmRzdCwg c2l6ZV90IGRzdHNpemUsIGNvbnN0IGNoYXIgKnNyYywgc2l6ZV90IHNyY2xlbiwKIAlzaXplX3QJ CXJlc3VsdF9sZW4gPSAwOwogCXNpemVfdAkJYm91bmRhcnkgPSAwOwogCisJLyoKKwkgKiBNdXN0 IGJlIGd1YXJhbnRlZWQgYnkgY2FsbGVyIHRvIGF2b2lkIG92ZXJmbG93ICh0ZXh0IHZhbHVlcyBs aW1pdGVkIHRvCisJICogTWF4QWxsb2NTaXplIGFueXdheSkuCisJICovCisJQXNzZXJ0KHNyY2xl biA8IFNJWkVfTUFYIC8gVVRGOF9NQVhfQ0FTRU1BUF9FWFBBTlNJT04pOworCiAJQXNzZXJ0KChz dHJfY2FzZWtpbmQgPT0gQ2FzZVRpdGxlICYmIHdibmV4dCAmJiB3YnN0YXRlKSB8fAogCQkgICAo c3RyX2Nhc2VraW5kICE9IENhc2VUaXRsZSAmJiAhd2JuZXh0ICYmICF3YnN0YXRlKSk7CiAKQEAg LTI5OSw5ICszMDUsOSBAQCBjb252ZXJ0X2Nhc2UoY2hhciAqZHN0LCBzaXplX3QgZHN0c2l6ZSwg Y29uc3QgY2hhciAqc3JjLCBzaXplX3Qgc3JjbGVuLAogCQkJCX0KIAkJCQlicmVhazsKIAkJCWNh c2UgQ0FTRU1BUF9TUEVDSUFMOgotCQkJCS8qIHJlcGxhY2Ugd2l0aCB1cCB0byBNQVhfQ0FTRV9F WFBBTlNJT04gY2hhcmFjdGVycyAqLworCQkJCS8qIHJlcGxhY2Ugd2l0aCB1cCB0byBVTklDT0RF X01BWF9DQVNFTUFQX0NPREVQT0lOVFMgKi8KIAkJCQlBc3NlcnQoc2ltcGxlID09IDApOwotCQkJ CWZvciAoaW50IGkgPSAwOyBpIDwgTUFYX0NBU0VfRVhQQU5TSU9OICYmIHNwZWNpYWxbaV07IGkr KykKKwkJCQlmb3IgKGludCBpID0gMDsgaSA8IFVOSUNPREVfTUFYX0NBU0VNQVBfQ09ERVBPSU5U UyAmJiBzcGVjaWFsW2ldOyBpKyspCiAJCQkJewogCQkJCQljaGFyMzJfdAl1MiA9IHNwZWNpYWxb aV07CiAJCQkJCXNpemVfdAkJdTJsZW4gPSB1bmljb2RlX3V0ZjhsZW4odTIpOwpAQCAtNDE1LDcg KzQyMSw3IEBAIGNoZWNrX3NwZWNpYWxfY29uZGl0aW9ucyhpbnQgY29uZGl0aW9ucywgY29uc3Qg Y2hhciAqc3RyLCBzaXplX3QgbGVuLAogICoKICAqIElmIGZ1bGwgaXMgdHJ1ZSwgYW5kIGEgc3Bl Y2lhbCBjYXNlIG1hcHBpbmcgaXMgZm91bmQgYW5kIHRoZSBjb25kaXRpb25zIGFyZQogICogbWV0 LCAnc3BlY2lhbCcgaXMgc2V0IHRvIHRoZSBtYXBwaW5nIHJlc3VsdCAod2hpY2ggaXMgYW4gYXJy YXkgb2YgdXAgdG8KLSAqIE1BWF9DQVNFX0VYUEFOU0lPTiBjaGFyYWN0ZXJzKSBhbmQgQ0FTRU1B UF9TUEVDSUFMIGlzIHJldHVybmVkLgorICogVU5JQ09ERV9NQVhfQ0FTRU1BUF9DT0RFUE9JTlRT KSBhbmQgQ0FTRU1BUF9TUEVDSUFMIGlzIHJldHVybmVkLgogICoKICAqIE90aGVyd2lzZSwgc2Vh cmNoIGZvciBhIHNpbXBsZSBtYXBwaW5nLCBhbmQgaWYgZm91bmQsIHNldCAnc2ltcGxlJyB0byB0 aGUKICAqIHJlc3VsdCBhbmQgcmV0dXJuIENBU0VNQVBfU0lNUExFLgpkaWZmIC0tZ2l0IGEvc3Jj L2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oIGIvc3JjL2luY2x1ZGUvY29tbW9u L3VuaWNvZGVfY2FzZV90YWJsZS5oCmluZGV4IGIyMjc0NjI3YzRmLi45OTMwOTQzNDUzZiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvY29tbW9uL3VuaWNvZGVfY2FzZV90YWJsZS5oCisrKyBiL3Ny Yy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2Nhc2VfdGFibGUuaApAQCAtMTgsMTIgKzE4LDcgQEAK ICAqLwogCiAjaW5jbHVkZSAiY29tbW9uL3VuaWNvZGVfY2FzZS5oIgotCi0vKgotICogVGhlIG1h eGltdW0gbnVtYmVyIG9mIGNvZGVwb2ludHMgdGhhdCBjYW4gcmVzdWx0IGZyb20gY2FzZSBtYXBw aW5nCi0gKiBvZiBhIHNpbmdsZSBjaGFyYWN0ZXIuIFNlZSBVbmljb2RlIHNlY3Rpb24gNS4xOCAi Q2FzZSBNYXBwaW5ncyIuCi0gKi8KLSNkZWZpbmUgTUFYX0NBU0VfRVhQQU5TSU9OIDMKKyNpbmNs dWRlICJjb21tb24vdW5pY29kZV9saW1pdHMuaCIKIAogLyoKICAqIENhc2UgbWFwcGluZyBjb25k aXRpb24gZmxhZ3MuIEZvciBub3csIG9ubHkgRmluYWxfU2lnbWEgaXMgc3VwcG9ydGVkLgpAQCAt NDQsNyArMzksNyBAQCB0eXBlZGVmIGVudW0KIHR5cGVkZWYgc3RydWN0CiB7CiAJaW50MTYJCWNv bmRpdGlvbnM7Ci0JY2hhcjMyX3QJbWFwW05DYXNlS2luZF1bTUFYX0NBU0VfRVhQQU5TSU9OXTsK KwljaGFyMzJfdAltYXBbTkNhc2VLaW5kXVtVTklDT0RFX01BWF9DQVNFTUFQX0NPREVQT0lOVFNd OwogfSBwZ19zcGVjaWFsX2Nhc2U7CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9jb21t b24vdW5pY29kZV9saW1pdHMuaCBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2xpbWl0cy5o Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi41OWUzMDc4NTdlZAotLS0g L2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL2NvbW1vbi91bmljb2RlX2xpbWl0cy5oCkBAIC0w LDAgKzEsMzkgQEAKKy8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICoKKyAqIHVuaWNvZGVfbGltaXRzLmgK KyAqCSAgVXNlZnVsIGxpbWl0cyBjYWxjdWxhdGVkIGZyb20gVW5pY29kZSBkYXRhLgorICoKKyAq IFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0yMDI2LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZl bG9wbWVudCBHcm91cAorICogUG9ydGlvbnMgQ29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9m IHRoZSBVbml2ZXJzaXR5IG9mIENhbGlmb3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9jb21tb24v dW5pY29kZV9saW1pdHMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICovCisKKyNpZm5kZWYg VU5JQ09ERV9MSU1JVFNfSAorI2RlZmluZSBVTklDT0RFX0xJTUlUU19ICisKKy8qCisgKiBGaWxl IGF1dG8tZ2VuZXJhdGVkIGJ5IHNyYy9jb21tb24vdW5pY29kZS9nZW5lcmF0ZS11bmljb2RlX2Nh c2VfdGFibGUucGwsCisgKiBkbyBub3QgZWRpdC4KKyAqLworCisvKgorICogVGhlIG1heGltdW0g bnVtYmVyIG9mIGNvZGVwb2ludHMgdGhhdCBjYW4gcmVzdWx0IGZyb20gY2FzZSBtYXBwaW5nCisg KiBvZiBhIHNpbmdsZSBjb2RlIHBvaW50LiBTZWUgVW5pY29kZSBzZWN0aW9uIDUuMTggIkNhc2Ug TWFwcGluZ3MiLgorICovCisjZGVmaW5lIFVOSUNPREVfTUFYX0NBU0VNQVBfQ09ERVBPSU5UUyAz CisKKy8qCisgKiBUaGUgbWF4aW11bSBleHBhbnNpb24gZmFjdG9yIG9mIGEgVVRGOCBzdHJpbmcg ZHVlIHRvIGNhc2UgbWFwcGluZy4KKyAqLworI2RlZmluZSBVVEY4X01BWF9DQVNFTUFQX0VYUEFO U0lPTiAzCisKKy8qCisgKiBUaGUgbWF4aW11bSBudW1iZXIgb2YgVVRGOCBieXRlcyBuZWVkZWQg dG8gc3RvcmUgdGhlIHJlc3VsdCBvZiBjYXNlCisgKiBtYXBwaW5nIGEgc2luZ2xlIGNvZGUgcG9p bnQuCisgKi8KKyNkZWZpbmUgVVRGOF9DQVNFTUFQX0JVRlNaIDYKKworI2VuZGlmCi0tIAoyLjQz LjAKCg== --=-PK7PGP7A5B16ycSqJ1vo--