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.94.2) (envelope-from ) id 1vCMVN-00CqR2-7A for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Oct 2025 18:27:12 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.94.2) (envelope-from ) id 1vCMVK-000WbH-VH for pgsql-hackers@arkaria.postgresql.org; Fri, 24 Oct 2025 18:27:09 +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.94.2) (envelope-from ) id 1vCMVK-000Wb9-A5 for pgsql-hackers@lists.postgresql.org; Fri, 24 Oct 2025 18:27:09 +0000 Received: from mail-pf1-x42b.google.com ([2607:f8b0:4864:20::42b]) by makus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.96) (envelope-from ) id 1vCMVG-003aCL-2i for pgsql-hackers@postgresql.org; Fri, 24 Oct 2025 18:27:08 +0000 Received: by mail-pf1-x42b.google.com with SMTP id d2e1a72fcca58-7a23208a0c2so1943164b3a.0 for ; Fri, 24 Oct 2025 11:27:06 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1761330426; x=1761935226; darn=postgresql.org; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=U3ttjwZ54ZkiiuO2QBfJUPaSdB9M19UZ2d+/Bx7+xes=; b=itR1oZvrz91FAQxHm3zclgqQ0g/895INMZUHBqgZZCJMgaTo1QbbA3aosB8b/L0+J0 3xLB9EtRRLRSEXU6zvnh8xKUejsyvqDPs+t+YKemvu8STMtNRN9mVzSBuBnC7ubZBb9z jrueAocA/6idsh8F1AtXtTYHc1tON1nuh6YqSSFgQYEYsdVFIQA89ATU3jC+MeHojIon gq/Gpz7BJWtUAnEwwqSFlbMLoQu+YSmGMuWrh9a1+ePIL56M4K1IRQ9VWrzhpRUomDyA nkv3Z2sJl1ehwhtheWWJcS2niE0TTLy8YvxXkc1F3lPGbXktbnqrKRxRvjv2uX5Ud6OF 0v0w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1761330426; x=1761935226; h=in-reply-to:references:to:from:subject:cc:message-id:date :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=U3ttjwZ54ZkiiuO2QBfJUPaSdB9M19UZ2d+/Bx7+xes=; b=SPnfK3rDY+YlU5bivh4AAuFR2I7yvPpqwlgIe/Xl9VeGBQ6K/GVxZ66C/Ef8xAAlF+ nOLvFcktkw5jKVPEuQ1u+pLyEPpZUjTa5UnIUd/HD6nHRbVaaelMf9FIGIti/Mg3xTFU MzFm7z9gcFyHKtg1sEIsL/QjJjRyAOiWOIldglMmx1MDe4GLNyGSlCGqbbw1Omtaqrg6 ZoMCoG6gB/3Z2FqSLSmMn0YDIZHw5MBIz3aAwQgn8hVnOG6fP/I4lr+4YKHvTFLCqRlK 2TbuDF46Dr8U8of8irVf0I8sbnmr5Y+74m4DY6AYu1rmT2XLCMcHA2dW/mWyRzFZpXOd GzXw== X-Forwarded-Encrypted: i=1; AJvYcCUI4h28QMZaDRwEvxhx3J0n0dwSvmR0q555fRURctRe7IeNprArd6tLRMk97ZDh/Uil+H+Ee8Ou77bh7JlD@postgresql.org X-Gm-Message-State: AOJu0YzfwWfaViA0/s2yHvZ9LluVhDkUe+HQo8MgVjo3qLt+j0h/4fFC puOXk8sPpkO09zxryVv5Dp24faTZV2PLX/S5svrY7fZpSBXE0PD8CdfJ X-Gm-Gg: ASbGnct9bxpY2sb0rUz46Kb4u0OIx1GRQ1vY7kEpmr0MK3KhB7x8F4rayPY+lY924Lh V66g4IdGJ3Iwv5eejgE0KjjeuKCEL57WTMlrmRMMCclh3aliUcdjLuOvp0P38TgU2JmnBfS/waR 6qRVzXPHcD0wzqAztQD6UioYaAdCLgsAavgnYJY+BSCWsPgNP9I4Em2f0YjatKBRBTiM0Ct7FGW 8DiJ51khyVS89qAQlVWs+Xjl9NtFCEyCOcMsfthIijGG0VecQGdeFjYEAZoWsTySX25HO93FoyT 4UwleqcVRZcYir5PdRrapyaJ9gNP47Z3PnLmXUow/lEPO8ggrtWT2lM3bmlkZV22K7t+MSQmsWQ fw02++KcbxdkUTf9IFAeeNZaIFWLFNSk97BvXhw1HIiyetDSmxNkDAaZfUoP9l89f3piLvgIwaN Pj83HWVIlkoInQ1hmNMKtyjTEcxdFZ4kWPkw== X-Google-Smtp-Source: AGHT+IF1/dEMDGNiz3SsrK52e5hwFGpCWoMXBX1Eu2lZI3NY+AofWCvYJpgNuzr5bg5XT+8bteerug== X-Received: by 2002:a05:6a20:1585:b0:334:9649:4754 with SMTP id adf61e73a8af0-334a85462d8mr38907343637.13.1761330425894; Fri, 24 Oct 2025 11:27:05 -0700 (PDT) Received: from localhost ([2804:14d:328a:a59c:29f7:b3fc:6b72:71b3]) by smtp.gmail.com with ESMTPSA id d2e1a72fcca58-7a274bb0c93sm6593585b3a.59.2025.10.24.11.27.03 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Fri, 24 Oct 2025 11:27:05 -0700 (PDT) Content-Type: multipart/mixed; boundary=1ae0a5fac9e2ca835af559c7ae9672ac551cd65890a8a35e4a385e12ab36 Mime-Version: 1.0 Date: Fri, 24 Oct 2025 15:27:01 -0300 Message-Id: Cc: "Tomas Vondra" , Subject: Re: postgres_fdw: Use COPY to speed up batch inserts From: "Matheus Alcantara" To: "jian he" , "Matheus Alcantara" X-Mailer: aerc 0.21.0 References: In-Reply-To: List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Archived-At: Precedence: bulk --1ae0a5fac9e2ca835af559c7ae9672ac551cd65890a8a35e4a385e12ab36 Content-Type: multipart/alternative; boundary=310f1508a8ff42dd7bb393eb294194f085a79445d0fb52f5e4d098cba788 --310f1508a8ff42dd7bb393eb294194f085a79445d0fb52f5e4d098cba788 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline Content-Type: text/plain; charset=UTF-8 Hi, thanks for testing this patch! On Thu Oct 23, 2025 at 6:49 AM -03, jian he wrote: > On Thu, Oct 23, 2025 at 8:01=E2=80=AFAM Matheus Alcantara > wrote: >> >> Please see the attached v3 version that implements this idea. >> > hi. > > I am not famailith with this module. > some of the foreach can be replaced with foreach_int. > Fixed. > I suspect that somewhere Form_pg_attribute.attisdropped is not handled pr= operly. > the following setup will crash. > > ---source database > drop table batch_table1; > create table batch_table1(x int); > > ---foreign table database > drop foreign table if exists ftable1; > CREATE FOREIGN TABLE ftable1 ( x int ) SERVER loopback1 OPTIONS ( > table_name 'batch_table1', batch_size '10' ); > ALTER FOREIGN TABLE ftable1 DROP COLUMN x; > ALTER FOREIGN TABLE ftable1 add COLUMN x int; > > INSERT INTO ftable SELECT * FROM generate_series(1, 10) i; --- this > will cause server crash. > I've tested this scenario and the field attisdropped is still being set to false. After some debugging I realize that the problem was how I was accessing the fmstate->p_flinfo array - I was using the attum-1 but I don't think that it's correct.=20 On create_foreign_modify() we have the following code: fmstate->p_flinfo =3D (FmgrInfo *) palloc0(sizeof(FmgrInfo) * n_params); fmstate->p_nums =3D 0; if (operation =3D=3D CMD_INSERT || operation =3D=3D CMD_UPDATE) { /* Set up for remaining transmittable parameters */ foreach(lc, fmstate->target_attrs) { int attnum =3D lfirst_int(lc); Form_pg_attribute attr =3D TupleDescAttr(tupdesc, attnum - 1); Assert(!attr->attisdropped); /* Ignore generated columns; they are set to DEFAULT */ if (attr->attgenerated) continue; getTypeOutputInfo(attr->atttypid, &typefnoid, &isvarlena); fmgr_info(typefnoid, &fmstate->p_flinfo[fmstate->p_nums]); fmstate->p_nums++; } } So I think that I should access fmstate->p_flinfo array when looping through the target_attrs using an int value starting at 0 and ++ after each iteration. Although I'm not sure if my understanding is fully correct I've implemented this on the attached patch and it seems to fix the error. On this new version I also added some regress tests on postgres_fdw.sql -- Matheus Alcantara --310f1508a8ff42dd7bb393eb294194f085a79445d0fb52f5e4d098cba788-- --1ae0a5fac9e2ca835af559c7ae9672ac551cd65890a8a35e4a385e12ab36 Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename=v4-0001-postgres_fdw-Use-COPY-to-speed-up-batch-inserts.patch Content-Type: text/plain; charset=utf-8; name=v4-0001-postgres_fdw-Use-COPY-to-speed-up-batch-inserts.patch RnJvbSAxODU2ZmJhMGM0OWQ1YWE3YjE2NGRlYmI5MGIzNzZjNzJjZmEzZTAyIE1vbiBTZXAgMTcg MDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0ubWU+CkRh dGU6IEZyaSwgMTAgT2N0IDIwMjUgMTY6MDc6MDggLTAzMDAKU3ViamVjdDogW1BBVENIIHY0XSBw b3N0Z3Jlc19mZHc6IFVzZSBDT1BZIHRvIHNwZWVkIHVwIGJhdGNoIGluc2VydHMKCi0tLQogY29u dHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jICAgICAgICAgICAgICAgIHwgIDMwICsrKysKIC4u Li9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dCAgICB8IDEyMCArKysrKysr KysrKy0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuYyAgICAgICAgICAgfCAx NTkgKysrKysrKysrKysrKysrKystCiBjb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcu aCAgICAgICAgICAgfCAgIDEgKwogY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zk dy5zcWwgICAgIHwgIDUyICsrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzNTAgaW5zZXJ0aW9ucygr KSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVw YXJzZS5jIGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5jCmluZGV4IGYyZmIwMDUxODQz Li4xMTNlNmZiN2Q5MSAxMDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZGVwYXJzZS5j CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3L2RlcGFyc2UuYwpAQCAtMjIzNiw2ICsyMjM2LDM2 IEBAIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwKIAlhcHBl bmRTdHJpbmdJbmZvU3RyaW5nKGJ1Ziwgb3JpZ19xdWVyeSArIHZhbHVlc19lbmRfbGVuKTsKIH0K IAorLyoKKyAqICBCdWlsZCBhIENPUFkgRlJPTSBTVERJTiBzdGF0ZW1lbnQgdXNpbmcgdGhlIFRF WFQgZm9ybWF0CisgKi8KK3ZvaWQKK2J1aWxkQ29weVNxbChTdHJpbmdJbmZvIGJ1ZiwgUmVsYXRp b24gcmVsLCBMaXN0ICp0YXJnZXRfYXR0cnMpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxh dGlvbkdldERlc2NyKHJlbCk7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCisJYXBwZW5kU3RyaW5n SW5mbyhidWYsICJDT1BZICIpOworCWRlcGFyc2VSZWxhdGlvbihidWYsIHJlbCk7CisJYXBwZW5k U3RyaW5nSW5mbyhidWYsICIoIik7CisKKwlmb3JlYWNoX2ludChhdHRudW0sIHRhcmdldF9hdHRy cykKKwl7CisJCUZvcm1fcGdfYXR0cmlidXRlIGF0dHIgPSBUdXBsZURlc2NBdHRyKHR1cGRlc2Ms IGF0dG51bSAtIDEpOworCisJCWlmIChhdHRyLT5hdHRnZW5lcmF0ZWQpCisJCQljb250aW51ZTsK KworCQlpZiAoIWZpcnN0KQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICIsICIpOwor CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3Rl X2lkZW50aWZpZXIoTmFtZVN0cihhdHRyLT5hdHRuYW1lKSkpOworCX0KKwlhcHBlbmRTdHJpbmdJ bmZvU3RyaW5nKGJ1ZiwgIikgRlJPTSBTVERJTiIpOworfQorCiAvKgogICogZGVwYXJzZSByZW1v dGUgVVBEQVRFIHN0YXRlbWVudAogICoKZGlmZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3Rl ZC9wb3N0Z3Jlc19mZHcub3V0CmluZGV4IGNkMjgxMjYwNDlkLi5kZDUwN2FkNjE4NiAxMDA2NDQK LS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAorKysg Yi9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CkBAIC01MCw2 ICs1MCwxOCBAQCBDUkVBVEUgVEFCTEUgIlMgMSIuIlQgNCIgKAogCWMzIHRleHQsCiAJQ09OU1RS QUlOVCB0NF9wa2V5IFBSSU1BUlkgS0VZIChjMSkKICk7CitDUkVBVEUgVEFCTEUgIlMgMSIuIlQg NSIoCisgICAgeCBpbnQKKyk7CitDUkVBVEUgVEFCTEUgIlMgMSIuIlQgNiIoCisgICAgaWQgaW50 IG5vdCBudWxsLAorICAgIG5vdGUgdGV4dCwKKyAgICB2YWx1ZSBpbnQgTk9UIE5VTEwKKyk7CitD UkVBVEUgVEFCTEUgIlMgMSIuIlQgNyIoCisgICAgaWQgaW50LAorICAgIHQgdGV4dAorKTsKIC0t IERpc2FibGUgYXV0b3ZhY3V1bSBmb3IgdGhlc2UgdGFibGVzIHRvIGF2b2lkIHVuZXhwZWN0ZWQg ZWZmZWN0cyBvZiB0aGF0CiBBTFRFUiBUQUJMRSAiUyAxIi4iVCAxIiBTRVQgKGF1dG92YWN1dW1f ZW5hYmxlZCA9ICdmYWxzZScpOwogQUxURVIgVEFCTEUgIlMgMSIuIlQgMiIgU0VUIChhdXRvdmFj dXVtX2VuYWJsZWQgPSAnZmFsc2UnKTsKQEAgLTEzMiw2ICsxNDQsMjEgQEAgQ1JFQVRFIEZPUkVJ R04gVEFCTEUgZnQ3ICgKIAljMiBpbnQgTk9UIE5VTEwsCiAJYzMgdGV4dAogKSBTRVJWRVIgbG9v cGJhY2szIE9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDQnKTsKK0NS RUFURSBGT1JFSUdOIFRBQkxFIGZ0OCAoCisgICAgeCBpbnQKKykKK1NFUlZFUiBsb29wYmFjayBP UFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA1JywgYmF0Y2hfc2l6ZSAn MTAnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGZ0OSAoCisgICAgaWQgaW50IG5vdCBudWxsLAor ICAgIG5vdGUgdGV4dCwKKyAgICB2YWx1ZSBpbnQgTk9UIE5VTEwKKykKK1NFUlZFUiBsb29wYmFj ayBPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2JywgYmF0Y2hfc2l6 ZSAnMTAnKTsKK0NSRUFURSBGT1JFSUdOIFRBQkxFIGZ0MTAgKAorICAgIGlkIGludCwKKyAgICB0 IHRleHQKKykKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TIChzY2hlbWFfbmFtZSAnUyAxJywgdGFi bGVfbmFtZSAnVCA3JywgYmF0Y2hfc2l6ZSAnMTAnKTsKIC0tID09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIC0tIHRlc3Rz IGZvciB2YWxpZGF0b3IKIC0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KQEAgLTIwNSwxNiArMjMyLDE5IEBAIEFMVEVS IEZPUkVJR04gVEFCTEUgZnQyIE9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1l ICdUIDEnKTsKIEFMVEVSIEZPUkVJR04gVEFCTEUgZnQxIEFMVEVSIENPTFVNTiBjMSBPUFRJT05T IChjb2x1bW5fbmFtZSAnQyAxJyk7CiBBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0MiBBTFRFUiBDT0xV TU4gYzEgT1BUSU9OUyAoY29sdW1uX25hbWUgJ0MgMScpOwogXGRldCsKLSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKLSBTY2hlbWEgfCBUYWJsZSB8 ICBTZXJ2ZXIgICB8ICAgICAgICAgICAgICBGRFcgb3B0aW9ucyAgICAgICAgICAgICAgfCBEZXNj cmlwdGlvbiAKLS0tLS0tLS0tKy0tLS0tLS0rLS0tLS0tLS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0tLS0tLS0KLSBwdWJsaWMgfCBmdDEgICB8IGxv b3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCAxJykgfCAKLSBwdWJs aWMgfCBmdDIgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAn VCAxJykgfCAKLSBwdWJsaWMgfCBmdDQgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAx JywgdGFibGVfbmFtZSAnVCAzJykgfCAKLSBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChz Y2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgfCAKLSBwdWJsaWMgfCBmdDYgICB8 IGxvb3BiYWNrMiB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgfCAKLSBw dWJsaWMgfCBmdDcgICB8IGxvb3BiYWNrMyB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFt ZSAnVCA0JykgfCAKLSg2IHJvd3MpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIExpc3Qgb2YgZm9yZWlnbiB0YWJsZXMKKyBTY2hlbWEgfCBUYWJsZSB8ICBTZXJ2ZXIgICB8 ICAgICAgICAgICAgICAgICAgICAgIEZEVyBvcHRpb25zICAgICAgICAgICAgICAgICAgICAgICB8 IERlc2NyaXB0aW9uIAorLS0tLS0tLS0rLS0tLS0tLSstLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSstLS0tLS0tLS0tLS0t CisgcHVibGljIHwgZnQxICAgfCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxl X25hbWUgJ1QgMScpICAgICAgICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDEwICB8IGxvb3Bi YWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFtZSAnVCA3JywgYmF0Y2hfc2l6ZSAn MTAnKSB8IAorIHB1YmxpYyB8IGZ0MiAgIHwgbG9vcGJhY2sgIHwgKHNjaGVtYV9uYW1lICdTIDEn LCB0YWJsZV9uYW1lICdUIDEnKSAgICAgICAgICAgICAgICAgIHwgCisgcHVibGljIHwgZnQ0ICAg fCBsb29wYmFjayAgfCAoc2NoZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgMycpICAgICAg ICAgICAgICAgICAgfCAKKyBwdWJsaWMgfCBmdDUgICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCA0JykgICAgICAgICAgICAgICAgICB8IAorIHB1YmxpYyB8 IGZ0NiAgIHwgbG9vcGJhY2syIHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDQn KSAgICAgICAgICAgICAgICAgIHwgCisgcHVibGljIHwgZnQ3ICAgfCBsb29wYmFjazMgfCAoc2No ZW1hX25hbWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNCcpICAgICAgICAgICAgICAgICAgfCAKKyBw dWJsaWMgfCBmdDggICB8IGxvb3BiYWNrICB8IChzY2hlbWFfbmFtZSAnUyAxJywgdGFibGVfbmFt ZSAnVCA1JywgYmF0Y2hfc2l6ZSAnMTAnKSB8IAorIHB1YmxpYyB8IGZ0OSAgIHwgbG9vcGJhY2sg IHwgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDYnLCBiYXRjaF9zaXplICcxMCcp IHwgCisoOSByb3dzKQogCiAtLSBUZXN0IHRoYXQgYWx0ZXJhdGlvbiBvZiBzZXJ2ZXIgb3B0aW9u cyBjYXVzZXMgcmVjb25uZWN0aW9uCiAtLSBSZW1vdGUncyBlcnJvcnMgbWlnaHQgYmUgbm9uLUVu Z2xpc2gsIHNvIGhpZGUgdGhlbSB0byBlbnN1cmUgc3RhYmxlIHJlc3VsdHMKQEAgLTEyNjY0LDYg KzEyNjk0LDc2IEBAIEFOQUxZWkUgYW5hbHl6ZV9mdGFibGU7CiAtLSBjbGVhbnVwCiBEUk9QIEZP UkVJR04gVEFCTEUgYW5hbHl6ZV9mdGFibGU7CiBEUk9QIFRBQkxFIGFuYWx5emVfdGFibGU7Cist LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CistLSB0ZXN0IGZvciBiYXRjaCBpbnNlcnQgdXNpbmcgQ09QWQorLS0gPT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PQorQUxURVIgRk9SRUlHTiBUQUJMRSBmdDggRFJPUCBDT0xVTU4geDsKK0FMVEVSIEZP UkVJR04gVEFCTEUgZnQ4IGFkZCBDT0xVTU4geCBpbnQ7CitJTlNFUlQgSU5UTyBmdDggU0VMRUNU ICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CitTRUxFQ1QgKiBGUk9NIGZ0ODsKKyB4 ICAKKy0tLS0KKyAgMQorICAyCisgIDMKKyAgNAorICA1CisgIDYKKyAgNworICA4CisgIDkKKyAx MAorKDEwIHJvd3MpCisKK0VYUExBSU4oQU5BTFlaRSwgVkVSQk9TRSwgQ09TVFMgT0ZGLCBTVU1N QVJZIE9GRiwgQlVGRkVSUyBPRkYsIFRJTUlORyBPRkYpIElOU0VSVCBJTlRPIGZ0OSAoaWQsIHZh bHVlLCBub3RlKQorU0VMRUNUIGcsCisgICAgICAgZyAqIDIsCisgICAgICAgJ2JhdGNoIGluc2Vy dCB0ZXN0IGRhdGEnIHx8IGcKK0ZST00gZ2VuZXJhdGVfc2VyaWVzKDEsIDIwKSBnOworICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBJbnNlcnQgb24g cHVibGljLmZ0OSAoYWN0dWFsIHJvd3M9MC4wMCBsb29wcz0xKQorICAgUmVtb3RlIFNRTDogQ09Q WSAiUyAxIi4iVCA2IihpZCwgbm90ZSwgdmFsdWUpIEZST00gU1RESU4KKyAgIEJhdGNoIFNpemU6 IDEwCisgICAtPiAgRnVuY3Rpb24gU2NhbiBvbiBwZ19jYXRhbG9nLmdlbmVyYXRlX3NlcmllcyBn IChhY3R1YWwgcm93cz0yMC4wMCBsb29wcz0xKQorICAgICAgICAgT3V0cHV0OiBnLmcsICgnYmF0 Y2ggaW5zZXJ0IHRlc3QgZGF0YSc6OnRleHQgfHwgKGcuZyk6OnRleHQpLCAoZy5nICogMikKKyAg ICAgICAgIEZ1bmN0aW9uIENhbGw6IGdlbmVyYXRlX3NlcmllcygxLCAyMCkKKyg2IHJvd3MpCisK K1NFTEVDVCAqIEZST00gZnQ5OworIGlkIHwgICAgICAgICAgIG5vdGUgICAgICAgICAgIHwgdmFs dWUgCistLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKy0tLS0tLS0KKyAgMSB8IGJhdGNo IGluc2VydCB0ZXN0IGRhdGExICB8ICAgICAyCisgIDIgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRh MiAgfCAgICAgNAorICAzIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTMgIHwgICAgIDYKKyAgNCB8 IGJhdGNoIGluc2VydCB0ZXN0IGRhdGE0ICB8ICAgICA4CisgIDUgfCBiYXRjaCBpbnNlcnQgdGVz dCBkYXRhNSAgfCAgICAxMAorICA2IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTYgIHwgICAgMTIK KyAgNyB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGE3ICB8ICAgIDE0CisgIDggfCBiYXRjaCBpbnNl cnQgdGVzdCBkYXRhOCAgfCAgICAxNgorICA5IHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0YTkgIHwg ICAgMTgKKyAxMCB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExMCB8ICAgIDIwCisgMTEgfCBiYXRj aCBpbnNlcnQgdGVzdCBkYXRhMTEgfCAgICAyMgorIDEyIHwgYmF0Y2ggaW5zZXJ0IHRlc3QgZGF0 YTEyIHwgICAgMjQKKyAxMyB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExMyB8ICAgIDI2CisgMTQg fCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMTQgfCAgICAyOAorIDE1IHwgYmF0Y2ggaW5zZXJ0IHRl c3QgZGF0YTE1IHwgICAgMzAKKyAxNiB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExNiB8ICAgIDMy CisgMTcgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMTcgfCAgICAzNAorIDE4IHwgYmF0Y2ggaW5z ZXJ0IHRlc3QgZGF0YTE4IHwgICAgMzYKKyAxOSB8IGJhdGNoIGluc2VydCB0ZXN0IGRhdGExOSB8 ICAgIDM4CisgMjAgfCBiYXRjaCBpbnNlcnQgdGVzdCBkYXRhMjAgfCAgICA0MAorKDIwIHJvd3Mp CisKKy0tIFRlc3QgYnVmZmVyIGxpbWl0IG9mIGNvcHkgZGF0YSBvbiBDT1BZQlVGU0laCitJTlNF UlQgSU5UTyBmdDEwIChpZCwgdCkKK1NFTEVDVCBzLCByZXBlYXQobWQ1KHM6OnRleHQpLCAxMDAw MCkgZnJvbSBnZW5lcmF0ZV9zZXJpZXMoMTAwLCAxMDMpIHM7CitTRUxFQ1QgQ09VTlQoKikgRlJP TSBmdDEwOworIGNvdW50IAorLS0tLS0tLQorICAgICA0CisoMSByb3cpCisKIC0tID09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KIC0tIHRlc3QgZm9yIHBvc3RncmVzX2Zkd19nZXRfY29ubmVjdGlvbnMgZnVuY3Rpb24gd2l0 aCBjaGVja19jb25uID0gdHJ1ZQogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmMgYi9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jl c19mZHcuYwppbmRleCA0NTZiMjY3ZjcwYi4uZDhlMTNlNzg5MzggMTAwNjQ0Ci0tLSBhL2NvbnRy aWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5jCisrKyBiL2NvbnRyaWIvcG9zdGdyZXNfZmR3 L3Bvc3RncmVzX2Zkdy5jCkBAIC02Myw2ICs2Myw5IEBAIFBHX01PRFVMRV9NQUdJQ19FWFQoCiAv KiBJZiBubyByZW1vdGUgZXN0aW1hdGVzLCBhc3N1bWUgYSBzb3J0IGNvc3RzIDIwJSBleHRyYSAq LwogI2RlZmluZSBERUZBVUxUX0ZEV19TT1JUX01VTFRJUExJRVIgMS4yCiAKKy8qIEJ1ZmZlciBz aXplIHRvIHNlbmQgQ09QWSBJTiBkYXRhKi8KKyNkZWZpbmUgQ09QWUJVRlNJWiA4MTkyCisKIC8q CiAgKiBJbmRleGVzIG9mIEZEVy1wcml2YXRlIGluZm9ybWF0aW9uIHN0b3JlZCBpbiBmZHdfcHJp dmF0ZSBsaXN0cy4KICAqCkBAIC0xOTIsNiArMTk1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgUGdGZHdN b2RpZnlTdGF0ZQogCS8qIGV4dHJhY3RlZCBmZHdfcHJpdmF0ZSBkYXRhICovCiAJY2hhcgkgICAq cXVlcnk7CQkJLyogdGV4dCBvZiBJTlNFUlQvVVBEQVRFL0RFTEVURSBjb21tYW5kICovCiAJY2hh cgkgICAqb3JpZ19xdWVyeTsJCS8qIG9yaWdpbmFsIHRleHQgb2YgSU5TRVJUIGNvbW1hbmQgKi8K KwljaGFyCSAgICpjb3B5X3F1ZXJ5OwkJLyogdGV4dCBvZiBDT1BZIGNvbW1hbmQgaWYgaXQncyBi ZWluZyB1c2VkICovCiAJTGlzdAkgICAqdGFyZ2V0X2F0dHJzOwkvKiBsaXN0IG9mIHRhcmdldCBh dHRyaWJ1dGUgbnVtYmVycyAqLwogCWludAkJCXZhbHVlc19lbmQ7CQkvKiBsZW5ndGggdXAgdG8g dGhlIGVuZCBvZiBWQUxVRVMgKi8KIAlpbnQJCQliYXRjaF9zaXplOwkJLyogdmFsdWUgb2YgRkRX IG9wdGlvbiAiYmF0Y2hfc2l6ZSIgKi8KQEAgLTU0NSw2ICs1NDksOSBAQCBzdGF0aWMgdm9pZCBt ZXJnZV9mZHdfb3B0aW9ucyhQZ0Zkd1JlbGF0aW9uSW5mbyAqZnBpbmZvLAogCQkJCQkJCSAgY29u c3QgUGdGZHdSZWxhdGlvbkluZm8gKmZwaW5mb19vLAogCQkJCQkJCSAgY29uc3QgUGdGZHdSZWxh dGlvbkluZm8gKmZwaW5mb19pKTsKIHN0YXRpYyBpbnQJZ2V0X2JhdGNoX3NpemVfb3B0aW9uKFJl bGF0aW9uIHJlbCk7CitzdGF0aWMgVHVwbGVUYWJsZVNsb3QgKipleGVjdXRlX2ZvcmVpZ25faW5z ZXJ0X3VzaW5nX2NvcHkoUGdGZHdNb2RpZnlTdGF0ZSAqZm1zdGF0ZSwKKwkJCQkJCQkJCQkJCQkJ ICBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAorCQkJCQkJCQkJCQkJCQkgIGludCAqbnVtU2xvdHMp OwogCiAKIC8qCkBAIC0yOTQyLDggKzI5NDksMjMgQEAgcG9zdGdyZXNFeHBsYWluRm9yZWlnbk1v ZGlmeShNb2RpZnlUYWJsZVN0YXRlICptdHN0YXRlLAogewogCWlmIChlcy0+dmVyYm9zZSkKIAl7 Ci0JCWNoYXIJICAgKnNxbCA9IHN0clZhbChsaXN0X250aChmZHdfcHJpdmF0ZSwKLQkJCQkJCQkJ CQkgIEZkd01vZGlmeVByaXZhdGVVcGRhdGVTcWwpKTsKKwkJY2hhcgkgICAqc3FsID0gTlVMTDsK KworCQkvKgorCQkgKiBXZSBvbmx5IGhhdmUgcmlfRmR3U3RhdGUgZHVyaW5nIEVYUExBSU4oQU5B TFlaRSksIHNvIGNoZWNrIGlmIHRoZQorCQkgKiBDT1BZIHdhcyB1c2VkIGR1cmluZyBxdWVyeSBl eGVjdXRpb24gYW5kIHNob3cgaXQgYXMgYSBSZW1vdGUgU1FMLgorCQkgKi8KKwkJaWYgKHJpbmZv LT5yaV9GZHdTdGF0ZSAhPSBOVUxMKQorCQl7CisJCQlQZ0Zkd01vZGlmeVN0YXRlICpmbXN0YXRl ID0gKFBnRmR3TW9kaWZ5U3RhdGUgKikgcmluZm8tPnJpX0Zkd1N0YXRlOworCisJCQlpZiAoZm1z dGF0ZS0+Y29weV9xdWVyeSAhPSBOVUxMKQorCQkJCXNxbCA9IGZtc3RhdGUtPmNvcHlfcXVlcnk7 CisJCX0KKworCQlpZiAoc3FsID09IE5VTEwpCisJCQlzcWwgPSBzdHJWYWwobGlzdF9udGgoZmR3 X3ByaXZhdGUsCisJCQkJCQkJCSAgRmR3TW9kaWZ5UHJpdmF0ZVVwZGF0ZVNxbCkpOwogCiAJCUV4 cGxhaW5Qcm9wZXJ0eVRleHQoIlJlbW90ZSBTUUwiLCBzcWwsIGVzKTsKIApAQCAtNDA2Niw2ICs0 MDg4LDUwIEBAIGNyZWF0ZV9mb3JlaWduX21vZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAlyZXR1cm4g Zm1zdGF0ZTsKIH0KIAorLyoKKyAqICBXcml0ZSB0YXJnZXQgYXR0cmlidXRlIHZhbHVlcyBmcm9t IGZtc3RhdGUgaW50byBidWYgYnVmZmVyIHRvIGJlIHNlbnQgYXMKKyAqICBDT1BZIEZST00gU1RE SU4gZGF0YQorICovCitzdGF0aWMgdm9pZAorY29udmVydF9zbG90X3RvX2NvcHlfdGV4dChTdHJp bmdJbmZvIGJ1ZiwKKwkJCQkJCSAgUGdGZHdNb2RpZnlTdGF0ZSAqZm1zdGF0ZSwKKwkJCQkJCSAg VHVwbGVUYWJsZVNsb3QgKnNsb3QpCit7CisJVHVwbGVEZXNjCXR1cGRlc2MgPSBSZWxhdGlvbkdl dERlc2NyKGZtc3RhdGUtPnJlbCk7CisJYm9vbAkJZmlyc3QgPSB0cnVlOworCWludAkJCWkgPSAw OworCisJZm9yZWFjaF9pbnQoYXR0bnVtLCBmbXN0YXRlLT50YXJnZXRfYXR0cnMpCisJeworCQlD b21wYWN0QXR0cmlidXRlICphdHRyID0gVHVwbGVEZXNjQ29tcGFjdEF0dHIodHVwZGVzYywgYXR0 bnVtIC0gMSk7CisJCURhdHVtCQlkYXR1bTsKKwkJYm9vbAkJaXNudWxsOworCisJCS8qIElnbm9y ZSBnZW5lcmF0ZWQgY29sdW1uczsgdGhleSBhcmUgc2V0IHRvIERFRkFVTFQgKi8KKwkJaWYgKGF0 dHItPmF0dGdlbmVyYXRlZCkKKwkJCWNvbnRpbnVlOworCisJCWlmICghZmlyc3QpCisJCQlhcHBl bmRTdHJpbmdJbmZvQ2hhck1hY3JvKGJ1ZiwgJ1x0Jyk7CisJCWZpcnN0ID0gZmFsc2U7CisKKwkJ ZGF0dW0gPSBzbG90X2dldGF0dHIoc2xvdCwgYXR0bnVtLCAmaXNudWxsKTsKKworCQlpZiAoaXNu dWxsKQorCQkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsICJcXE4iKTsKKwkJZWxzZQorCQl7 CisJCQljb25zdCBjaGFyICp2YWx1ZSA9IE91dHB1dEZ1bmN0aW9uQ2FsbCgmZm1zdGF0ZS0+cF9m bGluZm9baV0sCisJCQkJCQkJCQkJCQkgICBkYXR1bSk7CisKKwkJCWFwcGVuZFN0cmluZ0luZm9T dHJpbmcoYnVmLCB2YWx1ZSk7CisJCX0KKwkJaSsrOworCX0KKworCWFwcGVuZFN0cmluZ0luZm9D aGFyTWFjcm8oYnVmLCAnXG4nKTsKK30KKwogLyoKICAqIGV4ZWN1dGVfZm9yZWlnbl9tb2RpZnkK ICAqCQlQZXJmb3JtIGZvcmVpZ24tdGFibGUgbW9kaWZpY2F0aW9uIGFzIHJlcXVpcmVkLCBhbmQg ZmV0Y2ggUkVUVVJOSU5HCkBAIC00MDk3LDYgKzQxNjMsMTMgQEAgZXhlY3V0ZV9mb3JlaWduX21v ZGlmeShFU3RhdGUgKmVzdGF0ZSwKIAlpZiAoZm1zdGF0ZS0+Y29ubl9zdGF0ZS0+cGVuZGluZ0Fy ZXEpCiAJCXByb2Nlc3NfcGVuZGluZ19yZXF1ZXN0KGZtc3RhdGUtPmNvbm5fc3RhdGUtPnBlbmRp bmdBcmVxKTsKIAorCS8qCisJICogVXNlIENPUFkgY29tbWFuZCBmb3IgYmF0Y2ggaW5zZXJ0IGlm IHRoZSBvcmlnaW5hbCBxdWVyeSBkb24ndCBpbmNsdWRlIGEKKwkgKiBSRVRVUk5JTkcgY2xhdXNl CisJICovCisJaWYgKG9wZXJhdGlvbiA9PSBDTURfSU5TRVJUICYmICpudW1TbG90cyA+IDEgJiYg IWZtc3RhdGUtPmhhc19yZXR1cm5pbmcpCisJCXJldHVybiBleGVjdXRlX2ZvcmVpZ25faW5zZXJ0 X3VzaW5nX2NvcHkoZm1zdGF0ZSwgc2xvdHMsIG51bVNsb3RzKTsKKwogCS8qCiAJICogSWYgdGhl IGV4aXN0aW5nIHF1ZXJ5IHdhcyBkZXBhcnNlZCBhbmQgcHJlcGFyZWQgZm9yIGEgZGlmZmVyZW50 IG51bWJlcgogCSAqIG9mIHJvd3MsIHJlYnVpbGQgaXQgZm9yIHRoZSBwcm9wZXIgbnVtYmVyLgpA QCAtNzg4NiwzICs3OTU5LDg1IEBAIGdldF9iYXRjaF9zaXplX29wdGlvbihSZWxhdGlvbiByZWwp CiAKIAlyZXR1cm4gYmF0Y2hfc2l6ZTsKIH0KKworLyogIEV4ZWN1dGUgYSBiYXRjaCBpbnNlcnQg aW50byBhIGZvcmVpZ24gdGFibGUgdXNpbmcgdGhlIENPUFkgY29tbWFuZCAqLworc3RhdGljIFR1 cGxlVGFibGVTbG90ICoqCitleGVjdXRlX2ZvcmVpZ25faW5zZXJ0X3VzaW5nX2NvcHkoUGdGZHdN b2RpZnlTdGF0ZSAqZm1zdGF0ZSwKKwkJCQkJCQkJICBUdXBsZVRhYmxlU2xvdCAqKnNsb3RzLAor CQkJCQkJCQkgIGludCAqbnVtU2xvdHMpCit7CisJUEdyZXN1bHQgICAqcmVzOworCVN0cmluZ0lu Zm9EYXRhIHNxbDsKKwlTdHJpbmdJbmZvRGF0YSBjb3B5X2RhdGE7CisJaW50CQkJbl9yb3dzOwor CWludAkJCWk7CisKKwlpZiAoZm1zdGF0ZS0+Y29weV9xdWVyeSA9PSBOVUxMKQorCXsKKwkJLyog QnVpbGQgQ09QWSBjb21tYW5kICovCisJCWluaXRTdHJpbmdJbmZvKCZzcWwpOworCQlidWlsZENv cHlTcWwoJnNxbCwgZm1zdGF0ZS0+cmVsLCBmbXN0YXRlLT50YXJnZXRfYXR0cnMpOworCisJCS8q IENhY2hlIGZvciByZXVzZS4gKi8KKwkJZm1zdGF0ZS0+Y29weV9xdWVyeSA9IHNxbC5kYXRhOwor CX0KKworCS8qIFNlbmQgQ09QWSBjb21tYW5kICovCisJaWYgKCFQUXNlbmRRdWVyeShmbXN0YXRl LT5jb25uLCBmbXN0YXRlLT5jb3B5X3F1ZXJ5KSkKKwkJcGdmZHdfcmVwb3J0X2Vycm9yKE5VTEws IGZtc3RhdGUtPmNvbm4sIGZtc3RhdGUtPmNvcHlfcXVlcnkpOworCisJLyogZ2V0IHRoZSBDT1BZ IHJlc3VsdCAqLworCXJlcyA9IHBnZmR3X2dldF9yZXN1bHQoZm1zdGF0ZS0+Y29ubik7CisJaWYg KFBRcmVzdWx0U3RhdHVzKHJlcykgIT0gUEdSRVNfQ09QWV9JTikKKwkJcGdmZHdfcmVwb3J0X2Vy cm9yKHJlcywgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y29weV9xdWVyeSk7CisKKwkvKiBDb252 ZXJ0IHRoZSBUdXBsZVRhYmxlU2xvdCBkYXRhIGludG8gYSBURVhULWZvcm1hdHRlZCBsaW5lICov CisJaW5pdFN0cmluZ0luZm8oJmNvcHlfZGF0YSk7CisJZm9yIChpID0gMDsgaSA8ICpudW1TbG90 czsgaSsrKQorCXsKKwkJY29udmVydF9zbG90X3RvX2NvcHlfdGV4dCgmY29weV9kYXRhLCBmbXN0 YXRlLCBzbG90c1tpXSk7CisKKwkJLyoKKwkJICogU2VuZCBpbml0aWFsIENPUFkgZGF0YSBpZiB0 aGUgYnVmZmVyIHJlYWNoIHRoZSBsaW1pdCB0byBhdm9pZCBsYXJnZQorCQkgKiBtZW1vcnkgdXNh Z2UuCisJCSAqLworCQlpZiAoY29weV9kYXRhLmxlbiA+PSBDT1BZQlVGU0laKQorCQl7CisJCQlp ZiAoUFFwdXRDb3B5RGF0YShmbXN0YXRlLT5jb25uLCBjb3B5X2RhdGEuZGF0YSwgY29weV9kYXRh LmxlbikgPD0gMCkKKwkJCQlwZ2Zkd19yZXBvcnRfZXJyb3IoTlVMTCwgZm1zdGF0ZS0+Y29ubiwg Zm1zdGF0ZS0+Y29weV9xdWVyeSk7CisJCQlyZXNldFN0cmluZ0luZm8oJmNvcHlfZGF0YSk7CisJ CX0KKwl9CisKKwkvKiBTZW5kIHRoZSByZW1haW5pbmcgQ09QWSBkYXRhICovCisJaWYgKGNvcHlf ZGF0YS5sZW4gPiAwKQorCXsKKwkJaWYgKFBRcHV0Q29weURhdGEoZm1zdGF0ZS0+Y29ubiwgY29w eV9kYXRhLmRhdGEsIGNvcHlfZGF0YS5sZW4pIDw9IDApCisJCQlwZ2Zkd19yZXBvcnRfZXJyb3Io TlVMTCwgZm1zdGF0ZS0+Y29ubiwgZm1zdGF0ZS0+Y29weV9xdWVyeSk7CisJfQorCisJLyogRW5k IHRoZSBDT1BZIG9wZXJhdGlvbiAqLworCWlmIChQUXB1dENvcHlFbmQoZm1zdGF0ZS0+Y29ubiwg TlVMTCkgPCAwIHx8IFBRZmx1c2goZm1zdGF0ZS0+Y29ubikpCisJCXBnZmR3X3JlcG9ydF9lcnJv cihOVUxMLCBmbXN0YXRlLT5jb25uLCBmbXN0YXRlLT5jb3B5X3F1ZXJ5KTsKKworCS8qCisJICog R2V0IHRoZSByZXN1bHQsIGFuZCBjaGVjayBmb3Igc3VjY2Vzcy4KKwkgKi8KKwlyZXMgPSBwZ2Zk d19nZXRfcmVzdWx0KGZtc3RhdGUtPmNvbm4pOworCWlmIChQUXJlc3VsdFN0YXR1cyhyZXMpICE9 IFBHUkVTX0NPTU1BTkRfT0spCisJCXBnZmR3X3JlcG9ydF9lcnJvcihyZXMsIGZtc3RhdGUtPmNv bm4sIGZtc3RhdGUtPmNvcHlfcXVlcnkpOworCisJbl9yb3dzID0gYXRvaShQUWNtZFR1cGxlcyhy ZXMpKTsKKworCS8qIEFuZCBjbGVhbiB1cCAqLworCVBRY2xlYXIocmVzKTsKKworCU1lbW9yeUNv bnRleHRSZXNldChmbXN0YXRlLT50ZW1wX2N4dCk7CisKKwkqbnVtU2xvdHMgPSBuX3Jvd3M7CisK KwkvKgorCSAqIFJldHVybiBOVUxMIGlmIG5vdGhpbmcgd2FzIGluc2VydGVkIG9uIHRoZSByZW1v dGUgZW5kCisJICovCisJcmV0dXJuIChuX3Jvd3MgPiAwKSA/IHNsb3RzIDogTlVMTDsKK30KZGlm ZiAtLWdpdCBhL2NvbnRyaWIvcG9zdGdyZXNfZmR3L3Bvc3RncmVzX2Zkdy5oIGIvY29udHJpYi9w b3N0Z3Jlc19mZHcvcG9zdGdyZXNfZmR3LmgKaW5kZXggZTY5NzM1Mjk4ZDcuLmMwMTk4Yjg2NWYz IDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaAorKysgYi9j b250cmliL3Bvc3RncmVzX2Zkdy9wb3N0Z3Jlc19mZHcuaApAQCAtMjA0LDYgKzIwNCw3IEBAIGV4 dGVybiB2b2lkIHJlYnVpbGRJbnNlcnRTcWwoU3RyaW5nSW5mbyBidWYsIFJlbGF0aW9uIHJlbCwK IAkJCQkJCQkgY2hhciAqb3JpZ19xdWVyeSwgTGlzdCAqdGFyZ2V0X2F0dHJzLAogCQkJCQkJCSBp bnQgdmFsdWVzX2VuZF9sZW4sIGludCBudW1fcGFyYW1zLAogCQkJCQkJCSBpbnQgbnVtX3Jvd3Mp OworZXh0ZXJuIHZvaWQgYnVpbGRDb3B5U3FsKFN0cmluZ0luZm8gYnVmLCBSZWxhdGlvbiByZWws IExpc3QgKnRhcmdldF9hdHRycyk7CiBleHRlcm4gdm9pZCBkZXBhcnNlVXBkYXRlU3FsKFN0cmlu Z0luZm8gYnVmLCBSYW5nZVRibEVudHJ5ICpydGUsCiAJCQkJCQkJIEluZGV4IHJ0aW5kZXgsIFJl bGF0aW9uIHJlbCwKIAkJCQkJCQkgTGlzdCAqdGFyZ2V0QXR0cnMsCmRpZmYgLS1naXQgYS9jb250 cmliL3Bvc3RncmVzX2Zkdy9zcWwvcG9zdGdyZXNfZmR3LnNxbCBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L3NxbC9wb3N0Z3Jlc19mZHcuc3FsCmluZGV4IDlhOGY5ZTI4MTM1Li43OWY0ZjMwNTY0MSAx MDA2NDQKLS0tIGEvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKKysr IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvc3FsL3Bvc3RncmVzX2Zkdy5zcWwKQEAgLTU0LDYgKzU0 LDE4IEBAIENSRUFURSBUQUJMRSAiUyAxIi4iVCA0IiAoCiAJYzMgdGV4dCwKIAlDT05TVFJBSU5U IHQ0X3BrZXkgUFJJTUFSWSBLRVkgKGMxKQogKTsKK0NSRUFURSBUQUJMRSAiUyAxIi4iVCA1IigK KyAgICB4IGludAorKTsKK0NSRUFURSBUQUJMRSAiUyAxIi4iVCA2IigKKyAgICBpZCBpbnQgbm90 IG51bGwsCisgICAgbm90ZSB0ZXh0LAorICAgIHZhbHVlIGludCBOT1QgTlVMTAorKTsKK0NSRUFU RSBUQUJMRSAiUyAxIi4iVCA3IigKKyAgICBpZCBpbnQsCisgICAgdCB0ZXh0CispOwogCiAtLSBE aXNhYmxlIGF1dG92YWN1dW0gZm9yIHRoZXNlIHRhYmxlcyB0byBhdm9pZCB1bmV4cGVjdGVkIGVm ZmVjdHMgb2YgdGhhdAogQUxURVIgVEFCTEUgIlMgMSIuIlQgMSIgU0VUIChhdXRvdmFjdXVtX2Vu YWJsZWQgPSAnZmFsc2UnKTsKQEAgLTE0Niw2ICsxNTgsMjQgQEAgQ1JFQVRFIEZPUkVJR04gVEFC TEUgZnQ3ICgKIAljMyB0ZXh0CiApIFNFUlZFUiBsb29wYmFjazMgT1BUSU9OUyAoc2NoZW1hX25h bWUgJ1MgMScsIHRhYmxlX25hbWUgJ1QgNCcpOwogCitDUkVBVEUgRk9SRUlHTiBUQUJMRSBmdDgg KAorICAgIHggaW50CispCitTRVJWRVIgbG9vcGJhY2sgT1BUSU9OUyAoc2NoZW1hX25hbWUgJ1Mg MScsIHRhYmxlX25hbWUgJ1QgNScsIGJhdGNoX3NpemUgJzEwJyk7CisKK0NSRUFURSBGT1JFSUdO IFRBQkxFIGZ0OSAoCisgICAgaWQgaW50IG5vdCBudWxsLAorICAgIG5vdGUgdGV4dCwKKyAgICB2 YWx1ZSBpbnQgTk9UIE5VTEwKKykKK1NFUlZFUiBsb29wYmFjayBPUFRJT05TIChzY2hlbWFfbmFt ZSAnUyAxJywgdGFibGVfbmFtZSAnVCA2JywgYmF0Y2hfc2l6ZSAnMTAnKTsKKworQ1JFQVRFIEZP UkVJR04gVEFCTEUgZnQxMCAoCisgICAgaWQgaW50LAorICAgIHQgdGV4dAorKQorU0VSVkVSIGxv b3BiYWNrIE9QVElPTlMgKHNjaGVtYV9uYW1lICdTIDEnLCB0YWJsZV9uYW1lICdUIDcnLCBiYXRj aF9zaXplICcxMCcpOworCiAtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAtLSB0ZXN0cyBmb3IgdmFsaWRhdG9yCiAt LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09CkBAIC00Mzc5LDYgKzQ0MDksMjggQEAgQU5BTFlaRSBhbmFseXplX2Z0YWJs ZTsKIERST1AgRk9SRUlHTiBUQUJMRSBhbmFseXplX2Z0YWJsZTsKIERST1AgVEFCTEUgYW5hbHl6 ZV90YWJsZTsKIAorLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PQorLS0gdGVzdCBmb3IgYmF0Y2ggaW5zZXJ0IHVzaW5n IENPUFkKKy0tID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT0KK0FMVEVSIEZPUkVJR04gVEFCTEUgZnQ4IERST1AgQ09MVU1O IHg7CitBTFRFUiBGT1JFSUdOIFRBQkxFIGZ0OCBhZGQgQ09MVU1OIHggaW50OworCitJTlNFUlQg SU5UTyBmdDggU0VMRUNUICogRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMTApIGk7CitTRUxFQ1Qg KiBGUk9NIGZ0ODsKKworRVhQTEFJTihBTkFMWVpFLCBWRVJCT1NFLCBDT1NUUyBPRkYsIFNVTU1B UlkgT0ZGLCBCVUZGRVJTIE9GRiwgVElNSU5HIE9GRikgSU5TRVJUIElOVE8gZnQ5IChpZCwgdmFs dWUsIG5vdGUpCitTRUxFQ1QgZywKKyAgICAgICBnICogMiwKKyAgICAgICAnYmF0Y2ggaW5zZXJ0 IHRlc3QgZGF0YScgfHwgZworRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwgMjApIGc7CisKK1NFTEVD VCAqIEZST00gZnQ5OworCistLSBUZXN0IGJ1ZmZlciBsaW1pdCBvZiBjb3B5IGRhdGEgb24gQ09Q WUJVRlNJWgorSU5TRVJUIElOVE8gZnQxMCAoaWQsIHQpCitTRUxFQ1QgcywgcmVwZWF0KG1kNShz Ojp0ZXh0KSwgMTAwMDApIGZyb20gZ2VuZXJhdGVfc2VyaWVzKDEwMCwgMTAzKSBzOworU0VMRUNU IENPVU5UKCopIEZST00gZnQxMDsKKwogLS0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogLS0gdGVzdCBmb3IgcG9zdGdy ZXNfZmR3X2dldF9jb25uZWN0aW9ucyBmdW5jdGlvbiB3aXRoIGNoZWNrX2Nvbm4gPSB0cnVlCiAt LSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09Ci0tIAoyLjUxLjAKCg== --1ae0a5fac9e2ca835af559c7ae9672ac551cd65890a8a35e4a385e12ab36--