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 4346745C4A for ; Sat, 29 Apr 2023 05:53:25 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 96B7768BF9F; Sat, 29 Apr 2023 08:53:22 +0300 (EEST) Received: from mail-pl1-f175.google.com (mail-pl1-f175.google.com [209.85.214.175]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 8DE7668BEC5 for ; Sat, 29 Apr 2023 08:53:16 +0300 (EEST) Received: by mail-pl1-f175.google.com with SMTP id d9443c01a7336-1a66b9bd7dfso7205205ad.2 for ; Fri, 28 Apr 2023 22:53:16 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1682747595; x=1685339595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=//f34RjLWH0pZ79jamzPaHKiRjGpZpDSX9QEmvPqXjs=; b=Cu6AedirzE37ZQv7O2mPJoStg2x7NbdMKS5HOgCX9wn2zd3w4NMJAv6xPqwGWcjdPc Ry/Eie3/i4RNzmVQnOxOU8m1y3+XGG+ezk0ZvlvrwiIN+FtqTga/kIvIWEQEi7XeHlAR Z4IiUwNKifN7tzxfsR62F+zckVxpat/6I1ZZYnuJd5ifEY6Br5LEeJmijadgt2pxUw4P GiMfad2ySzF+ML8ijCkb7sDa46/y1V1FQ9nHwKlTKGL9d5S36Jifkjcx36HpW2lvtNp7 VLgymTMkxw0PF4R1+oRIodb4M7ijeEXZd46179O4yb1dGt03votjUMtpAA6NavDhABcy 7XHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682747595; x=1685339595; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=//f34RjLWH0pZ79jamzPaHKiRjGpZpDSX9QEmvPqXjs=; b=Z6OPQL++Bbx9RNWPQiLtk9yBgG/AGwQg5PayNCKIN8hPxzmk9OIwCU+DhjRVccU0Ga oXxRLWRsZvnvifhQhR0QG8kNU7EYGanyHPAfE2++yQuZNv/H/DTemwLE7HUKvp9TNuOF Dgj2Z31XaHWihlsV3pVNCYG6nPBcz9QWOgOE1M5rUPaYWzZ4xQyJEzn5P4Txm1A+tKHY +NJjTMOmNszO+aEuA8q95Q5JDQoR+ENne9SuGXa6nCBG+cnoQNTcbmYv2sQIG3fVJr5T Yut/elPEpCQgrzCss8qVONGnoN/jkEzFvrtusS6I+gRAHAxBOTc03dbSSWAEMy/WejUH l5rA== X-Gm-Message-State: AC+VfDzPsUEz7etcSXJcCJNMvnZ6060Bu3SK+cRUKVekMzW3cMB5pL4m sMQg8nO+701DdVIvIgh/qq0LJG36XypwNls4p38= X-Google-Smtp-Source: ACHHUZ4CHwwaG99XDMv44bkYehkQ3Eoh2KfoUdhGQNznbunc/RBh0sGjnyHxpLfFCWq86fB8Ru4bMQ== X-Received: by 2002:a17:903:11cf:b0:1a9:95fa:1fa8 with SMTP id q15-20020a17090311cf00b001a995fa1fa8mr8993422plh.41.1682747593879; Fri, 28 Apr 2023 22:53:13 -0700 (PDT) Received: from localhost.localdomain ([2404:7a80:800:5e00:61c0:c7fd:4d76:8aca]) by smtp.gmail.com with ESMTPSA id q5-20020a170902dac500b00199203a4fa3sm2623495plx.203.2023.04.28.22.53.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 22:53:13 -0700 (PDT) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Sat, 29 Apr 2023 14:53:06 +0900 Message-Id: <20230429055306.7470-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230429054950.6148-1-admin@superfashi.com> References: <20230429054950.6148-1-admin@superfashi.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v4] 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: djEgLT4gdjI6IFJlZmFjdG9yIHVzaW5nIEdldEJ5dGVDb250ZXh0OyBGaXggY29tcGlsZSBlcnJv ci4KdjIgLT4gdjM6IFJlbW92ZSBkZWJ1ZyBzdGF0ZW1lbnQuCnYzIC0+IHY0OiBTcXVhc2ggY29t bWl0cyAoc29ycnksIGZpcnN0IHRpbWUgZ2l0IHBhdGNoIHVzZXIgOigKClRoaXMgcGF0Y2ggYWRk cyBhbiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFyc2VyLCBhcyBkZWZp bmVkIGluIElTTy9JRUMgMjMwMDgtMSwgYW5kIGFuIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNr ZXRzIChNTVQvVExWKSBkZW11eGVyLCBhcyBkZWZpbmVkIGluIEFSSUIgU1RELUIzMi4gQ3VycmVu dGx5LCBpdCBzdXBwb3J0cyBIRVZDLCBBQUMgTEFUTSwgYW5kIEFSSUItVFRNTCBkZW11eGluZy4K ClNpbmNlIE1NVFAgaXMgZGVzaWduZWQgdG8gdHJhbnNtaXQgb3ZlciBJUCwgdGhlcmUgaXMgbm8g c2l6ZSBpbmZvcm1hdGlvbiB3aXRoaW4gZWFjaCBNTVRQIHBhY2tldCwgYW5kIHRoZXJlIGlzIG5v IGZpbGVzeXN0ZW0gZm9ybWF0IGRlZmluZWQgYWxvbmdzaWRlIHRoZSBwcm90b2NvbC4gT25lIGlu ZHVzdHJpYWwgc29sdXRpb24gaXMgYSBzaW1wbGUgY29udGFpbmVyIGZvcm1hdCB1c2luZyB0eXBl 4oCTbGVuZ3Ro4oCTdmFsdWUgcGFja2V0cywgd2hpY2ggaXMgZGVmaW5lZCBpbiBBUklCIFNURC1C MzIuCgpBbm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAgaXMgdXNpbmcgcGFj a2V0IGNhcHR1cmUgKHBjYXApIGZpbGVzIHdoaWNoIHJlY29yZHMgbmV0d29yayBwYWNrZXRzLiBU aGlzIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlbXV4ZXIgZm9yIHRoaXMgY29udGFpbmVy IGZvcm1hdC4KClNpZ25lZC1vZmYtYnk6IFN1cGVyRmFzaGkgPGFkbWluQHN1cGVyZmFzaGkuY29t PgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9jL2RlbXV4ZXJzLnRl eGkgICAgICAgIHwgICAgNCArCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAgfCAgICAxICsKIGxp YmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgIDEgKwogbGliYXZmb3JtYXQvbW10cC5jICAgICAg IHwgMTM3MiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKwogbGliYXZmb3Jt YXQvbW10cC5oICAgICAgIHwgICA2MSArKwogbGliYXZmb3JtYXQvbW10dGx2LmMgICAgIHwgIDMy NCArKysrKysrKysKIGxpYmF2Zm9ybWF0L3ZlcnNpb24uaCAgICB8ICAgIDIgKy0KIDggZmlsZXMg Y2hhbmdlZCwgMTc2NSBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCiBjcmVhdGUgbW9kZSAx MDA2NDQgbGliYXZmb3JtYXQvbW10cC5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQv bW10cC5oCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvbW10dGx2LmMKCmRpZmYgLS1n aXQgYS9DaGFuZ2Vsb2cgYi9DaGFuZ2Vsb2cKaW5kZXggYjZmNjY4MjkwNC4uMjQ4M2ZkZDU0NyAx MDA2NDQKLS0tIGEvQ2hhbmdlbG9nCisrKyBiL0NoYW5nZWxvZwpAQCAtNiw2ICs2LDcgQEAgdmVy c2lvbiA8bmV4dD46CiAtIFBsYXlkYXRlIHZpZGVvIGRlY29kZXIgYW5kIGRlbXV4ZXIKIC0gRXh0 ZW5kIFZBQVBJIHN1cHBvcnQgZm9yIGxpYnZhLXdpbjMyIG9uIFdpbmRvd3MKIC0gYWZpcmVxc3Jj IGF1ZGlvIHNvdXJjZSBmaWx0ZXIKKy0gTU1UUCBwYXJzZXIgYW5kIE1NVC9UTFYgZGVtdXhlcgog CiB2ZXJzaW9uIDYuMDoKIC0gUmFkaWFuY2UgSERSIGltYWdlIHN1cHBvcnQKZGlmZiAtLWdpdCBh L2RvYy9kZW11eGVycy50ZXhpIGIvZG9jL2RlbXV4ZXJzLnRleGkKaW5kZXggMmQzM2I0N2E1Ni4u NTZhYWIyNTFiMiAxMDA2NDQKLS0tIGEvZG9jL2RlbXV4ZXJzLnRleGkKKysrIGIvZG9jL2RlbXV4 ZXJzLnRleGkKQEAgLTY4OSw2ICs2ODksMTAgQEAgU2V0IHRoZSBzYW1wbGUgcmF0ZSBmb3IgbGli b3Blbm1wdCB0byBvdXRwdXQuCiBSYW5nZSBpcyBmcm9tIDEwMDAgdG8gSU5UX01BWC4gVGhlIHZh bHVlIGRlZmF1bHQgaXMgNDgwMDAuCiBAZW5kIHRhYmxlCiAKK0BzZWN0aW9uIG1tdHRsdgorCitE ZW11eGVyIGZvciBNTVQgcHJvdG9jb2wgb3ZlciBUTFYgcGFja2V0cyAoTU1UL1RMViksIGFzIGRl ZmluZWQgaW4gQVJJQiBTVEQtQjMyLgorCiBAc2VjdGlvbiBtb3YvbXA0LzNncAogCiBEZW11eGVy IGZvciBRdWlja3RpbWUgRmlsZSBGb3JtYXQgJiBJU08vSUVDIEJhc2UgTWVkaWEgRmlsZSBGb3Jt YXQgKElTTy9JRUMgMTQ0OTYtMTIgb3IgTVBFRy00IFBhcnQgMTIsIElTTy9JRUMgMTU0NDQtMTIg b3IgSlBFRyAyMDAwIFBhcnQgMTIpLgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCBmOGFkN2M2YTExLi5lMzJkNmU3MWEzIDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpA QCAtMzU0LDYgKzM1NCw3IEBAIE9CSlMtJChDT05GSUdfTUxWX0RFTVVYRVIpICAgICAgICAgICAg ICAgKz0gbWx2ZGVjLm8gcmlmZmRlYy5vCiBPQkpTLSQoQ09ORklHX01NX0RFTVVYRVIpICAgICAg ICAgICAgICAgICs9IG1tLm8KIE9CSlMtJChDT05GSUdfTU1GX0RFTVVYRVIpICAgICAgICAgICAg ICAgKz0gbW1mLm8KIE9CSlMtJChDT05GSUdfTU1GX01VWEVSKSAgICAgICAgICAgICAgICAgKz0g bW1mLm8gcmF3ZW5jLm8KK09CSlMtJChDT05GSUdfTU1UVExWX0RFTVVYRVIpICAgICAgICAgICAg Kz0gbW10cC5vIG1tdHRsdi5vCiBPQkpTLSQoQ09ORklHX01PRFNfREVNVVhFUikgICAgICAgICAg ICAgICs9IG1vZHMubwogT0JKUy0kKENPTkZJR19NT0ZMRVhfREVNVVhFUikgICAgICAgICAgICAr PSBtb2ZsZXgubwogT0JKUy0kKENPTkZJR19NT1ZfREVNVVhFUikgICAgICAgICAgICAgICArPSBt b3YubyBtb3ZfY2hhbi5vIG1vdl9lc2RzLm8gXApkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxs Zm9ybWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmluZGV4IGVmZGIzNGUyOWQuLmQ1 ZjRmNTY4MGUgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJh dmZvcm1hdC9hbGxmb3JtYXRzLmMKQEAgLTI3MCw2ICsyNzAsNyBAQCBleHRlcm4gY29uc3QgQVZJ bnB1dEZvcm1hdCAgZmZfbWx2X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAg ZmZfbW1fZGVtdXhlcjsKIGV4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbWZfZGVtdXhl cjsKIGV4dGVybiBjb25zdCBGRk91dHB1dEZvcm1hdCBmZl9tbWZfbXV4ZXI7CitleHRlcm4gY29u c3QgQVZJbnB1dEZvcm1hdCAgZmZfbW10dGx2X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfbW9kc19kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZm X21vZmxleF9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQgIGZmX21vdl9kZW11 eGVyOwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5jIGIvbGliYXZmb3JtYXQvbW10cC5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmJhMWZjYWIyODEKLS0tIC9k ZXYvbnVsbAorKysgYi9saWJhdmZvcm1hdC9tbXRwLmMKQEAgLTAsMCArMSwxMzcyIEBACisvKgor ICogTVBFRyBNZWRpYSBUcmFuc3BvcnQgUHJvdG9jb2wgKE1NVFApIHBhcnNlciwgYXMgZGVmaW5l ZCBpbiBJU08vSUVDIDIzMDA4LTEuCisgKiBDb3B5cmlnaHQgKGMpIDIwMjMgU3VwZXJGYXNoaQor ICoKKyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4KKyAqCisgKiBGRm1wZWcgaXMgZnJl ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK KyAqIHZlcnNpb24gMi4xIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs YXRlciB2ZXJzaW9uLgorICoKKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0 aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiBMZXNzZXIg R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqIFlvdSBzaG91 bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK KyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg U29mdHdhcmUKKyAqIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg Rmxvb3IsIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKKyAqLworI2luY2x1ZGUgImxpYmF2dXRp bC9tZW0uaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAibGliYXZjb2RlYy9ieXRlc3RyZWFtLmgi CisjaW5jbHVkZSAibmV0d29yay5oIgorI2luY2x1ZGUgIm1tdHAuaCIKKyNpbmNsdWRlICJpbnRl cm5hbC5oIgorI2luY2x1ZGUgImRlbXV4LmgiCisKKyNpbmNsdWRlIDxzdGRib29sLmg+CisKKyNk ZWZpbmUgRU5TVVJFX0JTX0xFRlQoYnMsIHNpemUpIGlmIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNf bGVmdChicykgPCAoc2l6ZSkpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBCisKK3N0cnVjdCBN TVRHZW5lcmFsTG9jYXRpb25JbmZvIHsKKyAgICB1aW50OF90IGxvY2F0aW9uX3R5cGU7CisgICAg dW5pb24geworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWludDE2X3QgcGFja2V0X2lk OworICAgICAgICB9IHR5cGUwOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgc3RydWN0 IGluX2FkZHIgaXB2NF9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbl9hZGRyIGlwdjRf ZHN0X2FkZHI7CisgICAgICAgICAgICBpbl9wb3J0X3QgICAgICBkc3RfcG9ydDsKKyAgICAgICAg ICAgIHVpbnQxNl90ICAgICAgIHBhY2tldF9pZDsKKyAgICAgICAgfSB0eXBlMTsKKyAgICAgICAg c3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X3NyY19hZGRyOworICAg ICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7CisgICAgICAgICAgICBpbl9w b3J0X3QgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgcGFja2V0 X2lkOworICAgICAgICB9IHR5cGUyOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAgICAgdWlu dDE2X3QgbmV0d29ya19pZDsKKyAgICAgICAgICAgIHVpbnQxNl90IE1QRUdfMl90cmFuc3BvcnRf c3RyZWFtX2lkOworICAgICAgICAgICAgdWludDE2X3QgTVBFR18yX1BJRDogMTM7CisgICAgICAg IH0gdHlwZTM7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgaW42X2FkZHIg aXB2Nl9zcmNfYWRkcjsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X2RzdF9hZGRy OworICAgICAgICAgICAgaW5fcG9ydF90ICAgICAgIGRzdF9wb3J0OworICAgICAgICAgICAgdWlu dDE2X3QgICAgICAgIE1QRUdfMl9QSUQ6IDEzOworICAgICAgICB9IHR5cGU0OworICAgICAgICBz dHJ1Y3QgeworICAgICAgICAgICAgY2hhciBVUkxbMHgxMDAgKyAxXTsKKyAgICAgICAgfSB0eXBl NTsKKyAgICB9OworfTsKKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbW10X2dlbmVyYWxfbG9j YXRpb25faW5mbyhzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyAqaW5mbywgR2V0Qnl0ZUNv bnRleHQgKmdiYykgeworICAgIHVpbnQ4X3QgdXJsX3NpemU7CisKKyAgICBFTlNVUkVfQlNfTEVG VChnYmMsIDEpOworICAgIHN3aXRjaCAoaW5mby0+bG9jYXRpb25fdHlwZSA9IGJ5dGVzdHJlYW0y X2dldF9ieXRldShnYmMpKSB7CisgICAgY2FzZSAweDAwOgorICAgICAgICBFTlNVUkVfQlNfTEVG VChnYmMsIDIpOworICAgICAgICBpbmZvLT50eXBlMC5wYWNrZXRfaWQgPSBieXRlc3RyZWFtMl9n ZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDAxOgorICAgICAgICBF TlNVUkVfQlNfTEVGVChnYmMsICgzMiArIDMyICsgMTYgKyAxNikgLyA4KTsKKyAgICAgICAgYnl0 ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCAodWludDhfdCAqKSAmaW5mby0+dHlwZTEuaXB2NF9z cmNfYWRkciwgNCk7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgKHVpbnQ4 X3QgKikgJmluZm8tPnR5cGUxLmlwdjRfZHN0X2FkZHIsIDQpOworICAgICAgICBpbmZvLT50eXBl MS5kc3RfcG9ydCAgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgaW5mby0+ dHlwZTEucGFja2V0X2lkID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgICAgIGJy ZWFrOworICAgIGNhc2UgMHgwMjoKKyAgICAgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAoMTI4ICsg MTI4ICsgMTYgKyAxNikgLyA4KTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2Jj LCAodWludDhfdCAqKSAmaW5mby0+dHlwZTIuaXB2Nl9zcmNfYWRkciwgMTYpOworICAgICAgICBi eXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZpbmZvLT50eXBlMi5pcHY2 X2RzdF9hZGRyLCAxNik7CisgICAgICAgIGluZm8tPnR5cGUyLmRzdF9wb3J0ICA9IGJ5dGVzdHJl YW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBpbmZvLT50eXBlMi5wYWNrZXRfaWQgPSBieXRl c3RyZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAweDAzOgor ICAgICAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgxNiArIDE2ICsgMyArIDEzKSAvIDgpOworICAg ICAgICBpbmZvLT50eXBlMy5uZXR3b3JrX2lkICAgICAgICAgICAgICAgICA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2dShnYmMpOworICAgICAgICBpbmZvLT50eXBlMy5NUEVHXzJfdHJhbnNwb3J0X3N0 cmVhbV9pZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOworICAgICAgICBpbmZvLT50eXBl My5NUEVHXzJfUElEICAgICAgICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMp ICYgMGIxMTExMTExMTExMTExOworICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDQ6CisgICAg ICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDEyOCArIDEyOCArIDE2ICsgMyArIDEzKSAvIDgpOwor ICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsICh1aW50OF90ICopICZpbmZvLT50 eXBlNC5pcHY2X3NyY19hZGRyLCAxNik7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1 KGdiYywgKHVpbnQ4X3QgKikgJmluZm8tPnR5cGU0LmlwdjZfZHN0X2FkZHIsIDE2KTsKKyAgICAg ICAgaW5mby0+dHlwZTQuZHN0X3BvcnQgICA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpOwor ICAgICAgICBpbmZvLT50eXBlNC5NUEVHXzJfUElEID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdi YykgJiAwYjExMTExMTExMTExMTE7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwNToKKyAg ICAgICAgdXJsX3NpemUgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZShnYmMpOworICAgICAgICBieXRl c3RyZWFtMl9nZXRfYnVmZmVyKGdiYywgKHVpbnQ4X3QgKikgaW5mby0+dHlwZTUuVVJMLCB1cmxf c2l6ZSk7CisgICAgICAgIGluZm8tPnR5cGU1LlVSTFt1cmxfc2l6ZV0gPSAnXDAnOworICAgICAg ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFU QTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBTdHJlYW1zIHsKKyAgICBBVlN0 cmVhbSAqc3RyZWFtOworCisgICAgaW50IG51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7CisgICAg c3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0b3IgeworICAgICAgICB1aW50MzJfdCBzZXF1ZW5j ZV9udW1iZXI7CisgICAgICAgIGludDY0X3QgIHByZXNlbnRhdGlvbl90aW1lOworICAgIH0gKnRp bWVzdGFtcF9kZXNjcmlwdG9yOworCisgICAgaW50IG51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JzOworICAgIHN0cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IgeworICAgICAg ICB1aW50MzJfdCBzZXF1ZW5jZV9udW1iZXI7CisgICAgICAgIHVpbnQxNl90IGRlY29kaW5nX3Rp bWVfb2Zmc2V0OworICAgICAgICB1aW50OF90ICBudW1fb2ZfYXU7CisgICAgICAgIHN0cnVjdCB7 CisgICAgICAgICAgICB1aW50MTZfdCBkdHNfcHRzX29mZnNldDsKKyAgICAgICAgICAgIHVpbnQx Nl90IHB0c19vZmZzZXQ7CisgICAgICAgIH0gYXVbMHgxMDBdOworICAgIH0gKmV4dF90aW1lc3Rh bXBfZGVzY3JpcHRvcjsKKworICAgIHVpbnQzMl90ICAgIGxhc3Rfc2VxdWVuY2VfbnVtYmVyOwor ICAgIHVpbnQxNl90ICAgIGF1X2NvdW50OworICAgIEFWQnVmZmVyUmVmICpwZW5kaW5nX2J1ZmZl cjsKKyAgICBpbnQ2NF90ICAgICBvZmZzZXQ7CisgICAgaW50ICAgICAgICAgZmxhZ3M7CisKKyAg ICBzdHJ1Y3QgU3RyZWFtcyAqbmV4dDsKK307CisKK3N0cnVjdCBNTVRQQ29udGV4dCB7CisgICAg c3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXI7CisgICAgc3RydWN0IFN0cmVhbXMg ICAgICAgICAgICpzdHJlYW1zOworICAgIEFWUHJvZ3JhbSAgICAgICAgICAgICAgICAqcHJvZ3Jh bTsKKyAgICAvLyBzdHJ1Y3QgTU1UR2VuZXJhbExvY2F0aW9uSW5mbyBtcHRfbG9jYXRpb247IFRP RE8KKworICAgIC8vIGJlbG93IGFyZSB0ZW1wb3JhcnkgZmllbGRzIGF2YWlsYWJsZSBmb3IgdGhl IHNjb3BlIG9mIGEgc2luZ2xlIHBhY2tldAorICAgIEFWRm9ybWF0Q29udGV4dCAqczsKKyAgICBB VlBhY2tldCAgICAgICAgKnBrdDsKKyAgICB1aW50MTZfdCAgICAgICAgY3VycmVudF9waWQ7Cisg ICAgYm9vbCAgICAgICAgICAgIGlzX3JhcDsKK307CisKK3N0YXRpYyBpbmxpbmUgc3RydWN0IFN0 cmVhbXMgKmZpbmRfY3VycmVudF9zdHJlYW0oc3RydWN0IE1NVFBDb250ZXh0ICpjdHgpIHsKKyAg ICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtczsKKyAgICBmb3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVh bXM7IHN0cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0cmVhbXMtPm5leHQpCisgICAgICAgIGlm IChzdHJlYW1zLT5zdHJlYW0tPmlkID09IGN0eC0+Y3VycmVudF9waWQpCisgICAgICAgICAgICBy ZXR1cm4gc3RyZWFtczsKKyAgICByZXR1cm4gTlVMTDsKK30KKworc3RhdGljIGlubGluZSBzdHJ1 Y3QgU3RyZWFtcyAqZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oc3RydWN0IE1NVFBDb250ZXh0ICpj dHgsIHVpbnQxNl90IHBpZCkgeworICAgIEFWU3RyZWFtICAgICAgICpzdHJlYW07CisgICAgc3Ry dWN0IFN0cmVhbXMgKnN0cmVhbXM7CisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBz dHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KQorICAgICAgICBpZiAoc3Ry ZWFtcy0+c3RyZWFtLT5pZCA9PSBwaWQpIHsKKyAgICAgICAgICAgIGZmc3RyZWFtKHN0cmVhbXMt PnN0cmVhbSktPm5lZWRfY29udGV4dF91cGRhdGUgPSAxOworICAgICAgICAgICAgcmV0dXJuIHN0 cmVhbXM7CisgICAgICAgIH0KKworICAgIHN0cmVhbSA9IGF2Zm9ybWF0X25ld19zdHJlYW0oY3R4 LT5zLCBOVUxMKTsKKyAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIHN0 cmVhbS0+aWQgPSBwaWQ7CisgICAgYXZfcHJvZ3JhbV9hZGRfc3RyZWFtX2luZGV4KGN0eC0+cywg Y3R4LT5wcm9ncmFtLT5pZCwgc3RyZWFtLT5pbmRleCk7CisKKyAgICBzdHJlYW1zID0gYXZfbWFs bG9jeihzaXplb2Yoc3RydWN0IFN0cmVhbXMpKTsKKyAgICBpZiAoc3RyZWFtcyA9PSBOVUxMKSBy ZXR1cm4gTlVMTDsKKyAgICBzdHJlYW1zLT5zdHJlYW0gPSBzdHJlYW07CisgICAgc3RyZWFtcy0+ bmV4dCAgID0gY3R4LT5zdHJlYW1zOworICAgIHN0cmVhbXMtPm9mZnNldCA9IC0xOworICAgIGN0 eC0+c3RyZWFtcyAgICA9IHN0cmVhbXM7CisgICAgcmV0dXJuIHN0cmVhbXM7Cit9CisKK2VudW0g eworICAgIE1NVF9QQUNLQUdFX1RBQkxFX0lEICA9IDB4MjAsCisgICAgUEFDS0FHRV9MSVNUX1RB QkxFX0lEID0gMHg4MCwKK307CisKK2VudW0geworICAgIE1QVV9USU1FU1RBTVBfREVTQ1JJUFRP UiAgICAgICAgICA9IDB4MDAwMSwKKyAgICBWSURFT19DT01QT05FTlRfREVTQ1JJUFRPUiAgICAg ICAgPSAweDgwMTAsCisgICAgTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUiAgID0gMHg4 MDExLAorICAgIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICA9IDB4ODAxNCwKKyAg ICBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SICAgICAgPSAweDgwMjAsCisgICAgTVBVX0VY VEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SID0gMHg4MDI2LAorfTsKKworc3RhdGljIGlubGlu ZSBpbnQgcGFyc2VfdmlkZW9fY29tcG9uZW50X2Rlc2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwg R2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7Cisg ICAgdWludDhfdCBsYW5ndWFnZV9jb2RlWzRdOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAo MTYgKyA4ICsgNCArIDQgKyAxICsgMiArIDUgKyAxNiArIDQgKyA0ICsgMjQpIC8gOCk7CisgICAg aWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShnYmMpICE9IFZJREVPX0NPTVBPTkVOVF9ERVNDUklQ VE9SKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICBkZXNjcmlwdG9y X2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworCisgICAgRU5TVVJFX0JTX0xF RlQoZ2JjLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisgICAgeworICAgICAgICBHZXRCeXRlQ29udGV4 dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFtMl9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVz Y3JpcHRvcl9sZW5ndGgpOworICAgICAgICAvKgorICAgICAgICAgKiBza2lwOgorICAgICAgICAg KiAtIHZpZGVvX3Jlc29sdXRpb24KKyAgICAgICAgICogLSB2aWRlb19hc3BlY3RfcmF0aW8KKyAg ICAgICAgICogLSB2aWRlb19zY2FuX2ZsYWcKKyAgICAgICAgICogLSByZXNlcnZlZAorICAgICAg ICAgKiAtIHZpZGVvX2ZyYW1lX3JhdGUKKyAgICAgICAgICogLSBjb21wb25lbnRfdGFnCisgICAg ICAgICAqIC0gdmlkZW9fdHJhbnNmZXJfY2hhcmFjdGVyaXN0aWNzCisgICAgICAgICAqIC0gcmVz ZXJ2ZWQKKyAgICAgICAgICovCisgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJm5nYmMsICg0ICsg NCArIDEgKyAyICsgNSArIDE2ICsgNCArIDQpIC8gOCk7CisKKyAgICAgICAgRU5TVVJFX0JTX0xF RlQoJm5nYmMsIDMpOworICAgICAgICBieXRlc3RyZWFtMl9nZXRfYnVmZmVydSgmbmdiYywgbGFu Z3VhZ2VfY29kZSwgMyk7CisgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOworICAgIH0K KyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAgIHJl dHVybiBhdl9kaWN0X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2Vf Y29kZSwgMCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX21oX2F1ZGlvX2NvbXBvbmVu dF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAg ICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworICAgIHVpbnQ4X3Qgc3RyZWFtX2NvbnRlbnQ7 CisgICAgdWludDhfdCBzdHJlYW1fdHlwZTsKKyAgICB1aW50OF90IGxhbmd1YWdlX2NvZGVbNF07 CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsICgxNiArIDggKyA0ICsgNCArIDggKyAxNiArIDgg KyA4ICsgMSArIDEgKyAyICsgMyArIDEgKyAyNCkgLyA4KTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJf Z2V0X2JlMTZ1KGdiYykgIT0gTUhfQVVESU9fQ09NUE9ORU5UX0RFU0NSSVBUT1IpCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0 ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGRlc2Ny aXB0b3JfbGVuZ3RoKTsKKyAgICB7CisgICAgICAgIHVpbnQ4X3QgYnl0ZTsKKyAgICAgICAgYm9v bCBFU19tdWx0aV9saW5ndWFsX2ZsYWc7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsK KyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3Jf bGVuZ3RoKTsKKworICAgICAgICBieXRlICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRl dSgmbmdiYyk7CisgICAgICAgIHN0cmVhbV9jb250ZW50ID0gYnl0ZSAmIDBiMTExMTsKKworICAg ICAgICAvKgorICAgICAgICAgKiBza2lwOgorICAgICAgICAgKiAtIGNvbXBvbmVudF90eXBlCisg ICAgICAgICAqIC0gY29tcG9uZW50X3RhZworICAgICAgICAgKi8KKyAgICAgICAgYnl0ZXN0cmVh bTJfc2tpcHUoJm5nYmMsIDMpOworICAgICAgICBzdHJlYW1fdHlwZSA9IGJ5dGVzdHJlYW0yX2dl dF9ieXRldSgmbmdiYyk7CisKKyAgICAgICAgLy8gc2tpcDogc2ltdWxjYXN0X2dyb3VwX3RhZwor ICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMSk7CisKKyAgICAgICAgYnl0ZSAgICAg ICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KCZuZ2JjKTsKKyAgICAgICAgRVNf bXVsdGlfbGluZ3VhbF9mbGFnID0gYnl0ZSA+PiA3OworCisgICAgICAgIEVOU1VSRV9CU19MRUZU KCZuZ2JjLCAzKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoJm5nYmMsIGxhbmd1 YWdlX2NvZGUsIDMpOworICAgICAgICBsYW5ndWFnZV9jb2RlWzNdID0gJ1wwJzsKKworICAgICAg ICBpZiAoRVNfbXVsdGlfbGluZ3VhbF9mbGFnKSB7CisgICAgICAgICAgICBFTlNVUkVfQlNfTEVG VCgmbmdiYywgMyk7CisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdSgmbmdiYywgMyk7Cisg ICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBkZXNjcmlwdG9yX2xl bmd0aCk7CisKKyAgICBzd2l0Y2ggKHN0cmVhbV9jb250ZW50KSB7CisgICAgY2FzZSAweDM6Cisg ICAgICAgIHN3aXRjaCAoc3RyZWFtX3R5cGUpIHsKKyAgICAgICAgY2FzZSAweDExOgorICAgICAg ICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9BQUNfTEFUTTsK KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDB4MWM6CisgICAgICAgICAgICBzdHJl YW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX0FBQzsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHg0OgorICAgICAgICBz dHJlYW0tPmNvZGVjcGFyLT5jb2RlY19pZCA9IEFWX0NPREVDX0lEX01QNEFMUzsKKyAgICAgICAg YnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRh LCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9jb2RlLCAwKTs7Cit9CisKKyNkZWZpbmUgTUFYX05VTV9U SU1FU1RBTVBfREVTQ1JJUFRPUiAzMgorI2RlZmluZSBESUZGKGEsIGIpICgoYSkgPiAoYikgPyAo KGEpIC0gKGIpKSA6ICgoYikgLSAoYSkpKQorCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9tcHVf dGltZXN0YW1wX2Rlc2NyaXB0b3Ioc3RydWN0IFN0cmVhbXMgKnN0cmVhbXMsIEdldEJ5dGVDb250 ZXh0ICpnYmMpIHsKKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworCisgICAgRU5TVVJF X0JTX0xFRlQoZ2JjLCAoMTYgKyA4KSAvIDgpOworCisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9i ZTE2dShnYmMpICE9IE1QVV9USU1FU1RBTVBfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9n ZXRfYnl0ZXUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgZGVzY3JpcHRvcl9sZW5n dGgpOworICAgIHsKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsKKyAgICAgICAgYnl0ZXN0 cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKworICAg ICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpID4gMCkgeworICAg ICAgICAgICAgdWludDY0X3QgbXB1X3NlcV9udW07CisgICAgICAgICAgICBpbnQ2NF90ICBtcHVf cHJlc2VudGF0aW9uX3RpbWU7CisKKyAgICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAo MzIgKyA2NCkgLyA4KTsKKyAgICAgICAgICAgIG1wdV9zZXFfbnVtICAgICAgICAgICA9IGJ5dGVz dHJlYW0yX2dldF9iZTMydSgmbmdiYyk7CisgICAgICAgICAgICBtcHVfcHJlc2VudGF0aW9uX3Rp bWUgPSBmZl9wYXJzZV9udHBfdGltZShieXRlc3RyZWFtMl9nZXRfYmU2NHUoJm5nYmMpKSAtIE5U UF9PRkZTRVRfVVM7CisKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAgICAgICBzdHJ1Y3Qg TVBVVGltZXN0YW1wRGVzY3JpcHRvciAqZGVzYzsKKyAgICAgICAgICAgICAgICBzaXplX3QgICAg ICAgICAgICAgICAgICAgICAgICBpOworCisgICAgICAgICAgICAgICAgaWYgKG1wdV9zZXFfbnVt IDwgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIGJyZWFrOworCisgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsr aSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9y W2ldLnNlcXVlbmNlX251bWJlciA9PSBtcHVfc2VxX251bSkgeworICAgICAgICAgICAgICAgICAg ICAgICAgZGVzYyA9IHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKKyAgICAgICAgICAgICAgICAgICAgfQorCisgICAg ICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3Jp cHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9k ZXNjcmlwdG9yW2ldLnNlcXVlbmNlX251bWJlciA8IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVt YmVyKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBkZXNjID0gc3RyZWFtcy0+dGltZXN0YW1w X2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBlbmQxOworICAg ICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBpZiAoc3RyZWFtcy0+bnVtX3Rp bWVzdGFtcF9kZXNjcmlwdG9ycyArIDEgPiBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7 CisgICAgICAgICAgICAgICAgICAgIC8vIHdlIGhhdmUgYWxsIGRlc2NyaXB0b3JzIGxhcmdlciB0 aGFuIHRoZSBjdXJyZW50IHNlcXVlbmNlIG51bWJlcgorICAgICAgICAgICAgICAgICAgICAvLyB3 ZSBjYW4ndCBhZGQgbW9yZSwgc28gd2Ugc2hvdWxkIGV2aWN0IHRoZSBvbmUgd2l0aCB0aGUgbGFy Z2VzdCBkaXN0YW5jZQorICAgICAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXhfZGlzdCA9IDA7 CisgICAgICAgICAgICAgICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fdGltZXN0 YW1wX2Rlc2NyaXB0b3JzOyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRElGRihz dHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXFf bnVtKSA+IG1heF9kaXN0KSB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAg PSBzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAg ICAgICAgICAgbWF4X2Rpc3QgPSBESUZGKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ld LnNlcXVlbmNlX251bWJlciwgbXB1X3NlcV9udW0pOworICAgICAgICAgICAgICAgICAgICAgICAg fQorICAgICAgICAgICAgICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7IC8vIHNob3Vs ZCBuZXZlciBmYWlsCisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAgICAg ICAgICB9CisKKyAgICAgICAgICAgICAgICBkZXNjID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAg ICAgICAgICAgICAgICAgKHZvaWQgKiopICZzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciwg JnN0cmVhbXMtPm51bV90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgICAg IHNpemVvZihzdHJ1Y3QgTVBVVGltZXN0YW1wRGVzY3JpcHRvciksIE5VTEwpOworICAgICAgICAg ICAgICAgIGlmIChkZXNjID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7CisKKyAgICAg ICAgICAgICAgICBlbmQxOgorICAgICAgICAgICAgICAgIGRlc2MtPnNlcXVlbmNlX251bWJlciAg ID0gbXB1X3NlcV9udW07CisgICAgICAgICAgICAgICAgZW5kMjoKKyAgICAgICAgICAgICAgICBk ZXNjLT5wcmVzZW50YXRpb25fdGltZSA9IG1wdV9wcmVzZW50YXRpb25fdGltZTsKKyAgICAgICAg ICAgIH0gd2hpbGUgKDApOworICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1 KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IHBhcnNlX21wdV9leHRlbmRlZF90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJ1Y3Qg U3RyZWFtcyAqc3RyZWFtcywgR2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIHVpbnQ4X3QgZGVz Y3JpcHRvcl9sZW5ndGg7CisKKyAgICBBVlN0cmVhbSAqc3RyZWFtID0gc3RyZWFtcy0+c3RyZWFt OworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAoMTYgKyA4ICsgNSArIDIgKyAxKSAvIDgpOwor ICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBNUFVfRVhURU5ERURfVElNRVNU QU1QX0RFU0NSSVBUT1IpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1KGdiYyk7CisKKyAgICBF TlNVUkVfQlNfTEVGVChnYmMsIGRlc2NyaXB0b3JfbGVuZ3RoKTsKKyAgICB7CisgICAgICAgIHVp bnQ4X3QgIGJ5dGU7CisgICAgICAgIHVpbnQ4X3QgIHB0c19vZmZzZXRfdHlwZTsKKyAgICAgICAg Ym9vbCB0aW1lc2NhbGVfZmxhZzsKKyAgICAgICAgdWludDE2X3QgZGVmYXVsdF9wdHNfb2Zmc2V0 ID0gMDsKKworICAgICAgICBHZXRCeXRlQ29udGV4dCBuZ2JjOworICAgICAgICBieXRlc3RyZWFt Ml9pbml0KCZuZ2JjLCBnYmMtPmJ1ZmZlciwgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAg IEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAoNSArIDIgKyAxKSAvIDgpOworICAgICAgICBieXRlICAg ICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZSgmbmdiYyk7CisgICAgICAgIHB0c19vZmZz ZXRfdHlwZSA9IChieXRlID4+IDEpICYgMGIxMTsKKyAgICAgICAgdGltZXNjYWxlX2ZsYWcgID0g Ynl0ZSAmIDE7CisKKyAgICAgICAgaWYgKHRpbWVzY2FsZV9mbGFnKSB7CisgICAgICAgICAgICBF TlNVUkVfQlNfTEVGVCgmbmdiYywgNCk7CisgICAgICAgICAgICBzdHJlYW0tPnRpbWVfYmFzZS5u dW0gPSAxOworICAgICAgICAgICAgc3RyZWFtLT50aW1lX2Jhc2UuZGVuID0gYnl0ZXN0cmVhbTJf Z2V0X2JlMzJ1KCZuZ2JjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChwdHNfb2Zmc2V0X3R5 cGUgPT0gMSkgeworICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5nYmMsIDIpOworICAgICAg ICAgICAgZGVmYXVsdF9wdHNfb2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKTsK KyAgICAgICAgfQorCisgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgm bmdiYykgPiAwKSB7CisgICAgICAgICAgICBzaXplX3QgICBpOworICAgICAgICAgICAgdWludDhf dCAgbnVtX29mX2F1OworICAgICAgICAgICAgdWludDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7 CisgICAgICAgICAgICB1aW50NjRfdCBtcHVfc2VxX251bTsKKworICAgICAgICAgICAgc3RydWN0 IE1QVUV4dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciAqZGVzYyA9IE5VTEw7CisKKyAgICAgICAg ICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUgPT0gMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gQVZF UlJPUl9QQVRDSFdFTENPTUU7ICAvLyB3ZSBkb24ndCBrbm93IGhvdyB0byBoYW5kbGUgdGhpcwor CisgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgKDMyICsgMiArIDYgKyAxNiArIDgp IC8gOCk7CisgICAgICAgICAgICBtcHVfc2VxX251bSA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydSgm bmdiYyk7CisgICAgICAgICAgICAvLyBza2lwOiBsZWFwX2luZGljYXRvcgorICAgICAgICAgICAg Ynl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDIgKyA2KSAvIDgpOworICAgICAgICAgICAgZGVjb2Rp bmdfdGltZV9vZmZzZXQgPSBieXRlc3RyZWFtMl9nZXRfYmUxNnUoJm5nYmMpOworICAgICAgICAg ICAgbnVtX29mX2F1ICAgICAgICAgICAgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOwor CisgICAgICAgICAgICBpZiAobXB1X3NlcV9udW0gPj0gc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9u dW1iZXIpIHsKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX2V4 dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0 cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIgPT0gbXB1 X3NlcV9udW0pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgPSBzdHJlYW1zLT5leHRf dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgZ290byBl bmQyOworICAgICAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBmb3IgKGkgPSAw OyBpIDwgc3RyZWFtcy0+bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAg ICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5z ZXF1ZW5jZV9udW1iZXIgPCBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAg ICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRv ciArIGk7CisgICAgICAgICAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICAg ICAgICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFt cF9kZXNjcmlwdG9ycyArIDEgPiBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7CisgICAg ICAgICAgICAgICAgICAgIHVpbnQ2NF90IG1heF9kaWZmID0gMDsKKyAgICAgICAgICAgICAgICAg ICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3Jz OyArK2kpCisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoRElGRihzdHJlYW1zLT5leHRfdGlt ZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2VxX251bSkgPiBtYXhf ZGlmZikgeworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2MgICAgID0gc3RyZWFtcy0+ ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICBtYXhfZGlmZiA9IERJRkYoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNl cXVlbmNlX251bWJlciwgbXB1X3NlcV9udW0pOworICAgICAgICAgICAgICAgICAgICAgICAgfQor ICAgICAgICAgICAgICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7CisgICAgICAgICAg ICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAg ICBkZXNjID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAgICAgKHZvaWQgKiop ICZzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IsICZzdHJlYW1zLT5udW1fZXh0X3Rp bWVzdGFtcF9kZXNjcmlwdG9ycywKKyAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKHN0cnVjdCBN UFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IpLCBOVUxMKTsKKyAgICAgICAgICAgICAgICBp ZiAoZGVzYyA9PSBOVUxMKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9N RU0pOworCisgICAgICAgICAgICAgICAgZW5kMToKKyAgICAgICAgICAgICAgICBkZXNjLT5zZXF1 ZW5jZV9udW1iZXIgICAgICA9IG1wdV9zZXFfbnVtOworICAgICAgICAgICAgICAgIGVuZDI6Cisg ICAgICAgICAgICAgICAgZGVzYy0+ZGVjb2RpbmdfdGltZV9vZmZzZXQgPSBkZWNvZGluZ190aW1l X29mZnNldDsKKyAgICAgICAgICAgICAgICBkZXNjLT5udW1fb2ZfYXUgICAgICAgICAgICA9IG51 bV9vZl9hdTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG51 bV9vZl9hdTsgKytpKSB7CisgICAgICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoJm5nYmMsIDIp OworICAgICAgICAgICAgICAgIGlmIChkZXNjICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAg IGRlc2MtPmF1W2ldLmR0c19wdHNfb2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2Jj KTsKKyAgICAgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0y X3NraXB1KCZuZ2JjLCAyKTsKKworICAgICAgICAgICAgICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUg PT0gMikgeworICAgICAgICAgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgMik7Cisg ICAgICAgICAgICAgICAgICAgIGlmIChkZXNjICE9IE5VTEwpCisgICAgICAgICAgICAgICAgICAg ICAgICBkZXNjLT5hdVtpXS5wdHNfb2Zmc2V0ID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2Jj KTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcHUoJm5nYmMsIDIpOworICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoZGVz YyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgICAgIGRlc2MtPmF1W2ldLnB0c19vZmZzZXQg PSBkZWZhdWx0X3B0c19vZmZzZXQ7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9s ZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX2Fk ZGl0aW9uYWxfYXJpYl9zdWJ0aXRsZV9pbmZvKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250 ZXh0ICpnYmMpIHsKKyAgICBib29sICAgIHN0YXJ0X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZzsK KyAgICBjaGFyICAgIGxhbmd1YWdlX2NvZGVbNF07CisgICAgdWludDhfdCBzdWJ0aXRsZV9mb3Jt YXQ7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsICg4ICsgNCArIDEgKyAzICsgMjQgKyAyICsg NCArIDIgKyA0ICsgNCArIDQgKyA0KSAvIDgpOworICAgIC8vIHNraXA6IHN1YnRpdGxlX3RhZwor ICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgc3RhcnRfbXB1X3NlcXVlbmNlX251 bWJlcl9mbGFnID0gKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpID4+IDMpICYgMTsKKyAgICBi eXRlc3RyZWFtMl9nZXRfYnVmZmVydShnYmMsIGxhbmd1YWdlX2NvZGUsIDMpOworICAgIGxhbmd1 YWdlX2NvZGVbM10gPSAnXDAnOworICAgIHN1YnRpdGxlX2Zvcm1hdCA9IChieXRlc3RyZWFtMl9n ZXRfYnl0ZXUoZ2JjKSA+PiAyKSAmIDBiMTExMTsKKyAgICAvKgorICAgICAqIHNraXA6CisgICAg ICogLSBUTUQKKyAgICAgKiAtIERNRgorICAgICAqIC0gcmVzb2x1dGlvbgorICAgICAqIC0gY29t cHJlc3Npb25fdHlwZQorICAgICAqLworICAgIGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgKDQgKyA0 ICsgNCArIDQpIC8gOCk7CisKKyAgICBpZiAoc3RhcnRfbXB1X3NlcXVlbmNlX251bWJlcl9mbGFn KQorICAgICAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIpOworCisgICAgc3dpdGNoIChzdWJ0 aXRsZV9mb3JtYXQpIHsKKyAgICBjYXNlIDBiMDAwMDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bh ci0+Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9UVE1MOworICAgICAgICBicmVhazsKKyAgICB9CisK KyAgICByZXR1cm4gYXZfZGljdF9zZXQoJnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxh bmd1YWdlX2NvZGUsIDApOworfQorCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9taF9kYXRhX2Nv bXBvbmVudF9kZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIEdldEJ5dGVDb250ZXh0ICpnYmMp IHsKKyAgICB1aW50OF90IGRlc2NyaXB0b3JfbGVuZ3RoOworCisgICAgRU5TVVJFX0JTX0xFRlQo Z2JjLCAoMTYgKyA4ICsgMTYpIC8gOCk7CisgICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9iZTE2dShn YmMpICE9IE1IX0RBVEFfQ09NUE9ORU5UX0RFU0NSSVBUT1IpCisgICAgICAgIHJldHVybiBBVkVS Uk9SX0lOVkFMSUREQVRBOworICAgIGRlc2NyaXB0b3JfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGV1KGdiYyk7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGRlc2NyaXB0b3JfbGVuZ3Ro KTsKKyAgICB7CisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5dGVzdHJl YW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBkZXNjcmlwdG9yX2xlbmd0aCk7CisgICAgICAg IGJ5dGVzdHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgICAgIHN3 aXRjaCAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KCZuZ2JjKSkgeworICAgICAgICBjYXNlIDB4MDAy MDogLy8gYWRkaXRpb25hbCBBUklCIHN1YnRpdGxlIGluZm8gKFRhYmxlIDctNzQsIEFSSUIgU1RE LUI2MCwgVmVyc2lvbiAxLjE0LUUxKQorICAgICAgICAgICAgcmV0dXJuIHBhcnNlX2FkZGl0aW9u YWxfYXJpYl9zdWJ0aXRsZV9pbmZvKHN0cmVhbSwgJm5nYmMpOworICAgICAgICB9CisgICAgfQor CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX3N0cmVhbV9pZGVu dGlmaWVyX2Rlc2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykg eworICAgIHVpbnQ4X3QgZGVzY3JpcHRvcl9sZW5ndGg7CisKKyAgICBFTlNVUkVfQlNfTEVGVChn YmMsICgxNiArIDggKyAxNikgLyA4KTsKKyAgICBpZiAoYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdi YykgIT0gTUhfU1RSRUFNX0lERU5USUZJRVJfREVTQ1JJUFRPUikKKyAgICAgICAgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgZGVzY3JpcHRvcl9sZW5ndGggPSBieXRlc3RyZWFtMl9n ZXRfYnl0ZXUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgZGVzY3JpcHRvcl9sZW5n dGgpOworICAgIHsKKyAgICAgICAgLy8gbm8gbmVlZCBmb3Igbm93CisgICAgfQorICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgZGVzY3JpcHRvcl9sZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9 CisKK3N0YXRpYyBpbnQgcGFyc2VfZGVzY3JpcHRvcihzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywg R2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgMyk7CisgICAg c3dpdGNoIChieXRlc3RyZWFtMl9wZWVrX2JlMTZ1KGdiYykpIHsKKyAgICBjYXNlIE1QVV9USU1F U1RBTVBfREVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21wdV90aW1lc3RhbXBfZGVz Y3JpcHRvcihzdHJlYW1zLCBnYmMpOworICAgIGNhc2UgVklERU9fQ09NUE9ORU5UX0RFU0NSSVBU T1I6CisgICAgICAgIHJldHVybiBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3JpcHRvcihzdHJl YW1zLT5zdHJlYW0sIGdiYyk7CisgICAgY2FzZSBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQ VE9SOgorICAgICAgICByZXR1cm4gcGFyc2Vfc3RyZWFtX2lkZW50aWZpZXJfZGVzY3JpcHRvcihz dHJlYW1zLT5zdHJlYW0sIGdiYyk7CisgICAgY2FzZSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJ UFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21oX2F1ZGlvX2NvbXBvbmVudF9kZXNjcmlwdG9y KHN0cmVhbXMtPnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1IX0RBVEFfQ09NUE9ORU5UX0RFU0NS SVBUT1I6CisgICAgICAgIHJldHVybiBwYXJzZV9taF9kYXRhX2NvbXBvbmVudF9kZXNjcmlwdG9y KHN0cmVhbXMtPnN0cmVhbSwgZ2JjKTsKKyAgICBjYXNlIE1QVV9FWFRFTkRFRF9USU1FU1RBTVBf REVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21wdV9leHRlbmRlZF90aW1lc3RhbXBf ZGVzY3JpcHRvcihzdHJlYW1zLCBnYmMpOworICAgIH0KKyAgICBhdl9sb2coc3RyZWFtcy0+c3Ry ZWFtLCBBVl9MT0dfSU5GTywgIlVua25vd24gZGVzY3JpcHRvcjogMHglMDR4XG4iLCBieXRlc3Ry ZWFtMl9wZWVrX2JlMTZ1KGdiYykpOworICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsK K30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbW10X3BhY2thZ2VfdGFibGUoTU1UUENvbnRl eHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAgIHVpbnQxNl90IGxlbmd0aDsKKwor ICAgIEVOU1VSRV9CU19MRUZUKGdiYywgKDggKyA4ICsgMTYgKyA2ICsgMiArIDgpIC8gOCk7Cisg ICAgaWYgKGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpICE9IE1NVF9QQUNLQUdFX1RBQkxFX0lE KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAvLyBza2lwOiB2ZXJz aW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5ndGggPSBieXRlc3Ry ZWFtMl9nZXRfYmUxNnUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywgbGVuZ3RoKTsK KyAgICB7CisgICAgICAgIHNpemVfdCAgIGksIGo7CisgICAgICAgIHVpbnQ4X3QgIHBhY2thZ2Vf aWRfbGVuZ3RoOworICAgICAgICB1aW50MTZfdCBkZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAg IHVpbnQ4X3QgIG51bWJlcl9vZl9hc3NldHM7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdi YzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7 CisKKyAgICAgICAgLy8gc2tpcDogTVBUX21vZGUKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUo Jm5nYmMsIDEpOworCisgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGV1KCZuZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgcGFja2FnZV9p ZF9sZW5ndGgpOworCisgICAgICAgIGRlc2NyaXB0b3JzX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dl dF9iZTE2KCZuZ2JjKTsKKyAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgZGVzY3JpcHRv cnNfbGVuZ3RoKTsKKworICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgMSk7CisgICAgICAg IG51bWJlcl9vZl9hc3NldHMgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworCisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBudW1iZXJfb2ZfYXNzZXRzOyArK2kpIHsKKyAgICAgICAgICAg IGludCBlcnI7CisKKyAgICAgICAgICAgIHVpbnQ4X3QgIGFzc2V0X2lkX2xlbmd0aDsKKyAgICAg ICAgICAgIHVpbnQ4X3QgIGxvY2F0aW9uX2NvdW50OworICAgICAgICAgICAgdWludDE2X3QgYXNz ZXRfZGVzY3JpcHRvcnNfbGVuZ3RoOworICAgICAgICAgICAgdWludDMyX3QgYXNzZXRfdHlwZTsK KworICAgICAgICAgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbSA9IE5VTEw7CisKKyAgICAgICAg ICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIGluZm87CisKKyAgICAgICAgICAgIEVO U1VSRV9CU19MRUZUKCZuZ2JjLCAoOCArIDMyICsgOCkgLyA4KTsKKyAgICAgICAgICAgIC8qCisg ICAgICAgICAgICAgKiBza2lwOgorICAgICAgICAgICAgICogLSBpZGVudGlmaWVyX3R5cGUKKyAg ICAgICAgICAgICAqIC0gYXNzZXRfaWRfc2NoZW1lCisgICAgICAgICAgICAgKi8KKyAgICAgICAg ICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCAoOCArIDMyKSAvIDgpOworCisgICAgICAgICAg ICBhc3NldF9pZF9sZW5ndGggPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworICAgICAg ICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgYXNzZXRfaWRfbGVuZ3RoKTsKKworICAgICAg ICAgICAgYXNzZXRfdHlwZSA9IGJ5dGVzdHJlYW0yX2dldF9sZTMyKCZuZ2JjKTsKKworICAgICAg ICAgICAgLy8gc2tpcDogYXNzZXRfY2xvY2tfcmVsYXRpb25fZmxhZworICAgICAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcCgmbmdiYywgMSk7CisKKyAgICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZu Z2JjLCAxKTsKKyAgICAgICAgICAgIGxvY2F0aW9uX2NvdW50ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5 dGV1KCZuZ2JjKTsKKworICAgICAgICAgICAgZm9yIChqID0gMDsgaiA8IGxvY2F0aW9uX2NvdW50 OyArK2opCisgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9tbXRfZ2VuZXJhbF9sb2Nh dGlvbl9pbmZvKCZpbmZvLCAmbmdiYykpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJu IGVycjsKKworICAgICAgICAgICAgc3dpdGNoIChhc3NldF90eXBlKSB7CisgICAgICAgICAgICBj YXNlIE1LVEFHKCdoJywgJ2UnLCAndicsICcxJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8u bG9jYXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAg ICAgICAgICAgICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZvLnR5 cGUwLnBhY2tldF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1 cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2Rl Y3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKKyAgICAgICAgICAgICAgICBz dHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkICAgPSBBVl9DT0RFQ19JRF9IRVZDOwor ICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFz c2V0X3R5cGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBjYXNlIE1LVEFH KCdtJywgJ3AnLCAnNCcsICdhJyk6CisgICAgICAgICAgICAgICAgaWYgKGluZm8ubG9jYXRpb25f dHlwZSAhPSAweDAwKSByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgICAgICAg ICAgc3RyZWFtID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZvLnR5cGUwLnBhY2tl dF9pZCk7CisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSByZXR1cm4gQVZFUlJP UihFTk9NRU0pOworICAgICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29k ZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9BVURJTzsKKyAgICAgICAgICAgICAgICBzdHJlYW0tPnN0 cmVhbS0+Y29kZWNwYXItPmNvZGVjX3RhZyAgPSBhc3NldF90eXBlOworICAgICAgICAgICAgICAg IGJyZWFrOworICAgICAgICAgICAgY2FzZSBNS1RBRygncycsICd0JywgJ3AnLCAncCcpOgorICAg ICAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5cGUgPT0gMHgwMCkgeworICAgICAgICAg ICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9jYXRlX3N0cmVhbShjdHgsIGluZm8udHlw ZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHN0cmVhbSA9PSBOVUxMKSBy ZXR1cm4gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgICAgICBzdHJlYW0tPnN0cmVh bS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElUTEU7CisgICAgICAg ICAgICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdGFnICA9IGFzc2V0 X3R5cGU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg ICAgICAgY2FzZSBNS1RBRygnYScsICdhJywgJ3AnLCAncCcpOgorICAgICAgICAgICAgY2FzZSBN S1RBRygnYScsICdzJywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgY2FzZSBNS1RBRygnYScsICdh JywgJ2cnLCAnZCcpOgorICAgICAgICAgICAgICAgIGJyZWFrOyAvLyBUT0RPCisgICAgICAgICAg ICB9CisKKyAgICAgICAgICAgIEVOU1VSRV9CU19MRUZUKCZuZ2JjLCAyKTsKKyAgICAgICAgICAg IGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgmbmdiYyk7 CisgICAgICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgYXNzZXRfZGVzY3JpcHRvcnNfbGVu Z3RoKTsKKyAgICAgICAgICAgIGlmIChzdHJlYW0gIT0gTlVMTCkgeworICAgICAgICAgICAgICAg IEdldEJ5dGVDb250ZXh0IG5uZ2JjOworICAgICAgICAgICAgICAgIGJ5dGVzdHJlYW0yX2luaXQo Jm5uZ2JjLCBuZ2JjLmJ1ZmZlciwgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoKTsKKworICAgICAg ICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdCgmbm5nYmMpID4gMCkK KyAgICAgICAgICAgICAgICAgICAgaWYgKChlcnIgPSBwYXJzZV9kZXNjcmlwdG9yKHN0cmVhbSwg Jm5uZ2JjKSkgPCAwKQorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKyAgICAg ICAgICAgIH0KKyAgICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXB1KCZuZ2JjLCBhc3NldF9kZXNj cmlwdG9yc19sZW5ndGgpOworICAgICAgICB9CisgICAgfQorICAgIGJ5dGVzdHJlYW0yX3NraXB1 KGdiYywgbGVuZ3RoKTsKKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGludCBw YXJzZV9wYWNrYWdlX2xpc3RfdGFibGUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQg KmdiYykgeworICAgIHNpemVfdCAgIGk7CisgICAgdWludDMyX3QgbGVuZ3RoOworCisgICAgRU5T VVJFX0JTX0xFRlQoZ2JjLCAoOCArIDggKyAxNiArIDgpIC8gOCk7CisgICAgaWYgKGJ5dGVzdHJl YW0yX2dldF9ieXRldShnYmMpICE9IFBBQ0tBR0VfTElTVF9UQUJMRV9JRCkKKyAgICAgICAgcmV0 dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgLy8gc2tpcDogdmVyc2lvbgorICAgIGJ5dGVz dHJlYW0yX3NraXB1KGdiYywgMSk7CisgICAgbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1 KGdiYyk7CisKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGxlbmd0aCk7CisgICAgeworICAgICAg ICBpbnQgICAgIGVycjsKKyAgICAgICAgdWludDhfdCBudW1fb2ZfcGFja2FnZTsKKyAgICAgICAg dWludDhfdCBudW1fb2ZfaXBfZGVsaXZlcnk7CisKKyAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdi YzsKKyAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIsIGxlbmd0aCk7 CisKKyAgICAgICAgbnVtX29mX3BhY2thZ2UgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMp OworICAgICAgICBmb3IgKGkgICAgICAgICA9IDA7IGkgPCBudW1fb2ZfcGFja2FnZTsgKytpKSB7 CisgICAgICAgICAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgICBwYWNrYWdlX2lkX2xl bmd0aDsKKyAgICAgICAgICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25JbmZvIGluZm87CisK KyAgICAgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGUoJm5n YmMpOworICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcCgmbmdiYywgcGFja2FnZV9pZF9sZW5n dGgpOworCisgICAgICAgICAgICBpZiAoKGVyciA9IHBhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9u X2luZm8oJmluZm8sICZuZ2JjKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7Cisg ICAgICAgIH0KKworICAgICAgICBFTlNVUkVfQlNfTEVGVCgmbmdiYywgMSk7CisgICAgICAgIG51 bV9vZl9pcF9kZWxpdmVyeSA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldSgmbmdiYyk7CisgICAgICAg IGZvciAoaSAgICAgICAgICAgICA9IDA7IGkgPCBudW1fb2ZfaXBfZGVsaXZlcnk7ICsraSkKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKyAgICB9CisgICAgYnl0ZXN0 cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgcGFyc2VfdGFibGUoTU1UUENvbnRleHQgKmN0eCwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgewor ICAgIEVOU1VSRV9CU19MRUZUKGdiYywgMik7CisgICAgc3dpdGNoIChieXRlc3RyZWFtMl9wZWVr X2J5dGV1KGdiYykpIHsKKyAgICBjYXNlIE1NVF9QQUNLQUdFX1RBQkxFX0lEOgorICAgICAgICBy ZXR1cm4gcGFyc2VfbW10X3BhY2thZ2VfdGFibGUoY3R4LCBnYmMpOworICAgIGNhc2UgUEFDS0FH RV9MSVNUX1RBQkxFX0lEOgorICAgICAgICByZXR1cm4gcGFyc2VfcGFja2FnZV9saXN0X3RhYmxl KGN0eCwgZ2JjKTsKKyAgICB9CisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBieXRlc3RyZWFt Ml9nZXRfYnl0ZXNfbGVmdChnYmMpKTsgLy8gVE9ETworICAgIHJldHVybiAwOworfQorCitlbnVt IHsKKyAgICBQQV9NRVNTQUdFX0lEID0gMHgwMDAwLAorfTsKKworc3RhdGljIGlubGluZSBpbnQg cGFyc2VfcGFfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7 CisgICAgdWludDMyX3QgbGVuZ3RoOworCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCAoMTYgKyA4 ICsgMzIgKyA4KSAvIDgpOworICAgIGlmIChieXRlc3RyZWFtMl9nZXRfYmUxNnUoZ2JjKSAhPSBQ QV9NRVNTQUdFX0lEKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAv LyBza2lwOiB2ZXJzaW9uCisgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCAxKTsKKyAgICBsZW5n dGggPSBieXRlc3RyZWFtMl9nZXRfYmUzMnUoZ2JjKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdi YywgbGVuZ3RoKTsKKyAgICB7CisgICAgICAgIHNpemVfdCAgaTsKKyAgICAgICAgdWludDhfdCBu dW1fb2ZfdGFibGVzOworCisgICAgICAgIEdldEJ5dGVDb250ZXh0IG5nYmM7CisgICAgICAgIGJ5 dGVzdHJlYW0yX2luaXQoJm5nYmMsIGdiYy0+YnVmZmVyLCBsZW5ndGgpOworCisgICAgICAgIG51 bV9vZl90YWJsZXMgPSBieXRlc3RyZWFtMl9nZXRfYnl0ZXUoJm5nYmMpOworICAgICAgICBmb3Ig KGkgICAgICAgID0gMDsgaSA8IG51bV9vZl90YWJsZXM7ICsraSkgeworICAgICAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcCgmbmdiYywgKDggKyA4ICsgMTYpIC8gOCk7CisgICAgICAgIH0KKworICAg ICAgICB3aGlsZSAoYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoJm5nYmMpID4gMCkgeworICAg ICAgICAgICAgaW50IGVyciA9IHBhcnNlX3RhYmxlKGN0eCwgJm5nYmMpOworICAgICAgICAgICAg aWYgKGVyciA8IDApIHJldHVybiBlcnI7CisgICAgICAgIH0KKyAgICB9CisgICAgYnl0ZXN0cmVh bTJfc2tpcHUoZ2JjLCBsZW5ndGgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQg cGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlKE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0 ICpnYmMpIHsKKyAgICBFTlNVUkVfQlNfTEVGVChnYmMsIDQpOworICAgIHN3aXRjaCAoYnl0ZXN0 cmVhbTJfcGVla19iZTE2dShnYmMpKSB7CisgICAgY2FzZSBQQV9NRVNTQUdFX0lEOgorICAgICAg ICByZXR1cm4gcGFyc2VfcGFfbWVzc2FnZShjdHgsIGdiYyk7CisgICAgfQorICAgIHJldHVybiAw OworfQorCitlbnVtIEZyYWdtZW50YXRpb25JbmRpY2F0b3IgeworICAgIE5PVF9GUkFHTUVOVEVE ICA9IDBiMDAsCisgICAgRklSU1RfRlJBR01FTlQgID0gMGIwMSwKKyAgICBNSURETEVfRlJBR01F TlQgPSAwYjEwLAorICAgIExBU1RfRlJBR01FTlQgICA9IDBiMTEsCit9OworCitzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgeworICAgIHVpbnQxNl90ICAgICAgICAgICAgICAgICBwaWQ7CisgICAg c3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICpuZXh0OworCisgICAgdWludDhfdCAqZGF0YTsKKyAg ICBzaXplX3QgIHNpemUsIGNhcDsKKworICAgIHVpbnQzMl90IGxhc3Rfc2VxOworCisgICAgZW51 bSB7CisgICAgICAgIElOSVQgPSAwLAorICAgICAgICBOT1RfU1RBUlRFRCwKKyAgICAgICAgSU5f RlJBR01FTlQsCisgICAgICAgIFNLSVAsCisgICAgfSAgICAgICAgc3RhdGU7Cit9OworCitpbmxp bmUgc3RhdGljIGludCBhcHBlbmRfZGF0YShzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmN0eCwg Y29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3Qgc2l6ZSkgeworICAgIGlmIChjdHgtPnNpemUg KyBzaXplID4gVUlOVDMyX01BWCkgcmV0dXJuIEFWRVJST1IoRU9WRVJGTE9XKTsKKyAgICBpZiAo Y3R4LT5jYXAgPCBjdHgtPnNpemUgKyBzaXplKSB7CisgICAgICAgIHZvaWQgICAqbmV3X2RhdGE7 CisgICAgICAgIHNpemVfdCBuZXdfY2FwID0gY3R4LT5jYXAgPT0gMCA/IDEwMjQgOiBjdHgtPmNh cCAqIDI7CisgICAgICAgIHdoaWxlIChuZXdfY2FwIDwgY3R4LT5zaXplICsgc2l6ZSkgbmV3X2Nh cCAqPSAyOworCisgICAgICAgIG5ld19kYXRhID0gYXZfcmVhbGxvYyhjdHgtPmRhdGEsIG5ld19j YXApOworICAgICAgICBpZiAobmV3X2RhdGEgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8p OworICAgICAgICBjdHgtPmRhdGEgPSBuZXdfZGF0YTsKKyAgICAgICAgY3R4LT5jYXAgID0gbmV3 X2NhcDsKKyAgICB9CisgICAgbWVtY3B5KGN0eC0+ZGF0YSArIGN0eC0+c2l6ZSwgZGF0YSwgc2l6 ZSk7CisgICAgY3R4LT5zaXplICs9IHNpemU7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgaW50IGNoZWNrX3N0YXRlKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFz c2VtYmxlciAqYXNzLCB1aW50MzJfdCBzZXFfbnVtKSB7CisgICAgaWYgKGFzcy0+c3RhdGUgPT0g SU5JVCkgeworICAgICAgICBhc3MtPnN0YXRlID0gU0tJUDsKKyAgICB9IGVsc2UgaWYgKHNlcV9u dW0gIT0gYXNzLT5sYXN0X3NlcSArIDEpIHsKKyAgICAgICAgaWYgKGFzcy0+c2l6ZSAhPSAwKSB7 CisgICAgICAgICAgICBhdl9sb2coY3R4LT5zLCBBVl9MT0dfV0FSTklORywKKyAgICAgICAgICAg ICAgICAgICAiUGFja2V0IHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEgIT0gJXUsIGRyb3Ag JXp1IGJ5dGVzXG4iLAorICAgICAgICAgICAgICAgICAgIGFzcy0+bGFzdF9zZXEsIHNlcV9udW0s IGFzcy0+c2l6ZSk7CisgICAgICAgICAgICBhc3MtPnNpemUgPSAwOworICAgICAgICB9IGVsc2Ug eworICAgICAgICAgICAgYXZfbG9nKGN0eC0+cywgQVZfTE9HX1dBUk5JTkcsICJQYWNrZXQgc2Vx dWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldVxuIiwKKyAgICAgICAgICAgICAgICAgICBh c3MtPmxhc3Rfc2VxLCBzZXFfbnVtKTsKKyAgICAgICAgfQorICAgICAgICBhc3MtPnN0YXRlID0g U0tJUDsKKyAgICB9CisgICAgYXNzLT5sYXN0X3NlcSA9IHNlcV9udW07CisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbnQgYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgc3RydWN0IEZyYWdtZW50 QXNzZW1ibGVyICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIGVudW0gRnJhZ21lbnRhdGlvbkluZGlj YXRvciBpbmRpY2F0b3IsCisgICAgY29uc3QgdWludDhfdCAqZGF0YSwgdWludDMyX3Qgc2l6ZSwg aW50ICgqcGFyc2VyKShNTVRQQ29udGV4dCAqLCBHZXRCeXRlQ29udGV4dCAqKSwKKyAgICBNTVRQ Q29udGV4dCAqb3BhcXVlKSB7CisgICAgR2V0Qnl0ZUNvbnRleHQgZ2JjOworICAgIGludCAgICAg ICAgICAgIGVycjsKKworICAgIGlmIChpbmRpY2F0b3IgPT0gTk9UX0ZSQUdNRU5URUQpIHsKKyAg ICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gSU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFM SUREQVRBOworICAgICAgICBjdHgtPnN0YXRlID0gTk9UX1NUQVJURUQ7CisgICAgICAgIGJ5dGVz dHJlYW0yX2luaXQoJmdiYywgZGF0YSwgc2l6ZSk7CisgICAgICAgIHJldHVybiBwYXJzZXIob3Bh cXVlLCAmZ2JjKTsKKyAgICB9CisKKyAgICBpZiAoaW5kaWNhdG9yID09IEZJUlNUX0ZSQUdNRU5U KSB7CisgICAgICAgIGlmIChjdHgtPnN0YXRlID09IElOX0ZSQUdNRU5UKSByZXR1cm4gQVZFUlJP Ul9JTlZBTElEREFUQTsKKyAgICAgICAgY3R4LT5zdGF0ZSA9IElOX0ZSQUdNRU5UOworICAgICAg ICByZXR1cm4gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAo aW5kaWNhdG9yID09IE1JRERMRV9GUkFHTUVOVCkgeworICAgICAgICBpZiAoY3R4LT5zdGF0ZSA9 PSBTS0lQKSB7CisgICAgICAgICAgICBhdl9sb2cob3BhcXVlLT5zLCBBVl9MT0dfVkVSQk9TRSwg IkRyb3AgcGFja2V0ICV1XG4iLCBzZXFfbnVtKTsKKyAgICAgICAgICAgIHJldHVybiAwOworICAg ICAgICB9CisgICAgICAgIGlmIChjdHgtPnN0YXRlICE9IElOX0ZSQUdNRU5UKSByZXR1cm4gQVZF UlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZF9kYXRhKGN0eCwgZGF0YSwg c2l6ZSk7CisgICAgfQorCisgICAgaWYgKGluZGljYXRvciA9PSBMQVNUX0ZSQUdNRU5UKSB7Cisg ICAgICAgIGlmIChjdHgtPnN0YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhvcGFx dWUtPnMsIEFWX0xPR19WRVJCT1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOworICAg ICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgIT0g SU5fRlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBpZiAoKGVy ciA9IGFwcGVuZF9kYXRhKGN0eCwgZGF0YSwgc2l6ZSkpIDwgMCkgcmV0dXJuIGVycjsKKworICAg ICAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGN0eC0+ZGF0YSwgY3R4LT5zaXplKTsKKyAgICAg ICAgZXJyID0gcGFyc2VyKG9wYXF1ZSwgJmdiYyk7CisKKyAgICAgICAgY3R4LT5zaXplICA9IDA7 CisgICAgICAgIGN0eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgcmV0dXJuIGVycjsK KyAgICB9CisKKyAgICByZXR1cm4gQVZFUlJPUl9PUFRJT05fTk9UX0ZPVU5EOworfQorCitzdGF0 aWMgaW5saW5lIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqZmluZF9vcl9hbGxvY2F0ZV9hc3Nl bWJsZXIoTU1UUENvbnRleHQgKmN0eCwgdWludDE2X3QgcGlkKSB7CisgICAgc3RydWN0IEZyYWdt ZW50QXNzZW1ibGVyICphc3M7CisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9 IE5VTEw7IGFzcyA9IGFzcy0+bmV4dCkKKyAgICAgICAgaWYgKGFzcy0+cGlkID09IHBpZCkKKyAg ICAgICAgICAgIHJldHVybiBhc3M7CisKKyAgICBhc3MgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1 Y3QgRnJhZ21lbnRBc3NlbWJsZXIpKTsKKyAgICBpZiAoYXNzID09IE5VTEwpIHJldHVybiBOVUxM OworICAgIGFzcy0+cGlkICAgICAgICAgICAgICA9IHBpZDsKKyAgICBhc3MtPm5leHQgICAgICAg ICAgICAgPSBjdHgtPmFzc2VtYmxlcjsKKyAgICByZXR1cm4gY3R4LT5hc3NlbWJsZXIgPSBhc3M7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoTU1UUENv bnRleHQgKmN0eCwgdWludDMyX3Qgc2VxX251bSwgR2V0Qnl0ZUNvbnRleHQgKmdiYykgeworICAg IGludCAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7CisgICAgdWludDhfdCAgICAgICAgICAg ICAgICAgICAgIGJ5dGU7CisgICAgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGZyYWdtZW50 YXRpb25faW5kaWNhdG9yOworICAgIGJvb2wgICAgICAgICAgICAgICAgICAgICAgICBsZW5ndGhf ZXh0ZW5zaW9uX2ZsYWc7CisgICAgYm9vbCAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0 aW9uX2ZsYWc7CisKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciA9IGZp bmRfb3JfYWxsb2NhdGVfYXNzZW1ibGVyKGN0eCwgY3R4LT5jdXJyZW50X3BpZCk7CisgICAgaWYg KGFzc2VtYmxlciA9PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisKKyAgICBFTlNVUkVf QlNfTEVGVChnYmMsICgyICsgNCArIDEgKyAxICsgOCkgLyA4KTsKKyAgICBieXRlICAgICAgICAg ICAgICAgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMpOworICAgIGZyYWdtZW50YXRp b25faW5kaWNhdG9yID0gYnl0ZSA+PiA2OworICAgIGxlbmd0aF9leHRlbnNpb25fZmxhZyAgID0g KGJ5dGUgPj4gMSkgJiAxOworICAgIGFnZ3JlZ2F0aW9uX2ZsYWcgICAgICAgID0gYnl0ZSAmIDE7 CisKKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworCisgICAgaWYgKChlcnIgPSBjaGVj a19zdGF0ZShjdHgsIGFzc2VtYmxlciwgc2VxX251bSkpIDwgMCkKKyAgICAgICAgcmV0dXJuIGVy cjsKKworICAgIGlmICghYWdncmVnYXRpb25fZmxhZykKKyAgICAgICAgcmV0dXJuIGFzc2VtYmxl X2ZyYWdtZW50KAorICAgICAgICAgICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBmcmFnbWVudGF0aW9u X2luZGljYXRvciwKKyAgICAgICAgICAgIGdiYy0+YnVmZmVyLCBieXRlc3RyZWFtMl9nZXRfYnl0 ZXNfbGVmdChnYmMpLAorICAgICAgICAgICAgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlLCBjdHgp OworCisgICAgaWYgKGZyYWdtZW50YXRpb25faW5kaWNhdG9yICE9IE5PVF9GUkFHTUVOVEVEKQor ICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsgLy8gY2Fubm90IGJlIGJvdGggZnJh Z21lbnRlZCBhbmQgYWdncmVnYXRlZAorCisgICAgd2hpbGUgKGJ5dGVzdHJlYW0yX2dldF9ieXRl c19sZWZ0KGdiYykgPiAwKSB7CisgICAgICAgIHVpbnQzMl90IGxlbmd0aDsKKworICAgICAgICBp ZiAobGVuZ3RoX2V4dGVuc2lvbl9mbGFnKQorICAgICAgICAgICAgbGVuZ3RoID0gYnl0ZXN0cmVh bTJfZ2V0X2JlMzIoZ2JjKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbGVuZ3RoID0gYnl0 ZXN0cmVhbTJfZ2V0X2JlMTYoZ2JjKTsKKworICAgICAgICBFTlNVUkVfQlNfTEVGVChnYmMsIGxl bmd0aCk7CisgICAgICAgIGlmICgoZXJyID0gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgICAg ICBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELAorICAgICAgICAgICAgZ2JjLT5i dWZmZXIsIGxlbmd0aCwgcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlLCBjdHgpKSA8IDApCisgICAg ICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0 aCk7CisgICAgfQorCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IGZpbGxf cHRzX2R0cyhNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgU3RyZWFtcyAqcykgeworICAgIHN0cnVj dCBNUFVUaW1lc3RhbXBEZXNjcmlwdG9yICAgICAgICAgKmRlc2MgICAgID0gTlVMTDsKKyAgICBz dHJ1Y3QgTVBVRXh0ZW5kZWRUaW1lc3RhbXBEZXNjcmlwdG9yICpleHRfZGVzYyA9IE5VTEw7Cisg ICAgaW50NjRfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdGltZTsKKyAgICBzaXpl X3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGksIGo7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKSB7CisgICAgICAgIGlmIChz LT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIgPT0gcy0+bGFzdF9zZXF1 ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAgIGRlc2MgPSBzLT50aW1lc3RhbXBfZGVzY3JpcHRv ciArIGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGZvciAo aSA9IDA7IGkgPCBzLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKSB7CisgICAg ICAgIGlmIChzLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxdWVuY2VfbnVtYmVyID09 IHMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSB7CisgICAgICAgICAgICBleHRfZGVzYyA9IHMtPmV4 dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg fQorICAgIH0KKworICAgIGlmIChkZXNjID09IE5VTEwgfHwgZXh0X2Rlc2MgPT0gTlVMTCkgcmV0 dXJuIEZGRVJST1JfUkVETzsKKyAgICBwdGltZSA9IGF2X3Jlc2NhbGUoZGVzYy0+cHJlc2VudGF0 aW9uX3RpbWUsIHMtPnN0cmVhbS0+dGltZV9iYXNlLmRlbiwgMTAwMDAwMGxsICogcy0+c3RyZWFt LT50aW1lX2Jhc2UubnVtKTsKKworICAgIGlmIChzLT5hdV9jb3VudCA+PSBleHRfZGVzYy0+bnVt X29mX2F1KQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAgIGN0eC0+ cGt0LT5kdHMgPSBwdGltZSAtIGV4dF9kZXNjLT5kZWNvZGluZ190aW1lX29mZnNldDsKKworICAg IGZvciAoaiA9IDA7IGogPCBzLT5hdV9jb3VudDsgKytqKQorICAgICAgICBjdHgtPnBrdC0+ZHRz ICs9IGV4dF9kZXNjLT5hdVtqXS5wdHNfb2Zmc2V0OworCisgICAgY3R4LT5wa3QtPnB0cyA9IGN0 eC0+cGt0LT5kdHMgKyBleHRfZGVzYy0+YXVbcy0+YXVfY291bnRdLmR0c19wdHNfb2Zmc2V0Owor CisgICAgKytzLT5hdV9jb3VudDsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBp bnQgZW1pdF9jbG9zZWRfY2FwdGlvbl9tZnUoTU1UUENvbnRleHQgKmN0eCwgc3RydWN0IFN0cmVh bXMgKnN0LCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAgdWludDhfdCAgZGF0YV90eXBlLCBz dWJzYW1wbGVfbnVtYmVyLCBsYXN0X3N1YnNhbXBsZV9udW1iZXIsIGJ5dGU7CisgICAgdWludDMy X3QgZGF0YV9zaXplOworICAgIHNpemVfdCAgIGk7CisgICAgaW50ICAgICAgZXJyOworICAgIGJv b2wgICAgIGxlbmd0aF9leHRfZmxhZywgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnOworCisgICAg YXZfYXNzZXJ0MChjdHgtPnBrdCAhPSBOVUxMKTsKKworICAgIEVOU1VSRV9CU19MRUZUKGdiYywg KDggKyA4ICsgOCArIDggKyA0ICsgMSArIDEgKyAyKSAvIDgpOworCisgICAgLyoKKyAgICAgKiBz a2lwOgorICAgICAqIC0gc3VidGl0bGVfdGFnCisgICAgICogLSBzdWJ0aXRsZV9zZXF1ZW5jZV9u dW1iZXIKKyAgICAgKi8KKyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsICg4ICsgOCkgLyA4KTsK KworICAgIHN1YnNhbXBsZV9udW1iZXIgICAgICA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMp OworICAgIGxhc3Rfc3Vic2FtcGxlX251bWJlciA9IGJ5dGVzdHJlYW0yX2dldF9ieXRldShnYmMp OworCisgICAgYnl0ZSAgICAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGV1 KGdiYyk7CisgICAgZGF0YV90eXBlICAgICAgICAgICAgICAgID0gYnl0ZSA+PiA0OworICAgIGxl bmd0aF9leHRfZmxhZyAgICAgICAgICA9IChieXRlID4+IDMpICYgMTsKKyAgICBzdWJzYW1wbGVf aW5mb19saXN0X2ZsYWcgPSAoYnl0ZSA+PiAyKSAmIDE7CisKKyAgICBpZiAoZGF0YV90eXBlICE9 IDBiMDAwMCkgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworCisgICAgaWYgKGxlbmd0aF9l eHRfZmxhZykKKyAgICAgICAgZGF0YV9zaXplID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMzIoZ2JjKTsK KyAgICBlbHNlCisgICAgICAgIGRhdGFfc2l6ZSA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2KGdiYyk7 CisKKyAgICBpZiAoc3Vic2FtcGxlX251bWJlciA9PSAwICYmIGxhc3Rfc3Vic2FtcGxlX251bWJl ciA+IDAgJiYgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnKSB7CisgICAgICAgIGZvciAoaSA9IDA7 IGkgPCBsYXN0X3N1YnNhbXBsZV9udW1iZXI7ICsraSkgeworICAgICAgICAgICAgLy8gc2tpcDog c3Vic2FtcGxlX2lfZGF0YV90eXBlCisgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwKGdiYywg KDQgKyA0KSAvIDgpOworICAgICAgICAgICAgLy8gc2tpcDogc3Vic2FtcGxlX2lfZGF0YV9zaXpl CisgICAgICAgICAgICBpZiAobGVuZ3RoX2V4dF9mbGFnKSB7CisgICAgICAgICAgICAgICAgYnl0 ZXN0cmVhbTJfc2tpcChnYmMsIDMyIC8gOCk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoZ2JjLCAxNiAvIDgpOworICAgICAgICAgICAgfQor ICAgICAgICB9CisgICAgfQorCisgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBkYXRhX3NpemUpOwor ICAgIGlmICgoZXJyID0gYXZfbmV3X3BhY2tldChjdHgtPnBrdCwgZGF0YV9zaXplKSkgPCAwKSBy ZXR1cm4gZXJyOworICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywgY3R4LT5wa3QtPmRh dGEsIGRhdGFfc2l6ZSk7CisKKyAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVh bS0+aW5kZXg7CisgICAgY3R4LT5wa3QtPmZsYWdzIHw9IHN0LT5mbGFnczsKKyAgICBjdHgtPnBr dC0+cG9zICAgICAgICAgID0gc3QtPm9mZnNldDsKKyAgICBjdHgtPnBrdCAgICAgICAgICAgICAg ID0gTlVMTDsKKworICAgIHN0LT5mbGFncyAgPSAwOworICAgIHN0LT5vZmZzZXQgPSAtMTsKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbWl0X3BhY2tldChNTVRQQ29udGV4dCAqY3R4 LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsIEFWQnVmZmVyUmVmICpidWYpIHsKKyAgICBpbnQgZXJyOwor ICAgIGF2X2Fzc2VydDAoY3R4LT5wa3QgIT0gTlVMTCk7CisgICAgYXZfcGFja2V0X3VucmVmKGN0 eC0+cGt0KTsKKyAgICBpZiAoKGVyciA9IGZpbGxfcHRzX2R0cyhjdHgsIHN0KSkgPCAwKSB7Cisg ICAgICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9 CisgICAgY3R4LT5wa3QtPmJ1ZiAgICAgICAgICA9IGJ1ZjsKKyAgICBjdHgtPnBrdC0+ZGF0YSAg ICAgICAgID0gYnVmLT5kYXRhOworICAgIGN0eC0+cGt0LT5zaXplICAgICAgICAgPSBidWYtPnNp emUgLSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOworICAgIGN0eC0+cGt0LT5zdHJlYW1f aW5kZXggPSBzdC0+c3RyZWFtLT5pbmRleDsKKyAgICBjdHgtPnBrdC0+ZmxhZ3MgfD0gc3QtPmZs YWdzOworICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+b2Zmc2V0OworICAgIGN0eC0+ cGt0ICAgICAgICAgICAgICAgPSBOVUxMOworCisgICAgc3QtPmZsYWdzICA9IDA7CisgICAgc3Qt Pm9mZnNldCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbnN1bWVfbWZ1 KE1NVFBDb250ZXh0ICpjdHgsIEdldEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAgICBpbnQgICAgICAg ICAgICBlcnI7CisgICAgQVZCdWZmZXJSZWYgICAgKmJ1Zl9yZWY7CisgICAgdW5zaWduZWQgaW50 ICAgc2l6ZTsKKyAgICB1aW50OF90ICAgICAgICBieXRlOworICAgIHNpemVfdCAgICAgICAgIG9s ZF9zaXplOworICAgIHN0cnVjdCBTdHJlYW1zICpzdCA9IGZpbmRfY3VycmVudF9zdHJlYW0oY3R4 KTsKKyAgICBhdl9hc3NlcnQwKHN0ICE9IE5VTEwpOworCisgICAgc3dpdGNoIChzdC0+c3RyZWFt LT5jb2RlY3Bhci0+Y29kZWNfaWQpIHsKKyAgICBjYXNlIEFWX0NPREVDX0lEX0hFVkM6CisgICAg ICAgIHNpemUgPSBieXRlc3RyZWFtMl9nZXRfYmUzMihnYmMpOworICAgICAgICBpZiAoc2l6ZSAh PSBieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKSByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICAgICAgaWYgKHNpemUgPCAxKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsg Ly8gd2UgZXhwZWN0IHRvIGV4dHJhY3QgTkFMIHVuaXQgaGVhZGVyIHR5cGUgYmVsb3cKKyAgICAg ICAgYnl0ZSA9IGJ5dGVzdHJlYW0yX3BlZWtfYnl0ZXUoZ2JjKTsKKyAgICAgICAgaWYgKChieXRl ID4+IDcpICE9IDApIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBmb3JiaWRkZW5femVy b19iaXQKKworICAgICAgICBvbGRfc2l6ZSA9IHN0LT5wZW5kaW5nX2J1ZmZlciA9PSBOVUxMID8g MCA6IChzdC0+cGVuZGluZ19idWZmZXItPnNpemUgLSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19T SVpFKTsKKyAgICAgICAgaWYgKChlcnIgPSBhdl9idWZmZXJfcmVhbGxvYygmc3QtPnBlbmRpbmdf YnVmZmVyLCBvbGRfc2l6ZSArIHNpemUgKyA0ICsgQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0la RSkpIDwgMCkKKyAgICAgICAgICAgIHJldHVybiBlcnI7CisgICAgICAgIC8vIGZpeCBzdGFydCBj b2RlICgwMCAwMCAwMCAwMSkKKyAgICAgICAgQVZfV0IzMihzdC0+cGVuZGluZ19idWZmZXItPmRh dGEgKyBvbGRfc2l6ZSwgMSk7CisgICAgICAgIGJ5dGVzdHJlYW0yX2dldF9idWZmZXJ1KGdiYywg c3QtPnBlbmRpbmdfYnVmZmVyLT5kYXRhICsgb2xkX3NpemUgKyA0LCBzaXplKTsKKyAgICAgICAg aWYgKCgoYnl0ZSA+PiAxKSAmIDBiMTExMTExKSA8IDB4MjApIHsgLy8gYSBWQ0wgTkFMIHVuaXQK KyAgICAgICAgICAgIC8vIEJlY2F1c2Ugd2UgY2FuJ3QgZW1pdCBhIHBhY2tldCB3aXRob3V0IGEg dmFsaWQgUFRTLCB3ZSBuZWVkIHRvCisgICAgICAgICAgICAvLyBhZ2dyZWdhdGUgdGhlIG5vbi1W Q0wgTkFMIHVuaXRzIHdpdGggVkNMIG9uZXMuIEFsdGhvdWdoIHdlIGRpZG4ndAorICAgICAgICAg ICAgLy8gdGVjaG5pY2FsbHkgaWRlbnRpZnkgYW4gYWNjZXNzIHVuaXQgaGVyZSwgdGhpcyB3b3Jr cyBmb3IgYWxsIHNhbXBsZXMKKyAgICAgICAgICAgIC8vIHdlIGhhdmUuCisgICAgICAgICAgICBi dWZfcmVmID0gc3QtPnBlbmRpbmdfYnVmZmVyOworICAgICAgICAgICAgc3QtPnBlbmRpbmdfYnVm ZmVyID0gTlVMTDsKKworICAgICAgICAgICAgbWVtc2V0KGJ1Zl9yZWYtPmRhdGEgKyBvbGRfc2l6 ZSArIHNpemUgKyA0LCAwLCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAgICAg ICAgIHJldHVybiBlbWl0X3BhY2tldChjdHgsIHN0LCBidWZfcmVmKTsKKyAgICAgICAgfQorICAg ICAgICBicmVhazsKKyAgICBjYXNlIEFWX0NPREVDX0lEX0FBQ19MQVRNOgorICAgICAgICBzaXpl ID0gYnl0ZXN0cmVhbTJfZ2V0X2J5dGVzX2xlZnQoZ2JjKTsKKyAgICAgICAgaWYgKHNpemUgPj4g MTMpIHJldHVybiBBVkVSUk9SKEVPVkVSRkxPVyk7CisgICAgICAgIGlmICgoYnVmX3JlZiA9IGF2 X2J1ZmZlcl9hbGxvYyhzaXplICsgMyArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpKSA9 PSBOVUxMKQorICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgYnVm X3JlZi0+ZGF0YVswXSA9IDB4NTY7CisgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMV0gPSAweGUwIHwg KHNpemUgPj4gOCk7CisgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMl0gPSBzaXplICYgMHhmZjsKKyAg ICAgICAgYnl0ZXN0cmVhbTJfZ2V0X2J1ZmZlcnUoZ2JjLCBidWZfcmVmLT5kYXRhICsgMywgc2l6 ZSk7CisgICAgICAgIG1lbXNldChidWZfcmVmLT5kYXRhICsgMyArIHNpemUsIDAsIEFWX0lOUFVU X0JVRkZFUl9QQURESU5HX1NJWkUpOworICAgICAgICByZXR1cm4gZW1pdF9wYWNrZXQoY3R4LCBz dCwgYnVmX3JlZik7CisgICAgY2FzZSBBVl9DT0RFQ19JRF9UVE1MOgorICAgICAgICByZXR1cm4g ZW1pdF9jbG9zZWRfY2FwdGlvbl9tZnUoY3R4LCBzdCwgZ2JjKTsKKyAgICBkZWZhdWx0OgorICAg ICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgfQorCisgICAgcmV0dXJuIDA7 Cit9CisKK3N0YXRpYyBpbmxpbmUgaW50IHBhcnNlX21mdV90aW1lZF9kYXRhKAorICAgIE1NVFBD b250ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAorICAgIHVp bnQzMl90IHNlcV9udW0sIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsIEdl dEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgKDMyICsgMzIg KyAzMiArIDggKyA4KSAvIDgpOworICAgIHJldHVybiBhc3NlbWJsZV9mcmFnbWVudCgKKyAgICAg ICAgYXNzZW1ibGVyLCBzZXFfbnVtLCBpbmRpY2F0b3IsCisgICAgICAgIGdiYy0+YnVmZmVyLCBi eXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpLAorICAgICAgICBjb25zdW1lX21mdSwgY3R4 KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKAorICAg IE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAor ICAgIHVpbnQzMl90IHNlcV9udW0sIGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0 b3IsIEdldEJ5dGVDb250ZXh0ICpnYmMpIHsKKyAgICBieXRlc3RyZWFtMl9za2lwKGdiYywgMzIg LyA4KTsKKyAgICByZXR1cm4gYXNzZW1ibGVfZnJhZ21lbnQoCisgICAgICAgIGFzc2VtYmxlciwg c2VxX251bSwgaW5kaWNhdG9yLAorICAgICAgICBnYmMtPmJ1ZmZlciwgYnl0ZXN0cmVhbTJfZ2V0 X2J5dGVzX2xlZnQoZ2JjKSwKKyAgICAgICAgY29uc3VtZV9tZnUsIGN0eCk7Cit9CisKK3N0YXRp YyBpbmxpbmUgaW50IHBhcnNlX21wdShNTVRQQ29udGV4dCAqY3R4LCB1aW50MzJfdCBzZXFfbnVt LCBHZXRCeXRlQ29udGV4dCAqZ2JjKSB7CisgICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAg IGVycjsKKyAgICB1aW50OF90ICAgICAgICAgICAgICAgICAgICAgYnl0ZSwgZnJhZ21lbnRfdHlw ZTsKKyAgICBib29sICAgICAgICAgICAgICAgICAgICAgICAgdGltZWRfZmxhZzsKKyAgICBlbnVt IEZyYWdtZW50YXRpb25JbmRpY2F0b3IgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3I7CisgICAgYm9v bCAgICAgICAgICAgICAgICAgICAgICAgIGFnZ3JlZ2F0aW9uX2ZsYWc7CisgICAgdWludDE2X3Qg ICAgICAgICAgICAgICAgICAgIGxlbmd0aDsKKyAgICB1aW50MzJfdCAgICAgICAgICAgICAgICAg ICAgbXB1X3NlcXVlbmNlX251bWJlcjsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgICAg KmFzc2VtYmxlcjsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgICAgKnN0cmVhbXM7CisK KyAgICBzdHJlYW1zID0gZmluZF9jdXJyZW50X3N0cmVhbShjdHgpOworICAgIGlmIChzdHJlYW1z ID09IE5VTEwpIHJldHVybiAwOworICAgIGlmIChzdHJlYW1zLT5zdHJlYW0tPmRpc2NhcmQgPj0g QVZESVNDQVJEX0FMTCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBhc3NlbWJsZXIgPSBmaW5k X29yX2FsbG9jYXRlX2Fzc2VtYmxlcihjdHgsIGN0eC0+Y3VycmVudF9waWQpOworICAgIGlmIChh c3NlbWJsZXIgPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoZXJybm8pOworCisgICAgRU5TVVJFX0JT X0xFRlQoZ2JjLCAoMTYgKyA0ICsgMSArIDIgKyAxICsgOCArIDMyKSAvIDgpOworCisgICAgbGVu Z3RoID0gYnl0ZXN0cmVhbTJfZ2V0X2JlMTZ1KGdiYyk7CisgICAgaWYgKGxlbmd0aCAhPSBieXRl c3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChnYmMpKQorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZB TElEREFUQTsKKworICAgIGJ5dGUgICAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJfZ2V0 X2J5dGV1KGdiYyk7CisgICAgZnJhZ21lbnRfdHlwZSAgICAgICAgICAgPSBieXRlID4+IDQ7Cisg ICAgdGltZWRfZmxhZyAgICAgICAgICAgICAgPSAoYnl0ZSA+PiAzKSAmIDE7CisgICAgZnJhZ21l bnRhdGlvbl9pbmRpY2F0b3IgPSAoYnl0ZSA+PiAxKSAmIDBiMTE7CisgICAgYWdncmVnYXRpb25f ZmxhZyAgICAgICAgPSBieXRlICYgMTsKKworICAgIC8vIHNraXA6IGZyYWdtZW50X2NvdW50ZXIK KyAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIDEpOworCisgICAgbXB1X3NlcXVlbmNlX251bWJl ciA9IGJ5dGVzdHJlYW0yX2dldF9iZTMydShnYmMpOworCisgICAgaWYgKGFnZ3JlZ2F0aW9uX2Zs YWcgJiYgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgIT0gTk9UX0ZSQUdNRU5URUQpCisgICAgICAg IHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyBjYW5ub3QgYmUgYm90aCBmcmFnbWVudGVk IGFuZCBhZ2dyZWdhdGVkCisKKyAgICBpZiAoZnJhZ21lbnRfdHlwZSAhPSAyKSByZXR1cm4gMDsK KworICAgIGlmIChhc3NlbWJsZXItPnN0YXRlID09IElOSVQgJiYgIWN0eC0+aXNfcmFwKSB7Cisg ICAgICAgIC8vIHdhaXQgZm9yIHRoZSBmaXJzdCBSQVAKKyAgICAgICAgcmV0dXJuIEZGRVJST1Jf UkVETzsKKyAgICB9CisKKyAgICBpZiAoYXNzZW1ibGVyLT5zdGF0ZSA9PSBJTklUKSB7CisgICAg ICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyID0gbXB1X3NlcXVlbmNlX251bWJlcjsK KyAgICB9IGVsc2UgaWYgKG1wdV9zZXF1ZW5jZV9udW1iZXIgPT0gc3RyZWFtcy0+bGFzdF9zZXF1 ZW5jZV9udW1iZXIgKyAxKSB7CisgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVy ID0gbXB1X3NlcXVlbmNlX251bWJlcjsKKyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAgICAg ICAgICAgPSAwOworICAgIH0gZWxzZSBpZiAobXB1X3NlcXVlbmNlX251bWJlciAhPSBzdHJlYW1z LT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICBhdl9sb2coc3RyZWFtcy0+c3RyZWFt LCBBVl9MT0dfRVJST1IsICJNUFUgc2VxdWVuY2UgbnVtYmVyIGp1bXA6ICV1ICsgMSAhPSAldVxu IiwKKyAgICAgICAgICAgICAgIHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2Vx dWVuY2VfbnVtYmVyKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAg fQorCisgICAgaWYgKChlcnIgPSBjaGVja19zdGF0ZShjdHgsIGFzc2VtYmxlciwgc2VxX251bSkp IDwgMCkKKyAgICAgICAgcmV0dXJuIGVycjsKKworICAgIGlmIChmcmFnbWVudGF0aW9uX2luZGlj YXRvciA9PSBOT1RfRlJBR01FTlRFRCB8fCBmcmFnbWVudGF0aW9uX2luZGljYXRvciA9PSBGSVJT VF9GUkFHTUVOVCkKKyAgICAgICAgc3RyZWFtcy0+b2Zmc2V0ID0gY3R4LT5wa3QtPnBvczsKKwor ICAgIGlmIChjdHgtPmlzX3JhcCkKKyAgICAgICAgc3RyZWFtcy0+ZmxhZ3MgfD0gQVZfUEtUX0ZM QUdfS0VZOworCisgICAgaWYgKHRpbWVkX2ZsYWcpIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0aW9u X2ZsYWcpIHsKKyAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVmdChn YmMpID4gMCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2 KGdiYyk7CisgICAgICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBsZW5ndGgpOworICAg ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdiYzsK KyAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZmZXIs IGxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VfbWZ1X3RpbWVkX2Rh dGEoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIE5PVF9GUkFHTUVOVEVELCAmbmdiYyk7CisgICAg ICAgICAgICAgICAgICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworICAgICAgICAgICAgICAg IH0KKyAgICAgICAgICAgICAgICBieXRlc3RyZWFtMl9za2lwdShnYmMsIGxlbmd0aCk7CisgICAg ICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICByZXR1cm4gcGFyc2VfbWZ1 X3RpbWVkX2RhdGEoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5kaWNh dG9yLCBnYmMpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgaWYgKGFnZ3JlZ2F0 aW9uX2ZsYWcpIHsKKyAgICAgICAgICAgIHdoaWxlIChieXRlc3RyZWFtMl9nZXRfYnl0ZXNfbGVm dChnYmMpID4gMCkgeworICAgICAgICAgICAgICAgIGxlbmd0aCA9IGJ5dGVzdHJlYW0yX2dldF9i ZTE2KGdiYyk7CisgICAgICAgICAgICAgICAgRU5TVVJFX0JTX0xFRlQoZ2JjLCBsZW5ndGgpOwor ICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgR2V0Qnl0ZUNvbnRleHQgbmdi YzsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfaW5pdCgmbmdiYywgZ2JjLT5idWZm ZXIsIGxlbmd0aCk7CisKKyAgICAgICAgICAgICAgICAgICAgZXJyID0gcGFyc2VfbWZ1X25vbl90 aW1lZF9kYXRhKGN0eCwgYXNzZW1ibGVyLCBzZXFfbnVtLCBOT1RfRlJBR01FTlRFRCwgJm5nYmMp OworICAgICAgICAgICAgICAgICAgICBpZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKKyAgICAgICAg ICAgICAgICB9CisgICAgICAgICAgICAgICAgYnl0ZXN0cmVhbTJfc2tpcHUoZ2JjLCBsZW5ndGgp OworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHBh cnNlX21mdV9ub25fdGltZWRfZGF0YShjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRh dGlvbl9pbmRpY2F0b3IsIGdiYyk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworTU1UUENvbnRleHQgKmF2cHJpdl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9n cmFtKSB7CisgICAgTU1UUENvbnRleHQgKmN0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKE1NVFBDb250 ZXh0KSk7CisgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBjdHgtPnByb2dy YW0gPSBwcm9ncmFtOworICAgIHJldHVybiBjdHg7Cit9CisKK2ludCBhdnByaXZfbW10cF9wYXJz ZV9wYWNrZXQoTU1UUENvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAq cGt0LCBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpIHsKKyAgICBib29sICAgICBw YWNrZXRfY291bnRlcl9mbGFnOworICAgIGJvb2wgICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZzsK KyAgICB1aW50OF90ICBwYXlsb2FkX3R5cGU7CisgICAgdWludDMyX3QgcGFja2V0X3NlcXVlbmNl X251bWJlcjsKKyAgICB1aW50OF90ICBieXRlOworICAgIGludCAgICAgIGVyciA9IDA7CisKKyAg ICBHZXRCeXRlQ29udGV4dCBnYmM7CisKKyAgICBjdHgtPnMgICA9IHM7CisgICAgY3R4LT5wa3Qg PSBwa3Q7CisKKyAgICBieXRlc3RyZWFtMl9pbml0KCZnYmMsIGJ1Ziwgc2l6ZSk7CisgICAgRU5T VVJFX0JTX0xFRlQoJmdiYywgKDIgKyAxICsgMiArIDEgKyAxICsgMSArIDIgKyA2ICsgMTYgKyAz MiArIDMyKSAvIDgpOworCisgICAgYnl0ZSAgICAgICAgICAgICAgICAgID0gYnl0ZXN0cmVhbTJf Z2V0X2J5dGV1KCZnYmMpOworICAgIHBhY2tldF9jb3VudGVyX2ZsYWcgICA9IChieXRlID4+IDUp ICYgMTsKKyAgICBleHRlbnNpb25faGVhZGVyX2ZsYWcgPSAoYnl0ZSA+PiAxKSAmIDE7CisgICAg Y3R4LT5pc19yYXAgICAgICAgICAgID0gYnl0ZSAmIDE7CisKKyAgICBieXRlICAgICAgICAgPSBi eXRlc3RyZWFtMl9nZXRfYnl0ZXUoJmdiYyk7CisgICAgcGF5bG9hZF90eXBlID0gYnl0ZSAmIDBi MTExMTExOworCisgICAgY3R4LT5jdXJyZW50X3BpZCA9IGJ5dGVzdHJlYW0yX2dldF9iZTE2dSgm Z2JjKTsKKworICAgIC8vIHNraXA6IGRpc3RyaWJ1dGVfdGltZXN0YW1wCisgICAgYnl0ZXN0cmVh bTJfc2tpcHUoJmdiYywgNCk7CisKKyAgICBwYWNrZXRfc2VxdWVuY2VfbnVtYmVyID0gYnl0ZXN0 cmVhbTJfZ2V0X2JlMzJ1KCZnYmMpOworCisgICAgaWYgKHBhY2tldF9jb3VudGVyX2ZsYWcpCisg ICAgICAgIGJ5dGVzdHJlYW0yX3NraXAoJmdiYywgNCk7CisKKyAgICBpZiAoZXh0ZW5zaW9uX2hl YWRlcl9mbGFnKSB7CisgICAgICAgIHVpbnQxNl90IGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoOwor ICAgICAgICAvLyBza2lwOiBleHRlbnNpb25fdHlwZQorICAgICAgICBieXRlc3RyZWFtMl9za2lw KCZnYmMsIDIpOworICAgICAgICBleHRlbnNpb25faGVhZGVyX2xlbmd0aCA9IGJ5dGVzdHJlYW0y X2dldF9iZTE2KCZnYmMpOworICAgICAgICBieXRlc3RyZWFtMl9za2lwKCZnYmMsIGV4dGVuc2lv bl9oZWFkZXJfbGVuZ3RoKTsKKyAgICB9CisKKyAgICBzd2l0Y2ggKHBheWxvYWRfdHlwZSkgewor ICAgIGNhc2UgMHgwMDogLy8gTVBVCisgICAgICAgIGlmIChwa3QgIT0gTlVMTCkKKyAgICAgICAg ICAgIGVyciA9IHBhcnNlX21wdShjdHgsIHBhY2tldF9zZXF1ZW5jZV9udW1iZXIsICZnYmMpOwor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4MDI6IC8vIHNpZ25hbGxpbmcgbWVzc2FnZXMKKyAg ICAgICAgZXJyID0gcGFyc2Vfc2lnbmFsbGluZ19tZXNzYWdlcyhjdHgsIHBhY2tldF9zZXF1ZW5j ZV9udW1iZXIsICZnYmMpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgaWYgKGVyciA8IDAp IHJldHVybiBlcnI7CisgICAgcmV0dXJuIGN0eC0+cGt0ID09IE5VTEwgPyAwIDogRkZFUlJPUl9S RURPOworfQorCit2b2lkIGF2cHJpdl9tbXRwX3Jlc2V0X3N0YXRlKE1NVFBDb250ZXh0ICpjdHgp IHsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgKnN0cmVhbXM7CisgICAgc3RydWN0IEZy YWdtZW50QXNzZW1ibGVyICphc3NlbWJsZXI7CisKKyAgICBmb3IgKGFzc2VtYmxlciA9IGN0eC0+ YXNzZW1ibGVyOyBhc3NlbWJsZXIgIT0gTlVMTDsgYXNzZW1ibGVyID0gYXNzZW1ibGVyLT5uZXh0 KSB7CisgICAgICAgIGFzc2VtYmxlci0+c3RhdGUgPSBJTklUOworICAgICAgICBhc3NlbWJsZXIt PnNpemUgID0gMDsKKyAgICB9CisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJl YW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1zLT5uZXh0KSB7CisgICAgICAgIHN0cmVhbXMt Pmxhc3Rfc2VxdWVuY2VfbnVtYmVyID0gMDsKKyAgICAgICAgc3RyZWFtcy0+YXVfY291bnQgICAg ICAgICAgICAgPSAwOworICAgICAgICBzdHJlYW1zLT5mbGFncyAgICAgICAgICAgICAgICA9IDA7 CisgICAgICAgIHN0cmVhbXMtPm9mZnNldCAgICAgICAgICAgICAgID0gLTE7CisgICAgICAgIGF2 X2J1ZmZlcl91bnJlZigmc3RyZWFtcy0+cGVuZGluZ19idWZmZXIpOworICAgIH0KK30KKwordm9p ZCBhdnByaXZfbW10cF9wYXJzZV9jbG9zZShNTVRQQ29udGV4dCAqY3R4KSB7CisgICAgc3RydWN0 IEZyYWdtZW50QXNzZW1ibGVyICphc3M7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICpz dHJlYW1zOworCisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7KSB7 CisgICAgICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqbmV4dCA9IGFzcy0+bmV4dDsKKyAg ICAgICAgaWYgKGFzcy0+ZGF0YSAhPSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZShhc3MtPmRh dGEpOworICAgICAgICBhdl9mcmVlKGFzcyk7CisgICAgICAgIGFzcyA9IG5leHQ7CisgICAgfQor CisgICAgZm9yIChzdHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7KSB7Cisg ICAgICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0ID0gc3RyZWFtcy0+bmV4dDsKKyAgICAgICAgaWYg KHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yICE9IE5VTEwpCisgICAgICAgICAgICBhdl9m cmVlKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yKTsKKyAgICAgICAgaWYgKHN0cmVhbXMt PmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciAhPSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZShz dHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IpOworICAgICAgICBhdl9idWZmZXJfdW5y ZWYoJnN0cmVhbXMtPnBlbmRpbmdfYnVmZmVyKTsKKyAgICAgICAgYXZfZnJlZShzdHJlYW1zKTsK KyAgICAgICAgc3RyZWFtcyA9IG5leHQ7CisgICAgfQorCisgICAgYXZfZnJlZShjdHgpOworfQpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvbW10cC5oIGIvbGliYXZmb3JtYXQvbW10cC5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmU0ZTI0YzYwNjkKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmZvcm1hdC9tbXRwLmgKQEAgLTAsMCArMSw2MSBAQAorLyoKKyAqIE1QRUcg TWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBwYXJzZXIsIGFzIGRlZmluZWQgaW4gSVNP L0lFQyAyMzAwOC0xLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVyRmFzaGkKKyAqCisgKiBU aGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdh cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRo ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBw dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJz aW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy c2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3 aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUg cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNl bnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl CisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC b3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKyNpZm5kZWYgQVZGT1JNQVRfTU1UUF9ICisj ZGVmaW5lIEFWRk9STUFUX01NVFBfSAorCisjaW5jbHVkZSAiYXZmb3JtYXQuaCIKKwordHlwZWRl ZiBzdHJ1Y3QgTU1UUENvbnRleHQgTU1UUENvbnRleHQ7CisKKy8qKgorICogT3BlbiBhbiBNTVQg cHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKiBAcGFyYW0gcHJvZ3JhbSBUaGUgQVZQcm9ncmFt IHRoaXMgY29udGV4dCBpcyBhc3NvY2lhdGVkIHdpdGguCisgKiBAcmV0dXJuIEEgbmV3IE1NVFBD b250ZXh0LCBvciBOVUxMIG9uIGFsbG9jYXRpb24gZXJyb3IuCisgKi8KK01NVFBDb250ZXh0ICph dnByaXZfbW10cF9wYXJzZV9vcGVuKEFWUHJvZ3JhbSAqcHJvZ3JhbSk7CisKKy8qKgorICogUGFy c2UgYW4gTU1UIHByb3RvY29sIHBhY2tldC4KKyAqCisgKiBAcGFyYW0gY3R4IFRoZSBNTVQgcHJv dG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKiBAcGFyYW0gcyBUaGUgQVZGb3JtYXRDb250ZXh0Lgor ICogQHBhcmFtIHBrdCBUaGUgQVZQYWNrZXQgdG8gZmlsbC4KKyAqIEBwYXJhbSBidWYgVGhlIHBh Y2tldCBkYXRhLgorICogQHBhcmFtIHNpemUgVGhlIHNpemUgb2YgdGhlIHBhY2tldCBkYXRhLgor ICogQHJldHVybiAwIGlmIGEgbmV3IEFWUGFja2V0IGlzIGVtaXR0ZWQsIEZGRVJST1JfUkVETyBp ZiB0aGUgbmV4dCBwYWNrZXQgaXMgbmVlZGVkLCBvciBhbm90aGVyIG5lZ2F0aXZlIHZhbHVlIG9u IGVycm9yLgorICovCitpbnQgYXZwcml2X21tdHBfcGFyc2VfcGFja2V0KE1NVFBDb250ZXh0ICpj dHgsIEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCwgY29uc3QgdWludDhfdCAqYnVm LCB1aW50MTZfdCBzaXplKTsKKworLyoqCisgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE1NVFAg cGFyc2VyLiBVc2VmdWwgd2hlbiBzZWVraW5nLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBw cm90b2NvbCBwYXJzZXIgY29udGV4dC4KKyAqLwordm9pZCBhdnByaXZfbW10cF9yZXNldF9zdGF0 ZShNTVRQQ29udGV4dCAqY3R4KTsKKworLyoqCisgKiBDbG9zZSBhbiBNTVQgcHJvdG9jb2wgcGFy c2VyIGNvbnRleHQsIGZyZWVzIGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBAcGFy YW0gY3R4IFRoZSBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKi8KK3ZvaWQgYXZwcml2 X21tdHBfcGFyc2VfY2xvc2UoTU1UUENvbnRleHQgKmN0eCk7CisKKyNlbmRpZiAvKiBBVkZPUk1B VF9NTVRQX0ggKi8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21tdHRsdi5jIGIvbGliYXZmb3Jt YXQvbW10dGx2LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzBiMjVk ZjdhZgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L21tdHRsdi5jCkBAIC0wLDAgKzEs MzI0IEBACisvKgorICogTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpIGRl bXV4ZXIsIGFzIGRlZmluZWQgaW4gQVJJQiBTVEQtQjMyLgorICogQ29weXJpZ2h0IChjKSAyMDIz IFN1cGVyRmFzaGkKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICog RkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1 YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh dGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQg aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBX QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFO VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO VQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq CisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl bmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRl IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2lu Y2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZh c3NlcnQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhdmlv X2ludGVybmFsLmgiCisjaW5jbHVkZSAiYXZmb3JtYXQuaCIKKyNpbmNsdWRlICJtbXRwLmgiCisj aW5jbHVkZSAiZGVtdXguaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjZGVmaW5lIEhFQURF Ul9CWVRFIDBiMDExMTExMTEKKworZW51bSB7CisgICAgVU5ERUZJTkVEX1BBQ0tFVCAgICAgICAg ICAgID0gMHgwMCwKKyAgICBJUFY0X1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweDAxLAorICAg IElQVjZfUEFDS0VUICAgICAgICAgICAgICAgICA9IDB4MDIsCisgICAgSEVBREVSX0NPTVBSRVNT RURfSVBfUEFDS0VUID0gMHgwMywKKyAgICBUUkFOU01JU1NJT05fQ09OVFJPTF9QQUNLRVQgPSAw eEZFLAorICAgIE5VTExfUEFDS0VUICAgICAgICAgICAgICAgICA9IDB4RkYsCit9OworCitlbnVt IHsKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRfUEFSVElBTF9V RFBfSEVBREVSID0gMHgyMCwKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVS ICAgICAgICAgICAgICAgICAgICAgICAgID0gMHgyMSwKKyAgICBDT05URVhUX0lERU5USUZJQ0FU SU9OX1BBUlRJQUxfSVBWNl9BTkRfUEFSVElBTF9VRFBfSEVBREVSID0gMHg2MCwKKyAgICBDT05U RVhUX0lERU5USUZJQ0FUSU9OX05PX0NPTVBSRVNTRURfSEVBREVSICAgICAgICAgICAgICAgID0g MHg2MSwKK307CisKK3N0YXRpYyBpbnQgbW10dGx2X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpw KSB7CisgICAgc2l6ZV90ICAgaSwgajsKKyAgICB1aW50OF90ICBwYWNrZXRfdHlwZTsKKyAgICB1 aW50MTZfdCBkYXRhX2xlbmd0aDsKKworICAgIGludCBwcm9jZXNzZWQgID0gMDsKKyAgICBpbnQg cmVjb2duaXplZCA9IDA7CisKKyAgICBmb3IgKGkgPSAwOyBpICsgNCA8IHAtPmJ1Zl9zaXplICYm IHByb2Nlc3NlZCA8IDEwMDsgKytwcm9jZXNzZWQpIHsKKyAgICAgICAgaWYgKHAtPmJ1ZltpXSAh PSBIRUFERVJfQllURSkgcmV0dXJuIDA7CisKKyAgICAgICAgcGFja2V0X3R5cGUgPSBwLT5idWZb aSArIDFdOworICAgICAgICBkYXRhX2xlbmd0aCA9IEFWX1JCMTYocC0+YnVmICsgaSArIDIpOwor ICAgICAgICBpICs9IDQ7CisKKyAgICAgICAgaWYgKHBhY2tldF90eXBlID09IEhFQURFUl9DT01Q UkVTU0VEX0lQX1BBQ0tFVCkgeworICAgICAgICAgICAgaWYgKGRhdGFfbGVuZ3RoIDwgMyB8fCBp ICsgMiA+PSBwLT5idWZfc2l6ZSkgZ290byBza2lwOworICAgICAgICAgICAgc3dpdGNoIChwLT5i dWZbaSArIDJdKSB7CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFS VElBTF9JUFY0X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRF WFRfSURFTlRJRklDQVRJT05fSVBWNF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRFWFRf SURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAg ICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVI6 CisgICAgICAgICAgICAgICAgKytyZWNvZ25pemVkOworICAgICAgICAgICAgfQorICAgICAgICB9 IGVsc2UgaWYgKHBhY2tldF90eXBlID09IE5VTExfUEFDS0VUKSB7CisgICAgICAgICAgICAvLyBu dWxsIHBhY2tldHMgc2hvdWxkIGNvbnRhaW4gYWxsIDB4RkZzCisgICAgICAgICAgICBmb3IgKGog PSBpOyBqIDwgaSArIGRhdGFfbGVuZ3RoICYmIGogPCBwLT5idWZfc2l6ZTsgKytqKSB7CisgICAg ICAgICAgICAgICAgaWYgKHAtPmJ1ZltqXSAhPSAweEZGKSBnb3RvIHNraXA7CisgICAgICAgICAg ICB9CisgICAgICAgICAgICArK3JlY29nbml6ZWQ7CisgICAgICAgIH0KKworICAgICAgICBza2lw OgorICAgICAgICBpICs9IGRhdGFfbGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiByZWNvZ25p emVkICogQVZQUk9CRV9TQ09SRV9NQVggLyBGRk1BWChwcm9jZXNzZWQsIDEwKTsKK30KKworc3Ry dWN0IE1NVFRMVkNvbnRleHQgeworICAgIHN0cnVjdCBQcm9ncmFtIHsKKyAgICAgICAgdWludDMy X3QgICAgICAgY2lkOworICAgICAgICBNTVRQQ29udGV4dCAgICAqbW10cDsKKyAgICAgICAgc3Ry dWN0IFByb2dyYW0gKm5leHQ7CisgICAgfSAqcHJvZ3JhbXM7CisKKyAgICBpbnQ2NF90IGxhc3Rf cG9zOworICAgIHNpemVfdCAgcmVzeW5jX3NpemU7CisKKyAgICBzaXplX3QgIGNhcDsKKyAgICB1 aW50OF90ICpidWY7Cit9OworCitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBf cGFja2V0KAorICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4dCAq cywgQVZQYWNrZXQgKnBrdCwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKSB7Cisg ICAgLy8gcGFydGlhbCB1ZHAgaGVhZGVyIGFyZSB1ZHAgaGVhZGVyIHdpdGhvdXQgZGF0YSBsZW5n dGggKDE2IGJpdHMpIGFuZCBjaGVja3N1bSAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElBTF9VRFBf SEVBREVSX0xFTkdUSCAoOCAtIDQpCisgICAgLy8gcGFydGlhbCBpcHY2IGhlYWRlciBhcmUgaXB2 NiBoZWFkZXIgd2l0aG91dCBwYXlsb2FkIGxlbmd0aCAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElB TF9JUFY2X0hFQURFUl9MRU5HVEggKDQwIC0gMikKKworICAgIHVpbnQzMl90ICAgICAgIGNvbnRl eHRfaWQ7CisgICAgc3RydWN0IFByb2dyYW0gKnByb2dyYW07CisKKyAgICBpZiAoc2l6ZSA8IDMp CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIGNvbnRleHRfaWQgPSBB Vl9SQjE2KGJ1ZikgPj4gNDsKKyAgICBidWYgKz0gMzsKKyAgICBzaXplIC09IDM7CisKKyAgICBm b3IgKHByb2dyYW0gPSBjdHgtPnByb2dyYW1zOyBwcm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBw cm9ncmFtLT5uZXh0KQorICAgICAgICBpZiAocHJvZ3JhbS0+Y2lkID09IGNvbnRleHRfaWQpCisg ICAgICAgICAgICBicmVhazsKKworICAgIGlmIChwcm9ncmFtID09IE5VTEwpIHsKKyAgICAgICAg QVZQcm9ncmFtICpwID0gYXZfbmV3X3Byb2dyYW0ocywgY29udGV4dF9pZCk7CisgICAgICAgIGlm IChwID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtID0g YXZfbWFsbG9jKHNpemVvZihzdHJ1Y3QgUHJvZ3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSA9 PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisKKyAgICAgICAgcHJvZ3JhbS0+bW10cCA9 IGF2cHJpdl9tbXRwX3BhcnNlX29wZW4ocCk7CisgICAgICAgIHByb2dyYW0tPm5leHQgPSBjdHgt PnByb2dyYW1zOworICAgICAgICBjdHgtPnByb2dyYW1zID0gcHJvZ3JhbTsKKyAgICAgICAgcHJv Z3JhbS0+Y2lkICA9IGNvbnRleHRfaWQ7CisgICAgfQorCisgICAgc3dpdGNoIChidWZbLTFdKSB7 CisgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRfUEFSVElB TF9VRFBfSEVBREVSOgorICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURF UjoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIGNhc2UgQ09OVEVY VF9JREVOVElGSUNBVElPTl9QQVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAg ICAgICAgaWYgKHNpemUgPCBQQVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQ X0hFQURFUl9MRU5HVEgpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsK KyAgICAgICAgc2l6ZSAtPSBQQVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQ X0hFQURFUl9MRU5HVEg7CisgICAgICAgIGJ1ZiArPSBQQVJUSUFMX0lQVjZfSEVBREVSX0xFTkdU SCArIFBBUlRJQUxfVURQX0hFQURFUl9MRU5HVEg7CisgICAgY2FzZSBDT05URVhUX0lERU5USUZJ Q0FUSU9OX05PX0NPTVBSRVNTRURfSEVBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0 OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXR1 cm4gYXZwcml2X21tdHBfcGFyc2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBz aXplKTsKK30KKworc3RhdGljIGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0 ICpzLCBBVlBhY2tldCAqcGt0KSB7CisgICAgdWludDhfdCAgICAgICAgICAgICAgaGVhZGVyWzRd OworICAgIHVpbnQxNl90ICAgICAgICAgICAgIHNpemU7CisgICAgaW50ICAgICAgICAgICAgICAg ICAgZXJyOworICAgIHN0cnVjdCBNTVRUTFZDb250ZXh0ICpjdHggPSBzLT5wcml2X2RhdGE7Cisg ICAgaW50NjRfdCAgICAgICAgICAgICAgcG9zICA9IGF2aW9fdGVsbChzLT5wYik7CisKKyAgICBp ZiAocG9zIDwgMCkgcmV0dXJuIChpbnQpIHBvczsKKyAgICBpZiAocG9zICE9IGN0eC0+bGFzdF9w b3MpIHsKKyAgICAgICAgY3R4LT5sYXN0X3BvcyA9IHBvczsKKworICAgICAgICB3aGlsZSAocG9z IC0gY3R4LT5sYXN0X3BvcyA8IGN0eC0+cmVzeW5jX3NpemUpIHsKKyAgICAgICAgICAgIGlmICgo ZXJyID0gZmZpb19lbnN1cmVfc2Vla2JhY2socy0+cGIsIDQpKSA8IDApCisgICAgICAgICAgICAg ICAgcmV0dXJuIGVycjsKKworICAgICAgICAgICAgaWYgKChlcnIgPSBhdmlvX3JlYWQocy0+cGIs IGhlYWRlciwgNCkpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gYXZpb19mZW9mKHMtPnBi KSA/IEFWRVJST1JfRU9GIDogZXJyOworCisgICAgICAgICAgICBpZiAoaGVhZGVyWzBdICE9IEhF QURFUl9CWVRFKSB7CisgICAgICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIs IC0zLCBTRUVLX0NVUikpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBv czsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg ICAgc2l6ZSA9IEFWX1JCMTYoaGVhZGVyICsgMik7CisKKyAgICAgICAgICAgIGlmICgocG9zID0g YXZpb19zZWVrKHMtPnBiLCAtNCwgU0VFS19DVVIpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0 dXJuIChpbnQpIHBvczsKKworICAgICAgICAgICAgaWYgKChlcnIgPSBmZmlvX2Vuc3VyZV9zZWVr YmFjayhzLT5wYiwgNCArIHNpemUgKyAxKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBl cnI7CisKKyAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19za2lwKHMtPnBiLCA0ICsgc2l6ZSkp IDwgMCkKKyAgICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAgICAgICAgICBp ZiAoKGVyciA9IGF2aW9fcmVhZChzLT5wYiwgaGVhZGVyLCAxKSkgPCAwKQorICAgICAgICAgICAg ICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisKKyAgICAg ICAgICAgIGlmIChoZWFkZXJbMF0gPT0gSEVBREVSX0JZVEUpIHsKKyAgICAgICAgICAgICAgICAv LyBmb3VuZCBIRUFERVIsIFtzaXplXSwgSEVBREVSLCBzaG91bGQgYmUgZ29vZAorICAgICAgICAg ICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAtc2l6ZSAtIDEgLSA0LCBTRUVLX0NV UikpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKyAgICAgICAg ICAgICAgICBnb3RvIHN1Y2Nlc3M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgo cG9zID0gYXZpb19zZWVrKHMtPnBiLCAtc2l6ZSAtIDEgLSAzLCBTRUVLX0NVUikpIDwgMCkKKyAg ICAgICAgICAgICAgICByZXR1cm4gKGludCkgcG9zOworICAgICAgICB9CisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgICAgIHN1Y2Nlc3M6CisgICAgICAgIGN0eC0+ bGFzdF9wb3MgPSBwb3M7CisKKyAgICAgICAgZm9yIChzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbSA9 IGN0eC0+cHJvZ3JhbXM7IHByb2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHByb2dyYW0tPm5leHQp CisgICAgICAgICAgICBhdnByaXZfbW10cF9yZXNldF9zdGF0ZShwcm9ncmFtLT5tbXRwKTsKKyAg ICB9CisKKyAgICBpZiAocGt0ICE9IE5VTEwpIHBrdC0+cG9zID0gY3R4LT5sYXN0X3BvczsKKyAg ICBpZiAoKGVyciA9IGZmaW9fcmVhZF9zaXplKHMtPnBiLCBoZWFkZXIsIDQpKSA8IDApCisgICAg ICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4 LT5sYXN0X3BvcyArPSA0OworCisgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkKKyAg ICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisKKyAgICBzaXplID0gQVZfUkIxNiho ZWFkZXIgKyAyKTsKKyAgICBpZiAoaGVhZGVyWzFdICE9IEhFQURFUl9DT01QUkVTU0VEX0lQX1BB Q0tFVCkgeworICAgICAgICBpZiAoKGN0eC0+bGFzdF9wb3MgPSBhdmlvX3NraXAocy0+cGIsIHNp emUpKSA8IDApCisgICAgICAgICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKyAgICAg ICAgcmV0dXJuIEZGRVJST1JfUkVETzsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5jYXAgPCBzaXpl KSB7CisgICAgICAgIGlmIChjdHgtPmJ1ZiAhPSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZShj dHgtPmJ1Zik7CisgICAgICAgIGlmICgoY3R4LT5idWYgPSBhdl9tYWxsb2MoY3R4LT5jYXAgPSBz aXplKSkgPT0gTlVMTCkKKyAgICAgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKyAgICB9 CisgICAgaWYgKChlcnIgPSBmZmlvX3JlYWRfc2l6ZShzLT5wYiwgY3R4LT5idWYsIHNpemUpKSA8 IDApCisgICAgICAgIHJldHVybiBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7 CisgICAgY3R4LT5sYXN0X3BvcyArPSBzaXplOworICAgIHJldHVybiBtbXR0bHZfcmVhZF9jb21w cmVzc2VkX2lwX3BhY2tldChjdHgsIHMsIHBrdCwgY3R4LT5idWYsIHNpemUpOworfQorCitzdGF0 aWMgaW50IG1tdHRsdl9yZWFkX2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpIHsKKyAgICBpbnQ2 NF90ICAgICAgICAgICAgICBwb3M7CisgICAgaW50NjRfdCAgICAgICAgICAgICAgYWxsb3cgPSBz LT5wcm9iZXNpemU7CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCAgPSBzLT5wcml2X2Rh dGE7CisKKyAgICBjdHgtPmxhc3RfcG9zID0gYXZpb190ZWxsKHMtPnBiKTsKKyAgICBpZiAoY3R4 LT5sYXN0X3BvcyA8IDApCisgICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOworICAg IGN0eC0+bGFzdF9wb3MgLT0gMTsgLy8gZm9yY2UgcmVzeW5jCisKKyAgICBjdHgtPnJlc3luY19z aXplID0gNDA5NjsKKyAgICBzLT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhfTk9IRUFERVI7CisKKyAg ICBpZiAoIXMtPnBiLT5zZWVrYWJsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKHBv cyA9IGF2aW9fdGVsbChzLT5wYikpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKwor ICAgIHdoaWxlIChzLT5uYl9zdHJlYW1zIDw9IDAgJiYgYWxsb3cgPiAwKSB7CisgICAgICAgIGNv bnN0IGludDY0X3QgY3VyID0gY3R4LT5sYXN0X3BvczsKKyAgICAgICAgY29uc3QgaW50ICAgICBl cnIgPSBtbXR0bHZfcmVhZF9wYWNrZXQocywgTlVMTCk7CisgICAgICAgIGlmIChlcnIgPCAwICYm IGVyciAhPSBGRkVSUk9SX1JFRE8pCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBh bGxvdyAtPSBjdHgtPmxhc3RfcG9zIC0gY3VyOworICAgIH0KKworICAgIGN0eC0+bGFzdF9wb3Mg PSBhdmlvX3RlbGwocy0+cGIpOworICAgIGlmIChjdHgtPmxhc3RfcG9zIDwgMCkKKyAgICAgICAg cmV0dXJuIChpbnQpIGN0eC0+bGFzdF9wb3M7CisKKyAgICBpZiAoKHBvcyA9IGF2aW9fc2Vlayhz LT5wYiwgcG9zLCBTRUVLX1NFVCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX2Nsb3NlKEFWRm9ybWF0 Q29udGV4dCAqY3R4KSB7CisgICAgc3RydWN0IFByb2dyYW0gICAgICAgKnByb2dyYW07CisgICAg c3RydWN0IE1NVFRMVkNvbnRleHQgKnByaXYgPSBjdHgtPnByaXZfZGF0YTsKKyAgICBmb3IgKHBy b2dyYW0gPSBwcml2LT5wcm9ncmFtczsgcHJvZ3JhbSAhPSBOVUxMOykgeworICAgICAgICBzdHJ1 Y3QgUHJvZ3JhbSAqbmV4dCA9IHByb2dyYW0tPm5leHQ7CisgICAgICAgIGF2cHJpdl9tbXRwX3Bh cnNlX2Nsb3NlKHByb2dyYW0tPm1tdHApOworICAgICAgICBhdl9mcmVlKHByb2dyYW0pOworICAg ICAgICBwcm9ncmFtID0gbmV4dDsKKyAgICB9CisgICAgaWYgKHByaXYtPmJ1ZiAhPSBOVUxMKSBh dl9mcmVlKHByaXYtPmJ1Zik7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQ2NF90IG1t dHRsdl9yZWFkX3RpbWVzdGFtcChzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFt X2luZGV4LCBpbnQ2NF90ICpwb3MsIGludDY0X3QgcG9zX2xpbWl0KSB7CisgICAgc3RydWN0IE1N VFRMVkNvbnRleHQgKmN0eCA9IHMtPnByaXZfZGF0YTsKKworICAgIGlmICgoKnBvcyA9IGF2aW9f c2VlayhzLT5wYiwgKnBvcywgU0VFS19TRVQpKSA8IDApCisgICAgICAgIHJldHVybiAoaW50KSAq cG9zOworCisgICAgd2hpbGUgKHBvc19saW1pdCA+IDApIHsKKyAgICAgICAgQVZQYWNrZXQgICAg ICBwYWNrZXQgPSB7MH07CisgICAgICAgIGNvbnN0IGludCAgICAgZXJyICAgID0gbW10dGx2X3Jl YWRfcGFja2V0KHMsICZwYWNrZXQpOworICAgICAgICBjb25zdCBpbnQ2NF90IHRzICAgICA9IHBh Y2tldC5kdHM7CisgICAgICAgIGNvbnN0IGludDY0X3Qgb2ZmICAgID0gcGFja2V0LnBvczsKKyAg ICAgICAgY29uc3QgaW50ICAgICBzaWQgICAgPSBwYWNrZXQuc3RyZWFtX2luZGV4OworICAgICAg ICBhdl9wYWNrZXRfdW5yZWYoJnBhY2tldCk7CisgICAgICAgIGlmIChlcnIgPj0gMCAmJiAoc3Ry ZWFtX2luZGV4IDwgMCB8fCBzaWQgPT0gc3RyZWFtX2luZGV4KSkgeworICAgICAgICAgICAgKnBv cyA9IG9mZjsKKyAgICAgICAgICAgIHJldHVybiB0czsKKyAgICAgICAgfQorICAgICAgICBwb3Nf bGltaXQgLT0gY3R4LT5sYXN0X3BvcyAtICpwb3M7CisgICAgICAgICpwb3MgPSBjdHgtPmxhc3Rf cG9zOworICAgICAgICBpZiAoZXJyIDwgMCAmJiBlcnIgIT0gRkZFUlJPUl9SRURPKQorICAgICAg ICAgICAgcmV0dXJuIEFWX05PUFRTX1ZBTFVFOworICAgIH0KKworICAgIHJldHVybiBBVl9OT1BU U19WQUxVRTsKK30KKworY29uc3QgQVZJbnB1dEZvcm1hdCBmZl9tbXR0bHZfZGVtdXhlciA9IHsK KyAgICAubmFtZSAgICAgICAgICAgPSAibW10dGx2IiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBO VUxMX0lGX0NPTkZJR19TTUFMTCgiTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKEFSSUIg U1RELUIzMikiKSwKKyAgICAucHJpdl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IE1NVFRMVkNv bnRleHQpLAorICAgIC5mbGFnc19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCisgICAg LnJlYWRfcHJvYmUgICAgID0gbW10dGx2X3Byb2JlLAorICAgIC5yZWFkX2hlYWRlciAgICA9IG1t dHRsdl9yZWFkX2hlYWRlciwKKyAgICAucmVhZF9wYWNrZXQgICAgPSBtbXR0bHZfcmVhZF9wYWNr ZXQsCisgICAgLnJlYWRfY2xvc2UgICAgID0gbW10dGx2X3JlYWRfY2xvc2UsCisgICAgLnJlYWRf dGltZXN0YW1wID0gbW10dGx2X3JlYWRfdGltZXN0YW1wLAorICAgIC5mbGFncyAgICAgICAgICA9 IEFWRk1UX1NIT1dfSURTLAorfTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaCBi L2xpYmF2Zm9ybWF0L3ZlcnNpb24uaAppbmRleCBlMjYzNGI4NWFlLi40YmRlODJhYmI0IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC92ZXJzaW9uLmgKKysrIGIvbGliYXZmb3JtYXQvdmVyc2lvbi5o CkBAIC0zMSw3ICszMSw3IEBACiAKICNpbmNsdWRlICJ2ZXJzaW9uX21ham9yLmgiCiAKLSNkZWZp bmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSU5PUiAgIDUKKyNkZWZpbmUgTElCQVZGT1JNQVRfVkVS U0lPTl9NSU5PUiAgIDYKICNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDAKIAog I2RlZmluZSBMSUJBVkZPUk1BVF9WRVJTSU9OX0lOVCBBVl9WRVJTSU9OX0lOVChMSUJBVkZPUk1B VF9WRVJTSU9OX01BSk9SLCBcCi0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRl dmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVn LWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVn LWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K