From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (qmail 6990 invoked by alias); 26 Aug 2018 15:55:07 -0000 Mailing-List: contact fortran-help@gcc.gnu.org; run by ezmlm Precedence: bulk List-Id: List-Subscribe: List-Post: List-Help: , Sender: fortran-owner@gcc.gnu.org Received: (qmail 6957 invoked by uid 89); 26 Aug 2018 15:55:07 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-4.3 required=5.0 tests=AWL,BAYES_00,FREEMAIL_FROM,GIT_PATCH_2,KAM_ASCII_DIVIDERS,KAM_STOCKGEN,RCVD_IN_DNSWL_NONE,SPF_PASS autolearn=ham version=3.3.2 spammy=mold, rich, H*Ad:U*janus, filling X-HELO: mail-yb0-f182.google.com Received: from mail-yb0-f182.google.com (HELO mail-yb0-f182.google.com) (209.85.213.182) by sourceware.org (qpsmtpd/0.93/v0.84-503-g423c35a) with ESMTP; Sun, 26 Aug 2018 15:55:03 +0000 Received: by mail-yb0-f182.google.com with SMTP id l16-v6so5174965ybk.11; Sun, 26 Aug 2018 08:55:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=mime-version:from:date:message-id:subject:to:cc; bh=hLevc+4O4DS1PQyQEmdda7np3TX1l9/5yu4PDz4u3tE=; b=PaSQElrooWycknbraiN++A4nhAzvQSueXFIHRqwUW0MNCsHH3Ks5711VzptIXDdcfs FMlas+DKxx+qI8JG7FQNsJ0IA8ojkNLWIZLjfMHSuFF1UVUrZTegEz54BkMgPJGemdaG Ms19y3oAixWVFHat57xbbpN1gGe+Lnv2s5kVilWZyXzl6rrobnqPpw40N14913PD4+Ot 5/BkKnHJ6DzfVrNpWX72G7R8nlefv8bZYznlWuepMIT8d/IGZvaRxB/KZ8pZXU119GeT bZyJoVBT4iCCC6XkUOI72iKd5YyLbYj6vzk+uVJtpCVWcr/uGB39G11CaMANuFwbUWbp ct5A== MIME-Version: 1.0 From: Paul Richard Thomas Date: Sun, 26 Aug 2018 15:55:00 -0000 Message-ID: Subject: [Patch, fortran] PRs 80477 and 86481 - memory leaks following function calls. To: "fortran@gcc.gnu.org" , gcc-patches Cc: Janus Weil Content-Type: multipart/mixed; boundary="000000000000a628fa057458a124" X-IsSubscribed: yes X-SW-Source: 2018-08/txt/msg00111.txt.bz2 --000000000000a628fa057458a124 Content-Type: text/plain; charset="UTF-8" Content-length: 2044 This patch grew from the original patch for PR80477 because it was found that the array valued version leaked memory as well. Then, I found that the assignment in class_result_9.f90 ICEd, while trying to fix the array valued test, class_result_8.f90. Finally, while I was about it, I fixed PR86481, which is similar but involves cleaning up of the source expression after allocation. Most of the time was spent on persuading the final calls to appear in the right place. All the tests have been checked with valgrind. Bootstrapped and regtested on FC28/x86_64 - OK for trunk? Cheers Paul 2017-08-26 Paul Thomas PR fortran/80477 * trans-expr.c (gfc_conv_procedure_call): Allocatable class scalar results being passed to a derived type formal argument are finalized if possible. Otherwise, rely on existing code for deallocation. Make the deallocation of allocatable result components conditional on finalization not taking place. Make the freeing of data components after finalization conditional on the data being NULL. (gfc_trans_arrayfunc_assign): Change the gcc_assert to a condition to return NULL_TREE. (gfc_trans_assignment_1): If the assignment is class to class and the rhs expression must be finalized but the assignment is not marked as a polymorphic assignment, use the vptr copy function instead of gfc_trans_scalar_assign. PR fortran/86481 * trans-expr.c (gfc_conv_expr_reference): Do not add the post block to the pre block if the expression is to be finalized. * trans-stmt.c (gfc_trans_allocate): If the expr3 must be finalized, load the post block into a finalization block and add it right at the end of the allocation block. 2017-08-26 Paul Thomas PR fortran/80477 * gfortran.dg/class_result_7.f90: New test. * gfortran.dg/class_result_8.f90: New test. * gfortran.dg/class_result_9.f90: New test. PR fortran/86481 * gfortran.dg/allocate_with_source_25.f90: New test. --000000000000a628fa057458a124 Content-Type: text/x-patch; charset="US-ASCII"; name="submit3.diff" Content-Disposition: attachment; filename="submit3.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_jlb14pvg0 Content-length: 26381 SW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwo9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09CioqKiBnY2MvZm9ydHJhbi90cmFucy1leHByLmMJKHJldmlz aW9uIDI2Mzc5OCkKLS0tIGdjYy9mb3J0cmFuL3RyYW5zLWV4cHIuYwkod29y a2luZyBjb3B5KQoqKioqKioqKioqKioqKiogZ2ZjX2NvbnZfcHJvY2VkdXJl X2NhbGwgKGdmY19zZSAqIHNlLCBnZgoqKiogNDg4Niw0ODkxICoqKioKLS0t IDQ4ODYsNDg5MyAtLS0tCiAgICBmb3IgKGFyZyA9IGFyZ3MsIGFyZ2MgPSAw OyBhcmcgIT0gTlVMTDsKICAgICAgICAgYXJnID0gYXJnLT5uZXh0LCBmb3Jt YWwgPSBmb3JtYWwgPyBmb3JtYWwtPm5leHQgOiBOVUxMLCArK2FyZ2MpCiAg ICAgIHsKKyAgICAgICBib29sIGZpbmFsaXplZCA9IGZhbHNlOworIAogICAg ICAgIGUgPSBhcmctPmV4cHI7CiAgICAgICAgZnN5bSA9IGZvcm1hbCA/IGZv cm1hbC0+c3ltIDogTlVMTDsKICAgICAgICBwYXJtX2tpbmQgPSBNSVNTSU5H OwoqKioqKioqKioqKioqKiogZ2ZjX2NvbnZfcHJvY2VkdXJlX2NhbGwgKGdm Y19zZSAqIHNlLCBnZgoqKiogNTM2MCw1MzY2ICoqKioKICAJCSAgICAgICYm IGUtPnRzLnR5cGUgPT0gQlRfQ0xBU1MKICAJCSAgICAgICYmICFDTEFTU19E QVRBIChlKS0+YXR0ci5kaW1lbnNpb24KICAJCSAgICAgICYmICFDTEFTU19E QVRBIChlKS0+YXR0ci5jb2RpbWVuc2lvbikKISAJCSAgICBwYXJtc2UuZXhw ciA9IGdmY19jbGFzc19kYXRhX2dldCAocGFybXNlLmV4cHIpOwogIAogIAkJ ICAvKiBXcmFwIHNjYWxhciB2YXJpYWJsZSBpbiBhIGRlc2NyaXB0b3IuIFdl IG5lZWQgdG8gY29udmVydAogIAkJICAgICB0aGUgYWRkcmVzcyBvZiBhIHBv aW50ZXIgYmFjayB0byB0aGUgcG9pbnRlciBpdHNlbGYgYmVmb3JlLAotLS0g NTM2Miw1NDAzIC0tLS0KICAJCSAgICAgICYmIGUtPnRzLnR5cGUgPT0gQlRf Q0xBU1MKICAJCSAgICAgICYmICFDTEFTU19EQVRBIChlKS0+YXR0ci5kaW1l bnNpb24KICAJCSAgICAgICYmICFDTEFTU19EQVRBIChlKS0+YXR0ci5jb2Rp bWVuc2lvbikKISAJCSAgICB7CiEgCQkgICAgICBwYXJtc2UuZXhwciA9IGdm Y19jbGFzc19kYXRhX2dldCAocGFybXNlLmV4cHIpOwohIAkJICAgICAgLyog VGhlIHJlc3VsdCBpcyBhIGNsYXNzIHRlbXBvcmFyeSwgd2hvc2UgX2RhdGEg Y29tcG9uZW50CiEgCQkJIG11c3QgYmUgZnJlZWQgdG8gYXZvaWQgYSBtZW1v cnkgbGVhay4gICovCiEgCQkgICAgICBpZiAoZS0+ZXhwcl90eXBlID09IEVY UFJfRlVOQ1RJT04KISAJCQkgICYmIENMQVNTX0RBVEEgKGUpLT5hdHRyLmFs bG9jYXRhYmxlKQohIAkJCXsKISAJCQkgIHRyZWUgemVybzsKISAKISAJCQkg IGdmY19leHByICp2YXI7CiEgCiEgCQkJICAvKiBCb3Jyb3cgdGhlIGZ1bmN0 aW9uIHN5bWJvbCB0byBtYWtlIGEgY2FsbCB0bwohIAkJCSAgICAgZ2ZjX2Fk ZF9maW5hbGl6ZXJfY2FsbCBhbmQgdGhlbiByZXN0b3JlIGl0LiAgKi8KISAJ CQkgIHRtcCA9IGUtPnN5bXRyZWUtPm4uc3ltLT5iYWNrZW5kX2RlY2w7CiEg CQkJICBlLT5zeW10cmVlLT5uLnN5bS0+YmFja2VuZF9kZWNsCiEgCQkJCQk9 IFRSRUVfT1BFUkFORCAocGFybXNlLmV4cHIsIDApOwohIAkJCSAgZS0+c3lt dHJlZS0+bi5zeW0tPmF0dHIuZmxhdm9yID0gRkxfVkFSSUFCTEU7CiEgCQkJ ICB2YXIgPSBnZmNfbHZhbF9leHByX2Zyb21fc3ltIChlLT5zeW10cmVlLT5u LnN5bSk7CiEgCQkJICBmaW5hbGl6ZWQgPSBnZmNfYWRkX2ZpbmFsaXplcl9j YWxsICgmcGFybXNlLnBvc3QsCiEgCQkJCQkJCSAgICAgIHZhcik7CiEgCQkJ ICBnZmNfZnJlZV9leHByICh2YXIpOwohIAkJCSAgZS0+c3ltdHJlZS0+bi5z eW0tPmJhY2tlbmRfZGVjbCA9IHRtcDsKISAJCQkgIGUtPnN5bXRyZWUtPm4u c3ltLT5hdHRyLmZsYXZvciA9IEZMX1BST0NFRFVSRTsKISAKISAJCQkgIC8q IFRoZW4gZnJlZSB0aGUgY2xhc3MgX2RhdGEuICAqLwohIAkJCSAgemVybyA9 IGJ1aWxkX2ludF9jc3QgKFRSRUVfVFlQRSAocGFybXNlLmV4cHIpLCAwKTsK ISAJCQkgIHRtcCA9IGZvbGRfYnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24s IE5FX0VYUFIsCiEgCQkJCQkJIGxvZ2ljYWxfdHlwZV9ub2RlLAohIAkJCQkJ CSBwYXJtc2UuZXhwciwgemVybyk7CiEgCQkJICB0bXAgPSBidWlsZDNfdiAo Q09ORF9FWFBSLCB0bXAsCiEgCQkJCQkgIGdmY19jYWxsX2ZyZWUgKHBhcm1z ZS5leHByKSwKISAJCQkJCSAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9j YXRpb24pKTsKISAJCQkgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnBhcm1z ZS5wb3N0LCB0bXApOwohIAkJCSAgZ2ZjX2FkZF9tb2RpZnkgKCZwYXJtc2Uu cG9zdCwgcGFybXNlLmV4cHIsIHplcm8pOwohIAkJCX0KISAJCSAgICB9CiAg CiAgCQkgIC8qIFdyYXAgc2NhbGFyIHZhcmlhYmxlIGluIGEgZGVzY3JpcHRv ci4gV2UgbmVlZCB0byBjb252ZXJ0CiAgCQkgICAgIHRoZSBhZGRyZXNzIG9m IGEgcG9pbnRlciBiYWNrIHRvIHRoZSBwb2ludGVyIGl0c2VsZiBiZWZvcmUs CioqKioqKioqKioqKioqKiBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2Zj X3NlICogc2UsIGdmCioqKiA1Njg3LDU2OTUgKioqKgogIAkJdG1wID0gYnVp bGRfZm9sZF9pbmRpcmVjdF9yZWZfbG9jIChpbnB1dF9sb2NhdGlvbiwgdG1w KTsKICAJICAgIH0KICAKISAJICB0bXAgPSBnZmNfZGVhbGxvY2F0ZV9hbGxv Y19jb21wIChlLT50cy51LmRlcml2ZWQsIHRtcCwgcGFybV9yYW5rKTsKISAK ISAJICBnZmNfcHJlcGVuZF9leHByX3RvX2Jsb2NrICgmcG9zdCwgdG1wKTsK ICAgICAgICAgIH0KICAKICAgICAgICAvKiBBZGQgYXJndW1lbnQgY2hlY2tp bmcgb2YgcGFzc2luZyBhbiB1bmFsbG9jYXRlZC9OVUxMIGFjdHVhbCB0bwot LS0gNTcyNCw1NzQxIC0tLS0KICAJCXRtcCA9IGJ1aWxkX2ZvbGRfaW5kaXJl Y3RfcmVmX2xvYyAoaW5wdXRfbG9jYXRpb24sIHRtcCk7CiAgCSAgICB9CiAg CiEgCSAgaWYgKCFmaW5hbGl6ZWQgJiYgIWUtPm11c3RfZmluYWxpemUpCiEg CSAgICB7CiEgCSAgICAgIGlmICgoZS0+dHMudHlwZSA9PSBCVF9DTEFTUwoh IAkJICAgJiYgR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFICh0bXApKSkK ISAJCSAgfHwgZS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEKQohIAkJdG1wID0g Z2ZjX2RlYWxsb2NhdGVfYWxsb2NfY29tcCAoZS0+dHMudS5kZXJpdmVkLCB0 bXAsCiEgCQkJCQkJIHBhcm1fcmFuayk7CiEgCSAgICAgIGVsc2UgaWYgKGUt PnRzLnR5cGUgPT0gQlRfQ0xBU1MpCiEgCQl0bXAgPSBnZmNfZGVhbGxvY2F0 ZV9hbGxvY19jb21wIChDTEFTU19EQVRBIChlKS0+dHMudS5kZXJpdmVkLAoh IAkJCQkJCSB0bXAsIHBhcm1fcmFuayk7CiEgCSAgICAgIGdmY19wcmVwZW5k X2V4cHJfdG9fYmxvY2sgKCZwb3N0LCB0bXApOwohIAkgICAgfQogICAgICAg ICAgfQogIAogICAgICAgIC8qIEFkZCBhcmd1bWVudCBjaGVja2luZyBvZiBw YXNzaW5nIGFuIHVuYWxsb2NhdGVkL05VTEwgYWN0dWFsIHRvCioqKioqKioq KioqKioqKiBnZmNfY29udl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2Us IGdmCioqKiA2NDEwLDY0MTYgKioqKgogIAkgIGZpbmFsX2ZuZGVjbCA9IGdm Y19jbGFzc192dGFiX2ZpbmFsX2dldCAoc2UtPmV4cHIpOwogIAkgIGlzX2Zp bmFsID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQ UiwKICAJCQkJICAgICAgbG9naWNhbF90eXBlX25vZGUsCiEgIAkJCSAgICAJ ICAgICAgZmluYWxfZm5kZWNsLAogIAkJCQkgICAgICBmb2xkX2NvbnZlcnQg KFRSRUVfVFlQRSAoZmluYWxfZm5kZWNsKSwKICAJCQkJCSAgIAkgICAgbnVs bF9wb2ludGVyX25vZGUpKTsKICAJICBmaW5hbF9mbmRlY2wgPSBidWlsZF9m b2xkX2luZGlyZWN0X3JlZl9sb2MgKGlucHV0X2xvY2F0aW9uLAotLS0gNjQ1 Niw2NDYyIC0tLS0KICAJICBmaW5hbF9mbmRlY2wgPSBnZmNfY2xhc3NfdnRh Yl9maW5hbF9nZXQgKHNlLT5leHByKTsKICAJICBpc19maW5hbCA9IGZvbGRf YnVpbGQyX2xvYyAoaW5wdXRfbG9jYXRpb24sIE5FX0VYUFIsCiAgCQkJCSAg ICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAohIAkJCQkgICAgICBmaW5hbF9mbmRl Y2wsCiAgCQkJCSAgICAgIGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChmaW5h bF9mbmRlY2wpLAogIAkJCQkJICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkp OwogIAkgIGZpbmFsX2ZuZGVjbCA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVm X2xvYyAoaW5wdXRfbG9jYXRpb24sCioqKioqKioqKioqKioqKiBnZmNfY29u dl9wcm9jZWR1cmVfY2FsbCAoZ2ZjX3NlICogc2UsIGdmCioqKiA2NDIwLDY0 NDcgKioqKgogIAkJCQkgICAgIGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEws IHRtcCksCiAgCQkJCSAgICAgZ2ZjX2NsYXNzX3Z0YWJfc2l6ZV9nZXQgKHNl LT5leHByKSwKICAJCQkJICAgICBib29sZWFuX2ZhbHNlX25vZGUpOwohICAJ ICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9uLCBDT05E X0VYUFIsCiAgCQkJCSB2b2lkX3R5cGVfbm9kZSwgaXNfZmluYWwsIHRtcCwK ICAJCQkJIGJ1aWxkX2VtcHR5X3N0bXQgKGlucHV0X2xvY2F0aW9uKSk7CiAg CiAgCSAgaWYgKHNlLT5zcyAmJiBzZS0+c3MtPmxvb3ApCiAgCSAgICB7CiEg CSAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5zcy0+bG9vcC0+ cG9zdCwgdG1wKTsKISAJICAgICAgdG1wID0gZ2ZjX2NhbGxfZnJlZSAoaW5m by0+ZGF0YSk7CiAgCSAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNl LT5zcy0+bG9vcC0+cG9zdCwgdG1wKTsKICAJICAgIH0KICAJICBlbHNlCiAg CSAgICB7CiEgCSAgICAgIGdmY19hZGRfZXhwcl90b19ibG9jayAoJnNlLT5w b3N0LCB0bXApOwohIAkgICAgICB0bXAgPSBnZmNfY2xhc3NfZGF0YV9nZXQg KHNlLT5leHByKTsKISAJICAgICAgdG1wID0gZ2ZjX2NhbGxfZnJlZSAodG1w KTsKICAJICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmc2UtPnBvc3Qs IHRtcCk7CiAgCSAgICB9Ci0gCi0gbm9fZmluYWxpemF0aW9uOgotIAkgIGV4 cHItPm11c3RfZmluYWxpemUgPSAwOwogIAl9CiAgCiAgICAgICAgZ2ZjX2Fk ZF9ibG9ja190b19ibG9jayAoJnNlLT5wb3N0LCAmcG9zdCk7CiAgICAgIH0K ICAKLS0tIDY0NjYsNjUwOCAtLS0tCiAgCQkJCSAgICAgZ2ZjX2J1aWxkX2Fk ZHJfZXhwciAoTlVMTCwgdG1wKSwKICAJCQkJICAgICBnZmNfY2xhc3NfdnRh Yl9zaXplX2dldCAoc2UtPmV4cHIpLAogIAkJCQkgICAgIGJvb2xlYW5fZmFs c2Vfbm9kZSk7CiEgCSAgdG1wID0gZm9sZF9idWlsZDNfbG9jIChpbnB1dF9s b2NhdGlvbiwgQ09ORF9FWFBSLAogIAkJCQkgdm9pZF90eXBlX25vZGUsIGlz X2ZpbmFsLCB0bXAsCiAgCQkJCSBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9s b2NhdGlvbikpOwogIAogIAkgIGlmIChzZS0+c3MgJiYgc2UtPnNzLT5sb29w KQogIAkgICAgewohIAkgICAgICBnZmNfcHJlcGVuZF9leHByX3RvX2Jsb2Nr ICgmc2UtPnNzLT5sb29wLT5wb3N0LCB0bXApOwohIAkgICAgICB0bXAgPSBm b2xkX2J1aWxkMl9sb2MgKGlucHV0X2xvY2F0aW9uLCBORV9FWFBSLAohIAkJ CQkgICAgIGxvZ2ljYWxfdHlwZV9ub2RlLAohIAkJCQkgICAgIGluZm8tPmRh dGEsCiEgCQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGluZm8t PmRhdGEpLAohIAkJCQkJICAgCSAgICBudWxsX3BvaW50ZXJfbm9kZSkpOwoh IAkgICAgICB0bXAgPSBmb2xkX2J1aWxkM19sb2MgKGlucHV0X2xvY2F0aW9u LCBDT05EX0VYUFIsCiEgCQkJCSAgICAgdm9pZF90eXBlX25vZGUsIHRtcCwK ISAJCQkJICAgICBnZmNfY2FsbF9mcmVlIChpbmZvLT5kYXRhKSwKISAJCQkJ ICAgICBidWlsZF9lbXB0eV9zdG10IChpbnB1dF9sb2NhdGlvbikpOwogIAkg ICAgICBnZmNfYWRkX2V4cHJfdG9fYmxvY2sgKCZzZS0+c3MtPmxvb3AtPnBv c3QsIHRtcCk7CiAgCSAgICB9CiAgCSAgZWxzZQogIAkgICAgewohIAkgICAg ICB0cmVlIGNsYXNzZGF0YTsKISAJICAgICAgZ2ZjX3ByZXBlbmRfZXhwcl90 b19ibG9jayAoJnNlLT5wb3N0LCB0bXApOwohIAkgICAgICBjbGFzc2RhdGEg PSBnZmNfY2xhc3NfZGF0YV9nZXQgKHNlLT5leHByKTsKISAJICAgICAgdG1w ID0gZm9sZF9idWlsZDJfbG9jIChpbnB1dF9sb2NhdGlvbiwgTkVfRVhQUiwK ISAJCQkJICAgICBsb2dpY2FsX3R5cGVfbm9kZSwKISAJCQkJICAgICBjbGFz c2RhdGEsCiEgCQkJCSAgICAgZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGNs YXNzZGF0YSksCiEgCQkJCQkgICAJICAgIG51bGxfcG9pbnRlcl9ub2RlKSk7 CiEgCSAgICAgIHRtcCA9IGZvbGRfYnVpbGQzX2xvYyAoaW5wdXRfbG9jYXRp b24sIENPTkRfRVhQUiwKISAJCQkJICAgICB2b2lkX3R5cGVfbm9kZSwgdG1w LAohIAkJCQkgICAgIGdmY19jYWxsX2ZyZWUgKGNsYXNzZGF0YSksCiEgCQkJ CSAgICAgYnVpbGRfZW1wdHlfc3RtdCAoaW5wdXRfbG9jYXRpb24pKTsKICAJ ICAgICAgZ2ZjX2FkZF9leHByX3RvX2Jsb2NrICgmc2UtPnBvc3QsIHRtcCk7 CiAgCSAgICB9CiAgCX0KICAKKyBub19maW5hbGl6YXRpb246CiAgICAgICAg Z2ZjX2FkZF9ibG9ja190b19ibG9jayAoJnNlLT5wb3N0LCAmcG9zdCk7CiAg ICAgIH0KICAKKioqKioqKioqKioqKioqIGdmY19jb252X2V4cHJfcmVmZXJl bmNlIChnZmNfc2UgKiBzZSwgZ2YKKioqIDgwNzIsODA3OCAqKioqCiAgICAg ICAgdmFyID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVfVFlQRSAoc2UtPmV4cHIp LCBOVUxMKTsKICAgICAgICBnZmNfYWRkX21vZGlmeSAoJnNlLT5wcmUsIHZh ciwgc2UtPmV4cHIpOwogICAgICB9CiEgICBnZmNfYWRkX2Jsb2NrX3RvX2Js b2NrICgmc2UtPnByZSwgJnNlLT5wb3N0KTsKICAKICAgIC8qIFRha2UgdGhl IGFkZHJlc3Mgb2YgdGhhdCB2YWx1ZS4gICovCiAgICBzZS0+ZXhwciA9IGdm Y19idWlsZF9hZGRyX2V4cHIgKE5VTExfVFJFRSwgdmFyKTsKLS0tIDgxMzMs ODE0MSAtLS0tCiAgICAgICAgdmFyID0gZ2ZjX2NyZWF0ZV92YXIgKFRSRUVf VFlQRSAoc2UtPmV4cHIpLCBOVUxMKTsKICAgICAgICBnZmNfYWRkX21vZGlm eSAoJnNlLT5wcmUsIHZhciwgc2UtPmV4cHIpOwogICAgICB9CiEgCiEgICBp ZiAoIWV4cHItPm11c3RfZmluYWxpemUpCiEgICAgIGdmY19hZGRfYmxvY2tf dG9fYmxvY2sgKCZzZS0+cHJlLCAmc2UtPnBvc3QpOwogIAogICAgLyogVGFr ZSB0aGUgYWRkcmVzcyBvZiB0aGF0IHZhbHVlLiAgKi8KICAgIHNlLT5leHBy ID0gZ2ZjX2J1aWxkX2FkZHJfZXhwciAoTlVMTF9UUkVFLCB2YXIpOwoqKioq KioqKioqKioqKiogZ2ZjX3RyYW5zX2FycmF5ZnVuY19hc3NpZ24gKGdmY19l eHByICogZQoqKiogOTI2Miw5MjcxICoqKioKICAgIC8qIFRoZSBmcm9udGVu ZCBkb2Vzbid0IHNlZW0gdG8gYm90aGVyIGZpbGxpbmcgaW4gZXhwci0+c3lt dHJlZSBmb3IgaW50cmluc2ljCiAgICAgICBmdW5jdGlvbnMuICAqLwogICAg Y29tcCA9IGdmY19nZXRfcHJvY19wdHJfY29tcCAoZXhwcjIpOwohICAgZ2Nj X2Fzc2VydCAoZXhwcjItPnZhbHVlLmZ1bmN0aW9uLmlzeW0KICAJICAgICAg fHwgKGNvbXAgJiYgY29tcC0+YXR0ci5kaW1lbnNpb24pCiAgCSAgICAgIHx8 ICghY29tcCAmJiBnZmNfcmV0dXJuX2J5X3JlZmVyZW5jZSAoZXhwcjItPnZh bHVlLmZ1bmN0aW9uLmVzeW0pCiEgCQkgICYmIGV4cHIyLT52YWx1ZS5mdW5j dGlvbi5lc3ltLT5yZXN1bHQtPmF0dHIuZGltZW5zaW9uKSk7CiAgCiAgICBn ZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKICAgIGdmY19zdGFydF9ibG9jayAo JnNlLnByZSk7Ci0tLSA5MzI1LDkzMzYgLS0tLQogICAgLyogVGhlIGZyb250 ZW5kIGRvZXNuJ3Qgc2VlbSB0byBib3RoZXIgZmlsbGluZyBpbiBleHByLT5z eW10cmVlIGZvciBpbnRyaW5zaWMKICAgICAgIGZ1bmN0aW9ucy4gICovCiAg ICBjb21wID0gZ2ZjX2dldF9wcm9jX3B0cl9jb21wIChleHByMik7CiEgCiEg ICBpZiAoIShleHByMi0+dmFsdWUuZnVuY3Rpb24uaXN5bQogIAkgICAgICB8 fCAoY29tcCAmJiBjb21wLT5hdHRyLmRpbWVuc2lvbikKICAJICAgICAgfHwg KCFjb21wICYmIGdmY19yZXR1cm5fYnlfcmVmZXJlbmNlIChleHByMi0+dmFs dWUuZnVuY3Rpb24uZXN5bSkKISAJCSAgJiYgZXhwcjItPnZhbHVlLmZ1bmN0 aW9uLmVzeW0tPnJlc3VsdC0+YXR0ci5kaW1lbnNpb24pKSkKISAgICAgcmV0 dXJuIE5VTEw7CiAgCiAgICBnZmNfaW5pdF9zZSAoJnNlLCBOVUxMKTsKICAg IGdmY19zdGFydF9ibG9jayAoJnNlLnByZSk7CioqKioqKioqKioqKioqKiBn ZmNfdHJhbnNfYXNzaWdubWVudF8xIChnZmNfZXhwciAqIGV4cHIxCioqKiAx MDIzOCwxMDI0MyAqKioqCi0tLSAxMDMwMywxMDMxMCAtLS0tCiAgCWdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZsb29wLnBvc3QsICZyc2UucG9zdCk7CiAg ICAgIH0KICAKKyAgIHRtcCA9IE5VTExfVFJFRTsKKyAKICAgIGlmIChpc19w b2x5X2Fzc2lnbikKICAgICAgdG1wID0gdHJhbnNfY2xhc3NfYXNzaWdubWVu dCAoJmJvZHksIGV4cHIxLCBleHByMiwgJmxzZSwgJnJzZSwKICAJCQkJICB1 c2VfdnB0cl9jb3B5IHx8IChsaHNfYXR0ci5hbGxvY2F0YWJsZQoqKioqKioq KioqKioqKiogZ2ZjX3RyYW5zX2Fzc2lnbm1lbnRfMSAoZ2ZjX2V4cHIgKiBl eHByMQoqKiogMTAyNjYsMTAyNzggKioqKgogICAgICAgIGNvZGUucmVzb2x2 ZWRfaXN5bSA9IGdmY19pbnRyaW5zaWNfc3Vicm91dGluZV9ieV9pZCAoR0ZD X0lTWU1fQ0FGX1NFTkQpOwogICAgICAgIHRtcCA9IGdmY19jb252X2ludHJp bnNpY19zdWJyb3V0aW5lICgmY29kZSk7CiAgICAgIH0KISAgIGVsc2UKICAg ICAgdG1wID0gZ2ZjX3RyYW5zX3NjYWxhcl9hc3NpZ24gKCZsc2UsICZyc2Us IGV4cHIxLT50cywKICAJCQkJICAgZ2ZjX2V4cHJfaXNfdmFyaWFibGUgKGV4 cHIyKQogIAkJCQkgICB8fCBzY2FsYXJfdG9fYXJyYXkKICAJCQkJICAgfHwg ZXhwcjItPmV4cHJfdHlwZSA9PSBFWFBSX0FSUkFZLAogIAkJCQkgICAhKGxf aXNfdGVtcCB8fCBpbml0X2ZsYWcpICYmIGRlYWxsb2MsCiAgCQkJCSAgIGV4 cHIxLT5zeW10cmVlLT5uLnN5bS0+YXR0ci5jb2RpbWVuc2lvbik7CiAgICAv KiBBZGQgdGhlIHByZSBibG9ja3MgdG8gdGhlIGJvZHkuICAqLwogICAgZ2Zj X2FkZF9ibG9ja190b19ibG9jayAoJmJvZHksICZyc2UucHJlKTsKICAgIGdm Y19hZGRfYmxvY2tfdG9fYmxvY2sgKCZib2R5LCAmbHNlLnByZSk7Ci0tLSAx MDMzMywxMDM2NyAtLS0tCiAgICAgICAgY29kZS5yZXNvbHZlZF9pc3ltID0g Z2ZjX2ludHJpbnNpY19zdWJyb3V0aW5lX2J5X2lkIChHRkNfSVNZTV9DQUZf U0VORCk7CiAgICAgICAgdG1wID0gZ2ZjX2NvbnZfaW50cmluc2ljX3N1YnJv dXRpbmUgKCZjb2RlKTsKICAgICAgfQohICAgZWxzZSBpZiAoIWlzX3BvbHlf YXNzaWduICYmIGV4cHIyLT5tdXN0X2ZpbmFsaXplCiEgCSAgICYmIGV4cHIx LT50cy50eXBlID09IEJUX0NMQVNTCiEgCSAgICYmIGV4cHIyLT50cy50eXBl ID09IEJUX0NMQVNTKQohICAgICB7CiEgICAgICAgLyogVGhpcyBjYXNlIGNv bWVzIGFib3V0IHdoZW4gdGhlIHNjYWxhcml6ZXIgcHJvdmlkZXMgYXJyYXkg ZWxlbWVudAohIAkgcmVmZXJlbmNlcy4gVXNlIHRoZSB2cHRyIGNvcHkgZnVu Y3Rpb24sIHNpbmNlIHRoaXMgZG9lcyBhIGRlZXAKISAJIGNvcHkgb2YgYWxs b2NhdGFibGUgY29tcG9uZW50cywgd2l0aG91dCB3aGljaCB0aGUgZmluYWxp emVyIGNhbGwgKi8KISAgICAgICB0bXAgPSBnZmNfZ2V0X3ZwdHJfZnJvbV9l eHByIChyc2UuZXhwcik7CiEgICAgICAgaWYgKHRtcCAhPSBOVUxMX1RSRUUp CiEgCXsKISAJICB0cmVlIGZjbiA9IGdmY192cHRyX2NvcHlfZ2V0ICh0bXAp OwohIAkgIGlmIChQT0lOVEVSX1RZUEVfUCAoVFJFRV9UWVBFIChmY24pKSkK ISAJICAgIGZjbiA9IGJ1aWxkX2ZvbGRfaW5kaXJlY3RfcmVmX2xvYyAoaW5w dXRfbG9jYXRpb24sIGZjbik7CiEgCSAgdG1wID0gYnVpbGRfY2FsbF9leHBy X2xvYyAoaW5wdXRfbG9jYXRpb24sCiEgCQkJCSAgICAgZmNuLCAyLAohIAkJ CQkgICAgIGdmY19idWlsZF9hZGRyX2V4cHIgKE5VTEwsIHJzZS5leHByKSwK ISAJCQkJICAgICBnZmNfYnVpbGRfYWRkcl9leHByIChOVUxMLCBsc2UuZXhw cikpOwohIAl9CiEgICAgIH0KISAKISAgIC8qIElmIG5vdGhpbmcgZWxzZSB3 b3JrcywgZG8gaXQgdGhlIG9sZCBmYXNoaW9uZWQgd2F5ISAgKi8KISAgIGlm ICh0bXAgPT0gTlVMTF9UUkVFKQogICAgICB0bXAgPSBnZmNfdHJhbnNfc2Nh bGFyX2Fzc2lnbiAoJmxzZSwgJnJzZSwgZXhwcjEtPnRzLAogIAkJCQkgICBn ZmNfZXhwcl9pc192YXJpYWJsZSAoZXhwcjIpCiAgCQkJCSAgIHx8IHNjYWxh cl90b19hcnJheQogIAkJCQkgICB8fCBleHByMi0+ZXhwcl90eXBlID09IEVY UFJfQVJSQVksCiAgCQkJCSAgICEobF9pc190ZW1wIHx8IGluaXRfZmxhZykg JiYgZGVhbGxvYywKICAJCQkJICAgZXhwcjEtPnN5bXRyZWUtPm4uc3ltLT5h dHRyLmNvZGltZW5zaW9uKTsKKyAKICAgIC8qIEFkZCB0aGUgcHJlIGJsb2Nr cyB0byB0aGUgYm9keS4gICovCiAgICBnZmNfYWRkX2Jsb2NrX3RvX2Jsb2Nr ICgmYm9keSwgJnJzZS5wcmUpOwogICAgZ2ZjX2FkZF9ibG9ja190b19ibG9j ayAoJmJvZHksICZsc2UucHJlKTsKSW5kZXg6IGdjYy9mb3J0cmFuL3RyYW5z LXN0bXQuYwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2MvZm9ydHJh bi90cmFucy1zdG10LmMJKHJldmlzaW9uIDI2Mzc5OCkKLS0tIGdjYy9mb3J0 cmFuL3RyYW5zLXN0bXQuYwkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioq KiogZ2ZjX3RyYW5zX2FsbG9jYXRlIChnZmNfY29kZSAqIGNvZGUpCioqKiA1 NzgzLDU3ODggKioqKgotLS0gNTc4Myw1Nzg5IC0tLS0KICAgIGVudW0geyBF M19VTlNFVCA9IDAsIEUzX1NPVVJDRSwgRTNfTU9MRCwgRTNfREVTQyB9IGUz X2lzOwogICAgc3RtdGJsb2NrX3QgYmxvY2s7CiAgICBzdG10YmxvY2tfdCBw b3N0OworICAgc3RtdGJsb2NrX3QgZmluYWxfYmxvY2s7CiAgICB0cmVlIG5l bGVtczsKICAgIGJvb2wgdXBvbHlfZXhwciwgdG1wX2V4cHIzX2xlbl9mbGFn ID0gZmFsc2UsIGFsX2xlbl9uZWVkc19zZXQsIGlzX2NvYXJyYXk7CiAgICBi b29sIG5lZWRzX2NhZl9zeW5jLCBjYWZfcmVmc19jb21wOwoqKioqKioqKioq KioqKiogZ2ZjX3RyYW5zX2FsbG9jYXRlIChnZmNfY29kZSAqIGNvZGUpCioq KiA1ODAxLDU4MDYgKioqKgotLS0gNTgwMiw1ODA4IC0tLS0KICAKICAgIGdm Y19pbml0X2Jsb2NrICgmYmxvY2spOwogICAgZ2ZjX2luaXRfYmxvY2sgKCZw b3N0KTsKKyAgIGdmY19pbml0X2Jsb2NrICgmZmluYWxfYmxvY2spOwogIAog ICAgLyogU1RBVD0gKGFuZCBtYXliZSBFUlJNU0c9KSBpcyBwcmVzZW50LiAg Ki8KICAgIGlmIChjb2RlLT5leHByMSkKKioqKioqKioqKioqKioqIGdmY190 cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBjb2RlKQoqKiogNTg0Miw1ODQ3 ICoqKioKLS0tIDU4NDQsNTg1NCAtLS0tCiAgCiAgICAgICAgaXNfY29hcnJh eSA9IGdmY19pc19jb2FycmF5IChjb2RlLT5leHByMyk7CiAgCisgICAgICAg aWYgKGNvZGUtPmV4cHIzLT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTiAm JiAhY29kZS0+ZXhwcjMtPm1vbGQKKyAJICAmJiAoZ2ZjX2lzX2NsYXNzX2Fy cmF5X2Z1bmN0aW9uIChjb2RlLT5leHByMykKKyAJICAgICAgfHwgZ2ZjX2lz X2FsbG9jX2NsYXNzX3NjYWxhcl9mdW5jdGlvbiAoY29kZS0+ZXhwcjMpKSkK KyAJY29kZS0+ZXhwcjMtPm11c3RfZmluYWxpemUgPSAxOworIAogICAgICAg IC8qIEZpZ3VyZSB3aGV0aGVyIHdlIG5lZWQgdGhlIHZ0YWIgZnJvbSBleHBy My4gICovCiAgICAgICAgZm9yIChhbCA9IGNvZGUtPmV4dC5hbGxvYy5saXN0 OyAhdnRhYl9uZWVkZWQgJiYgYWwgIT0gTlVMTDsKICAJICAgYWwgPSBhbC0+ bmV4dCkKKioqKioqKioqKioqKioqIGdmY190cmFuc19hbGxvY2F0ZSAoZ2Zj X2NvZGUgKiBjb2RlKQoqKiogNTkxNCw1OTIwICoqKioKICAJICB0ZW1wX29i al9jcmVhdGVkID0gdGVtcF92YXJfbmVlZGVkID0gIVZBUl9QIChzZS5leHBy KTsKICAJfQogICAgICAgIGdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9j aywgJnNlLnByZSk7CiEgICAgICAgZ2ZjX2FkZF9ibG9ja190b19ibG9jayAo JnBvc3QsICZzZS5wb3N0KTsKICAKICAgICAgICAvKiBTcGVjaWFsIGNhc2Ug d2hlbiBzdHJpbmcgaW4gZXhwcjMgaXMgemVyby4gICovCiAgICAgICAgaWYg KGNvZGUtPmV4cHIzLT50cy50eXBlID09IEJUX0NIQVJBQ1RFUgotLS0gNTky MSw1OTMwIC0tLS0KICAJICB0ZW1wX29ial9jcmVhdGVkID0gdGVtcF92YXJf bmVlZGVkID0gIVZBUl9QIChzZS5leHByKTsKICAJfQogICAgICAgIGdmY19h ZGRfYmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnNlLnByZSk7CiEgICAgICAg aWYgKGNvZGUtPmV4cHIzLT5tdXN0X2ZpbmFsaXplKQohIAlnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmZmluYWxfYmxvY2ssICZzZS5wb3N0KTsKISAgICAg ICBlbHNlCiEgCWdmY19hZGRfYmxvY2tfdG9fYmxvY2sgKCZwb3N0LCAmc2Uu cG9zdCk7CiAgCiAgICAgICAgLyogU3BlY2lhbCBjYXNlIHdoZW4gc3RyaW5n IGluIGV4cHIzIGlzIHplcm8uICAqLwogICAgICAgIGlmIChjb2RlLT5leHBy My0+dHMudHlwZSA9PSBCVF9DSEFSQUNURVIKKioqKioqKioqKioqKioqIGdm Y190cmFuc19hbGxvY2F0ZSAoZ2ZjX2NvZGUgKiBjb2RlKQoqKiogNjc0Myw2 NzQ4ICoqKioKLS0tIDY3NTMsNjc2MCAtLS0tCiAgCiAgICBnZmNfYWRkX2Js b2NrX3RvX2Jsb2NrICgmYmxvY2ssICZzZS5wb3N0KTsKICAgIGdmY19hZGRf YmxvY2tfdG9fYmxvY2sgKCZibG9jaywgJnBvc3QpOworICAgaWYgKGNvZGUt PmV4cHIzICYmIGNvZGUtPmV4cHIzLT5tdXN0X2ZpbmFsaXplKQorICAgICBn ZmNfYWRkX2Jsb2NrX3RvX2Jsb2NrICgmYmxvY2ssICZmaW5hbF9ibG9jayk7 CiAgCiAgICByZXR1cm4gZ2ZjX2ZpbmlzaF9ibG9jayAoJmJsb2NrKTsKICB9 CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dp dGhfc291cmNlXzI1LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBn Y2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNl XzI1LmY5MAkobm9uZXhpc3RlbnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0 cmFuLmRnL2FsbG9jYXRlX3dpdGhfc291cmNlXzI1LmY5MAkod29ya2luZyBj b3B5KQoqKioqKioqKioqKioqKioKKioqIDAgKioqKgotLS0gMSw3MSAtLS0t CisgISB7IGRnLWRvIGNvbXBpbGUgfQorICEgeyBkZy1vcHRpb25zICItZmR1 bXAtdHJlZS1vcmlnaW5hbCIgfQorICEKKyAhICBUZXN0IHRoZSBmaXggZm9y IFBSODY0ODEKKyAhCisgISBDb250cmlidXRlZCBieSBSaWNoIFRvd25zZW5k ICA8dG93bnNlbmRAYXN0cm8ud2lzYy5lZHU+CisgIQorIHByb2dyYW0gc2lt cGxlX2xlYWsKKyAKKyAgIGltcGxpY2l0IG5vbmUKKyAKKyAgIHR5cGUsIGFi c3RyYWN0IDo6IGZvb190CisgICBlbmQgdHlwZSBmb29fdAorIAorICAgdHlw ZSwgZXh0ZW5kcyhmb29fdCkgOjogZm9vX2FfdAorICAgICAgcmVhbCg4KSwg YWxsb2NhdGFibGUgOjogYSg6KQorICAgZW5kIHR5cGUgZm9vX2FfdAorIAor ICAgdHlwZSwgZXh0ZW5kcyhmb29fdCkgOjogIGJhcl90CisgICAgICBjbGFz cyhmb29fdCksIGFsbG9jYXRhYmxlIDo6IGYKKyAgIGVuZCB0eXBlIGJhcl90 CisgCisgICBpbnRlZ2VyLCBwYXJhbWV0ZXIgOjogTiA9IDIKKyAgIGludGVn ZXIsIHBhcmFtZXRlciA6OiBEID0gMworIAorICAgdHlwZShiYXJfdCkgOjog YihOKQorICAgaW50ZWdlciAgICAgOjogaQorIAorICAgZG8gaSA9IDEsIE4K KyAgICAgIGIoaSkgPSBmdW5jX2JhcihEKQorICAgZW5kIGRvCisgCisgICBk byBpID0gMSwgTgorICAgICAgZGVhbGxvY2F0ZSAoYihpKSVmKQorICAgZW5k IGRvCisgCisgY29udGFpbnMKKyAKKyAgIGZ1bmN0aW9uIGZ1bmNfYmFyIChE KSByZXN1bHQgKGIpCisgCisgICAgIGludGVnZXIsIGludGVudChpbikgOjog RAorICAgICB0eXBlKGJhcl90KSAgICAgICAgIDo6IGIKKyAKKyAgICAgYWxs b2NhdGUoYiVmLCBTT1VSQ0U9ZnVuY19mb28oRCkpCisgCisgICBlbmQgZnVu Y3Rpb24gZnVuY19iYXIKKyAKKyAgICEqKioqCisgCisgICBmdW5jdGlvbiBm dW5jX2ZvbyAoRCkgcmVzdWx0IChmKQorIAorICAgICBpbnRlZ2VyLCBpbnRl bnQoaW4pICAgICAgIDo6IEQKKyAgICAgY2xhc3MoZm9vX3QpLCBhbGxvY2F0 YWJsZSA6OiBmCisgCisgICAgIGFsbG9jYXRlKGYsIFNPVVJDRT1mdW5jX2Zv b19hKEQpKSAhIExvc2Ugb25lIG9mIHRoZXNlIGZvciBlYWNoIGFsbG9jYXRp b24KKyAKKyAgIGVuZCBmdW5jdGlvbiBmdW5jX2ZvbworIAorICAgISoqKioK KyAKKyAgIGZ1bmN0aW9uIGZ1bmNfZm9vX2EgKEQpIHJlc3VsdCAoZikKKyAK KyAgICAgaW50ZWdlciwgaW50ZW50KGluKSA6OiBECisgICAgIHR5cGUoZm9v X2FfdCkgICAgICAgOjogZgorIAorICAgICBhbGxvY2F0ZShmJWEoRCkpICAh IExvc2Ugb25lIG9mIHRoZXNlIGZvciBlYWNoIGFsbG9jYXRpb24gPT4gTipE KmVsZW1fc2l6ZShmJWEpCisgCisgICBlbmQgZnVuY3Rpb24gZnVuY19mb29f YQorIAorIGVuZCBwcm9ncmFtIHNpbXBsZV9sZWFrCisgISB7IGRnLWZpbmFs IHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIlw+X2ZpbmFsIiA2ICJvcmlnaW5h bCIgfSB9CkluZGV4OiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NsYXNz X3Jlc3VsdF83LmY5MAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CioqKiBnY2Mv dGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NsYXNzX3Jlc3VsdF83LmY5MAkobm9u ZXhpc3RlbnQpCi0tLSBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2NsYXNz X3Jlc3VsdF83LmY5MAkod29ya2luZyBjb3B5KQoqKioqKioqKioqKioqKioK KioqIDAgKioqKgotLS0gMSwzNiAtLS0tCisgISB7IGRnLWRvIGNvbXBpbGUg fQorICEgeyBkZy1vcHRpb25zICItZmR1bXAtdHJlZS1vcmlnaW5hbCIgfQor ICEKKyAhICBUZXN0IHRoZSBmaXggZm9yIFBSODA0NzcKKyAhCisgISBDb250 cmlidXRlZCBieSBTdGVmYW5vIFphZ2hpICA8c3RlZmFuby56YWdoaUBjbnIu aXQ+CisgIQorIG1vZHVsZSBhX3R5cGVfbQorICAgIGltcGxpY2l0IG5vbmUK KyAgICB0eXBlIDo6IGFfdHlwZV90CisgICAgICAgcmVhbCA6OiB4CisgICAg ZW5kdHlwZQorIGNvbnRhaW5zCisgICAgc3Vicm91dGluZSBhc3NpZ25fYV90 eXBlKGxocywgcmhzKQorICAgICAgIHR5cGUoYV90eXBlX3QpLCBpbnRlbnQo aW5vdXQpIDo6IGxocworICAgICAgIHR5cGUoYV90eXBlX3QpLCBpbnRlbnQo aW4pICAgIDo6IHJocworICAgICAgIGxocyV4ID0gcmhzJXgKKyAgICBlbmQg c3Vicm91dGluZQorIAorICAgIGZ1bmN0aW9uIGFkZF9hX3R5cGUobGhzLCBy aHMpIHJlc3VsdCggcmVzICkKKyAgICAgICB0eXBlKGFfdHlwZV90KSwgaW50 ZW50KGluKSAgOjogbGhzCisgICAgICAgdHlwZShhX3R5cGVfdCksIGludGVu dChpbikgIDo6IHJocworICAgICAgIGNsYXNzKGFfdHlwZV90KSwgYWxsb2Nh dGFibGUgOjogcmVzCisgICAgICAgYWxsb2NhdGUgKGFfdHlwZV90IDo6IHJl cykKKyAgICAgICByZXMleCA9IGxocyV4ICsgcmhzJXgKKyAgICBlbmQgZnVu Y3Rpb24KKyBlbmQgbW9kdWxlCisgCisgcHJvZ3JhbSBwb2x5bW9ycGhpY19v cGVyYXRvcnNfbWVtb3J5X2xlYWtzCisgICAgdXNlIGFfdHlwZV9tCisgICAg aW1wbGljaXQgbm9uZQorICAgIHR5cGUoYV90eXBlX3QpIDo6IGEgPSBhX3R5 cGVfdCgxKSAsIGIgPSBhX3R5cGVfdCgyKQorICAgIGNhbGwgYXNzaWduX2Ff dHlwZSAoYSwgYWRkX2FfdHlwZShhLGIpKSAgICAgICAgICAgICAgISBnZW5l cmF0ZWQgYSBtZW1vcnkgbGVhaworIGVuZAorICEgeyBkZy1maW5hbCB7IHNj YW4tdHJlZS1kdW1wLXRpbWVzICJidWlsdGluX2ZyZWUiIDEgIm9yaWdpbmFs IiB9IH0KKyAhIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAi YnVpbHRpbl9tYWxsb2MiIDEgIm9yaWdpbmFsIiB9IH0KSW5kZXg6IGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2xhc3NfcmVzdWx0XzguZjkwCj09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4u ZGcvY2xhc3NfcmVzdWx0XzguZjkwCShub25leGlzdGVudCkKLS0tIGdjYy90 ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2xhc3NfcmVzdWx0XzguZjkwCSh3b3Jr aW5nIGNvcHkpCioqKioqKioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDQx IC0tLS0KKyAhIHsgZGctZG8gY29tcGlsZSB9CisgISB7IGRnLW9wdGlvbnMg Ii1mZHVtcC10cmVlLW9yaWdpbmFsIiB9CisgIQorICEgIFRlc3QgdGhlIGZp eCBmb3IgdGhlIGFycmF5IHZlcnNpb24gb2YgUFI4MDQ3NworICEKKyAhIENv bnRyaWJ1dGVkIGJ5IFN0ZWZhbm8gWmFnaGkgIDxzdGVmYW5vLnphZ2hpQGNu ci5pdD4KKyAhCisgbW9kdWxlIGFfdHlwZV9tCisgICAgaW1wbGljaXQgbm9u ZQorICAgIHR5cGUgOjogYV90eXBlX3QKKyAgICAgICByZWFsIDo6IHgKKyAg ICAgICByZWFsLCBhbGxvY2F0YWJsZSA6OiB5KDopCisgICAgZW5kdHlwZQor IGNvbnRhaW5zCisgICAgc3Vicm91dGluZSBhc3NpZ25fYV90eXBlKGxocywg cmhzKQorICAgICAgIHR5cGUoYV90eXBlX3QpLCBpbnRlbnQoaW5vdXQpIDo6 IGxocworICAgICAgIHR5cGUoYV90eXBlX3QpLCBpbnRlbnQoaW4pICAgIDo6 IHJocyg6KQorICAgICAgIGxocyV4ID0gcmhzKDEpJXggKyByaHMoMikleAor ICAgIGVuZCBzdWJyb3V0aW5lCisgCisgICAgZnVuY3Rpb24gYWRkX2FfdHlw ZShsaHMsIHJocykgcmVzdWx0KCByZXMgKQorICAgICAgIHR5cGUoYV90eXBl X3QpLCBpbnRlbnQoaW4pICA6OiBsaHMKKyAgICAgICB0eXBlKGFfdHlwZV90 KSwgaW50ZW50KGluKSAgOjogcmhzCisgICAgICAgY2xhc3MoYV90eXBlX3Qp LCBhbGxvY2F0YWJsZSA6OiByZXMoOikKKyAgICAgICBhbGxvY2F0ZSAoYV90 eXBlX3QgOjogcmVzKDIpKQorICAgICAgIGFsbG9jYXRlIChyZXMoMSkleSgx KSkKKyAgICAgICBhbGxvY2F0ZSAocmVzKDIpJXkoMSkpCisgICAgICAgcmVz KDEpJXggPSBsaHMleAorICAgICAgIHJlcygyKSV4ID0gcmhzJXgKKyAgICBl bmQgZnVuY3Rpb24KKyBlbmQgbW9kdWxlCisgCisgcHJvZ3JhbSBwb2x5bW9y cGhpY19vcGVyYXRvcnNfbWVtb3J5X2xlYWtzCisgICAgdXNlIGFfdHlwZV9t CisgICAgaW1wbGljaXQgbm9uZQorICAgIHR5cGUoYV90eXBlX3QpIDo6IGEg PSBhX3R5cGVfdCgxKSAsIGIgPSBhX3R5cGVfdCgyKQorICAgIGNhbGwgYXNz aWduX2FfdHlwZSAoYSwgYWRkX2FfdHlwZShhLGIpKQorICAgIHByaW50ICos IGEleAorIGVuZAorICEgeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wLXRp bWVzICJidWlsdGluX2ZyZWUiIDYgIm9yaWdpbmFsIiB9IH0KKyAhIHsgZGct ZmluYWwgeyBzY2FuLXRyZWUtZHVtcC10aW1lcyAiYnVpbHRpbl9tYWxsb2Mi IDcgIm9yaWdpbmFsIiB9IH0KSW5kZXg6IGdjYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvY2xhc3NfcmVzdWx0XzkuZjkwCj09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT0KKioqIGdjYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvY2xhc3NfcmVzdWx0 XzkuZjkwCShub25leGlzdGVudCkKLS0tIGdjYy90ZXN0c3VpdGUvZ2ZvcnRy YW4uZGcvY2xhc3NfcmVzdWx0XzkuZjkwCSh3b3JraW5nIGNvcHkpCioqKioq KioqKioqKioqKgoqKiogMCAqKioqCi0tLSAxLDQ1IC0tLS0KKyAhIHsgZGct ZG8gcnVuIH0KKyAhCisgISAgVGVzdCB0aGUgZml4IGZvciBhbiBhZGRpdGlv bmFsIGJ1ZyBmb3VuZCB3aGlsZSBmaXhpbmcgUFI4MDQ3NworICEKKyAhIENv bnRyaWJ1dGVkIGJ5IFBhdWwgVGhvbWFzICA8cGF1bHRAZ2NjLmdudS5vcmc+ CisgIQorIG1vZHVsZSBhX3R5cGVfbQorICAgIGltcGxpY2l0IG5vbmUKKyAg ICB0eXBlIDo6IGFfdHlwZV90CisgICAgICAgcmVhbCA6OiB4CisgICAgICAg cmVhbCwgYWxsb2NhdGFibGUgOjogeSg6KQorICAgIGVuZHR5cGUKKyBjb250 YWlucworICAgIHN1YnJvdXRpbmUgYXNzaWduX2FfdHlwZShsaHMsIHJocykK KyAgICAgICB0eXBlKGFfdHlwZV90KSwgaW50ZW50KGlub3V0KSA6OiBsaHMK KyAgICAgICB0eXBlKGFfdHlwZV90KSwgaW50ZW50KGluKSAgICA6OiByaHMo OikKKyAgICAgICBsaHMleCA9IHJocygxKSV4ICsgcmhzKDIpJXgKKyAgICAg ICBsaHMleSA9IHJocygxKSV5ICsgcmhzKDIpJXkKKyAgICBlbmQgc3Vicm91 dGluZQorIAorICAgIGZ1bmN0aW9uIGFkZF9hX3R5cGUobGhzLCByaHMpIHJl c3VsdCggcmVzICkKKyAgICAgICB0eXBlKGFfdHlwZV90KSwgaW50ZW50KGlu KSAgOjogbGhzCisgICAgICAgdHlwZShhX3R5cGVfdCksIGludGVudChpbikg IDo6IHJocworICAgICAgIGNsYXNzKGFfdHlwZV90KSwgYWxsb2NhdGFibGUg OjogcmVzKDopCisgICAgICAgYWxsb2NhdGUgKGFfdHlwZV90IDo6IHJlcygy KSkKKyAgICAgICBhbGxvY2F0ZSAocmVzKDEpJXkoMSksIHNvdXJjZSA9IFsx MC4wXSkKKyAgICAgICBhbGxvY2F0ZSAocmVzKDIpJXkoMSksIHNvdXJjZSA9 IFsyMC4wXSkKKyAgICAgICByZXMoMSkleCA9IGxocyV4ICsgcmhzJXgKKyAg ICAgICByZXMoMikleCA9IHJocyV4ICsgcmhzJXgKKyAgICBlbmQgZnVuY3Rp b24KKyBlbmQgbW9kdWxlCisgCisgcHJvZ3JhbSBwb2x5bW9ycGhpY19vcGVy YXRvcnNfbWVtb3J5X2xlYWtzCisgICAgIHVzZSBhX3R5cGVfbQorICAgICBp bXBsaWNpdCBub25lCisgICAgIHR5cGUoYV90eXBlX3QpIDo6IGEgPSBhX3R5 cGVfdCgxKSAsIGIgPSBhX3R5cGVfdCgyKQorICAgICBjbGFzcyhhX3R5cGVf dCksIGFsbG9jYXRhYmxlIDo6IHJlcyg6KQorIAorICAgICByZXMgPSBhZGRf YV90eXBlKGEsYikgICAgICAgICEgUmVtYXJrYWJseSwgdGhpcyBJQ0VkIC0g Zm91bmQgd2hpbGUgZGVidWdnaW5nIHRoZSBQUi4KKyAgICAgY2FsbCBhc3Np Z25fYV90eXBlIChhLCByZXMpCisgICAgIGlmIChpbnQgKHJlcygxKSV4ICsg cmVzKDIpJXgpIC5uZS4gaW50IChhJXgpKSBzdG9wIDEKKyAgICAgaWYgKGlu dCAoc3VtIChyZXMoMSkleSArIHJlcygyKSV5KSkgLm5lLiBpbnQgKHN1bSAo YSV5KSkpIHN0b3AgMQorICAgICBkZWFsbG9jYXRlIChhJXkpCisgICAgIGRl YWxsb2NhdGUgKHJlcykKKyBlbmQK --000000000000a628fa057458a124--