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 1nMewR-0005Tt-Ui for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Feb 2022 23:51:36 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1nMewQ-0004s4-8h for pgsql-hackers@arkaria.postgresql.org; Tue, 22 Feb 2022 23:51:34 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1nMewP-0004rv-H2 for pgsql-hackers@lists.postgresql.org; Tue, 22 Feb 2022 23:51:33 +0000 Received: from mail-ed1-x52f.google.com ([2a00:1450:4864:20::52f]) by magus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.92) (envelope-from ) id 1nMewK-0000TC-CY for pgsql-hackers@lists.postgresql.org; Tue, 22 Feb 2022 23:51:33 +0000 Received: by mail-ed1-x52f.google.com with SMTP id i11so39128953eda.9 for ; Tue, 22 Feb 2022 15:51:27 -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=KSotoljR//XueiWl+lec2AMVQyPGr4TRFuowBqhfyIk=; b=kXlB4Gs/uFpqE+rReqdaVOkdhV14kdgMVXyvIM/QCRQ9H4T3CJtZp1gVAH5ppuPMIg TLKQHaXaUzik9QzadctvqVyCff8KmpacXuLrVQR2iKz23MWa4h+1a7ZsPq07236/lWqP YRP9gnlAOgdWifmKn9R1vrF9nOfLd/RTZPAgxVIACWlOSckYDJii7sNm60lj7Uyo+rC5 /w8HKNC01Ja6QpJdN+1zRtP3C+iBNuqONs8NCVIkCcVXhYswtP4bY3lMgrXWFbbEZ9+B ++AcRjArXagxQe5bAWA/Y1pptJCtCa8qjEU3pK7hoHhhJsTBN1MWSVv7mRXQzE9fn6Cq wGLg== 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=KSotoljR//XueiWl+lec2AMVQyPGr4TRFuowBqhfyIk=; b=DbWGEoArYWqs+FUJIkDqfRcG048v2NkPPeFaC9KsIdjqX2YEGSRYTG0vbdv/szq7nZ 8xWeEKFAkcyh0r0oI1P+ZVRTC+Qfa8XKs15PvMw9r6L+rMe0KoYyDCTQnsLcfi8fR2EW ZScGuq8vUXoiWzWKNmgt0ba/8eImiCS52slhnx7ogPAgZDuMHD34oU+RVDCCnYagrkeM 3DBIINFIlC8MiNjkCO6oSDY7yVsbxtHtudWUdNL527X4zPPSfn0oOxgQQtj2t/ZBEvHq GOdq4lcuWVNouwgI3cU9X+gmF1RSv3rigNW4epkLGBaPqC+IR79HlcsJowNm9P26G8t/ B7Xw== X-Gm-Message-State: AOAM530jZeoGbQjKeM7rZKx6HnpbDxZRJY6tHg+nMsqMVBjungtmWWZw ow5fc2360XKKMsGJ5k6JLMRTIguw40MjUluljJ25NPzHpQiaIhGYvcvuvs1Qd20PdhEHfT3wHCI hRuOhc1eBIQ+L153baeI2Hptd3oA5lZxcQeuZgC6OcUJj4ZEsbRmVxv1vRNpBgBTrKanfdEp254 QuTYnmMMnFCp7vmD/i+6oiifRZvvfo65/hH7XdhaUuL0uueLDgo4kV X-Google-Smtp-Source: ABdhPJyv4mPX7+Rl+tynRX4XS3aS7rUmQG3crDLDHBUkEUq9bxcnCKs4KdhHi5CmPPVQrXlbDv5lrA== X-Received: by 2002:a50:a6c2:0:b0:410:a328:3c86 with SMTP id f2-20020a50a6c2000000b00410a3283c86mr28613497edc.55.1645573887047; Tue, 22 Feb 2022 15:51:27 -0800 (PST) Received: from [10.137.0.19] (ip-86-49-251-241.net.upcbroadband.cz. [86.49.251.241]) by smtp.gmail.com with ESMTPSA id di19sm6670136ejc.191.2022.02.22.15.51.26 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 22 Feb 2022 15:51:26 -0800 (PST) Content-Type: multipart/mixed; boundary="------------7YqoRXRG0MsVFD2Soyw4yRNQ" Message-ID: <2d679fff-fb74-8ad1-fe57-094563f2aa55@enterprisedb.com> Date: Wed, 23 Feb 2022 00:51:24 +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: Fujii Masao , 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> <84afe85f-2aa0-5aef-fa4a-59759afc03fb@enterprisedb.com> <76202fae-0c34-4f49-e3a0-1071c3fcf9e1@enterprisedb.com> In-Reply-To: <76202fae-0c34-4f49-e3a0-1071c3fcf9e1@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. --------------7YqoRXRG0MsVFD2Soyw4yRNQ Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit On 2/22/22 21:12, Tomas Vondra wrote: > On 2/22/22 01:36, Fujii Masao wrote: >> >> >> On 2022/02/18 22:28, Tomas Vondra wrote: >>> Hi, >>> >>> here's a slightly updated version of the patch series. >> >> Thanks for updating the patches! >> >> >>> The 0001 part >>> adds tracking of server_version_num, so that it's possible to enable >>> other features depending on it. >> >> Like configure_remote_session() does, can't we use PQserverVersion() >> instead of implementing new function GetServerVersion()? >> > > Ah! My knowledge of libpq is limited, so I wasn't sure this function > exists. It'll simplify the patch. > And here's the slightly simplified patch, without the part adding the unnecessary GetServerVersion() function. regards -- Tomas Vondra EnterpriseDB: http://www.enterprisedb.com The Enterprise PostgreSQL Company --------------7YqoRXRG0MsVFD2Soyw4yRNQ Content-Type: text/x-patch; charset=UTF-8; name="0001-postgres_fdw-sample-data-on-remote-node-for-20220222.patch" Content-Disposition: attachment; filename*0="0001-postgres_fdw-sample-data-on-remote-node-for-20220222.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwODllY2Y4YzllZTQ0Yjg5YmVjZmJjZmI5YzdhMGRkYzZjOGYxOTdhIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBUb21hcyBWb25kcmEgPHRvbWFzLnZvbmRyYUBwb3N0 Z3Jlc3FsLm9yZz4KRGF0ZTogRnJpLCAxOCBGZWIgMjAyMiAwMDozMzoxOSArMDEwMApTdWJq ZWN0OiBbUEFUQ0hdIHBvc3RncmVzX2Zkdzogc2FtcGxlIGRhdGEgb24gcmVtb3RlIG5vZGUg Zm9yIEFOQUxZWkUKCldoZW4gcGVyZm9ybWluZyBBTkFMWVpFIG9uIGEgZm9yZWlnbiB0YWJs ZXMsIHdlIG5lZWQgdG8gY29sbGVjdCBzYW1wbGUKb2Ygcm93cy4gVW50aWwgbm93LCB3ZSBz aW1wbHkgcmVhZCBhbGwgZGF0YSBmcm9tIHRoZSByZW1vdGUgbm9kZSBhbmQKYnVpbHQgdGhl IHNhbXBsZSBsb2NhbGx5LiBUaGF0IGlzIHZlcnkgZXhwZW5zaXZlLCBlc3BlY2lhbGx5IGlu IHRlcm1zIG9mCm5ldHdvcmsgdHJhZmZpYyBldGMuIEJ1dCBpdCdzIHBvc3NpYmxlIHRvIG1v dmUgdGhlIHNhbXBsaW5nIHRvIHRoZQpyZW1vdGUgbm9kZSwgYW5kIHVzZSBlaXRoZXIgVEFC TEVTQU1QTEUgb3Igc2ltcGx5IHJhbmRvbSgpIHRvIHRyYW5zZmVyCmp1c3QgbXVjaCBzbWFs bGVyIGFtb3VudCBvZiBkYXRhLgoKU28gd2UgcnVuIGVpdGhlcgoKICAgU0VMRUNUICogRlJP TSB0YWJsZSBUQUJMRVNBTVBMRSBTWVNURU0oZnJhY3Rpb24pCgpvcgoKICBTRUxFQ1QgKiBG Uk9NIHRhYmxlIFdIRVJFIHJhbmRvbSgpIDwgZnJhY3Rpb24KCmRlcGVuZGluZyBvbiB0aGUg c2VydmVyIHZlcnNpb24gKFRBQkxFU0FNUExFIGlzIHN1cHBvcnRlZCBzaW5jZSA5LjUpLgoK VG8gZG8gdGhhdCwgd2UgbmVlZCB0byBkZXRlcm1pbmUgd2hhdCBmcmFjdGlvbiBvZiB0aGUg dGFibGUgdG8gc2FtcGxlLgpXZSByZWx5IG9uIHJlbHR1cGxlcyAoZmV0Y2hlZCBmcm9tIHRo ZSByZW1vdGUgbm9kZSkgdG8gYmUgc3VmZmljaWVudGx5CmFjY3VyYXRlIGFuZCB1cCB0byBk YXRlLCBhbmQgY2FsY3VsYXRlIHRoZSBmcmFjdGlvbiBiYXNlZCBvbiB0aGF0LiBXZQppbmNy ZWFzZSB0aGUgc2FtcGxlIHNpemUgYSBiaXQgKGluIGNhc2UgdGhlIHRhYmxlIHNocnVuayks IGFuZCB3ZSBzdGlsbApkbyB0aGUgcmVzZXJ2b2lyIHNhbXBsaW5nIChpbiBjYXNlIGl0IGdy ZXcpLgoKVXNpbmcgdHNtX3N5c3RlbV9yb3dzIHdvdWxkIGFsbG93IHNwZWNpZnlpbmcgc2Ft cGxlIHNpemUgaW4gcm93cywKd2l0aG91dCBkZXRlcm1pbmluZyBzYW1wbGluZyByYXRlLiBC dXQgdGhlIHNhbXBsaW5nIG1ldGhvZCBtYXkgbm90IGJlCmluc3RhbGxlZCwgYW5kIHdlJ2Qg c3RpbGwgaGF2ZSB0byBkZXRlcm1pbmUgdGhlIHJlbGF0aW9uIHNpemUuCgpUaGlzIGFkZHMg J3NhbXBsZScgb3B0aW9uIGZvciByZW1vdGUgc2VydmVycyAvIHRhYmxlcy4gQnkgZGVmYXVs dCwgaXQncwpzZXQgdG8gJ3RydWUnIHdoaWNoIGVuYWJsZXMgcmVtb3RlIHNhbXBsaW5nLiBT ZXR0aW5nIGl0IHRvICdmYWxzZScgdXNlcwp0aGUgb2xkIGFwcHJvYWNoIG9mIGZldGNoaW5n IGV2ZXJ5dGhpbmcgYW5kIHNhbXBsaW5nIGxvY2FsbHkuCi0tLQogY29udHJpYi9wb3N0Z3Jl c19mZHcvZGVwYXJzZS5jICAgICAgfCAxNTIgKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9uLmMgICAgICAgfCAgIDcgKy0KIGNvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jIHwgMTQyICsrKysrKysrKysrKysrKysr KysrKysrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCB8ICAgNyAr KwogNCBmaWxlcyBjaGFuZ2VkLCAzMDQgaW5zZXJ0aW9ucygrKSwgNCBkZWxldGlvbnMoLSkK CmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMgYi9jb250cmli L3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKaW5kZXggYmYxMmVhYzAyODguLjMyZjJjMGQ1ZmIz IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9kZXBhcnNlLmMKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCkBAIC0yMjY3LDYgKzIyNjcsMjYgQEAgZGVw YXJzZUFuYWx5emVTaXplU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpCiAJYXBw ZW5kU3RyaW5nSW5mbyhidWYsICI6OnBnX2NhdGFsb2cucmVnY2xhc3MpIC8gJWQiLCBCTENL U1opOwogfQogCisvKgorICogQ29uc3RydWN0IFNFTEVDVCBzdGF0ZW1lbnQgdG8gYWNxdWly ZSBudW1iZSBvZiByb3dzIG9mIGdpdmVuIHJlbGF0aW9uLgorICoKKyAqIE5vdGU6IE1heWJl IHRoaXMgc2hvdWxkIGNvbXBhcmUgcmVscGFnZXMgYW5kIGN1cnJlbnQgcmVsYXRpb24gc2l6 ZQorICogYW5kIGFkanVzdCByZWx0dXBsZXMgYWNjb3JkaW5nbHk/CisgKi8KK3ZvaWQKK2Rl cGFyc2VBbmFseXplVHVwbGVzU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpCit7 CisJU3RyaW5nSW5mb0RhdGEgcmVsbmFtZTsKKworCS8qIFdlJ2xsIG5lZWQgdGhlIHJlbW90 ZSByZWxhdGlvbiBuYW1lIGFzIGEgbGl0ZXJhbC4gKi8KKwlpbml0U3RyaW5nSW5mbygmcmVs bmFtZSk7CisJZGVwYXJzZVJlbGF0aW9uKCZyZWxuYW1lLCByZWwpOworCisJYXBwZW5kU3Ry aW5nSW5mb1N0cmluZyhidWYsICJTRUxFQ1QgcmVsdHVwbGVzIEZST00gcGdfY2F0YWxvZy5w Z19jbGFzcyBXSEVSRSBvaWQgPSAiKTsKKwlkZXBhcnNlU3RyaW5nTGl0ZXJhbChidWYsIHJl bG5hbWUuZGF0YSk7CisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICI6OnBnX2NhdGFs b2cucmVnY2xhc3MiKTsKK30KKwogLyoKICAqIENvbnN0cnVjdCBTRUxFQ1Qgc3RhdGVtZW50 IHRvIGFjcXVpcmUgc2FtcGxlIHJvd3Mgb2YgZ2l2ZW4gcmVsYXRpb24uCiAgKgpAQCAtMjMy OCw2ICsyMzQ4LDEzOCBAQCBkZXBhcnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsLCBMaXN0ICoqcmV0cmlldmVkX2F0dHJzKQogCWRlcGFyc2VSZWxhdGlvbihi dWYsIHJlbCk7CiB9CiAKKy8qCisgKiBDb25zdHJ1Y3QgU0VMRUNUIHN0YXRlbWVudCB0byBh Y3F1aXJlIHNhbXBsZSByb3dzIG9mIGdpdmVuIHJlbGF0aW9uLAorICogYnkgc2FtcGxpbmcg YSBmcmFjdGlvbiBvZiB0aGUgdGFibGUgdXNpbmcgVEFCTEVTQU1QTEUgU1lTVEVNLgorICoK KyAqIFNFTEVDVCBjb21tYW5kIGlzIGFwcGVuZGVkIHRvIGJ1ZiwgYW5kIGxpc3Qgb2YgY29s dW1ucyByZXRyaWV2ZWQKKyAqIGlzIHJldHVybmVkIHRvICpyZXRyaWV2ZWRfYXR0cnMuCisg KgorICogTm90ZTogV2UgY291bGQgYWxsb3cgc2VsZWN0aW5nIHN5c3RlbS9iZXJub3VsbGks IGFuZCBtYXliZSBldmVuIHRoZQorICogb3B0aW9uYWwgVFNNIG1vZHVsZXMgKGVzcGVjaWFs bHkgdHNtX3N5c3RlbV9yb3dzIHdvdWxkIGhlbHApLgorICovCit2b2lkCitkZXBhcnNlQW5h bHl6ZVRhYmxlU2FtcGxlU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwsIExpc3Qg KipyZXRyaWV2ZWRfYXR0cnMsIGRvdWJsZSBzYW1wbGVfZnJhYykKK3sKKwlPaWQJCQlyZWxp ZCA9IFJlbGF0aW9uR2V0UmVsaWQocmVsKTsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0 aW9uR2V0RGVzY3IocmVsKTsKKwlpbnQJCQlpOworCWNoYXIJICAgKmNvbG5hbWU7CisJTGlz dAkgICAqb3B0aW9uczsKKwlMaXN0Q2VsbCAgICpsYzsKKwlib29sCQlmaXJzdCA9IHRydWU7 CisKKwkqcmV0cmlldmVkX2F0dHJzID0gTklMOworCisJYXBwZW5kU3RyaW5nSW5mb1N0cmlu ZyhidWYsICJTRUxFQ1QgIik7CisJZm9yIChpID0gMDsgaSA8IHR1cGRlc2MtPm5hdHRzOyBp KyspCisJeworCQkvKiBJZ25vcmUgZHJvcHBlZCBjb2x1bW5zLiAqLworCQlpZiAoVHVwbGVE ZXNjQXR0cih0dXBkZXNjLCBpKS0+YXR0aXNkcm9wcGVkKQorCQkJY29udGludWU7CisKKwkJ aWYgKCFmaXJzdCkKKwkJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiLCAiKTsKKwkJ Zmlyc3QgPSBmYWxzZTsKKworCQkvKiBVc2UgYXR0cmlidXRlIG5hbWUgb3IgY29sdW1uX25h bWUgb3B0aW9uLiAqLworCQljb2xuYW1lID0gTmFtZVN0cihUdXBsZURlc2NBdHRyKHR1cGRl c2MsIGkpLT5hdHRuYW1lKTsKKwkJb3B0aW9ucyA9IEdldEZvcmVpZ25Db2x1bW5PcHRpb25z KHJlbGlkLCBpICsgMSk7CisKKwkJZm9yZWFjaChsYywgb3B0aW9ucykKKwkJeworCQkJRGVm RWxlbSAgICAqZGVmID0gKERlZkVsZW0gKikgbGZpcnN0KGxjKTsKKworCQkJaWYgKHN0cmNt cChkZWYtPmRlZm5hbWUsICJjb2x1bW5fbmFtZSIpID09IDApCisJCQl7CisJCQkJY29sbmFt ZSA9IGRlZkdldFN0cmluZyhkZWYpOworCQkJCWJyZWFrOworCQkJfQorCQl9CisKKwkJYXBw ZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZpZXIoY29sbmFtZSkpOwor CisJCSpyZXRyaWV2ZWRfYXR0cnMgPSBsYXBwZW5kX2ludCgqcmV0cmlldmVkX2F0dHJzLCBp ICsgMSk7CisJfQorCisJLyogRG9uJ3QgZ2VuZXJhdGUgYmFkIHN5bnRheCBmb3IgemVyby1j b2x1bW4gcmVsYXRpb24uICovCisJaWYgKGZpcnN0KQorCQlhcHBlbmRTdHJpbmdJbmZvU3Ry aW5nKGJ1ZiwgIk5VTEwiKTsKKworCS8qCisJICogQ29uc3RydWN0IEZST00gY2xhdXNlCisJ ICovCisJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIgRlJPTSAiKTsKKwlkZXBhcnNl UmVsYXRpb24oYnVmLCByZWwpOworCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIFRBQkxFU0FN UExFIFNZU1RFTSglZikiLCAoMTAwLjAgKiBzYW1wbGVfZnJhYykpOworfQorCisvKgorICog Q29uc3RydWN0IFNFTEVDVCBzdGF0ZW1lbnQgdG8gYWNxdWlyZSBzYW1wbGUgcm93cyBvZiBn aXZlbiByZWxhdGlvbiwKKyAqIGJ5IHNhbXBsaW5nIGEgZnJhY3Rpb24gb2YgdGhlIHRhYmxl IHVzaW5nIFRBQkxFU0FNUExFIFNZU1RFTS4KKyAqCisgKiBTRUxFQ1QgY29tbWFuZCBpcyBh cHBlbmRlZCB0byBidWYsIGFuZCBsaXN0IG9mIGNvbHVtbnMgcmV0cmlldmVkCisgKiBpcyBy ZXR1cm5lZCB0byAqcmV0cmlldmVkX2F0dHJzLgorICoKKyAqIE5vdGU6IFdlIGNvdWxkIGFs bG93IHNlbGVjdGluZyBzeXN0ZW0vYmVybm91bGxpLCBhbmQgbWF5YmUgZXZlbiB0aGUKKyAq IG9wdGlvbmFsIFRTTSBtb2R1bGVzIChlc3BlY2lhbGx5IHRzbV9zeXN0ZW1fcm93cyB3b3Vs ZCBoZWxwKS4KKyAqLwordm9pZAorZGVwYXJzZUFuYWx5emVMZWdhY3lTYW1wbGVTcWwoU3Ry aW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwgTGlzdCAqKnJldHJpZXZlZF9hdHRycywgZG91 YmxlIHNhbXBsZV9mcmFjKQoreworCU9pZAkJCXJlbGlkID0gUmVsYXRpb25HZXRSZWxpZChy ZWwpOworCVR1cGxlRGVzYwl0dXBkZXNjID0gUmVsYXRpb25HZXREZXNjcihyZWwpOworCWlu dAkJCWk7CisJY2hhcgkgICAqY29sbmFtZTsKKwlMaXN0CSAgICpvcHRpb25zOworCUxpc3RD ZWxsICAgKmxjOworCWJvb2wJCWZpcnN0ID0gdHJ1ZTsKKworCSpyZXRyaWV2ZWRfYXR0cnMg PSBOSUw7CisKKwlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1ZiwgIlNFTEVDVCAiKTsKKwlm b3IgKGkgPSAwOyBpIDwgdHVwZGVzYy0+bmF0dHM7IGkrKykKKwl7CisJCS8qIElnbm9yZSBk cm9wcGVkIGNvbHVtbnMuICovCisJCWlmIChUdXBsZURlc2NBdHRyKHR1cGRlc2MsIGkpLT5h dHRpc2Ryb3BwZWQpCisJCQljb250aW51ZTsKKworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5k U3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOworCQlmaXJzdCA9IGZhbHNlOworCisJCS8q IFVzZSBhdHRyaWJ1dGUgbmFtZSBvciBjb2x1bW5fbmFtZSBvcHRpb24uICovCisJCWNvbG5h bWUgPSBOYW1lU3RyKFR1cGxlRGVzY0F0dHIodHVwZGVzYywgaSktPmF0dG5hbWUpOworCQlv cHRpb25zID0gR2V0Rm9yZWlnbkNvbHVtbk9wdGlvbnMocmVsaWQsIGkgKyAxKTsKKworCQlm b3JlYWNoKGxjLCBvcHRpb25zKQorCQl7CisJCQlEZWZFbGVtICAgICpkZWYgPSAoRGVmRWxl bSAqKSBsZmlyc3QobGMpOworCisJCQlpZiAoc3RyY21wKGRlZi0+ZGVmbmFtZSwgImNvbHVt bl9uYW1lIikgPT0gMCkKKwkJCXsKKwkJCQljb2xuYW1lID0gZGVmR2V0U3RyaW5nKGRlZik7 CisJCQkJYnJlYWs7CisJCQl9CisJCX0KKworCQlhcHBlbmRTdHJpbmdJbmZvU3RyaW5nKGJ1 ZiwgcXVvdGVfaWRlbnRpZmllcihjb2xuYW1lKSk7CisKKwkJKnJldHJpZXZlZF9hdHRycyA9 IGxhcHBlbmRfaW50KCpyZXRyaWV2ZWRfYXR0cnMsIGkgKyAxKTsKKwl9CisKKwkvKiBEb24n dCBnZW5lcmF0ZSBiYWQgc3ludGF4IGZvciB6ZXJvLWNvbHVtbiByZWxhdGlvbi4gKi8KKwlp ZiAoZmlyc3QpCisJCWFwcGVuZFN0cmluZ0luZm9TdHJpbmcoYnVmLCAiTlVMTCIpOworCisJ LyoKKwkgKiBDb25zdHJ1Y3QgRlJPTSBjbGF1c2UKKwkgKi8KKwlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgIiBGUk9NICIpOworCWRlcGFyc2VSZWxhdGlvbihidWYsIHJlbCk7CisJ YXBwZW5kU3RyaW5nSW5mbyhidWYsICIgV0hFUkUgcmFuZG9tKCkgPCAlZiIsIHNhbXBsZV9m cmFjKTsKK30KKwogLyoKICAqIENvbnN0cnVjdCBhIHNpbXBsZSAiVFJVTkNBVEUgcmVsIiBz dGF0ZW1lbnQKICAqLwpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvb3B0aW9u LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9vcHRpb24uYwppbmRleCAyYzZiMjg5NGI5Ni4u NjVmYzFhY2FkY2QgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5j CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L29wdGlvbi5jCkBAIC0xMjEsNyArMTIxLDgg QEAgcG9zdGdyZXNfZmR3X3ZhbGlkYXRvcihQR19GVU5DVElPTl9BUkdTKQogCQkJc3RyY21w KGRlZi0+ZGVmbmFtZSwgInVwZGF0YWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChkZWYtPmRl Zm5hbWUsICJ0cnVuY2F0YWJsZSIpID09IDAgfHwKIAkJCXN0cmNtcChkZWYtPmRlZm5hbWUs ICJhc3luY19jYXBhYmxlIikgPT0gMCB8fAotCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgImtl ZXBfY29ubmVjdGlvbnMiKSA9PSAwKQorCQkJc3RyY21wKGRlZi0+ZGVmbmFtZSwgImtlZXBf Y29ubmVjdGlvbnMiKSA9PSAwIHx8CisJCQlzdHJjbXAoZGVmLT5kZWZuYW1lLCAic2FtcGxl IikgPT0gMCkKIAkJewogCQkJLyogdGhlc2UgYWNjZXB0IG9ubHkgYm9vbGVhbiB2YWx1ZXMg Ki8KIAkJCSh2b2lkKSBkZWZHZXRCb29sZWFuKGRlZik7CkBAIC0yNTIsNiArMjUzLDEwIEBA IEluaXRQZ0Zkd09wdGlvbnModm9pZCkKIAkJeyJrZWVwX2Nvbm5lY3Rpb25zIiwgRm9yZWln blNlcnZlclJlbGF0aW9uSWQsIGZhbHNlfSwKIAkJeyJwYXNzd29yZF9yZXF1aXJlZCIsIFVz ZXJNYXBwaW5nUmVsYXRpb25JZCwgZmFsc2V9LAogCisJCS8qIHNhbXBsaW5nIGlzIGF2YWls YWJsZSBvbiBib3RoIHNlcnZlciBhbmQgdGFibGUgKi8KKwkJeyJzYW1wbGUiLCBGb3JlaWdu U2VydmVyUmVsYXRpb25JZCwgZmFsc2V9LAorCQl7InNhbXBsZSIsIEZvcmVpZ25UYWJsZVJl bGF0aW9uSWQsIGZhbHNlfSwKKwogCQkvKgogCQkgKiBzc2xjZXJ0IGFuZCBzc2xrZXkgYXJl IGluIGZhY3QgbGlicHEgb3B0aW9ucywgYnV0IHdlIHJlcGVhdCB0aGVtCiAJCSAqIGhlcmUg dG8gYWxsb3cgdGhlbSB0byBhcHBlYXIgaW4gYm90aCBmb3JlaWduIHNlcnZlciBjb250ZXh0 ICh3aGVuCmRpZmYgLS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu YyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCmluZGV4IDU2NjU0ODQ0 ZThmLi42MDQwZWUxOTlhYSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9z dGdyZXNfZmR3LmMKKysrIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMK QEAgLTQ5NjEsNiArNDk2MSw2OCBAQCBwb3N0Z3Jlc0FuYWx5emVGb3JlaWduVGFibGUoUmVs YXRpb24gcmVsYXRpb24sCiAJcmV0dXJuIHRydWU7CiB9CiAKKy8qCisgKiBwb3N0Z3Jlc0Nv dW50VHVwbGVzRm9yRm9yZWlnblRhYmxlCisgKgkJQ291bnQgdHVwbGVzIGluIGZvcmVpZ24g dGFibGUgKGp1c3QgZ2V0IHBnX2NsYXNzLnJlbHR1cGxlcykuCisgKgorICogTm90ZTogSXQn cyB1bmNsZWFyIGhvdyBhY2N1cmF0ZSByZWx0dXBsZXMgaXMsIG1heWJlIHNpemUgdGhhdCB1 c2luZworICogcmVscGFnZXMgYW5kIHNpbXBsZSBhc3N1bXB0aW9ucyAoMSB0dXBsZXMgcGVy IHBhZ2UsIC4uLik/IFVzaW5nCisgKiB0c21fc3lzdGVtX3Jvd3Mgd29sZCBtYWtlIHRoaXMg c29tZXdoYXQgdW5uZWNlc3NhcnkuCisgKi8KK3N0YXRpYyBkb3VibGUKK3Bvc3RncmVzQ291 bnRUdXBsZXNGb3JGb3JlaWduVGFibGUoUmVsYXRpb24gcmVsYXRpb24pCit7CisJRm9yZWln blRhYmxlICp0YWJsZTsKKwlVc2VyTWFwcGluZyAqdXNlcjsKKwlQR2Nvbm4JICAgKmNvbm47 CisJU3RyaW5nSW5mb0RhdGEgc3FsOworCVBHcmVzdWx0ICAgKnZvbGF0aWxlIHJlcyA9IE5V TEw7CisJZG91YmxlCQlyZWx0dXBsZXMgPSAtMTsKKworCS8qCisJICogTm93IHdlIGhhdmUg dG8gZ2V0IHRoZSBudW1iZXIgb2YgcGFnZXMuICBJdCdzIGFubm95aW5nIHRoYXQgdGhlIEFO QUxZWkUKKwkgKiBBUEkgcmVxdWlyZXMgdXMgdG8gcmV0dXJuIHRoYXQgbm93LCBiZWNhdXNl IGl0IGZvcmNlcyBzb21lIGR1cGxpY2F0aW9uCisJICogb2YgZWZmb3J0IGJldHdlZW4gdGhp cyByb3V0aW5lIGFuZCBwb3N0Z3Jlc0FjcXVpcmVTYW1wbGVSb3dzRnVuYy4gIEJ1dAorCSAq IGl0J3MgcHJvYmFibHkgbm90IHdvcnRoIHJlZGVmaW5pbmcgdGhhdCBBUEkgYXQgdGhpcyBw b2ludC4KKwkgKi8KKworCS8qCisJICogR2V0IHRoZSBjb25uZWN0aW9uIHRvIHVzZS4gIFdl IGRvIHRoZSByZW1vdGUgYWNjZXNzIGFzIHRoZSB0YWJsZSdzCisJICogb3duZXIsIGV2ZW4g aWYgdGhlIEFOQUxZWkUgd2FzIHN0YXJ0ZWQgYnkgc29tZSBvdGhlciB1c2VyLgorCSAqLwor CXRhYmxlID0gR2V0Rm9yZWlnblRhYmxlKFJlbGF0aW9uR2V0UmVsaWQocmVsYXRpb24pKTsK Kwl1c2VyID0gR2V0VXNlck1hcHBpbmcocmVsYXRpb24tPnJkX3JlbC0+cmVsb3duZXIsIHRh YmxlLT5zZXJ2ZXJpZCk7CisJY29ubiA9IEdldENvbm5lY3Rpb24odXNlciwgZmFsc2UsIE5V TEwpOworCisJLyoKKwkgKiBDb25zdHJ1Y3QgY29tbWFuZCB0byBnZXQgcGFnZSBjb3VudCBm b3IgcmVsYXRpb24uCisJICovCisJaW5pdFN0cmluZ0luZm8oJnNxbCk7CisJZGVwYXJzZUFu YWx5emVUdXBsZXNTcWwoJnNxbCwgcmVsYXRpb24pOworCisJLyogSW4gd2hhdCBmb2xsb3dz LCBkbyBub3QgcmlzayBsZWFraW5nIGFueSBQR3Jlc3VsdHMuICovCisJUEdfVFJZKCk7CisJ eworCQlyZXMgPSBwZ2Zkd19leGVjX3F1ZXJ5KGNvbm4sIHNxbC5kYXRhLCBOVUxMKTsKKwkJ aWYgKFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfVFVQTEVTX09LKQorCQkJcGdmZHdf cmVwb3J0X2Vycm9yKEVSUk9SLCByZXMsIGNvbm4sIGZhbHNlLCBzcWwuZGF0YSk7CisKKwkJ aWYgKFBRbnR1cGxlcyhyZXMpICE9IDEgfHwgUFFuZmllbGRzKHJlcykgIT0gMSkKKwkJCWVs b2coRVJST1IsICJ1bmV4cGVjdGVkIHJlc3VsdCBmcm9tIGRlcGFyc2VBbmFseXplU2l6ZVNx bCBxdWVyeSIpOworCQlyZWx0dXBsZXMgPSBzdHJ0b2QoUFFnZXR2YWx1ZShyZXMsIDAsIDAp LCBOVUxMKTsKKwl9CisJUEdfRklOQUxMWSgpOworCXsKKwkJaWYgKHJlcykKKwkJCVBRY2xl YXIocmVzKTsKKwl9CisJUEdfRU5EX1RSWSgpOworCisJUmVsZWFzZUNvbm5lY3Rpb24oY29u bik7CisKKwlyZXR1cm4gcmVsdHVwbGVzOworfQorCiAvKgogICogQWNxdWlyZSBhIHJhbmRv bSBzYW1wbGUgb2Ygcm93cyBmcm9tIGZvcmVpZ24gdGFibGUgbWFuYWdlZCBieSBwb3N0Z3Jl c19mZHcuCiAgKgpAQCAtNDk5MSw2ICs1MDUzLDE0IEBAIHBvc3RncmVzQWNxdWlyZVNhbXBs ZVJvd3NGdW5jKFJlbGF0aW9uIHJlbGF0aW9uLCBpbnQgZWxldmVsLAogCXVuc2lnbmVkIGlu dCBjdXJzb3JfbnVtYmVyOwogCVN0cmluZ0luZm9EYXRhIHNxbDsKIAlQR3Jlc3VsdCAgICp2 b2xhdGlsZSByZXMgPSBOVUxMOworCUxpc3RDZWxsICAgKmxjOworCWludAkJCXNlcnZlcl92 ZXJzaW9uX251bTsKKworCS8qIHNhbXBsaW5nIGVuYWJsZWQgYnkgZGVmYXVsdCAqLworCWJv b2wJCWRvX3NhbXBsZSA9IHRydWU7CisJYm9vbAkJdXNlX3RhYmxlc2FtcGxlID0gdHJ1ZTsK Kwlkb3VibGUJCXNhbXBsZV9mcmFjID0gLTEuMDsKKwlkb3VibGUJCXJlbHR1cGxlczsKIAog CS8qIEluaXRpYWxpemUgd29ya3NwYWNlIHN0YXRlICovCiAJYXN0YXRlLnJlbCA9IHJlbGF0 aW9uOwpAQCAtNTAxOCwyMCArNTA4OCw4MyBAQCBwb3N0Z3Jlc0FjcXVpcmVTYW1wbGVSb3dz RnVuYyhSZWxhdGlvbiByZWxhdGlvbiwgaW50IGVsZXZlbCwKIAl1c2VyID0gR2V0VXNlck1h cHBpbmcocmVsYXRpb24tPnJkX3JlbC0+cmVsb3duZXIsIHRhYmxlLT5zZXJ2ZXJpZCk7CiAJ Y29ubiA9IEdldENvbm5lY3Rpb24odXNlciwgZmFsc2UsIE5VTEwpOwogCisJLyogV2UnbGwg bmVlZCBzZXJ2ZXIgdmVyc2lvbiwgc28gZmV0Y2ggaXQgbm93LiAqLworCXNlcnZlcl92ZXJz aW9uX251bSA9IFBRc2VydmVyVmVyc2lvbihjb25uKTsKKworCS8qIGRpc2FibGUgdGFibGVz YW1wbGUgb24gb2xkIHJlbW90ZSBzZXJ2ZXJzICovCisJaWYgKHNlcnZlcl92ZXJzaW9uX251 bSA8IDk1MDAwKQorCQl1c2VfdGFibGVzYW1wbGUgPSBmYWxzZTsKKworCS8qCisJICogU2hv dWxkIHdlIHVzZSBUQUJMRVNBTVBMRSB0byBjb2xsZWN0IHRoZSByZW1vdGUgc2FtcGxlPwor CSAqLworCWZvcmVhY2gobGMsIHNlcnZlci0+b3B0aW9ucykKKwl7CisJCURlZkVsZW0gICAg KmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7CisKKwkJaWYgKHN0cmNtcChkZWYtPmRl Zm5hbWUsICJzYW1wbGUiKSA9PSAwKQorCQl7CisJCQlkb19zYW1wbGUgPSBkZWZHZXRCb29s ZWFuKGRlZik7CisJCQlicmVhazsKKwkJfQorCX0KKwlmb3JlYWNoKGxjLCB0YWJsZS0+b3B0 aW9ucykKKwl7CisJCURlZkVsZW0gICAgKmRlZiA9IChEZWZFbGVtICopIGxmaXJzdChsYyk7 CisKKwkJaWYgKHN0cmNtcChkZWYtPmRlZm5hbWUsICJzYW1wbGUiKSA9PSAwKQorCQl7CisJ CQlkb19zYW1wbGUgPSBkZWZHZXRCb29sZWFuKGRlZik7CisJCQlicmVhazsKKwkJfQorCX0K KworCWlmIChkb19zYW1wbGUpCisJeworCQlyZWx0dXBsZXMgPSBwb3N0Z3Jlc0NvdW50VHVw bGVzRm9yRm9yZWlnblRhYmxlKHJlbGF0aW9uKTsKKworCQlpZiAoKHJlbHR1cGxlcyA8PSAw KSB8fCAodGFyZ3Jvd3MgPj0gcmVsdHVwbGVzKSkKKwkJCWRvX3NhbXBsZSA9IGZhbHNlOwor CisJCXNhbXBsZV9mcmFjID0gdGFyZ3Jvd3MgLyByZWx0dXBsZXM7CisKKwkJLyogTGV0J3Mg c2FtcGxlIGEgYml0IG1vcmUsIHdlJ2xsIHJlZHVjZSB0aGUgc2FtcGxlIGxvY2FsbHkuICov CisJCXNhbXBsZV9mcmFjICo9IDEuMjU7CisKKwkJLyogU2FuaXR5IGNoZWNrcy4gKi8KKwkJ c2FtcGxlX2ZyYWMgPSBNaW4oMS4wLCBNYXgoMC4wLCBzYW1wbGVfZnJhYykpOworCisJCS8q CisJCSAqIFdoZW4gc2FtcGxpbmcgdG9vIGxhcmdlIGZyYWN0aW9uLCBqdXN0IHJlYWQgZXZl cnl0aGluZy4KKwkJICoKKwkJICogWFhYIEl0J3Mgbm90IGNsZWFyIHdoZXJlIGV4YWN0bHkg dGhlIHRocmVzaG9sZCBpcywgd2l0aCBzbG93CisJCSAqIG5ldHdvcmsgaXQgbWF5IGJlIGNo ZWFwZXIgdG8gc2FtcGxlIGV2ZW4gOTAlLgorCQkgKi8KKwkJaWYgKHNhbXBsZV9mcmFjID4g MC41KQorCQkJZG9fc2FtcGxlID0gZmFsc2U7CisJfQorCiAJLyoKIAkgKiBDb25zdHJ1Y3Qg Y3Vyc29yIHRoYXQgcmV0cmlldmVzIHdob2xlIHJvd3MgZnJvbSByZW1vdGUuCiAJICovCiAJ Y3Vyc29yX251bWJlciA9IEdldEN1cnNvck51bWJlcihjb25uKTsKIAlpbml0U3RyaW5nSW5m bygmc3FsKTsKIAlhcHBlbmRTdHJpbmdJbmZvKCZzcWwsICJERUNMQVJFIGMldSBDVVJTT1Ig Rk9SICIsIGN1cnNvcl9udW1iZXIpOwotCWRlcGFyc2VBbmFseXplU3FsKCZzcWwsIHJlbGF0 aW9uLCAmYXN0YXRlLnJldHJpZXZlZF9hdHRycyk7CisKKwlpZiAoZG9fc2FtcGxlICYmIHVz ZV90YWJsZXNhbXBsZSkKKwkJZGVwYXJzZUFuYWx5emVUYWJsZVNhbXBsZVNxbCgmc3FsLCBy ZWxhdGlvbiwgJmFzdGF0ZS5yZXRyaWV2ZWRfYXR0cnMsIHNhbXBsZV9mcmFjKTsKKwllbHNl IGlmIChkb19zYW1wbGUpCisJCWRlcGFyc2VBbmFseXplTGVnYWN5U2FtcGxlU3FsKCZzcWws IHJlbGF0aW9uLCAmYXN0YXRlLnJldHJpZXZlZF9hdHRycywgc2FtcGxlX2ZyYWMpOworCWVs c2UKKwkJZGVwYXJzZUFuYWx5emVTcWwoJnNxbCwgcmVsYXRpb24sICZhc3RhdGUucmV0cmll dmVkX2F0dHJzKTsKKworCWVsb2coV0FSTklORywgIlNRTDogJXMiLCBzcWwuZGF0YSk7CiAK IAkvKiBJbiB3aGF0IGZvbGxvd3MsIGRvIG5vdCByaXNrIGxlYWtpbmcgYW55IFBHcmVzdWx0 cy4gKi8KIAlQR19UUlkoKTsKIAl7CiAJCWNoYXIJCWZldGNoX3NxbFs2NF07CiAJCWludAkJ CWZldGNoX3NpemU7Ci0JCUxpc3RDZWxsICAgKmxjOwogCiAJCXJlcyA9IHBnZmR3X2V4ZWNf cXVlcnkoY29ubiwgc3FsLmRhdGEsIE5VTEwpOwogCQlpZiAoUFFyZXN1bHRTdGF0dXMocmVz KSAhPSBQR1JFU19DT01NQU5EX09LKQpAQCAtNTEyMCw3ICs1MjUzLDEwIEBAIHBvc3RncmVz QWNxdWlyZVNhbXBsZVJvd3NGdW5jKFJlbGF0aW9uIHJlbGF0aW9uLCBpbnQgZWxldmVsLAog CSp0b3RhbGRlYWRyb3dzID0gMC4wOwogCiAJLyogV2UndmUgcmV0cmlldmVkIGFsbCBsaXZp bmcgdHVwbGVzIGZyb20gZm9yZWlnbiBzZXJ2ZXIuICovCi0JKnRvdGFscm93cyA9IGFzdGF0 ZS5zYW1wbGVyb3dzOworCWlmIChkb19zYW1wbGUpCisJCSp0b3RhbHJvd3MgPSByZWx0dXBs ZXM7CisJZWxzZQorCQkqdG90YWxyb3dzID0gYXN0YXRlLnNhbXBsZXJvd3M7CiAKIAkvKgog CSAqIEVtaXQgc29tZSBpbnRlcmVzdGluZyByZWxhdGlvbiBpbmZvCmRpZmYgLS1naXQgYS9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaCBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3Bvc3RncmVzX2Zkdy5oCmluZGV4IDhhZTc5ZTk3ZTQ0Li42YmMwYTkzZGU2OCAxMDA2 NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKKysrIGIvY29u dHJpYi9wb3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKQEAgLTIwOCw4ICsyMDgsMTUgQEAg ZXh0ZXJuIHZvaWQgZGVwYXJzZURpcmVjdERlbGV0ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUGxh bm5lckluZm8gKnJvb3QsCiAJCQkJCQkJCSAgIExpc3QgKnJldHVybmluZ0xpc3QsCiAJCQkJ CQkJCSAgIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMpOwogZXh0ZXJuIHZvaWQgZGVwYXJzZUFu YWx5emVTaXplU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWwpOworZXh0ZXJuIHZv aWQgZGVwYXJzZUFuYWx5emVUdXBsZXNTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJl bCk7CiBleHRlcm4gdm9pZCBkZXBhcnNlQW5hbHl6ZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVs YXRpb24gcmVsLAogCQkJCQkJCSAgTGlzdCAqKnJldHJpZXZlZF9hdHRycyk7CitleHRlcm4g dm9pZCBkZXBhcnNlQW5hbHl6ZVRhYmxlU2FtcGxlU3FsKFN0cmluZ0luZm8gYnVmLCBSZWxh dGlvbiByZWwsCisJCQkJCQkJCQkJIExpc3QgKipyZXRyaWV2ZWRfYXR0cnMsCisJCQkJCQkJ CQkJIGRvdWJsZSBzYW1wbGVfZnJhYyk7CitleHRlcm4gdm9pZCBkZXBhcnNlQW5hbHl6ZUxl Z2FjeVNhbXBsZVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRpb24gcmVsLAorCQkJCQkJCQkJ CSAgTGlzdCAqKnJldHJpZXZlZF9hdHRycywKKwkJCQkJCQkJCQkgIGRvdWJsZSBzYW1wbGVf ZnJhYyk7CiBleHRlcm4gdm9pZCBkZXBhcnNlVHJ1bmNhdGVTcWwoU3RyaW5nSW5mbyBidWYs CiAJCQkJCQkJICAgTGlzdCAqcmVscywKIAkJCQkJCQkgICBEcm9wQmVoYXZpb3IgYmVoYXZp b3IsCi0tIAoyLjM0LjEKCg== --------------7YqoRXRG0MsVFD2Soyw4yRNQ--