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 1waKDP-001hcs-1F for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Jun 2026 21:23:59 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1waKDO-00DcpA-0v for pgsql-hackers@arkaria.postgresql.org; Thu, 18 Jun 2026 21:23:58 +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 1waKDN-00Dcp1-1q for pgsql-hackers@lists.postgresql.org; Thu, 18 Jun 2026 21:23:58 +0000 Received: from mail-dl1-x1229.google.com ([2607:f8b0:4864:20::1229]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1waKDK-000000012J3-27w9 for pgsql-hackers@postgresql.org; Thu, 18 Jun 2026 21:23:56 +0000 Received: by mail-dl1-x1229.google.com with SMTP id a92af1059eb24-1384ebe7a10so2866124c88.1 for ; Thu, 18 Jun 2026 14:23:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1781817833; cv=none; d=google.com; s=arc-20240605; b=XmoLjBY7B2NLLQe78kYMcwxwaaUAVdXIOgh+jJIy5rJJBX/W+qvb/fnIluiezGgHZY //mcjUrNd+Axv/9Raed+8dH2qI4jfGNwo+udA1p9tWuwg7w3bfJyFzRXaC5o/WpNcaxI 23OTTmMFtDDZQh/SgQr/xwcsVCbGuMRzUhNaN8j5SCljCYHiLrRlL8kGfPcx1ZE0geUf s22J5NDTjppoU4R+5j5AamCYWKSxhkm0jYda1mNTBAM33JCNcUg8IfUFsHZI+GQxazLp z3NO4kJP90UFQ/w4yrvwivShIRHSobvyMhyU75BCUUlzbFmYUFdVMvyI8/lPrFEZYUke lgIg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20240605; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:dkim-signature; bh=jeqDui1+/8SZmDEQdTp5eX2CUa87VaUbHksRfpDes4A=; fh=06sXdn6GiiNb3ntZATTGVcCLbZJV3UQ/cMjWIt677No=; b=Cs0sBeCMSENHLKM1GsatbPSD+Up9CDiaZbfVoJSOCZ28YqKgWTGLebr4sahRfD/d8C xUg76OGLTKo0FTKmDzEWEmmArpWBTJT/5QSs+YRw+3rui2riCWMPRcME/K2Cjm0qTJdj q86Gg6KLfzO37sAx2jl+2NYMBaGJIe+FiOsMHr60U5HG4KUENwDH93JQ07MvlNRvA0gD gS0Bx3m8LKN/SxGvCr9iI3VYJRQ40uJ1HAyBESbF0ZqoFe/dXq8fzTNXNGcuTfXXdwea 8YbDiDm+131YFiNXU6nZFJGHy1Nl9UVgF5rMr5wQr3zQjo9UUAltZ2bnbP0P1G9Meb6n SDGw==; darn=postgresql.org ARC-Authentication-Results: i=1; mx.google.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1781817833; x=1782422633; darn=postgresql.org; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=jeqDui1+/8SZmDEQdTp5eX2CUa87VaUbHksRfpDes4A=; b=rOvux3W/Lnk5PRvefPsN8eKbXjgxE+2M0mtJcmfAqhyqamOGyC7ei9s/AjbHSjkfBq 0koIweOcEt9fZhVsnCHaPml/Mkm4Ow2pwFw7V/vVk0aQccGettmbuTak1Z3TGnnrotYh PpZFa0kfdHonbOGdSv3khApzN5t3vLP1OZWYInZiCKc3hBR+FtdptV8JgWUILJVhZQce gVd6oyBTOQFYnPUnvylA0yjCyc9O36UCL5yG3kTP5Zt6pFgs5LHMJ5mMBaFaERwiO4ft DBPqkD0pD5VRc/IabKpKTJRHdsv8gkg1oNLjxy7QSxYmTV1pLcALndd+o4sFygBOuXH4 Ejwg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781817833; x=1782422633; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=jeqDui1+/8SZmDEQdTp5eX2CUa87VaUbHksRfpDes4A=; b=CjL+DzCB6TaZWYL7SLFabK1+4FnGjBuTTEGuzfBNgbdkQLdJUGWPCMXb/c9KfjQdEX qgpInA/wUxZTmphGVQ1OrNrYjL5F6ajgpfU4ZOkV2ZnqapmobMzt+R9HIBl1my5pvgVt OxH/ZoaxPK6yDB7tSF/Be2fPvnLLLNPy69eZQBEYNwc+7z0LPVmeznlWF79bVU4t4Fio 8R8KNfZVOSNEuEbhjD49CPrUL7qXEugvPvPkzfSWEedb4XEy+7NKVWxeZfy8Cw1F+LJN yJQ/+hGWcPcFHhWYf897gwHmq4L+g1oA/hU0pUm9YV7m0twIvPEvC69+gLoPnZmFgYqs rX4A== X-Forwarded-Encrypted: i=1; AFNElJ8tToybeAw5PtDLYynIO0HkEYBhGdwc4SX6o2pwcG9g21JuYa2pNbAX3t4Z9NAGC48LmUDA8CbovUSLg82l@postgresql.org X-Gm-Message-State: AOJu0YyhtP/rvH5w36idqUO/LxegvH4qqcuoAIfO0DtgBDo0VyQqMc57 wTfp740rluiIY7zxzumeBt/qry8xqb0JA+BZnQ0xD4nQItXEV/+gu7cRH94rWwhgSP93kYeQVmy Zp6A5MaClqs2JX7TwsrkmjItLcktYIcU= X-Gm-Gg: AfdE7cmAYaimb+E5g2lQU+3EVzmCLIbpHj/jYekD39sWIeJctM1Hlru9YikT8L8Fulq Z7z/M3muajRpMHe2RB8hfzvI/3/EPZCfLDJqlUXCFgy9neKUF1LEhXfxOdeB10Li4m96Ir0M90j FE/MCGx8yRwEczpTYTs3TMKPVazM+EHoj8PlY8WjKRNxTfcmfDGKRRpFwkJkvb5TaYAhHFQYo8t Rsud9VSfDa8kVH4/573RNbl5CyRIfaYSu6ioHf9W+IPkXvDB0q7jf5xVJ2oKBiBnmHqTIFUV6Iq 9eAoD985t/D9IVip3jPmXFkuW82A17zAwjXyNDVu5WkcAZ15ouu5LR9MH2TAJ7bMA0aujIadKGs 53r4ABNGmRv+r/w== X-Received: by 2002:a05:7022:6b94:b0:137:fec9:8ffb with SMTP id a92af1059eb24-139a21a1d0amr1084514c88.25.1781817832812; Thu, 18 Jun 2026 14:23:52 -0700 (PDT) MIME-Version: 1.0 References: In-Reply-To: From: Corey Huinker Date: Thu, 18 Jun 2026 17:23:40 -0400 X-Gm-Features: AVVi8CdrlBBNCsFB-BR492eboyGb-Ec6UMGmhXsqBiQQSgbpIJFiEdZjfQAx9dE Message-ID: Subject: Re: use of SPI by postgresImportForeignStatistics To: Etsuro Fujita Cc: Robert Haas , "pgsql-hackers@postgresql.org" Content-Type: multipart/mixed; boundary="000000000000fb325206548dca0e" List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --000000000000fb325206548dca0e Content-Type: multipart/alternative; boundary="000000000000fb325106548dca0c" --000000000000fb325106548dca0c Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable On Thu, Jun 18, 2026 at 6:43=E2=80=AFAM Etsuro Fujita wrote: > On Thu, Jun 18, 2026 at 1:00=E2=80=AFAM Corey Huinker > wrote: > > >> IMO I don't think we need to go that far, because 1) the new functions > >> are provided for FDW authors only, and 2) we don't make changes to the > >> stats that often. > > > > > > That would be simpler, to be sure. However, in the past I've received > pushback on functions that had a large number of parameters, and this wou= ld > definitely be a large number of parameters, approximately 17, so I though= t > I should at least offer the variadic way. > > > > I'm proceeding with the many-parameters model. > > I think that that's acceptable, considering that > heap_create_with_catalog() has 21 parameters. > > Thanks! > > Best regards, > Etsuro Fujita > Attached are two patches to remove SPI from the postgres_fdw.c, replaced by local C functions. The division into two patches is entirely for readability. Separately, each one represents a half-measure that would benefit no one. The first does the minimal changes needed to get the relation-stats to stop using SPI, and the second does the same for attribute stats, removes all vestiges of SPI from postgres_fdw.c, and adds some tests to make sure that a foreign table has the exact stats of the source loopback table. The function import_attribute_stats() is a bit parameter-happy, but that's mostly necessary. I left the non-key parameters as all type char* because that avoids even more "bool foo_isnull" parameters, and that allows the caller to not have to rework the various stat types into their corresponding C types (float, int4, float[], and the anyarrays that basically aren't cast-able by any client program anyway). I'm open to requiring the caller to use the right datatypes for some of the parameters, but as I said there is no way to "win" with the anyarrays, and even the pg_restore_attribute_stats() function falls back to type text for those. To be clear, this solves the SPI problem, but questions about the design of attribute_statistics_update() and relation_statistics_update() remain, but those concerns are now isolated within their respective files attribute_stats.c and relation_stats.c. The inefficiencies therein aren't really in a critical path, so if we wanted to leave them be until v20 they could, but if time allows I'd at least like try unwinding some of that. But first, let's get SPI out of postgres_fdw.c. --000000000000fb325106548dca0c Content-Type: text/html; charset="UTF-8" Content-Transfer-Encoding: quoted-printable
On Thu, Jun 18, 2026 at 6:43=E2=80=AFAM Etsur= o Fujita <etsuro.fujita@gmail= .com> wrote:
On Thu, Jun 18, 2026 at 1:00=E2=80=AFAM Corey Huinker <corey.huinker@gmail.com= > wrote:

>> IMO I don't think we need to go that far, because 1) the new f= unctions
>> are provided for FDW authors only, and 2) we don't make change= s to the
>> stats that often.
>
>
> That would be simpler, to be sure. However, in the past I've recei= ved pushback on functions that had a large number of parameters, and this w= ould definitely be a large number of parameters, approximately 17, so I tho= ught I should at least offer the variadic way.
>
> I'm proceeding with the many-parameters model.

I think that that's acceptable, considering that
heap_create_with_catalog() has 21 parameters.

Thanks!

Best regards,
Etsuro Fujita

Attached are t= wo patches to remove SPI from the postgres_fdw.c, replaced by local C funct= ions.=C2=A0=C2=A0The division into two patches is entirely for readability.= Separately,=20 each one represents a half-measure that would benefit no one.=C2=A0The firs= t does the minimal changes needed to get the relation-stats to stop using S= PI, and the second does the same for attribute stats, removes all vestiges = of SPI from postgres_fdw.c, and adds some tests=C2=A0to make sure that a fo= reign table has the exact stats of the source loopback table.
The function import_attribute_stats() is a bit parameter-happy,= but that's mostly necessary. I left the non-key parameters as all type= char* because that avoids even more "bool foo_isnull" parameters= , and that allows the caller to not have to rework the various stat types i= nto their corresponding C types (float, int4, float[], and the anyarrays th= at basically aren't cast-able by any client program anyway). I'm op= en to requiring the caller to use the right datatypes for some of the param= eters, but as I said there is no way to "win" with the anyarrays,= and even the pg_restore_attribute_stats() function falls back to type text= for those.

