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 341DF435A8 for ; Fri, 17 Jun 2022 13:32:39 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 6A8BC68B8DA; Fri, 17 Jun 2022 16:32:19 +0300 (EEST) Received: from mail0.khirnov.net (red.khirnov.net [176.97.15.12]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 5141B68B8C7 for ; Fri, 17 Jun 2022 16:32:11 +0300 (EEST) Received: from localhost (localhost [IPv6:::1]) by mail0.khirnov.net (Postfix) with ESMTP id DF6722400F5 for ; Fri, 17 Jun 2022 15:32:10 +0200 (CEST) Received: from mail0.khirnov.net ([IPv6:::1]) by localhost (mail0.khirnov.net [IPv6:::1]) (amavisd-new, port 10024) with ESMTP id QA-dI-STn6WQ for ; Fri, 17 Jun 2022 15:32:09 +0200 (CEST) Received: from libav.khirnov.net (libav.khirnov.net [IPv6:2a00:c500:561:201::7]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256 client-signature RSA-PSS (2048 bits) client-digest SHA256) (Client CN "libav.khirnov.net", Issuer "smtp.khirnov.net SMTP CA" (verified OK)) by mail0.khirnov.net (Postfix) with ESMTPS id F18A424017C for ; Fri, 17 Jun 2022 15:32:08 +0200 (CEST) Received: by libav.khirnov.net (Postfix, from userid 1000) id E35F63A1249; Fri, 17 Jun 2022 15:32:08 +0200 (CEST) From: Anton Khirnov To: ffmpeg-devel@ffmpeg.org Date: Fri, 17 Jun 2022 15:32:04 +0200 Message-Id: <20220617133206.23643-3-anton@khirnov.net> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220617133206.23643-1-anton@khirnov.net> References: <20220617133206.23643-1-anton@khirnov.net> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH 3/5] lavc/bitstream: templatize for BE/LE 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: , Reply-To: FFmpeg development discussions and patches 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: QWxsb3dzIHVzaW5nIGJvdGggQkUgYW5kIExFIGJpdHN0cmVhbSByZWFkZXJzIGluIHRoZSBzYW1l IGZpbGUuCi0tLQogbGliYXZjb2RlYy9iaXRzdHJlYW0uaCAgICAgICAgICB8IDM3OSArKy0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGxpYmF2Y29kZWMvYml0c3RyZWFtX3RlbXBsYXRlLmgg fCAzOTIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL3JlZi9mYXRlL3Nv dXJjZSAgICAgICAgICAgfCAgIDEgKwogMyBmaWxlcyBjaGFuZ2VkLCA0MTUgaW5zZXJ0aW9ucygr KSwgMzU3IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvYml0c3Ry ZWFtX3RlbXBsYXRlLmgKCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oIGIvbGli YXZjb2RlYy9iaXRzdHJlYW0uaAppbmRleCA4NWYxYWYyOGM4Li4zZmE2MzY5NWQzIDEwMDY0NAot LS0gYS9saWJhdmNvZGVjL2JpdHN0cmVhbS5oCisrKyBiL2xpYmF2Y29kZWMvYml0c3RyZWFtLmgK QEAgLTQ5LDg4ICs0OSw2IEBAIHR5cGVkZWYgc3RydWN0IEJpdHN0cmVhbUNvbnRleHQgewogICAg IHVuc2lnbmVkIHNpemVfaW5fYml0czsKIH0gQml0c3RyZWFtQ29udGV4dDsKIAotc3RhdGljIGlu bGluZSB2b2lkIHJlZmlsbF82NChCaXRzdHJlYW1Db250ZXh0ICpiYykKLXsKLSNpZiAhVU5DSEVD S0VEX0JJVFNUUkVBTV9SRUFERVIKLSAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkK LSAgICAgICAgcmV0dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0g ICAgYmMtPmJpdHMgICAgICAgPSBBVl9STDY0KGJjLT5wdHIpOwotI2Vsc2UKLSAgICBiYy0+Yml0 cyAgICAgICA9IEFWX1JCNjQoYmMtPnB0cik7Ci0jZW5kaWYKLSAgICBiYy0+cHRyICAgICAgICs9 IDg7Ci0gICAgYmMtPmJpdHNfbGVmdCAgPSA2NDsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIHJl ZmlsbF8zMihCaXRzdHJlYW1Db250ZXh0ICpiYykKLXsKLSNpZiAhVU5DSEVDS0VEX0JJVFNUUkVB TV9SRUFERVIKLSAgICBpZiAoYmMtPnB0ciA+PSBiYy0+YnVmZmVyX2VuZCkKLSAgICAgICAgcmV0 dXJuOwotI2VuZGlmCi0KLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgYmMtPmJpdHMg ICAgICAgPSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8PCBiYy0+Yml0c19sZWZ0IHwgYmMt PmJpdHM7Ci0jZWxzZQotICAgIGJjLT5iaXRzICAgICAgID0gYmMtPmJpdHMgfCAodWludDY0X3Qp QVZfUkIzMihiYy0+cHRyKSA8PCAoMzIgLSBiYy0+Yml0c19sZWZ0KTsKLSNlbmRpZgotICAgIGJj LT5wdHIgICAgICAgKz0gNDsKLSAgICBiYy0+Yml0c19sZWZ0ICs9IDMyOwotfQotCi0vKioKLSAq IEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KLSAqIEBwYXJhbSBidWZmZXIgYml0c3RyZWFt IGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFIGJ5dGVzCi0gKiAg ICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVzZSBzb21lIG9wdGlt aXplZCBiaXRzdHJlYW0KLSAqICAgICAgICByZWFkZXJzIHJlYWQgMzIgb3IgNjQgYml0cyBhdCBv bmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAotICogQHBhcmFtIGJpdF9zaXplIHRoZSBz aXplIG9mIHRoZSBidWZmZXIgaW4gYml0cwotICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIEFWRVJS T1JfSU5WQUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXplIHdvdWxkIG92ZXJmbG93LgotICovCi1z dGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1faW5pdChCaXRzdHJlYW1Db250ZXh0ICpiYywgY29u c3QgdWludDhfdCAqYnVmZmVyLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5z aWduZWQgaW50IGJpdF9zaXplKQotewotICAgIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKLQot ICAgIGlmIChiaXRfc2l6ZSA+IElOVF9NQVggLSA3IHx8ICFidWZmZXIpIHsKLSAgICAgICAgYmMt PmJ1ZmZlciAgICA9IE5VTEw7Ci0gICAgICAgIGJjLT5wdHIgICAgICAgPSBOVUxMOwotICAgICAg ICBiYy0+Yml0c19sZWZ0ID0gMDsKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 Ci0gICAgfQotCi0gICAgYnVmZmVyX3NpemUgPSAoYml0X3NpemUgKyA3KSA+PiAzOwotCi0gICAg YmMtPmJ1ZmZlciAgICAgICA9IGJ1ZmZlcjsKLSAgICBiYy0+YnVmZmVyX2VuZCAgID0gYnVmZmVy ICsgYnVmZmVyX3NpemU7Ci0gICAgYmMtPnB0ciAgICAgICAgICA9IGJjLT5idWZmZXI7Ci0gICAg YmMtPnNpemVfaW5fYml0cyA9IGJpdF9zaXplOwotICAgIGJjLT5iaXRzX2xlZnQgICAgPSAwOwot ICAgIGJjLT5iaXRzICAgICAgICAgPSAwOwotCi0gICAgcmVmaWxsXzY0KGJjKTsKLQotICAgIHJl dHVybiAwOwotfQotCi0vKioKLSAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KLSAqIEBw YXJhbSBidWZmZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFE RElOR19TSVpFIGJ5dGVzCi0gKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJp dHMgYmVjYXVzZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KLSAqICAgICAgICByZWFkZXJzIHJl YWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAotICog QHBhcmFtIGJ5dGVfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCi0gKiBAcmV0 dXJuIDAgb24gc3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUg d291bGQgb3ZlcmZsb3cKLSAqLwotc3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX2luaXQ4KEJp dHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpidWZmZXIsCi0gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVfc2l6ZSkKLXsKLSAgICBpZiAo Ynl0ZV9zaXplID4gSU5UX01BWCAvIDgpCi0gICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOwotICAgIHJldHVybiBiaXRzdHJlYW1faW5pdChiYywgYnVmZmVyLCBieXRlX3NpemUgKiA4 KTsKLX0KLQogLyoqCiAgKiBSZXR1cm4gbnVtYmVyIG9mIGJpdHMgYWxyZWFkeSByZWFkLgogICov CkBAIC0xNTUsMjM1ICs3Myw2IEBAIHN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9iaXRzX2xl ZnQoY29uc3QgQml0c3RyZWFtQ29udGV4dCAqYmMpCiAgICAgcmV0dXJuIChiYy0+YnVmZmVyIC0g YmMtPnB0cikgKiA4ICsgYmMtPnNpemVfaW5fYml0cyArIGJjLT5iaXRzX2xlZnQ7CiB9CiAKLXN0 YXRpYyBpbmxpbmUgdWludDY0X3QgZ2V0X3ZhbChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCi17Ci0gICAgdWludDY0X3QgcmV0OwotCi0jaWZkZWYgQklUU1RSRUFNX1JFQURF Ul9MRQotICAgIHJldCA9IGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEpOwotICAg IGJjLT5iaXRzID4+PSBuOwotI2Vsc2UKLSAgICByZXQgPSBiYy0+Yml0cyA+PiAoNjQgLSBuKTsK LSAgICBiYy0+Yml0cyA8PD0gbjsKLSNlbmRpZgotICAgIGJjLT5iaXRzX2xlZnQgLT0gbjsKLQot ICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qKgotICogUmV0dXJuIG9uZSBiaXQgZnJvbSB0aGUgYnVm ZmVyLgotICovCi1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBiaXRzdHJlYW1fcmVhZF9iaXQo Qml0c3RyZWFtQ29udGV4dCAqYmMpCi17Ci0gICAgaWYgKCFiYy0+Yml0c19sZWZ0KQotICAgICAg ICByZWZpbGxfNjQoYmMpOwotCi0gICAgcmV0dXJuIGdldF92YWwoYmMsIDEpOwotfQotCi0vKioK LSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBiZSBpbiB0aGUgMC02 MyByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSB1aW50NjRfdCBiaXRzdHJlYW1fcmVhZF82MyhC aXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgdWludDY0X3QgcmV0 ID0gMDsKLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgdWludDY0X3QgbGVmdCA9IDA7 Ci0jZW5kaWYKLQotICAgIGlmICghbikKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBpZiAobiA+ IGJjLT5iaXRzX2xlZnQpIHsKLSAgICAgICAgbiAtPSBiYy0+Yml0c19sZWZ0OwotI2lmZGVmIEJJ VFNUUkVBTV9SRUFERVJfTEUKLSAgICAgICAgbGVmdCA9IGJjLT5iaXRzX2xlZnQ7Ci0jZW5kaWYK LSAgICAgICAgcmV0ID0gZ2V0X3ZhbChiYywgYmMtPmJpdHNfbGVmdCk7Ci0gICAgICAgIHJlZmls bF82NChiYyk7Ci0gICAgfQotCi0jaWZkZWYgQklUU1RSRUFNX1JFQURFUl9MRQotICAgIHJldCA9 IGdldF92YWwoYmMsIG4pIDw8IGxlZnQgfCByZXQ7Ci0jZWxzZQotICAgIHJldCA9IGdldF92YWwo YmMsIG4pIHwgcmV0IDw8IG47Ci0jZW5kaWYKLQotICAgIHJldHVybiByZXQ7Ci19Ci0KLS8qKgot ICogUmV0dXJuIG4gYml0cyBmcm9tIHRoZSBidWZmZXIsIG4gaGFzIHRvIGJlIGluIHRoZSAwLTMy ICByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSB1aW50MzJfdCBiaXRzdHJlYW1fcmVhZChCaXRz dHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgaWYgKCFuKQotICAgICAg ICByZXR1cm4gMDsKLQotICAgIGlmIChuID4gYmMtPmJpdHNfbGVmdCkgewotICAgICAgICByZWZp bGxfMzIoYmMpOwotICAgICAgICBpZiAoYmMtPmJpdHNfbGVmdCA8IDMyKQotICAgICAgICAgICAg YmMtPmJpdHNfbGVmdCA9IG47Ci0gICAgfQotCi0gICAgcmV0dXJuIGdldF92YWwoYmMsIG4pOwot fQotCi0vKioKLSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGlu dGVnZXIuCi0gKiBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiByYW5nZS4KLSAqLwotc3RhdGljIGlu bGluZSBpbnQzMl90IGJpdHN0cmVhbV9yZWFkX3NpZ25lZChCaXRzdHJlYW1Db250ZXh0ICpiYywg dW5zaWduZWQgaW50IG4pCi17Ci0gICAgcmV0dXJuIHNpZ25fZXh0ZW5kKGJpdHN0cmVhbV9yZWFk KGJjLCBuKSwgbik7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IHNob3dfdmFsKEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSNpZmRlZiBCSVRTVFJFQU1f UkVBREVSX0xFCi0gICAgcmV0dXJuIGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAtIDEp OwotI2Vsc2UKLSAgICByZXR1cm4gYmMtPmJpdHMgPj4gKDY0IC0gbik7Ci0jZW5kaWYKLX0KLQot LyoqCi0gKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBidXQgZG8gbm90IGNoYW5nZSB0 aGUgYnVmZmVyIHN0YXRlLgotICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCi0gKi8K LXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IGJpdHN0cmVhbV9wZWVrKEJpdHN0cmVhbUNvbnRl eHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSAgICBpZiAobiA+IGJjLT5iaXRzX2xlZnQpCi0g ICAgICAgIHJlZmlsbF8zMihiYyk7Ci0KLSAgICByZXR1cm4gc2hvd192YWwoYmMsIG4pOwotfQot Ci0vKioKLSAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGludGVn ZXIsCi0gKiBkbyBub3QgY2hhbmdlIHRoZSBidWZmZXIgc3RhdGUuCi0gKiBuIGhhcyB0byBiZSBp biB0aGUgMC0zMiByYW5nZS4KLSAqLwotc3RhdGljIGlubGluZSBpbnQgYml0c3RyZWFtX3BlZWtf c2lnbmVkKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKLXsKLSAgICByZXR1 cm4gc2lnbl9leHRlbmQoYml0c3RyZWFtX3BlZWsoYmMsIG4pLCBuKTsKLX0KLQotc3RhdGljIGlu bGluZSB2b2lkIHNraXBfcmVtYWluaW5nKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBp bnQgbikKLXsKLSNpZmRlZiBCSVRTVFJFQU1fUkVBREVSX0xFCi0gICAgYmMtPmJpdHMgPj49IG47 Ci0jZWxzZQotICAgIGJjLT5iaXRzIDw8PSBuOwotI2VuZGlmCi0gICAgYmMtPmJpdHNfbGVmdCAt PSBuOwotfQotCi0vKioKLSAqIFNraXAgbiBiaXRzIGluIHRoZSBidWZmZXIuCi0gKi8KLXN0YXRp YyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fc2tpcChCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWdu ZWQgaW50IG4pCi17Ci0gICAgaWYgKG4gPCBiYy0+Yml0c19sZWZ0KQotICAgICAgICBza2lwX3Jl bWFpbmluZyhiYywgbik7Ci0gICAgZWxzZSB7Ci0gICAgICAgIG4gLT0gYmMtPmJpdHNfbGVmdDsK LSAgICAgICAgYmMtPmJpdHMgICAgICA9IDA7Ci0gICAgICAgIGJjLT5iaXRzX2xlZnQgPSAwOwot Ci0gICAgICAgIGlmIChuID49IDY0KSB7Ci0gICAgICAgICAgICB1bnNpZ25lZCBpbnQgc2tpcCA9 IG4gLyA4OwotCi0gICAgICAgICAgICBuIC09IHNraXAgKiA4OwotICAgICAgICAgICAgYmMtPnB0 ciArPSBza2lwOwotICAgICAgICB9Ci0gICAgICAgIHJlZmlsbF82NChiYyk7Ci0gICAgICAgIGlm IChuKQotICAgICAgICAgICAgc2tpcF9yZW1haW5pbmcoYmMsIG4pOwotICAgIH0KLX0KLQotLyoq Ci0gKiBTZWVrIHRvIHRoZSBnaXZlbiBiaXQgcG9zaXRpb24uCi0gKi8KLXN0YXRpYyBpbmxpbmUg dm9pZCBiaXRzdHJlYW1fc2VlayhCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgcG9zKQot ewotICAgIGJjLT5wdHIgICAgICAgPSBiYy0+YnVmZmVyOwotICAgIGJjLT5iaXRzICAgICAgPSAw OwotICAgIGJjLT5iaXRzX2xlZnQgPSAwOwotCi0gICAgYml0c3RyZWFtX3NraXAoYmMsIHBvcyk7 Ci19Ci0KLS8qKgotICogU2tpcCBiaXRzIHRvIGEgYnl0ZSBib3VuZGFyeS4KLSAqLwotc3RhdGlj IGlubGluZSBjb25zdCB1aW50OF90ICpiaXRzdHJlYW1fYWxpZ24oQml0c3RyZWFtQ29udGV4dCAq YmMpCi17Ci0gICAgdW5zaWduZWQgaW50IG4gPSAtYml0c3RyZWFtX3RlbGwoYmMpICYgNzsKLSAg ICBpZiAobikKLSAgICAgICAgYml0c3RyZWFtX3NraXAoYmMsIG4pOwotICAgIHJldHVybiBiYy0+ YnVmZmVyICsgKGJpdHN0cmVhbV90ZWxsKGJjKSA+PiAzKTsKLX0KLQotLyoqCi0gKiBSZWFkIE1Q RUctMSBkYy1zdHlsZSBWTEMgKHNpZ24gYml0ICsgbWFudGlzc2Egd2l0aCBubyBNU0IpLgotICog SWYgTVNCIG5vdCBzZXQgaXQgaXMgbmVnYXRpdmUuCi0gKiBAcGFyYW0gbiBsZW5ndGggaW4gYml0 cwotICovCi1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fcmVhZF94Yml0cyhCaXRzdHJlYW1D b250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCi17Ci0gICAgaW50MzJfdCBjYWNoZSA9IGJpdHN0 cmVhbV9wZWVrKGJjLCAzMik7Ci0gICAgaW50IHNpZ24gPSB+Y2FjaGUgPj4gMzE7Ci0gICAgc2tp cF9yZW1haW5pbmcoYmMsIG4pOwotCi0gICAgcmV0dXJuICgoKCh1aW50MzJfdCkoc2lnbiBeIGNh Y2hlKSkgPj4gKDMyIC0gbikpIF4gc2lnbikgLSBzaWduOwotfQotCi0vKioKLSAqIFJldHVybiBk ZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZvciB0aGUgdmFsdWVzIDAsIDEsIDIuCi0gKi8K LXN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVhbV9kZWNvZGUwMTIoQml0c3RyZWFtQ29udGV4dCAq YmMpCi17Ci0gICAgaWYgKCFiaXRzdHJlYW1fcmVhZF9iaXQoYmMpKQotICAgICAgICByZXR1cm4g MDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiBiaXRzdHJlYW1fcmVhZF9iaXQoYmMpICsgMTsK LX0KLQotLyoqCi0gKiBSZXR1cm4gZGVjb2RlZCB0cnVuY2F0ZWQgdW5hcnkgY29kZSBmb3IgdGhl IHZhbHVlcyAyLCAxLCAwLgotICovCi1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fZGVjb2Rl MjEwKEJpdHN0cmVhbUNvbnRleHQgKmJjKQotewotICAgIGlmIChiaXRzdHJlYW1fcmVhZF9iaXQo YmMpKQotICAgICAgICByZXR1cm4gMDsKLSAgICBlbHNlCi0gICAgICAgIHJldHVybiAyIC0gYml0 c3RyZWFtX3JlYWRfYml0KGJjKTsKLX0KLQotLyogUmVhZCBzaWduIGJpdCBhbmQgZmxpcCB0aGUg c2lnbiBvZiB0aGUgcHJvdmlkZWQgdmFsdWUgYWNjb3JkaW5nbHkuICovCi1zdGF0aWMgaW5saW5l IGludCBiaXRzdHJlYW1fYXBwbHlfc2lnbihCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50IHZhbCkK LXsKLSAgICBpbnQgc2lnbiA9IGJpdHN0cmVhbV9yZWFkX3NpZ25lZChiYywgMSk7Ci0gICAgcmV0 dXJuICh2YWwgXiBzaWduKSAtIHNpZ247Ci19Ci0KLXN0YXRpYyBpbmxpbmUgaW50IGJpdHN0cmVh bV9za2lwXzFzdG9wXzhkYXRhKEJpdHN0cmVhbUNvbnRleHQgKnMpCi17Ci0gICAgaWYgKGJpdHN0 cmVhbV9iaXRzX2xlZnQocykgPD0gMCkKLSAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7Ci0KLSAgICB3aGlsZSAoYml0c3RyZWFtX3JlYWQocywgMSkpIHsKLSAgICAgICAgYml0c3Ry ZWFtX3NraXAocywgOCk7Ci0gICAgICAgIGlmIChiaXRzdHJlYW1fYml0c19sZWZ0KHMpIDw9IDAp Ci0gICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKLSAgICB9Ci0KLSAgICBy ZXR1cm4gMDsKLX0KLQogLyogVW53aW5kIHRoZSBjYWNoZSBzbyBhIHJlZmlsbF8zMiBjYW4gZmls bCBpdCBhZ2Fpbi4gKi8KIHN0YXRpYyBpbmxpbmUgdm9pZCBiaXRzdHJlYW1fdW53aW5kKEJpdHN0 cmVhbUNvbnRleHQgKmJjKQogewpAQCAtNDEyLDUyICsxMDEsMjggQEAgc3RhdGljIGlubGluZSB2 b2lkIGJpdHN0cmVhbV91bmdldChCaXRzdHJlYW1Db250ZXh0ICpiYywgdWludDY0X3QgdmFsdWUs CiAgICAgYmMtPmJpdHNfbGVmdCArPSBhbW91bnQ7CiB9CiAKLS8qKgotICogUmV0dXJuIHRoZSBM VVQgZWxlbWVudCBmb3IgdGhlIGdpdmVuIGJpdHN0cmVhbSBjb25maWd1cmF0aW9uLgotICovCi1z dGF0aWMgaW5saW5lIGludCBzZXRfaWR4KEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgY29kZSwg aW50ICpuLCBpbnQgKm5iX2JpdHMsCi0gICAgICAgICAgICAgICAgICAgICAgICAgIFZMQ19UWVBF ICgqdGFibGUpWzJdKQotewotICAgIHVuc2lnbmVkIGlkeDsKLQotICAgICpuYl9iaXRzID0gLSpu OwotICAgIGlkeCA9IGJpdHN0cmVhbV9wZWVrKGJjLCAqbmJfYml0cykgKyBjb2RlOwotICAgICpu ID0gdGFibGVbaWR4XVsxXTsKLQotICAgIHJldHVybiB0YWJsZVtpZHhdWzBdOwotfQotCi0vKioK LSAqIFBhcnNlIGEgdmxjIGNvZGUuCi0gKiBAcGFyYW0gYml0cyBpcyB0aGUgbnVtYmVyIG9mIGJp dHMgd2hpY2ggd2lsbCBiZSByZWFkIGF0IG9uY2UsIG11c3QgYmUKLSAqICAgICAgICAgICAgIGlk ZW50aWNhbCB0byBuYl9iaXRzIGluIGluaXRfdmxjKCkKLSAqIEBwYXJhbSBtYXhfZGVwdGggaXMg dGhlIG51bWJlciBvZiB0aW1lcyBiaXRzIGJpdHMgbXVzdCBiZSByZWFkIHRvIGNvbXBsZXRlbHkK LSAqICAgICAgICAgICAgICAgICAgcmVhZCB0aGUgbG9uZ2VzdCB2bGMgY29kZQotICogICAgICAg ICAgICAgICAgICA9IChtYXhfdmxjX2xlbmd0aCArIGJpdHMgLSAxKSAvIGJpdHMKLSAqIElmIHRo ZSB2bGMgY29kZSBpcyBpbnZhbGlkIGFuZCBtYXhfZGVwdGg9MSwgdGhlbiBubyBiaXRzIHdpbGwg YmUgcmVtb3ZlZC4KLSAqIElmIHRoZSB2bGMgY29kZSBpcyBpbnZhbGlkIGFuZCBtYXhfZGVwdGg+ MSwgdGhlbiB0aGUgbnVtYmVyIG9mIGJpdHMgcmVtb3ZlZAotICogaXMgdW5kZWZpbmVkLgotICov Ci1zdGF0aWMgaW5saW5lIGludCBiaXRzdHJlYW1fcmVhZF92bGMoQml0c3RyZWFtQ29udGV4dCAq YmMsIFZMQ19UWVBFICgqdGFibGUpWzJdLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIGludCBiaXRzLCBpbnQgbWF4X2RlcHRoKQotewotICAgIGludCBuYl9iaXRzOwotICAg IHVuc2lnbmVkIGlkeCA9IGJpdHN0cmVhbV9wZWVrKGJjLCBiaXRzKTsKLSAgICBpbnQgY29kZSAg ICAgPSB0YWJsZVtpZHhdWzBdOwotICAgIGludCBuICAgICAgICA9IHRhYmxlW2lkeF1bMV07Ci0K LSAgICBpZiAobWF4X2RlcHRoID4gMSAmJiBuIDwgMCkgewotICAgICAgICBza2lwX3JlbWFpbmlu ZyhiYywgYml0cyk7Ci0gICAgICAgIGNvZGUgPSBzZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5iX2Jp dHMsIHRhYmxlKTsKLSAgICAgICAgaWYgKG1heF9kZXB0aCA+IDIgJiYgbiA8IDApIHsKLSAgICAg ICAgICAgIHNraXBfcmVtYWluaW5nKGJjLCBuYl9iaXRzKTsKLSAgICAgICAgICAgIGNvZGUgPSBz ZXRfaWR4KGJjLCBjb2RlLCAmbiwgJm5iX2JpdHMsIHRhYmxlKTsKLSAgICAgICAgfQotICAgIH0K LSAgICBza2lwX3JlbWFpbmluZyhiYywgbik7Ci0KLSAgICByZXR1cm4gY29kZTsKLX0KKyNkZWZp bmUgQklUU1RSRUFNX0xFCisjaW5jbHVkZSAiYml0c3RyZWFtX3RlbXBsYXRlLmgiCisKKyN1bmRl ZiBCSVRTVFJFQU1fTEUKKyNpbmNsdWRlICJiaXRzdHJlYW1fdGVtcGxhdGUuaCIKKworI2RlZmlu ZSBiaXRzdHJlYW1faW5pdCAgICAgICAgICBiaXRzdHJlYW1faW5pdF9iZQorI2RlZmluZSBiaXRz dHJlYW1faW5pdDggICAgICAgICBiaXRzdHJlYW1faW5pdDhfYmUKKyNkZWZpbmUgYml0c3RyZWFt X3JlYWRfYml0ICAgICAgYml0c3RyZWFtX3JlYWRfYml0X2JlCisjZGVmaW5lIGJpdHN0cmVhbV9y ZWFkXzYzICAgICAgIGJpdHN0cmVhbV9yZWFkXzYzX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9yZWFk ICAgICAgICAgIGJpdHN0cmVhbV9yZWFkX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9yZWFkX3NpZ25l ZCAgIGJpdHN0cmVhbV9yZWFkX3NpZ25lZF9iZQorI2RlZmluZSBiaXRzdHJlYW1fcGVlayAgICAg ICAgICBiaXRzdHJlYW1fcGVla19iZQorI2RlZmluZSBiaXRzdHJlYW1fcGVla19zaWduZWQgICBi aXRzdHJlYW1fcGVla19zaWduZWRfYmUKKyNkZWZpbmUgYml0c3RyZWFtX3NraXAgICAgICAgICAg Yml0c3RyZWFtX3NraXBfYmUKKyNkZWZpbmUgYml0c3RyZWFtX3NlZWsgICAgICAgICAgYml0c3Ry ZWFtX3NlZWtfYmUKKyNkZWZpbmUgYml0c3RyZWFtX2FsaWduICAgICAgICAgYml0c3RyZWFtX2Fs aWduX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9yZWFkX3hiaXRzICAgIGJpdHN0cmVhbV9yZWFkX3hi aXRzX2JlCisjZGVmaW5lIGJpdHN0cmVhbV9kZWNvZGUwMTIgICAgIGJpdHN0cmVhbV9kZWNvZGUw MTJfYmUKKyNkZWZpbmUgYml0c3RyZWFtX2RlY29kZTIxMCAgICAgYml0c3RyZWFtX2RlY29kZTIx MF9iZQorI2RlZmluZSBiaXRzdHJlYW1fYXBwbHlfc2lnbiAgICBiaXRzdHJlYW1fYXBwbHlfc2ln bl9iZQorI2RlZmluZSBiaXRzdHJlYW1fcmVhZF92bGMgICAgICBiaXRzdHJlYW1fcmVhZF92bGNf YmUKIAogI2RlZmluZSBCSVRTVFJFQU1fUkxfVkxDKGxldmVsLCBydW4sIGJjLCB0YWJsZSwgYml0 cywgbWF4X2RlcHRoKSBcCiAgICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMvYml0c3Ry ZWFtX3RlbXBsYXRlLmggYi9saWJhdmNvZGVjL2JpdHN0cmVhbV90ZW1wbGF0ZS5oCm5ldyBmaWxl IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE0YTQyMDEzOWMKLS0tIC9kZXYvbnVsbAor KysgYi9saWJhdmNvZGVjL2JpdHN0cmVhbV90ZW1wbGF0ZS5oCkBAIC0wLDAgKzEsMzkyIEBACisv KgorICogQ29weXJpZ2h0IChjKSAyMDE2IEFsZXhhbmRyYSBIw6Fqa292w6EKKyAqCisgKiBUaGlz IGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7 IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0 ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJs aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9u IDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv bi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVi bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVj ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNl IGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg KiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0 b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lmZGVmIEJJVFNUUkVBTV9MRQorIyAgIGRl ZmluZSBCU19TVUZGSVggbGUKKyNlbHNlCisjICAgZGVmaW5lIEJTX1NVRkZJWCBiZQorI2VuZGlm CisKKyNkZWZpbmUgQlNfSk9JTih4LCB5KSB4ICMjIF8gIyMgeQorI2RlZmluZSBCU19GVU5DMih4 LCB5KSBCU19KT0lOKHgsIHkpCisjZGVmaW5lIEJTX0ZVTkMoeCkgQlNfRlVOQzIoeCwgQlNfU1VG RklYKQorCitzdGF0aWMgaW5saW5lIHZvaWQgQlNfRlVOQyhyZWZpbGxfNjQpKEJpdHN0cmVhbUNv bnRleHQgKmJjKQoreworI2lmICFVTkNIRUNLRURfQklUU1RSRUFNX1JFQURFUgorICAgIGlmIChi Yy0+cHRyID49IGJjLT5idWZmZXJfZW5kKQorICAgICAgICByZXR1cm47CisjZW5kaWYKKworI2lm ZGVmIEJJVFNUUkVBTV9MRQorICAgIGJjLT5iaXRzICAgICAgID0gQVZfUkw2NChiYy0+cHRyKTsK KyNlbHNlCisgICAgYmMtPmJpdHMgICAgICAgPSBBVl9SQjY0KGJjLT5wdHIpOworI2VuZGlmCisg ICAgYmMtPnB0ciAgICAgICArPSA4OworICAgIGJjLT5iaXRzX2xlZnQgID0gNjQ7Cit9CisKK3N0 YXRpYyBpbmxpbmUgdm9pZCBCU19GVU5DKHJlZmlsbF8zMikoQml0c3RyZWFtQ29udGV4dCAqYmMp Cit7CisjaWYgIVVOQ0hFQ0tFRF9CSVRTVFJFQU1fUkVBREVSCisgICAgaWYgKGJjLT5wdHIgPj0g YmMtPmJ1ZmZlcl9lbmQpCisgICAgICAgIHJldHVybjsKKyNlbmRpZgorCisjaWZkZWYgQklUU1RS RUFNX0xFCisgICAgYmMtPmJpdHMgICAgICAgPSAodWludDY0X3QpQVZfUkwzMihiYy0+cHRyKSA8 PCBiYy0+Yml0c19sZWZ0IHwgYmMtPmJpdHM7CisjZWxzZQorICAgIGJjLT5iaXRzICAgICAgID0g YmMtPmJpdHMgfCAodWludDY0X3QpQVZfUkIzMihiYy0+cHRyKSA8PCAoMzIgLSBiYy0+Yml0c19s ZWZ0KTsKKyNlbmRpZgorICAgIGJjLT5wdHIgICAgICAgKz0gNDsKKyAgICBiYy0+Yml0c19sZWZ0 ICs9IDMyOworfQorCisvKioKKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KKyAqIEBw YXJhbSBidWZmZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFE RElOR19TSVpFIGJ5dGVzCisgKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJp dHMgYmVjYXVzZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KKyAqICAgICAgICByZWFkZXJzIHJl YWQgMzIgb3IgNjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAorICog QHBhcmFtIGJpdF9zaXplIHRoZSBzaXplIG9mIHRoZSBidWZmZXIgaW4gYml0cworICogQHJldHVy biAwIG9uIHN1Y2Nlc3MsIEFWRVJST1JfSU5WQUxJRERBVEEgaWYgdGhlIGJ1ZmZlcl9zaXplIHdv dWxkIG92ZXJmbG93LgorICovCitzdGF0aWMgaW5saW5lIGludCBCU19GVU5DKGJpdHN0cmVhbV9p bml0KShCaXRzdHJlYW1Db250ZXh0ICpiYywgY29uc3QgdWludDhfdCAqYnVmZmVyLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJpdF9zaXpl KQoreworICAgIHVuc2lnbmVkIGludCBidWZmZXJfc2l6ZTsKKworICAgIGlmIChiaXRfc2l6ZSA+ IElOVF9NQVggLSA3IHx8ICFidWZmZXIpIHsKKyAgICAgICAgYmMtPmJ1ZmZlciAgICA9IE5VTEw7 CisgICAgICAgIGJjLT5wdHIgICAgICAgPSBOVUxMOworICAgICAgICBiYy0+Yml0c19sZWZ0ID0g MDsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgYnVm ZmVyX3NpemUgPSAoYml0X3NpemUgKyA3KSA+PiAzOworCisgICAgYmMtPmJ1ZmZlciAgICAgICA9 IGJ1ZmZlcjsKKyAgICBiYy0+YnVmZmVyX2VuZCAgID0gYnVmZmVyICsgYnVmZmVyX3NpemU7Cisg ICAgYmMtPnB0ciAgICAgICAgICA9IGJjLT5idWZmZXI7CisgICAgYmMtPnNpemVfaW5fYml0cyA9 IGJpdF9zaXplOworICAgIGJjLT5iaXRzX2xlZnQgICAgPSAwOworICAgIGJjLT5iaXRzICAgICAg ICAgPSAwOworCisgICAgQlNfRlVOQyhyZWZpbGxfNjQpKGJjKTsKKworICAgIHJldHVybiAwOwor fQorCisvKioKKyAqIEluaXRpYWxpemUgQml0c3RyZWFtQ29udGV4dC4KKyAqIEBwYXJhbSBidWZm ZXIgYml0c3RyZWFtIGJ1ZmZlciwgbXVzdCBiZSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpF IGJ5dGVzCisgKiAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIGFjdHVhbCByZWFkIGJpdHMgYmVjYXVz ZSBzb21lIG9wdGltaXplZCBiaXRzdHJlYW0KKyAqICAgICAgICByZWFkZXJzIHJlYWQgMzIgb3Ig NjQgYml0cyBhdCBvbmNlIGFuZCBjb3VsZCByZWFkIG92ZXIgdGhlIGVuZAorICogQHBhcmFtIGJ5 dGVfc2l6ZSB0aGUgc2l6ZSBvZiB0aGUgYnVmZmVyIGluIGJ5dGVzCisgKiBAcmV0dXJuIDAgb24g c3VjY2VzcywgQVZFUlJPUl9JTlZBTElEREFUQSBpZiB0aGUgYnVmZmVyX3NpemUgd291bGQgb3Zl cmZsb3cKKyAqLworc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJlYW1faW5pdDgpKEJp dHN0cmVhbUNvbnRleHQgKmJjLCBjb25zdCB1aW50OF90ICpidWZmZXIsCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVfc2l6ZSkKK3sK KyAgICBpZiAoYnl0ZV9zaXplID4gSU5UX01BWCAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIHJldHVybiBCU19GVU5DKGJpdHN0cmVhbV9pbml0KShiYywgYnVm ZmVyLCBieXRlX3NpemUgKiA4KTsKK30KKworc3RhdGljIGlubGluZSB1aW50NjRfdCBCU19GVU5D KGdldF92YWwpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICB1 aW50NjRfdCByZXQ7CisKKyNpZmRlZiBCSVRTVFJFQU1fTEUKKyAgICByZXQgPSBiYy0+Yml0cyAm ICgoVUlOVDY0X0MoMSkgPDwgbikgLSAxKTsKKyAgICBiYy0+Yml0cyA+Pj0gbjsKKyNlbHNlCisg ICAgcmV0ID0gYmMtPmJpdHMgPj4gKDY0IC0gbik7CisgICAgYmMtPmJpdHMgPDw9IG47CisjZW5k aWYKKyAgICBiYy0+Yml0c19sZWZ0IC09IG47CisKKyAgICByZXR1cm4gcmV0OworfQorCisvKioK KyAqIFJldHVybiBvbmUgYml0IGZyb20gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGluZSB1 bnNpZ25lZCBpbnQgQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9iaXQpKEJpdHN0cmVhbUNvbnRleHQg KmJjKQoreworICAgIGlmICghYmMtPmJpdHNfbGVmdCkKKyAgICAgICAgQlNfRlVOQyhyZWZpbGxf NjQpKGJjKTsKKworICAgIHJldHVybiBCU19GVU5DKGdldF92YWwpKGJjLCAxKTsKK30KKworLyoq CisgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciwgbiBoYXMgdG8gYmUgaW4gdGhlIDAt NjMgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDY0X3QgQlNfRlVOQyhiaXRzdHJlYW1f cmVhZF82MykoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQoreworICAgIHVp bnQ2NF90IHJldCA9IDA7CisjaWZkZWYgQklUU1RSRUFNX0xFCisgICAgdWludDY0X3QgbGVmdCA9 IDA7CisjZW5kaWYKKworICAgIGlmICghbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAo biA+IGJjLT5iaXRzX2xlZnQpIHsKKyAgICAgICAgbiAtPSBiYy0+Yml0c19sZWZ0OworI2lmZGVm IEJJVFNUUkVBTV9MRQorICAgICAgICBsZWZ0ID0gYmMtPmJpdHNfbGVmdDsKKyNlbmRpZgorICAg ICAgICByZXQgPSBCU19GVU5DKGdldF92YWwpKGJjLCBiYy0+Yml0c19sZWZ0KTsKKyAgICAgICAg QlNfRlVOQyhyZWZpbGxfNjQpKGJjKTsKKyAgICB9CisKKyNpZmRlZiBCSVRTVFJFQU1fTEUKKyAg ICByZXQgPSBnZXRfdmFsX2xlKGJjLCBuKSA8PCBsZWZ0IHwgcmV0OworI2Vsc2UKKyAgICByZXQg PSBnZXRfdmFsX2JlKGJjLCBuKSB8IHJldCA8PCBuOworI2VuZGlmCisKKyAgICByZXR1cm4gcmV0 OworfQorCisvKioKKyAqIFJldHVybiBuIGJpdHMgZnJvbSB0aGUgYnVmZmVyLCBuIGhhcyB0byBi ZSBpbiB0aGUgMC0zMiAgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgQlNfRlVO QyhiaXRzdHJlYW1fcmVhZCkoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVkIGludCBuKQor eworICAgIGlmICghbikKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAobiA+IGJjLT5iaXRz X2xlZnQpIHsKKyAgICAgICAgQlNfRlVOQyhyZWZpbGxfMzIpKGJjKTsKKyAgICAgICAgaWYgKGJj LT5iaXRzX2xlZnQgPCAzMikKKyAgICAgICAgICAgIGJjLT5iaXRzX2xlZnQgPSBuOworICAgIH0K KworICAgIHJldHVybiBCU19GVU5DKGdldF92YWwpKGJjLCBuKTsKK30KKworLyoqCisgKiBSZXR1 cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBhcyBhIHNpZ25lZCBpbnRlZ2VyLgorICogbiBoYXMg dG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50MzJfdCBCU19G VU5DKGJpdHN0cmVhbV9yZWFkX3NpZ25lZCkoQml0c3RyZWFtQ29udGV4dCAqYmMsIHVuc2lnbmVk IGludCBuKQoreworICAgIHJldHVybiBzaWduX2V4dGVuZChCU19GVU5DKGJpdHN0cmVhbV9yZWFk KShiYywgbiksIG4pOworfQorCitzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBCU19GVU5DKHNo b3dfdmFsKShCaXRzdHJlYW1Db250ZXh0ICpiYywgdW5zaWduZWQgaW50IG4pCit7CisjaWZkZWYg QklUU1RSRUFNX0xFCisgICAgcmV0dXJuIGJjLT5iaXRzICYgKChVSU5UNjRfQygxKSA8PCBuKSAt IDEpOworI2Vsc2UKKyAgICByZXR1cm4gYmMtPmJpdHMgPj4gKDY0IC0gbik7CisjZW5kaWYKK30K KworLyoqCisgKiBSZXR1cm4gbiBiaXRzIGZyb20gdGhlIGJ1ZmZlciBidXQgZG8gbm90IGNoYW5n ZSB0aGUgYnVmZmVyIHN0YXRlLgorICogbiBoYXMgdG8gYmUgaW4gdGhlIDAtMzIgcmFuZ2UuCisg Ki8KK3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3BlZWspKEJp dHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBpZiAobiA+IGJjLT5i aXRzX2xlZnQpCisgICAgICAgIEJTX0ZVTkMocmVmaWxsXzMyKShiYyk7CisKKyAgICByZXR1cm4g QlNfRlVOQyhzaG93X3ZhbCkoYmMsIG4pOworfQorCisvKioKKyAqIFJldHVybiBuIGJpdHMgZnJv bSB0aGUgYnVmZmVyIGFzIGEgc2lnbmVkIGludGVnZXIsCisgKiBkbyBub3QgY2hhbmdlIHRoZSBi dWZmZXIgc3RhdGUuCisgKiBuIGhhcyB0byBiZSBpbiB0aGUgMC0zMiByYW5nZS4KKyAqLworc3Rh dGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJlYW1fcGVla19zaWduZWQpKEJpdHN0cmVhbUNv bnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICByZXR1cm4gc2lnbl9leHRlbmQoQlNf RlVOQyhiaXRzdHJlYW1fcGVlaykoYmMsIG4pLCBuKTsKK30KKworc3RhdGljIGlubGluZSB2b2lk IEJTX0ZVTkMoc2tpcF9yZW1haW5pbmcpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBp bnQgbikKK3sKKyNpZmRlZiBCSVRTVFJFQU1fTEUKKyAgICBiYy0+Yml0cyA+Pj0gbjsKKyNlbHNl CisgICAgYmMtPmJpdHMgPDw9IG47CisjZW5kaWYKKyAgICBiYy0+Yml0c19sZWZ0IC09IG47Cit9 CisKKy8qKgorICogU2tpcCBuIGJpdHMgaW4gdGhlIGJ1ZmZlci4KKyAqLworc3RhdGljIGlubGlu ZSB2b2lkIEJTX0ZVTkMoYml0c3RyZWFtX3NraXApKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNp Z25lZCBpbnQgbikKK3sKKyAgICBpZiAobiA8IGJjLT5iaXRzX2xlZnQpCisgICAgICAgIEJTX0ZV TkMoc2tpcF9yZW1haW5pbmcpKGJjLCBuKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbiAtPSBiYy0+ Yml0c19sZWZ0OworICAgICAgICBiYy0+Yml0cyAgICAgID0gMDsKKyAgICAgICAgYmMtPmJpdHNf bGVmdCA9IDA7CisKKyAgICAgICAgaWYgKG4gPj0gNjQpIHsKKyAgICAgICAgICAgIHVuc2lnbmVk IGludCBza2lwID0gbiAvIDg7CisKKyAgICAgICAgICAgIG4gLT0gc2tpcCAqIDg7CisgICAgICAg ICAgICBiYy0+cHRyICs9IHNraXA7CisgICAgICAgIH0KKyAgICAgICAgQlNfRlVOQyhyZWZpbGxf NjQpKGJjKTsKKyAgICAgICAgaWYgKG4pCisgICAgICAgICAgICBCU19GVU5DKHNraXBfcmVtYWlu aW5nKShiYywgbik7CisgICAgfQorfQorCisvKioKKyAqIFNlZWsgdG8gdGhlIGdpdmVuIGJpdCBw b3NpdGlvbi4KKyAqLworc3RhdGljIGlubGluZSB2b2lkIEJTX0ZVTkMoYml0c3RyZWFtX3NlZWsp KEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBwb3MpCit7CisgICAgYmMtPnB0ciAgICAg ICA9IGJjLT5idWZmZXI7CisgICAgYmMtPmJpdHMgICAgICA9IDA7CisgICAgYmMtPmJpdHNfbGVm dCA9IDA7CisKKyAgICBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShiYywgcG9zKTsKK30KKworLyoq CisgKiBTa2lwIGJpdHMgdG8gYSBieXRlIGJvdW5kYXJ5LgorICovCitzdGF0aWMgaW5saW5lIGNv bnN0IHVpbnQ4X3QgKkJTX0ZVTkMoYml0c3RyZWFtX2FsaWduKShCaXRzdHJlYW1Db250ZXh0ICpi YykKK3sKKyAgICB1bnNpZ25lZCBpbnQgbiA9IC1iaXRzdHJlYW1fdGVsbChiYykgJiA3OworICAg IGlmIChuKQorICAgICAgICBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShiYywgbik7CisgICAgcmV0 dXJuIGJjLT5idWZmZXIgKyAoYml0c3RyZWFtX3RlbGwoYmMpID4+IDMpOworfQorCisvKioKKyAq IFJlYWQgTVBFRy0xIGRjLXN0eWxlIFZMQyAoc2lnbiBiaXQgKyBtYW50aXNzYSB3aXRoIG5vIE1T QikuCisgKiBJZiBNU0Igbm90IHNldCBpdCBpcyBuZWdhdGl2ZS4KKyAqIEBwYXJhbSBuIGxlbmd0 aCBpbiBiaXRzCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRf eGJpdHMpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCB1bnNpZ25lZCBpbnQgbikKK3sKKyAgICBpbnQz Ml90IGNhY2hlID0gQlNfRlVOQyhiaXRzdHJlYW1fcGVlaykoYmMsIDMyKTsKKyAgICBpbnQgc2ln biA9IH5jYWNoZSA+PiAzMTsKKyAgICBCU19GVU5DKHNraXBfcmVtYWluaW5nKShiYywgbik7CisK KyAgICByZXR1cm4gKCgoKHVpbnQzMl90KShzaWduIF4gY2FjaGUpKSA+PiAoMzIgLSBuKSkgXiBz aWduKSAtIHNpZ247Cit9CisKKy8qKgorICogUmV0dXJuIGRlY29kZWQgdHJ1bmNhdGVkIHVuYXJ5 IGNvZGUgZm9yIHRoZSB2YWx1ZXMgMCwgMSwgMi4KKyAqLworc3RhdGljIGlubGluZSBpbnQgQlNf RlVOQyhiaXRzdHJlYW1fZGVjb2RlMDEyKShCaXRzdHJlYW1Db250ZXh0ICpiYykKK3sKKyAgICBp ZiAoIUJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfYml0KShiYykpCisgICAgICAgIHJldHVybiAwOwor ICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIEJTX0ZVTkMoYml0c3RyZWFtX3JlYWRfYml0KShiYykg KyAxOworfQorCisvKioKKyAqIFJldHVybiBkZWNvZGVkIHRydW5jYXRlZCB1bmFyeSBjb2RlIGZv ciB0aGUgdmFsdWVzIDIsIDEsIDAuCisgKi8KK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0 c3RyZWFtX2RlY29kZTIxMCkoQml0c3RyZWFtQ29udGV4dCAqYmMpCit7CisgICAgaWYgKEJTX0ZV TkMoYml0c3RyZWFtX3JlYWRfYml0KShiYykpCisgICAgICAgIHJldHVybiAwOworICAgIGVsc2UK KyAgICAgICAgcmV0dXJuIDIgLSBCU19GVU5DKGJpdHN0cmVhbV9yZWFkX2JpdCkoYmMpOworfQor CisvKiBSZWFkIHNpZ24gYml0IGFuZCBmbGlwIHRoZSBzaWduIG9mIHRoZSBwcm92aWRlZCB2YWx1 ZSBhY2NvcmRpbmdseS4gKi8KK3N0YXRpYyBpbmxpbmUgaW50IEJTX0ZVTkMoYml0c3RyZWFtX2Fw cGx5X3NpZ24pKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBpbnQgdmFsKQoreworICAgIGludCBzaWdu ID0gQlNfRlVOQyhiaXRzdHJlYW1fcmVhZF9zaWduZWQpKGJjLCAxKTsKKyAgICByZXR1cm4gKHZh bCBeIHNpZ24pIC0gc2lnbjsKK30KKworc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRzdHJl YW1fc2tpcF8xc3RvcF84ZGF0YSkoQml0c3RyZWFtQ29udGV4dCAqcykKK3sKKyAgICBpZiAoYml0 c3RyZWFtX2JpdHNfbGVmdChzKSA8PSAwKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKworICAgIHdoaWxlIChCU19GVU5DKGJpdHN0cmVhbV9yZWFkKShzLCAxKSkgeworICAg ICAgICBCU19GVU5DKGJpdHN0cmVhbV9za2lwKShzLCA4KTsKKyAgICAgICAgaWYgKGJpdHN0cmVh bV9iaXRzX2xlZnQocykgPD0gMCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCisvKioKKyAqIFJldHVybiB0aGUgTFVU IGVsZW1lbnQgZm9yIHRoZSBnaXZlbiBiaXRzdHJlYW0gY29uZmlndXJhdGlvbi4KKyAqLworc3Rh dGljIGlubGluZSBpbnQgQlNfRlVOQyhzZXRfaWR4KShCaXRzdHJlYW1Db250ZXh0ICpiYywgaW50 IGNvZGUsIGludCAqbiwgaW50ICpuYl9iaXRzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBWTENfVFlQRSAoKnRhYmxlKVsyXSkKK3sKKyAgICB1bnNpZ25lZCBpZHg7CisKKyAg ICAqbmJfYml0cyA9IC0qbjsKKyAgICBpZHggPSBCU19GVU5DKGJpdHN0cmVhbV9wZWVrKShiYywg Km5iX2JpdHMpICsgY29kZTsKKyAgICAqbiA9IHRhYmxlW2lkeF1bMV07CisKKyAgICByZXR1cm4g dGFibGVbaWR4XVswXTsKK30KKworLyoqCisgKiBQYXJzZSBhIHZsYyBjb2RlLgorICogQHBhcmFt IGJpdHMgaXMgdGhlIG51bWJlciBvZiBiaXRzIHdoaWNoIHdpbGwgYmUgcmVhZCBhdCBvbmNlLCBt dXN0IGJlCisgKiAgICAgICAgICAgICBpZGVudGljYWwgdG8gbmJfYml0cyBpbiBpbml0X3ZsYygp CisgKiBAcGFyYW0gbWF4X2RlcHRoIGlzIHRoZSBudW1iZXIgb2YgdGltZXMgYml0cyBiaXRzIG11 c3QgYmUgcmVhZCB0byBjb21wbGV0ZWx5CisgKiAgICAgICAgICAgICAgICAgIHJlYWQgdGhlIGxv bmdlc3QgdmxjIGNvZGUKKyAqICAgICAgICAgICAgICAgICAgPSAobWF4X3ZsY19sZW5ndGggKyBi aXRzIC0gMSkgLyBiaXRzCisgKiBJZiB0aGUgdmxjIGNvZGUgaXMgaW52YWxpZCBhbmQgbWF4X2Rl cHRoPTEsIHRoZW4gbm8gYml0cyB3aWxsIGJlIHJlbW92ZWQuCisgKiBJZiB0aGUgdmxjIGNvZGUg aXMgaW52YWxpZCBhbmQgbWF4X2RlcHRoPjEsIHRoZW4gdGhlIG51bWJlciBvZiBiaXRzIHJlbW92 ZWQKKyAqIGlzIHVuZGVmaW5lZC4KKyAqLworc3RhdGljIGlubGluZSBpbnQgQlNfRlVOQyhiaXRz dHJlYW1fcmVhZF92bGMpKEJpdHN0cmVhbUNvbnRleHQgKmJjLCBWTENfVFlQRSAoKnRhYmxlKVsy XSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYml0 cywgaW50IG1heF9kZXB0aCkKK3sKKyAgICBpbnQgbmJfYml0czsKKyAgICB1bnNpZ25lZCBpZHgg PSBCU19GVU5DKGJpdHN0cmVhbV9wZWVrKShiYywgYml0cyk7CisgICAgaW50IGNvZGUgICAgID0g dGFibGVbaWR4XVswXTsKKyAgICBpbnQgbiAgICAgICAgPSB0YWJsZVtpZHhdWzFdOworCisgICAg aWYgKG1heF9kZXB0aCA+IDEgJiYgbiA8IDApIHsKKyAgICAgICAgQlNfRlVOQyhza2lwX3JlbWFp bmluZykoYmMsIGJpdHMpOworICAgICAgICBjb2RlID0gQlNfRlVOQyhzZXRfaWR4KShiYywgY29k ZSwgJm4sICZuYl9iaXRzLCB0YWJsZSk7CisgICAgICAgIGlmIChtYXhfZGVwdGggPiAyICYmIG4g PCAwKSB7CisgICAgICAgICAgICBCU19GVU5DKHNraXBfcmVtYWluaW5nKShiYywgbmJfYml0cyk7 CisgICAgICAgICAgICBjb2RlID0gQlNfRlVOQyhzZXRfaWR4KShiYywgY29kZSwgJm4sICZuYl9i aXRzLCB0YWJsZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgQlNfRlVOQyhza2lwX3JlbWFpbmlu ZykoYmMsIG4pOworCisgICAgcmV0dXJuIGNvZGU7Cit9CisKKyN1bmRlZiBCU19GVU5DCisjdW5k ZWYgQlNfRlVOQzIKKyN1bmRlZiBCU19KT0lOCisjdW5kZWYgQlNfU1VGRklYCmRpZmYgLS1naXQg YS90ZXN0cy9yZWYvZmF0ZS9zb3VyY2UgYi90ZXN0cy9yZWYvZmF0ZS9zb3VyY2UKaW5kZXggMTZl YTdlZjljMS4uM2I3ZWE5YzM3OSAxMDA2NDQKLS0tIGEvdGVzdHMvcmVmL2ZhdGUvc291cmNlCisr KyBiL3Rlc3RzL3JlZi9mYXRlL3NvdXJjZQpAQCAtMjEsNiArMjEsNyBAQCBIZWFkZXJzIHdpdGhv dXQgc3RhbmRhcmQgaW5jbHVzaW9uIGd1YXJkczoKIGNvbXBhdC9kamdwcC9tYXRoLmgKIGNvbXBh dC9mbG9hdC9mbG9hdC5oCiBjb21wYXQvZmxvYXQvbGltaXRzLmgKK2xpYmF2Y29kZWMvYml0c3Ry ZWFtX3RlbXBsYXRlLmgKIHRvb2xzL2RlY29kZV9zaW1wbGUuaAogVXNlIG9mIGF2X2NsaXAoKSB3 aGVyZSBhdl9jbGlwX3VpbnRwMigpIGNvdWxkIGJlIHVzZWQ6CiBVc2Ugb2YgYXZfY2xpcCgpIHdo ZXJlIGF2X2NsaXBfaW50cDIoKSBjb3VsZCBiZSB1c2VkOgotLSAKMi4zNC4xCgpfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2ZWwgbWFpbGlu ZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9yZy9tYWlsbWFu L2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxpbmsgYWJvdmUs IG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBzdWJqZWN0ICJ1 bnN1YnNjcmliZSIuCg==