From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa1.mentor.iphmx.com (esa1.mentor.iphmx.com [68.232.129.153]) by sourceware.org (Postfix) with ESMTPS id 44DDF3858C52; Fri, 13 May 2022 20:52:03 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 44DDF3858C52 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com X-IronPort-AV: E=Sophos;i="5.91,223,1647331200"; d="diff'?scan'208";a="78517727" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa1.mentor.iphmx.com with ESMTP; 13 May 2022 12:52:01 -0800 IronPort-SDR: yoKXYG5PDjP64cT1a30CAyExcW1xFOKIYx27u0SifpDLBOuDs3L2k+bogG9/gVVU6TOPLFHWOd 4OqHSH/tE2VZEElPpe5xlDQ6mwiEr2b1VMLFG56cJpnAYyfMTHd3ZqA2Gq8sXu6W34/XbnJYaJ jFFthADgPC8fllqLVOakWH4esD5i3CL1WQXsjfoOejxDoRHoyfAx6B/hT/5dnzeKc7Pu282Pym o9JmRNYfq/9iBkiPhW/Q0MJ/Z88uQukq0ZXDH0B658Gl38Qy2n9QELzrv97AUgL8s6f8xmkdm1 MII= Content-Type: multipart/mixed; boundary="------------019ZapXtndOHazq9jdk1zedr" Message-ID: Date: Fri, 13 May 2022 22:51:56 +0200 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.9.0 Content-Language: en-US To: gcc-patches , fortran , Jakub Jelinek From: Tobias Burnus Subject: [Patch] OpenMP: Add omp_all_memory support to Fortran X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-06.mgc.mentorg.com (139.181.222.6) To svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) X-Spam-Status: No, score=-11.4 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, SPF_HELO_PASS, SPF_PASS, TXREP, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on server2.sourceware.org X-BeenThere: fortran@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Fortran mailing list List-Unsubscribe: , List-Archive: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 13 May 2022 20:52:06 -0000 --------------019ZapXtndOHazq9jdk1zedr Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: quoted-printable This adds omp_all_memory handling to Fortran, following C/C++ and shameless= ly coping the C testcases and adapting them to Fortran. OK? Tobias ----------------- Siemens Electronic Design Automation GmbH; Anschrift: Arnulfstra=C3=9Fe 201= , 80634 M=C3=BCnchen; Gesellschaft mit beschr=C3=A4nkter Haftung; Gesch=C3= =A4ftsf=C3=BChrer: Thomas Heurung, Frank Th=C3=BCrauf; Sitz der Gesellschaf= t: M=C3=BCnchen; Registergericht M=C3=BCnchen, HRB 106955 --------------019ZapXtndOHazq9jdk1zedr Content-Type: text/x-patch; charset="UTF-8"; name="omp_all_mem-fortran.diff" Content-Disposition: attachment; filename="omp_all_mem-fortran.diff" Content-Transfer-Encoding: base64 T3Blbk1QOiBBZGQgb21wX2FsbF9tZW1vcnkgc3VwcG9ydCB0byBGb3J0cmFuCgpGb3J0cmFu IHBhcnQgdG8gdGhlIEMvQysrL2JhY2tlbmQgaW1wbGVtZW50YXRpb24KcjEzLTMzNy1nN2Y3 ODc4M2RiZWRjYTAxODNkMTkzZTQ3NTI2MmNhM2M0ODlmZDM2NQoKZ2NjL2ZvcnRyYW4vQ2hh bmdlTG9nOgoKCSogZHVtcC1wYXJzZS10cmVlLmNjIChzaG93X29tcF9uYW1lbGlzdCk6IEhh bmRsZSBvbXBfYWxsX21lbW9yeS4KCSogb3Blbm1wLmNjIChnZmNfbWF0Y2hfb21wX3Zhcmlh YmxlX2xpc3QsIGdmY19tYXRjaF9vbXBfZGVwZW5kX3NpbmssCglnZmNfbWF0Y2hfb21wX2Ns YXVzZXMsIHJlc29sdmVfb21wX2NsYXVzZXMpOiBMaWtld2lzZS4KCSogdHJhbnMtb3Blbm1w LmNjIChnZmNfdHJhbnNfb21wX2NsYXVzZXMsIGdmY190cmFuc19vbXBfZGVwb2JqKToKCUxp a2V3aXNlLgoJKiByZXNvbHZlLmNjIChyZXNvbHZlX3N5bWJvbCk6IFJlamVjdCBpdCBhcyBz eW1ib2wuCgpsaWJnb21wL0NoYW5nZUxvZzoKCgkqIGxpYmdvbXAudGV4aSAoT3Blbk1QIDUu MSk6IFNldCBvbXBfYWxsX21lbW9yeSB0byAnWScuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmZv cnRyYW4vZGVwZW5kLTUuZjkwOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuZm9y dHJhbi9kZXBlbmQtNi5mOTA6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5mb3J0 cmFuL2RlcGVuZC03LmY5MDogTmV3IHRlc3QuCgpnY2MvdGVzdHN1aXRlL0NoYW5nZUxvZzoK CgkqIGdmb3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9yeS0xLmY5MDogTmV3IHRlc3QuCgkqIGdm b3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9yeS0yLmY5MDogTmV3IHRlc3QuCgkqIGdmb3J0cmFu LmRnL2dvbXAvYWxsLW1lbW9yeS0zLmY5MDogTmV3IHRlc3QuCgogZ2NjL2ZvcnRyYW4vZHVt cC1wYXJzZS10cmVlLmNjICAgICAgICAgICAgICAgICAgfCAgIDIgKy0KIGdjYy9mb3J0cmFu L29wZW5tcC5jYyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgIDc5ICsrKysrKysrKysr Ky0tLQogZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYyAgICAgICAgICAgICAgICAgICAgICAgICAg fCAgIDcgKysKIGdjYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYyAgICAgICAgICAgICAgICAg ICAgIHwgIDEwICstCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9y eS0xLmY5MCB8ICA1MSArKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dv bXAvYWxsLW1lbW9yeS0yLmY5MCB8ICA1MiArKysrKysrKysrCiBnY2MvdGVzdHN1aXRlL2dm b3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9yeS0zLmY5MCB8ICAyNCArKysrKwogbGliZ29tcC9s aWJnb21wLnRleGkgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDQgKy0KIGxpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNS5mOTAgIHwgMTIxICsrKysr KysrKysrKysrKysrKysrKysrCiBsaWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmZvcnRyYW4v ZGVwZW5kLTYuZjkwICB8IDEyNiArKysrKysrKysrKysrKysrKysrKysrKysKIGxpYmdvbXAv dGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNy5mOTAgIHwgMTEzICsrKysrKysr KysrKysrKysrKysrKwogMTEgZmlsZXMgY2hhbmdlZCwgNTY3IGluc2VydGlvbnMoKyksIDIy IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jYyBiL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJlZS5jYwppbmRleCAzNjM1NDYwYmZm ZC4uYTMyOTkyMDM1YTIgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL2R1bXAtcGFyc2UtdHJl ZS5jYworKysgYi9nY2MvZm9ydHJhbi9kdW1wLXBhcnNlLXRyZWUuY2MKQEAgLTE0MjMsNyAr MTQyMyw3IEBAIHNob3dfb21wX25hbWVsaXN0IChpbnQgbGlzdF90eXBlLCBnZmNfb21wX25h bWVsaXN0ICpuKQogCSAgY2FzZSBPTVBfTElORUFSX1VWQUw6IGZwdXRzICgidXZhbCgiLCBk dW1wZmlsZSk7IGJyZWFrOwogCSAgZGVmYXVsdDogYnJlYWs7CiAJICB9Ci0gICAgICBmcHJp bnRmIChkdW1wZmlsZSwgIiVzIiwgbi0+c3ltLT5uYW1lKTsKKyAgICAgIGZwcmludGYgKGR1 bXBmaWxlLCAiJXMiLCBuLT5zeW0gPyBuLT5zeW0tPm5hbWUgOiAib21wX2FsbF9tZW1vcnki KTsKICAgICAgIGlmIChsaXN0X3R5cGUgPT0gT01QX0xJU1RfTElORUFSICYmIG4tPnUubGlu ZWFyX29wICE9IE9NUF9MSU5FQVJfREVGQVVMVCkKIAlmcHV0YyAoJyknLCBkdW1wZmlsZSk7 CiAgICAgICBpZiAobi0+ZXhwcikKZGlmZiAtLWdpdCBhL2djYy9mb3J0cmFuL29wZW5tcC5j YyBiL2djYy9mb3J0cmFuL29wZW5tcC5jYwppbmRleCA0ZDNmY2M4YmI3OC4uNGRmMWY3NjFj NWEgMTAwNjQ0Ci0tLSBhL2djYy9mb3J0cmFuL29wZW5tcC5jYworKysgYi9nY2MvZm9ydHJh bi9vcGVubXAuY2MKQEAgLTI5NiwxNCArMjk2LDE3IEBAIGdmY19maW5kX29tcF91ZHIgKGdm Y19uYW1lc3BhY2UgKm5zLCBjb25zdCBjaGFyICpuYW1lLCBnZmNfdHlwZXNwZWMgKnRzKQog fQogCiAKLS8qIE1hdGNoIGEgdmFyaWFibGUvY29tbW9uIGJsb2NrIGxpc3QgYW5kIGNvbnN0 cnVjdCBhIG5hbWVsaXN0IGZyb20gaXQuICAqLworLyogTWF0Y2ggYSB2YXJpYWJsZS9jb21t b24gYmxvY2sgbGlzdCBhbmQgY29uc3RydWN0IGEgbmFtZWxpc3QgZnJvbSBpdDsKKyAgIGlm IGhhc19hbGxfbWVtb3J5ICE9IE5VTEwsICpoYXNfYWxsX21lbW9yeSBpcyBzZXQgYW5kIG9t cF9hbGxfbWVtb3J5CisgICB5aWVsZHMgYSBsaXN0LT5zeW0gTlVMTCBlbnRyeS4gKi8KIAog c3RhdGljIG1hdGNoCiBnZmNfbWF0Y2hfb21wX3ZhcmlhYmxlX2xpc3QgKGNvbnN0IGNoYXIg KnN0ciwgZ2ZjX29tcF9uYW1lbGlzdCAqKmxpc3QsCiAJCQkgICAgIGJvb2wgYWxsb3dfY29t bW9uLCBib29sICplbmRfY29sb24gPSBOVUxMLAogCQkJICAgICBnZmNfb21wX25hbWVsaXN0 ICoqKmhlYWRwID0gTlVMTCwKIAkJCSAgICAgYm9vbCBhbGxvd19zZWN0aW9ucyA9IGZhbHNl LAotCQkJICAgICBib29sIGFsbG93X2Rlcml2ZWQgPSBmYWxzZSkKKwkJCSAgICAgYm9vbCBh bGxvd19kZXJpdmVkID0gZmFsc2UsCisJCQkgICAgIGJvb2wgKmhhc19hbGxfbWVtb3J5ID0g TlVMTCkKIHsKICAgZ2ZjX29tcF9uYW1lbGlzdCAqaGVhZCwgKnRhaWwsICpwOwogICBsb2N1 cyBvbGRfbG9jLCBjdXJfbG9jOwpAQCAtMzE1LDcgKzMxOCw4IEBAIGdmY19tYXRjaF9vbXBf dmFyaWFibGVfbGlzdCAoY29uc3QgY2hhciAqc3RyLCBnZmNfb21wX25hbWVsaXN0ICoqbGlz dCwKICAgaGVhZCA9IHRhaWwgPSBOVUxMOwogCiAgIG9sZF9sb2MgPSBnZmNfY3VycmVudF9s b2N1czsKLQorICBpZiAoaGFzX2FsbF9tZW1vcnkpCisgICAgKmhhc19hbGxfbWVtb3J5ID0g ZmFsc2U7CiAgIG0gPSBnZmNfbWF0Y2ggKHN0cik7CiAgIGlmIChtICE9IE1BVENIX1lFUykK ICAgICByZXR1cm4gbTsKQEAgLTMyMyw3ICszMjcsMzUgQEAgZ2ZjX21hdGNoX29tcF92YXJp YWJsZV9saXN0IChjb25zdCBjaGFyICpzdHIsIGdmY19vbXBfbmFtZWxpc3QgKipsaXN0LAog ICBmb3IgKDs7KQogICAgIHsKICAgICAgIGN1cl9sb2MgPSBnZmNfY3VycmVudF9sb2N1czsK LSAgICAgIG0gPSBnZmNfbWF0Y2hfc3ltYm9sICgmc3ltLCAxKTsKKworICAgICAgbSA9IGdm Y19tYXRjaF9uYW1lIChuKTsKKyAgICAgIGlmIChtID09IE1BVENIX1lFUyAmJiBzdHJjbXAg KG4sICJvbXBfYWxsX21lbW9yeSIpID09IDApCisJeworCSAgaWYgKCFoYXNfYWxsX21lbW9y eSkKKwkgICAgeworCSAgICAgIGdmY19lcnJvciAoIiU8b21wX2FsbF9tZW1vcnklPiBhdCAl QyBub3QgcGVybWl0dGVkIGluIHRoaXMgIgorCQkJICJjbGF1c2UiKTsKKwkgICAgICBnb3Rv IGNsZWFudXA7CisJICAgIH0KKwkgICpoYXNfYWxsX21lbW9yeSA9IHRydWU7CisJICBwID0g Z2ZjX2dldF9vbXBfbmFtZWxpc3QgKCk7CisJICBpZiAoaGVhZCA9PSBOVUxMKQorCSAgICBo ZWFkID0gdGFpbCA9IHA7CisJICBlbHNlCisJICAgIHsKKwkgICAgICB0YWlsLT5uZXh0ID0g cDsKKwkgICAgICB0YWlsID0gdGFpbC0+bmV4dDsKKwkgICAgfQorCSAgdGFpbC0+d2hlcmUg PSBjdXJfbG9jOworCSAgZ290byBuZXh0X2l0ZW07CisJfQorICAgICAgaWYgKG0gPT0gTUFU Q0hfWUVTKQorCXsKKwkgIGdmY19zeW10cmVlICpzdDsKKwkgIGlmICgobSA9IGdmY19nZXRf aGFfc3ltX3RyZWUgKG4sICZzdCkgPyBNQVRDSF9FUlJPUiA6IE1BVENIX1lFUykKKwkgICAg ICA9PSBNQVRDSF9ZRVMpCisJICAgIHN5bSA9IHN0LT5uLnN5bTsKKwl9CiAgICAgICBzd2l0 Y2ggKG0pCiAJewogCWNhc2UgTUFUQ0hfWUVTOgpAQCAtNTc4LDYgKzYxMCwxMiBAQCBnZmNf bWF0Y2hfb21wX2RlcGVuZF9zaW5rIChnZmNfb21wX25hbWVsaXN0ICoqbGlzdCkKIAkgIHRh aWwtPnN5bSA9IHN5bTsKIAkgIHRhaWwtPmV4cHIgPSBOVUxMOwogCSAgdGFpbC0+d2hlcmUg PSBjdXJfbG9jOworCSAgaWYgKFVOTElLRUxZIChzdHJjbXAgKHN5bS0+bmFtZSwgIm9tcF9h bGxfbWVtb3J5IikgPT0gMCkpCisJICAgIHsKKwkgICAgICBnZmNfZXJyb3IgKCIlPG9tcF9h bGxfbWVtb3J5JT4gdXNlZCB3aXRoIERFUEVORCBraW5kICIKKwkJCSAib3RoZXIgdGhhbiBP VVQgb3IgSU5PVVQgYXQgJUMiKTsKKwkgICAgICBnb3RvIGNsZWFudXA7CisJICAgIH0KIAkg IGlmIChnZmNfbWF0Y2hfY2hhciAoJysnKSA9PSBNQVRDSF9ZRVMpCiAJICAgIHsKIAkgICAg ICBpZiAoZ2ZjX21hdGNoX2xpdGVyYWxfY29uc3RhbnQgKCZ0YWlsLT5leHByLCAwKSAhPSBN QVRDSF9ZRVMpCkBAIC0xODY4LDYgKzE5MDYsNyBAQCBnZmNfbWF0Y2hfb21wX2NsYXVzZXMg KGdmY19vbXBfY2xhdXNlcyAqKmNwLCBjb25zdCBvbXBfbWFzayBtYXNrLAogCSAgaWYgKCht YXNrICYgT01QX0NMQVVTRV9ERVBFTkQpCiAJICAgICAgJiYgZ2ZjX21hdGNoICgiZGVwZW5k ICggIikgPT0gTUFUQ0hfWUVTKQogCSAgICB7CisJICAgICAgYm9vbCBoYXNfb21wX2FsbF9t ZW1vcnk7CiAJICAgICAgZ2ZjX25hbWVzcGFjZSAqbnNfaXRlciA9IE5VTEwsICpuc19jdXJy ID0gZ2ZjX2N1cnJlbnRfbnM7CiAJICAgICAgbWF0Y2ggbV9pdCA9IGdmY19tYXRjaF9pdGVy YXRvciAoJm5zX2l0ZXIsIGZhbHNlKTsKIAkgICAgICBpZiAobV9pdCA9PSBNQVRDSF9FUlJP UikKQEAgLTE5MjAsMjEgKzE5NTksMjcgQEAgZ2ZjX21hdGNoX29tcF9jbGF1c2VzIChnZmNf b21wX2NsYXVzZXMgKipjcCwgY29uc3Qgb21wX21hc2sgbWFzaywKIAkgICAgICBpZiAobSA9 PSBNQVRDSF9ZRVMpCiAJCW0gPSBnZmNfbWF0Y2hfb21wX3ZhcmlhYmxlX2xpc3QgKCIgOiAi LAogCQkJCQkJICZjLT5saXN0c1tPTVBfTElTVF9ERVBFTkRdLAotCQkJCQkJIGZhbHNlLCBO VUxMLCAmaGVhZCwgdHJ1ZSk7CisJCQkJCQkgZmFsc2UsIE5VTEwsICZoZWFkLCB0cnVlLAor CQkJCQkJIGZhbHNlLCAmaGFzX29tcF9hbGxfbWVtb3J5KTsKKwkgICAgICBpZiAobSAhPSBN QVRDSF9ZRVMpCisJCWdvdG8gZXJyb3I7CiAJICAgICAgZ2ZjX2N1cnJlbnRfbnMgPSBuc19j dXJyOwotCSAgICAgIGlmIChtID09IE1BVENIX1lFUykKKwkgICAgICBpZiAoaGFzX29tcF9h bGxfbWVtb3J5ICYmIGRlcGVuZF9vcCAhPSBPTVBfREVQRU5EX0lOT1VUCisJCSAgJiYgZGVw ZW5kX29wICE9IE9NUF9ERVBFTkRfT1VUKQogCQl7Ci0JCSAgZ2ZjX29tcF9uYW1lbGlzdCAq bjsKLQkJICBmb3IgKG4gPSAqaGVhZDsgbjsgbiA9IG4tPm5leHQpCi0JCSAgICB7Ci0JCSAg ICAgIG4tPnUuZGVwZW5kX29wID0gZGVwZW5kX29wOwotCQkgICAgICBuLT51Mi5ucyA9IG5z X2l0ZXI7Ci0JCSAgICAgIGlmIChuc19pdGVyKQotCQkJbnNfaXRlci0+cmVmcysrOwotCQkg ICAgfQotCQkgIGNvbnRpbnVlOworCQkgIGdmY19lcnJvciAoIiU8b21wX2FsbF9tZW1vcnkl PiB1c2VkIHdpdGggREVQRU5EIGtpbmQgIgorCQkJICAgICAib3RoZXIgdGhhbiBPVVQgb3Ig SU5PVVQgYXQgJUMiKTsKKwkJICBnb3RvIGVycm9yOwogCQl9Ci0JICAgICAgYnJlYWs7CisJ ICAgICAgZ2ZjX29tcF9uYW1lbGlzdCAqbjsKKwkgICAgICBmb3IgKG4gPSAqaGVhZDsgbjsg biA9IG4tPm5leHQpCisJCXsKKwkJICBuLT51LmRlcGVuZF9vcCA9IGRlcGVuZF9vcDsKKwkJ ICBuLT51Mi5ucyA9IG5zX2l0ZXI7CisJCSAgaWYgKG5zX2l0ZXIpCisJCSAgICBuc19pdGVy LT5yZWZzKys7CisJCX0KKwkgICAgICBjb250aW51ZTsKIAkgICAgfQogCSAgaWYgKChtYXNr ICYgT01QX0NMQVVTRV9ERVRBQ0gpCiAJICAgICAgJiYgIW9wZW5hY2MKQEAgLTY0OTEsNiAr NjUzNiw4IEBAIHJlc29sdmVfb21wX2NsYXVzZXMgKGdmY19jb2RlICpjb2RlLCBnZmNfb21w X2NsYXVzZXMgKm9tcF9jbGF1c2VzLAogICBmb3IgKGxpc3QgPSAwOyBsaXN0IDwgT01QX0xJ U1RfTlVNOyBsaXN0KyspCiAgICAgZm9yIChuID0gb21wX2NsYXVzZXMtPmxpc3RzW2xpc3Rd OyBuOyBuID0gbi0+bmV4dCkKICAgICAgIHsKKwlpZiAoIW4tPnN5bSkgIC8qIG9tcF9hbGxf bWVtb3J5LiAgKi8KKwkgIGNvbnRpbnVlOwogCW4tPnN5bS0+bWFyayA9IDA7CiAJbi0+c3lt LT5jb21wX21hcmsgPSAwOwogCWlmIChuLT5zeW0tPmF0dHIuZmxhdm9yID09IEZMX1ZBUklB QkxFCmRpZmYgLS1naXQgYS9nY2MvZm9ydHJhbi9yZXNvbHZlLmNjIGIvZ2NjL2ZvcnRyYW4v cmVzb2x2ZS5jYwppbmRleCBjODMzNWY5MzlhOS4uMmViZjA3NmY3MzAgMTAwNjQ0Ci0tLSBh L2djYy9mb3J0cmFuL3Jlc29sdmUuY2MKKysrIGIvZ2NjL2ZvcnRyYW4vcmVzb2x2ZS5jYwpA QCAtMTU1MDUsNiArMTU1MDUsMTMgQEAgcmVzb2x2ZV9zeW1ib2wgKGdmY19zeW1ib2wgKnN5 bSkKICAgaWYgKHN5bS0+YXR0ci51bmxpbWl0ZWRfcG9seW1vcnBoaWMpCiAgICAgcmV0dXJu OwogCisgIGlmIChVTkxJS0VMWSAoZmxhZ19vcGVubXAgJiYgc3RyY21wIChzeW0tPm5hbWUs ICJvbXBfYWxsX21lbW9yeSIpID09IDApKQorICAgIHsKKyAgICAgIGdmY19lcnJvciAoIiU8 b21wX2FsbF9tZW1vcnklPiwgZGVjbGFyZWQgYXQgJUwsIG1heSBvbmx5IGJlIHVzZWQgaW4g IgorCQkgInRoZSBPcGVuTVAgREVQRU5EIGNsYXVzZSIsICZzeW0tPmRlY2xhcmVkX2F0KTsK KyAgICAgIHJldHVybjsKKyAgICB9CisKICAgaWYgKHN5bS0+YXR0ci5mbGF2b3IgPT0gRkxf VU5LTk9XTgogICAgICAgfHwgKHN5bS0+YXR0ci5mbGF2b3IgPT0gRkxfUFJPQ0VEVVJFICYm ICFzeW0tPmF0dHIuaW50cmluc2ljCiAJICAmJiAhc3ltLT5hdHRyLmdlbmVyaWMgJiYgIXN5 bS0+YXR0ci5leHRlcm5hbApkaWZmIC0tZ2l0IGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1w LmNjIGIvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCmluZGV4IGViNTg3MGMzYmM1Li43 NjMzYWVlNzU1YyAxMDA2NDQKLS0tIGEvZ2NjL2ZvcnRyYW4vdHJhbnMtb3Blbm1wLmNjCisr KyBiL2djYy9mb3J0cmFuL3RyYW5zLW9wZW5tcC5jYwpAQCAtMjg4MCwxNCArMjg4MCwxNiBA QCBnZmNfdHJhbnNfb21wX2NsYXVzZXMgKHN0bXRibG9ja190ICpibG9jaywgZ2ZjX29tcF9j bGF1c2VzICpjbGF1c2VzLAogCQkgIGNvbnRpbnVlOwogCQl9CiAKLQkgICAgICBpZiAoIW4t PnN5bS0+YXR0ci5yZWZlcmVuY2VkKQorCSAgICAgIGlmIChuLT5zeW0gJiYgIW4tPnN5bS0+ YXR0ci5yZWZlcmVuY2VkKQogCQljb250aW51ZTsKIAogCSAgICAgIHRyZWUgbm9kZSA9IGJ1 aWxkX29tcF9jbGF1c2UgKGlucHV0X2xvY2F0aW9uLAogCQkJCQkgICAgbGlzdCA9PSBPTVBf TElTVF9ERVBFTkQKIAkJCQkJICAgID8gT01QX0NMQVVTRV9ERVBFTkQKIAkJCQkJICAgIDog T01QX0NMQVVTRV9BRkZJTklUWSk7Ci0JICAgICAgaWYgKG4tPmV4cHIgPT0gTlVMTCB8fCBu LT5leHByLT5yZWYtPnUuYXIudHlwZSA9PSBBUl9GVUxMKQorCSAgICAgIGlmIChuLT5zeW0g PT0gTlVMTCkgIC8qIG9tcF9hbGxfbWVtb3J5ICAqLworCQlPTVBfQ0xBVVNFX0RFQ0wgKG5v ZGUpID0gbnVsbF9wb2ludGVyX25vZGU7CisJICAgICAgZWxzZSBpZiAobi0+ZXhwciA9PSBO VUxMIHx8IG4tPmV4cHItPnJlZi0+dS5hci50eXBlID09IEFSX0ZVTEwpCiAJCXsKIAkJICB0 cmVlIGRlY2wgPSBnZmNfdHJhbnNfb21wX3ZhcmlhYmxlIChuLT5zeW0sIGZhbHNlKTsKIAkJ ICBpZiAoZ2ZjX29tcF9wcml2YXRpemVfYnlfcmVmZXJlbmNlIChkZWNsKSkKQEAgLTU1MzEs NyArNTUzMyw5IEBAIGdmY190cmFuc19vbXBfZGVwb2JqIChnZmNfY29kZSAqY29kZSkKICAg aWYgKG4pCiAgICAgewogICAgICAgdHJlZSB2YXI7Ci0gICAgICBpZiAobi0+ZXhwciAmJiBu LT5leHByLT5yZWYtPnUuYXIudHlwZSAhPSBBUl9GVUxMKQorICAgICAgaWYgKCFuLT5zeW0p ICAvKiBvbXBfYWxsX21lbW9yeS4gICovCisJdmFyID0gbnVsbF9wb2ludGVyX25vZGU7Cisg ICAgICBlbHNlIGlmIChuLT5leHByICYmIG4tPmV4cHItPnJlZi0+dS5hci50eXBlICE9IEFS X0ZVTEwpCiAJewogCSAgZ2ZjX2luaXRfc2UgKCZzZSwgTlVMTCk7CiAJICBpZiAobi0+ZXhw ci0+cmVmLT51LmFyLnR5cGUgPT0gQVJfRUxFTUVOVCkKZGlmZiAtLWdpdCBhL2djYy90ZXN0 c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9hbGwtbWVtb3J5LTEuZjkwIGIvZ2NjL3Rlc3RzdWl0 ZS9nZm9ydHJhbi5kZy9nb21wL2FsbC1tZW1vcnktMS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAuLjZkNTY0NzNiMWYzCi0tLSAvZGV2L251bGwKKysrIGIv Z2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2FsbC1tZW1vcnktMS5mOTAKQEAgLTAs MCArMSw1MSBAQAorbW9kdWxlIG0KKyBpbnRlZ2VyIDo6IG9tcF9hbGxfbWVtb3J5ICAhIHsg ZGctZXJyb3IgIidvbXBfYWxsX21lbW9yeScsIGRlY2xhcmVkIGF0IC4xLiwgbWF5IG9ubHkg YmUgdXNlZCBpbiB0aGUgT3Blbk1QIERFUEVORCBjbGF1c2UiIH0KK2VuZCBtb2R1bGUgbQor CitzdWJyb3V0aW5lIGYxCisgIGludGVnZXIgOjogb21wX2FsbF9tZW1vcnkgICEgeyBkZy1l cnJvciAiJ29tcF9hbGxfbWVtb3J5JywgZGVjbGFyZWQgYXQgLjEuLCBtYXkgb25seSBiZSB1 c2VkIGluIHRoZSBPcGVuTVAgREVQRU5EIGNsYXVzZSIgfQorICAhJG9tcCB0YXJnZXQgZGVw ZW5kKG91dDogb21wX2FsbF9tZW1vcnkpCisgICEkb21wIGVuZCB0YXJnZXQKK2VuZAorCitz dWJyb3V0aW5lIGYyCisgIGRpbWVuc2lvbiA6OiBvbXBfYWxsX21lbW9yeSg1KSAgISB7IGRn LWVycm9yICInb21wX2FsbF9tZW1vcnknLCBkZWNsYXJlZCBhdCAuMS4sIG1heSBvbmx5IGJl IHVzZWQgaW4gdGhlIE9wZW5NUCBERVBFTkQgY2xhdXNlIiB9CisgICEkb21wIHRhcmdldCBk ZXBlbmQob3V0OiBvbXBfYWxsX21lbW9yeSkKKyAgISRvbXAgZW5kIHRhcmdldAorZW5kCisK K3N1YnJvdXRpbmUgZjMKKyAgaW50ZWdlciA6OiBBCisgICEkb21wIHRhcmdldCBkZXBlbmQo b3V0OiBvbXBfYWxsX21lbW9yeSkgICEgT0sKKyAgICBvbXBfYWxsX21lbW9yeSA9IDUgICEg eyBkZy1lcnJvciAiJ29tcF9hbGxfbWVtb3J5JywgZGVjbGFyZWQgYXQgLjEuLCBtYXkgb25s eSBiZSB1c2VkIGluIHRoZSBPcGVuTVAgREVQRU5EIGNsYXVzZSIgfQorICAhJG9tcCBlbmQg dGFyZ2V0CitlbmQKKworc3Vicm91dGluZSBmNAorICAhJG9tcCB0YXJnZXQgbWFwKHRvOiBv bXBfYWxsX21lbW9yeSkgICEgeyBkZy1lcnJvciAiJ29tcF9hbGxfbWVtb3J5JyBhdCAuMS4g bm90IHBlcm1pdHRlZCBpbiB0aGlzIGNsYXVzZSIgfQorICAhICEkb21wIGVuZCB0YXJnZXQK KworICAhJG9tcCB0YXNrIHByaXZhdGUgKG9tcF9hbGxfbWVtb3J5KSAgISB7IGRnLWVycm9y ICInb21wX2FsbF9tZW1vcnknIGF0IC4xLiBub3QgcGVybWl0dGVkIGluIHRoaXMgY2xhdXNl IiB9CisgICEgISRvbXAgZW5kIHRhc2sKK2VuZAorCitzdWJyb3V0aW5lIGY1ICAhIE9LCisg ICEkb21wIHRhcmdldCBkZXBlbmQoaW5vdXQgOiBvbXBfYWxsX21lbW9yeSApCisgICEkb21w IGVuZCB0YXJnZXQKKworICAhJG9tcCB0YXJnZXQgZGVwZW5kICggb3V0IDogb21wX2FsbF9t ZW1vcnkpCisgICEkb21wIGVuZCB0YXJnZXQKK2VuZAorCitzdWJyb3V0aW5lIGY2CisgICEk b21wIHRhcmdldCBkZXBlbmQoaW4gOiBvbXBfYWxsX21lbW9yeSApICAhIHsgZGctZXJyb3Ig IidvbXBfYWxsX21lbW9yeScgdXNlZCB3aXRoIERFUEVORCBraW5kIG90aGVyIHRoYW4gT1VU IG9yIElOT1VUIiB9CisgICEgISRvbXAgZW5kIHRhcmdldAorCisgICEkb21wIHRhcmdldCBk ZXBlbmQobXV0ZXhpbm91dHNldCA6IG9tcF9hbGxfbWVtb3J5ICkgICEgeyBkZy1lcnJvciAi J29tcF9hbGxfbWVtb3J5JyB1c2VkIHdpdGggREVQRU5EIGtpbmQgb3RoZXIgdGhhbiBPVVQg b3IgSU5PVVQiIH0KKyAgISAhJG9tcCBlbmQgdGFyZ2V0CisKKyAgISRvbXAgdGFyZ2V0IGRl cGVuZCAoIGRlcG9iaiA6IG9tcF9hbGxfbWVtb3J5KSAgISB7IGRnLWVycm9yICInb21wX2Fs bF9tZW1vcnknIHVzZWQgd2l0aCBERVBFTkQga2luZCBvdGhlciB0aGFuIE9VVCBvciBJTk9V VCIgfQorICAhISRvbXAgZW5kIHRhcmdldAorCisgICEkb21wIG9yZGVyZWQgZGVwZW5kICgg c2luayA6IG9tcF9hbGxfbWVtb3J5KSAgISB7IGRnLWVycm9yICInb21wX2FsbF9tZW1vcnkn IHVzZWQgd2l0aCBERVBFTkQga2luZCBvdGhlciB0aGFuIE9VVCBvciBJTk9VVCIgfQorZW5k CmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9y eS0yLmY5MCBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9hbGwtbWVtb3J5LTIu ZjkwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5mN2VlMzRmZWRj OAotLS0gL2Rldi9udWxsCisrKyBiL2djYy90ZXN0c3VpdGUvZ2ZvcnRyYW4uZGcvZ29tcC9h bGwtbWVtb3J5LTIuZjkwCkBAIC0wLDAgKzEsNTIgQEAKKyEgeyBkZy1hZGRpdGlvbmFsLW9w dGlvbnMgIi1mbm8tb3Blbm1wIiB9Cittb2R1bGUgbQorIGludGVnZXIgOjogb21wX2FsbF9t ZW1vcnkKK2VuZCBtb2R1bGUgbQorCitzdWJyb3V0aW5lIGYxCisgIGludGVnZXIgOjogb21w X2FsbF9tZW1vcnkKKyAgISRvbXAgdGFyZ2V0IGRlcGVuZChvdXQ6IG9tcF9hbGxfbWVtb3J5 KQorICAhJG9tcCBlbmQgdGFyZ2V0CitlbmQKKworc3Vicm91dGluZSBmMgorICBkaW1lbnNp b24gOjogb21wX2FsbF9tZW1vcnkoNSkKKyAgISRvbXAgdGFyZ2V0IGRlcGVuZChvdXQ6IG9t cF9hbGxfbWVtb3J5KQorICAhJG9tcCBlbmQgdGFyZ2V0CitlbmQKKworc3Vicm91dGluZSBm MworICBpbnRlZ2VyIDo6IEEKKyAgISRvbXAgdGFyZ2V0IGRlcGVuZChvdXQ6IG9tcF9hbGxf bWVtb3J5KQorICAgIG9tcF9hbGxfbWVtb3J5ID0gNQorICAhJG9tcCBlbmQgdGFyZ2V0Citl bmQKKworc3Vicm91dGluZSBmNAorICAhJG9tcCB0YXJnZXQgbWFwKHRvOiBvbXBfYWxsX21l bW9yeSkKKyAgISAhJG9tcCBlbmQgdGFyZ2V0CisKKyAgISRvbXAgdGFzayBwcml2YXRlIChv bXBfYWxsX21lbW9yeSkKKyAgISAhJG9tcCBlbmQgdGFzaworZW5kCisKK3N1YnJvdXRpbmUg ZjUKKyAgISRvbXAgdGFyZ2V0IGRlcGVuZChpbm91dCA6IG9tcF9hbGxfbWVtb3J5ICkKKyAg ISRvbXAgZW5kIHRhcmdldAorCisgICEkb21wIHRhcmdldCBkZXBlbmQgKCBvdXQgOiBvbXBf YWxsX21lbW9yeSkKKyAgISRvbXAgZW5kIHRhcmdldAorZW5kCisKK3N1YnJvdXRpbmUgZjYK KyAgISRvbXAgdGFyZ2V0IGRlcGVuZChpbiA6IG9tcF9hbGxfbWVtb3J5ICkKKyAgISAhJG9t cCBlbmQgdGFyZ2V0CisKKyAgISRvbXAgdGFyZ2V0IGRlcGVuZChtdXRleGlub3V0c2V0IDog b21wX2FsbF9tZW1vcnkgKQorICAhICEkb21wIGVuZCB0YXJnZXQKKworICEkb21wIHRhcmdl dCBkZXBlbmQgKCBkZXBvYmogOiBvbXBfYWxsX21lbW9yeSkKKyAhJG9tcCBlbmQgdGFyZ2V0 CisKKyAhJG9tcCBvcmRlcmVkIGRlcGVuZCAoIHNpbmsgOiBvbXBfYWxsX21lbW9yeSkKK2Vu ZApkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nZm9ydHJhbi5kZy9nb21wL2FsbC1tZW1v cnktMy5mOTAgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAvYWxsLW1lbW9yeS0z LmY5MApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uZGM5NWUwODZl ZTYKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2dmb3J0cmFuLmRnL2dvbXAv YWxsLW1lbW9yeS0zLmY5MApAQCAtMCwwICsxLDI0IEBACittb2R1bGUgbQorICB1c2UgaXNv X2NfYmluZGluZworICBpbXBsaWNpdCBub25lCisgIGludGVnZXIsIHBhcmFtZXRlciA6OiBv bXBfZGVwZW5kX2tpbmQgPSAyKmNfc2l6ZV90CisKKyAgaW50ZWdlcihvbXBfZGVwZW5kX2tp bmQpIDo6IHoKK2NvbnRhaW5zCisKK3N1YnJvdXRpbmUgZm9vCisgIGludGVnZXIgOjogeCwg eQorICB4ID0gMDsgeSA9IDAKKyAgISRvbXAgdGFzayBkZXBlbmQob3V0OiBvbXBfYWxsX21l bW9yeSkKKyAgICBibG9jazsgZW5kIGJsb2NrCisgICEkb21wIHRhc2sgZGVwZW5kKGlub3V0 OiBvbXBfYWxsX21lbW9yeSkKKyAgICBibG9jazsgZW5kIGJsb2NrCisgICEkb21wIHRhc2sg ZGVwZW5kKG91dDogeCwgb21wX2FsbF9tZW1vcnksIHkpCisgICAgYmxvY2s7IGVuZCBibG9j aworICAhJG9tcCB0YXNrIGRlcGVuZChpbm91dDogb21wX2FsbF9tZW1vcnksIHkpCisgICAg YmxvY2s7IGVuZCBibG9jaworICAhJG9tcCB0YXNrIGRlcGVuZChvdXQ6IHgsIG9tcF9hbGxf bWVtb3J5KQorICAgIGJsb2NrOyBlbmQgYmxvY2sKKyAgISRvbXAgZGVwb2JqICh6KSBkZXBl bmQgKGlub3V0OiBvbXBfYWxsX21lbW9yeSkKK2VuZAorZW5kCmRpZmYgLS1naXQgYS9saWJn b21wL2xpYmdvbXAudGV4aSBiL2xpYmdvbXAvbGliZ29tcC50ZXhpCmluZGV4IGI1ZTVmYmI4 Y2NhLi5kOWQ4NmYzNmE1MCAxMDA2NDQKLS0tIGEvbGliZ29tcC9saWJnb21wLnRleGkKKysr IGIvbGliZ29tcC9saWJnb21wLnRleGkKQEAgLTI3NCw3ICsyNzQsNyBAQCBUaGUgT3Blbk1Q IDQuNSBzcGVjaWZpY2F0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZC4KIEBtdWx0aXRhYmxlIEBj b2x1bW5mcmFjdGlvbnMgLjYwIC4xMCAuMjUKIEBoZWFkaXRlbSBEZXNjcmlwdGlvbiBAdGFi IFN0YXR1cyBAdGFiIENvbW1lbnRzCiBAaXRlbSBPcGVuTVAgZGlyZWN0aXZlIGFzIEMrKyBh dHRyaWJ1dGUgc3BlY2lmaWVycyBAdGFiIFkgQHRhYgotQGl0ZW0gQGNvZGV7b21wX2FsbF9t ZW1vcnl9IHJlc2VydmVkIGxvY2F0b3IgQHRhYiBOIEB0YWIKK0BpdGVtIEBjb2Rle29tcF9h bGxfbWVtb3J5fSByZXNlcnZlZCBsb2NhdG9yIEB0YWIgWSBAdGFiCiBAaXRlbSBAZW1waHt0 YXJnZXRfZGV2aWNlIHRyYWl0fSBpbiBPcGVuTVAgQ29udGV4dCBAdGFiIE4gQHRhYgogQGl0 ZW0gQGNvZGV7dGFyZ2V0X2RldmljZX0gc2VsZWN0b3Igc2V0IGluIGNvbnRleHQgc2VsZWN0 b3JzIEB0YWIgTiBAdGFiCiBAaXRlbSBDL0MrKydzIEBjb2Rle2RlY2xhcmUgdmFyaWFudH0g ZGlyZWN0aXZlOiBlbGlzaW9uIHN1cHBvcnQgb2YKQEAgLTI4Myw3ICsyODMsNyBAQCBUaGUg T3Blbk1QIDQuNSBzcGVjaWZpY2F0aW9uIGlzIGZ1bGx5IHN1cHBvcnRlZC4KICAgICAgIEBj b2Rle2FwcGVuZF9hcmdzfSBAdGFiIE4gQHRhYgogQGl0ZW0gQGNvZGV7ZGlzcGF0Y2h9IGNv bnN0cnVjdCBAdGFiIE4gQHRhYgogQGl0ZW0gZGV2aWNlLXNwZWNpZmljIElDViBzZXR0aW5n cyB0aGUgZW52aXJvbm1lbnQgdmFyaWFibGVzIEB0YWIgTiBAdGFiCi1AaXRlbSBhc3N1bWUg ZGlyZWN0aXZlIEB0YWIgTiBAdGFiCitAaXRlbSBAY29kZXthc3N1bWV9IGRpcmVjdGl2ZSBA dGFiIE4gQHRhYgogQGl0ZW0gQGNvZGV7bm90aGluZ30gZGlyZWN0aXZlIEB0YWIgWSBAdGFi CiBAaXRlbSBAY29kZXtlcnJvcn0gZGlyZWN0aXZlIEB0YWIgWSBAdGFiCiBAaXRlbSBAY29k ZXttYXNrZWR9IGNvbnN0cnVjdCBAdGFiIFkgQHRhYgpkaWZmIC0tZ2l0IGEvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2RlcGVuZC01LmY5MCBiL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNS5mOTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAuLmEzNTBlNzkzNjIzCi0tLSAvZGV2L251bGwKKysrIGIvbGli Z29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2RlcGVuZC01LmY5MApAQCAtMCwwICsx LDEyMSBAQAorISB7IGRnLWFkZGl0aW9uYWwtc291cmNlcyBteS11c2xlZXAuYyB9CishIHsg ZGctcHJ1bmUtb3V0cHV0ICJjb21tYW5kLWxpbmUgb3B0aW9uICctZmludHJpbnNpYy1tb2R1 bGVzLXBhdGg9LionIGlzIHZhbGlkIGZvciBGb3J0cmFuIGJ1dCBub3QgZm9yIEMiIH0KKwor bW9kdWxlIG0KKyAgaW1wbGljaXQgbm9uZQorCisgIGludGVyZmFjZQorICAgIHN1YnJvdXRp bmUgdXNsZWVwKHQpIGJpbmQoQywgbmFtZT0ibXlfdXNsZWVwIikKKyAgICAgIHVzZSBpc29f Y19iaW5kaW5nCisgICAgICBpbnRlZ2VyKGNfaW50KSwgdmFsdWUgOjogdAorICAgIGVuZCBz dWJyb3V0aW5lCisgIGVuZCBpbnRlcmZhY2UKKworY29udGFpbnMKK3N1YnJvdXRpbmUgdGVz dCAoaWZ2YWwpCisgIGxvZ2ljYWwsIHZhbHVlIDo6IGlmdmFsCisgIGludGVnZXIgOjogYSgw OjcpLCBiKDA6NyksIGkKKworICBkbyBpID0gMCwgNworICAgIGEoaSkgPSBpCisgICAgYihp KSA9IDIgKiBpCisgIGVuZCBkbworICAhJG9tcCBwYXJhbGxlbAorICBibG9jaworICAgISRv bXAgc2luZ2xlCisgICBibG9jaworICAgICEkb21wIHRhc2sgc2hhcmVkKGEpIGRlcGVuZChp bjogYSgwKSkKKyAgICBibG9jaworICAgICAgY2FsbCB1c2xlZXAgKDUwMDApCisgICAgICBh KDApID0gNDIKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrIHNoYXJlZChhKSBkZXBl bmQob3V0OiBhKDEpKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAoNTAwMCkKKyAg ICAgIGEoMSkgPSA0MworICAgIGVuZCBibG9jaworICAgICEkb21wIHRhc2sgc2hhcmVkKGEp IGRlcGVuZChpbm91dDogYSgyKSkKKyAgICBibG9jaworICAgICAgY2FsbCB1c2xlZXAgKDUw MDApCisgICAgICBhKDIpID0gNDQKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrIHNo YXJlZChhKSBkZXBlbmQobXV0ZXhpbm91dHNldDogYSgzKSkKKyAgICBibG9jaworICAgICAg Y2FsbCB1c2xlZXAgKDUwMDApCisgICAgICBhKDMpID0gNDUKKyAgICBlbmQgYmxvY2sKKyAg ICAhJG9tcCB0YXNrIHNoYXJlZChhKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAo MTUwMDApCisgICAgICBhKDQpID0gNDYKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNr IHNoYXJlZChiKSBkZXBlbmQoaW46IGIoMCkpCisgICAgYmxvY2sKKyAgICAgIGNhbGwgdXNs ZWVwICg1MDAwKQorICAgICAgYigwKSA9IDQ3CisgICAgZW5kIGJsb2NrCisgICAgISRvbXAg dGFzayBzaGFyZWQoYikgZGVwZW5kKGluOiBiKDQpKQorICAgIGJsb2NrCisgICAgICBjYWxs IHVzbGVlcCAoNTAwMCkKKyAgICAgIGIoNCkgPSA0OAorICAgIGVuZCBibG9jaworICAgICEg Tm9uZSBvZiB0aGUgYWJvdmUgdGFza3MgZGVwZW5kIG9uIGVhY2ggb3RoZXIuCisgICAgISBU aGUgZm9sbG93aW5nIHRhc2sgZGVwZW5kcyBvbiBhbGwgYnV0IHRoZSBhKDQpID0gNDY7IG9u ZS4KKyAgICAhJG9tcCB0YXNrIHNoYXJlZChhLCBiKSBkZXBlbmQob3V0OiBvbXBfYWxsX21l bW9yeSkgcHJpdmF0ZShpKSBpZihpZnZhbCkKKyAgICBibG9jaworICAgICAgaWYgKGEoMCkg Lz0gNDIgLm9yLiBhKDEpIC89IDQzIC5vci4gYSgyKSAvPSA0NCAub3IuIGEoMykgLz0gNDUg ICAgICAgJgorICAgICAgICAgIC5vci4gYSg1KSAvPSA1IC5vci4gYSg2KSAvPSA2IC5vci4g YSg3KSAvPSA3ICAgICAgICAgICAgICAgICAgICAgJgorICAgICAgICAgIC5vci4gYigwKSAv PSA0NyAub3IuIGIoMSkgLz0gMiAub3IuIGIoMikgLz0gNCAub3IuIGIoMykgLz0gNiAgICAg JgorICAgICAgICAgIC5vci4gYig0KSAvPSA0OCAub3IuIGIoNSkgLz0gMTAgLm9yLiBiKDYp IC89IDEyIC5vci4gYig3KSAvPSAxNCkgJgorICAgICAgICBlcnJvciBzdG9wCisgICAgICBk byBpID0gMCwgNworICAgICAgICBpZiAoaSAvPSA0KSAmCisgICAgICAgICAgYShpKSA9IDMg KiBpICsgNworICAgICAgZW5kIGRvCisgICAgICBkbyBpID0gMCwgNworICAgICAgICBiKGkp ID0gNCAqIGkgLSA3CisgICAgICBlbmQgZG8KKyAgICBlbmQgYmxvY2sKKyAgICAhIFRoZSBm b2xsb3dpbmcgdGFzayBkZXBlbmRzIG9uIGJvdGggYigwKSA9IDQ3OyBhbmQKKyAgICAhIGFi b3ZlIG9tcF9hbGxfbWVtb3J5IHRhc2tzLCBidXQgYXMgdGhlIGxhdHRlciBkZXBlbmRzIG9u CisgICAgISB0aGUgZm9ybWVyLCBlZmZlY3RpdmVseSBpdCBpcyBkZXBlbmRlbnQganVzdCBv biB0aGUgb21wX2FsbF9tZW1vcnkKKyAgICAhIHRhc2suCisgICAgISRvbXAgdGFzayBzaGFy ZWQoYikgZGVwZW5kKGlub3V0OiBiKDApKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVl cCAoNTAwMCkKKyAgICAgIGIoMCkgPSA0OQorICAgIGVuZCBibG9jaworICAgICEgVGhlIGZv bGxvd2luZyB0YXNrIGRlcGVuZHMgb24gYWxsIHRoZSBhYm92ZSBleGNlcHQgYSg0KSA9IDQ2 OyBvbmUsCisgICAgISBidXQgaXQgY2FuIGJlIHJlZHVjZWQgdG8gZGVwZW5kZW5jeSBvbiB0 aGUgYWJvdmUgb21wX2FsbF9tZW1vcnkKKyAgICAhIG9uZSBhbmQgYigwKSA9IDQ5OyBvbmUu CisgICAgISRvbXAgdGFzayBzaGFyZWQoYSwgYikgZGVwZW5kKGlub3V0OiBiKDcpLCBvbXBf YWxsX21lbW9yeSwgYig2KSkgJgorICAgICEkb21wJiAgICAgcHJpdmF0ZShpKSBpZihpZnZh bCkKKyAgICBibG9jaworICAgICAgZG8gaSA9IDAsIDcKKyAgICAgICAgaWYgKGkgLz0gNCkg dGhlbgorICAgICAgICAgICAgaWYgKGEoaSkgLz0gMyAqIGkgKyA3KSAmCisgICAgICAgICAg ICAgIGVycm9yIHN0b3AKKyAgICAgICAgICAgIGEoaSkgPSA1ICogaSArIDUwCisgICAgICAg IGVuZCBpZgorICAgICAgZW5kIGRvCisgICAgICBpZiAoYigwKSAvPSA0OSkgJgorICAgICAg ICBlcnJvciBzdG9wCisgICAgICBiKDApID0gNiAqIGkgKyA1NworICAgICAgZG8gaSA9IDEs IDcKKyAgICAgICAgaWYgKGIoaSkgLz0gNCAqIGkgLSA3KSAmCisgICAgICAgICAgZXJyb3Ig c3RvcAorICAgICAgICBiKGkpID0gNiAqIGkgKyA1NworICAgICAgZW5kIGRvCisgICAgZW5k IGJsb2NrCisgICAgISRvbXAgdGFza3dhaXQKKyAgICBpZiAoYSg0KSAvPSA0NikgJgorICAg ICAgZXJyb3Igc3RvcAorICAgZW5kIGJsb2NrICAgISBlbmQgc2luZ2xlCisgIGVuZCBibG9j ayAgISBlbmQgcGFyYWxsZWwKK2VuZAorZW5kIG1vZHVsZSBtCisKK3VzZSBtCitjYWxsIHRl c3QoLnRydWUuKQorY2FsbCB0ZXN0KC5mYWxzZS4pCitlbmQKZGlmZiAtLWdpdCBhL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNi5mOTAgYi9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmZvcnRyYW4vZGVwZW5kLTYuZjkwCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi5lZGVhODU3MWJiYQotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNi5mOTAKQEAgLTAs MCArMSwxMjYgQEAKKyEgeyBkZy1hZGRpdGlvbmFsLXNvdXJjZXMgbXktdXNsZWVwLmMgfQor ISB7IGRnLXBydW5lLW91dHB1dCAiY29tbWFuZC1saW5lIG9wdGlvbiAnLWZpbnRyaW5zaWMt bW9kdWxlcy1wYXRoPS4qJyBpcyB2YWxpZCBmb3IgRm9ydHJhbiBidXQgbm90IGZvciBDIiB9 CisKK21vZHVsZSBtCisgIHVzZSBvbXBfbGliCisgIGltcGxpY2l0IG5vbmUKKworICBpbnRl cmZhY2UKKyAgICBzdWJyb3V0aW5lIHVzbGVlcCh0KSBiaW5kKEMsIG5hbWU9Im15X3VzbGVl cCIpCisgICAgICB1c2UgaXNvX2NfYmluZGluZworICAgICAgaW50ZWdlcihjX2ludCksIHZh bHVlIDo6IHQKKyAgICBlbmQgc3Vicm91dGluZQorICBlbmQgaW50ZXJmYWNlCisKK2NvbnRh aW5zCitzdWJyb3V0aW5lIHRlc3QgKGlmdmFsKQorICBsb2dpY2FsLCB2YWx1ZSA6OiBpZnZh bAorICBpbnRlZ2VyIDo6IGEoMDo3KSwgYigwOjcpLCBpCisgIGludGVnZXIob21wX2RlcGVu ZF9raW5kKSBkMSwgZDIKKyAgISRvbXAgZGVwb2JqIChkMSkgZGVwZW5kKGlub3V0OiBvbXBf YWxsX21lbW9yeSkgCisgICEkb21wIGRlcG9iaiAoZDIpIGRlcGVuZChvdXQ6IG9tcF9hbGxf bWVtb3J5KQorICBkbyBpID0gMCwgNworICAgIGEoaSkgPSBpCisgICAgYihpKSA9IDIgKiBp CisgIGVuZCBkbworICAhJG9tcCBwYXJhbGxlbAorICBibG9jaworICAgISRvbXAgc2luZ2xl CisgICBibG9jaworICAgICEkb21wIHRhc2sgc2hhcmVkKGEpIGRlcGVuZChpbjogYSgwKSkK KyAgICBibG9jaworICAgICAgY2FsbCB1c2xlZXAgKDUwMDApCisgICAgICBhKDApID0gNDIK KyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrIHNoYXJlZChhKSBkZXBlbmQob3V0OiBh KDEpKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAoNTAwMCkKKyAgICAgIGEoMSkg PSA0MworICAgIGVuZCBibG9jaworICAgICEkb21wIHRhc2sgc2hhcmVkKGEpIGRlcGVuZChp bm91dDogYSgyKSkKKyAgICBibG9jaworICAgICAgY2FsbCB1c2xlZXAgKDUwMDApCisgICAg ICBhKDIpID0gNDQKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrIHNoYXJlZChhKSBk ZXBlbmQobXV0ZXhpbm91dHNldDogYSgzKSkKKyAgICBibG9jaworICAgICAgY2FsbCB1c2xl ZXAgKDUwMDApCisgICAgICBhKDMpID0gNDUKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0 YXNrIHNoYXJlZChhKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAoMTUwMDApCisg ICAgICBhKDQpID0gNDYKKyAgICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrIHNoYXJlZChi KSBkZXBlbmQoaW46IGIoMCkpCisgICAgYmxvY2sKKyAgICAgIGNhbGwgdXNsZWVwICg1MDAw KQorICAgICAgYigwKSA9IDQ3CisgICAgZW5kIGJsb2NrCisgICAgISRvbXAgdGFzayBzaGFy ZWQoYikgZGVwZW5kKGluOiBiKDQpKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAo NTAwMCkKKyAgICAgIGIoNCkgPSA0OAorICAgIGVuZCBibG9jaworICAgICEgTm9uZSBvZiB0 aGUgYWJvdmUgdGFza3MgZGVwZW5kIG9uIGVhY2ggb3RoZXIuCisgICAgISBUaGUgZm9sbG93 aW5nIHRhc2sgZGVwZW5kcyBvbiBhbGwgYnV0IHRoZSBhKDQpID0gNDY7IG9uZS4KKyAgICAh JG9tcCB0YXNrIHNoYXJlZChhLCBiKSBkZXBlbmQoZGVwb2JqOiBkMSkgcHJpdmF0ZShpKSBp ZihpZnZhbCkKKyAgICBibG9jaworICAgICAgaWYgKGEoMCkgLz0gNDIgLm9yLiBhKDEpIC89 IDQzIC5vci4gYSgyKSAvPSA0NCAub3IuIGEoMykgLz0gNDUgICAgICAgJgorICAgICAgICAg IC5vci4gYSg1KSAvPSA1IC5vci4gYSg2KSAvPSA2IC5vci4gYSg3KSAvPSA3ICAgICAgICAg ICAgICAgICAgICAgJgorICAgICAgICAgIC5vci4gYigwKSAvPSA0NyAub3IuIGIoMSkgLz0g MiAub3IuIGIoMikgLz0gNCAub3IuIGIoMykgLz0gNiAgICAgJgorICAgICAgICAgIC5vci4g Yig0KSAvPSA0OCAub3IuIGIoNSkgLz0gMTAgLm9yLiBiKDYpIC89IDEyIC5vci4gYig3KSAv PSAxNCkgJgorICAgICAgICBlcnJvciBzdG9wCisgICAgICBkbyBpID0gMCwgNworICAgICAg ICBpZiAoaSAvPSA0KSAmCisgICAgICAgICAgYShpKSA9IDMgKiBpICsgNworICAgICAgZW5k IGRvCisgICAgICBkbyBpID0gMCwgNworICAgICAgICBiKGkpID0gNCAqIGkgLSA3CisgICAg ICBlbmQgZG8KKyAgICBlbmQgYmxvY2sKKyAgICAhIFRoZSBmb2xsb3dpbmcgdGFzayBkZXBl bmRzIG9uIGJvdGggYigwKSA9IDQ3OyBhbmQKKyAgICAhIGFib3ZlIG9tcF9hbGxfbWVtb3J5 IHRhc2tzLCBidXQgYXMgdGhlIGxhdHRlciBkZXBlbmRzIG9uCisgICAgISB0aGUgZm9ybWVy LCBlZmZlY3RpdmVseSBpdCBpcyBkZXBlbmRlbnQganVzdCBvbiB0aGUgb21wX2FsbF9tZW1v cnkKKyAgICAhIHRhc2suCisgICAgISRvbXAgdGFzayBzaGFyZWQoYikgZGVwZW5kKGlub3V0 OiBiKDApKQorICAgIGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAoNTAwMCkKKyAgICAgIGIo MCkgPSA0OQorICAgIGVuZCBibG9jaworICAgICEgVGhlIGZvbGxvd2luZyB0YXNrIGRlcGVu ZHMgb24gYWxsIHRoZSBhYm92ZSBleGNlcHQgYSg0KSA9IDQ2OyBvbmUsCisgICAgISBidXQg aXQgY2FuIGJlIHJlZHVjZWQgdG8gZGVwZW5kZW5jeSBvbiB0aGUgYWJvdmUgb21wX2FsbF9t ZW1vcnkKKyAgICAhIG9uZSBhbmQgYigwKSA9IDQ5OyBvbmUuCisgICAgISRvbXAgdGFzayBz aGFyZWQoYSwgYikgZGVwZW5kKGlub3V0OiBiKDYpKSBkZXBlbmQoZGVwb2JqOiBkMikgJgor ICAgICEkb21wJiAgICAgZGVwZW5kKG91dDogYig3KSkgcHJpdmF0ZShpKSBpZihpZnZhbCkK KyAgICBibG9jaworICAgICAgZG8gaSA9IDAsIDcKKyAgICAgICAgaWYgKGkgLz0gNCkgdGhl bgorICAgICAgICAgIGlmIChhKGkpIC89IDMgKiBpICsgNykgJgorICAgICAgICAgICAgZXJy b3Igc3RvcAorICAgICAgICAgIGEoaSkgPSA1ICogaSArIDUwCisgICAgICAgIGVuZCBpZgor ICAgICAgZW5kIGRvCisgICAgICBpZiAoYigwKSAvPSA0OSkgJgorICAgICAgICBlcnJvciBz dG9wCisgICAgICBiKDApID0gNiAqIGkgKyA1NworICAgICAgZG8gaSA9IDEsIDcKKyAgICAg ICAgaWYgKGIoaSkgLz0gNCAqIGkgLSA3KSAmCisgICAgICAgICAgZXJyb3Igc3RvcAorICAg ICAgICBiKGkpID0gNiAqIGkgKyA1NworICAgICAgZW5kIGRvCisgICAgZW5kIGJsb2NrCisg ICAgISRvbXAgdGFza3dhaXQKKyAgICBpZiAoYSg0KSAvPSA0NikgJgorICAgICAgZXJyb3Ig c3RvcAorICAgZW5kIGJsb2NrCisgIGVuZCBibG9jaworICAhJG9tcCBkZXBvYmogKGQyKSBk ZXN0cm95CisgICEkb21wIGRlcG9iaiAoZDEpIGRlc3Ryb3kKK2VuZAorZW5kIG1vZHVsZSBt CisKK3VzZSBtCitjYWxsIHRlc3QgKC50cnVlLikKK2NhbGwgdGVzdCAoLmZhbHNlLikKK2Vu ZApkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFuL2RlcGVu ZC03LmY5MCBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuZm9ydHJhbi9kZXBlbmQtNy5m OTAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLmQzZjM5ODhmMGRh Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5mb3J0cmFu L2RlcGVuZC03LmY5MApAQCAtMCwwICsxLDExMyBAQAorISB7IGRnLWFkZGl0aW9uYWwtc291 cmNlcyBteS11c2xlZXAuYyB9CishIHsgZGctcHJ1bmUtb3V0cHV0ICJjb21tYW5kLWxpbmUg b3B0aW9uICctZmludHJpbnNpYy1tb2R1bGVzLXBhdGg9LionIGlzIHZhbGlkIGZvciBGb3J0 cmFuIGJ1dCBub3QgZm9yIEMiIH0KKworcHJvZ3JhbSBtYWluCisgIGltcGxpY2l0IG5vbmUK KworICBpbnRlcmZhY2UKKyAgICBzdWJyb3V0aW5lIHVzbGVlcCh0KSBiaW5kKEMsIG5hbWU9 Im15X3VzbGVlcCIpCisgICAgICB1c2UgaXNvX2NfYmluZGluZworICAgICAgaW50ZWdlcihj X2ludCksIHZhbHVlIDo6IHQKKyAgICBlbmQgc3Vicm91dGluZQorICBlbmQgaW50ZXJmYWNl CisKKyAgaW50ZWdlciA6OiBhKDA6NyksIGIoMDo3KSwgaQorCisgIGRvIGkgPSAwLCA3Cisg ICAgYShpKSA9IGkKKyAgICBiKGkpID0gMiAqIGkKKyAgZW5kIGRvCisKKyAgISRvbXAgcGFy YWxsZWwKKyAgYmxvY2sKKyAgICEkb21wIHNpbmdsZQorICAgYmxvY2sKKyAgICAhJG9tcCB0 YXNrIHNoYXJlZChhKSBkZXBlbmQoaW46IGEoMCkpCisgICAgYmxvY2sKKyAgICAgIGNhbGwg dXNsZWVwICg1MDAwKQorICAgICAgYSgwKSA9IDQyCisgICAgZW5kIGJsb2NrCisgICAgISRv bXAgdGFzayBzaGFyZWQoYSkgZGVwZW5kKG91dDogYSgxKSkKKyAgICBibG9jaworICAgICAg Y2FsbCB1c2xlZXAgKDUwMDApCisgICAgICBhKDEpID0gNDMKKyAgICBlbmQgYmxvY2sKKyAg ICAhJG9tcCB0YXNrIHNoYXJlZChhKSBkZXBlbmQoaW5vdXQ6IGEoMikpCisgICAgYmxvY2sK KyAgICAgIGNhbGwgdXNsZWVwICg1MDAwKQorICAgICAgYSgyKSA9IDQ0CisgICAgZW5kIGJs b2NrCisgICAgISRvbXAgdGFzayBzaGFyZWQoYSkgZGVwZW5kKG11dGV4aW5vdXRzZXQ6IGEo MykpCisgICAgYmxvY2sKKyAgICAgIGNhbGwgdXNsZWVwICg1MDAwKQorICAgICAgYSgzKSA9 IDQ1CisgICAgZW5kIGJsb2NrCisgICAgISRvbXAgdGFzayBzaGFyZWQoYSkKKyAgICBibG9j aworICAgICAgY2FsbCB1c2xlZXAgKDE1MDAwKQorICAgICAgYSg0KSA9IDQ2CisgICAgZW5k IGJsb2NrCisgICAgISRvbXAgdGFzayBzaGFyZWQoYikgZGVwZW5kKGluOiBiKDApKQorICAg IGJsb2NrCisgICAgICBjYWxsIHVzbGVlcCAoNTAwMCkKKyAgICAgIGIoMCkgPSA0NworICAg IGVuZCBibG9jaworICAgICEkb21wIHRhc2sgc2hhcmVkKGIpIGRlcGVuZChpbjogYig0KSkK KyAgICBibG9jaworICAgICAgY2FsbCB1c2xlZXAgKDUwMDApCisgICAgICBiKDQpID0gNDgK KyAgICBlbmQgYmxvY2sKKyAgICAhIE5vbmUgb2YgdGhlIGFib3ZlIHRhc2tzIGRlcGVuZCBv biBlYWNoIG90aGVyLgorICAgICEgVGhlIGZvbGxvd2luZyB0YXNrIGRlcGVuZHMgb24gYWxs IGJ1dCB0aGUgYSg0KSA9IDQ2OyBvbmUuCisgICAgISRvbXAgdGFzayBzaGFyZWQoYSwgYikg ZGVwZW5kKGl0ZXJhdG9yIChqPTA6NyksIGlub3V0OiBvbXBfYWxsX21lbW9yeSkgcHJpdmF0 ZShpKQorICAgIGJsb2NrCisgICAgICBpZiAoYSgwKSAvPSA0MiAub3IuIGEoMSkgLz0gNDMg Lm9yLiBhKDIpIC89IDQ0IC5vci4gYSgzKSAvPSA0NSAgICAgICAmCisgICAgICAgICAgLm9y LiBhKDUpIC89IDUgLm9yLiBhKDYpIC89IDYgLm9yLiBhKDcpIC89IDcgICAgICAgICAgICAg ICAgICAgICAmCisgICAgICAgICAgLm9yLiBiKDApIC89IDQ3IC5vci4gYigxKSAvPSAyIC5v ci4gYigyKSAvPSA0IC5vci4gYigzKSAvPSA2ICAgICAmCisgICAgICAgICAgLm9yLiBiKDQp IC89IDQ4IC5vci4gYig1KSAvPSAxMCAub3IuIGIoNikgLz0gMTIgLm9yLiBiKDcpIC89IDE0 KSAmCisgICAgICAgIGVycm9yIHN0b3AKKyAgICAgIGRvIGkgPSAwLCA3CisgICAgICAgIGlm IChpIC89IDQpICYKKyAgICAgICAgICBhKGkpID0gMyAqIGkgKyA3CisgICAgICBlbmQgZG8K KyAgICAgIGRvIGkgPSAwLCA3CisgICAgICAgIGIoaSkgPSA0ICogaSAtIDcKKyAgICAgIGVu ZCBkbworICAgIGVuZCBibG9jaworICAgICEgVGhlIGZvbGxvd2luZyB0YXNrIGRlcGVuZHMg b24gYm90aCBiKDApID0gNDc7IGFuZAorICAgICEgYWJvdmUgb21wX2FsbF9tZW1vcnkgdGFz a3MsIGJ1dCBhcyB0aGUgbGF0dGVyIGRlcGVuZHMgb24KKyAgICAhIHRoZSBmb3JtZXIsIGVm ZmVjdGl2ZWx5IGl0IGlzIGRlcGVuZGVudCBqdXN0IG9uIHRoZSBvbXBfYWxsX21lbW9yeQor ICAgICEgdGFzay4KKyAgICAhJG9tcCB0YXNrIHNoYXJlZChiKSBkZXBlbmQoaW5vdXQ6IGIo MCkpCisgICAgYmxvY2sKKyAgICAgIGNhbGwgdXNsZWVwICg1MDAwKQorICAgICAgYigwKSA9 IDQ5CisgICAgZW5kIGJsb2NrCisgICAgISBUaGUgZm9sbG93aW5nIHRhc2sgZGVwZW5kcyBv biBhbGwgdGhlIGFib3ZlIGV4Y2VwdCBhKDQpID0gNDY7IG9uZSwKKyAgICAhIGJ1dCBpdCBj YW4gYmUgcmVkdWNlZCB0byBkZXBlbmRlbmN5IG9uIHRoZSBhYm92ZSBvbXBfYWxsX21lbW9y eQorICAgICEgb25lIGFuZCBiKDApID0gNDk7IG9uZS4KKyAgICAhJG9tcCB0YXNrIHNoYXJl ZChhLCBiKSBkZXBlbmQoaW5vdXQ6IGIoNykpIGRlcGVuZChpdGVyYXRvcihqPTQ6NSksIG91 dDogb21wX2FsbF9tZW1vcnkpICYKKyAgICAhJG9tcCYgICAgIGRlcGVuZChpbm91dDogYig2 KSkgcHJpdmF0ZShpKQorICAgIGJsb2NrCisgICAgICBkbyBpID0gMCwgNworICAgICAgICBp ZiAoaSAvPSA0KSB0aGVuCisgICAgICAgICAgaWYgKGEoaSkgLz0gMyAqIGkgKyA3KSAmCisg ICAgICAgICAgICBlcnJvciBzdG9wCisgICAgICAgICAgYShpKSA9IDUgKiBpICsgNTAKKyAg ICAgICAgZW5kIGlmCisgICAgICBlbmQgZG8KKyAgICAgIGlmIChiKDApIC89IDQ5KSAmCisg ICAgICAgIGVycm9yIHN0b3AKKyAgICAgIGIoMCkgPSA2ICogaSArIDU3CisgICAgICBkbyBp ID0gMSwgNworICAgICAgICBpZiAoYihpKSAvPSA0ICogaSAtIDcpICYKKyAgICAgICAgICBl cnJvciBzdG9wCisgICAgICAgIGIoaSkgPSA2ICogaSArIDU3CisgICAgICBlbmQgZG8KKyAg ICBlbmQgYmxvY2sKKyAgICAhJG9tcCB0YXNrd2FpdAorICAgIGlmIChhKDQpIC89IDQ2KSAm CisgICAgICBlcnJvciBzdG9wCisgICBlbmQgYmxvY2sKKyAgZW5kIGJsb2NrCitlbmQgcHJv Z3JhbQo= --------------019ZapXtndOHazq9jdk1zedr--