To be clear, this solves the SPI problem, bu= t questions about the design of attribute_statistics_update() and relation_= statistics_update() remain, but those concerns are now isolated within thei= r respective files attribute_stats.c and relation_stats.c. The inefficienci= es therein aren't really in a critical path, so if we wanted to leave t= hem be until v20 they could, but if time allows I'd at least like try u= nwinding some of that. But first, let's get SPI out of postgres_fdw.c.<= /div>
=C2=A0
--000000000000fb325106548dca0c-- --000000000000fb325206548dca0e Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0001-Remove-SPI-in-favor-of-import_relation_statistics.patch" Content-Disposition: attachment; filename="v1-0001-Remove-SPI-in-favor-of-import_relation_statistics.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqjz43i60 RnJvbSBjNmNmZDExZWQ0NjAyMDRjYjk2YzVjMzVjN2NjNTEzYWYxNGFhYTg0IE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogV2VkLCAxNyBKdW4gMjAyNiAxNjowNDo1NSAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djEgMS8yXSBSZW1vdmUgU1BJIGluIGZhdm9yIG9mIGltcG9ydF9yZWxhdGlvbl9zdGF0aXN0aWNz LgoKVGhpcyBwYXRjaCByZW1vdmVzIHRoZSBTUEkgY2FsbHMgaW4gcG9zdGdyZXNfZmR3LmMgdGhh dCB3ZXJlIHJlbGF0ZWQgdG8KcmVsYXRpb24gc3RhdGlzdGljcy4gSW5zdGVhZCwgdGhlIGZ1bmN0 aW9uIGltcG9ydF9yZWxhdGlvbl9zdGF0aXRpY3NzKCkKaGFzIGJlZW4gY3JlYXRlZCBzcGVjaWZp Y2FsbHkgZm9yIHRoaXMgcHVycG9zZS4KClRoZSBtYWluIHB1cnBvc2Ugb2YgdGhpcyBwYXRjaCBp cyB0byBtYWtlIGEgc2ltcGxlIEFQSSB0aGF0IGlzIHVzYWJsZSBieQphbnkgZm9yZWlnbiBkYXRh IHdyYXBwZXIsIGJ1dCBpcyBub3QgbGltaXRlZCB0byB1c2FnZSBieSBmb3JlaWduIGRhdGEKd3Jh cHBlcnMuCgpQcmVzZW50bHkgdGhlIGZ1bmN0aW9uIG1hcnNoYWxscyB0aGUgcGFyYXRtZXRlcnMg dG8gbWFrZSBhIGNhbGwgdG8KcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUoKS4gVGhpcyBpcyBu b3QgYW4gaWRlYWwgZW5kLXN0YXRlLCBhcyB0aGlzCmNyZWF0ZXMgdW4tbmVjZXNzYXJ5IHZhbHVl IHRyYW5zbGF0aW9ucy4gVGhlIHNvbHV0aW9uIGlzIHJlZmFjdG9yCnJlbGF0aW9uX3N0YXRpc3Rp Y3NfdXBkYXRlKCkgdG8gYmUgYSBtb3JlIGNvbnZlbnRpb25hbCwgbm9uLWZjaW5mby1zdHlsZQpm dW5jdGlvbiwgYW5kIHJlZmFjdG9yIHBnX3Jlc3RvcmVfcmVsYXRpb25fc3RhdHMoKSBhbmQKcGdf Y2xlYXJfcmVsYXRpb25fc3RhdHMoKSB0byBhY2NvbW1vZGF0ZSB0aGF0LiBUaGlzIHBhdGNoIHJl bW92ZXMgdGhlCmRpZmZpY3VsdGllcyB0aGF0IFNQSSBwcmVzZW50cyBmcm9tIHBvc3RncmVzX2Zk dy5jIGFuZCBsb2NhbGl6ZXMgdGhlCmNvZGUgcmVkdW5kYW5jeSB0byByZWxhdGlvbl9zdGF0cy5j LgotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaCB8IDIyICsrKysr Kwogc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIHwgOTYgKysrKysrKysr KysrKysrKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgICAg IHwgNjIgKysrKy0tLS0tLS0tLS0tLQogMyBmaWxlcyBjaGFuZ2VkLCAxMzMgaW5zZXJ0aW9ucygr KSwgNDcgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvc3RhdGlz dGljcy9yZWxhdGlvbl9zdGF0cy5oCgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvc3RhdGlzdGlj cy9yZWxhdGlvbl9zdGF0cy5oIGIvc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0 cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mNjhhMWE3NTVhMQot LS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMu aApAQCAtMCwwICsxLDIyIEBACisvKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAqCisgKiByZWxhdGlvbl9z dGF0cy5oCisgKiAgICBGdW5jdGlvbnMgZm9yIHRoZSBpbnRlcm5hbCBtYW5pcHVsYXRpb24gb2Yg cmVsYXRpb24gc3RhdGlzdGljcy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYt MjAyNiwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENv cHlyaWdodCAoYykgMTk5NCwgUmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlh CisgKgorICogc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oCisgKgorICot LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tCisgKi8KKyNpZm5kZWYgUkVMQVRJT05fU1RBVFNfSAorCisjaW5jbHVk ZSAiYWNjZXNzL2dlbmFtLmgiCisKK2Jvb2wgaW1wb3J0X3JlbGF0aW9uX3N0YXRpc3RpY3MoUmVs YXRpb24gcmVsLCBjb25zdCBjaGFyICpyZWxwYWdlcywKKwkJCQkJCQkJY29uc3QgY2hhciAqcmVs dHVwbGVzLCBjb25zdCBjaGFyICpyZWxhbGx2aXNpYmxlLAorCQkJCQkJCQljb25zdCBjaGFyICpy ZWxhbGxmcm96ZW4pOworCisjZGVmaW5lIFJFTEFUSU9OX1NUQVRTX0gKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jIGIvc3JjL2JhY2tl bmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5jCmluZGV4IGQ2NjMxZTlhOWE0Li45YzMwOGVl NTBlNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5j CisrKyBiL3NyYy9iYWNrZW5kL3N0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuYwpAQCAtMjIsNyAr MjIsOSBAQAogI2luY2x1ZGUgImNhdGFsb2cvbmFtZXNwYWNlLmgiCiAjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAic3RhdGlzdGljcy9zdGF0X3V0aWxzLmgiCisjaW5jbHVk ZSAic3RhdGlzdGljcy9yZWxhdGlvbl9zdGF0cy5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5z LmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9mbWdyb2lkcy5o IgogI2luY2x1ZGUgInV0aWxzL2ZtZ3Jwcm90b3MuaCIKICNpbmNsdWRlICJ1dGlscy9sc3lzY2Fj aGUuaCIKQEAgLTI0MSwzICsyNDMsOTcgQEAgcGdfcmVzdG9yZV9yZWxhdGlvbl9zdGF0cyhQR19G VU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KKworLyoKKyAqIENv bnZlbmllbmNlIHJvdXRpbmUgdG8gcGFyc2UgQmxvY2tOdW1iZXIgdmFsdWVzLCBhbmQgZW1pdCBh IHdhcm5pbmcKKyAqIG9uIHBhcnNlIGVycm9ycy4KKyAqCisgKiBSZXR1cm5zIDAgaWYgdGhlIHZh bHVlIGlzIE5VTEwgb3IgaW52YWxpZC4KKyAqLworc3RhdGljIEJsb2NrTnVtYmVyCitzdHJfdG9f YmxvY2tudW1iZXIoY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBCbG9ja051bWJlciBkZWZhdWx0 X3ZhbHVlID0gMDsKKworCUJsb2NrTnVtYmVyIHJlc3VsdDsKKwlFcnJvclNhdmVDb250ZXh0IGVz Y29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJaWYgKCFzKQorCQlyZXR1cm4gZGVm YXVsdF92YWx1ZTsKKworCXJlc3VsdCA9IHVpbnQzMmluX3N1YnIocywgTlVMTCwgIkJsb2NrTnVt YmVyIiwgKE5vZGUgKikgJmVzY29udGV4dCk7CisKKwlpZiAoZXNjb250ZXh0LmVycm9yX29jY3Vy cmVkKQorCXsKKwkJZXNjb250ZXh0LmVycm9yX2RhdGEtPmVsZXZlbCA9IFdBUk5JTkc7CisJCVRo cm93RXJyb3JEYXRhKGVzY29udGV4dC5lcnJvcl9kYXRhKTsKKwkJRnJlZUVycm9yRGF0YShlc2Nv bnRleHQuZXJyb3JfZGF0YSk7CisKKwkJcmV0dXJuIGRlZmF1bHRfdmFsdWU7CisJfQorCisJcmV0 dXJuIHJlc3VsdDsKK30KKworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgdG8gcGFyc2UgZmxv YXQgdmFsdWVzLCBhbmQgZW1pdCBhIHdhcm5pbmcgb24gcGFyc2UKKyAqIGVycm9ycy4KKyAqCisg KiBSZXR1cm5zIC0xLjAgaWYgdGhlIHZhbHVlIGlzIE5VTEwgb3IgaW52YWxpZC4KKyAqLworc3Rh dGljIGZsb2F0CitzdHJfdG9fZmxvYXQoY29uc3QgY2hhciAqcykKK3sKKwljb25zdCBmbG9hdCBk ZWZhdWx0X3ZhbHVlID0gLTEuMDsKKworCWZsb2F0CQlyZXN1bHQ7CisKKwlFcnJvclNhdmVDb250 ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJaWYgKCFzKQorCQlyZXR1 cm4gZGVmYXVsdF92YWx1ZTsKKworCXJlc3VsdCA9IGZsb2F0NGluX2ludGVybmFsKChjaGFyICop IHMsIE5VTEwsICJmbG9hdCIsIHMsIChOb2RlICopICZlc2NvbnRleHQpOworCisJaWYgKGVzY29u dGV4dC5lcnJvcl9vY2N1cnJlZCkKKwl7CisJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwg PSBXQVJOSU5HOworCQlUaHJvd0Vycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCUZy ZWVFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQlyZXR1cm4gZGVmYXVsdF92YWx1 ZTsKKwl9CisKKwlyZXR1cm4gcmVzdWx0OworfQorCisvKgorICogSW1wb3J0IHJlbGF0aW9uIHN0 YXRpc3RpY3MgZnJvbSByZWd1bGFyIHN0cmluZyBpbnB1dHMuCisgKi8KK2Jvb2wKK2ltcG9ydF9y ZWxhdGlvbl9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqcmVscGFnZXMsCisJ CQkJCQkgICBjb25zdCBjaGFyICpyZWx0dXBsZXMsIGNvbnN0IGNoYXIgKnJlbGFsbHZpc2libGUs CisJCQkJCQkgICBjb25zdCBjaGFyICpyZWxhbGxmcm96ZW4pCit7CisJTE9DQUxfRkNJTkZPKG5l d2ZjaW5mbywgTlVNX1JFTEFUSU9OX1NUQVRTX0FSR1MpOworCisJSW5pdEZ1bmN0aW9uQ2FsbElu Zm9EYXRhKCpuZXdmY2luZm8sIE5VTEwsIE5VTV9SRUxBVElPTl9TVEFUU19BUkdTLCBJbnZhbGlk T2lkLCBOVUxMLCBOVUxMKTsKKworCS8qCisJICogQ29udmVydCBhbGwgc3RyaW5nIGlucHV0cyB0 byB0aGVpciByZXF1aXJlZCBkYXRhdHlwZXMuIE5VTEwgdmFsdWVzIGFyZQorCSAqIGxlZnQgYXMg dGhlIGRlZmF1bHQuCisJICovCisJbmV3ZmNpbmZvLT5hcmdzW1JFTFNDSEVNQV9BUkddLnZhbHVl ID0gQ1N0cmluZ0dldFRleHREYXR1bShnZXRfbmFtZXNwYWNlX25hbWUoUmVsYXRpb25HZXROYW1l c3BhY2UocmVsKSkpOworCW5ld2ZjaW5mby0+YXJnc1tSRUxTQ0hFTUFfQVJHXS5pc251bGwgPSBm YWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMTkFNRV9BUkddLnZhbHVlID0gQ1N0cmluZ0dldFRl eHREYXR1bShSZWxhdGlvbkdldFJlbGF0aW9uTmFtZShyZWwpKTsKKwluZXdmY2luZm8tPmFyZ3Nb UkVMTkFNRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCW5ld2ZjaW5mby0+YXJnc1tSRUxQQUdFU19B UkddLnZhbHVlID0gVUludDMyR2V0RGF0dW0oc3RyX3RvX2Jsb2NrbnVtYmVyKHJlbHBhZ2VzKSk7 CisJbmV3ZmNpbmZvLT5hcmdzW1JFTFBBR0VTX0FSR10uaXNudWxsID0gZmFsc2U7CisJbmV3ZmNp bmZvLT5hcmdzW1JFTFRVUExFU19BUkddLnZhbHVlID0gRmxvYXQ0R2V0RGF0dW0oc3RyX3RvX2Zs b2F0KHJlbHR1cGxlcykpOworCW5ld2ZjaW5mby0+YXJnc1tSRUxUVVBMRVNfQVJHXS5pc251bGwg PSBmYWxzZTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLnZhbHVlID0gVUlu dDMyR2V0RGF0dW0oc3RyX3RvX2Jsb2NrbnVtYmVyKHJlbGFsbHZpc2libGUpKTsKKwluZXdmY2lu Zm8tPmFyZ3NbUkVMQUxMVklTSUJMRV9BUkddLmlzbnVsbCA9IGZhbHNlOworCW5ld2ZjaW5mby0+ YXJnc1tSRUxBTExGUk9aRU5fQVJHXS52YWx1ZSA9IFVJbnQzMkdldERhdHVtKHN0cl90b19ibG9j a251bWJlcihyZWxhbGxmcm96ZW4pKTsKKwluZXdmY2luZm8tPmFyZ3NbUkVMQUxMRlJPWkVOX0FS R10uaXNudWxsID0gZmFsc2U7CisKKwlyZXR1cm4gcmVsYXRpb25fc3RhdGlzdGljc191cGRhdGUo bmV3ZmNpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVz X2Zkdy5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMKaW5kZXggNmRiYWU1 ODNlY2MuLjY3M2Q1NjExN2I4IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0 Z3Jlc19mZHcuYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwpAQCAt NDMsNiArNDMsNyBAQAogI2luY2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKICNpbmNsdWRlICJw b3N0Z3Jlc19mZHcuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKKyNpbmNs dWRlICJzdGF0aXN0aWNzL3JlbGF0aW9uX3N0YXRzLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9sYXRj aC5oIgogI2luY2x1ZGUgInV0aWxzL2J1aWx0aW5zLmgiCiAjaW5jbHVkZSAidXRpbHMvZmxvYXQu aCIKQEAgLTM2NywzMyArMzY4LDYgQEAgZW51bSBBdHRTdGF0c0NvbHVtbnMKIAlBVFRTVEFUU19O VU1fRklFTERTLAogfTsKIAotLyogUmVsYXRpb24gc3RhdHMgaW1wb3J0IHF1ZXJ5ICovCi1zdGF0 aWMgY29uc3QgY2hhciAqcmVsaW1wb3J0X3NxbCA9Ci0iU0VMRUNUIHBnX2NhdGFsb2cucGdfcmVz dG9yZV9yZWxhdGlvbl9zdGF0cyhcbiIKLSJcdCd2ZXJzaW9uJywgJDEsXG4iCi0iXHQnc2NoZW1h bmFtZScsICQyLFxuIgotIlx0J3JlbG5hbWUnLCAkMyxcbiIKLSJcdCdyZWxwYWdlcycsICQ0Ojpp bnRlZ2VyLFxuIgotIlx0J3JlbHR1cGxlcycsICQ1OjpyZWFsKSI7Ci0KLS8qIEFyZ3VtZW50IG9y ZGVyIGluIHJlbGF0aW9uIHN0YXRzIGltcG9ydCBxdWVyeSAqLwotZW51bSBSZWxJbXBvcnRTcWxB cmdzCi17Ci0JUkVMSU1QT1JUX1NRTF9WRVJTSU9OID0gMCwKLQlSRUxJTVBPUlRfU1FMX1NDSEVN QU5BTUUsCi0JUkVMSU1QT1JUX1NRTF9SRUxOQU1FLAotCVJFTElNUE9SVF9TUUxfUkVMUEFHRVMs Ci0JUkVMSU1QT1JUX1NRTF9SRUxUVVBMRVMsCi0JUkVMSU1QT1JUX1NRTF9OVU1fRklFTERTCi19 OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiByZWxhdGlvbiBzdGF0cyBpbXBvcnQgcXVlcnkgKi8K LXN0YXRpYyBjb25zdCBPaWQgcmVsaW1wb3J0X2FyZ3R5cGVzW1JFTElNUE9SVF9TUUxfTlVNX0ZJ RUxEU10gPQotewotCUlOVDRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsCi0JVEVYVE9J RCwKLX07Ci0KIC8qIEF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KIHN0YXRpYyBjb25z dCBjaGFyICphdHRpbXBvcnRfc3FsID0KICJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2F0 dHJpYnV0ZV9zdGF0cyhcbiIKQEAgLTcxNCw3ICs2ODgsOCBAQCBzdGF0aWMgYm9vbCBtYXRjaF9h dHRybWFwKFBHcmVzdWx0ICpyZXMsCiAJCQkJCQkgIGNvbnN0IGNoYXIgKnJlbW90ZV9yZWxuYW1l LAogCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCSAgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAq cmVtYXR0cm1hcCk7Ci1zdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0 IGNoYXIgKnNjaGVtYW5hbWUsCitzdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNz KFJlbGF0aW9uIHJlbCwKKwkJCQkJCQkJCSAgY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkJCQkJ CQkJCSAgY29uc3QgY2hhciAqcmVsbmFtZSwKIAkJCQkJCQkJCSAgaW50IGF0dHJjbnQsCiAJCQkJ CQkJCQkgIGNvbnN0IFJlbW90ZUF0dHJpYnV0ZU1hcHBpbmcgKnJlbWF0dHJtYXAsCkBAIC01NjYx LDcgKzU2MzYsNyBAQCBwb3N0Z3Jlc0ltcG9ydEZvcmVpZ25TdGF0aXN0aWNzKFJlbGF0aW9uIHJl bGF0aW9uLCBMaXN0ICp2YV9jb2xzLCBpbnQgZWxldmVsKQogCQkJCQkJCQkgJmF0dHJjbnQsICZy ZW1hdHRybWFwLCAmcmVtc3RhdHMpOwogCiAJaWYgKG9rKQotCQlvayA9IGltcG9ydF9mZXRjaGVk X3N0YXRpc3RpY3Moc2NoZW1hbmFtZSwgcmVsbmFtZSwKKwkJb2sgPSBpbXBvcnRfZmV0Y2hlZF9z dGF0aXN0aWNzKHJlbGF0aW9uLCBzY2hlbWFuYW1lLCByZWxuYW1lLAogCQkJCQkJCQkJICAgYXR0 cmNudCwgcmVtYXR0cm1hcCwgJnJlbXN0YXRzKTsKIAogCWlmIChvaykKQEAgLTYxMjgsNyArNjEw Myw4IEBAIG1hdGNoX2F0dHJtYXAoUEdyZXN1bHQgKnJlcywKICAqIEltcG9ydCBmZXRjaGVkIHN0 YXRpc3RpY3MgaW50byB0aGUgbG9jYWwgc3RhdGlzdGljcyB0YWJsZXMuCiAgKi8KIHN0YXRpYyBi b29sCi1pbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKGNvbnN0IGNoYXIgKnNjaGVtYW5hbWUsCitp bXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLAorCQkJCQkJICBjb25z dCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJICBjb25zdCBjaGFyICpyZWxuYW1lLAogCQkJCQkJ ICBpbnQgYXR0cmNudCwKIAkJCQkJCSAgY29uc3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVt YXR0cm1hcCwKQEAgLTYxNDEsNiArNjExNyw5IEBAIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Mo Y29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAlpbnQJCQlzcGlyYzsKIAlib29sCQlvayA9IGZhbHNl OwogCisJY2hhcgkgICAqcmVscGFnZXMgPSBOVUxMOworCWNoYXIJICAgKnJlbHR1cGxlcyA9IE5V TEw7CisKIAkvKiBBc3NpZ24gYWxsIHRoZSBpbnZhcmlhbnQgcGFyYW1ldGVycyBjb21tb24gdG8g cmVsYXRpb24vYXR0cmlidXRlIHN0YXRzICovCiAJdmFsdWVzW0FUVElNUE9SVF9TUUxfVkVSU0lP Tl0gPSBJbnQzMkdldERhdHVtKHJlbXN0YXRzLT5zZXJ2ZXJfdmVyc2lvbl9udW0pOwogCW51bGxz W0FUVElNUE9SVF9TUUxfVkVSU0lPTl0gPSAnICc7CkBAIC02MjMzLDI3ICs2MjEyLDE2IEBAIGlt cG9ydF9mZXRjaGVkX3N0YXRpc3RpY3MoY29uc3QgY2hhciAqc2NoZW1hbmFtZSwKIAkvKgogCSAq IEltcG9ydCByZWxhdGlvbiBzdGF0cy4gIFdlIG9ubHkgcGVyZm9ybSB0aGlzIG9uY2UsIHNvIHRo ZXJlIGlzIG5vIHBvaW50CiAJICogaW4gcHJlcGFyaW5nIHRoZSBzdGF0ZW1lbnQuCi0JICoKLQkg KiBXZSBjYW4gcmUtdXNlIHRoZSB2YWx1ZXMvbnVsbHMgYmVjYXVzZSB0aGUgbnVtYmVyIG9mIHBh cmFtZXRlcnMgaXMgbGVzcwotCSAqIGFuZCB0aGUgZmlyc3QgdGhyZWUgcGFyYW1zIGFyZSB0aGUg c2FtZSBhcyBhdHRpbXBvcnRfc3FsLgogCSAqLwogCUFzc2VydChyZW1zdGF0cy0+cmVsICE9IE5V TEwpOwotCUFzc2VydChQUW5maWVsZHMocmVtc3RhdHMtPnJlbCkgPT0gUkVMU1RBVFNfTlVNX0ZJ RUxEUyk7Ci0JQXNzZXJ0KFBRbnR1cGxlcyhyZW1zdGF0cy0+cmVsKSA9PSAxKTsKLQltYXBfZmll bGRfdG9fYXJnKHJlbXN0YXRzLT5yZWwsIDAsIFJFTFNUQVRTX1JFTFBBR0VTLAotCQkJCQkgUkVM SU1QT1JUX1NRTF9SRUxQQUdFUywgdmFsdWVzLCBudWxscyk7Ci0JbWFwX2ZpZWxkX3RvX2FyZyhy ZW1zdGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxUVVBMRVMsCi0JCQkJCSBSRUxJTVBPUlRfU1FM X1JFTFRVUExFUywgdmFsdWVzLCBudWxscyk7CisJaWYgKCFQUWdldGlzbnVsbChyZW1zdGF0cy0+ cmVsLCAwLCBSRUxTVEFUU19SRUxQQUdFUykpCisJCXJlbHBhZ2VzID0gUFFnZXR2YWx1ZShyZW1z dGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxQQUdFUyk7CiAKLQlzcGlyYyA9IFNQSV9leGVjdXRl X3dpdGhfYXJncyhyZWxpbXBvcnRfc3FsLAotCQkJCQkJCQkgIFJFTElNUE9SVF9TUUxfTlVNX0ZJ RUxEUywKLQkJCQkJCQkJICAoT2lkICopIHJlbGltcG9ydF9hcmd0eXBlcywKLQkJCQkJCQkJICB2 YWx1ZXMsIG51bGxzLCBmYWxzZSwgMSk7Ci0JaWYgKHNwaXJjICE9IFNQSV9PS19TRUxFQ1QpCi0J CWVsb2coRVJST1IsICJmYWlsZWQgdG8gZXhlY3V0ZSByZWxpbXBvcnRfc3FsIHF1ZXJ5IGZvciBm b3JlaWduIHRhYmxlIFwiJXMuJXNcIiIsCi0JCQkgc2NoZW1hbmFtZSwgcmVsbmFtZSk7CisJaWYg KCFQUWdldGlzbnVsbChyZW1zdGF0cy0+cmVsLCAwLCBSRUxTVEFUU19SRUxUVVBMRVMpKQorCQly ZWx0dXBsZXMgPSBQUWdldHZhbHVlKHJlbXN0YXRzLT5yZWwsIDAsIFJFTFNUQVRTX1JFTFRVUExF Uyk7CiAKLQlpZiAoIWltcG9ydF9zcGlfcXVlcnlfb2soKSkKKwlpZiAoIWltcG9ydF9yZWxhdGlv bl9zdGF0aXN0aWNzKHJlbGF0aW9uLCByZWxwYWdlcywgcmVsdHVwbGVzLAorCQkJCQkJCQkJTlVM TCwgTlVMTCkpCiAJewogCQllcmVwb3J0KFdBUk5JTkcsCiAJCQkJZXJybXNnKCJjb3VsZCBub3Qg aW1wb3J0IHN0YXRpc3RpY3MgZm9yIGZvcmVpZ24gdGFibGUgXCIlcy4lc1wiIC0tLSByZWxhdGlv biBzdGF0aXN0aWNzIGltcG9ydCBmYWlsZWQgZm9yIHRoaXMgZm9yZWlnbiB0YWJsZSIsCgpiYXNl LWNvbW1pdDogZjA0NzgxZGY1ZGFmMTEyODQwZDA4ZWFiMzlmYjk1NTA1ZmRhNmM5YwotLSAKMi41 NC4wCgo= --000000000000fb325206548dca0e Content-Type: text/x-patch; charset="US-ASCII"; name="v1-0002-Remove-SPI-in-favor-of-import_attribute_statistic.patch" Content-Disposition: attachment; filename="v1-0002-Remove-SPI-in-favor-of-import_attribute_statistic.patch" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_mqjz43il1 RnJvbSAzYjljZmJiYmNkYTM2YWUyZjQ0NDRiNWVlZmU3YThmMjk2MTMzM2YwIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBDb3JleSBIdWlua2VyIDxjb3JleS5odWlua2VyQGdtYWlsLmNv bT4KRGF0ZTogVGh1LCAxOCBKdW4gMjAyNiAxNjoyODoxMCAtMDQwMApTdWJqZWN0OiBbUEFUQ0gg djEgMi8yXSBSZW1vdmUgU1BJIGluIGZhdm9yIG9mIGltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGlj cy4KClRoaXMgcGF0Y2ggcmVtb3ZlcyB0aGUgU1BJIGNhbGxzIGluIHBvc3RncmVzX2Zkdy5jIHRo YXQgd2VyZSByZWxhdGVkIHRvCmF0dHJpYnV0ZSBzdGF0aXN0aWNzLiBJbnN0ZWFkLCB0aGUgZnVu Y3Rpb25zIGltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcygpCmFuZCBjbGVhcl9hdHRyaWJ1dGVf c3RhdGlzdGljcygpIGhhdmUgYmVlbiBjcmVhdGVkIGZvciB0aGlzIHB1cnBvc2UuCgpMaWtlIHRo ZSBwcmVjZWRpbmcgcGF0Y2gsIHRoZSBnb2FsIGlzIHRvIHJlbW92ZSBTUEkgZnJvbSB0aGUgd29y a2Zsb3cKYW5kIGlzb2xhdGUgYWxsIGNvZGUgcmVkdW5kYW5jeSBpbiBhdHRyaWJ1dGVfc3RhdHMu Yywgd2hlcmUgaXQgY2FuIGJlCmhhbmRsZWQgYXQgYSBsYXRlciB0aW1lLgoKU29tZSBhZGRpdGlv bmFsIGNoZWNrcyB3ZXJlIGFkZGVkIHRvIHRoZSByZWdyZXNzaW9uIHRlc3RzIHRvIGVuc3VyZSB0 aGF0CnZhbHVlcyBhcmUgcHJvcGVybHkgY29udmV5ZWQgZnJvbSBhIGxvb3BiYWNrLWZvcmVpZ24g dGFibGUgdG8gdGhlIGxvY2FsCnRhYmxlLgotLS0KIHNyYy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0 cmlidXRlX3N0YXRzLmggICAgICB8ICAzNiArKysKIHNyYy9iYWNrZW5kL3N0YXRpc3RpY3MvYXR0 cmlidXRlX3N0YXRzLmMgICAgICB8IDE5MiArKysrKysrKysrKysrCiAuLi4vcG9zdGdyZXNfZmR3 L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgICAgfCAgNDEgKysrCiBjb250cmliL3Bvc3RncmVz X2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAyNTggKysrLS0tLS0tLS0tLS0tLS0tCiBj b250cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCAgICAgfCAgMzIgKysrCiA1 IGZpbGVzIGNoYW5nZWQsIDMzOSBpbnNlcnRpb25zKCspLCAyMjAgZGVsZXRpb25zKC0pCiBjcmVh dGUgbW9kZSAxMDA2NDQgc3JjL2luY2x1ZGUvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaAoK ZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmggYi9z cmMvaW5jbHVkZS9zdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi40ZWJkZTBjN2MzYgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9pbmNsdWRlL3N0YXRpc3RpY3MvYXR0cmlidXRlX3N0YXRzLmgKQEAgLTAsMCArMSwzNiBAQAor LyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tCisgKgorICogYXR0cmlidXRlX3N0YXRzLmgKKyAqICAgIEZ1bmN0 aW9ucyBmb3IgdGhlIGludGVybmFsIG1hbmlwdWxhdGlvbiBvZiBhdHRyaWJ1dGUgc3RhdGlzdGlj cy4KKyAqCisgKiBQb3J0aW9ucyBDb3B5cmlnaHQgKGMpIDE5OTYtMjAyNiwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5NCwg UmVnZW50cyBvZiB0aGUgVW5pdmVyc2l0eSBvZiBDYWxpZm9ybmlhCisgKgorICogc3JjL2luY2x1 ZGUvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaAorICoKKyAqLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICovCisjaWZuZGVmIEFUVFJJQlVURV9TVEFUU19ICisKKyNpbmNsdWRlICJhY2Nlc3MvZ2VuYW0u aCIKKworCitib29sIGRlbGV0ZV9hdHRyaWJ1dGVfc3RhdGlzdGljcyhSZWxhdGlvbiByZWwsIEF0 dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCk7CisKK2Jvb2wgaW1wb3J0X2F0dHJpYnV0 ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwgY29uc3QgY2hhciAqYXR0bmFtZSwKKwkJCQkJCQkJ IEF0dHJOdW1iZXIgYXR0bnVtLCBib29sIGluaGVyaXRlZCwKKwkJCQkJCQkJIGNvbnN0IGNoYXIg Km51bGxfZnJhYywgY29uc3QgY2hhciAqYXZnX3dpZHRoLAorCQkJCQkJCQkgY29uc3QgY2hhciAq bl9kaXN0aW5jdCwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX3ZhbHMsCisJCQkJ CQkJCSBjb25zdCBjaGFyICptb3N0X2NvbW1vbl9mcmVxcywKKwkJCQkJCQkJIGNvbnN0IGNoYXIg Kmhpc3RvZ3JhbV9ib3VuZHMsCisJCQkJCQkJCSBjb25zdCBjaGFyICpjb3JyZWxhdGlvbiwKKwkJ CQkJCQkJIGNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX2VsZW1zLAorCQkJCQkJCQkgY29uc3QgY2hh ciAqbW9zdF9jb21tb25fZWxlbV9mcmVxcywKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKmVsZW1fY291 bnRfaGlzdG9ncmFtLAorCQkJCQkJCQkgY29uc3QgY2hhciAqcmFuZ2VfbGVuZ3RoX2hpc3RvZ3Jh bSwKKwkJCQkJCQkJIGNvbnN0IGNoYXIgKnJhbmdlX2VtcHR5X2ZyYWMsCisJCQkJCQkJCSBjb25z dCBjaGFyICpyYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKworI2RlZmluZSBBVFRSSUJVVEVfU1RB VFNfSAorI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9zdGF0aXN0aWNzL2F0dHJpYnV0 ZV9zdGF0cy5jIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuYwppbmRl eCAxY2M0ZDY1NzIzMS4uZjY3ZDYyYzAxMDQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3N0YXRp c3RpY3MvYXR0cmlidXRlX3N0YXRzLmMKKysrIGIvc3JjL2JhY2tlbmQvc3RhdGlzdGljcy9hdHRy aWJ1dGVfc3RhdHMuYwpAQCAtMjIsMTAgKzIyLDEyIEBACiAjaW5jbHVkZSAiY2F0YWxvZy9uYW1l c3BhY2UuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX29wZXJhdG9yLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCisjaW5jbHVkZSAic3RhdGlzdGljcy9hdHRyaWJ1dGVfc3RhdHMuaCIK ICNpbmNsdWRlICJzdGF0aXN0aWNzL3N0YXRpc3RpY3MuaCIKICNpbmNsdWRlICJzdGF0aXN0aWNz L3N0YXRfdXRpbHMuaCIKICNpbmNsdWRlICJ1dGlscy9hcnJheS5oIgogI2luY2x1ZGUgInV0aWxz L2J1aWx0aW5zLmgiCisjaW5jbHVkZSAidXRpbHMvZmxvYXQuaCIKICNpbmNsdWRlICJ1dGlscy9m bWdyb2lkcy5oIgogI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxz L3N5c2NhY2hlLmgiCkBAIC02ODgsMyArNjkwLDE5MyBAQCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9z dGF0cyhQR19GVU5DVElPTl9BUkdTKQogCiAJUEdfUkVUVVJOX0JPT0wocmVzdWx0KTsKIH0KKwor LyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgdGV4dCBhcmd1 bWVudHMKKyAqLworc3RhdGljIHZvaWQKK3NldF90ZXh0X2FyZyhOdWxsYWJsZURhdHVtICphcmcs IGNvbnN0IGNoYXIgKnMpCit7CisJaWYgKHMpCisJeworCQlhcmctPnZhbHVlID0gQ1N0cmluZ0dl dFRleHREYXR1bShzKTsKKwkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwl9CisJZWxzZQorCXsKKwkJ YXJnLT52YWx1ZSA9IChEYXR1bSkgMDsKKwkJYXJnLT5pc251bGwgPSB0cnVlOworCX0KK30KKwor LyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgZmxvYXQgYXJn dW1lbnRzCisgKi8KK3N0YXRpYyB2b2lkCitzZXRfZmxvYXRfYXJnKE51bGxhYmxlRGF0dW0gKmFy ZywgY29uc3QgY2hhciAqcykKK3sKKwlhcmctPnZhbHVlID0gKERhdHVtKSAwOworCWFyZy0+aXNu dWxsID0gdHJ1ZTsKKworCWlmIChzKQorCXsKKwkJRXJyb3JTYXZlQ29udGV4dCBlc2NvbnRleHQg PSB7VF9FcnJvclNhdmVDb250ZXh0fTsKKworCQlmbG9hdDQJCXZhbDsKKworCQl2YWwgPSBmbG9h dDRpbl9pbnRlcm5hbCgoY2hhciAqKSBzLCBOVUxMLCAiZmxvYXQiLCBzLCAoTm9kZSAqKSAmZXNj b250ZXh0KTsKKworCQlpZiAoZXNjb250ZXh0LmVycm9yX29jY3VycmVkKQorCQl7CisJCQllc2Nv bnRleHQuZXJyb3JfZGF0YS0+ZWxldmVsID0gV0FSTklORzsKKwkJCVRocm93RXJyb3JEYXRhKGVz Y29udGV4dC5lcnJvcl9kYXRhKTsKKwkJCUZyZWVFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2Rh dGEpOworCQl9CisJCWVsc2UKKwkJeworCQkJYXJnLT52YWx1ZSA9IEZsb2F0NEdldERhdHVtKHZh bCk7CisJCQlhcmctPmlzbnVsbCA9IGZhbHNlOworCQl9CisJfQorfQorCisvKgorICogQ29udmVu aWVuY2Ugcm91dGluZSBmb3Igc2V0dGluZyBvcHRpb25hbCBpbnQzMiBhcmd1bWVudHMKKyAqLwor c3RhdGljIHZvaWQKK3NldF9pbnQzMl9hcmcoTnVsbGFibGVEYXR1bSAqYXJnLCBjb25zdCBjaGFy ICpzKQoreworCWFyZy0+dmFsdWUgPSAoRGF0dW0pIDA7CisJYXJnLT5pc251bGwgPSB0cnVlOwor CisJaWYgKHMpCisJeworCQlFcnJvclNhdmVDb250ZXh0IGVzY29udGV4dCA9IHtUX0Vycm9yU2F2 ZUNvbnRleHR9OworCisJCWludDMyCQl2YWw7CisKKwkJdmFsID0gcGdfc3RydG9pbnQzMl9zYWZl KHMsIChOb2RlICopICZlc2NvbnRleHQpOworCisJCWlmIChlc2NvbnRleHQuZXJyb3Jfb2NjdXJy ZWQpCisJCXsKKwkJCWVzY29udGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJ VGhyb3dFcnJvckRhdGEoZXNjb250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShl c2NvbnRleHQuZXJyb3JfZGF0YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlhcmctPnZhbHVlID0g SW50MzJHZXREYXR1bSh2YWwpOworCQkJYXJnLT5pc251bGwgPSBmYWxzZTsKKwkJfQorCX0KK30K KworLyoKKyAqIENvbnZlbmllbmNlIHJvdXRpbmUgZm9yIHNldHRpbmcgb3B0aW9uYWwgZmxvYXRb XSBhcmd1bWVudHMKKyAqLworc3RhdGljIHZvaWQKK3NldF9mbG9hdGFycl9hcmcoTnVsbGFibGVE YXR1bSAqYXJnLCBjb25zdCBjaGFyICpzKQoreworCWFyZy0+dmFsdWUgPSAoRGF0dW0pIDA7CisJ YXJnLT5pc251bGwgPSB0cnVlOworCisJaWYgKHMpCisJeworCQlFcnJvclNhdmVDb250ZXh0IGVz Y29udGV4dCA9IHtUX0Vycm9yU2F2ZUNvbnRleHR9OworCisJCUZtZ3JJbmZvCWZsaW5mbzsKKwkJ RGF0dW0JCXZhbDsKKworCQlmbWdyX2luZm8oRl9BUlJBWV9JTiwgJmZsaW5mbyk7CisKKwkJaWYg KCFJbnB1dEZ1bmN0aW9uQ2FsbFNhZmUoJmZsaW5mbywgKGNoYXIgKikgcywgRkxPQVQ0T0lELCAt MSwKKwkJCQkJCQkJICAgKE5vZGUgKikgJmVzY29udGV4dCwgJnZhbCkpCisJCXsKKwkJCWVzY29u dGV4dC5lcnJvcl9kYXRhLT5lbGV2ZWwgPSBXQVJOSU5HOworCQkJVGhyb3dFcnJvckRhdGEoZXNj b250ZXh0LmVycm9yX2RhdGEpOworCQkJRnJlZUVycm9yRGF0YShlc2NvbnRleHQuZXJyb3JfZGF0 YSk7CisJCX0KKwkJZWxzZQorCQl7CisJCQlhcmctPnZhbHVlID0gdmFsOworCQkJYXJnLT5pc251 bGwgPSBmYWxzZTsKKwkJfQorCX0KK30KKworLyoKKyAqIERlbGV0ZSBhdHRyaWJ1dGUgc3RhdGlz dGljcy4KKyAqLworYm9vbAorZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJl bCwgQXR0ck51bWJlciBhdHRudW0sIGJvb2wgaW5oZXJpdGVkKQoreworCXJldHVybiBkZWxldGVf cGdfc3RhdGlzdGljKFJlbGF0aW9uR2V0UmVsaWQocmVsKSwgYXR0bnVtLCBpbmhlcml0ZWQpOwor fQorCisvKgorICogSW1wb3J0IGF0dHJpYnV0ZSBzdGF0aXN0aWNzIGZyb20gcmVndWxhciBzdHJp bmcgaW5wdXRzIGZvciBhbGwgc3RhdGl0aWNhbAorICogdmFsdWVzLgorICoKKyAqIFRvIGNvbnZl eSBhICJudWxsIi9ub3Qtc2V0IHZhbHVlIGZvciBhdHRudW0sIHVzZSBJbnZhbGlkQXR0ck51bWJl ci4KKyAqLworYm9vbAoraW1wb3J0X2F0dHJpYnV0ZV9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbCwg Y29uc3QgY2hhciAqYXR0bmFtZSwKKwkJCQkJCQlBdHRyTnVtYmVyIGF0dG51bSwgYm9vbCBpbmhl cml0ZWQsCisJCQkJCQkJY29uc3QgY2hhciAqbnVsbF9mcmFjLCBjb25zdCBjaGFyICphdmdfd2lk dGgsCisJCQkJCQkJY29uc3QgY2hhciAqbl9kaXN0aW5jdCwKKwkJCQkJCQljb25zdCBjaGFyICpt b3N0X2NvbW1vbl92YWxzLAorCQkJCQkJCWNvbnN0IGNoYXIgKm1vc3RfY29tbW9uX2ZyZXFzLAor CQkJCQkJCWNvbnN0IGNoYXIgKmhpc3RvZ3JhbV9ib3VuZHMsCisJCQkJCQkJY29uc3QgY2hhciAq Y29ycmVsYXRpb24sCisJCQkJCQkJY29uc3QgY2hhciAqbW9zdF9jb21tb25fZWxlbXMsCisJCQkJ CQkJY29uc3QgY2hhciAqbW9zdF9jb21tb25fZWxlbV9mcmVxcywKKwkJCQkJCQljb25zdCBjaGFy ICplbGVtX2NvdW50X2hpc3RvZ3JhbSwKKwkJCQkJCQljb25zdCBjaGFyICpyYW5nZV9sZW5ndGhf aGlzdG9ncmFtLAorCQkJCQkJCWNvbnN0IGNoYXIgKnJhbmdlX2VtcHR5X2ZyYWMsCisJCQkJCQkJ Y29uc3QgY2hhciAqcmFuZ2VfYm91bmRzX2hpc3RvZ3JhbSkKK3sKKwlMT0NBTF9GQ0lORk8obmV3 ZmNpbmZvLCBOVU1fQVRUUklCVVRFX1NUQVRTX0FSR1MpOworCisJSW5pdEZ1bmN0aW9uQ2FsbElu Zm9EYXRhKCpuZXdmY2luZm8sIE5VTEwsIE5VTV9BVFRSSUJVVEVfU1RBVFNfQVJHUywgSW52YWxp ZE9pZCwgTlVMTCwgTlVMTCk7CisKKwkvKgorCSAqIENvbnZlcnQgYWxsIHN0cmluZyBpbnB1dHMg dG8gdGhlaXIgcmVxdWlyZWQgZGF0YXR5cGVzLiBOVUxMIHZhbHVlcyBhcmUKKwkgKiBsZWZ0IGFz IHRoZSBkZWZhdWx0LgorCSAqLworCW5ld2ZjaW5mby0+YXJnc1tBVFRSRUxTQ0hFTUFfQVJHXS52 YWx1ZSA9IENTdHJpbmdHZXRUZXh0RGF0dW0oZ2V0X25hbWVzcGFjZV9uYW1lKFJlbGF0aW9uR2V0 TmFtZXNwYWNlKHJlbCkpKTsKKwluZXdmY2luZm8tPmFyZ3NbQVRUUkVMU0NIRU1BX0FSR10uaXNu dWxsID0gZmFsc2U7CisJbmV3ZmNpbmZvLT5hcmdzW0FUVFJFTE5BTUVfQVJHXS52YWx1ZSA9IENT dHJpbmdHZXRUZXh0RGF0dW0oUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUocmVsKSk7CisJbmV3ZmNp bmZvLT5hcmdzW0FUVFJFTE5BTUVfQVJHXS5pc251bGwgPSBmYWxzZTsKKworCXNldF90ZXh0X2Fy ZygmbmV3ZmNpbmZvLT5hcmdzW0FUVE5BTUVfQVJHXSwgYXR0bmFtZSk7CisKKwlpZiAoYXR0bnVt ICE9IEludmFsaWRBdHRyTnVtYmVyKQorCXsKKwkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9BUkdd LnZhbHVlID0gSW50MTZHZXREYXR1bShhdHRudW0pOworCQluZXdmY2luZm8tPmFyZ3NbQVRUTlVN X0FSR10uaXNudWxsID0gZmFsc2U7CisJfQorCWVsc2UKKwl7CisJCW5ld2ZjaW5mby0+YXJnc1tB VFROVU1fQVJHXS52YWx1ZSA9IChEYXR1bSkgMDsKKwkJbmV3ZmNpbmZvLT5hcmdzW0FUVE5VTV9B UkddLmlzbnVsbCA9IHRydWU7CisJfQorCisJbmV3ZmNpbmZvLT5hcmdzW0lOSEVSSVRFRF9BUkdd LnZhbHVlID0gQm9vbEdldERhdHVtKGluaGVyaXRlZCk7CisJbmV3ZmNpbmZvLT5hcmdzW0lOSEVS SVRFRF9BUkddLmlzbnVsbCA9IGZhbHNlOworCisJc2V0X2Zsb2F0X2FyZygmbmV3ZmNpbmZvLT5h cmdzW05VTExfRlJBQ19BUkddLCBudWxsX2ZyYWMpOworCXNldF9pbnQzMl9hcmcoJm5ld2ZjaW5m by0+YXJnc1tBVkdfV0lEVEhfQVJHXSwgYXZnX3dpZHRoKTsKKwlzZXRfZmxvYXRfYXJnKCZuZXdm Y2luZm8tPmFyZ3NbTl9ESVNUSU5DVF9BUkddLCBuX2Rpc3RpbmN0KTsKKwlzZXRfdGV4dF9hcmco Jm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9WQUxTX0FSR10sIG1vc3RfY29tbW9uX3ZhbHMp OworCXNldF9mbG9hdGFycl9hcmcoJm5ld2ZjaW5mby0+YXJnc1tNT1NUX0NPTU1PTl9GUkVRU19B UkddLCBtb3N0X2NvbW1vbl9mcmVxcyk7CisJc2V0X3RleHRfYXJnKCZuZXdmY2luZm8tPmFyZ3Nb SElTVE9HUkFNX0JPVU5EU19BUkddLCBoaXN0b2dyYW1fYm91bmRzKTsKKwlzZXRfZmxvYXRfYXJn KCZuZXdmY2luZm8tPmFyZ3NbQ09SUkVMQVRJT05fQVJHXSwgY29ycmVsYXRpb24pOworCXNldF90 ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW01PU1RfQ09NTU9OX0VMRU1TX0FSR10sIG1vc3RfY29t bW9uX2VsZW1zKTsKKwlzZXRfZmxvYXRhcnJfYXJnKCZuZXdmY2luZm8tPmFyZ3NbTU9TVF9DT01N T05fRUxFTV9GUkVRU19BUkddLCBtb3N0X2NvbW1vbl9lbGVtX2ZyZXFzKTsKKwlzZXRfZmxvYXRh cnJfYXJnKCZuZXdmY2luZm8tPmFyZ3NbRUxFTV9DT1VOVF9ISVNUT0dSQU1fQVJHXSwgZWxlbV9j b3VudF9oaXN0b2dyYW0pOworCXNldF90ZXh0X2FyZygmbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0xF TkdUSF9ISVNUT0dSQU1fQVJHXSwgcmFuZ2VfbGVuZ3RoX2hpc3RvZ3JhbSk7CisJc2V0X2Zsb2F0 X2FyZygmbmV3ZmNpbmZvLT5hcmdzW1JBTkdFX0VNUFRZX0ZSQUNfQVJHXSwgcmFuZ2VfZW1wdHlf ZnJhYyk7CisJc2V0X3RleHRfYXJnKCZuZXdmY2luZm8tPmFyZ3NbUkFOR0VfQk9VTkRTX0hJU1RP R1JBTV9BUkddLCByYW5nZV9ib3VuZHNfaGlzdG9ncmFtKTsKKworCXJldHVybiBhdHRyaWJ1dGVf c3RhdGlzdGljc191cGRhdGUobmV3ZmNpbmZvKTsKK30KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9z dGdyZXNfZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zk dy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGU5MDI4OWU0YWIxLi5lOTMxZmE2NGUw ZCAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3 Lm91dAorKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 CkBAIC0xMjkyNyw2ICsxMjkyNyw0NyBAQCBBTkFMWVpFIGR0ZXN0X3RhYmxlOwogQU5BTFlaRSBW RVJCT1NFIGR0ZXN0X2Z0YWJsZTsgICAgICAgICAgICAgLS0gc2hvdWxkIHdvcmsKIElORk86ICBp bXBvcnRpbmcgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJsZSAicHVibGljLmR0ZXN0X2Z0YWJs ZSIKIElORk86ICBmaW5pc2hlZCBpbXBvcnRpbmcgc3RhdGlzdGljcyBmb3IgZm9yZWlnbiB0YWJs ZSAicHVibGljLmR0ZXN0X2Z0YWJsZSIKKy0tIGR0ZXN0X2Z0YWJsZXMgc3RhdHMgc2hvdWxkIG5v dyBleGFjdGx5IG1hdGNoIGR0ZXN0X3RhYmxlCistLSBjb21wYXJlIHRoZSByb3djb3VudHMsIHNo b3VsZCBnZXQgMCByb3dzIGJhY2sKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzCitXSEVS RSBzY2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF90YWJsZScKK0VY Q0VQVAorU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAn cHVibGljJyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisgY291bnQgCistLS0tLS0t CisoMCByb3dzKQorCistLSBjb21wYXJlIHZhbHVlcywgc2hvdWxkIG1hdGNoCitTRUxFQ1QgcmVs cGFnZXMsIHJlbHR1cGxlcworRlJPTSBwZ19jbGFzcworV0hFUkUgb2lkID0gJ3B1YmxpYy5kdGVz dF90YWJsZSc6OnJlZ2NsYXNzCitFWENFUFQKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzCitG Uk9NIHBnX2NsYXNzCitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X2Z0YWJsZSc6OnJlZ2NsYXNz OworIHJlbHBhZ2VzIHwgcmVsdHVwbGVzIAorLS0tLS0tLS0tLSstLS0tLS0tLS0tLQorKDAgcm93 cykKKworLS0gdGVzdCBvbmx5IGEgZmV3IHN0YXRzIGNvbHVtbnMgY29tbW9uIHRvIGludGVnZXIg dHlwZXMKK1NFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51bGxfZnJhYywgYXZnX3dpZHRoLCBu X2Rpc3RpbmN0LAorICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1jdiwgbW9zdF9jb21tb25f ZnJlcXMsCisgIGhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgYXMgaGIsIGNvcnJlbGF0aW9uCitGUk9N IHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1YmxpYycKK0FORCB0YWJsZW5hbWUgPSAn ZHRlc3RfdGFibGUnCitFWENFUFQKK1NFTEVDVCBhdHRuYW1lLCBpbmhlcml0ZWQsIG51bGxfZnJh YywgYXZnX3dpZHRoLCBuX2Rpc3RpbmN0LAorICBtb3N0X2NvbW1vbl92YWxzOjp0ZXh0IGFzIG1j diwgbW9zdF9jb21tb25fZnJlcXMsCisgIGhpc3RvZ3JhbV9ib3VuZHM6OnRleHQgYXMgaGIsIGNv cnJlbGF0aW9uCitGUk9NIHBnX3N0YXRzCitXSEVSRSBzY2hlbWFuYW1lID0gJ3B1YmxpYycKK0FO RCB0YWJsZW5hbWUgPSAnZHRlc3RfZnRhYmxlJzsKKyBhdHRuYW1lIHwgaW5oZXJpdGVkIHwgbnVs bF9mcmFjIHwgYXZnX3dpZHRoIHwgbl9kaXN0aW5jdCB8IG1jdiB8IG1vc3RfY29tbW9uX2ZyZXFz IHwgaGIgfCBjb3JyZWxhdGlvbiAKKy0tLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLSst LS0tLS0tLS0tLSstLS0tLS0tLS0tLS0rLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tKy0t LS0tLS0tLS0tLS0KKygwIHJvd3MpCisKIC0tIGNsZWFudXAKIERST1AgRk9SRUlHTiBUQUJMRSBz aW1wb3J0X2Z0YWJsZTsKIERST1AgRk9SRUlHTiBUQUJMRSBzaW1wb3J0X2Z2aWV3OwpkaWZmIC0t Z2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCA2NzNkNTYxMTdiOC4uOGFhNTg5ZDVhNTYgMTAw NjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCkBAIC0yNCw3ICsyNCw2IEBACiAjaW5jbHVk ZSAiY29tbWFuZHMvdmFjdXVtLmgiCiAjaW5jbHVkZSAiZXhlY3V0b3IvZXhlY0FzeW5jLmgiCiAj aW5jbHVkZSAiZXhlY3V0b3IvaW5zdHJ1bWVudC5oIgotI2luY2x1ZGUgImV4ZWN1dG9yL3NwaS5o IgogI2luY2x1ZGUgImZvcmVpZ24vZmR3YXBpLmgiCiAjaW5jbHVkZSAiZnVuY2FwaS5oIgogI2lu Y2x1ZGUgIm1pc2NhZG1pbi5oIgpAQCAtNDMsNiArNDIsNyBAQAogI2luY2x1ZGUgInBhcnNlci9w YXJzZXRyZWUuaCIKICNpbmNsdWRlICJwb3N0Z3Jlc19mZHcuaCIKICNpbmNsdWRlICJzdGF0aXN0 aWNzL3N0YXRpc3RpY3MuaCIKKyNpbmNsdWRlICJzdGF0aXN0aWNzL2F0dHJpYnV0ZV9zdGF0cy5o IgogI2luY2x1ZGUgInN0YXRpc3RpY3MvcmVsYXRpb25fc3RhdHMuaCIKICNpbmNsdWRlICJzdG9y YWdlL2xhdGNoLmgiCiAjaW5jbHVkZSAidXRpbHMvYnVpbHRpbnMuaCIKQEAgLTM2OCwxMDkgKzM2 OCw2IEBAIGVudW0gQXR0U3RhdHNDb2x1bW5zCiAJQVRUU1RBVFNfTlVNX0ZJRUxEUywKIH07CiAK LS8qIEF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLXN0YXRpYyBjb25zdCBjaGFyICph dHRpbXBvcnRfc3FsID0KLSJTRUxFQ1QgcGdfY2F0YWxvZy5wZ19yZXN0b3JlX2F0dHJpYnV0ZV9z dGF0cyhcbiIKLSJcdCd2ZXJzaW9uJywgJDEsXG4iCi0iXHQnc2NoZW1hbmFtZScsICQyLFxuIgot Ilx0J3JlbG5hbWUnLCAkMyxcbiIKLSJcdCdhdHRudW0nLCAkNCxcbiIKLSJcdCdpbmhlcml0ZWQn LCBmYWxzZTo6Ym9vbGVhbixcbiIKLSJcdCdudWxsX2ZyYWMnLCAkNTo6cmVhbCxcbiIKLSJcdCdh dmdfd2lkdGgnLCAkNjo6aW50ZWdlcixcbiIKLSJcdCduX2Rpc3RpbmN0JywgJDc6OnJlYWwsXG4i Ci0iXHQnbW9zdF9jb21tb25fdmFscycsICQ4LFxuIgotIlx0J21vc3RfY29tbW9uX2ZyZXFzJywg JDk6OnJlYWxbXSxcbiIKLSJcdCdoaXN0b2dyYW1fYm91bmRzJywgJDEwLFxuIgotIlx0J2NvcnJl bGF0aW9uJywgJDExOjpyZWFsLFxuIgotIlx0J21vc3RfY29tbW9uX2VsZW1zJywgJDEyLFxuIgot Ilx0J21vc3RfY29tbW9uX2VsZW1fZnJlcXMnLCAkMTM6OnJlYWxbXSxcbiIKLSJcdCdlbGVtX2Nv dW50X2hpc3RvZ3JhbScsICQxNDo6cmVhbFtdLFxuIgotIlx0J3JhbmdlX2xlbmd0aF9oaXN0b2dy YW0nLCAkMTUsXG4iCi0iXHQncmFuZ2VfZW1wdHlfZnJhYycsICQxNjo6cmVhbCxcbiIKLSJcdCdy YW5nZV9ib3VuZHNfaGlzdG9ncmFtJywgJDE3KSI7Ci0KLS8qIEFyZ3VtZW50IG9yZGVyIGluIGF0 dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVlcnkgKi8KLWVudW0gQXR0SW1wb3J0U3FsQXJncwotewot CUFUVElNUE9SVF9TUUxfVkVSU0lPTiA9IDAsCi0JQVRUSU1QT1JUX1NRTF9TQ0hFTUFOQU1FLAot CUFUVElNUE9SVF9TUUxfUkVMTkFNRSwKLQlBVFRJTVBPUlRfU1FMX0FUVE5VTSwKLQlBVFRJTVBP UlRfU1FMX05VTExfRlJBQywKLQlBVFRJTVBPUlRfU1FMX0FWR19XSURUSCwKLQlBVFRJTVBPUlRf U1FMX05fRElTVElOQ1QsCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9WQUxTLAotCUFUVElN UE9SVF9TUUxfTU9TVF9DT01NT05fRlJFUVMsCi0JQVRUSU1QT1JUX1NRTF9ISVNUT0dSQU1fQk9V TkRTLAotCUFUVElNUE9SVF9TUUxfQ09SUkVMQVRJT04sCi0JQVRUSU1QT1JUX1NRTF9NT1NUX0NP TU1PTl9FTEVNUywKLQlBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMsCi0JQVRU SU1QT1JUX1NRTF9FTEVNX0NPVU5UX0hJU1RPR1JBTSwKLQlBVFRJTVBPUlRfU1FMX1JBTkdFX0xF TkdUSF9ISVNUT0dSQU0sCi0JQVRUSU1QT1JUX1NRTF9SQU5HRV9FTVBUWV9GUkFDLAotCUFUVElN UE9SVF9TUUxfUkFOR0VfQk9VTkRTX0hJU1RPR1JBTSwKLQlBVFRJTVBPUlRfU1FMX05VTV9GSUVM RFMKLX07Ci0KLS8qIEFyZ3VtZW50IHR5cGVzIGluIGF0dHJpYnV0ZSBzdGF0cyBpbXBvcnQgcXVl cnkgKi8KLXN0YXRpYyBjb25zdCBPaWQgYXR0aW1wb3J0X2FyZ3R5cGVzW0FUVElNUE9SVF9TUUxf TlVNX0ZJRUxEU10gPQotewotCUlOVDRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIElOVDJPSUQsCi0J VEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwgVEVYVE9JRCwKLQlURVhUT0lELCBURVhUT0lELCBU RVhUT0lELCBURVhUT0lELAotCVRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsIFRFWFRPSUQsCi0J VEVYVE9JRCwKLX07Ci0KLS8qCi0gKiBUaGUgbWFwcGluZyBvZiBhdHRyaWJ1dGUgc3RhdHMgcXVl cnkgY29sdW1ucyB0byB0aGUgcG9zaXRpb25hbCBhcmd1bWVudHMgaW4KLSAqIHRoZSBwcmVwYXJl ZCBwZ19yZXN0b3JlX2F0dHJpYnV0ZV9zdGF0cygpIHN0YXRlbWVudC4KLSAqLwotdHlwZWRlZiBz dHJ1Y3QKLXsKLQllbnVtIEF0dFN0YXRzQ29sdW1ucyByZXNfZmllbGQ7Ci0JZW51bSBBdHRJbXBv cnRTcWxBcmdzIGFyZ19udW07Ci19IEF0dHJSZXN1bHRBcmdNYXA7Ci0KLSNkZWZpbmUgTlVNX01B UFBFRF9BVFRJTVBPUlRfQVJHUyAxMwotCi1zdGF0aWMgY29uc3QgQXR0clJlc3VsdEFyZ01hcCBh dHRyX3Jlc3VsdF9hcmdfbWFwW05VTV9NQVBQRURfQVRUSU1QT1JUX0FSR1NdID0KLXsKLQl7QVRU U1RBVFNfTlVMTF9GUkFDLCBBVFRJTVBPUlRfU1FMX05VTExfRlJBQ30sCi0Je0FUVFNUQVRTX0FW R19XSURUSCwgQVRUSU1QT1JUX1NRTF9BVkdfV0lEVEh9LAotCXtBVFRTVEFUU19OX0RJU1RJTkNU LCBBVFRJTVBPUlRfU1FMX05fRElTVElOQ1R9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1PTl9WQUxT LCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9OX1ZBTFN9LAotCXtBVFRTVEFUU19NT1NUX0NPTU1P Tl9GUkVRUywgQVRUSU1QT1JUX1NRTF9NT1NUX0NPTU1PTl9GUkVRU30sCi0Je0FUVFNUQVRTX0hJ U1RPR1JBTV9CT1VORFMsIEFUVElNUE9SVF9TUUxfSElTVE9HUkFNX0JPVU5EU30sCi0Je0FUVFNU QVRTX0NPUlJFTEFUSU9OLCBBVFRJTVBPUlRfU1FMX0NPUlJFTEFUSU9OfSwKLQl7QVRUU1RBVFNf TU9TVF9DT01NT05fRUxFTVMsIEFUVElNUE9SVF9TUUxfTU9TVF9DT01NT05fRUxFTVN9LAotCXtB VFRTVEFUU19NT1NUX0NPTU1PTl9FTEVNX0ZSRVFTLCBBVFRJTVBPUlRfU1FMX01PU1RfQ09NTU9O X0VMRU1fRlJFUVN9LAotCXtBVFRTVEFUU19FTEVNX0NPVU5UX0hJU1RPR1JBTSwgQVRUSU1QT1JU X1NRTF9FTEVNX0NPVU5UX0hJU1RPR1JBTX0sCi0Je0FUVFNUQVRTX1JBTkdFX0xFTkdUSF9ISVNU T0dSQU0sIEFUVElNUE9SVF9TUUxfUkFOR0VfTEVOR1RIX0hJU1RPR1JBTX0sCi0Je0FUVFNUQVRT X1JBTkdFX0VNUFRZX0ZSQUMsIEFUVElNUE9SVF9TUUxfUkFOR0VfRU1QVFlfRlJBQ30sCi0Je0FU VFNUQVRTX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0sIEFUVElNUE9SVF9TUUxfUkFOR0VfQk9VTkRT X0hJU1RPR1JBTX0sCi19OwotCi0vKiBBdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLXN0 YXRpYyBjb25zdCBjaGFyICphdHRjbGVhcl9zcWwgPQotIlNFTEVDVCBwZ19jYXRhbG9nLnBnX2Ns ZWFyX2F0dHJpYnV0ZV9zdGF0cygkMSwgJDIsICQzLCBmYWxzZSkiOwotCi0vKiBBcmd1bWVudCBv cmRlciBpbiBhdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8KLWVudW0gQXR0Q2xlYXJTcWxB cmdzCi17Ci0JQVRUQ0xFQVJfU1FMX1NDSEVNQU5BTUUgPSAwLAotCUFUVENMRUFSX1NRTF9SRUxO QU1FLAotCUFUVENMRUFSX1NRTF9BVFROQU1FLAotCUFUVENMRUFSX1NRTF9OVU1fRklFTERTCi19 OwotCi0vKiBBcmd1bWVudCB0eXBlcyBpbiBhdHRyaWJ1dGUgc3RhdHMgY2xlYXIgcXVlcnkgKi8K LXN0YXRpYyBjb25zdCBPaWQgYXR0Y2xlYXJfYXJndHlwZXNbQVRUQ0xFQVJfU1FMX05VTV9GSUVM RFNdID0KLXsKLQlURVhUT0lELCBURVhUT0lELCBURVhUT0lELAotfTsKLQogLyoKICAqIFNRTCBm dW5jdGlvbnMKICAqLwpAQCAtNjg4LDE1ICs1ODUsMTIgQEAgc3RhdGljIGJvb2wgbWF0Y2hfYXR0 cm1hcChQR3Jlc3VsdCAqcmVzLAogCQkJCQkJICBjb25zdCBjaGFyICpyZW1vdGVfcmVsbmFtZSwK IAkJCQkJCSAgaW50IGF0dHJjbnQsCiAJCQkJCQkgIFJlbW90ZUF0dHJpYnV0ZU1hcHBpbmcgKnJl bWF0dHJtYXApOwotc3RhdGljIGJvb2wgaW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlv biByZWwsCitzdGF0aWMgYm9vbCBpbXBvcnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJl bGF0aW9uLAogCQkJCQkJCQkJICBjb25zdCBjaGFyICpzY2hlbWFuYW1lLAogCQkJCQkJCQkJICBj b25zdCBjaGFyICpyZWxuYW1lLAogCQkJCQkJCQkJICBpbnQgYXR0cmNudCwKIAkJCQkJCQkJCSAg Y29uc3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCQkJCSAgUmVt b3RlU3RhdHNSZXN1bHRzICpyZW1zdGF0cyk7Ci1zdGF0aWMgdm9pZCBtYXBfZmllbGRfdG9fYXJn KFBHcmVzdWx0ICpyZXMsIGludCByb3csIGludCBmaWVsZCwKLQkJCQkJCQkgaW50IGFyZywgRGF0 dW0gKnZhbHVlcywgY2hhciAqbnVsbHMpOwotc3RhdGljIGJvb2wgaW1wb3J0X3NwaV9xdWVyeV9v ayh2b2lkKTsKIHN0YXRpYyB2b2lkIHByb2R1Y2VfdHVwbGVfYXN5bmNocm9ub3VzbHkoQXN5bmNS ZXF1ZXN0ICphcmVxLCBib29sIGZldGNoKTsKIHN0YXRpYyB2b2lkIGZldGNoX21vcmVfZGF0YV9i ZWdpbihBc3luY1JlcXVlc3QgKmFyZXEpOwogc3RhdGljIHZvaWQgY29tcGxldGVfcGVuZGluZ19y ZXF1ZXN0KEFzeW5jUmVxdWVzdCAqYXJlcSk7CkBAIC02MDk5LDYgKzU5OTMsMTkgQEAgbWF0Y2hf YXR0cm1hcChQR3Jlc3VsdCAqcmVzLAogCXJldHVybiB0cnVlOwogfQogCisKKy8qCisgKiBDb25l bmllbmNlIHJvdXRpbmUgdG8gZmV0Y2gKKyAqLworc3RhdGljIGNoYXIgKgorZ2V0X29wdF92YWx1 ZShQR3Jlc3VsdCAqcmVzLCBpbnQgcm93LCBpbnQgY29sKQoreworCWlmIChQUWdldGlzbnVsbChy ZXMsIHJvdywgY29sKSkKKwkJcmV0dXJuIE5VTEw7CisKKwlyZXR1cm4gUFFnZXR2YWx1ZShyZXMs IHJvdywgY29sKTsKK30KKwogLyoKICAqIEltcG9ydCBmZXRjaGVkIHN0YXRpc3RpY3MgaW50byB0 aGUgbG9jYWwgc3RhdGlzdGljcyB0YWJsZXMuCiAgKi8KQEAgLTYxMTAsMjggKzYwMTcsMTEgQEAg aW1wb3J0X2ZldGNoZWRfc3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCQkJCSAgY29u c3QgUmVtb3RlQXR0cmlidXRlTWFwcGluZyAqcmVtYXR0cm1hcCwKIAkJCQkJCSAgUmVtb3RlU3Rh dHNSZXN1bHRzICpyZW1zdGF0cykKIHsKLQlTUElQbGFuUHRyCWF0dGltcG9ydF9wbGFuID0gTlVM TDsKLQlTUElQbGFuUHRyCWF0dGNsZWFyX3BsYW4gPSBOVUxMOwotCURhdHVtCQl2YWx1ZXNbQVRU SU1QT1JUX1NRTF9OVU1fRklFTERTXTsKLQljaGFyCQludWxsc1tBVFRJTVBPUlRfU1FMX05VTV9G SUVMRFNdOwotCWludAkJCXNwaXJjOwogCWJvb2wJCW9rID0gZmFsc2U7CiAKIAljaGFyCSAgICpy ZWxwYWdlcyA9IE5VTEw7CiAJY2hhcgkgICAqcmVsdHVwbGVzID0gTlVMTDsKIAotCS8qIEFzc2ln biBhbGwgdGhlIGludmFyaWFudCBwYXJhbWV0ZXJzIGNvbW1vbiB0byByZWxhdGlvbi9hdHRyaWJ1 dGUgc3RhdHMgKi8KLQl2YWx1ZXNbQVRUSU1QT1JUX1NRTF9WRVJTSU9OXSA9IEludDMyR2V0RGF0 dW0ocmVtc3RhdHMtPnNlcnZlcl92ZXJzaW9uX251bSk7Ci0JbnVsbHNbQVRUSU1QT1JUX1NRTF9W RVJTSU9OXSA9ICcgJzsKLQotCXZhbHVlc1tBVFRJTVBPUlRfU1FMX1NDSEVNQU5BTUVdID0gQ1N0 cmluZ0dldFRleHREYXR1bShzY2hlbWFuYW1lKTsKLQludWxsc1tBVFRJTVBPUlRfU1FMX1NDSEVN QU5BTUVdID0gJyAnOwotCi0JdmFsdWVzW0FUVElNUE9SVF9TUUxfUkVMTkFNRV0gPSBDU3RyaW5n R2V0VGV4dERhdHVtKHJlbG5hbWUpOwotCW51bGxzW0FUVElNUE9SVF9TUUxfUkVMTkFNRV0gPSAn ICc7Ci0KLQlTUElfY29ubmVjdCgpOwotCiAJLyoKIAkgKiBXZSBpbXBvcnQgYXR0cmlidXRlIHN0 YXRpc3RpY3MgZmlyc3QsIGlmIGFueSwgYmVjYXVzZSB0aG9zZSBhcmUgbW9yZQogCSAqIHByb25l IHRvIGVycm9ycy4gIFRoaXMgYXZvaWRzIG1ha2luZyBhIG1vZGlmaWNhdGlvbiBvZiBwZ19jbGFz cyB0aGF0CkBAIC02MTM5LDI2ICs2MDI5LDE2IEBAIGltcG9ydF9mZXRjaGVkX3N0YXRpc3RpY3Mo UmVsYXRpb24gcmVsYXRpb24sCiAJICovCiAJaWYgKHJlbXN0YXRzLT5hdHQgIT0gTlVMTCkKIAl7 Ci0JCUFzc2VydChQUW5maWVsZHMocmVtc3RhdHMtPmF0dCkgPT0gQVRUU1RBVFNfTlVNX0ZJRUxE Uyk7Ci0JCUFzc2VydChQUW50dXBsZXMocmVtc3RhdHMtPmF0dCkgPj0gMSk7CisJCVBHcmVzdWx0 ICAgKnJlcyA9IHJlbXN0YXRzLT5hdHQ7CiAKLQkJYXR0aW1wb3J0X3BsYW4gPSBTUElfcHJlcGFy ZShhdHRpbXBvcnRfc3FsLCBBVFRJTVBPUlRfU1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkgKE9p ZCAqKSBhdHRpbXBvcnRfYXJndHlwZXMpOwotCQlpZiAoYXR0aW1wb3J0X3BsYW4gPT0gTlVMTCkK LQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcHJlcGFyZSBhdHRpbXBvcnRfc3FsIHF1ZXJ5Iik7 Ci0KLQkJYXR0Y2xlYXJfcGxhbiA9IFNQSV9wcmVwYXJlKGF0dGNsZWFyX3NxbCwgQVRUQ0xFQVJf U1FMX05VTV9GSUVMRFMsCi0JCQkJCQkJCQkoT2lkICopIGF0dGNsZWFyX2FyZ3R5cGVzKTsKLQkJ aWYgKGF0dGNsZWFyX3BsYW4gPT0gTlVMTCkKLQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gcHJl cGFyZSBhdHRjbGVhcl9zcWwgcXVlcnkiKTsKLQotCQludWxsc1tBVFRJTVBPUlRfU1FMX0FUVE5V TV0gPSAnICc7CisJCUFzc2VydChQUW5maWVsZHMocmVzKSA9PSBBVFRTVEFUU19OVU1fRklFTERT KTsKKwkJQXNzZXJ0KFBRbnR1cGxlcyhyZXMpID49IDEpOwogCiAJCWZvciAoaW50IG1hcGlkeCA9 IDA7IG1hcGlkeCA8IGF0dHJjbnQ7IG1hcGlkeCsrKQogCQl7CiAJCQlpbnQJCQlyb3cgPSByZW1h dHRybWFwW21hcGlkeF0ucmVzX2luZGV4OwotCQkJRGF0dW0JICAgKnZhbHVlczIgPSB2YWx1ZXMg KyAxOwotCQkJY2hhcgkgICAqbnVsbHMyID0gbnVsbHMgKyAxOworCQkJQXR0ck51bWJlcglhdHRu dW0gPSByZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bnVtOworCQkJY29uc3QgY2hhciAqYXR0 bmFtZSA9IHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRuYW1lOwogCiAJCQkvKiBBbGwgbWFw cGluZ3Mgc2hvdWxkIGhhdmUgYmVlbiBhc3NpZ25lZCBhIHJlc3VsdCBzZXQgcm93LiAqLwogCQkJ QXNzZXJ0KHJvdyA+PSAwKTsKQEAgLTYxNjgsNDIgKzYwNDgsMjggQEAgaW1wb3J0X2ZldGNoZWRf c3RhdGlzdGljcyhSZWxhdGlvbiByZWxhdGlvbiwKIAkJCSAqLwogCQkJQ0hFQ0tfRk9SX0lOVEVS UlVQVFMoKTsKIAotCQkJLyoKLQkJCSAqIEZpcnN0LCBjbGVhciBleGlzdGluZyBhdHRyaWJ1dGUg c3RhdHMuCi0JCQkgKgotCQkJICogV2UgY2FuIHJlLXVzZSB0aGUgdmFsdWVzL251bGxzIGJlY2F1 c2UgdGhlIG51bWJlciBvZiBwYXJhbWV0ZXJzCi0JCQkgKiBpcyBsZXNzIGFuZCB0aGUgZmlyc3Qg dHdvIHBhcmFtcyBhcmUgdGhlIHNhbWUgYXMgdGhlIHNlY29uZCBhbmQKLQkJCSAqIHRoaXJkIG9u ZXMgaW4gYXR0aW1wb3J0X3NxbC4KLQkJCSAqLwotCQkJdmFsdWVzMltBVFRDTEVBUl9TUUxfQVRU TkFNRV0gPQotCQkJCUNTdHJpbmdHZXRUZXh0RGF0dW0ocmVtYXR0cm1hcFttYXBpZHhdLmxvY2Fs X2F0dG5hbWUpOworCQkJZGVsZXRlX2F0dHJpYnV0ZV9zdGF0aXN0aWNzKHJlbGF0aW9uLCBhdHRu dW0sIGZhbHNlKTsKIAotCQkJc3BpcmMgPSBTUElfZXhlY3V0ZV9wbGFuKGF0dGNsZWFyX3BsYW4s IHZhbHVlczIsIG51bGxzMiwgZmFsc2UsIDEpOwotCQkJaWYgKHNwaXJjICE9IFNQSV9PS19TRUxF Q1QpCi0JCQkJZWxvZyhFUlJPUiwgImZhaWxlZCB0byBleGVjdXRlIGF0dGNsZWFyX3NxbCBxdWVy eSBmb3IgY29sdW1uIFwiJXNcIiBvZiBmb3JlaWduIHRhYmxlIFwiJXMuJXNcIiIsCi0JCQkJCSBy ZW1hdHRybWFwW21hcGlkeF0ubG9jYWxfYXR0bmFtZSwgc2NoZW1hbmFtZSwgcmVsbmFtZSk7Ci0K LQkJCXZhbHVlc1tBVFRJTVBPUlRfU1FMX0FUVE5VTV0gPQotCQkJCUludDE2R2V0RGF0dW0ocmVt YXR0cm1hcFttYXBpZHhdLmxvY2FsX2F0dG51bSk7Ci0KLQkJCS8qIExvb3AgdGhyb3VnaCBhbGwg bWFwcGFibGUgY29sdW1ucyB0byBzZXQgcmVtYWluaW5nIGFyZ3VtZW50cyAqLwotCQkJZm9yIChp bnQgaSA9IDA7IGkgPCBOVU1fTUFQUEVEX0FUVElNUE9SVF9BUkdTOyBpKyspCi0JCQkJbWFwX2Zp ZWxkX3RvX2FyZyhyZW1zdGF0cy0+YXR0LCByb3csCi0JCQkJCQkJCSBhdHRyX3Jlc3VsdF9hcmdf bWFwW2ldLnJlc19maWVsZCwKLQkJCQkJCQkJIGF0dHJfcmVzdWx0X2FyZ19tYXBbaV0uYXJnX251 bSwKLQkJCQkJCQkJIHZhbHVlcywgbnVsbHMpOwotCi0JCQlzcGlyYyA9IFNQSV9leGVjdXRlX3Bs YW4oYXR0aW1wb3J0X3BsYW4sIHZhbHVlcywgbnVsbHMsIGZhbHNlLCAxKTsKLQkJCWlmIChzcGly YyAhPSBTUElfT0tfU0VMRUNUKQotCQkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gZXhlY3V0ZSBh dHRpbXBvcnRfc3FsIHF1ZXJ5IGZvciBjb2x1bW4gXCIlc1wiIG9mIGZvcmVpZ24gdGFibGUgXCIl cy4lc1wiIiwKLQkJCQkJIHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRuYW1lLCBzY2hlbWFu YW1lLCByZWxuYW1lKTsKLQotCQkJaWYgKCFpbXBvcnRfc3BpX3F1ZXJ5X29rKCkpCisJCQlpZiAo IWltcG9ydF9hdHRyaWJ1dGVfc3RhdGlzdGljcyhyZWxhdGlvbiwgYXR0bmFtZSwKKwkJCQkJCQkJ CQkJIEludmFsaWRBdHRyTnVtYmVyLAorCQkJCQkJCQkJCQkgZmFsc2UsCisJCQkJCQkJCQkJCSBn ZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19OVUxMX0ZSQUMpLAorCQkJCQkJCQkJCQkg Z2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfQVZHX1dJRFRIKSwKKwkJCQkJCQkJCQkJ IGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFUVFNUQVRTX05fRElTVElOQ1QpLAorCQkJCQkJCQkJ CQkgZ2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfTU9TVF9DT01NT05fVkFMUyksCisJ CQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19NT1NUX0NPTU1PTl9G UkVRUyksCisJCQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19ISVNU T0dSQU1fQk9VTkRTKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFUVFNU QVRTX0NPUlJFTEFUSU9OKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFU VFNUQVRTX01PU1RfQ09NTU9OX0VMRU1TKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVz LCByb3csIEFUVFNUQVRTX01PU1RfQ09NTU9OX0VMRU1fRlJFUVMpLAorCQkJCQkJCQkJCQkgZ2V0 X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfRUxFTV9DT1VOVF9ISVNUT0dSQU0pLAorCQkJ CQkJCQkJCQkgZ2V0X29wdF92YWx1ZShyZXMsIHJvdywgQVRUU1RBVFNfUkFOR0VfTEVOR1RIX0hJ U1RPR1JBTSksCisJCQkJCQkJCQkJCSBnZXRfb3B0X3ZhbHVlKHJlcywgcm93LCBBVFRTVEFUU19S QU5HRV9FTVBUWV9GUkFDKSwKKwkJCQkJCQkJCQkJIGdldF9vcHRfdmFsdWUocmVzLCByb3csIEFU VFNUQVRTX1JBTkdFX0JPVU5EU19ISVNUT0dSQU0pKSkKIAkJCXsKIAkJCQllcmVwb3J0KFdBUk5J TkcsCiAJCQkJCQllcnJtc2coImNvdWxkIG5vdCBpbXBvcnQgc3RhdGlzdGljcyBmb3IgZm9yZWln biB0YWJsZSBcIiVzLiVzXCIgLS0tIGF0dHJpYnV0ZSBzdGF0aXN0aWNzIGltcG9ydCBmYWlsZWQg Zm9yIGNvbHVtbiBcIiVzXCIgb2YgdGhpcyBmb3JlaWduIHRhYmxlIiwKLQkJCQkJCQkgICBzY2hl bWFuYW1lLCByZWxuYW1lLAotCQkJCQkJCSAgIHJlbWF0dHJtYXBbbWFwaWR4XS5sb2NhbF9hdHRu YW1lKSk7CisJCQkJCQkJICAgc2NoZW1hbmFtZSwgcmVsbmFtZSwgYXR0bmFtZSkpOwogCQkJCWdv dG8gaW1wb3J0X2NsZWFudXA7CiAJCQl9CiAJCX0KQEAgLTYyMzIsNTcgKzYwOTgsOSBAQCBpbXBv cnRfZmV0Y2hlZF9zdGF0aXN0aWNzKFJlbGF0aW9uIHJlbGF0aW9uLAogCW9rID0gdHJ1ZTsKIAog aW1wb3J0X2NsZWFudXA6Ci0JaWYgKGF0dGltcG9ydF9wbGFuKQotCQlTUElfZnJlZXBsYW4oYXR0 aW1wb3J0X3BsYW4pOwotCWlmIChhdHRjbGVhcl9wbGFuKQotCQlTUElfZnJlZXBsYW4oYXR0Y2xl YXJfcGxhbik7Ci0JU1BJX2ZpbmlzaCgpOwogCXJldHVybiBvazsKIH0KIAotLyoKLSAqIE1vdmUg YSBzdHJpbmcgdmFsdWUgZnJvbSBhIHJlc3VsdCBzZXQgdG8gYSBUZXh0IHZhbHVlIG9mIGEgRGF0 dW0gYXJyYXkuCi0gKi8KLXN0YXRpYyB2b2lkCi1tYXBfZmllbGRfdG9fYXJnKFBHcmVzdWx0ICpy ZXMsIGludCByb3csIGludCBmaWVsZCwKLQkJCQkgaW50IGFyZywgRGF0dW0gKnZhbHVlcywgY2hh ciAqbnVsbHMpCi17Ci0JaWYgKFBRZ2V0aXNudWxsKHJlcywgcm93LCBmaWVsZCkpCi0JewotCQl2 YWx1ZXNbYXJnXSA9IChEYXR1bSkgMDsKLQkJbnVsbHNbYXJnXSA9ICduJzsKLQl9Ci0JZWxzZQot CXsKLQkJY29uc3QgY2hhciAqcyA9IFBRZ2V0dmFsdWUocmVzLCByb3csIGZpZWxkKTsKLQotCQl2 YWx1ZXNbYXJnXSA9IENTdHJpbmdHZXRUZXh0RGF0dW0ocyk7Ci0JCW51bGxzW2FyZ10gPSAnICc7 Ci0JfQotfQotCi0vKgotICogQ2hlY2sgdGhlIDF4MSByZXN1bHQgc2V0IG9mIGEgcGdfcmVzdG9y ZV8qX3N0YXRzKCkgY29tbWFuZCBmb3Igc3VjY2Vzcy4KLSAqLwotc3RhdGljIGJvb2wKLWltcG9y dF9zcGlfcXVlcnlfb2sodm9pZCkKLXsKLQlUdXBsZURlc2MJdHVwZGVzYzsKLQlEYXR1bQkJZGF0 OwotCWJvb2wJCWlzbnVsbDsKLQotCUFzc2VydChTUElfdHVwdGFibGUgIT0gTlVMTCk7Ci0JQXNz ZXJ0KFNQSV9wcm9jZXNzZWQgPT0gMSk7Ci0KLQl0dXBkZXNjID0gU1BJX3R1cHRhYmxlLT50dXBk ZXNjOwotCUFzc2VydCh0dXBkZXNjLT5uYXR0cyA9PSAxKTsKLQlBc3NlcnQoVHVwbGVEZXNjQXR0 cih0dXBkZXNjLCAwKS0+YXR0dHlwaWQgPT0gQk9PTE9JRCk7Ci0JZGF0ID0gU1BJX2dldGJpbnZh bChTUElfdHVwdGFibGUtPnZhbHNbMF0sIHR1cGRlc2MsIDEsICZpc251bGwpOwotCUFzc2VydCgh aXNudWxsKTsKLQotCXJldHVybiBEYXR1bUdldEJvb2woZGF0KTsKLX0KLQogLyoKICAqIEltcG9y dCBhIGZvcmVpZ24gc2NoZW1hCiAgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3NxbC9wb3N0Z3Jlc19mZHcuc3FsIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVz X2Zkdy5zcWwKaW5kZXggZGZjNThiZWIwZDIuLjYyNzE3NzEyM2IzIDEwMDY0NAotLS0gYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbAorKysgYi9jb250cmliL3Bvc3Rn cmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbApAQCAtNDU4NCw2ICs0NTg0LDM4IEBAIEFOQUxZ WkUgZHRlc3RfdGFibGU7CiAKIEFOQUxZWkUgVkVSQk9TRSBkdGVzdF9mdGFibGU7ICAgICAgICAg ICAgIC0tIHNob3VsZCB3b3JrCiAKKy0tIGR0ZXN0X2Z0YWJsZXMgc3RhdHMgc2hvdWxkIG5vdyBl eGFjdGx5IG1hdGNoIGR0ZXN0X3RhYmxlCistLSBjb21wYXJlIHRoZSByb3djb3VudHMsIHNob3Vs ZCBnZXQgMCByb3dzIGJhY2sKK1NFTEVDVCBDT1VOVCgqKSBGUk9NIHBnX3N0YXRzCitXSEVSRSBz Y2hlbWFuYW1lID0gJ3B1YmxpYycgQU5EIHRhYmxlbmFtZSA9ICdkdGVzdF90YWJsZScKK0VYQ0VQ VAorU0VMRUNUIENPVU5UKCopIEZST00gcGdfc3RhdHMKK1dIRVJFIHNjaGVtYW5hbWUgPSAncHVi bGljJyBBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisKKy0tIGNvbXBhcmUgdmFsdWVz LCBzaG91bGQgbWF0Y2gKK1NFTEVDVCByZWxwYWdlcywgcmVsdHVwbGVzCitGUk9NIHBnX2NsYXNz CitXSEVSRSBvaWQgPSAncHVibGljLmR0ZXN0X3RhYmxlJzo6cmVnY2xhc3MKK0VYQ0VQVAorU0VM RUNUIHJlbHBhZ2VzLCByZWx0dXBsZXMKK0ZST00gcGdfY2xhc3MKK1dIRVJFIG9pZCA9ICdwdWJs aWMuZHRlc3RfZnRhYmxlJzo6cmVnY2xhc3M7CisKKy0tIHRlc3Qgb25seSBhIGZldyBzdGF0cyBj b2x1bW5zIGNvbW1vbiB0byBpbnRlZ2VyIHR5cGVzCitTRUxFQ1QgYXR0bmFtZSwgaW5oZXJpdGVk LCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5jdCwKKyAgbW9zdF9jb21tb25fdmFsczo6 dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFzLAorICBoaXN0b2dyYW1fYm91bmRzOjp0ZXh0 IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19zdGF0cworV0hFUkUgc2NoZW1hbmFtZSA9ICdw dWJsaWMnCitBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X3RhYmxlJworRVhDRVBUCitTRUxFQ1QgYXR0 bmFtZSwgaW5oZXJpdGVkLCBudWxsX2ZyYWMsIGF2Z193aWR0aCwgbl9kaXN0aW5jdCwKKyAgbW9z dF9jb21tb25fdmFsczo6dGV4dCBhcyBtY3YsIG1vc3RfY29tbW9uX2ZyZXFzLAorICBoaXN0b2dy YW1fYm91bmRzOjp0ZXh0IGFzIGhiLCBjb3JyZWxhdGlvbgorRlJPTSBwZ19zdGF0cworV0hFUkUg c2NoZW1hbmFtZSA9ICdwdWJsaWMnCitBTkQgdGFibGVuYW1lID0gJ2R0ZXN0X2Z0YWJsZSc7CisK IC0tIGNsZWFudXAKIERST1AgRk9SRUlHTiBUQUJMRSBzaW1wb3J0X2Z0YWJsZTsKIERST1AgRk9S RUlHTiBUQUJMRSBzaW1wb3J0X2Z2aWV3OwotLSAKMi41NC4wCgo= --000000000000fb325206548dca0e--