From mboxrd@z Thu Jan 1 00:00:00 1970 From: Ben Widawsky Subject: =?utf-8?q?=5BPATCH_10/10=5D_debugging=3A_shader_debug?= =?utf-8?q?ging?= Date: Sun, 17 Jul 2011 16:25:48 -0700 Message-ID: <1310945148-6777-11-git-send-email-ben@bwidawsk.net> References: <1310945148-6777-1-git-send-email-ben@bwidawsk.net> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from cloud01.chad-versace.us (184-106-247-128.static.cloud-ips.com [184.106.247.128]) by gabe.freedesktop.org (Postfix) with ESMTP id B8A139E78B for ; Sun, 17 Jul 2011 16:26:09 -0700 (PDT) In-Reply-To: <1310945148-6777-1-git-send-email-ben@bwidawsk.net> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org Errors-To: intel-gfx-bounces+gcfxdi-intel-gfx=m.gmane.org@lists.freedesktop.org To: intel-gfx@lists.freedesktop.org Cc: Ben Widawsky List-Id: intel-gfx@lists.freedesktop.org aGlnaCBsZXZlbCBzdW1tYXJ5IG9mIHRoZSBmaWxlczoKICAqIGRlYnVnX3JkYXRhIC0gZ2V0IGN1 cnJlbnQgc3RhdGUgZnJvbSBkZWJ1ZyByZWdpc3RlcnMuIEhlbHBmdWwKICAgIHdoZW4gZGV2ZWxv cGluZyB0aGUgZGVidWdnZXIsIGFuZCBjb3VsZCBzZXJ2ZSBzb21lIHB1cnBvc2UgaW4gdGhlCiAg ICBmdXR1cmUuCiAgKiBldWRiIC0gdGhlIGRlYnVnZ2VyIGl0c2VsZgogICogZXZpY3Rpb25fbWFj cm8gLSBnZW5lcmF0ZSB0aGUgcHJvcGVyIG1hY3JvIHRvIGZsdXNoIHRoZSBFVSByZW5kZXIKICAg IGNhY2hlIHVudGlsIEkgZ2V0IGNvbnRyb2wgZmxvdyB3b3JraW5nCiAgKiBwcmVfY3BwIC0gYW4g ZXZhbHVhdGluZyBjIHByZXByb2Nlc3NlciBsaWtlIHRoaW5nLCB0byBiZSB1c2VkIGJlZm9yZQog ICAgY3BwCiAgKiBzciAtIHRoZSBzeXN0ZW0gcm91dGluZSwgZXhjZXB0aW9uIGhhbmRsZXIgd2hp Y2ggcnVucyBvbiB0aGUgRVUKICAqIHRlc3QgLSBhIHZlcnkgYmFzaWMgdGVzdCBzeXN0ZW0gcm91 dGluZQogICogZGVidWcuaAoKU2lnbmVkLW9mZi1ieTogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3 c2submV0PgotLS0KIGNvbmZpZ3VyZS5hYyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAg ICAxICsKIGRlYnVnZ2VyL01ha2VmaWxlLmFtICAgICAgICAgICAgICAgICAgICAgfCAgIDEyICsK IGRlYnVnZ2VyL2RlYnVnX3JkYXRhLmMgICAgICAgICAgICAgICAgICAgfCAgMTQxICsrKysrKysK IGRlYnVnZ2VyL2V1ZGIuYyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgNjA0ICsrKysrKysr KysrKysrKysrKysrKysrKysrKysrKwogZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvTWFrZWZpbGUg ICAgICAgICB8ICAgODQgKysrKwogZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvZXZpY3Rpb25fbWFj cm8uYyB8ICAgNDggKysrCiBkZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5ICAgICAg IHwgIDEyMyArKysrKysKIGRlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YSAgICAgICAgICAg fCAgMjc3ICsrKysrKysrKysrKysrCiBkZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS90ZXN0Lmc0YSAg ICAgICAgIHwgICA2NCArKysrCiBsaWIvZGVidWcuaCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHwgICA5MiArKysrKwogMTAgZmlsZXMgY2hhbmdlZCwgMTQ0NiBpbnNlcnRpb25zKCspLCAw IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZS5hYyBiL2NvbmZpZ3VyZS5hYwpp bmRleCA0ZWIxYzQ4Li5kMmIzMGRjIDEwMDY0NAotLS0gYS9jb25maWd1cmUuYWMKKysrIGIvY29u ZmlndXJlLmFjCkBAIC05OCw1ICs5OCw2IEBAIEFDX0NPTkZJR19GSUxFUyhbCiAJc2NyaXB0cy9N YWtlZmlsZQogCXRlc3RzL01ha2VmaWxlCiAJdG9vbHMvTWFrZWZpbGUKKwlkZWJ1Z2dlci9NYWtl ZmlsZQogXSkKIEFDX09VVFBVVApkaWZmIC0tZ2l0IGEvZGVidWdnZXIvTWFrZWZpbGUuYW0gYi9k ZWJ1Z2dlci9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l ZmY0ZTJkCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdnZXIvTWFrZWZpbGUuYW0KQEAgLTAsMCAr MSwxMiBAQAorU1VCRElSUz1zeXN0ZW1fcm91dGluZQorCitiaW5fUFJPR1JBTVMgPSBcCisJZXVk YiBcCisJZGVidWdfcmRhdGEgXAorCSQoTlVMTCkKKworTERBREQgPSAuLi9saWIvbGliaW50ZWxf dG9vbHMubGEgJChEUk1fTElCUykgJChQQ0lBQ0NFU1NfTElCUykKKworQU1fQ0ZMQUdTID0gJChE Uk1fQ0ZMQUdTKSAkKFBDSUFDQ0VTU19DRkxBR1MpICQoV0FSTl9DRkxBR1MpIFwKKwktSSQoc3Jj ZGlyKS8uLiBcCisJLUkkKHNyY2RpcikvLi4vbGliCmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9kZWJ1 Z19yZGF0YS5jIGIvZGVidWdnZXIvZGVidWdfcmRhdGEuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwLi5mN2RjNDI0Ci0tLSAvZGV2L251bGwKKysrIGIvZGVidWdnZXIvZGVidWdf cmRhdGEuYwpAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDExIEludGVs IENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBv ZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0 d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiks CisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRp bmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5 LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxs IGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRo ZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xs b3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQg dGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgp IHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMg b2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFT IElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElF RCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFO VEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5G UklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdI VCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBM SUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVS V0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUg U09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJF LgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5uZXQ+ CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKyNpbmNsdWRlIDxzdGRpby5oPgorI2lu Y2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUgImludGVsX2dwdV90b29scy5oIgorCitzdHJ1Y3Qg ZXVfcmRhdGEgeworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ4X3Qgc2VuZGNfZGVwIDog MTsKKwkJCXVpbnQ4X3Qgc3doX2RlcCA6IDE7CisJCQl1aW50OF90IHB3Y19kZXAgOiAxOworCQkJ dWludDhfdCBuMl9kZXAgOiAxOworCQkJdWludDhfdCBuMV9kZXAgOiAxOworCQkJdWludDhfdCBu MF9kZXAgOiAxOworCQkJdWludDhfdCBmbGFnMV9kZXAgOiAxOworCQkJdWludDhfdCBmbGFnMF9k ZXAgOiAxOworCQkJdWludDhfdCBpbmR4X2RlcCA6IDE7CisJCQl1aW50OF90IG1yZl9kZXAgOiAx OworCQkJdWludDhfdCBkc3RfZGVwIDogMTsKKwkJCXVpbnQ4X3Qgc3JjMl9kZXAgOiAxOworCQkJ dWludDhfdCBzcmMxX2RlcCA6IDE7CisJCQl1aW50OF90IHNyYzBfZGVwIDogMTsKKwkJCXVpbnQ4 X3QgbXBfZGVwX3BpbiA6IDE7CisJCQl1aW50OF90IHNwX2RlcF9waW4gOiAxOworCQkJdWludDhf dCBmZnRpZCA6IDg7CisJCQl1aW50OF90IGZmaWQgOiA0OworCQkJdWludDhfdCBpbnN0cnVjdGlv bl92YWxpZCA6IDE7CisJCQl1aW50OF90IHRocmVhZF9zdGF0dXMgOiAzOworCQl9OworCQl1aW50 MzJfdCBkd29yZDsKKwl9IHVkMDsKKworCXVuaW9uIHsKKwkJc3RydWN0IHsKKwkJCXVpbnQ4X3Qg bXJmX2FkZHIgOiA0OworCQkJdWludDhfdCBkc3RfYWRkciA6IDc7CisJCQl1aW50OF90IHNyYzJf YWRkciA6IDc7CisJCQl1aW50OF90IHNyYzFfYWRkciA6IDc7CisJCQl1aW50OF90IHNyYzBfYWRk ciA6IDc7CisJCX07CisJCXVpbnQzMl90IGR3b3JkOworCX0gdWQxOworCisJdW5pb24geworCQlz dHJ1Y3QgeworCQkJdWludDE2X3QgZXhpcCA6IDEyOworCQkJdWludDhfdCBvcGNvZGUgOiA3Owor CQkJdWludDhfdCBwd2MgOiA4OworCQkJdWludDhfdCBpbnN0cnVjdGlvbl92YWxpZCA6IDE7CisJ CQl1aW50OF90IG1ieiA6IDQ7CisJCX07CisJCXVpbnQzMl90IGR3b3JkOworCX0gdWQyOworfTsK KworY29uc3QgY2hhciAqdGhyZWFkX3N0YXR1c1tdID0gCisJeyJJTlZBTElEIiwgImludmFsaWQv bm8gdGhyZWFkIiwgInN0YW5kYnkgKGRlcGVuZGVuY3kpIiwgIklOVkFMSUQiLCAiRXhlY3V0aW5n IiwKKwkgIklOVkFMSUQiICwgIklOVkFMSUQiICwgIklOVkFMSUQifTsKKworc3RhdGljIHN0cnVj dCBldV9yZGF0YQorY29sbGVjdF9yZGF0YShpbnQgZXUsIGludCB0aWQpIHsKKwlzdHJ1Y3QgZXVf cmRhdGEgcmRhdGE7CisKKwlpbnRlbF9yZWdpc3Rlcl93cml0ZSgweDc4MDAsIGV1IDw8IDE2IHwg KDMgKiB0aWQpIDw8IDgpOworCXJkYXRhLnVkMC5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQo MHg3ODQwKTsKKworCWludGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAoMyAq IHRpZCArIDEpIDw8IDgpOworCXJkYXRhLnVkMS5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQo MHg3ODQwKTsKKworCWludGVsX3JlZ2lzdGVyX3dyaXRlKDB4NzgwMCwgZXUgPDwgMTYgfCAoMyAq IHRpZCArIDIpIDw8IDgpOworCXJkYXRhLnVkMi5kd29yZCA9IGludGVsX3JlZ2lzdGVyX3JlYWQo MHg3ODQwKTsKKworCXJldHVybiByZGF0YTsKK30KK3N0YXRpYyB2b2lkCitwcmludF9yZGF0YShz dHJ1Y3QgZXVfcmRhdGEgcmRhdGEpIHsKKwlwcmludGYoIlx0JXNcbiIsIHRocmVhZF9zdGF0dXNb cmRhdGEudWQwLnRocmVhZF9zdGF0dXNdKTsKKwlwcmludGYoIlx0bjFfZGVwOiAlZFxuIiwgcmRh dGEudWQwLm4xX2RlcCk7CisJcHJpbnRmKCJcdHB3Y19kZXA6ICVkXG4iLCByZGF0YS51ZDAucHdj X2RlcCk7CisJcHJpbnRmKCJcdHN3aF9kZXA6ICVkXG4iLCByZGF0YS51ZDAuc3doX2RlcCk7CisJ cHJpbnRmKCJcdHNvdXJjZSAwICV4XG4iLCByZGF0YS51ZDEuc3JjMF9hZGRyKTsKKwlwcmludGYo Ilx0c291cmNlIDEgJXhcbiIsIHJkYXRhLnVkMS5zcmMxX2FkZHIpOworCXByaW50ZigiXHRzb3Vy Y2UgMiAleFxuIiwgcmRhdGEudWQxLnNyYzJfYWRkcik7CisJcHJpbnRmKCJcdGRlc3QgICV4XG4i LCByZGF0YS51ZDEuZHN0X2FkZHIpOworCXByaW50ZigiXHRtcmYgICV4XG4iLCByZGF0YS51ZDEu bXJmX2FkZHIpOworCXByaW50ZigiXHRJUDogJXhcbiIsIHJkYXRhLnVkMi5leGlwKTsKKwlwcmlu dGYoIlx0b3Bjb2RlOiAleFxuIiwgcmRhdGEudWQyLm9wY29kZSk7Cit9CisKK3N0YXRpYyB2b2lk CitmaW5kX3N0dWNrX3RocmVhZHModm9pZCkKK3sKKwlpbnQgaSwgajsKKwlmb3IgKGkgPSAwOyBp IDwgMTU7IGkrKykKKwkJZm9yIChqID0gMDsgaiA8IDU7IGorKykgeworCQkJc3RydWN0IGV1X3Jk YXRhIHJkYXRhOworCQkJcmRhdGEgPSBjb2xsZWN0X3JkYXRhKGksIGopOworCQkJaWYgKHJkYXRh LnVkMC50aHJlYWRfc3RhdHVzID09IDIgfHwKKwkJCSAgICByZGF0YS51ZDAudGhyZWFkX3N0YXR1 cyA9PSA0KSB7CisJCQkJcHJpbnRmKCIlZCAlZDpcbiIsIGksIGopOworCQkJCXByaW50X3JkYXRh KHJkYXRhKTsKKwkJCX0KKwl9Cit9CisKK2ludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10p IHsKKwlzdHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldjsKKwlwY2lfZGV2ID0gaW50ZWxfZ2V0X3Bj aV9kZXZpY2UoKTsKKworCWludGVsX3JlZ2lzdGVyX2FjY2Vzc19pbml0KHBjaV9kZXYsIDEpOwor CWZpbmRfc3R1Y2tfdGhyZWFkcygpOworLy8JY29sbGVjdF9yZGF0YShhdG9pKGFyZ3ZbMV0pLCBh dG9pKGFyZ3ZbMl0pKTsKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL2V1ZGIu YyBiL2RlYnVnZ2VyL2V1ZGIuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5l NDI0MDU5Ci0tLSAvZGV2L251bGwKKysrIGIvZGVidWdnZXIvZXVkYi5jCkBAIC0wLDAgKzEsNjA0 IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQ ZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNv biBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRv Y3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNv ZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24K KyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0 cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2Fy ZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJu aXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoK KyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNl IChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4g YWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgor ICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZ IE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBM SU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZP UiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBB TiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9N LCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9S IE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAq ICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KKyAqCisgKiBOb3RlczoKKyAqCisg Ki8KKworI2luY2x1ZGUgPHNpZ25hbC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorI2luY2x1ZGUg PGZjbnRsLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5j bHVkZSA8c3RyaW5ncy5oPgorI2luY2x1ZGUgPGFzc2VydC5oPgorI2luY2x1ZGUgPHN5cy90eXBl cy5oPgorI2luY2x1ZGUgPHN5cy9zdGF0Lmg+CisjaW5jbHVkZSA8c3lzL21tYW4uaD4KKyNpbmNs dWRlIDxzeXMvdW4uaD4KKyNpbmNsdWRlIDxzeXMvc29ja2V0Lmg+CisjaW5jbHVkZSAiZHJtLmgi CisjaW5jbHVkZSAiaTkxNV9kcm0uaCIKKyNpbmNsdWRlICJkcm10ZXN0LmgiCisjaW5jbHVkZSAi aW50ZWxfY2hpcHNldC5oIgorI2luY2x1ZGUgImludGVsX2J1Zm1nci5oIgorI2luY2x1ZGUgImlu dGVsX2dwdV90b29scy5oIgorI2luY2x1ZGUgImludGVsX2JhdGNoYnVmZmVyLmgiCisjaW5jbHVk ZSAiaW50ZWxfZGVidWcuaCIKKyNpbmNsdWRlICJkZWJ1Zy5oIgorCisjZGVmaW5lIEVVX0FUVAkJ MHg3ODEwCisjZGVmaW5lIEVVX0FUVF9DTFIJMHg3ODMwCisKKyNkZWZpbmUgUlNWRF9FVSAtMQor I2RlZmluZSBSU1ZEX1RIUkVBRCAtMQorI2RlZmluZSBSU1ZEX0lEIEVVSUQoLTEsIC0xLCAtMSkK KworZW51bSB7CisJRUJBRF9TSE1FTSwKKwlFQkFEX1BST1RPQ09MLAorCUVCQURfTUFHSUMsCisJ RUJBRF9XUklURQorfTsKKworc3RydWN0IGRlYnVnZ2VlIHsKKwlpbnQgZXVpZDsKKwlpbnQgdGlk OworCWludCBmZDsKKwlpbnQgY2xyOworCXVpbnQzMl90IHJlZzsKK307CisKK3N0cnVjdCBkZWJ1 Z2dlciB7CisJc3RydWN0IGRlYnVnZ2VlICpkZWJ1Z2dlZXM7CisJaW50IG51bV90aHJlYWRzOwor CWludCByZWFsX251bV90aHJlYWRzOworCWludCB0aHJlYWRzX3Blcl9ldTsKK30gKmV1X2luZm87 CisKK2RybV9pbnRlbF9idWZtZ3IgKmJ1Zm1ncjsKK3N0cnVjdCBpbnRlbF9iYXRjaGJ1ZmZlciAq YmF0Y2g7Citkcm1faW50ZWxfYm8gKnNjcmF0Y2hfYm87CisKK2ludCBoYW5kbGU7CitpbnQgZHJt X2ZkOworaW50IGRlYnVnX2ZkID0gMDsKK2NvbnN0IGNoYXIgKmRlYnVnX2ZpbGUgPSAiZHVtcF9k ZWJ1Zy5iaW4iOworaW50IGRlYnVnOworaW50IGNsZWFyX3dhaXRzOworaW50IHNodXR0aW5nX2Rv d24gPSAwOworc3RydWN0IGludGVsX2RlYnVnX2hhbmRzaGFrZSBkaDsKK2ludCBmb3JjZV9jbGVh ciA9IDA7Cit1aW50MzJfdCBvbGRfdGRfY3RsOworCisvKgorICogVGhlIGRvY3MgYXJlIHdyb25n IGFib3V0IHRoZSBhdHRlbnRpb24gY2xlYXIgYml0cy4gVGhlIGNsZWFyIGJpdHMgYXJlCisgKiBw cm92aWRlZCBhcyBwYXJ0IG9mIHRoZSBzdHJ1Y3R1cmUgaW4gY2FzZSB0aGV5IGNoYW5nZSBpbiBm dXR1cmUgZ2VuZXJhdGlvbnMuCisgKi8KKyNkZWZpbmUgRVVJRChldSwgdGQsIGNsZWFyKSBcCisJ eyAuZXVpZCA9IGV1LCAudGlkID0gdGQsIC5yZWcgPSBFVV9BVFQsIC5mZCA9IC0xLCAuY2xyID0g Y2xlYXIgfQorI2RlZmluZSBFVUlEMihldSwgdGQsIGNsZWFyKSBcCisJeyAuZXVpZCA9IGV1LCAu dGlkID0gdGQsIC5yZWcgPSBFVV9BVFQgKyA0LCAuZmQgPSAtMSwgLmNsciA9IGNsZWFyIH0KK3N0 cnVjdCBkZWJ1Z2dlZSBndDFfZGVidWdfaWRzW10gPSB7CisJUlNWRF9JRCwgUlNWRF9JRCwKKwlS U1ZEX0lELCBFVUlEKDYsIDMsIDI4KSwgRVVJRCg2LCAyLCAyNyksIEVVSUQoNiwgMSwgMjYpLCBF VUlEKDYsIDAsIDI1KSwKKwlSU1ZEX0lELCBFVUlEKDUsIDMsIDIzKSwgRVVJRCg1LCAyLCAyMiks IEVVSUQoNSwgMSwgMjEpLCBFVUlEKDUsIDAsIDIwKSwKKwlSU1ZEX0lELCBFVUlEKDQsIDMsIDE4 KSwgRVVJRCg0LCAyLCAxNyksIEVVSUQoNCwgMSwgMTYpLCBFVUlEKDQsIDAsIDE1KSwKKwlSU1ZE X0lELCBFVUlEKDIsIDMsIDEzKSwgRVVJRCgyLCAyLCAxMiksIEVVSUQoMiwgMSwgMTEpLCBFVUlE KDIsIDAsIDEwKSwKKwlSU1ZEX0lELCBFVUlEKDEsIDMsIDgpLCBFVUlEKDEsIDIsIDcpLCBFVUlE KDEsIDEsIDYpLCBFVUlEKDEsIDAsIDUpLAorCVJTVkRfSUQsIEVVSUQoMCwgMywgMyksIEVVSUQo MCwgMiwgMiksIEVVSUQoMCwgMSwgMSksIEVVSUQoMCwgMCwgMCkKK307CisKK3N0cnVjdCBkZWJ1 Z2dlZSBndDJfZGVidWdfaWRzW10gPSB7CisJRVVJRCg4LCAxLCAzMSksIEVVSUQoOCwgMCwgMzAp LAorCUVVSUQoNiwgNCwgMjkpLCBFVUlEKDYsIDMsIDI4KSwgRVVJRCg2LCAyLCAyNyksIEVVSUQo NiwgMSwgMjYpLCBFVUlEKDYsIDAsIDI1KSwKKwlFVUlEKDUsIDQsIDI0KSwgRVVJRCg1LCAzLCAy MyksIEVVSUQoNSwgMiwgMjIpLCBFVUlEKDUsIDEsIDIxKSwgRVVJRCg1LCAwLCAyMCksCisJRVVJ RCg0LCA0LCAxOSksIEVVSUQoNCwgMywgMTgpLCBFVUlEKDQsIDIsIDE3KSwgRVVJRCg0LCAxLCAx NiksIEVVSUQoNCwgMCwgMTUpLAorCUVVSUQoMiwgNCwgMTQpLCBFVUlEKDIsIDMsIDEzKSwgRVVJ RCgyLCAyLCAxMiksIEVVSUQoMiwgMSwgMTEpLCBFVUlEKDIsIDAsIDEwKSwKKwlFVUlEKDEsIDQs IDkpLCBFVUlEKDEsIDMsIDgpLCBFVUlEKDEsIDIsIDcpLCBFVUlEKDEsIDEsIDYpLCBFVUlEKDEs IDAsIDUpLAorCUVVSUQoMCwgNCwgNCksIEVVSUQoMCwgMywgMyksIEVVSUQoMCwgMiwgMiksIEVV SUQoMCwgMSwgMSksIEVVSUQoMCwgMCwgMCksCisJUlNWRF9JRCwgUlNWRF9JRCwgUlNWRF9JRCwg UlNWRF9JRCwKKwlFVUlEMigxNCwgNCwgMjcpLCBFVUlEMigxNCwgMywgMjYpLCBFVUlEMigxNCwg MiwgMjUpLCBFVUlEMigxNCwgMSwgMjQpLCBFVUlEMigxNCwgMCwgMjMpLAorCUVVSUQyKDEzLCA0 LCAyMiksIEVVSUQyKDEzLCAzLCAyMSksIEVVSUQyKDEzLCAyLCAyMCksIEVVSUQyKDEzLCAxLCAx OSksIEVVSUQyKDEzLCAwLCAxOCksCisJRVVJRDIoMTIsIDQsIDE3KSwgRVVJRDIoMTIsIDMsIDE2 KSwgRVVJRDIoMTIsIDIsIDE1KSwgRVVJRDIoMTIsIDEsIDE0KSwgRVVJRDIoMTIsIDAsIDEzKSwK KwlFVUlEMigxMCwgNCwgMTIpLCBFVUlEMigxMCwgMywgMTEpLCBFVUlEMigxMCwgMiwgMTApLCBF VUlEMigxMCwgMSwgOSksIEVVSUQyKDEwLCAwLCA4KSwKKwlFVUlEMig5LCA0LCA3KSwgRVVJRDIo OSwgMywgNiksIEVVSUQyKDksIDIsIDUpLCBFVUlEMig5LCAxLCA0KSwgRVVJRDIoOSwgMCwgMyks CisJRVVJRDIoOCwgNCwgMiksIEVVSUQyKDgsIDMsIDEpLCBFVUlEMig4LCAyLCAwKQorfTsKKwor c3RydWN0IGRlYnVnZ2VyIGd0MSA9IHsKKwkuZGVidWdnZWVzID0gZ3QxX2RlYnVnX2lkcywKKwku bnVtX3RocmVhZHMgPSAzMiwKKwkucmVhbF9udW1fdGhyZWFkcyA9IDI0LAorCS50aHJlYWRzX3Bl cl9ldSA9IDQKK307CisKK3N0cnVjdCBkZWJ1Z2dlciBndDIgPSB7CisJLmRlYnVnZ2VlcyA9IGd0 Ml9kZWJ1Z19pZHMsCisJLm51bV90aHJlYWRzID0gNjQsCisJLnJlYWxfbnVtX3RocmVhZHMgPSA2 MCwKKwkudGhyZWFkc19wZXJfZXUgPSA1Cit9OworCitzdGF0aWMgdm9pZAorZHVtcF9kZWJ1Zyh2 b2lkICpidWYsIHNpemVfdCBjb3VudCkgeworCWlmICghZGVidWdfZmQpCisJCWRlYnVnX2ZkID0g b3BlbihkZWJ1Z19maWxlLCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DLCBTX0lSV1hPKTsK KworCXdyaXRlKGRlYnVnX2ZkLCBidWYsIGNvdW50KTsKK30KKworc3RhdGljIHZvbGF0aWxlIHZv aWQgKgorbWFwX2RlYnVnX2J1ZmZlcih2b2lkKSB7CisJaW50IHJldDsKKworCXJldCA9IGRybV9p bnRlbF9ib19tYXAoc2NyYXRjaF9ibywgMCk7CisJYXNzZXJ0KHJldCA9PSAwKTsKKwlyZXR1cm4g c2NyYXRjaF9iby0+dmlydHVhbDsKK30KKworc3RhdGljIHZvaWQKK3VubWFwX2RlYnVnX2J1ZmZl cih2b2lkKSB7CisJZHJtX2ludGVsX2JvX3VubWFwKHNjcmF0Y2hfYm8pOworfQorCitzdGF0aWMg aW50Cit3YWl0X2Zvcl9hdHRuKGludCB0aW1lb3V0LCBpbnQgKm91dF9iaXRzKSB7CisJaW50IHN0 ZXAgPSAxOworCWludCBldXNfd2FpdGluZyA9IDA7CisJaW50IGksajsKKworCWlmICh0aW1lb3V0 IDw9IDApIHsKKwkJdGltZW91dCA9IDE7CisJCXN0ZXAgPSAwOworCX0KKworCWZvciAoaSA9IDA7 IGkgPCB0aW1lb3V0OyBpICs9IHN0ZXApIHsKKwkJZm9yIChqID0gMDsgaiA8IDg7IGogKz0gNCkg eworCQkJdWludDMyX3QgYXR0biA9IGludGVsX3JlZ2lzdGVyX3JlYWQoRVVfQVRUICsgaik7CisJ CQlpZiAoYXR0bikgeworCQkJCWludCBiaXQgPSAwOworCQkJCXdoaWxlKCAoYml0ID0gZmZzKGF0 dG4pKSAhPSAwKSB7CisJCQkJCWJpdC0tOyAvLyBmZnMgaXMgMSBiYXNlZAorCQkJCQlhc3NlcnQo Yml0ID49IDApOworCQkJCQlvdXRfYml0c1tldXNfd2FpdGluZ10gPSBiaXQgKyAoaiAqIDgpOwor CQkJCQlhdHRuICY9IH4oMSA8PCBiaXQpOworCQkJCQlldXNfd2FpdGluZysrOworCQkJCX0KKwkJ CX0KKwkJfQorCisJCWlmIChpbnRlbF9yZWdpc3Rlcl9yZWFkKEVVX0FUVCArIDgpIHx8CisJCSAg ICBpbnRlbF9yZWdpc3Rlcl9yZWFkKEVVX0FUVCArIDB4YykpIHsKKwkJCWZwcmludGYoc3RkZXJy LCAiVW5rbm93biBhdHRlbnRpb24gYml0c1xuIik7CisJCX0KKworCQlpZiAoZXVzX3dhaXRpbmcg fHwgc2h1dHRpbmdfZG93bikKKwkJCWJyZWFrOworCX0KKworCXJldHVybiBldXNfd2FpdGluZzsK K30KKworI2RlZmluZSBldV9mZChiaXQpIGV1X2luZm8tPmRlYnVnZ2Vlc1tiaXRdLmZkCisjZGVm aW5lIGV1X2lkKGJpdCkgZXVfaW5mby0+ZGVidWdnZWVzW2JpdF0uZXVpZAorI2RlZmluZSBldV90 aWQoYml0KSBldV9pbmZvLT5kZWJ1Z2dlZXNbYml0XS50aWQKK3N0YXRpYyBzdHJ1Y3QgZXVfc3Rh dGUgKgorZmluZF9ldV9zaG1lbShpbnQgYml0LCB2b2xhdGlsZSB1aW50OF90ICpidWYpIHsKKwlz dHJ1Y3QgcGVyX3RocmVhZF9kYXRhIHsKKwkJdWludDhfdCBfX19fW2RoLnBlcl90aHJlYWRfc2Ny YXRjaF07CisJfV9fYXR0cmlidXRlX18oKHBhY2tlZCkpICpkYXRhOworCXN0cnVjdCBldV9zdGF0 ZSAqZXU7CisJaW50IG1lbV90aWQsIG1lbV9ldWlkLCBpOworCisJZGF0YSA9IChzdHJ1Y3QgcGVy X3RocmVhZF9kYXRhICopYnVmOworCWZvcihpID0gMDsgaSA8IGV1X2luZm8tPm51bV90aHJlYWRz OyBpKyspIHsKKwkJZXUgPSAoc3RydWN0IGV1X3N0YXRlICopJmRhdGFbaV07CisJCW1lbV90aWQg PSBldS0+c3IwICYgMHg3OworCQltZW1fZXVpZCA9IChldS0+c3IwID4+IDgpICYgMHhmOworCQlp ZiAobWVtX3RpZCA9PSBldV90aWQoYml0KSAmJiBtZW1fZXVpZCA9PSBldV9pZChiaXQpKQorCQkJ YnJlYWs7CisJCWV1ID0gTlVMTDsKKwl9CisKKwlyZXR1cm4gZXU7Cit9CisKKyNkZWZpbmUgR1JG X0NNUChhLCBiKSBtZW1jbXAoYSwgYiwgc2l6ZW9mKGdyZikpCisjZGVmaW5lIEdSRl9DUFkoYSwg YikgbWVtY3B5KGEsIGIsIHNpemVvZihncmYpKQorc3RhdGljIGludAordmVyaWZ5KHN0cnVjdCBl dV9zdGF0ZSAqZXUpIHsKKwlpZiAoR1JGX0NNUChldS0+dmVyc2lvbiwgcHJvdG9jb2xfdmVyc2lv bikpIHsKKwkJaWYgKGRlYnVnKSB7CisJCQlwcmludGYoIkJhZCBFVSBwcm90b2NvbCB2ZXJzaW9u ICV4ICV4XG4iLAorCQkJCSgodWludDMyX3QgKikmZXUtPnZlcnNpb24pWzBdLAorCQkJCURFQlVH X1BST1RPQ09MX1ZFUlNJT04pOworCQkJZHVtcF9kZWJ1Zygodm9pZCAqKWV1LCBzaXplb2YoKmV1 KSk7CisJCX0KKwkJcmV0dXJuIC1FQkFEX1BST1RPQ09MOworCX0KKworCWlmIChHUkZfQ01QKGV1 LT5zdGF0ZV9tYWdpYywgZXVfbXNnKSkgeworCQlpZiAoZGVidWcpIHsKKwkJCXByaW50ZigiQmFk IEVVIHN0YXRlIG1hZ2ljICV4ICV4XG4iLAorCQkJCSgodWludDMyX3QgKikmZXUtPnN0YXRlX21h Z2ljKVswXSwKKwkJCQkoKHVpbnQzMl90ICopJmV1LT5zdGF0ZV9tYWdpYylbMV0pOworCQkJZHVt cF9kZWJ1Zygodm9pZCAqKWV1LCBzaXplb2YoKmV1KSk7CisJCX0KKwkJcmV0dXJuIC1FQkFEX01B R0lDOworCX0gZWxzZSB7CisJCUdSRl9DUFkoZXUtPnN0YXRlX21hZ2ljLCBjcHVfYWNrKTsKKwl9 CisKKwlldS0+c3IwID0gUlNWRF9FVSA8PCA4IHwgUlNWRF9USFJFQUQ7CisJcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQKK2NvbGxlY3RfZGF0YShpbnQgYml0LCB2b2xhdGlsZSB1aW50OF90ICpi dWYpIHsKKwlzdHJ1Y3QgZXVfc3RhdGUgKmV1OworCXNzaXplX3QgbnVtOworCWludCByZXQ7CisK Kwlhc3NlcnQoZXVfaWQoYml0KSAhPSBSU1ZEX0VVKTsKKworCWlmIChldV9mZChiaXQpID09IC0x KSB7CisJCWNoYXIgbmFtZVsxMjhdOworCQlzcHJpbnRmKG5hbWUsICJkdW1wX2V1XyUwMmRfJWQu YmluIiwgZXVfaWQoYml0KSwgZXVfdGlkKGJpdCkpOworCQlldV9mZChiaXQpID0gb3BlbihuYW1l LCBPX0NSRUFUIHwgT19XUk9OTFkgfCBPX1RSVU5DLCBTX0lSV1hPKTsKKwkJaWYgKGV1X2ZkKGJp dCkgPT0gLTEpCisJCQlyZXR1cm4gLTE7CisJfQorCisJZXUgPSBmaW5kX2V1X3NobWVtKGJpdCwg YnVmKTsKKworCWlmIChldSA9PSBOVUxMKSB7CisJCWlmIChkZWJ1ZykKKwkJCXByaW50ZigiQmFk IG9mZnNldCAlZCAlZFxuIiwgZXVfaWQoYml0KSwgZXVfdGlkKGJpdCkpOworCQlyZXR1cm4gLUVC QURfU0hNRU07CisJfQorCisJcmV0ID0gdmVyaWZ5KGV1KTsKKwlpZiAocmV0KQorCQlyZXR1cm4g cmV0OworCisJbnVtID0gd3JpdGUoZXVfZmQoYml0KSwgKHZvaWQgKilldSwgc2l6ZW9mKCpldSkp OworCWlmIChudW0gIT0gc2l6ZW9mKCpldSkpIHsKKwkJcGVycm9yKCJ1bmhhbmRsZWQgd3JpdGUg ZmFpbHVyZSIpOworCQlyZXR1cm4gRUJBRF9XUklURTsKKwl9CisKKworCXJldHVybiAwOworfQor CitzdGF0aWMgdm9pZAorY2xlYXJfYXR0bihpbnQgYml0KSB7CisjaWYgMAorLyoKKyAqIFRoaXMg d29ya3MgYnV0IGRvZXNuJ3QgYWxsb3cgZm9yIGVhc2lseSBjaGFuZ2VkIGNsZWFyaW5nIGJpdHMK KyAqLworc3RhdGljIHZvaWQKK2NsZWFyX2F0dG5fb2xkKGludCBiaXQpIHsKKwlpbnQgYml0X3Rv X2NsZWFyID0gYml0ICUgMzI7CisJYml0X3RvX2NsZWFyID0gMzEgLSBiaXRfdG9fY2xlYXI7CisJ aW50ZWxfcmVnaXN0ZXJfd3JpdGUoMHg3ODMwICsgKGJpdC8zMikgKiA0LCAwKTsKKwlpbnRlbF9y ZWdpc3Rlcl93cml0ZSgweDc4MzAgKyAoYml0LzMyKSAqIDQsIDEgPDwgYml0X3RvX2NsZWFyKTsK K30KKyNlbHNlCisJaWYgKCFmb3JjZV9jbGVhcikgeworCQlpbnQgYml0X3RvX2NsZWFyOworCQli aXRfdG9fY2xlYXIgPSBldV9pbmZvLT5kZWJ1Z2dlZXNbYml0XS5jbHI7CisJCWludGVsX3JlZ2lz dGVyX3dyaXRlKEVVX0FUVF9DTFIgKyAoYml0LzMyKSAqIDQsIDApOworCQlpbnRlbF9yZWdpc3Rl cl93cml0ZShFVV9BVFRfQ0xSICsgKGJpdC8zMikgKiA0LCAxIDw8IGJpdF90b19jbGVhcik7CisJ fSBlbHNlIHsKKwkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoRVVfQVRUX0NMUiArIDAsIDApOworCQlp bnRlbF9yZWdpc3Rlcl93cml0ZShFVV9BVFRfQ0xSICsgNCwgMCk7CisJCWludGVsX3JlZ2lzdGVy X3dyaXRlKEVVX0FUVF9DTFIgKyAwLCAweGZmZmZmZmZmKTsKKwkJaW50ZWxfcmVnaXN0ZXJfd3Jp dGUoRVVfQVRUX0NMUiArIDQsIDB4ZmZmZmZmZmYpOworCX0KKyNlbmRpZgorfQorCitzdGF0aWMg dm9pZAorZGJfc2h1dGRvd24oaW50IHNpZykgeworCXNodXR0aW5nX2Rvd24gPSAxOworCXByaW50 ZigiU2h1dHRpbmcgZG93bi4uLlxuIik7Cit9CisKK3N0YXRpYyB2b2lkCitkaWUoaW50IHJlYXNv bikgeworCWludCBpID0gMDsKKworCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIsIDAp OworCWludGVsX3JlZ2lzdGVyX3dyaXRlKEVVX0FUVF9DTFIgKyA0LCAwKTsKKworCWlmIChkZWJ1 Z19mZCkKKwkJY2xvc2UoZGVidWdfZmQpOworCisJZm9yIChpID0gMDsgaSA8IGV1X2luZm8tPm51 bV90aHJlYWRzOyBpKyspIHsKKwkJaWYgKGV1X2luZm8tPmRlYnVnZ2Vlc1tpXS5mZCAhPSAtMSkK KwkJCWNsb3NlKGV1X2luZm8tPmRlYnVnZ2Vlc1tpXS5mZCk7CisJfQorCisJdW5tYXBfZGVidWdf YnVmZmVyKCk7CisKKwlpZiAob2xkX3RkX2N0bCkKKwkJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoVERf Q1RMLCBvbGRfdGRfY3RsKTsKKwlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfZmluaSgpOworCWV4aXQo cmVhc29uKTsKK30KKworc3RhdGljIGludAoraWRlbnRpZnlfZGV2aWNlKGludCBkZXZpZCkgewor CXN3aXRjaChkZXZpZCkgeworCWNhc2UgUENJX0NISVBfU0FORFlCUklER0VfR1QxOgorCWNhc2Ug UENJX0NISVBfU0FORFlCUklER0VfTV9HVDE6CisJY2FzZSBQQ0lfQ0hJUF9TQU5EWUJSSURHRV9T OgorCQlldV9pbmZvID0gJmd0MTsKKwkJYnJlYWs7CisJY2FzZSBQQ0lfQ0hJUF9TQU5EWUJSSURH RV9HVDI6CisJY2FzZSBQQ0lfQ0hJUF9TQU5EWUJSSURHRV9HVDJfUExVUzoKKwljYXNlIFBDSV9D SElQX1NBTkRZQlJJREdFX01fR1QyOgorCWNhc2UgUENJX0NISVBfU0FORFlCUklER0VfTV9HVDJf UExVUzoKKwkJZXVfaW5mbyA9ICZndDI7CisJCWJyZWFrOworCWRlZmF1bHQ6CisJCXJldHVybiAx OworCX0KKworCXJldHVybiAwOworfQorCitzdGF0aWMgdm9pZAorcGFyc2VfZGF0YShjb25zdCBj aGFyICpmaWxlX25hbWUpIHsKKwlzdHJ1Y3QgZXVfc3RhdGUgKmV1X3N0YXRlID0gTlVMTDsKKwlz dHJ1Y3Qgc3RhdCBzdDsKKwlpbnQgZmQgPSAtMTsKKwlpbnQgcmV0LCBpLCBlbGVtZW50czsKKwor CWZkID0gb3BlbihmaWxlX25hbWUsIE9fUkRPTkxZKTsKKwlpZiAoZmQgPT0gLTEpIHsKKwkJcGVy cm9yKCJvcGVuIik7CisJCWdvdG8gb3V0OworCX0KKworCXJldCA9IGZzdGF0KGZkLCAmc3QpOwor CWlmIChyZXQgPT0gLTEpIHsKKwkJcGVycm9yKCJmc3RhdCIpOworCQlnb3RvIG91dDsKKwl9CisK KwllbGVtZW50cyA9IHN0LnN0X3NpemUgLyBzaXplb2Yoc3RydWN0IGV1X3N0YXRlKTsKKwlpZiAo ZWxlbWVudHMgPT0gMCkgeworCQlmcHJpbnRmKHN0ZGVyciwgIkZpbGUgbm90IGJpZyBlbm91Z2gg Zm9yIDEgZW50cnlcbiIpOworCQlnb3RvIG91dDsKKwl9CisKKwlldV9zdGF0ZSA9IG1tYXAoMCwg c3Quc3Rfc2l6ZSwgUFJPVF9SRUFELCBNQVBfU0hBUkVELCBmZCwgMCk7CisJaWYgKGV1X3N0YXRl ID09IE1BUF9GQUlMRUQpIHsKKwkJcGVycm9yKCJtbWFwIik7CisJCWdvdG8gb3V0OworCX0KKwor CWZvcihpID0gMDsgaSA8IGVsZW1lbnRzOyBpKyspIHsKKwkJcHJpbnRmKCJBSVA6ICIpOworCQkJ cHJpbnRmKCIleFxuIiwgKCh1aW50MzJfdCAqKWV1X3N0YXRlW2ldLmNyMClbMl0pOworCX0KK291 dDoKKwlpZiAoZXVfc3RhdGUpCisJCW11bm1hcChldV9zdGF0ZSwgc3Quc3Rfc2l6ZSk7CisJaWYg KGZkICE9IC0xKQorCQljbG9zZShmZCk7Cit9CisKK3N0YXRpYyBpbnQKK3dhaXRfZm9yX3NjcmF0 Y2hfYm8odm9pZCkgeworCXN0cnVjdCBzb2NrYWRkcl91biBhZGRyOworCXVpbnQ4X3QgdmVyc2lv bjsKKwlpbnQgZmQsIHJldCwgaGFuZGxlID0gLTE7CisKKwlmZCA9IHNvY2tldChBRl9VTklYLCBT T0NLX1NUUkVBTSwgMCk7CisJaWYgKGZkID09IC0xKQorCQlyZXR1cm4gLTE7CisKKwkvKiBDbGVh biB1cCBwcmV2aW91cyBydW5zICovCisJcmVtb3ZlKFNIQURFUl9ERUJVR19TT0NLRVQpOworCisJ bWVtc2V0KCZhZGRyLCAwLCBzaXplb2YoYWRkcikpOworCWFkZHIuc3VuX2ZhbWlseSA9IEFGX1VO SVg7CisJc3RybmNweShhZGRyLnN1bl9wYXRoLCBTSEFERVJfREVCVUdfU09DS0VULCBzaXplb2Yo YWRkci5zdW5fcGF0aCkgLSAxKTsKKworCXJldCA9IGJpbmQoZmQsIChjb25zdCBzdHJ1Y3Qgc29j a2FkZHIgKikmYWRkciwgc2l6ZW9mKGFkZHIpKTsKKwlpZiAocmV0ID09IC0xKSB7CisJCXBlcnJv cigibGlzdGVuIik7CisJCXJldHVybiAtMTsKKwl9CisKKwlyZXQgPSBsaXN0ZW4oZmQsIDEpOwor CWlmIChyZXQgPT0gLTEpIHsKKwkJcGVycm9yKCJsaXN0ZW4iKTsKKwkJZ290byBkb25lOworCX0K KworCXdoaWxlKDEpIHsKKwkJaW50IGNsaWVudF9mZDsKKwkJc2l6ZV90IGNvdW50OworCQljaGFy IGFja1tdID0gREVCVUdfSEFORFNIQUtFX0FDSzsKKworCQljbGllbnRfZmQgPSBhY2NlcHQoZmQs IE5VTEwsIE5VTEwpOworCQlpZiAoY2xpZW50X2ZkID09IC0xKSB7CisJCQlwZXJyb3IoImFjY2Vw dCIpOworCQkJZ290byBkb25lOworCQl9CisKKwkJY291bnQgPSByZWFkKGNsaWVudF9mZCwgJnZl cnNpb24sIHNpemVvZih2ZXJzaW9uKSk7CisJCWlmIChjb3VudCAhPSBzaXplb2YodmVyc2lvbikp IHsKKwkJCXBlcnJvcigicmVhZCB2ZXJzaW9uIik7CisJCQlnb3RvIGxvb3Bfb3V0OworCQl9CisK KwkJaWYgKHZlcnNpb24gIT0gREVCVUdfSEFORFNIQUtFX1ZFUlNJT04pIHsKKwkJCWZwcmludGYo c3RkZXJyLCAiQmFkIGRlYnVnIGhhbmRzaGFrZVxuIik7CisJCQlnb3RvIGxvb3Bfb3V0OworCQl9 CisKKwkJY291bnQgPSByZWFkKGNsaWVudF9mZCwgKChjaGFyICopJmRoKSArIDEsIHNpemVvZihk aCkgLSAxKTsKKwkJaWYgKGNvdW50ICE9IHNpemVvZihkaCkgLSAxKSB7CisJCQlwZXJyb3IoInJl YWQgaGFuZHNoYWtlIik7CisJCQlnb3RvIGxvb3Bfb3V0OworCQl9CisKKwkJY291bnQgPSB3cml0 ZShjbGllbnRfZmQsIGFjaywgc2l6ZW9mKGFjaykpOworCQlpZiAoY291bnQgIT0gc2l6ZW9mKGFj aykpIHsKKwkJCXBlcnJvcigid3JpdGUgYWNrIik7CisJCQlnb3RvIGxvb3Bfb3V0OworCQl9CisJ CWhhbmRsZSA9IGRoLmZsaW5rX2hhbmRsZTsKKwkJaWYgKGRlYnVnID4gMCkgeworCQkJcHJpbnRm KCJIYW5kc2hha2UgY29tcGxldGVkIHN1Y2Nlc3NmdWxseVxuIgorCQkJCSJcdHByb3RvY29sIHZl cnNpb24gPSAlZFxuIgorCQkJCSJcdGZsaW5rIGhhbmRsZSA9ICVkXG4iCisJCQkJIlx0cGVyIHRo cmVhZCBzY3JhdGNoID0gJXhcbiIsIHZlcnNpb24sCisJCQkJZGguZmxpbmtfaGFuZGxlLCBkaC5w ZXJfdGhyZWFkX3NjcmF0Y2gpOworCQl9CisKKwlsb29wX291dDoKKwkJY2xvc2UoY2xpZW50X2Zk KTsKKwkJYnJlYWs7CisJfQorCitkb25lOgorCWNsb3NlKGZkKTsKKwlyZXR1cm4gaGFuZGxlOwor fQorCitzdGF0aWMgdm9pZAorc2V0dXBfaHdfYml0cyh2b2lkKQoreworCWludGVsX3JlZ2lzdGVy X3dyaXRlKElOU1RfUE0sIEdFTjZfR0xPQkFMX0RFQlVHX0VOQUJMRSB8CisJCQkJICAgICAgR0VO Nl9HTE9CQUxfREVCVUdfRU5BQkxFIDw8IDE2KTsKKwlvbGRfdGRfY3RsID0gaW50ZWxfcmVnaXN0 ZXJfcmVhZChHRU42X1REX0NUTCk7CisJaW50ZWxfcmVnaXN0ZXJfd3JpdGUoR0VONl9URF9DVEws IEdFTjZfVERfQ1RMX0ZPUkNFX1REX0JLUFQpOworfQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh ciogYXJndltdKSB7CisJc3RydWN0IHBjaV9kZXZpY2UgKnBjaV9kZXY7CisJdm9sYXRpbGUgdWlu dDhfdCAqc2NyYXRjaCA9IE5VTEw7CisJaW50IGJpdHNbNjRdOworCWludCBkZXZpZCA9IC0xLCBv cHQ7CisKKwl3aGlsZSAoKG9wdCA9IGdldG9wdChhcmdjLCBhcmd2LCAiY2RyOnBmP2giKSkgIT0g LTEpIHsKKwkJc3dpdGNoIChvcHQpIHsKKwkJY2FzZSAnYyc6CisJCQljbGVhcl93YWl0cyA9IDE7 CisJCQlicmVhazsKKwkJY2FzZSAnZCc6CisJCQlkZWJ1ZyA9IDE7CisJCQlicmVhazsKKwkJY2Fz ZSAncic6CisJCQlwYXJzZV9kYXRhKG9wdGFyZyk7CisJCQlleGl0KDApOworCQkJYnJlYWs7CisJ CWNhc2UgJ3AnOgorCQkJZGV2aWQgPSBhdG9pKG9wdGFyZyk7CisJCQlicmVhazsKKwkJY2FzZSAn Zic6CisJCQlmb3JjZV9jbGVhciAgPSAxOworCQkJYnJlYWs7CisJCWNhc2UgJz8nOgorCQljYXNl ICdoJzoKKwkJZGVmYXVsdDoKKwkJCWV4aXQoMCk7CisJCX0KKwl9CisKKwlwY2lfZGV2ID0gaW50 ZWxfZ2V0X3BjaV9kZXZpY2UoKTsKKwlpZiAoZGV2aWQgIT0gLTEpOworCQlkZXZpZCA9IHBjaV9k ZXYtPmRldmljZV9pZDsKKwlpZiAoaWRlbnRpZnlfZGV2aWNlKGRldmlkKSkgeworCQlhYm9ydCgp OworCX0KKworCWFzc2VydChpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChwY2lfZGV2LCAxKSA9 PSAwKTsKKworCW1lbXNldChiaXRzLCAtMSwgc2l6ZW9mKGJpdHMpKTsKKwkvKgorCSAqIFRoZXNl IGV2ZW50cyBoYXZlIHRvIG9jY3VyIGJlZm9yZSB0aGUgU1IgcnVucywgb3Igd2UgbmVlZAorCSAq IG5vbi1ibG9ja2luZyB2ZXJzaW9ucyBvZiB0aGUgZnVuY3Rpb25zLgorCSAqLworCWlmICghY2xl YXJfd2FpdHMpIHsKKwkJaW50IGhhbmRsZTsKKwkJZHJtX2ZkID0gZHJtX29wZW5fYW55KCk7CisJ CWJ1Zm1nciA9IGRybV9pbnRlbF9idWZtZ3JfZ2VtX2luaXQoZHJtX2ZkLCA0MDk2KTsKKworCQlz ZXR1cF9od19iaXRzKCk7CisKKwkJLyogV2UgYXJlIHByb2JhYmx5IHJvb3QsIG1ha2UgZmlsZXMg d29ybGQgZnJpZW5kbHkgKi8KKwkJdW1hc2soMCk7CisJCWhhbmRsZSA9IHdhaXRfZm9yX3NjcmF0 Y2hfYm8oKTsKKwkJaWYgKGhhbmRsZSA9PSAtMSkgeworCQkJcHJpbnRmKCJObyBoYW5kbGUgZnJv bSBtZXNhLCBwbGVhc2UgZW50ZXIgbWFudWFsbHk6ICIpOworCQkJaWYgKGZzY2FuZihzdGRpbiwg IiUxZCIsICZoYW5kbGUpID09IDApCisJCQkJZXhpdCgxKTsKKwkJfQorCQlzY3JhdGNoX2JvID0g aW50ZWxfYm9fZ2VtX2NyZWF0ZV9mcm9tX25hbWUoYnVmbWdyLCAic2NyYXRjaCIsIGhhbmRsZSk7 CisJCWlmIChzY3JhdGNoX2JvID09IE5VTEwpIHsKKwkJCWZwcmludGYoc3RkZXJyLCAiQ291bGRu J3QgZmxpbmsgYnVmZmVyXG4iKTsKKwkJCWFib3J0KCk7CisJCX0KKwkJc2lnbmFsKFNJR0lOVCwg ZGJfc2h1dGRvd24pOworCQlwcmludGYoIlByZXNzIEN0cmwtQyB0byBzdG9wXG4iKTsKKwl9IGVs c2UgeworCQlpbnQgdGltZSA9IGZvcmNlX2NsZWFyID8gMCA6IDIwMDAwOworCQl3aGlsZSAod2Fp dF9mb3JfYXR0bih0aW1lLCBiaXRzKSkgeworCQkJY2xlYXJfYXR0bihiaXRzWzBdKTsKKwkJCW1l bXNldChiaXRzLCAtMSwgc2l6ZW9mKGJpdHMpKTsKKwkJfQorCQlkaWUoMCk7CisJfQorCisJc2Ny YXRjaCA9IG1hcF9kZWJ1Z19idWZmZXIoKTsKKwl3aGlsZSAoc2h1dHRpbmdfZG93biA9PSAwKSB7 CisJCWludCBudW1fZXZlbnRzLCBpOworCisJCW1lbXNldChiaXRzLCAtMSwgc2l6ZW9mKGJpdHMp KTsKKwkJbnVtX2V2ZW50cyA9IHdhaXRfZm9yX2F0dG4oLTEsIGJpdHMpOworCQlpZiAobnVtX2V2 ZW50cyA9PSAwKQorCQkJYnJlYWs7CisKKwkJZm9yIChpID0gMDsgaSA8IG51bV9ldmVudHM7IGkr KykgeworCQkJYXNzZXJ0KGJpdHNbaV0gPCA2NCAmJiBiaXRzW2ldID49IDApOworCQkJaWYgKGNv bGxlY3RfZGF0YShiaXRzW2ldLCBzY3JhdGNoKSkgeworCQkJCWJpdHNbaV0gPSAtMTsKKwkJCQlj b250aW51ZTsKKwkJCX0KKwkJCWNsZWFyX2F0dG4oYml0c1tpXSk7CisJCX0KKwl9CisKKwlkaWUo MCk7CisJcmV0dXJuIDA7Cit9CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9N YWtlZmlsZSBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL01ha2VmaWxlCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFjMTBjZTUKLS0tIC9kZXYvbnVsbAorKysgYi9kZWJ1Z2dl ci9zeXN0ZW1fcm91dGluZS9NYWtlZmlsZQpAQCAtMCwwICsxLDg0IEBACisjIENvcHlyaWdodCDC qSAyMDExIEludGVsIENvcnBvcmF0aW9uCisjCisjIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50 ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhIGNvcHkKKyMgb2Yg dGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNv ZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24s IGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJpZ2h0cworIyB0byB1c2UsIGNvcHks IG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsIGFuZC9vciBz ZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3 aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhl IGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisjIHBhcmFncmFw aCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9u cyBvZiB0aGUKKyMgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMg SVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisjIElNUExJRUQs IElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB QklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklO R0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhP TERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyMgTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdB UkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBUSEUKKyMgU09GVFdBUkUuCisjCisj IEF1dGhvcnM6CisjICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KKworT0JKQ09Q WT89b2JqY29weQorCitQUkVDUFA9Li9wcmVfY3BwLnB5CitDUFBfRkxBR1M9LXggYXNzZW1ibGVy LXdpdGgtY3BwIC1QCisKK0dFTl9BUz89fi9pbnRlbC1nZngvaW50ZWwtZ2VuNGFzbS9zcmMvaW50 ZWwtZ2VuNGFzbQorR0VOX0FTX0ZMQUdTPz0tZzYgLWEgLWIKKworVEVNUDo9JChzaGVsbCBta3Rl bXApCitURU1QMjo9JChzaGVsbCBta3RlbXApCisKK0dQVT89U0FORFlCUklER0UKK0RFRklORVMr PS1ER0VOX0FTTSAtRCQoR1BVKSAtSS4gLUkuLi8uLi8vbGliCisKK2FsbDogc3IKKworc3IuYzog c3IuZzRhIGV2aWN0aW9uX21hY3JvIGV2aWN0LmgKKwkkKFBSRUNQUCkgJF4gPiAkKFRFTVApCisJ JChDUFApICQoQ1BQX0ZMQUdTKSAkKERFRklORVMpIC1vICQoVEVNUDIpICQoVEVNUCkKKwkkKEdF Tl9BUykgJChHRU5fQVNfRkxBR1MpICQoVEVNUDIpIC1vICRACisKK3NyIDogc3IubworCSQoT0JK Q09QWSkgLU8gYmluYXJ5IC1LIGdlbl9ldV9ieXRlcyAkXiAkQAorCisjIFRlc3QgZmlsZXMgYXJl IHVzZWZ1bCBmb3IgZGV2ZWxvcG1lbnQuIFRoZSBzeXN0ZW0gcm91dGluZSBrZXJuZWwgaXMgdmVy eQorIyBzaW1wbGUgYW5kIGRvZXNuJ3QgZGVwZW5kIG9uIGFueSBleHRlcm5hbCBjb21tdW5pY2F0 aW9uIHRvIHJ1bi4KK3Rlc3QuYzogdGVzdC5nNGEKKwkkKFBSRUNQUCkgJF4gPiAkKFRFTVApCisJ JChDUFApICQoQ1BQX0ZMQUdTKSAkKERFRklORVMpIC1vICQoVEVNUDIpICQoVEVNUCkKKwkkKEdF Tl9BUykgJChHRU5fQVNfRkxBR1MpICQoVEVNUDIpIC1vICRACisKK3Rlc3QgOiB0ZXN0Lm8KKwkk KE9CSkNPUFkpIC1PIGJpbmFyeSAtSyBnZW5fZXVfYnl0ZXMgJF4gJEAKKworaGVscGVyOiBzci5n NGEgZXZpY3Rpb25fbWFjcm8KKwkkKFBSRUNQUCkgJF4gPiBoZWxwCisJJChDUFApICQoQ1BQX0ZM QUdTKSAkKERFRklORVMpIC1vIGhlbHAyIGhlbHAKKwkkKEdFTl9BUykgJChHRU5fQVNfRkxBR1Mp IGhlbHAyIC1vICRACisKK2V2aWN0aW9uX21hY3JvIDoKKworZXZpY3QuaCA6IGV2aWN0aW9uX21h Y3JvCisJJChzaGVsbCAuL2V2aWN0aW9uX21hY3JvID58IGV2aWN0LmgpCisKKy5QSE9OWSA6IGNs ZWFuCitjbGVhbiA6CisJJChSTSkgKi5vIHNyLmMgc3IgdGVzdC5jIHRlc3QgZXZpY3QuaCBldmlj dGlvbl9tYWNybworCisuUEhPTlkgOiBjbGVhbgorZGlzdGNsZWFuOiBjbGVhbgorCSQoUk0pIGhl bHAqCisKK21haW50YWluZXItY2xlYW46IGNsZWFuCisKK0VNUFRZX0FVVE9NQUtFX1RBUkdFVFMg PSBpbnN0YWxsIGluc3RhbGwtZGF0YSBpbnN0YWxsLWV4ZWMgdW5pbnN0YWxsIFwKKwkJCSBpbnN0 YWxsLWR2aSBpbnN0YWxsLWh0bWwgaW5zdGFsbC1pbmZvIGluc3RhbGwtcHMgXAorCQkJIGluc3Rh bGwtcGRmIGluc3RhbGxkaXJzIGNoZWNrIGluc3RhbGxjaGVjayBcCisJCQkgbW9zdGx5Y2xlYW4g ZHZpIHBkZiBwcyBpbmZvIGh0bWwgdGFncyBjdGFncworLlBIT05ZOiAkKEVNUFRZX0FVVE9NQUtF X1RBUkdFVFMpCiskKEVNUFRZX0FVVE9NQUtFX1RBUkdFVFMpOgpkaWZmIC0tZ2l0IGEvZGVidWdn ZXIvc3lzdGVtX3JvdXRpbmUvZXZpY3Rpb25fbWFjcm8uYyBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0 aW5lL2V2aWN0aW9uX21hY3JvLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4u MWRhMjIzMwotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL2V2aWN0 aW9uX21hY3JvLmMKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDExIElu dGVsIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJl ZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBz b2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJl IiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNs dWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9k aWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBz ZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9t IHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBm b2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBh bmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3Jh cGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlv bnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQg IkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1Q TElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJD SEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9O SU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlS SUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisg KiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9U SEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBU SEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRX QVJFLgorICoKKyAqIEF1dGhvcnM6CisgKiAgICBCZW4gV2lkYXdza3kgPGJlbkBid2lkYXdzay5u ZXQ+CisgKgorICovCisKKyNpbmNsdWRlIDxzdGRpby5oPgorCisjZGVmaW5lIFNUQVJUIDB4MTAw CisjZGVmaW5lIEVORCAoKDEyOCA8PCAxMCkgLyA0KQorCitpbnQgbWFpbihpbnQgYXJnYywgY2hh ciAqYXJndltdKSB7CisJaW50IGk7CisJcHJpbnRmKCIjaWZkZWYgU0FORFlCUklER0VcbiIpOwor CXByaW50ZigiI2RlZmluZSBFVklDVF9DQUNIRSBcXFxuIik7CisJcHJpbnRmKCJcdG1vdiAoMSkg bTAuNTp1ZCBnMC41OnVkIEZMQUdTOyBcXFxuIik7CisJZm9yIChpID0gU1RBUlQ7IGkgPCBFTkQg LSA4OyBpKz0weDgpIHsKKwkJcHJpbnRmKCJcdG1vdiAoMSkgbTAuMjp1ZCAweCUwNHg6dWQgRkxB R1M7IFxcXG4iLCBpKTsKKwkJcHJpbnRmKCJcdFdSSVRFX1NDUkFUQ0g0KG0wKTsgXFxcbiIpOwor CX0KKworCXByaW50ZigiXHRtb3YgKDEpIG0wLjI6dWQgMHglMDR4OnVkIEZMQUdTOyBcXFxuIiwg aSk7CisJcHJpbnRmKCJcdFdSSVRFX1NDUkFUQ0g0KG0wKVxuIik7CisJcHJpbnRmKCIjZWxzZVxu Iik7CisJcHJpbnRmKCIjZGVmaW5lIEVWSUNUX0NBQ0hFXG4iKTsKKwlwcmludGYoIiNlbmRpZlxu Iik7Cit9CmRpZmYgLS1naXQgYS9kZWJ1Z2dlci9zeXN0ZW1fcm91dGluZS9wcmVfY3BwLnB5IGIv ZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvcHJlX2NwcC5weQpuZXcgZmlsZSBtb2RlIDEwMDc1NQpp bmRleCAwMDAwMDAwLi5lZmZlYTBlCi0tLSAvZGV2L251bGwKKysrIGIvZGVidWdnZXIvc3lzdGVt X3JvdXRpbmUvcHJlX2NwcC5weQpAQCAtMCwwICsxLDEyMyBAQAorIyEvdXNyL2Jpbi9lbnYgcHl0 aG9uMworCisjIENvcHlyaWdodCDCqSAyMDExIEludGVsIENvcnBvcmF0aW9uCisjCisjIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhIGNvcHkKKyMgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVu dGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksIHRvIGRlYWwKKyMgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24gdGhlIHJp Z2h0cworIyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUs IHN1YmxpY2Vuc2UsIGFuZC9vciBzZWxsCisjIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0 byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZSBTb2Z0d2FyZSBpcworIyBmdXJuaXNoZWQgdG8g ZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorIworIyBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisjIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyMgU29mdHdhcmUuCisjCisjIFRIRSBTT0ZU V0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBF WFBSRVNTIE9SCisjIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdB UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorIyBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg UFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFCisjIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyMgTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFD VCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcgRlJPTSwKKyMgT1VUIE9GIE9SIElOIENPTk5F Q1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUyBJTiBU SEUKKyMgU09GVFdBUkUuCisjCisjIEF1dGhvcnM6CisjICAgIEJlbiBXaWRhd3NreSA8YmVuQGJ3 aWRhd3NrLm5ldD4KKworI3ZlcnkgbGltaXRlZCBDLWxpa2UgcHJlcHJvY2Vzc29yCisKKyNsaW1p dGF0aW9uczoKKyMgbm8gbWFjcm8gc3Vic3RpdHV0aW9ucworIyBubyBtdWx0aWxpbmUgZGVmaW5p dGlvbnMKKyMgZGl2aWRlIG9wZXJhdG9yIGlzIC8vCisKK2ltcG9ydCBzeXMscmUKKworZmlsZSA9 IG9wZW4oc3lzLmFyZ3ZbMV0sICJyIikKKworbGluZXMgPSBmaWxlLnJlYWRsaW5lcygpCitsZW4o bGluZXMpCitvdXQgPSBkaWN0KCkKK2RlZmluZXMgPSBkaWN0KCkKKworY291bnQgPSAwCisjY3Jl YXRlIGEgZGljdCBmb3Igb3VyIG91dHB1dAorZm9yIGxpbmUgaW4gbGluZXM6CisgICAgb3V0W2Nv dW50XSA9IGxpbmUKKyAgICBjb3VudCA9IGNvdW50ICsgMQorCisjZG9uZSBpcyBjb25zaWRlcmVk ICNkZWZpbmUgPG5hbWU+IDxudW1iZXI+CitkZWYgaXNfZG9uZShzdHJpbmcpOgorICAgIG0gPSBy ZS5tYXRjaCgiI2RlZmluZVxzKyhcdys/KVxzKyhbYS1mQS1GMC05XC1dKz8pXHMqJCIsIHN0cmlu ZykKKyAgICByZXR1cm4gbQorCisjc2tpcCBtYWNyb3MsIHRoZSByZWFsIGNwcCB3aWxsIGhhbmRs ZSBpdAorZGVmIHNraXAoc3RyaW5nKToKKyAgICAjbWFjcm8KKyAgICBtID0gcmUubWF0Y2goIiNk ZWZpbmVccytcdytcKC4rIiwgc3RyaW5nKQorICAgIHJldHVybiBtICE9IE5vbmUKKworI3B1dCBj b250YW50cyB3aGljaCBhcmUgZG9uZSBiZWluZyBldmFsdWF0ZWQgaW50byB0aGUgZGljdGlvbmFy eQorZGVmIGVhc3lfY29uc3RhbnRzKCk6CisgICAgcmV0ID0gMAorICAgIGZvciBsaW5lbm8sIHN0 cmluZyBpbiBvdXQuaXRlbXMoKToKKyAgICAgICAgaWYgc2tpcChzdHJpbmcpOgorICAgICAgICAg ICAgY29udGludWUKKyAgICAgICAgbSA9IGlzX2RvbmUoc3RyaW5nKQorICAgICAgICBpZiBtICE9 IE5vbmU6CisgICAgICAgICAgICBrZXkgPSBtLmdyb3VwKDEpCisgICAgICAgICAgICB2YWx1ZSA9 IG0uZ3JvdXAoMikKKyAgICAgICAgICAgIGlmIG5vdCBrZXkgaW4gZGVmaW5lczoKKyAgICAgICAg ICAgICAgICAgICAgZGVmaW5lc1trZXldID0gaW50KGV2YWwodmFsdWUpKQorICAgICAgICAgICAg ICAgICAgICByZXQgPSAxCisgICAgcmV0dXJuIHJldAorCisjcmVwbGFjZSBuYW1lcyB3aXRoIGRp Y3Rpb25hcnkgdmFsdWVzCitkZWYgc2ltcGxlX3JlcGxhY2UoKToKKyAgICByZXQgPSAwCisgICAg Zm9yIGxpbmVubywgc3RyaW5nIGluIG91dC5pdGVtcygpOgorICAgICAgICBpZiBza2lwKHN0cmlu Zyk6CisgICAgICAgICAgICBjb250aW51ZQorICAgICAgICBmb3Iga2V5LCB2YWx1ZSBpbiBkZWZp bmVzLml0ZW1zKCk6CisgICAgICAgICAgICBpZiBpc19kb25lKHN0cmluZyk6CisgICAgICAgICAg ICAgICAgY29udGludWUKKyAgICAgICAgICAgIHMgPSByZS5zdWJuKGtleSwgcmVwcih2YWx1ZSks IHN0cmluZykKKyAgICAgICAgICAgIGlmIHNbMV0gPiAwOgorICAgICAgICAgICAgICAgIG91dFts aW5lbm9dID0gc1swXQorICAgICAgICAgICAgICAgIHJldCA9IHNbMV0KKyAgICByZXR1cm4gcmV0 CisKKyNldmFsdWF0ZSBleHByZXNzaW9ucyB0byB0cnkgdG8gc2ltcGxpZnkgdGhlbQorZGVmIGNv bGxhcHNlX2NvbnN0YW50cygpOgorICAgIHJldCA9IDAKKyAgICBmb3IgbGluZW5vLCBzdHJpbmcg aW4gb3V0Lml0ZW1zKCk6CisgICAgICAgIGlmIHNraXAoc3RyaW5nKToKKyAgICAgICAgICAgIGNv bnRpbnVlCisgICAgICAgIGlmIGlzX2RvbmUoc3RyaW5nKToKKyAgICAgICAgICAgIGNvbnRpbnVl CisgICAgICAgIG0gPSByZS5tYXRjaCgiI2RlZmluZVxzKyguKz8pXHMrKC4rKSQiLCBzdHJpbmcp CisgICAgICAgIGlmIG0gIT0gTm9uZToKKyAgICAgICAgICAgIHRyeToKKyAgICAgICAgICAgICAg ICBvdXRbbGluZW5vXSA9ICIjZGVmaW5lICIgKyBtLmdyb3VwKDEpICsgIiAiICsgcmVwcihldmFs KG0uZ3JvdXAoMikpKQorICAgICAgICAgICAgICAgIHJldCA9IDEKKyAgICAgICAgICAgIGV4Y2Vw dCBOYW1lRXJyb3IgYXMgbmU6CisgICAgICAgICAgICAgICAgI3RoaXMgaGFwcGVucyBiZWZvcmUg YSB2YXJpYWJsZSBpcyByZXNvbHZlZCBpbiBzaW1wbGVfcmVwbGFjZQorICAgICAgICAgICAgICAg IGNvbnRpbnVlCisgICAgICAgICAgICBleGNlcHQgU3ludGF4RXJyb3I6CisgICAgICAgICAgICAg ICAgI3RoaXMgaGFwcGVucyB3aXRoIHNvbWV0aGluZyBsaWtlICNkZWZpbmUgZm9vIGJhciwgd2hp Y2ggdGhlCisgICAgICAgICAgICAgICAgI3JlZ3VsYXIgY3BwIGNhbiBoYW5kbGUKKyAgICAgICAg ICAgICAgICBjb250aW51ZQorICAgICAgICAgICAgZXhjZXB0OgorICAgICAgICAgICAgICAgIHJh aXNlIEtleWJvYXJkSW50ZXJydXB0CisgICAgcmV0dXJuIHJldDsKKword2hpbGUgVHJ1ZToKKyAg ICByZXQgPSAwCisgICAgcmV0ICs9IGVhc3lfY29uc3RhbnRzKCkKKyAgICByZXQgKz0gc2ltcGxl X3JlcGxhY2UoKQorICAgIHJldCArPSBjb2xsYXBzZV9jb25zdGFudHMoKQorICAgIGlmIHJldCA9 PSAwOgorICAgICAgICBicmVhazsKKworZm9yIGxpbmVubywgc3RyaW5nIGluIG91dC5pdGVtcygp OgorICAgIHByaW50KHN0cmluZy5yc3RyaXAoKSkKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3Rl bV9yb3V0aW5lL3NyLmc0YSBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3NyLmc0YQpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5hNzBlNzcxCi0tLSAvZGV2L251bGwKKysrIGIv ZGVidWdnZXIvc3lzdGVtX3JvdXRpbmUvc3IuZzRhCkBAIC0wLDAgKzEsMjc3IEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlz IGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcg YQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24g ZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhv dXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdo dHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJs aWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBl cm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8g c28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBv ciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBT T0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5E LCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRI RSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElD VUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICog VEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0s IERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0Yg Q09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1Ig SU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJ TkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEJlbiBXaWRh d3NreSA8YmVuQGJ3aWRhd3NrLm5ldD4KKyAqCisgKi8KKworI2luY2x1ZGUgImRlYnVnLmgiCisj aW5jbHVkZSAiZXZpY3QuaCIKKworI2RlZmluZSBDUjBfMF9NRV9TVEFURV9DVFJMICgxIDw8IDMx KQorI2RlZmluZSBDUjBfMF9CUF9TVVBQUkVTUyAoMSA8PCAxNSkKKyNkZWZpbmUgQ1IwXzBfU1BG X0VOICgxIDw8IDIpCisjZGVmaW5lIENSMF8wX0FDQ19ESVMgKDEgPDwgMSkKKyNkZWZpbmUgQ1Iw XzFfQkVTX0NUUkwgKDEgPDwgMzEpCisjZGVmaW5lIENSMF8xX0hBTFRfQ1RSTCAoMSA8PCAzMCkK KyNkZWZpbmUgQ1IwXzFfU09GVF9FWENFUFRJT05fQ1RSTCAoMSA8PCAyOSkKKyNkZWZpbmUgQ1Iw XzFfSUxMR0xfT1BfU1RTICgxIDw8IDI4KQorI2RlZmluZSBDUjBfMV9TVEFDS19PVlJGTFdfU1RT ICgxIDw8IDI3KQorCisjZGVmaW5lIENSMF8wX0VOVFJZX1VOTUFTSyAoQ1IwXzBfU1BGX0VOIHwg Q1IwXzBfQUNDX0RJUykKKy8vIFRPRE86IE5lZWQgdG8gZml4IHRoaXMgZm9yIG5vbiBicmVha3Bv aW50IGNhc2UKKyNkZWZpbmUgQ1IwXzFfRU5UUllfVU5NQVNLIH4oQ1IwXzFfQkVTX0NUUkwpCisj ZGVmaW5lIENSMF8wX1JFVFVSTl9NQVNLIH4oQ1IwXzBfTUVfU1RBVEVfQ1RSTCB8IENSMF8wX1NQ Rl9FTiB8IENSMF8wX0FDQ19ESVMpCisKKy8vIFRPRE86IG5vdCBzdXJlIGhvdyB0byBtYWtlIHRo aXMgbm90IGhhcmRjb2RlZAorI2RlZmluZSBQRVJfVEhSRUFEX1NDUkFUQ0hfU0laRSAoMSA8PCAy MCkKKyNkZWZpbmUgUEVSX1RIUkVBRF9RV09SRFMgKFBFUl9USFJFQURfU0NSQVRDSF9TSVpFID4+ IDQpCisKKy8qIFNob3VsZCBnZXQgdGhpcyBmcm9tIGJyd19kZWZpbmVzLmggKi8KKyNkZWZpbmUg QlJXX0RBVEFQT1JUX09XT1JEX0JMT0NLXzJfT1dPUkRTICAgICAJCTIKKyNkZWZpbmUgQlJXX0RB VEFQT1JUX09XT1JEX0JMT0NLXzRfT1dPUkRTICAgICAJCTMKKyNkZWZpbmUgQlJXX0RBVEFQT1JU X09XT1JEX0JMT0NLXzhfT1dPUkRTICAgICAJCTQKKyNkZWZpbmUgR0VONl9EQVRBUE9SVF9XUklU RV9NRVNTQUdFX09XT1JEX0JMT0NLX1dSSVRFCTgKKyNkZWZpbmUgQlJXX0RBVEFQT1JUX1JFQURf TUVTU0FHRV9PV09SRF9CTE9DS19SRUFECTAKKworLyogZGVzYyBmaWVsZCwgaWUuIGR3b3JkMyA2 LjMuNjYuMiBhbmQgMi4xMS4yLjEuNCAqLworI2RlZmluZSBTRU5EX01MRU5fNQkJKDU8PDI1KQor I2RlZmluZSBTRU5EX01MRU5fMwkJKDM8PDI1KQorI2RlZmluZSBTRU5EX01MRU5fMgkJKDI8PDI1 KQorI2RlZmluZSBTRU5EX01MRU5fMQkJKDE8PDI1KQorI2RlZmluZSBTRU5EX1JMRU5fMQkJKDE8 PDIwKQorI2RlZmluZSBTRU5EX1JMRU5fMAkJKDA8PDIwKQorI2RlZmluZSBTRU5EX0hFQURFUl9Q UkVTRU5UCSgxPDwxOSkKKyNkZWZpbmUgU0VORF9XUklURV9DT01NSVQJKDE8PDE3KQorI2RlZmlu ZSBTRU5EX1RZUEVfV1JJVEUJKEdFTjZfREFUQVBPUlRfV1JJVEVfTUVTU0FHRV9PV09SRF9CTE9D S19XUklURTw8MTMpCisjZGVmaW5lIFNFTkRfVFlQRV9SRUFECShCUldfREFUQVBPUlRfUkVBRF9N RVNTQUdFX09XT1JEX0JMT0NLX1JFQUQ8PDEzKQorI2RlZmluZSBTRU5EX0JMT0NLX1NJWkUxCShC UldfREFUQVBPUlRfT1dPUkRfQkxPQ0tfMl9PV09SRFM8PDgpCisjZGVmaW5lIFNFTkRfQkxPQ0tf U0laRTIJKEJSV19EQVRBUE9SVF9PV09SRF9CTE9DS180X09XT1JEUzw8OCkKKyNkZWZpbmUgU0VO RF9CTE9DS19TSVpFNAkoQlJXX0RBVEFQT1JUX09XT1JEX0JMT0NLXzhfT1dPUkRTPDw4KQorI2Rl ZmluZSBTRU5EX0JJTkRJTkdfVEFCTEUJKDI1NTw8MCkKKy8vIE5vIHdyaXRlIGNvbW1pdAorI2Rl ZmluZSBXUklURV9ERVNDMV9YWFggU0VORF9CSU5ESU5HX1RBQkxFIHwgU0VORF9CTE9DS19TSVpF MSB8IFNFTkRfVFlQRV9XUklURSB8IFNFTkRfSEVBREVSX1BSRVNFTlQgfCBTRU5EX01MRU5fMgor I2RlZmluZSBXUklURV9ERVNDMV9XQyBTRU5EX0JJTkRJTkdfVEFCTEUgfCBTRU5EX0JMT0NLX1NJ WkUxIHwgU0VORF9UWVBFX1dSSVRFIHwgU0VORF9IRUFERVJfUFJFU0VOVCB8IFNFTkRfTUxFTl8y IHwgU0VORF9XUklURV9DT01NSVQKKyNkZWZpbmUgV1JJVEVfREVTQzIgU0VORF9CSU5ESU5HX1RB QkxFIHwgU0VORF9CTE9DS19TSVpFMiB8IFNFTkRfVFlQRV9XUklURSB8IFNFTkRfSEVBREVSX1BS RVNFTlQgfCBTRU5EX01MRU5fMworI2RlZmluZSBXUklURV9ERVNDNCBTRU5EX0JJTkRJTkdfVEFC TEUgfCBTRU5EX0JMT0NLX1NJWkU0IHwgU0VORF9UWVBFX1dSSVRFIHwgU0VORF9IRUFERVJfUFJF U0VOVCB8IFNFTkRfTUxFTl81CisjZGVmaW5lIFJFQ1ZfREVTQzEgU0VORF9CSU5ESU5HX1RBQkxF IHwgU0VORF9CTE9DS19TSVpFMSB8IFNFTkRfVFlQRV9SRUFEIHwgU0VORF9IRUFERVJfUFJFU0VO VCB8IFNFTkRfTUxFTl8xIHwgU0VORF9STEVOXzEKKy8vI2RlZmluZSBTRU5EX0RFU0MxIDB4NDA5 MDJGRgorI2RlZmluZSBTRU5EX0RFU0MxX1dDIDB4NDBiMDJGRgorCisvKiBleF9kZXNjIGZpZWxk IDYuMy42Ni4yICovCisjZGVmaW5lIFNFTkRfRFBfUkVOREVSX0NBQ0hFCSg1PDwwKQorI2RlZmlu ZSBTRU5EX0VPVAkJKDE8PDUpCisjZGVmaW5lIFNFTkRfRVhfREVTQyBTRU5EX0RQX1JFTkRFUl9D QUNIRQorCisvKioKKyAqIFdSSVRFX1NDUkFUQ0gxIC0gV3JpdGUgMiBvd29yZHMuCisgKiBjZHN0 LjIgLSBvZmZzZXQKKyAqIGNkc3QuNSAtIHBlciB0aHJlYWQgc2NyYXRjaCBiYXNlLCByZWxhdGl2 ZSB0byBnc2JhPz8KKyAqIGNkc3QrMSAtIGRhdGEgdG8gYmUgd3JpdHRlbi4KKyAqLworI2RlZmlu ZSBXUklURV9TQ1JBVENIMShjZHN0KSBcCisJc2VuZCAoMTYpIG51bGwgY2RzdCBTRU5EX0VYX0RF U0MgV1JJVEVfREVTQzFfWFhYIEZMQUdTCisjZGVmaW5lIFdSSVRFX1NDUkFUQ0gxX1dDKGNkc3Qp IFwKKwlzZW5kICgxNikgZzEgY2RzdCBTRU5EX0VYX0RFU0MgV1JJVEVfREVTQzFfV0MgRkxBR1MK KyNkZWZpbmUgV1JJVEVfU0NSQVRDSDIoY2RzdCkgXAorCXNlbmQgKDE2KSBudWxsIGNkc3QgU0VO RF9FWF9ERVNDIFdSSVRFX0RFU0MyIEZMQUdTCisjZGVmaW5lIFdSSVRFX1NDUkFUQ0g0KGNkc3Qp IFwKKwlzZW5kICgxNikgbnVsbCBjZHN0IFNFTkRfRVhfREVTQyBXUklURV9ERVNDNCBGTEFHUwor CisvKioKKyAqIFJFQURfU0NSQVRDSDEgLSBSZWFkIDIgb3dvcmRzLgorICogY2RzdC4yIC0gb2Zm c2V0CisgKiBjZHN0LjUgLSBwZXIgdGhyZWFkIHNjcmF0Y2ggYmFzZSwgcmVsYXRpdmUgdG8gZ3Ni YT8/CisgKiBncmYgLSByZWdpc3RlciB3aGVyZSByZWFkIGRhdGEgaXMgcG9wdWxhdGVkLgorICov CisjZGVmaW5lIFJFQURfU0NSQVRDSDEoZ3JmLCBjZHN0KSBcCisJc2VuZCAoMTYpIGdyZjp1ZCBj ZHN0IFNFTkRfRVhfREVTQyBSRUNWX0RFU0MxIEZMQUdTCisKKy8qKgorICogU0VUX09GRlNFVCAt IHNldHVwIG1yZiBmb3IgdGhlIGdpdmVuIG9mZnNldCBwcmlvciB0byBhIHNlbmQgaW5zdHJ1Y3Rp b24uCisgKiBtcmYgLSBtZXNzYWdlIHJlZ2lzdGVyIHRvIGJlIHVzZWQgYXMgdGhlIGhlYWRlci4K KyAqIG9mZnNldCAtIG9mZnNldC4KKyAqCisgKiBJZiBhIFdSSVRFX1NDUkFUQ0ggZm9sbG93cywg bXJmKzEgLT4gbXJmKzErbiBzaG91bGQgY29udGFpbiB0aGUgZGF0YSB0byBiZQorICogd3JpdHRl bi4KKyAqLworI2RlZmluZSBTRVRfT0ZGU0VUKG1yZiwgb2Zmc2V0KSBcCisJbW92ICgxKSBtcmYu NTp1ZCBnMC41OnVkIEZMQUdTOyBcCisJbW92ICgxKSBtcmYuMjp1ZCBvZmZzZXQ6dWQgRkxBR1MK KworLyoqCisgKiBTQVZFX0NSRiAtIHNhdmUgdGhlIGNvbnRyb2wgcmVnaXN0ZXIKKyAqIGNsb2Ji ZXJzOiBtMC4yLCBtMC41CisgKi8KKyNkZWZpbmUgQ1JfT0ZGU0VUIDB4NDAKKyNkZWZpbmUgU0FW RV9DUkYgXAorCVNFVF9PRkZTRVQobTAsIENSX09GRlNFVCk7IFwKKwltb3YgKDgpIG0xOnVkIDB4 ZGVhZGJlZWY6dWQgRkxBR1M7IFwKKwltb3YgKDEpIG0xLjA6dWQgY3IwLjAgRkxBR1M7IFwKKwlt b3YgKDEpIG0xLjE6dWQgY3IwLjEgRkxBR1M7IFwKKwltb3YgKDEpIG0xLjI6dWQgY3IwLjIgRkxB R1M7IFwKKwltb3YgKDEpIG0xLjM6dWQgc3IwOnVkIEZMQUdTOyBcCisJV1JJVEVfU0NSQVRDSDEo bTApCisKKy8qCisgKiBjbG9iYmVyczogbTAuMiwgbTAuNQorICovCisjZGVmaW5lIFNUT1JFX0dS RihncmYsIG9mZnNldCkgXAorCVNFVF9PRkZTRVQobTAsIG9mZnNldCk7IFwKKwltb3YgKDgpIG0x OnVkIGdyZjp1ZCBGTEFHUzsgXAorCVdSSVRFX1NDUkFUQ0gxKG0wKQorCisvKgorICogY2xvYmJl cnM6IG0wLjIsIG0wLjUKKyAqLworI2RlZmluZSBMT0FEX0dSRihncmYsIG9mZnNldCkgXAorCVNF VF9PRkZTRVQobTAsIG9mZnNldCk7IFwKKwlSRUFEX1NDUkFUQ0gxKGdyZiwgbTApCisKKy8qCisg KiBjbG9iYmVyczogbXJmLjIgbXJmLjUKKyAqLworI2RlZmluZSBTVE9SRV9NUkYobXJmLCBvZmZz ZXQpIFwKKwlTRVRfT0ZGU0VUKG1yZiwgb2Zmc2V0KTsgXAorCVdSSVRFX1NDUkFUQ0gxKG1yZikK KworLyoKKyAqIG5vbi1xdWlya3kgc2VtYW50aWNzLCB1bmxpa2UgU1RPUkVfTVJGCisgKiBjbG9i YmVyczogZzEKKyAqLworI2RlZmluZSBMT0FEX01SRihtcmYsIG9mZnNldCkgXAorCUxPQURfR1JG KGcxLCBvZmZzZXQpOyBcCisJbW92ICg4KSBtcmY6dWQgZzE6dWQgRkxBR1MKKworI2RlZmluZSBT QVZFX0FMTF9NUkYgXAorCS8qIG0xIGlzIHNhdmVkIGFscmVhZHkgKi8gXAorCVNUT1JFX01SRiht MSwgMHgyKTsgXAorCVNUT1JFX01SRihtMiwgMHg0KTsgXAorCVNUT1JFX01SRihtMywgMHg2KTsg XAorCVNUT1JFX01SRihtNCwgMHg4KTsgXAorCVNUT1JFX01SRihtNSwgMHhhKTsgXAorCVNUT1JF X01SRihtNiwgMHhjKTsgXAorCVNUT1JFX01SRihtNywgMHhlKTsgXAorCVNUT1JFX01SRihtOCwg MHgxMCk7IFwKKwlTVE9SRV9NUkYobTksIDB4MTIpOyBcCisJU1RPUkVfTVJGKG0xMCwgMHgxNCk7 IFwKKwlTVE9SRV9NUkYobTExLCAweDE2KTsgXAorCVNUT1JFX01SRihtMTIsIDB4MTgpOyBcCisJ U1RPUkVfTVJGKG0xMywgMHgxYSk7IFwKKwlTVE9SRV9NUkYobTE0LCAweDFjKQorCisjZGVmaW5l IFJFU1RPUkVfQUxMX01SRiBcCisJTE9BRF9NUkYobTE1LCAweDFjKTsgXAorCUxPQURfTVJGKG0x NCwgMHgxYSk7IFwKKwlMT0FEX01SRihtMTMsIDB4MTgpOyBcCisJTE9BRF9NUkYobTEyLCAweDE2 KTsgXAorCUxPQURfTVJGKG0xMSwgMHgxNCk7IFwKKwlMT0FEX01SRihtMTAsIDB4MTIpOyBcCisJ TE9BRF9NUkYobTksIDB4MTApOyBcCisJTE9BRF9NUkYobTgsIDB4ZSk7IFwKKwlMT0FEX01SRiht NywgMHhjKTsgXAorCUxPQURfTVJGKG02LCAweGEpOyBcCisJTE9BRF9NUkYobTUsIDB4OCk7IFwK KwlMT0FEX01SRihtNCwgMHg2KTsgXAorCUxPQURfTVJGKG0zLCAweDQpOyBcCisJTE9BRF9NUkYo bTIsIDB4Mik7IFwKKwlMT0FEX01SRihtMSwgMHgwKQorCisjaWZuZGVmIFNBTkRZQlJJREdFCisJ I2Vycm9yIE9ubHkgU2FuZHlCcmlkZ2UgaXMgc3VwcG9ydGVkCisjZW5kaWYKKworLyogRGVmYXVs dCBmbGFncyBmb3IgYW4gaW5zdHJ1Y3Rpb24gKi8KKyNkZWZpbmUgRkxBR1MgeyBBTElHTjEsIFNX SVRDSCwgTUFTS19ESVNBQkxFLCBBQ0NXUkNUUkx9CisKKy8qCisgKiBXZSBjYW4gY2xvYmJlciBt MCwgYW5kIGcwLjQsIGV2ZXJ5dGhpbmcgZWxzZSBtdXN0IGJlIHNhdmVkLgorICovCitFbnRlcjoK Kwlub3A7CisKKwlvciAoMSkgY3IwLjAgY3IwLjAgQ1IwXzBfRU5UUllfVU5NQVNLOnVkIEZMQUdT OworCisJLyoKKwkgKiBnMC41IGhhcyB0aGUgcGVyIHRocmVhZCBzY3JhdGNoIHNwYWNlIHdoZW4g cnVubmluZyBpbiBGUyBvciBWUy4KKwkgKiBJZiB3ZSBkb24ndCBoYXZlIGEgdmFsaWQgZzAuNSwg d2UgY2FuIGNhbGN1bGF0ZSBhIHBlciB0aHJlYWQgc2NyYXRjaCBvZmZzZXQKKwkgKiB1c2luZyB0 aGUgc3lzdGVtIHJlZ2lzdGVycy4gVGhlIHByb2JsZW0gaXMgd2UgZG8gbm90IGhhdmUgYSBnb29k IHdheSB0byBrbm93CisJICogdGhlIG9mZnNldCBmcm9tIEdTQkEuIFRoZSBzeXN0ZW0gcm91dGlu ZSB3aWxsIGhhdmUgdG8gYmUgaGFyZGNvZGVkIG9yCisJICogZHluYW1pY2FsbHkgcGF0Y2hlZCB3 aXRoIHRoZSBjb3JyZWN0IG9mZnNldC4KKwkgKiBUSUQgaXMgaW4gc3IwLjBbMjowXQorCSAqIEVV SUQgaXMgaW4gc3IwLjBbMTE6OF0KKwkgKi8KKworI2lmZGVmIEdQR1BVCisJbW92ICgxKSBnMC40 OnVkIDA6dWQJCQkJRkxBR1M7CisjaWYgMAorCS8qIFRoaXMgc2hvdWxkIHdvcmsgYWNjb3JkaW5n IHRvIHRoZSBkb2NzLCB0aGUgYWRkIGJsb3dzIHVwICovCisJc2hyICgxKSBnMC44OnV3IHNyMC4w OnV3IDUJCQlGTEFHUzsKKwlhZGQgKDEpIGcwLjE2OnViIGdyMC4xNjp1YiBzcjAuMDp1YgkJRkxB R1M7CisjZWxzZQorCXNociAoMSkgZzAuODp1dyBzcjAuMDp1dyA1CQkJRkxBR1M7CisJbW92ICgx KSBnMC45OnV3IHNyMC4wOnV3CQkJRkxBR1M7CisJYW5kICgxKSBnMC45OnV3IGcwLjk6dXcgMHg3 OnV3CQkJRkxBR1M7CisJYWRkICgxKSBnMC44OnV3IGcwLjg6dXcgZzAuOTp1dwkJCUZMQUdTOwor CW1vdiAoMSkgZzAuOTp1dyAwOnV3CQkJCUZMQUdTOworCW11bCAoMSkgZzAuNDp1ZCBnMC40OnVk IFBFUl9USFJFQURfUVdPUkRTCUZMQUdTOworI2VuZGlmCisjZW5kaWYKKworCW1vdiAoOCkgbTA6 dWQgMDp1ZCBGTEFHUzsKKworCS8qIFNhdmVzIG11c3Qgb2NjdXIgaW4gb3JkZXIgc28gYXMgbm90 IHRvIGNsb2JiZXIgdGhlIG5leHQgcmVnaXN0ZXIgKi8KKwlTVE9SRV9NUkYobTAsIDApOworCVNU T1JFX0dSRihnMCwgMHgyMCk7CisJU1RPUkVfR1JGKGcxLCAweDIyKTsKKwlTQVZFX0FMTF9NUkY7 CisKKwltb3YgKDgpIGcxOnVkIFNUQVRFX0VVX01TRzp1ZCBGTEFHUzsKKwlTVE9SRV9HUkYoZzEs IFNUQVRFX1FXT1JEKTsKKworCW1vdiAoOCkgZzE6dWQgREVCVUdfUFJPVE9DT0xfVkVSU0lPTjp1 ZCBGTEFHUzsKKwlTVE9SRV9HUkYoZzEsIENPTU1VTklDQVRJT05fUVdPUkQpOworCisJU0FWRV9D UkY7CisKKwlFVklDVF9DQUNIRTsKKwl3YWl0IG4xOnVkOworCUVWSUNUX0NBQ0hFOworCisJLyog VXNpbmcgdGhpcyB0byB0cnkgdG8ga2VlcCBjb2hlcmVuY3kgKi8KKwlMT0FEX0dSRihnMSwgQ1Jf T0ZGU0VUKTsKKwlMT0FEX0dSRihnMSwgQ09NTVVOSUNBVElPTl9RV09SRCk7CisJTE9BRF9HUkYo ZzEsIFNUQVRFX1FXT1JEKTsKKworCVJFU1RPUkVfQUxMX01SRjsKKwlMT0FEX0dSRihnMSwgMHgy Mik7CisJTE9BRF9HUkYoZzAsIDB4MjApOworCisJLyogQ2xlYXIgYnJlYWtwb2ludCBzdGF0dXMg Ki8KKwlhbmQgKDEpIGNyMC4xIGNyMC4xIENSMF8xX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKKwor CS8qIHNldCBicmVha3BvaW50IHN1cHByZXNzIHRoaXMgc2hvdWxkIGJlIGNvbmRpdGlvbmFsIG9u IGJlcyAqLworCW9yICAoMSkgY3IwLjAgY3IwLjAgQ1IwXzBfQlBfU1VQUFJFU1M6dWQgRkxBR1M7 CisKKwlhbmQgKDEpIGNyMC4wIGNyMC4wIENSMF8wX1JFVFVSTl9NQVNLOnVkIEZMQUdTOworCW5v cDsKZGlmZiAtLWdpdCBhL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5lL3Rlc3QuZzRhIGIvZGVidWdn ZXIvc3lzdGVtX3JvdXRpbmUvdGVzdC5nNGEKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uZTQyOTZlMAotLS0gL2Rldi9udWxsCisrKyBiL2RlYnVnZ2VyL3N5c3RlbV9yb3V0aW5l L3Rlc3QuZzRhCkBAIC0wLDAgKzEsNjQgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxMSBJbnRl bCBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUg b2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29m dHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIp LAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVk aW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlm eSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2Vs bCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0 aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9s bG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5k IHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBo KSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25z IG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJB UyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJ RUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hB TlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklO RlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklH SFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICog TElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhF UldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhF IFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FS RS4KKyAqCisgKiBBdXRob3JzOgorICogICAgQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0 PgorICoKKyAqLworCisjaW5jbHVkZSAiZGVidWcuaCIKKworI2RlZmluZSBDUjBfMF9NRV9TVEFU RV9DVFJMICgxIDw8IDMxKQorI2RlZmluZSBDUjBfMF9CUF9TVVBQUkVTUyAoMSA8PCAxNSkKKyNk ZWZpbmUgQ1IwXzBfU1BGX0VOICgxIDw8IDIpCisjZGVmaW5lIENSMF8wX0FDQ19ESVMgKDEgPDwg MSkKKyNkZWZpbmUgQ1IwXzFfQkVTX0NUUkwgKDEgPDwgMzEpCisjZGVmaW5lIENSMF8xX0hBTFRf Q1RSTCAoMSA8PCAzMCkKKyNkZWZpbmUgQ1IwXzFfU09GVF9FWENFUFRJT05fQ1RSTCAoMSA8PCAy OSkKKyNkZWZpbmUgQ1IwXzFfSUxMR0xfT1BfU1RTICgxIDw8IDI4KQorI2RlZmluZSBDUjBfMV9T VEFDS19PVlJGTFdfU1RTICgxIDw8IDI3KQorCisjZGVmaW5lIENSMF8wX0VOVFJZX1VOTUFTSyAo Q1IwXzBfU1BGX0VOIHwgQ1IwXzBfQUNDX0RJUykKKy8vIFRPRE86IE5lZWQgdG8gZml4IHRoaXMg Zm9yIG5vbiBicmVha3BvaW50IGNhc2UKKyNkZWZpbmUgQ1IwXzFfRU5UUllfVU5NQVNLIH4oQ1Iw XzFfQkVTX0NUUkwpCisjZGVmaW5lIENSMF8wX1JFVFVSTl9NQVNLIH4oQ1IwXzBfTUVfU1RBVEVf Q1RSTCB8IENSMF8wX1NQRl9FTiB8IENSMF8wX0FDQ19ESVMpCisKKyNpZm5kZWYgU0FORFlCUklE R0UKKwkjZXJyb3IgT25seSBTYW5keUJyaWRnZSBpcyBzdXBwb3J0ZWQKKyNlbmRpZgorCisvKiBE ZWZhdWx0IGZsYWdzIGZvciBhbiBpbnN0cnVjdGlvbiAqLworI2RlZmluZSBGTEFHUyB7IEFMSUdO MSwgU1dJVENILCBNQVNLX0RJU0FCTEUsIEFDQ1dSQ1RSTH0KKworRW50ZXI6CisJbm9wOworCisJ b3IgKDEpIGNyMC4wIGNyMC4wIENSMF8wX0VOVFJZX1VOTUFTSzp1ZCBGTEFHUzsKKworCS8qIENs ZWFyIGJyZWFrcG9pbnQgc3RhdHVzICovCisJYW5kICgxKSBjcjAuMSBjcjAuMSBDUjBfMV9FTlRS WV9VTk1BU0s6dWQgRkxBR1M7CisKKwkvKiBzZXQgYnJlYWtwb2ludCBzdXBwcmVzcyB0aGlzIHNo b3VsZCBiZSBjb25kaXRpb25hbCBvbiBiZXMgKi8KKwlvciAgKDEpIGNyMC4wIGNyMC4wIENSMF8w X0JQX1NVUFBSRVNTOnVkIEZMQUdTOworCisJYW5kICgxKSBjcjAuMCBjcjAuMCBDUjBfMF9SRVRV Uk5fTUFTSzp1ZCBGTEFHUzsKKwlub3A7CmRpZmYgLS1naXQgYS9saWIvZGVidWcuaCBiL2xpYi9k ZWJ1Zy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmFmOWNmMzkKLS0tIC9k ZXYvbnVsbAorKysgYi9saWIvZGVidWcuaApAQCAtMCwwICsxLDkyIEBACisvKgorICogQ29weXJp Z2h0IMKpIDIwMTEgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVi eSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICog Y29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMg KHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVz dHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8g dXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNl LAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1 YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5 cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5l eHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJz dGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FS RSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBS RVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJS QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ VVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFV VEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFH RVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJB Q1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09O TkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisg KiBJTiBUSEUgU09GVFdBUkUuCisgKgorICogQXV0aG9yczoKKyAqICAgIEJlbiBXaWRhd3NreSA8 YmVuQGJ3aWRhd3NrLm5ldD4KKyAqCisgKi8KKworI2lmbmRlZiBfREVCVUdfSF8KKyNkZWZpbmUg X0RFQlVHX0hfCisKKyNkZWZpbmUgREVCVUdfUFJPVE9DT0xfVkVSU0lPTiAxCisjZGVmaW5lIENP TU1VTklDQVRJT05fT0ZGU0VUIDB4YzAwCisjZGVmaW5lIENPTU1VTklDQVRJT05fUVdPUkQgMHhj MAorCisjZGVmaW5lIFNUQVRFX0VVX01TRyAweDQ3NTM0ZDY1IC8qIGVNU0cgKi8KKyNkZWZpbmUg U1RBVEVfQ1BVX0FDSyAweDRiNDM0MTYzIC8qIGNBQ0sgKi8KKyNkZWZpbmUgU1RBVEVfT0ZGU0VU IDB4YzIwCisjZGVmaW5lIFNUQVRFX1FXT1JEIDB4YzIKKworI2RlZmluZSBUWF9PRkZTRVQgMHhj NDAKKyNkZWZpbmUgVFhfUVdPUkQgMHhjNAorI2RlZmluZSBSWF9PRkZTRVQgMHhjNjAKKyNkZWZp bmUgUlhfUVdPUkQgMHhjNgorCisjaWZuZGVmIEdFTl9BU00KK3R5cGVkZWYgdWludDMyX3QgZ3Jm WzhdOwordHlwZWRlZiB1aW50MzJfdCBtcmZbOF07Cit0eXBlZGVmIHVpbnQ4X3QgY3JbMTJdOwor dHlwZWRlZiB1aW50MzJfdCBzcjsKKworI2RlZmluZSBEV09SRDgoeCkge3gsIHgsIHgsIHgsIHgs IHgsIHgsIHh9CisKK2NvbnN0IHN0YXRpYyBncmYgcHJvdG9jb2xfdmVyc2lvbiA9IERXT1JEOChE RUJVR19QUk9UT0NPTF9WRVJTSU9OKTsKK2NvbnN0IHN0YXRpYyBncmYgZXVfbXNnID0gRFdPUkQ4 KFNUQVRFX0VVX01TRyk7Citjb25zdCBzdGF0aWMgZ3JmIGNwdV9hY2sgPSBEV09SRDgoU1RBVEVf Q1BVX0FDSyk7CisKK3N0cnVjdCBldV9zdGF0ZSB7CisJbXJmIG1fcmVnc1sxNV07CisJZ3JmIGdf cmVnc1sxNl07CisJZ3JmIHBhZDsKKworLyogMHg0MDAgKi8KKwljciBjcjA7CisJc3Igc3IwOwor CXVpbnQzMl90IGJlZWZfcGFkWzRdOworCXVpbnQ4X3QgcGFkMls5OTIgKyAxMDI0XTsKKworLyog MHhjMDAgQ09NTVVOSUNBVElPTl9PRkZTRVQgKi8KKwlncmYgdmVyc2lvbjsKKwlncmYgc3RhdGVf bWFnaWM7CisJZ3JmIGV1X3R4OworCWdyZiBldV9yeDsKKworCXVpbnQ4X3QgcGFkM1s4OTZdOwor fSBfX2F0dHJpYnV0ZV9fKChwYWNrZWQpKTsKKworc3RhdGljIGlubGluZSB2b2lkCitwcmludF9y ZWcodWludDhfdCByZWdbMzJdKSB7CisJdWludDMyX3QgKmR3b3JkcyA9ICh1aW50MzJfdCAqKXJl ZzsKKwlwcmludGYoIiUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCAlMDh4ICUwOHggJTA4eCIsCisJ CWR3b3Jkc1s3XSwgZHdvcmRzWzZdLCBkd29yZHNbNV0sIGR3b3Jkc1s0XSwKKwkJZHdvcmRzWzNd LCBkd29yZHNbMl0sIGR3b3Jkc1sxXSwgZHdvcmRzWzBdKTsKK30KKworc3RhdGljIGlubGluZSB2 b2lkCitwcmludF9jcmVnKHVpbnQ4X3QgcmVnWzEyXSkgeworCXVpbnQzMl90ICpkd29yZHMgPSAo dWludDMyX3QgKilyZWc7CisJcHJpbnRmKCIlMDh4ICUwOHggJTA4eCIsIGR3b3Jkc1syXSwgZHdv cmRzWzFdLCBkd29yZHNbMF0pOworfQorI2VuZGlmCisKKyNlbmRpZgotLSAKMS43LjYKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCkludGVsLWdmeCBtYWls aW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJl ZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==