Received: from malur.postgresql.org ([217.196.149.56]) by arkaria.postgresql.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_CBC_SHA1:256) (Exim 4.89) (envelope-from ) id 1gw2tA-00085U-GO for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Feb 2019 10:44:37 +0000 Received: from localhost ([127.0.0.1] helo=malur.postgresql.org) by malur.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gw2sA-0004lO-MW for pgsql-hackers@arkaria.postgresql.org; Tue, 19 Feb 2019 10:43:34 +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_SHA1:256) (Exim 4.89) (envelope-from ) id 1gw2sA-0004lG-8G for pgsql-hackers@lists.postgresql.org; Tue, 19 Feb 2019 10:43:34 +0000 Received: from tama500.ecl.ntt.co.jp ([129.60.39.148]) by magus.postgresql.org with esmtp (Exim 4.89) (envelope-from ) id 1gw2s0-0006Mz-NT for pgsql-hackers@postgresql.org; Tue, 19 Feb 2019 10:43:33 +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 x1JAhBHF002886; Tue, 19 Feb 2019 19:43:11 +0900 Received: from vc2.ecl.ntt.co.jp (localhost [127.0.0.1]) by vc2.ecl.ntt.co.jp (Postfix) with ESMTP id F071263936F; Tue, 19 Feb 2019 19:43:10 +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 E224563879D; Tue, 19 Feb 2019 19:43:10 +0900 (JST) Received: from [127.0.0.1] (unknown [129.60.241.61]) by jcms-pop21.ecl.ntt.co.jp (Postfix) with ESMTPSA id D580F40091C; Tue, 19 Feb 2019 19:43:10 +0900 (JST) Subject: Re: speeding up planning with partitions References: <8ea8bbb1-31ff-a469-02a7-281c3eba4bea@lab.ntt.co.jp> <201902011001.4v25uw6w6kb5@alvherre.pgsql> <0F97FA9ABBDBE54F91744A9B37151A5127865E@g01jpexmbkw24> <5d00eb35-375d-0672-0626-96bdb86829d0@lab.ntt.co.jp> <7453.1550518972@sss.pgh.pa.us> From: Amit Langote Message-ID: <0a70234e-b2e6-debc-2fb5-e8fd927caa00@lab.ntt.co.jp> Date: Tue, 19 Feb 2019 19:42:49 +0900 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.5.1 MIME-Version: 1.0 In-Reply-To: <7453.1550518972@sss.pgh.pa.us> Content-Type: multipart/mixed; boundary="------------A2A95DBEF09F26C37C03DB83" Content-Language: en-US X-CC-Mail-RelayStamp: 1 To: Tom Lane Cc: David Rowley , "Imai, Yoshikazu" , Amit Langote , Alvaro Herrera , 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. --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Thanks for the review. On 2019/02/19 4:42, Tom Lane wrote: > Amit Langote writes: >> [ v22 patch set ] > > I did some review of the 0002 patch. I like the general idea, > but there are a lot of details I don't much like. > > Probably the biggest complaint is that I don't like what you did to the > API of grouping_planner(): it's ugly and unprincipled. Considering that > only a tiny fraction of what grouping_planner does is actually relevant to > inherited UPDATES/DELETEs, maybe we should factor that part out --- or, > heavens, just duplicate some code --- so that inheritance_planner doesn't > need to call grouping_planner at all. (I see that you have another patch > in the queue that proposes to fix this through a rather massive > refactoring of grouping_planner, but I do not think I like that approach. > grouping_planner does perhaps need refactoring, but I don't want to drive > such work off an arbitrary-and-dubious requirement that it shouldn't call > query_planner.) OK, modified the patch to leave grouping_planner unchanged (except got rid of inheritance_update argument). Now inheritance_planner directly modifies the paths produced by query_planner (per child target relation that is), so that they have a PathTarget suitable for producing query's top-level targetlist. I refactored portion of apply_scanjoin_target_to_paths() that does that work and inheritance_planner calls it directly. > Another point is that I don't like this division of labor between > equivclass.c and appendinfo.c. I don't like exposing add_eq_member > globally --- that's just an invitation for code outside equivclass.c to > break the fundamental invariants of ECs --- and I also think you've taught > appendinfo.c far more than it ought to know about the innards of ECs. > I'd suggest putting all of that logic into equivclass.c, with a name along > the lines of translate_equivalence_class_to_child. That would reverse the > dependency, in that equivclass.c would now need to call > adjust_appendrel_attrs ... but that function is already globally exposed. That makes sense. I've tried implementing EC translation to occur this way in the updated patch. > I don't much care for re-calling build_base_rel_tlists to add extra > Vars to the appropriate relations; 99% of the work it does will be > wasted, and with enough child rels you could run into an O(N^2) > problem. Maybe you could call add_vars_to_targetlist directly, > since you know exactly what Vars you're adding? Assuming you're talking about the build_base_rel_tlists() call in create_inherited_target_child_root(), it's necessary because *all* tlist Vars are new, because the targetlist has just been translated at that point. But maybe I missed your point? By the way, later patch in the series will cause partition pruning to occur before these child PlannerInfos are generated, so create_inherited_target_child_root will be called only as many times as there are un-pruned child target relations. > What is the point of moving the calculation of all_baserels? The earlier > you construct that, the more likelihood that code will have to be written > to modify it (like, say, what you had to put into > create_inherited_target_child_root), and I do not see anything in this > patch series that needs it to be available earlier. all_baserels needs to be built in original PlannerInfo before child PlannerInfos are constructed, so that they can simply copy it and have the parent target baserel RT index in it replaced by child target baserel RT index. set_inherited_target_rel_sizes/pathlists use child PlannerInfos, so all_baserels must be set in them just like it is in the original PlannerInfo. > The business with translated_exprs and child_target_exprs in > set_inherited_target_rel_sizes seems to be dead code --- nothing is done > with the list. Should that be updating childrel->reltarget? Or is that > now done elsewhere, and if so, why isn't the elsewhere also handling > childrel->joininfo? Actually, child_target_exprs simply refers to childrel->reltarget->exprs, so modifying it modifies the latter too, but I've found that confusing myself. So, I have removed it. childrel->reltarget->exprs would only contain the targetlist Vars at this point (added by build_base_rel_tlists called by create_inherited_target_child_root), but translated_exprs will also contain Vars that are referenced in WHERE clauses, which have not been added to childrel->reltarget->exprs yet. That's what's getting added to childrel->reltarget in this code. > + * Set a non-zero value here to cope with the caller's requirement > + * that non-dummy relations are actually not empty. We don't try to > > What caller is that? Perhaps we should change that rather than inventing > a bogus value here? OK, modified relevant Asserts in the callers. One was set_rel_size and other set_inherited_target_rel_sizes itself (may be called recursively). > Couldn't inh_target_child_rels list be removed in favor of looking > at the relid fields of the inh_target_child_path_rels entries? > Having to keep those two lists in sync seems messy. Don't like having two lists either, but inh_target_child_path_rels entries can be RELOPT_JOINREL, so relid can be 0. > If you're adding fields to PlannerInfo (or pretty much any other > planner data structure) you should update outfuncs.c to print them > if feasible. Also, please avoid "add new fields at the end" syndrome. > Put them where they logically belong. For example, if > inh_target_child_roots has to be the same length as simple_rel_array, > it's not just confusing for it not to be near that field, it's > outright dangerous: it increases the risk that somebody will forget > to manipulate both fields. I've moved these fields around in the struct definition. Also, I've added unexpanded_tlist and inh_target_child_rels to _outPlannerInfo. Attached updated patches. 0001 that I'd previously posted is no longer included, as I said in the other email. Thanks, Amit --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=UTF-8; name="0001-Overhaul-inheritance-update-delete-planning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0001-Overhaul-inheritance-update-delete-planning.patch" RnJvbSA4MTYzMmU0MDg4YmYxYjcxMWM4MGZmMDc3NjJhYzcyY2Q3NGQ5MzI3IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCA4IEZlYiAyMDE5IDE2OjE2OjM4ICswOTAwClN1YmplY3Q6IFtQQVRDSCAx LzVdIE92ZXJoYXVsIGluaGVyaXRhbmNlIHVwZGF0ZS9kZWxldGUgcGxhbm5pbmcKCldpdGgg dGhlIGN1cnJlbnQgbWV0aG9kLCBpbmhlcml0YW5jZV9wbGFubmVyLCB3aGljaCBoYW5kbGVz IHRoZQpwbGFubmluZyBmb3IgdXBkYXRlL2RlbGV0ZSBjb21tYW5kcyB0YXJnZXRpbmcgaW5o ZXJpdGFuY2UgdHJlZXMsCnJlcGVhdGVkbHkgY2FsbHMgcXVlcnlfcGxhbm5lciBmb3IgZWFj aCBjaGlsZCB0YWJsZS4KClRoYXQncyBpbmVmZmljaWVudCBmb3IgdHdvIHJlYXNvbnM6Cgog MS4gcGFydHBydW5lLmMgY2Fubm90IGJlIHVzZWQgdG8gcGVyZm9ybSBwYXJ0aXRpb24gcHJ1 bmluZywgYmVjYXVzZQogICAgaXQgY2FuIG9ubHkgYmUgaW52b2tlZCBmcm9tIHF1ZXJ5X3Bs YW5uZXIuICBXaXRoIHRoZSBjdXJyZW50CiAgICBhcHByb2FjaCwgcXVlcnlfcGxhbm5lciBv bmx5IHNlZXMgdGhlIGluZGl2aWR1YWwgcGFydGl0aW9ucyBpbgogICAgdGhlIHF1ZXJ5IHRy ZWUgaXQgcmVjZWl2ZXMsIG5vdCB0aGUgcGFyZW50IHBhcnRpdGlvbmVkIHRhYmxlLgogICAg VGhpcyBsZWF2ZXMgZWFjaCBwYXJ0aXRpb24gdG8gYmUgcHJ1bmVkIHVzaW5nIGNvbnN0cmFp bnQKICAgIGV4Y2x1c2lvbi4gIChjb25zdHJhaW50IGV4Y2x1c2lvbiBjYW5ub24gcHJ1bmUg aGFzaCBwYXJ0aXRpb25zCiAgICB3aGljaCBtZWFucyBVUERBVEUvREVMRVRFIGRvbid0IHN1 cHBvcnQgaGFzaCBwYXJ0aXRpb24gcHJ1bmluZy4pCgogMi4gUmVwZWF0ZWQgaW52b2NhdGlv biBvZiBxdWVyeV9wbGFubmVyIHJlc3VsdHMgaW4gYWxsb2NhdGluZyBsYXJnZQogICAgYW1v dW50cyBvZiBtZW1vcnksIGVzcGVjaWFsbHkgaWYgdGhlcmUgYXJlIG1hbnkgY2hpbGQgdGFi bGVzLgogICAgQWxzbywgaXQgaW52b2x2ZXMgcmVwZWF0ZWRseSBwZXJmb3JtaW5nIHRoZSBz YW1lIHByb2Nlc3NpbmcsCiAgICBzdWNoIGFzIGpvaW50cmVlIHByb2Nlc3NpbmcuCgpUaGlz IGNvbW1pdCBhZGRyZXNzZXMgYm90aCBvZiB0aGUgaXNzdWVzIGJ5IG1vZGlmeWluZyBxdWVy eV9wbGFubmVyCnRvIGhhbmRsZSB0aGUgaW5oZXJpdGFuY2UgdGFyZ2V0IGNhc2UgZGlyZWN0 bHkuICBJbnN0ZWFkIG9mIGhhdmluZwp0aGUgY2FsbGVyIGNyZWF0ZSBzZXBhcmF0ZSBQbGFu bmVySW5mbydzIGZvciBpbmRpdmlkdWFsIGNoaWxkIHRhcmdldApyZWxhdGlvbnMgYW5kIHBh c3MgdGhlbSB0byBxdWVyeV9wbGFubmVyIChhY3R1YWxseSwgdmlhCmdyb3VwaW5nX3BsYW5u ZXIpLCB0aGlzIHRlYWNoZXMgcXVlcnlfcGxhbm5lciBpdHNlbGYgdG8gY3JlYXRlIGNoaWxk ClBsYW5uZXJJbmZvJ3MgZnJvbSB0aGUgaW5mb3JtYXRvbiBpbiB0aGUgb3JpZ2luYWwgcGFy ZW50IFBsYW5uZXJJbmZvLgpJdCBjcmVhdGVzIHRoZW0gKmFmdGVyKiBpdCBoYXMgZ2VuZXJh dGVkIGVub3VnaCBzdGF0ZSBpbiB0aGUgb3JpZ2luYWwsClBsYW5uZXJJbmZvLCBzdWNoIGFz IFJlbE9wdEluZm9zIGZvciB2YXJpb3VzIHJlbGF0aW9ucywKRXF1aXZhbGVuY2VDbGFzc2Vz IGFmdGVyIHByb2Nlc3NpbmcgdGhlIGpvaW4gdHJlZSwgYW5kICpiZWZvcmUqCmdlbmVyYXRp bmcgdGhlIHNjYW4gYW5kIGpvaW4gcGF0aHMuICBTY2FuIHBhdGhzIGFyZSBnZW5lcmF0ZWQK bm9ybWFsbHksIGV4Y2VwdCB0aGF0IFBhdGhzIG9mIHRhcmdldCBjaGlsZHJlbiBhcmUgbm90 ICJhcHBlbmRlZCIuCkpvaW4gcGF0aHMgYXJlIHRoZW4gZ2VuZXJhdGVkIHNlcGFyYXRlbHkg Zm9yIGVhY2ggY2hpbGQgdGFyZ2V0CnJlbGF0aW9uLCBhZnRlciByZXBsYWNpbmcgdGhlIHBh cmVudCByZWxhdGlvbiByZWZlcmVuY2VzIGluIHRoZQpvcmlnaW5hbCBqb2luIHRyZWUgd2l0 aCB0aGUgY2hpbGQgcmVsYXRpb24gcmVmZXJlbmNlcy4gIEpvaW4gcGF0aHMKY29ycmVzcG9u ZGluZyB0byBlYWNoIGNoaWxkIHRhcmdldCBhcmUgcmVtZW1iZXJlZCBmb3IgZnVydGhlcgpw cm9jZXNzaW5nIGJ5IHN0dWZmaW5nIHN0dWZmaW5nIHRoZSBqb2lucmVsIFJlbE9wdEluZm9z IGluIGEgbGlzdAppbiB0aGUgb3JpZ2luYWwgUGxhbm5lckluZm8uCgpTbywgaW5oZXJpdGFu Y2VfcGxhbm5lciBub3cgY2FsbHMgcXVlcnlfcGxhbm5lciBqdXN0IG9uY2UgYXQgdGhlCmJl Z2lubmluZyB3aXRoIHRoZSBvcmlnaW5hbCB1bm1vZGlmaWVkIHF1ZXJ5LCB3aGljaCB0YWtl cyBjYXJlIG9mCmdlbmVyYXRpbmcgdG9wLWxldmVsIGpvaW4gcmVscyBmb3IgdGhlIGNoaWxk IHF1ZXJpZXMgYXMgZGVzY3JpYmVkCmFib3ZlLiAgT25jZSBqb2luIHBhdGhzIGhhdmUgYmVl biBjcmVhdGVkIGZvciBhbGwgdW5wcnVuZWQKY2hpbGQgdGFyZ2V0IHJlbGF0aW9ucywgYmFj ayBpbiBpbmhlcml0YW5jZV9wbGFubmVyLCB0aGUKYWZvcmVtZW50aW9uZWQgcGF0aHMgYXJl IGFkanVzdGVkIHNvIHRoYXQgdGhleSBwcm9kdWNlIHRoZSBxdWVyeSdzCnRvcC1sZXZlbCB0 YXJnZXQgbGlzdCB0aGF0IGlzIGV4cGFuZGVkIGFjY29yZGluZyB0byBhIGdpdmVuIGNoaWxk CnJlbGF0aW9uJ3MgZGVzY3JpcHRvci4KClRoaXMgcmVtb3ZlcyBzb21lIGV4aXN0aW5nIGNv ZGUgaW4gaW5oZXJpdGFuY2VfcGxhbm5lciB0aGF0IGRlYWx0CndpdGggYW55IHN1YnF1ZXJ5 IFJURXMgaW4gdGhlIHF1ZXJ5LiAgVGhlIHJhdGlvbmFsZSBvZiB0aGF0IGNvZGUKd2FzIHRo YXQgdGhlIHN1YnF1ZXJ5IFJURXMgbWF5IGNoYW5nZSBkdXJpbmcgZWFjaCBpdGVyYXRpb24g b2YKcGxhbm5pbmcgKHRoYXQgaXMsIGZvciBkaWZmZXJlbnQgY2hpbGRyZW4pLCBzbyBkaWZm ZXJlbnQgaXRlcmF0aW9ucwpiZXR0ZXIgdXNlIGRpZmZlcmVudCBjb3BpZXMgb2YgdGhvc2Ug UlRFcy4gIFRoYXQgd2FzIGhhbmRsZWQgYnkKbWFraW5nIGZyZXNoIGNvcGllcyBvZiB0aG9z ZSBSVEVzIGZvciBlYWNoIGl0ZXJhdGlvbiBvZiBwbGFubmluZwp3aGljaCB3ZXJlIGFwcGVu ZGVkIHRvIHRoZSByYW5nZSB0YWJsZSwgYWNjb21wYW5pZWQgYnkgbW9kaWZ5aW5nIGFsbApl eHByZXNzaW9ucyBhbmQgYXV4aWxpYXJ5IHN0cnVjdHVyZXMgdGhhdCByZWZlcmVuY2VkIHRo ZSBvcmlnaW5hbApzdWJxdWVyeSBSVEVzIHRvIGluc3RlYWQgcmVmZXJlbmNlIHRoZSBjb3Bp ZXMgKHRoYXQgaXMsIGNoYW5nZSB0aGUKdmFybm9zKS4gIFRoaXMgY29weWluZyBtZWFudCB3 ZSB3b3VsZCBlbmQgdXAgYWRkaW5nIFMgKiBOIG5ldyBlbnRyaWVzCnRvIHRoZSBvcmlnaW5h bCByYW5nZSB0YWJsZSBieSB0aGUgdGltZSB3ZSBnb3QgdG8gdGhlIGxhc3QgdW5wcnVuZWQK Y2hpbGQsIHdoZXJlIFMgaXMgdGhlIG51bWJlciBvZiBzdWJxdWVyeSBSVEVzIGluIHRoZSBv cmlnaW5hbCBxdWVyeQphbmQgTiB0aGUgbnVtYmVyIG9mIHVucHJ1bmVkIGNoaWxkcmVuLiAg U2luY2Ugd2l0aCB0aGUgbmV3IGNvZGUKd2UgcGVyZm9ybSBwbGFubmluZyBqdXN0IG9uY2Us IEkgdGhpbmsgd2UgZG9uJ3QgbmVlZCB0aGlzIHNwZWNpYWwKaGFuZGxpbmcuICBBY3R1YWxs eSwgdGhlcmUgaXMgYSByZWdyZXNzaW9uIHRlc3Qgb3V0cHV0IGNoYW5nZSBkdWUKdG8gbm8g bG9uZ2VyIGhhdmluZyBjb3BpZXMgb2Ygc3VicXVlcnkgUlRFcyAoc2VlIHRoZSBkaWZmIG9m CnBhcnRpdGlvbl9qb2luLm91dCBmaWxlLikKClJlZ3Jlc3Npb24gdGVzdCBvdXRwdXQgY2hh bmdlIGluIHBhcnRpdGlvbl9qb2luLm91dCBpcyBkdWUgdG8gdGhlIGZhY3QKdGhhdCB3ZSBu byBsb25nZXIgY3JlYXRlIGR1cGxpY2F0ZXMgb2Ygc3VicXVlcnkgUlRFcyBpbiBjaGlsZCBy YW5nZQp0YWJsZXMuCi0tLQogZG9jL3NyYy9zZ21sL2RkbC5zZ21sICAgICAgICAgICAgICAg ICAgICAgICAgfCAgMTcgKy0KIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAg ICAgICAgICAgIHwgICAyICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhz LmMgICAgICAgIHwgNDQ5ICsrKysrKysrKysrKysrKysrKysrLS0KIHNyYy9iYWNrZW5kL29w dGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYyAgICAgIHwgMTYwICsrKysrKysrCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubWFpbi5jICAgICAgICB8ICA0MSArLQogc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgICAgfCA1NTAgKysrKysrKysr Ky0tLS0tLS0tLS0tLS0tLS0tCiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRp bmZvLmMgICAgICB8ICAzMCArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJp dC5jICAgICAgICAgfCAxMjcgKysrKysrKwogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmggICAgICAgICAgICAgICAgfCAgMzAgKysKIHNyYy9pbmNsdWRlL29wdGltaXplci9pbmhl cml0LmggICAgICAgICAgICAgIHwgICAxICsKIHNyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oICAgICAgICAgICAgICAgIHwgICAyICsKIHNyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQv cGFydGl0aW9uX2pvaW4ub3V0IHwgICA0ICstCiAxMiBmaWxlcyBjaGFuZ2VkLCAxMDAyIGlu c2VydGlvbnMoKyksIDQxMSBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9kb2Mvc3JjL3Nn bWwvZGRsLnNnbWwgYi9kb2Mvc3JjL3NnbWwvZGRsLnNnbWwKaW5kZXggODMxNGZjZTc4Zi4u MWRhMjgzNTdlZiAxMDA2NDQKLS0tIGEvZG9jL3NyYy9zZ21sL2RkbC5zZ21sCisrKyBiL2Rv Yy9zcmMvc2dtbC9kZGwuc2dtbApAQCAtNDQzOSwyNCArNDQzOSwxMSBAQCBFWFBMQUlOIFNF TEVDVCBjb3VudCgqKSBGUk9NIG1lYXN1cmVtZW50IFdIRVJFIGxvZ2RhdGUgJmd0Oz0gREFU RSAnMjAwOC0wMS0wMSc7CiAKICAgIDxub3RlPgogICAgIDxwYXJhPgotICAgICBDdXJyZW50 bHksIHBydW5pbmcgb2YgcGFydGl0aW9ucyBkdXJpbmcgdGhlIHBsYW5uaW5nIG9mIGFuCi0g ICAgIDxjb21tYW5kPlVQREFURTwvY29tbWFuZD4gb3IgPGNvbW1hbmQ+REVMRVRFPC9jb21t YW5kPiBjb21tYW5kIGlzCi0gICAgIGltcGxlbWVudGVkIHVzaW5nIHRoZSBjb25zdHJhaW50 IGV4Y2x1c2lvbiBtZXRob2QgKGhvd2V2ZXIsIGl0IGlzCi0gICAgIGNvbnRyb2xsZWQgYnkg dGhlIDxsaXRlcmFsPmVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZzwvbGl0ZXJhbD4gcmF0aGVy IHRoYW4KLSAgICAgPGxpdGVyYWw+Y29uc3RyYWludF9leGNsdXNpb248L2xpdGVyYWw+KSAm bWRhc2g7IHNlZSB0aGUgZm9sbG93aW5nIHNlY3Rpb24KLSAgICAgZm9yIGRldGFpbHMgYW5k IGNhdmVhdHMgdGhhdCBhcHBseS4KLSAgICA8L3BhcmE+Ci0KLSAgICA8cGFyYT4KICAgICAg RXhlY3V0aW9uLXRpbWUgcGFydGl0aW9uIHBydW5pbmcgY3VycmVudGx5IG9ubHkgb2NjdXJz IGZvciB0aGUKICAgICAgPGxpdGVyYWw+QXBwZW5kPC9saXRlcmFsPiBhbmQgPGxpdGVyYWw+ TWVyZ2VBcHBlbmQ8L2xpdGVyYWw+IG5vZGUgdHlwZXMuCiAgICAgIEl0IGlzIG5vdCB5ZXQg aW1wbGVtZW50ZWQgZm9yIHRoZSA8bGl0ZXJhbD5Nb2RpZnlUYWJsZTwvbGl0ZXJhbD4gbm9k ZQotICAgICB0eXBlLgotICAgIDwvcGFyYT4KLQotICAgIDxwYXJhPgotICAgICBCb3RoIG9m IHRoZXNlIGJlaGF2aW9ycyBhcmUgbGlrZWx5IHRvIGJlIGNoYW5nZWQgaW4gYSBmdXR1cmUg cmVsZWFzZQotICAgICBvZiA8cHJvZHVjdG5hbWU+UG9zdGdyZVNRTDwvcHJvZHVjdG5hbWU+ LgorICAgICB0eXBlLCBidXQgdGhhdCBpcyBsaWtlbHkgdG8gYmUgY2hhbmdlZCBpbiBhIGZ1 dHVyZSByZWxlYXNlIG9mCisgICAgIDxwcm9kdWN0bmFtZT5Qb3N0Z3JlU1FMPC9wcm9kdWN0 bmFtZT4uCiAgICAgPC9wYXJhPgogICAgPC9ub3RlPgogICA8L3NlY3QyPgpkaWZmIC0tZ2l0 IGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291 dGZ1bmNzLmMKaW5kZXggNjUzMDJmZTY1Yi4uYzVjMDhlZmFjMSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRm dW5jcy5jCkBAIC0yMjAzLDYgKzIyMDMsNyBAQCBfb3V0UGxhbm5lckluZm8oU3RyaW5nSW5m byBzdHIsIGNvbnN0IFBsYW5uZXJJbmZvICpub2RlKQogCVdSSVRFX05PREVfRklFTEQoZGlz dGluY3RfcGF0aGtleXMpOwogCVdSSVRFX05PREVfRklFTEQoc29ydF9wYXRoa2V5cyk7CiAJ V1JJVEVfTk9ERV9GSUVMRChwcm9jZXNzZWRfdGxpc3QpOworCVdSSVRFX05PREVfRklFTEQo dW5leHBhbmRlZF90bGlzdCk7CiAJV1JJVEVfTk9ERV9GSUVMRChtaW5tYXhfYWdncyk7CiAJ V1JJVEVfRkxPQVRfRklFTEQodG90YWxfdGFibGVfcGFnZXMsICIlLjBmIik7CiAJV1JJVEVf RkxPQVRfRklFTEQodHVwbGVfZnJhY3Rpb24sICIlLjRmIik7CkBAIC0yMjE4LDYgKzIyMTks NyBAQCBfb3V0UGxhbm5lckluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZXJJbmZv ICpub2RlKQogCVdSSVRFX0JJVE1BUFNFVF9GSUVMRChjdXJPdXRlclJlbHMpOwogCVdSSVRF X05PREVfRklFTEQoY3VyT3V0ZXJQYXJhbXMpOwogCVdSSVRFX0JPT0xfRklFTEQocGFydENv bHNVcGRhdGVkKTsKKwlXUklURV9OT0RFX0ZJRUxEKGluaF90YXJnZXRfY2hpbGRfcmVscyk7 CiB9CiAKIHN0YXRpYyB2b2lkCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGF0aC9hbGxwYXRocy5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMu YwppbmRleCAwZGViYWM3NWM2Li4wYTQ3MjllNjQ2IDEwMDY0NAotLS0gYS9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9hbGxwYXRocy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2FsbHBhdGhzLmMKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRl ICJvcHRpbWl6ZXIvcGxhbmNhdC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wbGFubWFpbi5o IgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgiCiAjaW5jbHVkZSAib3B0aW1pemVy L3Jlc3RyaWN0aW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgpAQCAtOTIs OCArOTMsMTIgQEAgc3RhdGljIHZvaWQgc2V0X2ZvcmVpZ25fc2l6ZShQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCSBSYW5nZVRibEVudHJ5ICpydGUpOwogc3Rh dGljIHZvaWQgc2V0X2ZvcmVpZ25fcGF0aGxpc3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKIAkJCQkJIFJhbmdlVGJsRW50cnkgKnJ0ZSk7CitzdGF0aWMgdm9pZCBz ZXRfaW5oZXJpdGVkX3RhcmdldF9yZWxfc2l6ZXMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9w dEluZm8gKnJlbCwKKwkJCQkJCQkgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpOwog c3RhdGljIHZvaWQgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQkJCQlJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSk7Citz dGF0aWMgdm9pZCBzZXRfaW5oZXJpdGVkX3RhcmdldF9yZWxfcGF0aGxpc3RzKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkJCSBSZWxPcHRJbmZvICpyZWwsIEluZGV4IHJ0aSwgUmFuZ2VU YmxFbnRyeSAqcnRlKTsKIHN0YXRpYyB2b2lkIHNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJCQkJCQlJbmRleCBydGksIFJh bmdlVGJsRW50cnkgKnJ0ZSk7CiBzdGF0aWMgdm9pZCBnZW5lcmF0ZV9tZXJnZWFwcGVuZF9w YXRocyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLApAQCAtMTIyLDYgKzEy Nyw4IEBAIHN0YXRpYyB2b2lkIHNldF9yZXN1bHRfcGF0aGxpc3QoUGxhbm5lckluZm8gKnJv b3QsIFJlbE9wdEluZm8gKnJlbCwKIHN0YXRpYyB2b2lkIHNldF93b3JrdGFibGVfcGF0aGxp c3QoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJICAgUmFuZ2VU YmxFbnRyeSAqcnRlKTsKIHN0YXRpYyBSZWxPcHRJbmZvICptYWtlX3JlbF9mcm9tX2pvaW5s aXN0KFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICpqb2lubGlzdCk7CitzdGF0aWMgUmVsT3B0 SW5mbyAqaW5oZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdChQbGFubmVySW5mbyAq cm9vdCwKKwkJCQkJCUxpc3QgKmpvaW5saXN0KTsKIHN0YXRpYyBib29sIHN1YnF1ZXJ5X2lz X3B1c2hkb3duX3NhZmUoUXVlcnkgKnN1YnF1ZXJ5LCBRdWVyeSAqdG9wcXVlcnksCiAJCQkJ CQkgIHB1c2hkb3duX3NhZmV0eV9pbmZvICpzYWZldHlJbmZvKTsKIHN0YXRpYyBib29sIHJl Y3Vyc2VfcHVzaGRvd25fc2FmZShOb2RlICpzZXRPcCwgUXVlcnkgKnRvcHF1ZXJ5LApAQCAt MTU1LDI3ICsxNjIsNiBAQCBtYWtlX29uZV9yZWwoUGxhbm5lckluZm8gKnJvb3QsIExpc3Qg KmpvaW5saXN0KQogCUluZGV4CQlydGk7CiAJZG91YmxlCQl0b3RhbF9wYWdlczsKIAotCS8q Ci0JICogQ29uc3RydWN0IHRoZSBhbGxfYmFzZXJlbHMgUmVsaWRzIHNldC4KLQkgKi8KLQly b290LT5hbGxfYmFzZXJlbHMgPSBOVUxMOwotCWZvciAocnRpID0gMTsgcnRpIDwgcm9vdC0+ c2ltcGxlX3JlbF9hcnJheV9zaXplOyBydGkrKykKLQl7Ci0JCVJlbE9wdEluZm8gKmJyZWwg PSByb290LT5zaW1wbGVfcmVsX2FycmF5W3J0aV07Ci0KLQkJLyogdGhlcmUgbWF5IGJlIGVt cHR5IHNsb3RzIGNvcnJlc3BvbmRpbmcgdG8gbm9uLWJhc2VyZWwgUlRFcyAqLwotCQlpZiAo YnJlbCA9PSBOVUxMKQotCQkJY29udGludWU7Ci0KLQkJQXNzZXJ0KGJyZWwtPnJlbGlkID09 IHJ0aSk7IC8qIHNhbml0eSBjaGVjayBvbiBhcnJheSAqLwotCi0JCS8qIGlnbm9yZSBSVEVz IHRoYXQgYXJlICJvdGhlciByZWxzIiAqLwotCQlpZiAoYnJlbC0+cmVsb3B0a2luZCAhPSBS RUxPUFRfQkFTRVJFTCkKLQkJCWNvbnRpbnVlOwotCi0JCXJvb3QtPmFsbF9iYXNlcmVscyA9 IGJtc19hZGRfbWVtYmVyKHJvb3QtPmFsbF9iYXNlcmVscywgYnJlbC0+cmVsaWQpOwotCX0K LQogCS8qIE1hcmsgYmFzZSByZWxzIGFzIHRvIHdoZXRoZXIgd2UgY2FyZSBhYm91dCBmYXN0 LXN0YXJ0IHBsYW5zICovCiAJc2V0X2Jhc2VfcmVsX2NvbnNpZGVyX3N0YXJ0dXAocm9vdCk7 CiAKQEAgLTIyMywxMyArMjA5LDM1IEBAIG1ha2Vfb25lX3JlbChQbGFubmVySW5mbyAqcm9v dCwgTGlzdCAqam9pbmxpc3QpCiAKIAkvKgogCSAqIEdlbmVyYXRlIGFjY2VzcyBwYXRocyBm b3IgdGhlIGVudGlyZSBqb2luIHRyZWUuCisJICoKKwkgKiBGb3IgVVBEQVRFL0RFTEVURSBv biBhbiBpbmhlcml0YW5jZSBwYXJlbnQsIGpvaW4gcGF0aHMgc2hvdWxkIGJlCisJICogZ2Vu ZXJhdGVkIGZvciBlYWNoIGNoaWxkIHJlc3VsdCByZWwgc2VwYXJhdGVseS4KIAkgKi8KLQly ZWwgPSBtYWtlX3JlbF9mcm9tX2pvaW5saXN0KHJvb3QsIGpvaW5saXN0KTsKKwlpZiAocm9v dC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uID4gMCAmJgorCQlyb290LT5zaW1wbGVfcnRlX2Fy cmF5W3Jvb3QtPnBhcnNlLT5yZXN1bHRSZWxhdGlvbl0tPmluaCkKKwl7CisJCS8qCisJCSAq IFJlbE9wdEluZm8gY29ycmVzcG9uZGluZyB0byB0aGUgcXVlcnkncyBvcmlnaW5hbCB0YXJn ZXQgcmVsYXRpb24KKwkJICogaXMgcmV0dXJuZWQuICBKb2luIHBhdGhzIChpZiBhbnkpIGFy ZSBhdHRhY2hlZCB0byBjaGlsZCBqb2lucmVscywKKwkJICogbm90IHRoaXMgcmVsLiAgQWxz bywgdGhpcyByZWwncyBzb2xlIHBhdGggKE1vZGlmeVRhYmxlKSB3aWxsIGJlIHNldAorCQkg KiBieSBpbmhlcml0YW5jZV9wbGFubmVyIGxhdGVyLCBzbyB3ZSBjYW4ndCBjaGVjayBpdHMg cGF0aHMgeWV0LgorCQkgKi8KKwkJcmVsID0gaW5oZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9q b2lubGlzdChyb290LCBqb2lubGlzdCk7CisJfQorCWVsc2UKKwl7CisJCXJlbCA9IG1ha2Vf cmVsX2Zyb21fam9pbmxpc3Qocm9vdCwgam9pbmxpc3QpOwogCi0JLyoKLQkgKiBUaGUgcmVz dWx0IHNob3VsZCBqb2luIGFsbCBhbmQgb25seSB0aGUgcXVlcnkncyBiYXNlIHJlbHMuCi0J ICovCi0JQXNzZXJ0KGJtc19lcXVhbChyZWwtPnJlbGlkcywgcm9vdC0+YWxsX2Jhc2VyZWxz KSk7CisJCS8qCisJCSAqIFRoZSByZXN1bHQgc2hvdWxkIGpvaW4gYWxsIGFuZCBvbmx5IHRo ZSBxdWVyeSdzIGJhc2UgcmVscy4KKwkJICovCisJCUFzc2VydChibXNfZXF1YWwocmVsLT5y ZWxpZHMsIHJvb3QtPmFsbF9iYXNlcmVscykpOworCisJCS8qIENoZWNrIHRoYXQgd2UgZ290 IGF0IGxlYXN0IG9uZSB1c2FibGUgcGF0aCAqLworCQlpZiAoIXJlbCB8fCAhcmVsLT5jaGVh cGVzdF90b3RhbF9wYXRoIHx8CisJCQlyZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGgtPnBhcmFt X2luZm8gIT0gTlVMTCkKKwkJCWVsb2coRVJST1IsICJmYWlsZWQgdG8gY29uc3RydWN0IHRo ZSBqb2luIHJlbGF0aW9uIik7CisJfQogCiAJcmV0dXJuIHJlbDsKIH0KQEAgLTM2MSw2ICsz NjksOCBAQCBzdGF0aWMgdm9pZAogc2V0X3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCiAJCQkgSW5kZXggcnRpLCBSYW5nZVRibEVudHJ5ICpydGUpCiB7 CisJYm9vbAlpbmhlcml0ZWRfdXBkYXRlID0gZmFsc2U7CisKIAlpZiAocmVsLT5yZWxvcHRr aW5kID09IFJFTE9QVF9CQVNFUkVMICYmCiAJCXJlbGF0aW9uX2V4Y2x1ZGVkX2J5X2NvbnN0 cmFpbnRzKHJvb3QsIHJlbCwgcnRlKSkKIAl7CkBAIC0zNzksOCArMzg5LDE4IEBAIHNldF9y ZWxfc2l6ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCX0KIAllbHNl IGlmIChydGUtPmluaCkKIAl7Ci0JCS8qIEl0J3MgYW4gImFwcGVuZCByZWxhdGlvbiIsIHBy b2Nlc3MgYWNjb3JkaW5nbHkgKi8KLQkJc2V0X2FwcGVuZF9yZWxfc2l6ZShyb290LCByZWws IHJ0aSwgcnRlKTsKKwkJLyoKKwkJICogSWYgaXQncyBhIHRhcmdldCByZWxhdGlvbiwgc2V0 IHRoZSBzaXplcyBvZiBjaGlsZHJlbiBpbnN0ZWFkLgorCQkgKiBPdGhlcndpc2UsIHdlJ2xs IGFwcGVuZCB0aGUgb3V0cHV0cyBvZiBjaGlsZHJlbiwgc28gcHJvY2VzcyBpdCBhcworCQkg KiBhbiAiYXBwZW5kIHJlbGF0aW9uIi4KKwkJICovCisJCWlmIChydGkgPT0gcm9vdC0+cGFy c2UtPnJlc3VsdFJlbGF0aW9uKQorCQl7CisJCQlpbmhlcml0ZWRfdXBkYXRlID0gdHJ1ZTsK KwkJCXNldF9pbmhlcml0ZWRfdGFyZ2V0X3JlbF9zaXplcyhyb290LCByZWwsIHJ0aSwgcnRl KTsKKwkJfQorCQllbHNlCisJCQlzZXRfYXBwZW5kX3JlbF9zaXplKHJvb3QsIHJlbCwgcnRp LCBydGUpOwogCX0KIAllbHNlCiAJewpAQCAtNDU3LDggKzQ3Nyw5IEBAIHNldF9yZWxfc2l6 ZShQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJLyoKIAkgKiBXZSBp bnNpc3QgdGhhdCBhbGwgbm9uLWR1bW15IHJlbHMgaGF2ZSBhIG5vbnplcm8gcm93Y291bnQg ZXN0aW1hdGUuCisJICogQW4gZXhjZXB0aW9uIGlzIHRhcmdldCByZWxhdGlvbnMgdGhhdCBh cmUgaW5oZXJpdGFuY2UgcGFyZW50cy4KIAkgKi8KLQlBc3NlcnQocmVsLT5yb3dzID4gMCB8 fCBJU19EVU1NWV9SRUwocmVsKSk7CisJQXNzZXJ0KHJlbC0+cm93cyA+IDAgfHwgSVNfRFVN TVlfUkVMKHJlbCkgfHwgaW5oZXJpdGVkX3VwZGF0ZSk7CiB9CiAKIC8qCkBAIC00NjksMTQg KzQ5MCwyNiBAQCBzdGF0aWMgdm9pZAogc2V0X3JlbF9wYXRobGlzdChQbGFubmVySW5mbyAq cm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCQkJCSBJbmRleCBydGksIFJhbmdlVGJsRW50cnkg KnJ0ZSkKIHsKKwlib29sCWluaGVyaXRlZF91cGRhdGUgPSBmYWxzZTsKKwogCWlmIChJU19E VU1NWV9SRUwocmVsKSkKIAl7CiAJCS8qIFdlIGFscmVhZHkgcHJvdmVkIHRoZSByZWxhdGlv biBlbXB0eSwgc28gbm90aGluZyBtb3JlIHRvIGRvICovCiAJfQogCWVsc2UgaWYgKHJ0ZS0+ aW5oKQogCXsKLQkJLyogSXQncyBhbiAiYXBwZW5kIHJlbGF0aW9uIiwgcHJvY2VzcyBhY2Nv cmRpbmdseSAqLwotCQlzZXRfYXBwZW5kX3JlbF9wYXRobGlzdChyb290LCByZWwsIHJ0aSwg cnRlKTsKKwkJLyoKKwkJICogSWYgaXQncyBhIHRhcmdldCByZWxhdGlvbiwgc2V0IHRoZSBw YXRobGlzdHMgb2YgY2hpbGRyZW4gaW5zdGVhZC4KKwkJICogT3RoZXJ3aXNlLCB3ZSdsbCBh cHBlbmQgdGhlIG91dHB1dHMgb2YgY2hpbGRyZW4sIHNvIHByb2Nlc3MgaXQgYXMKKwkJICog YW4gImFwcGVuZCByZWxhdGlvbiIuCisJCSAqLworCQlpZiAocnRpID09IHJvb3QtPnBhcnNl LT5yZXN1bHRSZWxhdGlvbikKKwkJeworCQkJaW5oZXJpdGVkX3VwZGF0ZSA9IHRydWU7CisJ CQlzZXRfaW5oZXJpdGVkX3RhcmdldF9yZWxfcGF0aGxpc3RzKHJvb3QsIHJlbCwgcnRpLCBy dGUpOworCQl9CisJCWVsc2UKKwkJCXNldF9hcHBlbmRfcmVsX3BhdGhsaXN0KHJvb3QsIHJl bCwgcnRpLCBydGUpOwogCX0KIAllbHNlCiAJewpAQCAtNTMwLDYgKzU2MywxOSBAQCBzZXRf cmVsX3BhdGhsaXN0KFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJfQog CiAJLyoKKwkgKiBJZiB0aGUgcmVsYXRpb24gaXMgYW4gaW5oZXJpdGFuY2UgcGFyZW50IGFu ZCB0aGUgcXVlcnkncyByZXN1bHQKKwkgKiByZWxhdGlvbiwgbm8gcGF0aHMgaGF2ZSBiZWVu IGdlbmVyYXRlZCBmb3IgaXQgeWV0LCBzbyBza2lwIHRoZSBmb2xsb3dpbmcKKwkgKiBzdGVw cy4KKwkgKi8KKwlpZiAoaW5oZXJpdGVkX3VwZGF0ZSkKKwl7CisjaWZkZWYgT1BUSU1JWkVS X0RFQlVHCisJCWRlYnVnX3ByaW50X3JlbChyb290LCByZWwpOworI2VuZGlmCisJCXJldHVy bjsKKwl9CisKKwkvKgogCSAqIEFsbG93IGEgcGx1Z2luIHRvIGVkaXRvcmlhbGl6ZSBvbiB0 aGUgc2V0IG9mIFBhdGhzIGZvciB0aGlzIGJhc2UKIAkgKiByZWxhdGlvbi4gIEl0IGNvdWxk IGFkZCBuZXcgcGF0aHMgKHN1Y2ggYXMgQ3VzdG9tUGF0aHMpIGJ5IGNhbGxpbmcKIAkgKiBh ZGRfcGF0aCgpLCBvciBhZGRfcGFydGlhbF9wYXRoKCkgaWYgcGFyYWxsZWwgYXdhcmUuICBJ dCBjb3VsZCBhbHNvCkBAIC05MjQsNiArOTcwLDIwNyBAQCBzZXRfZm9yZWlnbl9wYXRobGlz dChQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLCBSYW5nZVRibEVudHJ5ICpy dGUpCiB9CiAKIC8qCisgKiBzZXRfaW5oZXJpdGVkX3RhcmdldF9yZWxfc2l6ZXMKKyAqCSAg U2V0IHNpemUgZXN0aW1hdGVzIGZvciB0aGUgY2hpbGQgdGFyZ2V0IHJlbGF0aW9ucworICoK KyAqIFRoZSBwYXNzZWQtaW4gcmVsIHJlcHJlc2VudHMgdGhlIHRhcmdldCByZWxhdGlvbiBv ZiB0aGUgcXVlcnkgdGhhdCBpcworICoga25vd24gdG8gaGF2ZSBpbmhlcml0YW5jZSBjaGls ZHJlbi4gIFRoaXMgaXMgdmVyeSBtdWNoIGxpa2UKKyAqIHNldF9hcHBlbmRfcmVsX3NpemUs IGV4Y2VwdCBpdCBkb2Vzbid0IHNldCB0aGUgc2l6ZSBlc3RpbWF0ZXMgZm9yIHRoZQorICog cGFzc2VkLWluIHJlbCBpdHNlbGYsIGJlY2F1c2Ugd2UgZG9uJ3QgbmVlZCB0byAiYXBwZW5k IiB0aGUgY2hpbGRyZW4KKyAqIGluIHRoaXMgY2FzZS4KKyAqLworc3RhdGljIHZvaWQKK3Nl dF9pbmhlcml0ZWRfdGFyZ2V0X3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0 SW5mbyAqcmVsLAorCQkJCQkJCSAgIEluZGV4IHJ0aSwgUmFuZ2VUYmxFbnRyeSAqcnRlKQor eworCWludAkJCXBhcmVudFJUaW5kZXggPSBydGk7CisJYm9vbAkJaGFzX2xpdmVfY2hpbGRy ZW4gPSBmYWxzZTsKKwlMaXN0Q2VsbCAgICpsOworCVJlbGlkcwkJbGl2ZV9jaGlsZHJlbiA9 IE5VTEw7CisJYm9vbAkJZGlkX3BydW5pbmcgPSBmYWxzZTsKKworCS8qIEd1YXJkIGFnYWlu c3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBkZWVwIGluaGVyaXRhbmNlIHRyZWUu ICovCisJY2hlY2tfc3RhY2tfZGVwdGgoKTsKKworCUFzc2VydChJU19TSU1QTEVfUkVMKHJl bCkpOworCisJLyoKKwkgKiBJZiB0aGUgcGFydGl0aW9uZWQgcmVsYXRpb24gaGFzIGFueSBi YXNlcmVzdHJpY3RpbmZvIHF1YWxzIHRoZW4gd2UKKwkgKiBhdHRlbXB0IHRvIHVzZSB0aGVz ZSBxdWFscyB0byBwcnVuZSBhd2F5IHBhcnRpdGlvbnMgdGhhdCBjYW5ub3QKKwkgKiBwb3Nz aWJseSBjb250YWluIGFueSB0dXBsZXMgbWF0Y2hpbmcgdGhlc2UgcXVhbHMuICBJbiB0aGlz IGNhc2Ugd2UnbGwKKwkgKiBzdG9yZSB0aGUgcmVsaWRzIG9mIGFsbCBwYXJ0aXRpb25zIHdo aWNoIGNvdWxkIHBvc3NpYmx5IGNvbnRhaW4gYQorCSAqIG1hdGNoaW5nIHR1cGxlLCBhbmQg c2tpcCBhbnl0aGluZyBlbHNlIGluIHRoZSBsb29wIGJlbG93LgorCSAqLworCWlmIChlbmFi bGVfcGFydGl0aW9uX3BydW5pbmcgJiYKKwkJcnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEUgJiYKKwkJcmVsLT5iYXNlcmVzdHJpY3RpbmZvICE9IE5JTCkKKwl7 CisJCWxpdmVfY2hpbGRyZW4gPSBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMocmVsKTsK KwkJZGlkX3BydW5pbmcgPSB0cnVlOworCX0KKworCWZvcmVhY2gobCwgcm9vdC0+YXBwZW5k X3JlbF9saXN0KQorCXsKKwkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IChBcHBlbmRSZWxJ bmZvICopIGxmaXJzdChsKTsKKwkJaW50CQkJY2hpbGRSVGluZGV4OworCQlSYW5nZVRibEVu dHJ5ICpjaGlsZFJURTsKKwkJUmVsT3B0SW5mbyAqY2hpbGRyZWw7CisJCVBsYW5uZXJJbmZv ICpzdWJyb290OworCQlMaXN0Q2VsbCAgICpsYzsKKwkJTGlzdAkgICAqdHJhbnNsYXRlZF9l eHByczsKKworCQkvKiBhcHBlbmRfcmVsX2xpc3QgY29udGFpbnMgYWxsIGFwcGVuZCByZWxz OyBpZ25vcmUgb3RoZXJzICovCisJCWlmIChhcHBpbmZvLT5wYXJlbnRfcmVsaWQgIT0gcGFy ZW50UlRpbmRleCkKKwkJCWNvbnRpbnVlOworCisJCWNoaWxkUlRpbmRleCA9IGFwcGluZm8t PmNoaWxkX3JlbGlkOworCQljaGlsZFJURSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbY2hp bGRSVGluZGV4XTsKKworCQkvKgorCQkgKiBUaGUgY2hpbGQgcmVsJ3MgUmVsT3B0SW5mbyB3 YXMgYWxyZWFkeSBjcmVhdGVkIGR1cmluZworCQkgKiBhZGRfYmFzZV9yZWxzX3RvX3F1ZXJ5 LgorCQkgKi8KKwkJY2hpbGRyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIGNoaWxkUlRpbmRl eCk7CisJCUFzc2VydChjaGlsZHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfT1RIRVJfTUVN QkVSX1JFTCk7CisKKwkJaWYgKGRpZF9wcnVuaW5nICYmICFibXNfaXNfbWVtYmVyKGFwcGlu Zm8tPmNoaWxkX3JlbGlkLCBsaXZlX2NoaWxkcmVuKSkKKwkJeworCQkJLyogVGhpcyBwYXJ0 aXRpb24gd2FzIHBydW5lZDsgc2tpcCBpdC4gKi8KKwkJCXNldF9kdW1teV9yZWxfcGF0aGxp c3QoY2hpbGRyZWwpOworCQkJY29udGludWU7CisJCX0KKworCQkvKgorCQkgKiBXZSBoYXZl IHRvIGNvcHkgdGhlIHBhcmVudCdzIHRhcmdldGxpc3QgYW5kIHF1YWxzIHRvIHRoZSBjaGls ZCwKKwkJICogd2l0aCBhcHByb3ByaWF0ZSBzdWJzdGl0dXRpb24gb2YgdmFyaWFibGVzLiAg SWYgYW55IGNvbnN0YW50IGZhbHNlCisJCSAqIG9yIE5VTEwgY2xhdXNlcyB0dXJuIHVwLCB3 ZSBjYW4gZGlzcmVnYXJkIHRoZSBjaGlsZCByaWdodCBhd2F5LgorCQkgKiBJZiBub3QsIHdl IGNhbiBhcHBseSBjb25zdHJhaW50IGV4Y2x1c2lvbiB3aXRoIGp1c3QgdGhlCisJCSAqIGJh c2VyZXN0cmljdGluZm8gcXVhbHMuCisJCSAqLworCQlpZiAoIWFwcGx5X2NoaWxkX2Jhc2Vx dWFscyhyb290LCByZWwsIGNoaWxkcmVsLCBjaGlsZFJURSwgYXBwaW5mbykpCisJCXsKKwkJ CS8qCisJCQkgKiBTb21lIHJlc3RyaWN0aW9uIGNsYXVzZSByZWR1Y2VkIHRvIGNvbnN0YW50 IEZBTFNFIG9yIE5VTEwgYWZ0ZXIKKwkJCSAqIHN1YnN0aXR1dGlvbiwgc28gdGhpcyBjaGls ZCBuZWVkIG5vdCBiZSBzY2FubmVkLgorCQkJICovCisJCQlzZXRfZHVtbXlfcmVsX3BhdGhs aXN0KGNoaWxkcmVsKTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJaWYgKHJlbGF0aW9uX2V4 Y2x1ZGVkX2J5X2NvbnN0cmFpbnRzKHJvb3QsIGNoaWxkcmVsLCBjaGlsZFJURSkpCisJCXsK KwkJCS8qCisJCQkgKiBUaGlzIGNoaWxkIG5lZWQgbm90IGJlIHNjYW5uZWQsIHNvIHdlIGNh biBvbWl0IGl0IGZyb20gdGhlCisJCQkgKiBhcHBlbmRyZWwuCisJCQkgKi8KKwkJCXNldF9k dW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOworCQkJY29udGludWU7CisJCX0KKworCQkv KgorCQkgKiBBZGQgbWlzc2luZyBWYXJzIHRvIGNoaWxkJ3MgcmVsdGFyZ2V0LgorCQkgKgor CQkgKiBjcmVhdGVfaW5oZXJpdGVkX3RhcmdldF9jaGlsZF9yb290KCkgd291bGQndmUgYWRk ZWQgb25seSB0aG9zZSB0aGF0CisJCSAqIGFyZSBuZWVkZWQgZHVlIHRvIGJlaW5nIHJlZmVy ZW5jZWQgaW4gdGhlIHRvcC1sZXZlbCB0bGlzdCAob3Igb25lcworCQkgKiB0aGF0IHByZXBy b2Nlc3NfdGFyZ2V0bGlzdCB0aGlua3MgYXJlIG5lZWRlZCB0byBiZSBpbiB0aGUgdGxpc3Qu KQorCQkgKiBXZSBtYXkgbmVlZCBvdGhlciBhdHRyaWJ1dGVzIHN1Y2ggYXMgdGhvc2UgY29u dGFpbmVkIGluIFdIRVJFCisJCSAqIGNsYXVzZXMsIHdoaWNoIGFyZSBhbHJlYWR5IGNvbXB1 dGVkIGZvciB0aGUgcGFyZW50IGR1cmluZworCQkgKiBkZWNvbnN0cnVjdF9qb2ludHJlZSBw cm9jZXNzaW5nIG9mIHRoZSBvcmlnaW5hbCBxdWVyeSAoY2hpbGQncworCQkgKiBxdWVyeSBu ZXZlciBnb2VzIHRocm91Z2ggZGVjb25zdHJ1Y3Rfam9pbnRyZWUuKQorCQkgKi8KKwkJdHJh bnNsYXRlZF9leHBycyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKHJv b3QsCisJCQkJCQkJCSAgIChOb2RlICopIHJlbC0+cmVsdGFyZ2V0LT5leHBycywKKwkJCQkJ CQkJICAgMSwgJmFwcGluZm8pOworCQlmb3JlYWNoKGxjLCB0cmFuc2xhdGVkX2V4cHJzKQor CQl7CisJCQlFeHByICpleHByID0gbGZpcnN0KGxjKTsKKworCQkJaWYgKCFsaXN0X21lbWJl cihjaGlsZHJlbC0+cmVsdGFyZ2V0LT5leHBycywgZXhwcikpCisJCQkJY2hpbGRyZWwtPnJl bHRhcmdldC0+ZXhwcnMgPQorCQkJCQkJCQlsYXBwZW5kKGNoaWxkcmVsLT5yZWx0YXJnZXQt PmV4cHJzLCBleHByKTsKKwkJfQorCisJCWNoaWxkcmVsLT5oYXNfZWNsYXNzX2pvaW5zID0g cmVsLT5oYXNfZWNsYXNzX2pvaW5zOworCisJCXN1YnJvb3QgPSByb290LT5pbmhfdGFyZ2V0 X2NoaWxkX3Jvb3RzW2NoaWxkUlRpbmRleF07CisKKwkJLyogVHJhbnNsYXRlIGpvaW4gcXVh bHMuICovCisJCWNoaWxkcmVsLT5qb2luaW5mbyA9IChMaXN0ICopCisJCQlhZGp1c3RfYXBw ZW5kcmVsX2F0dHJzKHN1YnJvb3QsCisJCQkJCQkJCSAgIChOb2RlICopIHJlbC0+am9pbmlu Zm8sCisJCQkJCQkJCSAgIDEsICZhcHBpbmZvKTsKKworCQkvKgorCQkgKiBDb21wdXRlIHRo ZSBjaGlsZCdzIHNpemUgdXNpbmcgcG9zc2libHkgbW9kaWZpZWQgc3Vicm9vdC4KKwkJICov CisJCXNldF9yZWxfc2l6ZShzdWJyb290LCBjaGlsZHJlbCwgY2hpbGRSVGluZGV4LCBjaGls ZFJURSk7CisKKwkJLyoKKwkJICogSWYgdGhlIGNoaWxkIGlzIGEgcGFydGl0aW9uZWQgdGFi bGUgaXQgbWF5IGhhdmUgYmVlbiBtYXJrZWQgYXMgYQorCQkgKiBkdW1teSByZWwgZnJvbSBo YXZpbmcgYWxsIGl0cyBwYXJ0aXRpb25zIHBydW5lZC4KKwkJICovCisJCWlmIChJU19EVU1N WV9SRUwoY2hpbGRyZWwpKQorCQkJY29udGludWU7CisKKwkJLyogV2UgaGF2ZSBhdCBsZWFz dCBvbmUgbGl2ZSBjaGlsZC4gKi8KKwkJaGFzX2xpdmVfY2hpbGRyZW4gPSB0cnVlOworCisJ CUFzc2VydChjaGlsZHJlbC0+cm93cyA+IDAgfHwgY2hpbGRSVEUtPmluaCk7CisJfQorCisJ LyoKKwkgKiBBbGwgY2hpbGRyZW4gd2VyZSBleGNsdWRlZCBieSBjb25zdHJhaW50cywgc28g bWFyayB0aGUgcmVsYXRpb24KKwkgKiBhcyBkdW1teS4gIFdlIG11c3QgZG8gdGhpcyBpbiB0 aGlzIHBoYXNlIHNvIHRoYXQgdGhlIHJlbCdzCisJICogZHVtbXktbmVzcyBpcyB2aXNpYmxl IHdoZW4gd2UgZ2VuZXJhdGUgcGF0aHMgZm9yIG90aGVyIHJlbHMuCisJICovCisJaWYgKCFo YXNfbGl2ZV9jaGlsZHJlbikKKwkJc2V0X2R1bW15X3JlbF9wYXRobGlzdChyZWwpOworfQor CisvKgorICogc2V0X2luaGVyaXRlZF90YXJnZXRfcmVsX3BhdGhsaXN0cworICoJICBCdWls ZCBhY2Nlc3MgcGF0aHMgZm9yIHRoZSBjaGlsZCB0YXJnZXQgcmVsYXRpb25zCisgKgorICog U2ltaWxhciB0byBzZXRfYXBwZW5kX3JlbF9wYXRobGlzdCwgZXhjZXB0IHRoYXQgd2UgYnVp bGQgcGF0aHMgb2YgdGhlCisgKiBjaGlsZHJlbiwgYnV0IGRvbid0IGJ1aWxkIGFuIEFwcGVu ZCBwYXRoLgorICovCitzdGF0aWMgdm9pZAorc2V0X2luaGVyaXRlZF90YXJnZXRfcmVsX3Bh dGhsaXN0cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkg ICBJbmRleCBydGksIFJhbmdlVGJsRW50cnkgKnJ0ZSkKK3sKKwlpbnQJCQlwYXJlbnRSVGlu ZGV4ID0gcnRpOworCUxpc3RDZWxsICAgKmw7CisKKwkvKiBHZW5lcmF0ZSBhY2Nlc3MgcGF0 aHMgZm9yIGVhY2ggb2YgdGhlIGNoaWxkcmVuIG9mIHBhc3NlZC1pbiByZWwgKi8KKwlmb3Jl YWNoKGwsIHJvb3QtPmFwcGVuZF9yZWxfbGlzdCkKKwl7CisJCUFwcGVuZFJlbEluZm8gKmFw cGluZm8gPSAoQXBwZW5kUmVsSW5mbyAqKSBsZmlyc3QobCk7CisJCWludAkJCWNoaWxkUlRp bmRleDsKKwkJUmFuZ2VUYmxFbnRyeSAqY2hpbGRSVEU7CisJCVJlbE9wdEluZm8gKmNoaWxk cmVsOworCQlQbGFubmVySW5mbyAqc3Vicm9vdDsKKworCQkvKiBhcHBlbmRfcmVsX2xpc3Qg Y29udGFpbnMgYWxsIGFwcGVuZCByZWxzOyBpZ25vcmUgb3RoZXJzICovCisJCWlmIChhcHBp bmZvLT5wYXJlbnRfcmVsaWQgIT0gcGFyZW50UlRpbmRleCkKKwkJCWNvbnRpbnVlOworCisJ CS8qIFJlLWxvY2F0ZSB0aGUgY2hpbGQgUlRFIGFuZCBSZWxPcHRJbmZvICovCisJCWNoaWxk UlRpbmRleCA9IGFwcGluZm8tPmNoaWxkX3JlbGlkOworCQljaGlsZFJURSA9IHJvb3QtPnNp bXBsZV9ydGVfYXJyYXlbY2hpbGRSVGluZGV4XTsKKwkJY2hpbGRyZWwgPSByb290LT5zaW1w bGVfcmVsX2FycmF5W2NoaWxkUlRpbmRleF07CisJCXN1YnJvb3QgPSByb290LT5pbmhfdGFy Z2V0X2NoaWxkX3Jvb3RzW2NoaWxkUlRpbmRleF07CisJCS8qIFRyYW5zZmVyIHRoZSB2YWx1 ZSBmcm9tIG1haW4gcm9vdCB0byBzdWJyb290LiAqLworCQlzdWJyb290LT50b3RhbF90YWJs ZV9wYWdlcyA9IHJvb3QtPnRvdGFsX3RhYmxlX3BhZ2VzOworCisJCS8qCisJCSAqIENvbXB1 dGUgdGhlIGNoaWxkJ3MgYWNjZXNzIHBhdGhzLgorCQkgKi8KKwkJc2V0X3JlbF9wYXRobGlz dChzdWJyb290LCBjaGlsZHJlbCwgY2hpbGRSVGluZGV4LCBjaGlsZFJURSk7CisJfQorfQor CisvKgogICogc2V0X2FwcGVuZF9yZWxfc2l6ZQogICoJICBTZXQgc2l6ZSBlc3RpbWF0ZXMg Zm9yIGEgc2ltcGxlICJhcHBlbmQgcmVsYXRpb24iCiAgKgpAQCAtMjU2Niw2ICsyODEzLDE0 NiBAQCBnZW5lcmF0ZV9nYXRoZXJfcGF0aHMoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwgYm9vbCBvdmVycmlkZV9yb3dzKQogfQogCiAvKgorICogaW5oZXJpdGFuY2Vf bWFrZV9yZWxfZnJvbV9qb2lubGlzdAorICoJCVBlcmZvcm0gam9pbiBwbGFubmluZyBmb3Ig YWxsIG5vbi1kdW1teSBsZWFmIGluaGVyaXRhbmNlIGNoaWxkcmVuCisgKgkJaW4gdGhlaXIg cm9sZSBhcyBhbiBVUERBVEUvREVMRVRFIHF1ZXJ5J3MgdGFyZ2V0IHJlbGF0aW9uCisgKgor ICogSWYgYSBjaGlsZCByZWxhdGlvbiBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlLCBpdHMgY2hp bGRyZW4gYXJlIHByb2Nlc3NlZCBpbgorICogdHVybiBieSByZWN1cnNpdmVseSBjYWxsaW5n IHRoaXMgZnVuY3Rpb24uCisgKi8KK3N0YXRpYyBSZWxPcHRJbmZvICoKK2luaGVyaXRhbmNl X21ha2VfcmVsX2Zyb21fam9pbmxpc3QoUGxhbm5lckluZm8gKnJvb3QsIExpc3QgKmpvaW5s aXN0KQoreworCUluZGV4CQlyZXN1bHRSZWxhdGlvbiA9IHJvb3QtPnBhcnNlLT5yZXN1bHRS ZWxhdGlvbjsKKwlSZWxPcHRJbmZvICpyZXN1bHRyZWw7CisJTGlzdENlbGwgICAqbGM7CisK KwkvKiBGb3IgVVBEQVRFL0RFTEVURSBxdWVyaWVzLCB0aGUgdG9wIHBhcmVudCBjYW4gb25s eSBldmVyIGJlIGEgdGFibGUuICovCisJQXNzZXJ0KHJvb3QtPnBhcnNlLT5jb21tYW5kVHlw ZSA9PSBDTURfVVBEQVRFIHx8CisJCSAgIHJvb3QtPnBhcnNlLT5jb21tYW5kVHlwZSA9PSBD TURfREVMRVRFKTsKKwlBc3NlcnQocGxhbm5lcl9ydF9mZXRjaChyZXN1bHRSZWxhdGlvbiwg cm9vdCktPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKTsKKwlyZXN1bHRyZWwgPSBmaW5kX2Jh c2VfcmVsKHJvb3QsIHJlc3VsdFJlbGF0aW9uKTsKKworCS8qIE5vdGhpbmcgdG8gZG8uICov CisJaWYgKElTX0RVTU1ZX1JFTChyZXN1bHRyZWwpKQorCQlyZXR1cm4gcmVzdWx0cmVsOwor CisJZm9yZWFjaChsYywgcm9vdC0+YXBwZW5kX3JlbF9saXN0KQorCXsKKwkJQXBwZW5kUmVs SW5mbyAqYXBwaW5mbyA9IGxmaXJzdChsYyk7CisJCVBsYW5uZXJJbmZvICpzdWJyb290Owor CQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKKwkJUmVsT3B0SW5mbyAqY2hpbGRqb2lucmVsOwor CQlMaXN0CSAgICp0cmFuc2xhdGVkX2pvaW5saXN0OworCisJCWlmIChhcHBpbmZvLT5wYXJl bnRfcmVsaWQgIT0gcmVzdWx0UmVsYXRpb24pCisJCQljb250aW51ZTsKKworCQljaGlsZHJl bCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgYXBwaW5mby0+Y2hpbGRfcmVsaWQpOworCisJCS8q IElnbm9yZSBleGNsdWRlZC9wcnVuZWQgY2hpbGRyZW4uICovCisJCWlmIChJU19EVU1NWV9S RUwoY2hpbGRyZWwpKQorCQkJY29udGludWU7CisKKwkJLyogQWRkIHRoaXMgY2hpbGQuICov CisJCXJvb3QtPmluaF90YXJnZXRfY2hpbGRfcmVscyA9IGxhcHBlbmRfaW50KHJvb3QtPmlu aF90YXJnZXRfY2hpbGRfcmVscywKKwkJCQkJCQkJCQkJCSAgYXBwaW5mby0+Y2hpbGRfcmVs aWQpOworCisJCS8qIFBlcmZvcm0gam9pbiBwbGFubmluZyB3aXRoIGNoaWxkIHN1YnJvb3Qu ICovCisJCXN1YnJvb3QgPSByb290LT5pbmhfdGFyZ2V0X2NoaWxkX3Jvb3RzW2FwcGluZm8t PmNoaWxkX3JlbGlkXTsKKwkJQXNzZXJ0KHN1YnJvb3QtPnBhcnNlLT5yZXN1bHRSZWxhdGlv biA+IDApOworCisJCS8qCisJCSAqIE1vZGlmeSBqb2lubGlzdCBzdWNoIHRoYXQgcmVsYXRp b25zIGpvaW5lZCB0byB0aGUgdG9wIHBhcmVudCByZWwKKwkJICogYXBwZWFyIHRvIGJlIGpv aW5lZCB0byB0aGUgY2hpbGQgcmVsIGluc3RlYWQuICBEbyB0aGUgc2FtZSBmb3IKKwkJICog YW55IFNwZWNpYWxKb2luSW5mbyBzdHJ1Y3RzLgorCQkgKi8KKwkJdHJhbnNsYXRlZF9qb2lu bGlzdCA9IChMaXN0ICopCisJCQkJCQlhZGp1c3RfYXBwZW5kcmVsX2F0dHJzKHN1YnJvb3Qs CisJCQkJCQkJCQkJCSAgIChOb2RlICopIGpvaW5saXN0LAorCQkJCQkJCQkJCQkgICAxLCAm YXBwaW5mbyk7CisJCXN1YnJvb3QtPmpvaW5faW5mb19saXN0ID0gKExpc3QgKikKKwkJCQkJ CWFkanVzdF9hcHBlbmRyZWxfYXR0cnMoc3Vicm9vdCwKKwkJCQkJCQkJCQkJICAgKE5vZGUg Kikgcm9vdC0+am9pbl9pbmZvX2xpc3QsCisJCQkJCQkJCQkJCSAgIDEsICZhcHBpbmZvKTsK KworCQkvKgorCQkgKiBTdWItcGFydGl0aW9uZWQgdGFibGVzIGhhdmUgdG8gYmUgcHJvY2Vz c2VkIHJlY3Vyc2l2ZWx5IHVzaW5nIHRoZQorCQkgKiB0cmFuc2xhdGVkIHN1YnJvb3QgYXMg dGhlIHBhcmVudCwgYmVjYXVzZSBBcHBlbmRSZWxJbmZvcyBsaW5rCisJCSAqIHN1Yi1wYXJ0 aXRpb25zIHRvIHRoZWlyIGltbWVkaWF0ZSBwYXJlbnRzLCBub3QgdGhlIHJvb3QgcGFydGl0 aW9uZWQKKwkJICogdGFibGUuCisJCSAqLworCQlpZiAoY2hpbGRyZWwtPnBhcnRfc2NoZW1l ICE9IE5VTEwpCisJCXsKKwkJCS8qCisJCQkgKiBpbmhlcml0YW5jZV9tYWtlX3JlbF9mcm9t X2pvaW5saXN0KCkgcmV0dXJuIHRoZSB0YXJnZXQgcmVsYXRpb24KKwkJCSAqIFJlbE9wdElu Zm8uCisJCQkgKi8KKwkJCWNoaWxkcmVsID0KKwkJCQlpbmhlcml0YW5jZV9tYWtlX3JlbF9m cm9tX2pvaW5saXN0KHN1YnJvb3QsCisJCQkJCQkJCQkJCQkgICB0cmFuc2xhdGVkX2pvaW5s aXN0KTsKKworCQkJLyoKKwkJCSAqIEFkZCB0aGlzIGNoaWxkIHJlbGF0aW9uIGFzIGEgcGxh Y2Vob2xkZXIgaW4gdGhlIHBhcmVudCByb290J3MKKwkJCSAqIGluaF90YXJnZXRfY2hpbGRf cGF0aF9yZWxzIHNvIHRoYXQgaW5oZXJpdGFuY2VfcGxhbm5lciBzZWVzCisJCQkgKiBzYW1l IG51bWJlciBvZiBlbnRyaWVzIGluIGl0IGFzIGluaF90YXJnZXRfY2hpbGRfcmVscy4KKwkJ CSAqLworCQkJcm9vdC0+aW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHMgPQorCQkJCQlsYXBw ZW5kKHJvb3QtPmluaF90YXJnZXRfY2hpbGRfcGF0aF9yZWxzLCBjaGlsZHJlbCk7CisKKwkJ CS8qCisJCQkgKiBBbHNvIHByb3BhZ2F0ZSB0aGlzIGNoaWxkJ3Mgb3duIGNoaWxkcmVuIGlu dG8gdGhlIHBhcmVudCdzCisJCQkgKiBsaXN0LgorCQkJICovCisJCQlpZiAoc3Vicm9vdC0+ aW5oX3RhcmdldF9jaGlsZF9yZWxzICE9IE5JTCkKKwkJCXsKKwkJCQlyb290LT5pbmhfdGFy Z2V0X2NoaWxkX3JlbHMgPQorCQkJCQlsaXN0X2NvbmNhdChyb290LT5pbmhfdGFyZ2V0X2No aWxkX3JlbHMsCisJCQkJCQkJCXN1YnJvb3QtPmluaF90YXJnZXRfY2hpbGRfcmVscyk7CisJ CQkJcm9vdC0+aW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHMgPQorCQkJCQlsaXN0X2NvbmNh dChyb290LT5pbmhfdGFyZ2V0X2NoaWxkX3BhdGhfcmVscywKKwkJCQkJCQkJc3Vicm9vdC0+ aW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHMpOworCQkJfQorCQkJY29udGludWU7CisJCX0K KworCQkvKgorCQkgKiBTaW5jZSB3ZSBhZGRlZCB0aGUgY2hpbGQgcmVsIGRpcmVjdGx5IGlu dG8gdGhlIGpvaW4gdHJlZSwgd2UgbXVzdAorCQkgKiBtb2RpZnkgaXQgdG8gYmUgYSAiYmFz ZSIgcmVsIGluc3RlYWQgb2YgYW4gIm90aGVyIiByZWwsIHdoaWNoIHRoZQorCQkgKiBqb2lu IHBsYW5uaW5nIGNvZGUgZXhwZWN0cyB0aGUgcmVsYXRpb25zIGJlaW5nIGpvaW5lZCB0byBi ZS4KKwkJICovCisJCWNoaWxkcmVsLT5yZWxvcHRraW5kID0gUkVMT1BUX0JBU0VSRUw7CisK KwkJQXNzZXJ0KHN1YnJvb3QtPmpvaW5fcmVsX2xpc3QgPT0gTklMKTsKKwkJQXNzZXJ0KHN1 YnJvb3QtPmpvaW5fcmVsX2hhc2ggPT0gTlVMTCk7CisKKwkJLyogUGVyZm9ybSBqb2luIHBs YW5uaW5nIGFuZCBzYXZlIHRoZSByZXN1bHRpbmcgUmVsT3B0SW5mby4gKi8KKwkJY2hpbGRq b2lucmVsID0gbWFrZV9yZWxfZnJvbV9qb2lubGlzdChzdWJyb290LCB0cmFuc2xhdGVkX2pv aW5saXN0KTsKKworCQkvKgorCQkgKiBUaGUgZm9sbG93aW5nIGltcGxlbWVudHMgZXNzZW50 aWFsbHkgdGhlIHNhbWUgQXNzZXJ0IGFzIGluCisJCSAqIG1ha2Vfb25lX3JlbCwgb3VyIGNh bGxlci4KKwkJICovCisJCUFzc2VydChibXNfZXF1YWwoY2hpbGRqb2lucmVsLT5yZWxpZHMs IHN1YnJvb3QtPmFsbF9iYXNlcmVscykpOworCisJCS8qIENoZWNrIHRoYXQgd2UgZ290IGF0 IGxlYXN0IG9uZSB1c2FibGUgcGF0aCAqLworCQlpZiAoIWNoaWxkam9pbnJlbCB8fCAhY2hp bGRqb2lucmVsLT5jaGVhcGVzdF90b3RhbF9wYXRoIHx8CisJCQljaGlsZGpvaW5yZWwtPmNo ZWFwZXN0X3RvdGFsX3BhdGgtPnBhcmFtX2luZm8gIT0gTlVMTCkKKwkJCWVsb2coRVJST1Is ICJmYWlsZWQgdG8gY29uc3RydWN0IHRoZSBjaGlsZCBqb2luIHJlbGF0aW9uIik7CisKKwkJ LyoKKwkJICogUmVtZW1iZXIgdGhlIHBhdGhzIG9mIHRoaXMgY2hpbGQgdGFyZ2V0IHJlbC4g IGluaGVyaXRhbmNlX3BsYW5uZXIKKwkJICogcGVyZm9ybSByZW1haW5pbmcgc3RlcHMgbmVj ZXNzYXJ5IGZvdCB0aGVzZSBwYXRocyB0byBwcm9kdWNlIHRoZQorCQkgKiBkZXNpcmVkIHRh cmdldGxpc3QuCisJCSAqLworCQlyb290LT5pbmhfdGFyZ2V0X2NoaWxkX3BhdGhfcmVscyA9 CisJCQkJCWxhcHBlbmQocm9vdC0+aW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHMsIGNoaWxk am9pbnJlbCk7CisJfQorCisJcmV0dXJuIHJlc3VsdHJlbDsKK30KKworLyoKICAqIG1ha2Vf cmVsX2Zyb21fam9pbmxpc3QKICAqCSAgQnVpbGQgYWNjZXNzIHBhdGhzIHVzaW5nIGEgImpv aW5saXN0IiB0byBndWlkZSB0aGUgam9pbiBwYXRoIHNlYXJjaC4KICAqCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMgYi9zcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGF0aC9lcXVpdmNsYXNzLmMKaW5kZXggMjM3OTI1MDhiNy4uMTEyNDRm YzU3ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvZXF1aXZjbGFz cy5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2VxdWl2Y2xhc3MuYwpAQCAt MzEsNiArMzEsMTEgQEAKICNpbmNsdWRlICJvcHRpbWl6ZXIvcmVzdHJpY3RpbmZvLmgiCiAj aW5jbHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAKK3R5cGVkZWYgc3RydWN0IHRyYW5zbGF0 ZV9lcV9jbGFzc2VzX2NvbnRleHQKK3sKKwlQbGFubmVySW5mbwkgICpyb290OworCUFwcGVu ZFJlbEluZm8gKmFwcGluZm87Cit9IHRyYW5zbGF0ZV9lcV9jbGFzc2VzX2NvbnRleHQ7CiAK IHN0YXRpYyBFcXVpdmFsZW5jZU1lbWJlciAqYWRkX2VxX21lbWJlcihFcXVpdmFsZW5jZUNs YXNzICplYywKIAkJCSAgRXhwciAqZXhwciwgUmVsaWRzIHJlbGlkcywgUmVsaWRzIG51bGxh YmxlX3JlbGlkcywKQEAgLTY0LDYgKzY5LDEwIEBAIHN0YXRpYyBib29sIHJlY29uc2lkZXJf b3V0ZXJfam9pbl9jbGF1c2UoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJIGJvb2wgb3V0 ZXJfb25fbGVmdCk7CiBzdGF0aWMgYm9vbCByZWNvbnNpZGVyX2Z1bGxfam9pbl9jbGF1c2Uo UGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkJUmVzdHJpY3RJbmZvICpyaW5mbyk7CitzdGF0 aWMgRXF1aXZhbGVuY2VDbGFzcyAqIGFkanVzdF9pbmhlcml0ZWRfZXFfY2xhc3MoUGxhbm5l ckluZm8gKnJvb3QsCisJCQkJCSAgIEVxdWl2YWxlbmNlQ2xhc3MgKm5ld19lYywgQXBwZW5k UmVsSW5mbyAqYXBwaW5mbyk7CitzdGF0aWMgTm9kZSAqdHJhbnNsYXRlX2VxX2NsYXNzZXNf bXV0YXRvcihOb2RlICpub2RlLAorCQkJCQkJCSB0cmFuc2xhdGVfZXFfY2xhc3Nlc19jb250 ZXh0ICpjb250ZXh0KTsKIAogCiAvKgpAQCAtMjE4NSw2ICsyMTk0LDE1NyBAQCBhZGRfY2hp bGRfcmVsX2VxdWl2YWxlbmNlcyhQbGFubmVySW5mbyAqcm9vdCwKIAl9CiB9CiAKKy8qCisg KiB0cmFuc2xhdGVfZXFfY2xhc3Nlc19mb3JfY2hpbGQKKyAqCQlUaGlzIGNyZWF0ZXMgYSBj b3B5IG9mIHRoZSBsaXN0IG9mIEVxdWl2YWxlbmNlQ2xhc3NlcywgZWFjaCBvZgorICoJCXdo aWNoIGlzIHRyYW5zbGF0ZWQgd2l0aCB0aGUgcHJvdmlkZWQgQXBwZW5kUmVsSW5mbworICoK KyAqIFdoZXJlYXMgYWRkX2NoaWxkX3JlbF9lcXVpdmFsZW5jZXMgc2ltcGx5IGFkZHMgY2hp bGQgVmFycyB0byBhIGdpdmVuCisgKiBFcXVpdmFsZW5jZUNsYXNzZXMgaWYgaXQgY29udGFp bnMgdGhlIFZhcnMgb2YgYSBnaXZlbiBwYXJlbnQgcmVsYXRpb24sCisgKiB0aGlzIGNyZWF0 ZXMgYSB3aG9sZSBuZXcgRXF1aXZhbGVuY2VDbGFzc2VzIGNvcGllZCBmcm9tIHRoZSBvcmln aW5hbCBvbmUKKyAqIGFuZCBpZiBpdCBjb250YWlucyBWYXJzIG9mIHRoZSBwYXJlbnQgcmVs YXRpb24sIHRoZXkncmUgKnJlcGxhY2VkKiB3aXRoCisgKiB0aGUgY29ycmVzcG9uZGluZyBj aGlsZCBWYXJzLgorICovCitMaXN0ICoKK3RyYW5zbGF0ZV9lcV9jbGFzc2VzX2Zvcl9jaGls ZChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqZXFfY2xhc3NlcywKKwkJCQkJCQkgICBBcHBl bmRSZWxJbmZvICphcHBpbmZvKQoreworCXRyYW5zbGF0ZV9lcV9jbGFzc2VzX2NvbnRleHQg Y29udGV4dDsKKworCWNvbnRleHQucm9vdCA9IHJvb3Q7CisJY29udGV4dC5hcHBpbmZvID0g YXBwaW5mbzsKKworCXJldHVybiAoTGlzdCAqKSB0cmFuc2xhdGVfZXFfY2xhc3Nlc19tdXRh dG9yKChOb2RlICopIGVxX2NsYXNzZXMsCisJCQkJCQkJCQkJCQkgJmNvbnRleHQpOworfQor CitzdGF0aWMgTm9kZSAqCit0cmFuc2xhdGVfZXFfY2xhc3Nlc19tdXRhdG9yKE5vZGUgKm5v ZGUsCisJCQkJCQkJIHRyYW5zbGF0ZV9lcV9jbGFzc2VzX2NvbnRleHQgKmNvbnRleHQpCit7 CisJaWYgKG5vZGUgPT0gTlVMTCkKKwkJcmV0dXJuIE5VTEw7CisKKwlpZiAoSXNBKG5vZGUs IEVxdWl2YWxlbmNlQ2xhc3MpKQorCXsKKwkJRXF1aXZhbGVuY2VDbGFzcyAqZWMgPSAoRXF1 aXZhbGVuY2VDbGFzcyAqKSBub2RlOworCQlFcXVpdmFsZW5jZUNsYXNzICpuZXdfZWMgPSBt YWtlTm9kZShFcXVpdmFsZW5jZUNsYXNzKTsKKworCQkvKgorCQkgKiBGaXJzdCBtZW1jcHkg dGhlIGV4aXN0aW5nIEVDIHRvIHRoZSBuZXcgRUMsIHdoaWNoIGNyZWF0ZXMgc2hhbGxvdwor CQkgKiBjb3BpZXMgb2YgYWxsIHRoZSBtZW1iZXJzIGFuZCB0aGVuIG1ha2UgY29waWVzIG9m IG1lbWJlcnMgdGhhdAorCQkgKiB3ZSBtaWdodCBjaGFuZ2UgYmVsb3cuCisJCSAqCisJCSAq IFhYWCBjb21tZW50IGluIF9jb3B5UGF0aEtleSBzYXlzIGl0J3MgT0sgdG8gcmVjeWNsZSBF QworCQkgKiBwb2ludGVycywgYnV0IGFzIGxvbmcgYXMgd2UgZG8gdGhlIHdob2xlIHBsYW5u aW5nIGZvciBhCisJCSAqIGdpdmVuIGNoaWxkIHVzaW5nIGEgZ2l2ZW4gcm9vdCwgY29weWlu ZyBFQ3MgbGlrZSB0aGlzCisJCSAqIHNob3VsZG4ndCBiZSBhIHByb2JsZW0uICBNYXliZSwg dGhlIGZvbGxvd2luZyBjb2RlIGNvdWxkCisJCSAqIGJlIGluIF9jb3B5RXF1aXZhbGVuY2VD bGFzcygpPworCQkgKi8KKwkJbWVtY3B5KG5ld19lYywgZWMsIHNpemVvZihFcXVpdmFsZW5j ZUNsYXNzKSk7CisJCW5ld19lYy0+ZWNfb3BmYW1pbGllcyA9IGxpc3RfY29weShlYy0+ZWNf b3BmYW1pbGllcyk7CisJCW5ld19lYy0+ZWNfc291cmNlcyA9IGxpc3RfY29weShlYy0+ZWNf c291cmNlcyk7CisJCW5ld19lYy0+ZWNfZGVyaXZlcyA9IGxpc3RfY29weShlYy0+ZWNfZGVy aXZlcyk7CisJCW5ld19lYy0+ZWNfcmVsaWRzID0gYm1zX2NvcHkoZWMtPmVjX3JlbGlkcyk7 CisJCW5ld19lYy0+ZWNfbWVtYmVycyA9IGxpc3RfY29weShlYy0+ZWNfbWVtYmVycyk7CisK KwkJLyoKKwkJICogTm8gcG9pbnQgaW4gc2VhcmNoaW5nIGlmIHBhcmVudCByZWwgbm90IG1l bnRpb25lZCBpbiBlY2xhc3M7IGJ1dCB3ZQorCQkgKiBjYW4ndCB0ZWxsIHRoYXQgZm9yIHN1 cmUgaWYgcGFyZW50IHJlbCBpcyBpdHNlbGYgYSBjaGlsZC4KKwkJICovCisJCWlmIChibXNf aXNfbWVtYmVyKGNvbnRleHQtPmFwcGluZm8tPnBhcmVudF9yZWxpZCwgZWMtPmVjX3JlbGlk cykpCisJCQluZXdfZWMgPSBhZGp1c3RfaW5oZXJpdGVkX2VxX2NsYXNzKGNvbnRleHQtPnJv b3QsIG5ld19lYywKKwkJCQkJCQkJCQkJICAgY29udGV4dC0+YXBwaW5mbyk7CisKKwkJcmV0 dXJuIChOb2RlICopIG5ld19lYzsKKwl9CisKKwlyZXR1cm4gZXhwcmVzc2lvbl90cmVlX211 dGF0b3Iobm9kZSwgdHJhbnNsYXRlX2VxX2NsYXNzZXNfbXV0YXRvciwKKwkJCQkJCQkJICAg KHZvaWQgKikgY29udGV4dCk7Cit9CisKKy8qCisgKiBhZGp1c3RfaW5oZXJpdGVkX2VxX2Ns YXNzCisgKgkJVGhpcyB0cmFuc2xhdGVzIG1lbWJlcnMgb2YgRXF1aXZhbGVuY2VDbGFzcyBz dWNoIHRoYXQgcmVmZXJlbmNlcyB0bworICoJCWFuIGluaGVyaXRhbmNlIHBhcmVudCByZWxh dGlvbiBhcmUgcmVwbGFjZWQgYnkgdGhlIHJlZmVyZW5jZXMgdG8KKyAqCQlhIGdpdmVuIGNo aWxkIHJlbGF0aW9uCisgKgorICogVGhpcyBwZXJmb3JtcyBpbi1wbGFjZSB1cGRhdGVzIG9m IHRoZSBtZW1iZXJzIG9mIHRoZSBpbnB1dCBzdHJ1Y3QsIHNvIHRoZQorICogY2FsbGVycyBz aG91bGQndmUgbWFkZSBhIGNvcHkgb2YgdGhlIG9yaWdpbmFsIEVDIGZpcnN0LgorICovCitz dGF0aWMgRXF1aXZhbGVuY2VDbGFzcyAqCithZGp1c3RfaW5oZXJpdGVkX2VxX2NsYXNzKFBs YW5uZXJJbmZvICpyb290LCBFcXVpdmFsZW5jZUNsYXNzICpuZXdfZWMsCisJCQkJCQkgIEFw cGVuZFJlbEluZm8gKmFwcGluZm8pCit7CisJTGlzdENlbGwgKmxjOworCVJlbE9wdEluZm8g KnBhcmVudF9yZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIGFwcGluZm8tPnBhcmVudF9yZWxp ZCksCisJCQkgICAqY2hpbGRfcmVsID0gZmluZF9iYXNlX3JlbChyb290LCBhcHBpbmZvLT5j aGlsZF9yZWxpZCk7CisKKwkvKgorCSAqIENoZWNrIGlmIHRoaXMgRUMgY29udGFpbnMgYW4g ZXhwcmVzc2lvbiByZWZlcmVuY2luZyB0aGUgcGFyZW50CisJICogcmVsYXRpb24sIHRyYW5z bGF0ZSBpdCB0byBjaGlsZCwgYW5kIHN0b3JlIGl0IGluIHBsYWNlIG9mCisJICogdGhlIG9y aWdpbmFsIHBhcmVudCBleHByZXNzaW9uLgorCSAqLworCWZvcmVhY2gobGMsIG5ld19lYy0+ ZWNfbWVtYmVycykKKwl7CisJCUVxdWl2YWxlbmNlTWVtYmVyICpjdXJfZW0gPSAoRXF1aXZh bGVuY2VNZW1iZXIgKikgbGZpcnN0KGxjKTsKKworCQlpZiAoY3VyX2VtLT5lbV9pc19jb25z dCkKKwkJCWNvbnRpbnVlOwkJLyogaWdub3JlIGNvbnN0cyBoZXJlICovCisKKwkJLyogRG9l cyBpdCByZWZlcmVuY2UgcGFyZW50X3JlbD8gKi8KKwkJaWYgKGJtc19vdmVybGFwKGN1cl9l bS0+ZW1fcmVsaWRzLCBwYXJlbnRfcmVsLT5yZWxpZHMpKQorCQl7CisJCQkvKiBZZXMsIGdl bmVyYXRlIHRyYW5zZm9ybWVkIGNoaWxkIHZlcnNpb24gKi8KKwkJCUV4cHIJICAgKm5ld19l eHByOworCQkJUmVsaWRzCQluZXdfcmVsaWRzOworCQkJUmVsaWRzCQluZXdfbnVsbGFibGVf cmVsaWRzOworCisJCQluZXdfZXhwciA9IChFeHByICopCisJCQkJYWRqdXN0X2FwcGVuZHJl bF9hdHRycyhyb290LAorCQkJCQkJCQkJICAgKE5vZGUgKikgY3VyX2VtLT5lbV9leHByLAor CQkJCQkJCQkJICAgMSwgJmFwcGluZm8pOworCisJCQkvKgorCQkJICogVHJhbnNmb3JtIGVt X3JlbGlkcyB0byBtYXRjaC4gIE5vdGUgd2UgZG8gKm5vdCogZG8KKwkJCSAqIHB1bGxfdmFy bm9zKGNoaWxkX2V4cHIpIGhlcmUsIGFzIGZvciBleGFtcGxlIHRoZQorCQkJICogdHJhbnNm b3JtYXRpb24gbWlnaHQgaGF2ZSBzdWJzdGl0dXRlZCBhIGNvbnN0YW50LCBidXQgd2UKKwkJ CSAqIGRvbid0IHdhbnQgdGhlIGNoaWxkIG1lbWJlciB0byBiZSBtYXJrZWQgYXMgY29uc3Rh bnQuCisJCQkgKi8KKwkJCW5ld19yZWxpZHMgPSBibXNfZGlmZmVyZW5jZShjdXJfZW0tPmVt X3JlbGlkcywgcGFyZW50X3JlbC0+cmVsaWRzKTsKKwkJCW5ld19yZWxpZHMgPSBibXNfYWRk X21lbWJlcnMobmV3X3JlbGlkcywgY2hpbGRfcmVsLT5yZWxpZHMpOworCisJCQkvKgorCQkJ ICogQW5kIGxpa2V3aXNlIGZvciBudWxsYWJsZV9yZWxpZHMuICBOb3RlIHRoaXMgY29kZSBh c3N1bWVzCisJCQkgKiBwYXJlbnQgYW5kIGNoaWxkIHJlbGlkcyBhcmUgc2luZ2xldG9ucy4K KwkJCSAqLworCQkJbmV3X251bGxhYmxlX3JlbGlkcyA9IGN1cl9lbS0+ZW1fbnVsbGFibGVf cmVsaWRzOworCQkJaWYgKGJtc19vdmVybGFwKG5ld19udWxsYWJsZV9yZWxpZHMsIHBhcmVu dF9yZWwtPnJlbGlkcykpCisJCQl7CisJCQkJbmV3X251bGxhYmxlX3JlbGlkcyA9IGJtc19k aWZmZXJlbmNlKG5ld19udWxsYWJsZV9yZWxpZHMsCisJCQkJCQkJCQkJCQkJIHBhcmVudF9y ZWwtPnJlbGlkcyk7CisJCQkJbmV3X251bGxhYmxlX3JlbGlkcyA9IGJtc19hZGRfbWVtYmVy cyhuZXdfbnVsbGFibGVfcmVsaWRzLAorCQkJCQkJCQkJCQkJCSAgY2hpbGRfcmVsLT5yZWxp ZHMpOworCQkJfQorCisJCQkvKgorCQkJICogVGhlIG5ldyBleHByZXNzaW9uIHNpbXBseSBy ZXBsYWNlcyB0aGUgb2xkIHBhcmVudCBvbmUsIGFuZAorCQkJICogZW1faXNfY2hpbGQgaXMg c2V0IHRvIHRydWUgc28gdGhhdCBpdCdzIHJlY29nbml6ZWQgYXMgc3VjaAorCQkJICogZHVy aW5nIGNoaWxkIHBsYW5uaW5nLgorCQkJICovCisJCQlsZmlyc3QobGMpID0gYWRkX2VxX21l bWJlcihuZXdfZWMsIG5ld19leHByLAorCQkJCQkJCQkJICAgbmV3X3JlbGlkcywgbmV3X251 bGxhYmxlX3JlbGlkcywKKwkJCQkJCQkJCSAgIGZhbHNlLCBjdXJfZW0tPmVtX2RhdGF0eXBl KTsKKwkJfQorCX0KKworCS8qIE5vdyBmaXggdXAgRUMncyByZWxpZHMgc2V0LiAqLworCW5l d19lYy0+ZWNfcmVsaWRzID0gYm1zX2RlbF9tZW1iZXJzKG5ld19lYy0+ZWNfcmVsaWRzLCBw YXJlbnRfcmVsLT5yZWxpZHMpOworCW5ld19lYy0+ZWNfcmVsaWRzID0gYm1zX2FkZF9tZW1i ZXJzKG5ld19lYy0+ZWNfcmVsaWRzLCBjaGlsZF9yZWwtPnJlbGlkcyk7CisKKwlyZXR1cm4g bmV3X2VjOworfQorCiAKIC8qCiAgKiBnZW5lcmF0ZV9pbXBsaWVkX2VxdWFsaXRpZXNfZm9y X2NvbHVtbgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1h aW4uYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKaW5kZXggM2Nl ZGQwMWM5OC4uYzdmMjMyMzg1MiAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vcGxhbm1haW4uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFu bWFpbi5jCkBAIC0yMCw2ICsyMCw3IEBACiAgKi8KICNpbmNsdWRlICJwb3N0Z3Jlcy5oIgog CisjaW5jbHVkZSAibm9kZXMvcGF0aG5vZGVzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2Fw cGVuZGluZm8uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUg Im9wdGltaXplci9pbmhlcml0LmgiCkBAIC0yOSw2ICszMCw3IEBACiAjaW5jbHVkZSAib3B0 aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYWNlaG9sZGVyLmgiCiAj aW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWluLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3By ZXAuaCIKIAogCiAvKgpAQCAtNjAsNiArNjIsNyBAQCBxdWVyeV9wbGFubmVyKFBsYW5uZXJJ bmZvICpyb290LCBMaXN0ICp0bGlzdCwKIAlRdWVyeQkgICAqcGFyc2UgPSByb290LT5wYXJz ZTsKIAlMaXN0CSAgICpqb2lubGlzdDsKIAlSZWxPcHRJbmZvICpmaW5hbF9yZWw7CisJSW5k ZXgJCXJ0aTsKIAogCS8qCiAJICogSW5pdCBwbGFubmVyIGxpc3RzIHRvIGVtcHR5LgpAQCAt MjYwLDE0ICsyNjMsNDIgQEAgcXVlcnlfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwgTGlz dCAqdGxpc3QsCiAJZXh0cmFjdF9yZXN0cmljdGlvbl9vcl9jbGF1c2VzKHJvb3QpOwogCiAJ LyoKKwkgKiBDb25zdHJ1Y3QgdGhlIGFsbF9iYXNlcmVscyBSZWxpZHMgc2V0LgorCSAqLwor CXJvb3QtPmFsbF9iYXNlcmVscyA9IE5VTEw7CisJZm9yIChydGkgPSAxOyBydGkgPCByb290 LT5zaW1wbGVfcmVsX2FycmF5X3NpemU7IHJ0aSsrKQorCXsKKwkJUmVsT3B0SW5mbyAqYnJl bCA9IHJvb3QtPnNpbXBsZV9yZWxfYXJyYXlbcnRpXTsKKworCQkvKiB0aGVyZSBtYXkgYmUg ZW1wdHkgc2xvdHMgY29ycmVzcG9uZGluZyB0byBub24tYmFzZXJlbCBSVEVzICovCisJCWlm IChicmVsID09IE5VTEwpCisJCQljb250aW51ZTsKKworCQlBc3NlcnQoYnJlbC0+cmVsaWQg PT0gcnRpKTsgLyogc2FuaXR5IGNoZWNrIG9uIGFycmF5ICovCisKKwkJLyogaWdub3JlIFJU RXMgdGhhdCBhcmUgIm90aGVyIHJlbHMiICovCisJCWlmIChicmVsLT5yZWxvcHRraW5kICE9 IFJFTE9QVF9CQVNFUkVMKQorCQkJY29udGludWU7CisKKwkJcm9vdC0+YWxsX2Jhc2VyZWxz ID0gYm1zX2FkZF9tZW1iZXIocm9vdC0+YWxsX2Jhc2VyZWxzLCBicmVsLT5yZWxpZCk7CisJ fQorCisJLyoKKwkgKiBBZGQgY2hpbGQgc3Vicm9vdHMgbmVlZGVkIGR1cmluZyBwbGFubmlu ZyBmb3IgaW5kaXZpZHVhbCBjaGlsZCB0YXJnZXRzLgorCSAqLworCWlmIChwYXJzZS0+cmVz dWx0UmVsYXRpb24gJiYKKwkJcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtwYXJzZS0+cmVzdWx0 UmVsYXRpb25dLT5pbmgpCisJeworCQlyb290LT5pbmhfdGFyZ2V0X2NoaWxkX3Jvb3RzID0g KFBsYW5uZXJJbmZvICoqKQorCQkJCQkJCQkJCXBhbGxvYzAocm9vdC0+c2ltcGxlX3JlbF9h cnJheV9zaXplICoKKwkJCQkJCQkJCQkJCXNpemVvZihQbGFubmVySW5mbyAqKSk7CisJCWFk ZF9pbmhlcml0ZWRfdGFyZ2V0X2NoaWxkX3Jvb3RzKHJvb3QpOworCX0KKworCS8qCiAJICog UmVhZHkgdG8gZG8gdGhlIHByaW1hcnkgcGxhbm5pbmcuCiAJICovCiAJZmluYWxfcmVsID0g bWFrZV9vbmVfcmVsKHJvb3QsIGpvaW5saXN0KTsKIAotCS8qIENoZWNrIHRoYXQgd2UgZ290 IGF0IGxlYXN0IG9uZSB1c2FibGUgcGF0aCAqLwotCWlmICghZmluYWxfcmVsIHx8ICFmaW5h bF9yZWwtPmNoZWFwZXN0X3RvdGFsX3BhdGggfHwKLQkJZmluYWxfcmVsLT5jaGVhcGVzdF90 b3RhbF9wYXRoLT5wYXJhbV9pbmZvICE9IE5VTEwpCi0JCWVsb2coRVJST1IsICJmYWlsZWQg dG8gY29uc3RydWN0IHRoZSBqb2luIHJlbGF0aW9uIik7Ci0KIAlyZXR1cm4gZmluYWxfcmVs OwogfQpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j IGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCmluZGV4IDFhNThkNzMz ZmEuLmNmNjQ2ODhlNzYgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFu L3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK QEAgLTEzMCw4ICsxMzAsNyBAQCB0eXBlZGVmIHN0cnVjdAogc3RhdGljIE5vZGUgKnByZXBy b2Nlc3NfZXhwcmVzc2lvbihQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqZXhwciwgaW50IGtp bmQpOwogc3RhdGljIHZvaWQgcHJlcHJvY2Vzc19xdWFsX2NvbmRpdGlvbnMoUGxhbm5lcklu Zm8gKnJvb3QsIE5vZGUgKmp0bm9kZSk7CiBzdGF0aWMgdm9pZCBpbmhlcml0YW5jZV9wbGFu bmVyKFBsYW5uZXJJbmZvICpyb290KTsKLXN0YXRpYyB2b2lkIGdyb3VwaW5nX3BsYW5uZXIo UGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2VfdXBkYXRlLAotCQkJCSBkb3Vi bGUgdHVwbGVfZnJhY3Rpb24pOworc3RhdGljIHZvaWQgZ3JvdXBpbmdfcGxhbm5lcihQbGFu bmVySW5mbyAqcm9vdCwgZG91YmxlIHR1cGxlX2ZyYWN0aW9uKTsKIHN0YXRpYyBncm91cGlu Z19zZXRzX2RhdGEgKnByZXByb2Nlc3NfZ3JvdXBpbmdfc2V0cyhQbGFubmVySW5mbyAqcm9v dCk7CiBzdGF0aWMgTGlzdCAqcmVtYXBfdG9fZ3JvdXBjbGF1c2VfaWR4KExpc3QgKmdyb3Vw Q2xhdXNlLCBMaXN0ICpnc2V0cywKIAkJCQkJCSBpbnQgKnRsZXJlZl90b19jb2xudW1fbWFw KTsKQEAgLTI0MSw2ICsyNDAsMTAgQEAgc3RhdGljIHZvaWQgYXBwbHlfc2NhbmpvaW5fdGFy Z2V0X3RvX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCSAgIExpc3QgKnNjYW5q b2luX3RhcmdldHNfY29udGFpbl9zcmZzLAogCQkJCQkJCSAgIGJvb2wgc2NhbmpvaW5fdGFy Z2V0X3BhcmFsbGVsX3NhZmUsCiAJCQkJCQkJICAgYm9vbCB0bGlzdF9zYW1lX2V4cHJzKTsK K3N0YXRpYyB2b2lkIGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRoc19ndXRzKFBsYW5u ZXJJbmZvICpyb290LAorCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVsLAorCQkJCQkJCQkJUGF0 aFRhcmdldCAqc2NhbmpvaW5fdGFyZ2V0LAorCQkJCQkJCQkJYm9vbCB0bGlzdF9zYW1lX2V4 cHJzKTsKIHN0YXRpYyB2b2lkIGNyZWF0ZV9wYXJ0aXRpb253aXNlX2dyb3VwaW5nX3BhdGhz KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJUmVsT3B0SW5mbyAqaW5wdXRfcmVsLAog CQkJCQkJCQkJUmVsT3B0SW5mbyAqZ3JvdXBlZF9yZWwsCkBAIC05OTcsNyArMTAwMCw3IEBA IHN1YnF1ZXJ5X3BsYW5uZXIoUGxhbm5lckdsb2JhbCAqZ2xvYiwgUXVlcnkgKnBhcnNlLAog CQlydF9mZXRjaChwYXJzZS0+cmVzdWx0UmVsYXRpb24sIHBhcnNlLT5ydGFibGUpLT5pbmgp CiAJCWluaGVyaXRhbmNlX3BsYW5uZXIocm9vdCk7CiAJZWxzZQotCQlncm91cGluZ19wbGFu bmVyKHJvb3QsIGZhbHNlLCB0dXBsZV9mcmFjdGlvbik7CisJCWdyb3VwaW5nX3BsYW5uZXIo cm9vdCwgdHVwbGVfZnJhY3Rpb24pOwogCiAJLyoKIAkgKiBDYXB0dXJlIHRoZSBzZXQgb2Yg b3V0ZXItbGV2ZWwgcGFyYW0gSURzIHdlIGhhdmUgYWNjZXNzIHRvLCBmb3IgdXNlIGluCkBA IC0xMTczLDEzICsxMTc2LDM4IEBAIHByZXByb2Nlc3NfcGh2X2V4cHJlc3Npb24oUGxhbm5l ckluZm8gKnJvb3QsIEV4cHIgKmV4cHIpCiAgKgkgIGluaGVyaXRhbmNlIHNldC4KICAqCiAg KiBXZSBoYXZlIHRvIGhhbmRsZSB0aGlzIGNhc2UgZGlmZmVyZW50bHkgZnJvbSBjYXNlcyB3 aGVyZSBhIHNvdXJjZSByZWxhdGlvbgotICogaXMgYW4gaW5oZXJpdGFuY2Ugc2V0LiBTb3Vy Y2UgaW5oZXJpdGFuY2UgaXMgZXhwYW5kZWQgYXQgdGhlIGJvdHRvbSBvZiB0aGUKLSAqIHBs YW4gdHJlZSAoc2VlIGFsbHBhdGhzLmMpLCBidXQgdGFyZ2V0IGluaGVyaXRhbmNlIGhhcyB0 byBiZSBleHBhbmRlZCBhdAotICogdGhlIHRvcC4gIFRoZSByZWFzb24gaXMgdGhhdCBmb3Ig VVBEQVRFLCBlYWNoIHRhcmdldCByZWxhdGlvbiBuZWVkcyBhCi0gKiBkaWZmZXJlbnQgdGFy Z2V0bGlzdCBtYXRjaGluZyBpdHMgb3duIGNvbHVtbiBzZXQuICBGb3J0dW5hdGVseSwKKyAq IGlzIGFuIGluaGVyaXRhbmNlIHNldCwgd2hlcmUgb3V0cHV0cyBvZiBhbGwgdGhlIGNoaWxk cmVuIGFyZSBjb21iaW5lZCBhbmQKKyAqIGNvbWJpbmVkIG91dHB1dCBjb25zdW1lZCB1c2lu ZyB0aGUgc291cmNlIHJlbGF0aW9uJ3MgKHBhcmVudCdzKSBjb2x1bW4gc2V0LgorICogRm9y IFVQREFURSwgZWFjaCB0YXJnZXQgcmVsYXRpb24sIHdoZXJlIHRoZSBxdWVyeSdzIG91dHB1 dCB3aWxsIGdvLCBuZWVkcworICogYSBkaWZmZXJlbnQgdGFyZ2V0bGlzdCBtYXRjaGluZyBp dHMgb3duIGNvbHVtbiBzZXQuICBTbywgd2Ugd2lsbCBuZWVkIHRvCisgKiB0cmFuc2xhdGUg dGhlIHF1ZXJ5IHN1Y2ggdGhhdCBpdCBwcm9kdWNlcyB0aGUgZGVzaXJlZCBvdXRwdXQgcmVx dWlyZWQgYnkKKyAqIGVhY2ggb2YgdGhlIGNoaWxkIHRhcmdldCByZWxhdGlvbnMgYW5kIHBs YW4gZWFjaCBzZXBhcmF0ZWx5LiAgRm9ydHVuYXRlbHksCiAgKiB0aGUgVVBEQVRFL0RFTEVU RSB0YXJnZXQgY2FuIG5ldmVyIGJlIHRoZSBudWxsYWJsZSBzaWRlIG9mIGFuIG91dGVyIGpv aW4sCiAgKiBzbyBpdCdzIE9LIHRvIGdlbmVyYXRlIHRoZSBwbGFuIHRoaXMgd2F5LgogICoK KyAqIFBsYW5uaW5nIHN0ZXBzIHRoYXQgbmVlZCB0byBiZSBwZXJmb3JtZWQgc2VwYXJhdGVs eSBmb3IgZWFjaCBjaGlsZCBhbmQKKyAqIGFueSBwcmVsaW1pbmFyeSBwcm9jZXNzaW5nIG5l ZWRlZCBmb3IgdGhhdCBhcmUgaGFuZGxlZCBieSB0aGUgZm9sbG93aW5nCisgKiBzdWItcm91 dGluZXMgb2YgcXVlcnlfcGxhbm5lcjoKKyAqCisgKglhZGRfaW5oZXJpdGVkX3RhcmdldF9j aGlsZF9yb290cyAtIHRoaXMgY3JlYXRlcyBjb3BpZXMgb2YgUGxhbm5lckluZm8gZm9yCisg KgllYWNoIGNoaWxkIGFmdGVyIHF1ZXJ5X3BsYW5uZXIgaGFzIGZpbmlzaGVkIHByb2Nlc3Np bmcgdGhlIGpvaW4gdHJlZSwgd2l0aAorICoJdHJhbnNsYXRlZCBjb3BpZXMgb2YgcGFyc2V0 cmVlLCBlcV9jbGFzc2VzLCBldGMuCisgKgorICoJc2V0X2luaGVyaXRlZF90YXJnZXRfcmVs X3NpemVzIC0gdGhpcyBzZXRzIHNpemUgZXN0aW1hdGVzIGZvciBjaGlsZAorICoJcmVsYXRp b25zCisgKgorICoJc2V0X2luaGVyaXRlZF90YXJnZXRfcmVsX3BhdGhsaXN0cyAtIHRoaXMg Y3JlYXRlcyBQYXRocyBmb3Igc2Nhbm5pbmcKKyAqCWluZGl2aWR1YWwgY2hpbGQgcmVsYXRp b25zCisgKgorICoJaW5oZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlzdCAtIHRoaXMg dHJhbnNsYXRlcyB0aGUgam9pbnRyZWUsCisgKglyZXBsYWNpbmcgdGhlIHRhcmdldCByZWxh dGlvbiBpbiB0aGUgb3JpZ2luYWwgam9pbnRyZWUgKHRoZSByb290IHBhcmVudCkKKyAqCWJ5 IGluZGl2aWR1YWwgY2hpbGQgdGFyZ2V0IHJlbGF0aW9ucyBhbmQgcGVyZm9ybXMgam9pbiBw bGFubmluZyBvbiB0aGUKKyAqCXJlc3VsdGluZyBqb2luIHRyZWUsIHNhdmluZyB0aGUgUmVs T3B0SW5mb3Mgb2YgcmVzdWx0aW5nIGpvaW4gcmVsYXRpb25zCisgKglpbnRvIHRoZSB0b3At bGV2ZWwgUGxhbm5lckluZm8KKyAqCisgKiBGaW5hbGx5LCBoZXJlIHdlIGFkanVzdCB0aGUg UGF0aHMgb2YgaW5kaXZpZHVhbCBjaGlsZHJlbiBkbyB0aGF0IHRoZXkKKyAqIHByb2R1Y2Vz IHRoZSBkZXNpcmVkIHRhcmdldGxpc3QuCisgKgogICogUmV0dXJucyBub3RoaW5nOyB0aGUg dXNlZnVsIG91dHB1dCBpcyBpbiB0aGUgUGF0aHMgd2UgYXR0YWNoIHRvCiAgKiB0aGUgKFVQ UEVSUkVMX0ZJTkFMLCBOVUxMKSB1cHBlcnJlbCBzdG9yZWQgaW4gKnJvb3QuCiAgKgpAQCAt MTE5MSwxNCArMTIxOSw4IEBAIGluaGVyaXRhbmNlX3BsYW5uZXIoUGxhbm5lckluZm8gKnJv b3QpCiB7CiAJUXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CiAJaW50CQkJdG9wX3Bh cmVudFJUaW5kZXggPSBwYXJzZS0+cmVzdWx0UmVsYXRpb247Ci0JQml0bWFwc2V0ICAqc3Vi cXVlcnlSVGluZGV4ZXM7Ci0JQml0bWFwc2V0ICAqbW9kaWZpYWJsZUFSSWluZGV4ZXM7CiAJ aW50CQkJbm9taW5hbFJlbGF0aW9uID0gLTE7CiAJSW5kZXgJCXJvb3RSZWxhdGlvbiA9IDA7 Ci0JTGlzdAkgICAqZmluYWxfcnRhYmxlID0gTklMOwotCWludAkJCXNhdmVfcmVsX2FycmF5 X3NpemUgPSAwOwotCVJlbE9wdEluZm8gKipzYXZlX3JlbF9hcnJheSA9IE5VTEw7Ci0JQXBw ZW5kUmVsSW5mbyAqKnNhdmVfYXBwZW5kX3JlbF9hcnJheSA9IE5VTEw7CiAJTGlzdAkgICAq c3VicGF0aHMgPSBOSUw7CiAJTGlzdAkgICAqc3Vicm9vdHMgPSBOSUw7CiAJTGlzdAkgICAq cmVzdWx0UmVsYXRpb25zID0gTklMOwpAQCAtMTIwNiw3MCArMTIyOCw1MiBAQCBpbmhlcml0 YW5jZV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290KQogCUxpc3QJICAgKnJldHVybmluZ0xp c3RzID0gTklMOwogCUxpc3QJICAgKnJvd01hcmtzOwogCVJlbE9wdEluZm8gKmZpbmFsX3Jl bDsKLQlMaXN0Q2VsbCAgICpsYzsKLQlJbmRleAkJcnRpOworCUxpc3RDZWxsICAgKmxjMSwK KwkJCSAgICpsYzI7CiAJUmFuZ2VUYmxFbnRyeSAqcGFyZW50X3J0ZTsKLQlQbGFubmVySW5m byAqcGFyZW50X3Jvb3Q7Ci0JUXVlcnkJICAgKnBhcmVudF9wYXJzZTsKLQlCaXRtYXBzZXQg ICpwYXJlbnRfcmVsaWRzID0gYm1zX21ha2Vfc2luZ2xldG9uKHRvcF9wYXJlbnRSVGluZGV4 KTsKLQlQbGFubmVySW5mbyAqKnBhcmVudF9yb290cyA9IE5VTEw7CisJTGlzdAkgICAqdGxp c3Q7CisJc3RhbmRhcmRfcXBfZXh0cmEgcXBfZXh0cmE7CisJUmVsT3B0SW5mbyAqcGxhbm5l ZF9yZWw7CiAKKwkvKiBJbmhlcml0YW5jZSBpcyBuZXZlciB1c2VkIGZvciBpbnNlcnQuICov CiAJQXNzZXJ0KHBhcnNlLT5jb21tYW5kVHlwZSAhPSBDTURfSU5TRVJUKTsKIAogCS8qCi0J ICogV2UgZ2VuZXJhdGUgYSBtb2RpZmllZCBpbnN0YW5jZSBvZiB0aGUgb3JpZ2luYWwgUXVl cnkgZm9yIGVhY2ggdGFyZ2V0Ci0JICogcmVsYXRpb24sIHBsYW4gdGhhdCwgYW5kIHB1dCBh bGwgdGhlIHBsYW5zIGludG8gYSBsaXN0IHRoYXQgd2lsbCBiZQotCSAqIGNvbnRyb2xsZWQg YnkgYSBzaW5nbGUgTW9kaWZ5VGFibGUgbm9kZS4gIEFsbCB0aGUgaW5zdGFuY2VzIHNoYXJl IHRoZQotCSAqIHNhbWUgcmFuZ2V0YWJsZSwgYnV0IGVhY2ggaW5zdGFuY2UgbXVzdCBoYXZl IGl0cyBvd24gc2V0IG9mIHN1YnF1ZXJ5Ci0JICogUlRFcyB3aXRoaW4gdGhlIGZpbmlzaGVk IHJhbmdldGFibGUgYmVjYXVzZSAoMSkgdGhleSBhcmUgbGlrZWx5IHRvIGdldAotCSAqIHNj cmliYmxlZCBvbiBkdXJpbmcgcGxhbm5pbmcsIGFuZCAoMikgaXQncyBub3QgaW5jb25jZWl2 YWJsZSB0aGF0Ci0JICogc3VicXVlcmllcyBjb3VsZCBnZXQgcGxhbm5lZCBkaWZmZXJlbnRs eSBpbiBkaWZmZXJlbnQgY2FzZXMuICBXZSBuZWVkCi0JICogbm90IGNyZWF0ZSBkdXBsaWNh dGUgY29waWVzIG9mIG90aGVyIFJURSBraW5kcywgaW4gcGFydGljdWxhciBub3QgdGhlCi0J ICogdGFyZ2V0IHJlbGF0aW9ucywgYmVjYXVzZSB0aGV5IGRvbid0IGhhdmUgZWl0aGVyIG9m IHRob3NlIGlzc3Vlcy4gIE5vdAotCSAqIGhhdmluZyB0byBkdXBsaWNhdGUgdGhlIHRhcmdl dCByZWxhdGlvbnMgaXMgaW1wb3J0YW50IGJlY2F1c2UgZG9pbmcgc28KLQkgKiAoMSkgd291 bGQgcmVzdWx0IGluIGEgcmFuZ2V0YWJsZSBvZiBsZW5ndGggTyhOXjIpIGZvciBOIHRhcmdl dHMsIHdpdGgKLQkgKiBhdCBsZWFzdCBPKE5eMykgd29yayBleHBlbmRlZCBoZXJlOyBhbmQg KDIpIHdvdWxkIGdyZWF0bHkgY29tcGxpY2F0ZQotCSAqIG1hbmFnZW1lbnQgb2YgdGhlIHJv d01hcmtzIGxpc3QuCisJICogTGV0IHF1ZXJ5X3BsYW5uZXIgZ2VuZXJhdGUgdGhlIGFjY2Vz cyBwYXRocyBmb3IgdGhlIHF1ZXJ5IGZvciBlYWNoCisJICogdGFyZ2V0IGNoaWxkIHJlbGF0 aW9uLgogCSAqCi0JICogVG8gYmVnaW4gd2l0aCwgZ2VuZXJhdGUgYSBiaXRtYXBzZXQgb2Yg dGhlIHJlbGlkcyBvZiB0aGUgc3VicXVlcnkgUlRFcy4KKwkgKiBGaXJzdCwgc2F2ZSB0aGUg dW5leHBhbmRlZCB2ZXJzaW9uIG9mIHRoZSBxdWVyeSdzIHRhcmdldGxpc3QuCisJICogY3Jl YXRlX2luaGVyaXRlZF90YXJnZXRfY2hpbGRfcm9vdCB3aWxsIHVzZSBpdCBhcyBiYXNlIHdo ZW4gZXhwYW5kaW5nCisJICogaXQgZm9yIGEgZ2l2ZW4gY2hpbGQgcmVsYXRpb24gYXMgdGhl IHF1ZXJ5J3MgdGFyZ2V0IHJlbGF0aW9uIGluc3RlYWQKKwkgKiBvZiB0aGUgcGFyZW50Lgog CSAqLwotCXN1YnF1ZXJ5UlRpbmRleGVzID0gTlVMTDsKLQlydGkgPSAxOwotCWZvcmVhY2go bGMsIHBhcnNlLT5ydGFibGUpCi0JewotCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3Rf bm9kZShSYW5nZVRibEVudHJ5LCBsYyk7Ci0KLQkJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVf U1VCUVVFUlkpCi0JCQlzdWJxdWVyeVJUaW5kZXhlcyA9IGJtc19hZGRfbWVtYmVyKHN1YnF1 ZXJ5UlRpbmRleGVzLCBydGkpOwotCQlydGkrKzsKLQl9CisJcm9vdC0+dW5leHBhbmRlZF90 bGlzdCA9IGxpc3RfY29weShyb290LT5wYXJzZS0+dGFyZ2V0TGlzdCk7CisJdGxpc3QgPSBw cmVwcm9jZXNzX3RhcmdldGxpc3Qocm9vdCk7CisJcm9vdC0+cHJvY2Vzc2VkX3RsaXN0ID0g dGxpc3Q7CisJcXBfZXh0cmEudGxpc3QgPSB0bGlzdDsKKwlxcF9leHRyYS5hY3RpdmVXaW5k b3dzID0gTklMOworCXFwX2V4dHJhLmdyb3VwQ2xhdXNlID0gTklMOworCXBsYW5uZWRfcmVs ID0gcXVlcnlfcGxhbm5lcihyb290LCB0bGlzdCwgc3RhbmRhcmRfcXBfY2FsbGJhY2ssICZx cF9leHRyYSk7CiAKIAkvKgotCSAqIE5leHQsIHdlIHdhbnQgdG8gaWRlbnRpZnkgd2hpY2gg QXBwZW5kUmVsSW5mbyBpdGVtcyBjb250YWluIHJlZmVyZW5jZXMKLQkgKiB0byBhbnkgb2Yg dGhlIGFmb3Jlc2FpZCBzdWJxdWVyeSBSVEVzLiAgVGhlc2UgaXRlbXMgd2lsbCBuZWVkIHRv IGJlCi0JICogY29waWVkIGFuZCBtb2RpZmllZCB0byBhZGp1c3QgdGhlaXIgc3VicXVlcnkg cmVmZXJlbmNlczsgd2hlcmVhcyB0aGUKLQkgKiBvdGhlciBvbmVzIG5lZWQgbm90IGJlIHRv dWNoZWQuICBJdCdzIHdvcnRoIGJlaW5nIHRlbnNlIG92ZXIgdGhpcwotCSAqIGJlY2F1c2Ug d2UgY2FuIHVzdWFsbHkgYXZvaWQgcHJvY2Vzc2luZyBtb3N0IG9mIHRoZSBBcHBlbmRSZWxJ bmZvCi0JICogaXRlbXMsIHRoZXJlYnkgc2F2aW5nIE8oTl4yKSBzcGFjZSBhbmQgdGltZSB3 aGVuIHRoZSB0YXJnZXQgaXMgYSBsYXJnZQotCSAqIGluaGVyaXRhbmNlIHRyZWUuICBXZSBj YW4gaWRlbnRpZnkgQXBwZW5kUmVsSW5mbyBpdGVtcyBieSB0aGVpcgotCSAqIGNoaWxkX3Jl bGlkLCBzaW5jZSB0aGF0IHNob3VsZCBiZSB1bmlxdWUgd2l0aGluIHRoZSBsaXN0LgorCSAq IElmIGl0IHR1cm5lZCBvdXQgZHVyaW5nIHF1ZXJ5IHBsYW5uaW5nIHRoYXQgYWxsIHRoZSBj aGlsZHJlbiBhcmUgZHVtbXkKKwkgKiAocHJ1bmVkIG9yIGV4Y2x1ZGVkIGJ5IGNvbnN0cmFp bnRzKSwgbm8gbmVlZCB0byBkbyB0aGUgc3RlcHMgYmVsb3cuCiAJICovCi0JbW9kaWZpYWJs ZUFSSWluZGV4ZXMgPSBOVUxMOwotCWlmIChzdWJxdWVyeVJUaW5kZXhlcyAhPSBOVUxMKQor CWlmIChJU19EVU1NWV9SRUwocGxhbm5lZF9yZWwpKQogCXsKLQkJZm9yZWFjaChsYywgcm9v dC0+YXBwZW5kX3JlbF9saXN0KQotCQl7Ci0JCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0g bGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywgbGMpOwotCi0JCQlpZiAoYm1zX2lzX21lbWJl cihhcHBpbmZvLT5wYXJlbnRfcmVsaWQsIHN1YnF1ZXJ5UlRpbmRleGVzKSB8fAotCQkJCWJt c19pc19tZW1iZXIoYXBwaW5mby0+Y2hpbGRfcmVsaWQsIHN1YnF1ZXJ5UlRpbmRleGVzKSB8 fAotCQkJCWJtc19vdmVybGFwKHB1bGxfdmFybm9zKChOb2RlICopIGFwcGluZm8tPnRyYW5z bGF0ZWRfdmFycyksCi0JCQkJCQkJc3VicXVlcnlSVGluZGV4ZXMpKQotCQkJCW1vZGlmaWFi bGVBUklpbmRleGVzID0gYm1zX2FkZF9tZW1iZXIobW9kaWZpYWJsZUFSSWluZGV4ZXMsCi0J CQkJCQkJCQkJCQkJICBhcHBpbmZvLT5jaGlsZF9yZWxpZCk7Ci0JCX0KKwkJLyoKKwkJICog UmVzdWx0IHBhdGgsIGV2ZW4gaWYgZHVtbXksIG11c3QgZ28gaW50byBvdXRlciBxdWVyeSdz IEZJTkFMCisJCSAqIHVwcGVycmVsLgorCQkgKi8KKwkJZmluYWxfcmVsID0gZmV0Y2hfdXBw ZXJfcmVsKHJvb3QsIFVQUEVSUkVMX0ZJTkFMLCBOVUxMKTsKKwkJZmluYWxfcmVsLT5yZWx0 YXJnZXQgPSBjcmVhdGVfcGF0aHRhcmdldChyb290LCB0bGlzdCk7CisJCW1hcmtfZHVtbXlf cmVsKGZpbmFsX3JlbCk7CisJCXJldHVybjsKIAl9CiAKKwlBc3NlcnQocGxhbm5lZF9yZWwt PnJlbGlkID09IHRvcF9wYXJlbnRSVGluZGV4KTsKKwlBc3NlcnQocGxhbm5lZF9yZWwtPnJl bG9wdGtpbmQgPT0gUkVMT1BUX0JBU0VSRUwpOworCiAJLyoKIAkgKiBJZiB0aGUgcGFyZW50 IFJURSBpcyBhIHBhcnRpdGlvbmVkIHRhYmxlLCB3ZSBzaG91bGQgdXNlIHRoYXQgYXMgdGhl CiAJICogbm9taW5hbCB0YXJnZXQgcmVsYXRpb24sIGJlY2F1c2UgdGhlIFJURXMgYWRkZWQg Zm9yIHBhcnRpdGlvbmVkIHRhYmxlcwpAQCAtMTI3Nyw3ICsxMjgxLDcgQEAgaW5oZXJpdGFu Y2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAkgKiBub3QgYXBwZWFyIGFueXdoZXJl IGVsc2UgaW4gdGhlIHBsYW4sIHNvIHRoZSBjb25mdXNpb24gZXhwbGFpbmVkIGJlbG93CiAJ ICogZm9yIG5vbi1wYXJ0aXRpb25pbmcgaW5oZXJpdGFuY2UgY2FzZXMgaXMgbm90IHBvc3Np YmxlLgogCSAqLwotCXBhcmVudF9ydGUgPSBydF9mZXRjaCh0b3BfcGFyZW50UlRpbmRleCwg cm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2go dG9wX3BhcmVudFJUaW5kZXgsIHJvb3QpOwogCWlmIChwYXJlbnRfcnRlLT5yZWxraW5kID09 IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCiAJewogCQlub21pbmFsUmVsYXRpb24gPSB0 b3BfcGFyZW50UlRpbmRleDsKQEAgLTEyODUsNjYgKzEyODksMzQgQEAgaW5oZXJpdGFuY2Vf cGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAl9CiAKIAkvKgotCSAqIFRoZSBQbGFubmVy SW5mbyBmb3IgZWFjaCBjaGlsZCBpcyBvYnRhaW5lZCBieSB0cmFuc2xhdGluZyB0aGUgcmVs ZXZhbnQKLQkgKiBtZW1iZXJzIG9mIHRoZSBQbGFubmVySW5mbyBmb3IgaXRzIGltbWVkaWF0 ZSBwYXJlbnQsIHdoaWNoIHdlIGZpbmQKLQkgKiB1c2luZyB0aGUgcGFyZW50X3JlbGlkIGlu IGl0cyBBcHBlbmRSZWxJbmZvLiAgV2Ugc2F2ZSB0aGUgUGxhbm5lckluZm8KLQkgKiBmb3Ig ZWFjaCBwYXJlbnQgaW4gYW4gYXJyYXkgaW5kZXhlZCBieSByZWxpZCBmb3IgZmFzdCByZXRy aWV2YWwuIFNpbmNlCi0JICogdGhlIG1heGltdW0gbnVtYmVyIG9mIHBhcmVudHMgaXMgbGlt aXRlZCBieSB0aGUgbnVtYmVyIG9mIFJURXMgaW4gdGhlCi0JICogcXVlcnksIHdlIHVzZSB0 aGF0IG51bWJlciB0byBhbGxvY2F0ZSB0aGUgYXJyYXkuIEFuIGV4dHJhIGVudHJ5IGlzCi0J ICogbmVlZGVkIHNpbmNlIHJlbGlkcyBzdGFydCBmcm9tIDEuCisJICogR2V0IG9uIHdpdGgg ZmluYWxpemluZyB0aGUgcGF0aCBmb3IgZWFjaCBjaGlsZCB0YXJnZXQgcmVsYXRpb24gYnkK KwkgKiBhZGp1c3QgdGhlaXIgUGF0aHMgdG8gZ2V0IGRlc2lyZWQgUGF0aFRhcmdldC4KIAkg Ki8KLQlwYXJlbnRfcm9vdHMgPSAoUGxhbm5lckluZm8gKiopIHBhbGxvYzAoKGxpc3RfbGVu Z3RoKHBhcnNlLT5ydGFibGUpICsgMSkgKgotCQkJCQkJCQkJCQlzaXplb2YoUGxhbm5lcklu Zm8gKikpOwotCXBhcmVudF9yb290c1t0b3BfcGFyZW50UlRpbmRleF0gPSByb290OwotCi0J LyoKLQkgKiBBbmQgbm93IHdlIGNhbiBnZXQgb24gd2l0aCBnZW5lcmF0aW5nIGEgcGxhbiBm b3IgZWFjaCBjaGlsZCB0YWJsZS4KLQkgKi8KLQlmb3JlYWNoKGxjLCByb290LT5hcHBlbmRf cmVsX2xpc3QpCisJZm9yYm90aChsYzEsIHJvb3QtPmluaF90YXJnZXRfY2hpbGRfcmVscywK KwkJCWxjMiwgcm9vdC0+aW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHMpCiAJewotCQlBcHBl bmRSZWxJbmZvICphcHBpbmZvID0gbGZpcnN0X25vZGUoQXBwZW5kUmVsSW5mbywgbGMpOwot CQlQbGFubmVySW5mbyAqc3Vicm9vdDsKKwkJSW5kZXgJCWNoaWxkUlRpbmRleCA9IGxmaXJz dF9pbnQobGMxKTsKKwkJUmVsT3B0SW5mbyAqY2hpbGRiYXNlcmVsID0gZmluZF9iYXNlX3Jl bChyb290LCBjaGlsZFJUaW5kZXgpOworCQlSZWxPcHRJbmZvICpjaGlsZGpvaW5yZWwgPSBs Zmlyc3QobGMyKTsKKwkJUGxhbm5lckluZm8gKnN1YnJvb3QgPSByb290LT5pbmhfdGFyZ2V0 X2NoaWxkX3Jvb3RzW2NoaWxkUlRpbmRleF07CisJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8g PSByb290LT5hcHBlbmRfcmVsX2FycmF5W2NoaWxkUlRpbmRleF07CiAJCVJhbmdlVGJsRW50 cnkgKmNoaWxkX3J0ZTsKIAkJUmVsT3B0SW5mbyAqc3ViX2ZpbmFsX3JlbDsKKwkJTGlzdENl bGwgICAqbGM7CiAJCVBhdGgJICAgKnN1YnBhdGg7CisJCUxpc3QJICAgKnRsaXN0ID0gc3Vi cm9vdC0+cHJvY2Vzc2VkX3RsaXN0OworCQlQYXRoVGFyZ2V0ICpzY2Fuam9pbl90YXJnZXQ7 CisJCWJvb2wJCXRsaXN0X3NhbWVfZXhwcnM7CiAKLQkJLyogYXBwZW5kX3JlbF9saXN0IGNv bnRhaW5zIGFsbCBhcHBlbmQgcmVsczsgaWdub3JlIG90aGVycyAqLwotCQlpZiAoIWJtc19p c19tZW1iZXIoYXBwaW5mby0+cGFyZW50X3JlbGlkLCBwYXJlbnRfcmVsaWRzKSkKLQkJCWNv bnRpbnVlOwotCi0JCS8qCi0JCSAqIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeSgpIGFsd2F5 cyBwcm9jZXNzZXMgYSBwYXJlbnQgYmVmb3JlIGFueSBvZgotCQkgKiB0aGF0IHBhcmVudCdz IGNoaWxkcmVuLCBzbyB0aGUgcGFyZW50X3Jvb3QgZm9yIHRoaXMgcmVsYXRpb24gc2hvdWxk Ci0JCSAqIGFscmVhZHkgYmUgYXZhaWxhYmxlLgotCQkgKi8KLQkJcGFyZW50X3Jvb3QgPSBw YXJlbnRfcm9vdHNbYXBwaW5mby0+cGFyZW50X3JlbGlkXTsKLQkJQXNzZXJ0KHBhcmVudF9y b290ICE9IE5VTEwpOwotCQlwYXJlbnRfcGFyc2UgPSBwYXJlbnRfcm9vdC0+cGFyc2U7Ci0K LQkJLyoKLQkJICogV2UgbmVlZCBhIHdvcmtpbmcgY29weSBvZiB0aGUgUGxhbm5lckluZm8g c28gdGhhdCB3ZSBjYW4gY29udHJvbAotCQkgKiBwcm9wYWdhdGlvbiBvZiBpbmZvcm1hdGlv biBiYWNrIHRvIHRoZSBtYWluIGNvcHkuCi0JCSAqLwotCQlzdWJyb290ID0gbWFrZU5vZGUo UGxhbm5lckluZm8pOwotCQltZW1jcHkoc3Vicm9vdCwgcGFyZW50X3Jvb3QsIHNpemVvZihQ bGFubmVySW5mbykpOwotCi0JCS8qCi0JCSAqIEdlbmVyYXRlIG1vZGlmaWVkIHF1ZXJ5IHdp dGggdGhpcyByZWwgYXMgdGFyZ2V0LiAgV2UgZmlyc3QgYXBwbHkKLQkJICogYWRqdXN0X2Fw cGVuZHJlbF9hdHRycywgd2hpY2ggY29waWVzIHRoZSBRdWVyeSBhbmQgY2hhbmdlcwotCQkg KiByZWZlcmVuY2VzIHRvIHRoZSBwYXJlbnQgUlRFIHRvIHJlZmVyIHRvIHRoZSBjdXJyZW50 IGNoaWxkIFJURSwKLQkJICogdGhlbiBmb29sIGFyb3VuZCB3aXRoIHN1YnF1ZXJ5IFJURXMu Ci0JCSAqLwotCQlzdWJyb290LT5wYXJzZSA9IChRdWVyeSAqKQotCQkJYWRqdXN0X2FwcGVu ZHJlbF9hdHRycyhwYXJlbnRfcm9vdCwKLQkJCQkJCQkJICAgKE5vZGUgKikgcGFyZW50X3Bh cnNlLAotCQkJCQkJCQkgICAxLCAmYXBwaW5mbyk7CisJCUFzc2VydChzdWJyb290ICE9IE5V TEwpOworCQlBc3NlcnQoc3Vicm9vdC0+cGFyc2UtPnJlc3VsdFJlbGF0aW9uID09IGNoaWxk UlRpbmRleCk7CiAKIAkJLyoKIAkJICogSWYgdGhlcmUgYXJlIHNlY3VyaXR5UXVhbHMgYXR0 YWNoZWQgdG8gdGhlIHBhcmVudCwgbW92ZSB0aGVtIHRvIHRoZQogCQkgKiBjaGlsZCByZWwg KHRoZXkndmUgYWxyZWFkeSBiZWVuIHRyYW5zZm9ybWVkIHByb3Blcmx5IGZvciB0aGF0KS4K IAkJICovCi0JCXBhcmVudF9ydGUgPSBydF9mZXRjaChhcHBpbmZvLT5wYXJlbnRfcmVsaWQs IHN1YnJvb3QtPnBhcnNlLT5ydGFibGUpOwotCQljaGlsZF9ydGUgPSBydF9mZXRjaChhcHBp bmZvLT5jaGlsZF9yZWxpZCwgc3Vicm9vdC0+cGFyc2UtPnJ0YWJsZSk7CisJCXBhcmVudF9y dGUgPSBwbGFubmVyX3J0X2ZldGNoKGFwcGluZm8tPnBhcmVudF9yZWxpZCwgc3Vicm9vdCk7 CisJCWNoaWxkX3J0ZSA9IHBsYW5uZXJfcnRfZmV0Y2goYXBwaW5mby0+Y2hpbGRfcmVsaWQs IHN1YnJvb3QpOwogCQljaGlsZF9ydGUtPnNlY3VyaXR5UXVhbHMgPSBwYXJlbnRfcnRlLT5z ZWN1cml0eVF1YWxzOwogCQlwYXJlbnRfcnRlLT5zZWN1cml0eVF1YWxzID0gTklMOwogCkBA IC0xMzU2LDI0ICsxMzI4LDEyIEBAIGluaGVyaXRhbmNlX3BsYW5uZXIoUGxhbm5lckluZm8g KnJvb3QpCiAJCQkocm9vdFJlbGF0aW9uICE9IDApID8gSU5IS0lORF9QQVJUSVRJT05FRCA6 IElOSEtJTkRfSU5IRVJJVEVEOwogCiAJCS8qCi0JCSAqIElmIHRoaXMgY2hpbGQgaXMgZnVy dGhlciBwYXJ0aXRpb25lZCwgcmVtZW1iZXIgaXQgYXMgYSBwYXJlbnQuCi0JCSAqIFNpbmNl IGEgcGFydGl0aW9uZWQgdGFibGUgZG9lcyBub3QgaGF2ZSBhbnkgZGF0YSwgd2UgZG9uJ3Qg bmVlZCB0bwotCQkgKiBjcmVhdGUgYSBwbGFuIGZvciBpdCwgYW5kIHdlIGNhbiBzdG9wIHBy b2Nlc3NpbmcgaXQgaGVyZS4gIFdlIGRvLAotCQkgKiBob3dldmVyLCBuZWVkIHRvIHJlbWVt YmVyIGl0cyBtb2RpZmllZCBQbGFubmVySW5mbyBmb3IgdXNlIHdoZW4KLQkJICogcHJvY2Vz c2luZyBpdHMgY2hpbGRyZW4sIHNpbmNlIHdlJ2xsIHVwZGF0ZSB0aGVpciB2YXJub3MgYmFz ZWQgb24KLQkJICogdGhlIGRlbHRhIGZyb20gaW1tZWRpYXRlIHBhcmVudCB0byBjaGlsZCwg bm90IGZyb20gdG9wIHRvIGNoaWxkLgotCQkgKgotCQkgKiBOb3RlOiBhIHZlcnkgbm9uLW9i dmlvdXMgcG9pbnQgaXMgdGhhdCB3ZSBoYXZlIG5vdCB5ZXQgYWRkZWQKLQkJICogZHVwbGlj YXRlIHN1YnF1ZXJ5IFJURXMgdG8gdGhlIHN1YnJvb3QncyBydGFibGUuICBXZSBtdXN0bid0 LAotCQkgKiBiZWNhdXNlIHRoZW4gaXRzIGNoaWxkcmVuIHdvdWxkIGhhdmUgdHdvIHNldHMg b2YgZHVwbGljYXRlcywKLQkJICogY29uZnVzaW5nIG1hdHRlcnMuCisJCSAqIElnbm9yZSBh IHBhcnRpdGlvbmVkIGNoaWxkLiAgSW5zdGVhZCwgdGhlIHBhdGhzIG9mIGl0cyBjaGlsZHJl biB3aWxsCisJCSAqIGJlIGFkZGVkIHRvIHN1YnBhdGhzLgogCQkgKi8KLQkJaWYgKGNoaWxk X3J0ZS0+aW5oKQorCQlpZiAoY2hpbGRqb2lucmVsLT5wYXJ0X3NjaGVtZSkKIAkJewotCQkJ QXNzZXJ0KGNoaWxkX3J0ZS0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxF KTsKLQkJCXBhcmVudF9yZWxpZHMgPSBibXNfYWRkX21lbWJlcihwYXJlbnRfcmVsaWRzLCBh cHBpbmZvLT5jaGlsZF9yZWxpZCk7Ci0JCQlwYXJlbnRfcm9vdHNbYXBwaW5mby0+Y2hpbGRf cmVsaWRdID0gc3Vicm9vdDsKLQorCQkJQXNzZXJ0KGNoaWxkX3J0ZS0+aW5oKTsKIAkJCWNv bnRpbnVlOwogCQl9CiAKQEAgLTE0MDEsMTYxICsxMzYxLDU3IEBAIGluaGVyaXRhbmNlX3Bs YW5uZXIoUGxhbm5lckluZm8gKnJvb3QpCiAJCWlmIChub21pbmFsUmVsYXRpb24gPCAwKQog CQkJbm9taW5hbFJlbGF0aW9uID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7CiAKLQkJLyoKLQkJ ICogVGhlIHJvd01hcmtzIGxpc3QgbWlnaHQgY29udGFpbiByZWZlcmVuY2VzIHRvIHN1YnF1 ZXJ5IFJURXMsIHNvCi0JCSAqIG1ha2UgYSBjb3B5IHRoYXQgd2UgY2FuIGFwcGx5IENoYW5n ZVZhck5vZGVzIHRvLiAgKEZvcnR1bmF0ZWx5LCB0aGUKLQkJICogZXhlY3V0b3IgZG9lc24n dCBuZWVkIHRvIHNlZSB0aGUgbW9kaWZpZWQgY29waWVzIC0tLSB3ZSBjYW4ganVzdAotCQkg KiBwYXNzIGl0IHRoZSBvcmlnaW5hbCByb3dNYXJrcyBsaXN0LikKLQkJICovCi0JCXN1YnJv b3QtPnJvd01hcmtzID0gY29weU9iamVjdChwYXJlbnRfcm9vdC0+cm93TWFya3MpOwotCi0J CS8qCi0JCSAqIFRoZSBhcHBlbmRfcmVsX2xpc3QgbGlrZXdpc2UgbWlnaHQgY29udGFpbiBy ZWZlcmVuY2VzIHRvIHN1YnF1ZXJ5Ci0JCSAqIFJURXMgKGlmIGFueSBzdWJxdWVyaWVzIHdl cmUgZmxhdHRlbmFibGUgVU5JT04gQUxMcykuICBTbyBwcmVwYXJlCi0JCSAqIHRvIGFwcGx5 IENoYW5nZVZhck5vZGVzIHRvIHRoYXQsIHRvby4gIEFzIGV4cGxhaW5lZCBhYm92ZSwgd2Ug b25seQotCQkgKiB3YW50IHRvIGNvcHkgaXRlbXMgdGhhdCBhY3R1YWxseSBjb250YWluIHN1 Y2ggcmVmZXJlbmNlczsgdGhlIHJlc3QKLQkJICogY2FuIGp1c3QgZ2V0IGxpbmtlZCBpbnRv IHRoZSBzdWJyb290J3MgYXBwZW5kX3JlbF9saXN0LgotCQkgKgotCQkgKiBJZiB3ZSBrbm93 IHRoZXJlIGFyZSBubyBzdWNoIHJlZmVyZW5jZXMsIHdlIGNhbiBqdXN0IHVzZSB0aGUgb3V0 ZXIKLQkJICogYXBwZW5kX3JlbF9saXN0IHVubW9kaWZpZWQuCi0JCSAqLwotCQlpZiAobW9k aWZpYWJsZUFSSWluZGV4ZXMgIT0gTlVMTCkKLQkJewotCQkJTGlzdENlbGwgICAqbGMyOwot Ci0JCQlzdWJyb290LT5hcHBlbmRfcmVsX2xpc3QgPSBOSUw7Ci0JCQlmb3JlYWNoKGxjMiwg cGFyZW50X3Jvb3QtPmFwcGVuZF9yZWxfbGlzdCkKLQkJCXsKLQkJCQlBcHBlbmRSZWxJbmZv ICphcHBpbmZvMiA9IGxmaXJzdF9ub2RlKEFwcGVuZFJlbEluZm8sIGxjMik7Ci0KLQkJCQlp ZiAoYm1zX2lzX21lbWJlcihhcHBpbmZvMi0+Y2hpbGRfcmVsaWQsIG1vZGlmaWFibGVBUklp bmRleGVzKSkKLQkJCQkJYXBwaW5mbzIgPSBjb3B5T2JqZWN0KGFwcGluZm8yKTsKLQotCQkJ CXN1YnJvb3QtPmFwcGVuZF9yZWxfbGlzdCA9IGxhcHBlbmQoc3Vicm9vdC0+YXBwZW5kX3Jl bF9saXN0LAotCQkJCQkJCQkJCQkJICAgYXBwaW5mbzIpOwotCQkJfQotCQl9Ci0KLQkJLyoK LQkJICogQWRkIHBsYWNlaG9sZGVycyB0byB0aGUgY2hpbGQgUXVlcnkncyByYW5nZXRhYmxl IGxpc3QgdG8gZmlsbCB0aGUKLQkJICogUlQgaW5kZXhlcyBhbHJlYWR5IHJlc2VydmVkIGZv ciBzdWJxdWVyaWVzIGluIHByZXZpb3VzIGNoaWxkcmVuLgotCQkgKiBUaGVzZSB3b24ndCBi ZSByZWZlcmVuY2VkLCBzbyB0aGVyZSdzIG5vIG5lZWQgdG8gbWFrZSB0aGVtIHZlcnkKLQkJ ICogdmFsaWQtbG9va2luZy4KLQkJICovCi0JCXdoaWxlIChsaXN0X2xlbmd0aChzdWJyb290 LT5wYXJzZS0+cnRhYmxlKSA8IGxpc3RfbGVuZ3RoKGZpbmFsX3J0YWJsZSkpCi0JCQlzdWJy b290LT5wYXJzZS0+cnRhYmxlID0gbGFwcGVuZChzdWJyb290LT5wYXJzZS0+cnRhYmxlLAot CQkJCQkJCQkJCQkgbWFrZU5vZGUoUmFuZ2VUYmxFbnRyeSkpOwotCi0JCS8qCi0JCSAqIElm IHRoaXMgaXNuJ3QgdGhlIGZpcnN0IGNoaWxkIFF1ZXJ5LCBnZW5lcmF0ZSBkdXBsaWNhdGVz IG9mIGFsbAotCQkgKiBzdWJxdWVyeSBSVEVzLCBhbmQgYWRqdXN0IFZhciBudW1iZXJpbmcg dG8gcmVmZXJlbmNlIHRoZQotCQkgKiBkdXBsaWNhdGVzLiBUbyBzaW1wbGlmeSB0aGUgbG9v cCBsb2dpYywgd2Ugc2NhbiB0aGUgb3JpZ2luYWwgcnRhYmxlCi0JCSAqIG5vdCB0aGUgY29w eSBqdXN0IG1hZGUgYnkgYWRqdXN0X2FwcGVuZHJlbF9hdHRyczsgdGhhdCBzaG91bGQgYmUg T0sKLQkJICogc2luY2Ugc3VicXVlcnkgUlRFcyBjb3VsZG4ndCBjb250YWluIGFueSByZWZl cmVuY2VzIHRvIHRoZSB0YXJnZXQKLQkJICogcmVsLgotCQkgKi8KLQkJaWYgKGZpbmFsX3J0 YWJsZSAhPSBOSUwgJiYgc3VicXVlcnlSVGluZGV4ZXMgIT0gTlVMTCkKLQkJewotCQkJTGlz dENlbGwgICAqbHI7Ci0KLQkJCXJ0aSA9IDE7Ci0JCQlmb3JlYWNoKGxyLCBwYXJlbnRfcGFy c2UtPnJ0YWJsZSkKLQkJCXsKLQkJCQlSYW5nZVRibEVudHJ5ICpydGUgPSBsZmlyc3Rfbm9k ZShSYW5nZVRibEVudHJ5LCBscik7Ci0KLQkJCQlpZiAoYm1zX2lzX21lbWJlcihydGksIHN1 YnF1ZXJ5UlRpbmRleGVzKSkKLQkJCQl7Ci0JCQkJCUluZGV4CQluZXdydGk7Ci0KLQkJCQkJ LyoKLQkJCQkJICogVGhlIFJURSBjYW4ndCBjb250YWluIGFueSByZWZlcmVuY2VzIHRvIGl0 cyBvd24gUlQKLQkJCQkJICogaW5kZXgsIGV4Y2VwdCBpbiBpdHMgc2VjdXJpdHlRdWFscywg c28gd2UgY2FuIHNhdmUgYQotCQkJCQkgKiBmZXcgY3ljbGVzIGJ5IGFwcGx5aW5nIENoYW5n ZVZhck5vZGVzIHRvIHRoZSByZXN0IG9mCi0JCQkJCSAqIHRoZSByYW5nZXRhYmxlIGJlZm9y ZSB3ZSBhcHBlbmQgdGhlIFJURSB0byBpdC4KLQkJCQkJICovCi0JCQkJCW5ld3J0aSA9IGxp c3RfbGVuZ3RoKHN1YnJvb3QtPnBhcnNlLT5ydGFibGUpICsgMTsKLQkJCQkJQ2hhbmdlVmFy Tm9kZXMoKE5vZGUgKikgc3Vicm9vdC0+cGFyc2UsIHJ0aSwgbmV3cnRpLCAwKTsKLQkJCQkJ Q2hhbmdlVmFyTm9kZXMoKE5vZGUgKikgc3Vicm9vdC0+cm93TWFya3MsIHJ0aSwgbmV3cnRp LCAwKTsKLQkJCQkJLyogU2tpcCBwcm9jZXNzaW5nIHVuY2hhbmdpbmcgcGFydHMgb2YgYXBw ZW5kX3JlbF9saXN0ICovCi0JCQkJCWlmIChtb2RpZmlhYmxlQVJJaW5kZXhlcyAhPSBOVUxM KQotCQkJCQl7Ci0JCQkJCQlMaXN0Q2VsbCAgICpsYzI7Ci0KLQkJCQkJCWZvcmVhY2gobGMy LCBzdWJyb290LT5hcHBlbmRfcmVsX2xpc3QpCi0JCQkJCQl7Ci0JCQkJCQkJQXBwZW5kUmVs SW5mbyAqYXBwaW5mbzIgPSBsZmlyc3Rfbm9kZShBcHBlbmRSZWxJbmZvLCBsYzIpOwotCi0J CQkJCQkJaWYgKGJtc19pc19tZW1iZXIoYXBwaW5mbzItPmNoaWxkX3JlbGlkLAotCQkJCQkJ CQkJCQkgIG1vZGlmaWFibGVBUklpbmRleGVzKSkKLQkJCQkJCQkJQ2hhbmdlVmFyTm9kZXMo KE5vZGUgKikgYXBwaW5mbzIsIHJ0aSwgbmV3cnRpLCAwKTsKLQkJCQkJCX0KLQkJCQkJfQot CQkJCQlydGUgPSBjb3B5T2JqZWN0KHJ0ZSk7Ci0JCQkJCUNoYW5nZVZhck5vZGVzKChOb2Rl ICopIHJ0ZS0+c2VjdXJpdHlRdWFscywgcnRpLCBuZXdydGksIDApOwotCQkJCQlzdWJyb290 LT5wYXJzZS0+cnRhYmxlID0gbGFwcGVuZChzdWJyb290LT5wYXJzZS0+cnRhYmxlLAotCQkJ CQkJCQkJCQkJCSBydGUpOwotCQkJCX0KLQkJCQlydGkrKzsKLQkJCX0KLQkJfQotCi0JCS8q IFRoZXJlIHNob3VsZG4ndCBiZSBhbnkgT0ogaW5mbyB0byB0cmFuc2xhdGUsIGFzIHlldCAq LwotCQlBc3NlcnQoc3Vicm9vdC0+am9pbl9pbmZvX2xpc3QgPT0gTklMKTsKLQkJLyogYW5k IHdlIGhhdmVuJ3QgY3JlYXRlZCBQbGFjZUhvbGRlckluZm9zLCBlaXRoZXIgKi8KLQkJQXNz ZXJ0KHN1YnJvb3QtPnBsYWNlaG9sZGVyX2xpc3QgPT0gTklMKTsKLQotCQkvKiBHZW5lcmF0 ZSBQYXRoKHMpIGZvciBhY2Nlc3NpbmcgdGhpcyByZXN1bHQgcmVsYXRpb24gKi8KLQkJZ3Jv dXBpbmdfcGxhbm5lcihzdWJyb290LCB0cnVlLCAwLjAgLyogcmV0cmlldmUgYWxsIHR1cGxl cyAqLyApOworCQkvKiBBcHBseSB0aGUgdG9wLWxldmVsIHRhcmdldGxpc3QgdG8gY2hpbGRq b2lucmVsJ3MgcGF0aC4gKi8KKwkJc2NhbmpvaW5fdGFyZ2V0ID0gY3JlYXRlX3BhdGh0YXJn ZXQoc3Vicm9vdCwgdGxpc3QpOworCQl0bGlzdF9zYW1lX2V4cHJzID0gZXF1YWwoc2Nhbmpv aW5fdGFyZ2V0LT5leHBycywKKwkJCQkJCQkJIGNoaWxkam9pbnJlbC0+cmVsdGFyZ2V0LT5l eHBycyk7CisJCWFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRoc19ndXRzKHN1YnJvb3Qs IGNoaWxkam9pbnJlbCwKKwkJCQkJCQkJCQkJc2NhbmpvaW5fdGFyZ2V0LAorCQkJCQkJCQkJ CQl0bGlzdF9zYW1lX2V4cHJzKTsKIAogCQkvKgorCQkgKiBUcmFuc2ZlciBwYXRocyBmcm9t IGNoaWxkam9pbnJlbCdzIHBhdGhsaXN0IHRvIHN1Yl9maW5hbF9yZWwuCiAJCSAqIFNlbGVj dCBjaGVhcGVzdCBwYXRoIGluIGNhc2UgdGhlcmUncyBtb3JlIHRoYW4gb25lLiAgV2UgYWx3 YXlzIHJ1bgogCQkgKiBtb2RpZmljYXRpb24gcXVlcmllcyB0byBjb25jbHVzaW9uLCBzbyB3 ZSBjYXJlIG9ubHkgZm9yIHRoZQogCQkgKiBjaGVhcGVzdC10b3RhbCBwYXRoLgogCQkgKi8K IAkJc3ViX2ZpbmFsX3JlbCA9IGZldGNoX3VwcGVyX3JlbChzdWJyb290LCBVUFBFUlJFTF9G SU5BTCwgTlVMTCk7CisJCWZvcmVhY2gobGMsIGNoaWxkam9pbnJlbC0+cGF0aGxpc3QpCisJ CQlhZGRfcGF0aChzdWJfZmluYWxfcmVsLCAoUGF0aCAqKSBsZmlyc3QobGMpKTsKIAkJc2V0 X2NoZWFwZXN0KHN1Yl9maW5hbF9yZWwpOwogCQlzdWJwYXRoID0gc3ViX2ZpbmFsX3JlbC0+ Y2hlYXBlc3RfdG90YWxfcGF0aDsKIAogCQkvKgotCQkgKiBJZiB0aGlzIGNoaWxkIHJlbCB3 YXMgZXhjbHVkZWQgYnkgY29uc3RyYWludCBleGNsdXNpb24sIGV4Y2x1ZGUgaXQKLQkJICog ZnJvbSB0aGUgcmVzdWx0IHBsYW4uCisJCSAqIElmIHRoZSBjaGlsZGJhc2VyZWwgYmVsb25n cyB0byBhIHNpbmdsZSBGRFcsIHNvIGRvZXMgdGhlCisJCSAqIGNvcnJlc3BvbmRpbmcgc3Vi X2ZpbmFsX3JlbC4KIAkJICovCi0JCWlmIChJU19EVU1NWV9QQVRIKHN1YnBhdGgpKQotCQkJ Y29udGludWU7CisJCXN1Yl9maW5hbF9yZWwtPnNlcnZlcmlkID0gY2hpbGRiYXNlcmVsLT5z ZXJ2ZXJpZDsKKwkJc3ViX2ZpbmFsX3JlbC0+dXNlcmlkID0gY2hpbGRiYXNlcmVsLT51c2Vy aWQ7CisJCXN1Yl9maW5hbF9yZWwtPnVzZXJpZGlzY3VycmVudCA9IGNoaWxkYmFzZXJlbC0+ dXNlcmlkaXNjdXJyZW50OworCQlzdWJfZmluYWxfcmVsLT5mZHdyb3V0aW5lID0gY2hpbGRi YXNlcmVsLT5mZHdyb3V0aW5lOwogCiAJCS8qCi0JCSAqIElmIHRoaXMgaXMgdGhlIGZpcnN0 IG5vbi1leGNsdWRlZCBjaGlsZCwgaXRzIHBvc3QtcGxhbm5pbmcgcnRhYmxlCi0JCSAqIGJl Y29tZXMgdGhlIGluaXRpYWwgY29udGVudHMgb2YgZmluYWxfcnRhYmxlOyBvdGhlcndpc2Us IGFwcGVuZAotCQkgKiBqdXN0IGl0cyBtb2RpZmllZCBzdWJxdWVyeSBSVEVzIHRvIGZpbmFs X3J0YWJsZS4KKwkJICogSWYgdGhlcmUgaXMgYW4gRkRXIHRoYXQncyByZXNwb25zaWJsZSBm b3IgYWxsIGJhc2VyZWxzIG9mIHRoZSBxdWVyeSwKKwkJICogbGV0IGl0IGNvbnNpZGVyIGFk ZGluZyBGb3JlaWduUGF0aHMuCiAJCSAqLwotCQlpZiAoZmluYWxfcnRhYmxlID09IE5JTCkK LQkJCWZpbmFsX3J0YWJsZSA9IHN1YnJvb3QtPnBhcnNlLT5ydGFibGU7Ci0JCWVsc2UKLQkJ CWZpbmFsX3J0YWJsZSA9IGxpc3RfY29uY2F0KGZpbmFsX3J0YWJsZSwKLQkJCQkJCQkJCSAg IGxpc3RfY29weV90YWlsKHN1YnJvb3QtPnBhcnNlLT5ydGFibGUsCi0JCQkJCQkJCQkJCQkJ ICBsaXN0X2xlbmd0aChmaW5hbF9ydGFibGUpKSk7CisJCWlmIChzdWJfZmluYWxfcmVsLT5m ZHdyb3V0aW5lICYmCisJCQlzdWJfZmluYWxfcmVsLT5mZHdyb3V0aW5lLT5HZXRGb3JlaWdu VXBwZXJQYXRocykKKwkJCXN1Yl9maW5hbF9yZWwtPmZkd3JvdXRpbmUtPkdldEZvcmVpZ25V cHBlclBhdGhzKHN1YnJvb3QsCisJCQkJCQkJCQkJCQkJCQlVUFBFUlJFTF9GSU5BTCwKKwkJ CQkJCQkJCQkJCQkJCWNoaWxkam9pbnJlbCwKKwkJCQkJCQkJCQkJCQkJCXN1Yl9maW5hbF9y ZWwsCisJCQkJCQkJCQkJCQkJCQlOVUxMKTsKKworCQkvKiBMZXQgZXh0ZW5zaW9ucyBwb3Nz aWJseSBhZGQgc29tZSBtb3JlIHBhdGhzIHRvIHN1Yl9maW5hbF9yZWwuICovCisJCWlmIChj cmVhdGVfdXBwZXJfcGF0aHNfaG9vaykKKwkJCSgqY3JlYXRlX3VwcGVyX3BhdGhzX2hvb2sp IChzdWJyb290LCBVUFBFUlJFTF9GSU5BTCwgY2hpbGRqb2lucmVsLAorCQkJCQkJCQkJCXN1 Yl9maW5hbF9yZWwsIE5VTEwpOwogCiAJCS8qCi0JCSAqIFdlIG5lZWQgdG8gY29sbGVjdCBh bGwgdGhlIFJlbE9wdEluZm9zIGZyb20gYWxsIGNoaWxkIHBsYW5zIGludG8KLQkJICogdGhl IG1haW4gUGxhbm5lckluZm8sIHNpbmNlIHNldHJlZnMuYyB3aWxsIG5lZWQgdGhlbS4gIFdl IHVzZSB0aGUKLQkJICogbGFzdCBjaGlsZCdzIHNpbXBsZV9yZWxfYXJyYXkgKHByZXZpb3Vz IG9uZXMgYXJlIHRvbyBzaG9ydCksIHNvIHdlCi0JCSAqIGhhdmUgdG8gcHJvcGFnYXRlIGZv cndhcmQgdGhlIFJlbE9wdEluZm9zIHRoYXQgd2VyZSBhbHJlYWR5IGJ1aWx0Ci0JCSAqIGlu IHByZXZpb3VzIGNoaWxkcmVuLgorCQkgKiBjaGlsZCByZWwgY2Fubm90IGJlIGVtcHR5LCBv ciBpbmhlcml0YW5jZV9tYWtlX3JlbF9mcm9tX2pvaW5saXN0CisJCSAqIHdvdWxkbid0IGhh dmUgcHV0IGl0IGluIHRoZSBsaXN0IHRvIGJlZ2luIHdpdGguCiAJCSAqLwotCQlBc3NlcnQo c3Vicm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplID49IHNhdmVfcmVsX2FycmF5X3NpemUp OwotCQlmb3IgKHJ0aSA9IDE7IHJ0aSA8IHNhdmVfcmVsX2FycmF5X3NpemU7IHJ0aSsrKQot CQl7Ci0JCQlSZWxPcHRJbmZvICpicmVsID0gc2F2ZV9yZWxfYXJyYXlbcnRpXTsKLQotCQkJ aWYgKGJyZWwpCi0JCQkJc3Vicm9vdC0+c2ltcGxlX3JlbF9hcnJheVtydGldID0gYnJlbDsK LQkJfQotCQlzYXZlX3JlbF9hcnJheV9zaXplID0gc3Vicm9vdC0+c2ltcGxlX3JlbF9hcnJh eV9zaXplOwotCQlzYXZlX3JlbF9hcnJheSA9IHN1YnJvb3QtPnNpbXBsZV9yZWxfYXJyYXk7 Ci0JCXNhdmVfYXBwZW5kX3JlbF9hcnJheSA9IHN1YnJvb3QtPmFwcGVuZF9yZWxfYXJyYXk7 Ci0KLQkJLyogTWFrZSBzdXJlIGFueSBpbml0cGxhbnMgZnJvbSB0aGlzIHJlbCBnZXQgaW50 byB0aGUgb3V0ZXIgbGlzdCAqLwotCQlyb290LT5pbml0X3BsYW5zID0gc3Vicm9vdC0+aW5p dF9wbGFuczsKKwkJQXNzZXJ0KCFJU19EVU1NWV9QQVRIKHN1YnBhdGgpKTsKIAogCQkvKiBC dWlsZCBsaXN0IG9mIHN1Yi1wYXRocyAqLwogCQlzdWJwYXRocyA9IGxhcHBlbmQoc3VicGF0 aHMsIHN1YnBhdGgpOwpAQCAtMTU4NywzNiArMTQ0Myw2IEBAIGluaGVyaXRhbmNlX3BsYW5u ZXIoUGxhbm5lckluZm8gKnJvb3QpCiAJICovCiAKIAkvKgotCSAqIElmIHdlIG1hbmFnZWQg dG8gZXhjbHVkZSBldmVyeSBjaGlsZCByZWwsIHJldHVybiBhIGR1bW15IHBsYW47IGl0Ci0J ICogZG9lc24ndCBldmVuIG5lZWQgYSBNb2RpZnlUYWJsZSBub2RlLgotCSAqLwotCWlmIChz dWJwYXRocyA9PSBOSUwpCi0JewotCQlzZXRfZHVtbXlfcmVsX3BhdGhsaXN0KGZpbmFsX3Jl bCk7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFB1dCBiYWNrIHRoZSBmaW5hbCBhZGp1 c3RlZCBydGFibGUgaW50byB0aGUgbWFzdGVyIGNvcHkgb2YgdGhlIFF1ZXJ5LgotCSAqIChX ZSBtdXN0bid0IGRvIHRoaXMgaWYgd2UgZm91bmQgbm8gbm9uLWV4Y2x1ZGVkIGNoaWxkcmVu LikKLQkgKi8KLQlwYXJzZS0+cnRhYmxlID0gZmluYWxfcnRhYmxlOwotCXJvb3QtPnNpbXBs ZV9yZWxfYXJyYXlfc2l6ZSA9IHNhdmVfcmVsX2FycmF5X3NpemU7Ci0Jcm9vdC0+c2ltcGxl X3JlbF9hcnJheSA9IHNhdmVfcmVsX2FycmF5OwotCXJvb3QtPmFwcGVuZF9yZWxfYXJyYXkg PSBzYXZlX2FwcGVuZF9yZWxfYXJyYXk7Ci0KLQkvKiBNdXN0IHJlY29uc3RydWN0IG1hc3Rl cidzIHNpbXBsZV9ydGVfYXJyYXksIHRvbyAqLwotCXJvb3QtPnNpbXBsZV9ydGVfYXJyYXkg PSAoUmFuZ2VUYmxFbnRyeSAqKikKLQkJcGFsbG9jMCgobGlzdF9sZW5ndGgoZmluYWxfcnRh YmxlKSArIDEpICogc2l6ZW9mKFJhbmdlVGJsRW50cnkgKikpOwotCXJ0aSA9IDE7Ci0JZm9y ZWFjaChsYywgZmluYWxfcnRhYmxlKQotCXsKLQkJUmFuZ2VUYmxFbnRyeSAqcnRlID0gbGZp cnN0X25vZGUoUmFuZ2VUYmxFbnRyeSwgbGMpOwotCi0JCXJvb3QtPnNpbXBsZV9ydGVfYXJy YXlbcnRpKytdID0gcnRlOwotCX0KLQotCS8qCiAJICogSWYgdGhlcmUgd2FzIGEgRk9SIFtL RVldIFVQREFURS9TSEFSRSBjbGF1c2UsIHRoZSBMb2NrUm93cyBub2RlIHdpbGwKIAkgKiBo YXZlIGRlYWx0IHdpdGggZmV0Y2hpbmcgbm9uLWxvY2tlZCBtYXJrZWQgcm93cywgZWxzZSB3 ZSBuZWVkIHRvIGhhdmUKIAkgKiBNb2RpZnlUYWJsZSBkbyB0aGF0LgpAQCAtMTY1MSwxMSAr MTQ3Nyw2IEBAIGluaGVyaXRhbmNlX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QpCiAgKiBU aGlzIGZ1bmN0aW9uIGFkZHMgYWxsIHJlcXVpcmVkIHRvcC1sZXZlbCBwcm9jZXNzaW5nIHRv IHRoZSBzY2FuL2pvaW4KICAqIFBhdGgocykgcHJvZHVjZWQgYnkgcXVlcnlfcGxhbm5lci4K ICAqCi0gKiBJZiBpbmhlcml0YW5jZV91cGRhdGUgaXMgdHJ1ZSwgd2UncmUgYmVpbmcgY2Fs bGVkIGZyb20gaW5oZXJpdGFuY2VfcGxhbm5lcgotICogYW5kIHNob3VsZCBub3QgaW5jbHVk ZSBhIE1vZGlmeVRhYmxlIHN0ZXAgaW4gdGhlIHJlc3VsdGluZyBQYXRoKHMpLgotICogKGlu aGVyaXRhbmNlX3BsYW5uZXIgd2lsbCBjcmVhdGUgYSBzaW5nbGUgTW9kaWZ5VGFibGUgbm9k ZSBjb3ZlcmluZyBhbGwgdGhlCi0gKiB0YXJnZXQgdGFibGVzLikKLSAqCiAgKiB0dXBsZV9m cmFjdGlvbiBpcyB0aGUgZnJhY3Rpb24gb2YgdHVwbGVzIHdlIGV4cGVjdCB3aWxsIGJlIHJl dHJpZXZlZC4KICAqIHR1cGxlX2ZyYWN0aW9uIGlzIGludGVycHJldGVkIGFzIGZvbGxvd3M6 CiAgKgkgIDA6IGV4cGVjdCBhbGwgdHVwbGVzIHRvIGJlIHJldHJpZXZlZCAobm9ybWFsIGNh c2UpCkBAIC0xNjczLDggKzE0OTQsNyBAQCBpbmhlcml0YW5jZV9wbGFubmVyKFBsYW5uZXJJ bmZvICpyb290KQogICotLS0tLS0tLS0tLS0tLS0tLS0tLQogICovCiBzdGF0aWMgdm9pZAot Z3JvdXBpbmdfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCwgYm9vbCBpbmhlcml0YW5jZV91 cGRhdGUsCi0JCQkJIGRvdWJsZSB0dXBsZV9mcmFjdGlvbikKK2dyb3VwaW5nX3BsYW5uZXIo UGxhbm5lckluZm8gKnJvb3QsIGRvdWJsZSB0dXBsZV9mcmFjdGlvbikKIHsKIAlRdWVyeQkg ICAqcGFyc2UgPSByb290LT5wYXJzZTsKIAlMaXN0CSAgICp0bGlzdDsKQEAgLTIxNzIsMTEg KzE5OTIsOCBAQCBncm91cGluZ19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBib29sIGlu aGVyaXRhbmNlX3VwZGF0ZSwKIAkJCQkJCQkJCQkJICBvZmZzZXRfZXN0LCBjb3VudF9lc3Qp OwogCQl9CiAKLQkJLyoKLQkJICogSWYgdGhpcyBpcyBhbiBJTlNFUlQvVVBEQVRFL0RFTEVU RSwgYW5kIHdlJ3JlIG5vdCBiZWluZyBjYWxsZWQgZnJvbQotCQkgKiBpbmhlcml0YW5jZV9w bGFubmVyLCBhZGQgdGhlIE1vZGlmeVRhYmxlIG5vZGUuCi0JCSAqLwotCQlpZiAocGFyc2Ut PmNvbW1hbmRUeXBlICE9IENNRF9TRUxFQ1QgJiYgIWluaGVyaXRhbmNlX3VwZGF0ZSkKKwkJ LyogSWYgdGhpcyBpcyBhbiBJTlNFUlQvVVBEQVRFL0RFTEVURSwgYWRkIHRoZSBNb2RpZnlU YWJsZSBub2RlLiAqLworCQlpZiAocGFyc2UtPmNvbW1hbmRUeXBlICE9IENNRF9TRUxFQ1Qp CiAJCXsKIAkJCUluZGV4CQlyb290UmVsYXRpb247CiAJCQlMaXN0CSAgICp3aXRoQ2hlY2tP cHRpb25MaXN0czsKQEAgLTY5MTQsNyArNjczMSw2IEBAIGFwcGx5X3NjYW5qb2luX3Rhcmdl dF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgICBib29sIHNjYW5qb2lu X3RhcmdldF9wYXJhbGxlbF9zYWZlLAogCQkJCQkJCSAgIGJvb2wgdGxpc3Rfc2FtZV9leHBy cykKIHsKLQlMaXN0Q2VsbCAgICpsYzsKIAlQYXRoVGFyZ2V0ICpzY2Fuam9pbl90YXJnZXQ7 CiAJYm9vbAkJaXNfZHVtbXlfcmVsID0gSVNfRFVNTVlfUkVMKHJlbCk7CiAKQEAgLTY5ODUs NTMgKzY4MDEsOCBAQCBhcHBseV9zY2Fuam9pbl90YXJnZXRfdG9fcGF0aHMoUGxhbm5lcklu Zm8gKnJvb3QsCiAKIAkvKiBFeHRyYWN0IFNSRi1mcmVlIHNjYW4vam9pbiB0YXJnZXQuICov CiAJc2NhbmpvaW5fdGFyZ2V0ID0gbGluaXRpYWxfbm9kZShQYXRoVGFyZ2V0LCBzY2Fuam9p bl90YXJnZXRzKTsKLQotCS8qCi0JICogQWRqdXN0IGVhY2ggaW5wdXQgcGF0aC4gIElmIHRo ZSB0bGlzdCBleHBycyBhcmUgdGhlIHNhbWUsIHdlIGNhbiBqdXN0Ci0JICogaW5qZWN0IHRo ZSBzb3J0Z3JvdXByZWYgaW5mb3JtYXRpb24gaW50byB0aGUgZXhpc3RpbmcgcGF0aHRhcmdl dC4KLQkgKiBPdGhlcndpc2UsIHJlcGxhY2UgZWFjaCBwYXRoIHdpdGggYSBwcm9qZWN0aW9u IHBhdGggdGhhdCBnZW5lcmF0ZXMgdGhlCi0JICogU1JGLWZyZWUgc2Nhbi9qb2luIHRhcmdl dC4gIFRoaXMgY2FuJ3QgY2hhbmdlIHRoZSBvcmRlcmluZyBvZiBwYXRocwotCSAqIHdpdGhp biByZWwtPnBhdGhsaXN0LCBzbyB3ZSBqdXN0IG1vZGlmeSB0aGUgbGlzdCBpbiBwbGFjZS4K LQkgKi8KLQlmb3JlYWNoKGxjLCByZWwtPnBhdGhsaXN0KQotCXsKLQkJUGF0aAkgICAqc3Vi cGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7Ci0JCVBhdGgJICAgKm5ld3BhdGg7Ci0KLQkJ QXNzZXJ0KHN1YnBhdGgtPnBhcmFtX2luZm8gPT0gTlVMTCk7Ci0KLQkJaWYgKHRsaXN0X3Nh bWVfZXhwcnMpCi0JCQlzdWJwYXRoLT5wYXRodGFyZ2V0LT5zb3J0Z3JvdXByZWZzID0KLQkJ CQlzY2Fuam9pbl90YXJnZXQtPnNvcnRncm91cHJlZnM7Ci0JCWVsc2UKLQkJewotCQkJbmV3 cGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9qZWN0aW9uX3BhdGgocm9vdCwgcmVsLCBzdWJw YXRoLAotCQkJCQkJCQkJCQkJCSAgc2NhbmpvaW5fdGFyZ2V0KTsKLQkJCWxmaXJzdChsYykg PSBuZXdwYXRoOwotCQl9Ci0JfQotCi0JLyogU2FtZSBmb3IgcGFydGlhbCBwYXRocy4gKi8K LQlmb3JlYWNoKGxjLCByZWwtPnBhcnRpYWxfcGF0aGxpc3QpCi0JewotCQlQYXRoCSAgICpz dWJwYXRoID0gKFBhdGggKikgbGZpcnN0KGxjKTsKLQkJUGF0aAkgICAqbmV3cGF0aDsKLQot CQkvKiBTaG91bGRuJ3QgaGF2ZSBhbnkgcGFyYW1ldGVyaXplZCBwYXRocyBhbnltb3JlICov Ci0JCUFzc2VydChzdWJwYXRoLT5wYXJhbV9pbmZvID09IE5VTEwpOwotCi0JCWlmICh0bGlz dF9zYW1lX2V4cHJzKQotCQkJc3VicGF0aC0+cGF0aHRhcmdldC0+c29ydGdyb3VwcmVmcyA9 Ci0JCQkJc2NhbmpvaW5fdGFyZ2V0LT5zb3J0Z3JvdXByZWZzOwotCQllbHNlCi0JCXsKLQkJ CW5ld3BhdGggPSAoUGF0aCAqKSBjcmVhdGVfcHJvamVjdGlvbl9wYXRoKHJvb3QsCi0JCQkJ CQkJCQkJCQkJICByZWwsCi0JCQkJCQkJCQkJCQkJICBzdWJwYXRoLAotCQkJCQkJCQkJCQkJ CSAgc2NhbmpvaW5fdGFyZ2V0KTsKLQkJCWxmaXJzdChsYykgPSBuZXdwYXRoOwotCQl9Ci0J fQorCWFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRoc19ndXRzKHJvb3QsIHJlbCwgc2Nh bmpvaW5fdGFyZ2V0LAorCQkJCQkJCQkJCXRsaXN0X3NhbWVfZXhwcnMpOwogCiAJLyogTm93 IGZpeCB0aGluZ3MgdXAgaWYgc2Nhbi9qb2luIHRhcmdldCBjb250YWlucyBTUkZzICovCiAJ aWYgKHJvb3QtPnBhcnNlLT5oYXNUYXJnZXRTUkZzKQpAQCAtNzA1OSw2ICs2ODMwLDEwIEBA IGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJ CWludAkJCW5hcHBpbmZvczsKIAkJCUxpc3QJICAgKmNoaWxkX3NjYW5qb2luX3RhcmdldHMg PSBOSUw7CiAKKwkJCS8qIFNraXAgcHJvY2Vzc2luZyBwcnVuZWQgcGFydGl0aW9ucy4gKi8K KwkJCWlmIChjaGlsZF9yZWwgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKwogCQkJLyogVHJh bnNsYXRlIHNjYW4vam9pbiB0YXJnZXRzIGZvciB0aGlzIGNoaWxkLiAqLwogCQkJYXBwaW5m b3MgPSBmaW5kX2FwcGluZm9zX2J5X3JlbGlkcyhyb290LCBjaGlsZF9yZWwtPnJlbGlkcywK IAkJCQkJCQkJCQkJICAgJm5hcHBpbmZvcyk7CkBAIC03MTEyLDYgKzY4ODcsNjcgQEAgYXBw bHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogfQogCiAv KgorICogYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzX2d1dHMKKyAqCQlQb3J0aW9u IG9mIGFwcGx5X3NjYW5qb2luX3RhcmdldF90b19wYXRocyB0aGF0J3MgdXNlZnVsIGluIHNv bWUgcGxhY2VzCisgKgkJd2hlcmUgZnVsbCBwb3dlcnMgb2YgdGhlIGZvcm1lciBhcmUgdW5u ZWNlc3NhcnkKKyAqLworc3RhdGljIHZvaWQKK2FwcGx5X3NjYW5qb2luX3RhcmdldF90b19w YXRoc19ndXRzKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCQkJUmVsT3B0SW5mbyAqcmVs LAorCQkJCQkJCQkJUGF0aFRhcmdldCAqc2NhbmpvaW5fdGFyZ2V0LAorCQkJCQkJCQkJYm9v bCB0bGlzdF9zYW1lX2V4cHJzKQoreworCUxpc3RDZWxsICpsYzsKKworCS8qCisJICogQWRq dXN0IGVhY2ggaW5wdXQgcGF0aC4gIElmIHRoZSB0bGlzdCBleHBycyBhcmUgdGhlIHNhbWUs IHdlIGNhbiBqdXN0CisJICogaW5qZWN0IHRoZSBzb3J0Z3JvdXByZWYgaW5mb3JtYXRpb24g aW50byB0aGUgZXhpc3RpbmcgcGF0aHRhcmdldC4KKwkgKiBPdGhlcndpc2UsIHJlcGxhY2Ug ZWFjaCBwYXRoIHdpdGggYSBwcm9qZWN0aW9uIHBhdGggdGhhdCBnZW5lcmF0ZXMgdGhlCisJ ICogU1JGLWZyZWUgc2Nhbi9qb2luIHRhcmdldC4gIFRoaXMgY2FuJ3QgY2hhbmdlIHRoZSBv cmRlcmluZyBvZiBwYXRocworCSAqIHdpdGhpbiByZWwtPnBhdGhsaXN0LCBzbyB3ZSBqdXN0 IG1vZGlmeSB0aGUgbGlzdCBpbiBwbGFjZS4KKwkgKi8KKwlmb3JlYWNoKGxjLCByZWwtPnBh dGhsaXN0KQorCXsKKwkJUGF0aAkgICAqc3VicGF0aCA9IChQYXRoICopIGxmaXJzdChsYyk7 CisJCVBhdGgJICAgKm5ld3BhdGg7CisKKwkJQXNzZXJ0KHN1YnBhdGgtPnBhcmFtX2luZm8g PT0gTlVMTCk7CisKKwkJaWYgKHRsaXN0X3NhbWVfZXhwcnMpCisJCQlzdWJwYXRoLT5wYXRo dGFyZ2V0LT5zb3J0Z3JvdXByZWZzID0KKwkJCQlzY2Fuam9pbl90YXJnZXQtPnNvcnRncm91 cHJlZnM7CisJCWVsc2UKKwkJeworCQkJbmV3cGF0aCA9IChQYXRoICopIGNyZWF0ZV9wcm9q ZWN0aW9uX3BhdGgocm9vdCwgcmVsLCBzdWJwYXRoLAorCQkJCQkJCQkJCQkJCSAgc2Nhbmpv aW5fdGFyZ2V0KTsKKwkJCWxmaXJzdChsYykgPSBuZXdwYXRoOworCQl9CisJfQorCisJLyog U2FtZSBmb3IgcGFydGlhbCBwYXRocy4gKi8KKwlmb3JlYWNoKGxjLCByZWwtPnBhcnRpYWxf cGF0aGxpc3QpCisJeworCQlQYXRoCSAgICpzdWJwYXRoID0gKFBhdGggKikgbGZpcnN0KGxj KTsKKwkJUGF0aAkgICAqbmV3cGF0aDsKKworCQkvKiBTaG91bGRuJ3QgaGF2ZSBhbnkgcGFy YW1ldGVyaXplZCBwYXRocyBhbnltb3JlICovCisJCUFzc2VydChzdWJwYXRoLT5wYXJhbV9p bmZvID09IE5VTEwpOworCisJCWlmICh0bGlzdF9zYW1lX2V4cHJzKQorCQkJc3VicGF0aC0+ cGF0aHRhcmdldC0+c29ydGdyb3VwcmVmcyA9CisJCQkJc2NhbmpvaW5fdGFyZ2V0LT5zb3J0 Z3JvdXByZWZzOworCQllbHNlCisJCXsKKwkJCW5ld3BhdGggPSAoUGF0aCAqKSBjcmVhdGVf cHJvamVjdGlvbl9wYXRoKHJvb3QsCisJCQkJCQkJCQkJCQkJICByZWwsCisJCQkJCQkJCQkJ CQkJICBzdWJwYXRoLAorCQkJCQkJCQkJCQkJCSAgc2NhbmpvaW5fdGFyZ2V0KTsKKwkJCWxm aXJzdChsYykgPSBuZXdwYXRoOworCQl9CisJfQorfQorCisvKgogICogY3JlYXRlX3BhcnRp dGlvbndpc2VfZ3JvdXBpbmdfcGF0aHMKICAqCiAgKiBJZiB0aGUgcGFydGl0aW9uIGtleXMg b2YgaW5wdXQgcmVsYXRpb24gYXJlIHBhcnQgb2YgdGhlIEdST1VQIEJZIGNsYXVzZSwgYWxs CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMg Yi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5kZXggY2E2NjIy ZWNlOS4uODkxNGM0NjRkMyAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0 aWwvYXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVu ZGluZm8uYwpAQCAtMTgsNiArMTgsOCBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5o IgogI2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9h cHBlbmRpbmZvLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3BhdGhub2RlLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL3BhdGhzLmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNldHJlZS5oIgog I2luY2x1ZGUgInV0aWxzL2xzeXNjYWNoZS5oIgogI2luY2x1ZGUgInV0aWxzL3JlbC5oIgpA QCAtMzk0LDggKzM5NiwzNCBAQCBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9k ZSAqbm9kZSwKIAkJCQkJCQkJCQkJICBjb250ZXh0LT5hcHBpbmZvcyk7CiAJCXJldHVybiAo Tm9kZSAqKSBwaHY7CiAJfQorCisJaWYgKElzQShub2RlLCBTcGVjaWFsSm9pbkluZm8pKQor CXsKKwkJU3BlY2lhbEpvaW5JbmZvICpvbGRpbmZvID0gKFNwZWNpYWxKb2luSW5mbyAqKSBu b2RlOworCQlTcGVjaWFsSm9pbkluZm8gKm5ld2luZm8gPSBtYWtlTm9kZShTcGVjaWFsSm9p bkluZm8pOworCisJCW1lbWNweShuZXdpbmZvLCBvbGRpbmZvLCBzaXplb2YoU3BlY2lhbEpv aW5JbmZvKSk7CisJCW5ld2luZm8tPm1pbl9sZWZ0aGFuZCA9IGFkanVzdF9jaGlsZF9yZWxp ZHMob2xkaW5mby0+bWluX2xlZnRoYW5kLAorCQkJCQkJCQkJCQkJCWNvbnRleHQtPm5hcHBp bmZvcywKKwkJCQkJCQkJCQkJCQljb250ZXh0LT5hcHBpbmZvcyk7CisJCW5ld2luZm8tPm1p bl9yaWdodGhhbmQgPSBhZGp1c3RfY2hpbGRfcmVsaWRzKG9sZGluZm8tPm1pbl9yaWdodGhh bmQsCisJCQkJCQkJCQkJCQkJIGNvbnRleHQtPm5hcHBpbmZvcywKKwkJCQkJCQkJCQkJCQkg Y29udGV4dC0+YXBwaW5mb3MpOworCQluZXdpbmZvLT5zeW5fbGVmdGhhbmQgPSBhZGp1c3Rf Y2hpbGRfcmVsaWRzKG9sZGluZm8tPnN5bl9sZWZ0aGFuZCwKKwkJCQkJCQkJCQkJCQljb250 ZXh0LT5uYXBwaW5mb3MsCisJCQkJCQkJCQkJCQkJY29udGV4dC0+YXBwaW5mb3MpOworCQlu ZXdpbmZvLT5zeW5fcmlnaHRoYW5kID0gYWRqdXN0X2NoaWxkX3JlbGlkcyhvbGRpbmZvLT5z eW5fcmlnaHRoYW5kLAorCQkJCQkJCQkJCQkJCSBjb250ZXh0LT5uYXBwaW5mb3MsCisJCQkJ CQkJCQkJCQkJIGNvbnRleHQtPmFwcGluZm9zKTsKKwkJbmV3aW5mby0+c2VtaV9yaHNfZXhw cnMgPQorCQkJKExpc3QgKikgZXhwcmVzc2lvbl90cmVlX211dGF0b3IoKE5vZGUgKikKKwkJ CQkJCQkJCQkJIG9sZGluZm8tPnNlbWlfcmhzX2V4cHJzLAorCQkJCQkJCQkJCQkgYWRqdXN0 X2FwcGVuZHJlbF9hdHRyc19tdXRhdG9yLAorCQkJCQkJCQkJCQkgKHZvaWQgKikgY29udGV4 dCk7CisJCXJldHVybiAoTm9kZSAqKSBuZXdpbmZvOworCX0KKwogCS8qIFNob3VsZG4ndCBu ZWVkIHRvIGhhbmRsZSBwbGFubmVyIGF1eGlsaWFyeSBub2RlcyBoZXJlICovCi0JQXNzZXJ0 KCFJc0Eobm9kZSwgU3BlY2lhbEpvaW5JbmZvKSk7CiAJQXNzZXJ0KCFJc0Eobm9kZSwgQXBw ZW5kUmVsSW5mbykpOwogCUFzc2VydCghSXNBKG5vZGUsIFBsYWNlSG9sZGVySW5mbykpOwog CUFzc2VydCghSXNBKG5vZGUsIE1pbk1heEFnZ0luZm8pKTsKZGlmZiAtLWdpdCBhL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2luaGVyaXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL2luaGVyaXQuYwppbmRleCBlYWY3ODhlNTc4Li4xZDE2YTlmMmZmIDEwMDY0NAot LS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCkBAIC0yMSwxMSArMjEsMTYgQEAKICNp bmNsdWRlICJtaXNjYWRtaW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvYXBwZW5kaW5mby5o IgogI2luY2x1ZGUgIm9wdGltaXplci9pbmhlcml0LmgiCisjaW5jbHVkZSAib3B0aW1pemVy L29wdGltaXplci5oIgorI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUg Im9wdGltaXplci9wbGFubWFpbi5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wbGFubmVyLmgi CiAjaW5jbHVkZSAib3B0aW1pemVyL3ByZXAuaCIKICNpbmNsdWRlICJ1dGlscy9yZWwuaCIK IAogCitzdGF0aWMgUGxhbm5lckluZm8gKmNyZWF0ZV9pbmhlcml0ZWRfdGFyZ2V0X2NoaWxk X3Jvb3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQlBcHBlbmRSZWxJbmZvICphcHBp bmZvKTsKIHN0YXRpYyB2b2lkIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFubmVySW5m byAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCQkJCQkJIEluZGV4IHJ0aSk7CiBzdGF0 aWMgdm9pZCBleHBhbmRfcGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwK QEAgLTQ5MiwzICs0OTcsMTI1IEBAIHRyYW5zbGF0ZV9jb2xfcHJpdnMoY29uc3QgQml0bWFw c2V0ICpwYXJlbnRfcHJpdnMsCiAKIAlyZXR1cm4gY2hpbGRfcHJpdnM7CiB9CisKKy8qCisg KiBhZGRfaW5oZXJpdGVkX3RhcmdldF9jaGlsZF9yb290cworICoJCUZvciBlYWNoIGNoaWxk IG9mIHRoZSBxdWVyeSdzIHJlc3VsdCByZWxhdGlvbiwgdGhpcyB0cmFuc2xhdGVzIHRoZQor ICoJCW9yaWdpbmFsIHF1ZXJ5IHRvIG1hdGNoIHRoZSBjaGlsZCBhbmQgY3JlYXRlcyBhIFBs YW5uZXJJbmZvIGNvbnRhaW5pbmcKKyAqCQl0aGUgdHJhbnNsYXRlZCBxdWVyeQorICoKKyAq IENoaWxkIFBsYW5uZXJJbmZvIHJldXNlcyBtb3N0IG9mIHRoZSBwYXJlbnQgUGxhbm5lcklu Zm8ncyBmaWVsZHMgdW5jaGFuZ2VkLAorICogZXhjZXB0IHVuZXhwYW5kZWRfdGxpc3QsIHBy b2Nlc3NlZF90bGlzdCwgYW5kIGFsbF9iYXNlcmVscywgYWxsIG9mIHdoaWNoCisgKiBhcmUg YmFzZWQgb24gdGhlIGNoaWxkIHJlbGF0aW9uLgorICovCit2b2lkCithZGRfaW5oZXJpdGVk X3RhcmdldF9jaGlsZF9yb290cyhQbGFubmVySW5mbyAqcm9vdCkKK3sKKwlJbmRleAkJcmVz dWx0UmVsYXRpb24gPSByb290LT5wYXJzZS0+cmVzdWx0UmVsYXRpb247CisJTGlzdENlbGwg ICAqbGM7CisKKwlBc3NlcnQocm9vdC0+aW5oX3RhcmdldF9jaGlsZF9yb290cyAhPSBOVUxM KTsKKworCWZvcmVhY2gobGMsIHJvb3QtPmFwcGVuZF9yZWxfbGlzdCkKKwl7CisJCUFwcGVu ZFJlbEluZm8gKmFwcGluZm8gPSBsZmlyc3QobGMpOworCQlSYW5nZVRibEVudHJ5ICpjaGls ZFJURTsKKwkJUGxhbm5lckluZm8gICAqc3Vicm9vdDsKKworCQlpZiAoYXBwaW5mby0+cGFy ZW50X3JlbGlkICE9IHJlc3VsdFJlbGF0aW9uKQorCQkJY29udGludWU7CisKKwkJLyoKKwkJ ICogQ3JlYXRlIGEgUGxhbm5lckluZm8gZm9yIHByb2Nlc3NpbmcgdGhpcyBjaGlsZCB0YXJn ZXQgcmVsYXRpb24KKwkJICogd2l0aC4KKwkJICovCisJCXN1YnJvb3QgPSBjcmVhdGVfaW5o ZXJpdGVkX3RhcmdldF9jaGlsZF9yb290KHJvb3QsIGFwcGluZm8pOworCQlyb290LT5pbmhf dGFyZ2V0X2NoaWxkX3Jvb3RzW2FwcGluZm8tPmNoaWxkX3JlbGlkXSA9IHN1YnJvb3Q7CisK KwkJLyoKKwkJICogSWYgdGhlIGNoaWxkIGlzIGEgcGFydGl0aW9uZWQgdGFibGUsIHJlY3Vy c2UgdG8gZG8gdGhpcyBmb3IgaXRzCisJCSAqIHBhcnRpdGlvbnMuCisJCSAqLworCQljaGls ZFJURSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlbYXBwaW5mby0+Y2hpbGRfcmVsaWRdOwor CQlpZiAoY2hpbGRSVEUtPmluaCkKKwkJCWFkZF9pbmhlcml0ZWRfdGFyZ2V0X2NoaWxkX3Jv b3RzKHN1YnJvb3QpOworCX0KK30KKworLyoKKyAqIGNyZWF0ZV9pbmhlcml0ZWRfdGFyZ2V0 X2NoaWxkX3Jvb3QKKyAqCQlXb3JraG9yc2Ugb2YgYWRkX2luaGVyaXRlZF90YXJnZXRfY2hp bGRfcm9vdHMKKyAqLworc3RhdGljIFBsYW5uZXJJbmZvICoKK2NyZWF0ZV9pbmhlcml0ZWRf dGFyZ2V0X2NoaWxkX3Jvb3QoUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFJlbEluZm8gKmFw cGluZm8pCit7CisJUGxhbm5lckluZm8gKnN1YnJvb3Q7CisJTGlzdAkgICAqdGxpc3QsCisJ CQkgICAqdGxpc3RfdmFyczsKKworCisJQXNzZXJ0KHJvb3QtPnBhcnNlLT5jb21tYW5kVHlw ZSA9PSBDTURfVVBEQVRFIHx8CisJCSAgIHJvb3QtPnBhcnNlLT5jb21tYW5kVHlwZSA9PSBD TURfREVMRVRFKTsKKworCS8qCisJICogVHJhbnNsYXRlIHRoZSBvcmlnaW5hbCBxdWVyeSB0 byByZXBsYWNlIFZhcnMgb2YgdGhlIHBhcmVudCB0YWJsZQorCSAqIGJ5IHRoZSBjb3JyZXNw b25kaW5nIFZhcnMgb2YgdGhlIGNoaWxkIHRhYmxlIGFuZCB0byBtYWtlIGNoaWxkIHRoZSBt YWluCisJICogdGFyZ2V0IHJlbGF0aW9uIG9mIHRoZSBxdWVyeS4KKwkgKi8KKwlzdWJyb290 ID0gbWFrZU5vZGUoUGxhbm5lckluZm8pOworCW1lbWNweShzdWJyb290LCByb290LCBzaXpl b2YoUGxhbm5lckluZm8pKTsKKworCS8qCisJICogUmVzdG9yZSB0aGUgb3JpZ2luYWwsIHVu ZXhwYW5kZWQgdGFyZ2V0bGlzdCwgdGhhdCBpcywgdGhlIG9uZSBiZWZvcmUKKwkgKiBwcmVw cm9jZXNzX3RhcmdldGxpc3Qgd2FzIHJ1biBvbiB0aGUgb3JpZ2luYWwgcXVlcnkuICBXZSds bCBydW4KKwkgKiBwcmVwcm9jZXNzX3RhcmdldGxpc3QgYWZ0ZXIgdHJhbnNsYXRpbmcgdGhl IHF1ZXJ5IGFuZCB0aGUgdGFyZ2V0bGlzdCwKKwkgKiBzbyB0aGF0IGl0IGlzIGV4cGFuZGVk IGFjY29yZGluZyB0byBjaGlsZCdzIHR1cGxlIGRlc2NyaXB0b3IuCisJICovCisJcm9vdC0+ cGFyc2UtPnRhcmdldExpc3QgPSByb290LT51bmV4cGFuZGVkX3RsaXN0OworCXN1YnJvb3Qt PnBhcnNlID0gKFF1ZXJ5ICopIGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwKKwkJCQkJ CQkJCQkJCQkgIChOb2RlICopIHJvb3QtPnBhcnNlLAorCQkJCQkJCQkJCQkJCSAgMSwgJmFw cGluZm8pOworCisJLyoKKwkgKiBUcmFuc2xhdGUgRUNzLiAgVGhpcyBjb3BpZXMgdGhlIGxp c3Qgb2YgRUNzLCB0cmFuc2xhdGluZyB0aGUKKwkgKiByZWxldmFudCBtZW1iZXJzIG9mIGlu ZGl2aWR1YWwgRUNzIHRvIHJlcGxhY2UgdGhlIHJlZmVyZW5jZXMgdG8KKwkgKiB0aGUgcGFy ZW50IFJURSBieSBjaGlsZCBSVEUsIGluY2x1ZGluZyB0aGUgRUMgbWVtYmVycy4KKwkgKi8K KwlzdWJyb290LT5lcV9jbGFzc2VzID0KKwkJCQl0cmFuc2xhdGVfZXFfY2xhc3Nlc19mb3Jf Y2hpbGQocm9vdCwgcm9vdC0+ZXFfY2xhc3NlcywKKwkJCQkJCQkJCQkJICAgYXBwaW5mbyk7 CisKKwkvKgorCSAqIFNhdmUgdGhlIGp1c3QgdHJhbnNsYXRlZCB0YXJnZXRsaXN0IGFzIHVu ZXhwYW5kZWRfdGxpc3QgaW4gdGhlIGNoaWxkJ3MKKwkgKiBzdWJyb290LCBzbyB0aGF0IHRo aXMgY2hpbGQncyBvd24gY2hpbGRyZW4gY2FuIHVzZSBpdC4gIE11c3QgdXNlIGNvcHkKKwkg KiBiZWNhdXNlIHN1YnJvb3QtPnBhcnNlLT50YXJnZXRMaXN0IHdpbGwgYmUgbW9kaWZpZWQg c29vbi4KKwkgKi8KKwlzdWJyb290LT51bmV4cGFuZGVkX3RsaXN0ID0gbGlzdF9jb3B5KHN1 YnJvb3QtPnBhcnNlLT50YXJnZXRMaXN0KTsKKworCS8qCisJICogQXBwbHkgcGxhbm5lcidz IGV4cGFuc2lvbiBvZiB0YXJnZXRsaXN0LCBzdWNoIGFzIGFkZGluZyB2YXJpb3VzIGp1bmsK KwkgKiBjb2x1bW4sIGZpbGxpbmcgcGxhY2Vob2xkZXIgZW50cmllcyBmb3IgZHJvcHBlZCBj b2x1bW5zLCBldGMuLCB1c2luZworCSAqIHRoZSBjaGlsZCdzIFR1cGxlRGVzYy4KKwkgKi8K Kwl0bGlzdCA9IHByZXByb2Nlc3NfdGFyZ2V0bGlzdChzdWJyb290KTsKKwlzdWJyb290LT5w cm9jZXNzZWRfdGxpc3QgPSB0bGlzdDsKKworCS8qCisJICogQWRkIGFueSBuZXdseSBhZGRl ZCBWYXJzIHRvIHRoZSBjaGlsZCBSZWxPcHRJbmZvLiAgVGhleSdsbCBiZSBuZWVkZWQKKwkg KiBhdCB0aGUgdG9wIGxldmVsLCBzbyB3ZSBwYXNzIHswfSBmb3Igd2hlcmVfbmVlZGVkLgor CSAqLworCXRsaXN0X3ZhcnMgPSBwdWxsX3Zhcl9jbGF1c2UoKE5vZGUgKikgdGxpc3QsCisJ CQkJCQkJCSBQVkNfUkVDVVJTRV9BR0dSRUdBVEVTIHwKKwkJCQkJCQkJIFBWQ19SRUNVUlNF X1dJTkRPV0ZVTkNTIHwKKwkJCQkJCQkJIFBWQ19JTkNMVURFX1BMQUNFSE9MREVSUyk7CisJ YWRkX3ZhcnNfdG9fdGFyZ2V0bGlzdChyb290LCB0bGlzdF92YXJzLCBibXNfbWFrZV9zaW5n bGV0b24oMCksIGZhbHNlKTsKKworCS8qCisJICogQWRqdXN0IGFsbF9iYXNlcmVscyB0byBy ZXBsYWNlIHRoZSBvcmlnaW5hbCB0YXJnZXQgcmVsYXRpb24gd2l0aCB0aGUKKwkgKiBjaGls ZCB0YXJnZXQgcmVsYXRpb24uCisJICovCisJc3Vicm9vdC0+YWxsX2Jhc2VyZWxzID0gYWRq dXN0X2NoaWxkX3JlbGlkcyhzdWJyb290LT5hbGxfYmFzZXJlbHMsCisJCQkJCQkJCQkJCQkx LCAmYXBwaW5mbyk7CisKKwlyZXR1cm4gc3Vicm9vdDsKK30KZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKaW5kZXggYTAwOGFlMDdkYS4uMmRjMzA1OWYxNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1 ZGUvbm9kZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVz LmgKQEAgLTIxNyw2ICsyMTcsMTcgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiAJc3RydWN0IEFw cGVuZFJlbEluZm8gKiphcHBlbmRfcmVsX2FycmF5OwogCiAJLyoKKwkgKiBpbmhfdGFyZ2V0 X2NoaWxkX3Jvb3RzIGlzIHNhbWUgbGVuZ3RoIGFzIGFib3ZlIGFycmF5cywgaW5kZXhlZCBi eQorCSAqIHJhbmdldGFibGUgaW5kZXggKGVudHJ5IDAgaXMgd2FzdGVkIGxpa2Ugc2ltcGxl X3JlbF9hcnJheSkuICBPbmx5CisJICogZWxlbWVudHMgY29ycmVzcG9uZGluZyB0byBpbmhl cml0YW5jZSBjaGlsZCB0YXJnZXQgcmVsYXRpb25zIGFyZQorCSAqIG5vbi1OVUxMLiAgQ29u dGVudCBvZiBlYWNoIFBsYW5uZXJJbmZvIGlzIG1vc3RseSBzYW1lIGFzIHRoZSBwYXJlbnQK KwkgKiBQbGFubmVySW5mbywgZXhjZXB0IGZvciBmZXcgZmllbGRzIHN1Y2ggYXMgdGhlIHBh cnNlIHRyZWUgd2hpY2ggaXMKKwkgKiBhIHRyYW5zbGF0ZWQgY29weSBvZiB0aGUgcGFyZW50 J3MgcGFyc2UgdHJlZSwgRUMgbGlzdCB3aGljaCBjb250YWluCisJICogY2hpbGQgbWVtYmVy IGV4cHJlc3Npb25zLCBldGMuCisJICovCisJc3RydWN0IFBsYW5uZXJJbmZvICoqaW5oX3Rh cmdldF9jaGlsZF9yb290czsKKworCS8qCiAJICogYWxsX2Jhc2VyZWxzIGlzIGEgUmVsaWRz IHNldCBvZiBhbGwgYmFzZSByZWxpZHMgKGJ1dCBub3QgIm90aGVyIgogCSAqIHJlbGlkcykg aW4gdGhlIHF1ZXJ5OyB0aGF0IGlzLCB0aGUgUmVsaWRzIGlkZW50aWZpZXIgb2YgdGhlIGZp bmFsIGpvaW4KIAkgKiB3ZSBuZWVkIHRvIGZvcm0uICBUaGlzIGlzIGNvbXB1dGVkIGluIG1h a2Vfb25lX3JlbCwganVzdCBiZWZvcmUgd2UKQEAgLTMxMCw2ICszMjEsMTIgQEAgc3RydWN0 IFBsYW5uZXJJbmZvCiAJICovCiAJTGlzdAkgICAqcHJvY2Vzc2VkX3RsaXN0OwogCisJLyoK KwkgKiBUaGlzIHN0b3JlcyB0aGUgb3JpZ2luYWwgdmVyc2lvbiBvZiB0aGUgcXVlcnkncyB0 YXJnZXRsaXN0IHRoYXQncyBub3QKKwkgKiBtb2RpZmllZCBieSB0aGUgcGxhbm5lci4gIFVz ZWZ1bCBmb3IgdGFyZ2V0IGluaGVyaXRhbmNlIHBsYW5uaW5nLgorCSAqLworCUxpc3QJICAg KnVuZXhwYW5kZWRfdGxpc3Q7CisKIAkvKiBGaWVsZHMgZmlsbGVkIGR1cmluZyBjcmVhdGVf cGxhbigpIGZvciB1c2UgaW4gc2V0cmVmcy5jICovCiAJQXR0ck51bWJlciAqZ3JvdXBpbmdf bWFwOwkvKiBmb3IgR3JvdXBpbmdGdW5jIGZpeHVwICovCiAJTGlzdAkgICAqbWlubWF4X2Fn Z3M7CS8qIExpc3Qgb2YgTWluTWF4QWdnSW5mb3MgKi8KQEAgLTM0OCw5ICszNjUsMjIgQEAg c3RydWN0IFBsYW5uZXJJbmZvCiAKIAkvKiBEb2VzIHRoaXMgcXVlcnkgbW9kaWZ5IGFueSBw YXJ0aXRpb24ga2V5IGNvbHVtbnM/ICovCiAJYm9vbAkJcGFydENvbHNVcGRhdGVkOworCisJ LyogTGlzdCBvZiBSVCBpbmRleGVzIG9mIGNoaWxkIHRhcmdldCByZWxhdGlvbnMuICovCisJ TGlzdAkgICAqaW5oX3RhcmdldF9jaGlsZF9yZWxzOworCisJLyoKKwkgKiBSZWxPcHRJbmZv cyBjb3JyZXNwb25kaW5nIHRvIGVhY2ggY2hpbGQgdGFyZ2V0IHJlbC4gIEZvciBsZWFmIGNo aWxkcmVuLAorCSAqIGl0J3MgdGhlIFJlbE9wdEluZm8gcmVwcmVzZW50aW5nIHRoZSBvdXRw dXQgb2YgbWFrZV9yZWxfZnJvbV9qb2lubGlzdCgpCisJICogY2FsbGVkIHdpdGggdGhlIHBh cmVudCByZWwgaW4gdGhlIG9yaWdpbmFsIGpvaW4gdHJlZSByZXBsYWNlZCBieSBhCisJICog Z2l2ZW4gbGVhZiBjaGlsZC4gIEZvciBub24tbGVhZiBjaGlsZHJlbiwgaXQncyB0aGUgYmFz ZXJlbCBSZWxPcHRJbmZvCisJICogaXRzZWxmLCBsZWZ0IGFzIGEgcGxhY2Vob2xkZXIuCisJ ICovCisJTGlzdAkgICAqaW5oX3RhcmdldF9jaGlsZF9wYXRoX3JlbHM7CiB9OwogCiAKKwog LyoKICAqIEluIHBsYWNlcyB3aGVyZSBpdCdzIGtub3duIHRoYXQgc2ltcGxlX3J0ZV9hcnJh eVtdIG11c3QgaGF2ZSBiZWVuIHByZXBhcmVkCiAgKiBhbHJlYWR5LCB3ZSBqdXN0IGluZGV4 IGludG8gaXQgdG8gZmV0Y2ggUlRFcy4gIEluIGNvZGUgdGhhdCBtaWdodCBiZQpkaWZmIC0t Z2l0IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2luaGVyaXQuaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9pbmhlcml0LmgKaW5kZXggZDI0MThmMTVjZi4uNGYwNmNkZDMyMiAxMDA2NDQK LS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2luaGVyaXQuaAorKysgYi9zcmMvaW5jbHVk ZS9vcHRpbWl6ZXIvaW5oZXJpdC5oCkBAIC0xOCw1ICsxOCw2IEBACiAKIAogZXh0ZXJuIHZv aWQgZXhwYW5kX2luaGVyaXRlZF90YWJsZXMoUGxhbm5lckluZm8gKnJvb3QpOworZXh0ZXJu IHZvaWQgYWRkX2luaGVyaXRlZF90YXJnZXRfY2hpbGRfcm9vdHMoUGxhbm5lckluZm8gKnJv b3QpOwogCiAjZW5kaWYJCQkJCQkJLyogSU5IRVJJVF9IICovCmRpZmYgLS1naXQgYS9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvcGF0aHMuaCBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oCmluZGV4IDA0MDMzNWE3YzUuLmU4Y2FhYWY2NDMgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNs dWRlL29wdGltaXplci9wYXRocy5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wYXRo cy5oCkBAIC0xNTQsNiArMTU0LDggQEAgZXh0ZXJuIHZvaWQgYWRkX2NoaWxkX3JlbF9lcXVp dmFsZW5jZXMoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgICBBcHBlbmRSZWxJbmZvICph cHBpbmZvLAogCQkJCQkJICAgUmVsT3B0SW5mbyAqcGFyZW50X3JlbCwKIAkJCQkJCSAgIFJl bE9wdEluZm8gKmNoaWxkX3JlbCk7CitleHRlcm4gTGlzdCAqdHJhbnNsYXRlX2VxX2NsYXNz ZXNfZm9yX2NoaWxkKFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJCSAgIExpc3QgKmVxX2Ns YXNzZXMsIEFwcGVuZFJlbEluZm8gKmFwcGluZm8pOwogZXh0ZXJuIExpc3QgKmdlbmVyYXRl X2ltcGxpZWRfZXF1YWxpdGllc19mb3JfY29sdW1uKFBsYW5uZXJJbmZvICpyb290LAogCQkJ CQkJCQkJICAgUmVsT3B0SW5mbyAqcmVsLAogCQkJCQkJCQkJICAgZWNfbWF0Y2hlc19jYWxs YmFja190eXBlIGNhbGxiYWNrLApkaWZmIC0tZ2l0IGEvc3JjL3Rlc3QvcmVncmVzcy9leHBl Y3RlZC9wYXJ0aXRpb25fam9pbi5vdXQgYi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3Bh cnRpdGlvbl9qb2luLm91dAppbmRleCBiYmRjMzczNzgyLi5mZDg1YjVlYWQzIDEwMDY0NAot LS0gYS9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dAorKysg Yi9zcmMvdGVzdC9yZWdyZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9qb2luLm91dApAQCAtMTc4 MCw3ICsxNzgwLDcgQEAgV0hFUkUgRVhJU1RTICgKICAgICAgICAgICAgICAgIEZpbHRlcjog KGMgSVMgTlVMTCkKICAgICAgICAgIC0+ICBOZXN0ZWQgTG9vcAogICAgICAgICAgICAgICAg LT4gIFNlcSBTY2FuIG9uIGludDRfdGJsCi0gICAgICAgICAgICAgICAtPiAgU3VicXVlcnkg U2NhbiBvbiBzc18xCisgICAgICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzcwog ICAgICAgICAgICAgICAgICAgICAgLT4gIExpbWl0CiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90YmwgaW50OF90YmxfMQogICAgLT4gIE5lc3Rl ZCBMb29wIFNlbWkgSm9pbgpAQCAtMTc4OCw3ICsxNzg4LDcgQEAgV0hFUkUgRVhJU1RTICgK ICAgICAgICAgICAgICAgIEZpbHRlcjogKGMgSVMgTlVMTCkKICAgICAgICAgIC0+ICBOZXN0 ZWQgTG9vcAogICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIGludDRfdGJsCi0gICAg ICAgICAgICAgICAtPiAgU3VicXVlcnkgU2NhbiBvbiBzc18yCisgICAgICAgICAgICAgICAt PiAgU3VicXVlcnkgU2NhbiBvbiBzcwogICAgICAgICAgICAgICAgICAgICAgLT4gIExpbWl0 CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gaW50OF90Ymwg aW50OF90YmxfMgogKDI4IHJvd3MpCi0tIAoyLjExLjAKCg== --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=UTF-8; name="0002-Get-rid-of-some-useless-code.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0002-Get-rid-of-some-useless-code.patch" RnJvbSBjODNmNGVjNDhlMDM1Y2UyYTlmY2IyYzU0YTI1MWVjYjkwMGY3MWUwIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCA4IEZlYiAyMDE5IDE2OjIxOjU5ICswOTAwClN1YmplY3Q6IFtQQVRDSCAy LzVdIEdldCByaWQgb2Ygc29tZSB1c2VsZXNzIGNvZGUKCiogcGxhbmNhdC5jIG5vIGxvbmdl ciBuZWVkcyB0byBsb2FkIHBhcnRpdGlvbiBjb25zdHJhaW50cywgYmVjYXVzZQpldmVuIHVw ZGF0ZS9kZWxldGUgbm93IHVzZSBwYXJ0cHJ1bmUuYydzIGZhY2lsaXRpZXMKCiogcmVsYXRp b25fZXhjbHVkZWRfYnlfY29uc3RyYWludHMgbm8gbG9uZ2VyIG5lZWRzIHRvIHdvcnJ5IGFi b3V0CmZpZWxkaW5nIHVwZGF0ZS9kZWxldGUgb24gcGFydGl0aW9uZWQgdGFibGVzbSwgd2hp Y2ggaW4gdHVybiBtZWFucwpJbmhlcml0YW5jZUtpbmQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2Fy eQotLS0KIHNyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMgICAgICAgICAgICAgIHwgIDEg LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jICAgfCAxMCAtLS0t LQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICAgICAgfCAgOCAtLS0t CiBzcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyB8ICAxIC0KIHNy Yy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYyAgICAgIHwgNzMgKysrKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg ICAgICAgICAgICAgfCAxNSAtLS0tLS0tCiA2IGZpbGVzIGNoYW5nZWQsIDkgaW5zZXJ0aW9u cygrKSwgOTkgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvbm9kZXMv b3V0ZnVuY3MuYyBiL3NyYy9iYWNrZW5kL25vZGVzL291dGZ1bmNzLmMKaW5kZXggYzVjMDhl ZmFjMS4uNDc1ZGM2OGQ4YSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvbm9kZXMvb3V0ZnVu Y3MuYworKysgYi9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCkBAIC0yMjA5LDcgKzIy MDksNiBAQCBfb3V0UGxhbm5lckluZm8oU3RyaW5nSW5mbyBzdHIsIGNvbnN0IFBsYW5uZXJJ bmZvICpub2RlKQogCVdSSVRFX0ZMT0FUX0ZJRUxEKHR1cGxlX2ZyYWN0aW9uLCAiJS40ZiIp OwogCVdSSVRFX0ZMT0FUX0ZJRUxEKGxpbWl0X3R1cGxlcywgIiUuMGYiKTsKIAlXUklURV9V SU5UX0ZJRUxEKHF1YWxfc2VjdXJpdHlfbGV2ZWwpOwotCVdSSVRFX0VOVU1fRklFTEQoaW5o VGFyZ2V0S2luZCwgSW5oZXJpdGFuY2VLaW5kKTsKIAlXUklURV9CT09MX0ZJRUxEKGhhc0pv aW5SVEVzKTsKIAlXUklURV9CT09MX0ZJRUxEKGhhc0xhdGVyYWxSVEVzKTsKIAlXUklURV9C T09MX0ZJRUxEKGhhc0hhdmluZ1F1YWwpOwpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vY3JlYXRlcGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v Y3JlYXRlcGxhbi5jCmluZGV4IDIzNmY1MDZjZmIuLjczODNlYjlkZmUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2NyZWF0ZXBsYW4uYworKysgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9jcmVhdGVwbGFuLmMKQEAgLTIwNTQsMTIgKzIwNTQsNyBA QCBjcmVhdGVfZ3JvdXBpbmdzZXRzX3BsYW4oUGxhbm5lckluZm8gKnJvb3QsIEdyb3VwaW5n U2V0c1BhdGggKmJlc3RfcGF0aCkKIAkvKgogCSAqIER1cmluZyBzZXRyZWZzLmMsIHdlJ2xs IG5lZWQgdGhlIGdyb3VwaW5nX21hcCB0byBmaXggdXAgdGhlIGNvbHMgbGlzdHMKIAkgKiBp biBHcm91cGluZ0Z1bmMgbm9kZXMuICBTYXZlIGl0IGZvciBzZXRyZWZzLmMgdG8gdXNlLgot CSAqCi0JICogVGhpcyBkb2Vzbid0IHdvcmsgaWYgd2UncmUgaW4gYW4gaW5oZXJpdGFuY2Ug c3VidHJlZSAoc2VlIG5vdGVzIGluCi0JICogY3JlYXRlX21vZGlmeXRhYmxlX3BsYW4pLiAg Rm9ydHVuYXRlbHkgd2UgY2FuJ3QgYmUgYmVjYXVzZSB0aGVyZSB3b3VsZAotCSAqIG5ldmVy IGJlIGdyb3VwaW5nIGluIGFuIFVQREFURS9ERUxFVEU7IGJ1dCBsZXQncyBBc3NlcnQgdGhh dC4KIAkgKi8KLQlBc3NlcnQocm9vdC0+aW5oVGFyZ2V0S2luZCA9PSBJTkhLSU5EX05PTkUp OwogCUFzc2VydChyb290LT5ncm91cGluZ19tYXAgPT0gTlVMTCk7CiAJcm9vdC0+Z3JvdXBp bmdfbWFwID0gZ3JvdXBpbmdfbWFwOwogCkBAIC0yMjE2LDEyICsyMjExLDcgQEAgY3JlYXRl X21pbm1heGFnZ19wbGFuKFBsYW5uZXJJbmZvICpyb290LCBNaW5NYXhBZ2dQYXRoICpiZXN0 X3BhdGgpCiAJICogd2l0aCBJbml0UGxhbiBvdXRwdXQgcGFyYW1zLiAgKFdlIGNhbid0IGp1 c3QgZG8gdGhhdCBsb2NhbGx5IGluIHRoZQogCSAqIE1pbk1heEFnZyBub2RlLCBiZWNhdXNl IHBhdGggbm9kZXMgYWJvdmUgaGVyZSBtYXkgaGF2ZSBBZ2cgcmVmZXJlbmNlcwogCSAqIGFz IHdlbGwuKSAgU2F2ZSB0aGUgbW1hZ2dyZWdhdGVzIGxpc3QgdG8gdGVsbCBzZXRyZWZzLmMg dG8gZG8gdGhhdC4KLQkgKgotCSAqIFRoaXMgZG9lc24ndCB3b3JrIGlmIHdlJ3JlIGluIGFu IGluaGVyaXRhbmNlIHN1YnRyZWUgKHNlZSBub3RlcyBpbgotCSAqIGNyZWF0ZV9tb2RpZnl0 YWJsZV9wbGFuKS4gIEZvcnR1bmF0ZWx5IHdlIGNhbid0IGJlIGJlY2F1c2UgdGhlcmUgd291 bGQKLQkgKiBuZXZlciBiZSBhZ2dyZWdhdGVzIGluIGFuIFVQREFURS9ERUxFVEU7IGJ1dCBs ZXQncyBBc3NlcnQgdGhhdC4KIAkgKi8KLQlBc3NlcnQocm9vdC0+aW5oVGFyZ2V0S2luZCA9 PSBJTkhLSU5EX05PTkUpOwogCUFzc2VydChyb290LT5taW5tYXhfYWdncyA9PSBOSUwpOwog CXJvb3QtPm1pbm1heF9hZ2dzID0gYmVzdF9wYXRoLT5tbWFnZ3JlZ2F0ZXM7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwppbmRleCBjZjY0Njg4ZTc2Li42YTY0MDNk N2ZlIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jCkBAIC02MzksNyAr NjM5LDYgQEAgc3VicXVlcnlfcGxhbm5lcihQbGFubmVyR2xvYmFsICpnbG9iLCBRdWVyeSAq cGFyc2UsCiAJcm9vdC0+Z3JvdXBpbmdfbWFwID0gTlVMTDsKIAlyb290LT5taW5tYXhfYWdn cyA9IE5JTDsKIAlyb290LT5xdWFsX3NlY3VyaXR5X2xldmVsID0gMDsKLQlyb290LT5pbmhU YXJnZXRLaW5kID0gSU5IS0lORF9OT05FOwogCXJvb3QtPmhhc1JlY3Vyc2lvbiA9IGhhc1Jl Y3Vyc2lvbjsKIAlpZiAoaGFzUmVjdXJzaW9uKQogCQlyb290LT53dF9wYXJhbV9pZCA9IGFz c2lnbl9zcGVjaWFsX2V4ZWNfcGFyYW0ocm9vdCk7CkBAIC0xMzIxLDEzICsxMzIwLDYgQEAg aW5oZXJpdGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCkKIAkJcGFyZW50X3J0ZS0+ c2VjdXJpdHlRdWFscyA9IE5JTDsKIAogCQkvKgotCQkgKiBNYXJrIHdoZXRoZXIgd2UncmUg cGxhbm5pbmcgYSBxdWVyeSB0byBhIHBhcnRpdGlvbmVkIHRhYmxlIG9yIGFuCi0JCSAqIGlu aGVyaXRhbmNlIHBhcmVudC4KLQkJICovCi0JCXN1YnJvb3QtPmluaFRhcmdldEtpbmQgPQot CQkJKHJvb3RSZWxhdGlvbiAhPSAwKSA/IElOSEtJTkRfUEFSVElUSU9ORUQgOiBJTkhLSU5E X0lOSEVSSVRFRDsKLQotCQkvKgogCQkgKiBJZ25vcmUgYSBwYXJ0aXRpb25lZCBjaGlsZC4g IEluc3RlYWQsIHRoZSBwYXRocyBvZiBpdHMgY2hpbGRyZW4gd2lsbAogCQkgKiBiZSBhZGRl ZCB0byBzdWJwYXRocy4KIAkJICovCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvcHJlcC9wcmVwam9pbnRyZWUuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3By ZXBqb2ludHJlZS5jCmluZGV4IGFlYmUxNjI3MTMuLjhhZWYxZjY1MzUgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci9wcmVwL3ByZXBqb2ludHJlZS5jCkBAIC04OTQsNyArODk0LDYg QEAgcHVsbF91cF9zaW1wbGVfc3VicXVlcnkoUGxhbm5lckluZm8gKnJvb3QsIE5vZGUgKmp0 bm9kZSwgUmFuZ2VUYmxFbnRyeSAqcnRlLAogCXN1YnJvb3QtPmdyb3VwaW5nX21hcCA9IE5V TEw7CiAJc3Vicm9vdC0+bWlubWF4X2FnZ3MgPSBOSUw7CiAJc3Vicm9vdC0+cXVhbF9zZWN1 cml0eV9sZXZlbCA9IDA7Ci0Jc3Vicm9vdC0+aW5oVGFyZ2V0S2luZCA9IElOSEtJTkRfTk9O RTsKIAlzdWJyb290LT5oYXNSZWN1cnNpb24gPSBmYWxzZTsKIAlzdWJyb290LT53dF9wYXJh bV9pZCA9IC0xOwogCXN1YnJvb3QtPm5vbl9yZWN1cnNpdmVfcGF0aCA9IE5VTEw7CmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKaW5kZXggZDZkYzgzY2E4MC4uZDhjMTk4 MWI0ZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcGxhbmNhdC5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5jYXQuYwpAQCAtMTI2Niwz NiArMTI2Niw2IEBAIGdldF9yZWxhdGlvbl9jb25zdHJhaW50cyhQbGFubmVySW5mbyAqcm9v dCwKIAkJfQogCX0KIAotCS8qCi0JICogQXBwZW5kIHBhcnRpdGlvbiBwcmVkaWNhdGVzLCBp ZiBhbnkuCi0JICoKLQkgKiBGb3Igc2VsZWN0cywgcGFydGl0aW9uIHBydW5pbmcgdXNlcyB0 aGUgcGFyZW50IHRhYmxlJ3MgcGFydGl0aW9uIGJvdW5kCi0JICogZGVzY3JpcHRvciwgaW5z dGVhZCBvZiBjb25zdHJhaW50IGV4Y2x1c2lvbiB3aGljaCBpcyBkcml2ZW4gYnkgdGhlCi0J ICogaW5kaXZpZHVhbCBwYXJ0aXRpb24ncyBwYXJ0aXRpb24gY29uc3RyYWludC4KLQkgKi8K LQlpZiAoZW5hYmxlX3BhcnRpdGlvbl9wcnVuaW5nICYmIHJvb3QtPnBhcnNlLT5jb21tYW5k VHlwZSAhPSBDTURfU0VMRUNUKQotCXsKLQkJTGlzdAkgICAqcGNxdWFsID0gUmVsYXRpb25H ZXRQYXJ0aXRpb25RdWFsKHJlbGF0aW9uKTsKLQotCQlpZiAocGNxdWFsKQotCQl7Ci0JCQkv KgotCQkJICogUnVuIHRoZSBwYXJ0aXRpb24gcXVhbHMgdGhyb3VnaCBjb25zdC1zaW1wbGlm aWNhdGlvbiBzaW1pbGFyIHRvCi0JCQkgKiBjaGVjayBjb25zdHJhaW50cy4gIFdlIHNraXAg Y2Fub25pY2FsaXplX3F1YWwsIHRob3VnaCwgYmVjYXVzZQotCQkJICogcGFydGl0aW9uIHF1 YWxzIHNob3VsZCBiZSBpbiBjYW5vbmljYWwgZm9ybSBhbHJlYWR5OyBhbHNvLAotCQkJICog c2luY2UgdGhlIHF1YWwgaXMgaW4gaW1wbGljaXQtQU5EIGZvcm1hdCwgd2UnZCBoYXZlIHRv Ci0JCQkgKiBleHBsaWNpdGx5IGNvbnZlcnQgaXQgdG8gZXhwbGljaXQtQU5EIGZvcm1hdCBh bmQgYmFjayBhZ2Fpbi4KLQkJCSAqLwotCQkJcGNxdWFsID0gKExpc3QgKikgZXZhbF9jb25z dF9leHByZXNzaW9ucyhyb290LCAoTm9kZSAqKSBwY3F1YWwpOwotCi0JCQkvKiBGaXggVmFy cyB0byBoYXZlIHRoZSBkZXNpcmVkIHZhcm5vICovCi0JCQlpZiAodmFybm8gIT0gMSkKLQkJ CQlDaGFuZ2VWYXJOb2RlcygoTm9kZSAqKSBwY3F1YWwsIDEsIHZhcm5vLCAwKTsKLQotCQkJ cmVzdWx0ID0gbGlzdF9jb25jYXQocmVzdWx0LCBwY3F1YWwpOwotCQl9Ci0JfQotCiAJdGFi bGVfY2xvc2UocmVsYXRpb24sIE5vTG9jayk7CiAKIAlyZXR1cm4gcmVzdWx0OwpAQCAtMTQx OSw0MCArMTM4OSwxNSBAQCByZWxhdGlvbl9leGNsdWRlZF9ieV9jb25zdHJhaW50cyhQbGFu bmVySW5mbyAqcm9vdCwKIAkvKgogCSAqIFNraXAgZnVydGhlciB0ZXN0cywgZGVwZW5kaW5n IG9uIGNvbnN0cmFpbnRfZXhjbHVzaW9uLgogCSAqLwotCXN3aXRjaCAoY29uc3RyYWludF9l eGNsdXNpb24pCi0JewotCQljYXNlIENPTlNUUkFJTlRfRVhDTFVTSU9OX09GRjoKLQotCQkJ LyoKLQkJCSAqIERvbid0IHBydW5lIGlmIGZlYXR1cmUgdHVybmVkIG9mZiAtLSBleGNlcHQg aWYgdGhlIHJlbGF0aW9uIGlzCi0JCQkgKiBhIHBhcnRpdGlvbi4gIFdoaWxlIHBhcnRwcnVu ZS5jLXN0eWxlIHBhcnRpdGlvbiBwcnVuaW5nIGlzIG5vdAotCQkJICogeWV0IGluIHVzZSBm b3IgYWxsIGNhc2VzICh1cGRhdGUvZGVsZXRlIGlzIG5vdCBoYW5kbGVkKSwgaXQKLQkJCSAq IHdvdWxkIGJlIGEgVUkgaG9ycm9yIHRvIHVzZSBkaWZmZXJlbnQgdXNlci12aXNpYmxlIGNv bnRyb2xzCi0JCQkgKiBkZXBlbmRpbmcgb24gc3VjaCBhIHZvbGF0aWxlIGltcGxlbWVudGF0 aW9uIGRldGFpbC4gIFRoZXJlZm9yZSwKLQkJCSAqIGZvciBwYXJ0aXRpb25lZCB0YWJsZXMg d2UgdXNlIGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyB0bwotCQkJICogY29udHJvbCB0aGlz IGJlaGF2aW9yLgotCQkJICovCi0JCQlpZiAocm9vdC0+aW5oVGFyZ2V0S2luZCA9PSBJTkhL SU5EX1BBUlRJVElPTkVEKQotCQkJCWJyZWFrOwotCQkJcmV0dXJuIGZhbHNlOwotCi0JCWNh c2UgQ09OU1RSQUlOVF9FWENMVVNJT05fUEFSVElUSU9OOgotCi0JCQkvKgotCQkJICogV2hl biBjb25zdHJhaW50X2V4Y2x1c2lvbiBpcyBzZXQgdG8gJ3BhcnRpdGlvbicgd2Ugb25seSBo YW5kbGUKLQkJCSAqIE9USEVSX01FTUJFUl9SRUxzLCBvciBCQVNFUkVMcyBpbiBjYXNlcyB3 aGVyZSB0aGUgcmVzdWx0IHRhcmdldAotCQkJICogaXMgYW4gaW5oZXJpdGFuY2UgcGFyZW50 IG9yIGEgcGFydGl0aW9uZWQgdGFibGUuCi0JCQkgKi8KLQkJCWlmICgocmVsLT5yZWxvcHRr aW5kICE9IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMKSAmJgotCQkJCSEocmVsLT5yZWxvcHRr aW5kID09IFJFTE9QVF9CQVNFUkVMICYmCi0JCQkJICByb290LT5pbmhUYXJnZXRLaW5kICE9 IElOSEtJTkRfTk9ORSAmJgotCQkJCSAgcmVsLT5yZWxpZCA9PSByb290LT5wYXJzZS0+cmVz dWx0UmVsYXRpb24pKQotCQkJCXJldHVybiBmYWxzZTsKLQkJCWJyZWFrOwotCi0JCWNhc2Ug Q09OU1RSQUlOVF9FWENMVVNJT05fT046Ci0JCQlicmVhazsJCQkJLyogYWx3YXlzIHRyeSB0 byBleGNsdWRlICovCi0JfQorCWlmIChjb25zdHJhaW50X2V4Y2x1c2lvbiA9PSBDT05TVFJB SU5UX0VYQ0xVU0lPTl9PRkYpCisJCXJldHVybiBmYWxzZTsKKwkvKgorCSAqIFdoZW4gY29u c3RyYWludF9leGNsdXNpb24gaXMgc2V0IHRvICdwYXJ0aXRpb24nIHdlIG9ubHkgaGFuZGxl CisJICogT1RIRVJfTUVNQkVSX1JFTHMuCisJICovCisJZWxzZSBpZiAoY29uc3RyYWludF9l eGNsdXNpb24gPT0gQ09OU1RSQUlOVF9FWENMVVNJT05fUEFSVElUSU9OICYmCisJCQkgcmVs LT5yZWxvcHRraW5kICE9IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMKQorCQlyZXR1cm4gZmFs c2U7CiAKIAkvKgogCSAqIENoZWNrIGZvciBzZWxmLWNvbnRyYWRpY3RvcnkgcmVzdHJpY3Rp b24gY2xhdXNlcy4gIFdlIGRhcmUgbm90IG1ha2UKZGlmZiAtLWdpdCBhL3NyYy9pbmNsdWRl L25vZGVzL3BhdGhub2Rlcy5oIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKaW5k ZXggMmRjMzA1OWYxNi4uYjIxOWZmODgwNiAxMDA2NDQKLS0tIGEvc3JjL2luY2x1ZGUvbm9k ZXMvcGF0aG5vZGVzLmgKKysrIGIvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgKQEAg LTgyLDE4ICs4Miw2IEBAIHR5cGVkZWYgZW51bSBVcHBlclJlbGF0aW9uS2luZAogCS8qIE5C OiBVUFBFUlJFTF9GSU5BTCBtdXN0IGJlIGxhc3QgZW51bSBlbnRyeTsgaXQncyB1c2VkIHRv IHNpemUgYXJyYXlzICovCiB9IFVwcGVyUmVsYXRpb25LaW5kOwogCi0vKgotICogVGhpcyBl bnVtIGlkZW50aWZpZXMgd2hpY2ggdHlwZSBvZiByZWxhdGlvbiBpcyBiZWluZyBwbGFubmVk IHRocm91Z2ggdGhlCi0gKiBpbmhlcml0YW5jZSBwbGFubmVyLiAgSU5IS0lORF9OT05FIGlu ZGljYXRlcyB0aGUgaW5oZXJpdGFuY2UgcGxhbm5lcgotICogd2FzIG5vdCB1c2VkLgotICov Ci10eXBlZGVmIGVudW0gSW5oZXJpdGFuY2VLaW5kCi17Ci0JSU5IS0lORF9OT05FLAotCUlO SEtJTkRfSU5IRVJJVEVELAotCUlOSEtJTkRfUEFSVElUSU9ORUQKLX0gSW5oZXJpdGFuY2VL aW5kOwotCiAvKi0tLS0tLS0tLS0KICAqIFBsYW5uZXJHbG9iYWwKICAqCQlHbG9iYWwgaW5m b3JtYXRpb24gZm9yIHBsYW5uaW5nL29wdGltaXphdGlvbgpAQCAtMzQyLDkgKzMzMCw2IEBA IHN0cnVjdCBQbGFubmVySW5mbwogCUluZGV4CQlxdWFsX3NlY3VyaXR5X2xldmVsOwkvKiBt aW5pbXVtIHNlY3VyaXR5X2xldmVsIGZvciBxdWFscyAqLwogCS8qIE5vdGU6IHF1YWxfc2Vj dXJpdHlfbGV2ZWwgaXMgemVybyBpZiB0aGVyZSBhcmUgbm8gc2VjdXJpdHlRdWFscyAqLwog Ci0JSW5oZXJpdGFuY2VLaW5kIGluaFRhcmdldEtpbmQ7CS8qIGluZGljYXRlcyBpZiB0aGUg dGFyZ2V0IHJlbGF0aW9uIGlzIGFuCi0JCQkJCQkJCQkgKiBpbmhlcml0YW5jZSBjaGlsZCBv ciBwYXJ0aXRpb24gb3IgYQotCQkJCQkJCQkJICogcGFydGl0aW9uZWQgdGFibGUgKi8KIAli b29sCQloYXNKb2luUlRFczsJLyogdHJ1ZSBpZiBhbnkgUlRFcyBhcmUgUlRFX0pPSU4ga2lu ZCAqLwogCWJvb2wJCWhhc0xhdGVyYWxSVEVzOyAvKiB0cnVlIGlmIGFueSBSVEVzIGFyZSBt YXJrZWQgTEFURVJBTCAqLwogCWJvb2wJCWhhc0hhdmluZ1F1YWw7CS8qIHRydWUgaWYgaGF2 aW5nUXVhbCB3YXMgbm9uLW51bGwgKi8KLS0gCjIuMTEuMAoK --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=UTF-8; name="0003-Lazy-creation-of-RTEs-for-inheritance-children.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0003-Lazy-creation-of-RTEs-for-inheritance-children.patch" RnJvbSAwMzliZDQ4ZGMyMWE2ZDFiNTllNDgxOGRjNWJjZDRiNzkxZjliMjA5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAyNiBPY3QgMjAxOCAxNjo0NTo1OSArMDkwMApTdWJqZWN0OiBbUEFUQ0gg My81XSBMYXp5IGNyZWF0aW9uIG9mIFJURXMgZm9yIGluaGVyaXRhbmNlIGNoaWxkcmVuCgpD dXJyZW50bHksIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzIGNhbGxlZCBmcm9tIHN1YnF1ZXJ5 X3BsYW5uZXIgb3BlbnMKYWxsIGluaGVyaXRhbmNlIGNoaWxkIHRhYmxlcyBhbmQgYWRkcyB0 aGVtIHRvIHRoZSBxdWVyeSdzIHJhbmdlCnRhYmxlIGFuZCBQbGFubmVySW5mbyBpbiB0aGUg Zm9ybSBvZiBBcHBlbmRSZWxJbmZvJ3MgaW5pdGlhbGx5IGFuZApsYXRlciBSZWxPcHRJbmZv J3MuICBGb3IgcGFydGl0aW9uaW5nLCB0aGF0J3MgcHJldHR5IHdhc3RlZnVsLCBiZWNhdXNl Cml0J3MgcG9zc2libGUgdG8gZGV0ZXJtaW5lIG9ubHkgdGhlIHBhcnRpdGlvbnMgdGhhdCB3 aWxsIG5lZWQgdG8gYmUKc2Nhbm5lZCB1c2luZyBwYXJ0aXRpb24gcHJ1bmluZywgd2hpY2gg ZG9lc24ndCByZXF1aXJlIG9wZW5pbmcgdGhlCnBhcnRpdGlvbnMgdGhlbXNlbHZlcy4gIEhv d2V2ZXIsIHRoZSBwb2ludCBhdCB3aGljaApleHBhbmRfaW5oZXJpdGVkX3RhYmxlcyBpcyBj YWxsZWQgY3VycmVudGx5IGlzIHRvbyBlYXJseSB0byBwZXJmb3JtCnBhcnRpdGlvbiBwcnVu aW5nLgoKVGhpcyBjb21taXQgcmVhcnJhbmdlcyB0aGluZ3Mgd2l0aGluIHRoZSBwbGFubmVy IHNvIHRoYXQKZXhwYW5kX2luaGVyaXRlZF90YWJsZXMgY2FuIGJlIGNhbGxlZCBmcm9tIHF1 ZXJ5X3BsYW5uZXIgYWZ0ZXIgdGhlCmxhdHRlciBoYXMgZmluaXNoZWQgc2V0dGluZyB1cCB0 aGUgaW5mb3JtYXRpb24gbmVlZGVkIHRvIHBlcmZvcm0KcGFydGl0aW9uIHBydW5pbmcuICBI b3dldmVyIHRoYXQgbWVhbnMgdGhlIFBsYW5uZXJJbmZvIGFycmF5cyB0aGF0CnN0b3JlIFJh bmdlVGJsRW50cnkncywgUmVsT3B0SW5mbydzLCBhbmQgQXBwZW5kUmVsSW5mbydzIG5lZWQg dG8KYmUgZXhwYW5kZWQgaWYgaW5oZXJpdGFuY2UgZXhwYW5zaW9uIGxlYWRzIHRvIGFkZGlu ZyBtb3JlIHJlbGF0aW9ucwp0byBwbGFubmluZy4gIFRoZXJlIGFyZSBhbHNvIGNvbnNlcXVl bmNlcyBhcm91bmQgdGFyZ2V0bGlzdApleHBhbnNpb24uICBGb3IgZXhhbXBsZSwgcHJlcHJv Y2Vzc190YXJnZXRsaXN0IGNhbm5vdCBhZGQgdGhlIGp1bmsKY29sdW1ucyBlbnRyaWVzIG5l ZWRlZCBmb3Igcm93IG1hcmsgaGFuZGxpbmcgdW50aWwgYWxsIG9mIHRoZQppbmhlcml0YW5j ZSBjaGlsZHJlbiBoYXZlIGJlZW4gZGV0ZXJtaW5lZCwgYmVjYXVzZSBkaWZmZXJlbnQgY2hp bGRyZW4KbWF5IG5lZWQgZGlmZmVyZW50IHR5cGVzIG9mIGp1bmsgY29sdW1ucyB0byBiZSBh ZGRlZC4gIFNvLCB0aGUKYXBwcm9hY2ggb2YgbGF0ZSBpbmhlcml0YW5jZSBleHBhbnNpb24g cmVxdWlyZWQgc29tZSBpbnRlcmZhY2UgdHdlYWtzCmZvciBwcmVwcm9jZXNzX3RhcmdldGxp c3QoKS4KCkZvciBwYXJ0aXRpb25pbmcsIGFsdGhvdWdoIHdlIGRvbid0IGNyZWF0ZSBhIFJh bmdlVGJsRW50cnkgYW5kClJlbE9wdEluZm8gZm9yIHBydW5lZCBwYXJ0aXRpb25zIGF0IG1h a2Vfb25lX3JlbCB0aW1lLCBwYXJ0aXRpb253aXNlCmpvaW4gY29kZSByZWxpZXMgb24gdGhl IGZhY3QgdGhhdCBldmVuIHRob3VnaCBwYXJ0aXRpb25zIG1heSBoYXZlCmJlZW4gcHJ1bmVk LCB0aGV5J2Qgc3RpbGwgb3duIGEgUmVsT3B0SW5mbyB0byBoYW5kbGUgdGhlIG91dGVyIGpv aW4KY2FzZSB3aGVyZSB0aGUgcHJ1bmVkIHBhcnRpdGlvbiBhcHBlYXJzIG9uIHRoZSBudWxs YWJsZSBzaWRlIG9mIGpvaW4uClBhcnRpdGlvbndpc2Ugam9pbiBjb2RlIGRlYWxzIHdpdGgg dGhhdCBieSBhbGxvY2F0aW5nIGR1bW15ClJlbE9wdEluZm9zIGZvciBwcnVuZWQgcGFydGl0 aW9ucyB0aGF0IGFyZSBiYXNlZCBtb3N0bHkgb24gdGhlaXIKcGFyZW50J3MgcHJvcGVydGll cy4KClRoZXJlIGFyZSBzb21lIHJlZ3Jlc3Npb24gdGVzdCBkaWZmczoKCiAxLiBDYXVzZWQg YnkgdGhlIGZhY3QgdGhhdCB3ZSBubyBsb25nZXIgYWxsb2NhdGUgYSBkdXBsaWNhdGUgUlQK ICAgIGVudHJ5IGZvciBhIHBhcnRpdGlvbmVkIHRhYmxlIGluIGl0cyByb2xlIGFzIGNoaWxk LCBhcyBzZWVuIGluCiAgICB0aGUgcGFydGl0aW9uX2FnZ3JlZ2F0ZS5vdXQgdGVzdCBvdXRw dXQuCgogMi4gVGhvc2UgaW4gcG9zdGdyZXNfZmR3Lm91dCBhcmUgY2F1c2VkIGJ5IHRoZSBm YWN0IHRoYXQganVuayBjb2x1bW5zCiAgICByZXF1aXJlZCBmb3Igcm93IG1hcmtpbmcgYXJl IGFkZGVkIHRvIHJlbHRhcmdldC0+ZXhwcnMgbGF0ZXIgdGhhbgogICAgdXNlciBjb2x1bW5z LCBiZWNhdXNlIHRoZSByb3cgbWFya2luZyBqdW5rIGNvbHVtbnMgYXJlbid0IGFkZGVkCiAg ICB1bnRpbCB0aGUgaW5oZXJpdGFuY2UgaXMgZXhwYW5kZWQgd2hpY2ggYXMgb2YgdGhpcyBj b21taXQgaXMKICAgIGxhdGVyIHRoYW4gaXQgdXNlZCB0byBiZSBhcyBub3RlZCBhYm92ZS4K LS0tCiBjb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0ICAg IHwgIDMyICstCiBzcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jICAgICAgICAgICAgICAg ICAgICAgIHwgICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBhdGhzLmMg ICAgICAgICAgICAgfCAyNjggKy0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgv am9pbnJlbHMuYyAgICAgICAgICAgICB8ICA3MSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVy L3BsYW4vaW5pdHNwbGFuLmMgICAgICAgICAgICB8ICA0OSAtLQogc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm1haW4uYyAgICAgICAgICAgICB8ICAxMCArCiBzcmMvYmFja2Vu ZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgICAgICAgICAgICAgIHwgMTk5ICsrKy0tCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMgICAgICAgICAgICAgIHwgICA2 ICsKIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB0bGlzdC5jICAgICAgICAgICAg fCAgMTUgKy0KIHNyYy9iYWNrZW5kL29wdGltaXplci9wcmVwL3ByZXB1bmlvbi5jICAgICAg ICAgICAgfCAgIDMgKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvYXBwZW5kaW5mby5j ICAgICAgICAgICB8ICA0NSArLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJp dC5jICAgICAgICAgICAgICB8IDg0MSArKysrKysrKysrKysrKysrLS0tLS0tCiBzcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMgICAgICAgICAgICAgIHwgIDQ3ICstCiBz cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMgICAgICAgICAgICAgIHwgMTA3 ICstLQogc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jICAgICAgICAgICAg ICB8ICA0NCArLQogc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmggICAgICAgICAgICAg ICAgICAgICB8ICAxOSArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGluZm8uaCAg ICAgICAgICAgICAgICB8ICAgNyArLQogc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2Rl LmggICAgICAgICAgICAgICAgICB8ICAgMSArCiBzcmMvaW5jbHVkZS9vcHRpbWl6ZXIvcGxh bmNhdC5oICAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBzcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcHJlcC5oICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBzcmMvdGVzdC9yZWdy ZXNzL2V4cGVjdGVkL3BhcnRpdGlvbl9hZ2dyZWdhdGUub3V0IHwgICA0ICstCiAyMSBmaWxl cyBjaGFuZ2VkLCAxMDQxIGluc2VydGlvbnMoKyksIDczNSBkZWxldGlvbnMoLSkKCmRpZmYg LS1naXQgYS9jb250cmliL3Bvc3RncmVzX2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0 IGIvY29udHJpYi9wb3N0Z3Jlc19mZHcvZXhwZWN0ZWQvcG9zdGdyZXNfZmR3Lm91dAppbmRl eCA0MjEwOGJkM2Q0Li40YmE0MDZhZjcxIDEwMDY0NAotLS0gYS9jb250cmliL3Bvc3RncmVz X2Zkdy9leHBlY3RlZC9wb3N0Z3Jlc19mZHcub3V0CisrKyBiL2NvbnRyaWIvcG9zdGdyZXNf ZmR3L2V4cGVjdGVkL3Bvc3RncmVzX2Zkdy5vdXQKQEAgLTcxMjgsMTUgKzcxMjgsMTUgQEAg c2VsZWN0ICogZnJvbSBiYXIgd2hlcmUgZjEgaW4gKHNlbGVjdCBmMSBmcm9tIGZvbykgZm9y IHVwZGF0ZTsKICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogYmFyMi5mMSwgYmFyMi5m MiwgYmFyMi5jdGlkLCBiYXIyLiosIGJhcjIudGFibGVvaWQKICAgICAgICAgICAgICAgICAg ICAgIFJlbW90ZSBTUUw6IFNFTEVDVCBmMSwgZjIsIGYzLCBjdGlkIEZST00gcHVibGljLmxv Y3QyIEZPUiBVUERBVEUKICAgICAgICAgIC0+ICBIYXNoCi0gICAgICAgICAgICAgICBPdXRw dXQ6IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAgICAgICAgICAg ICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZAogICAg ICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKLSAgICAgICAgICAgICAgICAgICAgIE91 dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQsIGZvby5mMQorICAgICAgICAg ICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxl b2lkCiAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6IGZvby5mMQogICAgICAgICAg ICAgICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4g IFNlcSBTY2FuIG9uIHB1YmxpYy5mb28KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQsIGZvby5mMQorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZvby5jdGlk LCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAtPiAg Rm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mb28yCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBPdXRwdXQ6IGZvbzIuY3RpZCwgZm9vMi4qLCBmb28yLnRhYmxlb2lkLCBmb28y LmYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvbzIuZjEs IGZvbzIuY3RpZCwgZm9vMi4qLCBmb28yLnRhYmxlb2lkCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgZjEsIGYyLCBmMywgY3RpZCBGUk9N IHB1YmxpYy5sb2N0MQogKDIzIHJvd3MpCiAKQEAgLTcxNjYsMTUgKzcxNjYsMTUgQEAgc2Vs ZWN0ICogZnJvbSBiYXIgd2hlcmUgZjEgaW4gKHNlbGVjdCBmMSBmcm9tIGZvbykgZm9yIHNo YXJlOwogICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBiYXIyLmYxLCBiYXIyLmYyLCBi YXIyLmN0aWQsIGJhcjIuKiwgYmFyMi50YWJsZW9pZAogICAgICAgICAgICAgICAgICAgICAg UmVtb3RlIFNRTDogU0VMRUNUIGYxLCBmMiwgZjMsIGN0aWQgRlJPTSBwdWJsaWMubG9jdDIg Rk9SIFNIQVJFCiAgICAgICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgT3V0cHV0OiBm b28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAgICAgICBP dXRwdXQ6IGZvby5mMSwgZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQKICAgICAgICAg ICAgICAgIC0+ICBIYXNoQWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6 IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAgICAgICAgICAgICAg ICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZAog ICAgICAgICAgICAgICAgICAgICAgR3JvdXAgS2V5OiBmb28uZjEKICAgICAgICAgICAgICAg ICAgICAgIC0+ICBBcHBlbmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEg U2NhbiBvbiBwdWJsaWMuZm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBP dXRwdXQ6IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9v LiosIGZvby50YWJsZW9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVp Z24gU2NhbiBvbiBwdWJsaWMuZm9vMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgT3V0cHV0OiBmb28yLmN0aWQsIGZvbzIuKiwgZm9vMi50YWJsZW9pZCwgZm9vMi5mMQor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28yLmYxLCBmb28y LmN0aWQsIGZvbzIuKiwgZm9vMi50YWJsZW9pZAogICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgUmVtb3RlIFNRTDogU0VMRUNUIGYxLCBmMiwgZjMsIGN0aWQgRlJPTSBwdWJs aWMubG9jdDEKICgyMyByb3dzKQogCkBAIC03MjAzLDE1ICs3MjAzLDE1IEBAIHVwZGF0ZSBi YXIgc2V0IGYyID0gZjIgKyAxMDAgd2hlcmUgZjEgaW4gKHNlbGVjdCBmMSBmcm9tIGZvbyk7 CiAgICAgICAgICAtPiAgU2VxIFNjYW4gb24gcHVibGljLmJhcgogICAgICAgICAgICAgICAg T3V0cHV0OiBiYXIuZjEsIGJhci5mMiwgYmFyLmN0aWQKICAgICAgICAgIC0+ICBIYXNoCi0g ICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkLCBm b28uZjEKKyAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9vLios IGZvby50YWJsZW9pZAogICAgICAgICAgICAgICAgLT4gIEhhc2hBZ2dyZWdhdGUKLSAgICAg ICAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQs IGZvby5mMQorICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uZjEsIGZvby5jdGlk LCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAgICAgICAgICAgICAgICBHcm91cCBLZXk6 IGZvby5mMQogICAgICAgICAgICAgICAgICAgICAgLT4gIEFwcGVuZAogICAgICAgICAgICAg ICAgICAgICAgICAgICAgLT4gIFNlcSBTY2FuIG9uIHB1YmxpYy5mb28KLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIE91dHB1dDogZm9vLmN0aWQsIGZvby4qLCBmb28udGFi bGVvaWQsIGZvby5mMQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0 OiBmb28uZjEsIGZvby5jdGlkLCBmb28uKiwgZm9vLnRhYmxlb2lkCiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAtPiAgRm9yZWlnbiBTY2FuIG9uIHB1YmxpYy5mb28yCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvbzIuY3RpZCwgZm9vMi4qLCBm b28yLnRhYmxlb2lkLCBmb28yLmYxCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBPdXRwdXQ6IGZvbzIuZjEsIGZvbzIuY3RpZCwgZm9vMi4qLCBmb28yLnRhYmxlb2lkCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxFQ1QgZjEs IGYyLCBmMywgY3RpZCBGUk9NIHB1YmxpYy5sb2N0MQogICAgLT4gIEhhc2ggSm9pbgogICAg ICAgICAgT3V0cHV0OiBiYXIyLmYxLCAoYmFyMi5mMiArIDEwMCksIGJhcjIuZjMsIGJhcjIu Y3RpZCwgZm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQKQEAgLTcyMjEsMTUgKzcyMjEs MTUgQEAgdXBkYXRlIGJhciBzZXQgZjIgPSBmMiArIDEwMCB3aGVyZSBmMSBpbiAoc2VsZWN0 IGYxIGZyb20gZm9vKTsKICAgICAgICAgICAgICAgIE91dHB1dDogYmFyMi5mMSwgYmFyMi5m MiwgYmFyMi5mMywgYmFyMi5jdGlkCiAgICAgICAgICAgICAgICBSZW1vdGUgU1FMOiBTRUxF Q1QgZjEsIGYyLCBmMywgY3RpZCBGUk9NIHB1YmxpYy5sb2N0MiBGT1IgVVBEQVRFCiAgICAg ICAgICAtPiAgSGFzaAotICAgICAgICAgICAgICAgT3V0cHV0OiBmb28uY3RpZCwgZm9vLios IGZvby50YWJsZW9pZCwgZm9vLmYxCisgICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5mMSwg Zm9vLmN0aWQsIGZvby4qLCBmb28udGFibGVvaWQKICAgICAgICAgICAgICAgIC0+ICBIYXNo QWdncmVnYXRlCi0gICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5jdGlkLCBmb28u KiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAgICAgICAgICAgICAgICAgICAgIE91dHB1dDog Zm9vLmYxLCBmb28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9pZAogICAgICAgICAgICAgICAg ICAgICAgR3JvdXAgS2V5OiBmb28uZjEKICAgICAgICAgICAgICAgICAgICAgIC0+ICBBcHBl bmQKICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0+ICBTZXEgU2NhbiBvbiBwdWJsaWMu Zm9vCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQ6IGZvby5jdGlk LCBmb28uKiwgZm9vLnRhYmxlb2lkLCBmb28uZjEKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIE91dHB1dDogZm9vLmYxLCBmb28uY3RpZCwgZm9vLiosIGZvby50YWJsZW9p ZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgLT4gIEZvcmVpZ24gU2NhbiBvbiBwdWJs aWMuZm9vMgotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28y LmN0aWQsIGZvbzIuKiwgZm9vMi50YWJsZW9pZCwgZm9vMi5mMQorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgT3V0cHV0OiBmb28yLmYxLCBmb28yLmN0aWQsIGZvbzIuKiwg Zm9vMi50YWJsZW9pZAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgUmVtb3Rl IFNRTDogU0VMRUNUIGYxLCBmMiwgZjMsIGN0aWQgRlJPTSBwdWJsaWMubG9jdDEKICgzOSBy b3dzKQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jIGIvc3Jj L2JhY2tlbmQvbm9kZXMvb3V0ZnVuY3MuYwppbmRleCA0NzVkYzY4ZDhhLi4zOTJiYzhmZjAx IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9ub2Rlcy9vdXRmdW5jcy5jCisrKyBiL3NyYy9i YWNrZW5kL25vZGVzL291dGZ1bmNzLmMKQEAgLTIyNzAsNiArMjI3MCw3IEBAIF9vdXRSZWxP cHRJbmZvKFN0cmluZ0luZm8gc3RyLCBjb25zdCBSZWxPcHRJbmZvICpub2RlKQogCVdSSVRF X0JPT0xfRklFTEQoY29uc2lkZXJfcGFydGl0aW9ud2lzZV9qb2luKTsKIAlXUklURV9CSVRN QVBTRVRfRklFTEQodG9wX3BhcmVudF9yZWxpZHMpOwogCVdSSVRFX05PREVfRklFTEQocGFy dGl0aW9uZWRfY2hpbGRfcmVscyk7CisJV1JJVEVfVUlOVF9GSUVMRChpbmhfcm9vdF9wYXJl bnQpOwogfQogCiBzdGF0aWMgdm9pZApkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BhdGgvYWxscGF0aHMuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2FsbHBh dGhzLmMKaW5kZXggMGE0NzI5ZTY0Ni4uNzQ5ZDE3Mzc3MCAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BhdGgvYWxscGF0aHMuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGF0aC9hbGxwYXRocy5jCkBAIC00NSw3ICs0NSw2IEBACiAjaW5jbHVkZSAib3B0 aW1pemVyL3RsaXN0LmgiCiAjaW5jbHVkZSAicGFyc2VyL3BhcnNlX2NsYXVzZS5oIgogI2lu Y2x1ZGUgInBhcnNlci9wYXJzZXRyZWUuaCIKLSNpbmNsdWRlICJwYXJ0aXRpb25pbmcvcGFy dHBydW5lLmgiCiAjaW5jbHVkZSAicmV3cml0ZS9yZXdyaXRlTWFuaXAuaCIKICNpbmNsdWRl ICJ1dGlscy9sc3lzY2FjaGUuaCIKIApAQCAtMTQ1LDkgKzE0NCw2IEBAIHN0YXRpYyB2b2lk IHN1YnF1ZXJ5X3B1c2hfcXVhbChRdWVyeSAqc3VicXVlcnksCiBzdGF0aWMgdm9pZCByZWN1 cnNlX3B1c2hfcXVhbChOb2RlICpzZXRPcCwgUXVlcnkgKnRvcHF1ZXJ5LAogCQkJCSAgUmFu Z2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGksIE5vZGUgKnF1YWwpOwogc3RhdGljIHZvaWQg cmVtb3ZlX3VudXNlZF9zdWJxdWVyeV9vdXRwdXRzKFF1ZXJ5ICpzdWJxdWVyeSwgUmVsT3B0 SW5mbyAqcmVsKTsKLXN0YXRpYyBib29sIGFwcGx5X2NoaWxkX2Jhc2VxdWFscyhQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAotCQkJCQkgIFJlbE9wdEluZm8gKmNoaWxk cmVsLAotCQkJCQkgIFJhbmdlVGJsRW50cnkgKmNoaWxkUlRFLCBBcHBlbmRSZWxJbmZvICph cHBpbmZvKTsKIAogCiAvKgpAQCAtMzkwLDYgKzM4NiwxNCBAQCBzZXRfcmVsX3NpemUoUGxh bm5lckluZm8gKnJvb3QsIFJlbE9wdEluZm8gKnJlbCwKIAllbHNlIGlmIChydGUtPmluaCkK IAl7CiAJCS8qCisJCSAqIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzIG1heSBoYXZlIHByb3Zl ZCB0aGF0IHRoZSByZWxhdGlvbiBpcyBlbXB0eS4KKwkJICogRm9yIGV4YW1wbGUsIGlmIGl0 J3MgYSBwYXJ0aXRpb25lZCB0YWJsZSB3aXRoIDAgcGFydGl0aW9ucyBvciBhbGwKKwkJICog b2YgaXRzIHBhcnRpdGlvbnMgYXJlIHBydW5lZC4gIEluIHRoYXQgY2FzZSBub3RoaW5nIHRv IGRvIGhlcmUuCisJCSAqLworCQlpZiAoSVNfRFVNTVlfUkVMKHJlbCkpCisJCQlyZXR1cm47 CisKKwkJLyoKIAkJICogSWYgaXQncyBhIHRhcmdldCByZWxhdGlvbiwgc2V0IHRoZSBzaXpl cyBvZiBjaGlsZHJlbiBpbnN0ZWFkLgogCQkgKiBPdGhlcndpc2UsIHdlJ2xsIGFwcGVuZCB0 aGUgb3V0cHV0cyBvZiBjaGlsZHJlbiwgc28gcHJvY2VzcyBpdCBhcwogCQkgKiBhbiAiYXBw ZW5kIHJlbGF0aW9uIi4KQEAgLTk4NiwyOSArOTkwLDEyIEBAIHNldF9pbmhlcml0ZWRfdGFy Z2V0X3JlbF9zaXplcyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCWlu dAkJCXBhcmVudFJUaW5kZXggPSBydGk7CiAJYm9vbAkJaGFzX2xpdmVfY2hpbGRyZW4gPSBm YWxzZTsKIAlMaXN0Q2VsbCAgICpsOwotCVJlbGlkcwkJbGl2ZV9jaGlsZHJlbiA9IE5VTEw7 Ci0JYm9vbAkJZGlkX3BydW5pbmcgPSBmYWxzZTsKIAogCS8qIEd1YXJkIGFnYWluc3Qgc3Rh Y2sgb3ZlcmZsb3cgZHVlIHRvIG92ZXJseSBkZWVwIGluaGVyaXRhbmNlIHRyZWUuICovCiAJ Y2hlY2tfc3RhY2tfZGVwdGgoKTsKIAogCUFzc2VydChJU19TSU1QTEVfUkVMKHJlbCkpOwog Ci0JLyoKLQkgKiBJZiB0aGUgcGFydGl0aW9uZWQgcmVsYXRpb24gaGFzIGFueSBiYXNlcmVz dHJpY3RpbmZvIHF1YWxzIHRoZW4gd2UKLQkgKiBhdHRlbXB0IHRvIHVzZSB0aGVzZSBxdWFs cyB0byBwcnVuZSBhd2F5IHBhcnRpdGlvbnMgdGhhdCBjYW5ub3QKLQkgKiBwb3NzaWJseSBj b250YWluIGFueSB0dXBsZXMgbWF0Y2hpbmcgdGhlc2UgcXVhbHMuICBJbiB0aGlzIGNhc2Ug d2UnbGwKLQkgKiBzdG9yZSB0aGUgcmVsaWRzIG9mIGFsbCBwYXJ0aXRpb25zIHdoaWNoIGNv dWxkIHBvc3NpYmx5IGNvbnRhaW4gYQotCSAqIG1hdGNoaW5nIHR1cGxlLCBhbmQgc2tpcCBh bnl0aGluZyBlbHNlIGluIHRoZSBsb29wIGJlbG93LgotCSAqLwotCWlmIChlbmFibGVfcGFy dGl0aW9uX3BydW5pbmcgJiYKLQkJcnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUgJiYKLQkJcmVsLT5iYXNlcmVzdHJpY3RpbmZvICE9IE5JTCkKLQl7Ci0JCWxp dmVfY2hpbGRyZW4gPSBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMocmVsKTsKLQkJZGlk X3BydW5pbmcgPSB0cnVlOwotCX0KLQogCWZvcmVhY2gobCwgcm9vdC0+YXBwZW5kX3JlbF9s aXN0KQogCXsKIAkJQXBwZW5kUmVsSW5mbyAqYXBwaW5mbyA9IChBcHBlbmRSZWxJbmZvICop IGxmaXJzdChsKTsKQEAgLTEwMjUsNDcgKzEwMTIsMjMgQEAgc2V0X2luaGVyaXRlZF90YXJn ZXRfcmVsX3NpemVzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAKIAkJ Y2hpbGRSVGluZGV4ID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7CiAJCWNoaWxkUlRFID0gcm9v dC0+c2ltcGxlX3J0ZV9hcnJheVtjaGlsZFJUaW5kZXhdOworCQlBc3NlcnQoY2hpbGRSVEUg IT0gTlVMTCk7CiAKIAkJLyoKLQkJICogVGhlIGNoaWxkIHJlbCdzIFJlbE9wdEluZm8gd2Fz IGFscmVhZHkgY3JlYXRlZCBkdXJpbmcKLQkJICogYWRkX2Jhc2VfcmVsc190b19xdWVyeS4K KwkJICogVGhlIGNoaWxkIHJlbCdzIFJlbE9wdEluZm8gd2FzIGNyZWF0ZWQgZHVyaW5nCisJ CSAqIGV4cGFuZF9pbmhlcml0ZWRfdGFibGVzKCkuCiAJCSAqLwogCQljaGlsZHJlbCA9IGZp bmRfYmFzZV9yZWwocm9vdCwgY2hpbGRSVGluZGV4KTsKKwkJQXNzZXJ0KGNoaWxkcmVsICE9 IE5VTEwpOwogCQlBc3NlcnQoY2hpbGRyZWwtPnJlbG9wdGtpbmQgPT0gUkVMT1BUX09USEVS X01FTUJFUl9SRUwpOwogCi0JCWlmIChkaWRfcHJ1bmluZyAmJiAhYm1zX2lzX21lbWJlcihh cHBpbmZvLT5jaGlsZF9yZWxpZCwgbGl2ZV9jaGlsZHJlbikpCi0JCXsKLQkJCS8qIFRoaXMg cGFydGl0aW9uIHdhcyBwcnVuZWQ7IHNraXAgaXQuICovCi0JCQlzZXRfZHVtbXlfcmVsX3Bh dGhsaXN0KGNoaWxkcmVsKTsKLQkJCWNvbnRpbnVlOwotCQl9Ci0KIAkJLyoKLQkJICogV2Ug aGF2ZSB0byBjb3B5IHRoZSBwYXJlbnQncyB0YXJnZXRsaXN0IGFuZCBxdWFscyB0byB0aGUg Y2hpbGQsCi0JCSAqIHdpdGggYXBwcm9wcmlhdGUgc3Vic3RpdHV0aW9uIG9mIHZhcmlhYmxl cy4gIElmIGFueSBjb25zdGFudCBmYWxzZQotCQkgKiBvciBOVUxMIGNsYXVzZXMgdHVybiB1 cCwgd2UgY2FuIGRpc3JlZ2FyZCB0aGUgY2hpbGQgcmlnaHQgYXdheS4KLQkJICogSWYgbm90 LCB3ZSBjYW4gYXBwbHkgY29uc3RyYWludCBleGNsdXNpb24gd2l0aCBqdXN0IHRoZQotCQkg KiBiYXNlcmVzdHJpY3RpbmZvIHF1YWxzLgorCQkgKiBDaGlsZCByZWxhdGlvbiBtYXkgaGF2 ZSBiZWVuIG1hcmtlZCBkdW1teSBpZiBidWlsZF9hcHBlbmRfY2hpbGRfcmVsCisJCSAqIGZv dW5kIHNlbGYtY29udHJhZGljdG9yeSBxdWFscyBvciBxdWFscyB0aGF0IGNvbnRyYWRpY3Qg aXRzCisJCSAqIGNvbnN0cmFpbnRzLgogCQkgKi8KLQkJaWYgKCFhcHBseV9jaGlsZF9iYXNl cXVhbHMocm9vdCwgcmVsLCBjaGlsZHJlbCwgY2hpbGRSVEUsIGFwcGluZm8pKQotCQl7Ci0J CQkvKgotCQkJICogU29tZSByZXN0cmljdGlvbiBjbGF1c2UgcmVkdWNlZCB0byBjb25zdGFu dCBGQUxTRSBvciBOVUxMIGFmdGVyCi0JCQkgKiBzdWJzdGl0dXRpb24sIHNvIHRoaXMgY2hp bGQgbmVlZCBub3QgYmUgc2Nhbm5lZC4KLQkJCSAqLwotCQkJc2V0X2R1bW15X3JlbF9wYXRo bGlzdChjaGlsZHJlbCk7CisJCWlmIChJU19EVU1NWV9SRUwoY2hpbGRyZWwpKQogCQkJY29u dGludWU7Ci0JCX0KLQotCQlpZiAocmVsYXRpb25fZXhjbHVkZWRfYnlfY29uc3RyYWludHMo cm9vdCwgY2hpbGRyZWwsIGNoaWxkUlRFKSkKLQkJewotCQkJLyoKLQkJCSAqIFRoaXMgY2hp bGQgbmVlZCBub3QgYmUgc2Nhbm5lZCwgc28gd2UgY2FuIG9taXQgaXQgZnJvbSB0aGUKLQkJ CSAqIGFwcGVuZHJlbC4KLQkJCSAqLwotCQkJc2V0X2R1bW15X3JlbF9wYXRobGlzdChjaGls ZHJlbCk7Ci0JCQljb250aW51ZTsKLQkJfQogCiAJCS8qCiAJCSAqIEFkZCBtaXNzaW5nIFZh cnMgdG8gY2hpbGQncyByZWx0YXJnZXQuCkBAIC0xMTkyLDggKzExNTUsNiBAQCBzZXRfYXBw ZW5kX3JlbF9zaXplKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJZG91 YmxlCSAgICpwYXJlbnRfYXR0cnNpemVzOwogCWludAkJCW5hdHRyczsKIAlMaXN0Q2VsbCAg ICpsOwotCVJlbGlkcwkJbGl2ZV9jaGlsZHJlbiA9IE5VTEw7Ci0JYm9vbAkJZGlkX3BydW5p bmcgPSBmYWxzZTsKIAogCS8qIEd1YXJkIGFnYWluc3Qgc3RhY2sgb3ZlcmZsb3cgZHVlIHRv IG92ZXJseSBkZWVwIGluaGVyaXRhbmNlIHRyZWUuICovCiAJY2hlY2tfc3RhY2tfZGVwdGgo KTsKQEAgLTEyMDEsMzIgKzExNjIsNiBAQCBzZXRfYXBwZW5kX3JlbF9zaXplKFBsYW5uZXJJ bmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCiAJQXNzZXJ0KElTX1NJTVBMRV9SRUwocmVs KSk7CiAKIAkvKgotCSAqIEluaXRpYWxpemUgcGFydGl0aW9uZWRfY2hpbGRfcmVscyB0byBj b250YWluIHRoaXMgUlQgaW5kZXguCi0JICoKLQkgKiBOb3RlIHRoYXQgZHVyaW5nIHRoZSBz ZXRfYXBwZW5kX3JlbF9wYXRobGlzdCgpIHBoYXNlLCB3ZSB3aWxsIGJ1YmJsZSB1cAotCSAq IHRoZSBpbmRleGVzIG9mIHBhcnRpdGlvbmVkIHJlbGF0aW9ucyB0aGF0IGFwcGVhciBkb3du IGluIHRoZSB0cmVlLCBzbwotCSAqIHRoYXQgd2hlbiB3ZSd2ZSBjcmVhdGVkIFBhdGhzIGZv ciBhbGwgdGhlIGNoaWxkcmVuLCB0aGUgcm9vdAotCSAqIHBhcnRpdGlvbmVkIHRhYmxlJ3Mg bGlzdCB3aWxsIGNvbnRhaW4gYWxsIHN1Y2ggaW5kZXhlcy4KLQkgKi8KLQlpZiAocnRlLT5y ZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCXJlbC0+cGFydGl0aW9u ZWRfY2hpbGRfcmVscyA9IGxpc3RfbWFrZTFfaW50KHJ0aSk7Ci0KLQkvKgotCSAqIElmIHRo ZSBwYXJ0aXRpb25lZCByZWxhdGlvbiBoYXMgYW55IGJhc2VyZXN0cmljdGluZm8gcXVhbHMg dGhlbiB3ZQotCSAqIGF0dGVtcHQgdG8gdXNlIHRoZXNlIHF1YWxzIHRvIHBydW5lIGF3YXkg cGFydGl0aW9ucyB0aGF0IGNhbm5vdAotCSAqIHBvc3NpYmx5IGNvbnRhaW4gYW55IHR1cGxl cyBtYXRjaGluZyB0aGVzZSBxdWFscy4gIEluIHRoaXMgY2FzZSB3ZSdsbAotCSAqIHN0b3Jl IHRoZSByZWxpZHMgb2YgYWxsIHBhcnRpdGlvbnMgd2hpY2ggY291bGQgcG9zc2libHkgY29u dGFpbiBhCi0JICogbWF0Y2hpbmcgdHVwbGUsIGFuZCBza2lwIGFueXRoaW5nIGVsc2UgaW4g dGhlIGxvb3AgYmVsb3cuCi0JICovCi0JaWYgKGVuYWJsZV9wYXJ0aXRpb25fcHJ1bmluZyAm JgotCQlydGUtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSAmJgotCQly ZWwtPmJhc2VyZXN0cmljdGluZm8gIT0gTklMKQotCXsKLQkJbGl2ZV9jaGlsZHJlbiA9IHBy dW5lX2FwcGVuZF9yZWxfcGFydGl0aW9ucyhyZWwpOwotCQlkaWRfcHJ1bmluZyA9IHRydWU7 Ci0JfQotCi0JLyoKIAkgKiBJZiB0aGlzIGlzIGEgcGFydGl0aW9uZWQgYmFzZXJlbCwgc2V0 IHRoZSBjb25zaWRlcl9wYXJ0aXRpb253aXNlX2pvaW4KIAkgKiBmbGFnOyBjdXJyZW50bHks IHdlIG9ubHkgY29uc2lkZXIgcGFydGl0aW9ud2lzZSBqb2lucyB3aXRoIHRoZSBiYXNlcmVs CiAJICogaWYgaXRzIHRhcmdldGxpc3QgZG9lc24ndCBjb250YWluIGEgd2hvbGUtcm93IFZh ci4KQEAgLTEyNzIsNTAgKzEyMDcsMjYgQEAgc2V0X2FwcGVuZF9yZWxfc2l6ZShQbGFubmVy SW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsLAogCiAJCWNoaWxkUlRpbmRleCA9IGFwcGlu Zm8tPmNoaWxkX3JlbGlkOwogCQljaGlsZFJURSA9IHJvb3QtPnNpbXBsZV9ydGVfYXJyYXlb Y2hpbGRSVGluZGV4XTsKKwkJQXNzZXJ0KGNoaWxkUlRFICE9IE5VTEwpOwogCiAJCS8qCi0J CSAqIFRoZSBjaGlsZCByZWwncyBSZWxPcHRJbmZvIHdhcyBhbHJlYWR5IGNyZWF0ZWQgZHVy aW5nCi0JCSAqIGFkZF9iYXNlX3JlbHNfdG9fcXVlcnkuCisJCSAqIFRoZSBjaGlsZCByZWwn cyBSZWxPcHRJbmZvIHdhcyBjcmVhdGVkIGR1cmluZworCQkgKiBleHBhbmRfaW5oZXJpdGVk X3RhYmxlcygpLgogCQkgKi8KIAkJY2hpbGRyZWwgPSBmaW5kX2Jhc2VfcmVsKHJvb3QsIGNo aWxkUlRpbmRleCk7CisJCUFzc2VydChjaGlsZHJlbCAhPSBOVUxMKTsKIAkJQXNzZXJ0KGNo aWxkcmVsLT5yZWxvcHRraW5kID09IFJFTE9QVF9PVEhFUl9NRU1CRVJfUkVMKTsKIAotCQlp ZiAoZGlkX3BydW5pbmcgJiYgIWJtc19pc19tZW1iZXIoYXBwaW5mby0+Y2hpbGRfcmVsaWQs IGxpdmVfY2hpbGRyZW4pKQotCQl7Ci0JCQkvKiBUaGlzIHBhcnRpdGlvbiB3YXMgcHJ1bmVk OyBza2lwIGl0LiAqLwotCQkJc2V0X2R1bW15X3JlbF9wYXRobGlzdChjaGlsZHJlbCk7Ci0J CQljb250aW51ZTsKLQkJfQotCiAJCS8qCi0JCSAqIFdlIGhhdmUgdG8gY29weSB0aGUgcGFy ZW50J3MgdGFyZ2V0bGlzdCBhbmQgcXVhbHMgdG8gdGhlIGNoaWxkLAotCQkgKiB3aXRoIGFw cHJvcHJpYXRlIHN1YnN0aXR1dGlvbiBvZiB2YXJpYWJsZXMuICBJZiBhbnkgY29uc3RhbnQg ZmFsc2UKLQkJICogb3IgTlVMTCBjbGF1c2VzIHR1cm4gdXAsIHdlIGNhbiBkaXNyZWdhcmQg dGhlIGNoaWxkIHJpZ2h0IGF3YXkuCi0JCSAqIElmIG5vdCwgd2UgY2FuIGFwcGx5IGNvbnN0 cmFpbnQgZXhjbHVzaW9uIHdpdGgganVzdCB0aGUKLQkJICogYmFzZXJlc3RyaWN0aW5mbyBx dWFscy4KKwkJICogQ2hpbGQgcmVsYXRpb24gbWF5IGhhdmUgYmVlbiBtYXJrZWQgZHVtbXkg aWYgYnVpbGRfYXBwZW5kX2NoaWxkX3JlbAorCQkgKiBmb3VuZCBzZWxmLWNvbnRyYWRpY3Rv cnkgcXVhbHMgb3IgcXVhbHMgdGhhdCBjb250cmFkaWN0IGl0cworCQkgKiBjb25zdHJhaW50 cy4KIAkJICovCi0JCWlmICghYXBwbHlfY2hpbGRfYmFzZXF1YWxzKHJvb3QsIHJlbCwgY2hp bGRyZWwsIGNoaWxkUlRFLCBhcHBpbmZvKSkKLQkJewotCQkJLyoKLQkJCSAqIFNvbWUgcmVz dHJpY3Rpb24gY2xhdXNlIHJlZHVjZWQgdG8gY29uc3RhbnQgRkFMU0Ugb3IgTlVMTCBhZnRl cgotCQkJICogc3Vic3RpdHV0aW9uLCBzbyB0aGlzIGNoaWxkIG5lZWQgbm90IGJlIHNjYW5u ZWQuCi0JCQkgKi8KLQkJCXNldF9kdW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOworCQlp ZiAoSVNfRFVNTVlfUkVMKGNoaWxkcmVsKSkKIAkJCWNvbnRpbnVlOwotCQl9Ci0KLQkJaWYg KHJlbGF0aW9uX2V4Y2x1ZGVkX2J5X2NvbnN0cmFpbnRzKHJvb3QsIGNoaWxkcmVsLCBjaGls ZFJURSkpCi0JCXsKLQkJCS8qCi0JCQkgKiBUaGlzIGNoaWxkIG5lZWQgbm90IGJlIHNjYW5u ZWQsIHNvIHdlIGNhbiBvbWl0IGl0IGZyb20gdGhlCi0JCQkgKiBhcHBlbmRyZWwuCi0JCQkg Ki8KLQkJCXNldF9kdW1teV9yZWxfcGF0aGxpc3QoY2hpbGRyZWwpOwotCQkJY29udGludWU7 Ci0JCX0KIAogCQkvKgotCQkgKiBDRSBmYWlsZWQsIHNvIGZpbmlzaCBjb3B5aW5nL21vZGlm eWluZyB0YXJnZXRsaXN0IGFuZCBqb2luIHF1YWxzLgorCQkgKiBDb3B5L01vZGlmeSB0YXJn ZXRsaXN0LgogCQkgKgogCQkgKiBOQjogdGhlIHJlc3VsdGluZyBjaGlsZHJlbC0+cmVsdGFy Z2V0LT5leHBycyBtYXkgY29udGFpbiBhcmJpdHJhcnkKIAkJICogZXhwcmVzc2lvbnMsIHdo aWNoIG90aGVyd2lzZSB3b3VsZCBub3Qgb2NjdXIgaW4gYSByZWwncyB0YXJnZXRsaXN0LgpA QCAtMjg0OSw2ICsyNzYwLDcgQEAgaW5oZXJpdGFuY2VfbWFrZV9yZWxfZnJvbV9qb2lubGlz dChQbGFubmVySW5mbyAqcm9vdCwgTGlzdCAqam9pbmxpc3QpCiAJCQljb250aW51ZTsKIAog CQljaGlsZHJlbCA9IGZpbmRfYmFzZV9yZWwocm9vdCwgYXBwaW5mby0+Y2hpbGRfcmVsaWQp OworCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7CiAKIAkJLyogSWdub3JlIGV4Y2x1ZGVk L3BydW5lZCBjaGlsZHJlbi4gKi8KIAkJaWYgKElTX0RVTU1ZX1JFTChjaGlsZHJlbCkpCkBA IC0zOTQ0LDEzNCArMzg1Niw2IEBAIGdlbmVyYXRlX3BhcnRpdGlvbndpc2Vfam9pbl9wYXRo cyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsKQogCWxpc3RfZnJlZShsaXZl X2NoaWxkcmVuKTsKIH0KIAotLyoKLSAqIGFwcGx5X2NoaWxkX2Jhc2VxdWFscwotICoJCVBv cHVsYXRlIGNoaWxkcmVsJ3MgcXVhbHMgYmFzZWQgb24gcmVsJ3MgcXVhbHMsIHRyYW5zbGF0 aW5nIHRoZW0gdXNpbmcKLSAqCQlhcHBpbmZvLgotICoKLSAqIElmIGFueSBvZiB0aGUgcmVz dWx0aW5nIGNsYXVzZXMgZXZhbHVhdGUgdG8gZmFsc2Ugb3IgTlVMTCwgd2UgcmV0dXJuIGZh bHNlCi0gKiBhbmQgZG9uJ3QgYXBwbHkgYW55IHF1YWxzLiAgQ2FsbGVyIGNhbiBtYXJrIHRo ZSByZWxhdGlvbiBhcyBhIGR1bW15IHJlbCBpbgotICogdGhpcyBjYXNlLCBzaW5jZSBpdCBu ZWVkbid0IGJlIHNjYW5uZWQuCi0gKgotICogSWYgYW55IHJlc3VsdGluZyBjbGF1c2VzIGV2 YWx1YXRlIHRvIHRydWUsIHRoZXkncmUgdW5uZWNlc3NhcnkgYW5kIHdlIGRvbid0Ci0gKiBh cHBseSB0aGVuLgotICovCi1zdGF0aWMgYm9vbAotYXBwbHlfY2hpbGRfYmFzZXF1YWxzKFBs YW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCi0JCQkJCSAgUmVsT3B0SW5mbyAq Y2hpbGRyZWwsIFJhbmdlVGJsRW50cnkgKmNoaWxkUlRFLAotCQkJCQkgIEFwcGVuZFJlbElu Zm8gKmFwcGluZm8pCi17Ci0JTGlzdAkgICAqY2hpbGRxdWFsczsKLQlJbmRleAkJY3FfbWlu X3NlY3VyaXR5OwotCUxpc3RDZWxsICAgKmxjOwotCi0JLyoKLQkgKiBUaGUgY2hpbGQgcmVs J3MgdGFyZ2V0bGlzdCBtaWdodCBjb250YWluIG5vbi1WYXIgZXhwcmVzc2lvbnMsIHdoaWNo Ci0JICogbWVhbnMgdGhhdCBzdWJzdGl0dXRpb24gaW50byB0aGUgcXVhbHMgY291bGQgcHJv ZHVjZSBvcHBvcnR1bml0aWVzIGZvcgotCSAqIGNvbnN0LXNpbXBsaWZpY2F0aW9uLCBhbmQg cGVyaGFwcyBldmVuIHBzZXVkb2NvbnN0YW50IHF1YWxzLiBUaGVyZWZvcmUsCi0JICogdHJh bnNmb3JtIGVhY2ggUmVzdHJpY3RJbmZvIHNlcGFyYXRlbHkgdG8gc2VlIGlmIGl0IHJlZHVj ZXMgdG8gYQotCSAqIGNvbnN0YW50IG9yIHBzZXVkb2NvbnN0YW50LiAgKFdlIG11c3QgcHJv Y2VzcyB0aGVtIHNlcGFyYXRlbHkgdG8ga2VlcAotCSAqIHRyYWNrIG9mIHRoZSBzZWN1cml0 eSBsZXZlbCBvZiBlYWNoIHF1YWwuKQotCSAqLwotCWNoaWxkcXVhbHMgPSBOSUw7Ci0JY3Ff bWluX3NlY3VyaXR5ID0gVUlOVF9NQVg7Ci0JZm9yZWFjaChsYywgcmVsLT5iYXNlcmVzdHJp Y3RpbmZvKQotCXsKLQkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChSZXN0cmljdEluZm8gKikg bGZpcnN0KGxjKTsKLQkJTm9kZQkgICAqY2hpbGRxdWFsOwotCQlMaXN0Q2VsbCAgICpsYzI7 Ci0KLQkJQXNzZXJ0KElzQShyaW5mbywgUmVzdHJpY3RJbmZvKSk7Ci0JCWNoaWxkcXVhbCA9 IGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwKLQkJCQkJCQkJCQkgICAoTm9kZSAqKSBy aW5mby0+Y2xhdXNlLAotCQkJCQkJCQkJCSAgIDEsICZhcHBpbmZvKTsKLQkJY2hpbGRxdWFs ID0gZXZhbF9jb25zdF9leHByZXNzaW9ucyhyb290LCBjaGlsZHF1YWwpOwotCQkvKiBjaGVj ayBmb3IgZmxhdC1vdXQgY29uc3RhbnQgKi8KLQkJaWYgKGNoaWxkcXVhbCAmJiBJc0EoY2hp bGRxdWFsLCBDb25zdCkpCi0JCXsKLQkJCWlmICgoKENvbnN0ICopIGNoaWxkcXVhbCktPmNv bnN0aXNudWxsIHx8Ci0JCQkJIURhdHVtR2V0Qm9vbCgoKENvbnN0ICopIGNoaWxkcXVhbCkt PmNvbnN0dmFsdWUpKQotCQkJewotCQkJCS8qIFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29u c3RhbnQgRkFMU0Ugb3IgTlVMTCAqLwotCQkJCXJldHVybiBmYWxzZTsKLQkJCX0KLQkJCS8q IFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgVFJVRSwgc28gZHJvcCBpdCAqLwot CQkJY29udGludWU7Ci0JCX0KLQkJLyogbWlnaHQgaGF2ZSBnb3R0ZW4gYW4gQU5EIGNsYXVz ZSwgaWYgc28gZmxhdHRlbiBpdCAqLwotCQlmb3JlYWNoKGxjMiwgbWFrZV9hbmRzX2ltcGxp Y2l0KChFeHByICopIGNoaWxkcXVhbCkpCi0JCXsKLQkJCU5vZGUJICAgKm9uZWNxID0gKE5v ZGUgKikgbGZpcnN0KGxjMik7Ci0JCQlib29sCQlwc2V1ZG9jb25zdGFudDsKLQotCQkJLyog Y2hlY2sgZm9yIHBzZXVkb2NvbnN0YW50IChubyBWYXJzIG9yIHZvbGF0aWxlIGZ1bmN0aW9u cykgKi8KLQkJCXBzZXVkb2NvbnN0YW50ID0KLQkJCQkhY29udGFpbl92YXJzX29mX2xldmVs KG9uZWNxLCAwKSAmJgotCQkJCSFjb250YWluX3ZvbGF0aWxlX2Z1bmN0aW9ucyhvbmVjcSk7 Ci0JCQlpZiAocHNldWRvY29uc3RhbnQpCi0JCQl7Ci0JCQkJLyogdGVsbCBjcmVhdGVwbGFu LmMgdG8gY2hlY2sgZm9yIGdhdGluZyBxdWFscyAqLwotCQkJCXJvb3QtPmhhc1BzZXVkb0Nv bnN0YW50UXVhbHMgPSB0cnVlOwotCQkJfQotCQkJLyogcmVjb25zdGl0dXRlIFJlc3RyaWN0 SW5mbyB3aXRoIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi8KLQkJCWNoaWxkcXVhbHMgPSBs YXBwZW5kKGNoaWxkcXVhbHMsCi0JCQkJCQkJCSBtYWtlX3Jlc3RyaWN0aW5mbygoRXhwciAq KSBvbmVjcSwKLQkJCQkJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNoZWRfZG93biwKLQkJCQkJ CQkJCQkJCSAgIHJpbmZvLT5vdXRlcmpvaW5fZGVsYXllZCwKLQkJCQkJCQkJCQkJCSAgIHBz ZXVkb2NvbnN0YW50LAotCQkJCQkJCQkJCQkJICAgcmluZm8tPnNlY3VyaXR5X2xldmVsLAot CQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCkpOwotCQkJLyogdHJhY2sgbWluaW11 bSBzZWN1cml0eSBsZXZlbCBhbW9uZyBjaGlsZCBxdWFscyAqLwotCQkJY3FfbWluX3NlY3Vy aXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgcmluZm8tPnNlY3VyaXR5X2xldmVsKTsKLQkJ fQotCX0KLQotCS8qCi0JICogSW4gYWRkaXRpb24gdG8gdGhlIHF1YWxzIGluaGVyaXRlZCBm cm9tIHRoZSBwYXJlbnQsIHdlIG1pZ2h0IGhhdmUKLQkgKiBzZWN1cml0eVF1YWxzIGFzc29j aWF0ZWQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY2hpbGQgbm9kZS4gKEN1cnJlbnRseQotCSAq IHRoaXMgY2FuIG9ubHkgaGFwcGVuIGluIGFwcGVuZHJlbHMgb3JpZ2luYXRpbmcgZnJvbSBV TklPTiBBTEw7Ci0JICogaW5oZXJpdGFuY2UgY2hpbGQgdGFibGVzIGRvbid0IGhhdmUgdGhl aXIgb3duIHNlY3VyaXR5UXVhbHMsIHNlZQotCSAqIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRy eSgpLikJUHVsbCBhbnkgc3VjaCBzZWN1cml0eVF1YWxzIHVwIGludG8gdGhlCi0JICogYmFz ZXJlc3RyaWN0aW5mbyBmb3IgdGhlIGNoaWxkLiAgVGhpcyBpcyBzaW1pbGFyIHRvCi0JICog cHJvY2Vzc19zZWN1cml0eV9iYXJyaWVyX3F1YWxzKCkgZm9yIHRoZSBwYXJlbnQgcmVsLCBl eGNlcHQgdGhhdCB3ZQotCSAqIGNhbid0IG1ha2UgYW55IGdlbmVyYWwgZGVkdWN0aW9ucyBm cm9tIHN1Y2ggcXVhbHMsIHNpbmNlIHRoZXkgZG9uJ3QKLQkgKiBob2xkIGZvciB0aGUgd2hv bGUgYXBwZW5kcmVsLgotCSAqLwotCWlmIChjaGlsZFJURS0+c2VjdXJpdHlRdWFscykKLQl7 Ci0JCUluZGV4CQlzZWN1cml0eV9sZXZlbCA9IDA7Ci0KLQkJZm9yZWFjaChsYywgY2hpbGRS VEUtPnNlY3VyaXR5UXVhbHMpCi0JCXsKLQkJCUxpc3QJICAgKnF1YWxzZXQgPSAoTGlzdCAq KSBsZmlyc3QobGMpOwotCQkJTGlzdENlbGwgICAqbGMyOwotCi0JCQlmb3JlYWNoKGxjMiwg cXVhbHNldCkKLQkJCXsKLQkJCQlFeHByCSAgICpxdWFsID0gKEV4cHIgKikgbGZpcnN0KGxj Mik7Ci0KLQkJCQkvKiBub3QgbGlrZWx5IHRoYXQgd2UnZCBzZWUgY29uc3RhbnRzIGhlcmUs IHNvIG5vIGNoZWNrICovCi0JCQkJY2hpbGRxdWFscyA9IGxhcHBlbmQoY2hpbGRxdWFscywK LQkJCQkJCQkJCSBtYWtlX3Jlc3RyaWN0aW5mbyhxdWFsLAotCQkJCQkJCQkJCQkJCSAgIHRy dWUsIGZhbHNlLCBmYWxzZSwKLQkJCQkJCQkJCQkJCQkgICBzZWN1cml0eV9sZXZlbCwKLQkJ CQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKSk7Ci0JCQkJY3FfbWluX3NlY3VyaXR5 ID0gTWluKGNxX21pbl9zZWN1cml0eSwgc2VjdXJpdHlfbGV2ZWwpOwotCQkJfQotCQkJc2Vj dXJpdHlfbGV2ZWwrKzsKLQkJfQotCQlBc3NlcnQoc2VjdXJpdHlfbGV2ZWwgPD0gcm9vdC0+ cXVhbF9zZWN1cml0eV9sZXZlbCk7Ci0JfQotCi0JLyoKLQkgKiBPSywgd2UndmUgZ290IGFs bCB0aGUgYmFzZXJlc3RyaWN0aW5mbyBxdWFscyBmb3IgdGhpcyBjaGlsZC4KLQkgKi8KLQlj aGlsZHJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IGNoaWxkcXVhbHM7Ci0JY2hpbGRyZWwtPmJh c2VyZXN0cmljdF9taW5fc2VjdXJpdHkgPSBjcV9taW5fc2VjdXJpdHk7Ci0KLQlyZXR1cm4g dHJ1ZTsKLX0KLQogLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgKgkJCURFQlVHIFNVUFBP UlQKICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5k L29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0 aC9qb2lucmVscy5jCmluZGV4IGRmYmJmZGFjNmQuLjZmNzdkMmEwZjQgMTAwNjQ0Ci0tLSBh L3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5yZWxzLmMKKysrIGIvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMuYwpAQCAtMjEsNiArMjEsNyBAQAogI2luY2x1 ZGUgIm9wdGltaXplci9qb2luaW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRobm9k ZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1ZGUgIm9wdGltaXpl ci90bGlzdC5oIgogI2luY2x1ZGUgInBhcnRpdGlvbmluZy9wYXJ0Ym91bmRzLmgiCiAjaW5j bHVkZSAidXRpbHMvbHN5c2NhY2hlLmgiCiAjaW5jbHVkZSAidXRpbHMvbWVtdXRpbHMuaCIK QEAgLTUyLDYgKzUzLDkgQEAgc3RhdGljIFNwZWNpYWxKb2luSW5mbyAqYnVpbGRfY2hpbGRf am9pbl9zamluZm8oUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQlSZWxpZHMgbGVmdF9yZWxp ZHMsIFJlbGlkcyByaWdodF9yZWxpZHMpOwogc3RhdGljIGludCBtYXRjaF9leHByX3RvX3Bh cnRpdGlvbl9rZXlzKEV4cHIgKmV4cHIsIFJlbE9wdEluZm8gKnJlbCwKIAkJCQkJCQkgYm9v bCBzdHJpY3Rfb3ApOworc3RhdGljIFJlbE9wdEluZm8gKmJ1aWxkX2R1bW15X3BhcnRpdGlv bl9yZWwoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQlSZWxPcHRJbmZvICpwYXJlbnQs CisJCQkJCQkJCQlpbnQgcGFydGlkeCk7CiAKIAogLyoKQEAgLTEzODQsNiArMTM4OCwxMSBA QCB0cnlfcGFydGl0aW9ud2lzZV9qb2luKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZv ICpyZWwxLCBSZWxPcHRJbmZvICpyZWwyLAogCQlBcHBlbmRSZWxJbmZvICoqYXBwaW5mb3M7 CiAJCWludAkJCW5hcHBpbmZvczsKIAorCQlpZiAoSVNfU0lNUExFX1JFTChyZWwxKSAmJiBj aGlsZF9yZWwxID09IE5VTEwpCisJCQljaGlsZF9yZWwxID0gYnVpbGRfZHVtbXlfcGFydGl0 aW9uX3JlbChyb290LCByZWwxLCBjbnRfcGFydHMpOworCQlpZiAoSVNfU0lNUExFX1JFTChy ZWwxKSAmJiBjaGlsZF9yZWwyID09IE5VTEwpCisJCQljaGlsZF9yZWwyID0gYnVpbGRfZHVt bXlfcGFydGl0aW9uX3JlbChyb290LCByZWwyLCBjbnRfcGFydHMpOworCiAJCS8qCiAJCSAq IElmIGEgY2hpbGQgdGFibGUgaGFzIGNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbj1mYWxz ZSwgaXQgbWVhbnMKIAkJICogdGhhdCBpdCdzIGEgZHVtbXkgcmVsYXRpb24gZm9yIHdoaWNo IHdlIHNraXBwZWQgc2V0dGluZyB1cCB0bGlzdApAQCAtMTQ2Miw4ICsxNDcxLDE0IEBAIHVw ZGF0ZV9jaGlsZF9yZWxfaW5mbyhQbGFubmVySW5mbyAqcm9vdCwKIAkJCQkJCQkgICAoTm9k ZSAqKSByZWwtPnJlbHRhcmdldC0+ZXhwcnMsCiAJCQkJCQkJICAgMSwgJmFwcGluZm8pOwog Ci0JLyogTWFrZSBjaGlsZCBlbnRyaWVzIGluIHRoZSBFcXVpdmFsZW5jZUNsYXNzIGFzIHdl bGwgKi8KLQlpZiAocmVsLT5oYXNfZWNsYXNzX2pvaW5zIHx8IGhhc191c2VmdWxfcGF0aGtl eXMocm9vdCwgcmVsKSkKKwkvKgorCSAqIE1ha2UgY2hpbGQgZW50cmllcyBpbiB0aGUgRXF1 aXZhbGVuY2VDbGFzcyBhcyB3ZWxsLiAgSWYgdGhlIGNoaWxkcmVsCisJICogYXBwZWFycyB0 byBiZSBhIGR1bW15IG9uZSAob25lIGJ1aWx0IGJ5IGJ1aWxkX2R1bW15X3BhcnRpdGlvbl9y ZWwoKSksCisJICogbm8gbmVlZCB0byBtYWtlIGFueSBuZXcgZW50cmllcywgYmVjYXVzZSBh bnl0aGluZyB0aGF0J2QgbmVlZCB0aG9zZQorCSAqIGNhbiBpbnN0ZWFkIHVzZSB0aGUgcGFy ZW50J3MgKHJlbCkuCisJICovCisJaWYgKGNoaWxkcmVsLT5yZWxpZCAhPSByZWwtPnJlbGlk ICYmCisJCShyZWwtPmhhc19lY2xhc3Nfam9pbnMgfHwgaGFzX3VzZWZ1bF9wYXRoa2V5cyhy b290LCByZWwpKSkKIAkJYWRkX2NoaWxkX3JlbF9lcXVpdmFsZW5jZXMocm9vdCwgYXBwaW5m bywgcmVsLCBjaGlsZHJlbCk7CiAJY2hpbGRyZWwtPmhhc19lY2xhc3Nfam9pbnMgPSByZWwt Pmhhc19lY2xhc3Nfam9pbnM7CiB9CkBAIC0xNjc0LDMgKzE2ODksNTUgQEAgbWF0Y2hfZXhw cl90b19wYXJ0aXRpb25fa2V5cyhFeHByICpleHByLCBSZWxPcHRJbmZvICpyZWwsIGJvb2wg c3RyaWN0X29wKQogCiAJcmV0dXJuIC0xOwogfQorCisvKgorICogYnVpbGRfZHVtbXlfcGFy dGl0aW9uX3JlbAorICoJCUJ1aWxkIGEgUmVsT3B0SW5mbyBhbmQgQXBwZW5kUmVsSW5mbyBm b3IgYSBwcnVuZWQgcGFydGl0aW9uCisgKgorICogVGhpcyBkb2VzIG5vdCByZXN1bHQgaW4g b3BlbmluZyB0aGUgcmVsYXRpb24gb3IgYSByYW5nZSB0YWJsZSBlbnRyeSBiZWluZworICog Y3JlYXRlZC4gIEFsc28sIHRoZSBSZWxPcHRJbmZvIHRodXMgY3JlYXRlZCBpcyBub3Qgc3Rv cmVkIGFueXdoZXJlIGVsc2UKKyAqIGJlc2lkZSB0aGUgcGFyZW50J3MgcGFydF9yZWxzIGFy cmF5LgorICoKKyAqIFRoZSBvbmx5IHJlYXNvbiB0aGlzIGV4aXN0cyBpcyBiZWNhdXNlIHBh cnRpdGlvbi13aXNlIGpvaW4sIGluIHNvbWUgY2FzZXMsCisgKiBuZWVkcyBhIFJlbE9wdElu Zm8gdG8gcmVwcmVzZW50IGFuIGVtcHR5IHJlbGF0aW9uIHRoYXQncyBvbiB0aGUgbnVsbGFi bGUKKyAqIHNpZGUgb2YgYW4gb3V0ZXIgam9pbiwgc28gdGhhdCBhIFBhdGggcmVwcmVzZW50 aW5nIHRoZSBvdXRlciBqb2luIGNhbiBiZQorICogY3JlYXRlZC4KKyAqLworc3RhdGljIFJl bE9wdEluZm8gKgorYnVpbGRfZHVtbXlfcGFydGl0aW9uX3JlbChQbGFubmVySW5mbyAqcm9v dCwgUmVsT3B0SW5mbyAqcGFyZW50LCBpbnQgcGFydGlkeCkKK3sKKwlSYW5nZVRibEVudHJ5 ICpwYXJlbnRydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3BhcmVudC0+cmVsaWRdOwor CVJlbE9wdEluZm8gKnJlbDsKKworCUFzc2VydChwYXJlbnQtPnBhcnRfcmVsc1twYXJ0aWR4 XSA9PSBOVUxMKTsKKworCS8qIENyZWF0ZSBtaW5pbWFsbHkgdmFsaWQtbG9va2luZyBSZWxP cHRJbmZvIHdpdGggcGFyZW50J3MgcmVsaWQuICovCisJcmVsID0gbWFrZU5vZGUoUmVsT3B0 SW5mbyk7CisJcmVsLT5yZWxvcHRraW5kID0gUkVMT1BUX09USEVSX01FTUJFUl9SRUw7CisJ cmVsLT5yZWxpZCA9IHBhcmVudC0+cmVsaWQ7CisJcmVsLT5yZWxpZHMgPSBibXNfY29weShw YXJlbnQtPnJlbGlkcyk7CisJaWYgKHBhcmVudC0+dG9wX3BhcmVudF9yZWxpZHMpCisJCXJl bC0+dG9wX3BhcmVudF9yZWxpZHMgPSBwYXJlbnQtPnRvcF9wYXJlbnRfcmVsaWRzOworCWVs c2UKKwkJcmVsLT50b3BfcGFyZW50X3JlbGlkcyA9IGJtc19jb3B5KHBhcmVudC0+cmVsaWRz KTsKKwlyZWwtPnJlbHRhcmdldCA9IGNvcHlfcGF0aHRhcmdldChwYXJlbnQtPnJlbHRhcmdl dCk7CisJcGFyZW50LT5wYXJ0X3JlbHNbcGFydGlkeF0gPSByZWw7CisJbWFya19kdW1teV9y ZWwocmVsKTsKKworCS8qCisJICogTm93IHdlJ2xsIG5lZWQgYSAobm8tb3ApIEFwcGVuZFJl bEluZm8gZm9yIHBhcmVudCwgYmVjYXVzZSB3ZSdyZQorCSAqIHNldHRpbmcgdGhlIGR1bW15 IHBhcnRpdGlvbidzIHJlbGlkIHRvIGJlIHNhbWUgYXMgdGhlIHBhcmVudCdzLgorCSAqLwor CWlmIChyb290LT5hcHBlbmRfcmVsX2FycmF5W3BhcmVudC0+cmVsaWRdID09IE5VTEwpCisJ eworCQlBcHBlbmRSZWxJbmZvICphcHBpbmZvID0gbWFrZV9hcHBlbmRfcmVsX2luZm8ocGFy ZW50LCBwYXJlbnRydGUsCisJCQkJCQkJCQkJCQkJICBwYXJlbnQtPnR1cGRlc2MsCisJCQkJ CQkJCQkJCQkJICBwYXJlbnRydGUtPnJlbGlkLAorCQkJCQkJCQkJCQkJCSAgcGFyZW50LT5y ZWx0eXBlLAorCQkJCQkJCQkJCQkJCSAgcGFyZW50LT5yZWxpZCk7CisKKwkJcm9vdC0+YXBw ZW5kX3JlbF9hcnJheVtwYXJlbnQtPnJlbGlkXSA9IGFwcGluZm87CisJfQorCisJcmV0dXJu IHJlbDsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL2luaXRz cGxhbi5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vaW5pdHNwbGFuLmMKaW5kZXgg MmFmYzNmMWRmZS4uNWU4YThiMWVlZSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3BsYW4vaW5pdHNwbGFuLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4v aW5pdHNwbGFuLmMKQEAgLTQxOSw3ICs0MTksNiBAQCB2b2lkCiBjcmVhdGVfbGF0ZXJhbF9q b2luX2luZm8oUGxhbm5lckluZm8gKnJvb3QpCiB7CiAJYm9vbAkJZm91bmRfbGF0ZXJhbHMg PSBmYWxzZTsKLQlSZWxpZHMJCXByZXZfcGFyZW50cyBQR19VU0VEX0ZPUl9BU1NFUlRTX09O TFkgPSBOVUxMOwogCUluZGV4CQlydGk7CiAJTGlzdENlbGwgICAqbGM7CiAKQEAgLTYxOCw1 NCArNjE3LDYgQEAgY3JlYXRlX2xhdGVyYWxfam9pbl9pbmZvKFBsYW5uZXJJbmZvICpyb290 KQogCQkJCWJtc19hZGRfbWVtYmVyKGJyZWwyLT5sYXRlcmFsX3JlZmVyZW5jZXJzLCBydGkp OwogCQl9CiAJfQotCi0JLyoKLQkgKiBMYXN0bHksIHByb3BhZ2F0ZSBsYXRlcmFsX3JlbGlk cyBhbmQgbGF0ZXJhbF9yZWZlcmVuY2VycyBmcm9tIGFwcGVuZHJlbAotCSAqIHBhcmVudCBy ZWxzIHRvIHRoZWlyIGNoaWxkIHJlbHMuICBXZSBpbnRlbnRpb25hbGx5IGdpdmUgZWFjaCBj aGlsZCByZWwKLQkgKiB0aGUgc2FtZSBtaW5pbXVtIHBhcmFtZXRlcml6YXRpb24sIGV2ZW4g dGhvdWdoIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdAotCSAqIHNvbWUgZG9uJ3QgcmVmZXJl bmNlIGFsbCB0aGUgbGF0ZXJhbCByZWxzLiAgVGhpcyBpcyBiZWNhdXNlIGFueSBhcHBlbmQK LQkgKiBwYXRoIGZvciB0aGUgcGFyZW50IHdpbGwgaGF2ZSB0byBoYXZlIHRoZSBzYW1lIHBh cmFtZXRlcml6YXRpb24gZm9yCi0JICogZXZlcnkgY2hpbGQgYW55d2F5LCBhbmQgdGhlcmUn cyBubyB2YWx1ZSBpbiBmb3JjaW5nIGV4dHJhCi0JICogcmVwYXJhbWV0ZXJpemVfcGF0aCgp IGNhbGxzLiAgU2ltaWxhcmx5LCBhIGxhdGVyYWwgcmVmZXJlbmNlIHRvIHRoZQotCSAqIHBh cmVudCBwcmV2ZW50cyB1c2Ugb2Ygb3RoZXJ3aXNlLW1vdmFibGUgam9pbiByZWxzIGZvciBl YWNoIGNoaWxkLgotCSAqCi0JICogSXQncyBwb3NzaWJsZSBmb3IgY2hpbGQgcmVscyB0byBo YXZlIHRoZWlyIG93biBjaGlsZHJlbiwgaW4gd2hpY2ggY2FzZQotCSAqIHRoZSB0b3Btb3N0 IHBhcmVudCdzIGxhdGVyYWwgaW5mbyBtdXN0IGJlIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkg ZG93bi4KLQkgKiBUaGlzIGNvZGUgaGFuZGxlcyB0aGF0IGNhc2UgY29ycmVjdGx5IHNvIGxv bmcgYXMgYXBwZW5kX3JlbF9saXN0IGhhcwotCSAqIGVudHJpZXMgZm9yIGNoaWxkIHJlbGF0 aW9uc2hpcHMgYmVmb3JlIGdyYW5kY2hpbGQgcmVsYXRpb25zaGlwcywgd2hpY2gKLQkgKiBp cyBhbiBva2F5IGFzc3VtcHRpb24gcmlnaHQgbm93LCBidXQgd2UnbGwgbmVlZCB0byBiZSBj YXJlZnVsIHRvCi0JICogcHJlc2VydmUgaXQuICBUaGUgYXNzZXJ0aW9ucyBiZWxvdyBjaGVj ayBmb3IgaW5jb3JyZWN0IG9yZGVyaW5nLgotCSAqLwotCWZvcmVhY2gobGMsIHJvb3QtPmFw cGVuZF9yZWxfbGlzdCkKLQl7Ci0JCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSAoQXBwZW5k UmVsSW5mbyAqKSBsZmlyc3QobGMpOwotCQlSZWxPcHRJbmZvICpwYXJlbnRyZWwgPSByb290 LT5zaW1wbGVfcmVsX2FycmF5W2FwcGluZm8tPnBhcmVudF9yZWxpZF07Ci0JCVJlbE9wdElu Zm8gKmNoaWxkcmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVthcHBpbmZvLT5jaGlsZF9y ZWxpZF07Ci0KLQkJLyoKLQkJICogSWYgd2UncmUgcHJvY2Vzc2luZyBhIHN1YnF1ZXJ5IG9m IGEgcXVlcnkgd2l0aCBpbmhlcml0ZWQgdGFyZ2V0IHJlbAotCQkgKiAoY2YuIGluaGVyaXRh bmNlX3BsYW5uZXIpLCBhcHBlbmRfcmVsX2xpc3QgbWF5IGNvbnRhaW4gZW50cmllcyBmb3IK LQkJICogdGFibGVzIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIHRoZSBjdXJyZW50IHN1YnF1ZXJ5 IGFuZCBoZW5jZSBoYXZlIG5vCi0JCSAqIFJlbE9wdEluZm8uICBJZ25vcmUgdGhlbS4gIFdl IGNhbiBpZ25vcmUgZGVhZCByZWxzLCB0b28uCi0JCSAqLwotCQlpZiAocGFyZW50cmVsID09 IE5VTEwgfHwgIUlTX1NJTVBMRV9SRUwocGFyZW50cmVsKSkKLQkJCWNvbnRpbnVlOwotCi0J CS8qIFZlcmlmeSB0aGF0IGNoaWxkcmVuIGFyZSBwcm9jZXNzZWQgYmVmb3JlIGdyYW5kY2hp bGRyZW4gKi8KLSNpZmRlZiBVU0VfQVNTRVJUX0NIRUNLSU5HCi0JCXByZXZfcGFyZW50cyA9 IGJtc19hZGRfbWVtYmVyKHByZXZfcGFyZW50cywgYXBwaW5mby0+cGFyZW50X3JlbGlkKTsK LQkJQXNzZXJ0KCFibXNfaXNfbWVtYmVyKGFwcGluZm8tPmNoaWxkX3JlbGlkLCBwcmV2X3Bh cmVudHMpKTsKLSNlbmRpZgotCi0JCS8qIE9LLCBwcm9wYWdhdGUgaW5mbyBkb3duICovCi0J CUFzc2VydChjaGlsZHJlbC0+cmVsb3B0a2luZCA9PSBSRUxPUFRfT1RIRVJfTUVNQkVSX1JF TCk7Ci0JCUFzc2VydChjaGlsZHJlbC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzID09IE5VTEwp OwotCQljaGlsZHJlbC0+ZGlyZWN0X2xhdGVyYWxfcmVsaWRzID0gcGFyZW50cmVsLT5kaXJl Y3RfbGF0ZXJhbF9yZWxpZHM7Ci0JCUFzc2VydChjaGlsZHJlbC0+bGF0ZXJhbF9yZWxpZHMg PT0gTlVMTCk7Ci0JCWNoaWxkcmVsLT5sYXRlcmFsX3JlbGlkcyA9IHBhcmVudHJlbC0+bGF0 ZXJhbF9yZWxpZHM7Ci0JCUFzc2VydChjaGlsZHJlbC0+bGF0ZXJhbF9yZWZlcmVuY2VycyA9 PSBOVUxMKTsKLQkJY2hpbGRyZWwtPmxhdGVyYWxfcmVmZXJlbmNlcnMgPSBwYXJlbnRyZWwt PmxhdGVyYWxfcmVmZXJlbmNlcnM7Ci0JfQogfQogCiAKZGlmZiAtLWdpdCBhL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIv cGxhbi9wbGFubWFpbi5jCmluZGV4IGM3ZjIzMjM4NTIuLmFlNTcwZTZhYmUgMTAwNjQ0Ci0t LSBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5tYWluLmMKKysrIGIvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm1haW4uYwpAQCAtMjg0LDYgKzI4NCwxNiBAQCBx dWVyeV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBMaXN0ICp0bGlzdCwKIAl9CiAKIAkv KgorCSAqIEV4cGFuZCBSVCBlbnRyaWVzIHRoYXQgcmVwcmVzZW50IGluaGVyaXRlZCBvciBw YXJ0aXRpb25lZCB0YWJsZXMuCisJICogVGhpcyB3aWxsIHBlcmZvcm0gcGFydGl0aW9uIHBy dW5pbmcgb24gcGFydGl0aW9uZWQgdGFibGVzIGluIHRoZQorCSAqIG9yaWdpbmFsIHJhbmdl IHRhYmxlIGFuZCBhbHNvIHJlY3Vyc2l2ZWx5IG9uIGFueSBjaGlsZCBwYXJ0aXRpb25lZAor CSAqIHRhYmxlcyB0aGF0IHdlcmUgYWRkZWQgYnkgdGhlIGV4cGFuc2lvbiBvZiB0aGUgb3Jp Z2luYWwgcGFyZW50KHMpLgorCSAqIEFzIG5ldyBlbnRyaWVzIGFyZSBhZGRlZCB0byB0aGUg cmFuZ2UgdGFibGUsIHZhcmlvdXMgYXJyYXlzIGluIHRoZQorCSAqIFBsYW5uZXJJbmZvIHdp bGwgYmUgZXhwYW5kZWQgYWNjb3JkaW5nbHkuCisJICovCisJZXhwYW5kX2luaGVyaXRlZF90 YWJsZXMocm9vdCk7CisKKwkvKgogCSAqIEFkZCBjaGlsZCBzdWJyb290cyBuZWVkZWQgZHVy aW5nIHBsYW5uaW5nIGZvciBpbmRpdmlkdWFsIGNoaWxkIHRhcmdldHMuCiAJICovCiAJaWYg KHBhcnNlLT5yZXN1bHRSZWxhdGlvbiAmJgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3BsYW4vcGxhbm5lci5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxh bm5lci5jCmluZGV4IDZhNjQwM2Q3ZmUuLmNlMGNlZDc5MmYgMTAwNjQ0Ci0tLSBhL3NyYy9i YWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYworKysgYi9zcmMvYmFja2VuZC9vcHRp bWl6ZXIvcGxhbi9wbGFubmVyLmMKQEAgLTI1LDYgKzI1LDcgQEAKICNpbmNsdWRlICJhY2Nl c3MvdGFibGUuaCIKICNpbmNsdWRlICJhY2Nlc3MveGFjdC5oIgogI2luY2x1ZGUgImNhdGFs b2cvcGdfY29uc3RyYWludC5oIgorI2luY2x1ZGUgImNhdGFsb2cvcGdfaW5oZXJpdHMuaCIK ICNpbmNsdWRlICJjYXRhbG9nL3BnX3Byb2MuaCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX3R5 cGUuaCIKICNpbmNsdWRlICJleGVjdXRvci9leGVjdXRvci5oIgpAQCAtMTMxLDYgKzEzMiw4 IEBAIHN0YXRpYyBOb2RlICpwcmVwcm9jZXNzX2V4cHJlc3Npb24oUGxhbm5lckluZm8gKnJv b3QsIE5vZGUgKmV4cHIsIGludCBraW5kKTsKIHN0YXRpYyB2b2lkIHByZXByb2Nlc3NfcXVh bF9jb25kaXRpb25zKFBsYW5uZXJJbmZvICpyb290LCBOb2RlICpqdG5vZGUpOwogc3RhdGlj IHZvaWQgaW5oZXJpdGFuY2VfcGxhbm5lcihQbGFubmVySW5mbyAqcm9vdCk7CiBzdGF0aWMg dm9pZCBncm91cGluZ19wbGFubmVyKFBsYW5uZXJJbmZvICpyb290LCBkb3VibGUgdHVwbGVf ZnJhY3Rpb24pOworc3RhdGljIFBhdGggKmNyZWF0ZV9zaW5nbGVfdGFyZ2V0X21vZGlmeXRh YmxlX3BhdGgoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJCQkgIFJlbE9wdEluZm8gKmZp bmFsX3JlbCwgUGF0aCAqc3VicGF0aCk7CiBzdGF0aWMgZ3JvdXBpbmdfc2V0c19kYXRhICpw cmVwcm9jZXNzX2dyb3VwaW5nX3NldHMoUGxhbm5lckluZm8gKnJvb3QpOwogc3RhdGljIExp c3QgKnJlbWFwX3RvX2dyb3VwY2xhdXNlX2lkeChMaXN0ICpncm91cENsYXVzZSwgTGlzdCAq Z3NldHMsCiAJCQkJCQkgaW50ICp0bGVyZWZfdG9fY29sbnVtX21hcCk7CkBAIC03MTksMjcg KzcyMiwyNCBAQCBzdWJxdWVyeV9wbGFubmVyKFBsYW5uZXJHbG9iYWwgKmdsb2IsIFF1ZXJ5 ICpwYXJzZSwKIAkJfQogCQlpZiAocnRlLT5sYXRlcmFsKQogCQkJcm9vdC0+aGFzTGF0ZXJh bFJURXMgPSB0cnVlOworCisJCS8qCisJCSAqIFdoaWxlIGF0IGl0LCBhbHNvIHVwZGF0ZSB0 aGUgaW5oIHN0YXR1cy4gIElmIHRoZSByZWxhdGlvbiBkb2Vzbid0CisJCSAqIG9yIGNhbid0 IGhhdmUgYW55IGNoaWxkcmVuLCB0aGVyZSBpcyBubyBwb2ludCBpbiBsZXR0aW5nIGluaCBi ZSBzZXQKKwkJICogdG8gdHJ1ZS4gIE5vdGUgdGhhdCB3ZSBkbyB0aGlzIGJlZm9yZSBwcm9j ZXNzaW5nIHJvd21hcmtzLCBzbyB0aGF0CisJCSAqIHRoZSBjb3JyZWN0IGluZm9ybWF0aW9u IGZvciBzZXR0aW5nIGlzUGFyZW50IGZpZWxkIG9mIFBsYW5Sb3dNYXJrcy4KKwkJICovCisJ CWlmIChydGUtPnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OKQorCQkJcnRlLT5pbmggPSBydGUt PmluaCAmJiBoYXNfc3ViY2xhc3MocnRlLT5yZWxpZCk7CiAJfQogCiAJLyoKIAkgKiBQcmVw cm9jZXNzIFJvd01hcmsgaW5mb3JtYXRpb24uICBXZSBuZWVkIHRvIGRvIHRoaXMgYWZ0ZXIg c3VicXVlcnkKLQkgKiBwdWxsdXAgKHNvIHRoYXQgYWxsIG5vbi1pbmhlcml0ZWQgUlRFcyBh cmUgcHJlc2VudCkgYW5kIGJlZm9yZQotCSAqIGluaGVyaXRhbmNlIGV4cGFuc2lvbiAoc28g dGhhdCB0aGUgaW5mbyBpcyBhdmFpbGFibGUgZm9yCi0JICogZXhwYW5kX2luaGVyaXRlZF90 YWJsZXMgdG8gZXhhbWluZSBhbmQgbW9kaWZ5KS4KKwkgKiBwdWxsdXAgKHNvIHRoYXQgYWxs IG5vbi1pbmhlcml0ZWQgUlRFcyBhcmUgcHJlc2VudCkuCiAJICovCiAJcHJlcHJvY2Vzc19y b3dtYXJrcyhyb290KTsKIAogCS8qCi0JICogRXhwYW5kIGFueSByYW5nZXRhYmxlIGVudHJp ZXMgdGhhdCBhcmUgaW5oZXJpdGFuY2Ugc2V0cyBpbnRvICJhcHBlbmQKLQkgKiByZWxhdGlv bnMiLiAgVGhpcyBjYW4gYWRkIGVudHJpZXMgdG8gdGhlIHJhbmdldGFibGUsIGJ1dCB0aGV5 IG11c3QgYmUKLQkgKiBwbGFpbiBSVEVfUkVMQVRJT04gZW50cmllcywgc28gaXQncyBPSyAo YW5kIG1hcmdpbmFsbHkgbW9yZSBlZmZpY2llbnQpCi0JICogdG8gZG8gaXQgYWZ0ZXIgY2hl Y2tpbmcgZm9yIGpvaW5zIGFuZCBvdGhlciBzcGVjaWFsIFJURXMuICBXZSBtdXN0IGRvCi0J ICogdGhpcyBhZnRlciBwdWxsaW5nIHVwIHN1YnF1ZXJpZXMsIGVsc2Ugd2UnZCBmYWlsIHRv IGhhbmRsZSBpbmhlcml0ZWQKLQkgKiB0YWJsZXMgaW4gc3VicXVlcmllcy4KLQkgKi8KLQll eHBhbmRfaW5oZXJpdGVkX3RhYmxlcyhyb290KTsKLQotCS8qCiAJICogU2V0IGhhc0hhdmlu Z1F1YWwgdG8gcmVtZW1iZXIgaWYgSEFWSU5HIGNsYXVzZSBpcyBwcmVzZW50LiAgTmVlZGVk CiAJICogYmVjYXVzZSBwcmVwcm9jZXNzX2V4cHJlc3Npb24gd2lsbCByZWR1Y2UgYSBjb25z dGFudC10cnVlIGNvbmRpdGlvbiB0bwogCSAqIGFuIGVtcHR5IHF1YWwgbGlzdCAuLi4gYnV0 ICJIQVZJTkcgVFJVRSIgaXMgbm90IGEgc2VtYW50aWMgbm8tb3AuCkBAIC0xMjQ3LDcgKzEy NDcsOSBAQCBpbmhlcml0YW5jZV9wbGFubmVyKFBsYW5uZXJJbmZvICpyb290KQogCSAqIG9m IHRoZSBwYXJlbnQuCiAJICovCiAJcm9vdC0+dW5leHBhbmRlZF90bGlzdCA9IGxpc3RfY29w eShyb290LT5wYXJzZS0+dGFyZ2V0TGlzdCk7Ci0JdGxpc3QgPSBwcmVwcm9jZXNzX3Rhcmdl dGxpc3Qocm9vdCk7CisKKwkvKiBXZSBoYXZlbid0IGV4cGFuZGVkIGluaGVyaXRhbmNlIHll dCwgc28gcGFzcyBmYWxzZS4gKi8KKwl0bGlzdCA9IHByZXByb2Nlc3NfdGFyZ2V0bGlzdChy b290LCBmYWxzZSk7CiAJcm9vdC0+cHJvY2Vzc2VkX3RsaXN0ID0gdGxpc3Q7CiAJcXBfZXh0 cmEudGxpc3QgPSB0bGlzdDsKIAlxcF9leHRyYS5hY3RpdmVXaW5kb3dzID0gTklMOwpAQCAt MTI1NywxNiArMTI1OSw0NyBAQCBpbmhlcml0YW5jZV9wbGFubmVyKFBsYW5uZXJJbmZvICpy b290KQogCS8qCiAJICogSWYgaXQgdHVybmVkIG91dCBkdXJpbmcgcXVlcnkgcGxhbm5pbmcg dGhhdCBhbGwgdGhlIGNoaWxkcmVuIGFyZSBkdW1teQogCSAqIChwcnVuZWQgb3IgZXhjbHVk ZWQgYnkgY29uc3RyYWludHMpLCBubyBuZWVkIHRvIGRvIHRoZSBzdGVwcyBiZWxvdy4KKwkg KiBGb3IgcmVndWxhciBpbmhlcml0YW5jZSBjYXNlLCBpdCdzIHBvc3NpYmxlIHRoYXQgd2Ug b25seSBuZWVkIHRvIG1vZGlmeQorCSAqIHRoZSBwYXJlbnQgdGFibGUuCiAJICovCi0JaWYg KElTX0RVTU1ZX1JFTChwbGFubmVkX3JlbCkpCisJcGFyZW50X3J0ZSA9IHBsYW5uZXJfcnRf ZmV0Y2godG9wX3BhcmVudFJUaW5kZXgsIHJvb3QpOworCWlmICghcGFyZW50X3J0ZS0+aW5o IHx8IElTX0RVTU1ZX1JFTChwbGFubmVkX3JlbCkpCiAJeworCQkvKiBUb3AtbGV2ZWwgcXVl cnkgdGFyZ2V0bGl0IGRldGVybWluZXMgZmluYWxfcmVsJ3MgUGF0aFRhcmdldC4gKi8KKwkJ UGF0aFRhcmdldCAqc2NhbmpvaW5fdGFyZ2V0ID0gY3JlYXRlX3BhdGh0YXJnZXQocm9vdCwg dGxpc3QpOworCiAJCS8qCiAJCSAqIFJlc3VsdCBwYXRoLCBldmVuIGlmIGR1bW15LCBtdXN0 IGdvIGludG8gb3V0ZXIgcXVlcnkncyBGSU5BTAogCQkgKiB1cHBlcnJlbC4KIAkJICovCiAJ CWZpbmFsX3JlbCA9IGZldGNoX3VwcGVyX3JlbChyb290LCBVUFBFUlJFTF9GSU5BTCwgTlVM TCk7Ci0JCWZpbmFsX3JlbC0+cmVsdGFyZ2V0ID0gY3JlYXRlX3BhdGh0YXJnZXQocm9vdCwg dGxpc3QpOwotCQltYXJrX2R1bW15X3JlbChmaW5hbF9yZWwpOworCQlmaW5hbF9yZWwtPnJl bHRhcmdldCA9IHNjYW5qb2luX3RhcmdldDsKKworCQkvKiBDaGVjayBpZiB3ZSBuZWVkIHBy b2plY3Rpb24gdG8gcHJvZHVjZSBmaW5hbCBQYXRoVGFyZ2V0PyAqLworCQlpZiAoIUlTX0RV TU1ZX1JFTChwbGFubmVkX3JlbCkpCisJCXsKKwkJCWJvb2wJdGxpc3RfZXhwcnNfc2FtZSA9 IGVxdWFsKHBsYW5uZWRfcmVsLT5yZWx0YXJnZXQtPmV4cHJzLAorCQkJCQkJCQkJCQkgc2Nh bmpvaW5fdGFyZ2V0LT5leHBycyk7CisKKwkJCWFwcGx5X3NjYW5qb2luX3RhcmdldF90b19w YXRoc19ndXRzKHJvb3QsIHBsYW5uZWRfcmVsLAorCQkJCQkJCQkJCQkJc2NhbmpvaW5fdGFy Z2V0LAorCQkJCQkJCQkJCQkJdGxpc3RfZXhwcnNfc2FtZSk7CisKKwkJCS8qIEFkZCBNb2Rp ZnlUYWJsZSBvbiB0b3Agb2YgZWFjaCBwYXRoIGFuZCBhZGQgdG8gZmluYWxfcmVsLiAqLwor CQkJZm9yZWFjaChsYzEsIHBsYW5uZWRfcmVsLT5wYXRobGlzdCkKKwkJCXsKKwkJCQlQYXRo ICAgKnBhdGggPSAoUGF0aCAqKSBsZmlyc3QobGMxKTsKKworCQkJCXBhdGggPSBjcmVhdGVf c2luZ2xlX3RhcmdldF9tb2RpZnl0YWJsZV9wYXRoKHJvb3QsIGZpbmFsX3JlbCwKKwkJCQkJ CQkJCQkJCQkJCSBwYXRoKTsKKwkJCQlhZGRfcGF0aChmaW5hbF9yZWwsIHBhdGgpOworCQkJ fQorCQl9CisJCWVsc2UKKwkJeworCQkJLyogRW1wdHkgUmVzdWx0IHBhdGguICovCisJCQlt YXJrX2R1bW15X3JlbChmaW5hbF9yZWwpOworCQl9CiAJCXJldHVybjsKIAl9CiAKQEAgLTEy ODAsNyArMTMxMyw2IEBAIGluaGVyaXRhbmNlX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3Qp CiAJICogbm90IGFwcGVhciBhbnl3aGVyZSBlbHNlIGluIHRoZSBwbGFuLCBzbyB0aGUgY29u ZnVzaW9uIGV4cGxhaW5lZCBiZWxvdwogCSAqIGZvciBub24tcGFydGl0aW9uaW5nIGluaGVy aXRhbmNlIGNhc2VzIGlzIG5vdCBwb3NzaWJsZS4KIAkgKi8KLQlwYXJlbnRfcnRlID0gcGxh bm5lcl9ydF9mZXRjaCh0b3BfcGFyZW50UlRpbmRleCwgcm9vdCk7CiAJaWYgKHBhcmVudF9y dGUtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKIAl7CiAJCW5vbWlu YWxSZWxhdGlvbiA9IHRvcF9wYXJlbnRSVGluZGV4OwpAQCAtMTYyNyw4ICsxNjU5LDExIEBA IGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGRvdWJsZSB0dXBsZV9mcmFj dGlvbikKIAkJCQlwYXJzZS0+Z3JvdXBDbGF1c2UgPSBwcmVwcm9jZXNzX2dyb3VwY2xhdXNl KHJvb3QsIE5JTCk7CiAJCX0KIAotCQkvKiBQcmVwcm9jZXNzIHRhcmdldGxpc3QgKi8KLQkJ dGxpc3QgPSBwcmVwcm9jZXNzX3RhcmdldGxpc3Qocm9vdCk7CisJCS8qCisJCSAqIFByZXBy b2Nlc3MgdGFyZ2V0bGlzdC4gIEhhdmVuJ3QgZXhwYW5kZWQgaW5oZXJpdGFuY2UgeWV0LCBz byBwYXNzCisJCSAqIGZhbHNlLgorCQkgKi8KKwkJdGxpc3QgPSBwcmVwcm9jZXNzX3Rhcmdl dGxpc3Qocm9vdCwgZmFsc2UpOwogCiAJCS8qCiAJCSAqIFdlIGFyZSBub3cgZG9uZSBoYWNr aW5nIHVwIHRoZSBxdWVyeSdzIHRhcmdldGxpc3QuICBNb3N0IG9mIHRoZQpAQCAtMTk4Nyw2 MCArMjAyMiw4IEBAIGdyb3VwaW5nX3BsYW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGRvdWJs ZSB0dXBsZV9mcmFjdGlvbikKIAkJLyogSWYgdGhpcyBpcyBhbiBJTlNFUlQvVVBEQVRFL0RF TEVURSwgYWRkIHRoZSBNb2RpZnlUYWJsZSBub2RlLiAqLwogCQlpZiAocGFyc2UtPmNvbW1h bmRUeXBlICE9IENNRF9TRUxFQ1QpCiAJCXsKLQkJCUluZGV4CQlyb290UmVsYXRpb247Ci0J CQlMaXN0CSAgICp3aXRoQ2hlY2tPcHRpb25MaXN0czsKLQkJCUxpc3QJICAgKnJldHVybmlu Z0xpc3RzOwotCQkJTGlzdAkgICAqcm93TWFya3M7Ci0KLQkJCS8qCi0JCQkgKiBJZiB0YXJn ZXQgaXMgYSBwYXJ0aXRpb24gcm9vdCB0YWJsZSwgd2UgbmVlZCB0byBtYXJrIHRoZQotCQkJ ICogTW9kaWZ5VGFibGUgbm9kZSBhcHByb3ByaWF0ZWx5IGZvciB0aGF0LgotCQkJICovCi0J CQlpZiAocnRfZmV0Y2gocGFyc2UtPnJlc3VsdFJlbGF0aW9uLCBwYXJzZS0+cnRhYmxlKS0+ cmVsa2luZCA9PQotCQkJCVJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpCi0JCQkJcm9vdFJl bGF0aW9uID0gcGFyc2UtPnJlc3VsdFJlbGF0aW9uOwotCQkJZWxzZQotCQkJCXJvb3RSZWxh dGlvbiA9IDA7Ci0KLQkJCS8qCi0JCQkgKiBTZXQgdXAgdGhlIFdJVEggQ0hFQ0sgT1BUSU9O IGFuZCBSRVRVUk5JTkcgbGlzdHMtb2YtbGlzdHMsIGlmCi0JCQkgKiBuZWVkZWQuCi0JCQkg Ki8KLQkJCWlmIChwYXJzZS0+d2l0aENoZWNrT3B0aW9ucykKLQkJCQl3aXRoQ2hlY2tPcHRp b25MaXN0cyA9IGxpc3RfbWFrZTEocGFyc2UtPndpdGhDaGVja09wdGlvbnMpOwotCQkJZWxz ZQotCQkJCXdpdGhDaGVja09wdGlvbkxpc3RzID0gTklMOwotCi0JCQlpZiAocGFyc2UtPnJl dHVybmluZ0xpc3QpCi0JCQkJcmV0dXJuaW5nTGlzdHMgPSBsaXN0X21ha2UxKHBhcnNlLT5y ZXR1cm5pbmdMaXN0KTsKLQkJCWVsc2UKLQkJCQlyZXR1cm5pbmdMaXN0cyA9IE5JTDsKLQot CQkJLyoKLQkJCSAqIElmIHRoZXJlIHdhcyBhIEZPUiBbS0VZXSBVUERBVEUvU0hBUkUgY2xh dXNlLCB0aGUgTG9ja1Jvd3Mgbm9kZQotCQkJICogd2lsbCBoYXZlIGRlYWx0IHdpdGggZmV0 Y2hpbmcgbm9uLWxvY2tlZCBtYXJrZWQgcm93cywgZWxzZSB3ZQotCQkJICogbmVlZCB0byBo YXZlIE1vZGlmeVRhYmxlIGRvIHRoYXQuCi0JCQkgKi8KLQkJCWlmIChwYXJzZS0+cm93TWFy a3MpCi0JCQkJcm93TWFya3MgPSBOSUw7Ci0JCQllbHNlCi0JCQkJcm93TWFya3MgPSByb290 LT5yb3dNYXJrczsKLQotCQkJcGF0aCA9IChQYXRoICopCi0JCQkJY3JlYXRlX21vZGlmeXRh YmxlX3BhdGgocm9vdCwgZmluYWxfcmVsLAotCQkJCQkJCQkJCXBhcnNlLT5jb21tYW5kVHlw ZSwKLQkJCQkJCQkJCQlwYXJzZS0+Y2FuU2V0VGFnLAotCQkJCQkJCQkJCXBhcnNlLT5yZXN1 bHRSZWxhdGlvbiwKLQkJCQkJCQkJCQlyb290UmVsYXRpb24sCi0JCQkJCQkJCQkJZmFsc2Us Ci0JCQkJCQkJCQkJbGlzdF9tYWtlMV9pbnQocGFyc2UtPnJlc3VsdFJlbGF0aW9uKSwKLQkJ CQkJCQkJCQlsaXN0X21ha2UxKHBhdGgpLAotCQkJCQkJCQkJCWxpc3RfbWFrZTEocm9vdCks Ci0JCQkJCQkJCQkJd2l0aENoZWNrT3B0aW9uTGlzdHMsCi0JCQkJCQkJCQkJcmV0dXJuaW5n TGlzdHMsCi0JCQkJCQkJCQkJcm93TWFya3MsCi0JCQkJCQkJCQkJcGFyc2UtPm9uQ29uZmxp Y3QsCi0JCQkJCQkJCQkJYXNzaWduX3NwZWNpYWxfZXhlY19wYXJhbShyb290KSk7CisJCQlw YXRoID0gY3JlYXRlX3NpbmdsZV90YXJnZXRfbW9kaWZ5dGFibGVfcGF0aChyb290LCBmaW5h bF9yZWwsCisJCQkJCQkJCQkJCQkJCSBwYXRoKTsKIAkJfQogCiAJCS8qIEFuZCBzaG92ZSBp dCBpbnRvIGZpbmFsX3JlbCAqLwpAQCAtMjA4MSw2ICsyMDY0LDY2IEBAIGdyb3VwaW5nX3Bs YW5uZXIoUGxhbm5lckluZm8gKnJvb3QsIGRvdWJsZSB0dXBsZV9mcmFjdGlvbikKIAkvKiBO b3RlOiBjdXJyZW50bHksIHdlIGxlYXZlIGl0IHRvIGNhbGxlcnMgdG8gZG8gc2V0X2NoZWFw ZXN0KCkgKi8KIH0KIAorc3RhdGljIFBhdGggKgorY3JlYXRlX3NpbmdsZV90YXJnZXRfbW9k aWZ5dGFibGVfcGF0aChQbGFubmVySW5mbyAqcm9vdCwKKwkJCQkJCQkJCSAgUmVsT3B0SW5m byAqZmluYWxfcmVsLAorCQkJCQkJCQkJICBQYXRoICpzdWJwYXRoKQoreworCVF1ZXJ5CSAg ICpwYXJzZSA9IHJvb3QtPnBhcnNlOworCUluZGV4CQlyb290UmVsYXRpb247CisJTGlzdAkg ICAqd2l0aENoZWNrT3B0aW9uTGlzdHM7CisJTGlzdAkgICAqcmV0dXJuaW5nTGlzdHM7CisJ TGlzdAkgICAqcm93TWFya3M7CisKKwkvKgorCSAqIElmIHRhcmdldCBpcyBhIHBhcnRpdGlv biByb290IHRhYmxlLCB3ZSBuZWVkIHRvIG1hcmsgdGhlIE1vZGlmeVRhYmxlCisJICogbm9k ZSBhcHByb3ByaWF0ZWx5IGZvciB0aGF0LgorCSAqLworCWlmIChydF9mZXRjaChwYXJzZS0+ cmVzdWx0UmVsYXRpb24sIHBhcnNlLT5ydGFibGUpLT5yZWxraW5kID09CisJCVJFTEtJTkRf UEFSVElUSU9ORURfVEFCTEUpCisJCXJvb3RSZWxhdGlvbiA9IHBhcnNlLT5yZXN1bHRSZWxh dGlvbjsKKwllbHNlCisJCXJvb3RSZWxhdGlvbiA9IDA7CisKKwkvKgorCSAqIFNldCB1cCB0 aGUgV0lUSCBDSEVDSyBPUFRJT04gYW5kIFJFVFVSTklORyBsaXN0cy1vZi1saXN0cywgaWYg bmVlZGVkLgorCSAqLworCWlmIChwYXJzZS0+d2l0aENoZWNrT3B0aW9ucykKKwkJd2l0aENo ZWNrT3B0aW9uTGlzdHMgPSBsaXN0X21ha2UxKHBhcnNlLT53aXRoQ2hlY2tPcHRpb25zKTsK KwllbHNlCisJCXdpdGhDaGVja09wdGlvbkxpc3RzID0gTklMOworCisJaWYgKHBhcnNlLT5y ZXR1cm5pbmdMaXN0KQorCQlyZXR1cm5pbmdMaXN0cyA9IGxpc3RfbWFrZTEocGFyc2UtPnJl dHVybmluZ0xpc3QpOworCWVsc2UKKwkJcmV0dXJuaW5nTGlzdHMgPSBOSUw7CisKKwkvKgor CSAqIElmIHRoZXJlIHdhcyBhIEZPUiBbS0VZXSBVUERBVEUvU0hBUkUgY2xhdXNlLCB0aGUg TG9ja1Jvd3Mgbm9kZQorCSAqIHdpbGwgaGF2ZSBkZWFsdCB3aXRoIGZldGNoaW5nIG5vbi1s b2NrZWQgbWFya2VkIHJvd3MsIGVsc2Ugd2UKKwkgKiBuZWVkIHRvIGhhdmUgTW9kaWZ5VGFi bGUgZG8gdGhhdC4KKwkgKi8KKwlpZiAocGFyc2UtPnJvd01hcmtzKQorCQlyb3dNYXJrcyA9 IE5JTDsKKwllbHNlCisJCXJvd01hcmtzID0gcm9vdC0+cm93TWFya3M7CisKKwlyZXR1cm4g KFBhdGggKikgY3JlYXRlX21vZGlmeXRhYmxlX3BhdGgocm9vdCwgZmluYWxfcmVsLAorCQkJ CQkJCQkJCQlwYXJzZS0+Y29tbWFuZFR5cGUsCisJCQkJCQkJCQkJCXBhcnNlLT5jYW5TZXRU YWcsCisJCQkJCQkJCQkJCXBhcnNlLT5yZXN1bHRSZWxhdGlvbiwKKwkJCQkJCQkJCQkJcm9v dFJlbGF0aW9uLAorCQkJCQkJCQkJCQlmYWxzZSwKKwkJCQkJCQkJCQkJbGlzdF9tYWtlMV9p bnQocGFyc2UtPnJlc3VsdFJlbGF0aW9uKSwKKwkJCQkJCQkJCQkJbGlzdF9tYWtlMShzdWJw YXRoKSwKKwkJCQkJCQkJCQkJbGlzdF9tYWtlMShyb290KSwKKwkJCQkJCQkJCQkJd2l0aENo ZWNrT3B0aW9uTGlzdHMsCisJCQkJCQkJCQkJCXJldHVybmluZ0xpc3RzLAorCQkJCQkJCQkJ CQlyb3dNYXJrcywKKwkJCQkJCQkJCQkJcGFyc2UtPm9uQ29uZmxpY3QsCisJCQkJCQkJCQkJ CWFzc2lnbl9zcGVjaWFsX2V4ZWNfcGFyYW0ocm9vdCkpOworfQorCiAvKgogICogRG8gcHJl cHJvY2Vzc2luZyBmb3IgZ3JvdXBpbmdTZXRzIGNsYXVzZSBhbmQgcmVsYXRlZCBkYXRhLiAg VGhpcyBoYW5kbGVzIHRoZQogICogcHJlbGltaW5hcnkgc3RlcHMgb2YgZXhwYW5kaW5nIHRo ZSBncm91cGluZyBzZXRzLCBvcmdhbml6aW5nIHRoZW0gaW50byBsaXN0cwpAQCAtMjQwNiw3 ICsyNDQ5LDcgQEAgcHJlcHJvY2Vzc19yb3dtYXJrcyhQbGFubmVySW5mbyAqcm9vdCkKIAkJ bmV3cmMtPmFsbE1hcmtUeXBlcyA9ICgxIDw8IG5ld3JjLT5tYXJrVHlwZSk7CiAJCW5ld3Jj LT5zdHJlbmd0aCA9IHJjLT5zdHJlbmd0aDsKIAkJbmV3cmMtPndhaXRQb2xpY3kgPSByYy0+ d2FpdFBvbGljeTsKLQkJbmV3cmMtPmlzUGFyZW50ID0gZmFsc2U7CisJCW5ld3JjLT5pc1Bh cmVudCA9IHJ0ZS0+aW5oOwogCiAJCXByb3dtYXJrcyA9IGxhcHBlbmQocHJvd21hcmtzLCBu ZXdyYyk7CiAJfQpAQCAtMjQzMSw3ICsyNDc0LDcgQEAgcHJlcHJvY2Vzc19yb3dtYXJrcyhQ bGFubmVySW5mbyAqcm9vdCkKIAkJbmV3cmMtPmFsbE1hcmtUeXBlcyA9ICgxIDw8IG5ld3Jj LT5tYXJrVHlwZSk7CiAJCW5ld3JjLT5zdHJlbmd0aCA9IExDU19OT05FOwogCQluZXdyYy0+ d2FpdFBvbGljeSA9IExvY2tXYWl0QmxvY2s7CS8qIGRvZXNuJ3QgbWF0dGVyICovCi0JCW5l d3JjLT5pc1BhcmVudCA9IGZhbHNlOworCQluZXdyYy0+aXNQYXJlbnQgPSBydGUtPnJ0ZWtp bmQgPT0gUlRFX1JFTEFUSU9OID8gcnRlLT5pbmggOiBmYWxzZTsKIAogCQlwcm93bWFya3Mg PSBsYXBwZW5kKHByb3dtYXJrcywgbmV3cmMpOwogCX0KQEAgLTY5ODgsNiArNzAzMSwxMCBA QCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9v dCwKIAkJUmVsT3B0SW5mbyAqY2hpbGRfZ3JvdXBlZF9yZWw7CiAJCVJlbE9wdEluZm8gKmNo aWxkX3BhcnRpYWxseV9ncm91cGVkX3JlbDsKIAorCQkvKiBTa2lwIHByb2Nlc3NpbmcgcHJ1 bmVkIHBhcnRpdGlvbnMuICovCisJCWlmIChjaGlsZF9pbnB1dF9yZWwgPT0gTlVMTCkKKwkJ CWNvbnRpbnVlOworCiAJCS8qIElucHV0IGNoaWxkIHJlbCBtdXN0IGhhdmUgYSBwYXRoICov CiAJCUFzc2VydChjaGlsZF9pbnB1dF9yZWwtPnBhdGhsaXN0ICE9IE5JTCk7CiAKZGlmZiAt LWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYyBiL3NyYy9iYWNr ZW5kL29wdGltaXplci9wbGFuL3NldHJlZnMuYwppbmRleCAwMjEzYTM3NjcwLi4xNTRjY2Rh NDMyIDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9zZXRyZWZzLmMK KysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vc2V0cmVmcy5jCkBAIC0zMjYsNiAr MzI2LDEyIEBAIGFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKFBsYW5uZXJJbmZvICpyb290LCBi b29sIHJlY3Vyc2luZykKIAkJCQkJCQkJCQkJCQkgIFVQUEVSUkVMX0ZJTkFMLCBOVUxMKSkp CiAJCQkJCWFkZF9ydGVzX3RvX2ZsYXRfcnRhYmxlKHJlbC0+c3Vicm9vdCwgdHJ1ZSk7CiAJ CQl9CisJCQkvKgorCQkJICogQSBOVUxMIHJlbCBhbHNvIG1lYW5zIGFuIHVucGxhbm5lZCBz dWJxdWVyeSBydGUsIHNvIGFwcGx5CisJCQkgKiBmbGF0dGVuX3VucGxhbm5lZF9ydGVzLgor CQkJICovCisJCQllbHNlCisJCQkJZmxhdHRlbl91bnBsYW5uZWRfcnRlcyhnbG9iLCBydGUp OwogCQl9CiAJCXJ0aSsrOwogCX0KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wcmVwL3ByZXB0bGlzdC5jIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHRs aXN0LmMKaW5kZXggNTM5MmQxYTU2MS4uNDFhNTdkMTZiMiAxMDA2NDQKLS0tIGEvc3JjL2Jh Y2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0 aW1pemVyL3ByZXAvcHJlcHRsaXN0LmMKQEAgLTY1LDkgKzY1LDEzIEBAIHN0YXRpYyBMaXN0 ICpleHBhbmRfdGFyZ2V0bGlzdChMaXN0ICp0bGlzdCwgaW50IGNvbW1hbmRfdHlwZSwKICAq CiAgKiBBcyBhIHNpZGUgZWZmZWN0LCBpZiB0aGVyZSdzIGFuIE9OIENPTkZMSUNUIFVQREFU RSBjbGF1c2UsIGl0cyB0YXJnZXRsaXN0CiAgKiBpcyBhbHNvIHByZXByb2Nlc3NlZCAoYW5k IHVwZGF0ZWQgaW4tcGxhY2UpLgorICoKKyAqIGluaGVyaXRhbmNlX2V4cGFuZGVkIHNwZWNp ZmllcyB3aGV0aGVyIGluaGVyaXRhbmNlIHRhYmxlcyBhcmUgZXhwYW5kZWQKKyAqIGFzIG9m IGNhbGxpbmcgdGhpcyBmdW5jdGlvbi4gIENhbGxlciBtdXN0IHNwZWNpZnkgaXQgYmVjYXVz ZSB0aGF0IGFmZmVjdHMKKyAqIHdoaWNoIHJvdyBtYXJraW5nIHJlbGF0ZWQganVuayBjb2x1 bW5zIGdldCBhZGRlZCB0byB0aGUgdGFyZ2V0bGlzdC4KICAqLwogTGlzdCAqCi1wcmVwcm9j ZXNzX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QpCitwcmVwcm9jZXNzX3RhcmdldGxp c3QoUGxhbm5lckluZm8gKnJvb3QsIGJvb2wgaW5oZXJpdGFuY2VfZXhwYW5kZWQpCiB7CiAJ UXVlcnkJICAgKnBhcnNlID0gcm9vdC0+cGFyc2U7CiAJaW50CQkJcmVzdWx0X3JlbGF0aW9u ID0gcGFyc2UtPnJlc3VsdFJlbGF0aW9uOwpAQCAtMTM0LDYgKzEzOCwxNSBAQCBwcmVwcm9j ZXNzX3RhcmdldGxpc3QoUGxhbm5lckluZm8gKnJvb3QpCiAJCWlmIChyYy0+cnRpICE9IHJj LT5wcnRpKQogCQkJY29udGludWU7CiAKKwkJLyoKKwkJICogRm9yIGluaGVyaXRhbmNlIHBh cmVudCByb3cgbWFya3MsIHdlIGRlZmVyIGFkZGluZyBqdW5rIGNvbHVtbnMKKwkJICogdW50 aWwgd2UndmUgYWRkZWQgY2hpbGQgcm93IG1hcmtzLCBiZWNhdXNlIHNvbWUgY2hpbGRyZW4g bWlnaHQKKwkJICogcmVxdWlyZSBkaWZmZXJlbnQgcm93IG1hcmsgdHlwZXMgd2hpY2ggd2ls bCBjaGFuZ2UgdGhlIHBhcmVudCByb3cKKwkJICogbWFyaydzIGFsbE1hcmtUeXBlcyBmaWVs ZHMuCisJCSAqLworCQlpZiAocmMtPmlzUGFyZW50ICYmICFpbmhlcml0YW5jZV9leHBhbmRl ZCkKKwkJCWNvbnRpbnVlOworCiAJCWlmIChyYy0+YWxsTWFya1R5cGVzICYgfigxIDw8IFJP V19NQVJLX0NPUFkpKQogCQl7CiAJCQkvKiBOZWVkIHRvIGZldGNoIFRJRCAqLwpkaWZmIC0t Z2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3ByZXAvcHJlcHVuaW9uLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwppbmRleCA1NWVlYjUxMjdjLi43YmVk OTE0ZjM1IDEwMDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5p b24uYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcHJlcC9wcmVwdW5pb24uYwpAQCAt MzEsMTIgKzMxLDE1IEBACiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCiAjaW5jbHVkZSAibm9k ZXMvbWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAibm9kZXMvbm9kZUZ1bmNzLmgiCisjaW5jbHVk ZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvY29zdC5oIgor I2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIv cGF0aG5vZGUuaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGF0aHMuaCIKICNpbmNsdWRlICJv cHRpbWl6ZXIvcGxhbm1haW4uaCIKICNpbmNsdWRlICJvcHRpbWl6ZXIvcGxhbm5lci5oIgog I2luY2x1ZGUgIm9wdGltaXplci9wcmVwLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL3Jlc3Ry aWN0aW5mby5oIgogI2luY2x1ZGUgIm9wdGltaXplci90bGlzdC5oIgogI2luY2x1ZGUgInBh cnNlci9wYXJzZV9jb2VyY2UuaCIKICNpbmNsdWRlICJwYXJzZXIvcGFyc2V0cmVlLmgiCmRp ZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMgYi9z cmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9hcHBlbmRpbmZvLmMKaW5kZXggODkxNGM0NjRk My4uMTZjZDY1ZGE3MSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwv YXBwZW5kaW5mby5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2FwcGVuZGlu Zm8uYwpAQCAtMzMsMTAgKzMzLDEwIEBAIHR5cGVkZWYgc3RydWN0CiAJQXBwZW5kUmVsSW5m byAqKmFwcGluZm9zOwogfSBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX2NvbnRleHQ7CiAKLXN0 YXRpYyB2b2lkIG1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xkcmVsYXRp b24sCi0JCQkJCQkgIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAotCQkJCQkJICBJbmRleCBuZXd2 YXJubywKLQkJCQkJCSAgTGlzdCAqKnRyYW5zbGF0ZWRfdmFycyk7CitzdGF0aWMgdm9pZCBt YWtlX2luaF90cmFuc2xhdGlvbl9saXN0KFR1cGxlRGVzYyBvbGRfdHVwZGVzYywKKwkJCQkJ CSAgVHVwbGVEZXNjIG5ld190dXBkZXNjLAorCQkJCQkJICBPaWQgZnJvbV9yZWwsIE9pZCB0 b19yZWwsCisJCQkJCQkgIEluZGV4IG5ld3Zhcm5vLCBMaXN0ICoqdHJhbnNsYXRlZF92YXJz KTsKIHN0YXRpYyBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0dHJzX211dGF0b3IoTm9kZSAq bm9kZSwKIAkJCQkJCQkgICBhZGp1c3RfYXBwZW5kcmVsX2F0dHJzX2NvbnRleHQgKmNvbnRl eHQpOwogc3RhdGljIExpc3QgKmFkanVzdF9pbmhlcml0ZWRfdGxpc3QoTGlzdCAqdGxpc3Qs CkBAIC00OCwxOCArNDgsMjAgQEAgc3RhdGljIExpc3QgKmFkanVzdF9pbmhlcml0ZWRfdGxp c3QoTGlzdCAqdGxpc3QsCiAgKgkgIEJ1aWxkIGFuIEFwcGVuZFJlbEluZm8gZm9yIHRoZSBw YXJlbnQtY2hpbGQgcGFpcgogICovCiBBcHBlbmRSZWxJbmZvICoKLW1ha2VfYXBwZW5kX3Jl bF9pbmZvKFJlbGF0aW9uIHBhcmVudHJlbCwgUmVsYXRpb24gY2hpbGRyZWwsCi0JCQkJCSBJ bmRleCBwYXJlbnRSVGluZGV4LCBJbmRleCBjaGlsZFJUaW5kZXgpCittYWtlX2FwcGVuZF9y ZWxfaW5mbyhSZWxPcHRJbmZvICpwYXJlbnQsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwK KwkJCQkJIFR1cGxlRGVzYyBjaGlsZGRlc2MsIE9pZCBjaGlsZG9pZCwgT2lkIGNoaWxkdHlw ZSwKKwkJCQkJIEluZGV4IGNoaWxkUlRpbmRleCkKIHsKIAlBcHBlbmRSZWxJbmZvICphcHBp bmZvID0gbWFrZU5vZGUoQXBwZW5kUmVsSW5mbyk7CiAKLQlhcHBpbmZvLT5wYXJlbnRfcmVs aWQgPSBwYXJlbnRSVGluZGV4OworCWFwcGluZm8tPnBhcmVudF9yZWxpZCA9IHBhcmVudC0+ cmVsaWQ7CiAJYXBwaW5mby0+Y2hpbGRfcmVsaWQgPSBjaGlsZFJUaW5kZXg7Ci0JYXBwaW5m by0+cGFyZW50X3JlbHR5cGUgPSBwYXJlbnRyZWwtPnJkX3JlbC0+cmVsdHlwZTsKLQlhcHBp bmZvLT5jaGlsZF9yZWx0eXBlID0gY2hpbGRyZWwtPnJkX3JlbC0+cmVsdHlwZTsKLQltYWtl X2luaF90cmFuc2xhdGlvbl9saXN0KHBhcmVudHJlbCwgY2hpbGRyZWwsIGNoaWxkUlRpbmRl eCwKLQkJCQkJCQkgICZhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpOwotCWFwcGluZm8tPnBh cmVudF9yZWxvaWQgPSBSZWxhdGlvbkdldFJlbGlkKHBhcmVudHJlbCk7CisJYXBwaW5mby0+ cGFyZW50X3JlbHR5cGUgPSBwYXJlbnQtPnJlbHR5cGU7CisJYXBwaW5mby0+Y2hpbGRfcmVs dHlwZSA9IGNoaWxkdHlwZTsKKwltYWtlX2luaF90cmFuc2xhdGlvbl9saXN0KHBhcmVudC0+ dHVwZGVzYywgY2hpbGRkZXNjLAorCQkJCQkJCSAgcGFyZW50cnRlLT5yZWxpZCwgY2hpbGRv aWQsCisJCQkJCQkJICBjaGlsZFJUaW5kZXgsICZhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMp OworCWFwcGluZm8tPnBhcmVudF9yZWxvaWQgPSBwYXJlbnRydGUtPnJlbGlkOwogCiAJcmV0 dXJuIGFwcGluZm87CiB9CkBAIC03MiwxNCArNzQsMTEgQEAgbWFrZV9hcHBlbmRfcmVsX2lu Zm8oUmVsYXRpb24gcGFyZW50cmVsLCBSZWxhdGlvbiBjaGlsZHJlbCwKICAqIEZvciBwYXJh bm9pYSdzIHNha2UsIHdlIG1hdGNoIHR5cGUvY29sbGF0aW9uIGFzIHdlbGwgYXMgYXR0cmli dXRlIG5hbWUuCiAgKi8KIHN0YXRpYyB2b2lkCi1tYWtlX2luaF90cmFuc2xhdGlvbl9saXN0 KFJlbGF0aW9uIG9sZHJlbGF0aW9uLCBSZWxhdGlvbiBuZXdyZWxhdGlvbiwKLQkJCQkJCSAg SW5kZXggbmV3dmFybm8sCi0JCQkJCQkgIExpc3QgKip0cmFuc2xhdGVkX3ZhcnMpCittYWtl X2luaF90cmFuc2xhdGlvbl9saXN0KFR1cGxlRGVzYyBvbGRfdHVwZGVzYywgVHVwbGVEZXNj IG5ld190dXBkZXNjLAorCQkJCQkJICBPaWQgZnJvbV9yZWwsIE9pZCB0b19yZWwsCisJCQkJ CQkgIEluZGV4IG5ld3Zhcm5vLCBMaXN0ICoqdHJhbnNsYXRlZF92YXJzKQogewogCUxpc3QJ ICAgKnZhcnMgPSBOSUw7Ci0JVHVwbGVEZXNjCW9sZF90dXBkZXNjID0gUmVsYXRpb25HZXRE ZXNjcihvbGRyZWxhdGlvbik7Ci0JVHVwbGVEZXNjCW5ld190dXBkZXNjID0gUmVsYXRpb25H ZXREZXNjcihuZXdyZWxhdGlvbik7Ci0JT2lkCQkJbmV3X3JlbGlkID0gUmVsYXRpb25HZXRS ZWxpZChuZXdyZWxhdGlvbik7CiAJaW50CQkJb2xkbmF0dHMgPSBvbGRfdHVwZGVzYy0+bmF0 dHM7CiAJaW50CQkJbmV3bmF0dHMgPSBuZXdfdHVwZGVzYy0+bmF0dHM7CiAJaW50CQkJb2xk X2F0dG5vOwpAQCAtMTA5LDcgKzEwOCw3IEBAIG1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3Qo UmVsYXRpb24gb2xkcmVsYXRpb24sIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAogCQkgKiBXaGVu IHdlIGFyZSBnZW5lcmF0aW5nIHRoZSAidHJhbnNsYXRpb24gbGlzdCIgZm9yIHRoZSBwYXJl bnQgdGFibGUKIAkJICogb2YgYW4gaW5oZXJpdGFuY2Ugc2V0LCBubyBuZWVkIHRvIHNlYXJj aCBmb3IgbWF0Y2hlcy4KIAkJICovCi0JCWlmIChvbGRyZWxhdGlvbiA9PSBuZXdyZWxhdGlv bikKKwkJaWYgKGZyb21fcmVsID09IHRvX3JlbCkKIAkJewogCQkJdmFycyA9IGxhcHBlbmQo dmFycywgbWFrZVZhcihuZXd2YXJubywKIAkJCQkJCQkJCQkgKEF0dHJOdW1iZXIpIChvbGRf YXR0bm8gKyAxKSwKQEAgLTEzNSwxMCArMTM0LDEwIEBAIG1ha2VfaW5oX3RyYW5zbGF0aW9u X2xpc3QoUmVsYXRpb24gb2xkcmVsYXRpb24sIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAogCQl7 CiAJCQlIZWFwVHVwbGUJbmV3dHVwOwogCi0JCQluZXd0dXAgPSBTZWFyY2hTeXNDYWNoZUF0 dE5hbWUobmV3X3JlbGlkLCBhdHRuYW1lKTsKKwkJCW5ld3R1cCA9IFNlYXJjaFN5c0NhY2hl QXR0TmFtZSh0b19yZWwsIGF0dG5hbWUpOwogCQkJaWYgKCFuZXd0dXApCiAJCQkJZWxvZyhF UlJPUiwgImNvdWxkIG5vdCBmaW5kIGluaGVyaXRlZCBhdHRyaWJ1dGUgXCIlc1wiIG9mIHJl bGF0aW9uIFwiJXNcIiIsCi0JCQkJCSBhdHRuYW1lLCBSZWxhdGlvbkdldFJlbGF0aW9uTmFt ZShuZXdyZWxhdGlvbikpOworCQkJCQkgYXR0bmFtZSwgZ2V0X3JlbF9uYW1lKHRvX3JlbCkp OwogCQkJbmV3X2F0dG5vID0gKChGb3JtX3BnX2F0dHJpYnV0ZSkgR0VUU1RSVUNUKG5ld3R1 cCkpLT5hdHRudW0gLSAxOwogCQkJUmVsZWFzZVN5c0NhY2hlKG5ld3R1cCk7CiAKQEAgLTE0 OCwxMCArMTQ3LDEwIEBAIG1ha2VfaW5oX3RyYW5zbGF0aW9uX2xpc3QoUmVsYXRpb24gb2xk cmVsYXRpb24sIFJlbGF0aW9uIG5ld3JlbGF0aW9uLAogCQkvKiBGb3VuZCBpdCwgY2hlY2sg dHlwZSBhbmQgY29sbGF0aW9uIG1hdGNoICovCiAJCWlmIChhdHR0eXBpZCAhPSBhdHQtPmF0 dHR5cGlkIHx8IGF0dHR5cG1vZCAhPSBhdHQtPmF0dHR5cG1vZCkKIAkJCWVsb2coRVJST1Is ICJhdHRyaWJ1dGUgXCIlc1wiIG9mIHJlbGF0aW9uIFwiJXNcIiBkb2VzIG5vdCBtYXRjaCBw YXJlbnQncyB0eXBlIiwKLQkJCQkgYXR0bmFtZSwgUmVsYXRpb25HZXRSZWxhdGlvbk5hbWUo bmV3cmVsYXRpb24pKTsKKwkJCQkgYXR0bmFtZSwgZ2V0X3JlbF9uYW1lKHRvX3JlbCkpOwog CQlpZiAoYXR0Y29sbGF0aW9uICE9IGF0dC0+YXR0Y29sbGF0aW9uKQogCQkJZWxvZyhFUlJP UiwgImF0dHJpYnV0ZSBcIiVzXCIgb2YgcmVsYXRpb24gXCIlc1wiIGRvZXMgbm90IG1hdGNo IHBhcmVudCdzIGNvbGxhdGlvbiIsCi0JCQkJIGF0dG5hbWUsIFJlbGF0aW9uR2V0UmVsYXRp b25OYW1lKG5ld3JlbGF0aW9uKSk7CisJCQkJIGF0dG5hbWUsIGdldF9yZWxfbmFtZSh0b19y ZWwpKTsKIAogCQl2YXJzID0gbGFwcGVuZCh2YXJzLCBtYWtlVmFyKG5ld3Zhcm5vLAogCQkJ CQkJCQkJIChBdHRyTnVtYmVyKSAobmV3X2F0dG5vICsgMSksCmRpZmYgLS1naXQgYS9zcmMv YmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9pbmhlcml0LmMKaW5kZXggMWQxNmE5ZjJmZi4uNDkyNzU3ZmQ4YyAxMDA2NDQK LS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9i YWNrZW5kL29wdGltaXplci91dGlsL2luaGVyaXQuYwpAQCAtMTgsMzUgKzE4LDQ3IEBACiAj aW5jbHVkZSAiYWNjZXNzL3RhYmxlLmgiCiAjaW5jbHVkZSAiY2F0YWxvZy9wYXJ0aXRpb24u aCIKICNpbmNsdWRlICJjYXRhbG9nL3BnX2luaGVyaXRzLmgiCisjaW5jbHVkZSAiY2F0YWxv Zy9wZ190eXBlLmgiCiAjaW5jbHVkZSAibWlzY2FkbWluLmgiCisjaW5jbHVkZSAibm9kZXMv bWFrZWZ1bmNzLmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL2FwcGVuZGluZm8uaCIKKyNpbmNs dWRlICJvcHRpbWl6ZXIvY2xhdXNlcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9pbmhlcml0 LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL29wdGltaXplci5oIgorI2luY2x1ZGUgIm9wdGlt aXplci9wYXRobm9kZS5oIgogI2luY2x1ZGUgIm9wdGltaXplci9wYXRocy5oIgorI2luY2x1 ZGUgIm9wdGltaXplci9wbGFuY2F0LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5tYWlu LmgiCiAjaW5jbHVkZSAib3B0aW1pemVyL3BsYW5uZXIuaCIKICNpbmNsdWRlICJvcHRpbWl6 ZXIvcHJlcC5oIgorI2luY2x1ZGUgIm9wdGltaXplci9yZXN0cmljdGluZm8uaCIKKyNpbmNs dWRlICJwYXJ0aXRpb25pbmcvcGFydHBydW5lLmgiCiAjaW5jbHVkZSAidXRpbHMvcmVsLmgi CiAKIAogc3RhdGljIFBsYW5uZXJJbmZvICpjcmVhdGVfaW5oZXJpdGVkX3RhcmdldF9jaGls ZF9yb290KFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJCQkJQXBwZW5kUmVsSW5mbyAqYXBw aW5mbyk7Ci1zdGF0aWMgdm9pZCBleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoUGxhbm5lcklu Zm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnJ0ZSwKLQkJCQkJCSBJbmRleCBydGkpOworc3Rh dGljIHZvaWQgZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBS ZWxPcHRJbmZvICpyZWwsCisJCQkJCSAgUmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGkp Oworc3RhdGljIHZvaWQgZXhwYW5kX25vbnBhcnRpdGlvbmVkX2luaGVyaXRlZF9ydGVudHJ5 KFBsYW5uZXJJbmZvICpyb290LAorCQkJCQkJIFJhbmdlVGJsRW50cnkgKnJ0ZSwgSW5kZXgg cnRpLCBSZWxPcHRJbmZvICpyZWwpOwogc3RhdGljIHZvaWQgZXhwYW5kX3BhcnRpdGlvbmVk X3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsCiAJCQkJCQkgICBSYW5nZVRibEVudHJ5ICpw YXJlbnRydGUsCi0JCQkJCQkgICBJbmRleCBwYXJlbnRSVGluZGV4LCBSZWxhdGlvbiBwYXJl bnRyZWwsCi0JCQkJCQkgICBQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBMT0NLTU9ERSBs b2NrbW9kZSwKLQkJCQkJCSAgIExpc3QgKiphcHBpbmZvcyk7Ci1zdGF0aWMgdm9pZCBleHBh bmRfc2luZ2xlX2luaGVyaXRhbmNlX2NoaWxkKFBsYW5uZXJJbmZvICpyb290LAotCQkJCQkJ CQlSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCi0JCQkJCQkJCUluZGV4IHBhcmVudFJUaW5k ZXgsIFJlbGF0aW9uIHBhcmVudHJlbCwKLQkJCQkJCQkJUGxhblJvd01hcmsgKnRvcF9wYXJl bnRyYywgUmVsYXRpb24gY2hpbGRyZWwsCi0JCQkJCQkJCUxpc3QgKiphcHBpbmZvcywgUmFu Z2VUYmxFbnRyeSAqKmNoaWxkcnRlX3AsCi0JCQkJCQkJCUluZGV4ICpjaGlsZFJUaW5kZXhf cCk7CisJCQkJCQkgICBJbmRleCBwYXJlbnRSVGluZGV4LCBSZWxPcHRJbmZvICpwYXJlbnRy ZWwpOworc3RhdGljIFJlbE9wdEluZm8gKmFkZF9pbmhlcml0YW5jZV9jaGlsZF9yZWwoUGxh bm5lckluZm8gKnJvb3QsCisJCQkJCQkgIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKKwkJ CQkJCSAgSW5kZXggcGFyZW50UlRpbmRleCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAorCQkJ CQkJICBQbGFuUm93TWFyayAqdG9wX3BhcmVudHJjLCBSZWxhdGlvbiBjaGlsZHJlbCwKKwkJ CQkJCSAgUmFuZ2VUYmxFbnRyeSAqKmNoaWxkcnRlX3AsIEluZGV4ICpjaGlsZFJUaW5kZXhf cCk7CiBzdGF0aWMgQml0bWFwc2V0ICp0cmFuc2xhdGVfY29sX3ByaXZzKGNvbnN0IEJpdG1h cHNldCAqcGFyZW50X3ByaXZzLAogCQkJCQlMaXN0ICp0cmFuc2xhdGVkX3ZhcnMpOwotCitz dGF0aWMgUmVsT3B0SW5mbyAqYnVpbGRfaW5oZXJpdGFuY2VfY2hpbGRfcmVsKFBsYW5uZXJJ bmZvICpyb290LAorCQkJCQkgICBSZWxPcHRJbmZvICpwYXJlbnQsCisJCQkJCSAgIEluZGV4 IGNoaWxkUlRpbmRleCk7CitzdGF0aWMgTGlzdCAqYWRkX3Jvd21hcmtfanVua19jb2x1bW5z KFBsYW5uZXJJbmZvICpyb290LCBQbGFuUm93TWFyayAqcmMpOworc3RhdGljIGJvb2wgYXBw bHlfY2hpbGRfYmFzZXF1YWxzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWws CisJCQkJCSAgUmVsT3B0SW5mbyAqY2hpbGRyZWwsCisJCQkJCSAgUmFuZ2VUYmxFbnRyeSAq Y2hpbGRSVEUsIEFwcGVuZFJlbEluZm8gKmFwcGluZm8pOwogCiAvKgogICogZXhwYW5kX2lu aGVyaXRlZF90YWJsZXMKQEAgLTU0LDM3ICs2NiwxNDUgQEAgc3RhdGljIEJpdG1hcHNldCAq dHJhbnNsYXRlX2NvbF9wcml2cyhjb25zdCBCaXRtYXBzZXQgKnBhcmVudF9wcml2cywKICAq CQlpbnRvIGFuICJhcHBlbmQgcmVsYXRpb24iLiAgQXQgdGhlIGNvbmNsdXNpb24gb2YgdGhp cyBwcm9jZXNzLAogICoJCXRoZSAiaW5oIiBmbGFnIGlzIHNldCBpbiBhbGwgYW5kIG9ubHkg dGhvc2UgUlRFcyB0aGF0IGFyZSBhcHBlbmQKICAqCQlyZWxhdGlvbiBwYXJlbnRzLgorICoK KyAqIE5vdGUgdGhhdCBhbHRob3VnaCB3ZSdyZSBjYWxsaW5nIHRoZSBjb21iaW5lZCBvdXRw dXQgb2YgaW5oZXJpdGFuY2Ugc2V0CisgKiByZWxhdGlvbnMgYW4gImFwcGVuZCByZWxhdGlv biIgaGVyZSwgdGhlIGNhbGxlciBtYXkgbm90IGFsd2F5cyB3YW50IHRvCisgKiBjb21iaW5l IHRoZSByZWxhdGlvbnMuICBGb3IgZXhhbXBsZSwgaWYgdGhlIHBhcmVudCBvZiB0aGUgaW5o ZXJpdGFuY2UKKyAqIHNldCBpcyB0aGUgcXVlcnkncyB0YXJnZXQgcmVsYXRpb24sIGVhY2gg Y2hpbGQgcmVsYXRpb24gaXMgcHJvY2Vzc2VkCisgKiBvbiBpdHMgb3duIGFzIHRoZSBxdWVy eSdzIHRhcmdldCByZWxhdGlvbi4KICAqLwogdm9pZAogZXhwYW5kX2luaGVyaXRlZF90YWJs ZXMoUGxhbm5lckluZm8gKnJvb3QpCiB7Ci0JSW5kZXgJCW5ydGVzOworCWludAkJCW9yaWdf cnRhYmxlX3NpemU7CiAJSW5kZXgJCXJ0aTsKLQlMaXN0Q2VsbCAgICpybDsKKworCUFzc2Vy dChyb290LT5zaW1wbGVfcmVsX2FycmF5X3NpemUgPiAwKTsKKwlvcmlnX3J0YWJsZV9zaXpl ID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplOwogCiAJLyoKIAkgKiBleHBhbmRfaW5o ZXJpdGVkX3J0ZW50cnkgbWF5IGFkZCBSVEVzIHRvIHBhcnNlLT5ydGFibGUuIFRoZSBmdW5j dGlvbiBpcwogCSAqIGV4cGVjdGVkIHRvIHJlY3Vyc2l2ZWx5IGhhbmRsZSBhbnkgUlRFcyB0 aGF0IGl0IGNyZWF0ZXMgd2l0aCBpbmg9dHJ1ZS4KIAkgKiBTbyBqdXN0IHNjYW4gYXMgZmFy IGFzIHRoZSBvcmlnaW5hbCBlbmQgb2YgdGhlIHJ0YWJsZSBsaXN0LgogCSAqLwotCW5ydGVz ID0gbGlzdF9sZW5ndGgocm9vdC0+cGFyc2UtPnJ0YWJsZSk7Ci0JcmwgPSBsaXN0X2hlYWQo cm9vdC0+cGFyc2UtPnJ0YWJsZSk7Ci0JZm9yIChydGkgPSAxOyBydGkgPD0gbnJ0ZXM7IHJ0 aSsrKQorCWZvciAocnRpID0gMTsgcnRpIDwgb3JpZ19ydGFibGVfc2l6ZTsgcnRpKyspCiAJ ewotCQlSYW5nZVRibEVudHJ5ICpydGUgPSAoUmFuZ2VUYmxFbnRyeSAqKSBsZmlyc3Qocmwp OworCQlSZWxPcHRJbmZvICpicmVsID0gcm9vdC0+c2ltcGxlX3JlbF9hcnJheVtydGldOwor CQlSYW5nZVRibEVudHJ5ICpydGUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W3J0aV07CiAK LQkJZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KHJvb3QsIHJ0ZSwgcnRpKTsKLQkJcmwgPSBs bmV4dChybCk7CisJCS8qIHRoZXJlIG1heSBiZSBlbXB0eSBzbG90cyBjb3JyZXNwb25kaW5n IHRvIG5vbi1iYXNlcmVsIFJURXMgKi8KKwkJaWYgKGJyZWwgPT0gTlVMTCkKKwkJCWNvbnRp bnVlOworCisJCWlmIChydGUtPmluaCkKKwkJCWV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShy b290LCBicmVsLCBydGUsIHJ0aSk7CiAJfQogfQogCiAvKgogICogZXhwYW5kX2luaGVyaXRl ZF9ydGVudHJ5Ci0gKgkJQ2hlY2sgd2hldGhlciBhIHJhbmdldGFibGUgZW50cnkgcmVwcmVz ZW50cyBhbiBpbmhlcml0YW5jZSBzZXQuCi0gKgkJSWYgc28sIGFkZCBlbnRyaWVzIGZvciBh bGwgdGhlIGNoaWxkIHRhYmxlcyB0byB0aGUgcXVlcnkncwotICoJCXJhbmdldGFibGUsIGFu ZCBidWlsZCBBcHBlbmRSZWxJbmZvIG5vZGVzIGZvciBhbGwgdGhlIGNoaWxkIHRhYmxlcwot ICoJCWFuZCBhZGQgdGhlbSB0byByb290LT5hcHBlbmRfcmVsX2xpc3QuICBJZiBub3QsIGNs ZWFyIHRoZSBlbnRyeSdzCi0gKgkJImluaCIgZmxhZyB0byBwcmV2ZW50IGxhdGVyIGNvZGUg ZnJvbSBsb29raW5nIGZvciBBcHBlbmRSZWxJbmZvcy4KKyAqCQlUaGlzIGluaXRpYWxpemVz IFJlbE9wdEluZm9zIGZvciBpbmhlcml0YW5jZSBjaGlsZCByZWxhdGlvbnMgaWYgdGhlCisg KgkJcGFzc2VkLWluIHJlbGF0aW9uIGhhcyBhbnkKKyAqCisgKiAncmVsJyBpcyB0aGUgcGFy ZW50IHJlbGF0aW9uLCB3aG9zZSByYW5nZSB0YWJsZSBlbnRyeSAoJ3J0ZScpIGhhcyBiZWVu CisgKiBtYXJrZWQgdG8gcmVxdWlyZSBhZGRpbmcgY2hpbGRyZW4uICBQYXJlbnQgY291bGQg ZWl0aGVyIGJlIGEgc3VicXVlcnkgKGlmCisgKiB3ZSBmbGF0dGVuZWQgVU5JT04gQUxMIHF1 ZXJ5KSBvciBhIHRhYmxlIHRoYXQncyBrbm93biB0byBoYXZlIChvciBvbmNlIGhhZCkKKyAq IGluaGVyaXRhbmNlIGNoaWxkcmVuLiAgVGhlIGxhdHRlciBjb25zaXN0cyBvZiBib3RoIHJl Z3VsYXIgaW5oZXJpdGFuY2UKKyAqIHBhcmVudHMgYW5kIHBhcnRpdGlvbmVkIHRhYmxlcy4K KyAqCisgKiBGb3IgYSBzdWJxdWVyeSBwYXJlbnQsIHRoZXJlIGlzIG5vdCBtdWNoIHRvIGJl IGRvbmUgaGVyZSBiZWNhdXNlIHRoZQorICogY2hpbGRyZW4ncyBSVEVzIGFyZSBhbHJlYWR5 IHByZXNlbnQgaW4gdGhlIHF1ZXJ5LCBzbyB3ZSBqdXN0IGluaXRpYWxpemUKKyAqIFJlbE9w dEluZm9zIGZvciB0aGVtLiAgQWxzbywgdGhlIEFwcGVuZFJlbEluZm9zIGZvciBjaGlsZCBz dWJxdWVyaWVzCisgKiBoYXZlIGFscmVhZHkgYmVlbiBhZGRlZC4KKyAqCisgKiBGb3IgdGFi bGVzLCB3ZSBuZWVkIHRvIGFkZCB0aGUgY2hpbGRyZW4gdG8gdGhlIHJhbmdlIHRhYmxlIGFu ZCBpbml0aWFsaXplCisgKiBBcHBlbmRSZWxJbmZvcywgUmVsT3B0SW5mb3MsIGFuZCBQbGFu Um93TWFya3MgKGlmIGFueSkgZm9yIHRoZW0uICBGb3IKKyAqIGEgcGFydGl0aW9uZWQgcGFy ZW50LCB3ZSBvbmx5IGFkZCB0aGUgY2hpbGRyZW4gcmVtYWluaW5nIGFmdGVyIHBydW5pbmcu CisgKiBGb3IgcmVndWxhciBpbmhlcml0YW5jZSBwYXJlbnRzLCB3ZSBmaW5kIHRoZSBjaGls ZHJlbiB1c2luZworICogZmluZF9hbGxfaW5oZXJpdG9ycyBhbmQgYWRkIGFsbCBvZiB0aGVt LgorICoKKyAqIElmIGl0IHR1cm5zIG91dCB0aGF0IHRoZXJlIGFyZSBubyBjaGlsZHJlbiwg dGhlbiB3ZSBzZXQgcnRlLT5pbmggdG8gZmFsc2UKKyAqIHRvIGxldCB0aGUgY2FsbGVyIGtu b3cgdGhhdCBvbmx5IHRoZSBwYXJlbnQgdGFibGUgbmVlZHMgdG8gYmUgc2Nhbm5lZC4gIFRo ZQorICogY2FsbGVyIGNhbiBhY2NvcmRpbmdseSBzd2l0Y2ggdG8gYSBub24tQXBwZW5kIHBh dGguICBGb3IgYSBwYXJ0aXRpb25lZAorICogcGFyZW50LCB0aGF0IG1lYW5zIGFuIGVtcHR5 IHJlbGF0aW9uIGJlY2F1c2UgcGFyZW50cyB0aGVtc2VsdmVzIGNvbnRhaW4gbm8KKyAqIGRh dGEuCisgKgorICogRm9yIHRoZSByZWd1bGFyIGluaGVyaXRhbmNlIGNhc2UsIHRoZSBwYXJl bnQgYWxzbyBnZXRzIGFub3RoZXIgUlRFIHdpdGgKKyAqIGluaCA9IGZhbHNlIHRvIHJlcHJl c2VudCBpdCBhcyBhIGNoaWxkIHRvIGJlIHNjYW5uZWQgYXMgcGFydCBvZiB0aGUKKyAqIGlu aGVyaXRhbmNlIHNldC4gIFRoZSBvcmlnaW5hbCBSVEUgaXMgY29uc2lkZXJlZCB0byByZXBy ZXNlbnQgdGhlIHdob2xlCisgKiBpbmhlcml0YW5jZSBzZXQuCisgKi8KK3N0YXRpYyB2b2lk CitleHBhbmRfaW5oZXJpdGVkX3J0ZW50cnkoUGxhbm5lckluZm8gKnJvb3QsIFJlbE9wdElu Zm8gKnJlbCwKKwkJCQkJCSBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4IHJ0aSkKK3sKKwlB c3NlcnQocnRlLT5pbmgpOworCS8qIEluaGVyaXRhbmNlIHBhcmVudCAocGFydGl0aW9uZWQg b3Igbm90KSBvciBVTklPTiBBTEwgcGFyZW50IHN1YnF1ZXJ5LiAqLworCUFzc2VydChydGUt PnJ0ZWtpbmQgPT0gUlRFX1JFTEFUSU9OIHx8IHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVF UlkpOworCisJLyoKKwkgKiBVTklPTiBBTEwgY2hpbGRyZW4gYWxyZWFkeSBnb3QgUlRFcyBh bmQgQXBwZW5kUmVsSW5mb3MsIHNvIGp1c3QgYnVpbGQKKwkgKiBSZWxPcHRJbmZvcyBhbmQg cmV0dXJuLgorCSAqCisJICogSXQgbWlnaHQgYmUgYSBiaXQgb2RkIHRoYXQgdGhpcyBjb2Rl IGlzIGluIHRoaXMsIGJlY2F1c2UgdGhlcmUgaXMKKwkgKiBub3RoaW5nIHRvIGV4cGFuZCBy ZWFsbHkuCisJICovCisJaWYgKHJ0ZS0+cnRla2luZCA9PSBSVEVfU1VCUVVFUlkpCisJewor CQlMaXN0Q2VsbCAgICpsOworCisJCS8qCisJCSAqIFdlIGRvbid0IG5lZWQgdG8gdXNlIGV4 cGFuZF9wbGFubmVyX2FycmF5cyBpbiB0aGlzIGNhc2UsIGJlY2F1c2UKKwkJICogbm8gbmV3 IGNoaWxkIFJURXMgYXJlIGNyZWF0ZWQuICBzZXR1cF9zaW1wbGVfcmVsX2FycmF5cygpIGFu ZAorCQkgKiBzZXR1cF9hcHBlbmRfcmVsX2FycmF5IHdvdWxkJ3ZlIGNvbnNpZGVyZWQgdGhl c2UgY2hpbGQgUlRFcyB3aGVuCisJCSAqIGFsbG9jYXRpbmcgc3BhY2UgZm9yIHZhcmlvdXMg YXJyYXlzLgorCQkgKi8KKwkJZm9yZWFjaChsLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCisJ CXsKKwkJCUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSBsZmlyc3QobCk7CisJCQlJbmRleAkJ Y2hpbGRSVGluZGV4ID0gYXBwaW5mby0+Y2hpbGRfcmVsaWQ7CisKKwkJCWlmIChhcHBpbmZv LT5wYXJlbnRfcmVsaWQgIT0gcnRpKQorCQkJCWNvbnRpbnVlOworCisJCQlBc3NlcnQoY2hp bGRSVGluZGV4IDwgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplKTsKKwkJCUFzc2VydChy b290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRleF0gIT0gTlVMTCk7CisKKwkJCS8q CisJCQkgKiBXZSBzZXQgdGhlIGNvcnJlY3QgdmFsdWUgb2YgYmFzZXJlc3RyaWNpbmZvIGFu ZAorCQkJICogYmFzZXJlc3RyaWN0X21pbl9zZWN1cml0eSBiZWxvdy4KKwkJCSAqLworCQkJ cm9vdC0+c2ltcGxlX3JlbF9hcnJheVtjaGlsZFJUaW5kZXhdID0KKwkJCQlidWlsZF9pbmhl cml0YW5jZV9jaGlsZF9yZWwocm9vdCwgcmVsLCBhcHBpbmZvLT5jaGlsZF9yZWxpZCk7CisJ CX0KKwl9CisJZWxzZQorCXsKKwkJQXNzZXJ0KHJ0ZS0+cnRla2luZCA9PSBSVEVfUkVMQVRJ T04pOworCQlBc3NlcnQoaGFzX3N1YmNsYXNzKHJ0ZS0+cmVsaWQpKTsKKworCQkvKgorCQkg KiBUaGUgcmV3cml0ZXIgc2hvdWxkIGFscmVhZHkgaGF2ZSBvYnRhaW5lZCBhbiBhcHByb3By aWF0ZSBsb2NrIG9uCisJCSAqIGVhY2ggcmVsYXRpb24gbmFtZWQgaW4gdGhlIHF1ZXJ5LiAg SG93ZXZlciwgZm9yIGVhY2ggY2hpbGQgcmVsYXRpb24KKwkJICogd2UgYWRkIHRvIHRoZSBx dWVyeSwgd2UgbXVzdCBvYnRhaW4gYW4gYXBwcm9wcmlhdGUgbG9jaywgYmVjYXVzZQorCQkg KiB0aGlzIHdpbGwgYmUgdGhlIGZpcnN0IHVzZSBvZiB0aG9zZSByZWxhdGlvbnMgaW4gdGhl CisJCSAqIHBhcnNlL3Jld3JpdGUvcGxhbiBwaXBlbGluZS4gIENoaWxkIHJlbHMgc2hvdWxk IHVzZSB0aGUgc2FtZQorCQkgKiBsb2NrbW9kZSBhcyB0aGVpciBwYXJlbnQuCisJCSAqLwor CQlBc3NlcnQocnRlLT5yZWxsb2NrbW9kZSAhPSBOb0xvY2spOworCisJCWlmIChydGUtPnJl bGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJCWV4cGFuZF9wYXJ0aXRp b25lZF9ydGVudHJ5KHJvb3QsIHJ0ZSwgcnRpLCByZWwpOworCQllbHNlCisJCQlleHBhbmRf bm9ucGFydGl0aW9uZWRfaW5oZXJpdGVkX3J0ZW50cnkocm9vdCwgcnRlLCBydGksIHJlbCk7 CisJfQorfQorCisvKgorICogZXhwYW5kX25vbnBhcnRpdGlvbmVkX2luaGVyaXRlZF9ydGVu dHJ5CisgKgkJQWRkIGVudHJpZXMgZm9yIGFsbCB0aGUgY2hpbGQgdGFibGVzIHRvIHRoZSBx dWVyeSdzIHJhbmdldGFibGUsIGFuZAorICoJCWJ1aWxkIEFwcGVuZFJlbEluZm8gbm9kZXMg Zm9yIGFsbCB0aGUgY2hpbGQgdGFibGVzIGFuZCBhZGQgdGhlbSB0bworICoJCXJvb3QtPmFw cGVuZF9yZWxfbGlzdC4KICAqCiAgKiBOb3RlIHRoYXQgdGhlIG9yaWdpbmFsIFJURSBpcyBj b25zaWRlcmVkIHRvIHJlcHJlc2VudCB0aGUgd2hvbGUKICAqIGluaGVyaXRhbmNlIHNldC4g IFRoZSBmaXJzdCBvZiB0aGUgZ2VuZXJhdGVkIFJURXMgaXMgYW4gUlRFIGZvciB0aGUgc2Ft ZQpAQCAtOTUsNTUgKzIxNSwzNSBAQCBleHBhbmRfaW5oZXJpdGVkX3RhYmxlcyhQbGFubmVy SW5mbyAqcm9vdCkKICAqIHJlZ3VsYXIgaW5oZXJpdGFuY2UsIGEgcGFyZW50IFJURSBtdXN0 IGFsd2F5cyBoYXZlIGF0IGxlYXN0IHR3byBhc3NvY2lhdGVkCiAgKiBBcHBlbmRSZWxJbmZv czogb25lIGNvcnJlc3BvbmRpbmcgdG8gdGhlIHBhcmVudCB0YWJsZSBhcyBhIHNpbXBsZSBt ZW1iZXIgb2YKICAqIGluaGVyaXRhbmNlIHNldCBhbmQgb25lIG9yIG1vcmUgY29ycmVzcG9u ZGluZyB0byB0aGUgYWN0dWFsIGNoaWxkcmVuLgotICogU2luY2UgYSBwYXJ0aXRpb25lZCB0 YWJsZSBpcyBub3Qgc2Nhbm5lZCwgaXQgbWlnaHQgaGF2ZSBvbmx5IG9uZSBhc3NvY2lhdGVk Ci0gKiBBcHBlbmRSZWxJbmZvLgogICovCiBzdGF0aWMgdm9pZAotZXhwYW5kX2luaGVyaXRl ZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpydGUsIEluZGV4 IHJ0aSkKK2V4cGFuZF9ub25wYXJ0aXRpb25lZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFubmVy SW5mbyAqcm9vdCwKKwkJCQkJCQkJCQlSYW5nZVRibEVudHJ5ICpydGUsCisJCQkJCQkJCQkJ SW5kZXggcnRpLAorCQkJCQkJCQkJCVJlbE9wdEluZm8gKnJlbCkKIHsKIAlPaWQJCQlwYXJl bnRPSUQ7CiAJUGxhblJvd01hcmsgKm9sZHJjOwotCVJlbGF0aW9uCW9sZHJlbGF0aW9uOwot CUxPQ0tNT0RFCWxvY2ttb2RlOworCUxPQ0tNT0RFCWxvY2ttb2RlID0gcnRlLT5yZWxsb2Nr bW9kZTsKIAlMaXN0CSAgICppbmhPSURzOwogCUxpc3RDZWxsICAgKmw7CisJaW50CQkJbnVt X2NoaWxkcmVuOworCWludAkJCW51bV9jaGlsZHJlbl9hZGRlZCA9IDA7CiAKLQkvKiBEb2Vz IFJUIGVudHJ5IGFsbG93IGluaGVyaXRhbmNlPyAqLwotCWlmICghcnRlLT5pbmgpCi0JCXJl dHVybjsKLQkvKiBJZ25vcmUgYW55IGFscmVhZHktZXhwYW5kZWQgVU5JT04gQUxMIG5vZGVz ICovCi0JaWYgKHJ0ZS0+cnRla2luZCAhPSBSVEVfUkVMQVRJT04pCi0JewotCQlBc3NlcnQo cnRlLT5ydGVraW5kID09IFJURV9TVUJRVUVSWSk7Ci0JCXJldHVybjsKLQl9Ci0JLyogRmFz dCBwYXRoIGZvciBjb21tb24gY2FzZSBvZiBjaGlsZGxlc3MgdGFibGUgKi8KKwlBc3NlcnQo cnRlLT5ydGVraW5kID09IFJURV9SRUxBVElPTik7CisJQXNzZXJ0KGxvY2ttb2RlICE9IE5v TG9jayk7CiAJcGFyZW50T0lEID0gcnRlLT5yZWxpZDsKLQlpZiAoIWhhc19zdWJjbGFzcyhw YXJlbnRPSUQpKQotCXsKLQkJLyogQ2xlYXIgZmxhZyBiZWZvcmUgcmV0dXJuaW5nICovCi0J CXJ0ZS0+aW5oID0gZmFsc2U7Ci0JCXJldHVybjsKLQl9Ci0KLQkvKgotCSAqIFRoZSByZXdy aXRlciBzaG91bGQgYWxyZWFkeSBoYXZlIG9idGFpbmVkIGFuIGFwcHJvcHJpYXRlIGxvY2sg b24gZWFjaAotCSAqIHJlbGF0aW9uIG5hbWVkIGluIHRoZSBxdWVyeS4gIEhvd2V2ZXIsIGZv ciBlYWNoIGNoaWxkIHJlbGF0aW9uIHdlIGFkZAotCSAqIHRvIHRoZSBxdWVyeSwgd2UgbXVz dCBvYnRhaW4gYW4gYXBwcm9wcmlhdGUgbG9jaywgYmVjYXVzZSB0aGlzIHdpbGwgYmUKLQkg KiB0aGUgZmlyc3QgdXNlIG9mIHRob3NlIHJlbGF0aW9ucyBpbiB0aGUgcGFyc2UvcmV3cml0 ZS9wbGFuIHBpcGVsaW5lLgotCSAqIENoaWxkIHJlbHMgc2hvdWxkIHVzZSB0aGUgc2FtZSBs b2NrbW9kZSBhcyB0aGVpciBwYXJlbnQuCi0JICovCi0JbG9ja21vZGUgPSBydGUtPnJlbGxv Y2ttb2RlOwogCiAJLyogU2NhbiBmb3IgYWxsIG1lbWJlcnMgb2YgaW5oZXJpdGFuY2Ugc2V0 LCBhY3F1aXJlIG5lZWRlZCBsb2NrcyAqLwogCWluaE9JRHMgPSBmaW5kX2FsbF9pbmhlcml0 b3JzKHBhcmVudE9JRCwgbG9ja21vZGUsIE5VTEwpOwogCiAJLyoKIAkgKiBDaGVjayB0aGF0 IHRoZXJlJ3MgYXQgbGVhc3Qgb25lIGRlc2NlbmRhbnQsIGVsc2UgdHJlYXQgYXMgbm8tY2hp bGQKLQkgKiBjYXNlLiAgVGhpcyBjb3VsZCBoYXBwZW4gZGVzcGl0ZSBhYm92ZSBoYXNfc3Vi Y2xhc3MoKSBjaGVjaywgaWYgdGFibGUKLQkgKiBvbmNlIGhhZCBhIGNoaWxkIGJ1dCBubyBs b25nZXIgZG9lcy4KKwkgKiBjYXNlLiAgVGhpcyBjb3VsZCBoYXBwZW4gZGVzcGl0ZSBoYXNf c3ViY2xhc3MoKSBjaGVjayBwZXJmb3JtZWQgYnkKKwkgKiBzdWJxdWVyeV9wbGFubmVyLCBp ZiB0YWJsZSBvbmNlIGhhZCBhIGNoaWxkIGJ1dCBubyBsb25nZXIgZG9lcy4KIAkgKi8KLQlp ZiAobGlzdF9sZW5ndGgoaW5oT0lEcykgPCAyKQorCW51bV9jaGlsZHJlbiA9IGxpc3RfbGVu Z3RoKGluaE9JRHMpOworCWlmIChudW1fY2hpbGRyZW4gPCAyKQogCXsKIAkJLyogQ2xlYXIg ZmxhZyBiZWZvcmUgcmV0dXJuaW5nICovCiAJCXJ0ZS0+aW5oID0gZmFsc2U7CkBAIC0xNTEs MjE2ICsyNTEsMjIxIEBAIGV4cGFuZF9pbmhlcml0ZWRfcnRlbnRyeShQbGFubmVySW5mbyAq cm9vdCwgUmFuZ2VUYmxFbnRyeSAqcnRlLCBJbmRleCBydGkpCiAJfQogCiAJLyoKLQkgKiBJ ZiBwYXJlbnQgcmVsYXRpb24gaXMgc2VsZWN0ZWQgRk9SIFVQREFURS9TSEFSRSwgd2UgbmVl ZCB0byBtYXJrIGl0cwotCSAqIFBsYW5Sb3dNYXJrIGFzIGlzUGFyZW50ID0gdHJ1ZSwgYW5k IGdlbmVyYXRlIGEgbmV3IFBsYW5Sb3dNYXJrIGZvciBlYWNoCi0JICogY2hpbGQuCisJICog SWYgcGFyZW50IHJlbGF0aW9uIGlzIHNlbGVjdGVkIEZPUiBVUERBVEUvU0hBUkUsIHByZXBy b2Nlc3Nfcm93bWFya3MKKwkgKiBzaG91bGQndmUgc2V0IGlzUGFyZW50ID0gdHJ1ZS4gIFdl J2xsIGdlbmVyYXRlIGEgbmV3IFBsYW5Sb3dNYXJrIGZvcgorCSAqIGVhY2ggY2hpbGQuCiAJ ICovCiAJb2xkcmMgPSBnZXRfcGxhbl9yb3dtYXJrKHJvb3QtPnJvd01hcmtzLCBydGkpOwot CWlmIChvbGRyYykKLQkJb2xkcmMtPmlzUGFyZW50ID0gdHJ1ZTsKKwlBc3NlcnQob2xkcmMg PT0gTlVMTCB8fCBvbGRyYy0+aXNQYXJlbnQpOwogCiAJLyoKLQkgKiBNdXN0IG9wZW4gdGhl IHBhcmVudCByZWxhdGlvbiB0byBleGFtaW5lIGl0cyB0dXBkZXNjLiAgV2UgbmVlZCBub3Qg bG9jawotCSAqIGl0OyB3ZSBhc3N1bWUgdGhlIHJld3JpdGVyIGFscmVhZHkgZGlkLgorCSAq IE11c3QgZXhwYW5kIFBsYW5uZXJJbmZvIGFycmF5cyBieSBudW1fY2hpbGRyZW4gYmVmb3Jl IHdlIGNhbiBhZGQKKwkgKiBjaGlsZHJlbi4KIAkgKi8KLQlvbGRyZWxhdGlvbiA9IHRhYmxl X29wZW4ocGFyZW50T0lELCBOb0xvY2spOworCUFzc2VydChudW1fY2hpbGRyZW4gPiAwKTsK KwlleHBhbmRfcGxhbm5lcl9hcnJheXMocm9vdCwgbnVtX2NoaWxkcmVuKTsKIAotCS8qIFNj YW4gdGhlIGluaGVyaXRhbmNlIHNldCBhbmQgZXhwYW5kIGl0ICovCi0JaWYgKFJlbGF0aW9u R2V0UGFydGl0aW9uRGVzYyhvbGRyZWxhdGlvbikgIT0gTlVMTCkKKwlmb3JlYWNoKGwsIGlu aE9JRHMpCiAJewotCQlBc3NlcnQocnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9O RURfVEFCTEUpOwotCi0JCS8qCi0JCSAqIElmIHRoaXMgdGFibGUgaGFzIHBhcnRpdGlvbnMs IHJlY3Vyc2l2ZWx5IGV4cGFuZCB0aGVtIGluIHRoZSBvcmRlcgotCQkgKiBpbiB3aGljaCB0 aGV5IGFwcGVhciBpbiB0aGUgUGFydGl0aW9uRGVzYy4gIFdoaWxlIGF0IGl0LCBhbHNvCi0J CSAqIGV4dHJhY3QgdGhlIHBhcnRpdGlvbiBrZXkgY29sdW1ucyBvZiBhbGwgdGhlIHBhcnRp dGlvbmVkIHRhYmxlcy4KLQkJICovCi0JCWV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KHJv b3QsIHJ0ZSwgcnRpLCBvbGRyZWxhdGlvbiwgb2xkcmMsCi0JCQkJCQkJCSAgIGxvY2ttb2Rl LCAmcm9vdC0+YXBwZW5kX3JlbF9saXN0KTsKLQl9Ci0JZWxzZQotCXsKLQkJTGlzdAkgICAq YXBwaW5mb3MgPSBOSUw7CisJCU9pZAkJCWNoaWxkT0lEID0gbGZpcnN0X29pZChsKTsKKwkJ UmVsYXRpb24JbmV3cmVsYXRpb247CiAJCVJhbmdlVGJsRW50cnkgKmNoaWxkcnRlOwogCQlJ bmRleAkJY2hpbGRSVGluZGV4OwogCisJCS8qIEFscmVhZHkgbG9ja2VkIGFib3ZlLiAqLwor CQluZXdyZWxhdGlvbiA9IGhlYXBfb3BlbihjaGlsZE9JRCwgTm9Mb2NrKTsKKwogCQkvKgot CQkgKiBUaGlzIHRhYmxlIGhhcyBubyBwYXJ0aXRpb25zLiAgRXhwYW5kIGFueSBwbGFpbiBp bmhlcml0YW5jZQotCQkgKiBjaGlsZHJlbiBpbiB0aGUgb3JkZXIgdGhlIE9JRHMgd2VyZSBy ZXR1cm5lZCBieQotCQkgKiBmaW5kX2FsbF9pbmhlcml0b3JzLgorCQkgKiBJdCBpcyBwb3Nz aWJsZSB0aGF0IHRoZSBwYXJlbnQgdGFibGUgaGFzIGNoaWxkcmVuIHRoYXQgYXJlIHRlbXAK KwkJICogdGFibGVzIG9mIG90aGVyIGJhY2tlbmRzLiAgV2UgY2Fubm90IHNhZmVseSBhY2Nl c3Mgc3VjaCB0YWJsZXMKKwkJICogKGJlY2F1c2Ugb2YgYnVmZmVyaW5nIGlzc3VlcyksIGFu ZCB0aGUgYmVzdCB0aGluZyB0byBkbyBzZWVtcworCQkgKiB0byBiZSB0byBzaWxlbnRseSBp Z25vcmUgdGhlbS4KIAkJICovCi0JCWZvcmVhY2gobCwgaW5oT0lEcykKKwkJaWYgKGNoaWxk T0lEICE9IHBhcmVudE9JRCAmJiBSRUxBVElPTl9JU19PVEhFUl9URU1QKG5ld3JlbGF0aW9u KSkKIAkJewotCQkJT2lkCQkJY2hpbGRPSUQgPSBsZmlyc3Rfb2lkKGwpOwotCQkJUmVsYXRp b24JbmV3cmVsYXRpb247Ci0KLQkJCS8qIE9wZW4gcmVsIGlmIG5lZWRlZDsgd2UgYWxyZWFk eSBoYXZlIHJlcXVpcmVkIGxvY2tzICovCi0JCQlpZiAoY2hpbGRPSUQgIT0gcGFyZW50T0lE KQotCQkJCW5ld3JlbGF0aW9uID0gdGFibGVfb3BlbihjaGlsZE9JRCwgTm9Mb2NrKTsKLQkJ CWVsc2UKLQkJCQluZXdyZWxhdGlvbiA9IG9sZHJlbGF0aW9uOwotCi0JCQkvKgotCQkJICog SXQgaXMgcG9zc2libGUgdGhhdCB0aGUgcGFyZW50IHRhYmxlIGhhcyBjaGlsZHJlbiB0aGF0 IGFyZSB0ZW1wCi0JCQkgKiB0YWJsZXMgb2Ygb3RoZXIgYmFja2VuZHMuICBXZSBjYW5ub3Qg c2FmZWx5IGFjY2VzcyBzdWNoIHRhYmxlcwotCQkJICogKGJlY2F1c2Ugb2YgYnVmZmVyaW5n IGlzc3VlcyksIGFuZCB0aGUgYmVzdCB0aGluZyB0byBkbyBzZWVtcwotCQkJICogdG8gYmUg dG8gc2lsZW50bHkgaWdub3JlIHRoZW0uCi0JCQkgKi8KLQkJCWlmIChjaGlsZE9JRCAhPSBw YXJlbnRPSUQgJiYgUkVMQVRJT05fSVNfT1RIRVJfVEVNUChuZXdyZWxhdGlvbikpCi0JCQl7 Ci0JCQkJdGFibGVfY2xvc2UobmV3cmVsYXRpb24sIGxvY2ttb2RlKTsKLQkJCQljb250aW51 ZTsKLQkJCX0KLQotCQkJZXhwYW5kX3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChyb290LCBy dGUsIHJ0aSwgb2xkcmVsYXRpb24sIG9sZHJjLAotCQkJCQkJCQkJCQluZXdyZWxhdGlvbiwK LQkJCQkJCQkJCQkJJmFwcGluZm9zLCAmY2hpbGRydGUsCi0JCQkJCQkJCQkJCSZjaGlsZFJU aW5kZXgpOwotCi0JCQkvKiBDbG9zZSBjaGlsZCByZWxhdGlvbnMsIGJ1dCBrZWVwIGxvY2tz ICovCi0JCQlpZiAoY2hpbGRPSUQgIT0gcGFyZW50T0lEKQotCQkJCXRhYmxlX2Nsb3NlKG5l d3JlbGF0aW9uLCBOb0xvY2spOworCQkJdGFibGVfY2xvc2UobmV3cmVsYXRpb24sIGxvY2tt b2RlKTsKKwkJCWNvbnRpbnVlOwogCQl9CiAKLQkJLyoKLQkJICogSWYgYWxsIHRoZSBjaGls ZHJlbiB3ZXJlIHRlbXAgdGFibGVzLCBwcmV0ZW5kIGl0J3MgYQotCQkgKiBub24taW5oZXJp dGFuY2Ugc2l0dWF0aW9uOyB3ZSBkb24ndCBuZWVkIEFwcGVuZCBub2RlIGluIHRoYXQgY2Fz ZS4KLQkJICogVGhlIGR1cGxpY2F0ZSBSVEUgd2UgYWRkZWQgZm9yIHRoZSBwYXJlbnQgdGFi bGUgaXMgaGFybWxlc3MsIHNvIHdlCi0JCSAqIGRvbid0IGJvdGhlciB0byBnZXQgcmlkIG9m IGl0OyBkaXR0byBmb3IgdGhlIHVzZWxlc3MgUGxhblJvd01hcmsKLQkJICogbm9kZS4KLQkJ ICovCi0JCWlmIChsaXN0X2xlbmd0aChhcHBpbmZvcykgPCAyKQotCQkJcnRlLT5pbmggPSBm YWxzZTsKLQkJZWxzZQotCQkJcm9vdC0+YXBwZW5kX3JlbF9saXN0ID0gbGlzdF9jb25jYXQo cm9vdC0+YXBwZW5kX3JlbF9saXN0LAotCQkJCQkJCQkJCQkJYXBwaW5mb3MpOworCQkodm9p ZCkgYWRkX2luaGVyaXRhbmNlX2NoaWxkX3JlbChyb290LCBydGUsIHJ0aSwgcmVsLCBvbGRy YywKKwkJCQkJCQkJCQkgbmV3cmVsYXRpb24sICZjaGlsZHJ0ZSwKKwkJCQkJCQkJCQkgJmNo aWxkUlRpbmRleCk7CisJCUFzc2VydChjaGlsZHJ0ZSAhPSBOVUxMKTsKKwkJLyogQWxsIHJl Z3VsYXIgaW5oZXJpdGFuY2UgY2hpbGRyZW4gYXJlIGxlYWYgY2hpbGRyZW4uICovCisJCUFz c2VydCghY2hpbGRydGUtPmluaCk7CisJCUFzc2VydChjaGlsZFJUaW5kZXggPiAwKTsKIAor CQkvKiBDbG9zZSBjaGlsZCByZWxhdGlvbnMsIGJ1dCBrZWVwIGxvY2tzICovCisJCWhlYXBf Y2xvc2UobmV3cmVsYXRpb24sIE5vTG9jayk7CisJCW51bV9jaGlsZHJlbl9hZGRlZCsrOwog CX0KIAotCXRhYmxlX2Nsb3NlKG9sZHJlbGF0aW9uLCBOb0xvY2spOworCS8qCisJICogSWYg YWxsIGNoaWxkcmVuLCBpbmNsdWRpbmcgdGhlIHBhcmVudCAoYXMgY2hpbGQgcmVsKSwgd2Vy ZQorCSAqIGV4Y2x1ZGVkLCBtYXJrIHRoZSBwYXJlbnQgcmVsIGFzIGVtcHR5LiAgSWYgYWxs IHRoZSBjaGlsZHJlbiB3ZXJlIHRlbXAKKwkgKiB0YWJsZXMsIHByZXRlbmQgaXQncyBhIG5v bi1pbmhlcml0YW5jZSBzaXR1YXRpb247IHdlIGRvbid0IG5lZWQgQXBwZW5kCisJICogbm9k ZSBpbiB0aGF0IGNhc2UuICBUaGUgZHVwbGljYXRlIFJURSB3ZSBhZGRlZCBmb3IgdGhlIHBh cmVudCB0YWJsZSBpcworCSAqIGhhcm1sZXNzLCBzbyB3ZSBkb24ndCBib3RoZXIgdG8gZ2V0 IHJpZCBvZiBpdDsgZGl0dG8gZm9yIHRoZSB1c2VsZXNzCisJICogUGxhblJvd01hcmsgbm9k ZS4KKwkgKi8KKwlpZiAobnVtX2NoaWxkcmVuX2FkZGVkID09IDApCisJCW1hcmtfZHVtbXlf cmVsKHJlbCk7CisJZWxzZSBpZiAobnVtX2NoaWxkcmVuX2FkZGVkID09IDEpCisJCXJ0ZS0+ aW5oID0gZmFsc2U7CisKKwkvKgorCSAqIEFkZCBqdW5rIGNvbHVtbnMgbmVlZGVkIGJ5IHRo ZSByb3cgbWFyayBpZiBhbnkgYW5kIGFsc28gYWRkIHRoZQorCSAqIHJlbGV2YW50IGV4cHJl c3Npb25zIHRvIHRoZSByb290IHBhcmVudCdzIHJlbHRhcmdldC4KKwkgKi8KKwlpZiAob2xk cmMpCisJeworCQlMaXN0ICAgKnRsaXN0ID0gYWRkX3Jvd21hcmtfanVua19jb2x1bW5zKHJv b3QsIG9sZHJjKTsKKworCQlidWlsZF9iYXNlX3JlbF90bGlzdHMocm9vdCwgdGxpc3QpOwor CX0KIH0KIAogLyoKICAqIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5Ci0gKgkJUmVjdXJz aXZlbHkgZXhwYW5kIGFuIFJURSBmb3IgYSBwYXJ0aXRpb25lZCB0YWJsZS4KKyAqCQlQcnVu ZXMgdW5uZWNlc3NhcnkgcGFydGl0aW9ucyBvZiBhIHBhcnRpdGlvbmVkIHRhYmxlIGFuZCBh ZGRzCisgKgkJcmVtYWluaW5nIG9uZXMgdG8gdGhlIFF1ZXJ5IGFuZCB0aGUgUGxhbm5lcklu Zm8KKyAqCisgKiBQYXJ0aXRpb25zIGFyZSBhZGRlZCB0byB0aGUgcXVlcnkgaW4gb3JkZXIg aW4gd2hpY2ggdGhleSBhcmUgZm91bmQgaW4KKyAqIHRoZSBwYXJlbnQncyBQYXJ0aXRpb25E ZXNjLgorICoKKyAqIE5vdGU6IGV2ZW4gdGhvdWdoIG9ubHkgdGhlIHVucHJ1bmVkIHBhcnRp dGlvbnMgd2lsbCBiZSBhZGRlZCB0byB0aGUKKyAqIHJlc3VsdGluZyBwbGFuLCB0aGlzIHN0 aWxsIGxvY2tzICphbGwqIHBhcnRpdGlvbnMgdmlhIGZpbmRfYWxsX2luaGVyaXRvcnMKKyAq IHdoZW4gdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZm9yIHRoZSByb290IHBhcnRpdGlvbmVk IHRhYmxlLgogICovCiBzdGF0aWMgdm9pZAogZXhwYW5kX3BhcnRpdGlvbmVkX3J0ZW50cnko UGxhbm5lckluZm8gKnJvb3QsIFJhbmdlVGJsRW50cnkgKnBhcmVudHJ0ZSwKLQkJCQkJCSAg IEluZGV4IHBhcmVudFJUaW5kZXgsIFJlbGF0aW9uIHBhcmVudHJlbCwKLQkJCQkJCSAgIFBs YW5Sb3dNYXJrICp0b3BfcGFyZW50cmMsIExPQ0tNT0RFIGxvY2ttb2RlLAotCQkJCQkJICAg TGlzdCAqKmFwcGluZm9zKQorCQkJCQkJICAgSW5kZXggcGFyZW50UlRpbmRleCwgUmVsT3B0 SW5mbyAqcGFyZW50cmVsKQogeworCUxPQ0tNT0RFCWxvY2ttb2RlID0gcGFyZW50cnRlLT5y ZWxsb2NrbW9kZTsKKwlQbGFuUm93TWFyayAqcm9vdHJjID0gTlVMTDsKIAlpbnQJCQlpOwot CVJhbmdlVGJsRW50cnkgKmNoaWxkcnRlOwotCUluZGV4CQljaGlsZFJUaW5kZXg7Ci0JUGFy dGl0aW9uRGVzYyBwYXJ0ZGVzYyA9IFJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhwYXJlbnRy ZWwpOworCUJpdG1hcHNldCAgKnBhcnRpbmRleGVzOworCUluZGV4CQlyb290UGFyZW50UlRp bmRleCA9IHBhcmVudHJlbC0+aW5oX3Jvb3RfcGFyZW50ID4gMCA/CisJCQkJCQkJCQlwYXJl bnRyZWwtPmluaF9yb290X3BhcmVudCA6CisJCQkJCQkJCQlwYXJlbnRSVGluZGV4OwogCi0J Y2hlY2tfc3RhY2tfZGVwdGgoKTsKLQotCS8qIEEgcGFydGl0aW9uZWQgdGFibGUgc2hvdWxk IGFsd2F5cyBoYXZlIGEgcGFydGl0aW9uIGRlc2NyaXB0b3IuICovCi0JQXNzZXJ0KHBhcnRk ZXNjKTsKLQotCUFzc2VydChwYXJlbnRydGUtPmluaCk7CisJLyogSWYgcm9vdCBwYXJ0aXRp b25lZCB0YWJsZSwgbG9jayAqYWxsKiBwYXJ0aXRpb25zIGluIHRoZSB0cmVlLiAqLworCWlm IChwYXJlbnRSVGluZGV4ID09IHJvb3RQYXJlbnRSVGluZGV4KQorCQkodm9pZCkgZmluZF9h bGxfaW5oZXJpdG9ycyhwYXJlbnRydGUtPnJlbGlkLCBsb2NrbW9kZSwgTlVMTCk7CiAKIAkv KgotCSAqIE5vdGUgZG93biB3aGV0aGVyIGFueSBwYXJ0aXRpb24ga2V5IGNvbHMgYXJlIGJl aW5nIHVwZGF0ZWQuIFRob3VnaCBpdCdzCi0JICogdGhlIHJvb3QgcGFydGl0aW9uZWQgdGFi bGUncyB1cGRhdGVkQ29scyB3ZSBhcmUgaW50ZXJlc3RlZCBpbiwgd2UKLQkgKiBpbnN0ZWFk IHVzZSBwYXJlbnRydGUgdG8gZ2V0IHRoZSB1cGRhdGVkQ29scy4gVGhpcyBpcyBjb252ZW5p ZW50Ci0JICogYmVjYXVzZSBwYXJlbnRydGUgYWxyZWFkeSBoYXMgdGhlIHJvb3QgcGFydHJl bCdzIHVwZGF0ZWRDb2xzIHRyYW5zbGF0ZWQKLQkgKiB0byBtYXRjaCB0aGUgYXR0cmlidXRl IG9yZGVyaW5nIG9mIHBhcmVudHJlbC4KKwkgKiBJbml0aWFsaXplIHBhcnRpdGlvbmVkX2No aWxkX3JlbHMgdG8gY29udGFpbiB0aGlzIFJUIGluZGV4LgorCSAqCisJICogTm90ZSB0aGF0 IGR1cmluZyB0aGUgc2V0X2FwcGVuZF9yZWxfcGF0aGxpc3QoKSBwaGFzZSwgdmFsdWVzIG9m IHRoZQorCSAqIGluZGV4ZXMgb2YgcGFydGl0aW9uZWQgcmVsYXRpb25zIHRoYXQgYXBwZWFy IGRvd24gaW4gdGhlIHRyZWUgd2lsbCBiZQorCSAqIGJ1YmJsZWQgdXAgaW50byByb290IHBh cmVudCdzIGxpc3Qgc28gdGhhdCB3aGVuIHdlJ3ZlIGNyZWF0ZWQgUGF0aHMgZm9yCisJICog YWxsIHRoZSBjaGlsZHJlbiwgdGhlIHJvb3QgdGFibGUncyBsaXN0IHdpbGwgY29udGFpbiBh bGwgc3VjaCBpbmRleGVzLgogCSAqLwotCWlmICghcm9vdC0+cGFydENvbHNVcGRhdGVkKQot CQlyb290LT5wYXJ0Q29sc1VwZGF0ZWQgPQotCQkJaGFzX3BhcnRpdGlvbl9hdHRycyhwYXJl bnRyZWwsIHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsIE5VTEwpOworCXBhcmVudHJlbC0+cGFy dGl0aW9uZWRfY2hpbGRfcmVscyA9IGxpc3RfbWFrZTFfaW50KHBhcmVudFJUaW5kZXgpOwog Ci0JLyogRmlyc3QgZXhwYW5kIHRoZSBwYXJ0aXRpb25lZCB0YWJsZSBpdHNlbGYuICovCi0J ZXhwYW5kX3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChyb290LCBwYXJlbnRydGUsIHBhcmVu dFJUaW5kZXgsIHBhcmVudHJlbCwKLQkJCQkJCQkJCXRvcF9wYXJlbnRyYywgcGFyZW50cmVs LAotCQkJCQkJCQkJYXBwaW5mb3MsICZjaGlsZHJ0ZSwgJmNoaWxkUlRpbmRleCk7CisJLyog UGVyZm9ybSBwcnVuaW5nLiAqLworCXBhcnRpbmRleGVzID0gcHJ1bmVfYXBwZW5kX3JlbF9w YXJ0aXRpb25zKHBhcmVudHJlbCk7CisKKwkvKiBNdXN0IGV4cGFuZCBQbGFubmVySW5mbyBh cnJheXMgYmVmb3JlIHdlIGNhbiBhZGQgY2hpbGRyZW4uICovCisJaWYgKGJtc19udW1fbWVt YmVycyhwYXJ0aW5kZXhlcykgPiAwKQorCQlleHBhbmRfcGxhbm5lcl9hcnJheXMocm9vdCwg Ym1zX251bV9tZW1iZXJzKHBhcnRpbmRleGVzKSk7CiAKIAkvKgotCSAqIElmIHRoZSBwYXJ0 aXRpb25lZCB0YWJsZSBoYXMgbm8gcGFydGl0aW9ucywgdHJlYXQgdGhpcyBhcyB0aGUKLQkg KiBub24taW5oZXJpdGFuY2UgY2FzZS4KKwkgKiBGb3IgcGFydGl0aW9uZWQgdGFibGVzLCB3 ZSBhbHNvIHN0b3JlIHRoZSBwYXJ0aXRpb24gUmVsT3B0SW5mbworCSAqIHBvaW50ZXJzIGlu IHRoZSBwYXJlbnQncyBSZWxPcHRJbmZvLgogCSAqLwotCWlmIChwYXJ0ZGVzYy0+bnBhcnRz ID09IDApCi0JewotCQlwYXJlbnRydGUtPmluaCA9IGZhbHNlOwotCQlyZXR1cm47Ci0JfQor CXBhcmVudHJlbC0+cGFydF9yZWxzID0gKFJlbE9wdEluZm8gKiopIHBhbGxvYzAoc2l6ZW9m KFJlbE9wdEluZm8gKikgKgorCQkJCQkJCQkJCQkJICAgcGFyZW50cmVsLT5ucGFydHMpOwog Ci0JZm9yIChpID0gMDsgaSA8IHBhcnRkZXNjLT5ucGFydHM7IGkrKykKKwlyb290cmMgPSBn ZXRfcGxhbl9yb3dtYXJrKHJvb3QtPnJvd01hcmtzLCByb290UGFyZW50UlRpbmRleCk7CisJ QXNzZXJ0KHJvb3RyYyA9PSBOVUxMIHx8IHJvb3RyYy0+aXNQYXJlbnQpOworCWkgPSAtMTsK Kwl3aGlsZSAoKGkgPSBibXNfbmV4dF9tZW1iZXIocGFydGluZGV4ZXMsIGkpKSA+PSAwKQog CXsKLQkJT2lkCQkJY2hpbGRPSUQgPSBwYXJ0ZGVzYy0+b2lkc1tpXTsKLQkJUmVsYXRpb24J Y2hpbGRyZWw7CisJCU9pZAkJY2hpbGRPSUQgPSBwYXJlbnRyZWwtPnBhcnRfb2lkc1tpXTsK KwkJUmVsYXRpb24JbmV3cmVsYXRpb247CisJCVJlbE9wdEluZm8gKmNoaWxkcmVsOworCQlS YW5nZVRibEVudHJ5ICpjaGlsZHJ0ZTsKKwkJSW5kZXgJCWNoaWxkUlRpbmRleDsKIAogCQkv KiBPcGVuIHJlbDsgd2UgYWxyZWFkeSBoYXZlIHJlcXVpcmVkIGxvY2tzICovCi0JCWNoaWxk cmVsID0gdGFibGVfb3BlbihjaGlsZE9JRCwgTm9Mb2NrKTsKKwkJbmV3cmVsYXRpb24gPSB0 YWJsZV9vcGVuKGNoaWxkT0lELCBOb0xvY2spOworCQlBc3NlcnQoIVJFTEFUSU9OX0lTX09U SEVSX1RFTVAobmV3cmVsYXRpb24pKTsKIAogCQkvKgotCQkgKiBUZW1wb3JhcnkgcGFydGl0 aW9ucyBiZWxvbmdpbmcgdG8gb3RoZXIgc2Vzc2lvbnMgc2hvdWxkIGhhdmUgYmVlbgotCQkg KiBkaXNhbGxvd2VkIGF0IGRlZmluaXRpb24sIGJ1dCBmb3IgcGFyYW5vaWEncyBzYWtlLCBs ZXQncyBkb3VibGUKLQkJICogY2hlY2suCisJCSAqIEEgcGFydGl0aW9uZWQgY2hpbGQgdGFi bGUgd2l0aCAwIGNoaWxkcmVuIGlzIGEgZHVtbXkgcmVsLCBzbyBkb24ndAorCQkgKiBib3Ro ZXIgY3JlYXRpbmcgcGxhbm5lciBvYmplY3RzIGZvciBpdC4KIAkJICovCi0JCWlmIChSRUxB VElPTl9JU19PVEhFUl9URU1QKGNoaWxkcmVsKSkKLQkJCWVsb2coRVJST1IsICJ0ZW1wb3Jh cnkgcmVsYXRpb24gZnJvbSBhbm90aGVyIHNlc3Npb24gZm91bmQgYXMgcGFydGl0aW9uIik7 CisJCWlmIChuZXdyZWxhdGlvbi0+cmRfcmVsLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElU SU9ORURfVEFCTEUgJiYKKwkJCVJlbGF0aW9uR2V0UGFydGl0aW9uRGVzYyhuZXdyZWxhdGlv biktPm5wYXJ0cyA9PSAwKQorCQl7CisJCQloZWFwX2Nsb3NlKG5ld3JlbGF0aW9uLCBOb0xv Y2spOworCQkJY29udGludWU7CisJCX0KIAotCQlleHBhbmRfc2luZ2xlX2luaGVyaXRhbmNl X2NoaWxkKHJvb3QsIHBhcmVudHJ0ZSwgcGFyZW50UlRpbmRleCwKLQkJCQkJCQkJCQlwYXJl bnRyZWwsIHRvcF9wYXJlbnRyYywgY2hpbGRyZWwsCi0JCQkJCQkJCQkJYXBwaW5mb3MsICZj aGlsZHJ0ZSwgJmNoaWxkUlRpbmRleCk7CisJCWNoaWxkcmVsID0gYWRkX2luaGVyaXRhbmNl X2NoaWxkX3JlbChyb290LCBwYXJlbnRydGUsIHBhcmVudFJUaW5kZXgsCisJCQkJCQkJCQkJ CSBwYXJlbnRyZWwsIHJvb3RyYywgbmV3cmVsYXRpb24sCisJCQkJCQkJCQkJCSAmY2hpbGRy dGUsICZjaGlsZFJUaW5kZXgpOworCQlBc3NlcnQoY2hpbGRyZWwgIT0gTlVMTCk7CisJCXBh cmVudHJlbC0+cGFydF9yZWxzW2ldID0gY2hpbGRyZWw7CiAKLQkJLyogSWYgdGhpcyBjaGls ZCBpcyBpdHNlbGYgcGFydGl0aW9uZWQsIHJlY3Vyc2UgKi8KLQkJaWYgKGNoaWxkcmVsLT5y ZF9yZWwtPnJlbGtpbmQgPT0gUkVMS0lORF9QQVJUSVRJT05FRF9UQUJMRSkKKwkJLyogQ2xv c2UgY2hpbGQgcmVsYXRpb25zLCBidXQga2VlcCBsb2NrcyAqLworCQl0YWJsZV9jbG9zZShu ZXdyZWxhdGlvbiwgTm9Mb2NrKTsKKworCQkvKiBJZiB0aGUgY2hpbGQgaXMgcGFydGl0aW9u ZWQgaXRzZWxmLCBleHBhbmQgaXQgdG9vLiAqLworCQlpZiAoY2hpbGRyZWwtPnBhcnRfc2No ZW1lKQorCQl7CisJCQlBc3NlcnQoY2hpbGRydGUtPmluaCk7CiAJCQlleHBhbmRfcGFydGl0 aW9uZWRfcnRlbnRyeShyb290LCBjaGlsZHJ0ZSwgY2hpbGRSVGluZGV4LAotCQkJCQkJCQkJ ICAgY2hpbGRyZWwsIHRvcF9wYXJlbnRyYywgbG9ja21vZGUsCi0JCQkJCQkJCQkgICBhcHBp bmZvcyk7CisJCQkJCQkJCQkgICBjaGlsZHJlbCk7CisJCX0KKwl9CiAKLQkJLyogQ2xvc2Ug Y2hpbGQgcmVsYXRpb24sIGJ1dCBrZWVwIGxvY2tzICovCi0JCXRhYmxlX2Nsb3NlKGNoaWxk cmVsLCBOb0xvY2spOworCS8qCisJICogQWRkIGp1bmsgY29sdW1ucyBuZWVkZWQgYnkgdGhl IHJvdyBtYXJrIGlmIGFueSBhbmQgYWxzbyBhZGQgdGhlCisJICogcmVsZXZhbnQgZXhwcmVz c2lvbnMgdG8gdGhlIHJvb3QgcGFyZW50J3MgcmVsdGFyZ2V0LgorCSAqLworCWlmIChyb290 cmMpCisJeworCQlMaXN0ICAgKnRsaXN0ID0gYWRkX3Jvd21hcmtfanVua19jb2x1bW5zKHJv b3QsIHJvb3RyYyk7CisKKwkJYnVpbGRfYmFzZV9yZWxfdGxpc3RzKHJvb3QsIHRsaXN0KTsK IAl9CiB9CiAKIC8qCi0gKiBleHBhbmRfc2luZ2xlX2luaGVyaXRhbmNlX2NoaWxkCi0gKgkJ QnVpbGQgYSBSYW5nZVRibEVudHJ5IGFuZCBhbiBBcHBlbmRSZWxJbmZvLCBpZiBhcHByb3By aWF0ZSwgcGx1cwotICoJCW1heWJlIGEgUGxhblJvd01hcmsuCisgKiBhZGRfaW5oZXJpdGFu Y2VfY2hpbGRfcmVsCisgKgkJQnVpbGQgYSBSYW5nZVRibEVudHJ5LCBhbiBBcHBlbmRSZWxJ bmZvLCBhIFBsYW5Sb3dNYXJrLCBhbmQgZmluYWxseQorICoJCWEgUmVsT3B0SW5mbyBmb3Ig YW4gaW5oZXJpdGFuY2UgY2hpbGQgcmVsYXRpb24uCiAgKgotICogV2Ugbm93IGV4cGFuZCB0 aGUgcGFydGl0aW9uIGhpZXJhcmNoeSBsZXZlbCBieSBsZXZlbCwgY3JlYXRpbmcgYQotICog Y29ycmVzcG9uZGluZyBoaWVyYXJjaHkgb2YgQXBwZW5kUmVsSW5mb3MgYW5kIFJlbE9wdElu Zm9zLCB3aGVyZSBlYWNoCi0gKiBwYXJ0aXRpb25lZCBkZXNjZW5kYW50IGFjdHMgYXMgYSBw YXJlbnQgb2YgaXRzIGltbWVkaWF0ZSBwYXJ0aXRpb25zLgotICogKFRoaXMgaXMgYSBkaWZm ZXJlbmNlIGZyb20gd2hhdCBvbGRlciB2ZXJzaW9ucyBvZiBQb3N0Z3JlU1FMIGRpZCBhbmQg d2hhdAotICogaXMgc3RpbGwgZG9uZSBpbiB0aGUgY2FzZSBvZiB0YWJsZSBpbmhlcml0YW5j ZSBmb3IgdW5wYXJ0aXRpb25lZCB0YWJsZXMsCi0gKiB3aGVyZSB0aGUgaGllcmFyY2h5IGlz IGZsYXR0ZW5lZCBkdXJpbmcgUlRFIGV4cGFuc2lvbi4pCisgKiBUaGUgcmV0dXJuIHZhbHVl IGlzIHRoZSBSZWxPcHRJbmZvIHRoYXQncyBhZGRlZC4KICAqCiAgKiBQbGFuUm93TWFya3Mg c3RpbGwgY2FycnkgdGhlIHRvcC1wYXJlbnQncyBSVEksIGFuZCB0aGUgdG9wLXBhcmVudCdz CiAgKiBhbGxNYXJrVHlwZXMgZmllbGQgc3RpbGwgYWNjdW11bGF0ZXMgdmFsdWVzIGZyb20g YWxsIGRlc2NlbmRlbnRzLgogICoKICAqICJwYXJlbnRydGUiIGFuZCAicGFyZW50UlRpbmRl eCIgYXJlIGltbWVkaWF0ZSBwYXJlbnQncyBSVEUgYW5kCiAgKiBSVEkuICJ0b3BfcGFyZW50 cmMiIGlzIHRvcCBwYXJlbnQncyBQbGFuUm93TWFyay4KLSAqCi0gKiBUaGUgY2hpbGQgUmFu Z2VUYmxFbnRyeSBhbmQgaXRzIFJUSSBhcmUgcmV0dXJuZWQgaW4gImNoaWxkcnRlX3AiIGFu ZAotICogImNoaWxkUlRpbmRleF9wIiByZXNwLgogICovCi1zdGF0aWMgdm9pZAotZXhwYW5k X3NpbmdsZV9pbmhlcml0YW5jZV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxF bnRyeSAqcGFyZW50cnRlLAotCQkJCQkJCQlJbmRleCBwYXJlbnRSVGluZGV4LCBSZWxhdGlv biBwYXJlbnRyZWwsCi0JCQkJCQkJCVBsYW5Sb3dNYXJrICp0b3BfcGFyZW50cmMsIFJlbGF0 aW9uIGNoaWxkcmVsLAotCQkJCQkJCQlMaXN0ICoqYXBwaW5mb3MsIFJhbmdlVGJsRW50cnkg KipjaGlsZHJ0ZV9wLAotCQkJCQkJCQlJbmRleCAqY2hpbGRSVGluZGV4X3ApCitzdGF0aWMg UmVsT3B0SW5mbyAqCithZGRfaW5oZXJpdGFuY2VfY2hpbGRfcmVsKFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCisJCQkJCQkgIEluZGV4IHBhcmVudFJU aW5kZXgsIFJlbE9wdEluZm8gKnBhcmVudHJlbCwKKwkJCQkJCSAgUGxhblJvd01hcmsgKnRv cF9wYXJlbnRyYywgUmVsYXRpb24gY2hpbGRyZWwsCisJCQkJCQkgIFJhbmdlVGJsRW50cnkg KipjaGlsZHJ0ZV9wLCBJbmRleCAqY2hpbGRSVGluZGV4X3ApCiB7CiAJUXVlcnkJICAgKnBh cnNlID0gcm9vdC0+cGFyc2U7Ci0JT2lkCQkJcGFyZW50T0lEID0gUmVsYXRpb25HZXRSZWxp ZChwYXJlbnRyZWwpOwogCU9pZAkJCWNoaWxkT0lEID0gUmVsYXRpb25HZXRSZWxpZChjaGls ZHJlbCk7CiAJUmFuZ2VUYmxFbnRyeSAqY2hpbGRydGU7CiAJSW5kZXgJCWNoaWxkUlRpbmRl eDsKIAlBcHBlbmRSZWxJbmZvICphcHBpbmZvOworCVJlbE9wdEluZm8gKmNoaWxkcmVsb3B0 OwogCiAJLyoKIAkgKiBCdWlsZCBhbiBSVEUgZm9yIHRoZSBjaGlsZCwgYW5kIGF0dGFjaCB0 byBxdWVyeSdzIHJhbmdldGFibGUgbGlzdC4gV2UKIAkgKiBjb3B5IG1vc3QgZmllbGRzIG9m IHRoZSBwYXJlbnQncyBSVEUsIGJ1dCByZXBsYWNlIHJlbGF0aW9uIE9JRCBhbmQKLQkgKiBy ZWxraW5kLCBhbmQgc2V0IGluaCA9IGZhbHNlLiAgQWxzbywgc2V0IHJlcXVpcmVkUGVybXMg dG8gemVybyBzaW5jZQotCSAqIGFsbCByZXF1aXJlZCBwZXJtaXNzaW9ucyBjaGVja3MgYXJl IGRvbmUgb24gdGhlIG9yaWdpbmFsIFJURS4gTGlrZXdpc2UsCi0JICogc2V0IHRoZSBjaGls ZCdzIHNlY3VyaXR5UXVhbHMgdG8gZW1wdHksIGJlY2F1c2Ugd2Ugb25seSB3YW50IHRvIGFw cGx5Ci0JICogdGhlIHBhcmVudCdzIFJMUyBjb25kaXRpb25zIHJlZ2FyZGxlc3Mgb2Ygd2hh dCBSTFMgcHJvcGVydGllcworCSAqIHJlbGtpbmQsIGFuZCBzZXQgaW5oIGFwcHJvcHJpYXRl bHkuICBBbHNvLCBzZXQgcmVxdWlyZWRQZXJtcyB0byB6ZXJvCisJICogc2luY2UgYWxsIHJl cXVpcmVkIHBlcm1pc3Npb25zIGNoZWNrcyBhcmUgZG9uZSBvbiB0aGUgb3JpZ2luYWwgUlRF LgorCSAqIExpa2V3aXNlLCBzZXQgdGhlIGNoaWxkJ3Mgc2VjdXJpdHlRdWFscyB0byBlbXB0 eSwgYmVjYXVzZSB3ZSBvbmx5IHdhbnQKKwkgKiB0byBhcHBseSB0aGUgcGFyZW50J3MgUkxT IGNvbmRpdGlvbnMgcmVnYXJkbGVzcyBvZiB3aGF0IFJMUyBwcm9wZXJ0aWVzCiAJICogaW5k aXZpZHVhbCBjaGlsZHJlbiBtYXkgaGF2ZS4gIChUaGlzIGlzIGFuIGludGVudGlvbmFsIGNo b2ljZSB0byBtYWtlCiAJICogaW5oZXJpdGVkIFJMUyB3b3JrIGxpa2UgcmVndWxhciBwZXJt aXNzaW9ucyBjaGVja3MuKSBUaGUgcGFyZW50CiAJICogc2VjdXJpdHlRdWFscyB3aWxsIGJl IHByb3BhZ2F0ZWQgdG8gY2hpbGRyZW4gYWxvbmcgd2l0aCBvdGhlciBiYXNlCkBAIC0zNzAs NDkgKzQ3NSw0MiBAQCBleHBhbmRfc2luZ2xlX2luaGVyaXRhbmNlX2NoaWxkKFBsYW5uZXJJ bmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCiAJKmNoaWxkcnRlX3AgPSBj aGlsZHJ0ZTsKIAljaGlsZHJ0ZS0+cmVsaWQgPSBjaGlsZE9JRDsKIAljaGlsZHJ0ZS0+cmVs a2luZCA9IGNoaWxkcmVsLT5yZF9yZWwtPnJlbGtpbmQ7Ci0JLyogQSBwYXJ0aXRpb25lZCBj aGlsZCB3aWxsIG5lZWQgdG8gYmUgZXhwYW5kZWQgZnVydGhlci4gKi8KLQlpZiAoY2hpbGRP SUQgIT0gcGFyZW50T0lEICYmCi0JCWNoaWxkcnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFS VElUSU9ORURfVEFCTEUpCi0JCWNoaWxkcnRlLT5pbmggPSB0cnVlOwotCWVsc2UKLQkJY2hp bGRydGUtPmluaCA9IGZhbHNlOworCS8qCisJICogQSBwYXJ0aXRpb25lZCBjaGlsZCB3aWxs IG5lZWQgdG8gYmUgZXhwYW5kZWQgYXMgYW4gYXBwZW5kIHBhcmVudAorCSAqIGl0c2VsZiwg c28gc2V0IGl0cyBpbmggdG8gdHJ1ZS4KKwkgKi8KKwljaGlsZHJ0ZS0+aW5oID0gKGNoaWxk cnRlLT5yZWxraW5kID09IFJFTEtJTkRfUEFSVElUSU9ORURfVEFCTEUpOwogCWNoaWxkcnRl LT5yZXF1aXJlZFBlcm1zID0gMDsKIAljaGlsZHJ0ZS0+c2VjdXJpdHlRdWFscyA9IE5JTDsK IAlwYXJzZS0+cnRhYmxlID0gbGFwcGVuZChwYXJzZS0+cnRhYmxlLCBjaGlsZHJ0ZSk7CiAJ Y2hpbGRSVGluZGV4ID0gbGlzdF9sZW5ndGgocGFyc2UtPnJ0YWJsZSk7CiAJKmNoaWxkUlRp bmRleF9wID0gY2hpbGRSVGluZGV4OwogCi0JLyoKLQkgKiBXZSBuZWVkIGFuIEFwcGVuZFJl bEluZm8gaWYgcGF0aHMgd2lsbCBiZSBidWlsdCBmb3IgdGhlIGNoaWxkIFJURS4gSWYKLQkg KiBjaGlsZHJ0ZS0+aW5oIGlzIHRydWUsIHRoZW4gd2UnbGwgYWx3YXlzIG5lZWQgdG8gZ2Vu ZXJhdGUgYXBwZW5kIHBhdGhzCi0JICogZm9yIGl0LiAgSWYgY2hpbGRydGUtPmluaCBpcyBm YWxzZSwgd2UgbXVzdCBzY2FuIGl0IGlmIGl0J3Mgbm90IGEKLQkgKiBwYXJ0aXRpb25lZCB0 YWJsZTsgYnV0IGlmIGl0IGlzIGEgcGFydGl0aW9uZWQgdGFibGUsIHRoZW4gaXQgbmV2ZXIg aGFzCi0JICogYW55IGRhdGEgb2YgaXRzIG93biBhbmQgbmVlZCBub3QgYmUgc2Nhbm5lZC4K LQkgKi8KLQlpZiAoY2hpbGRydGUtPnJlbGtpbmQgIT0gUkVMS0lORF9QQVJUSVRJT05FRF9U QUJMRSB8fCBjaGlsZHJ0ZS0+aW5oKQotCXsKLQkJYXBwaW5mbyA9IG1ha2VfYXBwZW5kX3Jl bF9pbmZvKHBhcmVudHJlbCwgY2hpbGRyZWwsCi0JCQkJCQkJCQkgICBwYXJlbnRSVGluZGV4 LCBjaGlsZFJUaW5kZXgpOwotCQkqYXBwaW5mb3MgPSBsYXBwZW5kKCphcHBpbmZvcywgYXBw aW5mbyk7CisJLyogQ3JlYXRlIGFuIEFwcGVuZFJlbEluZm8gYW5kIGFkZCBpdCB0byBwbGFu bmVyJ3MgZ2xvYmFsIGxpc3QuICovCisJYXBwaW5mbyA9IG1ha2VfYXBwZW5kX3JlbF9pbmZv KHBhcmVudHJlbCwgcGFyZW50cnRlLAorCQkJCQkJCQkgICBSZWxhdGlvbkdldERlc2NyKGNo aWxkcmVsKSwKKwkJCQkJCQkJICAgUmVsYXRpb25HZXRSZWxpZChjaGlsZHJlbCksCisJCQkJ CQkJCSAgIFJlbGF0aW9uR2V0Rm9ybShjaGlsZHJlbCktPnJlbHR5cGUsCisJCQkJCQkJCSAg IGNoaWxkUlRpbmRleCk7CisJcm9vdC0+YXBwZW5kX3JlbF9saXN0ID0gbGFwcGVuZChyb290 LT5hcHBlbmRfcmVsX2xpc3QsIGFwcGluZm8pOwogCi0JCS8qCi0JCSAqIFRyYW5zbGF0ZSB0 aGUgY29sdW1uIHBlcm1pc3Npb25zIGJpdG1hcHMgdG8gdGhlIGNoaWxkJ3MgYXR0bnVtcyAo d2UKLQkJICogaGF2ZSB0byBidWlsZCB0aGUgdHJhbnNsYXRlZF92YXJzIGxpc3QgYmVmb3Jl IHdlIGNhbiBkbyB0aGlzKS4gQnV0Ci0JCSAqIGlmIHRoaXMgaXMgdGhlIHBhcmVudCB0YWJs ZSwgbGVhdmUgY29weU9iamVjdCdzIHJlc3VsdCBhbG9uZS4KLQkJICoKLQkJICogTm90ZTog d2UgbmVlZCB0byBkbyB0aGlzIGV2ZW4gdGhvdWdoIHRoZSBleGVjdXRvciB3b24ndCBydW4g YW55Ci0JCSAqIHBlcm1pc3Npb25zIGNoZWNrcyBvbiB0aGUgY2hpbGQgUlRFLiAgVGhlIGlu c2VydGVkQ29scy91cGRhdGVkQ29scwotCQkgKiBiaXRtYXBzIG1heSBiZSBleGFtaW5lZCBm b3IgdHJpZ2dlci1maXJpbmcgcHVycG9zZXMuCi0JCSAqLwotCQlpZiAoY2hpbGRPSUQgIT0g cGFyZW50T0lEKQotCQl7Ci0JCQljaGlsZHJ0ZS0+c2VsZWN0ZWRDb2xzID0gdHJhbnNsYXRl X2NvbF9wcml2cyhwYXJlbnRydGUtPnNlbGVjdGVkQ29scywKLQkJCQkJCQkJCQkJCQkJIGFw cGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JCQljaGlsZHJ0ZS0+aW5zZXJ0ZWRDb2xzID0g dHJhbnNsYXRlX2NvbF9wcml2cyhwYXJlbnRydGUtPmluc2VydGVkQ29scywKLQkJCQkJCQkJ CQkJCQkJIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JCQljaGlsZHJ0ZS0+dXBkYXRl ZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+dXBkYXRlZENvbHMsCi0J CQkJCQkJCQkJCQkJCWFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7Ci0JCX0KKwkvKgorCSAq IFRyYW5zbGF0ZSB0aGUgY29sdW1uIHBlcm1pc3Npb25zIGJpdG1hcHMgdG8gdGhlIGNoaWxk J3MgYXR0bnVtcyAod2UKKwkgKiBoYXZlIHRvIGJ1aWxkIHRoZSB0cmFuc2xhdGVkX3ZhcnMg bGlzdCBiZWZvcmUgd2UgY2FuIGRvIHRoaXMpLiBCdXQKKwkgKiBpZiB0aGlzIGlzIHRoZSBw YXJlbnQgdGFibGUsIGxlYXZlIGNvcHlPYmplY3QncyByZXN1bHQgYWxvbmUuCisJICoKKwkg KiBOb3RlOiB3ZSBuZWVkIHRvIGRvIHRoaXMgZXZlbiB0aG91Z2ggdGhlIGV4ZWN1dG9yIHdv bid0IHJ1biBhbnkKKwkgKiBwZXJtaXNzaW9ucyBjaGVja3Mgb24gdGhlIGNoaWxkIFJURS4g IFRoZSBpbnNlcnRlZENvbHMvdXBkYXRlZENvbHMKKwkgKiBiaXRtYXBzIG1heSBiZSBleGFt aW5lZCBmb3IgdHJpZ2dlci1maXJpbmcgcHVycG9zZXMuCisJICovCisJaWYgKGNoaWxkcnRl LT5yZWxpZCAhPSBwYXJlbnRydGUtPnJlbGlkKQorCXsKKwkJY2hpbGRydGUtPnNlbGVjdGVk Q29scyA9IHRyYW5zbGF0ZV9jb2xfcHJpdnMocGFyZW50cnRlLT5zZWxlY3RlZENvbHMsCisJ CQkJCQkJCQkJCQkJIGFwcGluZm8tPnRyYW5zbGF0ZWRfdmFycyk7CisJCWNoaWxkcnRlLT5p bnNlcnRlZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+aW5zZXJ0ZWRD b2xzLAorCQkJCQkJCQkJCQkJCSBhcHBpbmZvLT50cmFuc2xhdGVkX3ZhcnMpOworCQljaGls ZHJ0ZS0+dXBkYXRlZENvbHMgPSB0cmFuc2xhdGVfY29sX3ByaXZzKHBhcmVudHJ0ZS0+dXBk YXRlZENvbHMsCisJCQkJCQkJCQkJCQkJYXBwaW5mby0+dHJhbnNsYXRlZF92YXJzKTsKIAl9 CiAKIAkvKgpAQCAtNDQ0LDYgKzU0MiwxNDcgQEAgZXhwYW5kX3NpbmdsZV9pbmhlcml0YW5j ZV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAog CiAJCXJvb3QtPnJvd01hcmtzID0gbGFwcGVuZChyb290LT5yb3dNYXJrcywgY2hpbGRyYyk7 CiAJfQorCisJLyoKKwkgKiBBZGQgdGhlIFJlbE9wdEluZm8uICBFdmVuIHRob3VnaCB3ZSBt YXkgbm90IHJlYWxseSBzY2FuIHRoaXMgcmVsYXRpb24KKwkgKiBmb3IgcmVhc29ucyBzdWNo IGFzIGNvbnRyYWRpY3RvcnkgcXVhbHMsIHdlIHN0aWxsIG5lZWQgdG8gY3JlYXRlIG9uZSwK KwkgKiBiZWNhdXNlIGZvciBldmVyeSBSVEUgaW4gdGhlIHF1ZXJ5J3MgcmFuZ2UgdGFibGUs IHRoZXJlIG11c3QgYmUgYW4KKwkgKiBhY2NvbXBhbnlpbmcgUmVsT3B0SW5mby4KKwkgKi8K KworCS8qIEZpcnN0LCBzdG9yZSB0aGUgUlRFIGFuZCBhcHBpbmZvcyBpbnRvIHBsYW5uZXIg YXJyYXlzLiAqLworCUFzc2VydChyb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRl eF0gPT0gTlVMTCk7CisJcm9vdC0+c2ltcGxlX3J0ZV9hcnJheVtjaGlsZFJUaW5kZXhdID0g Y2hpbGRydGU7CisJQXNzZXJ0KHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbY2hpbGRSVGluZGV4 XSA9PSBOVUxMKTsKKwlyb290LT5hcHBlbmRfcmVsX2FycmF5W2NoaWxkUlRpbmRleF0gPSBh cHBpbmZvOworCisJY2hpbGRyZWxvcHQgPSBidWlsZF9pbmhlcml0YW5jZV9jaGlsZF9yZWwo cm9vdCwgcGFyZW50cmVsLCBjaGlsZFJUaW5kZXgpOworCUFzc2VydChjaGlsZHJlbG9wdCAh PSBOVUxMKTsKKworCXJldHVybiBjaGlsZHJlbG9wdDsKK30KKworLyoKKyAqCWJ1aWxkX2lu aGVyaXRhbmNlX2NoaWxkX3JlbAorICoJCUJ1aWxkIGEgUmVsT3B0SW5mbyBmb3IgY2hpbGQg cmVsYXRpb24gb2YgYW4gaW5oZXJpdGFuY2Ugc2V0CisgKgorICogQWZ0ZXIgY3JlYXRpbmcg dGhlIFJlbE9wdEluZm8gZm9yIHRoZSBnaXZlbiBjaGlsZCBSVCBpbmRleCwgaXQgZ29lcyBv biB0bworICogaW5pdGlhbGl6ZSBzb21lIG9mIGl0cyBmaWVsZHMgYmFzZWQgb24gdGhlIHBh cmVudCBSZWxPcHRJbmZvLgorICoKKyAqIElmIHRoZSBxdWFscyBpbiBiYXNlcmVzdHJpY3Rp bmZvIHR1cm4gb3V0IHRvIGJlIHNlbGYtY29udHJhZGljdG9yeSwKKyAqIFJlbE9wdEluZm8g aXMgbWFya2VkIGR1bW15IGJlZm9yZSByZXR1cm5pbmcuCisgKi8KK3N0YXRpYyBSZWxPcHRJ bmZvICoKK2J1aWxkX2luaGVyaXRhbmNlX2NoaWxkX3JlbChQbGFubmVySW5mbyAqcm9vdCwK KwkJCQkJICAgUmVsT3B0SW5mbyAqcGFyZW50LAorCQkJCQkgICBJbmRleCBjaGlsZFJUaW5k ZXgpCit7CisJUmVsT3B0SW5mbyAqY2hpbGRyZWw7CisJUmFuZ2VUYmxFbnRyeSAqY2hpbGRS VEUgPSByb290LT5zaW1wbGVfcnRlX2FycmF5W2NoaWxkUlRpbmRleF07CisJQXBwZW5kUmVs SW5mbyAqYXBwaW5mbyA9IHJvb3QtPmFwcGVuZF9yZWxfYXJyYXlbY2hpbGRSVGluZGV4XTsK KworCS8qIEJ1aWxkIHRoZSBSZWxPcHRJbmZvLiAqLworCWNoaWxkcmVsID0gYnVpbGRfc2lt cGxlX3JlbChyb290LCBjaGlsZFJUaW5kZXgsIHBhcmVudCk7CisKKwkvKgorCSAqIFByb3Bh Z2F0ZSBsYXRlcmFsX3JlbGlkcyBhbmQgbGF0ZXJhbF9yZWZlcmVuY2VycyBmcm9tIGFwcGVu ZHJlbAorCSAqIHBhcmVudCByZWxzIHRvIHRoZWlyIGNoaWxkIHJlbHMuICBXZSBpbnRlbnRp b25hbGx5IGdpdmUgZWFjaCBjaGlsZCByZWwKKwkgKiB0aGUgc2FtZSBtaW5pbXVtIHBhcmFt ZXRlcml6YXRpb24sIGV2ZW4gdGhvdWdoIGl0J3MgcXVpdGUgcG9zc2libGUgdGhhdAorCSAq IHNvbWUgZG9uJ3QgcmVmZXJlbmNlIGFsbCB0aGUgbGF0ZXJhbCByZWxzLiAgVGhpcyBpcyBi ZWNhdXNlIGFueSBhcHBlbmQKKwkgKiBwYXRoIGZvciB0aGUgcGFyZW50IHdpbGwgaGF2ZSB0 byBoYXZlIHRoZSBzYW1lIHBhcmFtZXRlcml6YXRpb24gZm9yCisJICogZXZlcnkgY2hpbGQg YW55d2F5LCBhbmQgdGhlcmUncyBubyB2YWx1ZSBpbiBmb3JjaW5nIGV4dHJhCisJICogcmVw YXJhbWV0ZXJpemVfcGF0aCgpIGNhbGxzLiAgU2ltaWxhcmx5LCBhIGxhdGVyYWwgcmVmZXJl bmNlIHRvIHRoZQorCSAqIHBhcmVudCBwcmV2ZW50cyB1c2Ugb2Ygb3RoZXJ3aXNlLW1vdmFi bGUgam9pbiByZWxzIGZvciBlYWNoIGNoaWxkLgorCSAqCisJICogSXQncyBwb3NzaWJsZSBm b3IgY2hpbGQgcmVscyB0byBoYXZlIHRoZWlyIG93biBjaGlsZHJlbiwgaW4gd2hpY2ggY2Fz ZQorCSAqIHRoZSB0b3Btb3N0IHBhcmVudCdzIGxhdGVyYWwgaW5mbyBtdXN0IGJlIHByb3Bh Z2F0ZWQgYWxsIHRoZSB3YXkgZG93bi4KKwkgKiBUaGF0J3MgZW5zdXJlZCBieSBoYXZpbmcg Y2hpbGRyZWwgYmUgZXhwYW5kZWQgdmlhIHRoaXMgc2FtZSBwYXRoLgorCSAqLworCWNoaWxk cmVsLT5kaXJlY3RfbGF0ZXJhbF9yZWxpZHMgPSBwYXJlbnQtPmRpcmVjdF9sYXRlcmFsX3Jl bGlkczsKKwljaGlsZHJlbC0+bGF0ZXJhbF9yZWxpZHMgPSBwYXJlbnQtPmxhdGVyYWxfcmVs aWRzOworCWNoaWxkcmVsLT5sYXRlcmFsX3JlZmVyZW5jZXJzID0gcGFyZW50LT5sYXRlcmFs X3JlZmVyZW5jZXJzOworCisJLyoKKwkgKiBXZSBoYXZlIHRvIGNvcHkgdGhlIHBhcmVudCdz IHF1YWxzIHRvIHRoZSBjaGlsZCwgd2l0aCBhcHByb3ByaWF0ZQorCSAqIHN1YnN0aXR1dGlv biBvZiB2YXJpYWJsZXMuICBIb3dldmVyLCBvbmx5IHRoZSBiYXNlcmVzdHJpY3RpbmZvCisJ ICogcXVhbHMgYXJlIG5lZWRlZCBiZWZvcmUgd2UgY2FuIGNoZWNrIGZvciBjb25zdHJhaW50 IGV4Y2x1c2lvbjsgc28KKwkgKiBkbyB0aGF0IGZpcnN0IGFuZCB0aGVuIGNoZWNrIHRvIHNl ZSBpZiB3ZSBjYW4gZGlzcmVnYXJkIHRoaXMgY2hpbGQuCisJICovCisJaWYgKCFhcHBseV9j aGlsZF9iYXNlcXVhbHMocm9vdCwgcGFyZW50LCBjaGlsZHJlbCwgY2hpbGRSVEUsIGFwcGlu Zm8pIHx8CisJCXJlbGF0aW9uX2V4Y2x1ZGVkX2J5X2NvbnN0cmFpbnRzKHJvb3QsIGNoaWxk cmVsLCBjaGlsZFJURSkpCisJeworCQkvKgorCQkgKiBTb21lIHJlc3RyaWN0aW9uIGNsYXVz ZSByZWR1Y2VkIHRvIGNvbnN0YW50IEZBTFNFIG9yIE5VTEwgYWZ0ZXIKKwkJICogc3Vic3Rp dHV0aW9uLCBzbyB0aGlzIGNoaWxkIG5lZWQgbm90IGJlIHNjYW5uZWQuCisJCSAqLworCQlz ZXRfZHVtbXlfcmVsX3BhdGhsaXN0KGNoaWxkcmVsKTsKKwl9CisKKwlyZXR1cm4gY2hpbGRy ZWw7Cit9CisKKy8qCisgKiBhZGRfcm93bWFya19qdW5rX2NvbHVtbnMKKyAqIAkJQWRkIG5l Y2Vzc2FyeSBqdW5rIGNvbHVtbnMgZm9yIHJvd21hcmtlZCBpbmhlcml0YW5jZSBwYXJlbnQg cmVsLgorICoKKyAqIFRoZXNlIHZhbHVlcyBhcmUgbmVlZGVkIGZvciBsb2NraW5nIG9mIHJl bHMgc2VsZWN0ZWQgRk9SIFVQREFURS9TSEFSRSwgYW5kCisgKiB0byBkbyBFdmFsUGxhblF1 YWwgcmVjaGVja2luZy4gIFNlZSBjb21tZW50cyBmb3IgUGxhblJvd01hcmsgaW4KKyAqIHBs YW5ub2Rlcy5oLgorICovCitzdGF0aWMgTGlzdCAqCithZGRfcm93bWFya19qdW5rX2NvbHVt bnMoUGxhbm5lckluZm8gKnJvb3QsIFBsYW5Sb3dNYXJrICpyYykKK3sKKwlMaXN0ICAgKnRs aXN0ID0gcm9vdC0+cHJvY2Vzc2VkX3RsaXN0OworCVZhcgkJICAgKnZhcjsKKwljaGFyCQly ZXNuYW1lWzMyXTsKKwlUYXJnZXRFbnRyeSAqdGxlOworCisJaWYgKHJjLT5hbGxNYXJrVHlw ZXMgJiB+KDEgPDwgUk9XX01BUktfQ09QWSkpCisJeworCQkvKiBOZWVkIHRvIGZldGNoIFRJ RCAqLworCQl2YXIgPSBtYWtlVmFyKHJjLT5ydGksCisJCQkJCSAgU2VsZkl0ZW1Qb2ludGVy QXR0cmlidXRlTnVtYmVyLAorCQkJCQkgIFRJRE9JRCwKKwkJCQkJICAtMSwKKwkJCQkJICBJ bnZhbGlkT2lkLAorCQkJCQkgIDApOworCQlzbnByaW50ZihyZXNuYW1lLCBzaXplb2YocmVz bmFtZSksICJjdGlkJXUiLCByYy0+cm93bWFya0lkKTsKKwkJdGxlID0gbWFrZVRhcmdldEVu dHJ5KChFeHByICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEsCisJ CQkJCQkJICBwc3RyZHVwKHJlc25hbWUpLAorCQkJCQkJCSAgdHJ1ZSk7CisJCXRsaXN0ID0g bGFwcGVuZCh0bGlzdCwgdGxlKTsKKwl9CisJaWYgKHJjLT5hbGxNYXJrVHlwZXMgJiAoMSA8 PCBST1dfTUFSS19DT1BZKSkKKwl7CisJCS8qIE5lZWQgdGhlIHdob2xlIHJvdyBhcyBhIGp1 bmsgdmFyICovCisJCXZhciA9IG1ha2VXaG9sZVJvd1Zhcihyb290LT5zaW1wbGVfcnRlX2Fy cmF5W3JjLT5ydGldLAorCQkJCQkJCSAgcmMtPnJ0aSwKKwkJCQkJCQkgIDAsCisJCQkJCQkJ ICBmYWxzZSk7CisJCXNucHJpbnRmKHJlc25hbWUsIHNpemVvZihyZXNuYW1lKSwgIndob2xl cm93JXUiLCByYy0+cm93bWFya0lkKTsKKwkJdGxlID0gbWFrZVRhcmdldEVudHJ5KChFeHBy ICopIHZhciwKKwkJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0KSArIDEsCisJCQkJCQkJICBw c3RyZHVwKHJlc25hbWUpLAorCQkJCQkJCSAgdHJ1ZSk7CisJCXRsaXN0ID0gbGFwcGVuZCh0 bGlzdCwgdGxlKTsKKwl9CisKKwkvKiBGb3IgaW5oZXJpdGFuY2UgY2FzZXMsIGFsd2F5cyBm ZXRjaCB0aGUgdGFibGVvaWQgdG9vLiAqLworCXZhciA9IG1ha2VWYXIocmMtPnJ0aSwKKwkJ CQkgIFRhYmxlT2lkQXR0cmlidXRlTnVtYmVyLAorCQkJCSAgT0lET0lELAorCQkJCSAgLTEs CisJCQkJICBJbnZhbGlkT2lkLAorCQkJCSAgMCk7CisJc25wcmludGYocmVzbmFtZSwgc2l6 ZW9mKHJlc25hbWUpLCAidGFibGVvaWQldSIsIHJjLT5yb3dtYXJrSWQpOworCXRsZSA9IG1h a2VUYXJnZXRFbnRyeSgoRXhwciAqKSB2YXIsCisJCQkJCQkgIGxpc3RfbGVuZ3RoKHRsaXN0 KSArIDEsCisJCQkJCQkgIHBzdHJkdXAocmVzbmFtZSksCisJCQkJCQkgIHRydWUpOworCXRs aXN0ID0gbGFwcGVuZCh0bGlzdCwgdGxlKTsKKworCXJldHVybiB0bGlzdDsKIH0KIAogLyoK QEAgLTU5Nyw3ICs4MzYsNyBAQCBjcmVhdGVfaW5oZXJpdGVkX3RhcmdldF9jaGlsZF9yb290 KFBsYW5uZXJJbmZvICpyb290LCBBcHBlbmRSZWxJbmZvICphcHBpbmZvKQogCSAqIGNvbHVt biwgZmlsbGluZyBwbGFjZWhvbGRlciBlbnRyaWVzIGZvciBkcm9wcGVkIGNvbHVtbnMsIGV0 Yy4sIHVzaW5nCiAJICogdGhlIGNoaWxkJ3MgVHVwbGVEZXNjLgogCSAqLwotCXRsaXN0ID0g cHJlcHJvY2Vzc190YXJnZXRsaXN0KHN1YnJvb3QpOworCXRsaXN0ID0gcHJlcHJvY2Vzc190 YXJnZXRsaXN0KHN1YnJvb3QsIHRydWUpOwogCXN1YnJvb3QtPnByb2Nlc3NlZF90bGlzdCA9 IHRsaXN0OwogCiAJLyoKQEAgLTYxOSwzICs4NTgsMTMxIEBAIGNyZWF0ZV9pbmhlcml0ZWRf dGFyZ2V0X2NoaWxkX3Jvb3QoUGxhbm5lckluZm8gKnJvb3QsIEFwcGVuZFJlbEluZm8gKmFw cGluZm8pCiAKIAlyZXR1cm4gc3Vicm9vdDsKIH0KKworLyoKKyAqIGFwcGx5X2NoaWxkX2Jh c2VxdWFscworICoJCVBvcHVsYXRlIGNoaWxkcmVsJ3MgcXVhbHMgYmFzZWQgb24gcmVsJ3Mg cXVhbHMsIHRyYW5zbGF0aW5nIHRoZW0gdXNpbmcKKyAqCQlhcHBpbmZvLgorICoKKyAqIElm IGFueSBvZiB0aGUgcmVzdWx0aW5nIGNsYXVzZXMgZXZhbHVhdGUgdG8gZmFsc2Ugb3IgTlVM TCwgd2UgcmV0dXJuIGZhbHNlCisgKiBhbmQgZG9uJ3QgYXBwbHkgYW55IHF1YWxzLiAgQ2Fs bGVyIGNhbiBtYXJrIHRoZSByZWxhdGlvbiBhcyBhIGR1bW15IHJlbCBpbgorICogdGhpcyBj YXNlLCBzaW5jZSBpdCBuZWVkbid0IGJlIHNjYW5uZWQuCisgKgorICogSWYgYW55IHJlc3Vs dGluZyBjbGF1c2VzIGV2YWx1YXRlIHRvIHRydWUsIHRoZXkncmUgdW5uZWNlc3NhcnkgYW5k IHdlIGRvbid0CisgKiBhcHBseSB0aGVuLgorICovCitzdGF0aWMgYm9vbAorYXBwbHlfY2hp bGRfYmFzZXF1YWxzKFBsYW5uZXJJbmZvICpyb290LCBSZWxPcHRJbmZvICpyZWwsCisJCQkJ CSAgUmVsT3B0SW5mbyAqY2hpbGRyZWwsIFJhbmdlVGJsRW50cnkgKmNoaWxkUlRFLAorCQkJ CQkgIEFwcGVuZFJlbEluZm8gKmFwcGluZm8pCit7CisJTGlzdAkgICAqY2hpbGRxdWFsczsK KwlJbmRleAkJY3FfbWluX3NlY3VyaXR5OworCUxpc3RDZWxsICAgKmxjOworCisJLyoKKwkg KiBUaGUgY2hpbGQgcmVsJ3MgdGFyZ2V0bGlzdCBtaWdodCBjb250YWluIG5vbi1WYXIgZXhw cmVzc2lvbnMsIHdoaWNoCisJICogbWVhbnMgdGhhdCBzdWJzdGl0dXRpb24gaW50byB0aGUg cXVhbHMgY291bGQgcHJvZHVjZSBvcHBvcnR1bml0aWVzIGZvcgorCSAqIGNvbnN0LXNpbXBs aWZpY2F0aW9uLCBhbmQgcGVyaGFwcyBldmVuIHBzZXVkb2NvbnN0YW50IHF1YWxzLiBUaGVy ZWZvcmUsCisJICogdHJhbnNmb3JtIGVhY2ggUmVzdHJpY3RJbmZvIHNlcGFyYXRlbHkgdG8g c2VlIGlmIGl0IHJlZHVjZXMgdG8gYQorCSAqIGNvbnN0YW50IG9yIHBzZXVkb2NvbnN0YW50 LiAgKFdlIG11c3QgcHJvY2VzcyB0aGVtIHNlcGFyYXRlbHkgdG8ga2VlcAorCSAqIHRyYWNr IG9mIHRoZSBzZWN1cml0eSBsZXZlbCBvZiBlYWNoIHF1YWwuKQorCSAqLworCWNoaWxkcXVh bHMgPSBOSUw7CisJY3FfbWluX3NlY3VyaXR5ID0gVUlOVF9NQVg7CisJZm9yZWFjaChsYywg cmVsLT5iYXNlcmVzdHJpY3RpbmZvKQorCXsKKwkJUmVzdHJpY3RJbmZvICpyaW5mbyA9IChS ZXN0cmljdEluZm8gKikgbGZpcnN0KGxjKTsKKwkJTm9kZQkgICAqY2hpbGRxdWFsOworCQlM aXN0Q2VsbCAgICpsYzI7CisKKwkJQXNzZXJ0KElzQShyaW5mbywgUmVzdHJpY3RJbmZvKSk7 CisJCWNoaWxkcXVhbCA9IGFkanVzdF9hcHBlbmRyZWxfYXR0cnMocm9vdCwKKwkJCQkJCQkJ CQkgICAoTm9kZSAqKSByaW5mby0+Y2xhdXNlLAorCQkJCQkJCQkJCSAgIDEsICZhcHBpbmZv KTsKKwkJY2hpbGRxdWFsID0gZXZhbF9jb25zdF9leHByZXNzaW9ucyhyb290LCBjaGlsZHF1 YWwpOworCQkvKiBjaGVjayBmb3IgZmxhdC1vdXQgY29uc3RhbnQgKi8KKwkJaWYgKGNoaWxk cXVhbCAmJiBJc0EoY2hpbGRxdWFsLCBDb25zdCkpCisJCXsKKwkJCWlmICgoKENvbnN0ICop IGNoaWxkcXVhbCktPmNvbnN0aXNudWxsIHx8CisJCQkJIURhdHVtR2V0Qm9vbCgoKENvbnN0 ICopIGNoaWxkcXVhbCktPmNvbnN0dmFsdWUpKQorCQkJeworCQkJCS8qIFJlc3RyaWN0aW9u IHJlZHVjZXMgdG8gY29uc3RhbnQgRkFMU0Ugb3IgTlVMTCAqLworCQkJCXJldHVybiBmYWxz ZTsKKwkJCX0KKwkJCS8qIFJlc3RyaWN0aW9uIHJlZHVjZXMgdG8gY29uc3RhbnQgVFJVRSwg c28gZHJvcCBpdCAqLworCQkJY29udGludWU7CisJCX0KKwkJLyogbWlnaHQgaGF2ZSBnb3R0 ZW4gYW4gQU5EIGNsYXVzZSwgaWYgc28gZmxhdHRlbiBpdCAqLworCQlmb3JlYWNoKGxjMiwg bWFrZV9hbmRzX2ltcGxpY2l0KChFeHByICopIGNoaWxkcXVhbCkpCisJCXsKKwkJCU5vZGUJ ICAgKm9uZWNxID0gKE5vZGUgKikgbGZpcnN0KGxjMik7CisJCQlib29sCQlwc2V1ZG9jb25z dGFudDsKKworCQkJLyogY2hlY2sgZm9yIHBzZXVkb2NvbnN0YW50IChubyBWYXJzIG9yIHZv bGF0aWxlIGZ1bmN0aW9ucykgKi8KKwkJCXBzZXVkb2NvbnN0YW50ID0KKwkJCQkhY29udGFp bl92YXJzX29mX2xldmVsKG9uZWNxLCAwKSAmJgorCQkJCSFjb250YWluX3ZvbGF0aWxlX2Z1 bmN0aW9ucyhvbmVjcSk7CisJCQlpZiAocHNldWRvY29uc3RhbnQpCisJCQl7CisJCQkJLyog dGVsbCBjcmVhdGVwbGFuLmMgdG8gY2hlY2sgZm9yIGdhdGluZyBxdWFscyAqLworCQkJCXJv b3QtPmhhc1BzZXVkb0NvbnN0YW50UXVhbHMgPSB0cnVlOworCQkJfQorCQkJLyogcmVjb25z dGl0dXRlIFJlc3RyaWN0SW5mbyB3aXRoIGFwcHJvcHJpYXRlIHByb3BlcnRpZXMgKi8KKwkJ CWNoaWxkcXVhbHMgPSBsYXBwZW5kKGNoaWxkcXVhbHMsCisJCQkJCQkJCSBtYWtlX3Jlc3Ry aWN0aW5mbygoRXhwciAqKSBvbmVjcSwKKwkJCQkJCQkJCQkJCSAgIHJpbmZvLT5pc19wdXNo ZWRfZG93biwKKwkJCQkJCQkJCQkJCSAgIHJpbmZvLT5vdXRlcmpvaW5fZGVsYXllZCwKKwkJ CQkJCQkJCQkJCSAgIHBzZXVkb2NvbnN0YW50LAorCQkJCQkJCQkJCQkJICAgcmluZm8tPnNl Y3VyaXR5X2xldmVsLAorCQkJCQkJCQkJCQkJICAgTlVMTCwgTlVMTCwgTlVMTCkpOworCQkJ LyogdHJhY2sgbWluaW11bSBzZWN1cml0eSBsZXZlbCBhbW9uZyBjaGlsZCBxdWFscyAqLwor CQkJY3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgcmluZm8tPnNlY3Vy aXR5X2xldmVsKTsKKwkJfQorCX0KKworCS8qCisJICogSW4gYWRkaXRpb24gdG8gdGhlIHF1 YWxzIGluaGVyaXRlZCBmcm9tIHRoZSBwYXJlbnQsIHdlIG1pZ2h0IGhhdmUKKwkgKiBzZWN1 cml0eVF1YWxzIGFzc29jaWF0ZWQgd2l0aCB0aGlzIHBhcnRpY3VsYXIgY2hpbGQgbm9kZS4g KEN1cnJlbnRseQorCSAqIHRoaXMgY2FuIG9ubHkgaGFwcGVuIGluIGFwcGVuZHJlbHMgb3Jp Z2luYXRpbmcgZnJvbSBVTklPTiBBTEw7CisJICogaW5oZXJpdGFuY2UgY2hpbGQgdGFibGVz IGRvbid0IGhhdmUgdGhlaXIgb3duIHNlY3VyaXR5UXVhbHMsIHNlZQorCSAqIGV4cGFuZF9p bmhlcml0ZWRfcnRlbnRyeSgpLikJUHVsbCBhbnkgc3VjaCBzZWN1cml0eVF1YWxzIHVwIGlu dG8gdGhlCisJICogYmFzZXJlc3RyaWN0aW5mbyBmb3IgdGhlIGNoaWxkLiAgVGhpcyBpcyBz aW1pbGFyIHRvCisJICogcHJvY2Vzc19zZWN1cml0eV9iYXJyaWVyX3F1YWxzKCkgZm9yIHRo ZSBwYXJlbnQgcmVsLCBleGNlcHQgdGhhdCB3ZQorCSAqIGNhbid0IG1ha2UgYW55IGdlbmVy YWwgZGVkdWN0aW9ucyBmcm9tIHN1Y2ggcXVhbHMsIHNpbmNlIHRoZXkgZG9uJ3QKKwkgKiBo b2xkIGZvciB0aGUgd2hvbGUgYXBwZW5kcmVsLgorCSAqLworCWlmIChjaGlsZFJURS0+c2Vj dXJpdHlRdWFscykKKwl7CisJCUluZGV4CQlzZWN1cml0eV9sZXZlbCA9IDA7CisKKwkJZm9y ZWFjaChsYywgY2hpbGRSVEUtPnNlY3VyaXR5UXVhbHMpCisJCXsKKwkJCUxpc3QJICAgKnF1 YWxzZXQgPSAoTGlzdCAqKSBsZmlyc3QobGMpOworCQkJTGlzdENlbGwgICAqbGMyOworCisJ CQlmb3JlYWNoKGxjMiwgcXVhbHNldCkKKwkJCXsKKwkJCQlFeHByCSAgICpxdWFsID0gKEV4 cHIgKikgbGZpcnN0KGxjMik7CisKKwkJCQkvKiBub3QgbGlrZWx5IHRoYXQgd2UnZCBzZWUg Y29uc3RhbnRzIGhlcmUsIHNvIG5vIGNoZWNrICovCisJCQkJY2hpbGRxdWFscyA9IGxhcHBl bmQoY2hpbGRxdWFscywKKwkJCQkJCQkJCSBtYWtlX3Jlc3RyaWN0aW5mbyhxdWFsLAorCQkJ CQkJCQkJCQkJCSAgIHRydWUsIGZhbHNlLCBmYWxzZSwKKwkJCQkJCQkJCQkJCQkgICBzZWN1 cml0eV9sZXZlbCwKKwkJCQkJCQkJCQkJCQkgICBOVUxMLCBOVUxMLCBOVUxMKSk7CisJCQkJ Y3FfbWluX3NlY3VyaXR5ID0gTWluKGNxX21pbl9zZWN1cml0eSwgc2VjdXJpdHlfbGV2ZWwp OworCQkJfQorCQkJc2VjdXJpdHlfbGV2ZWwrKzsKKwkJfQorCQlBc3NlcnQoc2VjdXJpdHlf bGV2ZWwgPD0gcm9vdC0+cXVhbF9zZWN1cml0eV9sZXZlbCk7CisJfQorCisJLyoKKwkgKiBP Sywgd2UndmUgZ290IGFsbCB0aGUgYmFzZXJlc3RyaWN0aW5mbyBxdWFscyBmb3IgdGhpcyBj aGlsZC4KKwkgKi8KKwljaGlsZHJlbC0+YmFzZXJlc3RyaWN0aW5mbyA9IGNoaWxkcXVhbHM7 CisJY2hpbGRyZWwtPmJhc2VyZXN0cmljdF9taW5fc2VjdXJpdHkgPSBjcV9taW5fc2VjdXJp dHk7CisKKwlyZXR1cm4gdHJ1ZTsKK30KZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGlt aXplci91dGlsL3BsYW5jYXQuYyBiL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3BsYW5j YXQuYwppbmRleCBkOGMxOTgxYjRkLi44M2M2YTk1NmI3IDEwMDY0NAotLS0gYS9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvdXRpbC9wbGFuY2F0LmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1p emVyL3V0aWwvcGxhbmNhdC5jCkBAIC0xMDcsMjAgKzEwNywyMCBAQCBzdGF0aWMgdm9pZCBz ZXRfYmFzZXJlbF9wYXJ0aXRpb25fa2V5X2V4cHJzKFJlbGF0aW9uIHJlbGF0aW9uLAogICog aW1wb3J0YW50IGZvciBpdC4KICAqLwogdm9pZAotZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKLQkJ CQkgIFJlbE9wdEluZm8gKnJlbCkKK2dldF9yZWxhdGlvbl9pbmZvKFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpydGUsIFJlbE9wdEluZm8gKnJlbCkKIHsKIAlJbmRleAkJ dmFybm8gPSByZWwtPnJlbGlkOwogCVJlbGF0aW9uCXJlbGF0aW9uOwogCWJvb2wJCWhhc2lu ZGV4OwogCUxpc3QJICAgKmluZGV4aW5mb3MgPSBOSUw7CisJYm9vbAkJaW5ocGFyZW50ID0g cnRlLT5pbmg7CiAKIAkvKgogCSAqIFdlIG5lZWQgbm90IGxvY2sgdGhlIHJlbGF0aW9uIHNp bmNlIGl0IHdhcyBhbHJlYWR5IGxvY2tlZCwgZWl0aGVyIGJ5CiAJICogdGhlIHJld3JpdGVy IG9yIHdoZW4gZXhwYW5kX2luaGVyaXRlZF9ydGVudHJ5KCkgYWRkZWQgaXQgdG8gdGhlIHF1 ZXJ5J3MKIAkgKiByYW5nZXRhYmxlLgogCSAqLwotCXJlbGF0aW9uID0gdGFibGVfb3Blbihy ZWxhdGlvbk9iamVjdElkLCBOb0xvY2spOworCXJlbGF0aW9uID0gaGVhcF9vcGVuKHJ0ZS0+ cmVsaWQsIE5vTG9jayk7CiAKIAkvKiBUZW1wb3JhcnkgYW5kIHVubG9nZ2VkIHJlbGF0aW9u cyBhcmUgaW5hY2Nlc3NpYmxlIGR1cmluZyByZWNvdmVyeS4gKi8KIAlpZiAoIVJlbGF0aW9u TmVlZHNXQUwocmVsYXRpb24pICYmIFJlY292ZXJ5SW5Qcm9ncmVzcygpKQpAQCAtNDQ2LDEx ICs0NDYsMzIgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCBy ZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAlnZXRfcmVsYXRpb25fZm9yZWln bl9rZXlzKHJvb3QsIHJlbCwgcmVsYXRpb24sIGluaHBhcmVudCk7CiAKIAkvKgotCSAqIENv bGxlY3QgaW5mbyBhYm91dCByZWxhdGlvbidzIHBhcnRpdGlvbmluZyBzY2hlbWUsIGlmIGFu eS4gT25seQotCSAqIGluaGVyaXRhbmNlIHBhcmVudHMgbWF5IGJlIHBhcnRpdGlvbmVkLgor CSAqIENvbGxlY3Qgc29tZSBhZGRpdGlvbmFsIGluZm9ybWF0aW9uIGZvciBpbmhlcml0YW5j ZSBwYXJlbnRzLgogCSAqLwotCWlmIChpbmhwYXJlbnQgJiYgcmVsYXRpb24tPnJkX3JlbC0+ cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKQotCQlzZXRfcmVsYXRpb25f cGFydGl0aW9uX2luZm8ocm9vdCwgcmVsLCByZWxhdGlvbik7CisJaWYgKGluaHBhcmVudCkK Kwl7CisJCS8qCisJCSAqIFdlJ2xsIG5lZWQgdGhlIFR1cGxlRGVzYyB3aGVuIGluaXRpYWxp emluZyB0aGUgY2hpbGQgcmVsYXRpb24uCisJCSAqIEEgY29weSBpcyBiZWluZyBtYWRlIGJl Y2F1c2UgY29uY3VycmVudCBjaGFuZ2VzIG1pZ2h0IGRyb3AKKwkJICogdGhlIHJlbGNhY2hl IGVudHJ5LiAgVGhhdCdzIHBvc3NpYmxlIGJlY2F1c2UgQUxURVIgVEFCTEUKKwkJICogY2hp bGRfdGFibGUgTk8gSU5IRVJJVCBwYXJlbnRfdGFibGUgb25seSByZXF1aXJlcyBhbgorCQkg KiBBY2Nlc3NTaGFyZUxvY2sgb24gcGFyZW50X3RhYmxlLgorCQkgKi8KKwkJcmVsLT50dXBk ZXNjID0gQ3JlYXRlVHVwbGVEZXNjQ29weShSZWxhdGlvbkdldERlc2NyKHJlbGF0aW9uKSk7 CisJCXJlbC0+cmVsdHlwZSA9IFJlbGF0aW9uR2V0Rm9ybShyZWxhdGlvbiktPnJlbHR5cGU7 CisKKwkJLyoKKwkJICogSWYgcGFydGl0aW9uZWQsIGFsc28gc2F2ZSB0aGUgaW5mb3JtYXRp b24gb2YgcGFydGl0aW9uaW5nIHNjaGVtZSwKKwkJICogYW5kIHdoZXRoZXIgdGhlIHF1ZXJ5 IHVwZGF0ZXMgYW55IG9mIHRoZSBwYXJ0aXRpb24ga2V5IGNvbHVtbnMuCisJCSAqLworCQlp ZiAocmVsYXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RB QkxFKQorCQl7CisJCQlzZXRfcmVsYXRpb25fcGFydGl0aW9uX2luZm8ocm9vdCwgcmVsLCBy ZWxhdGlvbik7CisJCQlyb290LT5wYXJ0Q29sc1VwZGF0ZWQgfD0gaGFzX3BhcnRpdGlvbl9h dHRycyhyZWxhdGlvbiwKKwkJCQkJCQkJCQkJCQkJIHJ0ZS0+dXBkYXRlZENvbHMsCisJCQkJ CQkJCQkJCQkJCSBOVUxMKTsKKwkJfQorCX0KIAogCXRhYmxlX2Nsb3NlKHJlbGF0aW9uLCBO b0xvY2spOwogCkBAIC00NjAsNyArNDgxLDcgQEAgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5l ckluZm8gKnJvb3QsIE9pZCByZWxhdGlvbk9iamVjdElkLCBib29sIGluaHBhcmVudCwKIAkg KiByZW1vdmluZyBhbiBpbmRleCwgb3IgYWRkaW5nIGEgaHlwb3RoZXRpY2FsIGluZGV4IHRv IHRoZSBpbmRleGxpc3QuCiAJICovCiAJaWYgKGdldF9yZWxhdGlvbl9pbmZvX2hvb2spCi0J CSgqZ2V0X3JlbGF0aW9uX2luZm9faG9vaykgKHJvb3QsIHJlbGF0aW9uT2JqZWN0SWQsIGlu aHBhcmVudCwgcmVsKTsKKwkJKCpnZXRfcmVsYXRpb25faW5mb19ob29rKSAocm9vdCwgcnRl LT5yZWxpZCwgcnRlLT5pbmgsIHJlbCk7CiB9CiAKIC8qCkBAIC0yMDI3LDE2ICsyMDQ4LDIw IEBAIHNldF9yZWxhdGlvbl9wYXJ0aXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVs T3B0SW5mbyAqcmVsLAogCQkJCQkJCVJlbGF0aW9uIHJlbGF0aW9uKQogewogCVBhcnRpdGlv bkRlc2MgcGFydGRlc2M7Ci0JUGFydGl0aW9uS2V5IHBhcnRrZXk7CiAKIAlBc3NlcnQocmVs YXRpb24tPnJkX3JlbC0+cmVsa2luZCA9PSBSRUxLSU5EX1BBUlRJVElPTkVEX1RBQkxFKTsK IAogCXBhcnRkZXNjID0gUmVsYXRpb25HZXRQYXJ0aXRpb25EZXNjKHJlbGF0aW9uKTsKLQlw YXJ0a2V5ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25LZXkocmVsYXRpb24pOwogCXJlbC0+cGFy dF9zY2hlbWUgPSBmaW5kX3BhcnRpdGlvbl9zY2hlbWUocm9vdCwgcmVsYXRpb24pOwogCUFz c2VydChwYXJ0ZGVzYyAhPSBOVUxMICYmIHJlbC0+cGFydF9zY2hlbWUgIT0gTlVMTCk7Ci0J cmVsLT5ib3VuZGluZm8gPSBwYXJ0aXRpb25fYm91bmRzX2NvcHkocGFydGRlc2MtPmJvdW5k aW5mbywgcGFydGtleSk7CiAJcmVsLT5ucGFydHMgPSBwYXJ0ZGVzYy0+bnBhcnRzOworCisJ LyoKKwkgKiBTaW5jZSB3ZSBtdXN0J3ZlIHRha2VuIGEgbG9jayBvbiB0aGUgdGFibGUsIGl0 J3Mgb2theSB0byBzaW1wbHkgY29weQorCSAqIHRoZSBwb2ludGVycyB0byByZWxjYWNoZSBk YXRhIGhlcmUuCisJICovCisJcmVsLT5wYXJ0X29pZHMgPSBwYXJ0ZGVzYy0+b2lkczsKKwly ZWwtPmJvdW5kaW5mbyA9IHBhcnRkZXNjLT5ib3VuZGluZm87CiAJc2V0X2Jhc2VyZWxfcGFy dGl0aW9uX2tleV9leHBycyhyZWxhdGlvbiwgcmVsKTsKIAlyZWwtPnBhcnRpdGlvbl9xdWFs ID0gUmVsYXRpb25HZXRQYXJ0aXRpb25RdWFsKHJlbGF0aW9uKTsKIH0KZGlmZiAtLWdpdCBh L3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL3JlbG5vZGUuYwppbmRleCA0MTMwNTE0OTUyLi5mNmZjYTc1Njc3IDEw MDY0NAotLS0gYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2RlLmMKKysrIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCkBAIC0xMzIsNiArMTMyLDUw IEBAIHNldHVwX2FwcGVuZF9yZWxfYXJyYXkoUGxhbm5lckluZm8gKnJvb3QpCiB9CiAKIC8q CisgKiBleHBhbmRfcGxhbm5lcl9hcnJheXMKKyAqCQlFeHBhbmQgdGhlIFBsYW5uZXJJbmZv IGFycmF5cyBieSBhZGRfc2l6ZSBtZW1iZXJzIGFuZCBpbml0aWFsaXplIHRoZQorICoJCXRo ZQluZXdseSBhZGRlZCBieXRlcyB3aXRoIHplcm8KKyAqLwordm9pZAorZXhwYW5kX3BsYW5u ZXJfYXJyYXlzKFBsYW5uZXJJbmZvICpyb290LCBpbnQgYWRkX3NpemUpCit7CisJaW50CQlu ZXdfc2l6ZTsKKworCUFzc2VydChhZGRfc2l6ZSA+IDApOworCisJbmV3X3NpemUgPSByb290 LT5zaW1wbGVfcmVsX2FycmF5X3NpemUgKyBhZGRfc2l6ZTsKKworCS8qIEV4cGFuZCB2YXJp b3VzIGFycmF5cyBhbmQgMC1pbml0aWFsaXplIGFkZGVkIGJ5dGVzLiAqLworCXJvb3QtPnNp bXBsZV9ydGVfYXJyYXkgPSAoUmFuZ2VUYmxFbnRyeSAqKikKKwkJCQkJCQlyZXBhbGxvYyhy b290LT5zaW1wbGVfcnRlX2FycmF5LAorCQkJCQkJCQkJIHNpemVvZihSYW5nZVRibEVudHJ5 ICopICogbmV3X3NpemUpOworCU1lbVNldChyb290LT5zaW1wbGVfcnRlX2FycmF5ICsgcm9v dC0+c2ltcGxlX3JlbF9hcnJheV9zaXplLAorCQkgICAwLCBzaXplb2YoUmFuZ2VUYmxFbnRy eSAqKSAqIGFkZF9zaXplKTsKKwlyb290LT5zaW1wbGVfcmVsX2FycmF5ID0gKFJlbE9wdElu Zm8gKiopCisJCQkJCQkJCXJlcGFsbG9jKHJvb3QtPnNpbXBsZV9yZWxfYXJyYXksCisJCQkJ CQkJCQkJIHNpemVvZihSZWxPcHRJbmZvICopICogbmV3X3NpemUpOworCU1lbVNldChyb290 LT5zaW1wbGVfcmVsX2FycmF5ICsgcm9vdC0+c2ltcGxlX3JlbF9hcnJheV9zaXplLAorCQkg ICAwLCBzaXplb2YoUmVsT3B0SW5mbyAqKSAqIGFkZF9zaXplKTsKKworCWlmIChyb290LT5h cHBlbmRfcmVsX2FycmF5KQorCXsKKwkJcm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9IChBcHBl bmRSZWxJbmZvICoqKQorCQkJCQkJCQkJcmVwYWxsb2Mocm9vdC0+YXBwZW5kX3JlbF9hcnJh eSwKKwkJCQkJCQkJCSBzaXplb2YoQXBwZW5kUmVsSW5mbyAqKSAqIG5ld19zaXplKTsKKwkJ TWVtU2V0KHJvb3QtPmFwcGVuZF9yZWxfYXJyYXkgKyByb290LT5zaW1wbGVfcmVsX2FycmF5 X3NpemUsCisJCQkgICAwLCBzaXplb2YoQXBwZW5kUmVsSW5mbyAqKSAqIGFkZF9zaXplKTsK Kwl9CisJZWxzZQorCXsKKwkJcm9vdC0+YXBwZW5kX3JlbF9hcnJheSA9IChBcHBlbmRSZWxJ bmZvICoqKQorCQkJCQkJCQkJcGFsbG9jMChzaXplb2YoQXBwZW5kUmVsSW5mbyAqKSAqCisJ CQkJCQkJCQkJCW5ld19zaXplKTsKKwl9CisKKwlyb290LT5zaW1wbGVfcmVsX2FycmF5X3Np emUgPSBuZXdfc2l6ZTsKK30KKworLyoKICAqIGJ1aWxkX3NpbXBsZV9yZWwKICAqCSAgQ29u c3RydWN0IGEgbmV3IFJlbE9wdEluZm8gZm9yIGEgYmFzZSByZWxhdGlvbiBvciAnb3RoZXIn IHJlbGF0aW9uLgogICovCkBAIC0xOTUsNiArMjM5LDcgQEAgYnVpbGRfc2ltcGxlX3JlbChQ bGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJcmVs LT5qb2luaW5mbyA9IE5JTDsKIAlyZWwtPmhhc19lY2xhc3Nfam9pbnMgPSBmYWxzZTsKIAly ZWwtPmNvbnNpZGVyX3BhcnRpdGlvbndpc2Vfam9pbiA9IGZhbHNlOwkvKiBtaWdodCBnZXQg Y2hhbmdlZCBsYXRlciAqLworCXJlbC0+dG9wX3BhcmVudF9yZWxpZHMgPSBOVUxMOwkvKiBt aWdodCBiZSBjaGFuZ2VkIGxhdGVyICovCiAJcmVsLT5wYXJ0X3NjaGVtZSA9IE5VTEw7CiAJ cmVsLT5ucGFydHMgPSAwOwogCXJlbC0+Ym91bmRpbmZvID0gTlVMTDsKQEAgLTIwMyw2ICsy NDgsNyBAQCBidWlsZF9zaW1wbGVfcmVsKFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQs IFJlbE9wdEluZm8gKnBhcmVudCkKIAlyZWwtPnBhcnRleHBycyA9IE5VTEw7CiAJcmVsLT5u dWxsYWJsZV9wYXJ0ZXhwcnMgPSBOVUxMOwogCXJlbC0+cGFydGl0aW9uZWRfY2hpbGRfcmVs cyA9IE5JTDsKKwlyZWwtPmluaF9yb290X3BhcmVudCA9IDA7IC8qIG1pZ2h0IGJlIGNoYW5n ZWQgbGF0ZXIgKi8KIAogCS8qCiAJICogUGFzcyB0b3AgcGFyZW50J3MgcmVsaWRzIGRvd24g dGhlIGluaGVyaXRhbmNlIGhpZXJhcmNoeS4gSWYgdGhlIHBhcmVudApAQCAtMjE2LDE2ICsy NjIsMjUgQEAgYnVpbGRfc2ltcGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlk LCBSZWxPcHRJbmZvICpwYXJlbnQpCiAJCQlyZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0gcGFy ZW50LT50b3BfcGFyZW50X3JlbGlkczsKIAkJZWxzZQogCQkJcmVsLT50b3BfcGFyZW50X3Jl bGlkcyA9IGJtc19jb3B5KHBhcmVudC0+cmVsaWRzKTsKKworCQkvKgorCQkgKiBGb3IgaW5o ZXJpdGFuY2UgY2hpbGQgcmVsYXRpb25zLCB3ZSBhbHNvIHNldCBpbmhfcm9vdF9wYXJlbnQu CisJCSAqIE5vdGUgdGhhdCAncGFyZW50JyBtaWdodCBpdHNlbGYgYmUgYSBjaGlsZCAoYSBz dWItcGFydGl0aW9uZWQKKwkJICogcGFydGl0aW9uKSwgaW4gd2hpY2ggY2FzZSB3ZSBzaW1w bHkgdXNlIGl0cyB2YWx1ZSBvZgorCQkgKiBpbmhfcm9vdF9wYXJlbnQuCisJCSAqLworCQlp ZiAocGFyZW50LT5ydGVraW5kID09IFJURV9SRUxBVElPTikKKwkJCXJlbC0+aW5oX3Jvb3Rf cGFyZW50ID0gcGFyZW50LT5pbmhfcm9vdF9wYXJlbnQgPiAwID8KKwkJCQkJCQkJCQlwYXJl bnQtPmluaF9yb290X3BhcmVudCA6CisJCQkJCQkJCQkJcGFyZW50LT5yZWxpZDsKIAl9Ci0J ZWxzZQotCQlyZWwtPnRvcF9wYXJlbnRfcmVsaWRzID0gTlVMTDsKIAogCS8qIENoZWNrIHR5 cGUgb2YgcnRhYmxlIGVudHJ5ICovCiAJc3dpdGNoIChydGUtPnJ0ZWtpbmQpCiAJewogCQlj YXNlIFJURV9SRUxBVElPTjoKIAkJCS8qIFRhYmxlIC0tLSByZXRyaWV2ZSBzdGF0aXN0aWNz IGZyb20gdGhlIHN5c3RlbSBjYXRhbG9ncyAqLwotCQkJZ2V0X3JlbGF0aW9uX2luZm8ocm9v dCwgcnRlLT5yZWxpZCwgcnRlLT5pbmgsIHJlbCk7CisJCQlnZXRfcmVsYXRpb25faW5mbyhy b290LCBydGUsIHJlbCk7CiAJCQlicmVhazsKIAkJY2FzZSBSVEVfU1VCUVVFUlk6CiAJCWNh c2UgUlRFX0ZVTkNUSU9OOgpAQCAtMjczLDUyICszMjgsNiBAQCBidWlsZF9zaW1wbGVfcmVs KFBsYW5uZXJJbmZvICpyb290LCBpbnQgcmVsaWQsIFJlbE9wdEluZm8gKnBhcmVudCkKIAkJ cm9vdC0+cXVhbF9zZWN1cml0eV9sZXZlbCA9IE1heChyb290LT5xdWFsX3NlY3VyaXR5X2xl dmVsLAogCQkJCQkJCQkJCWxpc3RfbGVuZ3RoKHJ0ZS0+c2VjdXJpdHlRdWFscykpOwogCi0J LyoKLQkgKiBJZiB0aGlzIHJlbCBpcyBhbiBhcHBlbmRyZWwgcGFyZW50LCByZWN1cnNlIHRv IGJ1aWxkICJvdGhlciByZWwiCi0JICogUmVsT3B0SW5mb3MgZm9yIGl0cyBjaGlsZHJlbi4g IFRoZXkgYXJlICJvdGhlciByZWxzIiBiZWNhdXNlIHRoZXkgYXJlCi0JICogbm90IGluIHRo ZSBtYWluIGpvaW4gdHJlZSwgYnV0IHdlIHdpbGwgbmVlZCBSZWxPcHRJbmZvcyB0byBwbGFu IGFjY2VzcwotCSAqIHRvIHRoZW0uCi0JICovCi0JaWYgKHJ0ZS0+aW5oKQotCXsKLQkJTGlz dENlbGwgICAqbDsKLQkJaW50CQkJbnBhcnRzID0gcmVsLT5ucGFydHM7Ci0JCWludAkJCWNu dF9wYXJ0cyA9IDA7Ci0KLQkJaWYgKG5wYXJ0cyA+IDApCi0JCQlyZWwtPnBhcnRfcmVscyA9 IChSZWxPcHRJbmZvICoqKQotCQkJCXBhbGxvYyhzaXplb2YoUmVsT3B0SW5mbyAqKSAqIG5w YXJ0cyk7Ci0KLQkJZm9yZWFjaChsLCByb290LT5hcHBlbmRfcmVsX2xpc3QpCi0JCXsKLQkJ CUFwcGVuZFJlbEluZm8gKmFwcGluZm8gPSAoQXBwZW5kUmVsSW5mbyAqKSBsZmlyc3QobCk7 Ci0JCQlSZWxPcHRJbmZvICpjaGlsZHJlbDsKLQotCQkJLyogYXBwZW5kX3JlbF9saXN0IGNv bnRhaW5zIGFsbCBhcHBlbmQgcmVsczsgaWdub3JlIG90aGVycyAqLwotCQkJaWYgKGFwcGlu Zm8tPnBhcmVudF9yZWxpZCAhPSByZWxpZCkKLQkJCQljb250aW51ZTsKLQotCQkJY2hpbGRy ZWwgPSBidWlsZF9zaW1wbGVfcmVsKHJvb3QsIGFwcGluZm8tPmNoaWxkX3JlbGlkLAotCQkJ CQkJCQkJCXJlbCk7Ci0KLQkJCS8qIE5vdGhpbmcgbW9yZSB0byBkbyBmb3IgYW4gdW5wYXJ0 aXRpb25lZCB0YWJsZS4gKi8KLQkJCWlmICghcmVsLT5wYXJ0X3NjaGVtZSkKLQkJCQljb250 aW51ZTsKLQotCQkJLyoKLQkJCSAqIFRoZSBvcmRlciBvZiBwYXJ0aXRpb24gT0lEcyBpbiBh cHBlbmRfcmVsX2xpc3QgaXMgdGhlIHNhbWUgYXMKLQkJCSAqIHRoZSBvcmRlciBpbiB0aGUg UGFydGl0aW9uRGVzYywgc28gdGhlIG9yZGVyIG9mIHBhcnRfcmVscyB3aWxsCi0JCQkgKiBh bHNvIG1hdGNoIHRoZSBQYXJ0aXRpb25EZXNjLiAgU2VlIGV4cGFuZF9wYXJ0aXRpb25lZF9y dGVudHJ5LgotCQkJICovCi0JCQlBc3NlcnQoY250X3BhcnRzIDwgbnBhcnRzKTsKLQkJCXJl bC0+cGFydF9yZWxzW2NudF9wYXJ0c10gPSBjaGlsZHJlbDsKLQkJCWNudF9wYXJ0cysrOwot CQl9Ci0KLQkJLyogV2Ugc2hvdWxkIGhhdmUgc2VlbiBhbGwgdGhlIGNoaWxkIHBhcnRpdGlv bnMuICovCi0JCUFzc2VydChjbnRfcGFydHMgPT0gbnBhcnRzKTsKLQl9Ci0KIAlyZXR1cm4g cmVsOwogfQogCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBy dW5lLmMgYi9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXggOGM5 NzIxOTM1ZC4uNDcyYTZjZDMzMSAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9u aW5nL3BhcnRwcnVuZS5jCisrKyBiL3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1 bmUuYwpAQCAtNDUsNiArNDUsOCBAQAogI2luY2x1ZGUgIm5vZGVzL21ha2VmdW5jcy5oIgog I2luY2x1ZGUgIm5vZGVzL25vZGVGdW5jcy5oIgogI2luY2x1ZGUgIm9wdGltaXplci9hcHBl bmRpbmZvLmgiCisjaW5jbHVkZSAib3B0aW1pemVyL2NsYXVzZXMuaCIKKyNpbmNsdWRlICJv cHRpbWl6ZXIvY29zdC5oIgogI2luY2x1ZGUgIm9wdGltaXplci9vcHRpbWl6ZXIuaCIKICNp bmNsdWRlICJvcHRpbWl6ZXIvcGF0aG5vZGUuaCIKICNpbmNsdWRlICJwYXJ0aXRpb25pbmcv cGFydHBydW5lLmgiCkBAIC00MzMsMTcgKzQzNSwyMyBAQCBtYWtlX3BhcnRpdGlvbmVkcmVs X3BydW5laW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcGFyZW50cmVsLAog CQkgKiBpcywgbm90IHBydW5lZCBhbHJlYWR5KS4KIAkJICovCiAJCXN1YnBsYW5fbWFwID0g KGludCAqKSBwYWxsb2MobnBhcnRzICogc2l6ZW9mKGludCkpOworCQltZW1zZXQoc3VicGxh bl9tYXAsIC0xLCBucGFydHMgKiBzaXplb2YoaW50KSk7CiAJCXN1YnBhcnRfbWFwID0gKGlu dCAqKSBwYWxsb2MobnBhcnRzICogc2l6ZW9mKGludCkpOworCQltZW1zZXQoc3VicGFydF9t YXAsIC0xLCBucGFydHMgKiBzaXplb2YoaW50KSk7CiAJCXByZXNlbnRfcGFydHMgPSBOVUxM OwogCiAJCWZvciAoaSA9IDA7IGkgPCBucGFydHM7IGkrKykKIAkJewogCQkJUmVsT3B0SW5m byAqcGFydHJlbCA9IHN1YnBhcnQtPnBhcnRfcmVsc1tpXTsKLQkJCWludAkJCXN1YnBsYW5p ZHggPSByZWxpZF9zdWJwbGFuX21hcFtwYXJ0cmVsLT5yZWxpZF0gLSAxOwotCQkJaW50CQkJ c3VicGFydGlkeCA9IHJlbGlkX3N1YnBhcnRfbWFwW3BhcnRyZWwtPnJlbGlkXSAtIDE7CisJ CQlpbnQJCQlzdWJwbGFuaWR4OworCQkJaW50CQkJc3VicGFydGlkeDsKIAotCQkJc3VicGxh bl9tYXBbaV0gPSBzdWJwbGFuaWR4OwotCQkJc3VicGFydF9tYXBbaV0gPSBzdWJwYXJ0aWR4 OworCQkJLyogU2tpcCBwcm9jZXNzaW5nIHBydW5lZCBwYXJ0aXRpb25zLiAqLworCQkJaWYg KHBhcnRyZWwgPT0gTlVMTCkKKwkJCQljb250aW51ZTsKKworCQkJc3VicGxhbl9tYXBbaV0g PSBzdWJwbGFuaWR4ID0gcmVsaWRfc3VicGxhbl9tYXBbcGFydHJlbC0+cmVsaWRdIC0gMTsK KwkJCXN1YnBhcnRfbWFwW2ldID0gc3VicGFydGlkeCA9IHJlbGlkX3N1YnBhcnRfbWFwW3Bh cnRyZWwtPnJlbGlkXSAtIDE7CiAJCQlpZiAoc3VicGxhbmlkeCA+PSAwKQogCQkJewogCQkJ CXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50X3BhcnRzLCBpKTsKQEAg LTUzNywyMyArNTQ1LDIwIEBAIGdlbl9wYXJ0cHJ1bmVfc3RlcHMoUmVsT3B0SW5mbyAqcmVs LCBMaXN0ICpjbGF1c2VzLCBib29sICpjb250cmFkaWN0b3J5KQogCiAvKgogICogcHJ1bmVf YXBwZW5kX3JlbF9wYXJ0aXRpb25zCi0gKgkJUmV0dXJucyBSVCBpbmRleGVzIG9mIHRoZSBt aW5pbXVtIHNldCBvZiBjaGlsZCBwYXJ0aXRpb25zIHdoaWNoIG11c3QKLSAqCQliZSBzY2Fu bmVkIHRvIHNhdGlzZnkgcmVsJ3MgYmFzZXJlc3RyaWN0aW5mbyBxdWFscy4KKyAqCQlSZXR1 cm5zIGluZGV4ZXMgaW50byByZWwtPnBhcnRfcmVscyBvZiB0aGUgbWluaW11bSBzZXQgb2Yg Y2hpbGQKKyAqCQlwYXJ0aXRpb25zIHdoaWNoIG11c3QgYmUgc2Nhbm5lZCB0byBzYXRpc2Z5 IHJlbCdzIGJhc2VyZXN0cmljdGluZm8KKyAqCQlxdWFscy4KICAqCiAgKiBDYWxsZXJzIG11 c3QgZW5zdXJlIHRoYXQgJ3JlbCcgaXMgYSBwYXJ0aXRpb25lZCB0YWJsZS4KICAqLwotUmVs aWRzCitCaXRtYXBzZXQgKgogcHJ1bmVfYXBwZW5kX3JlbF9wYXJ0aXRpb25zKFJlbE9wdElu Zm8gKnJlbCkKIHsKLQlSZWxpZHMJCXJlc3VsdDsKIAlMaXN0CSAgICpjbGF1c2VzID0gcmVs LT5iYXNlcmVzdHJpY3RpbmZvOwogCUxpc3QJICAgKnBydW5pbmdfc3RlcHM7CiAJYm9vbAkJ Y29udHJhZGljdG9yeTsKIAlQYXJ0aXRpb25QcnVuZUNvbnRleHQgY29udGV4dDsKLQlCaXRt YXBzZXQgICpwYXJ0aW5kZXhlczsKLQlpbnQJCQlpOwogCi0JQXNzZXJ0KGNsYXVzZXMgIT0g TklMKTsKIAlBc3NlcnQocmVsLT5wYXJ0X3NjaGVtZSAhPSBOVUxMKTsKIAogCS8qIElmIHRo ZXJlIGFyZSBubyBwYXJ0aXRpb25zLCByZXR1cm4gdGhlIGVtcHR5IHNldCAqLwpAQCAtNTYx LDYgKzU2NiwxMyBAQCBwcnVuZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5mbyAq cmVsKQogCQlyZXR1cm4gTlVMTDsKIAogCS8qCisJICogSWYgcHJ1bmluZyBpcyBkaXNhYmxl ZCBvciBpZiB0aGVyZSBhcmUgbm8gY2xhdXNlcyB0byBwcnVuZSB3aXRoLAorCSAqIHJldHVy biBhbGwgcGFydGl0aW9ucy4KKwkgKi8KKwlpZiAoIWVuYWJsZV9wYXJ0aXRpb25fcHJ1bmlu ZyB8fCBjbGF1c2VzID09IE5JTCkKKwkJcmV0dXJuIGJtc19hZGRfcmFuZ2UoTlVMTCwgMCwg cmVsLT5ucGFydHMgLSAxKTsKKworCS8qCiAJICogUHJvY2VzcyBjbGF1c2VzLiAgSWYgdGhl IGNsYXVzZXMgYXJlIGZvdW5kIHRvIGJlIGNvbnRyYWRpY3RvcnksIHdlIGNhbgogCSAqIHJl dHVybiB0aGUgZW1wdHkgc2V0LgogCSAqLwpAQCAtNTg3LDE1ICs1OTksNyBAQCBwcnVuZV9h cHBlbmRfcmVsX3BhcnRpdGlvbnMoUmVsT3B0SW5mbyAqcmVsKQogCWNvbnRleHQuZXZhbGV4 ZWNwYXJhbXMgPSBmYWxzZTsKIAogCS8qIEFjdHVhbCBwcnVuaW5nIGhhcHBlbnMgaGVyZS4g Ki8KLQlwYXJ0aW5kZXhlcyA9IGdldF9tYXRjaGluZ19wYXJ0aXRpb25zKCZjb250ZXh0LCBw cnVuaW5nX3N0ZXBzKTsKLQotCS8qIEFkZCBzZWxlY3RlZCBwYXJ0aXRpb25zJyBSVCBpbmRl eGVzIHRvIHJlc3VsdC4gKi8KLQlpID0gLTE7Ci0JcmVzdWx0ID0gTlVMTDsKLQl3aGlsZSAo KGkgPSBibXNfbmV4dF9tZW1iZXIocGFydGluZGV4ZXMsIGkpKSA+PSAwKQotCQlyZXN1bHQg PSBibXNfYWRkX21lbWJlcihyZXN1bHQsIHJlbC0+cGFydF9yZWxzW2ldLT5yZWxpZCk7Ci0K LQlyZXR1cm4gcmVzdWx0OworCXJldHVybiBnZXRfbWF0Y2hpbmdfcGFydGl0aW9ucygmY29u dGV4dCwgcHJ1bmluZ19zdGVwcyk7CiB9CiAKIC8qCmRpZmYgLS1naXQgYS9zcmMvaW5jbHVk ZS9ub2Rlcy9wYXRobm9kZXMuaCBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCmlu ZGV4IGIyMTlmZjg4MDYuLjMzOWI3ODZmMjAgMTAwNjQ0Ci0tLSBhL3NyYy9pbmNsdWRlL25v ZGVzL3BhdGhub2Rlcy5oCisrKyBiL3NyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oCkBA IC0xNSw2ICsxNSw3IEBACiAjZGVmaW5lIFBBVEhOT0RFU19ICiAKICNpbmNsdWRlICJhY2Nl c3Mvc2Rpci5oIgorI2luY2x1ZGUgImFjY2Vzcy90dXBkZXNjLmgiCiAjaW5jbHVkZSAiZm1n ci5oIgogI2luY2x1ZGUgImxpYi9zdHJpbmdpbmZvLmgiCiAjaW5jbHVkZSAibm9kZXMvcGFy YW1zLmgiCkBAIC0zNjUsNyArMzY2LDYgQEAgc3RydWN0IFBsYW5uZXJJbmZvCiB9OwogCiAK LQogLyoKICAqIEluIHBsYWNlcyB3aGVyZSBpdCdzIGtub3duIHRoYXQgc2ltcGxlX3J0ZV9h cnJheVtdIG11c3QgaGF2ZSBiZWVuIHByZXBhcmVkCiAgKiBhbHJlYWR5LCB3ZSBqdXN0IGlu ZGV4IGludG8gaXQgdG8gZmV0Y2ggUlRFcy4gIEluIGNvZGUgdGhhdCBtaWdodCBiZQpAQCAt NzE4LDExICs3MTgsMjggQEAgdHlwZWRlZiBzdHJ1Y3QgUmVsT3B0SW5mbwogCWludAkJCW5w YXJ0czsJCQkvKiBudW1iZXIgb2YgcGFydGl0aW9ucyAqLwogCXN0cnVjdCBQYXJ0aXRpb25C b3VuZEluZm9EYXRhICpib3VuZGluZm87CS8qIFBhcnRpdGlvbiBib3VuZHMgKi8KIAlMaXN0 CSAgICpwYXJ0aXRpb25fcXVhbDsgLyogcGFydGl0aW9uIGNvbnN0cmFpbnQgKi8KKwlPaWQJ CSAgICpwYXJ0X29pZHM7CQkvKiBwYXJ0aXRpb24gT0lEcyAqLwogCXN0cnVjdCBSZWxPcHRJ bmZvICoqcGFydF9yZWxzOwkvKiBBcnJheSBvZiBSZWxPcHRJbmZvcyBvZiBwYXJ0aXRpb25z LAogCQkJCQkJCQkJICogc3RvcmVkIGluIHRoZSBzYW1lIG9yZGVyIG9mIGJvdW5kcyAqLwog CUxpc3QJICAqKnBhcnRleHByczsJCS8qIE5vbi1udWxsYWJsZSBwYXJ0aXRpb24ga2V5IGV4 cHJlc3Npb25zLiAqLwogCUxpc3QJICAqKm51bGxhYmxlX3BhcnRleHByczsgLyogTnVsbGFi bGUgcGFydGl0aW9uIGtleSBleHByZXNzaW9ucy4gKi8KIAlMaXN0CSAgICpwYXJ0aXRpb25l ZF9jaGlsZF9yZWxzOyAvKiBMaXN0IG9mIFJUIGluZGV4ZXMuICovCisKKwkvKgorCSAqIEZv ciBpbmhlcml0YW5jZSBjaGlsZHJlbiwgdGhpcyBpcyB0aGUgUlQgaW5kZXggb2YgaW5oZXJp dGFuY2UgdGFibGUKKwkgKiBtZW50aW9uZWQgaW4gdGhlIHF1ZXJ5IGZyb20gd2hpY2ggdGhp cyByZWxhdGlvbiBvcmlnaW5hdGVkLgorCSAqIHRvcF9wYXJlbnRfcmVsaWRzIGNhbm5vdCBi ZSB1c2VkIGZvciB0aGlzLCBiZWNhdXNlIGlmIHRoZSBpbmhlcml0YW5jZQorCSAqIHJvb3Qg dGFibGUgaXMgaXRzZWxmIHVuZGVyIFVOSU9OIEFMTCwgdG9wX3BhcmVudF9yZWxpZHMgY29u dGFpbnMgdGhlCisJICogUlQgaW5kZXggb2YgVU5JT04gQUxMIHBhcmVudCBzdWJxdWVyeS4K KwkgKi8KKwlJbmRleAkJaW5oX3Jvb3RfcGFyZW50OworCisJLyoKKwkgKiBTZXQgb25seSBp ZiB0aGlzIGlzIGFuIGluaGVyaXRhbmNlIHBhcmVudCByZWxhdGlvbi4gIFRoaXMgaW5mb3Jt YXRpb24KKwkgKiBpcyBuZWVkZWQgd2hlbiBpbml0aWFsaXppbmcgdGhlIHBsYW5uaW5nIGlu Zm8gZm9yIGNoaWxkcmVuLgorCSAqLworCVR1cGxlRGVzYwl0dXBkZXNjOwkJLyogQSAiY29w eSIgb2YgdGhlIHRhYmxlJ3MgdHVwbGUgZGVzcmlwdG9yICovCisJT2lkCQkJcmVsdHlwZTsJ CS8qIFRhYmxlJ3MgcmVsdHlwZSAqLwogfSBSZWxPcHRJbmZvOwogCiAvKgpkaWZmIC0tZ2l0 IGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGluZm8uaCBiL3NyYy9pbmNsdWRlL29w dGltaXplci9hcHBlbmRpbmZvLmgKaW5kZXggNzkwOTE0YzFiMC4uYzBiOGRiOWE2MiAxMDA2 NDQKLS0tIGEvc3JjL2luY2x1ZGUvb3B0aW1pemVyL2FwcGVuZGluZm8uaAorKysgYi9zcmMv aW5jbHVkZS9vcHRpbWl6ZXIvYXBwZW5kaW5mby5oCkBAIC0xNyw5ICsxNywxMCBAQAogI2lu Y2x1ZGUgIm5vZGVzL3BhdGhub2Rlcy5oIgogI2luY2x1ZGUgInV0aWxzL3JlbGNhY2hlLmgi CiAKLWV4dGVybiBBcHBlbmRSZWxJbmZvICptYWtlX2FwcGVuZF9yZWxfaW5mbyhSZWxhdGlv biBwYXJlbnRyZWwsCi0JCQkJCSBSZWxhdGlvbiBjaGlsZHJlbCwKLQkJCQkJIEluZGV4IHBh cmVudFJUaW5kZXgsIEluZGV4IGNoaWxkUlRpbmRleCk7CitleHRlcm4gQXBwZW5kUmVsSW5m byAqbWFrZV9hcHBlbmRfcmVsX2luZm8oUmVsT3B0SW5mbyAqcGFyZW50LAorCQkJCQkgUmFu Z2VUYmxFbnRyeSAqcGFyZW50cnRlLAorCQkJCQkgVHVwbGVEZXNjIGNoaWxkZGVzYywgT2lk IGNoaWxkb2lkLCBPaWQgY2hpbGR0eXBlLAorCQkJCQkgSW5kZXggY2hpbGRSVGluZGV4KTsK IGV4dGVybiBOb2RlICphZGp1c3RfYXBwZW5kcmVsX2F0dHJzKFBsYW5uZXJJbmZvICpyb290 LCBOb2RlICpub2RlLAogCQkJCQkgICBpbnQgbmFwcGluZm9zLCBBcHBlbmRSZWxJbmZvICoq YXBwaW5mb3MpOwogZXh0ZXJuIE5vZGUgKmFkanVzdF9hcHBlbmRyZWxfYXR0cnNfbXVsdGls ZXZlbChQbGFubmVySW5mbyAqcm9vdCwgTm9kZSAqbm9kZSwKZGlmZiAtLWdpdCBhL3NyYy9p bmNsdWRlL29wdGltaXplci9wYXRobm9kZS5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3Bh dGhub2RlLmgKaW5kZXggNTc0YmI4NWI1MC4uM2E4MDNiM2ZkMCAxMDA2NDQKLS0tIGEvc3Jj L2luY2x1ZGUvb3B0aW1pemVyL3BhdGhub2RlLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1p emVyL3BhdGhub2RlLmgKQEAgLTI3Nyw2ICsyNzcsNyBAQCBleHRlcm4gUGF0aCAqcmVwYXJh bWV0ZXJpemVfcGF0aF9ieV9jaGlsZChQbGFubmVySW5mbyAqcm9vdCwgUGF0aCAqcGF0aCwK ICAqLwogZXh0ZXJuIHZvaWQgc2V0dXBfc2ltcGxlX3JlbF9hcnJheXMoUGxhbm5lckluZm8g KnJvb3QpOwogZXh0ZXJuIHZvaWQgc2V0dXBfYXBwZW5kX3JlbF9hcnJheShQbGFubmVySW5m byAqcm9vdCk7CitleHRlcm4gdm9pZCBleHBhbmRfcGxhbm5lcl9hcnJheXMoUGxhbm5lcklu Zm8gKnJvb3QsIGludCBhZGRfc2l6ZSk7CiBleHRlcm4gUmVsT3B0SW5mbyAqYnVpbGRfc2lt cGxlX3JlbChQbGFubmVySW5mbyAqcm9vdCwgaW50IHJlbGlkLAogCQkJCSBSZWxPcHRJbmZv ICpwYXJlbnQpOwogZXh0ZXJuIFJlbE9wdEluZm8gKmZpbmRfYmFzZV9yZWwoUGxhbm5lcklu Zm8gKnJvb3QsIGludCByZWxpZCk7CmRpZmYgLS1naXQgYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGxhbmNhdC5oIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVyL3BsYW5jYXQuaAppbmRleCBj MzM3ZjA0N2NiLi4wNDczMWY1MzJmIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcGxhbmNhdC5oCisrKyBiL3NyYy9pbmNsdWRlL29wdGltaXplci9wbGFuY2F0LmgKQEAg LTI1LDggKzI1LDggQEAgdHlwZWRlZiB2b2lkICgqZ2V0X3JlbGF0aW9uX2luZm9faG9va190 eXBlKSAoUGxhbm5lckluZm8gKnJvb3QsCiBleHRlcm4gUEdETExJTVBPUlQgZ2V0X3JlbGF0 aW9uX2luZm9faG9va190eXBlIGdldF9yZWxhdGlvbl9pbmZvX2hvb2s7CiAKIAotZXh0ZXJu IHZvaWQgZ2V0X3JlbGF0aW9uX2luZm8oUGxhbm5lckluZm8gKnJvb3QsIE9pZCByZWxhdGlv bk9iamVjdElkLAotCQkJCSAgYm9vbCBpbmhwYXJlbnQsIFJlbE9wdEluZm8gKnJlbCk7Citl eHRlcm4gdm9pZCBnZXRfcmVsYXRpb25faW5mbyhQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VU YmxFbnRyeSAqcnRlLAorCQkJCSAgUmVsT3B0SW5mbyAqcmVsKTsKIAogZXh0ZXJuIExpc3Qg KmluZmVyX2FyYml0ZXJfaW5kZXhlcyhQbGFubmVySW5mbyAqcm9vdCk7CiAKZGlmZiAtLWdp dCBhL3NyYy9pbmNsdWRlL29wdGltaXplci9wcmVwLmggYi9zcmMvaW5jbHVkZS9vcHRpbWl6 ZXIvcHJlcC5oCmluZGV4IGE5YjJjOTAyNmMuLjI3ZGUwNWJhM2UgMTAwNjQ0Ci0tLSBhL3Ny Yy9pbmNsdWRlL29wdGltaXplci9wcmVwLmgKKysrIGIvc3JjL2luY2x1ZGUvb3B0aW1pemVy L3ByZXAuaApAQCAtMzQsNyArMzQsOCBAQCBleHRlcm4gUmVsaWRzIGdldF9yZWxpZHNfZm9y X2pvaW4oUXVlcnkgKnF1ZXJ5LCBpbnQgam9pbnJlbGlkKTsKIC8qCiAgKiBwcm90b3R5cGVz IGZvciBwcmVwdGxpc3QuYwogICovCi1leHRlcm4gTGlzdCAqcHJlcHJvY2Vzc190YXJnZXRs aXN0KFBsYW5uZXJJbmZvICpyb290KTsKK2V4dGVybiBMaXN0ICpwcmVwcm9jZXNzX3Rhcmdl dGxpc3QoUGxhbm5lckluZm8gKnJvb3QsCisJCQkJCQkJYm9vbCBpbmhlcml0YW5jZV9leHBh bmRlZCk7CiAKIGV4dGVybiBQbGFuUm93TWFyayAqZ2V0X3BsYW5fcm93bWFyayhMaXN0ICpy b3dtYXJrcywgSW5kZXggcnRpbmRleCk7CiAKZGlmZiAtLWdpdCBhL3NyYy90ZXN0L3JlZ3Jl c3MvZXhwZWN0ZWQvcGFydGl0aW9uX2FnZ3JlZ2F0ZS5vdXQgYi9zcmMvdGVzdC9yZWdyZXNz L2V4cGVjdGVkL3BhcnRpdGlvbl9hZ2dyZWdhdGUub3V0CmluZGV4IDZiYzEwNjgzMWUuLjE0 NTBjZWYwNTcgMTAwNjQ0Ci0tLSBhL3NyYy90ZXN0L3JlZ3Jlc3MvZXhwZWN0ZWQvcGFydGl0 aW9uX2FnZ3JlZ2F0ZS5vdXQKKysrIGIvc3JjL3Rlc3QvcmVncmVzcy9leHBlY3RlZC9wYXJ0 aXRpb25fYWdncmVnYXRlLm91dApAQCAtMTQ0LDcgKzE0NCw3IEBAIFNFTEVDVCBjLCBzdW0o YSkgRlJPTSBwYWdnX3RhYiBXSEVSRSAxID0gMiBHUk9VUCBCWSBjOwogICAgICAgICAgICBR VUVSWSBQTEFOICAgICAgICAgICAKIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t CiAgSGFzaEFnZ3JlZ2F0ZQotICAgR3JvdXAgS2V5OiBwYWdnX3RhYi5jCisgICBHcm91cCBL ZXk6IGMKICAgIC0+ICBSZXN1bHQKICAgICAgICAgIE9uZS1UaW1lIEZpbHRlcjogZmFsc2UK ICg0IHJvd3MpCkBAIC0xNTksNyArMTU5LDcgQEAgU0VMRUNUIGMsIHN1bShhKSBGUk9NIHBh Z2dfdGFiIFdIRVJFIGMgPSAneCcgR1JPVVAgQlkgYzsKICAgICAgICAgICAgUVVFUlkgUExB TiAgICAgICAgICAgCiAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIEdyb3Vw QWdncmVnYXRlCi0gICBHcm91cCBLZXk6IHBhZ2dfdGFiLmMKKyAgIEdyb3VwIEtleTogYwog ICAgLT4gIFJlc3VsdAogICAgICAgICAgT25lLVRpbWUgRmlsdGVyOiBmYWxzZQogKDQgcm93 cykKLS0gCjIuMTEuMAoK --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=UTF-8; name="0004-Teach-planner-to-only-process-unpruned-partitions.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename*0="0004-Teach-planner-to-only-process-unpruned-partitions.patch" RnJvbSBmM2QwZmE4MDcyNTUwYjY2NzM5ZDQ0NWQ5YjVmYjY3YzhhZDFlOTIzIE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogTW9uLCAxNSBPY3QgMjAxOCAxMDo1OToyNCArMDkwMApTdWJqZWN0OiBbUEFUQ0gg NC81XSBUZWFjaCBwbGFubmVyIHRvIG9ubHkgcHJvY2VzcyB1bnBydW5lZCBwYXJ0aXRpb25z CgpUaGlzIGFkZHMgYSBiaXRtYXBzZXQgZmllbGQgbGl2ZV9wYXJ0cyB0byBSZWxPcHRJbmZv IGFuZCBzdG9yZXMKdGhlIHBhcnRpdGlvbiBpbmRleGVzIG9mIG5vbi1kdW1teSBwYXJ0aXRp b25zIGluIGl0LCBtZWFuaW5nIGl0CmNvbnRhaW5zIGluZGV4ZXMgb2Ygb25seSB0aG9zZSBw YXJ0aXRpb25zIHRoYXQgaGF2ZSBhIG5vbi1OVUxMClJlbE9wdEluZm8gcHJlc2VudCBpbiBp dHMgcGFyZW50J3MgUmVsT3B0SW5mbydzIHBhcnRfcmVscyBhcnJheS4KClRoaXMgc3BlZWRz IHVwIHByb2Nlc3NpbmcgcGFydGl0aW9uZWQgdGFibGUncyBwYXJ0aXRpb25zIGNvbXBhcmVk CnRvIGdvaW5nIHRocm91Z2ggdGhlIHdob2xlIHBhcnRfcmVscyBhcnJheSBpbiBhIG51bWJl ciBvZiBwbGFjZXMuCi0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9pbnJlbHMu YyB8ICAzICsrKwogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5jICB8IDE4 ICsrKysrKysrKy0tLS0tLS0tLQogc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJp dC5jICB8ICAxICsKIHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL3JlbG5vZGUuYyAgfCAg MyArKysKIHNyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYyAgfCAxOCArKysr Ky0tLS0tLS0tLS0tLS0KIHNyYy9pbmNsdWRlL25vZGVzL3BhdGhub2Rlcy5oICAgICAgICAg fCAgNCArKysrCiA2IGZpbGVzIGNoYW5nZWQsIDI1IGluc2VydGlvbnMoKyksIDIyIGRlbGV0 aW9ucygtKQoKZGlmZiAtLWdpdCBhL3NyYy9iYWNrZW5kL29wdGltaXplci9wYXRoL2pvaW5y ZWxzLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGF0aC9qb2lucmVscy5jCmluZGV4IDZm NzdkMmEwZjQuLmZkYmY3Njg5ZWQgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXpl ci9wYXRoL2pvaW5yZWxzLmMKKysrIGIvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BhdGgvam9p bnJlbHMuYwpAQCAtMTQ1Miw2ICsxNDUyLDkgQEAgdHJ5X3BhcnRpdGlvbndpc2Vfam9pbihQ bGFubmVySW5mbyAqcm9vdCwgUmVsT3B0SW5mbyAqcmVsMSwgUmVsT3B0SW5mbyAqcmVsMiwK IAkJcG9wdWxhdGVfam9pbnJlbF93aXRoX3BhdGhzKHJvb3QsIGNoaWxkX3JlbDEsIGNoaWxk X3JlbDIsCiAJCQkJCQkJCQljaGlsZF9qb2lucmVsLCBjaGlsZF9zamluZm8sCiAJCQkJCQkJ CQljaGlsZF9yZXN0cmljdGxpc3QpOworCQlpZiAoIUlTX0RVTU1ZX1JFTChjaGlsZF9qb2lu cmVsKSkKKwkJCWpvaW5yZWwtPmxpdmVfcGFydHMgPSBibXNfYWRkX21lbWJlcihqb2lucmVs LT5saXZlX3BhcnRzLAorCQkJCQkJCQkJCQkJIGNudF9wYXJ0cyk7CiAJfQogfQogCmRpZmYg LS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMgYi9zcmMvYmFj a2VuZC9vcHRpbWl6ZXIvcGxhbi9wbGFubmVyLmMKaW5kZXggY2UwY2VkNzkyZi4uMmZlYjVk NWIyZCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3BsYW4vcGxhbm5lci5j CisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXplci9wbGFuL3BsYW5uZXIuYwpAQCAtNjg1Nyw3 ICs2ODU3LDkgQEAgYXBwbHlfc2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzKFBsYW5uZXJJbmZv ICpyb290LAogCQlMaXN0CSAgICpsaXZlX2NoaWxkcmVuID0gTklMOwogCiAJCS8qIEFkanVz dCBlYWNoIHBhcnRpdGlvbi4gKi8KLQkJZm9yIChwYXJ0aXRpb25faWR4ID0gMDsgcGFydGl0 aW9uX2lkeCA8IHJlbC0+bnBhcnRzOyBwYXJ0aXRpb25faWR4KyspCisJCXBhcnRpdGlvbl9p ZHggPSAtMTsKKwkJd2hpbGUgKChwYXJ0aXRpb25faWR4ID0gYm1zX25leHRfbWVtYmVyKHJl bC0+bGl2ZV9wYXJ0cywKKwkJCQkJCQkJCQkJCXBhcnRpdGlvbl9pZHgpKSA+PSAwKQogCQl7 CiAJCQlSZWxPcHRJbmZvICpjaGlsZF9yZWwgPSByZWwtPnBhcnRfcmVsc1twYXJ0aXRpb25f aWR4XTsKIAkJCUxpc3RDZWxsICAgKmxjOwpAQCAtNjg2NSw5ICs2ODY3LDcgQEAgYXBwbHlf c2NhbmpvaW5fdGFyZ2V0X3RvX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJaW50CQkJ bmFwcGluZm9zOwogCQkJTGlzdAkgICAqY2hpbGRfc2NhbmpvaW5fdGFyZ2V0cyA9IE5JTDsK IAotCQkJLyogU2tpcCBwcm9jZXNzaW5nIHBydW5lZCBwYXJ0aXRpb25zLiAqLwotCQkJaWYg KGNoaWxkX3JlbCA9PSBOVUxMKQotCQkJCWNvbnRpbnVlOworCQkJQXNzZXJ0KGNoaWxkX3Jl bCAhPSBOVUxMKTsKIAogCQkJLyogVHJhbnNsYXRlIHNjYW4vam9pbiB0YXJnZXRzIGZvciB0 aGlzIGNoaWxkLiAqLwogCQkJYXBwaW5mb3MgPSBmaW5kX2FwcGluZm9zX2J5X3JlbGlkcyhy b290LCBjaGlsZF9yZWwtPnJlbGlkcywKQEAgLTcwMDksNyArNzAwOSw2IEBAIGNyZWF0ZV9w YXJ0aXRpb253aXNlX2dyb3VwaW5nX3BhdGhzKFBsYW5uZXJJbmZvICpyb290LAogCQkJCQkJ CQkJUGFydGl0aW9ud2lzZUFnZ3JlZ2F0ZVR5cGUgcGF0eXBlLAogCQkJCQkJCQkJR3JvdXBQ YXRoRXh0cmFEYXRhICpleHRyYSkKIHsKLQlpbnQJCQlucGFydHMgPSBpbnB1dF9yZWwtPm5w YXJ0czsKIAlpbnQJCQljbnRfcGFydHM7CiAJTGlzdAkgICAqZ3JvdXBlZF9saXZlX2NoaWxk cmVuID0gTklMOwogCUxpc3QJICAgKnBhcnRpYWxseV9ncm91cGVkX2xpdmVfY2hpbGRyZW4g PSBOSUw7CkBAIC03MDIxLDcgKzcwMjAsOSBAQCBjcmVhdGVfcGFydGl0aW9ud2lzZV9ncm91 cGluZ19wYXRocyhQbGFubmVySW5mbyAqcm9vdCwKIAkJICAgcGFydGlhbGx5X2dyb3VwZWRf cmVsICE9IE5VTEwpOwogCiAJLyogQWRkIHBhdGhzIGZvciBwYXJ0aXRpb253aXNlIGFnZ3Jl Z2F0aW9uL2dyb3VwaW5nLiAqLwotCWZvciAoY250X3BhcnRzID0gMDsgY250X3BhcnRzIDwg bnBhcnRzOyBjbnRfcGFydHMrKykKKwljbnRfcGFydHMgPSAtMTsKKwl3aGlsZSAoKGNudF9w YXJ0cyA9IGJtc19uZXh0X21lbWJlcihpbnB1dF9yZWwtPmxpdmVfcGFydHMsCisJCQkJCQkJ CQkJY250X3BhcnRzKSkgPj0gMCkKIAl7CiAJCVJlbE9wdEluZm8gKmNoaWxkX2lucHV0X3Jl bCA9IGlucHV0X3JlbC0+cGFydF9yZWxzW2NudF9wYXJ0c107CiAJCVBhdGhUYXJnZXQgKmNo aWxkX3RhcmdldCA9IGNvcHlfcGF0aHRhcmdldCh0YXJnZXQpOwpAQCAtNzAzMSw5ICs3MDMy LDggQEAgY3JlYXRlX3BhcnRpdGlvbndpc2VfZ3JvdXBpbmdfcGF0aHMoUGxhbm5lckluZm8g KnJvb3QsCiAJCVJlbE9wdEluZm8gKmNoaWxkX2dyb3VwZWRfcmVsOwogCQlSZWxPcHRJbmZv ICpjaGlsZF9wYXJ0aWFsbHlfZ3JvdXBlZF9yZWw7CiAKLQkJLyogU2tpcCBwcm9jZXNzaW5n IHBydW5lZCBwYXJ0aXRpb25zLiAqLwotCQlpZiAoY2hpbGRfaW5wdXRfcmVsID09IE5VTEwp Ci0JCQljb250aW51ZTsKKwkJLyogQSBsaXZlIHBhcnRpdGlvbiBtdXN0IGhhdmUgYSBSZWxP cHRJbmZvLiAqLworCQlBc3NlcnQoY2hpbGRfaW5wdXRfcmVsICE9IE5VTEwpOwogCiAJCS8q IElucHV0IGNoaWxkIHJlbCBtdXN0IGhhdmUgYSBwYXRoICovCiAJCUFzc2VydChjaGlsZF9p bnB1dF9yZWwtPnBhdGhsaXN0ICE9IE5JTCk7CmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9v cHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9p bmhlcml0LmMKaW5kZXggNDkyNzU3ZmQ4Yy4uNmU5NTY0ZDBjZSAxMDA2NDQKLS0tIGEvc3Jj L2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCisrKyBiL3NyYy9iYWNrZW5kL29w dGltaXplci91dGlsL2luaGVyaXQuYwpAQCAtMzY1LDYgKzM2NSw3IEBAIGV4cGFuZF9wYXJ0 aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpyb290LCBSYW5nZVRibEVudHJ5ICpwYXJl bnRydGUsCiAKIAkvKiBQZXJmb3JtIHBydW5pbmcuICovCiAJcGFydGluZGV4ZXMgPSBwcnVu ZV9hcHBlbmRfcmVsX3BhcnRpdGlvbnMocGFyZW50cmVsKTsKKwlwYXJlbnRyZWwtPmxpdmVf cGFydHMgPSBwYXJ0aW5kZXhlczsKIAogCS8qIE11c3QgZXhwYW5kIFBsYW5uZXJJbmZvIGFy cmF5cyBiZWZvcmUgd2UgY2FuIGFkZCBjaGlsZHJlbi4gKi8KIAlpZiAoYm1zX251bV9tZW1i ZXJzKHBhcnRpbmRleGVzKSA+IDApCmRpZmYgLS1naXQgYS9zcmMvYmFja2VuZC9vcHRpbWl6 ZXIvdXRpbC9yZWxub2RlLmMgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9yZWxub2Rl LmMKaW5kZXggZjZmY2E3NTY3Ny4uMDNjOWRlZDI5NCAxMDA2NDQKLS0tIGEvc3JjL2JhY2tl bmQvb3B0aW1pemVyL3V0aWwvcmVsbm9kZS5jCisrKyBiL3NyYy9iYWNrZW5kL29wdGltaXpl ci91dGlsL3JlbG5vZGUuYwpAQCAtMTc0Myw2ICsxNzQzLDkgQEAgYnVpbGRfam9pbnJlbF9w YXJ0aXRpb25faW5mbyhSZWxPcHRJbmZvICpqb2lucmVsLCBSZWxPcHRJbmZvICpvdXRlcl9y ZWwsCiAJCWpvaW5yZWwtPnBhcnRleHByc1tjbnRdID0gcGFydGV4cHI7CiAJCWpvaW5yZWwt Pm51bGxhYmxlX3BhcnRleHByc1tjbnRdID0gbnVsbGFibGVfcGFydGV4cHI7CiAJfQorCisJ LyogUGFydGl0aW9ucyB3aWxsIGJlIGFkZGVkIGJ5IHRyeV9wYXJ0aXRpb253aXNlX2pvaW4u ICovCisJam9pbnJlbC0+bGl2ZV9wYXJ0cyA9IE5VTEw7CiB9CiAKIC8qCmRpZmYgLS1naXQg YS9zcmMvYmFja2VuZC9wYXJ0aXRpb25pbmcvcGFydHBydW5lLmMgYi9zcmMvYmFja2VuZC9w YXJ0aXRpb25pbmcvcGFydHBydW5lLmMKaW5kZXggNDcyYTZjZDMzMS4uYmFiYjdkMzQwNiAx MDA2NDQKLS0tIGEvc3JjL2JhY2tlbmQvcGFydGl0aW9uaW5nL3BhcnRwcnVuZS5jCisrKyBi L3NyYy9iYWNrZW5kL3BhcnRpdGlvbmluZy9wYXJ0cHJ1bmUuYwpAQCAtNDM4LDI5ICs0Mzgs MjEgQEAgbWFrZV9wYXJ0aXRpb25lZHJlbF9wcnVuZWluZm8oUGxhbm5lckluZm8gKnJvb3Qs IFJlbE9wdEluZm8gKnBhcmVudHJlbCwKIAkJbWVtc2V0KHN1YnBsYW5fbWFwLCAtMSwgbnBh cnRzICogc2l6ZW9mKGludCkpOwogCQlzdWJwYXJ0X21hcCA9IChpbnQgKikgcGFsbG9jKG5w YXJ0cyAqIHNpemVvZihpbnQpKTsKIAkJbWVtc2V0KHN1YnBhcnRfbWFwLCAtMSwgbnBhcnRz ICogc2l6ZW9mKGludCkpOwotCQlwcmVzZW50X3BhcnRzID0gTlVMTDsKKwkJcHJlc2VudF9w YXJ0cyA9IGJtc19jb3B5KHN1YnBhcnQtPmxpdmVfcGFydHMpOwogCi0JCWZvciAoaSA9IDA7 IGkgPCBucGFydHM7IGkrKykKKwkJaSA9IC0xOworCQl3aGlsZSAoKGkgPSBibXNfbmV4dF9t ZW1iZXIocHJlc2VudF9wYXJ0cywgaSkpID49IDApCiAJCXsKIAkJCVJlbE9wdEluZm8gKnBh cnRyZWwgPSBzdWJwYXJ0LT5wYXJ0X3JlbHNbaV07CiAJCQlpbnQJCQlzdWJwbGFuaWR4Owog CQkJaW50CQkJc3VicGFydGlkeDsKIAotCQkJLyogU2tpcCBwcm9jZXNzaW5nIHBydW5lZCBw YXJ0aXRpb25zLiAqLwotCQkJaWYgKHBhcnRyZWwgPT0gTlVMTCkKLQkJCQljb250aW51ZTsK LQorCQkJQXNzZXJ0KHBhcnRyZWwgIT0gTlVMTCk7CiAJCQlzdWJwbGFuX21hcFtpXSA9IHN1 YnBsYW5pZHggPSByZWxpZF9zdWJwbGFuX21hcFtwYXJ0cmVsLT5yZWxpZF0gLSAxOwogCQkJ c3VicGFydF9tYXBbaV0gPSBzdWJwYXJ0aWR4ID0gcmVsaWRfc3VicGFydF9tYXBbcGFydHJl bC0+cmVsaWRdIC0gMTsKKwkJCS8qIFJlY29yZCBmaW5kaW5nIHRoaXMgc3VicGxhbiAqLwog CQkJaWYgKHN1YnBsYW5pZHggPj0gMCkKLQkJCXsKLQkJCQlwcmVzZW50X3BhcnRzID0gYm1z X2FkZF9tZW1iZXIocHJlc2VudF9wYXJ0cywgaSk7Ci0KLQkJCQkvKiBSZWNvcmQgZmluZGlu ZyB0aGlzIHN1YnBsYW4gICovCiAJCQkJc3VicGxhbnNmb3VuZCA9IGJtc19hZGRfbWVtYmVy KHN1YnBsYW5zZm91bmQsIHN1YnBsYW5pZHgpOwotCQkJfQotCQkJZWxzZSBpZiAoc3VicGFy dGlkeCA+PSAwKQotCQkJCXByZXNlbnRfcGFydHMgPSBibXNfYWRkX21lbWJlcihwcmVzZW50 X3BhcnRzLCBpKTsKIAkJfQogCiAJCXBpbmZvID0gbWFrZU5vZGUoUGFydGl0aW9uZWRSZWxQ cnVuZUluZm8pOwpkaWZmIC0tZ2l0IGEvc3JjL2luY2x1ZGUvbm9kZXMvcGF0aG5vZGVzLmgg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAppbmRleCAzMzliNzg2ZjIwLi5jMzEw MzM3MGNhIDEwMDY0NAotLS0gYS9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaAorKysg Yi9zcmMvaW5jbHVkZS9ub2Rlcy9wYXRobm9kZXMuaApAQCAtNzIxLDYgKzcyMSwxMCBAQCB0 eXBlZGVmIHN0cnVjdCBSZWxPcHRJbmZvCiAJT2lkCQkgICAqcGFydF9vaWRzOwkJLyogcGFy dGl0aW9uIE9JRHMgKi8KIAlzdHJ1Y3QgUmVsT3B0SW5mbyAqKnBhcnRfcmVsczsJLyogQXJy YXkgb2YgUmVsT3B0SW5mb3Mgb2YgcGFydGl0aW9ucywKIAkJCQkJCQkJCSAqIHN0b3JlZCBp biB0aGUgc2FtZSBvcmRlciBvZiBib3VuZHMgKi8KKwlCaXRtYXBzZXQgICpsaXZlX3BhcnRz OwkJLyogSW5kZXhlcyBpbnRvIHBhcnRfcmVscyBvZiB0aGUgbm9uLU5VTEwKKwkJCQkJCQkJ ICogUmVsT3B0SW5mb3Mgb2YgdW5wcnVuZWQgcGFydGl0aW9uczsgZXhpc3RzCisJCQkJCQkJ CSAqIHRvIGF2b2lkIGhhdmluZyB0byBpdGVyYXRlIG92ZXIgdGhlIGVudGlyZQorCQkJCQkJ CQkgKiBwYXJ0X3JlbHMgYXJyYXkgdG8gZmlsdGVyIE5VTEwgZW50cmllcy4gKi8KIAlMaXN0 CSAgKipwYXJ0ZXhwcnM7CQkvKiBOb24tbnVsbGFibGUgcGFydGl0aW9uIGtleSBleHByZXNz aW9ucy4gKi8KIAlMaXN0CSAgKipudWxsYWJsZV9wYXJ0ZXhwcnM7IC8qIE51bGxhYmxlIHBh cnRpdGlvbiBrZXkgZXhwcmVzc2lvbnMuICovCiAJTGlzdAkgICAqcGFydGl0aW9uZWRfY2hp bGRfcmVsczsgLyogTGlzdCBvZiBSVCBpbmRleGVzLiAqLwotLSAKMi4xMS4wCgo= --------------A2A95DBEF09F26C37C03DB83 Content-Type: text/plain; charset=UTF-8; name="0005-Do-not-lock-all-partitions-at-the-beginning.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="0005-Do-not-lock-all-partitions-at-the-beginning.patch" RnJvbSA3ZTU2ODM3MTYxY2MxMzkwMDhkOWE5NDVhODlkYWY1MTMyNjdiMjk5IE1vbiBTZXAg MTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBhbWl0IDxhbWl0bGFuZ290ZTA5QGdtYWlsLmNvbT4K RGF0ZTogRnJpLCAxMiBPY3QgMjAxOCAxOToxMjo1MyArMDkwMApTdWJqZWN0OiBbUEFUQ0gg NS81XSBEbyBub3QgbG9jayBhbGwgcGFydGl0aW9ucyBhdCB0aGUgYmVnaW5uaW5nCgotLS0K IHNyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2luaGVyaXQuYyB8IDE1ICsrKysrLS0tLS0t LS0tLQogMSBmaWxlIGNoYW5nZWQsIDUgaW5zZXJ0aW9ucygrKSwgMTAgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEvc3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jIGIv c3JjL2JhY2tlbmQvb3B0aW1pemVyL3V0aWwvaW5oZXJpdC5jCmluZGV4IDZlOTU2NGQwY2Uu Ljg1NzcwMjI2ZDAgMTAwNjQ0Ci0tLSBhL3NyYy9iYWNrZW5kL29wdGltaXplci91dGlsL2lu aGVyaXQuYworKysgYi9zcmMvYmFja2VuZC9vcHRpbWl6ZXIvdXRpbC9pbmhlcml0LmMKQEAg LTMzMiwxMCArMzMyLDYgQEAgZXhwYW5kX25vbnBhcnRpdGlvbmVkX2luaGVyaXRlZF9ydGVu dHJ5KFBsYW5uZXJJbmZvICpyb290LAogICoKICAqIFBhcnRpdGlvbnMgYXJlIGFkZGVkIHRv IHRoZSBxdWVyeSBpbiBvcmRlciBpbiB3aGljaCB0aGV5IGFyZSBmb3VuZCBpbgogICogdGhl IHBhcmVudCdzIFBhcnRpdGlvbkRlc2MuCi0gKgotICogTm90ZTogZXZlbiB0aG91Z2ggb25s eSB0aGUgdW5wcnVuZWQgcGFydGl0aW9ucyB3aWxsIGJlIGFkZGVkIHRvIHRoZQotICogcmVz dWx0aW5nIHBsYW4sIHRoaXMgc3RpbGwgbG9ja3MgKmFsbCogcGFydGl0aW9ucyB2aWEgZmlu ZF9hbGxfaW5oZXJpdG9ycwotICogd2hlbiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCBmb3Ig dGhlIHJvb3QgcGFydGl0aW9uZWQgdGFibGUuCiAgKi8KIHN0YXRpYyB2b2lkCiBleHBhbmRf cGFydGl0aW9uZWRfcnRlbnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAq cGFyZW50cnRlLApAQCAtMzQ5LDEwICszNDUsNiBAQCBleHBhbmRfcGFydGl0aW9uZWRfcnRl bnRyeShQbGFubmVySW5mbyAqcm9vdCwgUmFuZ2VUYmxFbnRyeSAqcGFyZW50cnRlLAogCQkJ CQkJCQkJcGFyZW50cmVsLT5pbmhfcm9vdF9wYXJlbnQgOgogCQkJCQkJCQkJcGFyZW50UlRp bmRleDsKIAotCS8qIElmIHJvb3QgcGFydGl0aW9uZWQgdGFibGUsIGxvY2sgKmFsbCogcGFy dGl0aW9ucyBpbiB0aGUgdHJlZS4gKi8KLQlpZiAocGFyZW50UlRpbmRleCA9PSByb290UGFy ZW50UlRpbmRleCkKLQkJKHZvaWQpIGZpbmRfYWxsX2luaGVyaXRvcnMocGFyZW50cnRlLT5y ZWxpZCwgbG9ja21vZGUsIE5VTEwpOwotCiAJLyoKIAkgKiBJbml0aWFsaXplIHBhcnRpdGlv bmVkX2NoaWxkX3JlbHMgdG8gY29udGFpbiB0aGlzIFJUIGluZGV4LgogCSAqCkBAIC0zODks OCArMzgxLDExIEBAIGV4cGFuZF9wYXJ0aXRpb25lZF9ydGVudHJ5KFBsYW5uZXJJbmZvICpy b290LCBSYW5nZVRibEVudHJ5ICpwYXJlbnRydGUsCiAJCVJhbmdlVGJsRW50cnkgKmNoaWxk cnRlOwogCQlJbmRleAkJY2hpbGRSVGluZGV4OwogCi0JCS8qIE9wZW4gcmVsOyB3ZSBhbHJl YWR5IGhhdmUgcmVxdWlyZWQgbG9ja3MgKi8KLQkJbmV3cmVsYXRpb24gPSB0YWJsZV9vcGVu KGNoaWxkT0lELCBOb0xvY2spOworCQkvKgorCQkgKiBPcGVuIHJlbDsgdGhpcydzIHRoZSBm aXJzdCB0aW1lIG9mIG9wZW5pbmcgcGFydGl0aW9ucyBmb3IgdGhpcworCQkgKiBxdWVyeSwg c28gdGFrZSB0aGUgYXBwcm9wcmlhdGUgbG9ja3MuCisJCSAqLworCQluZXdyZWxhdGlvbiA9 IHRhYmxlX29wZW4oY2hpbGRPSUQsIGxvY2ttb2RlKTsKIAkJQXNzZXJ0KCFSRUxBVElPTl9J U19PVEhFUl9URU1QKG5ld3JlbGF0aW9uKSk7CiAKIAkJLyoKLS0gCjIuMTEuMAoK --------------A2A95DBEF09F26C37C03DB83--