Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nL3Jk-0005oV-3H for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Feb 2022 13:29:00 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nL3Ji-0002lA-1h for pgsql-hackers@arkaria.postgresql.org; Fri, 18 Feb 2022 13:28:58 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nL3Jh-0002kU-4b for pgsql-hackers@lists.postgresql.org; Fri, 18 Feb 2022 13:28:57 +0000 Received: from mail-ed1-x530.google.com ([2a00:1450:4864:20::530]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nL3Jd-0004Wv-54 for pgsql-hackers@lists.postgresql.org; Fri, 18 Feb 2022 13:28:56 +0000 Received: by mail-ed1-x530.google.com with SMTP id m17so15416589edc.13 for ; Fri, 18 Feb 2022 05:28:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=enterprisedb.com; s=google; h=message-id:date:mime-version:user-agent:subject:content-language :from:to:cc:references:in-reply-to; bh=ZOtmkaJtORwcUDruxJkHIDUTn0wU6d+lVf9K/RPdd1s=; b=baz/avTSJoxHJMx+sfs56jMgRkO6xei7Z2WY0dZwB8xPxM0eIy4hvEK+TVd3N0IR98 b809oihKFo1ZFp+JzKSiTh48z0NaGfRA1Oq1wM0r7amBkniHLQG06EJj+3ejCorbTJqw abCV1M5eu7kGFrL6HIDCZn/uXLH5xcPGW2qtMrjGWMcoiKjF5vVGpLZFSFZA2AiTNew9 3i4icH0coKZoHcQW2HLvEC6JJKqyseSwWV62piXEVZEX2WQe0YwIDGzq0CzMqFEbEiHV Hwx474p+0rDWU6AufLa84iOCYxYo2IOAn7ekBUKceYR7zAy9ladJIDEUzPCNyCSTgm5M YXEQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:message-id:date:mime-version:user-agent:subject :content-language:from:to:cc:references:in-reply-to; bh=ZOtmkaJtORwcUDruxJkHIDUTn0wU6d+lVf9K/RPdd1s=; b=O+MhDN5sWvl5Jbde7S1Cb6rlCYtoG8QcMkEGEB6EDhWYwLxHz+nsAuVrqyzxT06GE0 jcMgsBmdCadtHLIlPj8qgHxyT+2G3Lj2PKFT4PSvbQHScJYsYF1ckeVtlmO1o0B0zgUG 3FvGOKWvuHDcAr/5Qks+MnMHYBBrjHTdzwQB7gapn0vWiQMnHz3YWOQtBuHY+U6Brgqd sk2Rw+FpKHCyWpYbJRsknLDUwp3fsa2l6fRC44z/YSWkrl0vBaVqfAzOTI+wEXARWM7S 45yzUs6Xnl9aDW/BhLtme0nGRbllxgaksBoIYFEQI5vN0W+y4yBF3JDdrvMlBhF1wyhb gjHA== X-Gm-Message-State: AOAM533BPWUxanuhYiPBBpgLMMJK6RHPJPqsYJv9CDaGB4K3UqI9pNee Y9Hv1TC1EHpazQlQ/zIM5bCfML67fVr9x/jS2TMIEJW4MpfddRGMTSRpd67dxc3K7zT3rt9Kd9d l/5WTYGXWcxx7fg7erpJjGF+xs5H61VuP+JiWiwdcLhOYnTWJPrjywDTooWlPNXVvxoYS5jPK0/ VFsNEt8FdTbZONfrQ1864yypViWZWw4qVoCrhTj0rlWAJmiZ7aENZL X-Google-Smtp-Source: ABdhPJzJxXUpROIgMQtS+w23fXjXcjd9RK4BKiWIlpb27Jw4izUkqsvjPTK/rEitmI/9oEBynEVWCA== X-Received: by 2002:a05:6402:13c2:b0:410:8140:3178 with SMTP id a2-20020a05640213c200b0041081403178mr8133722edx.299.1645190931458; Fri, 18 Feb 2022 05:28:51 -0800 (PST) Received: from [10.137.0.18] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id u18sm2236253eje.37.2022.02.18.05.28.49 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 18 Feb 2022 05:28:50 -0800 (PST) Content-Type: multipart/mixed; boundary="------------PDzFGasZvdaPhc8BGasy13HK" Message-ID: <84afe85f-2aa0-5aef-fa4a-59759afc03fb@enterprisedb.com> Date: Fri, 18 Feb 2022 14:28:48 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.5.0 Subject: Re: postgres_fdw: using TABLESAMPLE to collect remote sample Content-Language: en-US From: Tomas Vondra To: Robert Haas , Tom Lane Cc: PostgreSQL Hackers References: <151e835f-55d6-ddbc-b5b4-07ee606aba44@enterprisedb.com> <2080021.1644601183@sss.pgh.pa.us> <2082308.1644602761@sss.pgh.pa.us> <60c4dc7c-82e8-ab04-a938-d7b7c5ee75f0@enterprisedb.com> In-Reply-To: <60c4dc7c-82e8-ab04-a938-d7b7c5ee75f0@enterprisedb.com> X-CLOUD-SEC-AV-Info: enterprisedb,google_mail,monitor X-CLOUD-SEC-AV-Sent: true X-Gm-Spam: 0 X-Gm-Phishy: 0 List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk This is a multi-part message in MIME format. --------------PDzFGasZvdaPhc8BGasy13HK Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit Hi, here's a slightly updated version of the patch series. The 0001 part adds tracking of server_version_num, so that it's possible to enable other features depending on it. In this case it's used to decide whether TABLESAMPLE is supported. The 0002 part modifies the sampling. I realized we can do something similar even on pre-9.5 releases, by running "WHERE random() < $1". Not perfect, because it still has to read the whole table, but still better than also sending it over the network. There's a "sample" option for foreign server/table, which can be used to disable the sampling if needed. A simple measurement on a table with 10M rows, on localhost. old: 6600ms random: 450ms tablesample: 40ms (system) tablesample: 200ms (bernoulli) Local analyze takes ~190ms, so that's quite close. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------PDzFGasZvdaPhc8BGasy13HK Content-Type: text/x-patch; charset=UTF-8; name="0001-postgres_fdw-track-server-version-for-conne-20220218.patch" Content-Disposition: attachment; filename*0="0001-postgres_fdw-track-server-version-for-conne-20220218.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA2NTI0ZjhjNmYwZGIxM2M1ZGNhMDQzOGJkZGExOTRlZTViZWRlYmJiIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxOCBGZWIgMjAyMiAwMTozMjoyNSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMS8yXSBwb3N0Z3Jlc19mZHc6IHRyYWNrIHNlcnZlciB2ZXJzaW9uIGZv ciBjb25uZWN0aW9ucwoKVG8gYWxsb3cgdXNpbmcgZmVhdHVyZXMgdGhhdCBvbmx5IGV4aXN0 IG9uIG5ldyBQb3N0Z3JlcyB2ZXJzaW9ucywgd2UKbmVlZCBzb21lIGluZm9ybWF0aW9uIGFi b3V0IHZlcnNpb24gb2YgdGhlIHJlbW90ZSBub2RlLiBXZSBzaW1wbHkKcmVxdWVzdCBzZXJ2 ZXJfdmVyc2lvbl9udW0gZnJvbSB0aGUgcmVtb3RlIG5vZGUuIFdlIG9ubHkgZmV0Y2ggaXQg aWYKdmVyc2lvbiBudW1iZXIgaXMgYWN0dWFsbHkgbmVlZGVkLCBhbmQgd2UgY2FjaGUgaXQu Ci0tLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jICAgfCA0NCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmggfCAgMiArKwogMiBmaWxlcyBjaGFuZ2VkLCA0NiBpbnNlcnRpb25zKCspCgpkaWZm IC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCmluZGV4IGY3NTNjNmUyMzI0Li4zZWEyOTQ4ZDNl YyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvY29ubmVjdGlvbi5jCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2Nvbm5lY3Rpb24uYwpAQCAtMjc5LDYgKzI3OSw1MCBA QCBHZXRDb25uZWN0aW9uKFVzZXJNYXBwaW5nICp1c2VyLCBib29sIHdpbGxfcHJlcF9zdG10 LCBQZ0Zkd0Nvbm5TdGF0ZSAqKnN0YXRlKQogCXJldHVybiBlbnRyeS0+Y29ubjsKIH0KIAor LyoKKyAqIERldGVybWluZSByZW1vdGUgc2VydmVyIHZlcnNpb24gKGFzIGFuIGludCB2YWx1 ZSkuCisgKgorICogVGhlIHZhbHVlIGlzIGRldGVybWluZWQgb25seSBvbmNlIGFuZCB0aGVu IGNhY2hlZCBpbiBQZ0Zkd0Nvbm5TdGF0ZS4KKyAqLworaW50CitHZXRTZXJ2ZXJWZXJzaW9u KFBHY29ubiAqY29ubiwgUGdGZHdDb25uU3RhdGUgKnN0YXRlKQoreworCVBHcmVzdWx0ICAg KnZvbGF0aWxlIHJlcyA9IE5VTEw7CisKKwkvKgorCSAqIElmIHdlIGFscmVhZHkga25vdyBz ZXJ2ZXIgdmVyc2lvbiBmb3IgdGhpcyBjb25uZWN0aW9uLCB3ZSdyZSBkb25lLgorCSAqLwor CWlmIChzdGF0ZS0+c2VydmVyX3ZlcnNpb25fbnVtICE9IDApCisJCXJldHVybiBzdGF0ZS0+ c2VydmVyX3ZlcnNpb25fbnVtOworCisJLyogUEdyZXN1bHQgbXVzdCBiZSByZWxlYXNlZCBi ZWZvcmUgbGVhdmluZyB0aGlzIGZ1bmN0aW9uLiAqLworCVBHX1RSWSgpOworCXsKKwkJY2hh cgkgICAqbGluZTsKKworCQkvKgorCQkgKiBFeGVjdXRlIEVYUExBSU4gcmVtb3RlbHkuCisJ CSAqLworCQlyZXMgPSBwZ2Zkd19leGVjX3F1ZXJ5KGNvbm4sICJTSE9XIHNlcnZlcl92ZXJz aW9uX251bSIsIE5VTEwpOworCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JFU19U VVBMRVNfT0spCisJCQlwZ2Zkd19yZXBvcnRfZXJyb3IoRVJST1IsIHJlcywgY29ubiwgZmFs c2UsICJTSE9XIHNlcnZlcl92ZXJzaW9uX251bSIpOworCisJCS8qCisJCSAqIEV4dHJhY3Qg dGhlIHNlcnZlciB2ZXJzaW9uIG51bWJlci4KKwkJICovCisJCWxpbmUgPSBQUWdldHZhbHVl KHJlcywgMCwgMCk7CisJCXN0YXRlLT5zZXJ2ZXJfdmVyc2lvbl9udW0gPSBzdHJ0b2wobGlu ZSwgTlVMTCwgMTApOworCX0KKwlQR19GSU5BTExZKCk7CisJeworCQlpZiAocmVzKQorCQkJ UFFjbGVhcihyZXMpOworCX0KKwlQR19FTkRfVFJZKCk7CisKKwlyZXR1cm4gc3RhdGUtPnNl cnZlcl92ZXJzaW9uX251bTsKK30KKwogLyoKICAqIFJlc2V0IGFsbCB0cmFuc2llbnQgc3Rh dGUgZmllbGRzIGluIHRoZSBjYWNoZWQgY29ubmVjdGlvbiBlbnRyeSBhbmQKICAqIGVzdGFi bGlzaCBuZXcgY29ubmVjdGlvbiB0byB0aGUgcmVtb3RlIHNlcnZlci4KZGlmZiAtLWdpdCBh L2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oIGIvY29udHJpYi9wb3N0Z3Jl c19mZHcvcG9zdGdyZXNfZmR3LmgKaW5kZXggOGFlNzllOTdlNDQuLjE2ODdjNjJkZjJkIDEw MDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaApAQCAtMTMyLDYgKzEzMiw3IEBA IHR5cGVkZWYgc3RydWN0IFBnRmR3UmVsYXRpb25JbmZvCiB0eXBlZGVmIHN0cnVjdCBQZ0Zk d0Nvbm5TdGF0ZQogewogCUFzeW5jUmVxdWVzdCAqcGVuZGluZ0FyZXE7CS8qIHBlbmRpbmcg YXN5bmMgcmVxdWVzdCAqLworCWludAkJCXNlcnZlcl92ZXJzaW9uX251bTsJLyogcmVtb3Rl IHNlcnZlciB2ZXJzaW9uICovCiB9IFBnRmR3Q29ublN0YXRlOwogCiAvKiBpbiBwb3N0Z3Jl c19mZHcuYyAqLwpAQCAtMTQzLDYgKzE0NCw3IEBAIGV4dGVybiB2b2lkIHByb2Nlc3NfcGVu ZGluZ19yZXF1ZXN0KEFzeW5jUmVxdWVzdCAqYXJlcSk7CiBleHRlcm4gUEdjb25uICpHZXRD b25uZWN0aW9uKFVzZXJNYXBwaW5nICp1c2VyLCBib29sIHdpbGxfcHJlcF9zdG10LAogCQkJ CQkJCSBQZ0Zkd0Nvbm5TdGF0ZSAqKnN0YXRlKTsKIGV4dGVybiB2b2lkIFJlbGVhc2VDb25u ZWN0aW9uKFBHY29ubiAqY29ubik7CitleHRlcm4gaW50IEdldFNlcnZlclZlcnNpb24oUEdj b25uICpjb25uLCBQZ0Zkd0Nvbm5TdGF0ZSAqc3RhdGUpOwogZXh0ZXJuIHVuc2lnbmVkIGlu dCBHZXRDdXJzb3JOdW1iZXIoUEdjb25uICpjb25uKTsKIGV4dGVybiB1bnNpZ25lZCBpbnQg R2V0UHJlcFN0bXROdW1iZXIoUEdjb25uICpjb25uKTsKIGV4dGVybiB2b2lkIGRvX3NxbF9j b21tYW5kKFBHY29ubiAqY29ubiwgY29uc3QgY2hhciAqc3FsKTsKLS0gCjIuMzQuMQoK --------------PDzFGasZvdaPhc8BGasy13HK Content-Type: text/x-patch; charset=UTF-8; name="0002-postgres_fdw-sample-data-on-remote-node-for-20220218.patch" Content-Disposition: attachment; filename*0="0002-postgres_fdw-sample-data-on-remote-node-for-20220218.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA1NDY2NTdkZDBkM2FiM2JlYmRiMTE0NTc4NWM2MjgwOWI3OGU3NjQ0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxOCBGZWIgMjAyMiAwMDozMzoxOSArMDEwMApTdWJq ZWN0OiBbUEFUQ0ggMi8yXSBwb3N0Z3Jlc19mZHc6IHNhbXBsZSBkYXRhIG9uIHJlbW90ZSBu b2RlIGZvciBBTkFMWVpFCgpXaGVuIHBlcmZvcm1pbmcgQU5BTFlaRSBvbiBhIGZvcmVpZ24g dGFibGVzLCB3ZSBuZWVkIHRvIGNvbGxlY3Qgc2FtcGxlCm9mIHJvd3MuIFVudGlsIG5vdywg d2Ugc2ltcGx5IHJlYWQgYWxsIGRhdGEgZnJvbSB0aGUgcmVtb3RlIG5vZGUgYW5kCmJ1aWx0 IHRoZSBzYW1wbGUgbG9jYWxseS4gVGhhdCBpcyB2ZXJ5IGV4cGVuc2l2ZSwgZXNwZWNpYWxs eSBpbiB0ZXJtcyBvZgpuZXR3b3JrIHRyYWZmaWMgZXRjLiBCdXQgaXQncyBwb3NzaWJsZSB0 byBtb3ZlIHRoZSBzYW1wbGluZyB0byB0aGUKcmVtb3RlIG5vZGUsIGFuZCB1c2UgZWl0aGVy IFRBQkxFU0FNUExFIG9yIHNpbXBseSByYW5kb20oKSB0byB0cmFuc2ZlcgpqdXN0IG11Y2gg c21hbGxlciBhbW91bnQgb2YgZGF0YS4KClNvIHdlIHJ1biBlaXRoZXIKCiAgIFNFTEVDVCAq IEZST00gdGFibGUgVEFCTEVTQU1QTEUgU1lTVEVNKGZyYWN0aW9uKQoKb3IKCiAgU0VMRUNU ICogRlJPTSB0YWJsZSBXSEVSRSByYW5kb20oKSA8IGZyYWN0aW9uCgpkZXBlbmRpbmcgb24g dGhlIHNlcnZlciB2ZXJzaW9uIChUQUJMRVNBTVBMRSBpcyBzdXBwb3J0ZWQgc2luY2UgOS41 KS4KClRvIGRvIHRoYXQsIHdlIG5lZWQgdG8gZGV0ZXJtaW5lIHdoYXQgZnJhY3Rpb24gb2Yg dGhlIHRhYmxlIHRvIHNhbXBsZS4KV2UgcmVseSBvbiByZWx0dXBsZXMgKGZldGNoZWQgZnJv bSB0aGUgcmVtb3RlIG5vZGUpIHRvIGJlIHN1ZmZpY2llbnRseQphY2N1cmF0ZSBhbmQgdXAg dG8gZGF0ZSwgYW5kIGNhbGN1bGF0ZSB0aGUgZnJhY3Rpb24gYmFzZWQgb24gdGhhdC4gV2UK aW5jcmVhc2UgdGhlIHNhbXBsZSBzaXplIGEgYml0IChpbiBjYXNlIHRoZSB0YWJsZSBzaHJ1 bmspLCBhbmQgd2Ugc3RpbGwKZG8gdGhlIHJlc2Vydm9pciBzYW1wbGluZyAoaW4gY2FzZSBp dCBncmV3KS4KClVzaW5nIHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBhbGxvdyBzcGVjaWZ5aW5n IHNhbXBsZSBzaXplIGluIHJvd3MsCndpdGhvdXQgZGV0ZXJtaW5pbmcgc2FtcGxpbmcgcmF0 ZS4gQnV0IHRoZSBzYW1wbGluZyBtZXRob2QgbWF5IG5vdCBiZQppbnN0YWxsZWQsIGFuZCB3 ZSdkIHN0aWxsIGhhdmUgdG8gZGV0ZXJtaW5lIHRoZSByZWxhdGlvbiBzaXplLgoKVGhpcyBh ZGRzICdzYW1wbGUnIG9wdGlvbiBmb3IgcmVtb3RlIHNlcnZlcnMgLyB0YWJsZXMuIEJ5IGRl ZmF1bHQsIGl0J3MKc2V0IHRvICd0cnVlJyB3aGljaCBlbmFibGVzIHJlbW90ZSBzYW1wbGlu Zy4gU2V0dGluZyBpdCB0byAnZmFsc2UnIHVzZXMKdGhlIG9sZCBhcHByb2FjaCBvZiBmZXRj aGluZyBldmVyeXRoaW5nIGFuZCBzYW1wbGluZyBsb2NhbGx5LgotLS0KIGNvbnRyaWIvcG9z dGdyZXNfZmR3L2RlcGFyc2UuYyAgICAgIHwgMTUyICsrKysrKysrKysrKysrKysrKysrKysr KysrKysKIGNvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jICAgICAgIHwgICA3ICstCiBj b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyB8IDE0NSArKysrKysrKysrKysr KysrKysrKysrKysrLQogY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmggfCAg IDcgKysKIDQgZmlsZXMgY2hhbmdlZCwgMzA2IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25z KC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCmluZGV4IGJmMTJlYWMwMjg4Li4zMmYyYzBk NWZiMyAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCisrKyBi L2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwpAQCAtMjI2Nyw2ICsyMjY3LDI2IEBA IGRlcGFyc2VBbmFseXplU2l6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsKQog CWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiOjpwZ19jYXRhbG9nLnJlZ2NsYXNzKSAvICVkIiwg QkxDS1NaKTsKIH0KIAorLyoKKyAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50IHRvIGFj cXVpcmUgbnVtYmUgb2Ygcm93cyBvZiBnaXZlbiByZWxhdGlvbi4KKyAqCisgKiBOb3RlOiBN YXliZSB0aGlzIHNob3VsZCBjb21wYXJlIHJlbHBhZ2VzIGFuZCBjdXJyZW50IHJlbGF0aW9u IHNpemUKKyAqIGFuZCBhZGp1c3QgcmVsdHVwbGVzIGFjY29yZGluZ2x5PworICovCit2b2lk CitkZXBhcnNlQW5hbHl6ZVR1cGxlc1NxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs KQoreworCVN0cmluZ0luZm9EYXRhIHJlbG5hbWU7CisKKwkvKiBXZSdsbCBuZWVkIHRoZSBy ZW1vdGUgcmVsYXRpb24gbmFtZSBhcyBhIGxpdGVyYWwuICovCisJaW5pdFN0cmluZ0luZm8o JnJlbG5hbWUpOworCWRlcGFyc2VSZWxhdGlvbigmcmVsbmFtZSwgcmVsKTsKKworCWFwcGVu ZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiU0VMRUNUIHJlbHR1cGxlcyBGUk9NIHBnX2NhdGFs b2cucGdfY2xhc3MgV0hFUkUgb2lkID0gIik7CisJZGVwYXJzZVN0cmluZ0xpdGVyYWwoYnVm LCByZWxuYW1lLmRhdGEpOworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiOjpwZ19j YXRhbG9nLnJlZ2NsYXNzIik7Cit9CisKIC8qCiAgKiBDb25zdHJ1Y3QgU0VMRUNUIHN0YXRl bWVudCB0byBhY3F1aXJlIHNhbXBsZSByb3dzIG9mIGdpdmVuIHJlbGF0aW9uLgogICoKQEAg LTIzMjgsNiArMjM0OCwxMzggQEAgZGVwYXJzZUFuYWx5emVTcWwoU3RyaW5nSW5mbyBidWYs IFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycykKIAlkZXBhcnNlUmVsYXRp b24oYnVmLCByZWwpOwogfQogCisvKgorICogQ29uc3RydWN0IFNFTEVDVCBzdGF0ZW1lbnQg dG8gYWNxdWlyZSBzYW1wbGUgcm93cyBvZiBnaXZlbiByZWxhdGlvbiwKKyAqIGJ5IHNhbXBs aW5nIGEgZnJhY3Rpb24gb2YgdGhlIHRhYmxlIHVzaW5nIFRBQkxFU0FNUExFIFNZU1RFTS4K KyAqCisgKiBTRUxFQ1QgY29tbWFuZCBpcyBhcHBlbmRlZCB0byBidWYsIGFuZCBsaXN0IG9m IGNvbHVtbnMgcmV0cmlldmVkCisgKiBpcyByZXR1cm5lZCB0byAqcmV0cmlldmVkX2F0dHJz LgorICoKKyAqIE5vdGU6IFdlIGNvdWxkIGFsbG93IHNlbGVjdGluZyBzeXN0ZW0vYmVybm91 bGxpLCBhbmQgbWF5YmUgZXZlbiB0aGUKKyAqIG9wdGlvbmFsIFRTTSBtb2R1bGVzIChlc3Bl Y2lhbGx5IHRzbV9zeXN0ZW1fcm93cyB3b3VsZCBoZWxwKS4KKyAqLwordm9pZAorZGVwYXJz ZUFuYWx5emVUYWJsZVNhbXBsZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLCBM aXN0ICoqcmV0cmlldmVkX2F0dHJzLCBkb3VibGUgc2FtcGxlX2ZyYWMpCit7CisJT2lkCQkJ cmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKHJlbCk7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBS ZWxhdGlvbkdldERlc2NyKHJlbCk7CisJaW50CQkJaTsKKwljaGFyCSAgICpjb2xuYW1lOwor CUxpc3QJICAgKm9wdGlvbnM7CisJTGlzdENlbGwgICAqbGM7CisJYm9vbAkJZmlyc3QgPSB0 cnVlOworCisJKnJldHJpZXZlZF9hdHRycyA9IE5JTDsKKworCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCAiU0VMRUNUICIpOworCWZvciAoaSA9IDA7IGkgPCB0dXBkZXNjLT5uYXR0 czsgaSsrKQorCXsKKwkJLyogSWdub3JlIGRyb3BwZWQgY29sdW1ucy4gKi8KKwkJaWYgKFR1 cGxlRGVzY0F0dHIodHVwZGVzYywgaSktPmF0dGlzZHJvcHBlZCkKKwkJCWNvbnRpbnVlOwor CisJCWlmICghZmlyc3QpCisJCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIiwgIik7 CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJLyogVXNlIGF0dHJpYnV0ZSBuYW1lIG9yIGNvbHVt bl9uYW1lIG9wdGlvbi4gKi8KKwkJY29sbmFtZSA9IE5hbWVTdHIoVHVwbGVEZXNjQXR0cih0 dXBkZXNjLCBpKS0+YXR0bmFtZSk7CisJCW9wdGlvbnMgPSBHZXRGb3JlaWduQ29sdW1uT3B0 aW9ucyhyZWxpZCwgaSArIDEpOworCisJCWZvcmVhY2gobGMsIG9wdGlvbnMpCisJCXsKKwkJ CURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJCWlmIChz dHJjbXAoZGVmLT5kZWZuYW1lLCAiY29sdW1uX25hbWUiKSA9PSAwKQorCQkJeworCQkJCWNv bG5hbWUgPSBkZWZHZXRTdHJpbmcoZGVmKTsKKwkJCQlicmVhazsKKwkJCX0KKwkJfQorCisJ CWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCBxdW90ZV9pZGVudGlmaWVyKGNvbG5hbWUp KTsKKworCQkqcmV0cmlldmVkX2F0dHJzID0gbGFwcGVuZF9pbnQoKnJldHJpZXZlZF9hdHRy cywgaSArIDEpOworCX0KKworCS8qIERvbid0IGdlbmVyYXRlIGJhZCBzeW50YXggZm9yIHpl cm8tY29sdW1uIHJlbGF0aW9uLiAqLworCWlmIChmaXJzdCkKKwkJYXBwZW5kU3RyaW5nSW5m b1N0cmluZyhidWYsICJOVUxMIik7CisKKwkvKgorCSAqIENvbnN0cnVjdCBGUk9NIGNsYXVz ZQorCSAqLworCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiIEZST00gIik7CisJZGVw YXJzZVJlbGF0aW9uKGJ1ZiwgcmVsKTsKKwlhcHBlbmRTdHJpbmdJbmZvKGJ1ZiwgIiBUQUJM RVNBTVBMRSBTWVNURU0oJWYpIiwgKDEwMC4wICogc2FtcGxlX2ZyYWMpKTsKK30KKworLyoK KyAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50IHRvIGFjcXVpcmUgc2FtcGxlIHJvd3Mg b2YgZ2l2ZW4gcmVsYXRpb24sCisgKiBieSBzYW1wbGluZyBhIGZyYWN0aW9uIG9mIHRoZSB0 YWJsZSB1c2luZyBUQUJMRVNBTVBMRSBTWVNURU0uCisgKgorICogU0VMRUNUIGNvbW1hbmQg aXMgYXBwZW5kZWQgdG8gYnVmLCBhbmQgbGlzdCBvZiBjb2x1bW5zIHJldHJpZXZlZAorICog aXMgcmV0dXJuZWQgdG8gKnJldHJpZXZlZF9hdHRycy4KKyAqCisgKiBOb3RlOiBXZSBjb3Vs ZCBhbGxvdyBzZWxlY3Rpbmcgc3lzdGVtL2Jlcm5vdWxsaSwgYW5kIG1heWJlIGV2ZW4gdGhl CisgKiBvcHRpb25hbCBUU00gbW9kdWxlcyAoZXNwZWNpYWxseSB0c21fc3lzdGVtX3Jvd3Mg d291bGQgaGVscCkuCisgKi8KK3ZvaWQKK2RlcGFyc2VBbmFseXplTGVnYWN5U2FtcGxlU3Fs KFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMs IGRvdWJsZSBzYW1wbGVfZnJhYykKK3sKKwlPaWQJCQlyZWxpZCA9IFJlbGF0aW9uR2V0UmVs aWQocmVsKTsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsKTsK KwlpbnQJCQlpOworCWNoYXIJICAgKmNvbG5hbWU7CisJTGlzdAkgICAqb3B0aW9uczsKKwlM aXN0Q2VsbCAgICpsYzsKKwlib29sCQlmaXJzdCA9IHRydWU7CisKKwkqcmV0cmlldmVkX2F0 dHJzID0gTklMOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJTRUxFQ1QgIik7 CisJZm9yIChpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBpKyspCisJeworCQkvKiBJZ25v cmUgZHJvcHBlZCBjb2x1bW5zLiAqLworCQlpZiAoVHVwbGVEZXNjQXR0cih0dXBkZXNjLCBp KS0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJaWYgKCFmaXJzdCkKKwkJCWFw cGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJZmlyc3QgPSBmYWxzZTsKKwor CQkvKiBVc2UgYXR0cmlidXRlIG5hbWUgb3IgY29sdW1uX25hbWUgb3B0aW9uLiAqLworCQlj b2xuYW1lID0gTmFtZVN0cihUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpLT5hdHRuYW1lKTsK KwkJb3B0aW9ucyA9IEdldEZvcmVpZ25Db2x1bW5PcHRpb25zKHJlbGlkLCBpICsgMSk7CisK KwkJZm9yZWFjaChsYywgb3B0aW9ucykKKwkJeworCQkJRGVmRWxlbSAgICAqZGVmID0gKERl ZkVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJj b2x1bW5fbmFtZSIpID09IDApCisJCQl7CisJCQkJY29sbmFtZSA9IGRlZkdldFN0cmluZyhk ZWYpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSkpOworCisJCSpyZXRyaWV2ZWRfYXR0 cnMgPSBsYXBwZW5kX2ludCgqcmV0cmlldmVkX2F0dHJzLCBpICsgMSk7CisJfQorCisJLyog RG9uJ3QgZ2VuZXJhdGUgYmFkIHN5bnRheCBmb3IgemVyby1jb2x1bW4gcmVsYXRpb24uICov CisJaWYgKGZpcnN0KQorCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIk5VTEwiKTsK KworCS8qCisJICogQ29uc3RydWN0IEZST00gY2xhdXNlCisJICovCisJYXBwZW5kU3RyaW5n SW5mb1N0cmluZyhidWYsICIgRlJPTSAiKTsKKwlkZXBhcnNlUmVsYXRpb24oYnVmLCByZWwp OworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFdIRVJFIHJhbmRvbSgpIDwgJWYiLCBzYW1w bGVfZnJhYyk7Cit9CisKIC8qCiAgKiBDb25zdHJ1Y3QgYSBzaW1wbGUgIlRSVU5DQVRFIHJl bCIgc3RhdGVtZW50CiAgKi8KZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29w dGlvbi5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMKaW5kZXggZmMzY2U2YTUz YTIuLjAyYmU0OGVjODJjIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRp b24uYworKysgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYwpAQCAtMTIxLDcgKzEy MSw4IEBAIHBvc3RncmVzX2Zkd192YWxpZGF0b3IoUEdfRlVOQ1RJT05fQVJHUykKIAkJCXN0 cmNtcChkZWYtPmRlZm5hbWUsICJ1cGRhdGFibGUiKSA9PSAwIHx8CiAJCQlzdHJjbXAoZGVm LT5kZWZuYW1lLCAidHJ1bmNhdGFibGUiKSA9PSAwIHx8CiAJCQlzdHJjbXAoZGVmLT5kZWZu YW1lLCAiYXN5bmNfY2FwYWJsZSIpID09IDAgfHwKLQkJCXN0cmNtcChkZWYtPmRlZm5hbWUs ICJrZWVwX2Nvbm5lY3Rpb25zIikgPT0gMCkKKwkJCXN0cmNtcChkZWYtPmRlZm5hbWUsICJr ZWVwX2Nvbm5lY3Rpb25zIikgPT0gMCB8fAorCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgInNh bXBsZSIpID09IDApCiAJCXsKIAkJCS8qIHRoZXNlIGFjY2VwdCBvbmx5IGJvb2xlYW4gdmFs dWVzICovCiAJCQkodm9pZCkgZGVmR2V0Qm9vbGVhbihkZWYpOwpAQCAtMjUyLDYgKzI1Mywx MCBAQCBJbml0UGdGZHdPcHRpb25zKHZvaWQpCiAJCXsia2VlcF9jb25uZWN0aW9ucyIsIEZv cmVpZ25TZXJ2ZXJSZWxhdGlvbklkLCBmYWxzZX0sCiAJCXsicGFzc3dvcmRfcmVxdWlyZWQi LCBVc2VyTWFwcGluZ1JlbGF0aW9uSWQsIGZhbHNlfSwKIAorCQkvKiBzYW1wbGluZyBpcyBh dmFpbGFibGUgb24gYm90aCBzZXJ2ZXIgYW5kIHRhYmxlICovCisJCXsic2FtcGxlIiwgRm9y ZWlnblNlcnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKKwkJeyJzYW1wbGUiLCBGb3JlaWduVGFi bGVSZWxhdGlvbklkLCBmYWxzZX0sCisKIAkJLyoKIAkJICogc3NsY2VydCBhbmQgc3Nsa2V5 IGFyZSBpbiBmYWN0IGxpYnBxIG9wdGlvbnMsIGJ1dCB3ZSByZXBlYXQgdGhlbQogCQkgKiBo ZXJlIHRvIGFsbG93IHRoZW0gdG8gYXBwZWFyIGluIGJvdGggZm9yZWlnbiBzZXJ2ZXIgY29u dGV4dCAod2hlbgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNf ZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYwppbmRleCA1NjY1 NDg0NGU4Zi4uNmVhZmU1MjBjNGUgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zk dy5jCkBAIC00OTYxLDYgKzQ5NjEsNjggQEAgcG9zdGdyZXNBbmFseXplRm9yZWlnblRhYmxl KFJlbGF0aW9uIHJlbGF0aW9uLAogCXJldHVybiB0cnVlOwogfQogCisvKgorICogcG9zdGdy ZXNDb3VudFR1cGxlc0ZvckZvcmVpZ25UYWJsZQorICoJCUNvdW50IHR1cGxlcyBpbiBmb3Jl aWduIHRhYmxlIChqdXN0IGdldCBwZ19jbGFzcy5yZWx0dXBsZXMpLgorICoKKyAqIE5vdGU6 IEl0J3MgdW5jbGVhciBob3cgYWNjdXJhdGUgcmVsdHVwbGVzIGlzLCBtYXliZSBzaXplIHRo YXQgdXNpbmcKKyAqIHJlbHBhZ2VzIGFuZCBzaW1wbGUgYXNzdW1wdGlvbnMgKDEgdHVwbGVz IHBlciBwYWdlLCAuLi4pPyBVc2luZworICogdHNtX3N5c3RlbV9yb3dzIHdvbGQgbWFrZSB0 aGlzIHNvbWV3aGF0IHVubmVjZXNzYXJ5LgorICovCitzdGF0aWMgZG91YmxlCitwb3N0Z3Jl c0NvdW50VHVwbGVzRm9yRm9yZWlnblRhYmxlKFJlbGF0aW9uIHJlbGF0aW9uKQoreworCUZv cmVpZ25UYWJsZSAqdGFibGU7CisJVXNlck1hcHBpbmcgKnVzZXI7CisJUEdjb25uCSAgICpj b25uOworCVN0cmluZ0luZm9EYXRhIHNxbDsKKwlQR3Jlc3VsdCAgICp2b2xhdGlsZSByZXMg PSBOVUxMOworCWRvdWJsZQkJcmVsdHVwbGVzID0gLTE7CisKKwkvKgorCSAqIE5vdyB3ZSBo YXZlIHRvIGdldCB0aGUgbnVtYmVyIG9mIHBhZ2VzLiAgSXQncyBhbm5veWluZyB0aGF0IHRo ZSBBTkFMWVpFCisJICogQVBJIHJlcXVpcmVzIHVzIHRvIHJldHVybiB0aGF0IG5vdywgYmVj YXVzZSBpdCBmb3JjZXMgc29tZSBkdXBsaWNhdGlvbgorCSAqIG9mIGVmZm9ydCBiZXR3ZWVu IHRoaXMgcm91dGluZSBhbmQgcG9zdGdyZXNBY3F1aXJlU2FtcGxlUm93c0Z1bmMuICBCdXQK KwkgKiBpdCdzIHByb2JhYmx5IG5vdCB3b3J0aCByZWRlZmluaW5nIHRoYXQgQVBJIGF0IHRo aXMgcG9pbnQuCisJICovCisKKwkvKgorCSAqIEdldCB0aGUgY29ubmVjdGlvbiB0byB1c2Uu ICBXZSBkbyB0aGUgcmVtb3RlIGFjY2VzcyBhcyB0aGUgdGFibGUncworCSAqIG93bmVyLCBl dmVuIGlmIHRoZSBBTkFMWVpFIHdhcyBzdGFydGVkIGJ5IHNvbWUgb3RoZXIgdXNlci4KKwkg Ki8KKwl0YWJsZSA9IEdldEZvcmVpZ25UYWJsZShSZWxhdGlvbkdldFJlbGlkKHJlbGF0aW9u KSk7CisJdXNlciA9IEdldFVzZXJNYXBwaW5nKHJlbGF0aW9uLT5yZF9yZWwtPnJlbG93bmVy LCB0YWJsZS0+c2VydmVyaWQpOworCWNvbm4gPSBHZXRDb25uZWN0aW9uKHVzZXIsIGZhbHNl LCBOVUxMKTsKKworCS8qCisJICogQ29uc3RydWN0IGNvbW1hbmQgdG8gZ2V0IHBhZ2UgY291 bnQgZm9yIHJlbGF0aW9uLgorCSAqLworCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCWRlcGFy c2VBbmFseXplVHVwbGVzU3FsKCZzcWwsIHJlbGF0aW9uKTsKKworCS8qIEluIHdoYXQgZm9s bG93cywgZG8gbm90IHJpc2sgbGVha2luZyBhbnkgUEdyZXN1bHRzLiAqLworCVBHX1RSWSgp OworCXsKKwkJcmVzID0gcGdmZHdfZXhlY19xdWVyeShjb25uLCBzcWwuZGF0YSwgTlVMTCk7 CisJCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9IFBHUkVTX1RVUExFU19PSykKKwkJCXBn ZmR3X3JlcG9ydF9lcnJvcihFUlJPUiwgcmVzLCBjb25uLCBmYWxzZSwgc3FsLmRhdGEpOwor CisJCWlmIChQUW50dXBsZXMocmVzKSAhPSAxIHx8IFBRbmZpZWxkcyhyZXMpICE9IDEpCisJ CQllbG9nKEVSUk9SLCAidW5leHBlY3RlZCByZXN1bHQgZnJvbSBkZXBhcnNlQW5hbHl6ZVNp emVTcWwgcXVlcnkiKTsKKwkJcmVsdHVwbGVzID0gc3RydG9kKFBRZ2V0dmFsdWUocmVzLCAw LCAwKSwgTlVMTCk7CisJfQorCVBHX0ZJTkFMTFkoKTsKKwl7CisJCWlmIChyZXMpCisJCQlQ UWNsZWFyKHJlcyk7CisJfQorCVBHX0VORF9UUlkoKTsKKworCVJlbGVhc2VDb25uZWN0aW9u KGNvbm4pOworCisJcmV0dXJuIHJlbHR1cGxlczsKK30KKwogLyoKICAqIEFjcXVpcmUgYSBy YW5kb20gc2FtcGxlIG9mIHJvd3MgZnJvbSBmb3JlaWduIHRhYmxlIG1hbmFnZWQgYnkgcG9z dGdyZXNfZmR3LgogICoKQEAgLTQ5OTEsNiArNTA1MywxNSBAQCBwb3N0Z3Jlc0FjcXVpcmVT YW1wbGVSb3dzRnVuYyhSZWxhdGlvbiByZWxhdGlvbiwgaW50IGVsZXZlbCwKIAl1bnNpZ25l ZCBpbnQgY3Vyc29yX251bWJlcjsKIAlTdHJpbmdJbmZvRGF0YSBzcWw7CiAJUEdyZXN1bHQg ICAqdm9sYXRpbGUgcmVzID0gTlVMTDsKKwlMaXN0Q2VsbCAgICpsYzsKKwlQZ0Zkd0Nvbm5T dGF0ZSAqc3RhdGU7CisJaW50CQkJc2VydmVyX3ZlcnNpb25fbnVtOworCisJLyogc2FtcGxp bmcgZW5hYmxlZCBieSBkZWZhdWx0ICovCisJYm9vbAkJZG9fc2FtcGxlID0gdHJ1ZTsKKwli b29sCQl1c2VfdGFibGVzYW1wbGUgPSB0cnVlOworCWRvdWJsZQkJc2FtcGxlX2ZyYWMgPSAt MS4wOworCWRvdWJsZQkJcmVsdHVwbGVzOwogCiAJLyogSW5pdGlhbGl6ZSB3b3Jrc3BhY2Ug c3RhdGUgKi8KIAlhc3RhdGUucmVsID0gcmVsYXRpb247CkBAIC01MDE2LDcgKzUwODcsNjMg QEAgcG9zdGdyZXNBY3F1aXJlU2FtcGxlUm93c0Z1bmMoUmVsYXRpb24gcmVsYXRpb24sIGlu dCBlbGV2ZWwsCiAJdGFibGUgPSBHZXRGb3JlaWduVGFibGUoUmVsYXRpb25HZXRSZWxpZChy ZWxhdGlvbikpOwogCXNlcnZlciA9IEdldEZvcmVpZ25TZXJ2ZXIodGFibGUtPnNlcnZlcmlk KTsKIAl1c2VyID0gR2V0VXNlck1hcHBpbmcocmVsYXRpb24tPnJkX3JlbC0+cmVsb3duZXIs IHRhYmxlLT5zZXJ2ZXJpZCk7Ci0JY29ubiA9IEdldENvbm5lY3Rpb24odXNlciwgZmFsc2Us IE5VTEwpOworCWNvbm4gPSBHZXRDb25uZWN0aW9uKHVzZXIsIGZhbHNlLCAmc3RhdGUpOwor CisJLyogV2UnbGwgbmVlZCBzZXJ2ZXIgdmVyc2lvbiwgc28gZmV0Y2ggaXQgbm93LiAqLwor CXNlcnZlcl92ZXJzaW9uX251bSA9IEdldFNlcnZlclZlcnNpb24oY29ubiwgc3RhdGUpOwor CisJLyogZGlzYWJsZSB0YWJsZXNhbXBsZSBvbiBvbGQgcmVtb3RlIHNlcnZlcnMgKi8KKwlp ZiAoc2VydmVyX3ZlcnNpb25fbnVtIDwgOTUwMDApCisJCXVzZV90YWJsZXNhbXBsZSA9IGZh bHNlOworCisJLyoKKwkgKiBTaG91bGQgd2UgdXNlIFRBQkxFU0FNUExFIHRvIGNvbGxlY3Qg dGhlIHJlbW90ZSBzYW1wbGU/CisJICovCisJZm9yZWFjaChsYywgc2VydmVyLT5vcHRpb25z KQorCXsKKwkJRGVmRWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGxjKTsKKwor CQlpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgInNhbXBsZSIpID09IDApCisJCXsKKwkJCWRv X3NhbXBsZSA9IGRlZkdldEJvb2xlYW4oZGVmKTsKKwkJCWJyZWFrOworCQl9CisJfQorCWZv cmVhY2gobGMsIHRhYmxlLT5vcHRpb25zKQorCXsKKwkJRGVmRWxlbSAgICAqZGVmID0gKERl ZkVsZW0gKikgbGZpcnN0KGxjKTsKKworCQlpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgInNh bXBsZSIpID09IDApCisJCXsKKwkJCWRvX3NhbXBsZSA9IGRlZkdldEJvb2xlYW4oZGVmKTsK KwkJCWJyZWFrOworCQl9CisJfQorCisJaWYgKGRvX3NhbXBsZSkKKwl7CisJCXJlbHR1cGxl cyA9IHBvc3RncmVzQ291bnRUdXBsZXNGb3JGb3JlaWduVGFibGUocmVsYXRpb24pOworCisJ CWlmICgocmVsdHVwbGVzIDw9IDApIHx8ICh0YXJncm93cyA+PSByZWx0dXBsZXMpKQorCQkJ ZG9fc2FtcGxlID0gZmFsc2U7CisKKwkJc2FtcGxlX2ZyYWMgPSB0YXJncm93cyAvIHJlbHR1 cGxlczsKKworCQkvKiBMZXQncyBzYW1wbGUgYSBiaXQgbW9yZSwgd2UnbGwgcmVkdWNlIHRo ZSBzYW1wbGUgbG9jYWxseS4gKi8KKwkJc2FtcGxlX2ZyYWMgKj0gMS4yNTsKKworCQkvKiBT YW5pdHkgY2hlY2tzLiAqLworCQlzYW1wbGVfZnJhYyA9IE1pbigxLjAsIE1heCgwLjAsIHNh bXBsZV9mcmFjKSk7CisKKwkJLyoKKwkJICogV2hlbiBzYW1wbGluZyB0b28gbGFyZ2UgZnJh Y3Rpb24sIGp1c3QgcmVhZCBldmVyeXRoaW5nLgorCQkgKgorCQkgKiBYWFggSXQncyBub3Qg Y2xlYXIgd2hlcmUgZXhhY3RseSB0aGUgdGhyZXNob2xkIGlzLCB3aXRoIHNsb3cKKwkJICog bmV0d29yayBpdCBtYXkgYmUgY2hlYXBlciB0byBzYW1wbGUgZXZlbiA5MCUuCisJCSAqLwor CQlpZiAoc2FtcGxlX2ZyYWMgPiAwLjUpCisJCQlkb19zYW1wbGUgPSBmYWxzZTsKKwl9CiAK IAkvKgogCSAqIENvbnN0cnVjdCBjdXJzb3IgdGhhdCByZXRyaWV2ZXMgd2hvbGUgcm93cyBm cm9tIHJlbW90ZS4KQEAgLTUwMjQsMTQgKzUxNTEsMjEgQEAgcG9zdGdyZXNBY3F1aXJlU2Ft cGxlUm93c0Z1bmMoUmVsYXRpb24gcmVsYXRpb24sIGludCBlbGV2ZWwsCiAJY3Vyc29yX251 bWJlciA9IEdldEN1cnNvck51bWJlcihjb25uKTsKIAlpbml0U3RyaW5nSW5mbygmc3FsKTsK IAlhcHBlbmRTdHJpbmdJbmZvKCZzcWwsICJERUNMQVJFIGMldSBDVVJTT1IgRk9SICIsIGN1 cnNvcl9udW1iZXIpOwotCWRlcGFyc2VBbmFseXplU3FsKCZzcWwsIHJlbGF0aW9uLCAmYXN0 YXRlLnJldHJpZXZlZF9hdHRycyk7CisKKwlpZiAoZG9fc2FtcGxlICYmIHVzZV90YWJsZXNh bXBsZSkKKwkJZGVwYXJzZUFuYWx5emVUYWJsZVNhbXBsZVNxbCgmc3FsLCByZWxhdGlvbiwg JmFzdGF0ZS5yZXRyaWV2ZWRfYXR0cnMsIHNhbXBsZV9mcmFjKTsKKwllbHNlIGlmIChkb19z YW1wbGUpCisJCWRlcGFyc2VBbmFseXplTGVnYWN5U2FtcGxlU3FsKCZzcWwsIHJlbGF0aW9u LCAmYXN0YXRlLnJldHJpZXZlZF9hdHRycywgc2FtcGxlX2ZyYWMpOworCWVsc2UKKwkJZGVw YXJzZUFuYWx5emVTcWwoJnNxbCwgcmVsYXRpb24sICZhc3RhdGUucmV0cmlldmVkX2F0dHJz KTsKKworCWVsb2coV0FSTklORywgIlNRTDogJXMiLCBzcWwuZGF0YSk7CiAKIAkvKiBJbiB3 aGF0IGZvbGxvd3MsIGRvIG5vdCByaXNrIGxlYWtpbmcgYW55IFBHcmVzdWx0cy4gKi8KIAlQ R19UUlkoKTsKIAl7CiAJCWNoYXIJCWZldGNoX3NxbFs2NF07CiAJCWludAkJCWZldGNoX3Np emU7Ci0JCUxpc3RDZWxsICAgKmxjOwogCiAJCXJlcyA9IHBnZmR3X2V4ZWNfcXVlcnkoY29u biwgc3FsLmRhdGEsIE5VTEwpOwogCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVzKSAhPSBQR1JF U19DT01NQU5EX09LKQpAQCAtNTEyMCw3ICs1MjU0LDEwIEBAIHBvc3RncmVzQWNxdWlyZVNh bXBsZVJvd3NGdW5jKFJlbGF0aW9uIHJlbGF0aW9uLCBpbnQgZWxldmVsLAogCSp0b3RhbGRl YWRyb3dzID0gMC4wOwogCiAJLyogV2UndmUgcmV0cmlldmVkIGFsbCBsaXZpbmcgdHVwbGVz IGZyb20gZm9yZWlnbiBzZXJ2ZXIuICovCi0JKnRvdGFscm93cyA9IGFzdGF0ZS5zYW1wbGVy b3dzOworCWlmIChkb19zYW1wbGUpCisJCSp0b3RhbHJvd3MgPSByZWx0dXBsZXM7CisJZWxz ZQorCQkqdG90YWxyb3dzID0gYXN0YXRlLnNhbXBsZXJvd3M7CiAKIAkvKgogCSAqIEVtaXQg c29tZSBpbnRlcmVzdGluZyByZWxhdGlvbiBpbmZvCmRpZmYgLS1naXQgYS9jb250cmliL3Bv c3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3Rn cmVzX2Zkdy5oCmluZGV4IDE2ODdjNjJkZjJkLi41NGI2NTU2YjIwYyAxMDA2NDQKLS0tIGEv Y29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKKysrIGIvY29udHJpYi9wb3N0 Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKQEAgLTIxMCw4ICsyMTAsMTUgQEAgZXh0ZXJuIHZv aWQgZGVwYXJzZURpcmVjdERlbGV0ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUGxhbm5lckluZm8g KnJvb3QsCiAJCQkJCQkJCSAgIExpc3QgKnJldHVybmluZ0xpc3QsCiAJCQkJCQkJCSAgIExp c3QgKipyZXRyaWV2ZWRfYXR0cnMpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZUFuYWx5emVTaXpl U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZvaWQgZGVwYXJz ZUFuYWx5emVUdXBsZXNTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCk7CiBleHRl cm4gdm9pZCBkZXBhcnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVs LAogCQkJCQkJCSAgTGlzdCAqKnJldHJpZXZlZF9hdHRycyk7CitleHRlcm4gdm9pZCBkZXBh cnNlQW5hbHl6ZVRhYmxlU2FtcGxlU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWws CisJCQkJCQkJCQkJIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMsCisJCQkJCQkJCQkJIGRvdWJs ZSBzYW1wbGVfZnJhYyk7CitleHRlcm4gdm9pZCBkZXBhcnNlQW5hbHl6ZUxlZ2FjeVNhbXBs ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJCSAgTGlzdCAq KnJldHJpZXZlZF9hdHRycywKKwkJCQkJCQkJCQkgIGRvdWJsZSBzYW1wbGVfZnJhYyk7CiBl eHRlcm4gdm9pZCBkZXBhcnNlVHJ1bmNhdGVTcWwoU3RyaW5nSW5mbyBidWYsCiAJCQkJCQkJ ICAgTGlzdCAqcmVscywKIAkJCQkJCQkgICBEcm9wQmVoYXZpb3IgYmVoYXZpb3IsCi0tIAoy LjM0LjEKCg== --------------PDzFGasZvdaPhc8BGasy13HK--