From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 12571 invoked by alias); 22 Aug 2011 07:44:00 -0000 Received: (qmail 12561 invoked by uid 22791); 22 Aug 2011 07:43:57 -0000 X-SWARE-Spam-Status: No, hits=-2.2 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,RP_MATCHES_RCVD,TW_FN X-Spam-Check-By: sourceware.org Received: from mailout-de.gmx.net (HELO mailout-de.gmx.net) (213.165.64.22) by sourceware.org (qpsmtpd/0.43rc1) with SMTP; Mon, 22 Aug 2011 07:43:39 +0000 Received: (qmail invoked by alias); 22 Aug 2011 07:43:37 -0000 Received: from teras.ics.forth.gr (EHLO [139.91.70.93]) [139.91.70.93] by mail.gmx.net (mp070) with SMTP; 22 Aug 2011 09:43:37 +0200 Date: Mon, 22 Aug 2011 07:59:00 -0000 From: Dimitrios Apostolou To: Dimitrios Apostolou cc: gcc-patches@gcc.gnu.org, Steven Bosscher Subject: tree-ssa*: reduce malloc() calls by preallocating hot VECs on the stack In-Reply-To: Message-ID: References: User-Agent: Alpine 2.02 (LNX 1266 2009-07-14) MIME-Version: 1.0 Content-Type: MULTIPART/MIXED; BOUNDARY="8323328-1525285129-1313999017=:1374" X-IsSubscribed: yes 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 X-SW-Source: 2011-08/txt/msg01720.txt.bz2 This message is in MIME format. The first part should be readable text, while the remaining parts are likely unreadable without MIME-aware tools. --8323328-1525285129-1313999017=:1374 Content-Type: TEXT/PLAIN; format=flowed; charset=US-ASCII Content-length: 1057 2011-08-22 Dimitrios Apostolou Allocate some very frequently used vectors on the stack: * vecir.h: Defined a tree vector on the stack. * tree-ssa-sccvn.c (print_scc, sort_scc, process_scc) (extract_and_process_scc_for_name): Allocate the scc vector on the stack instead of the heap, giving it a minimal initial size instead of 0. * tree-ssa-structalias.c (get_constraint_for_1) (get_constraint_for, get_constraint_for_rhs, do_deref) (get_constraint_for_ssa_var, get_constraint_for_ptr_offset) (get_constraint_for_component_ref, get_constraint_for_address_of) (process_all_all_constraints, do_structure_copy) (make_constraints_to, make_constraint_to, handle_rhs_call) (handle_lhs_call, handle_const_call, handle_pure_call) (find_func_aliases_for_builtin_call, find_func_aliases_for_call) (find_func_aliases, process_ipa_clobber, find_func_clobbers) (create_variable_info_for): Converted the rhsc, lhsc vectors from heap to stack, with a minimal initial size, since they were very frequently allocated. --8323328-1525285129-1313999017=:1374 Content-Type: TEXT/plain; name=ssa-stackvectors.diff Content-Transfer-Encoding: BASE64 Content-ID: Content-Description: Content-Disposition: attachment; filename=ssa-stackvectors.diff Content-length: 39073 PT09IG1vZGlmaWVkIGZpbGUgJ2djYy90cmVlLXNzYS1zdHJ1Y3RhbGlhcy5j Jw0KLS0tIGdjYy90cmVlLXNzYS1zdHJ1Y3RhbGlhcy5jCTIwMTEtMDgtMTgg MDY6NTM6MTIgKzAwMDANCisrKyBnY2MvdHJlZS1zc2Etc3RydWN0YWxpYXMu YwkyMDExLTA4LTE5IDA5OjQzOjQxICswMDAwDQpAQCAtNDc3LDExICs0Nzcs MTQgQEAgc3RydWN0IGNvbnN0cmFpbnRfZXhwcg0KIA0KIHR5cGVkZWYgc3Ry dWN0IGNvbnN0cmFpbnRfZXhwciBjZV9zOw0KIERFRl9WRUNfTyhjZV9zKTsN Ci1ERUZfVkVDX0FMTE9DX08oY2VfcywgaGVhcCk7DQotc3RhdGljIHZvaWQg Z2V0X2NvbnN0cmFpbnRfZm9yXzEgKHRyZWUsIFZFQyhjZV9zLCBoZWFwKSAq KiwgYm9vbCwgYm9vbCk7DQotc3RhdGljIHZvaWQgZ2V0X2NvbnN0cmFpbnRf Zm9yICh0cmVlLCBWRUMoY2VfcywgaGVhcCkgKiopOw0KLXN0YXRpYyB2b2lk IGdldF9jb25zdHJhaW50X2Zvcl9yaHMgKHRyZWUsIFZFQyhjZV9zLCBoZWFw KSAqKik7DQotc3RhdGljIHZvaWQgZG9fZGVyZWYgKFZFQyAoY2VfcywgaGVh cCkgKiopOw0KK0RFRl9WRUNfQUxMT0NfT19TVEFDSyhjZV9zKTsNCisjZGVm aW5lIFZFQ19jZV9zX3N0YWNrX2FsbG9jKGFsbG9jKSBcDQorICBWRUNfc3Rh Y2tfYWxsb2MgKGNlX3MsIGFsbG9jKQ0KKw0KK3N0YXRpYyB2b2lkIGdldF9j b25zdHJhaW50X2Zvcl8xICh0cmVlLCBWRUMoY2Vfcywgc3RhY2spICoqLCBi b29sLCBib29sKTsNCitzdGF0aWMgdm9pZCBnZXRfY29uc3RyYWludF9mb3Ig KHRyZWUsIFZFQyhjZV9zLCBzdGFjaykgKiopOw0KK3N0YXRpYyB2b2lkIGdl dF9jb25zdHJhaW50X2Zvcl9yaHMgKHRyZWUsIFZFQyhjZV9zLCBzdGFjaykg KiopOw0KK3N0YXRpYyB2b2lkIGRvX2RlcmVmIChWRUMgKGNlX3MsIHN0YWNr KSAqKik7DQogDQogLyogT3VyIHNldCBjb25zdHJhaW50cyBhcmUgbWFkZSB1 cCBvZiB0d28gY29uc3RyYWludCBleHByZXNzaW9ucywgb25lDQogICAgTEhT LCBhbmQgb25lIFJIUy4NCkBAIC0yNzM2LDcgKzI3MzksNyBAQCBuZXdfc2Nh bGFyX3RtcF9jb25zdHJhaW50X2V4cCAoY29uc3QgY2hhDQogICAgSWYgYWRk cmVzc19wIGlzIHRydWUsIHRoZSByZXN1bHQgd2lsbCBiZSB0YWtlbiBpdHMg YWRkcmVzcyBvZi4gICovDQogDQogc3RhdGljIHZvaWQNCi1nZXRfY29uc3Ry YWludF9mb3Jfc3NhX3ZhciAodHJlZSB0LCBWRUMoY2VfcywgaGVhcCkgKipy ZXN1bHRzLCBib29sIGFkZHJlc3NfcCkNCitnZXRfY29uc3RyYWludF9mb3Jf c3NhX3ZhciAodHJlZSB0LCBWRUMoY2Vfcywgc3RhY2spICoqcmVzdWx0cywg Ym9vbCBhZGRyZXNzX3ApDQogew0KICAgc3RydWN0IGNvbnN0cmFpbnRfZXhw ciBjZXhwcjsNCiAgIHZhcmluZm9fdCB2aTsNCkBAIC0yNzc2LDEyICsyNzc5 LDEyIEBAIGdldF9jb25zdHJhaW50X2Zvcl9zc2FfdmFyICh0cmVlIHQsIFZF QygNCiAgICAgICBmb3IgKDsgdmk7IHZpID0gdmktPm5leHQpDQogCXsNCiAJ ICBjZXhwci52YXIgPSB2aS0+aWQ7DQotCSAgVkVDX3NhZmVfcHVzaCAoY2Vf cywgaGVhcCwgKnJlc3VsdHMsICZjZXhwcik7DQorCSAgVkVDX3NhZmVfcHVz aCAoY2Vfcywgc3RhY2ssICpyZXN1bHRzLCAmY2V4cHIpOw0KIAl9DQogICAg ICAgcmV0dXJuOw0KICAgICB9DQogDQotICBWRUNfc2FmZV9wdXNoIChjZV9z LCBoZWFwLCAqcmVzdWx0cywgJmNleHByKTsNCisgIFZFQ19zYWZlX3B1c2gg KGNlX3MsIHN0YWNrLCAqcmVzdWx0cywgJmNleHByKTsNCiB9DQogDQogLyog UHJvY2VzcyBjb25zdHJhaW50IFQsIHBlcmZvcm1pbmcgdmFyaW91cyBzaW1w bGlmaWNhdGlvbnMgYW5kIHRoZW4NCkBAIC0yODYxLDcgKzI4NjQsNyBAQCBi aXRwb3Nfb2ZfZmllbGQgKGNvbnN0IHRyZWUgZmRlY2wpDQogDQogc3RhdGlj IHZvaWQNCiBnZXRfY29uc3RyYWludF9mb3JfcHRyX29mZnNldCAodHJlZSBw dHIsIHRyZWUgb2Zmc2V0LA0KLQkJCSAgICAgICBWRUMgKGNlX3MsIGhlYXAp ICoqcmVzdWx0cykNCisJCQkgICAgICAgVkVDIChjZV9zLCBzdGFjaykgKipy ZXN1bHRzKQ0KIHsNCiAgIHN0cnVjdCBjb25zdHJhaW50X2V4cHIgYzsNCiAg IHVuc2lnbmVkIGludCBqLCBuOw0KQEAgLTI5MjAsNyArMjkyMyw3IEBAIGdl dF9jb25zdHJhaW50X2Zvcl9wdHJfb2Zmc2V0ICh0cmVlIHB0ciwNCiAJICAg ICAgYzIudHlwZSA9IEFERFJFU1NPRjsNCiAJICAgICAgYzIub2Zmc2V0ID0g MDsNCiAJICAgICAgaWYgKGMyLnZhciAhPSBjLnZhcikNCi0JCVZFQ19zYWZl X3B1c2ggKGNlX3MsIGhlYXAsICpyZXN1bHRzLCAmYzIpOw0KKwkJVkVDX3Nh ZmVfcHVzaCAoY2Vfcywgc3RhY2ssICpyZXN1bHRzLCAmYzIpOw0KIAkgICAg ICB0ZW1wID0gdGVtcC0+bmV4dDsNCiAJICAgIH0NCiAJICB3aGlsZSAodGVt cCk7DQpAQCAtMjk1NSw3ICsyOTU4LDcgQEAgZ2V0X2NvbnN0cmFpbnRfZm9y X3B0cl9vZmZzZXQgKHRyZWUgcHRyLA0KIAkgICAgICBjMi52YXIgPSB0ZW1w LT5uZXh0LT5pZDsNCiAJICAgICAgYzIudHlwZSA9IEFERFJFU1NPRjsNCiAJ ICAgICAgYzIub2Zmc2V0ID0gMDsNCi0JICAgICAgVkVDX3NhZmVfcHVzaCAo Y2VfcywgaGVhcCwgKnJlc3VsdHMsICZjMik7DQorCSAgICAgIFZFQ19zYWZl X3B1c2ggKGNlX3MsIHN0YWNrLCAqcmVzdWx0cywgJmMyKTsNCiAJICAgIH0N CiAJICBjLnZhciA9IHRlbXAtPmlkOw0KIAkgIGMub2Zmc2V0ID0gMDsNCkBA IC0yOTc0LDcgKzI5NzcsNyBAQCBnZXRfY29uc3RyYWludF9mb3JfcHRyX29m ZnNldCAodHJlZSBwdHIsDQogICAgYXMgdGhlIGxocy4gICovDQogDQogc3Rh dGljIHZvaWQNCi1nZXRfY29uc3RyYWludF9mb3JfY29tcG9uZW50X3JlZiAo dHJlZSB0LCBWRUMoY2VfcywgaGVhcCkgKipyZXN1bHRzLA0KK2dldF9jb25z dHJhaW50X2Zvcl9jb21wb25lbnRfcmVmICh0cmVlIHQsIFZFQyhjZV9zLCBz dGFjaykgKipyZXN1bHRzLA0KIAkJCQkgIGJvb2wgYWRkcmVzc19wLCBib29s IGxoc19wKQ0KIHsNCiAgIHRyZWUgb3JpZ190ID0gdDsNCkBAIC0yOTk5LDcg KzMwMDIsNyBAQCBnZXRfY29uc3RyYWludF9mb3JfY29tcG9uZW50X3JlZiAo dHJlZSB0DQogICAgICAgdGVtcC5vZmZzZXQgPSAwOw0KICAgICAgIHRlbXAu dmFyID0gaW50ZWdlcl9pZDsNCiAgICAgICB0ZW1wLnR5cGUgPSBTQ0FMQVI7 DQotICAgICAgVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVhcCwgKnJlc3VsdHMs ICZ0ZW1wKTsNCisgICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBzdGFjaywg KnJlc3VsdHMsICZ0ZW1wKTsNCiAgICAgICByZXR1cm47DQogICAgIH0NCiAN CkBAIC0zMDIxLDcgKzMwMjQsNyBAQCBnZXRfY29uc3RyYWludF9mb3JfY29t cG9uZW50X3JlZiAodHJlZSB0DQogCSAgICB0ZW1wLm9mZnNldCA9IDA7DQog CSAgICB0ZW1wLnZhciA9IGFueXRoaW5nX2lkOw0KIAkgICAgdGVtcC50eXBl ID0gQUREUkVTU09GOw0KLQkgICAgVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVh cCwgKnJlc3VsdHMsICZ0ZW1wKTsNCisJICAgIFZFQ19zYWZlX3B1c2ggKGNl X3MsIHN0YWNrLCAqcmVzdWx0cywgJnRlbXApOw0KIAkgICAgcmV0dXJuOw0K IAkgIH0NCiAgICAgfQ0KQEAgLTMwNjIsNyArMzA2NSw3IEBAIGdldF9jb25z dHJhaW50X2Zvcl9jb21wb25lbnRfcmVmICh0cmVlIHQNCiAJCQkJICAgIGJp dHBvcywgYml0bWF4c2l6ZSkpDQogCQl7DQogCQkgIGNleHByLnZhciA9IGN1 cnItPmlkOw0KLQkJICBWRUNfc2FmZV9wdXNoIChjZV9zLCBoZWFwLCAqcmVz dWx0cywgJmNleHByKTsNCisJCSAgVkVDX3NhZmVfcHVzaCAoY2Vfcywgc3Rh Y2ssICpyZXN1bHRzLCAmY2V4cHIpOw0KIAkJICBpZiAoYWRkcmVzc19wKQ0K IAkJICAgIGJyZWFrOw0KIAkJfQ0KQEAgLTMwNzcsNyArMzA4MCw3IEBAIGdl dF9jb25zdHJhaW50X2Zvcl9jb21wb25lbnRfcmVmICh0cmVlIHQNCiAJICAg ICAgd2hpbGUgKGN1cnItPm5leHQgIT0gTlVMTCkNCiAJCWN1cnIgPSBjdXJy LT5uZXh0Ow0KIAkgICAgICBjZXhwci52YXIgPSBjdXJyLT5pZDsNCi0JICAg ICAgVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVhcCwgKnJlc3VsdHMsICZjZXhw cik7DQorCSAgICAgIFZFQ19zYWZlX3B1c2ggKGNlX3MsIHN0YWNrLCAqcmVz dWx0cywgJmNleHByKTsNCiAJICAgIH0NCiAJICBlbHNlIGlmIChWRUNfbGVu Z3RoIChjZV9zLCAqcmVzdWx0cykgPT0gMCkNCiAJICAgIC8qIEFzc2VydCB0 aGF0IHdlIGZvdW5kICpzb21lKiBmaWVsZCB0aGVyZS4gVGhlIHVzZXIgY291 bGRuJ3QgYmUNCkBAIC0zMDkwLDcgKzMwOTMsNyBAQCBnZXRfY29uc3RyYWlu dF9mb3JfY29tcG9uZW50X3JlZiAodHJlZSB0DQogCSAgICAgIGNleHByLnR5 cGUgPSBTQ0FMQVI7DQogCSAgICAgIGNleHByLnZhciA9IGFueXRoaW5nX2lk Ow0KIAkgICAgICBjZXhwci5vZmZzZXQgPSAwOw0KLQkgICAgICBWRUNfc2Fm ZV9wdXNoIChjZV9zLCBoZWFwLCAqcmVzdWx0cywgJmNleHByKTsNCisJICAg ICAgVkVDX3NhZmVfcHVzaCAoY2Vfcywgc3RhY2ssICpyZXN1bHRzLCAmY2V4 cHIpOw0KIAkgICAgfQ0KIAl9DQogICAgICAgZWxzZSBpZiAoYml0bWF4c2l6 ZSA9PSAwKQ0KQEAgLTMxMzYsNyArMzEzOSw3IEBAIGdldF9jb25zdHJhaW50 X2Zvcl9jb21wb25lbnRfcmVmICh0cmVlIHQNCiAgICBUaGlzIGlzIG5lZWRl ZCBzbyB0aGF0IHdlIGNhbiBoYW5kbGUgZGVyZWZlcmVuY2luZyBERVJFRiBj b25zdHJhaW50cy4gICovDQogDQogc3RhdGljIHZvaWQNCi1kb19kZXJlZiAo VkVDIChjZV9zLCBoZWFwKSAqKmNvbnN0cmFpbnRzKQ0KK2RvX2RlcmVmIChW RUMgKGNlX3MsIHN0YWNrKSAqKmNvbnN0cmFpbnRzKQ0KIHsNCiAgIHN0cnVj dCBjb25zdHJhaW50X2V4cHIgKmM7DQogICB1bnNpZ25lZCBpbnQgaSA9IDA7 DQpAQCAtMzE2Myw3ICszMTY2LDcgQEAgZG9fZGVyZWYgKFZFQyAoY2Vfcywg aGVhcCkgKipjb25zdHJhaW50cw0KICAgIGFkZHJlc3Mgb2YgaXQuICAqLw0K IA0KIHN0YXRpYyB2b2lkDQotZ2V0X2NvbnN0cmFpbnRfZm9yX2FkZHJlc3Nf b2YgKHRyZWUgdCwgVkVDIChjZV9zLCBoZWFwKSAqKnJlc3VsdHMpDQorZ2V0 X2NvbnN0cmFpbnRfZm9yX2FkZHJlc3Nfb2YgKHRyZWUgdCwgVkVDIChjZV9z LCBzdGFjaykgKipyZXN1bHRzKQ0KIHsNCiAgIHN0cnVjdCBjb25zdHJhaW50 X2V4cHIgKmM7DQogICB1bnNpZ25lZCBpbnQgaTsNCkBAIC0zMTgyLDcgKzMx ODUsNyBAQCBnZXRfY29uc3RyYWludF9mb3JfYWRkcmVzc19vZiAodHJlZSB0 LCBWDQogLyogR2l2ZW4gYSB0cmVlIFQsIHJldHVybiB0aGUgY29uc3RyYWlu dCBleHByZXNzaW9uIGZvciBpdC4gICovDQogDQogc3RhdGljIHZvaWQNCi1n ZXRfY29uc3RyYWludF9mb3JfMSAodHJlZSB0LCBWRUMgKGNlX3MsIGhlYXAp ICoqcmVzdWx0cywgYm9vbCBhZGRyZXNzX3AsDQorZ2V0X2NvbnN0cmFpbnRf Zm9yXzEgKHRyZWUgdCwgVkVDIChjZV9zLCBzdGFjaykgKipyZXN1bHRzLCBi b29sIGFkZHJlc3NfcCwNCiAJCSAgICAgIGJvb2wgbGhzX3ApDQogew0KICAg c3RydWN0IGNvbnN0cmFpbnRfZXhwciB0ZW1wOw0KQEAgLTMyMTQsNyArMzIx Nyw3IEBAIGdldF9jb25zdHJhaW50X2Zvcl8xICh0cmVlIHQsIFZFQyAoY2Vf cywNCiAJdGVtcC52YXIgPSBub25sb2NhbF9pZDsNCiAgICAgICB0ZW1wLnR5 cGUgPSBBRERSRVNTT0Y7DQogICAgICAgdGVtcC5vZmZzZXQgPSAwOw0KLSAg ICAgIFZFQ19zYWZlX3B1c2ggKGNlX3MsIGhlYXAsICpyZXN1bHRzLCAmdGVt cCk7DQorICAgICAgVkVDX3NhZmVfcHVzaCAoY2Vfcywgc3RhY2ssICpyZXN1 bHRzLCAmdGVtcCk7DQogICAgICAgcmV0dXJuOw0KICAgICB9DQogDQpAQCAt MzIyNCw3ICszMjI3LDcgQEAgZ2V0X2NvbnN0cmFpbnRfZm9yXzEgKHRyZWUg dCwgVkVDIChjZV9zLA0KICAgICAgIHRlbXAudmFyID0gcmVhZG9ubHlfaWQ7 DQogICAgICAgdGVtcC50eXBlID0gU0NBTEFSOw0KICAgICAgIHRlbXAub2Zm c2V0ID0gMDsNCi0gICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBoZWFwLCAq cmVzdWx0cywgJnRlbXApOw0KKyAgICAgIFZFQ19zYWZlX3B1c2ggKGNlX3Ms IHN0YWNrLCAqcmVzdWx0cywgJnRlbXApOw0KICAgICAgIHJldHVybjsNCiAg ICAgfQ0KIA0KQEAgLTMyNzUsNyArMzI3OCw3IEBAIGdldF9jb25zdHJhaW50 X2Zvcl8xICh0cmVlIHQsIFZFQyAoY2VfcywNCiAJCSAgICAgIGlmIChjdXJy LT5vZmZzZXQgLSB2aS0+b2Zmc2V0IDwgc2l6ZSkNCiAJCQl7DQogCQkJICBj cy52YXIgPSBjdXJyLT5pZDsNCi0JCQkgIFZFQ19zYWZlX3B1c2ggKGNlX3Ms IGhlYXAsICpyZXN1bHRzLCAmY3MpOw0KKwkJCSAgVkVDX3NhZmVfcHVzaCAo Y2Vfcywgc3RhY2ssICpyZXN1bHRzLCAmY3MpOw0KIAkJCX0NCiAJCSAgICAg IGVsc2UNCiAJCQlicmVhazsNCkBAIC0zMzEwLDE3ICszMzEzLDE3IEBAIGdl dF9jb25zdHJhaW50X2Zvcl8xICh0cmVlIHQsIFZFQyAoY2VfcywNCiAJICAg IHsNCiAJICAgICAgdW5zaWduZWQgaW50IGk7DQogCSAgICAgIHRyZWUgdmFs Ow0KLQkgICAgICBWRUMgKGNlX3MsIGhlYXApICp0bXAgPSBOVUxMOw0KKwkg ICAgICBWRUMgKGNlX3MsIHN0YWNrKSAqdG1wID0gVkVDX2FsbG9jIChjZV9z LCBzdGFjaywgMzIpOw0KIAkgICAgICBGT1JfRUFDSF9DT05TVFJVQ1RPUl9W QUxVRSAoQ09OU1RSVUNUT1JfRUxUUyAodCksIGksIHZhbCkNCiAJCXsNCiAJ CSAgc3RydWN0IGNvbnN0cmFpbnRfZXhwciAqcmhzcDsNCiAJCSAgdW5zaWdu ZWQgajsNCiAJCSAgZ2V0X2NvbnN0cmFpbnRfZm9yXzEgKHZhbCwgJnRtcCwg YWRkcmVzc19wLCBsaHNfcCk7DQogCQkgIEZPUl9FQUNIX1ZFQ19FTFQgKGNl X3MsIHRtcCwgaiwgcmhzcCkNCi0JCSAgICBWRUNfc2FmZV9wdXNoIChjZV9z LCBoZWFwLCAqcmVzdWx0cywgcmhzcCk7DQorCQkgICAgVkVDX3NhZmVfcHVz aCAoY2Vfcywgc3RhY2ssICpyZXN1bHRzLCByaHNwKTsNCiAJCSAgVkVDX3Ry dW5jYXRlIChjZV9zLCB0bXAsIDApOw0KIAkJfQ0KLQkgICAgICBWRUNfZnJl ZSAoY2VfcywgaGVhcCwgdG1wKTsNCisJICAgICAgVkVDX2ZyZWUgKGNlX3Ms IHN0YWNrLCB0bXApOw0KIAkgICAgICAvKiBXZSBkbyBub3Qga25vdyB3aGV0 aGVyIHRoZSBjb25zdHJ1Y3RvciB3YXMgY29tcGxldGUsDQogCSAgICAgICAg IHNvIHRlY2huaWNhbGx5IHdlIGhhdmUgdG8gYWRkICZOT1RISU5HIG9yICZB TllUSElORw0KIAkJIGxpa2Ugd2UgZG8gZm9yIGFuIGVtcHR5IGNvbnN0cnVj dG9yIGFzIHdlbGwuICAqLw0KQEAgLTMzNDEsNyArMzM0NCw3IEBAIGdldF9j b25zdHJhaW50X2Zvcl8xICh0cmVlIHQsIFZFQyAoY2VfcywNCiAJdGVtcC50 eXBlID0gQUREUkVTU09GOw0KIAl0ZW1wLnZhciA9IG5vbmxvY2FsX2lkOw0K IAl0ZW1wLm9mZnNldCA9IDA7DQotCVZFQ19zYWZlX3B1c2ggKGNlX3MsIGhl YXAsICpyZXN1bHRzLCAmdGVtcCk7DQorCVZFQ19zYWZlX3B1c2ggKGNlX3Ms IHN0YWNrLCAqcmVzdWx0cywgJnRlbXApOw0KIAlyZXR1cm47DQogICAgICAg fQ0KICAgICBkZWZhdWx0OjsNCkBAIC0zMzUxLDEzICszMzU0LDEzIEBAIGdl dF9jb25zdHJhaW50X2Zvcl8xICh0cmVlIHQsIFZFQyAoY2VfcywNCiAgIHRl bXAudHlwZSA9IEFERFJFU1NPRjsNCiAgIHRlbXAudmFyID0gYW55dGhpbmdf aWQ7DQogICB0ZW1wLm9mZnNldCA9IDA7DQotICBWRUNfc2FmZV9wdXNoIChj ZV9zLCBoZWFwLCAqcmVzdWx0cywgJnRlbXApOw0KKyAgVkVDX3NhZmVfcHVz aCAoY2Vfcywgc3RhY2ssICpyZXN1bHRzLCAmdGVtcCk7DQogfQ0KIA0KIC8q IEdpdmVuIGEgZ2ltcGxlIHRyZWUgVCwgcmV0dXJuIHRoZSBjb25zdHJhaW50 IGV4cHJlc3Npb24gdmVjdG9yIGZvciBpdC4gICovDQogDQogc3RhdGljIHZv aWQNCi1nZXRfY29uc3RyYWludF9mb3IgKHRyZWUgdCwgVkVDIChjZV9zLCBo ZWFwKSAqKnJlc3VsdHMpDQorZ2V0X2NvbnN0cmFpbnRfZm9yICh0cmVlIHQs IFZFQyAoY2Vfcywgc3RhY2spICoqcmVzdWx0cykNCiB7DQogICBnY2NfYXNz ZXJ0IChWRUNfbGVuZ3RoIChjZV9zLCAqcmVzdWx0cykgPT0gMCk7DQogDQpA QCAtMzM2OCw3ICszMzcxLDcgQEAgZ2V0X2NvbnN0cmFpbnRfZm9yICh0cmVl IHQsIFZFQyAoY2VfcywgaA0KICAgIHRvIGJlIHVzZWQgYXMgdGhlIHJocyBv ZiBhIGNvbnN0cmFpbnQuICAqLw0KIA0KIHN0YXRpYyB2b2lkDQotZ2V0X2Nv bnN0cmFpbnRfZm9yX3JocyAodHJlZSB0LCBWRUMgKGNlX3MsIGhlYXApICoq cmVzdWx0cykNCitnZXRfY29uc3RyYWludF9mb3JfcmhzICh0cmVlIHQsIFZF QyAoY2Vfcywgc3RhY2spICoqcmVzdWx0cykNCiB7DQogICBnY2NfYXNzZXJ0 IChWRUNfbGVuZ3RoIChjZV9zLCAqcmVzdWx0cykgPT0gMCk7DQogDQpAQCAt MzM4MCw3ICszMzgzLDcgQEAgZ2V0X2NvbnN0cmFpbnRfZm9yX3JocyAodHJl ZSB0LCBWRUMgKGNlXw0KICAgIGVudHJpZXMgaW4gKkxIU0MuICAqLw0KIA0K IHN0YXRpYyB2b2lkDQotcHJvY2Vzc19hbGxfYWxsX2NvbnN0cmFpbnRzIChW RUMgKGNlX3MsIGhlYXApICpsaHNjLCBWRUMgKGNlX3MsIGhlYXApICpyaHNj KQ0KK3Byb2Nlc3NfYWxsX2FsbF9jb25zdHJhaW50cyAoVkVDIChjZV9zLCBz dGFjaykgKmxoc2MsIFZFQyAoY2Vfcywgc3RhY2spICpyaHNjKQ0KIHsNCiAg IHN0cnVjdCBjb25zdHJhaW50X2V4cHIgKmxoc3AsICpyaHNwOw0KICAgdW5z aWduZWQgaSwgajsNCkBAIC0zNDEwLDggKzM0MTMsOSBAQCBzdGF0aWMgdm9p ZA0KIGRvX3N0cnVjdHVyZV9jb3B5ICh0cmVlIGxoc29wLCB0cmVlIHJoc29w KQ0KIHsNCiAgIHN0cnVjdCBjb25zdHJhaW50X2V4cHIgKmxoc3AsICpyaHNw Ow0KLSAgVkVDIChjZV9zLCBoZWFwKSAqbGhzYyA9IE5VTEwsICpyaHNjID0g TlVMTDsNCiAgIHVuc2lnbmVkIGo7DQorICBWRUMgKGNlX3MsIHN0YWNrKSAq bGhzYyA9IFZFQ19hbGxvYyAoY2Vfcywgc3RhY2ssIDMyKTsNCisgIFZFQyAo Y2Vfcywgc3RhY2spICpyaHNjID0gVkVDX2FsbG9jIChjZV9zLCBzdGFjaywg MzIpOw0KIA0KICAgZ2V0X2NvbnN0cmFpbnRfZm9yIChsaHNvcCwgJmxoc2Mp Ow0KICAgZ2V0X2NvbnN0cmFpbnRfZm9yX3JocyAocmhzb3AsICZyaHNjKTsN CkBAIC0zNDcwLDE0ICszNDc0LDE0IEBAIGRvX3N0cnVjdHVyZV9jb3B5ICh0 cmVlIGxoc29wLCB0cmVlIHJoc28NCiAgIGVsc2UNCiAgICAgZ2NjX3VucmVh Y2hhYmxlICgpOw0KIA0KLSAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIGxoc2Mp Ow0KLSAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KKyAgVkVDX2Zy ZWUgKGNlX3MsIHN0YWNrLCBsaHNjKTsNCisgIFZFQ19mcmVlIChjZV9zLCBz dGFjaywgcmhzYyk7DQogfQ0KIA0KIC8qIENyZWF0ZSBjb25zdHJhaW50cyBJ RCA9IHsgcmhzYyB9LiAgKi8NCiANCiBzdGF0aWMgdm9pZA0KLW1ha2VfY29u c3RyYWludHNfdG8gKHVuc2lnbmVkIGlkLCBWRUMoY2VfcywgaGVhcCkgKnJo c2MpDQorbWFrZV9jb25zdHJhaW50c190byAodW5zaWduZWQgaWQsIFZFQyhj ZV9zLCBzdGFjaykgKnJoc2MpDQogew0KICAgc3RydWN0IGNvbnN0cmFpbnRf ZXhwciAqYzsNCiAgIHN0cnVjdCBjb25zdHJhaW50X2V4cHIgaW5jbHVkZXM7 DQpAQCAtMzQ5NiwxMCArMzUwMCwxMCBAQCBtYWtlX2NvbnN0cmFpbnRzX3Rv ICh1bnNpZ25lZCBpZCwgVkVDKGNlDQogc3RhdGljIHZvaWQNCiBtYWtlX2Nv bnN0cmFpbnRfdG8gKHVuc2lnbmVkIGlkLCB0cmVlIG9wKQ0KIHsNCi0gIFZF QyhjZV9zLCBoZWFwKSAqcmhzYyA9IE5VTEw7DQorICBWRUMoY2Vfcywgc3Rh Y2spICpyaHNjID0gVkVDX2FsbG9jIChjZV9zLCBzdGFjaywgMzIpOw0KICAg Z2V0X2NvbnN0cmFpbnRfZm9yX3JocyAob3AsICZyaHNjKTsNCiAgIG1ha2Vf Y29uc3RyYWludHNfdG8gKGlkLCByaHNjKTsNCi0gIFZFQ19mcmVlIChjZV9z LCBoZWFwLCByaHNjKTsNCisgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywgcmhz Yyk7DQogfQ0KIA0KIC8qIENyZWF0ZSBhIGNvbnN0cmFpbnQgSUQgPSAmRlJP TS4gICovDQpAQCAtMzY5MCw3ICszNjk0LDcgQEAgZ2V0X2Z1bmN0aW9uX3Bh cnRfY29uc3RyYWludCAodmFyaW5mb190IA0KICAgIFJIUy4gICovDQogDQog c3RhdGljIHZvaWQNCi1oYW5kbGVfcmhzX2NhbGwgKGdpbXBsZSBzdG10LCBW RUMoY2VfcywgaGVhcCkgKipyZXN1bHRzKQ0KK2hhbmRsZV9yaHNfY2FsbCAo Z2ltcGxlIHN0bXQsIFZFQyhjZV9zLCBzdGFjaykgKipyZXN1bHRzKQ0KIHsN CiAgIHN0cnVjdCBjb25zdHJhaW50X2V4cHIgcmhzYzsNCiAgIHVuc2lnbmVk IGk7DQpAQCAtMzc0NCw3ICszNzQ4LDcgQEAgaGFuZGxlX3Joc19jYWxsIChn aW1wbGUgc3RtdCwgVkVDKGNlX3MsIA0KICAgICAgIHJoc2MudmFyID0gZ2V0 X2NhbGxfdXNlX3ZpIChzdG10KS0+aWQ7DQogICAgICAgcmhzYy5vZmZzZXQg PSAwOw0KICAgICAgIHJoc2MudHlwZSA9IFNDQUxBUjsNCi0gICAgICBWRUNf c2FmZV9wdXNoIChjZV9zLCBoZWFwLCAqcmVzdWx0cywgJnJoc2MpOw0KKyAg ICAgIFZFQ19zYWZlX3B1c2ggKGNlX3MsIHN0YWNrLCAqcmVzdWx0cywgJnJo c2MpOw0KICAgICB9DQogDQogICAvKiBUaGUgc3RhdGljIGNoYWluIGVzY2Fw ZXMgYXMgd2VsbC4gICovDQpAQCAtMzc1NiwyMiArMzc2MCwyMyBAQCBoYW5k bGVfcmhzX2NhbGwgKGdpbXBsZSBzdG10LCBWRUMoY2VfcywgDQogICAgICAg JiYgZ2ltcGxlX2NhbGxfbGhzIChzdG10KSAhPSBOVUxMX1RSRUUNCiAgICAg ICAmJiBUUkVFX0FERFJFU1NBQkxFIChUUkVFX1RZUEUgKGdpbXBsZV9jYWxs X2xocyAoc3RtdCkpKSkNCiAgICAgew0KLSAgICAgIFZFQyhjZV9zLCBoZWFw KSAqdG1wYyA9IE5VTEw7DQogICAgICAgc3RydWN0IGNvbnN0cmFpbnRfZXhw ciBsaHNjLCAqYzsNCisgICAgICBWRUMoY2Vfcywgc3RhY2spICp0bXBjID0g VkVDX2FsbG9jIChjZV9zLCBzdGFjaywgMzIpOw0KKw0KICAgICAgIGdldF9j b25zdHJhaW50X2Zvcl9hZGRyZXNzX29mIChnaW1wbGVfY2FsbF9saHMgKHN0 bXQpLCAmdG1wYyk7DQogICAgICAgbGhzYy52YXIgPSBlc2NhcGVkX2lkOw0K ICAgICAgIGxoc2Mub2Zmc2V0ID0gMDsNCiAgICAgICBsaHNjLnR5cGUgPSBT Q0FMQVI7DQogICAgICAgRk9SX0VBQ0hfVkVDX0VMVCAoY2VfcywgdG1wYywg aSwgYykNCiAJcHJvY2Vzc19jb25zdHJhaW50IChuZXdfY29uc3RyYWludCAo bGhzYywgKmMpKTsNCi0gICAgICBWRUNfZnJlZShjZV9zLCBoZWFwLCB0bXBj KTsNCisgICAgICBWRUNfZnJlZShjZV9zLCBzdGFjaywgdG1wYyk7DQogICAg IH0NCiANCiAgIC8qIFJlZ3VsYXIgZnVuY3Rpb25zIHJldHVybiBub25sb2Nh bCBtZW1vcnkuICAqLw0KICAgcmhzYy52YXIgPSBub25sb2NhbF9pZDsNCiAg IHJoc2Mub2Zmc2V0ID0gMDsNCiAgIHJoc2MudHlwZSA9IFNDQUxBUjsNCi0g IFZFQ19zYWZlX3B1c2ggKGNlX3MsIGhlYXAsICpyZXN1bHRzLCAmcmhzYyk7 DQorICBWRUNfc2FmZV9wdXNoIChjZV9zLCBzdGFjaywgKnJlc3VsdHMsICZy aHNjKTsNCiB9DQogDQogLyogRm9yIG5vbi1JUEEgbW9kZSwgZ2VuZXJhdGUg Y29uc3RyYWludHMgbmVjZXNzYXJ5IGZvciBhIGNhbGwNCkBAIC0zNzc5LDEw ICszNzg0LDEwIEBAIGhhbmRsZV9yaHNfY2FsbCAoZ2ltcGxlIHN0bXQsIFZF QyhjZV9zLCANCiAgICB0aGUgTEhTIHBvaW50IHRvIGdsb2JhbCBhbmQgZXNj YXBlZCB2YXJpYWJsZXMuICAqLw0KIA0KIHN0YXRpYyB2b2lkDQotaGFuZGxl X2xoc19jYWxsIChnaW1wbGUgc3RtdCwgdHJlZSBsaHMsIGludCBmbGFncywg VkVDKGNlX3MsIGhlYXApICpyaHNjLA0KK2hhbmRsZV9saHNfY2FsbCAoZ2lt cGxlIHN0bXQsIHRyZWUgbGhzLCBpbnQgZmxhZ3MsIFZFQyhjZV9zLCBzdGFj aykgKnJoc2MsDQogCQkgdHJlZSBmbmRlY2wpDQogew0KLSAgVkVDKGNlX3Ms IGhlYXApICpsaHNjID0gTlVMTDsNCisgIFZFQyhjZV9zLCBzdGFjaykgKmxo c2MgPSBWRUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAzMik7DQogDQogICBnZXRf Y29uc3RyYWludF9mb3IgKGxocywgJmxoc2MpOw0KICAgLyogSWYgdGhlIHN0 b3JlIGlzIHRvIGEgZ2xvYmFsIGRlY2wgbWFrZSBzdXJlIHRvDQpAQCAtMzc5 Niw3ICszODAxLDcgQEAgaGFuZGxlX2xoc19jYWxsIChnaW1wbGUgc3RtdCwg dHJlZSBsaHMsIA0KICAgICAgIHRtcGMudmFyID0gZXNjYXBlZF9pZDsNCiAg ICAgICB0bXBjLm9mZnNldCA9IDA7DQogICAgICAgdG1wYy50eXBlID0gU0NB TEFSOw0KLSAgICAgIFZFQ19zYWZlX3B1c2ggKGNlX3MsIGhlYXAsIGxoc2Ms ICZ0bXBjKTsNCisgICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBzdGFjaywg bGhzYywgJnRtcGMpOw0KICAgICB9DQogDQogICAvKiBJZiB0aGUgY2FsbCBy ZXR1cm5zIGFuIGFyZ3VtZW50IHVubW9kaWZpZWQgb3ZlcnJpZGUgdGhlIHJo cw0KQEAgLTM4MTAsNyArMzgxNSw3IEBAIGhhbmRsZV9saHNfY2FsbCAoZ2lt cGxlIHN0bXQsIHRyZWUgbGhzLCANCiAgICAgICBhcmcgPSBnaW1wbGVfY2Fs bF9hcmcgKHN0bXQsIGZsYWdzICYgRVJGX1JFVFVSTl9BUkdfTUFTSyk7DQog ICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yIChhcmcsICZyaHNjKTsNCiAgICAg ICBwcm9jZXNzX2FsbF9hbGxfY29uc3RyYWludHMgKGxoc2MsIHJoc2MpOw0K LSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCByaHNjKTsNCisgICAgICBW RUNfZnJlZSAoY2Vfcywgc3RhY2ssIHJoc2MpOw0KICAgICB9DQogICBlbHNl IGlmIChmbGFncyAmIEVSRl9OT0FMSUFTKQ0KICAgICB7DQpAQCAtMzgzMSwx OSArMzgzNiwxOSBAQCBoYW5kbGVfbGhzX2NhbGwgKGdpbXBsZSBzdG10LCB0 cmVlIGxocywgDQogICAgICAgdG1wYy52YXIgPSB2aS0+aWQ7DQogICAgICAg dG1wYy5vZmZzZXQgPSAwOw0KICAgICAgIHRtcGMudHlwZSA9IEFERFJFU1NP RjsNCi0gICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBoZWFwLCByaHNjLCAm dG1wYyk7DQorICAgICAgVkVDX3NhZmVfcHVzaCAoY2Vfcywgc3RhY2ssIHJo c2MsICZ0bXBjKTsNCiAgICAgfQ0KIA0KICAgcHJvY2Vzc19hbGxfYWxsX2Nv bnN0cmFpbnRzIChsaHNjLCByaHNjKTsNCiANCi0gIFZFQ19mcmVlIChjZV9z LCBoZWFwLCBsaHNjKTsNCisgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywgbGhz Yyk7DQogfQ0KIA0KIC8qIEZvciBub24tSVBBIG1vZGUsIGdlbmVyYXRlIGNv bnN0cmFpbnRzIG5lY2Vzc2FyeSBmb3IgYSBjYWxsIG9mIGENCiAgICBjb25z dCBmdW5jdGlvbiB0aGF0IHJldHVybnMgYSBwb2ludGVyIGluIHRoZSBzdGF0 ZW1lbnQgU1RNVC4gICovDQogDQogc3RhdGljIHZvaWQNCi1oYW5kbGVfY29u c3RfY2FsbCAoZ2ltcGxlIHN0bXQsIFZFQyhjZV9zLCBoZWFwKSAqKnJlc3Vs dHMpDQoraGFuZGxlX2NvbnN0X2NhbGwgKGdpbXBsZSBzdG10LCBWRUMoY2Vf cywgc3RhY2spICoqcmVzdWx0cykNCiB7DQogICBzdHJ1Y3QgY29uc3RyYWlu dF9leHByIHJoc2M7DQogICB1bnNpZ25lZCBpbnQgazsNCkBAIC0zODU4LDM0 ICszODYzLDM1IEBAIGhhbmRsZV9jb25zdF9jYWxsIChnaW1wbGUgc3RtdCwg VkVDKGNlX3MNCiAgICAgICByaHNjLnZhciA9IHVzZXMtPmlkOw0KICAgICAg IHJoc2Mub2Zmc2V0ID0gMDsNCiAgICAgICByaHNjLnR5cGUgPSBTQ0FMQVI7 DQotICAgICAgVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVhcCwgKnJlc3VsdHMs ICZyaHNjKTsNCisgICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBzdGFjaywg KnJlc3VsdHMsICZyaHNjKTsNCiAgICAgfQ0KIA0KICAgLyogTWF5IHJldHVy biBhcmd1bWVudHMuICAqLw0KICAgZm9yIChrID0gMDsgayA8IGdpbXBsZV9j YWxsX251bV9hcmdzIChzdG10KTsgKytrKQ0KICAgICB7DQogICAgICAgdHJl ZSBhcmcgPSBnaW1wbGVfY2FsbF9hcmcgKHN0bXQsIGspOw0KLSAgICAgIFZF QyhjZV9zLCBoZWFwKSAqYXJnYyA9IE5VTEw7DQogICAgICAgdW5zaWduZWQg aTsNCiAgICAgICBzdHJ1Y3QgY29uc3RyYWludF9leHByICphcmdwOw0KKyAg ICAgIFZFQyhjZV9zLCBzdGFjaykgKmFyZ2MgPSBWRUNfYWxsb2MgKGNlX3Ms IHN0YWNrLCAzMik7DQorDQogICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yX3Jo cyAoYXJnLCAmYXJnYyk7DQogICAgICAgRk9SX0VBQ0hfVkVDX0VMVCAoY2Vf cywgYXJnYywgaSwgYXJncCkNCi0JVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVh cCwgKnJlc3VsdHMsIGFyZ3ApOw0KLSAgICAgIFZFQ19mcmVlKGNlX3MsIGhl YXAsIGFyZ2MpOw0KKwlWRUNfc2FmZV9wdXNoIChjZV9zLCBzdGFjaywgKnJl c3VsdHMsIGFyZ3ApOw0KKyAgICAgIFZFQ19mcmVlKGNlX3MsIHN0YWNrLCBh cmdjKTsNCiAgICAgfQ0KIA0KICAgLyogTWF5IHJldHVybiBhZGRyZXNzZXMg b2YgZ2xvYmFscy4gICovDQogICByaHNjLnZhciA9IG5vbmxvY2FsX2lkOw0K ICAgcmhzYy5vZmZzZXQgPSAwOw0KICAgcmhzYy50eXBlID0gQUREUkVTU09G Ow0KLSAgVkVDX3NhZmVfcHVzaCAoY2VfcywgaGVhcCwgKnJlc3VsdHMsICZy aHNjKTsNCisgIFZFQ19zYWZlX3B1c2ggKGNlX3MsIHN0YWNrLCAqcmVzdWx0 cywgJnJoc2MpOw0KIH0NCiANCiAvKiBGb3Igbm9uLUlQQSBtb2RlLCBnZW5l cmF0ZSBjb25zdHJhaW50cyBuZWNlc3NhcnkgZm9yIGEgY2FsbCB0byBhDQog ICAgcHVyZSBmdW5jdGlvbiBpbiBzdGF0ZW1lbnQgU1RNVC4gICovDQogDQog c3RhdGljIHZvaWQNCi1oYW5kbGVfcHVyZV9jYWxsIChnaW1wbGUgc3RtdCwg VkVDKGNlX3MsIGhlYXApICoqcmVzdWx0cykNCitoYW5kbGVfcHVyZV9jYWxs IChnaW1wbGUgc3RtdCwgVkVDKGNlX3MsIHN0YWNrKSAqKnJlc3VsdHMpDQog ew0KICAgc3RydWN0IGNvbnN0cmFpbnRfZXhwciByaHNjOw0KICAgdW5zaWdu ZWQgaTsNCkBAIC0zOTIwLDEyICszOTI2LDEyIEBAIGhhbmRsZV9wdXJlX2Nh bGwgKGdpbXBsZSBzdG10LCBWRUMoY2VfcywNCiAgICAgICByaHNjLnZhciA9 IHVzZXMtPmlkOw0KICAgICAgIHJoc2Mub2Zmc2V0ID0gMDsNCiAgICAgICBy aHNjLnR5cGUgPSBTQ0FMQVI7DQotICAgICAgVkVDX3NhZmVfcHVzaCAoY2Vf cywgaGVhcCwgKnJlc3VsdHMsICZyaHNjKTsNCisgICAgICBWRUNfc2FmZV9w dXNoIChjZV9zLCBzdGFjaywgKnJlc3VsdHMsICZyaHNjKTsNCiAgICAgfQ0K ICAgcmhzYy52YXIgPSBub25sb2NhbF9pZDsNCiAgIHJoc2Mub2Zmc2V0ID0g MDsNCiAgIHJoc2MudHlwZSA9IFNDQUxBUjsNCi0gIFZFQ19zYWZlX3B1c2gg KGNlX3MsIGhlYXAsICpyZXN1bHRzLCAmcmhzYyk7DQorICBWRUNfc2FmZV9w dXNoIChjZV9zLCBzdGFjaywgKnJlc3VsdHMsICZyaHNjKTsNCiB9DQogDQog DQpAQCAtMzk2Niw5ICszOTcyLDkgQEAgc3RhdGljIGJvb2wNCiBmaW5kX2Z1 bmNfYWxpYXNlc19mb3JfYnVpbHRpbl9jYWxsIChnaW1wbGUgdCkNCiB7DQog ICB0cmVlIGZuZGVjbCA9IGdpbXBsZV9jYWxsX2ZuZGVjbCAodCk7DQotICBW RUMoY2VfcywgaGVhcCkgKmxoc2MgPSBOVUxMOw0KLSAgVkVDKGNlX3MsIGhl YXApICpyaHNjID0gTlVMTDsNCiAgIHZhcmluZm9fdCBmaTsNCisgIFZFQyhj ZV9zLCBzdGFjaykgKmxoc2MgPSBWRUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAz Mik7DQorICBWRUMoY2Vfcywgc3RhY2spICpyaHNjID0gVkVDX2FsbG9jIChj ZV9zLCBzdGFjaywgMzIpOw0KIA0KICAgaWYgKGZuZGVjbCAhPSBOVUxMX1RS RUUNCiAgICAgICAmJiBERUNMX0JVSUxUX0lOX0NMQVNTIChmbmRlY2wpID09 IEJVSUxUX0lOX05PUk1BTCkNCkBAIC00MDA3LDE2ICs0MDEzLDE2IEBAIGZp bmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGluX2NhbGwgKGdpbXANCiAJICAg ICAgZWxzZQ0KIAkJZ2V0X2NvbnN0cmFpbnRfZm9yIChkZXN0LCAmcmhzYyk7 DQogCSAgICAgIHByb2Nlc3NfYWxsX2FsbF9jb25zdHJhaW50cyAobGhzYywg cmhzYyk7DQotCSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCBsaHNjKTsN Ci0JICAgICAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KKwkgICAg ICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIGxoc2MpOw0KKwkgICAgICBWRUNf ZnJlZSAoY2Vfcywgc3RhY2ssIHJoc2MpOw0KIAkgICAgfQ0KIAkgIGdldF9j b25zdHJhaW50X2Zvcl9wdHJfb2Zmc2V0IChkZXN0LCBOVUxMX1RSRUUsICZs aHNjKTsNCiAJICBnZXRfY29uc3RyYWludF9mb3JfcHRyX29mZnNldCAoc3Jj LCBOVUxMX1RSRUUsICZyaHNjKTsNCiAJICBkb19kZXJlZiAoJmxoc2MpOw0K IAkgIGRvX2RlcmVmICgmcmhzYyk7DQogCSAgcHJvY2Vzc19hbGxfYWxsX2Nv bnN0cmFpbnRzIChsaHNjLCByaHNjKTsNCi0JICBWRUNfZnJlZSAoY2Vfcywg aGVhcCwgbGhzYyk7DQotCSAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2Mp Ow0KKwkgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywgbGhzYyk7DQorCSAgVkVD X2ZyZWUgKGNlX3MsIHN0YWNrLCByaHNjKTsNCiAJICByZXR1cm4gdHJ1ZTsN CiAJfQ0KICAgICAgIGNhc2UgQlVJTFRfSU5fTUVNU0VUOg0KQEAgLTQwMzEs OCArNDAzNyw4IEBAIGZpbmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGluX2Nh bGwgKGdpbXANCiAJICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yIChyZXMsICZs aHNjKTsNCiAJICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yIChkZXN0LCAmcmhz Yyk7DQogCSAgICAgIHByb2Nlc3NfYWxsX2FsbF9jb25zdHJhaW50cyAobGhz YywgcmhzYyk7DQotCSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCBsaHNj KTsNCi0JICAgICAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KKwkg ICAgICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIGxoc2MpOw0KKwkgICAgICBW RUNfZnJlZSAoY2Vfcywgc3RhY2ssIHJoc2MpOw0KIAkgICAgfQ0KIAkgIGdl dF9jb25zdHJhaW50X2Zvcl9wdHJfb2Zmc2V0IChkZXN0LCBOVUxMX1RSRUUs ICZsaHNjKTsNCiAJICBkb19kZXJlZiAoJmxoc2MpOw0KQEAgLTQwNTAsNyAr NDA1Niw3IEBAIGZpbmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGluX2NhbGwg KGdpbXANCiAJICBhYy5vZmZzZXQgPSAwOw0KIAkgIEZPUl9FQUNIX1ZFQ19F TFQgKGNlX3MsIGxoc2MsIGksIGxoc3ApDQogCSAgICAgIHByb2Nlc3NfY29u c3RyYWludCAobmV3X2NvbnN0cmFpbnQgKCpsaHNwLCBhYykpOw0KLQkgIFZF Q19mcmVlIChjZV9zLCBoZWFwLCBsaHNjKTsNCisJICBWRUNfZnJlZSAoY2Vf cywgc3RhY2ssIGxoc2MpOw0KIAkgIHJldHVybiB0cnVlOw0KIAl9DQogICAg ICAgLyogQWxsIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGRvIG5vdCByZXR1 cm4gcG9pbnRlcnMsIGRvIG5vdA0KQEAgLTQwOTYsNyArNDEwMiw3IEBAIGZp bmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGluX2NhbGwgKGdpbXANCiAJCSAg Z2V0X2NvbnN0cmFpbnRfZm9yIChmcmFtZSwgJnJoc2MpOw0KIAkJICBGT1Jf RUFDSF9WRUNfRUxUIChjZV9zLCByaHNjLCBpLCByaHNwKQ0KIAkJICAgICAg cHJvY2Vzc19jb25zdHJhaW50IChuZXdfY29uc3RyYWludCAobGhzLCAqcmhz cCkpOw0KLQkJICBWRUNfZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQorCQkg IFZFQ19mcmVlIChjZV9zLCBzdGFjaywgcmhzYyk7DQogDQogCQkgIC8qIE1h a2UgdGhlIGZyYW1lIHBvaW50IHRvIHRoZSBmdW5jdGlvbiBmb3INCiAJCSAg ICAgdGhlIHRyYW1wb2xpbmUgYWRqdXN0bWVudCBjYWxsLiAgKi8NCkBAIC00 MTA0LDggKzQxMTAsOCBAQCBmaW5kX2Z1bmNfYWxpYXNlc19mb3JfYnVpbHRp bl9jYWxsIChnaW1wDQogCQkgIGRvX2RlcmVmICgmbGhzYyk7DQogCQkgIGdl dF9jb25zdHJhaW50X2ZvciAobmZ1bmMsICZyaHNjKTsNCiAJCSAgcHJvY2Vz c19hbGxfYWxsX2NvbnN0cmFpbnRzIChsaHNjLCByaHNjKTsNCi0JCSAgVkVD X2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KLQkJICBWRUNfZnJlZSAoY2Vf cywgaGVhcCwgbGhzYyk7DQorCQkgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywg cmhzYyk7DQorCQkgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywgbGhzYyk7DQog DQogCQkgIHJldHVybiB0cnVlOw0KIAkJfQ0KQEAgLTQxMjQsOCArNDEzMCw4 IEBAIGZpbmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGluX2NhbGwgKGdpbXAN CiAJICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yICh0cmFtcCwgJnJoc2MpOw0K IAkgICAgICBkb19kZXJlZiAoJnJoc2MpOw0KIAkgICAgICBwcm9jZXNzX2Fs bF9hbGxfY29uc3RyYWludHMgKGxoc2MsIHJoc2MpOw0KLQkgICAgICBWRUNf ZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQotCSAgICAgIFZFQ19mcmVlIChj ZV9zLCBoZWFwLCBsaHNjKTsNCisJICAgICAgVkVDX2ZyZWUgKGNlX3MsIHN0 YWNrLCByaHNjKTsNCisJICAgICAgVkVDX2ZyZWUgKGNlX3MsIHN0YWNrLCBs aHNjKTsNCiAJICAgIH0NCiAJICByZXR1cm4gdHJ1ZTsNCiAJfQ0KQEAgLTQx NDgsNyArNDE1NCw3IEBAIGZpbmRfZnVuY19hbGlhc2VzX2Zvcl9idWlsdGlu X2NhbGwgKGdpbXANCiAJICAgICAgcmhzLnR5cGUgPSBBRERSRVNTT0Y7DQog CSAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKGNlX3MsIGxoc2MsIGksIGxoc3Ap DQogCQkgIHByb2Nlc3NfY29uc3RyYWludCAobmV3X2NvbnN0cmFpbnQgKCps aHNwLCByaHMpKTsNCi0JICAgICAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIGxo c2MpOw0KKwkgICAgICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIGxoc2MpOw0K IAkgICAgICAvKiB2YV9saXN0IGlzIGNsb2JiZXJlZC4gICovDQogCSAgICAg IG1ha2VfY29uc3RyYWludF90byAoZ2V0X2NhbGxfY2xvYmJlcl92aSAodCkt PmlkLCB2YWxpc3QpOw0KIAkgICAgICByZXR1cm4gdHJ1ZTsNCkBAIC00MTkz LDkgKzQxOTksOSBAQCBzdGF0aWMgdm9pZA0KIGZpbmRfZnVuY19hbGlhc2Vz X2Zvcl9jYWxsIChnaW1wbGUgdCkNCiB7DQogICB0cmVlIGZuZGVjbCA9IGdp bXBsZV9jYWxsX2ZuZGVjbCAodCk7DQotICBWRUMoY2VfcywgaGVhcCkgKmxo c2MgPSBOVUxMOw0KLSAgVkVDKGNlX3MsIGhlYXApICpyaHNjID0gTlVMTDsN CiAgIHZhcmluZm9fdCBmaTsNCisgIFZFQyhjZV9zLCBzdGFjaykgKmxoc2Mg PSBWRUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAzMik7DQorICBWRUMoY2Vfcywg c3RhY2spICpyaHNjID0gVkVDX2FsbG9jIChjZV9zLCBzdGFjaywgMzIpOw0K IA0KICAgaWYgKGZuZGVjbCAhPSBOVUxMX1RSRUUNCiAgICAgICAmJiBERUNM X0JVSUxUX0lOIChmbmRlY2wpDQpAQCAtNDIwNiw3ICs0MjEyLDcgQEAgZmlu ZF9mdW5jX2FsaWFzZXNfZm9yX2NhbGwgKGdpbXBsZSB0KQ0KICAgaWYgKCFp bl9pcGFfbW9kZQ0KICAgICAgIHx8IChmbmRlY2wgJiYgIWZpLT5pc19mbl9p bmZvKSkNCiAgICAgew0KLSAgICAgIFZFQyhjZV9zLCBoZWFwKSAqcmhzYyA9 IE5VTEw7DQorICAgICAgVkVDKGNlX3MsIHN0YWNrKSAqcmhzYyA9IFZFQ19h bGxvYyAoY2Vfcywgc3RhY2ssIDMyKTsNCiAgICAgICBpbnQgZmxhZ3MgPSBn aW1wbGVfY2FsbF9mbGFncyAodCk7DQogDQogICAgICAgLyogQ29uc3QgZnVu Y3Rpb25zIGNhbiByZXR1cm4gdGhlaXIgYXJndW1lbnRzIGFuZCBhZGRyZXNz ZXMNCkBAIC00MjI1LDcgKzQyMzEsNyBAQCBmaW5kX2Z1bmNfYWxpYXNlc19m b3JfY2FsbCAoZ2ltcGxlIHQpDQogCWhhbmRsZV9yaHNfY2FsbCAodCwgJnJo c2MpOw0KICAgICAgIGlmIChnaW1wbGVfY2FsbF9saHMgKHQpKQ0KIAloYW5k bGVfbGhzX2NhbGwgKHQsIGdpbXBsZV9jYWxsX2xocyAodCksIGZsYWdzLCBy aHNjLCBmbmRlY2wpOw0KLSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCBy aHNjKTsNCisgICAgICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIHJoc2MpOw0K ICAgICB9DQogICBlbHNlDQogICAgIHsNCkBAIC00MjYzLDExICs0MjY5LDEx IEBAIGZpbmRfZnVuY19hbGlhc2VzX2Zvcl9jYWxsIChnaW1wbGUgdCkNCiAJ ICAgICAgJiYgREVDTF9SRVNVTFQgKGZuZGVjbCkNCiAJICAgICAgJiYgREVD TF9CWV9SRUZFUkVOQ0UgKERFQ0xfUkVTVUxUIChmbmRlY2wpKSkNCiAJICAg IHsNCi0JICAgICAgVkVDKGNlX3MsIGhlYXApICp0ZW0gPSBOVUxMOw0KLQkg ICAgICBWRUNfc2FmZV9wdXNoIChjZV9zLCBoZWFwLCB0ZW0sICZyaHMpOw0K KwkgICAgICBWRUMoY2Vfcywgc3RhY2spICp0ZW0gPSBWRUNfYWxsb2MgKGNl X3MsIHN0YWNrLCAzMik7DQorCSAgICAgIFZFQ19zYWZlX3B1c2ggKGNlX3Ms IHN0YWNrLCB0ZW0sICZyaHMpOw0KIAkgICAgICBkb19kZXJlZiAoJnRlbSk7 DQogCSAgICAgIHJocyA9ICpWRUNfaW5kZXggKGNlX3MsIHRlbSwgMCk7DQot CSAgICAgIFZFQ19mcmVlKGNlX3MsIGhlYXAsIHRlbSk7DQorCSAgICAgIFZF Q19mcmVlKGNlX3MsIHN0YWNrLCB0ZW0pOw0KIAkgICAgfQ0KIAkgIEZPUl9F QUNIX1ZFQ19FTFQgKGNlX3MsIGxoc2MsIGosIGxoc3ApDQogCSAgICBwcm9j ZXNzX2NvbnN0cmFpbnQgKG5ld19jb25zdHJhaW50ICgqbGhzcCwgcmhzKSk7 DQpAQCAtNDI4Niw3ICs0MjkyLDcgQEAgZmluZF9mdW5jX2FsaWFzZXNfZm9y X2NhbGwgKGdpbXBsZSB0KQ0KIAkgIGxocyA9IGdldF9mdW5jdGlvbl9wYXJ0 X2NvbnN0cmFpbnQgKGZpLCBmaV9yZXN1bHQpOw0KIAkgIEZPUl9FQUNIX1ZF Q19FTFQgKGNlX3MsIHJoc2MsIGosIHJoc3ApDQogCSAgICBwcm9jZXNzX2Nv bnN0cmFpbnQgKG5ld19jb25zdHJhaW50IChsaHMsICpyaHNwKSk7DQotCSAg VkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KKwkgIFZFQ19mcmVlIChj ZV9zLCBzdGFjaywgcmhzYyk7DQogCX0NCiANCiAgICAgICAvKiBJZiB3ZSB1 c2UgYSBzdGF0aWMgY2hhaW4sIHBhc3MgaXQgYWxvbmcuICAqLw0KQEAgLTQz MTIsMTAgKzQzMTgsMTAgQEAgc3RhdGljIHZvaWQNCiBmaW5kX2Z1bmNfYWxp YXNlcyAoZ2ltcGxlIG9yaWd0KQ0KIHsNCiAgIGdpbXBsZSB0ID0gb3JpZ3Q7 DQotICBWRUMoY2VfcywgaGVhcCkgKmxoc2MgPSBOVUxMOw0KLSAgVkVDKGNl X3MsIGhlYXApICpyaHNjID0gTlVMTDsNCiAgIHN0cnVjdCBjb25zdHJhaW50 X2V4cHIgKmM7DQogICB2YXJpbmZvX3QgZmk7DQorICBWRUMoY2Vfcywgc3Rh Y2spICpsaHNjID0gVkVDX2FsbG9jIChjZV9zLCBzdGFjaywgMzIpOw0KKyAg VkVDKGNlX3MsIHN0YWNrKSAqcmhzYyA9IFZFQ19hbGxvYyAoY2Vfcywgc3Rh Y2ssIDMyKTsNCiANCiAgIC8qIE5vdyBidWlsZCBjb25zdHJhaW50cyBleHBy ZXNzaW9ucy4gICovDQogICBpZiAoZ2ltcGxlX2NvZGUgKHQpID09IEdJTVBM RV9QSEkpDQpAQCAtNDM5NSwxOCArNDQwMSwxOSBAQCBmaW5kX2Z1bmNfYWxp YXNlcyAoZ2ltcGxlIG9yaWd0KQ0KIAkgIGVsc2UNCiAJICAgIHsNCiAJICAg ICAgLyogQWxsIG90aGVyIG9wZXJhdGlvbnMgYXJlIG1lcmdlcy4gICovDQot CSAgICAgIFZFQyAoY2VfcywgaGVhcCkgKnRtcCA9IE5VTEw7DQogCSAgICAg IHN0cnVjdCBjb25zdHJhaW50X2V4cHIgKnJoc3A7DQogCSAgICAgIHVuc2ln bmVkIGksIGo7DQorCSAgICAgIFZFQyAoY2Vfcywgc3RhY2spICp0bXAgPSBW RUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAzMik7DQorDQogCSAgICAgIGdldF9j b25zdHJhaW50X2Zvcl9yaHMgKGdpbXBsZV9hc3NpZ25fcmhzMSAodCksICZy aHNjKTsNCiAJICAgICAgZm9yIChpID0gMjsgaSA8IGdpbXBsZV9udW1fb3Bz ICh0KTsgKytpKQ0KIAkJew0KIAkJICBnZXRfY29uc3RyYWludF9mb3Jfcmhz IChnaW1wbGVfb3AgKHQsIGkpLCAmdG1wKTsNCiAJCSAgRk9SX0VBQ0hfVkVD X0VMVCAoY2VfcywgdG1wLCBqLCByaHNwKQ0KLQkJICAgIFZFQ19zYWZlX3B1 c2ggKGNlX3MsIGhlYXAsIHJoc2MsIHJoc3ApOw0KKwkJICAgIFZFQ19zYWZl X3B1c2ggKGNlX3MsIHN0YWNrLCByaHNjLCByaHNwKTsNCiAJCSAgVkVDX3Ry dW5jYXRlIChjZV9zLCB0bXAsIDApOw0KIAkJfQ0KLQkgICAgICBWRUNfZnJl ZSAoY2VfcywgaGVhcCwgdG1wKTsNCisJICAgICAgVkVDX2ZyZWUgKGNlX3Ms IHN0YWNrLCB0bXApOw0KIAkgICAgfQ0KIAkgIHByb2Nlc3NfYWxsX2FsbF9j b25zdHJhaW50cyAobGhzYywgcmhzYyk7DQogCX0NCkBAIC00NDc3LDE2ICs0 NDg0LDE3IEBAIGZpbmRfZnVuY19hbGlhc2VzIChnaW1wbGUgb3JpZ3QpDQog CSAgICAgYW55IGdsb2JhbCBtZW1vcnkuICAqLw0KIAkgIGlmIChvcCkNCiAJ ICAgIHsNCi0JICAgICAgVkVDKGNlX3MsIGhlYXApICpsaHNjID0gTlVMTDsN CiAJICAgICAgc3RydWN0IGNvbnN0cmFpbnRfZXhwciByaHNjLCAqbGhzcDsN CiAJICAgICAgdW5zaWduZWQgajsNCisJICAgICAgVkVDKGNlX3MsIHN0YWNr KSAqbGhzYyA9IFZFQ19hbGxvYyAoY2Vfcywgc3RhY2ssIDMyKTsNCisNCiAJ ICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yIChvcCwgJmxoc2MpOw0KIAkgICAg ICByaHNjLnZhciA9IG5vbmxvY2FsX2lkOw0KIAkgICAgICByaHNjLm9mZnNl dCA9IDA7DQogCSAgICAgIHJoc2MudHlwZSA9IFNDQUxBUjsNCiAJICAgICAg Rk9SX0VBQ0hfVkVDX0VMVCAoY2VfcywgbGhzYywgaiwgbGhzcCkNCiAJCXBy b2Nlc3NfY29uc3RyYWludCAobmV3X2NvbnN0cmFpbnQgKCpsaHNwLCByaHNj KSk7DQotCSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCBsaHNjKTsNCisJ ICAgICAgVkVDX2ZyZWUgKGNlX3MsIHN0YWNrLCBsaHNjKTsNCiAJICAgIH0N CiAJfQ0KICAgICAgIGZvciAoaSA9IDA7IGkgPCBnaW1wbGVfYXNtX25pbnB1 dHMgKHQpOyArK2kpDQpAQCAtNDUxMCw4ICs0NTE4LDggQEAgZmluZF9mdW5j X2FsaWFzZXMgKGdpbXBsZSBvcmlndCkNCiAJfQ0KICAgICB9DQogDQotICBW RUNfZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQotICBWRUNfZnJlZSAoY2Vf cywgaGVhcCwgbGhzYyk7DQorICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIHJo c2MpOw0KKyAgVkVDX2ZyZWUgKGNlX3MsIHN0YWNrLCBsaHNjKTsNCiB9DQog DQogDQpAQCAtNDUyMSwxNCArNDUyOSwxNSBAQCBmaW5kX2Z1bmNfYWxpYXNl cyAoZ2ltcGxlIG9yaWd0KQ0KIHN0YXRpYyB2b2lkDQogcHJvY2Vzc19pcGFf Y2xvYmJlciAodmFyaW5mb190IGZpLCB0cmVlIHB0cikNCiB7DQotICBWRUMo Y2VfcywgaGVhcCkgKnB0cmMgPSBOVUxMOw0KICAgc3RydWN0IGNvbnN0cmFp bnRfZXhwciAqYywgbGhzOw0KICAgdW5zaWduZWQgaTsNCisgIFZFQyhjZV9z LCBzdGFjaykgKnB0cmMgPSBWRUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAzMik7 DQorDQogICBnZXRfY29uc3RyYWludF9mb3JfcmhzIChwdHIsICZwdHJjKTsN CiAgIGxocyA9IGdldF9mdW5jdGlvbl9wYXJ0X2NvbnN0cmFpbnQgKGZpLCBm aV9jbG9iYmVycyk7DQogICBGT1JfRUFDSF9WRUNfRUxUIChjZV9zLCBwdHJj LCBpLCBjKQ0KICAgICBwcm9jZXNzX2NvbnN0cmFpbnQgKG5ld19jb25zdHJh aW50IChsaHMsICpjKSk7DQotICBWRUNfZnJlZSAoY2VfcywgaGVhcCwgcHRy Yyk7DQorICBWRUNfZnJlZSAoY2Vfcywgc3RhY2ssIHB0cmMpOw0KIH0NCiAN CiAvKiBXYWxrIHN0YXRlbWVudCBUIHNldHRpbmcgdXAgY2xvYmJlciBhbmQg dXNlIGNvbnN0cmFpbnRzIGFjY29yZGluZyB0byB0aGUNCkBAIC00NTM5LDkg KzQ1NDgsOSBAQCBzdGF0aWMgdm9pZA0KIGZpbmRfZnVuY19jbG9iYmVycyAo Z2ltcGxlIG9yaWd0KQ0KIHsNCiAgIGdpbXBsZSB0ID0gb3JpZ3Q7DQotICBW RUMoY2VfcywgaGVhcCkgKmxoc2MgPSBOVUxMOw0KLSAgVkVDKGNlX3MsIGhl YXApICpyaHNjID0gTlVMTDsNCiAgIHZhcmluZm9fdCBmaTsNCisgIFZFQyhj ZV9zLCBzdGFjaykgKmxoc2MgPSBWRUNfYWxsb2MgKGNlX3MsIHN0YWNrLCAz Mik7DQorICBWRUMoY2Vfcywgc3RhY2spICpyaHNjID0gVkVDX2FsbG9jIChj ZV9zLCBzdGFjaywgMzIpOw0KIA0KICAgLyogQWRkIGNvbnN0cmFpbnRzIGZv ciBjbG9iYmVyZWQvdXNlZCBpbiBJUEEgbW9kZS4NCiAgICAgIFdlIGFyZSBu b3QgaW50ZXJlc3RlZCBpbiB3aGF0IGF1dG9tYXRpYyB2YXJpYWJsZXMgYXJl IGNsb2JiZXJlZA0KQEAgLTQ1NzksNyArNDU4OCw3IEBAIGZpbmRfZnVuY19j bG9iYmVycyAoZ2ltcGxlIG9yaWd0KQ0KIAkgIGdldF9jb25zdHJhaW50X2Zv cl9hZGRyZXNzX29mIChsaHMsICZyaHNjKTsNCiAJICBGT1JfRUFDSF9WRUNf RUxUIChjZV9zLCByaHNjLCBpLCByaHNwKQ0KIAkgICAgcHJvY2Vzc19jb25z dHJhaW50IChuZXdfY29uc3RyYWludCAobGhzYywgKnJoc3ApKTsNCi0JICBW RUNfZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQorCSAgVkVDX2ZyZWUgKGNl X3MsIHN0YWNrLCByaHNjKTsNCiAJfQ0KICAgICB9DQogDQpAQCAtNDYwNyw3 ICs0NjE2LDcgQEAgZmluZF9mdW5jX2Nsb2JiZXJzIChnaW1wbGUgb3JpZ3Qp DQogCSAgZ2V0X2NvbnN0cmFpbnRfZm9yX2FkZHJlc3Nfb2YgKHJocywgJnJo c2MpOw0KIAkgIEZPUl9FQUNIX1ZFQ19FTFQgKGNlX3MsIHJoc2MsIGksIHJo c3ApDQogCSAgICBwcm9jZXNzX2NvbnN0cmFpbnQgKG5ld19jb25zdHJhaW50 IChsaHMsICpyaHNwKSk7DQotCSAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJo c2MpOw0KKwkgIFZFQ19mcmVlIChjZV9zLCBzdGFjaywgcmhzYyk7DQogCX0N CiAgICAgfQ0KIA0KQEAgLTQ2NDcsMTIgKzQ2NTYsMTIgQEAgZmluZF9mdW5j X2Nsb2JiZXJzIChnaW1wbGUgb3JpZ3QpDQogCSAgICAgIGxocyA9IGdldF9m dW5jdGlvbl9wYXJ0X2NvbnN0cmFpbnQgKGZpLCBmaV9jbG9iYmVycyk7DQog CSAgICAgIEZPUl9FQUNIX1ZFQ19FTFQgKGNlX3MsIGxoc2MsIGksIGxoc3Ap DQogCQlwcm9jZXNzX2NvbnN0cmFpbnQgKG5ld19jb25zdHJhaW50IChsaHMs ICpsaHNwKSk7DQotCSAgICAgIFZFQ19mcmVlIChjZV9zLCBoZWFwLCBsaHNj KTsNCisJICAgICAgVkVDX2ZyZWUgKGNlX3MsIHN0YWNrLCBsaHNjKTsNCiAJ ICAgICAgZ2V0X2NvbnN0cmFpbnRfZm9yX3B0cl9vZmZzZXQgKHNyYywgTlVM TF9UUkVFLCAmcmhzYyk7DQogCSAgICAgIGxocyA9IGdldF9mdW5jdGlvbl9w YXJ0X2NvbnN0cmFpbnQgKGZpLCBmaV91c2VzKTsNCiAJICAgICAgRk9SX0VB Q0hfVkVDX0VMVCAoY2VfcywgcmhzYywgaSwgcmhzcCkNCiAJCXByb2Nlc3Nf Y29uc3RyYWludCAobmV3X2NvbnN0cmFpbnQgKGxocywgKnJoc3ApKTsNCi0J ICAgICAgVkVDX2ZyZWUgKGNlX3MsIGhlYXAsIHJoc2MpOw0KKwkgICAgICBW RUNfZnJlZSAoY2Vfcywgc3RhY2ssIHJoc2MpOw0KIAkgICAgICByZXR1cm47 DQogCSAgICB9DQogCSAgLyogVGhlIGZvbGxvd2luZyBmdW5jdGlvbiBjbG9i YmVycyBtZW1vcnkgcG9pbnRlZCB0byBieQ0KQEAgLTQ2NjYsNyArNDY3NSw3 IEBAIGZpbmRfZnVuY19jbG9iYmVycyAoZ2ltcGxlIG9yaWd0KQ0KIAkgICAg ICBsaHMgPSBnZXRfZnVuY3Rpb25fcGFydF9jb25zdHJhaW50IChmaSwgZmlf Y2xvYmJlcnMpOw0KIAkgICAgICBGT1JfRUFDSF9WRUNfRUxUIChjZV9zLCBs aHNjLCBpLCBsaHNwKQ0KIAkJcHJvY2Vzc19jb25zdHJhaW50IChuZXdfY29u c3RyYWludCAobGhzLCAqbGhzcCkpOw0KLQkgICAgICBWRUNfZnJlZSAoY2Vf cywgaGVhcCwgbGhzYyk7DQorCSAgICAgIFZFQ19mcmVlIChjZV9zLCBzdGFj aywgbGhzYyk7DQogCSAgICAgIHJldHVybjsNCiAJICAgIH0NCiAJICAvKiBU aGUgZm9sbG93aW5nIGZ1bmN0aW9ucyBjbG9iYmVyIHRoZWlyIHNlY29uZCBh bmQgdGhpcmQNCkBAIC00NzM1LDcgKzQ3NDQsNyBAQCBmaW5kX2Z1bmNfY2xv YmJlcnMgKGdpbXBsZSBvcmlndCkNCiAJICBnZXRfY29uc3RyYWludF9mb3Jf YWRkcmVzc19vZiAoYXJnLCAmcmhzYyk7DQogCSAgRk9SX0VBQ0hfVkVDX0VM VCAoY2VfcywgcmhzYywgaiwgcmhzcCkNCiAJICAgIHByb2Nlc3NfY29uc3Ry YWludCAobmV3X2NvbnN0cmFpbnQgKGxocywgKnJoc3ApKTsNCi0JICBWRUNf ZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQorCSAgVkVDX2ZyZWUgKGNlX3Ms IHN0YWNrLCByaHNjKTsNCiAJfQ0KIA0KICAgICAgIC8qIEJ1aWxkIGNvbnN0 cmFpbnRzIGZvciBwcm9wYWdhdGluZyBjbG9iYmVycy91c2VzIGFsb25nIHRo ZQ0KQEAgLTQ3OTYsNyArNDgwNSw3IEBAIGZpbmRfZnVuY19jbG9iYmVycyAo Z2ltcGxlIG9yaWd0KQ0KIAkJCSAgICBhbnl0aGluZ19pZCk7DQogICAgIH0N CiANCi0gIFZFQ19mcmVlIChjZV9zLCBoZWFwLCByaHNjKTsNCisgIFZFQ19m cmVlIChjZV9zLCBzdGFjaywgcmhzYyk7DQogfQ0KIA0KIA0KQEAgLTU0MzYs OSArNTQ0NSwxMCBAQCBjcmVhdGVfdmFyaWFibGVfaW5mb19mb3IgKHRyZWUg ZGVjbCwgY29uDQogICAgICAgaWYgKGluX2lwYV9tb2RlDQogCSAgJiYgREVD TF9JTklUSUFMIChkZWNsKSkNCiAJew0KLQkgIFZFQyAoY2VfcywgaGVhcCkg KnJoc2MgPSBOVUxMOw0KIAkgIHN0cnVjdCBjb25zdHJhaW50X2V4cHIgbGhz LCAqcmhzcDsNCiAJICB1bnNpZ25lZCBpOw0KKwkgIFZFQyAoY2Vfcywgc3Rh Y2spICpyaHNjID0gVkVDX2FsbG9jIChjZV9zLCBzdGFjaywgMzIpOw0KKw0K IAkgIGdldF9jb25zdHJhaW50X2Zvcl9yaHMgKERFQ0xfSU5JVElBTCAoZGVj bCksICZyaHNjKTsNCiAJICBsaHMudmFyID0gdmktPmlkOw0KIAkgIGxocy5v ZmZzZXQgPSAwOw0KQEAgLTU0NTUsNyArNTQ2NSw3IEBAIGNyZWF0ZV92YXJp YWJsZV9pbmZvX2ZvciAodHJlZSBkZWNsLCBjb24NCiAJICAgICAgRk9SX0VB Q0hfVkVDX0VMVCAoY2VfcywgcmhzYywgaSwgcmhzcCkNCiAJCXByb2Nlc3Nf Y29uc3RyYWludCAobmV3X2NvbnN0cmFpbnQgKGxocywgKnJoc3ApKTsNCiAJ ICAgIH0NCi0JICBWRUNfZnJlZSAoY2VfcywgaGVhcCwgcmhzYyk7DQorCSAg VkVDX2ZyZWUgKGNlX3MsIHN0YWNrLCByaHNjKTsNCiAJfQ0KICAgICB9DQog DQoNCj09PSBtb2RpZmllZCBmaWxlICdnY2MvdHJlZS1zc2Etc2Njdm4uYycN Ci0tLSBnY2MvdHJlZS1zc2Etc2Njdm4uYwkyMDExLTA1LTAyIDEzOjExOjI3 ICswMDAwDQorKysgZ2NjL3RyZWUtc3NhLXNjY3ZuLmMJMjAxMS0wOC0xOSAx Mjo1MDo0NyArMDAwMA0KQEAgLTIyMjEsNyArMjIyMSw3IEBAIHZuX3BoaV9p bnNlcnQgKGdpbXBsZSBwaGksIHRyZWUgcmVzdWx0KQ0KIC8qIFByaW50IHNl dCBvZiBjb21wb25lbnRzIGluIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25l bnQgU0NDIHRvIE9VVC4gKi8NCiANCiBzdGF0aWMgdm9pZA0KLXByaW50X3Nj YyAoRklMRSAqb3V0LCBWRUMgKHRyZWUsIGhlYXApICpzY2MpDQorcHJpbnRf c2NjIChGSUxFICpvdXQsIFZFQyAodHJlZSwgc3RhY2spICpzY2MpDQogew0K ICAgdHJlZSB2YXI7DQogICB1bnNpZ25lZCBpbnQgaTsNCkBAIC0zMjAzLDcg KzMyMDMsNyBAQCBjb21wYXJlX29wcyAoY29uc3Qgdm9pZCAqcGEsIGNvbnN0 IHZvaWQgDQogICAgYXJyYXkgd2lsbCBnaXZlIHlvdSB0aGUgbWVtYmVycyBp biBSUE8gb3JkZXIuICAqLw0KIA0KIHN0YXRpYyB2b2lkDQotc29ydF9zY2Mg KFZFQyAodHJlZSwgaGVhcCkgKnNjYykNCitzb3J0X3NjYyAoVkVDICh0cmVl LCBzdGFjaykgKnNjYykNCiB7DQogICBWRUNfcXNvcnQgKHRyZWUsIHNjYywg Y29tcGFyZV9vcHMpOw0KIH0NCkBAIC0zMjU0LDcgKzMyNTQsNyBAQCBjb3B5 X3JlZmVyZW5jZSAodm5fcmVmZXJlbmNlX3Qgb3JlZiwgdm5fDQogLyogUHJv Y2VzcyBhIHN0cm9uZ2x5IGNvbm5lY3RlZCBjb21wb25lbnQgaW4gdGhlIFNT QSBncmFwaC4gICovDQogDQogc3RhdGljIHZvaWQNCi1wcm9jZXNzX3NjYyAo VkVDICh0cmVlLCBoZWFwKSAqc2NjKQ0KK3Byb2Nlc3Nfc2NjIChWRUMgKHRy ZWUsIHN0YWNrKSAqc2NjKQ0KIHsNCiAgIHRyZWUgdmFyOw0KICAgdW5zaWdu ZWQgaW50IGk7DQpAQCAtMzMzNCw4ICszMzM0LDggQEAgREVGX1ZFQ19BTExP Q19PKHNzYV9vcF9pdGVyLGhlYXApOw0KIHN0YXRpYyBib29sDQogZXh0cmFj dF9hbmRfcHJvY2Vzc19zY2NfZm9yX25hbWUgKHRyZWUgbmFtZSkNCiB7DQot ICBWRUMgKHRyZWUsIGhlYXApICpzY2MgPSBOVUxMOw0KICAgdHJlZSB4Ow0K KyAgVkVDICh0cmVlLCBzdGFjaykgKnNjYyA9IFZFQ19hbGxvYyAodHJlZSwg c3RhY2ssIDE2KTsNCiANCiAgIC8qIEZvdW5kIGFuIFNDQywgcG9wIHRoZSBj b21wb25lbnRzIG9mZiB0aGUgU0NDIHN0YWNrIGFuZA0KICAgICAgcHJvY2Vz cyB0aGVtLiAgKi8NCkBAIC0zMzQ0LDcgKzMzNDQsNyBAQCBleHRyYWN0X2Fu ZF9wcm9jZXNzX3NjY19mb3JfbmFtZSAodHJlZSBuDQogICAgICAgeCA9IFZF Q19wb3AgKHRyZWUsIHNjY3N0YWNrKTsNCiANCiAgICAgICBWTl9JTkZPICh4 KS0+b25fc2Njc3RhY2sgPSBmYWxzZTsNCi0gICAgICBWRUNfc2FmZV9wdXNo ICh0cmVlLCBoZWFwLCBzY2MsIHgpOw0KKyAgICAgIFZFQ19zYWZlX3B1c2gg KHRyZWUsIHN0YWNrLCBzY2MsIHgpOw0KICAgICB9IHdoaWxlICh4ICE9IG5h bWUpOw0KIA0KICAgLyogQmFpbCBvdXQgb2YgU0NDVk4gaW4gY2FzZSBhIFND QyB0dXJucyBvdXQgdG8gYmUgaW5jcmVkaWJseSBsYXJnZS4gICovDQpAQCAt MzM2Niw3ICszMzY2LDcgQEAgZXh0cmFjdF9hbmRfcHJvY2Vzc19zY2NfZm9y X25hbWUgKHRyZWUgbg0KIA0KICAgcHJvY2Vzc19zY2MgKHNjYyk7DQogDQot ICBWRUNfZnJlZSAodHJlZSwgaGVhcCwgc2NjKTsNCisgIFZFQ19mcmVlICh0 cmVlLCBzdGFjaywgc2NjKTsNCiANCiAgIHJldHVybiB0cnVlOw0KIH0NCg0K PT09IG1vZGlmaWVkIGZpbGUgJ2djYy92ZWNpci5oJw0KLS0tIGdjYy92ZWNp ci5oCTIwMTAtMDUtMTUgMTk6MDI6MTEgKzAwMDANCisrKyBnY2MvdmVjaXIu aAkyMDExLTA4LTE5IDEyOjUwOjQ3ICswMDAwDQpAQCAtMjgsNiArMjgsOSBA QCBhbG9uZyB3aXRoIEdDQzsgc2VlIHRoZSBmaWxlIENPUFlJTkczLiAgDQog REVGX1ZFQ19QKHRyZWUpOw0KIERFRl9WRUNfQUxMT0NfUCh0cmVlLGdjKTsN CiBERUZfVkVDX0FMTE9DX1AodHJlZSxoZWFwKTsNCitERUZfVkVDX0FMTE9D X1BfU1RBQ0sodHJlZSk7DQorI2RlZmluZSBWRUNfdHJlZV9zdGFja19hbGxv YyhhbGxvYykgXA0KKyAgVkVDX3N0YWNrX2FsbG9jICh0cmVlLCBhbGxvYykN CiANCiAvKiBBIHZhcnJheSBvZiBnaW1wbGUgc3RhdGVtZW50cy4gICovDQog REVGX1ZFQ19QKGdpbXBsZSk7DQoNCg== --8323328-1525285129-1313999017=:1374--