From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from smtp-out2.suse.de (smtp-out2.suse.de [195.135.220.29]) by sourceware.org (Postfix) with ESMTPS id 90B763858C2C for ; Mon, 8 Nov 2021 15:05:10 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 90B763858C2C Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=suse.cz Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=suse.cz Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by smtp-out2.suse.de (Postfix) with ESMTPS id 64B461FDBC; Mon, 8 Nov 2021 15:05:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_rsa; t=1636383909; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ZjJm8JORzlebH2T5Du0iLbPd2txznxQ7FCnbxEbc4bY=; b=otEdRanSzkpMuyYR40wBxvLQD+uAvywQOPHg6BLEOxtakkceR/joKEpF+cimQm/uKHvEGV YdBa5MsZhraVAzILdURpj5DssC1h/zFnMEy9tPbz9KPo4TYRLdbeEG6vq3TEqlPRdkjWjs f8xnaSaDAQxhagqa66LAn5enYk+skyA= DKIM-Signature: v=1; a=ed25519-sha256; c=relaxed/relaxed; d=suse.cz; s=susede2_ed25519; t=1636383909; h=from:from:reply-to:date:date:message-id:message-id:to:to:cc:cc: mime-version:mime-version:content-type:content-type: in-reply-to:in-reply-to:references:references; bh=ZjJm8JORzlebH2T5Du0iLbPd2txznxQ7FCnbxEbc4bY=; b=RTD2nVEOPVNsU2jvFbMGExoMNLn1sMniGiO7WeCdcPW/xaGfpVtaM408nO+V7gHsFJzrGC yzg0KXj/6oSwv+BQ== Received: from imap2.suse-dmz.suse.de (imap2.suse-dmz.suse.de [192.168.254.74]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature ECDSA (P-521) server-digest SHA512) (No client certificate requested) by imap2.suse-dmz.suse.de (Postfix) with ESMTPS id 4790F13BB6; Mon, 8 Nov 2021 15:05:09 +0000 (UTC) Received: from dovecot-director2.suse.de ([192.168.254.65]) by imap2.suse-dmz.suse.de with ESMTPSA id Y8SDEKU8iWEzOwAAMHmgww (envelope-from ); Mon, 08 Nov 2021 15:05:09 +0000 Content-Type: multipart/mixed; boundary="------------nvEWHCifzkPOuNKQVdLXXULS" Message-ID: <5c6c91d4-ed8b-8d98-2cd9-bafc84e6f2a4@suse.cz> Date: Mon, 8 Nov 2021 16:05:08 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:91.0) Gecko/20100101 Thunderbird/91.3.0 Subject: Re: [PATCH] Loop unswitching: support gswitch statements. Content-Language: en-US To: Andrew MacLeod , Richard Biener Cc: GCC Patches References: <7791e850-f74d-8c1c-f67c-e02f3f6e007d@redhat.com> From: =?UTF-8?Q?Martin_Li=c5=a1ka?= In-Reply-To: <7791e850-f74d-8c1c-f67c-e02f3f6e007d@redhat.com> X-Spam-Status: No, score=-13.0 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, NICE_REPLY_A, SPF_HELO_NONE, SPF_PASS, TXREP, WEIRD_PORT autolearn=ham autolearn_force=no version=3.4.4 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on server2.sourceware.org X-BeenThere: gcc-patches@gcc.gnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Gcc-patches mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 08 Nov 2021 15:05:13 -0000 This is a multi-part message in MIME format. --------------nvEWHCifzkPOuNKQVdLXXULS Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit On 9/28/21 22:39, Andrew MacLeod wrote: > In Theory, modifying the IL should be fine, it happens already in places, but its not extensively tested under those conditions yet. Hello Andrew. I've just tried using a global gimple_ranger and it crashes when loop unswitching duplicates some BBs. Please try the attached patch for: $ ./xgcc -B. /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c -O3 -c during GIMPLE pass: unswitch /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c: In function ‘xml_colorize_line’: /home/marxin/Programming/gcc/gcc/testsuite/gcc.dg/loop-unswitch-1.c:6:6: internal compiler error: in get_bb_range, at gimple-range-cache.cc:255 6 | void xml_colorize_line(unsigned int *p, int state) | ^~~~~~~~~~~~~~~~~ 0x871fcf sbr_vector::get_bb_range(irange&, basic_block_def const*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:255 0x871fcf sbr_vector::get_bb_range(irange&, basic_block_def const*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:253 0x1b99800 ranger_cache::fill_block_cache(tree_node*, basic_block_def*, basic_block_def*) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:1332 0x1b99bc4 ranger_cache::block_range(irange&, basic_block_def*, tree_node*, bool) /home/marxin/Programming/gcc/gcc/gimple-range-cache.cc:1107 0x1b9461c gimple_ranger::range_on_entry(irange&, basic_block_def*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:144 0x1b95140 gimple_ranger::range_of_expr(irange&, tree_node*, gimple*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:118 0x1b9ebef fold_using_range::range_of_range_op(irange&, gimple*, fur_source&) /home/marxin/Programming/gcc/gcc/gimple-range-fold.cc:600 0x1ba0221 fold_using_range::fold_stmt(irange&, gimple*, fur_source&, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range-fold.cc:552 0x1b94a16 gimple_ranger::fold_range_internal(irange&, gimple*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:243 0x1b94bab gimple_ranger::range_of_stmt(irange&, gimple*, tree_node*) /home/marxin/Programming/gcc/gcc/gimple-range.cc:273 0x10a5b5f tree_unswitch_single_loop /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:390 0x10a5d62 tree_unswitch_single_loop /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:546 0x10a68fe tree_ssa_unswitch_loops() /home/marxin/Programming/gcc/gcc/tree-ssa-loop-unswitch.c:106 Martin --------------nvEWHCifzkPOuNKQVdLXXULS Content-Type: text/x-patch; charset=UTF-8; name="unswitch-global-ranger.patch" Content-Disposition: attachment; filename="unswitch-global-ranger.patch" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL2djYy90ZXN0c3VpdGUvZ2NjLmRnL2xvb3AtdW5zd2l0Y2gtNi5jIGIv Z2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC11bnN3aXRjaC02LmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjhhMDIyZTBmMjAwCi0tLSAvZGV2L251bGwKKysr IGIvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC11bnN3aXRjaC02LmMKQEAgLTAsMCArMSw1 NiBAQAorLyogeyBkZy1kbyBjb21waWxlIH0gKi8KKy8qIHsgZGctb3B0aW9ucyAiLU8yIC1m dW5zd2l0Y2gtbG9vcHMgLWZkdW1wLXRyZWUtdW5zd2l0Y2gtZGV0YWlscyAtLXBhcmFtPW1h eC11bnN3aXRjaC1pbnNucz0xMDAwIC0tcGFyYW09bWF4LXVuc3dpdGNoLWxldmVsPTEwIiB9 ICovCisKK2ludAorX19hdHRyaWJ1dGVfXygobm9pcGEpKQorZm9vKGRvdWJsZSAqYSwgZG91 YmxlICpiLCBkb3VibGUgKmMsIGRvdWJsZSAqZCwgZG91YmxlICpyLCBpbnQgc2l6ZSwgaW50 IG9yZGVyKQoreworICBmb3IgKGludCBpID0gMDsgaSA8IHNpemU7IGkrKykKKyAgeworICAg IGRvdWJsZSB0bXAsIHRtcDI7CisKKyAgICBzd2l0Y2gob3JkZXIpCisgICAgeworICAgICAg Y2FzZSAwOgorICAgICAgICB0bXAgPSAtOCAqIGFbaV07CisgICAgICAgIHRtcDIgPSAyICog YltpXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBjYXNlIDE6IAorICAgICAgICB0bXAgPSAz ICogYVtpXSAtICAyICogYltpXTsKKyAgICAgICAgdG1wMiA9IDUgKiBiW2ldIC0gMiAqIGNb aV07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAyOgorICAgICAgICB0bXAgPSA5ICog YVtpXSArICAyICogYltpXSArIGNbaV07CisgICAgICAgIHRtcDIgPSA0ICogYltpXSArIDIg KiBjW2ldICsgOCAqIGRbaV07CisgICAgICAgIGJyZWFrOworICAgICAgY2FzZSAzOgorICAg ICAgICB0bXAgPSAzICogYVtpXSArICAyICogYltpXSAtIGNbaV07CisgICAgICAgIHRtcDIg PSBiW2ldIC0gMiAqIGNbaV0gKyA4ICogZFtpXTsKKyAgICAgICAgYnJlYWs7CisgICAgICBk ZWZhdXQ6CisgICAgICAgIF9fYnVpbHRpbl91bnJlYWNoYWJsZSAoKTsKKyAgICB9CisKKyAg ICBkb3VibGUgeCA9IDMgKiB0bXAgKyBkW2ldICsgdG1wOworICAgIGRvdWJsZSB5ID0gMy40 ZiAqIHRtcCArIGRbaV0gKyB0bXAyOworICAgIHJbaV0gPSB4ICsgeTsKKyAgfQorCisgIHJl dHVybiAwOworfQorCisjZGVmaW5lIE4gMTYgKiAxMDI0Citkb3VibGUgYWFbTl0sIGJiW05d LCBjY1tOXSwgZGRbTl0sIHJyW05dOworCitpbnQgbWFpbigpCit7CisgIGZvciAoaW50IGkg PSAwOyBpIDwgMTAwICogMTAwMDsgaSsrKQorICAgIGZvbyAoYWEsIGJiLCBjYywgZGQsIHJy LCBOLCBpICUgNCk7Cit9CisKKworLyogVGVzdCB0aGF0IHdlIGFjdHVhbGx5IHVuc3dpdGNo ZWQgc29tZXRoaW5nLiAgKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiOzsg VW5zd2l0Y2hpbmcgbG9vcCB3aXRoIGNvbmRpdGlvbjogb3JkZXIuKiA9PSAwIiAidW5zd2l0 Y2giIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJlZS1kdW1wICI7OyBVbnN3aXRj aGluZyBsb29wIHdpdGggY29uZGl0aW9uOiBvcmRlci4qID09IDEiICJ1bnN3aXRjaCIgfSB9 ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAgIjs7IFVuc3dpdGNoaW5nIGxv b3Agd2l0aCBjb25kaXRpb246IG9yZGVyLiogPT0gMiIgInVuc3dpdGNoIiB9IH0gKi8KKy8q IHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiOzsgVW5zd2l0Y2hpbmcgbG9vcCB3aXRo IGNvbmRpdGlvbjogb3JkZXIuKiA9PSAzIiAidW5zd2l0Y2giIH0gfSAqLwpkaWZmIC0tZ2l0 IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC11bnN3aXRjaC03LmMgYi9nY2MvdGVzdHN1 aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTcuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl eCAwMDAwMDAwMDAwMC4uMDBmMmZjZmY2NGIKLS0tIC9kZXYvbnVsbAorKysgYi9nY2MvdGVz dHN1aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTcuYwpAQCAtMCwwICsxLDQ1IEBACisvKiB7 IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25zICItTzIgLWZ1bnN3aXRjaC1s b29wcyAtZmR1bXAtdHJlZS11bnN3aXRjaC1kZXRhaWxzIC0tcGFyYW09bWF4LXVuc3dpdGNo LWluc25zPTEwMDAgLS1wYXJhbT1tYXgtdW5zd2l0Y2gtbGV2ZWw9MTAiIH0gKi8KKworaW50 Citmb28oZG91YmxlICphLCBkb3VibGUgKmIsIGRvdWJsZSAqYywgZG91YmxlICpkLCBkb3Vi bGUgKnIsIGludCBzaXplLCBpbnQgb3JkZXIpCit7CisgIGZvciAoaW50IGkgPSAwOyBpIDwg c2l6ZTsgaSsrKQorICB7CisgICAgZG91YmxlIHRtcCwgdG1wMjsKKworICAgIHN3aXRjaChv cmRlcikKKyAgICB7CisgICAgICBjYXNlIDUgLi4uIDY6CisgICAgICBjYXNlIDk6CisgICAg ICAgIHRtcCA9IC04ICogYVtpXTsKKyAgICAgICAgdG1wMiA9IDIgKiBiW2ldOworICAgICAg ICBicmVhazsKKyAgICAgIGNhc2UgMTE6IAorICAgICAgICB0bXAgPSAzICogYVtpXSAtICAy ICogYltpXTsKKyAgICAgICAgdG1wMiA9IDUgKiBiW2ldIC0gMiAqIGNbaV07CisgICAgICAg IGJyZWFrOworICAgICAgY2FzZSAyMjoKKyAgICAgICAgdG1wID0gOSAqIGFbaV0gKyAgMiAq IGJbaV0gKyBjW2ldOworICAgICAgICB0bXAyID0gNCAqIGJbaV0gKyAyICogY1tpXSArIDgg KiBkW2ldOworICAgICAgICBicmVhazsKKyAgICAgIGNhc2UgMzM6CisgICAgICAgIHRtcCA9 IDMgKiBhW2ldICsgIDIgKiBiW2ldIC0gY1tpXTsKKyAgICAgICAgdG1wMiA9IGJbaV0gLSAy ICogY1tpXSArIDggKiBkW2ldOworICAgICAgICBicmVhazsKKyAgICAgIGRlZmF1dDoKKyAg ICAgICAgX19idWlsdGluX3VucmVhY2hhYmxlICgpOworICAgIH0KKworICAgIGRvdWJsZSB4 ID0gMyAqIHRtcCArIGRbaV0gKyB0bXA7CisgICAgZG91YmxlIHkgPSAzLjRmICogdG1wICsg ZFtpXSArIHRtcDI7CisgICAgcltpXSA9IHggKyB5OworICB9CisKKyAgcmV0dXJuIDA7Cit9 CisKKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiOzsgVW5zd2l0Y2hpbmcgbG9v cCB3aXRoIGNvbmRpdGlvbjogb3JkZXJfLiogPj0gNSAmIG9yZGVyXy4qIDw9IDYgfCBvcmRl cl8uKiA9PSA5IiAidW5zd2l0Y2giIH0gfSAqLworLyogeyBkZy1maW5hbCB7IHNjYW4tdHJl ZS1kdW1wICI7OyBVbnN3aXRjaGluZyBsb29wIHdpdGggY29uZGl0aW9uOiBvcmRlci4qID09 IDEiICJ1bnN3aXRjaCIgfSB9ICovCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAg Ijs7IFVuc3dpdGNoaW5nIGxvb3Agd2l0aCBjb25kaXRpb246IG9yZGVyLiogPT0gMiIgInVu c3dpdGNoIiB9IH0gKi8KKy8qIHsgZGctZmluYWwgeyBzY2FuLXRyZWUtZHVtcCAiOzsgVW5z d2l0Y2hpbmcgbG9vcCB3aXRoIGNvbmRpdGlvbjogb3JkZXIuKiA9PSAzIiAidW5zd2l0Y2gi IH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC11bnN3aXRj aC04LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTguYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNGNlYzFmNTNiY2MKLS0tIC9kZXYv bnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTguYwpAQCAt MCwwICsxLDI4IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1vcHRpb25z ICItTzIgLWZ1bnN3aXRjaC1sb29wcyAtZmR1bXAtdHJlZS11bnN3aXRjaC1kZXRhaWxzIiB9 ICovCisKK2ludAorZm9vKGRvdWJsZSAqYSwgZG91YmxlICpiLCBkb3VibGUgKmMsIGRvdWJs ZSAqZCwgZG91YmxlICpyLCBpbnQgc2l6ZSwgaW50IG9yZGVyKQoreworICBmb3IgKGludCBp ID0gMDsgaSA8IHNpemU7IGkrKykKKyAgeworICAgIGRvdWJsZSB0bXA7CisKKyAgICBpZiAo b3JkZXIgPT0gMSkKKyAgICAgIHRtcCA9IC04ICogYVtpXTsKKyAgICBlbHNlCisgICAgICB0 bXAgPSAtNCAqIGJbaV07CisKKyAgICBkb3VibGUgeCA9IDMgKiB0bXAgKyBkW2ldICsgdG1w OworCisgICAgaWYgKG9yZGVyID09IDEpCisgICAgICB4ICs9IDI7CisKKyAgICBkb3VibGUg eSA9IDMuNGYgKiB0bXAgKyBkW2ldOworICAgIHJbaV0gPSB4ICsgeTsKKyAgfQorCisgIHJl dHVybiAwOworfQorCisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIjs7 IFVuc3dpdGNoaW5nIGxvb3Agd2l0aCBjb25kaXRpb246IG9yZGVyLiogPT0gMSIgMSAidW5z d2l0Y2giIH0gfSAqLwpkaWZmIC0tZ2l0IGEvZ2NjL3Rlc3RzdWl0ZS9nY2MuZGcvbG9vcC11 bnN3aXRjaC05LmMgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTkuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uMzA1OGQ0YTViMzgKLS0t IC9kZXYvbnVsbAorKysgYi9nY2MvdGVzdHN1aXRlL2djYy5kZy9sb29wLXVuc3dpdGNoLTku YwpAQCAtMCwwICsxLDM0IEBACisvKiB7IGRnLWRvIGNvbXBpbGUgfSAqLworLyogeyBkZy1v cHRpb25zICItTzIgLWZ1bnN3aXRjaC1sb29wcyAtZmR1bXAtdHJlZS11bnN3aXRjaC1kZXRh aWxzIiB9ICovCisKK2ludAorZm9vKGRvdWJsZSAqYSwgZG91YmxlICpiLCBkb3VibGUgKmMs IGRvdWJsZSAqZCwgZG91YmxlICpyLCBpbnQgc2l6ZSwgdW5zaWduZWQgb3JkZXIpCit7Cisg IGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZTsgaSsrKQorICB7CisgICAgZG91YmxlIHRtcDsK KworICAgIHN3aXRjaCAob3JkZXIpCisgICAgICB7CisgICAgICBjYXNlIDAgLi4uIDQ6CisJ dG1wID0gLTggKiBhW2ldOworCWJyZWFrOworICAgICAgZGVmYXVsdDoKKwl0bXAgPSAtNCAq IGJbaV07CisJYnJlYWs7CisgICAgICB9CisKKyAgICBkb3VibGUgeCA9IDMgKiB0bXAgKyBk W2ldICsgdG1wOworCisgICAgLyogVGhpcyBzaG91bGQgbm90IGJlIHVuc3dpdGNoZWQgYXMg aXQncyBtdXR1YWxseSBleGNsdWRlZCB3aXRoIGNhc2UgMCAuLi4gNC4gICovCisgICAgaWYg KG9yZGVyID49IDUpCisgICAgICB4ICs9IDI7CisKKyAgICBkb3VibGUgeSA9IDMuNGYgKiB0 bXAgKyBkW2ldOworICAgIHJbaV0gPSB4ICsgeTsKKyAgfQorCisgIHJldHVybiAwOworfQor CisvKiB7IGRnLWZpbmFsIHsgc2Nhbi10cmVlLWR1bXAtdGltZXMgIjs7IFVuc3dpdGNoaW5n IGxvb3Agd2l0aCBjb25kaXRpb246IG9yZGVyLiogPD0gNCIgMSAidW5zd2l0Y2giIH0gfSAq LwpkaWZmIC0tZ2l0IGEvZ2NjL3RyZWUtY2ZnLmMgYi9nY2MvdHJlZS1jZmcuYwppbmRleCA4 ZWQ4YzY5YjViMS4uN2RiNTRmMWNkYTIgMTAwNjQ0Ci0tLSBhL2djYy90cmVlLWNmZy5jCisr KyBiL2djYy90cmVlLWNmZy5jCkBAIC05MDYyLDExICs5MDYyLDE2IEBAIGdpbXBsZV9sdl9h ZGRfY29uZGl0aW9uX3RvX2JiIChiYXNpY19ibG9jayBmaXJzdF9oZWFkIEFUVFJJQlVURV9V TlVTRUQsCiAgIGVkZ2UgZTA7CiAKICAgLyogQnVpbGQgbmV3IGNvbmRpdGlvbmFsIGV4cHIg Ki8KKyAgZ3NpID0gZ3NpX2xhc3RfYmIgKGNvbmRfYmIpOworCisgIGNvbmRfZXhwciA9IGZv cmNlX2dpbXBsZV9vcGVyYW5kX2dzaV8xICgmZ3NpLCBjb25kX2V4cHIsCisJCQkJCSAgaXNf Z2ltcGxlX2NvbmRleHByX2Zvcl9jb25kLAorCQkJCQkgIE5VTExfVFJFRSwgZmFsc2UsCisJ CQkJCSAgR1NJX0NPTlRJTlVFX0xJTktJTkcpOwogICBuZXdfY29uZF9leHByID0gZ2ltcGxl X2J1aWxkX2NvbmRfZnJvbV90cmVlIChjb25kX2V4cHIsCiAJCQkJCSAgICAgICBOVUxMX1RS RUUsIE5VTExfVFJFRSk7CiAKICAgLyogQWRkIG5ldyBjb25kIGluIGNvbmRfYmIuICAqLwot ICBnc2kgPSBnc2lfbGFzdF9iYiAoY29uZF9iYik7CiAgIGdzaV9pbnNlcnRfYWZ0ZXIgKCZn c2ksIG5ld19jb25kX2V4cHIsIEdTSV9ORVdfU1RNVCk7CiAKICAgLyogQWRqdXN0IGVkZ2Vz IGFwcHJvcHJpYXRlbHkgdG8gY29ubmVjdCBuZXcgaGVhZCB3aXRoIGZpcnN0IGhlYWQKZGlm ZiAtLWdpdCBhL2djYy90cmVlLXNzYS1sb29wLXVuc3dpdGNoLmMgYi9nY2MvdHJlZS1zc2Et bG9vcC11bnN3aXRjaC5jCmluZGV4IGZlNGRhY2MwODMzLi40MTI2MWVmZTQwNCAxMDA2NDQK LS0tIGEvZ2NjL3RyZWUtc3NhLWxvb3AtdW5zd2l0Y2guYworKysgYi9nY2MvdHJlZS1zc2Et bG9vcC11bnN3aXRjaC5jCkBAIC0zNyw2ICszNywxMCBAQCBhbG9uZyB3aXRoIEdDQzsgc2Vl IHRoZSBmaWxlIENPUFlJTkczLiAgSWYgbm90IHNlZQogI2luY2x1ZGUgImdpbXBsZS1pdGVy YXRvci5oIgogI2luY2x1ZGUgImNmZ2hvb2tzLmgiCiAjaW5jbHVkZSAidHJlZS1zc2EtbG9v cC1tYW5pcC5oIgorI2luY2x1ZGUgImNmZ2FuYWwuaCIKKyNpbmNsdWRlICJ0cmVlLWNmZ2Ns ZWFudXAuaCIKKyNpbmNsdWRlICJ0cmVlLXByZXR0eS1wcmludC5oIgorI2luY2x1ZGUgImdp bXBsZS1yYW5nZS5oIgogCiAvKiBUaGlzIGZpbGUgaW1wbGVtZW50cyB0aGUgbG9vcCB1bnN3 aXRjaGluZywgaS5lLiB0cmFuc2Zvcm1hdGlvbiBvZiBsb29wcyBsaWtlCiAKQEAgLTc0LDkg Kzc4LDkgQEAgYWxvbmcgd2l0aCBHQ0M7IHNlZSB0aGUgZmlsZSBDT1BZSU5HMy4gIElmIG5v dCBzZWUKICAgIHRyZWUtc3NhLWxvb3AtaW0uYyBlbnN1cmVzIHRoYXQgYWxsIHRoZSBzdWl0 YWJsZSBjb25kaXRpb25zIGFyZSBpbiB0aGlzCiAgICBzaGFwZS4gICovCiAKLXN0YXRpYyBj bGFzcyBsb29wICp0cmVlX3Vuc3dpdGNoX2xvb3AgKGNsYXNzIGxvb3AgKiwgYmFzaWNfYmxv Y2ssIHRyZWUpOwotc3RhdGljIGJvb2wgdHJlZV91bnN3aXRjaF9zaW5nbGVfbG9vcCAoY2xh c3MgbG9vcCAqLCBpbnQpOwotc3RhdGljIHRyZWUgdHJlZV9tYXlfdW5zd2l0Y2hfb24gKGJh c2ljX2Jsb2NrLCBjbGFzcyBsb29wICopOworc3RhdGljIGNsYXNzIGxvb3AgKnRyZWVfdW5z d2l0Y2hfbG9vcCAoY2xhc3MgbG9vcCAqLCBiYXNpY19ibG9jaywgdHJlZSwgZWRnZSk7Citz dGF0aWMgYm9vbCB0cmVlX3Vuc3dpdGNoX3NpbmdsZV9sb29wIChjbGFzcyBsb29wICosIGdp bXBsZV9yYW5nZXIgKnJhbmdlciwgaW50KTsKK3N0YXRpYyB0cmVlIHRyZWVfbWF5X3Vuc3dp dGNoX29uIChiYXNpY19ibG9jaywgY2xhc3MgbG9vcCAqLCBlZGdlICopOwogc3RhdGljIGJv b2wgdHJlZV91bnN3aXRjaF9vdXRlcl9sb29wIChjbGFzcyBsb29wICopOwogc3RhdGljIGVk Z2UgZmluZF9sb29wX2d1YXJkIChjbGFzcyBsb29wICopOwogc3RhdGljIGJvb2wgZW1wdHlf YmJfd2l0aG91dF9ndWFyZF9wIChjbGFzcyBsb29wICosIGJhc2ljX2Jsb2NrKTsKQEAgLTg0 LDYgKzg4LDcgQEAgc3RhdGljIGJvb2wgdXNlZF9vdXRzaWRlX2xvb3BfcCAoY2xhc3MgbG9v cCAqLCB0cmVlKTsKIHN0YXRpYyB2b2lkIGhvaXN0X2d1YXJkIChjbGFzcyBsb29wICosIGVk Z2UpOwogc3RhdGljIGJvb2wgY2hlY2tfZXhpdF9waGkgKGNsYXNzIGxvb3AgKik7CiBzdGF0 aWMgdHJlZSBnZXRfdm9wX2Zyb21faGVhZGVyIChjbGFzcyBsb29wICopOworc3RhdGljIHZv aWQgY2xlYW5fdXBfc3dpdGNoZXMgKHZvaWQpOwogCiAvKiBNYWluIGVudHJ5IHBvaW50LiAg UGVyZm9ybSBsb29wIHVuc3dpdGNoaW5nIG9uIGFsbCBzdWl0YWJsZSBsb29wcy4gICovCiAK QEAgLTkxLDE5ICs5NiwyNCBAQCB1bnNpZ25lZCBpbnQKIHRyZWVfc3NhX3Vuc3dpdGNoX2xv b3BzICh2b2lkKQogewogICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgZ2ltcGxlX3Jhbmdl ciAqcmFuZ2VyID0gZW5hYmxlX3JhbmdlciAoY2Z1bik7CiAKICAgLyogR28gdGhyb3VnaCBh bGwgbG9vcHMgc3RhcnRpbmcgZnJvbSBpbm5lcm1vc3QuICAqLwogICBmb3IgKGF1dG8gbG9v cCA6IGxvb3BzX2xpc3QgKGNmdW4sIExJX0ZST01fSU5ORVJNT1NUKSkKICAgICB7CiAgICAg ICBpZiAoIWxvb3AtPmlubmVyKQogCS8qIFVuc3dpdGNoIGlubmVybW9zdCBsb29wLiAgKi8K LQljaGFuZ2VkIHw9IHRyZWVfdW5zd2l0Y2hfc2luZ2xlX2xvb3AgKGxvb3AsIDApOworCWNo YW5nZWQgfD0gdHJlZV91bnN3aXRjaF9zaW5nbGVfbG9vcCAobG9vcCwgcmFuZ2VyLCAwKTsK ICAgICAgIGVsc2UKIAljaGFuZ2VkIHw9IHRyZWVfdW5zd2l0Y2hfb3V0ZXJfbG9vcCAobG9v cCk7CiAgICAgfQorICBkaXNhYmxlX3JhbmdlciAoY2Z1bik7CiAKICAgaWYgKGNoYW5nZWQp Ci0gICAgcmV0dXJuIFRPRE9fY2xlYW51cF9jZmc7CisgICAgeworICAgICAgY2xlYW5fdXBf c3dpdGNoZXMgKCk7CisgICAgICByZXR1cm4gVE9ET19jbGVhbnVwX2NmZzsKKyAgICB9CiAg IHJldHVybiAwOwogfQogCkBAIC0xODIsODAgKzE5MiwxMTQgQEAgaXNfbWF5YmVfdW5kZWZp bmVkIChjb25zdCB0cmVlIG5hbWUsIGdpbXBsZSAqc3RtdCwgY2xhc3MgbG9vcCAqbG9vcCkK IH0KIAogLyogQ2hlY2tzIHdoZXRoZXIgd2UgY2FuIHVuc3dpdGNoIExPT1Agb24gY29uZGl0 aW9uIGF0IGVuZCBvZiBCQiAtLSBvbmUgb2YgaXRzCi0gICBiYXNpYyBibG9ja3MgKGZvciB3 aGF0IGl0IG1lYW5zIHNlZSBjb21tZW50cyBiZWxvdykuICAqLworICAgYmFzaWMgYmxvY2tz IChmb3Igd2hhdCBpdCBtZWFucyBzZWUgY29tbWVudHMgYmVsb3cpLgorICAgV2hlbiBhIGdz d2l0Y2ggY2FzZSBpcyByZXR1cm5lZCwgZmlsbCB1cCBDT05EX0VER0UgZm9yIGl0LiAgKi8K IAogc3RhdGljIHRyZWUKLXRyZWVfbWF5X3Vuc3dpdGNoX29uIChiYXNpY19ibG9jayBiYiwg Y2xhc3MgbG9vcCAqbG9vcCkKK3RyZWVfbWF5X3Vuc3dpdGNoX29uIChiYXNpY19ibG9jayBi YiwgY2xhc3MgbG9vcCAqbG9vcCwgZWRnZSAqY29uZF9lZGdlKQogewogICBnaW1wbGUgKmxh c3QsICpkZWY7Ci0gIGdjb25kICpzdG10OwotICB0cmVlIGNvbmQsIHVzZTsKKyAgdHJlZSB1 c2U7CiAgIGJhc2ljX2Jsb2NrIGRlZl9iYjsKICAgc3NhX29wX2l0ZXIgaXRlcjsKIAogICAv KiBCQiBtdXN0IGVuZCBpbiBhIHNpbXBsZSBjb25kaXRpb25hbCBqdW1wLiAgKi8KICAgbGFz dCA9IGxhc3Rfc3RtdCAoYmIpOwotICBpZiAoIWxhc3QgfHwgZ2ltcGxlX2NvZGUgKGxhc3Qp ICE9IEdJTVBMRV9DT05EKQotICAgIHJldHVybiBOVUxMX1RSRUU7Ci0gIHN0bXQgPSBhc19h IDxnY29uZCAqPiAobGFzdCk7Ci0KLSAgLyogVG8ga2VlcCB0aGUgdGhpbmdzIHNpbXBsZSwg d2UgZG8gbm90IGRpcmVjdGx5IHJlbW92ZSB0aGUgY29uZGl0aW9ucywKLSAgICAgYnV0IGp1 c3QgcmVwbGFjZSB0ZXN0cyB3aXRoIDAgIT0gMCByZXNwLiAxICE9IDAuICBQcmV2ZW50IHRo ZSBpbmZpbml0ZQotICAgICBsb29wIHdoZXJlIHdlIHdvdWxkIHVuc3dpdGNoIGFnYWluIG9u IHN1Y2ggYSBjb25kaXRpb24uICAqLwotICBpZiAoZ2ltcGxlX2NvbmRfdHJ1ZV9wIChzdG10 KSB8fCBnaW1wbGVfY29uZF9mYWxzZV9wIChzdG10KSkKLSAgICByZXR1cm4gTlVMTF9UUkVF OwotCi0gIC8qIENvbmRpdGlvbiBtdXN0IGJlIGludmFyaWFudC4gICovCi0gIEZPUl9FQUNI X1NTQV9UUkVFX09QRVJBTkQgKHVzZSwgc3RtdCwgaXRlciwgU1NBX09QX1VTRSkKKyAgaWYg KGdjb25kICpzdG10ID0gc2FmZV9keW5fY2FzdCA8Z2NvbmQgKj4gKGxhc3QpKQorICAgIHsK KyAgICAgIC8qIFRvIGtlZXAgdGhlIHRoaW5ncyBzaW1wbGUsIHdlIGRvIG5vdCBkaXJlY3Rs eSByZW1vdmUgdGhlIGNvbmRpdGlvbnMsCisJIGJ1dCBqdXN0IHJlcGxhY2UgdGVzdHMgd2l0 aCAwICE9IDAgcmVzcC4gMSAhPSAwLiAgUHJldmVudCB0aGUgaW5maW5pdGUKKwkgbG9vcCB3 aGVyZSB3ZSB3b3VsZCB1bnN3aXRjaCBhZ2FpbiBvbiBzdWNoIGEgY29uZGl0aW9uLiAgKi8K KyAgICAgIGlmIChnaW1wbGVfY29uZF90cnVlX3AgKHN0bXQpIHx8IGdpbXBsZV9jb25kX2Zh bHNlX3AgKHN0bXQpKQorCXJldHVybiBOVUxMX1RSRUU7CisKKyAgICAgIC8qIENvbmRpdGlv biBtdXN0IGJlIGludmFyaWFudC4gICovCisgICAgICBGT1JfRUFDSF9TU0FfVFJFRV9PUEVS QU5EICh1c2UsIHN0bXQsIGl0ZXIsIFNTQV9PUF9VU0UpCisJeworCSAgZGVmID0gU1NBX05B TUVfREVGX1NUTVQgKHVzZSk7CisJICBkZWZfYmIgPSBnaW1wbGVfYmIgKGRlZik7CisJICBp ZiAoZGVmX2JiCisJICAgICAgJiYgZmxvd19iYl9pbnNpZGVfbG9vcF9wIChsb29wLCBkZWZf YmIpKQorCSAgICByZXR1cm4gTlVMTF9UUkVFOworCSAgLyogVW5zd2l0Y2hpbmcgb24gdW5k ZWZpbmVkIHZhbHVlcyB3b3VsZCBpbnRyb2R1Y2UgdW5kZWZpbmVkCisJICAgICBiZWhhdmlv ciB0aGF0IHRoZSBvcmlnaW5hbCBwcm9ncmFtIG1pZ2h0IG5ldmVyIGV4ZXJjaXNlLiAgKi8K KwkgIGlmIChpc19tYXliZV91bmRlZmluZWQgKHVzZSwgc3RtdCwgbG9vcCkpCisJICAgIHJl dHVybiBOVUxMX1RSRUU7CisJfQorCisgICAgICBlZGdlIGUxID0gRURHRV9TVUNDIChiYiwg MCk7CisgICAgICBlZGdlIGUyID0gRURHRV9TVUNDIChiYiwgMSk7CisgICAgICAqY29uZF9l ZGdlID0gZTEtPmZsYWdzICYgRURHRV9UUlVFX1ZBTFVFID8gZTEgOiBlMjsKKyAgICAgIHJl dHVybiBidWlsZDIgKGdpbXBsZV9jb25kX2NvZGUgKHN0bXQpLCBib29sZWFuX3R5cGVfbm9k ZSwKKwkJICAgICBnaW1wbGVfY29uZF9saHMgKHN0bXQpLCBnaW1wbGVfY29uZF9yaHMgKHN0 bXQpKTsKKyAgICB9CisgIGVsc2UgaWYgKGdzd2l0Y2ggKnN0bXQgPSBzYWZlX2R5bl9jYXN0 IDxnc3dpdGNoICo+IChsYXN0KSkKICAgICB7Ci0gICAgICBkZWYgPSBTU0FfTkFNRV9ERUZf U1RNVCAodXNlKTsKKyAgICAgIHVuc2lnbmVkIG5sYWJlbHMgPSBnaW1wbGVfc3dpdGNoX251 bV9sYWJlbHMgKHN0bXQpOworICAgICAgdHJlZSBpZHggPSBnaW1wbGVfc3dpdGNoX2luZGV4 IChzdG10KTsKKyAgICAgIGlmIChUUkVFX0NPREUgKGlkeCkgIT0gU1NBX05BTUUKKwkgIHx8 IG5sYWJlbHMgPCAxKQorCXJldHVybiBOVUxMX1RSRUU7CisgICAgICAvKiBJbmRleCBtdXN0 IGJlIGludmFyaWFudC4gICovCisgICAgICBkZWYgPSBTU0FfTkFNRV9ERUZfU1RNVCAoaWR4 KTsKICAgICAgIGRlZl9iYiA9IGdpbXBsZV9iYiAoZGVmKTsKICAgICAgIGlmIChkZWZfYmIK IAkgICYmIGZsb3dfYmJfaW5zaWRlX2xvb3BfcCAobG9vcCwgZGVmX2JiKSkKIAlyZXR1cm4g TlVMTF9UUkVFOwogICAgICAgLyogVW5zd2l0Y2hpbmcgb24gdW5kZWZpbmVkIHZhbHVlcyB3 b3VsZCBpbnRyb2R1Y2UgdW5kZWZpbmVkCiAJIGJlaGF2aW9yIHRoYXQgdGhlIG9yaWdpbmFs IHByb2dyYW0gbWlnaHQgbmV2ZXIgZXhlcmNpc2UuICAqLwotICAgICAgaWYgKGlzX21heWJl X3VuZGVmaW5lZCAodXNlLCBzdG10LCBsb29wKSkKKyAgICAgIGlmIChpc19tYXliZV91bmRl ZmluZWQgKGlkeCwgc3RtdCwgbG9vcCkpCiAJcmV0dXJuIE5VTExfVFJFRTsKLSAgICB9Ci0K LSAgY29uZCA9IGJ1aWxkMiAoZ2ltcGxlX2NvbmRfY29kZSAoc3RtdCksIGJvb2xlYW5fdHlw ZV9ub2RlLAotCQkgZ2ltcGxlX2NvbmRfbGhzIChzdG10KSwgZ2ltcGxlX2NvbmRfcmhzIChz dG10KSk7Ci0KLSAgcmV0dXJuIGNvbmQ7Ci19Ci0KLS8qIFNpbXBsaWZpZXMgQ09ORCB1c2lu ZyBjaGVja3MgaW4gZnJvbnQgb2YgdGhlIGVudHJ5IG9mIHRoZSBMT09QLiAgSnVzdCB2ZXJ5 Ci0gICBzaW1wbGlzaCAoc3VmZmljaWVudCB0byBwcmV2ZW50IHVzIGZyb20gZHVwbGljYXRp bmcgbG9vcCBpbiB1bnN3aXRjaGluZwotICAgdW5uZWNlc3NhcmlseSkuICAqLwogCi1zdGF0 aWMgdHJlZQotc2ltcGxpZnlfdXNpbmdfZW50cnlfY2hlY2tzIChjbGFzcyBsb29wICpsb29w LCB0cmVlIGNvbmQpCi17Ci0gIGVkZ2UgZSA9IGxvb3BfcHJlaGVhZGVyX2VkZ2UgKGxvb3Ap OwotICBnaW1wbGUgKnN0bXQ7CisgICAgICBlZGdlIGU7CisgICAgICBlZGdlX2l0ZXJhdG9y IGVpOworICAgICAgRk9SX0VBQ0hfRURHRSAoZSwgZWksIGdpbXBsZV9iYiAoc3RtdCktPnN1 Y2NzKQorCXsKKwkgIGlmICghKGUtPmZsYWdzICYgRURHRV9JR05PUkUpKQorCSAgICB7CisJ ICAgICAgLyogQnVpbGQgY29tcG91bmQgZXhwcmVzc2lvbiBmb3IgYWxsIGNhc2VzIGxlYWRp bmcKKwkJIHRvIHRoaXMgZWRnZS4gICovCisJICAgICAgdHJlZSBleHByID0gTlVMTF9UUkVF OworCSAgICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBnaW1wbGVfc3dpdGNoX251bV9s YWJlbHMgKHN0bXQpOyArK2kpCisJCXsKKwkJICB0cmVlIGxhYiA9IGdpbXBsZV9zd2l0Y2hf bGFiZWwgKHN0bXQsIGkpOworCQkgIGJhc2ljX2Jsb2NrIGRlc3QgPSBsYWJlbF90b19ibG9j ayAoY2Z1biwgQ0FTRV9MQUJFTCAobGFiKSk7CisJCSAgZWRnZSBlMiA9IGZpbmRfZWRnZSAo Z2ltcGxlX2JiIChzdG10KSwgZGVzdCk7CisJCSAgaWYgKGUgPT0gZTIpCisJCSAgICB7CisJ CSAgICAgIHRyZWUgY21wOworCQkgICAgICBpZiAoQ0FTRV9ISUdIIChsYWIpICE9IE5VTExf VFJFRSkKKwkJCXsKKwkJCSAgdHJlZSBjbXAxID0gYnVpbGQyIChHRV9FWFBSLCBib29sZWFu X3R5cGVfbm9kZSwgaWR4LAorCQkJCQkgICAgICBDQVNFX0xPVyAobGFiKSk7CisJCQkgIHRy ZWUgY21wMiA9IGJ1aWxkMiAoTEVfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGlkeCwKKwkJ CQkJICAgICAgQ0FTRV9ISUdIIChsYWIpKTsKKwkJCSAgY21wID0gYnVpbGQyIChCSVRfQU5E X0VYUFIsIGJvb2xlYW5fdHlwZV9ub2RlLCBjbXAxLAorCQkJCQljbXAyKTsKKwkJCX0KKwkJ ICAgICAgZWxzZQorCQkJY21wID0gYnVpbGQyIChFUV9FWFBSLCBib29sZWFuX3R5cGVfbm9k ZSwgaWR4LAorCQkJCSAgICAgIENBU0VfTE9XIChsYWIpKTsKKworCQkgICAgICAvKiBDb21i aW5lIHRoZSBleHByZXNzaW9uIHdpdGggdGhlIGV4aXN0aW5nIG9uZS4gICovCisJCSAgICAg IGlmIChleHByID09IE5VTExfVFJFRSkKKwkJCWV4cHIgPSBjbXA7CisJCSAgICAgIGVsc2UK KwkJCWV4cHIgPSBidWlsZDIgKEJJVF9JT1JfRVhQUiwgYm9vbGVhbl90eXBlX25vZGUsIGV4 cHIsCisJCQkJICAgICAgIGNtcCk7CisJCSAgICB9CisJCX0KIAotICB3aGlsZSAoMSkKLSAg ICB7Ci0gICAgICBzdG10ID0gbGFzdF9zdG10IChlLT5zcmMpOwotICAgICAgaWYgKHN0bXQK LQkgICYmIGdpbXBsZV9jb2RlIChzdG10KSA9PSBHSU1QTEVfQ09ORAotCSAgJiYgZ2ltcGxl X2NvbmRfY29kZSAoc3RtdCkgPT0gVFJFRV9DT0RFIChjb25kKQotCSAgJiYgb3BlcmFuZF9l cXVhbF9wIChnaW1wbGVfY29uZF9saHMgKHN0bXQpLAotCQkJICAgICAgVFJFRV9PUEVSQU5E IChjb25kLCAwKSwgMCkKLQkgICYmIG9wZXJhbmRfZXF1YWxfcCAoZ2ltcGxlX2NvbmRfcmhz IChzdG10KSwKLQkJCSAgICAgIFRSRUVfT1BFUkFORCAoY29uZCwgMSksIDApKQotCXJldHVy biAoZS0+ZmxhZ3MgJiBFREdFX1RSVUVfVkFMVUUKLQkJPyBib29sZWFuX3RydWVfbm9kZQot CQk6IGJvb2xlYW5fZmFsc2Vfbm9kZSk7Ci0KLSAgICAgIGlmICghc2luZ2xlX3ByZWRfcCAo ZS0+c3JjKSkKLQlyZXR1cm4gY29uZDsKLQotICAgICAgZSA9IHNpbmdsZV9wcmVkX2VkZ2Ug KGUtPnNyYyk7Ci0gICAgICBpZiAoZS0+c3JjID09IEVOVFJZX0JMT0NLX1BUUl9GT1JfRk4g KGNmdW4pKQotCXJldHVybiBjb25kOworCSAgICAgIGlmIChleHByICE9IE5VTExfVFJFRSkK KwkJeworCQkgICpjb25kX2VkZ2UgPSBlOworCQkgIHJldHVybiBleHByOworCQl9CisJICAg IH0KKwl9CiAgICAgfQorCisgIHJldHVybiBOVUxMX1RSRUU7CiB9CiAKIC8qIFVuc3dpdGNo IHNpbmdsZSBMT09QLiAgTlVNIGlzIG51bWJlciBvZiB1bnN3aXRjaGluZ3MgZG9uZTsgd2Ug ZG8gbm90IGFsbG93CkBAIC0yNjMsMTIgKzMwNywxMyBAQCBzaW1wbGlmeV91c2luZ19lbnRy eV9jaGVja3MgKGNsYXNzIGxvb3AgKmxvb3AsIHRyZWUgY29uZCkKICAgIGdyb3cgZXhwb25l bnRpYWxseS4gICovCiAKIHN0YXRpYyBib29sCi10cmVlX3Vuc3dpdGNoX3NpbmdsZV9sb29w IChjbGFzcyBsb29wICpsb29wLCBpbnQgbnVtKQordHJlZV91bnN3aXRjaF9zaW5nbGVfbG9v cCAoY2xhc3MgbG9vcCAqbG9vcCwgZ2ltcGxlX3JhbmdlciAqcmFuZ2VyLCBpbnQgbnVtKQog ewogICBiYXNpY19ibG9jayAqYmJzOwogICBjbGFzcyBsb29wICpubG9vcDsKICAgdW5zaWdu ZWQgaSwgZm91bmQ7CiAgIHRyZWUgY29uZCA9IE5VTExfVFJFRTsKKyAgZWRnZSBjb25kX2Vk Z2UgPSBOVUxMOwogICBnaW1wbGUgKnN0bXQ7CiAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOwog ICBIT1NUX1dJREVfSU5UIGl0ZXJhdGlvbnM7CkBAIC0zMTUsNyArMzYwLDcgQEAgdHJlZV91 bnN3aXRjaF9zaW5nbGVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwgaW50IG51bSkKICAgICB7 CiAgICAgICAvKiBGaW5kIGEgYmIgdG8gdW5zd2l0Y2ggb24uICAqLwogICAgICAgZm9yICg7 IGkgPCBsb29wLT5udW1fbm9kZXM7IGkrKykKLQlpZiAoKGNvbmQgPSB0cmVlX21heV91bnN3 aXRjaF9vbiAoYmJzW2ldLCBsb29wKSkpCisJaWYgKChjb25kID0gdHJlZV9tYXlfdW5zd2l0 Y2hfb24gKGJic1tpXSwgbG9vcCwgJmNvbmRfZWRnZSkpKQogCSAgYnJlYWs7CiAKICAgICAg IGlmIChpID09IGxvb3AtPm51bV9ub2RlcykKQEAgLTMzMywyNCArMzc4LDU2IEBAIHRyZWVf dW5zd2l0Y2hfc2luZ2xlX2xvb3AgKGNsYXNzIGxvb3AgKmxvb3AsIGludCBudW0pCiAJICBi cmVhazsKIAl9CiAKLSAgICAgIGNvbmQgPSBzaW1wbGlmeV91c2luZ19lbnRyeV9jaGVja3Mg KGxvb3AsIGNvbmQpOwogICAgICAgc3RtdCA9IGxhc3Rfc3RtdCAoYmJzW2ldKTsKLSAgICAg IGlmIChpbnRlZ2VyX25vbnplcm9wIChjb25kKSkKKyAgICAgIGdjb25kICpjb25kaXRpb24g PSBkeW5fY2FzdDxnY29uZCAqPiAoc3RtdCk7CisgICAgICBnc3dpdGNoICpzd3RjaCA9IGR5 bl9jYXN0PGdzd2l0Y2ggKj4gKHN0bXQpOworCisgICAgICBpZiAoY29uZGl0aW9uICE9IE5V TEwpCiAJewotCSAgLyogUmVtb3ZlIGZhbHNlIHBhdGguICAqLwotCSAgZ2ltcGxlX2NvbmRf c2V0X2NvbmRpdGlvbl9mcm9tX3RyZWUgKGFzX2EgPGdjb25kICo+IChzdG10KSwKLQkJCQkJ ICAgICAgIGJvb2xlYW5fdHJ1ZV9ub2RlKTsKLQkgIGNoYW5nZWQgPSB0cnVlOworCSAgdHJl ZSByZXN1bHQ7CisJICBpbnRfcmFuZ2VfbWF4IHI7CisKKwkgIGlmIChyYW5nZXItPnJhbmdl X29mX3N0bXQgKHIsIHN0bXQpICYmIHIuc2luZ2xldG9uX3AgKCZyZXN1bHQpKQorCSAgICB7 CisJICAgICAgZ2ltcGxlX2NvbmRfc2V0X2NvbmRpdGlvbl9mcm9tX3RyZWUgKGNvbmRpdGlv biwKKwkJCQkJCSAgIHJlc3VsdCk7CisJICAgICAgdXBkYXRlX3N0bXQgKGNvbmRpdGlvbik7 CisJICAgICAgY2hhbmdlZCA9IHRydWU7CisJICAgIH0KIAl9Ci0gICAgICBlbHNlIGlmIChp bnRlZ2VyX3plcm9wIChjb25kKSkKKyAgICAgIGVsc2UgaWYgKHN3dGNoICE9IE5VTEwpCiAJ ewotCSAgLyogUmVtb3ZlIHRydWUgcGF0aC4gICovCi0JICBnaW1wbGVfY29uZF9zZXRfY29u ZGl0aW9uX2Zyb21fdHJlZSAoYXNfYSA8Z2NvbmQgKj4gKHN0bXQpLAotCQkJCQkgICAgICAg Ym9vbGVhbl9mYWxzZV9ub2RlKTsKLQkgIGNoYW5nZWQgPSB0cnVlOworCSAgaGFzaF9zZXQ8 ZWRnZT4gaWdub3JlZF9lZGdlczsKKwkgIHVuc2lnbmVkIG5sYWJlbHMgPSBnaW1wbGVfc3dp dGNoX251bV9sYWJlbHMgKHN3dGNoKTsKKwkgIHRyZWUgaW5kZXhfY2FuZGlkYXRlID0gTlVM TF9UUkVFOworCisJICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbmxhYmVsczsgKytpKQor CSAgICB7CisJICAgICAgdHJlZSBsYWIgPSBnaW1wbGVfc3dpdGNoX2xhYmVsIChzd3RjaCwg aSk7CisJICAgICAgYmFzaWNfYmxvY2sgZGVzdCA9IGxhYmVsX3RvX2Jsb2NrIChjZnVuLCBD QVNFX0xBQkVMIChsYWIpKTsKKwkgICAgICBlZGdlIGUgPSBmaW5kX2VkZ2UgKGdpbXBsZV9i YiAoc3RtdCksIGRlc3QpOworCisJICAgICAgaW50X3JhbmdlX21heCByOworCSAgICAgIGlm IChyYW5nZXItPnJhbmdlX29uX2VkZ2UgKHIsIGUsIGdpbXBsZV9zd2l0Y2hfaW5kZXggKHN3 dGNoKSkKKwkJICAmJiByLnVuZGVmaW5lZF9wICgpKQorCQl7CisJCSAgZS0+ZmxhZ3MgfD0g RURHRV9JR05PUkU7CisJCSAgaWdub3JlZF9lZGdlcy5hZGQgKGUpOworCQl9CisJICAgICAg ZWxzZQorCQlpbmRleF9jYW5kaWRhdGUgPSBDQVNFX0xPVyAobGFiKTsKKwkgICAgfQorCisJ ICBpZiAoaW5kZXhfY2FuZGlkYXRlICE9IE5VTExfVFJFRQorCSAgICAgICYmIGlnbm9yZWRf ZWRnZXMuZWxlbWVudHMgKCkgPT0gRURHRV9DT1VOVCAoYmJzW2ldLT5zdWNjcykgLSAxKQor CSAgICB7CisJICAgICAgZ2ltcGxlX3N3aXRjaF9zZXRfaW5kZXggKHN3dGNoLCBpbmRleF9j YW5kaWRhdGUpOworCSAgICAgIHVwZGF0ZV9zdG10IChzd3RjaCk7CisJICAgIH0KIAl9CisK ICAgICAgIC8qIERvIG5vdCB1bnN3aXRjaCB0b28gbXVjaC4gICovCi0gICAgICBlbHNlIGlm IChudW0gPiBwYXJhbV9tYXhfdW5zd2l0Y2hfbGV2ZWwpCisgICAgICBpZiAobnVtID4gcGFy YW1fbWF4X3Vuc3dpdGNoX2xldmVsKQogCXsKIAkgIGkrKzsKIAkgIGNvbnRpbnVlOwpAQCAt MzcxLDcgKzQ0OCw2IEBAIHRyZWVfdW5zd2l0Y2hfc2luZ2xlX2xvb3AgKGNsYXNzIGxvb3Ag Kmxvb3AsIGludCBudW0pCiAJICBicmVhazsKIAl9CiAKLSAgICAgIHVwZGF0ZV9zdG10IChz dG10KTsKICAgICAgIGkrKzsKICAgICB9CiAKQEAgLTQzNSw3ICs1MTEsNyBAQCB0cmVlX3Vu c3dpdGNoX3NpbmdsZV9sb29wIChjbGFzcyBsb29wICpsb29wLCBpbnQgbnVtKQogICAgICAg LyogRmluZCBhIGJiIHRvIHVuc3dpdGNoIG9uLiAgKi8KICAgICAgIGZvciAoOyBmb3VuZCA8 IGxvb3AtPm51bV9ub2RlczsgZm91bmQrKykKIAlpZiAoKGJic1tmb3VuZF0tPmZsYWdzICYg QkJfUkVBQ0hBQkxFKQotCSAgICAmJiAoY29uZCA9IHRyZWVfbWF5X3Vuc3dpdGNoX29uIChi YnNbZm91bmRdLCBsb29wKSkpCisJICAgICYmIChjb25kID0gdHJlZV9tYXlfdW5zd2l0Y2hf b24gKGJic1tmb3VuZF0sIGxvb3AsICZjb25kX2VkZ2UpKSkKIAkgIGJyZWFrOwogCiAgICAg ICBpZiAoZm91bmQgPT0gbG9vcC0+bnVtX25vZGVzKQpAQCAtNDQ2LDExICs1MjIsMTUgQEAg dHJlZV91bnN3aXRjaF9zaW5nbGVfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwgaW50IG51bSkK ICAgICB9CiAKICAgaWYgKGR1bXBfZmlsZSAmJiAoZHVtcF9mbGFncyAmIFRERl9ERVRBSUxT KSkKLSAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7OyBVbnN3aXRjaGluZyBsb29wXG4iKTsK KyAgICB7CisgICAgICBmcHJpbnRmIChkdW1wX2ZpbGUsICI7OyBVbnN3aXRjaGluZyBsb29w IHdpdGggY29uZGl0aW9uOiAiKTsKKyAgICAgIHByaW50X2dlbmVyaWNfZXhwciAoZHVtcF9m aWxlLCBjb25kKTsKKyAgICAgIGZwcmludGYgKGR1bXBfZmlsZSwgIlxuIik7CisgICAgfQog CiAgIGluaXRpYWxpemVfb3JpZ2luYWxfY29weV90YWJsZXMgKCk7CiAgIC8qIFVuc3dpdGNo IHRoZSBsb29wIG9uIHRoaXMgY29uZGl0aW9uLiAgKi8KLSAgbmxvb3AgPSB0cmVlX3Vuc3dp dGNoX2xvb3AgKGxvb3AsIGJic1tmb3VuZF0sIGNvbmQpOworICBubG9vcCA9IHRyZWVfdW5z d2l0Y2hfbG9vcCAobG9vcCwgYmJzW2ZvdW5kXSwgY29uZCwgY29uZF9lZGdlKTsKICAgaWYg KCFubG9vcCkKICAgICB7CiAgICAgICBmcmVlX29yaWdpbmFsX2NvcHlfdGFibGVzICgpOwpA QCAtNDYzLDggKzU0Myw4IEBAIHRyZWVfdW5zd2l0Y2hfc2luZ2xlX2xvb3AgKGNsYXNzIGxv b3AgKmxvb3AsIGludCBudW0pCiAgIGZyZWVfb3JpZ2luYWxfY29weV90YWJsZXMgKCk7CiAK ICAgLyogSW52b2tlIGl0c2VsZiBvbiBtb2RpZmllZCBsb29wcy4gICovCi0gIHRyZWVfdW5z d2l0Y2hfc2luZ2xlX2xvb3AgKG5sb29wLCBudW0gKyAxKTsKLSAgdHJlZV91bnN3aXRjaF9z aW5nbGVfbG9vcCAobG9vcCwgbnVtICsgMSk7CisgIHRyZWVfdW5zd2l0Y2hfc2luZ2xlX2xv b3AgKG5sb29wLCByYW5nZXIsIG51bSArIDEpOworICB0cmVlX3Vuc3dpdGNoX3NpbmdsZV9s b29wIChsb29wLCByYW5nZXIsIG51bSArIDEpOwogICBmcmVlIChiYnMpOwogICByZXR1cm4g dHJ1ZTsKIH0KQEAgLTQ3NiwxOCArNTU2LDE1IEBAIHRyZWVfdW5zd2l0Y2hfc2luZ2xlX2xv b3AgKGNsYXNzIGxvb3AgKmxvb3AsIGludCBudW0pCiAKIHN0YXRpYyBjbGFzcyBsb29wICoK IHRyZWVfdW5zd2l0Y2hfbG9vcCAoY2xhc3MgbG9vcCAqbG9vcCwKLQkJICAgIGJhc2ljX2Js b2NrIHVuc3dpdGNoX29uLCB0cmVlIGNvbmQpCisJCSAgICBiYXNpY19ibG9jayB1bnN3aXRj aF9vbiwgdHJlZSBjb25kLCBlZGdlIGNvbmRfZWRnZSkKIHsKICAgcHJvZmlsZV9wcm9iYWJp bGl0eSBwcm9iX3RydWU7Ci0gIGVkZ2UgZWRnZV90cnVlLCBlZGdlX2ZhbHNlOwogCiAgIC8q IFNvbWUgc2FuaXR5IGNoZWNraW5nLiAgKi8KICAgZ2NjX2Fzc2VydCAoZmxvd19iYl9pbnNp ZGVfbG9vcF9wIChsb29wLCB1bnN3aXRjaF9vbikpOwotICBnY2NfYXNzZXJ0IChFREdFX0NP VU5UICh1bnN3aXRjaF9vbi0+c3VjY3MpID09IDIpOwogICBnY2NfYXNzZXJ0IChsb29wLT5p bm5lciA9PSBOVUxMKTsKIAotICBleHRyYWN0X3RydWVfZmFsc2VfZWRnZXNfZnJvbV9ibG9j ayAodW5zd2l0Y2hfb24sICZlZGdlX3RydWUsICZlZGdlX2ZhbHNlKTsKLSAgcHJvYl90cnVl ID0gZWRnZV90cnVlLT5wcm9iYWJpbGl0eTsKKyAgcHJvYl90cnVlID0gY29uZF9lZGdlLT5w cm9iYWJpbGl0eTsKICAgcmV0dXJuIGxvb3BfdmVyc2lvbiAobG9vcCwgdW5zaGFyZV9leHBy IChjb25kKSwKIAkJICAgICAgIE5VTEwsIHByb2JfdHJ1ZSwKIAkJICAgICAgIHByb2JfdHJ1 ZS5pbnZlcnQgKCksCkBAIC05NjUsNiArMTA0Miw0MiBAQCBjaGVja19leGl0X3BoaSAoY2xh c3MgbG9vcCAqbG9vcCkKICAgcmV0dXJuIHRydWU7CiB9CiAKKy8qIFJlbW92ZSBhbGwgZGVh ZCBjYXNlcyBmcm9tIHN3aXRjaGVzIHRoYXQgYXJlIHVuc3dpdGNoZWQuICAqLworCitzdGF0 aWMgdm9pZAorY2xlYW5fdXBfc3dpdGNoZXMgKHZvaWQpCit7CisgIGJhc2ljX2Jsb2NrIGJi OworCisgIEZPUl9FQUNIX0JCX0ZOIChiYiwgY2Z1bikKKyAgICB7CisgICAgICBnaW1wbGUg Kmxhc3QgPSBsYXN0X3N0bXQgKGJiKTsKKyAgICAgIGlmIChnc3dpdGNoICpzdG10ID0gc2Fm ZV9keW5fY2FzdCA8Z3N3aXRjaCAqPiAobGFzdCkpCisJeworCSAgdW5zaWduZWQgbmxhYmVs cyA9IGdpbXBsZV9zd2l0Y2hfbnVtX2xhYmVscyAoc3RtdCk7CisJICB1bnNpZ25lZCBpbmRl eCA9IDE7CisJICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgbmxhYmVsczsgKytpKQorCSAg ICB7CisJICAgICAgdHJlZSBsYWIgPSBnaW1wbGVfc3dpdGNoX2xhYmVsIChzdG10LCBpKTsK KwkgICAgICBiYXNpY19ibG9jayBkZXN0ID0gbGFiZWxfdG9fYmxvY2sgKGNmdW4sIENBU0Vf TEFCRUwgKGxhYikpOworCSAgICAgIGVkZ2UgZSA9IGZpbmRfZWRnZSAoZ2ltcGxlX2JiIChz dG10KSwgZGVzdCk7CisJICAgICAgaWYgKGUgPT0gTlVMTCkKKwkJOyAvKiBUaGUgZWRnZSBp cyBhbHJlYWR5IHJlbW92ZWQuICAqLworCSAgICAgIGVsc2UgaWYgKGUtPmZsYWdzICYgRURH RV9JR05PUkUpCisJCXJlbW92ZV9lZGdlIChlKTsKKwkgICAgICBlbHNlCisJCXsKKwkJICBn aW1wbGVfc3dpdGNoX3NldF9sYWJlbCAoc3RtdCwgaW5kZXgsIGxhYik7CisJCSAgKytpbmRl eDsKKwkJfQorCSAgICB9CisKKwkgIGlmIChpbmRleCAhPSBubGFiZWxzKQorCSAgICBnaW1w bGVfc3dpdGNoX3NldF9udW1fbGFiZWxzIChzdG10LCBpbmRleCk7CisJfQorICAgIH0KK30K KwogLyogTG9vcCB1bnN3aXRjaGluZyBwYXNzLiAgKi8KIAogbmFtZXNwYWNlIHsK --------------nvEWHCifzkPOuNKQVdLXXULS--