From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 92954 invoked by alias); 17 May 2018 15:50:03 -0000 Mailing-List: contact gcc-patches-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Archive: List-Post: List-Help: Sender: gcc-patches-owner@gcc.gnu.org Received: (qmail 92923 invoked by uid 89); 17 May 2018 15:50:02 -0000 Authentication-Results: sourceware.org; auth=none X-Virus-Found: No X-Spam-SWARE-Status: No, score=-25.4 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_0,GIT_PATCH_1,GIT_PATCH_2,GIT_PATCH_3,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy= X-HELO: mail-io0-f196.google.com Received: from mail-io0-f196.google.com (HELO mail-io0-f196.google.com) (209.85.223.196) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Thu, 17 May 2018 15:49:58 +0000 Received: by mail-io0-f196.google.com with SMTP id z4-v6so2567776iof.5 for ; Thu, 17 May 2018 08:49:57 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=NjLBjNw4Q4pl+pP3F41txPOHcMGMVzH7yZ6cYHZ+tMA=; b=RdKtph3xlwpASJVHidWpFmp+fMW3ru6pALJo97+J+Pyo14QhEJ8p15Ha6NjREMdJiU Tw35j5puLvswO1+awmN9ICtwe5Y4cod+W+X9NhRlBdz61qER6+ZNUwXOi2h0/76QL/gb yQnNIKN4LMZQ9O5lYtwu+J73p57Ri8tPXxOuK1OvnWhn6qwsDuE5DP2C5pGD1ETI0zCs CDCNi4Oy8EOTmiTW9NEgohjECXNbqaDsrPqmge5zlvot7STnlU5ttNUTF5v9XLtfW3dD qwfv6l7YPKvU5oEfQ6ufY+2n+fi9Dh+DxPjuoGCZmyFe/Kxoz1UtGfW133B9ej3pGDwW 19Hg== X-Gm-Message-State: ALKqPwesLKEbROOKGnYpQZiluqrjMK2ZULYWicd+yl1TmvhSD1lHsydk Dw8YqjDGsCXR2J/c0xT6xHXfqdZypCXZlZNd2EQ= X-Google-Smtp-Source: AB8JxZo3Efa4oD+e/dKFmc96sTbHmD+2NyK/qHz6SNhggDNvH3EiAA6caICkFqDKrLQ4+mgXR49nSQCwiYhRnMllzgI= X-Received: by 2002:a6b:1110:: with SMTP id z16-v6mr6258079ioi.248.1526572196090; Thu, 17 May 2018 08:49:56 -0700 (PDT) MIME-Version: 1.0 Received: by 2002:a02:b40e:0:0:0:0:0 with HTTP; Thu, 17 May 2018 08:49:55 -0700 (PDT) In-Reply-To: References: From: "Bin.Cheng" Date: Thu, 17 May 2018 16:04:00 -0000 Message-ID: Subject: Re: [PATCH GCC][4/6]Support regional coalesce and live range computation To: Richard Biener Cc: GCC Patches Content-Type: multipart/mixed; boundary="000000000000790551056c68c9c5" X-IsSubscribed: yes X-SW-Source: 2018-05/txt/msg00849.txt.bz2 --000000000000790551056c68c9c5 Content-Type: text/plain; charset="UTF-8" Content-length: 7185 On Thu, May 17, 2018 at 3:04 PM, Richard Biener wrote: > On Tue, May 15, 2018 at 5:44 PM Bin.Cheng wrote: > >> On Fri, May 11, 2018 at 1:53 PM, Richard Biener >> wrote: >> > On Fri, May 4, 2018 at 6:23 PM, Bin Cheng wrote: >> >> Hi, >> >> Following Jeff's suggestion, I am now using existing tree-ssa-live.c > and >> >> tree-ssa-coalesce.c to compute register pressure, rather than inventing >> >> another live range solver. >> >> >> >> The major change is to record region's basic blocks in var_map and use > that >> >> information in computation, rather than FOR_EACH_BB_FN. For now only > loop >> >> and function type regions are supported. The default one is function > type >> >> region which is used in out-of-ssa. Loop type region will be used in > next >> >> patch to compute information for a loop. >> >> >> >> Bootstrap and test on x86_64 and AArch64 ongoing. Any comments? >> > >> > I believe your changes to create_outofssa_var_map should be done > differently >> > by simply only calling it from the coalescing context and passing in the >> > var_map rather than initializing it therein and returning it. >> > >> > This also means the coalesce_vars_p flag in the var_map structure looks >> > somewhat out-of-place. That is, it looks you could do with many less >> > changes if you refactored what calls what slightly? For example >> > the extra arg to gimple_can_coalesce_p looks unneeded. >> > >> > Just as a note I do have a CFG helper pending that computes RPO order >> > for SEME regions (attached). loops are SEME regions, so your RTYPE_SESE >> > is somewhat odd - I guess RTYPE_LOOP exists only because of the >> > convenience of passing in a loop * to the "constructor". I'd rather >> > drop this region_type thing and always assume a SEME region - at least >> > I didn't see anything in the patch that depends on any of the forms >> > apart from the initial BB gathering. > >> Hi Richard, > >> Thanks for reviewing. I refactored tree-ssa-live.c and >> tree-ssa-coalesce.c following your comments. >> Basically I did following changes: >> 1) Remove region_type and only support loop region live range computation. >> Also I added one boolean field in var_map indicating whether we >> are computing >> loop region live range or out-of-ssa. >> 2) Refactored create_outofssa_var_map into > create_coalesce_list_for_region and >> populate_coalesce_list_for_outofssa. Actually the original >> function name doesn't >> quite make sense because it has nothing to do with var_map. >> 3) Hoist init_var_map up in call stack. Now it's called by caller >> (out-of-ssa or live range) >> and the returned var_map is passed to coalesce_* stuff. >> 4) Move global functions to tree-outof-ssa.c and make them static. >> 5) Save/restore flag_tree_coalesce_vars in order to avoid updating >> checks on the flag. > >> So how is this one? Patch attached. > > A lot better. Few things I noticed: > > + map->bmp_bbs = BITMAP_ALLOC (NULL); > > use a bitmap_head member and bitmap_initialize (). > > + map->vec_bbs = new vec (); > > use a vec<> member and map->vec_bbs = vNULL; > > Both changes remove an unnecessary indirection. > > + map->outofssa_p = true; > + basic_block bb; > + FOR_EACH_BB_FN (bb, cfun) > + { > + bitmap_set_bit (map->bmp_bbs, bb->index); > + map->vec_bbs->safe_push (bb); > + } > > I think you can avoid populating the bitmap and return > true unconditionally for outofssa_p in the contains function? > Ah, you already do - so why populate the bitmap? > > +/* Return TRUE if region of the MAP contains basic block BB. */ > + > +inline bool > +region_contains_p (var_map map, basic_block bb) > +{ > + if (bb == ENTRY_BLOCK_PTR_FOR_FN (cfun) > + || bb == EXIT_BLOCK_PTR_FOR_FN (cfun)) > + return false; > + > + if (map->outofssa_p) > + return true; > + > + return bitmap_bit_p (map->bmp_bbs, bb->index); > > the entry/exit block check should be conditional in map->outofssa_p > but I think we should never get the function called with those args > so we can as well use a gcc_checking_assert ()? > > I think as followup we should try to get a BB order that > is more suited for the dataflow problem. Btw, I was > thinking about adding anoter "visited" BB flag that is guaranteed to > be unset and free to be used by infrastructure. So the bitmap > could be elided for a bb flag check (but we need to clear that flag > at the end of processing). Not sure if it's worth to add a machinery > to dynamically assign pass-specific flags... it would at least be > less error prone. Sth to think about. > > So -- I think the patch is ok with the two indirections removed, > the rest can be optimized as followup. Hi, This is the updated patch. I moved checks on ENTRY/EXIT blocks under outofssa_p, as well as changed vec_bbs into object. Note bmp_bbs is kept in pointer so that we can avoid allocating memory in out-of-ssa case. Bootstrap and test ongoing. Is it OK? Thanks, bin > > Thanks, > Richard. > > >> Thanks, >> bin >> 2018-05-15 Bin Cheng > >> * tree-outof-ssa.c (tree-ssa.h, tree-dfa.h): Include header files. >> (create_default_def, for_all_parms): Moved from tree-ssa-coalesce.c. >> (parm_default_def_partition_arg): Ditto. >> (set_parm_default_def_partition): Ditto. >> (get_parm_default_def_partitions): Ditto and make it static. >> (get_undefined_value_partitions): Ditto and make it static. >> (remove_ssa_form): Refactor call to init_var_map here. >> * tree-ssa-coalesce.c (build_ssa_conflict_graph): Support live range >> computation for loop region. >> (coalesce_partitions, compute_optimized_partition_bases): Ditto. >> (register_default_def): Delete. >> (for_all_parms, create_default_def): Move to tree-outof-ssa.c. >> (parm_default_def_partition_arg): Ditto. >> (set_parm_default_def_partition): Ditto. >> (get_parm_default_def_partitions): Ditto and make it static. >> (get_undefined_value_partitions): Ditto and make it static. >> (coalesce_with_default, coalesce_with_default): Update comment. >> (create_coalesce_list_for_region): New func factored out from >> create_outofssa_var_map. >> (populate_coalesce_list_for_outofssa): New func factored out from >> create_outofssa_var_map and coalesce_ssa_name. >> (create_outofssa_var_map): Delete. >> (coalesce_ssa_name): Refactor to support live range computation. >> * tree-ssa-coalesce.h (coalesce_ssa_name): Change decl. >> (get_parm_default_def_partitions): Delete. >> (get_undefined_value_partitions): Ditto. >> * tree-ssa-live.c (init_var_map, delete_var_map): Support live range >> computation for loop region. >> (new_tree_live_info, loe_visit_block): Ditto. >> (live_worklist, set_var_live_on_entry): Ditto. >> (calculate_live_on_exit, verify_live_on_entry): Ditto. >> * tree-ssa-live.h (struct _var_map): New fields. >> (init_var_map): Change decl. >> (region_contains_p): New. --000000000000790551056c68c9c5 Content-Type: text/x-patch; charset="US-ASCII"; name="0004-liverange-support-region-20180515.patch" Content-Disposition: attachment; filename="0004-liverange-support-region-20180515.patch" Content-Transfer-Encoding: base64 X-Attachment-Id: f_jhapnojw0 Content-length: 36938 RnJvbSBlNzU0OTg3MjU5MjE4NDgzMzBjOWQyZTc3NzJkYThiNWM1YjJkZmUy IE1vbiBTZXAgMTcgMDA6MDA6MDAgMjAwMQpGcm9tOiBCaW4gQ2hlbmcgPGJp bmNoZTAxQGUxMDg0NTEtbGluLmNhbWJyaWRnZS5hcm0uY29tPgpEYXRlOiBG cmksIDQgTWF5IDIwMTggMDk6Mzk6MTcgKzAxMDAKU3ViamVjdDogW1BBVENI IDQvNl0gbGl2ZXJhbmdlLXN1cHBvcnQtcmVnaW9uLTIwMTgwNTE1CgotLS0K IGdjYy90cmVlLW91dG9mLXNzYS5jICAgIHwgMTAyICsrKysrKysrKysrKysr Ky0KIGdjYy90cmVlLXNzYS1jb2FsZXNjZS5jIHwgMzE3ICsrKysrKysrKysr KysrKysrLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogZ2NjL3Ry ZWUtc3NhLWNvYWxlc2NlLmggfCAgIDQgKy0KIGdjYy90cmVlLXNzYS1saXZl LmMgICAgIHwgIDc2ICsrKysrKysrLS0tLQogZ2NjL3RyZWUtc3NhLWxpdmUu aCAgICAgfCAgMjcgKysrKy0KIDUgZmlsZXMgY2hhbmdlZCwgMjkzIGluc2Vy dGlvbnMoKyksIDIzMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9nY2Mv dHJlZS1vdXRvZi1zc2EuYyBiL2djYy90cmVlLW91dG9mLXNzYS5jCmluZGV4 IDU5YmRjZDYuLjNmODgwZWYgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLW91dG9m LXNzYS5jCisrKyBiL2djYy90cmVlLW91dG9mLXNzYS5jCkBAIC0yNywxMCAr MjcsMTIgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5H My4gIElmIG5vdCBzZWUKICNpbmNsdWRlICJnaW1wbGUuaCIKICNpbmNsdWRl ICJjZmdob29rcy5oIgogI2luY2x1ZGUgInNzYS5oIgorI2luY2x1ZGUgInRy ZWUtc3NhLmgiCiAjaW5jbHVkZSAibWVtbW9kZWwuaCIKICNpbmNsdWRlICJl bWl0LXJ0bC5oIgogI2luY2x1ZGUgImdpbXBsZS1wcmV0dHktcHJpbnQuaCIK ICNpbmNsdWRlICJkaWFnbm9zdGljLWNvcmUuaCIKKyNpbmNsdWRlICJ0cmVl LWRmYS5oIgogI2luY2x1ZGUgInN0b3ItbGF5b3V0LmgiCiAjaW5jbHVkZSAi Y2ZncnRsLmgiCiAjaW5jbHVkZSAiY2ZnYW5hbC5oIgpAQCAtODg4LDYgKzg5 MCwxMDIgQEAgcmV3cml0ZV90cmVlcyAodmFyX21hcCBtYXApCiAgICAgfQog fQogCisvKiBDcmVhdGUgYSBkZWZhdWx0IGRlZiBmb3IgVkFSLiAgKi8KKwor c3RhdGljIHZvaWQKK2NyZWF0ZV9kZWZhdWx0X2RlZiAodHJlZSB2YXIsIHZv aWQgKmFyZyBBVFRSSUJVVEVfVU5VU0VEKQoreworICBpZiAoIWlzX2dpbXBs ZV9yZWcgKHZhcikpCisgICAgcmV0dXJuOworCisgIHRyZWUgc3NhID0gZ2V0 X29yX2NyZWF0ZV9zc2FfZGVmYXVsdF9kZWYgKGNmdW4sIHZhcik7CisgIGdj Y19hc3NlcnQgKHNzYSk7Cit9CisKKy8qIENhbGwgQ0FMTEJBQ0sgZm9yIGFs bCBQQVJNX0RFQ0xzIGFuZCBSRVNVTFRfREVDTHMgZm9yIHdoaWNoCisgICBh c3NpZ25fcGFybXMgbWF5IGFzayBmb3IgYSBkZWZhdWx0IHBhcnRpdGlvbi4g ICovCisKK3N0YXRpYyB2b2lkCitmb3JfYWxsX3Bhcm1zICh2b2lkICgqY2Fs bGJhY2spKHRyZWUgdmFyLCB2b2lkICphcmcpLCB2b2lkICphcmcpCit7Cisg IGZvciAodHJlZSB2YXIgPSBERUNMX0FSR1VNRU5UUyAoY3VycmVudF9mdW5j dGlvbl9kZWNsKTsgdmFyOworICAgICAgIHZhciA9IERFQ0xfQ0hBSU4gKHZh cikpCisgICAgY2FsbGJhY2sgKHZhciwgYXJnKTsKKyAgaWYgKCFWT0lEX1RZ UEVfUCAoVFJFRV9UWVBFIChERUNMX1JFU1VMVCAoY3VycmVudF9mdW5jdGlv bl9kZWNsKSkpKQorICAgIGNhbGxiYWNrIChERUNMX1JFU1VMVCAoY3VycmVu dF9mdW5jdGlvbl9kZWNsKSwgYXJnKTsKKyAgaWYgKGNmdW4tPnN0YXRpY19j aGFpbl9kZWNsKQorICAgIGNhbGxiYWNrIChjZnVuLT5zdGF0aWNfY2hhaW5f ZGVjbCwgYXJnKTsKK30KKworLyogV2UgbmVlZCB0byBwYXNzIHR3byBhcmd1 bWVudHMgdG8gc2V0X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uLAorICAg YnV0IGZvcl9hbGxfcGFybXMgb25seSBzdXBwb3J0cyBvbmUuICBVc2UgYSBw YWlyLiAgKi8KKwordHlwZWRlZiBzdGQ6OnBhaXI8dmFyX21hcCwgYml0bWFw PiBwYXJtX2RlZmF1bHRfZGVmX3BhcnRpdGlvbl9hcmc7CisKKy8qIFNldCBp biBBUkcncyBQQVJUUyBiaXRtYXAgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRv IHRoZSBwYXJ0aXRpb24gaW4KKyAgIEFSRydzIE1BUCBjb250YWluaW5nIFZB UidzIGRlZmF1bHQgZGVmLiAgKi8KKworc3RhdGljIHZvaWQKK3NldF9wYXJt X2RlZmF1bHRfZGVmX3BhcnRpdGlvbiAodHJlZSB2YXIsIHZvaWQgKmFyZ18p Cit7CisgIHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZyAqYXJnID0g KHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZyAqKWFyZ187CisgIHZh cl9tYXAgbWFwID0gYXJnLT5maXJzdDsKKyAgYml0bWFwIHBhcnRzID0gYXJn LT5zZWNvbmQ7CisKKyAgaWYgKCFpc19naW1wbGVfcmVnICh2YXIpKQorICAg IHJldHVybjsKKworICB0cmVlIHNzYSA9IHNzYV9kZWZhdWx0X2RlZiAoY2Z1 biwgdmFyKTsKKyAgZ2NjX2Fzc2VydCAoc3NhKTsKKworICBpbnQgdmVyc2lv biA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwgc3NhKTsKKyAgZ2NjX2Fzc2Vy dCAodmVyc2lvbiAhPSBOT19QQVJUSVRJT04pOworCisgIGJvb2wgY2hhbmdl ZCA9IGJpdG1hcF9zZXRfYml0IChwYXJ0cywgdmVyc2lvbik7CisgIGdjY19h c3NlcnQgKGNoYW5nZWQpOworfQorCisvKiBBbGxvY2F0ZSBhbmQgcmV0dXJu IGEgYml0bWFwIHRoYXQgaGFzIGEgYml0IHNldCBmb3IgZWFjaCBwYXJ0aXRp b24KKyAgIHRoYXQgY29udGFpbnMgYSBkZWZhdWx0IGRlZiBmb3IgYSBwYXJh bWV0ZXIuICAqLworCitzdGF0aWMgYml0bWFwCitnZXRfcGFybV9kZWZhdWx0 X2RlZl9wYXJ0aXRpb25zICh2YXJfbWFwIG1hcCkKK3sKKyAgYml0bWFwIHBh cm1fZGVmYXVsdF9kZWZfcGFydHMgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOwor CisgIHBhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uX2FyZworICAgIGFyZyA9 IHN0ZDo6bWFrZV9wYWlyIChtYXAsIHBhcm1fZGVmYXVsdF9kZWZfcGFydHMp OworCisgIGZvcl9hbGxfcGFybXMgKHNldF9wYXJtX2RlZmF1bHRfZGVmX3Bh cnRpdGlvbiwgJmFyZyk7CisKKyAgcmV0dXJuIHBhcm1fZGVmYXVsdF9kZWZf cGFydHM7Cit9CisKKy8qIEFsbG9jYXRlIGFuZCByZXR1cm4gYSBiaXRtYXAg dGhhdCBoYXMgYSBiaXQgc2V0IGZvciBlYWNoIHBhcnRpdGlvbgorICAgdGhh dCBjb250YWlucyBhbiB1bmRlZmluZWQgdmFsdWUuICAqLworCitzdGF0aWMg Yml0bWFwCitnZXRfdW5kZWZpbmVkX3ZhbHVlX3BhcnRpdGlvbnMgKHZhcl9t YXAgbWFwKQoreworICBiaXRtYXAgdW5kZWZpbmVkX3ZhbHVlX3BhcnRzID0g QklUTUFQX0FMTE9DIChOVUxMKTsKKworICBmb3IgKHVuc2lnbmVkIGludCBp ID0gMTsgaSA8IG51bV9zc2FfbmFtZXM7IGkrKykKKyAgICB7CisgICAgICB0 cmVlIHZhciA9IHNzYV9uYW1lIChpKTsKKyAgICAgIGlmICh2YXIKKwkgICYm ICF2aXJ0dWFsX29wZXJhbmRfcCAodmFyKQorCSAgJiYgIWhhc196ZXJvX3Vz ZXMgKHZhcikKKwkgICYmIHNzYV91bmRlZmluZWRfdmFsdWVfcCAodmFyKSkK Kwl7CisJICBjb25zdCBpbnQgcCA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwg dmFyKTsKKwkgIGlmIChwICE9IE5PX1BBUlRJVElPTikKKwkgICAgYml0bWFw X3NldF9iaXQgKHVuZGVmaW5lZF92YWx1ZV9wYXJ0cywgcCk7CisJfQorICAg IH0KKworICByZXR1cm4gdW5kZWZpbmVkX3ZhbHVlX3BhcnRzOworfQorCiAv KiBHaXZlbiB0aGUgb3V0LW9mLXNzYSBpbmZvIG9iamVjdCBTQSAod2l0aCBw cmVwYXJlZCBwYXJ0aXRpb25zKQogICAgZWxpbWluYXRlIGFsbCBwaGkgbm9k ZXMgaW4gYWxsIGJhc2ljIGJsb2Nrcy4gIEFmdGVyd2FyZHMgbm8KICAgIGJh c2ljIGJsb2NrIHdpbGwgaGF2ZSBwaGkgbm9kZXMgYW55bW9yZSBhbmQgdGhl cmUgYXJlIHBvc3NpYmx5CkBAIC05NDUsNyArMTA0Myw5IEBAIHJlbW92ZV9z c2FfZm9ybSAoYm9vbCBwZXJmb3JtX3Rlciwgc3RydWN0IHNzYWV4cGFuZCAq c2EpCiAgIGJpdG1hcCB2YWx1ZXMgPSBOVUxMOwogICB2YXJfbWFwIG1hcDsK IAotICBtYXAgPSBjb2FsZXNjZV9zc2FfbmFtZSAoKTsKKyAgZm9yX2FsbF9w YXJtcyAoY3JlYXRlX2RlZmF1bHRfZGVmLCBOVUxMKTsKKyAgbWFwID0gaW5p dF92YXJfbWFwIChudW1fc3NhX25hbWVzKTsKKyAgY29hbGVzY2Vfc3NhX25h bWUgKG1hcCk7CiAKICAgLyogUmV0dXJuIHRvIHZpZXdpbmcgdGhlIHZhcmlh YmxlIGxpc3QgYXMganVzdCBhbGwgcmVmZXJlbmNlIHZhcmlhYmxlcyBhZnRl cgogICAgICBjb2FsZXNjaW5nIGhhcyBiZWVuIHBlcmZvcm1lZC4gICovCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtY29hbGVzY2UuYyBiL2djYy90cmVl LXNzYS1jb2FsZXNjZS5jCmluZGV4IDVjYzBhY2EuLmU0ZjU3NmYgMTAwNjQ0 Ci0tLSBhL2djYy90cmVlLXNzYS1jb2FsZXNjZS5jCisrKyBiL2djYy90cmVl LXNzYS1jb2FsZXNjZS5jCkBAIC04NzksNyArODc5LDcgQEAgYnVpbGRfc3Nh X2NvbmZsaWN0X2dyYXBoICh0cmVlX2xpdmVfaW5mb19wIGxpdmVpbmZvKQog CiAgIGxpdmUgPSBuZXdfbGl2ZV90cmFjayAobWFwKTsKIAotICBGT1JfRUFD SF9CQl9GTiAoYmIsIGNmdW4pCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGxp dmVpbmZvLT5tYXAtPnZlY19iYnMuaXRlcmF0ZSAoaSwgJmJiKTsgKytpKQog ICAgIHsKICAgICAgIC8qIFN0YXJ0IHdpdGggbGl2ZSBvbiBleGl0IHRlbXBv cmFyaWVzLiAgKi8KICAgICAgIGxpdmVfdHJhY2tfaW5pdCAobGl2ZSwgbGl2 ZV9vbl9leGl0IChsaXZlaW5mbywgYmIpKTsKQEAgLTk0NCw2ICs5NDQsOCBA QCBidWlsZF9zc2FfY29uZmxpY3RfZ3JhcGggKHRyZWVfbGl2ZV9pbmZvX3Ag bGl2ZWluZm8pCiAJewogCSAgZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKIAkg IHRyZWUgcmVzdWx0ID0gUEhJX1JFU1VMVCAocGhpKTsKKwkgIGlmICh2aXJ0 dWFsX29wZXJhbmRfcCAocmVzdWx0KSkKKwkgICAgY29udGludWU7CiAJICBp ZiAobGl2ZV90cmFja19saXZlX3AgKGxpdmUsIHJlc3VsdCkpCiAJICAgIGxp dmVfdHJhY2tfcHJvY2Vzc19kZWYgKGxpdmUsIHJlc3VsdCwgZ3JhcGgpOwog CX0KQEAgLTEwMTIsNDggKzEwMTQsOSBAQCBmYWlsX2Fibm9ybWFsX2VkZ2Vf Y29hbGVzY2UgKGludCB4LCBpbnQgeSkKICAgaW50ZXJuYWxfZXJyb3IgKCJT U0EgY29ycnVwdGlvbiIpOwogfQogCi0vKiBDYWxsIENBTExCQUNLIGZvciBh bGwgUEFSTV9ERUNMcyBhbmQgUkVTVUxUX0RFQ0xzIGZvciB3aGljaAotICAg YXNzaWduX3Bhcm1zIG1heSBhc2sgZm9yIGEgZGVmYXVsdCBwYXJ0aXRpb24u ICAqLwotCi1zdGF0aWMgdm9pZAotZm9yX2FsbF9wYXJtcyAodm9pZCAoKmNh bGxiYWNrKSh0cmVlIHZhciwgdm9pZCAqYXJnKSwgdm9pZCAqYXJnKQotewot ICBmb3IgKHRyZWUgdmFyID0gREVDTF9BUkdVTUVOVFMgKGN1cnJlbnRfZnVu Y3Rpb25fZGVjbCk7IHZhcjsKLSAgICAgICB2YXIgPSBERUNMX0NIQUlOICh2 YXIpKQotICAgIGNhbGxiYWNrICh2YXIsIGFyZyk7Ci0gIGlmICghVk9JRF9U WVBFX1AgKFRSRUVfVFlQRSAoREVDTF9SRVNVTFQgKGN1cnJlbnRfZnVuY3Rp b25fZGVjbCkpKSkKLSAgICBjYWxsYmFjayAoREVDTF9SRVNVTFQgKGN1cnJl bnRfZnVuY3Rpb25fZGVjbCksIGFyZyk7Ci0gIGlmIChjZnVuLT5zdGF0aWNf Y2hhaW5fZGVjbCkKLSAgICBjYWxsYmFjayAoY2Z1bi0+c3RhdGljX2NoYWlu X2RlY2wsIGFyZyk7Ci19Ci0KLS8qIENyZWF0ZSBhIGRlZmF1bHQgZGVmIGZv ciBWQVIuICAqLwotCi1zdGF0aWMgdm9pZAotY3JlYXRlX2RlZmF1bHRfZGVm ICh0cmVlIHZhciwgdm9pZCAqYXJnIEFUVFJJQlVURV9VTlVTRUQpCi17Ci0g IGlmICghaXNfZ2ltcGxlX3JlZyAodmFyKSkKLSAgICByZXR1cm47Ci0KLSAg dHJlZSBzc2EgPSBnZXRfb3JfY3JlYXRlX3NzYV9kZWZhdWx0X2RlZiAoY2Z1 biwgdmFyKTsKLSAgZ2NjX2Fzc2VydCAoc3NhKTsKLX0KLQotLyogUmVnaXN0 ZXIgVkFSJ3MgZGVmYXVsdCBkZWYgaW4gTUFQLiAgKi8KLQotc3RhdGljIHZv aWQKLXJlZ2lzdGVyX2RlZmF1bHRfZGVmICh0cmVlIHZhciwgdm9pZCAqYXJn IEFUVFJJQlVURV9VTlVTRUQpCi17Ci0gIGlmICghaXNfZ2ltcGxlX3JlZyAo dmFyKSkKLSAgICByZXR1cm47Ci0KLSAgdHJlZSBzc2EgPSBzc2FfZGVmYXVs dF9kZWYgKGNmdW4sIHZhcik7Ci0gIGdjY19hc3NlcnQgKHNzYSk7Ci19Ci0K IC8qIElmIFZBUiBpcyBhbiBTU0FfTkFNRSBhc3NvY2lhdGVkIHdpdGggYSBQ QVJNX0RFQ0wgb3IgYSBSRVNVTFRfREVDTCwKICAgIGFuZCB0aGUgREVDTCdz IGRlZmF1bHQgZGVmIGlzIHVudXNlZCAoaS5lLiwgaXQgd2FzIGludHJvZHVj ZWQgYnkKLSAgIGNyZWF0ZV9kZWZhdWx0X2RlZiksIG1hcmsgVkFSIGFuZCB0 aGUgZGVmYXVsdCBkZWYgZm9yCisgICBjcmVhdGVfZGVmYXVsdF9kZWYgZm9y IG91dC1vZi1zc2EpLCBtYXJrIFZBUiBhbmQgdGhlIGRlZmF1bHQgZGVmIGZv cgogICAgY29hbGVzY2luZy4gICovCiAKIHN0YXRpYyB2b2lkCkBAIC0xMDcw LDMyICsxMDMzLDI1IEBAIGNvYWxlc2NlX3dpdGhfZGVmYXVsdCAodHJlZSB2 YXIsIGNvYWxlc2NlX2xpc3QgKmNsLCBiaXRtYXAgdXNlZF9pbl9jb3B5KQog CiAgIGFkZF9jb3N0X29uZV9jb2FsZXNjZSAoY2wsIFNTQV9OQU1FX1ZFUlNJ T04gKHNzYSksIFNTQV9OQU1FX1ZFUlNJT04gKHZhcikpOwogICBiaXRtYXBf c2V0X2JpdCAodXNlZF9pbl9jb3B5LCBTU0FfTkFNRV9WRVJTSU9OICh2YXIp KTsKLSAgLyogRGVmYXVsdCBkZWZzIHdpbGwgaGF2ZSB0aGVpciB1c2VkX2lu X2NvcHkgYml0cyBzZXQgYXQgdGhlIGVuZCBvZgotICAgICBjcmVhdGVfb3V0 b2Zzc2FfdmFyX21hcC4gICovCisgIC8qIERlZmF1bHQgZGVmcyB3aWxsIGhh dmUgdGhlaXIgdXNlZF9pbl9jb3B5IGJpdHMgc2V0IGF0IHRoZSBiZWdpbm5p bmcgb2YKKyAgICAgcG9wdWxhdGVfY29hbGVzY2VfbGlzdF9mb3Jfb3V0b2Zz c2EuICAqLwogfQogCi0vKiBUaGlzIGZ1bmN0aW9uIGNyZWF0ZXMgYSB2YXJf bWFwIGZvciB0aGUgY3VycmVudCBmdW5jdGlvbiBhcyB3ZWxsIGFzIGNyZWF0 aW5nCi0gICBhIGNvYWxlc2NlIGxpc3QgZm9yIHVzZSBsYXRlciBpbiB0aGUg b3V0IG9mIHNzYSBwcm9jZXNzLiAgKi8KIAotc3RhdGljIHZhcl9tYXAKLWNy ZWF0ZV9vdXRvZnNzYV92YXJfbWFwIChjb2FsZXNjZV9saXN0ICpjbCwgYml0 bWFwIHVzZWRfaW5fY29weSkKKy8qIEdpdmVuIHZhcl9tYXAgTUFQIGZvciBh IHJlZ2lvbiwgdGhpcyBmdW5jdGlvbiBjcmVhdGVzIGFuZCByZXR1cm5zIGEg Y29hbGVzY2UKKyAgIGxpc3QgYXMgd2VsbCBhcyByZWNvcmRpbmcgcmVsYXRl ZCBzc2EgbmFtZXMgaW4gVVNFRF9JTl9DT1BJRVMgZm9yIHVzZSBsYXRlcgor ICAgaW4gdGhlIG91dC1vZi1zc2Egb3IgbGl2ZSByYW5nZSBjb21wdXRhdGlv biBwcm9jZXNzLiAgKi8KKworc3RhdGljIGNvYWxlc2NlX2xpc3QgKgorY3Jl YXRlX2NvYWxlc2NlX2xpc3RfZm9yX3JlZ2lvbiAodmFyX21hcCBtYXAsIGJp dG1hcCB1c2VkX2luX2NvcHkpCiB7CiAgIGdpbXBsZV9zdG10X2l0ZXJhdG9y IGdzaTsKICAgYmFzaWNfYmxvY2sgYmI7Ci0gIHRyZWUgdmFyOworICBjb2Fs ZXNjZV9saXN0ICpjbCA9IGNyZWF0ZV9jb2FsZXNjZV9saXN0ICgpOwogICBn aW1wbGUgKnN0bXQ7Ci0gIHRyZWUgZmlyc3Q7Ci0gIHZhcl9tYXAgbWFwOwog ICBpbnQgdjEsIHYyLCBjb3N0OwotICB1bnNpZ25lZCBpOwotCi0gIGZvcl9h bGxfcGFybXMgKGNyZWF0ZV9kZWZhdWx0X2RlZiwgTlVMTCk7Ci0KLSAgbWFw ID0gaW5pdF92YXJfbWFwIChudW1fc3NhX25hbWVzKTsKLQotICBmb3JfYWxs X3Bhcm1zIChyZWdpc3Rlcl9kZWZhdWx0X2RlZiwgTlVMTCk7CiAKLSAgRk9S X0VBQ0hfQkJfRk4gKGJiLCBjZnVuKQorICBmb3IgKHVuc2lnbmVkIGogPSAw OyBtYXAtPnZlY19iYnMuaXRlcmF0ZSAoaiwgJmJiKTsgKytqKQogICAgIHsK ICAgICAgIHRyZWUgYXJnOwogCkBAIC0xMTEwLDYgKzEwNjYsOCBAQCBjcmVh dGVfb3V0b2Zzc2FfdmFyX21hcCAoY29hbGVzY2VfbGlzdCAqY2wsIGJpdG1h cCB1c2VkX2luX2NvcHkpCiAJICBib29sIHNhd19jb3B5ID0gZmFsc2U7CiAK IAkgIHJlcyA9IGdpbXBsZV9waGlfcmVzdWx0IChwaGkpOworCSAgaWYgKHZp cnR1YWxfb3BlcmFuZF9wIChyZXMpKQorCSAgICBjb250aW51ZTsKIAkgIHZl ciA9IFNTQV9OQU1FX1ZFUlNJT04gKHJlcyk7CiAKIAkgIC8qIFJlZ2lzdGVy IHNzYV9uYW1lcyBhbmQgY29hbGVzY2VzIGJldHdlZW4gdGhlIGFyZ3MgYW5k IHRoZSByZXN1bHQKQEAgLTEyNDksOCArMTIwNyw0NCBAQCBjcmVhdGVfb3V0 b2Zzc2FfdmFyX21hcCAoY29hbGVzY2VfbGlzdCAqY2wsIGJpdG1hcCB1c2Vk X2luX2NvcHkpCiAJfQogICAgIH0KIAotICAvKiBOb3cgcHJvY2VzcyByZXN1 bHQgZGVjbHMgYW5kIGxpdmUgb24gZW50cnkgdmFyaWFibGVzIGZvciBlbnRy eSBpbnRvCi0gICAgIHRoZSBjb2FsZXNjZSBsaXN0LiAgKi8KKyAgcmV0dXJu IGNsOworfQorCisKKy8qIEhhc2h0YWJsZSBzdXBwb3J0IGZvciBzdG9yaW5n IFNTQSBuYW1lcyBoYXNoZWQgYnkgdGhlaXIgU1NBX05BTUVfVkFSLiAgKi8K Kworc3RydWN0IHNzYV9uYW1lX3Zhcl9oYXNoIDogbm9mcmVlX3B0cl9oYXNo IDx0cmVlX25vZGU+Cit7CisgIHN0YXRpYyBpbmxpbmUgaGFzaHZhbF90IGhh c2ggKGNvbnN0IHRyZWVfbm9kZSAqKTsKKyAgc3RhdGljIGlubGluZSBpbnQg ZXF1YWwgKGNvbnN0IHRyZWVfbm9kZSAqLCBjb25zdCB0cmVlX25vZGUgKik7 Cit9OworCitpbmxpbmUgaGFzaHZhbF90Citzc2FfbmFtZV92YXJfaGFzaDo6 aGFzaCAoY29uc3RfdHJlZSBuKQoreworICByZXR1cm4gREVDTF9VSUQgKFNT QV9OQU1FX1ZBUiAobikpOworfQorCitpbmxpbmUgaW50Citzc2FfbmFtZV92 YXJfaGFzaDo6ZXF1YWwgKGNvbnN0IHRyZWVfbm9kZSAqbjEsIGNvbnN0IHRy ZWVfbm9kZSAqbjIpCit7CisgIHJldHVybiBTU0FfTkFNRV9WQVIgKG4xKSA9 PSBTU0FfTkFNRV9WQVIgKG4yKTsKK30KKworCisvKiBUaGlzIGZ1bmN0aW9u IHBvcHVsYXRlcyBjb2FsZXNjZSBsaXN0IENMIGFzIHdlbGwgYXMgcmVjb3Jk aW5nIHJlbGF0ZWQgc3NhCisgICBuYW1lcyBpbiBVU0VEX0lOX0NPUElFUyBm b3IgdXNlIGxhdGVyIGluIHRoZSBvdXQtb2Ytc3NhIHByb2Nlc3MuICAqLwor CitzdGF0aWMgdm9pZAorcG9wdWxhdGVfY29hbGVzY2VfbGlzdF9mb3Jfb3V0 b2Zzc2EgKGNvYWxlc2NlX2xpc3QgKmNsLCBiaXRtYXAgdXNlZF9pbl9jb3B5 KQoreworICB0cmVlIHZhcjsKKyAgdHJlZSBmaXJzdDsKKyAgaW50IHYxLCB2 MiwgY29zdDsKKyAgdW5zaWduZWQgaTsKKworICAvKiBQcm9jZXNzIHJlc3Vs dCBkZWNscyBhbmQgbGl2ZSBvbiBlbnRyeSB2YXJpYWJsZXMgZm9yIGVudHJ5 IGludG8gdGhlCisgICAgIGNvYWxlc2NlIGxpc3QuICAqLwogICBmaXJzdCA9 IE5VTExfVFJFRTsKICAgRk9SX0VBQ0hfU1NBX05BTUUgKGksIHZhciwgY2Z1 bikKICAgICB7CkBAIC0xMjg1LDcgKzEyNzksNDYgQEAgY3JlYXRlX291dG9m c3NhX3Zhcl9tYXAgKGNvYWxlc2NlX2xpc3QgKmNsLCBiaXRtYXAgdXNlZF9p bl9jb3B5KQogCX0KICAgICB9CiAKLSAgcmV0dXJuIG1hcDsKKyAgLyogSWYg dGhpcyBvcHRpbWl6YXRpb24gaXMgZGlzYWJsZWQsIHdlIG5lZWQgdG8gY29h bGVzY2UgYWxsIHRoZQorICAgICBuYW1lcyBvcmlnaW5hdGluZyBmcm9tIHRo ZSBzYW1lIFNTQV9OQU1FX1ZBUiBzbyBkZWJ1ZyBpbmZvCisgICAgIHJlbWFp bnMgdW5kaXN0dXJiZWQuICAqLworICBpZiAoIWZsYWdfdHJlZV9jb2FsZXNj ZV92YXJzKQorICAgIHsKKyAgICAgIHRyZWUgYTsKKyAgICAgIGhhc2hfdGFi bGU8c3NhX25hbWVfdmFyX2hhc2g+IHNzYV9uYW1lX2hhc2ggKDEwKTsKKwor ICAgICAgRk9SX0VBQ0hfU1NBX05BTUUgKGksIGEsIGNmdW4pCisJeworCSAg aWYgKFNTQV9OQU1FX1ZBUiAoYSkKKwkgICAgICAmJiAhREVDTF9JR05PUkVE X1AgKFNTQV9OQU1FX1ZBUiAoYSkpCisJICAgICAgJiYgKCFoYXNfemVyb191 c2VzIChhKSB8fCAhU1NBX05BTUVfSVNfREVGQVVMVF9ERUYgKGEpCisJCSAg fHwgIVZBUl9QIChTU0FfTkFNRV9WQVIgKGEpKSkpCisJICAgIHsKKwkgICAg ICB0cmVlICpzbG90ID0gc3NhX25hbWVfaGFzaC5maW5kX3Nsb3QgKGEsIElO U0VSVCk7CisKKwkgICAgICBpZiAoISpzbG90KQorCQkqc2xvdCA9IGE7CisJ ICAgICAgZWxzZQorCQl7CisJCSAgLyogSWYgdGhlIHZhcmlhYmxlIGlzIGEg UEFSTV9ERUNMIG9yIGEgUkVTVUxUX0RFQ0wsIHdlCisJCSAgICAgX3JlcXVp cmVfIHRoYXQgYWxsIHRoZSBuYW1lcyBvcmlnaW5hdGluZyBmcm9tIGl0IGJl CisJCSAgICAgY29hbGVzY2VkLCBiZWNhdXNlIHRoZXJlIG11c3QgYmUgYSBz aW5nbGUgcGFydGl0aW9uCisJCSAgICAgY29udGFpbmluZyBhbGwgdGhlIG5h bWVzIHNvIHRoYXQgaXQgY2FuIGJlIGFzc2lnbmVkCisJCSAgICAgdGhlIGNh bm9uaWNhbCBSVEwgbG9jYXRpb24gb2YgdGhlIERFQ0wgc2FmZWx5LgorCQkg ICAgIElmIGluX2x0b19wLCBhIGZ1bmN0aW9uIGNvdWxkIGhhdmUgYmVlbiBj b21waWxlZAorCQkgICAgIG9yaWdpbmFsbHkgd2l0aCBvcHRpbWl6YXRpb25z IGFuZCBvbmx5IHRoZSBsaW5rCisJCSAgICAgcGVyZm9ybWVkIGF0IC1PMCwg c28gd2UgY2FuJ3QgYWN0dWFsbHkgcmVxdWlyZSBpdC4gICovCisJCSAgY29u c3QgaW50IGNvc3QKKwkJICAgID0gKFRSRUVfQ09ERSAoU1NBX05BTUVfVkFS IChhKSkgPT0gVkFSX0RFQ0wgfHwgaW5fbHRvX3ApCisJCSAgICAgID8gTVVT VF9DT0FMRVNDRV9DT1NUIC0gMSA6IE1VU1RfQ09BTEVTQ0VfQ09TVDsKKwkJ ICBhZGRfY29hbGVzY2UgKGNsLCBTU0FfTkFNRV9WRVJTSU9OIChhKSwKKwkJ CQlTU0FfTkFNRV9WRVJTSU9OICgqc2xvdCksIGNvc3QpOworCQkgIGJpdG1h cF9zZXRfYml0ICh1c2VkX2luX2NvcHksIFNTQV9OQU1FX1ZFUlNJT04gKGEp KTsKKwkJICBiaXRtYXBfc2V0X2JpdCAodXNlZF9pbl9jb3B5LCBTU0FfTkFN RV9WRVJTSU9OICgqc2xvdCkpOworCQl9CisJICAgIH0KKwl9CisgICAgfQog fQogCiAKQEAgLTEzODQsMTMgKzE0MTcsMTUgQEAgY29hbGVzY2VfcGFydGl0 aW9ucyAodmFyX21hcCBtYXAsIHNzYV9jb25mbGljdHMgKmdyYXBoLCBjb2Fs ZXNjZV9saXN0ICpjbCwKIAkJIGdzaV9uZXh0ICgmZ3NpKSkKIAkgICAgICB7 CiAJCWdwaGkgKnBoaSA9IGdzaS5waGkgKCk7CisJCXRyZWUgcmVzID0gUEhJ X1JFU1VMVCAocGhpKTsKKwkJaWYgKHZpcnR1YWxfb3BlcmFuZF9wIChyZXMp KQorCQkgIGNvbnRpbnVlOwogCQl0cmVlIGFyZyA9IFBISV9BUkdfREVGIChw aGksIGUtPmRlc3RfaWR4KTsKIAkJaWYgKFNTQV9OQU1FX0lTX0RFRkFVTFRf REVGIChhcmcpCiAJCSAgICAmJiAoIVNTQV9OQU1FX1ZBUiAoYXJnKQogCQkJ fHwgVFJFRV9DT0RFIChTU0FfTkFNRV9WQVIgKGFyZykpICE9IFBBUk1fREVD TCkpCiAJCSAgY29udGludWU7CiAKLQkJdHJlZSByZXMgPSBQSElfUkVTVUxU IChwaGkpOwogCQlpbnQgdjEgPSBTU0FfTkFNRV9WRVJTSU9OIChyZXMpOwog CQlpbnQgdjIgPSBTU0FfTkFNRV9WRVJTSU9OIChhcmcpOwogCkBAIC0xNDIw LDI3ICsxNDU1LDYgQEAgY29hbGVzY2VfcGFydGl0aW9ucyAodmFyX21hcCBt YXAsIHNzYV9jb25mbGljdHMgKmdyYXBoLCBjb2FsZXNjZV9saXN0ICpjbCwK IH0KIAogCi0vKiBIYXNodGFibGUgc3VwcG9ydCBmb3Igc3RvcmluZyBTU0Eg bmFtZXMgaGFzaGVkIGJ5IHRoZWlyIFNTQV9OQU1FX1ZBUi4gICovCi0KLXN0 cnVjdCBzc2FfbmFtZV92YXJfaGFzaCA6IG5vZnJlZV9wdHJfaGFzaCA8dHJl ZV9ub2RlPgotewotICBzdGF0aWMgaW5saW5lIGhhc2h2YWxfdCBoYXNoIChj b25zdCB0cmVlX25vZGUgKik7Ci0gIHN0YXRpYyBpbmxpbmUgaW50IGVxdWFs IChjb25zdCB0cmVlX25vZGUgKiwgY29uc3QgdHJlZV9ub2RlICopOwotfTsK LQotaW5saW5lIGhhc2h2YWxfdAotc3NhX25hbWVfdmFyX2hhc2g6Omhhc2gg KGNvbnN0X3RyZWUgbikKLXsKLSAgcmV0dXJuIERFQ0xfVUlEIChTU0FfTkFN RV9WQVIgKG4pKTsKLX0KLQotaW5saW5lIGludAotc3NhX25hbWVfdmFyX2hh c2g6OmVxdWFsIChjb25zdCB0cmVlX25vZGUgKm4xLCBjb25zdCB0cmVlX25v ZGUgKm4yKQotewotICByZXR1cm4gU1NBX05BTUVfVkFSIChuMSkgPT0gU1NB X05BTUVfVkFSIChuMik7Ci19Ci0KLQogLyogT3V0cHV0IHBhcnRpdGlvbiBt YXAgTUFQIHdpdGggY29hbGVzY2luZyBwbGFuIFBBUlQgdG8gZmlsZSBGLiAg Ki8KIAogdm9pZApAQCAtMTYyOSw4ICsxNjQzLDkgQEAgY29tcHV0ZV9vcHRp bWl6ZWRfcGFydGl0aW9uX2Jhc2VzICh2YXJfbWFwIG1hcCwgYml0bWFwIHVz ZWRfaW5fY29waWVzLAogICAvKiBBbmQgYWxzbyB3aXRoIGFibm9ybWFsIGVk Z2VzLiAgKi8KICAgYmFzaWNfYmxvY2sgYmI7CiAgIGVkZ2UgZTsKKyAgdW5z aWduZWQgaTsKICAgZWRnZV9pdGVyYXRvciBlaTsKLSAgRk9SX0VBQ0hfQkJf Rk4gKGJiLCBjZnVuKQorICBmb3IgKGkgPSAwOyBtYXAtPnZlY19iYnMuaXRl cmF0ZSAoaSwgJmJiKTsgKytpKQogICAgIHsKICAgICAgIEZPUl9FQUNIX0VE R0UgKGUsIGVpLCBiYi0+cHJlZHMpCiAJaWYgKGUtPmZsYWdzICYgRURHRV9B Qk5PUk1BTCkKQEAgLTE2NDAsMTQgKzE2NTUsMTUgQEAgY29tcHV0ZV9vcHRp bWl6ZWRfcGFydGl0aW9uX2Jhc2VzICh2YXJfbWFwIG1hcCwgYml0bWFwIHVz ZWRfaW5fY29waWVzLAogCQkgZ3NpX25leHQgKCZnc2kpKQogCSAgICAgIHsK IAkJZ3BoaSAqcGhpID0gZ3NpLnBoaSAoKTsKKwkJdHJlZSByZXMgPSBQSElf UkVTVUxUIChwaGkpOworCQlpZiAodmlydHVhbF9vcGVyYW5kX3AgKHJlcykp CisJCSAgY29udGludWU7CiAJCXRyZWUgYXJnID0gUEhJX0FSR19ERUYgKHBo aSwgZS0+ZGVzdF9pZHgpOwogCQlpZiAoU1NBX05BTUVfSVNfREVGQVVMVF9E RUYgKGFyZykKIAkJICAgICYmICghU1NBX05BTUVfVkFSIChhcmcpCiAJCQl8 fCBUUkVFX0NPREUgKFNTQV9OQU1FX1ZBUiAoYXJnKSkgIT0gUEFSTV9ERUNM KSkKIAkJICBjb250aW51ZTsKIAotCQl0cmVlIHJlcyA9IFBISV9SRVNVTFQg KHBoaSk7Ci0KIAkJaW50IHAxID0gcGFydGl0aW9uX2ZpbmQgKHRlbnRhdGl2 ZSwgdmFyX3RvX3BhcnRpdGlvbiAobWFwLCByZXMpKTsKIAkJaW50IHAyID0g cGFydGl0aW9uX2ZpbmQgKHRlbnRhdGl2ZSwgdmFyX3RvX3BhcnRpdGlvbiAo bWFwLCBhcmcpKTsKIApAQCAtMTY3NSw3ICsxNjkxLDYgQEAgY29tcHV0ZV9v cHRpbWl6ZWRfcGFydGl0aW9uX2Jhc2VzICh2YXJfbWFwIG1hcCwgYml0bWFw IHVzZWRfaW5fY29waWVzLAogICAgICBiZXR3ZWVuIGFsbCBTU0EgdmVyc2lv bnMgdGhhdCBlbmRlZCB1cCBpbiB0aGUgc2FtZSBwb3RlbnRpYWwKICAgICAg Y29hbGVzY2UgcGFydGl0aW9uLiAgKi8KICAgYml0bWFwX2l0ZXJhdG9yIGJp OwotICB1bnNpZ25lZCBpOwogICBFWEVDVVRFX0lGX1NFVF9JTl9CSVRNQVAg KHVzZWRfaW5fY29waWVzLCAwLCBpLCBiaSkKICAgICB7CiAgICAgICBpbnQg cGlkeCA9IHZhcl90b19wYXJ0aXRpb24gKG1hcCwgc3NhX25hbWUgKGkpKTsK QEAgLTE3ODQsNjIgKzE3OTksMjIgQEAgY29tcHV0ZV9zYW1lYmFzZV9wYXJ0 aXRpb25fYmFzZXMgKHZhcl9tYXAgbWFwKQogICBmcmVlIChtYXBzdG9yYWdl KTsKIH0KIAotLyogUmVkdWNlIHRoZSBudW1iZXIgb2YgY29waWVzIGJ5IGNv YWxlc2NpbmcgdmFyaWFibGVzIGluIHRoZSBmdW5jdGlvbi4gIFJldHVybgot ICAgYSBwYXJ0aXRpb24gbWFwIHdpdGggdGhlIHJlc3VsdGluZyBjb2FsZXNj ZXMuICAqLworLyogR2l2ZW4gYW4gaW5pdGlhbCB2YXJfbWFwIE1BUCwgY29h bGVzY2UgdmFyaWFibGVzIGFuZCByZXR1cm4gYSBwYXJ0aXRpb24gbWFwCisg ICB3aXRoIHRoZSByZXN1bHRpbmcgY29hbGVzY2UuICBOb3RlIHRoYXQgdGhp cyBmdW5jdGlvbiBpcyBjYWxsZWQgaW4gZWl0aGVyCisgICBsaXZlIHJhbmdl IGNvbXB1dGF0aW9uIGNvbnRleHQgb3Igb3V0LW9mLXNzYSBjb250ZXh0LCBp bmRpY2F0ZWQgYnkgTUFQLiAgKi8KIAotZXh0ZXJuIHZhcl9tYXAKLWNvYWxl c2NlX3NzYV9uYW1lICh2b2lkKQorZXh0ZXJuIHZvaWQKK2NvYWxlc2NlX3Nz YV9uYW1lICh2YXJfbWFwIG1hcCkKIHsKICAgdHJlZV9saXZlX2luZm9fcCBs aXZlaW5mbzsKICAgc3NhX2NvbmZsaWN0cyAqZ3JhcGg7CiAgIGNvYWxlc2Nl X2xpc3QgKmNsOwogICBhdXRvX2JpdG1hcCB1c2VkX2luX2NvcGllczsKLSAg dmFyX21hcCBtYXA7Ci0gIHVuc2lnbmVkIGludCBpOwotICB0cmVlIGE7CiAK LSAgY2wgPSBjcmVhdGVfY29hbGVzY2VfbGlzdCAoKTsKLSAgbWFwID0gY3Jl YXRlX291dG9mc3NhX3Zhcl9tYXAgKGNsLCB1c2VkX2luX2NvcGllcyk7Cisg IGNsID0gY3JlYXRlX2NvYWxlc2NlX2xpc3RfZm9yX3JlZ2lvbiAobWFwLCB1 c2VkX2luX2NvcGllcyk7CisgIGlmIChtYXAtPm91dG9mc3NhX3ApCisgICAg cG9wdWxhdGVfY29hbGVzY2VfbGlzdF9mb3Jfb3V0b2Zzc2EgKGNsLCB1c2Vk X2luX2NvcGllcyk7CiAKLSAgLyogSWYgdGhpcyBvcHRpbWl6YXRpb24gaXMg ZGlzYWJsZWQsIHdlIG5lZWQgdG8gY29hbGVzY2UgYWxsIHRoZQotICAgICBu YW1lcyBvcmlnaW5hdGluZyBmcm9tIHRoZSBzYW1lIFNTQV9OQU1FX1ZBUiBz byBkZWJ1ZyBpbmZvCi0gICAgIHJlbWFpbnMgdW5kaXN0dXJiZWQuICAqLwot ICBpZiAoIWZsYWdfdHJlZV9jb2FsZXNjZV92YXJzKQotICAgIHsKLSAgICAg IGhhc2hfdGFibGU8c3NhX25hbWVfdmFyX2hhc2g+IHNzYV9uYW1lX2hhc2gg KDEwKTsKLQotICAgICAgRk9SX0VBQ0hfU1NBX05BTUUgKGksIGEsIGNmdW4p Ci0JewotCSAgaWYgKFNTQV9OQU1FX1ZBUiAoYSkKLQkgICAgICAmJiAhREVD TF9JR05PUkVEX1AgKFNTQV9OQU1FX1ZBUiAoYSkpCi0JICAgICAgJiYgKCFo YXNfemVyb191c2VzIChhKSB8fCAhU1NBX05BTUVfSVNfREVGQVVMVF9ERUYg KGEpCi0JCSAgfHwgIVZBUl9QIChTU0FfTkFNRV9WQVIgKGEpKSkpCi0JICAg IHsKLQkgICAgICB0cmVlICpzbG90ID0gc3NhX25hbWVfaGFzaC5maW5kX3Ns b3QgKGEsIElOU0VSVCk7Ci0KLQkgICAgICBpZiAoISpzbG90KQotCQkqc2xv dCA9IGE7Ci0JICAgICAgZWxzZQotCQl7Ci0JCSAgLyogSWYgdGhlIHZhcmlh YmxlIGlzIGEgUEFSTV9ERUNMIG9yIGEgUkVTVUxUX0RFQ0wsIHdlCi0JCSAg ICAgX3JlcXVpcmVfIHRoYXQgYWxsIHRoZSBuYW1lcyBvcmlnaW5hdGluZyBm cm9tIGl0IGJlCi0JCSAgICAgY29hbGVzY2VkLCBiZWNhdXNlIHRoZXJlIG11 c3QgYmUgYSBzaW5nbGUgcGFydGl0aW9uCi0JCSAgICAgY29udGFpbmluZyBh bGwgdGhlIG5hbWVzIHNvIHRoYXQgaXQgY2FuIGJlIGFzc2lnbmVkCi0JCSAg ICAgdGhlIGNhbm9uaWNhbCBSVEwgbG9jYXRpb24gb2YgdGhlIERFQ0wgc2Fm ZWx5LgotCQkgICAgIElmIGluX2x0b19wLCBhIGZ1bmN0aW9uIGNvdWxkIGhh dmUgYmVlbiBjb21waWxlZAotCQkgICAgIG9yaWdpbmFsbHkgd2l0aCBvcHRp bWl6YXRpb25zIGFuZCBvbmx5IHRoZSBsaW5rCi0JCSAgICAgcGVyZm9ybWVk IGF0IC1PMCwgc28gd2UgY2FuJ3QgYWN0dWFsbHkgcmVxdWlyZSBpdC4gICov Ci0JCSAgY29uc3QgaW50IGNvc3QKLQkJICAgID0gKFRSRUVfQ09ERSAoU1NB X05BTUVfVkFSIChhKSkgPT0gVkFSX0RFQ0wgfHwgaW5fbHRvX3ApCi0JCSAg ICAgID8gTVVTVF9DT0FMRVNDRV9DT1NUIC0gMSA6IE1VU1RfQ09BTEVTQ0Vf Q09TVDsKLQkJICBhZGRfY29hbGVzY2UgKGNsLCBTU0FfTkFNRV9WRVJTSU9O IChhKSwKLQkJCQlTU0FfTkFNRV9WRVJTSU9OICgqc2xvdCksIGNvc3QpOwot CQkgIGJpdG1hcF9zZXRfYml0ICh1c2VkX2luX2NvcGllcywgU1NBX05BTUVf VkVSU0lPTiAoYSkpOwotCQkgIGJpdG1hcF9zZXRfYml0ICh1c2VkX2luX2Nv cGllcywgU1NBX05BTUVfVkVSU0lPTiAoKnNsb3QpKTsKLQkJfQotCSAgICB9 Ci0JfQotICAgIH0KICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAm IFRERl9ERVRBSUxTKSkKICAgICBkdW1wX3Zhcl9tYXAgKGR1bXBfZmlsZSwg bWFwKTsKIApAQCAtMTg1Myw3ICsxODI4LDcgQEAgY29hbGVzY2Vfc3NhX25h bWUgKHZvaWQpCiAgIGlmIChudW1fdmFyX3BhcnRpdGlvbnMgKG1hcCkgPCAx KQogICAgIHsKICAgICAgIGRlbGV0ZV9jb2FsZXNjZV9saXN0IChjbCk7Ci0g ICAgICByZXR1cm4gbWFwOworICAgICAgcmV0dXJuOwogICAgIH0KIAogICBp ZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RFVEFJTFMpKQpA QCAtMTg5MCw3NSArMTg2NSw1IEBAIGNvYWxlc2NlX3NzYV9uYW1lICh2b2lk KQogCiAgIGRlbGV0ZV9jb2FsZXNjZV9saXN0IChjbCk7CiAgIHNzYV9jb25m bGljdHNfZGVsZXRlIChncmFwaCk7Ci0KLSAgcmV0dXJuIG1hcDsKIH0KIAot LyogV2UgbmVlZCB0byBwYXNzIHR3byBhcmd1bWVudHMgdG8gc2V0X3Bhcm1f ZGVmYXVsdF9kZWZfcGFydGl0aW9uLAotICAgYnV0IGZvcl9hbGxfcGFybXMg b25seSBzdXBwb3J0cyBvbmUuICBVc2UgYSBwYWlyLiAgKi8KLQotdHlwZWRl ZiBzdGQ6OnBhaXI8dmFyX21hcCwgYml0bWFwPiBwYXJtX2RlZmF1bHRfZGVm X3BhcnRpdGlvbl9hcmc7Ci0KLS8qIFNldCBpbiBBUkcncyBQQVJUUyBiaXRt YXAgdGhlIGJpdCBjb3JyZXNwb25kaW5nIHRvIHRoZSBwYXJ0aXRpb24gaW4K LSAgIEFSRydzIE1BUCBjb250YWluaW5nIFZBUidzIGRlZmF1bHQgZGVmLiAg Ki8KLQotc3RhdGljIHZvaWQKLXNldF9wYXJtX2RlZmF1bHRfZGVmX3BhcnRp dGlvbiAodHJlZSB2YXIsIHZvaWQgKmFyZ18pCi17Ci0gIHBhcm1fZGVmYXVs dF9kZWZfcGFydGl0aW9uX2FyZyAqYXJnID0gKHBhcm1fZGVmYXVsdF9kZWZf cGFydGl0aW9uX2FyZyAqKWFyZ187Ci0gIHZhcl9tYXAgbWFwID0gYXJnLT5m aXJzdDsKLSAgYml0bWFwIHBhcnRzID0gYXJnLT5zZWNvbmQ7Ci0KLSAgaWYg KCFpc19naW1wbGVfcmVnICh2YXIpKQotICAgIHJldHVybjsKLQotICB0cmVl IHNzYSA9IHNzYV9kZWZhdWx0X2RlZiAoY2Z1biwgdmFyKTsKLSAgZ2NjX2Fz c2VydCAoc3NhKTsKLQotICBpbnQgdmVyc2lvbiA9IHZhcl90b19wYXJ0aXRp b24gKG1hcCwgc3NhKTsKLSAgZ2NjX2Fzc2VydCAodmVyc2lvbiAhPSBOT19Q QVJUSVRJT04pOwotCi0gIGJvb2wgY2hhbmdlZCA9IGJpdG1hcF9zZXRfYml0 IChwYXJ0cywgdmVyc2lvbik7Ci0gIGdjY19hc3NlcnQgKGNoYW5nZWQpOwot fQotCi0vKiBBbGxvY2F0ZSBhbmQgcmV0dXJuIGEgYml0bWFwIHRoYXQgaGFz IGEgYml0IHNldCBmb3IgZWFjaCBwYXJ0aXRpb24KLSAgIHRoYXQgY29udGFp bnMgYSBkZWZhdWx0IGRlZiBmb3IgYSBwYXJhbWV0ZXIuICAqLwotCi1iaXRt YXAKLWdldF9wYXJtX2RlZmF1bHRfZGVmX3BhcnRpdGlvbnMgKHZhcl9tYXAg bWFwKQotewotICBiaXRtYXAgcGFybV9kZWZhdWx0X2RlZl9wYXJ0cyA9IEJJ VE1BUF9BTExPQyAoTlVMTCk7Ci0KLSAgcGFybV9kZWZhdWx0X2RlZl9wYXJ0 aXRpb25fYXJnCi0gICAgYXJnID0gc3RkOjptYWtlX3BhaXIgKG1hcCwgcGFy bV9kZWZhdWx0X2RlZl9wYXJ0cyk7Ci0KLSAgZm9yX2FsbF9wYXJtcyAoc2V0 X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9uLCAmYXJnKTsKLQotICByZXR1 cm4gcGFybV9kZWZhdWx0X2RlZl9wYXJ0czsKLX0KLQotLyogQWxsb2NhdGUg YW5kIHJldHVybiBhIGJpdG1hcCB0aGF0IGhhcyBhIGJpdCBzZXQgZm9yIGVh Y2ggcGFydGl0aW9uCi0gICB0aGF0IGNvbnRhaW5zIGFuIHVuZGVmaW5lZCB2 YWx1ZS4gICovCi0KLWJpdG1hcAotZ2V0X3VuZGVmaW5lZF92YWx1ZV9wYXJ0 aXRpb25zICh2YXJfbWFwIG1hcCkKLXsKLSAgYml0bWFwIHVuZGVmaW5lZF92 YWx1ZV9wYXJ0cyA9IEJJVE1BUF9BTExPQyAoTlVMTCk7Ci0KLSAgZm9yICh1 bnNpZ25lZCBpbnQgaSA9IDE7IGkgPCBudW1fc3NhX25hbWVzOyBpKyspCi0g ICAgewotICAgICAgdHJlZSB2YXIgPSBzc2FfbmFtZSAoaSk7Ci0gICAgICBp ZiAodmFyCi0JICAmJiAhdmlydHVhbF9vcGVyYW5kX3AgKHZhcikKLQkgICYm ICFoYXNfemVyb191c2VzICh2YXIpCi0JICAmJiBzc2FfdW5kZWZpbmVkX3Zh bHVlX3AgKHZhcikpCi0JewotCSAgY29uc3QgaW50IHAgPSB2YXJfdG9fcGFy dGl0aW9uIChtYXAsIHZhcik7Ci0JICBpZiAocCAhPSBOT19QQVJUSVRJT04p Ci0JICAgIGJpdG1hcF9zZXRfYml0ICh1bmRlZmluZWRfdmFsdWVfcGFydHMs IHApOwotCX0KLSAgICB9Ci0KLSAgcmV0dXJuIHVuZGVmaW5lZF92YWx1ZV9w YXJ0czsKLX0KZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1jb2FsZXNjZS5o IGIvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgKaW5kZXggODlkODQ3NC4uZjc4 NzYzNyAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgKKysr IGIvZ2NjL3RyZWUtc3NhLWNvYWxlc2NlLmgKQEAgLTIwLDkgKzIwLDcgQEAg YWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICNpZm5kZWYgR0NDX1RSRUVfU1NBX0NPQUxFU0NFX0gKICNkZWZp bmUgR0NDX1RSRUVfU1NBX0NPQUxFU0NFX0gKIAotZXh0ZXJuIHZhcl9tYXAg Y29hbGVzY2Vfc3NhX25hbWUgKHZvaWQpOworZXh0ZXJuIHZvaWQgY29hbGVz Y2Vfc3NhX25hbWUgKHZhcl9tYXApOwogZXh0ZXJuIGJvb2wgZ2ltcGxlX2Nh bl9jb2FsZXNjZV9wICh0cmVlLCB0cmVlKTsKLWV4dGVybiBiaXRtYXAgZ2V0 X3Bhcm1fZGVmYXVsdF9kZWZfcGFydGl0aW9ucyAodmFyX21hcCk7Ci1leHRl cm4gYml0bWFwIGdldF91bmRlZmluZWRfdmFsdWVfcGFydGl0aW9ucyAodmFy X21hcCk7CiAKICNlbmRpZiAvKiBHQ0NfVFJFRV9TU0FfQ09BTEVTQ0VfSCAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLWxpdmUuYyBiL2djYy90cmVl LXNzYS1saXZlLmMKaW5kZXggNjIzMTZiYS4uNzQ0N2Y3YSAxMDA2NDQKLS0t IGEvZ2NjL3RyZWUtc3NhLWxpdmUuYworKysgYi9nY2MvdHJlZS1zc2EtbGl2 ZS5jCkBAIC03MSwxMCArNzEsMTIgQEAgdmFyX21hcF9iYXNlX2ZpbmkgKHZh cl9tYXAgbWFwKQogICAgICAgbWFwLT5udW1fYmFzZXZhcnMgPSAwOwogICAg IH0KIH0KLS8qIENyZWF0ZSBhIHZhcmlhYmxlIHBhcnRpdGlvbiBtYXAgb2Yg U0laRSwgaW5pdGlhbGl6ZSBhbmQgcmV0dXJuIGl0LiAgKi8KKy8qIENyZWF0 ZSBhIHZhcmlhYmxlIHBhcnRpdGlvbiBtYXAgb2YgU0laRSBmb3IgcmVnaW9u LCBpbml0aWFsaXplIGFuZCByZXR1cm4KKyAgIGl0LiAgUmVnaW9uIGlzIGEg bG9vcCBpZiBMT09QIGlzIG5vbi1OVUxMLCBvdGhlcndpc2UgaXMgdGhlIGN1 cnJlbnQKKyAgIGZ1bmN0aW9uLiAgKi8KIAogdmFyX21hcAotaW5pdF92YXJf bWFwIChpbnQgc2l6ZSkKK2luaXRfdmFyX21hcCAoaW50IHNpemUsIHN0cnVj dCBsb29wICpsb29wKQogewogICB2YXJfbWFwIG1hcDsKIApAQCAtODcsNiAr ODksMjcgQEAgaW5pdF92YXJfbWFwIChpbnQgc2l6ZSkKICAgbWFwLT5wYXJ0 aXRpb25fc2l6ZSA9IHNpemU7CiAgIG1hcC0+bnVtX2Jhc2V2YXJzID0gMDsK ICAgbWFwLT5wYXJ0aXRpb25fdG9fYmFzZV9pbmRleCA9IE5VTEw7CisgIG1h cC0+dmVjX2JicyA9IHZOVUxMOworICBpZiAobG9vcCkKKyAgICB7CisgICAg ICBtYXAtPmJtcF9iYnMgPSBCSVRNQVBfQUxMT0MgKE5VTEwpOworICAgICAg bWFwLT5vdXRvZnNzYV9wID0gZmFsc2U7CisgICAgICBiYXNpY19ibG9jayAq YmJzID0gZ2V0X2xvb3BfYm9keV9pbl9kb21fb3JkZXIgKGxvb3ApOworICAg ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxvb3AtPm51bV9ub2Rlczsg KytpKQorCXsKKwkgIGJpdG1hcF9zZXRfYml0IChtYXAtPmJtcF9iYnMsIGJi c1tpXS0+aW5kZXgpOworCSAgbWFwLT52ZWNfYmJzLnNhZmVfcHVzaCAoYmJz W2ldKTsKKwl9CisgICAgICBmcmVlIChiYnMpOworICAgIH0KKyAgZWxzZQor ICAgIHsKKyAgICAgIG1hcC0+Ym1wX2JicyA9IE5VTEw7CisgICAgICBtYXAt Pm91dG9mc3NhX3AgPSB0cnVlOworICAgICAgYmFzaWNfYmxvY2sgYmI7Cisg ICAgICBGT1JfRUFDSF9CQl9GTiAoYmIsIGNmdW4pCisJbWFwLT52ZWNfYmJz LnNhZmVfcHVzaCAoYmIpOworICAgIH0KICAgcmV0dXJuIG1hcDsKIH0KIApA QCAtMTAwLDYgKzEyMyw5IEBAIGRlbGV0ZV92YXJfbWFwICh2YXJfbWFwIG1h cCkKICAgcGFydGl0aW9uX2RlbGV0ZSAobWFwLT52YXJfcGFydGl0aW9uKTsK ICAgZnJlZSAobWFwLT5wYXJ0aXRpb25fdG9fdmlldyk7CiAgIGZyZWUgKG1h cC0+dmlld190b19wYXJ0aXRpb24pOworICBpZiAobWFwLT5ibXBfYmJzKQor ICAgIEJJVE1BUF9GUkVFIChtYXAtPmJtcF9iYnMpOworICBtYXAtPnZlY19i YnMucmVsZWFzZSAoKTsKICAgZnJlZSAobWFwKTsKIH0KIApAQCAtOTAxLDEz ICs5MjcsMTQgQEAgbmV3X3RyZWVfbGl2ZV9pbmZvICh2YXJfbWFwIG1hcCkK IAogICBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplICgmbGl2ZS0+bGl2ZWlu X29ic3RhY2spOwogICBiaXRtYXBfb2JzdGFja19pbml0aWFsaXplICgmbGl2 ZS0+bGl2ZW91dF9vYnN0YWNrKTsKLSAgbGl2ZS0+bGl2ZWluID0gWE5FV1ZF QyAoYml0bWFwX2hlYWQsIGxhc3RfYmFzaWNfYmxvY2tfZm9yX2ZuIChjZnVu KSk7Ci0gIEZPUl9FQUNIX0JCX0ZOIChiYiwgY2Z1bikKLSAgICBiaXRtYXBf aW5pdGlhbGl6ZSAoJmxpdmUtPmxpdmVpbltiYi0+aW5kZXhdLCAmbGl2ZS0+ bGl2ZWluX29ic3RhY2spOwogCi0gIGxpdmUtPmxpdmVvdXQgPSBYTkVXVkVD IChiaXRtYXBfaGVhZCwgbGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNmdW4p KTsKLSAgRk9SX0VBQ0hfQkJfRk4gKGJiLCBjZnVuKQotICAgIGJpdG1hcF9p bml0aWFsaXplICgmbGl2ZS0+bGl2ZW91dFtiYi0+aW5kZXhdLCAmbGl2ZS0+ bGl2ZW91dF9vYnN0YWNrKTsKKyAgbGl2ZS0+bGl2ZWluID0gWENORVdWRUMg KGJpdG1hcF9oZWFkLCBsYXN0X2Jhc2ljX2Jsb2NrX2Zvcl9mbiAoY2Z1bikp OworICBsaXZlLT5saXZlb3V0ID0gWENORVdWRUMgKGJpdG1hcF9oZWFkLCBs YXN0X2Jhc2ljX2Jsb2NrX2Zvcl9mbiAoY2Z1bikpOworICBmb3IgKHVuc2ln bmVkIGkgPSAwOyBtYXAtPnZlY19iYnMuaXRlcmF0ZSAoaSwgJmJiKTsgKytp KQorICAgIHsKKyAgICAgIGJpdG1hcF9pbml0aWFsaXplICgmbGl2ZS0+bGl2 ZWluW2JiLT5pbmRleF0sICZsaXZlLT5saXZlaW5fb2JzdGFjayk7CisgICAg ICBiaXRtYXBfaW5pdGlhbGl6ZSAoJmxpdmUtPmxpdmVvdXRbYmItPmluZGV4 XSwgJmxpdmUtPmxpdmVvdXRfb2JzdGFjayk7CisgICAgfQogCiAgIGxpdmUt Pndvcmtfc3RhY2sgPSBYTkVXVkVDIChpbnQsIGxhc3RfYmFzaWNfYmxvY2tf Zm9yX2ZuIChjZnVuKSk7CiAgIGxpdmUtPnN0YWNrX3RvcCA9IGxpdmUtPndv cmtfc3RhY2s7CkBAIC05NjAsNyArOTg3LDcgQEAgbG9lX3Zpc2l0X2Jsb2Nr ICh0cmVlX2xpdmVfaW5mb19wIGxpdmUsIGJhc2ljX2Jsb2NrIGJiLCBzYml0 bWFwIHZpc2l0ZWQpCiAgIEZPUl9FQUNIX0VER0UgKGUsIGVpLCBiYi0+cHJl ZHMpCiAgICAgewogICAgICAgcHJlZF9iYiA9IGUtPnNyYzsKLSAgICAgIGlm IChwcmVkX2JiID09IEVOVFJZX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pKQor ICAgICAgaWYgKCFyZWdpb25fY29udGFpbnNfcCAobGl2ZS0+bWFwLCBwcmVk X2JiKSkKIAljb250aW51ZTsKICAgICAgIC8qIFZhcmlhYmxlcyBsaXZlLW9u LWVudHJ5IGZyb20gQkIgdGhhdCBhcmVuJ3QgZGVmaW5lZCBpbiB0aGUKIAkg cHJlZGVjZXNzb3IgYmxvY2suICBUaGlzIHNob3VsZCBiZSB0aGUgbGl2ZSBv biBlbnRyeSB2YXJzIHRvIHByZWQuCkBAIC05OTMsOSArMTAyMCwxMCBAQCBs aXZlX3dvcmtsaXN0ICh0cmVlX2xpdmVfaW5mb19wIGxpdmUpCiAKICAgYml0 bWFwX2NsZWFyICh2aXNpdGVkKTsKIAotICAvKiBWaXNpdCBhbGwgdGhlIGJs b2NrcyBpbiByZXZlcnNlIG9yZGVyIGFuZCBwcm9wYWdhdGUgbGl2ZSBvbiBl bnRyeSB2YWx1ZXMKKyAgLyogVmlzaXQgcmVnaW9uJ3MgYmxvY2tzIGluIHJl dmVyc2Ugb3JkZXIgYW5kIHByb3BhZ2F0ZSBsaXZlIG9uIGVudHJ5IHZhbHVl cwogICAgICBpbnRvIHRoZSBwcmVkZWNlc3NvcnMgYmxvY2tzLiAgKi8KLSAg Rk9SX0VBQ0hfQkJfUkVWRVJTRV9GTiAoYmIsIGNmdW4pCisgIGZvciAodW5z aWduZWQgaSA9IGxpdmUtPm1hcC0+dmVjX2Jicy5sZW5ndGggKCkgLSAxOwor ICAgICAgIGxpdmUtPm1hcC0+dmVjX2Jicy5pdGVyYXRlIChpLCAmYmIpOyAt LWkpCiAgICAgbG9lX3Zpc2l0X2Jsb2NrIChsaXZlLCBiYiwgdmlzaXRlZCk7 CiAKICAgLyogUHJvY2VzcyBhbnkgYmxvY2tzIHdoaWNoIHJlcXVpcmUgZnVy dGhlciBpdGVyYXRpb24uICAqLwpAQCAtMTAzMCw3ICsxMDU4LDcgQEAgc2V0 X3Zhcl9saXZlX29uX2VudHJ5ICh0cmVlIHNzYV9uYW1lLCB0cmVlX2xpdmVf aW5mb19wIGxpdmUpCiAgICAgewogICAgICAgZGVmX2JiID0gZ2ltcGxlX2Ji IChzdG10KTsKICAgICAgIC8qIE1hcmsgZGVmcyBpbiBsaXZlb3V0IGJpdG1h cCB0ZW1wb3JhcmlseS4gICovCi0gICAgICBpZiAoZGVmX2JiKQorICAgICAg aWYgKGRlZl9iYiAmJiByZWdpb25fY29udGFpbnNfcCAobGl2ZS0+bWFwLCBk ZWZfYmIpKQogCWJpdG1hcF9zZXRfYml0ICgmbGl2ZS0+bGl2ZW91dFtkZWZf YmItPmluZGV4XSwgcCk7CiAgICAgfQogICBlbHNlCkBAIC0xMDU0LDExICsx MDgyLDggQEAgc2V0X3Zhcl9saXZlX29uX2VudHJ5ICh0cmVlIHNzYV9uYW1l LCB0cmVlX2xpdmVfaW5mb19wIGxpdmUpCiAJICAgICBkZWZpbmVkIGluIHRo YXQgYmxvY2ssIG9yIHdoZXRoZXIgaXRzIGxpdmUgb24gZW50cnkuICAqLwog CSAgaW50IGluZGV4ID0gUEhJX0FSR19JTkRFWF9GUk9NX1VTRSAodXNlKTsK IAkgIGVkZ2UgZSA9IGdpbXBsZV9waGlfYXJnX2VkZ2UgKGFzX2EgPGdwaGkg Kj4gKHVzZV9zdG10KSwgaW5kZXgpOwotCSAgaWYgKGUtPnNyYyAhPSBFTlRS WV9CTE9DS19QVFJfRk9SX0ZOIChjZnVuKSkKLQkgICAgewotCSAgICAgIGlm IChlLT5zcmMgIT0gZGVmX2JiKQotCQlhZGRfYmxvY2sgPSBlLT5zcmM7Ci0J ICAgIH0KKwkgIGlmIChlLT5zcmMgIT0gZGVmX2JiICYmIHJlZ2lvbl9jb250 YWluc19wIChsaXZlLT5tYXAsIGUtPnNyYykpCisJICAgIGFkZF9ibG9jayA9 IGUtPnNyYzsKIAl9CiAgICAgICBlbHNlIGlmIChpc19naW1wbGVfZGVidWcg KHVzZV9zdG10KSkKIAljb250aW51ZTsKQEAgLTEwNjYsNyArMTA5MSw3IEBA IHNldF92YXJfbGl2ZV9vbl9lbnRyeSAodHJlZSBzc2FfbmFtZSwgdHJlZV9s aXZlX2luZm9fcCBsaXZlKQogICAgICAgICB7CiAJICAvKiBJZiBpdHMgbm90 IGRlZmluZWQgaW4gdGhpcyBibG9jaywgaXRzIGxpdmUgb24gZW50cnkuICAq LwogCSAgYmFzaWNfYmxvY2sgdXNlX2JiID0gZ2ltcGxlX2JiICh1c2Vfc3Rt dCk7Ci0JICBpZiAodXNlX2JiICE9IGRlZl9iYikKKwkgIGlmICh1c2VfYmIg IT0gZGVmX2JiICYmIHJlZ2lvbl9jb250YWluc19wIChsaXZlLT5tYXAsIHVz ZV9iYikpCiAJICAgIGFkZF9ibG9jayA9IHVzZV9iYjsKIAl9CiAKQEAgLTEw OTUsNyArMTEyMCw3IEBAIGNhbGN1bGF0ZV9saXZlX29uX2V4aXQgKHRyZWVf bGl2ZV9pbmZvX3AgbGl2ZWluZm8pCiAgIGVkZ2VfaXRlcmF0b3IgZWk7CiAK ICAgLyogbGl2ZSBvbiBlbnRyeSBjYWxjdWxhdGlvbnMgdXNlZCBsaXZlb3V0 IHZlY3RvcnMgZm9yIGRlZnMsIGNsZWFyIHRoZW0uICAqLwotICBGT1JfRUFD SF9CQl9GTiAoYmIsIGNmdW4pCisgIGZvciAodW5zaWduZWQgaSA9IDA7IGxp dmVpbmZvLT5tYXAtPnZlY19iYnMuaXRlcmF0ZSAoaSwgJmJiKTsgKytpKQog ICAgIGJpdG1hcF9jbGVhciAoJmxpdmVpbmZvLT5saXZlb3V0W2JiLT5pbmRl eF0pOwogCiAgIC8qIFNldCBhbGwgdGhlIGxpdmUtb24tZXhpdCBiaXRzIGZv ciB1c2VzIGluIFBISXMuICAqLwpAQCAtMTEwOCw2ICsxMTMzLDggQEAgY2Fs Y3VsYXRlX2xpdmVfb25fZXhpdCAodHJlZV9saXZlX2luZm9fcCBsaXZlaW5m bykKICAgICAgIGZvciAoZ3NpID0gZ3NpX3N0YXJ0X3BoaXMgKGJiKTsgIWdz aV9lbmRfcCAoZ3NpKTsgZ3NpX25leHQgKCZnc2kpKQogCXsKIAkgIGdwaGkg KnBoaSA9IGdzaS5waGkgKCk7CisJICBpZiAodmlydHVhbF9vcGVyYW5kX3Ag KGdpbXBsZV9waGlfcmVzdWx0IChwaGkpKSkKKwkgICAgY29udGludWU7CiAJ ICBmb3IgKGkgPSAwOyBpIDwgZ2ltcGxlX3BoaV9udW1fYXJncyAocGhpKTsg aSsrKQogCSAgICB7CiAJICAgICAgdHJlZSB0ID0gUEhJX0FSR19ERUYgKHBo aSwgaSk7CkBAIC0xMTIwLDE0ICsxMTQ3LDE3IEBAIGNhbGN1bGF0ZV9saXZl X29uX2V4aXQgKHRyZWVfbGl2ZV9pbmZvX3AgbGl2ZWluZm8pCiAJICAgICAg aWYgKHAgPT0gTk9fUEFSVElUSU9OKQogCQljb250aW51ZTsKIAkgICAgICBl ID0gZ2ltcGxlX3BoaV9hcmdfZWRnZSAocGhpLCBpKTsKLQkgICAgICBpZiAo ZS0+c3JjICE9IEVOVFJZX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pKQorCSAg ICAgIGlmIChyZWdpb25fY29udGFpbnNfcCAobGl2ZWluZm8tPm1hcCwgZS0+ c3JjKSkKIAkJYml0bWFwX3NldF9iaXQgKCZsaXZlaW5mby0+bGl2ZW91dFtl LT5zcmMtPmluZGV4XSwgcCk7CiAJICAgIH0KIAl9CiAKKyAgICAgIGlmICgh cmVnaW9uX2NvbnRhaW5zX3AgKGxpdmVpbmZvLT5tYXAsIGJiKSkKKwljb250 aW51ZTsKKwogICAgICAgLyogQWRkIGVhY2ggc3VjY2Vzc29ycyBsaXZlIG9u IGVudHJ5IHRvIHRoaXMgYm9jayBsaXZlIG9uIGV4aXQuICAqLwogICAgICAg Rk9SX0VBQ0hfRURHRSAoZSwgZWksIGJiLT5zdWNjcykKLQlpZiAoZS0+ZGVz dCAhPSBFWElUX0JMT0NLX1BUUl9GT1JfRk4gKGNmdW4pKQorCWlmIChyZWdp b25fY29udGFpbnNfcCAobGl2ZWluZm8tPm1hcCwgZS0+ZGVzdCkpCiAJICBi aXRtYXBfaW9yX2ludG8gKCZsaXZlaW5mby0+bGl2ZW91dFtiYi0+aW5kZXhd LAogCQkJICAgbGl2ZV9vbl9lbnRyeSAobGl2ZWluZm8sIGUtPmRlc3QpKTsK ICAgICB9CkBAIC0xMzE0LDcgKzEzNDQsNyBAQCB2ZXJpZnlfbGl2ZV9vbl9l bnRyeSAodHJlZV9saXZlX2luZm9fcCBsaXZlKQogICBGT1JfRUFDSF9FREdF IChlLCBlaSwgYmItPnN1Y2NzKQogICAgIHsKICAgICAgIGludCBlbnRyeV9i bG9jayA9IGUtPmRlc3QtPmluZGV4OwotICAgICAgaWYgKGUtPmRlc3QgPT0g RVhJVF9CTE9DS19QVFJfRk9SX0ZOIChjZnVuKSkKKyAgICAgIGlmICghcmVn aW9uX2NvbnRhaW5zX3AgKGxpdmUtPm1hcCwgZS0+ZGVzdCkpCiAgICAgICAg IGNvbnRpbnVlOwogICAgICAgZm9yIChpID0gMDsgaSA8ICh1bnNpZ25lZClu dW1fdmFyX3BhcnRpdGlvbnMgKG1hcCk7IGkrKykKIAl7CkBAIC0xMzgwLDYg KzE0MTAsOCBAQCB2ZXJpZnlfbGl2ZV9vbl9lbnRyeSAodHJlZV9saXZlX2lu Zm9fcCBsaXZlKQogCQkgICAgIGdzaV9uZXh0ICgmZ3NpKSkKIAkJICB7CiAJ CSAgICBncGhpICpwaGkgPSBnc2kucGhpICgpOworCQkgICAgaWYgKHZpcnR1 YWxfb3BlcmFuZF9wIChnaW1wbGVfcGhpX3Jlc3VsdCAocGhpKSkpCisJCSAg ICAgIGNvbnRpbnVlOwogCQkgICAgZm9yICh6ID0gMDsgeiA8IGdpbXBsZV9w aGlfbnVtX2FyZ3MgKHBoaSk7IHorKykKIAkJICAgICAgaWYgKHZhciA9PSBn aW1wbGVfcGhpX2FyZ19kZWYgKHBoaSwgeikpCiAJCQl7CmRpZmYgLS1naXQg YS9nY2MvdHJlZS1zc2EtbGl2ZS5oIGIvZ2NjL3RyZWUtc3NhLWxpdmUuaApp bmRleCA0NDhhYWY5Li45YWE1NDE4IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1z c2EtbGl2ZS5oCisrKyBiL2djYy90cmVlLXNzYS1saXZlLmgKQEAgLTYyLDEz ICs2MiwyNSBAQCB0eXBlZGVmIHN0cnVjdCBfdmFyX21hcAogCiAgIC8qIE1h cCBvZiBwYXJ0aXRpb25zIG51bWJlcnMgdG8gYmFzZSB2YXJpYWJsZSB0YWJs ZSBpbmRleGVzLiAgKi8KICAgaW50ICpwYXJ0aXRpb25fdG9fYmFzZV9pbmRl eDsKKworICAvKiBCaXRtYXAgb2YgYmFzaWMgYmxvY2suICBJdCBkZXNjcmli ZXMgdGhlIHJlZ2lvbiB3aXRoaW4gd2hpY2ggdGhlIGFuYWx5c2lzCisgICAg IGlzIGRvbmUuICBVc2luZyBwb2ludGVyIGF2b2lkcyBhbGxvY2F0aW5nIG1l bW9yeSBpbiBvdXQtb2Ytc3NhIGNhc2UuICAqLworICBiaXRtYXAgYm1wX2Ji czsKKworICAvKiBWZWN0b3Igb2YgYmFzaWMgYmxvY2sgaW4gdGhlIHJlZ2lv bi4gICovCisgIHZlYzxiYXNpY19ibG9jaz4gdmVjX2JiczsKKworICAvKiBU cnVlIGlmIHRoaXMgbWFwIGlzIGZvciBvdXQtb2Ytc3NhLCBvdGhlcndpc2Ug Zm9yIGxpdmUgcmFuZ2UKKyAgICAgY29tcHV0YXRpb24uICBXaGVuIGZvciBv dXQtb2Ytc3NhLCBpdCBhbHNvIG1lYW5zIHRoZSB2YXIgbWFwIGlzIGNvbXB1 dGVkCisgICAgIGZvciB3aG9sZSBjdXJyZW50IGZ1bmN0aW9uLiAgKi8KKyAg Ym9vbCBvdXRvZnNzYV9wOwogfSAqdmFyX21hcDsKIAogCiAvKiBWYWx1ZSB1 c2VkIHRvIHJlcHJlc2VudCBubyBwYXJ0aXRpb24gbnVtYmVyLiAgKi8KICNk ZWZpbmUgTk9fUEFSVElUSU9OCQktMQogCi1leHRlcm4gdmFyX21hcCBpbml0 X3Zhcl9tYXAgKGludCk7CitleHRlcm4gdmFyX21hcCBpbml0X3Zhcl9tYXAg KGludCwgc3RydWN0IGxvb3AqID0gTlVMTCk7CiBleHRlcm4gdm9pZCBkZWxl dGVfdmFyX21hcCAodmFyX21hcCk7CiBleHRlcm4gaW50IHZhcl91bmlvbiAo dmFyX21hcCwgdHJlZSwgdHJlZSk7CiBleHRlcm4gdm9pZCBwYXJ0aXRpb25f dmlld19ub3JtYWwgKHZhcl9tYXApOwpAQCAtODIsNiArOTQsMTkgQEAgZXh0 ZXJuIHZvaWQgZGVidWcgKF92YXJfbWFwICZyZWYpOwogZXh0ZXJuIHZvaWQg ZGVidWcgKF92YXJfbWFwICpwdHIpOwogCiAKKy8qIFJldHVybiBUUlVFIGlm IHJlZ2lvbiBvZiB0aGUgTUFQIGNvbnRhaW5zIGJhc2ljIGJsb2NrIEJCLiAg Ki8KKworaW5saW5lIGJvb2wKK3JlZ2lvbl9jb250YWluc19wICh2YXJfbWFw IG1hcCwgYmFzaWNfYmxvY2sgYmIpCit7CisgIC8qIEl0J3MgcG9zc2libGUg dGhhdCB0aGUgZnVuY3Rpb24gaXMgY2FsbGVkIHdpdGggRU5UUllfQkxPQ0sv RVhJVF9CTE9DSy4gICovCisgIGlmIChtYXAtPm91dG9mc3NhX3ApCisgICAg cmV0dXJuIChiYi0+aW5kZXggIT0gRU5UUllfQkxPQ0sgJiYgYmItPmluZGV4 ICE9IEVYSVRfQkxPQ0spOworCisgIHJldHVybiBiaXRtYXBfYml0X3AgKG1h cC0+Ym1wX2JicywgYmItPmluZGV4KTsKK30KKworCiAvKiBSZXR1cm4gbnVt YmVyIG9mIHBhcnRpdGlvbnMgaW4gTUFQLiAgKi8KIAogc3RhdGljIGlubGlu ZSB1bnNpZ25lZAotLSAKMS45LjEKCg== --000000000000790551056c68c9c5--