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 62EA445FF7 for ; Fri, 28 Apr 2023 17:32:04 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 5979C68C02C; Fri, 28 Apr 2023 20:32:01 +0300 (EEST) Received: from mail-pl1-f177.google.com (mail-pl1-f177.google.com [209.85.214.177]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id EF57C68BF73 for ; Fri, 28 Apr 2023 20:31:54 +0300 (EEST) Received: by mail-pl1-f177.google.com with SMTP id d9443c01a7336-1a6670671e3so2086635ad.0 for ; Fri, 28 Apr 2023 10:31:54 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=superfashi-com.20221208.gappssmtp.com; s=20221208; t=1682703113; x=1685295113; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=SomPBFh9cl8RzfIp/8cMRchc4znLvzsyhmV7+Tup2Y0=; b=y+xgzD4okWhagFSHELA4JO3YaAI9FuNuhYvxQgSwWqgka0OxAPhQO0tKRBt4k7JB2n 15GoxDm7Y6B2iYTViNwS4oIDCaAXgOnQbrkwG81TxkDIQF9Ttk6X/uMa0Znjei/9yI5s 69tt6WH+ha6J7FiKaLpHXdGD5WYxVVO42SaWD20ZWvEQdEL2zqbNSPQDLST18daWaNX3 o2vCfRs41p7/AFCaU3fVLPyYi3PtpZPhgEIUElvRVvp/tMpgo5wycaa0v5TiiyO0WHfb DcMbK+tE62lGlS8DMWPrBJVImw3YlJWvdomaJEm9dCakkcdGDEOK4rtj0wi7kA32aydM dSwA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1682703113; x=1685295113; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=SomPBFh9cl8RzfIp/8cMRchc4znLvzsyhmV7+Tup2Y0=; b=RreacZgSutHcojE8N2O+KMgKAy1H175eythwxVjiHNuy7watFKcBdORcANqOxwWtav kMMao22jGuem4GYap91slawOBgEsOUeOumi08LSuA455y1cbE3RwGGMX8VqbduFnovnP tOL1LZuu8cc7R41L7gJz6QKymjqmG72R54g3vZjTnvyY4US3hHEm1MspDXW/qYLcFVej CXyuWS4NfotHnXDnHyeio69JTJvU1qjzMmdETIV+10raaf+LFnBvKuTMOPa/cX13GG09 eDJDiI2/3RWZpeTxm0+XyqwrgKOWVOJkBqmRme3skTFM6uct2C8qi/54m2Go0P57y5Kg X5EA== X-Gm-Message-State: AC+VfDySx6VNN2w0O+MWOggfimaDb6NgPKgkZWpZB7C4wtVqyR+lounf UfuIxksdYQ8VZxNtnYlD4bADSZ4q8oZzlMhXavk= X-Google-Smtp-Source: ACHHUZ79WjFUtvNZCmfAt78zG3KjZt89T3JOOta7wOg33tMJeatxskrS79/3rOnr3Rd/j/epllPPBQ== X-Received: by 2002:a17:902:f649:b0:1a6:67e1:4d2c with SMTP id m9-20020a170902f64900b001a667e14d2cmr5828011plg.6.1682703111751; Fri, 28 Apr 2023 10:31:51 -0700 (PDT) Received: from localhost.localdomain ([2404:7a80:800:5e00:61c0:c7fd:4d76:8aca]) by smtp.gmail.com with ESMTPSA id be12-20020a170902aa0c00b001a6a53c3b04sm13481417plb.306.2023.04.28.10.31.50 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 28 Apr 2023 10:31:51 -0700 (PDT) From: SuperFashi To: ffmpeg-devel@ffmpeg.org Date: Sat, 29 Apr 2023 02:31:28 +0900 Message-Id: <20230428173128.21074-1-admin@superfashi.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH] avformat: add MMTP parser and MMT/TLV demuxer X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: SuperFashi Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: VGhpcyBwYXRjaCBhZGRzIGFuIE1QRUcgTWVkaWEgVHJhbnNwb3J0IFByb3RvY29sIChNTVRQKSBw YXJzZXIsIGFzIGRlZmluZWQgaW4gSVNPL0lFQyAyMzAwOC0xLCBhbmQgYW4gTU1UIHByb3RvY29s IG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpIGRlbXV4ZXIsIGFzIGRlZmluZWQgaW4gQVJJQiBT VEQtQjMyLiBDdXJyZW50bHksIGl0IHN1cHBvcnRzIGhldmMsIGFhYyAobG9hcyksIGFuZCBhcmli LXR0bWwgZGVtdXhpbmcuCgpTaW5jZSBNTVRQIGlzIGRlc2lnbmVkIHRvIHRyYW5zbWl0IG92ZXIg SVAsIHRoZXJlIGlzIG5vIHNpemUgaW5mb3JtYXRpb24gd2l0aGluIGVhY2ggTU1UUCBwYWNrZXQs IGFuZCB0aGVyZSBpcyBubyBmaWxlc3lzdGVtIGZvcm1hdCBkZWZpbmVkIGFsb25nc2lkZSB0aGUg cHJvdG9jb2wuIE9uZSBvZiB0aGUgc29sdXRpb24gaXMgYSBzaW1wbGUgY29udGFpbmVyIGZvcm1h dCB1c2luZyB0eXBl4oCTbGVuZ3Ro4oCTdmFsdWUgcGFja2V0cywgd2hpY2ggaXMgZGVmaW5lZCBp biBBUklCIFNURC1CMzIuCgpBbm90aGVyIGtub3duIGNvbnRhaW5lciBmb3JtYXQgZm9yIE1NVFAg aXMgdXNpbmcgcGFja2V0IGNhcHR1cmUgKHBjYXApIGZpbGVzIHdoaWNoIHJlY29yZHMgbmV0d29y ayBwYWNrZXRzLiBUaGlzIHBhdGNoIGRvZXMgbm90IGluY2x1ZGUgdGhlIGRlbXV4ZXIgZm9yIHRo aXMgY29udGFpbmVyIGZvcm1hdC4KClNpZ25lZC1vZmYtYnk6IFN1cGVyRmFzaGkgPGFkbWluQHN1 cGVyZmFzaGkuY29tPgotLS0KIENoYW5nZWxvZyAgICAgICAgICAgICAgICB8ICAgIDEgKwogZG9j L2RlbXV4ZXJzLnRleGkgICAgICAgIHwgICAgNCArCiBsaWJhdmZvcm1hdC9NYWtlZmlsZSAgICAg fCAgICAxICsKIGxpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYyB8ICAgIDEgKwogbGliYXZmb3JtYXQv bW10cC5jICAgICAgIHwgMTE2OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogbGliYXZmb3JtYXQvbW10cC5oICAgICAgIHwgICA2MSArKwogbGliYXZmb3JtYXQvbW10dGx2 LmMgICAgIHwgIDMyNCArKysrKysrKysrKwogbGliYXZmb3JtYXQvdmVyc2lvbi5oICAgIHwgICAg MiArLQogOCBmaWxlcyBjaGFuZ2VkLCAxNTYyIGluc2VydGlvbnMoKyksIDEgZGVsZXRpb24oLSkK IGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9tbXRwLmMKIGNyZWF0ZSBtb2RlIDEwMDY0 NCBsaWJhdmZvcm1hdC9tbXRwLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmZvcm1hdC9tbXR0 bHYuYwoKZGlmZiAtLWdpdCBhL0NoYW5nZWxvZyBiL0NoYW5nZWxvZwppbmRleCBiNmY2NjgyOTA0 Li4yNDgzZmRkNTQ3IDEwMDY0NAotLS0gYS9DaGFuZ2Vsb2cKKysrIGIvQ2hhbmdlbG9nCkBAIC02 LDYgKzYsNyBAQCB2ZXJzaW9uIDxuZXh0PjoKIC0gUGxheWRhdGUgdmlkZW8gZGVjb2RlciBhbmQg ZGVtdXhlcgogLSBFeHRlbmQgVkFBUEkgc3VwcG9ydCBmb3IgbGlidmEtd2luMzIgb24gV2luZG93 cwogLSBhZmlyZXFzcmMgYXVkaW8gc291cmNlIGZpbHRlcgorLSBNTVRQIHBhcnNlciBhbmQgTU1U L1RMViBkZW11eGVyCiAKIHZlcnNpb24gNi4wOgogLSBSYWRpYW5jZSBIRFIgaW1hZ2Ugc3VwcG9y dApkaWZmIC0tZ2l0IGEvZG9jL2RlbXV4ZXJzLnRleGkgYi9kb2MvZGVtdXhlcnMudGV4aQppbmRl eCAyZDMzYjQ3YTU2Li41NmFhYjI1MWIyIDEwMDY0NAotLS0gYS9kb2MvZGVtdXhlcnMudGV4aQor KysgYi9kb2MvZGVtdXhlcnMudGV4aQpAQCAtNjg5LDYgKzY4OSwxMCBAQCBTZXQgdGhlIHNhbXBs ZSByYXRlIGZvciBsaWJvcGVubXB0IHRvIG91dHB1dC4KIFJhbmdlIGlzIGZyb20gMTAwMCB0byBJ TlRfTUFYLiBUaGUgdmFsdWUgZGVmYXVsdCBpcyA0ODAwMC4KIEBlbmQgdGFibGUKIAorQHNlY3Rp b24gbW10dGx2CisKK0RlbXV4ZXIgZm9yIE1NVCBwcm90b2NvbCBvdmVyIFRMViBwYWNrZXRzIChN TVQvVExWKSwgYXMgZGVmaW5lZCBpbiBBUklCIFNURC1CMzIuCisKIEBzZWN0aW9uIG1vdi9tcDQv M2dwCiAKIERlbXV4ZXIgZm9yIFF1aWNrdGltZSBGaWxlIEZvcm1hdCAmIElTTy9JRUMgQmFzZSBN ZWRpYSBGaWxlIEZvcm1hdCAoSVNPL0lFQyAxNDQ5Ni0xMiBvciBNUEVHLTQgUGFydCAxMiwgSVNP L0lFQyAxNTQ0NC0xMiBvciBKUEVHIDIwMDAgUGFydCAxMikuCmRpZmYgLS1naXQgYS9saWJhdmZv cm1hdC9NYWtlZmlsZSBiL2xpYmF2Zm9ybWF0L01ha2VmaWxlCmluZGV4IGY4YWQ3YzZhMTEuLmUz MmQ2ZTcxYTMgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L01ha2VmaWxlCisrKyBiL2xpYmF2Zm9y bWF0L01ha2VmaWxlCkBAIC0zNTQsNiArMzU0LDcgQEAgT0JKUy0kKENPTkZJR19NTFZfREVNVVhF UikgICAgICAgICAgICAgICArPSBtbHZkZWMubyByaWZmZGVjLm8KIE9CSlMtJChDT05GSUdfTU1f REVNVVhFUikgICAgICAgICAgICAgICAgKz0gbW0ubwogT0JKUy0kKENPTkZJR19NTUZfREVNVVhF UikgICAgICAgICAgICAgICArPSBtbWYubwogT0JKUy0kKENPTkZJR19NTUZfTVVYRVIpICAgICAg ICAgICAgICAgICArPSBtbWYubyByYXdlbmMubworT0JKUy0kKENPTkZJR19NTVRUTFZfREVNVVhF UikgICAgICAgICAgICArPSBtbXRwLm8gbW10dGx2Lm8KIE9CSlMtJChDT05GSUdfTU9EU19ERU1V WEVSKSAgICAgICAgICAgICAgKz0gbW9kcy5vCiBPQkpTLSQoQ09ORklHX01PRkxFWF9ERU1VWEVS KSAgICAgICAgICAgICs9IG1vZmxleC5vCiBPQkpTLSQoQ09ORklHX01PVl9ERU1VWEVSKSAgICAg ICAgICAgICAgICs9IG1vdi5vIG1vdl9jaGFuLm8gbW92X2VzZHMubyBcCmRpZmYgLS1naXQgYS9s aWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMgYi9saWJhdmZvcm1hdC9hbGxmb3JtYXRzLmMKaW5kZXgg ZWZkYjM0ZTI5ZC4uZDVmNGY1NjgwZSAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvYWxsZm9ybWF0 cy5jCisrKyBiL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYwpAQCAtMjcwLDYgKzI3MCw3IEBAIGV4 dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbHZfZGVtdXhlcjsKIGV4dGVybiBjb25zdCBB VklucHV0Rm9ybWF0ICBmZl9tbV9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEFWSW5wdXRGb3JtYXQg IGZmX21tZl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX21tZl9tdXhl cjsKK2V4dGVybiBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tbXR0bHZfZGVtdXhlcjsKIGV4dGVy biBjb25zdCBBVklucHV0Rm9ybWF0ICBmZl9tb2RzX2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJ bnB1dEZvcm1hdCAgZmZfbW9mbGV4X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1h dCAgZmZfbW92X2RlbXV4ZXI7CmRpZmYgLS1naXQgYS9saWJhdmZvcm1hdC9tbXRwLmMgYi9saWJh dmZvcm1hdC9tbXRwLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uY2I0 MGI4MjJmYgotLS0gL2Rldi9udWxsCisrKyBiL2xpYmF2Zm9ybWF0L21tdHAuYwpAQCAtMCwwICsx LDExNjkgQEAKKy8qCisgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1UUCkgcGFy c2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMS4KKyAqIENvcHlyaWdodCAoYykgMjAy MyBTdXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAq IEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK KyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVk IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkg V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hB TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH TlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg KgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH ZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0 ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisjaW5j bHVkZSAibGliYXZ1dGlsL21lbS5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC9hdmFzc2VydC5oIgor I2luY2x1ZGUgImxpYmF2dXRpbC9pbnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJuZXR3b3JrLmgi CisjaW5jbHVkZSAibW10cC5oIgorI2luY2x1ZGUgImludGVybmFsLmgiCisjaW5jbHVkZSAiZGVt dXguaCIKKworI2luY2x1ZGUgPHN0ZGJvb2wuaD4KKworI2RlZmluZSBMSU1JVF9SRUFEKGNvbnN1 bWUsIGJsb2NrKSBcCisgICAgaWYgKHNpemUgPCAoY29uc3VtZSkpIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOyBcCisgICAgYmxvY2s7IFwKKyAgICBidWYgKz0gKGNvbnN1bWUpOyBcCisgICAg c2l6ZSAtPSAoY29uc3VtZSk7CisKKyNkZWZpbmUgTVVTVF9DT05TVU1FKGNvbnN1bWUpIFwKKyAg ICBhdl9hc3NlcnQxKChjb25zdW1lKSA8PSBzaXplKTsgXAorICAgIGJ1ZiArPSAoY29uc3VtZSk7 IFwKKyAgICBzaXplIC09IChjb25zdW1lKTsKKworc3RydWN0IE1NVEdlbmVyYWxMb2NhdGlvbklu Zm8geworICAgIHVpbnQ4X3QgbG9jYXRpb25fdHlwZTsKKyAgICB1bmlvbiB7CisgICAgICAgIHN0 cnVjdCB7CisgICAgICAgICAgICB1aW50MTZfdCBwYWNrZXRfaWQ7CisgICAgICAgIH0gdHlwZTA7 CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICBzdHJ1Y3QgaW5fYWRkciBpcHY0X3NyY19h ZGRyOworICAgICAgICAgICAgc3RydWN0IGluX2FkZHIgaXB2NF9kc3RfYWRkcjsKKyAgICAgICAg ICAgIGluX3BvcnRfdCAgICAgIGRzdF9wb3J0OworICAgICAgICAgICAgdWludDE2X3QgICAgICAg cGFja2V0X2lkOworICAgICAgICB9IHR5cGUxOworICAgICAgICBzdHJ1Y3QgeworICAgICAgICAg ICAgc3RydWN0IGluNl9hZGRyIGlwdjZfc3JjX2FkZHI7CisgICAgICAgICAgICBzdHJ1Y3QgaW42 X2FkZHIgaXB2Nl9kc3RfYWRkcjsKKyAgICAgICAgICAgIGluX3BvcnRfdCAgICAgICBkc3RfcG9y dDsKKyAgICAgICAgICAgIHVpbnQxNl90ICAgICAgICBwYWNrZXRfaWQ7CisgICAgICAgIH0gdHlw ZTI7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAgICB1aW50MTZfdCBuZXR3b3JrX2lkOwor ICAgICAgICAgICAgdWludDE2X3QgTVBFR18yX3RyYW5zcG9ydF9zdHJlYW1faWQ7CisgICAgICAg ICAgICB1aW50MTZfdCBNUEVHXzJfUElEOiAxMzsKKyAgICAgICAgfSB0eXBlMzsKKyAgICAgICAg c3RydWN0IHsKKyAgICAgICAgICAgIHN0cnVjdCBpbjZfYWRkciBpcHY2X3NyY19hZGRyOworICAg ICAgICAgICAgc3RydWN0IGluNl9hZGRyIGlwdjZfZHN0X2FkZHI7CisgICAgICAgICAgICBpbl9w b3J0X3QgICAgICAgZHN0X3BvcnQ7CisgICAgICAgICAgICB1aW50MTZfdCAgICAgICAgTVBFR18y X1BJRDogMTM7CisgICAgICAgIH0gdHlwZTQ7CisgICAgICAgIHN0cnVjdCB7CisgICAgICAgICAg ICBjaGFyIFVSTFsweDEwMCArIDFdOworICAgICAgICB9IHR5cGU1OworICAgIH07Cit9OworCitz dGF0aWMgaW5saW5lIHNzaXplX3QKK3BhcnNlX21tdF9nZW5lcmFsX2xvY2F0aW9uX2luZm8oc3Ry dWN0IE1NVEdlbmVyYWxMb2NhdGlvbkluZm8gKmluZm8sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWlu dDMyX3Qgc2l6ZSkgeworICAgIGlmIChzaXplIDwgMSkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgc3dpdGNoIChpbmZvLT5sb2NhdGlvbl90eXBlID0gYnVmWzBdKSB7CisgICAgY2Fz ZSAweDAwOgorICAgICAgICBpZiAoc2l6ZSA8IDMpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRB OworICAgICAgICBpbmZvLT50eXBlMC5wYWNrZXRfaWQgPSBBVl9SQjE2KGJ1ZiArIDEpOworICAg ICAgICByZXR1cm4gMzsKKyAgICBjYXNlIDB4MDE6CisgICAgICAgIGlmIChzaXplIDwgKDMyICsg MzIgKyAxNiArIDE2KSAvIDggKyAxKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAg ICAgbWVtY3B5KCZpbmZvLT50eXBlMS5pcHY0X3NyY19hZGRyLCBidWYgKyAxLCA0KTsKKyAgICAg ICAgbWVtY3B5KCZpbmZvLT50eXBlMS5pcHY0X2RzdF9hZGRyLCBidWYgKyAxICsgNCwgNCk7Cisg ICAgICAgIGluZm8tPnR5cGUxLmRzdF9wb3J0ICA9IEFWX1JCMTYoYnVmICsgMSArIDQgKyA0KTsK KyAgICAgICAgaW5mby0+dHlwZTEucGFja2V0X2lkID0gQVZfUkIxNihidWYgKyAxICsgNCArIDQg KyAyKTsKKyAgICAgICAgcmV0dXJuICgzMiArIDMyICsgMTYgKyAxNikgLyA4ICsgMTsKKyAgICBj YXNlIDB4MDI6CisgICAgICAgIGlmIChzaXplIDwgKDEyOCArIDEyOCArIDE2ICsgMTYpIC8gOCAr IDEpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBtZW1jcHkoJmluZm8tPnR5 cGUyLmlwdjZfc3JjX2FkZHIsIGJ1ZiArIDEsIDE2KTsKKyAgICAgICAgbWVtY3B5KCZpbmZvLT50 eXBlMi5pcHY2X2RzdF9hZGRyLCBidWYgKyAxICsgMTYsIDE2KTsKKyAgICAgICAgaW5mby0+dHlw ZTIuZHN0X3BvcnQgID0gQVZfUkIxNihidWYgKyAxICsgMTYgKyAxNik7CisgICAgICAgIGluZm8t PnR5cGUyLnBhY2tldF9pZCA9IEFWX1JCMTYoYnVmICsgMSArIDE2ICsgMTYgKyAyKTsKKyAgICAg ICAgcmV0dXJuICgxMjggKyAxMjggKyAxNiArIDE2KSAvIDggKyAxOworICAgIGNhc2UgMHgwMzoK KyAgICAgICAgaWYgKHNpemUgPCAoMTYgKyAxNiArIDMgKyAxMykgLyA4ICsgMSkgcmV0dXJuIEFW RVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGluZm8tPnR5cGUzLm5ldHdvcmtfaWQgICAgICAg ICAgICAgICAgID0gQVZfUkIxNihidWYgKyAxKTsKKyAgICAgICAgaW5mby0+dHlwZTMuTVBFR18y X3RyYW5zcG9ydF9zdHJlYW1faWQgPSBBVl9SQjE2KGJ1ZiArIDEgKyAyKTsKKyAgICAgICAgaW5m by0+dHlwZTMuTVBFR18yX1BJRCAgICAgICAgICAgICAgICAgPSBBVl9SQjE2KGJ1ZiArIDEgKyAy ICsgMikgJiAwYjExMTExMTExMTExMTE7CisgICAgICAgIHJldHVybiAoMTYgKyAxNiArIDMgKyAx MykgLyA4ICsgMTsKKyAgICBjYXNlIDB4MDQ6CisgICAgICAgIGlmIChzaXplIDwgKDEyOCArIDEy OCArIDE2ICsgMyArIDEzKSAvIDggKyAxKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAg ICAgICAgbWVtY3B5KCZpbmZvLT50eXBlNC5pcHY2X3NyY19hZGRyLCBidWYgKyAxLCAxNik7Cisg ICAgICAgIG1lbWNweSgmaW5mby0+dHlwZTQuaXB2Nl9kc3RfYWRkciwgYnVmICsgMSArIDE2LCAx Nik7CisgICAgICAgIGluZm8tPnR5cGU0LmRzdF9wb3J0ICAgPSBBVl9SQjE2KGJ1ZiArIDEgKyAx NiArIDE2KTsKKyAgICAgICAgaW5mby0+dHlwZTQuTVBFR18yX1BJRCA9IEFWX1JCMTYoYnVmICsg MSArIDE2ICsgMTYgKyAyKSAmIDBiMTExMTExMTExMTExMTsKKyAgICAgICAgcmV0dXJuICgxMjgg KyAxMjggKyAxNiArIDMgKyAxMykgLyA4ICsgMTsKKyAgICBjYXNlIDB4MDU6CisgICAgICAgIGlm IChzaXplIDwgMikgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGlmIChzaXpl IDwgMSArIDEgKyBidWZbMV0pIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBt ZW1jcHkoaW5mby0+dHlwZTUuVVJMLCBidWYgKyAyLCBidWZbMV0pOworICAgICAgICBpbmZvLT50 eXBlNS5VUkxbYnVmWzFdXSA9ICdcMCc7CisgICAgICAgIHJldHVybiAxICsgMSArIGJ1ZlsxXTsK KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9 Cit9CisKKworc3RydWN0IFN0cmVhbXMgeworICAgIEFWU3RyZWFtICpzdHJlYW07CisKKyAgICBp bnQgbnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsKKyAgICBzdHJ1Y3QgTVBVVGltZXN0YW1wRGVz Y3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90IHNlcXVlbmNlX251bWJlcjsKKyAgICAgICAgaW50 NjRfdCAgcHJlc2VudGF0aW9uX3RpbWU7CisgICAgfSAqdGltZXN0YW1wX2Rlc2NyaXB0b3I7CisK KyAgICBpbnQgbnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnM7CisgICAgc3RydWN0IE1QVUV4 dGVuZGVkVGltZXN0YW1wRGVzY3JpcHRvciB7CisgICAgICAgIHVpbnQzMl90IHNlcXVlbmNlX251 bWJlcjsKKyAgICAgICAgdWludDE2X3QgZGVjb2RpbmdfdGltZV9vZmZzZXQ7CisgICAgICAgIHVp bnQ4X3QgIG51bV9vZl9hdTsKKyAgICAgICAgc3RydWN0IHsKKyAgICAgICAgICAgIHVpbnQxNl90 IGR0c19wdHNfb2Zmc2V0OworICAgICAgICAgICAgdWludDE2X3QgcHRzX29mZnNldDsKKyAgICAg ICAgfSBhdVsweDEwMF07CisgICAgfSAqZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yOworCisgICAg dWludDMyX3QgICAgbGFzdF9zZXF1ZW5jZV9udW1iZXI7CisgICAgdWludDE2X3QgICAgYXVfY291 bnQ7CisgICAgQVZCdWZmZXJSZWYgKnBlbmRpbmdfYnVmZmVyOworICAgIGludDY0X3QgICAgIG9m ZnNldDsKKyAgICBpbnQgICAgICAgICBmbGFnczsKKworICAgIHN0cnVjdCBTdHJlYW1zICpuZXh0 OworfTsKKworc3RydWN0IE1NVFBDb250ZXh0IHsKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJs ZXIgKmFzc2VtYmxlcjsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAgICAgICAgICAgKnN0cmVhbXM7Cisg ICAgQVZQcm9ncmFtICAgICAgICAgICAgICAgICpwcm9ncmFtOworICAgIC8vIHN0cnVjdCBNTVRH ZW5lcmFsTG9jYXRpb25JbmZvIG1wdF9sb2NhdGlvbjsgVE9ETworCisgICAgLy8gYmVsb3cgYXJl IHRlbXBvcmFyeSBmaWVsZHMgYXZhaWxhYmxlIGZvciB0aGUgc2NvcGUgb2YgYSBzaW5nbGUgcGFj a2V0CisgICAgQVZGb3JtYXRDb250ZXh0ICpzOworICAgIEFWUGFja2V0ICAgICAgICAqcGt0Owor ICAgIHVpbnQxNl90ICAgICAgICBjdXJyZW50X3BpZDsKKyAgICBib29sIGlzX3JhcDsKK307CisK K3N0YXRpYyBpbmxpbmUgc3RydWN0IFN0cmVhbXMgKmZpbmRfY3VycmVudF9zdHJlYW0oc3RydWN0 IE1NVFBDb250ZXh0ICpjdHgpIHsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtczsKKyAgICBm b3IgKHN0cmVhbXMgPSBjdHgtPnN0cmVhbXM7IHN0cmVhbXMgIT0gTlVMTDsgc3RyZWFtcyA9IHN0 cmVhbXMtPm5leHQpCisgICAgICAgIGlmIChzdHJlYW1zLT5zdHJlYW0tPmlkID09IGN0eC0+Y3Vy cmVudF9waWQpCisgICAgICAgICAgICByZXR1cm4gc3RyZWFtczsKKyAgICByZXR1cm4gTlVMTDsK K30KKworc3RhdGljIGlubGluZSBzdHJ1Y3QgU3RyZWFtcyAqZmluZF9vcl9hbGxvY2F0ZV9zdHJl YW0oc3RydWN0IE1NVFBDb250ZXh0ICpjdHgsIHVpbnQxNl90IHBpZCkgeworICAgIEFWU3RyZWFt ICAgICAgICpzdHJlYW07CisgICAgc3RydWN0IFN0cmVhbXMgKnN0cmVhbXM7CisgICAgZm9yIChz dHJlYW1zID0gY3R4LT5zdHJlYW1zOyBzdHJlYW1zICE9IE5VTEw7IHN0cmVhbXMgPSBzdHJlYW1z LT5uZXh0KQorICAgICAgICBpZiAoc3RyZWFtcy0+c3RyZWFtLT5pZCA9PSBwaWQpIHsKKyAgICAg ICAgICAgIGZmc3RyZWFtKHN0cmVhbXMtPnN0cmVhbSktPm5lZWRfY29udGV4dF91cGRhdGUgPSAx OworICAgICAgICAgICAgcmV0dXJuIHN0cmVhbXM7CisgICAgICAgIH0KKworICAgIHN0cmVhbSA9 IGF2Zm9ybWF0X25ld19zdHJlYW0oY3R4LT5zLCBOVUxMKTsKKyAgICBpZiAoc3RyZWFtID09IE5V TEwpIHJldHVybiBOVUxMOworICAgIHN0cmVhbS0+aWQgPSBwaWQ7CisgICAgYXZfcHJvZ3JhbV9h ZGRfc3RyZWFtX2luZGV4KGN0eC0+cywgY3R4LT5wcm9ncmFtLT5pZCwgc3RyZWFtLT5pbmRleCk7 CisKKyAgICBzdHJlYW1zID0gYXZfbWFsbG9jeihzaXplb2Yoc3RydWN0IFN0cmVhbXMpKTsKKyAg ICBpZiAoc3RyZWFtcyA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBzdHJlYW1zLT5zdHJlYW0g PSBzdHJlYW07CisgICAgc3RyZWFtcy0+bmV4dCAgID0gY3R4LT5zdHJlYW1zOworICAgIHN0cmVh bXMtPm9mZnNldCA9IC0xOworICAgIGN0eC0+c3RyZWFtcyAgICA9IHN0cmVhbXM7CisgICAgcmV0 dXJuIHN0cmVhbXM7Cit9CisKK2VudW0geworICAgIE1NVF9QQUNLQUdFX1RBQkxFX0lEICA9IDB4 MjAsCisgICAgUEFDS0FHRV9MSVNUX1RBQkxFX0lEID0gMHg4MCwKK307CisKK2VudW0geworICAg IE1QVV9USU1FU1RBTVBfREVTQ1JJUFRPUiAgICAgICAgICA9IDB4MDAwMSwKKyAgICBWSURFT19D T01QT05FTlRfREVTQ1JJUFRPUiAgICAgICAgPSAweDgwMTAsCisgICAgTUhfU1RSRUFNX0lERU5U SUZJRVJfREVTQ1JJUFRPUiAgID0gMHg4MDExLAorICAgIE1IX0FVRElPX0NPTVBPTkVOVF9ERVND UklQVE9SICAgICA9IDB4ODAxNCwKKyAgICBNSF9EQVRBX0NPTVBPTkVOVF9ERVNDUklQVE9SICAg ICAgPSAweDgwMjAsCisgICAgTVBVX0VYVEVOREVEX1RJTUVTVEFNUF9ERVNDUklQVE9SID0gMHg4 MDI2LAorfTsKKworc3RhdGljIGlubGluZSBzc2l6ZV90IHBhcnNlX3ZpZGVvX2NvbXBvbmVudF9k ZXNjcmlwdG9yKEFWU3RyZWFtICpzdHJlYW0sIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3Qg c2l6ZSkgeworICAgIHVpbnQzMl90IHJlYWRfc2l6ZTsKKyAgICB1aW50OF90ICBsYW5ndWFnZV9j b2RlWzRdOworCisgICAgTElNSVRfUkVBRCgoMTYgKyA4ICsgNCArIDQgKyAxICsgMiArIDUgKyAx NiArIDQgKyA0ICsgMjQpIC8gOCwgeworICAgICAgICBhdl9hc3NlcnQxKEFWX1JCMTYoYnVmKSA9 PSBWSURFT19DT01QT05FTlRfREVTQ1JJUFRPUl9JRCk7CisgICAgICAgIHJlYWRfc2l6ZSA9IHNp emUgPSBidWZbMl0gKyAzOworICAgICAgICBtZW1jcHkobGFuZ3VhZ2VfY29kZSwgYnVmICsgOCwg Myk7CisgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAwOworICAgIH0pCisKKyAgICBhdl9kaWN0 X3NldCgmc3RyZWFtLT5tZXRhZGF0YSwgImxhbmd1YWdlIiwgbGFuZ3VhZ2VfY29kZSwgMCk7CisK KyAgICByZXR1cm4gcmVhZF9zaXplOworfQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QgcGFyc2Vf bWhfYXVkaW9fY29tcG9uZW50X2Rlc2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgY29uc3QgdWlu dDhfdCAqYnVmLCB1aW50MzJfdCBzaXplKSB7CisgICAgdWludDMyX3QgcmVhZF9zaXplOworICAg IHVpbnQ4X3QgIHN0cmVhbV9jb250ZW50OworICAgIHVpbnQ4X3QgIHN0cmVhbV90eXBlOworICAg IGJvb2wgICAgIEVTX211bHRpX2xpbmd1YWxfZmxhZzsKKyAgICB1aW50OF90ICBsYW5ndWFnZV9j b2RlWzRdOworCisgICAgTElNSVRfUkVBRCgoMTYgKyA4ICsgNCArIDQgKyA4ICsgMTYgKyA4ICsg OCArIDEgKyAxICsgMiArIDMgKyAxICsgMjQpIC8gOCwgeworICAgICAgICBhdl9hc3NlcnQxKEFW X1JCMTYoYnVmKSA9PSBNSF9BVURJT19DT01QT05FTlRfREVTQ1JJUFRPUl9JRCk7CisgICAgICAg IHJlYWRfc2l6ZSAgICAgICAgICAgICA9IHNpemUgPSBidWZbMl0gKyAzOworICAgICAgICBzdHJl YW1fY29udGVudCAgICAgICAgPSBidWZbM10gJiAwYjExMTE7CisgICAgICAgIHN0cmVhbV90eXBl ICAgICAgICAgICA9IGJ1Zls3XTsKKyAgICAgICAgRVNfbXVsdGlfbGluZ3VhbF9mbGFnID0gYnVm WzldID4+IDc7CisgICAgICAgIG1lbWNweShsYW5ndWFnZV9jb2RlLCBidWYgKyAxMCwgMyk7Cisg ICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAwOworICAgIH0pCisKKyAgICBpZiAoRVNfbXVsdGlf bGluZ3VhbF9mbGFnKSB7CisgICAgICAgIExJTUlUX1JFQUQoMywpCisgICAgfQorCisgICAgc3dp dGNoIChzdHJlYW1fY29udGVudCkgeworICAgIGNhc2UgMHgzOgorICAgICAgICBzd2l0Y2ggKHN0 cmVhbV90eXBlKSB7CisgICAgICAgIGNhc2UgMHgxMToKKyAgICAgICAgICAgIHN0cmVhbS0+Y29k ZWNwYXItPmNvZGVjX2lkID0gQVZfQ09ERUNfSURfQUFDX0xBVE07CisgICAgICAgICAgICBicmVh azsKKyAgICAgICAgY2FzZSAweDFjOgorICAgICAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+Y29k ZWNfaWQgPSBBVl9DT0RFQ19JRF9BQUM7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor ICAgICAgICBicmVhazsKKyAgICBjYXNlIDB4NDoKKyAgICAgICAgc3RyZWFtLT5jb2RlY3Bhci0+ Y29kZWNfaWQgPSBBVl9DT0RFQ19JRF9NUDRBTFM7CisgICAgICAgIGJyZWFrOworICAgIH0KKwor ICAgIGF2X2RpY3Rfc2V0KCZzdHJlYW0tPm1ldGFkYXRhLCAibGFuZ3VhZ2UiLCBsYW5ndWFnZV9j b2RlLCAwKTsKKworICAgIHJldHVybiByZWFkX3NpemU7Cit9CisKKyNkZWZpbmUgTUFYX05VTV9U SU1FU1RBTVBfREVTQ1JJUFRPUiAzMgorI2RlZmluZSBESUZGKGEsIGIpICgoYSkgPiAoYikgPyAo KGEpIC0gKGIpKSA6ICgoYikgLSAoYSkpKQorCitzdGF0aWMgaW5saW5lIHNzaXplX3QgcGFyc2Vf bXB1X3RpbWVzdGFtcF9kZXNjcmlwdG9yKHN0cnVjdCBTdHJlYW1zICpzdHJlYW1zLCBjb25zdCB1 aW50OF90ICpidWYsIHVpbnQzMl90IHNpemUpIHsKKyAgICB1aW50MzJfdCByZWFkX3NpemU7CisK KyAgICBMSU1JVF9SRUFEKCgxNiArIDgpIC8gOCwgeworICAgICAgICBhdl9hc3NlcnQxKEFWX1JC MTYoYnVmKSA9PSBNUFVfVElNRVNUQU1QX0RFU0NSSVBUT1JfSUQpOworICAgICAgICByZWFkX3Np emUgPSBzaXplID0gYnVmWzJdICsgMzsKKyAgICB9KQorCisgICAgd2hpbGUgKHNpemUgPiAwKSB7 CisgICAgICAgIHVpbnQ2NF90IG1wdV9zZXFfbnVtOworICAgICAgICBpbnQ2NF90ICBtcHVfcHJl c2VudGF0aW9uX3RpbWU7CisKKyAgICAgICAgTElNSVRfUkVBRCgoMzIgKyA2NCkgLyA4LCB7Cisg ICAgICAgICAgICBtcHVfc2VxX251bSAgICAgICAgICAgPSBBVl9SQjMyKGJ1Zik7CisgICAgICAg ICAgICBtcHVfcHJlc2VudGF0aW9uX3RpbWUgPSBmZl9wYXJzZV9udHBfdGltZShBVl9SQjY0KGJ1 ZiArIDQpKSAtIE5UUF9PRkZTRVRfVVM7CisgICAgICAgIH0pCisKKyAgICAgICAgZG8geworICAg ICAgICAgICAgc3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0b3IgKmRlc2M7CisgICAgICAgICAg ICBzaXplX3QgICAgICAgICAgICAgICAgICAgICAgICBpOworCisgICAgICAgICAgICBpZiAobXB1 X3NlcV9udW0gPCBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgYnJlYWs7CisKKyAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3Jz OyArK2kpCisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9y W2ldLnNlcXVlbmNlX251bWJlciA9PSBtcHVfc2VxX251bSkgeworICAgICAgICAgICAgICAgICAg ICBkZXNjID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAgICAgICAg ICAgICAgICBnb3RvIGVuZDI7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3Ig KGkgPSAwOyBpIDwgc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQorICAg ICAgICAgICAgICAgIGlmIChzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5j ZV9udW1iZXIgPCBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAg ICAgICAgICBkZXNjID0gc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3IgKyBpOworICAgICAg ICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAg ICBpZiAoc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlwdG9ycyArIDEgPiBNQVhfTlVNX1RJ TUVTVEFNUF9ERVNDUklQVE9SKSB7CisgICAgICAgICAgICAgICAgLy8gd2UgaGF2ZSBhbGwgZGVz Y3JpcHRvcnMgbGFyZ2VyIHRoYW4gdGhlIGN1cnJlbnQgc2VxdWVuY2UgbnVtYmVyCisgICAgICAg ICAgICAgICAgLy8gd2UgY2FuJ3QgYWRkIG1vcmUsIHNvIHdlIHNob3VsZCBldmljdCB0aGUgb25l IHdpdGggdGhlIGxhcmdlc3QgZGlzdGFuY2UKKyAgICAgICAgICAgICAgICB1aW50NjRfdCBtYXhf ZGlzdCA9IDA7CisgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV90 aW1lc3RhbXBfZGVzY3JpcHRvcnM7ICsraSkKKyAgICAgICAgICAgICAgICAgICAgaWYgKERJRkYo c3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2Vx X251bSkgPiBtYXhfZGlzdCkgeworICAgICAgICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBz dHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgICAg ICBtYXhfZGlzdCA9IERJRkYoc3RyZWFtcy0+dGltZXN0YW1wX2Rlc2NyaXB0b3JbaV0uc2VxdWVu Y2VfbnVtYmVyLCBtcHVfc2VxX251bSk7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgICAgICBhdl9hc3NlcnQxKGRlc2MgIT0gTlVMTCk7IC8vIHNob3VsZCBuZXZlciBmYWlsCisg ICAgICAgICAgICAgICAgZ290byBlbmQxOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBk ZXNjID0gYXZfZHluYXJyYXkyX2FkZCgKKyAgICAgICAgICAgICAgICAodm9pZCAqKikgJnN0cmVh bXMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yLCAmc3RyZWFtcy0+bnVtX3RpbWVzdGFtcF9kZXNjcmlw dG9ycywKKyAgICAgICAgICAgICAgICBzaXplb2Yoc3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0 b3IpLCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChkZXNjID09IE5VTEwpIHJldHVybiBBVkVSUk9S KEVOT01FTSk7CisKKyAgICAgICAgICAgIGVuZDE6CisgICAgICAgICAgICBkZXNjLT5zZXF1ZW5j ZV9udW1iZXIgICA9IG1wdV9zZXFfbnVtOworICAgICAgICAgICAgZW5kMjoKKyAgICAgICAgICAg IGRlc2MtPnByZXNlbnRhdGlvbl90aW1lID0gbXB1X3ByZXNlbnRhdGlvbl90aW1lOworICAgICAg ICB9IHdoaWxlICgwKTsKKyAgICB9CisKKyAgICByZXR1cm4gcmVhZF9zaXplOworfQorCitzdGF0 aWMgaW5saW5lIHNzaXplX3QKK3BhcnNlX21wdV9leHRlbmRlZF90aW1lc3RhbXBfZGVzY3JpcHRv cihzdHJ1Y3QgU3RyZWFtcyAqc3RyZWFtcywgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MzJfdCBz aXplKSB7CisgICAgdWludDMyX3QgcmVhZF9zaXplOworCisgICAgdWludDhfdCAgcHRzX29mZnNl dF90eXBlOworICAgIGJvb2wgICAgIHRpbWVzY2FsZV9mbGFnOworICAgIHVpbnQxNl90IGRlZmF1 bHRfcHRzX29mZnNldCA9IDA7CisKKyAgICBBVlN0cmVhbSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICpzdHJlYW0gPSBzdHJlYW1zLT5zdHJlYW07CisgICAgc3RydWN0IE1QVUV4dGVuZGVk VGltZXN0YW1wRGVzY3JpcHRvciAqZGVzYzsKKworICAgIExJTUlUX1JFQUQoKDE2ICsgOCArIDUg KyAyICsgMSkgLyA4LCB7CisgICAgICAgIGF2X2Fzc2VydDEoQVZfUkIxNihidWYpID09IE1QVV9F WFRFTkRFRF9USU1FU1RBTVBfREVTQ1JJUFRPUl9JRCk7CisgICAgICAgIHJlYWRfc2l6ZSAgICAg ICA9IHNpemUgPSBidWZbMl0gKyAzOworICAgICAgICBwdHNfb2Zmc2V0X3R5cGUgPSAoYnVmWzNd ID4+IDEpICYgMGIxMTsKKyAgICAgICAgdGltZXNjYWxlX2ZsYWcgID0gYnVmWzNdICYgMTsKKyAg ICB9KQorCisgICAgaWYgKHRpbWVzY2FsZV9mbGFnKSB7CisgICAgICAgIExJTUlUX1JFQUQoNCwg eworICAgICAgICAgICAgc3RyZWFtLT50aW1lX2Jhc2UubnVtID0gMTsKKyAgICAgICAgICAgIHN0 cmVhbS0+dGltZV9iYXNlLmRlbiA9IEFWX1JCMzIoYnVmKTsKKyAgICAgICAgfSkKKyAgICB9CisK KyAgICBpZiAocHRzX29mZnNldF90eXBlID09IDEpIHsKKyAgICAgICAgTElNSVRfUkVBRCgyLCBk ZWZhdWx0X3B0c19vZmZzZXQgPSBBVl9SQjE2KGJ1ZikpCisgICAgfQorCisgICAgd2hpbGUgKHNp emUgPiAwKSB7CisgICAgICAgIHNpemVfdCAgaTsKKyAgICAgICAgdWludDhfdCBudW1fb2ZfYXU7 CisKKyAgICAgICAgaWYgKHB0c19vZmZzZXRfdHlwZSA9PSAwKQorICAgICAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOworCisgICAgICAgIGRlc2MgPSBOVUxMOworICAgICAgICBM SU1JVF9SRUFEKCgzMiArIDIgKyA2ICsgMTYgKyA4KSAvIDgsIGRvIHsKKyAgICAgICAgICAgIGNv bnN0IHVpbnQ2NF90IG1wdV9zZXFfbnVtID0gQVZfUkIzMihidWYpOworICAgICAgICAgICAgbnVt X29mX2F1ICAgICAgICAgICAgICAgICAgPSBidWZbN107CisKKyAgICAgICAgICAgIGlmIChtcHVf c2VxX251bSA8IHN0cmVhbXMtPmxhc3Rfc2VxdWVuY2VfbnVtYmVyKSBicmVhazsKKworICAgICAg ICAgICAgZm9yIChpID0gMDsgaSA8IHN0cmVhbXMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JzOyArK2kpCisgICAgICAgICAgICAgICAgaWYgKHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVz Y3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIgPT0gbXB1X3NlcV9udW0pIHsKKyAgICAgICAgICAg ICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvciArIGk7Cisg ICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAg ICAgICAgIGZvciAoaSA9IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlw dG9yczsgKytpKQorICAgICAgICAgICAgICAgIGlmIChzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rl c2NyaXB0b3JbaV0uc2VxdWVuY2VfbnVtYmVyIDwgc3RyZWFtcy0+bGFzdF9zZXF1ZW5jZV9udW1i ZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgZGVzYyA9IHN0cmVhbXMtPmV4dF90aW1lc3RhbXBf ZGVzY3JpcHRvciArIGk7CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZW5kMTsKKyAgICAgICAg ICAgICAgICB9CisKKyAgICAgICAgICAgIGlmIChzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9k ZXNjcmlwdG9ycyArIDEgPiBNQVhfTlVNX1RJTUVTVEFNUF9ERVNDUklQVE9SKSB7CisgICAgICAg ICAgICAgICAgdWludDY0X3QgbWF4X2RpZmYgPSAwOworICAgICAgICAgICAgICAgIGZvciAoaSA9 IDA7IGkgPCBzdHJlYW1zLT5udW1fZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yczsgKytpKQorICAg ICAgICAgICAgICAgICAgICBpZiAoRElGRihzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JbaV0uc2VxdWVuY2VfbnVtYmVyLCBtcHVfc2VxX251bSkgPiBtYXhfZGlmZikgeworICAgICAg ICAgICAgICAgICAgICAgICAgZGVzYyAgICAgPSBzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2Ny aXB0b3IgKyBpOworICAgICAgICAgICAgICAgICAgICAgICAgbWF4X2RpZmYgPSBESUZGKHN0cmVh bXMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5zZXF1ZW5jZV9udW1iZXIsIG1wdV9zZXFf bnVtKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGF2X2Fzc2VydDEo ZGVzYyAhPSBOVUxMKTsKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDE7CisgICAgICAgICAgICB9 CisKKyAgICAgICAgICAgIGRlc2MgPSBhdl9keW5hcnJheTJfYWRkKAorICAgICAgICAgICAgICAg ICh2b2lkICoqKSAmc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yLCAmc3RyZWFtcy0+ bnVtX2V4dF90aW1lc3RhbXBfZGVzY3JpcHRvcnMsCisgICAgICAgICAgICAgICAgc2l6ZW9mKHN0 cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IpLCBOVUxMKTsKKyAgICAgICAgICAg IGlmIChkZXNjID09IE5VTEwpCisgICAgICAgICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVN KTsKKworICAgICAgICAgICAgZW5kMToKKyAgICAgICAgICAgIGRlc2MtPnNlcXVlbmNlX251bWJl ciAgICAgID0gbXB1X3NlcV9udW07CisgICAgICAgICAgICBlbmQyOgorICAgICAgICAgICAgZGVz Yy0+ZGVjb2RpbmdfdGltZV9vZmZzZXQgPSBBVl9SQjE2KGJ1ZiArIDUpOworICAgICAgICAgICAg ZGVzYy0+bnVtX29mX2F1ICAgICAgICAgICAgPSBudW1fb2ZfYXU7CisgICAgICAgIH0gd2hpbGUg KDApKQorCisgICAgICAgIGZvciAoaSA9IDA7IGkgPCBudW1fb2ZfYXU7ICsraSkgeworICAgICAg ICAgICAgTElNSVRfUkVBRCgyLCBpZiAoZGVzYyAhPSBOVUxMKSBkZXNjLT5hdVtpXS5kdHNfcHRz X29mZnNldCA9IEFWX1JCMTYoYnVmKSkKKyAgICAgICAgICAgIGlmIChwdHNfb2Zmc2V0X3R5cGUg PT0gMikgeworICAgICAgICAgICAgICAgIExJTUlUX1JFQUQoMiwgaWYgKGRlc2MgIT0gTlVMTCkg ZGVzYy0+YXVbaV0ucHRzX29mZnNldCA9IEFWX1JCMTYoYnVmKSkKKyAgICAgICAgICAgIH0gZWxz ZSBpZiAoZGVzYyAhPSBOVUxMKSB7CisgICAgICAgICAgICAgICAgZGVzYy0+YXVbaV0ucHRzX29m ZnNldCA9IGRlZmF1bHRfcHRzX29mZnNldDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAg IH0KKworICAgIHJldHVybiByZWFkX3NpemU7Cit9CisKK3N0YXRpYyBpbnQgcGFyc2VfYWRkaXRp b25hbF9hcmliX3N1YnRpdGxlX2luZm8oQVZTdHJlYW0gKnN0cmVhbSwgY29uc3QgdWludDhfdCAq YnVmLCB1aW50MzJfdCBzaXplKSB7CisgICAgYm9vbCAgICBzdGFydF9tcHVfc2VxdWVuY2VfbnVt YmVyX2ZsYWc7CisgICAgY2hhciAgICBsYW5ndWFnZV9jb2RlWzRdOworICAgIHVpbnQ4X3Qgc3Vi dGl0bGVfZm9ybWF0OworCisgICAgTElNSVRfUkVBRCgoOCArIDQgKyAxICsgMyArIDI0ICsgMiAr IDQgKyAyICsgNCArIDQgKyA0ICsgNCkgLyA4LCB7CisgICAgICAgIHN0YXJ0X21wdV9zZXF1ZW5j ZV9udW1iZXJfZmxhZyA9IGJ1ZlsxXSA+PiAzOworICAgICAgICBtZW1jcHkobGFuZ3VhZ2VfY29k ZSwgYnVmICsgMiwgMyk7CisgICAgICAgIGxhbmd1YWdlX2NvZGVbM10gPSAnXDAnOworICAgICAg ICBzdWJ0aXRsZV9mb3JtYXQgID0gKGJ1Zls1XSA+PiAyKSAmIDBiMTExMTsKKyAgICB9KQorCisg ICAgaWYgKHN0YXJ0X21wdV9zZXF1ZW5jZV9udW1iZXJfZmxhZykgeworICAgICAgICBMSU1JVF9S RUFEKDMyIC8gOCwpOworICAgIH0KKworICAgIHN3aXRjaCAoc3VidGl0bGVfZm9ybWF0KSB7Cisg ICAgY2FzZSAwYjAwMDA6CisgICAgICAgIHN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkID0gQVZf Q09ERUNfSURfVFRNTDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYXZfZGljdF9zZXQo JnN0cmVhbS0+bWV0YWRhdGEsICJsYW5ndWFnZSIsIGxhbmd1YWdlX2NvZGUsIDApOworCisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBhcnNlX21oX2RhdGFfY29tcG9uZW50X2Rl c2NyaXB0b3IoQVZTdHJlYW0gKnN0cmVhbSwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MzJfdCBz aXplKSB7CisgICAgdWludDMyX3QgcmVhZF9zaXplOworICAgIGludCAgICAgIGVycjsKKyAgICB1 aW50MTZfdCBkYXRhX2NvbXBvbmVudF9pZDsKKworICAgIExJTUlUX1JFQUQoKDE2ICsgOCArIDE2 KSAvIDgsIHsKKyAgICAgICAgYXZfYXNzZXJ0MShBVl9SQjE2KGJ1ZikgPT0gTUhfREFUQV9DT01Q T05FTlRfREVTQ1JJUFRPUl9JRCk7CisgICAgICAgIHJlYWRfc2l6ZSAgICAgICAgID0gc2l6ZSA9 IGJ1ZlsyXSArIDM7CisgICAgICAgIGRhdGFfY29tcG9uZW50X2lkID0gQVZfUkIxNihidWYgKyAz KTsKKyAgICB9KQorCisgICAgc3dpdGNoIChkYXRhX2NvbXBvbmVudF9pZCkgeworICAgIGNhc2Ug MHgwMDIwOiAvLyBhZGRpdGlvbmFsIEFSSUIgc3VidGl0bGUgaW5mbyAoVGFibGUgNy03NCwgQVJJ QiBTVEQtQjYwLCBWZXJzaW9uIDEuMTQtRTEpCisgICAgICAgIGVyciA9IHBhcnNlX2FkZGl0aW9u YWxfYXJpYl9zdWJ0aXRsZV9pbmZvKHN0cmVhbSwgYnVmLCBzaXplKTsKKyAgICAgICAgaWYgKGVy ciA8IDApIHJldHVybiBlcnI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHJldHVybiBy ZWFkX3NpemU7Cit9CisKK3N0YXRpYyBzc2l6ZV90IHBhcnNlX2Rlc2NyaXB0b3Ioc3RydWN0IFN0 cmVhbXMgKnN0cmVhbXMsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3Qgc2l6ZSkgeworICAg IGlmIChzaXplIDwgMykgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgc3dpdGNoIChB Vl9SQjE2KGJ1ZikpIHsKKyAgICBjYXNlIE1QVV9USU1FU1RBTVBfREVTQ1JJUFRPUjoKKyAgICAg ICAgcmV0dXJuIHBhcnNlX21wdV90aW1lc3RhbXBfZGVzY3JpcHRvcihzdHJlYW1zLCBidWYsIHNp emUpOworICAgIGNhc2UgVklERU9fQ09NUE9ORU5UX0RFU0NSSVBUT1I6CisgICAgICAgIHJldHVy biBwYXJzZV92aWRlb19jb21wb25lbnRfZGVzY3JpcHRvcihzdHJlYW1zLT5zdHJlYW0sIGJ1Ziwg c2l6ZSk7CisgICAgY2FzZSBNSF9TVFJFQU1fSURFTlRJRklFUl9ERVNDUklQVE9SOgorICAgICAg ICByZXR1cm4gYnVmWzJdICsgMzsKKyAgICBjYXNlIE1IX0FVRElPX0NPTVBPTkVOVF9ERVNDUklQ VE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbWhfYXVkaW9fY29tcG9uZW50X2Rlc2NyaXB0b3Io c3RyZWFtcy0+c3RyZWFtLCBidWYsIHNpemUpOworICAgIGNhc2UgTUhfREFUQV9DT01QT05FTlRf REVTQ1JJUFRPUjoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21oX2RhdGFfY29tcG9uZW50X2Rlc2Ny aXB0b3Ioc3RyZWFtcy0+c3RyZWFtLCBidWYsIHNpemUpOworICAgIGNhc2UgTVBVX0VYVEVOREVE X1RJTUVTVEFNUF9ERVNDUklQVE9SOgorICAgICAgICByZXR1cm4gcGFyc2VfbXB1X2V4dGVuZGVk X3RpbWVzdGFtcF9kZXNjcmlwdG9yKHN0cmVhbXMsIGJ1Ziwgc2l6ZSk7CisgICAgfQorICAgIHJl dHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKK30KKworc3RhdGljIGlubGluZSBzc2l6ZV90IHBh cnNlX21tdF9wYWNrYWdlX3RhYmxlKE1NVFBDb250ZXh0ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgdWludDMyX3Qgc2l6ZSkgeworICAgIHVpbnQ4X3QgIHBhY2thZ2VfaWRfbGVuZ3RoOworICAg IHVpbnQxNl90IGRlc2NyaXB0b3JzX2xlbmd0aDsKKyAgICB1aW50OF90ICBudW1iZXJfb2ZfYXNz ZXRzOworCisgICAgc2l6ZV90ICAgaSwgajsKKyAgICBzc2l6ZV90ICByZWFkOworICAgIHVpbnQz Ml90IHJlYWRfc2l6ZTsKKworICAgIExJTUlUX1JFQUQoKDggKyA4ICsgMTYgKyA4ICsgOCkgLyA4 LCB7CisgICAgICAgIGF2X2Fzc2VydDEoYnVmWzBdID09IE1NVF9QQUNLQUdFX1RBQkxFX0lEKTsK KyAgICAgICAgcmVhZF9zaXplICAgICAgICAgPSBzaXplID0gQVZfUkIxNihidWYgKyAyKSArIDQ7 CisgICAgICAgIHBhY2thZ2VfaWRfbGVuZ3RoID0gYnVmWzVdOworICAgIH0pCisKKyAgICBMSU1J VF9SRUFEKHBhY2thZ2VfaWRfbGVuZ3RoLCkKKyAgICBMSU1JVF9SRUFEKDIsIGRlc2NyaXB0b3Jz X2xlbmd0aCA9IEFWX1JCMTYoYnVmKSkKKyAgICBMSU1JVF9SRUFEKGRlc2NyaXB0b3JzX2xlbmd0 aCwpCisgICAgTElNSVRfUkVBRCgxLCBudW1iZXJfb2ZfYXNzZXRzID0gYnVmWzBdKQorCisgICAg Zm9yIChpID0gMDsgaSA8IG51bWJlcl9vZl9hc3NldHM7ICsraSkgeworICAgICAgICB1aW50OF90 ICAgICAgICAgICAgICAgICAgICAgICBhc3NldF9pZF9sZW5ndGg7CisgICAgICAgIHVpbnQ4X3Qg ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uX2NvdW50OworICAgICAgICB1aW50MTZfdCAg ICAgICAgICAgICAgICAgICAgICBhc3NldF9kZXNjcmlwdG9yc19sZW5ndGg7CisgICAgICAgIHVp bnQzMl90ICAgICAgICAgICAgICAgICAgICAgIGFzc2V0X3R5cGU7CisgICAgICAgIHN0cnVjdCBT dHJlYW1zICAgICAgICAgICAgICAgICpzdHJlYW0gPSBOVUxMOworICAgICAgICBzdHJ1Y3QgTU1U R2VuZXJhbExvY2F0aW9uSW5mbyBpbmZvOworCisgICAgICAgIExJTUlUX1JFQUQoKDggKyAzMiAr IDgpIC8gOCwgYXNzZXRfaWRfbGVuZ3RoID0gYnVmWzVdKQorICAgICAgICBMSU1JVF9SRUFEKGFz c2V0X2lkX2xlbmd0aCwpCisKKyAgICAgICAgTElNSVRfUkVBRCg0LCBhc3NldF90eXBlID0gQVZf UkwzMihidWYpKQorCisgICAgICAgIC8vIHNraXAgcmVzZXJ2ZWQsIGFzc2V0X2Nsb2NrX3JlbGF0 aW9uX2ZsYWcKKyAgICAgICAgTElNSVRfUkVBRCgoNyArIDEgKyA4KSAvIDgsIGxvY2F0aW9uX2Nv dW50ID0gYnVmWzFdKQorCisgICAgICAgIGZvciAoaiA9IDA7IGogPCBsb2NhdGlvbl9jb3VudDsg KytqKSB7CisgICAgICAgICAgICBpZiAoKHJlYWQgPSBwYXJzZV9tbXRfZ2VuZXJhbF9sb2NhdGlv bl9pbmZvKCZpbmZvLCBidWYsIHNpemUpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIHJl YWQ7CisgICAgICAgICAgICBNVVNUX0NPTlNVTUUocmVhZCkKKyAgICAgICAgfQorICAgICAgICBz d2l0Y2ggKGFzc2V0X3R5cGUpIHsKKyAgICAgICAgY2FzZSBNS1RBRygnaCcsICdlJywgJ3YnLCAn MScpOgorICAgICAgICAgICAgaWYgKGluZm8ubG9jYXRpb25fdHlwZSAhPSAweDAwKSByZXR1cm4g QVZFUlJPUl9QQVRDSFdFTENPTUU7CisgICAgICAgICAgICBzdHJlYW0gPSBmaW5kX29yX2FsbG9j YXRlX3N0cmVhbShjdHgsIGluZm8udHlwZTAucGFja2V0X2lkKTsKKyAgICAgICAgICAgIGlmIChz dHJlYW0gPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgIHN0cmVh bS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfdHlwZSA9IEFWTUVESUFfVFlQRV9WSURFTzsKKyAg ICAgICAgICAgIHN0cmVhbS0+c3RyZWFtLT5jb2RlY3Bhci0+Y29kZWNfaWQgICA9IEFWX0NPREVD X0lEX0hFVkM7CisgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3Rh ZyAgPSBhc3NldF90eXBlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUtUQUco J20nLCAncCcsICc0JywgJ2EnKToKKyAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5cGUg IT0gMHgwMCkgcmV0dXJuIEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgICAgICAgICAgc3RyZWFt ID0gZmluZF9vcl9hbGxvY2F0ZV9zdHJlYW0oY3R4LCBpbmZvLnR5cGUwLnBhY2tldF9pZCk7Cisg ICAgICAgICAgICBpZiAoc3RyZWFtID09IE5VTEwpIHJldHVybiBBVkVSUk9SKEVOT01FTSk7Cisg ICAgICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElB X1RZUEVfQVVESU87CisgICAgICAgICAgICBzdHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVj X3RhZyAgPSBhc3NldF90eXBlOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgTUtU QUcoJ3MnLCAndCcsICdwJywgJ3AnKToKKyAgICAgICAgICAgIGlmIChpbmZvLmxvY2F0aW9uX3R5 cGUgPT0gMHgwMCkgeworICAgICAgICAgICAgICAgIHN0cmVhbSA9IGZpbmRfb3JfYWxsb2NhdGVf c3RyZWFtKGN0eCwgaW5mby50eXBlMC5wYWNrZXRfaWQpOworICAgICAgICAgICAgICAgIGlmIChz dHJlYW0gPT0gTlVMTCkgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgICAgICAgICBz dHJlYW0tPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX3R5cGUgPSBBVk1FRElBX1RZUEVfU1VCVElU TEU7CisgICAgICAgICAgICAgICAgc3RyZWFtLT5zdHJlYW0tPmNvZGVjcGFyLT5jb2RlY190YWcg ID0gYXNzZXRfdHlwZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBjYXNlIE1LVEFHKCdhJywgJ2EnLCAncCcsICdwJyk6CisgICAgICAgIGNhc2UgTUtUQUcoJ2En LCAncycsICdnJywgJ2QnKToKKyAgICAgICAgY2FzZSBNS1RBRygnYScsICdhJywgJ2cnLCAnZCcp OgorICAgICAgICAgICAgYnJlYWs7IC8vIFRPRE8KKyAgICAgICAgfQorCisgICAgICAgIExJTUlU X1JFQUQoMiwgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoID0gQVZfUkIxNihidWYpKQorICAgICAg ICBMSU1JVF9SRUFEKGFzc2V0X2Rlc2NyaXB0b3JzX2xlbmd0aCwgaWYgKHN0cmVhbSAhPSBOVUxM KSB7CisgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3Ro OykgeworICAgICAgICAgICAgICAgIGlmICgocmVhZCA9IHBhcnNlX2Rlc2NyaXB0b3Ioc3RyZWFt LCBidWYgKyBqLCBzaXplIC0gaikpIDwgMCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJl YWQ7CisgICAgICAgICAgICAgICAgaiArPSByZWFkOworICAgICAgICAgICAgfQorICAgICAgICAg ICAgaWYgKGogIT0gYXNzZXRfZGVzY3JpcHRvcnNfbGVuZ3RoKQorICAgICAgICAgICAgICAgIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICB9KQorICAgIH0KKworICAgIGlmIChz aXplICE9IDApIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHJldHVybiByZWFkX3Np emU7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3NpemVfdCBwYXJzZV9wYWNrYWdlX2xpc3RfdGFibGUo TU1UUENvbnRleHQgKmN0eCwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MzJfdCBzaXplKSB7Cisg ICAgdWludDhfdCBudW1fb2ZfcGFja2FnZTsKKyAgICB1aW50OF90IG51bV9vZl9pcF9kZWxpdmVy eTsKKworICAgIHNpemVfdCAgIGk7CisgICAgc3NpemVfdCAgcmVhZDsKKyAgICB1aW50MzJfdCBy ZWFkX3NpemU7CisKKyAgICBMSU1JVF9SRUFEKCg4ICsgOCArIDE2ICsgOCkgLyA4LCB7CisgICAg ICAgIGF2X2Fzc2VydDEoYnVmWzBdID09IFBBQ0tBR0VfTElTVF9UQUJMRV9JRCk7CisgICAgICAg IHJlYWRfc2l6ZSAgICAgID0gc2l6ZSA9IEFWX1JCMTYoYnVmICsgMikgKyA0OworICAgICAgICBu dW1fb2ZfcGFja2FnZSA9IGJ1Zls0XTsKKyAgICB9KQorCisgICAgZm9yIChpID0gMDsgaSA8IG51 bV9vZl9wYWNrYWdlOyArK2kpIHsKKyAgICAgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAg ICAgcGFja2FnZV9pZF9sZW5ndGg7CisgICAgICAgIHN0cnVjdCBNTVRHZW5lcmFsTG9jYXRpb25J bmZvIGluZm87CisKKyAgICAgICAgTElNSVRfUkVBRCgxLCBwYWNrYWdlX2lkX2xlbmd0aCA9IGJ1 ZlswXSkKKyAgICAgICAgTElNSVRfUkVBRChwYWNrYWdlX2lkX2xlbmd0aCwpCisKKyAgICAgICAg aWYgKChyZWFkID0gcGFyc2VfbW10X2dlbmVyYWxfbG9jYXRpb25faW5mbygmaW5mbywgYnVmLCBz aXplKSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJlYWQ7CisgICAgICAgIE1VU1RfQ09OU1VN RShyZWFkKQorICAgIH0KKworICAgIExJTUlUX1JFQUQoMSwgbnVtX29mX2lwX2RlbGl2ZXJ5ID0g YnVmWzBdKQorICAgIGlmIChudW1fb2ZfaXBfZGVsaXZlcnkgPiAwKQorICAgICAgICByZXR1cm4g QVZFUlJPUl9QQVRDSFdFTENPTUU7CisKKyAgICByZXR1cm4gcmVhZF9zaXplOworfQorCitzdGF0 aWMgc3NpemVfdCBwYXJzZV90YWJsZShNTVRQQ29udGV4dCAqY3R4LCBjb25zdCB1aW50OF90ICpi dWYsIHVpbnQzMl90IHNpemUpIHsKKyAgICBpZiAoc2l6ZSA8IDIpIHJldHVybiBBVkVSUk9SX0lO VkFMSUREQVRBOworICAgIHN3aXRjaCAoYnVmWzBdKSB7CisgICAgY2FzZSBNTVRfUEFDS0FHRV9U QUJMRV9JRDoKKyAgICAgICAgcmV0dXJuIHBhcnNlX21tdF9wYWNrYWdlX3RhYmxlKGN0eCwgYnVm LCBzaXplKTsKKyAgICBjYXNlIFBBQ0tBR0VfTElTVF9UQUJMRV9JRDoKKyAgICAgICAgcmV0dXJu IHBhcnNlX3BhY2thZ2VfbGlzdF90YWJsZShjdHgsIGJ1Ziwgc2l6ZSk7CisgICAgfQorICAgIHJl dHVybiBzaXplOyAvLyBUT0RPCit9CisKK2VudW0geworICAgIFBBX01FU1NBR0VfSUQgPSAweDAw MDAsCit9OworCitzdGF0aWMgaW5saW5lIGludCBwYXJzZV9wYV9tZXNzYWdlKE1NVFBDb250ZXh0 ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3Qgc2l6ZSkgeworICAgIHVpbnQ4X3Qg bnVtYmVyX29mX3RhYmxlczsKKyAgICBzc2l6ZV90IHJlYWQ7CisgICAgc2l6ZV90ICBpOworCisg ICAgTElNSVRfUkVBRCgoMTYgKyA4ICsgMzIgKyA4KSAvIDgsIHsKKyAgICAgICAgYXZfYXNzZXJ0 MShBVl9SQjE2KGJ1ZikgPT0gUEFfTUVTU0FHRV9JRCk7CisgICAgICAgIGlmIChBVl9SQjMyKGJ1 ZiArIDMpICE9IHNpemUgLSA3KSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAg bnVtYmVyX29mX3RhYmxlcyA9IGJ1Zls3XTsKKyAgICB9KQorCisgICAgZm9yIChpID0gMDsgaSA8 IG51bWJlcl9vZl90YWJsZXM7ICsraSkgeworICAgICAgICBMSU1JVF9SRUFEKCg4ICsgOCArIDE2 KSAvIDgsKQorICAgIH0KKworICAgIHdoaWxlIChzaXplID4gMCkgeworICAgICAgICBpZiAoKHJl YWQgPSBwYXJzZV90YWJsZShjdHgsIGJ1Ziwgc2l6ZSkpIDwgMCkgcmV0dXJuIChpbnQpIHJlYWQ7 CisgICAgICAgIE1VU1RfQ09OU1VNRShyZWFkKQorICAgIH0KKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZShNTVRQQ29udGV4dCAqY3R4LCBj b25zdCB1aW50OF90ICpidWYsIHVpbnQzMl90IHNpemUpIHsKKyAgICBpZiAoc2l6ZSA8IDMpIHJl dHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgIHN3aXRjaCAoQVZfUkIxNihidWYpKSB7Cisg ICAgY2FzZSBQQV9NRVNTQUdFX0lEOgorICAgICAgICByZXR1cm4gcGFyc2VfcGFfbWVzc2FnZShj dHgsIGJ1Ziwgc2l6ZSk7CisgICAgfQorICAgIHJldHVybiAwOworfQorCitlbnVtIEZyYWdtZW50 YXRpb25JbmRpY2F0b3IgeworICAgIE5PVF9GUkFHTUVOVEVEICA9IDBiMDAsCisgICAgRklSU1Rf RlJBR01FTlQgID0gMGIwMSwKKyAgICBNSURETEVfRlJBR01FTlQgPSAwYjEwLAorICAgIExBU1Rf RlJBR01FTlQgICA9IDBiMTEsCit9OworCitzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgeworICAg IHVpbnQxNl90ICAgICAgICAgICAgICAgICBwaWQ7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1i bGVyICpuZXh0OworCisgICAgdWludDhfdCAqZGF0YTsKKyAgICBzaXplX3QgIHNpemUsIGNhcDsK KworICAgIHVpbnQzMl90IGxhc3Rfc2VxOworCisgICAgZW51bSB7CisgICAgICAgIElOSVQgPSAw LAorICAgICAgICBOT1RfU1RBUlRFRCwKKyAgICAgICAgSU5fRlJBR01FTlQsCisgICAgICAgIFNL SVAsCisgICAgfSBzdGF0ZTsKK307CisKK2lubGluZSBzdGF0aWMgaW50IGFwcGVuZF9kYXRhKHN0 cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqY3R4LCBjb25zdCB1aW50OF90ICpkYXRhLCB1aW50MzJf dCBzaXplKSB7CisgICAgaWYgKGN0eC0+c2l6ZSArIHNpemUgPiBVSU5UMzJfTUFYKSByZXR1cm4g QVZFUlJPUihFT1ZFUkZMT1cpOworICAgIGlmIChjdHgtPmNhcCA8IGN0eC0+c2l6ZSArIHNpemUp IHsKKyAgICAgICAgdm9pZCAgICpuZXdfZGF0YTsKKyAgICAgICAgc2l6ZV90IG5ld19jYXAgPSBj dHgtPmNhcCA9PSAwID8gMTAyNCA6IGN0eC0+Y2FwICogMjsKKyAgICAgICAgd2hpbGUgKG5ld19j YXAgPCBjdHgtPnNpemUgKyBzaXplKSBuZXdfY2FwICo9IDI7CisKKyAgICAgICAgbmV3X2RhdGEg PSBhdl9yZWFsbG9jKGN0eC0+ZGF0YSwgbmV3X2NhcCk7CisgICAgICAgIGlmIChuZXdfZGF0YSA9 PSBOVUxMKSByZXR1cm4gQVZFUlJPUihlcnJubyk7CisgICAgICAgIGN0eC0+ZGF0YSA9IG5ld19k YXRhOworICAgICAgICBjdHgtPmNhcCAgPSBuZXdfY2FwOworICAgIH0KKyAgICBtZW1jcHkoY3R4 LT5kYXRhICsgY3R4LT5zaXplLCBkYXRhLCBzaXplKTsKKyAgICBjdHgtPnNpemUgKz0gc2l6ZTsK KyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSBpbnQgY2hlY2tfc3RhdGUoTU1UUENv bnRleHQgKmN0eCwgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3MsIHVpbnQzMl90IHNlcV9u dW0pIHsKKyAgICBpZiAoYXNzLT5zdGF0ZSA9PSBJTklUKSB7CisgICAgICAgIGFzcy0+c3RhdGUg PSBTS0lQOworICAgIH0gZWxzZSBpZiAoc2VxX251bSAhPSBhc3MtPmxhc3Rfc2VxICsgMSkgewor ICAgICAgICBpZiAoYXNzLT5zaXplICE9IDApIHsKKyAgICAgICAgICAgIGF2X2xvZyhjdHgtPnMs IEFWX0xPR19XQVJOSU5HLAorICAgICAgICAgICAgICAgICAgICJQYWNrZXQgc2VxdWVuY2UgbnVt YmVyIGp1bXA6ICV1ICsgMSAhPSAldSwgZHJvcCAlenUgYnl0ZXNcbiIsCisgICAgICAgICAgICAg ICAgICAgYXNzLT5sYXN0X3NlcSwgc2VxX251bSwgYXNzLT5zaXplKTsKKyAgICAgICAgICAgIGFz cy0+c2l6ZSA9IDA7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBhdl9sb2coY3R4LT5z LCBBVl9MT0dfV0FSTklORywgIlBhY2tldCBzZXF1ZW5jZSBudW1iZXIganVtcDogJXUgKyAxICE9 ICV1XG4iLAorICAgICAgICAgICAgICAgICAgIGFzcy0+bGFzdF9zZXEsIHNlcV9udW0pOworICAg ICAgICB9CisgICAgICAgIGFzcy0+c3RhdGUgPSBTS0lQOworICAgIH0KKyAgICBhc3MtPmxhc3Rf c2VxID0gc2VxX251bTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBhc3NlbWJsZV9m cmFnbWVudCgKKyAgICBzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJsZXIgKmN0eCwgdWludDMyX3Qgc2Vx X251bSwgZW51bSBGcmFnbWVudGF0aW9uSW5kaWNhdG9yIGluZGljYXRvciwKKyAgICBjb25zdCB1 aW50OF90ICpkYXRhLCB1aW50MzJfdCBzaXplLCBpbnQgKCpwYXJzZXIpKE1NVFBDb250ZXh0ICos IGNvbnN0IHVpbnQ4X3QgKiwgdWludDMyX3QpLAorICAgIE1NVFBDb250ZXh0ICpvcGFxdWUpIHsK KyAgICBpbnQgZXJyOworCisgICAgaWYgKGluZGljYXRvciA9PSBOT1RfRlJBR01FTlRFRCkgewor ICAgICAgICBpZiAoY3R4LT5zdGF0ZSA9PSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5W QUxJRERBVEE7CisgICAgICAgIGN0eC0+c3RhdGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgcmV0 dXJuIHBhcnNlcihvcGFxdWUsIGRhdGEsIHNpemUpOworICAgIH0KKworICAgIGlmIChpbmRpY2F0 b3IgPT0gRklSU1RfRlJBR01FTlQpIHsKKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gSU5fRlJB R01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICBjdHgtPnN0YXRlID0g SU5fRlJBR01FTlQ7CisgICAgICAgIHJldHVybiBhcHBlbmRfZGF0YShjdHgsIGRhdGEsIHNpemUp OworICAgIH0KKworICAgIGlmIChpbmRpY2F0b3IgPT0gTUlERExFX0ZSQUdNRU5UKSB7CisgICAg ICAgIGlmIChjdHgtPnN0YXRlID09IFNLSVApIHsKKyAgICAgICAgICAgIGF2X2xvZyhvcGFxdWUt PnMsIEFWX0xPR19WRVJCT1NFLCAiRHJvcCBwYWNrZXQgJXVcbiIsIHNlcV9udW0pOworICAgICAg ICAgICAgcmV0dXJuIDA7CisgICAgICAgIH0KKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgIT0gSU5f RlJBR01FTlQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAgICAgICByZXR1cm4gYXBw ZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKTsKKyAgICB9CisKKyAgICBpZiAoaW5kaWNhdG9yID09 IExBU1RfRlJBR01FTlQpIHsKKyAgICAgICAgaWYgKGN0eC0+c3RhdGUgPT0gU0tJUCkgeworICAg ICAgICAgICAgYXZfbG9nKG9wYXF1ZS0+cywgQVZfTE9HX1ZFUkJPU0UsICJEcm9wIHBhY2tldCAl dVxuIiwgc2VxX251bSk7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorICAgICAg ICBpZiAoY3R4LT5zdGF0ZSAhPSBJTl9GUkFHTUVOVCkgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERB VEE7CisgICAgICAgIGlmICgoZXJyID0gYXBwZW5kX2RhdGEoY3R4LCBkYXRhLCBzaXplKSkgPCAw KSByZXR1cm4gZXJyOworICAgICAgICBlcnIgICAgICA9IHBhcnNlcihvcGFxdWUsIGN0eC0+ZGF0 YSwgY3R4LT5zaXplKTsKKyAgICAgICAgY3R4LT5zaXplICA9IDA7CisgICAgICAgIGN0eC0+c3Rh dGUgPSBOT1RfU1RBUlRFRDsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9CisKKyAgICByZXR1 cm4gQVZFUlJPUl9PUFRJT05fTk9UX0ZPVU5EOworfQorCitzdGF0aWMgaW5saW5lIHN0cnVjdCBG cmFnbWVudEFzc2VtYmxlciAqZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoTU1UUENvbnRleHQg KmN0eCwgdWludDE2X3QgcGlkKSB7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICphc3M7 CisgICAgZm9yIChhc3MgPSBjdHgtPmFzc2VtYmxlcjsgYXNzICE9IE5VTEw7IGFzcyA9IGFzcy0+ bmV4dCkKKyAgICAgICAgaWYgKGFzcy0+cGlkID09IHBpZCkKKyAgICAgICAgICAgIHJldHVybiBh c3M7CisKKyAgICBhc3MgPSBhdl9tYWxsb2N6KHNpemVvZihzdHJ1Y3QgRnJhZ21lbnRBc3NlbWJs ZXIpKTsKKyAgICBpZiAoYXNzID09IE5VTEwpIHJldHVybiBOVUxMOworICAgIGFzcy0+cGlkICAg ICAgICAgICAgICA9IHBpZDsKKyAgICBhc3MtPm5leHQgICAgICAgICAgICAgPSBjdHgtPmFzc2Vt YmxlcjsKKyAgICByZXR1cm4gY3R4LT5hc3NlbWJsZXIgPSBhc3M7Cit9CisKK3N0YXRpYyBpbmxp bmUgaW50IHBhcnNlX3NpZ25hbGxpbmdfbWVzc2FnZXMoCisgICAgTU1UUENvbnRleHQgKmN0eCwg dWludDMyX3Qgc2VxX251bSwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKSB7Cisg ICAgaW50ICAgICAgICAgICAgICAgICAgICAgICAgIGVycjsKKyAgICBlbnVtIEZyYWdtZW50YXRp b25JbmRpY2F0b3IgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3I7CisgICAgYm9vbCAgICAgICAgICAg ICAgICAgICAgICAgIGxlbmd0aF9leHRlbnNpb25fZmxhZzsKKyAgICBib29sICAgICAgICAgICAg ICAgICAgICAgICAgYWdncmVnYXRpb25fZmxhZzsKKworICAgIHN0cnVjdCBGcmFnbWVudEFzc2Vt YmxlciAqYXNzZW1ibGVyID0gZmluZF9vcl9hbGxvY2F0ZV9hc3NlbWJsZXIoY3R4LCBjdHgtPmN1 cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNzZW1ibGVyID09IE5VTEwpIHJldHVybiBBVkVSUk9SKGVy cm5vKTsKKworICAgIExJTUlUX1JFQUQoMiwgeworICAgICAgICBmcmFnbWVudGF0aW9uX2luZGlj YXRvciA9IGJ1ZlswXSA+PiA2OworICAgICAgICBsZW5ndGhfZXh0ZW5zaW9uX2ZsYWcgICA9IChi dWZbMF0gPj4gMSkgJiAxOworICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnICAgICAgICA9IGJ1Zlsw XSAmIDE7CisgICAgfSkKKworICAgIGlmICgoZXJyID0gY2hlY2tfc3RhdGUoY3R4LCBhc3NlbWJs ZXIsIHNlcV9udW0pKSA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAoIWFnZ3Jl Z2F0aW9uX2ZsYWcpCisgICAgICAgIHJldHVybiBhc3NlbWJsZV9mcmFnbWVudChhc3NlbWJsZXIs IHNlcV9udW0sIGZyYWdtZW50YXRpb25faW5kaWNhdG9yLCBidWYsIHNpemUsIHBhcnNlX3NpZ25h bGxpbmdfbWVzc2FnZSwgY3R4KTsKKworICAgIGlmIChmcmFnbWVudGF0aW9uX2luZGljYXRvciAh PSBOT1RfRlJBR01FTlRFRCkKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfSU5WQUxJRERBVEE7IC8v IGNhbm5vdCBiZSBib3RoIGZyYWdtZW50ZWQgYW5kIGFnZ3JlZ2F0ZWQKKworICAgIHdoaWxlIChz aXplID4gMCkgeworICAgICAgICB1aW50MzJfdCBsZW5ndGg7CisKKyAgICAgICAgaWYgKGxlbmd0 aF9leHRlbnNpb25fZmxhZykgeworICAgICAgICAgICAgTElNSVRfUkVBRCg0LCBsZW5ndGggPSBB Vl9SQjMyKGJ1ZikpCisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBMSU1JVF9SRUFEKDIs IGxlbmd0aCA9IEFWX1JCMTYoYnVmKSkKKyAgICAgICAgfQorICAgICAgICBMSU1JVF9SRUFEKGxl bmd0aCwgaWYgKChlcnIgPSBwYXJzZV9zaWduYWxsaW5nX21lc3NhZ2UoY3R4LCBidWYsIGxlbmd0 aCkpIDwgMCkgcmV0dXJuIGVycikKKyAgICB9CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGlj IGlubGluZSBpbnQgZmlsbF9wdHNfZHRzKE1NVFBDb250ZXh0ICpjdHgsIHN0cnVjdCBTdHJlYW1z ICpzKSB7CisgICAgc3RydWN0IE1QVVRpbWVzdGFtcERlc2NyaXB0b3IgICAgICAgICAqZGVzYyAg ICAgPSBOVUxMOworICAgIHN0cnVjdCBNUFVFeHRlbmRlZFRpbWVzdGFtcERlc2NyaXB0b3IgKmV4 dF9kZXNjID0gTlVMTDsKKyAgICBpbnQ2NF90ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHB0aW1lOworICAgIHNpemVfdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaSwgajsK KworICAgIGZvciAoaSA9IDA7IGkgPCBzLT5udW1fdGltZXN0YW1wX2Rlc2NyaXB0b3JzOyArK2kp IHsKKyAgICAgICAgaWYgKHMtPnRpbWVzdGFtcF9kZXNjcmlwdG9yW2ldLnNlcXVlbmNlX251bWJl ciA9PSBzLT5sYXN0X3NlcXVlbmNlX251bWJlcikgeworICAgICAgICAgICAgZGVzYyA9IHMtPnRp bWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9Cisg ICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHMtPm51bV9leHRfdGltZXN0YW1wX2Rlc2NyaXB0 b3JzOyArK2kpIHsKKyAgICAgICAgaWYgKHMtPmV4dF90aW1lc3RhbXBfZGVzY3JpcHRvcltpXS5z ZXF1ZW5jZV9udW1iZXIgPT0gcy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgICAg IGV4dF9kZXNjID0gcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlwdG9yICsgaTsKKyAgICAgICAgICAg IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGRlc2MgPT0gTlVMTCB8fCBleHRf ZGVzYyA9PSBOVUxMKSByZXR1cm4gRkZFUlJPUl9SRURPOworICAgIHB0aW1lID0gYXZfcmVzY2Fs ZShkZXNjLT5wcmVzZW50YXRpb25fdGltZSwgcy0+c3RyZWFtLT50aW1lX2Jhc2UuZGVuLCAxMDAw MDAwbGwgKiBzLT5zdHJlYW0tPnRpbWVfYmFzZS5udW0pOworCisgICAgaWYgKHMtPmF1X2NvdW50 ID49IGV4dF9kZXNjLT5udW1fb2ZfYXUpCisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworCisgICAgY3R4LT5wa3QtPmR0cyA9IHB0aW1lIC0gZXh0X2Rlc2MtPmRlY29kaW5nX3Rp bWVfb2Zmc2V0OworCisgICAgZm9yIChqID0gMDsgaiA8IHMtPmF1X2NvdW50OyArK2opCisgICAg ICAgIGN0eC0+cGt0LT5kdHMgKz0gZXh0X2Rlc2MtPmF1W2pdLnB0c19vZmZzZXQ7CisKKyAgICBj dHgtPnBrdC0+cHRzID0gY3R4LT5wa3QtPmR0cyArIGV4dF9kZXNjLT5hdVtzLT5hdV9jb3VudF0u ZHRzX3B0c19vZmZzZXQ7CisKKyAgICArK3MtPmF1X2NvdW50OworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW5saW5lIGludCBlbWl0X2Nsb3NlZF9jYXB0aW9uX21mdShNTVRQQ29udGV4dCAq Y3R4LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3Qgc2l6 ZSkgeworICAgIHVpbnQ4X3QgIGRhdGFfdHlwZSwgc3Vic2FtcGxlX251bWJlciwgbGFzdF9zdWJz YW1wbGVfbnVtYmVyOworICAgIHVpbnQzMl90IGRhdGFfc2l6ZTsKKyAgICBzaXplX3QgICBpOwor ICAgIGludCAgICAgIGVycjsKKyAgICBib29sICAgICBsZW5ndGhfZXh0X2ZsYWcsIHN1YnNhbXBs ZV9pbmZvX2xpc3RfZmxhZzsKKworICAgIGF2X2Fzc2VydDAoY3R4LT5wa3QgIT0gTlVMTCk7CisK KyAgICBMSU1JVF9SRUFEKCg4ICsgOCArIDggKyA4ICsgNCArIDEgKyAxICsgMikgLyA4LCB7Cisg ICAgICAgIHN1YnNhbXBsZV9udW1iZXIgICAgICAgICA9IGJ1ZlsyXTsKKyAgICAgICAgbGFzdF9z dWJzYW1wbGVfbnVtYmVyICAgID0gYnVmWzNdOworICAgICAgICBkYXRhX3R5cGUgICAgICAgICAg ICAgICAgPSBidWZbNF0gPj4gNDsKKyAgICAgICAgbGVuZ3RoX2V4dF9mbGFnICAgICAgICAgID0g KGJ1Zls0XSA+PiAzKSAmIDE7CisgICAgICAgIHN1YnNhbXBsZV9pbmZvX2xpc3RfZmxhZyA9IChi dWZbNF0gPj4gMikgJiAxOworICAgIH0pOworCisgICAgaWYgKGRhdGFfdHlwZSAhPSAwYjAwMDAp IHJldHVybiBBVkVSUk9SX1BBVENIV0VMQ09NRTsKKworICAgIGlmIChsZW5ndGhfZXh0X2ZsYWcp IHsKKyAgICAgICAgTElNSVRfUkVBRCg0LCBkYXRhX3NpemUgPSBBVl9SQjMyKGJ1ZikpOworICAg IH0gZWxzZSB7CisgICAgICAgIExJTUlUX1JFQUQoMiwgZGF0YV9zaXplID0gQVZfUkIxNihidWYp KTsKKyAgICB9CisKKyAgICBpZiAoc3Vic2FtcGxlX251bWJlciA9PSAwICYmIGxhc3Rfc3Vic2Ft cGxlX251bWJlciA+IDAgJiYgc3Vic2FtcGxlX2luZm9fbGlzdF9mbGFnKSB7CisgICAgICAgIGZv ciAoaSA9IDA7IGkgPCBsYXN0X3N1YnNhbXBsZV9udW1iZXI7ICsraSkgeworICAgICAgICAgICAg TElNSVRfUkVBRCgoNCArIDQpIC8gOCwpOworICAgICAgICAgICAgaWYgKGxlbmd0aF9leHRfZmxh ZykgeworICAgICAgICAgICAgICAgIExJTUlUX1JFQUQoNCwpOworICAgICAgICAgICAgfSBlbHNl IHsKKyAgICAgICAgICAgICAgICBMSU1JVF9SRUFEKDIsKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgfQorICAgIH0KKworICAgIGlmIChzaXplIDwgZGF0YV9zaXplKSByZXR1cm4gQVZFUlJPUl9J TlZBTElEREFUQTsKKyAgICBpZiAoKGVyciA9IGF2X25ld19wYWNrZXQoY3R4LT5wa3QsIGRhdGFf c2l6ZSkpIDwgMCkgcmV0dXJuIGVycjsKKyAgICBtZW1jcHkoY3R4LT5wa3QtPmRhdGEsIGJ1Ziwg ZGF0YV9zaXplKTsKKyAgICBjdHgtPnBrdC0+c3RyZWFtX2luZGV4ID0gc3QtPnN0cmVhbS0+aW5k ZXg7CisgICAgY3R4LT5wa3QtPmZsYWdzICAgICAgIHw9IHN0LT5mbGFnczsKKyAgICBjdHgtPnBr dC0+cG9zICAgICAgICAgID0gc3QtPm9mZnNldDsKKyAgICBjdHgtPnBrdCAgICAgICAgICAgICAg ID0gTlVMTDsKKworICAgIHN0LT5mbGFncyAgPSAwOworICAgIHN0LT5vZmZzZXQgPSAtMTsKKyAg ICByZXR1cm4gMDsKK30KKworc3RhdGljIGludCBlbWl0X3BhY2tldChNTVRQQ29udGV4dCAqY3R4 LCBzdHJ1Y3QgU3RyZWFtcyAqc3QsIEFWQnVmZmVyUmVmICpidWYpIHsKKyAgICBpbnQgZXJyOwor ICAgIGF2X2Fzc2VydDAoY3R4LT5wa3QgIT0gTlVMTCk7CisgICAgYXZfcGFja2V0X3VucmVmKGN0 eC0+cGt0KTsKKyAgICBpZiAoKGVyciA9IGZpbGxfcHRzX2R0cyhjdHgsIHN0KSkgPCAwKSB7Cisg ICAgICAgIGF2X2J1ZmZlcl91bnJlZigmYnVmKTsKKyAgICAgICAgcmV0dXJuIGVycjsKKyAgICB9 CisgICAgY3R4LT5wa3QtPmJ1ZiAgICAgICAgICA9IGJ1ZjsKKyAgICBjdHgtPnBrdC0+ZGF0YSAg ICAgICAgID0gYnVmLT5kYXRhOworICAgIGN0eC0+cGt0LT5zaXplICAgICAgICAgPSBidWYtPnNp emUgLSBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFOworICAgIGN0eC0+cGt0LT5zdHJlYW1f aW5kZXggPSBzdC0+c3RyZWFtLT5pbmRleDsKKyAgICBjdHgtPnBrdC0+ZmxhZ3MgICAgICAgfD0g c3QtPmZsYWdzOworICAgIGN0eC0+cGt0LT5wb3MgICAgICAgICAgPSBzdC0+b2Zmc2V0OworICAg IGN0eC0+cGt0ICAgICAgICAgICAgICAgPSBOVUxMOworCisgICAgc3QtPmZsYWdzICA9IDA7Cisg ICAgc3QtPm9mZnNldCA9IC0xOworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGNvbnN1 bWVfbWZ1KE1NVFBDb250ZXh0ICpjdHgsIGNvbnN0IHVpbnQ4X3QgKmJ1ZiwgdWludDMyX3Qgc2l6 ZSkgeworICAgIGludCAgICAgICAgICAgIGVycjsKKyAgICBBVkJ1ZmZlclJlZiAgICAqYnVmX3Jl ZjsKKyAgICBzaXplX3QgICAgICAgICBvbGRfc2l6ZTsKKyAgICBzdHJ1Y3QgU3RyZWFtcyAqc3Qg PSBmaW5kX2N1cnJlbnRfc3RyZWFtKGN0eCk7CisgICAgYXZfYXNzZXJ0MChzdCAhPSBOVUxMKTsK KworICAgIHN3aXRjaCAoc3QtPnN0cmVhbS0+Y29kZWNwYXItPmNvZGVjX2lkKSB7CisgICAgY2Fz ZSBBVl9DT0RFQ19JRF9IRVZDOgorICAgICAgICBMSU1JVF9SRUFEKDQsIGlmIChBVl9SQjMyKGJ1 ZikgIT0gc2l6ZSAtIDQpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBKQorICAgICAgICBpZiAo c2l6ZSA8IDEpIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOyAvLyB3ZSBleHBlY3QgdG8gZXh0 cmFjdCBOQUwgdW5pdCBoZWFkZXIgdHlwZSBiZWxvdworICAgICAgICBpZiAoKGJ1ZlswXSA+PiA3 KSAhPSAwKSByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsgLy8gZm9yYmlkZGVuX3plcm9fYml0 CisKKyAgICAgICAgb2xkX3NpemUgPSBzdC0+cGVuZGluZ19idWZmZXIgPT0gTlVMTCA/IDAgOiAo c3QtPnBlbmRpbmdfYnVmZmVyLT5zaXplIC0gQVZfSU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7 CisgICAgICAgIGlmICgoZXJyID0gYXZfYnVmZmVyX3JlYWxsb2MoJnN0LT5wZW5kaW5nX2J1ZmZl ciwgb2xkX3NpemUgKyBzaXplICsgNCArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpKSA8 IDApCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICAvLyBmaXggc3RhcnQgY29kZSAo MDAgMDAgMDAgMDEpCisgICAgICAgIEFWX1dCMzIoc3QtPnBlbmRpbmdfYnVmZmVyLT5kYXRhICsg b2xkX3NpemUsIDEpOworICAgICAgICBtZW1jcHkoc3QtPnBlbmRpbmdfYnVmZmVyLT5kYXRhICsg b2xkX3NpemUgKyA0LCBidWYsIHNpemUpOworICAgICAgICBpZiAoKChidWZbMF0gPj4gMSkgJiAw YjExMTExMSkgPCAweDIwKSB7IC8vIGEgVkNMIE5BTCB1bml0CisgICAgICAgICAgICAvLyBCZWNh dXNlIHdlIGNhbid0IGVtaXQgYSBwYWNrZXQgd2l0aG91dCBhIHZhbGlkIFBUUywgd2UgbmVlZCB0 bworICAgICAgICAgICAgLy8gYWdncmVnYXRlIHRoZSBub24tVkNMIE5BTCB1bml0cyB3aXRoIFZD TCBvbmVzLiBBbHRob3VnaCB3ZSBkaWRuJ3QKKyAgICAgICAgICAgIC8vIHRlY2huaWNhbGx5IGlk ZW50aWZ5IGFuIGFjY2VzcyB1bml0IGhlcmUsIHRoaXMgd29ya3MgZm9yIGFsbCBzYW1wbGVzCisg ICAgICAgICAgICAvLyB3ZSBoYXZlLgorICAgICAgICAgICAgYnVmX3JlZiA9IHN0LT5wZW5kaW5n X2J1ZmZlcjsKKyAgICAgICAgICAgIHN0LT5wZW5kaW5nX2J1ZmZlciA9IE5VTEw7CisKKyAgICAg ICAgICAgIG1lbXNldChidWZfcmVmLT5kYXRhICsgb2xkX3NpemUgKyBzaXplICsgNCwgMCwgQVZf SU5QVVRfQlVGRkVSX1BBRERJTkdfU0laRSk7CisgICAgICAgICAgICByZXR1cm4gZW1pdF9wYWNr ZXQoY3R4LCBzdCwgYnVmX3JlZik7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2Fz ZSBBVl9DT0RFQ19JRF9BQUNfTEFUTToKKyAgICAgICAgaWYgKHNpemUgPj4gMTMpIHJldHVybiBB VkVSUk9SKEVPVkVSRkxPVyk7CisgICAgICAgIGlmICgoYnVmX3JlZiA9IGF2X2J1ZmZlcl9hbGxv YyhzaXplICsgMyArIEFWX0lOUFVUX0JVRkZFUl9QQURESU5HX1NJWkUpKSA9PSBOVUxMKQorICAg ICAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICAgICAgYnVmX3JlZi0+ZGF0YVsw XSA9IDB4NTY7CisgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMV0gPSAweGUwIHwgKHNpemUgPj4gOCk7 CisgICAgICAgIGJ1Zl9yZWYtPmRhdGFbMl0gPSBzaXplICYgMHhmZjsKKyAgICAgICAgbWVtY3B5 KGJ1Zl9yZWYtPmRhdGEgKyAzLCBidWYsIHNpemUpOworICAgICAgICBtZW1zZXQoYnVmX3JlZi0+ ZGF0YSArIDMgKyBzaXplLCAwLCBBVl9JTlBVVF9CVUZGRVJfUEFERElOR19TSVpFKTsKKyAgICAg ICAgcmV0dXJuIGVtaXRfcGFja2V0KGN0eCwgc3QsIGJ1Zl9yZWYpOworICAgIGNhc2UgQVZfQ09E RUNfSURfVFRNTDoKKyAgICAgICAgcmV0dXJuIGVtaXRfY2xvc2VkX2NhcHRpb25fbWZ1KGN0eCwg c3QsIGJ1Ziwgc2l6ZSk7CisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfUEFU Q0hXRUxDT01FOworICAgIH0KKworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW5saW5lIGlu dCBwYXJzZV9tZnVfdGltZWRfZGF0YSgKKyAgICBNTVRQQ29udGV4dCAqY3R4LCBzdHJ1Y3QgRnJh Z21lbnRBc3NlbWJsZXIgKmFzc2VtYmxlciwKKyAgICB1aW50MzJfdCBzZXFfbnVtLCBlbnVtIEZy YWdtZW50YXRpb25JbmRpY2F0b3IgaW5kaWNhdG9yLAorICAgIGNvbnN0IHVpbnQ4X3QgKmJ1Ziwg dWludDE2X3Qgc2l6ZSkgeworICAgIExJTUlUX1JFQUQoKDMyICsgMzIgKyAzMiArIDggKyA4KSAv IDgsKQorICAgIHJldHVybiBhc3NlbWJsZV9mcmFnbWVudChhc3NlbWJsZXIsIHNlcV9udW0sIGlu ZGljYXRvciwgYnVmLCBzaXplLCBjb25zdW1lX21mdSwgY3R4KTsKK30KKworc3RhdGljIGlubGlu ZSBpbnQgcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKAorICAgIE1NVFBDb250ZXh0ICpjdHgsIHN0 cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyLAorICAgIHVpbnQzMl90IHNlcV9udW0s IGVudW0gRnJhZ21lbnRhdGlvbkluZGljYXRvciBpbmRpY2F0b3IsCisgICAgY29uc3QgdWludDhf dCAqYnVmLCB1aW50MTZfdCBzaXplKSB7CisgICAgTElNSVRfUkVBRCgzMiAvIDgsKQorICAgIHJl dHVybiBhc3NlbWJsZV9mcmFnbWVudChhc3NlbWJsZXIsIHNlcV9udW0sIGluZGljYXRvciwgYnVm LCBzaXplLCBjb25zdW1lX21mdSwgY3R4KTsKK30KKworc3RhdGljIGlubGluZSBpbnQgcGFyc2Vf bXB1KE1NVFBDb250ZXh0ICpjdHgsIHVpbnQzMl90IHNlcV9udW0sIGNvbnN0IHVpbnQ4X3QgKmJ1 ZiwgdWludDE2X3Qgc2l6ZSkgeworICAgIGludCAgICAgICAgICAgICAgICAgICAgICAgICBlcnI7 CisgICAgdWludDhfdCAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50X3R5cGU7CisgICAgYm9v bCAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVkX2ZsYWc7CisgICAgZW51bSBGcmFnbWVudGF0 aW9uSW5kaWNhdG9yIGZyYWdtZW50YXRpb25faW5kaWNhdG9yOworICAgIGJvb2wgICAgICAgICAg ICAgICAgICAgICAgICBhZ2dyZWdhdGlvbl9mbGFnOworICAgIHVpbnQxNl90ICAgICAgICAgICAg ICAgICAgICBsZW5ndGg7CisgICAgdWludDMyX3QgICAgICAgICAgICAgICAgICAgIG1wdV9zZXF1 ZW5jZV9udW1iZXI7CisgICAgc3RydWN0IEZyYWdtZW50QXNzZW1ibGVyICAgICphc3NlbWJsZXI7 CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAgICAgICAgICpzdHJlYW1zOworCisgICAgc3RyZWFt cyA9IGZpbmRfY3VycmVudF9zdHJlYW0oY3R4KTsKKyAgICBpZiAoc3RyZWFtcyA9PSBOVUxMKSBy ZXR1cm4gMDsKKyAgICBpZiAoc3RyZWFtcy0+c3RyZWFtLT5kaXNjYXJkID49IEFWRElTQ0FSRF9B TEwpCisgICAgICAgIHJldHVybiAwOworCisgICAgYXNzZW1ibGVyID0gZmluZF9vcl9hbGxvY2F0 ZV9hc3NlbWJsZXIoY3R4LCBjdHgtPmN1cnJlbnRfcGlkKTsKKyAgICBpZiAoYXNzZW1ibGVyID09 IE5VTEwpIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKworICAgIExJTUlUX1JFQUQoKDE2ICsgNCAr IDEgKyAyICsgMSArIDggKyAzMikgLyA4LCB7CisgICAgICAgIGlmIChBVl9SQjE2KGJ1ZikgIT0g c2l6ZSAtIDIpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKworICAg ICAgICBmcmFnbWVudF90eXBlICAgICAgICAgICA9IGJ1ZlsyXSA+PiA0OworICAgICAgICB0aW1l ZF9mbGFnICAgICAgICAgICAgICA9IChidWZbMl0gPj4gMykgJiAxOworICAgICAgICBmcmFnbWVu dGF0aW9uX2luZGljYXRvciA9IChidWZbMl0gPj4gMSkgJiAwYjExOworICAgICAgICBhZ2dyZWdh dGlvbl9mbGFnICAgICAgICA9IGJ1ZlsyXSAmIDE7CisKKyAgICAgICAgbXB1X3NlcXVlbmNlX251 bWJlciA9IEFWX1JCMzIoYnVmICsgNCk7CisgICAgfSkKKworICAgIGlmIChhZ2dyZWdhdGlvbl9m bGFnICYmIGZyYWdtZW50YXRpb25faW5kaWNhdG9yICE9IE5PVF9GUkFHTUVOVEVEKQorICAgICAg ICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsgLy8gY2Fubm90IGJlIGJvdGggZnJhZ21lbnRl ZCBhbmQgYWdncmVnYXRlZAorCisgICAgaWYgKGZyYWdtZW50X3R5cGUgIT0gMikgcmV0dXJuIDA7 CisKKyAgICBpZiAoYXNzZW1ibGVyLT5zdGF0ZSA9PSBJTklUICYmICFjdHgtPmlzX3JhcCkgewor ICAgICAgICAvLyB3YWl0IGZvciB0aGUgZmlyc3QgUkFQCisgICAgICAgIHJldHVybiBGRkVSUk9S X1JFRE87CisgICAgfQorCisgICAgaWYgKGFzc2VtYmxlci0+c3RhdGUgPT0gSU5JVCkgeworICAg ICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IG1wdV9zZXF1ZW5jZV9udW1iZXI7 CisgICAgfSBlbHNlIGlmIChtcHVfc2VxdWVuY2VfbnVtYmVyID09IHN0cmVhbXMtPmxhc3Rfc2Vx dWVuY2VfbnVtYmVyICsgMSkgeworICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJl ciA9IG1wdV9zZXF1ZW5jZV9udW1iZXI7CisgICAgICAgIHN0cmVhbXMtPmF1X2NvdW50ICAgICAg ICAgICAgID0gMDsKKyAgICB9IGVsc2UgaWYgKG1wdV9zZXF1ZW5jZV9udW1iZXIgIT0gc3RyZWFt cy0+bGFzdF9zZXF1ZW5jZV9udW1iZXIpIHsKKyAgICAgICAgYXZfbG9nKHN0cmVhbXMtPnN0cmVh bSwgQVZfTE9HX0VSUk9SLCAiTVBVIHNlcXVlbmNlIG51bWJlciBqdW1wOiAldSArIDEgIT0gJXVc biIsCisgICAgICAgICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciwgbXB1X3Nl cXVlbmNlX251bWJlcik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSUREQVRBOworICAg IH0KKworICAgIGlmICgoZXJyID0gY2hlY2tfc3RhdGUoY3R4LCBhc3NlbWJsZXIsIHNlcV9udW0p KSA8IDApCisgICAgICAgIHJldHVybiBlcnI7CisKKyAgICBpZiAoZnJhZ21lbnRhdGlvbl9pbmRp Y2F0b3IgPT0gTk9UX0ZSQUdNRU5URUQgfHwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IgPT0gRklS U1RfRlJBR01FTlQpCisgICAgICAgIHN0cmVhbXMtPm9mZnNldCA9IGN0eC0+cGt0LT5wb3M7CisK KyAgICBpZiAoY3R4LT5pc19yYXApCisgICAgICAgIHN0cmVhbXMtPmZsYWdzIHw9IEFWX1BLVF9G TEFHX0tFWTsKKworICAgIGlmICh0aW1lZF9mbGFnKSB7CisgICAgICAgIGlmIChhZ2dyZWdhdGlv bl9mbGFnKSB7CisgICAgICAgICAgICB3aGlsZSAoc2l6ZSA+IDApIHsKKyAgICAgICAgICAgICAg ICBMSU1JVF9SRUFEKDIsIGxlbmd0aCA9IEFWX1JCMTYoYnVmKSkKKyAgICAgICAgICAgICAgICBM SU1JVF9SRUFEKGxlbmd0aCwgeworICAgICAgICAgICAgICAgICAgICBlcnIgPSBwYXJzZV9tZnVf dGltZWRfZGF0YShjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgTk9UX0ZSQUdNRU5URUQsIGJ1Ziwg bGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVyciA8IDApIHJldHVybiBlcnI7Cisg ICAgICAgICAgICAgICAgfSkKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAg ICAgICAgIHJldHVybiBwYXJzZV9tZnVfdGltZWRfZGF0YShjdHgsIGFzc2VtYmxlciwgc2VxX251 bSwgZnJhZ21lbnRhdGlvbl9pbmRpY2F0b3IsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9 IGVsc2UgeworICAgICAgICBpZiAoYWdncmVnYXRpb25fZmxhZykgeworICAgICAgICAgICAgd2hp bGUgKHNpemUgPiAwKSB7CisgICAgICAgICAgICAgICAgTElNSVRfUkVBRCgyLCBsZW5ndGggPSBB Vl9SQjE2KGJ1ZikpCisgICAgICAgICAgICAgICAgTElNSVRfUkVBRChsZW5ndGgsIHsKKyAgICAg ICAgICAgICAgICAgICAgZXJyID0gcGFyc2VfbWZ1X25vbl90aW1lZF9kYXRhKGN0eCwgYXNzZW1i bGVyLCBzZXFfbnVtLCBOT1RfRlJBR01FTlRFRCwgYnVmLCBsZW5ndGgpOworICAgICAgICAgICAg ICAgICAgICBpZiAoZXJyIDwgMCkgcmV0dXJuIGVycjsKKyAgICAgICAgICAgICAgICB9KQorICAg ICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmV0dXJuIHBhcnNlX21m dV9ub25fdGltZWRfZGF0YShjdHgsIGFzc2VtYmxlciwgc2VxX251bSwgZnJhZ21lbnRhdGlvbl9p bmRpY2F0b3IsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICByZXR1cm4gMDsK K30KKworTU1UUENvbnRleHQgKmF2cHJpdl9tbXRwX3BhcnNlX29wZW4oQVZQcm9ncmFtICpwcm9n cmFtKSB7CisgICAgTU1UUENvbnRleHQgKmN0eCA9IGF2X21hbGxvY3ooc2l6ZW9mKE1NVFBDb250 ZXh0KSk7CisgICAgaWYgKGN0eCA9PSBOVUxMKSByZXR1cm4gTlVMTDsKKyAgICBjdHgtPnByb2dy YW0gPSBwcm9ncmFtOworICAgIHJldHVybiBjdHg7Cit9CisKK2ludCBhdnByaXZfbW10cF9wYXJz ZV9wYWNrZXQoTU1UUENvbnRleHQgKmN0eCwgQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAq cGt0LCBjb25zdCB1aW50OF90ICpidWYsIHVpbnQxNl90IHNpemUpIHsKKyAgICBib29sICAgICBw YWNrZXRfY291bnRlcl9mbGFnOworICAgIGJvb2wgICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxhZzsK KyAgICB1aW50OF90ICBwYXlsb2FkX3R5cGU7CisgICAgdWludDMyX3QgcGFja2V0X3NlcXVlbmNl X251bWJlcjsKKyAgICBpbnQgICAgICBlcnIgPSAwOworCisgICAgY3R4LT5zICAgPSBzOworICAg IGN0eC0+cGt0ID0gcGt0OworCisgICAgTElNSVRfUkVBRCgoMiArIDEgKyAyICsgMSArIDEgKyAx ICsgMiArIDYgKyAxNiArIDMyICsgMzIpIC8gOCwgeworICAgICAgICBwYWNrZXRfY291bnRlcl9m bGFnICAgID0gKGJ1ZlswXSA+PiA1KSAmIDE7CisgICAgICAgIGV4dGVuc2lvbl9oZWFkZXJfZmxh ZyAgPSAoYnVmWzBdID4+IDEpICYgMTsKKyAgICAgICAgY3R4LT5pc19yYXAgICAgICAgICAgICA9 IGJ1ZlswXSAmIDE7CisgICAgICAgIHBheWxvYWRfdHlwZSAgICAgICAgICAgPSBidWZbMV0gJiAw YjExMTExMTsKKyAgICAgICAgY3R4LT5jdXJyZW50X3BpZCAgICAgICA9IEFWX1JCMTYoYnVmICsg Mik7CisgICAgICAgIHBhY2tldF9zZXF1ZW5jZV9udW1iZXIgPSBBVl9SQjMyKGJ1ZiArIDgpOwor ICAgIH0pCisKKyAgICBpZiAocGFja2V0X2NvdW50ZXJfZmxhZykgeworICAgICAgICBMSU1JVF9S RUFEKDQsKQorICAgIH0KKworICAgIGlmIChleHRlbnNpb25faGVhZGVyX2ZsYWcpIHsKKyAgICAg ICAgdWludDE2X3QgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGg7CisgICAgICAgIExJTUlUX1JFQUQo NCwgZXh0ZW5zaW9uX2hlYWRlcl9sZW5ndGggPSBBVl9SQjE2KGJ1ZiArIDIpKQorICAgICAgICBM SU1JVF9SRUFEKGV4dGVuc2lvbl9oZWFkZXJfbGVuZ3RoLCkKKyAgICB9CisKKyAgICBzd2l0Y2gg KHBheWxvYWRfdHlwZSkgeworICAgIGNhc2UgMHgwMDogLy8gTVBVCisgICAgICAgIGlmIChwa3Qg IT0gTlVMTCkKKyAgICAgICAgICAgIGVyciA9IHBhcnNlX21wdShjdHgsIHBhY2tldF9zZXF1ZW5j ZV9udW1iZXIsIGJ1Ziwgc2l6ZSk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgMHgwMjogLy8g c2lnbmFsbGluZyBtZXNzYWdlcworICAgICAgICBlcnIgPSBwYXJzZV9zaWduYWxsaW5nX21lc3Nh Z2VzKGN0eCwgcGFja2V0X3NlcXVlbmNlX251bWJlciwgYnVmLCBzaXplKTsKKyAgICAgICAgYnJl YWs7CisgICAgfQorICAgIGlmIChlcnIgPCAwKSByZXR1cm4gZXJyOworICAgIHJldHVybiBjdHgt PnBrdCA9PSBOVUxMID8gMCA6IEZGRVJST1JfUkVETzsKK30KKwordm9pZCBhdnByaXZfbW10cF9y ZXNldF9zdGF0ZShNTVRQQ29udGV4dCAqY3R4KSB7CisgICAgc3RydWN0IFN0cmVhbXMgICAgICAg ICAgICpzdHJlYW1zOworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzZW1ibGVyOwor CisgICAgZm9yIChhc3NlbWJsZXIgPSBjdHgtPmFzc2VtYmxlcjsgYXNzZW1ibGVyICE9IE5VTEw7 IGFzc2VtYmxlciA9IGFzc2VtYmxlci0+bmV4dCkgeworICAgICAgICBhc3NlbWJsZXItPnN0YXRl ID0gSU5JVDsKKyAgICAgICAgYXNzZW1ibGVyLT5zaXplICA9IDA7CisgICAgfQorICAgIGZvciAo c3RyZWFtcyA9IGN0eC0+c3RyZWFtczsgc3RyZWFtcyAhPSBOVUxMOyBzdHJlYW1zID0gc3RyZWFt cy0+bmV4dCkgeworICAgICAgICBzdHJlYW1zLT5sYXN0X3NlcXVlbmNlX251bWJlciA9IDA7Cisg ICAgICAgIHN0cmVhbXMtPmF1X2NvdW50ICAgICAgICAgICAgID0gMDsKKyAgICAgICAgc3RyZWFt cy0+ZmxhZ3MgICAgICAgICAgICAgICAgPSAwOworICAgICAgICBzdHJlYW1zLT5vZmZzZXQgICAg ICAgICAgICAgICA9IC0xOworICAgICAgICBhdl9idWZmZXJfdW5yZWYoJnN0cmVhbXMtPnBlbmRp bmdfYnVmZmVyKTsKKyAgICB9Cit9CisKK3ZvaWQgYXZwcml2X21tdHBfcGFyc2VfY2xvc2UoTU1U UENvbnRleHQgKmN0eCkgeworICAgIHN0cnVjdCBGcmFnbWVudEFzc2VtYmxlciAqYXNzOworICAg IHN0cnVjdCBTdHJlYW1zICAgICAgICAgICAqc3RyZWFtczsKKworICAgIGZvciAoYXNzID0gY3R4 LT5hc3NlbWJsZXI7IGFzcyAhPSBOVUxMOykgeworICAgICAgICBzdHJ1Y3QgRnJhZ21lbnRBc3Nl bWJsZXIgKm5leHQgPSBhc3MtPm5leHQ7CisgICAgICAgIGlmIChhc3MtPmRhdGEgIT0gTlVMTCkK KyAgICAgICAgICAgIGF2X2ZyZWUoYXNzLT5kYXRhKTsKKyAgICAgICAgYXZfZnJlZShhc3MpOwor ICAgICAgICBhc3MgPSBuZXh0OworICAgIH0KKworICAgIGZvciAoc3RyZWFtcyA9IGN0eC0+c3Ry ZWFtczsgc3RyZWFtcyAhPSBOVUxMOykgeworICAgICAgICBzdHJ1Y3QgU3RyZWFtcyAqbmV4dCA9 IHN0cmVhbXMtPm5leHQ7CisgICAgICAgIGlmIChzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3JpcHRv ciAhPSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZShzdHJlYW1zLT50aW1lc3RhbXBfZGVzY3Jp cHRvcik7CisgICAgICAgIGlmIChzdHJlYW1zLT5leHRfdGltZXN0YW1wX2Rlc2NyaXB0b3IgIT0g TlVMTCkKKyAgICAgICAgICAgIGF2X2ZyZWUoc3RyZWFtcy0+ZXh0X3RpbWVzdGFtcF9kZXNjcmlw dG9yKTsKKyAgICAgICAgYXZfYnVmZmVyX3VucmVmKCZzdHJlYW1zLT5wZW5kaW5nX2J1ZmZlcik7 CisgICAgICAgIGF2X2ZyZWUoc3RyZWFtcyk7CisgICAgICAgIHN0cmVhbXMgPSBuZXh0OworICAg IH0KKworICAgIGF2X2ZyZWUoY3R4KTsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L21tdHAu aCBiL2xpYmF2Zm9ybWF0L21tdHAuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw MDAwLi5mZjAwMTE1Nzk2Ci0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvbW10cC5oCkBA IC0wLDAgKzEsNjEgQEAKKy8qCisgKiBNUEVHIE1lZGlhIFRyYW5zcG9ydCBQcm90b2NvbCAoTU1U UCkgcGFyc2VyLCBhcyBkZWZpbmVkIGluIElTTy9JRUMgMjMwMDgtMS4KKyAqIENvcHlyaWdodCAo YykgMjAyMyBTdXBlckZhc2hpCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisjaWZuZGVmIEFWRk9STUFUX01NVFBfSAorI2RlZmluZSBBVkZPUk1BVF9NTVRQX0gKKworI2lu Y2x1ZGUgImF2Zm9ybWF0LmgiCisKK3R5cGVkZWYgc3RydWN0IE1NVFBDb250ZXh0IE1NVFBDb250 ZXh0OworCisvKioKKyAqIE9wZW4gYW4gTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0LgorICog QHBhcmFtIHByb2dyYW0gVGhlIEFWUHJvZ3JhbSB0aGlzIGNvbnRleHQgaXMgYXNzb2NpYXRlZCB3 aXRoLgorICogQHJldHVybiBBIG5ldyBNTVRQQ29udGV4dCwgb3IgTlVMTCBvbiBhbGxvY2F0aW9u IGVycm9yLgorICovCitNTVRQQ29udGV4dCAqYXZwcml2X21tdHBfcGFyc2Vfb3BlbihBVlByb2dy YW0gKnByb2dyYW0pOworCisvKioKKyAqIFBhcnNlIGFuIE1NVCBwcm90b2NvbCBwYWNrZXQuCisg KgorICogQHBhcmFtIGN0eCBUaGUgTU1UIHByb3RvY29sIHBhcnNlciBjb250ZXh0LgorICogQHBh cmFtIHMgVGhlIEFWRm9ybWF0Q29udGV4dC4KKyAqIEBwYXJhbSBwa3QgVGhlIEFWUGFja2V0IHRv IGZpbGwuCisgKiBAcGFyYW0gYnVmCisgKiBAcGFyYW0gc2l6ZQorICogQHJldHVybiAwIGlmIGEg bmV3IEFWUGFja2V0IGlzIGVtaXR0ZWQsIEZGRVJST1JfUkVETyBpZiB0aGUgbmV4dCBwYWNrZXQg aXMgbmVlZGVkLCBvciBhbm90aGVyIG5lZ2F0aXZlIHZhbHVlIG9uIGVycm9yLgorICovCitpbnQg YXZwcml2X21tdHBfcGFyc2VfcGFja2V0KE1NVFBDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4 dCAqcywgQVZQYWNrZXQgKnBrdCwgY29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKTsK KworLyoqCisgKiBSZXNldCB0aGUgc3RhdGUgb2YgdGhlIE1NVFAgcGFyc2VyLiBVc2VmdWwgd2hl biBzZWVraW5nLgorICoKKyAqIEBwYXJhbSBjdHggVGhlIE1NVCBwcm90b2NvbCBwYXJzZXIgY29u dGV4dC4KKyAqLwordm9pZCBhdnByaXZfbW10cF9yZXNldF9zdGF0ZShNTVRQQ29udGV4dCAqY3R4 KTsKKworLyoqCisgKiBDbG9zZSBhbiBNTVQgcHJvdG9jb2wgcGFyc2VyIGNvbnRleHQsIGZyZWVz IGFsbCBhc3NvY2lhdGVkIHJlc291cmNlcy4KKyAqCisgKiBAcGFyYW0gY3R4IFRoZSBNTVQgcHJv dG9jb2wgcGFyc2VyIGNvbnRleHQuCisgKi8KK3ZvaWQgYXZwcml2X21tdHBfcGFyc2VfY2xvc2Uo TU1UUENvbnRleHQgKmN0eCk7CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9NTVRQX0ggKi8KZGlmZiAt LWdpdCBhL2xpYmF2Zm9ybWF0L21tdHRsdi5jIGIvbGliYXZmb3JtYXQvbW10dGx2LmMKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMC4uYzBiMjVkZjdhZgotLS0gL2Rldi9udWxs CisrKyBiL2xpYmF2Zm9ybWF0L21tdHRsdi5jCkBAIC0wLDAgKzEsMzI0IEBACisvKgorICogTU1U IHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKE1NVC9UTFYpIGRlbXV4ZXIsIGFzIGRlZmluZWQg aW4gQVJJQiBTVEQtQjMyLgorICogQ29weXJpZ2h0IChjKSAyMDIzIFN1cGVyRmFzaGkKKyAqCisg KiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29m dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVy IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBh cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2 ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg dmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp dCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVy YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhh dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y LCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2dXRpbC9p bnRyZWFkd3JpdGUuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvYXZhc3NlcnQuaCIKKyNpbmNsdWRl ICJsaWJhdnV0aWwvaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJhdmlvX2ludGVybmFsLmgiCisjaW5j bHVkZSAiYXZmb3JtYXQuaCIKKyNpbmNsdWRlICJtbXRwLmgiCisjaW5jbHVkZSAiZGVtdXguaCIK KyNpbmNsdWRlICJpbnRlcm5hbC5oIgorCisjZGVmaW5lIEhFQURFUl9CWVRFIDBiMDExMTExMTEK KworZW51bSB7CisgICAgVU5ERUZJTkVEX1BBQ0tFVCAgICAgICAgICAgID0gMHgwMCwKKyAgICBJ UFY0X1BBQ0tFVCAgICAgICAgICAgICAgICAgPSAweDAxLAorICAgIElQVjZfUEFDS0VUICAgICAg ICAgICAgICAgICA9IDB4MDIsCisgICAgSEVBREVSX0NPTVBSRVNTRURfSVBfUEFDS0VUID0gMHgw MywKKyAgICBUUkFOU01JU1NJT05fQ09OVFJPTF9QQUNLRVQgPSAweEZFLAorICAgIE5VTExfUEFD S0VUICAgICAgICAgICAgICAgICA9IDB4RkYsCit9OworCitlbnVtIHsKKyAgICBDT05URVhUX0lE RU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRfUEFSVElBTF9VRFBfSEVBREVSID0gMHgyMCwK KyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX0lQVjRfSEVBREVSICAgICAgICAgICAgICAgICAg ICAgICAgID0gMHgyMSwKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNl9B TkRfUEFSVElBTF9VRFBfSEVBREVSID0gMHg2MCwKKyAgICBDT05URVhUX0lERU5USUZJQ0FUSU9O X05PX0NPTVBSRVNTRURfSEVBREVSICAgICAgICAgICAgICAgID0gMHg2MSwKK307CisKK3N0YXRp YyBpbnQgbW10dGx2X3Byb2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKSB7CisgICAgc2l6ZV90ICAg aSwgajsKKyAgICB1aW50OF90ICBwYWNrZXRfdHlwZTsKKyAgICB1aW50MTZfdCBkYXRhX2xlbmd0 aDsKKworICAgIGludCBwcm9jZXNzZWQgID0gMDsKKyAgICBpbnQgcmVjb2duaXplZCA9IDA7CisK KyAgICBmb3IgKGkgPSAwOyBpICsgNCA8IHAtPmJ1Zl9zaXplICYmIHByb2Nlc3NlZCA8IDEwMDsg Kytwcm9jZXNzZWQpIHsKKyAgICAgICAgaWYgKHAtPmJ1ZltpXSAhPSBIRUFERVJfQllURSkgcmV0 dXJuIDA7CisKKyAgICAgICAgcGFja2V0X3R5cGUgPSBwLT5idWZbaSArIDFdOworICAgICAgICBk YXRhX2xlbmd0aCA9IEFWX1JCMTYocC0+YnVmICsgaSArIDIpOworICAgICAgICBpICs9IDQ7CisK KyAgICAgICAgaWYgKHBhY2tldF90eXBlID09IEhFQURFUl9DT01QUkVTU0VEX0lQX1BBQ0tFVCkg eworICAgICAgICAgICAgaWYgKGRhdGFfbGVuZ3RoIDwgMyB8fCBpICsgMiA+PSBwLT5idWZfc2l6 ZSkgZ290byBza2lwOworICAgICAgICAgICAgc3dpdGNoIChwLT5idWZbaSArIDJdKSB7CisgICAg ICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFSVElBTF9JUFY0X0FORF9QQVJU SUFMX1VEUF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05f SVBWNF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRFWFRfSURFTlRJRklDQVRJT05fUEFS VElBTF9JUFY2X0FORF9QQVJUSUFMX1VEUF9IRUFERVI6CisgICAgICAgICAgICBjYXNlIENPTlRF WFRfSURFTlRJRklDQVRJT05fTk9fQ09NUFJFU1NFRF9IRUFERVI6CisgICAgICAgICAgICAgICAg KytyZWNvZ25pemVkOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgaWYgKHBhY2tldF90 eXBlID09IE5VTExfUEFDS0VUKSB7CisgICAgICAgICAgICAvLyBudWxsIHBhY2tldHMgc2hvdWxk IGNvbnRhaW4gYWxsIDB4RkZzCisgICAgICAgICAgICBmb3IgKGogPSBpOyBqIDwgaSArIGRhdGFf bGVuZ3RoICYmIGogPCBwLT5idWZfc2l6ZTsgKytqKSB7CisgICAgICAgICAgICAgICAgaWYgKHAt PmJ1ZltqXSAhPSAweEZGKSBnb3RvIHNraXA7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAr K3JlY29nbml6ZWQ7CisgICAgICAgIH0KKworICAgICAgICBza2lwOgorICAgICAgICBpICs9IGRh dGFfbGVuZ3RoOworICAgIH0KKworICAgIHJldHVybiByZWNvZ25pemVkICogQVZQUk9CRV9TQ09S RV9NQVggLyBGRk1BWChwcm9jZXNzZWQsIDEwKTsKK30KKworc3RydWN0IE1NVFRMVkNvbnRleHQg eworICAgIHN0cnVjdCBQcm9ncmFtIHsKKyAgICAgICAgdWludDMyX3QgICAgICAgY2lkOworICAg ICAgICBNTVRQQ29udGV4dCAgICAqbW10cDsKKyAgICAgICAgc3RydWN0IFByb2dyYW0gKm5leHQ7 CisgICAgfSAqcHJvZ3JhbXM7CisKKyAgICBpbnQ2NF90IGxhc3RfcG9zOworICAgIHNpemVfdCAg cmVzeW5jX3NpemU7CisKKyAgICBzaXplX3QgIGNhcDsKKyAgICB1aW50OF90ICpidWY7Cit9Owor CitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX2NvbXByZXNzZWRfaXBfcGFja2V0KAorICAgIHN0cnVj dCBNTVRUTFZDb250ZXh0ICpjdHgsIEFWRm9ybWF0Q29udGV4dCAqcywgQVZQYWNrZXQgKnBrdCwg Y29uc3QgdWludDhfdCAqYnVmLCB1aW50MTZfdCBzaXplKSB7CisgICAgLy8gcGFydGlhbCB1ZHAg aGVhZGVyIGFyZSB1ZHAgaGVhZGVyIHdpdGhvdXQgZGF0YSBsZW5ndGggKDE2IGJpdHMpIGFuZCBj aGVja3N1bSAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElBTF9VRFBfSEVBREVSX0xFTkdUSCAoOCAt IDQpCisgICAgLy8gcGFydGlhbCBpcHY2IGhlYWRlciBhcmUgaXB2NiBoZWFkZXIgd2l0aG91dCBw YXlsb2FkIGxlbmd0aCAoMTYgYml0cykKKyNkZWZpbmUgUEFSVElBTF9JUFY2X0hFQURFUl9MRU5H VEggKDQwIC0gMikKKworICAgIHVpbnQzMl90ICAgICAgIGNvbnRleHRfaWQ7CisgICAgc3RydWN0 IFByb2dyYW0gKnByb2dyYW07CisKKyAgICBpZiAoc2l6ZSA8IDMpCisgICAgICAgIHJldHVybiBB VkVSUk9SX0lOVkFMSUREQVRBOworICAgIGNvbnRleHRfaWQgPSBBVl9SQjE2KGJ1ZikgPj4gNDsK KyAgICBidWYgKz0gMzsKKyAgICBzaXplIC09IDM7CisKKyAgICBmb3IgKHByb2dyYW0gPSBjdHgt PnByb2dyYW1zOyBwcm9ncmFtICE9IE5VTEw7IHByb2dyYW0gPSBwcm9ncmFtLT5uZXh0KQorICAg ICAgICBpZiAocHJvZ3JhbS0+Y2lkID09IGNvbnRleHRfaWQpCisgICAgICAgICAgICBicmVhazsK KworICAgIGlmIChwcm9ncmFtID09IE5VTEwpIHsKKyAgICAgICAgQVZQcm9ncmFtICpwID0gYXZf bmV3X3Byb2dyYW0ocywgY29udGV4dF9pZCk7CisgICAgICAgIGlmIChwID09IE5VTEwpIHJldHVy biBBVkVSUk9SKGVycm5vKTsKKworICAgICAgICBwcm9ncmFtID0gYXZfbWFsbG9jKHNpemVvZihz dHJ1Y3QgUHJvZ3JhbSkpOworICAgICAgICBpZiAocHJvZ3JhbSA9PSBOVUxMKSByZXR1cm4gQVZF UlJPUihlcnJubyk7CisKKyAgICAgICAgcHJvZ3JhbS0+bW10cCA9IGF2cHJpdl9tbXRwX3BhcnNl X29wZW4ocCk7CisgICAgICAgIHByb2dyYW0tPm5leHQgPSBjdHgtPnByb2dyYW1zOworICAgICAg ICBjdHgtPnByb2dyYW1zID0gcHJvZ3JhbTsKKyAgICAgICAgcHJvZ3JhbS0+Y2lkICA9IGNvbnRl eHRfaWQ7CisgICAgfQorCisgICAgc3dpdGNoIChidWZbLTFdKSB7CisgICAgY2FzZSBDT05URVhU X0lERU5USUZJQ0FUSU9OX1BBUlRJQUxfSVBWNF9BTkRfUEFSVElBTF9VRFBfSEVBREVSOgorICAg IGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9JUFY0X0hFQURFUjoKKyAgICAgICAgcmV0dXJu IEFWRVJST1JfUEFUQ0hXRUxDT01FOworICAgIGNhc2UgQ09OVEVYVF9JREVOVElGSUNBVElPTl9Q QVJUSUFMX0lQVjZfQU5EX1BBUlRJQUxfVURQX0hFQURFUjoKKyAgICAgICAgaWYgKHNpemUgPCBQ QVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQX0hFQURFUl9MRU5HVEgpCisg ICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICAgICAgc2l6ZSAtPSBQ QVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQX0hFQURFUl9MRU5HVEg7Cisg ICAgICAgIGJ1ZiArPSBQQVJUSUFMX0lQVjZfSEVBREVSX0xFTkdUSCArIFBBUlRJQUxfVURQX0hF QURFUl9MRU5HVEg7CisgICAgY2FzZSBDT05URVhUX0lERU5USUZJQ0FUSU9OX05PX0NPTVBSRVNT RURfSEVBREVSOgorICAgICAgICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4g QVZFUlJPUl9JTlZBTElEREFUQTsKKyAgICB9CisKKyAgICByZXR1cm4gYXZwcml2X21tdHBfcGFy c2VfcGFja2V0KHByb2dyYW0tPm1tdHAsIHMsIHBrdCwgYnVmLCBzaXplKTsKK30KKworc3RhdGlj IGludCBtbXR0bHZfcmVhZF9wYWNrZXQoQVZGb3JtYXRDb250ZXh0ICpzLCBBVlBhY2tldCAqcGt0 KSB7CisgICAgdWludDhfdCAgICAgICAgICAgICAgaGVhZGVyWzRdOworICAgIHVpbnQxNl90ICAg ICAgICAgICAgIHNpemU7CisgICAgaW50ICAgICAgICAgICAgICAgICAgZXJyOworICAgIHN0cnVj dCBNTVRUTFZDb250ZXh0ICpjdHggPSBzLT5wcml2X2RhdGE7CisgICAgaW50NjRfdCAgICAgICAg ICAgICAgcG9zICA9IGF2aW9fdGVsbChzLT5wYik7CisKKyAgICBpZiAocG9zIDwgMCkgcmV0dXJu IChpbnQpIHBvczsKKyAgICBpZiAocG9zICE9IGN0eC0+bGFzdF9wb3MpIHsKKyAgICAgICAgY3R4 LT5sYXN0X3BvcyA9IHBvczsKKworICAgICAgICB3aGlsZSAocG9zIC0gY3R4LT5sYXN0X3BvcyA8 IGN0eC0+cmVzeW5jX3NpemUpIHsKKyAgICAgICAgICAgIGlmICgoZXJyID0gZmZpb19lbnN1cmVf c2Vla2JhY2socy0+cGIsIDQpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIGVycjsKKwor ICAgICAgICAgICAgaWYgKChlcnIgPSBhdmlvX3JlYWQocy0+cGIsIGhlYWRlciwgNCkpIDwgMCkK KyAgICAgICAgICAgICAgICByZXR1cm4gYXZpb19mZW9mKHMtPnBiKSA/IEFWRVJST1JfRU9GIDog ZXJyOworCisgICAgICAgICAgICBpZiAoaGVhZGVyWzBdICE9IEhFQURFUl9CWVRFKSB7CisgICAg ICAgICAgICAgICAgaWYgKChwb3MgPSBhdmlvX3NlZWsocy0+cGIsIC0zLCBTRUVLX0NVUikpIDwg MCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKyAgICAgICAgICAgICAg ICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgc2l6ZSA9IEFWX1JCMTYo aGVhZGVyICsgMik7CisKKyAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMtPnBiLCAt NCwgU0VFS19DVVIpKSA8IDApCisgICAgICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKwor ICAgICAgICAgICAgaWYgKChlcnIgPSBmZmlvX2Vuc3VyZV9zZWVrYmFjayhzLT5wYiwgNCArIHNp emUgKyAxKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBlcnI7CisKKyAgICAgICAgICAg IGlmICgocG9zID0gYXZpb19za2lwKHMtPnBiLCA0ICsgc2l6ZSkpIDwgMCkKKyAgICAgICAgICAg ICAgICByZXR1cm4gKGludCkgcG9zOworCisgICAgICAgICAgICBpZiAoKGVyciA9IGF2aW9fcmVh ZChzLT5wYiwgaGVhZGVyLCAxKSkgPCAwKQorICAgICAgICAgICAgICAgIHJldHVybiBhdmlvX2Zl b2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisKKyAgICAgICAgICAgIGlmIChoZWFkZXJb MF0gPT0gSEVBREVSX0JZVEUpIHsKKyAgICAgICAgICAgICAgICAvLyBmb3VuZCBIRUFERVIsIFtz aXplXSwgSEVBREVSLCBzaG91bGQgYmUgZ29vZAorICAgICAgICAgICAgICAgIGlmICgocG9zID0g YXZpb19zZWVrKHMtPnBiLCAtc2l6ZSAtIDEgLSA0LCBTRUVLX0NVUikpIDwgMCkKKyAgICAgICAg ICAgICAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKyAgICAgICAgICAgICAgICBnb3RvIHN1Y2Nl c3M7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICgocG9zID0gYXZpb19zZWVrKHMt PnBiLCAtc2l6ZSAtIDEgLSAzLCBTRUVLX0NVUikpIDwgMCkKKyAgICAgICAgICAgICAgICByZXR1 cm4gKGludCkgcG9zOworICAgICAgICB9CisgICAgICAgIHJldHVybiBBVkVSUk9SX0lOVkFMSURE QVRBOworCisgICAgICAgIHN1Y2Nlc3M6CisgICAgICAgIGN0eC0+bGFzdF9wb3MgPSBwb3M7CisK KyAgICAgICAgZm9yIChzdHJ1Y3QgUHJvZ3JhbSAqcHJvZ3JhbSA9IGN0eC0+cHJvZ3JhbXM7IHBy b2dyYW0gIT0gTlVMTDsgcHJvZ3JhbSA9IHByb2dyYW0tPm5leHQpCisgICAgICAgICAgICBhdnBy aXZfbW10cF9yZXNldF9zdGF0ZShwcm9ncmFtLT5tbXRwKTsKKyAgICB9CisKKyAgICBpZiAocGt0 ICE9IE5VTEwpIHBrdC0+cG9zID0gY3R4LT5sYXN0X3BvczsKKyAgICBpZiAoKGVyciA9IGZmaW9f cmVhZF9zaXplKHMtPnBiLCBoZWFkZXIsIDQpKSA8IDApCisgICAgICAgIHJldHVybiBhdmlvX2Zl b2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4LT5sYXN0X3BvcyArPSA0Owor CisgICAgaWYgKGhlYWRlclswXSAhPSBIRUFERVJfQllURSkKKyAgICAgICAgcmV0dXJuIEFWRVJS T1JfSU5WQUxJRERBVEE7CisKKyAgICBzaXplID0gQVZfUkIxNihoZWFkZXIgKyAyKTsKKyAgICBp ZiAoaGVhZGVyWzFdICE9IEhFQURFUl9DT01QUkVTU0VEX0lQX1BBQ0tFVCkgeworICAgICAgICBp ZiAoKGN0eC0+bGFzdF9wb3MgPSBhdmlvX3NraXAocy0+cGIsIHNpemUpKSA8IDApCisgICAgICAg ICAgICByZXR1cm4gKGludCkgY3R4LT5sYXN0X3BvczsKKyAgICAgICAgcmV0dXJuIEZGRVJST1Jf UkVETzsKKyAgICB9CisKKyAgICBpZiAoY3R4LT5jYXAgPCBzaXplKSB7CisgICAgICAgIGlmIChj dHgtPmJ1ZiAhPSBOVUxMKQorICAgICAgICAgICAgYXZfZnJlZShjdHgtPmJ1Zik7CisgICAgICAg IGlmICgoY3R4LT5idWYgPSBhdl9tYWxsb2MoY3R4LT5jYXAgPSBzaXplKSkgPT0gTlVMTCkKKyAg ICAgICAgICAgIHJldHVybiBBVkVSUk9SKGVycm5vKTsKKyAgICB9CisgICAgaWYgKChlcnIgPSBm ZmlvX3JlYWRfc2l6ZShzLT5wYiwgY3R4LT5idWYsIHNpemUpKSA8IDApCisgICAgICAgIHJldHVy biBhdmlvX2Zlb2Yocy0+cGIpID8gQVZFUlJPUl9FT0YgOiBlcnI7CisgICAgY3R4LT5sYXN0X3Bv cyArPSBzaXplOworICAgIHJldHVybiBtbXR0bHZfcmVhZF9jb21wcmVzc2VkX2lwX3BhY2tldChj dHgsIHMsIHBrdCwgY3R4LT5idWYsIHNpemUpOworfQorCitzdGF0aWMgaW50IG1tdHRsdl9yZWFk X2hlYWRlcihBVkZvcm1hdENvbnRleHQgKnMpIHsKKyAgICBpbnQ2NF90ICAgICAgICAgICAgICBw b3M7CisgICAgaW50NjRfdCAgICAgICAgICAgICAgYWxsb3cgPSBzLT5wcm9iZXNpemU7CisgICAg c3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCAgPSBzLT5wcml2X2RhdGE7CisKKyAgICBjdHgtPmxh c3RfcG9zID0gYXZpb190ZWxsKHMtPnBiKTsKKyAgICBpZiAoY3R4LT5sYXN0X3BvcyA8IDApCisg ICAgICAgIHJldHVybiAoaW50KSBjdHgtPmxhc3RfcG9zOworICAgIGN0eC0+bGFzdF9wb3MgLT0g MTsgLy8gZm9yY2UgcmVzeW5jCisKKyAgICBjdHgtPnJlc3luY19zaXplID0gNDA5NjsKKyAgICBz LT5jdHhfZmxhZ3MgfD0gQVZGTVRDVFhfTk9IRUFERVI7CisKKyAgICBpZiAoIXMtPnBiLT5zZWVr YWJsZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBpZiAoKHBvcyA9IGF2aW9fdGVsbChzLT5w YikpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgIHdoaWxlIChzLT5uYl9z dHJlYW1zIDw9IDAgJiYgYWxsb3cgPiAwKSB7CisgICAgICAgIGNvbnN0IGludDY0X3QgY3VyID0g Y3R4LT5sYXN0X3BvczsKKyAgICAgICAgY29uc3QgaW50ICAgICBlcnIgPSBtbXR0bHZfcmVhZF9w YWNrZXQocywgTlVMTCk7CisgICAgICAgIGlmIChlcnIgPCAwICYmIGVyciAhPSBGRkVSUk9SX1JF RE8pCisgICAgICAgICAgICByZXR1cm4gZXJyOworICAgICAgICBhbGxvdyAtPSBjdHgtPmxhc3Rf cG9zIC0gY3VyOworICAgIH0KKworICAgIGN0eC0+bGFzdF9wb3MgPSBhdmlvX3RlbGwocy0+cGIp OworICAgIGlmIChjdHgtPmxhc3RfcG9zIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIGN0eC0+ bGFzdF9wb3M7CisKKyAgICBpZiAoKHBvcyA9IGF2aW9fc2VlayhzLT5wYiwgcG9zLCBTRUVLX1NF VCkpIDwgMCkKKyAgICAgICAgcmV0dXJuIChpbnQpIHBvczsKKworICAgIHJldHVybiAwOworfQor CitzdGF0aWMgaW50IG1tdHRsdl9yZWFkX2Nsb3NlKEFWRm9ybWF0Q29udGV4dCAqY3R4KSB7Cisg ICAgc3RydWN0IFByb2dyYW0gICAgICAgKnByb2dyYW07CisgICAgc3RydWN0IE1NVFRMVkNvbnRl eHQgKnByaXYgPSBjdHgtPnByaXZfZGF0YTsKKyAgICBmb3IgKHByb2dyYW0gPSBwcml2LT5wcm9n cmFtczsgcHJvZ3JhbSAhPSBOVUxMOykgeworICAgICAgICBzdHJ1Y3QgUHJvZ3JhbSAqbmV4dCA9 IHByb2dyYW0tPm5leHQ7CisgICAgICAgIGF2cHJpdl9tbXRwX3BhcnNlX2Nsb3NlKHByb2dyYW0t Pm1tdHApOworICAgICAgICBhdl9mcmVlKHByb2dyYW0pOworICAgICAgICBwcm9ncmFtID0gbmV4 dDsKKyAgICB9CisgICAgaWYgKHByaXYtPmJ1ZiAhPSBOVUxMKSBhdl9mcmVlKHByaXYtPmJ1Zik7 CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQ2NF90IG1tdHRsdl9yZWFkX3RpbWVzdGFt cChzdHJ1Y3QgQVZGb3JtYXRDb250ZXh0ICpzLCBpbnQgc3RyZWFtX2luZGV4LCBpbnQ2NF90ICpw b3MsIGludDY0X3QgcG9zX2xpbWl0KSB7CisgICAgc3RydWN0IE1NVFRMVkNvbnRleHQgKmN0eCA9 IHMtPnByaXZfZGF0YTsKKworICAgIGlmICgoKnBvcyA9IGF2aW9fc2VlayhzLT5wYiwgKnBvcywg U0VFS19TRVQpKSA8IDApCisgICAgICAgIHJldHVybiAoaW50KSAqcG9zOworCisgICAgd2hpbGUg KHBvc19saW1pdCA+IDApIHsKKyAgICAgICAgQVZQYWNrZXQgICAgICBwYWNrZXQgPSB7MH07Cisg ICAgICAgIGNvbnN0IGludCAgICAgZXJyICAgID0gbW10dGx2X3JlYWRfcGFja2V0KHMsICZwYWNr ZXQpOworICAgICAgICBjb25zdCBpbnQ2NF90IHRzICAgICA9IHBhY2tldC5kdHM7CisgICAgICAg IGNvbnN0IGludDY0X3Qgb2ZmICAgID0gcGFja2V0LnBvczsKKyAgICAgICAgY29uc3QgaW50ICAg ICBzaWQgICAgPSBwYWNrZXQuc3RyZWFtX2luZGV4OworICAgICAgICBhdl9wYWNrZXRfdW5yZWYo JnBhY2tldCk7CisgICAgICAgIGlmIChlcnIgPj0gMCAmJiAoc3RyZWFtX2luZGV4IDwgMCB8fCBz aWQgPT0gc3RyZWFtX2luZGV4KSkgeworICAgICAgICAgICAgKnBvcyA9IG9mZjsKKyAgICAgICAg ICAgIHJldHVybiB0czsKKyAgICAgICAgfQorICAgICAgICBwb3NfbGltaXQgLT0gY3R4LT5sYXN0 X3BvcyAtICpwb3M7CisgICAgICAgICpwb3MgPSBjdHgtPmxhc3RfcG9zOworICAgICAgICBpZiAo ZXJyIDwgMCAmJiBlcnIgIT0gRkZFUlJPUl9SRURPKQorICAgICAgICAgICAgcmV0dXJuIEFWX05P UFRTX1ZBTFVFOworICAgIH0KKworICAgIHJldHVybiBBVl9OT1BUU19WQUxVRTsKK30KKworY29u c3QgQVZJbnB1dEZvcm1hdCBmZl9tbXR0bHZfZGVtdXhlciA9IHsKKyAgICAubmFtZSAgICAgICAg ICAgPSAibW10dGx2IiwKKyAgICAubG9uZ19uYW1lICAgICAgPSBOVUxMX0lGX0NPTkZJR19TTUFM TCgiTU1UIHByb3RvY29sIG92ZXIgVExWIHBhY2tldHMgKEFSSUIgU1RELUIzMikiKSwKKyAgICAu cHJpdl9kYXRhX3NpemUgPSBzaXplb2Yoc3RydWN0IE1NVFRMVkNvbnRleHQpLAorICAgIC5mbGFn c19pbnRlcm5hbCA9IEZGX0ZNVF9JTklUX0NMRUFOVVAsCisgICAgLnJlYWRfcHJvYmUgICAgID0g bW10dGx2X3Byb2JlLAorICAgIC5yZWFkX2hlYWRlciAgICA9IG1tdHRsdl9yZWFkX2hlYWRlciwK KyAgICAucmVhZF9wYWNrZXQgICAgPSBtbXR0bHZfcmVhZF9wYWNrZXQsCisgICAgLnJlYWRfY2xv c2UgICAgID0gbW10dGx2X3JlYWRfY2xvc2UsCisgICAgLnJlYWRfdGltZXN0YW1wID0gbW10dGx2 X3JlYWRfdGltZXN0YW1wLAorICAgIC5mbGFncyAgICAgICAgICA9IEFWRk1UX1NIT1dfSURTLAor fTsKZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L3ZlcnNpb24uaCBiL2xpYmF2Zm9ybWF0L3ZlcnNp b24uaAppbmRleCBlMjYzNGI4NWFlLi40YmRlODJhYmI0IDEwMDY0NAotLS0gYS9saWJhdmZvcm1h dC92ZXJzaW9uLmgKKysrIGIvbGliYXZmb3JtYXQvdmVyc2lvbi5oCkBAIC0zMSw3ICszMSw3IEBA CiAKICNpbmNsdWRlICJ2ZXJzaW9uX21ham9yLmgiCiAKLSNkZWZpbmUgTElCQVZGT1JNQVRfVkVS U0lPTl9NSU5PUiAgIDUKKyNkZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSU5PUiAgIDYKICNk ZWZpbmUgTElCQVZGT1JNQVRfVkVSU0lPTl9NSUNSTyAxMDAKIAogI2RlZmluZSBMSUJBVkZPUk1B VF9WRVJTSU9OX0lOVCBBVl9WRVJTSU9OX0lOVChMSUJBVkZPUk1BVF9WRVJTSU9OX01BSk9SLCBc Ci0tIAoyLjI1LjEKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fCmZmbXBlZy1kZXZlbCBtYWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0 cHM6Ly9mZm1wZWcub3JnL21haWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNj cmliZSwgdmlzaXQgbGluayBhYm92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZt cGVnLm9yZyB3aXRoIHN1YmplY3QgInVuc3Vic2NyaWJlIi4K