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 1vJASO-00D7f5-2T for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 13:00:16 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.96) (envelope-from ) id 1vJASM-00BWVE-1k for pgsql-hackers@arkaria.postgresql.org; Wed, 12 Nov 2025 13:00:14 +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 1vJASL-00BWUr-35 for pgsql-hackers@lists.postgresql.org; Wed, 12 Nov 2025 13:00:14 +0000 Received: from lahtoruutu.iki.fi ([185.185.170.37]) by magus.postgresql.org with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vJASH-007LQ1-1I for pgsql-hackers@lists.postgresql.org; Wed, 12 Nov 2025 13:00:13 +0000 Received: from [10.0.2.15] (unknown [130.41.208.2]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: hlinnaka) by lahtoruutu.iki.fi (Postfix) with ESMTPSA id 4d63Qq2d91z49QBk; Wed, 12 Nov 2025 15:00:03 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1762952404; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Gi+LCr0DytOlAy/mTDj2RfzUx1kxGASZ8qvz+tXLqcM=; b=aDKze2lgwT4fjq18G5zijFqeMOt6bFZkJSllVzgRXtDU/n3HB2gu+FxXVGEu9vGxFGnGRJ w6jqCCj/lgVIvX7aFToSaXeABliKKAJUo5rcNQF93kgUEmbLWD6o53Pi7AofkabZeD1Gvu QB+pVFrxFi+PiNPuQjTgTYPw06AM9MdxmymFclAoi8a4euuV7bimWk0U6YgcE1KrbE87Pi bnqyRqkeA47C9sZHpuSRSvtnYCVBTk7wxV+9piVHGpwLV78iat0rueSchFIUPhU2gBkYWD LQ3cZUGBjHs2SN/5r7xI69GMlXLCZSNmSJINk1236Zfqu3UItGsevOoAPpfrDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=iki.fi; s=lahtoruutu; t=1762952404; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=Gi+LCr0DytOlAy/mTDj2RfzUx1kxGASZ8qvz+tXLqcM=; b=FVFRBCrB++8tYypM/y+QGm5pBQEedQKNbZ6YYuNlWCeZ+kwuOeRkjU/IA2H561KL2eOuR8 SY2/3NTOTN5PBvaigPWtQN88TTMbG42POyHm7FJwbwum/hsfiNFJAZ2C91YSFpK86lg9zz 1xX9nhOqH7p1Z8isB1QHyyZpICHyp7cdnZjNOXLjutlpw/Dfg+Ukw9q//X0FyzNgmmLcmW Fo5nX96SKwAE9bcguh7ogI8GSjyQ6ABCFCHkhJ68n3yPfVWayUSA7qS505fIuq+sv0hnUM Cx2n7Jx5vgLsBGqoMPyGgrc1Mk8QyhgfMXbyMu3Z53XB/wb5b9HOpckNYRpNzw== ARC-Authentication-Results: i=1; ORIGINATING; auth=pass smtp.auth=hlinnaka smtp.mailfrom=hlinnaka@iki.fi ARC-Seal: i=1; a=rsa-sha256; d=iki.fi; s=lahtoruutu; cv=none; t=1762952404; b=LJg2cW0zF+I9bz37rvIgAxabOxVhVV4FWY/SSKrE72OdcfHe7BDq5NL7ARu7pawrCHPO1p 0PLzqZhZ+0v7NA8TRq79WeJuyduSFY6oYx+oCclJe1TL/631C5SQn4HvMFcJFl84xR6IwI V1MABzKQ83IWCNQgTt0vJ1GYkwQUgVLeRiKkB/O5sgrrShC6Lz8+H+UZ5Jnjw08l4J5OOp AH/9MyX9S/LgF38b1E+Zc18ZXNpfxjnmPaHwp7jhUEXcOG+V0bFBpT7KQ82jfFo3WwfXpy Rcy/24X//S7BpiXHqqEt/KuyEtVqcHqvjvbSU7/QgeCarGiLS0xomMslxkKeeg== Content-Type: multipart/mixed; boundary="------------FWgCOM0EMCxqCdHtyKCKm400" Message-ID: <669fa18c-82f9-4f56-86a9-75ba7bc4e7dc@iki.fi> Date: Wed, 12 Nov 2025 15:00:02 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: POC: make mxidoff 64 bits To: Maxim Orlov Cc: wenhui qiu , Alexander Korotkov , Ashutosh Bapat , Postgres hackers References: <0794857c-aaaf-4cd3-bd99-84c6155bb2f6@iki.fi> Content-Language: en-US From: Heikki Linnakangas 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. --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 07/11/2025 18:03, Maxim Orlov wrote: > I tried finding out how long it would take to convert a big number of > segments. Unfortunately, I only have access to a very old machine right > now. It took me 7 hours to generate this much data on my old > Intel(R) Core(TM) i5-6500 CPU @ 3.20GHz with 16 Gb of RAM. > > Here are my rough measurements: > > HDD > $ sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches > $ time pg_upgrade > ... > real    4m59.459s > user    0m19.974s > sys     0m13.640s > > SSD > $ sudo sync && echo 3 | sudo tee /proc/sys/vm/drop_caches > $ time pg_upgrade > ... > real    4m52.958s > user    0m19.826s > sys     0m13.624s > > I aim to get access to more modern stuff and check it all out there. Thanks, I also did some perf testing on my laptop. I wrote a little helper function to consume multixids, and used it to create a v17 cluster with 100 million multixids. See attached consume-mxids.patch.txt. I then ran pg_upgrade on that, and measured how long the pg_multixact conversion part of pg_upgrade took. It took about 1.2 s on my laptop. Extrapolating from that, converting 1 billion multixids would take 12 s. These were very simple multixacts with just one member each, though; realistic multixacts with more members would presumably take a little longer. In any case, I think we're in an acceptable ballpark here. There's some very low-hanging fruit though: Profiling with 'linux-perf' suggested that a lot of CPU time was spent simply on the function call overhead of GetOldMultiXactIdSingleMember, SlruReadSwitchPage, RecordNewMultiXact, SlruWriteSwitchPage for each multixact. I added an inlined fast path to SlruReadSwitchPage and SlruWriteSwitchPage to eliminate the function call overhead of those in the common case that no page switch is needed. With that, the 100 million mxid test case I used went from 1.2 s to 0.9 s. We could optimize this further but I think this is good enough. Some other changes since patch set v23: - Rebased. I committed the wraparound bug fixes. - I added an SlruFileName() helper function to slru_io.c, and support for reading SLRUs with long_segment_names==true. It's not needed currently, but it seemed like a weird omission. AllocSlruRead() actually left 'long_segment_names' uninitialized which is error-prone. We could've just documented it, but it seems just as easy to support it. - I split the multixact_internal.h header in a separate commit, to make it more clear what changes are related to 64-bit offsets I kept all the new test cases for now. We need to decide which ones are worth keeping, and polish and speed up the ones we decide to keep. I'm getting one failure from the pg_upgrade/008_mxoff test: > [14:43:38.422](0.530s) not ok 26 - dump outputs from original and restored regression databases match > [14:43:38.422](0.000s) # Failed test 'dump outputs from original and restored regression databases match' > # at /home/heikki/git-sandbox/postgresql/src/test/perl/PostgreSQL/Test/Utils.pm line 801. > [14:43:38.422](0.000s) # got: '1' > # expected: '0' > === diff of /home/heikki/git-sandbox/postgresql/build/testrun/pg_upgrade/008_mxoff/data/tmp_test_AC6A/oldnode_6_dump.sql_adjusted and /home/heikki/git-sandbox/postgresql/build/testrun/pg_upgrade/008_mxoff/data/tmp_test_AC6A/newnode_6_dump.sql_adjusted > === stdout === > --- /home/heikki/git-sandbox/postgresql/build/testrun/pg_upgrade/008_mxoff/data/tmp_test_AC6A/oldnode_6_dump.sql_adjusted 2025-11-12 14:43:38.030399957 +0200 > +++ /home/heikki/git-sandbox/postgresql/build/testrun/pg_upgrade/008_mxoff/data/tmp_test_AC6A/newnode_6_dump.sql_adjusted 2025-11-12 14:43:38.314399819 +0200 > @@ -2,8 +2,8 @@ > -- PostgreSQL database dump > -- > \restrict test > --- Dumped from database version 17.6 > --- Dumped by pg_dump version 17.6 > +-- Dumped from database version 19devel > +-- Dumped by pg_dump version 19devel > SET statement_timeout = 0; > SET lock_timeout = 0; > SET idle_in_transaction_session_timeout = 0;=== stderr === > === EOF === > [14:43:38.425](0.004s) # >>> case #6 I ran the test with: (rm -rf build/testrun/ build/tmp_install/; olddump=/tmp/olddump-regress.sql oldinstall=/home/heikki/pgsql.17stable/ meson test -C build --suite setup --suite pg_upgrade) - Heikki --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/plain; charset=UTF-8; name="consume-mxids.patch.txt" Content-Disposition: attachment; filename="consume-mxids.patch.txt" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy90ZXN0L21vZHVsZXMveGlkX3dyYXBhcm91bmQveGlkX3dyYXBh cm91bmQtLTEuMC5zcWwgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93 cmFwYXJvdW5kLS0xLjAuc3FsCmluZGV4IDUxZDI1ZmM0YzYzLi5jMjQxNjRjNDgwYyAxMDA2 NDQKLS0tIGEvc3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3Vu ZC0tMS4wLnNxbAorKysgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93 cmFwYXJvdW5kLS0xLjAuc3FsCkBAIC0xMCwzICsxMCw3IEBAIEFTICdNT0RVTEVfUEFUSE5B TUUnIExBTkdVQUdFIEM7CiBDUkVBVEUgRlVOQ1RJT04gY29uc3VtZV94aWRzX3VudGlsKHRh cmdldHhpZCB4aWQ4KQogUkVUVVJOUyB4aWQ4IElNTVVUQUJMRSBQQVJBTExFTCBTQUZFIFNU UklDVAogQVMgJ01PRFVMRV9QQVRITkFNRScgTEFOR1VBR0UgQzsKKworQ1JFQVRFIEZVTkNU SU9OIGNvbnN1bWVfbXhpZHMobm14aWRzIGJpZ2ludCkKK1JFVFVSTlMgeGlkOCBJTU1VVEFC TEUgUEFSQUxMRUwgU0FGRSBTVFJJQ1QKK0FTICdNT0RVTEVfUEFUSE5BTUUnIExBTkdVQUdF IEM7CmRpZmYgLS1naXQgYS9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93 cmFwYXJvdW5kLmMgYi9zcmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFw YXJvdW5kLmMKaW5kZXggZGNlODFjMGM2ZDYuLjkzNWE3NzBhNjgzIDEwMDY0NAotLS0gYS9z cmMvdGVzdC9tb2R1bGVzL3hpZF93cmFwYXJvdW5kL3hpZF93cmFwYXJvdW5kLmMKKysrIGIv c3JjL3Rlc3QvbW9kdWxlcy94aWRfd3JhcGFyb3VuZC94aWRfd3JhcGFyb3VuZC5jCkBAIC0x NCw2ICsxNCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgogCisjaW5jbHVkZSAi YWNjZXNzL211bHRpeGFjdC5oIgogI2luY2x1ZGUgImFjY2Vzcy94YWN0LmgiCiAjaW5jbHVk ZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAic3RvcmFnZS9wcm9jLmgiCkBAIC0yNCw2ICsy NSw4IEBAIFBHX01PRFVMRV9NQUdJQzsKIHN0YXRpYyBpbnQ2NCBjb25zdW1lX3hpZHNfc2hv cnRjdXQodm9pZCk7CiBzdGF0aWMgRnVsbFRyYW5zYWN0aW9uSWQgY29uc3VtZV94aWRzX2Nv bW1vbihGdWxsVHJhbnNhY3Rpb25JZCB1bnRpbHhpZCwgdWludDY0IG54aWRzKTsKIAorc3Rh dGljIE11bHRpWGFjdElkICBjb25zdW1lX211bHRpeGlkc19jb21tb24odWludDY0IG5teGlk cyk7CisKIC8qCiAgKiBDb25zdW1lIHRoZSBzcGVjaWZpZWQgbnVtYmVyIG9mIFhJRHMuCiAg Ki8KQEAgLTE1MSw2ICsxNTQsNyBAQCBjb25zdW1lX3hpZHNfY29tbW9uKEZ1bGxUcmFuc2Fj dGlvbklkIHVudGlseGlkLCB1aW50NjQgbnhpZHMpCiAJfQogCiAJcmV0dXJuIGxhc3R4aWQ7 CisjdW5kZWYgUkVQT1JUX0lOVEVSVkFMCiB9CiAKIC8qCkBAIC0yMTcsMyArMjIxLDg5IEBA IGNvbnN1bWVfeGlkc19zaG9ydGN1dCh2b2lkKQogCiAJcmV0dXJuIGNvbnN1bWVkOwogfQor CisvKgorICogQ29uc3VtZSB0aGUgc3BlY2lmaWVkIG51bWJlciBvZiBtdWx0aXRyYW5zYWN0 aW9uIElEcy4KKyAqLworUEdfRlVOQ1RJT05fSU5GT19WMShjb25zdW1lX214aWRzKTsKK0Rh dHVtCitjb25zdW1lX214aWRzKFBHX0ZVTkNUSU9OX0FSR1MpCit7CisJaW50NjQJCW5teGlk cyA9IFBHX0dFVEFSR19JTlQ2NCgwKTsKKwlNdWx0aVhhY3RJZCBsYXN0bXhpZDsKKworCWlm IChubXhpZHMgPCAwKQorCQllbG9nKEVSUk9SLCAiaW52YWxpZCBubXhpZHMgYXJndW1lbnQ6 ICVsbGQiLCAobG9uZyBsb25nKSBubXhpZHMpOworCisJaWYgKG5teGlkcyA9PSAwKQorCQls YXN0bXhpZCA9IFJlYWROZXh0TXVsdGlYYWN0SWQoKTsKKwllbHNlCisJCWxhc3RteGlkID0g Y29uc3VtZV9tdWx0aXhpZHNfY29tbW9uKCh1aW50NjQpIG5teGlkcyk7CisKKwlQR19SRVRV Uk5fVFJBTlNBQ1RJT05JRChsYXN0bXhpZCk7Cit9CisKKworLyoKKyAqIENvbW1vbiBmdW5j dGlvbmFsaXR5IGJldHdlZW4gdGhlIHR3byBwdWJsaWMgZnVuY3Rpb25zLiBYWFgKKyAqLwor c3RhdGljIE11bHRpWGFjdElkCitjb25zdW1lX211bHRpeGlkc19jb21tb24odWludDY0IG5t eGlkcykKK3sKKwlNdWx0aVhhY3RJZCBsYXN0bXhpZDsKKwl1aW50NjQJCWxhc3RfcmVwb3J0 ZWRfYXQgPSAwOworCXVpbnQ2NAkJY29uc3VtZWQgPSAwOworCU11bHRpWGFjdE1lbWJlciBt ZW1iZXI7CisJVHJhbnNhY3Rpb25JZCB4aWRzWzI1Nl07CisKKwkvKiBQcmludCBhIE5PVElD RSBldmVyeSBSRVBPUlRfSU5URVJWQUwgeGlkcyAqLworI2RlZmluZSBSRVBPUlRfSU5URVJW QUwgKDEwICogMTAwMDAwMCAvICAxMCkKKworCS8qIGluaXRpYWxpemUgJ2xhc3RteGlkJyB3 aXRoIHRoZSBzeXN0ZW0ncyBjdXJyZW50IG5leHQgWElEICovCisJbGFzdG14aWQgPSBSZWFk TmV4dE11bHRpWGFjdElkKCk7CisKKwl4aWRzWzBdID0gR2V0VG9wVHJhbnNhY3Rpb25JZCgp OworCWZvciAoaW50IGkgPSAxOyBpIDwgTWluKDI1Niwgbm14aWRzKTsgaSsrKQorCXsKKwkJ eGlkc1tpXSA9IFhpZEZyb21GdWxsVHJhbnNhY3Rpb25JZChHZXROZXdUcmFuc2FjdGlvbklk KHRydWUpKTsKKwl9CisKKwlmb3IgKDs7KQorCXsKKwkJLy91aW50NjQJCW14aWRzX2xlZnQ7 CisKKwkJQ0hFQ0tfRk9SX0lOVEVSUlVQVFMoKTsKKworCQkvKiBIb3cgbWFueSBYSURzIGRv IHdlIGhhdmUgbGVmdCB0byBjb25zdW1lPyAqLworCQlpZiAobm14aWRzID4gMCkKKwkJewor CQkJaWYgKGNvbnN1bWVkID49IG5teGlkcykKKwkJCQlicmVhazsKKwkJCS8vbXhpZHNfbGVm dCA9IG5teGlkcyAtIGNvbnN1bWVkOworCQl9CisKKwkJLyogKG5vIGZhc3QgcGF0aCkgKi8K KworCQkvKiBTbG93IHBhdGg6IENhbGwgR2V0TmV3VHJhbnNhY3Rpb25JZCB0byBhbGxvY2F0 ZSBhIG5ldyBYSUQuICovCisKKwkJbWVtYmVyID0gKE11bHRpWGFjdE1lbWJlcikgeworCQkJ LnhpZCA9IHhpZHNbY29uc3VtZWQgJSAyNTZdLAorCQkJLnN0YXR1cyA9ICgoY29uc3VtZWQg LyAyNTYpICUgMikgPyBNdWx0aVhhY3RTdGF0dXNGb3JVcGRhdGUgOiBNdWx0aVhhY3RTdGF0 dXNGb3JLZXlTaGFyZSwKKwkJfTsKKworCQlsYXN0bXhpZCA9IE11bHRpWGFjdElkQ3JlYXRl RnJvbU1lbWJlcnMoMSwgJm1lbWJlcik7CisJCWNvbnN1bWVkKys7CisKKwkJLyogUmVwb3J0 IHByb2dyZXNzICovCisJCWlmIChjb25zdW1lZCAtIGxhc3RfcmVwb3J0ZWRfYXQgPj0gUkVQ T1JUX0lOVEVSVkFMKQorCQl7CisJCQllbG9nKE5PVElDRSwgImNvbnN1bWVkICVsbHUgLyAl bGx1IFhJRHMsIGxhdGVzdCAldSIsCisJCQkJICh1bnNpZ25lZCBsb25nIGxvbmcpIGNvbnN1 bWVkLCAodW5zaWduZWQgbG9uZyBsb25nKSBubXhpZHMsCisJCQkJIGxhc3RteGlkKTsKKwkJ CWxhc3RfcmVwb3J0ZWRfYXQgPSBjb25zdW1lZDsKKwkJfQorCX0KKworCXJldHVybiBsYXN0 bXhpZDsKKyN1bmRlZiBSRVBPUlRfSU5URVJWQUwKK30K --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0001-Move-pg_multixact-SLRU-page-format-definitions-t.patch" Content-Disposition: attachment; filename*0="v24-0001-Move-pg_multixact-SLRU-page-format-definitions-t.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmMjc3Y2U1YjA3YTkyZDg2ZTY3M2U1MjNhNjk4MWNhYjczZWM3YTc2IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMTQ6MTk6MzIgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNCAxLzhdIE1vdmUgcGdfbXVsdGl4YWN0IFNMUlUgcGFnZSBm b3JtYXQgZGVmaW5pdGlvbnMgdG8KIHNlcGFyYXRlIGhlYWRlcgoKLS0tCiBzcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyAgfCAxMTkgLS0tLS0tLS0tLS0tLS0tLS0t LS0KIHNyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3RfaW50ZXJuYWwuaCB8IDE0MCArKysr KysrKysrKysrKysrKysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTQwIGluc2VydGlvbnMo KyksIDExOSBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBzcmMvaW5jbHVkZS9h Y2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9h Y2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2Ft L211bHRpeGFjdC5jCmluZGV4IDlkNWYxMzBhZjdlLi5hY2IyYTY3ODhmOSAxMDA2NDQKLS0t IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMKQEAgLTg5LDEyNSArODksNiBAQAog I2luY2x1ZGUgInV0aWxzL21lbXV0aWxzLmgiCiAKIAotLyoKLSAqIERlZmluZXMgZm9yIE11 bHRpWGFjdE9mZnNldCBwYWdlIHNpemVzLiAgQSBwYWdlIGlzIHRoZSBzYW1lIEJMQ0tTWiBh cyBpcwotICogdXNlZCBldmVyeXdoZXJlIGVsc2UgaW4gUG9zdGdyZXMuCi0gKgotICogTm90 ZTogYmVjYXVzZSBNdWx0aVhhY3RPZmZzZXRzIGFyZSAzMiBiaXRzIGFuZCB3cmFwIGFyb3Vu ZCBhdCAweEZGRkZGRkZGLAotICogTXVsdGlYYWN0IHBhZ2UgbnVtYmVyaW5nIGFsc28gd3Jh cHMgYXJvdW5kIGF0Ci0gKiAweEZGRkZGRkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdF LCBhbmQgc2VnbWVudCBudW1iZXJpbmcgYXQKLSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09G RlNFVFNfUEVSX1BBR0UvU0xSVV9QQUdFU19QRVJfU0VHTUVOVC4gIFdlIG5lZWQKLSAqIHRh a2Ugbm8gZXhwbGljaXQgbm90aWNlIG9mIHRoYXQgZmFjdCBpbiB0aGlzIG1vZHVsZSwgZXhj ZXB0IHdoZW4gY29tcGFyaW5nCi0gKiBzZWdtZW50IGFuZCBwYWdlIG51bWJlcnMgaW4gVHJ1 bmNhdGVNdWx0aVhhY3QgKHNlZQotICogTXVsdGlYYWN0T2Zmc2V0UGFnZVByZWNlZGVzKS4K LSAqLwotCi0vKiBXZSBuZWVkIGZvdXIgYnl0ZXMgcGVyIG9mZnNldCAqLwotI2RlZmluZSBN VUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9m ZnNldCkpCi0KLXN0YXRpYyBpbmxpbmUgaW50NjQKLU11bHRpWGFjdElkVG9PZmZzZXRQYWdl KE11bHRpWGFjdElkIG11bHRpKQotewotCXJldHVybiBtdWx0aSAvIE1VTFRJWEFDVF9PRkZT RVRTX1BFUl9QQUdFOwotfQotCi1zdGF0aWMgaW5saW5lIGludAotTXVsdGlYYWN0SWRUb09m ZnNldEVudHJ5KE11bHRpWGFjdElkIG11bHRpKQotewotCXJldHVybiBtdWx0aSAlIE1VTFRJ WEFDVF9PRkZTRVRTX1BFUl9QQUdFOwotfQotCi1zdGF0aWMgaW5saW5lIGludDY0Ci1NdWx0 aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChNdWx0aVhhY3RJZCBtdWx0aSkKLXsKLQlyZXR1cm4g TXVsdGlYYWN0SWRUb09mZnNldFBhZ2UobXVsdGkpIC8gU0xSVV9QQUdFU19QRVJfU0VHTUVO VDsKLX0KLQotLyoKLSAqIFRoZSBzaXR1YXRpb24gZm9yIG1lbWJlcnMgaXMgYSBiaXQgbW9y ZSBjb21wbGV4OiB3ZSBzdG9yZSBvbmUgYnl0ZSBvZgotICogYWRkaXRpb25hbCBmbGFnIGJp dHMgZm9yIGVhY2ggVHJhbnNhY3Rpb25JZC4gIFRvIGRvIHRoaXMgd2l0aG91dCBnZXR0aW5n Ci0gKiBpbnRvIGFsaWdubWVudCBpc3N1ZXMsIHdlIHN0b3JlIGZvdXIgYnl0ZXMgb2YgZmxh Z3MsIGFuZCB0aGVuIHRoZQotICogY29ycmVzcG9uZGluZyA0IFhpZHMuICBFYWNoIHN1Y2gg NS13b3JkICgyMC1ieXRlKSBzZXQgd2UgY2FsbCBhICJncm91cCIsIGFuZAotICogYXJlIHN0 b3JlZCBhcyBhIHdob2xlIGluIHBhZ2VzLiAgVGh1cywgd2l0aCA4a0IgQkxDS1NaLCB3ZSBr ZWVwIDQwOSBncm91cHMKLSAqIHBlciBwYWdlLiAgVGhpcyB3YXN0ZXMgMTIgYnl0ZXMgcGVy IHBhZ2UsIGJ1dCB0aGF0J3MgT0sgLS0gc2ltcGxpY2l0eSAoYW5kCi0gKiBwZXJmb3JtYW5j ZSkgdHJ1bXBzIHNwYWNlIGVmZmljaWVuY3kgaGVyZS4KLSAqCi0gKiBOb3RlIHRoYXQgdGhl ICJvZmZzZXQiIG1hY3JvcyB3b3JrIHdpdGggYnl0ZSBvZmZzZXQsIG5vdCBhcnJheSBpbmRl eGVzLCBzbwotICogYXJpdGhtZXRpYyBtdXN0IGJlIGRvbmUgdXNpbmcgImNoYXIgKiIgcG9p bnRlcnMuCi0gKi8KLS8qIFdlIG5lZWQgZWlnaHQgYml0cyBwZXIgeGFjdCwgc28gb25lIHhh Y3QgZml0cyBpbiBhIGJ5dGUgKi8KLSNkZWZpbmUgTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hB Q1QJCQk4Ci0jZGVmaW5lIE1YQUNUX01FTUJFUl9GTEFHU19QRVJfQllURQkJCTEKLSNkZWZp bmUgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSwkoKDEgPDwgTVhBQ1RfTUVNQkVSX0JJVFNf UEVSX1hBQ1QpIC0gMSkKLQotLyogaG93IG1hbnkgZnVsbCBieXRlcyBvZiBmbGFncyBhcmUg dGhlcmUgaW4gYSBncm91cD8gKi8KLSNkZWZpbmUgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJf R1JPVVAJCTQKLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQCVwK LQkoTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKiBNWEFDVF9NRU1CRVJfRkxBR1Nf UEVSX0JZVEUpCi0vKiBzaXplIGluIGJ5dGVzIG9mIGEgY29tcGxldGUgZ3JvdXAgKi8KLSNk ZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUgXAotCShzaXplb2YoVHJhbnNhY3Rp b25JZCkgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVAgKyBNVUxUSVhBQ1Rf RkxBR0JZVEVTX1BFUl9HUk9VUCkKLSNkZWZpbmUgTVVMVElYQUNUX01FTUJFUkdST1VQU19Q RVJfUEFHRSAoQkxDS1NaIC8gTVVMVElYQUNUX01FTUJFUkdST1VQX1NJWkUpCi0jZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFCVwKLQkoTVVMVElYQUNUX01FTUJFUkdST1VQ U19QRVJfUEFHRSAqIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUCkKLQotLyoK LSAqIEJlY2F1c2UgdGhlIG51bWJlciBvZiBpdGVtcyBwZXIgcGFnZSBpcyBub3QgYSBkaXZp c29yIG9mIHRoZSBsYXN0IGl0ZW0KLSAqIG51bWJlciAobWVtYmVyIDB4RkZGRkZGRkYpLCB0 aGUgbGFzdCBzZWdtZW50IGRvZXMgbm90IHVzZSB0aGUgbWF4aW11bSBudW1iZXIKLSAqIG9m IHBhZ2VzLCBhbmQgbW9yZW92ZXIgdGhlIGxhc3QgdXNlZCBwYWdlIHRoZXJlaW4gZG9lcyBu b3QgdXNlIHRoZSBzYW1lCi0gKiBudW1iZXIgb2YgaXRlbXMgYXMgcHJldmlvdXMgcGFnZXMu ICAoQW5vdGhlciB3YXkgdG8gc2F5IGl0IGlzIHRoYXQgdGhlCi0gKiAweEZGRkZGRkZGIG1l bWJlciBpcyBzb21ld2hlcmUgaW4gdGhlIG1pZGRsZSBvZiB0aGUgbGFzdCBwYWdlLCBzbyB0 aGUgcGFnZQotICogaGFzIHNvbWUgZW1wdHkgc3BhY2UgYWZ0ZXIgdGhhdCBpdGVtLikKLSAq Ci0gKiBUaGlzIGNvbnN0YW50IGlzIHRoZSBudW1iZXIgb2YgbWVtYmVycyBpbiB0aGUgbGFz dCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQuCi0gKi8KLSNkZWZpbmUgTUFYX01FTUJFUlNf SU5fTEFTVF9NRU1CRVJTX1BBR0UgXAotCQkoKHVpbnQzMikgKCgweEZGRkZGRkZGICUgTVVM VElYQUNUX01FTUJFUlNfUEVSX1BBR0UpICsgMSkpCi0KLS8qIHBhZ2UgaW4gd2hpY2ggYSBt ZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KLXN0YXRpYyBpbmxpbmUgaW50NjQKLU1YT2Zmc2V0 VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCi17Ci0JcmV0dXJuIG9mZnNl dCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotfQotCi1zdGF0aWMgaW5saW5lIGlu dDY0Ci1NWE9mZnNldFRvTWVtYmVyU2VnbWVudChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQot ewotCXJldHVybiBNWE9mZnNldFRvTWVtYmVyUGFnZShvZmZzZXQpIC8gU0xSVV9QQUdFU19Q RVJfU0VHTUVOVDsKLX0KLQotLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdl KSBvZiBmbGFnIHdvcmQgZm9yIGEgZ2l2ZW4gbWVtYmVyICovCi1zdGF0aWMgaW5saW5lIGlu dAotTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCi17Ci0J TXVsdGlYYWN0T2Zmc2V0IGdyb3VwID0gb2Zmc2V0IC8gTVVMVElYQUNUX01FTUJFUlNfUEVS X01FTUJFUkdST1VQOwotCWludAkJCWdyb3Vwb25wZyA9IGdyb3VwICUgTVVMVElYQUNUX01F TUJFUkdST1VQU19QRVJfUEFHRTsKLQlpbnQJCQlieXRlb2ZmID0gZ3JvdXBvbnBnICogTVVM VElYQUNUX01FTUJFUkdST1VQX1NJWkU7Ci0KLQlyZXR1cm4gYnl0ZW9mZjsKLX0KLQotc3Rh dGljIGlubGluZSBpbnQKLU1YT2Zmc2V0VG9GbGFnc0JpdFNoaWZ0KE11bHRpWGFjdE9mZnNl dCBvZmZzZXQpCi17Ci0JaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElY QUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQOwotCWludAkJCWJzaGlmdCA9IG1lbWJlcl9p bl9ncm91cCAqIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUOwotCi0JcmV0dXJuIGJzaGlm dDsKLX0KLQotLyogTG9jYXRpb24gKGJ5dGUgb2Zmc2V0IHdpdGhpbiBwYWdlKSBvZiBUcmFu c2FjdGlvbklkIG9mIGdpdmVuIG1lbWJlciAqLwotc3RhdGljIGlubGluZSBpbnQKLU1YT2Zm c2V0VG9NZW1iZXJPZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKLXsKLQlpbnQJCQlt ZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVS R1JPVVA7Ci0KLQlyZXR1cm4gTVhPZmZzZXRUb0ZsYWdzT2Zmc2V0KG9mZnNldCkgKwotCQlN VUxUSVhBQ1RfRkxBR0JZVEVTX1BFUl9HUk9VUCArCi0JCW1lbWJlcl9pbl9ncm91cCAqIHNp emVvZihUcmFuc2FjdGlvbklkKTsKLX0KLQogLyogTXVsdGl4YWN0IG1lbWJlcnMgd3JhcGFy b3VuZCB0aHJlc2hvbGRzLiAqLwogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhS RVNIT0xECQkoTWF4TXVsdGlYYWN0T2Zmc2V0IC8gMikKICNkZWZpbmUgTVVMVElYQUNUX01F TUJFUl9EQU5HRVJfVEhSRVNIT0xECVwKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRlL2FjY2Vz cy9tdWx0aXhhY3RfaW50ZXJuYWwuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3Rf aW50ZXJuYWwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOWI1 NmRlYWVmMzEKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4 YWN0X2ludGVybmFsLmgKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBtdWx0aXhhY3RfaW50 ZXJuYWwuaAorICoKKyAqIFBvc3RncmVTUUwgbXVsdGktdHJhbnNhY3Rpb24tbG9nIG1hbmFn ZXIgaW50ZXJuYWwgZGVjbGFyYXRpb25zCisgKgorICogVGhlc2UgZnVuY3Rpb25zIGFuZCBk ZWZpbml0aW9ucyBhcmUgZm9yIGRlYWxpbmcgd2l0aCBwZ19tdWx0aXhhY3QgcGFnZXMuCisg KiBUaGV5IGFyZSBpbnRlcm5hbCB0byBtdWx0aXhhY3QuYywgYnV0IHRoZXkgYXJlIGV4cG9y dGVkIGhlcmUgdG8gYWxsb3cKKyAqIHBnX3VwZ3JhZGUgdG8gd3JpdGUgcGdfbXVsdGl4YWN0 IGZpbGVzIGRpcmVjdGx5LgorICoKKyAqIFBvcnRpb25zIENvcHlyaWdodCAoYykgMTk5Ni0y MDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorICogUG9ydGlvbnMg Q29weXJpZ2h0IChjKSAxOTk0LCBSZWdlbnRzIG9mIHRoZSBVbml2ZXJzaXR5IG9mIENhbGlm b3JuaWEKKyAqCisgKiBzcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgK KyAqLworI2lmbmRlZiBNVUxUSVhBQ1RfSU5URVJOQUxfSAorI2RlZmluZSBNVUxUSVhBQ1Rf SU5URVJOQUxfSAorCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorCisKKy8qCisg KiBEZWZpbmVzIGZvciBNdWx0aVhhY3RPZmZzZXQgcGFnZSBzaXplcy4gIEEgcGFnZSBpcyB0 aGUgc2FtZSBCTENLU1ogYXMgaXMKKyAqIHVzZWQgZXZlcnl3aGVyZSBlbHNlIGluIFBvc3Rn cmVzLgorICoKKyAqIE5vdGU6IGJlY2F1c2UgTXVsdGlYYWN0T2Zmc2V0cyBhcmUgMzIgYml0 cyBhbmQgd3JhcCBhcm91bmQgYXQgMHhGRkZGRkZGRiwKKyAqIE11bHRpWGFjdCBwYWdlIG51 bWJlcmluZyBhbHNvIHdyYXBzIGFyb3VuZCBhdAorICogMHhGRkZGRkZGRi9NVUxUSVhBQ1Rf T0ZGU0VUU19QRVJfUEFHRSwgYW5kIHNlZ21lbnQgbnVtYmVyaW5nIGF0CisgKiAweEZGRkZG RkZGL01VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFL1NMUlVfUEFHRVNfUEVSX1NFR01FTlQu ICBXZSBuZWVkCisgKiB0YWtlIG5vIGV4cGxpY2l0IG5vdGljZSBvZiB0aGF0IGZhY3QgaW4g dGhpcyBtb2R1bGUsIGV4Y2VwdCB3aGVuIGNvbXBhcmluZworICogc2VnbWVudCBhbmQgcGFn ZSBudW1iZXJzIGluIFRydW5jYXRlTXVsdGlYYWN0IChzZWUKKyAqIE11bHRpWGFjdE9mZnNl dFBhZ2VQcmVjZWRlcykuCisgKi8KKworLyogV2UgbmVlZCBmb3VyIGJ5dGVzIHBlciBvZmZz ZXQgKi8KKyNkZWZpbmUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UgKEJMQ0tTWiAvIHNp emVvZihNdWx0aVhhY3RPZmZzZXQpKQorCitzdGF0aWMgaW5saW5lIGludDY0CitNdWx0aVhh Y3RJZFRvT2Zmc2V0UGFnZShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1cm4gbXVsdGkg LyBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlubGluZSBpbnQK K011bHRpWGFjdElkVG9PZmZzZXRFbnRyeShNdWx0aVhhY3RJZCBtdWx0aSkKK3sKKwlyZXR1 cm4gbXVsdGkgJSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRTsKK30KKworc3RhdGljIGlu bGluZSBpbnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFNlZ21lbnQoTXVsdGlYYWN0SWQgbXVs dGkpCit7CisJcmV0dXJuIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKSAvIFNMUlVf UEFHRVNfUEVSX1NFR01FTlQ7Cit9CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1i ZXJzIGlzIGEgYml0IG1vcmUgY29tcGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFk ZGl0aW9uYWwgZmxhZyBiaXRzIGZvciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlz IHdpdGhvdXQgZ2V0dGluZworICogaW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBm b3VyIGJ5dGVzIG9mIGZsYWdzLCBhbmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBY aWRzLiAgRWFjaCBzdWNoIDUtd29yZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAi LCBhbmQKKyAqIGFyZSBzdG9yZWQgYXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGgg OGtCIEJMQ0tTWiwgd2Uga2VlcCA0MDkgZ3JvdXBzCisgKiBwZXIgcGFnZS4gIFRoaXMgd2Fz dGVzIDEyIGJ5dGVzIHBlciBwYWdlLCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNpdHkgKGFu ZAorICogcGVyZm9ybWFuY2UpIHRydW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUuCisgKgor ICogTm90ZSB0aGF0IHRoZSAib2Zmc2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUgb2Zmc2V0 LCBub3QgYXJyYXkgaW5kZXhlcywgc28KKyAqIGFyaXRobWV0aWMgbXVzdCBiZSBkb25lIHVz aW5nICJjaGFyICoiIHBvaW50ZXJzLgorICovCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVy IHhhY3QsIHNvIG9uZSB4YWN0IGZpdHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01F TUJFUl9CSVRTX1BFUl9YQUNUCQkJOAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVS X0JZVEUJCQkxCisjZGVmaW5lIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1Y QUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0 ZXMgb2YgZmxhZ3MgYXJlIHRoZXJlIGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFD VF9GTEFHQllURVNfUEVSX0dST1VQCQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BF Ul9NRU1CRVJHUk9VUAlcCisJKE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhB Q1RfTUVNQkVSX0ZMQUdTX1BFUl9CWVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBs ZXRlIGdyb3VwICovCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwko c2l6ZW9mKFRyYW5zYWN0aW9uSWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdS T1VQICsgTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFD VF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9V UF9TSVpFKQorI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJ WEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVApCisKKy8qCisgKiBCZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBh Z2UgaXMgbm90IGEgZGl2aXNvciBvZiB0aGUgbGFzdCBpdGVtCisgKiBudW1iZXIgKG1lbWJl ciAweEZGRkZGRkZGKSwgdGhlIGxhc3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhlIG1heGlt dW0gbnVtYmVyCisgKiBvZiBwYWdlcywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVzZWQgcGFn ZSB0aGVyZWluIGRvZXMgbm90IHVzZSB0aGUgc2FtZQorICogbnVtYmVyIG9mIGl0ZW1zIGFz IHByZXZpb3VzIHBhZ2VzLiAgKEFub3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0IHRoZQor ICogMHhGRkZGRkZGRiBtZW1iZXIgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl IGxhc3QgcGFnZSwgc28gdGhlIHBhZ2UKKyAqIGhhcyBzb21lIGVtcHR5IHNwYWNlIGFmdGVy IHRoYXQgaXRlbS4pCisgKgorICogVGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVyIG9mIG1l bWJlcnMgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50LgorICovCisjZGVm aW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdFIFwKKwkJKCh1aW50MzIpICgo MHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQorCisvKiBw YWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCitzdGF0aWMgaW5saW5l IGludDY0CitNWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQor eworCXJldHVybiBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKK30KKwor c3RhdGljIGlubGluZSBpbnQ2NAorTVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTXVsdGlYYWN0 T2Zmc2V0IG9mZnNldCkKK3sKKwlyZXR1cm4gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0 KSAvIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQ7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9m ZnNldCB3aXRoaW4gcGFnZSkgb2YgZmxhZyB3b3JkIGZvciBhIGdpdmVuIG1lbWJlciAqLwor c3RhdGljIGlubGluZSBpbnQKK01YT2Zmc2V0VG9GbGFnc09mZnNldChNdWx0aVhhY3RPZmZz ZXQgb2Zmc2V0KQoreworCU11bHRpWGFjdE9mZnNldCBncm91cCA9IG9mZnNldCAvIE1VTFRJ WEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQlncm91cG9ucGcgPSBncm91 cCAlIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0U7CisJaW50CQkJYnl0ZW9mZiA9 IGdyb3Vwb25wZyAqIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFOworCisJcmV0dXJuIGJ5 dGVvZmY7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NCaXRTaGlm dChNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9 IG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKwlpbnQJCQli c2hpZnQgPSBtZW1iZXJfaW5fZ3JvdXAgKiBNWEFDVF9NRU1CRVJfQklUU19QRVJfWEFDVDsK KworCXJldHVybiBic2hpZnQ7Cit9CisKKy8qIExvY2F0aW9uIChieXRlIG9mZnNldCB3aXRo aW4gcGFnZSkgb2YgVHJhbnNhY3Rpb25JZCBvZiBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBp bmxpbmUgaW50CitNWE9mZnNldFRvTWVtYmVyT2Zmc2V0KE11bHRpWGFjdE9mZnNldCBvZmZz ZXQpCit7CisJaW50CQkJbWVtYmVyX2luX2dyb3VwID0gb2Zmc2V0ICUgTVVMVElYQUNUX01F TUJFUlNfUEVSX01FTUJFUkdST1VQOworCisJcmV0dXJuIE1YT2Zmc2V0VG9GbGFnc09mZnNl dChvZmZzZXQpICsKKwkJTVVMVElYQUNUX0ZMQUdCWVRFU19QRVJfR1JPVVAgKworCQltZW1i ZXJfaW5fZ3JvdXAgKiBzaXplb2YoVHJhbnNhY3Rpb25JZCk7Cit9CisKKyNlbmRpZgkJCQkJ CQkvKiBNVUxUSVhBQ1RfSU5URVJOQUxfSCAqLwotLSAKMi40Ny4zCgo= --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0002-Use-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename="v24-0002-Use-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSA2ZTBiOGUzNjIwZTVhZGExODUwZGMzOWI0ZGI0N2M5OWZhNjg0YzhjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgNyBBdWcgMjAyNCAxNjozNToyMiArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDIvOF0gVXNlIDY0LWJpdCBtdWx0aXhhY3Qgb2Zmc2V0cwoKU3dpdGNoaW5nIHRvIDY0 LWJpdCBtdWx0aXRyYW5zYWN0aW9uIG9mZnNldHMgcmVtb3ZlcyB3cmFwYXJvdW5kIGFuZCB0 aGUKMl4zMiBsaW1pdCBvbiB0aGVpciB0b3RhbCBudW1iZXIuCgpBdXRob3I6IE1heGltIE9y bG92IDxvcmxvdm1nQGdtYWlsLmNvbT4KRGlzY3Vzc2lvbjogRklYTUUKLS0tCiBzcmMvYmFj a2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMgICB8ICAgNCArLQogc3JjL2JhY2tl bmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMgICAgfCAgIDIgKy0KIHNyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jICAgIHwgMzkwICsrKystLS0tLS0tLS0tLS0t LS0tLS0KIHNyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYyAgICAgICAgIHwgICAy ICstCiBzcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYyB8ICAgMiAr LQogc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFjdXVtLmMgICAgICAgICAgICAgfCAgIDIgKy0K IHNyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jICAgICAgIHwgICA0ICstCiBz cmMvYmluL3BnX2NvbnRyb2xkYXRhL3BnX2NvbnRyb2xkYXRhLmMgICB8ICAgMiArLQogc3Jj L2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jICAgICAgICAgfCAgMzAgKy0KIHNyYy9i aW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgICAgICAgIHwgICA0ICstCiBzcmMvaW5j bHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICAgICB8ICAgMyAtCiBzcmMvaW5jbHVk ZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmggICB8ICAyNCArLQogc3JjL2luY2x1ZGUv Yy5oICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIDEzIGZpbGVzIGNoYW5n ZWQsIDk1IGluc2VydGlvbnMoKyksIDM3NiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9z cmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMgYi9zcmMvYmFja2VuZC9h Y2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNjLmMKaW5kZXggM2NhMDU4MmRiMzYuLjA1MmRkMGE0 Y2U1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MvbXhhY3RkZXNj LmMKKysrIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3JtZ3JkZXNjL214YWN0ZGVzYy5jCkBAIC02 NSw3ICs2NSw3IEBAIG11bHRpeGFjdF9kZXNjKFN0cmluZ0luZm8gYnVmLCBYTG9nUmVhZGVy U3RhdGUgKnJlY29yZCkKIAkJeGxfbXVsdGl4YWN0X2NyZWF0ZSAqeGxyZWMgPSAoeGxfbXVs dGl4YWN0X2NyZWF0ZSAqKSByZWM7CiAJCWludAkJCWk7CiAKLQkJYXBwZW5kU3RyaW5nSW5m byhidWYsICIldSBvZmZzZXQgJXUgbm1lbWJlcnMgJWQ6ICIsIHhscmVjLT5taWQsCisJCWFw cGVuZFN0cmluZ0luZm8oYnVmLCAiJXUgb2Zmc2V0ICUiIFBSSXU2NCAiIG5tZW1iZXJzICVk OiAiLCB4bHJlYy0+bWlkLAogCQkJCQkJIHhscmVjLT5tb2ZmLCB4bHJlYy0+bm1lbWJlcnMp OwogCQlmb3IgKGkgPSAwOyBpIDwgeGxyZWMtPm5tZW1iZXJzOyBpKyspCiAJCQlvdXRfbWVt YmVyKGJ1ZiwgJnhscmVjLT5tZW1iZXJzW2ldKTsKQEAgLTc0LDcgKzc0LDcgQEAgbXVsdGl4 YWN0X2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCXsK IAkJeGxfbXVsdGl4YWN0X3RydW5jYXRlICp4bHJlYyA9ICh4bF9tdWx0aXhhY3RfdHJ1bmNh dGUgKikgcmVjOwogCi0JCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAib2Zmc2V0cyBbJXUsICV1 KSwgbWVtYmVycyBbJXUsICV1KSIsCisJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAib2Zmc2V0 cyBbJXUsICV1KSwgbWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSIsCiAJCQkJ CQkgeGxyZWMtPnN0YXJ0VHJ1bmNPZmYsIHhscmVjLT5lbmRUcnVuY09mZiwKIAkJCQkJCSB4 bHJlYy0+c3RhcnRUcnVuY01lbWIsIHhscmVjLT5lbmRUcnVuY01lbWIpOwogCX0KZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy9ybWdyZGVzYy94bG9nZGVzYy5jIGIvc3JjL2Jh Y2tlbmQvYWNjZXNzL3JtZ3JkZXNjL3hsb2dkZXNjLmMKaW5kZXggY2Q2YzJhMmY2NTAuLjQ0 MTAzNGY1OTI5IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxv Z2Rlc2MuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mvcm1ncmRlc2MveGxvZ2Rlc2MuYwpA QCAtNjYsNyArNjYsNyBAQCB4bG9nX2Rlc2MoU3RyaW5nSW5mbyBidWYsIFhMb2dSZWFkZXJT dGF0ZSAqcmVjb3JkKQogCQlDaGVja1BvaW50ICpjaGVja3BvaW50ID0gKENoZWNrUG9pbnQg KikgcmVjOwogCiAJCWFwcGVuZFN0cmluZ0luZm8oYnVmLCAicmVkbyAlWC8lMDhYOyAiCi0J CQkJCQkgInRsaSAldTsgcHJldiB0bGkgJXU7IGZwdyAlczsgd2FsX2xldmVsICVzOyB4aWQg JXU6JXU7IG9pZCAldTsgbXVsdGkgJXU7IG9mZnNldCAldTsgIgorCQkJCQkJICJ0bGkgJXU7 IHByZXYgdGxpICV1OyBmcHcgJXM7IHdhbF9sZXZlbCAlczsgeGlkICV1OiV1OyBvaWQgJXU7 IG11bHRpICV1OyBvZmZzZXQgJSIgUFJJdTY0ICI7ICIKIAkJCQkJCSAib2xkZXN0IHhpZCAl dSBpbiBEQiAldTsgb2xkZXN0IG11bHRpICV1IGluIERCICV1OyAiCiAJCQkJCQkgIm9sZGVz dC9uZXdlc3QgY29tbWl0IHRpbWVzdGFtcCB4aWQ6ICV1LyV1OyAiCiAJCQkJCQkgIm9sZGVz dCBydW5uaW5nIHhpZCAldTsgJXMiLApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvYWNjZXNz L3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3MvdHJhbnNhbS9tdWx0 aXhhY3QuYwppbmRleCBhY2IyYTY3ODhmOS4uMzRhNzQ1YzA3YmUgMTAwNjQ0Ci0tLSBhL3Ny Yy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBiL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC02OSw2ICs2OSw3IEBACiAjaW5jbHVk ZSAicG9zdGdyZXMuaCIKIAogI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKyNpbmNs dWRlICJhY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgiCiAjaW5jbHVkZSAiYWNjZXNzL3Ns cnUuaCIKICNpbmNsdWRlICJhY2Nlc3MvdHdvcGhhc2UuaCIKICNpbmNsdWRlICJhY2Nlc3Mv dHdvcGhhc2Vfcm1nci5oIgpAQCAtODksMTAgKzkwLDE0IEBACiAjaW5jbHVkZSAidXRpbHMv bWVtdXRpbHMuaCIKIAogCi0vKiBNdWx0aXhhY3QgbWVtYmVycyB3cmFwYXJvdW5kIHRocmVz aG9sZHMuICovCi0jZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQJCShN YXhNdWx0aVhhY3RPZmZzZXQgLyAyKQotI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSX0RBTkdF Ul9USFJFU0hPTEQJXAotCShNYXhNdWx0aVhhY3RPZmZzZXQgLSBNYXhNdWx0aVhhY3RPZmZz ZXQgLyA0KQorLyoKKyAqIE11bHRpeGFjdCBtZW1iZXJzIHdhcm5pbmcgdGhyZXNob2xkLgor ICoKKyAqIElmIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gbmV4dE9mZnNldCBhbmQgb2xkZXN0 T2Zmc2V0IGV4Y2VlZHMgdGhpcyB2YWx1ZSwKKyAqIHdlIHRyaWdnZXIgYXV0b3ZhY3V1bSBp biBvcmRlciB0byByZWxlYXNlIGRpc2sgc3BhY2UgY29uc3VtZWQgYnkgdGhlCisgKiBtZW1i ZXJzIFNMUlUuCisgKi8KKyNkZWZpbmUgTVVMVElYQUNUX01FTUJFUl9BVVRPVkFDX1RIUkVT SE9MRAkJVUlOVDY0Q09OU1QoNDAwMDAwMDAwMCkKIAogc3RhdGljIGlubGluZSBNdWx0aVhh Y3RJZAogUHJldmlvdXNNdWx0aVhhY3RJZChNdWx0aVhhY3RJZCBtdWx0aSkKQEAgLTE0OSw5 ICsxNTQsNiBAQCB0eXBlZGVmIHN0cnVjdCBNdWx0aVhhY3RTdGF0ZURhdGEKIAlNdWx0aVhh Y3RJZCBtdWx0aVN0b3BMaW1pdDsKIAlNdWx0aVhhY3RJZCBtdWx0aVdyYXBMaW1pdDsKIAot CS8qIHN1cHBvcnQgZm9yIG1lbWJlcnMgYW50aS13cmFwYXJvdW5kIG1lYXN1cmVzICovCi0J TXVsdGlYYWN0T2Zmc2V0IG9mZnNldFN0b3BMaW1pdDsJLyoga25vd24gaWYgb2xkZXN0T2Zm c2V0S25vd24gKi8KLQogCS8qCiAJICogVGhpcyBpcyB1c2VkIHRvIHNsZWVwIHVudGlsIGEg bXVsdGl4YWN0IG9mZnNldCBpcyB3cml0dGVuIHdoZW4gd2Ugd2FudAogCSAqIHRvIGNyZWF0 ZSB0aGUgbmV4dCBvbmUuCkBAIC0yODIsOCArMjg0LDYgQEAgc3RhdGljIGJvb2wgTXVsdGlY YWN0T2Zmc2V0UHJlY2VkZXMoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDEsCiAJCQkJCQkJCQlN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0Mik7CiBzdGF0aWMgdm9pZCBFeHRlbmRNdWx0aVhhY3RP ZmZzZXQoTXVsdGlYYWN0SWQgbXVsdGkpOwogc3RhdGljIHZvaWQgRXh0ZW5kTXVsdGlYYWN0 TWVtYmVyKE11bHRpWGFjdE9mZnNldCBvZmZzZXQsIGludCBubWVtYmVycyk7Ci1zdGF0aWMg Ym9vbCBNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVsdGlYYWN0T2Zmc2V0IGJvdW5kYXJ5 LAotCQkJCQkJCQkJIE11bHRpWGFjdE9mZnNldCBzdGFydCwgdWludDMyIGRpc3RhbmNlKTsK IHN0YXRpYyBib29sIFNldE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCk7CiBz dGF0aWMgYm9vbCBmaW5kX211bHRpeGFjdF9zdGFydChNdWx0aVhhY3RJZCBtdWx0aSwgTXVs dGlYYWN0T2Zmc2V0ICpyZXN1bHQpOwogc3RhdGljIHZvaWQgV3JpdGVNVHJ1bmNhdGVYbG9n UmVjKE9pZCBvbGRlc3RNdWx0aURCLApAQCAtMTAyMyw5MCArMTAyMywyMiBAQCBHZXROZXdN dWx0aVhhY3RJZChpbnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCUV4 dGVuZE11bHRpWGFjdE9mZnNldChyZXN1bHQpOwogCiAJLyoKLQkgKiBSZXNlcnZlIHRoZSBt ZW1iZXJzIHNwYWNlLCBzaW1pbGFybHkgdG8gYWJvdmUuICBBbHNvLCBiZSBjYXJlZnVsIG5v dCB0bwotCSAqIHJldHVybiB6ZXJvIGFzIHRoZSBzdGFydGluZyBvZmZzZXQgZm9yIGFueSBt dWx0aXhhY3QuIFNlZQotCSAqIEdldE11bHRpWGFjdElkTWVtYmVycygpIGZvciBtb3RpdmF0 aW9uLgorCSAqIFJlc2VydmUgdGhlIG1lbWJlcnMgc3BhY2UsIHNpbWlsYXJseSB0byBhYm92 ZS4KIAkgKi8KIAluZXh0T2Zmc2V0ID0gTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQ7Ci0J aWYgKG5leHRPZmZzZXQgPT0gMCkKLQl7Ci0JCSpvZmZzZXQgPSAxOwotCQlubWVtYmVycysr OwkJCQkvKiBhbGxvY2F0ZSBtZW1iZXIgc2xvdCAwIHRvbyAqLwotCX0KLQllbHNlCi0JCSpv ZmZzZXQgPSBuZXh0T2Zmc2V0OwotCi0JLyotLS0tLS0tLS0tCi0JICogUHJvdGVjdCBhZ2Fp bnN0IG92ZXJydW4gb2YgdGhlIG1lbWJlcnMgc3BhY2UgYXMgd2VsbCwgd2l0aCB0aGUKLQkg KiBmb2xsb3dpbmcgcnVsZXM6Ci0JICoKLQkgKiBJZiB3ZSdyZSBwYXN0IG9mZnNldFN0b3BM aW1pdCwgcmVmdXNlIHRvIGdlbmVyYXRlIG1vcmUgbXVsdGlzLgotCSAqIElmIHdlJ3JlIGNs b3NlIHRvIG9mZnNldFN0b3BMaW1pdCwgZW1pdCBhIHdhcm5pbmcuCi0JICoKLQkgKiBBcmJp dHJhcmlseSwgd2Ugc3RhcnQgZW1pdHRpbmcgd2FybmluZ3Mgd2hlbiB3ZSdyZSAyMCBzZWdt ZW50cyBvciBsZXNzCi0JICogZnJvbSBvZmZzZXRTdG9wTGltaXQuCi0JICoKLQkgKiBOb3Rl IHdlIGhhdmVuJ3QgdXBkYXRlZCB0aGUgc2hhcmVkIHN0YXRlIHlldCwgc28gaWYgd2UgZmFp bCBhdCB0aGlzCi0JICogcG9pbnQsIHRoZSBtdWx0aXhhY3QgSUQgd2UgZ3JhYmJlZCBjYW4g c3RpbGwgYmUgdXNlZCBieSB0aGUgbmV4dCBndXkuCi0JICoKLQkgKiBOb3RlIHRoYXQgdGhl cmUgaXMgbm8gcG9pbnQgaW4gZm9yY2luZyBhdXRvdmFjdXVtIHJ1bnMgaGVyZTogdGhlCi0J ICogbXVsdGl4YWN0IGZyZWV6ZSBzZXR0aW5ncyB3b3VsZCBoYXZlIHRvIGJlIHJlZHVjZWQg Zm9yIHRoYXQgdG8gaGF2ZSBhbnkKLQkgKiBlZmZlY3QuCi0JICotLS0tLS0tLS0tCi0JICov Ci0jZGVmaW5lIE9GRlNFVF9XQVJOX1NFR01FTlRTCTIwCi0JaWYgKE11bHRpWGFjdFN0YXRl LT5vbGRlc3RPZmZzZXRLbm93biAmJgotCQlNdWx0aVhhY3RPZmZzZXRXb3VsZFdyYXAoTXVs dGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1pdCwgbmV4dE9mZnNldCwKLQkJCQkJCQkJIG5t ZW1iZXJzKSkKLQl7Ci0JCS8qIHNlZSBjb21tZW50IGluIHRoZSBjb3JyZXNwb25kaW5nIG9m ZnNldHMgd3JhcGFyb3VuZCBjYXNlICovCi0JCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lH TkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNIRVIpOwotCi0JCWVyZXBvcnQoRVJST1IsCi0JCQkJ KGVycmNvZGUoRVJSQ09ERV9QUk9HUkFNX0xJTUlUX0VYQ0VFREVEKSwKLQkJCQkgZXJybXNn KCJtdWx0aXhhY3QgXCJtZW1iZXJzXCIgbGltaXQgZXhjZWVkZWQiKSwKLQkJCQkgZXJyZGV0 YWlsX3BsdXJhbCgiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBhIG11bHRpeGFjdCB3aXRo ICV1IG1lbWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlzIG9ubHkgZW5vdWdoIGZv ciAldSBtZW1iZXIuIiwKLQkJCQkJCQkJICAiVGhpcyBjb21tYW5kIHdvdWxkIGNyZWF0ZSBh IG11bHRpeGFjdCB3aXRoICV1IG1lbWJlcnMsIGJ1dCB0aGUgcmVtYWluaW5nIHNwYWNlIGlz IG9ubHkgZW5vdWdoIGZvciAldSBtZW1iZXJzLiIsCi0JCQkJCQkJCSAgTXVsdGlYYWN0U3Rh dGUtPm9mZnNldFN0b3BMaW1pdCAtIG5leHRPZmZzZXQgLSAxLAotCQkJCQkJCQkgIG5tZW1i ZXJzLAotCQkJCQkJCQkgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9wTGltaXQgLSBuZXh0 T2Zmc2V0IC0gMSksCi0JCQkJIGVycmhpbnQoIkV4ZWN1dGUgYSBkYXRhYmFzZS13aWRlIFZB Q1VVTSBpbiBkYXRhYmFzZSB3aXRoIE9JRCAldSB3aXRoIHJlZHVjZWQgXCJ2YWN1dW1fbXVs dGl4YWN0X2ZyZWV6ZV9taW5fYWdlXCIgYW5kIFwidmFjdXVtX211bHRpeGFjdF9mcmVlemVf dGFibGVfYWdlXCIgc2V0dGluZ3MuIiwKLQkJCQkJCSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0 TXVsdGlYYWN0REIpKSk7Ci0JfQogCiAJLyoKLQkgKiBDaGVjayB3aGV0aGVyIHdlIHNob3Vs ZCBraWNrIGF1dG92YWN1dW0gaW50byBhY3Rpb24sIHRvIHByZXZlbnQgbWVtYmVycwotCSAq IHdyYXBhcm91bmQuIE5CIHdlIHVzZSBhIG11Y2ggbGFyZ2VyIHdpbmRvdyB0byB0cmlnZ2Vy IGF1dG92YWN1dW0gdGhhbgotCSAqIGp1c3QgdGhlIHdhcm5pbmcgbGltaXQuIFRoZSB3YXJu aW5nIGlzIGp1c3QgYSBtZWFzdXJlIG9mIGxhc3QgcmVzb3J0IC0KLQkgKiB0aGlzIGlzIGlu IGxpbmUgd2l0aCBHZXROZXdUcmFuc2FjdGlvbklkJ3MgYmVoYXZpb3VyLgorCSAqIE9mZnNl dHMgYXJlIDY0LWJpdCBpbnRlZ2VycyBhbmQgd2lsbCBuZXZlciB3cmFwIGFyb3VuZC4gIEZp cnN0bHksIGl0CisJICogd291bGQgdGFrZSBhbiB1bnJlYWxpc3RpYyBhbW91bnQgb2YgdGlt ZSBhbmQgcmVzb3VyY2VzIHRvIGNvbnN1bWUgMl42NAorCSAqIG9mZnNldHMuICBTZWNvbmRs eSwgbXVsdGl4aWQgY3JlYXRpb24gaXMgV0FMLWxvZ2dlZCwgc28geW91IHdvdWxkIHJ1bgor CSAqIG91dCBvZiBMU05zIGJlZm9yZSByZWFjaGluZyBvZmZzZXQgd3JhcGFyb3VuZC4gIE5l dmVydGhlbGVzcywgY2hlY2sgZm9yCisJICogd3JhcGFyb3VuZCBhcyBhIHNhbml0eSBjaGVj ay4KIAkgKi8KLQlpZiAoIU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZzZXRLbm93biB8fAot CQkoTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgLSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0 T2Zmc2V0Ci0JCSA+IE1VTFRJWEFDVF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpKQotCXsKLQkJ LyoKLQkJICogVG8gYXZvaWQgc3dhbXBpbmcgdGhlIHBvc3RtYXN0ZXIgd2l0aCBzaWduYWxz LCB3ZSBpc3N1ZSB0aGUgYXV0b3ZhYwotCQkgKiByZXF1ZXN0IG9ubHkgd2hlbiBjcm9zc2lu ZyBhIHNlZ21lbnQgYm91bmRhcnkuIFdpdGggZGVmYXVsdAotCQkgKiBjb21waWxhdGlvbiBz ZXR0aW5ncyB0aGF0J3Mgcm91Z2hseSBhZnRlciA1MGsgbWVtYmVycy4gIFRoaXMgc3RpbGwK LQkJICogZ2l2ZXMgcGxlbnR5IG9mIGNoYW5jZXMgYmVmb3JlIHdlIGdldCBpbnRvIHJlYWwg dHJvdWJsZS4KLQkJICovCi0JCWlmICgoTVhPZmZzZXRUb01lbWJlclBhZ2UobmV4dE9mZnNl dCkgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSAhPQotCQkJKE1YT2Zmc2V0VG9NZW1iZXJQ YWdlKG5leHRPZmZzZXQgKyBubWVtYmVycykgLyBTTFJVX1BBR0VTX1BFUl9TRUdNRU5UKSkK LQkJCVNlbmRQb3N0bWFzdGVyU2lnbmFsKFBNU0lHTkFMX1NUQVJUX0FVVE9WQUNfTEFVTkNI RVIpOwotCX0KLQotCWlmIChNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gJiYK LQkJTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9w TGltaXQsCi0JCQkJCQkJCSBuZXh0T2Zmc2V0LAotCQkJCQkJCQkgbm1lbWJlcnMgKyBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQgKiBPRkZT RVRfV0FSTl9TRUdNRU5UUykpCi0JCWVyZXBvcnQoV0FSTklORywKKwlpZiAobmV4dE9mZnNl dCArIG5tZW1iZXJzIDwgbmV4dE9mZnNldCkKKwkJZXJlcG9ydChFUlJPUiwKIAkJCQkoZXJy Y29kZShFUlJDT0RFX1BST0dSQU1fTElNSVRfRVhDRUVERUQpLAotCQkJCSBlcnJtc2dfcGx1 cmFsKCJkYXRhYmFzZSB3aXRoIE9JRCAldSBtdXN0IGJlIHZhY3V1bWVkIGJlZm9yZSAlZCBt b3JlIG11bHRpeGFjdCBtZW1iZXIgaXMgdXNlZCIsCi0JCQkJCQkJICAgImRhdGFiYXNlIHdp dGggT0lEICV1IG11c3QgYmUgdmFjdXVtZWQgYmVmb3JlICVkIG1vcmUgbXVsdGl4YWN0IG1l bWJlcnMgYXJlIHVzZWQiLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZzZXRTdG9w TGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMsCi0JCQkJCQkJICAgTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE11bHRpWGFjdERCLAotCQkJCQkJCSAgIE11bHRpWGFjdFN0YXRlLT5vZmZz ZXRTdG9wTGltaXQgLSBuZXh0T2Zmc2V0ICsgbm1lbWJlcnMpLAotCQkJCSBlcnJoaW50KCJF eGVjdXRlIGEgZGF0YWJhc2Utd2lkZSBWQUNVVU0gaW4gdGhhdCBkYXRhYmFzZSB3aXRoIHJl ZHVjZWQgXCJ2YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9taW5fYWdlXCIgYW5kIFwidmFjdXVt X211bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlXCIgc2V0dGluZ3MuIikpKTsKKwkJCQkgZXJy bXNnKCJNdWx0aVhhY3QgbWVtYmVycyB3b3VsZCB3cmFwIGFyb3VuZCIpKSk7CisJKm9mZnNl dCA9IG5leHRPZmZzZXQ7CiAKIAlFeHRlbmRNdWx0aVhhY3RNZW1iZXIobmV4dE9mZnNldCwg bm1lbWJlcnMpOwogCkBAIC0xMTI3LDggKzEwNTksNyBAQCBHZXROZXdNdWx0aVhhY3RJZChp bnQgbm1lbWJlcnMsIE11bHRpWGFjdE9mZnNldCAqb2Zmc2V0KQogCSAqIHRoZSBuZXh0IGl0 ZXJhdGlvbi4gIEJ1dCBub3RlIHRoYXQgbmV4dE1YYWN0IG1heSBiZSBJbnZhbGlkTXVsdGlY YWN0SWQKIAkgKiBvciB0aGUgZmlyc3QgdmFsdWUgb24gYSBzZWdtZW50LWJlZ2lubmluZyBw YWdlIGFmdGVyIHRoaXMgcm91dGluZQogCSAqIGV4aXRzLCBzbyBhbnlvbmUgZWxzZSBsb29r aW5nIGF0IHRoZSB2YXJpYWJsZSBtdXN0IGJlIHByZXBhcmVkIHRvIGRlYWwKLQkgKiB3aXRo IGVpdGhlciBjYXNlLiAgU2ltaWxhcmx5LCBuZXh0T2Zmc2V0IG1heSBiZSB6ZXJvLCBidXQg d2Ugd29uJ3QgdXNlCi0JICogdGhhdCBhcyB0aGUgYWN0dWFsIHN0YXJ0IG9mZnNldCBvZiB0 aGUgbmV4dCBtdWx0aXhhY3QuCisJICogd2l0aCBlaXRoZXIgY2FzZS4KIAkgKi8KIAkoTXVs dGlYYWN0U3RhdGUtPm5leHRNWGFjdCkrKzsKIApAQCAtMTEzNiw3ICsxMDY3LDggQEAgR2V0 TmV3TXVsdGlYYWN0SWQoaW50IG5tZW1iZXJzLCBNdWx0aVhhY3RPZmZzZXQgKm9mZnNldCkK IAogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKLQlkZWJ1Z19lbG9nNChE RUJVRzIsICJHZXROZXc6IHJldHVybmluZyAldSBvZmZzZXQgJXUiLCByZXN1bHQsICpvZmZz ZXQpOworCWRlYnVnX2Vsb2c0KERFQlVHMiwgIkdldE5ldzogcmV0dXJuaW5nICV1IG9mZnNl dCAlIiBQUkl1NjQsIHJlc3VsdCwKKwkJCQkqb2Zmc2V0KTsKIAlyZXR1cm4gcmVzdWx0Owog fQogCkBAIC0xMTc4LDcgKzExMTAsNiBAQCBHZXRNdWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlY YWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAqKm1lbWJlcnMsCiAJTXVsdGlYYWN0T2Zm c2V0ICpvZmZwdHI7CiAJTXVsdGlYYWN0T2Zmc2V0IG9mZnNldDsKIAlpbnQJCQlsZW5ndGg7 Ci0JaW50CQkJdHJ1ZWxlbmd0aDsKIAlNdWx0aVhhY3RJZCBvbGRlc3RNWGFjdDsKIAlNdWx0 aVhhY3RJZCBuZXh0TVhhY3Q7CiAJTXVsdGlYYWN0SWQgdG1wTVhhY3Q7CkBAIC0xMjc3LDE2 ICsxMjA4LDcgQEAgR2V0TXVsdGlYYWN0SWRNZW1iZXJzKE11bHRpWGFjdElkIG11bHRpLCBN dWx0aVhhY3RNZW1iZXIgKiptZW1iZXJzLAogCSAqIHdlIGhhdmUganVzdCBmb3IgdGhpczsg dGhlIHByb2Nlc3MgaW4gY2hhcmdlIHdpbGwgc2lnbmFsIHRoZSBDViBhcyBzb29uCiAJICog YXMgaXQgaGFzIGZpbmlzaGVkIHdyaXRpbmcgdGhlIG11bHRpeGFjdCBvZmZzZXQuCiAJICoK LQkgKiAzLiBCZWNhdXNlIEdldE5ld011bHRpWGFjdElkIGluY3JlbWVudHMgb2Zmc2V0IHpl cm8gdG8gb2Zmc2V0IG9uZSB0bwotCSAqIGhhbmRsZSBjYXNlICMyLCB0aGVyZSBpcyBhbiBh bWJpZ3VpdHkgbmVhciB0aGUgcG9pbnQgb2Ygb2Zmc2V0Ci0JICogd3JhcGFyb3VuZC4gIElm IHdlIHNlZSBuZXh0IG11bHRpeGFjdCdzIG9mZnNldCBpcyBvbmUsIGlzIHRoYXQgb3VyCi0J ICogbXVsdGl4YWN0J3MgYWN0dWFsIGVuZHBvaW50LCBvciBkaWQgaXQgZW5kIGF0IHplcm8g d2l0aCBhIHN1YnNlcXVlbnQKLQkgKiBpbmNyZW1lbnQ/ICBXZSBoYW5kbGUgdGhpcyB1c2lu ZyB0aGUga25vd2xlZGdlIHRoYXQgaWYgdGhlIHplcm8ndGgKLQkgKiBtZW1iZXIgc2xvdCB3 YXNuJ3QgZmlsbGVkLCBpdCdsbCBjb250YWluIHplcm8sIGFuZCB6ZXJvIGlzbid0IGEgdmFs aWQKLQkgKiB0cmFuc2FjdGlvbiBJRCBzbyBpdCBjYW4ndCBiZSBhIG11bHRpeGFjdCBtZW1i ZXIuICBUaGVyZWZvcmUsIGlmIHdlCi0JICogcmVhZCBhIHplcm8gZnJvbSB0aGUgbWVtYmVy cyBhcnJheSwganVzdCBpZ25vcmUgaXQuCi0JICoKLQkgKiBUaGlzIGlzIGFsbCBwcmV0dHkg bWVzc3ksIGJ1dCB0aGUgbWVzcyBvY2N1cnMgb25seSBpbiBpbmZyZXF1ZW50IGNvcm5lcgor CSAqIFRoaXMgaXMgYSBsaXR0bGUgbWVzc3ksIGJ1dCB0aGUgbWVzcyBvY2N1cnMgb25seSBp biBpbmZyZXF1ZW50IGNvcm5lcgogCSAqIGNhc2VzLCBzbyBpdCBzZWVtcyBiZXR0ZXIgdGhh biBob2xkaW5nIHRoZSBNdWx0aVhhY3RHZW5Mb2NrIGZvciBhIGxvbmcKIAkgKiB0aW1lIG9u IGV2ZXJ5IG11bHRpeGFjdCBjcmVhdGlvbi4KIAkgKi8KQEAgLTEzNzIsNiArMTI5NCw5IEBA IHJldHJ5OgogCUxXTG9ja1JlbGVhc2UobG9jayk7CiAJbG9jayA9IE5VTEw7CiAKKwkvKiBB IG11bHRpeGlkIHdpdGggemVybyBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCisJQXNz ZXJ0KGxlbmd0aCA+IDApOworCiAJLyoKIAkgKiBJZiB3ZSBzbGVwdCBhYm92ZSwgY2xlYW4g dXAgc3RhdGU7IGl0J3Mgbm8gbG9uZ2VyIG5lZWRlZC4KIAkgKi8KQEAgLTEzODAsNyArMTMw NSw2IEBAIHJldHJ5OgogCiAJcHRyID0gKE11bHRpWGFjdE1lbWJlciAqKSBwYWxsb2MobGVu Z3RoICogc2l6ZW9mKE11bHRpWGFjdE1lbWJlcikpOwogCi0JdHJ1ZWxlbmd0aCA9IDA7CiAJ cHJldl9wYWdlbm8gPSAtMTsKIAlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBv ZmZzZXQrKykKIAl7CkBAIC0xNDE3LDM3ICsxMzQxLDI3IEBAIHJldHJ5OgogCiAJCXhhY3Rw dHIgPSAoVHJhbnNhY3Rpb25JZCAqKQogCQkJKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dICsgbWVtYmVyb2ZmKTsKLQotCQlpZiAoIVRyYW5zYWN0 aW9uSWRJc1ZhbGlkKCp4YWN0cHRyKSkKLQkJewotCQkJLyogQ29ybmVyIGNhc2UgMzogd2Ug bXVzdCBiZSBsb29raW5nIGF0IHVudXNlZCBzbG90IHplcm8gKi8KLQkJCUFzc2VydChvZmZz ZXQgPT0gMCk7Ci0JCQljb250aW51ZTsKLQkJfQorCQlBc3NlcnQoVHJhbnNhY3Rpb25JZElz VmFsaWQoKnhhY3RwdHIpKTsKIAogCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNl dChvZmZzZXQpOwogCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQp OwogCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKE11bHRpWGFjdE1lbWJlckN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dICsgZmxhZ3NvZmYpOwogCi0JCXB0clt0cnVlbGVuZ3Ro XS54aWQgPSAqeGFjdHB0cjsKLQkJcHRyW3RydWVsZW5ndGhdLnN0YXR1cyA9ICgqZmxhZ3Nw dHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0s7Ci0JCXRydWVsZW5n dGgrKzsKKwkJcHRyW2ldLnhpZCA9ICp4YWN0cHRyOworCQlwdHJbaV0uc3RhdHVzID0gKCpm bGFnc3B0ciA+PiBic2hpZnQpICYgTVhBQ1RfTUVNQkVSX1hBQ1RfQklUTUFTSzsKIAl9CiAK IAlMV0xvY2tSZWxlYXNlKGxvY2spOwogCi0JLyogQSBtdWx0aXhpZCB3aXRoIHplcm8gbWVt YmVycyBzaG91bGQgbm90IGhhcHBlbiAqLwotCUFzc2VydCh0cnVlbGVuZ3RoID4gMCk7Ci0K IAkvKgogCSAqIENvcHkgdGhlIHJlc3VsdCBpbnRvIHRoZSBsb2NhbCBjYWNoZS4KIAkgKi8K LQltWGFjdENhY2hlUHV0KG11bHRpLCB0cnVlbGVuZ3RoLCBwdHIpOworCW1YYWN0Q2FjaGVQ dXQobXVsdGksIGxlbmd0aCwgcHRyKTsKIAogCWRlYnVnX2Vsb2czKERFQlVHMiwgIkdldE1l bWJlcnM6IG5vIGNhY2hlIGZvciAlcyIsCi0JCQkJbXhpZF90b19zdHJpbmcobXVsdGksIHRy dWVsZW5ndGgsIHB0cikpOworCQkJCW14aWRfdG9fc3RyaW5nKG11bHRpLCBsZW5ndGgsIHB0 cikpOwogCSptZW1iZXJzID0gcHRyOwotCXJldHVybiB0cnVlbGVuZ3RoOworCXJldHVybiBs ZW5ndGg7CiB9CiAKIC8qCkBAIC0xODU0LDcgKzE3NjgsNyBAQCBNdWx0aVhhY3RTaG1lbUlu aXQodm9pZCkKIAkJCQkgICJwZ19tdWx0aXhhY3QvbWVtYmVycyIsIExXVFJBTkNIRV9NVUxU SVhBQ1RNRU1CRVJfQlVGRkVSLAogCQkJCSAgTFdUUkFOQ0hFX01VTFRJWEFDVE1FTUJFUl9T TFJVLAogCQkJCSAgU1lOQ19IQU5ETEVSX01VTFRJWEFDVF9NRU1CRVIsCi0JCQkJICBmYWxz ZSk7CisJCQkJICB0cnVlKTsKIAkvKiBkb2Vzbid0IGNhbGwgU2ltcGxlTHJ1VHJ1bmNhdGUo KSBvciBtZWV0IGNyaXRlcmlhIGZvciB1bml0IHRlc3RzICovCiAKIAkvKiBJbml0aWFsaXpl IG91ciBzaGFyZWQgc3RhdGUgc3RydWN0ICovCkBAIC0yMDMxLDcgKzE5NDUsNiBAQCBUcmlt TXVsdGlYYWN0KHZvaWQpCiAJCXNsb3RubyA9IFNpbXBsZUxydVJlYWRQYWdlKE11bHRpWGFj dE9mZnNldEN0bCwgcGFnZW5vLCB0cnVlLCBuZXh0TVhhY3QpOwogCQlvZmZwdHIgPSAoTXVs dGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVkLT5wYWdlX2J1ZmZl cltzbG90bm9dOwogCQlvZmZwdHIgKz0gZW50cnlubzsKLQogCQlNZW1TZXQob2ZmcHRyLCAw LCBCTENLU1ogLSAoZW50cnlubyAqIHNpemVvZihNdWx0aVhhY3RPZmZzZXQpKSk7CiAKIAkJ TXVsdGlYYWN0T2Zmc2V0Q3RsLT5zaGFyZWQtPnBhZ2VfZGlydHlbc2xvdG5vXSA9IHRydWU7 CkBAIC0yMTA0LDcgKzIwMTcsNyBAQCBNdWx0aVhhY3RHZXRDaGVja3B0TXVsdGkoYm9vbCBp c19zaHV0ZG93biwKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCiAJZGVi dWdfZWxvZzYoREVCVUcyLAotCQkJCSJNdWx0aVhhY3Q6IGNoZWNrcG9pbnQgaXMgbmV4dE11 bHRpICV1LCBuZXh0T2Zmc2V0ICV1LCBvbGRlc3RNdWx0aSAldSBpbiBEQiAldSIsCisJCQkJ Ik11bHRpWGFjdDogY2hlY2twb2ludCBpcyBuZXh0TXVsdGkgJXUsIG5leHRPZmZzZXQgJSIg UFJJdTY0ICIsIG9sZGVzdE11bHRpICV1IGluIERCICV1IiwKIAkJCQkqbmV4dE11bHRpLCAq bmV4dE11bHRpT2Zmc2V0LCAqb2xkZXN0TXVsdGksICpvbGRlc3RNdWx0aURCKTsKIH0KIApA QCAtMjEzOSw3ICsyMDUyLDcgQEAgdm9pZAogTXVsdGlYYWN0U2V0TmV4dE1YYWN0KE11bHRp WGFjdElkIG5leHRNdWx0aSwKIAkJCQkJICBNdWx0aVhhY3RPZmZzZXQgbmV4dE11bHRpT2Zm c2V0KQogewotCWRlYnVnX2Vsb2c0KERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0 IG11bHRpIHRvICV1IG9mZnNldCAldSIsCisJZGVidWdfZWxvZzQoREVCVUcyLCAiTXVsdGlY YWN0OiBzZXR0aW5nIG5leHQgbXVsdGkgdG8gJXUgb2Zmc2V0ICUiIFBSSXU2NCwKIAkJCQlu ZXh0TXVsdGksIG5leHRNdWx0aU9mZnNldCk7CiAJTFdMb2NrQWNxdWlyZShNdWx0aVhhY3RH ZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBu ZXh0TXVsdGk7CkBAIC0yMzMwLDcgKzIyNDMsNyBAQCBNdWx0aVhhY3RBZHZhbmNlTmV4dE1Y YWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCX0KIAlpZiAoTXVsdGlYYWN0T2Zmc2V0UHJl Y2VkZXMoTXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQsIG1pbk11bHRpT2Zmc2V0KSkKIAl7 Ci0JCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBuZXh0IG9mZnNl dCB0byAldSIsCisJCWRlYnVnX2Vsb2czKERFQlVHMiwgIk11bHRpWGFjdDogc2V0dGluZyBu ZXh0IG9mZnNldCB0byAlIiBQUklVNjQsCiAJCQkJCW1pbk11bHRpT2Zmc2V0KTsKIAkJTXVs dGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBtaW5NdWx0aU9mZnNldDsKIAl9CkBAIC0yNDMy LDIzICsyMzQ1LDggQEAgRXh0ZW5kTXVsdGlYYWN0TWVtYmVyKE11bHRpWGFjdE9mZnNldCBv ZmZzZXQsIGludCBubWVtYmVycykKIAkJCUxXTG9ja1JlbGVhc2UobG9jayk7CiAJCX0KIAot CQkvKgotCQkgKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgaXRlbXMgdGlsbCBlbmQgb2YgY3Vy cmVudCBwYWdlLiAgQ2FyZWZ1bDogaWYKLQkJICogYWRkaXRpb24gb2YgdW5zaWduZWQgaW50 cyB3cmFwcyBhcm91bmQsIHdlJ3JlIGF0IHRoZSBsYXN0IHBhZ2Ugb2YKLQkJICogdGhlIGxh c3Qgc2VnbWVudDsgc2luY2UgdGhhdCBwYWdlIGhvbGRzIGEgZGlmZmVyZW50IG51bWJlciBv ZiBpdGVtcwotCQkgKiB0aGFuIG90aGVyIHBhZ2VzLCB3ZSBuZWVkIHRvIGRvIGl0IGRpZmZl cmVudGx5LgotCQkgKi8KLQkJaWYgKG9mZnNldCArIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVN QkVSU19QQUdFIDwgb2Zmc2V0KQotCQl7Ci0JCQkvKgotCQkJICogVGhpcyBpcyB0aGUgbGFz dCBwYWdlIG9mIHRoZSBsYXN0IHNlZ21lbnQ7IHdlIGNhbiBjb21wdXRlIHRoZQotCQkJICog bnVtYmVyIG9mIGl0ZW1zIGxlZnQgdG8gYWxsb2NhdGUgaW4gaXQgd2l0aG91dCBtb2R1bG8K LQkJCSAqIGFyaXRobWV0aWMuCi0JCQkgKi8KLQkJCWRpZmZlcmVuY2UgPSBNYXhNdWx0aVhh Y3RPZmZzZXQgLSBvZmZzZXQgKyAxOwotCQl9Ci0JCWVsc2UKLQkJCWRpZmZlcmVuY2UgPSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAtIG9mZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJT X1BFUl9QQUdFOworCQkvKiBDb21wdXRlIHRoZSBudW1iZXIgb2YgaXRlbXMgdGlsbCBlbmQg b2YgY3VycmVudCBwYWdlLiAqLworCQlkaWZmZXJlbmNlID0gTVVMVElYQUNUX01FTUJFUlNf UEVSX1BBR0UgLSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRTsKIAogCQkv KgogCQkgKiBBZHZhbmNlIHRvIG5leHQgcGFnZSwgdGFraW5nIGNhcmUgdG8gcHJvcGVybHkg aGFuZGxlIHRoZSB3cmFwYXJvdW5kCkBAIC0yNTE0LDE1ICsyNDEyLDE0IEBAIEdldE9sZGVz dE11bHRpWGFjdElkKHZvaWQpCiB9CiAKIC8qCi0gKiBEZXRlcm1pbmUgaG93IGFnZ3Jlc3Np dmVseSB3ZSBuZWVkIHRvIHZhY3V1bSBpbiBvcmRlciB0byBwcmV2ZW50IG1lbWJlcgotICog d3JhcGFyb3VuZC4KKyAqIERldGVybWluZSBpZiB3ZSBuZWVkIHRvIHZhY3V1bSB0byBrZWVw IHRoZSBzaXplIG9mIHRoZSBtZW1iZXJzIFNMUlUgaW4KKyAqIGNoZWNrLgogICoKICAqIFRv IGRvIHNvIGRldGVybWluZSB3aGF0J3MgdGhlIG9sZGVzdCBtZW1iZXIgb2Zmc2V0IGFuZCBp bnN0YWxsIHRoZSBsaW1pdAogICogaW5mbyBpbiBNdWx0aVhhY3RTdGF0ZSwgd2hlcmUgaXQg Y2FuIGJlIHVzZWQgdG8gcHJldmVudCBvdmVycnVuIG9mIG9sZCBkYXRhCiAgKiBpbiB0aGUg bWVtYmVycyBTTFJVIGFyZWEuCiAgKgotICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlm IGVtZXJnZW5jeSBhdXRvdmFjdXVtIGlzIHJlcXVpcmVkIGFuZCBmYWxzZQotICogb3RoZXJ3 aXNlLgorICogVGhlIHJldHVybiB2YWx1ZSBpcyB0cnVlIGlmIGF1dG92YWN1dW0gaXMgcmVx dWlyZWQgYW5kIGZhbHNlIG90aGVyd2lzZS4KICAqLwogc3RhdGljIGJvb2wKIFNldE9mZnNl dFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKQEAgLTI1MzQsOCArMjQzMSw2IEBAIFNl dE9mZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlNdWx0aVhhY3RPZmZzZXQg bmV4dE9mZnNldDsKIAlib29sCQlvbGRlc3RPZmZzZXRLbm93biA9IGZhbHNlOwogCWJvb2wJ CXByZXZPbGRlc3RPZmZzZXRLbm93bjsKLQlNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0U3RvcExp bWl0ID0gMDsKLQlNdWx0aVhhY3RPZmZzZXQgcHJldk9mZnNldFN0b3BMaW1pdDsKIAogCS8q CiAJICogTkI6IEhhdmUgdG8gcHJldmVudCBjb25jdXJyZW50IHRydW5jYXRpb24sIHdlIG1p Z2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTI1NTAsNyArMjQ0NSw2IEBAIFNldE9mZnNldFZh Y3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAluZXh0T2Zmc2V0ID0gTXVsdGlYYWN0U3Rh dGUtPm5leHRPZmZzZXQ7CiAJcHJldk9sZGVzdE9mZnNldEtub3duID0gTXVsdGlYYWN0U3Rh dGUtPm9sZGVzdE9mZnNldEtub3duOwogCXByZXZPbGRlc3RPZmZzZXQgPSBNdWx0aVhhY3RT dGF0ZS0+b2xkZXN0T2Zmc2V0OwotCXByZXZPZmZzZXRTdG9wTGltaXQgPSBNdWx0aVhhY3RT dGF0ZS0+b2Zmc2V0U3RvcExpbWl0OwogCUFzc2VydChNdWx0aVhhY3RTdGF0ZS0+ZmluaXNo ZWRTdGFydHVwKTsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwogCkBAIC0y NTgxLDEzICsyNDc1LDkgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVw KQogCQlvbGRlc3RPZmZzZXRLbm93biA9CiAJCQlmaW5kX211bHRpeGFjdF9zdGFydChvbGRl c3RNdWx0aVhhY3RJZCwgJm9sZGVzdE9mZnNldCk7CiAKLQkJaWYgKG9sZGVzdE9mZnNldEtu b3duKQotCQkJZXJlcG9ydChERUJVRzEsCi0JCQkJCShlcnJtc2dfaW50ZXJuYWwoIm9sZGVz dCBNdWx0aVhhY3RJZCBtZW1iZXIgaXMgYXQgb2Zmc2V0ICV1IiwKLQkJCQkJCQkJCSBvbGRl c3RPZmZzZXQpKSk7Ci0JCWVsc2UKKwkJaWYgKCFvbGRlc3RPZmZzZXRLbm93bikKIAkJCWVy ZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJNdWx0aVhhY3QgbWVtYmVyIHdyYXBhcm91bmQg cHJvdGVjdGlvbnMgYXJlIGRpc2FibGVkIGJlY2F1c2Ugb2xkZXN0IGNoZWNrcG9pbnRlZCBN dWx0aVhhY3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCisJCQkJCShlcnJtc2coIm9s ZGVzdCBjaGVja3BvaW50ZWQgTXVsdGlYYWN0ICV1IGRvZXMgbm90IGV4aXN0IG9uIGRpc2si LAogCQkJCQkJCW9sZGVzdE11bHRpWGFjdElkKSkpOwogCX0KIApAQCAtMjU5Nyw5NyArMjQ4 NywzMiBAQCBTZXRPZmZzZXRWYWN1dW1MaW1pdChib29sIGlzX3N0YXJ0dXApCiAJICogSWYg d2UgY2FuLCBjb21wdXRlIGxpbWl0cyAoYW5kIGluc3RhbGwgdGhlbSBNdWx0aVhhY3RTdGF0 ZSkgdG8gcHJldmVudAogCSAqIG92ZXJydW4gb2Ygb2xkIGRhdGEgaW4gdGhlIG1lbWJlcnMg U0xSVSBhcmVhLiBXZSBjYW4gb25seSBkbyBzbyBpZiB0aGUKIAkgKiBvbGRlc3Qgb2Zmc2V0 IGlzIGtub3duIHRob3VnaC4KKwkgKgorCSAqIEZJWE1FOiBJcyAhb2xkZXN0T2Zmc2V0S25v d24gcG9zc2libGUgYW55bW9yZT8gQXQgbGVhc3QgdXBkYXRlIHRoZSBjb21tZW50OgorCSAq IHdlIHdvbid0IG92ZXJydW4gbWVtYmVycyBhbnltb3JlLgogCSAqLwotCWlmIChvbGRlc3RP ZmZzZXRLbm93bikKLQl7Ci0JCS8qIG1vdmUgYmFjayB0byBzdGFydCBvZiB0aGUgY29ycmVz cG9uZGluZyBzZWdtZW50ICovCi0JCW9mZnNldFN0b3BMaW1pdCA9IG9sZGVzdE9mZnNldCAt IChvbGRlc3RPZmZzZXQgJQotCQkJCQkJCQkJCSAgKE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9Q QUdFICogU0xSVV9QQUdFU19QRVJfU0VHTUVOVCkpOwotCi0JCS8qIGFsd2F5cyBsZWF2ZSBv bmUgc2VnbWVudCBiZWZvcmUgdGhlIHdyYXBhcm91bmQgcG9pbnQgKi8KLQkJb2Zmc2V0U3Rv cExpbWl0IC09IChNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRSAqIFNMUlVfUEFHRVNfUEVS X1NFR01FTlQpOwotCi0JCWlmICghcHJldk9sZGVzdE9mZnNldEtub3duICYmICFpc19zdGFy dHVwKQotCQkJZXJlcG9ydChMT0csCi0JCQkJCShlcnJtc2coIk11bHRpWGFjdCBtZW1iZXIg d3JhcGFyb3VuZCBwcm90ZWN0aW9ucyBhcmUgbm93IGVuYWJsZWQiKSkpOwotCi0JCWVyZXBv cnQoREVCVUcxLAotCQkJCShlcnJtc2dfaW50ZXJuYWwoIk11bHRpWGFjdCBtZW1iZXIgc3Rv cCBsaW1pdCBpcyBub3cgJXUgYmFzZWQgb24gTXVsdGlYYWN0ICV1IiwKLQkJCQkJCQkJIG9m ZnNldFN0b3BMaW1pdCwgb2xkZXN0TXVsdGlYYWN0SWQpKSk7Ci0JfQotCWVsc2UgaWYgKHBy ZXZPbGRlc3RPZmZzZXRLbm93bikKKwlpZiAocHJldk9sZGVzdE9mZnNldEtub3duKQogCXsK IAkJLyoKIAkJICogSWYgd2UgZmFpbGVkIHRvIGdldCB0aGUgb2xkZXN0IG9mZnNldCB0aGlz IHRpbWUsIGJ1dCB3ZSBoYXZlIGEKIAkJICogdmFsdWUgZnJvbSBhIHByZXZpb3VzIHBhc3Mg dGhyb3VnaCB0aGlzIGZ1bmN0aW9uLCB1c2UgdGhlIG9sZAotCQkgKiB2YWx1ZXMgcmF0aGVy IHRoYW4gYXV0b21hdGljYWxseSBmb3JjaW5nIGFuIGVtZXJnZW5jeSBhdXRvdmFjdXVtCi0J CSAqIGN5Y2xlIGFnYWluLgorCQkgKiB2YWx1ZXMgcmF0aGVyIHRoYW4gYXV0b21hdGljYWxs eSBmb3JjaW5nIGFuIGF1dG92YWN1dW0gY3ljbGUgYWdhaW4uCiAJCSAqLwogCQlvbGRlc3RP ZmZzZXQgPSBwcmV2T2xkZXN0T2Zmc2V0OwogCQlvbGRlc3RPZmZzZXRLbm93biA9IHRydWU7 Ci0JCW9mZnNldFN0b3BMaW1pdCA9IHByZXZPZmZzZXRTdG9wTGltaXQ7CiAJfQogCiAJLyog SW5zdGFsbCB0aGUgY29tcHV0ZWQgdmFsdWVzICovCiAJTFdMb2NrQWNxdWlyZShNdWx0aVhh Y3RHZW5Mb2NrLCBMV19FWENMVVNJVkUpOwogCU11bHRpWGFjdFN0YXRlLT5vbGRlc3RPZmZz ZXQgPSBvbGRlc3RPZmZzZXQ7CiAJTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3du ID0gb2xkZXN0T2Zmc2V0S25vd247Ci0JTXVsdGlYYWN0U3RhdGUtPm9mZnNldFN0b3BMaW1p dCA9IG9mZnNldFN0b3BMaW1pdDsKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdEdlbkxvY2sp OwogCiAJLyoKLQkgKiBEbyB3ZSBuZWVkIGFuIGVtZXJnZW5jeSBhdXRvdmFjdXVtPwlJZiB3 ZSdyZSBub3Qgc3VyZSwgYXNzdW1lIHllcy4KKwkgKiBEbyB3ZSBuZWVkIGF1dG92YWN1dW0/ CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwogCXJldHVybiAhb2xkZXN0 T2Zmc2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhB Q1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsKLX0KLQotLyoKLSAqIFJldHVybiB3aGV0aGVy IGFkZGluZyAiZGlzdGFuY2UiIHRvICJzdGFydCIgd291bGQgbW92ZSBwYXN0ICJib3VuZGFy eSIuCi0gKgotICogV2UgdXNlIHRoaXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIGFkZGl0 aW9uIGlzICJ3cmFwcGluZyBhcm91bmQiIHRoZQotICogYm91bmRhcnkgcG9pbnQsIGhlbmNl IHRoZSBuYW1lLiAgVGhlIHJlYXNvbiB3ZSBkb24ndCB3YW50IHRvIHVzZSB0aGUgcmVndWxh cgotICogMl4zMS1tb2R1bG8gYXJpdGhtZXRpYyBoZXJlIGlzIHRoYXQgd2Ugd2FudCB0byBi ZSBhYmxlIHRvIHVzZSB0aGUgd2hvbGUgb2YKLSAqIHRoZSAyXjMyLTEgc3BhY2UgaGVyZSwg YWxsb3dpbmcgZm9yIG1vcmUgbXVsdGl4YWN0cyB0aGFuIHdvdWxkIGZpdAotICogb3RoZXJ3 aXNlLgotICovCi1zdGF0aWMgYm9vbAotTXVsdGlYYWN0T2Zmc2V0V291bGRXcmFwKE11bHRp WGFjdE9mZnNldCBib3VuZGFyeSwgTXVsdGlYYWN0T2Zmc2V0IHN0YXJ0LAotCQkJCQkJIHVp bnQzMiBkaXN0YW5jZSkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgZmluaXNoOwotCi0JLyoKLQkg KiBOb3RlIHRoYXQgb2Zmc2V0IG51bWJlciAwIGlzIG5vdCB1c2VkIChzZWUgR2V0TXVsdGlY YWN0SWRNZW1iZXJzKSwgc28KLQkgKiBpZiB0aGUgYWRkaXRpb24gd3JhcHMgYXJvdW5kIHRo ZSBVSU5UX01BWCBib3VuZGFyeSwgc2tpcCB0aGF0IHZhbHVlLgotCSAqLwotCWZpbmlzaCA9 IHN0YXJ0ICsgZGlzdGFuY2U7Ci0JaWYgKGZpbmlzaCA8IHN0YXJ0KQotCQlmaW5pc2grKzsK LQotCS8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBpcyBudW1l cmljYWxseSBncmVhdGVyIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50LCBhbnkKLQkgKiB2YWx1 ZSBudW1lcmljYWxseSBiZXR3ZWVuIHRoZSB0d28gaXMgbm90IHdyYXBwZWQ6Ci0JICoKLQkg Kgk8LS0tLVMtLS0tQi0tLS0+Ci0JICoJWy0tLSkJCQkgPSBGIHdyYXBwZWQgcGFzdCBCIChh bmQgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiBub3Qgd3JhcHBlZAotCSAqCQkJICBb LS0tLV0gPSBGIHdyYXBwZWQgcGFzdCBCCi0JICoKLQkgKiBXaGVuIHRoZSBib3VuZGFyeSBp cyBudW1lcmljYWxseSBsZXNzIHRoYW4gdGhlIHN0YXJ0aW5nIHBvaW50IChpLmUuIHRoZQot CSAqIFVJTlRfTUFYIHdyYXBhcm91bmQgb2NjdXJzIHNvbWV3aGVyZSBpbiBiZXR3ZWVuKSB0 aGVuIGFsbCB2YWx1ZXMgaW4KLQkgKiBiZXR3ZWVuIGFyZSB3cmFwcGVkOgotCSAqCi0JICoJ PC0tLS1CLS0tLVMtLS0tPgotCSAqCVstLS0pCQkJID0gRiBub3Qgd3JhcHBlZCBwYXN0IEIg KGJ1dCB3cmFwcGVkIHBhc3QgVUlOVF9NQVgpCi0JICoJCSBbLS0tKQkJID0gRiB3cmFwcGVk IHBhc3QgQiAoYW5kIFVJTlRfTUFYKQotCSAqCQkJICBbLS0tLV0gPSBGIG5vdCB3cmFwcGVk Ci0JICotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQotCSAqLwotCWlmIChzdGFydCA8IGJvdW5kYXJ5KQot CQlyZXR1cm4gZmluaXNoID49IGJvdW5kYXJ5IHx8IGZpbmlzaCA8IHN0YXJ0OwotCWVsc2UK LQkJcmV0dXJuIGZpbmlzaCA+PSBib3VuZGFyeSAmJiBmaW5pc2ggPCBzdGFydDsKKwkJKG5l eHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBNVUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhS RVNIT0xEKTsKIH0KIAogLyoKQEAgLTI3MjcsNiArMjU1Miw3IEBAIGZpbmRfbXVsdGl4YWN0 X3N0YXJ0KE11bHRpWGFjdElkIG11bHRpLCBNdWx0aVhhY3RPZmZzZXQgKnJlc3VsdCkKIAlv ZmZwdHIgPSAoTXVsdGlYYWN0T2Zmc2V0ICopIE11bHRpWGFjdE9mZnNldEN0bC0+c2hhcmVk LT5wYWdlX2J1ZmZlcltzbG90bm9dOwogCW9mZnB0ciArPSBlbnRyeW5vOwogCW9mZnNldCA9 ICpvZmZwdHI7CisKIAlMV0xvY2tSZWxlYXNlKFNpbXBsZUxydUdldEJhbmtMb2NrKE11bHRp WGFjdE9mZnNldEN0bCwgcGFnZW5vKSk7CiAKIAkqcmVzdWx0ID0gb2Zmc2V0OwpAQCAtMjc3 NCw3MyArMjYwMCw2IEBAIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhhY3RzLCBN dWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCiAJcmV0dXJuIHRydWU7CiB9CiAKLS8qCi0gKiBN dWx0aXhhY3QgbWVtYmVycyBjYW4gYmUgcmVtb3ZlZCBvbmNlIHRoZSBtdWx0aXhhY3RzIHRo YXQgcmVmZXIgdG8gdGhlbQotICogYXJlIG9sZGVyIHRoYW4gZXZlcnkgZGF0bWlubXhpZC4g IGF1dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlIGFuZAotICogdmFjdXVtX211 bHRpeGFjdF9mcmVlemVfdGFibGVfYWdlIHdvcmsgdG9nZXRoZXIgdG8gbWFrZSBzdXJlIHdl IG5ldmVyIGhhdmUKLSAqIHRvbyBtYW55IG11bHRpeGFjdHM7IHdlIGhvcGUgdGhhdCwgYXQg bGVhc3QgdW5kZXIgbm9ybWFsIGNpcmN1bXN0YW5jZXMsCi0gKiB0aGlzIHdpbGwgYWxzbyBi ZSBzdWZmaWNpZW50IHRvIGtlZXAgdXMgZnJvbSB1c2luZyB0b28gbWFueSBvZmZzZXRzLgot ICogSG93ZXZlciwgaWYgdGhlIGF2ZXJhZ2UgbXVsdGl4YWN0IGhhcyBtYW55IG1lbWJlcnMs IHdlIG1pZ2h0IGV4aGF1c3QgdGhlCi0gKiBtZW1iZXJzIHNwYWNlIHdoaWxlIHN0aWxsIHVz aW5nIGZldyBlbm91Z2ggbWVtYmVycyB0aGF0IHRoZXNlIGxpbWl0cyBmYWlsCi0gKiB0byB0 cmlnZ2VyIHJlbG1pbm14aWQgYWR2YW5jZW1lbnQgYnkgVkFDVVVNLiAgQXQgdGhhdCBwb2lu dCwgd2UnZCBoYXZlIG5vCi0gKiBjaG9pY2UgYnV0IHRvIHN0YXJ0IGZhaWxpbmcgbXVsdGl4 YWN0LWNyZWF0aW5nIG9wZXJhdGlvbnMgd2l0aCBhbiBlcnJvci4KLSAqCi0gKiBUbyBwcmV2 ZW50IHRoYXQsIGlmIG1vcmUgdGhhbiBhIHRocmVzaG9sZCBwb3J0aW9uIG9mIHRoZSBtZW1i ZXJzIHNwYWNlIGlzCi0gKiB1c2VkLCB3ZSBlZmZlY3RpdmVseSByZWR1Y2UgYXV0b3ZhY3V1 bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgYW5kCi0gKiB0byBhIHZhbHVlIGp1c3QgbGVz cyB0aGFuIHRoZSBudW1iZXIgb2YgbXVsdGl4YWN0cyBpbiB1c2UuICBXZSBob3BlIHRoYXQK LSAqIHRoaXMgd2lsbCBxdWlja2x5IHRyaWdnZXIgYXV0b3ZhY3V1bWluZyBvbiB0aGUgdGFi bGUgb3IgdGFibGVzIHdpdGggdGhlCi0gKiBvbGRlc3QgcmVsbWlubXhpZCwgdGh1cyBhbGxv d2luZyBkYXRtaW5teGlkIHZhbHVlcyB0byBhZHZhbmNlIGFuZCByZW1vdmluZwotICogc29t ZSBtZW1iZXJzLgotICoKLSAqIEFzIHRoZSBmcmFjdGlvbiBvZiB0aGUgbWVtYmVyIHNwYWNl IGN1cnJlbnRseSBpbiB1c2UgZ3Jvd3MsIHdlIGJlY29tZQotICogbW9yZSBhZ2dyZXNzaXZl IGluIGNsYW1waW5nIHRoaXMgdmFsdWUuICBUaGF0IG5vdCBvbmx5IGNhdXNlcyBhdXRvdmFj dXVtCi0gKiB0byByYW1wIHVwLCBidXQgYWxzbyBtYWtlcyBhbnkgbWFudWFsIHZhY3V1bXMg dGhlIHVzZXIgaXNzdWVzIG1vcmUKLSAqIGFnZ3Jlc3NpdmUuICBUaGlzIGhhcHBlbnMgYmVj YXVzZSB2YWN1dW1fZ2V0X2N1dG9mZnMoKSB3aWxsIGNsYW1wIHRoZQotICogZnJlZXplIHRh YmxlIGFuZCB0aGUgbWluaW11bSBmcmVlemUgYWdlIGN1dG9mZnMgYmFzZWQgb24gdGhlIGVm ZmVjdGl2ZQotICogYXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgdGhpcyBm dW5jdGlvbiByZXR1cm5zLiAgSW4gdGhlIHdvcnN0Ci0gKiBjYXNlLCB3ZSdsbCBjbGFpbSB0 aGUgZnJlZXplX21heF9hZ2UgdG8gemVybywgYW5kIGV2ZXJ5IHZhY3V1bSBvZiBhbnkKLSAq IHRhYmxlIHdpbGwgZnJlZXplIGV2ZXJ5IG11bHRpeGFjdC4KLSAqLwotaW50Ci1NdWx0aVhh Y3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgbWVt YmVyczsKLQl1aW50MzIJCW11bHRpeGFjdHM7Ci0JdWludDMyCQl2aWN0aW1fbXVsdGl4YWN0 czsKLQlkb3VibGUJCWZyYWN0aW9uOwotCWludAkJCXJlc3VsdDsKLQlNdWx0aVhhY3RJZCBv bGRlc3RNdWx0aVhhY3RJZDsKLQlNdWx0aVhhY3RPZmZzZXQgb2xkZXN0T2Zmc2V0OwotCi0J LyogSWYgd2UgY2FuJ3QgZGV0ZXJtaW5lIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiwgYXNz dW1lIHRoZSB3b3JzdC4gKi8KLQlpZiAoIUdldE11bHRpWGFjdEluZm8oJm11bHRpeGFjdHMs ICZtZW1iZXJzLCAmb2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQotCQlyZXR1 cm4gMDsKLQotCS8qIElmIG1lbWJlciBzcGFjZSB1dGlsaXphdGlvbiBpcyBsb3csIG5vIHNw ZWNpYWwgYWN0aW9uIGlzIHJlcXVpcmVkLiAqLwotCWlmIChtZW1iZXJzIDw9IE1VTFRJWEFD VF9NRU1CRVJfU0FGRV9USFJFU0hPTEQpCi0JCXJldHVybiBhdXRvdmFjdXVtX211bHRpeGFj dF9mcmVlemVfbWF4X2FnZTsKLQotCS8qCi0JICogQ29tcHV0ZSBhIHRhcmdldCBmb3IgcmVs bWlubXhpZCBhZHZhbmNlbWVudC4gIFRoZSBudW1iZXIgb2YgbXVsdGl4YWN0cwotCSAqIHdl IHRyeSB0byBlbGltaW5hdGUgZnJvbSB0aGUgc3lzdGVtIGlzIGJhc2VkIG9uIGhvdyBmYXIg d2UgYXJlIHBhc3QKLQkgKiBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xELgotCSAq LwotCWZyYWN0aW9uID0gKGRvdWJsZSkgKG1lbWJlcnMgLSBNVUxUSVhBQ1RfTUVNQkVSX1NB RkVfVEhSRVNIT0xEKSAvCi0JCShNVUxUSVhBQ1RfTUVNQkVSX0RBTkdFUl9USFJFU0hPTEQg LSBNVUxUSVhBQ1RfTUVNQkVSX1NBRkVfVEhSRVNIT0xEKTsKLQl2aWN0aW1fbXVsdGl4YWN0 cyA9IG11bHRpeGFjdHMgKiBmcmFjdGlvbjsKLQotCS8qIGZyYWN0aW9uIGNvdWxkIGJlID4g MS4wLCBidXQgbG93ZXN0IHBvc3NpYmxlIGZyZWV6ZSBhZ2UgaXMgemVybyAqLwotCWlmICh2 aWN0aW1fbXVsdGl4YWN0cyA+IG11bHRpeGFjdHMpCi0JCXJldHVybiAwOwotCXJlc3VsdCA9 IG11bHRpeGFjdHMgLSB2aWN0aW1fbXVsdGl4YWN0czsKLQotCS8qCi0JICogQ2xhbXAgdG8g YXV0b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIHNvIHRoYXQgd2UgbmV2ZXIg bWFrZQotCSAqIGF1dG92YWN1dW0gbGVzcyBhZ2dyZXNzaXZlIHRoYW4gaXQgd291bGQgb3Ro ZXJ3aXNlIGJlLgotCSAqLwotCXJldHVybiBNaW4ocmVzdWx0LCBhdXRvdmFjdXVtX211bHRp eGFjdF9mcmVlemVfbWF4X2FnZSk7Ci19Ci0KIHR5cGVkZWYgc3RydWN0IG14dHJ1bmNpbmZv CiB7CiAJaW50NjQJCWVhcmxpZXN0RXhpc3RpbmdQYWdlOwpAQCAtMjg2NywzNiArMjYyNiwx MiBAQCBTbHJ1U2NhbkRpckNiRmluZEVhcmxpZXN0KFNscnVDdGwgY3RsLCBjaGFyICpmaWxl bmFtZSwgaW50NjQgc2VncGFnZSwgdm9pZCAqZGF0YQogCiAvKgogICogRGVsZXRlIG1lbWJl cnMgc2VnbWVudHMgW29sZGVzdCwgbmV3T2xkZXN0KQotICoKLSAqIFRoZSBtZW1iZXJzIFNM UlUgY2FuLCBpbiBjb250cmFzdCB0byB0aGUgb2Zmc2V0cyBvbmUsIGJlIGZpbGxlZCB0byBh bG1vc3QKLSAqIHRoZSBmdWxsIHJhbmdlIGF0IG9uY2UuIFRoaXMgbWVhbnMgU2ltcGxlTHJ1 VHJ1bmNhdGUoKSBjYW4ndCB0cml2aWFsbHkgYmUKLSAqIHVzZWQgLSBpbnN0ZWFkIHRoZSB0 by1iZS1kZWxldGVkIHJhbmdlIGlzIGNvbXB1dGVkIHVzaW5nIHRoZSBvZmZzZXRzCi0gKiBT TFJVLiBDLmYuIFRydW5jYXRlTXVsdGlYYWN0KCkuCiAgKi8KIHN0YXRpYyB2b2lkCiBQZXJm b3JtTWVtYmVyc1RydW5jYXRpb24oTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNldCwgTXVs dGlYYWN0T2Zmc2V0IG5ld09sZGVzdE9mZnNldCkKIHsKLQljb25zdCBpbnQ2NCBtYXhzZWdt ZW50ID0gTVhPZmZzZXRUb01lbWJlclNlZ21lbnQoTWF4TXVsdGlYYWN0T2Zmc2V0KTsKLQlp bnQ2NAkJc3RhcnRzZWdtZW50ID0gTVhPZmZzZXRUb01lbWJlclNlZ21lbnQob2xkZXN0T2Zm c2V0KTsKLQlpbnQ2NAkJZW5kc2VnbWVudCA9IE1YT2Zmc2V0VG9NZW1iZXJTZWdtZW50KG5l d09sZGVzdE9mZnNldCk7Ci0JaW50NjQJCXNlZ21lbnQgPSBzdGFydHNlZ21lbnQ7Ci0KLQkv KgotCSAqIERlbGV0ZSBhbGwgdGhlIHNlZ21lbnRzIGJ1dCB0aGUgbGFzdCBvbmUuIFRoZSBs YXN0IHNlZ21lbnQgY2FuIHN0aWxsCi0JICogY29udGFpbiwgcG9zc2libHkgcGFydGlhbGx5 LCB2YWxpZCBkYXRhLgotCSAqLwotCXdoaWxlIChzZWdtZW50ICE9IGVuZHNlZ21lbnQpCi0J ewotCQllbG9nKERFQlVHMiwgInRydW5jYXRpbmcgbXVsdGl4YWN0IG1lbWJlcnMgc2VnbWVu dCAlIiBQUkl4NjQsCi0JCQkgc2VnbWVudCk7Ci0JCVNscnVEZWxldGVTZWdtZW50KE11bHRp WGFjdE1lbWJlckN0bCwgc2VnbWVudCk7Ci0KLQkJLyogbW92ZSB0byBuZXh0IHNlZ21lbnQs IGhhbmRsaW5nIHdyYXBhcm91bmQgY29ycmVjdGx5ICovCi0JCWlmIChzZWdtZW50ID09IG1h eHNlZ21lbnQpCi0JCQlzZWdtZW50ID0gMDsKLQkJZWxzZQotCQkJc2VnbWVudCArPSAxOwot CX0KKwlTaW1wbGVMcnVUcnVuY2F0ZShNdWx0aVhhY3RNZW1iZXJDdGwsCisJCQkJCSAgTVhP ZmZzZXRUb01lbWJlclBhZ2UobmV3T2xkZXN0T2Zmc2V0KSk7CiB9CiAKIC8qCkBAIC0zMDQw LDcgKzI3NzUsNyBAQCBUcnVuY2F0ZU11bHRpWGFjdChNdWx0aVhhY3RJZCBuZXdPbGRlc3RN dWx0aSwgT2lkIG5ld09sZGVzdE11bHRpREIpCiAKIAllbG9nKERFQlVHMSwgInBlcmZvcm1p bmcgbXVsdGl4YWN0IHRydW5jYXRpb246ICIKIAkJICJvZmZzZXRzIFsldSwgJXUpLCBvZmZz ZXRzIHNlZ21lbnRzIFslIiBQUkl4NjQgIiwgJSIgUFJJeDY0ICIpLCAiCi0JCSAibWVtYmVy cyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAi KSIsCisJCSAibWVtYmVycyBbJSIgUFJJdTY0ICIsICUiIFBSSXU2NCAiKSwgbWVtYmVycyBz ZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2NCAiKSIsCiAJCSBvbGRlc3RNdWx0aSwg bmV3T2xkZXN0TXVsdGksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChvbGRlc3RN dWx0aSksCiAJCSBNdWx0aVhhY3RJZFRvT2Zmc2V0U2VnbWVudChuZXdPbGRlc3RNdWx0aSks CkBAIC0zMTIwLDIwICsyODU1LDEzIEBAIE11bHRpWGFjdE9mZnNldFBhZ2VQcmVjZWRlcyhp bnQ2NCBwYWdlMSwgaW50NjQgcGFnZTIpCiAKIC8qCiAgKiBEZWNpZGUgd2hldGhlciBhIE11 bHRpWGFjdE1lbWJlciBwYWdlIG51bWJlciBpcyAib2xkZXIiIGZvciB0cnVuY2F0aW9uCi0g KiBwdXJwb3Nlcy4gIFRoZXJlIGlzIG5vICJpbnZhbGlkIG9mZnNldCBudW1iZXIiIHNvIHVz ZSB0aGUgbnVtYmVycyB2ZXJiYXRpbS4KKyAqIHB1cnBvc2VzLiAgVGhlcmUgaXMgbm8gImlu dmFsaWQgb2Zmc2V0IG51bWJlciIgYW5kIG1lbWJlcnMgbmV2ZXIgd3JhcAorICogYXJvdW5k LCBzbyB1c2UgdGhlIG51bWJlcnMgdmVyYmF0aW0uCiAgKi8KIHN0YXRpYyBib29sCiBNdWx0 aVhhY3RNZW1iZXJQYWdlUHJlY2VkZXMoaW50NjQgcGFnZTEsIGludDY0IHBhZ2UyKQogewot CU11bHRpWGFjdE9mZnNldCBvZmZzZXQxOwotCU11bHRpWGFjdE9mZnNldCBvZmZzZXQyOwot Ci0Jb2Zmc2V0MSA9ICgoTXVsdGlYYWN0T2Zmc2V0KSBwYWdlMSkgKiBNVUxUSVhBQ1RfTUVN QkVSU19QRVJfUEFHRTsKLQlvZmZzZXQyID0gKChNdWx0aVhhY3RPZmZzZXQpIHBhZ2UyKSAq IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOwotCi0JcmV0dXJuIChNdWx0aVhhY3RPZmZz ZXRQcmVjZWRlcyhvZmZzZXQxLCBvZmZzZXQyKSAmJgotCQkJTXVsdGlYYWN0T2Zmc2V0UHJl Y2VkZXMob2Zmc2V0MSwKLQkJCQkJCQkJCW9mZnNldDIgKyBNVUxUSVhBQ1RfTUVNQkVSU19Q RVJfUEFHRSAtIDEpKTsKKwlyZXR1cm4gcGFnZTEgPCBwYWdlMjsKIH0KIAogLyoKQEAgLTMx NzEsNyArMjg5OSw3IEBAIE11bHRpWGFjdElkUHJlY2VkZXNPckVxdWFscyhNdWx0aVhhY3RJ ZCBtdWx0aTEsIE11bHRpWGFjdElkIG11bHRpMikKIHN0YXRpYyBib29sCiBNdWx0aVhhY3RP ZmZzZXRQcmVjZWRlcyhNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0MSwgTXVsdGlYYWN0T2Zmc2V0 IG9mZnNldDIpCiB7Ci0JaW50MzIJCWRpZmYgPSAoaW50MzIpIChvZmZzZXQxIC0gb2Zmc2V0 Mik7CisJaW50NjQJCWRpZmYgPSAoaW50NjQpIChvZmZzZXQxIC0gb2Zmc2V0Mik7CiAKIAly ZXR1cm4gKGRpZmYgPCAwKTsKIH0KQEAgLTMyNjgsNyArMjk5Niw3IEBAIG11bHRpeGFjdF9y ZWRvKFhMb2dSZWFkZXJTdGF0ZSAqcmVjb3JkKQogCiAJCWVsb2coREVCVUcxLCAicmVwbGF5 aW5nIG11bHRpeGFjdCB0cnVuY2F0aW9uOiAiCiAJCQkgIm9mZnNldHMgWyV1LCAldSksIG9m ZnNldHMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIiksICIKLQkJCSAibWVt YmVycyBbJXUsICV1KSwgbWVtYmVycyBzZWdtZW50cyBbJSIgUFJJeDY0ICIsICUiIFBSSXg2 NCAiKSIsCisJCQkgIm1lbWJlcnMgWyUiIFBSSXU2NCAiLCAlIiBQUkl1NjQgIiksIG1lbWJl cnMgc2VnbWVudHMgWyUiIFBSSXg2NCAiLCAlIiBQUkl4NjQgIikiLAogCQkJIHhscmVjLnN0 YXJ0VHJ1bmNPZmYsIHhscmVjLmVuZFRydW5jT2ZmLAogCQkJIE11bHRpWGFjdElkVG9PZmZz ZXRTZWdtZW50KHhscmVjLnN0YXJ0VHJ1bmNPZmYpLAogCQkJIE11bHRpWGFjdElkVG9PZmZz ZXRTZWdtZW50KHhscmVjLmVuZFRydW5jT2ZmKSwKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L2FjY2Vzcy90cmFuc2FtL3hsb2cuYyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hs b2cuYwppbmRleCAyMmQwYTJlOGMzYS4uZWY0MDVkNjZiM2IgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2cuYworKysgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS94bG9nLmMKQEAgLTUxMzksNyArNTEzOSw3IEBAIEJvb3RTdHJhcFhMT0codWlu dDMyIGRhdGFfY2hlY2tzdW1fdmVyc2lvbikKIAkJRnVsbFRyYW5zYWN0aW9uSWRGcm9tRXBv Y2hBbmRYaWQoMCwgRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkKTsKIAljaGVja1BvaW50Lm5l eHRPaWQgPSBGaXJzdEdlbmJraU9iamVjdElkOwogCWNoZWNrUG9pbnQubmV4dE11bHRpID0g Rmlyc3RNdWx0aVhhY3RJZDsKLQljaGVja1BvaW50Lm5leHRNdWx0aU9mZnNldCA9IDA7CisJ Y2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQgPSAxOwogCWNoZWNrUG9pbnQub2xkZXN0WGlk ID0gRmlyc3ROb3JtYWxUcmFuc2FjdGlvbklkOwogCWNoZWNrUG9pbnQub2xkZXN0WGlkREIg PSBUZW1wbGF0ZTFEYk9pZDsKIAljaGVja1BvaW50Lm9sZGVzdE11bHRpID0gRmlyc3RNdWx0 aVhhY3RJZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL3hsb2dy ZWNvdmVyeS5jIGIvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0veGxvZ3JlY292ZXJ5LmMK aW5kZXggZWRkYzIyZmM1YWQuLjVkZDI1Y2YyZGZjIDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYworKysgYi9zcmMvYmFja2VuZC9hY2Nl c3MvdHJhbnNhbS94bG9ncmVjb3ZlcnkuYwpAQCAtODg2LDcgKzg4Niw3IEBAIEluaXRXYWxS ZWNvdmVyeShDb250cm9sRmlsZURhdGEgKkNvbnRyb2xGaWxlLCBib29sICp3YXNTaHV0ZG93 bl9wdHIsCiAJCQkJCQkJIFU2NEZyb21GdWxsVHJhbnNhY3Rpb25JZChjaGVja1BvaW50Lm5l eHRYaWQpLAogCQkJCQkJCSBjaGVja1BvaW50Lm5leHRPaWQpKSk7CiAJZXJlcG9ydChERUJV RzEsCi0JCQkoZXJybXNnX2ludGVybmFsKCJuZXh0IE11bHRpWGFjdElkOiAldTsgbmV4dCBN dWx0aVhhY3RPZmZzZXQ6ICV1IiwKKwkJCShlcnJtc2dfaW50ZXJuYWwoIm5leHQgTXVsdGlY YWN0SWQ6ICV1OyBuZXh0IE11bHRpWGFjdE9mZnNldDogJSIgUFJJdTY0LAogCQkJCQkJCSBj aGVja1BvaW50Lm5leHRNdWx0aSwgY2hlY2tQb2ludC5uZXh0TXVsdGlPZmZzZXQpKSk7CiAJ ZXJlcG9ydChERUJVRzEsCiAJCQkoZXJybXNnX2ludGVybmFsKCJvbGRlc3QgdW5mcm96ZW4g dHJhbnNhY3Rpb24gSUQ6ICV1LCBpbiBkYXRhYmFzZSAldSIsCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9jb21tYW5kcy92YWN1dW0uYyBiL3NyYy9iYWNrZW5kL2NvbW1hbmRzL3ZhY3V1 bS5jCmluZGV4IGVkMDNlM2JkNTBkLi4yNTllZjYwYmQzMSAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvY29tbWFuZHMvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvY29tbWFuZHMvdmFj dXVtLmMKQEAgLTExNDcsNyArMTE0Nyw3IEBAIHZhY3V1bV9nZXRfY3V0b2ZmcyhSZWxhdGlv biByZWwsIGNvbnN0IFZhY3V1bVBhcmFtcyBwYXJhbXMsCiAJICogbm9ybWFsbHkgYXV0b3Zh Y3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UsIGJ1dCBtYXkgYmUgbGVzcyBpZiB3ZSBh cmUKIAkgKiBzaG9ydCBvZiBtdWx0aXhhY3QgbWVtYmVyIHNwYWNlLgogCSAqLwotCWVmZmVj dGl2ZV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2UgPSBNdWx0aVhhY3RNZW1iZXJGcmVlemVU aHJlc2hvbGQoKTsKKwllZmZlY3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gYXV0 b3ZhY3V1bV9tdWx0aXhhY3RfZnJlZXplX21heF9hZ2U7CiAKIAkvKgogCSAqIEFsbW9zdCBy ZWFkeSB0byBzZXQgZnJlZXplIG91dHB1dCBwYXJhbWV0ZXJzOyBjaGVjayBpZiBPbGRlc3RY bWluIG9yCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wb3N0bWFzdGVyL2F1dG92YWN1dW0u YyBiL3NyYy9iYWNrZW5kL3Bvc3RtYXN0ZXIvYXV0b3ZhY3V1bS5jCmluZGV4IGVkMTljNzRi YjE5Li4zNDkwOWVlNTRmZiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9h dXRvdmFjdXVtLmMKKysrIGIvc3JjL2JhY2tlbmQvcG9zdG1hc3Rlci9hdXRvdmFjdXVtLmMK QEAgLTExNTEsNyArMTE1MSw3IEBAIGRvX3N0YXJ0X3dvcmtlcih2b2lkKQogCiAJLyogQWxz byBkZXRlcm1pbmUgdGhlIG9sZGVzdCBkYXRtaW5teGlkIHdlIHdpbGwgY29uc2lkZXIuICov CiAJcmVjZW50TXVsdGkgPSBSZWFkTmV4dE11bHRpWGFjdElkKCk7Ci0JbXVsdGlGb3JjZUxp bWl0ID0gcmVjZW50TXVsdGkgLSBNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQoKTsK KwltdWx0aUZvcmNlTGltaXQgPSByZWNlbnRNdWx0aSAtIGF1dG92YWN1dW1fbXVsdGl4YWN0 X2ZyZWV6ZV9tYXhfYWdlOwogCWlmIChtdWx0aUZvcmNlTGltaXQgPCBGaXJzdE11bHRpWGFj dElkKQogCQltdWx0aUZvcmNlTGltaXQgLT0gRmlyc3RNdWx0aVhhY3RJZDsKIApAQCAtMTkz OSw3ICsxOTM5LDcgQEAgZG9fYXV0b3ZhY3V1bSh2b2lkKQogCSAqIG5vcm1hbGx5IGF1dG92 YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlLCBidXQgbWF5IGJlIGxlc3MgaWYgd2Ug YXJlCiAJICogc2hvcnQgb2YgbXVsdGl4YWN0IG1lbWJlciBzcGFjZS4KIAkgKi8KLQllZmZl Y3RpdmVfbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlID0gTXVsdGlYYWN0TWVtYmVyRnJlZXpl VGhyZXNob2xkKCk7CisJZWZmZWN0aXZlX211bHRpeGFjdF9mcmVlemVfbWF4X2FnZSA9IGF1 dG92YWN1dW1fbXVsdGl4YWN0X2ZyZWV6ZV9tYXhfYWdlOwogCiAJLyoKIAkgKiBGaW5kIHRo ZSBwZ19kYXRhYmFzZSBlbnRyeSBhbmQgc2VsZWN0IHRoZSBkZWZhdWx0IGZyZWV6ZSBhZ2Vz LiBXZSB1c2UKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJv bGRhdGEuYyBiL3NyYy9iaW4vcGdfY29udHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYwppbmRl eCAzMGFkNDY5MTJlMS4uYTQwNjAzMDlhZTAgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfY29u dHJvbGRhdGEvcGdfY29udHJvbGRhdGEuYworKysgYi9zcmMvYmluL3BnX2NvbnRyb2xkYXRh L3BnX2NvbnRyb2xkYXRhLmMKQEAgLTI3MSw3ICsyNzEsNyBAQCBtYWluKGludCBhcmdjLCBj aGFyICphcmd2W10pCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5uZXh0T2lk KTsKIAlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlYYWN0SWQ6ICAl dVxuIiksCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5uZXh0TXVsdGkpOwot CXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aU9mZnNldDogICV1XG4i KSwKKwlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAl IiBQUkl1NjQgIlxuIiksCiAJCSAgIENvbnRyb2xGaWxlLT5jaGVja1BvaW50Q29weS5uZXh0 TXVsdGlPZmZzZXQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJ RDogICAgICAgICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUtPmNoZWNrUG9pbnRDb3B5Lm9s ZGVzdFhpZCk7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2Fs LmMgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jlc2V0d2FsLmMKaW5kZXggYTMxZTc2NDNj ZjAuLjdjNmMyNzQxYTE3IDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3BnX3Jl c2V0d2FsLmMKKysrIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC9wZ19yZXNldHdhbC5jCkBAIC05 Miw2ICs5Miw3IEBAIHN0YXRpYyB2b2lkIEtpbGxFeGlzdGluZ0FyY2hpdmVTdGF0dXModm9p ZCk7CiBzdGF0aWMgdm9pZCBLaWxsRXhpc3RpbmdXQUxTdW1tYXJpZXModm9pZCk7CiBzdGF0 aWMgdm9pZCBXcml0ZUVtcHR5WExPRyh2b2lkKTsKIHN0YXRpYyB2b2lkIHVzYWdlKHZvaWQp Oworc3RhdGljIHVpbnQ2NCBzdHJ0b3U2NF9zdHJpY3QoY29uc3QgY2hhciAqcywgY2hhciAq KmVuZHB0ciwgaW50IGJhc2UpOwogCiAKIGludApAQCAtMTIwLDcgKzEyMSw2IEBAIG1haW4o aW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKIAlNdWx0aVhhY3RJZCBzZXRfb2xkZXN0bXhpZCA9 IDA7CiAJY2hhcgkgICAqZW5kcHRyOwogCWNoYXIJICAgKmVuZHB0cjI7Ci0JaW50NjQJCXRt cGk2NDsKIAljaGFyCSAgICpEYXRhRGlyID0gTlVMTDsKIAljaGFyCSAgICpsb2dfZm5hbWUg PSBOVUxMOwogCWludAkJCWZkOwpAQCAtMjY5LDE3ICsyNjksMTQgQEAgbWFpbihpbnQgYXJn YywgY2hhciAqYXJndltdKQogCiAJCQljYXNlICdPJzoKIAkJCQllcnJubyA9IDA7Ci0JCQkJ dG1waTY0ID0gc3RydG9pNjQob3B0YXJnLCAmZW5kcHRyLCAwKTsKKwkJCQlzZXRfbXhvZmYg PSBzdHJ0b3U2NF9zdHJpY3Qob3B0YXJnLCAmZW5kcHRyLCAwKTsKIAkJCQlpZiAoZW5kcHRy ID09IG9wdGFyZyB8fCAqZW5kcHRyICE9ICdcMCcgfHwgZXJybm8gIT0gMCkKIAkJCQl7CiAJ CQkJCXBnX2xvZ19lcnJvcigiaW52YWxpZCBhcmd1bWVudCBmb3Igb3B0aW9uICVzIiwgIi1P Iik7CiAJCQkJCXBnX2xvZ19lcnJvcl9oaW50KCJUcnkgXCIlcyAtLWhlbHBcIiBmb3IgbW9y ZSBpbmZvcm1hdGlvbi4iLCBwcm9nbmFtZSk7CiAJCQkJCWV4aXQoMSk7CiAJCQkJfQotCQkJ CWlmICh0bXBpNjQgPCAwIHx8IHRtcGk2NCA+IChpbnQ2NCkgTWF4TXVsdGlYYWN0T2Zmc2V0 KQotCQkJCQlwZ19mYXRhbCgibXVsdGl0cmFuc2FjdGlvbiBvZmZzZXQgKC1PKSBtdXN0IGJl IGJldHdlZW4gMCBhbmQgJXUiLCBNYXhNdWx0aVhhY3RPZmZzZXQpOwogCi0JCQkJc2V0X214 b2ZmID0gKE11bHRpWGFjdE9mZnNldCkgdG1waTY0OwogCQkJCW14b2ZmX2dpdmVuID0gdHJ1 ZTsKIAkJCQlicmVhazsKIApAQCAtNzQ5LDcgKzc0Niw3IEBAIFByaW50Q29udHJvbFZhbHVl cyhib29sIGd1ZXNzZWQpCiAJCSAgIENvbnRyb2xGaWxlLmNoZWNrUG9pbnRDb3B5Lm5leHRP aWQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIE5leHRNdWx0aVhhY3RJZDog ICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpKTsK LQlwcmludGYoXygiTGF0ZXN0IGNoZWNrcG9pbnQncyBOZXh0TXVsdGlPZmZzZXQ6ICAldVxu IiksCisJcHJpbnRmKF8oIkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0OiAg JSIgUFJJdTY0ICJcbiIpLAogCQkgICBDb250cm9sRmlsZS5jaGVja1BvaW50Q29weS5uZXh0 TXVsdGlPZmZzZXQpOwogCXByaW50ZihfKCJMYXRlc3QgY2hlY2twb2ludCdzIG9sZGVzdFhJ RDogICAgICAgICV1XG4iKSwKIAkJICAgQ29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkub2xk ZXN0WGlkKTsKQEAgLTgyNSw3ICs4MjIsNyBAQCBQcmludE5ld0NvbnRyb2xWYWx1ZXModm9p ZCkKIAogCWlmIChteG9mZl9naXZlbikKIAl7Ci0JCXByaW50ZihfKCJOZXh0TXVsdGlPZmZz ZXQ6ICAgICAgICAgICAgICAgICAgICAgICV1XG4iKSwKKwkJcHJpbnRmKF8oIk5leHRNdWx0 aU9mZnNldDogICAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTY0ICJcbiIpLAogCQkJICAg Q29udHJvbEZpbGUuY2hlY2tQb2ludENvcHkubmV4dE11bHRpT2Zmc2V0KTsKIAl9CiAKQEAg LTEyMTAsMyArMTIwNywyMiBAQCB1c2FnZSh2b2lkKQogCXByaW50ZihfKCJcblJlcG9ydCBi dWdzIHRvIDwlcz4uXG4iKSwgUEFDS0FHRV9CVUdSRVBPUlQpOwogCXByaW50ZihfKCIlcyBo b21lIHBhZ2U6IDwlcz5cbiIpLCBQQUNLQUdFX05BTUUsIFBBQ0tBR0VfVVJMKTsKIH0KKwor LyogTGlrZSBzdHJ0b3U2NCgpLCBidXQgbmVnYXRpdmUgdmFsdWVzIGFyZSBub3QgYWNjZXB0 ZWQuICovCitzdGF0aWMgdWludDY0CitzdHJ0b3U2NF9zdHJpY3QoY29uc3QgY2hhciAqcywg Y2hhciAqKmVuZHB0ciwgaW50IGJhc2UpCit7CisJLyogc2tpcCBsZWFkaW5nIHdoaXRlc3Bh Y2UgKi8KKwl3aGlsZSAoaXNzcGFjZSgqcykpCisJCXMrKzsKKworCS8qIHJlamVjdCBuZWdh dGl2ZSB2YWx1ZXMgKi8KKwlpZiAoKnMgPT0gJy0nKQorCXsKKwkJKmVuZHB0ciA9IChjaGFy ICopIHM7CisJCWVycm5vID0gRVJBTkdFOworCQlyZXR1cm4gVUlOVDY0X01BWDsKKwl9CisK KwlyZXR1cm4gc3RydG91NjQocywgZW5kcHRyLCBiYXNlKTsKK30KZGlmZiAtLWdpdCBhL3Ny Yy9iaW4vcGdfcmVzZXR3YWwvdC8wMDFfYmFzaWMucGwgYi9zcmMvYmluL3BnX3Jlc2V0d2Fs L3QvMDAxX2Jhc2ljLnBsCmluZGV4IDkwZWNiOGFmZTE4Li41YTE3NWUyODVkMSAxMDA2NDQK LS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwMV9iYXNpYy5wbAorKysgYi9zcmMvYmlu L3BnX3Jlc2V0d2FsL3QvMDAxX2Jhc2ljLnBsCkBAIC0xNDUsNyArMTQ1LDcgQEAgY29tbWFu ZF9mYWlsc19saWtlKAogCSdmYWlscyB3aXRoIGluY29ycmVjdCAtTyBvcHRpb24nKTsKIGNv bW1hbmRfZmFpbHNfbGlrZSgKIAlbICdwZ19yZXNldHdhbCcsICctTycgPT4gJy0xJywgJG5v ZGUtPmRhdGFfZGlyIF0sCi0JcXIvbXVzdCBiZSBiZXR3ZWVuIDAgYW5kIDQyOTQ5NjcyOTUv LAorCXFyL2Vycm9yOiBpbnZhbGlkIGFyZ3VtZW50IGZvciBvcHRpb24gLU8vLAogCSdmYWls cyB3aXRoIC1PIHZhbHVlIC0xJyk7CiAjIC0td2FsLXNlZ3NpemUKIGNvbW1hbmRfZmFpbHNf bGlrZSgKQEAgLTIxNSw3ICsyMTUsNyBAQCBwdXNoIEBjbWQsCiAgIHNwcmludGYoIiVkLCVk IiwgaGV4KCRmaWxlc1swXSkgPT0gMCA/IDMgOiBoZXgoJGZpbGVzWzBdKSwgaGV4KCRmaWxl c1stMV0pKTsKIAogQGZpbGVzID0gZ2V0X3NscnVfZmlsZXMoJ3BnX211bHRpeGFjdC9vZmZz ZXRzJyk7Ci0kbXVsdCA9IDMyICogJGJsY2tzeiAvIDQ7CiskbXVsdCA9IDMyICogJGJsY2tz eiAvIDg7CiAjIC0tbXVsdGl4YWN0LWlkcyBhcmd1bWVudCBpcyAibmV3LG9sZCIKIHB1c2gg QGNtZCwKICAgJy0tbXVsdGl4YWN0LWlkcycgPT4gc3ByaW50ZigiJWQsJWQiLApkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oIGIvc3JjL2luY2x1ZGUvYWNj ZXNzL211bHRpeGFjdC5oCmluZGV4IDgyZTRiYjkwZGQ1Li43ZDk4ZmUwZmUzMiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRpeGFjdC5oCisrKyBiL3NyYy9pbmNsdWRl L2FjY2Vzcy9tdWx0aXhhY3QuaApAQCAtMjgsOCArMjgsNiBAQAogCiAjZGVmaW5lIE11bHRp WGFjdElkSXNWYWxpZChtdWx0aSkgKChtdWx0aSkgIT0gSW52YWxpZE11bHRpWGFjdElkKQog Ci0jZGVmaW5lIE1heE11bHRpWGFjdE9mZnNldAkoKE11bHRpWGFjdE9mZnNldCkgMHhGRkZG RkZGRikKLQogLyoKICAqIFBvc3NpYmxlIG11bHRpeGFjdCBsb2NrIG1vZGVzICgic3RhdHVz IikuICBUaGUgZmlyc3QgZm91ciBtb2RlcyBhcmUgZm9yCiAgKiB0dXBsZSBsb2NrcyAoRk9S IEtFWSBTSEFSRSwgRk9SIFNIQVJFLCBGT1IgTk8gS0VZIFVQREFURSwgRk9SIFVQREFURSk7 IHRoZQpAQCAtMTQ3LDcgKzE0NSw2IEBAIGV4dGVybiB2b2lkIE11bHRpWGFjdFNldE5leHRN WGFjdChNdWx0aVhhY3RJZCBuZXh0TXVsdGksCiBleHRlcm4gdm9pZCBNdWx0aVhhY3RBZHZh bmNlTmV4dE1YYWN0KE11bHRpWGFjdElkIG1pbk11bHRpLAogCQkJCQkJCQkJICBNdWx0aVhh Y3RPZmZzZXQgbWluTXVsdGlPZmZzZXQpOwogZXh0ZXJuIHZvaWQgTXVsdGlYYWN0QWR2YW5j ZU9sZGVzdChNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aSwgT2lkIG9sZGVzdE11bHRpREIpOwot ZXh0ZXJuIGludAlNdWx0aVhhY3RNZW1iZXJGcmVlemVUaHJlc2hvbGQodm9pZCk7CiAKIGV4 dGVybiB2b2lkIG11bHRpeGFjdF90d29waGFzZV9yZWNvdmVyKEZ1bGxUcmFuc2FjdGlvbklk IGZ4aWQsIHVpbnQxNiBpbmZvLAogCQkJCQkJCQkJICAgdm9pZCAqcmVjZGF0YSwgdWludDMy IGxlbik7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVy bmFsLmggYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0X2ludGVybmFsLmgKaW5kZXgg OWI1NmRlYWVmMzEuLmIwMjI3NzU5ZTM5IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9hY2Nl c3MvbXVsdGl4YWN0X2ludGVybmFsLmgKKysrIGIvc3JjL2luY2x1ZGUvYWNjZXNzL211bHRp eGFjdF9pbnRlcm5hbC5oCkBAIC0xNywyMSArMTcsMTIgQEAKIAogI2luY2x1ZGUgImFjY2Vz cy9tdWx0aXhhY3QuaCIKIAotCiAvKgogICogRGVmaW5lcyBmb3IgTXVsdGlYYWN0T2Zmc2V0 IHBhZ2Ugc2l6ZXMuICBBIHBhZ2UgaXMgdGhlIHNhbWUgQkxDS1NaIGFzIGlzCiAgKiB1c2Vk IGV2ZXJ5d2hlcmUgZWxzZSBpbiBQb3N0Z3Jlcy4KLSAqCi0gKiBOb3RlOiBiZWNhdXNlIE11 bHRpWGFjdE9mZnNldHMgYXJlIDMyIGJpdHMgYW5kIHdyYXAgYXJvdW5kIGF0IDB4RkZGRkZG RkYsCi0gKiBNdWx0aVhhY3QgcGFnZSBudW1iZXJpbmcgYWxzbyB3cmFwcyBhcm91bmQgYXQK LSAqIDB4RkZGRkZGRkYvTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0UsIGFuZCBzZWdtZW50 IG51bWJlcmluZyBhdAotICogMHhGRkZGRkZGRi9NVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFH RS9TTFJVX1BBR0VTX1BFUl9TRUdNRU5ULiAgV2UgbmVlZAotICogdGFrZSBubyBleHBsaWNp dCBub3RpY2Ugb2YgdGhhdCBmYWN0IGluIHRoaXMgbW9kdWxlLCBleGNlcHQgd2hlbiBjb21w YXJpbmcKLSAqIHNlZ21lbnQgYW5kIHBhZ2UgbnVtYmVycyBpbiBUcnVuY2F0ZU11bHRpWGFj dCAoc2VlCi0gKiBNdWx0aVhhY3RPZmZzZXRQYWdlUHJlY2VkZXMpLgogICovCiAKLS8qIFdl IG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0ICovCisvKiBXZSBuZWVkIDggYnl0ZXMgcGVy IG9mZnNldCAqLwogI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19QRVJfUEFHRSAoQkxDS1Na IC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCiAKIHN0YXRpYyBpbmxpbmUgaW50NjQKQEAg LTgwLDE5ICs3MSw2IEBAIE11bHRpWGFjdElkVG9PZmZzZXRTZWdtZW50KE11bHRpWGFjdElk IG11bHRpKQogI2RlZmluZSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCiAJKE1VTFRJ WEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVApCiAKLS8qCi0gKiBCZWNhdXNlIHRoZSBudW1iZXIgb2YgaXRlbXMgcGVyIHBh Z2UgaXMgbm90IGEgZGl2aXNvciBvZiB0aGUgbGFzdCBpdGVtCi0gKiBudW1iZXIgKG1lbWJl ciAweEZGRkZGRkZGKSwgdGhlIGxhc3Qgc2VnbWVudCBkb2VzIG5vdCB1c2UgdGhlIG1heGlt dW0gbnVtYmVyCi0gKiBvZiBwYWdlcywgYW5kIG1vcmVvdmVyIHRoZSBsYXN0IHVzZWQgcGFn ZSB0aGVyZWluIGRvZXMgbm90IHVzZSB0aGUgc2FtZQotICogbnVtYmVyIG9mIGl0ZW1zIGFz IHByZXZpb3VzIHBhZ2VzLiAgKEFub3RoZXIgd2F5IHRvIHNheSBpdCBpcyB0aGF0IHRoZQot ICogMHhGRkZGRkZGRiBtZW1iZXIgaXMgc29tZXdoZXJlIGluIHRoZSBtaWRkbGUgb2YgdGhl IGxhc3QgcGFnZSwgc28gdGhlIHBhZ2UKLSAqIGhhcyBzb21lIGVtcHR5IHNwYWNlIGFmdGVy IHRoYXQgaXRlbS4pCi0gKgotICogVGhpcyBjb25zdGFudCBpcyB0aGUgbnVtYmVyIG9mIG1l bWJlcnMgaW4gdGhlIGxhc3QgcGFnZSBvZiB0aGUgbGFzdCBzZWdtZW50LgotICovCi0jZGVm aW5lIE1BWF9NRU1CRVJTX0lOX0xBU1RfTUVNQkVSU19QQUdFIFwKLQkJKCh1aW50MzIpICgo MHhGRkZGRkZGRiAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFKSArIDEpKQotCiAvKiBw YWdlIGluIHdoaWNoIGEgbWVtYmVyIGlzIHRvIGJlIGZvdW5kICovCiBzdGF0aWMgaW5saW5l IGludDY0CiBNWE9mZnNldFRvTWVtYmVyUGFnZShNdWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQpk aWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvYy5oIGIvc3JjL2luY2x1ZGUvYy5oCmluZGV4IDc1 N2RmZmY0NzgyLi5iYzkyYTZmNDU2NSAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvYy5oCisr KyBiL3NyYy9pbmNsdWRlL2MuaApAQCAtNjcwLDcgKzY3MCw3IEBAIHR5cGVkZWYgdWludDMy IFN1YlRyYW5zYWN0aW9uSWQ7CiAvKiBNdWx0aVhhY3RJZCBtdXN0IGJlIGVxdWl2YWxlbnQg dG8gVHJhbnNhY3Rpb25JZCwgdG8gZml0IGluIHRfeG1heCAqLwogdHlwZWRlZiBUcmFuc2Fj dGlvbklkIE11bHRpWGFjdElkOwogCi10eXBlZGVmIHVpbnQzMiBNdWx0aVhhY3RPZmZzZXQ7 Cit0eXBlZGVmIHVpbnQ2NCBNdWx0aVhhY3RPZmZzZXQ7CiAKIHR5cGVkZWYgdWludDMyIENv bW1hbmRJZDsKIAotLSAKMi40Ny4zCgo= --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0003-Add-pg_upgrade-for-64-bit-multixact-offsets.patch" Content-Disposition: attachment; filename*0="v24-0003-Add-pg_upgrade-for-64-bit-multixact-offsets.patch" Content-Transfer-Encoding: base64 RnJvbSA1NWQ1MGU3MjFlNjk2YTkxNTkwMjY3NmUwZDVjYTQyNzY5YjRiNzkzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTA6NTg6MzcgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNCAzLzhdIEFkZCBwZ191cGdyYWRlIGZvciA2NCBiaXQgbXVsdGl4YWN0IG9mZnNldHMK CkF1dGhvcjogTWF4aW0gT3Jsb3YgPG9ybG92bWdAZ21haWwuY29tPgpBdXRob3I6IEhlaWtr aSBMaW5uYWthbmdhcyA8aGxpbm5ha2FAaWtpLmZpPgotLS0KIHNyYy9iYWNrZW5kL2FjY2Vz cy90cmFuc2FtL211bHRpeGFjdC5jIHwgIDU2IC0tLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUv TWFrZWZpbGUgICAgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24u YnVpbGQgICAgICAgICB8ICAgMyArCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25l dy5jICAgICB8IDE3NCArKysrKysrKysrKysrKysKIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0 aXhhY3RfbmV3LmggICAgIHwgIDIzICsrCiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0 X29sZC5jICAgICB8IDI5NyArKysrKysrKysrKysrKysrKysrKysrKysrCiBzcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oICAgICB8ICAyOSArKysKIHNyYy9iaW4vcGdfdXBn cmFkZS9wZ191cGdyYWRlLmMgICAgICAgIHwgMTA4ICsrKysrKysrLQogc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuaCAgICAgICAgfCAgIDUgKwogc3JjL2Jpbi9wZ191cGdyYWRl L3NscnVfaW8uYyAgICAgICAgICAgfCAyNDIgKysrKysrKysrKysrKysrKysrKysKIHNyYy9i aW4vcGdfdXBncmFkZS9zbHJ1X2lvLmggICAgICAgICAgIHwgIDU5ICsrKysrCiBzcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCAgICAgICB8ICAgMyArCiAxMiBmaWxlcyBjaGFu Z2VkLCA5NDAgaW5zZXJ0aW9ucygrKSwgNjIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9uZXcuYwogY3JlYXRlIG1vZGUg MTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKIGNyZWF0ZSBtb2Rl IDEwMDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCiBjcmVhdGUgbW9k ZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRlL211bHRpeGFjdF9vbGQuaAogY3JlYXRlIG1v ZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBzcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCgpkaWZmIC0tZ2l0IGEvc3JjL2Jh Y2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCAzNGE3NDVjMDdiZS4uZTAzMjNlYzEwMTQgMTAw NjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCisrKyBi L3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0xODI0LDQ4ICsx ODI0LDYgQEAgQm9vdFN0cmFwTXVsdGlYYWN0KHZvaWQpCiAJU2ltcGxlTHJ1WmVyb0FuZFdy aXRlUGFnZShNdWx0aVhhY3RNZW1iZXJDdGwsIDApOwogfQogCi0vKgotICogTWF5YmVFeHRl bmRPZmZzZXRTbHJ1Ci0gKgkJRXh0ZW5kIHRoZSBvZmZzZXRzIFNMUlUgYXJlYSwgaWYgbmVj ZXNzYXJ5Ci0gKgotICogQWZ0ZXIgYSBiaW5hcnkgdXBncmFkZSBmcm9tIDw9IDkuMiwgdGhl IHBnX211bHRpeGFjdC9vZmZzZXRzIFNMUlUgYXJlYSBtaWdodAotICogY29udGFpbiBmaWxl cyB0aGF0IGFyZSBzaG9ydGVyIHRoYW4gbmVjZXNzYXJ5OyB0aGlzIHdvdWxkIG9jY3VyIGlm IHRoZSBvbGQKLSAqIGluc3RhbGxhdGlvbiBoYWQgdXNlZCBtdWx0aXhhY3RzIGJleW9uZCB0 aGUgZmlyc3QgcGFnZSAoZmlsZXMgY2Fubm90IGJlCi0gKiBjb3BpZWQsIGJlY2F1c2UgdGhl IG9uLWRpc2sgcmVwcmVzZW50YXRpb24gaXMgZGlmZmVyZW50KS4gIHBnX3VwZ3JhZGUgd291 bGQKLSAqIHVwZGF0ZSBwZ19jb250cm9sIHRvIHNldCB0aGUgbmV4dCBvZmZzZXQgdmFsdWUg dG8gYmUgYXQgdGhhdCBwb3NpdGlvbiwgc28KLSAqIHRoYXQgdHVwbGVzIG1hcmtlZCBhcyBs b2NrZWQgYnkgc3VjaCBNdWx0aVhhY3RzIHdvdWxkIGJlIHNlZW4gYXMgdmlzaWJsZQotICog d2l0aG91dCBoYXZpbmcgdG8gY29uc3VsdCBtdWx0aXhhY3QuICBIb3dldmVyLCB0cnlpbmcg dG8gY3JlYXRlIGFuZCB1c2UgYQotICogbmV3IE11bHRpWGFjdElkIHdvdWxkIHJlc3VsdCBp biBhbiBlcnJvciBiZWNhdXNlIHRoZSBwYWdlIG9uIHdoaWNoIHRoZSBuZXcKLSAqIHZhbHVl IHdvdWxkIHJlc2lkZSBkb2VzIG5vdCBleGlzdC4gIFRoaXMgcm91dGluZSBpcyBpbiBjaGFy Z2Ugb2YgY3JlYXRpbmcKLSAqIHN1Y2ggcGFnZXMuCi0gKi8KLXN0YXRpYyB2b2lkCi1NYXli ZUV4dGVuZE9mZnNldFNscnUodm9pZCkKLXsKLQlpbnQ2NAkJcGFnZW5vOwotCUxXTG9jawkg ICAqbG9jazsKLQotCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFj dFN0YXRlLT5uZXh0TVhhY3QpOwotCWxvY2sgPSBTaW1wbGVMcnVHZXRCYW5rTG9jayhNdWx0 aVhhY3RPZmZzZXRDdGwsIHBhZ2Vubyk7Ci0KLQlMV0xvY2tBY3F1aXJlKGxvY2ssIExXX0VY Q0xVU0lWRSk7Ci0KLQlpZiAoIVNpbXBsZUxydURvZXNQaHlzaWNhbFBhZ2VFeGlzdChNdWx0 aVhhY3RPZmZzZXRDdGwsIHBhZ2VubykpCi0JewotCQlpbnQJCQlzbG90bm87Ci0KLQkJLyoK LQkJICogRm9ydHVuYXRlbHkgZm9yIHVzLCBTaW1wbGVMcnVXcml0ZVBhZ2UgaXMgYWxyZWFk eSBwcmVwYXJlZCB0byBkZWFsCi0JCSAqIHdpdGggY3JlYXRpbmcgYSBuZXcgc2VnbWVudCBm aWxlIGV2ZW4gaWYgdGhlIHBhZ2Ugd2UncmUgd3JpdGluZyBpcwotCQkgKiBub3QgdGhlIGZp cnN0IGluIGl0LCBzbyB0aGlzIGlzIGVub3VnaC4KLQkJICovCi0JCXNsb3RubyA9IFNpbXBs ZUxydVplcm9QYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgcGFnZW5vKTsKLQkJU2ltcGxlTHJ1 V3JpdGVQYWdlKE11bHRpWGFjdE9mZnNldEN0bCwgc2xvdG5vKTsKLQl9Ci0KLQlMV0xvY2tS ZWxlYXNlKGxvY2spOwotfQotCiAvKgogICogVGhpcyBtdXN0IGJlIGNhbGxlZCBPTkNFIGR1 cmluZyBwb3N0bWFzdGVyIG9yIHN0YW5kYWxvbmUtYmFja2VuZCBzdGFydHVwLgogICoKQEAg LTIwNTgsMjAgKzIwMTYsNiBAQCBNdWx0aVhhY3RTZXROZXh0TVhhY3QoTXVsdGlYYWN0SWQg bmV4dE11bHRpLAogCU11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgPSBuZXh0TXVsdGk7CiAJ TXVsdGlYYWN0U3RhdGUtPm5leHRPZmZzZXQgPSBuZXh0TXVsdGlPZmZzZXQ7CiAJTFdMb2Nr UmVsZWFzZShNdWx0aVhhY3RHZW5Mb2NrKTsKLQotCS8qCi0JICogRHVyaW5nIGEgYmluYXJ5 IHVwZ3JhZGUsIG1ha2Ugc3VyZSB0aGF0IHRoZSBvZmZzZXRzIFNMUlUgaXMgbGFyZ2UKLQkg KiBlbm91Z2ggdG8gY29udGFpbiB0aGUgbmV4dCB2YWx1ZSB0aGF0IHdvdWxkIGJlIGNyZWF0 ZWQuCi0JICoKLQkgKiBXZSBuZWVkIHRvIGRvIHRoaXMgcHJldHR5IGVhcmx5IGR1cmluZyB0 aGUgZmlyc3Qgc3RhcnR1cCBpbiBiaW5hcnkKLQkgKiB1cGdyYWRlIG1vZGU6IGJlZm9yZSBT dGFydHVwTXVsdGlYYWN0KCkgaW4gZmFjdCwgYmVjYXVzZSB0aGlzIHJvdXRpbmUKLQkgKiBp cyBjYWxsZWQgZXZlbiBiZWZvcmUgdGhhdCBieSBTdGFydHVwWExPRygpLiAgQW5kIHdlIGNh bid0IGRvIGl0Ci0JICogZWFybGllciB0aGFuIGF0IHRoaXMgcG9pbnQsIGJlY2F1c2UgZHVy aW5nIHRoYXQgZmlyc3QgY2FsbCBvZiB0aGlzCi0JICogcm91dGluZSB3ZSBkZXRlcm1pbmUg dGhlIE11bHRpWGFjdFN0YXRlLT5uZXh0TVhhY3QgdmFsdWUgdGhhdAotCSAqIE1heWJlRXh0 ZW5kT2Zmc2V0U2xydSBuZWVkcy4KLQkgKi8KLQlpZiAoSXNCaW5hcnlVcGdyYWRlKQotCQlN YXliZUV4dGVuZE9mZnNldFNscnUoKTsKIH0KIAogLyoKZGlmZiAtLWdpdCBhL3NyYy9iaW4v cGdfdXBncmFkZS9NYWtlZmlsZSBiL3NyYy9iaW4vcGdfdXBncmFkZS9NYWtlZmlsZQppbmRl eCA2OWZjZjU5M2NhZS4uNDI5OTVkNTNiMGIgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBn cmFkZS9NYWtlZmlsZQorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvTWFrZWZpbGUKQEAgLTE4 LDExICsxOCwxNCBAQCBPQkpTID0gXAogCWZpbGUubyBcCiAJZnVuY3Rpb24ubyBcCiAJaW5m by5vIFwKKwltdWx0aXhhY3RfbmV3Lm8gXAorCW11bHRpeGFjdF9vbGQubyBcCiAJb3B0aW9u Lm8gXAogCXBhcmFsbGVsLm8gXAogCXBnX3VwZ3JhZGUubyBcCiAJcmVsZmlsZW51bWJlci5v IFwKIAlzZXJ2ZXIubyBcCisJc2xydV9pby5vIFwKIAl0YWJsZXNwYWNlLm8gXAogCXRhc2su byBcCiAJdXRpbC5vIFwKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5i dWlsZCBiL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBhYzk5MmYwZDE0 Yi4uM2U0NmM0NTEyY2YgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5i dWlsZAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKQEAgLTgsMTEgKzgs MTQgQEAgcGdfdXBncmFkZV9zb3VyY2VzID0gZmlsZXMoCiAgICdmaWxlLmMnLAogICAnZnVu Y3Rpb24uYycsCiAgICdpbmZvLmMnLAorICAnbXVsdGl4YWN0X25ldy5jJywKKyAgJ211bHRp eGFjdF9vbGQuYycsCiAgICdvcHRpb24uYycsCiAgICdwYXJhbGxlbC5jJywKICAgJ3BnX3Vw Z3JhZGUuYycsCiAgICdyZWxmaWxlbnVtYmVyLmMnLAogICAnc2VydmVyLmMnLAorICAnc2xy dV9pby5jJywKICAgJ3RhYmxlc3BhY2UuYycsCiAgICd0YXNrLmMnLAogICAndXRpbC5jJywK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMgYi9zcmMv YmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAwMDAwLi41ZGI3YWY1YjEyZAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9i aW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKQEAgLTAsMCArMSwxNzQgQEAKKy8qCisg KiBtdWx0aXhhY3RfbmV3LmMKKyAqCisgKiBGdW5jdGlvbnMgdG8gd3JpdGUgbXVsdGl4YWN0 cyBpbiB0aGUgdjE5IGZvcm1hdCB3aXRoIDY0LWJpdAorICogTXVsdGlYYWN0T2Zmc2V0cwor ICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1l bnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmMKKyAqLwor CisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2luY2x1ZGUgIm11bHRpeGFjdF9uZXcu aCIKKworLyoKKyAqIE5PVEU6IEJlbG93IGFyZSBhIGJ1bmNoIG9mIGRlZmluaXRpb25zIGFu ZCBzaW1wbGUgaW5saW5lIGZ1bmN0aW9ucyB0aGF0IGFyZQorICogY29weS1wYXN0ZWQgZnJv bSBtdWx0aXhhY3QuYworICovCisKKy8qIFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0 LCA4IGJ5dGVzIGZvciB0aGUgYmFzZSAqLworI2RlZmluZSBNVUxUSVhBQ1RfT0ZGU0VUU19Q RVJfUEFHRSAoQkxDS1NaIC8gc2l6ZW9mKE11bHRpWGFjdE9mZnNldCkpCisKK3N0YXRpYyBp bmxpbmUgaW50NjQKK011bHRpWGFjdElkVG9PZmZzZXRQYWdlKE11bHRpWGFjdElkIG11bHRp KQoreworCXJldHVybiBtdWx0aSAvIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFOworfQor CitzdGF0aWMgaW5saW5lIGludAorTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KE11bHRpWGFj dElkIG11bHRpKQoreworCXJldHVybiBtdWx0aSAlIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9Q QUdFOworfQorCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0 IGZpdHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNU CQkJOAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUJCQkxCisjZGVmaW5l IE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BF Ul9YQUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRo ZXJlIGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQCQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUAlcCisJ KE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BF Ul9CWVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCisjZGVm aW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6ZW9mKFRyYW5zYWN0aW9u SWQpICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZM QUdCWVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVS X1BBR0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorI2RlZmluZSBN VUxUSVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNf UEVSX1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApCisKKy8qIHBh Z2UgaW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KK3N0YXRpYyBpbmxpbmUg aW50NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7 CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOworfQorCisv KiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBmb3Ig YSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NP ZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlNdWx0aVhhY3RPZmZzZXQgZ3Jv dXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJaW50 CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9QQUdF OworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBf U0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCitzdGF0aWMgaW5saW5lIGludAorTVhP ZmZzZXRUb0ZsYWdzQml0U2hpZnQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJ CQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQgJSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVN QkVSR1JPVVA7CisJaW50CQkJYnNoaWZ0ID0gbWVtYmVyX2luX2dyb3VwICogTVhBQ1RfTUVN QkVSX0JJVFNfUEVSX1hBQ1Q7CisKKwlyZXR1cm4gYnNoaWZ0OworfQorCisvKiBMb2NhdGlv biAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQgb2YgZ2l2ZW4g bWVtYmVyICovCitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJlck9mZnNldChN dWx0aVhhY3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9m ZnNldCAlIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKworCXJldHVybiBN WE9mZnNldFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJWEFDVF9GTEFHQllURVNf UEVSX0dST1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQp OworfQorCitNdWx0aVhhY3RXcml0ZXIgKgorQWxsb2NNdWx0aVhhY3RXcml0ZShjb25zdCBj aGFyICpwZ2RhdGEsIE11bHRpWGFjdElkIGZpcnN0TXVsdGksCisJCQkJCU11bHRpWGFjdE9m ZnNldCBmaXJzdE9mZnNldCkKK3sKKwlNdWx0aVhhY3RXcml0ZXIgKnN0YXRlID0gcGdfbWFs bG9jKHNpemVvZigqc3RhdGUpKTsKKwljaGFyCQlkaXJbTUFYUEdQQVRIXSA9IHswfTsKKwor CXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEpOwor CXN0YXRlLT5vZmZzZXQgPSBBbGxvY1NscnVXcml0ZShkaXIsIGZhbHNlKTsKKwlTbHJ1V3Jp dGVTd2l0Y2hQYWdlKHN0YXRlLT5vZmZzZXQsIE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKGZp cnN0TXVsdGkpKTsKKworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L21lbWJl cnMiLCBwZ2RhdGEpOworCXN0YXRlLT5tZW1iZXJzID0gQWxsb2NTbHJ1V3JpdGUoZGlyLCB0 cnVlIC8qIHVzZSBsb25nIHNlZ21lbnQgbmFtZXMgKi8gKTsKKwlTbHJ1V3JpdGVTd2l0Y2hQ YWdlKHN0YXRlLT5tZW1iZXJzLCBNWE9mZnNldFRvTWVtYmVyUGFnZShmaXJzdE9mZnNldCkp OworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogV3JpdGUgYSBuZXcgbXVsdGl4YWN0 IHdpdGggbWVtYmVycy4KKyAqCisgKiBTaW1wbGlmaWVkIHZlcnNpb24gb2YgdGhlIGNvcnJl c3BvZGluZyBzZXJ2ZXIgZnVuY3Rpb24sIGhlbmNlIHRoZSBuYW1lLgorICovCit2b2lkCitS ZWNvcmROZXdNdWx0aVhhY3QoTXVsdGlYYWN0V3JpdGVyICpzdGF0ZSwgTXVsdGlYYWN0T2Zm c2V0IG9mZnNldCwKKwkJCQkgICBNdWx0aVhhY3RJZCBtdWx0aSwgaW50IG5tZW1iZXJzLCBN dWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpCit7CisJaW50NjQJCXBhZ2VubzsKKwlpbnQ2NAkJ cHJldl9wYWdlbm87CisJaW50CQkJZW50cnlubzsKKwljaGFyCSAgICpidWY7CisJTXVsdGlY YWN0T2Zmc2V0ICpvZmZwdHI7CisKKwlwYWdlbm8gPSBNdWx0aVhhY3RJZFRvT2Zmc2V0UGFn ZShtdWx0aSk7CisJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeShtdWx0aSk7 CisKKwkvKiBTdG9yZSB0aGUgb2Zmc2V0ICovCisJYnVmID0gU2xydVdyaXRlU3dpdGNoUGFn ZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCW9mZnB0ciA9IChNdWx0aVhhY3RPZmZzZXQg KikgYnVmOworCW9mZnB0cltlbnRyeW5vXSA9IG9mZnNldDsKKworCS8qIFN0b3JlIHRoZSBt ZW1iZXJzICovCisJcHJldl9wYWdlbm8gPSAtMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IG5t ZW1iZXJzOyBpKyssIG9mZnNldCsrKQorCXsKKwkJVHJhbnNhY3Rpb25JZCAqbWVtYmVycHRy OworCQl1aW50MzIJICAgKmZsYWdzcHRyOworCQl1aW50MzIJCWZsYWdzdmFsOworCQlpbnQJ CQlic2hpZnQ7CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQltZW1iZXJvZmY7CisKKwkJ QXNzZXJ0KG1lbWJlcnNbaV0uc3RhdHVzIDw9IE11bHRpWGFjdFN0YXR1c1VwZGF0ZSk7CisK KwkJcGFnZW5vID0gTVhPZmZzZXRUb01lbWJlclBhZ2Uob2Zmc2V0KTsKKwkJbWVtYmVyb2Zm ID0gTVhPZmZzZXRUb01lbWJlck9mZnNldChvZmZzZXQpOworCQlmbGFnc29mZiA9IE1YT2Zm c2V0VG9GbGFnc09mZnNldChvZmZzZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NC aXRTaGlmdChvZmZzZXQpOworCisJCWlmIChwYWdlbm8gIT0gcHJldl9wYWdlbm8pCisJCXsK KwkJCWJ1ZiA9IFNscnVXcml0ZVN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7 CisJCQlwcmV2X3BhZ2VubyA9IHBhZ2VubzsKKwkJfQorCisJCW1lbWJlcnB0ciA9IChUcmFu c2FjdGlvbklkICopIChidWYgKyBtZW1iZXJvZmYpOworCisJCSptZW1iZXJwdHIgPSBtZW1i ZXJzW2ldLnhpZDsKKworCQlmbGFnc3B0ciA9ICh1aW50MzIgKikgKGJ1ZiArIGZsYWdzb2Zm KTsKKworCQlmbGFnc3ZhbCA9ICpmbGFnc3B0cjsKKwkJZmxhZ3N2YWwgJj0gfigoKDEgPDwg TVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1QpIC0gMSkgPDwgYnNoaWZ0KTsKKwkJZmxhZ3N2 YWwgfD0gKG1lbWJlcnNbaV0uc3RhdHVzIDw8IGJzaGlmdCk7CisJCSpmbGFnc3B0ciA9IGZs YWdzdmFsOworCX0KK30KKwordm9pZAorRnJlZU11bHRpWGFjdFdyaXRlKE11bHRpWGFjdFdy aXRlciAqc3RhdGUpCit7CisJRnJlZVNscnVXcml0ZShzdGF0ZS0+b2Zmc2V0KTsKKwlGcmVl U2xydVdyaXRlKHN0YXRlLT5tZW1iZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlmZiAt LWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3RfbmV3LmggYi9zcmMvYmluL3Bn X3VwZ3JhZGUvbXVsdGl4YWN0X25ldy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw MDAwMDAwMDAwLi5mNjZlNmFmN2U0NQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdf dXBncmFkZS9tdWx0aXhhY3RfbmV3LmgKQEAgLTAsMCArMSwyMyBAQAorLyoKKyAqIG11bHRp eGFjdF9uZXcuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBHbG9i YWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rf bmV3LmgKKyAqLworI2luY2x1ZGUgImFjY2Vzcy9tdWx0aXhhY3QuaCIKKworI2luY2x1ZGUg InNscnVfaW8uaCIKKwordHlwZWRlZiBzdHJ1Y3QgTXVsdGlYYWN0V3JpdGVyCit7CisJU2xy dVNlZ1N0YXRlICpvZmZzZXQ7CisJU2xydVNlZ1N0YXRlICptZW1iZXJzOworfSBNdWx0aVhh Y3RXcml0ZXI7CisKK2V4dGVybiBNdWx0aVhhY3RXcml0ZXIgKkFsbG9jTXVsdGlYYWN0V3Jp dGUoY29uc3QgY2hhciAqcGdkYXRhLAorCQkJCQkJCQkJCQlNdWx0aVhhY3RJZCBmaXJzdE11 bHRpLAorCQkJCQkJCQkJCQlNdWx0aVhhY3RPZmZzZXQgZmlyc3RPZmZzZXQpOworZXh0ZXJu IHZvaWQgUmVjb3JkTmV3TXVsdGlYYWN0KE11bHRpWGFjdFdyaXRlciAqc3RhdGUsIE11bHRp WGFjdE9mZnNldCBvZmZzZXQsCisJCQkJCQkJICAgTXVsdGlYYWN0SWQgbXVsdGksIGludCBu bWVtYmVycywKKwkJCQkJCQkgICBNdWx0aVhhY3RNZW1iZXIgKm1lbWJlcnMpOworZXh0ZXJu IHZvaWQgRnJlZU11bHRpWGFjdFdyaXRlKE11bHRpWGFjdFdyaXRlciAqd3JpdGVyKTsKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMgYi9zcmMvYmlu L3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi5mMDVmOGUwYTFmMgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4v cGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmMKQEAgLTAsMCArMSwyOTcgQEAKKy8qCisgKiBt dWx0aXhhY3Rfb2xkLmMKKyAqCisgKiBGdW5jdGlvbnMgdG8gcmVhZCBwcmUtdjE5IG11bHRp eGFjdHMKKyAqCisgKiBDb3B5cmlnaHQgKGMpIDIwMjUsIFBvc3RncmVTUUwgR2xvYmFsIERl dmVsb3BtZW50IEdyb3VwCisgKiBzcmMvYmluL3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5j CisgKi8KKworI2luY2x1ZGUgInBvc3RncmVzX2ZlLmgiCisKKyNpbmNsdWRlICJtdWx0aXhh Y3Rfb2xkLmgiCisjaW5jbHVkZSAicGdfdXBncmFkZS5oIgorCisvKgorICogTk9URTogYmVs b3cgYXJlIGEgYnVuY2ggb2YgZGVmaW5pdGlvbnMgYW5kIHNpbXBsZSBzdHRhaWMgaW5saW5l IGZ1bmN0aW9ucworICogdGhhdCBhcmUgY29weS1wYXN0ZWQgZnJvbSBtdWx0aXhhY3QuYyBm cm9tIHZlcnNpb24gMTguICBUaGUgb25seSBkaWZmZXJlbmNlCisgKiBpcyB0aGF0IHdlIHVz ZSB0aGUgT2xkTXVsdGlYYWN0T2Zmc2V0IHR5cGUgZXF1YWwgdG8gdWludDMyIGluc3RlYWQg b2YKKyAqIE11bHRpWGFjdE9mZnNldCB3aGljaCBiZWNhbWUgdWludDY0LgorICovCisKKy8q IFdlIG5lZWQgZm91ciBieXRlcyBwZXIgb2Zmc2V0IGFuZCA4IGJ5dGVzIHBlciBiYXNlIGZv ciBlYWNoIHBhZ2UuICovCisjZGVmaW5lIE1VTFRJWEFDVF9PRkZTRVRTX1BFUl9QQUdFIChC TENLU1ogLyBzaXplb2YoT2xkTXVsdGlYYWN0T2Zmc2V0KSkKKworc3RhdGljIGlubGluZSBp bnQ2NAorTXVsdGlYYWN0SWRUb09mZnNldFBhZ2UoTXVsdGlYYWN0SWQgbXVsdGkpCit7CisJ cmV0dXJuIG11bHRpIC8gTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50CitNdWx0aVhhY3RJZFRvT2Zmc2V0RW50cnkoTXVsdGlYYWN0SWQgbXVs dGkpCit7CisJcmV0dXJuIG11bHRpICUgTVVMVElYQUNUX09GRlNFVFNfUEVSX1BBR0U7Cit9 CisKKy8qCisgKiBUaGUgc2l0dWF0aW9uIGZvciBtZW1iZXJzIGlzIGEgYml0IG1vcmUgY29t cGxleDogd2Ugc3RvcmUgb25lIGJ5dGUgb2YKKyAqIGFkZGl0aW9uYWwgZmxhZyBiaXRzIGZv ciBlYWNoIFRyYW5zYWN0aW9uSWQuICBUbyBkbyB0aGlzIHdpdGhvdXQgZ2V0dGluZworICog aW50byBhbGlnbm1lbnQgaXNzdWVzLCB3ZSBzdG9yZSBmb3VyIGJ5dGVzIG9mIGZsYWdzLCBh bmQgdGhlbiB0aGUKKyAqIGNvcnJlc3BvbmRpbmcgNCBYaWRzLiAgRWFjaCBzdWNoIDUtd29y ZCAoMjAtYnl0ZSkgc2V0IHdlIGNhbGwgYSAiZ3JvdXAiLCBhbmQKKyAqIGFyZSBzdG9yZWQg YXMgYSB3aG9sZSBpbiBwYWdlcy4gIFRodXMsIHdpdGggOGtCIEJMQ0tTWiwgd2Uga2VlcCA0 MDkgZ3JvdXBzCisgKiBwZXIgcGFnZS4gIFRoaXMgd2FzdGVzIDEyIGJ5dGVzIHBlciBwYWdl LCBidXQgdGhhdCdzIE9LIC0tIHNpbXBsaWNpdHkgKGFuZAorICogcGVyZm9ybWFuY2UpIHRy dW1wcyBzcGFjZSBlZmZpY2llbmN5IGhlcmUuCisgKgorICogTm90ZSB0aGF0IHRoZSAib2Zm c2V0IiBtYWNyb3Mgd29yayB3aXRoIGJ5dGUgb2Zmc2V0LCBub3QgYXJyYXkgaW5kZXhlcywg c28KKyAqIGFyaXRobWV0aWMgbXVzdCBiZSBkb25lIHVzaW5nICJjaGFyICoiIHBvaW50ZXJz LgorICovCisvKiBXZSBuZWVkIGVpZ2h0IGJpdHMgcGVyIHhhY3QsIHNvIG9uZSB4YWN0IGZp dHMgaW4gYSBieXRlICovCisjZGVmaW5lIE1YQUNUX01FTUJFUl9CSVRTX1BFUl9YQUNUCQkJ OAorI2RlZmluZSBNWEFDVF9NRU1CRVJfRkxBR1NfUEVSX0JZVEUJCQkxCisjZGVmaW5lIE1Y QUNUX01FTUJFUl9YQUNUX0JJVE1BU0sJKCgxIDw8IE1YQUNUX01FTUJFUl9CSVRTX1BFUl9Y QUNUKSAtIDEpCisKKy8qIGhvdyBtYW55IGZ1bGwgYnl0ZXMgb2YgZmxhZ3MgYXJlIHRoZXJl IGluIGEgZ3JvdXA/ICovCisjZGVmaW5lIE1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQ CQk0CisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUAlcCisJKE1V TFRJWEFDVF9GTEFHQllURVNfUEVSX0dST1VQICogTVhBQ1RfTUVNQkVSX0ZMQUdTX1BFUl9C WVRFKQorLyogc2l6ZSBpbiBieXRlcyBvZiBhIGNvbXBsZXRlIGdyb3VwICovCisjZGVmaW5l IE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFIFwKKwkoc2l6ZW9mKFRyYW5zYWN0aW9uSWQp ICogTVVMVElYQUNUX01FTUJFUlNfUEVSX01FTUJFUkdST1VQICsgTVVMVElYQUNUX0ZMQUdC WVRFU19QRVJfR1JPVVApCisjZGVmaW5lIE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVSX1BB R0UgKEJMQ0tTWiAvIE1VTFRJWEFDVF9NRU1CRVJHUk9VUF9TSVpFKQorI2RlZmluZSBNVUxU SVhBQ1RfTUVNQkVSU19QRVJfUEFHRQlcCisJKE1VTFRJWEFDVF9NRU1CRVJHUk9VUFNfUEVS X1BBR0UgKiBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVApCisKKy8qIHBhZ2Ug aW4gd2hpY2ggYSBtZW1iZXIgaXMgdG8gYmUgZm91bmQgKi8KK3N0YXRpYyBpbmxpbmUgaW50 NjQKK01YT2Zmc2V0VG9NZW1iZXJQYWdlKE9sZE11bHRpWGFjdE9mZnNldCBvZmZzZXQpCit7 CisJcmV0dXJuIG9mZnNldCAvIE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9QQUdFOworfQorCisv KiBMb2NhdGlvbiAoYnl0ZSBvZmZzZXQgd2l0aGluIHBhZ2UpIG9mIGZsYWcgd29yZCBmb3Ig YSBnaXZlbiBtZW1iZXIgKi8KK3N0YXRpYyBpbmxpbmUgaW50CitNWE9mZnNldFRvRmxhZ3NP ZmZzZXQoTXVsdGlYYWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlPbGRNdWx0aVhhY3RPZmZzZXQg Z3JvdXAgPSBvZmZzZXQgLyBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJ aW50CQkJZ3JvdXBvbnBnID0gZ3JvdXAgJSBNVUxUSVhBQ1RfTUVNQkVSR1JPVVBTX1BFUl9Q QUdFOworCWludAkJCWJ5dGVvZmYgPSBncm91cG9ucGcgKiBNVUxUSVhBQ1RfTUVNQkVSR1JP VVBfU0laRTsKKworCXJldHVybiBieXRlb2ZmOworfQorCisvKiBMb2NhdGlvbiAoYnl0ZSBv ZmZzZXQgd2l0aGluIHBhZ2UpIG9mIFRyYW5zYWN0aW9uSWQgb2YgZ2l2ZW4gbWVtYmVyICov CitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb01lbWJlck9mZnNldChPbGRNdWx0aVhh Y3RPZmZzZXQgb2Zmc2V0KQoreworCWludAkJCW1lbWJlcl9pbl9ncm91cCA9IG9mZnNldCAl IE1VTFRJWEFDVF9NRU1CRVJTX1BFUl9NRU1CRVJHUk9VUDsKKworCXJldHVybiBNWE9mZnNl dFRvRmxhZ3NPZmZzZXQob2Zmc2V0KSArCisJCU1VTFRJWEFDVF9GTEFHQllURVNfUEVSX0dS T1VQICsKKwkJbWVtYmVyX2luX2dyb3VwICogc2l6ZW9mKFRyYW5zYWN0aW9uSWQpOworfQor CitzdGF0aWMgaW5saW5lIGludAorTVhPZmZzZXRUb0ZsYWdzQml0U2hpZnQoT2xkTXVsdGlY YWN0T2Zmc2V0IG9mZnNldCkKK3sKKwlpbnQJCQltZW1iZXJfaW5fZ3JvdXAgPSBvZmZzZXQg JSBNVUxUSVhBQ1RfTUVNQkVSU19QRVJfTUVNQkVSR1JPVVA7CisJaW50CQkJYnNoaWZ0ID0g bWVtYmVyX2luX2dyb3VwICogTVhBQ1RfTUVNQkVSX0JJVFNfUEVSX1hBQ1Q7CisKKwlyZXR1 cm4gYnNoaWZ0OworfQorCisvKgorICogQ29uc3RydWN0IHJlYWRlciBvZiBvbGQgbXVsdGl4 YWN0cy4KKyAqCisgKiBSZXR1cm5zIHRoZSBtYWxsb2NlZCBtZW1vcnkgdXNlZCBieSB0aGUg YWxsIG90aGVyIGNhbGxzIGluIHRoaXMgbW9kdWxlLgorICovCitPbGRNdWx0aVhhY3RSZWFk ZXIgKgorQWxsb2NPbGRNdWx0aVhhY3RSZWFkKGNoYXIgKnBnZGF0YSwgTXVsdGlYYWN0SWQg bmV4dE11bHRpLAorCQkJCQkgIE9sZE11bHRpWGFjdE9mZnNldCBuZXh0T2Zmc2V0KQorewor CU9sZE11bHRpWGFjdFJlYWRlciAqc3RhdGUgPSBzdGF0ZSA9IHBnX21hbGxvYyhzaXplb2Yo KnN0YXRlKSk7CisJY2hhcgkJZGlyW01BWFBHUEFUSF0gPSB7MH07CisKKwlzdGF0ZS0+bmV4 dE1YYWN0ID0gbmV4dE11bHRpOworCXN0YXRlLT5uZXh0T2Zmc2V0ID0gbmV4dE9mZnNldDsK KworCXBnX3NwcmludGYoZGlyLCAiJXMvcGdfbXVsdGl4YWN0L29mZnNldHMiLCBwZ2RhdGEp OworCXN0YXRlLT5vZmZzZXQgPSBBbGxvY1NscnVSZWFkKGRpciwgZmFsc2UpOworCisJcGdf c3ByaW50ZihkaXIsICIlcy9wZ19tdWx0aXhhY3QvbWVtYmVycyIsIHBnZGF0YSk7CisJc3Rh dGUtPm1lbWJlcnMgPSBBbGxvY1NscnVSZWFkKGRpciwgZmFsc2UpOworCisJcmV0dXJuIHN0 YXRlOworfQorCisvKgorICogVGhpcyBpcyBhIHNpbXBsaWZpZWQgdmVyc2lvbiBvZiB0aGUg R2V0TXVsdGlYYWN0SWRNZW1iZXJzKCkgc2VydmVyIGZ1bmN0aW9uLgorICoKKyAqIC0gT25s eSByZXR1cm4gdGhlIHVwZGF0aW5nIG1lbWJlciwgaWYgYW55LiBVcGdyYWRlIG9ubHkgY2Fy ZXMgYWJvdXQgdGhlCisgKiAgIHVwZGF0ZXJzLiBJZiB0aGVyZSBpcyBubyB1cGRhdGluZyBt ZW1iZXIsIHJldHVybiB0aGUgZmlyc3QgbG9ja2luZy1vbmx5CisgKiAgIG1lbWJlci4gV2Ug ZG9uJ3QgaGF2ZSBhbnkgd2F5IHRvIHJlcHJlc2VudCAibm8gbWVtYmVycyIsIGJ1dCB3ZSBh bHNvIGRvbid0CisgKiAgIG5lZWQgdG8gcHJlc2VydmUgYWxsIHRoZSBsb2NraW5nIG1lbWJl cnMuCisgKgorICogLSBXZSBkb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGxvY2tpbmcgYW5k IHNvbWUgY29ybmVyIGNhc2VzIGJlY2F1c2UgdGhlcmUncworICogICBubyBjb25jdXJyZW50 IGFjdGl2aXR5LgorICovCit2b2lkCitHZXRPbGRNdWx0aVhhY3RJZFNpbmdsZU1lbWJlcihP bGRNdWx0aVhhY3RSZWFkZXIgKnN0YXRlLCBNdWx0aVhhY3RJZCBtdWx0aSwKKwkJCQkJCQkg IFRyYW5zYWN0aW9uSWQgKnJlc3VsdCwgTXVsdGlYYWN0U3RhdHVzICpzdGF0dXMpCit7CisJ TXVsdGlYYWN0SWQgbmV4dE1YYWN0LAorCQkJCW5leHRPZmZzZXQsCisJCQkJdG1wTVhhY3Q7 CisJaW50NjQJCXBhZ2VubywKKwkJCQlwcmV2X3BhZ2VubzsKKwlpbnQJCQllbnRyeW5vLAor CQkJCWxlbmd0aDsKKwljaGFyCSAgICpidWY7CisJT2xkTXVsdGlYYWN0T2Zmc2V0ICpvZmZw dHIsCisJCQkJb2Zmc2V0OworCVRyYW5zYWN0aW9uSWQgcmVzdWx0X3hpZCA9IEludmFsaWRU cmFuc2FjdGlvbklkOworCWJvb2wJCXJlc3VsdF9pc3VwZGF0ZSA9IGZhbHNlOworCisJbmV4 dE1YYWN0ID0gc3RhdGUtPm5leHRNWGFjdDsKKwluZXh0T2Zmc2V0ID0gc3RhdGUtPm5leHRP ZmZzZXQ7CisKKwkvKgorCSAqIFNlZSBHZXRNdWx0aVhhY3RJZE1lbWJlcnMgaW4gbXVsdGl4 YWN0LmMKKwkgKgorCSAqIEZpbmQgb3V0IHRoZSBvZmZzZXQgYXQgd2hpY2ggd2UgbmVlZCB0 byBzdGFydCByZWFkaW5nIE11bHRpWGFjdE1lbWJlcnMKKwkgKiBhbmQgdGhlIG51bWJlciBv ZiBtZW1iZXJzIGluIHRoZSBtdWx0aXhhY3QuICBXZSBkZXRlcm1pbmUgdGhlIGxhdHRlciBh cworCSAqIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gdGhpcyBtdWx0aXhhY3QncyBzdGFydGlu ZyBvZmZzZXQgYW5kIHRoZSBuZXh0CisJICogb25lJ3MuICBIb3dldmVyLCB0aGVyZSBhcmUg c29tZSBjb3JuZXIgY2FzZXMgdG8gd29ycnkgYWJvdXQ6CisJICoKKwkgKiAxLiBUaGlzIG11 bHRpeGFjdCBtYXkgYmUgdGhlIGxhdGVzdCBvbmUgY3JlYXRlZCwgaW4gd2hpY2ggY2FzZSB0 aGVyZSBpcworCSAqIG5vIG5leHQgb25lIHRvIGxvb2sgYXQuICBJbiB0aGlzIGNhc2UgdGhl IG5leHRPZmZzZXQgdmFsdWUgd2UganVzdAorCSAqIHNhdmVkIGlzIHRoZSBjb3JyZWN0IGVu ZHBvaW50LgorCSAqCisJICogMi4gVGhlIG5leHQgbXVsdGl4YWN0IG1heSBzdGlsbCBiZSBp biBwcm9jZXNzIG9mIGJlaW5nIGZpbGxlZCBpbi4uLgorCSAqIFRoaXMgY2Fubm90IGhhcHBl biBkdXJpbmcgdXBncmFkZS4KKwkgKgorCSAqIDMuIEJlY2F1c2UgR2V0TmV3TXVsdGlYYWN0 SWQgaW5jcmVtZW50cyBvZmZzZXQgemVybyB0byBvZmZzZXQgb25lIHRvCisJICogaGFuZGxl IGNhc2UgIzIsIHRoZXJlIGlzIGFuIGFtYmlndWl0eSBuZWFyIHRoZSBwb2ludCBvZiBvZmZz ZXQKKwkgKiB3cmFwYXJvdW5kLiAgSWYgd2Ugc2VlIG5leHQgbXVsdGl4YWN0J3Mgb2Zmc2V0 IGlzIG9uZSwgaXMgdGhhdCBvdXIKKwkgKiBtdWx0aXhhY3QncyBhY3R1YWwgZW5kcG9pbnQs IG9yIGRpZCBpdCBlbmQgYXQgemVybyB3aXRoIGEgc3Vic2VxdWVudAorCSAqIGluY3JlbWVu dD8gIFdlIGhhbmRsZSB0aGlzIHVzaW5nIHRoZSBrbm93bGVkZ2UgdGhhdCBpZiB0aGUgemVy byd0aAorCSAqIG1lbWJlciBzbG90IHdhc24ndCBmaWxsZWQsIGl0J2xsIGNvbnRhaW4gemVy bywgYW5kIHplcm8gaXNuJ3QgYSB2YWxpZAorCSAqIHRyYW5zYWN0aW9uIElEIHNvIGl0IGNh bid0IGJlIGEgbXVsdGl4YWN0IG1lbWJlci4gIFRoZXJlZm9yZSwgaWYgd2UKKwkgKiByZWFk IGEgemVybyBmcm9tIHRoZSBtZW1iZXJzIGFycmF5LCBqdXN0IGlnbm9yZSBpdC4KKwkgKi8K KworCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKG11bHRpKTsKKwllbnRyeW5v ID0gTXVsdGlYYWN0SWRUb09mZnNldEVudHJ5KG11bHRpKTsKKworCWJ1ZiA9IFNscnVSZWFk U3dpdGNoUGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCW9mZnB0ciA9IChPbGRNdWx0 aVhhY3RPZmZzZXQgKikgYnVmOworCW9mZnB0ciArPSBlbnRyeW5vOworCW9mZnNldCA9ICpv ZmZwdHI7CisKKwlBc3NlcnQob2Zmc2V0ICE9IDApOworCisJLyoKKwkgKiBVc2UgdGhlIHNh bWUgaW5jcmVtZW50IHJ1bGUgYXMgR2V0TmV3TXVsdGlYYWN0SWQoKSwgdGhhdCBpcywgZG9u J3QKKwkgKiBoYW5kbGUgd3JhcGFyb3VuZCBleHBsaWNpdGx5IHVudGlsIG5lZWRlZC4KKwkg Ki8KKwl0bXBNWGFjdCA9IG11bHRpICsgMTsKKworCWlmIChuZXh0TVhhY3QgPT0gdG1wTVhh Y3QpCisJeworCQkvKiBDb3JuZXIgY2FzZSAxOiB0aGVyZSBpcyBubyBuZXh0IG11bHRpeGFj dCAqLworCQlsZW5ndGggPSBuZXh0T2Zmc2V0IC0gb2Zmc2V0OworCX0KKwllbHNlCisJewor CQlPbGRNdWx0aVhhY3RPZmZzZXQgbmV4dE1YT2Zmc2V0OworCisJCS8qIGhhbmRsZSB3cmFw YXJvdW5kIGlmIG5lZWRlZCAqLworCQlpZiAodG1wTVhhY3QgPCBGaXJzdE11bHRpWGFjdElk KQorCQkJdG1wTVhhY3QgPSBGaXJzdE11bHRpWGFjdElkOworCisJCXByZXZfcGFnZW5vID0g cGFnZW5vOworCisJCXBhZ2VubyA9IE11bHRpWGFjdElkVG9PZmZzZXRQYWdlKHRtcE1YYWN0 KTsKKwkJZW50cnlubyA9IE11bHRpWGFjdElkVG9PZmZzZXRFbnRyeSh0bXBNWGFjdCk7CisK KwkJaWYgKHBhZ2VubyAhPSBwcmV2X3BhZ2VubykKKwkJCWJ1ZiA9IFNscnVSZWFkU3dpdGNo UGFnZShzdGF0ZS0+b2Zmc2V0LCBwYWdlbm8pOworCisJCW9mZnB0ciA9IChPbGRNdWx0aVhh Y3RPZmZzZXQgKikgYnVmOworCQlvZmZwdHIgKz0gZW50cnlubzsKKwkJbmV4dE1YT2Zmc2V0 ID0gKm9mZnB0cjsKKworCQkvKgorCQkgKiBDb3JuZXIgY2FzZSAyOiBuZXh0IG11bHRpeGFj dCBpcyBzdGlsbCBiZWluZyBmaWxsZWQgaW4sIHRoaXMgbXVzdAorCQkgKiBub3QgaGFwcGVu IGR1cmluZyB1cGdyYWRlLgorCQkgKi8KKwkJQXNzZXJ0KG5leHRNWE9mZnNldCAhPSAwKTsK KworCQlsZW5ndGggPSBuZXh0TVhPZmZzZXQgLSBvZmZzZXQ7CisJfQorCisJcHJldl9wYWdl bm8gPSAtMTsKKwlmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrLCBvZmZzZXQrKykK Kwl7CisJCVRyYW5zYWN0aW9uSWQgKnhhY3RwdHI7CisJCXVpbnQzMgkgICAqZmxhZ3NwdHI7 CisJCWludAkJCWZsYWdzb2ZmOworCQlpbnQJCQlic2hpZnQ7CisJCWludAkJCW1lbWJlcm9m ZjsKKwkJTXVsdGlYYWN0U3RhdHVzIHN0OworCisJCXBhZ2VubyA9IE1YT2Zmc2V0VG9NZW1i ZXJQYWdlKG9mZnNldCk7CisJCW1lbWJlcm9mZiA9IE1YT2Zmc2V0VG9NZW1iZXJPZmZzZXQo b2Zmc2V0KTsKKworCQlpZiAocGFnZW5vICE9IHByZXZfcGFnZW5vKQorCQl7CisJCQlidWYg PSBTbHJ1UmVhZFN3aXRjaFBhZ2Uoc3RhdGUtPm1lbWJlcnMsIHBhZ2Vubyk7CisJCQlwcmV2 X3BhZ2VubyA9IHBhZ2VubzsKKwkJfQorCisJCXhhY3RwdHIgPSAoVHJhbnNhY3Rpb25JZCAq KSAoYnVmICsgbWVtYmVyb2ZmKTsKKwkJaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZCgqeGFj dHB0cikpCisJCXsKKwkJCS8qIENvcm5lciBjYXNlIDM6IHdlIG11c3QgYmUgbG9va2luZyBh dCB1bnVzZWQgc2xvdCB6ZXJvICovCisJCQlBc3NlcnQob2Zmc2V0ID09IDApOworCQkJY29u dGludWU7CisJCX0KKworCQlmbGFnc29mZiA9IE1YT2Zmc2V0VG9GbGFnc09mZnNldChvZmZz ZXQpOworCQlic2hpZnQgPSBNWE9mZnNldFRvRmxhZ3NCaXRTaGlmdChvZmZzZXQpOworCQlm bGFnc3B0ciA9ICh1aW50MzIgKikgKGJ1ZiArIGZsYWdzb2ZmKTsKKworCQlzdCA9ICgqZmxh Z3NwdHIgPj4gYnNoaWZ0KSAmIE1YQUNUX01FTUJFUl9YQUNUX0JJVE1BU0s7CisKKwkJLyog VmVyaWZ5IHRoYXQgdGhlcmUgaXMgYSBzaW5nbGUgdXBkYXRlIFhpZCBhbW9uZyB0aGUgZ2l2 ZW4gbWVtYmVycy4gKi8KKwkJaWYgKElTVVBEQVRFX2Zyb21fbXhzdGF0dXMoc3QpKQorCQl7 CisJCQlpZiAocmVzdWx0X2lzdXBkYXRlKQorCQkJCXBnX2ZhdGFsKCJtdWx0aXhhY3QgJXUg aGFzIG1vcmUgdGhhbiBvbmUgdXBkYXRpbmcgbWVtYmVyIiwKKwkJCQkJCSBtdWx0aSk7CisJ CQlyZXN1bHRfeGlkID0gKnhhY3RwdHI7CisJCQlyZXN1bHRfaXN1cGRhdGUgPSB0cnVlOwor CQl9CisJCWVsc2UgaWYgKCFUcmFuc2FjdGlvbklkSXNWYWxpZChyZXN1bHRfeGlkKSkKKwkJ CXJlc3VsdF94aWQgPSAqeGFjdHB0cjsKKwl9CisKKwkvKiBBIG11bHRpeGlkIHdpdGggemVy byBtZW1iZXJzIHNob3VsZCBub3QgaGFwcGVuICovCisJQXNzZXJ0KFRyYW5zYWN0aW9uSWRJ c1ZhbGlkKHJlc3VsdF94aWQpKTsKKworCSpyZXN1bHQgPSByZXN1bHRfeGlkOworCSpzdGF0 dXMgPSByZXN1bHRfaXN1cGRhdGUgPyBNdWx0aVhhY3RTdGF0dXNVcGRhdGUgOgorCQlNdWx0 aVhhY3RTdGF0dXNGb3JLZXlTaGFyZTsKK30KKworLyoKKyAqIEZyZWVzIHRoZSBtYWxsb2Nl ZCByZWFkZXIuCisgKi8KK3ZvaWQKK0ZyZWVPbGRNdWx0aVhhY3RSZWFkZXIoT2xkTXVsdGlY YWN0UmVhZGVyICpzdGF0ZSkKK3sKKwlGcmVlU2xydVJlYWQoc3RhdGUtPm9mZnNldCk7CisJ RnJlZVNscnVSZWFkKHN0YXRlLT5tZW1iZXJzKTsKKworCXBmcmVlKHN0YXRlKTsKK30KZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmggYi9zcmMvYmlu L3BnX3VwZ3JhZGUvbXVsdGl4YWN0X29sZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4 IDAwMDAwMDAwMDAwLi44ZWI1YWYyY2NhZgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4v cGdfdXBncmFkZS9tdWx0aXhhY3Rfb2xkLmgKQEAgLTAsMCArMSwyOSBAQAorLyoKKyAqIG11 bHRpeGFjdF9vbGQuaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNRTCBH bG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9tdWx0aXhh Y3Rfb2xkLmgKKyAqLworCisjaW5jbHVkZSAiYWNjZXNzL211bHRpeGFjdC5oIgorI2luY2x1 ZGUgInNscnVfaW8uaCIKKwordHlwZWRlZiB1aW50MzIgT2xkTXVsdGlYYWN0T2Zmc2V0Owor Cit0eXBlZGVmIHN0cnVjdCBPbGRNdWx0aVhhY3RSZWFkZXIKK3sKKwlNdWx0aVhhY3RJZCBu ZXh0TVhhY3Q7CisJT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQ7CisKKwlTbHJ1U2Vn U3RhdGUgKm9mZnNldDsKKwlTbHJ1U2VnU3RhdGUgKm1lbWJlcnM7Cit9IE9sZE11bHRpWGFj dFJlYWRlcjsKKworZXh0ZXJuIE9sZE11bHRpWGFjdFJlYWRlciAqQWxsb2NPbGRNdWx0aVhh Y3RSZWFkKGNoYXIgKnBnZGF0YSwKKwkJCQkJCQkJCQkJCSBNdWx0aVhhY3RJZCBuZXh0TXVs dGksCisJCQkJCQkJCQkJCQkgT2xkTXVsdGlYYWN0T2Zmc2V0IG5leHRPZmZzZXQpOworZXh0 ZXJuIHZvaWQgR2V0T2xkTXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIoT2xkTXVsdGlYYWN0UmVh ZGVyICpzdGF0ZSwKKwkJCQkJCQkJCQkgIE11bHRpWGFjdElkIG11bHRpLAorCQkJCQkJCQkJ CSAgVHJhbnNhY3Rpb25JZCAqcmVzdWx0LAorCQkJCQkJCQkJCSAgTXVsdGlYYWN0U3RhdHVz ICpzdGF0dXMpOworZXh0ZXJuIHZvaWQgRnJlZU9sZE11bHRpWGFjdFJlYWRlcihPbGRNdWx0 aVhhY3RSZWFkZXIgKnJlYWRlcik7CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUv cGdfdXBncmFkZS5jIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwppbmRleCA0 OTBlOThmYTI2Zi4uMGZkZDA1YzEyN2MgMTAwNjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFk ZS9wZ191cGdyYWRlLmMKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL3BnX3VwZ3JhZGUuYwpA QCAtNDgsNiArNDgsOCBAQAogI2luY2x1ZGUgImNvbW1vbi9sb2dnaW5nLmgiCiAjaW5jbHVk ZSAiY29tbW9uL3Jlc3RyaWN0ZWRfdG9rZW4uaCIKICNpbmNsdWRlICJmZV91dGlscy9zdHJp bmdfdXRpbHMuaCIKKyNpbmNsdWRlICJtdWx0aXhhY3Rfb2xkLmgiCisjaW5jbHVkZSAibXVs dGl4YWN0X25ldy5oIgogI2luY2x1ZGUgInBnX3VwZ3JhZGUuaCIKIAogLyoKQEAgLTc2OSw2 ICs3NzEsODEgQEAgY29weV9zdWJkaXJfZmlsZXMoY29uc3QgY2hhciAqb2xkX3N1YmRpciwg Y29uc3QgY2hhciAqbmV3X3N1YmRpcikKIAljaGVja19vaygpOwogfQogCisvKgorICogQ29u dmVydCBwZ19tdWx0aXhhY3Qvb2Zmc2V0IGFuZCAvbWVtYmVycyB0byBuZXcgZm9ybWF0IHdp dGggNjQtYml0IG9mZnNldHMuCisgKi8KK3N0YXRpYyB2b2lkCitjb252ZXJ0X211bHRpeGFj dHMoTXVsdGlYYWN0SWQgKm5ld19ueHRtdWx0aSwgTXVsdGlYYWN0T2Zmc2V0ICpuZXdfbnh0 bXhvZmYpCit7CisJTXVsdGlYYWN0SWQgb2xkZXN0X211bHRpLAorCQkJCW5leHRfbXVsdGk7 CisJT2xkTXVsdGlYYWN0UmVhZGVyICpvbGRfcmVhZGVyOworCU11bHRpWGFjdFdyaXRlciAq bmV3X3dyaXRlcjsKKwlNdWx0aVhhY3RPZmZzZXQgbmV4dF9vZmZzZXQ7CisKKwkvKgorCSAq IFRoZSByYW5nZSBvZiB2YWxpZCBtdWx0aSBYSURzIGlzIHVuY2hhbmdlZCBieSB0aGUgY29u dmVyc2lvbiAodGhleSBhcmUKKwkgKiByZWZlcmVuY2VkIGZyb20gdGhlIGhlYXAgdGFibGVz KSwgYnV0IHRoZSBtZW1iZXJzIFNMUlUgaXMgcmV3cml0dGVuIHRvCisJICogc3RhcnQgZnJv bSBvZmZzZXQgMS4KKwkgKi8KKwlvbGRlc3RfbXVsdGkgPSBvbGRfY2x1c3Rlci5jb250cm9s ZGF0YS5jaGtwbnRfb2xkc3RNdWx0aTsKKwluZXh0X211bHRpID0gb2xkX2NsdXN0ZXIuY29u dHJvbGRhdGEuY2hrcG50X254dG11bHRpOworCW5leHRfb2Zmc2V0ID0gMTsKKworCW9sZF9y ZWFkZXIgPSBBbGxvY09sZE11bHRpWGFjdFJlYWQob2xkX2NsdXN0ZXIucGdkYXRhLAorCQkJ CQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJ CQkJCQkJICAgb2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmKTsKKwlu ZXdfd3JpdGVyID0gQWxsb2NNdWx0aVhhY3RXcml0ZShuZXdfY2x1c3Rlci5wZ2RhdGEsCisJ CQkJCQkJCQkgb2xkZXN0X211bHRpLCBuZXh0X29mZnNldCk7CisKKwkvKiBoYW5kbGUgd3Jh cGFyb3VuZCAqLworCWlmIChuZXh0X211bHRpIDwgRmlyc3RNdWx0aVhhY3RJZCkKKwkJbmV4 dF9tdWx0aSA9IEZpcnN0TXVsdGlYYWN0SWQ7CisKKwkvKgorCSAqIFJlYWQgbXVsdGl4aWRz IGZyb20gb2xkIGZpbGVzIG9uZSBieSBvbmUsIGFuZCB3cml0ZSB0aGVtIGJhY2sgaW4gdGhl CisJICogbmV3IGZvcm1hdC4KKwkgKi8KKwlmb3IgKE11bHRpWGFjdElkIG11bHRpID0gb2xk ZXN0X211bHRpOyBtdWx0aSAhPSBuZXh0X211bHRpOykKKwl7CisJCVRyYW5zYWN0aW9uSWQg eGlkOworCQlNdWx0aVhhY3RTdGF0dXMgc3RhdHVzOworCQlNdWx0aVhhY3RNZW1iZXIgbWVt YmVyOworCisJCS8qCisJCSAqIFJlYWQgdGhlIG9sZCBtdWx0aXhpZC4gIFRoZSBsb2NraW5n LW9ubHkgWElEcyB0aGF0IG1heSBiZSBwYXJ0IG9mCisJCSAqIG11bHRpLXhpZHMgZG9uJ3Qg bWF0dGVyIGFmdGVyIHVwZ3JhZGUsIGFzIHRoZXJlIGNhbiBiZSBubworCQkgKiB0cmFuc2Fj dGlvbnMgcnVubmluZyBhY3Jvc3MgdXBncmFkZS4gIFNvIGFzIGEgbGl0dGxlIG9wdGltaXph dGlvbiwKKwkJICogd2Ugb25seSByZWFkIG9uZSBtZW1iZXIgZnJvbSBlYWNoIG11bHRpeGlk OiB0aGUgb25lIHVwZGF0aW5nIG9uZSwKKwkJICogb3IgaWYgdGhlcmUgd2FzIG5vIHVwZGF0 ZSwgYXJiaXRyYXJpbHkgdGhlIGZpcnN0IGxvY2tpbmcgeGlkLgorCQkgKi8KKwkJR2V0T2xk TXVsdGlYYWN0SWRTaW5nbGVNZW1iZXIob2xkX3JlYWRlciwgbXVsdGksICZ4aWQsICZzdGF0 dXMpOworCisJCS8qIFdyaXRlIGl0IG91dCBpbiBuZXcgZm9ybWF0ICovCisJCW1lbWJlci54 aWQgPSB4aWQ7CisJCW1lbWJlci5zdGF0dXMgPSBzdGF0dXM7CisJCVJlY29yZE5ld011bHRp WGFjdChuZXdfd3JpdGVyLCBuZXh0X29mZnNldCwgbXVsdGksIDEsICZtZW1iZXIpOworCisJ CW5leHRfb2Zmc2V0ICs9IDE7CisJCW11bHRpKys7CisJCS8qIGhhbmRsZSB3cmFwYXJvdW5k ICovCisJCWlmIChtdWx0aSA8IEZpcnN0TXVsdGlYYWN0SWQpCisJCQltdWx0aSA9IEZpcnN0 TXVsdGlYYWN0SWQ7CisJfQorCisJLyoKKwkgKiBVcGRhdGUgdGhlIG5leHRNWGFjdC9PZmZz ZXQgdmFsdWVzIGluIHRoZSBjb250cm9sIGZpbGUgdG8gbWF0Y2ggd2hhdCB3ZQorCSAqIHdy b3RlLiAgVGhlIG5leHRNWGFjdCBpcyB1bmNoYW5nZWQsIGJ1dCBuZXh0T2Zmc2V0IHdpbGwg YmUgZGlmZmVyZW50LgorCSAqLworCUFzc2VydChuZXh0X211bHRpID09IG9sZF9jbHVzdGVy LmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aSk7CisJKm5ld19ueHRtdWx0aSA9IG5leHRf bXVsdGk7CisJKm5ld19ueHRteG9mZiA9IG5leHRfb2Zmc2V0OworCisJLyogUmVsZWFzZSBy ZXNvdXJjZXMgKi8KKwlGcmVlTXVsdGlYYWN0V3JpdGUobmV3X3dyaXRlcik7CisJRnJlZU9s ZE11bHRpWGFjdFJlYWRlcihvbGRfcmVhZGVyKTsKK30KKwogc3RhdGljIHZvaWQKIGNvcHlf eGFjdF94bG9nX3hpZCh2b2lkKQogewpAQCAtODE2LDggKzg5MywyOSBAQCBjb3B5X3hhY3Rf eGxvZ194aWQodm9pZCkKIAlpZiAob2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2F0X3ZlciA+ PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgJiYKIAkJbmV3X2NsdXN0ZXIuY29u dHJvbGRhdGEuY2F0X3ZlciA+PSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIpCiAJ ewotCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L29mZnNldHMiLCAicGdfbXVs dGl4YWN0L29mZnNldHMiKTsKLQkJY29weV9zdWJkaXJfZmlsZXMoInBnX211bHRpeGFjdC9t ZW1iZXJzIiwgInBnX211bHRpeGFjdC9tZW1iZXJzIik7CisJCU11bHRpWGFjdElkIG5ld19u eHRtdWx0aSA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9ueHRtdWx0aTsKKwkJ TXVsdGlYYWN0T2Zmc2V0IG5ld19ueHRteG9mZiA9IG9sZF9jbHVzdGVyLmNvbnRyb2xkYXRh LmNoa3BudF9ueHRteG9mZjsKKworCQkvKgorCQkgKiBJZiB0aGUgb2xkIHNlcnZlciBpcyBi ZWZvcmUgdGhlCisJCSAqIE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FUX1ZFUiBp dCBtdXN0IGhhdmUgMzItYml0IG11bHRpeGlkCisJCSAqIG9mZnNldHMsIHRodXMgaXQgc2hv dWxkIGJlIGNvbnZlcnRlZC4KKwkJICovCisJCWlmIChvbGRfY2x1c3Rlci5jb250cm9sZGF0 YS5jYXRfdmVyIDwgTVVMVElYQUNUT0ZGU0VUX0ZPUk1BVENIQU5HRV9DQVRfVkVSICYmCisJ CQluZXdfY2x1c3Rlci5jb250cm9sZGF0YS5jYXRfdmVyID49IE1VTFRJWEFDVE9GRlNFVF9G T1JNQVRDSEFOR0VfQ0FUX1ZFUikKKwkJeworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211 bHRpeGFjdC9tZW1iZXJzIiwgZmFsc2UpOworCQkJcmVtb3ZlX25ld19zdWJkaXIoInBnX211 bHRpeGFjdC9vZmZzZXRzIiwgZmFsc2UpOworCisJCQlwcmVwX3N0YXR1cygiQ29udmVydGlu ZyBwZ19tdWx0aXhhY3Qvb2Zmc2V0cyB0byA2NC1iaXQiKTsKKwkJCWNvbnZlcnRfbXVsdGl4 YWN0cygmbmV3X254dG11bHRpLCAmbmV3X254dG14b2ZmKTsKKwkJCWNoZWNrX29rKCk7CisJ CX0KKwkJZWxzZQorCQl7CisJCQljb3B5X3N1YmRpcl9maWxlcygicGdfbXVsdGl4YWN0L29m ZnNldHMiLCAicGdfbXVsdGl4YWN0L29mZnNldHMiKTsKKwkJCWNvcHlfc3ViZGlyX2ZpbGVz KCJwZ19tdWx0aXhhY3QvbWVtYmVycyIsICJwZ19tdWx0aXhhY3QvbWVtYmVycyIpOworCQl9 CiAKIAkJcHJlcF9zdGF0dXMoIlNldHRpbmcgbmV4dCBtdWx0aXhhY3QgSUQgYW5kIG9mZnNl dCBmb3IgbmV3IGNsdXN0ZXIiKTsKIApAQCAtODI2LDEwICs5MjQsOCBAQCBjb3B5X3hhY3Rf eGxvZ194aWQodm9pZCkKIAkJICogY291bnRlcnMgaGVyZSBhbmQgdGhlIG9sZGVzdCBtdWx0 aSBwcmVzZW50IG9uIHN5c3RlbS4KIAkJICovCiAJCWV4ZWNfcHJvZyhVVElMSVRZX0xPR19G SUxFLCBOVUxMLCB0cnVlLCB0cnVlLAotCQkJCSAgIlwiJXMvcGdfcmVzZXR3YWxcIiAtTyAl dSAtbSAldSwldSBcIiVzXCIiLAotCQkJCSAgbmV3X2NsdXN0ZXIuYmluZGlyLAotCQkJCSAg b2xkX2NsdXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG14b2ZmLAotCQkJCSAgb2xkX2Ns dXN0ZXIuY29udHJvbGRhdGEuY2hrcG50X254dG11bHRpLAorCQkJCSAgIlwiJXMvcGdfcmVz ZXR3YWxcIiAtTyAlIiBQUkl1NjQgIiAtbSAldSwldSBcIiVzXCIiLAorCQkJCSAgbmV3X2Ns dXN0ZXIuYmluZGlyLCBuZXdfbnh0bXhvZmYsIG5ld19ueHRtdWx0aSwKIAkJCQkgIG9sZF9j bHVzdGVyLmNvbnRyb2xkYXRhLmNoa3BudF9vbGRzdE11bHRpLAogCQkJCSAgbmV3X2NsdXN0 ZXIucGdkYXRhKTsKIAkJY2hlY2tfb2soKTsKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBn cmFkZS9wZ191cGdyYWRlLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFkZS5oCmlu ZGV4IGU4NjMzNmY0YmU5Li4xMjdiMmNiMDBmYSAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ191 cGdyYWRlL3BnX3VwZ3JhZGUuaAorKysgYi9zcmMvYmluL3BnX3VwZ3JhZGUvcGdfdXBncmFk ZS5oCkBAIC0xMTQsNiArMTE0LDExIEBAIGV4dGVybiBjaGFyICpvdXRwdXRfZmlsZXNbXTsK ICAqLwogI2RlZmluZSBNVUxUSVhBQ1RfRk9STUFUQ0hBTkdFX0NBVF9WRVIgMjAxMzAxMjMx CiAKKy8qCisgKiBTd2ljdGggZnJvbSAzMi1iaXQgdG8gNjQtYml0IGZvciBtdWx0aXhpZCBv ZmZzZXRzLgorICovCisjZGVmaW5lIE1VTFRJWEFDVE9GRlNFVF9GT1JNQVRDSEFOR0VfQ0FU X1ZFUiA5OTk5OTk5OTkKKwogLyoKICAqIGxhcmdlIG9iamVjdCBjaHVuayBzaXplIGFkZGVk IHRvIHBnX2NvbnRyb2xkYXRhLAogICogY29tbWl0IDVmOTNjMzc4MDVlNzQ4NTQ4ODQ4MDkx NmI0NTg1ZTA5OGQzY2M4ODMKZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1 X2lvLmMgYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wMTAwOTQxODRiZQotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmMKQEAgLTAsMCArMSwyNDIgQEAKKy8qCisg KiBzbHJ1X2lvLmMKKyAqCisgKiBSb3V0aW5lcyBmb3IgcmVhZGluZyBhbmQgd3JpdGluZyBT TFJVIGZpbGVzIGR1cmluZyB1cGdyYWRlLgorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwg UG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBn cmFkZS9zbHJ1X2lvLmMKKyAqLworCisjaW5jbHVkZSAicG9zdGdyZXNfZmUuaCIKKworI2lu Y2x1ZGUgPGZjbnRsLmg+CisKKyNpbmNsdWRlICJjb21tb24vZmVfbWVtdXRpbHMuaCIKKyNp bmNsdWRlICJjb21tb24vZmlsZV9wZXJtLmgiCisjaW5jbHVkZSAiY29tbW9uL2ZpbGVfdXRp bHMuaCIKKyNpbmNsdWRlICJwb3J0L3BnX2lvdmVjLmgiCisjaW5jbHVkZSAicGdfdXBncmFk ZS5oIgorI2luY2x1ZGUgInNscnVfaW8uaCIKKworc3RhdGljIFNscnVTZWdTdGF0ZSAqQWxs b2NTbHJ1U2VnU3RhdGUoY29uc3QgY2hhciAqZGlyKTsKK3N0YXRpYyBjaGFyICpTbHJ1Rmls ZU5hbWUoU2xydVNlZ1N0YXRlICpzdGF0ZSwgaW50NjQgc2Vnbm8pOworc3RhdGljIHZvaWQg U2xydUZsdXNoKFNscnVTZWdTdGF0ZSAqc3RhdGUpOworCitzdGF0aWMgU2xydVNlZ1N0YXRl ICoKK0FsbG9jU2xydVNlZ1N0YXRlKGNvbnN0IGNoYXIgKmRpcikKK3sKKwlTbHJ1U2VnU3Rh dGUgKnN0YXRlID0gcGdfbWFsbG9jKHNpemVvZigqc3RhdGUpKTsKKworCXN0YXRlLT5kaXIg PSBwc3RyZHVwKGRpcik7CisJc3RhdGUtPmZuID0gTlVMTDsKKwlzdGF0ZS0+ZmQgPSAtMTsK KwlzdGF0ZS0+c2Vnbm8gPSAtMTsKKwlzdGF0ZS0+cGFnZW5vID0gMDsKKworCXJldHVybiBz dGF0ZTsKK30KKworLyogc2ltaWxhciB0byB0aGUgYmFja2VuZCBmdW5jdGlvbiB3aXRoIHRo ZSBzYW1lIG5hbWUgKi8KK3N0YXRpYyBjaGFyICoKK1NscnVGaWxlTmFtZShTbHJ1U2VnU3Rh dGUgKnN0YXRlLCBpbnQ2NCBzZWdubykKK3sKKwlpZiAoc3RhdGUtPmxvbmdfc2VnbWVudF9u YW1lcykKKwl7CisJCUFzc2VydChzZWdubyA+PSAwICYmIHNlZ25vIDw9IElOVDY0Q09OU1Qo MHhGRkZGRkZGRkZGRkZGRkYpKTsKKwkJcmV0dXJuIHBzcHJpbnRmKCIlcy8lMDE1IiBQUklY NjQsIHN0YXRlLT5kaXIsIHNlZ25vKTsKKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHNlZ25v ID49IDAgJiYgc2Vnbm8gPD0gSU5UNjRDT05TVCgweEZGRkZGRikpOworCQlyZXR1cm4gcHNw cmludGYoIiVzLyUwNFgiLCBzdGF0ZS0+ZGlyLCAodW5zaWduZWQgaW50KSBzZWdubyk7CisJ fQorfQorCisvKgorICogQ3JlYXRlIHNscnUgcmVhZGVyIGZvciBkaXIuCisgKgorICogUmV0 dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVzZWQgYnkgdGhlIGFsbCBvdGhlciByZWFkIGNh bGxzIGluIHRoaXMgbW9kdWxlLgorICovCitTbHJ1U2VnU3RhdGUgKgorQWxsb2NTbHJ1UmVh ZChjb25zdCBjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKQoreworCVNscnVT ZWdTdGF0ZSAqc3RhdGUgPSBBbGxvY1NscnVTZWdTdGF0ZShkaXIpOworCisJc3RhdGUtPndy aXRpbmcgPSBmYWxzZTsKKwlzdGF0ZS0+bG9uZ19zZWdtZW50X25hbWVzID0gbG9uZ19zZWdt ZW50X25hbWVzOworCisJcmV0dXJuIHN0YXRlOworfQorCisvKgorICogT3BlbiBnaXZlbiBw YWdlIGZvciByZWFkaW5nLgorICoKKyAqIFJlYWRpbmcgY2FuIGJlIGRvbmUgaW4gcmFuZG9t IG9yZGVyLgorICovCitjaGFyICoKK1NscnVSZWFkU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0 YXRlICpzdGF0ZSwgdWludDY0IHBhZ2VubykKK3sKKwlpbnQ2NAkJc2Vnbm87CisKKwlBc3Nl cnQoIXN0YXRlLT53cml0aW5nKTsJLyogcmVhZCBvbmx5IG1vZGUgKi8KKworCWlmIChzdGF0 ZS0+c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBz dGF0ZS0+YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NF R01FTlQ7CisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChzdGF0ZS0+ c2Vnbm8gIT0gLTEpCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0ZS0+ZmQg PSAtMTsKKworCQkJcGdfZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0gTlVMTDsK KworCQkJc3RhdGUtPnNlZ25vID0gLTE7CisJCX0KKworCQkvKiBPcGVuIG5ldyBzZWdtZW50 ICovCisJCXN0YXRlLT5mbiA9IFNscnVGaWxlTmFtZShzdGF0ZSwgc2Vnbm8pOworCQlpZiAo KHN0YXRlLT5mZCA9IG9wZW4oc3RhdGUtPmZuLCBPX1JET05MWSB8IFBHX0JJTkFSWSwgMCkp IDwgMCkKKwkJCXBnX2ZhdGFsKCJjb3VsZCBub3Qgb3BlbiBmaWxlIFwiJXNcIjogJW0iLCBz dGF0ZS0+Zm4pOworCX0KKworCXN0YXRlLT5zZWdubyA9IHNlZ25vOworCisJeworCQlzdHJ1 Y3QgaW92ZWMgaW92ZWMgPSB7CisJCQkuaW92X2Jhc2UgPSAmc3RhdGUtPmJ1ZiwKKwkJCS5p b3ZfbGVuID0gQkxDS1NaLAorCQl9OworCQlvZmZfdAkJb2Zmc2V0ID0gKHBhZ2VubyAlIFNM UlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxDS1NaOworCisJCWlmIChwZ19wcmVhZHYoc3Rh dGUtPmZkLCAmaW92ZWMsIDEsIG9mZnNldCkgPCAwKQorCQkJcGdfZmF0YWwoImNvdWxkIG5v dCByZWFkIGZpbGUgXCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisKKwkJc3RhdGUtPnBhZ2Vu byA9IHBhZ2VubzsKKwl9CisKKwlyZXR1cm4gc3RhdGUtPmJ1Zi5kYXRhOworfQorCisvKgor ICogRnJlZXMgdGhlIG1hbGxvY2VkIHJlYWRlci4KKyAqLwordm9pZAorRnJlZVNscnVSZWFk KFNscnVTZWdTdGF0ZSAqc3RhdGUpCit7CisJQXNzZXJ0KCFzdGF0ZS0+d3JpdGluZyk7CS8q IHJlYWQgb25seSBtb2RlICovCisKKwlpZiAoc3RhdGUtPmZkICE9IC0xKQorCQljbG9zZShz dGF0ZS0+ZmQpOworCXBnX2ZyZWUoc3RhdGUpOworfQorCisvKgorICogQ3JlYXRlIHNscnUg d3JpdGVyIGZvciBkaXIuCisgKgorICogUmV0dXJucyB0aGUgbWFsbG9jZWQgbWVtb3J5IHVz ZWQgYnkgdGhlIGFsbCBvdGhlciB3cml0ZSBjYWxscyBpbiB0aGlzIG1vZHVsZS4KKyAqLwor U2xydVNlZ1N0YXRlICoKK0FsbG9jU2xydVdyaXRlKGNvbnN0IGNoYXIgKmRpciwgYm9vbCBs b25nX3NlZ21lbnRfbmFtZXMpCit7CisJU2xydVNlZ1N0YXRlICpzdGF0ZSA9IEFsbG9jU2xy dVNlZ1N0YXRlKGRpcik7CisKKwlzdGF0ZS0+d3JpdGluZyA9IHRydWU7CisJc3RhdGUtPmxv bmdfc2VnbWVudF9uYW1lcyA9IGxvbmdfc2VnbWVudF9uYW1lczsKKworCXJldHVybiBzdGF0 ZTsKK30KKworLyoKKyAqIE9wZW4gdGhlIGdpdmVuIHBhZ2UgZm9yIHdyaXRpbmcuCisgKgor ICogTk9URTogVGhpcyB1c2VzIE9fRVhDTCB3aGVuIHN0ZXBwaW5nIHRvIGEgbmV3IHNlZ21l bnQsIHNvIHRoaXMgYXNzdW1lcyB0aGF0CisgKiBlYWNoIHNlZ21lbnQgaXMgd3JpdHRlbiBp biBmdWxsIGJlZm9yZSBtb3Zpbmcgb24gdG8gbmV4dCBvbmUuICBUaGlzCisgKiBsaW1pdGF0 aW9uIHdvdWxkIGJlIGVhc3kgdG8gbGlmdCBpZiBuZWVkZWQsIGJ1dCBpdCBmaXRzIHRoZSB1 c2FnZSBwYXR0ZXJuIG9mCisgKiBjdXJyZW50IGNhbGxlcnMuCisgKi8KK2NoYXIgKgorU2xy dVdyaXRlU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBhZ2Vu bykKK3sKKwlpbnQ2NAkJc2Vnbm87CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+ c2Vnbm8gIT0gLTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0 ZS0+YnVmLmRhdGE7CisKKwlzZWdubyA9IHBhZ2VubyAvIFNMUlVfUEFHRVNfUEVSX1NFR01F TlQ7CisJb2Zmc2V0ID0gKHBhZ2VubyAlIFNMUlVfUEFHRVNfUEVSX1NFR01FTlQpICogQkxD S1NaOworCisJU2xydUZsdXNoKHN0YXRlKTsKKwltZW1zZXQoc3RhdGUtPmJ1Zi5kYXRhLCAw LCBCTENLU1opOworCisJaWYgKHNlZ25vICE9IHN0YXRlLT5zZWdubykKKwl7CisJCWlmIChz dGF0ZS0+c2Vnbm8gIT0gLTEpCisJCXsKKwkJCWNsb3NlKHN0YXRlLT5mZCk7CisJCQlzdGF0 ZS0+ZmQgPSAtMTsKKworCQkJcGdfZnJlZShzdGF0ZS0+Zm4pOworCQkJc3RhdGUtPmZuID0g TlVMTDsKKworCQkJc3RhdGUtPnNlZ25vID0gLTE7CisJCX0KKworCQkvKiBDcmVhdGUgdGhl IHNlZ21lbnQgKi8KKwkJc3RhdGUtPmZuID0gU2xydUZpbGVOYW1lKHN0YXRlLCBzZWdubyk7 CisJCWlmICgoc3RhdGUtPmZkID0gb3BlbihzdGF0ZS0+Zm4sIE9fUkRXUiB8IE9fQ1JFQVQg fCBPX0VYQ0wgfCBQR19CSU5BUlksCisJCQkJCQkJICBwZ19maWxlX2NyZWF0ZV9tb2RlKSkg PCAwKQorCQl7CisJCQlwZ19mYXRhbCgiY291bGQgbm90IGNyZWF0ZSBmaWxlIFwiJXNcIjog JW0iLCBzdGF0ZS0+Zm4pOworCQl9CisKKwkJc3RhdGUtPnNlZ25vID0gc2Vnbm87CisKKwkJ aWYgKG9mZnNldCA+IDApCisJCXsKKwkJCWlmIChwZ19wd3JpdGVfemVyb3Moc3RhdGUtPmZk LCBvZmZzZXQsIDApIDwgMCkKKwkJCQlwZ19mYXRhbCgiY291bGQgbm90IHdyaXRlIGZpbGUg XCIlc1wiOiAlbSIsIHN0YXRlLT5mbik7CisJCX0KKwl9CisKKwlzdGF0ZS0+cGFnZW5vID0g cGFnZW5vOworCisJcmV0dXJuIHN0YXRlLT5idWYuZGF0YTsKK30KKworc3RhdGljIHZvaWQK K1NscnVGbHVzaChTbHJ1U2VnU3RhdGUgKnN0YXRlKQoreworCXN0cnVjdCBpb3ZlYyBpb3Zl YyA9IHsKKwkJLmlvdl9iYXNlID0gJnN0YXRlLT5idWYsCisJCS5pb3ZfbGVuID0gQkxDS1Na LAorCX07CisJb2ZmX3QJCW9mZnNldDsKKworCWlmIChzdGF0ZS0+c2Vnbm8gPT0gLTEpCisJ CXJldHVybjsKKworCW9mZnNldCA9IChzdGF0ZS0+cGFnZW5vICUgU0xSVV9QQUdFU19QRVJf U0VHTUVOVCkgKiBCTENLU1o7CisKKwlpZiAocGdfcHdyaXRldl93aXRoX3JldHJ5KHN0YXRl LT5mZCwgJmlvdmVjLCAxLCBvZmZzZXQpIDwgMCkKKwkJcGdfZmF0YWwoImNvdWxkIG5vdCB3 cml0ZSBmaWxlIFwiJXNcIjogJW0iLCBzdGF0ZS0+Zm4pOworfQorCisvKgorICogRnJlZXMg dGhlIG1hbGxvY2VkIHdyaXRlci4KKyAqLwordm9pZAorRnJlZVNscnVXcml0ZShTbHJ1U2Vn U3RhdGUgKnN0YXRlKQoreworCUFzc2VydChzdGF0ZS0+d3JpdGluZyk7CisKKwlTbHJ1Rmx1 c2goc3RhdGUpOworCisJaWYgKHN0YXRlLT5mZCAhPSAtMSkKKwkJY2xvc2Uoc3RhdGUtPmZk KTsKKwlwZ19mcmVlKHN0YXRlKTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFk ZS9zbHJ1X2lvLmggYi9zcmMvYmluL3BnX3VwZ3JhZGUvc2xydV9pby5oCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi43N2I4ODMwYjAwMAotLS0gL2Rldi9udWxs CisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS9zbHJ1X2lvLmgKQEAgLTAsMCArMSw1OSBAQAor LyoKKyAqIHNscnVfaW8uaAorICoKKyAqIENvcHlyaWdodCAoYykgMjAyNSwgUG9zdGdyZVNR TCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKyAqIHNyYy9iaW4vcGdfdXBncmFkZS9zbHJ1 X2lvLmgKKyAqLworCisjaWZuZGVmIFNMUlVfSU9fSAorI2RlZmluZSBTTFJVX0lPX0gKKwor LyoKKyAqIFNlZSBhY2Nlc3Mvc2xydS5oCisgKgorICogQ29weSBoZXJlLCBzaW5jZSBzbHJ1 LmggY291bGQgbm90IGJlIGluY2x1ZGVkIGluIGZlIGNvZGUuCisgKi8KKyNkZWZpbmUgU0xS VV9QQUdFU19QRVJfU0VHTUVOVCAzMgorCisvKgorICogU3RhdGUgZm9yIHJlYWRpbmcgb3Ig d3JpdGluZyBhbiBTTFJVLCB3aXRoIGEgb25lIHBhZ2UgYnVmZmVyLgorICovCit0eXBlZGVm IHN0cnVjdCBTbHJ1U2VnU3RhdGUKK3sKKwlib29sCQl3cml0aW5nOworCWJvb2wJCWxvbmdf c2VnbWVudF9uYW1lczsKKworCWNoYXIJICAgKmRpcjsKKwljaGFyCSAgICpmbjsKKwlpbnQJ CQlmZDsKKwlpbnQ2NAkJc2Vnbm87CisJdWludDY0CQlwYWdlbm87CisKKwlQR0FsaWduZWRC bG9jayBidWY7Cit9IFNscnVTZWdTdGF0ZTsKKworZXh0ZXJuIFNscnVTZWdTdGF0ZSAqQWxs b2NTbHJ1UmVhZChjb25zdCBjaGFyICpkaXIsIGJvb2wgbG9uZ19zZWdtZW50X25hbWVzKTsK K2V4dGVybiBjaGFyICpTbHJ1UmVhZFN3aXRjaFBhZ2VTbG93KFNscnVTZWdTdGF0ZSAqc3Rh dGUsIHVpbnQ2NCBwYWdlbm8pOworZXh0ZXJuIHZvaWQgRnJlZVNscnVSZWFkKFNscnVTZWdT dGF0ZSAqc3RhdGUpOworCitzdGF0aWMgaW5saW5lIGNoYXIgKgorU2xydVJlYWRTd2l0Y2hQ YWdlKFNscnVTZWdTdGF0ZSAqc3RhdGUsIHVpbnQ2NCBwYWdlbm8pCit7CisJaWYgKHN0YXRl LT5zZWdubyAhPSAtMSAmJiBwYWdlbm8gPT0gc3RhdGUtPnBhZ2VubykKKwkJcmV0dXJuIHN0 YXRlLT5idWYuZGF0YTsKKwlyZXR1cm4gU2xydVJlYWRTd2l0Y2hQYWdlU2xvdyhzdGF0ZSwg cGFnZW5vKTsKK30KKworZXh0ZXJuIFNscnVTZWdTdGF0ZSAqQWxsb2NTbHJ1V3JpdGUoY29u c3QgY2hhciAqZGlyLCBib29sIGxvbmdfc2VnbWVudF9uYW1lcyk7CitleHRlcm4gY2hhciAq U2xydVdyaXRlU3dpdGNoUGFnZVNsb3coU2xydVNlZ1N0YXRlICpzdGF0ZSwgdWludDY0IHBh Z2Vubyk7CitleHRlcm4gdm9pZCBGcmVlU2xydVdyaXRlKFNscnVTZWdTdGF0ZSAqc3RhdGUp OworCitzdGF0aWMgaW5saW5lIGNoYXIgKgorU2xydVdyaXRlU3dpdGNoUGFnZShTbHJ1U2Vn U3RhdGUgKnN0YXRlLCB1aW50NjQgcGFnZW5vKQoreworCWlmIChzdGF0ZS0+c2Vnbm8gIT0g LTEgJiYgcGFnZW5vID09IHN0YXRlLT5wYWdlbm8pCisJCXJldHVybiBzdGF0ZS0+YnVmLmRh dGE7CisJcmV0dXJuIFNscnVXcml0ZVN3aXRjaFBhZ2VTbG93KHN0YXRlLCBwYWdlbm8pOwor fQorCisjZW5kaWYJCQkJCQkJLyogU0xSVV9JT19IICovCmRpZmYgLS1naXQgYS9zcmMvdG9v bHMvcGdpbmRlbnQvdHlwZWRlZnMubGlzdCBiL3NyYy90b29scy9wZ2luZGVudC90eXBlZGVm cy5saXN0CmluZGV4IDQzMjUwOTI3N2M5Li45MzkyYmI3MjliOSAxMDA2NDQKLS0tIGEvc3Jj L3Rvb2xzL3BnaW5kZW50L3R5cGVkZWZzLmxpc3QKKysrIGIvc3JjL3Rvb2xzL3BnaW5kZW50 L3R5cGVkZWZzLmxpc3QKQEAgLTE3MjUsNiArMTcyNSw3IEBAIE11bHRpWGFjdE1lbWJlcgog TXVsdGlYYWN0T2Zmc2V0CiBNdWx0aVhhY3RTdGF0ZURhdGEKIE11bHRpWGFjdFN0YXR1cwor TXVsdGlYYWN0V3JpdGVyCiBNdWx0aXJhbmdlSU9EYXRhCiBNdWx0aXJhbmdlUGFyc2VTdGF0 ZQogTXVsdGlyYW5nZVR5cGUKQEAgLTE4MDgsNiArMTgwOSw3IEBAIE9mZnNldFZhck5vZGVz X2NvbnRleHQKIE9pZAogT2lkT3B0aW9ucwogT2tleXNTdGF0ZQorT2xkTXVsdGlYYWN0UmVh ZGVyCiBPbGRUb05ld01hcHBpbmcKIE9sZFRvTmV3TWFwcGluZ0RhdGEKIE9uQ29tbWl0QWN0 aW9uCkBAIC0yODA0LDYgKzI4MDYsNyBAQCBTbHJ1Q3RsRGF0YQogU2xydUVycm9yQ2F1c2UK IFNscnVQYWdlU3RhdHVzCiBTbHJ1U2NhbkNhbGxiYWNrCitTbHJ1U2VnU3RhdGUKIFNscnVT aGFyZWQKIFNscnVTaGFyZWREYXRhCiBTbHJ1V3JpdGVBbGwKLS0gCjIuNDcuMwoK --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0004-Remove-oldestOffset-oldestOffsetKnown-from-multi.patch" Content-Disposition: attachment; filename*0="v24-0004-Remove-oldestOffset-oldestOffsetKnown-from-multi.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSBmYjZjNTdhYzE1MWRlOThkMTI4MzFkYjYyNmNhYzVhM2YzNDk4NWE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFRodSwgNiBOb3YgMjAyNSAxNjoyMDoxOCArMDMwMApTdWJqZWN0OiBbUEFUQ0gg djI0IDQvOF0gUmVtb3ZlIG9sZGVzdE9mZnNldC9vbGRlc3RPZmZzZXRLbm93biBmcm9tIG11 bHRpeGFjdAoKU2luY2Ugd2UgcmV3cml0ZSBhbGwgbXVsdGl0cmFuc2FjdGlvbnMgZHVyaW5n IHBnX3VwZ3JhZGUsIHRoZSBvbGRlc3QKb2Zmc2V0IGZvciBhIG5ldyBjbHVzdGVyIHdpbGwg bm8gbG9uZ2VyIGJlIG1pc3Npbmcgb24gZGlzYy4KLS0tCiBzcmMvYmFja2VuZC9hY2Nlc3Mv dHJhbnNhbS9tdWx0aXhhY3QuYyB8IDEwMSArKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiBz cmMvaW5jbHVkZS9hY2Nlc3MvbXVsdGl4YWN0LmggICAgICAgICB8ICAgMyAtCiAyIGZpbGVz IGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvYWNjZXNzL3RyYW5zYW0vbXVsdGl4YWN0LmMgYi9zcmMvYmFja2Vu ZC9hY2Nlc3MvdHJhbnNhbS9tdWx0aXhhY3QuYwppbmRleCBlMDMyM2VjMTAxNC4uNzhiYTZk NzJhOTIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFj dC5jCisrKyBiL3NyYy9iYWNrZW5kL2FjY2Vzcy90cmFuc2FtL211bHRpeGFjdC5jCkBAIC0x NDAsMTQgKzE0MCw2IEBAIHR5cGVkZWYgc3RydWN0IE11bHRpWGFjdFN0YXRlRGF0YQogCU11 bHRpWGFjdElkIG9sZGVzdE11bHRpWGFjdElkOwogCU9pZAkJCW9sZGVzdE11bHRpWGFjdERC OwogCi0JLyoKLQkgKiBPbGRlc3QgbXVsdGl4YWN0IG9mZnNldCB0aGF0IGlzIHBvdGVudGlh bGx5IHJlZmVyZW5jZWQgYnkgYSBtdWx0aXhhY3QKLQkgKiByZWZlcmVuY2VkIGJ5IGEgcmVs YXRpb24uICBXZSBkb24ndCBhbHdheXMga25vdyB0aGlzIHZhbHVlLCBzbyB0aGVyZSdzCi0J ICogYSBmbGFnIGhlcmUgdG8gaW5kaWNhdGUgd2hldGhlciBvciBub3Qgd2UgY3VycmVudGx5 IGRvLgotCSAqLwotCU11bHRpWGFjdE9mZnNldCBvbGRlc3RPZmZzZXQ7Ci0JYm9vbAkJb2xk ZXN0T2Zmc2V0S25vd247Ci0KIAkvKiBzdXBwb3J0IGZvciBhbnRpLXdyYXBhcm91bmQgbWVh c3VyZXMgKi8KIAlNdWx0aVhhY3RJZCBtdWx0aVZhY0xpbWl0OwogCU11bHRpWGFjdElkIG11 bHRpV2FybkxpbWl0OwpAQCAtMjM3MSwxMCArMjM2Myw3IEBAIFNldE9mZnNldFZhY3V1bUxp bWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlNdWx0aVhhY3RJZCBvbGRlc3RNdWx0aVhhY3RJZDsK IAlNdWx0aVhhY3RJZCBuZXh0TVhhY3Q7CiAJTXVsdGlYYWN0T2Zmc2V0IG9sZGVzdE9mZnNl dCA9IDA7CS8qIHBsYWNhdGUgY29tcGlsZXIgKi8KLQlNdWx0aVhhY3RPZmZzZXQgcHJldk9s ZGVzdE9mZnNldDsKIAlNdWx0aVhhY3RPZmZzZXQgbmV4dE9mZnNldDsKLQlib29sCQlvbGRl c3RPZmZzZXRLbm93biA9IGZhbHNlOwotCWJvb2wJCXByZXZPbGRlc3RPZmZzZXRLbm93bjsK IAogCS8qCiAJICogTkI6IEhhdmUgdG8gcHJldmVudCBjb25jdXJyZW50IHRydW5jYXRpb24s IHdlIG1pZ2h0IG90aGVyd2lzZSB0cnkgdG8KQEAgLTIzODcsOCArMjM3Niw2IEBAIFNldE9m ZnNldFZhY3V1bUxpbWl0KGJvb2wgaXNfc3RhcnR1cCkKIAlvbGRlc3RNdWx0aVhhY3RJZCA9 IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsKIAluZXh0TVhhY3QgPSBNdWx0 aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwogCW5leHRPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+ bmV4dE9mZnNldDsKLQlwcmV2T2xkZXN0T2Zmc2V0S25vd24gPSBNdWx0aVhhY3RTdGF0ZS0+ b2xkZXN0T2Zmc2V0S25vd247Ci0JcHJldk9sZGVzdE9mZnNldCA9IE11bHRpWGFjdFN0YXRl LT5vbGRlc3RPZmZzZXQ7CiAJQXNzZXJ0KE11bHRpWGFjdFN0YXRlLT5maW5pc2hlZFN0YXJ0 dXApOwogCUxXTG9ja1JlbGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7CiAKQEAgLTI0MDYsNTcg KzIzOTMsMjAgQEAgU2V0T2Zmc2V0VmFjdXVtTGltaXQoYm9vbCBpc19zdGFydHVwKQogCQkg KiBvZmZzZXQuCiAJCSAqLwogCQlvbGRlc3RPZmZzZXQgPSBuZXh0T2Zmc2V0OwotCQlvbGRl c3RPZmZzZXRLbm93biA9IHRydWU7CiAJfQotCWVsc2UKKwllbHNlIGlmICghZmluZF9tdWx0 aXhhY3Rfc3RhcnQob2xkZXN0TXVsdGlYYWN0SWQsICZvbGRlc3RPZmZzZXQpKQogCXsKLQkJ LyoKLQkJICogRmlndXJlIG91dCB3aGVyZSB0aGUgb2xkZXN0IGV4aXN0aW5nIG11bHRpeGFj dCdzIG9mZnNldHMgYXJlCi0JCSAqIHN0b3JlZC4gRHVlIHRvIGJ1Z3MgaW4gZWFybHkgcmVs ZWFzZSBvZiBQb3N0Z3JlU1FMIDkuMy5YIGFuZCA5LjQuWCwKLQkJICogdGhlIHN1cHBvc2Vk bHktZWFybGllc3QgbXVsdGl4YWN0IG1pZ2h0IG5vdCByZWFsbHkgZXhpc3QuICBXZSBhcmUK LQkJICogY2FyZWZ1bCBub3QgdG8gZmFpbCBpbiB0aGF0IGNhc2UuCi0JCSAqLwotCQlvbGRl c3RPZmZzZXRLbm93biA9Ci0JCQlmaW5kX211bHRpeGFjdF9zdGFydChvbGRlc3RNdWx0aVhh Y3RJZCwgJm9sZGVzdE9mZnNldCk7Ci0KLQkJaWYgKCFvbGRlc3RPZmZzZXRLbm93bikKLQkJ CWVyZXBvcnQoTE9HLAotCQkJCQkoZXJybXNnKCJvbGRlc3QgY2hlY2twb2ludGVkIE11bHRp WGFjdCAldSBkb2VzIG5vdCBleGlzdCBvbiBkaXNrIiwKLQkJCQkJCQlvbGRlc3RNdWx0aVhh Y3RJZCkpKTsKKwkJZXJlcG9ydChMT0csCisJCQkJKGVycm1zZygib2xkZXN0IGNoZWNrcG9p bnRlZCBNdWx0aVhhY3QgJXUgZG9lcyBub3QgZXhpc3Qgb24gZGlzayIsCisJCQkJCQlvbGRl c3RNdWx0aVhhY3RJZCkpKTsKIAl9CiAKIAlMV0xvY2tSZWxlYXNlKE11bHRpWGFjdFRydW5j YXRpb25Mb2NrKTsKIAotCS8qCi0JICogSWYgd2UgY2FuLCBjb21wdXRlIGxpbWl0cyAoYW5k IGluc3RhbGwgdGhlbSBNdWx0aVhhY3RTdGF0ZSkgdG8gcHJldmVudAotCSAqIG92ZXJydW4g b2Ygb2xkIGRhdGEgaW4gdGhlIG1lbWJlcnMgU0xSVSBhcmVhLiBXZSBjYW4gb25seSBkbyBz byBpZiB0aGUKLQkgKiBvbGRlc3Qgb2Zmc2V0IGlzIGtub3duIHRob3VnaC4KLQkgKgotCSAq IEZJWE1FOiBJcyAhb2xkZXN0T2Zmc2V0S25vd24gcG9zc2libGUgYW55bW9yZT8gQXQgbGVh c3QgdXBkYXRlIHRoZSBjb21tZW50OgotCSAqIHdlIHdvbid0IG92ZXJydW4gbWVtYmVycyBh bnltb3JlLgotCSAqLwotCWlmIChwcmV2T2xkZXN0T2Zmc2V0S25vd24pCi0JewotCQkvKgot CQkgKiBJZiB3ZSBmYWlsZWQgdG8gZ2V0IHRoZSBvbGRlc3Qgb2Zmc2V0IHRoaXMgdGltZSwg YnV0IHdlIGhhdmUgYQotCQkgKiB2YWx1ZSBmcm9tIGEgcHJldmlvdXMgcGFzcyB0aHJvdWdo IHRoaXMgZnVuY3Rpb24sIHVzZSB0aGUgb2xkCi0JCSAqIHZhbHVlcyByYXRoZXIgdGhhbiBh dXRvbWF0aWNhbGx5IGZvcmNpbmcgYW4gYXV0b3ZhY3V1bSBjeWNsZSBhZ2Fpbi4KLQkJICov Ci0JCW9sZGVzdE9mZnNldCA9IHByZXZPbGRlc3RPZmZzZXQ7Ci0JCW9sZGVzdE9mZnNldEtu b3duID0gdHJ1ZTsKLQl9Ci0KLQkvKiBJbnN0YWxsIHRoZSBjb21wdXRlZCB2YWx1ZXMgKi8K LQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX0VYQ0xVU0lWRSk7Ci0JTXVs dGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldCA9IG9sZGVzdE9mZnNldDsKLQlNdWx0aVhhY3RT dGF0ZS0+b2xkZXN0T2Zmc2V0S25vd24gPSBvbGRlc3RPZmZzZXRLbm93bjsKLQlMV0xvY2tS ZWxlYXNlKE11bHRpWGFjdEdlbkxvY2spOwotCiAJLyoKIAkgKiBEbyB3ZSBuZWVkIGF1dG92 YWN1dW0/CUlmIHdlJ3JlIG5vdCBzdXJlLCBhc3N1bWUgeWVzLgogCSAqLwotCXJldHVybiAh b2xkZXN0T2Zmc2V0S25vd24gfHwKLQkJKG5leHRPZmZzZXQgLSBvbGRlc3RPZmZzZXQgPiBN VUxUSVhBQ1RfTUVNQkVSX0FVVE9WQUNfVEhSRVNIT0xEKTsKKwlyZXR1cm4gbmV4dE9mZnNl dCAtIG9sZGVzdE9mZnNldCA+IE1VTFRJWEFDVF9NRU1CRVJfQVVUT1ZBQ19USFJFU0hPTEQ7 CiB9CiAKIC8qCkBAIC0yNTAzLDQ3ICsyNDUzLDYgQEAgZmluZF9tdWx0aXhhY3Rfc3RhcnQo TXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE9mZnNldCAqcmVzdWx0KQogCXJldHVybiB0 cnVlOwogfQogCi0vKgotICogR2V0TXVsdGlYYWN0SW5mbwotICoKLSAqIFJldHVybnMgaW5m b3JtYXRpb24gYWJvdXQgdGhlIGN1cnJlbnQgTXVsdGlYYWN0IHN0YXRlLCBhcyBvZjoKLSAq IG11bHRpeGFjdHM6IE51bWJlciBvZiBNdWx0aVhhY3RzIChuZXh0TXVsdGlYYWN0SWQgLSBv bGRlc3RNdWx0aVhhY3RJZCkKLSAqIG1lbWJlcnM6IE51bWJlciBvZiBtZW1iZXIgZW50cmll cyAobmV4dE9mZnNldCAtIG9sZGVzdE9mZnNldCkKLSAqIG9sZGVzdE11bHRpWGFjdElkOiBP bGRlc3QgTXVsdGlYYWN0IElEIHN0aWxsIGluIHVzZQotICogb2xkZXN0T2Zmc2V0OiBPbGRl c3Qgb2Zmc2V0IHN0aWxsIGluIHVzZQotICoKLSAqIFJldHVybnMgZmFsc2UgaWYgdW5hYmxl IHRvIGRldGVybWluZSwgdGhlIG9sZGVzdCBvZmZzZXQgYmVpbmcgdW5rbm93bi4KLSAqLwot Ym9vbAotR2V0TXVsdGlYYWN0SW5mbyh1aW50MzIgKm11bHRpeGFjdHMsIE11bHRpWGFjdE9m ZnNldCAqbWVtYmVycywKLQkJCQkgTXVsdGlYYWN0SWQgKm9sZGVzdE11bHRpWGFjdElkLCBN dWx0aVhhY3RPZmZzZXQgKm9sZGVzdE9mZnNldCkKLXsKLQlNdWx0aVhhY3RPZmZzZXQgbmV4 dE9mZnNldDsKLQlNdWx0aVhhY3RJZCBuZXh0TXVsdGlYYWN0SWQ7Ci0JYm9vbAkJb2xkZXN0 T2Zmc2V0S25vd247Ci0KLQlMV0xvY2tBY3F1aXJlKE11bHRpWGFjdEdlbkxvY2ssIExXX1NI QVJFRCk7Ci0JbmV4dE9mZnNldCA9IE11bHRpWGFjdFN0YXRlLT5uZXh0T2Zmc2V0OwotCSpv bGRlc3RNdWx0aVhhY3RJZCA9IE11bHRpWGFjdFN0YXRlLT5vbGRlc3RNdWx0aVhhY3RJZDsK LQluZXh0TXVsdGlYYWN0SWQgPSBNdWx0aVhhY3RTdGF0ZS0+bmV4dE1YYWN0OwotCSpvbGRl c3RPZmZzZXQgPSBNdWx0aVhhY3RTdGF0ZS0+b2xkZXN0T2Zmc2V0OwotCW9sZGVzdE9mZnNl dEtub3duID0gTXVsdGlYYWN0U3RhdGUtPm9sZGVzdE9mZnNldEtub3duOwotCUxXTG9ja1Jl bGVhc2UoTXVsdGlYYWN0R2VuTG9jayk7Ci0KLQlpZiAoIW9sZGVzdE9mZnNldEtub3duKQot CXsKLQkJKm1lbWJlcnMgPSAwOwotCQkqbXVsdGl4YWN0cyA9IDA7Ci0JCSpvbGRlc3RNdWx0 aVhhY3RJZCA9IEludmFsaWRNdWx0aVhhY3RJZDsKLQkJKm9sZGVzdE9mZnNldCA9IDA7Ci0J CXJldHVybiBmYWxzZTsKLQl9Ci0KLQkqbWVtYmVycyA9IG5leHRPZmZzZXQgLSAqb2xkZXN0 T2Zmc2V0OwotCSptdWx0aXhhY3RzID0gbmV4dE11bHRpWGFjdElkIC0gKm9sZGVzdE11bHRp WGFjdElkOwotCXJldHVybiB0cnVlOwotfQotCiB0eXBlZGVmIHN0cnVjdCBteHRydW5jaW5m bwogewogCWludDY0CQllYXJsaWVzdEV4aXN0aW5nUGFnZTsKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaCBiL3NyYy9pbmNsdWRlL2FjY2Vzcy9tdWx0aXhh Y3QuaAppbmRleCA3ZDk4ZmUwZmUzMi4uZDY4OGI1NDdjNTQgMTAwNjQ0Ci0tLSBhL3NyYy9p bmNsdWRlL2FjY2Vzcy9tdWx0aXhhY3QuaAorKysgYi9zcmMvaW5jbHVkZS9hY2Nlc3MvbXVs dGl4YWN0LmgKQEAgLTEwOSw5ICsxMDksNiBAQCBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZElz UnVubmluZyhNdWx0aVhhY3RJZCBtdWx0aSwgYm9vbCBpc0xvY2tPbmx5KTsKIGV4dGVybiB2 b2lkIE11bHRpWGFjdElkU2V0T2xkZXN0TWVtYmVyKHZvaWQpOwogZXh0ZXJuIGludAlHZXRN dWx0aVhhY3RJZE1lbWJlcnMoTXVsdGlYYWN0SWQgbXVsdGksIE11bHRpWGFjdE1lbWJlciAq Km1lbWJlcnMsCiAJCQkJCQkJCSAgYm9vbCBmcm9tX3BndXBncmFkZSwgYm9vbCBpc0xvY2tP bmx5KTsKLWV4dGVybiBib29sIEdldE11bHRpWGFjdEluZm8odWludDMyICptdWx0aXhhY3Rz LCBNdWx0aVhhY3RPZmZzZXQgKm1lbWJlcnMsCi0JCQkJCQkJIE11bHRpWGFjdElkICpvbGRl c3RNdWx0aVhhY3RJZCwKLQkJCQkJCQkgTXVsdGlYYWN0T2Zmc2V0ICpvbGRlc3RPZmZzZXQp OwogZXh0ZXJuIGJvb2wgTXVsdGlYYWN0SWRQcmVjZWRlcyhNdWx0aVhhY3RJZCBtdWx0aTEs IE11bHRpWGFjdElkIG11bHRpMik7CiBleHRlcm4gYm9vbCBNdWx0aVhhY3RJZFByZWNlZGVz T3JFcXVhbHMoTXVsdGlYYWN0SWQgbXVsdGkxLAogCQkJCQkJCQkJCU11bHRpWGFjdElkIG11 bHRpMik7Ci0tIAoyLjQ3LjMKCg== --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0005-TEST-bump-catversion.patch" Content-Disposition: attachment; filename="v24-0005-TEST-bump-catversion.patch" Content-Transfer-Encoding: base64 RnJvbSBmMmI5ZDEzN2UwZjZmYTEzMzY4ODNkNTVmNDJiMmZlY2Y1ZjJmY2Q5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IEZyaSwgMjQgT2N0IDIwMjUgMTE6NDc6NTAgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNCA1LzhdIFRFU1Q6IGJ1bXAgY2F0dmVyc2lvbgoKVG8gYXZvaWQgY29uc3RhbnQgQ0Yt Ym90IGNvbXBsYWlucywgbWFrZSBjYXR2ZXJzaW9uIGJ1bXAgaW4gYSBzZXBhcmF0ZQpjb21t aXQuCgpOT1RFOiBrZWVwIGl0IGluIHN5bmMgd2l0aCBNVUxUSVhBQ1RPRkZTRVRfRk9STUFU Q0hBTkdFX0NBVF9WRVIKLS0tCiBzcmMvaW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaCB8 IDMgKystCiAxIGZpbGUgY2hhbmdlZCwgMiBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvY2F0YWxvZy9jYXR2ZXJzaW9uLmggYi9zcmMv aW5jbHVkZS9jYXRhbG9nL2NhdHZlcnNpb24uaAppbmRleCA3ZWVmY2ExYWU0Mi4uYjAxNjJj MmJmNjMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCisr KyBiL3NyYy9pbmNsdWRlL2NhdGFsb2cvY2F0dmVyc2lvbi5oCkBAIC01Nyw2ICs1Nyw3IEBA CiAgKi8KIAogLyoJCQkJCQkJeXl5eW1tZGROICovCi0jZGVmaW5lIENBVEFMT0dfVkVSU0lP Tl9OTwkyMDI1MTExMDEKKy8vIEZJWE1FOiBidW1wIGl0CisjZGVmaW5lIENBVEFMT0dfVkVS U0lPTl9OTwk5OTk5OTk5OTkKIAogI2VuZGlmCi0tIAoyLjQ3LjMKCg== --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0006-TEST-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Disposition: attachment; filename*0="v24-0006-TEST-Add-test-for-64-bit-mxoff-in-pg_resetwal.patch" Content-Transfer-Encoding: base64 RnJvbSBjMjg3NDdjODU4NmZiZTljZWI3YWQyMTI2NTRhMDkyNjZmYjQwNGE0IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFR1ZSwgMjggT2N0IDIwMjUgMTk6MDg6MjYgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNCA2LzhdIFRFU1Q6IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfcmVzZXR3 YWwKCi0tLQogc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZCAgICB8ICAgMSArCiBz cmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsIHwgMTcwICsrKysrKysrKysrKysr KysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE3MSBpbnNlcnRpb25zKCspCiBj cmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbAoK ZGlmZiAtLWdpdCBhL3NyYy9iaW4vcGdfcmVzZXR3YWwvbWVzb24uYnVpbGQgYi9zcmMvYmlu L3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCmluZGV4IDI5MDgzMmIyMjk5Li4xZTJkZmIzOGE1 YiAxMDA2NDQKLS0tIGEvc3JjL2Jpbi9wZ19yZXNldHdhbC9tZXNvbi5idWlsZAorKysgYi9z cmMvYmluL3BnX3Jlc2V0d2FsL21lc29uLmJ1aWxkCkBAIC0yNSw2ICsyNSw3IEBAIHRlc3Rz ICs9IHsKICAgICAndGVzdHMnOiBbCiAgICAgICAndC8wMDFfYmFzaWMucGwnLAogICAgICAg J3QvMDAyX2NvcnJ1cHRlZC5wbCcsCisgICAgICAndC8wMDNfbXhvZmYucGwnLAogICAgIF0s CiAgIH0sCiB9CmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2Zm LnBsIGIvc3JjL2Jpbi9wZ19yZXNldHdhbC90LzAwM19teG9mZi5wbApuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uM2MxYjdmYTFkMzMKLS0tIC9kZXYvbnVsbAor KysgYi9zcmMvYmluL3BnX3Jlc2V0d2FsL3QvMDAzX214b2ZmLnBsCkBAIC0wLDAgKzEsMTcw IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0Z3JlU1FMIEdsb2JhbCBEZXZlbG9w bWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdhcm5pbmdzIEZBVEFMID0+ICdhbGwn OworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXI7 Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1c2UgVGVzdDo6TW9yZTsKKworc3Vi IG14YWN0X2VhdGVyCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gc2hpZnQ7 CisKKwkkbm9kZS0+c3RhcnQ7CisJJG5vZGUtPnNhZmVfcHNxbCgncG9zdGdyZXMnLAorCQki Q1JFQVRFIFRBQkxFICR7dGJsfSAoSSBJTlQgUFJJTUFSWSBLRVksIE5fVVBEQVRFRCBJTlQp ICIgLgorCQkiICAgICAgIFdJVEggKEFVVE9WQUNVVU1fRU5BQkxFRD1GQUxTRSk7IiAuCisJ CSJJTlNFUlQgSU5UTyAke3RibH0gU0VMRUNUIEcsIDAgRlJPTSBHRU5FUkFURV9TRVJJRVMo MSwgNTApIEc7Iik7CisKKwkjIGNvbnN1bWUgYXJvdW5kIDEwayBtdWx0aXhhY3Qtb2Zmc2V0 ZnMKKwlteSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gNzU7CisJbXkg QGNvbm5lY3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xpZW50cykKKwl7CisJCW15ICRj b25uID0gJG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKwkJJGNvbm4tPnF1 ZXJ5X3NhZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9 CisKKwlmb3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4g PSAkY29ubmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVyeV9zYWZl KCJDT01NSVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlmICgk aSAlICR1cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJ CQkJIlVQREFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQg KyAxICIgLgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7 CisJCQkkY29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9S IEtFWSBTSEFSRSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMp CisJeworCQkkY29ubi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworfQorCitzdWIg bmV4dF9teG9mZgoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgKCRzdGRvdXQsICRzdGRl cnIpID0KKwkgIHJ1bl9jb21tYW5kKFsgJ3BnX2NvbnRyb2xkYXRhJywgJG5vZGUtPmRhdGFf ZGlyIF0pOworCW15IEBjb250cm9sX2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rkb3V0KTsKKwlt eSAkbmV4dF9teG9mZiA9IHVuZGVmOworCisJZm9yZWFjaCAoQGNvbnRyb2xfZGF0YSkKKwl7 CisJCWlmICgkXyA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRpT2Zmc2V0Olxz KiguKikkL21nKQorCQl7CisJCQkkbmV4dF9teG9mZiA9ICQxOworCQkJbGFzdDsKKwkJfQor CX0KKwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91bmQgaW4gY29udHJvbCBmaWxlXG4i CisJCXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKworCXJldHVybiAkbmV4dF9teG9m ZjsKK30KKworc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAk b2Zmc2V0ID0gc2hpZnQ7CisJCSRvZmZzZXQgPSBNYXRoOjpCaWdJbnQtPm5ldygkb2Zmc2V0 KTsKKworCSMgR2V0IGJsb2NrIHNpemUKKwlteSAkb3V0ID0gKHJ1bl9jb21tYW5kKFsgJ3Bn X3Jlc2V0d2FsJywgJy0tZHJ5LXJ1bicsICRub2RlLT5kYXRhX2RpciBdKSlbMF07CisJCSRv dXQgPX4gL15EYXRhYmFzZSBibG9jayBzaXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRi bGNrc3ogPSAkMTsKKworCSMgUmVzZXQgdG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJ3Bn X3Jlc2V0d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ZGF0YV9kaXIpOworCXB1c2ggQGNt ZCwgJy0tbXVsdGl4YWN0LW9mZnNldCcgPT4gJG9mZnNldC0+YXNfaGV4KCk7CisJY29tbWFu ZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4YWN0LW9mZnNldCcpOworCisJIyBGaWxs IGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJzIHNlZ21lbnQKKwlteSAkbXVsdCA9IDMyICog aW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRzZWduYW1lID0gc3ByaW50ZiAiJTAxNVgi LCAkb2Zmc2V0IC8gJG11bHQ7CisKKwlteSBAZGQgPSAoJ2RkJyk7CisJcHVzaCBAZGQsICJp Zj0vZGV2L3plcm8iOworCXB1c2ggQGRkLCAib2Y9IiAuICRub2RlLT5kYXRhX2RpciAuICIv cGdfbXVsdGl4YWN0L21lbWJlcnMvIiAuICRzZWduYW1lOworCXB1c2ggQGRkLCAiYnM9JGJs Y2tzeiI7CisJcHVzaCBAZGQsICJjb3VudD0zMiI7CisJY29tbWFuZF9vayhcQGRkLCAnZmls bCBlbXB0eSBtdWx0aXhhY3QtbWVtYmVycycpOworfQorCitteSAoJG9mZjEsICRvZmYyKTsK KworIyBzdGFydCBmcm9tIGRlZmF1bHRzCitteSAkbm9kZTEgPSBQb3N0Z3JlU1FMOjpUZXN0 OjpDbHVzdGVyLT5uZXcoJ25vZGUxJyk7Ciskbm9kZTEtPmluaXQ7Ciskb2ZmMSA9IG5leHRf bXhvZmYoJG5vZGUxKTsKK214YWN0X2VhdGVyKCRub2RlMSwgIkZPTyIpOworJG9mZjIgPSBu ZXh0X214b2ZmKCRub2RlMSk7Citub3RlICI+IHN0YXJ0IGZyb20gJG9mZjEsIGZpbmlzaGVk IGF0ICRvZmYyXG4iOworCisjIHN0YXJ0IGZyb20gYmVmb3JlIDMyLWJpdCB3cmFwYXJvdW5k CitteSAkbm9kZTIgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUyJyk7 Ciskbm9kZTItPmluaXQ7CityZXNldF9teG9mZigkbm9kZTIsIDB4RkZGRjAwMDApOworJG9m ZjEgPSBuZXh0X214b2ZmKCRub2RlMik7CitteGFjdF9lYXRlcigkbm9kZTIsICJGT08iKTsK KyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTIpOworbm90ZSAiPiBzdGFydCBmcm9tICRvZmYx LCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBuZWFyIDMyLWJpdCB3cmFwYXJv dW5kCitteSAkbm9kZTMgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25vZGUz Jyk7Ciskbm9kZTMtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTMsIDB4RkZGRkVDNzcpOwor JG9mZjEgPSBuZXh0X214b2ZmKCRub2RlMyk7CitteGFjdF9lYXRlcigkbm9kZTMsICJGT08i KTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFydCBmcm9tICRv ZmYxLCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBzdGFydCBvdmVyIDMyLWJpdCB3cmFw YXJvdW5kCitteSAkbm9kZTQgPSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoJ25v ZGU0Jyk7Ciskbm9kZTQtPmluaXQ7CityZXNldF9teG9mZigkbm9kZTQsICcweEZGRkZGRkZG MDAwMCcpOworJG9mZjEgPSBuZXh0X214b2ZmKCRub2RlNCk7CitteGFjdF9lYXRlcigkbm9k ZTQsICJGT08iKTsKKyRvZmYyID0gbmV4dF9teG9mZigkbm9kZTMpOworbm90ZSAiPiBzdGFy dCBmcm9tICRvZmYxLCBmaW5pc2hlZCBhdCAkb2ZmMlxuIjsKKworIyBjaGVjayBpbnZhcmlh bnQKKyRub2RlMS0+c3RhcnQ7Ciskbm9kZTItPnN0YXJ0OworJG5vZGUzLT5zdGFydDsKKyRu b2RlNC0+c3RhcnQ7CisKK215ICR2YXIxID0gJG5vZGUxLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywgJ1RBQkxFIEZPTycpOworbXkgJHZhcjIgPSAkbm9kZTItPnNhZmVfcHNxbCgncG9zdGdy ZXMnLCAnVEFCTEUgRk9PJyk7CitteSAkdmFyMyA9ICRub2RlMy0+c2FmZV9wc3FsKCdwb3N0 Z3JlcycsICdUQUJMRSBGT08nKTsKK215ICR2YXI0ID0gJG5vZGU0LT5zYWZlX3BzcWwoJ3Bv c3RncmVzJywgJ1RBQkxFIEZPTycpOworb2soJHZhcjEgZXEgJHZhcjIgZXEgJHZhcjMgZXEg JHZhcjQsCisJJ2NoZWNrIHRhYmxlIGludmFyaWFudCBpbiBhbGwgbm9kZXMnKTsKKworJG5v ZGU0LT5zdG9wOworJG5vZGUzLT5zdG9wOworJG5vZGUyLT5zdG9wOworJG5vZGUxLT5zdG9w OworCitkb25lX3Rlc3RpbmcoKTsKLS0gCjIuNDcuMwoK --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0007-TEST-Add-test-for-wraparound-of-next-new-multi-i.patch" Content-Disposition: attachment; filename*0="v24-0007-TEST-Add-test-for-wraparound-of-next-new-multi-i.pa"; filename*1="tch" Content-Transfer-Encoding: base64 RnJvbSAwMTY0YTg2MjI0NzE2YWQ3Zjc5ODYxNjNiMTkyNzU3NDUyNmQ3MzljIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBIZWlra2kgTGlubmFrYW5nYXMgPGhlaWtraS5saW5u YWthbmdhc0Bpa2kuZmk+CkRhdGU6IFdlZCwgMTIgTm92IDIwMjUgMTM6MzY6MDkgKzAyMDAK U3ViamVjdDogW1BBVENIIHYyNCA3LzhdIFRFU1Q6IEFkZCB0ZXN0IGZvciB3cmFwYXJvdW5k IG9mIG5leHQgbmV3IG11bHRpIGluCiBwZ191cGdyYWRlCgpSZWxhdGVkIHRvIEJVRyAjMTg4 NjMgYW5kIEJVRyAjMTg4NjUKLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQg ICAgICAgICB8ICAgMSArCiBzcmMvYmluL3BnX3VwZ3JhZGUvdC8wMDdfbXVsdGlfd3JhcC5w bCB8IDE3NiArKysrKysrKysrKysrKysrKysrKysrKysrCiAyIGZpbGVzIGNoYW5nZWQsIDE3 NyBpbnNlcnRpb25zKCspCiBjcmVhdGUgbW9kZSAxMDA2NDQgc3JjL2Jpbi9wZ191cGdyYWRl L3QvMDA3X211bHRpX3dyYXAucGwKCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUv bWVzb24uYnVpbGQgYi9zcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKaW5kZXggM2U0 NmM0NTEyY2YuLmNhODdhZTIyMWNlIDEwMDY0NAotLS0gYS9zcmMvYmluL3BnX3VwZ3JhZGUv bWVzb24uYnVpbGQKKysrIGIvc3JjL2Jpbi9wZ191cGdyYWRlL21lc29uLmJ1aWxkCkBAIC01 MCw2ICs1MCw3IEBAIHRlc3RzICs9IHsKICAgICAgICd0LzAwNF9zdWJzY3JpcHRpb24ucGwn LAogICAgICAgJ3QvMDA1X2NoYXJfc2lnbmVkbmVzcy5wbCcsCiAgICAgICAndC8wMDZfdHJh bnNmZXJfbW9kZXMucGwnLAorICAgICAgJ3QvMDA3X211bHRpX3dyYXAucGwnLAogICAgIF0s CiAgICAgJ3Rlc3Rfa3dhcmdzJzogeydwcmlvcml0eSc6IDQwfSwgIyBwZ191cGdyYWRlIHRl c3RzIGFyZSBzbG93CiAgIH0sCmRpZmYgLS1naXQgYS9zcmMvYmluL3BnX3VwZ3JhZGUvdC8w MDdfbXVsdGlfd3JhcC5wbCBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19tdWx0aV93cmFw LnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wYWQ4ZmQ1OTkw NgotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90LzAwN19tdWx0aV93 cmFwLnBsCkBAIC0wLDAgKzEsMTc2IEBACisKKyMgQ29weXJpZ2h0IChjKSAyMDI1LCBQb3N0 Z3JlU1FMIEdsb2JhbCBEZXZlbG9wbWVudCBHcm91cAorCit1c2Ugc3RyaWN0OwordXNlIHdh cm5pbmdzIEZBVEFMID0+ICdhbGwnOworCit1c2UgTWF0aDo6QmlnSW50OwordXNlIFBvc3Rn cmVTUUw6OlRlc3Q6OkNsdXN0ZXI7Cit1c2UgUG9zdGdyZVNRTDo6VGVzdDo6VXRpbHM7Cit1 c2UgUG9zdGdyZVNRTDo6VGVzdDo6QWRqdXN0RHVtcDsKK3VzZSBQb3N0Z3JlU1FMOjpUZXN0 OjpBZGp1c3RVcGdyYWRlOwordXNlIFRlc3Q6Ok1vcmU7CisKKyMgVGVtcCBkaXIgZm9yIGEg ZHVtcHMuCitteSAkdGVtcGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGly OworCisjIENhbiBiZSBjaGFuZ2VkIHRvIHRlc3QgdGhlIG90aGVyIG1vZGVzLgorbXkgJG1v ZGUgPSAkRU5We1BHX1RFU1RfUEdfVVBHUkFERV9NT0RFfSB8fCAnLS1jb3B5JzsKKworIyBI YW5keSBwZ19yZXNldHdhbCB3cmFwcGVyCitzdWIgcmVzZXRfbXhvZmYKK3sKKwlteSAlYXJn cyA9IEBfOworCisJbXkgJG5vZGUgPSAkYXJnc3tub2RlfTsKKwlteSAkb2Zmc2V0ID0gJGFy Z3N7b2Zmc2V0fTsKKwlteSAkbXVsdGkgPSAkYXJnc3ttdWx0aX07CisJbXkgJGJsY2tzeiA9 IHN1YiAjIEdldCBibG9jayBzaXplCisJeworCQlteSAkb3V0ID0gKHJ1bl9jb21tYW5kKFsg J3BnX3Jlc2V0d2FsJywgJy0tZHJ5LXJ1bicsCisJCQkJCQkJCSAkbm9kZS0+ZGF0YV9kaXIg XSkpWzBdOworCQkkb3V0ID1+IC9eRGF0YWJhc2UgYmxvY2sgc2l6ZTogKihcZCspJC9tIG9y IGRpZTsKKwkJcmV0dXJuICQxOworCX0tPigpOworCisJbXkgQGNtZDsKKworCSMgUmVzZXQg Y2x1c3RlcgorCUBjbWQgPSAoJ3BnX3Jlc2V0d2FsJywgJy0tcGdkYXRhJyA9PiAkbm9kZS0+ ZGF0YV9kaXIpOworCWlmIChkZWZpbmVkKCRvZmZzZXQpKQorCXsKKwkJcHVzaCBAY21kLCAn LS1tdWx0aXhhY3Qtb2Zmc2V0JyA9PiAkb2Zmc2V0OworCX0KKwlpZiAoZGVmaW5lZCgkbXVs dGkpKQorCXsKKwkJcHVzaCBAY21kLCAiLS1tdWx0aXhhY3QtaWRzPSRtdWx0aSwkbXVsdGki OworCX0KKwljb21tYW5kX29rKFxAY21kLCAncmVzZXQgbXVsdGkvb2Zmc2V0Jyk7CisKKwlt eSAkbl9pdGVtczsKKwlteSAkc2VnbmFtZTsKKworCSMgRmlsbCBlbXB0eSBwZ19tdWx0aXhh Y3Qgc2VnbWVudHMKKwlpZiAoZGVmaW5lZCgkb2Zmc2V0KSkKKwl7CisJCSRuX2l0ZW1zID0g MzIgKiBpbnQoJGJsY2tzeiAvIDIwKSAqIDQ7CisJCSRzZWduYW1lID0gc3ByaW50ZiAiJTAx NVgiLCAoJG9mZnNldCAvICRuX2l0ZW1zKTsKKwkJJHNlZ25hbWUgPSAkbm9kZS0+ZGF0YV9k aXIgLiAiL3BnX211bHRpeGFjdC9tZW1iZXJzLyIgLiAkc2VnbmFtZTsKKworCQlAY21kID0g KCdkZCcpOworCQlwdXNoIEBjbWQsICJpZj0vZGV2L3plcm8iOworCQlwdXNoIEBjbWQsICJv Zj0iIC4gJHNlZ25hbWU7CisJCXB1c2ggQGNtZCwgImJzPSRibGNrc3oiOworCQlwdXNoIEBj bWQsICJjb3VudD0zMiI7CisJCWNvbW1hbmRfb2soXEBjbWQsICdmaWxsIGVtcHR5IG11bHRp eGFjdC1tZW1iZXJzJyk7CisJfQorCisJaWYgKGRlZmluZWQoJG11bHRpKSkKKwl7CisJCSRu X2l0ZW1zID0gMzIgKiBpbnQoJGJsY2tzeiAvIDgpOworCQkkc2VnbmFtZSA9IHNwcmludGYg IiUwNFgiLCAkbXVsdGkgLyAkbl9pdGVtczsKKwkJJHNlZ25hbWUgPSAkbm9kZS0+ZGF0YV9k aXIgLiAiL3BnX211bHRpeGFjdC9vZmZzZXRzLyIgLiAkc2VnbmFtZTsKKworCQlAY21kID0g KCdkZCcpOworCQlwdXNoIEBjbWQsICJpZj0vZGV2L3plcm8iOworCQlwdXNoIEBjbWQsICJv Zj0iIC4gJHNlZ25hbWU7CisJCXB1c2ggQGNtZCwgImJzPSRibGNrc3oiOworCQlwdXNoIEBj bWQsICJjb3VudD0zMiI7CisJCWNvbW1hbmRfb2soXEBjbWQsICdmaWxsIGVtcHR5IG11bHRp eGFjdC1vZmZzZXRzJyk7CisJfQorfQorCitzdWIgZ2V0X2R1bXBfZm9yX2NvbXBhcmlzb24K K3sKKwlteSAoJG5vZGUsICRkYiwgJGZpbGVfcHJlZml4LCAkYWRqdXN0X2NoaWxkX2NvbHVt bnMpID0gQF87CisKKwlteSAkZHVtcGZpbGUgPSAkdGVtcGRpciAuICcvJyAuICRmaWxlX3By ZWZpeCAuICcuc3FsJzsKKwlteSAkZHVtcF9hZGp1c3RlZCA9ICIke2R1bXBmaWxlfV9hZGp1 c3RlZCI7CisKKwlvcGVuKG15ICRkaCwgJz4nLCAkZHVtcF9hZGp1c3RlZCkKKwkgIHx8IGRp ZSAiY291bGQgbm90IG9wZW4gJGR1bXBfYWRqdXN0ZWQgZm9yIHdyaXRpbmcgJCEiOworCisJ JG5vZGUtPnJ1bl9sb2coCisJCVsKKwkJCSdwZ19kdW1wJywgJy0tbm8tc3luYycsCisJCQkn LS1yZXN0cmljdC1rZXknID0+ICd0ZXN0JywKKwkJCSctZCcgPT4gJG5vZGUtPmNvbm5zdHIo JGRiKSwKKwkJCSctZicgPT4gJGR1bXBmaWxlCisJCV0pOworCisJcHJpbnQgJGRoIGFkanVz dF9yZWdyZXNzX2R1bXBmaWxlKHNsdXJwX2ZpbGUoJGR1bXBmaWxlKSwKKwkJJGFkanVzdF9j aGlsZF9jb2x1bW5zKTsKKwljbG9zZSgkZGgpOworCisJcmV0dXJuICRkdW1wX2FkanVzdGVk OworfQorCisjIENyZWF0ZSBvbGQgbm9kZQorbXkgJG9sZCA9IFBvc3RncmVTUUw6OlRlc3Q6 OkNsdXN0ZXItPm5ldygib2xkIik7Ciskb2xkLT5pbml0OworcmVzZXRfbXhvZmYobm9kZSA9 PiAkb2xkLCBtdWx0aSA9PiA0Mjk0OTY3Mjk1LCBvZmZzZXQgPT4gNDI5NDk2NzI5KTsKKwor JG9sZC0+c3RhcnQ7Ciskb2xkLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKK3FxKAorCUNSRUFU RSBUQUJMRSB0ZXN0X3RhYmxlIChpZCBpbnRlZ2VyIE5PVCBOVUxMIFBSSU1BUlkgS0VZLCB2 YWwgdGV4dCk7CisJSU5TRVJUIElOVE8gdGVzdF90YWJsZSBWQUxVRVMgKDEsICdhJyk7Cisp KTsKKworbXkgJGNvbm4xID0gJG9sZC0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOwor bXkgJGNvbm4yID0gJG9sZC0+YmFja2dyb3VuZF9wc3FsKCdwb3N0Z3JlcycpOworCiskY29u bjEtPnF1ZXJ5X3NhZmUocXEoCisJQkVHSU47CisJU0VMRUNUICogRlJPTSB0ZXN0X3RhYmxl IFdIRVJFIGlkID0gMSBGT1IgU0hBUkU7CispKTsKKyRjb25uMi0+cXVlcnlfc2FmZShxcSgK KwlCRUdJTjsKKwlTRUxFQ1QgKiBGUk9NIHRlc3RfdGFibGUgV0hFUkUgaWQgPSAxIEZPUiBT SEFSRTsKKykpOworCiskY29ubjEtPnF1ZXJ5X3NhZmUocXEoQ09NTUlUOykpOworJGNvbm4y LT5xdWVyeV9zYWZlKHFxKENPTU1JVDspKTsKKworJGNvbm4xLT5xdWl0OworJGNvbm4yLT5x dWl0OworCiskb2xkLT5zdG9wOworCisjIENyZWF0ZSBuZXcgbm9kZQorbXkgJG5ldyA9IFBv c3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygibmV3Iik7CiskbmV3LT5pbml0OworCisj IFJ1biBwZ191cGdyYWRlCitjb21tYW5kX29rKAorCVsKKwkJJ3BnX3VwZ3JhZGUnLCAnLS1u by1zeW5jJywKKwkJJy0tb2xkLWRhdGFkaXInID0+ICRvbGQtPmRhdGFfZGlyLAorCQknLS1u ZXctZGF0YWRpcicgPT4gJG5ldy0+ZGF0YV9kaXIsCisJCSctLW9sZC1iaW5kaXInID0+ICRv bGQtPmNvbmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQknLS1uZXctYmluZGlyJyA9PiAkbmV3 LT5jb25maWdfZGF0YSgnLS1iaW5kaXInKSwKKwkJJy0tc29ja2V0ZGlyJyA9PiAkbmV3LT5o b3N0LAorCQknLS1vbGQtcG9ydCcgPT4gJG9sZC0+cG9ydCwKKwkJJy0tbmV3LXBvcnQnID0+ ICRuZXctPnBvcnQsCisJCSRtb2RlLAorCV0sCisJJ3J1biBvZiBwZ191cGdyYWRlIGZvciBu ZXcgaW5zdGFuY2UnKTsKK29rKCAhLWQgJG5ldy0+ZGF0YV9kaXIgLiAiL3BnX3VwZ3JhZGVf b3V0cHV0LmQiLAorCSJwZ191cGdyYWRlX291dHB1dC5kLyByZW1vdmVkIGFmdGVyIHBnX3Vw Z3JhZGUgc3VjY2VzcyIpOworCiskb2xkLT5zdGFydDsKK215ICRzcmNfZHVtcCA9CisJZ2V0 X2R1bXBfZm9yX2NvbXBhcmlzb24oJG9sZCwgJ3Bvc3RncmVzJywKKwkJCQkJCQkib2xkbm9k ZV8xX2R1bXAiLCAwKTsKKyRvbGQtPnN0b3A7CisKKyRuZXctPnN0YXJ0OworbXkgJGRzdF9k dW1wID0KKwlnZXRfZHVtcF9mb3JfY29tcGFyaXNvbigkbmV3LCAncG9zdGdyZXMnLAorCQkJ CQkJCSJuZXdub2RlXzFfZHVtcCIsIDApOworJG5ldy0+c3RvcDsKKworY29tcGFyZV9maWxl cygkc3JjX2R1bXAsICRkc3RfZHVtcCwKKwknZHVtcCBvdXRwdXRzIGZyb20gb3JpZ2luYWwg YW5kIHJlc3RvcmVkIHJlZ3Jlc3Npb24gZGF0YWJhc2VzIG1hdGNoJyk7CisKK2RvbmVfdGVz dGluZygpOwotLSAKMi40Ny4zCgo= --------------FWgCOM0EMCxqCdHtyKCKm400 Content-Type: text/x-patch; charset=UTF-8; name="v24-0008-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch" Content-Disposition: attachment; filename*0="v24-0008-TEST-Add-test-for-64-bit-mxoff-in-pg_upgrade.patch" Content-Transfer-Encoding: base64 RnJvbSA4ZWU2NTk0MjZhY2Y3M2QzZjBhZWYyOTUwMDBlYWMyNTMxYmZhYWVjIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBNYXhpbSBPcmxvdiA8b3Jsb3ZtZ0BnbWFpbC5jb20+ CkRhdGU6IFdlZCwgMjkgT2N0IDIwMjUgMTQ6MTk6NTYgKzAzMDAKU3ViamVjdDogW1BBVENI IHYyNCA4LzhdIFRFU1Q6IEFkZCB0ZXN0IGZvciA2NC1iaXQgbXhvZmYgaW4gcGdfdXBncmFk ZQoKLS0tCiBzcmMvYmluL3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQgICAgfCAgIDEgKwogc3Jj L2Jpbi9wZ191cGdyYWRlL3QvMDA4X214b2ZmLnBsIHwgNDYzICsrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogMiBmaWxlcyBjaGFuZ2VkLCA0NjQgaW5zZXJ0aW9ucygrKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IHNyYy9iaW4vcGdfdXBncmFkZS90LzAwOF9teG9mZi5wbAoKZGlm ZiAtLWdpdCBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZCBiL3NyYy9iaW4vcGdf dXBncmFkZS9tZXNvbi5idWlsZAppbmRleCBjYTg3YWUyMjFjZS4uN2YxNGU1YzQ2M2MgMTAw NjQ0Ci0tLSBhL3NyYy9iaW4vcGdfdXBncmFkZS9tZXNvbi5idWlsZAorKysgYi9zcmMvYmlu L3BnX3VwZ3JhZGUvbWVzb24uYnVpbGQKQEAgLTUxLDYgKzUxLDcgQEAgdGVzdHMgKz0gewog ICAgICAgJ3QvMDA1X2NoYXJfc2lnbmVkbmVzcy5wbCcsCiAgICAgICAndC8wMDZfdHJhbnNm ZXJfbW9kZXMucGwnLAogICAgICAgJ3QvMDA3X211bHRpX3dyYXAucGwnLAorICAgICAgJ3Qv MDA4X214b2ZmLnBsJywKICAgICBdLAogICAgICd0ZXN0X2t3YXJncyc6IHsncHJpb3JpdHkn OiA0MH0sICMgcGdfdXBncmFkZSB0ZXN0cyBhcmUgc2xvdwogICB9LApkaWZmIC0tZ2l0IGEv c3JjL2Jpbi9wZ191cGdyYWRlL3QvMDA4X214b2ZmLnBsIGIvc3JjL2Jpbi9wZ191cGdyYWRl L3QvMDA4X214b2ZmLnBsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw Li43MjA0MzI1Zjg3MwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9iaW4vcGdfdXBncmFkZS90 LzAwOF9teG9mZi5wbApAQCAtMCwwICsxLDQ2MyBAQAorCisjIENvcHlyaWdodCAoYykgMjAy NSwgUG9zdGdyZVNRTCBHbG9iYWwgRGV2ZWxvcG1lbnQgR3JvdXAKKwordXNlIHN0cmljdDsK K3VzZSB3YXJuaW5ncyBGQVRBTCA9PiAnYWxsJzsKKwordXNlIE1hdGg6OkJpZ0ludDsKK3Vz ZSBQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVyOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OlV0 aWxzOwordXNlIFBvc3RncmVTUUw6OlRlc3Q6OkFkanVzdER1bXA7Cit1c2UgUG9zdGdyZVNR TDo6VGVzdDo6QWRqdXN0VXBncmFkZTsKK3VzZSBUZXN0OjpNb3JlOworCisjIFRoaXMgdGVz dCBpbnZvbHZlcyBkaWZmZXJlbnQgbXVsdGl0cmFuc2FjdGlvbiBzdGF0ZXMsIHNpbWlsYXJs eSB0byB0aGF0IG9mCisjIDAwMl9wZ191cGdyYWRlLnBsLgorCit1bmxlc3MgKGRlZmluZWQo JEVOVntvbGRpbnN0YWxsfSkpCit7CisJcGxhbiBza2lwX2FsbCA9PgorCQkndG8gcnVuIHRl c3Qgc2V0IG9sZGluc3RhbGwgZW52aXJvbm1lbnQgdmFyaWFibGUgdG8gdGhlIHByZSA2NC1i aXQgbXhvZmYgY2x1c3Rlcic7Cit9CisKKyMgVGVtcCBkaXIgZm9yIGEgZHVtcHMuCitteSAk dGVtcGRpciA9IFBvc3RncmVTUUw6OlRlc3Q6OlV0aWxzOjp0ZW1wZGlyOworCisjIENhbiBi ZSBjaGFuZ2VkIHRvIHRlc3QgdGhlIG90aGVyIG1vZGVzLgorbXkgJG1vZGUgPSAkRU5We1BH X1RFU1RfUEdfVVBHUkFERV9NT0RFfSB8fCAnLS1jb3B5JzsKKworc3ViIHV0aWxpdHlfcGF0 aAoreworCW15ICRub2RlID0gc2hpZnQ7CisJbXkgJG5hbWUgPSBzaGlmdDsKKworCW15ICRi aW5fcGF0aCA9IGRlZmluZWQoJG5vZGUtPmluc3RhbGxfcGF0aCkgPworCQkkbm9kZS0+aW5z dGFsbF9wYXRoIC4gIi9iaW4vJG5hbWUiIDogJG5hbWU7CisKKwlyZXR1cm4gJGJpbl9wYXRo OworfQorCisjIEdldCBOZXh0TXVsdGlPZmZzZXQuCitzdWIgbmV4dF9teG9mZgoreworCW15 ICRub2RlID0gc2hpZnQ7CisKKwlteSAkcGdfY29udHJvbGRhdGFfcGF0aCA9IHV0aWxpdHlf cGF0aCgkbm9kZSwgJ3BnX2NvbnRyb2xkYXRhJyk7CisJbXkgKCRzdGRvdXQsICRzdGRlcnIp ID0gcnVuX2NvbW1hbmQoWyAkcGdfY29udHJvbGRhdGFfcGF0aCwKKwkJCQkJCQkJCQkJJG5v ZGUtPmRhdGFfZGlyIF0pOworCW15IEBjb250cm9sX2RhdGEgPSBzcGxpdCgiXG4iLCAkc3Rk b3V0KTsKKwlteSAkbmV4dF9teG9mZiA9IHVuZGVmOworCisJZm9yZWFjaCAoQGNvbnRyb2xf ZGF0YSkKKwl7CisJCWlmICgkXyA9fiAvXkxhdGVzdCBjaGVja3BvaW50J3MgTmV4dE11bHRp T2Zmc2V0OlxzKiguKikkL21nKQorCQl7CisJCQkkbmV4dF9teG9mZiA9ICQxOworCQkJbGFz dDsKKwkJfQorCX0KKwlkaWUgIk5leHRNdWx0aU9mZnNldCBub3QgZm91bmQgaW4gY29udHJv bCBmaWxlXG4iCisJCXVubGVzcyBkZWZpbmVkKCRuZXh0X214b2ZmKTsKKworCXJldHVybiAk bmV4dF9teG9mZjsKK30KKworIyBDb25zdW1lIGFyb3VuZCAxMGsgb2YgbXhvZmZzZXRzLgor c3ViIG14YWN0X2VhdGVyCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gJ0ZP Tyc7CisKKwlteSAoJG14b2ZmMSwgJG14b2ZmMik7CisKKwkkbXhvZmYxID0gbmV4dF9teG9m Zigkbm9kZSk7CisJJG5vZGUtPnN0YXJ0OworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVz JywKKwkJIkNSRUFURSBUQUJMRSAke3RibH0gKEkgSU5UIFBSSU1BUlkgS0VZLCBOX1VQREFU RUQgSU5UKSAiIC4KKwkJIiAgICAgICBXSVRIIChBVVRPVkFDVVVNX0VOQUJMRUQ9RkFMU0Up OyIgLgorCQkiSU5TRVJUIElOVE8gJHt0Ymx9IFNFTEVDVCBHLCAwIEZST00gR0VORVJBVEVf U0VSSUVTKDEsIDUwKSBHOyIpOworCisJIyBjb25zdW1lIGFyb3VuZCAxMGsgbXhvZmYKKwlt eSAkbmNsaWVudHMgPSAxMDsKKwlteSAkdXBkYXRlX2V2ZXJ5ID0gNzU7CisJbXkgQGNvbm5l Y3Rpb25zID0gKCk7CisKKwlmb3IgKDAuLiRuY2xpZW50cykKKwl7CisJCW15ICRjb25uID0g JG5vZGUtPmJhY2tncm91bmRfcHNxbCgncG9zdGdyZXMnKTsKKwkJJGNvbm4tPnF1ZXJ5X3Nh ZmUoIkJFR0lOIik7CisKKwkJcHVzaChAY29ubmVjdGlvbnMsICRjb25uKTsKKwl9CisKKwlm b3IgKG15ICRpID0gMDsgJGkgPCAxMDAwOyAkaSsrKQorCXsKKwkJbXkgJGNvbm4gPSAkY29u bmVjdGlvbnNbJGkgJSAkbmNsaWVudHNdOworCisJCSRjb25uLT5xdWVyeV9zYWZlKCJDT01N SVQ7Iik7CisJCSRjb25uLT5xdWVyeV9zYWZlKCJCRUdJTiIpOworCisJCWlmICgkaSAlICR1 cGRhdGVfZXZlcnkgPT0gMCkKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlVQ REFURSAke3RibH0gU0VUICIgLgorCQkJCSJOX1VQREFURUQgPSBOX1VQREFURUQgKyAxICIg LgorCQkJCSJXSEVSRSBJID0gJHtpfSAlIDUwIik7CisJCX0KKwkJZWxzZQorCQl7CisJCQkk Y29ubi0+cXVlcnlfc2FmZSgKKwkJCQkiU0VMRUNUICogRlJPTSAke3RibH0gRk9SIEtFWSBT SEFSRSIpOworCQl9CisJfQorCisJZm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJewor CQkkY29ubi0+cXVpdCgpOworCX0KKworCSRub2RlLT5zdG9wOworCSRteG9mZjIgPSBuZXh0 X214b2ZmKCRub2RlKTsKKworCXJldHVybiAkbXhvZmYxLCAkbXhvZmYyOworfQorCisjIENv bnN1bWUgYXJvdW5kIDFNIG9mIG14b2Zmc2V0cy4KK3N1YiBteGFjdF9odWdlX2VhdGVyCit7 CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkdGJsID0gJ0ZPTyc7CisKKwlteSAoJG14b2Zm MSwgJG14b2ZmMik7CisKKwkkbXhvZmYxID0gbmV4dF9teG9mZigkbm9kZSk7CisJJG5vZGUt PnN0YXJ0OworCSRub2RlLT5zYWZlX3BzcWwoJ3Bvc3RncmVzJywKKwkJIkNSRUFURSBUQUJM RSAke3RibH0gKEkgSU5UIFBSSU1BUlkgS0VZLCBOX1VQREFURUQgSU5UKSAiIC4KKwkJIiAg ICAgICBXSVRIIChBVVRPVkFDVVVNX0VOQUJMRUQ9RkFMU0UpOyIgLgorCQkiSU5TRVJUIElO VE8gJHt0Ymx9IFNFTEVDVCBHLCAwIEZST00gR0VORVJBVEVfU0VSSUVTKDEsIDQpIEc7Iik7 CisKKwlteSAkbmNsaWVudHMgPSAxMDA7CisJbXkgQGNvbm5lY3Rpb25zID0gKCk7CisJbXkg JHRpbWVvdXQgPSAxMCAqICRQb3N0Z3JlU1FMOjpUZXN0OjpVdGlsczo6dGltZW91dF9kZWZh dWx0OworCisJZm9yICgwLi4kbmNsaWVudHMpCisJeworCQlteSAkY29ubiA9ICRub2RlLT5i YWNrZ3JvdW5kX3BzcWwoJ3Bvc3RncmVzJywKKwkJCQkJCQkJCQkgIHRpbWVvdXQgPT4gJHRp bWVvdXQpOworCQkkY29ubi0+cXVlcnlfc2FmZSgiQkVHSU4iKTsKKworCQlwdXNoKEBjb25u ZWN0aW9ucywgJGNvbm4pOworCX0KKworCSMgSXQncyBhIGxvbmcgcHJvY2VzcywgYmV0dGVy IHRvIHRlbGwgYWJvdXQgcHJvZ3Jlc3MuCisJbXkgJG5fc3RlcHMgPSAxMDBfMDAwOworCW15 ICRzdGVwID0gaW50KCRuX3N0ZXBzIC8gMTApOworCisJZGlhZyAiXG5zdGFydCB0byBjb25z dW1lIG14b2Zmc2V0cyAuLi5cbiI7CisJZm9yIChteSAkaSA9IDA7ICRpIDwgJG5fc3RlcHM7 ICRpKyspCisJeworCQlteSAkY29ubiA9ICRjb25uZWN0aW9uc1skaSAlICRuY2xpZW50c107 CisKKwkJJGNvbm4tPnF1ZXJ5X3NhZmUoIkNPTU1JVDsiKTsKKwkJJGNvbm4tPnF1ZXJ5X3Nh ZmUoIkJFR0lOIik7CisKKwkJeworCQkJJGNvbm4tPnF1ZXJ5X3NhZmUoCisJCQkJIlNFTEVD VCAqIEZST00gJHt0Ymx9ICIgLgorCQkJCSJGT1IgS0VZIFNIQVJFIik7CisJCX0KKworCQlp ZiAoJGkgJSAkc3RlcCA9PSAwKQorCQl7CisJCQlteSAkZG9uZSA9IGludCgoJGkgLyAkbl9z dGVwcykgKiAxMDApOworCQkJZGlhZyAiJGRvbmUlIGRvbmUuLi4iOworCQl9CisJfQorCisJ Zm9yIG15ICRjb25uIChAY29ubmVjdGlvbnMpCisJeworCQkkY29ubi0+cXVpdCgpOworCX0K KworCSRub2RlLT5zdG9wOworCSRteG9mZjIgPSBuZXh0X214b2ZmKCRub2RlKTsKKworCXJl dHVybiAkbXhvZmYxLCAkbXhvZmYyOworfQorCisjIFNldCBvbGRlc3QgbXVsdGl4YWN0LW9m ZnNldAorc3ViIHJlc2V0X214b2ZmCit7CisJbXkgJG5vZGUgPSBzaGlmdDsKKwlteSAkb2Zm c2V0ID0gc2hpZnQ7CisKKwlteSAkcGdfcmVzZXR3YWxfcGF0aCA9IHV0aWxpdHlfcGF0aCgk bm9kZSwgJ3BnX3Jlc2V0d2FsJyk7CisJIyBHZXQgYmxvY2sgc2l6ZQorCW15ICRvdXQgPSAo cnVuX2NvbW1hbmQoWyAkcGdfcmVzZXR3YWxfcGF0aCwgJy0tZHJ5LXJ1bicsCisJCQkJCQkJ ICRub2RlLT5kYXRhX2RpciBdKSlbMF07CisJCSRvdXQgPX4gL15EYXRhYmFzZSBibG9jayBz aXplOiAqKFxkKykkL20gb3IgZGllOworCW15ICRibGNrc3ogPSAkMTsKKworCSMgUmVzZXQg dG8gbmV3IG9mZnNldAorCW15IEBjbWQgPSAoJHBnX3Jlc2V0d2FsX3BhdGgsICctLXBnZGF0 YScgPT4gJG5vZGUtPmRhdGFfZGlyKTsKKwlwdXNoIEBjbWQsICctLW11bHRpeGFjdC1vZmZz ZXQnID0+ICRvZmZzZXQ7CisJY29tbWFuZF9vayhcQGNtZCwgJ3NldCBvbGRlc3QgbXVsdGl4 YWN0LW9mZnNldCcpOworCisJIyBGaWxsIGVtcHR5IHBnX211bHRpeGFjdC9tZW1iZXJzIHNl Z21lbnQKKwlteSAkbXVsdCA9IDMyICogaW50KCRibGNrc3ogLyAyMCkgKiA0OworCW15ICRz ZWduYW1lID0gc3ByaW50ZiAiJTA0WCIsICRvZmZzZXQgLyAkbXVsdDsKKworCW15IEBkZCA9 ICgnZGQnKTsKKwlwdXNoIEBkZCwgImlmPS9kZXYvemVybyI7CisJcHVzaCBAZGQsICJvZj0i IC4gJG5vZGUtPmRhdGFfZGlyIC4gIi9wZ19tdWx0aXhhY3QvbWVtYmVycy8iIC4gJHNlZ25h bWU7CisJcHVzaCBAZGQsICJicz0kYmxja3N6IjsKKwlwdXNoIEBkZCwgImNvdW50PTMyIjsK Kwljb21tYW5kX29rKFxAZGQsICdmaWxsIGVtcHR5IG11bHRpeGFjdC1tZW1iZXJzJyk7Cit9 CisKK3N1YiBnZXRfZHVtcF9mb3JfY29tcGFyaXNvbgoreworCW15ICgkbm9kZSwgJGRiLCAk ZmlsZV9wcmVmaXgsICRhZGp1c3RfY2hpbGRfY29sdW1ucykgPSBAXzsKKworCW15ICRkdW1w ZmlsZSA9ICR0ZW1wZGlyIC4gJy8nIC4gJGZpbGVfcHJlZml4IC4gJy5zcWwnOworCW15ICRk dW1wX2FkanVzdGVkID0gIiR7ZHVtcGZpbGV9X2FkanVzdGVkIjsKKworCW9wZW4obXkgJGRo LCAnPicsICRkdW1wX2FkanVzdGVkKQorCSAgfHwgZGllICJjb3VsZCBub3Qgb3BlbiAkZHVt cF9hZGp1c3RlZCBmb3Igd3JpdGluZyAkISI7CisKKwlteSAkcGdfZHVtcF9wYXRoID0gdXRp bGl0eV9wYXRoKCRub2RlLCAncGdfZHVtcCcpOworCisJJG5vZGUtPnJ1bl9sb2coCisJCVsK KwkJCSRwZ19kdW1wX3BhdGgsICctLW5vLXN5bmMnLAorCQkJJy0tcmVzdHJpY3Qta2V5JyA9 PiAndGVzdCcsCisJCQknLWQnID0+ICRub2RlLT5jb25uc3RyKCRkYiksCisJCQknLWYnID0+ ICRkdW1wZmlsZQorCQldKTsKKworCXByaW50ICRkaCBhZGp1c3RfcmVncmVzc19kdW1wZmls ZShzbHVycF9maWxlKCRkdW1wZmlsZSksCisJCSRhZGp1c3RfY2hpbGRfY29sdW1ucyk7CisJ Y2xvc2UoJGRoKTsKKworCXJldHVybiAkZHVtcF9hZGp1c3RlZDsKK30KKworIyBNYWluIHRl c3Qgd29ya2hvcnNlIHJvdXRpbmUuCisjIE1ha2UgcGdfdXBncmFkZSwgZHVtcCBkYXRhIGFu ZCBjb21wYXJlIGl0Lgorc3ViIHJ1bl90ZXN0Cit7CisJbXkgJHRhZyA9IHNoaWZ0OworCW15 ICRvbGRub2RlID0gc2hpZnQ7CisJbXkgJG5ld25vZGUgPSBzaGlmdDsKKworCW15ICRwZ191 cGdyYWRlX3BhdGggPSB1dGlsaXR5X3BhdGgoJG5ld25vZGUsICdwZ191cGdyYWRlJyk7CisK Kwljb21tYW5kX29rKAorCQlbCisJCQkkcGdfdXBncmFkZV9wYXRoLCAnLS1uby1zeW5jJywK KwkJCSctLW9sZC1kYXRhZGlyJyA9PiAkb2xkbm9kZS0+ZGF0YV9kaXIsCisJCQknLS1uZXct ZGF0YWRpcicgPT4gJG5ld25vZGUtPmRhdGFfZGlyLAorCQkJJy0tb2xkLWJpbmRpcicgPT4g JG9sZG5vZGUtPmNvbmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQkJJy0tbmV3LWJpbmRpcicg PT4gJG5ld25vZGUtPmNvbmZpZ19kYXRhKCctLWJpbmRpcicpLAorCQkJJy0tc29ja2V0ZGly JyA9PiAkbmV3bm9kZS0+aG9zdCwKKwkJCSctLW9sZC1wb3J0JyA9PiAkb2xkbm9kZS0+cG9y dCwKKwkJCSctLW5ldy1wb3J0JyA9PiAkbmV3bm9kZS0+cG9ydCwKKwkJCSRtb2RlLAorCQld LAorCQkncnVuIG9mIHBnX3VwZ3JhZGUgZm9yIG5ldyBpbnN0YW5jZScpOworCW9rKCAhLWQg JG5ld25vZGUtPmRhdGFfZGlyIC4gIi9wZ191cGdyYWRlX291dHB1dC5kIiwKKwkJInBnX3Vw Z3JhZGVfb3V0cHV0LmQvIHJlbW92ZWQgYWZ0ZXIgcGdfdXBncmFkZSBzdWNjZXNzIik7CisK Kwkkb2xkbm9kZS0+c3RhcnQ7CisJbXkgJHNyY19kdW1wID0KKwkJZ2V0X2R1bXBfZm9yX2Nv bXBhcmlzb24oJG9sZG5vZGUsICdwb3N0Z3JlcycsCisJCQkJCQkJCSJvbGRub2RlXyR7dGFn fV9kdW1wIiwgMCk7CisJJG9sZG5vZGUtPnN0b3A7CisKKwkkbmV3bm9kZS0+c3RhcnQ7CisJ bXkgJGRzdF9kdW1wID0KKwkJZ2V0X2R1bXBfZm9yX2NvbXBhcmlzb24oJG5ld25vZGUsICdw b3N0Z3JlcycsCisJCQkJCQkJCSJuZXdub2RlXyR7dGFnfV9kdW1wIiwgMCk7CisJJG5ld25v ZGUtPnN0b3A7CisKKwljb21wYXJlX2ZpbGVzKCRzcmNfZHVtcCwgJGRzdF9kdW1wLAorCQkn ZHVtcCBvdXRwdXRzIGZyb20gb3JpZ2luYWwgYW5kIHJlc3RvcmVkIHJlZ3Jlc3Npb24gZGF0 YWJhc2VzIG1hdGNoJyk7Cit9CisKK3N1YiB0b19oZXgKK3sKKwlteSAkYXJnID0gc2hpZnQ7 CisKKwkkYXJnID0gTWF0aDo6QmlnSW50LT5uZXcoJGFyZyk7CisJJGFyZyA9ICRhcmctPmFz X2hleCgpOworCisJcmV0dXJuICRhcmc7Cit9CisKKyMgY2FzZSAjMTogc3RhcnQgb2xkIG5v ZGUgZnJvbSBkZWZhdWx0cworeworCW15ICR0YWcgPSAxOworCW15ICRvbGQgPQorCQlQb3N0 Z3JlU1FMOjpUZXN0OjpDbHVzdGVyLT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJ ICAgaW5zdGFsbF9wYXRoID0+ICRFTlZ7b2xkaW5zdGFsbH0pOworCSRvbGQtPmluaXQoZXh0 cmEgPT4gWyctayddKTsKKworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0g bXhhY3RfZWF0ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1 c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0 KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9t eG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15 ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+ IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214 b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4 dF9teG9mZn1cbiI7Cit9CisKKyMgY2FzZSAjMjogc3RhcnQgb2xkIG5vZGUgZnJvbSBiZWZv cmUgMzItYml0IHdyYXBhcm91bmQKK3sKKwlteSAkdGFnID0gMjsKKwlteSAkb2xkID0KKwkJ UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJ CQkJCSAgIGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmlu aXQoZXh0cmEgPT4gWyctayddKTsKKwlyZXNldF9teG9mZigkb2xkLCAweEZGRkYwMDAwKTsK KworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfZWF0ZXIoJG9s ZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdu b2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRu ZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlz aF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0g dG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxu IiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2Zpbmlz aF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9 CisKKyMgY2FzZSAjMzogc3RhcnQgb2xkIG5vZGUgbmVhciAzMi1iaXQgd3JhcGFyb3VuZCBh bmQgcmVhY2ggd3JhcGFyb3VuZCBzdGF0ZS4KK3sKKwlteSAkdGFnID0gMzsKKwlteSAkb2xk ID0KKwkJUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwK KwkJCQkJCQkJCSAgIGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRv bGQtPmluaXQoZXh0cmEgPT4gWyctayddKTsKKworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkZG RkVDNzcpOworCW15ICgkc3RhcnRfbXhvZmYsICRmaW5pc2hfbXhvZmYpID0gbXhhY3RfZWF0 ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3 KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRv bGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJ JGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214 b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7 dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAk e2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1c biI7Cit9CisKKyMgY2FzZSAjNDogc3RhcnQgb2xkIG5vZGUgZnJvbSBkZWZhdWx0cworewor CW15ICR0YWcgPSA0OworCW15ICRvbGQgPQorCQlQb3N0Z3JlU1FMOjpUZXN0OjpDbHVzdGVy LT5uZXcoIm9sZG5vZGUke3RhZ30iLAorCQkJCQkJCQkJICAgaW5zdGFsbF9wYXRoID0+ICRF TlZ7b2xkaW5zdGFsbH0pOworCisJJG9sZC0+aW5pdChleHRyYSA9PiBbJy1rJ10pOworCSRv bGQtPmFwcGVuZF9jb25mKCJwb3N0Z3Jlc3FsLmNvbmYiLCAibWF4X2Nvbm5lY3Rpb25zID0g MTI4Iik7CisKKwlkaWFnICJ0ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14b2ZmIHNlZ21l bnRzIjsKKwlteSAoJHN0YXJ0X214b2ZmLCAkZmluaXNoX214b2ZmKSA9IG14YWN0X2h1Z2Vf ZWF0ZXIoJG9sZCk7CisKKwlteSAkbmV3ID0gUG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+ bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5ldy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcs ICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7 CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgkZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0 X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYoJG5ldykpOworCisJbm90ZSAiPj4+IGNhc2Ug IyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUgbXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0 byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkgIiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9m Zn1cbiI7Cit9CisKKyMgY2FzZSAjNTogc3RhcnQgb2xkIG5vZGUgZnJvbSBiZWZvcmUgMzIt Yml0IHdyYXBhcm91bmQKK3sKKwlteSAkdGFnID0gNTsKKwlteSAkb2xkID0KKwkJUG9zdGdy ZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJvbGRub2RlJHt0YWd9IiwKKwkJCQkJCQkJCSAg IGluc3RhbGxfcGF0aCA9PiAkRU5We29sZGluc3RhbGx9KTsKKworCSRvbGQtPmluaXQoZXh0 cmEgPT4gWyctayddKTsKKwkkb2xkLT5hcHBlbmRfY29uZigicG9zdGdyZXNxbC5jb25mIiwg Im1heF9jb25uZWN0aW9ucyA9IDEyOCIpOworCXJlc2V0X214b2ZmKCRvbGQsIDB4RkYwMDAw MDApOworCisJZGlhZyAidGVzdCAjJHt0YWd9IGZvciBtdWx0aXBsZSBteG9mZiBzZWdtZW50 cyI7CisJbXkgKCRzdGFydF9teG9mZiwgJGZpbmlzaF9teG9mZikgPSBteGFjdF9odWdlX2Vh dGVyKCRvbGQpOworCisJbXkgJG5ldyA9IFBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5l dygibmV3bm9kZSR7dGFnfSIpOworCSRuZXctPmluaXQ7CisKKwlydW5fdGVzdCgkdGFnLCAk b2xkLCAkbmV3KTsKKworCSRzdGFydF9teG9mZiA9IHRvX2hleCgkc3RhcnRfbXhvZmYpOwor CSRmaW5pc2hfbXhvZmYgPSB0b19oZXgoJGZpbmlzaF9teG9mZik7CisKKwlteSAkbmV4dF9t eG9mZiA9IHRvX2hleChuZXh0X214b2ZmKCRuZXcpKTsKKworCW5vdGUgIj4+PiBjYXNlICMk e3RhZ31cbiIgLgorCQkgIiBvbGRub2RlIG14b2ZmIGZyb20gJHtzdGFydF9teG9mZn0gdG8g JHtmaW5pc2hfbXhvZmZ9XG4iIC4KKwkJICIgbmV3bm9kZSBteG9mZiAke25leHRfbXhvZmZ9 XG4iOworfQorCisjIGNhc2UgIzY6IHN0YXJ0IG9sZCBub2RlIG5lYXIgMzItYml0IHdyYXBh cm91bmQgYW5kIHJlYWNoIHdyYXBhcm91bmQgc3RhdGUuCit7CisJbXkgJHRhZyA9IDY7CisJ bXkgJG9sZCA9CisJCVBvc3RncmVTUUw6OlRlc3Q6OkNsdXN0ZXItPm5ldygib2xkbm9kZSR7 dGFnfSIsCisJCQkJCQkJCQkgICBpbnN0YWxsX3BhdGggPT4gJEVOVntvbGRpbnN0YWxsfSk7 CisKKwkkb2xkLT5pbml0KGV4dHJhID0+IFsnLWsnXSk7CisKKwlyZXNldF9teG9mZigkb2xk LCAweEZGRkZGRkZGIC0gNTAwXzAwMCk7CisJJG9sZC0+YXBwZW5kX2NvbmYoInBvc3RncmVz cWwuY29uZiIsICJtYXhfY29ubmVjdGlvbnMgPSAxMjgiKTsKKwlteSAoJHN0YXJ0X214b2Zm LCAkZmluaXNoX214b2ZmKSA9IG14YWN0X2h1Z2VfZWF0ZXIoJG9sZCk7CisKKwlkaWFnICJ0 ZXN0ICMke3RhZ30gZm9yIG11bHRpcGxlIG14b2ZmIHNlZ21lbnRzIjsKKwlteSAkbmV3ID0g UG9zdGdyZVNRTDo6VGVzdDo6Q2x1c3Rlci0+bmV3KCJuZXdub2RlJHt0YWd9Iik7CisJJG5l dy0+aW5pdDsKKworCXJ1bl90ZXN0KCR0YWcsICRvbGQsICRuZXcpOworCisJJHN0YXJ0X214 b2ZmID0gdG9faGV4KCRzdGFydF9teG9mZik7CisJJGZpbmlzaF9teG9mZiA9IHRvX2hleCgk ZmluaXNoX214b2ZmKTsKKworCW15ICRuZXh0X214b2ZmID0gdG9faGV4KG5leHRfbXhvZmYo JG5ldykpOworCisJbm90ZSAiPj4+IGNhc2UgIyR7dGFnfVxuIiAuCisJCSAiIG9sZG5vZGUg bXhvZmYgZnJvbSAke3N0YXJ0X214b2ZmfSB0byAke2ZpbmlzaF9teG9mZn1cbiIgLgorCQkg IiBuZXdub2RlIG14b2ZmICR7bmV4dF9teG9mZn1cbiI7Cit9CisKK2RvbmVfdGVzdGluZygp OwotLSAKMi40Ny4zCgo= --------------FWgCOM0EMCxqCdHtyKCKm400--