Received: from malur.postgresql.org ([2a02:16a8:dc51::56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvJH7-0002kx-N1 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Aug 2018 09:30:02 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fvJH6-0003xE-18 for pgsql-hackers@arkaria.postgresql.org; Thu, 30 Aug 2018 09:30:00 +0000 Received: from magus.postgresql.org ([2a02:c0:301:0:ffff::29]) by malur.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA384:256) (Exim 4.89) (envelope-from ) id 1fvJH5-0003x7-M0 for pgsql-hackers@lists.postgresql.org; Thu, 30 Aug 2018 09:29:59 +0000 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1fvJGx-0002m5-Gl for pgsql-hackers@postgresql.org; Thu, 30 Aug 2018 09:29:59 +0000 Received: from vc2.ecl.ntt.co.jp (vc2.ecl.ntt.co.jp [129.60.86.154]) by tama500.ecl.ntt.co.jp (8.13.8/8.13.8) with ESMTP id w7U9Tnn1011693 for ; Thu, 30 Aug 2018 18:29:49 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id EB849639340; Thu, 30 Aug 2018 18:29:48 +0900 (JST) Received: from jcms-pop21.ecl.ntt.co.jp (jcms-pop21.ecl.ntt.co.jp [129.60.87.134]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id DF34163911C; Thu, 30 Aug 2018 18:29:48 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id D89F84006BC; Thu, 30 Aug 2018 18:29:48 +0900 (JST) Subject: Re: speeding up planning with partitions From: Amit Langote References: <9d7c5112-cb99-6a47-d3be-cf1ee6862a1d@lab.ntt.co.jp> Message-ID: <3f280722-46f2-c2a4-4c19-2cfa28c6c1cd@lab.ntt.co.jp> Date: Thu, 30 Aug 2018 18:29:28 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1 MIME-Version: 1.0 In-Reply-To: <9d7c5112-cb99-6a47-d3be-cf1ee6862a1d@lab.ntt.co.jp> Content-Type: multipart/mixed; boundary="------------E789225A3DB41495BFDDF38C" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Pg Hackers X-TM-AS-MML: disable List-Id: List-Help: List-Subscribe: List-Post: List-Owner: List-Archive: Precedence: bulk This is a multi-part message in MIME format. --------------E789225A3DB41495BFDDF38C Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit On 2018/08/29 21:06, Amit Langote wrote: > I measured the gain in performance due to each patch on a modest virtual > machine. Details of the measurement and results follow. > > UPDATE: > > nparts master 0001 0002 0003 > ====== ====== ==== ==== ==== > 0 2856 2893 2862 2816 > 8 507 1115 1447 1872 > 16 260 765 1173 1892 > 32 119 483 922 1884 > 64 59 282 615 1881 > 128 29 153 378 1835 > 256 14 79 210 1803 > 512 5 40 113 1728 > 1024 2 17 57 1616 > 2048 0* 9 30 1471 > 4096 0+ 4 15 1236 > 8192 0= 2 7 975 > > For SELECT: > > nparts master 0001 0002 0003 > ====== ====== ==== ==== ==== > 0 2290 2329 2319 2268 > 8 1058 1077 1414 1788 > 16 711 729 1124 1789 > 32 450 475 879 1773 > 64 265 272 603 1765 > 128 146 149 371 1685 > 256 76 77 214 1678 > 512 39 39 112 1636 > 1024 16 17 59 1525 > 2048 8 9 29 1416 > 4096 4 4 15 1195 > 8192 2 2 7 932 Prompted by Tsunakawa-san's comment, I tried to look at the profiles when running the benchmark with partitioning and noticed a few things that made clear why, even with 0003 applied, tps numbers decreased as the number of partitions increased. Some functions that appeared high up in the profiles were related to partitioning: * set_relation_partition_info calling partition_bounds_copy(), which calls datumCopy() on N Datums, where N is the number of partitions. The more the number of partitions, higher up it is in profiles. I suspect that this copying might be redundant; planner can keep using the same pointer as relcache There are a few existing and newly introduced sites in the planner where the code iterates over *all* partitions of a table where processing just the partition selected for scanning would suffice. I observed the following functions in profiles: * make_partitionedrel_pruneinfo, which goes over all partitions to generate subplan_map and subpart_map arrays to put into the PartitionedRelPruneInfo data structure that it's in the charge of generating * apply_scanjoin_target_to_paths, which goes over all partitions to adjust their Paths for applying required scanjoin target, although most of those are dummy ones that won't need the adjustment * For UPDATE, a couple of functions I introduced in patch 0001 were doing the same thing as apply_scanjoin_target_to_paths, which is unnecessary To fix the above three instances of redundant processing, I added a Bitmapset 'live_parts' to the RelOptInfo which stores the set of indexes of only the unpruned partitions (into the RelOptInfo.part_rels array) and replaced the for (i = 0; i < rel->nparts; i++) loops in those sites with the loop that iterates over the members of 'live_parts'. Results looked were promising indeed, especially after applying 0003 which gets rid of locking all partitions. UPDATE: nparts master 0001 0002 0003 ====== ====== ==== ==== ==== 0 2856 2893 2862 2816 8 507 1115 1466 1845 16 260 765 1161 1876 32 119 483 910 1862 64 59 282 609 1895 128 29 153 376 1884 256 14 79 212 1874 512 5 40 115 1859 1024 2 17 58 1847 2048 0 9 29 1883 4096 0 4 15 1867 8192 0 2 7 1826 SELECT: nparts master 0001 0002 0003 ====== ====== ==== ==== ==== 0 2290 2329 2319 2268 8 1058 1077 1431 1800 16 711 729 1158 1781 32 450 475 908 1777 64 265 272 612 1791 128 146 149 379 1777 256 76 77 213 1785 512 39 39 114 1776 1024 16 17 59 1756 2048 8 9 30 1746 4096 4 4 15 1722 8192 2 2 7 1706 Note that with 0003, tps doesn't degrade as the number of partitions increase. Attached updated patches, with 0002 containing the changes mentioned above. Thanks, Amit --------------E789225A3DB41495BFDDF38C Content-Type: text/plain; charset=UTF-8; name="v2-0001-Overhaul-partitioned-table-update-delete-planning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v2-0001-Overhaul-partitioned-table-update-delete-planning.pa"; filename*1="tch" RnJvbSAwNjBiZDI0NDVlYTljYmE5YWRhZGQ3MzUwNTY4OWQ2ZjA2NTgzZWU4IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyNCBBdWcgMjAxOCAxMjozOTozNiArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djIgMS8zXSBPdmVyaGF1bCBwYXJ0aXRpb25lZCB0YWJsZSB1cGRhdGUvZGVsZXRlIHBsYW5u aW5nCgpDdXJyZW50IG1ldGhvZCwgaW5oZXJpdGFuY2VfcGxhbm5lciwgYXBwbGllcyBncm91 cGluZ19wbGFubmVyIGFuZApoZW5jZSBxdWVyeV9wbGFubmVyIHRvIHRoZSBxdWVyeSByZXBl YXRlZGx5IHdpdGggZWFjaCBsZWFmIHBhcnRpdGlvbgpyZXBsYWNpbmcgdGhlIHJvb3QgcGFy ZW50IGFzIHRoZSBxdWVyeSdzIHJlc3VsdCByZWxhdGlvbi4gT25lIGJpZwpkcmF3YmFjayBv ZiB0aGlzIGFwcHJvYWNoIGlzIHRoYXQgaXQgY2Fubm90IHVzZSBwYXJ0cHJ1bmUuYyB0bwpw ZXJmb3JtIHBhcnRpdGlvbiBwcnVuaW5nIG9uIHRoZSBwYXJ0aXRpb25lZCByZXN1bHQgcmVs YXRpb24sIGJlY2F1c2UKaXQgY2FuIG9ubHkgYmUgaW52b2tlZCBpZiBxdWVyeV9wbGFubmVy IHNlZXMgdGhlIHBhcnRpdGlvbmVkIHJlbGF0aW9uCml0c2VsZiBpbiB0aGUgcXVlcnkuICBU aGF0IGlzIG5vdCB0cnVlIHdpdGggdGhlIGV4aXN0aW5nIG1ldGhvZCwKYmVjYXVzZSBhcyBt ZW50aW9uZWQgYWJvdmUsIHF1ZXJ5X3BsYW5uZXIgaXMgaW52b2tlZCB3aXRoIHRoZQpwYXJ0 aXRpb25lZCByZWxhdGlvbiByZXBsYWNlZCB3aXRoIGluZGl2aWR1YWwgbGVhZiBwYXJ0aXRp b25zLgoKV2hpbGUgbW9zdCBvZiB0aGUgd29yayBpbiBlYWNoIHJlcGl0aXRpb24gb2YgZ3Jv dXBpbmdfcGxhbm5lciAoYW5kCnF1ZXJ5X3BsYW5uZXIpIGlzIHNhbWUsIGEgY291cGxlIG9m IHRoaW5ncyBtYXkgZGlmZmVyIGZyb20gcGFydGl0aW9uCnRvIHBhcnRpdGlvbiAtLSAxLiBK b2luIHBsYW5uaW5nIG1heSBwcm9kdWNlIGRpZmZlcmVudCBQYXRocyBmb3IKam9pbmluZyBh Z2FpbnN0IGRpZmZlcmVudCByZXN1bHQgcGFydGl0aW9ucywgMi4gZ3JvdXBpbmdfcGxhbm5l cgptYXkgcHJvZHVjZSBkaWZmZXJlbnQgdG9wLWxldmVsIHRhcmdldCBsaXN0cyBmb3IgZGlm ZmVyZW50CnBhcnRpdGlvbnMsIGJhc2VkIG9uIHRoZWlyIFR1cGxlRGVzY3MuCgpUaGlzIGNv bW1pdCByZWFycmFuZ2VzIHRoaW5ncyBzbyB0aGF0LCBvbmx5IHRoZSBwbGFubmluZyBzdGVw cyB0aGF0CmFmZmVjdCAxIGFuZCAyIGFib3ZlIGFyZSByZXBlYXRlZCBmb3IgcGFydGl0aW9u cyB0aGF0IGFyZSBzZWxlY3RlZCBieQpxdWVyeV9wbGFubmVyIGJ5IGFwcGx5aW5nIHBhcnRw cnVuZS5jIGJhc2VkIHBydW5pbmcgdG8gdGhlIG9yaWdpbmFsCnBhcnRpdGlvbmVkIHJlc3Vs dCByZWwuCgpUaGF0IG1ha2VzIHRoaW5ncyBmYXN0ZXIgYmVjYXVzZSAgMS4gcGFydHBydW5l LmMgYmFzZWQgcHJ1bmluZyBpcwp1c2VkIGluc3RlYWQgb2YgdXNpbmcgY29uc3RyYWludCBl eGNsdXNpb24gZm9yIGVhY2ggcGFydGl0aW9uLCAyLgpncm91cGluZ19wbGFubmVyIChhbmQg cXVlcnlfcGxhbm5lcikgaXMgaW52b2tlZCBvbmx5IG9uY2UgaW5zdGVhZCBvZgpmb3IgZXZl cnkgcGFydGl0aW9uIHRodXMgc2F2aW5nIGN5Y2xlcyBhbmQgbWVtb3J5LgoKVGhpcyBzdGls bCBkb2Vzbid0IGhlbHAgbXVjaCBpZiBubyBwYXJ0aXRpb25zIGFyZSBwcnVuZWQsIGJlY2F1 c2UKd2Ugc3RpbGwgcmVwZWF0IGpvaW4gcGxhbm5pbmcgYW5kIG1ha2VzIGNvcGllcyBvZiB0 aGUgcXVlcnkgZm9yCmVhY2ggcGFydGl0aW9uLCBidXQgZm9yIGNvbW1vbiBjYXNlcyB3aGVy ZSBvbmx5IGhhbmRmdWwgcGFydGl0aW9ucwpyZW1haW4gYWZ0ZXIgcHJ1bmluZywgdGhpcyBt YWtlcyB0aGluZ3Mgc2lnbmlmaWNhbmx5IGZhc3Rlci4KLS0tCiBkb2Mvc3JjL3NnbWwvZGRs LnNnbWwgICAgICAgICAgICAgICAgICAgICAgICB8ICAxNSArLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BhdGgvYWxscGF0aHMuYyAgICAgICAgfCAgOTcgKysrKysrLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYyAgICAgICAgfCAgIDQgKy0KIHNyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyAgICAgICAgIHwgMzc4ICsrKysrKysrKysr KysrKysrKysrLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMgICAgICAgfCAgMjggKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQu YyAgICAgICAgIHwgIDMwIC0tLQogc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRp b25fam9pbi5vdXQgfCAgIDQgKy0KIDcgZmlsZXMgY2hhbmdlZCwgNDE2IGluc2VydGlvbnMo KyksIDE0MCBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3NnbWwvZGRsLnNn bWwgYi9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwKaW5kZXggYjVlZDFiNzkzOS4uNTNjNDc5ZmJi OCAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCisrKyBiL2RvYy9zcmMvc2dt bC9kZGwuc2dtbApAQCAtMzkzMywxNiArMzkzMyw2IEBAIEVYUExBSU4gU0VMRUNUIGNvdW50 KCopIEZST00gbWVhc3VyZW1lbnQgV0hFUkUgbG9nZGF0ZSAmZ3Q7PSBEQVRFICcyMDA4LTAx LTAxJzsKICAgICA8eHJlZiBsaW5rZW5kPSJndWMtZW5hYmxlLXBhcnRpdGlvbi1wcnVuaW5n Ii8+IHNldHRpbmcuCiAgICA8L3BhcmE+CiAKLSAgIDxub3RlPgotICAgIDxwYXJhPgotICAg ICBDdXJyZW50bHksIHBydW5pbmcgb2YgcGFydGl0aW9ucyBkdXJpbmcgdGhlIHBsYW5uaW5n IG9mIGFuCi0gICAgIDxjb21tYW5kPlVQREFURTwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+REVM RVRFPC9jb21tYW5kPiBjb21tYW5kIGlzCi0gICAgIGltcGxlbWVudGVkIHVzaW5nIHRoZSBj b25zdHJhaW50IGV4Y2x1c2lvbiBtZXRob2QgKGhvd2V2ZXIsIGl0IGlzCi0gICAgIGNvbnRy b2xsZWQgYnkgdGhlIDxsaXRlcmFsPmVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZzwvbGl0ZXJh bD4gcmF0aGVyIHRoYW4KLSAgICAgPGxpdGVyYWw+Y29uc3RyYWludF9leGNsdXNpb248L2xp dGVyYWw+KSAmbWRhc2g7IHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24KLSAgICAgZm9yIGRl dGFpbHMgYW5kIGNhdmVhdHMgdGhhdCBhcHBseS4KLSAgICA8L3BhcmE+Ci0KICAgICA8cGFy YT4KICAgICAgRXhlY3V0aW9uLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgY3VycmVudGx5IG9j Y3VycyBmb3IgdGhlCiAgICAgIDxsaXRlcmFsPkFwcGVuZDwvbGl0ZXJhbD4gYW5kIDxsaXRl cmFsPk1lcmdlQXBwZW5kPC9saXRlcmFsPiBub2RlIHR5cGVzLgpAQCAtMzk2NCw5ICszOTU0 LDggQEAgRVhQTEFJTiBTRUxFQ1QgY291bnQoKikgRlJPTSBtZWFzdXJlbWVudCBXSEVSRSBs b2dkYXRlICZndDs9IERBVEUgJzIwMDgtMDEtMDEnOwogCiAgICA8cGFyYT4KICAgICA8Zmly c3R0ZXJtPkNvbnN0cmFpbnQgZXhjbHVzaW9uPC9maXJzdHRlcm0+IGlzIGEgcXVlcnkgb3B0 aW1pemF0aW9uCi0gICAgdGVjaG5pcXVlIHNpbWlsYXIgdG8gcGFydGl0aW9uIHBydW5pbmcu ICBXaGlsZSBpdCBpcyBwcmltYXJpbHkgdXNlZAotICAgIGZvciBwYXJ0aXRpb25pbmcgaW1w bGVtZW50ZWQgdXNpbmcgdGhlIGxlZ2FjeSBpbmhlcml0YW5jZSBtZXRob2QsIGl0IGNhbiBi ZQotICAgIHVzZWQgZm9yIG90aGVyIHB1cnBvc2VzLCBpbmNsdWRpbmcgd2l0aCBkZWNsYXJh dGl2ZSBwYXJ0aXRpb25pbmcuCisgICAgdGVjaG5pcXVlIHNpbWlsYXIgdG8gcGFydGl0aW9u IHBydW5pbmcuICBJdCBpcyBwcmltYXJpbHkgdXNlZAorICAgIGZvciBwYXJ0aXRpb25pbmcg aW1wbGVtZW50ZWQgdXNpbmcgdGhlIGxlZ2FjeSBpbmhlcml0YW5jZSBtZXRob2QuCiAgICA8 L3BhcmE+CiAKICAgIDxwYXJhPgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMKaW5kZXggMGU4MGFlYjY1Yy4uNTkzN2MwNDM2YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAib3B0aW1p emVyL3BhdGhub2RlLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVk ZSAib3B0aW1pemVyL3BsYW5jYXQuaCIKKyNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm1haW4u aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgogI2luY2x1ZGUgIm9wdGltaXpl ci9wcmVwLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3RyaWN0aW5mby5oIgpAQCAtMTE5 LDYgKzEyMCw5IEBAIHN0YXRpYyB2b2lkIHNldF9uYW1lZHR1cGxlc3RvcmVfcGF0aGxpc3Qo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIHN0YXRpYyB2b2lkIHNldF93 b3JrdGFibGVfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwK IAkJCQkJICAgUmFuZ2VUYmxFbnRyeSAqcnRlKTsKIHN0YXRpYyBSZWxPcHRJbmZvICptYWtl X3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCk7 CitzdGF0aWMgUmVsT3B0SW5mbyAqcGFydGl0aW9ud2lzZV9tYWtlX3JlbF9mcm9tX2pvaW5s aXN0KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJUmVsT3B0SW5mbyAqcGFyZW50LAorCQkJ CQkJTGlzdCAqam9pbmxpc3QpOwogc3RhdGljIGJvb2wgc3VicXVlcnlfaXNfcHVzaGRvd25f c2FmZShRdWVyeSAqc3VicXVlcnksIFF1ZXJ5ICp0b3BxdWVyeSwKIAkJCQkJCSAgcHVzaGRv d25fc2FmZXR5X2luZm8gKnNhZmV0eUluZm8pOwogc3RhdGljIGJvb2wgcmVjdXJzZV9wdXNo ZG93bl9zYWZlKE5vZGUgKnNldE9wLCBRdWVyeSAqdG9wcXVlcnksCkBAIC0xODEsMTMgKzE4 NSwzMCBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5saXN0 KQogCiAJLyoKIAkgKiBHZW5lcmF0ZSBhY2Nlc3MgcGF0aHMgZm9yIHRoZSBlbnRpcmUgam9p biB0cmVlLgorCSAqCisJICogSWYgd2UncmUgZG9pbmcgdGhpcyBmb3IgYW4gVVBEQVRFIG9y IERFTEVURSBxdWVyeSB3aG9zZSB0YXJnZXQgaXMgYQorCSAqIHBhcnRpdGlvbmVkIHRhYmxl LCB3ZSBtdXN0IGRvIHRoZSBqb2luIHBsYW5uaW5nIGFnYWluc3QgZWFjaCBvZiBpdHMKKwkg KiBsZWFmIHBhcnRpdGlvbnMgaW5zdGVhZC4KIAkgKi8KLQlyZWwgPSBtYWtlX3JlbF9mcm9t X2pvaW5saXN0KHJvb3QsIGpvaW5saXN0KTsKKwlpZiAocm9vdC0+cGFyc2UtPnJlc3VsdFJl bGF0aW9uICYmCisJCXJvb3QtPnBhcnNlLT5jb21tYW5kVHlwZSAhPSBDTURfSU5TRVJUICYm CisJCXJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9u XSAmJgorCQlyb290LT5zaW1wbGVfcmVsX2FycmF5W3Jvb3QtPnBhcnNlLT5yZXN1bHRSZWxh dGlvbl0tPnBhcnRfc2NoZW1lKQorCXsKKwkJUmVsT3B0SW5mbyAqcm9vdHJlbCA9IHJvb3Qt PnNpbXBsZV9yZWxfYXJyYXlbcm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uXTsKIAotCS8q Ci0JICogVGhlIHJlc3VsdCBzaG91bGQgam9pbiBhbGwgYW5kIG9ubHkgdGhlIHF1ZXJ5J3Mg YmFzZSByZWxzLgotCSAqLwotCUFzc2VydChibXNfZXF1YWwocmVsLT5yZWxpZHMsIHJvb3Qt PmFsbF9iYXNlcmVscykpOworCQlyZWwgPSBwYXJ0aXRpb253aXNlX21ha2VfcmVsX2Zyb21f am9pbmxpc3Qocm9vdCwgcm9vdHJlbCwgam9pbmxpc3QpOworCX0KKwllbHNlCisJeworCQly ZWwgPSBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KHJvb3QsIGpvaW5saXN0KTsKKworCQkvKgor CQkgKiBUaGUgcmVzdWx0IHNob3VsZCBqb2luIGFsbCBhbmQgb25seSB0aGUgcXVlcnkncyBi YXNlIHJlbHMuCisJCSAqLworCQlBc3NlcnQoYm1zX2VxdWFsKHJlbC0+cmVsaWRzLCByb290 LT5hbGxfYmFzZXJlbHMpKTsKKworCX0KIAogCXJldHVybiByZWw7CiB9CkBAIC0yNTkxLDYg KzI2MTIsNzIgQEAgZ2VuZXJhdGVfZ2F0aGVyX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsIGJvb2wgb3ZlcnJpZGVfcm93cykKIH0KIAogLyoKKyAqIHBhcnRp dGlvbndpc2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdAorICoJCXBlcmZvcm1zIGpvaW4gcGxh bm5pbmcgYWdhaW5zdCBlYWNoIG9mIHRoZSBsZWFmIHBhcnRpdGlvbnMgY29udGFpbmVkCisg KgkJaW4gdGhlIHBhcnRpdGlvbiB0cmVlIHdob3NlIHJvb3QgcmVsYXRpb24gaXMgJ3BhcmVu dCcKKyAqCisgKiBSZWN1cnNpdmVseSBjYWxsZWQgZm9yIGVhY2ggcGFydGl0aW9uZWQgdGFi bGUgY29udGFpbmVkIGluIGEgZ2l2ZW4KKyAqcGFydGl0aW9uIHRyZWUuCisgKi8KK3N0YXRp YyBSZWxPcHRJbmZvICoKK3BhcnRpdGlvbndpc2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdChQ bGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJ CQkJCQkgTGlzdCAqam9pbmxpc3QpCit7CisJaW50CQlpOworCisJQXNzZXJ0KHJvb3QtPnBh cnNlLT5yZXN1bHRSZWxhdGlvbiAhPSAwKTsKKwlBc3NlcnQocGFyZW50LT5wYXJ0X3NjaGVt ZSAhPSBOVUxMKTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXJlbnQtPm5wYXJ0czsgaSsrKQor CXsKKwkJUmVsT3B0SW5mbyAqcGFydHJlbCA9IHBhcmVudC0+cGFydF9yZWxzW2ldOworCQlB cHBlbmRSZWxJbmZvICphcHBpbmZvOworCQlMaXN0CSAgICp0cmFuc2xhdGVkX2pvaW5saXN0 OworCQlMaXN0CSAgICpzYXZlZF9qb2luX2luZm9fbGlzdCA9IGxpc3RfY29weShyb290LT5q b2luX2luZm9fbGlzdCk7CisKKwkJLyogSWdub3JlIHBydW5lZCBwYXJ0aXRpb25zLiAqLwor CQlpZiAoSVNfRFVNTVlfUkVMKHBhcnRyZWwpKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogSGFjayB0byBtYWtlIHRoZSBqb2luIHBsYW5uaW5nIGNvZGUgYmVsaWV2ZSB0aGF0ICdw YXJ0cmVsJyBjYW4KKwkJICogYmUgam9pbmVkIGFnYWluc3QuCisJCSAqLworCQlwYXJ0cmVs LT5yZWxvcHRraW5kID0gUkVMT1BUX0JBU0VSRUw7CisKKwkJLyoKKwkJICogUmVwbGFjZSBy ZWZlcmVuY2VzIHRvIHRoZSBwYXJlbnQgcmVsIGluIGV4cHJlc3Npb25zIHJlbGV2YW50IHRv IGpvaW4KKwkJICogcGxhbm5pbmcuCisJCSAqLworCQlhcHBpbmZvID0gcm9vdC0+YXBwZW5k X3JlbF9hcnJheVtwYXJ0cmVsLT5yZWxpZF07CisJCXRyYW5zbGF0ZWRfam9pbmxpc3QgPSAo TGlzdCAqKQorCQkJCQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LCAoTm9kZSAqKSBq b2lubGlzdCwKKwkJCQkJCQkJCQkJICAgMSwgJmFwcGluZm8pOworCQlyb290LT5qb2luX2lu Zm9fbGlzdCA9IChMaXN0ICopCisJCQkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKHJvb3Qs CisJCQkJCQkJCQkJCSAgIChOb2RlICopIHJvb3QtPmpvaW5faW5mb19saXN0LAorCQkJCQkJ CQkJCQkgICAxLCAmYXBwaW5mbyk7CisJCS8qIFJlc2V0IGpvaW4gcGxhbm5pbmcgZGF0YSBz dHJ1Y3R1cmVzIGZvciBhIG5ldyBwYXJ0aXRpb24uICovCisJCXJvb3QtPmpvaW5fcmVsX2xp c3QgPSBOSUw7CisJCXJvb3QtPmpvaW5fcmVsX2hhc2ggPSBOVUxMOworCisJCS8qIFJlY3Vy c2UgaWYgdGhlIHBhcnRpdGlvbiBpcyBpdHNlbGYgYSBwYXJ0aXRpb25lZCB0YWJsZS4gKi8K KwkJaWYgKHBhcnRyZWwtPnBhcnRfc2NoZW1lICE9IE5VTEwpCisJCQlwYXJ0cmVsID0gcGFy dGl0aW9ud2lzZV9tYWtlX3JlbF9mcm9tX2pvaW5saXN0KHJvb3QsIHBhcnRyZWwsCisJCQkJ CQkJCQkJCQkJCXRyYW5zbGF0ZWRfam9pbmxpc3QpOworCQllbHNlCisJCQkvKiBQZXJmb3Jt IHRoZSBqb2luIHBsYW5uaW5nIGFuZCBzYXZlIHRoZSByZXN1bHRpbmcgcmVsYXRpb24uICov CisJCQlwYXJlbnQtPnBhcnRfcmVsc1tpXSA9CisJCQkJCQltYWtlX3JlbF9mcm9tX2pvaW5s aXN0KHJvb3QsIHRyYW5zbGF0ZWRfam9pbmxpc3QpOworCisJCXJvb3QtPmpvaW5faW5mb19s aXN0ID0gc2F2ZWRfam9pbl9pbmZvX2xpc3Q7CisJfQorCisJcmV0dXJuIHBhcmVudDsKK30K KworLyoKICAqIG1ha2VfcmVsX2Zyb21fam9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBh dGhzIHVzaW5nIGEgImpvaW5saXN0IiB0byBndWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4K ICAqCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwppbmRleCBiMDVhZGM3 MGM0Li4zZjBkODBlYWE2IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxh bi9wbGFubWFpbi5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWlu LmMKQEAgLTI2Niw3ICsyNjYsOSBAQCBxdWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290 LCBMaXN0ICp0bGlzdCwKIAogCS8qIENoZWNrIHRoYXQgd2UgZ290IGF0IGxlYXN0IG9uZSB1 c2FibGUgcGF0aCAqLwogCWlmICghZmluYWxfcmVsIHx8ICFmaW5hbF9yZWwtPmNoZWFwZXN0 X3RvdGFsX3BhdGggfHwKLQkJZmluYWxfcmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoLT5wYXJh bV9pbmZvICE9IE5VTEwpCisJCWZpbmFsX3JlbC0+Y2hlYXBlc3RfdG90YWxfcGF0aC0+cGFy YW1faW5mbyAhPSBOVUxMIHx8CisJCShmaW5hbF9yZWwtPnJlbGlkID09IHJvb3QtPnBhcnNl LT5yZXN1bHRSZWxhdGlvbiAmJgorCQkgcm9vdC0+cGFyc2UtPmNvbW1hbmRUeXBlID09IENN RF9JTlNFUlQpKQogCQllbG9nKEVSUk9SLCAiZmFpbGVkIHRvIGNvbnN0cnVjdCB0aGUgam9p biByZWxhdGlvbiIpOwogCiAJcmV0dXJuIGZpbmFsX3JlbDsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wbGFuL3BsYW5uZXIuYwppbmRleCA5NmJmMDYwMWE4Li4wNzZkYmQzZDYyIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0yMzgsNiArMjM4LDE2IEBAIHN0 YXRpYyBib29sIGdyb3VwX2J5X2hhc19wYXJ0a2V5KFJlbE9wdEluZm8gKmlucHV0X3JlbCwK IAkJCQkJIExpc3QgKnRhcmdldExpc3QsCiAJCQkJCSBMaXN0ICpncm91cENsYXVzZSk7CiAK K3N0YXRpYyB2b2lkIHBhcnRpdGlvbndpc2VfYWRqdXN0X3NjYW5qb2luX3RhcmdldChQbGFu bmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSBSZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJCQkJ CQkgTGlzdCAqKnBhcnRpdGlvbl9zdWJyb290cywKKwkJCQkJCQkJCSBMaXN0ICoqcGFydGl0 aW9uZWRfcmVscywKKwkJCQkJCQkJCSBMaXN0ICoqcmVzdWx0UmVsYXRpb25zLAorCQkJCQkJ CQkJIExpc3QgKipzdWJwYXRocywKKwkJCQkJCQkJCSBMaXN0ICoqV0NPTGlzdHMsCisJCQkJ CQkJCQkgTGlzdCAqKnJldHVybmluZ0xpc3RzLAorCQkJCQkJCQkJIExpc3QgKipyb3dNYXJr cyk7CisKIAogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgpAQCAtOTU5LDcgKzk2OSw5 IEBAIHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNl LAogCSAqIG5lZWRzIHNwZWNpYWwgcHJvY2Vzc2luZywgZWxzZSBnbyBzdHJhaWdodCB0byBn cm91cGluZ19wbGFubmVyLgogCSAqLwogCWlmIChwYXJzZS0+cmVzdWx0UmVsYXRpb24gJiYK LQkJcnRfZmV0Y2gocGFyc2UtPnJlc3VsdFJlbGF0aW9uLCBwYXJzZS0+cnRhYmxlKS0+aW5o KQorCQlydF9mZXRjaChwYXJzZS0+cmVzdWx0UmVsYXRpb24sIHBhcnNlLT5ydGFibGUpLT5p bmggJiYKKwkJcnRfZmV0Y2gocGFyc2UtPnJlc3VsdFJlbGF0aW9uLCBwYXJzZS0+cnRhYmxl KS0+cmVsa2luZCAhPQorCQkJCSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQogCQlpbmhl cml0YW5jZV9wbGFubmVyKHJvb3QpOwogCWVsc2UKIAkJZ3JvdXBpbmdfcGxhbm5lcihyb290 LCBmYWxzZSwgdHVwbGVfZnJhY3Rpb24pOwpAQCAtMTY4OCw2ICsxNzAwLDE0IEBAIGdyb3Vw aW5nX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2VfdXBkYXRl LAogCVJlbE9wdEluZm8gKmN1cnJlbnRfcmVsOwogCVJlbE9wdEluZm8gKmZpbmFsX3JlbDsK IAlMaXN0Q2VsbCAgICpsYzsKKwlMaXN0CSAgICpvcmlnX3BhcnNlX3RsaXN0ID0gbGlzdF9j b3B5KHBhcnNlLT50YXJnZXRMaXN0KTsKKwlMaXN0CSAgICpwYXJ0aXRpb25fc3Vicm9vdHMg PSBOSUw7CisJTGlzdAkgICAqcGFydGl0aW9uZWRfcmVscyA9IE5JTDsKKwlMaXN0CSAgICpw YXJ0aXRpb25fcmVzdWx0UmVsYXRpb25zID0gTklMOworCUxpc3QJICAgKnBhcnRpdGlvbl9z dWJwYXRocyA9IE5JTDsKKwlMaXN0CSAgICpwYXJ0aXRpb25fV0NPTGlzdHMgPSBOSUw7CisJ TGlzdAkgICAqcGFydGl0aW9uX3JldHVybmluZ0xpc3RzID0gTklMOworCUxpc3QJICAgKnBh cnRpdGlvbl9yb3dNYXJrcyA9IE5JTDsKIAogCS8qIFR3ZWFrIGNhbGxlci1zdXBwbGllZCB0 dXBsZV9mcmFjdGlvbiBpZiBoYXZlIExJTUlUL09GRlNFVCAqLwogCWlmIChwYXJzZS0+bGlt aXRDb3VudCB8fCBwYXJzZS0+bGltaXRPZmZzZXQpCkBAIC0yMDE4LDEzICsyMDM4LDQ0IEBA IGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2Vf dXBkYXRlLAogCQkJc2NhbmpvaW5fdGFyZ2V0c19jb250YWluX3NyZnMgPSBOSUw7CiAJCX0K IAotCQkvKiBBcHBseSBzY2FuL2pvaW4gdGFyZ2V0LiAqLwotCQlzY2Fuam9pbl90YXJnZXRf c2FtZV9leHBycyA9IGxpc3RfbGVuZ3RoKHNjYW5qb2luX3RhcmdldHMpID09IDEKLQkJCSYm IGVxdWFsKHNjYW5qb2luX3RhcmdldC0+ZXhwcnMsIGN1cnJlbnRfcmVsLT5yZWx0YXJnZXQt PmV4cHJzKTsKLQkJYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzKHJvb3QsIGN1cnJl bnRfcmVsLCBzY2Fuam9pbl90YXJnZXRzLAotCQkJCQkJCQkJICAgc2NhbmpvaW5fdGFyZ2V0 c19jb250YWluX3NyZnMsCi0JCQkJCQkJCQkgICBzY2Fuam9pbl90YXJnZXRfcGFyYWxsZWxf c2FmZSwKLQkJCQkJCQkJCSAgIHNjYW5qb2luX3RhcmdldF9zYW1lX2V4cHJzKTsKKwkJLyoK KwkJICogRm9yIGFuIFVQREFURS9ERUxFVEUgcXVlcnkgd2hvc2UgdGFyZ2V0IGlzIHBhcnRp dGlvbmVkIHRhYmxlLCB3ZQorCQkgKiBtdXN0IGdlbmVyYXRlIHRoZSB0YXJnZXRsaXN0IGZv ciBlYWNoIG9mIGl0cyBsZWFmIHBhcnRpdGlvbnMgYW5kCisJCSAqIGFwcGx5IHRoYXQuCisJ CSAqLworCQlpZiAoY3VycmVudF9yZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwg JiYKKwkJCWN1cnJlbnRfcmVsLT5wYXJ0X3NjaGVtZSAmJgorCQkJY3VycmVudF9yZWwtPnJl bGlkID09IHJvb3QtPnBhcnNlLT5yZXN1bHRSZWxhdGlvbiAmJgorCQkJcGFyc2UtPmNvbW1h bmRUeXBlICE9IENNRF9JTlNFUlQpCisJCXsKKwkJCS8qCisJCQkgKiBzY2Fuam9pbl90YXJn ZXQgc2hvdWxkbid0IGhhdmUgY2hhbmdlZCBmcm9tIGZpbmFsX3RhcmdldCwKKwkJCSAqIGJl Y2F1c2UgVVBEQVRFL0RFTEVURSBkb2Vzbid0IHN1cHBvcnQgdmFyaW91cyBmZWF0dXJlcyB0 aGF0CisJCQkgKiB3b3VsZCd2ZSByZXF1aXJlZCBtb2RpZmljYXRpb25zIHRoYXQgYXJlIHBl cmZvcm1lZCBhYm92ZS4KKwkJCSAqIFRoYXQncyBpbXBvcnRhbnQgYmVjYXVzZSB3ZSdsbCBn ZW5lcmF0ZSBmaW5hbF90YXJnZXQgZnJlc2hseQorCQkJICogZm9yIGVhY2ggcGFydGl0aW9u IGluIHBhcnRpdGlvbndpc2VfYWRqdXN0X3NjYW5qb2luX3RhcmdldC4KKwkJCSAqLworCQkJ QXNzZXJ0KHNjYW5qb2luX3RhcmdldCA9PSBmaW5hbF90YXJnZXQpOworCQkJcm9vdC0+cGFy c2UtPnRhcmdldExpc3QgPSBvcmlnX3BhcnNlX3RsaXN0OworCQkJcGFydGl0aW9ud2lzZV9h ZGp1c3Rfc2NhbmpvaW5fdGFyZ2V0KHJvb3QsIGN1cnJlbnRfcmVsLAorCQkJCQkJCQkJCQkJ ICZwYXJ0aXRpb25fc3Vicm9vdHMsCisJCQkJCQkJCQkJCQkgJnBhcnRpdGlvbmVkX3JlbHMs CisJCQkJCQkJCQkJCQkgJnBhcnRpdGlvbl9yZXN1bHRSZWxhdGlvbnMsCisJCQkJCQkJCQkJ CQkgJnBhcnRpdGlvbl9zdWJwYXRocywKKwkJCQkJCQkJCQkJCSAmcGFydGl0aW9uX1dDT0xp c3RzLAorCQkJCQkJCQkJCQkJICZwYXJ0aXRpb25fcmV0dXJuaW5nTGlzdHMsCisJCQkJCQkJ CQkJCQkgJnBhcnRpdGlvbl9yb3dNYXJrcyk7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKiBB cHBseSBzY2FuL2pvaW4gdGFyZ2V0LiAqLworCQkJc2NhbmpvaW5fdGFyZ2V0X3NhbWVfZXhw cnMgPSBsaXN0X2xlbmd0aChzY2Fuam9pbl90YXJnZXRzKSA9PSAxCisJCQkJJiYgZXF1YWwo c2NhbmpvaW5fdGFyZ2V0LT5leHBycywgY3VycmVudF9yZWwtPnJlbHRhcmdldC0+ZXhwcnMp OworCQkJYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzKHJvb3QsIGN1cnJlbnRfcmVs LCBzY2Fuam9pbl90YXJnZXRzLAorCQkJCQkJCQkJCSAgIHNjYW5qb2luX3RhcmdldHNfY29u dGFpbl9zcmZzLAorCQkJCQkJCQkJCSAgIHNjYW5qb2luX3RhcmdldF9wYXJhbGxlbF9zYWZl LAorCQkJCQkJCQkJCSAgIHNjYW5qb2luX3RhcmdldF9zYW1lX2V4cHJzKTsKKwkJfQogCiAJ CS8qCiAJCSAqIFNhdmUgdGhlIHZhcmlvdXMgdXBwZXItcmVsIFBhdGhUYXJnZXRzIHdlIGp1 c3QgY29tcHV0ZWQgaW50bwpAQCAtMjEzNiw5MyArMjE4NywxMTkgQEAgZ3JvdXBpbmdfcGxh bm5lcihQbGFubmVySW5mbyAqcm9vdCwgYm9vbCBpbmhlcml0YW5jZV91cGRhdGUsCiAJZmlu YWxfcmVsLT51c2VyaWRpc2N1cnJlbnQgPSBjdXJyZW50X3JlbC0+dXNlcmlkaXNjdXJyZW50 OwogCWZpbmFsX3JlbC0+ZmR3cm91dGluZSA9IGN1cnJlbnRfcmVsLT5mZHdyb3V0aW5lOwog Ci0JLyoKLQkgKiBHZW5lcmF0ZSBwYXRocyBmb3IgdGhlIGZpbmFsX3JlbC4gIEluc2VydCBh bGwgc3Vydml2aW5nIHBhdGhzLCB3aXRoCi0JICogTG9ja1Jvd3MsIExpbWl0LCBhbmQvb3Ig TW9kaWZ5VGFibGUgc3RlcHMgYWRkZWQgaWYgbmVlZGVkLgotCSAqLwotCWZvcmVhY2gobGMs IGN1cnJlbnRfcmVsLT5wYXRobGlzdCkKKwlpZiAoY3VycmVudF9yZWwtPnJlbG9wdGtpbmQg PT0gUkVMT1BUX0JBU0VSRUwgJiYKKwkJY3VycmVudF9yZWwtPnJlbGlkID09IHJvb3QtPnBh cnNlLT5yZXN1bHRSZWxhdGlvbiAmJgorCQljdXJyZW50X3JlbC0+cGFydF9zY2hlbWUgJiYK KwkJcGFyc2UtPmNvbW1hbmRUeXBlICE9IENNRF9JTlNFUlQpCiAJewotCQlQYXRoCSAgICpw YXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKLQotCQkvKgotCQkgKiBJZiB0aGVyZSBpcyBh IEZPUiBbS0VZXSBVUERBVEUvU0hBUkUgY2xhdXNlLCBhZGQgdGhlIExvY2tSb3dzIG5vZGUu Ci0JCSAqIChOb3RlOiB3ZSBpbnRlbnRpb25hbGx5IHRlc3QgcGFyc2UtPnJvd01hcmtzIG5v dCByb290LT5yb3dNYXJrcwotCQkgKiBoZXJlLiAgSWYgdGhlcmUgYXJlIG9ubHkgbm9uLWxv Y2tpbmcgcm93bWFya3MsIHRoZXkgc2hvdWxkIGJlCi0JCSAqIGhhbmRsZWQgYnkgdGhlIE1v ZGlmeVRhYmxlIG5vZGUgaW5zdGVhZC4gIEhvd2V2ZXIsIHJvb3QtPnJvd01hcmtzCi0JCSAq IGlzIHdoYXQgZ29lcyBpbnRvIHRoZSBMb2NrUm93cyBub2RlLikKLQkJICovCi0JCWlmIChw YXJzZS0+cm93TWFya3MpCi0JCXsKLQkJCXBhdGggPSAoUGF0aCAqKSBjcmVhdGVfbG9ja3Jv d3NfcGF0aChyb290LCBmaW5hbF9yZWwsIHBhdGgsCi0JCQkJCQkJCQkJCQkgcm9vdC0+cm93 TWFya3MsCi0JCQkJCQkJCQkJCQkgU1NfYXNzaWduX3NwZWNpYWxfcGFyYW0ocm9vdCkpOwot CQl9Ci0KLQkJLyoKLQkJICogSWYgdGhlcmUgaXMgYSBMSU1JVC9PRkZTRVQgY2xhdXNlLCBh ZGQgdGhlIExJTUlUIG5vZGUuCi0JCSAqLwotCQlpZiAobGltaXRfbmVlZGVkKHBhcnNlKSkK LQkJewotCQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9saW1pdF9wYXRoKHJvb3QsIGZpbmFs X3JlbCwgcGF0aCwKLQkJCQkJCQkJCQkJICBwYXJzZS0+bGltaXRPZmZzZXQsCi0JCQkJCQkJ CQkJCSAgcGFyc2UtPmxpbWl0Q291bnQsCi0JCQkJCQkJCQkJCSAgb2Zmc2V0X2VzdCwgY291 bnRfZXN0KTsKLQkJfQotCi0JCS8qCi0JCSAqIElmIHRoaXMgaXMgYW4gSU5TRVJUL1VQREFU RS9ERUxFVEUsIGFuZCB3ZSdyZSBub3QgYmVpbmcgY2FsbGVkIGZyb20KLQkJICogaW5oZXJp dGFuY2VfcGxhbm5lciwgYWRkIHRoZSBNb2RpZnlUYWJsZSBub2RlLgotCQkgKi8KLQkJaWYg KHBhcnNlLT5jb21tYW5kVHlwZSAhPSBDTURfU0VMRUNUICYmICFpbmhlcml0YW5jZV91cGRh dGUpCi0JCXsKLQkJCUxpc3QJICAgKndpdGhDaGVja09wdGlvbkxpc3RzOwotCQkJTGlzdAkg ICAqcmV0dXJuaW5nTGlzdHM7Ci0JCQlMaXN0CSAgICpyb3dNYXJrczsKLQotCQkJLyoKLQkJ CSAqIFNldCB1cCB0aGUgV0lUSCBDSEVDSyBPUFRJT04gYW5kIFJFVFVSTklORyBsaXN0cy1v Zi1saXN0cywgaWYKLQkJCSAqIG5lZWRlZC4KLQkJCSAqLwotCQkJaWYgKHBhcnNlLT53aXRo Q2hlY2tPcHRpb25zKQotCQkJCXdpdGhDaGVja09wdGlvbkxpc3RzID0gbGlzdF9tYWtlMShw YXJzZS0+d2l0aENoZWNrT3B0aW9ucyk7Ci0JCQllbHNlCi0JCQkJd2l0aENoZWNrT3B0aW9u TGlzdHMgPSBOSUw7Ci0KLQkJCWlmIChwYXJzZS0+cmV0dXJuaW5nTGlzdCkKLQkJCQlyZXR1 cm5pbmdMaXN0cyA9IGxpc3RfbWFrZTEocGFyc2UtPnJldHVybmluZ0xpc3QpOwotCQkJZWxz ZQotCQkJCXJldHVybmluZ0xpc3RzID0gTklMOwotCi0JCQkvKgotCQkJICogSWYgdGhlcmUg d2FzIGEgRk9SIFtLRVldIFVQREFURS9TSEFSRSBjbGF1c2UsIHRoZSBMb2NrUm93cyBub2Rl Ci0JCQkgKiB3aWxsIGhhdmUgZGVhbHQgd2l0aCBmZXRjaGluZyBub24tbG9ja2VkIG1hcmtl ZCByb3dzLCBlbHNlIHdlCi0JCQkgKiBuZWVkIHRvIGhhdmUgTW9kaWZ5VGFibGUgZG8gdGhh dC4KLQkJCSAqLwotCQkJaWYgKHBhcnNlLT5yb3dNYXJrcykKLQkJCQlyb3dNYXJrcyA9IE5J TDsKLQkJCWVsc2UKLQkJCQlyb3dNYXJrcyA9IHJvb3QtPnJvd01hcmtzOwotCi0JCQlwYXRo ID0gKFBhdGggKikKKwkJUGF0aCAqcGF0aCA9IChQYXRoICopCiAJCQkJY3JlYXRlX21vZGlm eXRhYmxlX3BhdGgocm9vdCwgZmluYWxfcmVsLAogCQkJCQkJCQkJCXBhcnNlLT5jb21tYW5k VHlwZSwKIAkJCQkJCQkJCQlwYXJzZS0+Y2FuU2V0VGFnLAogCQkJCQkJCQkJCXBhcnNlLT5y ZXN1bHRSZWxhdGlvbiwKLQkJCQkJCQkJCQlOSUwsCi0JCQkJCQkJCQkJZmFsc2UsCi0JCQkJ CQkJCQkJbGlzdF9tYWtlMV9pbnQocGFyc2UtPnJlc3VsdFJlbGF0aW9uKSwKLQkJCQkJCQkJ CQlsaXN0X21ha2UxKHBhdGgpLAotCQkJCQkJCQkJCWxpc3RfbWFrZTEocm9vdCksCi0JCQkJ CQkJCQkJd2l0aENoZWNrT3B0aW9uTGlzdHMsCi0JCQkJCQkJCQkJcmV0dXJuaW5nTGlzdHMs Ci0JCQkJCQkJCQkJcm93TWFya3MsCi0JCQkJCQkJCQkJcGFyc2UtPm9uQ29uZmxpY3QsCisJ CQkJCQkJCQkJcGFydGl0aW9uZWRfcmVscywKKwkJCQkJCQkJCQlyb290LT5wYXJ0Q29sc1Vw ZGF0ZWQsCisJCQkJCQkJCQkJcGFydGl0aW9uX3Jlc3VsdFJlbGF0aW9ucywKKwkJCQkJCQkJ CQlwYXJ0aXRpb25fc3VicGF0aHMsCisJCQkJCQkJCQkJcGFydGl0aW9uX3N1YnJvb3RzLAor CQkJCQkJCQkJCXBhcnRpdGlvbl9XQ09MaXN0cywKKwkJCQkJCQkJCQlwYXJ0aXRpb25fcmV0 dXJuaW5nTGlzdHMsCisJCQkJCQkJCQkJcGFydGl0aW9uX3Jvd01hcmtzLAorCQkJCQkJCQkJ CU5VTEwsCiAJCQkJCQkJCQkJU1NfYXNzaWduX3NwZWNpYWxfcGFyYW0ocm9vdCkpOwotCQl9 Ci0KLQkJLyogQW5kIHNob3ZlIGl0IGludG8gZmluYWxfcmVsICovCiAJCWFkZF9wYXRoKGZp bmFsX3JlbCwgcGF0aCk7CiAJfQorCWVsc2UKKwl7CisJCS8qCisJCSAqIEdlbmVyYXRlIHBh dGhzIGZvciB0aGUgZmluYWxfcmVsLiAgSW5zZXJ0IGFsbCBzdXJ2aXZpbmcgcGF0aHMsIHdp dGgKKwkJICogTG9ja1Jvd3MsIExpbWl0LCBhbmQvb3IgTW9kaWZ5VGFibGUgc3RlcHMgYWRk ZWQgaWYgbmVlZGVkLgorCQkgKi8KKwkJZm9yZWFjaChsYywgY3VycmVudF9yZWwtPnBhdGhs aXN0KQorCQl7CisJCQlQYXRoCSAgICpwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKKwor CQkJLyoKKwkJCSAqIElmIHRoZXJlIGlzIGEgRk9SIFtLRVldIFVQREFURS9TSEFSRSBjbGF1 c2UsIGFkZCB0aGUgTG9ja1Jvd3MKKwkJCSAqIG5vZGUuIChOb3RlOiB3ZSBpbnRlbnRpb25h bGx5IHRlc3QgcGFyc2UtPnJvd01hcmtzIG5vdAorCQkJICogcm9vdC0+cm93TWFya3MgaGVy ZS4gIElmIHRoZXJlIGFyZSBvbmx5IG5vbi1sb2NraW5nIHJvd21hcmtzLAorCQkJICogdGhl eSBzaG91bGQgYmUgaGFuZGxlZCBieSB0aGUgTW9kaWZ5VGFibGUgbm9kZSBpbnN0ZWFkLgor CQkJICogSG93ZXZlciwgcm9vdC0+cm93TWFya3MgaXMgd2hhdCBnb2VzIGludG8gdGhlIExv Y2tSb3dzIG5vZGUuKQorCQkJICovCisJCQlpZiAocGFyc2UtPnJvd01hcmtzKQorCQkJewor CQkJCXBhdGggPSAoUGF0aCAqKQorCQkJCQkJCWNyZWF0ZV9sb2Nrcm93c19wYXRoKHJvb3Qs IGZpbmFsX3JlbCwgcGF0aCwKKwkJCQkJCQkJCQkJCSByb290LT5yb3dNYXJrcywKKwkJCQkJ CQkJCQkJCSBTU19hc3NpZ25fc3BlY2lhbF9wYXJhbShyb290KSk7CisJCQl9CisKKwkJCS8q CisJCQkgKiBJZiB0aGVyZSBpcyBhIExJTUlUL09GRlNFVCBjbGF1c2UsIGFkZCB0aGUgTElN SVQgbm9kZS4KKwkJCSAqLworCQkJaWYgKGxpbWl0X25lZWRlZChwYXJzZSkpCisJCQl7CisJ CQkJcGF0aCA9IChQYXRoICopIGNyZWF0ZV9saW1pdF9wYXRoKHJvb3QsIGZpbmFsX3JlbCwg cGF0aCwKKwkJCQkJCQkJCQkJCSAgcGFyc2UtPmxpbWl0T2Zmc2V0LAorCQkJCQkJCQkJCQkJ ICBwYXJzZS0+bGltaXRDb3VudCwKKwkJCQkJCQkJCQkJCSAgb2Zmc2V0X2VzdCwgY291bnRf ZXN0KTsKKwkJCX0KKworCQkJLyoKKwkJCSAqIElmIHRoaXMgaXMgYW4gSU5TRVJUL1VQREFU RS9ERUxFVEUsIGFuZCB3ZSdyZSBub3QgYmVpbmcgY2FsbGVkCisJCQkgKiBmcm9tIGluaGVy aXRhbmNlX3BsYW5uZXIsIGFkZCB0aGUgTW9kaWZ5VGFibGUgbm9kZS4KKwkJCSAqLworCQkJ aWYgKHBhcnNlLT5jb21tYW5kVHlwZSAhPSBDTURfU0VMRUNUICYmICFpbmhlcml0YW5jZV91 cGRhdGUpCisJCQl7CisJCQkJTGlzdAkgICAqd2l0aENoZWNrT3B0aW9uTGlzdHM7CisJCQkJ TGlzdAkgICAqcmV0dXJuaW5nTGlzdHM7CisJCQkJTGlzdAkgICAqcm93TWFya3M7CisKKwkJ CQkvKgorCQkJCSAqIFNldCB1cCB0aGUgV0lUSCBDSEVDSyBPUFRJT04gYW5kIFJFVFVSTklO RyBsaXN0cy1vZi1saXN0cywKKwkJCQkgKiBpZiBuZWVkZWQuCisJCQkJICovCisJCQkJaWYg KHBhcnNlLT53aXRoQ2hlY2tPcHRpb25zKQorCQkJCQl3aXRoQ2hlY2tPcHRpb25MaXN0cyA9 IGxpc3RfbWFrZTEocGFyc2UtPndpdGhDaGVja09wdGlvbnMpOworCQkJCWVsc2UKKwkJCQkJ d2l0aENoZWNrT3B0aW9uTGlzdHMgPSBOSUw7CisKKwkJCQlpZiAocGFyc2UtPnJldHVybmlu Z0xpc3QpCisJCQkJCXJldHVybmluZ0xpc3RzID0gbGlzdF9tYWtlMShwYXJzZS0+cmV0dXJu aW5nTGlzdCk7CisJCQkJZWxzZQorCQkJCQlyZXR1cm5pbmdMaXN0cyA9IE5JTDsKKworCQkJ CS8qCisJCQkJICogSWYgdGhlcmUgd2FzIGEgRk9SIFtLRVldIFVQREFURS9TSEFSRSBjbGF1 c2UsIHRoZSBMb2NrUm93cworCQkJCSAqIG5vZGUgd2lsbCBoYXZlIGRlYWx0IHdpdGggZmV0 Y2hpbmcgbm9uLWxvY2tlZCBtYXJrZWQgcm93cywKKwkJCQkgKiBlbHNlIHdlIG5lZWQgdG8g aGF2ZSBNb2RpZnlUYWJsZSBkbyB0aGF0LgorCQkJCSAqLworCQkJCWlmIChwYXJzZS0+cm93 TWFya3MpCisJCQkJCXJvd01hcmtzID0gTklMOworCQkJCWVsc2UKKwkJCQkJcm93TWFya3Mg PSByb290LT5yb3dNYXJrczsKKworCQkJCXBhdGggPSAoUGF0aCAqKQorCQkJCQljcmVhdGVf bW9kaWZ5dGFibGVfcGF0aChyb290LCBmaW5hbF9yZWwsCisJCQkJCQkJCQkJCXBhcnNlLT5j b21tYW5kVHlwZSwKKwkJCQkJCQkJCQkJcGFyc2UtPmNhblNldFRhZywKKwkJCQkJCQkJCQkJ cGFyc2UtPnJlc3VsdFJlbGF0aW9uLAorCQkJCQkJCQkJCQlOSUwsCisJCQkJCQkJCQkJCWZh bHNlLAorCQkJCQkJCQkJCQlsaXN0X21ha2UxX2ludChwYXJzZS0+cmVzdWx0UmVsYXRpb24p LAorCQkJCQkJCQkJCQlsaXN0X21ha2UxKHBhdGgpLAorCQkJCQkJCQkJCQlsaXN0X21ha2Ux KHJvb3QpLAorCQkJCQkJCQkJCQl3aXRoQ2hlY2tPcHRpb25MaXN0cywKKwkJCQkJCQkJCQkJ cmV0dXJuaW5nTGlzdHMsCisJCQkJCQkJCQkJCXJvd01hcmtzLAorCQkJCQkJCQkJCQlwYXJz ZS0+b25Db25mbGljdCwKKwkJCQkJCQkJCQkJU1NfYXNzaWduX3NwZWNpYWxfcGFyYW0ocm9v dCkpOworCQkJfQorCisJCQkvKiBBbmQgc2hvdmUgaXQgaW50byBmaW5hbF9yZWwgKi8KKwkJ CWFkZF9wYXRoKGZpbmFsX3JlbCwgcGF0aCk7CisJCX0KKwl9CiAKIAkvKgogCSAqIEdlbmVy YXRlIHBhcnRpYWwgcGF0aHMgZm9yIGZpbmFsX3JlbCwgdG9vLCBpZiBvdXRlciBxdWVyeSBs ZXZlbHMgbWlnaHQKQEAgLTIyNTksNiArMjMzNiwxMjkgQEAgZ3JvdXBpbmdfcGxhbm5lcihQ bGFubmVySW5mbyAqcm9vdCwgYm9vbCBpbmhlcml0YW5jZV91cGRhdGUsCiB9CiAKIC8qCisg KiBwYXJ0aXRpb253aXNlX2FkanVzdF9zY2Fuam9pbl90YXJnZXQKKyAqCQlhZGp1c3RzIHF1 ZXJ5J3MgdGFyZ2V0bGlzdCBmb3IgZWFjaCBwYXJ0aXRpb24gaW4gdGhlIHBhcnRpdGlvbiB0 cmVlCisgKgkJd2hvc2Ugcm9vdCBpcyAncGFyZW50JyBhbmQgYXBwbHkgaXQgdG8gdGhlaXIg cGF0aHMgdmlhCisgKgkJYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzCisgKgorICog SXRzIG91dHB1dCBhbHNvIGNvbnNpc3RzIG9mIHZhcmlvdXMgcGllY2VzIG9mIGluZm9ybWF0 aW9uIHRoYXQgd2lsbCBnbworICogaW50byB0aGUgTW9kaWZ5VGFibGUgbm9kZSB0aGF0IHdp bGwgYmUgY3JlYXRlZCBmb3IgdGhpcyBxdWVyeS4KKyAqLworc3RhdGljIHZvaWQKK3BhcnRp dGlvbndpc2VfYWRqdXN0X3NjYW5qb2luX3RhcmdldChQbGFubmVySW5mbyAqcm9vdCwKKwkJ CQkJCQkJCSBSZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJCQkJCQkgTGlzdCAqKnN1YnJvb3Rz LAorCQkJCQkJCQkJIExpc3QgKipwYXJ0aXRpb25lZF9yZWxzLAorCQkJCQkJCQkJIExpc3Qg KipyZXN1bHRSZWxhdGlvbnMsCisJCQkJCQkJCQkgTGlzdCAqKnN1YnBhdGhzLAorCQkJCQkJ CQkJIExpc3QgKipXQ09MaXN0cywKKwkJCQkJCQkJCSBMaXN0ICoqcmV0dXJuaW5nTGlzdHMs CisJCQkJCQkJCQkgTGlzdCAqKnJvd01hcmtzKQoreworCVF1ZXJ5ICAqcGFyc2UgPSByb290 LT5wYXJzZTsKKwlpbnQJCWk7CisKKwkqcGFydGl0aW9uZWRfcmVscyA9IGxhcHBlbmQoKnBh cnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCWxpc3RfbWFrZTFfaW50KHBhcmVudC0+cmVsaWQp KTsKKworCWZvciAoaSA9IDA7IGkgPCBwYXJlbnQtPm5wYXJ0czsgaSsrKQorCXsKKwkJUmVs T3B0SW5mbyAqY2hpbGRfcmVsID0gcGFyZW50LT5wYXJ0X3JlbHNbaV07CisJCUFwcGVuZFJl bEluZm8gKmFwcGluZm87CisJCWludAkJCXJlbGlkOworCQlMaXN0CSAgICp0bGlzdDsKKwkJ UGF0aFRhcmdldCAqc2NhbmpvaW5fdGFyZ2V0OworCQlib29sCQlzY2Fuam9pbl90YXJnZXRf cGFyYWxsZWxfc2FmZTsKKwkJYm9vbAkJc2NhbmpvaW5fdGFyZ2V0X3NhbWVfZXhwcnM7CisJ CVBsYW5uZXJJbmZvICpwYXJ0aXRpb25fc3Vicm9vdDsKKwkJUXVlcnkJICAgKnBhcnRpdGlv bl9wYXJzZTsKKworCQkvKiBJZ25vcmUgcHJ1bmVkIHBhcnRpdGlvbnMuICovCisJCWlmIChJ U19EVU1NWV9SRUwoY2hpbGRfcmVsKSkKKwkJCWNvbnRpbnVlOworCisJCS8qCisJCSAqIEV4 dHJhY3QgdGhlIG9yaWdpbmFsIHJlbGlkIG9mIHBhcnRpdGlvbiB0byBmZXRjaCBpdHMgQXBw ZW5kUmVsSW5mby4KKwkJICogV2UgbXVzdCBmaW5kIGl0IGxpa2UgdGhpcywgYmVjYXVzZQor CQkgKiBwYXJ0aXRpb253aXNlX21ha2VfcmVsX2Zyb21fam9pbmxpc3QgcmVwbGFjZXMgdGhl IG9yaWdpbmFsIHJlbAorCQkgKiB3aXRoIG9uZSBnZW5lcmF0ZWQgYnkgam9pbiBwbGFubmlu ZyB3aGljaCBtYXkgYmUgZGlmZmVyZW50LgorCQkgKi8KKwkJcmVsaWQgPSAtMTsKKwkJd2hp bGUgKChyZWxpZCA9IGJtc19uZXh0X21lbWJlcihjaGlsZF9yZWwtPnJlbGlkcywgcmVsaWQp KSA+IDApCisJCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheVtyZWxpZF0gJiYKKwkJCQly b290LT5hcHBlbmRfcmVsX2FycmF5W3JlbGlkXS0+cGFyZW50X3JlbGlkID09CisJCQkJcGFy ZW50LT5yZWxpZCkKKwkJCQlicmVhazsKKworCQlhcHBpbmZvID0gcm9vdC0+YXBwZW5kX3Jl bF9hcnJheVtyZWxpZF07CisKKwkJLyogVHJhbnNsYXRlIFF1ZXJ5IHN0cnVjdHVyZSBmb3Ig dGhpcyBwYXJ0aXRpb24uICovCisJCXBhcnRpdGlvbl9wYXJzZSA9IChRdWVyeSAqKQorCQkJ CQkJYWRqdXN0X2FwcGVuZHJlbF9hdHRycyhyb290LAorCQkJCQkJCQkJCQkgICAoTm9kZSAq KSBwYXJzZSwKKwkJCQkJCQkJCQkJICAgMSwgJmFwcGluZm8pOworCisJCS8qIFJlY3Vyc2Ug aWYgcGFydGl0aW9uIGlzIGl0c2VsZiBhIHBhcnRpdGlvbmVkIHRhYmxlLiAqLworCQlpZiAo Y2hpbGRfcmVsLT5wYXJ0X3NjaGVtZSkKKwkJeworCQkJcm9vdC0+cGFyc2UgPSBwYXJ0aXRp b25fcGFyc2U7CisJCQlwYXJ0aXRpb253aXNlX2FkanVzdF9zY2Fuam9pbl90YXJnZXQocm9v dCwgY2hpbGRfcmVsLAorCQkJCQkJCQkJCQkJIHN1YnJvb3RzLAorCQkJCQkJCQkJCQkJIHBh cnRpdGlvbmVkX3JlbHMsCisJCQkJCQkJCQkJCQkgcmVzdWx0UmVsYXRpb25zLAorCQkJCQkJ CQkJCQkJIHN1YnBhdGhzLAorCQkJCQkJCQkJCQkJIFdDT0xpc3RzLAorCQkJCQkJCQkJCQkJ IHJldHVybmluZ0xpc3RzLAorCQkJCQkJCQkJCQkJIHJvd01hcmtzKTsKKwkJCS8qIFJlc3Rv cmUgdGhlIFF1ZXJ5IGZvciBwcm9jZXNzaW5nIHRoZSBuZXh0IHBhcnRpdGlvbi4gKi8KKwkJ CXJvb3QtPnBhcnNlID0gcGFyc2U7CisJCX0KKwkJZWxzZQorCQl7CisJCQkvKgorCQkJICog R2VuZXJhdGUgYSBzZXBhcmF0ZSBQbGFubmVySW5mbyBmb3IgdGhpcyBwYXJ0aXRpb24uICBX ZSdsbCBuZWVkCisJCQkgKiBpdCB3aGVuIGdlbmVyYXRpbmcgdGhlIE1vZGlmeVRhYmxlIHN1 YnBsYW4gZm9yIHRoaXMgcGFydGl0aW9uLgorCQkJICovCisJCQlwYXJ0aXRpb25fc3Vicm9v dCA9IG1ha2VOb2RlKFBsYW5uZXJJbmZvKTsKKwkJCSpzdWJyb290cyA9IGxhcHBlbmQoKnN1 YnJvb3RzLCBwYXJ0aXRpb25fc3Vicm9vdCk7CisJCQltZW1jcHkocGFydGl0aW9uX3N1YnJv b3QsIHJvb3QsIHNpemVvZihQbGFubmVySW5mbykpOworCQkJcGFydGl0aW9uX3N1YnJvb3Qt PnBhcnNlID0gcGFydGl0aW9uX3BhcnNlOworCisJCQkvKgorCQkJICogUHJlcHJvY2VzcyB0 aGUgdHJhbnNsYXRlZCB0YXJnZXRsaXN0IGFuZCBzYXZlIGl0IGluIHRoZQorCQkJICogcGFy dGl0aW9uJ3MgUGxhbm5lckluZm8gZm9yIHRoZSBwZXJ1c2FsIG9mIGxhdGVyIHBsYW5uaW5n CisJCQkgKiBzdGVwcy4KKwkJCSAqLworCQkJdGxpc3QgPSBwcmVwcm9jZXNzX3RhcmdldGxp c3QocGFydGl0aW9uX3N1YnJvb3QpOworCQkJcGFydGl0aW9uX3N1YnJvb3QtPnByb2Nlc3Nl ZF90bGlzdCA9IHRsaXN0OworCisJCQkvKiBBcHBseSBzY2FuL2pvaW4gdGFyZ2V0LiAqLwor CQkJc2NhbmpvaW5fdGFyZ2V0ID0gY3JlYXRlX3BhdGh0YXJnZXQocm9vdCwgdGxpc3QpOwor CQkJc2NhbmpvaW5fdGFyZ2V0X3NhbWVfZXhwcnMgPSBlcXVhbChzY2Fuam9pbl90YXJnZXQt PmV4cHJzLAorCQkJCQkJCQkJCQkgICBjaGlsZF9yZWwtPnJlbHRhcmdldC0+ZXhwcnMpOwor CQkJc2NhbmpvaW5fdGFyZ2V0X3BhcmFsbGVsX3NhZmUgPQorCQkJCWlzX3BhcmFsbGVsX3Nh ZmUocm9vdCwgKE5vZGUgKikgc2NhbmpvaW5fdGFyZ2V0LT5leHBycyk7CisJCQlhcHBseV9z Y2Fuam9pbl90YXJnZXRfdG9fcGF0aHMocm9vdCwgY2hpbGRfcmVsLAorCQkJCQkJCQkJCSAg IGxpc3RfbWFrZTEoc2NhbmpvaW5fdGFyZ2V0KSwKKwkJCQkJCQkJCQkgICBOSUwsCisJCQkJ CQkJCQkJICAgc2NhbmpvaW5fdGFyZ2V0X3BhcmFsbGVsX3NhZmUsCisJCQkJCQkJCQkJICAg c2NhbmpvaW5fdGFyZ2V0X3NhbWVfZXhwcnMpOworCisJCQkvKiBDb2xsZWN0IGluZm9ybWF0 aW9uIHRoYXQgd2lsbCBnbyBpbnRvIHRoZSBNb2RpZnlUYWJsZSAqLworCQkJKnJlc3VsdFJl bGF0aW9ucyA9IGxhcHBlbmRfaW50KCpyZXN1bHRSZWxhdGlvbnMsIHJlbGlkKTsKKwkJCSpz dWJwYXRocyA9IGxhcHBlbmQoKnN1YnBhdGhzLCBjaGlsZF9yZWwtPmNoZWFwZXN0X3RvdGFs X3BhdGgpOworCQkJaWYgKHBhcnRpdGlvbl9wYXJzZS0+d2l0aENoZWNrT3B0aW9ucykKKwkJ CQkqV0NPTGlzdHMgPSBsYXBwZW5kKCpXQ09MaXN0cywgcGFydGl0aW9uX3BhcnNlLT53aXRo Q2hlY2tPcHRpb25zKTsKKwkJCWlmIChwYXJ0aXRpb25fcGFyc2UtPnJldHVybmluZ0xpc3Qp CisJCQkJKnJldHVybmluZ0xpc3RzID0gbGFwcGVuZCgqcmV0dXJuaW5nTGlzdHMsCisJCQkJ CQkJCQkJICBwYXJ0aXRpb25fcGFyc2UtPnJldHVybmluZ0xpc3QpOworCQkJaWYgKHBhcnRp dGlvbl9wYXJzZS0+cm93TWFya3MpCisJCQkJKnJvd01hcmtzID0gbGFwcGVuZCgqcm93TWFy a3MsIHBhcnRpdGlvbl9wYXJzZS0+cm93TWFya3MpOworCQl9CisJfQorfQorCisvKgogICog RG8gcHJlcHJvY2Vzc2luZyBmb3IgZ3JvdXBpbmdTZXRzIGNsYXVzZSBhbmQgcmVsYXRlZCBk YXRhLiAgVGhpcyBoYW5kbGVzIHRoZQogICogcHJlbGltaW5hcnkgc3RlcHMgb2YgZXhwYW5k aW5nIHRoZSBncm91cGluZyBzZXRzLCBvcmdhbml6aW5nIHRoZW0gaW50byBsaXN0cwogICog b2Ygcm9sbHVwcywgYW5kIHByZXBhcmluZyBhbm5vdGF0aW9ucyB3aGljaCB3aWxsIGxhdGVy IGJlIGZpbGxlZCBpbiB3aXRoCkBAIC02OTY0LDcgKzcxNjQsOSBAQCBhcHBseV9zY2Fuam9p bl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsCiAJCX0KIAogCQkvKiBCdWls ZCBuZXcgcGF0aHMgZm9yIHRoaXMgcmVsYXRpb24gYnkgYXBwZW5kaW5nIGNoaWxkIHBhdGhz LiAqLwotCQlpZiAobGl2ZV9jaGlsZHJlbiAhPSBOSUwpCisJCWlmIChsaXZlX2NoaWxkcmVu ICE9IE5JTCAmJgorCQkJIShyZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwgJiYK KwkJCSAgcmVsLT5yZWxpZCA9PSByb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb24pKQogCQkJ YWRkX3BhdGhzX3RvX2FwcGVuZF9yZWwocm9vdCwgcmVsLCBsaXZlX2NoaWxkcmVuKTsKIAl9 CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKaW5kZXggNjkwYjZi YmFiNy4uZjRjNDg1Y2RjOSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVu aW9uLmMKQEAgLTIyNjUsOCArMjI2NSwzNCBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211 dGF0b3IoTm9kZSAqbm9kZSwKIAkJCQkJCQkJCQkJICBjb250ZXh0LT5hcHBpbmZvcyk7CiAJ CXJldHVybiAoTm9kZSAqKSBwaHY7CiAJfQorCisJaWYgKElzQShub2RlLCBTcGVjaWFsSm9p bkluZm8pKQorCXsKKwkJU3BlY2lhbEpvaW5JbmZvICpvbGRpbmZvID0gKFNwZWNpYWxKb2lu SW5mbyAqKSBub2RlOworCQlTcGVjaWFsSm9pbkluZm8gKm5ld2luZm8gPSBtYWtlTm9kZShT cGVjaWFsSm9pbkluZm8pOworCisJCW1lbWNweShuZXdpbmZvLCBvbGRpbmZvLCBzaXplb2Yo U3BlY2lhbEpvaW5JbmZvKSk7CisJCW5ld2luZm8tPm1pbl9sZWZ0aGFuZCA9IGFkanVzdF9j aGlsZF9yZWxpZHMob2xkaW5mby0+bWluX2xlZnRoYW5kLAorCQkJCQkJCQkJCQkJCWNvbnRl eHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJCQljb250ZXh0LT5hcHBpbmZvcyk7CisJCW5l d2luZm8tPm1pbl9yaWdodGhhbmQgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPm1p bl9yaWdodGhhbmQsCisJCQkJCQkJCQkJCQkJIGNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJ CQkJCQkJCQkgY29udGV4dC0+YXBwaW5mb3MpOworCQluZXdpbmZvLT5zeW5fbGVmdGhhbmQg PSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPnN5bl9sZWZ0aGFuZCwKKwkJCQkJCQkJ CQkJCQljb250ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5m b3MpOworCQluZXdpbmZvLT5zeW5fcmlnaHRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhv bGRpbmZvLT5zeW5fcmlnaHRoYW5kLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5uYXBwaW5m b3MsCisJCQkJCQkJCQkJCQkJIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+c2Vt aV9yaHNfZXhwcnMgPQorCQkJCQkoTGlzdCAqKSBleHByZXNzaW9uX3RyZWVfbXV0YXRvcigo Tm9kZSAqKQorCQkJCQkJCQkJCQkJCSBvbGRpbmZvLT5zZW1pX3Joc19leHBycywKKwkJCQkJ CQkJCQkJCQkgYWRqdXN0X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yLAorCQkJCQkJCQkJCQkJ CSAodm9pZCAqKSBjb250ZXh0KTsKKwkJcmV0dXJuIChOb2RlICopIG5ld2luZm87CisJfQor CiAJLyogU2hvdWxkbid0IG5lZWQgdG8gaGFuZGxlIHBsYW5uZXIgYXV4aWxpYXJ5IG5vZGVz IGhlcmUgKi8KLQlBc3NlcnQoIUlzQShub2RlLCBTcGVjaWFsSm9pbkluZm8pKTsKIAlBc3Nl cnQoIUlzQShub2RlLCBBcHBlbmRSZWxJbmZvKSk7CiAJQXNzZXJ0KCFJc0Eobm9kZSwgUGxh Y2VIb2xkZXJJbmZvKSk7CiAJQXNzZXJ0KCFJc0Eobm9kZSwgTWluTWF4QWdnSW5mbykpOwpk aWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5jCmluZGV4IDgzNjllM2FkNjIuLjhk NjdmMjFmNDIgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKQEAgLTEy NjUsMzYgKzEyNjUsNiBAQCBnZXRfcmVsYXRpb25fY29uc3RyYWludHMoUGxhbm5lckluZm8g KnJvb3QsCiAJCX0KIAl9CiAKLQkvKgotCSAqIEFwcGVuZCBwYXJ0aXRpb24gcHJlZGljYXRl cywgaWYgYW55LgotCSAqCi0JICogRm9yIHNlbGVjdHMsIHBhcnRpdGlvbiBwcnVuaW5nIHVz ZXMgdGhlIHBhcmVudCB0YWJsZSdzIHBhcnRpdGlvbiBib3VuZAotCSAqIGRlc2NyaXB0b3Is IGluc3RlYWQgb2YgY29uc3RyYWludCBleGNsdXNpb24gd2hpY2ggaXMgZHJpdmVuIGJ5IHRo ZQotCSAqIGluZGl2aWR1YWwgcGFydGl0aW9uJ3MgcGFydGl0aW9uIGNvbnN0cmFpbnQuCi0J ICovCi0JaWYgKGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyAmJiByb290LT5wYXJzZS0+Y29t bWFuZFR5cGUgIT0gQ01EX1NFTEVDVCkKLQl7Ci0JCUxpc3QJICAgKnBjcXVhbCA9IFJlbGF0 aW9uR2V0UGFydGl0aW9uUXVhbChyZWxhdGlvbik7Ci0KLQkJaWYgKHBjcXVhbCkKLQkJewot CQkJLyoKLQkJCSAqIFJ1biB0aGUgcGFydGl0aW9uIHF1YWxzIHRocm91Z2ggY29uc3Qtc2lt cGxpZmljYXRpb24gc2ltaWxhciB0bwotCQkJICogY2hlY2sgY29uc3RyYWludHMuICBXZSBz a2lwIGNhbm9uaWNhbGl6ZV9xdWFsLCB0aG91Z2gsIGJlY2F1c2UKLQkJCSAqIHBhcnRpdGlv biBxdWFscyBzaG91bGQgYmUgaW4gY2Fub25pY2FsIGZvcm0gYWxyZWFkeTsgYWxzbywKLQkJ CSAqIHNpbmNlIHRoZSBxdWFsIGlzIGluIGltcGxpY2l0LUFORCBmb3JtYXQsIHdlJ2QgaGF2 ZSB0bwotCQkJICogZXhwbGljaXRseSBjb252ZXJ0IGl0IHRvIGV4cGxpY2l0LUFORCBmb3Jt YXQgYW5kIGJhY2sgYWdhaW4uCi0JCQkgKi8KLQkJCXBjcXVhbCA9IChMaXN0ICopIGV2YWxf Y29uc3RfZXhwcmVzc2lvbnMocm9vdCwgKE5vZGUgKikgcGNxdWFsKTsKLQotCQkJLyogRml4 IFZhcnMgdG8gaGF2ZSB0aGUgZGVzaXJlZCB2YXJubyAqLwotCQkJaWYgKHZhcm5vICE9IDEp Ci0JCQkJQ2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgcGNxdWFsLCAxLCB2YXJubywgMCk7Ci0K LQkJCXJlc3VsdCA9IGxpc3RfY29uY2F0KHJlc3VsdCwgcGNxdWFsKTsKLQkJfQotCX0KLQog CWhlYXBfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CiAKIAlyZXR1cm4gcmVzdWx0OwpkaWZm IC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fam9pbi5vdXQg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAppbmRleCA3 ZDA0ZDEyYzZlLi45MDc0MTgyNTEyIDEwMDY0NAotLS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVj dGVkL3BhcnRpdGlvbl9qb2luLm91dApAQCAtMTc1Miw3ICsxNzUyLDcgQEAgV0hFUkUgRVhJ U1RTICgKICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgSVMgTlVMTCkKICAgICAgICAgIC0+ ICBOZXN0ZWQgTG9vcAogICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDRfdGJs Ci0gICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzc18xCisgICAgICAgICAg ICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzcwogICAgICAgICAgICAgICAgICAgICAgLT4g IExpbWl0CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50 OF90YmwgaW50OF90YmxfMQogICAgLT4gIE5lc3RlZCBMb29wIFNlbWkgSm9pbgpAQCAtMTc2 MCw3ICsxNzYwLDcgQEAgV0hFUkUgRVhJU1RTICgKICAgICAgICAgICAgICAgIEZpbHRlcjog KGMgSVMgTlVMTCkKICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGludDRfdGJsCi0gICAgICAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiBzc18yCisgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzcwog ICAgICAgICAgICAgICAgICAgICAgLT4gIExpbWl0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgaW50OF90YmxfMgogKDI4IHJvd3MpCi0t IAoyLjExLjAKCg== --------------E789225A3DB41495BFDDF38C Content-Type: text/plain; charset=UTF-8; name="v2-0002-Lazy-creation-of-partition-objects-for-planning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v2-0002-Lazy-creation-of-partition-objects-for-planning.patc"; filename*1="h" RnJvbSAwMjNjZTViNzYxMzZjM2E1M2JiZjY0MDE1OTlkNDAzNjJiMmRlNzE5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogV2VkLCAxNiBNYXkgMjAxOCAxNDozNTo0MCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djIgMi8zXSBMYXp5IGNyZWF0aW9uIG9mIHBhcnRpdGlvbiBvYmplY3RzIGZvciBwbGFubmlu ZwoKV2l0aCB0aGUgY3VycmVudCBhcHByb2FjaCwgKmFsbCogcGFydGl0aW9ucyBhcmUgb3Bl bmVkIGFuZCByYW5nZQp0YWJsZSBlbnRyaWVzIGFyZSBjcmVhdGVkIGZvciB0aGVtIGluIHRo ZSBwbGFubmVyJ3MgcHJlcCBwaGFzZSwgd2hpY2gKaXMgbXVjaCBzb29uZXIgdGhhbiB3aGVu IHBhcnRpdGlvbiBwcnVuaW5nIGlzIHBlcmZvcm1lZC4gIFRoaXMgbWVhbnMKdGhhdCBxdWVy eV9wbGFubmVyIGVuZHMgdXAgc3BlbmRpbmcgY3ljbGVzIGFuZCBtZW1vcnkgb24gbWFueQpw YXJ0aXRpb25zIHRoYXQgcG90ZW50aWFsbHkgd29uJ3QgYmUgaW5jbHVkZWQgaW4gdGhlIHBs YW4sIHN1Y2gKYXMgY3JlYXRpbmcgUmVsT3B0SW5mb3MsIEFwcGVuZFJlbEluZm9zLgoKVG8g YXZvaWQgdGhhdCwgYWRkIHBhcnRpdGlvbiByYW5nZSB0YWJsZSBlbnRyaWVzIGFuZCBvdGhl ciBwbGFubmluZwpkYXRhIHN0cnVjdHVyZXMgZm9yIG9ubHkgcGFydGl0aW9ucyB0aGF0IHJl bWFpbiBhZnRlciBhcHBseWluZwpwYXJ0aXRpb24gcHJ1bmluZy4KClNvbWUgY29kZSBsaWtl IHRoYXQgb2YgcGFydGl0aW9ud2lzZSBqb2luIHJlbHkgb24gdGhlIGZhY3QgdGhhdCBldmVu CnRob3VnaCBwYXJ0aXRpb25zIG1heSBoYXZlIGJlZW4gcHJ1bmVkLCB0aGV5IHdvdWxkIHN0 aWxsIGhhdmUgYQpSZWxPcHRJbmZvLCBhbGJlaXQgbWFya2VkIGR1bW15IHRvIGhhbmRsZSB0 aGUgb3V0ZXIgam9pbiBjYXNlIHdoZXJlCnRoZSBwcnVuZWQgcGFydGl0aW9uIGFwcGVhcnMg b24gdGhlIG51bGxhYmxlIHNpZGUgb2Ygam9pbi4gIFNvIHRoaXMKY29tbWl0IGFsc28gdGVh Y2hlcyB0aGUgcGFydGl0aW9ud2lzZSBqb2luIGNvZGUgdG8gYWxsb2NhdGUgZHVtbXkKUmVs T3B0SW5mb3MgZm9yIHBydW5lZCBwYXJ0aXRpb25zLgoKVGhlcmUgYXJlIGNvdXBsZSBvZiBy ZWdyZXNzaW9uIHRlc3QgZGlmZnMgY2F1c2VkIGJ5IHRoZSBmYWN0IHRoYXQKd2Ugbm8gbG9u Z2VyIGFsbG9jYXRlIGEgZHVwbGljYXRlIFJUIGVudHJ5IGZvciBhIHBhcnRpdGlvbmVkIHRh YmxlCmluIGl0cyByb2xlIGFzIGNoaWxkIGFuZCBhbHNvIHRoYXQgdGhlIGluZGl2aWR1YWwg cGFydGl0aW9uIFJUCmVudHJpZXMgYXJlIG5vdyBjcmVhdGVkIGluIHRoZSBvcmRlciBpbiB3 aGljaCB0aGVpciBwYXJlbnQncyBhcmUKcHJvY2Vzc2VkIHdoZXJlYXMgcHJldmlvdXNseSB0 aGV5J2QgYmUgYWRkZWQgdG8gdGhlIHJhbmdlIHRhYmxlCmluIHRoZSBvcmRlciBvZiBkZXB0 aC1maXJzdCBleHBhbnNpb24gb2YgdGhlIHRyZWUuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYyAgICAgICAgICAgICB8ICA2NSArKystLQogc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYyAgICAgICAgICAgICB8ICAgOCArCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9pbml0c3BsYW4uYyAgICAgICAgICAgIHwgIDY2ICsr KysrCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICAgICAgICAg IHwgIDMwIC0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAg ICAgICAgICB8ICAxOSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9u LmMgICAgICAgICAgICB8IDMxNCArKysrKysrKystLS0tLS0tLS0tLS0tCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgICAgIHwgIDE2ICstCiBzcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICAgICAgICAgICAgIHwgMTcyICsr KysrKysrKystLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAgICAg ICAgICAgICB8IDEwOSArKysrLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaCAg ICAgICAgICAgICAgICAgICAgICB8ICAgNSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0 aG5vZGUuaCAgICAgICAgICAgICAgICAgIHwgICA2ICsKIHNyYy9pbmNsdWRlL29wdGltaXpl ci9wbGFuY2F0LmggICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIHNyYy9pbmNsdWRlL29w dGltaXplci9wbGFubWFpbi5oICAgICAgICAgICAgICAgICAgfCAgIDMgKwogc3JjL2luY2x1 ZGUvb3B0aW1pemVyL3ByZXAuaCAgICAgICAgICAgICAgICAgICAgICB8ICAxMCArCiBzcmMv aW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmggICAgICAgICAgICAgIHwgICAyICst CiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL2pvaW4ub3V0ICAgICAgICAgICAgICAgIHwg IDIyICstCiBzcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9hZ2dyZWdhdGUu b3V0IHwgICA0ICstCiAxNyBmaWxlcyBjaGFuZ2VkLCA1MDcgaW5zZXJ0aW9ucygrKSwgMzQ2 IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRo L2FsbHBhdGhzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCmlu ZGV4IDU5MzdjMDQzNmEuLjlhYmFhYjI1ZmEgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2FsbHBhdGhzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvYWxscGF0aHMuYwpAQCAtMTUxLDYgKzE1MSw3IEBAIG1ha2Vfb25lX3JlbChQbGFubmVy SW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiB7CiAJUmVsT3B0SW5mbyAqcmVsOwogCUlu ZGV4CQlydGk7CisJZG91YmxlCQl0b3RhbF9wYWdlczsKIAogCS8qCiAJICogQ29uc3RydWN0 IHRoZSBhbGxfYmFzZXJlbHMgUmVsaWRzIHNldC4KQEAgLTE4MSw2ICsxODIsMzUgQEAgbWFr ZV9vbmVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCkKIAkgKiB0aGVu IGdlbmVyYXRlIGFjY2VzcyBwYXRocy4KIAkgKi8KIAlzZXRfYmFzZV9yZWxfc2l6ZXMocm9v dCk7CisKKwkvKgorCSAqIFdlIHNob3VsZCBub3cgaGF2ZSBzaXplIGVzdGltYXRlcyBmb3Ig ZXZlcnkgYWN0dWFsIHRhYmxlIGludm9sdmVkIGluCisJICogdGhlIHF1ZXJ5LCBhbmQgd2Ug YWxzbyBrbm93IHdoaWNoIGlmIGFueSBoYXZlIGJlZW4gZGVsZXRlZCBmcm9tIHRoZQorCSAq IHF1ZXJ5IGJ5IGpvaW4gcmVtb3ZhbDsgc28gd2UgY2FuIGNvbXB1dGUgdG90YWxfdGFibGVf cGFnZXMuCisJICoKKwkgKiBOb3RlIHRoYXQgYXBwZW5kcmVscyBhcmUgbm90IGRvdWJsZS1j b3VudGVkIGhlcmUsIGV2ZW4gdGhvdWdoIHdlIGRvbid0CisJICogYm90aGVyIHRvIGRpc3Rp bmd1aXNoIFJlbE9wdEluZm9zIGZvciBhcHBlbmRyZWwgcGFyZW50cywgYmVjYXVzZSB0aGUK KwkgKiBwYXJlbnRzIHdpbGwgc3RpbGwgaGF2ZSBzaXplIHplcm8uCisJICoKKwkgKiBYWFgg aWYgYSB0YWJsZSBpcyBzZWxmLWpvaW5lZCwgd2Ugd2lsbCBjb3VudCBpdCBvbmNlIHBlciBh cHBlYXJhbmNlLAorCSAqIHdoaWNoIHBlcmhhcHMgaXMgdGhlIHdyb25nIHRoaW5nIC4uLiBi dXQgdGhhdCdzIG5vdCBjb21wbGV0ZWx5IGNsZWFyLAorCSAqIGFuZCBkZXRlY3Rpbmcgc2Vs Zi1qb2lucyBoZXJlIGlzIGRpZmZpY3VsdCwgc28gaWdub3JlIGl0IGZvciBub3cuCisJICov CisJdG90YWxfcGFnZXMgPSAwOworCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+c2ltcGxl X3JlbF9hcnJheV9zaXplOyBydGkrKykKKwl7CisJCVJlbE9wdEluZm8gKmJyZWwgPSByb290 LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07CisKKwkJaWYgKGJyZWwgPT0gTlVMTCkKKwkJCWNv bnRpbnVlOworCisJCUFzc2VydChicmVsLT5yZWxpZCA9PSBydGkpOyAvKiBzYW5pdHkgY2hl Y2sgb24gYXJyYXkgKi8KKworCQlpZiAoSVNfU0lNUExFX1JFTChicmVsKSkKKwkJCXRvdGFs X3BhZ2VzICs9IChkb3VibGUpIGJyZWwtPnBhZ2VzOworCX0KKwlyb290LT50b3RhbF90YWJs ZV9wYWdlcyA9IHRvdGFsX3BhZ2VzOworCiAJc2V0X2Jhc2VfcmVsX3BhdGhsaXN0cyhyb290 KTsKIAogCS8qCkBAIC04OTYsOCArOTI2LDYgQEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFu bmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWRvdWJsZQkgICAqcGFyZW50X2F0 dHJzaXplczsKIAlpbnQJCQluYXR0cnM7CiAJTGlzdENlbGwgICAqbDsKLQlSZWxpZHMJCWxp dmVfY2hpbGRyZW4gPSBOVUxMOwotCWJvb2wJCWRpZF9wcnVuaW5nID0gZmFsc2U7CiAKIAkv KiBHdWFyZCBhZ2FpbnN0IHN0YWNrIG92ZXJmbG93IGR1ZSB0byBvdmVybHkgZGVlcCBpbmhl cml0YW5jZSB0cmVlLiAqLwogCWNoZWNrX3N0YWNrX2RlcHRoKCk7CkBAIC05MTMsMjEgKzk0 MSwxNCBAQCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwsCiAJICogcGFydGl0aW9uZWQgdGFibGUncyBsaXN0IHdpbGwgY29udGFpbiBh bGwgc3VjaCBpbmRleGVzLgogCSAqLwogCWlmIChydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9Q QVJUSVRJT05FRF9UQUJMRSkKKwl7CiAJCXJlbC0+cGFydGl0aW9uZWRfY2hpbGRfcmVscyA9 IGxpc3RfbWFrZTFfaW50KHJ0aSk7CiAKLQkvKgotCSAqIElmIHRoZSBwYXJ0aXRpb25lZCBy ZWxhdGlvbiBoYXMgYW55IGJhc2VyZXN0cmljdGluZm8gcXVhbHMgdGhlbiB3ZQotCSAqIGF0 dGVtcHQgdG8gdXNlIHRoZXNlIHF1YWxzIHRvIHBydW5lIGF3YXkgcGFydGl0aW9ucyB0aGF0 IGNhbm5vdAotCSAqIHBvc3NpYmx5IGNvbnRhaW4gYW55IHR1cGxlcyBtYXRjaGluZyB0aGVz ZSBxdWFscy4gIEluIHRoaXMgY2FzZSB3ZSdsbAotCSAqIHN0b3JlIHRoZSByZWxpZHMgb2Yg YWxsIHBhcnRpdGlvbnMgd2hpY2ggY291bGQgcG9zc2libHkgY29udGFpbiBhCi0JICogbWF0 Y2hpbmcgdHVwbGUsIGFuZCBza2lwIGFueXRoaW5nIGVsc2UgaW4gdGhlIGxvb3AgYmVsb3cu Ci0JICovCi0JaWYgKGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyAmJgotCQlydGUtPnJlbGtp bmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgotCQlyZWwtPmJhc2VyZXN0cmlj dGluZm8gIT0gTklMKQotCXsKLQkJbGl2ZV9jaGlsZHJlbiA9IHBydW5lX2FwcGVuZF9yZWxf cGFydGl0aW9ucyhyZWwpOwotCQlkaWRfcHJ1bmluZyA9IHRydWU7CisJCS8qCisJCSAqIEFu ZCBkbyBwcnVuaW4uICBOb3RlIHRoYXQgdGhpcyBhZGRzIEFwcGVuZFJlbEluZm8ncyBvZiBv bmx5IHRoZQorCQkgKiBwYXJ0aXRpb25zIHRoYXQgYXJlIG5vdCBwcnVuZWQuCisJCSAqLwor CQlwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMocm9vdCwgcmVsKTsKIAl9CiAKIAkvKgpA QCAtMTE3OCwxMyArMTE5OSw2IEBAIHNldF9hcHBlbmRfcmVsX3NpemUoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCWNvbnRpbnVlOwogCQl9CiAKLQkJaWYgKGRp ZF9wcnVuaW5nICYmICFibXNfaXNfbWVtYmVyKGFwcGluZm8tPmNoaWxkX3JlbGlkLCBsaXZl X2NoaWxkcmVuKSkKLQkJewotCQkJLyogVGhpcyBwYXJ0aXRpb24gd2FzIHBydW5lZDsgc2tp cCBpdC4gKi8KLQkJCXNldF9kdW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOwotCQkJY29u dGludWU7Ci0JCX0KLQogCQlpZiAocmVsYXRpb25fZXhjbHVkZWRfYnlfY29uc3RyYWludHMo cm9vdCwgY2hpbGRyZWwsIGNoaWxkUlRFKSkKIAkJewogCQkJLyoKQEAgLTI2MjksMTYgKzI2 NDMsMTUgQEAgcGFydGl0aW9ud2lzZV9tYWtlX3JlbF9mcm9tX2pvaW5saXN0KFBsYW5uZXJJ bmZvICpyb290LAogCUFzc2VydChyb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb24gIT0gMCk7 CiAJQXNzZXJ0KHBhcmVudC0+cGFydF9zY2hlbWUgIT0gTlVMTCk7CiAKLQlmb3IgKGkgPSAw OyBpIDwgcGFyZW50LT5ucGFydHM7IGkrKykKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1z X25leHRfbWVtYmVyKHBhcmVudC0+bGl2ZV9wYXJ0cywgaSkpID49IDApCiAJewogCQlSZWxP cHRJbmZvICpwYXJ0cmVsID0gcGFyZW50LT5wYXJ0X3JlbHNbaV07CiAJCUFwcGVuZFJlbElu Zm8gKmFwcGluZm87CiAJCUxpc3QJICAgKnRyYW5zbGF0ZWRfam9pbmxpc3Q7CiAJCUxpc3QJ ICAgKnNhdmVkX2pvaW5faW5mb19saXN0ID0gbGlzdF9jb3B5KHJvb3QtPmpvaW5faW5mb19s aXN0KTsKIAotCQkvKiBJZ25vcmUgcHJ1bmVkIHBhcnRpdGlvbnMuICovCi0JCWlmIChJU19E VU1NWV9SRUwocGFydHJlbCkpCi0JCQljb250aW51ZTsKKwkJQXNzZXJ0IChwYXJ0cmVsICE9 IE5VTEwpOwogCiAJCS8qCiAJCSAqIEhhY2sgdG8gbWFrZSB0aGUgam9pbiBwbGFubmluZyBj b2RlIGJlbGlldmUgdGhhdCAncGFydHJlbCcgY2FuCmRpZmYgLS1naXQgYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3Bh dGgvam9pbnJlbHMuYwppbmRleCA3MDA4ZTEzMThlLi44NTQyYjk1ZjRiIDEwMDY0NAotLS0g YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCisrKyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKQEAgLTEzNjksNiArMTM2OSwxMSBAQCB0 cnlfcGFydGl0aW9ud2lzZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpy ZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQlBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3M7CiAJ CWludAkJCW5hcHBpbmZvczsKIAorCQlpZiAoY2hpbGRfcmVsMSA9PSBOVUxMKQorCQkJY2hp bGRfcmVsMSA9IGJ1aWxkX2R1bW15X3BhcnRpdGlvbl9yZWwocm9vdCwgcmVsMSwgY250X3Bh cnRzKTsKKwkJaWYgKGNoaWxkX3JlbDIgPT0gTlVMTCkKKwkJCWNoaWxkX3JlbDIgPSBidWls ZF9kdW1teV9wYXJ0aXRpb25fcmVsKHJvb3QsIHJlbDIsIGNudF9wYXJ0cyk7CisKIAkJLyog V2Ugc2hvdWxkIG5ldmVyIHRyeSB0byBqb2luIHR3byBvdmVybGFwcGluZyBzZXRzIG9mIHJl bHMuICovCiAJCUFzc2VydCghYm1zX292ZXJsYXAoY2hpbGRfcmVsMS0+cmVsaWRzLCBjaGls ZF9yZWwyLT5yZWxpZHMpKTsKIAkJY2hpbGRfam9pbnJlbGlkcyA9IGJtc191bmlvbihjaGls ZF9yZWwxLT5yZWxpZHMsIGNoaWxkX3JlbDItPnJlbGlkcyk7CkBAIC0xNDA3LDYgKzE0MTIs OSBAQCB0cnlfcGFydGl0aW9ud2lzZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJ bmZvICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQlwb3B1bGF0ZV9qb2lucmVsX3dpdGhf cGF0aHMocm9vdCwgY2hpbGRfcmVsMSwgY2hpbGRfcmVsMiwKIAkJCQkJCQkJCWNoaWxkX2pv aW5yZWwsIGNoaWxkX3NqaW5mbywKIAkJCQkJCQkJCWNoaWxkX3Jlc3RyaWN0bGlzdCk7CisJ CWlmICghSVNfRFVNTVlfUkVMKGNoaWxkX2pvaW5yZWwpKQorCQkJam9pbnJlbC0+bGl2ZV9w YXJ0cyA9IGJtc19hZGRfbWVtYmVyKGpvaW5yZWwtPmxpdmVfcGFydHMsCisJCQkJCQkJCQkJ CQkgY250X3BhcnRzKTsKIAl9CiB9CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci9wbGFuL2luaXRzcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5p dHNwbGFuLmMKaW5kZXggMDEzMzVkYjUxMS4uYmViM2U5NTEwMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKQEAgLTEzMiw2ICsxMzIsNzIgQEAgYWRkX2Jh c2VfcmVsc190b19xdWVyeShQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqanRub2RlKQogCQkJ IChpbnQpIG5vZGVUYWcoanRub2RlKSk7CiB9CiAKKy8qCisgKiBhZGRfcmVsX3BhcnRpdGlv bnNfdG9fcXVlcnkKKyAqCQljcmVhdGUgcmFuZ2UgdGFibGUgZW50cmllcyBhbmQgIm90aGVy cmVsIiBSZWxPcHRJbmZvcyBhbmQgZm9yIHRoZQorICoJCXBhcnRpdGlvbnMgb2YgJ3JlbCcg c3BlY2lmaWVkIGJ5IHRoZSBjYWxsZXIKKyAqCisgKiBUbyBzdG9yZSB0aGUgb2JqZWN0cyB0 aHVzIGNyZWF0ZWQsIHZhcmlvdXMgYXJyYXlzIGluICdyb290JyBhcmUgZXhwYW5kZWQKKyAq IGJ5IHJlcGFsbG9jJ2luZyB0aGVtLgorICovCit2b2lkCithZGRfcmVsX3BhcnRpdGlvbnNf dG9fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQli b29sIHNjYW5fYWxsX3BhcnRzLAorCQkJCQkJCUJpdG1hcHNldCAqcGFydGluZGV4ZXMpCit7 CisJaW50CQluZXdfc2l6ZTsKKwlpbnQJCW51bV9hZGRlZF9wYXJ0czsKKwlpbnQJCWk7CisK KwlBc3NlcnQocGFydGluZGV4ZXMgIT0gTlVMTCB8fCBzY2FuX2FsbF9wYXJ0cyk7CisKKwkv KiBFeHBhbmQgdGhlIFBsYW5uZXJJbmZvIGFycmF5cyB0byBob2xkIG5ldyBwYXJ0aXRpb24g b2JqZWN0cy4gKi8KKwludW1fYWRkZWRfcGFydHMgPSBzY2FuX2FsbF9wYXJ0cyA/IHJlbC0+ bnBhcnRzIDoKKwkJCQkJCWJtc19udW1fbWVtYmVycyhwYXJ0aW5kZXhlcyk7CisJbmV3X3Np emUgPSByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUgKyBudW1fYWRkZWRfcGFydHM7CisJ cm9vdC0+c2ltcGxlX3J0ZV9hcnJheSA9IChSYW5nZVRibEVudHJ5ICoqKQorCQkJCQkJCXJl cGFsbG9jKHJvb3QtPnNpbXBsZV9ydGVfYXJyYXksCisJCQkJCQkJCQkgc2l6ZW9mKFJhbmdl VGJsRW50cnkgKikgKiBuZXdfc2l6ZSk7CisJcm9vdC0+c2ltcGxlX3JlbF9hcnJheSA9IChS ZWxPcHRJbmZvICoqKQorCQkJCQkJCQlyZXBhbGxvYyhyb290LT5zaW1wbGVfcmVsX2FycmF5 LAorCQkJCQkJCQkJCSBzaXplb2YoUmVsT3B0SW5mbyAqKSAqIG5ld19zaXplKTsKKwlpZiAo cm9vdC0+YXBwZW5kX3JlbF9hcnJheSkKKwkJcm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9IChB cHBlbmRSZWxJbmZvICoqKQorCQkJCQkJCQkJcmVwYWxsb2Mocm9vdC0+YXBwZW5kX3JlbF9h cnJheSwKKwkJCQkJCQkJCSBzaXplb2YoQXBwZW5kUmVsSW5mbyAqKSAqIG5ld19zaXplKTsK KwllbHNlCisJCXJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgPSAoQXBwZW5kUmVsSW5mbyAqKikK KwkJCQkJCQkJCXBhbGxvYzAoc2l6ZW9mKEFwcGVuZFJlbEluZm8gKikgKgorCQkJCQkJCQkJ CQluZXdfc2l6ZSk7CisKKwkvKiBTZXQgdGhlIGNvbnRlbnRzIG9mIGp1c3QgYWxsb2NhdGVk IG1lbW9yeSB0byAwLiAqLworCU1lbVNldChyb290LT5zaW1wbGVfcnRlX2FycmF5ICsgcm9v dC0+c2ltcGxlX3JlbF9hcnJheV9zaXplLAorCQkgICAwLCBzaXplb2YoUmFuZ2VUYmxFbnRy eSAqKSAqIG51bV9hZGRlZF9wYXJ0cyk7CisJTWVtU2V0KHJvb3QtPnNpbXBsZV9yZWxfYXJy YXkgKyByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUsCisJCSAgIDAsIHNpemVvZihSZWxP cHRJbmZvICopICogbnVtX2FkZGVkX3BhcnRzKTsKKwlNZW1TZXQocm9vdC0+YXBwZW5kX3Jl bF9hcnJheSArIHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZSwKKwkJICAgMCwgc2l6ZW9m KEFwcGVuZFJlbEluZm8gKikgKiBudW1fYWRkZWRfcGFydHMpOworCXJvb3QtPnNpbXBsZV9y ZWxfYXJyYXlfc2l6ZSA9IG5ld19zaXplOworCisJLyogQW5kIGFkZCB0aGUgcGFydGl0aW9u cy4gKi8KKwlpZiAoc2Nhbl9hbGxfcGFydHMpCisJeworCQlmb3IgKGkgPSAwOyBpIDwgcmVs LT5ucGFydHM7IGkrKykKKwkJeworCQkJcmVsLT5wYXJ0X3JlbHNbaV0gPSBidWlsZF9wYXJ0 aXRpb25fcmVsKHJvb3QsIHJlbCwKKwkJCQkJCQkJCQkJCQlyZWwtPnBhcnRfb2lkc1tpXSk7 CisJCQlyZWwtPmxpdmVfcGFydHMgPSBibXNfYWRkX21lbWJlcihyZWwtPmxpdmVfcGFydHMs IGkpOworCQl9CisJfQorCWVsc2UKKwl7CisJCXJlbC0+bGl2ZV9wYXJ0cyA9IHBhcnRpbmRl eGVzOworCQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0aW5k ZXhlcywgaSkpID49IDApCisJCQlyZWwtPnBhcnRfcmVsc1tpXSA9IGJ1aWxkX3BhcnRpdGlv bl9yZWwocm9vdCwgcmVsLAorCQkJCQkJCQkJCQkJCXJlbC0+cGFydF9vaWRzW2ldKTsKKwl9 Cit9CiAKIC8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICoKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcGxhbi9wbGFubWFpbi5jCmluZGV4IDNmMGQ4MGVhYTYuLjFiZDNmMGUzNTAgMTAwNjQ0 Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtNTcsOCArNTcsNiBAQCBx dWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp0bGlzdCwKIAlRdWVyeQkg ICAqcGFyc2UgPSByb290LT5wYXJzZTsKIAlMaXN0CSAgICpqb2lubGlzdDsKIAlSZWxPcHRJ bmZvICpmaW5hbF9yZWw7Ci0JSW5kZXgJCXJ0aTsKLQlkb3VibGUJCXRvdGFsX3BhZ2VzOwog CiAJLyoKIAkgKiBJZiB0aGUgcXVlcnkgaGFzIGFuIGVtcHR5IGpvaW4gdHJlZSwgdGhlbiBp dCdzIHNvbWV0aGluZyBlYXN5IGxpa2UKQEAgLTIzMiwzNCArMjMwLDYgQEAgcXVlcnlfcGxh bm5lcihQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqdGxpc3QsCiAJZXh0cmFjdF9yZXN0cmlj dGlvbl9vcl9jbGF1c2VzKHJvb3QpOwogCiAJLyoKLQkgKiBXZSBzaG91bGQgbm93IGhhdmUg c2l6ZSBlc3RpbWF0ZXMgZm9yIGV2ZXJ5IGFjdHVhbCB0YWJsZSBpbnZvbHZlZCBpbgotCSAq IHRoZSBxdWVyeSwgYW5kIHdlIGFsc28ga25vdyB3aGljaCBpZiBhbnkgaGF2ZSBiZWVuIGRl bGV0ZWQgZnJvbSB0aGUKLQkgKiBxdWVyeSBieSBqb2luIHJlbW92YWw7IHNvIHdlIGNhbiBj b21wdXRlIHRvdGFsX3RhYmxlX3BhZ2VzLgotCSAqCi0JICogTm90ZSB0aGF0IGFwcGVuZHJl bHMgYXJlIG5vdCBkb3VibGUtY291bnRlZCBoZXJlLCBldmVuIHRob3VnaCB3ZSBkb24ndAot CSAqIGJvdGhlciB0byBkaXN0aW5ndWlzaCBSZWxPcHRJbmZvcyBmb3IgYXBwZW5kcmVsIHBh cmVudHMsIGJlY2F1c2UgdGhlCi0JICogcGFyZW50cyB3aWxsIHN0aWxsIGhhdmUgc2l6ZSB6 ZXJvLgotCSAqCi0JICogWFhYIGlmIGEgdGFibGUgaXMgc2VsZi1qb2luZWQsIHdlIHdpbGwg Y291bnQgaXQgb25jZSBwZXIgYXBwZWFyYW5jZSwKLQkgKiB3aGljaCBwZXJoYXBzIGlzIHRo ZSB3cm9uZyB0aGluZyAuLi4gYnV0IHRoYXQncyBub3QgY29tcGxldGVseSBjbGVhciwKLQkg KiBhbmQgZGV0ZWN0aW5nIHNlbGYtam9pbnMgaGVyZSBpcyBkaWZmaWN1bHQsIHNvIGlnbm9y ZSBpdCBmb3Igbm93LgotCSAqLwotCXRvdGFsX3BhZ2VzID0gMDsKLQlmb3IgKHJ0aSA9IDE7 IHJ0aSA8IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlfc2l6ZTsgcnRpKyspCi0JewotCQlSZWxP cHRJbmZvICpicmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtydGldOwotCi0JCWlmIChi cmVsID09IE5VTEwpCi0JCQljb250aW51ZTsKLQotCQlBc3NlcnQoYnJlbC0+cmVsaWQgPT0g cnRpKTsgLyogc2FuaXR5IGNoZWNrIG9uIGFycmF5ICovCi0KLQkJaWYgKElTX1NJTVBMRV9S RUwoYnJlbCkpCi0JCQl0b3RhbF9wYWdlcyArPSAoZG91YmxlKSBicmVsLT5wYWdlczsKLQl9 Ci0Jcm9vdC0+dG90YWxfdGFibGVfcGFnZXMgPSB0b3RhbF9wYWdlczsKLQotCS8qCiAJICog UmVhZHkgdG8gZG8gdGhlIHByaW1hcnkgcGxhbm5pbmcuCiAJICovCiAJZmluYWxfcmVsID0g bWFrZV9vbmVfcmVsKHJvb3QsIGpvaW5saXN0KTsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYwppbmRleCAwNzZkYmQzZDYyLi5jY2U2NzU3MTE1IDEwMDY0NAotLS0gYS9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKKysrIGIvc3JjL2JhY2tlbmQv b3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC0yMzYxLDcgKzIzNjEsOCBAQCBwYXJ0aXRp b253aXNlX2FkanVzdF9zY2Fuam9pbl90YXJnZXQoUGxhbm5lckluZm8gKnJvb3QsCiAJKnBh cnRpdGlvbmVkX3JlbHMgPSBsYXBwZW5kKCpwYXJ0aXRpb25lZF9yZWxzLAogCQkJCQkJCQls aXN0X21ha2UxX2ludChwYXJlbnQtPnJlbGlkKSk7CiAKLQlmb3IgKGkgPSAwOyBpIDwgcGFy ZW50LT5ucGFydHM7IGkrKykKKwlpID0gLTE7CisJd2hpbGUgKChpID0gYm1zX25leHRfbWVt YmVyKHBhcmVudC0+bGl2ZV9wYXJ0cywgaSkpID49IDApCiAJewogCQlSZWxPcHRJbmZvICpj aGlsZF9yZWwgPSBwYXJlbnQtPnBhcnRfcmVsc1tpXTsKIAkJQXBwZW5kUmVsSW5mbyAqYXBw aW5mbzsKQEAgLTIzNzMsOSArMjM3NCw3IEBAIHBhcnRpdGlvbndpc2VfYWRqdXN0X3NjYW5q b2luX3RhcmdldChQbGFubmVySW5mbyAqcm9vdCwKIAkJUGxhbm5lckluZm8gKnBhcnRpdGlv bl9zdWJyb290OwogCQlRdWVyeQkgICAqcGFydGl0aW9uX3BhcnNlOwogCi0JCS8qIElnbm9y ZSBwcnVuZWQgcGFydGl0aW9ucy4gKi8KLQkJaWYgKElTX0RVTU1ZX1JFTChjaGlsZF9yZWwp KQotCQkJY29udGludWU7CisJCUFzc2VydCAoY2hpbGRfcmVsICE9IE5VTEwpOwogCiAJCS8q CiAJCSAqIEV4dHJhY3QgdGhlIG9yaWdpbmFsIHJlbGlkIG9mIHBhcnRpdGlvbiB0byBmZXRj aCBpdHMgQXBwZW5kUmVsSW5mby4KQEAgLTcxMjIsMTggKzcxMjEsMjEgQEAgYXBwbHlfc2Nh bmpvaW5fdGFyZ2V0X3RvX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCSAqLwogCWlmIChy ZWwtPnBhcnRfc2NoZW1lICYmIHJlbC0+cGFydF9yZWxzKQogCXsKLQkJaW50CQkJcGFydGl0 aW9uX2lkeDsKKwkJaW50CQkJaTsKIAkJTGlzdAkgICAqbGl2ZV9jaGlsZHJlbiA9IE5JTDsK IAogCQkvKiBBZGp1c3QgZWFjaCBwYXJ0aXRpb24uICovCi0JCWZvciAocGFydGl0aW9uX2lk eCA9IDA7IHBhcnRpdGlvbl9pZHggPCByZWwtPm5wYXJ0czsgcGFydGl0aW9uX2lkeCsrKQor CQlpID0gLTE7CisJCXdoaWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihyZWwtPmxpdmVfcGFy dHMsIGkpKSA+PSAwKQogCQl7Ci0JCQlSZWxPcHRJbmZvICpjaGlsZF9yZWwgPSByZWwtPnBh cnRfcmVsc1twYXJ0aXRpb25faWR4XTsKKwkJCVJlbE9wdEluZm8gKmNoaWxkX3JlbCA9IHJl bC0+cGFydF9yZWxzW2ldOwogCQkJTGlzdENlbGwgICAqbGM7CiAJCQlBcHBlbmRSZWxJbmZv ICoqYXBwaW5mb3M7CiAJCQlpbnQJCQluYXBwaW5mb3M7CiAJCQlMaXN0CSAgICpjaGlsZF9z Y2Fuam9pbl90YXJnZXRzID0gTklMOwogCisJCQlBc3NlcnQoY2hpbGRfcmVsICE9IE5VTEwp OworCiAJCQkvKiBUcmFuc2xhdGUgc2Nhbi9qb2luIHRhcmdldHMgZm9yIHRoaXMgY2hpbGQu ICovCiAJCQlhcHBpbmZvcyA9IGZpbmRfYXBwaW5mb3NfYnlfcmVsaWRzKHJvb3QsIGNoaWxk X3JlbC0+cmVsaWRzLAogCQkJCQkJCQkJCQkgICAmbmFwcGluZm9zKTsKQEAgLTcyMzcsNiAr NzIzOSw5IEBAIGNyZWF0ZV9wYXJ0aXRpb253aXNlX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJ bmZvICpyb290LAogCQlSZWxPcHRJbmZvICpjaGlsZF9ncm91cGVkX3JlbDsKIAkJUmVsT3B0 SW5mbyAqY2hpbGRfcGFydGlhbGx5X2dyb3VwZWRfcmVsOwogCisJCWlmIChjaGlsZF9pbnB1 dF9yZWwgPT0gTlVMTCkKKwkJCWNvbnRpbnVlOworCiAJCS8qIElucHV0IGNoaWxkIHJlbCBt dXN0IGhhdmUgYSBwYXRoICovCiAJCUFzc2VydChjaGlsZF9pbnB1dF9yZWwtPnBhdGhsaXN0 ICE9IE5JTCk7CiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXB1bmlvbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKaW5k ZXggZjRjNDg1Y2RjOS4uMjc5ZjY4NmZiMCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3By ZXAvcHJlcHVuaW9uLmMKQEAgLTQ5LDYgKzQ5LDggQEAKICNpbmNsdWRlICJwYXJzZXIvcGFy c2VfY29lcmNlLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgogI2luY2x1ZGUg InV0aWxzL2xzeXNjYWNoZS5oIgorI2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgorI2lu Y2x1ZGUgInV0aWxzL3BhcnRjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgogI2lu Y2x1ZGUgInV0aWxzL3NlbGZ1bmNzLmgiCiAjaW5jbHVkZSAidXRpbHMvc3lzY2FjaGUuaCIK QEAgLTEwMSwyMSArMTAzLDEwIEBAIHN0YXRpYyBMaXN0ICpnZW5lcmF0ZV9hcHBlbmRfdGxp c3QoTGlzdCAqY29sVHlwZXMsIExpc3QgKmNvbENvbGxhdGlvbnMsCiBzdGF0aWMgTGlzdCAq Z2VuZXJhdGVfc2V0b3BfZ3JvdXBsaXN0KFNldE9wZXJhdGlvblN0bXQgKm9wLCBMaXN0ICp0 YXJnZXRsaXN0KTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFu bmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCQkJCQkJIEluZGV4IHJ0aSk7 Ci1zdGF0aWMgdm9pZCBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAq cm9vdCwKLQkJCQkJCSAgIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKLQkJCQkJCSAgIElu ZGV4IHBhcmVudFJUaW5kZXgsIFJlbGF0aW9uIHBhcmVudHJlbCwKLQkJCQkJCSAgIFBsYW5S b3dNYXJrICp0b3BfcGFyZW50cmMsIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJICAgTGlz dCAqKmFwcGluZm9zKTsKLXN0YXRpYyB2b2lkIGV4cGFuZF9zaW5nbGVfaW5oZXJpdGFuY2Vf Y2hpbGQoUGxhbm5lckluZm8gKnJvb3QsCi0JCQkJCQkJCVJhbmdlVGJsRW50cnkgKnBhcmVu dHJ0ZSwKLQkJCQkJCQkJSW5kZXggcGFyZW50UlRpbmRleCwgUmVsYXRpb24gcGFyZW50cmVs LAotCQkJCQkJCQlQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBSZWxhdGlvbiBjaGlsZHJl bCwKLQkJCQkJCQkJTGlzdCAqKmFwcGluZm9zLCBSYW5nZVRibEVudHJ5ICoqY2hpbGRydGVf cCwKLQkJCQkJCQkJSW5kZXggKmNoaWxkUlRpbmRleF9wKTsKLXN0YXRpYyB2b2lkIG1ha2Vf aW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xkcmVsYXRpb24sCi0JCQkJCQkgIFJl bGF0aW9uIG5ld3JlbGF0aW9uLAotCQkJCQkJICBJbmRleCBuZXd2YXJubywKLQkJCQkJCSAg TGlzdCAqKnRyYW5zbGF0ZWRfdmFycyk7CitzdGF0aWMgdm9pZCBtYWtlX2luaF90cmFuc2xh dGlvbl9saXN0KFR1cGxlRGVzYyBvbGRfdHVwZGVzYywKKwkJCQkJCSAgVHVwbGVEZXNjIG5l d190dXBkZXNjLAorCQkJCQkJICBSYW5nZVRibEVudHJ5ICpvbGRydGUsIFJhbmdlVGJsRW50 cnkgKm5ld3J0ZSwKKwkJCQkJCSAgSW5kZXggbmV3dmFybm8sIExpc3QgKip0cmFuc2xhdGVk X3ZhcnMpOwogc3RhdGljIEJpdG1hcHNldCAqdHJhbnNsYXRlX2NvbF9wcml2cyhjb25zdCBC aXRtYXBzZXQgKnBhcmVudF9wcml2cywKIAkJCQkJTGlzdCAqdHJhbnNsYXRlZF92YXJzKTsK IHN0YXRpYyBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9kZSAqbm9k ZSwKQEAgLTE1MjIsNiArMTUxMyw3IEBAIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFu bmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGkpCiAJTE9DS01P REUJbG9ja21vZGU7CiAJTGlzdAkgICAqaW5oT0lEczsKIAlMaXN0Q2VsbCAgICpsOworCUxp c3QJICAgKmFwcGluZm9zID0gTklMOwogCiAJLyogRG9lcyBSVCBlbnRyeSBhbGxvdyBpbmhl cml0YW5jZT8gKi8KIAlpZiAoIXJ0ZS0+aW5oKQpAQCAtMTU4NSwxNzMgKzE1NzcsNTggQEAg ZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVu dHJ5ICpydGUsIEluZGV4IHJ0aSkKIAlpZiAob2xkcmMpCiAJCW9sZHJjLT5pc1BhcmVudCA9 IHRydWU7CiAKKwkvKiBQYXJ0aXRpb25lZCB0YWJsZXMgYXJlIGV4cGFuZGVkIGVsc2V3aGVy ZS4gKi8KKwlpZiAocnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUp CisJeworCQlsaXN0X2ZyZWUoaW5oT0lEcyk7CisJCXJldHVybjsKKwl9CisKIAkvKgogCSAq IE11c3Qgb3BlbiB0aGUgcGFyZW50IHJlbGF0aW9uIHRvIGV4YW1pbmUgaXRzIHR1cGRlc2Mu ICBXZSBuZWVkIG5vdCBsb2NrCiAJICogaXQ7IHdlIGFzc3VtZSB0aGUgcmV3cml0ZXIgYWxy ZWFkeSBkaWQuCiAJICovCiAJb2xkcmVsYXRpb24gPSBoZWFwX29wZW4ocGFyZW50T0lELCBO b0xvY2spOwogCi0JLyogU2NhbiB0aGUgaW5oZXJpdGFuY2Ugc2V0IGFuZCBleHBhbmQgaXQg Ki8KLQlpZiAoUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKG9sZHJlbGF0aW9uKSAhPSBOVUxM KQorCWZvcmVhY2gobCwgaW5oT0lEcykKIAl7Ci0JCUFzc2VydChydGUtPnJlbGtpbmQgPT0g UkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSk7CisJCU9pZAkJCWNoaWxkT0lEID0gbGZpcnN0 X29pZChsKTsKKwkJSW5kZXgJCWNoaWxkUlRpbmRleCA9IDA7CisJCVJhbmdlVGJsRW50cnkg KmNoaWxkcnRlID0gTlVMTDsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IE5VTEw7CiAK LQkJLyoKLQkJICogSWYgdGhpcyB0YWJsZSBoYXMgcGFydGl0aW9ucywgcmVjdXJzaXZlbHkg ZXhwYW5kIHRoZW0gaW4gdGhlIG9yZGVyCi0JCSAqIGluIHdoaWNoIHRoZXkgYXBwZWFyIGlu IHRoZSBQYXJ0aXRpb25EZXNjLiAgV2hpbGUgYXQgaXQsIGFsc28KLQkJICogZXh0cmFjdCB0 aGUgcGFydGl0aW9uIGtleSBjb2x1bW5zIG9mIGFsbCB0aGUgcGFydGl0aW9uZWQgdGFibGVz LgotCQkgKi8KLQkJZXhwYW5kX3BhcnRpdGlvbmVkX3J0ZW50cnkocm9vdCwgcnRlLCBydGks IG9sZHJlbGF0aW9uLCBvbGRyYywKLQkJCQkJCQkJICAgbG9ja21vZGUsICZyb290LT5hcHBl bmRfcmVsX2xpc3QpOworCQlhZGRfaW5oZXJpdGFuY2VfY2hpbGRfdG9fcXVlcnkocm9vdCwg cnRlLCBydGksCisJCQkJCQkJCQkgICBvbGRyZWxhdGlvbi0+cmRfcmVsLT5yZWx0eXBlLAor CQkJCQkJCQkJICAgUmVsYXRpb25HZXREZXNjcihvbGRyZWxhdGlvbiksCisJCQkJCQkJCQkg ICBvbGRyYywgY2hpbGRPSUQsIE5vTG9jaywKKwkJCQkJCQkJCSAgICZhcHBpbmZvLCAmY2hp bGRydGUsCisJCQkJCQkJCQkgICAmY2hpbGRSVGluZGV4KTsKKwkJQXNzZXJ0KGNoaWxkUlRp bmRleCA+IDEpOworCQlBc3NlcnQoY2hpbGRydGUgIT0gTlVMTCk7CisJCUFzc2VydChhcHBp bmZvICE9IE5VTEwpOworCQlhcHBpbmZvcyA9IGxhcHBlbmQoYXBwaW5mb3MsIGFwcGluZm8p OwogCX0KKworCS8qCisJICogSWYgYWxsIHRoZSBjaGlsZHJlbiB3ZXJlIHRlbXAgdGFibGVz LCBwcmV0ZW5kIGl0J3MgYQorCSAqIG5vbi1pbmhlcml0YW5jZSBzaXR1YXRpb247IHdlIGRv bid0IG5lZWQgQXBwZW5kIG5vZGUgaW4gdGhhdCBjYXNlLgorCSAqIFRoZSBkdXBsaWNhdGUg UlRFIHdlIGFkZGVkIGZvciB0aGUgcGFyZW50IHRhYmxlIGlzIGhhcm1sZXNzLCBzbyB3ZQor CSAqIGRvbid0IGJvdGhlciB0byBnZXQgcmlkIG9mIGl0OyBkaXR0byBmb3IgdGhlIHVzZWxl c3MgUGxhblJvd01hcmsKKwkgKiBub2RlLgorCSAqLworCWlmIChsaXN0X2xlbmd0aChhcHBp bmZvcykgPCAyKQorCQlydGUtPmluaCA9IGZhbHNlOwogCWVsc2UKLQl7Ci0JCUxpc3QJICAg KmFwcGluZm9zID0gTklMOwotCQlSYW5nZVRibEVudHJ5ICpjaGlsZHJ0ZTsKLQkJSW5kZXgJ CWNoaWxkUlRpbmRleDsKLQotCQkvKgotCQkgKiBUaGlzIHRhYmxlIGhhcyBubyBwYXJ0aXRp b25zLiAgRXhwYW5kIGFueSBwbGFpbiBpbmhlcml0YW5jZQotCQkgKiBjaGlsZHJlbiBpbiB0 aGUgb3JkZXIgdGhlIE9JRHMgd2VyZSByZXR1cm5lZCBieQotCQkgKiBmaW5kX2FsbF9pbmhl cml0b3JzLgotCQkgKi8KLQkJZm9yZWFjaChsLCBpbmhPSURzKQotCQl7Ci0JCQlPaWQJCQlj aGlsZE9JRCA9IGxmaXJzdF9vaWQobCk7Ci0JCQlSZWxhdGlvbgluZXdyZWxhdGlvbjsKLQot CQkJLyogT3BlbiByZWwgaWYgbmVlZGVkOyB3ZSBhbHJlYWR5IGhhdmUgcmVxdWlyZWQgbG9j a3MgKi8KLQkJCWlmIChjaGlsZE9JRCAhPSBwYXJlbnRPSUQpCi0JCQkJbmV3cmVsYXRpb24g PSBoZWFwX29wZW4oY2hpbGRPSUQsIE5vTG9jayk7Ci0JCQllbHNlCi0JCQkJbmV3cmVsYXRp b24gPSBvbGRyZWxhdGlvbjsKLQotCQkJLyoKLQkJCSAqIEl0IGlzIHBvc3NpYmxlIHRoYXQg dGhlIHBhcmVudCB0YWJsZSBoYXMgY2hpbGRyZW4gdGhhdCBhcmUgdGVtcAotCQkJICogdGFi bGVzIG9mIG90aGVyIGJhY2tlbmRzLiAgV2UgY2Fubm90IHNhZmVseSBhY2Nlc3Mgc3VjaCB0 YWJsZXMKLQkJCSAqIChiZWNhdXNlIG9mIGJ1ZmZlcmluZyBpc3N1ZXMpLCBhbmQgdGhlIGJl c3QgdGhpbmcgdG8gZG8gc2VlbXMKLQkJCSAqIHRvIGJlIHRvIHNpbGVudGx5IGlnbm9yZSB0 aGVtLgotCQkJICovCi0JCQlpZiAoY2hpbGRPSUQgIT0gcGFyZW50T0lEICYmIFJFTEFUSU9O X0lTX09USEVSX1RFTVAobmV3cmVsYXRpb24pKQotCQkJewotCQkJCWhlYXBfY2xvc2UobmV3 cmVsYXRpb24sIGxvY2ttb2RlKTsKLQkJCQljb250aW51ZTsKLQkJCX0KLQotCQkJZXhwYW5k X3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChyb290LCBydGUsIHJ0aSwgb2xkcmVsYXRpb24s IG9sZHJjLAotCQkJCQkJCQkJCQluZXdyZWxhdGlvbiwKLQkJCQkJCQkJCQkJJmFwcGluZm9z LCAmY2hpbGRydGUsCi0JCQkJCQkJCQkJCSZjaGlsZFJUaW5kZXgpOwotCi0JCQkvKiBDbG9z ZSBjaGlsZCByZWxhdGlvbnMsIGJ1dCBrZWVwIGxvY2tzICovCi0JCQlpZiAoY2hpbGRPSUQg IT0gcGFyZW50T0lEKQotCQkJCWhlYXBfY2xvc2UobmV3cmVsYXRpb24sIE5vTG9jayk7Ci0J CX0KLQotCQkvKgotCQkgKiBJZiBhbGwgdGhlIGNoaWxkcmVuIHdlcmUgdGVtcCB0YWJsZXMs IHByZXRlbmQgaXQncyBhCi0JCSAqIG5vbi1pbmhlcml0YW5jZSBzaXR1YXRpb247IHdlIGRv bid0IG5lZWQgQXBwZW5kIG5vZGUgaW4gdGhhdCBjYXNlLgotCQkgKiBUaGUgZHVwbGljYXRl IFJURSB3ZSBhZGRlZCBmb3IgdGhlIHBhcmVudCB0YWJsZSBpcyBoYXJtbGVzcywgc28gd2UK LQkJICogZG9uJ3QgYm90aGVyIHRvIGdldCByaWQgb2YgaXQ7IGRpdHRvIGZvciB0aGUgdXNl bGVzcyBQbGFuUm93TWFyawotCQkgKiBub2RlLgotCQkgKi8KLQkJaWYgKGxpc3RfbGVuZ3Ro KGFwcGluZm9zKSA8IDIpCi0JCQlydGUtPmluaCA9IGZhbHNlOwotCQllbHNlCi0JCQlyb290 LT5hcHBlbmRfcmVsX2xpc3QgPSBsaXN0X2NvbmNhdChyb290LT5hcHBlbmRfcmVsX2xpc3Qs Ci0JCQkJCQkJCQkJCQlhcHBpbmZvcyk7Ci0KLQl9CisJCXJvb3QtPmFwcGVuZF9yZWxfbGlz dCA9IGxpc3RfY29uY2F0KHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwKKwkJCQkJCQkJCQkJYXBw aW5mb3MpOwogCiAJaGVhcF9jbG9zZShvbGRyZWxhdGlvbiwgTm9Mb2NrKTsKIH0KIAogLyoK LSAqIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5Ci0gKgkJUmVjdXJzaXZlbHkgZXhwYW5k IGFuIFJURSBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZS4KLSAqCi0gKiBOb3RlIHRoYXQgUmVs YXRpb25HZXRQYXJ0aXRpb25EaXNwYXRjaEluZm8gd2lsbCBleHBhbmQgcGFydGl0aW9ucyBp biB0aGUKLSAqIHNhbWUgb3JkZXIgYXMgdGhpcyBjb2RlLgotICovCi1zdGF0aWMgdm9pZAot ZXhwYW5kX3BhcnRpdGlvbmVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJs RW50cnkgKnBhcmVudHJ0ZSwKLQkJCQkJCSAgIEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbGF0 aW9uIHBhcmVudHJlbCwKLQkJCQkJCSAgIFBsYW5Sb3dNYXJrICp0b3BfcGFyZW50cmMsIExP Q0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJICAgTGlzdCAqKmFwcGluZm9zKQotewotCWludAkJ CWk7Ci0JUmFuZ2VUYmxFbnRyeSAqY2hpbGRydGU7Ci0JSW5kZXgJCWNoaWxkUlRpbmRleDsK LQlQYXJ0aXRpb25EZXNjIHBhcnRkZXNjID0gUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKHBh cmVudHJlbCk7Ci0KLQljaGVja19zdGFja19kZXB0aCgpOwotCi0JLyogQSBwYXJ0aXRpb25l ZCB0YWJsZSBzaG91bGQgYWx3YXlzIGhhdmUgYSBwYXJ0aXRpb24gZGVzY3JpcHRvci4gKi8K LQlBc3NlcnQocGFydGRlc2MpOwotCi0JQXNzZXJ0KHBhcmVudHJ0ZS0+aW5oKTsKLQotCS8q Ci0JICogTm90ZSBkb3duIHdoZXRoZXIgYW55IHBhcnRpdGlvbiBrZXkgY29scyBhcmUgYmVp bmcgdXBkYXRlZC4gVGhvdWdoIGl0J3MKLQkgKiB0aGUgcm9vdCBwYXJ0aXRpb25lZCB0YWJs ZSdzIHVwZGF0ZWRDb2xzIHdlIGFyZSBpbnRlcmVzdGVkIGluLCB3ZQotCSAqIGluc3RlYWQg dXNlIHBhcmVudHJ0ZSB0byBnZXQgdGhlIHVwZGF0ZWRDb2xzLiBUaGlzIGlzIGNvbnZlbmll bnQKLQkgKiBiZWNhdXNlIHBhcmVudHJ0ZSBhbHJlYWR5IGhhcyB0aGUgcm9vdCBwYXJ0cmVs J3MgdXBkYXRlZENvbHMgdHJhbnNsYXRlZAotCSAqIHRvIG1hdGNoIHRoZSBhdHRyaWJ1dGUg b3JkZXJpbmcgb2YgcGFyZW50cmVsLgotCSAqLwotCWlmICghcm9vdC0+cGFydENvbHNVcGRh dGVkKQotCQlyb290LT5wYXJ0Q29sc1VwZGF0ZWQgPQotCQkJaGFzX3BhcnRpdGlvbl9hdHRy cyhwYXJlbnRyZWwsIHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsIE5VTEwpOwotCi0JLyogRmly c3QgZXhwYW5kIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpdHNlbGYuICovCi0JZXhwYW5kX3Np bmdsZV9pbmhlcml0YW5jZV9jaGlsZChyb290LCBwYXJlbnRydGUsIHBhcmVudFJUaW5kZXgs IHBhcmVudHJlbCwKLQkJCQkJCQkJCXRvcF9wYXJlbnRyYywgcGFyZW50cmVsLAotCQkJCQkJ CQkJYXBwaW5mb3MsICZjaGlsZHJ0ZSwgJmNoaWxkUlRpbmRleCk7Ci0KLQkvKgotCSAqIElm IHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBoYXMgbm8gcGFydGl0aW9ucywgdHJlYXQgdGhpcyBh cyB0aGUKLQkgKiBub24taW5oZXJpdGFuY2UgY2FzZS4KLQkgKi8KLQlpZiAocGFydGRlc2Mt Pm5wYXJ0cyA9PSAwKQotCXsKLQkJcGFyZW50cnRlLT5pbmggPSBmYWxzZTsKLQkJcmV0dXJu OwotCX0KLQotCWZvciAoaSA9IDA7IGkgPCBwYXJ0ZGVzYy0+bnBhcnRzOyBpKyspCi0Jewot CQlPaWQJCQljaGlsZE9JRCA9IHBhcnRkZXNjLT5vaWRzW2ldOwotCQlSZWxhdGlvbgljaGls ZHJlbDsKLQotCQkvKiBPcGVuIHJlbDsgd2UgYWxyZWFkeSBoYXZlIHJlcXVpcmVkIGxvY2tz ICovCi0JCWNoaWxkcmVsID0gaGVhcF9vcGVuKGNoaWxkT0lELCBOb0xvY2spOwotCi0JCS8q Ci0JCSAqIFRlbXBvcmFyeSBwYXJ0aXRpb25zIGJlbG9uZ2luZyB0byBvdGhlciBzZXNzaW9u cyBzaG91bGQgaGF2ZSBiZWVuCi0JCSAqIGRpc2FsbG93ZWQgYXQgZGVmaW5pdGlvbiwgYnV0 IGZvciBwYXJhbm9pYSdzIHNha2UsIGxldCdzIGRvdWJsZQotCQkgKiBjaGVjay4KLQkJICov Ci0JCWlmIChSRUxBVElPTl9JU19PVEhFUl9URU1QKGNoaWxkcmVsKSkKLQkJCWVsb2coRVJS T1IsICJ0ZW1wb3JhcnkgcmVsYXRpb24gZnJvbSBhbm90aGVyIHNlc3Npb24gZm91bmQgYXMg cGFydGl0aW9uIik7Ci0KLQkJZXhwYW5kX3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChyb290 LCBwYXJlbnRydGUsIHBhcmVudFJUaW5kZXgsCi0JCQkJCQkJCQkJcGFyZW50cmVsLCB0b3Bf cGFyZW50cmMsIGNoaWxkcmVsLAotCQkJCQkJCQkJCWFwcGluZm9zLCAmY2hpbGRydGUsICZj aGlsZFJUaW5kZXgpOwotCi0JCS8qIElmIHRoaXMgY2hpbGQgaXMgaXRzZWxmIHBhcnRpdGlv bmVkLCByZWN1cnNlICovCi0JCWlmIChjaGlsZHJlbC0+cmRfcmVsLT5yZWxraW5kID09IFJF TEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQlleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRy eShyb290LCBjaGlsZHJ0ZSwgY2hpbGRSVGluZGV4LAotCQkJCQkJCQkJICAgY2hpbGRyZWws IHRvcF9wYXJlbnRyYywgbG9ja21vZGUsCi0JCQkJCQkJCQkgICBhcHBpbmZvcyk7Ci0KLQkJ LyogQ2xvc2UgY2hpbGQgcmVsYXRpb24sIGJ1dCBrZWVwIGxvY2tzICovCi0JCWhlYXBfY2xv c2UoY2hpbGRyZWwsIE5vTG9jayk7Ci0JfQotfQotCi0vKgotICogZXhwYW5kX3NpbmdsZV9p bmhlcml0YW5jZV9jaGlsZAorICogYWRkX2luaGVyaXRhbmNlX2NoaWxkX3RvX3F1ZXJ5CiAg KgkJQnVpbGQgYSBSYW5nZVRibEVudHJ5IGFuZCBhbiBBcHBlbmRSZWxJbmZvLCBpZiBhcHBy b3ByaWF0ZSwgcGx1cwotICoJCW1heWJlIGEgUGxhblJvd01hcmsuCisgKgkJbWF5YmUgYSBQ bGFuUm93TWFyayBmb3IgYSBjaGlsZCByZWxhdGlvbi4KICAqCiAgKiBXZSBub3cgZXhwYW5k IHRoZSBwYXJ0aXRpb24gaGllcmFyY2h5IGxldmVsIGJ5IGxldmVsLCBjcmVhdGluZyBhCiAg KiBjb3JyZXNwb25kaW5nIGhpZXJhcmNoeSBvZiBBcHBlbmRSZWxJbmZvcyBhbmQgUmVsT3B0 SW5mb3MsIHdoZXJlIGVhY2gKQEAgLTE3NjksMTkgKzE2NDYsNzAgQEAgZXhwYW5kX3BhcnRp dGlvbmVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVu dHJ0ZSwKICAqIFRoZSBjaGlsZCBSYW5nZVRibEVudHJ5IGFuZCBpdHMgUlRJIGFyZSByZXR1 cm5lZCBpbiAiY2hpbGRydGVfcCIgYW5kCiAgKiAiY2hpbGRSVGluZGV4X3AiIHJlc3AuCiAg Ki8KLXN0YXRpYyB2b2lkCi1leHBhbmRfc2luZ2xlX2luaGVyaXRhbmNlX2NoaWxkKFBsYW5u ZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCi0JCQkJCQkJCUluZGV4 IHBhcmVudFJUaW5kZXgsIFJlbGF0aW9uIHBhcmVudHJlbCwKLQkJCQkJCQkJUGxhblJvd01h cmsgKnRvcF9wYXJlbnRyYywgUmVsYXRpb24gY2hpbGRyZWwsCi0JCQkJCQkJCUxpc3QgKiph cHBpbmZvcywgUmFuZ2VUYmxFbnRyeSAqKmNoaWxkcnRlX3AsCi0JCQkJCQkJCUluZGV4ICpj aGlsZFJUaW5kZXhfcCkKK3ZvaWQKK2FkZF9pbmhlcml0YW5jZV9jaGlsZF90b19xdWVyeShQ bGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAorCQkJCQkJCSAg IEluZGV4IHBhcmVudFJUaW5kZXgsIE9pZCBwYXJlbnRSZWxUeXBlLAorCQkJCQkJCSAgIFR1 cGxlRGVzYyBwYXJlbnREZXNjLAorCQkJCQkJCSAgIFBsYW5Sb3dNYXJrICp0b3BfcGFyZW50 cmMsCisJCQkJCQkJICAgT2lkIGNoaWxkT0lELCBpbnQgbG9ja21vZGUsCisJCQkJCQkJICAg QXBwZW5kUmVsSW5mbyAqKmFwcGluZm9fcCwKKwkJCQkJCQkgICBSYW5nZVRibEVudHJ5ICoq Y2hpbGRydGVfcCwKKwkJCQkJCQkgICBJbmRleCAqY2hpbGRSVGluZGV4X3ApCiB7CiAJUXVl cnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7Ci0JT2lkCQkJcGFyZW50T0lEID0gUmVsYXRp b25HZXRSZWxpZChwYXJlbnRyZWwpOwotCU9pZAkJCWNoaWxkT0lEID0gUmVsYXRpb25HZXRS ZWxpZChjaGlsZHJlbCk7CisJT2lkCQkJcGFyZW50T0lEID0gcGFyZW50cnRlLT5yZWxpZDsK IAlSYW5nZVRibEVudHJ5ICpjaGlsZHJ0ZTsKIAlJbmRleAkJY2hpbGRSVGluZGV4OwogCUFw cGVuZFJlbEluZm8gKmFwcGluZm87CisJUmVsYXRpb24JY2hpbGRyZWwgPSBOVUxMOworCWNo YXIJCWNoaWxkX3JlbGtpbmQ7CisJT2lkCQkJY2hpbGRfcmVsdHlwZTsKKwlUdXBsZURlc2MJ Y2hpbGREZXNjOworCisJKmFwcGluZm9fcCA9IE5VTEw7CisJKmNoaWxkcnRlX3AgPSBOVUxM OworCSpjaGlsZFJUaW5kZXhfcCA9IDA7CisKKwkvKiBPcGVuIHJlbCBpZiBuZWVkZWQ7IHdl IGFscmVhZHkgaGF2ZSByZXF1aXJlZCBsb2NrcyAqLworCWlmIChjaGlsZE9JRCAhPSBwYXJl bnRPSUQpCisJeworCQljaGlsZHJlbCA9IGhlYXBfb3BlbihjaGlsZE9JRCwgbG9ja21vZGUp OworCisJCS8qCisJCSAqIFRlbXBvcmFyeSBwYXJ0aXRpb25zIGJlbG9uZ2luZyB0byBvdGhl ciBzZXNzaW9ucyBzaG91bGQgaGF2ZSBiZWVuCisJCSAqIGRpc2FsbG93ZWQgYXQgZGVmaW5p dGlvbiwgYnV0IGZvciBwYXJhbm9pYSdzIHNha2UsIGxldCdzIGRvdWJsZQorCQkgKiBjaGVj ay4KKwkJICovCisJCWlmIChSRUxBVElPTl9JU19PVEhFUl9URU1QKGNoaWxkcmVsKSkKKwkJ eworCQkJaWYgKGNoaWxkcmVsLT5yZF9yZWwtPnJlbGlzcGFydGl0aW9uKQorCQkJCWVsb2co RVJST1IsICJ0ZW1wb3JhcnkgcmVsYXRpb24gZnJvbSBhbm90aGVyIHNlc3Npb24gZm91bmQg YXMgcGFydGl0aW9uIik7CisJCQloZWFwX2Nsb3NlKGNoaWxkcmVsLCBsb2NrbW9kZSk7CisJ CQlyZXR1cm47CisJCX0KKworCQljaGlsZF9yZWxraW5kID0gY2hpbGRyZWwtPnJkX3JlbC0+ cmVsa2luZDsKKworCQkvKgorCQkgKiBObyBwb2ludCBpbiBhZGRpbmcgdG8gdGhlIHF1ZXJ5 IGEgcGFydGl0aW9uZWQgdGFibGUgdGhhdCBoYXMgbm8KKwkJICogcGFydGl0aW9ucy4KKwkJ ICovCisJCWlmIChjaGlsZF9yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUg JiYKKwkJCVJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhjaGlsZHJlbCktPm5wYXJ0cyA9PSAw KQorCQl7CisJCQloZWFwX2Nsb3NlKGNoaWxkcmVsLCBsb2NrbW9kZSk7CisJCQlyZXR1cm47 CisJCX0KKworCQljaGlsZF9yZWx0eXBlID0gY2hpbGRyZWwtPnJkX3JlbC0+cmVsdHlwZTsK KwkJY2hpbGREZXNjID0gUmVsYXRpb25HZXREZXNjcihjaGlsZHJlbCk7CisJfQorCWVsc2UK Kwl7CisJCWNoaWxkX3JlbGtpbmQgPSBwYXJlbnRydGUtPnJlbGtpbmQ7CisJCWNoaWxkX3Jl bHR5cGUgPSAgcGFyZW50UmVsVHlwZTsKKwkJY2hpbGREZXNjID0gcGFyZW50RGVzYzsKKwl9 CiAKIAkvKgogCSAqIEJ1aWxkIGFuIFJURSBmb3IgdGhlIGNoaWxkLCBhbmQgYXR0YWNoIHRv IHF1ZXJ5J3MgcmFuZ2V0YWJsZSBsaXN0LiBXZQpAQCAtMTc5OCw3ICsxNzI2LDcgQEAgZXhw YW5kX3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VU YmxFbnRyeSAqcGFyZW50cnRlLAogCWNoaWxkcnRlID0gY29weU9iamVjdChwYXJlbnRydGUp OwogCSpjaGlsZHJ0ZV9wID0gY2hpbGRydGU7CiAJY2hpbGRydGUtPnJlbGlkID0gY2hpbGRP SUQ7Ci0JY2hpbGRydGUtPnJlbGtpbmQgPSBjaGlsZHJlbC0+cmRfcmVsLT5yZWxraW5kOwor CWNoaWxkcnRlLT5yZWxraW5kID0gY2hpbGRfcmVsa2luZDsKIAkvKiBBIHBhcnRpdGlvbmVk IGNoaWxkIHdpbGwgbmVlZCB0byBiZSBleHBhbmRlZCBmdXJ0aGVyLiAqLwogCWlmIChjaGls ZE9JRCAhPSBwYXJlbnRPSUQgJiYKIAkJY2hpbGRydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9Q QVJUSVRJT05FRF9UQUJMRSkKQEAgLTE4MjMsMTIgKzE3NTEsMTMgQEAgZXhwYW5kX3Npbmds ZV9pbmhlcml0YW5jZV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAq cGFyZW50cnRlLAogCQlhcHBpbmZvID0gbWFrZU5vZGUoQXBwZW5kUmVsSW5mbyk7CiAJCWFw cGluZm8tPnBhcmVudF9yZWxpZCA9IHBhcmVudFJUaW5kZXg7CiAJCWFwcGluZm8tPmNoaWxk X3JlbGlkID0gY2hpbGRSVGluZGV4OwotCQlhcHBpbmZvLT5wYXJlbnRfcmVsdHlwZSA9IHBh cmVudHJlbC0+cmRfcmVsLT5yZWx0eXBlOwotCQlhcHBpbmZvLT5jaGlsZF9yZWx0eXBlID0g Y2hpbGRyZWwtPnJkX3JlbC0+cmVsdHlwZTsKLQkJbWFrZV9pbmhfdHJhbnNsYXRpb25fbGlz dChwYXJlbnRyZWwsIGNoaWxkcmVsLCBjaGlsZFJUaW5kZXgsCisJCWFwcGluZm8tPnBhcmVu dF9yZWx0eXBlID0gcGFyZW50UmVsVHlwZTsKKwkJYXBwaW5mby0+Y2hpbGRfcmVsdHlwZSA9 IGNoaWxkX3JlbHR5cGU7CisJCW1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QocGFyZW50RGVz YywgY2hpbGREZXNjLAorCQkJCQkJCQkgIHBhcmVudHJ0ZSwgY2hpbGRydGUsIGNoaWxkUlRp bmRleCwKIAkJCQkJCQkJICAmYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKIAkJYXBwaW5m by0+cGFyZW50X3JlbG9pZCA9IHBhcmVudE9JRDsKLQkJKmFwcGluZm9zID0gbGFwcGVuZCgq YXBwaW5mb3MsIGFwcGluZm8pOworCQkqYXBwaW5mb19wID0gYXBwaW5mbzsKIAogCQkvKgog CQkgKiBUcmFuc2xhdGUgdGhlIGNvbHVtbiBwZXJtaXNzaW9ucyBiaXRtYXBzIHRvIHRoZSBj aGlsZCdzIGF0dG51bXMgKHdlCkBAIC0xODc5LDYgKzE4MDgsMTMgQEAgZXhwYW5kX3Npbmds ZV9pbmhlcml0YW5jZV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAq cGFyZW50cnRlLAogCiAJCXJvb3QtPnJvd01hcmtzID0gbGFwcGVuZChyb290LT5yb3dNYXJr cywgY2hpbGRyYyk7CiAJfQorCisJLyogQ2xvc2UgY2hpbGQgcmVsYXRpb25zLCBidXQga2Vl cCBsb2NrcyAqLworCWlmIChjaGlsZE9JRCAhPSBwYXJlbnRPSUQpCisJeworCQlBc3NlcnQo Y2hpbGRyZWwgIT0gTlVMTCk7CisJCWhlYXBfY2xvc2UoY2hpbGRyZWwsIGxvY2ttb2RlKTsK Kwl9CiB9CiAKIC8qCkBAIC0xODg5LDE0ICsxODI1LDEyIEBAIGV4cGFuZF9zaW5nbGVfaW5o ZXJpdGFuY2VfY2hpbGQoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVu dHJ0ZSwKICAqIEZvciBwYXJhbm9pYSdzIHNha2UsIHdlIG1hdGNoIHR5cGUvY29sbGF0aW9u IGFzIHdlbGwgYXMgYXR0cmlidXRlIG5hbWUuCiAgKi8KIHN0YXRpYyB2b2lkCi1tYWtlX2lu aF90cmFuc2xhdGlvbl9saXN0KFJlbGF0aW9uIG9sZHJlbGF0aW9uLCBSZWxhdGlvbiBuZXdy ZWxhdGlvbiwKLQkJCQkJCSAgSW5kZXggbmV3dmFybm8sCi0JCQkJCQkgIExpc3QgKip0cmFu c2xhdGVkX3ZhcnMpCittYWtlX2luaF90cmFuc2xhdGlvbl9saXN0KFR1cGxlRGVzYyBvbGRf dHVwZGVzYywgVHVwbGVEZXNjIG5ld190dXBkZXNjLAorCQkJCQkJICBSYW5nZVRibEVudHJ5 ICpvbGRydGUsIFJhbmdlVGJsRW50cnkgKm5ld3J0ZSwKKwkJCQkJCSAgSW5kZXggbmV3dmFy bm8sIExpc3QgKip0cmFuc2xhdGVkX3ZhcnMpCiB7CiAJTGlzdAkgICAqdmFycyA9IE5JTDsK LQlUdXBsZURlc2MJb2xkX3R1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKG9sZHJlbGF0aW9u KTsKLQlUdXBsZURlc2MJbmV3X3R1cGRlc2MgPSBSZWxhdGlvbkdldERlc2NyKG5ld3JlbGF0 aW9uKTsKLQlPaWQJCQluZXdfcmVsaWQgPSBSZWxhdGlvbkdldFJlbGlkKG5ld3JlbGF0aW9u KTsKKwlPaWQJCQluZXdfcmVsaWQgPSBuZXdydGUtPnJlbGlkOwogCWludAkJCW9sZG5hdHRz ID0gb2xkX3R1cGRlc2MtPm5hdHRzOwogCWludAkJCW5ld25hdHRzID0gbmV3X3R1cGRlc2Mt Pm5hdHRzOwogCWludAkJCW9sZF9hdHRubzsKQEAgLTE5MjYsNyArMTg2MCw3IEBAIG1ha2Vf aW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xkcmVsYXRpb24sIFJlbGF0aW9uIG5l d3JlbGF0aW9uLAogCQkgKiBXaGVuIHdlIGFyZSBnZW5lcmF0aW5nIHRoZSAidHJhbnNsYXRp b24gbGlzdCIgZm9yIHRoZSBwYXJlbnQgdGFibGUKIAkJICogb2YgYW4gaW5oZXJpdGFuY2Ug c2V0LCBubyBuZWVkIHRvIHNlYXJjaCBmb3IgbWF0Y2hlcy4KIAkJICovCi0JCWlmIChvbGRy ZWxhdGlvbiA9PSBuZXdyZWxhdGlvbikKKwkJaWYgKG9sZHJ0ZS0+cmVsaWQgPT0gbmV3cnRl LT5yZWxpZCkKIAkJewogCQkJdmFycyA9IGxhcHBlbmQodmFycywgbWFrZVZhcihuZXd2YXJu bywKIAkJCQkJCQkJCQkgKEF0dHJOdW1iZXIpIChvbGRfYXR0bm8gKyAxKSwKQEAgLTE5NTUs NyArMTg4OSw3IEBAIG1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xkcmVs YXRpb24sIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAogCQkJbmV3dHVwID0gU2VhcmNoU3lzQ2Fj aGVBdHROYW1lKG5ld19yZWxpZCwgYXR0bmFtZSk7CiAJCQlpZiAoIW5ld3R1cCkKIAkJCQll bG9nKEVSUk9SLCAiY291bGQgbm90IGZpbmQgaW5oZXJpdGVkIGF0dHJpYnV0ZSBcIiVzXCIg b2YgcmVsYXRpb24gXCIlc1wiIiwKLQkJCQkJIGF0dG5hbWUsIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKG5ld3JlbGF0aW9uKSk7CisJCQkJCSBhdHRuYW1lLCBnZXRfcmVsX25hbWUobmV3 cnRlLT5yZWxpZCkpOwogCQkJbmV3X2F0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VU U1RSVUNUKG5ld3R1cCkpLT5hdHRudW0gLSAxOwogCQkJUmVsZWFzZVN5c0NhY2hlKG5ld3R1 cCk7CiAKQEAgLTE5NjUsMTAgKzE4OTksMTAgQEAgbWFrZV9pbmhfdHJhbnNsYXRpb25fbGlz dChSZWxhdGlvbiBvbGRyZWxhdGlvbiwgUmVsYXRpb24gbmV3cmVsYXRpb24sCiAJCS8qIEZv dW5kIGl0LCBjaGVjayB0eXBlIGFuZCBjb2xsYXRpb24gbWF0Y2ggKi8KIAkJaWYgKGF0dHR5 cGlkICE9IGF0dC0+YXR0dHlwaWQgfHwgYXR0dHlwbW9kICE9IGF0dC0+YXR0dHlwbW9kKQog CQkJZWxvZyhFUlJPUiwgImF0dHJpYnV0ZSBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRv ZXMgbm90IG1hdGNoIHBhcmVudCdzIHR5cGUiLAotCQkJCSBhdHRuYW1lLCBSZWxhdGlvbkdl dFJlbGF0aW9uTmFtZShuZXdyZWxhdGlvbikpOworCQkJCSBhdHRuYW1lLCBnZXRfcmVsX25h bWUobmV3cnRlLT5yZWxpZCkpOwogCQlpZiAoYXR0Y29sbGF0aW9uICE9IGF0dC0+YXR0Y29s bGF0aW9uKQogCQkJZWxvZyhFUlJPUiwgImF0dHJpYnV0ZSBcIiVzXCIgb2YgcmVsYXRpb24g XCIlc1wiIGRvZXMgbm90IG1hdGNoIHBhcmVudCdzIGNvbGxhdGlvbiIsCi0JCQkJIGF0dG5h bWUsIFJlbGF0aW9uR2V0UmVsYXRpb25OYW1lKG5ld3JlbGF0aW9uKSk7CisJCQkJIGF0dG5h bWUsIGdldF9yZWxfbmFtZShuZXdydGUtPnJlbGlkKSk7CiAKIAkJdmFycyA9IGxhcHBlbmQo dmFycywgbWFrZVZhcihuZXd2YXJubywKIAkJCQkJCQkJCSAoQXR0ck51bWJlcikgKG5ld19h dHRubyArIDEpLApAQCAtMjEyMSw3ICsyMDU1LDcgQEAgYWRqdXN0X2FwcGVuZHJlbF9hdHRy c19tdXRhdG9yKE5vZGUgKm5vZGUsCiAJCQl9CiAJCX0KIAotCQlpZiAodmFyLT52YXJsZXZl bHN1cCA9PSAwICYmIGFwcGluZm8pCisJCWlmICh2YXItPnZhcmxldmVsc3VwID09IDAgJiYg YXBwaW5mbyAmJiBhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpCiAJCXsKIAkJCXZhci0+dmFy bm8gPSBhcHBpbmZvLT5jaGlsZF9yZWxpZDsKIAkJCXZhci0+dmFybm9vbGQgPSBhcHBpbmZv LT5jaGlsZF9yZWxpZDsKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGls L3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwppbmRl eCA4ZDY3ZjIxZjQyLi5mOTNjYzZiOTBkIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cGxhbmNhdC5jCkBAIC0xMDYsNyArMTA2LDcgQEAgc3RhdGljIHZvaWQgc2V0X2Jhc2VyZWxf cGFydGl0aW9uX2tleV9leHBycyhSZWxhdGlvbiByZWxhdGlvbiwKICAqLwogdm9pZAogZ2V0 X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElk LCBib29sIGluaHBhcmVudCwKLQkJCQkgIFJlbE9wdEluZm8gKnJlbCkKKwkJCQkgIEJpdG1h cHNldCAqdXBkYXRlZENvbHMsIFJlbE9wdEluZm8gKnJlbCkKIHsKIAlJbmRleAkJdmFybm8g PSByZWwtPnJlbGlkOwogCVJlbGF0aW9uCXJlbGF0aW9uOwpAQCAtNDQ5LDcgKzQ0OSwxNSBA QCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgT2lkIHJlbGF0aW9uT2Jq ZWN0SWQsIGJvb2wgaW5ocGFyZW50LAogCSAqIGluaGVyaXRhbmNlIHBhcmVudHMgbWF5IGJl IHBhcnRpdGlvbmVkLgogCSAqLwogCWlmIChpbmhwYXJlbnQgJiYgcmVsYXRpb24tPnJkX3Jl bC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQorCXsKIAkJc2V0X3Jl bGF0aW9uX3BhcnRpdGlvbl9pbmZvKHJvb3QsIHJlbCwgcmVsYXRpb24pOworCQlpZiAoIXJv b3QtPnBhcnRDb2xzVXBkYXRlZCkKKwkJCXJvb3QtPnBhcnRDb2xzVXBkYXRlZCA9CisJCQkJ aGFzX3BhcnRpdGlvbl9hdHRycyhyZWxhdGlvbiwgdXBkYXRlZENvbHMsIE5VTEwpOworCX0K KworCXJlbC0+dHVwZGVzYyA9IFJlbGF0aW9uR2V0RGVzY3IocmVsYXRpb24pOworCXJlbC0+ cmVsdHlwZSA9IFJlbGF0aW9uR2V0Rm9ybShyZWxhdGlvbiktPnJlbHR5cGU7CiAKIAloZWFw X2Nsb3NlKHJlbGF0aW9uLCBOb0xvY2spOwogCkBAIC0xODcxLDE4ICsxODc5LDE4IEBAIHNl dF9yZWxhdGlvbl9wYXJ0aXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5m byAqcmVsLAogCQkJCQkJCVJlbGF0aW9uIHJlbGF0aW9uKQogewogCVBhcnRpdGlvbkRlc2Mg cGFydGRlc2M7Ci0JUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAlBc3NlcnQocmVsYXRpb24t PnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsKIAogCXBh cnRkZXNjID0gUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKHJlbGF0aW9uKTsKLQlwYXJ0a2V5 ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocmVsYXRpb24pOwogCXJlbC0+cGFydF9zY2hl bWUgPSBmaW5kX3BhcnRpdGlvbl9zY2hlbWUocm9vdCwgcmVsYXRpb24pOwogCUFzc2VydChw YXJ0ZGVzYyAhPSBOVUxMICYmIHJlbC0+cGFydF9zY2hlbWUgIT0gTlVMTCk7Ci0JcmVsLT5i b3VuZGluZm8gPSBwYXJ0aXRpb25fYm91bmRzX2NvcHkocGFydGRlc2MtPmJvdW5kaW5mbywg cGFydGtleSk7CisJcmVsLT5ib3VuZGluZm8gPSBwYXJ0ZGVzYy0+Ym91bmRpbmZvOwogCXJl bC0+bnBhcnRzID0gcGFydGRlc2MtPm5wYXJ0czsKIAlzZXRfYmFzZXJlbF9wYXJ0aXRpb25f a2V5X2V4cHJzKHJlbGF0aW9uLCByZWwpOwogCXJlbC0+cGFydGl0aW9uX3F1YWwgPSBSZWxh dGlvbkdldFBhcnRpdGlvblF1YWwocmVsYXRpb24pOworCXJlbC0+cGFydF9vaWRzID0gKE9p ZCAqKSBwYWxsb2MocmVsLT5ucGFydHMgKiBzaXplb2YoT2lkKSk7CisJbWVtY3B5KHJlbC0+ cGFydF9vaWRzLCBwYXJ0ZGVzYy0+b2lkcywgcmVsLT5ucGFydHMgKiBzaXplb2YoT2lkKSk7 CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxu b2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKaW5kZXggYzY5 NzQwZWRhNi4uNDZlY2I1MjE2NiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5v ZGUuYwpAQCAtMTYsNiArMTYsNyBAQAogCiAjaW5jbHVkZSA8bGltaXRzLmg+CiAKKyNpbmNs dWRlICJjYXRhbG9nL3BnX2NsYXNzLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5j bHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5o IgpAQCAtMjcsNiArMjgsNyBAQAogI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8u aCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvdGxpc3QuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25p bmcvcGFydGJvdW5kcy5oIgorI2luY2x1ZGUgInN0b3JhZ2UvbG9ja2RlZnMuaCIKICNpbmNs dWRlICJ1dGlscy9oc2VhcmNoLmgiCiAKIApAQCAtMTM3LDYgKzEzOSw3IEBAIGJ1aWxkX3Np bXBsZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIGludCByZWxpZCwgUmVsT3B0SW5mbyAqcGFy ZW50KQogCiAJLyogUmVsIHNob3VsZCBub3QgZXhpc3QgYWxyZWFkeSAqLwogCUFzc2VydChy ZWxpZCA+IDAgJiYgcmVsaWQgPCByb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUpOworCiAJ aWYgKHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcmVsaWRdICE9IE5VTEwpCiAJCWVsb2coRVJS T1IsICJyZWwgJWQgYWxyZWFkeSBleGlzdHMiLCByZWxpZCk7CiAKQEAgLTIxOCw3ICsyMjEs OCBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJl bE9wdEluZm8gKnBhcmVudCkKIAl7CiAJCWNhc2UgUlRFX1JFTEFUSU9OOgogCQkJLyogVGFi bGUgLS0tIHJldHJpZXZlIHN0YXRpc3RpY3MgZnJvbSB0aGUgc3lzdGVtIGNhdGFsb2dzICov Ci0JCQlnZXRfcmVsYXRpb25faW5mbyhyb290LCBydGUtPnJlbGlkLCBydGUtPmluaCwgcmVs KTsKKwkJCWdldF9yZWxhdGlvbl9pbmZvKHJvb3QsIHJ0ZS0+cmVsaWQsIHJ0ZS0+aW5oLCBy dGUtPnVwZGF0ZWRDb2xzLAorCQkJCQkJCSAgcmVsKTsKIAkJCWJyZWFrOwogCQljYXNlIFJU RV9TVUJRVUVSWToKIAkJY2FzZSBSVEVfRlVOQ1RJT046CkBAIC0yNjgsNDEgKzI3MiwzMCBA QCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9w dEluZm8gKnBhcmVudCkKIAlpZiAocnRlLT5pbmgpCiAJewogCQlMaXN0Q2VsbCAgICpsOwot CQlpbnQJCQlucGFydHMgPSByZWwtPm5wYXJ0czsKLQkJaW50CQkJY250X3BhcnRzID0gMDsK IAotCQlpZiAobnBhcnRzID4gMCkKKwkJLyoKKwkJICogRm9yIHBhcnRpdGlvbmVkIHRhYmxl cywgd2UganVzdCBhbGxvY2F0ZSBzcGFjZSBmb3IgUmVsT3B0SW5mbydzLgorCQkgKiBwb2lu dGVycyBmb3IgYWxsIHBhcnRpdGlvbnMgYW5kIGNvcHkgdGhlIHBhcnRpdGlvbiBPSURzIGZy b20gdGhlCisJCSAqIHJlbGNhY2hlLiAgQWN0dWFsIFJlbE9wdEluZm8gaXMgYnVpbHQgZm9y IGEgcGFydGl0aW9uIG9ubHkgaWYgaXQgaXMKKwkJICogbm90IHBydW5lZC4KKwkJICovCisJ CWlmIChydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJewog CQkJcmVsLT5wYXJ0X3JlbHMgPSAoUmVsT3B0SW5mbyAqKikKLQkJCQlwYWxsb2Moc2l6ZW9m KFJlbE9wdEluZm8gKikgKiBucGFydHMpOworCQkJCXBhbGxvYzAoc2l6ZW9mKFJlbE9wdElu Zm8gKikgKiByZWwtPm5wYXJ0cyk7CisJCQlyZXR1cm4gcmVsOworCQl9CiAKIAkJZm9yZWFj aChsLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCiAJCXsKIAkJCUFwcGVuZFJlbEluZm8gKmFw cGluZm8gPSAoQXBwZW5kUmVsSW5mbyAqKSBsZmlyc3QobCk7Ci0JCQlSZWxPcHRJbmZvICpj aGlsZHJlbDsKIAogCQkJLyogYXBwZW5kX3JlbF9saXN0IGNvbnRhaW5zIGFsbCBhcHBlbmQg cmVsczsgaWdub3JlIG90aGVycyAqLwogCQkJaWYgKGFwcGluZm8tPnBhcmVudF9yZWxpZCAh PSByZWxpZCkKIAkJCQljb250aW51ZTsKIAotCQkJY2hpbGRyZWwgPSBidWlsZF9zaW1wbGVf cmVsKHJvb3QsIGFwcGluZm8tPmNoaWxkX3JlbGlkLAotCQkJCQkJCQkJCXJlbCk7Ci0KLQkJ CS8qIE5vdGhpbmcgbW9yZSB0byBkbyBmb3IgYW4gdW5wYXJ0aXRpb25lZCB0YWJsZS4gKi8K LQkJCWlmICghcmVsLT5wYXJ0X3NjaGVtZSkKLQkJCQljb250aW51ZTsKLQotCQkJLyoKLQkJ CSAqIFRoZSBvcmRlciBvZiBwYXJ0aXRpb24gT0lEcyBpbiBhcHBlbmRfcmVsX2xpc3QgaXMg dGhlIHNhbWUgYXMKLQkJCSAqIHRoZSBvcmRlciBpbiB0aGUgUGFydGl0aW9uRGVzYywgc28g dGhlIG9yZGVyIG9mIHBhcnRfcmVscyB3aWxsCi0JCQkgKiBhbHNvIG1hdGNoIHRoZSBQYXJ0 aXRpb25EZXNjLiAgU2VlIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5LgotCQkJICovCi0J CQlBc3NlcnQoY250X3BhcnRzIDwgbnBhcnRzKTsKLQkJCXJlbC0+cGFydF9yZWxzW2NudF9w YXJ0c10gPSBjaGlsZHJlbDsKLQkJCWNudF9wYXJ0cysrOworCQkJKHZvaWQpIGJ1aWxkX3Np bXBsZV9yZWwocm9vdCwgYXBwaW5mby0+Y2hpbGRfcmVsaWQsIHJlbCk7CiAJCX0KLQotCQkv KiBXZSBzaG91bGQgaGF2ZSBzZWVuIGFsbCB0aGUgY2hpbGQgcGFydGl0aW9ucy4gKi8KLQkJ QXNzZXJ0KGNudF9wYXJ0cyA9PSBucGFydHMpOwogCX0KIAogCXJldHVybiByZWw7CkBAIC0x NzY3LDQgKzE3NjAsMTM1IEBAIGJ1aWxkX2pvaW5yZWxfcGFydGl0aW9uX2luZm8oUmVsT3B0 SW5mbyAqam9pbnJlbCwgUmVsT3B0SW5mbyAqb3V0ZXJfcmVsLAogCQlqb2lucmVsLT5wYXJ0 ZXhwcnNbY250XSA9IHBhcnRleHByOwogCQlqb2lucmVsLT5udWxsYWJsZV9wYXJ0ZXhwcnNb Y250XSA9IG51bGxhYmxlX3BhcnRleHByOwogCX0KKworCS8qIFBhcnRpdGlvbnMgd2lsbCBi ZSBhZGRlZCBieSB0cnlfcGFydGl0aW9ud2lzZV9qb2luLiAqLworCWpvaW5yZWwtPmxpdmVf cGFydHMgPSBOVUxMOworfQorCisvKgorICogYnVpbGRfZHVtbXlfcGFydGl0aW9uX3JlbAor ICoJCUJ1aWxkIGEgUmVsT3B0SW5mbyBhbmQgQXBwZW5kUmVsSW5mbyBmb3IgYSBwcnVuZWQg cGFydGl0aW9uCisgKgorICogVGhpcyBkb2VzIG5vdCByZXN1bHQgaW4gb3BlbmluZyB0aGUg cmVsYXRpb24gb3IgYSByYW5nZSB0YWJsZSBlbnRyeSBiZWluZworICogY3JlYXRlZC4gIEFs c28sIHRoZSBSZWxPcHRJbmZvIHRodXMgY3JlYXRlZCBpcyBub3Qgc3RvcmVkIGFueXdoZXJl IGVsc2UKKyAqIGJlc2lkZSB0aGUgcGFyZW50J3MgcGFydF9yZWxzIGFycmF5LgorICoKKyAq IFRoZSBvbmx5IHJlYXNvbiB0aGlzIGV4aXN0cyBpcyBiZWNhdXNlIHBhcnRpdGlvbi13aXNl IGpvaW4sIGluIHNvbWUgY2FzZXMsCisgKiBuZWVkcyBhIFJlbE9wdEluZm8gdG8gcmVwcmVz ZW50IGFuIGVtcHR5IHJlbGF0aW9uIHRoYXQncyBvbiB0aGUgbnVsbGFibGUKKyAqIHNpZGUg b2YgYW4gb3V0ZXIgam9pbiwgc28gdGhhdCBhIFBhdGggcmVwcmVzZW50aW5nIHRoZSBvdXRl ciBqb2luIGNhbiBiZQorICogY3JlYXRlZC4KKyAqLworUmVsT3B0SW5mbyAqCitidWlsZF9k dW1teV9wYXJ0aXRpb25fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJl bnQsIGludCBwYXJ0aWR4KQoreworCVJlbE9wdEluZm8gKnJlbDsKKworCUFzc2VydChwYXJl bnQtPnBhcnRfcmVsc1twYXJ0aWR4XSA9PSBOVUxMKTsKKworCS8qIENyZWF0ZSBtaW5pbWFs bHkgdmFsaWQtbG9va2luZyBSZWxPcHRJbmZvIHdpdGggcGFyZW50J3MgcmVsaWQuICovCisJ cmVsID0gbWFrZU5vZGUoUmVsT3B0SW5mbyk7CisJcmVsLT5yZWxvcHRraW5kID0gUkVMT1BU X09USEVSX01FTUJFUl9SRUw7CisJcmVsLT5yZWxpZCA9IHBhcmVudC0+cmVsaWQ7CisJcmVs LT5yZWxpZHMgPSBibXNfY29weShwYXJlbnQtPnJlbGlkcyk7CisJaWYgKHBhcmVudC0+dG9w X3BhcmVudF9yZWxpZHMpCisJCXJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBwYXJlbnQtPnRv cF9wYXJlbnRfcmVsaWRzOworCWVsc2UKKwkJcmVsLT50b3BfcGFyZW50X3JlbGlkcyA9IGJt c19jb3B5KHBhcmVudC0+cmVsaWRzKTsKKwlyZWwtPnJlbHRhcmdldCA9IGNvcHlfcGF0aHRh cmdldChwYXJlbnQtPnJlbHRhcmdldCk7CisJcGFyZW50LT5wYXJ0X3JlbHNbcGFydGlkeF0g PSByZWw7CisJbWFya19kdW1teV9yZWwocmVsKTsKKworCS8qCisJICogTm93IHdlJ2xsIG5l ZWQgYSAobm9vcCkgQXBwZW5kUmVsSW5mbyBmb3IgcGFyZW50LCBiZWNhdXNlIHdlJ3JlIHNl dHRpbmcKKwkgKiB0aGUgZHVtbXkgcGFydGl0aW9uJ3MgcmVsaWQgdG8gYmUgc2FtZSBhcyB0 aGUgcGFyZW50J3MuCisJICovCisJaWYgKHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbcGFyZW50 LT5yZWxpZF0gPT0gTlVMTCkKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBtYWtl Tm9kZShBcHBlbmRSZWxJbmZvKTsKKworCQlhcHBpbmZvLT5wYXJlbnRfcmVsaWQgPSBwYXJl bnQtPnJlbGlkOworCQlhcHBpbmZvLT5jaGlsZF9yZWxpZCA9IHBhcmVudC0+cmVsaWQ7CisJ CWFwcGluZm8tPnBhcmVudF9yZWx0eXBlID0gcGFyZW50LT5yZWx0eXBlOworCQlhcHBpbmZv LT5jaGlsZF9yZWx0eXBlID0gcGFyZW50LT5yZWx0eXBlOworCQkvKiBsZWF2aW5nIHRyYW5z bGF0ZWRfdmFycyB0byBOSUwgdG8gbWVhbiBubyB0cmFuc2xhdGlvbiBuZWVkZWQgKi8KKwkJ YXBwaW5mby0+cGFyZW50X3JlbG9pZCA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbcGFyZW50 LT5yZWxpZF0tPnJlbGlkOworCQlyb290LT5hcHBlbmRfcmVsX2FycmF5W3BhcmVudC0+cmVs aWRdID0gYXBwaW5mbzsKKwl9CisKKwlyZXR1cm4gcmVsOworfQorCisvKgorICogYnVpbGRf cGFydGl0aW9uX3JlbAorICoJCVRoaXMgYWRkcyBhIHZhbGlkIHBhcnRpdGlvbiB0byB0aGUg cXVlcnkgYnkgYWRkaW5nIGl0IHRvIHRoZQorICoJCXJhbmdlIHRhYmxlIGFuZCBjcmVhdGlu ZyBwbGFubmVyIGRhdGEgc3RydWN0dXJlcyBmb3IgaXQKKyAqLworUmVsT3B0SW5mbyAqCiti dWlsZF9wYXJ0aXRpb25fcmVsKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpwYXJl bnQsIE9pZCBwYXJ0b2lkKQoreworCVJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSA9IHJvb3Qt PnNpbXBsZV9ydGVfYXJyYXlbcGFyZW50LT5yZWxpZF07CisJUmVsT3B0SW5mbyAqcmVzdWx0 OworCUluZGV4CQlwYXJ0UlRpbmRleCA9IDA7CisJUmFuZ2VUYmxFbnRyeSAqcGFydHJ0ZSA9 IE5VTEw7CisJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IE5VTEw7CisJUGxhblJvd01hcmsg KnJvb3RyYyA9IE5VTEw7CisKKwkvKiBMb2NhdGUgdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFi bGUgYW5kIGZldGNoIGl0cyBQbGFuUm93TWFyaywgaWYgYW55LiAqLworCWlmIChyb290LT5y b3dNYXJrcykKKwl7CisJCUluZGV4CQlyb290UlRpbmRleCA9IDA7CisKKwkJLyoKKwkJICog VGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgaXRzZWxmIG1pZ2h0IGJlIGEgY2hpbGQgb2Yg VU5JT04gQUxMCisJCSAqIHBhcmVudCwgc28gd2UgbXVzdCByZXNvcnQgdG8gZmluZGluZyB0 aGUgcm9vdCBwYXJlbnQgbGlrZSB0aGlzLgorCQkgKi8KKwkJcm9vdFJUaW5kZXggPSBwYXJl bnQtPnJlbGlkOworCQlpZiAocm9vdC0+YXBwZW5kX3JlbF9hcnJheVtyb290UlRpbmRleF0p CisJCXsKKwkJCUFwcGVuZFJlbEluZm8gKnRtcCA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlb cm9vdFJUaW5kZXhdOworCisJCQkvKgorCQkJICogS2VlcCBtb3ZpbmcgdXAgdW50aWwgd2Ug ZWFjaCB0aGUgcGFyZW50IHJlbCB0aGF0J3Mgbm90IGEKKwkJCSAqIHBhcnRpdGlvbmVkIHRh YmxlLiAgVGhlIG9uZSBiZWZvcmUgdGhhdCBvbmUgd291bGQgYmUgdGhlIHJvb3QKKwkJCSAq IHBhcmVudC4KKwkJCSAqLworCQkJd2hpbGUocm9vdC0+c2ltcGxlX3JlbF9hcnJheVtyb290 UlRpbmRleF0tPnBhcnRfc2NoZW1lKQorCQkJeworCQkJCXRtcCA9IHJvb3QtPmFwcGVuZF9y ZWxfYXJyYXlbdG1wLT5wYXJlbnRfcmVsaWRdOworCQkJCWlmICh0bXAgPT0gTlVMTCkKKwkJ CQkJYnJlYWs7CisJCQkJcm9vdFJUaW5kZXggPSB0bXAtPnBhcmVudF9yZWxpZDsKKwkJCX0K KwkJfQorCisJCXJvb3RyYyA9IGdldF9wbGFuX3Jvd21hcmsocm9vdC0+cm93TWFya3MsIHJv b3RSVGluZGV4KTsKKwl9CisKKwkvKgorCSAqIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeSBh bHJlYXkgbG9ja2VkIGFsbCBwYXJ0aXRpb25zLCBzbyBwYXNzCisJICogTm9Mb2NrIGZvciBs b2NrbW9kZS4KKwkgKi8KKwlhZGRfaW5oZXJpdGFuY2VfY2hpbGRfdG9fcXVlcnkocm9vdCwg cGFyZW50cnRlLCBwYXJlbnQtPnJlbGlkLAorCQkJCQkJCQkgICBwYXJlbnQtPnJlbHR5cGUs IHBhcmVudC0+dHVwZGVzYywKKwkJCQkJCQkJICAgcm9vdHJjLCBwYXJ0b2lkLCBOb0xvY2ss CisJCQkJCQkJCSAgICZhcHBpbmZvLCAmcGFydHJ0ZSwgJnBhcnRSVGluZGV4KTsKKworCS8q IFBhcnRpdGlvbiB0dXJuZWQgb3V0IHRvIGJlIGEgcGFydGl0aW9uZWQgdGFibGUgd2l0aCAw IHBhcnRpdGlvbnMuICovCisJaWYgKHBhcnRydGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7 CisKKwlBc3NlcnQoYXBwaW5mbyAhPSBOVUxMKTsKKwlyb290LT5hcHBlbmRfcmVsX2xpc3Qg PSBsYXBwZW5kKHJvb3QtPmFwcGVuZF9yZWxfbGlzdCwgYXBwaW5mbyk7CisJcm9vdC0+c2lt cGxlX3J0ZV9hcnJheVtwYXJ0UlRpbmRleF0gPSBwYXJ0cnRlOworCXJvb3QtPmFwcGVuZF9y ZWxfYXJyYXlbcGFydFJUaW5kZXhdID0gYXBwaW5mbzsKKworCS8qIEJ1aWxkIHRoZSBSZWxP cHRJbmZvLiAqLworCXJlc3VsdCA9IGJ1aWxkX3NpbXBsZV9yZWwocm9vdCwgcGFydFJUaW5k ZXgsIHBhcmVudCk7CisKKwkvKiBTZXQgdGhlIGluZm9ybWF0aW9uIGNyZWF0ZWQgYnkgY3Jl YXRlX2xhdGVyYWxfam9pbl9pbmZvKCkuICovCisJcmVzdWx0LT5kaXJlY3RfbGF0ZXJhbF9y ZWxpZHMgPSBwYXJlbnQtPmRpcmVjdF9sYXRlcmFsX3JlbGlkczsKKwlyZXN1bHQtPmxhdGVy YWxfcmVsaWRzID0gcGFyZW50LT5sYXRlcmFsX3JlbGlkczsKKwlyZXN1bHQtPmxhdGVyYWxf cmVmZXJlbmNlcnMgPSBwYXJlbnQtPmxhdGVyYWxfcmVmZXJlbmNlcnM7CisKKwlyZXR1cm4g cmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRw cnVuZS5jIGIvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCmluZGV4IGI1 YzFjN2Q0ZGQuLmIyYjc2ZjVhZjMgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL3BhcnRpdGlv bmluZy9wYXJ0cHJ1bmUuYworKysgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBy dW5lLmMKQEAgLTQ1LDcgKzQ1LDkgQEAKICNpbmNsdWRlICJub2Rlcy9tYWtlZnVuY3MuaCIK ICNpbmNsdWRlICJub2Rlcy9ub2RlRnVuY3MuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xh dXNlcy5oIgorI2luY2x1ZGUgIm9wdGltaXplci9jb3N0LmgiCiAjaW5jbHVkZSAib3B0aW1p emVyL3BhdGhub2RlLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCiAjaW5j bHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcHJlZHRl c3QuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcHJlcC5oIgpAQCAtNDM3LDI2ICs0MzksMjYg QEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3QsIFJl bE9wdEluZm8gKnBhcmVudHJlbCwKIAkJICogaXMsIG5vdCBwcnVuZWQgYWxyZWFkeSkuCiAJ CSAqLwogCQlzdWJwbGFuX21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihp bnQpKTsKKwkJbWVtc2V0KHN1YnBsYW5fbWFwLCAtMSwgbnBhcnRzICogc2l6ZW9mKGludCkp OwogCQlzdWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5wYXJ0cyAqIHNpemVvZihpbnQp KTsKLQkJcHJlc2VudF9wYXJ0cyA9IE5VTEw7CisJCW1lbXNldChzdWJwYXJ0X21hcCwgLTEs IG5wYXJ0cyAqIHNpemVvZihpbnQpKTsKKwkJQXNzZXJ0KElTX1NJTVBMRV9SRUwoc3VicGFy dCkpOworCQlwcmVzZW50X3BhcnRzID0gYm1zX2NvcHkoc3VicGFydC0+bGl2ZV9wYXJ0cyk7 CiAKLQkJZm9yIChpID0gMDsgaSA8IG5wYXJ0czsgaSsrKQorCQlpID0gLTE7CisJCXdoaWxl ICgoaSA9IGJtc19uZXh0X21lbWJlcihwcmVzZW50X3BhcnRzLCBpKSkgPj0gMCkKIAkJewog CQkJUmVsT3B0SW5mbyAqcGFydHJlbCA9IHN1YnBhcnQtPnBhcnRfcmVsc1tpXTsKLQkJCWlu dAkJCXN1YnBsYW5pZHggPSByZWxpZF9zdWJwbGFuX21hcFtwYXJ0cmVsLT5yZWxpZF0gLSAx OwotCQkJaW50CQkJc3VicGFydGlkeCA9IHJlbGlkX3N1YnBhcnRfbWFwW3BhcnRyZWwtPnJl bGlkXSAtIDE7CisJCQlpbnQJCQlzdWJwbGFuaWR4OworCQkJaW50CQkJc3VicGFydGlkeDsK IAorCQkJc3VicGxhbmlkeCA9IHJlbGlkX3N1YnBsYW5fbWFwW3BhcnRyZWwtPnJlbGlkXSAt IDE7CisJCQlzdWJwYXJ0aWR4ID0gcmVsaWRfc3VicGFydF9tYXBbcGFydHJlbC0+cmVsaWRd IC0gMTsKIAkJCXN1YnBsYW5fbWFwW2ldID0gc3VicGxhbmlkeDsKIAkJCXN1YnBhcnRfbWFw W2ldID0gc3VicGFydGlkeDsKKwkJCS8qIFJlY29yZCBmaW5kaW5nIHRoaXMgc3VicGxhbiAg Ki8KIAkJCWlmIChzdWJwbGFuaWR4ID49IDApCi0JCQl7Ci0JCQkJcHJlc2VudF9wYXJ0cyA9 IGJtc19hZGRfbWVtYmVyKHByZXNlbnRfcGFydHMsIGkpOwotCi0JCQkJLyogUmVjb3JkIGZp bmRpbmcgdGhpcyBzdWJwbGFuICAqLwogCQkJCXN1YnBsYW5zZm91bmQgPSBibXNfYWRkX21l bWJlcihzdWJwbGFuc2ZvdW5kLCBzdWJwbGFuaWR4KTsKLQkJCX0KLQkJCWVsc2UgaWYgKHN1 YnBhcnRpZHggPj0gMCkKLQkJCQlwcmVzZW50X3BhcnRzID0gYm1zX2FkZF9tZW1iZXIocHJl c2VudF9wYXJ0cywgaSk7CiAJCX0KIAogCQlydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5 W3N1YnBhcnQtPnJlbGlkXTsKQEAgLTU0OCw2MSArNTUwLDY4IEBAIGdlbl9wYXJ0cHJ1bmVf c3RlcHMoUmVsT3B0SW5mbyAqcmVsLCBMaXN0ICpjbGF1c2VzLCBib29sICpjb250cmFkaWN0 b3J5KQogICoKICAqIENhbGxlcnMgbXVzdCBlbnN1cmUgdGhhdCAncmVsJyBpcyBhIHBhcnRp dGlvbmVkIHRhYmxlLgogICovCi1SZWxpZHMKLXBydW5lX2FwcGVuZF9yZWxfcGFydGl0aW9u cyhSZWxPcHRJbmZvICpyZWwpCit2b2lkCitwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMo UGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCkKIHsKLQlSZWxpZHMJCXJlc3Vs dDsKIAlMaXN0CSAgICpjbGF1c2VzID0gcmVsLT5iYXNlcmVzdHJpY3RpbmZvOwogCUxpc3QJ ICAgKnBydW5pbmdfc3RlcHM7Ci0JYm9vbAkJY29udHJhZGljdG9yeTsKKwlib29sCQljb250 cmFkaWN0b3J5LAorCQkJCXNjYW5fYWxsX3BhcnRzID0gZmFsc2U7CiAJUGFydGl0aW9uUHJ1 bmVDb250ZXh0IGNvbnRleHQ7Ci0JQml0bWFwc2V0ICAqcGFydGluZGV4ZXM7Ci0JaW50CQkJ aTsKKwlCaXRtYXBzZXQgICpwYXJ0aW5kZXhlcyA9IE5VTEw7CiAKLQlBc3NlcnQoY2xhdXNl cyAhPSBOSUwpOwogCUFzc2VydChyZWwtPnBhcnRfc2NoZW1lICE9IE5VTEwpOwogCiAJLyog SWYgdGhlcmUgYXJlIG5vIHBhcnRpdGlvbnMsIHJldHVybiB0aGUgZW1wdHkgc2V0ICovCiAJ aWYgKHJlbC0+bnBhcnRzID09IDApCi0JCXJldHVybiBOVUxMOworCQlyZXR1cm47CiAKLQkv KgotCSAqIFByb2Nlc3MgY2xhdXNlcy4gIElmIHRoZSBjbGF1c2VzIGFyZSBmb3VuZCB0byBi ZSBjb250cmFkaWN0b3J5LCB3ZSBjYW4KLQkgKiByZXR1cm4gdGhlIGVtcHR5IHNldC4KLQkg Ki8KLQlwcnVuaW5nX3N0ZXBzID0gZ2VuX3BhcnRwcnVuZV9zdGVwcyhyZWwsIGNsYXVzZXMs ICZjb250cmFkaWN0b3J5KTsKLQlpZiAoY29udHJhZGljdG9yeSkKLQkJcmV0dXJuIE5VTEw7 Ci0KLQkvKiBTZXQgdXAgUGFydGl0aW9uUHJ1bmVDb250ZXh0ICovCi0JY29udGV4dC5zdHJh dGVneSA9IHJlbC0+cGFydF9zY2hlbWUtPnN0cmF0ZWd5OwotCWNvbnRleHQucGFydG5hdHRz ID0gcmVsLT5wYXJ0X3NjaGVtZS0+cGFydG5hdHRzOwotCWNvbnRleHQubnBhcnRzID0gcmVs LT5ucGFydHM7Ci0JY29udGV4dC5ib3VuZGluZm8gPSByZWwtPmJvdW5kaW5mbzsKLQljb250 ZXh0LnBhcnRjb2xsYXRpb24gPSByZWwtPnBhcnRfc2NoZW1lLT5wYXJ0Y29sbGF0aW9uOwot CWNvbnRleHQucGFydHN1cGZ1bmMgPSByZWwtPnBhcnRfc2NoZW1lLT5wYXJ0c3VwZnVuYzsK LQljb250ZXh0LnN0ZXBjbXBmdW5jcyA9IChGbWdySW5mbyAqKSBwYWxsb2MwKHNpemVvZihG bWdySW5mbykgKgorCWlmIChlbmFibGVfcGFydGl0aW9uX3BydW5pbmcgJiYgY2xhdXNlcyAh PSBOSUwpCisJeworCQkvKgorCQkgKiBQcm9jZXNzIGNsYXVzZXMuICBJZiB0aGUgY2xhdXNl cyBhcmUgZm91bmQgdG8gYmUgY29udHJhZGljdG9yeSwgd2UKKwkJICogY2FuIHJldHVybiB0 aGUgZW1wdHkgc2V0LgorCQkgKi8KKwkJcHJ1bmluZ19zdGVwcyA9IGdlbl9wYXJ0cHJ1bmVf c3RlcHMocmVsLCBjbGF1c2VzLCAmY29udHJhZGljdG9yeSk7CisJCWlmICghY29udHJhZGlj dG9yeSkKKwkJeworCQkJY29udGV4dC5zdHJhdGVneSA9IHJlbC0+cGFydF9zY2hlbWUtPnN0 cmF0ZWd5OworCQkJY29udGV4dC5wYXJ0bmF0dHMgPSByZWwtPnBhcnRfc2NoZW1lLT5wYXJ0 bmF0dHM7CisJCQljb250ZXh0Lm5wYXJ0cyA9IHJlbC0+bnBhcnRzOworCQkJY29udGV4dC5i b3VuZGluZm8gPSByZWwtPmJvdW5kaW5mbzsKKwkJCWNvbnRleHQucGFydGNvbGxhdGlvbiA9 IHJlbC0+cGFydF9zY2hlbWUtPnBhcnRjb2xsYXRpb247CisJCQljb250ZXh0LnBhcnRzdXBm dW5jID0gcmVsLT5wYXJ0X3NjaGVtZS0+cGFydHN1cGZ1bmM7CisJCQljb250ZXh0LnN0ZXBj bXBmdW5jcyA9IChGbWdySW5mbyAqKQorCQkJCQkJCQkJCXBhbGxvYzAoc2l6ZW9mKEZtZ3JJ bmZvKSAqCiAJCQkJCQkJCQkJCQljb250ZXh0LnBhcnRuYXR0cyAqCiAJCQkJCQkJCQkJCQls aXN0X2xlbmd0aChwcnVuaW5nX3N0ZXBzKSk7Ci0JY29udGV4dC5wcGNjb250ZXh0ID0gQ3Vy cmVudE1lbW9yeUNvbnRleHQ7CisJCQljb250ZXh0LnBwY2NvbnRleHQgPSBDdXJyZW50TWVt b3J5Q29udGV4dDsKIAotCS8qIFRoZXNlIGFyZSBub3QgdmFsaWQgd2hlbiBiZWluZyBjYWxs ZWQgZnJvbSB0aGUgcGxhbm5lciAqLwotCWNvbnRleHQucGFydHJlbCA9IE5VTEw7Ci0JY29u dGV4dC5wbGFuc3RhdGUgPSBOVUxMOwotCWNvbnRleHQuZXhwcnN0YXRlcyA9IE5VTEw7Ci0J Y29udGV4dC5leHByaGFzZXhlY3BhcmFtID0gTlVMTDsKLQljb250ZXh0LmV2YWxleGVjcGFy YW1zID0gZmFsc2U7CisJCQkvKiBUaGVzZSBhcmUgbm90IHZhbGlkIHdoZW4gYmVpbmcgY2Fs bGVkIGZyb20gdGhlIHBsYW5uZXIgKi8KKwkJCWNvbnRleHQucGFydHJlbCA9IE5VTEw7CisJ CQljb250ZXh0LnBsYW5zdGF0ZSA9IE5VTEw7CisJCQljb250ZXh0LmV4cHJzdGF0ZXMgPSBO VUxMOworCQkJY29udGV4dC5leHByaGFzZXhlY3BhcmFtID0gTlVMTDsKKwkJCWNvbnRleHQu ZXZhbGV4ZWNwYXJhbXMgPSBmYWxzZTsKIAotCS8qIEFjdHVhbCBwcnVuaW5nIGhhcHBlbnMg aGVyZS4gKi8KLQlwYXJ0aW5kZXhlcyA9IGdldF9tYXRjaGluZ19wYXJ0aXRpb25zKCZjb250 ZXh0LCBwcnVuaW5nX3N0ZXBzKTsKKwkJCS8qIEFjdHVhbCBwcnVuaW5nIGhhcHBlbnMgaGVy ZS4gKi8KKwkJCXBhcnRpbmRleGVzID0gZ2V0X21hdGNoaW5nX3BhcnRpdGlvbnMoJmNvbnRl eHQsIHBydW5pbmdfc3RlcHMpOwogCi0JLyogQWRkIHNlbGVjdGVkIHBhcnRpdGlvbnMnIFJU IGluZGV4ZXMgdG8gcmVzdWx0LiAqLwotCWkgPSAtMTsKLQlyZXN1bHQgPSBOVUxMOwotCXdo aWxlICgoaSA9IGJtc19uZXh0X21lbWJlcihwYXJ0aW5kZXhlcywgaSkpID49IDApCi0JCXJl c3VsdCA9IGJtc19hZGRfbWVtYmVyKHJlc3VsdCwgcmVsLT5wYXJ0X3JlbHNbaV0tPnJlbGlk KTsKKwkJCS8qIE5vIG5lZWQgdG8gYWRkIHBhcnRpdGlvbnMgaWYgYWxsIHdlcmUgcHJ1bmVk LiAqLworCQkJaWYgKGJtc19pc19lbXB0eShwYXJ0aW5kZXhlcykpCisJCQkJcmV0dXJuOwor CQl9CisJCWVsc2UKKwkJCXNjYW5fYWxsX3BhcnRzID0gdHJ1ZTsKKwl9CisJZWxzZQorCQlz Y2FuX2FsbF9wYXJ0cyA9IHRydWU7CiAKLQlyZXR1cm4gcmVzdWx0OworCS8qCisJICogQnVp bGQgc2VsZWN0ZWQgcGFydGl0aW9ucycgcmFuZ2UgdGFibGUgZW50cmllcywgUmVsT3B0SW5m b3MsIGFuZAorCSAqIEFwcGVuZFJlbEluZm9zLgorCSAqLworCWFkZF9yZWxfcGFydGl0aW9u c190b19xdWVyeShyb290LCByZWwsIHNjYW5fYWxsX3BhcnRzLCBwYXJ0aW5kZXhlcyk7CiB9 CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oIGIvc3Jj L2luY2x1ZGUvbm9kZXMvcmVsYXRpb24uaAppbmRleCA0MWNhZjg3M2ZiLi4wMmM1YmRjNzNm IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9yZWxhdGlvbi5oCisrKyBiL3NyYy9p bmNsdWRlL25vZGVzL3JlbGF0aW9uLmgKQEAgLTE1LDYgKzE1LDcgQEAKICNkZWZpbmUgUkVM QVRJT05fSAogCiAjaW5jbHVkZSAiYWNjZXNzL3NkaXIuaCIKKyNpbmNsdWRlICJhY2Nlc3Mv dHVwZGVzYy5oIgogI2luY2x1ZGUgImZtZ3IuaCIKICNpbmNsdWRlICJsaWIvc3RyaW5naW5m by5oIgogI2luY2x1ZGUgIm5vZGVzL3BhcmFtcy5oIgpAQCAtNjk1LDExICs2OTYsMTUgQEAg dHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWludAkJCW5wYXJ0czsJCQkvKiBudW1iZXIg b2YgcGFydGl0aW9ucyAqLwogCXN0cnVjdCBQYXJ0aXRpb25Cb3VuZEluZm9EYXRhICpib3Vu ZGluZm87CS8qIFBhcnRpdGlvbiBib3VuZHMgKi8KIAlMaXN0CSAgICpwYXJ0aXRpb25fcXVh bDsgLyogcGFydGl0aW9uIGNvbnN0cmFpbnQgKi8KKwlPaWQJCSAgICpwYXJ0X29pZHM7CQkv KiBwYXJ0aXRpb24gT0lEcyAqLwogCXN0cnVjdCBSZWxPcHRJbmZvICoqcGFydF9yZWxzOwkv KiBBcnJheSBvZiBSZWxPcHRJbmZvcyBvZiBwYXJ0aXRpb25zLAogCQkJCQkJCQkJICogc3Rv cmVkIGluIHRoZSBzYW1lIG9yZGVyIG9mIGJvdW5kcyAqLworCUJpdG1hcHNldCAgKmxpdmVf cGFydHM7CQkvKiB1bnBydW5lZCBwYXJ0czsgTlVMTCBpZiBhbGwgYXJlIGxpdmUgKi8KIAlM aXN0CSAgKipwYXJ0ZXhwcnM7CQkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHBy ZXNzaW9ucy4gKi8KIAlMaXN0CSAgKipudWxsYWJsZV9wYXJ0ZXhwcnM7IC8qIE51bGxhYmxl IHBhcnRpdGlvbiBrZXkgZXhwcmVzc2lvbnMuICovCiAJTGlzdAkgICAqcGFydGl0aW9uZWRf Y2hpbGRfcmVsczsgLyogTGlzdCBvZiBSVCBpbmRleGVzLiAqLworCVR1cGxlRGVzYwl0dXBk ZXNjOworCU9pZAkJCXJlbHR5cGU7CiB9IFJlbE9wdEluZm87CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGF0aG5vZGUuaCBiL3NyYy9pbmNsdWRlL29wdGlt aXplci9wYXRobm9kZS5oCmluZGV4IDdjNWZmMjI2NTAuLjRmNTY3NzY1YTQgMTAwNjQ0Ci0t LSBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oCisrKyBiL3NyYy9pbmNsdWRl L29wdGltaXplci9wYXRobm9kZS5oCkBAIC0yOTcsNSArMjk3LDExIEBAIGV4dGVybiBSZWxP cHRJbmZvICpidWlsZF9jaGlsZF9qb2luX3JlbChQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJ IFJlbE9wdEluZm8gKm91dGVyX3JlbCwgUmVsT3B0SW5mbyAqaW5uZXJfcmVsLAogCQkJCQkg UmVsT3B0SW5mbyAqcGFyZW50X2pvaW5yZWwsIExpc3QgKnJlc3RyaWN0bGlzdCwKIAkJCQkJ IFNwZWNpYWxKb2luSW5mbyAqc2ppbmZvLCBKb2luVHlwZSBqb2ludHlwZSk7CitleHRlcm4g UmVsT3B0SW5mbyAqYnVpbGRfZHVtbXlfcGFydGl0aW9uX3JlbChQbGFubmVySW5mbyAqcm9v dCwKKwkJCQkJCQkJCVJlbE9wdEluZm8gKnBhcmVudCwKKwkJCQkJCQkJCWludCBwYXJ0aWR4 KTsKK2V4dGVybiBSZWxPcHRJbmZvICpidWlsZF9wYXJ0aXRpb25fcmVsKFBsYW5uZXJJbmZv ICpyb290LAorCQkJCQkJCQkJICAgUmVsT3B0SW5mbyAqcGFyZW50LAorCQkJCQkJCQkJICAg T2lkIHBhcnRvaWQpOwogCiAjZW5kaWYJCQkJCQkJLyogUEFUSE5PREVfSCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9wbGFuY2F0LmgKaW5kZXggN2Q1M2NiYmI4Ny4uZWRhZjJhM2I0ZiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaAorKysgYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGxhbmNhdC5oCkBAIC0yNiw3ICsyNiw3IEBAIGV4dGVybiBQR0RMTElN UE9SVCBnZXRfcmVsYXRpb25faW5mb19ob29rX3R5cGUgZ2V0X3JlbGF0aW9uX2luZm9faG9v azsKIAogCiBleHRlcm4gdm9pZCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9v dCwgT2lkIHJlbGF0aW9uT2JqZWN0SWQsCi0JCQkJICBib29sIGluaHBhcmVudCwgUmVsT3B0 SW5mbyAqcmVsKTsKKwkJCQkgIGJvb2wgaW5ocGFyZW50LCBCaXRtYXBzZXQgKnVwZGF0ZWRD b2xzLCBSZWxPcHRJbmZvICpyZWwpOwogCiBleHRlcm4gTGlzdCAqaW5mZXJfYXJiaXRlcl9p bmRleGVzKFBsYW5uZXJJbmZvICpyb290KTsKIApkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUv b3B0aW1pemVyL3BsYW5tYWluLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxhbm1haW4u aAppbmRleCBjOGFiMDI4MGQyLi4xOTE2YTMzNDY3IDEwMDY0NAotLS0gYS9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvcGxhbm1haW4uaAorKysgYi9zcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxh bm1haW4uaApAQCAtNzMsNiArNzMsOSBAQCBleHRlcm4gaW50CWZyb21fY29sbGFwc2VfbGlt aXQ7CiBleHRlcm4gaW50CWpvaW5fY29sbGFwc2VfbGltaXQ7CiAKIGV4dGVybiB2b2lkIGFk ZF9iYXNlX3JlbHNfdG9fcXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0bm9kZSk7 CitleHRlcm4gdm9pZCBhZGRfcmVsX3BhcnRpdGlvbnNfdG9fcXVlcnkoUGxhbm5lckluZm8g KnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKKwkJCQkJCQlib29sIHNjYW5fYWxsX3BhcnRzLAor CQkJCQkJCUJpdG1hcHNldCAqcGFydGluZGV4ZXMpOwogZXh0ZXJuIHZvaWQgYnVpbGRfYmFz ZV9yZWxfdGxpc3RzKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpmaW5hbF90bGlzdCk7CiBl eHRlcm4gdm9pZCBhZGRfdmFyc190b190YXJnZXRsaXN0KFBsYW5uZXJJbmZvICpyb290LCBM aXN0ICp2YXJzLAogCQkJCQkgICBSZWxpZHMgd2hlcmVfbmVlZGVkLCBib29sIGNyZWF0ZV9u ZXdfcGgpOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaCBiL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKaW5kZXggMzg2MDg3NzBhMi4uY2E2NmY3NTU0 NCAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3ByZXAuaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcHJlcC5oCkBAIC00OSw2ICs0OSwxNiBAQCBleHRlcm4gUmVs T3B0SW5mbyAqcGxhbl9zZXRfb3BlcmF0aW9ucyhQbGFubmVySW5mbyAqcm9vdCk7CiAKIGV4 dGVybiB2b2lkIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzKFBsYW5uZXJJbmZvICpyb290KTsK IAorZXh0ZXJuIHZvaWQgYWRkX2luaGVyaXRhbmNlX2NoaWxkX3RvX3F1ZXJ5KFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCQlSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCisJCQkJCQkJ CUluZGV4IHBhcmVudFJUaW5kZXgsIE9pZCBwYXJlbnRSZWxUeXBlLAorCQkJCQkJCQlUdXBs ZURlc2MgcGFyZW50RGVzYywKKwkJCQkJCQkJUGxhblJvd01hcmsgKnRvcF9wYXJlbnRyYywK KwkJCQkJCQkJT2lkIGNoaWxkT0lELCBpbnQgbG9ja21vZGUsCisJCQkJCQkJCUFwcGVuZFJl bEluZm8gKiphcHBpbmZvX3AsCisJCQkJCQkJCVJhbmdlVGJsRW50cnkgKipjaGlsZHJ0ZV9w LAorCQkJCQkJCQlJbmRleCAqY2hpbGRSVGluZGV4X3ApOworCiBleHRlcm4gTm9kZSAqYWRq dXN0X2FwcGVuZHJlbF9hdHRycyhQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKIAkJ CQkJICAgaW50IG5hcHBpbmZvcywgQXBwZW5kUmVsSW5mbyAqKmFwcGluZm9zKTsKIApkaWZm IC0tZ2l0IGEvc3JjL2luY2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oIGIvc3JjL2lu Y2x1ZGUvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5oCmluZGV4IGI5NWMzNDZiYWIuLjU1YTMy NDU4M2IgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUu aAorKysgYi9zcmMvaW5jbHVkZS9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmgKQEAgLTc5LDcg Kzc5LDcgQEAgZXh0ZXJuIFBhcnRpdGlvblBydW5lSW5mbyAqbWFrZV9wYXJ0aXRpb25fcHJ1 bmVpbmZvKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJIExpc3QgKnN1YnBhdGhzLAogCQkJ CQkJIExpc3QgKnBhcnRpdGlvbmVkX3JlbHMsCiAJCQkJCQkgTGlzdCAqcHJ1bmVxdWFsKTsK LWV4dGVybiBSZWxpZHMgcHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdEluZm8g KnJlbCk7CitleHRlcm4gdm9pZCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUGxhbm5l ckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCk7CiBleHRlcm4gQml0bWFwc2V0ICpnZXRf bWF0Y2hpbmdfcGFydGl0aW9ucyhQYXJ0aXRpb25QcnVuZUNvbnRleHQgKmNvbnRleHQsCiAJ CQkJCQlMaXN0ICpwcnVuaW5nX3N0ZXBzKTsKIApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVn cmVzcy9leHBlY3RlZC9qb2luLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvam9p bi5vdXQKaW5kZXggZGM2MjYyYmU0My4uNWY5MzE1OTFhNiAxMDA2NDQKLS0tIGEvc3JjL3Rl c3QvcmVncmVzcy9leHBlY3RlZC9qb2luLm91dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4 cGVjdGVkL2pvaW4ub3V0CkBAIC01NTMzLDI5ICs1NTMzLDI5IEBAIHNlbGVjdCB0MS5iLCBz cy5waHYgZnJvbSBqb2luX3V0MSB0MSBsZWZ0IGpvaW4gbGF0ZXJhbAogICAgICAgICAgICAg ICAoc2VsZWN0IHQyLmEgYXMgdDJhLCB0My5hIHQzYSwgbGVhc3QodDEuYSwgdDIuYSwgdDMu YSkgcGh2CiAJCQkJCSAgZnJvbSBqb2luX3B0MSB0MiBqb2luIGpvaW5fdXQxIHQzIG9uIHQy LmEgPSB0My5iKSBzcwogICAgICAgICAgICAgICBvbiB0MS5hID0gc3MudDJhIG9yZGVyIGJ5 IHQxLmE7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgUVVFUlkgUExBTiAgICAgICAg ICAgICAgICAgICAgICAgICAgICAKLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKy0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tCiAgU29ydAotICAgT3V0cHV0OiB0MS5iLCAoTEVBU1QodDEuYSwgdDIu YSwgdDMuYSkpLCB0MS5hCisgICBPdXRwdXQ6IHQxLmIsIChMRUFTVCh0MS5hLCB0Ml8xLmEs IHQzLmEpKSwgdDEuYQogICAgU29ydCBLZXk6IHQxLmEKICAgIC0+ICBOZXN0ZWQgTG9vcCBM ZWZ0IEpvaW4KLSAgICAgICAgIE91dHB1dDogdDEuYiwgKExFQVNUKHQxLmEsIHQyLmEsIHQz LmEpKSwgdDEuYQorICAgICAgICAgT3V0cHV0OiB0MS5iLCAoTEVBU1QodDEuYSwgdDJfMS5h LCB0My5hKSksIHQxLmEKICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuam9pbl91 dDEgdDEKICAgICAgICAgICAgICAgIE91dHB1dDogdDEuYSwgdDEuYiwgdDEuYwogICAgICAg ICAgLT4gIEhhc2ggSm9pbgotICAgICAgICAgICAgICAgT3V0cHV0OiB0Mi5hLCBMRUFTVCh0 MS5hLCB0Mi5hLCB0My5hKQotICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYiA9IHQy LmEpCisgICAgICAgICAgICAgICBPdXRwdXQ6IHQyXzEuYSwgTEVBU1QodDEuYSwgdDJfMS5h LCB0My5hKQorICAgICAgICAgICAgICAgSGFzaCBDb25kOiAodDMuYiA9IHQyXzEuYSkKICAg ICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuam9pbl91dDEgdDMKICAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogdDMuYSwgdDMuYiwgdDMuYwogICAgICAgICAgICAg ICAgLT4gIEhhc2gKLSAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDIuYQorICAgICAg ICAgICAgICAgICAgICAgT3V0cHV0OiB0Ml8xLmEKICAgICAgICAgICAgICAgICAgICAgIC0+ ICBBcHBlbmQKLSAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBw dWJsaWMuam9pbl9wdDFwMXAxIHQyCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IHQyLmEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRl cjogKHQxLmEgPSB0Mi5hKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIFNlcSBT Y2FuIG9uIHB1YmxpYy5qb2luX3B0MXAyIHQyXzEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMuam9pbl9wdDFwMXAxIHQyXzEKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogdDJfMS5hCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBGaWx0ZXI6ICh0MS5hID0gdDJfMS5hKQorICAgICAgICAg ICAgICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5qb2luX3B0MXAyIHQy CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IHQyLmEKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbHRlcjogKHQxLmEgPSB0Mi5hKQogKDIx IHJvd3MpCiAKIHNlbGVjdCB0MS5iLCBzcy5waHYgZnJvbSBqb2luX3V0MSB0MSBsZWZ0IGpv aW4gbGF0ZXJhbApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fYWdncmVnYXRlLm91dCBiL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2FnZ3JlZ2F0ZS5vdXQKaW5kZXggZDI4NjA1MGM5YS4uZDFjZTZhZDQyMyAxMDA2NDQK LS0tIGEvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0aXRpb25fYWdncmVnYXRlLm91 dAorKysgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9hZ2dyZWdhdGUu b3V0CkBAIC0xNDQsNyArMTQ0LDcgQEAgU0VMRUNUIGMsIHN1bShhKSBGUk9NIHBhZ2dfdGFi IFdIRVJFIDEgPSAyIEdST1VQIEJZIGM7CiAgICAgICAgICAgIFFVRVJZIFBMQU4gICAgICAg ICAgIAogLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICBIYXNoQWdncmVnYXRl Ci0gICBHcm91cCBLZXk6IHBhZ2dfdGFiLmMKKyAgIEdyb3VwIEtleTogYwogICAgLT4gIFJl c3VsdAogICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQogKDQgcm93cykKQEAgLTE1 OSw3ICsxNTksNyBAQCBTRUxFQ1QgYywgc3VtKGEpIEZST00gcGFnZ190YWIgV0hFUkUgYyA9 ICd4JyBHUk9VUCBCWSBjOwogICAgICAgICAgICBRVUVSWSBQTEFOICAgICAgICAgICAKIC0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgR3JvdXBBZ2dyZWdhdGUKLSAgIEdy b3VwIEtleTogcGFnZ190YWIuYworICAgR3JvdXAgS2V5OiBjCiAgICAtPiAgUmVzdWx0CiAg ICAgICAgICBPbmUtVGltZSBGaWx0ZXI6IGZhbHNlCiAoNCByb3dzKQotLSAKMi4xMS4wCgo= --------------E789225A3DB41495BFDDF38C Content-Type: text/plain; charset=UTF-8; name="v2-0003-Only-lock-partitions-that-will-be-scanned-by-a-qu.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="v2-0003-Only-lock-partitions-that-will-be-scanned-by-a-qu.pa"; filename*1="tch" RnJvbSBjNzY4ZmZlNzVkMzdkZjlkMTI3NzVhMzQ3N2NhYjFiMGYxMzE0ZWIxIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogVGh1LCAyMyBBdWcgMjAxOCAxNzozMDoxOCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg djIgMy8zXSBPbmx5IGxvY2sgcGFydGl0aW9ucyB0aGF0IHdpbGwgYmUgc2Nhbm5lZCBieSBh IHF1ZXJ5CgotLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jIHwg IDggKysrLS0tLS0KIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgIHwg MTcgKysrKysrKysrKy0tLS0tLS0KIDIgZmlsZXMgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygr KSwgMTIgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3ByZXAvcHJlcHVuaW9uLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYwppbmRleCAyNzlmNjg2ZmIwLi42YTJhZGI1ZjRkIDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcHJlcC9wcmVwdW5pb24uYwpAQCAtMTU1NSwxNCArMTU1NSwxNSBAQCBleHBhbmRf aW5oZXJpdGVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0 ZSwgSW5kZXggcnRpKQogCQlsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKIAogCS8qIFNj YW4gZm9yIGFsbCBtZW1iZXJzIG9mIGluaGVyaXRhbmNlIHNldCwgYWNxdWlyZSBuZWVkZWQg bG9ja3MgKi8KLQlpbmhPSURzID0gZmluZF9hbGxfaW5oZXJpdG9ycyhwYXJlbnRPSUQsIGxv Y2ttb2RlLCBOVUxMKTsKKwlpZiAocnRlLT5yZWxraW5kICE9IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpCisJCWluaE9JRHMgPSBmaW5kX2FsbF9pbmhlcml0b3JzKHBhcmVudE9JRCwg bG9ja21vZGUsIE5VTEwpOwogCiAJLyoKIAkgKiBDaGVjayB0aGF0IHRoZXJlJ3MgYXQgbGVh c3Qgb25lIGRlc2NlbmRhbnQsIGVsc2UgdHJlYXQgYXMgbm8tY2hpbGQKIAkgKiBjYXNlLiAg VGhpcyBjb3VsZCBoYXBwZW4gZGVzcGl0ZSBhYm92ZSBoYXNfc3ViY2xhc3MoKSBjaGVjaywg aWYgdGFibGUKIAkgKiBvbmNlIGhhZCBhIGNoaWxkIGJ1dCBubyBsb25nZXIgZG9lcy4KIAkg Ki8KLQlpZiAobGlzdF9sZW5ndGgoaW5oT0lEcykgPCAyKQorCWlmIChydGUtPnJlbGtpbmQg IT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJiBsaXN0X2xlbmd0aChpbmhPSURzKSA8 IDIpCiAJewogCQkvKiBDbGVhciBmbGFnIGJlZm9yZSByZXR1cm5pbmcgKi8KIAkJcnRlLT5p bmggPSBmYWxzZTsKQEAgLTE1NzksMTAgKzE1ODAsNyBAQCBleHBhbmRfaW5oZXJpdGVkX3J0 ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXggcnRp KQogCiAJLyogUGFydGl0aW9uZWQgdGFibGVzIGFyZSBleHBhbmRlZCBlbHNld2hlcmUuICov CiAJaWYgKHJ0ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCXsK LQkJbGlzdF9mcmVlKGluaE9JRHMpOwogCQlyZXR1cm47Ci0JfQogCiAJLyoKIAkgKiBNdXN0 IG9wZW4gdGhlIHBhcmVudCByZWxhdGlvbiB0byBleGFtaW5lIGl0cyB0dXBkZXNjLiAgV2Ug bmVlZCBub3QgbG9jawpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv cmVsbm9kZS5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCmluZGV4 IDQ2ZWNiNTIxNjYuLjBhMGQ3YmNkMjYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3JlbG5vZGUuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9y ZWxub2RlLmMKQEAgLTE4MjgsMTYgKzE4MjgsMTYgQEAgYnVpbGRfcGFydGl0aW9uX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50LCBPaWQgcGFydG9pZCkKIHsK IAlSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3Bh cmVudC0+cmVsaWRdOwogCVJlbE9wdEluZm8gKnJlc3VsdDsKKwlJbmRleAkJcm9vdFJUaW5k ZXggPSAwOwogCUluZGV4CQlwYXJ0UlRpbmRleCA9IDA7CiAJUmFuZ2VUYmxFbnRyeSAqcGFy dHJ0ZSA9IE5VTEw7CiAJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IE5VTEw7CiAJUGxhblJv d01hcmsgKnJvb3RyYyA9IE5VTEw7CisJaW50CQkJbG9ja21vZGU7CiAKIAkvKiBMb2NhdGUg dGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgYW5kIGZldGNoIGl0cyBQbGFuUm93TWFyaywg aWYgYW55LiAqLwogCWlmIChyb290LT5yb3dNYXJrcykKIAl7Ci0JCUluZGV4CQlyb290UlRp bmRleCA9IDA7Ci0KIAkJLyoKIAkJICogVGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUgaXRz ZWxmIG1pZ2h0IGJlIGEgY2hpbGQgb2YgVU5JT04gQUxMCiAJCSAqIHBhcmVudCwgc28gd2Ug bXVzdCByZXNvcnQgdG8gZmluZGluZyB0aGUgcm9vdCBwYXJlbnQgbGlrZSB0aGlzLgpAQCAt MTg2NCwxMyArMTg2NCwxNiBAQCBidWlsZF9wYXJ0aXRpb25fcmVsKFBsYW5uZXJJbmZvICpy b290LCBSZWxPcHRJbmZvICpwYXJlbnQsIE9pZCBwYXJ0b2lkKQogCQlyb290cmMgPSBnZXRf cGxhbl9yb3dtYXJrKHJvb3QtPnJvd01hcmtzLCByb290UlRpbmRleCk7CiAJfQogCi0JLyoK LQkgKiBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkgYWxyZWF5IGxvY2tlZCBhbGwgcGFydGl0 aW9ucywgc28gcGFzcwotCSAqIE5vTG9jayBmb3IgbG9ja21vZGUuCi0JICovCisJLyogRGV0 ZXJtaW5lIHRoZSBjb3JyZWN0IGxvY2ttb2RlIHRvIHVzZS4gKi8KKwlpZiAocm9vdFJUaW5k ZXggPT0gcm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uKQorCQlsb2NrbW9kZSA9IFJvd0V4 Y2x1c2l2ZUxvY2s7CisJZWxzZSBpZiAocm9vdHJjICYmIFJvd01hcmtSZXF1aXJlc1Jvd1No YXJlTG9jayhyb290cmMtPm1hcmtUeXBlKSkKKwkJbG9ja21vZGUgPSBSb3dTaGFyZUxvY2s7 CisJZWxzZQorCQlsb2NrbW9kZSA9IEFjY2Vzc1NoYXJlTG9jazsKIAlhZGRfaW5oZXJpdGFu Y2VfY2hpbGRfdG9fcXVlcnkocm9vdCwgcGFyZW50cnRlLCBwYXJlbnQtPnJlbGlkLAogCQkJ CQkJCQkgICBwYXJlbnQtPnJlbHR5cGUsIHBhcmVudC0+dHVwZGVzYywKLQkJCQkJCQkJICAg cm9vdHJjLCBwYXJ0b2lkLCBOb0xvY2ssCisJCQkJCQkJCSAgIHJvb3RyYywgcGFydG9pZCwg bG9ja21vZGUsCiAJCQkJCQkJCSAgICZhcHBpbmZvLCAmcGFydHJ0ZSwgJnBhcnRSVGluZGV4 KTsKIAogCS8qIFBhcnRpdGlvbiB0dXJuZWQgb3V0IHRvIGJlIGEgcGFydGl0aW9uZWQgdGFi bGUgd2l0aCAwIHBhcnRpdGlvbnMuICovCi0tIAoyLjExLjAKCg== --------------E789225A3DB41495BFDDF38C--