From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) by sourceware.org (Postfix) with ESMTPS id 6D34B3858C31; Sat, 6 Jan 2024 17:26:30 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org 6D34B3858C31 Authentication-Results: sourceware.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=gmail.com ARC-Filter: OpenARC Filter v1.0.0 sourceware.org 6D34B3858C31 Authentication-Results: server2.sourceware.org; arc=none smtp.remote-ip=2607:f8b0:4864:20::1031 ARC-Seal: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704561996; cv=none; b=uzOxEg9Wi9RCQKXjvy7HPb9PNIflMu+txqkHN6KttXi9XaOe8hkc9xjoRzTizo9cCrdY+a3ZZChfD/KZwBRSByjg4I0l4/zWgyaWlmzfA3ASPr8itNDo0880KipkAooSv8ciR69DP5/56c5Xl3+7T7g/5AzXHicn+9y1HYf9qVA= ARC-Message-Signature: i=1; a=rsa-sha256; d=sourceware.org; s=key; t=1704561996; c=relaxed/simple; bh=7EgTvm1RZqPDFXXVpp7aOGPRuyrO54UDZl56E+c9gWQ=; h=DKIM-Signature:MIME-Version:From:Date:Message-ID:Subject:To; b=dSSIpdlbJroYCdiXcJ3hBYxQHrpDQvS7PaUjyUkccNy2P8frYK6p7w1MrAusWVgp0xgj8hdF69Al28w46H3BJWLk5416B4BtCqGa8HSpRJRfsaTdFUTe++Q12w4cmYVg+fQnHOGM2u3r/1E3T3GzU31twnK9QX7EBSsYGuV688c= ARC-Authentication-Results: i=1; server2.sourceware.org Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-28bcc273833so517527a91.1; Sat, 06 Jan 2024 09:26:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1704561989; x=1705166789; darn=gcc.gnu.org; h=to:subject:message-id:date:from:mime-version:from:to:cc:subject :date:message-id:reply-to; bh=v/sVbe9mBObbK2AQ1cegHiQAd9bxB2TlaqpEh5cn3EI=; b=drcPjNQHKtqVwxpU0gJVl7hNjKSr7Ddeyrz5PGGbg+BPZ9jYWDunX92zhiWulU1MXY m9yuKd9vnkdqlP/KMKlQTcc9ecWXq3DsaODgE2sJyJe+bOWznkHIUaVDxaxk79NBnCzo vvyblx9MhT8SQsyCwV9dNTG4x5eqRrCuN7G6xkzKNtDqlSN9vKTqN8VVp/5JaZEi7QRf jeZy6wHRnpNtoLNQ67dTR/cyhxjk4O+0XQmPeb5sGzT+pp/m137f5yQ2JsoB0U14cUWX AnvPuOgxAsr5kPufzmrwmYAhZchl+HXf/5JIPzvOEgyTMv6A5CQmdcUUgK+LD4NR/iMZ gmtw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1704561989; x=1705166789; h=to:subject:message-id:date:from:mime-version:x-gm-message-state :from:to:cc:subject:date:message-id:reply-to; bh=v/sVbe9mBObbK2AQ1cegHiQAd9bxB2TlaqpEh5cn3EI=; b=CdzgtEnxfLiBNNRc7rOlbKHLIbL59/vvxm/o2Np2IHYthKGkxG0McRTLa6TpkJPSnK oQslJfPrtnTynMcW76CLYiW95XKfbcfa/dkdk9id+K6qwlS0W713ZVKWe9Bmeq3KSMBb MzBemYzA9b+b3Ov+Je1Cpxue5x29FBBbsBJme0zthbtKajjQb32o1ep8OapYru3gahQ8 XVKAwMAAIl8+kqbaFh6cX7jApEEsr8bgZIvyo9N1f2mfi54tAcsCGoqHxw00wwnrVPiG pHsxYDTqMQ0+patmMeSKVL28Hun1FRW2r2lv9AlEmRS0D/+isbv6KVWnTiB6DD2OTz1v boCA== X-Gm-Message-State: AOJu0YwBaqy4zoFUf1+1/4PQez6eKKx+IAdpDUFjju5zhLJ+5Hye4IIR zHSte23L4/JhRGIm2cLyzR1k+hAm0e1OqAEm3WdIQgl82Yw= X-Google-Smtp-Source: AGHT+IHwYj/J4F1BBFS1A6NpuGKDSvkTgBTuS3WyMWLGPejYQ0zboFsHTKBqQkZA7vzhx7qwHPSJhaSXlHCe3wZCF+c= X-Received: by 2002:a17:90a:fd11:b0:28c:1eff:ac4a with SMTP id cv17-20020a17090afd1100b0028c1effac4amr719309pjb.90.1704561988808; Sat, 06 Jan 2024 09:26:28 -0800 (PST) MIME-Version: 1.0 From: Paul Richard Thomas Date: Sat, 6 Jan 2024 17:26:16 +0000 Message-ID: Subject: [Patch, fortran PR89645/99065 No IMPLICIT type error with: ASSOCIATE( X => function() ) To: "fortran@gcc.gnu.org" , gcc-patches Content-Type: multipart/mixed; boundary="000000000000d749d4060e4a4374" X-Spam-Status: No, score=-6.7 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FILL_THIS_FORM,FREEMAIL_FROM,GIT_PATCH_0,HTML_MESSAGE,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,TXREP,T_SCC_BODY_TEXT_LINE,URIBL_BLACK autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org List-Id: --000000000000d749d4060e4a4374 Content-Type: multipart/alternative; boundary="000000000000d749d2060e4a4372" --000000000000d749d2060e4a4372 Content-Type: text/plain; charset="UTF-8" These PRs come about because of gfortran's single pass parsing. If the function in the title is parsed after the associate construct, then its type and rank are not known. The point at which this becomes a problem is when expressions within the associate block are parsed. primary.cc (gfc_match_varspec) could already deal with intrinsic types and so component references were the trigger for the problem. The two major parts of this patch are the fixup needed in gfc_match_varspec and the resolution of expressions with references in resolve.cc (gfc_fixup_inferred_type_refs). The former relies on the two new functions in symbol.cc to search for derived types with an appropriate component to match the component reference and then set the associate name to have a matching derived type. gfc_fixup_inferred_type_refs is called in resolution and so the type of the selector function is known. gfc_fixup_inferred_type_refs ensures that the component references use this derived type and that array references occur in the right place in expressions and match preceding array specs. Most of the work in preparing the patch was sorting out cases where the selector was not a derived type but, instead, a class function. If it were not for this, the patch would have been submitted six months ago :-( The patch is relatively safe because most of the chunks are guarded by testing for the associate name being an inferred type, which is set in gfc_match_varspec. For this reason, I do not think it likely that the patch will cause regressions. However, it is more than possible that variants not appearing in the submitted testcase will throw up new bugs. Jerry has already given the patch a whirl and found that it applies cleanly, regtests OK and works as advertised. OK for trunk? Paul Fortran: Fix class/derived type function associate selectors [PR87477] 2024-01-06 Paul Thomas gcc/fortran PR fortran/87477 PR fortran/89645 PR fortran/99065 * class.cc (gfc_change_class): New function needed for associate names, when rank changes or a derived type is produced by resolution * dump-parse-tree.cc (show_code_node): Make output for SELECT TYPE more comprehensible. * gfortran.h : Add 'gfc_association_list' to structure 'gfc_association_list'. Add prototypes for 'gfc_find_derived_types', 'gfc_fixup_inferred_type_refs' and 'gfc_change_class'. Add macro IS_INFERRED_TYPE. * match.cc (copy_ts_from_selector_to_associate): Add bolean arg 'select_type' with default false. If this is a select type name and the selector is a inferred type, build the class type and apply it to the associate name. (build_associate_name): Pass true to 'select_type' in call to previous. * parse.cc (parse_associate): If the selector is a inferred type the associate name is too. Make sure that function selector class and rank, if known, are passed to the associate name. If a function result exists, pass its typespec to the associate name. * primary.cc (gfc_match_varspec): If a scalar derived type select type temporary has an array reference, match the array reference, treating this in the same way as an equivalence member. If this is a inferred type with a component reference, call 'gfc_find_derived_types' to find a suitable derived type. * resolve.cc (resolve_variable): Call new function below. (gfc_fixup_inferred_type_refs): New function to ensure that the expression references for a inferred type are consistent with the now fixed up selector. (resolve_assoc_var): Ensure that derived type or class function selectors transmit the correct arrayspec to the associate name. (resolve_select_type): If the selector is an associate name of inferred type and has no component references, the associate name should have its typespec. * symbol.cc (gfc_set_default_type): If an associate name with unknown type has a selector expression, try resolving the expr. (find_derived_types, gfc_find_derived_types): New functions that search for a derived type with a given name. * trans-expr.cc (gfc_conv_variable): Some inferred type exprs escape resolution so call 'gfc_fixup_inferred_type_refs'. * trans-stmt.cc (trans_associate_var): Tidy up expression for 'class_target'. Correctly handle selectors that are class array references, passed as derived types. gcc/testsuite/ PR fortran/87477 PR fortran/89645 PR fortran/99065 * gfortran.dg/associate_64.f90 : New test --000000000000d749d2060e4a4372-- --000000000000d749d4060e4a4374 Content-Type: text/x-patch; charset="US-ASCII"; name="submit.diff" Content-Disposition: attachment; filename="submit.diff" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lr2c6gjk0 ZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2NsYXNzLmNjIGIvZ2NjL2ZvcnRy YW4vY2xhc3MuY2MKaW5kZXggNWM0M2I3N2RiYTMuLjdkYjFlY2JkMjY0IDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi9jbGFzcy5jYworKysgYi9nY2MvZm9y dHJhbi9jbGFzcy5jYwpAQCAtODE1LDYgKzgxNSw1NiBAQCBnZmNfYnVpbGRf Y2xhc3Nfc3ltYm9sIChnZmNfdHlwZXNwZWMgKnRzLCBzeW1ib2xfYXR0cmli dXRlICphdHRyLAogfQogCiAKKy8qIENoYW5nZSBjbGFzcywgdXNpbmcgZ2Zj X2J1aWxkX2NsYXNzX3N5bWJvbC4gVGhpcyBpcyBuZWVkZWQgZm9yIGFzc29j aWF0ZQorICAgbmFtZXMsIHdoZW4gcmFuayBjaGFuZ2VzIG9yIGEgZGVyaXZl ZCB0eXBlIGlzIHByb2R1Y2VkIGJ5IHJlc29sdXRpb24uICAqLworCit2b2lk CitnZmNfY2hhbmdlX2NsYXNzIChnZmNfdHlwZXNwZWMgKnRzLCBzeW1ib2xf YXR0cmlidXRlICpzeW1fYXR0ciwKKwkJICBnZmNfYXJyYXlfc3BlYyAqc3lt X2FzLCBpbnQgcmFuaywgaW50IGNvcmFuaykKK3sKKyAgc3ltYm9sX2F0dHJp YnV0ZSBhdHRyOworICBnZmNfY29tcG9uZW50ICpjOworICBnZmNfYXJyYXlf c3BlYyAqYXMgPSBOVUxMOworICBnZmNfc3ltYm9sICpkZXIgPSB0cy0+dS5k ZXJpdmVkOworCisgIHRzLT50eXBlID0gQlRfQ0xBU1M7CisgIGF0dHIgPSAq c3ltX2F0dHI7CisgIGF0dHIuY2xhc3Nfb2sgPSAwOworICBhdHRyLmFzc29j aWF0ZV92YXIgPSAxOworICBhdHRyLmNsYXNzX3BvaW50ZXIgPSAxOworICBh dHRyLmFsbG9jYXRhYmxlID0gMDsKKyAgYXR0ci5wb2ludGVyID0gMTsKKyAg YXR0ci5kaW1lbnNpb24gPSByYW5rID8gMSA6IDA7CisgIGlmIChyYW5rKQor ICAgIHsKKyAgICAgIGlmIChzeW1fYXMpCisJYXMgPSBnZmNfY29weV9hcnJh eV9zcGVjIChzeW1fYXMpOworICAgICAgZWxzZQorCXsKKwkgIGFzID0gZ2Zj X2dldF9hcnJheV9zcGVjICgpOworCSAgYXMtPnJhbmsgPSByYW5rOworCSAg YXMtPnR5cGUgPSBBU19ERUZFUlJFRDsKKwkgIGFzLT5jb3JhbmsgPSBjb3Jh bms7CisJfQorICAgIH0KKyAgaWYgKGFzICYmIGFzLT5jb3JhbmsgIT0gMCkK KyAgICBhdHRyLmNvZGltZW5zaW9uID0gMTsKKworICBpZiAoIWdmY19idWls ZF9jbGFzc19zeW1ib2wgKHRzLCAmYXR0ciwgJmFzKSkKKyAgICBnY2NfdW5y ZWFjaGFibGUgKCk7CisKKyAgZ2ZjX3NldF9zeW1fcmVmZXJlbmNlZCAodHMt PnUuZGVyaXZlZCk7CisKKyAgLyogTWFrZSBzdXJlIHRoZSBfdnB0ciBpcyBz ZXQuICAqLworICBjID0gZ2ZjX2ZpbmRfY29tcG9uZW50ICh0cy0+dS5kZXJp dmVkLCAiX3ZwdHIiLCB0cnVlLCB0cnVlLCBOVUxMKTsKKyAgaWYgKGMtPnRz LnUuZGVyaXZlZCA9PSBOVUxMKQorICAgIGMtPnRzLnUuZGVyaXZlZCA9IGdm Y19maW5kX2Rlcml2ZWRfdnRhYiAoZGVyKTsKKyAgLyogX3ZwdHIgbm93IGhh cyB0aGUgX3Z0YWIgaW4gaXQsIGNoYW5nZSBpdCB0byB0aGUgX3Z0eXBlLiAg Ki8KKyAgaWYgKGMtPnRzLnUuZGVyaXZlZC0+YXR0ci52dGFiKQorICAgIGMt PnRzLnUuZGVyaXZlZCA9IGMtPnRzLnUuZGVyaXZlZC0+dHMudS5kZXJpdmVk OworfQorCisKIC8qIEFkZCBhIHByb2NlZHVyZSBwb2ludGVyIGNvbXBvbmVu dCB0byB0aGUgdnR5cGUKICAgIHRvIHJlcHJlc2VudCBhIHNwZWNpZmljIHR5 cGUtYm91bmQgcHJvY2VkdXJlLiAgKi8KIApkaWZmIC0tZ2l0IGEvZ2NjL2Zv cnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjIGIvZ2NjL2ZvcnRyYW4vZHVtcC1w YXJzZS10cmVlLmNjCmluZGV4IGVjZjcxMDM2NDQ0Li5hMjMzZjlmMTExMCAx MDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vZHVtcC1wYXJzZS10cmVlLmNjCisr KyBiL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYwpAQCAtMjY5MCwx MSArMjY5MCwyMCBAQCBzaG93X2NvZGVfbm9kZSAoaW50IGxldmVsLCBnZmNf Y29kZSAqYykKIAogICAgIGNhc2UgRVhFQ19CTE9DSzoKICAgICAgIHsKLQlj b25zdCBjaGFyKiBibG9ja3R5cGU7CisJY29uc3QgY2hhciAqYmxvY2t0eXBl LCAqc25hbWUgPSBOVUxMOwogCWdmY19uYW1lc3BhY2UgKnNhdmVkX25zOwog CWdmY19hc3NvY2lhdGlvbl9saXN0ICphbGlzdDsKIAotCWlmIChjLT5leHQu YmxvY2suYXNzb2MpCisJaWYgKGMtPmV4dC5ibG9jay5ucyAmJiBjLT5leHQu YmxvY2subnMtPmNvZGUKKwkgICAgJiYgYy0+ZXh0LmJsb2NrLm5zLT5jb2Rl LT5vcCA9PSBFWEVDX1NFTEVDVF9UWVBFKQorCSAgeworCSAgICBnZmNfZXhw ciAqZmNuID0gYy0+ZXh0LmJsb2NrLm5zLT5jb2RlLT5leHByMTsKKwkgICAg YmxvY2t0eXBlID0gIlNFTEVDVCBUWVBFIjsKKwkgICAgLyogZXhwcjEgaXMg X2xvYyhhc3NvY19uYW1lLT52cHRyKSAgKi8KKwkgICAgaWYgKGZjbiAmJiBm Y24tPmV4cHJfdHlwZSA9PSBFWFBSX0ZVTkNUSU9OKQorCSAgICAgIHNuYW1l ID0gZmNuLT52YWx1ZS5mdW5jdGlvbi5hY3R1YWwtPmV4cHItPnN5bXRyZWUt Pm4uc3ltLT5uYW1lOworCSAgfQorCWVsc2UgaWYgKGMtPmV4dC5ibG9jay5h c3NvYykKIAkgIGJsb2NrdHlwZSA9ICJBU1NPQ0lBVEUiOwogCWVsc2UKIAkg IGJsb2NrdHlwZSA9ICJCTE9DSyI7CkBAIC0yNzAyLDcgKzI3MTEsNyBAQCBz aG93X2NvZGVfbm9kZSAoaW50IGxldmVsLCBnZmNfY29kZSAqYykKIAlmcHJp bnRmIChkdW1wZmlsZSwgIiVzICIsIGJsb2NrdHlwZSk7CiAJZm9yIChhbGlz dCA9IGMtPmV4dC5ibG9jay5hc3NvYzsgYWxpc3Q7IGFsaXN0ID0gYWxpc3Qt Pm5leHQpCiAJICB7Ci0JICAgIGZwcmludGYgKGR1bXBmaWxlLCAiICVzID0g IiwgYWxpc3QtPm5hbWUpOworCSAgICBmcHJpbnRmIChkdW1wZmlsZSwgIiAl cyA9ICIsIHNuYW1lID8gc25hbWUgOiBhbGlzdC0+bmFtZSk7CiAJICAgIHNo b3dfZXhwciAoYWxpc3QtPnRhcmdldCk7CiAJICB9CiAKQEAgLTI3MzMsNyAr Mjc0Miw3IEBAIHNob3dfY29kZV9ub2RlIChpbnQgbGV2ZWwsIGdmY19jb2Rl ICpjKQogICAgICAgaWYgKGMtPm9wID09IEVYRUNfU0VMRUNUX1JBTkspCiAJ ZnB1dHMgKCJTRUxFQ1QgUkFOSyAiLCBkdW1wZmlsZSk7CiAgICAgICBlbHNl IGlmIChjLT5vcCA9PSBFWEVDX1NFTEVDVF9UWVBFKQotCWZwdXRzICgiU0VM RUNUIFRZUEUgIiwgZHVtcGZpbGUpOworCWZwdXRzICgiU0VMRUNUIENBU0Ug IiwgZHVtcGZpbGUpOyAvLyBQcmVjZWRlZCBieSBTRUxFQ1QgVFlQRSBjb25z dHJ1Y3QKICAgICAgIGVsc2UKIAlmcHV0cyAoIlNFTEVDVCBDQVNFICIsIGR1 bXBmaWxlKTsKICAgICAgIHNob3dfZXhwciAoYy0+ZXhwcjEpOwpkaWZmIC0t Z2l0IGEvZ2NjL2ZvcnRyYW4vZ2ZvcnRyYW4uaCBiL2djYy9mb3J0cmFuL2dm b3J0cmFuLmgKaW5kZXggYjVlMWI0YzlkNGIuLjEzZDVjNWIyMjQ0IDEwMDY0 NAotLS0gYS9nY2MvZm9ydHJhbi9nZm9ydHJhbi5oCisrKyBiL2djYy9mb3J0 cmFuL2dmb3J0cmFuLmgKQEAgLTI5NjMsNiArMjk2MywxMSBAQCB0eXBlZGVm IHN0cnVjdCBnZmNfYXNzb2NpYXRpb25fbGlzdAogICBsb2N1cyB3aGVyZTsK IAogICBnZmNfZXhwciAqdGFyZ2V0OworCisgIC8qIFVzZWQgZm9yIGluZmVy cmluZyB0aGUgZGVyaXZlZCB0eXBlIG9mIGFuIGFzc29jaWF0ZSBuYW1lLCB3 aG9zZSBzZWxlY3RvcgorICAgICBpcyBhIHNpYmxpbmcgZGVyaXZlZCB0eXBl IGZ1bmN0aW9uIHRoYXQgaGFzIG5vdCB5ZXQgYmVlbiBwYXJzZWQuICAqLwor ICBnZmNfc3ltYm9sICpkZXJpdmVkX3R5cGVzOworICB1bnNpZ25lZCBpbmZl cnJlZF90eXBlOjE7CiB9CiBnZmNfYXNzb2NpYXRpb25fbGlzdDsKICNkZWZp bmUgZ2ZjX2dldF9hc3NvY2lhdGlvbl9saXN0KCkgWENORVcgKGdmY19hc3Nv Y2lhdGlvbl9saXN0KQpAQCAtMzUyOSw2ICszNTM0LDcgQEAgYm9vbCBnZmNf YWRkX2NvbXBvbmVudCAoZ2ZjX3N5bWJvbCAqLCBjb25zdCBjaGFyICosIGdm Y19jb21wb25lbnQgKiopOwogZ2ZjX3N5bWJvbCAqZ2ZjX3VzZV9kZXJpdmVk IChnZmNfc3ltYm9sICopOwogZ2ZjX2NvbXBvbmVudCAqZ2ZjX2ZpbmRfY29t cG9uZW50IChnZmNfc3ltYm9sICosIGNvbnN0IGNoYXIgKiwgYm9vbCwgYm9v bCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2ZjX3Jl ZiAqKik7CitpbnQgZ2ZjX2ZpbmRfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJv bCAqLCBnZmNfbmFtZXNwYWNlICosIGNvbnN0IGNoYXIgKik7CiAKIGdmY19z dF9sYWJlbCAqZ2ZjX2dldF9zdF9sYWJlbCAoaW50KTsKIHZvaWQgZ2ZjX2Zy ZWVfc3RfbGFiZWwgKGdmY19zdF9sYWJlbCAqKTsKQEAgLTM3OTQsNiArMzgw MCw3IEBAIHZvaWQgZ2ZjX2ZyZWVfYXNzb2NpYXRpb25fbGlzdCAoZ2ZjX2Fz c29jaWF0aW9uX2xpc3QgKik7CiB2b2lkIGdmY19leHByZXNzaW9uX3Jhbmsg KGdmY19leHByICopOwogYm9vbCBnZmNfb3BfcmFua19jb25mb3JtYWJsZSAo Z2ZjX2V4cHIgKiwgZ2ZjX2V4cHIgKik7CiBib29sIGdmY19yZXNvbHZlX3Jl ZiAoZ2ZjX2V4cHIgKik7Cit2b2lkIGdmY19maXh1cF9pbmZlcnJlZF90eXBl X3JlZnMgKGdmY19leHByICopOwogYm9vbCBnZmNfcmVzb2x2ZV9leHByIChn ZmNfZXhwciAqKTsKIHZvaWQgZ2ZjX3Jlc29sdmUgKGdmY19uYW1lc3BhY2Ug Kik7CiB2b2lkIGdmY19yZXNvbHZlX2NvZGUgKGdmY19jb2RlICosIGdmY19u YW1lc3BhY2UgKik7CkBAIC0zOTg3LDYgKzM5OTQsOCBAQCB1bnNpZ25lZCBp bnQgZ2ZjX2hhc2hfdmFsdWUgKGdmY19zeW1ib2wgKik7CiBnZmNfZXhwciAq Z2ZjX2dldF9sZW5fY29tcG9uZW50IChnZmNfZXhwciAqZSwgaW50KTsKIGJv b2wgZ2ZjX2J1aWxkX2NsYXNzX3N5bWJvbCAoZ2ZjX3R5cGVzcGVjICosIHN5 bWJvbF9hdHRyaWJ1dGUgKiwKIAkJCSAgICAgZ2ZjX2FycmF5X3NwZWMgKiop Owordm9pZCBnZmNfY2hhbmdlX2NsYXNzIChnZmNfdHlwZXNwZWMgKiwgc3lt Ym9sX2F0dHJpYnV0ZSAqLAorCQkgICAgICAgZ2ZjX2FycmF5X3NwZWMgKiwg aW50LCBpbnQpOwogZ2ZjX3N5bWJvbCAqZ2ZjX2ZpbmRfZGVyaXZlZF92dGFi IChnZmNfc3ltYm9sICopOwogZ2ZjX3N5bWJvbCAqZ2ZjX2ZpbmRfdnRhYiAo Z2ZjX3R5cGVzcGVjICopOwogZ2ZjX3N5bXRyZWUqIGdmY19maW5kX3R5cGVi b3VuZF9wcm9jIChnZmNfc3ltYm9sKiwgYm9vbCosCkBAIC00MDE3LDYgKzQw MjYsMTAgQEAgYm9vbCBnZmNfbWF5X2JlX2ZpbmFsaXplZCAoZ2ZjX3R5cGVz cGVjKTsKICNkZWZpbmUgSVNfUFJPQ19QT0lOVEVSKHN5bSkgXAogCShzeW0t PnRzLnR5cGUgPT0gQlRfQ0xBU1MgJiYgc3ltLT5hdHRyLmNsYXNzX29rICYm IENMQVNTX0RBVEEgKHN5bSkgXAogCSA/IENMQVNTX0RBVEEgKHN5bSktPmF0 dHIucHJvY19wb2ludGVyIDogc3ltLT5hdHRyLnByb2NfcG9pbnRlcikKKyNk ZWZpbmUgSVNfSU5GRVJSRURfVFlQRShleHByKSBcCisJKGV4cHIgJiYgZXhw ci0+ZXhwcl90eXBlID09IEVYUFJfVkFSSUFCTEUgXAorCSAmJiBleHByLT5z eW10cmVlLT5uLnN5bS0+YXNzb2MgXAorCSAmJiBleHByLT5zeW10cmVlLT5u LnN5bS0+YXNzb2MtPmluZmVycmVkX3R5cGUpCiAKIC8qIGZyb250ZW5kLXBh c3Nlcy5jYyAqLwogCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9tYXRjaC5j YyBiL2djYy9mb3J0cmFuL21hdGNoLmNjCmluZGV4IGRmOWFkYjM1OWEwLi42 YTUyM2Q1YWI2ZSAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MK KysrIGIvZ2NjL2ZvcnRyYW4vbWF0Y2guY2MKQEAgLTYzMjIsNyArNjMyMiw4 IEBAIGdmY19tYXRjaF9zZWxlY3QgKHZvaWQpCiAvKiBUcmFuc2ZlciB0aGUg c2VsZWN0b3IgdHlwZXNwZWMgdG8gdGhlIGFzc29jaWF0ZSBuYW1lLiAgKi8K IAogc3RhdGljIHZvaWQKLWNvcHlfdHNfZnJvbV9zZWxlY3Rvcl90b19hc3Nv Y2lhdGUgKGdmY19leHByICphc3NvY2lhdGUsIGdmY19leHByICpzZWxlY3Rv cikKK2NvcHlfdHNfZnJvbV9zZWxlY3Rvcl90b19hc3NvY2lhdGUgKGdmY19l eHByICphc3NvY2lhdGUsIGdmY19leHByICpzZWxlY3RvciwKKwkJCQkgICAg Ym9vbCBzZWxlY3RfdHlwZSA9IGZhbHNlKQogewogICBnZmNfcmVmICpyZWY7 CiAgIGdmY19zeW1ib2wgKmFzc29jX3N5bTsKQEAgLTY0MDUsMTIgKzY0MDYs MzAgQEAgY29weV90c19mcm9tX3NlbGVjdG9yX3RvX2Fzc29jaWF0ZSAoZ2Zj X2V4cHIgKmFzc29jaWF0ZSwgZ2ZjX2V4cHIgKnNlbGVjdG9yKQogICAgIGFz c29jX3N5bS0+YXMgPSBOVUxMOwogCiBidWlsZF9jbGFzc19zeW06Ci0gIGlm IChzZWxlY3Rvci0+dHMudHlwZSA9PSBCVF9DTEFTUykKKyAgLyogRGVhbCB3 aXRoIHRoZSB2ZXJ5IHNwZWNpZmljIGNhc2Ugb2YgYSBTRUxFQ1RfVFlQRSBz ZWxlY3RvciBiZWluZyBhbgorICAgICBhc3NvY2lhdGVfbmFtZSB3aG9zZSB0 eXBlIGhhcyBiZWVuIGlkZW50aWZpZWQgYnkgY29tcG9uZW50IHJlZmVyZW5j ZXMuCisgICAgIEl0IG11c3QgYmUgYXNzdW1lZCB0aGF0IGl0IHdpbGwgYmUg aWRlbnRpZmllZCBhcyBhIENMQVNTIGV4cHJlc3Npb24sCisgICAgIHNvIGNv bnZlcnQgaXQgbm93LiAgKi8KKyAgaWYgKHNlbGVjdF90eXBlCisgICAgICAm JiBJU19JTkZFUlJFRF9UWVBFIChzZWxlY3RvcikKKyAgICAgICYmIHNlbGVj dG9yLT50cy50eXBlID09IEJUX0RFUklWRUQpCisgICAgeworICAgICAgZ2Zj X2ZpbmRfZGVyaXZlZF92dGFiIChzZWxlY3Rvci0+dHMudS5kZXJpdmVkKTsK KyAgICAgIC8qIFRoZSBjb3JyZWN0IGNsYXNzIGNvbnRhaW5lciBoYXMgdG8g YmUgYXZhaWxhYmxlLiAgKi8KKyAgICAgIGFzc29jX3N5bS0+dHMudS5kZXJp dmVkID0gc2VsZWN0b3ItPnRzLnUuZGVyaXZlZDsKKyAgICAgIGFzc29jX3N5 bS0+dHMudHlwZSA9IEJUX0NMQVNTOworICAgICAgYXNzb2Nfc3ltLT5hdHRy LnBvaW50ZXIgPSAxOworICAgICAgaWYgKCFzZWxlY3Rvci0+dHMudS5kZXJp dmVkLT5hdHRyLmlzX2NsYXNzKQorCWdmY19idWlsZF9jbGFzc19zeW1ib2wg KCZhc3NvY19zeW0tPnRzLCAmYXNzb2Nfc3ltLT5hdHRyLCAmYXNzb2Nfc3lt LT5hcyk7CisgICAgICBhc3NvY2lhdGUtPnRzID0gYXNzb2Nfc3ltLT50czsK KyAgICB9CisgIGVsc2UgaWYgKHNlbGVjdG9yLT50cy50eXBlID09IEJUX0NM QVNTKQogICAgIHsKICAgICAgIC8qIFRoZSBjb3JyZWN0IGNsYXNzIGNvbnRh aW5lciBoYXMgdG8gYmUgYXZhaWxhYmxlLiAgKi8KICAgICAgIGFzc29jX3N5 bS0+dHMudHlwZSA9IEJUX0NMQVNTOwogICAgICAgYXNzb2Nfc3ltLT50cy51 LmRlcml2ZWQgPSBDTEFTU19EQVRBIChzZWxlY3RvcikKLQk/IENMQVNTX0RB VEEgKHNlbGVjdG9yKS0+dHMudS5kZXJpdmVkIDogc2VsZWN0b3ItPnRzLnUu ZGVyaXZlZDsKKwkJCQk/IENMQVNTX0RBVEEgKHNlbGVjdG9yKS0+dHMudS5k ZXJpdmVkCisJCQkJOiBzZWxlY3Rvci0+dHMudS5kZXJpdmVkOwogICAgICAg YXNzb2Nfc3ltLT5hdHRyLnBvaW50ZXIgPSAxOwogICAgICAgZ2ZjX2J1aWxk X2NsYXNzX3N5bWJvbCAoJmFzc29jX3N5bS0+dHMsICZhc3NvY19zeW0tPmF0 dHIsICZhc3NvY19zeW0tPmFzKTsKICAgICB9CkBAIC02NDM4LDcgKzY0NTcs NyBAQCBidWlsZF9hc3NvY2lhdGVfbmFtZSAoY29uc3QgY2hhciAqbmFtZSwg Z2ZjX2V4cHIgKiplMSwgZ2ZjX2V4cHIgKiplMikKICAgaWYgKGV4cHIyLT50 cy50eXBlID09IEJUX1VOS05PV04pCiAgICAgc3ltLT5hdHRyLnVudHlwZWQg PSAxOwogICBlbHNlCi0gICAgY29weV90c19mcm9tX3NlbGVjdG9yX3RvX2Fz c29jaWF0ZSAoZXhwcjEsIGV4cHIyKTsKKyAgICBjb3B5X3RzX2Zyb21fc2Vs ZWN0b3JfdG9fYXNzb2NpYXRlIChleHByMSwgZXhwcjIsIHRydWUpOwogCiAg IHN5bS0+YXR0ci5mbGF2b3IgPSBGTF9WQVJJQUJMRTsKICAgc3ltLT5hdHRy LnJlZmVyZW5jZWQgPSAxOwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vcGFy c2UuY2MgYi9nY2MvZm9ydHJhbi9wYXJzZS5jYwppbmRleCAwNDJhNmFkNWU1 OS4uOGM3ZDI2OWFiOTYgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3BhcnNl LmNjCisrKyBiL2djYy9mb3J0cmFuL3BhcnNlLmNjCkBAIC01MTQ5LDYgKzUx NDksMTcgQEAgcGFyc2VfYXNzb2NpYXRlICh2b2lkKQogICAgICAgc3ltLT5k ZWNsYXJlZF9hdCA9IGEtPndoZXJlOwogICAgICAgZ2ZjX3NldF9zeW1fcmVm ZXJlbmNlZCAoc3ltKTsKIAorICAgICAgLyogSWYgdGhlIHNlbGVjdG9yIGlz IGEgaW5mZXJyZWQgdHlwZSB0aGVuIHRoZSBhc3NvY2lhdGVfbmFtZSBoYWQg YmV0dGVyCisJIGJlIGFzIHdlbGwuIFVzZSBhcnJheSByZWZlcmVuY2VzLCBp ZiBwcmVzZW50LCB0byBpZGVudGlmeSBpdCBhcyBhbgorCSBhcnJheS4gICov CisgICAgICBpZiAoSVNfSU5GRVJSRURfVFlQRSAoYS0+dGFyZ2V0KSkKKwl7 CisJICBzeW0tPmFzc29jLT5pbmZlcnJlZF90eXBlID0gMTsKKwkgIGZvciAo Z2ZjX3JlZiAqciA9IGEtPnRhcmdldC0+cmVmOyByOyByID0gci0+bmV4dCkK KwkgICAgaWYgKHItPnR5cGUgPT0gUkVGX0FSUkFZKQorCSAgICAgIHN5bS0+ YXR0ci5kaW1lbnNpb24gPSAxOworCX0KKwogICAgICAgLyogSW5pdGlhbGl6 ZSB0aGUgdHlwZXNwZWMuICBJdCBpcyBub3QgYXZhaWxhYmxlIGluIGFsbCBj YXNlcywKIAkgaG93ZXZlciwgYXMgaXQgbWF5IG9ubHkgYmUgc2V0IG9uIHRo ZSB0YXJnZXQgZHVyaW5nIHJlc29sdXRpb24uCiAJIFN0aWxsLCBzb21ldGlt ZXMgaXQgaGVscHMgdG8gaGF2ZSBpdCByaWdodCBub3cgLS0gZXNwZWNpYWxs eQpAQCAtNTE3NSwyMSArNTE4Niw0MSBAQCBwYXJzZV9hc3NvY2lhdGUgKHZv aWQpCiAJICAgICAgICYmIHN5bS0+dHMudS5jbC0+bGVuZ3RoLT5leHByX3R5 cGUgPT0gRVhQUl9DT05TVEFOVCkpCiAJc3ltLT50cy51LmNsID0gZ2ZjX25l d19jaGFybGVuIChnZmNfY3VycmVudF9ucywgTlVMTCk7CiAKKyAgICAgIC8q IElmIHRoZSBmdW5jdGlvbiBoYXMgYmVlbiBwYXJzZWQsIGdvIHN0cmFpZ2h0 IHRvIHRoZSByZXN1bHQgdG8KKwkgb2J0YWluIHRoZSBleHByZXNzaW9uIHJh bmsuICAqLworICAgICAgaWYgKHRhcmdldC0+ZXhwcl90eXBlID09IEVYUFJf RlVOQ1RJT04KKwkgICYmIHRhcmdldC0+c3ltdHJlZQorCSAgJiYgdGFyZ2V0 LT5zeW10cmVlLT5uLnN5bSkKKwl7CisJICB0c3ltID0gdGFyZ2V0LT5zeW10 cmVlLT5uLnN5bTsKKwkgIGlmICghdHN5bS0+cmVzdWx0KQorCSAgICB0c3lt LT5yZXN1bHQgPSB0c3ltOworCSAgc3ltLT50cyA9IHRzeW0tPnJlc3VsdC0+ dHM7CisJICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTKQorCSAgICB7 CisJICAgICAgaWYgKENMQVNTX0RBVEEgKHN5bSktPmFzKQorCQl0YXJnZXQt PnJhbmsgPSBDTEFTU19EQVRBIChzeW0pLT5hcy0+cmFuazsKKwkgICAgICBz eW0tPmF0dHIuY2xhc3Nfb2sgPSAxOworCSAgICB9CisJICBlbHNlCisJICAg IHRhcmdldC0+cmFuayA9IHRzeW0tPnJlc3VsdC0+YXMgPyB0c3ltLT5yZXN1 bHQtPmFzLT5yYW5rIDogMDsKKwl9CisKICAgICAgIC8qIENoZWNrIGlmIHRo ZSB0YXJnZXQgZXhwcmVzc2lvbiBpcyBhcnJheSB2YWx1ZWQuIFRoaXMgY2Fu bm90IGJlIGRvbmUKIAkgYnkgY2FsbGluZyBnZmNfcmVzb2x2ZV9leHByIGJl Y2F1c2UgdGhlIGNvbnRleHQgaXMgdW5hdmFpbGFibGUuCiAJIEhvd2V2ZXIs IHRoZSByZWZlcmVuY2VzIGNhbiBiZSByZXNvbHZlZCBhbmQgdGhlIHJhbmsg b2YgdGhlIHRhcmdldAogCSBleHByZXNzaW9uIHNldC4gICovCi0gICAgICBp ZiAodGFyZ2V0LT5yZWYgJiYgZ2ZjX3Jlc29sdmVfcmVmICh0YXJnZXQpCisg ICAgICBpZiAoIXN5bS0+YXNzb2MtPmluZmVycmVkX3R5cGUKKwkgICYmIHRh cmdldC0+cmVmICYmIGdmY19yZXNvbHZlX3JlZiAodGFyZ2V0KQogCSAgJiYg dGFyZ2V0LT5leHByX3R5cGUgIT0gRVhQUl9BUlJBWQogCSAgJiYgdGFyZ2V0 LT5leHByX3R5cGUgIT0gRVhQUl9DT01QQ0FMTCkKIAlnZmNfZXhwcmVzc2lv bl9yYW5rICh0YXJnZXQpOwogCiAgICAgICAvKiBEZXRlcm1pbmUgd2hldGhl ciBvciBub3QgZnVuY3Rpb24gZXhwcmVzc2lvbnMgd2l0aCB1bmtub3duIHR5 cGUgYXJlCiAJIHN0cnVjdHVyZSBjb25zdHJ1Y3RvcnMuIElmIHNvLCB0aGUg ZnVuY3Rpb24gcmVzdWx0IGNhbiBiZSBjb252ZXJ0ZWQKLQkgdG8gYmUgYSBk ZXJpdmVkIHR5cGUuCi0JIFRPRE86IERlYWwgd2l0aCByZWZlcmVuY2VzIHRv IHNpYmxpbmcgZnVuY3Rpb25zIHRoYXQgaGF2ZSBub3QgeWV0IGJlZW4KLQkg cGFyc2VkIChQUnMgODk2NDUgYW5kIDk5MDY1KS4gICovCi0gICAgICBpZiAo dGFyZ2V0LT5leHByX3R5cGUgPT0gRVhQUl9GVU5DVElPTiAmJiB0YXJnZXQt PnRzLnR5cGUgPT0gQlRfVU5LTk9XTikKKwkgdG8gYmUgYSBkZXJpdmVkIHR5 cGUuICAqLworICAgICAgaWYgKHRhcmdldC0+ZXhwcl90eXBlID09IEVYUFJf RlVOQ1RJT04KKwkgICYmIHRhcmdldC0+dHMudHlwZSA9PSBCVF9VTktOT1dO KQogCXsKIAkgIGdmY19zeW1ib2wgKmRlcml2ZWQ7CiAJICAvKiBUaGUgZGVy aXZlZCB0eXBlIGhhcyBhIGxlYWRpbmcgdXBwZXJjYXNlIGNoYXJhY3Rlci4g ICovCkBAIC01MTk5LDE2ICs1MjMwLDcgQEAgcGFyc2VfYXNzb2NpYXRlICh2 b2lkKQogCSAgICB7CiAJICAgICAgc3ltLT50cy50eXBlID0gQlRfREVSSVZF RDsKIAkgICAgICBzeW0tPnRzLnUuZGVyaXZlZCA9IGRlcml2ZWQ7Ci0JICAg IH0KLQkgIGVsc2UgaWYgKHRhcmdldC0+c3ltdHJlZSAmJiAodHN5bSA9IHRh cmdldC0+c3ltdHJlZS0+bi5zeW0pKQotCSAgICB7Ci0JICAgICAgc3ltLT50 cyA9IHRzeW0tPnJlc3VsdCA/IHRzeW0tPnJlc3VsdC0+dHMgOiB0c3ltLT50 czsKLQkgICAgICBpZiAoc3ltLT50cy50eXBlID09IEJUX0NMQVNTKQotCQl7 Ci0JCSAgaWYgKENMQVNTX0RBVEEgKHN5bSktPmFzKQotCQkgICAgdGFyZ2V0 LT5yYW5rID0gQ0xBU1NfREFUQSAoc3ltKS0+YXMtPnJhbms7Ci0JCSAgc3lt LT5hdHRyLmNsYXNzX29rID0gMTsKLQkJfQorCSAgICAgIHN5bS0+YXNzb2Mt PmluZmVycmVkX3R5cGUgPSAwOwogCSAgICB9CiAJfQogCmRpZmYgLS1naXQg YS9nY2MvZm9ydHJhbi9wcmltYXJ5LmNjIGIvZ2NjL2ZvcnRyYW4vcHJpbWFy eS5jYwppbmRleCBmOGExYzA5ZDE5MC4uMTc3MTBiMWY5OWQgMTAwNjQ0Ci0t LSBhL2djYy9mb3J0cmFuL3ByaW1hcnkuY2MKKysrIGIvZ2NjL2ZvcnRyYW4v cHJpbWFyeS5jYwpAQCAtMjA1Nyw2ICsyMDU3LDcgQEAgZ2ZjX21hdGNoX3Zh cnNwZWMgKGdmY19leHByICpwcmltYXJ5LCBpbnQgZXF1aXZfZmxhZywgYm9v bCBzdWJfZmxhZywKICAgYm9vbCB1bmtub3duOwogICBib29sIGlucXVpcnk7 CiAgIGJvb2wgaW50cmluc2ljOworICBib29sIGluZmVycmVkX3R5cGU7CiAg IGxvY3VzIG9sZF9sb2M7CiAgIGNoYXIgc2VwOwogCkBAIC0yMDg3LDYgKzIw ODgsMTggQEAgZ2ZjX21hdGNoX3ZhcnNwZWMgKGdmY19leHByICpwcmltYXJ5 LCBpbnQgZXF1aXZfZmxhZywgYm9vbCBzdWJfZmxhZywKICAgaWYgKHN5bS0+ YXNzb2MgJiYgc3ltLT5hc3NvYy0+dGFyZ2V0KQogICAgIHRndF9leHByID0g c3ltLT5hc3NvYy0+dGFyZ2V0OwogCisgIGluZmVycmVkX3R5cGUgPSBJU19J TkZFUlJFRF9UWVBFIChwcmltYXJ5KTsKKworICAvKiBTRUxFQ1QgVFlQRSBh bmQgU0VMRUNUIFJBTksgdGVtcG9yYXJpZXMgd2l0aGluIGFuIEFTU09DSUFU RSBibG9jaywgd2hvc2UKKyAgICAgc2VsZWN0b3IgaGFzIG5vdCBiZWVuIHBh cnNlZCwgY2FuIGdlbmVyYXRlIGVycm9ycyB3aXRoIGFycmF5IGFuZCBjb21w b25lbnQKKyAgICAgcmVmcy4uIFVzZSAnaW5mZXJyZWRfdHlwZScgYXMgYSBm bGFnIHRvIHN1cHByZXNzIHRoZXNlIGVycm9ycy4gICovCisgIGlmICghaW5m ZXJyZWRfdHlwZQorICAgICAgJiYgKGdmY19wZWVrX2FzY2lpX2NoYXIgKCkg PT0gJygnICYmICFzeW0tPmF0dHIuZGltZW5zaW9uKQorICAgICAgJiYgIXN5 bS0+YXR0ci5jb2RpbWVuc2lvbgorICAgICAgJiYgc3ltLT5hdHRyLnNlbGVj dF90eXBlX3RlbXBvcmFyeQorICAgICAgJiYgIXN5bS0+YXR0ci5zZWxlY3Rf cmFua190ZW1wb3JhcnkpCisgICAgaW5mZXJyZWRfdHlwZSA9IHRydWU7CisK ICAgLyogRm9yIGFzc29jaWF0ZSBuYW1lcywgd2UgbWF5IG5vdCB5ZXQga25v dyB3aGV0aGVyIHRoZXkgYXJlIGFycmF5cyBvciBub3QuCiAgICAgIElmIHRo ZSBzZWxlY3RvciBleHByZXNzaW9uIGlzIHVuYW1iaWd1b3VzbHkgYW4gYXJy YXk7IGVnLiBhIGZ1bGwgYXJyYXkKICAgICAgb3IgYW4gYXJyYXkgc2VjdGlv biwgdGhlbiB0aGUgYXNzb2NpYXRlIG5hbWUgbXVzdCBiZSBhbiBhcnJheSBh bmQgd2UgY2FuCkBAIC0yMTM2LDcgKzIxNDksOCBAQCBnZmNfbWF0Y2hfdmFy c3BlYyAoZ2ZjX2V4cHIgKnByaW1hcnksIGludCBlcXVpdl9mbGFnLCBib29s IHN1Yl9mbGFnLAogCXN5bS0+dHMudS5kZXJpdmVkID0gdGd0X2V4cHItPnRz LnUuZGVyaXZlZDsKICAgICB9CiAKLSAgaWYgKChlcXVpdl9mbGFnICYmIGdm Y19wZWVrX2FzY2lpX2NoYXIgKCkgPT0gJygnKQorICBpZiAoKGluZmVycmVk X3R5cGUgJiYgIXN5bS0+YXMgJiYgZ2ZjX3BlZWtfYXNjaWlfY2hhciAoKSA9 PSAnKCcpCisgICAgICB8fCAoZXF1aXZfZmxhZyAmJiBnZmNfcGVla19hc2Np aV9jaGFyICgpID09ICcoJykKICAgICAgIHx8IGdmY19wZWVrX2FzY2lpX2No YXIgKCkgPT0gJ1snIHx8IHN5bS0+YXR0ci5jb2RpbWVuc2lvbgogICAgICAg fHwgKHN5bS0+YXR0ci5kaW1lbnNpb24gJiYgc3ltLT50cy50eXBlICE9IEJU X0NMQVNTCiAJICAmJiAhc3ltLT5hdHRyLnByb2NfcG9pbnRlciAmJiAhZ2Zj X2lzX3Byb2NfcHRyX2NvbXAgKHByaW1hcnkpCkBAIC0yMTk0LDcgKzIyMDgs NyBAQCBnZmNfbWF0Y2hfdmFyc3BlYyAoZ2ZjX2V4cHIgKnByaW1hcnksIGlu dCBlcXVpdl9mbGFnLCBib29sIHN1Yl9mbGFnLAogICBpbnF1aXJ5ID0gZmFs c2U7CiAgIGlmIChtID09IE1BVENIX1lFUyAmJiBzZXAgPT0gJyUnCiAgICAg ICAmJiBwcmltYXJ5LT50cy50eXBlICE9IEJUX0NMQVNTCi0gICAgICAmJiBw cmltYXJ5LT50cy50eXBlICE9IEJUX0RFUklWRUQpCisgICAgICAmJiAocHJp bWFyeS0+dHMudHlwZSAhPSBCVF9ERVJJVkVEIHx8IGluZmVycmVkX3R5cGUp KQogICAgIHsKICAgICAgIG1hdGNoIG1tOwogICAgICAgb2xkX2xvYyA9IGdm Y19jdXJyZW50X2xvY3VzOwpAQCAtMjIwOSw3ICsyMjIzLDggQEAgZ2ZjX21h dGNoX3ZhcnNwZWMgKGdmY19leHByICpwcmltYXJ5LCBpbnQgZXF1aXZfZmxh ZywgYm9vbCBzdWJfZmxhZywKICAgICBnZmNfc2V0X2RlZmF1bHRfdHlwZSAo c3ltLCAwLCBzeW0tPm5zKTsKIAogICAvKiBTZWUgaWYgdGhlcmUgaXMgYSB1 c2FibGUgdHlwZXNwZWMgaW4gdGhlICJubyBJTVBMSUNJVCB0eXBlIiBlcnJv ci4gICovCi0gIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfVU5LTk9XTiAmJiBt ID09IE1BVENIX1lFUykKKyAgaWYgKChzeW0tPnRzLnR5cGUgPT0gQlRfVU5L Tk9XTiB8fCBpbmZlcnJlZF90eXBlKQorICAgICAgJiYgbSA9PSBNQVRDSF9Z RVMpCiAgICAgewogICAgICAgYm9vbCBwZXJtaXNzaWJsZTsKIApAQCAtMjIy OCw5ICsyMjQzLDM0IEBAIGdmY19tYXRjaF92YXJzcGVjIChnZmNfZXhwciAq cHJpbWFyeSwgaW50IGVxdWl2X2ZsYWcsIGJvb2wgc3ViX2ZsYWcsCiAJICBz eW0tPnRzID0gdGd0X2V4cHItPnRzOwogCX0KIAorICAgICAgLyogSWYgdGhp cyBoYXNuJ3QgZG9uZSB0aGUgdHJpY2sgYW5kIHRoZSB0YXJnZXQgZXhwcmVz c2lvbiBpcyBhIGZ1bmN0aW9uLAorCSB0aGVuIHRoaXMgbXVzdCBiZSBhIGRl cml2ZWQgdHlwZSBpZiAnbmFtZScgbWF0Y2hlcyBhbiBhY2Nlc3NpYmxlIHR5 cGUKKwkgYm90aCBpbiB0aGlzIG5hbWVzcGFjZSBhbmQgdGhlIGFzIHlldCB1 bnBhcnNlZCBzaWJsaW5nIGZ1bmN0aW9uLiAgKi8KKyAgICAgIGlmICh0Z3Rf ZXhwciAmJiB0Z3RfZXhwci0+ZXhwcl90eXBlID09IEVYUFJfRlVOQ1RJT04K KwkgICYmIChzeW0tPnRzLnR5cGUgPT0gQlRfVU5LTk9XTiB8fCBpbmZlcnJl ZF90eXBlKQorCSAgJiYgZ2ZjX2ZpbmRfZGVyaXZlZF90eXBlcyAoc3ltLCBn ZmNfY3VycmVudF9ucywgbmFtZSkpCisJeworCSAgc3ltLT5hc3NvYy0+aW5m ZXJyZWRfdHlwZSA9IDE7CisJICAvKiBUaGUgZmlyc3QgcmV0dXJuZWQgdHlw ZSBpcyBhcyBnb29kIGFzIGFueSBhdCB0aGlzIHN0YWdlLiAgKi8KKwkgIGdm Y19zeW1ib2wgKipkdHMgPSAmc3ltLT5hc3NvYy0+ZGVyaXZlZF90eXBlczsK KwkgIHRndF9leHByLT50cy50eXBlID0gQlRfREVSSVZFRDsKKwkgIHRndF9l eHByLT50cy5raW5kID0gMDsKKwkgIHRndF9leHByLT50cy51LmRlcml2ZWQg PSAqZHRzOworCSAgc3ltLT50cyA9IHRndF9leHByLT50czsKKwkgIC8qIERl bGV0ZSB0aGUgZHQgbGlzdCB0byBwcmV2ZW50IGludGVyZmVyZW5jZSB3aXRo IHRyYW5zLXR5cGUuY2MncworCSAgICAgdHJlYXRtZW50IG9mIGRlcml2ZWQg dHlwZSBkZWNscywgZXZlbiBpZiB0aGlzIHByb2Nlc3MgaGFzIHRvIGJlCisJ ICAgICBkb25lIGFnYWluIGZvciBhbm90aGVyIHByaW1hcnkgZXhwcmVzc2lv bi4gICovCisJICB3aGlsZSAoKmR0cyAmJiAoKmR0cyktPmR0X25leHQpCisJ ICAgIHsKKwkgICAgICBnZmNfc3ltYm9sICoqdG1wID0gJigqZHRzKS0+ZHRf bmV4dDsKKwkgICAgICAqZHRzID0gTlVMTDsKKwkgICAgICBkdHMgPSB0bXA7 CisJICAgIH0KKwl9CisKICAgICAgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRf VU5LTk9XTikKIAl7Ci0JICBnZmNfZXJyb3IgKCJTeW1ib2wgJXFzIGF0ICVD IGhhcyBubyBJTVBMSUNJVCB0eXBlIiwgc3ltLT5uYW1lKTsKKwkgIGdmY19l cnJvciAoIlN5bWJvbCAlcXMgYXQgJUMgaGFzIG5vIElNUExJQ0lUIHR5cGUo cHJpbWFyeSkiLCBzeW0tPm5hbWUpOwogCSAgcmV0dXJuIE1BVENIX0VSUk9S OwogCX0KICAgICB9CmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9yZXNvbHZl LmNjIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYwppbmRleCAyOTI1ZjdkYTI4 Yy4uZGNmODc1MGJhOTcgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3Jlc29s dmUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYwpAQCAtNTg2Niw2 ICs1ODY2LDEzIEBAIHJlc29sdmVfdmFyaWFibGUgKGdmY19leHByICplKQog ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIAorICAvKiBHdWVzc2VkIHR5 cGUgdmFyaWFibGVzIGFyZSBhc3NvY2lhdGVfbmFtZXMgd2hvc2Ugc2VsZWN0 b3IgaGFkIG5vdCBiZWVuCisgICAgIHBhcnNlZCBhdCB0aGUgdGltZSB0aGF0 IHRoZSBjb25zdHJ1Y3Qgd2FzIHBhcnNlZC4gTm93IHRoZSBuYW1lc3BhY2Ug aXMKKyAgICAgYmVpbmcgcmVzb2x2ZWQsIHRoZSBUS1Igb2YgdGhlIHNlbGVj dG9yIHdpbGwgYmUgYXZhaWxhYmxlIGZvciBmaXh1cCBvZgorICAgICB0aGUg YXNzb2NpYXRlX25hbWUuICAqLworICBpZiAoSVNfSU5GRVJSRURfVFlQRSAo ZSkgJiYgZS0+cmVmKQorICAgIGdmY19maXh1cF9pbmZlcnJlZF90eXBlX3Jl ZnMgKGUpOworCiAgIC8qIEZvciB2YXJpYWJsZXMgdGhhdCBhcmUgdXNlZCBp biBhbiBhc3NvY2lhdGUgKHRhcmdldCA9PiBvYmplY3QpIHdoZXJlCiAgICAg IHRoZSBvYmplY3QncyBiYXNldHlwZSBpcyBhcnJheSB2YWx1ZWQgd2hpbGUg dGhlIHRhcmdldCBpcyBzY2FsYXIsCiAgICAgIHRoZSB0cycgdHlwZSBvZiB0 aGUgY29tcG9uZW50IHJlZnMgaXMgc3RpbGwgYXJyYXkgdmFsdWVkLCB3aGlj aApAQCAtNjE3MSw2ICs2MTc4LDEyNCBAQCByZXNvbHZlX3Byb2NlZHVyZToK IH0KIAogCisvKiAnc3ltJyB3YXMgaW5pdGlhbGx5IGd1ZXNzZWQgdG8gYmUg ZGVyaXZlZCB0eXBlIGJ1dCBoYXMgYmVlbiBjb3JyZWN0ZWQKKyAgIGluIHJl c29sdmVfYXNzb2NfdmFyIHRvIGJlIGEgY2xhc3MgZW50aXR5IG9yIHRoZSBk ZXJpdmVkIHR5cGUgY29ycmVjdGluZy4KKyAgIElmIGEgY2xhc3MgZW50aXR5 IGl0IHdpbGwgY2VydGFpbmx5IG5lZWQgdGhlIF9kYXRhIHJlZmVyZW5jZSBv ciB0aGUKKyAgIHJlZmVyZW5jZSBkZXJpdmVkIHR5cGUgc3ltYm9sIGNvcnJl Y3RpbmcgaW4gdGhlIGZpcnN0IGNvbXBvbmVudCByZWYgaWYKKyAgIGEgZGVy aXZlZCB0eXBlLiAgKi8KKwordm9pZAorZ2ZjX2ZpeHVwX2luZmVycmVkX3R5 cGVfcmVmcyAoZ2ZjX2V4cHIgKmUpCit7CisgIGdmY19yZWYgKnJlZjsKKyAg Z2ZjX3N5bWJvbCAqc3ltLCAqZGVyaXZlZDsKKworICBzeW0gPSBlLT5zeW10 cmVlLT5uLnN5bTsKKworICAvKiBUaGlzIGlzIGFuIGFzc29jaWF0ZV9uYW1l IHdob3NlIHNlbGVjdG9yIGlzIGEgY29tcG9uZW50IHJlZiBvZiBhIHNlbGVj dG9yCisgICAgIHRoYXQgaXMgYSBpbmZlcnJlZCB0eXBlIGFzc29jaWF0ZV9u YW1lLiAgKi8KKyAgaWYgKHN5bS0+dHMudHlwZSAhPSBCVF9ERVJJVkVEICYm IHN5bS0+dHMudHlwZSAhPSBCVF9DTEFTUykKKyAgICB7CisgICAgICBlLT5y YW5rID0gc3ltLT5hcyA/IHN5bS0+YXMtPnJhbmsgOiAwOworICAgICAgc3lt LT5hdHRyLmRpbWVuc2lvbiA9IGUtPnJhbmsgPyAxIDogMDsKKyAgICAgIGlm ICghZS0+cmFuayAmJiBlLT5yZWYtPnR5cGUgPT0gUkVGX0FSUkFZKQorCXsK KwkgIHJlZiA9IGUtPnJlZjsKKwkgIGUtPnJlZiA9IHJlZi0+bmV4dDsKKwkg IGZyZWUgKHJlZik7CisJfQorICAgICAgcmV0dXJuOworICAgIH0KKworICBk ZXJpdmVkID0gc3ltLT50cy50eXBlID09IEJUX0NMQVNTID8gQ0xBU1NfREFU QSAoc3ltKS0+dHMudS5kZXJpdmVkCisJCQkJICAgICA6IHN5bS0+dHMudS5k ZXJpdmVkOworCisgIC8qIEVuc3VyZSB0aGF0IGNsYXNzIHN5bWJvbHMgaGF2 ZSBhbiBhcnJheSBzcGVjIGFuZCBlbnN1cmUgdGhhdCB0aGVyZQorICAgICBp cyBhIF9kYXRhIGZpZWxkIHJlZmVyZW5jZSBmb2xsb3dpbmcgY2xhc3MgdHlw ZSByZWZlcmVuY2VzLiAgKi8KKyAgaWYgKHN5bS0+dHMudHlwZSA9PSBCVF9D TEFTUworICAgICAgJiYgc3ltLT5hc3NvYy0+dGFyZ2V0LT50cy50eXBlID09 IEJUX0NMQVNTKQorICAgIHsKKyAgICAgIGUtPnJhbmsgPSBDTEFTU19EQVRB IChzeW0pLT5hcyA/IENMQVNTX0RBVEEgKHN5bSktPmFzLT5yYW5rIDogMDsK KyAgICAgIHN5bS0+YXR0ci5kaW1lbnNpb24gPSAwOworICAgICAgQ0xBU1Nf REFUQSAoc3ltKS0+YXR0ci5kaW1lbnNpb24gPSBlLT5yYW5rID8gMSA6IDA7 CisgICAgICBpZiAoZS0+cmVmICYmIChlLT5yZWYtPnR5cGUgIT0gUkVGX0NP TVBPTkVOVAorCQkgICAgIHx8IGUtPnJlZi0+dS5jLmNvbXBvbmVudC0+bmFt ZVswXSAhPSAnXycpKQorCXsKKwkgIHJlZiA9IGdmY19nZXRfcmVmICgpOwor CSAgcmVmLT50eXBlID0gUkVGX0NPTVBPTkVOVDsKKwkgIHJlZi0+bmV4dCA9 IGUtPnJlZjsKKwkgIGUtPnJlZiA9IHJlZjsKKwkgIHJlZi0+dS5jLmNvbXBv bmVudCA9IGdmY19maW5kX2NvbXBvbmVudCAoc3ltLT50cy51LmRlcml2ZWQs ICJfZGF0YSIsCisJCQkJCQkgICB0cnVlLCB0cnVlLCBOVUxMKTsKKwkgIHJl Zi0+dS5jLnN5bSA9IHN5bS0+dHMudS5kZXJpdmVkOworCX0KKyAgICB9CisK KyAgLyogUHJvY2VlZCBhcyBmYXIgYXMgdGhlIGZpcnN0IGNvbXBvbmVudCBy ZWZlcmVuY2UgYW5kIGVuc3VyZSB0aGF0IHRoZQorICAgICBjb3JyZWN0IGRl cml2ZWQgdHlwZSBpcyBiZWluZyB1c2VkLiAgKi8KKyAgZm9yIChyZWYgPSBl LT5yZWY7IHJlZjsgcmVmID0gcmVmLT5uZXh0KQorICAgIGlmIChyZWYtPnR5 cGUgPT0gUkVGX0NPTVBPTkVOVCkKKyAgICAgIHsKKwlpZiAocmVmLT51LmMu Y29tcG9uZW50LT5uYW1lWzBdICE9ICdfJykKKwkgIHJlZi0+dS5jLnN5bSA9 IGRlcml2ZWQ7CisJZWxzZQorCSAgcmVmLT51LmMuc3ltID0gc3ltLT50cy51 LmRlcml2ZWQ7CisJYnJlYWs7CisgICAgICB9CisKKyAgZ2ZjX2V4cHIgKnRh cmdldCA9IHN5bS0+YXNzb2MtPnRhcmdldDsKKyAgaWYgKHN5bS0+dHMudHlw ZSA9PSBCVF9DTEFTUworICAgICAgJiYgSVNfSU5GRVJSRURfVFlQRSAodGFy Z2V0KQorICAgICAgJiYgdGFyZ2V0LT50cy50eXBlID09IEJUX0RFUklWRUQK KyAgICAgICYmIENMQVNTX0RBVEEgKHN5bSktPnRzLnUuZGVyaXZlZCA9PSB0 YXJnZXQtPnRzLnUuZGVyaXZlZAorICAgICAgJiYgdGFyZ2V0LT5yZWYgJiYg dGFyZ2V0LT5yZWYtPm5leHQKKyAgICAgICYmIHRhcmdldC0+cmVmLT5uZXh0 LT50eXBlID09IFJFRl9BUlJBWSkKKyAgICB0YXJnZXQtPnRzID0gdGFyZ2V0 LT5zeW10cmVlLT5uLnN5bS0+dHM7CisKKyAgLyogVmVyaWZ5IHRoYXQgdGhl IHR5cGUgaW5mZXJyZW5jZSBtZWNoYW5pc20gaGFzIG5vdCBpbnRyb2R1Y2Vk IGEgc3B1cmlvdXMKKyAgICAgYXJyYXkgcmVmZXJlbmNlLiAgVGhpcyBjYW4g aGFwcGVuIHdpdGggYW4gYXNzb2NpYXRlIG5hbWUsIHdob3NlIHNlbGVjdG9y CisgICAgIGlzIGFuIGVsZW1lbnQgb2YgYW5vdGhlciBpbmZlcnJlZCB0eXBl LiAgKi8KKyAgaWYgKCEoc3ltLT50cy50eXBlID09IEJUX0NMQVNTID8gQ0xB U1NfREFUQSAoc3ltKS0+YXMgOiBzeW0tPmFzKQorICAgICAgJiYgZSAhPSBl LT5zeW10cmVlLT5uLnN5bS0+YXNzb2MtPnRhcmdldAorICAgICAgJiYgIWUt PnN5bXRyZWUtPm4uc3ltLT5hc3NvYy0+dGFyZ2V0LT5yYW5rKQorICAgIHsK KyAgICAgIC8qIEZpcnN0IGNhc2U6IGFycmF5IHJlZiBhZnRlciB0aGUgc2Nh bGFyIGNsYXNzIG9yIGRlcml2ZWQgYXNzb2NpYXRlX25hbWUuICAqLworICAg ICAgaWYgKGUtPnJlZiAmJiBlLT5yZWYtPnR5cGUgPT0gUkVGX0FSUkFZCisJ ICAmJiBlLT5yZWYtPnUuYXIudHlwZSAhPSBBUl9FTEVNRU5UKQorCXsKKwkg IHJlZiA9IGUtPnJlZjsKKwkgIGUtPnJlZiA9IHJlZi0+bmV4dDsKKwkgIGZy ZWUgKHJlZik7CisKKwkgIC8qIElmIGl0IGhhc24ndCBhIHJlZiB0byB0aGUg J19kYXRhJyBmaWVsZCBzdXBwbHkgb25lLiAgKi8KKwkgIGlmIChzeW0tPnRz LnR5cGUgPT0gQlRfQ0xBU1MKKwkgICAgICAmJiAhKGUtPnJlZi0+dHlwZSA9 PSBSRUZfQ09NUE9ORU5UCisJCSAgICYmIHN0cmNtcCAoZS0+cmVmLT51LmMu Y29tcG9uZW50LT5uYW1lLCAiX2RhdGEiKSkpCisJICAgIHsKKwkgICAgICBn ZmNfcmVmICpuZXdfcmVmOworCSAgICAgIGdmY19maW5kX2NvbXBvbmVudCAo ZS0+c3ltdHJlZS0+bi5zeW0tPnRzLnUuZGVyaXZlZCwKKwkJCQkgICJfZGF0 YSIsIHRydWUsIHRydWUsICZuZXdfcmVmKTsKKwkgICAgICBuZXdfcmVmLT5u ZXh0ID0gZS0+cmVmOworCSAgICAgIGUtPnJlZiA9IG5ld19yZWY7CisJICAg IH0KKwl9CisgICAgICAvKiAybmQgY2FzZTogYSByZWYgdG8gdGhlICdfZGF0 YScgZmllbGQgZm9sbG93ZWQgYnkgYW4gYXJyYXkgcmVmLiAgKi8KKyAgICAg IGVsc2UgaWYgKGUtPnJlZiAmJiBlLT5yZWYtPnR5cGUgPT0gUkVGX0NPTVBP TkVOVAorCSAgICAgICAmJiBzdHJjbXAgKGUtPnJlZi0+dS5jLmNvbXBvbmVu dC0+bmFtZSwgIl9kYXRhIikgPT0gMAorCSAgICAgICAmJiBlLT5yZWYtPm5l eHQgJiYgZS0+cmVmLT5uZXh0LT50eXBlID09IFJFRl9BUlJBWQorCSAgICAg ICAmJiBlLT5yZWYtPm5leHQtPnUuYXIudHlwZSAhPSBBUl9FTEVNRU5UKQor CXsKKwkgIHJlZiA9IGUtPnJlZi0+bmV4dDsKKwkgIGUtPnJlZi0+bmV4dCA9 IGUtPnJlZi0+bmV4dC0+bmV4dDsKKwkgIGZyZWUgKHJlZik7CisJfQorICAg IH0KKworICAvKiBOb3cgdGhhdCBhbGwgdGhlIHJlZmVyZW5jZXMgYXJlIE9L LCBnZXQgdGhlIGV4cHJlc3Npb24gcmFuay4gICovCisgIGdmY19leHByZXNz aW9uX3JhbmsgKGUpOworfQorCisKIC8qIENoZWNrcyB0byBzZWUgdGhhdCB0 aGUgY29ycmVjdCBzeW1ib2wgaGFzIGJlZW4gaG9zdCBhc3NvY2lhdGVkLgog ICAgVGhlIG9ubHkgc2l0dWF0aW9ucyB3aGVyZSB0aGlzIGFyaXNlcyBhcmU6 CiAJKGkpICBUaGF0IGluIHdoaWNoIGEgdHdpY2UgY29udGFpbmVkIGZ1bmN0 aW9uIGlzIHBhcnNlZCBhZnRlcgpAQCAtOTI2Myw2ICs5Mzg4LDQ2IEBAIHJl c29sdmVfYXNzb2NfdmFyIChnZmNfc3ltYm9sKiBzeW0sIGJvb2wgcmVzb2x2 ZV90YXJnZXQpCiAgICAgICByZXR1cm47CiAgICAgfQogCisgIGlmIChzeW0t PmFzc29jLT5pbmZlcnJlZF90eXBlIHx8IElTX0lORkVSUkVEX1RZUEUgKHRh cmdldCkpCisgICAgeworICAgICAgc3ltYm9sX2F0dHJpYnV0ZSBhdHRyOwor CisgICAgICAvKiBCeSBub3csIHRoZSB0eXBlIG9mIHRoZSB0YXJnZXQgaGFz IGJlZW4gZml4ZWQgdXAuICAqLworICAgICAgaWYgKHN5bS0+dHMudHlwZSA9 PSBCVF9ERVJJVkVECisJICAmJiB0YXJnZXQtPnRzLnR5cGUgPT0gQlRfQ0xB U1MKKwkgICYmICFVTkxJTUlURURfUE9MWSAodGFyZ2V0KSkKKwl7CisJICBz eW0tPnRzID0gQ0xBU1NfREFUQSAodGFyZ2V0KS0+dHM7CisJICBpZiAoIXN5 bS0+YXMpCisJICAgIHN5bS0+YXMgPSBnZmNfY29weV9hcnJheV9zcGVjIChD TEFTU19EQVRBICh0YXJnZXQpLT5hcyk7CisJICBhdHRyID0gQ0xBU1NfREFU QSAoc3ltKSA/IENMQVNTX0RBVEEgKHN5bSktPmF0dHIgOiBzeW0tPmF0dHI7 CisJICBzeW0tPmF0dHIuZGltZW5zaW9uID0gdGFyZ2V0LT5yYW5rID8gMSA6 IDA7CisJICBnZmNfY2hhbmdlX2NsYXNzICgmc3ltLT50cywgJmF0dHIsIHN5 bS0+YXMsCisJCQkgICAgdGFyZ2V0LT5yYW5rLCBnZmNfZ2V0X2NvcmFuayAo dGFyZ2V0KSk7CisJICBzeW0tPmFzID0gTlVMTDsKKwl9CisgICAgICBlbHNl IGlmICh0YXJnZXQtPnRzLnR5cGUgPT0gQlRfREVSSVZFRAorCSAgICAgICAm JiB0YXJnZXQtPnN5bXRyZWUtPm4uc3ltLT50cy50eXBlID09IEJUX0NMQVNT CisJICAgICAgICYmIElTX0lORkVSUkVEX1RZUEUgKHRhcmdldCkKKwkgICAg ICAgJiYgdGFyZ2V0LT5yZWYgJiYgdGFyZ2V0LT5yZWYtPm5leHQKKwkgICAg ICAgJiYgdGFyZ2V0LT5yZWYtPm5leHQtPnR5cGUgPT0gUkVGX0FSUkFZCisJ ICAgICAgICYmICF0YXJnZXQtPnJlZi0+bmV4dC0+bmV4dCkKKwl7CisJICBz eW0tPnRzID0gdGFyZ2V0LT50czsKKwkgIGF0dHIgPSBDTEFTU19EQVRBIChz eW0pID8gQ0xBU1NfREFUQSAoc3ltKS0+YXR0ciA6IHN5bS0+YXR0cjsKKwkg IHN5bS0+YXR0ci5kaW1lbnNpb24gPSB0YXJnZXQtPnJhbmsgPyAxIDogMDsK KwkgIGdmY19jaGFuZ2VfY2xhc3MgKCZzeW0tPnRzLCAmYXR0ciwgc3ltLT5h cywKKwkJCSAgICB0YXJnZXQtPnJhbmssIGdmY19nZXRfY29yYW5rICh0YXJn ZXQpKTsKKwkgIHN5bS0+YXMgPSBOVUxMOworCSAgdGFyZ2V0LT50cyA9IHN5 bS0+dHM7CisJfQorICAgICAgZWxzZSBpZiAoKHRhcmdldC0+dHMudHlwZSA9 PSBCVF9ERVJJVkVEKQorCSAgICAgICB8fCAoc3ltLT50cy50eXBlID09IEJU X0NMQVNTICYmIHRhcmdldC0+dHMudHlwZSA9PSBCVF9DTEFTUworCQkgICAm JiBDTEFTU19EQVRBICh0YXJnZXQpLT5hcyAmJiAhQ0xBU1NfREFUQSAoc3lt KS0+YXMpKQorCXN5bS0+dHMgPSB0YXJnZXQtPnRzOworICAgIH0KKworCiAg IGlmICh0YXJnZXQtPmV4cHJfdHlwZSA9PSBFWFBSX05VTEwpCiAgICAgewog ICAgICAgZ2ZjX2Vycm9yICgiU2VsZWN0b3IgYXQgJUwgY2Fubm90IGJlIE5V TEwoKSIsICZ0YXJnZXQtPndoZXJlKTsKQEAgLTkyODksMTUgKzk0NTQsNTAg QEAgcmVzb2x2ZV9hc3NvY192YXIgKGdmY19zeW1ib2wqIHN5bSwgYm9vbCBy ZXNvbHZlX3RhcmdldCkKIAkJCSAgfHwgZ2ZjX2lzX3B0cl9mY24gKHRhcmdl dCkpOwogCiAgIC8qIEZpbmFsbHkgcmVzb2x2ZSBpZiB0aGlzIGlzIGFuIGFy cmF5IG9yIG5vdC4gICovCisgIGlmICh0YXJnZXQtPmV4cHJfdHlwZSA9PSBF WFBSX0ZVTkNUSU9OCisgICAgICAmJiAoc3ltLT50cy50eXBlID09IEJUX0NM QVNTIHx8IHN5bS0+dHMudHlwZSA9PSBCVF9ERVJJVkVEKSkKKyAgICB7Cisg ICAgICBnZmNfZXhwcmVzc2lvbl9yYW5rICh0YXJnZXQpOworICAgICAgaWYg KHRhcmdldC0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisJICAmJiAhc3ltLT5h cworCSAgJiYgdGFyZ2V0LT5zeW10cmVlLT5uLnN5bS0+YXMpCisJeworCSAg c3ltLT5hcyA9IGdmY19jb3B5X2FycmF5X3NwZWMgKHRhcmdldC0+c3ltdHJl ZS0+bi5zeW0tPmFzKTsKKwkgIHN5bS0+YXR0ci5kaW1lbnNpb24gPSAxOwor CX0KKyAgICAgIGVsc2UgaWYgKHRhcmdldC0+dHMudHlwZSA9PSBCVF9DTEFT UworCSAgICAgICAmJiBDTEFTU19EQVRBICh0YXJnZXQpLT5hcykKKwl7CisJ ICB0YXJnZXQtPnJhbmsgPSBDTEFTU19EQVRBICh0YXJnZXQpLT5hcy0+cmFu azsKKwkgIGlmICghKHN5bS0+dHMudHlwZSA9PSBCVF9DTEFTUyAmJiBDTEFT U19EQVRBIChzeW0pLT5hcykpCisJICAgIHsKKwkgICAgICBzeW0tPnRzID0g dGFyZ2V0LT50czsKKwkgICAgICBzeW0tPmF0dHIuZGltZW5zaW9uID0gMDsK KwkgICAgfQorCX0KKyAgICB9CisKKwogICBpZiAoc3ltLT5hdHRyLmRpbWVu c2lvbiAmJiB0YXJnZXQtPnJhbmsgPT0gMCkKICAgICB7CiAgICAgICAvKiBw cmltYXJ5LmNjIG1ha2VzIHRoZSBhc3N1bXB0aW9uIHRoYXQgYSByZWZlcmVu Y2UgdG8gYW4gYXNzb2NpYXRlCiAJIG5hbWUgZm9sbG93ZWQgYnkgYSBsZWZ0 IHBhcmVudGhlc2lzIGlzIGFuIGFycmF5IHJlZmVyZW5jZS4gICovCi0gICAg ICBpZiAoc3ltLT50cy50eXBlICE9IEJUX0NIQVJBQ1RFUikKLQlnZmNfZXJy b3IgKCJBc3NvY2lhdGUtbmFtZSAlcXMgYXQgJUwgaXMgdXNlZCBhcyBhcnJh eSIsCi0JCSAgIHN5bS0+bmFtZSwgJnN5bS0+ZGVjbGFyZWRfYXQpOwotICAg ICAgc3ltLT5hdHRyLmRpbWVuc2lvbiA9IDA7Ci0gICAgICByZXR1cm47Cisg ICAgICBpZiAoc3ltLT5hc3NvYy0+aW5mZXJyZWRfdHlwZSAmJiBzeW0tPnRz LnR5cGUgIT0gQlRfQ0xBU1MpCisJeworCSAgZ2ZjX2V4cHJlc3Npb25fcmFu ayAoc3ltLT5hc3NvYy0+dGFyZ2V0KTsKKwkgIHN5bS0+YXR0ci5kaW1lbnNp b24gPSBzeW0tPmFzc29jLT50YXJnZXQtPnJhbmsgPyAxIDogMDsKKwkgIGlm ICghc3ltLT5hdHRyLmRpbWVuc2lvbiAmJiBzeW0tPmFzKQorCSAgICBzeW0t PmFzID0gTlVMTDsKKwl9CisKKyAgICAgIGlmIChzeW0tPmF0dHIuZGltZW5z aW9uICYmIHRhcmdldC0+cmFuayA9PSAwKQorCXsKKwkgIGlmIChzeW0tPnRz LnR5cGUgIT0gQlRfQ0hBUkFDVEVSKQorCSAgICBnZmNfZXJyb3IgKCJBc3Nv Y2lhdGUtbmFtZSAlcXMgYXQgJUwgaXMgdXNlZCBhcyBhcnJheSIsCisJCSAg ICAgICBzeW0tPm5hbWUsICZzeW0tPmRlY2xhcmVkX2F0KTsKKwkgIHN5bS0+ YXR0ci5kaW1lbnNpb24gPSAwOworCSAgcmV0dXJuOworCX0KICAgICB9CiAK ICAgLyogV2UgY2Fubm90IGRlYWwgd2l0aCBjbGFzcyBzZWxlY3RvcnMgdGhh dCBuZWVkIHRlbXBvcmFyaWVzLiAgKi8KQEAgLTkzNTYsNyArOTU1Niw3IEBA IHJlc29sdmVfYXNzb2NfdmFyIChnZmNfc3ltYm9sKiBzeW0sIGJvb2wgcmVz b2x2ZV90YXJnZXQpCiAJICAgICBjb3JyZWN0IHRoaXMgbm93LiAgKi8KIAkg IGdmY190eXBlc3BlYyAqdHMgPSAmdGFyZ2V0LT50czsKIAkgIGdmY19yZWYg KnJlZjsKLQkgIGdmY19jb21wb25lbnQgKmM7CisKIAkgIGZvciAocmVmID0g dGFyZ2V0LT5yZWY7IHJlZiAhPSBOVUxMOyByZWYgPSByZWYtPm5leHQpCiAJ ICAgIHsKIAkgICAgICBzd2l0Y2ggKHJlZi0+dHlwZSkKQEAgLTkzNzQsMzIg Kzk1NzQsMTUgQEAgcmVzb2x2ZV9hc3NvY192YXIgKGdmY19zeW1ib2wqIHN5 bSwgYm9vbCByZXNvbHZlX3RhcmdldCkKIAkgICAgfQogCSAgLyogQ3JlYXRl IGEgc2NhbGFyIGluc3RhbmNlIG9mIHRoZSBjdXJyZW50IGNsYXNzIHR5cGUu ICBCZWNhdXNlIHRoZQogCSAgICAgcmFuayBvZiBhIGNsYXNzIGFycmF5IGdv ZXMgaW50byBpdHMgbmFtZSwgdGhlIHR5cGUgaGFzIHRvIGJlCi0JICAgICBy ZWJ1aWxkLiAgVGhlIGFsdGVybmF0aXZlIG9mIChyZS0pc2V0dGluZyBqdXN0 IHRoZSBhdHRyaWJ1dGVzCisJICAgICByZWJ1aWx0LiAgVGhlIGFsdGVybmF0 aXZlIG9mIChyZS0pc2V0dGluZyBqdXN0IHRoZSBhdHRyaWJ1dGVzCiAJICAg ICBhbmQgYXMgaW4gdGhlIGN1cnJlbnQgdHlwZSwgZGVzdHJveXMgdGhlIHR5 cGUgYWxzbyBpbiBvdGhlcgogCSAgICAgcGxhY2VzLiAgKi8KIAkgIGFzID0g TlVMTDsKIAkgIHN5bS0+dHMgPSAqdHM7CiAJICBzeW0tPnRzLnR5cGUgPSBC VF9DTEFTUzsKIAkgIGF0dHIgPSBDTEFTU19EQVRBIChzeW0pID8gQ0xBU1Nf REFUQSAoc3ltKS0+YXR0ciA6IHN5bS0+YXR0cjsKLQkgIGF0dHIuY2xhc3Nf b2sgPSAwOwotCSAgYXR0ci5hc3NvY2lhdGVfdmFyID0gMTsKLQkgIGF0dHIu ZGltZW5zaW9uID0gYXR0ci5jb2RpbWVuc2lvbiA9IDA7Ci0JICBhdHRyLmNs YXNzX3BvaW50ZXIgPSAxOwotCSAgaWYgKCFnZmNfYnVpbGRfY2xhc3Nfc3lt Ym9sICgmc3ltLT50cywgJmF0dHIsICZhcykpCi0JICAgIGdjY191bnJlYWNo YWJsZSAoKTsKLQkgIC8qIE1ha2Ugc3VyZSB0aGUgX3ZwdHIgaXMgc2V0LiAg Ki8KLQkgIGMgPSBnZmNfZmluZF9jb21wb25lbnQgKHN5bS0+dHMudS5kZXJp dmVkLCAiX3ZwdHIiLCB0cnVlLCB0cnVlLCBOVUxMKTsKLQkgIGlmIChjLT50 cy51LmRlcml2ZWQgPT0gTlVMTCkKLQkgICAgYy0+dHMudS5kZXJpdmVkID0g Z2ZjX2ZpbmRfZGVyaXZlZF92dGFiIChzeW0tPnRzLnUuZGVyaXZlZCk7Ci0J ICBDTEFTU19EQVRBIChzeW0pLT5hdHRyLnBvaW50ZXIgPSAxOwotCSAgQ0xB U1NfREFUQSAoc3ltKS0+YXR0ci5jbGFzc19wb2ludGVyID0gMTsKLQkgIGdm Y19zZXRfc3ltX3JlZmVyZW5jZWQgKHN5bS0+dHMudS5kZXJpdmVkKTsKLQkg IGdmY19jb21taXRfc3ltYm9sIChzeW0tPnRzLnUuZGVyaXZlZCk7Ci0JICAv KiBfdnB0ciBub3cgaGFzIHRoZSBfdnRhYiBpbiBpdCwgY2hhbmdlIGl0IHRv IHRoZSBfdnR5cGUuICAqLwotCSAgaWYgKGMtPnRzLnUuZGVyaXZlZC0+YXR0 ci52dGFiKQotCSAgICBjLT50cy51LmRlcml2ZWQgPSBjLT50cy51LmRlcml2 ZWQtPnRzLnUuZGVyaXZlZDsKLQkgIGMtPnRzLnUuZGVyaXZlZC0+bnMtPnR5 cGVzX3Jlc29sdmVkID0gMDsKLQkgIHJlc29sdmVfdHlwZXMgKGMtPnRzLnUu ZGVyaXZlZC0+bnMpOworCSAgZ2ZjX2NoYW5nZV9jbGFzcyAoJnN5bS0+dHMs ICZhdHRyLCBhcywgMCwgMCk7CisJICBzeW0tPmFzID0gTlVMTDsKIAl9CiAg ICAgfQogCkBAIC05NDQzLDYgKzk2MjYsMTQgQEAgcmVzb2x2ZV9hc3NvY192 YXIgKGdmY19zeW1ib2wqIHN5bSwgYm9vbCByZXNvbHZlX3RhcmdldCkKIAl9 CiAgICAgfQogCisgIGlmIChzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MKKyAg ICAgICYmIElTX0lORkVSUkVEX1RZUEUgKHRhcmdldCkKKyAgICAgICYmIHRh cmdldC0+dHMudHlwZSA9PSBCVF9ERVJJVkVECisgICAgICAmJiBDTEFTU19E QVRBIChzeW0pLT50cy51LmRlcml2ZWQgPT0gdGFyZ2V0LT50cy51LmRlcml2 ZWQKKyAgICAgICYmIHRhcmdldC0+cmVmICYmIHRhcmdldC0+cmVmLT5uZXh0 CisgICAgICAmJiB0YXJnZXQtPnJlZi0+bmV4dC0+dHlwZSA9PSBSRUZfQVJS QVkpCisgICAgdGFyZ2V0LT50cyA9IHRhcmdldC0+c3ltdHJlZS0+bi5zeW0t PnRzOworCiAgIC8qIElmIHRoZSB0YXJnZXQgaXMgYSBnb29kIGNsYXNzIG9i amVjdCwgc28gaXMgdGhlIGFzc29jaWF0ZSB2YXJpYWJsZS4gICovCiAgIGlm IChzeW0tPnRzLnR5cGUgPT0gQlRfQ0xBU1MgJiYgZ2ZjX2V4cHJfYXR0ciAo dGFyZ2V0KS5jbGFzc19vaykKICAgICBzeW0tPmF0dHIuY2xhc3Nfb2sgPSAx OwpkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vc3ltYm9sLmNjIGIvZ2NjL2Zv cnRyYW4vc3ltYm9sLmNjCmluZGV4IGE2MDc4YmM2MDhhLi5mNjY4MzFkZjE1 ZiAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vc3ltYm9sLmNjCisrKyBiL2dj Yy9mb3J0cmFuL3N5bWJvbC5jYwpAQCAtMjkxLDYgKzI5MSwxOSBAQCBib29s CiBnZmNfc2V0X2RlZmF1bHRfdHlwZSAoZ2ZjX3N5bWJvbCAqc3ltLCBpbnQg ZXJyb3JfZmxhZywgZ2ZjX25hbWVzcGFjZSAqbnMpCiB7CiAgIGdmY190eXBl c3BlYyAqdHM7CisgIGdmY19leHByICplOworCisgIC8qIENoZWNrIHRvIHNl ZSBpZiBhIGZ1bmN0aW9uIHNlbGVjdG9yIG9mIHVua25vd24gdHlwZSBjYW4g YmUgcmVzb2x2ZWQuICAqLworICBpZiAoc3ltLT5hc3NvYworICAgICAgJiYg KGUgPSBzeW0tPmFzc29jLT50YXJnZXQpCisgICAgICAmJiBlLT5leHByX3R5 cGUgPT0gRVhQUl9GVU5DVElPTikKKyAgICB7CisgICAgICBpZiAoZS0+dHMu dHlwZSA9PSBCVF9VTktOT1dOKQorCWdmY19yZXNvbHZlX2V4cHIgKGUpOwor ICAgICAgc3ltLT50cyA9IGUtPnRzOworICAgICAgaWYgKHN5bS0+dHMudHlw ZSAhPSBCVF9VTktOT1dOKQorCXJldHVybiB0cnVlOworICAgIH0KIAogICBp ZiAoc3ltLT50cy50eXBlICE9IEJUX1VOS05PV04pCiAgICAgZ2ZjX2ludGVy bmFsX2Vycm9yICgiZ2ZjX3NldF9kZWZhdWx0X3R5cGUoKTogc3ltYm9sIGFs cmVhZHkgaGFzIGEgdHlwZSIpOwpAQCAtMzA3LDcgKzMyMCw3IEBAIGdmY19z ZXRfZGVmYXVsdF90eXBlIChnZmNfc3ltYm9sICpzeW0sIGludCBlcnJvcl9m bGFnLCBnZmNfbmFtZXNwYWNlICpucykKIAkJICAgICAgICI7IGRpZCB5b3Ug bWVhbiAlcXM/IiwKIAkJICAgICAgIHN5bS0+bmFtZSwgJnN5bS0+ZGVjbGFy ZWRfYXQsIGd1ZXNzZWQpOwogCSAgZWxzZQotCSAgICBnZmNfZXJyb3IgKCJT eW1ib2wgJXFzIGF0ICVMIGhhcyBubyBJTVBMSUNJVCB0eXBlIiwKKwkgICAg Z2ZjX2Vycm9yICgiU3ltYm9sICVxcyBhdCAlTCBoYXMgbm8gSU1QTElDSVQg dHlwZShzeW1ib2wpIiwKIAkJICAgICAgIHN5bS0+bmFtZSwgJnN5bS0+ZGVj bGFyZWRfYXQpOwogCSAgc3ltLT5hdHRyLnVudHlwZWQgPSAxOyAvKiBFbnN1 cmUgd2Ugb25seSBnaXZlIGFuIGVycm9yIG9uY2UuICAqLwogCX0KQEAgLTI0 MDIsNiArMjQxNSw2NiBAQCBiYWQ6CiB9CiAKIAorLyogRmluZCBhbGwgZGVy aXZlZCB0eXBlcyBpbiB0aGUgdXBwZXJtb3N0IG5hbWVzcGFjZSB0aGF0IGhh dmUgYSBjb21wb25lbnQKKyAgIGEgY29tcG9uZW50IGNhbGxlZCBuYW1lIGFu ZCBzdGFzaCB0aGVtIGluIHRoZSBhc3NvYyBmaWVsZCBvZiBhbgorICAgYXNz b2NpYXRlIG5hbWUgdmFyaWFibGUuCisgICBUaGlzIGlzIHVzZWQgdG8gaW5m ZXIgdGhlIGRlcml2ZWQgdHlwZSBvZiBhbiBhc3NvY2lhdGUgbmFtZSwgd2hv c2Ugc2VsZWN0b3IKKyAgIGlzIGEgc2libGluZyBkZXJpdmVkIHR5cGUgZnVu Y3Rpb24gdGhhdCBoYXMgbm90IHlldCBiZWVuIHBhcnNlZC4gRWl0aGVyCisg ICB0aGUgZGVyaXZlZCB0eXBlIGlzIHVzZSBhc3NvY2lhdGVkIGluIGJvdGgg Y29udGFpbmVkIGFuZCBzaWJsaW5nIHByb2NlZHVyZXMKKyAgIG9yIGl0IGFw cGVhcnMgaW4gdGhlIHVwcGVybW9zdCBuYW1lc3BhY2UuICAqLworCitzdGF0 aWMgaW50IGN0cyA9IDA7CitzdGF0aWMgdm9pZAorZmluZF9kZXJpdmVkX3R5 cGVzIChnZmNfc3ltYm9sICpzeW0sIGdmY19zeW10cmVlICpzdCwgY29uc3Qg Y2hhciAqbmFtZSwKKwkJICAgIGJvb2wgY29udGFpbmVkKQoreworICBpZiAo c3QtPm4uc3ltICYmIHN0LT5uLnN5bS0+YXR0ci5mbGF2b3IgPT0gRkxfREVS SVZFRAorICAgICAgJiYgIXN0LT5uLnN5bS0+YXR0ci5pc19jbGFzcworICAg ICAgJiYgKChjb250YWluZWQgJiYgc3QtPm4uc3ltLT5hdHRyLnVzZV9hc3Nv YykgfHwgIWNvbnRhaW5lZCkKKyAgICAgICYmIGdmY19maW5kX2NvbXBvbmVu dCAoc3QtPm4uc3ltLCBuYW1lLCB0cnVlLCB0cnVlLCBOVUxMKSkKKyAgICB7 CisgICAgICAvKiBEbyB0aGUgc3Rhc2hpbmcuICAqLworICAgICAgY3RzKys7 CisgICAgICBpZiAoc3ltLT5hc3NvYy0+ZGVyaXZlZF90eXBlcykKKwlzdC0+ bi5zeW0tPmR0X25leHQgPSBzeW0tPmFzc29jLT5kZXJpdmVkX3R5cGVzOwor ICAgICAgc3ltLT5hc3NvYy0+ZGVyaXZlZF90eXBlcyA9IHN0LT5uLnN5bTsK KyAgICB9CisKKyAgaWYgKHN0LT5sZWZ0KQorICAgIGZpbmRfZGVyaXZlZF90 eXBlcyAoc3ltLCBzdC0+bGVmdCwgbmFtZSwgY29udGFpbmVkKTsKKworICBp ZiAoc3QtPnJpZ2h0KQorICAgIGZpbmRfZGVyaXZlZF90eXBlcyAoc3ltLCBz dC0+cmlnaHQsIG5hbWUsIGNvbnRhaW5lZCk7Cit9CisKK2ludAorZ2ZjX2Zp bmRfZGVyaXZlZF90eXBlcyAoZ2ZjX3N5bWJvbCAqc3ltLCBnZmNfbmFtZXNw YWNlICpucywgY29uc3QgY2hhciAqbmFtZSkKK3sKKyAgZ2ZjX25hbWVzcGFj ZSAqZW5jb21wYXNzaW5nID0gTlVMTDsKKyAgZ2NjX2Fzc2VydCAoc3ltLT5h c3NvYyk7CisKKyAgY3RzID0gMDsKKyAgd2hpbGUgKG5zLT5wYXJlbnQpCisg ICAgeworICAgICAgaWYgKCFucy0+cGFyZW50LT5wYXJlbnQgJiYgbnMtPnBy b2NfbmFtZQorCSAgJiYgKG5zLT5wcm9jX25hbWUtPmF0dHIuZnVuY3Rpb24g fHwgbnMtPnByb2NfbmFtZS0+YXR0ci5zdWJyb3V0aW5lKSkKKwllbmNvbXBh c3NpbmcgPSBuczsKKyAgICAgIG5zID0gbnMtPnBhcmVudDsKKyAgICB9CisK KyAgaWYgKCFucy0+Y29udGFpbmVkKQorICAgIHJldHVybiBjdHM7CisKKyAg LyogU2VhcmNoIHRoZSB0b3AgbGV2ZWwgbmFtZXNwYWNlIGZpcnN0LiAgKi8K KyAgZmluZF9kZXJpdmVkX3R5cGVzIChzeW0sIG5zLT5zeW1fcm9vdCwgbmFt ZSwgZmFsc2UpOworCisgIC8qIFRoZW4gdGhlIGVuY29tcGFzc2luZyBuYW1l c3BhY2UuICAqLworICBpZiAoZW5jb21wYXNzaW5nKQorICAgIGZpbmRfZGVy aXZlZF90eXBlcyAoc3ltLCBlbmNvbXBhc3NpbmctPnN5bV9yb290LCBuYW1l LCB0cnVlKTsKKworICByZXR1cm4gY3RzOworfQorCiAvKiBGaW5kIHRoZSBj b21wb25lbnQgd2l0aCB0aGUgZ2l2ZW4gbmFtZSBpbiB0aGUgdW5pb24gdHlw ZSBzeW1ib2wuCiAgICBJZiByZWYgaXMgbm90IE5VTEwgaXQgd2lsbCBiZSBz ZXQgdG8gdGhlIGNoYWluIG9mIGNvbXBvbmVudHMgdGhyb3VnaCB3aGljaAog ICAgdGhlIGNvbXBvbmVudCBjYW4gYWN0dWFsbHkgYmUgYWNjZXNzZWQuIFRo aXMgaXMgbmVjZXNzYXJ5IGZvciB1bmlvbnMgYmVjYXVzZQpkaWZmIC0tZ2l0 IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtZXhwci5jYyBiL2djYy9mb3J0cmFuL3Ry YW5zLWV4cHIuY2MKaW5kZXggZjQxODVkYjViN2YuLjNkYWM5ZDk5MGYwIDEw MDY0NAotLS0gYS9nY2MvZm9ydHJhbi90cmFucy1leHByLmNjCisrKyBiL2dj Yy9mb3J0cmFuL3RyYW5zLWV4cHIuY2MKQEAgLTMxMzQsNiArMzEzNCwxMCBA QCBnZmNfY29udl92YXJpYWJsZSAoZ2ZjX3NlICogc2UsIGdmY19leHByICog ZXhwcikKICAgICAgIGdjY19hc3NlcnQgKHNlLT5zdHJpbmdfbGVuZ3RoKTsK ICAgICB9CiAKKyAgLyogU29tZSBleHByZXNzaW9ucyBsZWFrIHRocm91Z2gg dGhhdCBoYXZlbid0IGJlZW4gZml4ZWQgdXAuICAqLworICBpZiAoSVNfSU5G RVJSRURfVFlQRSAoZXhwcikgJiYgZXhwci0+cmVmKQorICAgIGdmY19maXh1 cF9pbmZlcnJlZF90eXBlX3JlZnMgKGV4cHIpOworCiAgIGdmY190eXBlc3Bl YyAqdHMgPSAmc3ltLT50czsKICAgd2hpbGUgKHJlZikKICAgICB7CmRpZmYg LS1naXQgYS9nY2MvZm9ydHJhbi90cmFucy1zdG10LmNjIGIvZ2NjL2ZvcnRy YW4vdHJhbnMtc3RtdC5jYwppbmRleCA1MTdiN2FhYTg5OC4uYmY0ZjE4NzY5 NjkgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL3RyYW5zLXN0bXQuY2MKKysr IGIvZ2NjL2ZvcnRyYW4vdHJhbnMtc3RtdC5jYwpAQCAtMTc0Niw5ICsxNzQ2 LDkgQEAgdHJhbnNfYXNzb2NpYXRlX3ZhciAoZ2ZjX3N5bWJvbCAqc3ltLCBn ZmNfd3JhcHBlZF9ibG9jayAqYmxvY2spCiAgIGUgPSBzeW0tPmFzc29jLT50 YXJnZXQ7CiAKICAgY2xhc3NfdGFyZ2V0ID0gKGUtPmV4cHJfdHlwZSA9PSBF WFBSX1ZBUklBQkxFKQotCQkgICAgJiYgZS0+dHMudHlwZSA9PSBCVF9DTEFT UwotCQkgICAgJiYgKGdmY19pc19jbGFzc19zY2FsYXJfZXhwciAoZSkKLQkJ CXx8IGdmY19pc19jbGFzc19hcnJheV9yZWYgKGUsIE5VTEwpKTsKKwkJICAm JiBlLT50cy50eXBlID09IEJUX0NMQVNTCisJCSAgJiYgKGdmY19pc19jbGFz c19zY2FsYXJfZXhwciAoZSkKKwkJICAgICAgfHwgZ2ZjX2lzX2NsYXNzX2Fy cmF5X3JlZiAoZSwgTlVMTCkpOwogCiAgIHVubGltaXRlZCA9IFVOTElNSVRF RF9QT0xZIChlKTsKIApAQCAtMjE1NiwyNiArMjE1NiwzNiBAQCB0cmFuc19h c3NvY2lhdGVfdmFyIChnZmNfc3ltYm9sICpzeW0sIGdmY193cmFwcGVkX2Js b2NrICpibG9jaykKIAkgICAgewogCSAgICAgIHRyZWUgc3RtcDsKIAkgICAg ICB0cmVlIGR0bXA7CisJICAgICAgdHJlZSBjdG1wOwogCi0JICAgICAgc2Uu ZXhwciA9IGN0cmVlOworCSAgICAgIGN0bXAgPSBjdHJlZTsKIAkgICAgICBk dG1wID0gVFJFRV9UWVBFIChUUkVFX1RZUEUgKHN5bS0+YmFja2VuZF9kZWNs KSk7CiAJICAgICAgY3RyZWUgPSBnZmNfY3JlYXRlX3ZhciAoZHRtcCwgImNs YXNzIik7CiAKLQkgICAgICBzdG1wID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChz ZS5leHByKTsKKwkgICAgICBpZiAoSVNfSU5GRVJSRURfVFlQRSAoZSkKKwkJ ICAmJiAhR0ZDX0NMQVNTX1RZUEVfUCAoVFJFRV9UWVBFIChzZS5leHByKSkp CisJCXN0bXAgPSBzZS5leHByOworCSAgICAgIGVsc2UKKwkJc3RtcCA9IGdm Y19jbGFzc19kYXRhX2dldCAoY3RtcCk7CisKIAkgICAgICAvKiBDb2FycmF5 IHNjYWxhciBjb21wb25lbnQgZXhwcmVzc2lvbnMgY2FuIGVtZXJnZSBmcm9t CiAJCSB0aGUgZnJvbnQgZW5kIGFzIGFycmF5IGVsZW1lbnRzIG9mIHRoZSBf ZGF0YSBmaWVsZC4gICovCiAJICAgICAgaWYgKEdGQ19ERVNDUklQVE9SX1RZ UEVfUCAoVFJFRV9UWVBFIChzdG1wKSkpCiAJCXN0bXAgPSBnZmNfY29udl9k ZXNjcmlwdG9yX2RhdGFfZ2V0IChzdG1wKTsKKworCSAgICAgIGlmICghUE9J TlRFUl9UWVBFX1AgKFRSRUVfVFlQRSAoc3RtcCkpKQorCQlzdG1wID0gZ2Zj X2J1aWxkX2FkZHJfZXhwciAoTlVMTCwgc3RtcCk7CisKIAkgICAgICBkdG1w ID0gZ2ZjX2NsYXNzX2RhdGFfZ2V0IChjdHJlZSk7CiAJICAgICAgc3RtcCA9 IGZvbGRfY29udmVydCAoVFJFRV9UWVBFIChkdG1wKSwgc3RtcCk7CiAJICAg ICAgZ2ZjX2FkZF9tb2RpZnkgKCZzZS5wcmUsIGR0bXAsIHN0bXApOwotCSAg ICAgIHN0bXAgPSBnZmNfY2xhc3NfdnB0cl9nZXQgKHNlLmV4cHIpOworCSAg ICAgIHN0bXAgPSBnZmNfY2xhc3NfdnB0cl9nZXQgKGN0bXApOwogCSAgICAg IGR0bXAgPSBnZmNfY2xhc3NfdnB0cl9nZXQgKGN0cmVlKTsKIAkgICAgICBz dG1wID0gZm9sZF9jb252ZXJ0IChUUkVFX1RZUEUgKGR0bXApLCBzdG1wKTsK IAkgICAgICBnZmNfYWRkX21vZGlmeSAoJnNlLnByZSwgZHRtcCwgc3RtcCk7 CiAJICAgICAgaWYgKFVOTElNSVRFRF9QT0xZIChzeW0pKQogCQl7Ci0JCSAg c3RtcCA9IGdmY19jbGFzc19sZW5fZ2V0IChzZS5leHByKTsKKwkJICBzdG1w ID0gZ2ZjX2NsYXNzX2xlbl9nZXQgKGN0bXApOwogCQkgIGR0bXAgPSBnZmNf Y2xhc3NfbGVuX2dldCAoY3RyZWUpOwogCQkgIHN0bXAgPSBmb2xkX2NvbnZl cnQgKFRSRUVfVFlQRSAoZHRtcCksIHN0bXApOwogCQkgIGdmY19hZGRfbW9k aWZ5ICgmc2UucHJlLCBkdG1wLCBzdG1wKTsK --000000000000d749d4060e4a4374 Content-Type: text/x-fortran; charset="US-ASCII"; name="associate_64.f90" Content-Disposition: attachment; filename="associate_64.f90" Content-Transfer-Encoding: base64 Content-ID: X-Attachment-Id: f_lr2c6pfy1 ISB7IGRnLWRvIHJ1biB9CiEKISBUZXN0cyB0aGUgZml4IGZvciBQUjg5NjQ1 IGFuZCA5OTA2NSwgaW4gd2hpY2ggZGVyaXZlZCB0eXBlIG9yIGNsYXNzIGZ1 bmN0aW9ucywKISB1c2VkIGFzIGFzc29jaWF0ZSBzZWxlY3RvcnMgYW5kIHdo aWNoIHdlcmUgcGFyc2VkIGFmdGVyIHRoZSBjb250YWluaW5nIHNjb3BlCiEg b2YgdGhlIGFzc29jaWF0ZSBzdGF0ZW1lbnQsIGNhdXNlZCAibm8gSU1QTElD SVQgdHlwZSIgYW5kICJTeW50YXgiIGVycm9ycy4KIQohIENvbnRyaWJ1dGVk IGJ5IElhbiBIYXJ2ZXkgIDxpYW5faGFydmV5QGJpZ3BvbmQuY29tPgohCm1v ZHVsZSBtCiAgaW1wbGljaXQgbm9uZQogIHR5cGUgdAogICAgaW50ZWdlciA6 OiBpID0gMAogIGVuZCB0eXBlIHQKICBpbnRlZ2VyIDo6IGkgPSAwCiAgdHlw ZSh0KSwgcGFyYW1ldGVyIDo6IHRlc3RfYXJyYXkgKDIpID0gW3QoNDIpLHQo ODQpXSwgJgogICAgICAgICAgICAgICAgICAgICAgICB0ZXN0X3NjYWxhciA9 IHQoOTkpCmVuZCBtb2R1bGUgbQoKISBERVJJVkVEIFRZUEUgVkVSU0lPTiBP RiBUSEUgUFJPQkxFTSwgQVMgUkVQT1JURUQgSU4gVEhFIFBScwptb2R1bGUg dHlwZV9zZWxlY3RvcnMKICB1c2UgbQogIGltcGxpY2l0IG5vbmUKICBwcml2 YXRlCiAgcHVibGljIGZvbzEKY29udGFpbnMKISBTaW5jZSB0aGVzZSBmdW5j dGlvbnMgYXJlIHBhcnNlZCBmaXJzdCwgdGhlIHN5bWJvbHMgYXJlIGF2YWls YWJsZSBmb3IKISBwYXJzaW5nIGluICdmb28nLgogIGZ1bmN0aW9uIGJhcjEo KSByZXN1bHQocmVzKSAhIFRoZSBhcnJheSB2ZXJzaW9uIGNhdXNlZCBzeW50 YXggZXJyb3JzIGluIGZvbwogICAgdHlwZSh0KSwgYWxsb2NhdGFibGUgOjog cmVzKDopCiAgICBhbGxvY2F0ZSAocmVzLCBzb3VyY2UgPSB0ZXN0X2FycmF5 KQogIGVuZAogIGZ1bmN0aW9uIGJhcjIoKSByZXN1bHQocmVzKSAhIFNjYWxh ciBjbGFzcyBmdW5jdGlvbnMgd2VyZSBPSyAtIHRlc3QgYW55d2F5CiAgICB0 eXBlKHQpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAgIGFsbG9jYXRlIChyZXMs IHNvdXJjZSA9IHRlc3Rfc2NhbGFyKQogIGVuZAogIHN1YnJvdXRpbmUgZm9v MSgpCiEgRmlyc3QgdGhlIGFycmF5IHNlbGVjdG9yCiAgICBhc3NvY2lhdGUg KHZhcjEgPT4gYmFyMSgpKQogICAgICBpZiAoYW55ICh2YXIxJWkgLm5lLiB0 ZXN0X2FycmF5JWkpKSBzdG9wIDEKICAgICAgaWYgKHZhcjEoMiklaSAubmUu IHRlc3RfYXJyYXkoMiklaSkgc3RvcCAyCiAgICBlbmQgYXNzb2NpYXRlCiEg Tm93IHRoZSBzY2FsYXIgc2VsZWN0b3IKICAgIGFzc29jaWF0ZSAodmFyMiA9 PiBiYXIyKCkpCiAgICAgIGlmICh2YXIyJWkgLm5lLiB0ZXN0X3NjYWxhciVp KSBzdG9wIDMKICAgIGVuZCBhc3NvY2lhdGUKCiEgTm93IHRoZSBhcnJheSBz ZWxlY3RvciB0aGF0IG5lZWRlZCBmaXhpbmcgdXAgYmVjYXVzZSB0aGUgZnVu Y3Rpb24gZm9sbG93cy4uLi4KICAgIGFzc29jaWF0ZSAodmFyMSA9PiBiYXIz KCkpCiAgICAgIGlmIChhbnkgKHZhcjElaSAubmUuIHRlc3RfYXJyYXklaSkp IHN0b3AgNAogICAgICBpZiAodmFyMSgyKSVpIC5uZS4gdGVzdF9hcnJheSgy KSVpKSBzdG9wIDUKICAgIGVuZCBhc3NvY2lhdGUKISAuLi4uYW5kIGVxdWl2 YWxlbnQgc2NhbGFyIHNlbGVjdG9yCiAgICBhc3NvY2lhdGUgKHZhcjIgPT4g YmFyNCgpKQogICAgICBpZiAodmFyMiVpIC5uZS4gdGVzdF9zY2FsYXIlaSkg c3RvcCA2CiAgICBlbmQgYXNzb2NpYXRlCiAgZW5kIHN1YnJvdXRpbmUgZm9v MQoKISBUaGVzZSBmdW5jdGlvbnMgYXJlIHBhcnNlZCBhZnRlciAnZm9vJyBz byB0aGUgc3ltYm9scyB3ZXJlIG5vdCBhdmFpbGFibGUKISBmb3IgdGhlIHNl bGVjdG9ycyBhbmQgdGhlIGZpeHVwLCB0ZXN0ZWQgaGVyZSwgd2FzIG5lY2Vz c2FyeS4KICBmdW5jdGlvbiBiYXIzKCkgcmVzdWx0KHJlcykKICAgIGNsYXNz KHQpLCBhbGxvY2F0YWJsZSA6OiByZXMoOikKICAgIGFsbG9jYXRlIChyZXMs IHNvdXJjZSA9IHRlc3RfYXJyYXkpCiAgZW5kCgogIGZ1bmN0aW9uIGJhcjQo KSByZXN1bHQocmVzKQogICAgY2xhc3ModCksIGFsbG9jYXRhYmxlIDo6IHJl cwogICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0gdCg5OSkpCiAgZW5kCmVu ZCBtb2R1bGUgdHlwZV9zZWxlY3RvcnMKCiEgQ0xBU1MgVkVSU0lPTiBPRiBU SEUgUFJPQkxFTSwgV0hJQ0ggUkVRVUlSRUQgTU9TVCBPRiBUSEUgV09SSyEK bW9kdWxlIGNsYXNzX3NlbGVjdG9ycwogIHVzZSBtCiAgaW1wbGljaXQgbm9u ZQogIHByaXZhdGUKICBwdWJsaWMgZm9vMgpjb250YWlucwoKISBTaW5jZSB0 aGVzZSBmdW5jdGlvbnMgYXJlIHBhcnNlZCBmaXJzdCwgdGhlIHN5bWJvbHMg YXJlIGF2YWlsYWJsZSBmb3IKISBwYXJzaW5nIGluICdmb28nLgogIGZ1bmN0 aW9uIGJhcjEoKSByZXN1bHQocmVzKSAhIFRoZSBhcnJheSB2ZXJzaW9uIGNh dXNlZCBzeW50YXggZXJyb3JzIGluIGZvbwogICAgY2xhc3ModCksIGFsbG9j YXRhYmxlIDo6IHJlcyg6KQogICAgYWxsb2NhdGUgKHJlcywgc291cmNlID0g dGVzdF9hcnJheSkKICBlbmQKCiAgZnVuY3Rpb24gYmFyMigpIHJlc3VsdChy ZXMpICEgU2NhbGFyIGNsYXNzIGZ1bmN0aW9ucyB3ZXJlIE9LIC0gdGVzdCBh bnl3YXkKICAgIGNsYXNzKHQpLCBhbGxvY2F0YWJsZSA6OiByZXMKICAgIGFs bG9jYXRlIChyZXMsIHNvdXJjZSA9IHQoOTkpKQogIGVuZAoKICBzdWJyb3V0 aW5lIGZvbzIoKQohIEZpcnN0IHRoZSBhcnJheSBzZWxlY3RvcgogICAgYXNz b2NpYXRlICh2YXIxID0+IGJhcjEoKSkKICAgICAgaWYgKGFueSAodmFyMSVp IC5uZS4gdGVzdF9hcnJheSVpKSkgc3RvcCA3CiAgICAgIGlmICh2YXIxKDIp JWkgLm5lLiB0ZXN0X2FycmF5KDIpJWkpIHN0b3AgOAogICAgICBzZWxlY3Qg dHlwZSAoeCA9PiB2YXIxKQogICAgICAgIHR5cGUgaXMgKHQpCiAgICAgICAg ICBpZiAoYW55ICh4JWkgLm5lLiB0ZXN0X2FycmF5JWkpKSBzdG9wIDkKICAg ICAgICAgIGlmICh4KDEpJWkgLm5lLiB0ZXN0X2FycmF5KDEpJWkpIHN0b3Ag MTAKICAgICAgICBjbGFzcyBkZWZhdWx0CiAgICAgICAgICBzdG9wIDExCiAg ICAgIGVuZCBzZWxlY3QKICAgIGVuZCBhc3NvY2lhdGUKCiEgTm93IHNjYWxh ciBzZWxlY3RvcgogICAgYXNzb2NpYXRlICh2YXIyID0+IGJhcjIoKSkKICAg ICAgc2VsZWN0IHR5cGUgKHogPT4gdmFyMikKICAgICAgICB0eXBlIGlzICh0 KQogICAgICAgICAgaWYgKHolaSAubmUuIHRlc3Rfc2NhbGFyJWkpIHN0b3Ag MTIKICAgICAgICBjbGFzcyBkZWZhdWx0CiAgICAgICAgICBzdG9wIDEzCiAg ICAgIGVuZCBzZWxlY3QKICAgIGVuZCBhc3NvY2lhdGUKCiEgVGhpcyBpcyB0 aGUgYXJyYXkgc2VsZWN0b3IgdGhhdCBuZWVkZWQgdGhlIGZpeHVwLgogICAg YXNzb2NpYXRlICh2YXIxID0+IGJhcjMoKSkKICAgICAgaWYgKGFueSAodmFy MSVpIC5uZS4gdGVzdF9hcnJheSVpKSkgc3RvcCAxNAogICAgICBpZiAodmFy MSgyKSVpIC5uZS4gdGVzdF9hcnJheSgyKSVpKSBzdG9wIDE1CiAgICAgIHNl bGVjdCB0eXBlICh4ID0+IHZhcjEpCiAgICAgICAgdHlwZSBpcyAodCkKICAg ICAgICAgIGlmIChhbnkgKHglaSAubmUuIHRlc3RfYXJyYXklaSkpIHN0b3Ag MTYKICAgICAgICAgIGlmICh4KDEpJWkgLm5lLiB0ZXN0X2FycmF5KDEpJWkp IHN0b3AgMTcKICAgICAgICBjbGFzcyBkZWZhdWx0CiAgICAgICAgICBzdG9w IDE4CiAgICAgIGVuZCBzZWxlY3QKICAgIGVuZCBhc3NvY2lhdGUKCiEgTm93 IHRoZSBlcXVpdmFsZW50IHNjYWxhciBzZWxlY3RvcgogICAgYXNzb2NpYXRl ICh2YXIyID0+IGJhcjQoKSkKICAgICAgc2VsZWN0IHR5cGUgKHogPT4gdmFy MikKICAgICAgICB0eXBlIGlzICh0KQogICAgICAgICAgaWYgKHolaSAubmUu IHRlc3Rfc2NhbGFyJWkpIHN0b3AgMTkKICAgICAgICBjbGFzcyBkZWZhdWx0 CiAgICAgICAgICBzdG9wIDIwCiAgICAgIGVuZCBzZWxlY3QKICAgIGVuZCBh c3NvY2lhdGUKCiAgZW5kIHN1YnJvdXRpbmUgZm9vMgoKISBUaGVzZSBmdW5j dGlvbnMgYXJlIHBhcnNlZCBhZnRlciAnZm9vJyBzbyB0aGUgc3ltYm9scyB3 ZXJlIG5vdCBhdmFpbGFibGUKISBmb3IgdGhlIHNlbGVjdG9ycyBhbmQgdGhl IGZpeHVwLCB0ZXN0ZWQgaGVyZSwgd2FzIG5lY2Vzc2FyeS4KICBmdW5jdGlv biBiYXIzKCkgcmVzdWx0KHJlcykKICAgIGNsYXNzKHQpLCBhbGxvY2F0YWJs ZSA6OiByZXMoOikKICAgIGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHRlc3Rf YXJyYXkpCiAgZW5kCgogIGZ1bmN0aW9uIGJhcjQoKSByZXN1bHQocmVzKQog ICAgY2xhc3ModCksIGFsbG9jYXRhYmxlIDo6IHJlcwogICAgYWxsb2NhdGUg KHJlcywgc291cmNlID0gdCg5OSkpCiAgZW5kCmVuZCBtb2R1bGUgY2xhc3Nf c2VsZWN0b3JzCgohIFRIRVNFIFRFU1RTIENBVVNFRCBQUk9CTEVNUyBEVVJJ TkcgREVWRUxPUE1FTlQgRk9SIEJPVEggUEFSU0lORyBPUkRFUlMuCm1vZHVs ZSBwcm9ibGVtX3NlbGVjdG9ycwogIGltcGxpY2l0IG5vbmUKICBwcml2YXRl CiAgcHVibGljIGZvbzMsIGZvbzQKICB0eXBlIHQKICAgIGludGVnZXIgOjog aQogIGVuZCB0eXBlIHQKICB0eXBlIHMKICAgIGludGVnZXIgOjogaQogICAg dHlwZSh0KSA6OiBkdAogIGVuZCB0eXBlIHMKICB0eXBlKHQpLCBwYXJhbWV0 ZXIgOjogdGVzdF9hcnJheSAoMikgPSBbdCg0MiksdCg4NCldLCAmCiAgICAg ICAgICAgICAgICAgICAgICAgIHRlc3Rfc2NhbGFyID0gdCg5OSkKICB0eXBl KHMpLCBwYXJhbWV0ZXIgOjogdGVzdF9zYXJyYXkgKDIpID0gW3MoMTQyLHQo NDIpKSxzKDE4NCx0KDg0KSldCmNvbnRhaW5zCgogIHN1YnJvdXRpbmUgZm9v MygpCiAgICBpbnRlZ2VyIDo6IGkKICAgIGJsb2NrCiAgICAgIGFzc29jaWF0 ZSAodmFyMSA9PiBiYXI3KCkpCiAgICAgICAgaWYgKGFueSAodmFyMSVpIC5u ZS4gdGVzdF9hcnJheSVpKSkgc3RvcCAyMQogICAgICAgIGlmICh2YXIxKDIp JWkgLm5lLiB0ZXN0X2FycmF5KDIpJWkpIHN0b3AgMjIKICAgICAgICBhc3Nv Y2lhdGUgKHogPT4gdmFyMSgxKSVpKQogICAgICAgICAgIGlmICh6IC5uZS4g NDIpIHN0b3AgMjMKICAgICAgICBlbmQgYXNzb2NpYXRlCiAgICBlbmQgYXNz b2NpYXRlCiAgICBlbmQgYmxvY2sKCiAgICBhc3NvY2lhdGUgKHZhcjIgPT4g YmFyOCgpKQogICAgICBpID0gdmFyMigyKSVpCiAgICAgIGFzc29jaWF0ZSAo dmFyMyA9PiB2YXIyJWR0KQogICAgICAgIGlmIChhbnkgKHZhcjMlaSAubmUu IHRlc3Rfc2FycmF5JWR0JWkpKSBzdG9wIDI0CiAgICAgIGVuZCBhc3NvY2lh dGUKICAgICAgYXNzb2NpYXRlICh2YXI0ID0+IHZhcjIoMikpCiAgICAgICAg aWYgKHZhcjQlaSAubmUuIDE4NCkgc3RvcCAyNQogICAgICBlbmQgYXNzb2Np YXRlCiAgICBlbmQgYXNzb2NpYXRlCiAgZW5kIHN1YnJvdXRpbmUgZm9vMwoK ICBmdW5jdGlvbiBiYXI3KCkgcmVzdWx0KHJlcykKICAgIHR5cGUodCksIGFs bG9jYXRhYmxlIDo6IHJlcyg6KQogICAgYWxsb2NhdGUgKHJlcywgc291cmNl ID0gdGVzdF9hcnJheSkKICBlbmQKCiAgZnVuY3Rpb24gYmFyOCgpIHJlc3Vs dChyZXMpCiAgICB0eXBlKHMpLCBhbGxvY2F0YWJsZSA6OiByZXMoOikKICAg IGFsbG9jYXRlIChyZXMsIHNvdXJjZSA9IHRlc3Rfc2FycmF5KQogIGVuZAoK ICBzdWJyb3V0aW5lIGZvbzQoKQogICAgaW50ZWdlciA6OiBpCiAgICBibG9j awogICAgICBhc3NvY2lhdGUgKHZhcjEgPT4gYmFyNygpKQogICAgICAgIGlm IChhbnkgKHZhcjElaSAubmUuIHRlc3RfYXJyYXklaSkpIHN0b3AgMjYKICAg ICAgICBpZiAodmFyMSgyKSVpIC5uZS4gdGVzdF9hcnJheSgyKSVpKSBzdG9w IDI3CiAgICAgICAgYXNzb2NpYXRlICh6ID0+IHZhcjEoMSklaSkKICAgICAg ICAgICBpZiAoeiAubmUuIDQyKSBzdG9wIDI4CiAgICAgICAgZW5kIGFzc29j aWF0ZQogICAgZW5kIGFzc29jaWF0ZQogICAgZW5kIGJsb2NrCgogICAgYXNz b2NpYXRlICh2YXIyID0+IGJhcjgoKSkKICAgICAgaSA9IHZhcjIoMiklaQog ICAgICBhc3NvY2lhdGUgKHZhcjMgPT4gdmFyMiVkdCkKICAgICAgICBpZiAo YW55ICh2YXIzJWkgLm5lLiB0ZXN0X3NhcnJheSVkdCVpKSkgc3RvcCAyOQog ICAgICBlbmQgYXNzb2NpYXRlCiAgICAgIGFzc29jaWF0ZSAodmFyNCA9PiB2 YXIyKDIpKQogICAgICAgIGlmICh2YXI0JWkgLm5lLiAxODQpIHN0b3AgMzAK ICAgICAgZW5kIGFzc29jaWF0ZQogICAgZW5kIGFzc29jaWF0ZQogIGVuZCBz dWJyb3V0aW5lIGZvbzQKCmVuZCBtb2R1bGUgcHJvYmxlbV9zZWxlY3RvcnMK Cm1vZHVsZSBtb3JlX3Byb2JsZW1fc2VsZWN0b3JzCiAgaW1wbGljaXQgbm9u ZQogIHByaXZhdGUKICBwdWJsaWMgZm9vNSwgZm9vNgogIHR5cGUgdAogICAg aW50ZWdlciA6OiBpID0gMAogIGVuZCB0eXBlIHQKICB0eXBlIHMKICAgIGlu dGVnZXIgOjogaSA9IDAKICAgIHR5cGUodCkgOjogZHQKICBlbmQgdHlwZSBz CmNvbnRhaW5zCiEgSW4gdGhpcyB2ZXJzaW9uLCB0aGUgb3JkZXIgb2YgZGVj bGFyYXRpb25zIG9mICd0JyBhbmQgJ3MnIGlzIHN1Y2ggdGhhdAohIHBhcnNp bmcgdmFyJWkgc2V0cyB0aGUgdHlwZSBvZiB2YXIgdG8gJ3QnIGFuZCB0aGlz IGlzIGNvcnJlY3RlZCB0byAncycKISBvbiBwYXJzaW5nIHZhciVkdCVpCiAg c3Vicm91dGluZSBmb281KCkKICAgIGFzc29jaWF0ZSAodmFyMyA9PiBiYXIz KCkpCiAgICAgIGlmICh2YXIzJWkgLm5lLiA0Mikgc3RvcCAzMQogICAgICBp ZiAodmFyMyVkdCVpIC5uZS4gODQpIHN0b3AgMzIKICAgIGVuZCBhc3NvY2lh dGUKCiEgUmVwZWF0IHdpdGggY2xhc3MgdmVyc2lvbgogICAgYXNzb2NpYXRl ICh2YXI0ID0+IGJhcjQoKSkKICAgICAgaWYgKHZhcjQlaSAubmUuIDg0KSBz dG9wIDMzCiAgICAgIGlmICh2YXI0JWR0JWkgLm5lLiAxNjgpIHN0b3AgMzQK ICAgICAgc2VsZWN0IHR5cGUgKHggPT4gdmFyNCkKICAgICAgICB0eXBlIGlz IChzKQogICAgICAgICAgaWYgKHglaSAubmUuIHZhcjQlaSkgc3RvcCAzNQog ICAgICAgICAgaWYgKHglZHQlaSAubmUuIHZhcjQlZHQlaSkgc3RvcCAzNgog ICAgICAgIGNsYXNzIGRlZmF1bHQKICAgICAgICAgIHN0b3AgMzcKICAgICAg ZW5kIHNlbGVjdAogICAgZW5kIGFzc29jaWF0ZQoKISBEaXR0byB3aXRoIG5v IHR5cGUgY29tcG9uZW50IGNsdWVzIGZvciBzZWxlY3QgdHlwZQogICAgYXNz b2NpYXRlICh2YXI1ID0+IGJhcjQoKSkKICAgICAgc2VsZWN0IHR5cGUgKHog PT4gdmFyNSkKICAgICAgICB0eXBlIGlzIChzKQogICAgICAgICAgaWYgKHol aSAubmUuIDg0KSBzdG9wIDM4CiAgICAgICAgICBpZiAoeiVkdCVpIC5uZS4g MTY4KSBzdG9wIDM5CiAgICAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgICAg c3RvcCA0MAogICAgICBlbmQgc2VsZWN0CiAgICBlbmQgYXNzb2NpYXRlCiAg ZW5kIHN1YnJvdXRpbmUgZm9vNQoKISBOb3cgdGhlIGFycmF5IHZlcnNpb25z CiAgc3Vicm91dGluZSBmb282KCkKICAgIGNsYXNzKHMpLCBhbGxvY2F0YWJs ZSA6OiBlbGVtCiAgICBhc3NvY2lhdGUgKHZhcjYgPT4gYmFyNSgpKQogICAg ICBpZiAodmFyNigxKSVpIC5uZS4gNDIpIHN0b3AgNDEKICAgICAgaWYgKGFu eSAodmFyNiVkdCVpIC5uZS4gWzg0XSkpIHN0b3AgNDIKICAgIGVuZCBhc3Nv Y2lhdGUKCiEgQ2xhc3MgdmVyc2lvbiB3aXRoIGFuIGFzc2lnbm1lbnQgdG8g YSBuYW1lZCB2YXJpYWJsZQogICAgYXNzb2NpYXRlICh2YXI3ID0+IGJhcjYo KSkKICAgICAgZWxlbSA9IHZhcjcoMikKICAgICAgaWYgKGFueSAodmFyNyVp IC5uZS4gWzg0LCAxNjhdKSkgc3RvcCA0MwogICAgICBpZiAoYW55ICh2YXI3 JWR0JWkgLm5lLiBbMTY4LCAzMzZdKSkgc3RvcCA0NAogICAgZW5kIGFzc29j aWF0ZQogICAgaWYgKGVsZW0laSAubmUuIDE2OCkgc3RvcCA0NQogICAgaWYg KGVsZW0lZHQlaSAubmUuIDMzNikgc3RvcCA0NgoKICAgIHNlbGVjdCB0eXBl ICh6ID0+IGVsZW0pCiAgICAgIHR5cGUgaXMgKHMpCiAgICAgICAgaWYgKHol aSAubmUuIDE2OCkgc3RvcCA0NwogICAgICAgIGlmICh6JWR0JWkgLm5lLiAz MzYpIHN0b3AgNDgKICAgICAgY2xhc3MgZGVmYXVsdAogICAgICAgIHN0b3Ag NDkKICAgIGVuZCBzZWxlY3QKCiEgQXJyYXkgdmVyc2lvbiB3aXRob3V0IHR5 cGUgY2x1ZXMgYmVmb3JlIHNlbGVjdCB0eXBlCiAgICBhc3NvY2lhdGUgKHZh cjggPT4gYmFyNigpKQogICAgICBzZWxlY3QgdHlwZSAoeiA9PiB2YXI4KQog ICAgICAgIHR5cGUgaXMgKHMpCiAgICAgICAgICBpZiAoYW55ICh6JWkgLm5l LiBbODQsMTY4XSkpIHN0b3AgNTAKICAgICAgICAgIGlmIChhbnkgKHolZHQl aSAubmUuIFsxNjgsMzM2XSkpIHN0b3AgNTEKICAgICAgICBjbGFzcyBkZWZh dWx0CiAgICAgICAgICBzdG9wIDUyCiAgICAgIGVuZCBzZWxlY3QKICAgIGVu ZCBhc3NvY2lhdGUKICBlbmQgc3Vicm91dGluZSBmb282CgogIHR5cGUocykg ZnVuY3Rpb24gYmFyMygpCiAgICBiYXIzPSBzKDQyLCB0KDg0KSkKICBlbmQK CiAgZnVuY3Rpb24gYmFyNCgpIHJlc3VsdChyZXMpCiAgICBjbGFzcyhzKSwg YWxsb2NhdGFibGUgOjogcmVzCiAgICByZXMgPSBzKDg0LCB0KDE2OCkpCiAg ZW5kCgogIGZ1bmN0aW9uIGJhcjUoKSByZXN1bHQgKHJlcykKICAgIHR5cGUo cyksIGFsbG9jYXRhYmxlIDo6IHJlcyg6KQogICAgcmVzID0gW3MoNDIsIHQo ODQpKV0KICBlbmQKCiAgZnVuY3Rpb24gYmFyNigpIHJlc3VsdCAocmVzKQog ICAgY2xhc3MocyksIGFsbG9jYXRhYmxlIDo6IHJlcyg6KQogICAgcmVzID0g W3MoODQsIHQoMTY4KSkscygxNjgsIHQoMzM2KSldCiAgZW5kCgplbmQgbW9k dWxlIG1vcmVfcHJvYmxlbV9zZWxlY3RvcnMKCnByb2dyYW0gdGVzdAogIHVz ZSB0eXBlX3NlbGVjdG9ycwogIHVzZSBjbGFzc19zZWxlY3RvcnMKICB1c2Ug cHJvYmxlbV9zZWxlY3RvcnMKICB1c2UgbW9yZV9wcm9ibGVtX3NlbGVjdG9y cwogIGNhbGwgZm9vMSgpCiAgY2FsbCBmb28yKCkKICBjYWxsIGZvbzMoKQog IGNhbGwgZm9vNCgpCiAgY2FsbCBmb281KCkKICBjYWxsIGZvbzYoKQplbmQg cHJvZ3JhbSB0ZXN0Cg== --000000000000d749d4060e4a4374--