From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id EA1864AF6D for ; Sat, 25 May 2024 02:29:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id F34FF68D5F7; Sat, 25 May 2024 05:28:34 +0300 (EEST) Received: from vidala.lynne.ee (vidala.pars.ee [116.203.72.101]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 3F7B768D59D for ; Sat, 25 May 2024 05:28:23 +0300 (EEST) To: ffmpeg-devel@ffmpeg.org Date: Sat, 25 May 2024 04:28:02 +0200 Message-ID: <20240525022813.2292001-10-dev@lynne.ee> X-Mailer: git-send-email 2.43.0.381.gb435a96ce8 In-Reply-To: <20240525022813.2292001-1-dev@lynne.ee> References: <20240525022813.2292001-1-dev@lynne.ee> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v3 09/10] aacdec: add a decoder for AAC USAC (xHE-AAC) X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , From: Lynne via ffmpeg-devel Reply-To: FFmpeg development discussions and patches Cc: Lynne Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBjb21taXQgYWRkcyBhIGRlY29kZXIgZm9yIHRoZSBmcmVxdWVuY3ktZG9tYWluIHBhcnQg b2YgVVNBQy4KCldoYXQgd29ya3M6CiAtIE1vbm8KIC0gU3RlcmVvIChubyBwcmVkaWN0aW9uKQog LSBTdGVyZW8gKG1pZC9zaWRlIGNvZGluZykKIC0gU3RlcmVvIChjb21wbGV4IHByZWRpY3Rpb24p CgpXaGF0J3MgbGVmdDoKIC0gU3BlZWNoIGNvZGluZwoKS25vd24gaXNzdWVzOgogLSBEZXN5bmMg d2l0aCBjZXJ0YWluIHNlcXVlbmNlcwogLSBQcmVyb2xsIGNyb3Nzb3ZlciBtaXNzaW5nIChzaG91 bGRuJ3QgbWF0dGVyLCBiaXRyYXRlIGFkYXB0YXRpb24gb25seSkKLS0tCiBsaWJhdmNvZGVjL2Fh Yy9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgICAzICstCiBsaWJhdmNvZGVjL2FhYy9hYWNkZWMu YyAgICAgICAgICAgICAgfCAgMTg4ICstLQogbGliYXZjb2RlYy9hYWMvYWFjZGVjLmggICAgICAg ICAgICAgIHwgIDE4NyArKysKIGxpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jICAgICAgICAgICB8 ICAyMDggKysrKwogbGliYXZjb2RlYy9hYWMvYWFjZGVjX2FjLmggICAgICAgICAgIHwgICA1NCAr CiBsaWJhdmNvZGVjL2FhYy9hYWNkZWNfZHNwX3RlbXBsYXRlLmMgfCAgICA0ICstCiBsaWJhdmNv ZGVjL2FhYy9hYWNkZWNfbGF0bS5oICAgICAgICAgfCAgIDE0ICstCiBsaWJhdmNvZGVjL2FhYy9h YWNkZWNfbHBkLmMgICAgICAgICAgfCAgMTk4ICsrKysKIGxpYmF2Y29kZWMvYWFjL2FhY2RlY19s cGQuaCAgICAgICAgICB8ICAgMzMgKwogbGliYXZjb2RlYy9hYWMvYWFjZGVjX3VzYWMuYyAgICAg ICAgIHwgMTU5MiArKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZjb2RlYy9hYWMvYWFj ZGVjX3VzYWMuaCAgICAgICAgIHwgICAzNyArCiBsaWJhdmNvZGVjL2FhY3RhYi5jICAgICAgICAg ICAgICAgICAgfCAgIDQyICsKIGxpYmF2Y29kZWMvYWFjdGFiLmggICAgICAgICAgICAgICAgICB8 ICAgMTAgKwogMTMgZmlsZXMgY2hhbmdlZCwgMjQ5NCBpbnNlcnRpb25zKCspLCA3NiBkZWxldGlv bnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2FhYy9hYWNkZWNfYWMuYwogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5oCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZjb2RlYy9hYWMvYWFjZGVjX2xwZC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGli YXZjb2RlYy9hYWMvYWFjZGVjX2xwZC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9h YWMvYWFjZGVjX3VzYWMuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYWFjL2FhY2Rl Y191c2FjLmgKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9NYWtlZmlsZSBiL2xpYmF2Y29k ZWMvYWFjL01ha2VmaWxlCmluZGV4IGMzZTUyNWQzNzMuLjcwYjFkY2EyNzQgMTAwNjQ0Ci0tLSBh L2xpYmF2Y29kZWMvYWFjL01ha2VmaWxlCisrKyBiL2xpYmF2Y29kZWMvYWFjL01ha2VmaWxlCkBA IC0yLDYgKzIsNyBAQCBjbGVhbjo6CiAJCSQoUk0pICQoQ0xFQU5TVUZGSVhFUzolPWxpYmF2Y29k ZWMvYWFjLyUpCiAKIE9CSlMtJChDT05GSUdfQUFDX0RFQ09ERVIpICAgICAgICAgICs9ICBhYWMv YWFjZGVjLm8gYWFjL2FhY2RlY190YWIubyBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgYWFjL2FhY2RlY19mbG9hdC5vCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgYWFjL2FhY2RlY19mbG9hdC5vIGFhYy9hYWNkZWNfdXNhYy5vIFwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhYWMvYWFjZGVjX2FjLm8gYWFj L2FhY2RlY19scGQubwogT0JKUy0kKENPTkZJR19BQUNfRklYRURfREVDT0RFUikgICAgKz0gIGFh Yy9hYWNkZWMubyBhYWMvYWFjZGVjX3RhYi5vIFwKICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhYWMvYWFjZGVjX2ZpeGVkLm8KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv YWFjL2FhY2RlYy5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmMKaW5kZXggNmYzN2FjNTM2MS4u MmI4MzIyZmM2OCAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmMKKysrIGIvbGli YXZjb2RlYy9hYWMvYWFjZGVjLmMKQEAgLTQwLDYgKzQwLDcgQEAKIAogI2luY2x1ZGUgImFhY2Rl Yy5oIgogI2luY2x1ZGUgImFhY2RlY190YWIuaCIKKyNpbmNsdWRlICJhYWNkZWNfdXNhYy5oIgog CiAjaW5jbHVkZSAibGliYXZjb2RlYy9hYWMuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL2FhY19k ZWZpbmVzLmgiCkBAIC01MzUsNiArNTM2LDggQEAgc3RhdGljIGF2X2NvbGQgdm9pZCBmbHVzaChB VkNvZGVjQ29udGV4dCAqYXZjdHgpCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CisK KyAgICBmZl9hYWNfdXNhY19yZXNldF9zdGF0ZShhYywgJmFjLT5vY1sxXSk7CiB9CiAKIC8qKgpA QCAtOTkzLDEzICs5OTYsMTQgQEAgc3RhdGljIGludCBkZWNvZGVfZWxkX3NwZWNpZmljX2NvbmZp ZyhBQUNEZWNDb250ZXh0ICphYywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAogICovCiBzdGF0aWMg aW50IGRlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWdfZ2IoQUFDRGVjQ29udGV4dCAqYWMsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgT3V0cHV0Q29uZmlndXJhdGlvbiAqb2MsCiAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsCiAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgaW50IGdldF9iaXRfYWxpZ25tZW50LAogICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBzeW5jX2V4dGVuc2lvbikKIHsK ICAgICBpbnQgaSwgcmV0OwogICAgIEdldEJpdENvbnRleHQgZ2JjID0gKmdiOworICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMgPSAmb2MtPm00YWM7CiAgICAgTVBFRzRBdWRpb0NvbmZpZyBtNGFj X2JhayA9ICptNGFjOwogCiAgICAgaWYgKChpID0gZmZfbXBlZzRhdWRpb19nZXRfY29uZmlnX2di KG00YWMsICZnYmMsIHN5bmNfZXh0ZW5zaW9uLCBhdmN0eCkpIDwgMCkgewpAQCAtMTAzMywxNCAr MTAzNywyMiBAQCBzdGF0aWMgaW50IGRlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWdfZ2IoQUFD RGVjQ29udGV4dCAqYWMsCiAgICAgY2FzZSBBT1RfRVJfQUFDX0xDOgogICAgIGNhc2UgQU9UX0VS X0FBQ19MRDoKICAgICAgICAgaWYgKChyZXQgPSBkZWNvZGVfZ2Ffc3BlY2lmaWNfY29uZmlnKGFj LCBhdmN0eCwgZ2IsIGdldF9iaXRfYWxpZ25tZW50LAotICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBtNGFjLCBtNGFjLT5jaGFuX2NvbmZpZykpIDwgMCkKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZvYy0+bTRhYywgbTRhYy0+ Y2hhbl9jb25maWcpKSA8IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICBicmVh azsKICAgICBjYXNlIEFPVF9FUl9BQUNfRUxEOgogICAgICAgICBpZiAoKHJldCA9IGRlY29kZV9l bGRfc3BlY2lmaWNfY29uZmlnKGFjLCBhdmN0eCwgZ2IsCi0gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgbTRhYywgbTRhYy0+Y2hhbl9jb25maWcpKSA8IDApCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJm9jLT5tNGFjLCBt NGFjLT5jaGFuX2NvbmZpZykpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAg IGJyZWFrOworI2lmIENPTkZJR19BQUNfREVDT0RFUgorICAgIGNhc2UgQU9UX1VTQUNfTk9TQlI6 IC8qIGZhbGx0aHJvdWdoICovCisgICAgY2FzZSBBT1RfVVNBQzoKKyAgICAgICAgaWYgKChyZXQg PSBmZl9hYWNfdXNhY19jb25maWdfZGVjb2RlKGFjLCBhdmN0eCwgZ2IsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYywgbTRhYy0+Y2hhbl9jb25maWcpKSA8 IDApCiAgICAgICAgICAgICByZXR1cm4gcmV0OwogICAgICAgICBicmVhazsKKyNlbmRpZgogICAg IGRlZmF1bHQ6CiAgICAgICAgIGF2cHJpdl9yZXBvcnRfbWlzc2luZ19mZWF0dXJlKGF2Y3R4LAog ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiQXVkaW8gb2JqZWN0IHR5cGUg JXMlZCIsCkBAIC0xMDYwLDcgKzEwNzIsNyBAQCBzdGF0aWMgaW50IGRlY29kZV9hdWRpb19zcGVj aWZpY19jb25maWdfZ2IoQUFDRGVjQ29udGV4dCAqYWMsCiAKIHN0YXRpYyBpbnQgZGVjb2RlX2F1 ZGlvX3NwZWNpZmljX2NvbmZpZyhBQUNEZWNDb250ZXh0ICphYywKICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBBVkNvZGVjQ29udGV4dCAqYXZjdHgsCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTVBFRzRBdWRpb0NvbmZpZyAqbTRhYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRDb25maWd1cmF0aW9u ICpvYywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50 OF90ICpkYXRhLCBpbnQ2NF90IGJpdF9zaXplLAogICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIGludCBzeW5jX2V4dGVuc2lvbikKIHsKQEAgLTEwODAsNyArMTA5Miw3IEBA IHN0YXRpYyBpbnQgZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhBQUNEZWNDb250ZXh0ICph YywKICAgICBpZiAoKHJldCA9IGluaXRfZ2V0X2JpdHMoJmdiLCBkYXRhLCBiaXRfc2l6ZSkpIDwg MCkKICAgICAgICAgcmV0dXJuIHJldDsKIAotICAgIHJldHVybiBkZWNvZGVfYXVkaW9fc3BlY2lm aWNfY29uZmlnX2diKGFjLCBhdmN0eCwgbTRhYywgJmdiLCAwLAorICAgIHJldHVybiBkZWNvZGVf YXVkaW9fc3BlY2lmaWNfY29uZmlnX2diKGFjLCBhdmN0eCwgb2MsICZnYiwgMCwKICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzeW5jX2V4dGVuc2lvbik7CiB9CiAK QEAgLTExMDQsNiArMTExNiwxNSBAQCBzdGF0aWMgYXZfY29sZCBpbnQgZGVjb2RlX2Nsb3NlKEFW Q29kZWNDb250ZXh0ICphdmN0eCkKIHsKICAgICBBQUNEZWNDb250ZXh0ICphYyA9IGF2Y3R4LT5w cml2X2RhdGE7CiAKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IDI7IGkrKykgeworICAgICAgICBP dXRwdXRDb25maWd1cmF0aW9uICpvYyA9ICZhYy0+b2NbaV07CisgICAgICAgIEFBQ1VTQUNDb25m aWcgKnVzYWMgPSAmb2MtPnVzYWM7CisgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDwgdXNhYy0+ bmJfZWxlbXM7IGorKykgeworICAgICAgICAgICAgQUFDVXNhY0VsZW1Db25maWcgKmVjID0gJnVz YWMtPmVsZW1zW2ldOworICAgICAgICAgICAgYXZfZnJlZXAoJmVjLT5leHQucGxfZGF0YSk7Cisg ICAgICAgIH0KKyAgICB9CisKICAgICBmb3IgKGludCB0eXBlID0gMDsgdHlwZSA8IEZGX0FSUkFZ X0VMRU1TKGFjLT5jaGUpOyB0eXBlKyspIHsKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBN QVhfRUxFTV9JRDsgaSsrKSB7CiAgICAgICAgICAgICBpZiAoYWMtPmNoZVt0eXBlXVtpXSkgewpA QCAtMTE4MSw3ICsxMjAyLDcgQEAgYXZfY29sZCBpbnQgZmZfYWFjX2RlY29kZV9pbml0KEFWQ29k ZWNDb250ZXh0ICphdmN0eCkKICAgICBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0ZSA9IGF2Y3R4 LT5zYW1wbGVfcmF0ZTsKIAogICAgIGlmIChhdmN0eC0+ZXh0cmFkYXRhX3NpemUgPiAwKSB7Ci0g ICAgICAgIGlmICgocmV0ID0gZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2 Y3R4LCAmYWMtPm9jWzFdLm00YWMsCisgICAgICAgIGlmICgocmV0ID0gZGVjb2RlX2F1ZGlvX3Nw ZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2Y3R4LCAmYWMtPm9jWzFdLAogICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZjdHgtPmV4dHJhZGF0YSwKICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2Y3R4LT5leHRyYWRh dGFfc2l6ZSAqIDhMTCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIDEpKSA8IDApCkBAIC0xNTQ5LDkgKzE1NzAsMTYgQEAgc3RhdGljIGludCBkZWNvZGVf cHVsc2VzKFB1bHNlICpwdWxzZSwgR2V0Qml0Q29udGV4dCAqZ2IsCiBpbnQgZmZfYWFjX2RlY29k ZV90bnMoQUFDRGVjQ29udGV4dCAqYWMsIFRlbXBvcmFsTm9pc2VTaGFwaW5nICp0bnMsCiAgICAg ICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIGNvbnN0IEluZGl2aWR1YWxDaGFu bmVsU3RyZWFtICppY3MpCiB7CisgICAgaW50IHRuc19tYXhfb3JkZXIgPSBJTlQzMl9NQVg7Cisg ICAgY29uc3QgaW50IGlzX3VzYWMgPSBhYy0+b2NbMV0ubTRhYy5vYmplY3RfdHlwZSA9PSBBT1Rf VVNBQyB8fAorICAgICAgICAgICAgICAgICAgICAgICAgYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5 cGUgPT0gQU9UX1VTQUNfTk9TQlI7CiAgICAgaW50IHcsIGZpbHQsIGksIGNvZWZfbGVuLCBjb2Vm X3JlcywgY29lZl9jb21wcmVzczsKICAgICBjb25zdCBpbnQgaXM4ID0gaWNzLT53aW5kb3dfc2Vx dWVuY2VbMF0gPT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0U7Ci0gICAgY29uc3QgaW50IHRuc19tYXhf b3JkZXIgPSBpczggPyA3IDogYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5cGUgPT0gQU9UX0FBQ19N QUlOID8gMjAgOiAxMjsKKworICAgIC8qIFVTQUMgZG9lc24ndCBzZWVtIHRvIGhhdmUgYSBsaW1p dCAqLworICAgIGlmICghaXNfdXNhYykKKyAgICAgICAgdG5zX21heF9vcmRlciA9IGlzOCA/IDcg OiBhYy0+b2NbMV0ubTRhYy5vYmplY3RfdHlwZSA9PSBBT1RfQUFDX01BSU4gPyAyMCA6IDEyOwor CiAgICAgZm9yICh3ID0gMDsgdyA8IGljcy0+bnVtX3dpbmRvd3M7IHcrKykgewogICAgICAgICBp ZiAoKHRucy0+bl9maWx0W3ddID0gZ2V0X2JpdHMoZ2IsIDIgLSBpczgpKSkgewogICAgICAgICAg ICAgY29lZl9yZXMgPSBnZXRfYml0czEoZ2IpOwpAQCAtMTU2MCw3ICsxNTg4LDEyIEBAIGludCBm Zl9hYWNfZGVjb2RlX3RucyhBQUNEZWNDb250ZXh0ICphYywgVGVtcG9yYWxOb2lzZVNoYXBpbmcg KnRucywKICAgICAgICAgICAgICAgICBpbnQgdG1wMl9pZHg7CiAgICAgICAgICAgICAgICAgdG5z LT5sZW5ndGhbd11bZmlsdF0gPSBnZXRfYml0cyhnYiwgNiAtIDIgKiBpczgpOwogCi0gICAgICAg ICAgICAgICAgaWYgKCh0bnMtPm9yZGVyW3ddW2ZpbHRdID0gZ2V0X2JpdHMoZ2IsIDUgLSAyICog aXM4KSkgPiB0bnNfbWF4X29yZGVyKSB7CisgICAgICAgICAgICAgICAgaWYgKGlzX3VzYWMpCisg ICAgICAgICAgICAgICAgICAgIHRucy0+b3JkZXJbd11bZmlsdF0gPSBnZXRfYml0cyhnYiwgNCAt IGlzOCk7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICB0bnMtPm9y ZGVyW3ddW2ZpbHRdID0gZ2V0X2JpdHMoZ2IsIDUgLSAoMiAqIGlzOCkpOworCisgICAgICAgICAg ICAgICAgaWYgKHRucy0+b3JkZXJbd11bZmlsdF0gPiB0bnNfbWF4X29yZGVyKSB7CiAgICAgICAg ICAgICAgICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwKICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJUTlMgZmlsdGVyIG9yZGVyICVkIGlzIGdyZWF0ZXIgdGhhbiBtYXhp bXVtICVkLlxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRucy0+b3JkZXJbd11bZmls dF0sIHRuc19tYXhfb3JkZXIpOwpAQCAtMTU5OCw2ICsxNjMxLDcgQEAgc3RhdGljIHZvaWQgZGVj b2RlX21pZF9zaWRlX3N0ZXJlbyhDaGFubmVsRWxlbWVudCAqY3BlLCBHZXRCaXRDb250ZXh0ICpn YiwKIHsKICAgICBpbnQgaWR4OwogICAgIGludCBtYXhfaWR4ID0gY3BlLT5jaFswXS5pY3MubnVt X3dpbmRvd19ncm91cHMgKiBjcGUtPmNoWzBdLmljcy5tYXhfc2ZiOworICAgIGNwZS0+bWF4X3Nm Yl9zdGUgPSBjcGUtPmNoWzBdLmljcy5tYXhfc2ZiOwogICAgIGlmIChtc19wcmVzZW50ID09IDEp IHsKICAgICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXhfaWR4OyBpZHgrKykKICAgICAgICAg ICAgIGNwZS0+bXNfbWFza1tpZHhdID0gZ2V0X2JpdHMxKGdiKTsKQEAgLTIxODIsNDIgKzIyMTYs MTkgQEAgc3RhdGljIGludCBhYWNfZGVjb2RlX2VyX2ZyYW1lKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbnQgYWFjX2Rl Y29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwKLSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpnb3RfZnJhbWVfcHRyLCBHZXRCaXRD b250ZXh0ICpnYiwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgQVZQYWNr ZXQgKmF2cGt0KQorc3RhdGljIGludCBkZWNvZGVfZnJhbWVfZ2EoQVZDb2RlY0NvbnRleHQgKmF2 Y3R4LCBBQUNEZWNDb250ZXh0ICphYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJp dENvbnRleHQgKmdiLCBpbnQgKmdvdF9mcmFtZV9wdHIpCiB7Ci0gICAgQUFDRGVjQ29udGV4dCAq YWMgPSBhdmN0eC0+cHJpdl9kYXRhOwotICAgIENoYW5uZWxFbGVtZW50ICpjaGUgPSBOVUxMLCAq Y2hlX3ByZXYgPSBOVUxMOworICAgIGludCBlcnI7CisgICAgaW50IGlzX2Rtb25vOworICAgIGlu dCBlbGVtX2lkOwogICAgIGVudW0gUmF3RGF0YUJsb2NrVHlwZSBlbGVtX3R5cGUsIGNoZV9wcmV2 X3R5cGUgPSBUWVBFX0VORDsKLSAgICBpbnQgZXJyLCBlbGVtX2lkOwotICAgIGludCBzYW1wbGVz ID0gMCwgbXVsdGlwbGllciwgYXVkaW9fZm91bmQgPSAwLCBwY2VfZm91bmQgPSAwOwotICAgIGlu dCBpc19kbW9ubywgc2NlX2NvdW50ID0gMDsKLSAgICBpbnQgcGF5bG9hZF9hbGlnbm1lbnQ7CiAg ICAgdWludDhfdCBjaGVfcHJlc2VuY2VbNF1bTUFYX0VMRU1fSURdID0ge3swfX07CisgICAgQ2hh bm5lbEVsZW1lbnQgKmNoZSA9IE5VTEwsICpjaGVfcHJldiA9IE5VTEw7CisgICAgaW50IHNhbXBs ZXMgPSAwLCBtdWx0aXBsaWVyLCBhdWRpb19mb3VuZCA9IDAsIHBjZV9mb3VuZCA9IDAsIHNjZV9j b3VudCA9IDA7CisgICAgQVZGcmFtZSAqZnJhbWUgPSBhYy0+ZnJhbWU7CiAKLSAgICBhYy0+ZnJh bWUgPSBmcmFtZTsKLQotICAgIGlmIChzaG93X2JpdHMoZ2IsIDEyKSA9PSAweGZmZikgewotICAg ICAgICBpZiAoKGVyciA9IHBhcnNlX2FkdHNfZnJhbWVfaGVhZGVyKGFjLCBnYikpIDwgMCkgewot ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkZWNvZGluZyBB QUMgZnJhbWUgaGVhZGVyLlxuIik7Ci0gICAgICAgICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0K LSAgICAgICAgaWYgKGFjLT5vY1sxXS5tNGFjLnNhbXBsaW5nX2luZGV4ID4gMTIpIHsKLSAgICAg ICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgc2FtcGxpbmcg cmF0ZSBpbmRleCAlZFxuIiwgYWMtPm9jWzFdLm00YWMuc2FtcGxpbmdfaW5kZXgpOwotICAgICAg ICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsK LSAgICAgICAgfQotICAgIH0KLQotICAgIGlmICgoZXJyID0gZnJhbWVfY29uZmlndXJlX2VsZW1l bnRzKGF2Y3R4KSkgPCAwKQotICAgICAgICBnb3RvIGZhaWw7Ci0KLSAgICAvLyBUaGUgQVZfUFJP RklMRV9BQUNfKiBkZWZpbmVzIGFyZSBhbGwgb2JqZWN0X3R5cGUgLSAxCi0gICAgLy8gVGhpcyBt YXkgbGVhZCB0byBhbiB1bmRlZmluZWQgcHJvZmlsZSBiZWluZyBzaWduYWxlZAotICAgIGFjLT5h dmN0eC0+cHJvZmlsZSA9IGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlIC0gMTsKLQotICAgIHBh eWxvYWRfYWxpZ25tZW50ID0gZ2V0X2JpdHNfY291bnQoZ2IpOwotICAgIGFjLT50YWdzX21hcHBl ZCA9IDA7CisgICAgaW50IHBheWxvYWRfYWxpZ25tZW50ID0gZ2V0X2JpdHNfY291bnQoZ2IpOwog ICAgIC8vIHBhcnNlCiAgICAgd2hpbGUgKChlbGVtX3R5cGUgPSBnZXRfYml0cyhnYiwgMykpICE9 IFRZUEVfRU5EKSB7CiAgICAgICAgIGVsZW1faWQgPSBnZXRfYml0cyhnYiwgNCk7CkBAIC0yMjI1 LDI4ICsyMjM2LDIzIEBAIHN0YXRpYyBpbnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwKICAgICAgICAgaWYgKGF2Y3R4LT5kZWJ1ZyAm IEZGX0RFQlVHX1NUQVJUQ09ERSkKICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0RF QlVHLCAiRWxlbSB0eXBlOiV4IGlkOiV4XG4iLCBlbGVtX3R5cGUsIGVsZW1faWQpOwogCi0gICAg ICAgIGlmICghYXZjdHgtPmNoX2xheW91dC5uYl9jaGFubmVscyAmJiBlbGVtX3R5cGUgIT0gVFlQ RV9QQ0UpIHsKLSAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAgICAg ICAgICBnb3RvIGZhaWw7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKCFhdmN0eC0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzICYmIGVsZW1fdHlwZSAhPSBUWVBFX1BDRSkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwogCiAgICAgICAgIGlmIChlbGVtX3R5cGUgPCBUWVBFX0RT RSkgewogICAgICAgICAgICAgaWYgKGNoZV9wcmVzZW5jZVtlbGVtX3R5cGVdW2VsZW1faWRdKSB7 CiAgICAgICAgICAgICAgICAgaW50IGVycm9yID0gY2hlX3ByZXNlbmNlW2VsZW1fdHlwZV1bZWxl bV9pZF0gPiAxOwogICAgICAgICAgICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIGVycm9yID8gQVZf TE9HX0VSUk9SIDogQVZfTE9HX0RFQlVHLCAiY2hhbm5lbCBlbGVtZW50ICVkLiVkIGR1cGxpY2F0 ZVxuIiwKICAgICAgICAgICAgICAgICAgICAgICAgZWxlbV90eXBlLCBlbGVtX2lkKTsKLSAgICAg ICAgICAgICAgICBpZiAoZXJyb3IpIHsKLSAgICAgICAgICAgICAgICAgICAgZXJyID0gQVZFUlJP Ul9JTlZBTElEREFUQTsKLSAgICAgICAgICAgICAgICAgICAgZ290byBmYWlsOwotICAgICAgICAg ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoZXJyb3IpCisgICAgICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg Y2hlX3ByZXNlbmNlW2VsZW1fdHlwZV1bZWxlbV9pZF0rKzsKIAogICAgICAgICAgICAgaWYgKCEo Y2hlPWZmX2FhY19nZXRfY2hlKGFjLCBlbGVtX3R5cGUsIGVsZW1faWQpKSkgewogICAgICAgICAg ICAgICAgIGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImNoYW5uZWwgZWxlbWVudCAl ZC4lZCBpcyBub3QgYWxsb2NhdGVkXG4iLAogICAgICAgICAgICAgICAgICAgICAgICBlbGVtX3R5 cGUsIGVsZW1faWQpOwotICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICAgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgc2FtcGxlcyA9IGFj LT5vY1sxXS5tNGFjLmZyYW1lX2xlbmd0aF9zaG9ydCA/IDk2MCA6IDEwMjQ7CiAgICAgICAgICAg ICBjaGUtPnByZXNlbnQgPSAxOwpAQCAtMjI4MywxMCArMjI4OSw4IEBAIHN0YXRpYyBpbnQgYWFj X2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpmcmFtZSwK ICAgICAgICAgICAgIGludCB0YWdzOwogCiAgICAgICAgICAgICBpbnQgcHVzaGVkID0gcHVzaF9v dXRwdXRfY29uZmlndXJhdGlvbihhYyk7Ci0gICAgICAgICAgICBpZiAocGNlX2ZvdW5kICYmICFw dXNoZWQpIHsKLSAgICAgICAgICAgICAgICBlcnIgPSBBVkVSUk9SX0lOVkFMSUREQVRBOwotICAg ICAgICAgICAgICAgIGdvdG8gZmFpbDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChw Y2VfZm91bmQgJiYgIXB1c2hlZCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKIAogICAgICAgICAgICAgdGFncyA9IGRlY29kZV9wY2UoYXZjdHgsICZhYy0+b2Nb MV0ubTRhYywgbGF5b3V0X21hcCwgZ2IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBw YXlsb2FkX2FsaWdubWVudCk7CkBAIC0yMzEyLDggKzIzMTYsNyBAQCBzdGF0aWMgaW50IGFhY19k ZWNvZGVfZnJhbWVfaW50KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAg ICAgICAgICAgICAgICAgZWxlbV9pZCArPSBnZXRfYml0cyhnYiwgOCkgLSAxOwogICAgICAgICAg ICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDwgOCAqIGVsZW1faWQpIHsKICAgICAgICAgICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJUWVBFX0ZJTDogIm92ZXJyZWFkX2Vy cik7Ci0gICAgICAgICAgICAgICAgICAgIGVyciA9IEFWRVJST1JfSU5WQUxJRERBVEE7Ci0gICAg ICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBlcnIgPSAwOwog ICAgICAgICAgICAgd2hpbGUgKGVsZW1faWQgPiAwKSB7CkBAIC0yMzM3LDE5ICsyMzQwLDE2IEBA IHN0YXRpYyBpbnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBB VkZyYW1lICpmcmFtZSwKICAgICAgICAgfQogCiAgICAgICAgIGlmIChlcnIpCi0gICAgICAgICAg ICBnb3RvIGZhaWw7CisgICAgICAgICAgICByZXR1cm4gZXJyOwogCiAgICAgICAgIGlmIChnZXRf Yml0c19sZWZ0KGdiKSA8IDMpIHsKICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCBvdmVycmVhZF9lcnIpOwotICAgICAgICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFU QTsKLSAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKCFhdmN0eC0+Y2hfbGF5b3V0 Lm5iX2NoYW5uZWxzKSB7Ci0gICAgICAgICpnb3RfZnJhbWVfcHRyID0gMDsKKyAgICBpZiAoIWF2 Y3R4LT5jaF9sYXlvdXQubmJfY2hhbm5lbHMpCiAgICAgICAgIHJldHVybiAwOwotICAgIH0KIAog ICAgIG11bHRpcGxpZXIgPSAoYWMtPm9jWzFdLm00YWMuc2JyID09IDEpID8gYWMtPm9jWzFdLm00 YWMuZXh0X3NhbXBsZV9yYXRlID4gYWMtPm9jWzFdLm00YWMuc2FtcGxlX3JhdGUgOiAwOwogICAg IHNhbXBsZXMgPDw9IG11bHRpcGxpZXI7CkBAIC0yMzY0LDE2ICsyMzY0LDE3IEBAIHN0YXRpYyBp bnQgYWFjX2RlY29kZV9mcmFtZV9pbnQoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVkZyYW1lICpm cmFtZSwKIAogICAgIGlmICghYWMtPmZyYW1lLT5kYXRhWzBdICYmIHNhbXBsZXMpIHsKICAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJubyBmcmFtZSBkYXRhIGZvdW5kXG4iKTsK LSAgICAgICAgZXJyID0gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICAgICAgZ290byBmYWlsOwor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKICAgICB9CiAKICAgICBpZiAoc2Ft cGxlcykgewogICAgICAgICBhYy0+ZnJhbWUtPm5iX3NhbXBsZXMgPSBzYW1wbGVzOwogICAgICAg ICBhYy0+ZnJhbWUtPnNhbXBsZV9yYXRlID0gYXZjdHgtPnNhbXBsZV9yYXRlOwotICAgIH0gZWxz ZQorICAgICAgICAqZ290X2ZyYW1lX3B0ciA9IDE7CisgICAgfSBlbHNlIHsKICAgICAgICAgYXZf ZnJhbWVfdW5yZWYoYWMtPmZyYW1lKTsKLSAgICAqZ290X2ZyYW1lX3B0ciA9ICEhc2FtcGxlczsK KyAgICAgICAgKmdvdF9mcmFtZV9wdHIgPSAwOworICAgIH0KIAogICAgIC8qIGZvciBkdWFsLW1v bm8gYXVkaW8gKFNDRSArIFNDRSkgKi8KICAgICBpc19kbW9ubyA9IGFjLT5kbW9ub19tb2RlICYm IHNjZV9jb3VudCA9PSAyICYmCkBAIC0yMzg3LDYgKzIzODgsNTkgQEAgc3RhdGljIGludCBhYWNf ZGVjb2RlX2ZyYW1lX2ludChBVkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKmZyYW1lLAog ICAgIH0KIAogICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFhY19kZWNvZGVfZnJhbWVf aW50KEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIGludCAqZ290X2ZyYW1lX3B0ciwgR2V0Qml0Q29udGV4dCAqZ2Is CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWUGFja2V0ICphdnBrdCkK K3sKKyAgICBpbnQgZXJyOworICAgIEFBQ0RlY0NvbnRleHQgKmFjID0gYXZjdHgtPnByaXZfZGF0 YTsKKworICAgIGFjLT5mcmFtZSA9IGZyYW1lOworICAgICpnb3RfZnJhbWVfcHRyID0gMDsKKwor ICAgIGlmIChzaG93X2JpdHMoZ2IsIDEyKSA9PSAweGZmZikgeworICAgICAgICBpZiAoKGVyciA9 IHBhcnNlX2FkdHNfZnJhbWVfaGVhZGVyKGFjLCBnYikpIDwgMCkgeworICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFcnJvciBkZWNvZGluZyBBQUMgZnJhbWUgaGVhZGVy LlxuIik7CisgICAgICAgICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGFj LT5vY1sxXS5tNGFjLnNhbXBsaW5nX2luZGV4ID4gMTIpIHsKKyAgICAgICAgICAgIGF2X2xvZyhh Yy0+YXZjdHgsIEFWX0xPR19FUlJPUiwgImludmFsaWQgc2FtcGxpbmcgcmF0ZSBpbmRleCAlZFxu IiwgYWMtPm9jWzFdLm00YWMuc2FtcGxpbmdfaW5kZXgpOworICAgICAgICAgICAgZXJyID0gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgfQorICAg IH0KKworICAgIGlmICgoZXJyID0gZnJhbWVfY29uZmlndXJlX2VsZW1lbnRzKGF2Y3R4KSkgPCAw KQorICAgICAgICBnb3RvIGZhaWw7CisKKyAgICAvLyBUaGUgQVZfUFJPRklMRV9BQUNfKiBkZWZp bmVzIGFyZSBhbGwgb2JqZWN0X3R5cGUgLSAxCisgICAgLy8gVGhpcyBtYXkgbGVhZCB0byBhbiB1 bmRlZmluZWQgcHJvZmlsZSBiZWluZyBzaWduYWxlZAorICAgIGFjLT5hdmN0eC0+cHJvZmlsZSA9 IGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlIC0gMTsKKworICAgIGFjLT50YWdzX21hcHBlZCA9 IDA7CisKKyAgICBpZiAoKGFjLT5vY1sxXS5tNGFjLm9iamVjdF90eXBlID09IEFPVF9VU0FDKSB8 fAorICAgICAgICAoYWMtPm9jWzFdLm00YWMub2JqZWN0X3R5cGUgPT0gQU9UX1VTQUNfTk9TQlIp KSB7CisgICAgICAgIGlmIChhYy0+aXNfZml4ZWQpIHsKKyAgICAgICAgICAgIGF2cHJpdl9yZXBv cnRfbWlzc2luZ19mZWF0dXJlKGFjLT5hdmN0eCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICJBQUMgVVNBQyBmaXhlZC1wb2ludCBkZWNvZGluZyIpOworICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICB9CisjaWYgQ09ORklH X0FBQ19ERUNPREVSCisgICAgICAgIGVyciA9IGZmX2FhY191c2FjX2RlY29kZV9mcmFtZShhdmN0 eCwgYWMsIGdiLCBnb3RfZnJhbWVfcHRyKTsKKyAgICAgICAgaWYgKGVyciA8IDApCisgICAgICAg ICAgICBnb3RvIGZhaWw7CisjZW5kaWYKKyAgICB9IGVsc2UgeworICAgICAgICBlcnIgPSBkZWNv ZGVfZnJhbWVfZ2EoYXZjdHgsIGFjLCBnYiwgZ290X2ZyYW1lX3B0cik7CisgICAgICAgIGlmIChl cnIgPCAwKQorICAgICAgICAgICAgZ290byBmYWlsOworICAgIH0KKworICAgIHJldHVybiBlcnI7 CisKIGZhaWw6CiAgICAgcG9wX291dHB1dF9jb25maWd1cmF0aW9uKGFjKTsKICAgICByZXR1cm4g ZXJyOwpAQCAtMjQxNCw3ICsyNDY4LDcgQEAgc3RhdGljIGludCBhYWNfZGVjb2RlX2ZyYW1lKEFW Q29kZWNDb250ZXh0ICphdmN0eCwgQVZGcmFtZSAqZnJhbWUsCiAgICAgaWYgKG5ld19leHRyYWRh dGEpIHsKICAgICAgICAgLyogZGlzY2FyZCBwcmV2aW91cyBjb25maWd1cmF0aW9uICovCiAgICAg ICAgIGFjLT5vY1sxXS5zdGF0dXMgPSBPQ19OT05FOwotICAgICAgICBlcnIgPSBkZWNvZGVfYXVk aW9fc3BlY2lmaWNfY29uZmlnKGFjLCBhYy0+YXZjdHgsICZhYy0+b2NbMV0ubTRhYywKKyAgICAg ICAgZXJyID0gZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhhYywgYWMtPmF2Y3R4LCAmYWMt Pm9jWzFdLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld19l eHRyYWRhdGEsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3 X2V4dHJhZGF0YV9zaXplICogOExMLCAxKTsKICAgICAgICAgaWYgKGVyciA8IDApIHsKZGlmZiAt LWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlYy5oIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmgK aW5kZXggOGQxZWI3NDA2Ni4uZWUyMWE5NDAwNyAxMDA2NDQKLS0tIGEvbGliYXZjb2RlYy9hYWMv YWFjZGVjLmgKKysrIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjLmgKQEAgLTQyLDYgKzQyLDggQEAK ICNpbmNsdWRlICJsaWJhdmNvZGVjL2F2Y29kZWMuaCIKICNpbmNsdWRlICJsaWJhdmNvZGVjL21w ZWc0YXVkaW8uaCIKIAorI2luY2x1ZGUgImFhY2RlY19hYy5oIgorCiB0eXBlZGVmIHN0cnVjdCBB QUNEZWNDb250ZXh0IEFBQ0RlY0NvbnRleHQ7CiAKIC8qKgpAQCAtNjksNiArNzEsMzIgQEAgZW51 bSBDb3VwbGluZ1BvaW50IHsKICAgICBBRlRFUl9JTURDVCA9IDMsCiB9OwogCitlbnVtIEFBQ1Vz YWNFbGVtIHsKKyAgICBJRF9VU0FDX1NDRSA9IDAsCisgICAgSURfVVNBQ19DUEUgPSAxLAorICAg IElEX1VTQUNfTEZFID0gMiwKKyAgICBJRF9VU0FDX0VYVCA9IDMsCit9OworCitlbnVtIEV4dGVu c2lvbkhlYWRlclR5cGUgeworICAgIElEX0NPTkZJR19FWFRfRklMTCA9IDAsCisgICAgSURfQ09O RklHX0VYVF9MT1VETkVTU19JTkZPID0gMiwKKyAgICBJRF9DT05GSUdfRVhUX1NUUkVBTV9JRCA9 IDcsCit9OworCitlbnVtIEFBQ1VzYWNFeHRlbnNpb24geworICAgIElEX0VYVF9FTEVfRklMTCwK KyAgICBJRF9FWFRfRUxFX01QRUdTLAorICAgIElEX0VYVF9FTEVfU0FPQywKKyAgICBJRF9FWFRf RUxFX0FVRElPUFJFUk9MTCwKKyAgICBJRF9FWFRfRUxFX1VOSV9EUkMsCit9OworCitlbnVtIEFB Q1VTQUNMb3VkbmVzc0V4dCB7CisgICAgVU5JRFJDTE9VREVYVF9URVJNID0gMHgwLAorICAgIFVO SURSQ0xPVURFWFRfRVEgPSAweDEsCit9OworCiAvLyBTdXBwb3NlZCB0byBiZSBlcXVhbCB0byBB QUNfUkVOQU1FKCkgaW4gY2FzZSBvZiBVU0VfRklYRUQuCiAjZGVmaW5lIFJFTkFNRV9GSVhFRChu YW1lKSBuYW1lICMjIF9maXhlZAogCkBAIC05Myw2ICsxMjEsNDAgQEAgdHlwZWRlZiBzdHJ1Y3Qg TG9uZ1Rlcm1QcmVkaWN0aW9uIHsKICAgICBpbnQ4X3QgdXNlZFtNQVhfTFRQX0xPTkdfU0ZCXTsK IH0gTG9uZ1Rlcm1QcmVkaWN0aW9uOwogCisvKiBQZXIgY2hhbm5lbCBjb3JlIG1vZGUgKi8KK3R5 cGVkZWYgc3RydWN0IEFBQ1VzYWNFbGVtRGF0YSB7CisgICAgdWludDhfdCBjb3JlX21vZGU7Cisg ICAgdWludDhfdCBzY2FsZV9mYWN0b3JfZ3JvdXBpbmc7CisKKyAgICAvKiBUaW1ld2FycGluZyBy YXRpbyAqLworI2RlZmluZSBOVU1fVFdfTk9ERVMgMTYKKyAgICB1aW50OF90IHR3X3JhdGlvW05V TV9UV19OT0RFU107CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IGFjZWxwX2NvcmVf bW9kZSA6IDM7CisgICAgICAgIHVpbnQ4X3QgbHBkX21vZGUgOiA1OworCisgICAgICAgIHVpbnQ4 X3QgYnBmX2NvbnRyb2xfaW5mbyA6IDE7CisgICAgICAgIHVpbnQ4X3QgY29yZV9tb2RlX2xhc3Qg OiAxOworICAgICAgICB1aW50OF90IGZhY19kYXRhX3ByZXNlbnQgOiAxOworCisgICAgICAgIGlu dCBsYXN0X2xwZF9tb2RlOworICAgIH0gbGRwOworCisgICAgc3RydWN0IHsKKyAgICAgICAgdW5z aWduZWQgaW50IHNlZWQ7CisgICAgICAgIHVpbnQ4X3QgbGV2ZWwgOiAzOworICAgICAgICB1aW50 OF90IG9mZnNldCA6IDU7CisgICAgfSBub2lzZTsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVp bnQ4X3QgZ2FpbjsKKyAgICAgICAgdWludDMyX3Qga3ZbOCAvKiAoMTAyNCAvIDE2KSAvIDggKi9d WzhdOworICAgIH0gZmFjOworCisgICAgQUFDQXJpdGhTdGF0ZSBhYzsKK30gQUFDVXNhY0VsZW1E YXRhOworCiAvKioKICAqIEluZGl2aWR1YWwgQ2hhbm5lbCBTdHJlYW0KICAqLwpAQCAtMTQ1LDEx ICsyMDcsMTMgQEAgdHlwZWRlZiBzdHJ1Y3QgQ2hhbm5lbENvdXBsaW5nIHsKICAqLwogdHlwZWRl ZiBzdHJ1Y3QgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgewogICAgIEluZGl2aWR1YWxDaGFubmVsU3Ry ZWFtIGljczsKKyAgICBBQUNVc2FjRWxlbURhdGEgdWU7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAvLy88IFVTQUMgZWxlbWVudCBkYXRhCiAgICAgVGVtcG9yYWxOb2lzZVNoYXBpbmcgdG5z OwogICAgIGVudW0gQmFuZFR5cGUgYmFuZF90eXBlWzEyOF07ICAgICAgICAgICAgICAgICAgIC8v LzwgYmFuZCB0eXBlcwogICAgIGludCBzZm9bMTI4XTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIC8vLzwgc2NhbGVmYWN0b3Igb2Zmc2V0cwogICAgIElOVEZMT0FUX1VOSU9OKHNm LCBbMTI4XSk7ICAgICAgICAgICAgICAgICAgICAgIC8vLzwgc2NhbGVmYWN0b3JzICg4IHdpbmRv d3MgKiAxNiBzZmIgbWF4KQogICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIGNvZWZmcywg ICAgMTAyNCk7ICAgIC8vLzwgY29lZmZpY2llbnRzIGZvciBJTURDVCwgbWF5YmUgcHJvY2Vzc2Vk CisgICAgSU5URkxPQVRfQUxJR05FRF9VTklPTigzMiwgcHJldl9jb2VmZnMsIDEwMjQpOyAgLy8v PCB1bnNjYWxlZCBwcmV2aW91cyBjb250ZW50cyBvZiBjb2VmZnNbXSBmb3IgVVNBQwogICAgIElO VEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHNhdmVkLCAgICAgMTUzNik7ICAgIC8vLzwgb3Zlcmxh cAogICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHJldF9idWYsICAgMjA0OCk7ICAgIC8v LzwgUENNIG91dHB1dCBidWZmZXIKICAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDE2LCBsdHBf c3RhdGUsIDMwNzIpOyAgICAvLy88IHRpbWUgc2lnbmFsIGZvciBMVFAKQEAgLTE2MywyNSArMjI3 LDE0OCBAQCB0eXBlZGVmIHN0cnVjdCBTaW5nbGVDaGFubmVsRWxlbWVudCB7CiAgICAgfTsKIH0g U2luZ2xlQ2hhbm5lbEVsZW1lbnQ7CiAKK3R5cGVkZWYgc3RydWN0IEFBQ1VzYWNTdGVyZW8gewor ICAgIHVpbnQ4X3QgY29tbW9uX3dpbmRvdzsKKyAgICB1aW50OF90IGNvbW1vbl90dzsKKworICAg IHVpbnQ4X3QgbXNfbWFza19tb2RlOworICAgIHVpbnQ4X3QgY29uZmlnX2lkeDsKKworICAgIC8q IENvbXBsZXggcHJlZGljdGlvbiAqLworICAgIHVpbnQ4X3QgdXNlX3ByZXZfZnJhbWU7CisgICAg dWludDhfdCBwcmVkX2RpcjsKKyAgICB1aW50OF90IGNvbXBsZXhfY29lZjsKKworICAgIHVpbnQ4 X3QgcHJlZF91c2VkWzEyOF07CisKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBhbHBo YV9xX3JlLCAxMDI0KTsKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBhbHBoYV9xX2lt LCAxMDI0KTsKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBwcmV2X2FscGhhX3FfcmUs IDEwMjQpOworICAgIElOVEZMT0FUX0FMSUdORURfVU5JT04oMzIsIHByZXZfYWxwaGFfcV9pbSwg MTAyNCk7CisKKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBkbWl4X3JlLCAxMDI0KTsK KyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9OKDMyLCBwcmV2X2RtaXhfcmUsIDEwMjQpOyAvKiBS ZWNhbGN1bGF0ZWQgb24gZXZlcnkgZnJhbWUgKi8KKyAgICBJTlRGTE9BVF9BTElHTkVEX1VOSU9O KDMyLCBkbWl4X2ltLCAxMDI0KTsgLyogRmluYWwgcHJlZGljdGlvbiBkYXRhICovCit9IEFBQ1Vz YWNTdGVyZW87CisKIC8qKgogICogY2hhbm5lbCBlbGVtZW50IC0gZ2VuZXJpYyBzdHJ1Y3QgZm9y IFNDRS9DUEUvQ0NFL0xGRQogICovCiB0eXBlZGVmIHN0cnVjdCBDaGFubmVsRWxlbWVudCB7CiAg ICAgaW50IHByZXNlbnQ7CiAgICAgLy8gQ1BFIHNwZWNpZmljCisgICAgdWludDhfdCBtYXhfc2Zi X3N0ZTsgICAgICAvLy88IChVU0FDKSBNYXhpbXVtIG9mIGJvdGggbWF4X3NmYiB2YWx1ZXMKICAg ICB1aW50OF90IG1zX21hc2tbMTI4XTsgICAgIC8vLzwgU2V0IGlmIG1pZC9zaWRlIHN0ZXJlbyBp cyB1c2VkIGZvciBlYWNoIHNjYWxlZmFjdG9yIHdpbmRvdyBiYW5kCiAgICAgLy8gc2hhcmVkCiAg ICAgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgY2hbMl07CiAgICAgLy8gQ0NFIHNwZWNpZmljCiAgICAg Q2hhbm5lbENvdXBsaW5nIGNvdXA7CisgICAgLy8gVVNBQyBzdGVyZW8gY291cGxpbmcgZGF0YQor ICAgIEFBQ1VzYWNTdGVyZW8gdXM7CiB9IENoYW5uZWxFbGVtZW50OwogCit0eXBlZGVmIHN0cnVj dCBBQUNVU0FDTG91ZG5lc3NJbmZvIHsKKyAgICB1aW50OF90IGRyY19zZXRfaWQgOiA2OworICAg IHVpbnQ4X3QgZG93bm1peF9pZCA6IDc7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDE2X3Qg bHZsIDogMTI7CisgICAgICAgIHVpbnQ4X3QgcHJlc2VudCA6IDE7CisgICAgfSBzYW1wbGVfcGVh azsKKworICAgIHN0cnVjdCB7CisgICAgICAgIHVpbnQxNl90IGx2bCA6IDEyOworICAgICAgICB1 aW50OF90IG1lYXN1cmVtZW50IDogNDsKKyAgICAgICAgdWludDhfdCByZWxpYWJpbGl0eSA6IDI7 CisgICAgICAgIHVpbnQ4X3QgcHJlc2VudCA6IDE7CisgICAgfSB0cnVlX3BlYWs7CisKKyAgICB1 aW50OF90IG5iX21lYXN1cmVtZW50cyA6IDQ7CisgICAgc3RydWN0IHsKKyAgICAgICAgdWludDhf dCBtZXRob2RfZGVmIDogNDsKKyAgICAgICAgdWludDhfdCBtZXRob2RfdmFsOworICAgICAgICB1 aW50OF90IG1lYXN1cmVtZW50IDogNDsKKyAgICAgICAgdWludDhfdCByZWxpYWJpbGl0eSA6IDI7 CisgICAgfSBtZWFzdXJlbWVudHNbMTZdOworfSBBQUNVU0FDTG91ZG5lc3NJbmZvOworCit0eXBl ZGVmIHN0cnVjdCBBQUNVc2FjRWxlbUNvbmZpZyB7CisgICAgZW51bSBBQUNVc2FjRWxlbSB0eXBl OworCisgICAgdWludDhfdCB0d19tZGN0IDogMTsKKyAgICB1aW50OF90IG5vaXNlX2ZpbGwgOiAx OworCisgICAgdWludDhfdCBzdGVyZW9fY29uZmlnX2luZGV4OworCisgICAgc3RydWN0IHsKKyAg ICAgICAgaW50IHJhdGlvOworCisgICAgICAgIHVpbnQ4X3QgaGFybW9uaWNfc2JyIDogMTsgLyog aGFybW9uaWNTQlIgKi8KKyAgICAgICAgdWludDhfdCBic19pbnRlcnRlcyA6IDE7IC8qIGJzX2lu dGVyVGVzICovCisgICAgICAgIHVpbnQ4X3QgYnNfcHZjIDogMTsgLyogYnNfcHZjICovCisKKyAg ICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgc3RhcnRfZnJlcTsgLyogZGZsdF9z dGFydF9mcmVxICovCisgICAgICAgICAgICB1aW50OF90IHN0b3BfZnJlcTsgLyogZGZsdF9zdG9w X2ZyZXEgKi8KKworICAgICAgICAgICAgdWludDhfdCBmcmVxX3NjYWxlOyAvKiBkZmx0X2ZyZXFf c2NhbGUgKi8KKyAgICAgICAgICAgIHVpbnQ4X3QgYWx0ZXJfc2NhbGUgOiAxOyAvKiBkZmx0X2Fs dGVyX3NjYWxlICovCisgICAgICAgICAgICB1aW50OF90IG5vaXNlX3NjYWxlOyAvKiBkZmx0X25v aXNlX3NjYWxlICovCisKKyAgICAgICAgICAgIHVpbnQ4X3QgbGltaXRlcl9iYW5kczsgLyogZGZs dF9saW1pdGVyX2JhbmRzICovCisgICAgICAgICAgICB1aW50OF90IGxpbWl0ZXJfZ2FpbnM7IC8q IGRmbHRfbGltaXRlcl9nYWlucyAqLworICAgICAgICAgICAgdWludDhfdCBpbnRlcnBvbF9mcmVx IDogMTsgLyogZGZsdF9pbnRlcnBvbF9mcmVxICovCisgICAgICAgICAgICB1aW50OF90IHNtb290 aGluZ19tb2RlIDogMTsgLyogZGZsdF9zbW9vdGhpbmdfbW9kZSAqLworICAgICAgICB9IGRmbHQ7 CisgICAgfSBzYnI7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IGZyZXFfcmVzOyAv KiBic0ZyZXFSZXMgKi8KKyAgICAgICAgdWludDhfdCBmaXhlZF9nYWluOyAvKiBic0ZpeGVkR2Fp bkRNWCAqLworICAgICAgICB1aW50OF90IHRlbXBfc2hhcGVfY29uZmlnOyAvKiBic1RlbXBTaGFw ZUNvbmZpZyAqLworICAgICAgICB1aW50OF90IGRlY29ycl9jb25maWc7IC8qIGJzRGVjb3JyQ29u ZmlnICovCisgICAgICAgIHVpbnQ4X3QgaGlnaF9yYXRlX21vZGUgOiAxOyAvKiBic0hpZ2hSYXRl TW9kZSAqLworICAgICAgICB1aW50OF90IHBoYXNlX2NvZGluZyA6IDE7IC8qIGJzUGhhc2VDb2Rp bmcgKi8KKworICAgICAgICB1aW50OF90IG90dHNfYmFuZHNfcGhhc2U7IC8qIGJzT3R0QmFuZHNQ aGFzZSAqLworICAgICAgICB1aW50OF90IHJlc2lkdWFsX2NvZGluZzsgLyogYnNSZXNpZHVhbENv ZGluZyAqLworICAgICAgICB1aW50OF90IHJlc2lkdWFsX2JhbmRzOyAvKiBic1Jlc2lkdWFsQmFu ZHMgKi8KKyAgICAgICAgdWludDhfdCBwc2V1ZG9fbHIgOiAxOyAvKiBic1BzZXVkb0xyICovCisg ICAgICAgIHVpbnQ4X3QgZW52X3F1YW50X21vZGUgOiAxOyAvKiBic0VudlF1YW50TW9kZSAqLwor ICAgIH0gbXBzOworCisgICAgc3RydWN0IHsKKyAgICAgICAgZW51bSBBQUNVc2FjRXh0ZW5zaW9u IHR5cGU7CisgICAgICAgIHVpbnQ4X3QgcGF5bG9hZF9mcmFnOworICAgICAgICB1aW50MzJfdCBk ZWZhdWx0X2xlbjsKKyAgICAgICAgdWludDMyX3QgcGxfZGF0YV9vZmZzZXQ7CisgICAgICAgIHVp bnQ4X3QgKnBsX2RhdGE7CisgICAgfSBleHQ7Cit9IEFBQ1VzYWNFbGVtQ29uZmlnOworCit0eXBl ZGVmIHN0cnVjdCBBQUNVU0FDQ29uZmlnIHsKKyAgICB1aW50OF90IGNvcmVfc2JyX2ZyYW1lX2xl bl9pZHg7IC8qIGNvcmVTYnJGcmFtZUxlbmd0aEluZGV4ICovCisgICAgdWludDhfdCByYXRlX2lk eDsKKyAgICB1aW50MTZfdCBjb3JlX2ZyYW1lX2xlbjsKKyAgICB1aW50MTZfdCBzdHJlYW1faWRl bnRpZmllcjsKKworICAgIEFBQ1VzYWNFbGVtQ29uZmlnIGVsZW1zWzY0XTsKKyAgICBpbnQgbmJf ZWxlbXM7CisKKyAgICBzdHJ1Y3QgeworICAgICAgICB1aW50OF90IG5iX2FsYnVtOworICAgICAg ICBBQUNVU0FDTG91ZG5lc3NJbmZvIGFsYnVtX2luZm9bNjRdOworICAgICAgICB1aW50OF90IG5i X2luZm87CisgICAgICAgIEFBQ1VTQUNMb3VkbmVzc0luZm8gaW5mb1s2NF07CisgICAgfSBsb3Vk bmVzczsKK30gQUFDVVNBQ0NvbmZpZzsKKwogdHlwZWRlZiBzdHJ1Y3QgT3V0cHV0Q29uZmlndXJh dGlvbiB7CiAgICAgTVBFRzRBdWRpb0NvbmZpZyBtNGFjOwogICAgIHVpbnQ4X3QgbGF5b3V0X21h cFtNQVhfRUxFTV9JRCo0XVszXTsKICAgICBpbnQgbGF5b3V0X21hcF90YWdzOwogICAgIEFWQ2hh bm5lbExheW91dCBjaF9sYXlvdXQ7CiAgICAgZW51bSBPQ1N0YXR1cyBzdGF0dXM7CisgICAgQUFD VVNBQ0NvbmZpZyB1c2FjOwogfSBPdXRwdXRDb25maWd1cmF0aW9uOwogCiAvKioKZGlmZiAtLWdp dCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2Fj LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uN2U1MDc3Y2QxOQotLS0g L2Rldi9udWxsCisrKyBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5jCkBAIC0wLDAgKzEsMjA4 IEBACisvKgorICogQUFDIGRlZmluaXRpb25zIGFuZCBzdHJ1Y3R1cmVzCisgKiBDb3B5cmlnaHQg KGMpIDIwMjQgTHlubmUKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgor ICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v cgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91 bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0 ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFO WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJD SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl IEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K KyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdy aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKwor I2luY2x1ZGUgImxpYmF2Y29kZWMvYWFjdGFiLmgiCisjaW5jbHVkZSAiYWFjZGVjX2FjLmgiCisK K3VpbnQzMl90IGZmX2FhY19hY19tYXBfcHJvY2VzcyhBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50 IHJlc2V0LCBpbnQgTikKK3sKKyAgICBmbG9hdCByYXRpbzsKKyAgICBpZiAocmVzZXQpIHsKKyAg ICAgICAgbWVtc2V0KHN0YXRlLT5sYXN0LCAwLCBzaXplb2Yoc3RhdGUtPmxhc3QpKTsKKyAgICAg ICAgc3RhdGUtPmxhc3RfbGVuID0gTjsKKyAgICB9IGVsc2UgaWYgKHN0YXRlLT5sYXN0X2xlbiAh PSBOKSB7CisgICAgICAgIGludCBpOworICAgICAgICB1aW50OF90IGxhc3RbNTEyIC8qIDIwNDgg LyA0ICovXTsKKyAgICAgICAgbWVtY3B5KGxhc3QsIHN0YXRlLT5sYXN0LCBzaXplb2YobGFzdCkp OworCisgICAgICAgIHJhdGlvID0gc3RhdGUtPmxhc3RfbGVuIC8gKGZsb2F0KU47CisgICAgICAg IGZvciAoaSA9IDA7IGkgPCBOLzI7IGkrKykgeworICAgICAgICAgICAgaW50IGsgPSAoaW50KShp ICogcmF0aW8pOworICAgICAgICAgICAgc3RhdGUtPmxhc3RbaV0gPSBsYXN0W2tdOworICAgICAg ICB9CisKKyAgICAgICAgZm9yICg7IGkgPCBGRl9BUlJBWV9FTEVNUyhzdGF0ZS0+bGFzdCk7IGkr KykKKyAgICAgICAgICAgIHN0YXRlLT5sYXN0W2ldID0gMDsKKworICAgICAgICBzdGF0ZS0+bGFz dF9sZW4gPSBOOworICAgIH0KKworICAgIHN0YXRlLT5jdXJbM10gPSAwOworICAgIHN0YXRlLT5j dXJbMl0gPSAwOworICAgIHN0YXRlLT5jdXJbMV0gPSAwOworICAgIHN0YXRlLT5jdXJbMF0gPSAx OworCisgICAgc3RhdGUtPnN0YXRlX3ByZSA9IHN0YXRlLT5sYXN0WzBdIDw8IDEyOworICAgIHJl dHVybiBzdGF0ZS0+bGFzdFswXSA8PCAxMjsKK30KKwordWludDMyX3QgZmZfYWFjX2FjX2dldF9j b250ZXh0KEFBQ0FyaXRoU3RhdGUgKnN0YXRlLCB1aW50MzJfdCBjLCBpbnQgaSwgaW50IE4pCit7 CisgICAgYyA9IHN0YXRlLT5zdGF0ZV9wcmUgPj4gODsKKyAgICBjID0gYyArIChzdGF0ZS0+bGFz dFtpICsgMV0gPDwgOCk7CisgICAgYyA9IChjIDw8IDQpOworICAgIGMgKz0gc3RhdGUtPmN1clsx XTsKKworICAgIHN0YXRlLT5zdGF0ZV9wcmUgPSBjOworCisgICAgaWYgKGkgPiAzICYmCisgICAg ICAgICgoc3RhdGUtPmN1clszXSArIHN0YXRlLT5jdXJbMl0gKyBzdGF0ZS0+Y3VyWzFdKSA8IDUp KQorICAgICAgICByZXR1cm4gYyArIDB4MTAwMDA7CisKKyAgICByZXR1cm4gYzsKK30KKwordWlu dDMyX3QgZmZfYWFjX2FjX2dldF9wayh1aW50MzJfdCBjKQoreworICAgIGludCBpX21pbiA9IC0x OworICAgIGludCBpLCBqOworICAgIGludCBpX21heCA9IEZGX0FSUkFZX0VMRU1TKGZmX2FhY19h Y19sb29rdXBfbSkgLSAxOworICAgIHdoaWxlICgoaV9tYXggLSBpX21pbikgPiAxKSB7CisgICAg ICAgIGkgPSBpX21pbiArICgoaV9tYXggLSBpX21pbikgLyAyKTsKKyAgICAgICAgaiA9IGZmX2Fh Y19hY19oYXNoX21baV07CisgICAgICAgIGlmIChjIDwgKGogPj4gOCkpCisgICAgICAgICAgICBp X21heCA9IGk7CisgICAgICAgIGVsc2UgaWYgKGMgPiAoaiA+PiA4KSkKKyAgICAgICAgICAgIGlf bWluID0gaTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcmV0dXJuIChqICYgMHhGRik7Cisg ICAgfQorICAgIHJldHVybiBmZl9hYWNfYWNfbG9va3VwX21baV9tYXhdOworfQorCit2b2lkIGZm X2FhY19hY191cGRhdGVfY29udGV4dChBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50IGlkeCwKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQxNl90IGEsIHVpbnQxNl90IGIpCit7Cisg ICAgc3RhdGUtPmN1clswXSA9IGEgKyBiICsgMTsKKyAgICBpZiAoc3RhdGUtPmN1clswXSA+IDB4 RikKKyAgICAgICAgc3RhdGUtPmN1clswXSA9IDB4RjsKKworICAgIHN0YXRlLT5jdXJbM10gPSBz dGF0ZS0+Y3VyWzJdOworICAgIHN0YXRlLT5jdXJbMl0gPSBzdGF0ZS0+Y3VyWzFdOworICAgIHN0 YXRlLT5jdXJbMV0gPSBzdGF0ZS0+Y3VyWzBdOworCisgICAgc3RhdGUtPmxhc3RbaWR4XSA9IHN0 YXRlLT5jdXJbMF07Cit9CisKKy8qIEluaXRpYWxpemUgQUMgKi8KK3ZvaWQgZmZfYWFjX2FjX2lu aXQoQUFDQXJpdGggKmFjLCBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBhYy0+bG93ID0gMDsK KyAgICBhYy0+aGlnaCA9IFVJTlQxNl9NQVg7CisgICAgYWMtPnZhbCA9IGdldF9iaXRzKGdiLCAx Nik7Cit9CisKK3VpbnQxNl90IGZmX2FhY19hY19kZWNvZGUoQUFDQXJpdGggKmFjLCBHZXRCaXRD b250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDE2X3QgKmNk ZiwgdWludDE2X3QgY2RmX2xlbikKK3sKKyAgICBpbnQgdmFsID0gYWMtPnZhbDsKKyAgICBpbnQg bG93ID0gYWMtPmxvdzsKKyAgICBpbnQgaGlnaCA9IGFjLT5oaWdoOworCisgICAgaW50IHN5bTsK KyAgICBpbnQgcm5nID0gaGlnaCAtIGxvdyArIDE7CisgICAgaW50IGMgPSAoKCgoaW50KSh2YWwg LSBsb3cgKyAxKSkgPDwgMTQpIC0gKChpbnQpMSkpOworCisgICAgY29uc3QgdWludDE2X3QgKnAg PSBjZGYgLSAxOworCisgICAgLyogT25lIGZvciBlYWNoIHBvc3NpYmxlIENERiBsZW5ndGggaW4g dGhlIHNwZWMgKi8KKyAgICBzd2l0Y2ggKGNkZl9sZW4pIHsKKyAgICBjYXNlIDI6CisgICAgICAg IGlmICgocFsxXSAqIHJuZykgPiBjKQorICAgICAgICAgICAgcCArPSAxOworICAgICAgICBicmVh azsKKyAgICBjYXNlIDQ6CisgICAgICAgIGlmICgocFsyXSAqIHJuZykgPiBjKQorICAgICAgICAg ICAgcCArPSAyOworICAgICAgICBpZiAoKHBbMV0gKiBybmcpID4gYykKKyAgICAgICAgICAgIHAg Kz0gMTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAxNzoKKyAgICAgICAgLyogRmlyc3QgY2hl Y2sgaWYgdGhlIGN1cnJlbnQgcHJvYmFiaWxpdHkgaXMgZXZlbiBtZXQgYXQgYWxsICovCisgICAg ICAgIGlmICgocFsxXSAqIHJuZykgPD0gYykKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBw ICs9IDE7CisgICAgICAgIGZvciAoaW50IGkgPSA4OyBpID49IDE7IGkgPj49IDEpCisgICAgICAg ICAgICBpZiAoKHBbaV0gKiBybmcpID4gYykKKyAgICAgICAgICAgICAgICBwICs9IGk7CisgICAg ICAgIGJyZWFrOworICAgIGNhc2UgMjc6CisgICAgICAgIGlmICgocFsxNl0gKiBybmcpID4gYykK KyAgICAgICAgICAgIHAgKz0gMTY7CisgICAgICAgIGlmICgocFs4XSAqIHJuZykgPiBjKQorICAg ICAgICAgICAgcCArPSA4OworICAgICAgICBpZiAocCAhPSAoY2RmIC0gMSArIDI0KSkKKyAgICAg ICAgICAgIGlmICgocFs0XSAqIHJuZykgPiBjKQorICAgICAgICAgICAgICAgIHAgKz0gNDsKKyAg ICAgICAgaWYgKChwWzJdICogcm5nKSA+IGMpCisgICAgICAgICAgICBwICs9IDI7CisKKyAgICAg ICAgaWYgKHAgIT0gKGNkZiAtIDEgKyAyNCArIDIpKQorICAgICAgICAgICAgaWYgKChwWzFdICog cm5nKSA+IGMpCisgICAgICAgICAgICAgICAgcCArPSAxOworICAgICAgICBicmVhazsKKyAgICBk ZWZhdWx0OgorICAgICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgICAgICAg YXZfYXNzZXJ0MigwKTsKKyAgICB9CisKKyAgICBzeW0gPSAoaW50KSgocHRyZGlmZl90KShwIC0g Y2RmKSkgKyAxOworICAgIGlmIChzeW0pCisgICAgICAgIGhpZ2ggPSBsb3cgKyAoKHJuZyAqIGNk ZltzeW0gLSAxXSkgPj4gMTQpIC0gMTsKKyAgICBsb3cgKz0gKHJuZyAqIGNkZltzeW1dKSA+PiAx NDsKKworICAgIC8qIFRoaXMgbG9vcCBjb3VsZCBiZSBkb25lIGZhc3RlciAqLworICAgIHdoaWxl ICgxKSB7CisgICAgICAgIGlmIChoaWdoIDwgMzI3NjgpIHsKKyAgICAgICAgICAgIDsKKyAgICAg ICAgfSBlbHNlIGlmIChsb3cgPj0gMzI3NjgpIHsKKyAgICAgICAgICAgIHZhbCAtPSAzMjc2ODsK KyAgICAgICAgICAgIGxvdyAtPSAzMjc2ODsKKyAgICAgICAgICAgIGhpZ2ggLT0gMzI3Njg7Cisg ICAgICAgIH0gZWxzZSBpZiAobG93ID49IDE2Mzg0ICYmIGhpZ2ggPCA0OTE1MikgeworICAgICAg ICAgICAgdmFsIC09IDE2Mzg0OworICAgICAgICAgICAgbG93IC09IDE2Mzg0OworICAgICAgICAg ICAgaGlnaCAtPSAxNjM4NDsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGJyZWFrOwor ICAgICAgICB9CisgICAgICAgIGxvdyArPSBsb3c7CisgICAgICAgIGhpZ2ggKz0gaGlnaCArIDE7 CisgICAgICAgIHZhbCA9ICh2YWwgPDwgMSkgfCBnZXRfYml0czEoZ2IpOworICAgIH07CisKKyAg ICBhYy0+bG93ID0gbG93OworICAgIGFjLT5oaWdoID0gaGlnaDsKKyAgICBhYy0+dmFsID0gdmFs OworCisgICAgcmV0dXJuIHN5bTsKK30KKwordm9pZCBmZl9hYWNfYWNfZmluaXNoKEFBQ0FyaXRo U3RhdGUgKnN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgTikKK3sKKyAgICBpbnQgaTsKKworICAgIGZv ciAoaSA9IG9mZnNldDsgaSA8IE4vMjsgaSsrKQorICAgICAgICBzdGF0ZS0+bGFzdFtpXSA9IDE7 CisKKyAgICBmb3IgKDsgaSA8IEZGX0FSUkFZX0VMRU1TKHN0YXRlLT5sYXN0KTsgaSsrKQorICAg ICAgICBzdGF0ZS0+bGFzdFtpXSA9IDA7Cit9CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9h YWNkZWNfYWMuaCBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19hYy5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAwMDAuLjBiOThjMGYwZDkKLS0tIC9kZXYvbnVsbAorKysgYi9saWJh dmNvZGVjL2FhYy9hYWNkZWNfYWMuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogQUFDIGRlZmlu aXRpb25zIGFuZCBzdHJ1Y3R1cmVzCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX0FBQ19B QUNERUNfQUNfSAorI2RlZmluZSBBVkNPREVDX0FBQ19BQUNERUNfQUNfSAorCisjaW5jbHVkZSAi bGliYXZjb2RlYy9nZXRfYml0cy5oIgorCit0eXBlZGVmIHN0cnVjdCBBQUNBcml0aFN0YXRlIHsK KyAgICB1aW50OF90IGxhc3RbNTEyIC8qIDIwNDggLyA0ICovXTsKKyAgICBpbnQgbGFzdF9sZW47 CisgICAgdWludDhfdCBjdXJbNF07CisgICAgdWludDE2X3Qgc3RhdGVfcHJlOworfSBBQUNBcml0 aFN0YXRlOworCit0eXBlZGVmIHN0cnVjdCBBQUNBcml0aCB7CisgICAgdWludDE2X3QgbG93Owor ICAgIHVpbnQxNl90IGhpZ2g7CisgICAgdWludDE2X3QgdmFsOworfSBBQUNBcml0aDsKKworI2Rl ZmluZSBGRl9BQUNfQUNfRVNDQVBFIDE2CisKK3VpbnQzMl90IGZmX2FhY19hY19tYXBfcHJvY2Vz cyhBQUNBcml0aFN0YXRlICpzdGF0ZSwgaW50IHJlc2V0LCBpbnQgbGVuKTsKK3VpbnQzMl90IGZm X2FhY19hY19nZXRfY29udGV4dChBQUNBcml0aFN0YXRlICpzdGF0ZSwgdWludDMyX3Qgb2xkX2Ms IGludCBpZHgsIGludCBsZW4pOwordWludDMyX3QgZmZfYWFjX2FjX2dldF9wayh1aW50MzJfdCBj KTsKKwordm9pZCBmZl9hYWNfYWNfdXBkYXRlX2NvbnRleHQoQUFDQXJpdGhTdGF0ZSAqc3RhdGUs IGludCBpZHgsIHVpbnQxNl90IGEsIHVpbnQxNl90IGIpOwordm9pZCBmZl9hYWNfYWNfaW5pdChB QUNBcml0aCAqYWMsIEdldEJpdENvbnRleHQgKmdiKTsKKwordWludDE2X3QgZmZfYWFjX2FjX2Rl Y29kZShBQUNBcml0aCAqYWMsIEdldEJpdENvbnRleHQgKmdiLAorICAgICAgICAgICAgICAgICAg ICAgICAgICBjb25zdCB1aW50MTZfdCAqY2RmLCB1aW50MTZfdCBjZGZfbGVuKTsKKwordm9pZCBm Zl9hYWNfYWNfZmluaXNoKEFBQ0FyaXRoU3RhdGUgKnN0YXRlLCBpbnQgb2Zmc2V0LCBpbnQgbmIp OworCisjZW5kaWYgLyogQVZDT0RFQ19BQUNERUNfQUNfSCAqLwpkaWZmIC0tZ2l0IGEvbGliYXZj b2RlYy9hYWMvYWFjZGVjX2RzcF90ZW1wbGF0ZS5jIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2Rz cF90ZW1wbGF0ZS5jCmluZGV4IDU5YTY5ZDg4ZjMuLjhkMzFhZjIyZjggMTAwNjQ0Ci0tLSBhL2xp YmF2Y29kZWMvYWFjL2FhY2RlY19kc3BfdGVtcGxhdGUuYworKysgYi9saWJhdmNvZGVjL2FhYy9h YWNkZWNfZHNwX3RlbXBsYXRlLmMKQEAgLTg4LDggKzg4LDggQEAgc3RhdGljIHZvaWQgQUFDX1JF TkFNRShhcHBseV9taWRfc2lkZV9zdGVyZW8pKEFBQ0RlY0NvbnRleHQgKmFjLCBDaGFubmVsRWxl bWVudAogICAgIElOVEZMT0FUICpjaDEgPSBjcGUtPmNoWzFdLkFBQ19SRU5BTUUoY29lZmZzKTsK ICAgICBjb25zdCB1aW50MTZfdCAqb2Zmc2V0cyA9IGljcy0+c3diX29mZnNldDsKICAgICBmb3Ig KGludCBnID0gMDsgZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykgewotICAgICAgICBm b3IgKGludCBzZmIgPSAwOyBzZmIgPCBpY3MtPm1heF9zZmI7IHNmYisrKSB7Ci0gICAgICAgICAg ICBjb25zdCBpbnQgaWR4ID0gZyppY3MtPm1heF9zZmIgKyBzZmI7CisgICAgICAgIGZvciAoaW50 IHNmYiA9IDA7IHNmYiA8IGNwZS0+bWF4X3NmYl9zdGU7IHNmYisrKSB7CisgICAgICAgICAgICBj b25zdCBpbnQgaWR4ID0gZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiOwogICAgICAgICAgICAgaWYg KGNwZS0+bXNfbWFza1tpZHhdICYmCiAgICAgICAgICAgICAgICAgY3BlLT5jaFswXS5iYW5kX3R5 cGVbaWR4XSA8IE5PSVNFX0JUICYmCiAgICAgICAgICAgICAgICAgY3BlLT5jaFsxXS5iYW5kX3R5 cGVbaWR4XSA8IE5PSVNFX0JUKSB7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNf bGF0bS5oIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX2xhdG0uaAppbmRleCBlNDBhMmZlMWE3Li4w NDdjMTFlMGZiIDEwMDY0NAotLS0gYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNfbGF0bS5oCisrKyBi L2xpYmF2Y29kZWMvYWFjL2FhY2RlY19sYXRtLmgKQEAgLTU2LDcgKzU2LDggQEAgc3RhdGljIGlu dCBsYXRtX2RlY29kZV9hdWRpb19zcGVjaWZpY19jb25maWcoc3RydWN0IExBVE1Db250ZXh0ICps YXRtY3R4LAogewogICAgIEFBQ0RlY0NvbnRleHQgKmFjICAgICA9ICZsYXRtY3R4LT5hYWNfY3R4 OwogICAgIEFWQ29kZWNDb250ZXh0ICphdmN0eCA9IGFjLT5hdmN0eDsKLSAgICBNUEVHNEF1ZGlv Q29uZmlnIG00YWMgPSB7IDAgfTsKKyAgICBPdXRwdXRDb25maWd1cmF0aW9uIG9jID0geyAwIH07 CisgICAgTVBFRzRBdWRpb0NvbmZpZyAqbTRhYyA9ICZvYy5tNGFjOwogICAgIEdldEJpdENvbnRl eHQgZ2JjOwogICAgIGludCBjb25maWdfc3RhcnRfYml0ICA9IGdldF9iaXRzX2NvdW50KGdiKTsK ICAgICBpbnQgc3luY19leHRlbnNpb24gICAgPSAwOwpAQCAtNzYsNyArNzcsNyBAQCBzdGF0aWMg aW50IGxhdG1fZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhzdHJ1Y3QgTEFUTUNvbnRleHQg KmxhdG1jdHgsCiAgICAgaWYgKGdldF9iaXRzX2xlZnQoZ2IpIDw9IDApCiAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOwogCi0gICAgYml0c19jb25zdW1lZCA9IGRlY29kZV9hdWRp b19zcGVjaWZpY19jb25maWdfZ2IoTlVMTCwgYXZjdHgsICZtNGFjLAorICAgIGJpdHNfY29uc3Vt ZWQgPSBkZWNvZGVfYXVkaW9fc3BlY2lmaWNfY29uZmlnX2diKE5VTEwsIGF2Y3R4LCAmb2MsCiAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJmdiYywg Y29uZmlnX3N0YXJ0X2JpdCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBzeW5jX2V4dGVuc2lvbik7CiAKQEAgLTg4LDExICs4OSwxMiBAQCBzdGF0 aWMgaW50IGxhdG1fZGVjb2RlX2F1ZGlvX3NwZWNpZmljX2NvbmZpZyhzdHJ1Y3QgTEFUTUNvbnRl eHQgKmxhdG1jdHgsCiAgICAgICBhc2NsZW4gPSBiaXRzX2NvbnN1bWVkOwogCiAgICAgaWYgKCFs YXRtY3R4LT5pbml0aWFsaXplZCB8fAotICAgICAgICBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0 ZSAhPSBtNGFjLnNhbXBsZV9yYXRlIHx8Ci0gICAgICAgIGFjLT5vY1sxXS5tNGFjLmNoYW5fY29u ZmlnICE9IG00YWMuY2hhbl9jb25maWcpIHsKKyAgICAgICAgYWMtPm9jWzFdLm00YWMuc2FtcGxl X3JhdGUgIT0gbTRhYy0+c2FtcGxlX3JhdGUgfHwKKyAgICAgICAgYWMtPm9jWzFdLm00YWMuY2hh bl9jb25maWcgIT0gbTRhYy0+Y2hhbl9jb25maWcpIHsKIAogICAgICAgICBpZiAobGF0bWN0eC0+ aW5pdGlhbGl6ZWQpIHsKLSAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJh dWRpbyBjb25maWcgY2hhbmdlZCAoc2FtcGxlX3JhdGU9JWQsIGNoYW5fY29uZmlnPSVkKVxuIiwg bTRhYy5zYW1wbGVfcmF0ZSwgbTRhYy5jaGFuX2NvbmZpZyk7CisgICAgICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19JTkZPLCAiYXVkaW8gY29uZmlnIGNoYW5nZWQgKHNhbXBsZV9yYXRlPSVk LCBjaGFuX2NvbmZpZz0lZClcbiIsCisgICAgICAgICAgICAgICAgICAgbTRhYy0+c2FtcGxlX3Jh dGUsIG00YWMtPmNoYW5fY29uZmlnKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0RFQlVHLCAiaW5pdGlhbGl6aW5nIGxhdG1jdHhcbiIpOwogICAg ICAgICB9CkBAIC0yODAsNyArMjgyLDcgQEAgc3RhdGljIGludCBsYXRtX2RlY29kZV9mcmFtZShB VkNvZGVjQ29udGV4dCAqYXZjdHgsIEFWRnJhbWUgKm91dCwKICAgICAgICAgfSBlbHNlIHsKICAg ICAgICAgICAgIHB1c2hfb3V0cHV0X2NvbmZpZ3VyYXRpb24oJmxhdG1jdHgtPmFhY19jdHgpOwog ICAgICAgICAgICAgaWYgKChlcnIgPSBkZWNvZGVfYXVkaW9fc3BlY2lmaWNfY29uZmlnKAotICAg ICAgICAgICAgICAgICAgICAmbGF0bWN0eC0+YWFjX2N0eCwgYXZjdHgsICZsYXRtY3R4LT5hYWNf Y3R4Lm9jWzFdLm00YWMsCisgICAgICAgICAgICAgICAgICAgICZsYXRtY3R4LT5hYWNfY3R4LCBh dmN0eCwgJmxhdG1jdHgtPmFhY19jdHgub2NbMV0sCiAgICAgICAgICAgICAgICAgICAgIGF2Y3R4 LT5leHRyYWRhdGEsIGF2Y3R4LT5leHRyYWRhdGFfc2l6ZSo4TEwsIDEpKSA8IDApIHsKICAgICAg ICAgICAgICAgICBwb3Bfb3V0cHV0X2NvbmZpZ3VyYXRpb24oJmxhdG1jdHgtPmFhY19jdHgpOwog ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9h YWNkZWNfbHBkLmMgYi9saWJhdmNvZGVjL2FhYy9hYWNkZWNfbHBkLmMKbmV3IGZpbGUgbW9kZSAx MDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uNzk2ZWRkMmFiNQotLS0gL2Rldi9udWxsCisrKyBiL2xp YmF2Y29kZWMvYWFjL2FhY2RlY19scGQuYwpAQCAtMCwwICsxLDE5OCBAQAorLyoKKyAqIENvcHly aWdodCAoYykgMjAyNCBMeW5uZSA8ZGV2QGx5bm5lLmVlPgorICoKKyAqIFRoaXMgZmlsZSBpcyBw YXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0 aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMi4xIG9mIHRo ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq IEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs LAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg d2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYWxvbmcgd2l0 aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqIEZvdW5kYXRp b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgMDIx MTAtMTMwMSBVU0EKKyAqLworCisjaW5jbHVkZSAiYWFjZGVjX2xwZC5oIgorI2luY2x1ZGUgImFh Y2RlY191c2FjLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy91bmFyeS5oIgorCitjb25zdCB1aW50 OF90IGZmX2FhY19scGRfbW9kZV90YWJbMzJdWzRdID0geworICAgIHsgMCwgMCwgMCwgMCB9LAor ICAgIHsgMSwgMCwgMCwgMCB9LAorICAgIHsgMCwgMSwgMCwgMCB9LAorICAgIHsgMSwgMSwgMCwg MCB9LAorICAgIHsgMCwgMCwgMSwgMCB9LAorICAgIHsgMSwgMCwgMSwgMCB9LAorICAgIHsgMCwg MSwgMSwgMCB9LAorICAgIHsgMSwgMSwgMSwgMCB9LAorICAgIHsgMCwgMCwgMCwgMSB9LAorICAg IHsgMSwgMCwgMCwgMSB9LAorICAgIHsgMCwgMSwgMCwgMSB9LAorICAgIHsgMSwgMSwgMCwgMSB9 LAorICAgIHsgMCwgMCwgMSwgMSB9LAorICAgIHsgMSwgMCwgMSwgMSB9LAorICAgIHsgMCwgMSwg MSwgMSB9LAorICAgIHsgMSwgMSwgMSwgMSB9LAorICAgIHsgMiwgMiwgMCwgMCB9LAorICAgIHsg MiwgMiwgMSwgMCB9LAorICAgIHsgMiwgMiwgMCwgMSB9LAorICAgIHsgMiwgMiwgMSwgMSB9LAor ICAgIHsgMCwgMCwgMiwgMiB9LAorICAgIHsgMSwgMCwgMiwgMiB9LAorICAgIHsgMCwgMSwgMiwg MiB9LAorICAgIHsgMSwgMSwgMiwgMiB9LAorICAgIHsgMiwgMiwgMiwgMiB9LAorICAgIHsgMywg MywgMywgMyB9LAorICAgIC8qIExhcmdlciB2YWx1ZXMgYXJlIHJlc2VydmVkLCBidXQgcGVybWl0 IHRoZW0gZm9yIHJlc2lsaWVuY2UgKi8KKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAs IDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKKyAgICB7 IDAsIDAsIDAsIDAgfSwKKyAgICB7IDAsIDAsIDAsIDAgfSwKK307CisKK3N0YXRpYyB2b2lkIHBh cnNlX3FuKEdldEJpdENvbnRleHQgKmdiLCBpbnQgKnFuLCBpbnQgbmtfbW9kZSwgaW50IG5vX3Fu KQoreworICAgIGlmIChua19tb2RlID09IDEpIHsKKyAgICAgICAgZm9yIChpbnQgayA9IDA7IGsg PCBub19xbjsgaysrKSB7CisgICAgICAgICAgICBxbltrXSA9IGdldF91bmFyeShnYiwgMCwgSU5U MzJfTUFYKTsgLy8gVE9ETzogZmluZCBwcm9wZXIgcmFuZ2VzCisgICAgICAgICAgICBpZiAocW5b a10pCisgICAgICAgICAgICAgICAgcW5ba10rKzsKKyAgICAgICAgfQorICAgICAgICByZXR1cm47 CisgICAgfQorCisgICAgZm9yIChpbnQgayA9IDA7IGsgPCBub19xbjsgaysrKQorICAgICAgICBx bltrXSA9IGdldF9iaXRzKGdiLCAyKSArIDI7CisKKyAgICBpZiAobmtfbW9kZSA9PSAyKSB7Cisg ICAgICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAgICAgICAgaWYg KHFuW2tdID4gNCkgeworICAgICAgICAgICAgICAgIHFuW2tdID0gZ2V0X3VuYXJ5KGdiLCAwLCBJ TlQzMl9NQVgpOzsKKyAgICAgICAgICAgICAgICBpZiAocW5ba10pCisgICAgICAgICAgICAgICAg ICAgIHFuW2tdICs9IDQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJu OworICAgIH0KKworICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAg ICBpZiAocW5ba10gPiA0KSB7CisgICAgICAgICAgICBpbnQgcW5fZXh0ID0gZ2V0X3VuYXJ5KGdi LCAwLCBJTlQzMl9NQVgpOzsKKyAgICAgICAgICAgIHN3aXRjaCAocW5fZXh0KSB7CisgICAgICAg ICAgICBjYXNlIDA6IHFuW2tdID0gNTsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDE6IHFuW2td ID0gNjsgYnJlYWs7CisgICAgICAgICAgICBjYXNlIDI6IHFuW2tdID0gMDsgYnJlYWs7CisgICAg ICAgICAgICBkZWZhdWx0OiBxbltrXSA9IHFuX2V4dCArIDQ7IGJyZWFrOworICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorfQorCitzdGF0aWMgaW50IHBhcnNlX2NvZGVib29rX2lkeChH ZXRCaXRDb250ZXh0ICpnYiwgdWludDMyX3QgKmt2LAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgaW50IG5rX21vZGUsIGludCBub19xbikKK3sKKyAgICBpbnQgaWR4LCBuLCBuazsKKwor ICAgIGludCBxblsyXTsKKyAgICBwYXJzZV9xbihnYiwgcW4sIG5rX21vZGUsIG5vX3FuKTsKKwor ICAgIGZvciAoaW50IGsgPSAwOyBrIDwgbm9fcW47IGsrKykgeworICAgICAgICBpZiAocW5ba10g PiA0KSB7CisgICAgICAgICAgICBuayA9IChxbltrXSAtIDMpIC8gMjsKKyAgICAgICAgICAgIG4g PSBxbltrXSAtIG5rKjI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBuayA9IDA7Cisg ICAgICAgICAgICBuID0gcW5ba107CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZHggPSBnZXRf Yml0cyhnYiwgNCpuKTsKKworICAgIGlmIChuayA+IDApCisgICAgICAgIGZvciAoaW50IGkgPSAw OyBpIDwgODsgaSsrKQorICAgICAgICAgICAga3ZbaV0gPSBnZXRfYml0cyhnYiwgbmspOworCisg ICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9hYWNfcGFyc2VfZmFjX2RhdGEoQUFDVXNhY0VsZW1E YXRhICpjZSwgR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIGlu dCB1c2VfZ2FpbiwgaW50IGxlbikKK3sKKyAgICBpbnQgcmV0OworICAgIGlmICh1c2VfZ2FpbikK KyAgICAgICAgY2UtPmZhYy5nYWluID0gZ2V0X2JpdHMoZ2IsIDcpOworCisgICAgZm9yIChpbnQg aSA9IDA7IGkgPCBsZW4vODsgaSsrKSB7CisgICAgICAgIHJldCA9IHBhcnNlX2NvZGVib29rX2lk eChnYiwgY2UtPmZhYy5rdltpXSwgMSwgMSk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAg ICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworaW50IGZmX2Fh Y19sZHBfcGFyc2VfY2hhbm5lbF9zdHJlYW0oQUFDRGVjQ29udGV4dCAqYWMsIEFBQ1VTQUNDb25m aWcgKnVzYWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNVc2FjRWxl bURhdGEgKmNlLCBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBpbnQgazsKKyAgICBjb25zdCB1 aW50OF90ICptb2Q7CisgICAgaW50IGZpcnN0X2xkcF9mbGFnOworICAgIGludCBmaXJzdF90Y3hf ZmxhZzsKKworICAgIGNlLT5sZHAuYWNlbHBfY29yZV9tb2RlID0gZ2V0X2JpdHMoZ2IsIDMpOwor ICAgIGNlLT5sZHAubHBkX21vZGUgPSBnZXRfYml0cyhnYiwgNSk7CisKKyAgICBjZS0+bGRwLmJw Zl9jb250cm9sX2luZm8gPSBnZXRfYml0czEoZ2IpOworICAgIGNlLT5sZHAuY29yZV9tb2RlX2xh c3QgPSBnZXRfYml0czEoZ2IpOworICAgIGNlLT5sZHAuZmFjX2RhdGFfcHJlc2VudCA9IGdldF9i aXRzMShnYik7CisKKyAgICBtb2QgPSBmZl9hYWNfbHBkX21vZGVfdGFiW2NlLT5sZHAubHBkX21v ZGVdOworCisgICAgZmlyc3RfbGRwX2ZsYWcgPSAhY2UtPmxkcC5jb3JlX21vZGVfbGFzdDsKKyAg ICBmaXJzdF90Y3hfZmxhZyA9IDE7CisgICAgaWYgKGZpcnN0X2xkcF9mbGFnKQorICAgICAgICBj ZS0+bGRwLmxhc3RfbHBkX21vZGUgPSAtMTsgLyogbGFzdF9sZHBfbW9kZSBpcyBhICoqU1RBVEVG VUwqKiB2YWx1ZSAqLworCisgICAgayA9IDA7CisgICAgd2hpbGUgKGsgPCAwKSB7CisgICAgICAg IGlmICghaykgeworICAgICAgICAgICAgaWYgKGNlLT5sZHAuY29yZV9tb2RlX2xhc3QgJiYgY2Ut PmxkcC5mYWNfZGF0YV9wcmVzZW50KQorICAgICAgICAgICAgICAgIGZmX2FhY19wYXJzZV9mYWNf ZGF0YShjZSwgZ2IsIDAsIHVzYWMtPmNvcmVfZnJhbWVfbGVuLzgpOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgaWYgKCFjZS0+bGRwLmxhc3RfbHBkX21vZGUgJiYgbW9kW2tdID4gMCB8 fAorICAgICAgICAgICAgICAgIGNlLT5sZHAubGFzdF9scGRfbW9kZSAmJiAhbW9kW2tdKQorICAg ICAgICAgICAgICAgIGZmX2FhY19wYXJzZV9mYWNfZGF0YShjZSwgZ2IsIDAsIHVzYWMtPmNvcmVf ZnJhbWVfbGVuLzgpOworICAgICAgICB9CisgICAgICAgIGlmICghbW9kW2tdKSB7CisvLyAgICAg ICAgICAgIHBhcnNlX2FjZWxwX2NvZGluZygpOworICAgICAgICAgICAgY2UtPmxkcC5sYXN0X2xw ZF9tb2RlID0gMDsKKyAgICAgICAgICAgIGsrKzsKKyAgICAgICAgfSBlbHNlIHsKKy8vICAgICAg ICAgICAgcGFyc2VfdGN4X2NvZGluZygpOworICAgICAgICAgICAgY2UtPmxkcC5sYXN0X2xwZF9t b2RlID0gbW9kW2tdOworICAgICAgICAgICAgayArPSAoMSA8PCAobW9kW2tdIC0gMSkpOworICAg ICAgICAgICAgZmlyc3RfdGN4X2ZsYWcgPSAwOworICAgICAgICB9CisgICAgfQorCisvLyAgICBw YXJzZV9scGNfZGF0YShmaXJzdF9scGRfZmxhZyk7CisKKyAgICBpZiAoIWNlLT5sZHAuY29yZV9t b2RlX2xhc3QgJiYgY2UtPmxkcC5mYWNfZGF0YV9wcmVzZW50KSB7CisgICAgICAgIHVpbnQxNl90 IGxlbl84ID0gdXNhYy0+Y29yZV9mcmFtZV9sZW4gLyA4OworICAgICAgICB1aW50MTZfdCBsZW5f MTYgPSB1c2FjLT5jb3JlX2ZyYW1lX2xlbiAvIDE2OworICAgICAgICB1aW50MTZfdCBmYWNfbGVu ID0gZ2V0X2JpdHMxKGdiKSAvKiBzaG9ydF9mYWNfZmxhZyAqLyA/IGxlbl84IDogbGVuXzE2Owor ICAgICAgICBpbnQgcmV0ID0gZmZfYWFjX3BhcnNlX2ZhY19kYXRhKGNlLCBnYiwgMSwgZmFjX2xl bik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9 CisKKyAgICByZXR1cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19s cGQuaCBiL2xpYmF2Y29kZWMvYWFjL2FhY2RlY19scGQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp bmRleCAwMDAwMDAwMDAwLi45MjRmZjc1ZTUyCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2Rl Yy9hYWMvYWFjZGVjX2xwZC5oCkBAIC0wLDAgKzEsMzMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMp IDIwMjQgTHlubmUgPGRldkBseW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBG Rm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli dXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5z ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcg aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1 dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5 IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP U0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v cmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVn OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMu LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEg VVNBCisgKi8KKworI2lmbmRlZiBBVkNPREVDX0FBQ19BQUNERUNfTFBEX0gKKyNkZWZpbmUgQVZD T0RFQ19BQUNfQUFDREVDX0xQRF9ICisKKyNpbmNsdWRlICJhYWNkZWMuaCIKKyNpbmNsdWRlICJs aWJhdmNvZGVjL2dldF9iaXRzLmgiCisKK2ludCBmZl9hYWNfcGFyc2VfZmFjX2RhdGEoQUFDVXNh Y0VsZW1EYXRhICpjZSwgR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgIGludCB1c2VfZ2FpbiwgaW50IGxlbik7CisKK2ludCBmZl9hYWNfbGRwX3BhcnNlX2NoYW5u ZWxfc3RyZWFtKEFBQ0RlY0NvbnRleHQgKmFjLCBBQUNVU0FDQ29uZmlnICp1c2FjLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDVXNhY0VsZW1EYXRhICpjZSwgR2V0Qml0 Q29udGV4dCAqZ2IpOworCisjZW5kaWYgLyogQVZDT0RFQ19BQUNfQUFDREVDX0xQRF9IICovCmRp ZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhYy9hYWNkZWNfdXNhYy5jIGIvbGliYXZjb2RlYy9hYWMv YWFjZGVjX3VzYWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41NDU3 OTU1YTJmCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZjb2RlYy9hYWMvYWFjZGVjX3VzYWMuYwpA QCAtMCwwICsxLDE1OTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlubmUgPGRldkBs eW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgImFhY2RlY191c2FjLmgiCisjaW5jbHVkZSAiYWFjZGVjX3RhYi5oIgorI2luY2x1ZGUgImFh Y2RlY19scGQuaCIKKyNpbmNsdWRlICJhYWNkZWNfYWMuaCIKKworI2luY2x1ZGUgImxpYmF2Y29k ZWMvYWFjdGFiLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2 Y29kZWMvbXBlZzRhdWRpby5oIgorI2luY2x1ZGUgImxpYmF2Y29kZWMvdW5hcnkuaCIKKworLyog TnVtYmVyIG9mIHNjYWxlZmFjdG9yIGJhbmRzIHBlciBjb21wbGV4IHByZWRpY3Rpb24gYmFuZCwg ZXF1YWwgdG8gMi4gKi8KKyNkZWZpbmUgU0ZCX1BFUl9QUkVEX0JBTkQgMgorCitzdGF0aWMgaW5s aW5lIHVpbnQzMl90IGdldF9lc2NhcGVkX3ZhbHVlKEdldEJpdENvbnRleHQgKmdiLCBpbnQgbmIx LCBpbnQgbmIyLCBpbnQgbmIzKQoreworICAgIHVpbnQzMl90IHZhbCA9IGdldF9iaXRzKGdiLCBu YjEpLCB2YWwyOworICAgIGlmICh2YWwgPCAoKDEgPDwgbmIxKSAtIDEpKQorICAgICAgICByZXR1 cm4gdmFsOworCisgICAgdmFsICs9IHZhbDIgPSBnZXRfYml0cyhnYiwgbmIyKTsKKyAgICBpZiAo dmFsMiA9PSAoKDEgPDwgbmIyKSAtIDEpKQorICAgICAgICB2YWwgKz0gZ2V0X2JpdHMoZ2IsIG5i Myk7CisKKyAgICByZXR1cm4gdmFsOworfQorCisvKiBJU08vSUVDIDIzMDAzLTMsIFRhYmxlIDc0 IOKAlCBic091dHB1dENoYW5uZWxQb3MgKi8KK3N0YXRpYyBjb25zdCBlbnVtIEFWQ2hhbm5lbCB1 c2FjX2NoX3Bvc190b19hdls2NF0gPSB7CisgICAgWzBdID0gQVZfQ0hBTl9GUk9OVF9MRUZULAor ICAgIFsxXSA9IEFWX0NIQU5fRlJPTlRfUklHSFQsCisgICAgWzJdID0gQVZfQ0hBTl9GUk9OVF9D RU5URVIsCisgICAgWzNdID0gQVZfQ0hBTl9MT1dfRlJFUVVFTkNZLAorICAgIFs0XSA9IEFWX0NI QU5fU0lERV9MRUZULCAvLyArMTEwIGRlZ3JlZXMsIExzfExTfGtBdWRpb0NoYW5uZWxMYWJlbF9M ZWZ0U3Vycm91bmQKKyAgICBbNV0gPSBBVl9DSEFOX1NJREVfUklHSFQsIC8vIC0xMTAgZGVncmVl cywgUnN8UlN8a0F1ZGlvQ2hhbm5lbExhYmVsX1JpZ2h0U3Vycm91bmQKKyAgICBbNl0gPSBBVl9D SEFOX0ZST05UX0xFRlRfT0ZfQ0VOVEVSLAorICAgIFs3XSA9IEFWX0NIQU5fRlJPTlRfUklHSFRf T0ZfQ0VOVEVSLAorICAgIFs4XSA9IEFWX0NIQU5fQkFDS19MRUZULCAvLyArMTM1IGRlZ3JlZXMs IExzcnxCTHxrQXVkaW9DaGFubmVsTGFiZWxfUmVhclN1cnJvdW5kTGVmdAorICAgIFs5XSA9IEFW X0NIQU5fQkFDS19SSUdIVCwgLy8gLTEzNSBkZWdyZWVzLCBSc3J8QlJ8a0F1ZGlvQ2hhbm5lbExh YmVsX1JlYXJTdXJyb3VuZFJpZ2h0CisgICAgWzEwXSA9IEFWX0NIQU5fQkFDS19DRU5URVIsCisg ICAgWzExXSA9IEFWX0NIQU5fU1VSUk9VTkRfRElSRUNUX0xFRlQsCisgICAgWzEyXSA9IEFWX0NI QU5fU1VSUk9VTkRfRElSRUNUX1JJR0hULAorICAgIFsxM10gPSBBVl9DSEFOX1NVUlJPVU5EX0xF RlQsIC8vICs5MCBkZWdyZWVzLCBMc3N8U0x8a0F1ZGlvQ2hhbm5lbExhYmVsX0xlZnRTaWRlU3Vy cm91bmQKKyAgICBbMTRdID0gQVZfQ0hBTl9TVVJST1VORF9SSUdIVCwgLy8gLTkwIGRlZ3JlZXMs IFJzc3xTUnxrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHRTaWRlU3Vycm91bmQKKyAgICBbMTVdID0g QVZfQ0hBTl9XSURFX0xFRlQsIC8vICs2MCBkZWdyZWVzLCBMd3xGTHd8a0F1ZGlvQ2hhbm5lbExh YmVsX0xlZnRXaWRlCisgICAgWzE2XSA9IEFWX0NIQU5fV0lERV9SSUdIVCwgLy8gLTYwIGRlZ3Jl ZXMsIFJ3fEZSd3xrQXVkaW9DaGFubmVsTGFiZWxfUmlnaHRXaWRlCisgICAgWzE3XSA9IEFWX0NI QU5fVE9QX0ZST05UX0xFRlQsCisgICAgWzE4XSA9IEFWX0NIQU5fVE9QX0ZST05UX1JJR0hULAor ICAgIFsxOV0gPSBBVl9DSEFOX1RPUF9GUk9OVF9DRU5URVIsCisgICAgWzIwXSA9IEFWX0NIQU5f VE9QX0JBQ0tfTEVGVCwKKyAgICBbMjFdID0gQVZfQ0hBTl9UT1BfQkFDS19SSUdIVCwKKyAgICBb MjJdID0gQVZfQ0hBTl9UT1BfQkFDS19DRU5URVIsCisgICAgWzIzXSA9IEFWX0NIQU5fVE9QX1NJ REVfTEVGVCwKKyAgICBbMjRdID0gQVZfQ0hBTl9UT1BfU0lERV9SSUdIVCwKKyAgICBbMjVdID0g QVZfQ0hBTl9UT1BfQ0VOVEVSLAorICAgIFsyNl0gPSBBVl9DSEFOX0xPV19GUkVRVUVOQ1lfMiwK KyAgICBbMjddID0gQVZfQ0hBTl9CT1RUT01fRlJPTlRfTEVGVCwKKyAgICBbMjhdID0gQVZfQ0hB Tl9CT1RUT01fRlJPTlRfUklHSFQsCisgICAgWzI5XSA9IEFWX0NIQU5fQk9UVE9NX0ZST05UX0NF TlRFUiwKKyAgICBbMzBdID0gQVZfQ0hBTl9UT1BfU1VSUk9VTkRfTEVGVCwKKyAgICBbMzFdID0g QVZfQ0hBTl9UT1BfU1VSUk9VTkRfUklHSFQsCit9OworCitzdGF0aWMgaW50IGRlY29kZV9sb3Vk bmVzc19pbmZvKEFBQ0RlY0NvbnRleHQgKmFjLCBBQUNVU0FDTG91ZG5lc3NJbmZvICppbmZvLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAg ICBpbmZvLT5kcmNfc2V0X2lkID0gZ2V0X2JpdHMoZ2IsIDYpOworICAgIGluZm8tPmRvd25taXhf aWQgPSBnZXRfYml0cyhnYiwgNyk7CisKKyAgICBpZiAoKGluZm8tPnNhbXBsZV9wZWFrLnByZXNl bnQgPSBnZXRfYml0czEoZ2IpKSkgLyogc2FtcGxlUGVha0xldmVsUHJlc2VudCAqLworICAgICAg ICBpbmZvLT5zYW1wbGVfcGVhay5sdmwgPSBnZXRfYml0cyhnYiwgMTIpOworCisgICAgaWYgKChp bmZvLT50cnVlX3BlYWsucHJlc2VudCA9IGdldF9iaXRzMShnYikpKSB7IC8qIHRydWVQZWFrTGV2 ZWxQcmVzZW50ICovCisgICAgICAgIGluZm8tPnRydWVfcGVhay5sdmwgPSBnZXRfYml0cyhnYiwg MTIpOworICAgICAgICBpbmZvLT50cnVlX3BlYWsubWVhc3VyZW1lbnQgPSBnZXRfYml0cyhnYiwg NCk7CisgICAgICAgIGluZm8tPnRydWVfcGVhay5yZWxpYWJpbGl0eSA9IGdldF9iaXRzKGdiLCAy KTsKKyAgICB9CisKKyAgICBpbmZvLT5uYl9tZWFzdXJlbWVudHMgPSBnZXRfYml0cyhnYiwgNCk7 CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBpbmZvLT5uYl9tZWFzdXJlbWVudHM7IGkrKykgewor ICAgICAgICBpbmZvLT5tZWFzdXJlbWVudHNbaV0ubWV0aG9kX2RlZiA9IGdldF9iaXRzKGdiLCA0 KTsKKyAgICAgICAgaW5mby0+bWVhc3VyZW1lbnRzW2ldLm1ldGhvZF92YWwgPSBnZXRfdW5hcnko Z2IsIDAsIDgpOworICAgICAgICBpbmZvLT5tZWFzdXJlbWVudHNbaV0ubWVhc3VyZW1lbnQgPSBn ZXRfYml0cyhnYiwgNCk7CisgICAgICAgIGluZm8tPm1lYXN1cmVtZW50c1tpXS5yZWxpYWJpbGl0 eSA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGludCBkZWNvZGVfbG91ZG5lc3Nfc2V0KEFBQ0RlY0NvbnRleHQgKmFjLCBBQUNVU0FDQ29uZmln ICp1c2FjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdldEJpdENvbnRleHQgKmdi KQoreworICAgIGludCByZXQ7CisKKyAgICB1c2FjLT5sb3VkbmVzcy5uYl9hbGJ1bSA9IGdldF9i aXRzKGdiLCA2KTsgLyogbG91ZG5lc3NJbmZvQWxidW1Db3VudCAqLworICAgIHVzYWMtPmxvdWRu ZXNzLm5iX2luZm8gPSBnZXRfYml0cyhnYiwgNik7IC8qIGxvdWRuZXNzSW5mb0NvdW50ICovCisK KyAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzYWMtPmxvdWRuZXNzLm5iX2FsYnVtOyBpKyspIHsK KyAgICAgICAgcmV0ID0gZGVjb2RlX2xvdWRuZXNzX2luZm8oYWMsICZ1c2FjLT5sb3VkbmVzcy5h bGJ1bV9pbmZvW2ldLCBnYik7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0 dXJuIHJldDsKKyAgICB9CisKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHVzYWMtPmxvdWRuZXNz Lm5iX2luZm87IGkrKykgeworICAgICAgICByZXQgPSBkZWNvZGVfbG91ZG5lc3NfaW5mbyhhYywg JnVzYWMtPmxvdWRuZXNzLmluZm9baV0sIGdiKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGlmIChnZXRfYml0czEoZ2IpKSB7IC8q IGxvdWRuZXNzSW5mb1NldEV4dFByZXNlbnQgKi8KKyAgICAgICAgZW51bSBBQUNVU0FDTG91ZG5l c3NFeHQgdHlwZTsKKyAgICAgICAgd2hpbGUgKCh0eXBlID0gZ2V0X2JpdHMoZ2IsIDQpKSAhPSBV TklEUkNMT1VERVhUX1RFUk0pIHsKKyAgICAgICAgICAgIHVpbnQ4X3Qgc2l6ZV9iaXRzID0gZ2V0 X2JpdHMoZ2IsIDQpICsgNDsKKyAgICAgICAgICAgIHVpbnQ4X3QgYml0X3NpemUgPSBnZXRfYml0 cyhnYiwgc2l6ZV9iaXRzKSArIDE7CisgICAgICAgICAgICBzd2l0Y2ggKHR5cGUpIHsKKyAgICAg ICAgICAgIGNhc2UgVU5JRFJDTE9VREVYVF9FUToKKyAgICAgICAgICAgICAgICBhdnByaXZfcmVw b3J0X21pc3NpbmdfZmVhdHVyZShhYy0+YXZjdHgsICJsb3VkbmVzc0luZm9WMSIpOworICAgICAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgIGRlZmF1 bHQ6CisgICAgICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBiaXRfc2l6ZTsgaSsrKQor ICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMxKGdiKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfdXNh Y19zYnJfZGF0YShBQUNVc2FjRWxlbUNvbmZpZyAqZSwgR2V0Qml0Q29udGV4dCAqZ2IpCit7Cisg ICAgdWludDhfdCBoZWFkZXJfZXh0cmExOworICAgIHVpbnQ4X3QgaGVhZGVyX2V4dHJhMjsKKwor ICAgIGUtPnNici5oYXJtb25pY19zYnIgPSBnZXRfYml0czEoZ2IpOyAvKiBoYXJtb25pY1NCUiAq LworICAgIGUtPnNici5ic19pbnRlcnRlcyA9IGdldF9iaXRzMShnYik7IC8qIGJzX2ludGVyVGVz ICovCisgICAgZS0+c2JyLmJzX3B2YyA9IGdldF9iaXRzMShnYik7IC8qIGJzX3B2YyAqLworCisg ICAgZS0+c2JyLmRmbHQuc3RhcnRfZnJlcSA9IGdldF9iaXRzKGdiLCA0KTsgLyogZGZsdF9zdGFy dF9mcmVxICovCisgICAgZS0+c2JyLmRmbHQuc3RvcF9mcmVxID0gZ2V0X2JpdHMoZ2IsIDQpOyAv KiBkZmx0X3N0b3BfZnJlcSAqLworCisgICAgaGVhZGVyX2V4dHJhMSA9IGdldF9iaXRzMShnYik7 IC8qIGRmbHRfaGVhZGVyX2V4dHJhMSAqLworICAgIGhlYWRlcl9leHRyYTIgPSBnZXRfYml0czEo Z2IpOyAvKiBkZmx0X2hlYWRlcl9leHRyYTIgKi8KKworICAgIGUtPnNici5kZmx0LmZyZXFfc2Nh bGUgPSAyOworICAgIGUtPnNici5kZmx0LmFsdGVyX3NjYWxlID0gMTsKKyAgICBlLT5zYnIuZGZs dC5ub2lzZV9zY2FsZSA9IDI7CisgICAgaWYgKGhlYWRlcl9leHRyYTEpIHsKKyAgICAgICAgZS0+ c2JyLmRmbHQuZnJlcV9zY2FsZSA9IGdldF9iaXRzKGdiLCAyKTsgLyogZGZsdF9mcmVxX3NjYWxl ICovCisgICAgICAgIGUtPnNici5kZmx0LmFsdGVyX3NjYWxlID0gZ2V0X2JpdHMxKGdiKTsgLyog ZGZsdF9hbHRlcl9zY2FsZSAqLworICAgICAgICBlLT5zYnIuZGZsdC5ub2lzZV9zY2FsZSA9IGdl dF9iaXRzKGdiLCAyKTsgLyogZGZsdF9ub2lzZV9zY2FsZSAqLworICAgIH0KKworICAgIGUtPnNi ci5kZmx0LmxpbWl0ZXJfYmFuZHMgPSAyOworICAgIGUtPnNici5kZmx0LmxpbWl0ZXJfZ2FpbnMg PSAyOworICAgIGUtPnNici5kZmx0LmludGVycG9sX2ZyZXEgPSAxOworICAgIGUtPnNici5kZmx0 LnNtb290aGluZ19tb2RlID0gMTsKKyAgICBpZiAoaGVhZGVyX2V4dHJhMikgeworICAgICAgICBl LT5zYnIuZGZsdC5saW1pdGVyX2JhbmRzID0gZ2V0X2JpdHMoZ2IsIDIpOyAvKiBkZmx0X2xpbWl0 ZXJfYmFuZHMgKi8KKyAgICAgICAgZS0+c2JyLmRmbHQubGltaXRlcl9nYWlucyA9IGdldF9iaXRz KGdiLCAyKTsgLyogZGZsdF9saW1pdGVyX2dhaW5zICovCisgICAgICAgIGUtPnNici5kZmx0Lmlu dGVycG9sX2ZyZXEgPSBnZXRfYml0czEoZ2IpOyAvKiBkZmx0X2ludGVycG9sX2ZyZXEgKi8KKyAg ICAgICAgZS0+c2JyLmRmbHQuc21vb3RoaW5nX21vZGUgPSBnZXRfYml0czEoZ2IpOyAvKiBkZmx0 X3Ntb290aGluZ19tb2RlICovCisgICAgfQorfQorCitzdGF0aWMgdm9pZCBkZWNvZGVfdXNhY19l bGVtZW50X2NvcmUoQUFDVXNhY0VsZW1Db25maWcgKmUsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgaW50IHNicl9yYXRpbykKK3sKKyAgICBlLT50d19tZGN0ID0gZ2V0X2Jp dHMxKGdiKTsgLyogdHdfbWRjdCAqLworICAgIGUtPm5vaXNlX2ZpbGwgPSBnZXRfYml0czEoZ2Ip OworICAgIGUtPnNici5yYXRpbyA9IHNicl9yYXRpbzsKK30KKworc3RhdGljIHZvaWQgZGVjb2Rl X3VzYWNfZWxlbWVudF9wYWlyKEFBQ1VzYWNFbGVtQ29uZmlnICplLCBHZXRCaXRDb250ZXh0ICpn YikKK3sKKyAgICBlLT5zdGVyZW9fY29uZmlnX2luZGV4ID0gMDsKKyAgICBpZiAoZS0+c2JyLnJh dGlvKSB7CisgICAgICAgIGRlY29kZV91c2FjX3Nicl9kYXRhKGUsIGdiKTsKKyAgICAgICAgZS0+ c3RlcmVvX2NvbmZpZ19pbmRleCA9IGdldF9iaXRzKGdiLCAyKTsKKyAgICB9CisgICAgaWYgKGUt PnN0ZXJlb19jb25maWdfaW5kZXgpIHsKKyAgICAgICAgZS0+bXBzLmZyZXFfcmVzID0gZ2V0X2Jp dHMoZ2IsIDMpOyAvKiBic0ZyZXFSZXMgKi8KKyAgICAgICAgZS0+bXBzLmZpeGVkX2dhaW4gPSBn ZXRfYml0cyhnYiwgMyk7IC8qIGJzRml4ZWRHYWluRE1YICovCisgICAgICAgIGUtPm1wcy50ZW1w X3NoYXBlX2NvbmZpZyA9IGdldF9iaXRzKGdiLCAyKTsgLyogYnNUZW1wU2hhcGVDb25maWcgKi8K KyAgICAgICAgZS0+bXBzLmRlY29ycl9jb25maWcgPSBnZXRfYml0cyhnYiwgMik7IC8qIGJzRGVj b3JyQ29uZmlnICovCisgICAgICAgIGUtPm1wcy5oaWdoX3JhdGVfbW9kZSA9IGdldF9iaXRzMShn Yik7IC8qIGJzSGlnaFJhdGVNb2RlICovCisgICAgICAgIGUtPm1wcy5waGFzZV9jb2RpbmcgPSBn ZXRfYml0czEoZ2IpOyAvKiBic1BoYXNlQ29kaW5nICovCisKKyAgICAgICAgaWYgKGdldF9iaXRz MShnYikpIC8qIGJzT3R0QmFuZHNQaGFzZVByZXNlbnQgKi8KKyAgICAgICAgICAgIGUtPm1wcy5v dHRzX2JhbmRzX3BoYXNlID0gZ2V0X2JpdHMoZ2IsIDUpOyAvKiBic090dEJhbmRzUGhhc2UgKi8K KworICAgICAgICBlLT5tcHMucmVzaWR1YWxfY29kaW5nID0gZS0+c3RlcmVvX2NvbmZpZ19pbmRl eCA+PSAyOyAvKiBic1Jlc2lkdWFsQ29kaW5nICovCisgICAgICAgIGlmIChlLT5tcHMucmVzaWR1 YWxfY29kaW5nKSB7CisgICAgICAgICAgICBlLT5tcHMucmVzaWR1YWxfYmFuZHMgPSBnZXRfYml0 cyhnYiwgNSk7IC8qIGJzUmVzaWR1YWxCYW5kcyAqLworICAgICAgICAgICAgZS0+bXBzLnBzZXVk b19sciA9IGdldF9iaXRzMShnYik7IC8qIGJzUHNldWRvTHIgKi8KKyAgICAgICAgfQorICAgICAg ICBpZiAoZS0+bXBzLnRlbXBfc2hhcGVfY29uZmlnID09IDIpCisgICAgICAgICAgICBlLT5tcHMu ZW52X3F1YW50X21vZGUgPSBnZXRfYml0czEoZ2IpOyAvKiBic0VudlF1YW50TW9kZSAqLworICAg IH0KK30KKworc3RhdGljIGludCBkZWNvZGVfdXNhY19leHRlbnNpb24oQUFDRGVjQ29udGV4dCAq YWMsIEFBQ1VzYWNFbGVtQ29uZmlnICplLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgR2V0Qml0Q29udGV4dCAqZ2IpCit7CisgICAgaW50IGxlbiA9IDAsIGV4dF9jb25maWdfbGVu OworCisgICAgZS0+ZXh0LnR5cGUgPSBnZXRfZXNjYXBlZF92YWx1ZShnYiwgNCwgOCwgMTYpOyAv KiB1c2FjRXh0RWxlbWVudFR5cGUgKi8KKyAgICBleHRfY29uZmlnX2xlbiA9IGdldF9lc2NhcGVk X3ZhbHVlKGdiLCA0LCA4LCAxNik7IC8qIHVzYWNFeHRFbGVtZW50Q29uZmlnTGVuZ3RoICovCisK KyAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgLyogdXNhY0V4dEVsZW1lbnREZWZhdWx0TGVuZ3RoUHJl c2VudCAqLworICAgICAgICBsZW4gPSBnZXRfZXNjYXBlZF92YWx1ZShnYiwgOCwgMTYsIDApICsg MTsKKworICAgIGUtPmV4dC5kZWZhdWx0X2xlbiA9IGxlbjsKKyAgICBlLT5leHQucGF5bG9hZF9m cmFnID0gZ2V0X2JpdHMxKGdiKTsgLyogdXNhY0V4dEVsZW1lbnRQYXlsb2FkRnJhZyAqLworCisg ICAgYXZfbG9nKGFjLT5hdmN0eCwgQVZfTE9HX0RFQlVHLCAiRXh0ZW5zaW9uIHByZXNlbnQ6IHR5 cGUgJWksIGxlbiAlaVxuIiwKKyAgICAgICAgICAgZS0+ZXh0LnR5cGUsIGV4dF9jb25maWdfbGVu KTsKKworICAgIHN3aXRjaCAoZS0+ZXh0LnR5cGUpIHsKKyNpZiAwIC8qIFNraXAgdW5zdXBwb3J0 ZWQgdmFsdWVzICovCisgICAgY2FzZSBJRF9FWFRfRUxFX01QRUdTOgorICAgICAgICBicmVhazsK KyAgICBjYXNlIElEX0VYVF9FTEVfU0FPQzoKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBJRF9F WFRfRUxFX1VOSV9EUkM6CisgICAgICAgIGJyZWFrOworI2VuZGlmCisgICAgY2FzZSBJRF9FWFRf RUxFX0ZJTEw6CisgICAgICAgIGJyZWFrOyAvKiBUaGlzIGlzIHdoYXQgdGhlIHNwZWMgZG9lcyAq LworICAgIGNhc2UgSURfRVhUX0VMRV9BVURJT1BSRVJPTEw6CisgICAgICAgIC8qIE5vIGNvbmZp Z3VyYXRpb24gbmVlZGVkIC0gZmFsbHRocm91Z2ggKGxlbiBzaG91bGQgYmUgMCkgKi8KKyAgICBk ZWZhdWx0OgorICAgICAgICBza2lwX2JpdHMoZ2IsIDgqZXh0X2NvbmZpZ19sZW4pOworICAgICAg ICBicmVhazsKKyAgICB9OworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9hYWNfdXNhY19y ZXNldF9zdGF0ZShBQUNEZWNDb250ZXh0ICphYywgT3V0cHV0Q29uZmlndXJhdGlvbiAqb2MpCit7 CisgICAgQUFDVVNBQ0NvbmZpZyAqdXNhYyA9ICZvYy0+dXNhYzsKKyAgICBpbnQgZWxlbV9pZFsz IC8qIFNDRSwgQ1BFLCBMRkUgKi9dID0geyAwLCAwLCAwIH07CisKKyAgICAvKiBJbml0aWFsaXpl IHN0YXRlICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1c2FjLT5uYl9lbGVtczsgaSsrKSB7 CisgICAgICAgIEFBQ1VzYWNFbGVtQ29uZmlnICplID0gJnVzYWMtPmVsZW1zW2ldOworICAgICAg ICBpZiAoZS0+dHlwZSA9PSBJRF9VU0FDX1NDRSB8fCBlLT50eXBlID09IElEX1VTQUNfQ1BFKSB7 CisgICAgICAgICAgICBDaGFubmVsRWxlbWVudCAqY2hlOworICAgICAgICAgICAgZW51bSBSYXdE YXRhQmxvY2tUeXBlIHR5cGU7CisgICAgICAgICAgICBpbnQgaWQ7CisgICAgICAgICAgICBpZiAo ZS0+dHlwZSA9PSBJRF9VU0FDX1NDRSkgeworICAgICAgICAgICAgICAgIHR5cGUgPSBUWVBFX1ND RTsKKyAgICAgICAgICAgICAgICBpZCA9IGVsZW1faWRbMF0rKzsKKyAgICAgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICAgICAgdHlwZSA9IFRZUEVfQ1BFOworICAgICAgICAgICAgICAgIGlk ID0gZWxlbV9pZFsxXSsrOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBjaGUgPSBmZl9h YWNfZ2V0X2NoZShhYywgdHlwZSwgaWQpOworICAgICAgICAgICAgaWYgKGNoZSkgeworICAgICAg ICAgICAgICAgIGNoZS0+Y2hbMF0udWUubm9pc2Uuc2VlZCA9IDB4MzAzOTsKKyAgICAgICAgICAg ICAgICBpZiAoZS0+dHlwZSA9PSBJRF9VU0FDX0NQRSkKKyAgICAgICAgICAgICAgICAgICAgY2hl LT5jaFsxXS51ZS5ub2lzZS5zZWVkID0gMHgxMDkzMjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg fQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKiBVc2FjQ29uZmlnICovCitpbnQgZmZf YWFjX3VzYWNfY29uZmlnX2RlY29kZShBQUNEZWNDb250ZXh0ICphYywgQVZDb2RlY0NvbnRleHQg KmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2Is IE91dHB1dENvbmZpZ3VyYXRpb24gKm9jLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg aW50IGNoYW5uZWxfY29uZmlnKQoreworICAgIGludCByZXQsIGlkeDsKKyAgICB1aW50OF90IGZy ZXFfaWR4OworICAgIHVpbnQ4X3QgY2hhbm5lbF9jb25maWdfaWR4OworICAgIGludCBuYl9lbGVt ZW50czsKKyAgICBpbnQgc2FtcGxlcmF0ZTsKKyAgICBpbnQgc2JyX3JhdGlvOworICAgIE1QRUc0 QXVkaW9Db25maWcgKm00YWMgPSAmb2MtPm00YWM7CisgICAgQUFDVVNBQ0NvbmZpZyAqdXNhYyA9 ICZvYy0+dXNhYzsKKyAgICBpbnQgZWxlbV9pZFszIC8qIFNDRSwgQ1BFLCBMRkUgKi9dOworCisg ICAgdWludDhfdCBsYXlvdXRfbWFwW01BWF9FTEVNX0lEKjRdWzNdOworCisgICAgZnJlcV9pZHgg PSBnZXRfYml0cyhnYiwgNSk7IC8qIHVzYWNTYW1wbGluZ0ZyZXF1ZW5jeUluZGV4ICovCisgICAg aWYgKGZyZXFfaWR4ID09IDB4MWYpIHsKKyAgICAgICAgc2FtcGxlcmF0ZSA9IGdldF9iaXRzKGdi LCAyNCk7IC8qIHVzYWNTYW1wbGluZ0ZyZXF1ZW5jeSAqLworCisgICAgICAgIC8qIFRyeSB0byBt YXRjaCB1cCBhbiBpbmRleCBmb3IgdGhlIGN1c3RvbSBzYW1wbGUgcmF0ZS4KKyAgICAgICAgICog VE9ETzogbm90IHN1cmUgaWYgY29ycmVjdCAqLworICAgICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8 IC8qIEZGX0FSUkFZX0VMRU1TKGZmX2FhY191c2FjX3NhbXBsZXJhdGUpICovIDMyOyBpZHgrKykg eworICAgICAgICAgICAgaWYgKGZmX2FhY191c2FjX3NhbXBsZXJhdGVbaWR4XSA+PSBzYW1wbGVy YXRlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIGlkeCA9IEZG TUlOKGlkeCwgLyogRkZfQVJSQVlfRUxFTVMoZmZfYWFjX3VzYWNfc2FtcGxlcmF0ZSkgKi8gMzIg LSAxKTsKKyAgICAgICAgdXNhYy0+cmF0ZV9pZHggPSBpZHg7CisgICAgfSBlbHNlIHsKKyAgICAg ICAgc2FtcGxlcmF0ZSA9IGZmX2FhY191c2FjX3NhbXBsZXJhdGVbZnJlcV9pZHhdOworICAgICAg ICBpZiAoc2FtcGxlcmF0ZSA8IDApCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwp OworICAgICAgICB1c2FjLT5yYXRlX2lkeCA9IGZyZXFfaWR4OworICAgIH0KKworICAgIG00YWMt PnNhbXBsZV9yYXRlID0gYXZjdHgtPnNhbXBsZV9yYXRlID0gc2FtcGxlcmF0ZTsKKworICAgIHVz YWMtPmNvcmVfc2JyX2ZyYW1lX2xlbl9pZHggPSBnZXRfYml0cyhnYiwgMyk7IC8qIGNvcmVTYnJG cmFtZUxlbmd0aEluZGV4ICovCisgICAgbTRhYy0+ZnJhbWVfbGVuZ3RoX3Nob3J0ID0gdXNhYy0+ Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAwIHx8CisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAyOworCisgICAgdXNhYy0+Y29y ZV9mcmFtZV9sZW4gPSAodXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAwIHx8CisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgdXNhYy0+Y29yZV9zYnJfZnJhbWVfbGVuX2lkeCA9PSAy KSA/IDc2OCA6IDEwMjQ7CisKKyAgICBzYnJfcmF0aW8gPSB1c2FjLT5jb3JlX3Nicl9mcmFtZV9s ZW5faWR4ID09IDIgPyAyIDoKKyAgICAgICAgICAgICAgICB1c2FjLT5jb3JlX3Nicl9mcmFtZV9s ZW5faWR4ID09IDMgPyAzIDoKKyAgICAgICAgICAgICAgICB1c2FjLT5jb3JlX3Nicl9mcmFtZV9s ZW5faWR4ID09IDQgPyAxIDoKKyAgICAgICAgICAgICAgICAwOworCisgICAgY2hhbm5lbF9jb25m aWdfaWR4ID0gZ2V0X2JpdHMoZ2IsIDUpOyAvKiBjaGFubmVsQ29uZmlndXJhdGlvbkluZGV4ICov CisgICAgaWYgKCFjaGFubmVsX2NvbmZpZ19pZHgpIHsKKyAgICAgICAgLyogVXNhY0NoYW5uZWxD b25maWcoKSAqLworICAgICAgICB1aW50OF90IG5iX2NoYW5uZWxzID0gZ2V0X2VzY2FwZWRfdmFs dWUoZ2IsIDUsIDgsIDE2KTsgLyogbnVtT3V0Q2hhbm5lbHMgKi8KKyAgICAgICAgaWYgKG5iX2No YW5uZWxzID49IDY0KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKworICAg ICAgICBhdl9jaGFubmVsX2xheW91dF91bmluaXQoJmFjLT5vY1sxXS5jaF9sYXlvdXQpOworCisg ICAgICAgIHJldCA9IGF2X2NoYW5uZWxfbGF5b3V0X2N1c3RvbV9pbml0KCZhYy0+b2NbMV0uY2hf bGF5b3V0LCBuYl9jaGFubmVscyk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAg cmV0dXJuIHJldDsKKworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG5iX2NoYW5uZWxzOyBp KyspIHsKKyAgICAgICAgICAgIEFWQ2hhbm5lbEN1c3RvbSAqY20gPSAmYWMtPm9jWzFdLmNoX2xh eW91dC51Lm1hcFtpXTsKKyAgICAgICAgICAgIGNtLT5pZCA9IHVzYWNfY2hfcG9zX3RvX2F2W2dl dF9iaXRzKGdiLCA1KV07IC8qIGJzT3V0cHV0Q2hhbm5lbFBvcyAqLworICAgICAgICAgICAgaWYg KGNtLT5pZCA9PSBBVl9DSEFOX05PTkUpCisgICAgICAgICAgICAgICAgY20tPmlkID0gQVZfQ0hB Tl9VTktOT1dOOworICAgICAgICB9CisKKyAgICAgICAgcmV0ID0gYXZfY2hhbm5lbF9sYXlvdXRf cmV0eXBlKCZhYy0+b2NbMV0uY2hfbGF5b3V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgQVZfQ0hBTk5FTF9PUkRFUl9OQVRJVkUsCisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBVl9DSEFOTkVMX0xBWU9VVF9SRVRZUEVfRkxBR19DQU5PTklD QUwpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAg ICAgICAgcmV0ID0gYXZfY2hhbm5lbF9sYXlvdXRfY29weSgmYXZjdHgtPmNoX2xheW91dCwgJmFj LT5vY1sxXS5jaF9sYXlvdXQpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJl dHVybiByZXQ7CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKChyZXQgPSBmZl9hYWNfc2V0X2Rl ZmF1bHRfY2hhbm5lbF9jb25maWcoYWMsIGF2Y3R4LCBsYXlvdXRfbWFwLAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmbmJfZWxlbWVudHMsIGNo YW5uZWxfY29uZmlnX2lkeCkpKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAg ICAvKiBVc2FjRGVjb2RlckNvbmZpZyAqLworICAgIGVsZW1faWRbMF0gPSBlbGVtX2lkWzFdID0g ZWxlbV9pZFsyXSA9IDA7CisgICAgdXNhYy0+bmJfZWxlbXMgPSBnZXRfZXNjYXBlZF92YWx1ZShn YiwgNCwgOCwgMTYpICsgMTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXNhYy0+bmJfZWxl bXM7IGkrKykgeworICAgICAgICBBQUNVc2FjRWxlbUNvbmZpZyAqZSA9ICZ1c2FjLT5lbGVtc1tp XTsKKyAgICAgICAgbWVtc2V0KGUsIDAsIHNpemVvZigqZSkpOworCisgICAgICAgIGUtPnR5cGUg PSBnZXRfYml0cyhnYiwgMik7IC8qIHVzYWNFbGVtZW50VHlwZSAqLworICAgICAgICBhdl9sb2co YWMtPmF2Y3R4LCBBVl9MT0dfREVCVUcsICJFbGVtZW50IHByZXNlbnQ6IGlkeCAlaSwgdHlwZSAl aVxuIiwKKyAgICAgICAgICAgICAgIGksIGUtPnR5cGUpOworCisgICAgICAgIHN3aXRjaCAoZS0+ dHlwZSkgeworICAgICAgICBjYXNlIElEX1VTQUNfU0NFOiAvKiBTQ0UgKi8KKyAgICAgICAgICAg IC8qIFVzYWNDb3JlQ29uZmlnICovCisgICAgICAgICAgICBkZWNvZGVfdXNhY19lbGVtZW50X2Nv cmUoZSwgZ2IsIHNicl9yYXRpbyk7CisgICAgICAgICAgICBpZiAoZS0+c2JyLnJhdGlvID4gMCkK KyAgICAgICAgICAgICAgICBkZWNvZGVfdXNhY19zYnJfZGF0YShlLCBnYik7CisgICAgICAgICAg ICBsYXlvdXRfbWFwW2ldWzBdID0gVFlQRV9TQ0U7CisgICAgICAgICAgICBsYXlvdXRfbWFwW2ld WzFdID0gaTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMl0gPSBBQUNfQ0hBTk5FTF9GUk9O VDsKKyAgICAgICAgICAgIGVsZW1faWRbMF0rKzsKKworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGNhc2UgSURfVVNBQ19DUEU6IC8qIFVzYWNDaGFubmVsUGFpckVsZW1lbnRDb25mICovCisg ICAgICAgICAgICAvKiBVc2FjQ29yZUNvbmZpZyAqLworICAgICAgICAgICAgZGVjb2RlX3VzYWNf ZWxlbWVudF9jb3JlKGUsIGdiLCBzYnJfcmF0aW8pOworICAgICAgICAgICAgZGVjb2RlX3VzYWNf ZWxlbWVudF9wYWlyKGUsIGdiKTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMF0gPSBUWVBF X0NQRTsKKyAgICAgICAgICAgIGxheW91dF9tYXBbaV1bMV0gPSBpOworICAgICAgICAgICAgbGF5 b3V0X21hcFtpXVsyXSA9IEFBQ19DSEFOTkVMX0ZST05UOworICAgICAgICAgICAgZWxlbV9pZFsx XSsrOworCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRF9VU0FDX0xGRTogLyog TEZFICovCisgICAgICAgICAgICBlbGVtX2lkWzJdKys7CisgICAgICAgICAgICBhdnByaXZfcmVw b3J0X21pc3NpbmdfZmVhdHVyZShhYy0+YXZjdHgsICJBQUMgVVNBQyBMRkUiKTsKKyAgICAgICAg ICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAgY2FzZSBJRF9VU0FDX0VY VDogLyogRVhUICovCisgICAgICAgICAgICByZXQgPSBkZWNvZGVfdXNhY19leHRlbnNpb24oYWMs IGUsIGdiKTsKKyAgICAgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVy biByZXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfTsKKyAgICB9CisKKyAgICByZXQg PSBmZl9hYWNfb3V0cHV0X2NvbmZpZ3VyZShhYywgbGF5b3V0X21hcCwgZWxlbV9pZFswXSArIGVs ZW1faWRbMV0gKyBlbGVtX2lkWzJdLCBPQ19HTE9CQUxfSERSLCAwKTsKKyAgICBpZiAocmV0IDwg MCkgeworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuYWJsZSB0byBwYXJz ZSBjaGFubmVsIGNvbmZpZyFcbiIpOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0KKworICAg IGlmIChnZXRfYml0czEoZ2IpKSB7IC8qIHVzYWNDb25maWdFeHRlbnNpb25QcmVzZW50ICovCisg ICAgICAgIGludCBpbnZhbGlkOworICAgICAgICBpbnQgbmJfZXh0ZW5zaW9ucyA9IGdldF9lc2Nh cGVkX3ZhbHVlKGdiLCAyLCA0LCA4KSArIDE7IC8qIG51bUNvbmZpZ0V4dGVuc2lvbnMgKi8KKyAg ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuYl9leHRlbnNpb25zOyBpKyspIHsKKyAgICAgICAg ICAgIGludCB0eXBlID0gZ2V0X2VzY2FwZWRfdmFsdWUoZ2IsIDQsIDgsIDE2KTsKKyAgICAgICAg ICAgIGludCBsZW4gPSBnZXRfZXNjYXBlZF92YWx1ZShnYiwgNCwgOCwgMTYpOworICAgICAgICAg ICAgc3dpdGNoICh0eXBlKSB7CisgICAgICAgICAgICBjYXNlIElEX0NPTkZJR19FWFRfTE9VRE5F U1NfSU5GTzoKKyAgICAgICAgICAgICAgICByZXQgPSBkZWNvZGVfbG91ZG5lc3Nfc2V0KGFjLCB1 c2FjLCBnYik7CisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAg ICAgIHJldHVybiByZXQ7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNl IElEX0NPTkZJR19FWFRfU1RSRUFNX0lEOgorICAgICAgICAgICAgICAgIHVzYWMtPnN0cmVhbV9p ZGVudGlmaWVyID0gZ2V0X2JpdHMoZ2IsIDE2KTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgSURfQ09ORklHX0VYVF9GSUxMOiAvKiBmYWxsdGhyb3VnaCAqLworICAg ICAgICAgICAgICAgIGludmFsaWQgPSAwOworICAgICAgICAgICAgICAgIHdoaWxlIChsZW4tLSkg eworICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0X2JpdHMoZ2IsIDgpICE9IDB4QTUpCisgICAg ICAgICAgICAgICAgICAgICAgICBpbnZhbGlkKys7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgICAgIGlmIChpbnZhbGlkKQorICAgICAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCBmaWxsIGJ5dGVzOiAlaVxuIiwKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgIGludmFsaWQpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICB3aGlsZSAobGVuLS0pCisgICAgICAgICAg ICAgICAgICAgIHNraXBfYml0cyhnYiwgOCk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXQgPSBmZl9hYWNfdXNhY19yZXNl dF9zdGF0ZShhYywgb2MpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICByZXR1cm4gcmV0Owor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgZGVjb2RlX3VzYWNfc2NhbGVfZmFjdG9y cyhBQUNEZWNDb250ZXh0ICphYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBTaW5nbGVDaGFubmVsRWxlbWVudCAqc2NlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIEdldEJpdENvbnRleHQgKmdiLCB1aW50OF90IGdsb2JhbF9nYWluKQoreworICAg IEluZGl2aWR1YWxDaGFubmVsU3RyZWFtICppY3MgPSAmc2NlLT5pY3M7CisKKyAgICAvKiBEZWNv ZGUgYWxsIHNjYWxlZmFjdG9ycy4gKi8KKyAgICBpbnQgb2Zmc2V0X3NmID0gZ2xvYmFsX2dhaW47 CisgICAgZm9yIChpbnQgZyA9IDA7IGcgPCBpY3MtPm51bV93aW5kb3dfZ3JvdXBzOyBnKyspIHsK KyAgICAgICAgZm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgaWNzLT5tYXhfc2ZiOyBzZmIrKykgewor ICAgICAgICAgICAgLyogRmlyc3QgY29lZmZpY2llbnQgaXMganVzdCB0aGUgZ2xvYmFsIGdhaW4g Ki8KKyAgICAgICAgICAgIGlmICghZyAmJiAhc2ZiKSB7CisgICAgICAgICAgICAgICAgLyogVGhl IGNhbm5vbmljYWwgcmVwcmVzZW50YXRpb24gb2YgcXVhbnRpemVkIHNjYWxlZmFjdG9ycworICAg ICAgICAgICAgICAgICAqIGluIHRoZSBzcGVjIGlzIHdpdGggMTAwIHN1YnRyYWN0ZWQuICovCisg ICAgICAgICAgICAgICAgc2NlLT5zZm9bMF0gPSBvZmZzZXRfc2YgLSAxMDA7CisgICAgICAgICAg ICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIG9mZnNldF9zZiAr PSBnZXRfdmxjMihnYiwgZmZfdmxjX3NjYWxlZmFjdG9ycywgNywgMykgLSBTQ0FMRV9ESUZGX1pF Uk87CisgICAgICAgICAgICBpZiAob2Zmc2V0X3NmID4gMjU1VSkgeworICAgICAgICAgICAgICAg IGF2X2xvZyhhYy0+YXZjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAg IlNjYWxlZmFjdG9yICglZCkgb3V0IG9mIHJhbmdlLlxuIiwgb2Zmc2V0X3NmKTsKKyAgICAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIH0KKworICAg ICAgICAgICAgc2NlLT5zZm9bZyppY3MtPm1heF9zZmIgKyBzZmJdID0gb2Zmc2V0X3NmIC0gMTAw OworICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKKy8qKgorICogRGVjb2Rl IGFuZCBkZXF1YW50aXplIGFyaXRobWV0aWNhbGx5IGNvZGVkLCB1bmlmb3JtbHkgcXVhbnRpemVk IHZhbHVlCisgKgorICogQHBhcmFtICAgY29lZiAgICAgICAgICAgIGFycmF5IG9mIGRlcXVhbnRp emVkLCBzY2FsZWQgc3BlY3RyYWwgZGF0YQorICogQHBhcmFtICAgc2YgICAgICAgICAgICAgIGFy cmF5IG9mIHNjYWxlZmFjdG9ycyBvciBpbnRlbnNpdHkgc3RlcmVvIHBvc2l0aW9ucworICoKKyAq IEByZXR1cm4gIFJldHVybnMgZXJyb3Igc3RhdHVzLiAwIC0gT0ssICEwIC0gZXJyb3IKKyAqLwor c3RhdGljIGludCBkZWNvZGVfc3BlY3RydW1fYW5kX2RlcXVhbnRfYWMoQUFDRGVjQ29udGV4dCAq cywgZmxvYXQgY29lZlsxMDI0XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEdldEJpdENvbnRleHQgKmdiLCBjb25zdCBmbG9hdCBzZlsxMjBdLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDQXJpdGhTdGF0ZSAqc3RhdGUsIGlu dCByZXNldCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVpbnQx Nl90IGxlbiwgdWludDE2X3QgTikKK3sKKyAgICBBQUNBcml0aCBhYzsKKyAgICBpbnQgaSwgYSwg YjsKKyAgICB1aW50MzJfdCBjOworCisgICAgaW50IGdiX2NvdW50OworICAgIEdldEJpdENvbnRl eHQgZ2IyOworCisgICAgZmZfYWFjX2FjX2luaXQoJmFjLCBnYik7CisgICAgYyA9IGZmX2FhY19h Y19tYXBfcHJvY2VzcyhzdGF0ZSwgcmVzZXQsIE4pOworCisgICAgLyogQmFja3VwIHJlYWRlciBm b3Igcm9sbGluZyBiYWNrIGJ5IDE0IGJpdHMgYXQgdGhlIGVuZCAqLworICAgIGdiMiA9IChHZXRC aXRDb250ZXh0KSpnYjsKKyAgICBnYl9jb3VudCA9IGdldF9iaXRzX2NvdW50KCZnYjIpOworCisg ICAgZm9yIChpID0gMDsgaSA8IGxlbi8yOyBpKyspIHsKKyAgICAgICAgLyogTVNCICovCisgICAg ICAgIGludCBsdmwsIGVzY19uYiwgbTsKKyAgICAgICAgYyA9IGZmX2FhY19hY19nZXRfY29udGV4 dChzdGF0ZSwgYywgaSwgTik7CisgICAgICAgIGZvciAobHZsPWVzY19uYj0wOzspIHsKKyAgICAg ICAgICAgIHVpbnQzMl90IHBraSA9IGZmX2FhY19hY19nZXRfcGsoYyArIChlc2NfbmIgPDwgMTcp KTsKKyAgICAgICAgICAgIG0gPSBmZl9hYWNfYWNfZGVjb2RlKCZhYywgJmdiMiwgZmZfYWFjX2Fj X21zYl9jZGZzW3BraV0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRl9BUlJB WV9FTEVNUyhmZl9hYWNfYWNfbXNiX2NkZnNbcGtpXSkpOworICAgICAgICAgICAgaWYgKG0gPCBG Rl9BQUNfQUNfRVNDQVBFKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgbHZs Kys7CisKKyAgICAgICAgICAgIC8qIENhcmdvLWN1bHRlZCB2YWx1ZS4gKi8KKyAgICAgICAgICAg IGlmIChsdmwgPiAyMykKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwor CisgICAgICAgICAgICBpZiAoKGVzY19uYiA9IGx2bCkgPiA3KQorICAgICAgICAgICAgICAgIGVz Y19uYiA9IDc7CisgICAgICAgIH0KKworICAgICAgICBiID0gbSA+PiAyOworICAgICAgICBhID0g bSAtIChiIDw8IDIpOworCisgICAgICAgIC8qIEFSSVRIX1NUT1AgZGV0ZWN0aW9uICovCisgICAg ICAgIGlmICghbSkgeworICAgICAgICAgICAgaWYgKGVzY19uYikKKyAgICAgICAgICAgICAgICBi cmVhazsKKyAgICAgICAgICAgIGEgPSBiID0gMDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIExT QiAqLworICAgICAgICBmb3IgKGludCBsID0gbHZsOyBsID4gMDsgbC0tKSB7CisgICAgICAgICAg ICBpbnQgbHNiaWR4ID0gIWEgPyAxIDogKCFiID8gMCA6IDIpOworICAgICAgICAgICAgdWludDhf dCByID0gZmZfYWFjX2FjX2RlY29kZSgmYWMsICZnYjIsIGZmX2FhY19hY19sc2JfY2Rmc1tsc2Jp ZHhdLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGRl9BUlJBWV9F TEVNUyhmZl9hYWNfYWNfbHNiX2NkZnNbbHNiaWR4XSkpOworICAgICAgICAgICAgYSA9IChhIDw8 IDEpIHwgKHIgJiAxKTsKKyAgICAgICAgICAgIGIgPSAoYiA8PCAxKSB8ICgociA+PiAxKSAmIDEp OworICAgICAgICB9CisKKyAgICAgICAgLyogRGVxdWFudGl6ZSBjb2VmZnMgaGVyZSAqLworICAg ICAgICBjb2VmWzIqaSArIDBdID0gYSAqIGNicnQoYSk7CisgICAgICAgIGNvZWZbMippICsgMV0g PSBiICogY2JydChiKTsKKyAgICAgICAgZmZfYWFjX2FjX3VwZGF0ZV9jb250ZXh0KHN0YXRlLCBp LCBhLCBiKTsKKyAgICB9CisKKyAgICBpZiAobGVuID4gMSkgeworICAgICAgICAvKiAiUmV3aW5k IiBiaXRzdHJlYW0gYmFjayBieSAxNCBiaXRzICovCisgICAgICAgIGludCBnYl9jb3VudDIgPSBn ZXRfYml0c19jb3VudCgmZ2IyKTsKKyAgICAgICAgc2tpcF9iaXRzKGdiLCBnYl9jb3VudDIgLSBn Yl9jb3VudCAtIDE0KTsKKyAgICB9IGVsc2UgeworICAgICAgICAqZ2IgPSBnYjI7CisgICAgfQor CisgICAgZmZfYWFjX2FjX2ZpbmlzaChzdGF0ZSwgaSwgTik7CisKKyAgICBmb3IgKDsgaSA8IE4v MjsgaSsrKSB7CisgICAgICAgIGNvZWZbMippICsgMF0gPSAwOworICAgICAgICBjb2VmWzIqaSAr IDFdID0gMDsKKyAgICB9CisKKyAgICAvKiBTaWducyAqLworICAgIGZvciAoaSA9IDA7IGkgPCBs ZW47IGkrKykgeworICAgICAgICBpZiAoY29lZltpXSkgeworICAgICAgICAgICAgaWYgKCFnZXRf Yml0czEoZ2IpKSAvKiBzICovCisgICAgICAgICAgICAgICAgY29lZltpXSAqPSAtMTsKKyAgICAg ICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGRlY29kZV91c2Fj X3N0ZXJlb19jcGx4KEFBQ0RlY0NvbnRleHQgKmFjLCBBQUNVc2FjU3RlcmVvICp1cywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhbm5lbEVsZW1lbnQgKmNwZSwgR2V0Qml0 Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBudW1f d2luZG93X2dyb3VwcywgaW50IGluZGVwX2ZsYWcpCit7CisgICAgaW50IGRlbHRhX2NvZGVfdGlt ZTsKKyAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNzID0gJmNwZS0+Y2hbMF0uaWNzOwor CisgICAgaWYgKCFnZXRfYml0czEoZ2IpKSB7IC8qIGNwbHhfcHJlZF9hbGwgKi8KKyAgICAgICAg Zm9yIChpbnQgZyA9IDA7IGcgPCBudW1fd2luZG93X2dyb3VwczsgZysrKSB7CisgICAgICAgICAg ICBmb3IgKGludCBzZmIgPSAwOyBzZmIgPCBjcGUtPm1heF9zZmJfc3RlOyBzZmIgKz0gU0ZCX1BF Ul9QUkVEX0JBTkQpIHsKKyAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90IHZhbCA9IGdldF9i aXRzMShnYik7CisgICAgICAgICAgICAgICAgdXMtPnByZWRfdXNlZFtnKmNwZS0+bWF4X3NmYl9z dGUgKyBzZmJdID0gdmFsOworICAgICAgICAgICAgICAgIGlmICgoc2ZiICsgMSkgPCBjcGUtPm1h eF9zZmJfc3RlKQorICAgICAgICAgICAgICAgICAgICB1cy0+cHJlZF91c2VkW2cqY3BlLT5tYXhf c2ZiX3N0ZSArIHNmYiArIDFdID0gdmFsOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAg fSBlbHNlIHsKKyAgICAgICAgZm9yIChpbnQgZyA9IDA7IGcgPCBudW1fd2luZG93X2dyb3Vwczsg ZysrKQorICAgICAgICAgICAgZm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgY3BlLT5tYXhfc2ZiX3N0 ZTsgc2ZiKyspCisgICAgICAgICAgICAgICAgdXMtPnByZWRfdXNlZFtnKmNwZS0+bWF4X3NmYl9z dGUgKyBzZmJdID0gMTsKKyAgICB9CisKKyAgICB1cy0+cHJlZF9kaXIgPSBnZXRfYml0czEoZ2Ip OworICAgIHVzLT5jb21wbGV4X2NvZWYgPSBnZXRfYml0czEoZ2IpOworCisgICAgdXMtPnVzZV9w cmV2X2ZyYW1lID0gMDsKKyAgICBpZiAodXMtPmNvbXBsZXhfY29lZiAmJiAhaW5kZXBfZmxhZykK KyAgICAgICAgdXMtPnVzZV9wcmV2X2ZyYW1lID0gZ2V0X2JpdHMxKGdiKTsKKworICAgIGRlbHRh X2NvZGVfdGltZSA9IDA7CisgICAgaWYgKCFpbmRlcF9mbGFnKQorICAgICAgICBkZWx0YV9jb2Rl X3RpbWUgPSBnZXRfYml0czEoZ2IpOworCisgICAgLyogVE9ETzogc2hvdWxkbid0IGJlIG5lZWRl ZCAqLworICAgIGZvciAoaW50IGcgPSAwOyBnIDwgbnVtX3dpbmRvd19ncm91cHM7IGcrKykgewor ICAgICAgICBmb3IgKGludCBzZmIgPSAwOyBzZmIgPCBjcGUtPm1heF9zZmJfc3RlOyBzZmIgKz0g U0ZCX1BFUl9QUkVEX0JBTkQpIHsKKyAgICAgICAgICAgIGZsb2F0IGxhc3RfYWxwaGFfcV9yZSA9 IDA7CisgICAgICAgICAgICBmbG9hdCBsYXN0X2FscGhhX3FfaW0gPSAwOworICAgICAgICAgICAg aWYgKGRlbHRhX2NvZGVfdGltZSkgeworICAgICAgICAgICAgICAgIGlmIChnKSB7CisgICAgICAg ICAgICAgICAgICAgIGxhc3RfYWxwaGFfcV9yZSA9IHVzLT5wcmV2X2FscGhhX3FfcmVbKGcgLSAx KSpjcGUtPm1heF9zZmJfc3RlICsgc2ZiXTsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9hbHBo YV9xX2ltID0gdXMtPnByZXZfYWxwaGFfcV9pbVsoZyAtIDEpKmNwZS0+bWF4X3NmYl9zdGUgKyBz ZmJdOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoKGljcy0+d2luZG93X3NlcXVlbmNlWzBd ID09IEVJR0hUX1NIT1JUX1NFUVVFTkNFKSAmJgorICAgICAgICAgICAgICAgICAgICAgICAgICAg aWNzLT53aW5kb3dfc2VxdWVuY2VbMV0gPT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0UgfHwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgIGljcy0+d2luZG93X3NlcXVlbmNlWzFdID09IEVJR0hUX1NI T1JUX1NFUVVFTkNFKSB7CisgICAgICAgICAgICAgICAgICAgIC8qIFRoZSBzcGVjIGRvZXNuJ3Qg ZXhwbGljaXRseSBtZW50aW9uIHRoaXMsIGJ1dCBpdCBkb2Vzbid0IG1ha2UKKyAgICAgICAgICAg ICAgICAgICAgICogYW55IG90aGVyIHNlbnNlIG90aGVyd2lzZSEgKi8KKyAgICAgICAgICAgICAg ICAgICAgbGFzdF9hbHBoYV9xX3JlID0gdXMtPnByZXZfYWxwaGFfcV9yZVs3KmNwZS0+bWF4X3Nm Yl9zdGUgKyBzZmJdOworICAgICAgICAgICAgICAgICAgICBsYXN0X2FscGhhX3FfaW0gPSB1cy0+ cHJldl9hbHBoYV9xX2ltWzcqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl07CisgICAgICAgICAgICAg ICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9hbHBoYV9xX3JlID0gdXMtPnBy ZXZfYWxwaGFfcV9yZVtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJdOworICAgICAgICAgICAgICAg ICAgICBsYXN0X2FscGhhX3FfaW0gPSB1cy0+cHJldl9hbHBoYV9xX2ltW2cqY3BlLT5tYXhfc2Zi X3N0ZSArIHNmYl07CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfSBlbHNlIHsKKyAg ICAgICAgICAgICAgICBpZiAoc2ZiKSB7CisgICAgICAgICAgICAgICAgICAgIGxhc3RfYWxwaGFf cV9yZSA9IHVzLT5hbHBoYV9xX3JlW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYiAtIDFdOworICAg ICAgICAgICAgICAgICAgICBsYXN0X2FscGhhX3FfaW0gPSB1cy0+YWxwaGFfcV9pbVtnKmNwZS0+ bWF4X3NmYl9zdGUgKyBzZmIgLSAxXTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIGlmICh1cy0+cHJlZF91c2VkW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNm Yl0pIHsKKyAgICAgICAgICAgICAgICBpbnQgdmFsID0gLWdldF92bGMyKGdiLCBmZl92bGNfc2Nh bGVmYWN0b3JzLCA3LCAzKSArIDYwOworICAgICAgICAgICAgICAgIGxhc3RfYWxwaGFfcV9yZSAr PSB2YWwgKiAwLjFmOworICAgICAgICAgICAgICAgIGlmICh1cy0+Y29tcGxleF9jb2VmKSB7Cisg ICAgICAgICAgICAgICAgICAgIHZhbCA9IC1nZXRfdmxjMihnYiwgZmZfdmxjX3NjYWxlZmFjdG9y cywgNywgMykgKyA2MDsKKyAgICAgICAgICAgICAgICAgICAgbGFzdF9hbHBoYV9xX2ltICs9IHZh bCAqIDAuMWY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9x X3JlW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl0gPSBsYXN0X2FscGhhX3FfcmU7CisgICAgICAg ICAgICAgICAgdXMtPmFscGhhX3FfaW1bZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSA9IGxhc3Rf YWxwaGFfcV9pbTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdXMtPmFs cGhhX3FfcmVbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSA9IDA7CisgICAgICAgICAgICAgICAg dXMtPmFscGhhX3FfaW1bZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSA9IDA7CisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIGlmICgoc2ZiICsgMSkgPCBjcGUtPm1heF9zZmJfc3RlKSB7Cisg ICAgICAgICAgICAgICAgdXMtPmFscGhhX3FfcmVbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiICsg MV0gPQorICAgICAgICAgICAgICAgICAgICB1cy0+YWxwaGFfcV9yZVtnKmNwZS0+bWF4X3NmYl9z dGUgKyBzZmJdOworICAgICAgICAgICAgICAgIHVzLT5hbHBoYV9xX2ltW2cqY3BlLT5tYXhfc2Zi X3N0ZSArIHNmYiArIDFdID0KKyAgICAgICAgICAgICAgICAgICAgdXMtPmFscGhhX3FfaW1bZypj cGUtPm1heF9zZmJfc3RlICsgc2ZiXTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K KworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHNldHVwX3NjZShBQUNEZWNDb250ZXh0 ICphYywgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgKnNjZSwKKyAgICAgICAgICAgICAgICAgICAgIEFB Q1VTQUNDb25maWcgKnVzYWMpCit7CisgICAgQUFDVXNhY0VsZW1EYXRhICp1ZSA9ICZzY2UtPnVl OworICAgIEluZGl2aWR1YWxDaGFubmVsU3RyZWFtICppY3MgPSAmc2NlLT5pY3M7CisKKyAgICAv KiBTZXR1cCB3aW5kb3cgcGFyYW1ldGVycyAqLworICAgIGlmIChpY3MtPndpbmRvd19zZXF1ZW5j ZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRSkgeworICAgICAgICBpZiAodXNhYy0+Y29yZV9m cmFtZV9sZW4gPT0gNzY4KSB7CisgICAgICAgICAgICBpY3MtPnN3Yl9vZmZzZXQgPSBmZl9zd2Jf b2Zmc2V0Xzk2W3VzYWMtPnJhdGVfaWR4XTsKKyAgICAgICAgICAgIGljcy0+bnVtX3N3YiA9IGZm X2FhY19udW1fc3diXzk2W3VzYWMtPnJhdGVfaWR4XTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIGljcy0+c3diX29mZnNldCA9IGZmX3N3Yl9vZmZzZXRfMTI4W3VzYWMtPnJhdGVfaWR4 XTsKKyAgICAgICAgICAgIGljcy0+bnVtX3N3YiA9IGZmX2FhY19udW1fc3diXzEyOFt1c2FjLT5y YXRlX2lkeF07CisgICAgICAgIH0KKyAgICAgICAgaWNzLT50bnNfbWF4X2JhbmRzID0gZmZfdG5z X21heF9iYW5kc18xMjhbdXNhYy0+cmF0ZV9pZHhdOworCisgICAgICAgIC8qIFNldHVwIHNjYWxl ZmFjdG9yIGdyb3VwaW5nLiA3IGJpdCBtYXNrLiAqLworICAgICAgICBpY3MtPm51bV93aW5kb3df Z3JvdXBzID0gMDsKKyAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCA3OyBqKyspIHsKKyAgICAg ICAgICAgIGljcy0+Z3JvdXBfbGVuW2pdID0gMTsKKyAgICAgICAgICAgIGlmICh1ZS0+c2NhbGVf ZmFjdG9yX2dyb3VwaW5nICYgKDEgPDwgKDYgLSBqKSkpCisgICAgICAgICAgICAgICAgaWNzLT5n cm91cF9sZW5baWNzLT5udW1fd2luZG93X2dyb3Vwc10gKz0gMTsKKyAgICAgICAgICAgIGVsc2UK KyAgICAgICAgICAgICAgICBpY3MtPm51bV93aW5kb3dfZ3JvdXBzKys7CisgICAgICAgIH0KKwor ICAgICAgICBpY3MtPmdyb3VwX2xlbls3XSA9IDE7CisgICAgICAgIGljcy0+bnVtX3dpbmRvd19n cm91cHMrKzsKKyAgICAgICAgaWNzLT5udW1fd2luZG93cyA9IDg7CisgICAgfSBlbHNlIHsKKyAg ICAgICAgaWYgKHVzYWMtPmNvcmVfZnJhbWVfbGVuID09IDc2OCkgeworICAgICAgICAgICAgaWNz LT5zd2Jfb2Zmc2V0ID0gZmZfc3diX29mZnNldF83NjhbdXNhYy0+cmF0ZV9pZHhdOworICAgICAg ICAgICAgaWNzLT5udW1fc3diID0gZmZfYWFjX251bV9zd2JfNzY4W3VzYWMtPnJhdGVfaWR4XTsK KyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGljcy0+c3diX29mZnNldCA9IGZmX3N3Yl9v ZmZzZXRfMTAyNFt1c2FjLT5yYXRlX2lkeF07CisgICAgICAgICAgICBpY3MtPm51bV9zd2IgPSBm Zl9hYWNfbnVtX3N3Yl8xMDI0W3VzYWMtPnJhdGVfaWR4XTsKKyAgICAgICAgfQorICAgICAgICBp Y3MtPnRuc19tYXhfYmFuZHMgPSBmZl90bnNfbWF4X2JhbmRzXzEwMjRbdXNhYy0+cmF0ZV9pZHhd OworCisgICAgICAgIGljcy0+Z3JvdXBfbGVuWzBdID0gMTsKKyAgICAgICAgaWNzLT5udW1fd2lu ZG93X2dyb3VwcyA9IDE7CisgICAgICAgIGljcy0+bnVtX3dpbmRvd3MgID0gMTsKKyAgICB9CisK KyAgICBpZiAoaWNzLT5tYXhfc2ZiID4gaWNzLT5udW1fc3diKSB7CisgICAgICAgIGF2X2xvZyhh Yy0+YXZjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICJOdW1iZXIgb2Ygc2NhbGVm YWN0b3IgYmFuZHMgaW4gZ3JvdXAgKCVkKSAiCisgICAgICAgICAgICAgICAiZXhjZWVkcyBsaW1p dCAoJWQpLlxuIiwKKyAgICAgICAgICAgICAgIGljcy0+bWF4X3NmYiwgaWNzLT5udW1fc3diKTsK KyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKKyAgICB9CisKKyAgICAvKiBKdXN0IHNv bWUgZGVmYXVsdHMgZm9yIHRoZSBiYW5kIHR5cGVzICovCisgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBGRl9BUlJBWV9FTEVNUyhzY2UtPmJhbmRfdHlwZSk7IGkrKykKKyAgICAgICAgc2NlLT5iYW5k X3R5cGVbaV0gPSBFU0NfQlQ7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBkZWNv ZGVfdXNhY19zdGVyZW9faW5mbyhBQUNEZWNDb250ZXh0ICphYywgQUFDVVNBQ0NvbmZpZyAqdXNh YywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQUFDVXNhY0VsZW1Db25maWcg KmVjLCBDaGFubmVsRWxlbWVudCAqY3BlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBHZXRCaXRDb250ZXh0ICpnYiwgaW50IGluZGVwX2ZsYWcpCit7CisgICAgaW50IHJldCwg dG5zX2FjdGl2ZTsKKworICAgIEFBQ1VzYWNTdGVyZW8gKnVzID0gJmNwZS0+dXM7CisgICAgU2lu Z2xlQ2hhbm5lbEVsZW1lbnQgKnNjZTEgPSAmY3BlLT5jaFswXTsKKyAgICBTaW5nbGVDaGFubmVs RWxlbWVudCAqc2NlMiA9ICZjcGUtPmNoWzFdOworICAgIEluZGl2aWR1YWxDaGFubmVsU3RyZWFt ICppY3MxID0gJnNjZTEtPmljczsKKyAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNzMiA9 ICZzY2UyLT5pY3M7CisgICAgQUFDVXNhY0VsZW1EYXRhICp1ZTEgPSAmc2NlMS0+dWU7CisgICAg QUFDVXNhY0VsZW1EYXRhICp1ZTIgPSAmc2NlMi0+dWU7CisKKyAgICB1cy0+Y29tbW9uX3dpbmRv dyA9IDA7CisgICAgdXMtPmNvbW1vbl90dyA9IDA7CisKKyAgICBpZiAoISghdWUxLT5jb3JlX21v ZGUgJiYgIXVlMi0+Y29yZV9tb2RlKSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICB0bnNfYWN0 aXZlID0gZ2V0X2JpdHMxKGdiKTsKKyAgICB1cy0+Y29tbW9uX3dpbmRvdyA9IGdldF9iaXRzMShn Yik7CisKKyAgICBpZiAodXMtPmNvbW1vbl93aW5kb3cpIHsKKyAgICAgICAgLyogaWNzX2luZm8o KSAqLworICAgICAgICBpY3MxLT53aW5kb3dfc2VxdWVuY2VbMV0gPSBpY3MxLT53aW5kb3dfc2Vx dWVuY2VbMF07CisgICAgICAgIGljczItPndpbmRvd19zZXF1ZW5jZVsxXSA9IGljczItPndpbmRv d19zZXF1ZW5jZVswXTsKKyAgICAgICAgaWNzMS0+d2luZG93X3NlcXVlbmNlWzBdID0gaWNzMi0+ d2luZG93X3NlcXVlbmNlWzBdID0gZ2V0X2JpdHMoZ2IsIDIpOworCisgICAgICAgIGljczEtPnVz ZV9rYl93aW5kb3dbMV0gPSBpY3MxLT51c2Vfa2Jfd2luZG93WzBdOworICAgICAgICBpY3MyLT51 c2Vfa2Jfd2luZG93WzFdID0gaWNzMi0+dXNlX2tiX3dpbmRvd1swXTsKKyAgICAgICAgaWNzMS0+ dXNlX2tiX3dpbmRvd1swXSA9IGljczItPnVzZV9rYl93aW5kb3dbMF0gPSBnZXRfYml0czEoZ2Ip OworCisgICAgICAgIGlmIChpY3MxLT53aW5kb3dfc2VxdWVuY2VbMF0gPT0gRUlHSFRfU0hPUlRf U0VRVUVOQ0UpIHsKKyAgICAgICAgICAgIGljczEtPm1heF9zZmIgPSBpY3MyLT5tYXhfc2ZiID0g Z2V0X2JpdHMoZ2IsIDQpOworICAgICAgICAgICAgdWUxLT5zY2FsZV9mYWN0b3JfZ3JvdXBpbmcg PSB1ZTItPnNjYWxlX2ZhY3Rvcl9ncm91cGluZyA9IGdldF9iaXRzKGdiLCA3KTsKKyAgICAgICAg fSBlbHNlIHsKKyAgICAgICAgICAgIGljczEtPm1heF9zZmIgPSBpY3MyLT5tYXhfc2ZiID0gZ2V0 X2JpdHMoZ2IsIDYpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCFnZXRfYml0czEoZ2IpKSB7 IC8qIGNvbW1vbl9tYXhfc2ZiICovCisgICAgICAgICAgICBpZiAoaWNzMi0+d2luZG93X3NlcXVl bmNlWzBdID09IEVJR0hUX1NIT1JUX1NFUVVFTkNFKQorICAgICAgICAgICAgICAgIGljczItPm1h eF9zZmIgPSBnZXRfYml0cyhnYiwgNCk7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg ICAgaWNzMi0+bWF4X3NmYiA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICAgICAgfQorCisgICAgICAg IHJldCA9IHNldHVwX3NjZShhYywgc2NlMSwgdXNhYyk7CisgICAgICAgIGlmIChyZXQgPCAwKQor ICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICByZXQgPSBzZXR1cF9zY2UoYWMsIHNj ZTIsIHVzYWMpOworICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgIHJldHVybiByZXQ7 CisKKyAgICAgICAgY3BlLT5tYXhfc2ZiX3N0ZSA9IEZGTUFYKGljczEtPm1heF9zZmIsIGljczIt Pm1heF9zZmIpOworCisgICAgICAgIHVzLT5tc19tYXNrX21vZGUgPSBnZXRfYml0cyhnYiwgMik7 IC8qIG1zX21hc2tfcHJlc2VudCAqLworICAgICAgICBtZW1zZXQoY3BlLT5tc19tYXNrLCAwLCBz aXplb2YoY3BlLT5tc19tYXNrKSk7CisgICAgICAgIGlmICh1cy0+bXNfbWFza19tb2RlID09IDEp IHsKKyAgICAgICAgICAgIGZvciAoaW50IGcgPSAwOyBnIDwgaWNzMS0+bnVtX3dpbmRvd19ncm91 cHM7IGcrKykKKyAgICAgICAgICAgICAgICBmb3IgKGludCBzZmIgPSAwOyBzZmIgPCBjcGUtPm1h eF9zZmJfc3RlOyBzZmIrKykKKyAgICAgICAgICAgICAgICAgICAgY3BlLT5tc19tYXNrW2cqY3Bl LT5tYXhfc2ZiX3N0ZSArIHNmYl0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9IGVsc2UgaWYg KHVzLT5tc19tYXNrX21vZGUgPT0gMikgeworICAgICAgICAgICAgbWVtc2V0KGNwZS0+bXNfbWFz aywgMHhGRiwgc2l6ZW9mKGNwZS0+bXNfbWFzaykpOworICAgICAgICB9IGVsc2UgaWYgKCh1cy0+ bXNfbWFza19tb2RlID09IDMpICYmICFlYy0+c3RlcmVvX2NvbmZpZ19pbmRleCkgeworICAgICAg ICAgICAgcmV0ID0gZGVjb2RlX3VzYWNfc3RlcmVvX2NwbHgoYWMsIHVzLCBjcGUsIGdiLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWNzMS0+bnVtX3dpbmRvd19n cm91cHMsIGluZGVwX2ZsYWcpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAg ICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChlYy0+dHdfbWRj dCkgeworICAgICAgICB1cy0+Y29tbW9uX3R3ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgYXZw cml2X3JlcG9ydF9taXNzaW5nX2ZlYXR1cmUoYWMtPmF2Y3R4LAorICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAiQUFDIFVTQUMgdGltZXdhcnBpbmciKTsKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIH0KKworICAgIHNjZTEtPnRucy5wcmVzZW50 ID0gc2NlMi0+dG5zLnByZXNlbnQgPSAwOworICAgIGlmICh0bnNfYWN0aXZlKSB7CisgICAgICAg IGF2X3VudXNlZCBpbnQgdG5zX29uX2xyOworICAgICAgICBpbnQgY29tbW9uX3RucyA9IDA7Cisg ICAgICAgIGlmICh1cy0+Y29tbW9uX3dpbmRvdykKKyAgICAgICAgICAgIGNvbW1vbl90bnMgPSBn ZXRfYml0czEoZ2IpOworCisgICAgICAgIHRuc19vbl9sciA9IGdldF9iaXRzMShnYik7CisgICAg ICAgIGlmIChjb21tb25fdG5zKSB7CisgICAgICAgICAgICByZXQgPSBmZl9hYWNfZGVjb2RlX3Ru cyhhYywgJnNjZTEtPnRucywgZ2IsIGljczEpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgICAgIG1lbWNweSgmc2NlMi0+dG5z LCAmc2NlMS0+dG5zLCBzaXplb2Yoc2NlMS0+dG5zKSk7CisgICAgICAgICAgICBzY2UyLT50bnMu cHJlc2VudCA9IDA7CisgICAgICAgICAgICBzY2UxLT50bnMucHJlc2VudCA9IDA7CisgICAgICAg IH0gZWxzZSB7CisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeworICAgICAgICAgICAg ICAgIHNjZTItPnRucy5wcmVzZW50ID0gMTsKKyAgICAgICAgICAgICAgICBzY2UxLT50bnMucHJl c2VudCA9IDE7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIHNjZTItPnRu cy5wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgICAgICBzY2UxLT50bnMucHJl c2VudCA9ICFzY2UyLT50bnMucHJlc2VudDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICAgIHJldHVybiAwOworfQorCisvKiA3LjIuNCBHZW5lcmF0aW9uIG9mIHJhbmRvbSBz aWducyBmb3Igc3BlY3RyYWwgbm9pc2UgZmlsbGluZworICogVGhpcyBmdW5jdGlvbiBpcyBleGFj dGx5IGRlZmluZWQsIHRob3VnaCB3ZSd2ZSBoZWxwZWQgdGhlIGRlZmluaXRpb24KKyAqIGFsb25n IHdpdGggYmVpbmcgc2xpZ2h0bHkgZmFzdGVyLiAqLworc3RhdGljIGlubGluZSBmbG9hdCBub2lz ZV9yYW5kb21fc2lnbih1bnNpZ25lZCBpbnQgKnNlZWQpCit7CisgICAgdW5zaWduZWQgaW50IG5l d19zZWVkID0gKnNlZWQgPSAoKCpzZWVkKSAqIDY5MDY5KSArIDU7CisgICAgaWYgKCgobmV3X3Nl ZWQpICYgMHgxMDAwMCkgPiAwKQorICAgICAgICByZXR1cm4gLTEuZjsKKyAgICByZXR1cm4gKzEu ZjsKK30KKworc3RhdGljIHZvaWQgYXBwbHlfbm9pc2VfZmlsbChBQUNEZWNDb250ZXh0ICphYywg U2luZ2xlQ2hhbm5lbEVsZW1lbnQgKnNjZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QUFDVXNhY0VsZW1EYXRhICp1ZSkKK3sKKyAgICBmbG9hdCAqY29lZjsKKyAgICBJbmRpdmlkdWFs Q2hhbm5lbFN0cmVhbSAqaWNzID0gJnNjZS0+aWNzOworCisgICAgZmxvYXQgbm9pc2VfdmFsID0g cG93KDIsICh1ZS0+bm9pc2UubGV2ZWwgLSAxNCkvMyk7CisgICAgaW50IG5vaXNlX29mZnNldCA9 IHVlLT5ub2lzZS5vZmZzZXQgLSAxNjsKKyAgICBpbnQgYmFuZF9vZmY7CisKKyAgICBiYW5kX29m ZiA9IGZmX3VzYWNfbm9pc2VfZmlsbF9zdGFydF9vZmZzZXRbYWMtPm9jWzFdLm00YWMuZnJhbWVf bGVuZ3RoX3Nob3J0XQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFtpY3MtPndpbmRvd19zZXF1ZW5jZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRV07CisK KyAgICBjb2VmID0gc2NlLT5jb2VmZnM7CisgICAgZm9yIChpbnQgZyA9IDA7IGcgPCBpY3MtPm51 bV93aW5kb3dfZ3JvdXBzOyBnKyspIHsKKyAgICAgICAgdW5zaWduZWQgZ19sZW4gPSBpY3MtPmdy b3VwX2xlbltnXTsKKworICAgICAgICBmb3IgKGludCBzZmIgPSAwOyBzZmIgPCBpY3MtPm1heF9z ZmI7IHNmYisrKSB7CisgICAgICAgICAgICBmbG9hdCAqY2IgPSBjb2VmICsgaWNzLT5zd2Jfb2Zm c2V0W3NmYl07CisgICAgICAgICAgICBpbnQgY2JfbGVuID0gaWNzLT5zd2Jfb2Zmc2V0W3NmYiAr IDFdIC0gaWNzLT5zd2Jfb2Zmc2V0W3NmYl07CisgICAgICAgICAgICBpbnQgYmFuZF9xdWFudGl6 ZWRfdG9femVybyA9IDE7CisKKyAgICAgICAgICAgIGlmIChpY3MtPnN3Yl9vZmZzZXRbc2ZiXSA8 IGJhbmRfb2ZmKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBmb3Ig KGludCBncm91cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVuOyBncm91cCsrLCBjYiArPSAx MjgpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCB6ID0gMDsgeiA8IGNiX2xlbjsgeisrKSB7 CisgICAgICAgICAgICAgICAgICAgIGlmIChjYlt6XSA9PSAwKQorICAgICAgICAgICAgICAgICAg ICAgICAgY2Jbel0gPSBub2lzZV9yYW5kb21fc2lnbigmc2NlLT51ZS5ub2lzZS5zZWVkKSAqIG5v aXNlX3ZhbDsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAg ICAgYmFuZF9xdWFudGl6ZWRfdG9femVybyA9IDA7CisgICAgICAgICAgICAgICAgfQorICAgICAg ICAgICAgfQorCisgICAgICAgICAgICBpZiAoYmFuZF9xdWFudGl6ZWRfdG9femVybykKKyAgICAg ICAgICAgICAgICBzY2UtPnNmW2cqaWNzLT5tYXhfc2ZiICsgc2ZiXSArPSBub2lzZV9vZmZzZXQ7 CisgICAgICAgIH0KKyAgICAgICAgY29lZiArPSBnX2xlbiA8PCA3OworICAgIH0KK30KKworc3Rh dGljIHZvaWQgc3BlY3RydW1fc2NhbGUoQUFDRGVjQ29udGV4dCAqYWMsIFNpbmdsZUNoYW5uZWxF bGVtZW50ICpzY2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgICBBQUNVc2FjRWxlbURhdGEg KnVlKQoreworICAgIEluZGl2aWR1YWxDaGFubmVsU3RyZWFtICppY3MgPSAmc2NlLT5pY3M7Cisg ICAgZmxvYXQgKmNvZWY7CisKKyAgICAvKiBTeW50aGVzaXNlIG5vaXNlICovCisgICAgaWYgKHVl LT5ub2lzZS5sZXZlbCkKKyAgICAgICAgYXBwbHlfbm9pc2VfZmlsbChhYywgc2NlLCB1ZSk7CisK KyAgICAvKiBBcHBseSBzY2FsZWZhY3RvcnMgKi8KKyAgICBjb2VmID0gc2NlLT5jb2VmZnM7Cisg ICAgZm9yIChpbnQgZyA9IDA7IGcgPCBpY3MtPm51bV93aW5kb3dfZ3JvdXBzOyBnKyspIHsKKyAg ICAgICAgdW5zaWduZWQgZ19sZW4gPSBpY3MtPmdyb3VwX2xlbltnXTsKKworICAgICAgICBmb3Ig KGludCBzZmIgPSAwOyBzZmIgPCBpY3MtPm1heF9zZmI7IHNmYisrKSB7CisgICAgICAgICAgICBm bG9hdCAqY2IgPSBjb2VmICsgaWNzLT5zd2Jfb2Zmc2V0W3NmYl07CisgICAgICAgICAgICBpbnQg Y2JfbGVuID0gaWNzLT5zd2Jfb2Zmc2V0W3NmYiArIDFdIC0gaWNzLT5zd2Jfb2Zmc2V0W3NmYl07 CisgICAgICAgICAgICBmbG9hdCBzZiA9IHNjZS0+c2ZbZyppY3MtPm1heF9zZmIgKyBzZmJdOwor CisgICAgICAgICAgICBmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVu OyBncm91cCsrLCBjYiArPSAxMjgpCisgICAgICAgICAgICAgICAgYWMtPmZkc3AtPnZlY3Rvcl9m bXVsX3NjYWxhcihjYiwgY2IsIHNmLCBjYl9sZW4pOworICAgICAgICB9CisgICAgICAgIGNvZWYg Kz0gZ19sZW4gPDwgNzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBsZXhfc3RlcmVvX2Rv d25taXhfcHJldihBQUNEZWNDb250ZXh0ICphYywgQ2hhbm5lbEVsZW1lbnQgKmNwZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCAqZG1peF9yZSkKK3sKKyAg ICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNzID0gJmNwZS0+Y2hbMF0uaWNzOworICAgIGlu dCBzaWduID0gIWNwZS0+dXMucHJlZF9kaXIgPyArMSA6IC0xOworICAgIGZsb2F0ICpjb2VmMSA9 IGNwZS0+Y2hbMF0uY29lZmZzOworICAgIGZsb2F0ICpjb2VmMiA9IGNwZS0+Y2hbMV0uY29lZmZz OworCisgICAgZm9yIChpbnQgZyA9IDA7IGcgPCBpY3MtPm51bV93aW5kb3dfZ3JvdXBzOyBnKysp IHsKKyAgICAgICAgdW5zaWduZWQgZ19sZW4gPSBpY3MtPmdyb3VwX2xlbltnXTsKKyAgICAgICAg Zm9yIChpbnQgc2ZiID0gMDsgc2ZiIDwgY3BlLT5tYXhfc2ZiX3N0ZTsgc2ZiKyspIHsKKyAgICAg ICAgICAgIGludCBvZmYgPSBpY3MtPnN3Yl9vZmZzZXRbc2ZiXTsKKyAgICAgICAgICAgIGludCBj Yl9sZW4gPSBpY3MtPnN3Yl9vZmZzZXRbc2ZiICsgMV0gLSBvZmY7CisKKyAgICAgICAgICAgIGZs b2F0ICpjMSA9IGNvZWYxICsgb2ZmOworICAgICAgICAgICAgZmxvYXQgKmMyID0gY29lZjIgKyBv ZmY7CisgICAgICAgICAgICBmbG9hdCAqZG0gPSBkbWl4X3JlICsgb2ZmOworCisgICAgICAgICAg ICBmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIDwgKHVuc2lnbmVkKWdfbGVuOworICAgICAgICAg ICAgICAgICBncm91cCsrLCBjMSArPSAxMjgsIGMyICs9IDEyOCwgZG0gKz0gMTI4KSB7CisgICAg ICAgICAgICAgICAgZm9yIChpbnQgeiA9IDA7IHogPCBjYl9sZW47IHorKykKKyAgICAgICAgICAg ICAgICAgICAgZG1bel0gPSAwLjUqKGMxW3pdICsgc2lnbipjMlt6XSk7CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKworICAgICAgICBjb2VmMSArPSBnX2xlbiA8PCA3OworICAgICAgICBjb2Vm MiArPSBnX2xlbiA8PCA3OworICAgICAgICBkbWl4X3JlICs9IGdfbGVuIDw8IDc7CisgICAgfQor fQorCitzdGF0aWMgdm9pZCBjb21wbGV4X3N0ZXJlb19kb3dubWl4X2N1cihBQUNEZWNDb250ZXh0 ICphYywgQ2hhbm5lbEVsZW1lbnQgKmNwZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGZsb2F0ICpkbWl4X3JlKQoreworICAgIEFBQ1VzYWNTdGVyZW8gKnVzID0gJmNw ZS0+dXM7CisgICAgSW5kaXZpZHVhbENoYW5uZWxTdHJlYW0gKmljcyA9ICZjcGUtPmNoWzBdLmlj czsKKyAgICBpbnQgc2lnbiA9ICFjcGUtPnVzLnByZWRfZGlyID8gKzEgOiAtMTsKKyAgICBmbG9h dCAqY29lZjEgPSBjcGUtPmNoWzBdLmNvZWZmczsKKyAgICBmbG9hdCAqY29lZjIgPSBjcGUtPmNo WzFdLmNvZWZmczsKKworICAgIGZvciAoaW50IGcgPSAwOyBnIDwgaWNzLT5udW1fd2luZG93X2dy b3VwczsgZysrKSB7CisgICAgICAgIHVuc2lnbmVkIGdfbGVuID0gaWNzLT5ncm91cF9sZW5bZ107 CisgICAgICAgIGZvciAoaW50IHNmYiA9IDA7IHNmYiA8IGNwZS0+bWF4X3NmYl9zdGU7IHNmYisr KSB7CisgICAgICAgICAgICBpbnQgb2ZmID0gaWNzLT5zd2Jfb2Zmc2V0W3NmYl07CisgICAgICAg ICAgICBpbnQgY2JfbGVuID0gaWNzLT5zd2Jfb2Zmc2V0W3NmYiArIDFdIC0gb2ZmOworCisgICAg ICAgICAgICBmbG9hdCAqYzEgPSBjb2VmMSArIG9mZjsKKyAgICAgICAgICAgIGZsb2F0ICpjMiA9 IGNvZWYyICsgb2ZmOworICAgICAgICAgICAgZmxvYXQgKmRtID0gZG1peF9yZSArIG9mZjsKKwor ICAgICAgICAgICAgaWYgKHVzLT5wcmVkX3VzZWRbZypjcGUtPm1heF9zZmJfc3RlICsgc2ZiXSkg eworICAgICAgICAgICAgICAgIGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgPCAodW5zaWduZWQp Z19sZW47CisgICAgICAgICAgICAgICAgICAgICBncm91cCsrLCBjMSArPSAxMjgsIGMyICs9IDEy OCwgZG0gKz0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHogPSAwOyB6IDwg Y2JfbGVuOyB6KyspCisgICAgICAgICAgICAgICAgICAgICAgICBkbVt6XSA9IDAuNSooYzFbel0g KyBzaWduKmMyW3pdKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2Ugewor ICAgICAgICAgICAgICAgIGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgPCAodW5zaWduZWQpZ19s ZW47CisgICAgICAgICAgICAgICAgICAgICBncm91cCsrLCBjMSArPSAxMjgsIGMyICs9IDEyOCwg ZG0gKz0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IHogPSAwOyB6IDwgY2Jf bGVuOyB6KyspCisgICAgICAgICAgICAgICAgICAgICAgICBkbVt6XSA9IGMxW3pdOworICAgICAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIGNvZWYxICs9 IGdfbGVuIDw8IDc7CisgICAgICAgIGNvZWYyICs9IGdfbGVuIDw8IDc7CisgICAgICAgIGRtaXhf cmUgKz0gZ19sZW4gPDwgNzsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNvbXBsZXhfc3RlcmVv X2ludGVycG9sYXRlX2ltYWcoZmxvYXQgKmltLCBmbG9hdCAqcmUsIGNvbnN0IGZsb2F0IGZbNl0s CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBsZW4sIGlu dCBmYWN0b3JfZXZlbiwgaW50IGZhY3Rvcl9vZGQpCit7CisgICAgaW50IGkgPSAwOworICAgIGZs b2F0IHM7CisKKyAgICBzID0gZls2XSpyZVsyXSArIGZbNV0qcmVbMV0gKyBmWzRdKnJlWzBdICsK KyAgICAgICAgZlszXSpyZVswXSArCisgICAgICAgIGZbMl0qcmVbMV0gKyBmWzFdKnJlWzJdICsg ZlswXSpyZVszXTsKKyAgICBpbVtpXSArPSBzKmZhY3Rvcl9ldmVuOworCisgICAgaSA9IDE7Cisg ICAgcyA9IGZbNl0qcmVbMV0gKyBmWzVdKnJlWzBdICsgZls0XSpyZVswXSArCisgICAgICAgIGZb M10qcmVbMV0gKworICAgICAgICBmWzJdKnJlWzJdICsgZlsxXSpyZVszXSArIGZbMF0qcmVbNF07 CisgICAgaW1baV0gKz0gcypmYWN0b3Jfb2RkOworCisgICAgaSA9IDI7CisgICAgcyA9IGZbNl0q cmVbMF0gKyBmWzVdKnJlWzBdICsgZls0XSpyZVsxXSArCisgICAgICAgIGZbM10qcmVbMl0gKwor ICAgICAgICBmWzJdKnJlWzNdICsgZlsxXSpyZVs0XSArIGZbMF0qcmVbNV07CisKKyAgICBpbVtp XSArPSBzKmZhY3Rvcl9ldmVuOworICAgIGZvciAoaSA9IDM7IGkgPCBsZW4gLSA0OyBpICs9IDIp IHsKKyAgICAgICAgcyA9IGZbNl0qcmVbaS0zXSArIGZbNV0qcmVbaS0yXSArIGZbNF0qcmVbaS0x XSArCisgICAgICAgICAgICBmWzNdKnJlW2ldICsKKyAgICAgICAgICAgIGZbMl0qcmVbaSsxXSAr IGZbMV0qcmVbaSsyXSArIGZbMF0qcmVbaSszXTsKKyAgICAgICAgaW1baSswXSArPSBzKmZhY3Rv cl9vZGQ7CisKKyAgICAgICAgcyA9IGZbNl0qcmVbaS0yXSArIGZbNV0qcmVbaS0xXSArIGZbNF0q cmVbaV0gKworICAgICAgICAgICAgZlszXSpyZVtpKzFdICsKKyAgICAgICAgICAgIGZbMl0qcmVb aSsyXSArIGZbMV0qcmVbaSszXSArIGZbMF0qcmVbaSs0XTsKKyAgICAgICAgaW1baSsxXSArPSBz KmZhY3Rvcl9ldmVuOworICAgIH0KKworICAgIGkgPSBsZW4gLSAzOworICAgIHMgPSBmWzZdKnJl W2ktM10gKyBmWzVdKnJlW2ktMl0gKyBmWzRdKnJlW2ktMV0gKworICAgICAgICBmWzNdKnJlW2ld ICsKKyAgICAgICAgZlsyXSpyZVtpKzFdICsgZlsxXSpyZVtpKzJdICsgZlswXSpyZVtpKzJdOwor ICAgIGltW2ldICs9IHMqZmFjdG9yX29kZDsKKworICAgIGkgPSBsZW4gLSAyOworICAgIHMgPSBm WzZdKnJlW2ktM10gKyBmWzVdKnJlW2ktMl0gKyBmWzRdKnJlW2ktMV0gKworICAgICAgICBmWzNd KnJlW2ldICsKKyAgICAgICAgZlsyXSpyZVtpKzFdICsgZlsxXSpyZVtpKzFdICsgZlswXSpyZVtp XTsKKyAgICBpbVtpXSArPSBzKmZhY3Rvcl9ldmVuOworCisgICAgaSA9IGxlbiAtIDE7CisgICAg cyA9IGZbNl0qcmVbaS0zXSArIGZbNV0qcmVbaS0yXSArIGZbNF0qcmVbaS0xXSArCisgICAgICAg IGZbM10qcmVbaV0gKworICAgICAgICBmWzJdKnJlW2ldICsgZlsxXSpyZVtpLTFdICsgZlswXSpy ZVtpLTJdOworICAgIGltW2ldICs9IHMqZmFjdG9yX29kZDsKK30KKworc3RhdGljIHZvaWQgYXBw bHlfY29tcGxleF9zdGVyZW8oQUFDRGVjQ29udGV4dCAqYWMsIENoYW5uZWxFbGVtZW50ICpjcGUp Cit7CisgICAgQUFDVXNhY1N0ZXJlbyAqdXMgPSAmY3BlLT51czsKKyAgICBJbmRpdmlkdWFsQ2hh bm5lbFN0cmVhbSAqaWNzID0gJmNwZS0+Y2hbMF0uaWNzOworICAgIGZsb2F0ICpjb2VmMSA9IGNw ZS0+Y2hbMF0uY29lZmZzOworICAgIGZsb2F0ICpjb2VmMiA9IGNwZS0+Y2hbMV0uY29lZmZzOwor ICAgIGZsb2F0ICpkbWl4X2ltID0gdXMtPmRtaXhfaW07CisKKyAgICBmb3IgKGludCBnID0gMDsg ZyA8IGljcy0+bnVtX3dpbmRvd19ncm91cHM7IGcrKykgeworICAgICAgICB1bnNpZ25lZCBnX2xl biA9IGljcy0+Z3JvdXBfbGVuW2ddOworICAgICAgICBmb3IgKGludCBzZmIgPSAwOyBzZmIgPCBj cGUtPm1heF9zZmJfc3RlOyBzZmIrKykgeworICAgICAgICAgICAgaW50IG9mZiA9IGljcy0+c3di X29mZnNldFtzZmJdOworICAgICAgICAgICAgaW50IGNiX2xlbiA9IGljcy0+c3diX29mZnNldFtz ZmIgKyAxXSAtIG9mZjsKKworICAgICAgICAgICAgZmxvYXQgKmMxID0gY29lZjEgKyBvZmY7Cisg ICAgICAgICAgICBmbG9hdCAqYzIgPSBjb2VmMiArIG9mZjsKKyAgICAgICAgICAgIGZsb2F0ICpk bV9pbSA9IGRtaXhfaW0gKyBvZmY7CisgICAgICAgICAgICBmbG9hdCBhbHBoYV9yZSA9IHVzLT5h bHBoYV9xX3JlW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl07CisgICAgICAgICAgICBmbG9hdCBh bHBoYV9pbSA9IHVzLT5hbHBoYV9xX2ltW2cqY3BlLT5tYXhfc2ZiX3N0ZSArIHNmYl07CisKKyAg ICAgICAgICAgIGlmICghdXMtPnByZWRfdXNlZFtnKmNwZS0+bWF4X3NmYl9zdGUgKyBzZmJdKQor ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBpZiAoIWNwZS0+dXMucHJl ZF9kaXIpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGludCBncm91cCA9IDA7IGdyb3VwIDwgKHVu c2lnbmVkKWdfbGVuOworICAgICAgICAgICAgICAgICAgICAgZ3JvdXArKywgYzEgKz0gMTI4LCBj MiArPSAxMjgsIGRtX2ltICs9IDEyOCkgeworICAgICAgICAgICAgICAgICAgICBmb3IgKGludCB6 ID0gMDsgeiA8IGNiX2xlbjsgeisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBmbG9hdCBz aWRlOworICAgICAgICAgICAgICAgICAgICAgICAgc2lkZSA9IGMyW3pdIC0gYWxwaGFfcmUqYzFb el0gLSBhbHBoYV9pbSpkbV9pbVt6XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyW3pdID0g YzFbel0gLSBzaWRlOworICAgICAgICAgICAgICAgICAgICAgICAgYzFbel0gPSBjMVt6XSArIHNp ZGU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICB9IGVsc2UgeworICAgICAgICAgICAgICAgIGZvciAoaW50IGdyb3VwID0gMDsgZ3JvdXAgPCAo dW5zaWduZWQpZ19sZW47CisgICAgICAgICAgICAgICAgICAgICBncm91cCsrLCBjMSArPSAxMjgs IGMyICs9IDEyOCwgZG1faW0gKz0gMTI4KSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50 IHogPSAwOyB6IDwgY2JfbGVuOyB6KyspIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGZsb2F0 IG1pZDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1pZCA9IGMyW3pdIC0gYWxwaGFfcmUqYzFb el0gLSBhbHBoYV9pbSpkbV9pbVt6XTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGMyW3pdID0g bWlkIC0gYzFbel07CisgICAgICAgICAgICAgICAgICAgICAgICBjMVt6XSA9IG1pZCArIGMxW3pd OworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg fQorICAgICAgICB9CisKKyAgICAgICAgY29lZjEgKz0gZ19sZW4gPDwgNzsKKyAgICAgICAgY29l ZjIgKz0gZ19sZW4gPDwgNzsKKyAgICAgICAgZG1peF9pbSArPSBnX2xlbiA8PCA3OworICAgIH0K K30KKworc3RhdGljIGNvbnN0IGZsb2F0ICpjb21wbGV4X3N0ZXJlb19nZXRfZmlsdGVyKENoYW5u ZWxFbGVtZW50ICpjcGUsIGludCBpc19wcmV2KQoreworICAgIGludCB3aW4sIHNoYXBlOworICAg IGlmICghaXNfcHJldikgeworICAgICAgICBzd2l0Y2ggKGNwZS0+Y2hbMF0uaWNzLndpbmRvd19z ZXF1ZW5jZVswXSkgeworICAgICAgICBkZWZhdWx0OgorICAgICAgICBjYXNlIE9OTFlfTE9OR19T RVFVRU5DRToKKyAgICAgICAgY2FzZSBFSUdIVF9TSE9SVF9TRVFVRU5DRToKKyAgICAgICAgICAg IHdpbiA9IDA7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBMT05HX1NUQVJUX1NF UVVFTkNFOgorICAgICAgICAgICAgd2luID0gMTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIExPTkdfU1RPUF9TRVFVRU5DRToKKyAgICAgICAgICAgIHdpbiA9IDI7CisgICAgICAg ICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChjcGUtPmNoWzBdLmljcy51c2Vf a2Jfd2luZG93WzBdID09IDAgJiYKKyAgICAgICAgICAgIGNwZS0+Y2hbMF0uaWNzLnVzZV9rYl93 aW5kb3dbMV0gPT0gMCkKKyAgICAgICAgICAgIHNoYXBlID0gMDsKKyAgICAgICAgZWxzZSBpZiAo Y3BlLT5jaFswXS5pY3MudXNlX2tiX3dpbmRvd1swXSA9PSAxICYmCisgICAgICAgICAgICAgICAg IGNwZS0+Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3dbMV0gPT0gMSkKKyAgICAgICAgICAgIHNoYXBl ID0gMTsKKyAgICAgICAgZWxzZSBpZiAoY3BlLT5jaFswXS5pY3MudXNlX2tiX3dpbmRvd1swXSA9 PSAwICYmCisgICAgICAgICAgICAgICAgIGNwZS0+Y2hbMF0uaWNzLnVzZV9rYl93aW5kb3dbMV0g PT0gMSkKKyAgICAgICAgICAgIHNoYXBlID0gMjsKKyAgICAgICAgZWxzZSBpZiAoY3BlLT5jaFsw XS5pY3MudXNlX2tiX3dpbmRvd1swXSA9PSAxICYmCisgICAgICAgICAgICAgICAgIGNwZS0+Y2hb MF0uaWNzLnVzZV9rYl93aW5kb3dbMV0gPT0gMCkKKyAgICAgICAgICAgIHNoYXBlID0gMzsKKyAg ICAgICAgZWxzZQorICAgICAgICAgICAgc2hhcGUgPSAzOworICAgIH0gZWxzZSB7CisgICAgICAg IHdpbiA9IGNwZS0+Y2hbMF0uaWNzLndpbmRvd19zZXF1ZW5jZVswXSA9PSBMT05HX1NUT1BfU0VR VUVOQ0U7CisgICAgICAgIHNoYXBlID0gY3BlLT5jaFswXS5pY3MudXNlX2tiX3dpbmRvd1sxXTsK KyAgICB9CisKKyAgICByZXR1cm4gZmZfYWFjX3VzYWNfbWRzdF9maWx0X2N1clt3aW5dW3NoYXBl XTsKK30KKworc3RhdGljIHZvaWQgc3BlY3RydW1fZGVjb2RlKEFBQ0RlY0NvbnRleHQgKmFjLCBB QUNVU0FDQ29uZmlnICp1c2FjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENoYW5uZWxF bGVtZW50ICpjcGUsIGludCBuYl9jaGFubmVscykKK3sKKyAgICBBQUNVc2FjU3RlcmVvICp1cyA9 ICZjcGUtPnVzOworCisgICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsr KSB7CisgICAgICAgIFNpbmdsZUNoYW5uZWxFbGVtZW50ICpzY2UgPSAmY3BlLT5jaFtjaF07Cisg ICAgICAgIEFBQ1VzYWNFbGVtRGF0YSAqdWUgPSAmc2NlLT51ZTsKKworICAgICAgICBzcGVjdHJ1 bV9zY2FsZShhYywgc2NlLCB1ZSk7CisgICAgfQorCisgICAgaWYgKG5iX2NoYW5uZWxzID4gMSAm JiB1cy0+Y29tbW9uX3dpbmRvdykgeworICAgICAgICBpZiAodXMtPm1zX21hc2tfbW9kZSA9PSAz KSB7CisgICAgICAgICAgICBjb25zdCBmbG9hdCAqZmlsdDsKKyAgICAgICAgICAgIGNvbXBsZXhf c3RlcmVvX2Rvd25taXhfY3VyKGFjLCBjcGUsIHVzLT5kbWl4X3JlKTsKKyAgICAgICAgICAgIGNv bXBsZXhfc3RlcmVvX2Rvd25taXhfcHJldihhYywgY3BlLCB1cy0+cHJldl9kbWl4X3JlKTsKKwor ICAgICAgICAgICAgZmlsdCA9IGNvbXBsZXhfc3RlcmVvX2dldF9maWx0ZXIoY3BlLCAwKTsKKyAg ICAgICAgICAgIGNvbXBsZXhfc3RlcmVvX2ludGVycG9sYXRlX2ltYWcodXMtPmRtaXhfaW0sIHVz LT5kbWl4X3JlLCBmaWx0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICB1c2FjLT5jb3JlX2ZyYW1lX2xlbiwgMSwgMSk7CisgICAgICAgICAgICBpZiAodXMtPnVz ZV9wcmV2X2ZyYW1lKSB7CisgICAgICAgICAgICAgICAgZmlsdCA9IGNvbXBsZXhfc3RlcmVvX2dl dF9maWx0ZXIoY3BlLCAxKTsKKyAgICAgICAgICAgICAgICBjb21wbGV4X3N0ZXJlb19pbnRlcnBv bGF0ZV9pbWFnKHVzLT5kbWl4X2ltLCB1cy0+cHJldl9kbWl4X3JlLCBmaWx0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNhYy0+Y29yZV9mcmFtZV9s ZW4sIC0xLCAxKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYXBwbHlfY29tcGxleF9z dGVyZW8oYWMsIGNwZSk7CisgICAgICAgIH0gZWxzZSBpZiAodXMtPm1zX21hc2tfbW9kZSA+IDAp IHsKKyAgICAgICAgICAgIGFjLT5kc3AuYXBwbHlfbWlkX3NpZGVfc3RlcmVvKGFjLCBjcGUpOwor ICAgICAgICB9CisgICAgfQorCisgICAgLyogU2F2ZSBjb2VmZmljaWVudHMgYW5kIGFscGhhIHZh bHVlcyBmb3IgcHJlZGljdGlvbiByZWFzb25zICovCisgICAgaWYgKG5iX2NoYW5uZWxzID4gMSkg eworICAgICAgICBBQUNVc2FjU3RlcmVvICp1cyA9ICZjcGUtPnVzOworICAgICAgICBmb3IgKGlu dCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7IGNoKyspIHsKKyAgICAgICAgICAgIFNpbmdsZUNo YW5uZWxFbGVtZW50ICpzY2UgPSAmY3BlLT5jaFtjaF07CisgICAgICAgICAgICBtZW1jcHkoc2Nl LT5wcmV2X2NvZWZmcywgc2NlLT5jb2VmZnMsIHNpemVvZihzY2UtPmNvZWZmcykpOworICAgICAg ICB9CisgICAgICAgIG1lbWNweSh1cy0+cHJldl9hbHBoYV9xX3JlLCB1cy0+YWxwaGFfcV9yZSwg c2l6ZW9mKHVzLT5hbHBoYV9xX3JlKSk7CisgICAgICAgIG1lbWNweSh1cy0+cHJldl9hbHBoYV9x X2ltLCB1cy0+YWxwaGFfcV9pbSwgc2l6ZW9mKHVzLT5hbHBoYV9xX2ltKSk7CisgICAgfQorCisg ICAgZm9yIChpbnQgY2ggPSAwOyBjaCA8IG5iX2NoYW5uZWxzOyBjaCsrKSB7CisgICAgICAgIFNp bmdsZUNoYW5uZWxFbGVtZW50ICpzY2UgPSAmY3BlLT5jaFtjaF07CisKKyAgICAgICAgLyogQXBw bHkgVE5TICovCisgICAgICAgIGlmIChzY2UtPnRucy5wcmVzZW50KQorICAgICAgICAgICAgYWMt PmRzcC5hcHBseV90bnMoc2NlLT5jb2VmZnMsICZzY2UtPnRucywgJnNjZS0+aWNzLCAxKTsKKwor ICAgICAgICBhYy0+b2NbMV0ubTRhYy5mcmFtZV9sZW5ndGhfc2hvcnQgPyBhYy0+ZHNwLmltZGN0 X2FuZF93aW5kb3dpbmdfNzY4KGFjLCBzY2UpIDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWMtPmRzcC5pbWRjdF9hbmRfd2luZG93aW5nKGFjLCBzY2UpOwor ICAgIH0KK30KKworc3RhdGljIGludCBkZWNvZGVfdXNhY19jb3JlX2NvZGVyKEFBQ0RlY0NvbnRl eHQgKmFjLCBBQUNVU0FDQ29uZmlnICp1c2FjLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIEFBQ1VzYWNFbGVtQ29uZmlnICplYywgQ2hhbm5lbEVsZW1lbnQgKmNoZSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBHZXRCaXRDb250ZXh0ICpnYiwgaW50IGluZGVw X2ZsYWcsIGludCBuYl9jaGFubmVscykKK3sKKyAgICBpbnQgcmV0OworICAgIGludCBhcml0aF9y ZXNldF9mbGFnOworICAgIEFBQ1VzYWNTdGVyZW8gKnVzID0gJmNoZS0+dXM7CisKKyAgICAvKiBM b2NhbCBzeW1ib2xzICovCisgICAgdWludDhfdCBnbG9iYWxfZ2FpbjsKKworICAgIHVzLT5jb21t b25fd2luZG93ID0gMDsKKyAgICBjaGUtPmNoWzBdLnRucy5wcmVzZW50ID0gY2hlLT5jaFsxXS50 bnMucHJlc2VudCA9IDA7CisKKyAgICBmb3IgKGludCBjaCA9IDA7IGNoIDwgbmJfY2hhbm5lbHM7 IGNoKyspIHsKKyAgICAgICAgU2luZ2xlQ2hhbm5lbEVsZW1lbnQgKnNjZSA9ICZjaGUtPmNoW2No XTsKKyAgICAgICAgQUFDVXNhY0VsZW1EYXRhICp1ZSA9ICZzY2UtPnVlOworCisgICAgICAgIHVl LT5jb3JlX21vZGUgPSBnZXRfYml0czEoZ2IpOworICAgIH0KKworICAgIGlmIChuYl9jaGFubmVs cyA9PSAyKSB7CisgICAgICAgIHJldCA9IGRlY29kZV91c2FjX3N0ZXJlb19pbmZvKGFjLCB1c2Fj LCBlYywgY2hlLCBnYiwgaW5kZXBfZmxhZyk7CisgICAgICAgIGlmIChyZXQpCisgICAgICAgICAg ICByZXR1cm4gcmV0OworICAgIH0KKworICAgIGZvciAoaW50IGNoID0gMDsgY2ggPCBuYl9jaGFu bmVsczsgY2grKykgeworICAgICAgICBTaW5nbGVDaGFubmVsRWxlbWVudCAqc2NlID0gJmNoZS0+ Y2hbY2hdOworICAgICAgICBJbmRpdmlkdWFsQ2hhbm5lbFN0cmVhbSAqaWNzID0gJnNjZS0+aWNz OworICAgICAgICBBQUNVc2FjRWxlbURhdGEgKnVlID0gJnNjZS0+dWU7CisKKyAgICAgICAgaWYg KHVlLT5jb3JlX21vZGUpIHsgLyogbHBkX2NoYW5uZWxfc3RyZWFtICovCisgICAgICAgICAgICBy ZXQgPSBmZl9hYWNfbGRwX3BhcnNlX2NoYW5uZWxfc3RyZWFtKGFjLCB1c2FjLCB1ZSwgZ2IpOwor ICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg ICAgICAgfQorCisgICAgICAgIGlmICgobmJfY2hhbm5lbHMgPT0gMSkgfHwKKyAgICAgICAgICAg IChjaGUtPmNoWzBdLnVlLmNvcmVfbW9kZSAhPSBjaGUtPmNoWzFdLnVlLmNvcmVfbW9kZSkpCisg ICAgICAgICAgICBzY2UtPnRucy5wcmVzZW50ID0gZ2V0X2JpdHMxKGdiKTsKKworICAgICAgICAv KiBmZF9jaGFubmVsX3N0cmVhbSAqLworICAgICAgICBnbG9iYWxfZ2FpbiA9IGdldF9iaXRzKGdi LCA4KTsKKworICAgICAgICB1ZS0+bm9pc2UubGV2ZWwgPSAwOworICAgICAgICBpZiAoZWMtPm5v aXNlX2ZpbGwpIHsKKyAgICAgICAgICAgIHVlLT5ub2lzZS5sZXZlbCA9IGdldF9iaXRzKGdiLCAz KTsKKyAgICAgICAgICAgIHVlLT5ub2lzZS5vZmZzZXQgPSBnZXRfYml0cyhnYiwgNSk7CisgICAg ICAgIH0KKworICAgICAgICBpZiAoIXVzLT5jb21tb25fd2luZG93KSB7CisgICAgICAgICAgICAv KiBpY3NfaW5mbygpICovCisgICAgICAgICAgICBpY3MtPndpbmRvd19zZXF1ZW5jZVsxXSA9IGlj cy0+d2luZG93X3NlcXVlbmNlWzBdOworICAgICAgICAgICAgaWNzLT53aW5kb3dfc2VxdWVuY2Vb MF0gPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICBpY3MtPnVzZV9rYl93aW5kb3dbMV0g PSBpY3MtPnVzZV9rYl93aW5kb3dbMF07CisgICAgICAgICAgICBpY3MtPnVzZV9rYl93aW5kb3db MF0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICAgICAgaWYgKGljcy0+d2luZG93X3NlcXVlbmNl WzBdID09IEVJR0hUX1NIT1JUX1NFUVVFTkNFKSB7CisgICAgICAgICAgICAgICAgaWNzLT5tYXhf c2ZiID0gZ2V0X2JpdHMoZ2IsIDQpOworICAgICAgICAgICAgICAgIHVlLT5zY2FsZV9mYWN0b3Jf Z3JvdXBpbmcgPSBnZXRfYml0cyhnYiwgNyk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIGljcy0+bWF4X3NmYiA9IGdldF9iaXRzKGdiLCA2KTsKKyAgICAgICAgICAgIH0K KworICAgICAgICAgICAgcmV0ID0gc2V0dXBfc2NlKGFjLCBzY2UsIHVzYWMpOworICAgICAgICAg ICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAgICAgfQor CisgICAgICAgIGlmIChlYy0+dHdfbWRjdCAmJiAhdXMtPmNvbW1vbl90dykgeworICAgICAgICAg ICAgLyogdHdfZGF0YSgpICovCisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAvKiB0 d19kYXRhX3ByZXNlbnQgKi8KKyAgICAgICAgICAgICAgICAvKiBUaW1lIHdhcnBpbmcgaXMgbm90 IHN1cHBvcnRlZCBpbiBiYXNlbGluZSBwcm9maWxlIHN0cmVhbXMuICovCisgICAgICAgICAgICAg ICAgYXZwcml2X3JlcG9ydF9taXNzaW5nX2ZlYXR1cmUoYWMtPmF2Y3R4LAorICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBQUMgVVNBQyB0aW1ld2FycGluZyIp OworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorCisgICAgICAgIHJldCA9IGRlY29kZV91c2FjX3NjYWxlX2ZhY3Rv cnMoYWMsIHNjZSwgZ2IsIGdsb2JhbF9nYWluKTsKKyAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIGFjLT5kc3AuZGVxdWFudF9zY2FsZWZhY3Rv cnMoc2NlKTsKKworICAgICAgICBpZiAoc2NlLT50bnMucHJlc2VudCkgeworICAgICAgICAgICAg cmV0ID0gZmZfYWFjX2RlY29kZV90bnMoYWMsICZzY2UtPnRucywgZ2IsIGljcyk7CisgICAgICAg ICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gcmV0OworICAgICAgICB9 CisKKyAgICAgICAgLyogYWNfc3BlY3RyYWxfZGF0YSAqLworICAgICAgICBhcml0aF9yZXNldF9m bGFnID0gaW5kZXBfZmxhZzsKKyAgICAgICAgaWYgKCFhcml0aF9yZXNldF9mbGFnKQorICAgICAg ICAgICAgYXJpdGhfcmVzZXRfZmxhZyA9IGdldF9iaXRzMShnYik7CisKKyAgICAgICAgLyogRGVj b2RlIGNvZWZmcyAqLworICAgICAgICBtZW1zZXQoJnNjZS0+Y29lZmZzWzBdLCAwLCAxMDI0KnNp emVvZihmbG9hdCkpOworICAgICAgICBmb3IgKGludCB3aW4gPSAwOyB3aW4gPCBpY3MtPm51bV93 aW5kb3dzOyB3aW4rKykgeworICAgICAgICAgICAgaW50IGxnID0gaWNzLT5zd2Jfb2Zmc2V0W2lj cy0+bWF4X3NmYl07CisgICAgICAgICAgICBpbnQgTjsKKyAgICAgICAgICAgIGlmIChpY3MtPndp bmRvd19zZXF1ZW5jZVswXSA9PSBFSUdIVF9TSE9SVF9TRVFVRU5DRSkKKyAgICAgICAgICAgICAg ICBOID0gdXNhYy0+Y29yZV9mcmFtZV9sZW4gLyA4OworICAgICAgICAgICAgZWxzZQorICAgICAg ICAgICAgICAgIE4gPSB1c2FjLT5jb3JlX2ZyYW1lX2xlbjsKKworICAgICAgICAgICAgcmV0ID0g ZGVjb2RlX3NwZWN0cnVtX2FuZF9kZXF1YW50X2FjKGFjLCBzY2UtPmNvZWZmcyArIHdpbioxMjgs IGdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNj ZS0+c2YsICZ1ZS0+YWMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgYXJpdGhfcmVzZXRfZmxhZyAmJiAod2luID09IDApLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxnLCBOKTsKKyAgICAgICAgICAgIGlm IChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKworICAg ICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAvKiBmYWNfZGF0YV9wcmVzZW50ICovCisgICAgICAg ICAgICBjb25zdCB1aW50MTZfdCBsZW5fOCA9IHVzYWMtPmNvcmVfZnJhbWVfbGVuIC8gODsKKyAg ICAgICAgICAgIGNvbnN0IHVpbnQxNl90IGxlbl8xNiA9IHVzYWMtPmNvcmVfZnJhbWVfbGVuIC8g MTY7CisgICAgICAgICAgICBjb25zdCB1aW50MTZfdCBmYWNfbGVuID0gaWNzLT53aW5kb3dfc2Vx dWVuY2VbMF0gPT0gRUlHSFRfU0hPUlRfU0VRVUVOQ0UgPyBsZW5fOCA6IGxlbl8xNjsKKyAgICAg ICAgICAgIHJldCA9IGZmX2FhY19wYXJzZV9mYWNfZGF0YSh1ZSwgZ2IsIDEsIGZhY19sZW4pOwor ICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAg ICAgICAgfQorICAgIH0KKworICAgIHNwZWN0cnVtX2RlY29kZShhYywgdXNhYywgY2hlLCBuYl9j aGFubmVscyk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9hdWRpb19w cmVyb2xsKEFBQ0RlY0NvbnRleHQgKmFjLCBHZXRCaXRDb250ZXh0ICpnYikKK3sKKyAgICBpbnQg cmV0ID0gMDsKKyAgICBHZXRCaXRDb250ZXh0IGdiYzsKKyAgICBPdXRwdXRDb25maWd1cmF0aW9u ICpvYyA9ICZhYy0+b2NbMV07CisgICAgTVBFRzRBdWRpb0NvbmZpZyAqbTRhYyA9ICZvYy0+bTRh YzsKKyAgICBNUEVHNEF1ZGlvQ29uZmlnIG00YWNfYmFrID0gb2MtPm00YWM7CisgICAgdWludDhf dCB0ZW1wX2RhdGFbNTEyXTsKKyAgICB1aW50OF90ICp0bXBfYnVmID0gdGVtcF9kYXRhOworICAg IHNpemVfdCB0bXBfYnVmX3NpemUgPSBzaXplb2YodGVtcF9kYXRhKTsKKworICAgIGF2X3VudXNl ZCBpbnQgY3Jvc3NmYWRlOworICAgIGludCBudW1fcHJlcm9sbF9mcmFtZXM7CisKKyAgICBpbnQg Y29uZmlnX2xlbiA9IGdldF9lc2NhcGVkX3ZhbHVlKGdiLCA0LCA0LCA4KTsKKworICAgIC8qIElt cGxlbWVudGF0aW9ucyBhcmUgZnJlZSB0byBwYWQgdGhlIGNvbmZpZyB0byBhbnkgbGVuZ3RoLCBz byB1c2UgYQorICAgICAqIGRpZmZlcmVudCByZWFkZXIgZm9yIHRoaXMuICovCisgICAgZ2JjID0g KmdiOworICAgIHJldCA9IGZmX2FhY191c2FjX2NvbmZpZ19kZWNvZGUoYWMsIGFjLT5hdmN0eCwg JmdiYywgb2MsIG00YWMtPmNoYW5fY29uZmlnKTsKKyAgICBpZiAocmV0IDwgMCkgeworICAgICAg ICAqbTRhYyA9IG00YWNfYmFrOworICAgICAgICByZXR1cm4gcmV0OworICAgIH0gZWxzZSB7Cisg ICAgICAgIGFjLT5vY1sxXS5tNGFjLmNoYW5fY29uZmlnID0gMDsKKyAgICB9CisKKyAgICAvKiA3 LjE4LjMuMyBCaXRyYXRlIGFkYXB0aW9uCisgICAgICogSWYgY29uZmlndXJhdGlvbiBkaWRuJ3Qg Y2hhbmdlIGFmdGVyIGFwcGx5aW5nIHByZXJvbGwsIGNvbnRpbnVlCisgICAgICogd2l0aG91dCBk ZWNvZGluZyBpdC4gKi8KKyAgICBpZiAoIW1lbWNtcChtNGFjLCAmbTRhY19iYWssIHNpemVvZiht NGFjX2JhaykpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHNraXBfYml0c19sb25nKGdiLCBj b25maWdfbGVuKjgpOworCisgICAgY3Jvc3NmYWRlID0gZ2V0X2JpdHMxKGdiKTsgLyogYXBwbHlD cm9zc2ZhZGUgKi8KKyAgICBza2lwX2JpdHMxKGdiKTsgLyogcmVzZXJ2ZWQgKi8KKyAgICBudW1f cHJlcm9sbF9mcmFtZXMgPSBnZXRfZXNjYXBlZF92YWx1ZShnYiwgMiwgNCwgMCk7IC8qIG51bVBy ZVJvbGxGcmFtZXMgKi8KKworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtX3ByZXJvbGxfZnJh bWVzOyBpKyspIHsKKyAgICAgICAgaW50IGdvdF9mcmFtZV9wdHIgPSAwOworICAgICAgICBpbnQg YXVfbGVuID0gZ2V0X2VzY2FwZWRfdmFsdWUoZ2IsIDE2LCAxNiwgMCk7CisKKyAgICAgICAgaWYg KGF1X2xlbio4ID4gdG1wX2J1Zl9zaXplKSB7CisgICAgICAgICAgICB1aW50OF90ICp0bXAyOwor ICAgICAgICAgICAgdG1wX2J1ZiA9IHRtcF9idWYgPT0gdGVtcF9kYXRhID8gTlVMTCA6IHRtcF9i dWY7CisgICAgICAgICAgICB0bXAyID0gcmVhbGxvYyh0bXBfYnVmLCBhdV9sZW4qOCk7CisgICAg ICAgICAgICBpZiAoIXRtcDIpIHsKKyAgICAgICAgICAgICAgICBpZiAodG1wX2J1ZiAhPSB0ZW1w X2RhdGEpCisgICAgICAgICAgICAgICAgICAgIGF2X2ZyZWUodG1wX2J1Zik7CisgICAgICAgICAg ICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg IHRtcF9idWYgPSB0bXAyOworICAgICAgICB9CisKKyAgICAgICAgLyogQnl0ZSBhbGlnbm1lbnQg aXMgbm90IGd1YXJhbnRlZWQuICovCisgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXVfbGVu OyBpKyspCisgICAgICAgICAgICB0bXBfYnVmW2ldID0gZ2V0X2JpdHMoZ2IsIDgpOworCisgICAg ICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZnYmMsIHRtcF9idWYsIGF1X2xlbik7CisgICAgICAg IGlmIChyZXQgPCAwKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgcmV0ID0gZmZfYWFj X3VzYWNfZGVjb2RlX2ZyYW1lKGFjLT5hdmN0eCwgYWMsICZnYmMsICZnb3RfZnJhbWVfcHRyKTsK KyAgICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp ZiAodG1wX2J1ZiAhPSB0ZW1wX2RhdGEpCisgICAgICAgIGF2X2ZyZWUodG1wX2J1Zik7CisKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9leHRfZWxlKEFBQ0RlY0NvbnRleHQg KmFjLCBBQUNVc2FjRWxlbUNvbmZpZyAqZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBHZXRC aXRDb250ZXh0ICpnYikKK3sKKyAgICB1aW50OF90ICp0bXA7CisgICAgdWludDhfdCBwbF9mcmFn X3N0YXJ0ID0gMTsKKyAgICB1aW50OF90IHBsX2ZyYWdfZW5kID0gMTsKKyAgICB1aW50MzJfdCBs ZW47CisKKyAgICBpZiAoIWdldF9iaXRzMShnYikpIC8qIHVzYWNFeHRFbGVtZW50UHJlc2VudCAq LworICAgICAgICByZXR1cm4gMDsKKworICAgIGlmIChnZXRfYml0czEoZ2IpKSB7IC8qIHVzYWNF eHRFbGVtZW50VXNlRGVmYXVsdExlbmd0aCAqLworICAgICAgICBsZW4gPSBlLT5leHQuZGVmYXVs dF9sZW47CisgICAgfSBlbHNlIHsKKyAgICAgICAgbGVuID0gZ2V0X2JpdHMoZ2IsIDgpOyAvKiB1 c2FjRXh0RWxlbWVudFBheWxvYWRMZW5ndGggKi8KKyAgICAgICAgaWYgKGxlbiA9PSAyNTUpCisg ICAgICAgICAgICBsZW4gKz0gZ2V0X2JpdHMoZ2IsIDE2KSAtIDI7CisgICAgfQorCisgICAgaWYg KCFsZW4pCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKGUtPmV4dC5wYXlsb2FkX2ZyYWcp IHsKKyAgICAgICAgcGxfZnJhZ19zdGFydCA9IGdldF9iaXRzMShnYik7IC8qIHVzYWNFeHRFbGVt ZW50U3RhcnQgKi8KKyAgICAgICAgcGxfZnJhZ19lbmQgPSBnZXRfYml0czEoZ2IpOyAvKiB1c2Fj RXh0RWxlbWVudFN0b3AgKi8KKyAgICB9CisKKyAgICBpZiAocGxfZnJhZ19zdGFydCkKKyAgICAg ICAgZS0+ZXh0LnBsX2RhdGFfb2Zmc2V0ID0gMDsKKworICAgIC8qIElmIGFuIGV4dGVuc2lvbiBz dGFydHMgYW5kIGVuZHMgdGhpcyBwYWNrZXQsIHdlIGNhbiBkaXJlY3RseSB1c2UgaXQgKi8KKyAg ICBpZiAoIShwbF9mcmFnX3N0YXJ0ICYmIHBsX2ZyYWdfZW5kKSkgeworICAgICAgICB0bXAgPSBh dl9yZWFsbG9jKGUtPmV4dC5wbF9kYXRhLCBlLT5leHQucGxfZGF0YV9vZmZzZXQgKyBsZW4pOwor ICAgICAgICBpZiAoIXRtcCkgeworICAgICAgICAgICAgYXZfZnJlZShlLT5leHQucGxfZGF0YSk7 CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICB9CisgICAgICAg IGUtPmV4dC5wbF9kYXRhID0gdG1wOworCisgICAgICAgIC8qIFJlYWRvdXQgZGF0YSB0byBhIGJ1 ZmZlciAqLworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKQorICAgICAgICAg ICAgZS0+ZXh0LnBsX2RhdGFbZS0+ZXh0LnBsX2RhdGFfb2Zmc2V0ICsgaV0gPSBnZXRfYml0cyhn YiwgOCk7CisgICAgfQorCisgICAgZS0+ZXh0LnBsX2RhdGFfb2Zmc2V0ICs9IGxlbjsKKworICAg IGlmIChwbF9mcmFnX2VuZCkgeworICAgICAgICBpbnQgcmV0ID0gMDsKKyAgICAgICAgaW50IHN0 YXJ0X2JpdHMgPSBnZXRfYml0c19jb3VudChnYik7CisgICAgICAgIGNvbnN0IGludCBwbF9sZW4g PSBlLT5leHQucGxfZGF0YV9vZmZzZXQ7CisgICAgICAgIEdldEJpdENvbnRleHQgKmdiMiA9IGdi OworICAgICAgICBHZXRCaXRDb250ZXh0IGdiYzsKKyAgICAgICAgaWYgKCEocGxfZnJhZ19zdGFy dCAmJiBwbF9mcmFnX2VuZCkpIHsKKyAgICAgICAgICAgIHJldCA9IGluaXRfZ2V0X2JpdHM4KCZn YmMsIGUtPmV4dC5wbF9kYXRhLCBwbF9sZW4pOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisg ICAgICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgZ2IyID0gJmdiYzsKKyAg ICAgICAgfQorCisgICAgICAgIHN3aXRjaCAoZS0+ZXh0LnR5cGUpIHsKKyAgICAgICAgY2FzZSBJ RF9FWFRfRUxFX0ZJTEw6CisgICAgICAgICAgICAvKiBGaWxsZXIgZWxlbWVudHMgaGF2ZSBubyB1 c2FibGUgcGF5bG9hZCAqLworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgSURfRVhU X0VMRV9BVURJT1BSRVJPTEw6CisgICAgICAgICAgICByZXQgPSBwYXJzZV9hdWRpb19wcmVyb2xs KGFjLCBnYjIpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg ICAgICAvKiBUaGlzIHNob3VsZCBuZXZlciBoYXBwZW4gKi8KKyAgICAgICAgICAgIGF2X2Fzc2Vy dDAoMCk7CisgICAgICAgIH0KKyAgICAgICAgYXZfZnJlZXAoJmUtPmV4dC5wbF9kYXRhKTsKKyAg ICAgICAgaWYgKHJldCA8IDApCisgICAgICAgICAgICByZXR1cm4gcmV0OworCisgICAgICAgIHNr aXBfYml0c19sb25nKGdiLCBwbF9sZW4qOCAtIChnZXRfYml0c19jb3VudChnYikgLSBzdGFydF9i aXRzKSk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBmZl9hYWNfdXNhY19kZWNv ZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBQUNEZWNDb250ZXh0ICphYywKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIGludCAqZ290X2ZyYW1l X3B0cikKK3sKKyAgICBpbnQgcmV0LCBuYl9jaF9lbCwgaXNfZG1vbm8gPSAwOworICAgIGludCBp bmRlcF9mbGFnLCBzYW1wbGVzID0gMDsKKyAgICBpbnQgYXVkaW9fZm91bmQgPSAwLCBzY2VfY291 bnQgPSAwOworICAgIEFWRnJhbWUgKmZyYW1lID0gYWMtPmZyYW1lOworCisgICAgZmZfYWFjX291 dHB1dF9jb25maWd1cmUoYWMsIGFjLT5vY1sxXS5sYXlvdXRfbWFwLCBhYy0+b2NbMV0ubGF5b3V0 X21hcF90YWdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFjLT5vY1sxXS5zdGF0dXMs IDApOworCisgICAgaW5kZXBfZmxhZyA9IGdldF9iaXRzMShnYik7CisKKyAgICBuYl9jaF9lbCA9 IDA7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhYy0+b2NbMV0udXNhYy5uYl9lbGVtczsgaSsr KSB7CisgICAgICAgIEFBQ1VzYWNFbGVtQ29uZmlnICplID0gJmFjLT5vY1sxXS51c2FjLmVsZW1z W2ldOworICAgICAgICBDaGFubmVsRWxlbWVudCAqY2hlOworCisgICAgICAgIHN3aXRjaCAoZS0+ dHlwZSkgeworICAgICAgICBjYXNlIElEX1VTQUNfU0NFOgorICAgICAgICAgICAgY2hlID0gZmZf YWFjX2dldF9jaGUoYWMsIFRZUEVfU0NFLCBuYl9jaF9lbCsrKTsKKyAgICAgICAgICAgIGlmICgh Y2hlKSB7CisgICAgICAgICAgICAgICAgYXZfbG9nKGFjLT5hdmN0eCwgQVZfTE9HX0VSUk9SLAor ICAgICAgICAgICAgICAgICAgICAgICAiY2hhbm5lbCBlbGVtZW50ICVkLiVkIGlzIG5vdCBhbGxv Y2F0ZWRcbiIsCisgICAgICAgICAgICAgICAgICAgICAgIFRZUEVfU0NFLCBuYl9jaF9lbCAtIDEp OworICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAg ICAgfQorCisgICAgICAgICAgICByZXQgPSBkZWNvZGVfdXNhY19jb3JlX2NvZGVyKGFjLCAmYWMt Pm9jWzFdLnVzYWMsIGUsIGNoZSwgZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGluZGVwX2ZsYWcsIDEpOworICAgICAgICAgICAgaWYgKHJldCA8IDApCisgICAg ICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAgICAgICAgc2NlX2NvdW50Kys7CisgICAg ICAgICAgICBhdWRpb19mb3VuZCA9IDE7CisgICAgICAgICAgICBjaGUtPnByZXNlbnQgPSAxOwor ICAgICAgICAgICAgc2FtcGxlcyA9IGFjLT5vY1sxXS5tNGFjLmZyYW1lX2xlbmd0aF9zaG9ydCA/ IDc2OCA6IDEwMjQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBJRF9VU0FDX0NQ RToKKyAgICAgICAgICAgIGNoZSA9IGZmX2FhY19nZXRfY2hlKGFjLCBUWVBFX0NQRSwgbmJfY2hf ZWwrKyk7CisgICAgICAgICAgICBpZiAoIWNoZSkgeworICAgICAgICAgICAgICAgIGF2X2xvZyhh Yy0+YXZjdHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAgICAgImNoYW5uZWwg ZWxlbWVudCAlZC4lZCBpcyBub3QgYWxsb2NhdGVkXG4iLAorICAgICAgICAgICAgICAgICAgICAg ICBUWVBFX1NDRSwgbmJfY2hfZWwgLSAxKTsKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgcmV0ID0gZGVjb2Rl X3VzYWNfY29yZV9jb2RlcihhYywgJmFjLT5vY1sxXS51c2FjLCBlLCBjaGUsIGdiLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbmRlcF9mbGFnLCAyKTsKKyAgICAg ICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiByZXQ7CisKKyAgICAg ICAgICAgIGF1ZGlvX2ZvdW5kID0gMTsKKyAgICAgICAgICAgIGNoZS0+cHJlc2VudCA9IDE7Cisg ICAgICAgICAgICBzYW1wbGVzID0gYWMtPm9jWzFdLm00YWMuZnJhbWVfbGVuZ3RoX3Nob3J0ID8g NzY4IDogMTAyNDsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIElEX1VTQUNfTEZF OgorICAgICAgICAgICAgYXZwcml2X3JlcG9ydF9taXNzaW5nX2ZlYXR1cmUoYWMtPmF2Y3R4LAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIkFBQyBVU0FDIExGRSIp OworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAg YnJlYWs7CisgICAgICAgIGNhc2UgSURfVVNBQ19FWFQ6CisgICAgICAgICAgICByZXQgPSBwYXJz ZV9leHRfZWxlKGFjLCBlLCBnYik7CisgICAgICAgICAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg ICAgICAgICByZXR1cm4gcmV0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9 CisKKyAgICBpZiAoYWMtPm9jWzFdLnN0YXR1cyAmJiBhdWRpb19mb3VuZCkgeworICAgICAgICBh dmN0eC0+c2FtcGxlX3JhdGUgPSBhYy0+b2NbMV0ubTRhYy5zYW1wbGVfcmF0ZTsKKyAgICAgICAg YXZjdHgtPmZyYW1lX3NpemUgPSBzYW1wbGVzOworICAgICAgICBhYy0+b2NbMV0uc3RhdHVzID0g T0NfTE9DS0VEOworICAgIH0KKworICAgIGlmICghZnJhbWUtPmRhdGFbMF0gJiYgc2FtcGxlcykg eworICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIm5vIGZyYW1lIGRhdGEgZm91 bmRcbiIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAg ICBpZiAoc2FtcGxlcykgeworICAgICAgICBmcmFtZS0+bmJfc2FtcGxlcyA9IHNhbXBsZXM7Cisg ICAgICAgIGZyYW1lLT5zYW1wbGVfcmF0ZSA9IGF2Y3R4LT5zYW1wbGVfcmF0ZTsKKyAgICAgICAg ZnJhbWUtPmZsYWdzID0gaW5kZXBfZmxhZyA/IEFWX0ZSQU1FX0ZMQUdfS0VZIDogMHgwOworICAg ICAgICAqZ290X2ZyYW1lX3B0ciA9IDE7CisgICAgfSBlbHNlIHsKKyAgICAgICAgYXZfZnJhbWVf dW5yZWYoYWMtPmZyYW1lKTsKKyAgICAgICAgZnJhbWUtPmZsYWdzID0gaW5kZXBfZmxhZyA/IEFW X0ZSQU1FX0ZMQUdfS0VZIDogMHgwOworICAgICAgICAqZ290X2ZyYW1lX3B0ciA9IDA7CisgICAg fQorCisgICAgLyogZm9yIGR1YWwtbW9ubyBhdWRpbyAoU0NFICsgU0NFKSAqLworICAgIGlzX2Rt b25vID0gYWMtPmRtb25vX21vZGUgJiYgc2NlX2NvdW50ID09IDIgJiYKKyAgICAgICAgICAgICAg ICFhdl9jaGFubmVsX2xheW91dF9jb21wYXJlKCZhYy0+b2NbMV0uY2hfbGF5b3V0LAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJihBVkNoYW5uZWxMYXlvdXQpQVZf Q0hBTk5FTF9MQVlPVVRfU1RFUkVPKTsKKyAgICBpZiAoaXNfZG1vbm8pIHsKKyAgICAgICAgaWYg KGFjLT5kbW9ub19tb2RlID09IDEpCisgICAgICAgICAgICBmcmFtZS0+ZGF0YVsxXSA9IGZyYW1l LT5kYXRhWzBdOworICAgICAgICBlbHNlIGlmIChhYy0+ZG1vbm9fbW9kZSA9PSAyKQorICAgICAg ICAgICAgZnJhbWUtPmRhdGFbMF0gPSBmcmFtZS0+ZGF0YVsxXTsKKyAgICB9CisKKyAgICByZXR1 cm4gMDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYWFjL2FhY2RlY191c2FjLmggYi9saWJh dmNvZGVjL2FhYy9hYWNkZWNfdXNhYy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAuLjQxMTZhMjA3M2EKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmNvZGVjL2FhYy9hYWNk ZWNfdXNhYy5oCkBAIC0wLDAgKzEsMzcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKGMpIDIwMjQgTHlu bmUgPGRldkBseW5uZS5lZT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisg KgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu ZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg Rm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0 IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz c2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3Qs IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8K KworI2lmbmRlZiBBVkNPREVDX0FBQ19BQUNERUNfVVNBQ19ICisjZGVmaW5lIEFWQ09ERUNfQUFD X0FBQ0RFQ19VU0FDX0gKKworI2luY2x1ZGUgImFhY2RlYy5oIgorCisjaW5jbHVkZSAibGliYXZj b2RlYy9nZXRfYml0cy5oIgorCitpbnQgZmZfYWFjX3VzYWNfY29uZmlnX2RlY29kZShBQUNEZWND b250ZXh0ICphYywgQVZDb2RlY0NvbnRleHQgKmF2Y3R4LAorICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2V0Qml0Q29udGV4dCAqZ2IsIE91dHB1dENvbmZpZ3VyYXRpb24gKm9jLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGNoYW5uZWxfY29uZmlnKTsKKworaW50IGZm X2FhY191c2FjX3Jlc2V0X3N0YXRlKEFBQ0RlY0NvbnRleHQgKmFjLCBPdXRwdXRDb25maWd1cmF0 aW9uICpvYyk7CisKK2ludCBmZl9hYWNfdXNhY19kZWNvZGVfZnJhbWUoQVZDb2RlY0NvbnRleHQg KmF2Y3R4LCBBQUNEZWNDb250ZXh0ICphYywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg R2V0Qml0Q29udGV4dCAqZ2IsIGludCAqZ290X2ZyYW1lX3B0cik7CisKKyNlbmRpZiAvKiBBVkNP REVDX0FBQ19BQUNERUNfVVNBQ19IICovCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhY3RhYi5j IGIvbGliYXZjb2RlYy9hYWN0YWIuYwppbmRleCAxOGFmYTY5YmFkLi43YjA0MDUzMWFhIDEwMDY0 NAotLS0gYS9saWJhdmNvZGVjL2FhY3RhYi5jCisrKyBiL2xpYmF2Y29kZWMvYWFjdGFiLmMKQEAg LTE5OTgsNiArMTk5OCwxMSBAQCBjb25zdCB1aW50OF90IGZmX3Ruc19tYXhfYmFuZHNfMTI4W10g PSB7CiB9OwogLy8gQH0KIAorY29uc3QgdWludDhfdCBmZl91c2FjX25vaXNlX2ZpbGxfc3RhcnRf b2Zmc2V0WzJdWzJdID0geworICAgIHsgMTYwLCAyMCB9LAorICAgIHsgMTIwLCAxNSB9LAorfTsK KwogY29uc3QgREVDTEFSRV9BTElHTkVEKDMyLCBmbG9hdCwgZmZfYWFjX2VsZF93aW5kb3dfNTEy KVsxOTIwXSA9IHsKICAgICAgMC4wMDMzODgzNCwgIDAuMDA1Njc3NDUsICAwLjAwODQ3Njc3LCAg MC4wMTE3MjY0MSwKICAgICAgMC4wMTUzMjU1NSwgIDAuMDE5MTc2NjQsICAwLjAyMzE4ODA5LCAg MC4wMjcyOTI1OSwKQEAgLTM4OTUsMyArMzkwMCw0MCBAQCBERUNMQVJFX0FMSUdORUQoMTYsIGNv bnN0IGZsb2F0LCBmZl9hYWNfZGVlbXBoX3dlaWdodHMpWzE2XSA9IHsKICAgICAwLAogICAgIFVT QUNfRU1QSF9DT0VGRiwKIH07CisKK2NvbnN0IGludCBmZl9hYWNfdXNhY19zYW1wbGVyYXRlWzMy XSA9IHsKKyAgICA5NjAwMCwgODgyMDAsIDY0MDAwLCA0ODAwMCwgNDQxMDAsIDMyMDAwLCAyNDAw MCwgMjIwNTAsCisgICAgMTYwMDAsIDEyMDAwLCAxMTAyNSwgIDgwMDAsICA3MzUwLCAgICAtMSwg ICAgLTEsIDU3NjAwLAorICAgIDUxMjAwLCA0MDAwMCwgMzg0MDAsIDM0MTUwLCAyODgwMCwgMjU2 MDAsIDIwMDAwLCAxOTIwMCwKKyAgICAxNzA3NSwgMTQ0MDAsIDEyODAwLCA5NjAwLCAgICAgLTEs ICAgIC0xLCAgICAtMSwgICAgLTEsCit9OworCisvKiBXaW5kb3cgdHlwZSAob25seSBsb25nK2Vp Z2h0LCBzdGFydC9zdG9wL3N0b3BzdGFydCksIHNpbmUrc2luZSwga2JkK2tiZCwgc2luZStrYmQs IGtiZCtzaW5lICovCitjb25zdCBmbG9hdCBmZl9hYWNfdXNhY19tZHN0X2ZpbHRfY3VyWzQgLyog V2luZG93ICovXVs0IC8qIFNoYXBlICovXVs3XSA9Cit7CisgICAgeyB7IDAuMDAwMDAwLCAgMC4w MDAwMDAsICAwLjUwMDAwMCwgMC4wMDAwMDAsIC0wLjUwMDAwMCwgIDAuMDAwMDAwLCAgMC4wMDAw MDAgfSwKKyAgICAgIHsgMC4wOTE0OTcsICAwLjAwMDAwMCwgIDAuNTgxNDI3LCAwLjAwMDAwMCwg LTAuNTgxNDI3LCAgMC4wMDAwMDAsIC0wLjA5MTQ5NyB9LAorICAgICAgeyAwLjA0NTc0OCwgIDAu MDU3MjM4LCAgMC41NDA3MTQsIDAuMDAwMDAwLCAtMC41NDA3MTQsIC0wLjA1NzIzOCwgLTAuMDQ1 NzQ4IH0sCisgICAgICB7IDAuMDQ1NzQ4LCAtMC4wNTcyMzgsICAwLjU0MDcxNCwgMC4wMDAwMDAs IC0wLjU0MDcxNCwgIDAuMDU3MjM4LCAtMC4wNDU3NDggfSB9LAorICAgIHsgeyAwLjEwMjY1OCwg IDAuMTAzNzkxLCAgMC41NjcxNDksIDAuMDAwMDAwLCAtMC41NjcxNDksIC0wLjEwMzc5MSwgLTAu MTAyNjU4IH0sCisgICAgICB7IDAuMTUwNTEyLCAgMC4wNDc5NjksICAwLjYwODU3NCwgMC4wMDAw MDAsIC0wLjYwODU3NCwgLTAuMDQ3OTY5LCAtMC4xNTA1MTIgfSwKKyAgICAgIHsgMC4xMDQ3NjMs ICAwLjEwNTIwNywgIDAuNTY3ODYxLCAwLjAwMDAwMCwgLTAuNTY3ODYxLCAtMC4xMDUyMDcsIC0w LjEwNDc2MyB9LAorICAgICAgeyAwLjE0ODQwNiwgIDAuMDQ2NTUzLCAgMC42MDc4NjMsIDAuMDAw MDAwLCAtMC42MDc4NjMsIC0wLjA0NjU1MywgLTAuMTQ4NDA2IH0gfSwKKyAgICB7IHsgMC4xMDI2 NTgsIC0wLjEwMzc5MSwgIDAuNTY3MTQ5LCAwLjAwMDAwMCwgLTAuNTY3MTQ5LCAgMC4xMDM3OTEs IC0wLjEwMjY1OCB9LAorICAgICAgeyAwLjE1MDUxMiwgLTAuMDQ3OTY5LCAgMC42MDg1NzQsIDAu MDAwMDAwLCAtMC42MDg1NzQsICAwLjA0Nzk2OSwgLTAuMTUwNTEyIH0sCisgICAgICB7IDAuMTQ4 NDA2LCAtMC4wNDY1NTMsICAwLjYwNzg2MywgMC4wMDAwMDAsIC0wLjYwNzg2MywgIDAuMDQ2NTUz LCAtMC4xNDg0MDYgfSwKKyAgICAgIHsgMC4xMDQ3NjMsIC0wLjEwNTIwNywgIDAuNTY3ODYxLCAw LjAwMDAwMCwgLTAuNTY3ODYxLCAgMC4xMDUyMDcsIC0wLjEwNDc2MyB9IH0sCisgICAgeyB7IDAu MjA1MzE2LCAgMC4wMDAwMDAsICAwLjYzNDI5OCwgMC4wMDAwMDAsIC0wLjYzNDI5OCwgIDAuMDAw MDAwLCAtMC4yMDUzMTYgfSwKKyAgICAgIHsgMC4yMDk1MjYsICAwLjAwMDAwMCwgIDAuNjM1NzIy LCAwLjAwMDAwMCwgLTAuNjM1NzIyLCAgMC4wMDAwMDAsIC0wLjIwOTUyNiB9LAorICAgICAgeyAw LjIwNzQyMSwgIDAuMDAxNDE2LCAgMC42MzUwMTAsIDAuMDAwMDAwLCAtMC42MzUwMTAsIC0wLjAw MTQxNiwgLTAuMjA3NDIxIH0sCisgICAgICB7IDAuMjA3NDIxLCAtMC4wMDE0MTYsICAwLjYzNTAx MCwgMC4wMDAwMDAsIC0wLjYzNTAxMCwgIDAuMDAxNDE2LCAtMC4yMDc0MjEgfSB9Cit9OworCisv KiBXaW5kb3cgdHlwZSAoZXZlcnl0aGluZy9sb25nc3RvcCtzdG9wc3RhcnQpLCBzaW5lIG9yIGti ZCAqLworY29uc3QgZmxvYXQgZmZfYWFjX3VzYWNfbWRzdF9maWx0X3ByZXZbMiAvKiBXaW5kb3cg Ki9dWzIgLyogc2luZS9rYmQgKi9dWzddID0KK3sKKyAgICB7IHsgMC4wMDAwMDAsIDAuMTA2MTAz LCAwLjI1MDAwMCwgMC4zMTgzMTAsIDAuMjUwMDAwLCAwLjEwNjEwMywgMC4wMDAwMDAgfSwKKyAg ICAgIHsgMC4wNTk1MDksIDAuMTIzNzE0LCAwLjE4NjU3OSwgMC4yMTMwNzcsIDAuMTg2NTc5LCAw LjEyMzcxNCwgMC4wNTk1MDkgfSB9LAorICAgIHsgeyAwLjAzODQ5OCwgMC4wMzkyMTIsIDAuMDM5 NjQ1LCAwLjAzOTc5MCwgMC4wMzk2NDUsIDAuMDM5MjEyLCAwLjAzODQ5OCB9LAorICAgICAgeyAw LjAyNjE0MiwgMC4wMjY0MTMsIDAuMDI2NTc3LCAwLjAyNjYzMSwgMC4wMjY1NzcsIDAuMDI2NDEz LCAwLjAyNjE0MiB9IH0KK307CmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2FhY3RhYi5oIGIvbGli YXZjb2RlYy9hYWN0YWIuaAppbmRleCA0ODFmYzU3ZDkzLi44ZGJiMjA5OGM1IDEwMDY0NAotLS0g YS9saWJhdmNvZGVjL2FhY3RhYi5oCisrKyBiL2xpYmF2Y29kZWMvYWFjdGFiLmgKQEAgLTExNSw0 ICsxMTUsMTQgQEAgZXh0ZXJuIGNvbnN0IHVpbnQ4X3QgZmZfdG5zX21heF9iYW5kc181MTIgWzEz XTsKIGV4dGVybiBjb25zdCB1aW50OF90IGZmX3Ruc19tYXhfYmFuZHNfNDgwIFsxM107CiBleHRl cm4gY29uc3QgdWludDhfdCBmZl90bnNfbWF4X2JhbmRzXzEyOCBbMTNdOwogCisvKiBbeF1beV0s IHggPT0gMSAtPiBmcmFtZSBsZW4gaXMgNzY4IGZyYW1lcywgeSA9PSAxIC0+IGlzIGVpZ2h0X3No b3J0ICovCitleHRlcm4gY29uc3QgdWludDhfdCBmZl91c2FjX25vaXNlX2ZpbGxfc3RhcnRfb2Zm c2V0WzJdWzJdOworCitleHRlcm4gY29uc3QgaW50IGZmX2FhY191c2FjX3NhbXBsZXJhdGVbMzJd OworCisvKiBXaW5kb3cgdHlwZSAob25seSBsb25nK2VpZ2h0LCBzdGFydC9zdG9wL3N0b3BzdGFy dCksIHNpbmUrc2luZSwga2JkK2tiZCwgc2luZStrYmQsIGtiZCtzaW5lICovCitleHRlcm4gY29u c3QgZmxvYXQgZmZfYWFjX3VzYWNfbWRzdF9maWx0X2N1cls0IC8qIFdpbmRvdyAqL11bNCAvKiBT aGFwZSAqL11bN107CisvKiBXaW5kb3cgdHlwZSAoZXZlcnl0aGluZy9sb25nc3RvcCtzdG9wc3Rh cnQpLCBzaW5lIG9yIGtiZCAqLworZXh0ZXJuIGNvbnN0IGZsb2F0IGZmX2FhY191c2FjX21kc3Rf ZmlsdF9wcmV2WzIgLyogV2luZG93ICovXVsyIC8qIHNpbmUva2JkICovXVs3XTsKKwogI2VuZGlm IC8qIEFWQ09ERUNfQUFDVEFCX0ggKi8KLS0gCjIuNDMuMC4zODEuZ2I0MzVhOTZjZTgKX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1h aWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFp bG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFi b3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVj dCAidW5zdWJzY3JpYmUiLgo=