From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mo4-p00-ob.smtp.rzone.de (mo4-p00-ob.smtp.rzone.de [81.169.146.219]) by sourceware.org (Postfix) with ESMTPS id C85573858C41 for ; Tue, 5 Mar 2024 11:15:36 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.2 sourceware.org C85573858C41 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=gjlay.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=gjlay.de ARC-Filter: OpenARC Filter v1.0.0 sourceware.org C85573858C41 Authentication-Results: server2.sourceware.org; arc=pass smtp.remote-ip=81.169.146.219 ARC-Seal: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1709637340; cv=pass; b=dpFWzHDnJVT63ABIKFgR2MnC1HeAUZMwtEm7EOEJFeIhC1pkkGmplD7gRCEc1MFREBPBV+AiSgNUQ3ruc3ayrQDjZAYTC37J4aTxAxqxNDYv9RS/J1HtHaaBTgJN7IwPi/zRGaheJncJskCOT48vZLQ6Xsw6tlbxtua3GuWWczo= ARC-Message-Signature: i=2; a=rsa-sha256; d=sourceware.org; s=key; t=1709637340; c=relaxed/simple; bh=bOv+NV2AQTs9hy2HRHgNARUiEiHXnIMwSLnbY7UT+BM=; h=DKIM-Signature:DKIM-Signature:Message-ID:Date:MIME-Version: Subject:To:From; b=e8oDmZEcQF+rF+nKI952BPLKAi4sUrvmr7vTVDBboV7A0eaNX3idZDtxsgzO4odXta5b1YSEBT7nJp5ieh/HvWWli/YBvDjBWTsk/QBx5BFz76s3pEKdixXdvOXdPB/kbIJP5v2UmN2RxwkWQ9Fb4f9E1sOJ/B+nsVzkVNzgS2k= ARC-Authentication-Results: i=2; server2.sourceware.org ARC-Seal: i=1; a=rsa-sha256; t=1709637335; cv=none; d=strato.com; s=strato-dkim-0002; b=sOURHYQUh8fnNzgiOF69RuTWQZt+TVjvw2yI+8Lp4wA5bQDRgPg5P0gDQPMd8oQFSV 903fB5PgNhcR3VnzYgDdPzbykHKo8RBjCoJJNkHxQ4iOGWo7cJgwqrkM1nbzeO+FMHj/ oPqG3+yuypTm6EQJK7Ao336XrKbBTpA033K64re7hPyEff/5CTlVXeZa9xVnUgvLIP5N CxQ7CaUQb23scu/ecj/s9znBt036S4iodsCsMG7hxLCiMMad7Z3/L0cTr7BYa9WeOae0 937qxw3LXRN9hrNK+C1PIwWb/qWAzh73kP0VqN8WOhBwapBfOxyswoukGi0xyX0AfZOH oIZg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; t=1709637335; s=strato-dkim-0002; d=strato.com; h=In-Reply-To:From:References:To:Subject:Date:Message-ID:Cc:Date:From: Subject:Sender; bh=NdNKQGw0C2JcqwZNCz5uDTelJT0wXb26gtJhoUMPkLg=; b=Yp1DA6vu8hKpDU53yuy+pwUNh6mpZSaVt/OCCjVHX+DioB7NJ7ZA7/56qXzBVXJNtA ufsIY66LO5VErLvanX2ML/vIcbsGQnqg5qa328l1DAHHU0eFZARG/FsRLe8YbDzySPck Ytedks8nGZtqAlVnKaSa0rxSNU5rXYa0r419fjUtw4SVjaaEYqW/tPnMbquJXvnXqREK httKEdS1VTEg4+X7jQ/FEa2lO0jtUAETpIH9ipNOJ2Uy+o6DIVUnwUyoYjSfZkyPil2l MrWlCh9OAZqXUzzaVx0aS5wykcAjPQW0P1yXKIzrVCZGGV5wVEoZJ7TJZSUp8V4T6pFc VW2Q== ARC-Authentication-Results: i=1; strato.com; arc=none; dkim=none X-RZG-CLASS-ID: mo00 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; t=1709637335; s=strato-dkim-0002; d=gjlay.de; h=In-Reply-To:From:References:To:Subject:Date:Message-ID:Cc:Date:From: Subject:Sender; bh=NdNKQGw0C2JcqwZNCz5uDTelJT0wXb26gtJhoUMPkLg=; b=N4IXlPDil0wofQWESfRawAfhEjKf4bWeF9DwLTjREvBhihTd0Fs7hBEeN3u9FtkHyZ TPsa0ABXx8Fpp2Jah0ET/g86NKPOmxXr1kUGJAXpCFzDEAy5iMqowh7PK3PUCz2FnRX0 UMLXg3tNMVe/2l4kh/WZWEX2t2bgW8mFPwAmuY4a5Kw0sn8UO4CXWUs0QDV5MTP/1yBW zmfghioxGkqV+yf+3BxIxEM9v/h8sL8UMMykQNfuoPR6NWEdYZ2bic1NLQ8NJlYAky2V HueM7THUhzqFUf8irP8iIIfPc722eaNgbnsegGpmKOvq3nZus3hAv9QLzLN+jmQVQ8pQ m/Tw== DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; t=1709637335; s=strato-dkim-0003; d=gjlay.de; h=In-Reply-To:From:References:To:Subject:Date:Message-ID:Cc:Date:From: Subject:Sender; bh=NdNKQGw0C2JcqwZNCz5uDTelJT0wXb26gtJhoUMPkLg=; b=gTg00n0qih70N4DlplpZ4g1v0fn5XRVL8RtiMYkt8yWy5/0z93KpchlUcOu1Jd38iv ybaaZfDRpC0+PSIhCKCQ== X-RZG-AUTH: ":LXoWVUeid/7A29J/hMvvT3koxZnKT7Qq0xotTetVnKkSgcSjpmy9KwoMJ/K0VA==" Received: from [192.168.2.102] by smtp.strato.de (RZmta 50.2.0 DYNA|AUTH) with ESMTPSA id Jdfd10025BFYMfq (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256 bits)) (Client did not present a certificate); Tue, 5 Mar 2024 12:15:34 +0100 (CET) Content-Type: multipart/mixed; boundary="------------wlRugjJUCJM80HOO0qg0cy8q" Message-ID: Date: Tue, 5 Mar 2024 12:15:33 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: [patch,avr,applied] Improve output of insn "*insv.any_shift.". Content-Language: en-US To: Roger Sayle , gcc-patches@gcc.gnu.org References: <025901da0d82$cd5aa3f0$680febd0$@nextmovesoftware.com> From: Georg-Johann Lay In-Reply-To: <025901da0d82$cd5aa3f0$680febd0$@nextmovesoftware.com> Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00,DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,GIT_PATCH_0,KAM_SHORT,RCVD_IN_DNSWL_LOW,RCVD_IN_MSPIKE_H4,RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_NONE,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 List-Id: This is a multi-part message in MIME format. --------------wlRugjJUCJM80HOO0qg0cy8q Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Applied Roger's proposed improvements with some changes: Lengthy code is more convenient in avr.cc than in an insn output function, and it makes it easy to work out the exact instruction length. Moreover, the code can handle shifts with offset zero (cases of *and3 insns). Passed with no new regressions on ATmega128. Applied as https://gcc.gnu.org/r14-9317 Johann -- AVR: Improve output of insn "*insv.any_shift._split". The instructions printed by insn "*insv.any_shift._split" were sub-optimal. The code to print the improved output is lengthy and performed by new function avr_out_insv. As it turns out, the function can also handle shift-offsets of zero, which is "*andhi3", "*andpsi3" and "*andsi3". Thus, these tree insns get a new 3-operand alternative where the 3rd operand is an exact power of 2. gcc/ * config/avr/avr-protos.h (avr_out_insv): New proto. * config/avr/avr.cc (avr_out_insv): New function. (avr_adjust_insn_length) [ADJUST_LEN_INSV]: Handle case. (avr_cbranch_cost) [ZERO_EXTRACT]: Adjust rtx costs. * config/avr/avr.md (define_attr "adjust_len") Add insv. (andhi3, *andhi3, andpsi3, *andpsi3, andsi3, *andsi3): Add constraint alternative where the 3rd operand is a power of 2, and the source register may differ from the destination. (*insv.any_shift._split): Call avr_out_insv to output instructions. Set attr "length" to "insv". * config/avr/constraints.md (Cb2, Cb3, Cb4): New constraints. gcc/testsuite/ * gcc.target/avr/torture/insv-anyshift-hi.c: New test. * gcc.target/avr/torture/insv-anyshift-si.c: New test. --------------wlRugjJUCJM80HOO0qg0cy8q Content-Type: text/x-patch; charset=UTF-8; name="rs.diff" Content-Disposition: attachment; filename="rs.diff" Content-Transfer-Encoding: base64 Y29tbWl0IDQ5YTFhMzQwZWEwZWVmNjgxZjIzYjY4NjFmM2NkYjY4NDBhYWRkOTkKQXV0aG9y OiBSb2dlciBTYXlsZSA8cm9nZXJAbmV4dG1vdmVzb2Z0d2FyZS5jb20+CkRhdGU6ICAgVHVl IE1hciA1IDExOjA2OjE3IDIwMjQgKzAxMDAKCiAgICBBVlI6IEltcHJvdmUgb3V0cHV0IG9m IGluc24gIippbnN2LmFueV9zaGlmdC48bW9kZT5fc3BsaXQiLgogICAgCiAgICBUaGUgaW5z dHJ1Y3Rpb25zIHByaW50ZWQgYnkgaW5zbiAiKmluc3YuYW55X3NoaWZ0Ljxtb2RlPl9zcGxp dCIgd2VyZQogICAgc3ViLW9wdGltYWwuICBUaGUgY29kZSB0byBwcmludCB0aGUgaW1wcm92 ZWQgb3V0cHV0IGlzIGxlbmd0aHkgYW5kCiAgICBwZXJmb3JtZWQgYnkgbmV3IGZ1bmN0aW9u IGF2cl9vdXRfaW5zdi4gIEFzIGl0IHR1cm5zIG91dCwgdGhlIGZ1bmN0aW9uCiAgICBjYW4g YWxzbyBoYW5kbGUgc2hpZnQtb2Zmc2V0cyBvZiB6ZXJvLCB3aGljaCBpcyAiKmFuZGhpMyIs ICIqYW5kcHNpMyIKICAgIGFuZCAiKmFuZHNpMyIuICBUaHVzLCB0aGVzZSB0cmVlIGluc25z IGdldCBhIG5ldyAzLW9wZXJhbmQgYWx0ZXJuYXRpdmUKICAgIHdoZXJlIHRoZSAzcmQgb3Bl cmFuZCBpcyBhbiBleGFjdCBwb3dlciBvZiAyLgogICAgCiAgICBnY2MvCiAgICAgICAgICAg ICogY29uZmlnL2F2ci9hdnItcHJvdG9zLmggKGF2cl9vdXRfaW5zdik6IE5ldyBwcm90by4K ICAgICAgICAgICAgKiBjb25maWcvYXZyL2F2ci5jYyAoYXZyX291dF9pbnN2KTogTmV3IGZ1 bmN0aW9uLgogICAgICAgICAgICAoYXZyX2FkanVzdF9pbnNuX2xlbmd0aCkgW0FESlVTVF9M RU5fSU5TVl06IEhhbmRsZSBjYXNlLgogICAgICAgICAgICAoYXZyX2NicmFuY2hfY29zdCkg W1pFUk9fRVhUUkFDVF06IEFkanVzdCBydHggY29zdHMuCiAgICAgICAgICAgICogY29uZmln L2F2ci9hdnIubWQgKGRlZmluZV9hdHRyICJhZGp1c3RfbGVuIikgQWRkIGluc3YuCiAgICAg ICAgICAgIChhbmRoaTMsICphbmRoaTMsIGFuZHBzaTMsICphbmRwc2kzLCBhbmRzaTMsICph bmRzaTMpOgogICAgICAgICAgICBBZGQgY29uc3RyYWludCBhbHRlcm5hdGl2ZSB3aGVyZSB0 aGUgM3JkIG9wZXJhbmQgaXMgYSBwb3dlcgogICAgICAgICAgICBvZiAyLCBhbmQgdGhlIHNv dXJjZSByZWdpc3RlciBtYXkgZGlmZmVyIGZyb20gdGhlIGRlc3RpbmF0aW9uLgogICAgICAg ICAgICAoKmluc3YuYW55X3NoaWZ0Ljxtb2RlPl9zcGxpdCk6IENhbGwgYXZyX291dF9pbnN2 IHRvIG91dHB1dAogICAgICAgICAgICBpbnN0cnVjdGlvbnMuICBTZXQgYXR0ciAibGVuZ3Ro IiB0byAiaW5zdiIuCiAgICAgICAgICAgICogY29uZmlnL2F2ci9jb25zdHJhaW50cy5tZCAo Q2IyLCBDYjMsIENiNCk6IE5ldyBjb25zdHJhaW50cy4KICAgIAogICAgZ2NjL3Rlc3RzdWl0 ZS8KICAgICAgICAgICAgKiBnY2MudGFyZ2V0L2F2ci90b3J0dXJlL2luc3YtYW55c2hpZnQt aGkuYzogTmV3IHRlc3QuCiAgICAgICAgICAgICogZ2NjLnRhcmdldC9hdnIvdG9ydHVyZS9p bnN2LWFueXNoaWZ0LXNpLmM6IE5ldyB0ZXN0LgoKZGlmZiAtLWdpdCBhL2djYy9jb25maWcv YXZyL2F2ci1wcm90b3MuaCBiL2djYy9jb25maWcvYXZyL2F2ci1wcm90b3MuaAppbmRleCAz ZTE5NDA5ZDYzNi4uYmI2ODAzMTIxMTcgMTAwNjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL2F2 ci1wcm90b3MuaAorKysgYi9nY2MvY29uZmlnL2F2ci9hdnItcHJvdG9zLmgKQEAgLTU4LDYg KzU4LDcgQEAgZXh0ZXJuIGNvbnN0IGNoYXIgKnJldF9jb25kX2JyYW5jaCAocnR4IHgsIGlu dCBsZW4sIGludCByZXZlcnNlKTsKIGV4dGVybiBjb25zdCBjaGFyICphdnJfb3V0X21vdnBz aSAocnR4X2luc24gKiwgcnR4KiwgaW50Kik7CiBleHRlcm4gY29uc3QgY2hhciAqYXZyX291 dF9zaWduX2V4dGVuZCAocnR4X2luc24gKiwgcnR4KiwgaW50Kik7CiBleHRlcm4gY29uc3Qg Y2hhciAqYXZyX291dF9pbnNlcnRfbm90Yml0IChydHhfaW5zbiAqLCBydHgqLCBpbnQqKTsK K2V4dGVybiBjb25zdCBjaGFyICphdnJfb3V0X2luc3YgKHJ0eF9pbnNuICosIHJ0eCosIGlu dCopOwogZXh0ZXJuIGNvbnN0IGNoYXIgKmF2cl9vdXRfZXh0ciAocnR4X2luc24gKiwgcnR4 KiwgaW50Kik7CiBleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9leHRyX25vdCAocnR4X2lu c24gKiwgcnR4KiwgaW50Kik7CiBleHRlcm4gY29uc3QgY2hhciAqYXZyX291dF9wbHVzX3Nl dF9aTiAocnR4KiwgaW50Kik7CmRpZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2ci9hdnIuY2Mg Yi9nY2MvY29uZmlnL2F2ci9hdnIuY2MKaW5kZXggYzhiMmI1MDRlM2YuLjM2OTk1ZTA1Y2Jl IDEwMDY0NAotLS0gYS9nY2MvY29uZmlnL2F2ci9hdnIuY2MKKysrIGIvZ2NjL2NvbmZpZy9h dnIvYXZyLmNjCkBAIC05Nzk1LDYgKzk3OTUsMTc4IEBAIGF2cl9vdXRfaW5zZXJ0X25vdGJp dCAocnR4X2luc24gKmluc24sIHJ0eCBvcFtdLCBpbnQgKnBsZW4pCiB9CiAKIAorLyogT3V0 cHV0IGluc3RydWN0aW9ucyBmb3IgIFhPUFswXSA9IChYT1BbMV0gPFNoaWZ0PiBYT1BbMl0p ICYgWE9QWzNdICB3aGVyZQorICAgLSAgWE9QWzBdIGFuZCBYT1BbMV0gaGF2ZSB0aGUgc2Ft ZSBtb2RlIHdoaWNoIGlzIG9uZSBvZjogUUksIEhJLCBQU0ksIFNJLgorICAgLSAgWE9QWzNd IGlzIGFuIGV4YWN0IGNvbnN0X2ludCBwb3dlciBvZiAyLgorICAgLSAgWE9QWzJdIGFuZCBY T1BbM10gYXJlIGNvbnN0X2ludC4KKyAgIC0gIDxTaGlmdD4gaXMgYW55IG9mOiBBU0hJRlQs IExTSElGVFJULCBBU0hJRlRSVC4KKyAgIC0gIFRoZSByZXN1bHQgZGVwZW5kcyBvbiBYT1Bb MV0uCisgICBvciAgWE9QWzBdID0gWE9QWzFdICYgWE9QWzJdICB3aGVyZQorICAgLSAgWE9Q WzBdIGFuZCBYT1BbMV0gaGF2ZSB0aGUgc2FtZSBtb2RlIHdoaWNoIGlzIG9uZSBvZjogSEks IFBTSSwgU0kuCisgICAtICBYT1BbMl0gaXMgYW4gZXhhY3QgY29uc3RfaW50IHBvd2VyIG9m IDIuCisgICBSZXR1cm5zICIiLgorICAgUExFTiAhPSAwOiBTZXQgKlBMRU4gdG8gdGhlIGNv ZGUgbGVuZ3RoIGluIHdvcmRzLiAgRG9uJ3Qgb3V0cHV0IGFueXRoaW5nLgorICAgUExFTiA9 PSAwOiBPdXRwdXQgaW5zdHJ1Y3Rpb25zLiAgKi8KKworY29uc3QgY2hhcioKK2F2cl9vdXRf aW5zdiAocnR4X2luc24gKmluc24sIHJ0eCB4b3BbXSwgaW50ICpwbGVuKQoreworICBtYWNo aW5lX21vZGUgbW9kZSA9IEdFVF9NT0RFICh4b3BbMF0pOworICBpbnQgbl9ieXRlcyA9IEdF VF9NT0RFX1NJWkUgKG1vZGUpOworICBydHggeHNyYyA9IFNFVF9TUkMgKHNpbmdsZV9zZXQg KGluc24pKTsKKworICBnY2NfYXNzZXJ0IChBTkQgPT0gR0VUX0NPREUgKHhzcmMpKTsKKwor ICBydHggeG9wMiA9IHhvcFsyXTsKKyAgcnR4IHhvcDMgPSB4b3BbM107CisKKyAgaWYgKFJF R19QIChYRVhQICh4c3JjLCAwKSkpCisgICAgeworICAgICAgLy8gVGhpcyBmdW5jdGlvbiBj YW4gYWxzbyBoYW5kbGUgQU5EIHdpdGggYW4gZXhhY3QgcG93ZXIgb2YgMiwKKyAgICAgIC8v IHdoaWNoIGNhbiBiZSByZWdhcmRlZCBhcyBhIFhPUFsxXSBzaGlmdCB3aXRoIG9mZnNldCAw LgorICAgICAgcnR4IHhzaGlmdCA9IGdlbl9ydHhfQVNISUZUIChtb2RlLCB4b3BbMV0sIGNv bnN0MF9ydHgpOworICAgICAgeHNyYyA9IGdlbl9ydHhfQU5EIChtb2RlLCB4c2hpZnQsIHhv cFsyXSk7CisgICAgICB4b3AzID0geG9wWzJdOworICAgICAgeG9wMiA9IGNvbnN0MF9ydHg7 CisgICAgfQorCisgIC8vIEFueSBvZiBBU0hJRlQsIExTSElGVFJULCBBU0hJRlRSVC4KKyAg ZW51bSBydHhfY29kZSBjb2RlID0gR0VUX0NPREUgKFhFWFAgKHhzcmMsIDApKTsKKyAgaW50 IHNoaWZ0ID0gY29kZSA9PSBBU0hJRlQgPyBJTlRWQUwgKHhvcDIpIDogLUlOVFZBTCAoeG9w Mik7CisKKyAgLy8gRGV0ZXJtaW5lcyB0aGUgcG9zaXRpb24gb2YgdGhlIG91dHB1dCBiaXQu CisgIHVuc2lnbmVkIG1hc2sgPSBHRVRfTU9ERV9NQVNLIChtb2RlKSAmIElOVFZBTCAoeG9w Myk7CisKKyAgLy8gUG9zaXRpb24gb2YgdGhlIG91dHB1dCAvIGlucHV0IGJpdCwgcmVzcGVj dGl2ZWx5LgorICBpbnQgb2JpdCA9IGV4YWN0X2xvZzIgKG1hc2spOworICBpbnQgaWJpdCA9 IG9iaXQgLSBzaGlmdDsKKworICBnY2NfYXNzZXJ0IChJTl9SQU5HRSAob2JpdCwgMCwgR0VU X01PREVfQklUU0laRSAobW9kZSkgLSAxKSk7CisgIGdjY19hc3NlcnQgKElOX1JBTkdFIChp Yml0LCAwLCBHRVRfTU9ERV9CSVRTSVpFIChtb2RlKSAtIDEpKTsKKworICAvLyBJbiB0aGUg cmVtYWluZGVyLCB1c2UgdGhlIHN1Yi1ieXRlcyB0aGF0IGhvbGQgdGhlIGJpdHMuCisgIHJ0 eCBvcFs0XSA9CisgICAgeworICAgICAgLy8gT3V0cHV0CisgICAgICBzaW1wbGlmeV9nZW5f c3VicmVnIChRSW1vZGUsIHhvcFswXSwgbW9kZSwgb2JpdCAvIDgpLAorICAgICAgR0VOX0lO VCAob2JpdCAmIDcpLAorICAgICAgLy8gSW5wdXQKKyAgICAgIHNpbXBsaWZ5X2dlbl9zdWJy ZWcgKFFJbW9kZSwgeG9wWzFdLCBtb2RlLCBpYml0IC8gOCksCisgICAgICBHRU5fSU5UIChp Yml0ICYgNykKKyAgICB9OworICBvYml0ICY9IDc7CisgIGliaXQgJj0gNzsKKworICAvLyBU aGUgbGVuZ3RoIG9mIHRoZSBkZWZhdWx0IHNlcXVlbmNlIGF0IHRoZSBlbmQgb2YgdGhpcyBm dW5jdGlvbi4KKyAgLy8gV2Ugb25seSBlbWl0IGFueXRoaW5nIG90aGVyIHRoYW4gdGhlIGRl ZmF1bHQgd2hlbiB3ZSBmaW5kIGEgc2VxdWVuY2UKKyAgLy8gdGhhdCBpcyBzdHJpY3RseSBz aG9ydGVyIHRoYW4gdGhlIGRlZmF1bHQgc2VxdWVuY2U7IHdoaWNoIGlzOgorICAvLyBCU1Qg KyA8Q0xSLXJlc3VsdC1ieXRlcz4gKyBCTEQuCisgIGNvbnN0IGludCBsZW4wID0gMiArIG5f Ynl0ZXMgLSAobl9ieXRlcyA9PSA0ICYmIEFWUl9IQVZFX01PVlcpOworCisgIC8vIEZpbmRp bmcgc29tZXRoaW5nIHNob3J0ZXIgdGhhbiB0aGUgZGVmYXVsdCBzZXF1ZW5jZSBpbXBsaWVz IHRoYXQgdGhlcmUKKyAgLy8gbXVzdCBiZSBhdCBtb3N0IDIgaW5zdHJ1Y3Rpb25zIHRoYXQg ZGVhbCB3aXRoIHRoZSBieXRlcyBjb250YWluaW5nIHRoZQorICAvLyByZWxldmFudCBiaXRz LiAgSW4gYWRkaXRpb24sIHdlIG5lZWQgIE5fQllURVMgLSAxICBpbnN0cnVjdGlvbnMgdG8g Y2xlYXIKKyAgLy8gdGhlIHJlbWFpbmluZyByZXN1bHQgYnl0ZXMuCisKKyAgY29uc3QgaW50 IG5fY2xyID0gbl9ieXRlcyAtIDE7CisgIGJvb2wgY2xyX3AgPSBmYWxzZTsKKyAgYm9vbCBh bmRpX3AgPSBmYWxzZTsKKworICBpZiAocGxlbikKKyAgICAqcGxlbiA9IDA7CisKKyAgaWYg KFJFR05PIChvcFswXSkgPT0gUkVHTk8gKG9wWzJdKQorICAgICAgLy8gT3V0cHV0IHJlZyBh bGxvd3MgQU5ESS4KKyAgICAgICYmIHRlc3RfaGFyZF9yZWdfY2xhc3MgKExEX1JFR1MsIG9w WzBdKSkKKyAgICB7CisgICAgICBpZiAoMSArIG5fY2xyIDwgbGVuMAorCSAgLy8gU2FtZSBi eXRlIGFuZCBiaXQ6IEEgc2luZ2xlIEFOREkgd2lsbCBkby4KKwkgICYmIG9iaXQgPT0gaWJp dCkKKwl7CisJICBjbHJfcCA9IGFuZGlfcCA9IHRydWU7CisJfQorICAgICAgZWxzZSBpZiAo MiArIG5fY2xyIDwgbGVuMAorCSAgICAgICAvLyB8b2JpdCAtIGliaXR8ID0gNDogIFNXQVAg KyBBTkRJIHdpbGwgZG8uCisJICAgICAgICYmIChvYml0ID09IGliaXQgKyA0IHx8IG9iaXQg PT0gaWJpdCAtIDQpKQorCXsKKwkgIGF2cl9hc21fbGVuICgic3dhcCAlMCIsIG9wLCBwbGVu LCAxKTsKKwkgIGNscl9wID0gYW5kaV9wID0gdHJ1ZTsKKwl9CisgICAgICBlbHNlIGlmICgy ICsgbl9jbHIgPCBsZW4wCisJICAgICAgIC8vIExTTCArIEFOREkgd2lsbCBkby4KKwkgICAg ICAgJiYgb2JpdCA9PSBpYml0ICsgMSkKKwl7CisJICBhdnJfYXNtX2xlbiAoImxzbCAlMCIs IG9wLCBwbGVuLCAxKTsKKwkgIGNscl9wID0gYW5kaV9wID0gdHJ1ZTsKKwl9CisgICAgICBl bHNlIGlmICgyICsgbl9jbHIgPCBsZW4wCisJICAgICAgIC8vIExTUiArIEFOREkgd2lsbCBk by4KKwkgICAgICAgJiYgb2JpdCA9PSBpYml0IC0gMSkKKwl7CisJICBhdnJfYXNtX2xlbiAo ImxzciAlMCIsIG9wLCBwbGVuLCAxKTsKKwkgIGNscl9wID0gYW5kaV9wID0gdHJ1ZTsKKwl9 CisgICAgfQorCisgIGlmIChSRUdOTyAob3BbMF0pICE9IFJFR05PIChvcFsyXSkKKyAgICAg ICYmIG9iaXQgPT0gaWJpdCkKKyAgICB7CisgICAgICBpZiAoMiArIG5fY2xyIDwgbGVuMAor CSAgLy8gU2FtZSBiaXQgYnV0IGRpZmZlcmVudCBieXRlOiBNT1YgKyBBTkRJIHdpbGwgZG8u CisJICAmJiB0ZXN0X2hhcmRfcmVnX2NsYXNzIChMRF9SRUdTLCBvcFswXSkpCisJeworCSAg YXZyX2FzbV9sZW4gKCJtb3YgJTAsJTIiLCBvcCwgcGxlbiwgMSk7CisJICBjbHJfcCA9IGFu ZGlfcCA9IHRydWU7CisJfQorICAgICAgZWxzZSBpZiAoMiArIG5fY2xyIDwgbGVuMAorCSAg ICAgICAvLyBTYW1lIGJpdCBidXQgZGlmZmVyZW50IGJ5dGU6ICBXZSBjYW4gdXNlIEFOREkg KyBNT1YsCisJICAgICAgIC8vIGJ1dCBvbmx5IGlmIHRoZSBpbnB1dCBieXRlIGlzIExEX1JF R1MgYW5kIHVudXNlZCBhZnRlci4KKwkgICAgICAgJiYgdGVzdF9oYXJkX3JlZ19jbGFzcyAo TERfUkVHUywgb3BbMl0pCisJICAgICAgICYmIHJlZ191bnVzZWRfYWZ0ZXIgKGluc24sIG9w WzJdKSkKKwl7CisJICBhdnJfYXNtX2xlbiAoImFuZGkgJTIsMTw8JTMiICBDUl9UQUIKKwkJ ICAgICAgICJtb3YgJTAsJTIiLCBvcCwgcGxlbiwgMik7CisJICBjbHJfcCA9IHRydWU7CisJ fQorICAgIH0KKworICAvLyBPdXRwdXQgcmVtYWluaW5nIGluc3RydWN0aW9ucyBvZiB0aGUg c2hvcnRlciBzZXF1ZW5jZS4KKworICBpZiAoYW5kaV9wKQorICAgIGF2cl9hc21fbGVuICgi YW5kaSAlMCwxPDwlMSIsIG9wLCBwbGVuLCAxKTsKKworICBpZiAoY2xyX3ApCisgICAgewor ICAgICAgZm9yIChpbnQgYiA9IDA7IGIgPCBuX2J5dGVzOyArK2IpCisJeworCSAgcnR4IGJ5 dGUgPSBzaW1wbGlmeV9nZW5fc3VicmVnIChRSW1vZGUsIHhvcFswXSwgbW9kZSwgYik7CisJ ICBpZiAoUkVHTk8gKGJ5dGUpICE9IFJFR05PIChvcFswXSkpCisJICAgIGF2cl9hc21fbGVu ICgiY2xyICUwIiwgJmJ5dGUsIHBsZW4sIDEpOworCX0KKworICAgICAgLy8gQ0xSX1AgbWVh bnMgd2UgZm91bmQgYSBzaG9ydGVyIHNlcXVlbmNlLCBzbyB3ZSBhcmUgZG9uZSBub3cuCisg ICAgICByZXR1cm4gIiI7CisgICAgfQorCisgIC8vIE5vIHNob3J0ZXIgc2VxdWVuY2UgZm91 bmQsIGp1c3QgZW1pdCAgQlNULCBDTFIqLCBCTEQgIHNlcXVlbmNlLgorCisgIGF2cl9hc21f bGVuICgiYnN0ICUyLCUzIiwgb3AsIHBsZW4sIC0xKTsKKworICBpZiAobl9ieXRlcyA9PSA0 ICYmIEFWUl9IQVZFX01PVlcpCisgICAgYXZyX2FzbV9sZW4gKCJjbHIgJUEwIiAgIENSX1RB QgorCQkgImNsciAlQjAiICAgQ1JfVEFCCisJCSAibW92dyAlQzAsJUEwIiwgeG9wLCBwbGVu LCAzKTsKKyAgZWxzZQorICAgIGZvciAoaW50IGIgPSAwOyBiIDwgbl9ieXRlczsgKytiKQor ICAgICAgeworCXJ0eCBieXRlID0gc2ltcGxpZnlfZ2VuX3N1YnJlZyAoUUltb2RlLCB4b3Bb MF0sIG1vZGUsIGIpOworCWF2cl9hc21fbGVuICgiY2xyICUwIiwgJmJ5dGUsIHBsZW4sIDEp OworICAgICAgfQorCisgIHJldHVybiBhdnJfYXNtX2xlbiAoImJsZCAlMCwlMSIsIG9wLCBw bGVuLCAxKTsKK30KKworCiAvKiBPdXRwdXQgaW5zdHJ1Y3Rpb25zIHRvIGV4dHJhY3QgYSBi aXQgdG8gOC1iaXQgcmVnaXN0ZXIgWE9QWzBdLgogICAgVGhlIGlucHV0IFhPUFsxXSBpcyBh IHJlZ2lzdGVyIG9yIGFuIDgtYml0IE1FTSBpbiB0aGUgbG93ZXIgSS9PIHJhbmdlLgogICAg WE9QWzJdIGlzIHRoZSBjb25zdF9pbnQgYml0IHBvc2l0aW9uLiAgUmV0dXJuICIiLgpAQCAt MTA3MjEsNiArMTA4OTMsNyBAQCBhdnJfYWRqdXN0X2luc25fbGVuZ3RoIChydHhfaW5zbiAq aW5zbiwgaW50IGxlbikKICAgICBjYXNlIEFESlVTVF9MRU5fT1VUX0JJVE9QOiBhdnJfb3V0 X2JpdG9wIChpbnNuLCBvcCwgJmxlbik7IGJyZWFrOwogICAgIGNhc2UgQURKVVNUX0xFTl9F WFRSX05PVDogYXZyX291dF9leHRyX25vdCAoaW5zbiwgb3AsICZsZW4pOyBicmVhazsKICAg ICBjYXNlIEFESlVTVF9MRU5fRVhUUjogYXZyX291dF9leHRyIChpbnNuLCBvcCwgJmxlbik7 IGJyZWFrOworICAgIGNhc2UgQURKVVNUX0xFTl9JTlNWOiBhdnJfb3V0X2luc3YgKGluc24s IG9wLCAmbGVuKTsgYnJlYWs7CiAKICAgICBjYXNlIEFESlVTVF9MRU5fUExVUzogYXZyX291 dF9wbHVzIChpbnNuLCBvcCwgJmxlbik7IGJyZWFrOwogICAgIGNhc2UgQURKVVNUX0xFTl9B RERUT19TUDogYXZyX291dF9hZGR0b19zcCAob3AsICZsZW4pOyBicmVhazsKQEAgLTEyMjA2 LDYgKzEyMzc5LDE0IEBAIGF2cl9jYnJhbmNoX2Nvc3QgKHJ0eCB4KQogICAgICAgcmV0dXJu IENPU1RTX05fSU5TTlMgKHNpemUgKyAxICsgMSk7CiAgICAgfQogCisgIGlmIChHRVRfQ09E RSAoeHJlZykgPT0gWkVST19FWFRSQUNUCisgICAgICAmJiBYRVhQICh4cmVnLCAxKSA9PSBj b25zdDFfcnR4KQorICAgIHsKKyAgICAgIC8vIEJyYW5jaCBvbiBhIHNpbmdsZSBiaXQsIHdp dGggYW4gYWRkaXRpb25hbCBlZGdlIGR1ZSB0byBsZXNzCisgICAgICAvLyByZWdpc3RlciBw cmVzc3VyZS4KKyAgICAgIHJldHVybiAoaW50KSBDT1NUU19OX0lOU05TICgxLjUpOworICAg IH0KKwogICBib29sIHJlZ19wID0gcmVnaXN0ZXJfb3BlcmFuZCAoeHJlZywgbW9kZSk7CiAg IGJvb2wgcmVnX29yXzBfcCA9IHJlZ19vcl8wX29wZXJhbmQgKHh2YWwsIG1vZGUpOwogCmRp ZmYgLS1naXQgYS9nY2MvY29uZmlnL2F2ci9hdnIubWQgYi9nY2MvY29uZmlnL2F2ci9hdnIu bWQKaW5kZXggNjYwNjgzN2I1ZjcuLjZiZGY0NjgyZmFiIDEwMDY0NAotLS0gYS9nY2MvY29u ZmlnL2F2ci9hdnIubWQKKysrIGIvZ2NjL2NvbmZpZy9hdnIvYXZyLm1kCkBAIC0xNzAsNyAr MTcwLDcgQEAgKGRlZmluZV9hdHRyICJhZGp1c3RfbGVuIgogICAgYXNobGhpLCBhc2hyaGks IGxzaHJoaSwKICAgIGFzaGxzaSwgYXNocnNpLCBsc2hyc2ksCiAgICBhc2hscHNpLCBhc2hy cHNpLCBsc2hycHNpLAotICAgaW5zZXJ0X2JpdHMsIGluc3Zfbm90Yml0LAorICAgaW5zZXJ0 X2JpdHMsIGluc3Zfbm90Yml0LCBpbnN2LAogICAgYWRkX3NldF9aTiwgY21wX3VleHQsIGNt cF9zZXh0LAogICAgbm8iCiAgIChjb25zdF9zdHJpbmcgIm5vIikpCkBAIC00MzgwLDEwICs0 MzgwLDEwIEBAIChkZWZpbmVfaW5zbiAiKmFuZHFpMyIKICAgWyhzZXRfYXR0ciAibGVuZ3Ro IiAiMSwxLDIiKV0pCiAKIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImFuZGhpMyIKLSAgWyhz ZXQgKG1hdGNoX29wZXJhbmQ6SEkgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgIj0/P3Is ZCxkLHIgICxyIikKLSAgICAgICAgKGFuZDpISSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdp c3Rlcl9vcGVyYW5kIiAiJTAsMCwwLDAgICwwIikKLSAgICAgICAgICAgICAgICAobWF0Y2hf b3BlcmFuZDpISSAyICJub25tZW1vcnlfb3BlcmFuZCIgInIscyxuLENhMixuIikpKQotICAg KGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMyAgICAgICAgICAgICAgICAgICAgICAgICI9 WCxYLFgsWCAgLCZkIikpXQorICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAgICAgICAiPT8/cixkLGQsciAgLHIgICxyIikKKyAgICAgICAgKGFuZDpI SSAobWF0Y2hfb3BlcmFuZDpISSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwLDAgICxy ICAsMCIpCisgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6SEkgMiAibm9ubWVtb3J5 X29wZXJhbmQiICJyLHMsbixDYTIsQ2IyLG4iKSkpCisgICAoY2xvYmJlciAobWF0Y2hfc2Ny YXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgsWCxYICAsWCAgLCZkIikp XQogICAiIgogICAiIyIKICAgIiYmIHJlbG9hZF9jb21wbGV0ZWQiCkBAIC00Mzk0LDEwICs0 Mzk0LDEwIEBAIChkZWZpbmVfaW5zbl9hbmRfc3BsaXQgImFuZGhpMyIKICAgICAgICAgICAg ICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIAogKGRlZmluZV9pbnNuICIqYW5k aGkzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpISSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAg ICAgICAiPT8/cixkLGQsciAgLHIiKQotICAgICAgICAoYW5kOkhJIChtYXRjaF9vcGVyYW5k OkhJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAsMCAgLDAiKQotICAgICAgICAgICAg ICAgIChtYXRjaF9vcGVyYW5kOkhJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixzLG4sQ2Ey LG4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAg ICAgICAgICAgIj1YLFgsWCxYICAsJmQiKSkKKyAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6SEkg MCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgIj0/P3IsZCxkLHIgICxyICAsciIpCisgICAg ICAgIChhbmQ6SEkgKG1hdGNoX29wZXJhbmQ6SEkgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUw LDAsMCwwICAsciAgLDAiKQorICAgICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOkhJIDIg Im5vbm1lbW9yeV9vcGVyYW5kIiAicixzLG4sQ2EyLENiMixuIikpKQorICAgKGNsb2JiZXIg KG1hdGNoX3NjcmF0Y2g6UUkgMyAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgsWCAg LFggICwmZCIpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0KICAgInJlbG9hZF9j b21wbGV0ZWQiCiAgIHsKQEAgLTQ0MDUsMTcgKzQ0MDUsMTkgQEAgKGRlZmluZV9pbnNuICIq YW5kaGkzIgogICAgICAgcmV0dXJuICJhbmQgJUEwLCVBMlw7YW5kICVCMCwlQjIiOwogICAg IGVsc2UgaWYgKHdoaWNoX2FsdGVybmF0aXZlID09IDEpCiAgICAgICByZXR1cm4gImFuZGkg JUEwLGxvOCglMilcO2FuZGkgJUIwLGhpOCglMikiOworICAgIGVsc2UgaWYgKHdoaWNoX2Fs dGVybmF0aXZlID09IDQpCisgICAgICByZXR1cm4gYXZyX291dF9pbnN2IChpbnNuLCBvcGVy YW5kcywgTlVMTCk7CiAKICAgICByZXR1cm4gYXZyX291dF9iaXRvcCAoaW5zbiwgb3BlcmFu ZHMsIE5VTEwpOwogICB9Ci0gIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiwyLDQsNCIpCi0g ICAoc2V0X2F0dHIgImFkanVzdF9sZW4iICIqLCosb3V0X2JpdG9wLG91dF9iaXRvcCxvdXRf Yml0b3AiKV0pCisgIFsoc2V0X2F0dHIgImxlbmd0aCIgIjIsMiwyLDQsNCw0IikKKyAgIChz ZXRfYXR0ciAiYWRqdXN0X2xlbiIgIiosKixvdXRfYml0b3Asb3V0X2JpdG9wLGluc3Ysb3V0 X2JpdG9wIildKQogCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJhbmRwc2kzIgotICBbKHNl dCAobWF0Y2hfb3BlcmFuZDpQU0kgMCAicmVnaXN0ZXJfb3BlcmFuZCIgICAgICAgICI9Pz9y LGQsciAgLHIiKQotICAgICAgICAoYW5kOlBTSSAobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVn aXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCAgLDAiKQotICAgICAgICAgICAgICAgICAobWF0Y2hf b3BlcmFuZDpQU0kgMiAibm9ubWVtb3J5X29wZXJhbmQiICJyLG4sQ2EzLG4iKSkpCi0gICAo Y2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgICAi PVgsWCxYICAsJmQiKSldCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlBTSSAwICJyZWdpc3Rl cl9vcGVyYW5kIiAgICAgICAgIj0/P3IsZCxyICAsciAgLHIiKQorICAgICAgICAoYW5kOlBT SSAobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCAgLHIg ICwwIikKKyAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDIgIm5vbm1lbW9y eV9vcGVyYW5kIiAicixuLENhMyxDYjMsbiIpKSkKKyAgIChjbG9iYmVyIChtYXRjaF9zY3Jh dGNoOlFJIDMgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFggICxYICAsJmQiKSld CiAgICIiCiAgICIjIgogICAiJiYgcmVsb2FkX2NvbXBsZXRlZCIKQEAgLTQ0MjYsMTAgKzQ0 MjgsMTAgQEAgKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiYW5kcHNpMyIKICAgICAgICAgICAg ICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0pXSkKIAogKGRlZmluZV9pbnNuICIqYW5k cHNpMyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UFNJIDAgInJlZ2lzdGVyX29wZXJhbmQi ICAgICAgICAiPT8/cixkLHIgICxyIikKLSAgICAgICAgKGFuZDpQU0kgKG1hdGNoX29wZXJh bmQ6UFNJIDEgInJlZ2lzdGVyX29wZXJhbmQiICIlMCwwLDAgICwwIikKLSAgICAgICAgICAg ICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixuLENh MyxuIikpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMyAgICAgICAgICAgICAg ICAgICAgICAgICAgIj1YLFgsWCAgLCZkIikpCisgIFsoc2V0IChtYXRjaF9vcGVyYW5kOlBT SSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAgIj0/P3IsZCxyICAsciAgLHIiKQorICAg ICAgICAoYW5kOlBTSSAobWF0Y2hfb3BlcmFuZDpQU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiUwLDAsMCAgLHIgICwwIikKKyAgICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6UFNJ IDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAicixuLENhMyxDYjMsbiIpKSkKKyAgIChjbG9iYmVy IChtYXRjaF9zY3JhdGNoOlFJIDMgICAgICAgICAgICAgICAgICAgICAgICAgICI9WCxYLFgg ICxYICAsJmQiKSkKICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldCiAgICJyZWxvYWRf Y29tcGxldGVkIgogICB7CkBAIC00NDM4LDE2ICs0NDQwLDE5IEBAIChkZWZpbmVfaW5zbiAi KmFuZHBzaTMiCiAgICAgICAgICAgICAgImFuZCAlQjAsJUIyIiBDUl9UQUIKICAgICAgICAg ICAgICAiYW5kICVDMCwlQzIiOwogCisgICAgaWYgKHdoaWNoX2FsdGVybmF0aXZlID09IDMp CisgICAgICByZXR1cm4gYXZyX291dF9pbnN2IChpbnNuLCBvcGVyYW5kcywgTlVMTCk7CisK ICAgICByZXR1cm4gYXZyX291dF9iaXRvcCAoaW5zbiwgb3BlcmFuZHMsIE5VTEwpOwogICB9 Ci0gIFsoc2V0X2F0dHIgImxlbmd0aCIgIjMsMyw2LDYiKQotICAgKHNldF9hdHRyICJhZGp1 c3RfbGVuIiAiKixvdXRfYml0b3Asb3V0X2JpdG9wLG91dF9iaXRvcCIpXSkKKyAgWyhzZXRf YXR0ciAibGVuZ3RoIiAiMywzLDYsNSw2IikKKyAgIChzZXRfYXR0ciAiYWRqdXN0X2xlbiIg Iiosb3V0X2JpdG9wLG91dF9iaXRvcCxpbnN2LG91dF9iaXRvcCIpXSkKIAogKGRlZmluZV9p bnNuX2FuZF9zcGxpdCAiYW5kc2kzIgotICBbKHNldCAobWF0Y2hfb3BlcmFuZDpTSSAwICJy ZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAiPT8/cixkLHIgICxyIikKLSAgICAgICAgKGFuZDpT SSAobWF0Y2hfb3BlcmFuZDpTSSAxICJyZWdpc3Rlcl9vcGVyYW5kIiAiJTAsMCwwICAsMCIp Ci0gICAgICAgICAgICAgICAgKG1hdGNoX29wZXJhbmQ6U0kgMiAibm9ubWVtb3J5X29wZXJh bmQiICJyLG4sQ2E0LG4iKSkpCi0gICAoY2xvYmJlciAobWF0Y2hfc2NyYXRjaDpRSSAzICAg ICAgICAgICAgICAgICAgICAgICAgIj1YLFgsWCAgLCZkIikpXQorICBbKHNldCAobWF0Y2hf b3BlcmFuZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAiPT8/cixkLHIgICxyICAs ciIpCisgICAgICAgIChhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3Bl cmFuZCIgIiUwLDAsMCAgLHIgICwwIikKKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFu ZDpTSSAyICJub25tZW1vcnlfb3BlcmFuZCIgInIsbixDYTQsQ2I0LG4iKSkpCisgICAoY2xv YmJlciAobWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgs WCAgLFggICwmZCIpKV0KICAgIiIKICAgIiMiCiAgICImJiByZWxvYWRfY29tcGxldGVkIgpA QCAtNDQ1OCwxMCArNDQ2MywxMCBAQCAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICJhbmRzaTMi CiAgICAgICAgICAgICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldKV0pCiAKIChkZWZp bmVfaW5zbiAiKmFuZHNpMyIKLSAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6U0kgMCAicmVnaXN0 ZXJfb3BlcmFuZCIgICAgICAgIj0/P3IsZCxyICAsciIpCi0gICAgICAgIChhbmQ6U0kgKG1h dGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgIiUwLDAsMCAgLDAiKQotICAg ICAgICAgICAgICAgIChtYXRjaF9vcGVyYW5kOlNJIDIgIm5vbm1lbW9yeV9vcGVyYW5kIiAi cixuLENhNCxuIikpKQotICAgKGNsb2JiZXIgKG1hdGNoX3NjcmF0Y2g6UUkgMyAgICAgICAg ICAgICAgICAgICAgICAgICI9WCxYLFggICwmZCIpKQorICBbKHNldCAobWF0Y2hfb3BlcmFu ZDpTSSAwICJyZWdpc3Rlcl9vcGVyYW5kIiAgICAgICAiPT8/cixkLHIgICxyICAsciIpCisg ICAgICAgIChhbmQ6U0kgKG1hdGNoX29wZXJhbmQ6U0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIg IiUwLDAsMCAgLHIgICwwIikKKyAgICAgICAgICAgICAgICAobWF0Y2hfb3BlcmFuZDpTSSAy ICJub25tZW1vcnlfb3BlcmFuZCIgInIsbixDYTQsQ2I0LG4iKSkpCisgICAoY2xvYmJlciAo bWF0Y2hfc2NyYXRjaDpRSSAzICAgICAgICAgICAgICAgICAgICAgICAgIj1YLFgsWCAgLFgg ICwmZCIpKQogICAgKGNsb2JiZXIgKHJlZzpDQyBSRUdfQ0MpKV0KICAgInJlbG9hZF9jb21w bGV0ZWQiCiAgIHsKQEAgLTQ0NzEsMTAgKzQ0NzYsMTMgQEAgKGRlZmluZV9pbnNuICIqYW5k c2kzIgogICAgICAgICAgICAgICJhbmQgJUMwLCVDMiIgQ1JfVEFCCiAgICAgICAgICAgICAg ImFuZCAlRDAsJUQyIjsKIAorICAgIGlmICh3aGljaF9hbHRlcm5hdGl2ZSA9PSAzKQorICAg ICAgcmV0dXJuIGF2cl9vdXRfaW5zdiAoaW5zbiwgb3BlcmFuZHMsIE5VTEwpOworCiAgICAg cmV0dXJuIGF2cl9vdXRfYml0b3AgKGluc24sIG9wZXJhbmRzLCBOVUxMKTsKICAgfQotICBb KHNldF9hdHRyICJsZW5ndGgiICI0LDQsOCw4IikKLSAgIChzZXRfYXR0ciAiYWRqdXN0X2xl biIgIiosb3V0X2JpdG9wLG91dF9iaXRvcCxvdXRfYml0b3AiKV0pCisgIFsoc2V0X2F0dHIg Imxlbmd0aCIgIjQsNCw4LDYsOCIpCisgICAoc2V0X2F0dHIgImFkanVzdF9sZW4iICIqLG91 dF9iaXRvcCxvdXRfYml0b3AsaW5zdixvdXRfYml0b3AiKV0pCiAKIChkZWZpbmVfcGVlcGhv bGUyIDsgYW5kaQogICBbKHBhcmFsbGVsIFsoc2V0IChtYXRjaF9vcGVyYW5kOlFJIDAgImRf cmVnaXN0ZXJfb3BlcmFuZCIgIiIpCkBAIC05ODUyLDYgKzk4NjAsMTIgQEAgKGRlZmluZV9p bnNuX2FuZF9zcGxpdCAiKmV4dHp2LmlvLmxzcjciCiAgICAgICAgICAgICAgICAgICAgICAg ICAgKGNvbnN0X2ludCAxKQogICAgICAgICAgICAgICAgICAgICAgICAgIChjb25zdF9pbnQg NykpKV0pCiAKKzs7IFRoaXMgaW5zbiBzZXJ2ZXMgYXMgYSBjb21iaW5lIGJyaWRnZSBiZWNh dXNlIGluc24gY29tYmluZSB3aWxsIG9ubHkKKzs7IGNvbWJpbmUgc28gbXVjaCAoMykgaW5z bnMgYXQgbW9zdC4gIEl0J3Mgbm90IGFjdHVhbGx5IGFuIG9wZW4gY29kZWQKKzs7IGJpdC1p bnNlcnRpb24gYnV0IGp1c3QgYSBwYXJ0IG9mIGl0LiAgSXQgbWF5IG9jY3VyIGluIG90aGVy IGNvbnRleHRzCis7OyB0aGFuIElOU1YgdGhvdWdoLCBhbmQgaW4gc3VjaCBhIGNhc2UgdGhl IGNvZGUgbWF5IGJlIHdvcnNlIHRoYW4gd2l0aG91dAorOzsgdGhpcyBwYXR0ZXJuLiAgV2Ug c3RpbGwgaGF2ZSB0byBlbWl0IGNvZGUgZm9yIGl0IGluIHRoYXQgY2FzZSBiZWNhdXNlCis7 OyB3ZSBjYW5ub3Qgcm9sbCBiYWNrLgogKGRlZmluZV9pbnNuX2FuZF9zcGxpdCAiKmluc3Yu YW55X3NoaWZ0Ljxtb2RlPl9zcGxpdCIKICAgWyhzZXQgKG1hdGNoX29wZXJhbmQ6UUlTSSAw ICJyZWdpc3Rlcl9vcGVyYW5kIiAiPXIiKQogICAgICAgICAoYW5kOlFJU0kgKGFueV9zaGlm dDpRSVNJIChtYXRjaF9vcGVyYW5kOlFJU0kgMSAicmVnaXN0ZXJfb3BlcmFuZCIgInIiKQpA QCAtOTg3NCwyNyArOTg4OCw5IEBAIChkZWZpbmVfaW5zbiAiKmluc3YuYW55X3NoaWZ0Ljxt b2RlPiIKICAgIChjbG9iYmVyIChyZWc6Q0MgUkVHX0NDKSldCiAgICJyZWxvYWRfY29tcGxl dGVkIgogICB7Ci0gICAgaW50IHNoaWZ0ID0gPENPREU+ID09IEFTSElGVCA/IElOVFZBTCAo b3BlcmFuZHNbMl0pIDogLUlOVFZBTCAob3BlcmFuZHNbMl0pOwotICAgIGludCBtYXNrID0g R0VUX01PREVfTUFTSyAoPE1PREU+bW9kZSkgJiBJTlRWQUwgKG9wZXJhbmRzWzNdKTsKLSAg ICAvLyBQb3NpdGlvbiBvZiB0aGUgb3V0cHV0IC8gaW5wdXQgYml0LCByZXNwZWN0aXZlbHku Ci0gICAgaW50IG9iaXQgPSBleGFjdF9sb2cyIChtYXNrKTsKLSAgICBpbnQgaWJpdCA9IG9i aXQgLSBzaGlmdDsKLSAgICBnY2NfYXNzZXJ0IChJTl9SQU5HRSAob2JpdCwgMCwgPE1TQj4p KTsKLSAgICBnY2NfYXNzZXJ0IChJTl9SQU5HRSAoaWJpdCwgMCwgPE1TQj4pKTsKLSAgICBv cGVyYW5kc1szXSA9IEdFTl9JTlQgKG9iaXQpOwotICAgIG9wZXJhbmRzWzJdID0gR0VOX0lO VCAoaWJpdCk7Ci0KLSAgICBpZiAoPFNJWkU+ID09IDEpIHJldHVybiAiYnN0ICVUMSVUMlw7 Y2xyICUwXDsiICAgICAgICAgICAgICAgICAiYmxkICVUMCVUMyI7Ci0gICAgaWYgKDxTSVpF PiA9PSAyKSByZXR1cm4gImJzdCAlVDElVDJcO2NsciAlQTBcO2NsciAlQjBcOyIgICAgICAg ImJsZCAlVDAlVDMiOwotICAgIGlmICg8U0laRT4gPT0gMykgcmV0dXJuICJic3QgJVQxJVQy XDtjbHIgJUEwXDtjbHIgJUIwXDtjbHIgJUMwXDtibGQgJVQwJVQzIjsKLSAgICByZXR1cm4g QVZSX0hBVkVfTU9WVwotICAgICAgPyAiYnN0ICVUMSVUMlw7Y2xyICVBMFw7Y2xyICVCMFw7 bW92dyAlQzAsJUEwXDsiICAiYmxkICVUMCVUMyIKLSAgICAgIDogImJzdCAlVDElVDJcO2Ns ciAlQTBcO2NsciAlQjBcO2NsciAlQzBcO2NsciAlRDBcO2JsZCAlVDAlVDMiOworICAgIHJl dHVybiBhdnJfb3V0X2luc3YgKGluc24sIG9wZXJhbmRzLCBudWxscHRyKTsKICAgfQotICBb KHNldCAoYXR0ciAibGVuZ3RoIikKLSAgICAgICAgKG1pbnVzIChzeW1ib2xfcmVmICIyICsg PFNJWkU+IikKLSAgICAgICAgICAgICAgIDsgT25lIGxlc3MgaWYgd2UgY2FuIHVzZSBhIE1P VlcgdG8gY2xlYXIuCi0gICAgICAgICAgICAgICAoc3ltYm9sX3JlZiAiPFNJWkU+ID09IDQg JiYgQVZSX0hBVkVfTU9WVyIpKSldKQorICBbKHNldF9hdHRyICJhZGp1c3RfbGVuIiAiaW5z diIpXSkKIAogCiAoZGVmaW5lX2luc25fYW5kX3NwbGl0ICIqZXh0enYuPG1vZGU+aGkyIgpk aWZmIC0tZ2l0IGEvZ2NjL2NvbmZpZy9hdnIvY29uc3RyYWludHMubWQgYi9nY2MvY29uZmln L2F2ci9jb25zdHJhaW50cy5tZAppbmRleCA4MWVkNjNkYjJjYy4uZmFjNTRkYTE3ZGIgMTAw NjQ0Ci0tLSBhL2djYy9jb25maWcvYXZyL2NvbnN0cmFpbnRzLm1kCisrKyBiL2djYy9jb25m aWcvYXZyL2NvbnN0cmFpbnRzLm1kCkBAIC0xODgsNiArMTg4LDIxIEBAIChkZWZpbmVfY29u c3RyYWludCAiQ280IgogICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQogICAgICAg IChtYXRjaF90ZXN0ICJhdnJfcG9wY291bnRfZWFjaF9ieXRlIChvcCwgNCwgKDE8PDApIHwg KDE8PDEpIHwgKDE8PDgpKSIpKSkKIAorKGRlZmluZV9jb25zdHJhaW50ICJDYjIiCisgICJD b25zdGFudCAyLWJ5dGUgaW50ZWdlciB0aGF0IGhhcyBleGFjdGx5IDEgYml0IHNldC4iCisg IChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCisgICAgICAgKG1hdGNoX3Rlc3QgInNp bmdsZV9vbmVfb3BlcmFuZCAob3AsIEhJbW9kZSkiKSkpCisKKyhkZWZpbmVfY29uc3RyYWlu dCAiQ2IzIgorICAiQ29uc3RhbnQgMy1ieXRlIGludGVnZXIgdGhhdCBoYXMgZXhhY3RseSAx IGJpdCBzZXQuIgorICAoYW5kIChtYXRjaF9jb2RlICJjb25zdF9pbnQiKQorICAgICAgICht YXRjaF90ZXN0ICJzaW5nbGVfb25lX29wZXJhbmQgKG9wLCBQU0ltb2RlKSIpKSkKKworKGRl ZmluZV9jb25zdHJhaW50ICJDYjQiCisgICJDb25zdGFudCA0LWJ5dGUgaW50ZWdlciB0aGF0 IGhhcyBleGFjdGx5IDEgYml0IHNldC4iCisgIChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2lu dCIpCisgICAgICAgKG1hdGNoX3Rlc3QgInNpbmdsZV9vbmVfb3BlcmFuZCAob3AsIFNJbW9k ZSkiKSkpCisKIChkZWZpbmVfY29uc3RyYWludCAiQ3gyIgogICAiQ29uc3RhbnQgMi1ieXRl IGludGVnZXIgdGhhdCBhbGxvd3MgWE9SIHdpdGhvdXQgY2xvYmJlciByZWdpc3Rlci4iCiAg IChhbmQgKG1hdGNoX2NvZGUgImNvbnN0X2ludCIpCmRpZmYgLS1naXQgYS9nY2MvdGVzdHN1 aXRlL2djYy50YXJnZXQvYXZyL3RvcnR1cmUvaW5zdi1hbnlzaGlmdC1oaS5jIGIvZ2NjL3Rl c3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL2luc3YtYW55c2hpZnQtaGkuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uN2VlNWMwNDgxM2EKLS0tIC9k ZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy50YXJnZXQvYXZyL3RvcnR1cmUvaW5z di1hbnlzaGlmdC1oaS5jCkBAIC0wLDAgKzEsMTQxIEBACisvKiB7IGRnLWRvIHJ1biB9ICov CisvKiB7IGRnLWFkZGl0aW9uYWwtb3B0aW9ucyB7IC1mbm8tc3BsaXQtd2lkZS10eXBlcyB9 IH0gKi8KKwordHlwZWRlZiBfX1VJTlQxNl9UWVBFX18gdWludDE2X3Q7CisKKy8qIFRlc3Rp bmcgaW5saW5lZCBhbmQgY29tcGxldGVseSBmb2xkZWQgdmVyc2lvbnMgb2YgZnVuY3Rpb25z CisgICBhZ2FpbnN0IHRoZWlyIG5vbi1pbmxpbmVkLCBub24tZm9sZGVkIGNvdW5udGVycGFy dHMuICAqLworCisjZGVmaW5lIE1LX0ZVTjEoT0JJVCwgTFNSKQkJCQkJCVwKKyAgc3RhdGlj IF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQkJCVwKKyAg dWludDE2X3QgZnVuMV9sc3JfIyNPQklUIyNfIyNMU1IjI19haSAoaW50IHgsIHVpbnQxNl90 IGEpCQlcCisgIHsJCQkJCQkJCQlcCisgICAgKHZvaWQpIHg7CQkJCQkJCQlcCisgICAgcmV0 dXJuIChhID4+IExTUikgJiAoMXUgPDwgT0JJVCk7CQkJCQlcCisgIH0JCQkJCQkJCQlcCisJ CQkJCQkJCQlcCisgIF9fYXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXyxfX25vY2xvbmVfXykp CQkJCVwKKyAgdWludDE2X3QgZnVuMV9sc3JfIyNPQklUIyNfIyNMU1IjI19uaSAoaW50IHgs IHVpbnQxNl90IGEpCQlcCisgIHsJCQkJCQkJCQlcCisgICAgcmV0dXJuIGZ1bjFfbHNyXyMj T0JJVCMjXyMjTFNSIyNfYWkgKHgsIGEpOwkJCQlcCisgIH0JCQkJCQkJCQlcCisJCQkJCQkJ CQlcCisgIHZvaWQgdGVzdF9mdW4xX2xzcl8jI09CSVQjI18jI0xTUiAodm9pZCkJCQkJXAor ICB7CQkJCQkJCQkJXAorICAgIGlmIChmdW4xX2xzcl8jI09CSVQjI18jI0xTUiMjX25pICgw LCAxdSA8PCAoT0JJVCArIExTUikpCQlcCisJIT0gZnVuMV9sc3JfIyNPQklUIyNfIyNMU1Ij I19haSAoMCwgMXUgPDwgKE9CSVQgKyBMU1IpKSkJXAorICAgICAgX19idWlsdGluX2Fib3J0 KCk7CQkJCQkJXAorCQkJCQkJCQkJXAorICAgIGlmIChmdW4xX2xzcl8jI09CSVQjI18jI0xT UiMjX25pICgwLCAxdSA8PCAoT0JJVCArIExTUikpCQlcCisJIT0gZnVuMV9sc3JfIyNPQklU IyNfIyNMU1IjI19haSAoMCwgLTF1KSkJCQlcCisgICAgICBfX2J1aWx0aW5fYWJvcnQoKTsJ CQkJCQlcCisgIH0KKworI2RlZmluZSBNS19GVU4zKE9CSVQsIExTUikJCQkJCQlcCisgIHN0 YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKF9fYWx3YXlzX2lubGluZV9fKSkJCQlc CisgIHVpbnQxNl90IGZ1bjNfbHNyXyMjT0JJVCMjXyMjTFNSIyNfYWkgKHVpbnQxNl90IGEp CQkJXAorICB7CQkJCQkJCQkJXAorICAgIHJldHVybiAoYSA+PiBMU1IpICYgKDF1IDw8IE9C SVQpOwkJCQkJXAorICB9CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICBfX2F0dHJpYnV0ZV9f KChfX25vaW5saW5lX18sX19ub2Nsb25lX18pKQkJCQlcCisgIHVpbnQxNl90IGZ1bjNfbHNy XyMjT0JJVCMjXyMjTFNSIyNfbmkgKHVpbnQxNl90IGEpCQkJXAorICB7CQkJCQkJCQkJXAor ICAgIHJldHVybiBmdW4zX2xzcl8jI09CSVQjI18jI0xTUiMjX2FpIChhKTsJCQkJXAorICB9 CQkJCQkJCQkJXAorCQkJCQkJCQkJXAorICB2b2lkIHRlc3RfZnVuM19sc3JfIyNPQklUIyNf IyNMU1IgKHZvaWQpCQkJCVwKKyAgewkJCQkJCQkJCVwKKyAgICBpZiAoZnVuM19sc3JfIyNP QklUIyNfIyNMU1IjI19uaSAoMXUgPDwgKE9CSVQgKyBMU1IpKQkJXAorCSE9IGZ1bjNfbHNy XyMjT0JJVCMjXyMjTFNSIyNfYWkgKDF1IDw8IChPQklUICsgTFNSKSkpCQlcCisgICAgICBf X2J1aWx0aW5fYWJvcnQoKTsJCQkJCQlcCisJCQkJCQkJCQlcCisgICAgaWYgKGZ1bjNfbHNy XyMjT0JJVCMjXyMjTFNSIyNfbmkgKDF1IDw8IChPQklUICsgTFNSKSkJCVwKKwkhPSBmdW4z X2xzcl8jI09CSVQjI18jI0xTUiMjX2FpICgtMXUpKQkJCQlcCisgICAgICBfX2J1aWx0aW5f YWJvcnQoKTsJCQkJCQlcCisgIH0KKworCisjZGVmaW5lIE1LX0ZVTjIoT0JJVCwgTFNMKQkJ CQkJCVwKKyAgc3RhdGljIF9faW5saW5lX18gX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5s aW5lX18pKQkJCVwKKyAgdWludDE2X3QgZnVuMl9sc2xfIyNPQklUIyNfIyNMU0wjI19haSAo dWludDE2X3QgYSkJCQlcCisgIHsJCQkJCQkJCQlcCisgICAgcmV0dXJuIChhIDw8IExTTCkg JiAoMXUgPDwgT0JJVCk7CQkJCQlcCisgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIF9f YXR0cmlidXRlX18oKF9fbm9pbmxpbmVfXyxfX25vY2xvbmVfXykpCQkJCVwKKyAgdWludDE2 X3QgZnVuMl9sc2xfIyNPQklUIyNfIyNMU0wjI19uaSAodWludDE2X3QgYSkJCQlcCisgIHsJ CQkJCQkJCQlcCisgICAgcmV0dXJuIGZ1bjJfbHNsXyMjT0JJVCMjXyMjTFNMIyNfYWkgKGEp OwkJCQlcCisgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHZvaWQgdGVzdF9mdW4yX2xz bF8jI09CSVQjI18jI0xTTCAodm9pZCkJCQkJXAorICB7CQkJCQkJCQkJXAorICAgIGlmIChm dW4yX2xzbF8jI09CSVQjI18jI0xTTCMjX25pICgxdSA8PCAoT0JJVCAtIExTTCkpCQlcCisJ IT0gZnVuMl9sc2xfIyNPQklUIyNfIyNMU0wjI19haSAoMXUgPDwgKE9CSVQgLSBMU0wpKSkJ CVwKKyAgICAgIF9fYnVpbHRpbl9hYm9ydCgpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBp ZiAoZnVuMl9sc2xfIyNPQklUIyNfIyNMU0wjI19uaSAoMXUgPDwgKE9CSVQgLSBMU0wpKQkJ XAorCSE9IGZ1bjJfbHNsXyMjT0JJVCMjXyMjTFNMIyNfYWkgKC0xdSkpCQkJCVwKKyAgICAg IF9fYnVpbHRpbl9hYm9ydCgpOwkJCQkJCVwKKyAgfQorCisKK01LX0ZVTjEgKDEwLCA0KQor TUtfRlVOMSAoNiwgMSkKK01LX0ZVTjEgKDEsIDUpCitNS19GVU4xICgwLCA4KQorTUtfRlVO MSAoMCwgNCkKK01LX0ZVTjEgKDAsIDEpCitNS19GVU4xICgwLCAwKQorCitNS19GVU4zICgx MCwgNCkKK01LX0ZVTjMgKDYsIDEpCitNS19GVU4zICgxLCA1KQorTUtfRlVOMyAoMCwgOCkK K01LX0ZVTjMgKDAsIDQpCitNS19GVU4zICgwLCAxKQorTUtfRlVOMyAoMCwgMCkKKworTUtf RlVOMiAoMTIsIDgpCitNS19GVU4yICgxNSwgMTUpCitNS19GVU4yICgxNCwgMTIpCitNS19G VU4yICg4LCA4KQorTUtfRlVOMiAoNywgNCkKK01LX0ZVTjIgKDUsIDQpCitNS19GVU4yICg1 LCAxKQorTUtfRlVOMiAoNCwgMCkKK01LX0ZVTjIgKDEsIDApCitNS19GVU4yICgwLCAwKQor CitpbnQgbWFpbiAodm9pZCkKK3sKKyAgdGVzdF9mdW4xX2xzcl8xMF80ICgpOworICB0ZXN0 X2Z1bjFfbHNyXzZfMSAoKTsKKyAgdGVzdF9mdW4xX2xzcl8xXzUgKCk7CisgIHRlc3RfZnVu MV9sc3JfMF84ICgpOworICB0ZXN0X2Z1bjFfbHNyXzBfNCAoKTsKKyAgdGVzdF9mdW4xX2xz cl8wXzEgKCk7CisgIHRlc3RfZnVuMV9sc3JfMF8wICgpOworCisgIHRlc3RfZnVuM19sc3Jf MTBfNCAoKTsKKyAgdGVzdF9mdW4zX2xzcl82XzEgKCk7CisgIHRlc3RfZnVuM19sc3JfMV81 ICgpOworICB0ZXN0X2Z1bjNfbHNyXzBfOCAoKTsKKyAgdGVzdF9mdW4zX2xzcl8wXzQgKCk7 CisgIHRlc3RfZnVuM19sc3JfMF8xICgpOworICB0ZXN0X2Z1bjNfbHNyXzBfMCAoKTsKKwor ICB0ZXN0X2Z1bjJfbHNsXzEyXzggKCk7CisgIHRlc3RfZnVuMl9sc2xfMTVfMTUgKCk7Cisg IHRlc3RfZnVuMl9sc2xfMTRfMTIgKCk7CisgIHRlc3RfZnVuMl9sc2xfOF84ICgpOworICB0 ZXN0X2Z1bjJfbHNsXzdfNCAoKTsKKyAgdGVzdF9mdW4yX2xzbF81XzQgKCk7CisgIHRlc3Rf ZnVuMl9sc2xfNV8xICgpOworICB0ZXN0X2Z1bjJfbHNsXzRfMCAoKTsKKyAgdGVzdF9mdW4y X2xzbF8xXzAgKCk7CisgIHRlc3RfZnVuMl9sc2xfMF8wICgpOworCisgIHJldHVybiAwOwor fQpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MudGFyZ2V0L2F2ci90b3J0dXJlL2lu c3YtYW55c2hpZnQtc2kuYyBiL2djYy90ZXN0c3VpdGUvZ2NjLnRhcmdldC9hdnIvdG9ydHVy ZS9pbnN2LWFueXNoaWZ0LXNpLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmY1MjU5M2NmMGE3Ci0tLSAvZGV2L251bGwKKysrIGIvZ2NjL3Rlc3RzdWl0ZS9n Y2MudGFyZ2V0L2F2ci90b3J0dXJlL2luc3YtYW55c2hpZnQtc2kuYwpAQCAtMCwwICsxLDg5 IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKK3R5cGVkZWYgX19VSU5UMzJfVFlQRV9fIHVp bnQzMl90OworCisvKiBUZXN0aW5nIGlubGluZWQgYW5kIGNvbXBsZXRlbHkgZm9sZGVkIHZl cnNpb25zIG9mIGZ1bmN0aW9ucworICAgYWdhaW5zdCB0aGVpciBub24taW5saW5lZCwgbm9u LWZvbGRlZCBjb3VubnRlcnBhcnRzLiAgKi8KKworI2RlZmluZSBNS19GVU4xKE9CSVQsIExT UikJCQkJCQlcCisgIHN0YXRpYyBfX2lubGluZV9fIF9fYXR0cmlidXRlX18oKF9fYWx3YXlz X2lubGluZV9fKSkJCQlcCisgIHVpbnQzMl90IGZ1bjFfbHNyXyMjT0JJVCMjXyMjTFNSIyNf YWkgKGludCB4LCB1aW50MzJfdCBhKQkJXAorICB7CQkJCQkJCQkJXAorICAgICh2b2lkKSB4 OwkJCQkJCQkJXAorICAgIHJldHVybiAoYSA+PiBMU1IpICYgKDF1bCA8PCBPQklUKTsJCQkJ CVwKKyAgfQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgX19hdHRyaWJ1dGVfXygoX19ub2lu bGluZV9fLF9fbm9jbG9uZV9fKSkJCQkJXAorICB1aW50MzJfdCBmdW4xX2xzcl8jI09CSVQj I18jI0xTUiMjX25pIChpbnQgeCwgdWludDMyX3QgYSkJCVwKKyAgewkJCQkJCQkJCVwKKyAg ICByZXR1cm4gZnVuMV9sc3JfIyNPQklUIyNfIyNMU1IjI19haSAoeCwgYSk7CQkJCVwKKyAg fQkJCQkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgdm9pZCB0ZXN0X2Z1bjFfbHNyXyMjT0JJVCMj XyMjTFNSICh2b2lkKQkJCQlcCisgIHsJCQkJCQkJCQlcCisgICAgaWYgKGZ1bjFfbHNyXyMj T0JJVCMjXyMjTFNSIyNfbmkgKDAsIDF1bCA8PCAoT0JJVCArIExTUikpCQlcCisJIT0gZnVu MV9sc3JfIyNPQklUIyNfIyNMU1IjI19haSAoMCwgMXVsIDw8IChPQklUICsgTFNSKSkpCVwK KyAgICAgIF9fYnVpbHRpbl9hYm9ydCgpOwkJCQkJCVwKKwkJCQkJCQkJCVwKKyAgICBpZiAo ZnVuMV9sc3JfIyNPQklUIyNfIyNMU1IjI19uaSAoMCwgMXVsIDw8IChPQklUICsgTFNSKSkJ CVwKKwkhPSBmdW4xX2xzcl8jI09CSVQjI18jI0xTUiMjX2FpICgwLCAtMXVsKSkJCQlcCisg ICAgICBfX2J1aWx0aW5fYWJvcnQoKTsJCQkJCQlcCisgIH0KKyAgCisKKyNkZWZpbmUgTUtf RlVOMihPQklULCBMU0wpCQkJCQkJXAorICBzdGF0aWMgX19pbmxpbmVfXyBfX2F0dHJpYnV0 ZV9fKChfX2Fsd2F5c19pbmxpbmVfXykpCQkJXAorICB1aW50MzJfdCBmdW4yX2xzbF8jI09C SVQjI18jI0xTTCMjX2FpIChpbnQgeCwgdWludDMyX3QgYSkJCVwKKyAgewkJCQkJCQkJCVwK KyAgICAodm9pZCkgeDsJCQkJCQkJCVwKKyAgICByZXR1cm4gKGEgPDwgTFNMKSAmICgxdWwg PDwgT0JJVCk7CQkJCQlcCisgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIF9fYXR0cmli dXRlX18oKF9fbm9pbmxpbmVfXyxfX25vY2xvbmVfXykpCQkJCVwKKyAgdWludDMyX3QgZnVu Ml9sc2xfIyNPQklUIyNfIyNMU0wjI19uaSAoaW50IHgsIHVpbnQzMl90IGEpCQlcCisgIHsJ CQkJCQkJCQlcCisgICAgcmV0dXJuIGZ1bjJfbHNsXyMjT0JJVCMjXyMjTFNMIyNfYWkgKHgs IGEpOwkJCQlcCisgIH0JCQkJCQkJCQlcCisJCQkJCQkJCQlcCisgIHZvaWQgdGVzdF9mdW4y X2xzbF8jI09CSVQjI18jI0xTTCAodm9pZCkJCQkJXAorICB7CQkJCQkJCQkJXAorICAgIGlm IChmdW4yX2xzbF8jI09CSVQjI18jI0xTTCMjX25pICgwLCAxdWwgPDwgKE9CSVQgLSBMU0wp KQkJXAorCSE9IGZ1bjJfbHNsXyMjT0JJVCMjXyMjTFNMIyNfYWkgKDAsIDF1bCA8PCAoT0JJ VCAtIExTTCkpKQlcCisgICAgICBfX2J1aWx0aW5fYWJvcnQoKTsJCQkJCQlcCisJCQkJCQkJ CQlcCisgICAgaWYgKGZ1bjJfbHNsXyMjT0JJVCMjXyMjTFNMIyNfbmkgKDAsIDF1bCA8PCAo T0JJVCAtIExTTCkpCQlcCisJIT0gZnVuMl9sc2xfIyNPQklUIyNfIyNMU0wjI19haSAoMCwg LTF1bCkpCQkJXAorICAgICAgX19idWlsdGluX2Fib3J0KCk7CQkJCQkJXAorICB9CisKKwor TUtfRlVOMSAoMTMsIDE1KQorTUtfRlVOMSAoMTMsIDE2KQorTUtfRlVOMSAoMTMsIDE3KQor TUtfRlVOMSAoMTMsIDEyKQorTUtfRlVOMSAoMCwgMzEpCitNS19GVU4xICgwLCA4KQorTUtf RlVOMSAoMCwgMCkKKworTUtfRlVOMiAoMTIsIDgpCitNS19GVU4yICgxMywgOCkKK01LX0ZV TjIgKDE2LCA4KQorTUtfRlVOMiAoMTYsIDApCisKK2ludCBtYWluICh2b2lkKQoreworICB0 ZXN0X2Z1bjFfbHNyXzEzXzE1ICgpOworICB0ZXN0X2Z1bjFfbHNyXzEzXzE2ICgpOworICB0 ZXN0X2Z1bjFfbHNyXzEzXzE3ICgpOworICB0ZXN0X2Z1bjFfbHNyXzEzXzEyICgpOworICB0 ZXN0X2Z1bjFfbHNyXzBfMzEgKCk7CisgIHRlc3RfZnVuMV9sc3JfMF84ICgpOworICB0ZXN0 X2Z1bjFfbHNyXzBfMCAoKTsKKworICB0ZXN0X2Z1bjJfbHNsXzEyXzggKCk7CisgIHRlc3Rf ZnVuMl9sc2xfMTNfOCAoKTsKKyAgdGVzdF9mdW4yX2xzbF8xNl84ICgpOworICB0ZXN0X2Z1 bjJfbHNsXzE2XzAgKCk7CisKKyAgcmV0dXJuIDA7Cit9Cg== --------------wlRugjJUCJM80HOO0qg0cy8q--