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 2167B481A0 for ; Sun, 12 Nov 2023 10:03:11 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id C253168C96A; Sun, 12 Nov 2023 12:03:09 +0200 (EET) Received: from mail-pl1-f172.google.com (mail-pl1-f172.google.com [209.85.214.172]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 14FA168C77C for ; Sun, 12 Nov 2023 12:03:02 +0200 (EET) Received: by mail-pl1-f172.google.com with SMTP id d9443c01a7336-1cc1e1e74beso31146235ad.1 for ; Sun, 12 Nov 2023 02:03:02 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=hanbang-wang.20230601.gappssmtp.com; s=20230601; t=1699783380; x=1700388180; darn=ffmpeg.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=gh5nKT7Au1rLOJaG2BqP1S2TNnM2oAjQTEZvtvC3nYA=; b=zumhuv530CYK2sRObC/sZcI6HVij3Zsevk1M9cobPmqF/VLidSWK9V/xwP/Bu7aEEt S8zq1mqbaD9emz4KHkKjw/H1XNHmFqd+oooC57w6qtFCAhhHstGSY5DhZylKpjXoMPKM oKE75bRMytW5CRE57l7qAKXIT4P9yVynj9TiNq8lYS/899lO/i4DdchJTHY0YIa/iLA2 fvyJsetJg348m25h3/HbLvBmiHJ3INwYEGddZqHS2Ek3rQq+L1tEqcyrLIZrB7W9d9U9 qhFynr6zBTM0CuJHT15ZtMLJH71nUfPcqzZ7t/QaB98/PSYliNczgTvAzdXFyuEGX0zu QPYw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699783380; x=1700388180; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=gh5nKT7Au1rLOJaG2BqP1S2TNnM2oAjQTEZvtvC3nYA=; b=UbOyDGJD8nvw+vF5t9EIz2r7CkqX6KMceWabexYFJ11kFj9u4+ItBo9MvqPkBwvkbM Fo+v2CJquR8SZHcxPc1sQlVAxz2jYCyvDVmz8GDTVtERkz66iXBBqjSp7eywzWs+eE0d /ulXqtuco0nSv+9ByPkUFNVZV4yoEY17lo7C2gzxmRfKFgzX4RmTnx4Bwf/00pt0mlZq Fg3PY+LCEudkK9U7JpTpIe6fOHQwAzXdgSn339Dq19ThX5Bp8FU2WHmaCQJgYOZelh4V Ay1m1wWqZx+OUcIxB5KZPHwzi59XqJGsixhf5lHOxzqsS44rVsdeewT93EkF7LHgyPTX 3r1A== X-Gm-Message-State: AOJu0YzL8SaNohk11xELk3cRJpUxC3ExyYhHyx4a011B/01XQQHDqTTl kwOuVy8WHlVswPxKW8zo3jRul+0gnswNfAZ6N4E= X-Google-Smtp-Source: AGHT+IE9MqBKNTkUz+TEvl5AevPYQRl0KNHVW2rNyednyu4vAUZDc5RZnxc58QZBpxoi9t380nspNQ== X-Received: by 2002:a17:902:76c8:b0:1cc:9781:4785 with SMTP id j8-20020a17090276c800b001cc97814785mr4152680plt.50.1699783379706; Sun, 12 Nov 2023 02:02:59 -0800 (PST) Received: from localhost.localdomain ([2404:7a80:800:5e00:ad8f:7bce:c80b:3494]) by smtp.gmail.com with ESMTPSA id y12-20020a170902ed4c00b001c9ba6c7287sm2367541plb.143.2023.11.12.02.02.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 12 Nov 2023 02:02:59 -0800 (PST) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Sun, 12 Nov 2023 19:02:52 +0900 Message-Id: <20231112100252.27398-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat: add MMTP parser and MMT/TLV demuxer 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 Cc: SuperFashi 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: VGhpcyBwYXRjaCBhZGRzIGFuIE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBw YXJzZXIsIGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLCBhbmQgYW4gTU1UIHByb3RvY29s IG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpIGRlbXV4ZXIsIGFzIGRlZmluZWQgaW4gQVJJQiBT VEQtQjMyLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIEhFVkMsIEFBQyBMQVRNLCBhbmQgQVJJQi1U VE1MIGRlbXV4aW5nLgoKU2luY2UgTU1UUCBpcyBkZXNpZ25lZCB0byB0cmFuc21pdCBvdmVyIElQ LCB0aGVyZSBpcyBubyBzaXplIGluZm9ybWF0aW9uIHdpdGhpbiBlYWNoIE1NVFAgcGFja2V0LCBh bmQgdGhlcmUgaXMgbm8gb24tZGlzayBmb3JtYXQgZGVmaW5lZCBhbG9uZ3NpZGUgdGhlIHByb3Rv Y29sLiBPbmUgaW5kdXN0cmlhbCBzb2x1dGlvbiBpcyBhIHNpbXBsZSBjb250YWluZXIgZm9ybWF0 IHVzaW5nIHR5cGXigJNsZW5ndGjigJN2YWx1ZSBwYWNrZXRzLCB3aGljaCBpcyBkZWZpbmVkIGlu IEFSSUIgU1RELUIzMi4KCkFub3RoZXIga25vd24gY29udGFpbmVyIGZvcm1hdCBmb3IgTU1UUCBp cyB1c2luZyBwYWNrZXQgY2FwdHVyZSAocGNhcCkgZmlsZXMgd2hpY2ggcmVjb3JkcyBuZXR3b3Jr IHBhY2tldHMuIFRoaXMgcGF0Y2ggZG9lcyBub3QgaW5jbHVkZSB0aGUgZGVtdXhlciBmb3IgdGhp cyBjb250YWluZXIgZm9ybWF0LgoKU2lnbmVkLW9mZi1ieTogU3VwZXJGYXNoaSA8YWRtaW5Ac3Vw ZXJmYXNoaS5jb20+Ci0tLQogQ2hhbmdlbG9nICAgICAgICAgICAgICAgIHwgICAgMSArCiBkb2Mv ZGVtdXhlcnMudGV4aSAgICAgICAgfCAgICA0ICsKIGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8 ICAgIDEgKwogbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jIHwgICAgMSArCiBsaWJhdmZvcm1hdC9t bXRwLmMgICAgICAgfCAxNjg4ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr CiBsaWJhdmZvcm1hdC9tbXRwLmggICAgICAgfCAgIDY0ICsrCiBsaWJhdmZvcm1hdC9tbXR0bHYu YyAgICAgfCAgMzM1ICsrKysrKysrCiBsaWJhdmZvcm1hdC92ZXJzaW9uLmggICAgfCAgICAyICst CiA4IGZpbGVzIGNoYW5nZWQsIDIwOTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQogY3Jl YXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHAuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxp YmF2Zm9ybWF0L21tdHAuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Zm9ybWF0L21tdHRsdi5j CgpkaWZmIC0tZ2l0IGEvQ2hhbmdlbG9nIGIvQ2hhbmdlbG9nCmluZGV4IGNhMzg1NDYyNjIuLjA1 MTE4ZmUxZTQgMTAwNjQ0Ci0tLSBhL0NoYW5nZWxvZworKysgYi9DaGFuZ2Vsb2cKQEAgLTMsNiAr Myw3IEBAIHJlbGVhc2VzIGFyZSBzb3J0ZWQgZnJvbSB5b3VuZ2VzdCB0byBvbGRlc3QuCiAKIHZl cnNpb24gPG5leHQ+OgogLSBMRUFEIE1DTVAgZGVjb2RlcgorLSBNTVRQIHBhcnNlciBhbmQgTU1U L1RMViBkZW11eGVyCiAKIHZlcnNpb24gNi4xOgogLSBsaWJhcmliY2FwdGlvbiBkZWNvZGVyCmRp ZmYgLS1naXQgYS9kb2MvZGVtdXhlcnMudGV4aSBiL2RvYy9kZW11eGVycy50ZXhpCmluZGV4IGNh MTU2M2FiYjAuLjY5NjM0YzA5ZGEgMTAwNjQ0Ci0tLSBhL2RvYy9kZW11eGVycy50ZXhpCisrKyBi L2RvYy9kZW11eGVycy50ZXhpCkBAIC02ODksNiArNjg5LDEwIEBAIFNldCB0aGUgc2FtcGxlIHJh dGUgZm9yIGxpYm9wZW5tcHQgdG8gb3V0cHV0LgogUmFuZ2UgaXMgZnJvbSAxMDAwIHRvIElOVF9N QVguIFRoZSB2YWx1ZSBkZWZhdWx0IGlzIDQ4MDAwLgogQGVuZCB0YWJsZQogCitAc2VjdGlvbiBt bXR0bHYKKworRGVtdXhlciBmb3IgTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9U TFYpLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4KKwogQHNlY3Rpb24gbW92L21wNC8zZ3AK IAogRGVtdXhlciBmb3IgUXVpY2t0aW1lIEZpbGUgRm9ybWF0ICYgSVNPL0lFQyBCYXNlIE1lZGlh IEZpbGUgRm9ybWF0IChJU08vSUVDIDE0NDk2LTEyIG9yIE1QRUctNCBQYXJ0IDEyLCBJU08vSUVD IDE1NDQ0LTEyIG9yIEpQRUcgMjAwMCBQYXJ0IDEyKS4KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0 L01ha2VmaWxlIGIvbGliYXZmb3JtYXQvTWFrZWZpbGUKaW5kZXggMzI5MDU1Y2NmZC4uYTQzMjBl NDE5MyAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvTWFrZWZpbGUKKysrIGIvbGliYXZmb3JtYXQv TWFrZWZpbGUKQEAgLTM1OSw2ICszNTksNyBAQCBPQkpTLSQoQ09ORklHX01MVl9ERU1VWEVSKSAg ICAgICAgICAgICAgICs9IG1sdmRlYy5vIHJpZmZkZWMubwogT0JKUy0kKENPTkZJR19NTV9ERU1V WEVSKSAgICAgICAgICAgICAgICArPSBtbS5vCiBPQkpTLSQoQ09ORklHX01NRl9ERU1VWEVSKSAg ICAgICAgICAgICAgICs9IG1tZi5vCiBPQkpTLSQoQ09ORklHX01NRl9NVVhFUikgICAgICAgICAg ICAgICAgICs9IG1tZi5vIHJhd2VuYy5vCitPQkpTLSQoQ09ORklHX01NVFRMVl9ERU1VWEVSKSAg ICAgICAgICAgICs9IG1tdHAubyBtbXR0bHYubwogT0JKUy0kKENPTkZJR19NT0RTX0RFTVVYRVIp ICAgICAgICAgICAgICArPSBtb2RzLm8KIE9CSlMtJChDT05GSUdfTU9GTEVYX0RFTVVYRVIpICAg ICAgICAgICAgKz0gbW9mbGV4Lm8KIE9CSlMtJChDT05GSUdfTU9WX0RFTVVYRVIpICAgICAgICAg ICAgICAgKz0gbW92Lm8gbW92X2NoYW4ubyBtb3ZfZXNkcy5vIFwKZGlmZiAtLWdpdCBhL2xpYmF2 Zm9ybWF0L2FsbGZvcm1hdHMuYyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwppbmRleCBkNGI1 MDVhNWEzLi5hZmU4YmJiMWVjIDEwMDY0NAotLS0gYS9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMK KysrIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCkBAIC0yNzUsNiArMjc1LDcgQEAgZXh0ZXJu IGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21sdl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5w dXRGb3JtYXQgIGZmX21tX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZf bW1mX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgRkZPdXRwdXRGb3JtYXQgZmZfbW1mX211eGVyOwor ZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21tdHRsdl9kZW11eGVyOwogZXh0ZXJuIGNv bnN0IEFWSW5wdXRGb3JtYXQgIGZmX21vZHNfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0 Rm9ybWF0ICBmZl9tb2ZsZXhfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBm Zl9tb3ZfZGVtdXhlcjsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21tdHAuYyBiL2xpYmF2Zm9y bWF0L21tdHAuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi41ZGM0NWVm MzA5Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvbW10cC5jCkBAIC0wLDAgKzEsMTY4 OCBAQAorLyoKKyAqIE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIs IGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1 cGVyRmFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1 ZGUgPHN0ZGJvb2wuaD4KKworI2luY2x1ZGUgImxpYmF2Y29kZWMvYnl0ZXN0cmVhbS5oIgorI2lu Y2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFk d3JpdGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbWVtLmgiCisjaW5jbHVkZSAiZGVtdXguaCIK KyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKyNpbmNsdWRlICJuZXR3 b3JrLmgiCisKK3N0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIHsKKyAgICB1aW50OF90IGxv Y2F0aW9uX3R5cGU7CisgICAgdW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAg dWludDE2X3QgcGFja2V0X2lkOworICAgICAgICB9IHR5cGUwOworICAgICAgICBzdHJ1Y3Qgewor ICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgaXB2NF9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0 cnVjdCBpbl9hZGRyIGlwdjRfZHN0X2FkZHI7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICBk c3RfcG9ydDsKKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgIHBhY2tldF9pZDsKKyAgICAgICAg fSB0eXBlMTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBp cHY2X3NyY19hZGRyOworICAgICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7 CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50 MTZfdCAgICAgICAgcGFja2V0X2lkOworICAgICAgICB9IHR5cGUyOworICAgICAgICBzdHJ1Y3Qg eworICAgICAgICAgICAgdWludDE2X3QgbmV0d29ya19pZDsKKyAgICAgICAgICAgIHVpbnQxNl90 IE1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkOworICAgICAgICAgICAgdWludDE2X3QgTVBFR18y X1BJRDogMTM7CisgICAgICAgIH0gdHlwZTM7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg ICBzdHJ1Y3QgaW42X2FkZHIgaXB2Nl9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZf YWRkciBpcHY2X2RzdF9hZGRyOworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIGRzdF9wb3J0 OworICAgICAgICAgICAgdWludDE2X3QgICAgICAgIE1QRUdfMl9QSUQ6IDEzOworICAgICAgICB9 IHR5cGU0OworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgY2hhciBVUkxbMHgxMDAgKyAx XTsKKyAgICAgICAgfSB0eXBlNTsKKyAgICB9OworfTsKKworc3RhdGljIGludCBwYXJzZV9tbXRf Z2VuZXJhbF9sb2NhdGlvbl9pbmZvKAorICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZv ICppbmZvLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQ4X3QgdXJsX3NpemU7CisK KyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoaW5mby0+bG9jYXRpb25fdHlw ZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpKSB7CisgICAgY2FzZSAweDAwOgorICAgICAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgICAgICBy ZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgaW5mby0+dHlwZTAucGFja2V0X2lk ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug MHgwMToKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMzIg KyAzMiArIDE2ICsgMTYpIC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZp bmZvLT50eXBlMS5pcHY0X3NyY19hZGRyLCA0KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1 ZmZlcnUoZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTEuaXB2NF9kc3RfYWRkciwgNCk7Cisg ICAgICAgIGluZm8tPnR5cGUxLmRzdF9wb3J0ICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp OworICAgICAgICBpbmZvLT50eXBlMS5wYWNrZXRfaWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUo Z2JjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDAyOgorICAgICAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxMjggKyAxMjggKyAxNiArIDE2KSAvIDgpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVh bTJfZ2V0X2J1ZmZlcnUoCisgICAgICAgICAgICBnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBl Mi5pcHY2X3NyY19hZGRyLCAxNik7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KAor ICAgICAgICAgICAgZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9kc3RfYWRkciwg MTYpOworICAgICAgICBpbmZvLT50eXBlMi5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9nZXRfYmUx NnUoZ2JjKTsKKyAgICAgICAgaW5mby0+dHlwZTIucGFja2V0X2lkID0gYnl0ZXN0cmVhbTJfZ2V0 X2JlMTZ1KGdiYyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMzoKKyAgICAgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyAxNiArIDMgKyAxMykgLyA4 KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGluZm8t PnR5cGUzLm5ldHdvcmtfaWQgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl90cmFuc3BvcnRfc3RyZWFtX2lkID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGluZm8tPnR5cGUzLk1QRUdfMl9Q SUQgPQorICAgICAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJiAwYjExMTExMTEx MTExMTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwNDoKKyAgICAgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTI4ICsgMTI4ICsgMTYgKyAzICsgMTMpIC8g OCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRl c3RyZWFtMl9nZXRfYnVmZmVydSgKKyAgICAgICAgICAgIGdiYywgKHVpbnQ4X3QgKikgJmluZm8t PnR5cGU0LmlwdjZfc3JjX2FkZHIsIDE2KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZl cnUoCisgICAgICAgICAgICBnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlNC5pcHY2X2RzdF9h ZGRyLCAxNik7CisgICAgICAgIGluZm8tPnR5cGU0LmRzdF9wb3J0ICAgPSBieXRlc3RyZWFtMl9n ZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgaW5mby0+dHlwZTQuTVBFR18yX1BJRCA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dShnYmMpICYgMGIxMTExMTExMTExMTExOworICAgICAgICBicmVhazsKKyAg ICBjYXNlIDB4MDU6CisgICAgICAgIHVybF9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoZ2Jj KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcihnYmMsICh1aW50OF90ICopIGluZm8t PnR5cGU1LlVSTCwgdXJsX3NpemUpOworICAgICAgICBpbmZvLT50eXBlNS5VUkxbdXJsX3NpemVd ID0gJ1wwJzsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitzdHJ1Y3QgU3Ry ZWFtcyB7CisgICAgQVZTdHJlYW0gKnN0cmVhbTsKKworICAgIGludCBudW1fdGltZXN0YW1wX2Rl c2NyaXB0b3JzOworICAgIHN0cnVjdCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yIHsKKyAgICAgICAg dWludDMyX3Qgc2VxX251bTsKKyAgICAgICAgaW50NjRfdCAgcHJlc2VudGF0aW9uX3RpbWU7Cisg ICAgfSAqdGltZXN0YW1wX2Rlc2NyaXB0b3I7CisKKyAgICBpbnQgbnVtX2V4dF90aW1lc3RhbXBf ZGVzY3JpcHRvcnM7CisgICAgc3RydWN0IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciB7 CisgICAgICAgIHVpbnQzMl90IHNlcV9udW07CisgICAgICAgIHVpbnQxNl90IGRlY29kaW5nX3Rp bWVfb2Zmc2V0OworICAgICAgICB1aW50OF90ICBudW1fb2ZfYXU7CisgICAgICAgIHN0cnVjdCB7 CisgICAgICAgICAgICB1aW50MTZfdCBkdHNfcHRzX29mZnNldDsKKyAgICAgICAgICAgIHVpbnQx Nl90IHB0c19vZmZzZXQ7CisgICAgICAgIH0gYXVbMHgxMDBdOworICAgIH0gKmV4dF90aW1lc3Rh bXBfZGVzY3JpcHRvcjsKKworICAgIHVpbnQzMl90ICAgIGxhc3Rfc2VxdWVuY2VfbnVtYmVyOwor ICAgIHVpbnQxNl90ICAgIGF1X2NvdW50OworICAgIEFWQnVmZmVyUmVmICpwZW5kaW5nX2J1ZmZl cjsKKyAgICBpbnQ2NF90ICAgICBvZmZzZXQ7CisgICAgaW50ICAgICAgICAgZmxhZ3M7CisKKyAg ICBzdHJ1Y3QgU3RyZWFtcyAqbmV4dDsKK307CisKK3N0cnVjdCBNTVRQQ29udGV4dCB7CisgICAg c3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXI7CisgICAgc3RydWN0IFN0cmVhbXMg ICAgICAgICAgICpzdHJlYW1zOworICAgIEFWUHJvZ3JhbSAgICAgICAgICAgICAgICAqcHJvZ3Jh bTsKKyAgICAvLyBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyBtcHRfbG9jYXRpb247IFRP RE8KKworICAgIC8vIGJlbG93IGFyZSB0ZW1wb3JhcnkgZmllbGRzIGF2YWlsYWJsZSBmb3IgdGhl IHNjb3BlIG9mIGEgc2luZ2xlIHBhY2tldAorICAgIEFWRm9ybWF0Q29udGV4dCAqczsKKyAgICBB VlBhY2tldCAgICAgICAgKnBrdDsKKyAgICB1aW50MTZfdCAgICAgICAgY3VycmVudF9waWQ7Cisg ICAgYm9vbCAgICAgICAgICAgIGlzX3JhcDsKK307CisKK3N0YXRpYyBzdHJ1Y3QgU3RyZWFtcyAq ZmluZF9jdXJyZW50X3N0cmVhbShzdHJ1Y3QgTU1UUENvbnRleHQgKmN0eCkKK3sKKyAgICBzdHJ1 Y3QgU3RyZWFtcyAqc3RyZWFtczsKKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0 cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpCisgICAgICAgIGlmIChzdHJl YW1zLT5zdHJlYW0tPmlkID09IGN0eC0+Y3VycmVudF9waWQpCisgICAgICAgICAgICByZXR1cm4g c3RyZWFtczsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIHN0cnVjdCBTdHJlYW1zICoK K2ZpbmRfb3JfYWxsb2NhdGVfc3RyZWFtKHN0cnVjdCBNTVRQQ29udGV4dCAqY3R4LCB1aW50MTZf dCBwaWQpCit7CisgICAgQVZTdHJlYW0gICAgICAgKnN0cmVhbTsKKyAgICBzdHJ1Y3QgU3RyZWFt cyAqc3RyZWFtczsKKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0g TlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpCisgICAgICAgIGlmIChzdHJlYW1zLT5zdHJl YW0tPmlkID09IHBpZCkgeworICAgICAgICAgICAgZmZzdHJlYW0oc3RyZWFtcy0+c3RyZWFtKS0+ bmVlZF9jb250ZXh0X3VwZGF0ZSA9IDE7CisgICAgICAgICAgICByZXR1cm4gc3RyZWFtczsKKyAg ICAgICAgfQorCisgICAgc3RyZWFtID0gYXZmb3JtYXRfbmV3X3N0cmVhbShjdHgtPnMsIE5VTEwp OworICAgIGlmIChzdHJlYW0gPT0gTlVMTCkgcmV0dXJuIE5VTEw7CisgICAgc3RyZWFtLT5pZCA9 IHBpZDsKKyAgICBhdl9wcm9ncmFtX2FkZF9zdHJlYW1faW5kZXgoY3R4LT5zLCBjdHgtPnByb2dy YW0tPmlkLCBzdHJlYW0tPmluZGV4KTsKKworICAgIHN0cmVhbXMgPSBhdl9tYWxsb2N6KHNpemVv ZihzdHJ1Y3QgU3RyZWFtcykpOworICAgIGlmIChzdHJlYW1zID09IE5VTEwpIHJldHVybiBOVUxM OworICAgIHN0cmVhbXMtPnN0cmVhbSA9IHN0cmVhbTsKKyAgICBzdHJlYW1zLT5uZXh0ICAgPSBj dHgtPnN0cmVhbXM7CisgICAgc3RyZWFtcy0+b2Zmc2V0ID0gLTE7CisgICAgY3R4LT5zdHJlYW1z ICAgID0gc3RyZWFtczsKKyAgICByZXR1cm4gc3RyZWFtczsKK30KKworZW51bSB7CisgICAgTU1U X1BBQ0tBR0VfVEFCTEVfSUQgID0gMHgyMCwKKyAgICBQQUNLQUdFX0xJU1RfVEFCTEVfSUQgPSAw eDgwLAorICAgIE1IX0VJVF9UQUJMRV9JRCAgICAgICA9IDB4OEIsCit9OworCitlbnVtIHsKKyAg ICBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICA9IDB4MDAwMSwKKyAg ICBBQ0NFU1NfQ09OVFJPTF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICA9IDB4ODAwNCwKKyAg ICBWSURFT19DT01QT05FTlRfREVTQ1JJUFRPUiAgICAgICAgICAgICAgICA9IDB4ODAxMCwKKyAg ICBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SICAgICAgICAgICA9IDB4ODAxMSwKKyAg ICBNSF9DT05URU5UX0RFU0NSSVBUT1IgICAgICAgICAgICAgICAgICAgICA9IDB4ODAxMiwKKyAg ICBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUiAgICAgICAgICAgICA9IDB4ODAxNCwKKyAg ICBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgICAgICAgICA9IDB4ODAyMCwKKyAg ICBNUFVfRVhURU5ERURfVElNRVNUQU1QX0RFU0NSSVBUT1IgICAgICAgICA9IDB4ODAyNiwKKyAg ICBDT05URU5UX0NPUFlfQ09OVFJPTF9ERVNDUklQVE9SICAgICAgICAgICA9IDB4ODAzOCwKKyAg ICBDT05URU5UX1VTQUdFX0NPTlRST0xfREVTQ1JJUFRPUiAgICAgICAgICA9IDB4ODAzOSwKKyAg ICBNVUxUSU1FRElBX1NFUlZJQ0VfSU5GT1JNQVRJT05fREVTQ1JJUFRPUiA9IDB4ODAzRiwKKyAg ICBNSF9TSE9SVF9FVkVOVF9ERVNDUklQVE9SICAgICAgICAgICAgICAgICA9IDB4RjAwMSwKKyAg ICBNSF9FWFRFTkRFRF9FVkVOVF9ERVNDUklQVE9SICAgICAgICAgICAgICA9IDB4RjAwMiwKK307 CisKK3N0YXRpYyBpbnQKK3BhcnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFt ICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9y X2xlbmd0aDsKKyAgICB1aW50OF90IGxhbmd1YWdlX2NvZGVbNF07CisKKyAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDgpIC8gOCkKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp ICE9IFZJREVPX0NPTVBPTkVOVF9ERVNDUklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRl dShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNj cmlwdG9yX2xlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg eworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0 KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworICAgICAgICAvKgorICAg ICAgICAgKiBza2lwOgorICAgICAgICAgKiAtIHZpZGVvX3Jlc29sdXRpb24KKyAgICAgICAgICog LSB2aWRlb19hc3BlY3RfcmF0aW8KKyAgICAgICAgICogLSB2aWRlb19zY2FuX2ZsYWcKKyAgICAg ICAgICogLSByZXNlcnZlZAorICAgICAgICAgKiAtIHZpZGVvX2ZyYW1lX3JhdGUKKyAgICAgICAg ICogLSBjb21wb25lbnRfdGFnCisgICAgICAgICAqIC0gdmlkZW9fdHJhbnNmZXJfY2hhcmFjdGVy aXN0aWNzCisgICAgICAgICAqIC0gcmVzZXJ2ZWQKKyAgICAgICAgICovCisgICAgICAgIGJ5dGVz dHJlYW0yX3NraXAoJm5nYmMsICg0ICsgNCArIDEgKyAyICsgNSArIDE2ICsgNCArIDQpIC8gOCk7 CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDMpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVh bTJfZ2V0X2J1ZmZlcnUoJm5nYmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgICAgICBsYW5ndWFn ZV9jb2RlWzNdID0gJ1wwJzsKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNj cmlwdG9yX2xlbmd0aCk7CisKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiAwOworICAg IHJldHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3Vh Z2VfY29kZSwgMCk7Cit9CisKK3N0YXRpYyBpbnQKK3BhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9k ZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAg dWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKyAgICB1aW50OF90IHN0cmVhbV9jb250ZW50Owor ICAgIHVpbnQ4X3Qgc3RyZWFtX3R5cGU7CisgICAgdWludDhfdCBsYW5ndWFnZV9jb2RlWzRdOwor CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMTYgKyA4KSAvIDgp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFt Ml9nZXRfYmUxNnUoZ2JjKSAhPSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUikKKyAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBi eXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgdWludDhfdCBieXRlOworICAgICAgICBib29s IEVTX211bHRpX2xpbmd1YWxfZmxhZzsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOwor ICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9s ZW5ndGgpOworCisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykg PAorICAgICAgICAgICAgKDQgKyA0ICsgOCArIDE2ICsgOCArIDggKyAxICsgMSArIDIgKyAzICsg MSArIDI0KSAvIDgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKwor ICAgICAgICBieXRlICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7Cisg ICAgICAgIHN0cmVhbV9jb250ZW50ID0gYnl0ZSAmIDBiMTExMTsKKworICAgICAgICAvKgorICAg ICAgICAgKiBza2lwOgorICAgICAgICAgKiAtIGNvbXBvbmVudF90eXBlCisgICAgICAgICAqIC0g Y29tcG9uZW50X3RhZworICAgICAgICAgKi8KKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoJm5n YmMsIDMpOworICAgICAgICBzdHJlYW1fdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdi Yyk7CisKKyAgICAgICAgLy8gc2tpcDogc2ltdWxjYXN0X2dyb3VwX3RhZworICAgICAgICBieXRl c3RyZWFtMl9za2lwdSgmbmdiYywgMSk7CisKKyAgICAgICAgYnl0ZSAgICAgICAgICAgICAgICAg ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKyAgICAgICAgRVNfbXVsdGlfbGluZ3Vh bF9mbGFnID0gYnl0ZSA+PiA3OworCisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KCZu Z2JjLCBsYW5ndWFnZV9jb2RlLCAzKTsKKyAgICAgICAgbGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7 CisKKyAgICAgICAgaWYgKEVTX211bHRpX2xpbmd1YWxfZmxhZykgeworICAgICAgICAgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDMpCisgICAgICAgICAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lw dSgmbmdiYywgMyk7CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiAw OworCisgICAgc3dpdGNoIChzdHJlYW1fY29udGVudCkgeworICAgIGNhc2UgMHgzOgorICAgICAg ICBzd2l0Y2ggKHN0cmVhbV90eXBlKSB7CisgICAgICAgIGNhc2UgMHgxMToKKyAgICAgICAgICAg IHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUFDX0xBVE07CisgICAg ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAweDFjOgorICAgICAgICAgICAgc3RyZWFtLT5j b2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9BQUM7CisgICAgICAgICAgICBicmVhazsK KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4NDoKKyAgICAgICAgc3RyZWFt LT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9NUDRBTFM7CisgICAgICAgIGJyZWFr OworICAgIH0KKworICAgIHJldHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxh bmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7Cit9CisKKyNkZWZpbmUgTUFYX05VTV9USU1FU1RB TVBfREVTQ1JJUFRPUiAzMgorI2RlZmluZSBESUZGKGEsIGIpICgoYSkgPiAoYikgPyAoKGEpIC0g KGIpKSA6ICgoYikgLSAoYSkpKQorCitzdGF0aWMgaW50CitwYXJzZV9tcHVfdGltZXN0YW1wX2Rl c2NyaXB0b3Ioc3RydWN0IFN0cmVhbXMgKnN0cmVhbXMsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7 CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9n ZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBN UFVfVElNRVNUQU1QX0RFU0NSSVBUT1IpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGRlc2NyaXB0b3Jf bGVuZ3RoKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB7CisgICAg ICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMs IGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICAgICAgd2hpbGUgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA+IDApIHsKKyAgICAgICAgICAgIHVpbnQ2NF90 IG1wdV9zZXFfbnVtOworICAgICAgICAgICAgaW50NjRfdCAgbXB1X3ByZXNlbnRhdGlvbl90aW1l OworICAgICAgICAgICAgc2l6ZV90ICAgaTsKKworICAgICAgICAgICAgc3RydWN0IE1QVVRpbWVz dGFtcERlc2NyaXB0b3IgKmRlc2M7CisKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdCgmbmdiYykgPCAoMzIgKyA2NCkgLyA4KQorICAgICAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgbXB1X3NlcV9udW0gPSBieXRlc3Ry ZWFtMl9nZXRfYmUzMnUoJm5nYmMpOworICAgICAgICAgICAgbXB1X3ByZXNlbnRhdGlvbl90aW1l ID0KKyAgICAgICAgICAgICAgICBmZl9wYXJzZV9udHBfdGltZShieXRlc3RyZWFtMl9nZXRfYmU2 NHUoJm5nYmMpKSAtIE5UUF9PRkZTRVRfVVM7CisKKyAgICAgICAgICAgIGlmIChtcHVfc2VxX251 bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisg ICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5z ZXFfbnVtID09CisgICAgICAgICAgICAgICAgICAgICAgICBtcHVfc2VxX251bSkgeworICAgICAg ICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsg aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKKyAgICAgICAgICAgICAgICAg ICAgfQorCisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1l c3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMt PnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPAorICAgICAgICAgICAgICAgICAgICAg ICAgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAg ICAgIGRlc2MgPSBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzICsgMSA+Cisg ICAgICAgICAgICAgICAgICAgIE1BWF9OVU1fVElNRVNUQU1QX0RFU0NSSVBUT1IpIHsKKyAgICAg ICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbGwgZGVzY3JpcHRvcnMgbGFyZ2VyIHRoYW4gdGhl IGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGNhbid0 IGFkZCBtb3JlLCBzbyB3ZSBzaG91bGQgZXZpY3QgdGhlIG9uZSB3aXRoIHRoZSBsYXJnZXN0IGRp c3RhbmNlCisgICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kaXN0ID0gMDsKKyAgICAg ICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVz Y3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChESUZGKAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltp XS5zZXFfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtcHVfc2VxX251bSkg PiBtYXhfZGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgICAgID0gc3Ry ZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAg ICAgIG1heF9kaXN0ID0gRElGRigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Ry ZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSwKKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgbXB1X3NlcV9udW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7IC8vIHNob3VsZCBu ZXZlciBmYWlsCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgICAgICBkZXNjID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAg ICAgICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciwKKyAg ICAgICAgICAgICAgICAgICAgJnN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisg ICAgICAgICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciks IE5VTEwpOworICAgICAgICAgICAgICAgIGlmIChkZXNjID09IE5VTEwpIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICAgICAgICAgICAgICBlbmQxOgorICAgICAgICAgICAgICAgIGRlc2Mt PnNlcV9udW0gICAgICAgICAgID0gbXB1X3NlcV9udW07CisgICAgICAgICAgICAgICAgZW5kMjoK KyAgICAgICAgICAgICAgICBkZXNjLT5wcmVzZW50YXRpb25fdGltZSA9IG1wdV9wcmVzZW50YXRp b25fdGltZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFt Ml9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgIHJldHVybiAwOworfQorCitz dGF0aWMgaW50IHBhcnNlX21wdV9leHRlbmRlZF90aW1lc3RhbXBfZGVzY3JpcHRvcigKKyAgICBz dHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50 OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworCisgICAgQVZTdHJlYW0gKnN0cmVhbSA9IHN0cmVhbXMt PnN0cmVhbTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2 ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVND UklQVE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlw dG9yX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAgaWYgKGJ5dGVz dHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBkZXNjcmlwdG9yX2xlbmd0aCkKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICB1aW50OF90ICBieXRl OworICAgICAgICB1aW50OF90ICBwdHNfb2Zmc2V0X3R5cGU7CisgICAgICAgIGJvb2wgdGltZXNj YWxlX2ZsYWc7CisgICAgICAgIHVpbnQxNl90IGRlZmF1bHRfcHRzX29mZnNldCA9IDA7CisKKyAg ICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdi YywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0 cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDUgKyAyICsgMSkgLyA4KQorICAgICAgICAg ICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGJ5dGUgICAgICAgICAgICA9 IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKKyAgICAgICAgcHRzX29mZnNldF90eXBlID0g KGJ5dGUgPj4gMSkgJiAwYjExOworICAgICAgICB0aW1lc2NhbGVfZmxhZyAgPSBieXRlICYgMTsK KworICAgICAgICBpZiAodGltZXNjYWxlX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCA0KQorICAgICAgICAgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgc3RyZWFtLT50aW1lX2Jhc2UubnVtID0g MTsKKyAgICAgICAgICAgIHN0cmVhbS0+dGltZV9iYXNlLmRlbiA9IGJ5dGVzdHJlYW0yX2dldF9i ZTMydSgmbmdiYyk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocHRzX29mZnNldF90eXBlID09 IDEpIHsKKyAgICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykg PCAyKQorICAgICAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAg ICAgICAgZGVmYXVsdF9wdHNfb2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsK KyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPiAwKSB7CisgICAgICAgICAgICBzaXplX3QgICBpOworICAgICAgICAgICAgdWludDhf dCAgbnVtX29mX2F1OworICAgICAgICAgICAgdWludDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7 CisgICAgICAgICAgICB1aW50NjRfdCBtcHVfc2VxX251bTsKKworICAgICAgICAgICAgc3RydWN0 IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CisKKyAgICAgICAg ICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9QQVRDSFdFTENPTUU7ICAvLyB3ZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcwor CisgICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDMy ICsgMiArIDYgKyAxNiArIDgpIC8gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICAgICAgICAgIG1wdV9zZXFfbnVtID0gYnl0ZXN0cmVhbTJfZ2V0X2Jl MzJ1KCZuZ2JjKTsKKyAgICAgICAgICAgIC8vIHNraXA6IGxlYXBfaW5kaWNhdG9yCisgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAoMiArIDYpIC8gOCk7CisgICAgICAgICAgICBk ZWNvZGluZ190aW1lX29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAg ICAgICAgICBudW1fb2ZfYXUgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdi Yyk7CisKKyAgICAgICAgICAgIGlmIChtcHVfc2VxX251bSA+PSBzdHJlYW1zLT5sYXN0X3NlcXVl bmNlX251bWJlcikgeworICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5u dW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQorICAgICAgICAgICAgICAgICAgICBp ZiAoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0gPT0KKyAgICAg ICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSB7CisgICAgICAgICAgICAgICAgICAgICAg ICBkZXNjID0gc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5leHRfdGlt ZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSA8CisgICAgICAgICAgICAgICAgICAgICAgICBz dHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgICAgICAgICAgICAg ZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAg ICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9ycyArIDEg PgorICAgICAgICAgICAgICAgICAgICBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7Cisg ICAgICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kaWZmID0gMDsKKyAgICAgICAgICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRElGRigKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ld LnNlcV9udW0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKSA+ IG1heF9kaWZmKSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJl YW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAg ICAgICAgIG1heF9kaWZmID0gRElGRigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcV9udW0sCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1wdV9zZXFfbnVtKTsKKyAgICAgICAgICAgICAgICAgICAg ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgYXZfYXNzZXJ0MShkZXNjICE9IE5VTEwpOworICAg ICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAg ICAgICAgICAgZGVzYyA9IGF2X2R5bmFycmF5Ml9hZGQoCisgICAgICAgICAgICAgICAgICAgICh2 b2lkICoqKSAmc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yLAorICAgICAgICAgICAg ICAgICAgICAmc3RyZWFtcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAg ICAgICAgICAgICAgIHNpemVvZihzdHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9y KSwgTlVMTCk7CisgICAgICAgICAgICAgICAgaWYgKGRlc2MgPT0gTlVMTCkKKyAgICAgICAgICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKworICAgICAgICAgICAgICAgIGVuZDE6 CisgICAgICAgICAgICAgICAgZGVzYy0+c2VxX251bSAgICAgICAgICAgICAgPSBtcHVfc2VxX251 bTsKKyAgICAgICAgICAgICAgICBlbmQyOgorICAgICAgICAgICAgICAgIGRlc2MtPmRlY29kaW5n X3RpbWVfb2Zmc2V0ID0gZGVjb2RpbmdfdGltZV9vZmZzZXQ7CisgICAgICAgICAgICAgICAgZGVz Yy0+bnVtX29mX2F1ICAgICAgICAgICAgPSBudW1fb2ZfYXU7CisgICAgICAgICAgICB9CisKKyAg ICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2ZfYXU7ICsraSkgeworICAgICAgICAgICAg ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAyKQorICAgICAgICAg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgICAgICBp ZiAoZGVzYyAhPSBOVUxMKQorICAgICAgICAgICAgICAgICAgICBkZXNjLT5hdVtpXS5kdHNfcHRz X29mZnNldCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAgICAgICAgICAg ZWxzZQorICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMik7CisK KyAgICAgICAgICAgICAgICBpZiAocHRzX29mZnNldF90eXBlID09IDIpIHsKKyAgICAgICAgICAg ICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAg ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg ICAgICAgICAgICAgaWYgKGRlc2MgIT0gTlVMTCkKKyAgICAgICAgICAgICAgICAgICAgICAgIGRl c2MtPmF1W2ldLnB0c19vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAg ICAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBieXRlc3RyZWFt Ml9za2lwdSgmbmdiYywgMik7CisgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkZXNjICE9IE5V TEwpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzYy0+YXVbaV0ucHRzX29mZnNldCA9IGRlZmF1 bHRfcHRzX29mZnNldDsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAg IH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7 CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludAorcGFyc2VfYWRkaXRpb25hbF9hcmli X3N1YnRpdGxlX2luZm8oQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sK KyAgICBib29sICAgIHN0YXJ0X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZzsKKyAgICBjaGFyICAg IGxhbmd1YWdlX2NvZGVbNF07CisgICAgdWludDhfdCBzdWJ0aXRsZV9mb3JtYXQ7CisKKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8CisgICAgICAgICg4ICsgNCArIDEg KyAzICsgMjQgKyAyICsgNCArIDIgKyA0ICsgNCArIDQgKyA0KSAvIDgpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIC8vIHNraXA6IHN1YnRpdGxlX3RhZworICAgIGJ5 dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9m bGFnID0gKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpID4+IDMpICYgMTsKKyAgICBieXRlc3Ry ZWFtMl9nZXRfYnVmZmVydShnYmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgIGxhbmd1YWdlX2Nv ZGVbM10gPSAnXDAnOworICAgIHN1YnRpdGxlX2Zvcm1hdCA9IChieXRlc3RyZWFtMl9nZXRfYnl0 ZXUoZ2JjKSA+PiAyKSAmIDBiMTExMTsKKyAgICAvKgorICAgICAqIHNraXA6CisgICAgICogLSBU TUQKKyAgICAgKiAtIERNRgorICAgICAqIC0gcmVzb2x1dGlvbgorICAgICAqIC0gY29tcHJlc3Np b25fdHlwZQorICAgICAqLworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDQgKyA0ICsgNCAr IDQpIC8gOCk7CisKKyAgICBpZiAoc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFnKQorICAg ICAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIpOworCisgICAgc3dpdGNoIChzdWJ0aXRsZV9m b3JtYXQpIHsKKyAgICBjYXNlIDBiMDAwMDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29k ZWNfaWQgPSBBVl9DT0RFQ19JRF9UVE1MOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy ZXR1cm4gYXZfZGljdF9zZXQoJnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdl X2NvZGUsIDApOworfQorCitzdGF0aWMgaW50CitwYXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNj cmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgdWlu dDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfREFUQV9DT01Q T05FTlRfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgR2V0 Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5i dWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCBkZXNjcmlwdG9yX2xlbmd0aCk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KCZuZ2JjKSA8IDE2IC8gOCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYykpIHsK KyAgICAgICAgY2FzZSAweDAwMjA6IC8vIGFkZGl0aW9uYWwgQVJJQiBzdWJ0aXRsZSBpbmZvIChU YWJsZSA3LTc0LCBBUklCIFNURC1CNjAsIFZlcnNpb24gMS4xNC1FMSkKKyAgICAgICAgICAgIHJl dHVybiBwYXJzZV9hZGRpdGlvbmFsX2FyaWJfc3VidGl0bGVfaW5mbyhzdHJlYW0sICZuZ2JjKTsK KyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50CitwYXJz ZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgdWludDhfdCBkZXNjcmlwdG9yX2xlbmd0aDsKKworICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCkgLyA4KQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2Jl MTZ1KGdiYykgIT0gTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgIHsKKyAgICAgICAgLy8gbm8gbmVlZCBmb3Igbm93CisgICAgfQorICAgIGJ5 dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbXB0X2Rlc2NyaXB0b3Ioc3RydWN0IFN0cmVhbXMgKnN0 cmVhbXMsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykgPCAzKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICBzd2l0Y2ggKGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2JjKSkgeworICAgIGNhc2UgTVBV X1RJTUVTVEFNUF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbXB1X3RpbWVzdGFt cF9kZXNjcmlwdG9yKHN0cmVhbXMsIGdiYyk7CisgICAgY2FzZSBWSURFT19DT01QT05FTlRfREVT Q1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9y KHN0cmVhbXMtPnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1IX1NUUkVBTV9JREVOVElGSUVSX0RF U0NSSVBUT1I6CisgICAgICAgIHJldHVybiBwYXJzZV9zdHJlYW1faWRlbnRpZmllcl9kZXNjcmlw dG9yKHN0cmVhbXMtPnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1IX0FVRElPX0NPTVBPTkVOVF9E RVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbWhfYXVkaW9fY29tcG9uZW50X2Rlc2Ny aXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2UgTUhfREFUQV9DT01QT05FTlRf REVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21oX2RhdGFfY29tcG9uZW50X2Rlc2Ny aXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBnYmMpOworICAgIGNhc2UgTVBVX0VYVEVOREVEX1RJTUVT VEFNUF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbXB1X2V4dGVuZGVkX3RpbWVz dGFtcF9kZXNjcmlwdG9yKHN0cmVhbXMsIGdiYyk7CisgICAgY2FzZSBBQ0NFU1NfQ09OVFJPTF9E RVNDUklQVE9SOgorICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDIpOworICAgICAgICBi eXRlc3RyZWFtMl9za2lwKGdiYywgYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykpOworICAgICAg ICByZXR1cm4gMDsKKyAgICB9CisgICAgYXZfbG9nKHN0cmVhbXMtPnN0cmVhbSwgQVZfTE9HX0lO Rk8sICJVbmtub3duIGRlc2NyaXB0b3I6IDB4JTA0eFxuIiwKKyAgICAgICAgICAgYnl0ZXN0cmVh bTJfcGVla19iZTE2dShnYmMpKTsKKyAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7Cit9 CisKK3N0YXRpYyBpbnQgcGFyc2VfbWhfc2hvcnRfZXZlbnRfZGVzY3JpcHRvcigKKyAgICBNTVRQ Q29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQxNl90IGRlc2Ny aXB0b3JfbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykg PCAoMTYgKyAxNikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgIT0gTUhfU0hPUlRfRVZFTlRfREVTQ1JJ UFRPUikKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRv cl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgZGVzY3JpcHRvcl9sZW5ndGgpCisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgdWludDhfdCAgbGFuZ3Vh Z2VfY29kZVs0XTsKKyAgICAgICAgdWludDhfdCAgZXZlbnRfbmFtZV9sZW5ndGg7CisgICAgICAg IHVpbnQxNl90IHRleHRfbGVuZ3RoOworICAgICAgICBjaGFyICAgICAqZXZlbnRfbmFtZSwgKnRl eHQ7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJf aW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgICAgICBi eXRlc3RyZWFtMl9nZXRfYnVmZmVyKCZuZ2JjLCBsYW5ndWFnZV9jb2RlLCAzKTsKKyAgICAgICAg bGFuZ3VhZ2VfY29kZVszXSA9ICdcMCc7CisKKyAgICAgICAgZXZlbnRfbmFtZV9sZW5ndGggPSBi eXRlc3RyZWFtMl9nZXRfYnl0ZSgmbmdiYyk7CisgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRf Ynl0ZXNfbGVmdCgmbmdiYykgPCBldmVudF9uYW1lX2xlbmd0aCkKKyAgICAgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBldmVudF9uYW1lID0gYXZfc3RybmR1cChu Z2JjLmJ1ZmZlciwgZXZlbnRfbmFtZV9sZW5ndGgpOworICAgICAgICBieXRlc3RyZWFtMl9za2lw dSgmbmdiYywgZXZlbnRfbmFtZV9sZW5ndGgpOworCisgICAgICAgIGF2X2RpY3Rfc2V0KCZjdHgt PnByb2dyYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2RlLCAwKTsKKyAgICAg ICAgYXZfZGljdF9zZXQoJmN0eC0+cHJvZ3JhbS0+bWV0YWRhdGEsICJ0aXRsZSIsIGV2ZW50X25h bWUsCisgICAgICAgICAgICAgICAgICAgIEFWX0RJQ1RfRE9OVF9TVFJEVVBfVkFMKTsKKworICAg ICAgICB0ZXh0X2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7CisgICAgICAg IGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCB0ZXh0X2xlbmd0aCkKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICB0ZXh0ID0gYXZf c3RybmR1cChuZ2JjLmJ1ZmZlciwgdGV4dF9sZW5ndGgpOworICAgICAgICBieXRlc3RyZWFtMl9z a2lwdSgmbmdiYywgdGV4dF9sZW5ndGgpOworCisgICAgICAgIGF2X2RpY3Rfc2V0KCZjdHgtPnBy b2dyYW0tPm1ldGFkYXRhLCAiZGVzY3JpcHRpb24iLCB0ZXh0LAorICAgICAgICAgICAgICAgICAg ICBBVl9ESUNUX0RPTlRfU1RSRFVQX1ZBTCk7CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1 KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcGFyc2VfbWhfZWl0X2Rlc2NyaXB0b3IoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRl eHQgKmdiYykKK3sKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDMp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoYnl0ZXN0 cmVhbTJfcGVla19iZTE2dShnYmMpKSB7CisgICAgY2FzZSBWSURFT19DT01QT05FTlRfREVTQ1JJ UFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX3ZpZGVvX2NvbXBvbmVudF9kZXNjcmlwdG9yKE5V TEwsIGdiYyk7CisgICAgY2FzZSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUjoKKyAgICAg ICAgcmV0dXJuIHBhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9yKE5VTEwsIGdiYyk7 CisgICAgY2FzZSBNSF9TSE9SVF9FVkVOVF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFy c2VfbWhfc2hvcnRfZXZlbnRfZGVzY3JpcHRvcihjdHgsIGdiYyk7CisgICAgY2FzZSBNSF9DT05U RU5UX0RFU0NSSVBUT1I6CisgICAgY2FzZSBDT05URU5UX0NPUFlfQ09OVFJPTF9ERVNDUklQVE9S OgorICAgIGNhc2UgQ09OVEVOVF9VU0FHRV9DT05UUk9MX0RFU0NSSVBUT1I6CisgICAgY2FzZSBN VUxUSU1FRElBX1NFUlZJQ0VfSU5GT1JNQVRJT05fREVTQ1JJUFRPUjoKKyAgICAgICAgYnl0ZXN0 cmVhbTJfc2tpcHUoZ2JjLCAyKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIGJ5dGVz dHJlYW0yX2dldF9ieXRldShnYmMpKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgY2FzZSBNSF9F WFRFTkRFRF9FVkVOVF9ERVNDUklQVE9SOgorICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMs IDIpOworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgYnl0ZXN0cmVh bTJfc2tpcChnYmMsIGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpKTsKKyAgICAgICAgcmV0dXJu IDA7CisgICAgfQorICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19JTkZPLCAiVW5rbm93biBkZXNj cmlwdG9yOiAweCUwNHhcbiIsCisgICAgICAgICAgIGJ5dGVzdHJlYW0yX3BlZWtfYmUxNnUoZ2Jj KSk7CisgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworfQorCitzdGF0aWMgaW50IHBh cnNlX21tdF9wYWNrYWdlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpn YmMpCit7CisgICAgdWludDE2X3QgbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykgPCAoOCArIDggKyAxNikgLyA4KQorICAgICAgICByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYykgIT0gTU1U X1BBQ0tBR0VfVEFCTEVfSUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOwor ICAgIC8vIHNraXA6IHZlcnNpb24KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworICAg IGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworCisgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAgICAgIHJldHVybiBBVkVSUk9S X0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgc2l6ZV90ICAgaSwgajsKKyAgICAgICAgdWlu dDhfdCAgcGFja2FnZV9pZF9sZW5ndGg7CisgICAgICAgIHVpbnQxNl90IGRlc2NyaXB0b3JzX2xl bmd0aDsKKyAgICAgICAgdWludDhfdCAgbnVtYmVyX29mX2Fzc2V0czsKKworICAgICAgICBHZXRC eXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1 ZmZlciwgbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQo Jm5nYmMpIDwgKDYgKyAyICsgOCkgLyA4KQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisKKyAgICAgICAgLy8gc2tpcDogTVBUX21vZGUKKyAgICAgICAgYnl0ZXN0cmVh bTJfc2tpcHUoJm5nYmMsIDEpOworICAgICAgICBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ5dGVzdHJl YW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywg cGFja2FnZV9pZF9sZW5ndGgpOworCisgICAgICAgIGRlc2NyaXB0b3JzX2xlbmd0aCA9IGJ5dGVz dHJlYW0yX2dldF9iZTE2KCZuZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywg ZGVzY3JpcHRvcnNfbGVuZ3RoKTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoJm5nYmMpIDwgMSkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICBudW1iZXJfb2ZfYXNzZXRzID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2Jj KTsKKworICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtYmVyX29mX2Fzc2V0czsgKytpKSB7Cisg ICAgICAgICAgICBpbnQgZXJyOworCisgICAgICAgICAgICB1aW50OF90ICBhc3NldF9pZF9sZW5n dGg7CisgICAgICAgICAgICB1aW50OF90ICBsb2NhdGlvbl9jb3VudDsKKyAgICAgICAgICAgIHVp bnQxNl90IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aDsKKyAgICAgICAgICAgIHVpbnQzMl90IGFz c2V0X3R5cGU7CisKKyAgICAgICAgICAgIHN0cnVjdCBTdHJlYW1zICpzdHJlYW0gPSBOVUxMOwor CisgICAgICAgICAgICBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyBpbmZvOworCisgICAg ICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpIDwgKDggKyAzMiAr IDgpIC8gOCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgICAgIC8qCisgICAgICAgICAgICAgKiBza2lwOgorICAgICAgICAgICAgICogLSBpZGVu dGlmaWVyX3R5cGUKKyAgICAgICAgICAgICAqIC0gYXNzZXRfaWRfc2NoZW1lCisgICAgICAgICAg ICAgKi8KKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAoOCArIDMyKSAvIDgp OworICAgICAgICAgICAgYXNzZXRfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZu Z2JjKTsKKworICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgYXNzZXRfaWRfbGVu Z3RoKTsKKworICAgICAgICAgICAgYXNzZXRfdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9sZTMyKCZu Z2JjKTsKKworICAgICAgICAgICAgLy8gc2tpcDogYXNzZXRfY2xvY2tfcmVsYXRpb25fZmxhZwor ICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgMSk7CisKKyAgICAgICAgICAgIGlm IChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbmdiYykgPCAxKQorICAgICAgICAgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgbG9jYXRpb25fY291bnQg PSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAgICAgICAgICBmb3IgKGogPSAw OyBqIDwgbG9jYXRpb25fY291bnQ7ICsraikKKyAgICAgICAgICAgICAgICBpZiAoKGVyciA9IHBh cnNlX21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oJmluZm8sICZuZ2JjKSkgPCAwKQorICAgICAg ICAgICAgICAgICAgICByZXR1cm4gZXJyOworCisgICAgICAgICAgICBzd2l0Y2ggKGFzc2V0X3R5 cGUpIHsKKyAgICAgICAgICAgIGNhc2UgTUtUQUcoJ2gnLCAnZScsICd2JywgJzEnKToKKyAgICAg ICAgICAgICAgICBpZiAoaW5mby5sb2NhdGlvbl90eXBlICE9IDB4MDApIHJldHVybiBBVkVSUk9S X1BBVENIV0VMQ09NRTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRl X3N0cmVhbShjdHgsIGluZm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAo c3RyZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAg c3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX1ZJREVP OworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgICA9 IEFWX0NPREVDX0lEX0hFVkM7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVj cGFyLT5jb2RlY190YWcgID0gYXNzZXRfdHlwZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg ICAgICAgICAgIGNhc2UgTUtUQUcoJ20nLCAncCcsICc0JywgJ2EnKToKKyAgICAgICAgICAgICAg ICBpZiAoaW5mby5sb2NhdGlvbl90eXBlICE9IDB4MDApIHJldHVybiBBVkVSUk9SX1BBVENIV0VM Q09NRTsKKyAgICAgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShj dHgsIGluZm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtID09 IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5z dHJlYW0tPmNvZGVjcGFyLT5jb2RlY190eXBlID0gQVZNRURJQV9UWVBFX0FVRElPOworICAgICAg ICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFzc2V0X3R5 cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdzJywg J3QnLCAncCcsICdwJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9jYXRpb25fdHlwZSA9 PSAweDAwKSB7CisgICAgICAgICAgICAgICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxsb2NhdGVf c3RyZWFtKGN0eCwgaW5mby50eXBlMC5wYWNrZXRfaWQpOworICAgICAgICAgICAgICAgICAgICBp ZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisgICAgICAgICAgICAg ICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQ RV9TVUJUSVRMRTsKKyAgICAgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFy LT5jb2RlY190YWcgID0gYXNzZXRfdHlwZTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAncCcsICdwJyk6 CisgICAgICAgICAgICBjYXNlIE1LVEFHKCdhJywgJ3MnLCAnZycsICdkJyk6CisgICAgICAgICAg ICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAnZycsICdkJyk6CisgICAgICAgICAgICAgICAgYnJlYWs7 IC8vIFRPRE8KKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDIpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgICAgICAgICBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGggPSBieXRl c3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KCZuZ2JjKSA8IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCkKKyAgICAgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgICAgIGlmIChzdHJl YW0gIT0gTlVMTCkgeworICAgICAgICAgICAgICAgIEdldEJ5dGVDb250ZXh0IG5uZ2JjOworICAg ICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5uZ2JjLCBuZ2JjLmJ1ZmZlciwgYXNzZXRf ZGVzY3JpcHRvcnNfbGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdCgmbm5nYmMpID4gMCkKKyAgICAgICAgICAgICAgICAgICAgaWYgKChl cnIgPSBwYXJzZV9tcHRfZGVzY3JpcHRvcihzdHJlYW0sICZubmdiYykpIDwgMCkKKyAgICAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBi eXRlc3RyZWFtMl9za2lwdSgmbmdiYywgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoKTsKKyAgICAg ICAgfQorICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICBy ZXR1cm4gMDsKK30KKworc3RhdGljIGludCBwYXJzZV9wYWNrYWdlX2xpc3RfdGFibGUoTU1UUENv bnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBzaXplX3QgICBpOworICAg IHVpbnQzMl90IGxlbmd0aDsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChn YmMpIDwgKDggKyA4ICsgMTYpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpICE9IFBBQ0tBR0VfTElTVF9U QUJMRV9JRCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgLy8gc2tp cDogdmVyc2lvbgorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgbGVuZ3RoID0g Ynl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgeworICAgICAgICBpbnQgICAgIGVycjsKKyAgICAgICAgdWludDhfdCBudW1fb2Zf cGFja2FnZTsKKyAgICAgICAgdWludDhfdCBudW1fb2ZfaXBfZGVsaXZlcnk7CisKKyAgICAgICAg R2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2Jj LT5idWZmZXIsIGxlbmd0aCk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KGdiYykgPCAxKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7Cisg ICAgICAgIG51bV9vZl9wYWNrYWdlID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKwor ICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtX29mX3BhY2thZ2U7ICsraSkgeworICAgICAgICAg ICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgICAgcGFja2FnZV9pZF9sZW5ndGg7CisgICAg ICAgICAgICBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyBpbmZvOworCisgICAgICAgICAg ICBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRlKCZuZ2JjKTsKKyAgICAg ICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsIHBhY2thZ2VfaWRfbGVuZ3RoKTsKKworICAg ICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9tbXRfZ2VuZXJhbF9sb2NhdGlvbl9pbmZvKCZpbmZv LCAmbmdiYykpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICB9CisK KyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KCZuZ2JjKSA8IDEpCisgICAg ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgbnVtX29mX2lwX2Rl bGl2ZXJ5ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKworICAgICAgICBmb3IgKGkg PSAwOyBpIDwgbnVtX29mX2lwX2RlbGl2ZXJ5OyArK2kpCisgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9QQVRDSFdFTENPTUU7CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVu Z3RoKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHBhcnNlX21oX2VpdF90YWJs ZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIHVpbnQxNl90 IHNlY3Rpb25fbGVuZ3RoOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdi YykgPCAoOCArIDEgKyAxICsgMiArIDEyKSAvIDgpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKSAhPSBNSF9FSVRf VEFCTEVfSUQpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHNlY3Rp b25fbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYykgJiAwYjAwMDAxMTExMTExMTEx MTE7CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IHNlY3Rpb25f bGVuZ3RoIHx8IHNlY3Rpb25fbGVuZ3RoIDwgNCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgeworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBi eXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgc2VjdGlvbl9sZW5ndGggLSA0KTsK KworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZuZ2JjLCAoMTYgKyAyICsgNSArIDEgKyA4ICsg OCArIDE2ICsgMTYgKyA4ICsgOCkgLyA4KTsKKworICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoJm5nYmMpID4gMCkgeworICAgICAgICAgICAgdWludDE2X3QgZGVzY3Jp cHRvcnNfbG9vcF9sZW5ndGg7CisKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMs ICgxNiArIDQwICsgMjQpIC8gOCk7CisgICAgICAgICAgICBkZXNjcmlwdG9yc19sb29wX2xlbmd0 aCA9CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKSAmIDBiMDAw MDExMTExMTExMTExMTsKKworICAgICAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19s ZWZ0KCZuZ2JjKSA8IGRlc2NyaXB0b3JzX2xvb3BfbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICAgICAgeworICAgICAgICAgICAgICAg IGludCAgICAgICAgICAgIGVycjsKKyAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBubmdi YzsKKyAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZubmdiYywgbmdiYy5idWZmZXIs IGRlc2NyaXB0b3JzX2xvb3BfbGVuZ3RoKTsKKworICAgICAgICAgICAgICAgIHdoaWxlIChieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbm5nYmMpID4gMCkKKyAgICAgICAgICAgICAgICAgICAg aWYgKChlcnIgPSBwYXJzZV9taF9laXRfZGVzY3JpcHRvcihjdHgsICZubmdiYykpIDwgMCkKKyAg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgZGVzY3JpcHRvcnNfbG9vcF9sZW5ndGgpOwor ICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgc2VjdGlvbl9sZW5n dGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfdGFibGUoTU1UUENv bnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDIpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworICAgIHN3aXRjaCAoYnl0ZXN0cmVhbTJfcGVla19ieXRldShnYmMpKSB7CisgICAgY2Fz ZSBNTVRfUEFDS0FHRV9UQUJMRV9JRDoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21tdF9wYWNrYWdl X3RhYmxlKGN0eCwgZ2JjKTsKKyAgICBjYXNlIFBBQ0tBR0VfTElTVF9UQUJMRV9JRDoKKyAgICAg ICAgcmV0dXJuIHBhcnNlX3BhY2thZ2VfbGlzdF90YWJsZShjdHgsIGdiYyk7CisgICAgY2FzZSBN SF9FSVRfVEFCTEVfSUQ6CisgICAgICAgIHJldHVybiBwYXJzZV9taF9laXRfdGFibGUoY3R4LCBn YmMpOworICAgIH0KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykpOyAvLyBUT0RPCisgICAgcmV0dXJuIDA7Cit9CisKK2VudW0geworICAg IFBBX01FU1NBR0VfSUQgICAgICA9IDB4MDAwMCwKKyAgICBNMl9TRUNUSU9OX01FU1NBR0UgPSAw eDgwMDAsCit9OworCitzdGF0aWMgaW50IHBhcnNlX3BhX21lc3NhZ2UoTU1UUENvbnRleHQgKmN0 eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICBp ZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8ICgxNiArIDggKyAzMikgLyA4KQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2JlMTZ1KGdiYykgIT0gUEFfTUVTU0FHRV9JRCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1Jf SU5WQUxJRERBVEE7CisgICAgLy8gc2tpcDogdmVyc2lvbgorICAgIGJ5dGVzdHJlYW0yX3NraXB1 KGdiYywgMSk7CisgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzJ1KGdiYyk7CisKKyAg ICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkKKyAgICAgICAg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgeworICAgICAgICBzaXplX3QgIGk7Cisg ICAgICAgIHVpbnQ4X3QgbnVtX29mX3RhYmxlczsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBu Z2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVuZ3Ro KTsKKworICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IDEpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgbnVtX29mX3Rh YmxlcyA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgZm9yIChpID0g MDsgaSA8IG51bV9vZl90YWJsZXM7ICsraSkgeworICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cCgmbmdiYywgKDggKyA4ICsgMTYpIC8gOCk7CisgICAgICAgIH0KKworICAgICAgICB3aGlsZSAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpID4gMCkgeworICAgICAgICAgICAgaW50 IGVyciA9IHBhcnNlX3RhYmxlKGN0eCwgJm5nYmMpOworICAgICAgICAgICAgaWYgKGVyciA8IDAp IHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2Jj LCBsZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbTJfc2Vj dGlvbl9tZXNzYWdlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpCit7Cisg ICAgaW50ICAgICAgZXJyOworICAgIHVpbnQxNl90IGxlbmd0aDsKKworICAgIGlmIChieXRlc3Ry ZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgKDE2ICsgOCArIDE2KSAvIDgpCisgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUo Z2JjKSAhPSBNMl9TRUNUSU9OX01FU1NBR0UpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgIC8vIHNraXA6IHZlcnNpb24KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMs IDEpOworICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworCisgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdi YzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7 CisgICAgICAgIGVyciA9IHBhcnNlX3RhYmxlKGN0eCwgJm5nYmMpOworICAgIH0KKyAgICBieXRl c3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisKKyAgICByZXR1cm4gZXJyOworfQorCitzdGF0 aWMgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRl Q29udGV4dCAqZ2JjKQoreworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgNCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgc3dpdGNoIChi eXRlc3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpIHsKKyAgICBjYXNlIFBBX01FU1NBR0VfSUQ6Cisg ICAgICAgIHJldHVybiBwYXJzZV9wYV9tZXNzYWdlKGN0eCwgZ2JjKTsKKyAgICBjYXNlIE0yX1NF Q1RJT05fTUVTU0FHRToKKyAgICAgICAgcmV0dXJuIHBhcnNlX20yX3NlY3Rpb25fbWVzc2FnZShj dHgsIGdiYyk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitlbnVtIEZyYWdtZW50YXRpb25J bmRpY2F0b3IgeworICAgIE5PVF9GUkFHTUVOVEVEICA9IDBiMDAsCisgICAgRklSU1RfRlJBR01F TlQgID0gMGIwMSwKKyAgICBNSURETEVfRlJBR01FTlQgPSAwYjEwLAorICAgIExBU1RfRlJBR01F TlQgICA9IDBiMTEsCit9OworCitzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgeworICAgIHVpbnQx Nl90ICAgICAgICAgICAgICAgICBwaWQ7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpu ZXh0OworCisgICAgdWludDhfdCAqZGF0YTsKKyAgICBzaXplX3QgIHNpemUsIGNhcDsKKworICAg IHVpbnQzMl90IGxhc3Rfc2VxOworCisgICAgZW51bSB7CisgICAgICAgIElOSVQgPSAwLAorICAg ICAgICBOT1RfU1RBUlRFRCwKKyAgICAgICAgSU5fRlJBR01FTlQsCisgICAgICAgIFNLSVAsCisg ICAgfSBzdGF0ZTsKK307CisKK3N0YXRpYyBpbnQKK2FwcGVuZF9kYXRhKHN0cnVjdCBGcmFnbWVu dEFzc2VtYmxlciAqY3R4LCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBzaXplKQorewor ICAgIGlmIChjdHgtPnNpemUgKyBzaXplID4gVUlOVDMyX01BWCkgcmV0dXJuIEFWRVJST1IoRU9W RVJGTE9XKTsKKyAgICBpZiAoY3R4LT5jYXAgPCBjdHgtPnNpemUgKyBzaXplKSB7CisgICAgICAg IHZvaWQgICAqbmV3X2RhdGE7CisgICAgICAgIHNpemVfdCBuZXdfY2FwID0gY3R4LT5jYXAgPT0g MCA/IDEwMjQgOiBjdHgtPmNhcCAqIDI7CisgICAgICAgIHdoaWxlIChuZXdfY2FwIDwgY3R4LT5z aXplICsgc2l6ZSkgbmV3X2NhcCAqPSAyOworCisgICAgICAgIG5ld19kYXRhID0gYXZfcmVhbGxv YyhjdHgtPmRhdGEsIG5ld19jYXApOworICAgICAgICBpZiAobmV3X2RhdGEgPT0gTlVMTCkgcmV0 dXJuIEFWRVJST1IoZXJybm8pOworICAgICAgICBjdHgtPmRhdGEgPSBuZXdfZGF0YTsKKyAgICAg ICAgY3R4LT5jYXAgID0gbmV3X2NhcDsKKyAgICB9CisgICAgbWVtY3B5KGN0eC0+ZGF0YSArIGN0 eC0+c2l6ZSwgZGF0YSwgc2l6ZSk7CisgICAgY3R4LT5zaXplICs9IHNpemU7CisgICAgcmV0dXJu IDA7Cit9CisKK3N0YXRpYyBpbnQKK2NoZWNrX3N0YXRlKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVj dCBGcmFnbWVudEFzc2VtYmxlciAqYXNzLCB1aW50MzJfdCBzZXFfbnVtKQoreworICAgIGlmIChh c3MtPnN0YXRlID09IElOSVQpIHsKKyAgICAgICAgYXNzLT5zdGF0ZSA9IFNLSVA7CisgICAgfSBl bHNlIGlmIChzZXFfbnVtICE9IGFzcy0+bGFzdF9zZXEgKyAxKSB7CisgICAgICAgIGlmIChhc3Mt PnNpemUgIT0gMCkgeworICAgICAgICAgICAgYXZfbG9nKGN0eC0+cywgQVZfTE9HX1dBUk5JTkcs CisgICAgICAgICAgICAgICAgICAgIlBhY2tldCBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAx ICE9ICV1LCBkcm9wICV6dSBieXRlc1xuIiwKKyAgICAgICAgICAgICAgICAgICBhc3MtPmxhc3Rf c2VxLCBzZXFfbnVtLCBhc3MtPnNpemUpOworICAgICAgICAgICAgYXNzLT5zaXplID0gMDsKKyAg ICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMsIEFWX0xPR19XQVJOSU5H LAorICAgICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsg MSAhPSAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBhc3MtPmxhc3Rfc2VxLCBzZXFfbnVtKTsK KyAgICAgICAgfQorICAgICAgICBhc3MtPnN0YXRlID0gU0tJUDsKKyAgICB9CisgICAgYXNzLT5s YXN0X3NlcSA9IHNlcV9udW07CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgYXNzZW1i bGVfZnJhZ21lbnQoCisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpjdHgsIHVpbnQzMl90 IHNlcV9udW0sCisgICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwKKyAg ICBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJfdCBzaXplLAorICAgIGludCAoKnBhcnNlciko TU1UUENvbnRleHQgKiwgR2V0Qnl0ZUNvbnRleHQgKiksCisgICAgTU1UUENvbnRleHQgKm9wYXF1 ZSkKK3sKKyAgICBHZXRCeXRlQ29udGV4dCBnYmM7CisgICAgaW50ICAgICAgICAgICAgZXJyOwor CisgICAgc3dpdGNoIChpbmRpY2F0b3IpIHsKKyAgICBjYXNlIE5PVF9GUkFHTUVOVEVEOgorICAg ICAgICBpZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJ RERBVEE7CisgICAgICAgIGN0eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgYnl0ZXN0 cmVhbTJfaW5pdCgmZ2JjLCBkYXRhLCBzaXplKTsKKyAgICAgICAgcmV0dXJuIHBhcnNlcihvcGFx dWUsICZnYmMpOworICAgIGNhc2UgRklSU1RfRlJBR01FTlQ6CisgICAgICAgIGlmIChjdHgtPnN0 YXRlID09IElOX0ZSQUdNRU5UKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg Y3R4LT5zdGF0ZSA9IElOX0ZSQUdNRU5UOworICAgICAgICByZXR1cm4gYXBwZW5kX2RhdGEoY3R4 LCBkYXRhLCBzaXplKTsKKyAgICBjYXNlIE1JRERMRV9GUkFHTUVOVDoKKyAgICAgICAgaWYgKGN0 eC0+c3RhdGUgPT0gU0tJUCkgeworICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9H X1ZFUkJPU0UsICJEcm9wIHBhY2tldCAldVxuIiwgc2VxX251bSk7CisgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVOVCkg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIHJldHVybiBhcHBlbmRfZGF0YShj dHgsIGRhdGEsIHNpemUpOworICAgIGNhc2UgTEFTVF9GUkFHTUVOVDoKKyAgICAgICAgaWYgKGN0 eC0+c3RhdGUgPT0gU0tJUCkgeworICAgICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9H X1ZFUkJPU0UsICJEcm9wIHBhY2tldCAldVxuIiwgc2VxX251bSk7CisgICAgICAgICAgICByZXR1 cm4gMDsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVOVCkg cmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlmICgoZXJyID0gYXBwZW5kX2Rh dGEoY3R4LCBkYXRhLCBzaXplKSkgPCAwKSByZXR1cm4gZXJyOworCisgICAgICAgIGJ5dGVzdHJl YW0yX2luaXQoJmdiYywgY3R4LT5kYXRhLCBjdHgtPnNpemUpOworICAgICAgICBlcnIgPSBwYXJz ZXIob3BhcXVlLCAmZ2JjKTsKKworICAgICAgICBjdHgtPnNpemUgID0gMDsKKyAgICAgICAgY3R4 LT5zdGF0ZSA9IE5PVF9TVEFSVEVEOworICAgICAgICByZXR1cm4gZXJyOworICAgIGRlZmF1bHQ6 CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIH0KK30KKworc3RhdGlj IHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqCitmaW5kX29yX2FsbG9jYXRlX2Fzc2VtYmxlcihN TVRQQ29udGV4dCAqY3R4LCB1aW50MTZfdCBwaWQpCit7CisgICAgc3RydWN0IEZyYWdtZW50QXNz ZW1ibGVyICphc3M7CisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7 IGFzcyA9IGFzcy0+bmV4dCkKKyAgICAgICAgaWYgKGFzcy0+cGlkID09IHBpZCkKKyAgICAgICAg ICAgIHJldHVybiBhc3M7CisKKyAgICBhc3MgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIpKTsKKyAgICBpZiAoYXNzID09IE5VTEwpIHJldHVybiBOVUxMOworICAg IGFzcy0+cGlkICAgICAgICAgICAgICA9IHBpZDsKKyAgICBhc3MtPm5leHQgICAgICAgICAgICAg PSBjdHgtPmFzc2VtYmxlcjsKKyAgICByZXR1cm4gY3R4LT5hc3NlbWJsZXIgPSBhc3M7Cit9CisK K3N0YXRpYyBpbnQgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlcygKKyAgICBNTVRQQ29udGV4dCAq Y3R4LCB1aW50MzJfdCBzZXFfbnVtLCBHZXRCeXRlQ29udGV4dCAqZ2JjKQoreworICAgIGludCAg ICAgICAgICAgICAgICAgICAgICAgICBlcnI7CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAg ICAgIGJ5dGU7CisgICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGZyYWdtZW50YXRpb25f aW5kaWNhdG9yOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhfZXh0ZW5z aW9uX2ZsYWc7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX2Zs YWc7CisKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciA9IGZpbmRfb3Jf YWxsb2NhdGVfYXNzZW1ibGVyKAorICAgICAgICBjdHgsIGN0eC0+Y3VycmVudF9waWQpOworICAg IGlmIChhc3NlbWJsZXIgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgaWYg KGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPCAoMiArIDQgKyAxICsgMSArIDgpIC8g OCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgYnl0ZSAgICAgICAg ICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoZ2JjKTsKKyAgICBmcmFnbWVudGF0 aW9uX2luZGljYXRvciA9IGJ5dGUgPj4gNjsKKyAgICBsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcgICA9 IChieXRlID4+IDEpICYgMTsKKyAgICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9IGJ5dGUgJiAx OworCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKworICAgIGlmICgoZXJyID0gY2hl Y2tfc3RhdGUoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0pKSA8IDApCisgICAgICAgIHJldHVybiBl cnI7CisKKyAgICBpZiAoIWFnZ3JlZ2F0aW9uX2ZsYWcpCisgICAgICAgIHJldHVybiBhc3NlbWJs ZV9mcmFnbWVudCgKKyAgICAgICAgICAgIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlv bl9pbmRpY2F0b3IsCisgICAgICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgICAgIHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZSwgY3R4 KTsKKworICAgIGlmIChmcmFnbWVudGF0aW9uX2luZGljYXRvciAhPSBOT1RfRlJBR01FTlRFRCkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7IC8vIGNhbm5vdCBiZSBib3RoIGZy YWdtZW50ZWQgYW5kIGFnZ3JlZ2F0ZWQKKworICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpID4gMCkgeworICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICAgICAg aWYgKGxlbmd0aF9leHRlbnNpb25fZmxhZykKKyAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJl YW0yX2dldF9iZTMyKGdiYyk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGxlbmd0aCA9IGJ5 dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7CisKKyAgICAgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i eXRlc19sZWZ0KGdiYykgPCBsZW5ndGgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKyAgICAgICAgaWYgKChlcnIgPSBhc3NlbWJsZV9mcmFnbWVudCgKKyAgICAgICAg ICAgIGFzc2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdNRU5URUQsCisgICAgICAgICAgICBnYmMt PmJ1ZmZlciwgbGVuZ3RoLCBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UsIGN0eCkpIDwgMCkKKyAg ICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgbGVu Z3RoKTsKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBmaWxsX3B0c19k dHMoTU1UUENvbnRleHQgKmN0eCwgc3RydWN0IFN0cmVhbXMgKnMpCit7CisgICAgc3RydWN0IE1Q VVRpbWVzdGFtcERlc2NyaXB0b3IgICAgICAgICAqZGVzYyAgICAgPSBOVUxMOworICAgIHN0cnVj dCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IgKmV4dF9kZXNjID0gTlVMTDsKKworICAg IGludDY0X3QgcHRpbWU7CisgICAgc2l6ZV90ICBpLCBqOworCisgICAgZm9yIChpID0gMDsgaSA8 IHMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkgeworICAgICAgICBpZiAocy0+dGlt ZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSA9PQorICAgICAgICAgICAgcy0+bGFzdF9zZXF1 ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgIGRlc2MgPSBzLT50aW1lc3RhbXBfZGVzY3JpcHRv ciArIGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo aSA9IDA7IGkgPCBzLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKSB7CisgICAg ICAgIGlmIChzLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxX251bSA9PQorICAgICAg ICAgICAgcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgIGV4dF9kZXNjID0g cy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgIGJyZWFrOworICAg ICAgICB9CisgICAgfQorCisgICAgaWYgKGRlc2MgPT0gTlVMTCB8fCBleHRfZGVzYyA9PSBOVUxM KSByZXR1cm4gRkZFUlJPUl9SRURPOworICAgIHB0aW1lID0gYXZfcmVzY2FsZShkZXNjLT5wcmVz ZW50YXRpb25fdGltZSwgcy0+c3RyZWFtLT50aW1lX2Jhc2UuZGVuLAorICAgICAgICAgICAgICAg ICAgICAgICAxMDAwMDAwbGwgKiBzLT5zdHJlYW0tPnRpbWVfYmFzZS5udW0pOworCisgICAgaWYg KHMtPmF1X2NvdW50ID49IGV4dF9kZXNjLT5udW1fb2ZfYXUpCisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworCisgICAgY3R4LT5wa3QtPmR0cyA9IHB0aW1lIC0gZXh0X2Rlc2Mt PmRlY29kaW5nX3RpbWVfb2Zmc2V0OworCisgICAgZm9yIChqID0gMDsgaiA8IHMtPmF1X2NvdW50 OyArK2opCisgICAgICAgIGN0eC0+cGt0LT5kdHMgKz0gZXh0X2Rlc2MtPmF1W2pdLnB0c19vZmZz ZXQ7CisKKyAgICBjdHgtPnBrdC0+cHRzID0gY3R4LT5wa3QtPmR0cyArIGV4dF9kZXNjLT5hdVtz LT5hdV9jb3VudF0uZHRzX3B0c19vZmZzZXQ7CisKKyAgICArK3MtPmF1X2NvdW50OworICAgIHJl dHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KE1NVFBDb250 ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICB1aW50OF90ICBkYXRhX3R5cGUs IHN1YnNhbXBsZV9udW1iZXIsIGxhc3Rfc3Vic2FtcGxlX251bWJlciwgYnl0ZTsKKyAgICB1aW50 MzJfdCBkYXRhX3NpemU7CisgICAgc2l6ZV90ICAgaTsKKyAgICBpbnQgICAgICBlcnI7CisgICAg Ym9vbCAgICAgbGVuZ3RoX2V4dF9mbGFnLCBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWc7CisKKyAg ICBhdl9hc3NlcnQwKGN0eC0+cGt0ICE9IE5VTEwpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dl dF9ieXRlc19sZWZ0KGdiYykgPCAoOCArIDggKyA4ICsgOCArIDQgKyAxICsgMSArIDIpIC8gOCkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICAvKgorICAgICAqIHNr aXA6CisgICAgICogLSBzdWJ0aXRsZV90YWcKKyAgICAgKiAtIHN1YnRpdGxlX3NlcXVlbmNlX251 bWJlcgorICAgICAqLworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDggKyA4KSAvIDgpOwor CisgICAgc3Vic2FtcGxlX251bWJlciAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 CisgICAgbGFzdF9zdWJzYW1wbGVfbnVtYmVyID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7 CisKKyAgICBieXRlICAgICAgICAgICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUo Z2JjKTsKKyAgICBkYXRhX3R5cGUgICAgICAgICAgICAgICAgPSBieXRlID4+IDQ7CisgICAgbGVu Z3RoX2V4dF9mbGFnICAgICAgICAgID0gKGJ5dGUgPj4gMykgJiAxOworICAgIHN1YnNhbXBsZV9p bmZvX2xpc3RfZmxhZyA9IChieXRlID4+IDIpICYgMTsKKworICAgIGlmIChkYXRhX3R5cGUgIT0g MGIwMDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisKKyAgICBpZiAobGVuZ3RoX2V4 dF9mbGFnKQorICAgICAgICBkYXRhX3NpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOwor ICAgIGVsc2UKKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsK KworICAgIGlmIChzdWJzYW1wbGVfbnVtYmVyID09IDAgJiYgbGFzdF9zdWJzYW1wbGVfbnVtYmVy ID4gMCAmJgorICAgICAgICBzdWJzYW1wbGVfaW5mb19saXN0X2ZsYWcpIHsKKyAgICAgICAgZm9y IChpID0gMDsgaSA8IGxhc3Rfc3Vic2FtcGxlX251bWJlcjsgKytpKSB7CisgICAgICAgICAgICAv LyBza2lwOiBzdWJzYW1wbGVfaV9kYXRhX3R5cGUKKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3Nr aXAoZ2JjLCAoNCArIDQpIC8gOCk7CisgICAgICAgICAgICAvLyBza2lwOiBzdWJzYW1wbGVfaV9k YXRhX3NpemUKKyAgICAgICAgICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcpIHsKKyAgICAgICAgICAg ICAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIgLyA4KTsKKyAgICAgICAgICAgIH0gZWxzZSB7 CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsIDE2IC8gOCk7CisgICAgICAg ICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVz X2xlZnQoZ2JjKSA8IGRhdGFfc2l6ZSkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgaWYgKChlcnIgPSBhdl9uZXdfcGFja2V0KGN0eC0+cGt0LCBkYXRhX3NpemUpKSA8 IDApIHJldHVybiBlcnI7CisgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBjdHgtPnBr dC0+ZGF0YSwgZGF0YV9zaXplKTsKKworICAgIGN0eC0+cGt0LT5zdHJlYW1faW5kZXggPSBzdC0+ c3RyZWFtLT5pbmRleDsKKyAgICBjdHgtPnBrdC0+ZmxhZ3MgICAgICAgID0gc3QtPmZsYWdzOwor ICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+b2Zmc2V0OworICAgIGN0eC0+cGt0ICAg ICAgICAgICAgICAgPSBOVUxMOworCisgICAgc3QtPmZsYWdzICA9IDA7CisgICAgc3QtPm9mZnNl dCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGVtaXRfcGFja2V0KE1NVFBD b250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1zICpzdCwgQVZCdWZmZXJSZWYgKmJ1ZikKK3sKKyAg ICBpbnQgZXJyOworICAgIGF2X2Fzc2VydDAoY3R4LT5wa3QgIT0gTlVMTCk7CisgICAgYXZfcGFj a2V0X3VucmVmKGN0eC0+cGt0KTsKKyAgICBpZiAoKGVyciA9IGZpbGxfcHRzX2R0cyhjdHgsIHN0 KSkgPCAwKSB7CisgICAgICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKKyAgICAgICAgcmV0dXJu IGVycjsKKyAgICB9CisgICAgY3R4LT5wa3QtPmJ1ZiAgICAgICAgICA9IGJ1ZjsKKyAgICBjdHgt PnBrdC0+ZGF0YSAgICAgICAgID0gYnVmLT5kYXRhOworICAgIGN0eC0+cGt0LT5zaXplICAgICAg ICAgPSBidWYtPnNpemUgLSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOworICAgIGN0eC0+ cGt0LT5zdHJlYW1faW5kZXggPSBzdC0+c3RyZWFtLT5pbmRleDsKKyAgICBjdHgtPnBrdC0+Zmxh Z3MgICAgICAgID0gc3QtPmZsYWdzOworICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+ b2Zmc2V0OworICAgIGN0eC0+cGt0ICAgICAgICAgICAgICAgPSBOVUxMOworCisgICAgc3QtPmZs YWdzICA9IDA7CisgICAgc3QtPm9mZnNldCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0 aWMgaW50IGNvbnN1bWVfbWZ1KE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMp Cit7CisgICAgaW50ICAgICAgICAgICAgZXJyOworICAgIEFWQnVmZmVyUmVmICAgICpidWZfcmVm OworICAgIHVuc2lnbmVkIGludCAgIHNpemU7CisgICAgdWludDhfdCAgICAgICAgYnl0ZTsKKyAg ICBzaXplX3QgICAgICAgICBvbGRfc2l6ZTsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3QgPSBmaW5k X2N1cnJlbnRfc3RyZWFtKGN0eCk7CisgICAgYXZfYXNzZXJ0MChzdCAhPSBOVUxMKTsKKworICAg IHN3aXRjaCAoc3QtPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkKSB7CisgICAgY2FzZSBBVl9D T0RFQ19JRF9IRVZDOgorICAgICAgICBzaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzIoZ2JjKTsK KyAgICAgICAgaWYgKHNpemUgIT0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSkgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlmIChzaXplIDwgMSkgLy8gd2UgZXhw ZWN0IHRvIGV4dHJhY3QgTkFMIHVuaXQgaGVhZGVyIHR5cGUgYmVsb3cKKyAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBieXRlID0gYnl0ZXN0cmVhbTJfcGVl a19ieXRldShnYmMpOworICAgICAgICBpZiAoKGJ5dGUgPj4gNykgIT0gMCkgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7IC8vIGZvcmJpZGRlbl96ZXJvX2JpdAorCisgICAgICAgIG9sZF9zaXpl ID0gc3QtPnBlbmRpbmdfYnVmZmVyID09IE5VTEwgPyAwIDoKKyAgICAgICAgICAgICAgICAgICAo c3QtPnBlbmRpbmdfYnVmZmVyLT5zaXplIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7 CisgICAgICAgIGlmICgoZXJyID0gYXZfYnVmZmVyX3JlYWxsb2MoCisgICAgICAgICAgICAmc3Qt PnBlbmRpbmdfYnVmZmVyLAorICAgICAgICAgICAgb2xkX3NpemUgKyBzaXplICsgNCArIEFWX0lO UFVUX0JVRkZFUl9QQURESU5HX1NJWkUpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOwor ICAgICAgICAvLyBmaXggc3RhcnQgY29kZSAoMDAgMDAgMDAgMDEpCisgICAgICAgIEFWX1dCMzIo c3QtPnBlbmRpbmdfYnVmZmVyLT5kYXRhICsgb2xkX3NpemUsIDEpOworICAgICAgICBieXRlc3Ry ZWFtMl9nZXRfYnVmZmVydSgKKyAgICAgICAgICAgIGdiYywgc3QtPnBlbmRpbmdfYnVmZmVyLT5k YXRhICsgb2xkX3NpemUgKyA0LCBzaXplKTsKKyAgICAgICAgaWYgKCgoYnl0ZSA+PiAxKSAmIDBi MTExMTExKSA8IDB4MjApIHsgLy8gYSBWQ0wgTkFMIHVuaXQKKyAgICAgICAgICAgIC8vIEJlY2F1 c2Ugd2UgY2FuJ3QgZW1pdCBhIHBhY2tldCB3aXRob3V0IGEgdmFsaWQgUFRTLCB3ZSBuZWVkIHRv CisgICAgICAgICAgICAvLyBhZ2dyZWdhdGUgdGhlIG5vbi1WQ0wgTkFMIHVuaXRzIHdpdGggVkNM IG9uZXMuIEFsdGhvdWdoIHdlIGRpZG4ndAorICAgICAgICAgICAgLy8gdGVjaG5pY2FsbHkgaWRl bnRpZnkgYW4gYWNjZXNzIHVuaXQgaGVyZSwgdGhpcyB3b3JrcyBmb3IgYWxsIHNhbXBsZXMKKyAg ICAgICAgICAgIC8vIHdlIGhhdmUuCisgICAgICAgICAgICBidWZfcmVmID0gc3QtPnBlbmRpbmdf YnVmZmVyOworICAgICAgICAgICAgc3QtPnBlbmRpbmdfYnVmZmVyID0gTlVMTDsKKworICAgICAg ICAgICAgbWVtc2V0KGJ1Zl9yZWYtPmRhdGEgKyBvbGRfc2l6ZSArIHNpemUgKyA0LCAwLAorICAg ICAgICAgICAgICAgICAgIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpOworICAgICAgICAg ICAgcmV0dXJuIGVtaXRfcGFja2V0KGN0eCwgc3QsIGJ1Zl9yZWYpOworICAgICAgICB9CisgICAg ICAgIHJldHVybiAwOworICAgIGNhc2UgQVZfQ09ERUNfSURfQUFDX0xBVE06CisgICAgICAgIHNp emUgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpOworICAgICAgICBpZiAoc2l6ZSA+ PiAxMykgcmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKKyAgICAgICAgaWYgKChidWZfcmVmID0g YXZfYnVmZmVyX2FsbG9jKAorICAgICAgICAgICAgc2l6ZSArIDMgKyBBVl9JTlBVVF9CVUZGRVJf UEFERElOR19TSVpFKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKEVOT01F TSk7CisgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMF0gPSAweDU2OworICAgICAgICBidWZfcmVmLT5k YXRhWzFdID0gMHhlMCB8IChzaXplID4+IDgpOworICAgICAgICBidWZfcmVmLT5kYXRhWzJdID0g c2l6ZSAmIDB4ZmY7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgYnVmX3Jl Zi0+ZGF0YSArIDMsIHNpemUpOworICAgICAgICBtZW1zZXQoYnVmX3JlZi0+ZGF0YSArIDMgKyBz aXplLCAwLCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAgICAgcmV0dXJuIGVt aXRfcGFja2V0KGN0eCwgc3QsIGJ1Zl9yZWYpOworICAgIGNhc2UgQVZfQ09ERUNfSURfVFRNTDoK KyAgICAgICAgcmV0dXJuIGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KGN0eCwgc3QsIGdiYyk7Cisg ICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIH0K K30KKworc3RhdGljIGludCBwYXJzZV9tZnVfdGltZWRfZGF0YSgKKyAgICBNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciwKKyAgICB1aW50MzJfdCBz ZXFfbnVtLCBlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgaW5kaWNhdG9yLAorICAgIEdldEJ5 dGVDb250ZXh0ICpnYmMpCit7CisgICAgYnl0ZXN0cmVhbTJfc2tpcChnYmMsICgzMiArIDMyICsg MzIgKyA4ICsgOCkgLyA4KTsKKyAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAg IGFzc2VtYmxlciwgc2VxX251bSwgaW5kaWNhdG9yLAorICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0 ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7 Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKAorICAgIE1NVFBDb250 ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAorICAgIHVpbnQz Ml90IHNlcV9udW0sIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCisgICAg R2V0Qnl0ZUNvbnRleHQgKmdiYykKK3sKKyAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIgLyA4 KTsKKyAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgIGFzc2VtYmxlciwgc2Vx X251bSwgaW5kaWNhdG9yLAorICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0ZXN0cmVhbTJfZ2V0X2J5 dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7Cit9CisKK3N0YXRpYyBp bnQgcGFyc2VfbXB1KE1NVFBDb250ZXh0ICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIEdldEJ5dGVD b250ZXh0ICpnYmMpCit7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKyAg ICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYnl0ZSwgZnJhZ21lbnRfdHlwZTsKKyAgICBi b29sICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRfZmxhZzsKKyAgICBlbnVtIEZyYWdtZW50 YXRpb25JbmRpY2F0b3IgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3I7CisgICAgYm9vbCAgICAgICAg ICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX2ZsYWc7CisgICAgdWludDE2X3QgICAgICAgICAg ICAgICAgICAgIGxlbmd0aDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAgICAgbXB1X3Nl cXVlbmNlX251bWJlcjsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgICAgKmFzc2VtYmxl cjsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgICAgKnN0cmVhbXM7CisKKyAgICBzdHJl YW1zID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOworICAgIGlmIChzdHJlYW1zID09IE5VTEwg fHwgc3RyZWFtcy0+c3RyZWFtLT5kaXNjYXJkID49IEFWRElTQ0FSRF9BTEwpCisgICAgICAgIHJl dHVybiAwOworCisgICAgYXNzZW1ibGVyID0gZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoY3R4 LCBjdHgtPmN1cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBB VkVSUk9SKGVycm5vKTsKKworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMp IDwgKDE2ICsgNCArIDEgKyAyICsgMSArIDggKyAzMikgLyA4KQorICAgICAgICByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKworICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShn YmMpOworICAgIGlmIChsZW5ndGggIT0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSkK KyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBieXRlICAgICAgICAg ICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworICAgIGZyYWdtZW50X3R5 cGUgICAgICAgICAgID0gYnl0ZSA+PiA0OworICAgIHRpbWVkX2ZsYWcgICAgICAgICAgICAgID0g KGJ5dGUgPj4gMykgJiAxOworICAgIGZyYWdtZW50YXRpb25faW5kaWNhdG9yID0gKGJ5dGUgPj4g MSkgJiAwYjExOworICAgIGFnZ3JlZ2F0aW9uX2ZsYWcgICAgICAgID0gYnl0ZSAmIDE7CisKKyAg ICAvLyBza2lwOiBmcmFnbWVudF9jb3VudGVyCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAx KTsKKworICAgIG1wdV9zZXF1ZW5jZV9udW1iZXIgPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoZ2Jj KTsKKworICAgIGlmIChhZ2dyZWdhdGlvbl9mbGFnICYmIGZyYWdtZW50YXRpb25faW5kaWNhdG9y ICE9IE5PVF9GUkFHTUVOVEVEKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsg Ly8gY2Fubm90IGJlIGJvdGggZnJhZ21lbnRlZCBhbmQgYWdncmVnYXRlZAorCisgICAgaWYgKGZy YWdtZW50X3R5cGUgIT0gMikKKyAgICAgICAgcmV0dXJuIDA7IC8vIG5vdCBNRlUKKworICAgIGlm IChhc3NlbWJsZXItPnN0YXRlID09IElOSVQgJiYgIWN0eC0+aXNfcmFwKQorICAgICAgICByZXR1 cm4gMDsgLy8gd2FpdCBmb3IgdGhlIGZpcnN0IFJBUAorCisgICAgaWYgKGFzc2VtYmxlci0+c3Rh dGUgPT0gSU5JVCkgeworICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IG1w dV9zZXF1ZW5jZV9udW1iZXI7CisgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyID09 IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyICsgMSkgeworICAgICAgICBzdHJlYW1zLT5s YXN0X3NlcXVlbmNlX251bWJlciA9IG1wdV9zZXF1ZW5jZV9udW1iZXI7CisgICAgICAgIHN0cmVh bXMtPmF1X2NvdW50ICAgICAgICAgICAgID0gMDsKKyAgICB9IGVsc2UgaWYgKG1wdV9zZXF1ZW5j ZV9udW1iZXIgIT0gc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgYXZf bG9nKHN0cmVhbXMtPnN0cmVhbSwgQVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgIk1QVSBz ZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAxICE9ICV1XG4iLAorICAgICAgICAgICAgICAgc3Ry ZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXF1ZW5jZV9udW1iZXIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICBpZiAoKGVyciA9IGNo ZWNrX3N0YXRlKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtKSkgPCAwKQorICAgICAgICByZXR1cm4g ZXJyOworCisgICAgaWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9yID09IE5PVF9GUkFHTUVOVEVE IHx8CisgICAgICAgIGZyYWdtZW50YXRpb25faW5kaWNhdG9yID09IEZJUlNUX0ZSQUdNRU5UKQor ICAgICAgICBzdHJlYW1zLT5vZmZzZXQgPSBjdHgtPnBrdC0+cG9zOworCisgICAgaWYgKGN0eC0+ aXNfcmFwKQorICAgICAgICBzdHJlYW1zLT5mbGFncyB8PSBBVl9QS1RfRkxBR19LRVk7CisKKyAg ICBpZiAodGltZWRfZmxhZykgeworICAgICAgICBpZiAoYWdncmVnYXRpb25fZmxhZykgeworICAg ICAgICAgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRlc19sZWZ0KGdiYykgPiAwKSB7Cisg ICAgICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKyAgICAg ICAgICAgICAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA8IGxlbmd0aCkK KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAg ICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAg ICAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgbGVu Z3RoKTsKKworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVfdGltZWRfZGF0YSgK KyAgICAgICAgICAgICAgICAgICAgICAgIGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJB R01FTlRFRCwgJm5nYmMpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgcmV0dXJu IGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tp cHUoZ2JjLCBsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgcmV0dXJuIHBhcnNlX21mdV90aW1lZF9kYXRhKAorICAgICAgICAgICAgICAgIGN0eCwg YXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9uX2luZGljYXRvciwgZ2JjKTsKKyAgICAg ICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChhZ2dyZWdhdGlvbl9mbGFnKSB7CisgICAg ICAgICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKSA+IDApIHsKKyAg ICAgICAgICAgICAgICBsZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYmUxNihnYmMpOworICAgICAg ICAgICAgICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpIDwgbGVuZ3RoKQor ICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg ICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAg ICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5n dGgpOworCisgICAgICAgICAgICAgICAgICAgIGVyciA9IHBhcnNlX21mdV9ub25fdGltZWRfZGF0 YSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1Rf RlJBR01FTlRFRCwgJm5nYmMpOworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgcmV0 dXJuIGVycjsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJf c2tpcHUoZ2JjLCBsZW5ndGgpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg ICAgICAgICAgcmV0dXJuIHBhcnNlX21mdV9ub25fdGltZWRfZGF0YSgKKyAgICAgICAgICAgICAg ICBjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IsIGdiYyk7 CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworTU1UUENvbnRleHQgKmZm X21tdHBfcGFyc2Vfb3BlbihBVlByb2dyYW0gKnByb2dyYW0pCit7CisgICAgTU1UUENvbnRleHQg KmN0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKE1NVFBDb250ZXh0KSk7CisgICAgaWYgKGN0eCA9PSBO VUxMKSByZXR1cm4gTlVMTDsKKyAgICBjdHgtPnByb2dyYW0gPSBwcm9ncmFtOworICAgIHJldHVy biBjdHg7Cit9CisKK2ludCBmZl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBB VkZvcm1hdENvbnRleHQgKnMsIEFWUGFja2V0ICpwa3QsCisgICAgICAgICAgICAgICAgICAgICAg ICAgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKQoreworICAgIGJvb2wgICAgIHBh Y2tldF9jb3VudGVyX2ZsYWc7CisgICAgYm9vbCAgICAgZXh0ZW5zaW9uX2hlYWRlcl9mbGFnOwor ICAgIHVpbnQ4X3QgIHBheWxvYWRfdHlwZTsKKyAgICB1aW50MzJfdCBwYWNrZXRfc2VxdWVuY2Vf bnVtYmVyOworICAgIHVpbnQ4X3QgIGJ5dGU7CisgICAgaW50ICAgICAgZXJyID0gMDsKKworICAg IEdldEJ5dGVDb250ZXh0IGdiYzsKKworICAgIGN0eC0+cyAgID0gczsKKyAgICBjdHgtPnBrdCA9 IHBrdDsKKworICAgIGJ5dGVzdHJlYW0yX2luaXQoJmdiYywgYnVmLCBzaXplKTsKKyAgICBpZiAo Ynl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJmdiYykgPAorICAgICAgICAoMiArIDEgKyAyICsg MSArIDEgKyAxICsgMiArIDYgKyAxNiArIDMyICsgMzIpIC8gOCkKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBieXRlICAgICAgICAgICAgICAgICAgPSBieXRlc3Ry ZWFtMl9nZXRfYnl0ZXUoJmdiYyk7CisgICAgcGFja2V0X2NvdW50ZXJfZmxhZyAgID0gKGJ5dGUg Pj4gNSkgJiAxOworICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZyA9IChieXRlID4+IDEpICYgMTsK KyAgICBjdHgtPmlzX3JhcCA9IGJ5dGUgJiAxOworCisgICAgYnl0ZSAgICAgICAgID0gYnl0ZXN0 cmVhbTJfZ2V0X2J5dGV1KCZnYmMpOworICAgIHBheWxvYWRfdHlwZSA9IGJ5dGUgJiAwYjExMTEx MTsKKworICAgIGN0eC0+Y3VycmVudF9waWQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJmdiYyk7 CisKKyAgICAvLyBza2lwOiBkaXN0cmlidXRlX3RpbWVzdGFtcAorICAgIGJ5dGVzdHJlYW0yX3Nr aXB1KCZnYmMsIDQpOworCisgICAgcGFja2V0X3NlcXVlbmNlX251bWJlciA9IGJ5dGVzdHJlYW0y X2dldF9iZTMydSgmZ2JjKTsKKworICAgIGlmIChwYWNrZXRfY291bnRlcl9mbGFnKQorICAgICAg ICBieXRlc3RyZWFtMl9za2lwKCZnYmMsIDQpOworCisgICAgaWYgKGV4dGVuc2lvbl9oZWFkZXJf ZmxhZykgeworICAgICAgICB1aW50MTZfdCBleHRlbnNpb25faGVhZGVyX2xlbmd0aDsKKyAgICAg ICAgLy8gc2tpcDogZXh0ZW5zaW9uX3R5cGUKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmZ2Jj LCAyKTsKKyAgICAgICAgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRf YmUxNigmZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmZ2JjLCBleHRlbnNpb25faGVh ZGVyX2xlbmd0aCk7CisgICAgfQorCisgICAgc3dpdGNoIChwYXlsb2FkX3R5cGUpIHsKKyAgICBj YXNlIDB4MDA6IC8vIE1QVQorICAgICAgICBpZiAocGt0ICE9IE5VTEwpCisgICAgICAgICAgICBl cnIgPSBwYXJzZV9tcHUoY3R4LCBwYWNrZXRfc2VxdWVuY2VfbnVtYmVyLCAmZ2JjKTsKKyAgICAg ICAgYnJlYWs7CisgICAgY2FzZSAweDAyOiAvLyBzaWduYWxsaW5nIG1lc3NhZ2VzCisgICAgICAg IGVyciA9IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoY3R4LCBwYWNrZXRfc2VxdWVuY2VfbnVt YmVyLCAmZ2JjKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGlmIChlcnIgPCAwKSByZXR1 cm4gZXJyOworICAgIHJldHVybiBjdHgtPnBrdCA9PSBOVUxMID8gMCA6IEZGRVJST1JfUkVETzsK K30KKwordm9pZCBmZl9tbXRwX3Jlc2V0X3N0YXRlKE1NVFBDb250ZXh0ICpjdHgpCit7CisgICAg c3RydWN0IFN0cmVhbXMgICAgICAgICAgICpzdHJlYW1zOworICAgIHN0cnVjdCBGcmFnbWVudEFz c2VtYmxlciAqYXNzZW1ibGVyOworCisgICAgZm9yIChhc3NlbWJsZXIgPSBjdHgtPmFzc2VtYmxl cjsKKyAgICAgICAgIGFzc2VtYmxlciAhPSBOVUxMOyBhc3NlbWJsZXIgPSBhc3NlbWJsZXItPm5l eHQpIHsKKyAgICAgICAgYXNzZW1ibGVyLT5zdGF0ZSA9IElOSVQ7CisgICAgICAgIGFzc2VtYmxl ci0+c2l6ZSAgPSAwOworICAgIH0KKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0 cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpIHsKKyAgICAgICAgc3RyZWFt cy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIgPSAwOworICAgICAgICBzdHJlYW1zLT5hdV9jb3VudCAg ICAgICAgICAgICA9IDA7CisgICAgICAgIHN0cmVhbXMtPmZsYWdzICAgICAgICAgICAgICAgID0g MDsKKyAgICAgICAgc3RyZWFtcy0+b2Zmc2V0ICAgICAgICAgICAgICAgPSAtMTsKKyAgICAgICAg YXZfYnVmZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7CisgICAgfQorfQorCit2 b2lkIGZmX21tdHBfcGFyc2VfY2xvc2UoTU1UUENvbnRleHQgKmN0eCkKK3sKKyAgICBzdHJ1Y3Qg RnJhZ21lbnRBc3NlbWJsZXIgKmFzczsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgKnN0 cmVhbXM7CisKKyAgICBmb3IgKGFzcyA9IGN0eC0+YXNzZW1ibGVyOyBhc3MgIT0gTlVMTDspIHsK KyAgICAgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpuZXh0ID0gYXNzLT5uZXh0OworICAg ICAgICBhdl9mcmVlKGFzcy0+ZGF0YSk7CisgICAgICAgIGF2X2ZyZWUoYXNzKTsKKyAgICAgICAg YXNzID0gbmV4dDsKKyAgICB9CisKKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0 cmVhbXMgIT0gTlVMTDspIHsKKyAgICAgICAgc3RydWN0IFN0cmVhbXMgKm5leHQgPSBzdHJlYW1z LT5uZXh0OworICAgICAgICBhdl9mcmVlKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yKTsK KyAgICAgICAgYXZfZnJlZShzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IpOworICAg ICAgICBhdl9idWZmZXJfdW5yZWYoJnN0cmVhbXMtPnBlbmRpbmdfYnVmZmVyKTsKKyAgICAgICAg YXZfZnJlZShzdHJlYW1zKTsKKyAgICAgICAgc3RyZWFtcyA9IG5leHQ7CisgICAgfQorCisgICAg YXZfZnJlZShjdHgpOworfQpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5oIGIvbGliYXZm b3JtYXQvbW10cC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjMwMGE2 YTFhZWEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXRwLmgKQEAgLTAsMCArMSw2 NCBAQAorLyoKKyAqIE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIs IGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1 cGVyRmFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZt cGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp YworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4g dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJS QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFC SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor ICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg KiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy YWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYg QVZGT1JNQVRfTU1UUF9ICisjZGVmaW5lIEFWRk9STUFUX01NVFBfSAorCisjaW5jbHVkZSAiYXZm b3JtYXQuaCIKKwordHlwZWRlZiBzdHJ1Y3QgTU1UUENvbnRleHQgTU1UUENvbnRleHQ7CisKKy8q KgorICogT3BlbiBhbiBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKiBAcGFyYW0gcHJv Z3JhbSBUaGUgQVZQcm9ncmFtIHRoaXMgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGguCisgKiBA cmV0dXJuIEEgbmV3IE1NVFBDb250ZXh0LCBvciBOVUxMIG9uIGFsbG9jYXRpb24gZXJyb3IuCisg Ki8KK01NVFBDb250ZXh0ICpmZl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9ncmFtKTsK KworLyoqCisgKiBQYXJzZSBhbiBNTVQgcHJvdG9jb2wgcGFja2V0LgorICoKKyAqIEBwYXJhbSBj dHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqIEBwYXJhbSBzIFRoZSBBVkZv cm1hdENvbnRleHQuCisgKiBAcGFyYW0gcGt0IFRoZSBBVlBhY2tldCB0byBmaWxsLgorICogQHBh cmFtIGJ1ZiBUaGUgcGFja2V0IGRhdGEuCisgKiBAcGFyYW0gc2l6ZSBUaGUgc2l6ZSBvZiB0aGUg cGFja2V0IGRhdGEuCisgKiBAcmV0dXJuID49IDAgaWYgYSBuZXcgQVZQYWNrZXQgaXMgZW1pdHRl ZCwKKyAqICAgICAgICAgRkZFUlJPUl9SRURPIGlmIHRoZSBuZXh0IHBhY2tldCBpcyBuZWVkZWQs CisgKiAgICAgICAgIG9yIGFub3RoZXIgbmVnYXRpdmUgdmFsdWUgb24gZXJyb3IuCisgKi8KK2lu dCBmZl9tbXRwX3BhcnNlX3BhY2tldChNTVRQQ29udGV4dCAqY3R4LCBBVkZvcm1hdENvbnRleHQg KnMsIEFWUGFja2V0ICpwa3QsCisgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdWludDhf dCAqYnVmLCB1aW50MTZfdCBzaXplKTsKKworLyoqCisgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhl IE1NVFAgcGFyc2VyLiBVc2VmdWwgd2hlbiBzZWVraW5nLgorICoKKyAqIEBwYXJhbSBjdHggVGhl IE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBmZl9tbXRwX3Jlc2V0X3N0 YXRlKE1NVFBDb250ZXh0ICpjdHgpOworCisvKioKKyAqIENsb3NlIGFuIE1NVCBwcm90b2NvbCBw YXJzZXIgY29udGV4dCwgZnJlZXMgYWxsIGFzc29jaWF0ZWQgcmVzb3VyY2VzLgorICoKKyAqIEBw YXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBmZl9t bXRwX3BhcnNlX2Nsb3NlKE1NVFBDb250ZXh0ICpjdHgpOworCisjZW5kaWYgLyogQVZGT1JNQVRf TU1UUF9IICovCmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tbXR0bHYuYyBiL2xpYmF2Zm9ybWF0 L21tdHRsdi5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjYyMjg0MGU0 YTEKLS0tIC9kZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXR0bHYuYwpAQCAtMCwwICsxLDMz NSBAQAorLyoKKyAqIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRzIChNTVQvVExWKSBkZW11 eGVyLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4KKyAqIENvcHlyaWdodCAoYykgMjAyMyBT dXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZG bXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs aWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp b247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGlu IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FS UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRB QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK KyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor ICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l cmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0 byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNs dWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwu aCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZmb3Jt YXQuaCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5jbHVkZSAiZGVtdXguaCIKKyNp bmNsdWRlICJpbnRlcm5hbC5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKworI2RlZmluZSBIRUFERVJf QllURSAwYjAxMTExMTExCisKK2VudW0geworICAgIFVOREVGSU5FRF9QQUNLRVQgICAgICAgICAg ICA9IDB4MDAsCisgICAgSVBWNF9QQUNLRVQgICAgICAgICAgICAgICAgID0gMHgwMSwKKyAgICBJ UFY2X1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweDAyLAorICAgIEhFQURFUl9DT01QUkVTU0VE X0lQX1BBQ0tFVCA9IDB4MDMsCisgICAgVFJBTlNNSVNTSU9OX0NPTlRST0xfUEFDS0VUID0gMHhG RSwKKyAgICBOVUxMX1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweEZGLAorfTsKKworZW51bSB7 CisgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjRfQU5EX1BBUlRJQUxfVURQ X0hFQURFUiA9IDB4MjAsCisgICAgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUiAg ICAgICAgICAgICAgICAgICAgICAgICA9IDB4MjEsCisgICAgQ09OVEVYVF9JREVOVElGSUNBVElP Tl9QQVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUiA9IDB4NjAsCisgICAgQ09OVEVY VF9JREVOVElGSUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUiAgICAgICAgICAgICAgICA9IDB4 NjEsCit9OworCitzdGF0aWMgaW50IG1tdHRsdl9wcm9iZShjb25zdCBBVlByb2JlRGF0YSAqcCkK K3sKKyAgICBzaXplX3QgICBpLCBqOworICAgIHVpbnQ4X3QgIHBhY2tldF90eXBlOworICAgIHVp bnQxNl90IGRhdGFfbGVuZ3RoOworCisgICAgaW50IHByb2Nlc3NlZCAgPSAwOworICAgIGludCBy ZWNvZ25pemVkID0gMDsKKworICAgIGZvciAoaSA9IDA7IGkgKyA0IDwgcC0+YnVmX3NpemUgJiYg cHJvY2Vzc2VkIDwgMTAwOyArK3Byb2Nlc3NlZCkgeworICAgICAgICBpZiAocC0+YnVmW2ldICE9 IEhFQURFUl9CWVRFKSByZXR1cm4gMDsKKworICAgICAgICBwYWNrZXRfdHlwZSA9IHAtPmJ1Zltp ICsgMV07CisgICAgICAgIGRhdGFfbGVuZ3RoID0gQVZfUkIxNihwLT5idWYgKyBpICsgMik7Cisg ICAgICAgIGkgKz0gNDsKKworICAgICAgICBpZiAocGFja2V0X3R5cGUgPT0gSEVBREVSX0NPTVBS RVNTRURfSVBfUEFDS0VUKSB7CisgICAgICAgICAgICBpZiAoZGF0YV9sZW5ndGggPCAzIHx8IGkg KyAyID49IHAtPmJ1Zl9zaXplKSBnb3RvIHNraXA7CisgICAgICAgICAgICBzd2l0Y2ggKHAtPmJ1 ZltpICsgMl0pIHsKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJU SUFMX0lQVjRfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVY VF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUjoKKyAgICAgICAgICAgIGNhc2UgQ09OVEVYVF9J REVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAg ICAgICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoK KyAgICAgICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0g ZWxzZSBpZiAocGFja2V0X3R5cGUgPT0gTlVMTF9QQUNLRVQpIHsKKyAgICAgICAgICAgIC8vIG51 bGwgcGFja2V0cyBzaG91bGQgY29udGFpbiBhbGwgMHhGRnMKKyAgICAgICAgICAgIGZvciAoaiA9 IGk7IGogPCBpICsgZGF0YV9sZW5ndGggJiYgaiA8IHAtPmJ1Zl9zaXplOyArK2opIHsKKyAgICAg ICAgICAgICAgICBpZiAocC0+YnVmW2pdICE9IDB4RkYpIGdvdG8gc2tpcDsKKyAgICAgICAgICAg IH0KKyAgICAgICAgICAgICsrcmVjb2duaXplZDsKKyAgICAgICAgfQorCisgICAgICAgIHNraXA6 CisgICAgICAgIGkgKz0gZGF0YV9sZW5ndGg7CisgICAgfQorCisgICAgcmV0dXJuIHJlY29nbml6 ZWQgKiBBVlBST0JFX1NDT1JFX01BWCAvIEZGTUFYKHByb2Nlc3NlZCwgMTApOworfQorCitzdHJ1 Y3QgTU1UVExWQ29udGV4dCB7CisgICAgc3RydWN0IFByb2dyYW0geworICAgICAgICB1aW50MzJf dCAgICAgICBjaWQ7CisgICAgICAgIE1NVFBDb250ZXh0ICAgICptbXRwOworICAgICAgICBzdHJ1 Y3QgUHJvZ3JhbSAqbmV4dDsKKyAgICB9ICpwcm9ncmFtczsKKworICAgIGludDY0X3QgbGFzdF9w b3M7CisgICAgc2l6ZV90ICByZXN5bmNfc2l6ZTsKKworICAgIHNpemVfdCAgY2FwOworICAgIHVp bnQ4X3QgKmJ1ZjsKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3JlYWRfY29tcHJlc3NlZF9pcF9w YWNrZXQoCisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpz LCBBVlBhY2tldCAqcGt0LAorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDE2X3Qgc2l6ZSkK K3sKKyAgICAvLyBwYXJ0aWFsIHVkcCBoZWFkZXIgYXJlIHVkcCBoZWFkZXIgd2l0aG91dCBkYXRh IGxlbmd0aCAoMTYgYml0cykgYW5kIGNoZWNrc3VtICgxNiBiaXRzKQorI2RlZmluZSBQQVJUSUFM X1VEUF9IRUFERVJfTEVOR1RIICg4IC0gNCkKKyAgICAvLyBwYXJ0aWFsIGlwdjYgaGVhZGVyIGFy ZSBpcHY2IGhlYWRlciB3aXRob3V0IHBheWxvYWQgbGVuZ3RoICgxNiBiaXRzKQorI2RlZmluZSBQ QVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCAoNDAgLSAyKQorCisgICAgdWludDMyX3QgICAgICAg Y29udGV4dF9pZDsKKyAgICBzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbTsKKworICAgIGlmIChzaXpl IDwgMykKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgY29udGV4dF9p ZCA9IEFWX1JCMTYoYnVmKSA+PiA0OworICAgIGJ1ZiArPSAzOworICAgIHNpemUgLT0gMzsKKwor ICAgIGZvciAocHJvZ3JhbSA9IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3Jh bSA9IHByb2dyYW0tPm5leHQpCisgICAgICAgIGlmIChwcm9ncmFtLT5jaWQgPT0gY29udGV4dF9p ZCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKHByb2dyYW0gPT0gTlVMTCkgeworICAg ICAgICBBVlByb2dyYW0gKnAgPSBhdl9uZXdfcHJvZ3JhbShzLCBjb250ZXh0X2lkKTsKKyAgICAg ICAgaWYgKHAgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgICAgIHByb2dy YW0gPSBhdl9tYWxsb2Moc2l6ZW9mKHN0cnVjdCBQcm9ncmFtKSk7CisgICAgICAgIGlmIChwcm9n cmFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtLT5t bXRwID0gZmZfbW10cF9wYXJzZV9vcGVuKHApOworICAgICAgICBwcm9ncmFtLT5uZXh0ID0gY3R4 LT5wcm9ncmFtczsKKyAgICAgICAgY3R4LT5wcm9ncmFtcyA9IHByb2dyYW07CisgICAgICAgIHBy b2dyYW0tPmNpZCAgPSBjb250ZXh0X2lkOworICAgIH0KKworICAgIHN3aXRjaCAoYnVmWy0xXSkg eworICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjRfQU5EX1BBUlRJ QUxfVURQX0hFQURFUjoKKyAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFE RVI6CisgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICBjYXNlIENPTlRF WFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6Cisg ICAgICAgIGlmIChzaXplIDwgUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VE UF9IRUFERVJfTEVOR1RIKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7 CisgICAgICAgIHNpemUgLT0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5HVEggKyBQQVJUSUFMX1VE UF9IRUFERVJfTEVOR1RIOworICAgICAgICBidWYgKz0gUEFSVElBTF9JUFY2X0hFQURFUl9MRU5H VEggKyBQQVJUSUFMX1VEUF9IRUFERVJfTEVOR1RIOworICAgIGNhc2UgQ09OVEVYVF9JREVOVElG SUNBVElPTl9OT19DT01QUkVTU0VEX0hFQURFUjoKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVs dDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgfQorCisgICAgcmV0 dXJuIGZmX21tdHBfcGFyc2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBzaXpl KTsKK30KKworc3RhdGljIGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlBhY2tldCAqcGt0KQoreworICAgIHVpbnQ4X3QgICAgICAgICAgICAgIGhlYWRlcls0XTsK KyAgICB1aW50MTZfdCAgICAgICAgICAgICBzaXplOworICAgIGludCAgICAgICAgICAgICAgICAg IGVycjsKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqY3R4ID0gcy0+cHJpdl9kYXRhOworICAg IGludDY0X3QgICAgICAgICAgICAgIHBvcyAgPSBhdmlvX3RlbGwocy0+cGIpOworCisgICAgaWYg KHBvcyA8IDApIHJldHVybiAoaW50KSBwb3M7CisgICAgaWYgKHBvcyAhPSBjdHgtPmxhc3RfcG9z KSB7CisgICAgICAgIGN0eC0+bGFzdF9wb3MgPSBwb3M7CisKKyAgICAgICAgd2hpbGUgKHBvcyAt IGN0eC0+bGFzdF9wb3MgPCBjdHgtPnJlc3luY19zaXplKSB7CisgICAgICAgICAgICBpZiAoKGVy ciA9IGZmaW9fZW5zdXJlX3NlZWtiYWNrKHMtPnBiLCA0KSkgPCAwKQorICAgICAgICAgICAgICAg IHJldHVybiBlcnI7CisKKyAgICAgICAgICAgIGlmICgoZXJyID0gYXZpb19yZWFkKHMtPnBiLCBo ZWFkZXIsIDQpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikg PyBBVkVSUk9SX0VPRiA6IGVycjsKKworICAgICAgICAgICAgaWYgKGhlYWRlclswXSAhPSBIRUFE RVJfQllURSkgeworICAgICAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAt MywgU0VFS19DVVIpKSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7 CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAg IHNpemUgPSBBVl9SQjE2KGhlYWRlciArIDIpOworCisgICAgICAgICAgICBpZiAoKHBvcyA9IGF2 aW9fc2VlayhzLT5wYiwgLTQsIFNFRUtfQ1VSKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVy biAoaW50KSBwb3M7CisKKyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVfc2Vla2Jh Y2socy0+cGIsIDQgKyBzaXplICsgMSkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gZXJy OworCisgICAgICAgICAgICBpZiAoKHBvcyA9IGF2aW9fc2tpcChzLT5wYiwgNCArIHNpemUpKSA8 IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgICAgICAgICAgaWYg KChlcnIgPSBhdmlvX3JlYWQocy0+cGIsIGhlYWRlciwgMSkpIDwgMCkKKyAgICAgICAgICAgICAg ICByZXR1cm4gYXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDogZXJyOworCisgICAgICAg ICAgICBpZiAoaGVhZGVyWzBdID09IEhFQURFUl9CWVRFKSB7CisgICAgICAgICAgICAgICAgLy8g Zm91bmQgSEVBREVSLCBbc2l6ZV0sIEhFQURFUiwgc2hvdWxkIGJlIGdvb2QKKyAgICAgICAgICAg ICAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgLXNpemUgLSAxIC0gNCwgU0VFS19DVVIp KSA8IDApCisgICAgICAgICAgICAgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisgICAgICAgICAg ICAgICAgZ290byBzdWNjZXNzOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpZiAoKHBv cyA9IGF2aW9fc2VlayhzLT5wYiwgLXNpemUgLSAxIC0gMywgU0VFS19DVVIpKSA8IDApCisgICAg ICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgICAgICBzdWNjZXNzOgorICAgICAgICBjdHgtPmxh c3RfcG9zID0gcG9zOworCisgICAgICAgIGZvciAoc3RydWN0IFByb2dyYW0gKnByb2dyYW0gPSBj dHgtPnByb2dyYW1zOworICAgICAgICAgICAgIHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHBy b2dyYW0tPm5leHQpCisgICAgICAgICAgICBmZl9tbXRwX3Jlc2V0X3N0YXRlKHByb2dyYW0tPm1t dHApOworICAgIH0KKworICAgIGlmIChwa3QgIT0gTlVMTCkgcGt0LT5wb3MgPSBjdHgtPmxhc3Rf cG9zOworICAgIGlmICgoZXJyID0gZmZpb19yZWFkX3NpemUocy0+cGIsIGhlYWRlciwgNCkpIDwg MCkKKyAgICAgICAgcmV0dXJuIGF2aW9fZmVvZihzLT5wYikgPyBBVkVSUk9SX0VPRiA6IGVycjsK KyAgICBjdHgtPmxhc3RfcG9zICs9IDQ7CisKKyAgICBpZiAoaGVhZGVyWzBdICE9IEhFQURFUl9C WVRFKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIHNpemUgPSBB Vl9SQjE2KGhlYWRlciArIDIpOworICAgIGlmIChoZWFkZXJbMV0gIT0gSEVBREVSX0NPTVBSRVNT RURfSVBfUEFDS0VUKSB7CisgICAgICAgIGlmICgoY3R4LT5sYXN0X3BvcyA9IGF2aW9fc2tpcChz LT5wYiwgc2l6ZSkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9z OworICAgICAgICByZXR1cm4gcGt0ID09IE5VTEwgPyAwIDogRkZFUlJPUl9SRURPOworICAgIH0K KworICAgIGlmIChjdHgtPmNhcCA8IHNpemUpIHsKKyAgICAgICAgYXZfZnJlZShjdHgtPmJ1Zik7 CisgICAgICAgIGlmICgoY3R4LT5idWYgPSBhdl9tYWxsb2MoY3R4LT5jYXAgPSBzaXplKSkgPT0g TlVMTCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKyAgICB9CisgICAgaWYg KChlcnIgPSBmZmlvX3JlYWRfc2l6ZShzLT5wYiwgY3R4LT5idWYsIHNpemUpKSA8IDApCisgICAg ICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4 LT5sYXN0X3BvcyArPSBzaXplOworICAgIHJldHVybiBtbXR0bHZfcmVhZF9jb21wcmVzc2VkX2lw X3BhY2tldChjdHgsIHMsIHBrdCwgY3R4LT5idWYsIHNpemUpOworfQorCitzdGF0aWMgaW50IG1t dHRsdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpCit7CisgICAgaW50NjRfdCAgICAg ICAgICAgICAgcG9zOworICAgIGludDY0X3QgICAgICAgICAgICAgIGFsbG93ID0gcy0+cHJvYmVz aXplOworICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHggID0gcy0+cHJpdl9kYXRhOworCisg ICAgY3R4LT5sYXN0X3BvcyA9IGF2aW9fdGVsbChzLT5wYik7CisgICAgaWYgKGN0eC0+bGFzdF9w b3MgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKyAgICBjdHgtPmxh c3RfcG9zIC09IDE7IC8vIGZvcmNlIHJlc3luYworCisgICAgY3R4LT5yZXN5bmNfc2l6ZSA9IDQw OTY7CisgICAgcy0+Y3R4X2ZsYWdzIHw9IEFWRk1UQ1RYX05PSEVBREVSOworCisgICAgaWYgKCFz LT5wYi0+c2Vla2FibGUpCisgICAgICAgIHJldHVybiAwOworCisgICAgaWYgKChwb3MgPSBhdmlv X3RlbGwocy0+cGIpKSA8IDApCisgICAgICAgIHJldHVybiAoaW50KSBwb3M7CisKKyAgICB3aGls ZSAocy0+bmJfc3RyZWFtcyA8PSAwICYmIGFsbG93ID4gMCkgeworICAgICAgICBjb25zdCBpbnQ2 NF90IGN1ciA9IGN0eC0+bGFzdF9wb3M7CisgICAgICAgIGNvbnN0IGludCAgICAgZXJyID0gbW10 dGx2X3JlYWRfcGFja2V0KHMsIE5VTEwpOworICAgICAgICBpZiAoZXJyIDwgMCkgcmV0dXJuIGVy cjsKKyAgICAgICAgYWxsb3cgLT0gY3R4LT5sYXN0X3BvcyAtIGN1cjsKKyAgICB9CisKKyAgICBj dHgtPmxhc3RfcG9zID0gYXZpb190ZWxsKHMtPnBiKTsKKyAgICBpZiAoY3R4LT5sYXN0X3BvcyA8 IDApCisgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOworCisgICAgaWYgKChwb3Mg PSBhdmlvX3NlZWsocy0+cGIsIHBvcywgU0VFS19TRVQpKSA8IDApCisgICAgICAgIHJldHVybiAo aW50KSBwb3M7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBtbXR0bHZfcmVhZF9j bG9zZShBVkZvcm1hdENvbnRleHQgKmN0eCkKK3sKKyAgICBzdHJ1Y3QgUHJvZ3JhbSAgICAgICAq cHJvZ3JhbTsKKyAgICBzdHJ1Y3QgTU1UVExWQ29udGV4dCAqcHJpdiA9IGN0eC0+cHJpdl9kYXRh OworICAgIGZvciAocHJvZ3JhbSA9IHByaXYtPnByb2dyYW1zOyBwcm9ncmFtICE9IE5VTEw7KSB7 CisgICAgICAgIHN0cnVjdCBQcm9ncmFtICpuZXh0ID0gcHJvZ3JhbS0+bmV4dDsKKyAgICAgICAg ZmZfbW10cF9wYXJzZV9jbG9zZShwcm9ncmFtLT5tbXRwKTsKKyAgICAgICAgYXZfZnJlZShwcm9n cmFtKTsKKyAgICAgICAgcHJvZ3JhbSA9IG5leHQ7CisgICAgfQorICAgIHByaXYtPnByb2dyYW1z ID0gTlVMTDsKKyAgICBwcml2LT5jYXAgPSAwOworICAgIGF2X2ZyZWVwKCZwcml2LT5idWYpOwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50NjRfdCBtbXR0bHZfcmVhZF90aW1lc3RhbXAo CisgICAgc3RydWN0IEFWRm9ybWF0Q29udGV4dCAqcywgaW50IHN0cmVhbV9pbmRleCwKKyAgICBp bnQ2NF90ICpwb3MsIGludDY0X3QgcG9zX2xpbWl0KQoreworICAgIHN0cnVjdCBNTVRUTFZDb250 ZXh0ICpjdHggPSBzLT5wcml2X2RhdGE7CisKKyAgICBpZiAoKCpwb3MgPSBhdmlvX3NlZWsocy0+ cGIsICpwb3MsIFNFRUtfU0VUKSkgPCAwKQorICAgICAgICByZXR1cm4gKGludCkgKnBvczsKKwor ICAgIHdoaWxlIChwb3NfbGltaXQgPiAwKSB7CisgICAgICAgIEFWUGFja2V0ICAgICAgcGFja2V0 ID0gezB9OworICAgICAgICBjb25zdCBpbnQgICAgIGVyciAgICA9IG1tdHRsdl9yZWFkX3BhY2tl dChzLCAmcGFja2V0KTsKKyAgICAgICAgY29uc3QgaW50NjRfdCB0cyAgICAgPSBwYWNrZXQuZHRz OworICAgICAgICBjb25zdCBpbnQ2NF90IG9mZiAgICA9IHBhY2tldC5wb3M7CisgICAgICAgIGNv bnN0IGludCAgICAgc2lkICAgID0gcGFja2V0LnN0cmVhbV9pbmRleDsKKyAgICAgICAgYXZfcGFj a2V0X3VucmVmKCZwYWNrZXQpOworICAgICAgICBpZiAoZXJyID49IDAgJiYgKHN0cmVhbV9pbmRl eCA8IDAgfHwgc2lkID09IHN0cmVhbV9pbmRleCkpIHsKKyAgICAgICAgICAgICpwb3MgPSBvZmY7 CisgICAgICAgICAgICByZXR1cm4gdHM7CisgICAgICAgIH0KKyAgICAgICAgcG9zX2xpbWl0IC09 IGN0eC0+bGFzdF9wb3MgLSAqcG9zOworICAgICAgICAqcG9zID0gY3R4LT5sYXN0X3BvczsKKyAg ICAgICAgaWYgKGVyciA8IDAgJiYgZXJyICE9IEZGRVJST1JfUkVETykKKyAgICAgICAgICAgIHJl dHVybiBBVl9OT1BUU19WQUxVRTsKKyAgICB9CisKKyAgICByZXR1cm4gQVZfTk9QVFNfVkFMVUU7 Cit9CisKK2NvbnN0IEFWSW5wdXRGb3JtYXQgZmZfbW10dGx2X2RlbXV4ZXIgPSB7CisgICAgLm5h bWUgICAgICAgICAgID0gIm1tdHRsdiIsCisgICAgLmxvbmdfbmFtZSAgICAgID0gTlVMTF9JRl9D T05GSUdfU01BTEwoCisgICAgICAgICJNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoQVJJ QiBTVEQtQjMyKSIpLAorICAgIC5wcml2X2RhdGFfc2l6ZSA9IHNpemVvZihzdHJ1Y3QgTU1UVExW Q29udGV4dCksCisgICAgLmZsYWdzX2ludGVybmFsID0gRkZfRk1UX0lOSVRfQ0xFQU5VUCwKKyAg ICAucmVhZF9wcm9iZSAgICAgPSBtbXR0bHZfcHJvYmUsCisgICAgLnJlYWRfaGVhZGVyICAgID0g bW10dGx2X3JlYWRfaGVhZGVyLAorICAgIC5yZWFkX3BhY2tldCAgICA9IG1tdHRsdl9yZWFkX3Bh Y2tldCwKKyAgICAucmVhZF9jbG9zZSAgICAgPSBtbXR0bHZfcmVhZF9jbG9zZSwKKyAgICAucmVh ZF90aW1lc3RhbXAgPSBtbXR0bHZfcmVhZF90aW1lc3RhbXAsCisgICAgLmZsYWdzICAgICAgICAg ID0gQVZGTVRfU0hPV19JRFMsCit9OwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvdmVyc2lvbi5o IGIvbGliYXZmb3JtYXQvdmVyc2lvbi5oCmluZGV4IDJhMjhhM2JmNDAuLjZhODBmM2FjNGUgMTAw NjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaAorKysgYi9saWJhdmZvcm1hdC92ZXJzaW9u LmgKQEAgLTMxLDcgKzMxLDcgQEAKIAogI2luY2x1ZGUgInZlcnNpb25fbWFqb3IuaCIKIAotI2Rl ZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01JTk9SICAxNworI2RlZmluZSBMSUJBVkZPUk1BVF9W RVJTSU9OX01JTk9SICAxOAogI2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX01JQ1JPIDEwMAog CiAjZGVmaW5lIExJQkFWRk9STUFUX1ZFUlNJT05fSU5UIEFWX1ZFUlNJT05fSU5UKExJQkFWRk9S TUFUX1ZFUlNJT05fTUFKT1IsIFwKLS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWct ZGV2ZWxAZmZtcGVnLm9yZwpodHRwczovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1w ZWctZGV2ZWwKClRvIHVuc3Vic2NyaWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1w ZWctZGV2ZWwtcmVxdWVzdEBmZm1wZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=