From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mx0a-001b2d01.pphosted.com (mx0b-001b2d01.pphosted.com [148.163.158.5]) by sourceware.org (Postfix) with ESMTPS id BD386383D820 for ; Tue, 27 Jul 2021 02:11:04 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BD386383D820 Received: from pps.filterd (m0098420.ppops.net [127.0.0.1]) by mx0b-001b2d01.pphosted.com (8.16.0.43/8.16.0.43) with SMTP id 16R231Yu076906; Mon, 26 Jul 2021 22:11:01 -0400 Received: from pps.reinject (localhost [127.0.0.1]) by mx0b-001b2d01.pphosted.com with ESMTP id 3a27s1a2vy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Jul 2021 22:11:00 -0400 Received: from m0098420.ppops.net (m0098420.ppops.net [127.0.0.1]) by pps.reinject (8.16.0.43/8.16.0.43) with SMTP id 16R23Bnq077319; Mon, 26 Jul 2021 22:11:00 -0400 Received: from ppma04ams.nl.ibm.com (63.31.33a9.ip4.static.sl-reverse.com [169.51.49.99]) by mx0b-001b2d01.pphosted.com with ESMTP id 3a27s1a2v1-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Mon, 26 Jul 2021 22:11:00 -0400 Received: from pps.filterd (ppma04ams.nl.ibm.com [127.0.0.1]) by ppma04ams.nl.ibm.com (8.16.1.2/8.16.1.2) with SMTP id 16R24r87012187; Tue, 27 Jul 2021 02:10:58 GMT Received: from b06cxnps4074.portsmouth.uk.ibm.com (d06relay11.portsmouth.uk.ibm.com [9.149.109.196]) by ppma04ams.nl.ibm.com with ESMTP id 3a235m040v-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 27 Jul 2021 02:10:58 +0000 Received: from d06av22.portsmouth.uk.ibm.com (d06av22.portsmouth.uk.ibm.com [9.149.105.58]) by b06cxnps4074.portsmouth.uk.ibm.com (8.14.9/8.14.9/NCO v10.0) with ESMTP id 16R2AtXZ23593414 (version=TLSv1/SSLv3 cipher=DHE-RSA-AES256-GCM-SHA384 bits=256 verify=OK); Tue, 27 Jul 2021 02:10:56 GMT Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id DC4114C040; Tue, 27 Jul 2021 02:10:55 +0000 (GMT) Received: from d06av22.portsmouth.uk.ibm.com (unknown [127.0.0.1]) by IMSVA (Postfix) with ESMTP id 1C7464C046; Tue, 27 Jul 2021 02:10:52 +0000 (GMT) Received: from KewenLins-MacBook-Pro.local (unknown [9.197.253.22]) by d06av22.portsmouth.uk.ibm.com (Postfix) with ESMTP; Tue, 27 Jul 2021 02:10:51 +0000 (GMT) Subject: [PATCH v4] Use range-based for loops for traversing loops To: Martin Sebor , GCC Patches Cc: Jakub Jelinek , Jonathan Wakely , Segher Boessenkool , Richard Sandiford , Bill Schmidt , tbsaunde@tbsaunde.org, Richard Biener References: <0a8b77ba-1d54-1eff-b54d-d2cb1e769e09@linux.ibm.com> <79a93b1f-6417-234c-a785-fdc598dfb92c@linux.ibm.com> From: "Kewen.Lin" Message-ID: Date: Tue, 27 Jul 2021 10:10:50 +0800 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:78.0) Gecko/20100101 Thunderbird/78.10.0 MIME-Version: 1.0 In-Reply-To: Content-Type: multipart/mixed; boundary="------------90C9C6949295D2E65C5B934F" Content-Language: en-US X-TM-AS-GCONF: 00 X-Proofpoint-GUID: 9LVbRUJezkxUBvJKIPlAz2NxCO7zDALy X-Proofpoint-ORIG-GUID: LXjhgvlfb53Z__XDz48zEgvkBBBulq8Y X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:6.0.391, 18.0.790 definitions=2021-07-26_14:2021-07-26, 2021-07-26 signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 clxscore=1015 mlxlogscore=999 malwarescore=0 spamscore=0 lowpriorityscore=0 bulkscore=0 priorityscore=1501 phishscore=0 suspectscore=0 mlxscore=0 impostorscore=0 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.12.0-2107140000 definitions=main-2107270010 X-Spam-Status: No, score=-10.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_EF, GIT_PATCH_0, RCVD_IN_MSPIKE_H2, SPF_HELO_NONE, SPF_PASS, TXREP autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 27 Jul 2021 02:11:09 -0000 This is a multi-part message in MIME format. --------------90C9C6949295D2E65C5B934F Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit on 2021/7/24 上午12:10, Martin Sebor wrote: > On 7/23/21 2:35 AM, Kewen.Lin wrote: >> Hi, >> >> Comparing to v2, this v3 removed the new CTOR with struct loops *loops >> as Richi clarified.  I'd like to support it in a separated follow up >> patch by extending the existing CTOR with an optional argument loop_p >> root. > > Looks very nice (and quite a bit work)!  Thanks again! > > Not to make even more work for you, but it occurred to me that > the declaration of the loop control variable could be simplified > by the use of auto like so: > >  for (auto loop: loops_list (cfun, ...)) > Thanks for the suggestion! Updated in v4 accordingly. I was under the impression to use C++11 auto is arguable since it sometimes may make things less clear. But I think you are right, using auto here won't make it harder to read but more concise. Thanks again. > I spotted what looks to me like a few minor typos in the docs > diff: > > diff --git a/gcc/doc/loop.texi b/gcc/doc/loop.texi > index a135656ed01..27697b08728 100644 > --- a/gcc/doc/loop.texi > +++ b/gcc/doc/loop.texi > @@ -79,14 +79,14 @@ and its subloops in the numbering.  The index of a loop never changes. > > The entries of the @code{larray} field should not be accessed directly. > The function @code{get_loop} returns the loop description for a loop with > -the given index.  @code{number_of_loops} function returns number of > -loops in the function.  To traverse all loops, use @code{FOR_EACH_LOOP} > -macro.  The @code{flags} argument of the macro is used to determine > -the direction of traversal and the set of loops visited.  Each loop is > -guaranteed to be visited exactly once, regardless of the changes to the > -loop tree, and the loops may be removed during the traversal.  The newly > -created loops are never traversed, if they need to be visited, this > -must be done separately after their creation. > +the given index.  @code{number_of_loops} function returns number of loops > +in the function.  To traverse all loops, use range-based for loop with > > Missing article: > >   use a range-based for loop > > +class @code{loop_list} instance. The @code{flags} argument of the macro > > Is that loop_list or loops_list? > > IIUC, it's also not a macro anymore, right?  The flags argument > is passed to the loop_list ctor, no? > Oops, thanks for catching all above ones! Fixed in v4. Bootstrapped and regtested again on powerpc64le-linux-gnu P9, x86_64-redhat-linux and aarch64-linux-gnu, also bootstrapped again on ppc64le P9 with bootstrap-O3 config. Is it ok for trunk? BR, Kewen ----- gcc/ChangeLog: * cfgloop.h (as_const): New function. (class loop_iterator): Rename to ... (class loops_list): ... this. (loop_iterator::next): Rename to ... (loops_list::Iter::fill_curr_loop): ... this and adjust. (loop_iterator::loop_iterator): Rename to ... (loops_list::loops_list): ... this and adjust. (loops_list::Iter): New class. (loops_list::iterator): New type. (loops_list::const_iterator): New type. (loops_list::begin): New function. (loops_list::end): Likewise. (loops_list::begin const): Likewise. (loops_list::end const): Likewise. (FOR_EACH_LOOP): Remove. (FOR_EACH_LOOP_FN): Remove. * cfgloop.c (flow_loops_dump): Adjust FOR_EACH_LOOP* with range-based for loop with loops_list instance. (sort_sibling_loops): Likewise. (disambiguate_loops_with_multiple_latches): Likewise. (verify_loop_structure): Likewise. * cfgloopmanip.c (create_preheaders): Likewise. (force_single_succ_latches): Likewise. * config/aarch64/falkor-tag-collision-avoidance.c (execute_tag_collision_avoidance): Likewise. * config/mn10300/mn10300.c (mn10300_scan_for_setlb_lcc): Likewise. * config/s390/s390.c (s390_adjust_loops): Likewise. * doc/loop.texi: Likewise. * gimple-loop-interchange.cc (pass_linterchange::execute): Likewise. * gimple-loop-jam.c (tree_loop_unroll_and_jam): Likewise. * gimple-loop-versioning.cc (loop_versioning::analyze_blocks): Likewise. (loop_versioning::make_versioning_decisions): Likewise. * gimple-ssa-split-paths.c (split_paths): Likewise. * graphite-isl-ast-to-gimple.c (graphite_regenerate_ast_isl): Likewise. * graphite.c (canonicalize_loop_form): Likewise. (graphite_transform_loops): Likewise. * ipa-fnsummary.c (analyze_function_body): Likewise. * ipa-pure-const.c (analyze_function): Likewise. * loop-doloop.c (doloop_optimize_loops): Likewise. * loop-init.c (loop_optimizer_finalize): Likewise. (fix_loop_structure): Likewise. * loop-invariant.c (calculate_loop_reg_pressure): Likewise. (move_loop_invariants): Likewise. * loop-unroll.c (decide_unrolling): Likewise. (unroll_loops): Likewise. * modulo-sched.c (sms_schedule): Likewise. * predict.c (predict_loops): Likewise. (pass_profile::execute): Likewise. * profile.c (branch_prob): Likewise. * sel-sched-ir.c (sel_finish_pipelining): Likewise. (sel_find_rgns): Likewise. * tree-cfg.c (replace_loop_annotate): Likewise. (replace_uses_by): Likewise. (move_sese_region_to_fn): Likewise. * tree-if-conv.c (pass_if_conversion::execute): Likewise. * tree-loop-distribution.c (loop_distribution::execute): Likewise. * tree-parloops.c (parallelize_loops): Likewise. * tree-predcom.c (tree_predictive_commoning): Likewise. * tree-scalar-evolution.c (scev_initialize): Likewise. (scev_reset): Likewise. * tree-ssa-dce.c (find_obviously_necessary_stmts): Likewise. * tree-ssa-live.c (remove_unused_locals): Likewise. * tree-ssa-loop-ch.c (ch_base::copy_headers): Likewise. * tree-ssa-loop-im.c (analyze_memory_references): Likewise. (tree_ssa_lim_initialize): Likewise. * tree-ssa-loop-ivcanon.c (canonicalize_induction_variables): Likewise. * tree-ssa-loop-ivopts.c (tree_ssa_iv_optimize): Likewise. * tree-ssa-loop-manip.c (get_loops_exits): Likewise. * tree-ssa-loop-niter.c (estimate_numbers_of_iterations): Likewise. (free_numbers_of_iterations_estimates): Likewise. * tree-ssa-loop-prefetch.c (tree_ssa_prefetch_arrays): Likewise. * tree-ssa-loop-split.c (tree_ssa_split_loops): Likewise. * tree-ssa-loop-unswitch.c (tree_ssa_unswitch_loops): Likewise. * tree-ssa-loop.c (gate_oacc_kernels): Likewise. (pass_scev_cprop::execute): Likewise. * tree-ssa-propagate.c (clean_up_loop_closed_phi): Likewise. * tree-ssa-sccvn.c (do_rpo_vn): Likewise. * tree-ssa-threadupdate.c (jump_thread_path_registry::thread_through_all_blocks): Likewise. * tree-vectorizer.c (vectorize_loops): Likewise. * tree-vrp.c (vrp_asserts::find_assert_locations): Likewise. --------------90C9C6949295D2E65C5B934F Content-Type: text/plain; charset=UTF-8; x-mac-type="0"; x-mac-creator="0"; name="range-based-v4.patch" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="range-based-v4.patch" LS0tCiBnY2MvY2ZnbG9vcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg MTkgKy0tCiBnY2MvY2ZnbG9vcC5oICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAxNDAgKysrKysrKysrKysrKy0tLS0tCiBnY2MvY2ZnbG9vcG1hbmlwLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIC4uLi9hYXJjaDY0L2ZhbGtvci10YWctY29s bGlzaW9uLWF2b2lkYW5jZS5jICB8ICAgNCArLQogZ2NjL2NvbmZpZy9tbjEwMzAwL21uMTAz MDAuYyAgICAgICAgICAgICAgICAgIHwgICA0ICstCiBnY2MvY29uZmlnL3MzOTAvczM5MC5j ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGdjYy9kb2MvbG9vcC50ZXhpICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAxMyArLQogZ2NjL2dpbXBsZS1sb29wLWlu dGVyY2hhbmdlLmNjICAgICAgICAgICAgICAgIHwgICAzICstCiBnY2MvZ2ltcGxlLWxvb3At amFtLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdjYy9naW1wbGUtbG9v cC12ZXJzaW9uaW5nLmNjICAgICAgICAgICAgICAgICB8ICAgNiArLQogZ2NjL2dpbXBsZS1z c2Etc3BsaXQtcGF0aHMuYyAgICAgICAgICAgICAgICAgIHwgICAzICstCiBnY2MvZ3JhcGhp dGUtaXNsLWFzdC10by1naW1wbGUuYyAgICAgICAgICAgICAgfCAgIDUgKy0KIGdjYy9ncmFw aGl0ZS5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgNiArLQogZ2NjL2lw YS1mbnN1bW1hcnkuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyICstCiBnY2Mv aXBhLXB1cmUtY29uc3QuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdj Yy9sb29wLWRvbG9vcC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQog Z2NjL2xvb3AtaW5pdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1ICst CiBnY2MvbG9vcC1pbnZhcmlhbnQuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTQg Ky0KIGdjYy9sb29wLXVucm9sbC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg NyArLQogZ2NjL21vZHVsby1zY2hlZC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg ICA1ICstCiBnY2MvcHJlZGljdC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDUgKy0KIGdjYy9wcm9maWxlLmMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB8ICAgMyArLQogZ2NjL3NlbC1zY2hlZC1pci5jICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgIDEyICstCiBnY2MvdHJlZS1jZmcuYyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgfCAgMTMgKy0KIGdjYy90cmVlLWlmLWNvbnYuYyAgICAgICAgICAgICAgICAgICAg ICAgICAgICB8ICAgMyArLQogZ2NjL3RyZWUtbG9vcC1kaXN0cmlidXRpb24uYyAgICAgICAg ICAgICAgICAgIHwgICAyICstCiBnY2MvdHJlZS1wYXJsb29wcy5jICAgICAgICAgICAgICAg ICAgICAgICAgICAgfCAgIDMgKy0KIGdjYy90cmVlLXByZWRjb20uYyAgICAgICAgICAgICAg ICAgICAgICAgICAgICB8ICAgMyArLQogZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jICAg ICAgICAgICAgICAgICAgIHwgIDE2ICstCiBnY2MvdHJlZS1zc2EtZGNlLmMgICAgICAgICAg ICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdjYy90cmVlLXNzYS1saXZlLmMgICAgICAg ICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogZ2NjL3RyZWUtc3NhLWxvb3AtY2guYyAg ICAgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBnY2MvdHJlZS1zc2EtbG9vcC1pbS5j ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIGdjYy90cmVlLXNzYS1sb29wLWl2 Y2Fub24uYyAgICAgICAgICAgICAgICAgICB8ICAgMyArLQogZ2NjL3RyZWUtc3NhLWxvb3At aXZvcHRzLmMgICAgICAgICAgICAgICAgICAgIHwgICAzICstCiBnY2MvdHJlZS1zc2EtbG9v cC1tYW5pcC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdjYy90cmVlLXNzYS1s b29wLW5pdGVyLmMgICAgICAgICAgICAgICAgICAgICB8ICAgOCArLQogZ2NjL3RyZWUtc3Nh LWxvb3AtcHJlZmV0Y2guYyAgICAgICAgICAgICAgICAgIHwgICAzICstCiBnY2MvdHJlZS1z c2EtbG9vcC1zcGxpdC5jICAgICAgICAgICAgICAgICAgICAgfCAgIDcgKy0KIGdjYy90cmVl LXNzYS1sb29wLXVuc3dpdGNoLmMgICAgICAgICAgICAgICAgICB8ICAgMyArLQogZ2NjL3Ry ZWUtc3NhLWxvb3AuYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA2ICstCiBnY2Mv dHJlZS1zc2EtcHJvcGFnYXRlLmMgICAgICAgICAgICAgICAgICAgICAgfCAgIDMgKy0KIGdj Yy90cmVlLXNzYS1zY2N2bi5jICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMyArLQog Z2NjL3RyZWUtc3NhLXRocmVhZHVwZGF0ZS5jICAgICAgICAgICAgICAgICAgIHwgICAzICst CiBnY2MvdHJlZS12ZWN0b3JpemVyLmMgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQg Ky0KIGdjYy90cmVlLXZycC5jICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg MyArLQogNDYgZmlsZXMgY2hhbmdlZCwgMTk0IGluc2VydGlvbnMoKyksIDE5NSBkZWxldGlv bnMoLSkKCmRpZmYgLS1naXQgYS9nY2MvY2ZnbG9vcC5jIGIvZ2NjL2NmZ2xvb3AuYwppbmRl eCBmMDk0NTM4YjlmZi4uNjI4NGFlMjkyYjYgMTAwNjQ0Ci0tLSBhL2djYy9jZmdsb29wLmMK KysrIGIvZ2NjL2NmZ2xvb3AuYwpAQCAtMTYyLDE0ICsxNjIsMTIgQEAgZmxvd19sb29wX2R1 bXAgKGNvbnN0IGNsYXNzIGxvb3AgKmxvb3AsIEZJTEUgKmZpbGUsCiB2b2lkCiBmbG93X2xv b3BzX2R1bXAgKEZJTEUgKmZpbGUsIHZvaWQgKCpsb29wX2R1bXBfYXV4KSAoY29uc3QgY2xh c3MgbG9vcCAqLCBGSUxFICosIGludCksIGludCB2ZXJib3NlKQogewotICBjbGFzcyBsb29w ICpsb29wOwotCiAgIGlmICghY3VycmVudF9sb29wcyB8fCAhIGZpbGUpCiAgICAgcmV0dXJu OwogCiAgIGZwcmludGYgKGZpbGUsICI7OyAlZCBsb29wcyBmb3VuZFxuIiwgbnVtYmVyX29m X2xvb3BzIChjZnVuKSk7CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfSU5DTFVERV9S T09UKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0lOQ0xVREVf Uk9PVCkpCiAgICAgewogICAgICAgZmxvd19sb29wX2R1bXAgKGxvb3AsIGZpbGUsIGxvb3Bf ZHVtcF9hdXgsIHZlcmJvc2UpOwogICAgIH0KQEAgLTU1OSw4ICs1NTcsNyBAQCBzb3J0X3Np YmxpbmdfbG9vcHMgKGZ1bmN0aW9uICpmbikKICAgZnJlZSAocmNfb3JkZXIpOwogCiAgIGF1 dG9fdmVjPGxvb3BfcCwgMz4gc2libGluZ3M7Ci0gIGxvb3BfcCBsb29wOwotICBGT1JfRUFD SF9MT09QX0ZOIChmbiwgbG9vcCwgTElfSU5DTFVERV9ST09UKQorICBmb3IgKGF1dG8gbG9v cCA6IGxvb3BzX2xpc3QgKGZuLCBMSV9JTkNMVURFX1JPT1QpKQogICAgIGlmIChsb29wLT5p bm5lciAmJiBsb29wLT5pbm5lci0+bmV4dCkKICAgICAgIHsKIAlsb29wX3Agc2libGluZyA9 IGxvb3AtPmlubmVyOwpAQCAtODM2LDkgKzgzMyw3IEBAIGRpc2FtYmlndWF0ZV9tdWx0aXBs ZV9sYXRjaGVzIChjbGFzcyBsb29wICpsb29wKQogdm9pZAogZGlzYW1iaWd1YXRlX2xvb3Bz X3dpdGhfbXVsdGlwbGVfbGF0Y2hlcyAodm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsK LQotICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3Bz X2xpc3QgKGNmdW4sIDApKQogICAgIHsKICAgICAgIGlmICghbG9vcC0+bGF0Y2gpCiAJZGlz YW1iaWd1YXRlX211bHRpcGxlX2xhdGNoZXMgKGxvb3ApOwpAQCAtMTQ1Nyw3ICsxNDUyLDcg QEAgdmVyaWZ5X2xvb3Bfc3RydWN0dXJlICh2b2lkKQogICBhdXRvX3NiaXRtYXAgdmlzaXRl ZCAobGFzdF9iYXNpY19ibG9ja19mb3JfZm4gKGNmdW4pKTsKICAgYml0bWFwX2NsZWFyICh2 aXNpdGVkKTsKICAgYmJzID0gWE5FV1ZFQyAoYmFzaWNfYmxvY2ssIG5fYmFzaWNfYmxvY2tz X2Zvcl9mbiAoY2Z1bikpOwotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9GUk9NX0lOTkVS TU9TVCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCBMSV9GUk9NX0lO TkVSTU9TVCkpCiAgICAgewogICAgICAgdW5zaWduZWQgbjsKIApAQCAtMTUwMyw3ICsxNDk4 LDcgQEAgdmVyaWZ5X2xvb3Bfc3RydWN0dXJlICh2b2lkKQogICBmcmVlIChiYnMpOwogCiAg IC8qIENoZWNrIGhlYWRlcnMgYW5kIGxhdGNoZXMuICAqLwotICBGT1JfRUFDSF9MT09QIChs b29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIDApKQogICAg IHsKICAgICAgIGkgPSBsb29wLT5udW07CiAgICAgICBpZiAobG9vcC0+aGVhZGVyID09IE5V TEwpCkBAIC0xNjI5LDcgKzE2MjQsNyBAQCB2ZXJpZnlfbG9vcF9zdHJ1Y3R1cmUgKHZvaWQp CiAgICAgfQogCiAgIC8qIENoZWNrIHRoZSByZWNvcmRlZCBsb29wIGV4aXRzLiAgKi8KLSAg Rk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0 IChjZnVuLCAwKSkKICAgICB7CiAgICAgICBpZiAoIWxvb3AtPmV4aXRzIHx8IGxvb3AtPmV4 aXRzLT5lICE9IE5VTEwpCiAJewpAQCAtMTcyMyw3ICsxNzE4LDcgQEAgdmVyaWZ5X2xvb3Bf c3RydWN0dXJlICh2b2lkKQogCSAgZXJyID0gMTsKIAl9CiAKLSAgICAgIEZPUl9FQUNIX0xP T1AgKGxvb3AsIDApCisgICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4s IDApKQogCXsKIAkgIGVsb29wcyA9IDA7CiAJICBmb3IgKGV4aXQgPSBsb29wLT5leGl0cy0+ bmV4dDsgZXhpdC0+ZTsgZXhpdCA9IGV4aXQtPm5leHQpCmRpZmYgLS1naXQgYS9nY2MvY2Zn bG9vcC5oIGIvZ2NjL2NmZ2xvb3AuaAppbmRleCA1ZTY5OTI3NmM4OC4uZDVlZWU2YjQ4NDAg MTAwNjQ0Ci0tLSBhL2djYy9jZmdsb29wLmgKKysrIGIvZ2NjL2NmZ2xvb3AuaApAQCAtNjU4 LDU1ICs2NTgsMTQxIEBAIGVudW0gbGlfZmxhZ3MKICAgTElfT05MWV9JTk5FUk1PU1QgPSA0 CQkvKiBJdGVyYXRlIG9ubHkgb3ZlciBpbm5lcm1vc3QgbG9vcHMuICAqLwogfTsKIAotLyog VGhlIGl0ZXJhdG9yIGZvciBsb29wcy4gICovCisvKiBQcm92aWRlIHRoZSBmdW5jdGlvbmFs aXR5IG9mIHN0ZDo6YXNfY29uc3QgdG8gc3VwcG9ydCByYW5nZS1iYXNlZCBmb3IKKyAgIHRv IHVzZSBjb25zdCBpdGVyYXRvci4gIChXZSBjYW4ndCB1c2Ugc3RkOjphc19jb25zdCBpdHNl bGYgYmVjYXVzZSBpdCdzCisgICBhIEMrKzE3IGZlYXR1cmUuKSAgKi8KK3RlbXBsYXRlIDx0 eXBlbmFtZSBUPgorY29uc3RleHByIGNvbnN0IFQgJgorYXNfY29uc3QgKFQgJnQpCit7Cisg IHJldHVybiB0OworfQorCisvKiBBIGxpc3QgZm9yIHZpc2l0aW5nIGxvb3BzLCB3aGljaCBj b250YWlucyB0aGUgbG9vcCBudW1iZXJzIGluc3RlYWQgb2YKKyAgIHRoZSBsb29wIHBvaW50 ZXJzLiAgVGhlIHNjb3BlIGlzIHJlc3RyaWN0ZWQgaW4gZnVuY3Rpb24gRk4gYW5kIHRoZQor ICAgdmlzaXRpbmcgb3JkZXIgaXMgc3BlY2lmaWVkIGJ5IEZMQUdTLiAgKi8KIAotY2xhc3Mg bG9vcF9pdGVyYXRvcgorY2xhc3MgbG9vcHNfbGlzdAogewogcHVibGljOgotICBsb29wX2l0 ZXJhdG9yIChmdW5jdGlvbiAqZm4sIGxvb3BfcCAqbG9vcCwgdW5zaWduZWQgZmxhZ3MpOwor ICBsb29wc19saXN0IChmdW5jdGlvbiAqZm4sIHVuc2lnbmVkIGZsYWdzKTsKKworICB0ZW1w bGF0ZSA8dHlwZW5hbWUgVD4gY2xhc3MgSXRlcgorICB7CisgIHB1YmxpYzoKKyAgICBJdGVy IChjb25zdCBsb29wc19saXN0ICZsLCB1bnNpZ25lZCBpZHgpIDogbGlzdCAobCksIGN1cnJf aWR4IChpZHgpCisgICAgeworICAgICAgZmlsbF9jdXJyX2xvb3AgKCk7CisgICAgfQorCisg ICAgVCBvcGVyYXRvciogKCkgY29uc3QgeyByZXR1cm4gY3Vycl9sb29wOyB9CisKKyAgICBJ dGVyICYKKyAgICBvcGVyYXRvcisrICgpCisgICAgeworICAgICAgaWYgKGN1cnJfaWR4IDwg bGlzdC50b192aXNpdC5sZW5ndGggKCkpCisJeworCSAgLyogQnVtcCB0aGUgaW5kZXggYW5k IGZpbGwgYSBuZXcgb25lLiAgKi8KKwkgIGN1cnJfaWR4Kys7CisJICBmaWxsX2N1cnJfbG9v cCAoKTsKKwl9CisgICAgICBlbHNlCisJZ2NjX2Fzc2VydCAoIWN1cnJfbG9vcCk7CisKKyAg ICAgIHJldHVybiAqdGhpczsKKyAgICB9CisKKyAgICBib29sCisgICAgb3BlcmF0b3IhPSAo Y29uc3QgSXRlciAmcmhzKSBjb25zdAorICAgIHsKKyAgICAgIHJldHVybiB0aGlzLT5jdXJy X2lkeCAhPSByaHMuY3Vycl9pZHg7CisgICAgfQorCisgIHByaXZhdGU6CisgICAgLyogRmls bCB0aGUgY3VycmVudCBsb29wIHN0YXJ0aW5nIGZyb20gdGhlIGN1cnJlbnQgaW5kZXguICAq LworICAgIHZvaWQgZmlsbF9jdXJyX2xvb3AgKCk7CisKKyAgICAvKiBSZWZlcmVuY2UgdG8g dGhlIGxvb3AgbGlzdCB0byB2aXNpdC4gICovCisgICAgY29uc3QgbG9vcHNfbGlzdCAmbGlz dDsKKworICAgIC8qIFRoZSBjdXJyZW50IGluZGV4IGluIHRoZSBsaXN0IHRvIHZpc2l0LiAg Ki8KKyAgICB1bnNpZ25lZCBjdXJyX2lkeDsKIAotICBpbmxpbmUgbG9vcF9wIG5leHQgKCk7 CisgICAgLyogVGhlIGxvb3AgaW1wbGllZCBieSB0aGUgY3VycmVudCBpbmRleC4gICovCisg ICAgY2xhc3MgbG9vcCAqY3Vycl9sb29wOworICB9OwogCisgIHVzaW5nIGl0ZXJhdG9yID0g SXRlcjxjbGFzcyBsb29wICo+OworICB1c2luZyBjb25zdF9pdGVyYXRvciA9IEl0ZXI8Y29u c3QgY2xhc3MgbG9vcCAqPjsKKworICBpdGVyYXRvcgorICBiZWdpbiAoKQorICB7CisgICAg cmV0dXJuIGl0ZXJhdG9yICgqdGhpcywgMCk7CisgIH0KKworICBpdGVyYXRvcgorICBlbmQg KCkKKyAgeworICAgIHJldHVybiBpdGVyYXRvciAoKnRoaXMsIHRvX3Zpc2l0Lmxlbmd0aCAo KSk7CisgIH0KKworICBjb25zdF9pdGVyYXRvcgorICBiZWdpbiAoKSBjb25zdAorICB7Cisg ICAgcmV0dXJuIGNvbnN0X2l0ZXJhdG9yICgqdGhpcywgMCk7CisgIH0KKworICBjb25zdF9p dGVyYXRvcgorICBlbmQgKCkgY29uc3QKKyAgeworICAgIHJldHVybiBjb25zdF9pdGVyYXRv ciAoKnRoaXMsIHRvX3Zpc2l0Lmxlbmd0aCAoKSk7CisgIH0KKworcHJpdmF0ZToKICAgLyog VGhlIGZ1bmN0aW9uIHdlIGFyZSB2aXNpdGluZy4gICovCiAgIGZ1bmN0aW9uICpmbjsKIAog ICAvKiBUaGUgbGlzdCBvZiBsb29wcyB0byB2aXNpdC4gICovCiAgIGF1dG9fdmVjPGludCwg MTY+IHRvX3Zpc2l0OwotCi0gIC8qIFRoZSBpbmRleCBvZiB0aGUgYWN0dWFsIGxvb3AuICAq LwotICB1bnNpZ25lZCBpZHg7CiB9OwogCi1pbmxpbmUgbG9vcF9wCi1sb29wX2l0ZXJhdG9y OjpuZXh0ICgpCisvKiBTdGFydGluZyBmcm9tIGN1cnJlbnQgaW5kZXggQ1VSUl9JRFggKGlu Y2x1c2l2ZSksIGZpbmQgb25lIGluZGV4CisgICB3aGljaCBzdGFuZHMgZm9yIG9uZSB2YWxp ZCBsb29wIGFuZCBmaWxsIHRoZSBmb3VuZCBsb29wIGFzIENVUlJfTE9PUCwKKyAgIGlmIHdl IGNhbid0IGZpbmQgb25lLCBzZXQgQ1VSUl9MT09QIGFzIG51bGwuICAqLworCit0ZW1wbGF0 ZSA8dHlwZW5hbWUgVD4KK2lubGluZSB2b2lkCitsb29wc19saXN0OjpJdGVyPFQ+OjpmaWxs X2N1cnJfbG9vcCAoKQogewogICBpbnQgYW51bTsKIAotICB3aGlsZSAodGhpcy0+dG9fdmlz aXQuaXRlcmF0ZSAodGhpcy0+aWR4LCAmYW51bSkpCisgIHdoaWxlICh0aGlzLT5saXN0LnRv X3Zpc2l0Lml0ZXJhdGUgKHRoaXMtPmN1cnJfaWR4LCAmYW51bSkpCiAgICAgewotICAgICAg dGhpcy0+aWR4Kys7Ci0gICAgICBsb29wX3AgbG9vcCA9IGdldF9sb29wIChmbiwgYW51bSk7 CisgICAgICBjbGFzcyBsb29wICpsb29wID0gZ2V0X2xvb3AgKHRoaXMtPmxpc3QuZm4sIGFu dW0pOwogICAgICAgaWYgKGxvb3ApCi0JcmV0dXJuIGxvb3A7CisJeworCSAgY3Vycl9sb29w ID0gbG9vcDsKKwkgIHJldHVybjsKKwl9CisgICAgICB0aGlzLT5jdXJyX2lkeCsrOwogICAg IH0KIAotICByZXR1cm4gTlVMTDsKKyAgY3Vycl9sb29wID0gbnVsbHB0cjsKIH0KIAotaW5s aW5lCi1sb29wX2l0ZXJhdG9yOjpsb29wX2l0ZXJhdG9yIChmdW5jdGlvbiAqZm4sIGxvb3Bf cCAqbG9vcCwgdW5zaWduZWQgZmxhZ3MpCisvKiBTZXQgdXAgdGhlIGxvb3BzIGxpc3QgdG8g dmlzaXQgYWNjb3JkaW5nIHRvIHRoZSBzcGVjaWZpZWQKKyAgIGZ1bmN0aW9uIHNjb3BlIEZO IGFuZCBpdGVyYXRpbmcgb3JkZXIgRkxBR1MuICAqLworCitpbmxpbmUgbG9vcHNfbGlzdDo6 bG9vcHNfbGlzdCAoZnVuY3Rpb24gKmZuLCB1bnNpZ25lZCBmbGFncykKIHsKICAgY2xhc3Mg bG9vcCAqYWxvb3A7CiAgIHVuc2lnbmVkIGk7CiAgIGludCBtbjsKIAotICB0aGlzLT5pZHgg PSAwOwogICB0aGlzLT5mbiA9IGZuOwogICBpZiAoIWxvb3BzX2Zvcl9mbiAoZm4pKQotICAg IHsKLSAgICAgICpsb29wID0gTlVMTDsKLSAgICAgIHJldHVybjsKLSAgICB9CisgICAgcmV0 dXJuOwogCiAgIHRoaXMtPnRvX3Zpc2l0LnJlc2VydmVfZXhhY3QgKG51bWJlcl9vZl9sb29w cyAoZm4pKTsKICAgbW4gPSAoZmxhZ3MgJiBMSV9JTkNMVURFX1JPT1QpID8gMCA6IDE7CkBA IC03NjYsMjAgKzg1Miw4IEBAIGxvb3BfaXRlcmF0b3I6Omxvb3BfaXRlcmF0b3IgKGZ1bmN0 aW9uICpmbiwgbG9vcF9wICpsb29wLCB1bnNpZ25lZCBmbGFncykKIAkgICAgfQogCX0KICAg ICB9Ci0KLSAgKmxvb3AgPSB0aGlzLT5uZXh0ICgpOwogfQogCi0jZGVmaW5lIEZPUl9FQUNI X0xPT1AoTE9PUCwgRkxBR1MpIFwKLSAgZm9yIChsb29wX2l0ZXJhdG9yIGxpKGNmdW4sICYo TE9PUCksIEZMQUdTKTsgXAotICAgICAgIChMT09QKTsgXAotICAgICAgIChMT09QKSA9IGxp Lm5leHQgKCkpCi0KLSNkZWZpbmUgRk9SX0VBQ0hfTE9PUF9GTihGTiwgTE9PUCwgRkxBR1Mp IFwKLSAgZm9yIChsb29wX2l0ZXJhdG9yIGxpKEZOLCAmKExPT1ApLCBGTEFHUyk7IFwKLSAg ICAgICAoTE9PUCk7IFwKLSAgICAgICAoTE9PUCkgPSBsaS5uZXh0ICgpKQotCiAvKiBUaGUg cHJvcGVydGllcyBvZiB0aGUgdGFyZ2V0LiAgKi8KIHN0cnVjdCB0YXJnZXRfY2ZnbG9vcCB7 CiAgIC8qIE51bWJlciBvZiBhdmFpbGFibGUgcmVnaXN0ZXJzLiAgKi8KZGlmZiAtLWdpdCBh L2djYy9jZmdsb29wbWFuaXAuYyBiL2djYy9jZmdsb29wbWFuaXAuYwppbmRleCAyYWY1OWZl ZGM5Mi4uODJjMjQyZGQ3MjAgMTAwNjQ0Ci0tLSBhL2djYy9jZmdsb29wbWFuaXAuYworKysg Yi9nY2MvY2ZnbG9vcG1hbmlwLmMKQEAgLTE1NzIsMTIgKzE1NzIsMTAgQEAgY3JlYXRlX3By ZWhlYWRlciAoY2xhc3MgbG9vcCAqbG9vcCwgaW50IGZsYWdzKQogdm9pZAogY3JlYXRlX3By ZWhlYWRlcnMgKGludCBmbGFncykKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKLQogICBpZiAo IWN1cnJlbnRfbG9vcHMpCiAgICAgcmV0dXJuOwogCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3As IDApCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgMCkpCiAgICAgY3Jl YXRlX3ByZWhlYWRlciAobG9vcCwgZmxhZ3MpOwogICBsb29wc19zdGF0ZV9zZXQgKExPT1BT X0hBVkVfUFJFSEVBREVSUyk7CiB9CkBAIC0xNTg3LDEwICsxNTg1LDkgQEAgY3JlYXRlX3By ZWhlYWRlcnMgKGludCBmbGFncykKIHZvaWQKIGZvcmNlX3NpbmdsZV9zdWNjX2xhdGNoZXMg KHZvaWQpCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIGVkZ2UgZTsKIAotICBGT1JfRUFD SF9MT09QIChsb29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4s IDApKQogICAgIHsKICAgICAgIGlmIChsb29wLT5sYXRjaCAhPSBsb29wLT5oZWFkZXIgJiYg c2luZ2xlX3N1Y2NfcCAobG9vcC0+bGF0Y2gpKQogCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEv Z2NjL2NvbmZpZy9hYXJjaDY0L2ZhbGtvci10YWctY29sbGlzaW9uLWF2b2lkYW5jZS5jIGIv Z2NjL2NvbmZpZy9hYXJjaDY0L2ZhbGtvci10YWctY29sbGlzaW9uLWF2b2lkYW5jZS5jCmlu ZGV4IGRlMjE0ZTRhMGY3Li42YzhlMDJhNTZhYiAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9h YXJjaDY0L2ZhbGtvci10YWctY29sbGlzaW9uLWF2b2lkYW5jZS5jCisrKyBiL2djYy9jb25m aWcvYWFyY2g2NC9mYWxrb3ItdGFnLWNvbGxpc2lvbi1hdm9pZGFuY2UuYwpAQCAtODA4LDgg KzgwOCw2IEBAIHJlY29yZF9sb2FkcyAodGFnX21hcF90ICZ0YWdfbWFwLCBzdHJ1Y3QgbG9v cCAqbG9vcCkKIHZvaWQKIGV4ZWN1dGVfdGFnX2NvbGxpc2lvbl9hdm9pZGFuY2UgKCkKIHsK LSAgc3RydWN0IGxvb3AgKmxvb3A7Ci0KICAgZGZfc2V0X2ZsYWdzIChERl9SRF9QUlVORV9E RUFEX0RFRlMpOwogICBkZl9jaGFpbl9hZGRfcHJvYmxlbSAoREZfVURfQ0hBSU4pOwogICBk Zl9jb21wdXRlX3JlZ3NfZXZlcl9saXZlICh0cnVlKTsKQEAgLTgyNCw3ICs4MjIsNyBAQCBl eGVjdXRlX3RhZ19jb2xsaXNpb25fYXZvaWRhbmNlICgpCiAgIGNhbGN1bGF0ZV9kb21pbmFu Y2VfaW5mbyAoQ0RJX0RPTUlOQVRPUlMpOwogICBsb29wX29wdGltaXplcl9pbml0IChBVk9J RF9DRkdfTU9ESUZJQ0FUSU9OUyk7CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfRlJP TV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElf RlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIHRhZ19tYXBfdCB0YWdfbWFwICg1MTIp OwogCmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL21uMTAzMDAvbW4xMDMwMC5jIGIvZ2NjL2Nv bmZpZy9tbjEwMzAwL21uMTAzMDAuYwppbmRleCA2Zjg0MmEzYWQzMi4uYWViNWQwNGIzZTEg MTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvbW4xMDMwMC9tbjEwMzAwLmMKKysrIGIvZ2NjL2Nv bmZpZy9tbjEwMzAwL21uMTAzMDAuYwpAQCAtMzIzNCw4ICszMjM0LDYgQEAgbW4xMDMwMF9s b29wX2NvbnRhaW5zX2NhbGxfaW5zbiAobG9vcF9wIGxvb3ApCiBzdGF0aWMgdm9pZAogbW4x MDMwMF9zY2FuX2Zvcl9zZXRsYl9sY2MgKHZvaWQpCiB7Ci0gIGxvb3BfcCBsb29wOwotCiAg IERVTVAgKCJMb29raW5nIGZvciBsb29wcyB0aGF0IGNhbiB1c2UgdGhlIFNFVExCIGluc24i LCBOVUxMX1JUWCk7CiAKICAgZGZfYW5hbHl6ZSAoKTsKQEAgLTMyNDgsNyArMzI0Niw3IEBA IG1uMTAzMDBfc2Nhbl9mb3Jfc2V0bGJfbGNjICh2b2lkKQogICAgICBpZiBhbiBpbm5lciBs b29wIGlzIG5vdCBzdWl0YWJsZSBmb3IgdXNlIHdpdGggdGhlIFNFVExCL0xjYyBpbnNucywg aXQgbWF5CiAgICAgIGJlIHRoZSBjYXNlIHRoYXQgaXRzIHBhcmVudCBsb29wIGlzIHN1aXRh YmxlLiAgVGh1cyB3ZSBzaG91bGQgY2hlY2sgYWxsCiAgICAgIGxvb3BzLCBidXQgd29yayBm cm9tIHRoZSBpbm5lcm1vc3Qgb3V0d2FyZHMuICAqLwotICBGT1JfRUFDSF9MT09QIChsb29w LCBMSV9PTkxZX0lOTkVSTU9TVCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChj ZnVuLCBMSV9PTkxZX0lOTkVSTU9TVCkpCiAgICAgewogICAgICAgY29uc3QgY2hhciAqIHJl YXNvbiA9IE5VTEw7CiAKZGlmZiAtLWdpdCBhL2djYy9jb25maWcvczM5MC9zMzkwLmMgYi9n Y2MvY29uZmlnL3MzOTAvczM5MC5jCmluZGV4IGIxZDNiOTk3ODRkLi44YzdkMzY2NzVmNSAx MDA2NDQKLS0tIGEvZ2NjL2NvbmZpZy9zMzkwL3MzOTAuYworKysgYi9nY2MvY29uZmlnL3Mz OTAvczM5MC5jCkBAIC0xNDQ3OSwxNSArMTQ0NzksMTMgQEAgczM5MF9hZGp1c3RfbG9vcF9z Y2FuX29zYyAoc3RydWN0IGxvb3AqIGxvb3ApCiBzdGF0aWMgdm9pZAogczM5MF9hZGp1c3Rf bG9vcHMgKCkKIHsKLSAgc3RydWN0IGxvb3AgKmxvb3AgPSBOVUxMOwotCiAgIGRmX2FuYWx5 emUgKCk7CiAgIGNvbXB1dGVfYmJfZm9yX2luc24gKCk7CiAKICAgLyogRmluZCB0aGUgbG9v cHMuICAqLwogICBsb29wX29wdGltaXplcl9pbml0IChBVk9JRF9DRkdfTU9ESUZJQ0FUSU9O Uyk7CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfT05MWV9JTk5FUk1PU1QpCisgIGZv ciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfT05MWV9JTk5FUk1PU1QpKQog ICAgIHsKICAgICAgIGlmIChkdW1wX2ZpbGUpCiAJewpkaWZmIC0tZ2l0IGEvZ2NjL2RvYy9s b29wLnRleGkgYi9nY2MvZG9jL2xvb3AudGV4aQppbmRleCBhMTM1NjU2ZWQwMS4uOTRlZWQ2 NzIwYjEgMTAwNjQ0Ci0tLSBhL2djYy9kb2MvbG9vcC50ZXhpCisrKyBiL2djYy9kb2MvbG9v cC50ZXhpCkBAIC03OSwxNCArNzksMTUgQEAgYW5kIGl0cyBzdWJsb29wcyBpbiB0aGUgbnVt YmVyaW5nLiAgVGhlIGluZGV4IG9mIGEgbG9vcCBuZXZlciBjaGFuZ2VzLgogCiBUaGUgZW50 cmllcyBvZiB0aGUgQGNvZGV7bGFycmF5fSBmaWVsZCBzaG91bGQgbm90IGJlIGFjY2Vzc2Vk IGRpcmVjdGx5LgogVGhlIGZ1bmN0aW9uIEBjb2Rle2dldF9sb29wfSByZXR1cm5zIHRoZSBs b29wIGRlc2NyaXB0aW9uIGZvciBhIGxvb3Agd2l0aAotdGhlIGdpdmVuIGluZGV4LiAgQGNv ZGV7bnVtYmVyX29mX2xvb3BzfSBmdW5jdGlvbiByZXR1cm5zIG51bWJlciBvZgotbG9vcHMg aW4gdGhlIGZ1bmN0aW9uLiAgVG8gdHJhdmVyc2UgYWxsIGxvb3BzLCB1c2UgQGNvZGV7Rk9S X0VBQ0hfTE9PUH0KLW1hY3JvLiAgVGhlIEBjb2Rle2ZsYWdzfSBhcmd1bWVudCBvZiB0aGUg bWFjcm8gaXMgdXNlZCB0byBkZXRlcm1pbmUKLXRoZSBkaXJlY3Rpb24gb2YgdHJhdmVyc2Fs IGFuZCB0aGUgc2V0IG9mIGxvb3BzIHZpc2l0ZWQuICBFYWNoIGxvb3AgaXMKK3RoZSBnaXZl biBpbmRleC4gIEBjb2Rle251bWJlcl9vZl9sb29wc30gZnVuY3Rpb24gcmV0dXJucyBudW1i ZXIgb2YgbG9vcHMKK2luIHRoZSBmdW5jdGlvbi4gIFRvIHRyYXZlcnNlIGFsbCBsb29wcywg dXNlIGEgcmFuZ2UtYmFzZWQgZm9yIGxvb3Agd2l0aAorY2xhc3MgQGNvZGV7bG9vcHNfbGlz dH0gaW5zdGFuY2UuIFRoZSBAY29kZXtmbGFnc30gYXJndW1lbnQgcGFzc2VkIHRvIHRoZQor Y29uc3RydWN0b3IgZnVuY3Rpb24gb2YgY2xhc3MgQGNvZGV7bG9vcHNfbGlzdH0gaXMgdXNl ZCB0byBkZXRlcm1pbmUgdGhlCitkaXJlY3Rpb24gb2YgdHJhdmVyc2FsIGFuZCB0aGUgc2V0 IG9mIGxvb3BzIHZpc2l0ZWQuICBFYWNoIGxvb3AgaXMKIGd1YXJhbnRlZWQgdG8gYmUgdmlz aXRlZCBleGFjdGx5IG9uY2UsIHJlZ2FyZGxlc3Mgb2YgdGhlIGNoYW5nZXMgdG8gdGhlCiBs b29wIHRyZWUsIGFuZCB0aGUgbG9vcHMgbWF5IGJlIHJlbW92ZWQgZHVyaW5nIHRoZSB0cmF2 ZXJzYWwuICBUaGUgbmV3bHkKLWNyZWF0ZWQgbG9vcHMgYXJlIG5ldmVyIHRyYXZlcnNlZCwg aWYgdGhleSBuZWVkIHRvIGJlIHZpc2l0ZWQsIHRoaXMKLW11c3QgYmUgZG9uZSBzZXBhcmF0 ZWx5IGFmdGVyIHRoZWlyIGNyZWF0aW9uLgorY3JlYXRlZCBsb29wcyBhcmUgbmV2ZXIgdHJh dmVyc2VkLCBpZiB0aGV5IG5lZWQgdG8gYmUgdmlzaXRlZCwgdGhpcyBtdXN0CitiZSBkb25l IHNlcGFyYXRlbHkgYWZ0ZXIgdGhlaXIgY3JlYXRpb24uCiAKIEVhY2ggYmFzaWMgYmxvY2sg Y29udGFpbnMgdGhlIHJlZmVyZW5jZSB0byB0aGUgaW5uZXJtb3N0IGxvb3AgaXQgYmVsb25n cwogdG8gKEBjb2Rle2xvb3BfZmF0aGVyfSkuICBGb3IgdGhpcyByZWFzb24sIGl0IGlzIG9u bHkgcG9zc2libGUgdG8gaGF2ZQpkaWZmIC0tZ2l0IGEvZ2NjL2dpbXBsZS1sb29wLWludGVy Y2hhbmdlLmNjIGIvZ2NjL2dpbXBsZS1sb29wLWludGVyY2hhbmdlLmNjCmluZGV4IDdhODhm YWEyYzA3Li5jY2Q1MDgzMTQ1ZiAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBsZS1sb29wLWludGVy Y2hhbmdlLmNjCisrKyBiL2djYy9naW1wbGUtbG9vcC1pbnRlcmNoYW5nZS5jYwpAQCAtMjA4 OSw4ICsyMDg5LDcgQEAgcGFzc19saW50ZXJjaGFuZ2U6OmV4ZWN1dGUgKGZ1bmN0aW9uICpm dW4pCiAgICAgcmV0dXJuIDA7CiAKICAgYm9vbCBjaGFuZ2VkX3AgPSBmYWxzZTsKLSAgY2xh c3MgbG9vcCAqbG9vcDsKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfT05MWV9JTk5FUk1P U1QpCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfT05MWV9JTk5F Uk1PU1QpKQogICAgIHsKICAgICAgIHZlYzxsb29wX3A+IGxvb3BfbmVzdCA9IHZOVUxMOwog ICAgICAgdmVjPGRhdGFfcmVmZXJlbmNlX3A+IGRhdGFyZWZzID0gdk5VTEw7CmRpZmYgLS1n aXQgYS9nY2MvZ2ltcGxlLWxvb3AtamFtLmMgYi9nY2MvZ2ltcGxlLWxvb3AtamFtLmMKaW5k ZXggNDg0MmYwZGZmODAuLmFhYzJkMWEzZmQ0IDEwMDY0NAotLS0gYS9nY2MvZ2ltcGxlLWxv b3AtamFtLmMKKysrIGIvZ2NjL2dpbXBsZS1sb29wLWphbS5jCkBAIC00ODYsMTMgKzQ4Niwx MiBAQCBhZGp1c3RfdW5yb2xsX2ZhY3RvciAoY2xhc3MgbG9vcCAqaW5uZXIsIHN0cnVjdCBk YXRhX2RlcGVuZGVuY2VfcmVsYXRpb24gKmRkciwKIHN0YXRpYyB1bnNpZ25lZCBpbnQKIHRy ZWVfbG9vcF91bnJvbGxfYW5kX2phbSAodm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsK ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7CiAKICAgZ2NjX2Fzc2VydCAoc2Nldl9pbml0aWFs aXplZF9wICgpKTsKIAogICAvKiBHbyB0aHJvdWdoIGFsbCBpbm5lcm1vc3QgbG9vcHMuICAq LwotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9PTkxZX0lOTkVSTU9TVCkKKyAgZm9yIChh dXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCBMSV9PTkxZX0lOTkVSTU9TVCkpCiAgICAg ewogICAgICAgY2xhc3MgbG9vcCAqb3V0ZXIgPSBsb29wX291dGVyIChsb29wKTsKIApkaWZm IC0tZ2l0IGEvZ2NjL2dpbXBsZS1sb29wLXZlcnNpb25pbmcuY2MgYi9nY2MvZ2ltcGxlLWxv b3AtdmVyc2lvbmluZy5jYwppbmRleCA0YjcwYzVhNGFhYi4uMTE0YTIyZjZlNWYgMTAwNjQ0 Ci0tLSBhL2djYy9naW1wbGUtbG9vcC12ZXJzaW9uaW5nLmNjCisrKyBiL2djYy9naW1wbGUt bG9vcC12ZXJzaW9uaW5nLmNjCkBAIC0xNDI4LDggKzE0MjgsNyBAQCBsb29wX3ZlcnNpb25p bmc6OmFuYWx5emVfYmxvY2tzICgpCiAgICAgIHZlcnNpb25pbmcgYXQgdGhhdCBsZXZlbCBj b3VsZCBiZSB1c2VmdWwgaW4gc29tZSBjYXNlcy4gICovCiAgIGdldF9sb29wX2luZm8gKGdl dF9sb29wIChtX2ZuLCAwKSkucmVqZWN0ZWRfcCA9IHRydWU7CiAKLSAgY2xhc3MgbG9vcCAq bG9vcDsKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZv ciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQog ICAgIHsKICAgICAgIGxvb3BfaW5mbyAmbGluZm8gPSBnZXRfbG9vcF9pbmZvIChsb29wKTsK IApAQCAtMTY1MCw4ICsxNjQ5LDcgQEAgbG9vcF92ZXJzaW9uaW5nOjptYWtlX3ZlcnNpb25p bmdfZGVjaXNpb25zICgpCiAgIEFVVE9fRFVNUF9TQ09QRSAoIm1ha2VfdmVyc2lvbmluZ19k ZWNpc2lvbnMiLAogCQkgICBkdW1wX3VzZXJfbG9jYXRpb25fdDo6ZnJvbV9mdW5jdGlvbl9k ZWNsIChtX2ZuLT5kZWNsKSk7CiAKLSAgY2xhc3MgbG9vcCAqbG9vcDsKLSAgRk9SX0VBQ0hf TE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDogbG9v cHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGxvb3Bf aW5mbyAmbGluZm8gPSBnZXRfbG9vcF9pbmZvIChsb29wKTsKICAgICAgIGlmIChkZWNpZGVf d2hldGhlcl9sb29wX2lzX3ZlcnNpb25hYmxlIChsb29wKSkKZGlmZiAtLWdpdCBhL2djYy9n aW1wbGUtc3NhLXNwbGl0LXBhdGhzLmMgYi9nY2MvZ2ltcGxlLXNzYS1zcGxpdC1wYXRocy5j CmluZGV4IDJkZDk1M2Q1ZWY5Li4wNGFkOWMwMjQ3NyAxMDA2NDQKLS0tIGEvZ2NjL2dpbXBs ZS1zc2Etc3BsaXQtcGF0aHMuYworKysgYi9nY2MvZ2ltcGxlLXNzYS1zcGxpdC1wYXRocy5j CkBAIC00NzMsMTMgKzQ3MywxMiBAQCBzdGF0aWMgYm9vbAogc3BsaXRfcGF0aHMgKCkKIHsK ICAgYm9vbCBjaGFuZ2VkID0gZmFsc2U7Ci0gIGxvb3BfcCBsb29wOwogCiAgIGxvb3Bfb3B0 aW1pemVyX2luaXQgKExPT1BTX05PUk1BTCB8IExPT1BTX0hBVkVfUkVDT1JERURfRVhJVFMp OwogICBpbml0aWFsaXplX29yaWdpbmFsX2NvcHlfdGFibGVzICgpOwogICBjYWxjdWxhdGVf ZG9taW5hbmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKIAotICBGT1JfRUFDSF9MT09QIChs b29wLCBMSV9GUk9NX0lOTkVSTU9TVCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0 IChjZnVuLCBMSV9GUk9NX0lOTkVSTU9TVCkpCiAgICAgewogICAgICAgLyogT25seSBzcGxp dCBwYXRocyBpZiB3ZSBhcmUgb3B0aW1pemluZyB0aGlzIGxvb3AgZm9yIHNwZWVkLiAgKi8K ICAgICAgIGlmICghb3B0aW1pemVfbG9vcF9mb3Jfc3BlZWRfcCAobG9vcCkpCmRpZmYgLS1n aXQgYS9nY2MvZ3JhcGhpdGUtaXNsLWFzdC10by1naW1wbGUuYyBiL2djYy9ncmFwaGl0ZS1p c2wtYXN0LXRvLWdpbXBsZS5jCmluZGV4IGMyMDIyMTNmMzliLi4xYWQ2OGExZDQ3MyAxMDA2 NDQKLS0tIGEvZ2NjL2dyYXBoaXRlLWlzbC1hc3QtdG8tZ2ltcGxlLmMKKysrIGIvZ2NjL2dy YXBoaXRlLWlzbC1hc3QtdG8tZ2ltcGxlLmMKQEAgLTE1MzUsOSArMTUzNSw4IEBAIGdyYXBo aXRlX3JlZ2VuZXJhdGVfYXN0X2lzbCAoc2NvcF9wIHNjb3ApCiAgICAgICBpZl9yZWdpb24t PmZhbHNlX3JlZ2lvbi0+cmVnaW9uLmVudHJ5LT5mbGFncyB8PSBFREdFX0ZBTExUSFJVOwog ICAgICAgLyogcmVtb3ZlX2VkZ2VfYW5kX2RvbWluYXRlZF9ibG9ja3MgbWFya3MgbG9vcHMg Zm9yIHJlbW92YWwgYnV0CiAJIGRvZXNuJ3QgYWN0dWFsbHkgcmVtb3ZlIHRoZW0gKGZpeCB0 aGF0Li4uKS4gICovCi0gICAgICBsb29wX3AgbG9vcDsKLSAgICAgIEZPUl9FQUNIX0xPT1Ag KGxvb3AsIExJX0ZST01fSU5ORVJNT1NUKQotCWlmICghIGxvb3AtPmhlYWRlcikKKyAgICAg IGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1Qp KQorCWlmICghbG9vcC0+aGVhZGVyKQogCSAgZGVsZXRlX2xvb3AgKGxvb3ApOwogICAgIH0K IApkaWZmIC0tZ2l0IGEvZ2NjL2dyYXBoaXRlLmMgYi9nY2MvZ3JhcGhpdGUuYwppbmRleCA2 YzRmYjQyMjgyYi4uMDA2MGNhZWEyMmUgMTAwNjQ0Ci0tLSBhL2djYy9ncmFwaGl0ZS5jCisr KyBiL2djYy9ncmFwaGl0ZS5jCkBAIC0zNzcsOCArMzc3LDcgQEAgY2Fub25pY2FsaXplX2xv b3BfY2xvc2VkX3NzYSAobG9vcF9wIGxvb3AsIGVkZ2UgZSkKIHN0YXRpYyB2b2lkCiBjYW5v bmljYWxpemVfbG9vcF9mb3JtICh2b2lkKQogewotICBsb29wX3AgbG9vcDsKLSAgRk9SX0VB Q0hfTE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDog bG9vcHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGVk Z2UgZSA9IHNpbmdsZV9leGl0IChsb29wKTsKICAgICAgIGlmICghZSB8fCAoZS0+ZmxhZ3Mg JiAoRURHRV9DT01QTEVYfEVER0VfRkFLRSkpKQpAQCAtNDk0LDEwICs0OTMsOSBAQCBncmFw aGl0ZV90cmFuc2Zvcm1fbG9vcHMgKHZvaWQpCiAKICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVt cF9mbGFncyAmIFRERl9ERVRBSUxTKSkKICAgICB7Ci0gICAgICBsb29wX3AgbG9vcDsKICAg ICAgIGludCBudW1fbm9fZGVwZW5kZW5jeSA9IDA7CiAKLSAgICAgIEZPUl9FQUNIX0xPT1Ag KGxvb3AsIDApCisgICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIDAp KQogCWlmIChsb29wLT5jYW5fYmVfcGFyYWxsZWwpCiAJICBudW1fbm9fZGVwZW5kZW5jeSsr OwogCmRpZmYgLS1naXQgYS9nY2MvaXBhLWZuc3VtbWFyeS5jIGIvZ2NjL2lwYS1mbnN1bW1h cnkuYwppbmRleCA5NWQyODc1N2Y5NS4uMjBjZmQ1NzY2ZmQgMTAwNjQ0Ci0tLSBhL2djYy9p cGEtZm5zdW1tYXJ5LmMKKysrIGIvZ2NjL2lwYS1mbnN1bW1hcnkuYwpAQCAtMjkyMyw3ICsy OTIzLDcgQEAgYW5hbHl6ZV9mdW5jdGlvbl9ib2R5IChzdHJ1Y3QgY2dyYXBoX25vZGUgKm5v ZGUsIGJvb2wgZWFybHkpCiAgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYg VERGX0RFVEFJTFMpKQogCWZsb3dfbG9vcHNfZHVtcCAoZHVtcF9maWxlLCBOVUxMLCAwKTsK ICAgICAgIHNjZXZfaW5pdGlhbGl6ZSAoKTsKLSAgICAgIEZPUl9FQUNIX0xPT1AgKGxvb3As IDApCisgICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIDApKQogCXsK IAkgIHByZWRpY2F0ZSBsb29wX2l0ZXJhdGlvbnMgPSB0cnVlOwogCSAgc3JlYWwgaGVhZGVy X2ZyZXE7CmRpZmYgLS1naXQgYS9nY2MvaXBhLXB1cmUtY29uc3QuYyBiL2djYy9pcGEtcHVy ZS1jb25zdC5jCmluZGV4IGYwNDUxMDhhZjIxLi5hODRhNGViN2FjMCAxMDA2NDQKLS0tIGEv Z2NjL2lwYS1wdXJlLWNvbnN0LmMKKysrIGIvZ2NjL2lwYS1wdXJlLWNvbnN0LmMKQEAgLTEw ODcsOSArMTA4Nyw4IEBAIGVuZDoKIAkgICAgfQogCSAgZWxzZQogCSAgICB7Ci0JICAgICAg Y2xhc3MgbG9vcCAqbG9vcDsKIAkgICAgICBzY2V2X2luaXRpYWxpemUgKCk7Ci0JICAgICAg Rk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKwkgICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3Bz X2xpc3QgKGNmdW4sIDApKQogCQlpZiAoIWZpbml0ZV9sb29wX3AgKGxvb3ApKQogCQkgIHsK IAkJICAgIGlmIChkdW1wX2ZpbGUpCmRpZmYgLS1naXQgYS9nY2MvbG9vcC1kb2xvb3AuYyBi L2djYy9sb29wLWRvbG9vcC5jCmluZGV4IGRkYTdiOWUyNjhmLi5jM2E0NTIzYWQxOCAxMDA2 NDQKLS0tIGEvZ2NjL2xvb3AtZG9sb29wLmMKKysrIGIvZ2NjL2xvb3AtZG9sb29wLmMKQEAg LTc4OSwxOCArNzg5LDE0IEBAIGRvbG9vcF9vcHRpbWl6ZSAoY2xhc3MgbG9vcCAqbG9vcCkK IHZvaWQKIGRvbG9vcF9vcHRpbWl6ZV9sb29wcyAodm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAq bG9vcDsKLQogICBpZiAob3B0aW1pemUgPT0gMSkKICAgICB7CiAgICAgICBkZl9saXZlX2Fk ZF9wcm9ibGVtICgpOwogICAgICAgZGZfbGl2ZV9zZXRfYWxsX2RpcnR5ICgpOwogICAgIH0K IAotICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQotICAgIHsKLSAgICAgIGRvbG9vcF9vcHRp bWl6ZSAobG9vcCk7Ci0gICAgfQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNm dW4sIDApKQorICAgIGRvbG9vcF9vcHRpbWl6ZSAobG9vcCk7CiAKICAgaWYgKG9wdGltaXpl ID09IDEpCiAgICAgZGZfcmVtb3ZlX3Byb2JsZW0gKGRmX2xpdmUpOwpkaWZmIC0tZ2l0IGEv Z2NjL2xvb3AtaW5pdC5jIGIvZ2NjL2xvb3AtaW5pdC5jCmluZGV4IDFmZGUwZWRlNDQxLi4w NDA1NGVmNjIyMiAxMDA2NDQKLS0tIGEvZ2NjL2xvb3AtaW5pdC5jCisrKyBiL2djYy9sb29w LWluaXQuYwpAQCAtMTM3LDcgKzEzNyw2IEBAIGxvb3Bfb3B0aW1pemVyX2luaXQgKHVuc2ln bmVkIGZsYWdzKQogdm9pZAogbG9vcF9vcHRpbWl6ZXJfZmluYWxpemUgKHN0cnVjdCBmdW5j dGlvbiAqZm4sIGJvb2wgY2xlYW5fbG9vcF9jbG9zZWRfcGhpKQogewotICBjbGFzcyBsb29w ICpsb29wOwogICBiYXNpY19ibG9jayBiYjsKIAogICB0aW1ldmFyX3B1c2ggKFRWX0xPT1Bf RklOSSk7CkBAIC0xNjcsNyArMTY2LDcgQEAgbG9vcF9vcHRpbWl6ZXJfZmluYWxpemUgKHN0 cnVjdCBmdW5jdGlvbiAqZm4sIGJvb2wgY2xlYW5fbG9vcF9jbG9zZWRfcGhpKQogICAgICAg Z290byBsb29wX2ZpbmlfZG9uZTsKICAgICB9CiAKLSAgRk9SX0VBQ0hfTE9PUF9GTiAoZm4s IGxvb3AsIDApCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoZm4sIDApKQogICAg IGZyZWVfc2ltcGxlX2xvb3BfZGVzYyAobG9vcCk7CiAKICAgLyogQ2xlYW4gdXAuICAqLwpA QCAtMjI5LDcgKzIyOCw3IEBAIGZpeF9sb29wX3N0cnVjdHVyZSAoYml0bWFwIGNoYW5nZWRf YmJzKQogICAgICBsb29wcywgc28gdGhhdCB3aGVuIHdlIHJlbW92ZSB0aGUgbG9vcHMsIHdl IGtub3cgdGhhdCB0aGUgbG9vcHMgaW5zaWRlCiAgICAgIGFyZSBwcmVzZXJ2ZWQsIGFuZCBk byBub3Qgd2FzdGUgdGltZSByZWxpbmtpbmcgbG9vcHMgdGhhdCB3aWxsIGJlCiAgICAgIHJl bW92ZWQgbGF0ZXIuICAqLwotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9GUk9NX0lOTkVS TU9TVCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCBMSV9GUk9NX0lO TkVSTU9TVCkpCiAgICAgewogICAgICAgLyogRGV0ZWN0IHRoZSBjYXNlIHRoYXQgdGhlIGxv b3AgaXMgbm8gbG9uZ2VyIHByZXNlbnQgZXZlbiB0aG91Z2gKICAgICAgICAgIGl0IHdhc24n dCBtYXJrZWQgZm9yIHJlbW92YWwuCmRpZmYgLS1naXQgYS9nY2MvbG9vcC1pbnZhcmlhbnQu YyBiL2djYy9sb29wLWludmFyaWFudC5jCmluZGV4IGJkYzdiNTlkZDVmLi5mY2EwYzJiMjRi ZSAxMDA2NDQKLS0tIGEvZ2NjL2xvb3AtaW52YXJpYW50LmMKKysrIGIvZ2NjL2xvb3AtaW52 YXJpYW50LmMKQEAgLTIxMzYsNyArMjEzNiw3IEBAIGNhbGN1bGF0ZV9sb29wX3JlZ19wcmVz c3VyZSAodm9pZCkKICAgcnR4IGxpbms7CiAgIGNsYXNzIGxvb3AgKmxvb3AsICpwYXJlbnQ7 CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29w c19saXN0IChjZnVuLCAwKSkKICAgICBpZiAobG9vcC0+YXV4ID09IE5VTEwpCiAgICAgICB7 CiAJbG9vcC0+YXV4ID0geGNhbGxvYyAoMSwgc2l6ZW9mIChjbGFzcyBsb29wX2RhdGEpKTsK QEAgLTIyMDMsNyArMjIwMyw3IEBAIGNhbGN1bGF0ZV9sb29wX3JlZ19wcmVzc3VyZSAodm9p ZCkKICAgYml0bWFwX3JlbGVhc2UgKCZjdXJyX3JlZ3NfbGl2ZSk7CiAgIGlmIChmbGFnX2ly YV9yZWdpb24gPT0gSVJBX1JFR0lPTl9NSVhFRAogICAgICAgfHwgZmxhZ19pcmFfcmVnaW9u ID09IElSQV9SRUdJT05fQUxMKQotICAgIEZPUl9FQUNIX0xPT1AgKGxvb3AsIDApCisgICAg Zm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCAwKSkKICAgICAgIHsKIAlFWEVD VVRFX0lGX1NFVF9JTl9CSVRNQVAgKCZMT09QX0RBVEEgKGxvb3ApLT5yZWdzX2xpdmUsIDAs IGosIGJpKQogCSAgaWYgKCEgYml0bWFwX2JpdF9wICgmTE9PUF9EQVRBIChsb29wKS0+cmVn c19yZWYsIGopKQpAQCAtMjIxNyw3ICsyMjE3LDcgQEAgY2FsY3VsYXRlX2xvb3BfcmVnX3By ZXNzdXJlICh2b2lkKQogICAgICAgfQogICBpZiAoZHVtcF9maWxlID09IE5VTEwpCiAgICAg cmV0dXJuOwotICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6 IGxvb3BzX2xpc3QgKGNmdW4sIDApKQogICAgIHsKICAgICAgIHBhcmVudCA9IGxvb3Bfb3V0 ZXIgKGxvb3ApOwogICAgICAgZnByaW50ZiAoZHVtcF9maWxlLCAiXG4gIExvb3AgJWQgKHBh cmVudCAlZCwgaGVhZGVyIGJiJWQsIGRlcHRoICVkKVxuIiwKQEAgLTIyNTEsOCArMjI1MSw2 IEBAIGNhbGN1bGF0ZV9sb29wX3JlZ19wcmVzc3VyZSAodm9pZCkKIHZvaWQKIG1vdmVfbG9v cF9pbnZhcmlhbnRzICh2b2lkKQogewotICBjbGFzcyBsb29wICpsb29wOwotCiAgIGlmIChv cHRpbWl6ZSA9PSAxKQogICAgIGRmX2xpdmVfYWRkX3Byb2JsZW0gKCk7CiAgIC8qID8/PyBU aGlzIGlzIGEgaGFjay4gIFdlIHNob3VsZCBvbmx5IG5lZWQgdG8gY2FsbCBkZl9saXZlX3Nl dF9hbGxfZGlydHkKQEAgLTIyNzEsNyArMjI2OSw3IEBAIG1vdmVfbG9vcF9pbnZhcmlhbnRz ICh2b2lkKQogICAgIH0KICAgZGZfc2V0X2ZsYWdzIChERl9FUV9OT1RFUyArIERGX0RFRkVS X0lOU05fUkVTQ0FOKTsKICAgLyogUHJvY2VzcyB0aGUgbG9vcHMsIGlubmVybW9zdCBmaXJz dC4gICovCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01fSU5ORVJNT1NUKQorICBm b3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5ORVJNT1NUKSkK ICAgICB7CiAgICAgICBjdXJyX2xvb3AgPSBsb29wOwogICAgICAgLyogbW92ZV9zaW5nbGVf bG9vcF9pbnZhcmlhbnRzIGZvciB2ZXJ5IGxhcmdlIGxvb3BzIGlzIHRpbWUgY29uc3VtaW5n CkBAIC0yMjg0LDEwICsyMjgyLDggQEAgbW92ZV9sb29wX2ludmFyaWFudHMgKHZvaWQpCiAJ bW92ZV9zaW5nbGVfbG9vcF9pbnZhcmlhbnRzIChsb29wKTsKICAgICB9CiAKLSAgRk9SX0VB Q0hfTE9PUCAobG9vcCwgMCkKLSAgICB7CisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlz dCAoY2Z1biwgMCkpCiAgICAgICBmcmVlX2xvb3BfZGF0YSAobG9vcCk7Ci0gICAgfQogCiAg IGlmIChmbGFnX2lyYV9sb29wX3ByZXNzdXJlKQogICAgIC8qIFRoZXJlIGlzIG5vIHNlbnNl IHRvIGtlZXAgdGhpcyBpbmZvIGJlY2F1c2UgaXQgd2FzIG1vc3QKZGlmZiAtLWdpdCBhL2dj Yy9sb29wLXVucm9sbC5jIGIvZ2NjL2xvb3AtdW5yb2xsLmMKaW5kZXggNjZkOTM0ODdlMjku LjJiMzFmYWZhM2EzIDEwMDY0NAotLS0gYS9nY2MvbG9vcC11bnJvbGwuYworKysgYi9nY2Mv bG9vcC11bnJvbGwuYwpAQCAtMjE0LDEwICsyMTQsOCBAQCByZXBvcnRfdW5yb2xsIChjbGFz cyBsb29wICpsb29wLCBkdW1wX2xvY2F0aW9uX3QgbG9jdXMpCiBzdGF0aWMgdm9pZAogZGVj aWRlX3Vucm9sbGluZyAoaW50IGZsYWdzKQogewotICBjbGFzcyBsb29wICpsb29wOwotCiAg IC8qIFNjYW4gdGhlIGxvb3BzLCBpbm5lciBvbmVzIGZpcnN0LiAgKi8KLSAgRk9SX0VBQ0hf TE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDogbG9v cHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGxvb3At PmxwdF9kZWNpc2lvbi5kZWNpc2lvbiA9IExQVF9OT05FOwogICAgICAgZHVtcF91c2VyX2xv Y2F0aW9uX3QgbG9jdXMgPSBnZXRfbG9vcF9sb2NhdGlvbiAobG9vcCk7CkBAIC0yNzgsMTQg KzI3NiwxMyBAQCBkZWNpZGVfdW5yb2xsaW5nIChpbnQgZmxhZ3MpCiB2b2lkCiB1bnJvbGxf bG9vcHMgKGludCBmbGFncykKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKICAgYm9vbCBjaGFu Z2VkID0gZmFsc2U7CiAKICAgLyogTm93IGRlY2lkZSByZXN0IG9mIHVucm9sbGluZy4gICov CiAgIGRlY2lkZV91bnJvbGxpbmcgKGZsYWdzKTsKIAogICAvKiBTY2FuIHRoZSBsb29wcywg aW5uZXIgb25lcyBmaXJzdC4gICovCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01f SU5ORVJNT1NUKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZS T01fSU5ORVJNT1NUKSkKICAgICB7CiAgICAgICAvKiBBbmQgcGVyZm9ybSB0aGUgYXBwcm9w cmlhdGUgdHJhbnNmb3JtYXRpb25zLiAgKi8KICAgICAgIHN3aXRjaCAobG9vcC0+bHB0X2Rl Y2lzaW9uLmRlY2lzaW9uKQpkaWZmIC0tZ2l0IGEvZ2NjL21vZHVsby1zY2hlZC5jIGIvZ2Nj L21vZHVsby1zY2hlZC5jCmluZGV4IGU3MmU0NmRiMzg3Li4xYzFiNDU5ZDM0ZiAxMDA2NDQK LS0tIGEvZ2NjL21vZHVsby1zY2hlZC5jCisrKyBiL2djYy9tb2R1bG8tc2NoZWQuYwpAQCAt MTM1Myw3ICsxMzUzLDYgQEAgc21zX3NjaGVkdWxlICh2b2lkKQogICBpbnQgbWF4aWksIG1h eF9hc2FwOwogICBwYXJ0aWFsX3NjaGVkdWxlX3B0ciBwczsKICAgYmFzaWNfYmxvY2sgYmIg PSBOVUxMOwotICBjbGFzcyBsb29wICpsb29wOwogICBiYXNpY19ibG9jayBjb25kaXRpb25f YmIgPSBOVUxMOwogICBlZGdlIGxhdGNoX2VkZ2U7CiAgIEhPU1RfV0lERV9JTlQgdHJpcF9j b3VudCwgbWF4X3RyaXBfY291bnQ7CkBAIC0xMzk3LDcgKzEzOTYsNyBAQCBzbXNfc2NoZWR1 bGUgKHZvaWQpCiAKICAgLyogQnVpbGQgRERHcyBmb3IgYWxsIHRoZSByZWxldmFudCBsb29w cyBhbmQgaG9sZCB0aGVtIGluIEdfQVJSCiAgICAgIGluZGV4ZWQgYnkgdGhlIGxvb3AgaW5k ZXguICAqLwotICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6 IGxvb3BzX2xpc3QgKGNmdW4sIDApKQogICAgIHsKICAgICAgIHJ0eF9pbnNuICpoZWFkLCAq dGFpbDsKICAgICAgIHJ0eCBjb3VudF9yZWc7CkBAIC0xNTQzLDcgKzE1NDIsNyBAQCBzbXNf c2NoZWR1bGUgKHZvaWQpCiAgIH0KIAogICAvKiBXZSBkb24ndCB3YW50IHRvIHBlcmZvcm0g U01TIG9uIG5ldyBsb29wcyAtIGNyZWF0ZWQgYnkgdmVyc2lvbmluZy4gICovCi0gIEZPUl9F QUNIX0xPT1AgKGxvb3AsIDApCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1 biwgMCkpCiAgICAgewogICAgICAgcnR4X2luc24gKmhlYWQsICp0YWlsOwogICAgICAgcnR4 IGNvdW50X3JlZzsKZGlmZiAtLWdpdCBhL2djYy9wcmVkaWN0LmMgYi9nY2MvcHJlZGljdC5j CmluZGV4IGQ3NTFlNmNlY2NlLi5kOWM3MjQ5ODMxZSAxMDA2NDQKLS0tIGEvZ2NjL3ByZWRp Y3QuYworKysgYi9nY2MvcHJlZGljdC5jCkBAIC0xOTQ5LDcgKzE5NDksNyBAQCBwcmVkaWN0 X2xvb3BzICh2b2lkKQogCiAgIC8qIFRyeSB0byBwcmVkaWN0IG91dCBibG9ja3MgaW4gYSBs b29wIHRoYXQgYXJlIG5vdCBwYXJ0IG9mIGEKICAgICAgbmF0dXJhbCBsb29wLiAgKi8KLSAg Rk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBs b29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAg ICAgIGJhc2ljX2Jsb2NrIGJiLCAqYmJzOwogICAgICAgdW5zaWduZWQgaiwgbl9leGl0cyA9 IDA7CkBAIC00MTExLDggKzQxMTEsNyBAQCBwYXNzX3Byb2ZpbGU6OmV4ZWN1dGUgKGZ1bmN0 aW9uICpmdW4pCiAgICAgcHJvZmlsZV9zdGF0dXNfZm9yX2ZuIChmdW4pID0gUFJPRklMRV9H VUVTU0VEOwogIGlmIChkdW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykp CiAgICB7Ci0gICAgIGNsYXNzIGxvb3AgKmxvb3A7Ci0gICAgIEZPUl9FQUNIX0xPT1AgKGxv b3AsIExJX0ZST01fSU5ORVJNT1NUKQorICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xp c3QgKGNmdW4sIExJX0ZST01fSU5ORVJNT1NUKSkKICAgICAgICBpZiAobG9vcC0+aGVhZGVy LT5jb3VudC5pbml0aWFsaXplZF9wICgpKQogICAgICAgICAgZnByaW50ZiAoZHVtcF9maWxl LCAiTG9vcCBnb3QgcHJlZGljdGVkICVkIHRvIGl0ZXJhdGUgJWkgdGltZXMuXG4iLAogICAg ICAgIAkgICBsb29wLT5udW0sCmRpZmYgLS1naXQgYS9nY2MvcHJvZmlsZS5jIGIvZ2NjL3By b2ZpbGUuYwppbmRleCAxZmE0MTk2ZmExNi4uYzMzYzgzMzE2N2YgMTAwNjQ0Ci0tLSBhL2dj Yy9wcm9maWxlLmMKKysrIGIvZ2NjL3Byb2ZpbGUuYwpAQCAtMTQ2NiwxMyArMTQ2NiwxMiBA QCBicmFuY2hfcHJvYiAoYm9vbCB0aHVuaykKICAgaWYgKGZsYWdfYnJhbmNoX3Byb2JhYmls aXRpZXMKICAgICAgICYmIChwcm9maWxlX3N0YXR1c19mb3JfZm4gKGNmdW4pID09IFBST0ZJ TEVfUkVBRCkpCiAgICAgewotICAgICAgY2xhc3MgbG9vcCAqbG9vcDsKICAgICAgIGlmIChk dW1wX2ZpbGUgJiYgKGR1bXBfZmxhZ3MgJiBUREZfREVUQUlMUykpCiAJcmVwb3J0X3ByZWRp Y3Rvcl9oaXRyYXRlcyAoKTsKIAogICAgICAgLyogQXQgdGhpcyBtb21lbnQgd2UgaGF2ZSBw cmVjaXNlIGxvb3AgaXRlcmF0aW9uIGNvdW50IGVzdGltYXRlcy4KIAkgUmVjb3JkIHRoZW0g dG8gbG9vcCBzdHJ1Y3R1cmUgYmVmb3JlIHRoZSBwcm9maWxlIGdldHMgb3V0IG9mIGRhdGUu ICovCi0gICAgICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQorICAgICAgZm9yIChhdXRvIGxv b3AgOiBsb29wc19saXN0IChjZnVuLCAwKSkKIAlpZiAobG9vcC0+aGVhZGVyLT5jb3VudCA+ IDAgJiYgbG9vcC0+aGVhZGVyLT5jb3VudC5yZWxpYWJsZV9wICgpKQogCSAgewogCSAgICBn Y292X3R5cGUgbml0ID0gZXhwZWN0ZWRfbG9vcF9pdGVyYXRpb25zX3VuYm91bmRlZCAobG9v cCk7CmRpZmYgLS1naXQgYS9nY2Mvc2VsLXNjaGVkLWlyLmMgYi9nY2Mvc2VsLXNjaGVkLWly LmMKaW5kZXggZWVmOWQ2OTY5ZjQuLjQ4OTY1YmZiMGFkIDEwMDY0NAotLS0gYS9nY2Mvc2Vs LXNjaGVkLWlyLmMKKysrIGIvZ2NjL3NlbC1zY2hlZC1pci5jCkBAIC02MjQ3LDEwICs2MjQ3 LDggQEAgbWFrZV9yZWdpb25zX2Zyb21fdGhlX3Jlc3QgKHZvaWQpCiAvKiBGcmVlIGRhdGEg c3RydWN0dXJlcyB1c2VkIGluIHBpcGVsaW5pbmcgb2YgbG9vcHMuICAqLwogdm9pZCBzZWxf ZmluaXNoX3BpcGVsaW5pbmcgKHZvaWQpCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7Ci0KICAg LyogUmVsZWFzZSBhdXggZmllbGRzIHNvIHdlIGRvbid0IGZyZWUgdGhlbSBsYXRlciBieSBt aXN0YWtlLiAgKi8KLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKyAgZm9yIChhdXRvIGxv b3AgOiBsb29wc19saXN0IChjZnVuLCAwKSkKICAgICBsb29wLT5hdXggPSBOVUxMOwogCiAg IGxvb3Bfb3B0aW1pemVyX2ZpbmFsaXplICgpOwpAQCAtNjI3MSwxMSArNjI2OSwxMSBAQCBz ZWxfZmluZF9yZ25zICh2b2lkKQogCiAgIGlmIChjdXJyZW50X2xvb3BzKQogICAgIHsKLSAg ICAgIGxvb3BfcCBsb29wOworICAgICAgdW5zaWduZWQgZmxhZ3MgPSBmbGFnX3NlbF9zY2hl ZF9waXBlbGluaW5nX291dGVyX2xvb3BzCisJCQkgPyBMSV9GUk9NX0lOTkVSTU9TVAorCQkJ IDogTElfT05MWV9JTk5FUk1PU1Q7CiAKLSAgICAgIEZPUl9FQUNIX0xPT1AgKGxvb3AsIChm bGFnX3NlbF9zY2hlZF9waXBlbGluaW5nX291dGVyX2xvb3BzCi0JCQkgICAgPyBMSV9GUk9N X0lOTkVSTU9TVAotCQkJICAgIDogTElfT05MWV9JTk5FUk1PU1QpKQorICAgICAgZm9yIChh dXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCBmbGFncykpCiAJbWFrZV9yZWdpb25zX2Zy b21fbG9vcF9uZXN0IChsb29wKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL2djYy90cmVlLWNm Zy5jIGIvZ2NjL3RyZWUtY2ZnLmMKaW5kZXggYzhiMGY3YjMzZTEuLjQ4ZWU4YzAxMWFiIDEw MDY0NAotLS0gYS9nY2MvdHJlZS1jZmcuYworKysgYi9nY2MvdHJlZS1jZmcuYwpAQCAtMzEy LDEyICszMTIsMTEgQEAgcmVwbGFjZV9sb29wX2Fubm90YXRlX2luX2Jsb2NrIChiYXNpY19i bG9jayBiYiwgY2xhc3MgbG9vcCAqbG9vcCkKIHN0YXRpYyB2b2lkCiByZXBsYWNlX2xvb3Bf YW5ub3RhdGUgKHZvaWQpCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIGJhc2ljX2Jsb2Nr IGJiOwogICBnaW1wbGVfc3RtdF9pdGVyYXRvciBnc2k7CiAgIGdpbXBsZSAqc3RtdDsKIAot ICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xp c3QgKGNmdW4sIDApKQogICAgIHsKICAgICAgIC8qIEZpcnN0IGxvb2sgaW50byB0aGUgaGVh ZGVyLiAgKi8KICAgICAgIHJlcGxhY2VfbG9vcF9hbm5vdGF0ZV9pbl9ibG9jayAobG9vcC0+ aGVhZGVyLCBsb29wKTsKQEAgLTIwMjcsMTIgKzIwMjYsOCBAQCByZXBsYWNlX3VzZXNfYnkg KHRyZWUgbmFtZSwgdHJlZSB2YWwpCiAgIC8qIEFsc28gdXBkYXRlIHRoZSB0cmVlcyBzdG9y ZWQgaW4gbG9vcCBzdHJ1Y3R1cmVzLiAgKi8KICAgaWYgKGN1cnJlbnRfbG9vcHMpCiAgICAg ewotICAgICAgY2xhc3MgbG9vcCAqbG9vcDsKLQotICAgICAgRk9SX0VBQ0hfTE9PUCAobG9v cCwgMCkKLQl7CisgICAgICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIDAp KQogCSAgc3Vic3RpdHV0ZV9pbl9sb29wX2luZm8gKGxvb3AsIG5hbWUsIHZhbCk7Ci0JfQog ICAgIH0KIH0KIApAQCAtNzc1Miw5ICs3NzQ3LDkgQEAgbW92ZV9zZXNlX3JlZ2lvbl90b19m biAoc3RydWN0IGZ1bmN0aW9uICpkZXN0X2NmdW4sIGJhc2ljX2Jsb2NrIGVudHJ5X2JiLAog CiAgIC8qIEZpeCB1cCBvcmlnX2xvb3BfbnVtLiAgSWYgdGhlIGJsb2NrIHJlZmVyZW5jZWQg aW4gaXQgaGFzIGJlZW4gbW92ZWQKICAgICAgdG8gZGVzdF9jZnVuLCB1cGRhdGUgb3JpZ19s b29wX251bSBmaWVsZCwgb3RoZXJ3aXNlIGNsZWFyIGl0LiAgKi8KLSAgY2xhc3MgbG9vcCAq ZGxvb3A7CisgIGNsYXNzIGxvb3AgKmRsb29wID0gTlVMTDsKICAgc2lnbmVkIGNoYXIgKm1v dmVkX29yaWdfbG9vcF9udW0gPSBOVUxMOwotICBGT1JfRUFDSF9MT09QX0ZOIChkZXN0X2Nm dW4sIGRsb29wLCAwKQorICBmb3IgKGNsYXNzIGxvb3AgKmRsb29wIDogbG9vcHNfbGlzdCAo ZGVzdF9jZnVuLCAwKSkKICAgICBpZiAoZGxvb3AtPm9yaWdfbG9vcF9udW0pCiAgICAgICB7 CiAJaWYgKG1vdmVkX29yaWdfbG9vcF9udW0gPT0gTlVMTCkKZGlmZiAtLWdpdCBhL2djYy90 cmVlLWlmLWNvbnYuYyBiL2djYy90cmVlLWlmLWNvbnYuYwppbmRleCAzNDU0ODhlMmExOS4u ZmY0YmM2MjgzOGQgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWlmLWNvbnYuYworKysgYi9nY2Mv dHJlZS1pZi1jb252LmMKQEAgLTMzMDAsMTQgKzMzMDAsMTMgQEAgcGFzc19pZl9jb252ZXJz aW9uOjpnYXRlIChmdW5jdGlvbiAqZnVuKQogdW5zaWduZWQgaW50CiBwYXNzX2lmX2NvbnZl cnNpb246OmV4ZWN1dGUgKGZ1bmN0aW9uICpmdW4pCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7 CiAgIHVuc2lnbmVkIHRvZG8gPSAwOwogCiAgIGlmIChudW1iZXJfb2ZfbG9vcHMgKGZ1bikg PD0gMSkKICAgICByZXR1cm4gMDsKIAogICBhdXRvX3ZlYzxnaW1wbGUgKj4gcHJlZHM7Ci0g IEZPUl9FQUNIX0xPT1AgKGxvb3AsIDApCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlz dCAoY2Z1biwgMCkpCiAgICAgaWYgKGZsYWdfdHJlZV9sb29wX2lmX2NvbnZlcnQgPT0gMQog CXx8ICgoZmxhZ190cmVlX2xvb3BfdmVjdG9yaXplIHx8IGxvb3AtPmZvcmNlX3ZlY3Rvcml6 ZSkKIAkgICAgJiYgIWxvb3AtPmRvbnRfdmVjdG9yaXplKSkKZGlmZiAtLWdpdCBhL2djYy90 cmVlLWxvb3AtZGlzdHJpYnV0aW9uLmMgYi9nY2MvdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5j CmluZGV4IDY1YWExZGY0YWJhLi5lNDQ1ZTYxMGYxNSAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt bG9vcC1kaXN0cmlidXRpb24uYworKysgYi9nY2MvdHJlZS1sb29wLWRpc3RyaWJ1dGlvbi5j CkBAIC0zMzEyLDcgKzMzMTIsNyBAQCBsb29wX2Rpc3RyaWJ1dGlvbjo6ZXhlY3V0ZSAoZnVu Y3Rpb24gKmZ1bikKIAogICAvKiBXZSBjYW4gYXQgdGhlIG1vbWVudCBvbmx5IGRpc3RyaWJ1 dGUgbm9uLW5lc3RlZCBsb29wcywgdGh1cyByZXN0cmljdAogICAgICB3YWxraW5nIHRvIGlu bmVybW9zdCBsb29wcy4gICovCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX09OTFlfSU5O RVJNT1NUKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX09OTFlf SU5ORVJNT1NUKSkKICAgICB7CiAgICAgICAvKiBEb24ndCBkaXN0cmlidXRlIG11bHRpcGxl IGV4aXQgZWRnZXMgbG9vcCwgb3IgY29sZCBsb29wIHdoZW4KICAgICAgICAgIG5vdCBkb2lu ZyBwYXR0ZXJuIGRldGVjdGlvbi4gICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1wYXJsb29w cy5jIGIvZ2NjL3RyZWUtcGFybG9vcHMuYwppbmRleCBmZTFiYWVmMzJhNy4uNmIxNDIzYmU0 NDEgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXBhcmxvb3BzLmMKKysrIGIvZ2NjL3RyZWUtcGFy bG9vcHMuYwpAQCAtMzk4OSw3ICszOTg5LDYgQEAgcGFyYWxsZWxpemVfbG9vcHMgKGJvb2wg b2FjY19rZXJuZWxzX3ApCiB7CiAgIHVuc2lnbmVkIG5fdGhyZWFkczsKICAgYm9vbCBjaGFu Z2VkID0gZmFsc2U7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIGNsYXNzIGxvb3AgKnNraXBf bG9vcCA9IE5VTEw7CiAgIGNsYXNzIHRyZWVfbml0ZXJfZGVzYyBuaXRlcl9kZXNjOwogICBz dHJ1Y3Qgb2JzdGFjayBwYXJsb29wX29ic3RhY2s7CkBAIC00MDIwLDcgKzQwMTksNyBAQCBw YXJhbGxlbGl6ZV9sb29wcyAoYm9vbCBvYWNjX2tlcm5lbHNfcCkKIAogICBjYWxjdWxhdGVf ZG9taW5hbmNlX2luZm8gKENESV9ET01JTkFUT1JTKTsKIAotICBGT1JfRUFDSF9MT09QIChs b29wLCAwKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIDApKQogICAg IHsKICAgICAgIGlmIChsb29wID09IHNraXBfbG9vcCkKIAl7CmRpZmYgLS1naXQgYS9nY2Mv dHJlZS1wcmVkY29tLmMgYi9nY2MvdHJlZS1wcmVkY29tLmMKaW5kZXggY2Y4NTUxN2UxYzcu LmJlZDMwZDJlYzdhIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1wcmVkY29tLmMKKysrIGIvZ2Nj L3RyZWUtcHJlZGNvbS5jCkBAIC0zNDE5LDExICszNDE5LDEwIEBAIHBjb21fd29ya2VyOjp0 cmVlX3ByZWRpY3RpdmVfY29tbW9uaW5nX2xvb3AgKGJvb2wgYWxsb3dfdW5yb2xsX3ApCiB1 bnNpZ25lZAogdHJlZV9wcmVkaWN0aXZlX2NvbW1vbmluZyAoYm9vbCBhbGxvd191bnJvbGxf cCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKICAgdW5zaWduZWQgcmV0ID0gMCwgY2hhbmdl ZCA9IDA7CiAKICAgaW5pdGlhbGl6ZV9vcmlnaW5hbF9jb3B5X3RhYmxlcyAoKTsKLSAgRk9S X0VBQ0hfTE9PUCAobG9vcCwgTElfT05MWV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29w IDogbG9vcHNfbGlzdCAoY2Z1biwgTElfT05MWV9JTk5FUk1PU1QpKQogICAgIGlmIChvcHRp bWl6ZV9sb29wX2Zvcl9zcGVlZF9wIChsb29wKSkKICAgICAgIHsKIAlwY29tX3dvcmtlciB3 KGxvb3ApOwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jIGIvZ2Nj L3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jCmluZGV4IGIyMmQ0OWEwYWI2Li5kYmRmZThmZmE3 MiAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUtc2NhbGFyLWV2b2x1dGlvbi5jCisrKyBiL2djYy90 cmVlLXNjYWxhci1ldm9sdXRpb24uYwpAQCAtMjk3NywxNiArMjk3NywxMiBAQCBnYXRoZXJf c3RhdHNfb25fc2Nldl9kYXRhYmFzZSAodm9pZCkKIHZvaWQKIHNjZXZfaW5pdGlhbGl6ZSAo dm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKLQogICBnY2NfYXNzZXJ0ICghIHNjZXZf aW5pdGlhbGl6ZWRfcCAoKSk7CiAKICAgc2NhbGFyX2V2b2x1dGlvbl9pbmZvID0gaGFzaF90 YWJsZTxzY2V2X2luZm9faGFzaGVyPjo6Y3JlYXRlX2dnYyAoMTAwKTsKIAotICBGT1JfRUFD SF9MT09QIChsb29wLCAwKQotICAgIHsKLSAgICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBO VUxMX1RSRUU7Ci0gICAgfQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4s IDApKQorICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBOVUxMX1RSRUU7CiB9CiAKIC8qIFJl dHVybiB0cnVlIGlmIFNDRVYgaXMgaW5pdGlhbGl6ZWQuICAqLwpAQCAtMzAxNSwxNCArMzAx MSwxMCBAQCBzY2V2X3Jlc2V0X2h0YWIgKHZvaWQpCiB2b2lkCiBzY2V2X3Jlc2V0ICh2b2lk KQogewotICBjbGFzcyBsb29wICpsb29wOwotCiAgIHNjZXZfcmVzZXRfaHRhYiAoKTsKIAot ICBGT1JfRUFDSF9MT09QIChsb29wLCAwKQotICAgIHsKLSAgICAgIGxvb3AtPm5iX2l0ZXJh dGlvbnMgPSBOVUxMX1RSRUU7Ci0gICAgfQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xp c3QgKGNmdW4sIDApKQorICAgIGxvb3AtPm5iX2l0ZXJhdGlvbnMgPSBOVUxMX1RSRUU7CiB9 CiAKIC8qIFJldHVybiB0cnVlIGlmIHRoZSBJViBjYWxjdWxhdGlvbiBpbiBUWVBFIGNhbiBv dmVyZmxvdyBiYXNlZCBvbiB0aGUga25vd2xlZGdlCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1z c2EtZGNlLmMgYi9nY2MvdHJlZS1zc2EtZGNlLmMKaW5kZXggZTJkM2I2M2EzMGMuLjA3Nzhl Yjk3MDRhIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtZGNlLmMKKysrIGIvZ2NjL3RyZWUt c3NhLWRjZS5jCkBAIC00MTcsNyArNDE3LDYgQEAgZmluZF9vYnZpb3VzbHlfbmVjZXNzYXJ5 X3N0bXRzIChib29sIGFnZ3Jlc3NpdmUpCiAgIC8qIFByZXZlbnQgdGhlIGVtcHR5IHBvc3Np Ymx5IGluZmluaXRlIGxvb3BzIGZyb20gYmVpbmcgcmVtb3ZlZC4gICovCiAgIGlmIChhZ2dy ZXNzaXZlKQogICAgIHsKLSAgICAgIGNsYXNzIGxvb3AgKmxvb3A7CiAgICAgICBpZiAobWFy a19pcnJlZHVjaWJsZV9sb29wcyAoKSkKIAlGT1JfRUFDSF9CQl9GTiAoYmIsIGNmdW4pCiAJ ICB7CkBAIC00MzMsNyArNDMyLDcgQEAgZmluZF9vYnZpb3VzbHlfbmVjZXNzYXJ5X3N0bXRz IChib29sIGFnZ3Jlc3NpdmUpCiAJCX0KIAkgIH0KIAotICAgICAgRk9SX0VBQ0hfTE9PUCAo bG9vcCwgMCkKKyAgICAgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgMCkp CiAJaWYgKCFmaW5pdGVfbG9vcF9wIChsb29wKSkKIAkgIHsKIAkgICAgaWYgKGR1bXBfZmls ZSkKZGlmZiAtLWdpdCBhL2djYy90cmVlLXNzYS1saXZlLmMgYi9nY2MvdHJlZS1zc2EtbGl2 ZS5jCmluZGV4IGEyYWFiMjVlODYyLi4zZDVmYThkYzBmOCAxMDA2NDQKLS0tIGEvZ2NjL3Ry ZWUtc3NhLWxpdmUuYworKysgYi9nY2MvdHJlZS1zc2EtbGl2ZS5jCkBAIC05MDgsOCArOTA4 LDcgQEAgcmVtb3ZlX3VudXNlZF9sb2NhbHMgKHZvaWQpCiAKICAgaWYgKGNmdW4tPmhhc19z aW1kdWlkX2xvb3BzKQogICAgIHsKLSAgICAgIGNsYXNzIGxvb3AgKmxvb3A7Ci0gICAgICBG T1JfRUFDSF9MT09QIChsb29wLCAwKQorICAgICAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19s aXN0IChjZnVuLCAwKSkKIAlpZiAobG9vcC0+c2ltZHVpZCAmJiAhaXNfdXNlZF9wIChsb29w LT5zaW1kdWlkKSkKIAkgIGxvb3AtPnNpbWR1aWQgPSBOVUxMX1RSRUU7CiAgICAgfQpkaWZm IC0tZ2l0IGEvZ2NjL3RyZWUtc3NhLWxvb3AtY2guYyBiL2djYy90cmVlLXNzYS1sb29wLWNo LmMKaW5kZXggZGZhNWRjODdjMzQuLmI0ZTA5Zjk3YjI4IDEwMDY0NAotLS0gYS9nY2MvdHJl ZS1zc2EtbG9vcC1jaC5jCisrKyBiL2djYy90cmVlLXNzYS1sb29wLWNoLmMKQEAgLTM0OCw3 ICszNDgsNiBAQCBwcm90ZWN0ZWQ6CiB1bnNpZ25lZCBpbnQKIGNoX2Jhc2U6OmNvcHlfaGVh ZGVycyAoZnVuY3Rpb24gKmZ1bikKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKICAgYmFzaWNf YmxvY2sgaGVhZGVyOwogICBlZGdlIGV4aXQsIGVudHJ5OwogICBiYXNpY19ibG9jayAqYmJz LCAqY29waWVkX2JiczsKQEAgLTM2NSw3ICszNjQsNyBAQCBjaF9iYXNlOjpjb3B5X2hlYWRl cnMgKGZ1bmN0aW9uICpmdW4pCiAKICAgYXV0b192ZWM8c3RkOjpwYWlyPGVkZ2UsIGxvb3Bf cD4gPiBjb3BpZWQ7CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKyAgZm9yIChhdXRv IGxvb3AgOiBsb29wc19saXN0IChjZnVuLCAwKSkKICAgICB7CiAgICAgICBpbnQgaW5pdGlh bF9saW1pdCA9IHBhcmFtX21heF9sb29wX2hlYWRlcl9pbnNuczsKICAgICAgIGludCByZW1h aW5pbmdfbGltaXQgPSBpbml0aWFsX2xpbWl0OwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtc3Nh LWxvb3AtaW0uYyBiL2djYy90cmVlLXNzYS1sb29wLWltLmMKaW5kZXggODFiNGVjMjFkNmUu LjJkN2IxN2Q3ODI0IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2EtbG9vcC1pbS5jCisrKyBi L2djYy90cmVlLXNzYS1sb29wLWltLmMKQEAgLTE2NjIsNyArMTY2Miw3IEBAIGFuYWx5emVf bWVtb3J5X3JlZmVyZW5jZXMgKGJvb2wgc3RvcmVfbW90aW9uKQogewogICBnaW1wbGVfc3Rt dF9pdGVyYXRvciBic2k7CiAgIGJhc2ljX2Jsb2NrIGJiLCAqYmJzOwotICBjbGFzcyBsb29w ICpsb29wLCAqb3V0ZXI7CisgIGNsYXNzIGxvb3AgKm91dGVyOwogICB1bnNpZ25lZCBpLCBu OwogCiAgIC8qIENvbGxlY3QgYWxsIGJhc2ljLWJsb2NrcyBpbiBsb29wcyBhbmQgc29ydCB0 aGVtIGFmdGVyIHRoZWlyCkBAIC0xNzA2LDcgKzE3MDYsNyBAQCBhbmFseXplX21lbW9yeV9y ZWZlcmVuY2VzIChib29sIHN0b3JlX21vdGlvbikKIAogICAvKiBQcm9wYWdhdGUgdGhlIGlu Zm9ybWF0aW9uIGFib3V0IGFjY2Vzc2VkIG1lbW9yeSByZWZlcmVuY2VzIHVwCiAgICAgIHRo ZSBsb29wIGhpZXJhcmNoeS4gICovCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01f SU5ORVJNT1NUKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZS T01fSU5ORVJNT1NUKSkKICAgICB7CiAgICAgICAvKiBGaW5hbGl6ZSB0aGUgb3ZlcmFsbCB0 b3VjaGVkIHJlZmVyZW5jZXMgKGluY2x1ZGluZyBzdWJsb29wcykuICAqLwogICAgICAgYml0 bWFwX2lvcl9pbnRvICgmbWVtb3J5X2FjY2Vzc2VzLmFsbF9yZWZzX3N0b3JlZF9pbl9sb29w W2xvb3AtPm51bV0sCkBAIC0zMTMzLDcgKzMxMzMsNiBAQCBmaWxsX2Fsd2F5c19leGVjdXRl ZF9pbiAodm9pZCkKIHN0YXRpYyB2b2lkCiB0cmVlX3NzYV9saW1faW5pdGlhbGl6ZSAoYm9v bCBzdG9yZV9tb3Rpb24pCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIHVuc2lnbmVkIGk7 CiAKICAgYml0bWFwX29ic3RhY2tfaW5pdGlhbGl6ZSAoJmxpbV9iaXRtYXBfb2JzdGFjayk7 CkBAIC0zMTc3LDcgKzMxNzYsNyBAQCB0cmVlX3NzYV9saW1faW5pdGlhbGl6ZSAoYm9vbCBz dG9yZV9tb3Rpb24pCiAgICAgIGl0cyBwb3N0b3JkZXIgaW5kZXguICAqLwogICBpID0gMDsK ICAgYmJfbG9vcF9wb3N0b3JkZXIgPSBYTkVXVkVDICh1bnNpZ25lZCwgbnVtYmVyX29mX2xv b3BzIChjZnVuKSk7Ci0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01fSU5ORVJNT1NU KQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5ORVJN T1NUKSkKICAgICBiYl9sb29wX3Bvc3RvcmRlcltsb29wLT5udW1dID0gaSsrOwogfQogCmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1pdmNhbm9uLmMgYi9nY2MvdHJlZS1zc2Et bG9vcC1pdmNhbm9uLmMKaW5kZXggYjE5NzFmODM1NDQuLjhkODc5MWY4MzdlIDEwMDY0NAot LS0gYS9nY2MvdHJlZS1zc2EtbG9vcC1pdmNhbm9uLmMKKysrIGIvZ2NjL3RyZWUtc3NhLWxv b3AtaXZjYW5vbi5jCkBAIC0xMjg1LDE0ICsxMjg1LDEzIEBAIGNhbm9uaWNhbGl6ZV9sb29w X2luZHVjdGlvbl92YXJpYWJsZXMgKGNsYXNzIGxvb3AgKmxvb3AsCiB1bnNpZ25lZCBpbnQK IGNhbm9uaWNhbGl6ZV9pbmR1Y3Rpb25fdmFyaWFibGVzICh2b2lkKQogewotICBjbGFzcyBs b29wICpsb29wOwogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKICAgYm9vbCBpcnJlZF9pbnZh bGlkYXRlZCA9IGZhbHNlOwogICBiaXRtYXAgbG9vcF9jbG9zZWRfc3NhX2ludmFsaWRhdGVk ID0gQklUTUFQX0FMTE9DIChOVUxMKTsKIAogICBlc3RpbWF0ZV9udW1iZXJzX29mX2l0ZXJh dGlvbnMgKGNmdW4pOwogCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01fSU5ORVJN T1NUKQorICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5O RVJNT1NUKSkKICAgICB7CiAgICAgICBjaGFuZ2VkIHw9IGNhbm9uaWNhbGl6ZV9sb29wX2lu ZHVjdGlvbl92YXJpYWJsZXMgKGxvb3AsCiAJCQkJCQkJdHJ1ZSwgVUxfU0lOR0xFX0lURVIs CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1pdm9wdHMuYyBiL2djYy90cmVlLXNz YS1sb29wLWl2b3B0cy5jCmluZGV4IDEyYThhNDlhMzA3Li41MjU5ZmIwNWE5MCAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLWxvb3AtaXZvcHRzLmMKKysrIGIvZ2NjL3RyZWUtc3NhLWxv b3AtaXZvcHRzLmMKQEAgLTgwNjYsMTQgKzgwNjYsMTMgQEAgZmluaXNoOgogdm9pZAogdHJl ZV9zc2FfaXZfb3B0aW1pemUgKHZvaWQpCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIHN0 cnVjdCBpdm9wdHNfZGF0YSBkYXRhOwogICBhdXRvX2JpdG1hcCB0b3JlbW92ZTsKIAogICB0 cmVlX3NzYV9pdl9vcHRpbWl6ZV9pbml0ICgmZGF0YSk7CiAKICAgLyogT3B0aW1pemUgdGhl IGxvb3BzIHN0YXJ0aW5nIHdpdGggdGhlIGlubmVybW9zdCBvbmVzLiAgKi8KLSAgRk9SX0VB Q0hfTE9PUCAobG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDog bG9vcHNfbGlzdCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGlm ICghZGJnX2NudCAoaXZvcHRzX2xvb3ApKQogCWNvbnRpbnVlOwpkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtc3NhLWxvb3AtbWFuaXAuYyBiL2djYy90cmVlLXNzYS1sb29wLW1hbmlwLmMKaW5k ZXggMjhhZTEzMTZmYTAuLjNhZmYzNzM1YmFiIDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2Et bG9vcC1tYW5pcC5jCisrKyBiL2djYy90cmVlLXNzYS1sb29wLW1hbmlwLmMKQEAgLTM2Miwx MSArMzYyLDEwIEBAIGFkZF9leGl0X3BoaXMgKGJpdG1hcCBuYW1lc190b19yZW5hbWUsIGJp dG1hcCAqdXNlX2Jsb2NrcywgYml0bWFwICpsb29wX2V4aXRzKQogc3RhdGljIHZvaWQKIGdl dF9sb29wc19leGl0cyAoYml0bWFwICpsb29wX2V4aXRzKQogewotICBjbGFzcyBsb29wICps b29wOwogICB1bnNpZ25lZCBqOwogICBlZGdlIGU7CiAKLSAgRk9SX0VBQ0hfTE9PUCAobG9v cCwgMCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCAwKSkKICAgICB7 CiAgICAgICBhdXRvX3ZlYzxlZGdlPiBleGl0X2VkZ2VzID0gZ2V0X2xvb3BfZXhpdF9lZGdl cyAobG9vcCk7CiAgICAgICBsb29wX2V4aXRzW2xvb3AtPm51bV0gPSBCSVRNQVBfQUxMT0Mg KCZsb29wX3JlbmFtZXJfb2JzdGFjayk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9v cC1uaXRlci5jIGIvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuYwppbmRleCA2ZmFiZjEwYTIx NS4uNjUwZWM3MjBlNDMgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29wLW5pdGVyLmMK KysrIGIvZ2NjL3RyZWUtc3NhLWxvb3Atbml0ZXIuYwpAQCAtNDU1OSwxMyArNDU1OSwxMSBA QCBlc3RpbWF0ZWRfc3RtdF9leGVjdXRpb25zIChjbGFzcyBsb29wICpsb29wLCB3aWRlc3Rf aW50ICpuaXQpCiB2b2lkCiBlc3RpbWF0ZV9udW1iZXJzX29mX2l0ZXJhdGlvbnMgKGZ1bmN0 aW9uICpmbikKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKLQogICAvKiBXZSBkb24ndCB3YW50 IHRvIGlzc3VlIHNpZ25lZCBvdmVyZmxvdyB3YXJuaW5ncyB3aGlsZSBnZXR0aW5nCiAgICAg IGxvb3AgaXRlcmF0aW9uIGVzdGltYXRlcy4gICovCiAgIGZvbGRfZGVmZXJfb3ZlcmZsb3df d2FybmluZ3MgKCk7CiAKLSAgRk9SX0VBQ0hfTE9PUF9GTiAoZm4sIGxvb3AsIDApCisgIGZv ciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoZm4sIDApKQogICAgIGVzdGltYXRlX251bWJl cnNfb2ZfaXRlcmF0aW9ucyAobG9vcCk7CiAKICAgZm9sZF91bmRlZmVyX2FuZF9pZ25vcmVf b3ZlcmZsb3dfd2FybmluZ3MgKCk7CkBAIC01MDMxLDkgKzUwMjksNyBAQCBmcmVlX251bWJl cnNfb2ZfaXRlcmF0aW9uc19lc3RpbWF0ZXMgKGNsYXNzIGxvb3AgKmxvb3ApCiB2b2lkCiBm cmVlX251bWJlcnNfb2ZfaXRlcmF0aW9uc19lc3RpbWF0ZXMgKGZ1bmN0aW9uICpmbikKIHsK LSAgY2xhc3MgbG9vcCAqbG9vcDsKLQotICBGT1JfRUFDSF9MT09QX0ZOIChmbiwgbG9vcCwg MCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChmbiwgMCkpCiAgICAgZnJlZV9u dW1iZXJzX29mX2l0ZXJhdGlvbnNfZXN0aW1hdGVzIChsb29wKTsKIH0KIApkaWZmIC0tZ2l0 IGEvZ2NjL3RyZWUtc3NhLWxvb3AtcHJlZmV0Y2guYyBiL2djYy90cmVlLXNzYS1sb29wLXBy ZWZldGNoLmMKaW5kZXggOTgwNjJlYjQ2MTYuLjg1OTc3ZTIzMjQ1IDEwMDY0NAotLS0gYS9n Y2MvdHJlZS1zc2EtbG9vcC1wcmVmZXRjaC5jCisrKyBiL2djYy90cmVlLXNzYS1sb29wLXBy ZWZldGNoLmMKQEAgLTE5ODAsNyArMTk4MCw2IEBAIGZhaWw6CiB1bnNpZ25lZCBpbnQKIHRy ZWVfc3NhX3ByZWZldGNoX2FycmF5cyAodm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsK ICAgYm9vbCB1bnJvbGxlZCA9IGZhbHNlOwogICBpbnQgdG9kb19mbGFncyA9IDA7CiAKQEAg LTIwMjUsNyArMjAyNCw3IEBAIHRyZWVfc3NhX3ByZWZldGNoX2FycmF5cyAodm9pZCkKICAg ICAgIHNldF9idWlsdGluX2RlY2wgKEJVSUxUX0lOX1BSRUZFVENILCBkZWNsLCBmYWxzZSk7 CiAgICAgfQogCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIExJX0ZST01fSU5ORVJNT1NUKQor ICBmb3IgKGF1dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5ORVJNT1NU KSkKICAgICB7CiAgICAgICBpZiAoZHVtcF9maWxlICYmIChkdW1wX2ZsYWdzICYgVERGX0RF VEFJTFMpKQogCWZwcmludGYgKGR1bXBfZmlsZSwgIlByb2Nlc3NpbmcgbG9vcCAlZDpcbiIs IGxvb3AtPm51bSk7CmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC1zcGxpdC5jIGIv Z2NjL3RyZWUtc3NhLWxvb3Atc3BsaXQuYwppbmRleCAzYTA5YmJjMzllNS4uM2Y2YWQwNDY2 MjMgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29wLXNwbGl0LmMKKysrIGIvZ2NjL3Ry ZWUtc3NhLWxvb3Atc3BsaXQuYwpAQCAtMTU5OCwxOCArMTU5OCwxNyBAQCBzcGxpdF9sb29w X29uX2NvbmQgKHN0cnVjdCBsb29wICpsb29wKQogc3RhdGljIHVuc2lnbmVkIGludAogdHJl ZV9zc2Ffc3BsaXRfbG9vcHMgKHZvaWQpCiB7Ci0gIGNsYXNzIGxvb3AgKmxvb3A7CiAgIGJv b2wgY2hhbmdlZCA9IGZhbHNlOwogCiAgIGdjY19hc3NlcnQgKHNjZXZfaW5pdGlhbGl6ZWRf cCAoKSk7CiAKICAgY2FsY3VsYXRlX2RvbWluYW5jZV9pbmZvIChDRElfUE9TVF9ET01JTkFU T1JTKTsKIAotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9JTkNMVURFX1JPT1QpCisgIGZv ciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfSU5DTFVERV9ST09UKSkKICAg ICBsb29wLT5hdXggPSBOVUxMOwogCiAgIC8qIEdvIHRocm91Z2ggYWxsIGxvb3BzIHN0YXJ0 aW5nIGZyb20gaW5uZXJtb3N0LiAgKi8KLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgTElfRlJP TV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElf RlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGlmIChsb29wLT5hdXgpCiAJewpAQCAt MTYzMCw3ICsxNjI5LDcgQEAgdHJlZV9zc2Ffc3BsaXRfbG9vcHMgKHZvaWQpCiAJfQogICAg IH0KIAotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9JTkNMVURFX1JPT1QpCisgIGZvciAo YXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgTElfSU5DTFVERV9ST09UKSkKICAgICBs b29wLT5hdXggPSBOVUxMOwogCiAgIGNsZWFyX2F1eF9mb3JfYmxvY2tzICgpOwpkaWZmIC0t Z2l0IGEvZ2NjL3RyZWUtc3NhLWxvb3AtdW5zd2l0Y2guYyBiL2djYy90cmVlLXNzYS1sb29w LXVuc3dpdGNoLmMKaW5kZXggMDRkNDU1M2YxM2UuLmZlNGRhY2MwODMzIDEwMDY0NAotLS0g YS9nY2MvdHJlZS1zc2EtbG9vcC11bnN3aXRjaC5jCisrKyBiL2djYy90cmVlLXNzYS1sb29w LXVuc3dpdGNoLmMKQEAgLTkwLDExICs5MCwxMCBAQCBzdGF0aWMgdHJlZSBnZXRfdm9wX2Zy b21faGVhZGVyIChjbGFzcyBsb29wICopOwogdW5zaWduZWQgaW50CiB0cmVlX3NzYV91bnN3 aXRjaF9sb29wcyAodm9pZCkKIHsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKICAgYm9vbCBjaGFu Z2VkID0gZmFsc2U7CiAKICAgLyogR28gdGhyb3VnaCBhbGwgbG9vcHMgc3RhcnRpbmcgZnJv bSBpbm5lcm1vc3QuICAqLwotICBGT1JfRUFDSF9MT09QIChsb29wLCBMSV9GUk9NX0lOTkVS TU9TVCkKKyAgZm9yIChhdXRvIGxvb3AgOiBsb29wc19saXN0IChjZnVuLCBMSV9GUk9NX0lO TkVSTU9TVCkpCiAgICAgewogICAgICAgaWYgKCFsb29wLT5pbm5lcikKIAkvKiBVbnN3aXRj aCBpbm5lcm1vc3QgbG9vcC4gICovCmRpZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtbG9vcC5j IGIvZ2NjL3RyZWUtc3NhLWxvb3AuYwppbmRleCA5NTdhYzBmM2JhYS4uMGNjNGIzYmJjY2Yg MTAwNjQ0Ci0tLSBhL2djYy90cmVlLXNzYS1sb29wLmMKKysrIGIvZ2NjL3RyZWUtc3NhLWxv b3AuYwpAQCAtMTU3LDggKzE1Nyw3IEBAIGdhdGVfb2FjY19rZXJuZWxzIChmdW5jdGlvbiAq Zm4pCiAgIGlmICghbG9va3VwX2F0dHJpYnV0ZSAoIm9hY2Mga2VybmVscyIsIERFQ0xfQVRU UklCVVRFUyAoZm4tPmRlY2wpKSkKICAgICByZXR1cm4gZmFsc2U7CiAKLSAgY2xhc3MgbG9v cCAqbG9vcDsKLSAgRk9SX0VBQ0hfTE9PUCAobG9vcCwgMCkKKyAgZm9yIChhdXRvIGxvb3Ag OiBsb29wc19saXN0IChjZnVuLCAwKSkKICAgICBpZiAobG9vcC0+aW5fb2FjY19rZXJuZWxz X3JlZ2lvbikKICAgICAgIHJldHVybiB0cnVlOwogCkBAIC00NTUsMTIgKzQ1NCwxMSBAQCBw dWJsaWM6CiB1bnNpZ25lZAogcGFzc19zY2V2X2Nwcm9wOjpleGVjdXRlIChmdW5jdGlvbiAq KQogewotICBjbGFzcyBsb29wICpsb29wOwogICBib29sIGFueSA9IGZhbHNlOwogCiAgIC8q IFBlcmZvcm0gZmluYWwgdmFsdWUgcmVwbGFjZW1lbnQgaW4gbG9vcHMsIGluIGNhc2UgdGhl IHJlcGxhY2VtZW50CiAgICAgIGV4cHJlc3Npb25zIGFyZSBjaGVhcC4gICovCi0gIEZPUl9F QUNIX0xPT1AgKGxvb3AsIExJX0ZST01fSU5ORVJNT1NUKQorICBmb3IgKGF1dG8gbG9vcCA6 IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5ORVJNT1NUKSkKICAgICBhbnkgfD0gZmlu YWxfdmFsdWVfcmVwbGFjZW1lbnRfbG9vcCAobG9vcCk7CiAKICAgcmV0dXJuIGFueSA/IFRP RE9fY2xlYW51cF9jZmcgfCBUT0RPX3VwZGF0ZV9zc2Ffb25seV92aXJ0dWFscyA6IDA7CmRp ZmYgLS1naXQgYS9nY2MvdHJlZS1zc2EtcHJvcGFnYXRlLmMgYi9nY2MvdHJlZS1zc2EtcHJv cGFnYXRlLmMKaW5kZXggZDkzZWM5MGIwMDIuLjZkMTk0MTBjYWE4IDEwMDY0NAotLS0gYS9n Y2MvdHJlZS1zc2EtcHJvcGFnYXRlLmMKKysrIGIvZ2NjL3RyZWUtc3NhLXByb3BhZ2F0ZS5j CkBAIC0xMjYyLDcgKzEyNjIsNiBAQCBjbGVhbl91cF9sb29wX2Nsb3NlZF9waGkgKGZ1bmN0 aW9uICpmdW4pCiAgIHRyZWUgcmhzOwogICB0cmVlIGxoczsKICAgZ3BoaV9pdGVyYXRvciBn c2k7Ci0gIHN0cnVjdCBsb29wICpsb29wOwogCiAgIC8qIEF2b2lkIHBvc3NpYmx5IHF1YWRy YXRpYyB3b3JrIHdoZW4gc2Nhbm5pbmcgZm9yIGxvb3AgZXhpdHMgYWNyb3NzCiAgICBhbGwg bG9vcHMgb2YgYSBuZXN0LiAgKi8KQEAgLTEyNzQsNyArMTI3Myw3IEBAIGNsZWFuX3VwX2xv b3BfY2xvc2VkX3BoaSAoZnVuY3Rpb24gKmZ1bikKICAgY2FsY3VsYXRlX2RvbWluYW5jZV9p bmZvICAoQ0RJX0RPTUlOQVRPUlMpOwogCiAgIC8qIFdhbGsgb3ZlciBsb29wIGluIGZ1bmN0 aW9uLiAgKi8KLSAgRk9SX0VBQ0hfTE9PUF9GTiAoZnVuLCBsb29wLCAwKQorICBmb3IgKGF1 dG8gbG9vcCA6IGxvb3BzX2xpc3QgKGZ1biwgMCkpCiAgICAgewogICAgICAgLyogQ2hlY2sg ZWFjaCBleGl0IGVkZWdlIG9mIGxvb3AuICAqLwogICAgICAgYXV0b192ZWM8ZWRnZT4gZXhp dHMgPSBnZXRfbG9vcF9leGl0X2VkZ2VzIChsb29wKTsKZGlmZiAtLWdpdCBhL2djYy90cmVl LXNzYS1zY2N2bi5jIGIvZ2NjL3RyZWUtc3NhLXNjY3ZuLmMKaW5kZXggNzkwMGRmOTQ2ZjQu LjdjYjVjNGRlMWE2IDEwMDY0NAotLS0gYS9nY2MvdHJlZS1zc2Etc2Njdm4uYworKysgYi9n Y2MvdHJlZS1zc2Etc2Njdm4uYwpAQCAtNzYzNyw5ICs3NjM3LDggQEAgZG9fcnBvX3ZuIChm dW5jdGlvbiAqZm4sIGVkZ2UgZW50cnksIGJpdG1hcCBleGl0X2JicywKICAgICAgbG9vcHMg YW5kIHRoZSBvdXRlcm1vc3Qgb25lIG9wdGltaXN0aWNhbGx5LiAgKi8KICAgaWYgKGl0ZXJh dGUpCiAgICAgewotICAgICAgbG9vcF9wIGxvb3A7CiAgICAgICB1bnNpZ25lZCBtYXhfZGVw dGggPSBwYXJhbV9ycG9fdm5fbWF4X2xvb3BfZGVwdGg7Ci0gICAgICBGT1JfRUFDSF9MT09Q IChsb29wLCBMSV9PTkxZX0lOTkVSTU9TVCkKKyAgICAgIGZvciAoYXV0byBsb29wIDogbG9v cHNfbGlzdCAoY2Z1biwgTElfT05MWV9JTk5FUk1PU1QpKQogCWlmIChsb29wX2RlcHRoIChs b29wKSA+IG1heF9kZXB0aCkKIAkgIGZvciAodW5zaWduZWQgaSA9IDI7CiAJICAgICAgIGkg PCBsb29wX2RlcHRoIChsb29wKSAtIG1heF9kZXB0aDsgKytpKQpkaWZmIC0tZ2l0IGEvZ2Nj L3RyZWUtc3NhLXRocmVhZHVwZGF0ZS5jIGIvZ2NjL3RyZWUtc3NhLXRocmVhZHVwZGF0ZS5j CmluZGV4IGY0OTZkZDNlYjhjLi5jYjBkZDkwZWM5NCAxMDA2NDQKLS0tIGEvZ2NjL3RyZWUt c3NhLXRocmVhZHVwZGF0ZS5jCisrKyBiL2djYy90cmVlLXNzYS10aHJlYWR1cGRhdGUuYwpA QCAtMjU2MSw3ICsyNTYxLDYgQEAganVtcF90aHJlYWRfcGF0aF9yZWdpc3RyeTo6dGhyZWFk X3Rocm91Z2hfYWxsX2Jsb2NrcwogewogICBib29sIHJldHZhbCA9IGZhbHNlOwogICB1bnNp Z25lZCBpbnQgaTsKLSAgY2xhc3MgbG9vcCAqbG9vcDsKICAgYXV0b19iaXRtYXAgdGhyZWFk ZWRfYmxvY2tzOwogICBoYXNoX3NldDxlZGdlPiB2aXNpdGVkX3N0YXJ0aW5nX2VkZ2VzOwog CkBAIC0yNzAyLDcgKzI3MDEsNyBAQCBqdW1wX3RocmVhZF9wYXRoX3JlZ2lzdHJ5Ojp0aHJl YWRfdGhyb3VnaF9hbGxfYmxvY2tzCiAgIC8qIFRoZW4gcGVyZm9ybSB0aGUgdGhyZWFkaW5n IHRocm91Z2ggbG9vcCBoZWFkZXJzLiAgV2Ugc3RhcnQgd2l0aCB0aGUKICAgICAgaW5uZXJt b3N0IGxvb3AsIHNvIHRoYXQgdGhlIGNoYW5nZXMgaW4gY2ZnIHdlIHBlcmZvcm0gd29uJ3Qg YWZmZWN0CiAgICAgIGZ1cnRoZXIgdGhyZWFkaW5nLiAgKi8KLSAgRk9SX0VBQ0hfTE9PUCAo bG9vcCwgTElfRlJPTV9JTk5FUk1PU1QpCisgIGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlz dCAoY2Z1biwgTElfRlJPTV9JTk5FUk1PU1QpKQogICAgIHsKICAgICAgIGlmICghbG9vcC0+ aGVhZGVyCiAJICB8fCAhYml0bWFwX2JpdF9wICh0aHJlYWRlZF9ibG9ja3MsIGxvb3AtPmhl YWRlci0+aW5kZXgpKQpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdmVjdG9yaXplci5jIGIvZ2Nj L3RyZWUtdmVjdG9yaXplci5jCmluZGV4IGYxMDM1YTgzODI2Li5iOTcwOWE2MTNkNSAxMDA2 NDQKLS0tIGEvZ2NjL3RyZWUtdmVjdG9yaXplci5jCisrKyBiL2djYy90cmVlLXZlY3Rvcml6 ZXIuYwpAQCAtMTE5NCw3ICsxMTk0LDcgQEAgdmVjdG9yaXplX2xvb3BzICh2b2lkKQogICAv KiBJZiBzb21lIGxvb3Agd2FzIGR1cGxpY2F0ZWQsIGl0IGdldHMgYmlnZ2VyIG51bWJlcgog ICAgICB0aGFuIGFsbCBwcmV2aW91c2x5IGRlZmluZWQgbG9vcHMuICBUaGlzIGZhY3QgYWxs b3dzIHVzIHRvIHJ1bgogICAgICBvbmx5IG92ZXIgaW5pdGlhbCBsb29wcyBza2lwcGluZyBu ZXdseSBnZW5lcmF0ZWQgb25lcy4gICovCi0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIDApCisg IGZvciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgMCkpCiAgICAgaWYgKGxvb3At PmRvbnRfdmVjdG9yaXplKQogICAgICAgewogCWFueV9pZmN2dF9sb29wcyA9IHRydWU7CkBA IC0xMjEzLDcgKzEyMTMsNyBAQCB2ZWN0b3JpemVfbG9vcHMgKHZvaWQpCiAJCSAgbG9vcDQg KGNvcHkgb2YgbG9vcDIpCiAJCWVsc2UKIAkJICBsb29wNSAoY29weSBvZiBsb29wNCkKLQkg ICBJZiBGT1JfRUFDSF9MT09QIGdpdmVzIHVzIGxvb3AzIGZpcnN0ICh3aGljaCBoYXMKKwkg ICBJZiBsb29wcycgaXRlcmF0aW9uIGdpdmVzIHVzIGxvb3AzIGZpcnN0ICh3aGljaCBoYXMK IAkgICBkb250X3ZlY3Rvcml6ZSBzZXQpLCBtYWtlIHN1cmUgdG8gcHJvY2VzcyBsb29wMSBi ZWZvcmUgbG9vcDQ7CiAJICAgc28gdGhhdCB3ZSBjYW4gcHJldmVudCB2ZWN0b3JpemF0aW9u IG9mIGxvb3A0IGlmIGxvb3AxCiAJICAgaXMgc3VjY2Vzc2Z1bGx5IHZlY3Rvcml6ZWQuICAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtdnJwLmMgYi9nY2MvdHJlZS12cnAuYwppbmRleCAw NTY1YzliNTA3My4uM2QyMTQ3NjBjMjUgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLXZycC5jCisr KyBiL2djYy90cmVlLXZycC5jCkBAIC0zMzM3LDggKzMzMzcsNyBAQCB2cnBfYXNzZXJ0czo6 ZmluZF9hc3NlcnRfbG9jYXRpb25zICh2b2lkKQogICAvKiBQcmUtc2VlZCBsb29wIGxhdGNo IGxpdmVuZXNzIGZyb20gbG9vcCBoZWFkZXIgUEhJIG5vZGVzLiAgRHVlIHRvCiAgICAgIHRo ZSBvcmRlciB3ZSBjb21wdXRlIGxpdmVuZXNzIGFuZCBpbnNlcnQgYXNzZXJ0cyB3ZSBvdGhl cndpc2UKICAgICAgZmFpbCB0byBpbnNlcnQgYXNzZXJ0cyBpbnRvIHRoZSBsb29wIGxhdGNo LiAgKi8KLSAgbG9vcF9wIGxvb3A7Ci0gIEZPUl9FQUNIX0xPT1AgKGxvb3AsIDApCisgIGZv ciAoYXV0byBsb29wIDogbG9vcHNfbGlzdCAoY2Z1biwgMCkpCiAgICAgewogICAgICAgaSA9 IGxvb3AtPmxhdGNoLT5pbmRleDsKICAgICAgIHVuc2lnbmVkIGludCBqID0gc2luZ2xlX3N1 Y2NfZWRnZSAobG9vcC0+bGF0Y2gpLT5kZXN0X2lkeDsK --------------90C9C6949295D2E65C5B934F--