From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa3.mentor.iphmx.com (esa3.mentor.iphmx.com [68.232.137.180]) by sourceware.org (Postfix) with ESMTPS id A50423858422 for ; Wed, 5 Jan 2022 14:21:31 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org A50423858422 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=codesourcery.com Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=mentor.com IronPort-SDR: d3rr0RcAcU6Xc1Oh0RT9DOarVQaxabLv+XQBaCAhjmno9CRMc6BvVi56Sjrnb945QvTDV8ZLx8 teSaurLwR63QgiNqhJraF8l8L3WJwLyKw503VlsXqzJo1Kpontx59CMSPNlX7OCZVc+oo1BcqM QGXqbJo+69NA5f2JAosSW3EF7sWuAVLuSdnETPjh4aDu2Paw86An0aRjQg4rkExH9O+G/hTuCY lCHEg0NFFdb8hcAyQgAovj/C8//DOcPWAPOGEYg1dhL43rmfTbqYV3lx5623mLT+BzTsLzZPPl 5Jls/m0EeCxn33FVhUZwYVAh X-IronPort-AV: E=Sophos;i="5.88,264,1635235200"; d="scan'208";a="70271470" Received: from orw-gwy-02-in.mentorg.com ([192.94.38.167]) by esa3.mentor.iphmx.com with ESMTP; 05 Jan 2022 06:21:31 -0800 IronPort-SDR: x2fstHFbC/Tmj8Op0ERLAzsoWPVFEhwMphW8hL30LzycAqNdB1MLRXQ9xtg7r5qSFzD9eR6J4u Kjv4qYd/IU1M3/P+DrvinroZ1WX5raYqJE+PU29qs7mYy1U7sadDlUUvmyhzXulMc372+IyJeZ eK9MrJ+ZkWajniT+k0BGJ5a5c51SMEQeOWK/3hPHK7ulPLXPB2m1yq+X9EhLJKu90j5M3BGB2T JDtEfI5SHFq3GnV9P5e3PzmhmfLcHwspyyrJrakzVpx/+6VmfxDLzJ7mDVPX3shHeAL4Ph5Cjd 57M= Content-Type: multipart/mixed; boundary="------------7B9f0MlxoZCqnaBDV7X3zC5u" Message-ID: <477939ba-08ab-0244-543b-b49b0a6dc391@codesourcery.com> Date: Wed, 5 Jan 2022 14:21:23 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.1 Subject: Re: [PATCH] libgomp, OpenMP, nvptx: Low-latency memory allocator Content-Language: en-GB To: Tom de Vries , "gcc-patches@gcc.gnu.org" CC: Tobias Burnus , Jakub Jelinek References: <25ad524d-f0d6-1970-b8e9-9b11b6cde68b@codesourcery.com> <42c70624-2b10-340c-8945-601203768d48@suse.de> From: Andrew Stubbs In-Reply-To: <42c70624-2b10-340c-8945-601203768d48@suse.de> X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-15.mgc.mentorg.com (139.181.222.15) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-10.6 required=5.0 tests=BAYES_00, BODY_8BITS, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, NICE_REPLY_A, SPF_HELO_PASS, SPF_PASS, TXREP 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: Wed, 05 Jan 2022 14:21:37 -0000 --------------7B9f0MlxoZCqnaBDV7X3zC5u Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit On 05/01/2022 11:08, Tom de Vries wrote: > The alloc-7.c execution test failure is a regression, AFAICT.  It fails > here: > ... > 38        if ((((uintptr_t) p) % __alignof (int)) != 0 || p[0] || p[1] > || p[2]) > 39          abort (); > ... > because: > ... > (gdb) p p[0] > $2 = 772014104 > (gdb) p p[1] > $3 = 0 > (gdb) p p[2] > $4 = 9 > ... > > In other words, the pointer returned by omp_calloc does not point to > zeroed out memory. The version that was applied to OG11 had this bug fixed, but I didn't get around to posting the update because Christmas got in the way and it's gone out of my mind, sorry. The attached patch has the fix and also removes the hunk related to the PTX update. Andrew --------------7B9f0MlxoZCqnaBDV7X3zC5u Content-Type: text/plain; charset="UTF-8"; name="220105-low-latency-allocator.patch" Content-Disposition: attachment; filename="220105-low-latency-allocator.patch" Content-Transfer-Encoding: base64 bGliZ29tcCwgbnZwdHg6IGxvdy1sYXRlbmN5IG1lbW9yeSBhbGxvY2F0b3IKClRoaXMgcGF0 Y2ggYWRkcyBzdXBwb3J0IGZvciBhbGxvY2F0aW5nIGxvdy1sYXRlbmN5ICIuc2hhcmVkIiBt ZW1vcnkgb24KTlZQVFggR1BVIGRldmljZSwgdmlhIHRoZSBvbXBfbG93X2xhdF9tZW1fc3Bh Y2UgYW5kIG9tcF9hbGxvYy4gIFRoZSBtZW1vcnkKY2FuIGJlIGFsbG9jYXRlZCwgcmVhbGxv Y2F0ZWQsIGFuZCBmcmVlZCB1c2luZyBhIGJhc2ljIGJ1dCBmYXN0IGFsZ29yaXRobSwKaXMg dGhyZWFkIHNhZmUgYW5kIHRoZSBzaXplIG9mIHRoZSBsb3ctbGF0ZW5jeSBoZWFwIGNhbiBi ZSBjb25maWd1cmVkIHVzaW5nCnRoZSBHT01QX05WUFRYX0xPV0xBVF9QT09MIGVudmlyb25t ZW50IHZhcmlhYmxlLgoKVGhlIHVzZSBvZiB0aGUgUFRYIGR5bmFtaWNfc21lbV9zaXplIGZl YXR1cmUgbWVhbnMgdGhhdCB0aGUgbWluaW11bSB2ZXJzaW9uCnJlcXVpcmVtZW50IGlzIG5v dyBidW1wZWQgdG8gNC4xIChzdGlsbCBvbGQgYXQgdGhpcyBwb2ludCkuCgpsaWJnb21wL0No YW5nZUxvZzoKCgkqIGFsbG9jYXRvci5jIChNRU1TUEFDRV9BTExPQyk6IE5ldyBtYWNyby4K CShNRU1TUEFDRV9DQUxMT0MpOiBOZXcgbWFjcm8uCgkoTUVNU1BBQ0VfUkVBTExPQyk6IE5l dyBtYWNyby4KCShNRU1TUEFDRV9GUkVFKTogTmV3IG1hY3JvLgoJKGR5bmFtaWNfc21lbV9z aXplKTogTmV3IGNvbnN0YW50cy4KCShvbXBfYWxsb2MpOiBVc2UgTUVNU1BBQ0VfQUxMT0Mu CglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLgoJKG9t cF9mcmVlKTogVXNlIE1FTVNQQUNFX0ZSRUUuCgkob21wX2NhbGxvYyk6IFVzZSBNRU1TUEFD RV9DQUxMT0MuCglJbXBsZW1lbnQgZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0 b3JzLgoJKG9tcF9yZWFsbG9jKTogVXNlIE1FTVNQQUNFX1JFQUxMT0MuCglJbXBsZW1lbnQg ZmFsbC1iYWNrcyBmb3IgcHJlZGVmaW5lZCBhbGxvY2F0b3JzLgoJKiBjb25maWcvbnZwdHgv dGVhbS5jIChfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QpOiBOZXcgdmFyaWFibGUuCgkoX19u dnB0eF9sb3dsYXRfcG9vbCk6IE5ldyBhc20gdmFyYWlibGUuCgkoZ29tcF9udnB0eF9tYWlu KTogSW5pdGlhbGl6ZSB0aGUgbG93LWxhdGVuY3kgaGVhcC4KCSogcGx1Z2luL3BsdWdpbi1u dnB0eC5jIChsb3dsYXRfcG9vbF9zaXplKTogTmV3IHZhcmlhYmxlLgoJKEdPTVBfT0ZGTE9B RF9pbml0X2RldmljZSk6IFJlYWQgdGhlIEdPTVBfTlZQVFhfTE9XTEFUX1BPT0wgZW52dmFy LgoJKEdPTVBfT0ZGTE9BRF9ydW4pOiBBcHBseSBsb3dsYXRfcG9vbF9zaXplLgoJKiBjb25m aWcvbnZwdHgvYWxsb2NhdG9yLmM6IE5ldyBmaWxlLgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5j L2FsbG9jYXRvcnMtMS5jOiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxv Y2F0b3JzLTIuYzogTmV3IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9y cy0zLmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNC5j OiBOZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTUuYzogTmV3 IHRlc3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy02LmM6IE5ldyB0ZXN0 LgoKZGlmZiAtLWdpdCBhL2xpYmdvbXAvYWxsb2NhdG9yLmMgYi9saWJnb21wL2FsbG9jYXRv ci5jCmluZGV4IDA3YTU2NDVmNGNjLi5iMWY1ZmUwYTVlMiAxMDA2NDQKLS0tIGEvbGliZ29t cC9hbGxvY2F0b3IuYworKysgYi9saWJnb21wL2FsbG9jYXRvci5jCkBAIC0zNCw2ICszNCwz OCBAQAogCiAjZGVmaW5lIG9tcF9tYXhfcHJlZGVmaW5lZF9hbGxvYyBvbXBfdGhyZWFkX21l bV9hbGxvYwogCisvKiBUaGVzZSBtYWNyb3MgbWF5IGJlIG92ZXJyaWRkZW4gaW4gY29uZmln Lzx0YXJnZXQ+L2FsbG9jYXRvci5jLiAgKi8KKyNpZm5kZWYgTUVNU1BBQ0VfQUxMT0MKKyNk ZWZpbmUgTUVNU1BBQ0VfQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAgKCh2b2lkKU1FTVNQ QUNFLCBtYWxsb2MgKFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX0NBTExPQwor I2RlZmluZSBNRU1TUEFDRV9DQUxMT0MoTUVNU1BBQ0UsIFNJWkUpIFwKKyAgKCh2b2lkKU1F TVNQQUNFLCBjYWxsb2MgKDEsIFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX1JF QUxMT0MKKyNkZWZpbmUgTUVNU1BBQ0VfUkVBTExPQyhNRU1TUEFDRSwgQUREUiwgT0xEU0la RSwgU0laRSkgXAorICAoKHZvaWQpTUVNU1BBQ0UsICh2b2lkKU9MRFNJWkUsIHJlYWxsb2Mg KEFERFIsIFNJWkUpKQorI2VuZGlmCisjaWZuZGVmIE1FTVNQQUNFX0ZSRUUKKyNkZWZpbmUg TUVNU1BBQ0VfRlJFRShNRU1TUEFDRSwgQUREUiwgU0laRSkgXAorICAoKHZvaWQpTUVNU1BB Q0UsICh2b2lkKVNJWkUsIGZyZWUgKEFERFIpKQorI2VuZGlmCisKKy8qIE1hcCB0aGUgcHJl ZGVmaW5lZCBhbGxvY2F0b3JzIHRvIHRoZSBjb3JyZWN0IG1lbW9yeSBzcGFjZS4KKyAgIFRo ZSBpbmRleCB0byB0aGlzIHRhYmxlIGlzIHRoZSBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGVu dW0gdmFsdWUuICAqLworc3RhdGljIGNvbnN0IG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBwcmVk ZWZpbmVkX2FsbG9jX21hcHBpbmdbXSA9IHsKKyAgb21wX2RlZmF1bHRfbWVtX3NwYWNlLCAg IC8qIG9tcF9udWxsX2FsbG9jYXRvci4gKi8KKyAgb21wX2RlZmF1bHRfbWVtX3NwYWNlLCAg IC8qIG9tcF9kZWZhdWx0X21lbV9hbGxvYy4gKi8KKyAgb21wX2xhcmdlX2NhcF9tZW1fc3Bh Y2UsIC8qIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jLiAqLworICBvbXBfZGVmYXVsdF9tZW1f c3BhY2UsICAgLyogb21wX2NvbnN0X21lbV9hbGxvYy4gKi8KKyAgb21wX2hpZ2hfYndfbWVt X3NwYWNlLCAgIC8qIG9tcF9oaWdoX2J3X21lbV9hbGxvYy4gKi8KKyAgb21wX2xvd19sYXRf bWVtX3NwYWNlLCAgIC8qIG9tcF9sb3dfbGF0X21lbV9hbGxvYy4gKi8KKyAgb21wX2xvd19s YXRfbWVtX3NwYWNlLCAgIC8qIG9tcF9jZ3JvdXBfbWVtX2FsbG9jLiAqLworICBvbXBfbG93 X2xhdF9tZW1fc3BhY2UsICAgLyogb21wX3B0ZWFtX21lbV9hbGxvYy4gKi8KKyAgb21wX2xv d19sYXRfbWVtX3NwYWNlLCAgIC8qIG9tcF90aHJlYWRfbWVtX2FsbG9jLiAqLworfTsKKwog c3RydWN0IG9tcF9hbGxvY2F0b3JfZGF0YQogewogICBvbXBfbWVtc3BhY2VfaGFuZGxlX3Qg bWVtc3BhY2U7CkBAIC0yODEsNyArMzEzLDcgQEAgcmV0cnk6CiAgICAgICBhbGxvY2F0b3Jf ZGF0YS0+dXNlZF9wb29sX3NpemUgPSB1c2VkX3Bvb2xfc2l6ZTsKICAgICAgIGdvbXBfbXV0 ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCi0gICAgICBwdHIg PSBtYWxsb2MgKG5ld19zaXplKTsKKyAgICAgIHB0ciA9IE1FTVNQQUNFX0FMTE9DIChhbGxv Y2F0b3JfZGF0YS0+bWVtc3BhY2UsIG5ld19zaXplKTsKICAgICAgIGlmIChwdHIgPT0gTlVM TCkKIAl7CiAjaWZkZWYgSEFWRV9TWU5DX0JVSUxUSU5TCkBAIC0yOTcsNyArMzI5LDEwIEBA IHJldHJ5OgogICAgIH0KICAgZWxzZQogICAgIHsKLSAgICAgIHB0ciA9IG1hbGxvYyAobmV3 X3NpemUpOworICAgICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9j YXRvcl9kYXRhCisJCQkJCT8gYWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJl ZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9jYXRvcl0pOworICAgICAgcHRyID0gTUVNU1BB Q0VfQUxMT0MgKG1lbXNwYWNlLCBuZXdfc2l6ZSk7CiAgICAgICBpZiAocHRyID09IE5VTEwp CiAJZ290byBmYWlsOwogICAgIH0KQEAgLTMxNSwzMiArMzUwLDM1IEBAIHJldHJ5OgogICBy ZXR1cm4gcmV0OwogCiBmYWlsOgotICBpZiAoYWxsb2NhdG9yX2RhdGEpCisgIGludCBmYWxs YmFjayA9IChhbGxvY2F0b3JfZGF0YQorCQkgID8gYWxsb2NhdG9yX2RhdGEtPmZhbGxiYWNr CisJCSAgOiBhbGxvY2F0b3IgPT0gb21wX2RlZmF1bHRfbWVtX2FsbG9jCisJCSAgPyBvbXBf YXR2X251bGxfZmIKKwkJICA6IG9tcF9hdHZfZGVmYXVsdF9tZW1fZmIpOworICBzd2l0Y2gg KGZhbGxiYWNrKQogICAgIHsKLSAgICAgIHN3aXRjaCAoYWxsb2NhdG9yX2RhdGEtPmZhbGxi YWNrKQorICAgIGNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoKKyAgICAgIGlmICgobmV3 X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKSAmJiBuZXdfYWxpZ25tZW50ID4gYWxpZ25t ZW50KQorCSAgfHwgKGFsbG9jYXRvcl9kYXRhCisJICAgICAgJiYgYWxsb2NhdG9yX2RhdGEt PnBvb2xfc2l6ZSA8IH4odWludHB0cl90KSAwKQorCSAgfHwgIWFsbG9jYXRvcl9kYXRhKQog CXsKLQljYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6Ci0JICBpZiAoKG5ld19hbGlnbm1l bnQgPiBzaXplb2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKLQkg ICAgICB8fCAoYWxsb2NhdG9yX2RhdGEKLQkJICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9z aXplIDwgfih1aW50cHRyX3QpIDApKQotCSAgICB7Ci0JICAgICAgYWxsb2NhdG9yID0gb21w X2RlZmF1bHRfbWVtX2FsbG9jOwotCSAgICAgIGdvdG8gcmV0cnk7Ci0JICAgIH0KLQkgIC8q IE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0gYWxsb2Nh dGlvbgotCSAgICAgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNjZWVkIGFnYWlu ICh1bmxlc3MgaXQgd2FzCi0JICAgICBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVMTCB0aGVu LCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCi0JICBicmVhazsKLQljYXNlIG9tcF9h dHZfbnVsbF9mYjoKLQkgIGJyZWFrOwotCWRlZmF1bHQ6Ci0JY2FzZSBvbXBfYXR2X2Fib3J0 X2ZiOgotCSAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0 ZXMiLAotCQkgICAgICAodW5zaWduZWQgbG9uZykgc2l6ZSk7Ci0JY2FzZSBvbXBfYXR2X2Fs bG9jYXRvcl9mYjoKLQkgIGFsbG9jYXRvciA9IGFsbG9jYXRvcl9kYXRhLT5mYl9kYXRhOwor CSAgYWxsb2NhdG9yID0gb21wX2RlZmF1bHRfbWVtX2FsbG9jOwogCSAgZ290byByZXRyeTsK IAl9CisgICAgICAvKiBPdGhlcndpc2UsIHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1 bHQgbWVtIGFsbG9jYXRpb24KKwkgYW5kIGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNj ZWVkIGFnYWluICh1bmxlc3MgaXQgd2FzCisJIGludGVybWl0dGVudC4gIFJldHVybiBOVUxM IHRoZW4sIGFzIHRoYXQgaXMgdGhlIGZhbGxiYWNrLiAgKi8KKyAgICAgIGJyZWFrOworICAg IGNhc2Ugb21wX2F0dl9udWxsX2ZiOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAg ICBjYXNlIG9tcF9hdHZfYWJvcnRfZmI6CisgICAgICBnb21wX2ZhdGFsICgiT3V0IG9mIG1l bW9yeSBhbGxvY2F0aW5nICVsdSBieXRlcyIsCisJCSAgKHVuc2lnbmVkIGxvbmcpIHNpemUp OworICAgIGNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6CisgICAgICBhbGxvY2F0b3IgPSBh bGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKyAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQogICBy ZXR1cm4gTlVMTDsKIH0KQEAgLTM3Myw2ICs0MTEsNyBAQCB2b2lkCiBvbXBfZnJlZSAodm9p ZCAqcHRyLCBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGFsbG9jYXRvcikKIHsKICAgc3RydWN0 IG9tcF9tZW1faGVhZGVyICpkYXRhOworICBvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3Bh Y2UgPSBvbXBfZGVmYXVsdF9tZW1fc3BhY2U7CiAKICAgaWYgKHB0ciA9PSBOVUxMKQogICAg IHJldHVybjsKQEAgLTM5Myw4ICs0MzIsMTMgQEAgb21wX2ZyZWUgKHZvaWQgKnB0ciwgb21w X2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCiAJICBnb21wX211dGV4X3VubG9jayAo JmFsbG9jYXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgogCX0KKworICAgICAgbWVtc3BhY2Ug PSBhbGxvY2F0b3JfZGF0YS0+bWVtc3BhY2U7CiAgICAgfQotICBmcmVlIChkYXRhLT5wdHIp OworICBlbHNlCisgICAgbWVtc3BhY2UgPSBwcmVkZWZpbmVkX2FsbG9jX21hcHBpbmdbZGF0 YS0+YWxsb2NhdG9yXTsKKworICBNRU1TUEFDRV9GUkVFIChtZW1zcGFjZSwgZGF0YS0+cHRy LCBkYXRhLT5zaXplKTsKIH0KIAogaWFsaWFzIChvbXBfZnJlZSkKQEAgLTQ4Miw3ICs1MjYs NyBAQCByZXRyeToKICAgICAgIGFsbG9jYXRvcl9kYXRhLT51c2VkX3Bvb2xfc2l6ZSA9IHVz ZWRfcG9vbF9zaXplOwogICAgICAgZ29tcF9tdXRleF91bmxvY2sgKCZhbGxvY2F0b3JfZGF0 YS0+bG9jayk7CiAjZW5kaWYKLSAgICAgIHB0ciA9IGNhbGxvYyAoMSwgbmV3X3NpemUpOwor ICAgICAgcHRyID0gTUVNU1BBQ0VfQ0FMTE9DIChhbGxvY2F0b3JfZGF0YS0+bWVtc3BhY2Us IG5ld19zaXplKTsKICAgICAgIGlmIChwdHIgPT0gTlVMTCkKIAl7CiAjaWZkZWYgSEFWRV9T WU5DX0JVSUxUSU5TCkBAIC00OTgsNyArNTQyLDEwIEBAIHJldHJ5OgogICAgIH0KICAgZWxz ZQogICAgIHsKLSAgICAgIHB0ciA9IGNhbGxvYyAoMSwgbmV3X3NpemUpOworICAgICAgb21w X21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9jYXRvcl9kYXRhCisJCQkJCT8g YWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJlZGVmaW5lZF9hbGxvY19tYXBw aW5nW2FsbG9jYXRvcl0pOworICAgICAgcHRyID0gTUVNU1BBQ0VfQ0FMTE9DIChtZW1zcGFj ZSwgbmV3X3NpemUpOwogICAgICAgaWYgKHB0ciA9PSBOVUxMKQogCWdvdG8gZmFpbDsKICAg ICB9CkBAIC01MTYsMzIgKzU2MywzNSBAQCByZXRyeToKICAgcmV0dXJuIHJldDsKIAogZmFp bDoKLSAgaWYgKGFsbG9jYXRvcl9kYXRhKQorICBpbnQgZmFsbGJhY2sgPSAoYWxsb2NhdG9y X2RhdGEKKwkJICA/IGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaworCQkgIDogYWxsb2NhdG9y ID09IG9tcF9kZWZhdWx0X21lbV9hbGxvYworCQkgID8gb21wX2F0dl9udWxsX2ZiCisJCSAg OiBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiKTsKKyAgc3dpdGNoIChmYWxsYmFjaykKICAgICB7 Ci0gICAgICBzd2l0Y2ggKGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaykKKyAgICBjYXNlIG9t cF9hdHZfZGVmYXVsdF9tZW1fZmI6CisgICAgICBpZiAoKG5ld19hbGlnbm1lbnQgPiBzaXpl b2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKKwkgIHx8IChhbGxv Y2F0b3JfZGF0YQorCSAgICAgICYmIGFsbG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPCB+KHVp bnRwdHJfdCkgMCkKKwkgIHx8ICFhbGxvY2F0b3JfZGF0YSkKIAl7Ci0JY2FzZSBvbXBfYXR2 X2RlZmF1bHRfbWVtX2ZiOgotCSAgaWYgKChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lk ICopICYmIG5ld19hbGlnbm1lbnQgPiBhbGlnbm1lbnQpCi0JICAgICAgfHwgKGFsbG9jYXRv cl9kYXRhCi0JCSAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90 KSAwKSkKLQkgICAgewotCSAgICAgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21lbV9hbGxv YzsKLQkgICAgICBnb3RvIHJldHJ5OwotCSAgICB9Ci0JICAvKiBPdGhlcndpc2UsIHdlJ3Zl IGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KLQkgICAgIGFuZCBp ZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcwot CSAgICAgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwgYXMgdGhhdCBpcyB0aGUg ZmFsbGJhY2suICAqLwotCSAgYnJlYWs7Ci0JY2FzZSBvbXBfYXR2X251bGxfZmI6Ci0JICBi cmVhazsKLQlkZWZhdWx0OgotCWNhc2Ugb21wX2F0dl9hYm9ydF9mYjoKLQkgIGdvbXBfZmF0 YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgJWx1IGJ5dGVzIiwKLQkJICAgICAgKHVu c2lnbmVkIGxvbmcpIChzaXplICogbm1lbWIpKTsKLQljYXNlIG9tcF9hdHZfYWxsb2NhdG9y X2ZiOgotCSAgYWxsb2NhdG9yID0gYWxsb2NhdG9yX2RhdGEtPmZiX2RhdGE7CisJICBhbGxv Y2F0b3IgPSBvbXBfZGVmYXVsdF9tZW1fYWxsb2M7CiAJICBnb3RvIHJldHJ5OwogCX0KKyAg ICAgIC8qIE90aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0g YWxsb2NhdGlvbgorCSBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0IHdvbid0IHN1Y2NlZWQgYWdh aW4gKHVubGVzcyBpdCB3YXMKKwkgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwg YXMgdGhhdCBpcyB0aGUgZmFsbGJhY2suICAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBv bXBfYXR2X251bGxfZmI6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGNhc2Ug b21wX2F0dl9hYm9ydF9mYjoKKyAgICAgIGdvbXBfZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGFs bG9jYXRpbmcgJWx1IGJ5dGVzIiwKKwkJICAodW5zaWduZWQgbG9uZykgKHNpemUgKiBubWVt YikpOworICAgIGNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6CisgICAgICBhbGxvY2F0b3Ig PSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKyAgICAgIGdvdG8gcmV0cnk7CiAgICAgfQog ICByZXR1cm4gTlVMTDsKIH0KQEAgLTY2MCw3ICs3MTAsOCBAQCByZXRyeToKICAgICAgIGdv bXBfbXV0ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlmCiAgICAg ICBpZiAocHJldl9zaXplKQotCW5ld19wdHIgPSByZWFsbG9jIChkYXRhLT5wdHIsIG5ld19z aXplKTsKKwluZXdfcHRyID0gTUVNU1BBQ0VfUkVBTExPQyAoYWxsb2NhdG9yX2RhdGEtPm1l bXNwYWNlLCBkYXRhLT5wdHIsCisJCQkJICAgIGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAg ICAgIGVsc2UKIAluZXdfcHRyID0gbWFsbG9jIChuZXdfc2l6ZSk7CiAgICAgICBpZiAobmV3 X3B0ciA9PSBOVUxMKQpAQCAtNjkwLDcgKzc0MSwxMCBAQCByZXRyeToKIAkgICAmJiAoZnJl ZV9hbGxvY2F0b3JfZGF0YSA9PSBOVUxMCiAJICAgICAgIHx8IGZyZWVfYWxsb2NhdG9yX2Rh dGEtPnBvb2xfc2l6ZSA9PSB+KHVpbnRwdHJfdCkgMCkpCiAgICAgewotICAgICAgbmV3X3B0 ciA9IHJlYWxsb2MgKGRhdGEtPnB0ciwgbmV3X3NpemUpOworICAgICAgb21wX21lbXNwYWNl X2hhbmRsZV90IG1lbXNwYWNlID0gKGFsbG9jYXRvcl9kYXRhCisJCQkJCT8gYWxsb2NhdG9y X2RhdGEtPm1lbXNwYWNlCisJCQkJCTogcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5nW2FsbG9j YXRvcl0pOworICAgICAgbmV3X3B0ciA9IE1FTVNQQUNFX1JFQUxMT0MgKG1lbXNwYWNlLCBk YXRhLT5wdHIsIGRhdGEtPnNpemUsIG5ld19zaXplKTsKICAgICAgIGlmIChuZXdfcHRyID09 IE5VTEwpCiAJZ290byBmYWlsOwogICAgICAgcmV0ID0gKGNoYXIgKikgbmV3X3B0ciArIHNp emVvZiAoc3RydWN0IG9tcF9tZW1faGVhZGVyKTsKQEAgLTczNSwzMiArNzg5LDM1IEBAIHJl dHJ5OgogICByZXR1cm4gcmV0OwogCiBmYWlsOgotICBpZiAoYWxsb2NhdG9yX2RhdGEpCisg IGludCBmYWxsYmFjayA9IChhbGxvY2F0b3JfZGF0YQorCQkgID8gYWxsb2NhdG9yX2RhdGEt PmZhbGxiYWNrCisJCSAgOiBhbGxvY2F0b3IgPT0gb21wX2RlZmF1bHRfbWVtX2FsbG9jCisJ CSAgPyBvbXBfYXR2X251bGxfZmIKKwkJICA6IG9tcF9hdHZfZGVmYXVsdF9tZW1fZmIpOwor ICBzd2l0Y2ggKGZhbGxiYWNrKQogICAgIHsKLSAgICAgIHN3aXRjaCAoYWxsb2NhdG9yX2Rh dGEtPmZhbGxiYWNrKQorICAgIGNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoKKyAgICAg IGlmIChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lkICopCisJICB8fCAoYWxsb2NhdG9y X2RhdGEKKwkgICAgICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRy X3QpIDApCisJICB8fCAhYWxsb2NhdG9yX2RhdGEpCiAJewotCWNhc2Ugb21wX2F0dl9kZWZh dWx0X21lbV9mYjoKLQkgIGlmIChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lkICopCi0J ICAgICAgfHwgKGFsbG9jYXRvcl9kYXRhCi0JCSAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xf c2l6ZSA8IH4odWludHB0cl90KSAwKSkKLQkgICAgewotCSAgICAgIGFsbG9jYXRvciA9IG9t cF9kZWZhdWx0X21lbV9hbGxvYzsKLQkgICAgICBnb3RvIHJldHJ5OwotCSAgICB9Ci0JICAv KiBPdGhlcndpc2UsIHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9j YXRpb24KLQkgICAgIGFuZCBpZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2Fp biAodW5sZXNzIGl0IHdhcwotCSAgICAgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhl biwgYXMgdGhhdCBpcyB0aGUgZmFsbGJhY2suICAqLwotCSAgYnJlYWs7Ci0JY2FzZSBvbXBf YXR2X251bGxfZmI6Ci0JICBicmVhazsKLQlkZWZhdWx0OgotCWNhc2Ugb21wX2F0dl9hYm9y dF9mYjoKLQkgIGdvbXBfZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgJWx1IGJ5 dGVzIiwKLQkJICAgICAgKHVuc2lnbmVkIGxvbmcpIHNpemUpOwotCWNhc2Ugb21wX2F0dl9h bGxvY2F0b3JfZmI6Ci0JICBhbGxvY2F0b3IgPSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsK KwkgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21lbV9hbGxvYzsKIAkgIGdvdG8gcmV0cnk7 CiAJfQorICAgICAgLyogT3RoZXJ3aXNlLCB3ZSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCBkZWZh dWx0IG1lbSBhbGxvY2F0aW9uCisJIGFuZCBpZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3Vj Y2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcworCSBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVM TCB0aGVuLCBhcyB0aGF0IGlzIHRoZSBmYWxsYmFjay4gICovCisgICAgICBicmVhazsKKyAg ICBjYXNlIG9tcF9hdHZfbnVsbF9mYjoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6Cisg ICAgY2FzZSBvbXBfYXR2X2Fib3J0X2ZiOgorICAgICAgZ29tcF9mYXRhbCAoIk91dCBvZiBt ZW1vcnkgYWxsb2NhdGluZyAlbHUgYnl0ZXMiLAorCQkgICh1bnNpZ25lZCBsb25nKSBzaXpl KTsKKyAgICBjYXNlIG9tcF9hdHZfYWxsb2NhdG9yX2ZiOgorICAgICAgYWxsb2NhdG9yID0g YWxsb2NhdG9yX2RhdGEtPmZiX2RhdGE7CisgICAgICBnb3RvIHJldHJ5OwogICAgIH0KICAg cmV0dXJuIE5VTEw7CiB9CmRpZmYgLS1naXQgYS9saWJnb21wL2NvbmZpZy9udnB0eC9hbGxv Y2F0b3IuYyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2FsbG9jYXRvci5jCm5ldyBmaWxlIG1v ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi42YmMyZWE0ODA0MwotLS0gL2Rldi9udWxs CisrKyBiL2xpYmdvbXAvY29uZmlnL252cHR4L2FsbG9jYXRvci5jCkBAIC0wLDAgKzEsMzcw IEBACisvKiBDb3B5cmlnaHQgKEMpIDIwMjEgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJ bmMuCisKKyAgIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIHRoZSBHTlUgT2ZmbG9hZGluZyBhbmQg TXVsdGkgUHJvY2Vzc2luZyBMaWJyYXJ5CisgICAobGliZ29tcCkuCisKKyAgIExpYmdvbXAg aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlm eSBpdAorICAgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkKKyAgIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247 IGVpdGhlciB2ZXJzaW9uIDMsIG9yIChhdCB5b3VyIG9wdGlvbikKKyAgIGFueSBsYXRlciB2 ZXJzaW9uLgorCisgICBMaWJnb21wIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsIGJ1dCBXSVRIT1VUIEFOWQorICAgV0FSUkFOVFk7IHdpdGhv dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZiBNRVJDSEFOVEFCSUxJVFkgb3IgRklU TkVTUworICAgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUgR2VuZXJh bCBQdWJsaWMgTGljZW5zZSBmb3IKKyAgIG1vcmUgZGV0YWlscy4KKworICAgVW5kZXIgU2Vj dGlvbiA3IG9mIEdQTCB2ZXJzaW9uIDMsIHlvdSBhcmUgZ3JhbnRlZCBhZGRpdGlvbmFsCisg ICBwZXJtaXNzaW9ucyBkZXNjcmliZWQgaW4gdGhlIEdDQyBSdW50aW1lIExpYnJhcnkgRXhj ZXB0aW9uLCB2ZXJzaW9uCisgICAzLjEsIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uLgorCisgICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhbmQKKyAgIGEgY29weSBvZiB0 aGUgR0NDIFJ1bnRpbWUgTGlicmFyeSBFeGNlcHRpb24gYWxvbmcgd2l0aCB0aGlzIHByb2dy YW07CisgICBzZWUgdGhlIGZpbGVzIENPUFlJTkczIGFuZCBDT1BZSU5HLlJVTlRJTUUgcmVz cGVjdGl2ZWx5LiAgSWYgbm90LCBzZWUKKyAgIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5z ZXMvPi4gICovCisKKy8qIFRoZSBsb3ctbGF0ZW5jeSBhbGxvY2F0b3JzIHVzZSBzcGFjZSBy ZXNlcnZlZCBpbiAuc2hhcmVkIG1lbW9yeSB3aGVuIHRoZQorICAga2VybmVsIGlzIGxhdW5j aGVkLiAgVGhlIGhlYXAgaXMgaW5pdGlhbGl6ZWQgaW4gZ29tcF9udnB0eF9tYWluIGFuZCBh bGwKKyAgIGFsbG9jYXRpb25zIGFyZSBmb3Jnb3R0ZW4gd2hlbiB0aGUga2VybmVsIGV4aXRz LiAgQWxsb2NhdGlvbnMgdG8gb3RoZXIKKyAgIG1lbW9yeSBzcGFjZXMgYWxsIHVzZSB0aGUg c3lzdGVtIG1hbGxvYyBzeXNjYWxsLgorCisgICBUaGUgcm9vdCBoZWFwIGRlc2NyaXB0b3Ig aXMgc3RvcmVkIGVsc2V3aGVyZSBpbiBzaGFyZWQgbWVtb3J5LCBhbmQgZWFjaAorICAgZnJl ZSBjaHVuayBjb250YWlucyBhIHNpbWlsYXIgZGVzY3JpcHRvciBmb3IgdGhlIG5leHQgZnJl ZSBjaHVuayBpbiB0aGUKKyAgIGNoYWluLgorCisgICBUaGUgZGVzY3JpcHRvciBpcyB0d28g MTYtYml0IHZhbHVlczogb2Zmc2V0IGFuZCBzaXplLCB3aGljaCBkZXNjcmliZSB0aGUKKyAg IGxvY2F0aW9uIG9mIGEgY2h1bmsgb2YgbWVtb3J5IGF2YWlsYWJsZSBmb3IgYWxsb2NhdGlv bi4gVGhlIG9mZnNldCBpcworICAgcmVsYXRpdmUgdG8gdGhlIGJhc2Ugb2YgdGhlIGhlYXAu ICBUaGUgc3BlY2lhbCB2YWx1ZSAweGZmZmYsIDB4ZmZmZgorICAgaW5kaWNhdGVzIHRoYXQg dGhlIGhlYXAgaXMgbG9ja2VkLiAgVGhlIGRlc2NyaXB0b3IgaXMgZW5jb2RlZCBpbnRvIGEK KyAgIHNpbmdsZSAzMi1iaXQgaW50ZWdlciBzbyB0aGF0IGl0IG1heSBiZSBlYXNpbHkgYWNj ZXNzZWQgYXRvbWljYWxseS4KKworICAgTWVtb3J5IGlzIGFsbG9jYXRlZCB0byB0aGUgZmly c3QgZnJlZSBjaHVuayB0aGF0IGZpdHMuICBUaGUgZnJlZSBjaGFpbgorICAgaXMgYWx3YXlz IHN0b3JlZCBpbiBvcmRlciBvZiB0aGUgb2Zmc2V0IHRvIGFzc2lzdCBjb2FsZXNjaW5nIGFk amFjZW50CisgICBjaHVua3MuICAqLworCisjaW5jbHVkZSAibGliZ29tcC5oIgorI2luY2x1 ZGUgPHN0ZGxpYi5oPgorCisvKiBUaGVyZSBzaG91bGQgYmUgc29tZSAuc2hhcmVkIHNwYWNl IHJlc2VydmVkIGZvciB1cy4gIFRoZXJlJ3Mgbm8gd2F5IHRvCisgICBleHByZXNzIHRoaXMg bWFnaWMgZXh0ZXJuIHNpemVsZXNzIGFycmF5IGluIEMgc28gdXNlIGFzbS4gICovCithc20g KCIuZXh0ZXJuIC5zaGFyZWQgLnU4IF9fbnZwdHhfbG93bGF0X3Bvb2xbXTtcbiIpOworCitl eHRlcm4gdWludDMyX3QgX19udnB0eF9sb3dsYXRfaGVhcF9yb290IF9fYXR0cmlidXRlX18o KHNoYXJlZCxub2NvbW1vbikpOworCit0eXBlZGVmIHVuaW9uIHsKKyAgdWludDMyX3QgcmF3 OworICBzdHJ1Y3QgeworICAgIHVpbnQxNl90IG9mZnNldDsKKyAgICB1aW50MTZfdCBzaXpl OworICB9IGRlc2M7Cit9IGhlYXBkZXNjOworCitzdGF0aWMgdm9pZCAqCitudnB0eF9tZW1z cGFjZV9hbGxvYyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6 ZSkKK3sKKyAgaWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7 CisgICAgICBjaGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hhcmVkLnU2 NFx0JTAsIF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wpKTsKKwor ICAgICAgLyogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAq LworICAgICAgc2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgLyogQWNxdWlyZSBh IGxvY2sgb24gdGhlIGxvdy1sYXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9v dDsKKyAgICAgIGRvCisJeworCSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgm X19udnB0eF9sb3dsYXRfaGVhcF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVM X0FDUVVJUkUpOworCSAgaWYgKHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFr OworCSAgLyogU3Bpbi4gICovCisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBX YWxrIHRoZSBmcmVlIGNoYWluLiAgKi8KKyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3Qu cmF3fTsKKyAgICAgIHVpbnQzMl90ICpwcmV2X2NodW5rcHRyID0gTlVMTDsKKyAgICAgIHVp bnQzMl90ICpjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVz Yy5vZmZzZXQpOworICAgICAgaGVhcGRlc2Mgb253YXJkX2NoYWluID0ge2NodW5rcHRyWzBd fTsKKyAgICAgIHdoaWxlIChjaHVuay5kZXNjLnNpemUgIT0gMCAmJiAodWludDMyX3Qpc2l6 ZSA+IGNodW5rLmRlc2Muc2l6ZSkKKwl7CisJICBjaHVuay5yYXcgPSBvbndhcmRfY2hhaW4u cmF3OworCSAgcHJldl9jaHVua3B0ciA9IGNodW5rcHRyOworCSAgY2h1bmtwdHIgPSAodWlu dDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKwkgIG9ud2FyZF9j aGFpbi5yYXcgPSBjaHVua3B0clswXTsKKwl9CisKKyAgICAgIHZvaWQgKnJlc3VsdCA9IE5V TEw7CisgICAgICBpZiAoY2h1bmsuZGVzYy5zaXplICE9IDApCisJeworCSAgLyogQWxsb2Nh dGlvbiBzdWNjZXNzZnVsLiAgKi8KKwkgIHJlc3VsdCA9IGNodW5rcHRyOworCisJICAvKiBV cGRhdGUgdGhlIGZyZWUgY2hhaW4uICAqLworCSAgaGVhcGRlc2Mgc3RpbGxmcmVlID0ge2No dW5rLnJhd307CisJICBzdGlsbGZyZWUuZGVzYy5vZmZzZXQgKz0gc2l6ZTsKKwkgIHN0aWxs ZnJlZS5kZXNjLnNpemUgLT0gc2l6ZTsKKwkgIHVpbnQzMl90ICpzdGlsbGZyZWVwdHIgPSAo dWludDMyX3QqKShzaGFyZWRfcG9vbAorCQkJCQkgICAgICAgKyBzdGlsbGZyZWUuZGVzYy5v ZmZzZXQpOworCisJICBpZiAoc3RpbGxmcmVlLmRlc2Muc2l6ZSA9PSAwKQorCSAgICAvKiBU aGUgd2hvbGUgY2h1bmsgd2FzIHVzZWQuICAqLworCSAgICBzdGlsbGZyZWUucmF3ID0gb253 YXJkX2NoYWluLnJhdzsKKwkgIGVsc2UKKwkgICAgLyogVGhlIGNodW5rIHdhcyBzcGxpdCwg c28gcmVzdG9yZSB0aGUgb253YXJkIGNoYWluLiAgKi8KKwkgICAgc3RpbGxmcmVlcHRyWzBd ID0gb253YXJkX2NoYWluLnJhdzsKKworCSAgLyogVGhlIHByZXZpb3VzIGZyZWUgc2xvdCBv ciByb290IG5vdyBwb2ludHMgdG8gc3RpbGxmcmVlLiAgKi8KKwkgIGlmIChwcmV2X2NodW5r cHRyKQorCSAgICBwcmV2X2NodW5rcHRyWzBdID0gc3RpbGxmcmVlLnJhdzsKKwkgIGVsc2UK KwkgICAgcm9vdC5yYXcgPSBzdGlsbGZyZWUucmF3OworCX0KKworICAgICAgLyogVXBkYXRl IHRoZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2suICAqLworICAgICAg X19hdG9taWNfc3RvcmVfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCwgcm9vdC5yYXcs IE1FTU1PREVMX1JFTEVBU0UpOworICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisgIGVs c2UKKyAgICByZXR1cm4gbWFsbG9jIChzaXplKTsKK30KKworc3RhdGljIHZvaWQgKgorbnZw dHhfbWVtc3BhY2VfY2FsbG9jIChvbXBfbWVtc3BhY2VfaGFuZGxlX3QgbWVtc3BhY2UsIHNp emVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVtX3NwYWNl KQorICAgIHsKKyAgICAgIC8qIE1lbW9yeSBpcyBhbGxvY2F0ZWQgaW4gOC1ieXRlIGdyYW51 bGFyaXR5LiAgKi8KKyAgICAgIHNpemUgPSAoc2l6ZSArIDcpICYgfjc7CisKKyAgICAgIHVp bnQ2NF90ICpyZXN1bHQgPSBudnB0eF9tZW1zcGFjZV9hbGxvYyAobWVtc3BhY2UsIHNpemUp OworICAgICAgaWYgKHJlc3VsdCkKKwkvKiBJbmxpbmUgbWVtc2V0IGluIHdoaWNoIHdlIGtu b3cgc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDguICAqLworCWZvciAodW5zaWduZWQgaSA9IDA7 IGkgPCAodW5zaWduZWQpc2l6ZS84OyBpKyspCisJICByZXN1bHRbaV0gPSAwOworCisgICAg ICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgZWxzZQorICAgIHJldHVybiBjYWxsb2MgKDEs IHNpemUpOworfQorCitzdGF0aWMgdm9pZAorbnZwdHhfbWVtc3BhY2VfZnJlZSAob21wX21l bXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCB2b2lkICphZGRyLCBzaXplX3Qgc2l6ZSkKK3sK KyAgaWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAg ICBjaGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hhcmVkLnU2NFx0JTAs IF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wpKTsKKworICAgICAg LyogTWVtb3J5IGlzIGFsbG9jYXRlZCBpbiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLworICAg ICAgc2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgLyogQWNxdWlyZSBhIGxvY2sg b24gdGhlIGxvdy1sYXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9vdDsKKyAg ICAgIGRvCisJeworCSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgmX19udnB0 eF9sb3dsYXRfaGVhcF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVMX0FDUVVJ UkUpOworCSAgaWYgKHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFrOworCSAg LyogU3Bpbi4gICovCisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBXYWxrIHRo ZSBmcmVlIGNoYWluIHRvIGZpbmQgd2hlcmUgdG8gaW5zZXJ0IGEgbmV3IGVudHJ5LiAgKi8K KyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3QucmF3fSwgcHJldl9jaHVuazsKKyAgICAg IHVpbnQzMl90ICpwcmV2X2NodW5rcHRyID0gTlVMTCwgKnByZXZwcmV2X2NodW5rcHRyID0g TlVMTDsKKyAgICAgIHVpbnQzMl90ICpjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9w b29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOworICAgICAgaGVhcGRlc2Mgb253YXJkX2NoYWlu ID0ge2NodW5rcHRyWzBdfTsKKyAgICAgIHdoaWxlIChjaHVuay5kZXNjLnNpemUgIT0gMCAm JiBhZGRyID4gKHZvaWQqKWNodW5rcHRyKQorCXsKKwkgIHByZXZfY2h1bmsucmF3ID0gY2h1 bmsucmF3OworCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsKKwkgIHByZXZwcmV2 X2NodW5rcHRyID0gcHJldl9jaHVua3B0cjsKKwkgIHByZXZfY2h1bmtwdHIgPSBjaHVua3B0 cjsKKwkgIGNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bvb2wgKyBjaHVuay5kZXNj Lm9mZnNldCk7CisJICBvbndhcmRfY2hhaW4ucmF3ID0gY2h1bmtwdHJbMF07CisJfQorCisg ICAgICAvKiBDcmVhdGUgdGhlIG5ldyBjaHVuayBkZXNjcmlwdG9yLiAgKi8KKyAgICAgIGhl YXBkZXNjIG5ld2ZyZWVjaHVuazsKKyAgICAgIG5ld2ZyZWVjaHVuay5kZXNjLm9mZnNldCA9 ICh1aW50MTZfdCkoKHVpbnRwdHJfdClhZGRyCisJCQkJCSAgICAtICh1aW50cHRyX3Qpc2hh cmVkX3Bvb2wpOworICAgICAgbmV3ZnJlZWNodW5rLmRlc2Muc2l6ZSA9ICh1aW50MTZfdClz aXplOworCisgICAgICAvKiBDb2FsZXNjZSBhZGphY2VudCBmcmVlIGNodW5rcy4gICovCisg ICAgICBpZiAobmV3ZnJlZWNodW5rLmRlc2Mub2Zmc2V0ICsgc2l6ZSA9PSBjaHVuay5kZXNj Lm9mZnNldCkKKwl7CisJICAvKiBGcmVlIGNodW5rIGZvbGxvd3MuICAqLworCSAgbmV3ZnJl ZWNodW5rLmRlc2Muc2l6ZSArPSBjaHVuay5kZXNjLnNpemU7CisJICBjaHVuay5yYXcgPSBv bndhcmRfY2hhaW4ucmF3OworCX0KKyAgICAgIGlmIChwcmV2X2NodW5rcHRyKQorCXsKKwkg IGlmIChwcmV2X2NodW5rLmRlc2Mub2Zmc2V0ICsgcHJldl9jaHVuay5kZXNjLnNpemUKKwkg ICAgICA9PSBuZXdmcmVlY2h1bmsuZGVzYy5vZmZzZXQpCisJICAgIHsKKwkgICAgICAvKiBG cmVlIGNodW5rIHByZWNlZGVzLiAgKi8KKwkgICAgICBuZXdmcmVlY2h1bmsuZGVzYy5vZmZz ZXQgPSBwcmV2X2NodW5rLmRlc2Mub2Zmc2V0OworCSAgICAgIG5ld2ZyZWVjaHVuay5kZXNj LnNpemUgKz0gcHJldl9jaHVuay5kZXNjLnNpemU7CisJICAgICAgYWRkciA9IHNoYXJlZF9w b29sICsgcHJldl9jaHVuay5kZXNjLm9mZnNldDsKKwkgICAgICBwcmV2X2NodW5rcHRyID0g cHJldnByZXZfY2h1bmtwdHI7CisJICAgIH0KKwl9CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUg ZnJlZSBjaGFpbiBpbiB0aGUgbmV3IGFuZCBwcmV2aW91cyBjaHVua3MuICAqLworICAgICAg KCh1aW50MzJfdCopYWRkcilbMF0gPSBjaHVuay5yYXc7CisgICAgICBpZiAocHJldl9jaHVu a3B0cikKKwlwcmV2X2NodW5rcHRyWzBdID0gbmV3ZnJlZWNodW5rLnJhdzsKKyAgICAgIGVs c2UKKwlyb290LnJhdyA9IG5ld2ZyZWVjaHVuay5yYXc7CisKKyAgICAgIC8qIFVwZGF0ZSB0 aGUgZnJlZSBjaGFpbiByb290IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAgKi8KKyAgICAgIF9f YXRvbWljX3N0b3JlX24gKCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsIHJvb3QucmF3LCBN RU1NT0RFTF9SRUxFQVNFKTsKKyAgICB9CisgIGVsc2UKKyAgICBmcmVlIChhZGRyKTsKK30K Kworc3RhdGljIHZvaWQgKgorbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAob21wX21lbXNwYWNl X2hhbmRsZV90IG1lbXNwYWNlLCB2b2lkICphZGRyLAorCQkJc2l6ZV90IG9sZHNpemUsIHNp emVfdCBzaXplKQoreworICBpZiAobWVtc3BhY2UgPT0gb21wX2xvd19sYXRfbWVtX3NwYWNl KQorICAgIHsKKyAgICAgIGNoYXIgKnNoYXJlZF9wb29sOworICAgICAgYXNtICgiY3Z0YS5z aGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRfcG9vbDsiIDogIj1yIihzaGFyZWRfcG9v bCkpOworCisgICAgICAvKiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxh cml0eS4gICovCisgICAgICBvbGRzaXplID0gKG9sZHNpemUgKyA3KSAmIH43OworICAgICAg c2l6ZSA9IChzaXplICsgNykgJiB+NzsKKworICAgICAgaWYgKG9sZHNpemUgPT0gc2l6ZSkK KwlyZXR1cm4gYWRkcjsKKworICAgICAgLyogQWNxdWlyZSBhIGxvY2sgb24gdGhlIGxvdy1s YXRlbmN5IGhlYXAuICAqLworICAgICAgaGVhcGRlc2Mgcm9vdDsKKyAgICAgIGRvCisJewor CSAgcm9vdC5yYXcgPSBfX2F0b21pY19leGNoYW5nZV9uICgmX19udnB0eF9sb3dsYXRfaGVh cF9yb290LAorCQkJCQkgIDB4ZmZmZmZmZmYsIE1FTU1PREVMX0FDUVVJUkUpOworCSAgaWYg KHJvb3QucmF3ICE9IDB4ZmZmZmZmZmYpCisJICAgIGJyZWFrOworCSAgLyogU3Bpbi4gICov CisJfQorICAgICAgd2hpbGUgKDEpOworCisgICAgICAvKiBXYWxrIHRoZSBmcmVlIGNoYWlu LiAgKi8KKyAgICAgIGhlYXBkZXNjIGNodW5rID0ge3Jvb3QucmF3fTsKKyAgICAgIHVpbnQz Ml90ICpwcmV2X2NodW5rcHRyID0gTlVMTDsKKyAgICAgIHVpbnQzMl90ICpjaHVua3B0ciA9 ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOworICAgICAg aGVhcGRlc2Mgb253YXJkX2NoYWluID0ge2NodW5rcHRyWzBdfTsKKyAgICAgIHdoaWxlIChj aHVuay5kZXNjLnNpemUgIT0gMCAmJiAodm9pZCopY2h1bmtwdHIgPCBhZGRyKQorCXsKKwkg IGNodW5rLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJICBwcmV2X2NodW5rcHRyID0gY2h1 bmtwdHI7CisJICBjaHVua3B0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsu ZGVzYy5vZmZzZXQpOworCSAgb253YXJkX2NoYWluLnJhdyA9IGNodW5rcHRyWzBdOworCX0K KworICAgICAgdm9pZCAqcmVzdWx0ID0gTlVMTDsKKyAgICAgIGlmIChzaXplIDwgb2xkc2l6 ZSkKKwl7CisJICAvKiBUaGUgbmV3IGFsbG9jYXRpb24gaXMgc21hbGxlciB0aGFuIHRoZSBv bGQ7IHdlIGNhbiBhbHdheXMKKwkgICAgIHNocmluayBhbiBhbGxvY2F0aW9uIGluIHBsYWNl LiAgKi8KKwkgIHJlc3VsdCA9IGFkZHI7CisKKwkgIHVpbnQzMl90ICpub3dmcmVlcHRyID0g KHVpbnQzMl90KikoYWRkciArIHNpemUpOworCisJICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hh aW4uICAqLworCSAgaGVhcGRlc2Mgbm93ZnJlZTsKKwkgIG5vd2ZyZWUuZGVzYy5vZmZzZXQg PSAoY2hhciopbm93ZnJlZXB0ciAtIHNoYXJlZF9wb29sOworCSAgbm93ZnJlZS5kZXNjLnNp emUgPSBvbGRzaXplIC0gc2l6ZTsKKworCSAgaWYgKG5vd2ZyZWUuZGVzYy5vZmZzZXQgKyBz aXplID09IGNodW5rLmRlc2Mub2Zmc2V0KQorCSAgICB7CisJICAgICAgLyogQ29hbGVzY2Ug Zm9sbG93aW5nIGZyZWUgY2h1bmsuICAqLworCSAgICAgIG5vd2ZyZWUuZGVzYy5zaXplICs9 IGNodW5rLmRlc2Muc2l6ZTsKKwkgICAgICBub3dmcmVlcHRyWzBdID0gb253YXJkX2NoYWlu LnJhdzsKKwkgICAgfQorCSAgZWxzZQorCSAgICBub3dmcmVlcHRyWzBdID0gY2h1bmsucmF3 OworCisJICAvKiBUaGUgcHJldmlvdXMgZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0 byBub3dmcmVlLiAgKi8KKwkgIGlmIChwcmV2X2NodW5rcHRyKQorCSAgICBwcmV2X2NodW5r cHRyWzBdID0gbm93ZnJlZS5yYXc7CisJICBlbHNlCisJICAgIHJvb3QucmF3ID0gbm93ZnJl ZS5yYXc7CisJfQorICAgICAgZWxzZSBpZiAoY2h1bmsuZGVzYy5zaXplICE9IDAKKwkgICAg ICAgJiYgKGNoYXIgKilhZGRyICsgb2xkc2l6ZSA9PSAoY2hhciAqKWNodW5rcHRyCisJICAg ICAgICYmIGNodW5rLmRlc2Muc2l6ZSA+PSBzaXplLW9sZHNpemUpCisJeworCSAgLyogVGhl IG5ldyBhbGxvY2F0aW9uIGlzIGxhcmdlciB0aGFuIHRoZSBvbGQsIGFuZCB3ZSBmb3VuZCBh CisJICAgICBsYXJnZSBlbm91Z2ggZnJlZSBibG9jayByaWdodCBhZnRlciB0aGUgZXhpc3Rp bmcgYmxvY2ssCisJICAgICBzbyB3ZSBleHRlbmQgaW50byB0aGF0IHNwYWNlLiAgKi8KKwkg IHJlc3VsdCA9IGFkZHI7CisKKwkgIHVpbnQxNl90IGRlbHRhID0gc2l6ZS1vbGRzaXplOwor CisJICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4uICAqLworCSAgaGVhcGRlc2Mgc3RpbGxm cmVlID0ge2NodW5rLnJhd307CisJICBzdGlsbGZyZWUuZGVzYy5vZmZzZXQgKz0gZGVsdGE7 CisJICBzdGlsbGZyZWUuZGVzYy5zaXplIC09IGRlbHRhOworCSAgdWludDMyX3QgKnN0aWxs ZnJlZXB0ciA9ICh1aW50MzJfdCopKHNoYXJlZF9wb29sCisJCQkJCSAgICAgICArIHN0aWxs ZnJlZS5kZXNjLm9mZnNldCk7CisKKwkgIGlmIChzdGlsbGZyZWUuZGVzYy5zaXplID09IDAp CisJICAgIC8qIFRoZSB3aG9sZSBjaHVuayB3YXMgdXNlZC4gICovCisJICAgIHN0aWxsZnJl ZS5yYXcgPSBvbndhcmRfY2hhaW4ucmF3OworCSAgZWxzZQorCSAgICAvKiBUaGUgY2h1bmsg d2FzIHNwbGl0LCBzbyByZXN0b3JlIHRoZSBvbndhcmQgY2hhaW4uICAqLworCSAgICBzdGls bGZyZWVwdHJbMF0gPSBvbndhcmRfY2hhaW4ucmF3OworCisJICAvKiBUaGUgcHJldmlvdXMg ZnJlZSBzbG90IG9yIHJvb3Qgbm93IHBvaW50cyB0byBzdGlsbGZyZWUuICAqLworCSAgaWYg KHByZXZfY2h1bmtwdHIpCisJICAgIHByZXZfY2h1bmtwdHJbMF0gPSBzdGlsbGZyZWUucmF3 OworCSAgZWxzZQorCSAgICByb290LnJhdyA9IHN0aWxsZnJlZS5yYXc7CisJfQorICAgICAg LyogRWxzZSByZWFsbG9jIGluLXBsYWNlIGhhcyBmYWlsZWQgYW5kIHJlc3VsdCByZW1haW5z IE5VTEwuICAqLworCisgICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4gcm9vdCBhbmQg cmVsZWFzZSB0aGUgbG9jay4gICovCisgICAgICBfX2F0b21pY19zdG9yZV9uICgmX19udnB0 eF9sb3dsYXRfaGVhcF9yb290LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFTRSk7CisKKyAg ICAgIGlmIChyZXN1bHQgPT0gTlVMTCkKKwl7CisJICAvKiBUaGUgYWxsb2NhdGlvbiBjb3Vs ZCBub3QgYmUgZXh0ZW5kZWQgaW4gcGxhY2UsIHNvIHdlIHNpbXBseQorCSAgICAgYWxsb2Nh dGUgZnJlc2ggbWVtb3J5IGFuZCBtb3ZlIHRoZSBkYXRhLiAgSWYgd2UgY2FuJ3QgYWxsb2Nh dGUKKwkgICAgIGZyb20gbG93LWxhdGVuY3kgbWVtb3J5IHRoZW4gd2UgbGVhdmUgdGhlIG9y aWdpbmFsIGFsbG9hY3Rpb24KKwkgICAgIGludGFjdCBhbmQgcmV0dXJuIE5VTEwuCisJICAg ICBXZSBjb3VsZCBkbyBhIGZhbGwtYmFjayB0byBtYWluIG1lbW9yeSwgYnV0IHdlIGRvbid0 IGtub3cgd2hhdAorCSAgICAgdGhlIGZhbGwtYmFjayB0cmFpdCBzYWlkIHRvIGRvLiAgKi8K KwkgIHJlc3VsdCA9IG52cHR4X21lbXNwYWNlX2FsbG9jIChtZW1zcGFjZSwgc2l6ZSk7CisJ ICBpZiAocmVzdWx0ICE9IE5VTEwpCisJICAgIHsKKwkgICAgICAvKiBJbmxpbmUgbWVtY3B5 IGluIHdoaWNoIHdlIGtub3cgb2xkc2l6ZSBpcyBhIG11bHRpcGxlIG9mIDguICAqLworCSAg ICAgIHVpbnQ2NF90ICpmcm9tID0gYWRkciwgKnRvID0gcmVzdWx0OworCSAgICAgIGZvciAo dW5zaWduZWQgaSA9IDA7IGkgPCAodW5zaWduZWQpb2xkc2l6ZS84OyBpKyspCisJCXRvW2ld ID0gZnJvbVtpXTsKKworCSAgICAgIG52cHR4X21lbXNwYWNlX2ZyZWUgKG1lbXNwYWNlLCBh ZGRyLCBvbGRzaXplKTsKKwkgICAgfQorCX0KKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAg fQorICBlbHNlCisgICAgcmV0dXJuIHJlYWxsb2MgKGFkZHIsIHNpemUpOworfQorCisjZGVm aW5lIE1FTVNQQUNFX0FMTE9DKE1FTVNQQUNFLCBTSVpFKSBcCisgIG52cHR4X21lbXNwYWNl X2FsbG9jIChNRU1TUEFDRSwgU0laRSkKKyNkZWZpbmUgTUVNU1BBQ0VfQ0FMTE9DKE1FTVNQ QUNFLCBTSVpFKSBcCisgIG52cHR4X21lbXNwYWNlX2NhbGxvYyAoTUVNU1BBQ0UsIFNJWkUp CisjZGVmaW5lIE1FTVNQQUNFX1JFQUxMT0MoTUVNU1BBQ0UsIEFERFIsIE9MRFNJWkUsIFNJ WkUpIFwKKyAgbnZwdHhfbWVtc3BhY2VfcmVhbGxvYyAoTUVNU1BBQ0UsIEFERFIsIE9MRFNJ WkUsIFNJWkUpCisjZGVmaW5lIE1FTVNQQUNFX0ZSRUUoTUVNU1BBQ0UsIEFERFIsIFNJWkUp IFwKKyAgbnZwdHhfbWVtc3BhY2VfZnJlZSAoTUVNU1BBQ0UsIEFERFIsIFNJWkUpCisKKyNp bmNsdWRlICIuLi8uLi9hbGxvY2F0b3IuYyIKZGlmZiAtLWdpdCBhL2xpYmdvbXAvY29uZmln L252cHR4L3RlYW0uYyBiL2xpYmdvbXAvY29uZmlnL252cHR4L3RlYW0uYwppbmRleCA2OTIz NDE2ZmI0ZS4uYzdiMmM3MGRmYTYgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvY29uZmlnL252cHR4 L3RlYW0uYworKysgYi9saWJnb21wL2NvbmZpZy9udnB0eC90ZWFtLmMKQEAgLTMzLDkgKzMz LDEzIEBACiAKIHN0cnVjdCBnb21wX3RocmVhZCAqbnZwdHhfdGhycyBfX2F0dHJpYnV0ZV9f KChzaGFyZWQsbm9jb21tb24pKTsKIGludCBfX2dvbXBfdGVhbV9udW0gX19hdHRyaWJ1dGVf Xygoc2hhcmVkLG5vY29tbW9uKSk7Cit1aW50MzJfdCBfX252cHR4X2xvd2xhdF9oZWFwX3Jv b3QgX19hdHRyaWJ1dGVfXygoc2hhcmVkLG5vY29tbW9uKSk7CiAKIHN0YXRpYyB2b2lkIGdv bXBfdGhyZWFkX3N0YXJ0IChzdHJ1Y3QgZ29tcF90aHJlYWRfcG9vbCAqKTsKIAorLyogVGhl cmUgc2hvdWxkIGJlIHNvbWUgLnNoYXJlZCBzcGFjZSByZXNlcnZlZCBmb3IgdXMuICBUaGVy ZSdzIG5vIHdheSB0bworICAgZXhwcmVzcyB0aGlzIG1hZ2ljIGV4dGVybiBzaXplbGVzcyBh cnJheSBpbiBDIHNvIHVzZSBhc20uICAqLworYXNtICgiLmV4dGVybiAuc2hhcmVkIC51OCBf X252cHR4X2xvd2xhdF9wb29sW107XG4iKTsKIAogLyogVGhpcyBleHRlcm5hbGx5IHZpc2li bGUgZnVuY3Rpb24gaGFuZGxlcyB0YXJnZXQgcmVnaW9uIGVudHJ5LiAgSXQKICAgIHNldHMg dXAgYSBwZXItdGVhbSB0aHJlYWQgcG9vbCBhbmQgdHJhbnNmZXJzIGNvbnRyb2wgYnkgY2Fs bGluZyBGTiAoRk5fREFUQSkKQEAgLTYzLDYgKzY3LDI3IEBAIGdvbXBfbnZwdHhfbWFpbiAo dm9pZCAoKmZuKSAodm9pZCAqKSwgdm9pZCAqZm5fZGF0YSkKICAgICAgIG52cHR4X3RocnMg PSBhbGxvY2EgKG50aWRzICogc2l6ZW9mICgqbnZwdHhfdGhycykpOwogICAgICAgbWVtc2V0 IChudnB0eF90aHJzLCAwLCBudGlkcyAqIHNpemVvZiAoKm52cHR4X3RocnMpKTsKIAorICAg ICAgLyogRmluZCB0aGUgbG93LWxhdGVuY3kgaGVhcCBkZXRhaWxzIC4uLi4gICovCisgICAg ICB1aW50MzJfdCAqc2hhcmVkX3Bvb2w7CisgICAgICB1aW50MzJfdCBzaGFyZWRfcG9vbF9z aXplOworICAgICAgYXNtICgiY3Z0YS5zaGFyZWQudTY0XHQlMCwgX19udnB0eF9sb3dsYXRf cG9vbDsiIDogIj1yIihzaGFyZWRfcG9vbCkpOworICAgICAgYXNtICgibW92LnUzMlx0JTAs ICUlZHluYW1pY19zbWVtX3NpemU7XG4iCisJICAgOiAiPXIiKHNoYXJlZF9wb29sX3NpemUp KTsKKworICAgICAgLyogLi4uIGFuZCBpbml0aWFsaXplIGl0IHdpdGggYW4gZW1wdHkgZnJl ZS1jaGFpbi4gICovCisgICAgICB1bmlvbiB7CisJdWludDMyX3QgcmF3OworCXN0cnVjdCB7 CisJICB1aW50MTZfdCBvZmZzZXQ7CisJICB1aW50MTZfdCBzaXplOworCX0gZGVzYzsKKyAg ICAgIH0gcm9vdDsKKyAgICAgIHJvb3QuZGVzYy5vZmZzZXQgPSAwOwkJIC8qIFRoZSBmaXJz dCBieXRlIGlzIGZyZWUuICAqLworICAgICAgcm9vdC5kZXNjLnNpemUgPSBzaGFyZWRfcG9v bF9zaXplOyAvKiBUaGUgd2hvbGUgc3BhY2UgaXMgZnJlZS4gICovCisgICAgICBfX252cHR4 X2xvd2xhdF9oZWFwX3Jvb3QgPSByb290LnJhdzsKKyAgICAgIHNoYXJlZF9wb29sWzBdID0g MDsJCSAvKiBUZXJtaW5hdGUgZnJlZSBjaGFpbi4gICovCisKKyAgICAgIC8qIEluaXRpYWxp emUgdGhlIHRocmVhZCBwb29sLiAgKi8KICAgICAgIHN0cnVjdCBnb21wX3RocmVhZF9wb29s ICpwb29sID0gYWxsb2NhIChzaXplb2YgKCpwb29sKSk7CiAgICAgICBwb29sLT50aHJlYWRz ID0gYWxsb2NhIChudGlkcyAqIHNpemVvZiAoKnBvb2wtPnRocmVhZHMpKTsKICAgICAgIGZv ciAodGlkID0gMDsgdGlkIDwgbnRpZHM7IHRpZCsrKQpkaWZmIC0tZ2l0IGEvbGliZ29tcC9w bHVnaW4vcGx1Z2luLW52cHR4LmMgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYwpp bmRleCBiNGYwYTg0ZDc3YS4uMWI5YTVlOTVjMDcgMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvcGx1 Z2luL3BsdWdpbi1udnB0eC5jCisrKyBiL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0eC5j CkBAIC0zMzAsNiArMzMwLDExIEBAIHN0cnVjdCBwdHhfZGV2aWNlCiAKIHN0YXRpYyBzdHJ1 Y3QgcHR4X2RldmljZSAqKnB0eF9kZXZpY2VzOwogCisvKiBPcGVuTVAga2VybmVscyByZXNl cnZlIGEgc21hbGwgYW1vdW50IG9mICIuc2hhcmVkIiBzcGFjZSBmb3IgdXNlIGJ5CisgICBv bXBfYWxsb2MuICBUaGUgc2l6ZSBpcyBjb25maWd1cmVkIHVzaW5nIEdPTVBfTlZQVFhfTE9X TEFUX1BPT0wsIGJ1dCB0aGUKKyAgIGRlZmF1bHQgaXMgc2V0IGhlcmUuICAqLworc3RhdGlj IHVuc2lnbmVkIGxvd2xhdF9wb29sX3NpemUgPSA4KjEwMjQ7CisKIHN0YXRpYyBpbmxpbmUg c3RydWN0IG52cHR4X3RocmVhZCAqCiBudnB0eF90aHJlYWQgKHZvaWQpCiB7CkBAIC0xMTk2 LDYgKzEyMDEsMjIgQEAgR09NUF9PRkZMT0FEX2luaXRfZGV2aWNlIChpbnQgbikKICAgICAg IGluc3RhbnRpYXRlZF9kZXZpY2VzKys7CiAgICAgfQogCisgIGNvbnN0IGNoYXIgKnZhcl9u YW1lID0gIkdPTVBfTlZQVFhfTE9XTEFUX1BPT0wiOworICBjb25zdCBjaGFyICplbnZfdmFy ID0gc2VjdXJlX2dldGVudiAodmFyX25hbWUpOworICBub3RpZnlfdmFyICh2YXJfbmFtZSwg ZW52X3Zhcik7CisKKyAgaWYgKGVudl92YXIgIT0gTlVMTCkKKyAgICB7CisgICAgICBjaGFy ICplbmRwdHI7CisgICAgICB1bnNpZ25lZCBsb25nIHZhbCA9IHN0cnRvdWwgKGVudl92YXIs ICZlbmRwdHIsIDEwKTsKKyAgICAgIGlmIChlbmRwdHIgPT0gTlVMTCB8fCAqZW5kcHRyICE9 ICdcMCcKKwkgIHx8IGVycm5vID09IEVSQU5HRSB8fCBlcnJubyA9PSBFSU5WQUwKKwkgIHx8 IHZhbCA+IFVJTlRfTUFYKQorCUdPTVBfUExVR0lOX2Vycm9yICgiRXJyb3IgcGFyc2luZyAl cyIsIHZhcl9uYW1lKTsKKyAgICAgIGVsc2UKKwlsb3dsYXRfcG9vbF9zaXplID0gdmFsOwor ICAgIH0KKwogICBwdGhyZWFkX211dGV4X3VubG9jayAoJnB0eF9kZXZfbG9jayk7CiAKICAg cmV0dXJuIGRldiAhPSBOVUxMOwpAQCAtMjAyMSw3ICsyMDQyLDcgQEAgR09NUF9PRkZMT0FE X3J1biAoaW50IG9yZCwgdm9pZCAqdGd0X2ZuLCB2b2lkICp0Z3RfdmFycywgdm9pZCAqKmFy Z3MpCiAJCSAgICAgIiBbKHRlYW1zOiAldSksIDEsIDFdIFsobGFuZXM6IDMyKSwgKHRocmVh ZHM6ICV1KSwgMV1cbiIsCiAJCSAgICAgX19GVU5DVElPTl9fLCBmbl9uYW1lLCB0ZWFtcywg dGhyZWFkcyk7CiAgIHIgPSBDVURBX0NBTExfTk9DSEVDSyAoY3VMYXVuY2hLZXJuZWwsIGZ1 bmN0aW9uLCB0ZWFtcywgMSwgMSwKLQkJCSAzMiwgdGhyZWFkcywgMSwgMCwgTlVMTCwgTlVM TCwgY29uZmlnKTsKKwkJCSAzMiwgdGhyZWFkcywgMSwgbG93bGF0X3Bvb2xfc2l6ZSwgTlVM TCwgTlVMTCwgY29uZmlnKTsKICAgaWYgKHIgIT0gQ1VEQV9TVUNDRVNTKQogICAgIEdPTVBf UExVR0lOX2ZhdGFsICgiY3VMYXVuY2hLZXJuZWwgZXJyb3I6ICVzIiwgY3VkYV9lcnJvciAo cikpOwogCmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2Nh dG9ycy0xLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0xLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjA0OTY4ZTRjODNkCi0t LSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRv cnMtMS5jCkBAIC0wLDAgKzEsNTYgQEAKKy8qIHsgZGctZG8gcnVuIH0gKi8KKworLyogVGVz dCB0aGF0IG9tcF9hbGxvYyByZXR1cm5zIHVzYWJsZSBtZW1vcnkuICAqLworCisjaW5jbHVk ZSA8b21wLmg+CisKKyNwcmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycwor Cit2b2lkCit0ZXN0IChpbnQgbiwgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3Ip Cit7CisgICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG86bikgbWFwKHRvOmFsbG9jYXRvcikK KyAgeworICAgIGludCAqYTsKKyAgICBhID0gKGludCAqKSBvbXBfYWxsb2MobipzaXplb2Yo aW50KSwgYWxsb2NhdG9yKTsKKworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsCisgICAgZm9y IChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICBhW2ldID0gaTsKKworICAgIGZvciAo aW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgaWYgKGFbaV0gIT0gaSkKKwl7CisJICBf X2J1aWx0aW5fcHJpbnRmICgiZGF0YSBtaXNtYXRjaCBhdCAlaVxuIiwgaSk7CisJICBfX2J1 aWx0aW5fYWJvcnQgKCk7CisJfQorCisgICAgb21wX2ZyZWUoYSwgYWxsb2NhdG9yKTsKKyAg fQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgLy8gU21hbGxlciB0aGFuIGxvdy1sYXRlbmN5 IG1lbW9yeSBsaW1pdAorICB0ZXN0ICgxMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAg dGVzdCAoMTAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9j b25zdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsK KyAgdGVzdCAoMTAsIG9tcF9sb3dfbGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf Y2dyb3VwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsK KyAgdGVzdCAoMTAsIG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICAvLyBMYXJnZXIgdGhh biBsb3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAwMDAwLCBvbXBfZGVmYXVs dF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9j KTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAw MDAwLCBvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sb3df bGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2Nncm91cF9tZW1fYWxsb2Mp OworICB0ZXN0ICgxMDAwMDAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAw MDAsIG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTIuYyBiL2xpYmdv bXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTIuYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMC4uYTk4ZjFiNGMwNWUKLS0tIC9kZXYvbnVsbAorKysg Yi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0yLmMKQEAgLTAsMCAr MSw2NCBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBUZXN0IGNvbmN1cnJlbnQgYW5k IHJlcGVhdGVkIGFsbG9jYXRpb25zLiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCisjcHJh Z21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAordGVzdCAoaW50 IG4sIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9t cCB0YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisgIHsKKyAgICBpbnQgKiph OworICAgIGEgPSAoaW50ICoqKSBvbXBfYWxsb2MobipzaXplb2YoaW50KiksIGFsbG9jYXRv cik7CisKKyAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbCBmb3IKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykKKyAgICAgIHsKKwkvKlVzZSAxMHggdG8gZW5zdXJlIHdlIGRvIGFj dGl2YXRlIGxvdy1sYXRlbmN5IGZhbGwtYmFjay4gICovCisJYVtpXSA9IG9tcF9hbGxvYyhz aXplb2YoaW50KSoxMCwgYWxsb2NhdG9yKTsKKwlhW2ldWzBdID0gaTsKKyAgICAgIH0KKwor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgaWYgKGFbaV1bMF0gIT0g aSkKKwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgiZGF0YSBtaXNtYXRjaCBhdCAlaVxuIiwg aSk7CisJICBfX2J1aWx0aW5fYWJvcnQgKCk7CisJfQorCisgICAgI3ByYWdtYSBvbXAgcGFy YWxsZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisgICAgICBvbXBf ZnJlZShhW2ldLCBhbGxvY2F0b3IpOworCisgICAgb21wX2ZyZWUgKGEsIGFsbG9jYXRvcik7 CisgIH0KK30KKworaW50CittYWluICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0 ZW5jeSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBv bXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9oaWdoX2J3X21lbV9hbGxv Yyk7CisgIHRlc3QgKDEwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwg b21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX3B0ZWFtX21lbV9hbGxv Yyk7CisgIHRlc3QgKDEwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7CisKKyAgLy8gTGFyZ2Vy IHRoYW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0IChvbiBhZ2dyZWdhdGUpCisgIHRlc3Qg KDEwMDAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAsIG9tcF9sYXJn ZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMCwgb21wX2NvbnN0X21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwMDAsIG9tcF9oaWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAs IG9tcF9sb3dfbGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAsIG9tcF9jZ3JvdXBfbWVt X2FsbG9jKTsKKyAgdGVzdCAoMTAwMCwgb21wX3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3Qg KDEwMDAsIG9tcF90aHJlYWRfbWVtX2FsbG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAt LWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYyBiL2xp YmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uNDU1MTRjMmEwODgKLS0tIC9kZXYvbnVsbAor KysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0zLmMKQEAgLTAs MCArMSw0MiBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBTdHJlc3MtdGVzdCBvbXBf YWxsb2Mvb21wX21hbGxvYyB1bmRlciBjb25jdXJyZW5jeS4gICovCisKKyNpbmNsdWRlIDxv bXAuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjcHJh Z21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKworI2RlZmluZSBOIDEwMDAK Kwordm9pZAordGVzdCAob21wX2FsbG9jYXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCit7Cisg ICNwcmFnbWEgb21wIHRhcmdldCBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgI3ByYWdt YSBvbXAgcGFyYWxsZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBOOyBpKyspCisg ICAgICBmb3IgKGludCBqID0gMDsgaiA8IE47IGorKykKKwl7CisJICBpbnQgKnAgPSBvbXBf YWxsb2Moc2l6ZW9mKGludCksIGFsbG9jYXRvcik7CisJICBvbXBfZnJlZShwLCBhbGxvY2F0 b3IpOworCX0KKyAgfQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgLy8gU21hbGxlciB0aGFu IGxvdy1sYXRlbmN5IG1lbW9yeSBsaW1pdAorICB0ZXN0IChvbXBfZGVmYXVsdF9tZW1fYWxs b2MpOworICB0ZXN0IChvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKG9tcF9j b25zdF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0 ZXN0IChvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfY2dyb3VwX21lbV9h bGxvYyk7CisgIHRlc3QgKG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfdGhy ZWFkX21lbV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21w L3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy00LmMgYi9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmMvYWxsb2NhdG9ycy00LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMDAuLjlmYTZhYTE2MjRmCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90 ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNC5jCkBAIC0wLDAgKzEsMTk2IEBACisv KiB7IGRnLWRvIHJ1biB9ICovCisKKy8qIFRlc3QgdGhhdCBsb3ctbGF0ZW5jeSBmcmVlIGNo YWlucyBhcmUgc291bmQuICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8 b21wLmg+CisKKyNwcmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycworCit2 b2lkCitjaGVjayAoaW50IGNvbmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgaWYgKCFjb25k KQorICAgIHsKKyAgICAgIF9fYnVpbHRpbl9wcmludGYgKCIlc1xuIiwgbXNnKTsKKyAgICAg IF9fYnVpbHRpbl9hYm9ydCAoKTsKKyAgICB9Cit9CisKK2ludAorbWFpbiAoKQoreworICAj cHJhZ21hIG9tcCB0YXJnZXQKKyAgeworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkg d2UgZ2V0ICppcyogbG93LWxhdGVuY3kgd2l0aCBhIG51bGwtZmFsbGJhY2suICAqLworICAg IG9tcF9hbGxvY3RyYWl0X3QgdHJhaXRzWzFdCisgICAgICA9IHsgeyBvbXBfYXRrX2ZhbGxi YWNrLCBvbXBfYXR2X251bGxfZmIgfSB9OworICAgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3Qg bG93bGF0ID0gb21wX2luaXRfYWxsb2NhdG9yIChvbXBfbG93X2xhdF9tZW1fc3BhY2UsCisJ CQkJCQkJMSwgdHJhaXRzKTsKKworICAgIGludCBzaXplID0gNDsKKworICAgIGNoYXIgKmEg PSBvbXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpiID0gb21wX2FsbG9jKHNp emUsIGxvd2xhdCk7CisgICAgY2hhciAqYyA9IG9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOwor ICAgIGNoYXIgKmQgPSBvbXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKworICAgIC8qIFRoZXJl IGFyZSBoZWFkZXJzIGFuZCBwYWRkaW5nIHRvIGFjY291bnQgZm9yLiAgKi8KKyAgICBpbnQg c2l6ZTIgPSBzaXplICsgKGItYSk7CisgICAgaW50IHNpemUzID0gc2l6ZSArIChjLWEpOwor ICAgIGludCBzaXplNCA9IHNpemUgKyAoZC1hKSArIDEwMDsgLyogUmFuZG9tIGxhcmdlciBh bW91bnQuICAqLworCisgICAgY2hlY2sgKGEgIT0gTlVMTCAmJiBiICE9IE5VTEwgJiYgYyAh PSBOVUxMICYmIGQgIT0gTlVMTCwKKwkgICAib21wX2FsbG9jIHJldHVybmVkIE5VTExcbiIp OworCisgICAgb21wX2ZyZWUoYSwgbG93bGF0KTsKKyAgICBjaGFyICpwID0gb21wX2FsbG9j IChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBkaWQgbm90 IHJldXNlIGZpcnN0IGNodW5rIik7CisKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAg IHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFs bG9jYXRlIGRpZCBub3QgcmV1c2Ugc2Vjb25kIGNodW5rIik7CisKKyAgICBvbXBfZnJlZShj LCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hl Y2sgKHAgPT0gYywgImFsbG9jYXRlIGRpZCBub3QgcmV1c2UgdGhpcmQgY2h1bmsiKTsKKwor ICAgIG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAg ICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAi YWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0d28gY2h1bmtzIik7CisKKyAgICBv bXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7 CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1 bmsgKDEpIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVj ayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMikiKTsK KworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsK KyAgICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBi LCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBtaWRkbGUgdHdvIGNodW5rcyIpOworCisg ICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29u ZCBjaHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAg IGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAo MikiKTsKKworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYSwgbG93 bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0d28gY2h1bmtzLCBy ZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9t cF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUg ZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIHJldmVyc2UgZnJlZSIpOworICAgIHAg PSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9j YXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsKKwor ICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAg ICBwID0gb21wX2FsbG9jIChzaXplMiwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAi YWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBzZWNvbmQgdHdvIGNodW5rcywgcmV2ZXJzZSBm cmVlIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2Mg KHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qg c3BsaXQgc2Vjb25kIGNodW5rICgxKSwgcmV2ZXJzZSBmcmVlIik7CisgICAgcCA9IG9tcF9h bGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlk IG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsKKworICAgIG9t cF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBvbXBf ZnJlZShjLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUzLCBsb3dsYXQpOwor ICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBkaWQgbm90IGNvYWxlc2NlIGZpcnN0IHRo cmVlIGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21w X2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0ZSBk aWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgxKSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNp emUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qgc3Bs aXQgZmlyc3QgY2h1bmsgKDIpIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0 KTsKKyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJzdCBj aHVuayAoMykiKTsKKworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUo YywgbG93bGF0KTsKKyAgICBvbXBfZnJlZShkLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxs b2MgKHNpemUzLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQg bm90IGNvYWxlc2NlIGxhc3QgdGhyZWUgY2h1bmtzIik7CisKKyAgICBvbXBfZnJlZShwLCBs b3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSIpOwor ICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYywg ImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgyKSIpOworICAgIHAgPSBv bXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgImFsbG9jYXRl IGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgzKSIpOworCisgICAgb21wX2ZyZWUoYywg bG93bGF0KTsKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGEsIGxv d2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2UgZmlyc3QgdGhyZWUgY2h1bmtz LCByZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9 IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2Nh dGUgZGlkIG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIHJldmVyc2UgZnJlZSIpOworICAg IHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFs bG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpLCByZXZlcnNlIGZyZWUiKTsK KyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMs ICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgzKSwgcmV2ZXJzZSBmcmVl Iik7CisKKyAgICBvbXBfZnJlZShkLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xh dCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXpl MywgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2Fs ZXNjZSBzZWNvbmQgdGhyZWUgY2h1bmtzLCByZXZlcnNlIGZyZWUiKTsKKworICAgIG9tcF9m cmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAg ICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsg KDEpLCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQp OworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBj aHVuayAoMiksIHJldmVyc2UgZnJlZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxv d2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vj b25kIGNodW5rICgzKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShjLCBsb3ds YXQpOworICAgIG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0 KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsKKyAgICBjaGVjayAocCA9 PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0aHJlZSBjaHVua3MsIG1p eGVkIGZyZWUiKTsKKworICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9h bGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlk IG5vdCBzcGxpdCBmaXJzdCBjaHVuayAoMSksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21w X2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBk aWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgyKSwgbWl4ZWQgZnJlZSIpOworICAgIHAgPSBv bXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYywgImFsbG9jYXRl IGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDMpLCBtaXhlZCBmcmVlIik7CisKKyAgICBv bXBfZnJlZShkLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21w X2ZyZWUoYywgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsK KyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBzZWNvbmQg dGhyZWUgY2h1bmtzLCBtaXhlZCBmcmVlIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQp OworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0g YiwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSwgbWl4ZWQgZnJl ZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gYywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgyKSwgbWl4ZWQg ZnJlZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gZCwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgzKSwgbWl4 ZWQgZnJlZSIpOworCisgICAgb21wX2ZyZWUoYSwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShi LCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoZCwg bG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jKHNpemU0LCBsb3dsYXQpOworICAgIGNoZWNr IChwID09IGEsICJhbGxvY2F0ZSBkaWQgbm90IGNvYWxlc2NlIGFsbCBtZW1vcnkiKTsKKyAg fQorCityZXR1cm4gMDsKK30KKwpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGli Z29tcC5jL2FsbG9jYXRvcnMtNS5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2Fs bG9jYXRvcnMtNS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45 Njk0MDEwY2YxZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy9hbGxvY2F0b3JzLTUuYwpAQCAtMCwwICsxLDYzIEBACisvKiB7IGRnLWRvIHJ1biB9 ICovCisKKy8qIFRlc3QgY2FsbG9jIHdpdGggb21wX2FsbG9jLiAgKi8KKworI2luY2x1ZGUg PG9tcC5oPgorCisjcHJhZ21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwor dm9pZAordGVzdCAoaW50IG4sIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQor eworICAjcHJhZ21hIG9tcCB0YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisg IHsKKyAgICBpbnQgKmE7CisgICAgYSA9IChpbnQgKikgb21wX2NhbGxvYyhuLCBzaXplb2Yo aW50KSwgYWxsb2NhdG9yKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQor ICAgICAgaWYgKGFbaV0gIT0gMCkKKwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgibWVtb3J5 IG5vdCB6ZXJvZWQgYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOworCX0K KworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBu OyBpKyspCisgICAgICBhW2ldID0gaTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsg aSsrKQorICAgICAgaWYgKGFbaV0gIT0gaSkKKwl7CisJICBfX2J1aWx0aW5fcHJpbnRmICgi ZGF0YSBtaXNtYXRjaCBhdCAlaVxuIiwgaSk7CisJICBfX2J1aWx0aW5fYWJvcnQgKCk7CisJ fQorCisgICAgb21wX2ZyZWUoYSwgYWxsb2NhdG9yKTsKKyAgfQorfQorCitpbnQKK21haW4g KCkKK3sKKyAgLy8gU21hbGxlciB0aGFuIGxvdy1sYXRlbmN5IG1lbW9yeSBsaW1pdAorICB0 ZXN0ICgxMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9sYXJn ZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9jb25zdF9tZW1fYWxsb2MpOwor ICB0ZXN0ICgxMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9s b3dfbGF0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfY2dyb3VwX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF90 aHJlYWRfbWVtX2FsbG9jKTsKKworICAvLyBMYXJnZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1v cnkgbGltaXQKKyAgdGVzdCAoMTAwMDAwLCBvbXBfZGVmYXVsdF9tZW1fYWxsb2MpOworICB0 ZXN0ICgxMDAwMDAsIG9tcF9sYXJnZV9jYXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAw LCBvbXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfaGlnaF9id19t ZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF9sb3dfbGF0X21lbV9hbGxvYyk7Cisg IHRlc3QgKDEwMDAwMCwgb21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAs IG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9tcF90aHJlYWRfbWVt X2FsbG9jKTsKKworICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1 aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTYuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdv bXAuYy9hbGxvY2F0b3JzLTYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwMC4uOTBiZjczMDk1ZWYKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0 ZS9saWJnb21wLmMvYWxsb2NhdG9ycy02LmMKQEAgLTAsMCArMSwxMTcgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKworLyogVGVzdCB0aGF0IGxvdy1sYXRlbmN5IHJlYWxsb2MgYW5kIGZy ZWUgY2hhaW5zIGFyZSBzb3VuZC4gICovCisKKyNpbmNsdWRlIDxzdGRkZWYuaD4KKyNpbmNs dWRlIDxvbXAuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMgZHluYW1pY19hbGxvY2F0b3Jz CisKK3ZvaWQKK2NoZWNrIChpbnQgY29uZCwgY29uc3QgY2hhciAqbXNnKQoreworICBpZiAo IWNvbmQpCisgICAgeworICAgICAgX19idWlsdGluX3ByaW50ZiAoIiVzXG4iLCBtc2cpOwor ICAgICAgX19idWlsdGluX2Fib3J0ICgpOworICAgIH0KK30KKworaW50CittYWluICgpCit7 CisgICNwcmFnbWEgb21wIHRhcmdldAorICB7CisgICAgLyogRW5zdXJlIHRoYXQgdGhlIG1l bW9yeSB3ZSBnZXQgKmlzKiBsb3ctbGF0ZW5jeSB3aXRoIGEgbnVsbC1mYWxsYmFjay4gICov CisgICAgb21wX2FsbG9jdHJhaXRfdCB0cmFpdHNbMV0KKyAgICAgID0geyB7IG9tcF9hdGtf ZmFsbGJhY2ssIG9tcF9hdHZfbnVsbF9mYiB9IH07CisgICAgb21wX2FsbG9jYXRvcl9oYW5k bGVfdCBsb3dsYXQgPSBvbXBfaW5pdF9hbGxvY2F0b3IgKG9tcF9sb3dfbGF0X21lbV9zcGFj ZSwKKwkJCQkJCQkxLCB0cmFpdHMpOworCisgICAgaW50IHNpemUgPSAxNjsKKworICAgIGNo YXIgKmEgPSAoY2hhciAqKW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmIg PSAoY2hhciAqKW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmMgPSAoY2hh ciAqKW9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAgIGNoYXIgKmQgPSAoY2hhciAqKW9t cF9hbGxvYyhzaXplLCBsb3dsYXQpOworCisgICAgLyogVGhlcmUgYXJlIGhlYWRlcnMgYW5k IHBhZGRpbmcgdG8gYWNjb3VudCBmb3IuICAqLworICAgIGludCBzaXplMiA9IHNpemUgKyAo Yi1hKTsKKyAgICBpbnQgc2l6ZTMgPSBzaXplICsgKGMtYSk7CisgICAgaW50IHNpemU0ID0g c2l6ZSArIChkLWEpICsgMTAwOyAvKiBSYW5kb20gbGFyZ2VyIGFtb3VudC4gICovCisKKyAg ICBjaGVjayAoYSAhPSBOVUxMICYmIGIgIT0gTlVMTCAmJiBjICE9IE5VTEwgJiYgZCAhPSBO VUxMLAorCSAgICJvbXBfYWxsb2MgcmV0dXJuZWQgTlVMTFxuIik7CisKKyAgICBjaGFyICpw ID0gb21wX3JlYWxsb2MgKGIsIHNpemUsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBiLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIHNhbWUgc2l6ZSBjaHVuaywgbm8gc3Bh Y2UgYWZ0ZXIiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZS04LCBsb3dsYXQs IGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBz bWFsbGVyIGNodW5rLCBubyBzcGFjZSBhZnRlciIpOworCisgICAgcCA9IG9tcF9yZWFsbG9j IChiLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxs b2MgZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNodW5rLCBubyBzcGFjZSBhZnRlciIp OworCisgICAgLyogTWFrZSBzcGFjZSBhZnRlciBiLiAgKi8KKyAgICBvbXBfZnJlZShjLCBs b3dsYXQpOworCisgICAgcCA9IG9tcF9yZWFsbG9jIChiLCBzaXplLCBsb3dsYXQsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzYW1lIHNp emUgY2h1bmsiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZS04LCBsb3dsYXQs IGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBz bWFsbGVyIGNodW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUsIGxvd2xh dCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAicmVhbGxvYyBkaWQgbm90IHJldXNl IG9yaWdpbmFsIHNpemUgY2h1bmsiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6 ZSs4LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlk IG5vdCBleHRlbmQgaW4gcGxhY2UgYnkgYSBsaXR0bGUiKTsKKworICAgIHAgPSBvbXBfcmVh bGxvYyAoYiwgc2l6ZTIsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAi cmVhbGxvYyBkaWQgbm90IGV4dGVuZCBpbnRvIHdob2xlIG5leHQgY2h1bmsiKTsKKworICAg IHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZTMsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVj ayAocCAhPSBiLCAicmVhbGxvYyBkaWQgbm90IG1vdmUgYiBlbHNld2hlcmUiKTsKKyAgICBv bXBfZnJlZSAocCwgbG93bGF0KTsKKworCisgICAgcCA9IG9tcF9yZWFsbG9jIChhLCBzaXpl LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgInJlYWxsb2MgZGlkIG5v dCByZXVzZSBzYW1lIHNpemUgY2h1bmssIGZpcnN0IHBvc2l0aW9uIik7CisKKyAgICBwID0g b21wX3JlYWxsb2MgKGEsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgZmlyc3QgcG9z aXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZSwgbG93bGF0LCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugb3JpZ2lu YWwgc2l6ZSBjaHVuaywgZmlyc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxv YyAoYSwgc2l6ZSs4LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgInJl YWxsb2MgZGlkIG5vdCBleHRlbmQgaW4gcGxhY2UgYnkgYSBsaXR0bGUsIGZpcnN0IHBvc2l0 aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGEsIHNpemUzLCBsb3dsYXQsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYSwgInJlYWxsb2MgZGlkIG5vdCBleHRlbmQgaW50byB3 aG9sZSBuZXh0IGNodW5rLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9IG9tcF9yZWFs bG9jIChhLCBzaXplNCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwICE9IGEsICJy ZWFsbG9jIGRpZCBub3QgbW92ZSBhIGVsc2V3aGVyZSwgZmlyc3QgcG9zaXRpb24iKTsKKyAg ICBvbXBfZnJlZSAocCwgbG93bGF0KTsKKworCisgICAgcCA9IG9tcF9yZWFsbG9jIChkLCBz aXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgInJlYWxsb2MgZGlk IG5vdCByZXVzZSBzYW1lIHNpemUgY2h1bmssIGxhc3QgcG9zaXRpb24iKTsKKworICAgIHAg PSBvbXBfcmVhbGxvYyAoZCwgc2l6ZS04LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gZCwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBzbWFsbGVyIGNodW5rLCBsYXN0IHBv c2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQsIHNpemUsIGxvd2xhdCwgbG93 bGF0KTsKKyAgICBjaGVjayAocCA9PSBkLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIG9yaWdp bmFsIHNpemUgY2h1bmssIGxhc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxv YyAoZCwgc2l6ZSs4LCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gZCwgInJl YWxsb2MgZGlkIG5vdCBleHRlbmQgaW4gcGxhY2UgYnkgZCBsaXR0bGUsIGxhc3QgcG9zaXRp b24iKTsKKworICAgIC8qIExhcmdlciB0aGFuIGxvdyBsYXRlbmN5IG1lbW9yeS4gICovCisg ICAgcCA9IG9tcF9yZWFsbG9jKGQsIDEwMDAwMDAwMCwgbG93bGF0LCBsb3dsYXQpOworICAg IGNoZWNrIChwID09IE5VTEwsICJyZWFsbG9jIGRpZCBub3QgZmFpbCBvbiBPT00iKTsKKyAg fQorCityZXR1cm4gMDsKK30KKwo= --------------7B9f0MlxoZCqnaBDV7X3zC5u--