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 1w29zq-0002hb-0b for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 15:36:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1w29zo-00Asps-1F for pgsql-hackers@arkaria.postgresql.org; Mon, 16 Mar 2026 15:36:45 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1w29zo-00Aspk-08 for pgsql-hackers@lists.postgresql.org; Mon, 16 Mar 2026 15:36:44 +0000 Received: from mail-dl1-x122b.google.com ([2607:f8b0:4864:20::122b]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256 (Exim 4.98.2) (envelope-from ) id 1w29zl-00000000RnS-2Y6G for pgsql-hackers@lists.postgresql.org; Mon, 16 Mar 2026 15:36:44 +0000 Received: by mail-dl1-x122b.google.com with SMTP id a92af1059eb24-1271195d2a7so596956c88.0 for ; Mon, 16 Mar 2026 08:36:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1773675399; x=1774280199; darn=lists.postgresql.org; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:from:to:cc:subject:date :message-id:reply-to; bh=U7fH0aTRmUeIWf4MvYYBSk4IlNPcB8ckCKUvdfwIDvs=; b=Xc6aGkvr9qFS0VH+tsQSZSadGsd10aCIRNKUy+53XRoB4CcCVW3K+5zg+nbWt0BF33 UdO7PXTdAzRXLNRN9UlzRAE/hYrRsKNhoJktsEa9UTllh+ArzTLo6sTbXcWJwB5pzg2p 8UT8KVWwVu3Fq+5GvsqmP321K0ZvL0/MFUPcLyhxlzBRNmu3+1FB46maKQRebeNRrziC buH5vIDLYgtMe5TzTV/VSXHrgk7vk6jYEnH9LFdJ+cHXC5aOTI0gsVLIg3ROmM4quEVB kl3Aqy6nzKmcZpKTkNNU26xLjkNOzEHPVKHvKJMH+Tk2RAVrrvowgeITKOBq9xQEZuJw xwZA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1773675399; x=1774280199; h=in-reply-to:content-language:references:cc:to:from:subject :user-agent:mime-version:date:message-id:x-gm-gg:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=U7fH0aTRmUeIWf4MvYYBSk4IlNPcB8ckCKUvdfwIDvs=; b=MebmNIU8n1GfOT3zCR4t51pTFgaUYL7TlmrgREJRBGwd9qCjQHM1kDce89yDX5I4D5 XcIvtHvO05NXknNE0l+r0fqox/hZ2g4KA+K0P4YDhEmaTZUUkvJnSCh7WNEi+QfhN78T U7V6qdfZIva6ga8t0tqnPtVMWJjL0z05bTEB8lH1IOQ7uOpx5XrryeIWP3U505tdc9oK /m6s/NqiUGItcsFA6/6LEl7YYtIkSqmclKRhnLaQ7qTCwHyn8nfuEsdZZ2BUoCDn/5GW x1riy5T/UI7ldyiiVjS63kxZV764ypSS7g3rZoztSHgTtWWPgOkrcwEeYSgQyX07hqsc rb8Q== X-Gm-Message-State: AOJu0YzBNQraPa7jFAsmVsMdIb44r5uojOU4FMSOInqVqczEU6ILbej3 9VDlXxGGVXiwUk63NSPOdRi003WHPT4t3jDPXxFu0h36wc88/ERMT+Jy X-Gm-Gg: ATEYQzzYg3ngbCdbO8OQziqrsB9tfsMu6gyezD/QIhvUNWGMnlgKzei3iK78ARcEk6S 16iwg1e2okFWb6Ue6yI6oxwiG++7f/lDxmqES0uqWk1fP+E3bswrLLNoa08Dx0sA0GGapqE1aMi FLEN11dk3ETyda8ZLOvz35C+5ey3QUtPLtHzMLR8bgQeJ3r8YdnOiC+6aQ4O60hChIctN8/vAL5 IWXIm0vbwp8xWd29Yk6QkApl/WwTUR68o6cQMvhxX+om05QbNIl0CNZ8InzxXIWvKwV4piO6KKj 7M2qBgheCFI/E7Z35JN30l1WJrcdMRabPG5SXRM5gBJXrpB01aL26XdbUlCiG6DcRvYzFJ20Eha qGENlEvCCAnidBPlxfIKo7cQimj4nI3iYsq/Xx0mURfiZM6EeC8L/YpgtFccA9sf0h1AiKaxZIW bYlNzd4bKjvZJe5V+RsbEuejrMRr9Jp9v/QxQMv+UXpKU1GUrX0Di94HwKpbvhjLubAF80howQ+ wOwoUUsRnDvYntN7550Nw== X-Received: by 2002:a05:7022:487:b0:127:3915:76b2 with SMTP id a92af1059eb24-128f3df859fmr6744440c88.27.1773675399139; Mon, 16 Mar 2026 08:36:39 -0700 (PDT) Received: from ?IPV6:2804:14d:328a:a59c:78ea:5704:c9d6:c77b? ([2804:14d:328a:a59c:78ea:5704:c9d6:c77b]) by smtp.gmail.com with ESMTPSA id 5a478bee46e88-2beab3a0c34sm14725072eec.7.2026.03.16.08.36.35 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Mon, 16 Mar 2026 08:36:37 -0700 (PDT) Content-Type: multipart/mixed; boundary="------------Emxh7m9OM4I0YAdCZclS965R" Message-ID: <68dcb0b5-1c0b-41ed-b2eb-bbb12c3ea5f3@gmail.com> Date: Mon, 16 Mar 2026 12:36:34 -0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: Show expression of virtual columns in error messages From: Matheus Alcantara To: Tom Lane Cc: pgsql-hackers@lists.postgresql.org, Peter Eisentraut , Yugo Nagata References: <7c18e854-0ddb-4670-b0c4-f2541b5edd91@eisentraut.org> <20260205114521.6fed028d8d3185663f3c4226@sraoss.co.jp> <20260206125414.8f8c5f5735aa34fb05c5cc72@sraoss.co.jp> <2f55b9a4-332f-45c7-9b27-590637a2bb9a@gmail.com> <719803.1772131627@sss.pgh.pa.us> <742565.1772144083@sss.pgh.pa.us> Content-Language: en-US In-Reply-To: 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. --------------Emxh7m9OM4I0YAdCZclS965R Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit On 03/03/26 14:01, I wrote: > Please see the attached patch where I implement this. I followed a > similar pattern used for stored generated columns with some small > changes. Some special handling for virtual columns was removed but I > still left some comments but I'm not sure if it's really needed. > > With this change I think that doc/src/sgml/ddl.sgml should be updated > to mention that a virtual generated column expression is also > evaluated when writing the data ... > Attaching v5 with documentation changes included and rebased with master. -- Matheus Alcantara EDB: https://www.enterprisedb.com --------------Emxh7m9OM4I0YAdCZclS965R Content-Type: text/plain; charset=UTF-8; name="v5-0001-Compute-virtual-generated-columns-during-INSERT-U.patch" Content-Disposition: attachment; filename*0="v5-0001-Compute-virtual-generated-columns-during-INSERT-U.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSA3OThmYjdhYmJiYWEzZWUwOGJhNWUxMzhmMTFmMzRlN2ViM2RmY2ZjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXRoZXVzIEFsY2FudGFyYSA8bXRocy5kZXZAcG0u bWU+CkRhdGU6IE1vbiwgMiBGZWIgMjAyNiAxOTowNjo0NCAtMDMwMApTdWJqZWN0OiBbUEFU Q0ggdjVdIENvbXB1dGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyBkdXJpbmcgSU5TRVJU L1VQREFURQoKUHJldmlvdXNseSwgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIHZhbHVlcyB3 ZXJlIG5ldmVyIGNvbXB1dGVkIGFuZApzdG9yZWQgaW4gdGhlIHNsb3QuIEluc3RlYWQsIHJl ZmVyZW5jZXMgdG8gZS5nIHZpcnR1YWwgY29sdW1ucyBpbiBjaGVjawpjb25zdHJhaW50cyB3 ZXJlIGV4cGFuZGVkIHRvIHRoZWlyIGdlbmVyYXRpb24gZXhwcmVzc2lvbnMgZHVyaW5nCkV4 ZWNDaGVjaygpLgoKVGhpcyBjb21taXQgY2hhbmdlcyB0aGUgYXBwcm9hY2ggdG8gY29tcHV0 ZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4KdmFsdWVzIGFuZCBzdG9yZSB0aGVtIGluIHRo ZSBzbG90IGJlZm9yZSBjb25zdHJhaW50IGNoZWNraW5nLCBzaW1pbGFyCnRvIGhvdyBzdG9y ZWQgZ2VuZXJhdGVkIGNvbHVtbnMgYXJlIGhhbmRsZWQuIFRoaXMgaGFzIHR3byBiZW5lZml0 czoKCiAgIENoZWNrIGNvbnN0cmFpbnRzIGNhbiBub3cgcmVhZCB2aXJ0dWFsIGNvbHVtbiB2 YWx1ZXMgZGlyZWN0bHkgZnJvbQogICB0aGUgc2xvdCwgc2ltcGxpZnlpbmcgY29uc3RyYWlu dCBldmFsdWF0aW9uLiBJdCBhbHNvIGF2b2lkIHJlLWV4ZWN1dGUKICAgdGhlIHZpcnR1YWwg ZXhwcmVzc2lvbiBmb3IgZWFjaCBjaGVjayBjb25zdHJhaW50IGV2YWx1YXRpb24uCgogICBF cnJvciBtZXNzYWdlcyBub3cgZGlzcGxheSB0aGUgYWN0dWFsIGNvbXB1dGVkIHZhbHVlIChl LmcuLCAiMTAiKQogICBpbnN0ZWFkIG9mIHRoZSAidmlydHVhbCIgc3RyaW5nLCBtYWtpbmcg dGhlbSBtb3JlIGNvbnNpc3RlbnQgd2l0aAogICBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVtbnMg YW5kIGVhc2llciB0byB1bmRlcnN0YW5kLgoKRGlzY3Vzc2lvbjogaHR0cHM6Ly93d3cucG9z dGdyZXNxbC5vcmcvbWVzc2FnZS1pZC9ERzVEVjhTRUQ2MkcuMldGSkI0NkQ3V0lUOCU0MGdt YWlsLmNvbQotLS0KIGRvYy9zcmMvc2dtbC9kZGwuc2dtbCAgICAgICAgICAgICAgICAgICAg ICAgICB8ICAgOSArLQogZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfZm9yZWlnbl90YWJsZS5z Z21sICAgIHwgIDEzICstCiBkb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sICAg ICAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNFeHBySW50ZXJw LmMgICAgICAgICB8ICAgNyArLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYyAg ICAgICAgICAgICAgIHwgIDIxICsrLQogc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxp Y2F0aW9uLmMgICAgICAgIHwgIDEyICsrCiBzcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9k aWZ5VGFibGUuYyAgICAgICAgfCAxMzEgKysrKysrKysrKysrKysrKystCiBzcmMvaW5jbHVk ZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaCAgICAgICAgfCAgIDQgKwogc3JjL2luY2x1 ZGUvbm9kZXMvZXhlY25vZGVzLmggICAgICAgICAgICAgICAgIHwgIDEwICsrCiAuLi4vcmVn cmVzcy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQgICAgfCAgMjIgKystCiBzcmMv dGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQgfCAgIDggKy0KIHNy Yy90ZXN0L3JlZ3Jlc3Mvc3FsL2dlbmVyYXRlZF92aXJ0dWFsLnNxbCAgICB8ICAgNCArLQog c3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCAgICAgIHwgICA2ICst CiAxMyBmaWxlcyBjaGFuZ2VkLCAyMDggaW5zZXJ0aW9ucygrKSwgNDMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvZG9jL3NyYy9zZ21sL2RkbC5zZ21sIGIvZG9jL3NyYy9zZ21sL2Rk bC5zZ21sCmluZGV4IDg0MjFlY2FjZTFiLi43ODY4ODBkNTRhMiAxMDA2NDQKLS0tIGEvZG9j L3NyYy9zZ21sL2RkbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dtbC9kZGwuc2dtbApAQCAtMzU3 LDEwICszNTcsMTEgQEAgSU5TRVJUIElOVE8gcGVvcGxlIChpZCwgbmFtZSwgYWRkcmVzcykg VkFMVUVTICg8ZW1waGFzaXM+REVGQVVMVDwvZW1waGFzaXM+LCAnQycKICAgIGNvbHVtbnMu ICBUaHVzLCBpdCBpcyBmb3IgY29sdW1ucyB3aGF0IGEgdmlldyBpcyBmb3IgdGFibGVzLiAg VGhlcmUgYXJlIHR3bwogICAga2luZHMgb2YgZ2VuZXJhdGVkIGNvbHVtbnM6IHN0b3JlZCBh bmQgdmlydHVhbC4gIEEgc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW4KICAgIGlzIGNvbXB1dGVk IHdoZW4gaXQgaXMgd3JpdHRlbiAoaW5zZXJ0ZWQgb3IgdXBkYXRlZCkgYW5kIG9jY3VwaWVz IHN0b3JhZ2UKLSAgIGFzIGlmIGl0IHdlcmUgYSBub3JtYWwgY29sdW1uLiAgQSB2aXJ0dWFs IGdlbmVyYXRlZCBjb2x1bW4gb2NjdXBpZXMgbm8KLSAgIHN0b3JhZ2UgYW5kIGlzIGNvbXB1 dGVkIHdoZW4gaXQgaXMgcmVhZC4gIFRodXMsIGEgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u Ci0gICBpcyBzaW1pbGFyIHRvIGEgdmlldyBhbmQgYSBzdG9yZWQgZ2VuZXJhdGVkIGNvbHVt biBpcyBzaW1pbGFyIHRvIGEKLSAgIG1hdGVyaWFsaXplZCB2aWV3IChleGNlcHQgdGhhdCBp dCBpcyBhbHdheXMgdXBkYXRlZCBhdXRvbWF0aWNhbGx5KS4KKyAgIGFzIGlmIGl0IHdlcmUg YSBub3JtYWwgY29sdW1uLiAgQSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW4gaXMgYWxzbyBj b21wdXRlZCB3aGVuCisgICBpdCBpcyB3cml0dGVuLCBidXQgb2NjdXBpZXMgbm8gc3RvcmFn ZSBhbmQgaXMgcmVjb21wdXRlZCBvbiBldmVyeSByZWFkLgorICAgVGh1cywgYSB2aXJ0dWFs IGdlbmVyYXRlZCBjb2x1bW4gaXMgc2ltaWxhciB0byBhIHZpZXcgYW5kIGEgc3RvcmVkIGdl bmVyYXRlZAorICAgY29sdW1uIGlzIHNpbWlsYXIgdG8gYSBtYXRlcmlhbGl6ZWQgdmlldyAo ZXhjZXB0IHRoYXQgaXQgaXMgYWx3YXlzIHVwZGF0ZWQKKyAgIGF1dG9tYXRpY2FsbHkpCiAg IDwvcGFyYT4KIAogICA8cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3Jl YXRlX2ZvcmVpZ25fdGFibGUuc2dtbCBiL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2ZvcmVp Z25fdGFibGUuc2dtbAppbmRleCAwODNmMTY3NzJiNy4uZTg1NTc5YmUxOGYgMTAwNjQ0Ci0t LSBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX2ZvcmVpZ25fdGFibGUuc2dtbAorKysgYi9k b2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV9mb3JlaWduX3RhYmxlLnNnbWwKQEAgLTQwMywxMiAr NDAzLDEzIEBAIFdJVEggKCBNT0RVTFVTIDxyZXBsYWNlYWJsZSBjbGFzcz0icGFyYW1ldGVy Ij5udW1lcmljX2xpdGVyYWw8L3JlcGxhY2VhYmxlPiwgUkVNCiAKICAgICAgPHBhcmE+CiAg ICAgICBXaGVuIDxsaXRlcmFsPlZJUlRVQUw8L2xpdGVyYWw+IGlzIHNwZWNpZmllZCwgdGhl IGNvbHVtbiB3aWxsIGJlCi0gICAgICBjb21wdXRlZCB3aGVuIGl0IGlzIHJlYWQuICAoVGhl IGZvcmVpZ24tZGF0YSB3cmFwcGVyIHdpbGwgc2VlIGl0IGFzIGEKLSAgICAgIG51bGwgdmFs dWUgaW4gbmV3IHJvd3MgYW5kIG1heSBjaG9vc2UgdG8gc3RvcmUgaXQgYXMgYSBudWxsIHZh bHVlIG9yCi0gICAgICBpZ25vcmUgaXQgYWx0b2dldGhlci4pICBXaGVuIDxsaXRlcmFsPlNU T1JFRDwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkLCB0aGUKLSAgICAgIGNvbHVtbiB3aWxsIGJl IGNvbXB1dGVkIG9uIHdyaXRlLiAgKFRoZSBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIHByZXNl bnRlZAotICAgICAgdG8gdGhlIGZvcmVpZ24tZGF0YSB3cmFwcGVyIGZvciBzdG9yYWdlIGFu ZCBtdXN0IGJlIHJldHVybmVkIG9uCi0gICAgICByZWFkaW5nLikgIDxsaXRlcmFsPlZJUlRV QUw8L2xpdGVyYWw+IGlzIHRoZSBkZWZhdWx0LgorICAgICAgY29tcHV0ZWQgd2hlbiBpdCBp cyB3cml0dGVuLCBidXQgaXQgd2lsbCBub3Qgb2NjdXB5IGFueSBzdG9yYWdlLgorICAgICAg KFRoZSBmb3JlaWduLWRhdGEgd3JhcHBlciB3aWxsIHNlZSBpdCBhcyBhIG51bGwgdmFsdWUg aW4gbmV3IHJvd3MKKyAgICAgIGFuZCBtYXkgY2hvb3NlIHRvIHN0b3JlIGl0IGFzIGEgbnVs bCB2YWx1ZSBvciBpZ25vcmUgaXQgYWx0b2dldGhlci4pCisgICAgICBXaGVuIDxsaXRlcmFs PlNUT1JFRDwvbGl0ZXJhbD4gaXMgc3BlY2lmaWVkLCB0aGUgY29sdW1uIHdpbGwgYmUgY29t cHV0ZWQKKyAgICAgIG9uIHdyaXRlLiAgKFRoZSBjb21wdXRlZCB2YWx1ZSB3aWxsIGJlIHBy ZXNlbnRlZCB0byB0aGUgZm9yZWlnbi1kYXRhCisgICAgICB3cmFwcGVyIGZvciBzdG9yYWdl IGFuZCBtdXN0IGJlIHJldHVybmVkIG9uIHJlYWRpbmcuKQorICAgICAgPGxpdGVyYWw+VklS VFVBTDwvbGl0ZXJhbD4gaXMgdGhlIGRlZmF1bHQuCiAgICAgIDwvcGFyYT4KIAogICAgICA8 cGFyYT4KZGlmZiAtLWdpdCBhL2RvYy9zcmMvc2dtbC9yZWYvY3JlYXRlX3RhYmxlLnNnbWwg Yi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCmluZGV4IDk4MjUzMmZlNzI1 Li44YzExYzg1NjA0MiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL3JlZi9jcmVhdGVfdGFi bGUuc2dtbAorKysgYi9kb2Mvc3JjL3NnbWwvcmVmL2NyZWF0ZV90YWJsZS5zZ21sCkBAIC05 MTMsOCArOTEzLDggQEAgV0lUSCAoIE1PRFVMVVMgPHJlcGxhY2VhYmxlIGNsYXNzPSJwYXJh bWV0ZXIiPm51bWVyaWNfbGl0ZXJhbDwvcmVwbGFjZWFibGU+LCBSRU0KICAgICAgPC9wYXJh PgogCiAgICAgIDxwYXJhPgotICAgICAgV2hlbiA8bGl0ZXJhbD5WSVJUVUFMPC9saXRlcmFs PiBpcyBzcGVjaWZpZWQsIHRoZSBjb2x1bW4gd2lsbCBiZQotICAgICAgY29tcHV0ZWQgd2hl biBpdCBpcyByZWFkLCBhbmQgaXQgd2lsbCBub3Qgb2NjdXB5IGFueSBzdG9yYWdlLiAgV2hl bgorICAgICAgV2hlbiA8bGl0ZXJhbD5WSVJUVUFMPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQs IHRoZSBjb2x1bW4gd2lsbCBiZSBjb21wdXRlZAorICAgICAgd2hlbiBpdCBpcyB3cml0dGVu IGFuZCByZWFkLCBidXQgaXQgd2lsbCBub3Qgb2NjdXB5IGFueSBzdG9yYWdlLiAgV2hlbgog ICAgICAgPGxpdGVyYWw+U1RPUkVEPC9saXRlcmFsPiBpcyBzcGVjaWZpZWQsIHRoZSBjb2x1 bW4gd2lsbCBiZSBjb21wdXRlZCBvbgogICAgICAgd3JpdGUgYW5kIHdpbGwgYmUgc3RvcmVk IG9uIGRpc2suICA8bGl0ZXJhbD5WSVJUVUFMPC9saXRlcmFsPiBpcyB0aGUKICAgICAgIGRl ZmF1bHQuCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9leGVjRXhwckludGVy cC5jIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJbnRlcnAuYwppbmRleCA2MWZm NWRkYzc0Yy4uZmMxY2E4OTg4NDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9y L2V4ZWNFeHBySW50ZXJwLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY0V4cHJJ bnRlcnAuYwpAQCAtMjQwNSw5ICsyNDA1LDEwIEBAIENoZWNrVmFyU2xvdENvbXBhdGliaWxp dHkoVHVwbGVUYWJsZVNsb3QgKnNsb3QsIGludCBhdHRudW0sIE9pZCB2YXJ0eXBlKQogCiAJ CWF0dHIgPSBUdXBsZURlc2NBdHRyKHNsb3RfdHVwZGVzYywgYXR0bnVtIC0gMSk7CiAKLQkJ LyogSW50ZXJuYWwgZXJyb3I6IHNvbWVib2R5IGZvcmdvdCB0byBleHBhbmQgaXQuICovCi0J CWlmIChhdHRyLT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFM KQotCQkJZWxvZyhFUlJPUiwgInVuZXhwZWN0ZWQgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1u IHJlZmVyZW5jZSIpOworCQkvKgorCQkgKiBWaXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGFy ZSBub3cgY29tcHV0ZWQgYW5kIHN0b3JlZCBpbiB0aGUgc2xvdAorCQkgKiBieSBFeGVjQ29t cHV0ZVZpcnR1YWxHZW5lcmF0ZWQoKSwgc28gcmVhZGluZyB0aGVtIGlzIHZhbGlkLgorCQkg Ki8KIAogCQlpZiAoYXR0ci0+YXR0aXNkcm9wcGVkKQogCQkJZXJlcG9ydChFUlJPUiwKZGlm ZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNNYWluLmMgYi9zcmMvYmFja2Vu ZC9leGVjdXRvci9leGVjTWFpbi5jCmluZGV4IDQwMTVhZWYxYjFmLi5mZTAyNzM3OGEzNyAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY01haW4uYworKysgYi9zcmMv YmFja2VuZC9leGVjdXRvci9leGVjTWFpbi5jCkBAIC01MSw2ICs1MSw4IEBACiAjaW5jbHVk ZSAiZm9yZWlnbi9mZHdhcGkuaCIKICNpbmNsdWRlICJtYi9wZ193Y2hhci5oIgogI2luY2x1 ZGUgIm1pc2NhZG1pbi5oIgorI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgorI2luY2x1 ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm5vZGVzL3F1ZXJ5anVtYmxlLmgi CiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX3JlbGF0aW9uLmgiCiAjaW5jbHVkZSAicGdzdGF0 LmgiCkBAIC0xMzA5LDYgKzEzMTEsOCBAQCBJbml0UmVzdWx0UmVsSW5mbyhSZXN1bHRSZWxJ bmZvICpyZXN1bHRSZWxJbmZvLAogCXJlc3VsdFJlbEluZm8tPnJpX0dlblZpcnR1YWxOb3RO dWxsQ29uc3RyYWludEV4cHJzID0gTlVMTDsKIAlyZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0 ZWRFeHByc0kgPSBOVUxMOwogCXJlc3VsdFJlbEluZm8tPnJpX0dlbmVyYXRlZEV4cHJzVSA9 IE5VTEw7CisJcmVzdWx0UmVsSW5mby0+cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzSSA9IE5V TEw7CisJcmVzdWx0UmVsSW5mby0+cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzVSA9IE5VTEw7 CiAJcmVzdWx0UmVsSW5mby0+cmlfcHJvamVjdFJldHVybmluZyA9IE5VTEw7CiAJcmVzdWx0 UmVsSW5mby0+cmlfb25Db25mbGljdEFyYml0ZXJJbmRleGVzID0gTklMOwogCXJlc3VsdFJl bEluZm8tPnJpX29uQ29uZmxpY3QgPSBOVUxMOwpAQCAtMTgyOCw3ICsxODMyLDEzIEBAIEV4 ZWNSZWxDaGVjayhSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCWNvbnRpbnVl OwogCiAJCQljaGVja2NvbnN0ciA9IHN0cmluZ1RvTm9kZShjaGVja1tpXS5jY2Jpbik7Ci0J CQljaGVja2NvbnN0ciA9IChFeHByICopIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9l eHByKChOb2RlICopIGNoZWNrY29uc3RyLCByZWwsIDEpOworCisJCQkvKgorCQkJICogTm8g bmVlZCB0byBjYWxsIGV4cGFuZF9nZW5lcmF0ZWRfY29sdW1uc19pbl9leHByKCkgaGVyZS4K KwkJCSAqIFZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbiB2YWx1ZXMgYXJlIGNvbXB1dGVkIGFu ZCBzdG9yZWQgaW4gdGhlCisJCQkgKiBzbG90IGJ5IEV4ZWNDb21wdXRlVmlydHVhbEdlbmVy YXRlZCgpIGJlZm9yZSB3ZSBnZXQgaGVyZSwgc28KKwkJCSAqIHRoZSBleHByZXNzaW9uIGV2 YWx1YXRvciBjYW4gcmVhZCB0aGVtIGRpcmVjdGx5IGZyb20gdGhlIHNsb3QuCisJCQkgKi8K IAkJCXJlc3VsdFJlbEluZm8tPnJpX0NoZWNrQ29uc3RyYWludEV4cHJzW2ldID0KIAkJCQlF eGVjUHJlcGFyZUV4cHIoY2hlY2tjb25zdHIsIGVzdGF0ZSk7CiAJCX0KQEAgLTI0ODksOSAr MjQ5OSwxMiBAQCBFeGVjQnVpbGRTbG90VmFsdWVEZXNjcmlwdGlvbihPaWQgcmVsb2lkLAog CiAJCWlmICh0YWJsZV9wZXJtIHx8IGNvbHVtbl9wZXJtKQogCQl7Ci0JCQlpZiAoYXR0LT5h dHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQotCQkJCXZhbCA9 ICJ2aXJ0dWFsIjsKLQkJCWVsc2UgaWYgKHNsb3QtPnR0c19pc251bGxbaV0pCisJCQkvKgor CQkJICogVmlydHVhbCBnZW5lcmF0ZWQgY29sdW1uIHZhbHVlcyBhcmUgY29tcHV0ZWQgYW5k IHN0b3JlZCBpbiB0aGUKKwkJCSAqIHNsb3QgYnkgRXhlY0NvbXB1dGVWaXJ0dWFsR2VuZXJh dGVkKCksIHNvIHdlIGNhbiByZWFkIHRoZW0KKwkJCSAqIGRpcmVjdGx5IGxpa2UgcmVndWxh ciBjb2x1bW5zLgorCQkJICovCisJCQlpZiAoc2xvdC0+dHRzX2lzbnVsbFtpXSkKIAkJCQl2 YWwgPSAibnVsbCI7CiAJCQllbHNlCiAJCQl7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9l eGVjdXRvci9leGVjUmVwbGljYXRpb24uYyBiL3NyYy9iYWNrZW5kL2V4ZWN1dG9yL2V4ZWNS ZXBsaWNhdGlvbi5jCmluZGV4IDI0OTdlZTdlZGM1Li43ZTkxNTJlNDIyNCAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKKysrIGIvc3JjL2Jh Y2tlbmQvZXhlY3V0b3IvZXhlY1JlcGxpY2F0aW9uLmMKQEAgLTgzNCw2ICs4MzQsMTIgQEAg RXhlY1NpbXBsZVJlbGF0aW9uSW5zZXJ0KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8s CiAJCQlFeGVjQ29tcHV0ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUs IHNsb3QsCiAJCQkJCQkJCQkgICBDTURfSU5TRVJUKTsKIAorCQkvKiBDb21wdXRlIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMgKi8KKwkJaWYgKHJlbC0+cmRfYXR0LT5jb25zdHIgJiYK KwkJCXJlbC0+cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfdmlydHVhbCkKKwkJCUV4 ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3Qs CisJCQkJCQkJCQkJQ01EX0lOU0VSVCk7CisKIAkJLyogQ2hlY2sgdGhlIGNvbnN0cmFpbnRz IG9mIHRoZSB0dXBsZSAqLwogCQlpZiAocmVsLT5yZF9hdHQtPmNvbnN0cikKIAkJCUV4ZWND b25zdHJhaW50cyhyZXN1bHRSZWxJbmZvLCBzbG90LCBlc3RhdGUpOwpAQCAtOTM4LDYgKzk0 NCwxMiBAQCBFeGVjU2ltcGxlUmVsYXRpb25VcGRhdGUoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKIAkJCUV4ZWNDb21wdXRlU3RvcmVkR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8s IGVzdGF0ZSwgc2xvdCwKIAkJCQkJCQkJCSAgIENNRF9VUERBVEUpOwogCisJCS8qIENvbXB1 dGUgdmlydHVhbCBnZW5lcmF0ZWQgY29sdW1ucyAqLworCQlpZiAocmVsLT5yZF9hdHQtPmNv bnN0ciAmJgorCQkJcmVsLT5yZF9hdHQtPmNvbnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFs KQorCQkJRXhlY0NvbXB1dGVWaXJ0dWFsR2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0 ZSwgc2xvdCwKKwkJCQkJCQkJCQlDTURfVVBEQVRFKTsKKwogCQkvKiBDaGVjayB0aGUgY29u c3RyYWludHMgb2YgdGhlIHR1cGxlICovCiAJCWlmIChyZWwtPnJkX2F0dC0+Y29uc3RyKQog CQkJRXhlY0NvbnN0cmFpbnRzKHJlc3VsdFJlbEluZm8sIHNsb3QsIGVzdGF0ZSk7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuYyBiL3NyYy9i YWNrZW5kL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5jCmluZGV4IDMyN2MyN2FiZmY5Li42 OTU5ZTQ3N2Y4MyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlm eVRhYmxlLmMKKysrIGIvc3JjL2JhY2tlbmQvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmMK QEAgLTQyNSw4ICs0MjUsMTAgQEAgRXhlY0NoZWNrVElEVmlzaWJsZShFU3RhdGUgKmVzdGF0 ZSwKICAqIEluaXRpYWxpemUgZ2VuZXJhdGVkIGNvbHVtbnMgaGFuZGxpbmcgZm9yIGEgdHVw bGUKICAqCiAgKiBUaGlzIGZpbGxzIHRoZSByZXN1bHRSZWxJbmZvJ3MgcmlfR2VuZXJhdGVk RXhwcnNJL3JpX051bUdlbmVyYXRlZE5lZWRlZEkgb3IKLSAqIHJpX0dlbmVyYXRlZEV4cHJz VS9yaV9OdW1HZW5lcmF0ZWROZWVkZWRVIGZpZWxkcywgZGVwZW5kaW5nIG9uIGNtZHR5cGUu Ci0gKiBUaGlzIGlzIHVzZWQgb25seSBmb3Igc3RvcmVkIGdlbmVyYXRlZCBjb2x1bW5zLgor ICogcmlfR2VuZXJhdGVkRXhwcnNVL3JpX051bUdlbmVyYXRlZE5lZWRlZFUgZmllbGRzIGZv ciBzdG9yZWQgZ2VuZXJhdGVkCisgKiBjb2x1bW5zLCBhbmQgcmlfVmlydHVhbEdlbmVyYXRl ZEV4cHJzSS9yaV9OdW1WaXJ0dWFsR2VuZXJhdGVkTmVlZGVkSSBvcgorICogcmlfVmlydHVh bEdlbmVyYXRlZEV4cHJzVS9yaV9OdW1WaXJ0dWFsR2VuZXJhdGVkTmVlZGVkVSBmaWVsZHMg Zm9yIHZpcnR1YWwKKyAqIGdlbmVyYXRlZCBjb2x1bW5zLCBkZXBlbmRpbmcgb24gY21kdHlw ZS4KICAqCiAgKiBJZiBjbWRUeXBlID09IENNRF9VUERBVEUsIHRoZSByaV9leHRyYVVwZGF0 ZWRDb2xzIGZpZWxkIGlzIGZpbGxlZCB0b28uCiAgKiBUaGlzIGlzIHVzZWQgYnkgYm90aCBz dG9yZWQgYW5kIHZpcnR1YWwgZ2VuZXJhdGVkIGNvbHVtbnMuCkBAIC00NDYsNiArNDQ4LDgg QEAgRXhlY0luaXRHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAlp bnQJCQluYXR0cyA9IHR1cGRlc2MtPm5hdHRzOwogCUV4cHJTdGF0ZSAqKnJpX0dlbmVyYXRl ZEV4cHJzOwogCWludAkJCXJpX051bUdlbmVyYXRlZE5lZWRlZDsKKwlFeHByU3RhdGUgKipy aV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnM7CisJaW50CQkJcmlfTnVtVmlydHVhbEdlbmVyYXRl ZE5lZWRlZDsKIAlCaXRtYXBzZXQgICp1cGRhdGVkQ29sczsKIAlNZW1vcnlDb250ZXh0IG9s ZENvbnRleHQ7CiAKQEAgLTQ3Myw2ICs0NzcsOCBAQCBFeGVjSW5pdEdlbmVyYXRlZChSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCiAJcmlfR2VuZXJhdGVkRXhwcnMgPSAoRXhw clN0YXRlICoqKSBwYWxsb2MwKG5hdHRzICogc2l6ZW9mKEV4cHJTdGF0ZSAqKSk7CiAJcmlf TnVtR2VuZXJhdGVkTmVlZGVkID0gMDsKKwlyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnMgPSAo RXhwclN0YXRlICoqKSBwYWxsb2MwKG5hdHRzICogc2l6ZW9mKEV4cHJTdGF0ZSAqKSk7CisJ cmlfTnVtVmlydHVhbEdlbmVyYXRlZE5lZWRlZCA9IDA7CiAKIAlmb3IgKGludCBpID0gMDsg aSA8IG5hdHRzOyBpKyspCiAJewpAQCAtNTA4LDYgKzUxNCwxMSBAQCBFeGVjSW5pdEdlbmVy YXRlZChSZXN1bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAogCQkJCXJpX0dlbmVyYXRlZEV4 cHJzW2ldID0gRXhlY1ByZXBhcmVFeHByKGV4cHIsIGVzdGF0ZSk7CiAJCQkJcmlfTnVtR2Vu ZXJhdGVkTmVlZGVkKys7CiAJCQl9CisJCQllbHNlIGlmIChhdHRnZW5lcmF0ZWQgPT0gQVRU UklCVVRFX0dFTkVSQVRFRF9WSVJUVUFMKQorCQkJeworCQkJCXJpX1ZpcnR1YWxHZW5lcmF0 ZWRFeHByc1tpXSA9IEV4ZWNQcmVwYXJlRXhwcihleHByLCBlc3RhdGUpOworCQkJCXJpX051 bVZpcnR1YWxHZW5lcmF0ZWROZWVkZWQrKzsKKwkJCX0KIAogCQkJLyogSWYgVVBEQVRFLCBt YXJrIGNvbHVtbiBpbiByZXN1bHRSZWxJbmZvLT5yaV9leHRyYVVwZGF0ZWRDb2xzICovCiAJ CQlpZiAoY21kdHlwZSA9PSBDTURfVVBEQVRFKQpAQCAtNTI0LDE0ICs1MzUsMjQgQEAgRXhl Y0luaXRHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJcmlfR2Vu ZXJhdGVkRXhwcnMgPSBOVUxMOwogCX0KIAorCWlmIChyaV9OdW1WaXJ0dWFsR2VuZXJhdGVk TmVlZGVkID09IDApCisJeworCQkvKiBkaWRuJ3QgbmVlZCBpdCBhZnRlciBhbGwgKi8KKwkJ cGZyZWUocmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzKTsKKwkJcmlfVmlydHVhbEdlbmVyYXRl ZEV4cHJzID0gTlVMTDsKKwl9CisKIAkvKiBTYXZlIGluIGFwcHJvcHJpYXRlIHNldCBvZiBm aWVsZHMgKi8KIAlpZiAoY21kdHlwZSA9PSBDTURfVVBEQVRFKQogCXsKIAkJLyogRG9uJ3Qg Y2FsbCB0d2ljZSAqLwogCQlBc3NlcnQocmVzdWx0UmVsSW5mby0+cmlfR2VuZXJhdGVkRXhw cnNVID09IE5VTEwpOworCQlBc3NlcnQocmVzdWx0UmVsSW5mby0+cmlfVmlydHVhbEdlbmVy YXRlZEV4cHJzVSA9PSBOVUxMKTsKIAogCQlyZXN1bHRSZWxJbmZvLT5yaV9HZW5lcmF0ZWRF eHByc1UgPSByaV9HZW5lcmF0ZWRFeHByczsKIAkJcmVzdWx0UmVsSW5mby0+cmlfTnVtR2Vu ZXJhdGVkTmVlZGVkVSA9IHJpX051bUdlbmVyYXRlZE5lZWRlZDsKKwkJcmVzdWx0UmVsSW5m by0+cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzVSA9IHJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHBy czsKKwkJcmVzdWx0UmVsSW5mby0+cmlfTnVtVmlydHVhbEdlbmVyYXRlZE5lZWRlZFUgPSBy aV9OdW1WaXJ0dWFsR2VuZXJhdGVkTmVlZGVkOwogCiAJCXJlc3VsdFJlbEluZm8tPnJpX2V4 dHJhVXBkYXRlZENvbHNfdmFsaWQgPSB0cnVlOwogCX0KQEAgLTUzOSw5ICs1NjAsMTIgQEAg RXhlY0luaXRHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAl7CiAJ CS8qIERvbid0IGNhbGwgdHdpY2UgKi8KIAkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX0dl bmVyYXRlZEV4cHJzSSA9PSBOVUxMKTsKKwkJQXNzZXJ0KHJlc3VsdFJlbEluZm8tPnJpX1Zp cnR1YWxHZW5lcmF0ZWRFeHByc0kgPT0gTlVMTCk7CiAKIAkJcmVzdWx0UmVsSW5mby0+cmlf R2VuZXJhdGVkRXhwcnNJID0gcmlfR2VuZXJhdGVkRXhwcnM7CiAJCXJlc3VsdFJlbEluZm8t PnJpX051bUdlbmVyYXRlZE5lZWRlZEkgPSByaV9OdW1HZW5lcmF0ZWROZWVkZWQ7CisJCXJl c3VsdFJlbEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc0kgPSByaV9WaXJ0dWFsR2Vu ZXJhdGVkRXhwcnM7CisJCXJlc3VsdFJlbEluZm8tPnJpX051bVZpcnR1YWxHZW5lcmF0ZWRO ZWVkZWRJID0gcmlfTnVtVmlydHVhbEdlbmVyYXRlZE5lZWRlZDsKIAl9CiAKIAlNZW1vcnlD b250ZXh0U3dpdGNoVG8ob2xkQ29udGV4dCk7CkBAIC02MzcsNiArNjYxLDg1IEBAIEV4ZWND b21wdXRlU3RvcmVkR2VuZXJhdGVkKFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJ TWVtb3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOwogfQogCisvKgorICogQ29tcHV0 ZSB2aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zIGZvciBhIHR1cGxlCisgKgorICogVGhpcyBl dmFsdWF0ZXMgdGhlIGdlbmVyYXRpb24gZXhwcmVzc2lvbnMgZm9yIHZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbnMKKyAqIGFuZCBzdG9yZXMgdGhlIHJlc3VsdHMgZGlyZWN0bHkgaW4gdGhl IHNsb3QuIFVubGlrZSBzdG9yZWQgZ2VuZXJhdGVkCisgKiBjb2x1bW5zLCB0aGVzZSB2YWx1 ZXMgYXJlIG5vdCBwZXJzaXN0ZWQgdG8gZGlzayBidXQgYXJlIGNvbXB1dGVkIGZvcgorICog dXNlIGluIGNvbnN0cmFpbnQgY2hlY2tpbmcgYW5kIGVycm9yIG1lc3NhZ2VzLgorICovCit2 b2lkCitFeGVjQ29tcHV0ZVZpcnR1YWxHZW5lcmF0ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0 UmVsSW5mbywKKwkJCQkJCQlFU3RhdGUgKmVzdGF0ZSwgVHVwbGVUYWJsZVNsb3QgKnNsb3Qs CisJCQkJCQkJQ21kVHlwZSBjbWR0eXBlKQoreworCVJlbGF0aW9uCXJlbCA9IHJlc3VsdFJl bEluZm8tPnJpX1JlbGF0aW9uRGVzYzsKKwlUdXBsZURlc2MJdHVwZGVzYyA9IFJlbGF0aW9u R2V0RGVzY3IocmVsKTsKKwlpbnQJCQluYXR0cyA9IHR1cGRlc2MtPm5hdHRzOworCUV4cHJD b250ZXh0ICplY29udGV4dCA9IEdldFBlclR1cGxlRXhwckNvbnRleHQoZXN0YXRlKTsKKwlF eHByU3RhdGUgKipyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnM7CisJTWVtb3J5Q29udGV4dCBv bGRDb250ZXh0OworCisJLyogV2Ugc2hvdWxkIG5vdCBiZSBjYWxsZWQgdW5sZXNzIHRoaXMg aXMgdHJ1ZSAqLworCUFzc2VydCh0dXBkZXNjLT5jb25zdHIgJiYgdHVwZGVzYy0+Y29uc3Ry LT5oYXNfZ2VuZXJhdGVkX3ZpcnR1YWwpOworCisJLyoKKwkgKiBJbml0aWFsaXplIHRoZSBl eHByZXNzaW9ucyBpZiB3ZSBkaWRuJ3QgYWxyZWFkeSwgYW5kIGNoZWNrIHdoZXRoZXIgd2UK KwkgKiBjYW4gZXhpdCBlYXJseSBiZWNhdXNlIG5vdGhpbmcgbmVlZHMgdG8gYmUgY29tcHV0 ZWQuCisJICovCisJaWYgKGNtZHR5cGUgPT0gQ01EX1VQREFURSkKKwl7CisJCWlmIChyZXN1 bHRSZWxJbmZvLT5yaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNVID09IE5VTEwpCisJCQlFeGVj SW5pdEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIGNtZHR5cGUpOworCQlpZiAo cmVzdWx0UmVsSW5mby0+cmlfTnVtVmlydHVhbEdlbmVyYXRlZE5lZWRlZFUgPT0gMCkKKwkJ CXJldHVybjsKKwkJcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzID0gcmVzdWx0UmVsSW5mby0+ cmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzVTsKKwl9CisJZWxzZQorCXsKKwkJaWYgKHJlc3Vs dFJlbEluZm8tPnJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc0kgPT0gTlVMTCkKKwkJCUV4ZWNJ bml0R2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgY21kdHlwZSk7CisJCWlmIChy ZXN1bHRSZWxJbmZvLT5yaV9OdW1WaXJ0dWFsR2VuZXJhdGVkTmVlZGVkSSA9PSAwKQorCQkJ cmV0dXJuOworCQlyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnMgPSByZXN1bHRSZWxJbmZvLT5y aV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNJOworCX0KKworCW9sZENvbnRleHQgPSBNZW1vcnlD b250ZXh0U3dpdGNoVG8oR2V0UGVyVHVwbGVNZW1vcnlDb250ZXh0KGVzdGF0ZSkpOworCisJ LyogTWFrZSBzdXJlIGFsbCBiYXNlIGNvbHVtbiB2YWx1ZXMgYXJlIGF2YWlsYWJsZSAqLwor CXNsb3RfZ2V0YWxsYXR0cnMoc2xvdCk7CisKKwllY29udGV4dC0+ZWN4dF9zY2FudHVwbGUg PSBzbG90OworCisJZm9yIChpbnQgaSA9IDA7IGkgPCBuYXR0czsgaSsrKQorCXsKKwkJQ29t cGFjdEF0dHJpYnV0ZSAqYXR0ciA9IFR1cGxlRGVzY0NvbXBhY3RBdHRyKHR1cGRlc2MsIGkp OworCisJCWlmIChyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNbaV0pCisJCXsKKwkJCURhdHVt CQl2YWw7CisJCQlib29sCQlpc251bGw7CisKKwkJCUFzc2VydChUdXBsZURlc2NBdHRyKHR1 cGRlc2MsIGkpLT5hdHRnZW5lcmF0ZWQgPT0gQVRUUklCVVRFX0dFTkVSQVRFRF9WSVJUVUFM KTsKKworCQkJdmFsID0gRXhlY0V2YWxFeHByKHJpX1ZpcnR1YWxHZW5lcmF0ZWRFeHByc1tp XSwgZWNvbnRleHQsICZpc251bGwpOworCisJCQkvKgorCQkJICogV2UgbXVzdCBtYWtlIGEg Y29weSBvZiB2YWwgYXMgd2UgaGF2ZSBubyBndWFyYW50ZWVzIGFib3V0IHdoZXJlCisJCQkg KiBtZW1vcnkgZm9yIGEgcGFzcy1ieS1yZWZlcmVuY2UgRGF0dW0gaXMgbG9jYXRlZC4KKwkJ CSAqLworCQkJaWYgKCFpc251bGwpCisJCQkJdmFsID0gZGF0dW1Db3B5KHZhbCwgYXR0ci0+ YXR0Ynl2YWwsIGF0dHItPmF0dGxlbik7CisKKwkJCXNsb3QtPnR0c192YWx1ZXNbaV0gPSB2 YWw7CisJCQlzbG90LT50dHNfaXNudWxsW2ldID0gaXNudWxsOworCQl9CisJfQorCisJTWVt b3J5Q29udGV4dFN3aXRjaFRvKG9sZENvbnRleHQpOworfQorCiAvKgogICogRXhlY0luaXRJ bnNlcnRQcm9qZWN0aW9uCiAgKgkJRG8gb25lLXRpbWUgaW5pdGlhbGl6YXRpb24gb2YgcHJv amVjdGlvbiBkYXRhIGZvciBJTlNFUlQgdHVwbGVzLgpAQCAtOTQ1LDYgKzEwNDgsMTQgQEAg RXhlY0luc2VydChNb2RpZnlUYWJsZUNvbnRleHQgKmNvbnRleHQsCiAJCQlFeGVjQ29tcHV0 ZVN0b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCiAJCQkJCQkJ CQkgICBDTURfSU5TRVJUKTsKIAorCQkvKgorCQkgKiBDb21wdXRlIHZpcnR1YWwgZ2VuZXJh dGVkIGNvbHVtbnMKKwkJICovCisJCWlmIChyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+ Y29uc3RyICYmCisJCQlyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNf Z2VuZXJhdGVkX3ZpcnR1YWwpCisJCQlFeGVjQ29tcHV0ZVZpcnR1YWxHZW5lcmF0ZWQocmVz dWx0UmVsSW5mbywgZXN0YXRlLCBzbG90LAorCQkJCQkJCQkJCUNNRF9JTlNFUlQpOworCiAJ CS8qCiAJCSAqIElmIHRoZSBGRFcgc3VwcG9ydHMgYmF0Y2hpbmcsIGFuZCBiYXRjaGluZyBp cyByZXF1ZXN0ZWQsIGFjY3VtdWxhdGUKIAkJICogcm93cyBhbmQgaW5zZXJ0IHRoZW0gaW4g YmF0Y2hlcy4gT3RoZXJ3aXNlIHVzZSB0aGUgcGVyLXJvdyBpbnNlcnRzLgpAQCAtMTA3MCw2 ICsxMTgxLDE0IEBAIEV4ZWNJbnNlcnQoTW9kaWZ5VGFibGVDb250ZXh0ICpjb250ZXh0LAog CQkJRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0ZWQocmVzdWx0UmVsSW5mbywgZXN0YXRlLCBz bG90LAogCQkJCQkJCQkJICAgQ01EX0lOU0VSVCk7CiAKKwkJLyoKKwkJICogQ29tcHV0ZSB2 aXJ0dWFsIGdlbmVyYXRlZCBjb2x1bW5zCisJCSAqLworCQlpZiAocmVzdWx0UmVsYXRpb25E ZXNjLT5yZF9hdHQtPmNvbnN0ciAmJgorCQkJcmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQt PmNvbnN0ci0+aGFzX2dlbmVyYXRlZF92aXJ0dWFsKQorCQkJRXhlY0NvbXB1dGVWaXJ0dWFs R2VuZXJhdGVkKHJlc3VsdFJlbEluZm8sIGVzdGF0ZSwgc2xvdCwKKwkJCQkJCQkJCQlDTURf SU5TRVJUKTsKKwogCQkvKgogCQkgKiBDaGVjayBhbnkgUkxTIFdJVEggQ0hFQ0sgcG9saWNp ZXMuCiAJCSAqCkBAIC0yMTc4LDYgKzIyOTcsMTQgQEAgRXhlY1VwZGF0ZVByZXBhcmVTbG90 KFJlc3VsdFJlbEluZm8gKnJlc3VsdFJlbEluZm8sCiAJCXJlc3VsdFJlbGF0aW9uRGVzYy0+ cmRfYXR0LT5jb25zdHItPmhhc19nZW5lcmF0ZWRfc3RvcmVkKQogCQlFeGVjQ29tcHV0ZVN0 b3JlZEdlbmVyYXRlZChyZXN1bHRSZWxJbmZvLCBlc3RhdGUsIHNsb3QsCiAJCQkJCQkJCSAg IENNRF9VUERBVEUpOworCisJLyoKKwkgKiBDb21wdXRlIHZpcnR1YWwgZ2VuZXJhdGVkIGNv bHVtbnMKKwkgKi8KKwlpZiAocmVzdWx0UmVsYXRpb25EZXNjLT5yZF9hdHQtPmNvbnN0ciAm JgorCQlyZXN1bHRSZWxhdGlvbkRlc2MtPnJkX2F0dC0+Y29uc3RyLT5oYXNfZ2VuZXJhdGVk X3ZpcnR1YWwpCisJCUV4ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRlZChyZXN1bHRSZWxJbmZv LCBlc3RhdGUsIHNsb3QsCisJCQkJCQkJCQlDTURfVVBEQVRFKTsKIH0KIAogLyoKZGlmZiAt LWdpdCBhL3NyYy9pbmNsdWRlL2V4ZWN1dG9yL25vZGVNb2RpZnlUYWJsZS5oIGIvc3JjL2lu Y2x1ZGUvZXhlY3V0b3Ivbm9kZU1vZGlmeVRhYmxlLmgKaW5kZXggZjYwNzBlMWNkZjMuLjdj YmJlOGMxYTFmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5 VGFibGUuaAorKysgYi9zcmMvaW5jbHVkZS9leGVjdXRvci9ub2RlTW9kaWZ5VGFibGUuaApA QCAtMjMsNiArMjMsMTAgQEAgZXh0ZXJuIHZvaWQgRXhlY0NvbXB1dGVTdG9yZWRHZW5lcmF0 ZWQoUmVzdWx0UmVsSW5mbyAqcmVzdWx0UmVsSW5mbywKIAkJCQkJCQkJCSAgIEVTdGF0ZSAq ZXN0YXRlLCBUdXBsZVRhYmxlU2xvdCAqc2xvdCwKIAkJCQkJCQkJCSAgIENtZFR5cGUgY21k dHlwZSk7CiAKK2V4dGVybiB2b2lkIEV4ZWNDb21wdXRlVmlydHVhbEdlbmVyYXRlZChSZXN1 bHRSZWxJbmZvICpyZXN1bHRSZWxJbmZvLAorCQkJCQkJCQkJCUVTdGF0ZSAqZXN0YXRlLCBU dXBsZVRhYmxlU2xvdCAqc2xvdCwKKwkJCQkJCQkJCQlDbWRUeXBlIGNtZHR5cGUpOworCiBl eHRlcm4gTW9kaWZ5VGFibGVTdGF0ZSAqRXhlY0luaXRNb2RpZnlUYWJsZShNb2RpZnlUYWJs ZSAqbm9kZSwgRVN0YXRlICplc3RhdGUsIGludCBlZmxhZ3MpOwogZXh0ZXJuIHZvaWQgRXhl Y0VuZE1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpOwogZXh0ZXJuIHZvaWQg RXhlY1JlU2Nhbk1vZGlmeVRhYmxlKE1vZGlmeVRhYmxlU3RhdGUgKm5vZGUpOwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvZXhlY25vZGVzLmggYi9zcmMvaW5jbHVkZS9ub2Rl cy9leGVjbm9kZXMuaAppbmRleCA2M2MwNjdkNWFhZS4uNTAyZTRlMTRkNjQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL25vZGVzL2V4ZWNub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25v ZGVzL2V4ZWNub2Rlcy5oCkBAIC01NzMsNiArNTczLDE2IEBAIHR5cGVkZWYgc3RydWN0IFJl c3VsdFJlbEluZm8KIAlpbnQJCQlyaV9OdW1HZW5lcmF0ZWROZWVkZWRJOwogCWludAkJCXJp X051bUdlbmVyYXRlZE5lZWRlZFU7CiAKKwkvKgorCSAqIEFycmF5cyBvZiB2aXJ0dWFsIGdl bmVyYXRlZCBjb2x1bW5zIEV4cHJTdGF0ZXMgZm9yIElOU0VSVC9VUERBVEUvTUVSR0UuCisJ ICovCisJRXhwclN0YXRlICoqcmlfVmlydHVhbEdlbmVyYXRlZEV4cHJzSTsKKwlFeHByU3Rh dGUgKipyaV9WaXJ0dWFsR2VuZXJhdGVkRXhwcnNVOworCisJLyogbnVtYmVyIG9mIHZpcnR1 YWwgZ2VuZXJhdGVkIGNvbHVtbnMgd2UgbmVlZCB0byBjb21wdXRlICovCisJaW50CQkJcmlf TnVtVmlydHVhbEdlbmVyYXRlZE5lZWRlZEk7CisJaW50CQkJcmlfTnVtVmlydHVhbEdlbmVy YXRlZE5lZWRlZFU7CisKIAkvKiBsaXN0IG9mIFJFVFVSTklORyBleHByZXNzaW9ucyAqLwog CUxpc3QJICAgKnJpX3JldHVybmluZ0xpc3Q7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3Jl Z3Jlc3MvZXhwZWN0ZWQvZ2VuZXJhdGVkX3ZpcnR1YWwub3V0IGIvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9nZW5lcmF0ZWRfdmlydHVhbC5vdXQKaW5kZXggNmRhYjYwYzkzN2IuLjE4 Y2ZkNWFiNDZjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVy YXRlZF92aXJ0dWFsLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2dlbmVy YXRlZF92aXJ0dWFsLm91dApAQCAtMTY2LDExICsxNjYsOSBAQCBTRUxFQ1QgYSwgYiBGUk9N IGd0ZXN0MSBXSEVSRSBiID0gNCBPUkRFUiBCWSBhOwogIDIgfCA0CiAoMSByb3cpCiAKLS0t IHRlc3QgdGhhdCBvdmVyZmxvdyBlcnJvciBoYXBwZW5zIG9uIHJlYWQKKy0tIHRlc3QgdGhh dCBvdmVyZmxvdyBlcnJvciBoYXBwZW5zIG9uIHdyaXRlCiBJTlNFUlQgSU5UTyBndGVzdDEg VkFMVUVTICgyMDAwMDAwMDAwKTsKLVNFTEVDVCAqIEZST00gZ3Rlc3QxOwogRVJST1I6ICBp bnRlZ2VyIG91dCBvZiByYW5nZQotREVMRVRFIEZST00gZ3Rlc3QxIFdIRVJFIGEgPSAyMDAw MDAwMDAwOwogLS0gdGVzdCB3aXRoIGpvaW5zCiBDUkVBVEUgVEFCTEUgZ3Rlc3R4ICh4IGlu dCwgeSBpbnQpOwogSU5TRVJUIElOVE8gZ3Rlc3R4IFZBTFVFUyAoMTEsIDEpLCAoMjIsIDIp LCAoMzMsIDMpOwpAQCAtNjM4LDcgKzYzNiw3IEBAIENSRUFURSBUQUJMRSBndGVzdDIwIChh IGludCBQUklNQVJZIEtFWSwgYiBpbnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoYSAqIDIpIFZJ UlRVCiBJTlNFUlQgSU5UTyBndGVzdDIwIChhKSBWQUxVRVMgKDEwKTsgIC0tIG9rCiBJTlNF UlQgSU5UTyBndGVzdDIwIChhKSBWQUxVRVMgKDMwKTsgIC0tIHZpb2xhdGVzIGNvbnN0cmFp bnQKIEVSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24gImd0ZXN0MjAiIHZpb2xhdGVzIGNo ZWNrIGNvbnN0cmFpbnQgImd0ZXN0MjBfYl9jaGVjayIKLURFVEFJTDogIEZhaWxpbmcgcm93 IGNvbnRhaW5zICgzMCwgdmlydHVhbCkuCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlu cyAoMzAsIDYwKS4KIEFMVEVSIFRBQkxFIGd0ZXN0MjAgQUxURVIgQ09MVU1OIGIgU0VUIEVY UFJFU1NJT04gQVMgKGEgKiAxMDApOyAgLS0gdmlvbGF0ZXMgY29uc3RyYWludAogRVJST1I6 ICBjaGVjayBjb25zdHJhaW50ICJndGVzdDIwX2JfY2hlY2siIG9mIHJlbGF0aW9uICJndGVz dDIwIiBpcyB2aW9sYXRlZCBieSBzb21lIHJvdwogQUxURVIgVEFCTEUgZ3Rlc3QyMCBBTFRF UiBDT0xVTU4gYiBTRVQgRVhQUkVTU0lPTiBBUyAoYSAqIDMpOyAgLS0gb2sKQEAgLTY4NCwx OCArNjgyLDE4IEBAIEFMVEVSIFRBQkxFIGd0ZXN0MjBjIEFERCBDT05TVFJBSU5UIHdob2xl X3Jvd19jaGVjayBDSEVDSyAoZ3Rlc3QyMGMgSVMgTk9UIE5VTEwpCiBJTlNFUlQgSU5UTyBn dGVzdDIwYyBWQUxVRVMgKDEpOyAgLS0gb2sKIElOU0VSVCBJTlRPIGd0ZXN0MjBjIFZBTFVF UyAoTlVMTCk7ICAtLSBmYWlscwogRVJST1I6ICBuZXcgcm93IGZvciByZWxhdGlvbiAiZ3Rl c3QyMGMiIHZpb2xhdGVzIGNoZWNrIGNvbnN0cmFpbnQgIndob2xlX3Jvd19jaGVjayIKLURF VEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zIChudWxsLCB2aXJ0dWFsKS4KK0RFVEFJTDog IEZhaWxpbmcgcm93IGNvbnRhaW5zIChudWxsLCBudWxsKS4KIC0tIG5vdC1udWxsIGNvbnN0 cmFpbnRzCiBDUkVBVEUgVEFCTEUgZ3Rlc3QyMWEgKGEgaW50IFBSSU1BUlkgS0VZLCBiIGlu dCBHRU5FUkFURUQgQUxXQVlTIEFTIChudWxsaWYoYSwgMCkpIFZJUlRVQUwgTk9UIE5VTEwp OwogSU5TRVJUIElOVE8gZ3Rlc3QyMWEgKGEpIFZBTFVFUyAoMSk7ICAtLSBvawogSU5TRVJU IElOVE8gZ3Rlc3QyMWEgKGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50 CiBFUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uICJiIiBvZiByZWxhdGlvbiAiZ3Rlc3Qy MWEiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQKLURFVEFJTDogIEZhaWxpbmcgcm93 IGNvbnRhaW5zICgwLCB2aXJ0dWFsKS4KK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5z ICgwLCBudWxsKS4KIC0tIGFsc28gY2hlY2sgd2l0aCB0YWJsZSBjb25zdHJhaW50IHN5bnRh eAogQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJTUFSWSBLRVksIGIgaW50IEdF TkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVBTCwgQ09OU1RSQUlOVCBj YyBOT1QgTlVMTCBiKTsKIElOU0VSVCBJTlRPIGd0ZXN0MjFheCAoYSkgVkFMVUVTICgwKTsg IC0tIHZpb2xhdGVzIGNvbnN0cmFpbnQKIEVSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4g ImIiIG9mIHJlbGF0aW9uICJndGVzdDIxYXgiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFp bnQKLURFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwLCB2aXJ0dWFsKS4KK0RFVEFJ TDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgwLCBudWxsKS4KIElOU0VSVCBJTlRPIGd0ZXN0 MjFheCAoYSkgVkFMVUVTICgxKTsgIC0tb2sKIC0tIFNFVCBFWFBSRVNTSU9OIHN1cHBvcnRz IG5vdCBudWxsIGNvbnN0cmFpbnQKIEFMVEVSIFRBQkxFIGd0ZXN0MjFheCBBTFRFUiBDT0xV TU4gYiBTRVQgRVhQUkVTU0lPTiBBUyAobnVsbGlmKGEsIDEpKTsgLS1lcnJvcgpAQCAtNzA1 LDE3ICs3MDMsMTcgQEAgQ1JFQVRFIFRBQkxFIGd0ZXN0MjFheCAoYSBpbnQgUFJJTUFSWSBL RVksIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLAogQUxURVIgVEFCTEUg Z3Rlc3QyMWF4IEFERCBDT05TVFJBSU5UIGNjIE5PVCBOVUxMIGI7CiBJTlNFUlQgSU5UTyBn dGVzdDIxYXggKGEpIFZBTFVFUyAoMCk7ICAtLSB2aW9sYXRlcyBjb25zdHJhaW50CiBFUlJP UjogIG51bGwgdmFsdWUgaW4gY29sdW1uICJiIiBvZiByZWxhdGlvbiAiZ3Rlc3QyMWF4IiB2 aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50Ci1ERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250 YWlucyAoMCwgdmlydHVhbCkuCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250YWlucyAoMCwg bnVsbCkuCiBEUk9QIFRBQkxFIGd0ZXN0MjFheDsKIENSRUFURSBUQUJMRSBndGVzdDIxYiAo YSBpbnQsIGIgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKG51bGxpZihhLCAwKSkgVklSVFVB TCk7CiBBTFRFUiBUQUJMRSBndGVzdDIxYiBBTFRFUiBDT0xVTU4gYiBTRVQgTk9UIE5VTEw7 CiBJTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTICgxKTsgIC0tIG9rCiBJTlNFUlQg SU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTICgyKSwgKDApOyAgLS0gdmlvbGF0ZXMgY29uc3Ry YWludAogRVJST1I6ICBudWxsIHZhbHVlIGluIGNvbHVtbiAiYiIgb2YgcmVsYXRpb24gImd0 ZXN0MjFiIiB2aW9sYXRlcyBub3QtbnVsbCBjb25zdHJhaW50Ci1ERVRBSUw6ICBGYWlsaW5n IHJvdyBjb250YWlucyAoMCwgdmlydHVhbCkuCitERVRBSUw6ICBGYWlsaW5nIHJvdyBjb250 YWlucyAoMCwgbnVsbCkuCiBJTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkgVkFMVUVTIChOVUxM KTsgIC0tIGVycm9yCiBFUlJPUjogIG51bGwgdmFsdWUgaW4gY29sdW1uICJiIiBvZiByZWxh dGlvbiAiZ3Rlc3QyMWIiIHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQKLURFVEFJTDog IEZhaWxpbmcgcm93IGNvbnRhaW5zIChudWxsLCB2aXJ0dWFsKS4KK0RFVEFJTDogIEZhaWxp bmcgcm93IGNvbnRhaW5zIChudWxsLCBudWxsKS4KIEFMVEVSIFRBQkxFIGd0ZXN0MjFiIEFM VEVSIENPTFVNTiBiIERST1AgTk9UIE5VTEw7CiBJTlNFUlQgSU5UTyBndGVzdDIxYiAoYSkg VkFMVUVTICgwKTsgIC0tIG9rIG5vdwogLS0gbm90LW51bGwgY29uc3RyYWludCB3aXRoIHBh cnRpdGlvbmVkIHRhYmxlCkBAIC03MzAsMTAgKzcyOCwxMCBAQCBDUkVBVEUgVEFCTEUgZ3Rl c3Rubl9jaGlsZGRlZiBQQVJUSVRJT04gT0YgZ3Rlc3Rubl9wYXJlbnQgZGVmYXVsdDsKIElO U0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMiwgMiwgZGVmYXVsdCksICgzLCA1 LCBkZWZhdWx0KSwgKDE0LCAxMiwgZGVmYXVsdCk7ICAtLSBvawogSU5TRVJUIElOVE8gZ3Rl c3Rubl9wYXJlbnQgVkFMVUVTICgxLCAyLCBkZWZhdWx0KTsgIC0tIGVycm9yCiBFUlJPUjog IG51bGwgdmFsdWUgaW4gY29sdW1uICJmMyIgb2YgcmVsYXRpb24gImd0ZXN0bm5fY2hpbGQi IHZpb2xhdGVzIG5vdC1udWxsIGNvbnN0cmFpbnQKLURFVEFJTDogIEZhaWxpbmcgcm93IGNv bnRhaW5zICgxLCAyLCB2aXJ0dWFsKS4KK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5z ICgxLCAyLCBudWxsKS4KIElOU0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMiwg MTAsIGRlZmF1bHQpOyAgLS0gZXJyb3IKIEVSUk9SOiAgbnVsbCB2YWx1ZSBpbiBjb2x1bW4g ImYzIiBvZiByZWxhdGlvbiAiZ3Rlc3Rubl9jaGlsZCIgdmlvbGF0ZXMgbm90LW51bGwgY29u c3RyYWludAotREVUQUlMOiAgRmFpbGluZyByb3cgY29udGFpbnMgKDIsIDEwLCB2aXJ0dWFs KS4KK0RFVEFJTDogIEZhaWxpbmcgcm93IGNvbnRhaW5zICgyLCAxMCwgbnVsbCkuCiBBTFRF UiBUQUJMRSBndGVzdG5uX3BhcmVudCBBTFRFUiBDT0xVTU4gZjMgU0VUIEVYUFJFU1NJT04g QVMgKG51bGxpZihmMSwgMikgKyBudWxsaWYoZjIsIDExKSk7ICAtLSBlcnJvcgogRVJST1I6 ICBjb2x1bW4gImYzIiBvZiByZWxhdGlvbiAiZ3Rlc3Rubl9jaGlsZCIgY29udGFpbnMgbnVs bCB2YWx1ZXMKIElOU0VSVCBJTlRPIGd0ZXN0bm5fcGFyZW50IFZBTFVFUyAoMTAsIDExLCBk ZWZhdWx0KTsgIC0tIG9rCmRpZmYgLS1naXQgYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVk L3BhcnRpdGlvbl9tZXJnZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRp dGlvbl9tZXJnZS5vdXQKaW5kZXggOTI1ZmU0ZjU3MGEuLjgyOTE0YmU0NWU0IDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9tZXJnZS5vdXQKKysr IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fbWVyZ2Uub3V0CkBAIC0x MDYwLDkgKzEwNjAsOSBAQCBTRUxFQ1QgY291bnQoKikgRlJPTSB0IFdIRVJFIGkgPSAwIEFO RCB0YWJfaWQgSU4gKFNFTEVDVCB0YWJfaWQgRlJPTSB0IFdIRVJFIGkgPQogRFJPUCBUQUJM RSB0OwogLS0gVGVzdCBmb3IgZ2VuZXJhdGVkIGNvbHVtbnMgKGRpZmZlcmVudCBvcmRlciBv ZiBjb2x1bW5zIGluIHBhcnRpdGlvbmVkIHRhYmxlCiAtLSBhbmQgcGFydGl0aW9ucykuCi1D UkVBVEUgVEFCTEUgdCAoaSBpbnQsIGcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGkgKyB0 YWJsZW9pZDo6aW50KSkgUEFSVElUSU9OIEJZIFJBTkdFIChpKTsKLUNSRUFURSBUQUJMRSB0 cF8xIChnIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpICsgdGFibGVvaWQ6OmludCksIGkg aW50KTsKLUNSRUFURSBUQUJMRSB0cF8yIChnIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChp ICsgdGFibGVvaWQ6OmludCksIGkgaW50KTsKK0NSRUFURSBUQUJMRSB0IChpIGludCwgZyBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIDIpKSBQQVJUSVRJT04gQlkgUkFOR0UgKGkp OworQ1JFQVRFIFRBQkxFIHRwXzEgKGcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGkgKyAy KSwgaSBpbnQpOworQ1JFQVRFIFRBQkxFIHRwXzIgKGcgaW50IEdFTkVSQVRFRCBBTFdBWVMg QVMgKGkgKyAyKSwgaSBpbnQpOwogQUxURVIgVEFCTEUgdCBBVFRBQ0ggUEFSVElUSU9OIHRw XzEgRk9SIFZBTFVFUyBGUk9NICgtMSkgVE8gKDEwKTsKIEFMVEVSIFRBQkxFIHQgQVRUQUNI IFBBUlRJVElPTiB0cF8yIEZPUiBWQUxVRVMgRlJPTSAoMTApIFRPICgyMCk7CiBBTFRFUiBU QUJMRSB0IEFERCBDSEVDSyAoZyA+IDApOwpAQCAtMTA3Myw3ICsxMDczLDcgQEAgSU5TRVJU IElOVE8gdCBWQUxVRVMgKDE2KTsKIC0tIEVSUk9SOiAgbmV3IHJvdyBmb3IgcmVsYXRpb24g InRwXzEyIiB2aW9sYXRlcyBjaGVjayBjb25zdHJhaW50ICJ0X2lfY2hlY2siCiBJTlNFUlQg SU5UTyB0IFZBTFVFUyAoMCk7CiBFUlJPUjogIG5ldyByb3cgZm9yIHJlbGF0aW9uICJ0cF8x MiIgdmlvbGF0ZXMgY2hlY2sgY29uc3RyYWludCAidF9pX2NoZWNrIgotREVUQUlMOiAgRmFp bGluZyByb3cgY29udGFpbnMgKDAsIHZpcnR1YWwpLgorREVUQUlMOiAgRmFpbGluZyByb3cg Y29udGFpbnMgKDAsIDIpLgogLS0gU2hvdWxkIGJlIDMgcm93czogKDUpLCAoMTUpLCAoMTYp OgogU0VMRUNUIGkgRlJPTSB0IE9SREVSIEJZIGk7CiAgaSAgCmRpZmYgLS1naXQgYS9zcmMv dGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwgYi9zcmMvdGVzdC9yZWdy ZXNzL3NxbC9nZW5lcmF0ZWRfdmlydHVhbC5zcWwKaW5kZXggZTc1MDg2NmQyZDguLmM4ZTZj NzQ5OTkyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9nZW5lcmF0ZWRfdmly dHVhbC5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvZ2VuZXJhdGVkX3ZpcnR1YWwu c3FsCkBAIC03MSwxMCArNzEsOCBAQCBTRUxFQ1QgKiBGUk9NIGd0ZXN0MSBPUkRFUiBCWSBh OwogU0VMRUNUIGEsIGIsIGIgKiAyIEFTIGIyIEZST00gZ3Rlc3QxIE9SREVSIEJZIGE7CiBT RUxFQ1QgYSwgYiBGUk9NIGd0ZXN0MSBXSEVSRSBiID0gNCBPUkRFUiBCWSBhOwogCi0tLSB0 ZXN0IHRoYXQgb3ZlcmZsb3cgZXJyb3IgaGFwcGVucyBvbiByZWFkCistLSB0ZXN0IHRoYXQg b3ZlcmZsb3cgZXJyb3IgaGFwcGVucyBvbiB3cml0ZQogSU5TRVJUIElOVE8gZ3Rlc3QxIFZB TFVFUyAoMjAwMDAwMDAwMCk7Ci1TRUxFQ1QgKiBGUk9NIGd0ZXN0MTsKLURFTEVURSBGUk9N IGd0ZXN0MSBXSEVSRSBhID0gMjAwMDAwMDAwMDsKIAogLS0gdGVzdCB3aXRoIGpvaW5zCiBD UkVBVEUgVEFCTEUgZ3Rlc3R4ICh4IGludCwgeSBpbnQpOwpkaWZmIC0tZ2l0IGEvc3JjL3Rl c3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX21lcmdlLnNxbCBiL3NyYy90ZXN0L3JlZ3Jlc3Mv c3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKaW5kZXggYTIxMWZlZTJhZDEuLmRmNDIzOTcxOGNi IDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fbWVyZ2Uuc3Fs CisrKyBiL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9tZXJnZS5zcWwKQEAgLTc2 Miw5ICs3NjIsOSBAQCBEUk9QIFRBQkxFIHQ7CiAKIC0tIFRlc3QgZm9yIGdlbmVyYXRlZCBj b2x1bW5zIChkaWZmZXJlbnQgb3JkZXIgb2YgY29sdW1ucyBpbiBwYXJ0aXRpb25lZCB0YWJs ZQogLS0gYW5kIHBhcnRpdGlvbnMpLgotQ1JFQVRFIFRBQkxFIHQgKGkgaW50LCBnIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChpICsgdGFibGVvaWQ6OmludCkpIFBBUlRJVElPTiBCWSBS QU5HRSAoaSk7Ci1DUkVBVEUgVEFCTEUgdHBfMSAoZyBpbnQgR0VORVJBVEVEIEFMV0FZUyBB UyAoaSArIHRhYmxlb2lkOjppbnQpLCBpIGludCk7Ci1DUkVBVEUgVEFCTEUgdHBfMiAoZyBp bnQgR0VORVJBVEVEIEFMV0FZUyBBUyAoaSArIHRhYmxlb2lkOjppbnQpLCBpIGludCk7CitD UkVBVEUgVEFCTEUgdCAoaSBpbnQsIGcgaW50IEdFTkVSQVRFRCBBTFdBWVMgQVMgKGkgKyAy KSkgUEFSVElUSU9OIEJZIFJBTkdFIChpKTsKK0NSRUFURSBUQUJMRSB0cF8xIChnIGludCBH RU5FUkFURUQgQUxXQVlTIEFTIChpICsgMiksIGkgaW50KTsKK0NSRUFURSBUQUJMRSB0cF8y IChnIGludCBHRU5FUkFURUQgQUxXQVlTIEFTIChpICsgMiksIGkgaW50KTsKIEFMVEVSIFRB QkxFIHQgQVRUQUNIIFBBUlRJVElPTiB0cF8xIEZPUiBWQUxVRVMgRlJPTSAoLTEpIFRPICgx MCk7CiBBTFRFUiBUQUJMRSB0IEFUVEFDSCBQQVJUSVRJT04gdHBfMiBGT1IgVkFMVUVTIEZS T00gKDEwKSBUTyAoMjApOwogQUxURVIgVEFCTEUgdCBBREQgQ0hFQ0sgKGcgPiAwKTsKLS0g CjIuNTIuMAoK --------------Emxh7m9OM4I0YAdCZclS965R--