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 DF1564518D for ; Fri, 10 Feb 2023 17:42:45 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id AE88568BE82; Fri, 10 Feb 2023 19:41:52 +0200 (EET) Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id C644668BDC9 for ; Fri, 10 Feb 2023 19:41:43 +0200 (EET) Received: by mail-wr1-f41.google.com with SMTP id o15so2495532wrc.9 for ; Fri, 10 Feb 2023 09:41:43 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=spin-digital-com.20210112.gappssmtp.com; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:from:to:cc:subject:date:message-id :reply-to; bh=N8zIe2mURTiNm1OYipkHRxjW8pB8jC0A6CFvgh7Q5Ko=; b=JUsOPSskedvmsNqrg0ay/YdowRllJUigHo1+lL+zLaAYWzK3U2tD3NOGP/TT3abfxz 1u7veCLwtqYrqKcxi1DwfDylKE4S1fLPkLYzM3rLTmTu45S7Pj7tRrBg1NUhW5X6bYrj k7MISqDQg/+nwoX7pt4CcDtZqrJCRFdqChWNb1wjkRshgxNnNcJeFRJgUYZNCs8KmJlU nUoZDprx21RuwUFJW2kezLAWTMFU1Dl3/OSkU9JuRUbgv0NzhLmzuzFxrDTDP9WBI2mD YSaafJHfe3XciryRjF56hxW77NavSJnROrJAHTiERThi5Ypc9if/JRmnwLaWp4PRVtem ooPw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N8zIe2mURTiNm1OYipkHRxjW8pB8jC0A6CFvgh7Q5Ko=; b=EW1/Ka1vH7wgSxR2Cegh312iIVrW87ioP3Exv5zZ13JKf/UtK7sf1wzmW8cpLPkS7u SULpdNAn+RLU98hmTd0OF4r3VssM2p1IoZY15a8dAceH4IrFtWC/HEdVZ0aOjgB42ePu /g6rW2FgaOn+7fQnjjxjVwQ+qqFXmo07y9bHaSWH4SXFm3vSrs858qW4mrCxqt/oJlto jF6apdcyfCIwCLe7kvF5LBzAYbrmAcUXn2T/3pMo0EAFJhOuBuDtgVb/OmhX78AvaTqe sTnZo1n+nqXkvps4TnTVhIPVxi7kz69l6kZX+ZQE9/GgIJlFH4zoUgZN/jNV5i/f7wLR AHQQ== X-Gm-Message-State: AO0yUKWZtF1mYk80KuB1zH4iwvr95EwIGq7gcPpkPENIqYT72ZRnN/cl vi0qlOPBbLVwY4gSMQJsBGDm/BiS3jn/oa/X X-Google-Smtp-Source: AK7set9NZTRdgM+SAotOrf2PAun1TBykxuO0FjUM7dHD3RRiYZwtp8kAwuOzfiySwijCxfSQirXdyw== X-Received: by 2002:a5d:5687:0:b0:2c5:3dfd:df83 with SMTP id f7-20020a5d5687000000b002c53dfddf83mr5344434wrv.56.1676050902365; Fri, 10 Feb 2023 09:41:42 -0800 (PST) Received: from thomas-win.localdomain ([213.138.44.237]) by smtp.gmail.com with ESMTPSA id w13-20020a5d608d000000b002c54b6382c8sm1589245wrt.82.2023.02.10.09.41.41 for (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 10 Feb 2023 09:41:41 -0800 (PST) From: Thomas Siedel To: ffmpeg-devel@ffmpeg.org Date: Fri, 10 Feb 2023 18:41:01 +0100 Message-Id: <20230210174106.44514-7-thomas.ff@spin-digital.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20230210174106.44514-1-thomas.ff@spin-digital.com> References: <20230210174106.44514-1-thomas.ff@spin-digital.com> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v6 06/11] avformat: add demuxer and probe support for H266/VVC X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: QWRkIGRlbXV4ZXIgdG8gcHJvYmUgcmF3IHZ2YyBhbmQgcGFyc2UgdnZjYyBieXRlIHN0cmVhbSBm b3JtYXQuCgpDby1hdXRob3JlZC1ieTogTnVvIE1pIDxudW9taTIwMjFAZ21haWwuY29tPgotLS0K IGxpYmF2Zm9ybWF0L01ha2VmaWxlICAgICB8ICAgMSArCiBsaWJhdmZvcm1hdC9hbGxmb3JtYXRz LmMgfCAgIDEgKwogbGliYXZmb3JtYXQvZGVtdXguYyAgICAgIHwgICA3ICstCiBsaWJhdmZvcm1h dC9oMjY2LmMgICAgICAgfCA5ODQgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiBsaWJhdmZvcm1hdC9oMjY2LmggICAgICAgfCAgOTkgKysrKwogbGliYXZmb3JtYXQvaDI2 NmRlYy5jICAgIHwgIDYxICsrKwogNiBmaWxlcyBjaGFuZ2VkLCAxMTUxIGluc2VydGlvbnMoKyks IDIgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaDI2Ni5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgbGliYXZmb3JtYXQvaDI2Ni5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg bGliYXZmb3JtYXQvaDI2NmRlYy5jCgpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvTWFrZWZpbGUg Yi9saWJhdmZvcm1hdC9NYWtlZmlsZQppbmRleCA1ZDIxOWFmYzA2Li43MjJkYmY3YWU4IDEwMDY0 NAotLS0gYS9saWJhdmZvcm1hdC9NYWtlZmlsZQorKysgYi9saWJhdmZvcm1hdC9NYWtlZmlsZQpA QCAtMjQ1LDYgKzI0NSw3IEBAIE9CSlMtJChDT05GSUdfSDI2M19ERU1VWEVSKSAgICAgICAgICAg ICAgKz0gaDI2M2RlYy5vIHJhd2RlYy5vCiBPQkpTLSQoQ09ORklHX0gyNjNfTVVYRVIpICAgICAg ICAgICAgICAgICs9IHJhd2VuYy5vCiBPQkpTLSQoQ09ORklHX0gyNjRfREVNVVhFUikgICAgICAg ICAgICAgICs9IGgyNjRkZWMubyByYXdkZWMubwogT0JKUy0kKENPTkZJR19IMjY0X01VWEVSKSAg ICAgICAgICAgICAgICArPSByYXdlbmMubworT0JKUy0kKENPTkZJR19IMjY2X0RFTVVYRVIpICAg ICAgICAgICAgICArPSBoMjY2ZGVjLm8gcmF3ZGVjLm8KIE9CSlMtJChDT05GSUdfSEFTSF9NVVhF UikgICAgICAgICAgICAgICAgKz0gaGFzaGVuYy5vCiBPQkpTLSQoQ09ORklHX0hDQV9ERU1VWEVS KSAgICAgICAgICAgICAgICs9IGhjYS5vCiBPQkpTLSQoQ09ORklHX0hDT01fREVNVVhFUikgICAg ICAgICAgICAgICs9IGhjb20ubyBwY20ubwpkaWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvYWxsZm9y bWF0cy5jIGIvbGliYXZmb3JtYXQvYWxsZm9ybWF0cy5jCmluZGV4IDM2NWQ3ZjM0MjguLjQzNzYx NmJmMGYgMTAwNjQ0Ci0tLSBhL2xpYmF2Zm9ybWF0L2FsbGZvcm1hdHMuYworKysgYi9saWJhdmZv cm1hdC9hbGxmb3JtYXRzLmMKQEAgLTE5OSw2ICsxOTksNyBAQCBleHRlcm4gY29uc3QgQVZJbnB1 dEZvcm1hdCAgZmZfaDI2M19kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZm X2gyNjNfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaDI2NF9kZW11eGVy OwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0Rm9ybWF0IGZmX2gyNjRfbXV4ZXI7CitleHRlcm4gY29u c3QgQVZJbnB1dEZvcm1hdCAgZmZfaDI2Nl9kZW11eGVyOwogZXh0ZXJuIGNvbnN0IEZGT3V0cHV0 Rm9ybWF0IGZmX2hhc2hfbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaGNh X2RlbXV4ZXI7CiBleHRlcm4gY29uc3QgQVZJbnB1dEZvcm1hdCAgZmZfaGNvbV9kZW11eGVyOwpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvZGVtdXguYyBiL2xpYmF2Zm9ybWF0L2RlbXV4LmMKaW5k ZXggYjE5YWI4NmQwOC4uZjBjNmQ3ODk1ZiAxMDA2NDQKLS0tIGEvbGliYXZmb3JtYXQvZGVtdXgu YworKysgYi9saWJhdmZvcm1hdC9kZW11eC5jCkBAIC0xMjAsNiArMTIwLDcgQEAgc3RhdGljIGlu dCBzZXRfY29kZWNfZnJvbV9wcm9iZV9kYXRhKEFWRm9ybWF0Q29udGV4dCAqcywgQVZTdHJlYW0g KnN0LAogICAgICAgICB7ICJtcDMiLCAgICAgICAgQVZfQ09ERUNfSURfTVAzLCAgICAgICAgICBB Vk1FRElBX1RZUEVfQVVESU8gICAgfSwKICAgICAgICAgeyAibXBlZ3ZpZGVvIiwgIEFWX0NPREVD X0lEX01QRUcyVklERU8sICAgQVZNRURJQV9UWVBFX1ZJREVPICAgIH0sCiAgICAgICAgIHsgInRy dWVoZCIsICAgICBBVl9DT0RFQ19JRF9UUlVFSEQsICAgICAgIEFWTUVESUFfVFlQRV9BVURJTyAg ICB9LAorICAgICAgICB7ICJ2dmMiLCAgICAgICAgQVZfQ09ERUNfSURfVlZDLCAgICAgICAgICBB Vk1FRElBX1RZUEVfVklERU8gICAgfSwKICAgICAgICAgeyAwIH0KICAgICB9OwogICAgIGludCBz Y29yZTsKQEAgLTc0Myw3ICs3NDQsOCBAQCBzdGF0aWMgaW50NjRfdCBzZWxlY3RfZnJvbV9wdHNf YnVmZmVyKEFWU3RyZWFtICpzdCwgaW50NjRfdCAqcHRzX2J1ZmZlciwgaW50NjRfdAogewogICAg IEZGU3RyZWFtICpjb25zdCBzdGkgPSBmZnN0cmVhbShzdCk7CiAgICAgaW50IG9uZWluX29uZW91 dCA9IHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSDI2NCAmJgotICAgICAg ICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNvZGVjX2lkICE9IEFWX0NPREVDX0lEX0hF VkM7CisgICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZf Q09ERUNfSURfSEVWQyAmJgorICAgICAgICAgICAgICAgICAgICAgICBzdC0+Y29kZWNwYXItPmNv ZGVjX2lkICE9IEFWX0NPREVDX0lEX1ZWQzsKIAogICAgIGlmICghb25laW5fb25lb3V0KSB7CiAg ICAgICAgIGludCBkZWxheSA9IHN0aS0+YXZjdHgtPmhhc19iX2ZyYW1lczsKQEAgLTkzMyw3ICs5 MzUsOCBAQCBzdGF0aWMgdm9pZCBjb21wdXRlX3BrdF9maWVsZHMoQVZGb3JtYXRDb250ZXh0ICpz LCBBVlN0cmVhbSAqc3QsCiAgICAgaW50NjRfdCBvZmZzZXQ7CiAgICAgQVZSYXRpb25hbCBkdXJh dGlvbjsKICAgICBpbnQgb25laW5fb25lb3V0ID0gc3QtPmNvZGVjcGFyLT5jb2RlY19pZCAhPSBB Vl9DT0RFQ19JRF9IMjY0ICYmCi0gICAgICAgICAgICAgICAgICAgICAgIHN0LT5jb2RlY3Bhci0+ Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfSEVWQzsKKyAgICAgICAgICAgICAgICAgICAgICAgc3Qt PmNvZGVjcGFyLT5jb2RlY19pZCAhPSBBVl9DT0RFQ19JRF9IRVZDICYmCisgICAgICAgICAgICAg ICAgICAgICAgIHN0LT5jb2RlY3Bhci0+Y29kZWNfaWQgIT0gQVZfQ09ERUNfSURfVlZDOwogCiAg ICAgaWYgKHMtPmZsYWdzICYgQVZGTVRfRkxBR19OT0ZJTExJTikKICAgICAgICAgcmV0dXJuOwpk aWZmIC0tZ2l0IGEvbGliYXZmb3JtYXQvaDI2Ni5jIGIvbGliYXZmb3JtYXQvaDI2Ni5jCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLmEwMTJmMGM1NzkKLS0tIC9kZXYvbnVs bAorKysgYi9saWJhdmZvcm1hdC9oMjY2LmMKQEAgLTAsMCArMSw5ODQgQEAKKy8qCisgKiBILjI2 Ni9WVkMgaGVscGVyIGZ1bmN0aW9ucyBmb3IgbXV4ZXJzCisgKgorICogQ29weXJpZ2h0IChDKSAy MDIyLCBUaG9tYXMgU2llZGVsCisgKgorICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgor ICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh bmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu ZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl IEZvdW5kYXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChh dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9V VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl IHRoZSBHTlUKKyAqIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp bHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl c3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90 LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICov CisKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2dldF9iaXRzLmgiCisjaW5jbHVkZSAibGliYXZjb2Rl Yy9nb2xvbWIuaCIKKyNpbmNsdWRlICJsaWJhdmNvZGVjL2gyNjYuaCIKKyNpbmNsdWRlICJsaWJh dnV0aWwvaW50cmVhZHdyaXRlLmgiCisjaW5jbHVkZSAiYXZjLmgiCisjaW5jbHVkZSAiYXZpby5o IgorI2luY2x1ZGUgImF2aW9faW50ZXJuYWwuaCIKKyNpbmNsdWRlICJoMjY2LmgiCisKK3R5cGVk ZWYgc3RydWN0IFZWQ0NOQUxVbml0QXJyYXkgeworICAgIHVpbnQ4X3QgYXJyYXlfY29tcGxldGVu ZXNzOworICAgIHVpbnQ4X3QgTkFMX3VuaXRfdHlwZTsKKyAgICB1aW50MTZfdCBudW1fbmFsdXM7 CisgICAgdWludDE2X3QgKm5hbF91bml0X2xlbmd0aDsKKyAgICB1aW50OF90ICoqbmFsX3VuaXQ7 Cit9IFZWQ0NOQUxVbml0QXJyYXk7CisKK3R5cGVkZWYgc3RydWN0IFZWQ1BUTFJlY29yZCB7Cisg ICAgdWludDhfdCBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZvOworICAgIHVpbnQ4X3QgZ2VuZXJh bF9wcm9maWxlX2lkYzsKKyAgICB1aW50OF90IGdlbmVyYWxfdGllcl9mbGFnOworICAgIHVpbnQ4 X3QgZ2VuZXJhbF9sZXZlbF9pZGM7CisgICAgdWludDhfdCBwdGxfZnJhbWVfb25seV9jb25zdHJh aW50X2ZsYWc7CisgICAgdWludDhfdCBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWc7CisgICAg dWludDhfdCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mb1s5XTsKKyAgICB1aW50OF90ICpwdGxfc3Vi bGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnOworICAgIHVpbnQ4X3QgKnN1YmxheWVyX2xldmVsX2lk YzsKKyAgICB1aW50OF90IHB0bF9udW1fc3ViX3Byb2ZpbGVzOworICAgIHVpbnQzMl90ICpnZW5l cmFsX3N1Yl9wcm9maWxlX2lkYzsKK30gVlZDUFRMUmVjb3JkOworCit0eXBlZGVmIHN0cnVjdCBW VkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCB7CisgICAgdWludDhfdCBsZW5ndGhTaXplTWlu dXNPbmU7CisgICAgdWludDhfdCBwdGxfcHJlc2VudF9mbGFnOworICAgIHVpbnQxNl90IG9sc19p ZHg7CisgICAgdWludDhfdCBudW1fc3VibGF5ZXJzOworICAgIHVpbnQ4X3QgY29uc3RhbnRfZnJh bWVfcmF0ZTsKKyAgICB1aW50OF90IGNocm9tYV9mb3JtYXRfaWRjOworICAgIHVpbnQ4X3QgYml0 X2RlcHRoX21pbnVzODsKKyAgICBWVkNQVExSZWNvcmQgcHRsOworICAgIHVpbnQxNl90IG1heF9w aWN0dXJlX3dpZHRoOworICAgIHVpbnQxNl90IG1heF9waWN0dXJlX2hlaWdodDsKKyAgICB1aW50 MTZfdCBhdmdfZnJhbWVfcmF0ZTsKKyAgICB1aW50OF90IG51bV9vZl9hcnJheXM7CisgICAgVlZD Q05BTFVuaXRBcnJheSAqYXJyYXk7Cit9IFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkOwor Cit0eXBlZGVmIHN0cnVjdCBWVkNDUHJvZmlsZVRpZXJMZXZlbCB7CisgICAgdWludDhfdCBwcm9m aWxlX2lkYzsKKyAgICB1aW50OF90IHRpZXJfZmxhZzsKKyAgICB1aW50OF90IGdlbmVyYWxfbGV2 ZWxfaWRjOworICAgIHVpbnQ4X3QgcHRsX2ZyYW1lX29ubHlfY29uc3RyYWludF9mbGFnOworICAg IHVpbnQ4X3QgcHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworLy8gZ2VuZXJhbF9jb25zdHJh aW50X2luZm8KKyAgICB1aW50OF90IGdjaV9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCBnY2lf Z2VuZXJhbF9jb25zdHJhaW50c1s5XTsKKyAgICB1aW50OF90IGdjaV9udW1fcmVzZXJ2ZWRfYml0 czsKKy8vIGVuZCBnZW5lcmFsX2NvbnN0cmFpbnRfaW5mbworICAgIHVpbnQ4X3QgKnB0bF9zdWJs YXllcl9sZXZlbF9wcmVzZW50X2ZsYWc7CisgICAgdWludDhfdCAqc3VibGF5ZXJfbGV2ZWxfaWRj OworICAgIHVpbnQ4X3QgcHRsX251bV9zdWJfcHJvZmlsZXM7CisgICAgdWludDMyX3QgKmdlbmVy YWxfc3ViX3Byb2ZpbGVfaWRjOworfSBWVkNDUHJvZmlsZVRpZXJMZXZlbDsKKworc3RhdGljIHZv aWQgdnZjY191cGRhdGVfcHRsKFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0NQcm9maWxlVGllckxldmVsICpwdGwpCit7 CisgICAgLyoKKyAgICAgKiBUaGUgbGV2ZWwgaW5kaWNhdGlvbiBnZW5lcmFsX2xldmVsX2lkYyBt dXN0IGluZGljYXRlIGEgbGV2ZWwgb2YKKyAgICAgKiBjYXBhYmlsaXR5IGVxdWFsIHRvIG9yIGdy ZWF0ZXIgdGhhbiB0aGUgaGlnaGVzdCBsZXZlbCBpbmRpY2F0ZWQgZm9yIHRoZQorICAgICAqIGhp Z2hlc3QgdGllciBpbiBhbGwgdGhlIHBhcmFtZXRlciBzZXRzLgorICAgICAqLworICAgIGlmICh2 dmNjLT5wdGwuZ2VuZXJhbF90aWVyX2ZsYWcgPCBwdGwtPnRpZXJfZmxhZykKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfbGV2ZWxfaWRjID0gcHRsLT5nZW5lcmFsX2xldmVsX2lkYzsKKyAgICBl bHNlCisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyA9CisgICAgICAgICAgICBG Rk1BWCh2dmNjLT5wdGwuZ2VuZXJhbF9sZXZlbF9pZGMsIHB0bC0+Z2VuZXJhbF9sZXZlbF9pZGMp OworCisgICAgLyoKKyAgICAgKiBUaGUgdGllciBpbmRpY2F0aW9uIGdlbmVyYWxfdGllcl9mbGFn IG11c3QgaW5kaWNhdGUgYSB0aWVyIGVxdWFsIHRvIG9yCisgICAgICogZ3JlYXRlciB0aGFuIHRo ZSBoaWdoZXN0IHRpZXIgaW5kaWNhdGVkIGluIGFsbCB0aGUgcGFyYW1ldGVyIHNldHMuCisgICAg ICovCisgICAgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnID0KKyAgICAgICAgRkZNQVgodnZj Yy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnLCBwdGwtPnRpZXJfZmxhZyk7CisKKyAgICAvKgorICAg ICAqIFRoZSBwcm9maWxlIGluZGljYXRpb24gZ2VuZXJhbF9wcm9maWxlX2lkYyBtdXN0IGluZGlj YXRlIGEgcHJvZmlsZSB0bworICAgICAqIHdoaWNoIHRoZSBzdHJlYW0gYXNzb2NpYXRlZCB3aXRo IHRoaXMgY29uZmlndXJhdGlvbiByZWNvcmQgY29uZm9ybXMuCisgICAgICoKKyAgICAgKiBJZiB0 aGUgc2VxdWVuY2UgcGFyYW1ldGVyIHNldHMgYXJlIG1hcmtlZCB3aXRoIGRpZmZlcmVudCBwcm9m aWxlcywgdGhlbgorICAgICAqIHRoZSBzdHJlYW0gbWF5IG5lZWQgZXhhbWluYXRpb24gdG8gZGV0 ZXJtaW5lIHdoaWNoIHByb2ZpbGUsIGlmIGFueSwgdGhlCisgICAgICogZW50aXJlIHN0cmVhbSBj b25mb3JtcyB0by4gSWYgdGhlIGVudGlyZSBzdHJlYW0gaXMgbm90IGV4YW1pbmVkLCBvciB0aGUK KyAgICAgKiBleGFtaW5hdGlvbiByZXZlYWxzIHRoYXQgdGhlcmUgaXMgbm8gcHJvZmlsZSB0byB3 aGljaCB0aGUgZW50aXJlIHN0cmVhbQorICAgICAqIGNvbmZvcm1zLCB0aGVuIHRoZSBlbnRpcmUg c3RyZWFtIG11c3QgYmUgc3BsaXQgaW50byB0d28gb3IgbW9yZQorICAgICAqIHN1Yi1zdHJlYW1z IHdpdGggc2VwYXJhdGUgY29uZmlndXJhdGlvbiByZWNvcmRzIGluIHdoaWNoIHRoZXNlIHJ1bGVz IGNhbgorICAgICAqIGJlIG1ldC4KKyAgICAgKgorICAgICAqIE5vdGU6IHNldCB0aGUgcHJvZmls ZSB0byB0aGUgaGlnaGVzdCB2YWx1ZSBmb3IgdGhlIHNha2Ugb2Ygc2ltcGxpY2l0eS4KKyAgICAg Ki8KKyAgICB2dmNjLT5wdGwuZ2VuZXJhbF9wcm9maWxlX2lkYyA9CisgICAgICAgIEZGTUFYKHZ2 Y2MtPnB0bC5nZW5lcmFsX3Byb2ZpbGVfaWRjLCBwdGwtPnByb2ZpbGVfaWRjKTsKKworICAgIC8q CisgICAgICogRWFjaCBiaXQgaW4gZmxhZ3MgbWF5IG9ubHkgYmUgc2V0IGlmIGFsbAorICAgICAq IHRoZSBwYXJhbWV0ZXIgc2V0cyBzZXQgdGhhdCBiaXQuCisgICAgICovCisgICAgdnZjYy0+cHRs LnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyAmPQorICAgICAgICBwdGwtPnB0bF9mcmFt ZV9vbmx5X2NvbnN0cmFpbnRfZmxhZzsKKyAgICB2dmNjLT5wdGwucHRsX211bHRpbGF5ZXJfZW5h YmxlZF9mbGFnICY9IHB0bC0+cHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnOworCisgICAgLyoK KyAgICAgKiBDb25zdHJhaW50cyBJbmZvCisgICAgICovCisgICAgaWYgKHB0bC0+Z2NpX3ByZXNl bnRfZmxhZykgeworICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9 IDk7CisgICAgICAgIG1lbWNweSgmdnZjYy0+cHRsLmdlbmVyYWxfY29uc3RyYWludF9pbmZvWzBd LAorICAgICAgICAgICAgICAgJnB0bC0+Z2NpX2dlbmVyYWxfY29uc3RyYWludHNbMF0sIHNpemVv Zih1aW50OF90KSAqIDkpOworCisgICAgfSBlbHNlIHsKKyAgICAgICAgdnZjYy0+cHRsLm51bV9i eXRlc19jb25zdHJhaW50X2luZm8gPSAxOworICAgICAgICBtZW1zZXQoJnZ2Y2MtPnB0bC5nZW5l cmFsX2NvbnN0cmFpbnRfaW5mb1swXSwgMCwgc2l6ZW9mKHVpbnQ4X3QpICogOSk7CisgICAgfQor CisgICAgLyoKKyAgICAgKiBFYWNoIGJpdCBpbiBmbGFncyBtYXkgb25seSBiZSBzZXQgaWYgb25l IG9mCisgICAgICogdGhlIHBhcmFtZXRlciBzZXRzIHNldCB0aGF0IGJpdC4KKyAgICAgKi8KKyAg ICB2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1 aW50OF90ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0g MSk7CisgICAgdnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYyA9CisgICAgICAgICh1aW50OF90 ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMSk7CisK KyAgICBtZW1zZXQodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcsIDAs CisgICAgICAgICAgIHNpemVvZih1aW50OF90KSAqIHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAxKTsK KyAgICBtZW1zZXQodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYywgMCwKKyAgICAgICAgICAg c2l6ZW9mKHVpbnQ4X3QpICogdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpOworCisgICAgZm9yIChp bnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXllcnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICB2 dmNjLT5wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZ1tpXSB8PQorICAgICAgICAg ICAgcHRsLT5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldOworICAgICAgICBpZiAo dnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pIHsKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0gPQorICAgICAgICAgICAgICAgIEZG TUFYKHZ2Y2MtPnB0bC5zdWJsYXllcl9sZXZlbF9pZGNbaV0sCisgICAgICAgICAgICAgICAgICAg ICAgcHRsLT5zdWJsYXllcl9sZXZlbF9pZGNbaV0pOworICAgICAgICB9IGVsc2UgeworICAgICAg ICAgICAgaWYgKGkgPT0gdnZjYy0+bnVtX3N1YmxheWVycyAtIDEpIHsKKyAgICAgICAgICAgICAg ICB2dmNjLT5wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0gdnZjYy0+cHRsLmdlbmVyYWxfbGV2 ZWxfaWRjOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwu c3VibGF5ZXJfbGV2ZWxfaWRjW2ldID0KKyAgICAgICAgICAgICAgICAgICAgdnZjYy0+cHRsLnN1 YmxheWVyX2xldmVsX2lkY1tpICsgMV07CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9 CisKKyAgICB2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMgPQorICAgICAgICBGRk1BWCh2 dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMsIHB0bC0+cHRsX251bV9zdWJfcHJvZmlsZXMp OworICAgIGlmICh2dmNjLT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpIHsKKyAgICAgICAgdnZj Yy0+cHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgICAgICh1aW50MzJfdCAq KSBtYWxsb2Moc2l6ZW9mKHVpbnQzMl90KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgIGZvciAoaW50IGkg PSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAg ICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9CisgICAgICAgICAgICAg ICAgcHRsLT5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXTsKKyAgICAgICAgfQorICAgIH0gZWxz ZSB7CisgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkYyA9CisgICAgICAg ICAgICAodWludDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgIH0KK30KKwor c3RhdGljIHZvaWQgdnZjY19wYXJzZV9wdGwoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYywKKyAg ICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGludCBwcm9maWxlVGllclByZXNlbnRG bGFnLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IG1heF9zdWJfbGF5 ZXJzX21pbnVzMSkKK3sKKyAgICBWVkNDUHJvZmlsZVRpZXJMZXZlbCBnZW5lcmFsX3B0bDsKKyAg ICBpbnQgajsKKworICAgIGlmIChwcm9maWxlVGllclByZXNlbnRGbGFnKSB7CisgICAgICAgIGdl bmVyYWxfcHRsLnByb2ZpbGVfaWRjID0gZ2V0X2JpdHMoZ2IsIDcpOworICAgICAgICBnZW5lcmFs X3B0bC50aWVyX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgIH0KKyAgICBnZW5lcmFsX3B0bC5n ZW5lcmFsX2xldmVsX2lkYyA9IGdldF9iaXRzKGdiLCA4KTsKKworICAgIGdlbmVyYWxfcHRsLnB0 bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyA9IGdldF9iaXRzMShnYik7CisgICAgZ2VuZXJh bF9wdGwucHRsX211bHRpbGF5ZXJfZW5hYmxlZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBp ZiAocHJvZmlsZVRpZXJQcmVzZW50RmxhZykgeyAgICAgICAvLyBwYXJzZSBjb25zdHJhaW50IGlu Zm8KKyAgICAgICAgZ2VuZXJhbF9wdGwuZ2NpX3ByZXNlbnRfZmxhZyA9IGdldF9iaXRzMShnYik7 CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5nY2lfcHJlc2VudF9mbGFnKSB7CisgICAgICAgICAg ICBmb3IgKGogPSAwOyBqIDwgODsgaisrKQorICAgICAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdj aV9nZW5lcmFsX2NvbnN0cmFpbnRzW2pdID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSAwOworICAgICAgICAgICAg Z2VuZXJhbF9wdGwuZ2NpX2dlbmVyYWxfY29uc3RyYWludHNbOF0gPSBnZXRfYml0cyhnYiwgNyk7 CisKKyAgICAgICAgICAgIGdlbmVyYWxfcHRsLmdjaV9udW1fcmVzZXJ2ZWRfYml0cyA9IGdldF9i aXRzKGdiLCA4KTsKKyAgICAgICAgICAgIHNraXBfYml0cyhnYiwgZ2VuZXJhbF9wdGwuZ2NpX251 bV9yZXNlcnZlZF9iaXRzKTsKKyAgICAgICAgfQorICAgICAgICB3aGlsZSAoZ2ItPmluZGV4ICUg OCAhPSAwKQorICAgICAgICAgICAgc2tpcF9iaXRzMShnYik7CisgICAgfQorCisgICAgZ2VuZXJh bF9wdGwucHRsX3N1YmxheWVyX2xldmVsX3ByZXNlbnRfZmxhZyA9CisgICAgICAgICh1aW50OF90 ICopIG1hbGxvYyhzaXplb2YodWludDhfdCkgKiBtYXhfc3ViX2xheWVyc19taW51czEpOworICAg IGZvciAoaW50IGkgPSBtYXhfc3ViX2xheWVyc19taW51czEgLSAxOyBpID49IDA7IGktLSkgewor ICAgICAgICBnZW5lcmFsX3B0bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldID0g Z2V0X2JpdHMxKGdiKTsKKyAgICB9CisgICAgd2hpbGUgKGdiLT5pbmRleCAlIDggIT0gMCkKKyAg ICAgICAgc2tpcF9iaXRzMShnYik7CisKKyAgICBnZW5lcmFsX3B0bC5zdWJsYXllcl9sZXZlbF9p ZGMgPQorICAgICAgICAodWludDhfdCAqKSBtYWxsb2Moc2l6ZW9mKHVpbnQ4X3QpICogbWF4X3N1 Yl9sYXllcnNfbWludXMxKTsKKyAgICBmb3IgKGludCBpID0gbWF4X3N1Yl9sYXllcnNfbWludXMx IC0gMTsgaSA+PSAwOyBpLS0pIHsKKyAgICAgICAgaWYgKGdlbmVyYWxfcHRsLnB0bF9zdWJsYXll cl9sZXZlbF9wcmVzZW50X2ZsYWdbaV0pCisgICAgICAgICAgICBnZW5lcmFsX3B0bC5zdWJsYXll cl9sZXZlbF9pZGNbaV0gPSBnZXRfYml0cyhnYiwgOCk7CisgICAgfQorCisgICAgaWYgKHByb2Zp bGVUaWVyUHJlc2VudEZsYWcpIHsKKyAgICAgICAgZ2VuZXJhbF9wdGwucHRsX251bV9zdWJfcHJv ZmlsZXMgPSBnZXRfYml0cyhnYiwgOCk7CisgICAgICAgIGlmIChnZW5lcmFsX3B0bC5wdGxfbnVt X3N1Yl9wcm9maWxlcykgeworICAgICAgICAgICAgZ2VuZXJhbF9wdGwuZ2VuZXJhbF9zdWJfcHJv ZmlsZV9pZGMgPQorICAgICAgICAgICAgICAgICh1aW50MzJfdCAqKSBtYWxsb2Moc2l6ZW9mKHVp bnQzMl90KSAqCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZW5lcmFsX3B0 bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8 IGdlbmVyYWxfcHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBpKyspIHsKKyAgICAgICAgICAgICAg ICBnZW5lcmFsX3B0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tpXSA9IGdldF9iaXRzX2xvbmco Z2IsIDMyKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIGdl bmVyYWxfcHRsLmdlbmVyYWxfc3ViX3Byb2ZpbGVfaWRjID0KKyAgICAgICAgICAgICAgICAodWlu dDMyX3QgKikgbWFsbG9jKHNpemVvZih1aW50MzJfdCkpOworICAgICAgICB9CisgICAgfQorCisg ICAgdnZjY191cGRhdGVfcHRsKHZ2Y2MsICZnZW5lcmFsX3B0bCk7CisKKyAgICBmcmVlKGdlbmVy YWxfcHRsLnB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUoZ2VuZXJh bF9wdGwuc3VibGF5ZXJfbGV2ZWxfaWRjKTsKKyAgICBmcmVlKGdlbmVyYWxfcHRsLmdlbmVyYWxf c3ViX3Byb2ZpbGVfaWRjKTsKK30KKworc3RhdGljIGludCB2dmNjX3BhcnNlX3ZwcyhHZXRCaXRD b250ZXh0ICpnYiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVjb2RlckNvbmZpZ3Vy YXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdW5zaWduZWQgaW50IHZwc19tYXhfbGF5ZXJzX21p bnVzMTsKKyAgICB1bnNpZ25lZCBpbnQgdnBzX21heF9zdWJfbGF5ZXJzX21pbnVzMTsKKyAgICB1 bnNpZ25lZCBpbnQgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3RpZF9mbGFnOworICAgIHVu c2lnbmVkIGludCB2cHNfYWxsX2luZGVwZW5kYW50X2xheWVyX2ZsYWc7CisgICAgdW5zaWduZWQg aW50IHZwc19lYWNoX2xheWVyX2lzX2FuX29sc19mbGFnOworICAgIHVuc2lnbmVkIGludCB2cHNf b2xzX21vZGVfaWRjOworCisgICAgdW5zaWduZWQgaW50ICp2cHNfcHRfcHJlc2VudF9mbGFnOwor ICAgIHVuc2lnbmVkIGludCAqdnBzX3B0bF9tYXhfdGlkOworICAgIHVuc2lnbmVkIGludCB2cHNf bnVtX3B0bHNfbWludXMxID0gMDsKKworICAgIC8qCisgICAgICogdnBzX3ZpZGVvX3BhcmFtZXRl cl9zZXRfaWQgdSg0KQorICAgICAqLworICAgIHNraXBfYml0cyhnYiwgNCk7CisKKyAgICB2cHNf bWF4X2xheWVyc19taW51czEgPSBnZXRfYml0cyhnYiwgNik7CisgICAgdnBzX21heF9zdWJfbGF5 ZXJzX21pbnVzMSA9IGdldF9iaXRzKGdiLCAzKTsKKworICAgIC8qCisgICAgICogbnVtVGVtcG9y YWxMYXllcnMgZ3JlYXRlciB0aGFuIDEgaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSB0byB3aGlj aCB0aGlzCisgICAgICogY29uZmlndXJhdGlvbiByZWNvcmQgYXBwbGllcyBpcyB0ZW1wb3JhbGx5 IHNjYWxhYmxlIGFuZCB0aGUgY29udGFpbmVkCisgICAgICogbnVtYmVyIG9mIHRlbXBvcmFsIGxh eWVycyAoYWxzbyByZWZlcnJlZCB0byBhcyB0ZW1wb3JhbCBzdWItbGF5ZXIgb3IKKyAgICAgKiBz dWItbGF5ZXIgaW4gSVNPL0lFQyAyMzAwOC0yKSBpcyBlcXVhbCB0byBudW1UZW1wb3JhbExheWVy cy4gVmFsdWUgMQorICAgICAqIGluZGljYXRlcyB0aGF0IHRoZSBzdHJlYW0gaXMgbm90IHRlbXBv cmFsbHkgc2NhbGFibGUuIFZhbHVlIDAgaW5kaWNhdGVzCisgICAgICogdGhhdCBpdCBpcyB1bmtu b3duIHdoZXRoZXIgdGhlIHN0cmVhbSBpcyB0ZW1wb3JhbGx5IHNjYWxhYmxlLgorICAgICAqLwor ICAgIHZ2Y2MtPm51bV9zdWJsYXllcnMgPSBGRk1BWCh2dmNjLT5udW1fc3VibGF5ZXJzLAorICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2cHNfbWF4X3N1Yl9sYXllcnNfbWludXMxICsg MSk7CisKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCAmJiB2cHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID4gMCkKKyAgICAgICAgdnBzX2RlZmF1bHRfcHRsX2RwYl9ocmRfbWF4X3Rp ZF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4g MCkKKyAgICAgICAgdnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnID0gZ2V0X2JpdHMxKGdi KTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZwc19tYXhfbGF5ZXJzX21pbnVzMTsgaSsr KSB7CisgICAgICAgIHNraXBfYml0cyhnYiwgNik7ICAgIC8vdnBzX2RlZmF1bHRfcHRsX2RwYl9o cmRfbWF4X3RpZF9mbGFnW2ldCisgICAgICAgIGlmIChpID4gMCAmJiAhdnBzX2FsbF9pbmRlcGVu ZGFudF9sYXllcl9mbGFnKSB7CisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgeyAgICAv LyB2cHNfaW5kZXBlbmRhbnRfbGF5ZXJfZmxhZworICAgICAgICAgICAgICAgIHVuc2lnbmVkIGlu dCB2cHNfbWF4X3RpZF9yZWZfcHJlc2VudF9mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAg ICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IGk7IGorKykgeworICAgICAgICAgICAgICAgICAg ICBpZiAodnBzX21heF90aWRfcmVmX3ByZXNlbnRfZmxhZyAmJiBnZXRfYml0czEoZ2IpKSAgLy8g dnBzX2RpcmVjdF9yZWZfbGF5ZXJfZmxhZ1tpXVtqXQorICAgICAgICAgICAgICAgICAgICAgICAg c2tpcF9iaXRzKGdiLCAzKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdnBzX21h eF90aWRfaWxfcmVmX3BpY3NfcGx1czEKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9 CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodnBzX21heF9sYXllcnNfbWludXMxID4gMCkg eworICAgICAgICBpZiAodnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKQorICAgICAgICAg ICAgdnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAg ICBpZiAodnBzX2VhY2hfbGF5ZXJfaXNfYW5fb2xzX2ZsYWcpIHsKKyAgICAgICAgICAgIGlmICgh dnBzX2FsbF9pbmRlcGVuZGFudF9sYXllcl9mbGFnKQorICAgICAgICAgICAgICAgIHZwc19vbHNf bW9kZV9pZGMgPSBnZXRfYml0cyhnYiwgMik7CisgICAgICAgICAgICBpZiAodnBzX29sc19tb2Rl X2lkYyA9PSAyKSB7CisgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IHZwc19udW1fb3V0cHV0 X2xheWVyX3NldHNfbWludXMyID0gZ2V0X2JpdHMoZ2IsIDgpOworICAgICAgICAgICAgICAgIGZv ciAoaW50IGkgPSAxOyBpIDw9IHZwc19udW1fb3V0cHV0X2xheWVyX3NldHNfbWludXMyICsgMTsg aSsrKSB7CisgICAgICAgICAgICAgICAgICAgIGZvciAoaW50IGogPSAwOyBqIDw9IHZwc19tYXhf bGF5ZXJzX21pbnVzMTsgaisrKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMx KGdiKTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIH0KKyAgICAgICAgfQorICAgICAgICB2cHNfbnVtX3B0bHNfbWludXMxID0gZ2V0X2JpdHMo Z2IsIDgpOworICAgIH0KKworICAgIHZwc19wdF9wcmVzZW50X2ZsYWcgPQorICAgICAgICAodW5z aWduZWQgaW50ICopIG1hbGxvYyhzaXplb2YodW5zaWduZWQgaW50KSAqCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICh2cHNfbnVtX3B0bHNfbWludXMxICsgMSkpOworICAgIHZwc19w dGxfbWF4X3RpZCA9CisgICAgICAgICh1bnNpZ25lZCBpbnQgKikgbWFsbG9jKHNpemVvZih1bnNp Z25lZCBpbnQpICoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZwc19udW1fcHRs c19taW51czEgKyAxKSk7CisgICAgZm9yIChpbnQgaSA9IDA7IGkgPD0gdnBzX251bV9wdGxzX21p bnVzMTsgaSsrKSB7CisgICAgICAgIGlmIChpID4gMCkKKyAgICAgICAgICAgIHZwc19wdF9wcmVz ZW50X2ZsYWdbaV0gPSBnZXRfYml0czEoZ2IpOworICAgICAgICBpZiAoIXZwc19kZWZhdWx0X3B0 bF9kcGJfaHJkX21heF90aWRfZmxhZykKKyAgICAgICAgICAgIHZwc19wdGxfbWF4X3RpZFtpXSA9 IGdldF9iaXRzKGdiLCAzKTsKKyAgICB9CisKKyAgICB3aGlsZSAoZ2ItPmluZGV4ICUgOCAhPSAw KQorICAgICAgICBza2lwX2JpdHMxKGdiKTsKKworICAgIGZvciAoaW50IGkgPSAwOyBpIDw9IHZw c19udW1fcHRsc19taW51czE7IGkrKykgeworICAgICAgICB2dmNjX3BhcnNlX3B0bChnYiwgdnZj YywgdnBzX3B0X3ByZXNlbnRfZmxhZ1tpXSwgdnBzX3B0bF9tYXhfdGlkW2ldKTsKKyAgICB9CisK KyAgICBmcmVlKHZwc19wdF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnBzX3B0bF9tYXhfdGlk KTsKKworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBhc3QgdGhpcyBwb2ludCAqLwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IHZ2Y2NfcGFyc2Vfc3BzKEdldEJpdENvbnRl eHQgKmdiLAorICAgICAgICAgICAgICAgICAgICAgICAgICBWVkNEZWNvZGVyQ29uZmlndXJhdGlv blJlY29yZCAqdnZjYykKK3sKKyAgICB1bnNpZ25lZCBpbnQgc3BzX21heF9zdWJfbGF5ZXJzX21p bnVzMSwgbG9nMl9jdHVfc2l6ZV9taW51czU7CisgICAgLy91bnNpZ25lZCBpbnQgbnVtX3Nob3J0 X3Rlcm1fcmVmX3BpY19zZXRzLCBudW1fZGVsdGFfcG9jc1tWVkNfTUFYX1JFRl9QSUNfTElTVFNd OworICAgIC8vdW5zaWduZWQgaW50IHNwc19jaHJvbWFfZm9ybWF0X2lkYzsKKyAgICB1bnNpZ25l ZCBpbnQgc3BzX3N1YnBpY19zYW1lX3NpemVfZmxhZywgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1 bWFfc2FtcGxlLAorICAgICAgICBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZTsKKyAg ICB1bnNpZ25lZCBpbnQgc3BzX2luZGVwZW5kYW50X3N1YnBpY3NfZmxhZzsKKyAgICB1bnNpZ25l ZCBpbnQgZmxhZzsKKworICAgIHNraXBfYml0cyhnYiwgOCk7ICAvLyBzcHNfc2VxX3BhcmFtZXRl cl9zZXRfaWQgJiYgc3BzX3ZpZGVvX3BhcmFtZXRlcl9zZXRfaWQKKyAgICBzcHNfbWF4X3N1Yl9s YXllcnNfbWludXMxID0gZ2V0X2JpdHMoZ2IsIDMpOworCisgICAgLyoKKyAgICAgKiBudW1UZW1w b3JhbExheWVycyBncmVhdGVyIHRoYW4gMSBpbmRpY2F0ZXMgdGhhdCB0aGUgc3RyZWFtIHRvIHdo aWNoIHRoaXMKKyAgICAgKiBjb25maWd1cmF0aW9uIHJlY29yZCBhcHBsaWVzIGlzIHRlbXBvcmFs bHkgc2NhbGFibGUgYW5kIHRoZSBjb250YWluZWQKKyAgICAgKiBudW1iZXIgb2YgdGVtcG9yYWwg bGF5ZXJzIChhbHNvIHJlZmVycmVkIHRvIGFzIHRlbXBvcmFsIHN1Yi1sYXllciBvcgorICAgICAq IHN1Yi1sYXllciBpbiBJU08vSUVDIDIzMDA4LTIpIGlzIGVxdWFsIHRvIG51bVRlbXBvcmFsTGF5 ZXJzLiBWYWx1ZSAxCisgICAgICogaW5kaWNhdGVzIHRoYXQgdGhlIHN0cmVhbSBpcyBub3QgdGVt cG9yYWxseSBzY2FsYWJsZS4gVmFsdWUgMCBpbmRpY2F0ZXMKKyAgICAgKiB0aGF0IGl0IGlzIHVu a25vd24gd2hldGhlciB0aGUgc3RyZWFtIGlzIHRlbXBvcmFsbHkgc2NhbGFibGUuCisgICAgICov CisgICAgdnZjYy0+bnVtX3N1YmxheWVycyA9IEZGTUFYKHZ2Y2MtPm51bV9zdWJsYXllcnMsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNwc19tYXhfc3ViX2xheWVyc19taW51czEg KyAxKTsKKworICAgIHZ2Y2MtPmNocm9tYV9mb3JtYXRfaWRjID0gZ2V0X2JpdHMoZ2IsIDIpOwor ICAgIGxvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0X2JpdHMoZ2IsIDIpOworCisgICAgaWYgKGdl dF9iaXRzMShnYikpICAgICAgICAgIC8vc3BzX3B0bF9kcGJfaHJkX3BhcmFtc19wcmVzZW50X2Zs YWcKKyAgICAgICAgdnZjY19wYXJzZV9wdGwoZ2IsIHZ2Y2MsIDEsIHNwc19tYXhfc3ViX2xheWVy c19taW51czEpOworCisgICAgZmxhZyA9IGdldF9iaXRzKGdiLCAxKTsgICAgIC8vc2tpcF9iaXRz MShnYik7IC8vc3BzX2dkcl9lbmFibGVkX2ZsYWcKKyAgICBmbGFnID0gZ2V0X2JpdHMoZ2IsIDEp OyAgICAgLy9zcHNfcmVmX3BpY19yZXNhbXBsaW5nX2VuYWJsZWRfZmxhZworICAgIGlmIChmbGFn KSB7ICAgICAgICAgICAgICAgICAvL3Nwc19yZWZfcGljX3Jlc2FtcGxpbmdfZW5hYmxlZF9mbGFn CisgICAgICAgIGZsYWcgPSBnZXRfYml0cyhnYiwgMSk7IC8vc2tpcF9iaXRzMShnYik7IC8vc3Bz X3Jlc19jaGFuZ2VfaW5fY2x2c19hbGxvd2VkX2ZsYWcKKyAgICB9CisKKyAgICBzcHNfcGljX3dp ZHRoX21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZj Yy0+bWF4X3BpY3R1cmVfd2lkdGggPQorICAgICAgICBGRk1BWCh2dmNjLT5tYXhfcGljdHVyZV93 aWR0aCwgc3BzX3BpY193aWR0aF9tYXhfaW5fbHVtYV9zYW1wbGUpOworICAgIHNwc19waWNfaGVp Z2h0X21heF9pbl9sdW1hX3NhbXBsZSA9IGdldF91ZV9nb2xvbWJfbG9uZyhnYik7CisgICAgdnZj Yy0+bWF4X3BpY3R1cmVfaGVpZ2h0ID0KKyAgICAgICAgRkZNQVgodnZjYy0+bWF4X3BpY3R1cmVf aGVpZ2h0LCBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUpOworCisgICAgaWYgKGdl dF9iaXRzMShnYikpIHsKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsgLy8gc3BzX2Nv bmZfd2luX2xlZnRfb2Zmc2V0CisgICAgICAgIGdldF91ZV9nb2xvbWJfbG9uZyhnYik7IC8vIHNw c19jb25mX3dpbl9yaWdodF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdiKTsg Ly8gc3BzX2NvbmZfd2luX3RvcF9vZmZzZXQKKyAgICAgICAgZ2V0X3VlX2dvbG9tYl9sb25nKGdi KTsgLy8gc3BzX2NvbmZfd2luX2JvdHRvbV9vZmZzZXQKKyAgICB9CisKKyAgICBpZiAoZ2V0X2Jp dHMxKGdiKSkgeyAgICAgICAgLy8gc3BzX3N1YnBpY19pbmZvX3ByZXNlbnRfZmxhZworICAgICAg ICB1bnNpZ25lZCBpbnQgc3BzX251bV9zdWJwaWNzX21pbnVzMSA9IGdldF91ZV9nb2xvbWJfbG9u ZyhnYik7CisgICAgICAgIGlmIChzcHNfbnVtX3N1YnBpY3NfbWludXMxID4gMCkgeyAgICAgICAv LyBzcHNfbnVtX3N1YnBpY3NfbWludXMxCisgICAgICAgICAgICBzcHNfaW5kZXBlbmRhbnRfc3Vi cGljc19mbGFnID0gZ2V0X2JpdHMxKGdiKTsKKyAgICAgICAgICAgIHNwc19zdWJwaWNfc2FtZV9z aXplX2ZsYWcgPSBnZXRfYml0czEoZ2IpOworICAgICAgICB9CisgICAgICAgIGZvciAoaW50IGkg PSAwOworICAgICAgICAgICAgIHNwc19udW1fc3VicGljc19taW51czEgPiAwICYmIGkgPD0gc3Bz X251bV9zdWJwaWNzX21pbnVzMTsgaSsrKSB7CisgICAgICAgICAgICBpZiAoIXNwc19zdWJwaWNf c2FtZV9zaXplX2ZsYWcgfHwgaSA9PSAwKSB7CisgICAgICAgICAgICAgICAgaW50IGxlbiA9IEZG TUlOKGxvZzJfY3R1X3NpemVfbWludXM1ICsgNSwgMTYpOworICAgICAgICAgICAgICAgIGlmIChp ID4gMCAmJiBzcHNfcGljX3dpZHRoX21heF9pbl9sdW1hX3NhbXBsZSA+IDEyOCkKKyAgICAgICAg ICAgICAgICAgICAgc2tpcF9iaXRzKGdiLCBsZW4pOworICAgICAgICAgICAgICAgIGlmIChpID4g MCAmJiBzcHNfcGljX2hlaWdodF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAg ICAgICAgICAgIHNraXBfYml0cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNw c19udW1fc3VicGljc19taW51czEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BzX3BpY193aWR0 aF9tYXhfaW5fbHVtYV9zYW1wbGUgPiAxMjgpCisgICAgICAgICAgICAgICAgICAgIHNraXBfYml0 cyhnYiwgbGVuKTsKKyAgICAgICAgICAgICAgICBpZiAoaSA8IHNwc19udW1fc3VicGljc19taW51 czEKKyAgICAgICAgICAgICAgICAgICAgJiYgc3BzX3BpY19oZWlnaHRfbWF4X2luX2x1bWFfc2Ft cGxlID4gMTI4KQorICAgICAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIGxlbik7CisgICAg ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXNwc19pbmRlcGVuZGFudF9zdWJwaWNzX2ZsYWcp IHsKKyAgICAgICAgICAgICAgICBza2lwX2JpdHMoZ2IsIDIpOyAgICAgICAvLyBzcHNfc3VicGlj X3RyZWF0ZWRfYXNfcGljX2ZsYWcgJiYgc3BzX2xvb3BfZmlsdGVyX2Fjcm9zc19zdWJwaWNfZW5h YmxlZF9mbGFnCisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgZ2V0X3VlX2dvbG9t Yl9sb25nKGdiKTsgLy8gc3BzX3N1YnBpY19pZF9sZW5fbWludXMxCisgICAgICAgIGlmIChnZXRf Yml0czEoZ2IpKSB7ICAgIC8vIHNwc19zdWJwaWNfaWRfbWFwcGluZ19leHBsaWNpdGx5X3NpZ25h bGxlZF9mbGFnCisgICAgICAgICAgICBpZiAoZ2V0X2JpdHMxKGdiKSkgIC8vIHNwc19zdWJwaWNf aWRfbWFwcGluZ19wcmVzZW50X2ZsYWcKKyAgICAgICAgICAgICAgICBmb3IgKGludCBpID0gMDsg aSA8PSBzcHNfbnVtX3N1YnBpY3NfbWludXMxOyBpKyspIHsKKyAgICAgICAgICAgICAgICAgICAg c2tpcF9iaXRzMShnYik7ICAgICAvLyBzcHNfc3VicGljX2lkW2ldCisgICAgICAgICAgICAgICAg fQorICAgICAgICB9CisgICAgfQorICAgIHZ2Y2MtPmJpdF9kZXB0aF9taW51czggPSBnZXRfdWVf Z29sb21iX2xvbmcoZ2IpOworCisgICAgLyogbm90aGluZyB1c2VmdWwgZm9yIHZ2Y2MgcGFzdCB0 aGlzIHBvaW50ICovCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBpbnQgdnZjY19wYXJzZV9w cHMoR2V0Qml0Q29udGV4dCAqZ2IsCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29k ZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQoreworCisgICAgLy8gTm90aGluZyBvZiBpbXBv cnRhbmNlIHRvIHBhcnNlIGluIFBQUworICAgIC8qIG5vdGhpbmcgdXNlZnVsIGZvciB2dmNjIHBh c3QgdGhpcyBwb2ludCAqLworICAgIHJldHVybiAwOworfQorCitzdGF0aWMgdm9pZCBuYWxfdW5p dF9wYXJzZV9oZWFkZXIoR2V0Qml0Q29udGV4dCAqZ2IsIHVpbnQ4X3QgKm5hbF90eXBlKQorewor ICAgIC8qCisgICAgICogZm9yYmlkZGVuX3plcm9fYml0ICAgIHUoMSkKKyAgICAgKiBudWhfcmVz ZXJ2ZWRfemVyb19iaXQgdSgxKQorICAgICAqIG51aF9sYXllcl9pZCAgICAgICAgICB1KDYpCisg ICAgICovCisgICAgc2tpcF9iaXRzKGdiLCA4KTsKKyAgICAqbmFsX3R5cGUgPSBnZXRfYml0cyhn YiwgNSk7CisKKyAgICAvKgorICAgICAqIG51aF90ZW1wb3JhbF9pZF9wbHVzMSB1KDMpCisgICAg ICovCisgICAgc2tpcF9iaXRzKGdiLCAzKTsKK30KKworc3RhdGljIGludCB2dmNjX2FycmF5X2Fk ZF9uYWxfdW5pdCh1aW50OF90ICpuYWxfYnVmLCB1aW50MzJfdCBuYWxfc2l6ZSwKKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgdWludDhfdCBuYWxfdHlwZSwgaW50IHBzX2FycmF5 X2NvbXBsZXRlbmVzcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVlZDRGVj b2RlckNvbmZpZ3VyYXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgaW50IHJldDsKKyAgICB1aW50 OF90IGluZGV4OworICAgIHVpbnQxNl90IG51bV9uYWx1czsKKyAgICBWVkNDTkFMVW5pdEFycmF5 ICphcnJheTsKKworICAgIGZvciAoaW5kZXggPSAwOyBpbmRleCA8IHZ2Y2MtPm51bV9vZl9hcnJh eXM7IGluZGV4KyspCisgICAgICAgIGlmICh2dmNjLT5hcnJheVtpbmRleF0uTkFMX3VuaXRfdHlw ZSA9PSBuYWxfdHlwZSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgaWYgKGluZGV4ID49IHZ2 Y2MtPm51bV9vZl9hcnJheXMpIHsKKyAgICAgICAgdWludDhfdCBpOworCisgICAgICAgIHJldCA9 CisgICAgICAgICAgICBhdl9yZWFsbG9jcF9hcnJheSgmdnZjYy0+YXJyYXksIGluZGV4ICsgMSwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNpemVvZihWVkNDTkFMVW5pdEFycmF5KSk7 CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKworICAgICAg ICBmb3IgKGkgPSB2dmNjLT5udW1fb2ZfYXJyYXlzOyBpIDw9IGluZGV4OyBpKyspCisgICAgICAg ICAgICBtZW1zZXQoJnZ2Y2MtPmFycmF5W2ldLCAwLCBzaXplb2YoVlZDQ05BTFVuaXRBcnJheSkp OworICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzID0gaW5kZXggKyAxOworICAgIH0KKworICAg IGFycmF5ID0gJnZ2Y2MtPmFycmF5W2luZGV4XTsKKyAgICBudW1fbmFsdXMgPSBhcnJheS0+bnVt X25hbHVzOworCisgICAgcmV0ID0gYXZfcmVhbGxvY3BfYXJyYXkoJmFycmF5LT5uYWxfdW5pdCwg bnVtX25hbHVzICsgMSwgc2l6ZW9mKHVpbnQ4X3QgKikpOworICAgIGlmIChyZXQgPCAwKQorICAg ICAgICByZXR1cm4gcmV0OworCisgICAgcmV0ID0KKyAgICAgICAgYXZfcmVhbGxvY3BfYXJyYXko JmFycmF5LT5uYWxfdW5pdF9sZW5ndGgsIG51bV9uYWx1cyArIDEsCisgICAgICAgICAgICAgICAg ICAgICAgICAgIHNpemVvZih1aW50MTZfdCkpOworICAgIGlmIChyZXQgPCAwKQorICAgICAgICBy ZXR1cm4gcmV0OworCisgICAgYXJyYXktPm5hbF91bml0W251bV9uYWx1c10gPSBuYWxfYnVmOwor ICAgIGFycmF5LT5uYWxfdW5pdF9sZW5ndGhbbnVtX25hbHVzXSA9IG5hbF9zaXplOworICAgIGFy cmF5LT5OQUxfdW5pdF90eXBlID0gbmFsX3R5cGU7CisgICAgYXJyYXktPm51bV9uYWx1cysrOwor CisgICAgLyoKKyAgICAgKiBXaGVuIHRoZSBzYW1wbGUgZW50cnkgbmFtZSBpcyDigJh2dmMx4oCZ LCB0aGUgZGVmYXVsdCBhbmQgbWFuZGF0b3J5IHZhbHVlIG9mCisgICAgICogYXJyYXlfY29tcGxl dGVuZXNzIGlzIDEgZm9yIGFycmF5cyBvZiBhbGwgdHlwZXMgb2YgcGFyYW1ldGVyIHNldHMsIGFu ZCAwCisgICAgICogZm9yIGFsbCBvdGhlciBhcnJheXMuIFdoZW4gdGhlIHNhbXBsZSBlbnRyeSBu YW1lIGlzIOKAmGhldjHigJksIHRoZSBkZWZhdWx0CisgICAgICogdmFsdWUgb2YgYXJyYXlfY29t cGxldGVuZXNzIGlzIDAgZm9yIGFsbCBhcnJheXMuCisgICAgICovCisgICAgaWYgKG5hbF90eXBl ID09IFZWQ19WUFNfTlVUIHx8IG5hbF90eXBlID09IFZWQ19TUFNfTlVUIHx8CisgICAgICAgIG5h bF90eXBlID09IFZWQ19QUFNfTlVUKQorICAgICAgICBhcnJheS0+YXJyYXlfY29tcGxldGVuZXNz ID0gcHNfYXJyYXlfY29tcGxldGVuZXNzOworCisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bnQgdnZjY19hZGRfbmFsX3VuaXQodWludDhfdCAqbmFsX2J1ZiwgdWludDMyX3QgbmFsX3NpemUs CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCBwc19hcnJheV9jb21wbGV0ZW5lc3Ms CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVj b3JkICp2dmNjKQoreworICAgIGludCByZXQgPSAwOworICAgIEdldEJpdENvbnRleHQgZ2JjOwor ICAgIHVpbnQ4X3QgbmFsX3R5cGU7CisgICAgdWludDhfdCAqcmJzcF9idWY7CisgICAgdWludDMy X3QgcmJzcF9zaXplOworCisgICAgcmJzcF9idWYgPSBmZl9uYWxfdW5pdF9leHRyYWN0X3Jic3Ao bmFsX2J1ZiwgbmFsX3NpemUsICZyYnNwX3NpemUsIDIpOworICAgIGlmICghcmJzcF9idWYpIHsK KyAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGVuZDsKKyAgICB9 CisKKyAgICByZXQgPSBpbml0X2dldF9iaXRzOCgmZ2JjLCByYnNwX2J1ZiwgcmJzcF9zaXplKTsK KyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgZ290byBlbmQ7CisKKyAgICBuYWxfdW5pdF9wYXJz ZV9oZWFkZXIoJmdiYywgJm5hbF90eXBlKTsKKworICAgIC8qCisgICAgICogTm90ZTogb25seSAn ZGVjbGFyYXRpdmUnIFNFSSBtZXNzYWdlcyBhcmUgYWxsb3dlZCBpbgorICAgICAqIHZ2Y2MuIFBl cmhhcHMgdGhlIFNFSSBwbGF5bG9hZCB0eXBlIHNob3VsZCBiZSBjaGVja2VkCisgICAgICogYW5k IG5vbi1kZWNsYXJhdGl2ZSBTRUkgbWVzc2FnZXMgZGlzY2FyZGVkPworICAgICAqLworICAgIHN3 aXRjaCAobmFsX3R5cGUpIHsKKyAgICBjYXNlIFZWQ19PUElfTlVUOgorICAgIGNhc2UgVlZDX1ZQ U19OVVQ6CisgICAgY2FzZSBWVkNfU1BTX05VVDoKKyAgICBjYXNlIFZWQ19QUFNfTlVUOgorICAg IGNhc2UgVlZDX1BSRUZJWF9TRUlfTlVUOgorICAgIGNhc2UgVlZDX1NVRkZJWF9TRUlfTlVUOgor ICAgICAgICByZXQgPSB2dmNjX2FycmF5X2FkZF9uYWxfdW5pdChuYWxfYnVmLCBuYWxfc2l6ZSwg bmFsX3R5cGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBzX2FycmF5 X2NvbXBsZXRlbmVzcywgdnZjYyk7CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAgICAgICAg Z290byBlbmQ7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19WUFNfTlVUKQorICAg ICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV92cHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2Ug aWYgKG5hbF90eXBlID09IFZWQ19TUFNfTlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJz ZV9zcHMoJmdiYywgdnZjYyk7CisgICAgICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19QUFNf TlVUKQorICAgICAgICAgICAgcmV0ID0gdnZjY19wYXJzZV9wcHMoJmdiYywgdnZjYyk7CisgICAg ICAgIGVsc2UgaWYgKG5hbF90eXBlID09IFZWQ19PUElfTlVUKSB7CisgICAgICAgICAgICAvLyBu b3QgeWV0IHN1cHBvcnRlZAorICAgICAgICB9CisgICAgICAgIGlmIChyZXQgPCAwKQorICAgICAg ICAgICAgZ290byBlbmQ7CisgICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIHJl dCA9IEFWRVJST1JfSU5WQUxJRERBVEE7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICBl bmQ6CisgICAgYXZfZnJlZShyYnNwX2J1Zik7CisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGlj IHZvaWQgdnZjY19pbml0KFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkICp2dmNjKQorewor ICAgIG1lbXNldCh2dmNjLCAwLCBzaXplb2YoVlZDRGVjb2RlckNvbmZpZ3VyYXRpb25SZWNvcmQp KTsKKyAgICB2dmNjLT5sZW5ndGhTaXplTWludXNPbmUgPSAzOyAgICAgICAvLyA0IGJ5dGVzCisK KyAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyA9IDE7CisKKyAgICB2dmNj LT5wdGxfcHJlc2VudF9mbGFnID0gMTsKK30KKworc3RhdGljIHZvaWQgdnZjY19jbG9zZShWVkNE ZWNvZGVyQ29uZmlndXJhdGlvblJlY29yZCAqdnZjYykKK3sKKyAgICB1aW50OF90IGk7CisKKyAg ICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIHZ2 Y2MtPmFycmF5W2ldLm51bV9uYWx1cyA9IDA7CisgICAgICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJh eVtpXS5uYWxfdW5pdCk7CisgICAgICAgIGF2X2ZyZWVwKCZ2dmNjLT5hcnJheVtpXS5uYWxfdW5p dF9sZW5ndGgpOworICAgIH0KKworICAgIGZyZWUodnZjYy0+cHRsLnB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWcpOworICAgIGZyZWUodnZjYy0+cHRsLnN1YmxheWVyX2xldmVsX2lkYyk7 CisgICAgZnJlZSh2dmNjLT5wdGwuZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGMpOworCisgICAgdnZj Yy0+bnVtX29mX2FycmF5cyA9IDA7CisgICAgYXZfZnJlZXAoJnZ2Y2MtPmFycmF5KTsKK30KKwor c3RhdGljIGludCB2dmNjX3dyaXRlKEFWSU9Db250ZXh0ICpwYiwgVlZDRGVjb2RlckNvbmZpZ3Vy YXRpb25SZWNvcmQgKnZ2Y2MpCit7CisgICAgdWludDhfdCBpOworICAgIHVpbnQxNl90IGosIHZw c19jb3VudCA9IDAsIHNwc19jb3VudCA9IDAsIHBwc19jb3VudCA9IDA7CisgICAgdW5zaWduZWQg Y2hhciAqYnVmID0gTlVMTDsKKyAgICAvKgorICAgICAqIEl0J3MgdW5jbGVhciBob3cgdG8gcHJv cGVybHkgY29tcHV0ZSB0aGVzZSBmaWVsZHMsIHNvCisgICAgICogbGV0J3MgYWx3YXlzIHNldCB0 aGVtIHRvIHZhbHVlcyBtZWFuaW5nICd1bnNwZWNpZmllZCcuCisgICAgICovCisgICAgdnZjYy0+ YXZnX2ZyYW1lX3JhdGUgPSAwOworICAgIHZ2Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUgPSAxOwor CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImxlbmd0aFNpemVN aW51c09uZTogICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNj LT5sZW5ndGhTaXplTWludXNPbmUpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisg ICAgICAgICAgICJwdGxfcHJlc2VudF9mbGFnOiAgICAgICAgICAgICAgICAgICAgJSIgUFJJdTgg IlxuIiwKKyAgICAgICAgICAgdnZjYy0+cHRsX3ByZXNlbnRfZmxhZyk7CisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm9sc19pZHg6ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwgdnZjYy0+b2xzX2lkeCk7CisgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgIm51bV9zdWJsYXllcnM6ICAgICAgICAgICAg ICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1fc3VibGF5ZXJz KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiY29uc3RhbnRf ZnJhbWVfcmF0ZTogICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2 Y2MtPmNvbnN0YW50X2ZyYW1lX3JhdGUpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0Us CisgICAgICAgICAgICJjaHJvbWFfZm9ybWF0X2lkYzogICAgICAgICAgICAgICAgICAgJSIgUFJJ dTggIlxuIiwKKyAgICAgICAgICAgdnZjYy0+Y2hyb21hX2Zvcm1hdF9pZGMpOworCisgICAgYXZf bG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImJpdF9kZXB0aF9taW51czg6ICAg ICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5iaXRfZGVw dGhfbWludXM4KTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAi bnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbzogICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAg ICAgICAgIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9pbmZvKTsKKyAgICBhdl9sb2co TlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAgICAiZ2VuZXJhbF9wcm9maWxlX2lkYzogICAg ICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFs X3Byb2ZpbGVfaWRjKTsKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RSQUNFLAorICAgICAgICAg ICAiZ2VuZXJhbF90aWVyX2ZsYWc6ICAgICAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsCisg ICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3RpZXJfZmxhZyk7CisgICAgYXZfbG9nKE5VTEws IEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImdlbmVyYWxfbGV2ZWxfaWRjOiAgICAgICAgICAg ICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9sZXZl bF9pZGMpOworICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJwdGxf ZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWc6ICAgICAgJSIgUFJJdTggIlxuIiwKKyAgICAgICAg ICAgdnZjYy0+cHRsLnB0bF9mcmFtZV9vbmx5X2NvbnN0cmFpbnRfZmxhZyk7CisgICAgYXZfbG9n KE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgInB0bF9tdWx0aWxheWVyX2VuYWJsZWRf ZmxhZzogICAgICAgICAlIiBQUkl1OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5wdGwucHRsX211 bHRpbGF5ZXJfZW5hYmxlZF9mbGFnKTsKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLm51 bV9ieXRlc19jb25zdHJhaW50X2luZm87IGkrKykgeworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAorICAgICAgICAgICAgICAgImdlbmVyYWxfY29uc3RyYWludF9pbmZvWyVkXTog ICAgICAgICAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5l cmFsX2NvbnN0cmFpbnRfaW5mb1tpXSk7CisgICAgfQorCisgICAgZm9yIChpID0gMDsgaSA8IHZ2 Y2MtPm51bV9zdWJsYXllcnMgLSAxOyBpKyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xP R19UUkFDRSwKKyAgICAgICAgICAgICAgICJwdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFn WyUiIFBSSXU4ICJdOiAgJSIgUFJJdTggIlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0 bC5wdGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAgYXZfbG9nKE5V TEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAgICJzdWJsYXllcl9sZXZlbF9pZGNbJSIg UFJJdTggIl06ICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNjLT5wdGwuc3Vi bGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICB9CisKKyAgICBhdl9sb2coTlVMTCwgQVZfTE9HX1RS QUNFLAorICAgICAgICAgICAibnVtX3N1Yl9wcm9maWxlczogICAgICAgICAgICAgICAgICAgICUi IFBSSXU4ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPnB0bC5wdGxfbnVtX3N1Yl9wcm9maWxlcyk7 CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBp KyspIHsKKyAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgICAg ICJnZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1slIiBQUkl1OCAiXTogICAgICAgICAlIiBQUkl4MzIg IlxuIiwgaSwKKyAgICAgICAgICAgICAgIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lk Y1tpXSk7CisgICAgfQorCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAg ICAgIm1heF9waWN0dXJlX3dpZHRoOiAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwK KyAgICAgICAgICAgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICJtYXhfcGljdHVyZV9oZWlnaHQ6ICAgICAgICAgICAg ICAgICAgJSIgUFJJdTE2ICJcbiIsCisgICAgICAgICAgIHZ2Y2MtPm1heF9waWN0dXJlX2hlaWdo dCk7CisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAgICAgICAgICAgImF2Z19mcmFt ZV9yYXRlOiAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1MTYgIlxuIiwKKyAgICAgICAgICAg dnZjYy0+YXZnX2ZyYW1lX3JhdGUpOworCisgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwK KyAgICAgICAgICAgIm51bV9vZl9hcnJheXM6ICAgICAgICAgICAgICAgICAgICAgICAlIiBQUkl1 OCAiXG4iLAorICAgICAgICAgICB2dmNjLT5udW1fb2ZfYXJyYXlzKTsKKyAgICBmb3IgKGkgPSAw OyBpIDwgdnZjYy0+bnVtX29mX2FycmF5czsgaSsrKSB7CisgICAgICAgIGF2X2xvZyhOVUxMLCBB Vl9MT0dfVFJBQ0UsCisgICAgICAgICAgICAgICAiYXJyYXlfY29tcGxldGVuZXNzWyUiIFBSSXU4 ICJdOiAgICAgICAgICAgICAgICUiIFBSSXU4ICJcbiIsIGksCisgICAgICAgICAgICAgICB2dmNj LT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MpOworICAgICAgICBhdl9sb2coTlVMTCwgQVZf TE9HX1RSQUNFLAorICAgICAgICAgICAgICAgIk5BTF91bml0X3R5cGVbJSIgUFJJdTggIl06ICAg ICAgICAgICAgICAgICAgICAlIiBQUkl1OCAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+ YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSk7CisgICAgICAgIGF2X2xvZyhOVUxMLCBBVl9MT0dfVFJB Q0UsCisgICAgICAgICAgICAgICAibnVtX25hbHVzWyUiIFBSSXU4ICJdOiAgICAgICAgICAgICAg ICAgICAgICAgICUiIFBSSXUxNiAiXG4iLCBpLAorICAgICAgICAgICAgICAgdnZjYy0+YXJyYXlb aV0ubnVtX25hbHVzKTsKKyAgICAgICAgZm9yIChqID0gMDsgaiA8IHZ2Y2MtPmFycmF5W2ldLm51 bV9uYWx1czsgaisrKQorICAgICAgICAgICAgYXZfbG9nKE5VTEwsIEFWX0xPR19UUkFDRSwKKyAg ICAgICAgICAgICAgICAgICAibmFsX3VuaXRfbGVuZ3RoWyUiIFBSSXU4ICJdWyUiIFBSSXUxNiAi XTogICAgICAgICAgICAgICAlIgorICAgICAgICAgICAgICAgICAgIFBSSXUxNiAiXG4iLCBpLCBq LCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdF9sZW5ndGhbal0pOworICAgIH0KKworICAgIC8qCisg ICAgICogV2UgbmVlZCBhdCBsZWFzdCBvbmUgb2YgZWFjaDogVlBTIGFuZCBTUFMuCisgICAgICov CisgICAgZm9yIChpID0gMDsgaSA8IHZ2Y2MtPm51bV9vZl9hcnJheXM7IGkrKykKKyAgICAgICAg c3dpdGNoICh2dmNjLT5hcnJheVtpXS5OQUxfdW5pdF90eXBlKSB7CisgICAgICAgIGNhc2UgVlZD X1ZQU19OVVQ6CisgICAgICAgICAgICB2cHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25h bHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6CisgICAg ICAgICAgICBzcHNfY291bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAg ICAgYnJlYWs7CisgICAgICAgIGNhc2UgVlZDX1BQU19OVVQ6CisgICAgICAgICAgICBwcHNfY291 bnQgKz0gdnZjYy0+YXJyYXlbaV0ubnVtX25hbHVzOworICAgICAgICAgICAgYnJlYWs7CisgICAg ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorCisgICAgaWYgKCFz cHNfY291bnQgfHwgc3BzX2NvdW50ID4gVlZDX01BWF9TUFNfQ09VTlQpCisgICAgICAgIHJldHVy biBBVkVSUk9SX0lOVkFMSUREQVRBOworCisgICAgLyogYml0KDUpIHJlc2VydmVkID0g4oCYMTEx MTHigJliOworICAgICAgIHVuc2lnbmVkIGludCAoMikgTGVuZ3RoU2l6ZU1pbnVzT25lCisgICAg ICAgdW5zaWduZWQgaW50ICgxKSBwdGxfcHJlc2VudF9mbGFnICovCisgICAgYXZpb193OChwYiwg dnZjYy0+bGVuZ3RoU2l6ZU1pbnVzT25lIDw8IDEgfCB2dmNjLT5wdGxfcHJlc2VudF9mbGFnIHwg MHhmOCk7CisKKyAgICBpZiAodnZjYy0+cHRsX3ByZXNlbnRfZmxhZykgeworICAgICAgICAvKgor ICAgICAgICAgKiB1bnNpZ25lZCBpbnQoOSkgb2xzX2lkeDsKKyAgICAgICAgICogdW5zaWduZWQg aW50KDMpIG51bV9zdWJsYXllcnM7CisgICAgICAgICAqIHVuc2lnbmVkIGludCgyKSBjb25zdGFu dF9mcmFtZV9yYXRlOworICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMikgY2hyb21hX2Zvcm1hdF9p ZGM7ICAgICAqLworICAgICAgICBhdmlvX3diMTYocGIsCisgICAgICAgICAgICAgICAgICB2dmNj LT5vbHNfaWR4IDw8IDcgfCB2dmNjLT5udW1fc3VibGF5ZXJzIDw8IDQgfCB2dmNjLT4KKyAgICAg ICAgICAgICAgICAgIGNvbnN0YW50X2ZyYW1lX3JhdGUgPDwgMiB8IHZ2Y2MtPmNocm9tYV9mb3Jt YXRfaWRjKTsKKworICAgICAgICAvKiB1bnNpZ25lZCBpbnQoMykgYml0X2RlcHRoX21pbnVzODsK KyAgICAgICAgICAgYml0KDUpIHJlc2VydmVkID0g4oCYMTExMTHigJliOyAqLworICAgICAgICBh dmlvX3c4KHBiLCB2dmNjLT5iaXRfZGVwdGhfbWludXM4IDw8IDUgfCAweDFmKTsKKworICAgICAg ICAvL1ZWQ1BUTFJlY29yZAorCisgICAgICAgIC8qIGJpdCgyKSByZXNlcnZlZCA9IOKAmDAw4oCZ YjsKKyAgICAgICAgICAgdW5zaWduZWQgaW50ICg2KSBudW1fYnl0ZXNfY29uc3RyYWludF9pbmZv ICovCisgICAgICAgIGF2aW9fdzgocGIsIHZ2Y2MtPnB0bC5udW1fYnl0ZXNfY29uc3RyYWludF9p bmZvICYgMHgzZik7CisKKyAgICAgICAgLyogdW5zaWduZWQgaW50ICg3KSBnZW5lcmFsX3Byb2Zp bGVfaWRjCisgICAgICAgICAgIHVuc2lnbmVkIGludCAoMSkgZ2VuZXJhbF90aWVyX2ZsYWcgKi8K KyAgICAgICAgYXZpb193OChwYiwKKyAgICAgICAgICAgICAgICB2dmNjLT5wdGwuZ2VuZXJhbF9w cm9maWxlX2lkYyA8PCAxIHwgdnZjYy0+cHRsLmdlbmVyYWxfdGllcl9mbGFnKTsKKworICAgICAg ICAvKiB1bnNpZ25lZCBpbnQgKDgpIGdlbmVyYWxfbGV2ZWxfaWRjICovCisgICAgICAgIGF2aW9f dzgocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX2xldmVsX2lkYyk7CisKKyAgICAgICAgLyoKKyAgICAg ICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfZnJhbWVfb25seV9jb25zdHJhaW50X2ZsYWcKKyAg ICAgICAgICogdW5zaWduZWQgaW50ICgxKSBwdGxfbXVsdGlsYXllcl9lbmFibGVkX2ZsYWcKKyAg ICAgICAgICogdW5zaWduZWQgaW50ICg4Km51bV9ieXRlc19jb25zdHJhaW50X2luZm8gLTIpIGdl bmVyYWxfY29uc3RyYWludF9pbmZvICovCisgICAgICAgIGJ1ZiA9CisgICAgICAgICAgICAodW5z aWduZWQgY2hhciAqKSBtYWxsb2Moc2l6ZW9mKHVuc2lnbmVkIGNoYXIpICoKKyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRf aW5mbyk7CisgICAgICAgICpidWYgPSB2dmNjLT5wdGwucHRsX2ZyYW1lX29ubHlfY29uc3RyYWlu dF9mbGFnIDw8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIG51bV9ieXRlc19jb25zdHJhaW50X2lu Zm8gKiA4IC0gMSB8IHZ2Y2MtPnB0bC4KKyAgICAgICAgICAgIHB0bF9tdWx0aWxheWVyX2VuYWJs ZWRfZmxhZyA8PCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRfaW5mbyAqCisgICAgICAg ICAgICA4IC0gMiB8ICp2dmNjLT5wdGwuZ2VuZXJhbF9jb25zdHJhaW50X2luZm8gPj4gMjsKKyAg ICAgICAgYXZpb193cml0ZShwYiwgYnVmLCB2dmNjLT5wdGwubnVtX2J5dGVzX2NvbnN0cmFpbnRf aW5mbyk7CisgICAgICAgIGZyZWUoYnVmKTsKKworICAgICAgICBpZiAodnZjYy0+bnVtX3N1Ymxh eWVycyA+IDEpIHsKKyAgICAgICAgICAgIHVpbnQ4X3QgcHRsX3N1YmxheWVyX2xldmVsX3ByZXNl bnRfZmxhZ3MgPSAwOworICAgICAgICAgICAgZm9yIChpbnQgaSA9IHZ2Y2MtPm51bV9zdWJsYXll cnMgLSAyOyBpID49IDA7IGktLSkgeworICAgICAgICAgICAgICAgIHB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWdzID0KKyAgICAgICAgICAgICAgICAgICAgKHB0bF9zdWJsYXllcl9sZXZl bF9wcmVzZW50X2ZsYWdzIDw8IDEgfCB2dmNjLT5wdGwuCisgICAgICAgICAgICAgICAgICAgICBw dGxfc3VibGF5ZXJfbGV2ZWxfcHJlc2VudF9mbGFnW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAg ICAgICAgIGF2aW9fdzgocGIsIHB0bF9zdWJsYXllcl9sZXZlbF9wcmVzZW50X2ZsYWdzKTsKKyAg ICAgICAgfQorCisgICAgICAgIGZvciAoaW50IGkgPSB2dmNjLT5udW1fc3VibGF5ZXJzIC0gMjsg aSA+PSAwOyBpLS0pIHsKKyAgICAgICAgICAgIGlmICh2dmNjLT5wdGwucHRsX3N1YmxheWVyX2xl dmVsX3ByZXNlbnRfZmxhZ1tpXSkKKyAgICAgICAgICAgICAgICBhdmlvX3c4KHBiLCB2dmNjLT5w dGwuc3VibGF5ZXJfbGV2ZWxfaWRjW2ldKTsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHVuc2ln bmVkIGludCg4KSBudW1fc3ViX3Byb2ZpbGVzOyAqLworICAgICAgICBhdmlvX3c4KHBiLCB2dmNj LT5wdGwucHRsX251bV9zdWJfcHJvZmlsZXMpOworCisgICAgICAgIGZvciAoaW50IGogPSAwOyBq IDwgdnZjYy0+cHRsLnB0bF9udW1fc3ViX3Byb2ZpbGVzOyBqKyspIHsKKyAgICAgICAgICAgIC8q IHVuc2lnbmVkIGludCgzMikgZ2VuZXJhbF9zdWJfcHJvZmlsZV9pZGNbal07ICovCisgICAgICAg ICAgICBhdmlvX3diMzIocGIsIHZ2Y2MtPnB0bC5nZW5lcmFsX3N1Yl9wcm9maWxlX2lkY1tqXSk7 CisgICAgICAgIH0KKworICAgICAgICAvL0VuZCBvZiBWdmNQVExSZWNvcmQKKworICAgICAgICAv KgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIG1heF9waWN0dXJlX3dpZHRoOyovCisgICAg ICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfd2lkdGgpOworCisgICAgICAgIC8q CisgICAgICAgICAqIHVuc2lnbmVkIGludCgxNikgbWF4X3BpY3R1cmVfaGVpZ2h0OyovCisgICAg ICAgIGF2aW9fd2IxNihwYiwgdnZjYy0+bWF4X3BpY3R1cmVfaGVpZ2h0KTsKKworICAgICAgICAv KgorICAgICAgICAgKiB1bnNpZ25lZCBpbnQoMTYpIGF2Z19mcmFtZV9yYXRlOyAqLworICAgICAg ICBhdmlvX3diMTYocGIsIHZ2Y2MtPmF2Z19mcmFtZV9yYXRlKTsKKyAgICB9CisKKyAgICAvKiB1 bnNpZ25lZCBpbnQoOCkgbnVtX29mX2FycmF5czsgKi8KKyAgICBhdmlvX3c4KHBiLCB2dmNjLT5u dW1fb2ZfYXJyYXlzKTsKKworICAgIGZvciAoaSA9IDA7IGkgPCB2dmNjLT5udW1fb2ZfYXJyYXlz OyBpKyspIHsKKyAgICAgICAgLyoKKyAgICAgICAgICogYml0KDEpIGFycmF5X2NvbXBsZXRlbmVz czsKKyAgICAgICAgICogdW5zaWduZWQgaW50KDIpIHJlc2VydmVkID0gMDsKKyAgICAgICAgICog dW5zaWduZWQgaW50KDUpIE5BTF91bml0X3R5cGU7CisgICAgICAgICAqLworICAgICAgICBhdmlv X3c4KHBiLCB2dmNjLT5hcnJheVtpXS5hcnJheV9jb21wbGV0ZW5lc3MgPDwgNyB8CisgICAgICAg ICAgICAgICAgdnZjYy0+YXJyYXlbaV0uTkFMX3VuaXRfdHlwZSAmIDB4MWYpOworICAgICAgICAv KiB1bnNpZ25lZCBpbnQoMTYpIG51bV9uYWx1czsgKi8KKyAgICAgICAgaWYgKHZ2Y2MtPmFycmF5 W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX0RDSV9OVVQgJiYKKyAgICAgICAgICAgIHZ2Y2MtPmFy cmF5W2ldLk5BTF91bml0X3R5cGUgIT0gVlZDX09QSV9OVVQpCisgICAgICAgICAgICBhdmlvX3di MTYocGIsIHZ2Y2MtPmFycmF5W2ldLm51bV9uYWx1cyk7CisgICAgICAgIGZvciAoaiA9IDA7IGog PCB2dmNjLT5hcnJheVtpXS5udW1fbmFsdXM7IGorKykgeworICAgICAgICAgICAgLyogdW5zaWdu ZWQgaW50KDE2KSBuYWxfdW5pdF9sZW5ndGg7ICovCisgICAgICAgICAgICBhdmlvX3diMTYocGIs IHZ2Y2MtPmFycmF5W2ldLm5hbF91bml0X2xlbmd0aFtqXSk7CisKKyAgICAgICAgICAgIC8qIGJp dCg4Km5hbF91bml0X2xlbmd0aCkgbmFsX3VuaXQ7ICovCisgICAgICAgICAgICBhdmlvX3dyaXRl KHBiLCB2dmNjLT5hcnJheVtpXS5uYWxfdW5pdFtqXSwKKyAgICAgICAgICAgICAgICAgICAgICAg dnZjYy0+YXJyYXlbaV0ubmFsX3VuaXRfbGVuZ3RoW2pdKTsKKyAgICAgICAgfQorICAgIH0KKwor ICAgIHJldHVybiAwOworfQorCitpbnQgZmZfaDI2Nl9hbm5leGIybXA0KEFWSU9Db250ZXh0ICpw YiwgY29uc3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAgICAgIGludCBzaXpl LCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KQoreworICAgIGludCBudW1fcHMgPSAwLCBy ZXQgPSAwOworICAgIHVpbnQ4X3QgKmJ1ZiwgKmVuZCwgKnN0YXJ0ID0gTlVMTDsKKworICAgIGlm ICghZmlsdGVyX3BzKSB7CisgICAgICAgIHJldCA9IGZmX2F2Y19wYXJzZV9uYWxfdW5pdHMocGIs IGJ1Zl9pbiwgc2l6ZSk7CisgICAgICAgIGdvdG8gZW5kOworICAgIH0KKworICAgIHJldCA9IGZm X2F2Y19wYXJzZV9uYWxfdW5pdHNfYnVmKGJ1Zl9pbiwgJnN0YXJ0LCAmc2l6ZSk7CisgICAgaWYg KHJldCA8IDApCisgICAgICAgIGdvdG8gZW5kOworCisgICAgcmV0ID0gMDsKKyAgICBidWYgPSBz dGFydDsKKyAgICBlbmQgPSBzdGFydCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4g NCkgeworICAgICAgICB1aW50MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1 ZiAtIDQpOworICAgICAgICB1aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAg IGJ1ZiArPSA0OworCisgICAgICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19W UFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUFNf TlVUOgorICAgICAgICAgICAgbnVtX3BzKys7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg ZGVmYXVsdDoKKyAgICAgICAgICAgIHJldCArPSA0ICsgbGVuOworICAgICAgICAgICAgYXZpb193 YjMyKHBiLCBsZW4pOworICAgICAgICAgICAgYXZpb193cml0ZShwYiwgYnVmLCBsZW4pOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBidWYgKz0gbGVuOworICAgIH0K KworICBlbmQ6CisgICAgYXZfZnJlZShzdGFydCk7CisgICAgaWYgKHBzX2NvdW50KQorICAgICAg ICAqcHNfY291bnQgPSBudW1fcHM7CisgICAgcmV0dXJuIHJldDsKK30KKworaW50IGZmX2gyNjZf YW5uZXhiMm1wNF9idWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291dCwK KyAgICAgICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQg KnBzX2NvdW50KQoreworICAgIEFWSU9Db250ZXh0ICpwYjsKKyAgICBpbnQgcmV0OworCisgICAg cmV0ID0gYXZpb19vcGVuX2R5bl9idWYoJnBiKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAg cmV0dXJuIHJldDsKKworICAgIHJldCA9IGZmX2gyNjZfYW5uZXhiMm1wNChwYiwgYnVmX2luLCAq c2l6ZSwgZmlsdGVyX3BzLCBwc19jb3VudCk7CisgICAgaWYgKHJldCA8IDApIHsKKyAgICAgICAg ZmZpb19mcmVlX2R5bl9idWYoJnBiKTsKKyAgICAgICAgcmV0dXJuIHJldDsKKyAgICB9CisKKyAg ICAqc2l6ZSA9IGF2aW9fY2xvc2VfZHluX2J1ZihwYiwgYnVmX291dCk7CisKKyAgICByZXR1cm4g MDsKK30KKworaW50IGZmX2lzb21fd3JpdGVfdnZjYyhBVklPQ29udGV4dCAqcGIsIGNvbnN0IHVp bnQ4X3QgKmRhdGEsCisgICAgICAgICAgICAgICAgICAgICAgIGludCBzaXplLCBpbnQgcHNfYXJy YXlfY29tcGxldGVuZXNzKQoreworICAgIFZWQ0RlY29kZXJDb25maWd1cmF0aW9uUmVjb3JkIHZ2 Y2M7CisgICAgdWludDhfdCAqYnVmLCAqZW5kLCAqc3RhcnQ7CisgICAgaW50IHJldDsKKworICAg IGlmIChzaXplIDwgNikgeworICAgICAgICAvKiBXZSBjYW4ndCB3cml0ZSBhIHZhbGlkIHZ2Y2Mg ZnJvbSB0aGUgcHJvdmlkZWQgZGF0YSAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICB9IGVsc2UgaWYgKCpkYXRhID09IDEpIHsKKyAgICAgICAgLyogRGF0YSBpcyBh bHJlYWR5IHZ2Y2MtZm9ybWF0dGVkICovCisgICAgICAgIGF2aW9fd3JpdGUocGIsIGRhdGEsIHNp emUpOworICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgaWYgKCEoQVZfUkIyNChkYXRhKSA9 PSAxIHx8IEFWX1JCMzIoZGF0YSkgPT0gMSkpIHsKKyAgICAgICAgLyogTm90IGEgdmFsaWQgQW5u ZXggQiBzdGFydCBjb2RlIHByZWZpeCAqLworICAgICAgICByZXR1cm4gQVZFUlJPUl9JTlZBTElE REFUQTsKKyAgICB9CisKKyAgICByZXQgPSBmZl9hdmNfcGFyc2VfbmFsX3VuaXRzX2J1ZihkYXRh LCAmc3RhcnQsICZzaXplKTsKKyAgICBpZiAocmV0IDwgMCkKKyAgICAgICAgcmV0dXJuIHJldDsK KworICAgIHZ2Y2NfaW5pdCgmdnZjYyk7CisKKyAgICBidWYgPSBzdGFydDsKKyAgICBlbmQgPSBz dGFydCArIHNpemU7CisKKyAgICB3aGlsZSAoZW5kIC0gYnVmID4gNCkgeworICAgICAgICB1aW50 MzJfdCBsZW4gPSBGRk1JTihBVl9SQjMyKGJ1ZiksIGVuZCAtIGJ1ZiAtIDQpOworICAgICAgICB1 aW50OF90IHR5cGUgPSAoYnVmWzVdID4+IDMpOworCisgICAgICAgIGJ1ZiArPSA0OworCisgICAg ICAgIHN3aXRjaCAodHlwZSkgeworICAgICAgICBjYXNlIFZWQ19PUElfTlVUOgorICAgICAgICBj YXNlIFZWQ19WUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19TUFNfTlVUOgorICAgICAgICBjYXNl IFZWQ19QUFNfTlVUOgorICAgICAgICBjYXNlIFZWQ19QUkVGSVhfU0VJX05VVDoKKyAgICAgICAg Y2FzZSBWVkNfU1VGRklYX1NFSV9OVVQ6CisgICAgICAgICAgICByZXQgPSB2dmNjX2FkZF9uYWxf dW5pdChidWYsIGxlbiwgcHNfYXJyYXlfY29tcGxldGVuZXNzLCAmdnZjYyk7CisgICAgICAgICAg ICBpZiAocmV0IDwgMCkKKyAgICAgICAgICAgICAgICBnb3RvIGVuZDsKKyAgICAgICAgICAgIGJy ZWFrOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKwor ICAgICAgICBidWYgKz0gbGVuOworICAgIH0KKworICAgIHJldCA9IHZ2Y2Nfd3JpdGUocGIsICZ2 dmNjKTsKKworICBlbmQ6CisgICAgdnZjY19jbG9zZSgmdnZjYyk7CisgICAgYXZfZnJlZShzdGFy dCk7CisgICAgcmV0dXJuIHJldDsKK30KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2gyNjYuaCBi L2xpYmF2Zm9ybWF0L2gyNjYuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw Li5mNTgxNDVlNGFlCi0tLSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvaDI2Ni5oCkBAIC0w LDAgKzEsOTkgQEAKKy8qCisgKiBILjI2NiAvIFZWQyBoZWxwZXIgZnVuY3Rpb25zIGZvciBtdXhl cnMKKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFydCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlz IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5 IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0 aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkg b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVz c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ug c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi bGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG cmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp ZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBCisgKi8KKworLyoqCisgKiBAZmls ZQorICogaW50ZXJuYWwgaGVhZGVyIGZvciBILjI2Ni9WVkMgKGRlKW11eGVyIHV0aWxpdGllcwor ICovCisKKyNpZm5kZWYgQVZGT1JNQVRfSDI2Nl9ICisjZGVmaW5lIEFWRk9STUFUX0gyNjZfSAor CisjaW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSAiYXZpby5oIgorCisvKioKKyAqIFdyaXRl cyBBbm5leCBCIGZvcm1hdHRlZCBILjI2Ni9WVkMgTkFMIHVuaXRzIHRvIHRoZSBwcm92aWRlZCBB VklPQ29udGV4dC4KKyAqCisgKiBUaGUgTkFMIHVuaXRzIGFyZSBjb252ZXJ0ZWQgdG8gYW4gTVA0 LWNvbXBhdGlibGUgZm9ybWF0IChzdGFydCBjb2RlIHByZWZpeGVzCisgKiBhcmUgcmVwbGFjZWQg YnkgNC1ieXRlIHNpemUgZmllbGRzLCBhcyBwZXIgSVNPL0lFQyAxNDQ5Ni0xNSkuCisgKgorICog SWYgZmlsdGVyX3BzIGlzIG5vbi16ZXJvLCBhbnkgVlZDIHBhcmFtZXRlciBzZXRzIGZvdW5kIGlu IHRoZSBpbnB1dCB3aWxsIGJlCisgKiBkaXNjYXJkZWQsIGFuZCAqcHNfY291bnQgd2lsbCBiZSBz ZXQgdG8gdGhlIG51bWJlciBvZiBkaXNjYXJkZWQgUFMgTkFMIHVuaXRzLgorICoKKyAqIEBwYXJh bSBwYiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgZGF0YSBzaGFsbCBiZSB3 cml0dGVuCisgKiBAcGFyYW0gYnVmX2luIGFkZHJlc3Mgb2YgdGhlIGJ1ZmZlciBob2xkaW5nIHRo ZSBpbnB1dCBkYXRhCisgKiBAcGFyYW0gc2l6ZSBzaXplIChpbiBieXRlcykgb2YgdGhlIGlucHV0 IGJ1ZmZlcgorICogQHBhcmFtIGZpbHRlcl9wcyB3aGV0aGVyIHRvIHdyaXRlIHBhcmFtZXRlciBz ZXQgTkFMIHVuaXRzIHRvIHRoZSBvdXRwdXQgKDApCisgKiAgICAgICAgb3IgdG8gZGlzY2FyZCB0 aGVtIChub24temVybykKKyAqIEBwYXJhbSBwc19jb3VudCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJs ZSB3aGVyZSB0aGUgbnVtYmVyIG9mIGRpc2NhcmRlZAorICogICAgICAgIHBhcmFtZXRlciBzZXQg TkFMIHVuaXRzIHNoYWxsIGJlIHdyaXR0ZW4sIG1heSBiZSBOVUxMCisgKiBAcmV0dXJuIHRoZSBh bW91bnQgKGluIGJ5dGVzKSBvZiBkYXRhIHdyaXR0ZW4gaW4gY2FzZSBvZiBzdWNjZXNzLCBhIG5l Z2F0aXZlCisgKiAgICAgICAgIHZhbHVlIGNvcnJlc3BvbmRpbmcgdG8gYW4gQVZFUlJPUiBjb2Rl IGluIGNhc2Ugb2YgZmFpbHVyZQorICovCitpbnQgZmZfaDI2Nl9hbm5leGIybXA0KEFWSU9Db250 ZXh0ICpwYiwgY29uc3QgdWludDhfdCAqYnVmX2luLAorICAgICAgICAgICAgICAgICAgICAgIGlu dCBzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2NvdW50KTsKKworLyoqCisgKiBXcml0ZXMg QW5uZXggQiBmb3JtYXR0ZWQgSC4yNjYvVlZDIE5BTCB1bml0cyB0byBhIGRhdGEgYnVmZmVyLgor ICoKKyAqIFRoZSBOQUwgdW5pdHMgYXJlIGNvbnZlcnRlZCB0byBhbiBNUDQtY29tcGF0aWJsZSBm b3JtYXQgKHN0YXJ0IGNvZGUgcHJlZml4ZXMKKyAqIGFyZSByZXBsYWNlZCBieSA0LWJ5dGUgc2l6 ZSBmaWVsZHMsIGFzIHBlciBJU08vSUVDIDE0NDk2LTE1KS4KKyAqCisgKiBJZiBmaWx0ZXJfcHMg aXMgbm9uLXplcm8sIGFueSBWVkMgcGFyYW1ldGVyIHNldHMgZm91bmQgaW4gdGhlIGlucHV0IHdp bGwgYmUKKyAqIGRpc2NhcmRlZCwgYW5kICpwc19jb3VudCB3aWxsIGJlIHNldCB0byB0aGUgbnVt YmVyIG9mIGRpc2NhcmRlZCBQUyBOQUwgdW5pdHMuCisgKgorICogT24gc3VjY2VzcywgKnNpemUg aG9sZHMgdGhlIHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgb3V0cHV0IGRhdGEgYnVmZmVyLgorICoK KyAqIEBwYXJhbSBidWZfaW4gYWRkcmVzcyBvZiB0aGUgYnVmZmVyIGhvbGRpbmcgdGhlIGlucHV0 IGRhdGEKKyAqIEBwYXJhbSBzaXplIGFkZHJlc3Mgb2YgdGhlIHZhcmlhYmxlIGhvbGRpbmcgdGhl IHNpemUgKGluIGJ5dGVzKSBvZiB0aGUgaW5wdXQKKyAqICAgICAgICBidWZmZXIgKG9uIGlucHV0 KSBhbmQgb2YgdGhlIG91dHB1dCBidWZmZXIgKG9uIHN1Y2Nlc3MpCisgKiBAcGFyYW0gYnVmX291 dCBvbiBzdWNjZXNzLCBhZGRyZXNzIG9mIHRoZSB2YXJpYWJsZSBob2xkaW5nIHRoZSBhZGRyZXNz IG9mCisgKiAgICAgICAgdGhlIG91dHB1dCBidWZmZXIKKyAqIEBwYXJhbSBmaWx0ZXJfcHMgd2hl dGhlciB0byB3cml0ZSBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyB0byB0aGUgb3V0cHV0ICgwKQor ICogICAgICAgIG9yIHRvIGRpc2NhcmQgdGhlbSAobm9uLXplcm8pCisgKiBAcGFyYW0gcHNfY291 bnQgYWRkcmVzcyBvZiB0aGUgdmFyaWFibGUgd2hlcmUgdGhlIG51bWJlciBvZiBkaXNjYXJkZWQK KyAqICAgICAgICBwYXJhbWV0ZXIgc2V0IE5BTCB1bml0cyBzaGFsbCBiZSB3cml0dGVuLCBtYXkg YmUgTlVMTAorICogQHJldHVybiAwIGluIGNhc2Ugb2Ygc3VjY2VzcywgYSBuZWdhdGl2ZSB2YWx1 ZSBjb3JyZXNwb25kaW5nIHRvIGFuIEFWRVJST1IKKyAqICAgICAgICAgY29kZSBpbiBjYXNlIG9m IGZhaWx1cmUKKyAqIEBub3RlICpidWZfb3V0IHdpbGwgYmUgdHJlYXRlZCBhcyB1bmluaXRpYWxp emVkIG9uIGlucHV0IGFuZCB3b24ndCBiZSBmcmVlZC4KKyAqLworaW50IGZmX2gyNjZfYW5uZXhi Mm1wNF9idWYoY29uc3QgdWludDhfdCAqYnVmX2luLCB1aW50OF90ICoqYnVmX291dCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50ICpzaXplLCBpbnQgZmlsdGVyX3BzLCBpbnQgKnBzX2Nv dW50KTsKKworLyoqCisgKiBXcml0ZXMgSC4yNjYvVlZDIGV4dHJhZGF0YSAocGFyYW1ldGVyIHNl dHMsIGRlY2xhcmF0aXZlIFNFSSBOQUwgdW5pdHMpIHRvCisgKiB0aGUgcHJvdmlkZWQgQVZJT0Nv bnRleHQuCisgKgorICogSWYgdGhlIGV4dHJhZGF0YSBpcyBBbm5leCBCIGZvcm1hdCwgaXQgZ2V0 cyBjb252ZXJ0ZWQgdG8gdnZjQyBmb3JtYXQgYmVmb3JlCisgKiB3cml0aW5nLgorICoKKyAqIEBw YXJhbSBwYiBhZGRyZXNzIG9mIHRoZSBBVklPQ29udGV4dCB3aGVyZSB0aGUgdnZjQyBzaGFsbCBi ZSB3cml0dGVuCisgKiBAcGFyYW0gZGF0YSBhZGRyZXNzIG9mIHRoZSBidWZmZXIgaG9sZGluZyB0 aGUgZGF0YSBuZWVkZWQgdG8gd3JpdGUgdGhlIHZ2Y0MKKyAqIEBwYXJhbSBzaXplIHNpemUgKGlu IGJ5dGVzKSBvZiB0aGUgZGF0YSBidWZmZXIKKyAqIEBwYXJhbSBwc19hcnJheV9jb21wbGV0ZW5l c3Mgd2hldGhlciBhbGwgcGFyYW1ldGVyIHNldHMgYXJlIGluIHRoZSB2dmNDICgxKQorICogICAg ICAgIG9yIHRoZXJlIG1heSBiZSBhZGRpdGlvbmFsIHBhcmFtZXRlciBzZXRzIGluIHRoZSBiaXRz dHJlYW0gKDApCisgKiBAcmV0dXJuID49MCBpbiBjYXNlIG9mIHN1Y2Nlc3MsIGEgbmVnYXRpdmUg dmFsdWUgY29ycmVzcG9uZGluZyB0byBhbiBBVkVSUk9SCisgKiAgICAgICAgIGNvZGUgaW4gY2Fz ZSBvZiBmYWlsdXJlCisgKi8KK2ludCBmZl9pc29tX3dyaXRlX3Z2Y2MoQVZJT0NvbnRleHQgKnBi LCBjb25zdCB1aW50OF90ICpkYXRhLAorICAgICAgICAgICAgICAgICAgICAgICBpbnQgc2l6ZSwg aW50IHBzX2FycmF5X2NvbXBsZXRlbmVzcyk7CisKKyNlbmRpZiAvKiBBVkZPUk1BVF9IMjY2X0gg Ki8KZGlmZiAtLWdpdCBhL2xpYmF2Zm9ybWF0L2gyNjZkZWMuYyBiL2xpYmF2Zm9ybWF0L2gyNjZk ZWMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5kYmRhNGI4NjhhCi0t LSAvZGV2L251bGwKKysrIGIvbGliYXZmb3JtYXQvaDI2NmRlYy5jCkBAIC0wLDAgKzEsNjEgQEAK Ky8qCisgKiBSQVcgSC4yNjYgLyBWVkMgdmlkZW8gZGVtdXhlcgorICogQ29weXJpZ2h0IChjKSAy MDIwIE51byBNaSA8bnVvbWkyMDIxQGdtYWlsLmNvbT4KKyAqCisgKiBUaGlzIGZpbGUgaXMgcGFy dCBvZiBGRm1wZWcuCisgKgorICogRkZtcGVnIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk aXN0cmlidXRlIGl0IGFuZC9vcgorICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUg TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBG Rm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5 IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFsb25nIHdpdGgg RkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiBGb3VuZGF0aW9u LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEw LTEzMDEgVVNBCisgKi8KKworI2luY2x1ZGUgImxpYmF2Y29kZWMvaDI2Ni5oIgorCisjaW5jbHVk ZSAiYXZmb3JtYXQuaCIKKyNpbmNsdWRlICJyYXdkZWMuaCIKKworc3RhdGljIGludCBoMjY2X3By b2JlKGNvbnN0IEFWUHJvYmVEYXRhICpwKQoreworICAgIHVpbnQzMl90IGNvZGUgPSAtMTsKKyAg ICBpbnQgc3BzID0gMCwgcHBzID0gMCwgaXJhcCA9IDA7CisgICAgaW50IGk7CisKKyAgICBmb3Ig KGkgPSAwOyBpIDwgcC0+YnVmX3NpemUgLSAxOyBpKyspIHsKKyAgICAgICAgY29kZSA9IChjb2Rl IDw8IDgpICsgcC0+YnVmW2ldOworICAgICAgICBpZiAoKGNvZGUgJiAweGZmZmZmZjAwKSA9PSAw eDEwMCkgeworICAgICAgICAgICAgdWludDhfdCBuYWwyID0gcC0+YnVmW2kgKyAxXTsKKyAgICAg ICAgICAgIGludCB0eXBlID0gKG5hbDIgJiAweEY4KSA+PiAzOworCisgICAgICAgICAgICBpZiAo Y29kZSAmIDB4ODApIC8vIGZvcmJpZGRlbl96ZXJvX2JpdAorICAgICAgICAgICAgICAgIHJldHVy biAwOworCisgICAgICAgICAgICBpZiAoKG5hbDIgJiAweDcpID09IDApIC8vIG51aF90ZW1wb3Jh bF9pZF9wbHVzMQorICAgICAgICAgICAgICAgIHJldHVybiAwOworCisgICAgICAgICAgICBzd2l0 Y2ggKHR5cGUpIHsKKyAgICAgICAgICAgIGNhc2UgVlZDX1NQU19OVVQ6ICAgICAgIHNwcysrOyAg YnJlYWs7CisgICAgICAgICAgICBjYXNlIFZWQ19QUFNfTlVUOiAgICAgICBwcHMrKzsgIGJyZWFr OworICAgICAgICAgICAgY2FzZSBWVkNfSURSX05fTFA6CisgICAgICAgICAgICBjYXNlIFZWQ19J RFJfV19SQURMOgorICAgICAgICAgICAgY2FzZSBWVkNfQ1JBX05VVDoKKyAgICAgICAgICAgIGNh c2UgVlZDX0dEUl9OVVQ6ICAgICAgIGlyYXArKzsgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg ICAgIH0KKyAgICB9CisKKyAgICBpZiAoc3BzICYmIHBwcyAmJiBpcmFwKQorICAgICAgICByZXR1 cm4gQVZQUk9CRV9TQ09SRV9FWFRFTlNJT04gKyAxOyAvLyAxIG1vcmUgdGhhbiAubXBnCisgICAg cmV0dXJuIDA7Cit9CisKK0ZGX0RFRl9SQVdWSURFT19ERU1VWEVSKGgyNjYsICJyYXcgSC4yNjYv VlZDIHZpZGVvIiwgaDI2Nl9wcm9iZSwgImgyNjYsMjY2LHZ2YyIsIEFWX0NPREVDX0lEX1ZWQykK LS0gCjIuMjUuMQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X18KZmZtcGVnLWRldmVsIG1haWxpbmcgbGlzdApmZm1wZWctZGV2ZWxAZmZtcGVnLm9yZwpodHRw czovL2ZmbXBlZy5vcmcvbWFpbG1hbi9saXN0aW5mby9mZm1wZWctZGV2ZWwKClRvIHVuc3Vic2Ny aWJlLCB2aXNpdCBsaW5rIGFib3ZlLCBvciBlbWFpbApmZm1wZWctZGV2ZWwtcmVxdWVzdEBmZm1w ZWcub3JnIHdpdGggc3ViamVjdCAidW5zdWJzY3JpYmUiLgo=