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 1m3uvN-0006vJ-L9 for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jul 2021 06:32:46 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m3uvJ-0002hx-QP for pgsql-hackers@arkaria.postgresql.org; Thu, 15 Jul 2021 06:32:41 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1m3uvJ-0002hp-A5 for pgsql-hackers@lists.postgresql.org; Thu, 15 Jul 2021 06:32:41 +0000 Received: from mail.postgrespro.ru ([93.174.131.139]) by magus.postgresql.org with esmtp (Exim 4.92) (envelope-from ) id 1m3uvE-0001zY-Vc for pgsql-hackers@postgresql.org; Thu, 15 Jul 2021 06:32:40 +0000 Received: from Andreys-MacBook-Pro.local (cyclops.postgrespro.ru [93.174.131.138]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (Client did not present a certificate) by mail.postgrespro.ru (Postfix) with ESMTPSA id 276A121C9D6D; Thu, 15 Jul 2021 09:32:35 +0300 (MSK) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=postgrespro.ru; s=mail; t=1626330755; bh=oGpHDTrrxdgVZzauxl/c/JLcrUaHdRFVFGhPhorXERY=; h=Subject:To:Cc:References:From:Date:In-Reply-To; b=mz7xaLTAxqgY9PLZ7TirJNYdWaFxIK9iSfv9T4EICDh9jQUjDDQnT6gr3qoWSuBEL MSzXn9WGjyfyvulNHMdw+mILpTAGyILhX8mkWRw9cdA0w4TwgPrS++vS9OJ3g8weB5 AdRH0t2SII6FAD1OnFmbtnRy8TA/9h+bCakIqDPk= Subject: Re: Asymmetric partition-wise JOIN To: Zhihong Yu Cc: Alexander Pyhalov , Anastasia Lubennikova , Daniel Gustafsson , Kohei KaiGai , Michael Paquier , Thomas Munro , Pg Hackers References: <20191201032411.GD2355@paquier.xyz> <47169D40-3621-4CF3-945C-9B524214D66B@yesql.se> <6c83bcf9-2c5b-7df5-6c7b-9ba7b25d1d6b@postgrespro.ru> <1fd87bb742825fe147d9a114fc250895@postgrespro.ru> <515c3653-02c2-7eb4-6f5f-f996ca97b512@postgrespro.ru> From: Andrey Lepikhov Organization: Postgres Professional Message-ID: <5720b1a9-6ea0-a7e5-7577-dca615b40334@postgrespro.ru> Date: Thu, 15 Jul 2021 09:32:34 +0300 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.11.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------3E36756D3B076A2ADF57AEBF" Content-Language: en-US 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. --------------3E36756D3B076A2ADF57AEBF Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 8bit On 5/7/21 23:15, Zhihong Yu wrote: > On Mon, Jul 5, 2021 at 2:57 AM Andrey Lepikhov > > wrote: > +            * Can't imagine situation when join relation already > exists. But in > +            * the 'partition_join' regression test it happens. > +            * It may be an indicator of possible problems. > > Should a log be added in the above case ? I worked more on this case and found more serious mistake. During population of additional paths on the existed RelOptInfo we can remove some previously generated paths that pointed from a higher-level list of subplans and it could cause to lost of subplan links. I prohibit such situation (you can read comments in the new version of the patch). Also, choosing of a cheapest path after appendrel creation was added. Unstable tests were fixed. -- regards, Andrey Lepikhov Postgres Professional --------------3E36756D3B076A2ADF57AEBF Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="v17-0001-Asymmetric-partitionwise-join.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="v17-0001-Asymmetric-partitionwise-join.patch" RnJvbSA3YjA1ZDg1MzViMTFlZDdiNWM0M2VkNTkxZDlhZWVhOTU1ZjJjMmVkIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBBbmRyZXkgTGVwaWtob3YgPGEubGVwaWtob3ZAcG9z dGdyZXNwcm8ucnU+CkRhdGU6IEZyaSwgMiBBcHIgMjAyMSAxMTowMjoyMCArMDUwMApTdWJq ZWN0OiBbUEFUQ0hdIEFzeW1tZXRyaWMgcGFydGl0aW9ud2lzZSBqb2luLgoKVGVhY2ggb3B0 aW1pemVyIHRvIGNvbnNpZGVyIHBhcnRpdGlvbndpc2Ugam9pbiBvZiBub24tcGFydGl0aW9u ZWQKdGFibGUgd2l0aCBlYWNoIHBhcnRpdGlvbiBvZiBwYXJ0aXRpb25lZCB0YWJsZS4KCkRp c2FsbG93IGFzeW1tZXRyaWMgbWFjaGluZXJ5IGZvciBqb2luaW5nIG9mIHR3byBwYXJ0aXRp b25lZCAob3IgYXBwZW5kZWQpCnJlbGF0aW9ucyBiZWNhdXNlIGl0IGNvdWxkIGNhdXNlIGh1 Z2UgY29uc3VtcHRpb24gb2YgQ1BVIGFuZCBtZW1vcnkKZHVyaW5nIHJlcGFyYW1ldGVyaXph dGlvbiBvZiBOZXN0TG9vcCBwYXRoLgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5wYXRoLmMgICAgICAgIHwgICA5ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2pvaW5yZWxzLmMgICAgICAgIHwgMTg3ICsrKysrKysrKysrCiBzcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICB8ICAxNyArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jICAgICAgfCAgMzcgKystCiBzcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9wYXRobm9kZS5jICAgICAgICB8ICAgOSArLQogc3JjL2JhY2tlbmQv b3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jICAgICAgICAgfCAgMTkgKy0KIHNyYy9pbmNsdWRl L29wdGltaXplci9wYXRocy5oICAgICAgICAgICAgICAgIHwgICA3ICstCiBzcmMvdGVzdC9y ZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dCB8IDMzMiArKysrKysrKysrKysr KysrKysrCiBzcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRpb25fam9pbi5zcWwgICAgICB8 IDEzMyArKysrKysrKwogOSBmaWxlcyBjaGFuZ2VkLCA3MjAgaW5zZXJ0aW9ucygrKSwgMzAg ZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnBhdGguYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5wYXRoLmMKaW5k ZXggNjQwN2VkZTEyYS4uMzI2MThlYmJkNSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvam9pbnBhdGguYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9qb2lucGF0aC5jCkBAIC0zMzUsNiArMzM1LDE1IEBAIGFkZF9wYXRoc190b19qb2lucmVs KFBsYW5uZXJJbmZvICpyb290LAogCWlmIChzZXRfam9pbl9wYXRobGlzdF9ob29rKQogCQlz ZXRfam9pbl9wYXRobGlzdF9ob29rKHJvb3QsIGpvaW5yZWwsIG91dGVycmVsLCBpbm5lcnJl bCwKIAkJCQkJCQkgICBqb2ludHlwZSwgJmV4dHJhKTsKKworCS8qCisJICogNy4gSWYgb3V0 ZXIgcmVsYXRpb24gaXMgZGVsaXZlcmVkIGZyb20gcGFydGl0aW9uLXRhYmxlcywgY29uc2lk ZXIKKwkgKiBkaXN0cmlidXRpbmcgaW5uZXIgcmVsYXRpb24gdG8gZXZlcnkgcGFydGl0aW9u LWxlYWYgcHJpb3IgdG8KKwkgKiBhcHBlbmQgdGhlc2UgbGVhZnMuCisJICovCisJdHJ5X2Fz eW1tZXRyaWNfcGFydGl0aW9ud2lzZV9qb2luKHJvb3QsIGpvaW5yZWwsCisJCQkJCQkJCQkg IG91dGVycmVsLCBpbm5lcnJlbCwKKwkJCQkJCQkJCSAgam9pbnR5cGUsICZleHRyYSk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVs cy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwppbmRleCAwZGJl MmFjNzI2Li5jOGRiNmYwOTY5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5y ZWxzLmMKQEAgLTE2LDYgKzE2LDcgQEAKIAogI2luY2x1ZGUgIm1pc2NhZG1pbi5oIgogI2lu Y2x1ZGUgIm9wdGltaXplci9hcHBlbmRpbmZvLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2Nv c3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvam9pbmluZm8uaCIKICNpbmNsdWRlICJvcHRp bWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKQEAgLTE1 NTEsNiArMTU1MiwxOTIgQEAgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbihQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwKIAl9CiB9CiAKKy8q CisgKiBCdWlsZCBSZWxPcHRJbmZvIG9uIEpPSU4gb2YgZWFjaCBwYXJ0aXRpb24gb2YgdGhl IG91dGVyIHJlbGF0aW9uIGFuZCB0aGUgaW5uZXIKKyAqIHJlbGF0aW9uLiBSZXR1cm4gTGlz dCBvZiBzdWNoIFJlbE9wdEluZm8ncy4gUmV0dXJuIE5JTCwgaWYgYXQgbGVhc3Qgb25lIG9m CisgKiB0aGVzZSBKT0lOcyBpcyBpbXBvc3NpYmxlIHRvIGJ1aWxkLgorICovCitzdGF0aWMg TGlzdCAqCitleHRyYWN0X2FzeW1tZXRyaWNfcGFydGl0aW9ud2lzZV9zdWJqb2luKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJCSBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJ CQkJCSBBcHBlbmRQYXRoICphcHBlbmRfcGF0aCwKKwkJCQkJCQkJCQkgUmVsT3B0SW5mbyAq aW5uZXJfcmVsLAorCQkJCQkJCQkJCSBKb2luVHlwZSBqb2ludHlwZSwKKwkJCQkJCQkJCQkg Sm9pblBhdGhFeHRyYURhdGEgKmV4dHJhKQoreworCUxpc3QJCSpyZXN1bHQgPSBOSUw7CisJ TGlzdENlbGwJKmxjOworCisJZm9yZWFjaCAobGMsIGFwcGVuZF9wYXRoLT5zdWJwYXRocykK Kwl7CisJCVBhdGgJCQkqY2hpbGRfcGF0aCA9IGxmaXJzdChsYyk7CisJCVJlbE9wdEluZm8J CSpjaGlsZF9yZWwgPSBjaGlsZF9wYXRoLT5wYXJlbnQ7CisJCVJlbGlkcwkJCWNoaWxkX2pv aW5yZWxpZHM7CisJCVJlbGlkcwkJCXBhcmVudF9yZWxpZHM7CisJCVJlbE9wdEluZm8JCSpj aGlsZF9qb2lucmVsOworCQlTcGVjaWFsSm9pbkluZm8JKmNoaWxkX3NqaW5mbzsKKwkJTGlz dAkJCSpjaGlsZF9yZXN0cmljdGxpc3Q7CisKKwkJY2hpbGRfam9pbnJlbGlkcyA9IGJtc191 bmlvbihjaGlsZF9yZWwtPnJlbGlkcywgaW5uZXJfcmVsLT5yZWxpZHMpOworCQlwYXJlbnRf cmVsaWRzID0gYm1zX3VuaW9uKGFwcGVuZF9wYXRoLT5wYXRoLnBhcmVudC0+cmVsaWRzLAor CQkJCQkJCQkgIGlubmVyX3JlbC0+cmVsaWRzKTsKKworCQljaGlsZF9zamluZm8gPSBidWls ZF9jaGlsZF9qb2luX3NqaW5mbyhyb290LCBleHRyYS0+c2ppbmZvLAorCQkJCQkJCQkJCQkg ICBjaGlsZF9yZWwtPnJlbGlkcywKKwkJCQkJCQkJCQkJICAgaW5uZXJfcmVsLT5yZWxpZHMp OworCQljaGlsZF9yZXN0cmljdGxpc3QgPSAoTGlzdCAqKQorCQkJYWRqdXN0X2FwcGVuZHJl bF9hdHRyc19tdWx0aWxldmVsKHJvb3QsIChOb2RlICopZXh0cmEtPnJlc3RyaWN0bGlzdCwK KwkJCQkJCQkJCQkJICBjaGlsZF9qb2lucmVsaWRzLCBwYXJlbnRfcmVsaWRzKTsKKworCQlj aGlsZF9qb2lucmVsID0gZmluZF9qb2luX3JlbChyb290LCBjaGlsZF9qb2lucmVsaWRzKTsK KwkJaWYgKCFjaGlsZF9qb2lucmVsKQorCQkJY2hpbGRfam9pbnJlbCA9IGJ1aWxkX2NoaWxk X2pvaW5fcmVsKHJvb3QsCisJCQkJCQkJCQkJCQkgY2hpbGRfcmVsLAorCQkJCQkJCQkJCQkJ IGlubmVyX3JlbCwKKwkJCQkJCQkJCQkJCSBqb2lucmVsLAorCQkJCQkJCQkJCQkJIGNoaWxk X3Jlc3RyaWN0bGlzdCwKKwkJCQkJCQkJCQkJCSBjaGlsZF9zamluZm8sCisJCQkJCQkJCQkJ CQkgam9pbnR5cGUpOworCQllbHNlCisJCXsKKwkJCS8qCisJCQkgKiBUaGUgam9pbiByZWxh dGlvbiBhbHJlYWR5IGV4aXN0cy4gRm9yIGV4YW1wbGUsIGl0IGNvdWxkIGhhcHBlbiBpZgor CQkJICogd2Ugam9pbiB0d28gcGxhbmUgdGFibGVzIHdpdGggcGFydGl0aW9uZWQgdGFibGUo cykuCisJCQkgKiBQb3B1bGF0aW5nIHRoaXMgam9pbiB3aXRoIGFkZGl0aW9uYWwgcGF0aHMg Y291bGQgcHVzaCBvdXQgc29tZQorCQkJICogcHJldmlvdXNseSBhZGRlZCBwYXRocyB3aGlj aCBjb3VsZCBiZSBwb2ludGVkIGluIGEgc3VicGxhbnMgbGlzdAorCQkJICogb2YgYW4gaGln aGVyIGxldmVsIGFwcGVuZC4KKwkJCSAqIE9mIGNvdXJzZSwgd2UgY291bGQgc2F2ZSBzdWNo IHBhdGhzIGJlZm9yZSBnZW5lcmF0aW5nIG5ldy4gQnV0IGl0CisJCQkgKiBjYW4gaW5jcmVh c2UgdG9vIG11Y2ggdGhlIG51bWJlciBvZiBwYXRocyBpbiBjb21wbGV4IHF1ZXJpZXMuIEl0 CisJCQkgKiBjYW4gYmUgYSB0YXNrIGZvciBmdXR1cmUgd29yay4KKwkJCSAqLworCQkJcmV0 dXJuIE5JTDsKKwkJfQorCisJCXBvcHVsYXRlX2pvaW5yZWxfd2l0aF9wYXRocyhyb290LAor CQkJCQkJCQkJY2hpbGRfcmVsLAorCQkJCQkJCQkJaW5uZXJfcmVsLAorCQkJCQkJCQkJY2hp bGRfam9pbnJlbCwKKwkJCQkJCQkJCWNoaWxkX3NqaW5mbywKKwkJCQkJCQkJCWNoaWxkX3Jl c3RyaWN0bGlzdCk7CisKKwkJLyogR2l2ZSB1cCBpZiBhc3ltbWV0cmljIHBhcnRpdGlvbi13 aXNlIGpvaW4gaXMgbm90IGF2YWlsYWJsZSAqLworCQlpZiAoY2hpbGRfam9pbnJlbC0+cGF0 aGxpc3QgPT0gTklMKQorCQkJcmV0dXJuIE5JTDsKKworCQlzZXRfY2hlYXBlc3QoY2hpbGRf am9pbnJlbCk7CisJCXJlc3VsdCA9IGxhcHBlbmQocmVzdWx0LCBjaGlsZF9qb2lucmVsKTsK Kwl9CisJcmV0dXJuIHJlc3VsdDsKK30KKworc3RhdGljIGJvb2wKK2lzX2FzeW1tZXRyaWNf am9pbl9mZWFzaWJsZShQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCSAgIFJlbE9wdEluZm8g Km91dGVyX3JlbCwKKwkJCQkJCSAgIFJlbE9wdEluZm8gKmlubmVyX3JlbCwKKwkJCQkJCSAg IEpvaW5UeXBlIGpvaW50eXBlKQoreworCUxpc3RDZWxsICpsYzsKKworCWlmIChqb2ludHlw ZSAhPSBKT0lOX0lOTkVSICYmIGpvaW50eXBlICE9IEpPSU5fTEVGVCkKKwkJcmV0dXJuIGZh bHNlOworCisJaWYgKElTX09USEVSX1JFTChvdXRlcl9yZWwpIHx8IElTX09USEVSX1JFTChp bm5lcl9yZWwpKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKiBEaXNhbGxvdyByZWN1cnNpdmUg dXNhZ2Ugb2YgYXN5bW1lcnRpYyBqb2luIG1hY2hpbmVyeSAqLworCWlmIChyb290LT5qb2lu X3JlbF9sZXZlbCA9PSBOVUxMKQorCQlyZXR1cm4gZmFsc2U7CisKKwkvKgorCSAqIERvbid0 IGFsbG93IGFzeW1tZXRyaWMgSk9JTiBvZiB0d28gYXBwZW5kIHN1YnBsYW5zLgorCSAqIElu IHRoZSBjYXNlIG9mIGEgcGFyYW1ldGVyaXplZCBOTCBqb2luLCBhIHJlcGFyYW1ldGVyaXph dGlvbiBwcm9jZWR1cmUKKwkgKiB3aWxsIGxlYWQgdG8gbGFyZ2UgbWVtb3J5IGFsbG9jYXRp b25zIGFuZCBhIENQVSBjb25zdW1wdGlvbjoKKwkgKiBlYWNoIHJlcGFyYW1ldGVyaXphdGlv biB3aWxsIGluZHVjZSBzdWJwYXRoIGR1cGxpY2F0aW9uLCBjcmVhdGluZyBuZXcKKwkgKiBQ YXJhbVBhdGhJbmZvIGluc3RhbmNlIGFuZCBpbmNyZWFzaW5nIG9mIHBwaWxpc3QgdXAgdG8g bnVtYmVyIG9mCisJICogcGFydGl0aW9ucyBpbiB0aGUgaW5uZXIuIEFsc28sIGlmIHdlIGhh dmUgbWFueSBwYXJ0aXRpb25zLCBlYWNoIGJpdG1hcHNldAorCSAqIHZhcmlhYmxlIHdpbGwg YmUgbGFyZ2UgYW5kIG1hbnkgbGVha3Mgb2Ygc3VjaCB2YXJpYWJsZSAoY2F1c2VkIGJ5IHJl bGlkCisJICogcmVwbGFjZW1lbnQpIHdpbGwgaGlnaGx5IGluY3JlYXNlIG1lbW9yeSBjb25z dW1wdGlvbi4KKwkgKiBTbywgd2UgZGVueSBzdWNoIHBhdGhzIGZvciBub3cuCisJICovCisJ Zm9yZWFjaChsYywgaW5uZXJfcmVsLT5wYXRobGlzdCkKKwl7CisJCWlmIChJc0EobGZpcnN0 KGxjKSwgQXBwZW5kUGF0aCkpCisJCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRy dWU7Cit9CisKK3ZvaWQKK3RyeV9hc3ltbWV0cmljX3BhcnRpdGlvbndpc2Vfam9pbihQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJICBSZWxPcHRJbmZvICpqb2lucmVsLAorCQkJCQkJ CQkgIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKKwkJCQkJCQkJICBSZWxPcHRJbmZvICppbm5l cl9yZWwsCisJCQkJCQkJCSAgSm9pblR5cGUgam9pbnR5cGUsCisJCQkJCQkJCSAgSm9pblBh dGhFeHRyYURhdGEgKmV4dHJhKQoreworCUxpc3RDZWxsICpsYzsKKworCS8qCisJICogVHJ5 IHRoaXMga2luZCBvZiBwYXRocyBpZiB3ZSBhbGxvdyBjb21wbGV4IHBhcnRpdGlvbndpc2Ug am9pbnMgYW5kIHdlIGtub3cKKwkgKiB3ZSBjYW4gYnVpbGQgdGhpcyBqb2luIHNhZmVseS4K KwkgKi8KKwlpZiAoIWVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gfHwKKwkJIWlzX2FzeW1t ZXRyaWNfam9pbl9mZWFzaWJsZShyb290LCBvdXRlcl9yZWwsIGlubmVyX3JlbCwgam9pbnR5 cGUpKQorCQlyZXR1cm47CisKKwlmb3JlYWNoIChsYywgb3V0ZXJfcmVsLT5wYXRobGlzdCkK Kwl7CisJCUFwcGVuZFBhdGggKmFwcGVuZF9wYXRoID0gbGZpcnN0KGxjKTsKKworCQkvKgor CQkgKiBXZSBhc3N1bWUgdGhpcyBwYXRobGlzdCBrZWVwcyBhdCBsZWFzdCBvbmUgQXBwZW5k UGF0aCB0aGF0CisJCSAqIHJlcHJlc2VudHMgcGFydGl0aW9uZWQgdGFibGUtc2Nhbiwgc3lt bWV0cmljIG9yIGFzeW1tZXRyaWMKKwkJICogcGFydGl0aW9uLXdpc2Ugam9pbi4gQXN5bW1l dHJpYyBqb2luIGlzbid0IG5lZWRlZCBpZiB0aGUgYXBwZW5kIG5vZGUKKwkJICogaGFzIG9u bHkgb25lIGNoaWxkLgorCQkgKi8KKwkJaWYgKElzQShhcHBlbmRfcGF0aCwgQXBwZW5kUGF0 aCkgJiYKKwkJCWxpc3RfbGVuZ3RoKGFwcGVuZF9wYXRoLT5zdWJwYXRocykgPiAxKQorCQl7 CisJCQlMaXN0ICoqam9pbl9yZWxfbGV2ZWxfc2F2ZWQ7CisJCQlMaXN0ICpsaXZlX2NoaWxk cmVscyA9IE5JTDsKKworCQkJam9pbl9yZWxfbGV2ZWxfc2F2ZWQgPSByb290LT5qb2luX3Jl bF9sZXZlbDsKKwkJCVBHX1RSWSgpOworCQkJeworCQkJCS8qIHRlbXBvcmFyeSBkaXNhYmxl cyAiZHluYW1pYyBwcm9ncmFtbWluZyIgYWxnb3JpdGhtICovCisJCQkJcm9vdC0+am9pbl9y ZWxfbGV2ZWwgPSBOVUxMOworCisJCQkJbGl2ZV9jaGlsZHJlbHMgPQorCQkJCQlleHRyYWN0 X2FzeW1tZXRyaWNfcGFydGl0aW9ud2lzZV9zdWJqb2luKHJvb3QsCisJCQkJCQkJCQkJCQkJ CQkgam9pbnJlbCwKKwkJCQkJCQkJCQkJCQkJCSBhcHBlbmRfcGF0aCwKKwkJCQkJCQkJCQkJ CQkJCSBpbm5lcl9yZWwsCisJCQkJCQkJCQkJCQkJCQkgam9pbnR5cGUsCisJCQkJCQkJCQkJ CQkJCQkgZXh0cmEpOworCQkJfQorCQkJUEdfRklOQUxMWSgpOworCQkJeworCQkJCXJvb3Qt PmpvaW5fcmVsX2xldmVsID0gam9pbl9yZWxfbGV2ZWxfc2F2ZWQ7CisJCQl9CisJCQlQR19F TkRfVFJZKCk7CisKKwkJCWlmIChsaXZlX2NoaWxkcmVscyAhPSBOSUwpCisJCQl7CisJCQkJ LyoKKwkJCQkgKiBBZGQgbmV3IGFwcGVuZCByZWxhdGlvbi4gV2UgbXVzdCBjaG9vc2UgY2hl YXBlc3QgcGF0aHMgYWZ0ZXIKKwkJCQkgKiB0aGlzIG9wZXJhdGlvbiBiZWNhdXNlIHRoZSBw YXRobGlzdCBwb3NzaWJseSBjb250YWlucworCQkJCSAqIGpvaW5yZWxzIGFuZCBhcHBlbmRy ZWxzIHRoYXQgY2FuIGJlIHN1Ym9wdGltYWwuCisJCQkJICovCisJCQkJYWRkX3BhdGhzX3Rv X2FwcGVuZF9yZWwocm9vdCwgam9pbnJlbCwgbGl2ZV9jaGlsZHJlbHMpOworCQkJCXNldF9j aGVhcGVzdChqb2lucmVsKTsKKwkJCX0KKworCQkJYnJlYWs7CisJCX0KKwl9Cit9CisKIC8q CiAgKiBDb25zdHJ1Y3QgdGhlIFNwZWNpYWxKb2luSW5mbyBmb3IgYSBjaGlsZC1qb2luIGJ5 IHRyYW5zbGF0aW5nCiAgKiBTcGVjaWFsSm9pbkluZm8gZm9yIHRoZSBqb2luIGJldHdlZW4g cGFyZW50cy4gbGVmdF9yZWxpZHMgYW5kIHJpZ2h0X3JlbGlkcwpkaWZmIC0tZ2l0IGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vc2V0cmVmcy5jCmluZGV4IDI2ZjY4NzJiNGIuLjZmZmE2OGVmYmEgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYworKysgYi9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMKQEAgLTI4MSwyNCArMjgxLDI5IEBA IHNldF9wbGFuX3JlZmVyZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW4gKnBsYW4pCiAK IAkvKgogCSAqIEFkanVzdCBSVCBpbmRleGVzIG9mIEFwcGVuZFJlbEluZm9zIGFuZCBhZGQg dG8gZmluYWwgYXBwZW5kcmVscyBsaXN0LgotCSAqIFdlIGFzc3VtZSB0aGUgQXBwZW5kUmVs SW5mb3Mgd2VyZSBidWlsdCBkdXJpbmcgcGxhbm5pbmcgYW5kIGRvbid0IG5lZWQKLQkgKiB0 byBiZSBjb3BpZWQuCisJICogVGhlIEFwcGVuZFJlbEluZm9zIGFyZSBjb3BpZWQsIGJlY2F1 c2UgYXMgYSBwYXJ0IG9mIGEgc3VicGxhbiB0aGV5IGNvdWxkCisJICogYmUgdmlzaXRlZCBt YW55IHRpbWVzIGluIHRoZSBjYXNlIG9mIGFzeW1tZXRyaWMgam9pbi4KIAkgKi8KIAlmb3Jl YWNoKGxjLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCiAJewogCQlBcHBlbmRSZWxJbmZvICph cHBpbmZvID0gbGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywgbGMpOworCQlBcHBlbmRSZWxJ bmZvICpuZXdhcHBpbmZvOworCisJCS8qIGZsYXQgY29weSBpcyBlbm91Z2ggc2luY2UgYWxs IHZhbHVhYmxlIGZpZWxkcyBhcmUgc2NhbGFycyAqLworCQluZXdhcHBpbmZvID0gKEFwcGVu ZFJlbEluZm8gKikgcGFsbG9jKHNpemVvZihBcHBlbmRSZWxJbmZvKSk7CisJCW1lbWNweShu ZXdhcHBpbmZvLCBhcHBpbmZvLCBzaXplb2YoQXBwZW5kUmVsSW5mbykpOwogCiAJCS8qIGFk anVzdCBSVCBpbmRleGVzICovCi0JCWFwcGluZm8tPnBhcmVudF9yZWxpZCArPSBydG9mZnNl dDsKLQkJYXBwaW5mby0+Y2hpbGRfcmVsaWQgKz0gcnRvZmZzZXQ7CisJCW5ld2FwcGluZm8t PnBhcmVudF9yZWxpZCArPSBydG9mZnNldDsKKwkJbmV3YXBwaW5mby0+Y2hpbGRfcmVsaWQg Kz0gcnRvZmZzZXQ7CiAKIAkJLyoKIAkJICogUmF0aGVyIHRoYW4gYWRqdXN0IHRoZSB0cmFu c2xhdGVkX3ZhcnMgZW50cmllcywganVzdCBkcm9wICdlbS4KIAkJICogTmVpdGhlciB0aGUg ZXhlY3V0b3Igbm9yIEVYUExBSU4gY3VycmVudGx5IG5lZWQgdGhhdCBkYXRhLgogCQkgKi8K LQkJYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzID0gTklMOworCQluZXdhcHBpbmZvLT50cmFu c2xhdGVkX3ZhcnMgPSBOSUw7CiAKLQkJZ2xvYi0+YXBwZW5kUmVsYXRpb25zID0gbGFwcGVu ZChnbG9iLT5hcHBlbmRSZWxhdGlvbnMsIGFwcGluZm8pOworCQlnbG9iLT5hcHBlbmRSZWxh dGlvbnMgPSBsYXBwZW5kKGdsb2ItPmFwcGVuZFJlbGF0aW9ucywgbmV3YXBwaW5mbyk7CiAJ fQogCiAJLyogTm93IGZpeCB0aGUgUGxhbiB0cmVlICovCmRpZmYgLS1naXQgYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5kZXggYWY0NmY1ODFhYy4uZWM4ZGVlOTliMCAxMDA2 NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5jCisrKyBi L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGluZm8uYwpAQCAtMjAyLDcgKzIw Miw5IEBAIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUg Km5vZGUsIGludCBuYXBwaW5mb3MsCiAJY29udGV4dC5hcHBpbmZvcyA9IGFwcGluZm9zOwog CiAJLyogSWYgdGhlcmUncyBub3RoaW5nIHRvIGFkanVzdCwgZG9uJ3QgY2FsbCB0aGlzIGZ1 bmN0aW9uLiAqLwotCUFzc2VydChuYXBwaW5mb3MgPj0gMSAmJiBhcHBpbmZvcyAhPSBOVUxM KTsKKwkvKiBJZiB0aGVyZSdzIG5vdGhpbmcgdG8gYWRqdXN0LCBqdXN0IHJldHVybiBhIGR1 cGxpY2F0aW9uICovCisJaWYgKG5hcHBpbmZvcyA9PSAwKQorCQlyZXR1cm4gY29weU9iamVj dChub2RlKTsKIAogCS8qIFNob3VsZCBuZXZlciBiZSB0cmFuc2xhdGluZyBhIFF1ZXJ5IHRy ZWUuICovCiAJQXNzZXJ0KG5vZGUgPT0gTlVMTCB8fCAhSXNBKG5vZGUsIFF1ZXJ5KSk7CkBA IC00ODksMTIgKzQ5MSwxMCBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwo UGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCiAJCQkJCQkJCSAgUmVsaWRzIGNoaWxk X3JlbGlkcywKIAkJCQkJCQkJICBSZWxpZHMgdG9wX3BhcmVudF9yZWxpZHMpCiB7Ci0JQXBw ZW5kUmVsSW5mbyAqKmFwcGluZm9zOwotCUJpdG1hcHNldCAgKnBhcmVudF9yZWxpZHMgPSBO VUxMOwotCWludAkJCW5hcHBpbmZvczsKLQlpbnQJCQljbnQ7Ci0KLQlBc3NlcnQoYm1zX251 bV9tZW1iZXJzKGNoaWxkX3JlbGlkcykgPT0gYm1zX251bV9tZW1iZXJzKHRvcF9wYXJlbnRf cmVsaWRzKSk7CisJQXBwZW5kUmVsSW5mbwkqKmFwcGluZm9zOworCVJlbGlkcwkJCXBhcmVu dF9yZWxpZHMgPSBOVUxMOworCWludAkJCQluYXBwaW5mb3M7CisJaW50CQkJCWNudDsKIAog CWFwcGluZm9zID0gZmluZF9hcHBpbmZvc19ieV9yZWxpZHMocm9vdCwgY2hpbGRfcmVsaWRz LCAmbmFwcGluZm9zKTsKIApAQCAtNTA2LDggKzUwNiwxMyBAQCBhZGp1c3RfYXBwZW5kcmVs X2F0dHJzX211bHRpbGV2ZWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCiAJCXBh cmVudF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcihwYXJlbnRfcmVsaWRzLCBhcHBpbmZvLT5w YXJlbnRfcmVsaWQpOwogCX0KIAotCS8qIFJlY3Vyc2UgaWYgaW1tZWRpYXRlIHBhcmVudCBp cyBub3QgdGhlIHRvcCBwYXJlbnQuICovCi0JaWYgKCFibXNfZXF1YWwocGFyZW50X3JlbGlk cywgdG9wX3BhcmVudF9yZWxpZHMpKQorCS8qCisJICogUmVjdXJzZSBpZiBpbW1lZGlhdGUg cGFyZW50IGlzIG5vdCB0aGUgdG9wIHBhcmVudC4gS2VlcCBpbiBtaW5kIHRoYXQgaW4gYQor CSAqIGNhc2Ugb2YgYXN5bW1ldHJpYyBKT0lOIHRvcF9wYXJlbnRfcmVsaWRzIGNhbiBjb250 YWluIHJlbGlkcyB3aGljaCBhcmVuJ3QKKwkgKiBwYXJ0IG9mIGFuIGFwcGVuZCBub2RlLgor CSAqLworCWlmICghYm1zX2VxdWFsKHBhcmVudF9yZWxpZHMsIHRvcF9wYXJlbnRfcmVsaWRz KSAmJgorCQkhYm1zX2lzX3N1YnNldChwYXJlbnRfcmVsaWRzLCB0b3BfcGFyZW50X3JlbGlk cykpCiAJCW5vZGUgPSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwocm9vdCwg bm9kZSwgcGFyZW50X3JlbGlkcywKIAkJCQkJCQkJCQkJCSB0b3BfcGFyZW50X3JlbGlkcyk7 CiAKQEAgLTUxNSw2ICs1MjAsNyBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2 ZWwoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKm5vZGUsCiAJbm9kZSA9IGFkanVzdF9hcHBl bmRyZWxfYXR0cnMocm9vdCwgbm9kZSwgbmFwcGluZm9zLCBhcHBpbmZvcyk7CiAKIAlwZnJl ZShhcHBpbmZvcyk7CisJcGZyZWUocGFyZW50X3JlbGlkcyk7CiAKIAlyZXR1cm4gbm9kZTsK IH0KQEAgLTU2NSw2ICs1NzEsNyBAQCBhZGp1c3RfY2hpbGRfcmVsaWRzX211bHRpbGV2ZWwo UGxhbm5lckluZm8gKnJvb3QsIFJlbGlkcyByZWxpZHMsCiAJQXBwZW5kUmVsSW5mbyAqKmFw cGluZm9zOwogCWludAkJCW5hcHBpbmZvczsKIAlSZWxpZHMJCXBhcmVudF9yZWxpZHMgPSBO VUxMOworCVJlbGlkcwkJbm9ybWFsX3JlbGlkcyA9IE5VTEw7CiAJUmVsaWRzCQlyZXN1bHQ7 CiAJUmVsaWRzCQl0bXBfcmVzdWx0ID0gTlVMTDsKIAlpbnQJCQljbnQ7CkBAIC01NzksMTIg KzU4NiwxNyBAQCBhZGp1c3RfY2hpbGRfcmVsaWRzX211bHRpbGV2ZWwoUGxhbm5lckluZm8g KnJvb3QsIFJlbGlkcyByZWxpZHMsCiAJYXBwaW5mb3MgPSBmaW5kX2FwcGluZm9zX2J5X3Jl bGlkcyhyb290LCBjaGlsZF9yZWxpZHMsICZuYXBwaW5mb3MpOwogCiAJLyogQ29uc3RydWN0 IHJlbGlkcyBzZXQgZm9yIHRoZSBpbW1lZGlhdGUgcGFyZW50IG9mIHRoZSBnaXZlbiBjaGls ZC4gKi8KKwlub3JtYWxfcmVsaWRzID0gYm1zX2NvcHkoY2hpbGRfcmVsaWRzKTsKIAlmb3Ig KGNudCA9IDA7IGNudCA8IG5hcHBpbmZvczsgY250KyspCiAJewogCQlBcHBlbmRSZWxJbmZv ICphcHBpbmZvID0gYXBwaW5mb3NbY250XTsKIAogCQlwYXJlbnRfcmVsaWRzID0gYm1zX2Fk ZF9tZW1iZXIocGFyZW50X3JlbGlkcywgYXBwaW5mby0+cGFyZW50X3JlbGlkKTsKKwkJbm9y bWFsX3JlbGlkcyA9IGJtc19kZWxfbWVtYmVyKG5vcm1hbF9yZWxpZHMsIGFwcGluZm8tPmNo aWxkX3JlbGlkKTsKIAl9CisJcGFyZW50X3JlbGlkcyA9IGJtc191bmlvbihwYXJlbnRfcmVs aWRzLCBub3JtYWxfcmVsaWRzKTsKKwlpZiAobm9ybWFsX3JlbGlkcykKKwkJYm1zX2ZyZWUo bm9ybWFsX3JlbGlkcyk7CiAKIAkvKiBSZWN1cnNlIGlmIGltbWVkaWF0ZSBwYXJlbnQgaXMg bm90IHRoZSB0b3AgcGFyZW50LiAqLwogCWlmICghYm1zX2VxdWFsKHBhcmVudF9yZWxpZHMs IHRvcF9wYXJlbnRfcmVsaWRzKSkKQEAgLTcxNSwxMSArNzI3LDExIEBAIEFwcGVuZFJlbElu Zm8gKioKIGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKFBsYW5uZXJJbmZvICpyb290LCBSZWxp ZHMgcmVsaWRzLCBpbnQgKm5hcHBpbmZvcykKIHsKIAlBcHBlbmRSZWxJbmZvICoqYXBwaW5m b3M7CisJaW50CQkJbnJvb21zID0gYm1zX251bV9tZW1iZXJzKHJlbGlkcyk7CiAJaW50CQkJ Y250ID0gMDsKIAlpbnQJCQlpOwogCi0JKm5hcHBpbmZvcyA9IGJtc19udW1fbWVtYmVycyhy ZWxpZHMpOwotCWFwcGluZm9zID0gKEFwcGVuZFJlbEluZm8gKiopIHBhbGxvYyhzaXplb2Yo QXBwZW5kUmVsSW5mbyAqKSAqICpuYXBwaW5mb3MpOworCWFwcGluZm9zID0gKEFwcGVuZFJl bEluZm8gKiopIHBhbGxvYyhzaXplb2YoQXBwZW5kUmVsSW5mbyAqKSAqIG5yb29tcyk7CiAK IAlpID0gLTE7CiAJd2hpbGUgKChpID0gYm1zX25leHRfbWVtYmVyKHJlbGlkcywgaSkpID49 IDApCkBAIC03MjcsMTAgKzczOSwxMSBAQCBmaW5kX2FwcGluZm9zX2J5X3JlbGlkcyhQbGFu bmVySW5mbyAqcm9vdCwgUmVsaWRzIHJlbGlkcywgaW50ICpuYXBwaW5mb3MpCiAJCUFwcGVu ZFJlbEluZm8gKmFwcGluZm8gPSByb290LT5hcHBlbmRfcmVsX2FycmF5W2ldOwogCiAJCWlm ICghYXBwaW5mbykKLQkJCWVsb2coRVJST1IsICJjaGlsZCByZWwgJWQgbm90IGZvdW5kIGlu IGFwcGVuZF9yZWxfYXJyYXkiLCBpKTsKKwkJCWNvbnRpbnVlOwogCiAJCWFwcGluZm9zW2Nu dCsrXSA9IGFwcGluZm87CiAJfQorCSpuYXBwaW5mb3MgPSBjbnQ7CiAJcmV0dXJuIGFwcGlu Zm9zOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wYXRo bm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGF0aG5vZGUuYwppbmRleCAw Yzk0Y2JlNzY3Li5lNDgyOGIzNjQ3IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9wYXRobm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3Bh dGhub2RlLmMKQEAgLTQyMjQsNyArNDIyNCwxNCBAQCBkbyB7IFwKIAogCQlNZW1vcnlDb250 ZXh0U3dpdGNoVG8ob2xkY29udGV4dCk7CiAJfQotCWJtc19mcmVlKHJlcXVpcmVkX291dGVy KTsKKworCS8qCisJICogSWYgYWRqdXN0X2NoaWxkX3JlbGlkc19tdWx0aWxldmVsIGRvbid0 IGRvIHJlcGxhY2VtZW50cyBpdCByZXR1cm5zCisJICogdGhlIG9yaWdpbmFsIHNldCwgbm90 IGEgY29weS4gSXQgaXMgcG9zc2libGUgaW4gdGhlIGNhc2Ugb2YgYXN5bW1ldHJpYworCSAq IEpPSU4gYW5kIGNoaWxkX3JlbC0+cmVsaWRzIGNvbnRhaW5zIHJlbGlkcyBvbmx5IG9mIHBs YW5lIHJlbGF0aW9ucy4KKwkgKi8KKwlpZiAocmVxdWlyZWRfb3V0ZXIgIT0gb2xkX3BwaS0+ cHBpX3JlcV9vdXRlcikKKwkJYm1zX2ZyZWUocmVxdWlyZWRfb3V0ZXIpOwogCiAJbmV3X3Bh dGgtPnBhcmFtX2luZm8gPSBuZXdfcHBpOwogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKaW5kZXggZTEwNWE0ZDVmMS4uYmIxNWZiMjcxNiAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3JlbG5vZGUuYwpAQCAtNzkwLDExICs3OTAsOCBAQCBidWlsZF9jaGls ZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAog CUFwcGVuZFJlbEluZm8gKiphcHBpbmZvczsKIAlpbnQJCQluYXBwaW5mb3M7CiAKLQkvKiBP bmx5IGpvaW5zIGJldHdlZW4gIm90aGVyIiByZWxhdGlvbnMgbGFuZCBoZXJlLiAqLwotCUFz c2VydChJU19PVEhFUl9SRUwob3V0ZXJfcmVsKSAmJiBJU19PVEhFUl9SRUwoaW5uZXJfcmVs KSk7Ci0KLQkvKiBUaGUgcGFyZW50IGpvaW5yZWwgc2hvdWxkIGhhdmUgY29uc2lkZXJfcGFy dGl0aW9ud2lzZV9qb2luIHNldC4gKi8KLQlBc3NlcnQocGFyZW50X2pvaW5yZWwtPmNvbnNp ZGVyX3BhcnRpdGlvbndpc2Vfam9pbik7CisJLyogRWl0aGVyIG9mIHJlbGF0aW9ucyBtdXN0 IGJlICJvdGhlciIgcmVsYXRpb24gYXQgbGVhc3QuICovCisJQXNzZXJ0KElTX09USEVSX1JF TChvdXRlcl9yZWwpIHx8IElTX09USEVSX1JFTChpbm5lcl9yZWwpKTsKIAogCWpvaW5yZWwt PnJlbG9wdGtpbmQgPSBSRUxPUFRfT1RIRVJfSk9JTlJFTDsKIAlqb2lucmVsLT5yZWxpZHMg PSBibXNfdW5pb24ob3V0ZXJfcmVsLT5yZWxpZHMsIGlubmVyX3JlbC0+cmVsaWRzKTsKQEAg LTg1MSw4ICs4NDgsMTEgQEAgYnVpbGRfY2hpbGRfam9pbl9yZWwoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKm91dGVyX3JlbCwKIAlqb2lucmVsLT5wYXJ0ZXhwcnMgPSBOVUxM OwogCWpvaW5yZWwtPm51bGxhYmxlX3BhcnRleHBycyA9IE5VTEw7CiAKLQlqb2lucmVsLT50 b3BfcGFyZW50X3JlbGlkcyA9IGJtc191bmlvbihvdXRlcl9yZWwtPnRvcF9wYXJlbnRfcmVs aWRzLAotCQkJCQkJCQkJCSAgIGlubmVyX3JlbC0+dG9wX3BhcmVudF9yZWxpZHMpOworCWpv aW5yZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0KKwkJYm1zX3VuaW9uKElTX09USEVSX1JFTChv dXRlcl9yZWwpID8KKwkJCQkgIG91dGVyX3JlbC0+dG9wX3BhcmVudF9yZWxpZHMgOiBvdXRl cl9yZWwtPnJlbGlkcywKKwkJCQkgIElTX09USEVSX1JFTChpbm5lcl9yZWwpID8KKwkJCQkg IGlubmVyX3JlbC0+dG9wX3BhcmVudF9yZWxpZHMgOiBpbm5lcl9yZWwtPnJlbGlkcyk7CiAK IAkvKiBDb21wdXRlIGluZm9ybWF0aW9uIHJlbGV2YW50IHRvIGZvcmVpZ24gcmVsYXRpb25z LiAqLwogCXNldF9mb3JlaWduX3JlbF9wcm9wZXJ0aWVzKGpvaW5yZWwsIG91dGVyX3JlbCwg aW5uZXJfcmVsKTsKQEAgLTIwMzMsOSArMjAzMyw4IEBAIGJ1aWxkX2NoaWxkX2pvaW5fcmVs dGFyZ2V0KFBsYW5uZXJJbmZvICpyb290LAogewogCS8qIEJ1aWxkIHRoZSB0YXJnZXRsaXN0 ICovCiAJY2hpbGRyZWwtPnJlbHRhcmdldC0+ZXhwcnMgPSAoTGlzdCAqKQotCQlhZGp1c3Rf YXBwZW5kcmVsX2F0dHJzKHJvb3QsCi0JCQkJCQkJICAgKE5vZGUgKikgcGFyZW50cmVsLT5y ZWx0YXJnZXQtPmV4cHJzLAotCQkJCQkJCSAgIG5hcHBpbmZvcywgYXBwaW5mb3MpOworCQlh ZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211bHRpbGV2ZWwocm9vdCwgKE5vZGUgKilwYXJlbnRy ZWwtPnJlbHRhcmdldC0+ZXhwcnMsCisJCQkJCQkJCQkJY2hpbGRyZWwtPnJlbGlkcywgcGFy ZW50cmVsLT5yZWxpZHMpOwogCiAJLyogU2V0IHRoZSBjb3N0IGFuZCB3aWR0aCBmaWVsZHMg Ki8KIAljaGlsZHJlbC0+cmVsdGFyZ2V0LT5jb3N0LnN0YXJ0dXAgPSBwYXJlbnRyZWwtPnJl bHRhcmdldC0+Y29zdC5zdGFydHVwOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhzLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaAppbmRleCBmMWQx MTEwNjNjLi5hMDEwNmRjNTM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIv cGF0aHMuaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaApAQCAtMTA5LDcg KzEwOSwxMiBAQCBleHRlcm4gYm9vbCBoYXZlX2pvaW5fb3JkZXJfcmVzdHJpY3Rpb24oUGxh bm5lckluZm8gKnJvb3QsCiBleHRlcm4gYm9vbCBoYXZlX2Rhbmdlcm91c19waHYoUGxhbm5l ckluZm8gKnJvb3QsCiAJCQkJCQkJICAgUmVsaWRzIG91dGVyX3JlbGlkcywgUmVsaWRzIGlu bmVyX3BhcmFtcyk7CiBleHRlcm4gdm9pZCBtYXJrX2R1bW15X3JlbChSZWxPcHRJbmZvICpy ZWwpOwotCitleHRlcm4gdm9pZCB0cnlfYXN5bW1ldHJpY19wYXJ0aXRpb253aXNlX2pvaW4o UGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkJCSAgUmVsT3B0SW5mbyAqam9pbnJlbCwK KwkJCQkJCQkJCQkJICBSZWxPcHRJbmZvICpvdXRlcl9yZWwsCisJCQkJCQkJCQkJCSAgUmVs T3B0SW5mbyAqaW5uZXJfcmVsLAorCQkJCQkJCQkJCQkgIEpvaW5UeXBlIGpvaW50eXBlLAor CQkJCQkJCQkJCQkgIEpvaW5QYXRoRXh0cmFEYXRhICpleHRyYSk7CiAvKgogICogZXF1aXZj bGFzcy5jCiAgKgkgIHJvdXRpbmVzIGZvciBtYW5hZ2luZyBFcXVpdmFsZW5jZUNsYXNzZXMK ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0aW9uX2pvaW4u b3V0IGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKaW5k ZXggMjdmNzUyNWIzZS4uNzUzYjNkZTQ3ZiAxMDA2NDQKLS0tIGEvc3JjL3Rlc3QvcmVncmVz cy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9l eHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQKQEAgLTIzMjAsNiArMjMyMCwzMzggQEAgU0VM RUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxX2FkdiB0MSBJTk5FUiBKT0lO IHBydDJfYWR2IHQyIE9OICh0MS5hID0KICAzNzUgfCAwMzc1IHwgMzc1IHwgMDM3NQogKDgg cm93cykKIAorLS0KKy0tIEZvciBhc3ltbWV0cmljIHBhcnRpdGlvbi13aXNlIGpvaW4KKy0t CitDUkVBVEUgVEFCTEUgcHJ0NSAoaGtleSBpbnQsIGEgaW50LCBiIGludCkgUEFSVElUSU9O IEJZIEhBU0goaGtleSk7CitDUkVBVEUgVEFCTEUgcHJ0NV9wMCBQQVJUSVRJT04gT0YgcHJ0 NQorICAgICAgICAgICAgICAgICAgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDMsIHJl bWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnQ1X3AxIFBBUlRJVElPTiBPRiBwcnQ1Cisg ICAgICAgICAgICAgICAgICAgICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMywgcmVtYWlu ZGVyIDEpOworQ1JFQVRFIFRBQkxFIHBydDVfcDIgUEFSVElUSU9OIE9GIHBydDUKKyAgICAg ICAgICAgICAgICAgICAgIEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAzLCByZW1haW5kZXIg Mik7CitDUkVBVEUgVEFCTEUgcHJ0NiAoYWlkIGludCwgYWxhYmVsIHRleHQpIFBBUlRJVElP TiBCWSBIQVNIKGFpZCk7CitDUkVBVEUgVEFCTEUgcHJ0Nl9wMCBQQVJUSVRJT04gT0YgcHJ0 NgorICAgICAgICAgICAgICAgICAgICAgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJl bWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnQ2X3AxIFBBUlRJVElPTiBPRiBwcnQ2Cisg ICAgICAgICAgICAgICAgICAgICBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWlu ZGVyIDEpOworQ1JFQVRFIFRBQkxFIHQ1XzEgKGFpZCBpbnQsIGFsYWJlbCB0ZXh0KTsKK0NS RUFURSBUQUJMRSB0NV8yIChiaWQgaW50LCBibGFiZWwgdGV4dCk7CitJTlNFUlQgSU5UTyBw cnQ1IChTRUxFQ1QgeCwgKHggJSAxMDAwKTo6aW50LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICgoeCsxKSAlIDEwMDApOjppbnQKKyAgICAgICAgICAgICAgICAgICAgRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxMDAwMDAwKSB4KTsKK0lOU0VSVCBJTlRPIHQ1XzEgKFNFTEVD VCB4LCBtZDUoeDo6dGV4dCkgRlJPTSBnZW5lcmF0ZV9zZXJpZXMoLTIwMCwgODAwKSB4KTsK K0lOU0VSVCBJTlRPIHQ1XzIgKFNFTEVDVCB4LCBtZDUoeDo6dGV4dCkgRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoLTIwMCwgODAwKSB4KTsKK0lOU0VSVCBJTlRPIHBydDYgKFNFTEVDVCAqIEZS T00gdDVfMSk7CitWQUNVVU0gQU5BTFlaRSBwcnQ1LHBydDYsdDVfMSx0NV8yOworU0VUIG1h eF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIgPSAwOworLS0gVHJpdmlhbCBhc3ltbWV0 cmljIEpPSU4gb2YgcGFydGl0aW9uZWQgdGFibGUgd2l0aCBhIHJlbGF0aW9uCitFWFBMQUlO IChDT1NUUyBPRkYpCitTRUxFQ1QgKgorICBGUk9NIHBydDUgSk9JTiB0NV8xIE9OIGEgPSBh aWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisgICAgICAgICAgICAgICAgICAgICAgUVVF UlkgUExBTiAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCisgQXBwZW5kCisgICAtPiAgSGFz aCBKb2luCisgICAgICAgICBIYXNoIENvbmQ6IChwcnQ1XzEuYSA9IHQ1XzEuYWlkKQorICAg ICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDVfcDAgcHJ0NV8xCisgICAgICAgICAtPiAgSGFz aAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ1XzEKKyAgICAgICAgICAgICAg ICAgICAgIEZpbHRlcjogKGFsYWJlbCB+fiAnJWFiYyUnOjp0ZXh0KQorICAgLT4gIEhhc2gg Sm9pbgorICAgICAgICAgSGFzaCBDb25kOiAocHJ0NV8yLmEgPSB0NV8xLmFpZCkKKyAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ1X3AxIHBydDVfMgorICAgICAgICAgLT4gIEhhc2gK KyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0NV8xCisgICAgICAgICAgICAgICAg ICAgICBGaWx0ZXI6IChhbGFiZWwgfn4gJyVhYmMlJzo6dGV4dCkKKyAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHBydDVfMy5hID0gdDVfMS5haWQpCisgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0NV9wMiBwcnQ1XzMKKyAgICAgICAgIC0+ICBIYXNoCisg ICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDVfMQorICAgICAgICAgICAgICAgICAg ICAgRmlsdGVyOiAoYWxhYmVsIH5+ICclYWJjJSc6OnRleHQpCisoMTkgcm93cykKKworLS0g VGhlIHNhbWUsIGJ1dCBhcHBlbmRlZCB3aXRoIFVOSU9OIEFMTAorRVhQTEFJTiAoQ09TVFMg T0ZGKQorU0VMRUNUICogRlJPTSAoCisJKFNFTEVDVCAqIEZST00gcHJ0NV9wMCkKKwlVTklP TiBBTEwKKwkoU0VMRUNUICogRlJPTSBwcnQ1X3AxKQorCVVOSU9OIEFMTAorCShTRUxFQ1Qg KiBGUk9NIHBydDVfcDIpCisJKSBBUyBzcTEKK0pPSU4gdDVfMSBPTiBhID0gYWlkIEFORCBh bGFiZWwgbGlrZSAnJWFiYyUnOworICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4g ICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgSGFzaCBDb25kOiAocHJ0NV9wMC5hID0gdDVfMS5haWQpCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0NV9wMAorICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiB0NV8xCisgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6 IChhbGFiZWwgfn4gJyVhYmMlJzo6dGV4dCkKKyAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg IEhhc2ggQ29uZDogKHBydDVfcDEuYSA9IHQ1XzEuYWlkKQorICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHBydDVfcDEKKyAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAtPiAg U2VxIFNjYW4gb24gdDVfMQorICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYWxhYmVs IH5+ICclYWJjJSc6OnRleHQpCisgICAtPiAgSGFzaCBKb2luCisgICAgICAgICBIYXNoIENv bmQ6IChwcnQ1X3AyLmEgPSB0NV8xLmFpZCkKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw cnQ1X3AyCisgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2Fu IG9uIHQ1XzEKKyAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGFsYWJlbCB+fiAnJWFi YyUnOjp0ZXh0KQorKDE5IHJvd3MpCisKKy0tIERvbid0IGFsbG93IGFzeW1tZXRyaWMgSk9J TiBvZiB0d28gcGFydGl0aW9uZWQgdGFibGVzLgorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VM RUNUIGNvdW50KCopIEZST00gcHJ0NSBKT0lOIHBydDYgT04gYSA9IGFpZCBBTkQgYWxhYmVs IGxpa2UgJyVhYmMlJzsKKyAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFOICAg ICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBZ2dyZWdhdGUKKyAgIC0+ICBI YXNoIEpvaW4KKyAgICAgICAgIEhhc2ggQ29uZDogKHBydDUuYSA9IHBydDYuYWlkKQorICAg ICAgICAgLT4gIEFwcGVuZAorICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDVf cDAgcHJ0NV8xCisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0NV9wMSBwcnQ1 XzIKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ1X3AyIHBydDVfMworICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAgICAg ICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ2X3AwIHBydDZfMQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgRmlsdGVyOiAoYWxhYmVsIH5+ICclYWJjJSc6OnRleHQpCisgICAg ICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0Nl9wMSBwcnQ2XzIKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGFsYWJlbCB+fiAnJWFiYyUnOjp0ZXh0 KQorKDEzIHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBydDUgSk9JTiBwcnQ2IE9O IGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisgY291bnQgCistLS0tLS0tCisg IDQwMDAKKygxIHJvdykKKworLS0gQ2hlY2sgYXN5bW1ldHJpYyBKT0lOIHdpdGggU3VicXVl cnkKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKSBGUk9NIHBydDUgSk9J TiAoCisJU0VMRUNUICogRlJPTSBwcnQ2IExJTUlUIDEwMDAKKykgQVMgc3ExIE9OIGEgPSBh aWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCistLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tCisgQWdncmVnYXRlCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgSGFz aCBKb2luCisgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwcnQ1XzEuYSA9IHNxMS5haWQp CisgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0NV9wMCBwcnQ1XzEKKyAgICAg ICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiBzcTEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHNxMS5h bGFiZWwgfn4gJyVhYmMlJzo6dGV4dCkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBMaW1pdAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHBydDZfcDAgcHJ0Nl8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAtPiAgU2VxIFNjYW4gb24gcHJ0Nl9wMSBwcnQ2XzIKKyAgICAgICAgIC0+ICBIYXNoIEpv aW4KKyAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHBydDVfMi5hID0gc3ExLmFpZCkKKyAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ1X3AxIHBydDVfMgorICAgICAgICAg ICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTdWJxdWVyeSBTY2Fu IG9uIHNxMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoc3ExLmFsYWJl bCB+fiAnJWFiYyUnOjp0ZXh0KQorICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIExp bWl0CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgQXBwZW5kCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 Nl9wMCBwcnQ2XzQKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwcnQ2X3AxIHBydDZfNQorICAgICAgICAgLT4gIEhhc2ggSm9pbgor ICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHJ0NV8zLmEgPSBzcTEuYWlkKQorICAgICAg ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDVfcDIgcHJ0NV8zCisgICAgICAgICAgICAg ICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFN1YnF1ZXJ5IFNjYW4gb24g c3ExCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChzcTEuYWxhYmVsIH5+ ICclYWJjJSc6OnRleHQpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgTGltaXQK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBBcHBlbmQKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ2X3Aw IHBydDZfNworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHBydDZfcDEgcHJ0Nl84CisoMzIgcm93cykKKworU0VMRUNUIGNvdW50KCop IEZST00gcHJ0NSBKT0lOIChTRUxFQ1QgKiBGUk9NIHBydDYgTElNSVQgMTAwMCkgQVMgc3Ex CisJT04gYSA9IGFpZCBBTkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsKKyBjb3VudCAKKy0tLS0t LS0KKyAgNDAwMAorKDEgcm93KQorCistLSBBc3ltbWV0cmljIEpPSU4gb2YgdHdvIHBsYW5l IHRhYmxlcyBhbmQgb25lIHBhcnRpdGlvbmVkCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxF Q1QgY291bnQoKikKKyAgRlJPTSBwcnQ1IEpPSU4gdDVfMSBPTiBhID0gYWlkIEFORCBhbGFi ZWwgbGlrZSAnJWFiJScKKyAgICAgICAgICAgIEpPSU4gdDVfMiBPTiBiID0gYmlkIEFORCBi bGFiZWwgbGlrZSAnJWNkJSc7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkg UExBTiAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorIEFnZ3Jl Z2F0ZQorICAgLT4gIEFwcGVuZAorICAgICAgICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAg ICAgICAgSGFzaCBDb25kOiAocHJ0NV8xLmEgPSB0NV8xLmFpZCkKKyAgICAgICAgICAgICAg IC0+ICBIYXNoIEpvaW4KKyAgICAgICAgICAgICAgICAgICAgIEhhc2ggQ29uZDogKHBydDVf MS5iID0gdDVfMi5iaWQpCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24g cHJ0NV9wMCBwcnQ1XzEKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gdDVfMgorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYmxhYmVsIH5+ICclY2QlJzo6dGV4dCkK KyAgICAgICAgICAgICAgIC0+ICBIYXNoCisgICAgICAgICAgICAgICAgICAgICAtPiAgU2Vx IFNjYW4gb24gdDVfMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgRmlsdGVyOiAoYWxh YmVsIH5+ICclYWIlJzo6dGV4dCkKKyAgICAgICAgIC0+ICBIYXNoIEpvaW4KKyAgICAgICAg ICAgICAgIEhhc2ggQ29uZDogKHBydDVfMi5hID0gdDVfMS5haWQpCisgICAgICAgICAgICAg ICAtPiAgSGFzaCBKb2luCisgICAgICAgICAgICAgICAgICAgICBIYXNoIENvbmQ6IChwcnQ1 XzIuYiA9IHQ1XzIuYmlkKQorICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9u IHBydDVfcDEgcHJ0NV8yCisgICAgICAgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ1XzIKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGJsYWJlbCB+fiAnJWNkJSc6OnRleHQp CisgICAgICAgICAgICAgICAtPiAgSGFzaAorICAgICAgICAgICAgICAgICAgICAgLT4gIFNl cSBTY2FuIG9uIHQ1XzEKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKGFs YWJlbCB+fiAnJWFiJSc6OnRleHQpCisgICAgICAgICAtPiAgSGFzaCBKb2luCisgICAgICAg ICAgICAgICBIYXNoIENvbmQ6IChwcnQ1XzMuYSA9IHQ1XzEuYWlkKQorICAgICAgICAgICAg ICAgLT4gIEhhc2ggSm9pbgorICAgICAgICAgICAgICAgICAgICAgSGFzaCBDb25kOiAocHJ0 NV8zLmIgPSB0NV8yLmJpZCkKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBv biBwcnQ1X3AyIHBydDVfMworICAgICAgICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiB0NV8yCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChibGFiZWwgfn4gJyVjZCUnOjp0ZXh0 KQorICAgICAgICAgICAgICAgLT4gIEhhc2gKKyAgICAgICAgICAgICAgICAgICAgIC0+ICBT ZXEgU2NhbiBvbiB0NV8xCisgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6IChh bGFiZWwgfn4gJyVhYiUnOjp0ZXh0KQorKDM1IHJvd3MpCisKK1NFTEVDVCBjb3VudCgqKQor ICBGUk9NIHBydDUgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWIl JworICAgICAgICAgICAgSk9JTiB0NV8yIE9OIGIgPSBiaWQgQU5EIGJsYWJlbCBsaWtlICcl Y2QlJzsKKyBjb3VudCAKKy0tLS0tLS0KKyAxMDAwMAorKDEgcm93KQorCistLSB1bmFibGUg dG8gZXh0cmFjdCBub24tcGFydGl0aW9uZWQgcmlnaHQgcmVsYXRpb24KK0VYUExBSU4gKENP U1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHJ0NSBSSUdIVCBKT0lOIHQ1XzEgT04gYSA9IGFp ZCBBTkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsKKyAgICAgICAgICAgICAgICAgIFFVRVJZIFBM QU4gICAgICAgICAgICAgICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLQorIEhhc2ggUmlnaHQgSm9pbgorICAgSGFzaCBDb25kOiAocHJ0 NS5hID0gdDVfMS5haWQpCisgICBKb2luIEZpbHRlcjogKHQ1XzEuYWxhYmVsIH5+ICclYWJj JSc6OnRleHQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHJ0 NV9wMCBwcnQ1XzEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ1X3AxIHBydDVfMgor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDVfcDIgcHJ0NV8zCisgICAtPiAgSGFzaAor ICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ1XzEKKyg5IHJvd3MpCisKKy0tIGxlZnQgc2lk ZSBjYW4gYmUgZXh0cmFjdGVkLCBidXQgbm8gY29zdCBiZW5lZml0CitFWFBMQUlOIChDT1NU UyBPRkYpCitTRUxFQ1QgKiBGUk9NIHBydDUgTEVGVCBKT0lOIHQ1XzEgT04gYSA9IGFpZCBB TkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsKKyAgICAgICAgICAgICAgICAgICBRVUVSWSBQTEFO ICAgICAgICAgICAgICAgICAgICAKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KKyBIYXNoIExlZnQgSm9pbgorICAgSGFzaCBDb25kOiAocHJ0 NS5hID0gdDVfMS5haWQpCisgICAtPiAgQXBwZW5kCisgICAgICAgICAtPiAgU2VxIFNjYW4g b24gcHJ0NV9wMCBwcnQ1XzEKKyAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnQ1X3AxIHBy dDVfMgorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHBydDVfcDIgcHJ0NV8zCisgICAtPiAg SGFzaAorICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHQ1XzEKKyAgICAgICAgICAgICAgIEZp bHRlcjogKGFsYWJlbCB+fiAnJWFiYyUnOjp0ZXh0KQorKDkgcm93cykKKworU0VUIGVuYWJs ZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBvbjsKKy0tIHZhbGlkYXRpb24gb2YgdGhlIHJlc3Vs dHMgd2l0aC93aXRob3V0IGFzeW1tZXRyaWMgcGFydGl0aW9uLXdpc2Ugam9pbgorU0VMRUNU ICogSU5UTyBwZ190ZW1wLnJlc3VsdDAxYQorICBGUk9NIHBydDUgSk9JTiB0NV8xIE9OIGEg PSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CitTRUxFQ1QgKiBJTlRPIHBnX3RlbXAu cmVzdWx0MDJhCisgIEZST00gcHJ0NSBKT0lOIHQ1XzEgT04gYSA9IGFpZCBBTkQgYWxhYmVs IGxpa2UgJyVhYiUnCisgICAgICAgICAgICBKT0lOIHQ1XzIgT04gYiA9IGJpZCBBTkQgYmxh YmVsIGxpa2UgJyVjZCUnOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSBvZmY7 CitTRUxFQ1QgKiBJTlRPIHBnX3RlbXAucmVzdWx0MDFiCisgIEZST00gcHJ0NSBKT0lOIHQ1 XzEgT04gYSA9IGFpZCBBTkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsKK1NFTEVDVCAqIElOVE8g cGdfdGVtcC5yZXN1bHQwMmIKKyAgRlJPTSBwcnQ1IEpPSU4gdDVfMSBPTiBhID0gYWlkIEFO RCBhbGFiZWwgbGlrZSAnJWFiJScKKyAgICAgICAgICAgIEpPSU4gdDVfMiBPTiBiID0gYmlk IEFORCBibGFiZWwgbGlrZSAnJWNkJSc7CitTRUxFQ1QgKiBGUk9NIHBnX3RlbXAucmVzdWx0 MDFhIEVYQ0VQVCBTRUxFQ1QgKiBGUk9NIHBnX3RlbXAucmVzdWx0MDFiOworIGhrZXkgfCBh IHwgYiB8IGFpZCB8IGFsYWJlbCAKKy0tLS0tLSstLS0rLS0tKy0tLS0tKy0tLS0tLS0tCiso MCByb3dzKQorCitTRUxFQ1QgKiBGUk9NIHBnX3RlbXAucmVzdWx0MDJhIEVYQ0VQVCBTRUxF Q1QgKiBGUk9NIHBnX3RlbXAucmVzdWx0MDJiOworIGhrZXkgfCBhIHwgYiB8IGFpZCB8IGFs YWJlbCB8IGJpZCB8IGJsYWJlbCAKKy0tLS0tLSstLS0rLS0tKy0tLS0tKy0tLS0tLS0tKy0t LS0tKy0tLS0tLS0tCisoMCByb3dzKQorCitSRVNFVCBtYXhfcGFyYWxsZWxfd29ya2Vyc19w ZXJfZ2F0aGVyOworU0VUIGVuYWJsZV9wYXJ0aXRpb253aXNlX2pvaW4gPSB0cnVlOworLS0g UGFyYW1ldGVyaXplZCBwYXRoIGV4YW1wbGVzLgorQ1JFQVRFIFRBQkxFIHBydGEgKGlkIGlu dGVnZXIsIHBheWxvYWQgdGV4dCkgUEFSVElUSU9OIEJZIEhBU0ggKGlkKTsKK0NSRUFURSBU QUJMRSBwcnRhMSBQQVJUSVRJT04gT0YgcHJ0YSBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMg MiwgcmVtYWluZGVyIDApOworQ1JFQVRFIFRBQkxFIHBydGEyIFBBUlRJVElPTiBPRiBwcnRh IEZPUiBWQUxVRVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMSk7CitDUkVBVEUgVU5J UVVFIElOREVYIE9OIHBydGExIChpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIHBydGEy IChpZCk7CitJTlNFUlQgSU5UTyBwcnRhIChpZCwgcGF5bG9hZCkKKwkoU0VMRUNUICosICgn YWJjJyB8fCBpZCk6OnRleHQgQVMgcGF5bG9hZAorCQlGUk9NIGdlbmVyYXRlX3Nlcmllcygx LDEpIEFTIGlkKTsKK0NSRUFURSBUQUJMRSBwcnRiIChpZCBpbnRlZ2VyLCBwYXlsb2FkIHRl eHQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitDUkVBVEUgVEFCTEUgcHJ0YjEgUEFSVElU SU9OIE9GIHBydGIgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsK K0NSRUFURSBUQUJMRSBwcnRiMiBQQVJUSVRJT04gT0YgcHJ0YiBGT1IgVkFMVUVTIFdJVEgg KG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBwcnRi MSAoaWQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBwcnRiMiAoaWQpOworSU5TRVJUIElO VE8gcHJ0YiAoaWQsIHBheWxvYWQpCisgICAgKFNFTEVDVCAqLCAoJ2RlZicgfHwgaWQpOjp0 ZXh0IEFTIHBheWxvYWQKKwkJRlJPTSBnZW5lcmF0ZV9zZXJpZXMoMSwxMDAwKSBBUyBpZCk7 CitDUkVBVEUgVEFCTEUgZSAoaWQgaW50ZWdlciwgcGF5bG9hZCB0ZXh0KSBQQVJUSVRJT04g QlkgSEFTSCAoaWQpOworQ1JFQVRFIFRBQkxFIGUxIFBBUlRJVElPTiBPRiBlIEZPUiBWQUxV RVMgV0lUSCAobW9kdWx1cyAyLCByZW1haW5kZXIgMCk7CitDUkVBVEUgVEFCTEUgZTIgUEFS VElUSU9OIE9GIGUgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAxKTsK K0lOU0VSVCBJTlRPIGUgKGlkLCBwYXlsb2FkKQorCShTRUxFQ1QgKiwgKCdnaGknIHx8IGlk KTo6dGV4dCBBUyBwYXlsb2FkCisJCUZST00gZ2VuZXJhdGVfc2VyaWVzKDEsMTAwMCkgQVMg aWQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBlMSAoaWQpOworQ1JFQVRFIFVOSVFVRSBJ TkRFWCBPTiBlMiAoaWQpOworQU5BTFlaRSBwcnRhLHBydGIsZTsKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gcHJ0YSxwcnRiIFdIRVJFIHBydGEuaWQ9cHJ0Yi5pZDsK KyAgICAgICAgICAgICAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAgICAgICAgICAgICAg ICAgICAgCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLQorIEFwcGVuZAorICAgLT4gIE5lc3RlZCBMb29wCisgICAgICAgICAt PiAgU2VxIFNjYW4gb24gcHJ0YTEgcHJ0YV8xCisgICAgICAgICAtPiAgSW5kZXggU2NhbiB1 c2luZyBwcnRiMV9pZF9pZHggb24gcHJ0YjEgcHJ0Yl8xCisgICAgICAgICAgICAgICBJbmRl eCBDb25kOiAoaWQgPSBwcnRhXzEuaWQpCisgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAg IC0+ICBTZXEgU2NhbiBvbiBwcnRhMiBwcnRhXzIKKyAgICAgICAgIC0+ICBJbmRleCBTY2Fu IHVzaW5nIHBydGIyX2lkX2lkeCBvbiBwcnRiMiBwcnRiXzIKKyAgICAgICAgICAgICAgIElu ZGV4IENvbmQ6IChpZCA9IHBydGFfMi5pZCkKKyg5IHJvd3MpCisKK0VYUExBSU4gKENPU1RT IE9GRikKK1NFTEVDVCAqIEZST00gcHJ0YSxwcnRiLGUgV0hFUkUgcHJ0YS5pZD1wcnRiLmlk IEFORCBwcnRhLmlkPWUuaWQ7CisgICAgICAgICAgICAgICAgICAgICAgICAgICBRVUVSWSBQ TEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgIAorLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyBBcHBlbmQK KyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAgSm9pbiBGaWx0ZXI6IChwcnRhXzEuaWQg PSBlXzEuaWQpCisgICAgICAgICAtPiAgTmVzdGVkIExvb3AKKyAgICAgICAgICAgICAgIC0+ ICBTZXEgU2NhbiBvbiBwcnRhMSBwcnRhXzEKKyAgICAgICAgICAgICAgIC0+ICBJbmRleCBT Y2FuIHVzaW5nIHBydGIxX2lkX2lkeCBvbiBwcnRiMSBwcnRiXzEKKyAgICAgICAgICAgICAg ICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHBydGFfMS5pZCkKKyAgICAgICAgIC0+ICBJbmRl eCBTY2FuIHVzaW5nIGUxX2lkX2lkeCBvbiBlMSBlXzEKKyAgICAgICAgICAgICAgIEluZGV4 IENvbmQ6IChpZCA9IHBydGJfMS5pZCkKKyAgIC0+ICBOZXN0ZWQgTG9vcAorICAgICAgICAg Sm9pbiBGaWx0ZXI6IChwcnRhXzIuaWQgPSBlXzIuaWQpCisgICAgICAgICAtPiAgTmVzdGVk IExvb3AKKyAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwcnRhMiBwcnRhXzIKKyAg ICAgICAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIHBydGIyX2lkX2lkeCBvbiBwcnRi MiBwcnRiXzIKKyAgICAgICAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHBydGFf Mi5pZCkKKyAgICAgICAgIC0+ICBJbmRleCBTY2FuIHVzaW5nIGUyX2lkX2lkeCBvbiBlMiBl XzIKKyAgICAgICAgICAgICAgIEluZGV4IENvbmQ6IChpZCA9IHBydGJfMi5pZCkKKygxNyBy b3dzKQorCiAtLSBzZW1pIGpvaW4KIEVYUExBSU4gKENPU1RTIE9GRikKIFNFTEVDVCB0MS4q IEZST00gcHJ0MV9hZHYgdDEgV0hFUkUgRVhJU1RTIChTRUxFQ1QgMSBGUk9NIHBydDJfYWR2 IHQyIFdIRVJFIHQxLmEgPSB0Mi5iKSBBTkQgdDEuYiA9IDAgT1JERVIgQlkgdDEuYTsKZGlm ZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9qb2luLnNxbCBiL3Ny Yy90ZXN0L3JlZ3Jlc3Mvc3FsL3BhcnRpdGlvbl9qb2luLnNxbAppbmRleCBkOTdiNWI2OWZm Li5hY2E3Zjg4NWEzIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL3NxbC9wYXJ0aXRp b25fam9pbi5zcWwKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9zcWwvcGFydGl0aW9uX2pvaW4u c3FsCkBAIC01MzYsNiArNTM2LDEzOSBAQCBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1Qg dDEuYSwgdDEuYywgdDIuYiwgdDIuYyBGUk9NIHBydDFfYWR2IHQxIElOTkVSIEpPSU4gcHJ0 Ml9hZHYgdDIgT04gKHQxLmEgPSB0Mi5iKSBXSEVSRSB0MS5iID0gMCBPUkRFUiBCWSB0MS5h LCB0Mi5iOwogU0VMRUNUIHQxLmEsIHQxLmMsIHQyLmIsIHQyLmMgRlJPTSBwcnQxX2FkdiB0 MSBJTk5FUiBKT0lOIHBydDJfYWR2IHQyIE9OICh0MS5hID0gdDIuYikgV0hFUkUgdDEuYiA9 IDAgT1JERVIgQlkgdDEuYSwgdDIuYjsKIAorLS0KKy0tIEZvciBhc3ltbWV0cmljIHBhcnRp dGlvbi13aXNlIGpvaW4KKy0tCitDUkVBVEUgVEFCTEUgcHJ0NSAoaGtleSBpbnQsIGEgaW50 LCBiIGludCkgUEFSVElUSU9OIEJZIEhBU0goaGtleSk7CitDUkVBVEUgVEFCTEUgcHJ0NV9w MCBQQVJUSVRJT04gT0YgcHJ0NQorICAgICAgICAgICAgICAgICAgICAgRk9SIFZBTFVFUyBX SVRIIChtb2R1bHVzIDMsIHJlbWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnQ1X3AxIFBB UlRJVElPTiBPRiBwcnQ1CisgICAgICAgICAgICAgICAgICAgICBGT1IgVkFMVUVTIFdJVEgg KG1vZHVsdXMgMywgcmVtYWluZGVyIDEpOworQ1JFQVRFIFRBQkxFIHBydDVfcDIgUEFSVElU SU9OIE9GIHBydDUKKyAgICAgICAgICAgICAgICAgICAgIEZPUiBWQUxVRVMgV0lUSCAobW9k dWx1cyAzLCByZW1haW5kZXIgMik7CitDUkVBVEUgVEFCTEUgcHJ0NiAoYWlkIGludCwgYWxh YmVsIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIKGFpZCk7CitDUkVBVEUgVEFCTEUgcHJ0Nl9w MCBQQVJUSVRJT04gT0YgcHJ0NgorICAgICAgICAgICAgICAgICAgICAgRk9SIFZBTFVFUyBX SVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnQ2X3AxIFBB UlRJVElPTiBPRiBwcnQ2CisgICAgICAgICAgICAgICAgICAgICBGT1IgVkFMVUVTIFdJVEgg KG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOworQ1JFQVRFIFRBQkxFIHQ1XzEgKGFpZCBpbnQs IGFsYWJlbCB0ZXh0KTsKK0NSRUFURSBUQUJMRSB0NV8yIChiaWQgaW50LCBibGFiZWwgdGV4 dCk7CisKK0lOU0VSVCBJTlRPIHBydDUgKFNFTEVDVCB4LCAoeCAlIDEwMDApOjppbnQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgKCh4KzEpICUgMTAwMCk6OmludAorICAgICAg ICAgICAgICAgICAgICBGUk9NIGdlbmVyYXRlX3NlcmllcygxLDEwMDAwMDApIHgpOworSU5T RVJUIElOVE8gdDVfMSAoU0VMRUNUIHgsIG1kNSh4Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3Nl cmllcygtMjAwLCA4MDApIHgpOworSU5TRVJUIElOVE8gdDVfMiAoU0VMRUNUIHgsIG1kNSh4 Ojp0ZXh0KSBGUk9NIGdlbmVyYXRlX3NlcmllcygtMjAwLCA4MDApIHgpOworSU5TRVJUIElO VE8gcHJ0NiAoU0VMRUNUICogRlJPTSB0NV8xKTsKKworVkFDVVVNIEFOQUxZWkUgcHJ0NSxw cnQ2LHQ1XzEsdDVfMjsKKworU0VUIG1heF9wYXJhbGxlbF93b3JrZXJzX3Blcl9nYXRoZXIg PSAwOworCistLSBUcml2aWFsIGFzeW1tZXRyaWMgSk9JTiBvZiBwYXJ0aXRpb25lZCB0YWJs ZSB3aXRoIGEgcmVsYXRpb24KK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqCisgIEZS T00gcHJ0NSBKT0lOIHQ1XzEgT04gYSA9IGFpZCBBTkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsK KworLS0gVGhlIHNhbWUsIGJ1dCBhcHBlbmRlZCB3aXRoIFVOSU9OIEFMTAorRVhQTEFJTiAo Q09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSAoCisJKFNFTEVDVCAqIEZST00gcHJ0NV9wMCkK KwlVTklPTiBBTEwKKwkoU0VMRUNUICogRlJPTSBwcnQ1X3AxKQorCVVOSU9OIEFMTAorCShT RUxFQ1QgKiBGUk9NIHBydDVfcDIpCisJKSBBUyBzcTEKK0pPSU4gdDVfMSBPTiBhID0gYWlk IEFORCBhbGFiZWwgbGlrZSAnJWFiYyUnOworCistLSBEb24ndCBhbGxvdyBhc3ltbWV0cmlj IEpPSU4gb2YgdHdvIHBhcnRpdGlvbmVkIHRhYmxlcy4KK0VYUExBSU4gKENPU1RTIE9GRikK K1NFTEVDVCBjb3VudCgqKSBGUk9NIHBydDUgSk9JTiBwcnQ2IE9OIGEgPSBhaWQgQU5EIGFs YWJlbCBsaWtlICclYWJjJSc7CitTRUxFQ1QgY291bnQoKikgRlJPTSBwcnQ1IEpPSU4gcHJ0 NiBPTiBhID0gYWlkIEFORCBhbGFiZWwgbGlrZSAnJWFiYyUnOworCistLSBDaGVjayBhc3lt bWV0cmljIEpPSU4gd2l0aCBTdWJxdWVyeQorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU IGNvdW50KCopIEZST00gcHJ0NSBKT0lOICgKKwlTRUxFQ1QgKiBGUk9NIHBydDYgTElNSVQg MTAwMAorKSBBUyBzcTEgT04gYSA9IGFpZCBBTkQgYWxhYmVsIGxpa2UgJyVhYmMlJzsKK1NF TEVDVCBjb3VudCgqKSBGUk9NIHBydDUgSk9JTiAoU0VMRUNUICogRlJPTSBwcnQ2IExJTUlU IDEwMDApIEFTIHNxMQorCU9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisK Ky0tIEFzeW1tZXRyaWMgSk9JTiBvZiB0d28gcGxhbmUgdGFibGVzIGFuZCBvbmUgcGFydGl0 aW9uZWQKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCBjb3VudCgqKQorICBGUk9NIHBy dDUgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWIlJworICAgICAg ICAgICAgSk9JTiB0NV8yIE9OIGIgPSBiaWQgQU5EIGJsYWJlbCBsaWtlICclY2QlJzsKK1NF TEVDVCBjb3VudCgqKQorICBGUk9NIHBydDUgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFs YWJlbCBsaWtlICclYWIlJworICAgICAgICAgICAgSk9JTiB0NV8yIE9OIGIgPSBiaWQgQU5E IGJsYWJlbCBsaWtlICclY2QlJzsKKworLS0gdW5hYmxlIHRvIGV4dHJhY3Qgbm9uLXBhcnRp dGlvbmVkIHJpZ2h0IHJlbGF0aW9uCitFWFBMQUlOIChDT1NUUyBPRkYpCitTRUxFQ1QgKiBG Uk9NIHBydDUgUklHSFQgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICcl YWJjJSc7CistLSBsZWZ0IHNpZGUgY2FuIGJlIGV4dHJhY3RlZCwgYnV0IG5vIGNvc3QgYmVu ZWZpdAorRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNUICogRlJPTSBwcnQ1IExFRlQgSk9J TiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisKKy0tIHZhbGlk YXRpb24gb2YgdGhlIHJlc3VsdHMgd2l0aC93aXRob3V0IGFzeW1tZXRyaWMgcGFydGl0aW9u LXdpc2Ugam9pbgorU0VMRUNUICogSU5UTyBwZ190ZW1wLnJlc3VsdDAxYQorICBGUk9NIHBy dDUgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWJjJSc7CisKK1NF TEVDVCAqIElOVE8gcGdfdGVtcC5yZXN1bHQwMmEKKyAgRlJPTSBwcnQ1IEpPSU4gdDVfMSBP TiBhID0gYWlkIEFORCBhbGFiZWwgbGlrZSAnJWFiJScKKyAgICAgICAgICAgIEpPSU4gdDVf MiBPTiBiID0gYmlkIEFORCBibGFiZWwgbGlrZSAnJWNkJSc7CisKK1NFVCBlbmFibGVfcGFy dGl0aW9ud2lzZV9qb2luID0gb2ZmOworCitTRUxFQ1QgKiBJTlRPIHBnX3RlbXAucmVzdWx0 MDFiCisgIEZST00gcHJ0NSBKT0lOIHQ1XzEgT04gYSA9IGFpZCBBTkQgYWxhYmVsIGxpa2Ug JyVhYmMlJzsKKworU0VMRUNUICogSU5UTyBwZ190ZW1wLnJlc3VsdDAyYgorICBGUk9NIHBy dDUgSk9JTiB0NV8xIE9OIGEgPSBhaWQgQU5EIGFsYWJlbCBsaWtlICclYWIlJworICAgICAg ICAgICAgSk9JTiB0NV8yIE9OIGIgPSBiaWQgQU5EIGJsYWJlbCBsaWtlICclY2QlJzsKKwor U0VMRUNUICogRlJPTSBwZ190ZW1wLnJlc3VsdDAxYSBFWENFUFQgU0VMRUNUICogRlJPTSBw Z190ZW1wLnJlc3VsdDAxYjsKK1NFTEVDVCAqIEZST00gcGdfdGVtcC5yZXN1bHQwMmEgRVhD RVBUIFNFTEVDVCAqIEZST00gcGdfdGVtcC5yZXN1bHQwMmI7CisKK1JFU0VUIG1heF9wYXJh bGxlbF93b3JrZXJzX3Blcl9nYXRoZXI7CitTRVQgZW5hYmxlX3BhcnRpdGlvbndpc2Vfam9p biA9IHRydWU7CisKKy0tIFBhcmFtZXRlcml6ZWQgcGF0aCBleGFtcGxlcy4KK0NSRUFURSBU QUJMRSBwcnRhIChpZCBpbnRlZ2VyLCBwYXlsb2FkIHRleHQpIFBBUlRJVElPTiBCWSBIQVNI IChpZCk7CitDUkVBVEUgVEFCTEUgcHJ0YTEgUEFSVElUSU9OIE9GIHBydGEgRk9SIFZBTFVF UyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnRhMiBQ QVJUSVRJT04gT0YgcHJ0YSBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVy IDEpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBwcnRhMSAoaWQpOworQ1JFQVRFIFVOSVFV RSBJTkRFWCBPTiBwcnRhMiAoaWQpOworSU5TRVJUIElOVE8gcHJ0YSAoaWQsIHBheWxvYWQp CisJKFNFTEVDVCAqLCAoJ2FiYycgfHwgaWQpOjp0ZXh0IEFTIHBheWxvYWQKKwkJRlJPTSBn ZW5lcmF0ZV9zZXJpZXMoMSwxKSBBUyBpZCk7CisKK0NSRUFURSBUQUJMRSBwcnRiIChpZCBp bnRlZ2VyLCBwYXlsb2FkIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitDUkVBVEUg VEFCTEUgcHJ0YjEgUEFSVElUSU9OIE9GIHBydGIgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVz IDIsIHJlbWFpbmRlciAwKTsKK0NSRUFURSBUQUJMRSBwcnRiMiBQQVJUSVRJT04gT0YgcHJ0 YiBGT1IgVkFMVUVTIFdJVEggKG1vZHVsdXMgMiwgcmVtYWluZGVyIDEpOworQ1JFQVRFIFVO SVFVRSBJTkRFWCBPTiBwcnRiMSAoaWQpOworQ1JFQVRFIFVOSVFVRSBJTkRFWCBPTiBwcnRi MiAoaWQpOworSU5TRVJUIElOVE8gcHJ0YiAoaWQsIHBheWxvYWQpCisgICAgKFNFTEVDVCAq LCAoJ2RlZicgfHwgaWQpOjp0ZXh0IEFTIHBheWxvYWQKKwkJRlJPTSBnZW5lcmF0ZV9zZXJp ZXMoMSwxMDAwKSBBUyBpZCk7CisKK0NSRUFURSBUQUJMRSBlIChpZCBpbnRlZ2VyLCBwYXls b2FkIHRleHQpIFBBUlRJVElPTiBCWSBIQVNIIChpZCk7CitDUkVBVEUgVEFCTEUgZTEgUEFS VElUSU9OIE9GIGUgRk9SIFZBTFVFUyBXSVRIIChtb2R1bHVzIDIsIHJlbWFpbmRlciAwKTsK K0NSRUFURSBUQUJMRSBlMiBQQVJUSVRJT04gT0YgZSBGT1IgVkFMVUVTIFdJVEggKG1vZHVs dXMgMiwgcmVtYWluZGVyIDEpOworSU5TRVJUIElOVE8gZSAoaWQsIHBheWxvYWQpCisJKFNF TEVDVCAqLCAoJ2doaScgfHwgaWQpOjp0ZXh0IEFTIHBheWxvYWQKKwkJRlJPTSBnZW5lcmF0 ZV9zZXJpZXMoMSwxMDAwKSBBUyBpZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIGUxIChp ZCk7CitDUkVBVEUgVU5JUVVFIElOREVYIE9OIGUyIChpZCk7CisKK0FOQUxZWkUgcHJ0YSxw cnRiLGU7CisKK0VYUExBSU4gKENPU1RTIE9GRikKK1NFTEVDVCAqIEZST00gcHJ0YSxwcnRi IFdIRVJFIHBydGEuaWQ9cHJ0Yi5pZDsKKworRVhQTEFJTiAoQ09TVFMgT0ZGKQorU0VMRUNU ICogRlJPTSBwcnRhLHBydGIsZSBXSEVSRSBwcnRhLmlkPXBydGIuaWQgQU5EIHBydGEuaWQ9 ZS5pZDsKKwogLS0gc2VtaSBqb2luCiBFWFBMQUlOIChDT1NUUyBPRkYpCiBTRUxFQ1QgdDEu KiBGUk9NIHBydDFfYWR2IHQxIFdIRVJFIEVYSVNUUyAoU0VMRUNUIDEgRlJPTSBwcnQyX2Fk diB0MiBXSEVSRSB0MS5hID0gdDIuYikgQU5EIHQxLmIgPSAwIE9SREVSIEJZIHQxLmE7Ci0t IAoyLjMxLjEKCg== --------------3E36756D3B076A2ADF57AEBF--