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 1mzGrr-0003L0-B6 for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Dec 2021 11:30:11 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1mzGrq-0004yE-8G for pgsql-hackers@arkaria.postgresql.org; Mon, 20 Dec 2021 11:30:10 +0000 Received: from makus.postgresql.org ([2001:4800:3e1:1::229]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mzGrp-0004sW-LZ for pgsql-hackers@lists.postgresql.org; Mon, 20 Dec 2021 11:30:09 +0000 Received: from out2-smtp.messagingengine.com ([66.111.4.26]) by makus.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1mzGrl-0001sx-R5 for pgsql-hackers@postgresql.org; Mon, 20 Dec 2021 11:30:08 +0000 Received: from compute4.internal (compute4.nyi.internal [10.202.2.44]) by mailout.nyi.internal (Postfix) with ESMTP id C01355C012F for ; Mon, 20 Dec 2021 06:30:04 -0500 (EST) Received: from mailfrontend2 ([10.202.2.163]) by compute4.internal (MEProxy); Mon, 20 Dec 2021 06:30:04 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d= messagingengine.com; h=content-type:date:from:message-id :mime-version:subject:to:x-me-proxy:x-me-proxy:x-me-sender :x-me-sender:x-sasl-enc; s=fm1; bh=j1KmeLAme7kqh1lCeUty+c6vj4/7m LXuC+6198bsA/g=; b=HIxDHryKR20IqNtBNApWyjC+02VvcEstFWi5RLRA0JcyN 8BSCAozzMcQLn8O9SQJAAaMXPB4WvxbQT3jrTWpQMrA69tub/KGH2d7BV9Wj6sft M0R3DjHnQAOekQQMaUYm45+lIJHL32qB20a5jkbbRG2H9rMEf1Er14ZjBmrIXbs0 ZMAKmlSGUCI0LlxAZZtqCn+zMFj3my+nI9Y4VQnpwIBqXG3bLgD8ih7yxU/C9seF RYClN96iA/UrAybmy36AT8zllgd78WvY5IY4fSHaCnZUhC0MmCEscIRqsFwfxTXC GLAQb4MfcYZ7BKdmGT8KC3c8mGD4wy8O9ZG+k9tTw== X-ME-Sender: X-ME-Received: X-ME-Proxy-Cause: gggruggvucftvghtrhhoucdtuddrgedvuddruddtvddgfedtucetufdoteggodetrfdotf fvucfrrhhofhhilhgvmecuhfgrshhtofgrihhlpdfqfgfvpdfurfetoffkrfgpnffqhgen uceurghilhhouhhtmecufedttdenucenucfjughrpegtkfffgggfhffuvfesmhdtreertd efjeenucfhrhhomheprfgvthgvrhcugfhishgvnhhtrhgruhhtuceophgvthgvrhdrvghi shgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomheqnecuggftrfgrthhtvg hrnhepteevuedvieekieeghfevfffhhfdvjeevleelfeeikeeikedvffegteekuddtfeel necuvehluhhsthgvrhfuihiivgeptdenucfrrghrrghmpehmrghilhhfrhhomhepphgvth gvrhdrvghishgvnhhtrhgruhhtsegvnhhtvghrphhrihhsvggusgdrtghomh X-ME-Proxy: Received: by mail.messagingengine.com (Postfix) with ESMTPA for ; Mon, 20 Dec 2021 06:30:03 -0500 (EST) Content-Type: multipart/mixed; boundary="------------xD6xFqrWOLaqjQE4PFMP9eeX" Message-ID: Date: Mon, 20 Dec 2021 12:30:02 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Content-Language: en-US From: Peter Eisentraut Subject: Use JOIN USING aliases in ruleutils.c To: pgsql-hackers 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. --------------xD6xFqrWOLaqjQE4PFMP9eeX Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit When reverse-compiling a query, ruleutils.c has some complicated code to handle the join output columns of a JOIN USING join. There used to be no way to qualify those columns, and so if there was a naming conflict anywhere in the query, those output columns had to be renamed to be unique throughout the query. Since PostgreSQL 14, we have a new feature that allows adding an alias to a JOIN USING clause. This provides a better solution to this problem. This patch changes the logic in ruleutils.c so that if naming conflicts with JOIN USING output columns are found in the query, these JOIN USING aliases with generated names are attached everywhere and the columns are then qualified everywhere. I made it so that new JOIN USING aliases are only created if needed in the query, since we already have the logic of has_dangerous_join_using() to compute when that is needed. We could probably do away with that too and always use them, but I think that would be surprising and not what people want. The regression test changes illustrate the effects very well. This is PoC-level right now. You will find blatant code duplication in set_rtable_names(), and for now I have only commented out some code that could be removed, not actually removed it. --------------xD6xFqrWOLaqjQE4PFMP9eeX Content-Type: text/plain; charset=UTF-8; name="v1-0001-Use-JOIN-USING-aliases-in-ruleutils.c.patch" Content-Disposition: attachment; filename="v1-0001-Use-JOIN-USING-aliases-in-ruleutils.c.patch" Content-Transfer-Encoding: base64 RnJvbSBkYTE1Zjc1NzFmNDNlOGVlZjI3OWMzZTY2NTMwZDY3YWU5YjVlZjdmIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBQZXRlciBFaXNlbnRyYXV0IDxwZXRlckBlaXNlbnRy YXV0Lm9yZz4KRGF0ZTogTW9uLCAyMCBEZWMgMjAyMSAxMTozNzoxNSArMDEwMApTdWJqZWN0 OiBbUEFUQ0ggdjFdIFVzZSBKT0lOIFVTSU5HIGFsaWFzZXMgaW4gcnVsZXV0aWxzLmMKCldo ZW4gcmV2ZXJzZS1jb21waWxpbmcgYSBxdWVyeSwgcnVsZXV0aWxzLmMgaGFzIHNvbWUgY29t cGxpY2F0ZWQgY29kZQp0byBoYW5kbGUgdGhlIGpvaW4gb3V0cHV0IGNvbHVtbnMgb2YgYSBK T0lOIFVTSU5HIGpvaW4uICBUaGVyZSB1c2VkIHRvCmJlIG5vIHdheSB0byBxdWFsaWZ5IHRo b3NlIGNvbHVtbnMsIGFuZCBzbyBpZiB0aGVyZSB3YXMgYSBuYW1pbmcKY29uZmxpY3QgYW55 d2hlcmUgaW4gdGhlIHF1ZXJ5LCB0aG9zZSBvdXRwdXQgY29sdW1ucyBoYWQgdG8gYmUgcmVu YW1lZAp0byBiZSB1bmlxdWUgdGhyb3VnaG91dCB0aGUgcXVlcnkuCgpTaW5jZSBQb3N0Z3Jl U1FMIDE0LCB3ZSBoYXZlIGEgbmV3IGZlYXR1cmUgdGhhdCBhbGxvd3MgYWRkaW5nIGFuIGFs aWFzCnRvIGEgSk9JTiBVU0lORyBjbGF1c2UuICBUaGlzIHByb3ZpZGVzIGEgYmV0dGVyIHNv bHV0aW9uIHRvIHRoaXMKcHJvYmxlbS4gIFRoaXMgcGF0Y2ggY2hhbmdlcyB0aGUgbG9naWMg aW4gcnVsZXV0aWxzLmMgc28gdGhhdCBpZgpuYW1pbmcgY29uZmxpY3RzIHdpdGggSk9JTiBV U0lORyBvdXRwdXQgY29sdW1ucyBhcmUgZm91bmQgaW4gdGhlCnF1ZXJ5LCB0aGVzZSBKT0lO IFVTSU5HIGFsaWFzZXMgd2l0aCBnZW5lcmF0ZWQgbmFtZXMgYXJlIGF0dGFjaGVkCmV2ZXJ5 d2hlcmUgYW5kIHRoZSBjb2x1bW5zIGFyZSB0aGVuIHF1YWxpZmllZCBldmVyd2hlcmUuCi0t LQogc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1bGV1dGlscy5jICAgICAgICAgfCAgODQgKysr KysrKysrLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdmlldy5vdXQgfCAx OTQgKysrKysrKysrKystLS0tLS0tLS0tLQogMiBmaWxlcyBjaGFuZ2VkLCAxNzggaW5zZXJ0 aW9ucygrKSwgMTAwIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL3V0 aWxzL2FkdC9ydWxldXRpbHMuYyBiL3NyYy9iYWNrZW5kL3V0aWxzL2FkdC9ydWxldXRpbHMu YwppbmRleCA4ZGE1MjVjNzE1Li42ZThmN2VmYzRlIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC91dGlscy9hZHQvcnVsZXV0aWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvdXRpbHMvYWR0L3J1 bGV1dGlscy5jCkBAIC0xNTcsMTMgKzE1NywxNiBAQCB0eXBlZGVmIHN0cnVjdAogewogCUxp c3QJICAgKnJ0YWJsZTsJCQkvKiBMaXN0IG9mIFJhbmdlVGJsRW50cnkgbm9kZXMgKi8KIAlM aXN0CSAgICpydGFibGVfbmFtZXM7CS8qIFBhcmFsbGVsIGxpc3Qgb2YgbmFtZXMgZm9yIFJU RXMgKi8KKwlMaXN0CSAgICpqb2luX3VzaW5nX2FsaWFzZXM7CS8qIFBhcmFsbGVsIGxpc3Qg b2Ygam9pbiB1c2luZyBhbGlhc2VzICovCiAJTGlzdAkgICAqcnRhYmxlX2NvbHVtbnM7IC8q IFBhcmFsbGVsIGxpc3Qgb2YgZGVwYXJzZV9jb2x1bW5zIHN0cnVjdHMgKi8KIAlMaXN0CSAg ICpzdWJwbGFuczsJCS8qIExpc3Qgb2YgUGxhbiB0cmVlcyBmb3IgU3ViUGxhbnMgKi8KIAlM aXN0CSAgICpjdGVzOwkJCS8qIExpc3Qgb2YgQ29tbW9uVGFibGVFeHByIG5vZGVzICovCiAJ QXBwZW5kUmVsSW5mbyAqKmFwcGVuZHJlbHM7IC8qIEFycmF5IG9mIEFwcGVuZFJlbEluZm8g bm9kZXMsIG9yIE5VTEwgKi8KIAkvKiBXb3Jrc3BhY2UgZm9yIGNvbHVtbiBhbGlhcyBhc3Np Z25tZW50OiAqLwogCWJvb2wJCXVuaXF1ZV91c2luZzsJLyogQXJlIHdlIG1ha2luZyBVU0lO RyBuYW1lcyBnbG9iYWxseSB1bmlxdWUgKi8KKyNpZiAwCiAJTGlzdAkgICAqdXNpbmdfbmFt ZXM7CS8qIExpc3Qgb2YgYXNzaWduZWQgbmFtZXMgZm9yIFVTSU5HIGNvbHVtbnMgKi8KKyNl bmRpZgogCS8qIFJlbWFpbmluZyBmaWVsZHMgYXJlIHVzZWQgb25seSB3aGVuIGRlcGFyc2lu ZyBhIFBsYW4gdHJlZTogKi8KIAlQbGFuCSAgICpwbGFuOwkJCS8qIGltbWVkaWF0ZSBwYXJl bnQgb2YgY3VycmVudCBleHByZXNzaW9uICovCiAJTGlzdAkgICAqYW5jZXN0b3JzOwkJLyog YW5jZXN0b3JzIG9mIHBsYW4gKi8KQEAgLTM3ODgsNiArMzc5MSw3IEBAIHNldF9ydGFibGVf bmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIExpc3QgKnBhcmVudF9uYW1lc3BhY2Vz LAogCXsKIAkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gKFJhbmdlVGJsRW50cnkgKikgbGZpcnN0 KGxjKTsKIAkJY2hhcgkgICAqcmVmbmFtZTsKKwkJY2hhcgkgICAqam9pbl91c2luZ19hbGlh czsKIAogCQkvKiBKdXN0IGluIGNhc2UgdGhpcyB0YWtlcyBhbiB1bnJlYXNvbmFibGUgYW1v dW50IG9mIHRpbWUgLi4uICovCiAJCUNIRUNLX0ZPUl9JTlRFUlJVUFRTKCk7CkBAIC0zODE4 LDYgKzM4MjIsMTYgQEAgc2V0X3J0YWJsZV9uYW1lcyhkZXBhcnNlX25hbWVzcGFjZSAqZHBu cywgTGlzdCAqcGFyZW50X25hbWVzcGFjZXMsCiAJCQlyZWZuYW1lID0gcnRlLT5lcmVmLT5h bGlhc25hbWU7CiAJCX0KIAorCQlpZiAocnRlLT5ydGVraW5kID09IFJURV9KT0lOICYmIHJ0 ZS0+am9pbm1lcmdlZGNvbHMpCisJCXsKKwkJCWlmIChydGUtPmpvaW5fdXNpbmdfYWxpYXMp CisJCQkJam9pbl91c2luZ19hbGlhcyA9IHJ0ZS0+am9pbl91c2luZ19hbGlhcy0+YWxpYXNu YW1lOworCQkJZWxzZQorCQkJCWpvaW5fdXNpbmdfYWxpYXMgPSAianUiOworCQl9CisJCWVs c2UKKwkJCWpvaW5fdXNpbmdfYWxpYXMgPSBOVUxMOworCiAJCS8qCiAJCSAqIElmIHRoZSBz ZWxlY3RlZCBuYW1lIGlzbid0IHVuaXF1ZSwgYXBwZW5kIGRpZ2l0cyB0byBtYWtlIGl0IHNv LCBhbmQKIAkJICogbWFrZSBhIG5ldyBoYXNoIGVudHJ5IGZvciBpdCBvbmNlIHdlJ3ZlIGdv dCBhIHVuaXF1ZSBuYW1lLiAgRm9yIGEKQEAgLTM4NjUsNyArMzg3OSw0OSBAQCBzZXRfcnRh YmxlX25hbWVzKGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLCBMaXN0ICpwYXJlbnRfbmFtZXNw YWNlcywKIAkJCX0KIAkJfQogCisJCWlmIChqb2luX3VzaW5nX2FsaWFzKQorCQl7CisJCQlo ZW50cnkgPSAoTmFtZUhhc2hFbnRyeSAqKSBoYXNoX3NlYXJjaChuYW1lc19oYXNoLAorCQkJ CQkJCQkJCQkJICAgam9pbl91c2luZ19hbGlhcywKKwkJCQkJCQkJCQkJCSAgIEhBU0hfRU5U RVIsCisJCQkJCQkJCQkJCQkgICAmZm91bmQpOworCQkJaWYgKGZvdW5kKQorCQkJeworCQkJ CS8qIE5hbWUgYWxyZWFkeSBpbiB1c2UsIG11c3QgY2hvb3NlIGEgbmV3IG9uZSAqLworCQkJ CWludAkJCXJlZm5hbWVsZW4gPSBzdHJsZW4oam9pbl91c2luZ19hbGlhcyk7CisJCQkJY2hh cgkgICAqbW9kbmFtZSA9IChjaGFyICopIHBhbGxvYyhyZWZuYW1lbGVuICsgMTYpOworCQkJ CU5hbWVIYXNoRW50cnkgKmhlbnRyeTI7CisKKwkJCQlkbworCQkJCXsKKwkJCQkJaGVudHJ5 LT5jb3VudGVyKys7CisJCQkJCWZvciAoOzspCisJCQkJCXsKKwkJCQkJCW1lbWNweShtb2Ru YW1lLCBqb2luX3VzaW5nX2FsaWFzLCByZWZuYW1lbGVuKTsKKwkJCQkJCXNwcmludGYobW9k bmFtZSArIHJlZm5hbWVsZW4sICJfJWQiLCBoZW50cnktPmNvdW50ZXIpOworCQkJCQkJaWYg KHN0cmxlbihtb2RuYW1lKSA8IE5BTUVEQVRBTEVOKQorCQkJCQkJCWJyZWFrOworCQkJCQkJ LyogZHJvcCBjaGFycyBmcm9tIHJlZm5hbWUgdG8ga2VlcCBhbGwgdGhlIGRpZ2l0cyAqLwor CQkJCQkJcmVmbmFtZWxlbiA9IHBnX21iY2xpcGxlbihqb2luX3VzaW5nX2FsaWFzLCByZWZu YW1lbGVuLAorCQkJCQkJCQkJCQkJICByZWZuYW1lbGVuIC0gMSk7CisJCQkJCX0KKwkJCQkJ aGVudHJ5MiA9IChOYW1lSGFzaEVudHJ5ICopIGhhc2hfc2VhcmNoKG5hbWVzX2hhc2gsCisJ CQkJCQkJCQkJCQkJCQltb2RuYW1lLAorCQkJCQkJCQkJCQkJCQkJSEFTSF9FTlRFUiwKKwkJ CQkJCQkJCQkJCQkJCSZmb3VuZCk7CisJCQkJfSB3aGlsZSAoZm91bmQpOworCQkJCWhlbnRy eTItPmNvdW50ZXIgPSAwOwkvKiBpbml0IG5ldyBoYXNoIGVudHJ5ICovCisJCQkJam9pbl91 c2luZ19hbGlhcyA9IG1vZG5hbWU7CisJCQl9CisJCQllbHNlCisJCQl7CisJCQkJLyogTmFt ZSBub3QgcHJldmlvdXNseSB1c2VkLCBuZWVkIG9ubHkgaW5pdGlhbGl6ZSBoZW50cnkgKi8K KwkJCQloZW50cnktPmNvdW50ZXIgPSAwOworCQkJfQorCQl9CisKIAkJZHBucy0+cnRhYmxl X25hbWVzID0gbGFwcGVuZChkcG5zLT5ydGFibGVfbmFtZXMsIHJlZm5hbWUpOworCQlkcG5z LT5qb2luX3VzaW5nX2FsaWFzZXMgPSBsYXBwZW5kKGRwbnMtPmpvaW5fdXNpbmdfYWxpYXNl cywgam9pbl91c2luZ19hbGlhcyk7CiAJCXJ0aW5kZXgrKzsKIAl9CiAKQEAgLTQxNjYsOSAr NDIyMiwxMSBAQCBzZXRfdXNpbmdfbmFtZXMoZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsIE5v ZGUgKmp0bm9kZSwgTGlzdCAqcGFyZW50VXNpbmcpCiAJCQkJCQljb2xuYW1lID0gc3RyVmFs KGxpc3RfbnRoKHJ0ZS0+YWxpYXMtPmNvbG5hbWVzLCBpKSk7CiAJCQkJCS8qIE1ha2UgaXQg YXBwcm9wcmlhdGVseSB1bmlxdWUgKi8KIAkJCQkJY29sbmFtZSA9IG1ha2VfY29sbmFtZV91 bmlxdWUoY29sbmFtZSwgZHBucywgY29saW5mbyk7CisjaWYgMAogCQkJCQlpZiAoZHBucy0+ dW5pcXVlX3VzaW5nKQogCQkJCQkJZHBucy0+dXNpbmdfbmFtZXMgPSBsYXBwZW5kKGRwbnMt PnVzaW5nX25hbWVzLAogCQkJCQkJCQkJCQkJCWNvbG5hbWUpOworI2VuZGlmCiAJCQkJCS8q IFNhdmUgaXQgYXMgb3V0cHV0IGNvbHVtbiBuYW1lLCB0b28gKi8KIAkJCQkJY29saW5mby0+ Y29sbmFtZXNbaV0gPSBjb2xuYW1lOwogCQkJCX0KQEAgLTQ2NTIsNyArNDcxMCw3IEBAIGNv bG5hbWVfaXNfdW5pcXVlKGNvbnN0IGNoYXIgKmNvbG5hbWUsIGRlcGFyc2VfbmFtZXNwYWNl ICpkcG5zLAogCQkJCSAgZGVwYXJzZV9jb2x1bW5zICpjb2xpbmZvKQogewogCWludAkJCWk7 Ci0JTGlzdENlbGwgICAqbGM7CisJLy9MaXN0Q2VsbCAgICpsYzsKIAogCS8qIENoZWNrIGFn YWluc3QgYWxyZWFkeS1hc3NpZ25lZCBjb2x1bW4gYWxpYXNlcyB3aXRoaW4gUlRFICovCiAJ Zm9yIChpID0gMDsgaSA8IGNvbGluZm8tPm51bV9jb2xzOyBpKyspCkBAIC00Njc1LDYgKzQ3 MzMsNyBAQCBjb2xuYW1lX2lzX3VuaXF1ZShjb25zdCBjaGFyICpjb2xuYW1lLCBkZXBhcnNl X25hbWVzcGFjZSAqZHBucywKIAkJCXJldHVybiBmYWxzZTsKIAl9CiAKKyNpZiAwCiAJLyog QWxzbyBjaGVjayBhZ2FpbnN0IFVTSU5HLWNvbHVtbiBuYW1lcyB0aGF0IG11c3QgYmUgZ2xv YmFsbHkgdW5pcXVlICovCiAJZm9yZWFjaChsYywgZHBucy0+dXNpbmdfbmFtZXMpCiAJewpA QCAtNDY4Myw3ICs0NzQyLDkgQEAgY29sbmFtZV9pc191bmlxdWUoY29uc3QgY2hhciAqY29s bmFtZSwgZGVwYXJzZV9uYW1lc3BhY2UgKmRwbnMsCiAJCWlmIChzdHJjbXAob2xkbmFtZSwg Y29sbmFtZSkgPT0gMCkKIAkJCXJldHVybiBmYWxzZTsKIAl9CisjZW5kaWYKIAorI2lmIDAK IAkvKiBBbHNvIGNoZWNrIGFnYWluc3QgbmFtZXMgYWxyZWFkeSBhc3NpZ25lZCBmb3IgcGFy ZW50LWpvaW4gVVNJTkcgY29scyAqLwogCWZvcmVhY2gobGMsIGNvbGluZm8tPnBhcmVudFVz aW5nKQogCXsKQEAgLTQ2OTIsNiArNDc1Myw3IEBAIGNvbG5hbWVfaXNfdW5pcXVlKGNvbnN0 IGNoYXIgKmNvbG5hbWUsIGRlcGFyc2VfbmFtZXNwYWNlICpkcG5zLAogCQlpZiAoc3RyY21w KG9sZG5hbWUsIGNvbG5hbWUpID09IDApCiAJCQlyZXR1cm4gZmFsc2U7CiAJfQorI2VuZGlm CiAKIAlyZXR1cm4gdHJ1ZTsKIH0KQEAgLTY5OTQsNiArNzA1Niw3IEBAIGdldF92YXJpYWJs ZShWYXIgKnZhciwgaW50IGxldmVsc3VwLCBib29sIGlzdG9wbGV2ZWwsIGRlcGFyc2VfY29u dGV4dCAqY29udGV4dCkKIAlBdHRyTnVtYmVyCXZhcmF0dG5vOwogCWRlcGFyc2VfY29sdW1u cyAqY29saW5mbzsKIAljaGFyCSAgICpyZWZuYW1lOworCWNoYXIJICAgKmpvaW5fdXNpbmdf YWxpYXM7CiAJY2hhcgkgICAqYXR0bmFtZTsKIAogCS8qIEZpbmQgYXBwcm9wcmlhdGUgbmVz dGluZyBkZXB0aCAqLwpAQCAtNzA3Nyw2ICs3MTQwLDEwIEBAIGdldF92YXJpYWJsZShWYXIg KnZhciwgaW50IGxldmVsc3VwLCBib29sIGlzdG9wbGV2ZWwsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCkKIAogCQlydGUgPSBydF9mZXRjaCh2YXJubywgZHBucy0+cnRhYmxlKTsKIAkJ cmVmbmFtZSA9IChjaGFyICopIGxpc3RfbnRoKGRwbnMtPnJ0YWJsZV9uYW1lcywgdmFybm8g LSAxKTsKKwkJaWYgKGRwbnMtPmpvaW5fdXNpbmdfYWxpYXNlcykKKwkJCWpvaW5fdXNpbmdf YWxpYXMgPSAoY2hhciAqKSBsaXN0X250aChkcG5zLT5qb2luX3VzaW5nX2FsaWFzZXMsIHZh cm5vIC0gMSk7CisJCWVsc2UKKwkJCWpvaW5fdXNpbmdfYWxpYXMgPSBOVUxMOwogCQljb2xp bmZvID0gZGVwYXJzZV9jb2x1bW5zX2ZldGNoKHZhcm5vLCBkcG5zKTsKIAkJYXR0bnVtID0g dmFyYXR0bm87CiAJfQpAQCAtNzE4OCw2ICs3MjU1LDExIEBAIGdldF92YXJpYWJsZShWYXIg KnZhciwgaW50IGxldmVsc3VwLCBib29sIGlzdG9wbGV2ZWwsIGRlcGFyc2VfY29udGV4dCAq Y29udGV4dCkKIAkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1b3RlX2lkZW50aWZp ZXIocmVmbmFtZSkpOwogCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcuJyk7CiAJfQor CWVsc2UgaWYgKGpvaW5fdXNpbmdfYWxpYXMgJiYgKGNvbnRleHQtPnZhcnByZWZpeCB8fCBh dHRuYW1lID09IE5VTEwpKQorCXsKKwkJYXBwZW5kU3RyaW5nSW5mb1N0cmluZyhidWYsIHF1 b3RlX2lkZW50aWZpZXIoam9pbl91c2luZ19hbGlhcykpOworCQlhcHBlbmRTdHJpbmdJbmZv Q2hhcihidWYsICcuJyk7CisJfQogCWlmIChhdHRuYW1lKQogCQlhcHBlbmRTdHJpbmdJbmZv U3RyaW5nKGJ1ZiwgcXVvdGVfaWRlbnRpZmllcihhdHRuYW1lKSk7CiAJZWxzZQpAQCAtMTA5 NTksNiArMTEwMzEsNyBAQCBnZXRfZnJvbV9jbGF1c2VfaXRlbShOb2RlICpqdG5vZGUsIFF1 ZXJ5ICpxdWVyeSwgZGVwYXJzZV9jb250ZXh0ICpjb250ZXh0KQogCQlKb2luRXhwciAgICpq ID0gKEpvaW5FeHByICopIGp0bm9kZTsKIAkJZGVwYXJzZV9jb2x1bW5zICpjb2xpbmZvID0g ZGVwYXJzZV9jb2x1bW5zX2ZldGNoKGotPnJ0aW5kZXgsIGRwbnMpOwogCQlib29sCQluZWVk X3BhcmVuX29uX3JpZ2h0OworCQljaGFyCSAgICpqb2luX3VzaW5nX2FsaWFzID0gbGlzdF9u dGgoZHBucy0+am9pbl91c2luZ19hbGlhc2VzLCBqLT5ydGluZGV4IC0gMSk7CiAKIAkJbmVl ZF9wYXJlbl9vbl9yaWdodCA9IFBSRVRUWV9QQVJFTihjb250ZXh0KSAmJgogCQkJIUlzQShq LT5yYXJnLCBSYW5nZVRibFJlZikgJiYKQEAgLTExMDMxLDkgKzExMTA0LDE0IEBAIGdldF9m cm9tX2NsYXVzZV9pdGVtKE5vZGUgKmp0bm9kZSwgUXVlcnkgKnF1ZXJ5LCBkZXBhcnNlX2Nv bnRleHQgKmNvbnRleHQpCiAJCQl9CiAJCQlhcHBlbmRTdHJpbmdJbmZvQ2hhcihidWYsICcp Jyk7CiAKLQkJCWlmIChqLT5qb2luX3VzaW5nX2FsaWFzKQorCQkJLyoKKwkJCSAqIElmIGl0 J3MgYSBnZW5lcmF0ZWQgSk9JTiBVU0lORyBhbGlhcywgb25seSBwcmludCBpdCBpZiB3ZQor CQkJICogcmVhbGx5IG5lZWQgaXQgdG8gcXVhbGlmeSBzb21lIGNvbHVtbi4KKwkJCSAqLwor CQkJaWYgKGotPmpvaW5fdXNpbmdfYWxpYXMgfHwKKwkJCQkoam9pbl91c2luZ19hbGlhcyAm JiBkcG5zLT51bmlxdWVfdXNpbmcpKQogCQkJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAiIEFT ICVzIiwKLQkJCQkJCQkJIHF1b3RlX2lkZW50aWZpZXIoai0+am9pbl91c2luZ19hbGlhcy0+ YWxpYXNuYW1lKSk7CisJCQkJCQkJCSBxdW90ZV9pZGVudGlmaWVyKGpvaW5fdXNpbmdfYWxp YXMpKTsKIAkJfQogCQllbHNlIGlmIChqLT5xdWFscykKIAkJewpkaWZmIC0tZ2l0IGEvc3Jj L3Rlc3QvcmVncmVzcy9leHBlY3RlZC9jcmVhdGVfdmlldy5vdXQgYi9zcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL2NyZWF0ZV92aWV3Lm91dAppbmRleCBmNTBlZjc2Njg1Li4xMWE2NDEx MmJjIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV92aWV3 Lm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2NyZWF0ZV92aWV3Lm91dApA QCAtOTEwLDE3ICs5MTAsMTcgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2MmEnLCB0cnVl KTsKICgxIHJvdykKIAogc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2MycsIHRydWUpOwotICAg ICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQotICBTRUxFQ1QgYiwgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDMuYywg ICAgICAgICAgICAgICAgICAgKwotICAgICB0dDIuYSwgICAgICAgICAgICAgICAgICAgKwot ICAgICB0dDMuYXgsICAgICAgICAgICAgICAgICAgKwotICAgICB0dDQuYXksICAgICAgICAg ICAgICAgICAgKwotICAgICB0dDQucSAgICAgICAgICAgICAgICAgICAgKwotICAgIEZST00g dHQyICAgICAgICAgICAgICAgICAgKwotICAgICAgSk9JTiB0dDMgVVNJTkcgKGIsIGMpICAg KwotICAgICAgRlVMTCBKT0lOIHR0NCBVU0lORyAoYik7CisgICAgICAgICAgICBwZ19nZXRf dmlld2RlZiAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLQorICBTRUxFQ1QganVfMS5iLCAgICAgICAgICAgICAgICAgICAgICArCisgICAg IHR0My5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQyLmEsICAgICAg ICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDMuYXgsICAgICAgICAgICAgICAgICAg ICAgICAgICArCisgICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg ICAgdHQ0LnEgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgIEZST00gdHQyICAg ICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICBKT0lOIHR0MyBVU0lORyAoYiwgYykg QVMganUgICAgICsKKyAgICAgIEZVTEwgSk9JTiB0dDQgVVNJTkcgKGIpIEFTIGp1XzE7CiAo MSByb3cpCiAKIGFsdGVyIHRhYmxlIHR0MiBhZGQgY29sdW1uIGQgaW50OwpAQCAtOTc2LDE3 ICs5NzYsMTcgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2MmEnLCB0cnVlKTsKICgxIHJv dykKIAogc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2MycsIHRydWUpOwotICAgICAgICBwZ19n ZXRfdmlld2RlZiAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQot ICBTRUxFQ1QgYiwgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDMuYywgICAgICAgICAg ICAgICAgICAgKwotICAgICB0dDIuYSwgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDMu YXgsICAgICAgICAgICAgICAgICAgKwotICAgICB0dDQuYXksICAgICAgICAgICAgICAgICAg KwotICAgICB0dDQucSAgICAgICAgICAgICAgICAgICAgKwotICAgIEZST00gdHQyICAgICAg ICAgICAgICAgICAgKwotICAgICAgSk9JTiB0dDMgVVNJTkcgKGIsIGMpICAgKwotICAgICAg RlVMTCBKT0lOIHR0NCBVU0lORyAoYik7CisgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAg ICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQor ICBTRUxFQ1QganVfMS5iLCAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0My5jLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQyLmEsICAgICAgICAgICAgICAg ICAgICAgICAgICAgKworICAgICB0dDMuYXgsICAgICAgICAgICAgICAgICAgICAgICAgICAr CisgICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQ0LnEg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgIEZST00gdHQyICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgICBKT0lOIHR0MyBVU0lORyAoYiwgYykgQVMganUgICAg ICsKKyAgICAgIEZVTEwgSk9JTiB0dDQgVVNJTkcgKGIpIEFTIGp1XzE7CiAoMSByb3cpCiAK IGFsdGVyIHRhYmxlIHR0MyByZW5hbWUgYyB0byBkOwpAQCAtMTA0MSwxNyArMTA0MSwxNyBA QCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YyYScsIHRydWUpOwogKDEgcm93KQogCiBzZWxl Y3QgcGdfZ2V0X3ZpZXdkZWYoJ3YzJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgIHBnX2dldF92 aWV3ZGVmICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQotICBTRUxFQ1QgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr Ci0gICAgIHR0My5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgdHQy LmEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDMuYXgsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NC5heSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKLSAgICAgdHQ0LnEgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwotICAgIEZST00gdHQyICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAg ICBKT0lOIHR0MyB0dDMoYXgsIGIsIGMpIFVTSU5HIChiLCBjKSsKLSAgICAgIEZVTEwgSk9J TiB0dDQgVVNJTkcgKGIpOworICAgICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAg ICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0KKyAgU0VMRUNUIGp1XzEuYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICB0dDMuYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAr CisgICAgIHR0Mi5hLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAg ICAgdHQzLmF4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0 dDQuYXksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0NC5x ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICBGUk9NIHR0MiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICAgSk9JTiB0dDMgdHQz KGF4LCBiLCBjKSBVU0lORyAoYiwgYykgQVMganUrCisgICAgICBGVUxMIEpPSU4gdHQ0IFVT SU5HIChiKSBBUyBqdV8xOwogKDEgcm93KQogCiBhbHRlciB0YWJsZSB0dDMgYWRkIGNvbHVt biBjIGludDsKQEAgLTExMDcsMTcgKzExMDcsMTcgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVm KCd2MmEnLCB0cnVlKTsKICgxIHJvdykKIAogc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2Mycs IHRydWUpOwotICAgICAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgICAgICAg ICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tCi0gIFNFTEVDVCBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KwotICAgICB0dDMuYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK LSAgICAgdHQyLmEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0g ICAgIHR0My5heCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAg ICB0dDQuYXksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAg dHQ0LnEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgRlJP TSB0dDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgSk9J TiB0dDMgdHQzKGF4LCBiLCBjLCBjXzEsIGUpIFVTSU5HIChiLCBjKSsKLSAgICAgIEZVTEwg Sk9JTiB0dDQgVVNJTkcgKGIpOworICAgICAgICAgICAgICAgICAgICAgcGdfZ2V0X3ZpZXdk ZWYgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgIFNFTEVDVCBqdV8xLmIsICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDMuYywgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAgdHQyLmEsICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0My5heCwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICAgICB0dDQu YXksICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg dHQ0LnEgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisg ICAgRlJPTSB0dDIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICAgSk9JTiB0dDMgdHQzKGF4LCBiLCBjLCBjXzEsIGUpIFVTSU5HIChiLCBjKSBB UyBqdSsKKyAgICAgIEZVTEwgSk9JTiB0dDQgVVNJTkcgKGIpIEFTIGp1XzE7CiAoMSByb3cp CiAKIGFsdGVyIHRhYmxlIHR0MiBkcm9wIGNvbHVtbiBkOwpAQCAtMTE3MiwxNyArMTE3Miwx NyBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YyYScsIHRydWUpOwogKDEgcm93KQogCiBz ZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3YzJywgdHJ1ZSk7Ci0gICAgICAgICAgICAgICAgICBw Z19nZXRfdmlld2RlZiAgICAgICAgICAgICAgICAgIAotLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLSAgU0VMRUNUIGIsICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0My5jLCAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDIuYSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgdHQzLmF4LCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwotICAgICB0dDQucSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKLSAgICBGUk9NIHR0MiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCi0gICAgICBKT0lOIHR0MyB0dDMoYXgsIGIsIGMsIGNfMSwgZSkg VVNJTkcgKGIsIGMpKwotICAgICAgRlVMTCBKT0lOIHR0NCBVU0lORyAoYik7CisgICAgICAg ICAgICAgICAgICAgICBwZ19nZXRfdmlld2RlZiAgICAgICAgICAgICAgICAgICAgIAorLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K KyAgU0VMRUNUIGp1XzEuYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICArCisgICAgIHR0My5jLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICAgICB0dDIuYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAgdHQzLmF4LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgIHR0NC5heSwgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKworICAgICB0dDQucSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICsKKyAgICBGUk9NIHR0MiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgICBKT0lOIHR0MyB0dDMoYXgsIGIs IGMsIGNfMSwgZSkgVVNJTkcgKGIsIGMpIEFTIGp1KworICAgICAgRlVMTCBKT0lOIHR0NCBV U0lORyAoYikgQVMganVfMTsKICgxIHJvdykKIAogY3JlYXRlIHRhYmxlIHR0NSAoYSBpbnQs IGIgaW50KTsKQEAgLTEyNzYsMTQgKzEyNzYsMTQgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVm KCd2djInLCB0cnVlKTsKICAgICAgdi5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKwogICAgIEZST00gKCBWQUxVRVMgKDEsMiwzLDQsNSkpIHYoYSwgYiwgYywg ZCwgZSkrCiAgVU5JT04gQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICsKLSAgU0VMRUNUIHggQVMgYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwor ICBTRUxFQ1QganUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAg IHR0Ny55IEFTIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ4 LnogQVMgYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDh4Lnhf MSBBUyBkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0OHgueCBBUyBk LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ4eC56IEFTIGUgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4 KSwgICAgICAgICAgICAgICAgICsKLSAgICAgdHQ4IHR0OHgoeF8xLCB6KTsKKyAgICAgIEZV TEwgSk9JTiB0dDggVVNJTkcgKHgpIEFTIGp1LCAgICAgICAgICAgKworICAgICB0dDggdHQ4 eDsKICgxIHJvdykKIAogY3JlYXRlIHZpZXcgdnYzIGFzCkBAIC0xMzAzLDE2ICsxMzAzLDE2 IEBAIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnYzJywgdHJ1ZSk7CiAgICAgIHYuZiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gKCBW QUxVRVMgKDEsMiwzLDQsNSw2KSkgdihhLCBiLCBjLCB4LCBlLCBmKSsKICBVTklPTiBBTEwg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0gIFNFTEVDVCB4 IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICBTRUxFQ1Qg anUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ3 LnkgQVMgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0 OC56IEFTIGMsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB4 XzEgQVMgeCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKKyAgICAg anVfMS54LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAg IHR0N3gueSBBUyBlLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAg ICB0dDh4LnogQVMgZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAg ICBGUk9NIHR0NyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0g ICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4KSwgICAgICAgICAgICAgICAgICAgICAgKwot ICAgICB0dDcgdHQ3eCh4XzEsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK LSAgICAgIEZVTEwgSk9JTiB0dDggdHQ4eCh4XzEsIHopIFVTSU5HICh4XzEpOworICAgICAg RlVMTCBKT0lOIHR0OCBVU0lORyAoeCkgQVMganUsICAgICAgICAgICAgICAgICsKKyAgICAg dHQ3IHR0N3ggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAg ICBGVUxMIEpPSU4gdHQ4IHR0OHggVVNJTkcgKHgpIEFTIGp1XzE7CiAoMSByb3cpCiAKIGNy ZWF0ZSB2aWV3IHZ2NCBhcwpAQCAtMTMzMywxOCArMTMzMywxOCBAQCBzZWxlY3QgcGdfZ2V0 X3ZpZXdkZWYoJ3Z2NCcsIHRydWUpOwogICAgICB2LmcgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gKCBWQUxVRVMgKDEsMiwz LDQsNSw2LDcpKSB2KGEsIGIsIGMsIHgsIGUsIGYsIGcpKwogIFVOSU9OIEFMTCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICBTRUxFQ1QgeCBB UyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICBTRUxF Q1QganUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwog ICAgICB0dDcueSBBUyBiLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwogICAgICB0dDgueiBBUyBjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKwotICAgICB4XzEgQVMgeCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKworICAgICBqdV8yLngsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDd4LnkgQVMgZSwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDh4LnogQVMgZiwgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDh5LnogQVMgZyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAg RlVMTCBKT0lOIHR0OCBVU0lORyAoeCksICAgICAgICAgICAgICAgICAgICAgICAgICAgKwot ICAgICB0dDcgdHQ3eCh4XzEsIHkpICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwotICAgICAgRlVMTCBKT0lOIHR0OCB0dDh4KHhfMSwgeikgVVNJTkcgKHhfMSkgICAg ICAgICAgICAgKwotICAgICAgRlVMTCBKT0lOIHR0OCB0dDh5KHhfMSwgeikgVVNJTkcgKHhf MSk7CisgICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4KSBBUyBqdSwgICAgICAgICAgICAg ICAgICAgICArCisgICAgIHR0NyB0dDd4ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCisgICAgICBGVUxMIEpPSU4gdHQ4IHR0OHggVVNJTkcgKHgpIEFT IGp1XzEgICAgICAgICAgICAgICArCisgICAgICBGVUxMIEpPSU4gdHQ4IHR0OHkgVVNJTkcg KHgpIEFTIGp1XzI7CiAoMSByb3cpCiAKIGFsdGVyIHRhYmxlIHR0NyBhZGQgY29sdW1uIHp6 IGludDsKQEAgLTEzNjEsMTQgKzEzNjEsMTQgQEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2 djInLCB0cnVlKTsKICAgICAgdi5lICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKwogICAgIEZST00gKCBWQUxVRVMgKDEsMiwzLDQsNSkpIHYoYSwgYiwgYywgZCwg ZSkrCiAgVU5JT04gQUxMICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsK LSAgU0VMRUNUIHggQVMgYSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICBT RUxFQ1QganUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0 Ny55IEFTIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ4Lnog QVMgYywgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDh4LnhfMSBB UyBkLCAgICAgICAgICAgICAgICAgICAgICAgICAgICArCisgICAgIHR0OHgueCBBUyBkLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKICAgICAgdHQ4eC56IEFTIGUgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4KSwg ICAgICAgICAgICAgICAgICsKLSAgICAgdHQ4IHR0OHgoeF8xLCB6LCB6Mik7CisgICAgICBG VUxMIEpPSU4gdHQ4IFVTSU5HICh4KSBBUyBqdSwgICAgICAgICAgICsKKyAgICAgdHQ4IHR0 OHg7CiAoMSByb3cpCiAKIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnYzJywgdHJ1ZSk7CkBA IC0xMzgyLDE2ICsxMzgyLDE2IEBAIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnYzJywgdHJ1 ZSk7CiAgICAgIHYuZiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKwogICAgIEZST00gKCBWQUxVRVMgKDEsMiwzLDQsNSw2KSkgdihhLCBiLCBjLCB4LCBl LCBmKSsKICBVTklPTiBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICArCi0gIFNFTEVDVCB4IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKworICBTRUxFQ1QganUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICsKICAgICAgdHQ3LnkgQVMgYiwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCiAgICAgIHR0OC56IEFTIGMsICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKwotICAgICB4XzEgQVMgeCwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICsKKyAgICAganVfMS54LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICArCiAgICAgIHR0N3gueSBBUyBlLCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwogICAgICB0dDh4LnogQVMgZiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICsKICAgICBGUk9NIHR0NyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICArCi0gICAgICBGVUxMIEpPSU4gdHQ4IFVTSU5HICh4KSwgICAgICAg ICAgICAgICAgICAgICAgKwotICAgICB0dDcgdHQ3eCh4XzEsIHksIHopICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKLSAgICAgIEZVTEwgSk9JTiB0dDggdHQ4eCh4XzEsIHosIHoy KSBVU0lORyAoeF8xKTsKKyAgICAgIEZVTEwgSk9JTiB0dDggVVNJTkcgKHgpIEFTIGp1LCAg ICAgICAgICAgICAgICArCisgICAgIHR0NyB0dDd4ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgKworICAgICAgRlVMTCBKT0lOIHR0OCB0dDh4IFVTSU5HICh4KSBB UyBqdV8xOwogKDEgcm93KQogCiBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3Z2NCcsIHRydWUp OwpAQCAtMTQwNiwxOCArMTQwNiwxOCBAQCBzZWxlY3QgcGdfZ2V0X3ZpZXdkZWYoJ3Z2NCcs IHRydWUpOwogICAgICB2LmcgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwogICAgIEZST00gKCBWQUxVRVMgKDEsMiwzLDQsNSw2LDcpKSB2KGEs IGIsIGMsIHgsIGUsIGYsIGcpKwogIFVOSU9OIEFMTCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwotICBTRUxFQ1QgeCBBUyBhLCAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKworICBTRUxFQ1QganUueCBBUyBhLCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDcueSBBUyBi LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgICB0dDgu eiBBUyBjLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAg ICB4XzEgQVMgeCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICAgICBqdV8yLngsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKwogICAgICB0dDd4LnkgQVMgZSwgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwogICAgICB0dDh4LnogQVMgZiwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgKwogICAgICB0dDh5LnogQVMgZyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgRlVMTCBKT0lOIHR0OCBV U0lORyAoeCksICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICB0dDcgdHQ3eCh4 XzEsIHksIHopICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwotICAgICAgRlVM TCBKT0lOIHR0OCB0dDh4KHhfMSwgeiwgejIpIFVTSU5HICh4XzEpICAgICAgICAgKwotICAg ICAgRlVMTCBKT0lOIHR0OCB0dDh5KHhfMSwgeiwgejIpIFVTSU5HICh4XzEpOworICAgICAg RlVMTCBKT0lOIHR0OCBVU0lORyAoeCkgQVMganUsICAgICAgICAgICAgICAgICAgICAgKwor ICAgICB0dDcgdHQ3eCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKworICAgICAgRlVMTCBKT0lOIHR0OCB0dDh4IFVTSU5HICh4KSBBUyBqdV8xICAgICAg ICAgICAgICAgKworICAgICAgRlVMTCBKT0lOIHR0OCB0dDh5IFVTSU5HICh4KSBBUyBqdV8y OwogKDEgcm93KQogCiAtLSBJbXBsaWNpdCBjb2VyY2lvbnMgaW4gYSBKT0lOIFVTSU5HIGNy ZWF0ZSBpc3N1ZXMgc2ltaWxhciB0byBGVUxMIEpPSU4KQEAgLTE0MzgsMTQgKzE0MzgsMTQg QEAgc2VsZWN0IHBnX2dldF92aWV3ZGVmKCd2djJhJywgdHJ1ZSk7CiAgICAgIHYuZSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00g KCBWQUxVRVMgKG5vdygpLDIsMyxub3coKSw1KSkgdihhLCBiLCBjLCBkLCBlKSsKICBVTklP TiBBTEwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICArCi0g IFNFTEVDVCB4IEFTIGEsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg KworICBTRUxFQ1QganUueCBBUyBhLCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICsKICAgICAgdHQ3YS55IEFTIGIsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICArCiAgICAgIHR0OGEueiBBUyBjLCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgKwotICAgICB0dDhheC54XzEgQVMgZCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICsKKyAgICAgdHQ4YXgueCBBUyBkLCAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICArCiAgICAgIHR0OGF4LnogQVMgZSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgKwogICAgIEZST00gdHQ3YSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICsKLSAgICAgIExFRlQgSk9JTiB0dDhhIFVT SU5HICh4KSwgICAgICAgICAgICAgICAgICAgICAgICArCi0gICAgIHR0OGEgdHQ4YXgoeF8x LCB6KTsKKyAgICAgIExFRlQgSk9JTiB0dDhhIFVTSU5HICh4KSBBUyBqdSwgICAgICAgICAg ICAgICAgICArCisgICAgIHR0OGEgdHQ4YXg7CiAoMSByb3cpCiAKIC0tCkBAIC0xNDk4LDE0 ICsxNDk4LDE0IEBAIHNlbGVjdCBwZ19nZXRfdmlld2RlZigndnY2JywgdHJ1ZSk7CiAKIGFs dGVyIHRhYmxlIHR0MTEgYWRkIGNvbHVtbiB6IGludDsKIHNlbGVjdCBwZ19nZXRfdmlld2Rl ZigndnY2JywgdHJ1ZSk7Ci0gICAgICAgIHBnX2dldF92aWV3ZGVmICAgICAgICAKLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotICBTRUxFQ1QgdHQxMS54LCAgICAgICAgICAg ICArCi0gICAgIHR0MTEueSwgICAgICAgICAgICAgICAgICsKLSAgICAgdHQxMi56LCAgICAg ICAgICAgICAgICAgKwotICAgICB0dDEzLnEgICAgICAgICAgICAgICAgICArCi0gICAgRlJP TSB0dDExIHR0MTEoeCwgeSwgel8xKSsKLSAgICAgIEpPSU4gdHQxMiBVU0lORyAoeCkgICAg KworICAgICAgcGdfZ2V0X3ZpZXdkZWYgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0KKyAgU0VMRUNUIHR0MTEueCwgICAgICAgICAgKworICAgICB0dDExLnksICAgICAg ICAgICAgICArCisgICAgIHR0MTIueiwgICAgICAgICAgICAgICsKKyAgICAgdHQxMy5xICAg ICAgICAgICAgICAgKworICAgIEZST00gdHQxMSAgICAgICAgICAgICArCisgICAgICBKT0lO IHR0MTIgVVNJTkcgKHgpICsKICAgICAgIEpPSU4gdHQxMyBVU0lORyAoeik7CiAoMSByb3cp CiAKLS0gCjIuMzQuMQoK --------------xD6xFqrWOLaqjQE4PFMP9eeX--