From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from esa4.mentor.iphmx.com (esa4.mentor.iphmx.com [68.232.137.252]) by sourceware.org (Postfix) with ESMTPS id BA7583858C60 for ; Mon, 20 Dec 2021 15:58:34 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org BA7583858C60 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: sUy4FM7rfS9d2tMaSWvUJy10aGFn0WYtY8ntLvqp2TWAY5Tu2xwyFsENIFHtRB8HRRw6fO8BUn +LnOdIeUXBBb/DH8OFIq0D1QJbbiXRU+2B/Ipi9FbcsjaZ6xOUAkFbeLrx09lWXMsOYr9L79AJ yNGTKJVnjFwhL7Yd1lPpTs6yHASrnutqUQJml6cgiR5PDOVN2HmrHVyL0HVnxxekAmgkYJFf2v 076OKSov0JBzbYGAiVJ7lkhZEP5UA9ZlPBQ1Dv1KcWpNbWPraR+zktw6AygSONW3oXC9o9mQGt p21q9d2OEKPEHHp3CkZj4f5U X-IronPort-AV: E=Sophos;i="5.88,220,1635235200"; d="scan'208";a="69930687" Received: from orw-gwy-01-in.mentorg.com ([192.94.38.165]) by esa4.mentor.iphmx.com with ESMTP; 20 Dec 2021 07:58:33 -0800 IronPort-SDR: mhcmsINAe17oTSWsfBiMvh92zigmR0uzWnS6EkE72NByxuLKCP2w6Bxha1dWIaqpF0JFdC6NCt F8MP5lJ7mJKWdpR5dD6u7BFddSpDWgRi0RSCuHyYFvQ7PVBF/fAMY5dPZAYJILqeuI6K6PFyeU lZaqVIhAAbFS4lM9ruZRbic51Oh5gxpd5y1AWRdLc+1QOa+BYRY79AkTo001iw+K/F6pM7OhVe rmARhMEv2y/JFS4BBcvZBZJORu3nGVlN9QNuvn6fL3tzbDx4AsfbS66oCbMOMnHvXo9IgIFz7A edM= Content-Type: multipart/mixed; boundary="------------MTB5cKoksRV5OCvLNeLbL0zm" Message-ID: <25ad524d-f0d6-1970-b8e9-9b11b6cde68b@codesourcery.com> Date: Mon, 20 Dec 2021 15:58:27 +0000 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.4.0 Content-Language: en-GB From: Andrew Stubbs Subject: [PATCH] libgomp, OpenMP, nvptx: Low-latency memory allocator To: "gcc-patches@gcc.gnu.org" X-Originating-IP: [137.202.0.90] X-ClientProxiedBy: svr-ies-mbx-12.mgc.mentorg.com (139.181.222.12) To svr-ies-mbx-01.mgc.mentorg.com (139.181.222.1) X-Spam-Status: No, score=-11.6 required=5.0 tests=BAYES_00, GIT_PATCH_0, HEADER_FROM_DIFFERENT_DOMAINS, KAM_DMARC_STATUS, KAM_SHORT, 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: Mon, 20 Dec 2021 15:58:39 -0000 --------------MTB5cKoksRV5OCvLNeLbL0zm Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 7bit This patch is submitted now for review and so I can commit a backport it to the OG11 branch, but isn't suitable for mainline until stage 1. The patch implements support for omp_low_lat_mem_space and omp_low_lat_mem_alloc on NVPTX offload devices. The omp_pteam_mem_alloc, omp_cgroup_mem_alloc and omp_thread_mem_alloc allocators are also configured to use this space (this to match the current or intended behaviour in other toolchains). The memory is drawn from the ".shared" space that is accessible only from within the team in which it is allocated, and which effectively ceases to exist when the kernel exits. By default, 8 KiB of space is reserved for each team at launch time. This can be adjusted, at runtime, via a new environment variable "GOMP_NVPTX_LOWLAT_POOL". Reserving a larger amount may limit the number of teams that can be run in parallel (due to hardware limitations). Conversely, reducing the allocation may increase the number of teams that can be run in parallel. (I have not yet attempted to tune the default too precisely.) The actual maximum size will vary according to the available hardware and the number of variables that the compiler has placed in .shared space. The allocator implementation is designed to add no extra space-overhead than omp_alloc already does (aside from rounding allocations up to a multiple of 8 bytes), thus the internal free and realloc must be told how big the original allocation was. The free algorithm maintains an in-order linked-list of free memory chunks. Memory is allocated on a first-fit basis. If the allocation fails the NVPTX allocator returns NULL and omp_alloc handles the fall-back. Now that this is a thing that is likely to happen (low-latency memory is small) this patch also implements appropriate fall-back modes for the predefined allocators (fall-back for custom allocators already worked). In order to support the %dynamic_smem_size PTX feature is is necessary to bump the minimum supported PTX version from 3.1 (~2013) to 4.1 (~2014). OK for stage 1? Andrew --------------MTB5cKoksRV5OCvLNeLbL0zm Content-Type: text/plain; charset="UTF-8"; name="211220-low-latency-allocator.patch" Content-Disposition: attachment; filename="211220-low-latency-allocator.patch" Content-Transfer-Encoding: base64 bGliZ29tcCwgbnZwdHg6IGxvdy1sYXRlbmN5IG1lbW9yeSBhbGxvY2F0b3IKClRoaXMgcGF0 Y2ggYWRkcyBzdXBwb3J0IGZvciBhbGxvY2F0aW5nIGxvdy1sYXRlbmN5ICIuc2hhcmVkIiBt ZW1vcnkgb24KTlZQVFggR1BVIGRldmljZSwgdmlhIHRoZSBvbXBfbG93X2xhdF9tZW1fc3Bh Y2UgYW5kIG9tcF9hbGxvYy4gIFRoZSBtZW1vcnkKY2FuIGJlIGFsbG9jYXRlZCwgcmVhbGxv Y2F0ZWQsIGFuZCBmcmVlZCB1c2luZyBhIGJhc2ljIGJ1dCBmYXN0IGFsZ29yaXRobSwKaXMg dGhyZWFkIHNhZmUgYW5kIHRoZSBzaXplIG9mIHRoZSBsb3ctbGF0ZW5jeSBoZWFwIGNhbiBi ZSBjb25maWd1cmVkIHVzaW5nCnRoZSBHT01QX05WUFRYX0xPV0xBVF9QT09MIGVudmlyb25t ZW50IHZhcmlhYmxlLgoKVGhlIHVzZSBvZiB0aGUgUFRYIGR5bmFtaWNfc21lbV9zaXplIGZl YXR1cmUgbWVhbnMgdGhhdCB0aGUgbWluaW11bSB2ZXJzaW9uCnJlcXVpcmVtZW50IGlzIG5v dyBidW1wZWQgdG8gNC4xIChzdGlsbCBvbGQgYXQgdGhpcyBwb2ludCkuCgpnY2MvQ2hhbmdl TG9nOgoKCSogY29uZmlnL252cHR4L252cHR4LmMgKG52cHR4X2ZpbGVfc3RhcnQpOiBCdW1w IG1pbmltdW0gUFRYIHZlcnNpb24KCXRvIDQuMS4KCmxpYmdvbXAvQ2hhbmdlTG9nOgoKCSog YWxsb2NhdG9yLmMgKE1FTVNQQUNFX0FMTE9DKTogTmV3IG1hY3JvLgoJKE1FTVNQQUNFX0NB TExPQyk6IE5ldyBtYWNyby4KCShNRU1TUEFDRV9SRUFMTE9DKTogTmV3IG1hY3JvLgoJKE1F TVNQQUNFX0ZSRUUpOiBOZXcgbWFjcm8uCgkoZHluYW1pY19zbWVtX3NpemUpOiBOZXcgY29u c3RhbnRzLgoJKG9tcF9hbGxvYyk6IFVzZSBNRU1TUEFDRV9BTExPQy4KCUltcGxlbWVudCBm YWxsLWJhY2tzIGZvciBwcmVkZWZpbmVkIGFsbG9jYXRvcnMuCgkob21wX2ZyZWUpOiBVc2Ug TUVNU1BBQ0VfRlJFRS4KCShvbXBfY2FsbG9jKTogVXNlIE1FTVNQQUNFX0NBTExPQy4KCUlt cGxlbWVudCBmYWxsLWJhY2tzIGZvciBwcmVkZWZpbmVkIGFsbG9jYXRvcnMuCgkob21wX3Jl YWxsb2MpOiBVc2UgTUVNU1BBQ0VfUkVBTExPQy4KCUltcGxlbWVudCBmYWxsLWJhY2tzIGZv ciBwcmVkZWZpbmVkIGFsbG9jYXRvcnMuCgkqIGNvbmZpZy9udnB0eC90ZWFtLmMgKF9fbnZw dHhfbG93bGF0X2hlYXBfcm9vdCk6IE5ldyB2YXJpYWJsZS4KCShfX252cHR4X2xvd2xhdF9w b29sKTogTmV3IGFzbSB2YXJhaWJsZS4KCShnb21wX252cHR4X21haW4pOiBJbml0aWFsaXpl IHRoZSBsb3ctbGF0ZW5jeSBoZWFwLgoJKiBwbHVnaW4vcGx1Z2luLW52cHR4LmMgKGxvd2xh dF9wb29sX3NpemUpOiBOZXcgdmFyaWFibGUuCgkoR09NUF9PRkZMT0FEX2luaXRfZGV2aWNl KTogUmVhZCB0aGUgR09NUF9OVlBUWF9MT1dMQVRfUE9PTCBlbnZ2YXIuCgkoR09NUF9PRkZM T0FEX3J1bik6IEFwcGx5IGxvd2xhdF9wb29sX3NpemUuCgkqIGNvbmZpZy9udnB0eC9hbGxv Y2F0b3IuYzogTmV3IGZpbGUuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0x LmM6IE5ldyB0ZXN0LgoJKiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMi5jOiBO ZXcgdGVzdC4KCSogdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTMuYzogTmV3IHRl c3QuCgkqIHRlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy00LmM6IE5ldyB0ZXN0LgoJ KiB0ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtNS5jOiBOZXcgdGVzdC4KCSogdGVz dHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTYuYzogTmV3IHRlc3QuCgpkaWZmIC0tZ2l0 IGEvZ2NjL2NvbmZpZy9udnB0eC9udnB0eC5jIGIvZ2NjL2NvbmZpZy9udnB0eC9udnB0eC5j CmluZGV4IGZmNDRkOWZkYmVmLi45YmMyNmQ3ZGUwYyAxMDA2NDQKLS0tIGEvZ2NjL2NvbmZp Zy9udnB0eC9udnB0eC5jCisrKyBiL2djYy9jb25maWcvbnZwdHgvbnZwdHguYwpAQCAtNTQw OSw3ICs1NDA5LDcgQEAgbnZwdHhfZmlsZV9zdGFydCAodm9pZCkKICAgZWxzZSBpZiAoVEFS R0VUX1BUWF82XzMpCiAgICAgZnB1dHMgKCJcdC52ZXJzaW9uXHQ2LjNcbiIsIGFzbV9vdXRf ZmlsZSk7CiAgIGVsc2UKLSAgICBmcHV0cyAoIlx0LnZlcnNpb25cdDMuMVxuIiwgYXNtX291 dF9maWxlKTsKKyAgICBmcHV0cyAoIlx0LnZlcnNpb25cdDQuMVxuIiwgYXNtX291dF9maWxl KTsKICAgaWYgKFRBUkdFVF9TTTgwKQogICAgIGZwdXRzICgiXHQudGFyZ2V0XHRzbV84MFxu IiwgYXNtX291dF9maWxlKTsKICAgZWxzZSBpZiAoVEFSR0VUX1NNNzUpCmRpZmYgLS1naXQg YS9saWJnb21wL2FsbG9jYXRvci5jIGIvbGliZ29tcC9hbGxvY2F0b3IuYwppbmRleCBkZWVi YjZhNzlmYS4uYjE0Zjk5MWMxNDggMTAwNjQ0Ci0tLSBhL2xpYmdvbXAvYWxsb2NhdG9yLmMK KysrIGIvbGliZ29tcC9hbGxvY2F0b3IuYwpAQCAtMzQsNiArMzQsMzggQEAKIAogI2RlZmlu ZSBvbXBfbWF4X3ByZWRlZmluZWRfYWxsb2Mgb21wX3RocmVhZF9tZW1fYWxsb2MKIAorLyog VGhlc2UgbWFjcm9zIG1heSBiZSBvdmVycmlkZGVuIGluIGNvbmZpZy88dGFyZ2V0Pi9hbGxv Y2F0b3IuYy4gICovCisjaWZuZGVmIE1FTVNQQUNFX0FMTE9DCisjZGVmaW5lIE1FTVNQQUNF X0FMTE9DKE1FTVNQQUNFLCBTSVpFKSBcCisgICgodm9pZClNRU1TUEFDRSwgbWFsbG9jIChT SVpFKSkKKyNlbmRpZgorI2lmbmRlZiBNRU1TUEFDRV9DQUxMT0MKKyNkZWZpbmUgTUVNU1BB Q0VfQ0FMTE9DKE1FTVNQQUNFLCBTSVpFKSBcCisgICgodm9pZClNRU1TUEFDRSwgbWFsbG9j IChTSVpFKSkKKyNlbmRpZgorI2lmbmRlZiBNRU1TUEFDRV9SRUFMTE9DCisjZGVmaW5lIE1F TVNQQUNFX1JFQUxMT0MoTUVNU1BBQ0UsIEFERFIsIE9MRFNJWkUsIFNJWkUpIFwKKyAgKCh2 b2lkKU1FTVNQQUNFLCAodm9pZClPTERTSVpFLCByZWFsbG9jIChBRERSLCBTSVpFKSkKKyNl bmRpZgorI2lmbmRlZiBNRU1TUEFDRV9GUkVFCisjZGVmaW5lIE1FTVNQQUNFX0ZSRUUoTUVN U1BBQ0UsIEFERFIsIFNJWkUpIFwKKyAgKCh2b2lkKU1FTVNQQUNFLCAodm9pZClTSVpFLCBm cmVlIChBRERSKSkKKyNlbmRpZgorCisvKiBNYXAgdGhlIHByZWRlZmluZWQgYWxsb2NhdG9y cyB0byB0aGUgY29ycmVjdCBtZW1vcnkgc3BhY2UuCisgICBUaGUgaW5kZXggdG8gdGhpcyB0 YWJsZSBpcyB0aGUgb21wX2FsbG9jYXRvcl9oYW5kbGVfdCBlbnVtIHZhbHVlLiAgKi8KK3N0 YXRpYyBjb25zdCBvbXBfbWVtc3BhY2VfaGFuZGxlX3QgcHJlZGVmaW5lZF9hbGxvY19tYXBw aW5nW10gPSB7CisgIG9tcF9kZWZhdWx0X21lbV9zcGFjZSwgICAvKiBvbXBfbnVsbF9hbGxv Y2F0b3IuICovCisgIG9tcF9kZWZhdWx0X21lbV9zcGFjZSwgICAvKiBvbXBfZGVmYXVsdF9t ZW1fYWxsb2MuICovCisgIG9tcF9sYXJnZV9jYXBfbWVtX3NwYWNlLCAvKiBvbXBfbGFyZ2Vf Y2FwX21lbV9hbGxvYy4gKi8KKyAgb21wX2RlZmF1bHRfbWVtX3NwYWNlLCAgIC8qIG9tcF9j b25zdF9tZW1fYWxsb2MuICovCisgIG9tcF9oaWdoX2J3X21lbV9zcGFjZSwgICAvKiBvbXBf aGlnaF9id19tZW1fYWxsb2MuICovCisgIG9tcF9sb3dfbGF0X21lbV9zcGFjZSwgICAvKiBv bXBfbG93X2xhdF9tZW1fYWxsb2MuICovCisgIG9tcF9sb3dfbGF0X21lbV9zcGFjZSwgICAv KiBvbXBfY2dyb3VwX21lbV9hbGxvYy4gKi8KKyAgb21wX2xvd19sYXRfbWVtX3NwYWNlLCAg IC8qIG9tcF9wdGVhbV9tZW1fYWxsb2MuICovCisgIG9tcF9sb3dfbGF0X21lbV9zcGFjZSwg ICAvKiBvbXBfdGhyZWFkX21lbV9hbGxvYy4gKi8KK307CisKIHN0cnVjdCBvbXBfYWxsb2Nh dG9yX2RhdGEKIHsKICAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlOwpAQCAtMjgx LDcgKzMxMyw3IEBAIHJldHJ5OgogICAgICAgYWxsb2NhdG9yX2RhdGEtPnVzZWRfcG9vbF9z aXplID0gdXNlZF9wb29sX3NpemU7CiAgICAgICBnb21wX211dGV4X3VubG9jayAoJmFsbG9j YXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgotICAgICAgcHRyID0gbWFsbG9jIChuZXdfc2l6 ZSk7CisgICAgICBwdHIgPSBNRU1TUEFDRV9BTExPQyAoYWxsb2NhdG9yX2RhdGEtPm1lbXNw YWNlLCBuZXdfc2l6ZSk7CiAgICAgICBpZiAocHRyID09IE5VTEwpCiAJewogI2lmZGVmIEhB VkVfU1lOQ19CVUlMVElOUwpAQCAtMjk3LDcgKzMyOSwxMCBAQCByZXRyeToKICAgICB9CiAg IGVsc2UKICAgICB7Ci0gICAgICBwdHIgPSBtYWxsb2MgKG5ld19zaXplKTsKKyAgICAgIG9t cF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSA9IChhbGxvY2F0b3JfZGF0YQorCQkJCQk/ IGFsbG9jYXRvcl9kYXRhLT5tZW1zcGFjZQorCQkJCQk6IHByZWRlZmluZWRfYWxsb2NfbWFw cGluZ1thbGxvY2F0b3JdKTsKKyAgICAgIHB0ciA9IE1FTVNQQUNFX0FMTE9DIChtZW1zcGFj ZSwgbmV3X3NpemUpOwogICAgICAgaWYgKHB0ciA9PSBOVUxMKQogCWdvdG8gZmFpbDsKICAg ICB9CkBAIC0zMTUsMzIgKzM1MCwzNSBAQCByZXRyeToKICAgcmV0dXJuIHJldDsKIAogZmFp bDoKLSAgaWYgKGFsbG9jYXRvcl9kYXRhKQorICBpbnQgZmFsbGJhY2sgPSAoYWxsb2NhdG9y X2RhdGEKKwkJICA/IGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaworCQkgIDogYWxsb2NhdG9y ID09IG9tcF9kZWZhdWx0X21lbV9hbGxvYworCQkgID8gb21wX2F0dl9udWxsX2ZiCisJCSAg OiBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiKTsKKyAgc3dpdGNoIChmYWxsYmFjaykKICAgICB7 Ci0gICAgICBzd2l0Y2ggKGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaykKKyAgICBjYXNlIG9t cF9hdHZfZGVmYXVsdF9tZW1fZmI6CisgICAgICBpZiAoKG5ld19hbGlnbm1lbnQgPiBzaXpl b2YgKHZvaWQgKikgJiYgbmV3X2FsaWdubWVudCA+IGFsaWdubWVudCkKKwkgIHx8IChhbGxv Y2F0b3JfZGF0YQorCSAgICAgICYmIGFsbG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPCB+KHVp bnRwdHJfdCkgMCkKKwkgIHx8ICFhbGxvY2F0b3JfZGF0YSkKIAl7Ci0JY2FzZSBvbXBfYXR2 X2RlZmF1bHRfbWVtX2ZiOgotCSAgaWYgKChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lk ICopICYmIG5ld19hbGlnbm1lbnQgPiBhbGlnbm1lbnQpCi0JICAgICAgfHwgKGFsbG9jYXRv cl9kYXRhCi0JCSAgJiYgYWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90 KSAwKSkKLQkgICAgewotCSAgICAgIGFsbG9jYXRvciA9IG9tcF9kZWZhdWx0X21lbV9hbGxv YzsKLQkgICAgICBnb3RvIHJldHJ5OwotCSAgICB9Ci0JICAvKiBPdGhlcndpc2UsIHdlJ3Zl IGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KLQkgICAgIGFuZCBp ZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2FpbiAodW5sZXNzIGl0IHdhcwot CSAgICAgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwgYXMgdGhhdCBpcyB0aGUg ZmFsbGJhY2suICAqLwotCSAgYnJlYWs7Ci0JY2FzZSBvbXBfYXR2X251bGxfZmI6Ci0JICBi cmVhazsKLQlkZWZhdWx0OgotCWNhc2Ugb21wX2F0dl9hYm9ydF9mYjoKLQkgIGdvbXBfZmF0 YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcgJWx1IGJ5dGVzIiwKLQkJICAgICAgKHVu c2lnbmVkIGxvbmcpIHNpemUpOwotCWNhc2Ugb21wX2F0dl9hbGxvY2F0b3JfZmI6Ci0JICBh bGxvY2F0b3IgPSBhbGxvY2F0b3JfZGF0YS0+ZmJfZGF0YTsKKwkgIGFsbG9jYXRvciA9IG9t cF9kZWZhdWx0X21lbV9hbGxvYzsKIAkgIGdvdG8gcmV0cnk7CiAJfQorICAgICAgLyogT3Ro ZXJ3aXNlLCB3ZSd2ZSBhbHJlYWR5IHBlcmZvcm1lZCBkZWZhdWx0IG1lbSBhbGxvY2F0aW9u CisJIGFuZCBpZiB0aGF0IGZhaWxlZCwgaXQgd29uJ3Qgc3VjY2VlZCBhZ2FpbiAodW5sZXNz IGl0IHdhcworCSBpbnRlcm1pdHRlbnQuICBSZXR1cm4gTlVMTCB0aGVuLCBhcyB0aGF0IGlz IHRoZSBmYWxsYmFjay4gICovCisgICAgICBicmVhazsKKyAgICBjYXNlIG9tcF9hdHZfbnVs bF9mYjoKKyAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgY2FzZSBvbXBfYXR2X2Fi b3J0X2ZiOgorICAgICAgZ29tcF9mYXRhbCAoIk91dCBvZiBtZW1vcnkgYWxsb2NhdGluZyAl bHUgYnl0ZXMiLAorCQkgICh1bnNpZ25lZCBsb25nKSBzaXplKTsKKyAgICBjYXNlIG9tcF9h dHZfYWxsb2NhdG9yX2ZiOgorICAgICAgYWxsb2NhdG9yID0gYWxsb2NhdG9yX2RhdGEtPmZi X2RhdGE7CisgICAgICBnb3RvIHJldHJ5OwogICAgIH0KICAgcmV0dXJuIE5VTEw7CiB9CkBA IC0zNzMsNiArNDExLDcgQEAgdm9pZAogb21wX2ZyZWUgKHZvaWQgKnB0ciwgb21wX2FsbG9j YXRvcl9oYW5kbGVfdCBhbGxvY2F0b3IpCiB7CiAgIHN0cnVjdCBvbXBfbWVtX2hlYWRlciAq ZGF0YTsKKyAgb21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlID0gb21wX2RlZmF1bHRf bWVtX3NwYWNlOwogCiAgIGlmIChwdHIgPT0gTlVMTCkKICAgICByZXR1cm47CkBAIC0zOTMs OCArNDMyLDEzIEBAIG9tcF9mcmVlICh2b2lkICpwdHIsIG9tcF9hbGxvY2F0b3JfaGFuZGxl X3QgYWxsb2NhdG9yKQogCSAgZ29tcF9tdXRleF91bmxvY2sgKCZhbGxvY2F0b3JfZGF0YS0+ bG9jayk7CiAjZW5kaWYKIAl9CisKKyAgICAgIG1lbXNwYWNlID0gYWxsb2NhdG9yX2RhdGEt Pm1lbXNwYWNlOwogICAgIH0KLSAgZnJlZSAoZGF0YS0+cHRyKTsKKyAgZWxzZQorICAgIG1l bXNwYWNlID0gcHJlZGVmaW5lZF9hbGxvY19tYXBwaW5nW2RhdGEtPmFsbG9jYXRvcl07CisK KyAgTUVNU1BBQ0VfRlJFRSAobWVtc3BhY2UsIGRhdGEtPnB0ciwgZGF0YS0+c2l6ZSk7CiB9 CiAKIGlhbGlhcyAob21wX2ZyZWUpCkBAIC00ODIsNyArNTI2LDcgQEAgcmV0cnk6CiAgICAg ICBhbGxvY2F0b3JfZGF0YS0+dXNlZF9wb29sX3NpemUgPSB1c2VkX3Bvb2xfc2l6ZTsKICAg ICAgIGdvbXBfbXV0ZXhfdW5sb2NrICgmYWxsb2NhdG9yX2RhdGEtPmxvY2spOwogI2VuZGlm Ci0gICAgICBwdHIgPSBjYWxsb2MgKDEsIG5ld19zaXplKTsKKyAgICAgIHB0ciA9IE1FTVNQ QUNFX0NBTExPQyAoYWxsb2NhdG9yX2RhdGEtPm1lbXNwYWNlLCBuZXdfc2l6ZSk7CiAgICAg ICBpZiAocHRyID09IE5VTEwpCiAJewogI2lmZGVmIEhBVkVfU1lOQ19CVUlMVElOUwpAQCAt NDk4LDcgKzU0MiwxMCBAQCByZXRyeToKICAgICB9CiAgIGVsc2UKICAgICB7Ci0gICAgICBw dHIgPSBjYWxsb2MgKDEsIG5ld19zaXplKTsKKyAgICAgIG9tcF9tZW1zcGFjZV9oYW5kbGVf dCBtZW1zcGFjZSA9IChhbGxvY2F0b3JfZGF0YQorCQkJCQk/IGFsbG9jYXRvcl9kYXRhLT5t ZW1zcGFjZQorCQkJCQk6IHByZWRlZmluZWRfYWxsb2NfbWFwcGluZ1thbGxvY2F0b3JdKTsK KyAgICAgIHB0ciA9IE1FTVNQQUNFX0NBTExPQyAobWVtc3BhY2UsIG5ld19zaXplKTsKICAg ICAgIGlmIChwdHIgPT0gTlVMTCkKIAlnb3RvIGZhaWw7CiAgICAgfQpAQCAtNTE2LDMyICs1 NjMsMzUgQEAgcmV0cnk6CiAgIHJldHVybiByZXQ7CiAKIGZhaWw6Ci0gIGlmIChhbGxvY2F0 b3JfZGF0YSkKKyAgaW50IGZhbGxiYWNrID0gKGFsbG9jYXRvcl9kYXRhCisJCSAgPyBhbGxv Y2F0b3JfZGF0YS0+ZmFsbGJhY2sKKwkJICA6IGFsbG9jYXRvciA9PSBvbXBfZGVmYXVsdF9t ZW1fYWxsb2MKKwkJICA/IG9tcF9hdHZfbnVsbF9mYgorCQkgIDogb21wX2F0dl9kZWZhdWx0 X21lbV9mYik7CisgIHN3aXRjaCAoZmFsbGJhY2spCiAgICAgewotICAgICAgc3dpdGNoIChh bGxvY2F0b3JfZGF0YS0+ZmFsbGJhY2spCisgICAgY2FzZSBvbXBfYXR2X2RlZmF1bHRfbWVt X2ZiOgorICAgICAgaWYgKChuZXdfYWxpZ25tZW50ID4gc2l6ZW9mICh2b2lkICopICYmIG5l d19hbGlnbm1lbnQgPiBhbGlnbm1lbnQpCisJICB8fCAoYWxsb2NhdG9yX2RhdGEKKwkgICAg ICAmJiBhbGxvY2F0b3JfZGF0YS0+cG9vbF9zaXplIDwgfih1aW50cHRyX3QpIDApCisJICB8 fCAhYWxsb2NhdG9yX2RhdGEpCiAJewotCWNhc2Ugb21wX2F0dl9kZWZhdWx0X21lbV9mYjoK LQkgIGlmICgobmV3X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKSAmJiBuZXdfYWxpZ25t ZW50ID4gYWxpZ25tZW50KQotCSAgICAgIHx8IChhbGxvY2F0b3JfZGF0YQotCQkgICYmIGFs bG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPCB+KHVpbnRwdHJfdCkgMCkpCi0JICAgIHsKLQkg ICAgICBhbGxvY2F0b3IgPSBvbXBfZGVmYXVsdF9tZW1fYWxsb2M7Ci0JICAgICAgZ290byBy ZXRyeTsKLQkgICAgfQotCSAgLyogT3RoZXJ3aXNlLCB3ZSd2ZSBhbHJlYWR5IHBlcmZvcm1l ZCBkZWZhdWx0IG1lbSBhbGxvY2F0aW9uCi0JICAgICBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0 IHdvbid0IHN1Y2NlZWQgYWdhaW4gKHVubGVzcyBpdCB3YXMKLQkgICAgIGludGVybWl0dGVu dC4gIFJldHVybiBOVUxMIHRoZW4sIGFzIHRoYXQgaXMgdGhlIGZhbGxiYWNrLiAgKi8KLQkg IGJyZWFrOwotCWNhc2Ugb21wX2F0dl9udWxsX2ZiOgotCSAgYnJlYWs7Ci0JZGVmYXVsdDoK LQljYXNlIG9tcF9hdHZfYWJvcnRfZmI6Ci0JICBnb21wX2ZhdGFsICgiT3V0IG9mIG1lbW9y eSBhbGxvY2F0aW5nICVsdSBieXRlcyIsCi0JCSAgICAgICh1bnNpZ25lZCBsb25nKSAoc2l6 ZSAqIG5tZW1iKSk7Ci0JY2FzZSBvbXBfYXR2X2FsbG9jYXRvcl9mYjoKLQkgIGFsbG9jYXRv ciA9IGFsbG9jYXRvcl9kYXRhLT5mYl9kYXRhOworCSAgYWxsb2NhdG9yID0gb21wX2RlZmF1 bHRfbWVtX2FsbG9jOwogCSAgZ290byByZXRyeTsKIAl9CisgICAgICAvKiBPdGhlcndpc2Us IHdlJ3ZlIGFscmVhZHkgcGVyZm9ybWVkIGRlZmF1bHQgbWVtIGFsbG9jYXRpb24KKwkgYW5k IGlmIHRoYXQgZmFpbGVkLCBpdCB3b24ndCBzdWNjZWVkIGFnYWluICh1bmxlc3MgaXQgd2Fz CisJIGludGVybWl0dGVudC4gIFJldHVybiBOVUxMIHRoZW4sIGFzIHRoYXQgaXMgdGhlIGZh bGxiYWNrLiAgKi8KKyAgICAgIGJyZWFrOworICAgIGNhc2Ugb21wX2F0dl9udWxsX2ZiOgor ICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICBjYXNlIG9tcF9hdHZfYWJvcnRfZmI6 CisgICAgICBnb21wX2ZhdGFsICgiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICVsdSBieXRl cyIsCisJCSAgKHVuc2lnbmVkIGxvbmcpIChzaXplICogbm1lbWIpKTsKKyAgICBjYXNlIG9t cF9hdHZfYWxsb2NhdG9yX2ZiOgorICAgICAgYWxsb2NhdG9yID0gYWxsb2NhdG9yX2RhdGEt PmZiX2RhdGE7CisgICAgICBnb3RvIHJldHJ5OwogICAgIH0KICAgcmV0dXJuIE5VTEw7CiB9 CkBAIC02NjAsNyArNzEwLDggQEAgcmV0cnk6CiAgICAgICBnb21wX211dGV4X3VubG9jayAo JmFsbG9jYXRvcl9kYXRhLT5sb2NrKTsKICNlbmRpZgogICAgICAgaWYgKHByZXZfc2l6ZSkK LQluZXdfcHRyID0gcmVhbGxvYyAoZGF0YS0+cHRyLCBuZXdfc2l6ZSk7CisJbmV3X3B0ciA9 IE1FTVNQQUNFX1JFQUxMT0MgKGFsbG9jYXRvcl9kYXRhLT5tZW1zcGFjZSwgZGF0YS0+cHRy LAorCQkJCSAgICBkYXRhLT5zaXplLCBuZXdfc2l6ZSk7CiAgICAgICBlbHNlCiAJbmV3X3B0 ciA9IG1hbGxvYyAobmV3X3NpemUpOwogICAgICAgaWYgKG5ld19wdHIgPT0gTlVMTCkKQEAg LTY5MCw3ICs3NDEsMTAgQEAgcmV0cnk6CiAJICAgJiYgKGZyZWVfYWxsb2NhdG9yX2RhdGEg PT0gTlVMTAogCSAgICAgICB8fCBmcmVlX2FsbG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPT0g fih1aW50cHRyX3QpIDApKQogICAgIHsKLSAgICAgIG5ld19wdHIgPSByZWFsbG9jIChkYXRh LT5wdHIsIG5ld19zaXplKTsKKyAgICAgIG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFj ZSA9IChhbGxvY2F0b3JfZGF0YQorCQkJCQk/IGFsbG9jYXRvcl9kYXRhLT5tZW1zcGFjZQor CQkJCQk6IHByZWRlZmluZWRfYWxsb2NfbWFwcGluZ1thbGxvY2F0b3JdKTsKKyAgICAgIG5l d19wdHIgPSBNRU1TUEFDRV9SRUFMTE9DIChtZW1zcGFjZSwgZGF0YS0+cHRyLCBkYXRhLT5z aXplLCBuZXdfc2l6ZSk7CiAgICAgICBpZiAobmV3X3B0ciA9PSBOVUxMKQogCWdvdG8gZmFp bDsKICAgICAgIHJldCA9IChjaGFyICopIG5ld19wdHIgKyBzaXplb2YgKHN0cnVjdCBvbXBf bWVtX2hlYWRlcik7CkBAIC03MzUsMzIgKzc4OSwzNSBAQCByZXRyeToKICAgcmV0dXJuIHJl dDsKIAogZmFpbDoKLSAgaWYgKGFsbG9jYXRvcl9kYXRhKQorICBpbnQgZmFsbGJhY2sgPSAo YWxsb2NhdG9yX2RhdGEKKwkJICA/IGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaworCQkgIDog YWxsb2NhdG9yID09IG9tcF9kZWZhdWx0X21lbV9hbGxvYworCQkgID8gb21wX2F0dl9udWxs X2ZiCisJCSAgOiBvbXBfYXR2X2RlZmF1bHRfbWVtX2ZiKTsKKyAgc3dpdGNoIChmYWxsYmFj aykKICAgICB7Ci0gICAgICBzd2l0Y2ggKGFsbG9jYXRvcl9kYXRhLT5mYWxsYmFjaykKKyAg ICBjYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6CisgICAgICBpZiAobmV3X2FsaWdubWVu dCA+IHNpemVvZiAodm9pZCAqKQorCSAgfHwgKGFsbG9jYXRvcl9kYXRhCisJICAgICAgJiYg YWxsb2NhdG9yX2RhdGEtPnBvb2xfc2l6ZSA8IH4odWludHB0cl90KSAwKQorCSAgfHwgIWFs bG9jYXRvcl9kYXRhKQogCXsKLQljYXNlIG9tcF9hdHZfZGVmYXVsdF9tZW1fZmI6Ci0JICBp ZiAobmV3X2FsaWdubWVudCA+IHNpemVvZiAodm9pZCAqKQotCSAgICAgIHx8IChhbGxvY2F0 b3JfZGF0YQotCQkgICYmIGFsbG9jYXRvcl9kYXRhLT5wb29sX3NpemUgPCB+KHVpbnRwdHJf dCkgMCkpCi0JICAgIHsKLQkgICAgICBhbGxvY2F0b3IgPSBvbXBfZGVmYXVsdF9tZW1fYWxs b2M7Ci0JICAgICAgZ290byByZXRyeTsKLQkgICAgfQotCSAgLyogT3RoZXJ3aXNlLCB3ZSd2 ZSBhbHJlYWR5IHBlcmZvcm1lZCBkZWZhdWx0IG1lbSBhbGxvY2F0aW9uCi0JICAgICBhbmQg aWYgdGhhdCBmYWlsZWQsIGl0IHdvbid0IHN1Y2NlZWQgYWdhaW4gKHVubGVzcyBpdCB3YXMK LQkgICAgIGludGVybWl0dGVudC4gIFJldHVybiBOVUxMIHRoZW4sIGFzIHRoYXQgaXMgdGhl IGZhbGxiYWNrLiAgKi8KLQkgIGJyZWFrOwotCWNhc2Ugb21wX2F0dl9udWxsX2ZiOgotCSAg YnJlYWs7Ci0JZGVmYXVsdDoKLQljYXNlIG9tcF9hdHZfYWJvcnRfZmI6Ci0JICBnb21wX2Zh dGFsICgiT3V0IG9mIG1lbW9yeSBhbGxvY2F0aW5nICVsdSBieXRlcyIsCi0JCSAgICAgICh1 bnNpZ25lZCBsb25nKSBzaXplKTsKLQljYXNlIG9tcF9hdHZfYWxsb2NhdG9yX2ZiOgotCSAg YWxsb2NhdG9yID0gYWxsb2NhdG9yX2RhdGEtPmZiX2RhdGE7CisJICBhbGxvY2F0b3IgPSBv bXBfZGVmYXVsdF9tZW1fYWxsb2M7CiAJICBnb3RvIHJldHJ5OwogCX0KKyAgICAgIC8qIE90 aGVyd2lzZSwgd2UndmUgYWxyZWFkeSBwZXJmb3JtZWQgZGVmYXVsdCBtZW0gYWxsb2NhdGlv bgorCSBhbmQgaWYgdGhhdCBmYWlsZWQsIGl0IHdvbid0IHN1Y2NlZWQgYWdhaW4gKHVubGVz cyBpdCB3YXMKKwkgaW50ZXJtaXR0ZW50LiAgUmV0dXJuIE5VTEwgdGhlbiwgYXMgdGhhdCBp cyB0aGUgZmFsbGJhY2suICAqLworICAgICAgYnJlYWs7CisgICAgY2FzZSBvbXBfYXR2X251 bGxfZmI6CisgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgIGNhc2Ugb21wX2F0dl9h Ym9ydF9mYjoKKyAgICAgIGdvbXBfZmF0YWwgKCJPdXQgb2YgbWVtb3J5IGFsbG9jYXRpbmcg JWx1IGJ5dGVzIiwKKwkJICAodW5zaWduZWQgbG9uZykgc2l6ZSk7CisgICAgY2FzZSBvbXBf YXR2X2FsbG9jYXRvcl9mYjoKKyAgICAgIGFsbG9jYXRvciA9IGFsbG9jYXRvcl9kYXRhLT5m Yl9kYXRhOworICAgICAgZ290byByZXRyeTsKICAgICB9CiAgIHJldHVybiBOVUxMOwogfQpk aWZmIC0tZ2l0IGEvbGliZ29tcC9jb25maWcvbnZwdHgvYWxsb2NhdG9yLmMgYi9saWJnb21w L2NvbmZpZy9udnB0eC9hbGxvY2F0b3IuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwMDAwMC4uNmJjMmVhNDgwNDMKLS0tIC9kZXYvbnVsbAorKysgYi9saWJnb21wL2Nv bmZpZy9udnB0eC9hbGxvY2F0b3IuYwpAQCAtMCwwICsxLDM3MCBAQAorLyogQ29weXJpZ2h0 IChDKSAyMDIxIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLgorCisgICBUaGlzIGZp bGUgaXMgcGFydCBvZiB0aGUgR05VIE9mZmxvYWRpbmcgYW5kIE11bHRpIFByb2Nlc3Npbmcg TGlicmFyeQorICAgKGxpYmdvbXApLgorCisgICBMaWJnb21wIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBtb2RpZnkgaXQKKyAgIHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVk IGJ5CisgICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAz LCBvciAoYXQgeW91ciBvcHRpb24pCisgICBhbnkgbGF0ZXIgdmVyc2lvbi4KKworICAgTGli Z29tcCBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LCBidXQgV0lUSE9VVCBBTlkKKyAgIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MKKyAgIEZPUiBBIFBB UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yCisgICBtb3JlIGRldGFpbHMuCisKKyAgIFVuZGVyIFNlY3Rpb24gNyBvZiBHUEwgdmVy c2lvbiAzLCB5b3UgYXJlIGdyYW50ZWQgYWRkaXRpb25hbAorICAgcGVybWlzc2lvbnMgZGVz Y3JpYmVkIGluIHRoZSBHQ0MgUnVudGltZSBMaWJyYXJ5IEV4Y2VwdGlvbiwgdmVyc2lvbgor ICAgMy4xLCBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbi4K KworICAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgYW5kCisgICBhIGNvcHkgb2YgdGhlIEdDQyBSdW50aW1lIExp YnJhcnkgRXhjZXB0aW9uIGFsb25nIHdpdGggdGhpcyBwcm9ncmFtOworICAgc2VlIHRoZSBm aWxlcyBDT1BZSU5HMyBhbmQgQ09QWUlORy5SVU5USU1FIHJlc3BlY3RpdmVseS4gIElmIG5v dCwgc2VlCisgICA8aHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzLz4uICAqLworCisvKiBU aGUgbG93LWxhdGVuY3kgYWxsb2NhdG9ycyB1c2Ugc3BhY2UgcmVzZXJ2ZWQgaW4gLnNoYXJl ZCBtZW1vcnkgd2hlbiB0aGUKKyAgIGtlcm5lbCBpcyBsYXVuY2hlZC4gIFRoZSBoZWFwIGlz IGluaXRpYWxpemVkIGluIGdvbXBfbnZwdHhfbWFpbiBhbmQgYWxsCisgICBhbGxvY2F0aW9u cyBhcmUgZm9yZ290dGVuIHdoZW4gdGhlIGtlcm5lbCBleGl0cy4gIEFsbG9jYXRpb25zIHRv IG90aGVyCisgICBtZW1vcnkgc3BhY2VzIGFsbCB1c2UgdGhlIHN5c3RlbSBtYWxsb2Mgc3lz Y2FsbC4KKworICAgVGhlIHJvb3QgaGVhcCBkZXNjcmlwdG9yIGlzIHN0b3JlZCBlbHNld2hl cmUgaW4gc2hhcmVkIG1lbW9yeSwgYW5kIGVhY2gKKyAgIGZyZWUgY2h1bmsgY29udGFpbnMg YSBzaW1pbGFyIGRlc2NyaXB0b3IgZm9yIHRoZSBuZXh0IGZyZWUgY2h1bmsgaW4gdGhlCisg ICBjaGFpbi4KKworICAgVGhlIGRlc2NyaXB0b3IgaXMgdHdvIDE2LWJpdCB2YWx1ZXM6IG9m ZnNldCBhbmQgc2l6ZSwgd2hpY2ggZGVzY3JpYmUgdGhlCisgICBsb2NhdGlvbiBvZiBhIGNo dW5rIG9mIG1lbW9yeSBhdmFpbGFibGUgZm9yIGFsbG9jYXRpb24uIFRoZSBvZmZzZXQgaXMK KyAgIHJlbGF0aXZlIHRvIHRoZSBiYXNlIG9mIHRoZSBoZWFwLiAgVGhlIHNwZWNpYWwgdmFs dWUgMHhmZmZmLCAweGZmZmYKKyAgIGluZGljYXRlcyB0aGF0IHRoZSBoZWFwIGlzIGxvY2tl ZC4gIFRoZSBkZXNjcmlwdG9yIGlzIGVuY29kZWQgaW50byBhCisgICBzaW5nbGUgMzItYml0 IGludGVnZXIgc28gdGhhdCBpdCBtYXkgYmUgZWFzaWx5IGFjY2Vzc2VkIGF0b21pY2FsbHku CisKKyAgIE1lbW9yeSBpcyBhbGxvY2F0ZWQgdG8gdGhlIGZpcnN0IGZyZWUgY2h1bmsgdGhh dCBmaXRzLiAgVGhlIGZyZWUgY2hhaW4KKyAgIGlzIGFsd2F5cyBzdG9yZWQgaW4gb3JkZXIg b2YgdGhlIG9mZnNldCB0byBhc3Npc3QgY29hbGVzY2luZyBhZGphY2VudAorICAgY2h1bmtz LiAgKi8KKworI2luY2x1ZGUgImxpYmdvbXAuaCIKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKwor LyogVGhlcmUgc2hvdWxkIGJlIHNvbWUgLnNoYXJlZCBzcGFjZSByZXNlcnZlZCBmb3IgdXMu ICBUaGVyZSdzIG5vIHdheSB0bworICAgZXhwcmVzcyB0aGlzIG1hZ2ljIGV4dGVybiBzaXpl bGVzcyBhcnJheSBpbiBDIHNvIHVzZSBhc20uICAqLworYXNtICgiLmV4dGVybiAuc2hhcmVk IC51OCBfX252cHR4X2xvd2xhdF9wb29sW107XG4iKTsKKworZXh0ZXJuIHVpbnQzMl90IF9f bnZwdHhfbG93bGF0X2hlYXBfcm9vdCBfX2F0dHJpYnV0ZV9fKChzaGFyZWQsbm9jb21tb24p KTsKKwordHlwZWRlZiB1bmlvbiB7CisgIHVpbnQzMl90IHJhdzsKKyAgc3RydWN0IHsKKyAg ICB1aW50MTZfdCBvZmZzZXQ7CisgICAgdWludDE2X3Qgc2l6ZTsKKyAgfSBkZXNjOworfSBo ZWFwZGVzYzsKKworc3RhdGljIHZvaWQgKgorbnZwdHhfbWVtc3BhY2VfYWxsb2MgKG9tcF9t ZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFjZSwgc2l6ZV90IHNpemUpCit7CisgIGlmIChtZW1z cGFjZSA9PSBvbXBfbG93X2xhdF9tZW1fc3BhY2UpCisgICAgeworICAgICAgY2hhciAqc2hh cmVkX3Bvb2w7CisgICAgICBhc20gKCJjdnRhLnNoYXJlZC51NjRcdCUwLCBfX252cHR4X2xv d2xhdF9wb29sOyIgOiAiPXIiKHNoYXJlZF9wb29sKSk7CisKKyAgICAgIC8qIE1lbW9yeSBp cyBhbGxvY2F0ZWQgaW4gOC1ieXRlIGdyYW51bGFyaXR5LiAgKi8KKyAgICAgIHNpemUgPSAo c2l6ZSArIDcpICYgfjc7CisKKyAgICAgIC8qIEFjcXVpcmUgYSBsb2NrIG9uIHRoZSBsb3ct bGF0ZW5jeSBoZWFwLiAgKi8KKyAgICAgIGhlYXBkZXNjIHJvb3Q7CisgICAgICBkbworCXsK KwkgIHJvb3QucmF3ID0gX19hdG9taWNfZXhjaGFuZ2VfbiAoJl9fbnZwdHhfbG93bGF0X2hl YXBfcm9vdCwKKwkJCQkJICAweGZmZmZmZmZmLCBNRU1NT0RFTF9BQ1FVSVJFKTsKKwkgIGlm IChyb290LnJhdyAhPSAweGZmZmZmZmZmKQorCSAgICBicmVhazsKKwkgIC8qIFNwaW4uICAq LworCX0KKyAgICAgIHdoaWxlICgxKTsKKworICAgICAgLyogV2FsayB0aGUgZnJlZSBjaGFp bi4gICovCisgICAgICBoZWFwZGVzYyBjaHVuayA9IHtyb290LnJhd307CisgICAgICB1aW50 MzJfdCAqcHJldl9jaHVua3B0ciA9IE5VTEw7CisgICAgICB1aW50MzJfdCAqY2h1bmtwdHIg PSAodWludDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKyAgICAg IGhlYXBkZXNjIG9ud2FyZF9jaGFpbiA9IHtjaHVua3B0clswXX07CisgICAgICB3aGlsZSAo Y2h1bmsuZGVzYy5zaXplICE9IDAgJiYgKHVpbnQzMl90KXNpemUgPiBjaHVuay5kZXNjLnNp emUpCisJeworCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsKKwkgIHByZXZfY2h1 bmtwdHIgPSBjaHVua3B0cjsKKwkgIGNodW5rcHRyID0gKHVpbnQzMl90Kikoc2hhcmVkX3Bv b2wgKyBjaHVuay5kZXNjLm9mZnNldCk7CisJICBvbndhcmRfY2hhaW4ucmF3ID0gY2h1bmtw dHJbMF07CisJfQorCisgICAgICB2b2lkICpyZXN1bHQgPSBOVUxMOworICAgICAgaWYgKGNo dW5rLmRlc2Muc2l6ZSAhPSAwKQorCXsKKwkgIC8qIEFsbG9jYXRpb24gc3VjY2Vzc2Z1bC4g ICovCisJICByZXN1bHQgPSBjaHVua3B0cjsKKworCSAgLyogVXBkYXRlIHRoZSBmcmVlIGNo YWluLiAgKi8KKwkgIGhlYXBkZXNjIHN0aWxsZnJlZSA9IHtjaHVuay5yYXd9OworCSAgc3Rp bGxmcmVlLmRlc2Mub2Zmc2V0ICs9IHNpemU7CisJICBzdGlsbGZyZWUuZGVzYy5zaXplIC09 IHNpemU7CisJICB1aW50MzJfdCAqc3RpbGxmcmVlcHRyID0gKHVpbnQzMl90Kikoc2hhcmVk X3Bvb2wKKwkJCQkJICAgICAgICsgc3RpbGxmcmVlLmRlc2Mub2Zmc2V0KTsKKworCSAgaWYg KHN0aWxsZnJlZS5kZXNjLnNpemUgPT0gMCkKKwkgICAgLyogVGhlIHdob2xlIGNodW5rIHdh cyB1c2VkLiAgKi8KKwkgICAgc3RpbGxmcmVlLnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJ ICBlbHNlCisJICAgIC8qIFRoZSBjaHVuayB3YXMgc3BsaXQsIHNvIHJlc3RvcmUgdGhlIG9u d2FyZCBjaGFpbi4gICovCisJICAgIHN0aWxsZnJlZXB0clswXSA9IG9ud2FyZF9jaGFpbi5y YXc7CisKKwkgIC8qIFRoZSBwcmV2aW91cyBmcmVlIHNsb3Qgb3Igcm9vdCBub3cgcG9pbnRz IHRvIHN0aWxsZnJlZS4gICovCisJICBpZiAocHJldl9jaHVua3B0cikKKwkgICAgcHJldl9j aHVua3B0clswXSA9IHN0aWxsZnJlZS5yYXc7CisJICBlbHNlCisJICAgIHJvb3QucmF3ID0g c3RpbGxmcmVlLnJhdzsKKwl9CisKKyAgICAgIC8qIFVwZGF0ZSB0aGUgZnJlZSBjaGFpbiBy b290IGFuZCByZWxlYXNlIHRoZSBsb2NrLiAgKi8KKyAgICAgIF9fYXRvbWljX3N0b3JlX24g KCZfX252cHR4X2xvd2xhdF9oZWFwX3Jvb3QsIHJvb3QucmF3LCBNRU1NT0RFTF9SRUxFQVNF KTsKKyAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorICBlbHNlCisgICAgcmV0dXJuIG1h bGxvYyAoc2l6ZSk7Cit9CisKK3N0YXRpYyB2b2lkICoKK252cHR4X21lbXNwYWNlX2NhbGxv YyAob21wX21lbXNwYWNlX2hhbmRsZV90IG1lbXNwYWNlLCBzaXplX3Qgc2l6ZSkKK3sKKyAg aWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAgICAv KiBNZW1vcnkgaXMgYWxsb2NhdGVkIGluIDgtYnl0ZSBncmFudWxhcml0eS4gICovCisgICAg ICBzaXplID0gKHNpemUgKyA3KSAmIH43OworCisgICAgICB1aW50NjRfdCAqcmVzdWx0ID0g bnZwdHhfbWVtc3BhY2VfYWxsb2MgKG1lbXNwYWNlLCBzaXplKTsKKyAgICAgIGlmIChyZXN1 bHQpCisJLyogSW5saW5lIG1lbXNldCBpbiB3aGljaCB3ZSBrbm93IHNpemUgaXMgYSBtdWx0 aXBsZSBvZiA4LiAgKi8KKwlmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgKHVuc2lnbmVkKXNp emUvODsgaSsrKQorCSAgcmVzdWx0W2ldID0gMDsKKworICAgICAgcmV0dXJuIHJlc3VsdDsK KyAgICB9CisgIGVsc2UKKyAgICByZXR1cm4gY2FsbG9jICgxLCBzaXplKTsKK30KKworc3Rh dGljIHZvaWQKK252cHR4X21lbXNwYWNlX2ZyZWUgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBt ZW1zcGFjZSwgdm9pZCAqYWRkciwgc2l6ZV90IHNpemUpCit7CisgIGlmIChtZW1zcGFjZSA9 PSBvbXBfbG93X2xhdF9tZW1fc3BhY2UpCisgICAgeworICAgICAgY2hhciAqc2hhcmVkX3Bv b2w7CisgICAgICBhc20gKCJjdnRhLnNoYXJlZC51NjRcdCUwLCBfX252cHR4X2xvd2xhdF9w b29sOyIgOiAiPXIiKHNoYXJlZF9wb29sKSk7CisKKyAgICAgIC8qIE1lbW9yeSBpcyBhbGxv Y2F0ZWQgaW4gOC1ieXRlIGdyYW51bGFyaXR5LiAgKi8KKyAgICAgIHNpemUgPSAoc2l6ZSAr IDcpICYgfjc7CisKKyAgICAgIC8qIEFjcXVpcmUgYSBsb2NrIG9uIHRoZSBsb3ctbGF0ZW5j eSBoZWFwLiAgKi8KKyAgICAgIGhlYXBkZXNjIHJvb3Q7CisgICAgICBkbworCXsKKwkgIHJv b3QucmF3ID0gX19hdG9taWNfZXhjaGFuZ2VfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9v dCwKKwkJCQkJICAweGZmZmZmZmZmLCBNRU1NT0RFTF9BQ1FVSVJFKTsKKwkgIGlmIChyb290 LnJhdyAhPSAweGZmZmZmZmZmKQorCSAgICBicmVhazsKKwkgIC8qIFNwaW4uICAqLworCX0K KyAgICAgIHdoaWxlICgxKTsKKworICAgICAgLyogV2FsayB0aGUgZnJlZSBjaGFpbiB0byBm aW5kIHdoZXJlIHRvIGluc2VydCBhIG5ldyBlbnRyeS4gICovCisgICAgICBoZWFwZGVzYyBj aHVuayA9IHtyb290LnJhd30sIHByZXZfY2h1bms7CisgICAgICB1aW50MzJfdCAqcHJldl9j aHVua3B0ciA9IE5VTEwsICpwcmV2cHJldl9jaHVua3B0ciA9IE5VTEw7CisgICAgICB1aW50 MzJfdCAqY2h1bmtwdHIgPSAodWludDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mu b2Zmc2V0KTsKKyAgICAgIGhlYXBkZXNjIG9ud2FyZF9jaGFpbiA9IHtjaHVua3B0clswXX07 CisgICAgICB3aGlsZSAoY2h1bmsuZGVzYy5zaXplICE9IDAgJiYgYWRkciA+ICh2b2lkKilj aHVua3B0cikKKwl7CisJICBwcmV2X2NodW5rLnJhdyA9IGNodW5rLnJhdzsKKwkgIGNodW5r LnJhdyA9IG9ud2FyZF9jaGFpbi5yYXc7CisJICBwcmV2cHJldl9jaHVua3B0ciA9IHByZXZf Y2h1bmtwdHI7CisJICBwcmV2X2NodW5rcHRyID0gY2h1bmtwdHI7CisJICBjaHVua3B0ciA9 ICh1aW50MzJfdCopKHNoYXJlZF9wb29sICsgY2h1bmsuZGVzYy5vZmZzZXQpOworCSAgb253 YXJkX2NoYWluLnJhdyA9IGNodW5rcHRyWzBdOworCX0KKworICAgICAgLyogQ3JlYXRlIHRo ZSBuZXcgY2h1bmsgZGVzY3JpcHRvci4gICovCisgICAgICBoZWFwZGVzYyBuZXdmcmVlY2h1 bms7CisgICAgICBuZXdmcmVlY2h1bmsuZGVzYy5vZmZzZXQgPSAodWludDE2X3QpKCh1aW50 cHRyX3QpYWRkcgorCQkJCQkgICAgLSAodWludHB0cl90KXNoYXJlZF9wb29sKTsKKyAgICAg IG5ld2ZyZWVjaHVuay5kZXNjLnNpemUgPSAodWludDE2X3Qpc2l6ZTsKKworICAgICAgLyog Q29hbGVzY2UgYWRqYWNlbnQgZnJlZSBjaHVua3MuICAqLworICAgICAgaWYgKG5ld2ZyZWVj aHVuay5kZXNjLm9mZnNldCArIHNpemUgPT0gY2h1bmsuZGVzYy5vZmZzZXQpCisJeworCSAg LyogRnJlZSBjaHVuayBmb2xsb3dzLiAgKi8KKwkgIG5ld2ZyZWVjaHVuay5kZXNjLnNpemUg Kz0gY2h1bmsuZGVzYy5zaXplOworCSAgY2h1bmsucmF3ID0gb253YXJkX2NoYWluLnJhdzsK Kwl9CisgICAgICBpZiAocHJldl9jaHVua3B0cikKKwl7CisJICBpZiAocHJldl9jaHVuay5k ZXNjLm9mZnNldCArIHByZXZfY2h1bmsuZGVzYy5zaXplCisJICAgICAgPT0gbmV3ZnJlZWNo dW5rLmRlc2Mub2Zmc2V0KQorCSAgICB7CisJICAgICAgLyogRnJlZSBjaHVuayBwcmVjZWRl cy4gICovCisJICAgICAgbmV3ZnJlZWNodW5rLmRlc2Mub2Zmc2V0ID0gcHJldl9jaHVuay5k ZXNjLm9mZnNldDsKKwkgICAgICBuZXdmcmVlY2h1bmsuZGVzYy5zaXplICs9IHByZXZfY2h1 bmsuZGVzYy5zaXplOworCSAgICAgIGFkZHIgPSBzaGFyZWRfcG9vbCArIHByZXZfY2h1bmsu ZGVzYy5vZmZzZXQ7CisJICAgICAgcHJldl9jaHVua3B0ciA9IHByZXZwcmV2X2NodW5rcHRy OworCSAgICB9CisJfQorCisgICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4gaW4gdGhl IG5ldyBhbmQgcHJldmlvdXMgY2h1bmtzLiAgKi8KKyAgICAgICgodWludDMyX3QqKWFkZHIp WzBdID0gY2h1bmsucmF3OworICAgICAgaWYgKHByZXZfY2h1bmtwdHIpCisJcHJldl9jaHVu a3B0clswXSA9IG5ld2ZyZWVjaHVuay5yYXc7CisgICAgICBlbHNlCisJcm9vdC5yYXcgPSBu ZXdmcmVlY2h1bmsucmF3OworCisgICAgICAvKiBVcGRhdGUgdGhlIGZyZWUgY2hhaW4gcm9v dCBhbmQgcmVsZWFzZSB0aGUgbG9jay4gICovCisgICAgICBfX2F0b21pY19zdG9yZV9uICgm X19udnB0eF9sb3dsYXRfaGVhcF9yb290LCByb290LnJhdywgTUVNTU9ERUxfUkVMRUFTRSk7 CisgICAgfQorICBlbHNlCisgICAgZnJlZSAoYWRkcik7Cit9CisKK3N0YXRpYyB2b2lkICoK K252cHR4X21lbXNwYWNlX3JlYWxsb2MgKG9tcF9tZW1zcGFjZV9oYW5kbGVfdCBtZW1zcGFj ZSwgdm9pZCAqYWRkciwKKwkJCXNpemVfdCBvbGRzaXplLCBzaXplX3Qgc2l6ZSkKK3sKKyAg aWYgKG1lbXNwYWNlID09IG9tcF9sb3dfbGF0X21lbV9zcGFjZSkKKyAgICB7CisgICAgICBj aGFyICpzaGFyZWRfcG9vbDsKKyAgICAgIGFzbSAoImN2dGEuc2hhcmVkLnU2NFx0JTAsIF9f bnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hhcmVkX3Bvb2wpKTsKKworICAgICAgLyog TWVtb3J5IGlzIGFsbG9jYXRlZCBpbiA4LWJ5dGUgZ3JhbnVsYXJpdHkuICAqLworICAgICAg b2xkc2l6ZSA9IChvbGRzaXplICsgNykgJiB+NzsKKyAgICAgIHNpemUgPSAoc2l6ZSArIDcp ICYgfjc7CisKKyAgICAgIGlmIChvbGRzaXplID09IHNpemUpCisJcmV0dXJuIGFkZHI7CisK KyAgICAgIC8qIEFjcXVpcmUgYSBsb2NrIG9uIHRoZSBsb3ctbGF0ZW5jeSBoZWFwLiAgKi8K KyAgICAgIGhlYXBkZXNjIHJvb3Q7CisgICAgICBkbworCXsKKwkgIHJvb3QucmF3ID0gX19h dG9taWNfZXhjaGFuZ2VfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9vdCwKKwkJCQkJICAw eGZmZmZmZmZmLCBNRU1NT0RFTF9BQ1FVSVJFKTsKKwkgIGlmIChyb290LnJhdyAhPSAweGZm ZmZmZmZmKQorCSAgICBicmVhazsKKwkgIC8qIFNwaW4uICAqLworCX0KKyAgICAgIHdoaWxl ICgxKTsKKworICAgICAgLyogV2FsayB0aGUgZnJlZSBjaGFpbi4gICovCisgICAgICBoZWFw ZGVzYyBjaHVuayA9IHtyb290LnJhd307CisgICAgICB1aW50MzJfdCAqcHJldl9jaHVua3B0 ciA9IE5VTEw7CisgICAgICB1aW50MzJfdCAqY2h1bmtwdHIgPSAodWludDMyX3QqKShzaGFy ZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKyAgICAgIGhlYXBkZXNjIG9ud2FyZF9j aGFpbiA9IHtjaHVua3B0clswXX07CisgICAgICB3aGlsZSAoY2h1bmsuZGVzYy5zaXplICE9 IDAgJiYgKHZvaWQqKWNodW5rcHRyIDwgYWRkcikKKwl7CisJICBjaHVuay5yYXcgPSBvbndh cmRfY2hhaW4ucmF3OworCSAgcHJldl9jaHVua3B0ciA9IGNodW5rcHRyOworCSAgY2h1bmtw dHIgPSAodWludDMyX3QqKShzaGFyZWRfcG9vbCArIGNodW5rLmRlc2Mub2Zmc2V0KTsKKwkg IG9ud2FyZF9jaGFpbi5yYXcgPSBjaHVua3B0clswXTsKKwl9CisKKyAgICAgIHZvaWQgKnJl c3VsdCA9IE5VTEw7CisgICAgICBpZiAoc2l6ZSA8IG9sZHNpemUpCisJeworCSAgLyogVGhl IG5ldyBhbGxvY2F0aW9uIGlzIHNtYWxsZXIgdGhhbiB0aGUgb2xkOyB3ZSBjYW4gYWx3YXlz CisJICAgICBzaHJpbmsgYW4gYWxsb2NhdGlvbiBpbiBwbGFjZS4gICovCisJICByZXN1bHQg PSBhZGRyOworCisJICB1aW50MzJfdCAqbm93ZnJlZXB0ciA9ICh1aW50MzJfdCopKGFkZHIg KyBzaXplKTsKKworCSAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluLiAgKi8KKwkgIGhlYXBk ZXNjIG5vd2ZyZWU7CisJICBub3dmcmVlLmRlc2Mub2Zmc2V0ID0gKGNoYXIqKW5vd2ZyZWVw dHIgLSBzaGFyZWRfcG9vbDsKKwkgIG5vd2ZyZWUuZGVzYy5zaXplID0gb2xkc2l6ZSAtIHNp emU7CisKKwkgIGlmIChub3dmcmVlLmRlc2Mub2Zmc2V0ICsgc2l6ZSA9PSBjaHVuay5kZXNj Lm9mZnNldCkKKwkgICAgeworCSAgICAgIC8qIENvYWxlc2NlIGZvbGxvd2luZyBmcmVlIGNo dW5rLiAgKi8KKwkgICAgICBub3dmcmVlLmRlc2Muc2l6ZSArPSBjaHVuay5kZXNjLnNpemU7 CisJICAgICAgbm93ZnJlZXB0clswXSA9IG9ud2FyZF9jaGFpbi5yYXc7CisJICAgIH0KKwkg IGVsc2UKKwkgICAgbm93ZnJlZXB0clswXSA9IGNodW5rLnJhdzsKKworCSAgLyogVGhlIHBy ZXZpb3VzIGZyZWUgc2xvdCBvciByb290IG5vdyBwb2ludHMgdG8gbm93ZnJlZS4gICovCisJ ICBpZiAocHJldl9jaHVua3B0cikKKwkgICAgcHJldl9jaHVua3B0clswXSA9IG5vd2ZyZWUu cmF3OworCSAgZWxzZQorCSAgICByb290LnJhdyA9IG5vd2ZyZWUucmF3OworCX0KKyAgICAg IGVsc2UgaWYgKGNodW5rLmRlc2Muc2l6ZSAhPSAwCisJICAgICAgICYmIChjaGFyICopYWRk ciArIG9sZHNpemUgPT0gKGNoYXIgKiljaHVua3B0cgorCSAgICAgICAmJiBjaHVuay5kZXNj LnNpemUgPj0gc2l6ZS1vbGRzaXplKQorCXsKKwkgIC8qIFRoZSBuZXcgYWxsb2NhdGlvbiBp cyBsYXJnZXIgdGhhbiB0aGUgb2xkLCBhbmQgd2UgZm91bmQgYQorCSAgICAgbGFyZ2UgZW5v dWdoIGZyZWUgYmxvY2sgcmlnaHQgYWZ0ZXIgdGhlIGV4aXN0aW5nIGJsb2NrLAorCSAgICAg c28gd2UgZXh0ZW5kIGludG8gdGhhdCBzcGFjZS4gICovCisJICByZXN1bHQgPSBhZGRyOwor CisJICB1aW50MTZfdCBkZWx0YSA9IHNpemUtb2xkc2l6ZTsKKworCSAgLyogVXBkYXRlIHRo ZSBmcmVlIGNoYWluLiAgKi8KKwkgIGhlYXBkZXNjIHN0aWxsZnJlZSA9IHtjaHVuay5yYXd9 OworCSAgc3RpbGxmcmVlLmRlc2Mub2Zmc2V0ICs9IGRlbHRhOworCSAgc3RpbGxmcmVlLmRl c2Muc2l6ZSAtPSBkZWx0YTsKKwkgIHVpbnQzMl90ICpzdGlsbGZyZWVwdHIgPSAodWludDMy X3QqKShzaGFyZWRfcG9vbAorCQkJCQkgICAgICAgKyBzdGlsbGZyZWUuZGVzYy5vZmZzZXQp OworCisJICBpZiAoc3RpbGxmcmVlLmRlc2Muc2l6ZSA9PSAwKQorCSAgICAvKiBUaGUgd2hv bGUgY2h1bmsgd2FzIHVzZWQuICAqLworCSAgICBzdGlsbGZyZWUucmF3ID0gb253YXJkX2No YWluLnJhdzsKKwkgIGVsc2UKKwkgICAgLyogVGhlIGNodW5rIHdhcyBzcGxpdCwgc28gcmVz dG9yZSB0aGUgb253YXJkIGNoYWluLiAgKi8KKwkgICAgc3RpbGxmcmVlcHRyWzBdID0gb253 YXJkX2NoYWluLnJhdzsKKworCSAgLyogVGhlIHByZXZpb3VzIGZyZWUgc2xvdCBvciByb290 IG5vdyBwb2ludHMgdG8gc3RpbGxmcmVlLiAgKi8KKwkgIGlmIChwcmV2X2NodW5rcHRyKQor CSAgICBwcmV2X2NodW5rcHRyWzBdID0gc3RpbGxmcmVlLnJhdzsKKwkgIGVsc2UKKwkgICAg cm9vdC5yYXcgPSBzdGlsbGZyZWUucmF3OworCX0KKyAgICAgIC8qIEVsc2UgcmVhbGxvYyBp bi1wbGFjZSBoYXMgZmFpbGVkIGFuZCByZXN1bHQgcmVtYWlucyBOVUxMLiAgKi8KKworICAg ICAgLyogVXBkYXRlIHRoZSBmcmVlIGNoYWluIHJvb3QgYW5kIHJlbGVhc2UgdGhlIGxvY2su ICAqLworICAgICAgX19hdG9taWNfc3RvcmVfbiAoJl9fbnZwdHhfbG93bGF0X2hlYXBfcm9v dCwgcm9vdC5yYXcsIE1FTU1PREVMX1JFTEVBU0UpOworCisgICAgICBpZiAocmVzdWx0ID09 IE5VTEwpCisJeworCSAgLyogVGhlIGFsbG9jYXRpb24gY291bGQgbm90IGJlIGV4dGVuZGVk IGluIHBsYWNlLCBzbyB3ZSBzaW1wbHkKKwkgICAgIGFsbG9jYXRlIGZyZXNoIG1lbW9yeSBh bmQgbW92ZSB0aGUgZGF0YS4gIElmIHdlIGNhbid0IGFsbG9jYXRlCisJICAgICBmcm9tIGxv dy1sYXRlbmN5IG1lbW9yeSB0aGVuIHdlIGxlYXZlIHRoZSBvcmlnaW5hbCBhbGxvYWN0aW9u CisJICAgICBpbnRhY3QgYW5kIHJldHVybiBOVUxMLgorCSAgICAgV2UgY291bGQgZG8gYSBm YWxsLWJhY2sgdG8gbWFpbiBtZW1vcnksIGJ1dCB3ZSBkb24ndCBrbm93IHdoYXQKKwkgICAg IHRoZSBmYWxsLWJhY2sgdHJhaXQgc2FpZCB0byBkby4gICovCisJICByZXN1bHQgPSBudnB0 eF9tZW1zcGFjZV9hbGxvYyAobWVtc3BhY2UsIHNpemUpOworCSAgaWYgKHJlc3VsdCAhPSBO VUxMKQorCSAgICB7CisJICAgICAgLyogSW5saW5lIG1lbWNweSBpbiB3aGljaCB3ZSBrbm93 IG9sZHNpemUgaXMgYSBtdWx0aXBsZSBvZiA4LiAgKi8KKwkgICAgICB1aW50NjRfdCAqZnJv bSA9IGFkZHIsICp0byA9IHJlc3VsdDsKKwkgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp IDwgKHVuc2lnbmVkKW9sZHNpemUvODsgaSsrKQorCQl0b1tpXSA9IGZyb21baV07CisKKwkg ICAgICBudnB0eF9tZW1zcGFjZV9mcmVlIChtZW1zcGFjZSwgYWRkciwgb2xkc2l6ZSk7CisJ ICAgIH0KKwl9CisgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyAgZWxzZQorICAgIHJl dHVybiByZWFsbG9jIChhZGRyLCBzaXplKTsKK30KKworI2RlZmluZSBNRU1TUEFDRV9BTExP QyhNRU1TUEFDRSwgU0laRSkgXAorICBudnB0eF9tZW1zcGFjZV9hbGxvYyAoTUVNU1BBQ0Us IFNJWkUpCisjZGVmaW5lIE1FTVNQQUNFX0NBTExPQyhNRU1TUEFDRSwgU0laRSkgXAorICBu dnB0eF9tZW1zcGFjZV9jYWxsb2MgKE1FTVNQQUNFLCBTSVpFKQorI2RlZmluZSBNRU1TUEFD RV9SRUFMTE9DKE1FTVNQQUNFLCBBRERSLCBPTERTSVpFLCBTSVpFKSBcCisgIG52cHR4X21l bXNwYWNlX3JlYWxsb2MgKE1FTVNQQUNFLCBBRERSLCBPTERTSVpFLCBTSVpFKQorI2RlZmlu ZSBNRU1TUEFDRV9GUkVFKE1FTVNQQUNFLCBBRERSLCBTSVpFKSBcCisgIG52cHR4X21lbXNw YWNlX2ZyZWUgKE1FTVNQQUNFLCBBRERSLCBTSVpFKQorCisjaW5jbHVkZSAiLi4vLi4vYWxs b2NhdG9yLmMiCmRpZmYgLS1naXQgYS9saWJnb21wL2NvbmZpZy9udnB0eC90ZWFtLmMgYi9s aWJnb21wL2NvbmZpZy9udnB0eC90ZWFtLmMKaW5kZXggMzEwZWIyODMyOTMuLjYzNzU4NGE3 MGEwIDEwMDY0NAotLS0gYS9saWJnb21wL2NvbmZpZy9udnB0eC90ZWFtLmMKKysrIGIvbGli Z29tcC9jb25maWcvbnZwdHgvdGVhbS5jCkBAIC0zMyw5ICszMywxMyBAQAogCiBzdHJ1Y3Qg Z29tcF90aHJlYWQgKm52cHR4X3RocnMgX19hdHRyaWJ1dGVfXygoc2hhcmVkLG5vY29tbW9u KSk7CiBpbnQgX19nb21wX3RlYW1fbnVtIF9fYXR0cmlidXRlX18oKHNoYXJlZCxub2NvbW1v bikpOwordWludDMyX3QgX19udnB0eF9sb3dsYXRfaGVhcF9yb290IF9fYXR0cmlidXRlX18o KHNoYXJlZCxub2NvbW1vbikpOwogCiBzdGF0aWMgdm9pZCBnb21wX3RocmVhZF9zdGFydCAo c3RydWN0IGdvbXBfdGhyZWFkX3Bvb2wgKik7CiAKKy8qIFRoZXJlIHNob3VsZCBiZSBzb21l IC5zaGFyZWQgc3BhY2UgcmVzZXJ2ZWQgZm9yIHVzLiAgVGhlcmUncyBubyB3YXkgdG8KKyAg IGV4cHJlc3MgdGhpcyBtYWdpYyBleHRlcm4gc2l6ZWxlc3MgYXJyYXkgaW4gQyBzbyB1c2Ug YXNtLiAgKi8KK2FzbSAoIi5leHRlcm4gLnNoYXJlZCAudTggX19udnB0eF9sb3dsYXRfcG9v bFtdO1xuIik7CiAKIC8qIFRoaXMgZXh0ZXJuYWxseSB2aXNpYmxlIGZ1bmN0aW9uIGhhbmRs ZXMgdGFyZ2V0IHJlZ2lvbiBlbnRyeS4gIEl0CiAgICBzZXRzIHVwIGEgcGVyLXRlYW0gdGhy ZWFkIHBvb2wgYW5kIHRyYW5zZmVycyBjb250cm9sIGJ5IGNhbGxpbmcgRk4gKEZOX0RBVEEp CkBAIC02Myw2ICs2NywyNyBAQCBnb21wX252cHR4X21haW4gKHZvaWQgKCpmbikgKHZvaWQg KiksIHZvaWQgKmZuX2RhdGEpCiAgICAgICBudnB0eF90aHJzID0gYWxsb2NhIChudGlkcyAq IHNpemVvZiAoKm52cHR4X3RocnMpKTsKICAgICAgIG1lbXNldCAobnZwdHhfdGhycywgMCwg bnRpZHMgKiBzaXplb2YgKCpudnB0eF90aHJzKSk7CiAKKyAgICAgIC8qIEZpbmQgdGhlIGxv dy1sYXRlbmN5IGhlYXAgZGV0YWlscyAuLi4uICAqLworICAgICAgdWludDMyX3QgKnNoYXJl ZF9wb29sOworICAgICAgdWludDMyX3Qgc2hhcmVkX3Bvb2xfc2l6ZTsKKyAgICAgIGFzbSAo ImN2dGEuc2hhcmVkLnU2NFx0JTAsIF9fbnZwdHhfbG93bGF0X3Bvb2w7IiA6ICI9ciIoc2hh cmVkX3Bvb2wpKTsKKyAgICAgIGFzbSAoIm1vdi51MzJcdCUwLCAlJWR5bmFtaWNfc21lbV9z aXplO1xuIgorCSAgIDogIj1yIihzaGFyZWRfcG9vbF9zaXplKSk7CisKKyAgICAgIC8qIC4u LiBhbmQgaW5pdGlhbGl6ZSBpdCB3aXRoIGFuIGVtcHR5IGZyZWUtY2hhaW4uICAqLworICAg ICAgdW5pb24geworCXVpbnQzMl90IHJhdzsKKwlzdHJ1Y3QgeworCSAgdWludDE2X3Qgb2Zm c2V0OworCSAgdWludDE2X3Qgc2l6ZTsKKwl9IGRlc2M7CisgICAgICB9IHJvb3Q7CisgICAg ICByb290LmRlc2Mub2Zmc2V0ID0gMDsJCSAvKiBUaGUgZmlyc3QgYnl0ZSBpcyBmcmVlLiAg Ki8KKyAgICAgIHJvb3QuZGVzYy5zaXplID0gc2hhcmVkX3Bvb2xfc2l6ZTsgLyogVGhlIHdo b2xlIHNwYWNlIGlzIGZyZWUuICAqLworICAgICAgX19udnB0eF9sb3dsYXRfaGVhcF9yb290 ID0gcm9vdC5yYXc7CisgICAgICBzaGFyZWRfcG9vbFswXSA9IDA7CQkgLyogVGVybWluYXRl IGZyZWUgY2hhaW4uICAqLworCisgICAgICAvKiBJbml0aWFsaXplIHRoZSB0aHJlYWQgcG9v bC4gICovCiAgICAgICBzdHJ1Y3QgZ29tcF90aHJlYWRfcG9vbCAqcG9vbCA9IGFsbG9jYSAo c2l6ZW9mICgqcG9vbCkpOwogICAgICAgcG9vbC0+dGhyZWFkcyA9IGFsbG9jYSAobnRpZHMg KiBzaXplb2YgKCpwb29sLT50aHJlYWRzKSk7CiAgICAgICBmb3IgKHRpZCA9IDA7IHRpZCA8 IG50aWRzOyB0aWQrKykKZGlmZiAtLWdpdCBhL2xpYmdvbXAvcGx1Z2luL3BsdWdpbi1udnB0 eC5jIGIvbGliZ29tcC9wbHVnaW4vcGx1Z2luLW52cHR4LmMKaW5kZXggMGYxNmUxY2YwMGQu Ljc3Yzg1ODczMzVjIDEwMDY0NAotLS0gYS9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHgu YworKysgYi9saWJnb21wL3BsdWdpbi9wbHVnaW4tbnZwdHguYwpAQCAtMzMwLDYgKzMzMCwx MSBAQCBzdHJ1Y3QgcHR4X2RldmljZQogCiBzdGF0aWMgc3RydWN0IHB0eF9kZXZpY2UgKipw dHhfZGV2aWNlczsKIAorLyogT3Blbk1QIGtlcm5lbHMgcmVzZXJ2ZSBhIHNtYWxsIGFtb3Vu dCBvZiAiLnNoYXJlZCIgc3BhY2UgZm9yIHVzZSBieQorICAgb21wX2FsbG9jLiAgVGhlIHNp emUgaXMgY29uZmlndXJlZCB1c2luZyBHT01QX05WUFRYX0xPV0xBVF9QT09MLCBidXQgdGhl CisgICBkZWZhdWx0IGlzIHNldCBoZXJlLiAgKi8KK3N0YXRpYyB1bnNpZ25lZCBsb3dsYXRf cG9vbF9zaXplID0gOCoxMDI0OworCiBzdGF0aWMgaW5saW5lIHN0cnVjdCBudnB0eF90aHJl YWQgKgogbnZwdHhfdGhyZWFkICh2b2lkKQogewpAQCAtMTE5Niw2ICsxMjAxLDIyIEBAIEdP TVBfT0ZGTE9BRF9pbml0X2RldmljZSAoaW50IG4pCiAgICAgICBpbnN0YW50aWF0ZWRfZGV2 aWNlcysrOwogICAgIH0KIAorICBjb25zdCBjaGFyICp2YXJfbmFtZSA9ICJHT01QX05WUFRY X0xPV0xBVF9QT09MIjsKKyAgY29uc3QgY2hhciAqZW52X3ZhciA9IHNlY3VyZV9nZXRlbnYg KHZhcl9uYW1lKTsKKyAgbm90aWZ5X3ZhciAodmFyX25hbWUsIGVudl92YXIpOworCisgIGlm IChlbnZfdmFyICE9IE5VTEwpCisgICAgeworICAgICAgY2hhciAqZW5kcHRyOworICAgICAg dW5zaWduZWQgbG9uZyB2YWwgPSBzdHJ0b3VsIChlbnZfdmFyLCAmZW5kcHRyLCAxMCk7Cisg ICAgICBpZiAoZW5kcHRyID09IE5VTEwgfHwgKmVuZHB0ciAhPSAnXDAnCisJICB8fCBlcnJu byA9PSBFUkFOR0UgfHwgZXJybm8gPT0gRUlOVkFMCisJICB8fCB2YWwgPiBVSU5UX01BWCkK KwlHT01QX1BMVUdJTl9lcnJvciAoIkVycm9yIHBhcnNpbmcgJXMiLCB2YXJfbmFtZSk7Cisg ICAgICBlbHNlCisJbG93bGF0X3Bvb2xfc2l6ZSA9IHZhbDsKKyAgICB9CisKICAgcHRocmVh ZF9tdXRleF91bmxvY2sgKCZwdHhfZGV2X2xvY2spOwogCiAgIHJldHVybiBkZXYgIT0gTlVM TDsKQEAgLTIwMjEsNyArMjA0Miw3IEBAIEdPTVBfT0ZGTE9BRF9ydW4gKGludCBvcmQsIHZv aWQgKnRndF9mbiwgdm9pZCAqdGd0X3ZhcnMsIHZvaWQgKiphcmdzKQogCQkgICAgICIgWyh0 ZWFtczogJXUpLCAxLCAxXSBbKGxhbmVzOiAzMiksICh0aHJlYWRzOiAldSksIDFdXG4iLAog CQkgICAgIF9fRlVOQ1RJT05fXywgZm5fbmFtZSwgdGVhbXMsIHRocmVhZHMpOwogICByID0g Q1VEQV9DQUxMX05PQ0hFQ0sgKGN1TGF1bmNoS2VybmVsLCBmdW5jdGlvbiwgdGVhbXMsIDEs IDEsCi0JCQkgMzIsIHRocmVhZHMsIDEsIDAsIE5VTEwsIE5VTEwsIGNvbmZpZyk7CisJCQkg MzIsIHRocmVhZHMsIDEsIGxvd2xhdF9wb29sX3NpemUsIE5VTEwsIE5VTEwsIGNvbmZpZyk7 CiAgIGlmIChyICE9IENVREFfU1VDQ0VTUykKICAgICBHT01QX1BMVUdJTl9mYXRhbCAoImN1 TGF1bmNoS2VybmVsIGVycm9yOiAlcyIsIGN1ZGFfZXJyb3IgKHIpKTsKIApkaWZmIC0tZ2l0 IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMS5jIGIvbGliZ29t cC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMS5jCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAwLi4wNDk2OGU0YzgzZAotLS0gL2Rldi9udWxsCisrKyBi L2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTEuYwpAQCAtMCwwICsx LDU2IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKKy8qIFRlc3QgdGhhdCBvbXBfYWxsb2Mg cmV0dXJucyB1c2FibGUgbWVtb3J5LiAgKi8KKworI2luY2x1ZGUgPG9tcC5oPgorCisjcHJh Z21hIG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAordGVzdCAoaW50 IG4sIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9t cCB0YXJnZXQgbWFwKHRvOm4pIG1hcCh0bzphbGxvY2F0b3IpCisgIHsKKyAgICBpbnQgKmE7 CisgICAgYSA9IChpbnQgKikgb21wX2FsbG9jKG4qc2l6ZW9mKGludCksIGFsbG9jYXRvcik7 CisKKyAgICAjcHJhZ21hIG9tcCBwYXJhbGxlbAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwg bjsgaSsrKQorICAgICAgYVtpXSA9IGk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47 IGkrKykKKyAgICAgIGlmIChhW2ldICE9IGkpCisJeworCSAgX19idWlsdGluX3ByaW50ZiAo ImRhdGEgbWlzbWF0Y2ggYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOwor CX0KKworICAgIG9tcF9mcmVlKGEsIGFsbG9jYXRvcik7CisgIH0KK30KKworaW50CittYWlu ICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAg dGVzdCAoMTAsIG9tcF9kZWZhdWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbGFy Z2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsK KyAgdGVzdCAoMTAsIG9tcF9oaWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf bG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2Nncm91cF9tZW1fYWxsb2Mp OworICB0ZXN0ICgxMCwgb21wX3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBf dGhyZWFkX21lbV9hbGxvYyk7CisKKyAgLy8gTGFyZ2VyIHRoYW4gbG93LWxhdGVuY3kgbWVt b3J5IGxpbWl0CisgIHRlc3QgKDEwMDAwMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAg dGVzdCAoMTAwMDAwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAw MCwgb21wX2NvbnN0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2hpZ2hfYndf bWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOwor ICB0ZXN0ICgxMDAwMDAsIG9tcF9jZ3JvdXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAw LCBvbXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfdGhyZWFkX21l bV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3Rz dWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0yLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJn b21wLmMvYWxsb2NhdG9ycy0yLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw MDAwMDAuLmE5OGYxYjRjMDVlCi0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3Vp dGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMi5jCkBAIC0wLDAgKzEsNjQgQEAKKy8qIHsgZGct ZG8gcnVuIH0gKi8KKworLyogVGVzdCBjb25jdXJyZW50IGFuZCByZXBlYXRlZCBhbGxvY2F0 aW9ucy4gICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMg ZHluYW1pY19hbGxvY2F0b3JzCisKK3ZvaWQKK3Rlc3QgKGludCBuLCBvbXBfYWxsb2NhdG9y X2hhbmRsZV90IGFsbG9jYXRvcikKK3sKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0IG1hcCh0bzpu KSBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgaW50ICoqYTsKKyAgICBhID0gKGludCAq Kikgb21wX2FsbG9jKG4qc2l6ZW9mKGludCopLCBhbGxvY2F0b3IpOworCisgICAgI3ByYWdt YSBvbXAgcGFyYWxsZWwgZm9yCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuOyBpKyspCisg ICAgICB7CisJLypVc2UgMTB4IHRvIGVuc3VyZSB3ZSBkbyBhY3RpdmF0ZSBsb3ctbGF0ZW5j eSBmYWxsLWJhY2suICAqLworCWFbaV0gPSBvbXBfYWxsb2Moc2l6ZW9mKGludCkqMTAsIGFs bG9jYXRvcik7CisJYVtpXVswXSA9IGk7CisgICAgICB9CisKKyAgICBmb3IgKGludCBpID0g MDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChhW2ldWzBdICE9IGkpCisJeworCSAgX19idWls dGluX3ByaW50ZiAoImRhdGEgbWlzbWF0Y2ggYXQgJWlcbiIsIGkpOworCSAgX19idWlsdGlu X2Fib3J0ICgpOworCX0KKworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZvcgorICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgb21wX2ZyZWUoYVtpXSwgYWxsb2Nh dG9yKTsKKworICAgIG9tcF9mcmVlIChhLCBhbGxvY2F0b3IpOworICB9Cit9CisKK2ludAor bWFpbiAoKQoreworICAvLyBTbWFsbGVyIHRoYW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0 CisgIHRlc3QgKDEwLCBvbXBfZGVmYXVsdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21w X2xhcmdlX2NhcF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21wX2NvbnN0X21lbV9hbGxv Yyk7CisgIHRlc3QgKDEwLCBvbXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwg b21wX2xvd19sYXRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9jZ3JvdXBfbWVtX2Fs bG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwg b21wX3RocmVhZF9tZW1fYWxsb2MpOworCisgIC8vIExhcmdlciB0aGFuIGxvdy1sYXRlbmN5 IG1lbW9yeSBsaW1pdCAob24gYWdncmVnYXRlKQorICB0ZXN0ICgxMDAwLCBvbXBfZGVmYXVs dF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwMDAsIG9tcF9jb25zdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBv bXBfaGlnaF9id19tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfbG93X2xhdF9tZW1f YWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfY2dyb3VwX21lbV9hbGxvYyk7CisgIHRlc3Qg KDEwMDAsIG9tcF9wdGVhbV9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwLCBvbXBfdGhyZWFk X21lbV9hbGxvYyk7CisKKyAgcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rl c3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy0zLmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9s aWJnb21wLmMvYWxsb2NhdG9ycy0zLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMDAwMDAuLjQ1NTE0YzJhMDg4Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0 c3VpdGUvbGliZ29tcC5jL2FsbG9jYXRvcnMtMy5jCkBAIC0wLDAgKzEsNDIgQEAKKy8qIHsg ZGctZG8gcnVuIH0gKi8KKworLyogU3RyZXNzLXRlc3Qgb21wX2FsbG9jL29tcF9tYWxsb2Mg dW5kZXIgY29uY3VycmVuY3kuICAqLworCisjaW5jbHVkZSA8b21wLmg+CisjaW5jbHVkZSA8 c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI3ByYWdtYSBvbXAgcmVxdWlyZXMg ZHluYW1pY19hbGxvY2F0b3JzCisKKyNkZWZpbmUgTiAxMDAwCisKK3ZvaWQKK3Rlc3QgKG9t cF9hbGxvY2F0b3JfaGFuZGxlX3QgYWxsb2NhdG9yKQoreworICAjcHJhZ21hIG9tcCB0YXJn ZXQgbWFwKHRvOmFsbG9jYXRvcikKKyAgeworICAgICNwcmFnbWEgb21wIHBhcmFsbGVsIGZv cgorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgTjsgaSsrKQorICAgICAgZm9yIChpbnQgaiA9 IDA7IGogPCBOOyBqKyspCisJeworCSAgaW50ICpwID0gb21wX2FsbG9jKHNpemVvZihpbnQp LCBhbGxvY2F0b3IpOworCSAgb21wX2ZyZWUocCwgYWxsb2NhdG9yKTsKKwl9CisgIH0KK30K KworaW50CittYWluICgpCit7CisgIC8vIFNtYWxsZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1v cnkgbGltaXQKKyAgdGVzdCAob21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAob21w X2xhcmdlX2NhcF9tZW1fYWxsb2MpOworICB0ZXN0IChvbXBfY29uc3RfbWVtX2FsbG9jKTsK KyAgdGVzdCAob21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX2xvd19sYXRf bWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0IChv bXBfcHRlYW1fbWVtX2FsbG9jKTsKKyAgdGVzdCAob21wX3RocmVhZF9tZW1fYWxsb2MpOwor CisgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29t cC5jL2FsbG9jYXRvcnMtNC5jIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRvcnMtNC5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwLi45ZmE2 YWExNjI0ZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAu Yy9hbGxvY2F0b3JzLTQuYwpAQCAtMCwwICsxLDE5NiBAQAorLyogeyBkZy1kbyBydW4gfSAq LworCisvKiBUZXN0IHRoYXQgbG93LWxhdGVuY3kgZnJlZSBjaGFpbnMgYXJlIHNvdW5kLiAg Ki8KKworI2luY2x1ZGUgPHN0ZGRlZi5oPgorI2luY2x1ZGUgPG9tcC5oPgorCisjcHJhZ21h IG9tcCByZXF1aXJlcyBkeW5hbWljX2FsbG9jYXRvcnMKKwordm9pZAorY2hlY2sgKGludCBj b25kLCBjb25zdCBjaGFyICptc2cpCit7CisgIGlmICghY29uZCkKKyAgICB7CisgICAgICBf X2J1aWx0aW5fcHJpbnRmICgiJXNcbiIsIG1zZyk7CisgICAgICBfX2J1aWx0aW5fYWJvcnQg KCk7CisgICAgfQorfQorCitpbnQKK21haW4gKCkKK3sKKyAgI3ByYWdtYSBvbXAgdGFyZ2V0 CisgIHsKKyAgICAvKiBFbnN1cmUgdGhhdCB0aGUgbWVtb3J5IHdlIGdldCAqaXMqIGxvdy1s YXRlbmN5IHdpdGggYSBudWxsLWZhbGxiYWNrLiAgKi8KKyAgICBvbXBfYWxsb2N0cmFpdF90 IHRyYWl0c1sxXQorICAgICAgPSB7IHsgb21wX2F0a19mYWxsYmFjaywgb21wX2F0dl9udWxs X2ZiIH0gfTsKKyAgICBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGxvd2xhdCA9IG9tcF9pbml0 X2FsbG9jYXRvciAob21wX2xvd19sYXRfbWVtX3NwYWNlLAorCQkJCQkJCTEsIHRyYWl0cyk7 CisKKyAgICBpbnQgc2l6ZSA9IDQ7CisKKyAgICBjaGFyICphID0gb21wX2FsbG9jKHNpemUs IGxvd2xhdCk7CisgICAgY2hhciAqYiA9IG9tcF9hbGxvYyhzaXplLCBsb3dsYXQpOworICAg IGNoYXIgKmMgPSBvbXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpkID0gb21w X2FsbG9jKHNpemUsIGxvd2xhdCk7CisKKyAgICAvKiBUaGVyZSBhcmUgaGVhZGVycyBhbmQg cGFkZGluZyB0byBhY2NvdW50IGZvci4gICovCisgICAgaW50IHNpemUyID0gc2l6ZSArIChi LWEpOworICAgIGludCBzaXplMyA9IHNpemUgKyAoYy1hKTsKKyAgICBpbnQgc2l6ZTQgPSBz aXplICsgKGQtYSkgKyAxMDA7IC8qIFJhbmRvbSBsYXJnZXIgYW1vdW50LiAgKi8KKworICAg IGNoZWNrIChhICE9IE5VTEwgJiYgYiAhPSBOVUxMICYmIGMgIT0gTlVMTCAmJiBkICE9IE5V TEwsCisJICAgIm9tcF9hbGxvYyByZXR1cm5lZCBOVUxMXG4iKTsKKworICAgIG9tcF9mcmVl KGEsIGxvd2xhdCk7CisgICAgY2hhciAqcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsK KyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCByZXVzZSBmaXJzdCBjaHVu ayIpOworCisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChz aXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHJl dXNlIHNlY29uZCBjaHVuayIpOworCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKyAgICBw ID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxv Y2F0ZSBkaWQgbm90IHJldXNlIHRoaXJkIGNodW5rIik7CisKKyAgICBvbXBfZnJlZShhLCBs b3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAo c2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qg Y29hbGVzY2UgZmlyc3QgdHdvIGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0 KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09 IGEsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgxKSIpOworICAgIHAg PSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9j YXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDIpIik7CisKKyAgICBvbXBfZnJlZShi LCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBu b3QgY29hbGVzY2UgbWlkZGxlIHR3byBjaHVua3MiKTsKKworICAgIG9tcF9mcmVlKHAsIGxv d2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDEpIik7Cisg ICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAi YWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpIik7CisKKyAgICBvbXBf ZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgcCA9IG9t cF9hbGxvYyAoc2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRl IGRpZCBub3QgY29hbGVzY2UgZmlyc3QgdHdvIGNodW5rcywgcmV2ZXJzZSBmcmVlIik7CisK KyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxv d2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmly c3QgY2h1bmsgKDEpLCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXpl LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0 IGZpcnN0IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShjLCBs b3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAo c2l6ZTIsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3Qg Y29hbGVzY2Ugc2Vjb25kIHR3byBjaHVua3MsIHJldmVyc2UgZnJlZSIpOworCisgICAgb21w X2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOwor ICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVu ayAoMSksIHJldmVyc2UgZnJlZSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25k IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShhLCBsb3dsYXQp OworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsK KyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBh LCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBmaXJzdCB0aHJlZSBjaHVua3MiKTsKKwor ICAgIG9tcF9mcmVlKHAsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93 bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJz dCBjaHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAg IGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZpcnN0IGNodW5rICgy KSIpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAg PT0gYywgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3QgY2h1bmsgKDMpIik7CisKKyAg ICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAg b21wX2ZyZWUoZCwgbG93bGF0KTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplMywgbG93bGF0 KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBjb2FsZXNjZSBsYXN0 IHRocmVlIGNodW5rcyIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0g b21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0 ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMSkiKTsKKyAgICBwID0gb21wX2FsbG9j IChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90 IHNwbGl0IHNlY29uZCBjaHVuayAoMikiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBs b3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNl Y29uZCBjaHVuayAoMykiKTsKKworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7CisgICAgb21w X2ZyZWUoYiwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShhLCBsb3dsYXQpOworICAgIHAgPSBv bXBfYWxsb2MgKHNpemUzLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJhbGxvY2F0 ZSBkaWQgbm90IGNvYWxlc2NlIGZpcnN0IHRocmVlIGNodW5rcywgcmV2ZXJzZSBmcmVlIik7 CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUs IGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQg Zmlyc3QgY2h1bmsgKDEpLCByZXZlcnNlIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChz aXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQgbm90IHNw bGl0IGZpcnN0IGNodW5rICgyKSwgcmV2ZXJzZSBmcmVlIik7CisgICAgcCA9IG9tcF9hbGxv YyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBjLCAiYWxsb2NhdGUgZGlkIG5v dCBzcGxpdCBmaXJzdCBjaHVuayAoMyksIHJldmVyc2UgZnJlZSIpOworCisgICAgb21wX2Zy ZWUoZCwgbG93bGF0KTsKKyAgICBvbXBfZnJlZShjLCBsb3dsYXQpOworICAgIG9tcF9mcmVl KGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAg Y2hlY2sgKHAgPT0gYiwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2Ugc2Vjb25kIHRocmVl IGNodW5rcywgcmV2ZXJzZSBmcmVlIik7CisKKyAgICBvbXBfZnJlZShwLCBsb3dsYXQpOwor ICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwg ImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgc2Vjb25kIGNodW5rICgxKSwgcmV2ZXJzZSBmcmVl Iik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9 PSBjLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBzZWNvbmQgY2h1bmsgKDIpLCByZXZlcnNl IGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNr IChwID09IGQsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMyksIHJl dmVyc2UgZnJlZSIpOworCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKyAgICBvbXBfZnJl ZShhLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGIsIGxvd2xhdCk7CisgICAgcCA9IG9tcF9h bGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRp ZCBub3QgY29hbGVzY2UgZmlyc3QgdGhyZWUgY2h1bmtzLCBtaXhlZCBmcmVlIik7CisKKyAg ICBvbXBfZnJlZShwLCBsb3dsYXQpOworICAgIHAgPSBvbXBfYWxsb2MgKHNpemUsIGxvd2xh dCk7CisgICAgY2hlY2sgKHAgPT0gYSwgImFsbG9jYXRlIGRpZCBub3Qgc3BsaXQgZmlyc3Qg Y2h1bmsgKDEpLCBtaXhlZCBmcmVlIik7CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZSwgbG93 bGF0KTsKKyAgICBjaGVjayAocCA9PSBiLCAiYWxsb2NhdGUgZGlkIG5vdCBzcGxpdCBmaXJz dCBjaHVuayAoMiksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21wX2FsbG9jIChzaXplLCBs b3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBkaWQgbm90IHNwbGl0IGZp cnN0IGNodW5rICgzKSwgbWl4ZWQgZnJlZSIpOworCisgICAgb21wX2ZyZWUoZCwgbG93bGF0 KTsKKyAgICBvbXBfZnJlZShiLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGMsIGxvd2xhdCk7 CisgICAgcCA9IG9tcF9hbGxvYyAoc2l6ZTMsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0g YiwgImFsbG9jYXRlIGRpZCBub3QgY29hbGVzY2Ugc2Vjb25kIHRocmVlIGNodW5rcywgbWl4 ZWQgZnJlZSIpOworCisgICAgb21wX2ZyZWUocCwgbG93bGF0KTsKKyAgICBwID0gb21wX2Fs bG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJhbGxvY2F0ZSBkaWQg bm90IHNwbGl0IHNlY29uZCBjaHVuayAoMSksIG1peGVkIGZyZWUiKTsKKyAgICBwID0gb21w X2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGMsICJhbGxvY2F0ZSBk aWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMiksIG1peGVkIGZyZWUiKTsKKyAgICBwID0g b21wX2FsbG9jIChzaXplLCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJhbGxvY2F0 ZSBkaWQgbm90IHNwbGl0IHNlY29uZCBjaHVuayAoMyksIG1peGVkIGZyZWUiKTsKKworICAg IG9tcF9mcmVlKGEsIGxvd2xhdCk7CisgICAgb21wX2ZyZWUoYiwgbG93bGF0KTsKKyAgICBv bXBfZnJlZShjLCBsb3dsYXQpOworICAgIG9tcF9mcmVlKGQsIGxvd2xhdCk7CisgICAgcCA9 IG9tcF9hbGxvYyhzaXplNCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAiYWxsb2Nh dGUgZGlkIG5vdCBjb2FsZXNjZSBhbGwgbWVtb3J5Iik7CisgIH0KKworcmV0dXJuIDA7Cit9 CisKZGlmZiAtLWdpdCBhL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3Jz LTUuYyBiL2xpYmdvbXAvdGVzdHN1aXRlL2xpYmdvbXAuYy9hbGxvY2F0b3JzLTUuYwpuZXcg ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMC4uOTY5NDAxMGNmMWYKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy01 LmMKQEAgLTAsMCArMSw2MyBAQAorLyogeyBkZy1kbyBydW4gfSAqLworCisvKiBUZXN0IGNh bGxvYyB3aXRoIG9tcF9hbGxvYy4gICovCisKKyNpbmNsdWRlIDxvbXAuaD4KKworI3ByYWdt YSBvbXAgcmVxdWlyZXMgZHluYW1pY19hbGxvY2F0b3JzCisKK3ZvaWQKK3Rlc3QgKGludCBu LCBvbXBfYWxsb2NhdG9yX2hhbmRsZV90IGFsbG9jYXRvcikKK3sKKyAgI3ByYWdtYSBvbXAg dGFyZ2V0IG1hcCh0bzpuKSBtYXAodG86YWxsb2NhdG9yKQorICB7CisgICAgaW50ICphOwor ICAgIGEgPSAoaW50ICopIG9tcF9jYWxsb2Mobiwgc2l6ZW9mKGludCksIGFsbG9jYXRvcik7 CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChhW2ldICE9 IDApCisJeworCSAgX19idWlsdGluX3ByaW50ZiAoIm1lbW9yeSBub3QgemVyb2VkIGF0ICVp XG4iLCBpKTsKKwkgIF9fYnVpbHRpbl9hYm9ydCAoKTsKKwl9CisKKyAgICAjcHJhZ21hIG9t cCBwYXJhbGxlbAorICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbjsgaSsrKQorICAgICAgYVtp XSA9IGk7CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IG47IGkrKykKKyAgICAgIGlmIChh W2ldICE9IGkpCisJeworCSAgX19idWlsdGluX3ByaW50ZiAoImRhdGEgbWlzbWF0Y2ggYXQg JWlcbiIsIGkpOworCSAgX19idWlsdGluX2Fib3J0ICgpOworCX0KKworICAgIG9tcF9mcmVl KGEsIGFsbG9jYXRvcik7CisgIH0KK30KKworaW50CittYWluICgpCit7CisgIC8vIFNtYWxs ZXIgdGhhbiBsb3ctbGF0ZW5jeSBtZW1vcnkgbGltaXQKKyAgdGVzdCAoMTAsIG9tcF9kZWZh dWx0X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbGFyZ2VfY2FwX21lbV9hbGxvYyk7 CisgIHRlc3QgKDEwLCBvbXBfY29uc3RfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAsIG9tcF9o aWdoX2J3X21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2Mp OworICB0ZXN0ICgxMCwgb21wX2Nncm91cF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMCwgb21w X3B0ZWFtX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7 CisKKyAgLy8gTGFyZ2VyIHRoYW4gbG93LWxhdGVuY3kgbWVtb3J5IGxpbWl0CisgIHRlc3Qg KDEwMDAwMCwgb21wX2RlZmF1bHRfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBf bGFyZ2VfY2FwX21lbV9hbGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2NvbnN0X21lbV9h bGxvYyk7CisgIHRlc3QgKDEwMDAwMCwgb21wX2hpZ2hfYndfbWVtX2FsbG9jKTsKKyAgdGVz dCAoMTAwMDAwLCBvbXBfbG93X2xhdF9tZW1fYWxsb2MpOworICB0ZXN0ICgxMDAwMDAsIG9t cF9jZ3JvdXBfbWVtX2FsbG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfcHRlYW1fbWVtX2Fs bG9jKTsKKyAgdGVzdCAoMTAwMDAwLCBvbXBfdGhyZWFkX21lbV9hbGxvYyk7CisKKyAgcmV0 dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxs b2NhdG9ycy02LmMgYi9saWJnb21wL3Rlc3RzdWl0ZS9saWJnb21wLmMvYWxsb2NhdG9ycy02 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAuLjkwYmY3MzA5NWVm Ci0tLSAvZGV2L251bGwKKysrIGIvbGliZ29tcC90ZXN0c3VpdGUvbGliZ29tcC5jL2FsbG9j YXRvcnMtNi5jCkBAIC0wLDAgKzEsMTE3IEBACisvKiB7IGRnLWRvIHJ1biB9ICovCisKKy8q IFRlc3QgdGhhdCBsb3ctbGF0ZW5jeSByZWFsbG9jIGFuZCBmcmVlIGNoYWlucyBhcmUgc291 bmQuICAqLworCisjaW5jbHVkZSA8c3RkZGVmLmg+CisjaW5jbHVkZSA8b21wLmg+CisKKyNw cmFnbWEgb21wIHJlcXVpcmVzIGR5bmFtaWNfYWxsb2NhdG9ycworCit2b2lkCitjaGVjayAo aW50IGNvbmQsIGNvbnN0IGNoYXIgKm1zZykKK3sKKyAgaWYgKCFjb25kKQorICAgIHsKKyAg ICAgIF9fYnVpbHRpbl9wcmludGYgKCIlc1xuIiwgbXNnKTsKKyAgICAgIF9fYnVpbHRpbl9h Ym9ydCAoKTsKKyAgICB9Cit9CisKK2ludAorbWFpbiAoKQoreworICAjcHJhZ21hIG9tcCB0 YXJnZXQKKyAgeworICAgIC8qIEVuc3VyZSB0aGF0IHRoZSBtZW1vcnkgd2UgZ2V0ICppcyog bG93LWxhdGVuY3kgd2l0aCBhIG51bGwtZmFsbGJhY2suICAqLworICAgIG9tcF9hbGxvY3Ry YWl0X3QgdHJhaXRzWzFdCisgICAgICA9IHsgeyBvbXBfYXRrX2ZhbGxiYWNrLCBvbXBfYXR2 X251bGxfZmIgfSB9OworICAgIG9tcF9hbGxvY2F0b3JfaGFuZGxlX3QgbG93bGF0ID0gb21w X2luaXRfYWxsb2NhdG9yIChvbXBfbG93X2xhdF9tZW1fc3BhY2UsCisJCQkJCQkJMSwgdHJh aXRzKTsKKworICAgIGludCBzaXplID0gMTY7CisKKyAgICBjaGFyICphID0gKGNoYXIgKilv bXBfYWxsb2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpiID0gKGNoYXIgKilvbXBfYWxs b2Moc2l6ZSwgbG93bGF0KTsKKyAgICBjaGFyICpjID0gKGNoYXIgKilvbXBfYWxsb2Moc2l6 ZSwgbG93bGF0KTsKKyAgICBjaGFyICpkID0gKGNoYXIgKilvbXBfYWxsb2Moc2l6ZSwgbG93 bGF0KTsKKworICAgIC8qIFRoZXJlIGFyZSBoZWFkZXJzIGFuZCBwYWRkaW5nIHRvIGFjY291 bnQgZm9yLiAgKi8KKyAgICBpbnQgc2l6ZTIgPSBzaXplICsgKGItYSk7CisgICAgaW50IHNp emUzID0gc2l6ZSArIChjLWEpOworICAgIGludCBzaXplNCA9IHNpemUgKyAoZC1hKSArIDEw MDsgLyogUmFuZG9tIGxhcmdlciBhbW91bnQuICAqLworCisgICAgY2hlY2sgKGEgIT0gTlVM TCAmJiBiICE9IE5VTEwgJiYgYyAhPSBOVUxMICYmIGQgIT0gTlVMTCwKKwkgICAib21wX2Fs bG9jIHJldHVybmVkIE5VTExcbiIpOworCisgICAgY2hhciAqcCA9IG9tcF9yZWFsbG9jIChi LCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2Mg ZGlkIG5vdCByZXVzZSBzYW1lIHNpemUgY2h1bmssIG5vIHNwYWNlIGFmdGVyIik7CisKKyAg ICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgbm8g c3BhY2UgYWZ0ZXIiKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYiwgc2l6ZSwgbG93bGF0 LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ug b3JpZ2luYWwgc2l6ZSBjaHVuaywgbm8gc3BhY2UgYWZ0ZXIiKTsKKworICAgIC8qIE1ha2Ug c3BhY2UgYWZ0ZXIgYi4gICovCisgICAgb21wX2ZyZWUoYywgbG93bGF0KTsKKworICAgIHAg PSBvbXBfcmVhbGxvYyAoYiwgc2l6ZSwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBzaXplIGNodW5rIik7CisKKyAg ICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNo ZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuayIpOwor CisgICAgcCA9IG9tcF9yZWFsbG9jIChiLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAg Y2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNo dW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUrOCwgbG93bGF0LCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGIsICJyZWFsbG9jIGRpZCBub3QgZXh0ZW5kIGluIHBs YWNlIGJ5IGEgbGl0dGxlIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGIsIHNpemUyLCBs b3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgPT0gYiwgInJlYWxsb2MgZGlkIG5vdCBl eHRlbmQgaW50byB3aG9sZSBuZXh0IGNodW5rIik7CisKKyAgICBwID0gb21wX3JlYWxsb2Mg KGIsIHNpemUzLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sgKHAgIT0gYiwgInJlYWxs b2MgZGlkIG5vdCBtb3ZlIGIgZWxzZXdoZXJlIik7CisgICAgb21wX2ZyZWUgKHAsIGxvd2xh dCk7CisKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZSwgbG93bGF0LCBsb3dsYXQp OworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBzaXpl IGNodW5rLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9IG9tcF9yZWFsbG9jIChhLCBz aXplLTgsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBhLCAicmVhbGxvYyBk aWQgbm90IHJldXNlIHNtYWxsZXIgY2h1bmssIGZpcnN0IHBvc2l0aW9uIik7CisKKyAgICBw ID0gb21wX3JlYWxsb2MgKGEsIHNpemUsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAo cCA9PSBhLCAicmVhbGxvYyBkaWQgbm90IHJldXNlIG9yaWdpbmFsIHNpemUgY2h1bmssIGZp cnN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGEsIHNpemUrOCwgbG93 bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGEsICJyZWFsbG9jIGRpZCBub3QgZXh0 ZW5kIGluIHBsYWNlIGJ5IGEgbGl0dGxlLCBmaXJzdCBwb3NpdGlvbiIpOworCisgICAgcCA9 IG9tcF9yZWFsbG9jIChhLCBzaXplMywgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChw ID09IGEsICJyZWFsbG9jIGRpZCBub3QgZXh0ZW5kIGludG8gd2hvbGUgbmV4dCBjaHVuaywg Zmlyc3QgcG9zaXRpb24iKTsKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoYSwgc2l6ZTQsIGxv d2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCAhPSBhLCAicmVhbGxvYyBkaWQgbm90IG1v dmUgYSBlbHNld2hlcmUsIGZpcnN0IHBvc2l0aW9uIik7CisgICAgb21wX2ZyZWUgKHAsIGxv d2xhdCk7CisKKworICAgIHAgPSBvbXBfcmVhbGxvYyAoZCwgc2l6ZSwgbG93bGF0LCBsb3ds YXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9jIGRpZCBub3QgcmV1c2Ugc2FtZSBz aXplIGNodW5rLCBsYXN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQs IHNpemUtOCwgbG93bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9j IGRpZCBub3QgcmV1c2Ugc21hbGxlciBjaHVuaywgbGFzdCBwb3NpdGlvbiIpOworCisgICAg cCA9IG9tcF9yZWFsbG9jIChkLCBzaXplLCBsb3dsYXQsIGxvd2xhdCk7CisgICAgY2hlY2sg KHAgPT0gZCwgInJlYWxsb2MgZGlkIG5vdCByZXVzZSBvcmlnaW5hbCBzaXplIGNodW5rLCBs YXN0IHBvc2l0aW9uIik7CisKKyAgICBwID0gb21wX3JlYWxsb2MgKGQsIHNpemUrOCwgbG93 bGF0LCBsb3dsYXQpOworICAgIGNoZWNrIChwID09IGQsICJyZWFsbG9jIGRpZCBub3QgZXh0 ZW5kIGluIHBsYWNlIGJ5IGQgbGl0dGxlLCBsYXN0IHBvc2l0aW9uIik7CisKKyAgICAvKiBM YXJnZXIgdGhhbiBsb3cgbGF0ZW5jeSBtZW1vcnkuICAqLworICAgIHAgPSBvbXBfcmVhbGxv YyhkLCAxMDAwMDAwMDAsIGxvd2xhdCwgbG93bGF0KTsKKyAgICBjaGVjayAocCA9PSBOVUxM LCAicmVhbGxvYyBkaWQgbm90IGZhaWwgb24gT09NIik7CisgIH0KKworcmV0dXJuIDA7Cit9 CisK --------------MTB5cKoksRV5OCvLNeLbL0zm--