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 2DFA3403CA for ; Wed, 20 Apr 2022 09:54:36 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 2BBCB68B3DE; Wed, 20 Apr 2022 12:54:33 +0300 (EEST) Received: from mailout1.w1.samsung.com (mailout1.w1.samsung.com [210.118.77.11]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 4213268B3AA for ; Wed, 20 Apr 2022 12:54:26 +0300 (EEST) Received: from eucas1p1.samsung.com (unknown [182.198.249.206]) by mailout1.w1.samsung.com (KnoxPortal) with ESMTP id 20220420095424euoutp0115994f08c2a5ba4b41b88e7617f582aa~nkiJrkWzF2813228132euoutp013 for ; Wed, 20 Apr 2022 09:54:24 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20220420095424euoutp0115994f08c2a5ba4b41b88e7617f582aa~nkiJrkWzF2813228132euoutp013 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1650448465; bh=cT+7u/e9V8z88rpb+PQm3jsh6ogkorj6ehww/XKSEwg=; h=From:To:Subject:Date:References:From; b=JTgkm4csA1kJj9OVCT7KXIRt8CMuLhi5elLwyeZCv3tVRnURxuMukAscM1vIOrYFT OsZLFWYg9v6luw+V6YhpAZcUKThrpkZK/up7b2hftpSCg+xQzVqN2Qk/00vKjcIBcp 40P4MIuXKP1fCUXTyJRCrrfN9nyblqzIDpQQaKhU= Received: from eusmges3new.samsung.com (unknown [203.254.199.245]) by eucas1p1.samsung.com (KnoxPortal) with ESMTP id 20220420095424eucas1p163d7e1b4e3477ae2f302b39b14ae8683~nkiJXK-v11517915179eucas1p1d for ; Wed, 20 Apr 2022 09:54:24 +0000 (GMT) Received: from eucas1p2.samsung.com ( [182.198.249.207]) by eusmges3new.samsung.com (EUCPMTA) with SMTP id B8.BA.10260.058DF526; Wed, 20 Apr 2022 10:54:24 +0100 (BST) Received: from eusmtrp1.samsung.com (unknown [182.198.249.138]) by eucas1p1.samsung.com (KnoxPortal) with ESMTPA id 20220420095424eucas1p13b9dc5cacc7b763a05ac32ca25b14e69~nkiI8o9tw1106711067eucas1p1w for ; Wed, 20 Apr 2022 09:54:24 +0000 (GMT) Received: from eusmgms2.samsung.com (unknown [182.198.249.180]) by eusmtrp1.samsung.com (KnoxPortal) with ESMTP id 20220420095424eusmtrp1442a150eccff8233ead10e0fcde47a6d~nkiI79fPU3040230402eusmtrp1C for ; Wed, 20 Apr 2022 09:54:24 +0000 (GMT) X-AuditID: cbfec7f5-bddff70000002814-c5-625fd8509574 Received: from eusmtip2.samsung.com ( [203.254.199.222]) by eusmgms2.samsung.com (EUCPMTA) with SMTP id 4C.54.09404.058DF526; Wed, 20 Apr 2022 10:54:24 +0100 (BST) Received: from AMDN3260 (unknown [106.210.132.171]) by eusmtip2.samsung.com (KnoxPortal) with ESMTPA id 20220420095423eusmtip21a21e6dd0560177166a7a231f3b905fa~nkiIhjOyW2497824978eusmtip2H for ; Wed, 20 Apr 2022 09:54:23 +0000 (GMT) From: "Dawid Kozinski" To: Date: Wed, 20 Apr 2022 11:54:23 +0200 Message-ID: <004b01d8549c$9d4e10c0$d7ea3240$@samsung.com> MIME-Version: 1.0 X-Mailer: Microsoft Outlook 16.0 Thread-Index: AdhUmHRG21djPLYiTp2H7hro6YaHjg== Content-Language: pl X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrNIsWRmVeSWpSXmKPExsWy7djP87oBN+KTDJ7dULD49ukMswOjx59F m1kCGKO4bFJSczLLUov07RK4MrZ++sFSsOc3R8Wn7b/YGhinXuXoYuTkkBAwkZh6ZTdLFyMX h5DACkaJ5g/3GCGcSUwSZzZeZ4NwJjJJXDq8hRmmZfGUFnaIxHJGiXdL70P1tzFJ7D7UAFbF JqAvMXPRJzYQW0RAVmL1vylgtrBAqMS1eavAbBYBVYmFq76A2bwClhLHnh1hh7AFJU7OfMIC YjMLaEssW/gaarOCxM+ny1ghZupJTHi7lQ2iRkTixqMWsLslBL6yS+x7MYsNosFF4t3Rbihb WOLV8S3sELaMxOnJPUALOIDsYolD/Q4QZo3EoR/pEBXWEm8bjzOChJkFNCXW79KHCDtK3Lnw ixmimk/ixltBiAP4JCZtmw4V5pXoaBOCMFUk+jrFIBqlJJ4umwP1hofEoj2b2ScwKs5C8u0s JN/OQvLVLIQTFjCyrGIUTy0tzk1PLTbOSy3XK07MLS7NS9dLzs/dxAhMD6f/Hf+6g3HFq496 hxiZOBgPMUpwMCuJ8IbOjE8S4k1JrKxKLcqPLyrNSS0+xCjNwaIkzpucuSFRSCA9sSQ1OzW1 ILUIJsvEwSnVwLRdgzMjcP6NJ2JpGiqrlLi9pSXuFLZ9PWtvevT3zqMFC+9pxCsc2rY/avLC Va+Pf0vacZ7jNU+tV9Slhodbd924E7Y+vE7qf2fyh7vbq223xkxtf6J/j+WVv821JJaV2R67 npyUmbX/x6XHmUf+1XIU8Kusv1N3uLL8SMadtf7Kulr81vfr7zxlCJl7s/Pgn0nPeP0Tb86N S01J4FylK+ci9ck++93CKZUOhRwZbxgPm21NUWWSLnn58wVnW8G32DCNq/25tzs+22Y3NllN i2ycV3c84D9rzsmggwc8N0Wp8R2fU9l2qn3zvEnL/1pUWx3o12m7FhCbPXNhi2pK3q0aoxUb PZ5ePNP4RGzxJD8lluKMREMt5qLiRABr+TROfgMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFnrJLMWRmVeSWpSXmKPExsVy+t/xe7oBN+KTDPY1slh8+3SG2YHR48+i zSwBjFF6NkX5pSWpChn5xSW2StGGFkZ6hpYWekYmlnqGxuaxVkamSvp2NimpOZllqUX6dgl6 GeseL2Mt+HCateLBqn72BsbjrSxdjJwcEgImEountLB3MXJxCAksZZRYte4pI0RCSmLp0kVQ trDEn2tdbBBFLUwSH1fMYwdJsAnoS8xc9IkNxBYRkJVY/W8KmC0sECzxrOUGM4jNIqAqsXDV F7A4r4ClxLFnR9ghbEGJkzOfgF3BLKAt8fTmUzh72cLXzBCLFSR+Pl3GCjFfT2LC261sEDUi EjcetTBOYBSYhWTULCSjZiEZNQtJywJGllWMIqmlxbnpucVGesWJucWleel6yfm5mxiBYb7t 2M8tOxhXvvqod4iRiYPxEKMEB7OSCG/ozPgkId6UxMqq1KL8+KLSnNTiQ4ymQL9NZJYSTc4H RlpeSbyhmYGpoYmZpYGppZmxkjivZ0FHopBAemJJanZqakFqEUwfEwenVAPT6pMvQ1/N/sDy +/WBoA3MWw6XhdxpCRErZWhYvP+SgOvuJ82/LDb/DPwpsMON5fOt1U9l59pnFucUJXfLzpz5 9USQpdWtoCMv3/HsX1BiNpt15fukvthDNUqJzU6+0dYfbh1Ptl4Vt+cO06tnqR+KVfOMjTOe Ky3mtLy9ndXtTuSp2vR23rOKsnuu6fPs/Hpqs9Tch1/eLvB54z61JuCR2NO46pjlH68XyUhc 1tt/7qGXW8mO2Q1Z7idWLfd9sDI2XyhGK/syo+WiwLfxbLo7Xq9zOvtkrV8b59aCU/cTszut FvwueH+2NWQjP9/v+xcdDs33L+t6duIbk+Y+puMvP5o0Tdn2v6IydatN4eHs60osxRmJhlrM RcWJAMGGKmf8AgAA X-CMS-MailID: 20220420095424eucas1p13b9dc5cacc7b763a05ac32ca25b14e69 X-Msg-Generator: CA X-RootMTR: 20220420095424eucas1p13b9dc5cacc7b763a05ac32ca25b14e69 X-EPHeader: CA CMS-TYPE: 201P X-CMS-RootMailID: 20220420095424eucas1p13b9dc5cacc7b763a05ac32ca25b14e69 References: Subject: [FFmpeg-devel] [PATCH 2/3] Provided support for MPEG-5 EVC (Essential Video Coding) codec 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: LSBBZGRlZCB4ZXZlIGVuY29kZXIgd3JhcHBlcgotIEFkZGVkIHhldmQgZGVuY29kZXIgd3JhcHBl cgotIEFkZGVkIGRvY3VtZW50YXRpb24gZm9yIHhldmUgYW5kIHhldmQgd3JhcHBlcnMKLSBBZGRl ZCBwYXJzZXIgZm9yIEVWQyBmb3JtYXQKLSBDaGFuZ2VzIGluIHByb2plY3QgY29uZmlndXJhdGlv biBmaWxlIGFuZCBsaWJhdmNvZGVjIE1ha2VmaWxlCgpTaWduZWQtb2ZmLWJ5OiBEYXdpZCBLb3pp bnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4KLS0tCiBjb25maWd1cmUgICAgICAgICAgICAg ICAgIHwgICAxMCArCiBkb2MvZGVjb2RlcnMudGV4aSAgICAgICAgIHwgICAyMyArCiBkb2MvZW5j b2RlcnMudGV4aSAgICAgICAgIHwgIDExMiArKysrCiBkb2MvZ2VuZXJhbF9jb250ZW50cy50ZXhp IHwgICAxOSArCiBsaWJhdmNvZGVjL01ha2VmaWxlICAgICAgIHwgICAgMyArCiBsaWJhdmNvZGVj L2FsbGNvZGVjcy5jICAgIHwgICAgMiArCiBsaWJhdmNvZGVjL2F2Y29kZWMuaCAgICAgIHwgICAg MyArCiBsaWJhdmNvZGVjL2V2Y19wYXJzZXIuYyAgIHwgIDUxNCArKysrKysrKysrKysrKysrKwog bGliYXZjb2RlYy9saWJ4ZXZkLmMgICAgICB8ICA0NDMgKysrKysrKysrKysrKysrCiBsaWJhdmNv ZGVjL2xpYnhldmUuYyAgICAgIHwgMTEzOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiBsaWJhdmNvZGVjL3BhcnNlcnMuYyAgICAgIHwgICAgMSArCiAxMSBmaWxlcyBjaGFu Z2VkLCAyMjY5IGluc2VydGlvbnMoKykKIGNyZWF0ZSBtb2RlIDEwMDY0NCBsaWJhdmNvZGVjL2V2 Y19wYXJzZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IGxpYmF2Y29kZWMvbGlieGV2ZC5jCiBjcmVh dGUgbW9kZSAxMDA2NDQgbGliYXZjb2RlYy9saWJ4ZXZlLmMKCmRpZmYgLS1naXQgYS9jb25maWd1 cmUgYi9jb25maWd1cmUKaW5kZXggN2E2MmYwYzI0OC4uZWYzYjNjZmMxZCAxMDA3NTUKLS0tIGEv Y29uZmlndXJlCisrKyBiL2NvbmZpZ3VyZQpAQCAtMjg5LDYgKzI4OSw4IEBAIEV4dGVybmFsIGxp YnJhcnkgc3VwcG9ydDoKICAgLS1lbmFibGUtbGlid2VicCAgICAgICAgIGVuYWJsZSBXZWJQIGVu Y29kaW5nIHZpYSBsaWJ3ZWJwIFtub10KICAgLS1lbmFibGUtbGlieDI2NCAgICAgICAgIGVuYWJs ZSBILjI2NCBlbmNvZGluZyB2aWEgeDI2NCBbbm9dCiAgIC0tZW5hYmxlLWxpYngyNjUgICAgICAg ICBlbmFibGUgSEVWQyBlbmNvZGluZyB2aWEgeDI2NSBbbm9dCisgIC0tZW5hYmxlLWxpYnhldmUg ICAgICAgICBlbmFibGUgTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVWQykgZW5jb2Rp bmcgdmlhIGxpYnhldmUgW25vXQorICAtLWVuYWJsZS1saWJ4ZXZkICAgICAgICAgZW5hYmxlIE1Q RUctNSBFc3NlbnRpYWwgVmlkZW8gQ29kaW5nIChFVkMpIGRlY29kaW5nIHZpYSBsaWJ4ZXZkIFtu b10KICAgLS1lbmFibGUtbGlieGF2cyAgICAgICAgIGVuYWJsZSBBVlMgZW5jb2RpbmcgdmlhIHhh dnMgW25vXQogICAtLWVuYWJsZS1saWJ4YXZzMiAgICAgICAgZW5hYmxlIEFWUzIgZW5jb2Rpbmcg dmlhIHhhdnMyIFtub10KICAgLS1lbmFibGUtbGlieGNiICAgICAgICAgIGVuYWJsZSBYMTEgZ3Jh YmJpbmcgdXNpbmcgWENCIFthdXRvZGV0ZWN0XQpAQCAtMTg4MCw2ICsxODgyLDggQEAgRVhURVJO QUxfTElCUkFSWV9MSVNUPSIKICAgICBvcGVuc3NsCiAgICAgcG9ja2V0c3BoaW54CiAgICAgdmFw b3Vyc3ludGgKKyAgICBsaWJ4ZXZlCisgICAgbGlieGV2ZAogIgogCiBIV0FDQ0VMX0FVVE9ERVRF Q1RfTElCUkFSWV9MSVNUPSIKQEAgLTI0NTMsNiArMjQ1Nyw3IEBAIENPTkZJR19FWFRSQT0iCiAg ICAgaDI2NHByZWQKICAgICBoMjY0cXBlbAogICAgIGhldmNwYXJzZQorICAgIGV2Y3BhcnNlCiAg ICAgaHBlbGRzcAogICAgIGh1ZmZtYW4KICAgICBodWZmeXV2ZHNwCkBAIC0zMjUyLDYgKzMyNTcs NyBAQCBtcGVnYXVkaW9fcGFyc2VyX3NlbGVjdD0ibXBlZ2F1ZGlvaGVhZGVyIgogbXBlZ3ZpZGVv X3BhcnNlcl9zZWxlY3Q9Im1wZWd2aWRlbyIKIG1wZWc0dmlkZW9fcGFyc2VyX3NlbGVjdD0iaDI2 M2RzcCBtcGVndmlkZW8gcXBlbGRzcCIKIHZjMV9wYXJzZXJfc2VsZWN0PSJ2YzFkc3AiCitldmNf cGFyc2VyX3NlbGVjdD0iZXZjcGFyc2UiCiAKICMgYml0c3RyZWFtX2ZpbHRlcnMKIGFhY19hZHRz dG9hc2NfYnNmX3NlbGVjdD0iYWR0c19oZWFkZXIgbXBlZzRhdWRpbyIKQEAgLTMzNzcsNiArMzM4 Myw4IEBAIGxpYngyNjRfZW5jb2Rlcl9zZWxlY3Q9ImF0c2NfYTUzIgogbGlieDI2NHJnYl9lbmNv ZGVyX2RlcHM9ImxpYngyNjQiCiBsaWJ4MjY0cmdiX2VuY29kZXJfc2VsZWN0PSJsaWJ4MjY0X2Vu Y29kZXIiCiBsaWJ4MjY1X2VuY29kZXJfZGVwcz0ibGlieDI2NSIKK2xpYnhldmVfZW5jb2Rlcl9k ZXBzPSJsaWJ4ZXZlIgorbGlieGV2ZF9kZWNvZGVyX2RlcHM9ImxpYnhldmQiCiBsaWJ4YXZzX2Vu Y29kZXJfZGVwcz0ibGlieGF2cyIKIGxpYnhhdnMyX2VuY29kZXJfZGVwcz0ibGlieGF2czIiCiBs aWJ4dmlkX2VuY29kZXJfZGVwcz0ibGlieHZpZCIKQEAgLTY2NTksNiArNjY2Nyw4IEBAIGVuYWJs ZWQgbGlieDI2NCAgICAgICAgICAgJiYgeyBjaGVja19wa2dfY29uZmlnIGxpYngyNjQgeDI2NCAi c3RkaW50LmggeDI2NC5oIiB4CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrX2Nw cF9jb25kaXRpb24gbGlieDI2MiB4MjY0LmggIlgyNjRfTVBFRzIiCiBlbmFibGVkIGxpYngyNjUg ICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4MjY1IHgyNjUgeDI2NS5oIHgyNjVf YXBpX2dldCAmJgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXF1aXJlX2NwcF9jb25k aXRpb24gbGlieDI2NSB4MjY1LmggIlgyNjVfQlVJTEQgPj0gNzAiCitlbmFibGVkIGxpYnhldmUg ICAgICAgICAgICYmIHJlcXVpcmVfcGtnX2NvbmZpZyBsaWJ4ZXZlICJ4ZXZlID49IDEuMC4wIiAi eGV2ZS5oIiB4ZXZlX2VuY29kZQorZW5hYmxlZCBsaWJ4ZXZkICAgICAgICAgICAmJiByZXF1aXJl X3BrZ19jb25maWcgbGlieGV2ZCAieGV2ZCA+PSAxLjAuMCIgInhldmQuaCIgeGV2ZF9kZWNvZGUK IGVuYWJsZWQgbGlieGF2cyAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4YXZzICJzdGRpbnQuaCB4 YXZzLmgiIHhhdnNfZW5jb2Rlcl9lbmNvZGUgIi1seGF2cyAkcHRocmVhZHNfZXh0cmFsaWJzICRs aWJtX2V4dHJhbGlicyIKIGVuYWJsZWQgbGlieGF2czIgICAgICAgICAgJiYgcmVxdWlyZV9wa2df Y29uZmlnIGxpYnhhdnMyICJ4YXZzMiA+PSAxLjMuMCIgInN0ZGludC5oIHhhdnMyLmgiIHhhdnMy X2FwaV9nZXQKIGVuYWJsZWQgbGlieHZpZCAgICAgICAgICAgJiYgcmVxdWlyZSBsaWJ4dmlkIHh2 aWQuaCB4dmlkX2dsb2JhbCAtbHh2aWRjb3JlCmRpZmYgLS1naXQgYS9kb2MvZGVjb2RlcnMudGV4 aSBiL2RvYy9kZWNvZGVycy50ZXhpCmluZGV4IDQ5YWI3MzVkY2UuLjkyNzdlMjBiZTkgMTAwNjQ0 Ci0tLSBhL2RvYy9kZWNvZGVycy50ZXhpCisrKyBiL2RvYy9kZWNvZGVycy50ZXhpCkBAIC0xMjYs NiArMTI2LDI5IEBAIFNldCBhbW91bnQgb2YgZnJhbWUgdGhyZWFkcyB0byB1c2UgZHVyaW5nIGRl Y29kaW5nLiBUaGUgZGVmYXVsdCB2YWx1ZSBpcyAwIChhdXRvCiAKIEBlbmQgdGFibGUKIAorQHNl Y3Rpb24gbGlieGV2ZAorCitlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBEZWNvZGVyIChYRVZE KSBNUEVHLTUgRVZDIGRlY29kZXIgd3JhcHBlci4KKworVGhpcyBkZWNvZGVyIHJlcXVpcmVzIHRo ZSBwcmVzZW5jZSBvZiB0aGUgbGlieGV2ZCBoZWFkZXJzIGFuZCBsaWJyYXJ5CitkdXJpbmcgY29u ZmlndXJhdGlvbi4gWW91IG5lZWQgdG8gZXhwbGljaXRseSBjb25maWd1cmUgdGhlIGJ1aWxkIHdp dGgKK0BvcHRpb257LS1lbmFibGUtbGlieGV2ZH0uCisKK1RoZSB4ZXZkIHByb2plY3Qgd2Vic2l0 ZSBpcyBhdCBAdXJse2h0dHBzOi8vZ2l0aHViLmNvbS9tcGVnNS94ZXZkfS4KKworQHN1YnNlY3Rp b24gT3B0aW9ucworCitUaGUgZm9sbG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUg bGlieGV2ZCB3cmFwcGVyLgorVGhlIHhldmQtZXF1aXZhbGVudCBvcHRpb25zIG9yIHZhbHVlcyBh cmUgbGlzdGVkIGluIHBhcmVudGhlc2VzIGZvciBlYXN5IG1pZ3JhdGlvbi4KKworVG8gZ2V0IGEg bW9yZSBhY2N1cmF0ZSBhbmQgZXh0ZW5zaXZlIGRvY3VtZW50YXRpb24gb2YgdGhlIGxpYnhldmQg b3B0aW9ucywKK2ludm9rZSB0aGUgY29tbWFuZCAgQGNvZGV7eGV2ZF9hcHAgLS1oZWxwfSBvciBj b25zdWx0IHRoZSBsaWJ4ZXZkIGRvY3VtZW50YXRpb24uCisKK0B0YWJsZSBAb3B0aW9uCitAaXRl bSB0aHJlYWRzIChAZW1waHt0aHJlYWRzfSkKK0ZvcmNlIHRvIHVzZSBhIHNwZWNpZmljIG51bWJl ciBvZiB0aHJlYWRzCitAZW5kIHRhYmxlCisKIEBjIG1hbiBlbmQgVklERU8gREVDT0RFUlMKIAog QGNoYXB0ZXIgQXVkaW8gRGVjb2RlcnMKZGlmZiAtLWdpdCBhL2RvYy9lbmNvZGVycy50ZXhpIGIv ZG9jL2VuY29kZXJzLnRleGkKaW5kZXggZTNiNjFkZTVhMS4uODdhYWFhMGRiYyAxMDA2NDQKLS0t IGEvZG9jL2VuY29kZXJzLnRleGkKKysrIGIvZG9jL2VuY29kZXJzLnRleGkKQEAgLTI4MTUsNiAr MjgxNSwxMTggQEAgZmZtcGVnIC1pIGlucHV0IC1jOnYgbGlieGF2czIgLXhhdnMyLXBhcmFtcyBS ZG9xTGV2ZWw9MCBvdXRwdXQuYXZzMgogQGVuZCBleGFtcGxlCiBAZW5kIHRhYmxlCiAKK0BzZWN0 aW9uIGxpYnhldmUKKworZVh0cmEtZmFzdCBFc3NlbnRpYWwgVmlkZW8gRW5jb2RlciAoWEVWRSkg TVBFRy01IEVWQyBlbmNvZGVyIHdyYXBwZXIuCisKK1RoaXMgZW5jb2RlciByZXF1aXJlcyB0aGUg cHJlc2VuY2Ugb2YgdGhlIGxpYnhldmUgaGVhZGVycyBhbmQgbGlicmFyeQorZHVyaW5nIGNvbmZp Z3VyYXRpb24uIFlvdSBuZWVkIHRvIGV4cGxpY2l0bHkgY29uZmlndXJlIHRoZSBidWlsZCB3aXRo CitAb3B0aW9uey0tZW5hYmxlLWxpYnhldmV9LgorCitAZmxvYXQgTk9URQorTWFueSBsaWJ4ZXZl IGVuY29kZXIgb3B0aW9ucyBhcmUgbWFwcGVkIHRvIEZGbXBlZyBnbG9iYWwgY29kZWMgb3B0aW9u cywKK3doaWxlIHVuaXF1ZSBlbmNvZGVyIG9wdGlvbnMgYXJlIHByb3ZpZGVkIHRocm91Z2ggcHJp dmF0ZSBvcHRpb25zLgorQWRkaXRpb25hbGx5IHRoZSB4ZXZlLXBhcmFtcyBwcml2YXRlIG9wdGlv bnMgYWxsb3dzIG9uZSB0byBwYXNzIGEgbGlzdAorb2Yga2V5PXZhbHVlIHR1cGxlcyBhcyBhY2Nl cHRlZCBieSB0aGUgbGlieGV2ZSBAY29kZXtwYXJzZV94ZXZlX3BhcmFtc30gZnVuY3Rpb24uCitA ZW5kIGZsb2F0CisKK1RoZSB4ZXZlIHByb2plY3Qgd2Vic2l0ZSBpcyBhdCBAdXJse2h0dHBzOi8v Z2l0aHViLmNvbS9tcGVnNS94ZXZlfS4KKworQHN1YnNlY3Rpb24gT3B0aW9ucworCitUaGUgZm9s bG93aW5nIG9wdGlvbnMgYXJlIHN1cHBvcnRlZCBieSB0aGUgbGlieGV2ZSB3cmFwcGVyLgorVGhl IHhldmUtZXF1aXZhbGVudCBvcHRpb25zIG9yIHZhbHVlcyBhcmUgbGlzdGVkIGluIHBhcmVudGhl c2VzIGZvciBlYXN5IG1pZ3JhdGlvbi4KKworQGZsb2F0IE5PVEUKK1RvIHJlZHVjZSB0aGUgZHVw bGljYXRpb24gb2YgZG9jdW1lbnRhdGlvbiwgb25seSB0aGUgcHJpdmF0ZSBvcHRpb25zCithbmQg c29tZSBvdGhlcnMgcmVxdWlyaW5nIHNwZWNpYWwgYXR0ZW50aW9uIGFyZSBkb2N1bWVudGVkIGhl cmUuIEZvcgordGhlIGRvY3VtZW50YXRpb24gb2YgdGhlIHVuZG9jdW1lbnRlZCBnZW5lcmljIG9w dGlvbnMsIHNlZQorQHJlZntjb2RlYy1vcHRpb25zLCx0aGUgQ29kZWMgT3B0aW9ucyBjaGFwdGVy fS4KK0BlbmQgZmxvYXQKKworQGZsb2F0IE5PVEUKK1RvIGdldCBhIG1vcmUgYWNjdXJhdGUgYW5k IGV4dGVuc2l2ZSBkb2N1bWVudGF0aW9uIG9mIHRoZSBsaWJ4ZXZlIG9wdGlvbnMsCitpbnZva2Ug dGhlIGNvbW1hbmQgIEBjb2Rle3hldmVfYXBwIC0taGVscH0gb3IgY29uc3VsdCB0aGUgbGlieGV2 ZSBkb2N1bWVudGF0aW9uLgorQGVuZCBmbG9hdAorCitAdGFibGUgQG9wdGlvbgorQGl0ZW0gYiAo QGVtcGh7Yml0cmF0ZX0pCitTZXQgdGFyZ2V0IHZpZGVvIGJpdHJhdGUgaW4gYml0cy9zLgorTm90 ZSB0aGF0IEZGbXBlZ8Oi4oKs4oSicyBiIG9wdGlvbiBpcyBleHByZXNzZWQgaW4gYml0cy9zLCB3 aGlsZSB4ZXZlw6LigqzihKJzIGJpdHJhdGUgaXMgaW4ga2lsb2JpdHMvcy4NCisNCitAaXRlbSBi ZiAoQGVtcGh7YmZyYW1lc30pDQorU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBCIGZyYW1lcyAo MSwzLDcsMTUpLg0KKw0KK0BpdGVtIGcgKEBlbXBoe2tleWludH0pDQorU2V0IHRoZSBHT1Agc2l6 ZSAoSS1waWN0dXJlIHBlcmlvZCkuDQorDQorQGl0ZW0gcHJlc2V0IChAZW1waHtwcmVzZXR9KQ0K K1NldCB0aGUgeGV2ZSBwcmVzZXQuDQorU2V0IHRoZSBlbmNvZGVyIHByZXNldCB2YWx1ZSB0byBk ZXRlcm1pbmUgZW5jb2Rpbmcgc3BlZWQgW2Zhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2Vib10NCisN CitAaXRlbSB0dW5lIChAZW1waHt0dW5lfSkNCitTZXQgdGhlIGVuY29kZXIgdHVuZSBwYXJhbWV0 ZXIgW3BzbnIsIHplcm9sYXRlbmN5XQ0KKw0KK0BpdGVtIHByb2ZpbGUgKEBlbXBoe3Byb2ZpbGV9 KQ0KK1NldCB0aGUgZW5jb2RlciBwcm9maWxlIFswOiBiYXNlbGllOyAxOiBtYWluXQ0KKw0KK0Bp dGVtIGNyZiAoQGVtcGh7Y3JmfSkNCitTZXQgdGhlIHF1YWxpdHkgZm9yIGNvbnN0YW50IHF1YWxp dHkgbW9kZS4NCitDb25zdGFudCByYXRlIGZhY3RvciA8LTEuLjUxPiBbZGVmYXVsdDogMzJdDQor DQorQGl0ZW0gcXAgKEBlbXBoe3FwfSkNCitTZXQgY29uc3RhbnQgcXVhbnRpemF0aW9uIHJhdGUg Y29udHJvbCBtZXRob2QgcGFyYW1ldGVyLg0KK1F1YW50aXphdGlvbiBwYXJhbWV0ZXIgcXAgPDAu LjUxPiBbZGVmYXVsdDogMzJdDQorDQorQGl0ZW0gdGhyZWFkcyAoQGVtcGh7dGhyZWFkc30pDQor Rm9yY2UgdG8gdXNlIGEgc3BlY2lmaWMgbnVtYmVyIG9mIHRocmVhZHMNCisNCitAaXRlbSB4ZXZl LXBhcmFtcw0KK1NldCB4ZXZlIG9wdGlvbnMgdXNpbmcgYSBsaXN0IG9mIEB2YXJ7a2V5fT1AdmFy e3ZhbHVlfSBjb3VwbGVzIHNlcGFyYXRlZA0KK2J5ICI6Ii4NCisNCitGb3IgZXhhbXBsZSB0byBz cGVjaWZ5IGxpYnhldmUgZW5jb2Rpbmcgb3B0aW9ucyB3aXRoIEBvcHRpb257LXhldmUtcGFyYW1z fToNCisNCitAZXhhbXBsZQ0KK2ZmbXBlZyAtaSBpbnB1dCAtYzp2IGxpYnhldmUgLXhldmUtcGFy YW1zIHByb2ZpbGU9bWFpbjp0dW5lPXplcm9sYXRlbmN5OnByZXNldD1mYXN0OnE9MTc6YmZyYW1l cz0xNTpiaXRyYXRlPTEwMGsgb3V0cHV0Lm1wNA0KK0BlbmQgZXhhbXBsZQ0KK0BlbmQgdGFibGUN CisNCitAc3Vic3Vic2VjdGlvbiBTdXBwb3J0ZWQga2V5IHZhbHVlcyBmb3IgeGV2ZS1wYXJhbXMN CisNCitTZXQgeGV2ZSBvcHRpb25zIHVzaW5nIGEgbGlzdCBvZiBAdmFye2tleX09QHZhcnt2YWx1 ZX0gY291cGxlcyBzZXBhcmF0ZWQNCisNCitAdGFibGUgQG9wdGlvbg0KKw0KK0BpdGVtIGhhc2gN CitFbWJlZCB0aGUgcGljdHVyZSBzaWduYXR1cmUgKEhBU0gpIGZvciBjb25mb3JtYW5jZSBjaGVj a2luZyBpbiBkZWNvZGluZywgKDA6IE9mZiwgMTogT24pDQorDQorQGl0ZW0gdmJ2LWJ1ZnNpemUN CitTZXQgdGhlIFZCViBidWZmZXIgc2l6ZTogS2JpdHMobm9uZSxLLGspLCBNYml0cyhNLG0pDQor DQorQGl0ZW0gcmMtdHlwZQ0KK1NldCB0aGUgcmF0ZSBjb250cm9sIHR5cGUsICgwOiBPRkYsIDE6 IEFCUiwgMjogQ1JGKQ0KKw0KK0BpdGVtIGJmcmFtZXMNCitTZXQgdGhlIG1heGltdW0gbnVtYmVy IG9mIEIgZnJhbWVzICgxLDMsNywxNSkNCisNCitAaXRlbSBwcm9maWxlDQorU2V0IHRoZSBQUk9G SUxFIChtYWluLCBiYXNlbGluZSkNCisNCitAaXRlbSBwcmVzZXQNCitTZXQgdGhlIGVuY29kZXIg UFJFU0VUIChmYXN0LCBtZWRpdW0sIHNsb3csIHBsYWNlYm8pDQorDQorQGl0ZW0gdHVuZQ0KK1Nl dCB0aGUgZW5jb2RlciBUVU5FIChwc25yLCB6ZXJvbGF0ZW5jeSkNCisNCitAaXRlbSBiaXRyYXRl DQorU2V0IHRoZSBCaXRyYXRlIGluIHRlcm1zIG9mIGtpbG8tYml0cyBwZXIgc2Vjb25kOiBLYnBz KG5vbmUsSyxrKSwgTWJwcyhNLG0pDQorDQorQGl0ZW0gcXANCitTZXQgdGhlIFFQIHZhbHVlICgw fjUxKQ0KKw0KK0BlbmQgdGFibGUNCisNCiBAc2VjdGlvbiBsaWJ4dmlkDQogDQogWHZpZCBNUEVH LTQgUGFydCAyIGVuY29kZXIgd3JhcHBlci4NCmRpZmYgLS1naXQgYS9kb2MvZ2VuZXJhbF9jb250 ZW50cy50ZXhpIGIvZG9jL2dlbmVyYWxfY29udGVudHMudGV4aQ0KaW5kZXggZGYxNjkyYzhkZi4u NTQ0YjQ5NmYwYyAxMDA2NDQNCi0tLSBhL2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkNCisrKyBi L2RvYy9nZW5lcmFsX2NvbnRlbnRzLnRleGkNCkBAIC0zMzYsNiArMzM2LDIyIEBAIGxpYnhhdnMy IGlzIHVuZGVyIHRoZSBHTlUgUHVibGljIExpY2Vuc2UgVmVyc2lvbiAyIG9yIGxhdGVyDQogZGV0 YWlscyksIHlvdSBtdXN0IHVwZ3JhZGUgRkZtcGVnJ3MgbGljZW5zZSB0byBHUEwgaW4gb3JkZXIg dG8gdXNlIGl0Lg0KIEBlbmQgZmxvYXQNCiANCitAc2VjdGlvbiBlWHRyYS1mYXN0IEVzc2VudGlh bCBWaWRlbyBFbmNvZGVyIChYRVZFKQ0KKw0KK0ZGbXBlZyBjYW4gbWFrZSB1c2Ugb2YgdGhlIFhF VkUgbGlicmFyeSBmb3IgRVZDIHZpZGVvIGVuY29kaW5nLg0KKw0KK0dvIHRvIEB1cmx7aHR0cHM6 Ly9naXRodWIuY29tL21wZWc1L3hldmV9IGFuZCBmb2xsb3cgdGhlIGluc3RydWN0aW9ucyBmb3IN CitpbnN0YWxsaW5nIHRoZSBYRVZFIGxpYnJhcnkuIFRoZW4gcGFzcyBAY29kZXstLWVuYWJsZS1s aWJ4ZXZlfSB0byBjb25maWd1cmUgdG8NCitlbmFibGUgaXQuDQorDQorQHNlY3Rpb24gZVh0cmEt ZmFzdCBFc3NlbnRpYWwgVmlkZW8gRGVjb2RlciAoWEVWRCkNCisNCitGRm1wZWcgY2FuIG1ha2Ug dXNlIG9mIHRoZSBYRVZEIGxpYnJhcnkgZm9yIEVWQyB2aWRlbyBkZWNvZGluZy4NCisNCitHbyB0 byBAdXJse2h0dHBzOi8vZ2l0aHViLmNvbS9tcGVnNS94ZXZkfSBhbmQgZm9sbG93IHRoZSBpbnN0 cnVjdGlvbnMgZm9yDQoraW5zdGFsbGluZyB0aGUgWEVWRCBsaWJyYXJ5LiBUaGVuIHBhc3MgQGNv ZGV7LS1lbmFibGUtbGlieGV2ZH0gdG8gY29uZmlndXJlIHRvDQorZW5hYmxlIGl0Lg0KKw0KIEBz ZWN0aW9uIFpWQkkNCiANCiBaVkJJIGlzIGEgVkJJIGRlY29kaW5nIGxpYnJhcnkgd2hpY2ggY2Fu IGJlIHVzZWQgYnkgRkZtcGVnIHRvIGRlY29kZSBEVkINCkBAIC01ODMsNiArNTk5LDcgQEAgbGli cmFyeToNCiBAaXRlbSByYXcgRFRTICAgICAgICAgICAgICAgICAgIEB0YWIgWCBAdGFiIFgNCiBA aXRlbSByYXcgRFRTLUhEICAgICAgICAgICAgICAgIEB0YWIgICBAdGFiIFgNCiBAaXRlbSByYXcg RS1BQy0zICAgICAgICAgICAgICAgIEB0YWIgWCBAdGFiIFgNCitAaXRlbSByYXcgRVZDICAgICAg ICAgICAgICAgICAgIEB0YWIgWCBAdGFiIFgNCiBAaXRlbSByYXcgRkxBQyAgICAgICAgICAgICAg ICAgIEB0YWIgWCBAdGFiIFgNCiBAaXRlbSByYXcgR1NNICAgICAgICAgICAgICAgICAgIEB0YWIg ICBAdGFiIFgNCiBAaXRlbSByYXcgSC4yNjEgICAgICAgICAgICAgICAgIEB0YWIgWCBAdGFiIFgN CkBAIC05MTIsNiArOTI5LDggQEAgZm9sbG93aW5nIGltYWdlIGZvcm1hdHMgYXJlIHN1cHBvcnRl ZDoNCiBAaXRlbSBFbGVjdHJvbmljIEFydHMgVFFJIHZpZGVvICBAdGFiICAgICBAdGFiICBYDQog QGl0ZW0gRXNjYXBlIDEyNCAgICAgICAgICAgICBAdGFiICAgICBAdGFiICBYDQogQGl0ZW0gRXNj YXBlIDEzMCAgICAgICAgICAgICBAdGFiICAgICBAdGFiICBYDQorQGl0ZW0gRVZDIC8gTVBFRy01 IFBhcnQgMSAgICBAdGFiICBYICBAdGFiICBYDQorICAgIEB0YWIgZW5jb2RpbmcgYW5kIGRlY29k aW5nIHN1cHBvcnRlZCB0aHJvdWdoIGV4dGVybmFsIGxpYnJhcmllcyBsaWJ4ZXZlIGFuZCBsaWJ4 ZXZkDQogQGl0ZW0gRkZtcGVnIHZpZGVvIGNvZGVjICMxICBAdGFiICBYICBAdGFiICBYDQogICAg IEB0YWIgbG9zc2xlc3MgY29kZWMgKGZvdXJjYzogRkZWMSkNCiBAaXRlbSBGbGFzaCBTY3JlZW4g VmlkZW8gdjEgIEB0YWIgIFggIEB0YWIgIFgNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL01ha2Vm aWxlIGIvbGliYXZjb2RlYy9NYWtlZmlsZQ0KaW5kZXggM2FkZjE1MzZkOC4uODEzNGY0MGUzZSAx MDA2NDQNCi0tLSBhL2xpYmF2Y29kZWMvTWFrZWZpbGUNCisrKyBiL2xpYmF2Y29kZWMvTWFrZWZp bGUNCkBAIC0xMDg3LDYgKzEwODcsOCBAQCBPQkpTLSQoQ09ORklHX0xJQldFQlBfQU5JTV9FTkNP REVSKSAgICAgICArPSBsaWJ3ZWJwZW5jX2NvbW1vbi5vIGxpYndlYnBlbmNfYW5pbQ0KIE9CSlMt JChDT05GSUdfTElCWDI2Ml9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjQubw0KIE9CSlMt JChDT05GSUdfTElCWDI2NF9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjQubw0KIE9CSlMt JChDT05GSUdfTElCWDI2NV9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYngyNjUubw0KK09CSlMt JChDT05GSUdfTElCWEVWRV9FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnhldmUubw0KK09CSlMt JChDT05GSUdfTElCWEVWRF9ERUNPREVSKSAgICAgICAgICAgICs9IGxpYnhldmQubw0KIE9CSlMt JChDT05GSUdfTElCWEFWU19FTkNPREVSKSAgICAgICAgICAgICs9IGxpYnhhdnMubw0KIE9CSlMt JChDT05GSUdfTElCWEFWUzJfRU5DT0RFUikgICAgICAgICAgICs9IGxpYnhhdnMyLm8NCiBPQkpT LSQoQ09ORklHX0xJQlhWSURfRU5DT0RFUikgICAgICAgICAgICArPSBsaWJ4dmlkLm8NCkBAIC0x MTUyLDYgKzExNTQsNyBAQCBPQkpTLSQoQ09ORklHX1ZQOV9QQVJTRVIpICAgICAgICAgICAgICAr PSB2cDlfcGFyc2VyLm8NCiBPQkpTLSQoQ09ORklHX1dFQlBfUEFSU0VSKSAgICAgICAgICAgICAr PSB3ZWJwX3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19YQk1fUEFSU0VSKSAgICAgICAgICAgICAg Kz0geGJtX3BhcnNlci5vDQogT0JKUy0kKENPTkZJR19YTUFfUEFSU0VSKSAgICAgICAgICAgICAg Kz0geG1hX3BhcnNlci5vDQorT0JKUy0kKENPTkZJR19FVkNfUEFSU0VSKSAgICAgICAgICAgICAg Kz0gZXZjX3BhcnNlci5vDQogDQogIyBiaXRzdHJlYW0gZmlsdGVycw0KIE9CSlMtJChDT05GSUdf QUFDX0FEVFNUT0FTQ19CU0YpICAgICAgICAgICs9IGFhY19hZHRzdG9hc2NfYnNmLm8NCmRpZmYg LS1naXQgYS9saWJhdmNvZGVjL2FsbGNvZGVjcy5jIGIvbGliYXZjb2RlYy9hbGxjb2RlY3MuYw0K aW5kZXggZDFlMTAxOTdkZS4uMTJlNmM5MmY2NSAxMDA2NDQNCi0tLSBhL2xpYmF2Y29kZWMvYWxs Y29kZWNzLmMNCisrKyBiL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMNCkBAIC03ODMsNiArNzgzLDgg QEAgZXh0ZXJuIExJQlgyNjRfQ09OU1QgQVZDb2RlYyBmZl9saWJ4MjY0X2VuY29kZXI7DQogI2Vu ZGlmDQogZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieDI2NHJnYl9lbmNvZGVyOw0KIGV4dGVy biBBVkNvZGVjIGZmX2xpYngyNjVfZW5jb2RlcjsNCitleHRlcm4gY29uc3QgQVZDb2RlYyBmZl9s aWJ4ZXZlX2VuY29kZXI7DQorZXh0ZXJuIGNvbnN0IEFWQ29kZWMgZmZfbGlieGV2ZF9kZWNvZGVy Ow0KIGV4dGVybiBjb25zdCBBVkNvZGVjIGZmX2xpYnhhdnNfZW5jb2RlcjsNCiBleHRlcm4gY29u c3QgQVZDb2RlYyBmZl9saWJ4YXZzMl9lbmNvZGVyOw0KIGV4dGVybiBjb25zdCBBVkNvZGVjIGZm X2xpYnh2aWRfZW5jb2RlcjsNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL2F2Y29kZWMuaCBiL2xp YmF2Y29kZWMvYXZjb2RlYy5oDQppbmRleCA3ZWU4YmMyYjdjLi5hMDcwZTBmMWQ3IDEwMDY0NA0K LS0tIGEvbGliYXZjb2RlYy9hdmNvZGVjLmgNCisrKyBiL2xpYmF2Y29kZWMvYXZjb2RlYy5oDQpA QCAtMTY0Myw2ICsxNjQzLDkgQEAgdHlwZWRlZiBzdHJ1Y3QgQVZDb2RlY0NvbnRleHQgew0KICNk ZWZpbmUgRkZfUFJPRklMRV9LTFZBX1NZTkMgMA0KICNkZWZpbmUgRkZfUFJPRklMRV9LTFZBX0FT WU5DIDENCiANCisjZGVmaW5lIEZGX1BST0ZJTEVfRVZDX0JBU0VMSU5FICAgICAgICAgICAgIDAN CisjZGVmaW5lIEZGX1BST0ZJTEVfRVZDX01BSU4gICAgICAgICAgICAgICAgIDENCisNCiAgICAg LyoqDQogICAgICAqIGxldmVsDQogICAgICAqIC0gZW5jb2Rpbmc6IFNldCBieSB1c2VyLg0KZGlm ZiAtLWdpdCBhL2xpYmF2Y29kZWMvZXZjX3BhcnNlci5jIGIvbGliYXZjb2RlYy9ldmNfcGFyc2Vy LmMNCm5ldyBmaWxlIG1vZGUgMTAwNjQ0DQppbmRleCAwMDAwMDAwMDAwLi43YzQxZWI5YWY0DQot LS0gL2Rldi9udWxsDQorKysgYi9saWJhdmNvZGVjL2V2Y19wYXJzZXIuYw0KQEAgLTAsMCArMSw1 MTQgQEANCisvKg0KKyAqIEVWQyBBVkMgZm9ybWF0IHBhcnNlcg0KKyAqDQorICogQ29weXJpZ2h0 IChDKSAyMDIxIERhd2lkIEtvemluc2tpIDxkLmtvemluc2tpQHNhbXN1bmcuY29tPg0KKyAqDQor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLg0KKyAqDQorICogRkZtcGVnIGlzIGZyZWUg c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcg0KKyAqIG1vZGlmeSBpdCB1 bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBMaWNl bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIN CisgKiB2ZXJzaW9uIDIuMSBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg bGF0ZXIgdmVyc2lvbi4NCisgKg0KKyAqIEZGbXBlZyBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLA0KKyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mDQorICogTUVSQ0hBTlRBQklMSVRZ IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUNCisgKiBM ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLg0KKyAqDQorICog WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs IFB1YmxpYw0KKyAqIExpY2Vuc2UgYWxvbmcgd2l0aCBGRm1wZWc7IGlmIG5vdCwgd3JpdGUgdG8g dGhlIEZyZWUgU29mdHdhcmUNCisgKiBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BIDAyMTEwLTEzMDEgVVNBDQorICovDQorDQorI2lu Y2x1ZGUgPHN0ZGludC5oPg0KKw0KKyNpbmNsdWRlIDx4ZXZkLmg+DQorDQorI2luY2x1ZGUgImxp YmF2dXRpbC9jb21tb24uaCINCisNCisjaW5jbHVkZSAicGFyc2VyLmgiDQorI2luY2x1ZGUgImdv bG9tYi5oIg0KKw0KKyNkZWZpbmUgRVZDX05BTF9IRUFERVJfU0laRSAgIDIgLyogYnl0ZSAqLw0K KyNkZWZpbmUgTUFYX1NQU19DTlQgIDE2IC8qIGRlZmluZWQgdmFsdWUgaW4gRVZDIHN0YW5kYXJk ICovDQorDQorLy8gVGhlIHN0dXJjdHVyZSByZWZsZWN0cyBTUFMgUkJTUChyYXcgYnl0ZSBzZXF1 ZW5jZSBwYXlsb2FkKSBsYXlvdXQNCisvLyBAc2VlIElTT19JRUNfMjMwOTQtMSBzZWN0aW9uIDcu My4yLjENCisvLw0KKy8vIFRoZSBmb2xsb3dpbmcgZGVzY3JpcHRvcnMgc3BlY2lmeSB0aGUgcGFy c2luZyBwcm9jZXNzIG9mIGVhY2ggZWxlbWVudA0KKy8vIHUobikgLSB1bnNpZ25lZCBpbnRlZ2Vy IHVzaW5nIG4gYml0cw0KKy8vIHVlKHYpIC0gdW5zaWduZWQgaW50ZWdlciAwLXRoIG9yZGVyIEV4 cF9Hb2xvbWItY29kZWQgc3ludGF4IGVsZW1lbnQgd2l0aCB0aGUgbGVmdCBiaXQgZmlyc3QNCit0 eXBlZGVmIHN0cnVjdCBFVkNQYXJzZXJTUFMgew0KKyAgICBpbnQgc3BzX3NlcV9wYXJhbWV0ZXJf c2V0X2lkOyAgIC8vIHVlKHYpDQorICAgIGludCBwcm9maWxlX2lkYzsgICAgICAgICAgICAgICAg Ly8gdSg4KQ0KKyAgICBpbnQgbGV2ZWxfaWRjOyAgICAgICAgICAgICAgICAgIC8vIHUoOCkNCisg ICAgaW50IHRvb2xzZXRfaWRjX2g7ICAgICAgICAgICAgICAvLyB1KDMyKQ0KKyAgICBpbnQgdG9v bHNldF9pZGNfbDsgICAgICAgICAgICAgIC8vIHUoMzIpDQorICAgIGludCBjaHJvbWFfZm9ybWF0 X2lkYzsgICAgICAgICAgLy8gdWUodikNCisgICAgaW50IHBpY193aWR0aF9pbl9sdW1hX3NhbXBs ZXM7ICAvLyB1ZSh2KQ0KKyAgICBpbnQgcGljX2hlaWdodF9pbl9sdW1hX3NhbXBsZXM7IC8vIHVl KHYpDQorICAgIGludCBiaXRfZGVwdGhfbHVtYV9taW51czg7ICAgICAgLy8gdWUodikNCisgICAg aW50IGJpdF9kZXB0aF9jaHJvbWFfbWludXM4OyAgICAvLyB1ZSh2KQ0KKw0KKyAgICBpbnQgc3Bz X2J0dF9mbGFnOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHUoMSkNCisgICAgaW50IGxv ZzJfY3R1X3NpemVfbWludXM1OyAgICAgICAgICAgICAgICAgICAvLyB1ZSh2KQ0KKyAgICBpbnQg bG9nMl9taW5fY2Jfc2l6ZV9taW51czI7ICAgICAgICAgICAgICAgIC8vIHVlKHYpDQorICAgIGlu dCBsb2cyX2RpZmZfY3R1X21heF8xNF9jYl9zaXplOyAgICAgICAgICAgLy8gdWUodikNCisgICAg aW50IGxvZzJfZGlmZl9jdHVfbWF4X3R0X2NiX3NpemU7ICAgICAgICAgICAvLyB1ZSh2KQ0KKyAg ICBpbnQgbG9nMl9kaWZmX21pbl9jYl9taW5fdHRfY2Jfc2l6ZV9taW51czI7IC8vIHVlKHYpDQor DQorICAgIGludCBzcHNfc3Vjb19mbGFnOyAgICAgICAgICAgICAgICAgICAgICAgLy8gdSgxKQ0K KyAgICBpbnQgbG9nMl9kaWZmX2N0dV9zaXplX21heF9zdWNvX2NiX3NpemU7IC8vIHVlKHYpDQor ICAgIGludCBsb2cyX2RpZmZfbWF4X3N1Y29fbWluX3N1Y29fY2Jfc2l6ZTsgLy8gdWUodikNCisN CisgICAgaW50IHNwc19hZG12cF9mbGFnOyAgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX2FmZmlu ZV9mbGFnOyAgICAvLyB1KDEpDQorICAgIGludCBzcHNfYW12cl9mbGFnOyAgICAgIC8vIHUoMSkN CisgICAgaW50IHNwc19kbXZyX2ZsYWc7ICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgc3BzX21tdmRf ZmxhZzsgICAgICAvLyB1KDEpDQorICAgIGludCBzcHNfaG12cF9mbGFnOyAgICAgIC8vIHUoMSkN CisNCisgICAgaW50IHNwc19laXBkX2ZsYWc7ICAgICAgICAgICAgICAgICAvLyB1KDEpDQorICAg IGludCBzcHNfaWJjX2ZsYWc7ICAgICAgICAgICAgICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgbG9n Ml9tYXhfaWJjX2NhbmRfc2l6ZV9taW51czI7IC8vIHVlKHYpDQorDQorICAgIGludCBzcHNfY21f aW5pdF9mbGFnOyAvLyB1KDEpDQorICAgIGludCBzcHNfYWRjY19mbGFnOyAgICAvLyB1KDEpDQor DQorICAgIGludCBzcHNfaXF0X2ZsYWc7IC8vIHUoMSkNCisgICAgaW50IHNwc19hdHNfZmxhZzsg Ly8gdSgxKQ0KKw0KKyAgICBpbnQgc3BzX2FkZGJfZmxhZzsgICAvLyB1KDEpDQorICAgIGludCBz cHNfYWxmX2ZsYWc7ICAgIC8vIHUoMSkNCisgICAgaW50IHNwc19odGRmX2ZsYWc7ICAgLy8gdSgx KQ0KKyAgICBpbnQgc3BzX3JwbF9mbGFnOyAgICAvLyB1KDEpDQorICAgIGludCBzcHNfcG9jc19m bGFnOyAgIC8vIHUoMSkNCisgICAgaW50IHNwc19kcXVhbnRfZmxhZzsgLy8gdSgxKQ0KKyAgICBp bnQgc3BzX2RyYV9mbGFnOyAgICAvLyB1KDEpDQorDQorICAgIGludCBsb2cyX21heF9waWNfb3Jk ZXJfY250X2xzYl9taW51czQ7IC8vIHVlKHYpDQorICAgIGludCBsb2cyX3N1Yl9nb3BfbGVuZ3Ro OyAgICAgICAgICAgICAgIC8vIHVlKHYpDQorICAgIGludCBsb2cyX3JlZl9waWNfZ2FwX2xlbmd0 aDsgICAgICAgICAgIC8vIHVlKHYpDQorDQorICAgIGludCBtYXhfbnVtX3RpZDBfcmVmX3BpY3M7 IC8vIHVlKHYpDQorDQorICAgIGludCBzcHNfbWF4X2RlY19waWNfYnVmZmVyaW5nX21pbnVzMTsg Ly8gdWUodikNCisgICAgaW50IGxvbmdfdGVybV9yZWZfcGljX2ZsYWc7ICAgICAgICAgICAvLyB1 KDEpDQorICAgIGludCBycGwxX3NhbWVfYXNfcnBsMF9mbGFnOyAgICAgICAgICAgLy8gdSgxKQ0K KyAgICBpbnQgbnVtX3JlZl9waWNfbGlzdF9pbl9zcHNbMl07ICAgICAgIC8vIHVlKHYpDQorDQor ICAgIGludCBwaWN0dXJlX2Nyb3BwaW5nX2ZsYWc7ICAgICAgLy8gdSgxKQ0KKyAgICBpbnQgcGlj dHVyZV9jcm9wX2xlZnRfb2Zmc2V0OyAgIC8vIHVlKHYpDQorICAgIGludCBwaWN0dXJlX2Nyb3Bf cmlnaHRfb2Zmc2V0OyAgLy8gdWUodikNCisgICAgaW50IHBpY3R1cmVfY3JvcF90b3Bfb2Zmc2V0 OyAgICAvLyB1ZSh2KQ0KKyAgICBpbnQgcGljdHVyZV9jcm9wX2JvdHRvbV9vZmZzZXQ7IC8vIHVl KHYpDQorDQorfSBFVkNQYXJzZXJTUFM7DQorDQordHlwZWRlZiBzdHJ1Y3QgRVZDUGFyc2VyQ29u dGV4dCB7DQorICAgIFBhcnNlQ29udGV4dCBwYzsNCisgICAgRVZDUGFyc2VyU1BTIHNwc1tNQVhf U1BTX0NOVF07DQorICAgIGludCBpc19hdmM7DQorICAgIGludCBuYWxfbGVuZ3RoX3NpemU7DQor ICAgIGludCB0b19yZWFkOw0KKyAgICBpbnQgaW5jb21wbGV0ZV9uYWx1X3ByZWZpeF9yZWFkOyAv LyBUaGUgZmxhZyBpcyBzZXQgdG8gMSB3aGVuIGFuIGluY29tcGxldGUgTkFMIHVuaXQgcHJlZml4 IGhhcyBiZWVuIHJlYWQNCisNCisgICAgaW50IGdvdF9zcHM7DQorICAgIGludCBnb3RfcHBzOw0K KyAgICBpbnQgZ290X3NlaTsNCisgICAgaW50IGdvdF9zbGljZTsNCit9IEVWQ1BhcnNlckNvbnRl eHQ7DQorDQorc3RhdGljIGludCBnZXRfbmFsdV90eXBlKGNvbnN0IHVpbnQ4X3QgKmJzLCBpbnQg YnNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgaW50IHVuaXRfdHlwZV9w bHVzMSA9IDA7DQorICAgIFhFVkRfSU5GTyBpbmZvOw0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBp Zihic19zaXplID49IEVWQ19OQUxfSEVBREVSX1NJWkUpIHsNCisgICAgICAgIHJldCA9IHhldmRf aW5mbygodm9pZCAqKWJzLCBFVkNfTkFMX0hFQURFUl9TSVpFLCAxLCAmaW5mbyk7DQorICAgICAg ICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiQ2Fubm90IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOw0KKyAgICAg ICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIH0NCisgICAgICAgIHVuaXRfdHlwZV9wbHVzMSA9 IGluZm8ubmFsdV90eXBlOw0KKw0KKyAgICB9DQorDQorICAgIHJldHVybiB1bml0X3R5cGVfcGx1 czEgLSAxOw0KK30NCisNCitzdGF0aWMgdWludDMyX3QgcmVhZF9uYWxfdW5pdF9sZW5ndGgoY29u c3QgdWludDhfdCAqYnMsIGludCBic19zaXplLCBBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0K KyAgICB1aW50MzJfdCBsZW4gPSAwOw0KKyAgICBYRVZEX0lORk8gaW5mbzsNCisgICAgaW50IHJl dDsNCisNCisgICAgaWYoYnNfc2l6ZSA+PSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFKSB7DQor ICAgICAgICByZXQgPSB4ZXZkX2luZm8oKHZvaWQgKilicywgWEVWRF9OQUxfVU5JVF9MRU5HVEhf QllURSwgMSwgJmluZm8pOw0KKyAgICAgICAgaWYgKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgYml0c3RyZWFt IGluZm9ybWF0aW9uXG4iKTsNCisgICAgICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisg ICAgICAgIGxlbiA9IGluZm8ubmFsdV9sZW47DQorICAgICAgICBpZihsZW4gPT0gMCkgew0KKyAg ICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBiaXRzdHJlYW0g c2l6ZSFcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICB9DQor DQorICAgIHJldHVybiBsZW47DQorfQ0KKw0KKy8vIEBzZWUgSVNPX0lFQ18yMzA5NC0xICg3LjMu Mi4xIFNQUyBSQlNQIHN5bnRheCkNCitzdGF0aWMgRVZDUGFyc2VyU1BTICpwYXJzZV9zcHMoY29u c3QgdWludDhfdCAqYnMsIGludCBic19zaXplLCBFVkNQYXJzZXJDb250ZXh0ICpldikNCit7DQor ICAgIEdldEJpdENvbnRleHQgZ2I7DQorICAgIEVWQ1BhcnNlclNQUyAqc3BzOw0KKyAgICBpbnQg c3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkOw0KKw0KKyAgICBpZihpbml0X2dldF9iaXRzOCgmZ2Is IGJzLCBic19zaXplKSA8IDApDQorICAgICAgICByZXR1cm4gTlVMTDsNCisNCisgICAgc3BzX3Nl cV9wYXJhbWV0ZXJfc2V0X2lkID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBpZihzcHNf c2VxX3BhcmFtZXRlcl9zZXRfaWQgPj0gTUFYX1NQU19DTlQpDQorICAgICAgICByZXR1cm4gTlVM TDsNCisNCisgICAgc3BzID0gJmV2LT5zcHNbc3BzX3NlcV9wYXJhbWV0ZXJfc2V0X2lkXTsNCisg ICAgc3BzLT5zcHNfc2VxX3BhcmFtZXRlcl9zZXRfaWQgPSBzcHNfc2VxX3BhcmFtZXRlcl9zZXRf aWQ7DQorDQorICAgIC8vIHRoZSBCYXNlbGluZSBwcm9maWxlIGlzIGluZGljYXRlZCBieSBwcm9m aWxlX2lkYyBlcWFsIHRvIDANCisgICAgLy8gdGhlIE1haW4gcHJvZmlsZSBpcyBpbmRpY2F0ZWQg YnkgcHJvZmlsZV9pZGMgZXFhbCB0byAxDQorICAgIHNwcy0+cHJvZmlsZV9pZGMgPSBnZXRfYml0 cygmZ2IsIDgpOw0KKw0KKyAgICBzcHMtPmxldmVsX2lkYyA9IGdldF9iaXRzKCZnYiwgOCk7DQor DQorICAgIHNraXBfYml0c19sb25nKCZnYiwgMzIpOyAvKiBza2lwIHRvb2xzZXRfaWRjX2ggKi8N CisgICAgc2tpcF9iaXRzX2xvbmcoJmdiLCAzMik7IC8qIHNraXAgdG9vbHNldF9pZGNfbCAqLw0K Kw0KKyAgICAvLyAwIC0gbW9ub2Nocm9tZQ0KKyAgICAvLyAxIC0gNDoyOjANCisgICAgLy8gMiAt IDQ6MjoyDQorICAgIC8vIDMgLSA0OjQ6NA0KKyAgICBzcHMtPmNocm9tYV9mb3JtYXRfaWRjID0g Z2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBzcHMtPnBpY193aWR0aF9pbl9sdW1hX3NhbXBs ZXMgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIHNwcy0+cGljX2hlaWdodF9pbl9sdW1hX3Nh bXBsZXMgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIHNwcy0+Yml0X2RlcHRoX2x1bWFf bWludXM4ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICBzcHMtPmJpdF9kZXB0aF9jaHJvbWFf bWludXM4ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKw0KKyAgICBzcHMtPnNwc19idHRfZmxhZyA9 IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNwcy0+c3BzX2J0dF9mbGFnKSB7DQorICAgICAg ICBzcHMtPmxvZzJfY3R1X3NpemVfbWludXM1ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAg ICAgc3BzLT5sb2cyX21pbl9jYl9zaXplX21pbnVzMiA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisg ICAgICAgIHNwcy0+bG9nMl9kaWZmX2N0dV9tYXhfMTRfY2Jfc2l6ZSA9IGdldF91ZV9nb2xvbWIo JmdiKTsNCisgICAgICAgIHNwcy0+bG9nMl9kaWZmX2N0dV9tYXhfdHRfY2Jfc2l6ZSA9IGdldF91 ZV9nb2xvbWIoJmdiKTsNCisgICAgICAgIHNwcy0+bG9nMl9kaWZmX21pbl9jYl9taW5fdHRfY2Jf c2l6ZV9taW51czIgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgIH0NCisNCisgICAgc3BzLT5z cHNfc3Vjb19mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfc3Vjb19m bGFnKSB7DQorICAgICAgICBzcHMtPmxvZzJfZGlmZl9jdHVfc2l6ZV9tYXhfc3Vjb19jYl9zaXpl ID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICAgICAgc3BzLT5sb2cyX2RpZmZfbWF4X3N1Y29f bWluX3N1Y29fY2Jfc2l6ZSA9IGdldF91ZV9nb2xvbWIoJmdiKTsNCisgICAgfQ0KKw0KKyAgICBz cHMtPnNwc19hZG12cF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNf YWRtdnBfZmxhZykgew0KKyAgICAgICAgc3BzLT5zcHNfYWZmaW5lX2ZsYWcgPSBnZXRfYml0cygm Z2IsIDEpOw0KKyAgICAgICAgc3BzLT5zcHNfYW12cl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsN CisgICAgICAgIHNwcy0+c3BzX2RtdnJfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgICAg ICBzcHMtPnNwc19tbXZkX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICAgICAgc3BzLT5z cHNfaG12cF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgfQ0KKw0KKyAgICBzcHMtPnNw c19laXBkX2ZsYWcgPSAgZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgaWYoc3BzLT5zcHNfZWlwZF9m bGFnKSB7DQorICAgICAgICBzcHMtPnNwc19pYmNfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQor ICAgICAgICBpZihzcHMtPnNwc19pYmNfZmxhZykNCisgICAgICAgICAgICBzcHMtPmxvZzJfbWF4 X2liY19jYW5kX3NpemVfbWludXMyID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQor ICAgIHNwcy0+c3BzX2NtX2luaXRfZmxhZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorICAgIGlmKHNw cy0+c3BzX2NtX2luaXRfZmxhZykNCisgICAgICAgIHNwcy0+c3BzX2FkY2NfZmxhZyA9IGdldF9i aXRzKCZnYiwgMSk7DQorDQorICAgIHNwcy0+c3BzX2lxdF9mbGFnID0gZ2V0X2JpdHMoJmdiLCAx KTsNCisgICAgaWYoc3BzLT5zcHNfaXF0X2ZsYWcpDQorICAgICAgICBzcHMtPnNwc19hdHNfZmxh ZyA9IGdldF9iaXRzKCZnYiwgMSk7DQorDQorICAgIHNwcy0+c3BzX2FkZGJfZmxhZyA9IGdldF9i aXRzKCZnYiwgMSk7DQorICAgIHNwcy0+c3BzX2FsZl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsN CisgICAgc3BzLT5zcHNfaHRkZl9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisgICAgc3BzLT5z cHNfcnBsX2ZsYWcgPSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBzcHMtPnNwc19wb2NzX2ZsYWcg PSBnZXRfYml0cygmZ2IsIDEpOw0KKyAgICBzcHMtPnNwc19kcXVhbnRfZmxhZyA9IGdldF9iaXRz KCZnYiwgMSk7DQorICAgIHNwcy0+c3BzX2RyYV9mbGFnID0gZ2V0X2JpdHMoJmdiLCAxKTsNCisN CisgICAgaWYoc3BzLT5zcHNfcG9jc19mbGFnKQ0KKyAgICAgICAgc3BzLT5sb2cyX21heF9waWNf b3JkZXJfY250X2xzYl9taW51czQgPSBnZXRfdWVfZ29sb21iKCZnYik7DQorDQorICAgIGlmKCFz cHMtPnNwc19wb2NzX2ZsYWcgfHwgIXNwcy0+c3BzX3JwbF9mbGFnKSB7DQorICAgICAgICBzcHMt PmxvZzJfc3ViX2dvcF9sZW5ndGggPSBnZXRfdWVfZ29sb21iKCZnYik7DQorICAgICAgICBpZihz cHMtPmxvZzJfc3ViX2dvcF9sZW5ndGggPT0gMCkNCisgICAgICAgICAgICBzcHMtPmxvZzJfcmVm X3BpY19nYXBfbGVuZ3RoID0gZ2V0X3VlX2dvbG9tYigmZ2IpOw0KKyAgICB9DQorDQorICAgIHJl dHVybiBzcHM7DQorfQ0KKw0KK3N0YXRpYyBpbnQgcGFyc2VfbmFsX3VuaXRzKEFWQ29kZWNQYXJz ZXJDb250ZXh0ICpzLCBjb25zdCB1aW50OF90ICpicywNCisgICAgICAgICAgICAgICAgICAgICAg ICAgICBpbnQgYnNfc2l6ZSwgQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgRVZDUGFy c2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2RhdGE7DQorICAgIGludCBuYWx1X3R5cGUsIG5hbHVf c2l6ZTsNCisgICAgdW5zaWduZWQgY2hhciAqYml0cyA9ICh1bnNpZ25lZCBjaGFyICopYnM7DQor ICAgIGludCBiaXRzX3NpemUgPSBic19zaXplOw0KKw0KKyAgICBhdmN0eC0+Y29kZWNfaWQgPSBB Vl9DT0RFQ19JRF9FVkM7DQorDQorICAgIG5hbHVfc2l6ZSA9IHJlYWRfbmFsX3VuaXRfbGVuZ3Ro KGJpdHMsIGJpdHNfc2l6ZSwgYXZjdHgpOw0KKyAgICBpZihuYWx1X3NpemUgPT0gMCkgew0KKyAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIE5BTCB1bml0IHNpemU6 ICglZClcbiIsIG5hbHVfc2l6ZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisg ICAgYml0cyArPSBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFOw0KKyAgICBiaXRzX3NpemUgLT0g WEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCisNCisgICAgbmFsdV90eXBlID0gZ2V0X25hbHVf dHlwZShiaXRzLCBiaXRzX3NpemUsIGF2Y3R4KTsNCisNCisgICAgYml0cyArPSBFVkNfTkFMX0hF QURFUl9TSVpFOw0KKyAgICBiaXRzX3NpemUgLT0gRVZDX05BTF9IRUFERVJfU0laRTsNCisNCisg ICAgaWYgKG5hbHVfdHlwZSA9PSBYRVZEX05VVF9TUFMpIHsgLy8gTkFMIFVuaXQgdHlwZTogU1BT IChTZXF1ZW5jZSBQYXJhbWV0ZXIgU2V0KQ0KKyAgICAgICAgRVZDUGFyc2VyU1BTICpzcHM7DQor DQorICAgICAgICBzcHMgPSBwYXJzZV9zcHMoYml0cywgYml0c19zaXplLCBldik7DQorDQorICAg ICAgICBhdmN0eC0+Y29kZWRfd2lkdGggICAgICAgICA9IHNwcy0+cGljX3dpZHRoX2luX2x1bWFf c2FtcGxlczsNCisgICAgICAgIGF2Y3R4LT5jb2RlZF9oZWlnaHQgICAgICAgID0gc3BzLT5waWNf aGVpZ2h0X2luX2x1bWFfc2FtcGxlczsNCisgICAgICAgIGF2Y3R4LT53aWR0aCAgICAgICAgICAg ICAgID0gc3BzLT5waWNfd2lkdGhfaW5fbHVtYV9zYW1wbGVzOw0KKyAgICAgICAgYXZjdHgtPmhl aWdodCAgICAgICAgICAgICAgPSBzcHMtPnBpY19oZWlnaHRfaW5fbHVtYV9zYW1wbGVzOw0KKw0K KyAgICAgICAgaWYoc3BzLT5wcm9maWxlX2lkYyA9PSAwKSBhdmN0eC0+cHJvZmlsZSA9IEZGX1BS T0ZJTEVfRVZDX0JBU0VMSU5FOw0KKyAgICAgICAgZWxzZSBpZiAoc3BzLT5wcm9maWxlX2lkYyA9 PSAxKSBhdmN0eC0+cHJvZmlsZSA9IEZGX1BST0ZJTEVfRVZDX01BSU47DQorICAgICAgICBlbHNl IHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk5vdCBzdXBwb3J0 ZWQgcHJvZmlsZSAoJWQpXG4iLCBzcHMtPnByb2ZpbGVfaWRjKTsNCisgICAgICAgICAgICByZXR1 cm4gLTE7DQorICAgICAgICB9DQorDQorICAgICAgICAvLyBDdXJyZW50bHkgWEVWRCBkZWNvZGVy IHN1cHBvcnRzIG9ueSBZQ0JDUjQyMF8xMExFIGNocm9tYSBmb3JtYXQgZm9yIEVWQyBzdHJlYW0N CisgICAgICAgIHN3aXRjaChzcHMtPmNocm9tYV9mb3JtYXRfaWRjKSB7DQorICAgICAgICBjYXNl IDA6IC8qIFlDQkNSNDAwXzEwTEUgKi8NCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIllDQkNSNDAwXzEwTEU6IE5vdCBzdXBwb3J0ZWQgY2hyb21hIGZvcm1hdFxuIik7 DQorICAgICAgICAgICAgYXZjdHgtPnBpeF9mbXQgPSBBVl9QSVhfRk1UX0dSQVkxMExFOw0KKyAg ICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAgIGNhc2UgMTogLyogWUNCQ1I0MjBfMTBMRSAq Lw0KKyAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjBQMTBMRTsN CisgICAgICAgICAgICBicmVhazsNCisgICAgICAgIGNhc2UgMjogLyogWUNCQ1I0MjJfMTBMRSAq Lw0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiWUNCQ1I0MjJfMTBM RTogTm90IHN1cHBvcnRlZCBjaHJvbWEgZm9ybWF0XG4iKTsNCisgICAgICAgICAgICBhdmN0eC0+ cGl4X2ZtdCA9IEFWX1BJWF9GTVRfWVVWNDIyUDEwTEU7DQorICAgICAgICAgICAgcmV0dXJuIC0x Ow0KKyAgICAgICAgY2FzZSAzOiAvKiBZQ0JDUjQ0NF8xMExFICovDQorICAgICAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJZQ0JDUjQ0NF8xMExFOiBOb3Qgc3VwcG9ydGVkIGNo cm9tYSBmb3JtYXRcbiIpOw0KKyAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZN VF9ZVVY0NDRQMTBMRTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAgICBkZWZhdWx0 Og0KKyAgICAgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9OT05FOw0KKyAgICAg ICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiVW5rbm93biBzdXBwb3J0ZWQgY2hy b21hIGZvcm1hdFxuIik7DQorICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKw0K KyAgICAgICAgLy8gVGhlIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2YgcGFyc2Vfc3BzIGZ1bmN0 aW9uIGRvZXNuJ3QgaGFuZGxlIFZVSSBwYXJhbWV0ZXJzIHBhcnNpbmcsDQorICAgICAgICAvLyBz byBhdCB0aGUgbW9tZW50IGl0J3MgaW1wb3NzaWJsZSB0byBpbml0aWFsaXplIGhhc19iX2ZyYW1l cyBhbmQgbWF4X2JfZnJhbWVzIEFWQ29kZWNDb250ZXggZmllbGRzIGhlcmUuDQorICAgICAgICAv LyBDdXJyZW50bHksIGluaXRpYWxpemF0aW9uIG9mIGhhc19iX2ZyYW1lcyBhbmQgbWF4X2JfZnJh bWVzIEFWQ29kZWNDb250ZXggZmllbGRzIGhhdmUgYmVlbiBtb3ZlZCB0bw0KKyAgICAgICAgLy8g bGlieGV2ZF9kZWNvZGUgZnVuY3Rpb24gd2hlcmUgd2UgY2FuIHVzZSB4ZXZkX2NvbmZpZyBmdW5j dGlvbiBiZWluZyBhIHBhcnQgb2YgeGV2ZCBsaWJyYXJ5IEFQSQ0KKyAgICAgICAgLy8gdG8gZ2V0 IHRoZSBuZWVkZWQgaW5mb3JtYXRpb24uDQorICAgICAgICAvLyBIb3dldmVyLCBpZiBpdCB3aWxs IGJlIG5lZWRlZCwgcGFyc2Vfc3BzIGZ1bmN0aW9uIHNob3VsZCBiZSBleHRlbmRlZCB0byBoYW5k bGUgVlVJIHBhcmFtZXRlcnMgcGFyc2luZw0KKyAgICAgICAgLy8gYW5kIHRoZSBmb2xsb3dpbmcg bGluZXMgc2hvdWxkIGJlIHVzZWQgdG8gaW5pdGlhbGl6ZSBoYXNfYl9mcmFtZXMgYW5kIG1heF9i X2ZyYW1lcyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXguDQorICAgICAgICAvLw0KKyAgICAg ICAgLy8gc3BzLT52dWlfcGFyYW1ldGVycy5udW1fcmVvcmRlcl9waWNzDQorICAgICAgICAvLyBp ZiAoc3BzLT5iaXRzdHJlYW1fcmVzdHJpY3Rpb25fZmxhZyAmJiBzcHMtPnZ1aV9wYXJhbWV0ZXJz Lm51bV9yZW9yZGVyX3BpY3MpIHsNCisgICAgICAgIC8vICAgICBhdmN0eC0+aGFzX2JfZnJhbWVz ID0gc3BzLT52dWlfcGFyYW1ldGVycy5udW1fcmVvcmRlcl9waWNzOw0KKyAgICAgICAgLy8gfQ0K Kw0KKyAgICAgICAgZXYtPmdvdF9zcHMgPSAxOw0KKw0KKyAgICB9IGVsc2UgaWYgKG5hbHVfdHlw ZSA9PSBYRVZEX05VVF9QUFMpIC8vIE5BTCBVbml0IHR5cGU6IFBQUyAoVmlkZW8gUGFyYW1ldGVy IFNldCkNCisgICAgICAgIGV2LT5nb3RfcHBzID0gMTsNCisgICAgZWxzZSBpZihuYWx1X3R5cGUg PT0gWEVWRF9OVVRfU0VJKSAvLyBOQUwgdW5pdCB0eXBlOiBTRUkgKFN1cHBsZW1lbnRhbCBFbmhh bmNlbWVudCBJbmZvcm1hdGlvbikNCisgICAgICAgIGV2LT5nb3Rfc2VpID0gMTsNCisgICAgZWxz ZSBpZiAobmFsdV90eXBlID09IFhFVkRfTlVUX0lEUiB8fCBuYWx1X3R5cGUgPT0gWEVWRF9OVVRf Tk9OSURSKSAvLyBOQUwgVW5pdCB0eXBlOiBDb2RlZCBzbGljZSBvZiBhIElEUiBvciBub24tSURS IHBpY3R1cmUNCisgICAgICAgIGV2LT5nb3Rfc2xpY2UrKzsNCisgICAgZWxzZSB7DQorICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgTkFMIHVuaXQgdHlwZTogJWRc biIsIG5hbHVfdHlwZSk7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisNCisgICAgcmV0 dXJuIDA7DQorfQ0KKw0KKy8qKg0KKyAqIEZpbmQgdGhlIGVuZCBvZiB0aGUgY3VycmVudCBmcmFt ZSBpbiB0aGUgYml0c3RyZWFtLg0KKyAqIEByZXR1cm4gdGhlIHBvc2l0aW9uIG9mIHRoZSBmaXJz dCBieXRlIG9mIHRoZSBuZXh0IGZyYW1lLCBvciBFTkRfTk9UX0ZPVU5EDQorICovDQorc3RhdGlj IGludCBldmNfZmluZF9mcmFtZV9lbmQoQVZDb2RlY1BhcnNlckNvbnRleHQgKnMsIGNvbnN0IHVp bnQ4X3QgKmJ1ZiwNCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgYnVmX3NpemUs IEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIEVWQ1BhcnNlckNvbnRleHQgKmV2ID0g cy0+cHJpdl9kYXRhOw0KKw0KKyAgICBpZighZXYtPnRvX3JlYWQpIHsNCisgICAgICAgIGludCBu YWxfdW5pdF9zaXplID0gMDsNCisgICAgICAgIGludCBuZXh0ID0gRU5EX05PVF9GT1VORDsNCisN CisgICAgICAgIC8vIFRoaXMgaXMgdGhlIGNhc2Ugd2hlbiBidWZmZXIgc2l6ZSBpcyBub3QgZW5v dWdoIGZvciBidWZmZXIgdG8gc3RvcmUgTkFMIHVuaXQgbGVuZ3RoDQorICAgICAgICBpZihidWZf c2l6ZSA8IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsNCisgICAgICAgICAgICBldi0+dG9f cmVhZCA9IFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorICAgICAgICAgICAgZXYtPm5hbF9s ZW5ndGhfc2l6ZSA9IGJ1Zl9zaXplOw0KKyAgICAgICAgICAgIGV2LT5pbmNvbXBsZXRlX25hbHVf cHJlZml4X3JlYWQgID0gMTsNCisNCisgICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VORDsN CisgICAgICAgIH0NCisNCisgICAgICAgIG5hbF91bml0X3NpemUgPSByZWFkX25hbF91bml0X2xl bmd0aChidWYsIGJ1Zl9zaXplLCBhdmN0eCk7DQorICAgICAgICBldi0+bmFsX2xlbmd0aF9zaXpl ID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCisNCisgICAgICAgIG5leHQgPSBuYWxfdW5p dF9zaXplICsgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgICAgIGV2LT50b19yZWFk ID0gbmV4dDsNCisgICAgICAgIGlmKG5leHQgPCBidWZfc2l6ZSkNCisgICAgICAgICAgICByZXR1 cm4gbmV4dDsNCisgICAgICAgIGVsc2UNCisgICAgICAgICAgICByZXR1cm4gRU5EX05PVF9GT1VO RDsNCisgICAgfSBlbHNlIGlmKGV2LT50b19yZWFkID4gYnVmX3NpemUpIHsNCisgICAgICAgIHJl dHVybiBFTkRfTk9UX0ZPVU5EOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgaWYoZXYtPmluY29t cGxldGVfbmFsdV9wcmVmaXhfcmVhZCAgPT0gMSkgew0KKyAgICAgICAgICAgIEVWQ1BhcnNlckNv bnRleHQgKmV2ID0gcy0+cHJpdl9kYXRhOw0KKyAgICAgICAgICAgIFBhcnNlQ29udGV4dCAqcGMg PSAmZXYtPnBjOw0KKyAgICAgICAgICAgIHVpbnQ4X3QgbmFsdV9sZW5bWEVWRF9OQUxfVU5JVF9M RU5HVEhfQllURV0gPSB7MH07DQorICAgICAgICAgICAgaW50IG5hbF91bml0X3NpemUgPSAwOw0K Kw0KKyAgICAgICAgICAgIC8vIDEuIHBjLT5idWZmZXIgY29udGFpbnMgcHJldmlvdXNseSByZWFk IGJ5dGVzIG9mIE5BTFUgcHJlZml4DQorICAgICAgICAgICAgLy8gMi4gYnVmIGNvbnRhaW5zIHRo ZSByZXN0IG9mIE5BTCB1bml0IHByZWZpeCBieXRlcw0KKyAgICAgICAgICAgIC8vDQorICAgICAg ICAgICAgLy8gfn5+fn5+fg0KKyAgICAgICAgICAgIC8vIEVYQU1QTEUNCisgICAgICAgICAgICAv LyB+fn5+fn5+DQorICAgICAgICAgICAgLy8NCisgICAgICAgICAgICAvLyBJbiB0aGUgZm9sbG93 aW5nIGV4YW1wbGUgd2UgYXNzdW1lZCB0aGF0IHRoZSBudW1iZXIgb2YgYWxyZWFkeSByZWFkIE5B TCBVbml0IHByZWZpeCBieXRlcyBpcyBlcXVhbCAxDQorICAgICAgICAgICAgLy8NCisgICAgICAg ICAgICAvLyAtLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gcGMtPmJ1ZmZlciAtPiBjb25hdGlu cyBhbHJlYWR5IHJlYWQgYnl0ZXMNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tDQorICAgICAg ICAgICAgLy8gICAgICAgICAgICAgIF9fIHBjLT5pbmRleCA9PSAxDQorICAgICAgICAgICAgLy8g ICAgICAgICAgICAgfA0KKyAgICAgICAgICAgIC8vICAgICAgICAgICAgIFYNCisgICAgICAgICAg ICAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tDQorICAgICAgICAgICAgLy8gfCAgIDAgICB8ICAgMSAgIHwgICAyICAgfCAgIDMgICB8ICAg NCAgIHwgLi4uIHwgICBOICAgfA0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAw eDAwIHwgIDB4WFggfCAgMHhYWCB8ICAweFhYIHwgIDB4WFggfCAuLi4gfCAgMHhYWCB8DQorICAg ICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vDQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLQ0K KyAgICAgICAgICAgIC8vIGJ1ZiAtPiBjb250YWlucyBuZXdseSByZWFkIGJ5dGVzDQorICAgICAg ICAgICAgLy8gLS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCisgICAgICAgICAgICAvLyB8ICAg MCAgIHwgICAxICAgfCAgIDIgICB8ICAgMyAgIHwgICA0ICAgfCAuLi4gfCAgIE4gICB8DQorICAg ICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLQ0KKyAgICAgICAgICAgIC8vIHwgIDB4MDAgfCAgMHgwMCB8ICAweDNDIHwgIDB4 WFggfCAgMHhYWCB8IC4uLiB8ICAweFhYIHwNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAg Ly8NCisgICAgICAgICAgICBmb3IoaW50IGkgPSAwOyBpIDwgWEVWRF9OQUxfVU5JVF9MRU5HVEhf QllURTsgaSsrKSB7DQorICAgICAgICAgICAgICAgIGlmKGkgPCBwYy0+aW5kZXgpDQorICAgICAg ICAgICAgICAgICAgICBuYWx1X2xlbltpXSA9IHBjLT5idWZmZXJbaV07DQorICAgICAgICAgICAg ICAgIGVsc2UNCisgICAgICAgICAgICAgICAgICAgIG5hbHVfbGVuW2ldID0gYnVmW2kgLSBwYy0+ aW5kZXhdOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tDQor ICAgICAgICAgICAgLy8gbmFsdV9sZW4NCisgICAgICAgICAgICAvLyAtLS0tLS0tLS0tDQorICAg ICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAg ICAgLy8gfCAgIDAgICB8ICAgMSAgIHwgICAyICAgfCAgIDMgICB8DQorICAgICAgICAgICAgLy8g LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gfCAgMHgw MCB8ICAweDAwIHwgIDB4MDAgfCAgMHgzQyB8DQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gfCBOQUxVIExFTkdUSCAgICAg ICAgICAgICAgICAgICB8DQorICAgICAgICAgICAgLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tDQorICAgICAgICAgICAgLy8gTkFMIFVuaXQgbGVuZ2h0ID0gIDYwICgweDAwMDAw MDNDKQ0KKw0KKyAgICAgICAgICAgIG5hbF91bml0X3NpemUgPSByZWFkX25hbF91bml0X2xlbmd0 aChuYWx1X2xlbiwgWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURSwgYXZjdHgpOw0KKw0KKyAgICAg ICAgICAgIGV2LT50b19yZWFkID0gbmFsX3VuaXRfc2l6ZSArIFhFVkRfTkFMX1VOSVRfTEVOR1RI X0JZVEUgLSBwYy0+aW5kZXg7DQorDQorICAgICAgICAgICAgZXYtPmluY29tcGxldGVfbmFsdV9w cmVmaXhfcmVhZCA9IDA7DQorDQorICAgICAgICAgICAgaWYoZXYtPnRvX3JlYWQgPiBidWZfc2l6 ZSkNCisgICAgICAgICAgICAgICAgcmV0dXJuIEVORF9OT1RfRk9VTkQ7DQorICAgICAgICAgICAg ZWxzZQ0KKyAgICAgICAgICAgICAgICByZXR1cm4gZXYtPnRvX3JlYWQ7DQorICAgICAgICB9DQor ICAgICAgICByZXR1cm4gZXYtPnRvX3JlYWQ7DQorICAgIH0NCisNCisgICAgcmV0dXJuIEVORF9O T1RfRk9VTkQ7DQorfQ0KKw0KK3N0YXRpYyBpbnQgZXZjX3BhcnNlcl9pbml0KEFWQ29kZWNQYXJz ZXJDb250ZXh0ICpzKQ0KK3sNCisgICAgRVZDUGFyc2VyQ29udGV4dCAqZXYgPSBzLT5wcml2X2Rh dGE7DQorDQorICAgIGV2LT5nb3Rfc3BzID0gMDsNCisgICAgZXYtPmdvdF9wcHMgPSAwOw0KKyAg ICBldi0+Z290X3NlaSA9IDA7DQorICAgIGV2LT5nb3Rfc2xpY2UgPSAwOw0KKyAgICBldi0+bmFs X2xlbmd0aF9zaXplID0gWEVWRF9OQUxfVU5JVF9MRU5HVEhfQllURTsNCisgICAgZXYtPmluY29t cGxldGVfbmFsdV9wcmVmaXhfcmVhZCA9IDA7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitz dGF0aWMgaW50IGV2Y19wYXJzZShBVkNvZGVjUGFyc2VyQ29udGV4dCAqcywgQVZDb2RlY0NvbnRl eHQgKmF2Y3R4LA0KKyAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHVpbnQ4X3QgKipwb3V0YnVm LCBpbnQgKnBvdXRidWZfc2l6ZSwNCisgICAgICAgICAgICAgICAgICAgICBjb25zdCB1aW50OF90 ICpidWYsIGludCBidWZfc2l6ZSkNCit7DQorICAgIGludCBuZXh0Ow0KKyAgICBFVkNQYXJzZXJD b250ZXh0ICpldiA9IHMtPnByaXZfZGF0YTsNCisgICAgUGFyc2VDb250ZXh0ICpwYyA9ICZldi0+ cGM7DQorICAgIGludCBpc19kdW1teV9idWYgPSAhYnVmX3NpemU7DQorICAgIGNvbnN0IHVpbnQ4 X3QgKmR1bW15X2J1ZiA9IGJ1ZjsNCisNCisgICAgaWYgKHMtPmZsYWdzICYgUEFSU0VSX0ZMQUdf Q09NUExFVEVfRlJBTUVTKQ0KKyAgICAgICAgbmV4dCA9IGJ1Zl9zaXplOw0KKyAgICBlbHNlIHsN CisgICAgICAgIG5leHQgPSBldmNfZmluZF9mcmFtZV9lbmQocywgYnVmLCBidWZfc2l6ZSwgYXZj dHgpOw0KKyAgICAgICAgaWYgKGZmX2NvbWJpbmVfZnJhbWUocGMsIG5leHQsICZidWYsICZidWZf c2l6ZSkgPCAwKSB7DQorICAgICAgICAgICAgKnBvdXRidWYgICAgICA9IE5VTEw7DQorICAgICAg ICAgICAgKnBvdXRidWZfc2l6ZSA9IDA7DQorICAgICAgICAgICAgZXYtPnRvX3JlYWQgLT0gYnVm X3NpemU7DQorICAgICAgICAgICAgcmV0dXJuIGJ1Zl9zaXplOw0KKyAgICAgICAgfQ0KKyAgICB9 DQorDQorICAgIGlzX2R1bW15X2J1ZiAmPSAoZHVtbXlfYnVmID09IGJ1Zik7DQorDQorICAgIGlm ICghaXNfZHVtbXlfYnVmKQ0KKyAgICAgICAgcGFyc2VfbmFsX3VuaXRzKHMsIGJ1ZiwgYnVmX3Np emUsIGF2Y3R4KTsNCisNCisgICAgKnBvdXRidWYgICAgICA9IGJ1ZjsNCisgICAgKnBvdXRidWZf c2l6ZSA9IGJ1Zl9zaXplOw0KKyAgICBldi0+dG9fcmVhZCAtPSBuZXh0Ow0KKw0KKyAgICByZXR1 cm4gbmV4dDsNCit9DQorDQorQVZDb2RlY1BhcnNlciBmZl9ldmNfcGFyc2VyID0gew0KKyAgICAu Y29kZWNfaWRzICAgICAgPSB7IEFWX0NPREVDX0lEX0VWQyB9LA0KKyAgICAucHJpdl9kYXRhX3Np emUgPSBzaXplb2YoRVZDUGFyc2VyQ29udGV4dCksDQorICAgIC5wYXJzZXJfaW5pdCAgICA9IGV2 Y19wYXJzZXJfaW5pdCwNCisgICAgLnBhcnNlcl9wYXJzZSAgID0gZXZjX3BhcnNlLA0KKyAgICAu cGFyc2VyX2Nsb3NlICAgPSBmZl9wYXJzZV9jbG9zZSwNCit9Ow0KZGlmZiAtLWdpdCBhL2xpYmF2 Y29kZWMvbGlieGV2ZC5jIGIvbGliYXZjb2RlYy9saWJ4ZXZkLmMNCm5ldyBmaWxlIG1vZGUgMTAw NjQ0DQppbmRleCAwMDAwMDAwMDAwLi5lOGQ0ZWFlNzNhDQotLS0gL2Rldi9udWxsDQorKysgYi9s aWJhdmNvZGVjL2xpYnhldmQuYw0KQEAgLTAsMCArMSw0NDMgQEANCisvKg0KKyAqIGxpYnhldmQg ZGVjb2Rlcg0KKyAqIEVWQyAoTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGRlY29kaW5n IHVzaW5nIFhFVkQgTVBFRy01IEVWQyBkZWNvZGVyIGxpYnJhcnkNCisgKg0KKyAqIENvcHlyaWdo dCAoQykgMjAyMSBEYXdpZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0K KyAqIFRoaXMgZmlsZSBpcyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVl IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQg dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGlj ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy DQorICogdmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55 IGxhdGVyIHZlcnNpb24uDQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7 IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElU WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICog TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAq IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh bCBQdWJsaWMNCisgKiBMaWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRv IHRoZSBGcmVlIFNvZnR3YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNp ZiBkZWZpbmVkKF9NU0NfVkVSKQ0KKyNkZWZpbmUgWEVWRF9BUElfSU1QT1JUUyAxDQorI2VuZGlm DQorDQorI2luY2x1ZGUgPGZsb2F0Lmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpbmNs dWRlIDx4ZXZkLmg+DQorDQorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIg0KKyNpbmNs dWRlICJsaWJhdnV0aWwvY29tbW9uLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCINCisj aW5jbHVkZSAibGliYXZ1dGlsL3BpeGRlc2MuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZt dC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwvaW1ndXRpbHMuaCINCisNCisjaW5jbHVkZSAiYXZj b2RlYy5oIg0KKyNpbmNsdWRlICJpbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJwYWNrZXRfaW50ZXJu YWwuaCINCisNCisjZGVmaW5lIFhFVkRfUEFSQU1fQkFEX05BTUUgLTENCisjZGVmaW5lIFhFVkRf UEFSQU1fQkFEX1ZBTFVFIC0yDQorDQorI2RlZmluZSBFVkNfTkFMX0hFQURFUl9TSVpFIDIgLyog Ynl0ZSAqLw0KKw0KKy8qKg0KKyAqIFRoZSBzdHJ1Y3R1cmUgc3RvcmVzIGFsbCB0aGUgc3RhdGVz IGFzc29jaWF0ZWQgd2l0aCB0aGUgaW5zdGFuY2Ugb2YgWGV2ZSBNUEVHLTUgRVZDIGRlY29kZXIN CisgKiBUaGUgZmlyc3QgZmllbGQgaXMgYSBwb2ludGVyIHRvIGFuIEFWQ2xhc3Mgc3RydWN0IChA c2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2VuL3RydW5rL3N0cnVjdEFWQ2xhc3MuaHRtbCNk ZXRhaWxzKS4NCisgKi8NCit0eXBlZGVmIHN0cnVjdCBYZXZkQ29udGV4dCB7DQorICAgIGNvbnN0 IEFWQ2xhc3MgKmNsYXNzOw0KKw0KKyAgICBYRVZEIGlkOyAgICAgICAgICAgIC8vIFhFVkQgaW5z dGFuY2UgaWRlbnRpZmllciBAc2VlIHhldmQuaA0KKyAgICBYRVZEX0NEU0MgY2RzYzsgICAgIC8v IGRlY29kaW5nIHBhcmFtZXRlcnMgQHNlZSB4ZXZkLmgNCisNCisgICAgaW50IGRlY29kX2ZyYW1l czsgICAvLyBudW1iZXIgb2YgZGVjb2RlZCBmcmFtZXMNCisgICAgaW50IHBhY2tldF9jb3VudDsg ICAvLyBudW1iZXIgb2YgcGFja2V0cyBjcmVhdGVkIGJ5IGRlY29kZXINCisNCisgICAgLy8gY29u ZmlndXJhdGlvbiBwYXJhbWV0ZXJzDQorICAgIEFWRGljdGlvbmFyeSAqeGV2ZF9vcHRzOyAvLyB4 ZXZkIGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGEgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFs dWUgcGFyYW1ldGVycw0KKw0KK30gWGV2ZENvbnRleHQ7DQorDQorLyoqDQorICogVGhlIGZ1bmN0 aW9uIHJldHVybnMgYSBwb2ludGVyIHRvIGEgdmFyaWFibGUgb2YgdHlwZSBYRVZEX0NEU0MuDQor ICogWEVWRF9DRFNDIGNvbnRhaW5zIGFsbCBkZWNvZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQg YmUgaW5pdGlhbGl6ZWQgYmVmb3JlIGl0cyB1c2UuDQorICoNCisgKiBUaGUgZmllbGQgdmFsdWVz IG9mIHRoZSBYRVZEX0NEU0Mgc3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246DQorICog LSB0aGUgY29ycmVzcG9uZGluZyBmaWVsZCB2YWx1ZXMgb2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0 cnVjdHVyZSwNCisgKiAtIHRoZSB4ZXZkIGRlY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywN CisgKiAgICh0aGUgZnVsbCBsaXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB0aGUgeGV2ZCBl bmNvZGVyIGlzIGRpc3BsYXllZCBhZnRlciBleGVjdXRpbmcgdGhlIGNvbW1hbmQgLi9mZm1wZWcg LS1oZWxwIGRlY29kZXIgPSBsaWJ4ZXZkKQ0KKyAqIC0gYW5kIHRoZSB4ZXZkIGVuY29kZXIgb3B0 aW9ucyBzcGVjaWZpZWQgYXMgYSBsaXN0IG9mIGtleS12YWx1ZSBwYWlycyBmb2xsb3dpbmcgdGhl IHhldmQtcGFyYW1zIG9wdGlvbg0KKyAqDQorICogT3JkZXIgb2YgaW5wdXQgcHJvY2Vzc2luZyBh bmQgcG9wdWxhdGluZyB0aGUgWEVWRF9DRFNDIHN0cnVjdHVyZQ0KKyAqIDEuIGZpcnN0LCB0aGUg Y29ycmVzcG9uZGluZyBmaWVsZHMgb2YgdGhlIEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBhcmUg cHJvY2Vzc2VkLCAoaS5lIC10aHJlYWRzIDQpDQorICogMi4gdGhlbiB4ZXZkLXNwZWNpZmljIG9w dGlvbnMgYXJlIGFkZGVkIGFzIEFWT3B0aW9uIHRvIHRoZSB4ZXZkIEFWQ29kZWMgaW1wbGVtZW50 YXRpb24gKGkuZSAtdGhyZWFkcyAzKQ0KKyAqIDMuIGZpbmFsbHksIHRoZSBvcHRpb25zIHNwZWNp ZmllZCBhZnRlciB0aGUgeGV2ZC1wYXJhbXMgb3B0aW9uIGFzIHRoZSBwYXJhbWV0ZXIgbGlzdCBv ZiB0eXBlIGtleSB2YWx1ZSBhcmUgcHJvY2Vzc2VkIChpLmUgLXhldmQtcGFyYW1zICJtPTIiKQ0K KyAqDQorICogU29tZSBvcHRpb25zIGNhbiBiZSBzZXQgaW4gZGlmZmVyZW50IHdheXMuIEluIHRo aXMgY2FzZSwgcGxlYXNlIGZvbGxvdyB0aGUgYWJvdmUtbWVudGlvbmVkIG9yZGVyIG9mIHByb2Nl c3NpbmcuDQorICogVGhlIG1vc3QgcmVjZW50IGFzc2lnbm1lbnRzIG92ZXJ3cml0ZSB0aGUgcHJl dmlvdXMgdmFsdWVzLg0KKyAqDQorICogQHBhcmFtW2luXSBhdmN0eCBjb2RlYyBjb250ZXh0DQor ICogQHBhcmFtW291dF0gY2RzYyBjb250YWlucyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQg c2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlDQorICoNCisgKiBAcmV0dXJuIDAg b24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGlj IGludCBnZXRfY29uZihBVkNvZGVjQ29udGV4dCAqYXZjdHgsIFhFVkRfQ0RTQyAqY2RzYykNCit7 DQorICAgIGludCBjcHVfY291bnQgPSBhdl9jcHVfY291bnQoKTsNCisNCisgICAgLyogY2xlYXIg WEVWU19DRFNDIHN0cnVjdHVyZSAqLw0KKyAgICBtZW1zZXQoY2RzYywgMCwgc2l6ZW9mKFhFVkRf Q0RTQykpOw0KKw0KKyAgICAvKiBpbml0IFhFVkRfQ0RTQyAqLw0KKyAgICBpZihhdmN0eC0+dGhy ZWFkX2NvdW50IDw9IDApDQorICAgICAgICBjZHNjLT50aHJlYWRzID0gKGNwdV9jb3VudCA8IFhF VkRfTUFYX1RBU0tfQ05UKSA/IGNwdV9jb3VudCA6IFhFVkRfTUFYX1RBU0tfQ05UOw0KKyAgICBl bHNlIGlmKGF2Y3R4LT50aHJlYWRfY291bnQgPiBYRVZEX01BWF9UQVNLX0NOVCkNCisgICAgICAg IGNkc2MtPnRocmVhZHMgPSBYRVZEX01BWF9UQVNLX0NOVDsNCisgICAgZWxzZQ0KKyAgICAgICAg Y2RzYy0+dGhyZWFkcyA9IGF2Y3R4LT50aHJlYWRfY291bnQ7DQorDQorICAgIHJldHVybiBYRVZE X09LOw0KK30NCisNCisvKioNCisgKiBSZWFkIE5BTCB1bml0IGxlbmd0aA0KKyAqIEBwYXJhbSBi cyBpbnB1dCBkYXRhIChiaXRzdHJlYW0pDQorICogQHJldHVybiB0aGUgbGVuZ3RoIG9mIE5BTCB1 bml0IG9uIHN1Y2Nlc3MsIDAgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0KK3N0YXRpYyB1aW50MzJf dCByZWFkX25hbF91bml0X2xlbmd0aChjb25zdCB1aW50OF90ICpicywgaW50IGJzX3NpemUsIEFW Q29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIHVpbnQzMl90IGxlbiA9IDA7DQorICAgIFhF VkRfSU5GTyBpbmZvOw0KKyAgICBpbnQgcmV0Ow0KKw0KKyAgICBpZihic19zaXplID09IFhFVkRf TkFMX1VOSVRfTEVOR1RIX0JZVEUpIHsNCisgICAgICAgIHJldCA9IHhldmRfaW5mbygodm9pZCAq KWJzLCBYRVZEX05BTF9VTklUX0xFTkdUSF9CWVRFLCAxLCAmaW5mbyk7DQorICAgICAgICBpZiAo WEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiQ2Fubm90IGdldCBiaXRzdHJlYW0gaW5mb3JtYXRpb25cbiIpOw0KKyAgICAgICAgICAg IHJldHVybiAwOw0KKyAgICAgICAgfQ0KKyAgICAgICAgbGVuID0gaW5mby5uYWx1X2xlbjsNCisg ICAgICAgIGlmKGxlbiA9PSAwKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df RVJST1IsICJJbnZhbGlkIGJpdHN0cmVhbSBzaXplISBbJWRdXG4iLCBic19zaXplKTsNCisgICAg ICAgICAgICByZXR1cm4gMDsNCisgICAgICAgIH0NCisgICAgfQ0KKw0KKyAgICByZXR1cm4gbGVu Ow0KK30NCisNCisvKioNCisgKiBAcGFyYW1baW5dIHhlY3R4IHRoZSBzdHJ1Y3R1cmUgdGhhdCBz dG9yZXMgYWxsIHRoZSBzdGF0ZSBhc3NvY2lhdGVkIHdpdGggdGhlIGluc3RhbmNlIG9mIFhldmUg TVBFRy01IEVWQyBkZWNvZGVyDQorICogQHBhcmFtW291dF0gYXZjdHggY29kZWMgY29udGV4dA0K KyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQorICov DQorc3RhdGljIGludCBleHBvcnRfc3RyZWFtX3BhcmFtcyhjb25zdCBYZXZkQ29udGV4dCAqeGVj dHgsIEFWQ29kZWNDb250ZXh0ICphdmN0eCkNCit7DQorICAgIGludCByZXQ7DQorICAgIGludCBz aXplOw0KKyAgICBpbnQgY29sb3Jfc3BhY2U7DQorDQorICAgIGF2Y3R4LT5waXhfZm10ID0gQVZf UElYX0ZNVF9ZVVY0MjBQMTA7DQorDQorICAgIHNpemUgPSA0Ow0KKyAgICByZXQgPSB4ZXZkX2Nv bmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9XSURUSCwgJmF2Y3R4LT5jb2RlZF93 aWR0aCwgJnNpemUpOw0KKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZf bG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IGNvZGVkX3dpZHRoXG4iKTsN CisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4 ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0RFRF9IRUlHSFQsICZhdmN0eC0+Y29kZWRfaGVpZ2h0 LCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgY29kZWRfaGVpZ2h0XG4iKTsNCisg ICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0 eC0+aWQsIFhFVkRfQ0ZHX0dFVF9XSURUSCwgJmF2Y3R4LT53aWR0aCwgJnNpemUpOw0KKyAgICBp ZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJGYWlsZWQgdG8gZ2V0IHdpZHRoXG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAg fQ0KKw0KKyAgICByZXQgPSB4ZXZkX2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9IRUlH SFQsICZhdmN0eC0+aGVpZ2h0LCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7 DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgaGVp Z2h0XG4iKTsNCisgICAgICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZk X2NvbmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9DT0xPUl9TUEFDRSwgJmNvbG9yX3NwYWNl LCAmc2l6ZSk7DQorICAgIGlmIChYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBnZXQgY29sb3Jfc3BhY2VcbiIpOw0KKyAg ICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorICAgIHN3aXRjaChjb2xvcl9zcGFjZSkgew0KKyAg ICBjYXNlIFhFVkRfQ1NfWUNCQ1I0MDBfMTBMRToNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0g QVZfUElYX0ZNVF9HUkFZMTBMRTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1Nf WUNCQ1I0MjBfMTBMRToNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0 MjBQMTBMRTsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0MjJfMTBM RToNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0MjJQMTBMRTsNCisg ICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIFhFVkRfQ1NfWUNCQ1I0NDRfMTBMRToNCisgICAgICAg IGF2Y3R4LT5waXhfZm10ID0gQVZfUElYX0ZNVF9ZVVY0NDRQMTBMRTsNCisgICAgICAgIGJyZWFr Ow0KKyAgICBkZWZhdWx0Og0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJV bmtub3duIGNvbG9yIHNwYWNlXG4iKTsNCisgICAgICAgIGF2Y3R4LT5waXhfZm10ID0gQVZfUElY X0ZNVF9OT05FOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIC8vIHRoZSBm dW5jdGlvbiByZXR1cm5zIHNwcy0+bnVtX3Jlb3JkZXJfcGljcw0KKyAgICByZXQgPSB4ZXZkX2Nv bmZpZyh4ZWN0eC0+aWQsIFhFVkRfQ0ZHX0dFVF9NQVhfQ09ESU5HX0RFTEFZLCAmYXZjdHgtPm1h eF9iX2ZyYW1lcywgJnNpemUpOw0KKyAgICBpZiAoWEVWRF9GQUlMRUQocmV0KSkgew0KKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZ2V0IG1heF9jb2Rpbmdf ZGVsYXlcbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIGF2Y3R4LT5o YXNfYl9mcmFtZXMgPSAoYXZjdHgtPm1heF9iX2ZyYW1lcykgPyAxIDogMDsNCisNCisgICAgYXZj dHgtPmNvbG9yX3ByaW1hcmllcyA9IEFWQ09MX1BSSV9VTlNQRUNJRklFRDsNCisgICAgYXZjdHgt PmNvbG9yX3RyYyAgICAgICA9IEFWQ09MX1RSQ19VTlNQRUNJRklFRDsNCisgICAgYXZjdHgtPmNv bG9yc3BhY2UgICAgICA9IEFWQ09MX1NQQ19VTlNQRUNJRklFRDsNCisNCisgICAgcmV0dXJuIDA7 DQorfQ0KKw0KKy8qKg0KKyAqIEluaXRpYWxpemUgZGVjb2Rlcg0KKyAqIENyZWF0ZSBhIGRlY29k ZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVlZGVkIHJlc291cmNlcw0KKyAqDQor ICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGF2X2NvbGQgaW50 IGxpYnhldmRfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBYZXZkQ29udGV4 dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpbnQgdmFsID0gMDsNCisgICAgWEVW RF9DRFNDICpjZHNjID0gJih4ZWN0eC0+Y2RzYyk7DQorDQorICAgIC8qIHJlYWQgY29uZmlndXJh dGlvbnMgYW5kIHNldCB2YWx1ZXMgZm9yIGNyZWF0ZWQgZGVzY3JpcHRvciAoWEVWRF9DRFNDKSAq Lw0KKyAgICB2YWwgPSBnZXRfY29uZihhdmN0eCwgY2RzYyk7DQorICAgIGlmICh2YWwgIT0gWEVW RF9PSykgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgZ2V0 IGNvbmZpZ3VyYXRpb25cbiIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAg IC8qIGNyZWF0ZSBkZWNvZGVyICovDQorICAgIHhlY3R4LT5pZCA9IHhldmRfY3JlYXRlKCYoeGVj dHgtPmNkc2MpLCBOVUxMKTsNCisgICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90IGNyZWF0ZSBYRVZEIGVuY29kZXJc biIpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHhlY3R4LT5wYWNrZXRf Y291bnQgPSAwOw0KKyAgICB4ZWN0eC0+ZGVjb2RfZnJhbWVzID0gMDsNCisNCisgICAgcmV0dXJu IDA7DQorfQ0KKw0KKy8qKg0KKyAgKiBEZWNvZGUgcGljdHVyZQ0KKyAgKg0KKyAgKiBAcGFyYW0g YXZjdHggY29kZWMgY29udGV4dA0KKyAgKiBAcGFyYW1bb3V0XSBkYXRhIGRlY29kZWQgZnJhbWUN CisgICogQHBhcmFtW291dF0gZ290X2ZyYW1lIGRlY29kZXIgc2V0cyB0byAwIG9yIDEgdG8gaW5k aWNhdGUgdGhhdCBhDQorICAqICAgICAgICAgICAgICAgICAgICAgICBub24tZW1wdHkgZnJhbWUg b3Igc3VidGl0bGUgd2FzIHJldHVybmVkIGluDQorICAqICAgICAgICAgICAgICAgICAgICAgICBv dXRkYXRhLg0KKyAgKiBAcGFyYW1baW5dIHBrdCBBVlBhY2tldCBjb250YWluaW5nIGVuY29kZWQg ZGF0YSB0byBiZSBkZWNvZGVkDQorICAqDQorICAqIEByZXR1cm4gYW1vdW50IG9mIGJ5dGVzIHJl YWQgZnJvbSB0aGUgcGFja2V0IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yDQorICAqICAgICAg ICAgY29kZSBvbiBmYWlsdXJlDQorICAqLw0KK3N0YXRpYyBpbnQgbGlieGV2ZF9kZWNvZGUoQVZD b2RlY0NvbnRleHQgKmF2Y3R4LCB2b2lkICpkYXRhLCBpbnQgKmdvdF9mcmFtZSwgQVZQYWNrZXQg KnBrdCkNCit7DQorICAgIEFWRnJhbWUgKmZyYW1lID0gZGF0YTsNCisgICAgWGV2ZENvbnRleHQg KnhlY3R4ID0gTlVMTDsNCisgICAgWEVWRF9JTUdCICppbWdiID0gTlVMTDsNCisgICAgWEVWRF9T VEFUIHN0YXQ7DQorICAgIFhFVkRfQklUQiBiaXRiOw0KKyAgICBpbnQgcmV0LCBuYWx1X3NpemUs IGJzX3JlYWRfcG9zOw0KKw0KKyAgICBpZihhdmN0eCA9PSBOVUxMKSB7DQorICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgaW5wdXQgcGFyYW1ldGVyOiBBVkNvZGVj Q29udGV4dFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisgICAgeGVjdHggPSBh dmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpZih4ZWN0eCA9PSBOVUxMKSB7DQorICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRCBjb250ZXh0XG4iKTsNCisgICAg ICAgIHJldHVybiAtMTsNCisgICAgfQ0KKw0KKyAgICBpZihwa3QtPnNpemUgPiAwKSB7DQorICAg ICAgICBic19yZWFkX3BvcyA9IDA7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgICAgIHdo aWxlKHBrdC0+c2l6ZSA+IChic19yZWFkX3BvcyArIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUp KSB7DQorDQorICAgICAgICAgICAgbWVtc2V0KCZzdGF0LCAwLCBzaXplb2YoWEVWRF9TVEFUKSk7 DQorICAgICAgICAgICAgbWVtc2V0KCZiaXRiLCAwLCBzaXplb2YoWEVWRF9CSVRCKSk7DQorDQor ICAgICAgICAgICAgbmFsdV9zaXplID0gcmVhZF9uYWxfdW5pdF9sZW5ndGgocGt0LT5kYXRhICsg YnNfcmVhZF9wb3MsIFhFVkRfTkFMX1VOSVRfTEVOR1RIX0JZVEUsIGF2Y3R4KTsNCisgICAgICAg ICAgICBpZihuYWx1X3NpemUgPT0gMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkludmFsaWQgYml0c3RyZWFtXG4iKTsNCisgICAgICAgICAgICAgICAg Z290byBFUlI7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgICAgIGJzX3JlYWRfcG9zICs9IFhF VkRfTkFMX1VOSVRfTEVOR1RIX0JZVEU7DQorDQorICAgICAgICAgICAgYml0Yi5hZGRyID0gcGt0 LT5kYXRhICsgYnNfcmVhZF9wb3M7DQorICAgICAgICAgICAgYml0Yi5zc2l6ZSA9IG5hbHVfc2l6 ZTsNCisNCisgICAgICAgICAgICAvKiBtYWluIGRlY29kaW5nIGJsb2NrICovDQorICAgICAgICAg ICAgcmV0ID0geGV2ZF9kZWNvZGUoeGVjdHgtPmlkLCAmYml0YiwgJnN0YXQpOw0KKyAgICAgICAg ICAgIGlmKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gZGVjb2RlIGJpdHN0cmVhbVxuIik7DQorICAgICAg ICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBic19y ZWFkX3BvcyArPSBuYWx1X3NpemU7DQorDQorICAgICAgICAgICAgaWYoc3RhdC5uYWx1X3R5cGUg PT0gWEVWRF9OVVRfU1BTKSB7IC8vIEVWQyBzdHJlYW0gcGFyYW1ldGVycyBjaGFuZ2VkDQorICAg ICAgICAgICAgICAgIGlmKGV4cG9ydF9zdHJlYW1fcGFyYW1zKHhlY3R4LCBhdmN0eCkgIT0gMCkN CisgICAgICAgICAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAgICAgIH0NCisNCisgICAg ICAgICAgICBpZihzdGF0LnJlYWQgIT0gbmFsdV9zaXplKQ0KKyAgICAgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19JTkZPLCAiRGlmZmVyZW50IHJlYWRpbmcgb2YgYml0c3RyZWFtIChp bjolZCwgcmVhZDolZClcbiwiLCBuYWx1X3NpemUsIHN0YXQucmVhZCk7DQorICAgICAgICAgICAg aWYoc3RhdC5mbnVtID49IDApIHsNCisgICAgICAgICAgICAgICAgaWYgKGltZ2IpIHsgLyogYWxy ZWFkeSBoYXMgYSBkZWNvZGVkIGltYWdlICovDQorICAgICAgICAgICAgICAgICAgICBpbWdiLT5y ZWxlYXNlKGltZ2IpOw0KKyAgICAgICAgICAgICAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgICAg ICAgICAgICAgIH0NCisgICAgICAgICAgICAgICAgcmV0ID0geGV2ZF9wdWxsKHhlY3R4LT5pZCwg JmltZ2IpOw0KKyAgICAgICAgICAgICAgICBpZihYRVZEX0ZBSUxFRChyZXQpKSB7DQorICAgICAg ICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBwdWxs IHRoZSBkZWNvZGVkIGltYWdlICh4ZXZkIGVycm9yIGNvZGU6ICVkLCBmcmFtZSM9JWQpXG4iLCBy ZXQsIHN0YXQuZm51bSk7DQorICAgICAgICAgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAg ICAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRF9PS19GUk1fREVMQVlFRCkgew0KKyAgICAg ICAgICAgICAgICAgICAgaWYoaW1nYikgew0KKyAgICAgICAgICAgICAgICAgICAgICAgIGltZ2It PnJlbGVhc2UoaW1nYik7DQorICAgICAgICAgICAgICAgICAgICAgICAgaW1nYiA9IE5VTEw7DQor ICAgICAgICAgICAgICAgICAgICB9DQorICAgICAgICAgICAgICAgIH0NCisgICAgICAgICAgICB9 DQorICAgICAgICB9DQorICAgIH0gZWxzZSB7IC8vIGJ1bXBpbmcNCisgICAgICAgIHJldCA9IHhl dmRfcHVsbCh4ZWN0eC0+aWQsICYoaW1nYikpOw0KKyAgICAgICAgaWYocmV0ID09IFhFVkRfRVJS X1VORVhQRUNURUQpIHsgLy8gYnVtcGluZyBwcm9jZXNzIGNvbXBsZXRlZA0KKyAgICAgICAgICAg ICpnb3RfZnJhbWUgPSAwOw0KKyAgICAgICAgICAgIHJldHVybiAwOw0KKyAgICAgICAgfSBlbHNl IGlmKFhFVkRfRkFJTEVEKHJldCkpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkZhaWxlZCB0byBwdWxsIHRoZSBkZWNvZGVkIGltYWdlICh4ZXZkIGVycm9yIGNv ZGU6ICVkKVxuIiwgcmV0KTsNCisgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgIH0NCisg ICAgfQ0KKw0KKyAgICBpZihpbWdiKSB7DQorICAgICAgICAvLyBAdG9kbyBzdXBwb3J0cyBvdGhl ciBjb2xvciBzcGFjZSBhbmQgYml0IGRlcHRoDQorICAgICAgICBpZihpbWdiLT5jcyAhPSBYRVZE X0NTX1lDQkNSNDIwXzEwTEUpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIk5vdCBzdXBwb3J0ZWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRf bmFtZShhdmN0eC0+cGl4X2ZtdCkpOw0KKyAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAgICAg fQ0KKw0KKyAgICAgICAgaWYgKGltZ2ItPndbMF0gIT0gYXZjdHgtPndpZHRoIHx8IGltZ2ItPmhb MF0gIT0gYXZjdHgtPmhlaWdodCkgeyAvLyBzdHJlYW0gcmVzb2x1dGlvbiBjaGFuZ2VkDQorICAg ICAgICAgICAgaWYoZmZfc2V0X2RpbWVuc2lvbnMoYXZjdHgsIGltZ2ItPndbMF0sIGltZ2ItPmhb MF0pIDwgMCkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg IkNhbm5vdCBzZXQgbmV3IGRpbWVuc2lvblxuIik7DQorICAgICAgICAgICAgICAgIGdvdG8gRVJS Ow0KKyAgICAgICAgICAgIH0NCisgICAgICAgIH0NCisNCisgICAgICAgIGZyYW1lLT5jb2RlZF9w aWN0dXJlX251bWJlcisrOw0KKyAgICAgICAgZnJhbWUtPmRpc3BsYXlfcGljdHVyZV9udW1iZXIr KzsNCisgICAgICAgIGZyYW1lLT5mb3JtYXQgPSBBVl9QSVhfRk1UX1lVVjQyMFAxMExFOw0KKw0K KyAgICAgICAgaWYgKGZmX2dldF9idWZmZXIoYXZjdHgsIGZyYW1lLCAwKSA8IDApIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBnZXQgQVYgYnVmZmVy XG4iKTsNCisgICAgICAgICAgICBnb3RvIEVSUjsNCisgICAgICAgIH0NCisNCisgICAgICAgIGZy YW1lLT5wdHMgPSBwa3QtPnB0czsNCisNCisgICAgICAgIGF2X2ltYWdlX2NvcHkoZnJhbWUtPmRh dGEsIGZyYW1lLT5saW5lc2l6ZSwgKGNvbnN0IHVpbnQ4X3QgKiopaW1nYi0+YSwNCisgICAgICAg ICAgICAgICAgICAgICAgaW1nYi0+cywgYXZjdHgtPnBpeF9mbXQsDQorICAgICAgICAgICAgICAg ICAgICAgIGltZ2ItPndbMF0sIGltZ2ItPmhbMF0pOw0KKw0KKyAgICAgICAgeGVjdHgtPmRlY29k X2ZyYW1lcysrOw0KKyAgICAgICAgKmdvdF9mcmFtZSA9IDE7DQorDQorICAgICAgICBpbWdiLT5y ZWxlYXNlKGltZ2IpOw0KKyAgICAgICAgaW1nYiA9IE5VTEw7DQorICAgIH0gZWxzZQ0KKyAgICAg ICAgKmdvdF9mcmFtZSA9IDA7DQorDQorICAgIHhlY3R4LT5wYWNrZXRfY291bnQrKzsNCisNCisg ICAgcmV0dXJuIHBrdC0+c2l6ZTsNCisNCitFUlI6DQorICAgIGlmKGltZ2IpIHsNCisgICAgICAg IGltZ2ItPnJlbGVhc2UoaW1nYik7DQorICAgICAgICBpbWdiID0gTlVMTDsNCisgICAgfQ0KKyAg ICAqZ290X2ZyYW1lID0gMDsNCisNCisgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBE ZXN0cm95IGRlY29kZXINCisgKg0KKyAqIEBwYXJhbSBhdmN0eCBjb2RlYyBjb250ZXh0DQorICog QHJldHVybiAwIG9uIHN1Y2Nlc3MNCisgKi8NCitzdGF0aWMgYXZfY29sZCBpbnQgbGlieGV2ZF9j bG9zZShBVkNvZGVjQ29udGV4dCAqYXZjdHgpDQorew0KKyAgICBYZXZkQ29udGV4dCAqeGVjdHgg PSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICBpZih4ZWN0eC0+aWQpIHsNCisgICAgICAgIHhldmRf ZGVsZXRlKHhlY3R4LT5pZCk7DQorICAgICAgICB4ZWN0eC0+aWQgPSBOVUxMOw0KKyAgICB9DQor DQorICAgIHJldHVybiAwOw0KK30NCisNCisjZGVmaW5lIE9GRlNFVCh4KSBvZmZzZXRvZihYZXZk Q29udGV4dCwgeCkNCisjZGVmaW5lIFZEIEFWX09QVF9GTEFHX1ZJREVPX1BBUkFNIHwgQVZfT1BU X0ZMQUdfREVDT0RJTkdfUEFSQU0NCisNCisvLyBAdG9kbyBjb25zaWRlciB1c2luZyBmb2xsb3dp bmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGRlY29kZXI9bGlieGV2ZCkNCisvLw0KK3N0YXRp YyBjb25zdCBBVk9wdGlvbiBvcHRpb25zW10gPSB7DQorICAgIHsgInhldmQtcGFyYW1zIiwgICAg ICAgICAgICAgICAgIm92ZXJyaWRlIHRoZSB4ZXZkIGNvbmZpZ3VyYXRpb24gdXNpbmcgYSA6IHNl cGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzIiwgT0ZGU0VUKHhldmRfb3B0cyks IEFWX09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZEIH0sDQorICAgIHsgTlVMTCB9DQor fTsNCisNCitzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZkX2NsYXNzID0gew0KKyAgICAuY2xhc3Nf bmFtZSA9ICJsaWJ4ZXZkIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFt ZSwNCisgICAgLm9wdGlvbiAgICAgPSBvcHRpb25zLA0KKyAgICAudmVyc2lvbiAgICA9IExJQkFW VVRJTF9WRVJTSU9OX0lOVCwNCit9Ow0KKw0KK3N0YXRpYyBjb25zdCBBVkNvZGVjRGVmYXVsdCB4 ZXZkX2RlZmF1bHRzW10gPSB7DQorICAgIHsgImIiLCAiMCIgfSwNCisgICAgeyBOVUxMIH0sDQor fTsNCisNCitBVkNvZGVjIGZmX2xpYnhldmRfZGVjb2RlciA9IHsNCisgICAgLm5hbWUgICAgICAg ICAgICAgPSAiZXZjIiwNCisgICAgLmxvbmdfbmFtZSAgICAgICAgPSBOVUxMX0lGX0NPTkZJR19T TUFMTCgiRVZDIC8gTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcgKEVWQykiKSwNCisgICAg LnR5cGUgICAgICAgICAgICAgPSBBVk1FRElBX1RZUEVfVklERU8sDQorICAgIC5pZCAgICAgICAg ICAgICAgID0gQVZfQ09ERUNfSURfRVZDLA0KKyAgICAuaW5pdCAgICAgICAgICAgICA9IGxpYnhl dmRfaW5pdCwNCisgICAgLmRlY29kZSAgICAgICAgICAgPSBsaWJ4ZXZkX2RlY29kZSwNCisgICAg LmNsb3NlICAgICAgICAgICAgPSBsaWJ4ZXZkX2Nsb3NlLA0KKyAgICAucHJpdl9kYXRhX3NpemUg ICA9IHNpemVvZihYZXZkQ29udGV4dCksDQorICAgIC5wcml2X2NsYXNzICAgICAgID0gJnhldmRf Y2xhc3MsDQorICAgIC5kZWZhdWx0cyAgICAgICAgID0geGV2ZF9kZWZhdWx0cywNCisgICAgLmNh cGFiaWxpdGllcyAgICAgPSBBVl9DT0RFQ19DQVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19U SFJFQURTIHwgQVZfQ09ERUNfQ0FQX0FWT0lEX1BST0JJTkcsDQorICAgIC53cmFwcGVyX25hbWUg ICAgID0gImxpYnhldmQiLA0KK307DQpkaWZmIC0tZ2l0IGEvbGliYXZjb2RlYy9saWJ4ZXZlLmMg Yi9saWJhdmNvZGVjL2xpYnhldmUuYw0KbmV3IGZpbGUgbW9kZSAxMDA2NDQNCmluZGV4IDAwMDAw MDAwMDAuLmQwNGExMmJjNjANCi0tLSAvZGV2L251bGwNCisrKyBiL2xpYmF2Y29kZWMvbGlieGV2 ZS5jDQpAQCAtMCwwICsxLDExMzkgQEANCisvKg0KKyAqIGxpYnhldmUgZW5jb2Rlcg0KKyAqIEVW QyAoTVBFRy01IEVzc2VudGlhbCBWaWRlbyBDb2RpbmcpIGVuY29kaW5nIHVzaW5nIFhFVkUgTVBF Ry01IEVWQyBlbmNvZGVyIGxpYnJhcnkNCisgKg0KKyAqIENvcHlyaWdodCAoQykgMjAyMSBEYXdp ZCBLb3ppbnNraSA8ZC5rb3ppbnNraUBzYW1zdW5nLmNvbT4NCisgKg0KKyAqIFRoaXMgZmlsZSBp cyBwYXJ0IG9mIEZGbXBlZy4NCisgKg0KKyAqIEZGbXBlZyBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3INCisgKiBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljDQorICogTGljZW5zZSBhcyBwdWJsaXNo ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyDQorICogdmVyc2lvbiAy LjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u DQorICoNCisgKiBGRm1wZWcgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs IGJlIHVzZWZ1bCwNCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0 aGUgaW1wbGllZCB3YXJyYW50eSBvZg0KKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VDQorICogTGVzc2VyIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4NCisgKg0KKyAqIFlvdSBzaG91bGQgaGF2 ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMNCisgKiBM aWNlbnNlIGFsb25nIHdpdGggRkZtcGVnOyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3 YXJlDQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQ0KKyAqLw0KKw0KKyNpZiBkZWZpbmVkKF9NU0Nf VkVSKQ0KKyNkZWZpbmUgWEVWRV9BUElfSU1QT1JUUyAxDQorI2VuZGlmDQorDQorI2luY2x1ZGUg PGZsb2F0Lmg+DQorI2luY2x1ZGUgPHN0ZGxpYi5oPg0KKw0KKyNpbmNsdWRlIDx4ZXZlLmg+DQor DQorI2luY2x1ZGUgImxpYmF2dXRpbC9pbnRlcm5hbC5oIg0KKyNpbmNsdWRlICJsaWJhdnV0aWwv Y29tbW9uLmgiDQorI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCINCisjaW5jbHVkZSAibGliYXZ1 dGlsL3BpeGRlc2MuaCINCisjaW5jbHVkZSAibGliYXZ1dGlsL3BpeGZtdC5oIg0KKyNpbmNsdWRl ICJsaWJhdnV0aWwvdGltZS5oIg0KKw0KKyNpbmNsdWRlICJhdmNvZGVjLmgiDQorI2luY2x1ZGUg ImludGVybmFsLmgiDQorI2luY2x1ZGUgInBhY2tldF9pbnRlcm5hbC5oIg0KKw0KKyNkZWZpbmUg TUFYX0JTX0JVRiAoMTYqMTAyNCoxMDI0KQ0KKw0KKy8qKg0KKyAqIEVycm9yIGNvZGVzDQorICov DQorI2RlZmluZSBYRVZFX1BBUkFNX0JBRF9OQU1FIC0xMDANCisjZGVmaW5lIFhFVkVfUEFSQU1f QkFEX1ZBTFVFIC0yMDANCisNCisvKioNCisgKiBFbmNvZGVyIHN0YXRlcw0KKyAqDQorICogU1RB VEVfRU5DT0RJTkcgLSB0aGUgZW5jb2RlciByZWNlaXZlcyBhbmQgcHJvY2Vzc2VzIGlucHV0IGZy YW1lcw0KKyAqIFNUQVRFX0JVTVBJTkcgIC0gdGhlcmUgYXJlIG5vIG1vcmUgaW5wdXQgZnJhbWVz LCBob3dldmVyIHRoZSBlbmNvZGVyIHN0aWxsIHByb2Nlc3NlcyBwcmV2aW91c2x5IHJlY2VpdmVk IGRhdGENCisgKiBTVEFURV9TS0lQUElORyAtIHNraXBwaW5nIGlucHV0IGZyYW1lcw0KKyAqLw0K K3R5cGVkZWYgZW51bSBTdGF0ZSB7DQorICAgIFNUQVRFX0VOQ09ESU5HLA0KKyAgICBTVEFURV9C VU1QSU5HLA0KKyAgICBTVEFURV9TS0lQUElORw0KK30gU3RhdGU7DQorDQorLyoqDQorICogVGhl IHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpbnN0 YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcg0KKyAqIFRoZSBmaXJzdCBmaWVsZCBpcyBh IHBvaW50ZXIgdG8gYW4gQVZDbGFzcyBzdHJ1Y3QgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2Rv eHlnZW4vdHJ1bmsvc3RydWN0QVZDbGFzcy5odG1sI2RldGFpbHMpLg0KKyAqLw0KK3R5cGVkZWYg c3RydWN0IFhldmVDb250ZXh0IHsNCisgICAgY29uc3QgQVZDbGFzcyAqY2xhc3M7DQorDQorICAg IFhFVkUgaWQ7ICAgICAgICAgICAgLy8gWEVWRSBpbnN0YW5jZSBpZGVudGlmaWVyDQorICAgIFhF VkVfQ0RTQyBjZHNjOyAgICAgLy8gY29kaW5nIHBhcmFtZXRlcnMgaS5lIHByb2ZpbGUsIHdpZHRo ICYgaGVpZ2h0IG9mIGlucHV0IGZyYW1lLCBudW0gb2YgdGhlcmFkcywgZnJhbWUgcmF0ZSAuLi4N CisgICAgWEVWRV9CSVRCIGJpdGI7ICAgICAvLyBiaXRzdHJlYW0gYnVmZmVyIChvdXRwdXQpDQor ICAgIFhFVkVfU1RBVCBzdGF0OyAgICAgLy8gZW5jb2Rpbmcgc3RhdHVzIChvdXRwdXQpDQorICAg IFhFVkVfSU1HQiBpbWdiOyAgICAgLy8gaW1hZ2UgYnVmZmVyIChpbnB1dCkNCisNCisgICAgU3Rh dGUgc3RhdGU7ICAgICAgICAvLyBlbmNvZGVyIHN0YXRlIChza2lwcGluZywgZW5jb2RpbmcsIGJ1 bXBpbmcpDQorDQorICAgIGludCBlbmNvZF9mcmFtZXM7ICAgLy8gbnVtIG9mIGVuY29kZWQgZnJh bWVzDQorICAgIGRvdWJsZSBieXRlc190b3RhbDsgLy8gZW5jb2RlZCBiaXRzdHJlYW0gYnl0ZSBz aXplDQorICAgIGRvdWJsZSBiaXRyYXRlOyAgICAgLy8gYml0cyBwZXIgc2Vjb25kDQorICAgIGlu dCBwYWNrZXRfY291bnQ7ICAgLy8gbnVtIG9mIHBhY2tldHMgY3JlYXRlZCBieSBlbmNvZGVyDQor DQorICAgIC8vIENocm9tYSBzdWJzYW1wbGluZw0KKyAgICBpbnQgd2lkdGhfbHVtYTsNCisgICAg aW50IGhlaWdodF9sdW1hOw0KKyAgICBpbnQgd2lkdGhfY2hyb21hOw0KKyAgICBpbnQgaGVpZ2h0 X2Nocm9tYTsNCisNCisgICAgaW50IHByb2ZpbGVfaWQ7ICAgICAvLyBlbmNvZGVyIHByb2ZpbGUg KG1haW4sIGJhc2VsaW5lKQ0KKyAgICBpbnQgcHJlc2V0X2lkOyAgICAgIC8vIHByZXNldCBvZiB4 ZXZlICggZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKQ0KKyAgICBpbnQgdHVuZV9pZDsgICAg ICAgIC8vIHR1bmUgb2YgeGV2ZSAocHNuciwgemVyb2xhdGVuY3kpDQorICAgIGludCBpbnB1dF9k ZXB0aDsgICAgLy8gaW5wdXQgYml0LWRlcHRoOiA4Yml0LCAxMGJpdA0KKyAgICBpbnQgaGFzaDsg ICAgICAgICAgIC8vIGVtYmVkIHBpY3R1cmUgc2lnbmF0dXJlIChIQVNIKSBmb3IgY29uZm9ybWFu Y2UgY2hlY2tpbmcgaW4gZGVjb2RpbmcNCisNCisgICAgLyogdmFyaWFibGVzIGZvciBpbnB1dCBw YXJhbWV0ZXIgKi8NCisgICAgY2hhciAqb3BfcHJlc2V0Ow0KKyAgICBjaGFyICpvcF90dW5lOw0K KyAgICBpbnQgb3BfcXA7DQorICAgIGludCBvcF9jcmY7DQorDQorICAgIC8vIGNvbmZpZ3VyYXRp b24gcGFyYW1ldGVycw0KKyAgICAvLyB4ZXZlIGNvbmZpZ3VyYXRpb24gcmVhZCBmcm9tIGEgOiBz ZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycw0KKyAgICBBVkRpY3Rpb25hcnkg KnhldmVfcGFyYW1zOw0KK30gWGV2ZUNvbnRleHQ7DQorDQorLyoqDQorICogR2V0cyBYZXZlIGVu Y29kZXIgcHJlLWRlZmluZWQgcHJvZmlsZQ0KKyAqDQorICogQHBhcmFtIHByb2ZpbGUgc3RyaW5n IGRlc2NyaWJpbmcgWGV2ZSBlbmNvZGVyIHByb2ZpbGUgKGJhc2VsaW5lLCBtYWluKQ0KKyAqIEBy ZXR1cm4gWEVWRSBwcmUtZGVmaW5lZCBwcm9maWxlIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVl IG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IGdldF9wcm9maWxlX2lkKGNvbnN0IGNoYXIg KnByb2ZpbGUpDQorew0KKyAgICBpZiAoIXN0cmNtcChwcm9maWxlLCAiYmFzZWxpbmUiKSkNCisg ICAgICAgIHJldHVybiBYRVZFX1BST0ZJTEVfQkFTRUxJTkU7DQorICAgIGVsc2UgaWYgKCFzdHJj bXAocHJvZmlsZSwgIm1haW4iKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BST0ZJTEVfTUFJTjsN CisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIC0xOw0KK30NCisNCisvKioNCisgKiBHZXRzIFhl dmUgcHJlLWRlZmluZWQgcHJlc2V0DQorICoNCisgKiBAcGFyYW0gcHJlc2V0IHN0cmluZyBkZXNj cmliaW5nIFhldmUgZW5jb2RlciBwcmVzZXQgKGZhc3QsIG1lZGl1bSwgc2xvdywgcGxhY2VibykN CisgKiBAcmV0dXJuIFhFVkUgcHJlLWRlZmluZWQgcHJvZmlsZSBvbiBzdWNjZXNzLCBuZWdhdGl2 ZSB2YWx1ZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBnZXRfcHJlc2V0X2lkKGNvbnN0 IGNoYXIgKnByZXNldCkNCit7DQorICAgIGlmKCghc3RyY21wKHByZXNldCwgImZhc3QiKSkpDQor ICAgICAgICByZXR1cm4gWEVWRV9QUkVTRVRfRkFTVDsNCisgICAgZWxzZSBpZiAoIXN0cmNtcChw cmVzZXQsICJtZWRpdW0iKSkNCisgICAgICAgIHJldHVybiBYRVZFX1BSRVNFVF9NRURJVU07DQor ICAgIGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAic2xvdyIpKQ0KKyAgICAgICAgcmV0dXJuIFhF VkVfUFJFU0VUX1NMT1c7DQorICAgIGVsc2UgaWYgKCFzdHJjbXAocHJlc2V0LCAicGxhY2VibyIp KQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfUFJFU0VUX1BMQUNFQk87DQorICAgIGVsc2UNCisgICAg ICAgIHJldHVybiAtMTsNCit9DQorDQorLyoqDQorICogR2V0cyBYZXZlIHByZS1kZWZpbmVkIHR1 bmUgaWQNCisgKg0KKyAqIEBwYXJhbVtpbl0gdHVuZSBzdHJpbmcgZGVzY3JpYmluZyBYZXZlIGVu Y29kZXIgdHVuZSAocHNuciwgemVyb2xhdGVuY3kpDQorICogQHJldHVybiBYRVZFIHByZS1kZWZp bmVkIHByb2ZpbGUgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQ0KKyAqLw0K K3N0YXRpYyBpbnQgZ2V0X3R1bmVfaWQoY29uc3QgY2hhciAqdHVuZSkNCit7DQorICAgIGlmKCgh c3RyY21wKHR1bmUsICJwc25yIikpKQ0KKyAgICAgICAgcmV0dXJuIFhFVkVfVFVORV9QU05SOw0K KyAgICBlbHNlIGlmICghc3RyY21wKHR1bmUsICJ6ZXJvbGF0ZW5jeSIpKQ0KKyAgICAgICAgcmV0 dXJuIFhFVkVfVFVORV9aRVJPTEFURU5DWTsNCisgICAgZWxzZQ0KKyAgICAgICAgcmV0dXJuIC0x Ow0KK30NCisNCisvKioNCisgKiBDb252ZXJ0IEZGbXBlZyBwaXhlbCBmb3JtYXQgKEFWUGl4ZWxG b3JtYXQpIHRvIFhFVkUgcHJlLWRlZmluZWQgY29sb3IgZm9ybWF0DQorICoNCisgKiBAcGFyYW1b aW5dICBweF9mbXQgcGl4ZWwgZm9ybWF0IChAc2VlIGh0dHBzOi8vZmZtcGVnLm9yZy9kb3h5Z2Vu L3RydW5rL3BpeGZtdF84aC5odG1sI2E5YThlMzM1Y2YzYmU0NzIwNDJiYzlmMGNmODBjZDRjNSkN CisgKiBAcGFyYW1bb3V0XSBjb2xvcl9mb3JtYXQgWEVWRSBwcmUtZGVmaW5lZCBjb2xvciBmb3Jt YXQgKEBzZWUgeGV2ZS5oKQ0KKyAqIEBwYXJhbVtvdXRdIGJpdF9kZXB0aCBiaXQgZGVwdGgNCisg Kg0KKyAqIEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlDQor ICovDQorc3RhdGljIGludCBnZXRfcGl4X2ZtdChlbnVtIEFWUGl4ZWxGb3JtYXQgcGl4X2ZtdCwg aW50ICpjb2xvcl9mb3JtYXQsIGludCAqYml0X2RlcHRoKQ0KK3sNCisgICAgc3dpdGNoIChwaXhf Zm10KSB7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQOg0KKyAgICAgICAgKmNvbG9yX2Zv cm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjA7DQorICAgICAgICAqYml0X2RlcHRoID0gODsNCisgICAg ICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDoNCisgICAgICAgICpjb2xv cl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDIyOw0KKyAgICAgICAgKmJpdF9kZXB0aCA9IDg7DQor ICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQorICAgICAgICAq Y29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQ0NDsNCisgICAgICAgICpiaXRfZGVwdGggPSA4 Ow0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTA6DQorICAg ICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9ZQ0JDUjQyMDsNCisgICAgICAgICpiaXRfZGVw dGggPSAxMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEw Og0KKyAgICAgICAgKmNvbG9yX2Zvcm1hdCA9IFhFVkVfQ0ZfWUNCQ1I0MjI7DQorICAgICAgICAq Yml0X2RlcHRoID0gMTA7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lV VjQ0NFAxMDoNCisgICAgICAgICpjb2xvcl9mb3JtYXQgPSBYRVZFX0NGX1lDQkNSNDQ0Ow0KKyAg ICAgICAgKmJpdF9kZXB0aCA9IDEwOw0KKyAgICAgICAgYnJlYWs7DQorICAgIGRlZmF1bHQ6DQor ICAgICAgICAqY29sb3JfZm9ybWF0ID0gWEVWRV9DRl9VTktOT1dOOw0KKyAgICAgICAgcmV0dXJu IC0xOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCitzdGF0aWMgaW50IGticHNf c3RyX3RvX2ludChjaGFyICpzdHIpDQorew0KKyAgICBpbnQga2JwcyA9IDA7DQorICAgIGlmIChz dHJjaHIoc3RyLCAnSycpIHx8IHN0cmNocihzdHIsICdrJykpIHsNCisgICAgICAgIGNoYXIgKnRt cCA9IHN0cnRvayhzdHIsICJLayAiKTsNCisgICAgICAgIGticHMgPSAoaW50KShhdG9mKHRtcCkp Ow0KKyAgICB9IGVsc2UgaWYgKHN0cmNocihzdHIsICdNJykgfHwgc3RyY2hyKHN0ciwgJ20nKSkg ew0KKyAgICAgICAgY2hhciAqdG1wID0gc3RydG9rKHN0ciwgIk1tICIpOw0KKyAgICAgICAga2Jw cyA9IChpbnQpKGF0b2YodG1wKSAqIDEwMDApOw0KKyAgICB9IGVsc2UNCisgICAgICAgIGticHMg PSBhdG9pKHN0cik7DQorDQorICAgIHJldHVybiBrYnBzOw0KK30NCisNCisvKioNCisgKiBQYXJz ZSA6IHNlcGFyYXRlZCBsaXN0IG9mIGtleT12YWx1ZSBwYXJhbWV0ZXJzDQorICoNCisgKiBAcGFy YW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dlcg0KKyAqIEBwYXJhbVtpbl0ga2V5DQorICog QHBhcmFtW2luXSB2YWx1ZQ0KKyAqIEBwYXJhbVtvdXRdIGNkc2MgY29udGFpbnMgYWxsIFhldmUg TVBFRy01IEVWQyBlbmNvZGVyIGVuY29kZXIgcGFyYW1ldGVycyB0aGF0DQorICogICAgICAgICAg ICAgICAgICBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlbmNvZGVyIGlzIHVzZQ0K KyAqDQorICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmUN CisgKi8NCitzdGF0aWMgaW50IHBhcnNlX3hldmVfcGFyYW1zKEFWQ29kZWNDb250ZXh0ICphdmN0 eCwgY29uc3QgY2hhciAqa2V5LCBjb25zdCBjaGFyICp2YWx1ZSwgWEVWRV9DRFNDKiBjZHNjKQ0K K3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gTlVMTDsNCisgICAgeGVjdHggPSBhdmN0eC0+ cHJpdl9kYXRhOw0KKw0KKyAgICBpZigha2V5KSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkl2YWxpZCBhcmd1bWVudDoga2V5IHN0cmluZyBpcyBOVUxMXG4iKTsNCisg ICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgfQ0KKyAgICBpZighdmFs dWUpIHsNCisgICAgICAgIGlmIChzdHJjbXAoa2V5LCAiaGFzaCIpID09IDApIHsNCisgICAgICAg ICAgICB4ZWN0eC0+aGFzaCA9IDE7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0df SU5GTywgImVtYmVkZGluZyBzaWduYXR1cmUgaXMgZW5hYmxlZFxuIik7DQorICAgICAgICB9IGVs c2Ugew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSXZhbGlkIGFy Z3VtZW50OiB2YWx1ZSBzdHJpbmcgaXMgTlVMTFxuIik7DQorICAgICAgICAgICAgcmV0dXJuIFhF VkVfUEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChr ZXksICJ2YnYtYnVmc2l6ZSIpID09IDAgKSB7DQorICAgICAgICBjZHNjLT5wYXJhbS52YnZfYnVm c2l6ZSA9IGticHNfc3RyX3RvX2ludCgoY2hhciAqKXZhbHVlKTsNCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0lORk8sICJWQlYgYnVmZmVyIHNpemU6ICVka2JpdHNcbiIsIGNkc2MtPnBh cmFtLnZidl9idWZzaXplKTsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicmMtdHlwZSIp ID09IDAgKSB7DQorICAgICAgICBpbnQgcmNfdHlwZSA9IGF0b2kodmFsdWUpOw0KKyAgICAgICAg aWYocmNfdHlwZSA8IDAgfHwgcmNfdHlwZSA+IDIpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZj dHgsIEFWX0xPR19FUlJPUiwgIlJhdGUgY29udHJvbCB0eXBlIFsgMChyY19vZmYpIC8gMShDQlIp IF0gYmFkIHZhbHVlOiAlZFxuIiwgcmNfdHlwZSk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVf UEFSQU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgY2RzYy0+cGFyYW0ucmNfdHlw ZSA9IHJjX3R5cGU7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAiUmF0ZSBj b250cm9sIHR5cGUgWyAwKHJjX29mZikgLyAxKENCUikgXSA6ICVkXG4iLCByY190eXBlKTsNCisg ICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAiYmZyYW1lcyIpID09IDAgKSB7DQorICAgICAgICBp bnQgYmZyYW1lcyA9IGF0b2kodmFsdWUpOw0KKyAgICAgICAgaWYoYmZyYW1lcyA8IDApIHsNCisg ICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgImJmcmFtZXM6IGJhZCB2YWx1 ZTogJWRcbiIsIGJmcmFtZXMpOw0KKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9W QUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIGNkc2MtPnBhcmFtLmJmcmFtZXMgPSBiZnJhbWVz Ow0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfSU5GTywgImJmcmFtZXMgOiAlZFxuIiwg YmZyYW1lcyk7DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwgInByb2ZpbGUiKSA9PSAwICkg ew0KKyAgICAgICAgY29uc3QgY2hhciAqcHJvZmlsZSA9IHZhbHVlOw0KKyAgICAgICAgaW50IHBy b2ZpbGVfaWQ7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAicHJvZmlsZSAo YmFzZWxpbmUsIG1haW4pOiAlc1xuIiwgcHJvZmlsZSk7DQorICAgICAgICBwcm9maWxlX2lkID0g Z2V0X3Byb2ZpbGVfaWQocHJvZmlsZSk7DQorICAgICAgICBpZiAocHJvZmlsZV9pZCA8IDApIHsN CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgeGV2ZSBw YXJhbTogcHJvZmlsZSglcylcbiIsIHByb2ZpbGUpOw0KKyAgICAgICAgICAgIHJldHVybiBYRVZF X1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIHhlY3R4LT5wcm9maWxlX2lk ID0gcHJvZmlsZV9pZDsNCisgICAgfSBlbHNlIGlmIChzdHJjbXAoa2V5LCAicHJlc2V0IikgPT0g MCApIHsNCisgICAgICAgIGNvbnN0IGNoYXIgKnByZXNldCA9IHZhbHVlOw0KKyAgICAgICAgaW50 IHByZXNldF9pZDsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0lORk8sICJQcmVzZXQg b2YgeGV2ZSAoZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvKTogJXNcbiIsIHByZXNldCk7DQor ICAgICAgICBwcmVzZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHByZXNldCk7DQorICAgICAgICBpZigg cHJlc2V0X2lkIDwgMCkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9S LCAiSW52YWxpZCB4ZXZlIHBhcmFtOiBwcmVzZXQoJXMpXG4iLCBwcmVzZXQpOw0KKyAgICAgICAg ICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsNCisgICAgICAgIH0NCisgICAgICAgIHhl Y3R4LT5wcmVzZXRfaWQgPSBwcmVzZXRfaWQ7DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwg InR1bmUiKSA9PSAwICkgew0KKyAgICAgICAgY29uc3QgY2hhciAqdHVuZSA9IHZhbHVlOw0KKyAg ICAgICAgaW50IHR1bmVfaWQ7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAi VHVuZSBvZiB4ZXZlIChwc25yLCB6ZXJvbGF0ZW5jeSk6ICVzXG4iLCB0dW5lKTsNCisgICAgICAg IHR1bmVfaWQgPSBnZXRfdHVuZV9pZCh0dW5lKTsNCisgICAgICAgIGlmKCB0dW5lX2lkIDwgMCkg ew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCB4ZXZl IHBhcmFtOiB0dW5lKCVzKVxuIiwgdHVuZSk7DQorICAgICAgICAgICAgcmV0dXJuIFhFVkVfUEFS QU1fQkFEX1ZBTFVFOw0KKyAgICAgICAgfQ0KKyAgICAgICAgeGVjdHgtPnR1bmVfaWQgPSB0dW5l X2lkOw0KKyAgICB9IGVsc2UgaWYgKHN0cmNtcChrZXksICJiaXRyYXRlIikgPT0gMCApIHsNCisg ICAgICAgIGNkc2MtPnBhcmFtLmJpdHJhdGUgPSBrYnBzX3N0cl90b19pbnQoKGNoYXIgKil2YWx1 ZSk7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19JTkZPLCAiQml0cmF0ZSA9ICVka2Jw c1xuIiwgY2RzYy0+cGFyYW0uYml0cmF0ZSk7DQorICAgIH0gZWxzZSBpZiAoc3RyY21wKGtleSwg InEiKSA9PSAwIHx8IHN0cmNtcChrZXksICJxcCIpID09IDApIHsNCisgICAgICAgIGludCBxcCA9 IGF0b2kodmFsdWUpOw0KKyAgICAgICAgaWYocXAgPCAwIHx8IHFwID4gNTEpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgUVAgdmFsdWUgKDB+NTEp IDolZFxuIiwgcXApOw0KKyAgICAgICAgICAgIHJldHVybiBYRVZFX1BBUkFNX0JBRF9WQUxVRTsN CisgICAgICAgIH0NCisgICAgICAgIGNkc2MtPnBhcmFtLnFwID0gcXA7DQorICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19JTkZPLCAiUVAgdmFsdWUgKDB+NTEpOiAlZFxuIiwgY2RzYy0+cGFy YW0ucXApOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJVbmtub3duIHhldmUgY29kZWMgb3B0aW9uOiAlc1xuIiwga2V5KTsNCisgICAgICAgIHJl dHVybiBYRVZFX1BBUkFNX0JBRF9OQU1FOw0KKyAgICB9DQorDQorICAgIHJldHVybiAwOw0KK30N CisNCisvKioNCisgKiBUaGUgZnVuY3Rpb24gcmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIG9iamVj dCBvZiB0aGUgWEVWRV9DRFNDIHR5cGUuDQorICogWEVWRV9DRFNDIGNvbnRhaW5zIGFsbCBlbmNv ZGVyIHBhcmFtZXRlcnMgdGhhdCBzaG91bGQgYmUgaW5pdGlhbGl6ZWQgYmVmb3JlIHRoZSBlbmNv ZGVyIGlzIHVzZWQuDQorICoNCisgKiBUaGUgZmllbGQgdmFsdWVzIG9mIHRoZSBYRVZFX0NEU0Mg c3RydWN0dXJlIGFyZSBwb3B1bGF0ZWQgYmFzZWQgb246DQorICogLSB0aGUgY29ycmVzcG9uZGlu ZyBmaWVsZCB2YWx1ZXMgb2YgdGhlIEF2Q29kZWNDb25ldHh0IHN0cnVjdHVyZSwNCisgKiAtIHRo ZSB4ZXZlIGVuY29kZXIgc3BlY2lmaWMgb3B0aW9uIHZhbHVlcywNCisgKiAgICh0aGUgZnVsbCBs aXN0IG9mIG9wdGlvbnMgYXZhaWxhYmxlIGZvciB4ZXZlIGVuY29kZXIgaXMgZGlzcGxheWVkIGFm dGVyIGV4ZWN1dGluZyB0aGUgY29tbWFuZCAuL2ZmbXBlZyAtLWhlbHAgZW5jb2RlciA9IGxpYnhl dmUpDQorICogLSBhbmQgdGhlIHhldmUgZW5jb2RlciBvcHRpb25zIHNwZWNpZmllZCBhcyBhIGxp c3Qgb2Yga2V5LXZhbHVlIHBhaXJzIGZvbGxvd2luZyB0aGUgeGV2ZS1wYXJhbXMgb3B0aW9uDQor ICoNCisgKiBUaGUgb3JkZXIgb2YgcHJvY2Vzc2luZyBpbnB1dCBkYXRhIGFuZCBwb3B1bGF0aW5n IHRoZSBYRVZFX0NEU0Mgc3RydWN0dXJlDQorICogMSkgZmlyc3QsIHRoZSBmaWVsZHMgb2YgdGhl IEFWQ29kZWNDb250ZXh0IHN0cnVjdHVyZSBjb3JyZXNwb25kaW5nIHRvIHRoZSBwcm92aWRlZCBp bnB1dCBvcHRpb25zIGFyZSBwcm9jZXNzZWQsDQorICogICAgKGkuZSAtcGl4X2ZtdCB5dXY0MjBw IC1zOnYgMTkyMHgxMDgwIC1yIDMwIC1wcm9maWxlOnYgMCkNCisgKiAyKSB0aGVuIHhldmUtc3Bl Y2lmaWMgb3B0aW9ucyBhZGRlZCBhcyBBVk9wdGlvbiB0byB0aGUgeGV2ZSBBVkNvZGVjIGltcGxl bWVudGF0aW9uDQorICogICAgKGkuZSAtdGhyZWFkc19jbnQgMyAtcHJlc2V0IDApDQorICogMykg ZmluYWxseSwgdGhlIG9wdGlvbnMgc3BlY2lmaWVkIGFmdGVyIHRoZSB4ZXZlLXBhcmFtcyBvcHRp b24gYXMgdGhlIHBhcmFtZXRlciBsaXN0IG9mIHR5cGUga2V5IHZhbHVlIGFyZSBwcm9jZXNzZWQN CisgKiAgICAoaS5lIC14ZXZlLXBhcmFtcyAibT0yOnE9MTciKQ0KKyAqDQorICogS2VlcCBpbiBt aW5kIHRoYXQsIHRoZXJlIGFyZSBvcHRpb25zIHRoYXQgY2FuIGJlIHNldCBpbiBkaWZmZXJlbnQg d2F5cy4NCisgKiBJbiB0aGlzIGNhc2UsIHBsZWFzZSBmb2xsb3cgdGhlIGFib3ZlLW1lbnRpb25l ZCBvcmRlciBvZiBwcm9jZXNzaW5nLg0KKyAqIFRoZSBtb3N0IHJlY2VudCBhc3NpZ25tZW50cyBv dmVyd3JpdGUgdGhlIHByZXZpb3VzIHZhbHVlcy4NCisgKg0KKyAqIEBwYXJhbVtpbl0gYXZjdHgg Y29kZWMgY29udGV4dCAoQVZDb2RlY0NvbnRleHQpDQorICogQHBhcmFtW291dF0gY2RzYyBjb250 YWlucyBhbGwgWGV2ZSBNUEVHLTUgRVZDIGVuY29kZXIgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQg c2hvdWxkIGJlIGluaXRpYWxpemVkIGJlZm9yZSB0aGUgZW5jb2RlciBpcyB1c2UNCisgKg0KKyAq IEByZXR1cm4gMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSBlcnJvciBjb2RlIG9uIGZhaWx1cmUNCisg Ki8NCitzdGF0aWMgaW50IGdldF9jb25mKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgWEVWRV9DRFND ICpjZHNjKQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gTlVMTDsNCisgICAgaW50IGNv bG9yX2Zvcm1hdDsNCisgICAgaW50IGNwdV9jb3VudCA9IGF2X2NwdV9jb3VudCgpOw0KKyAgICBp bnQgcmV0Ow0KKw0KKyAgICB4ZWN0eCA9IGF2Y3R4LT5wcml2X2RhdGE7DQorICAgIHhlY3R4LT5o YXNoID0gMDsNCisNCisgICAgLyogaW5pdGlhbGl6ZSB4ZXZlX3BhcmFtIHN0cnVjdCB3aXRoIGRl ZmF1bHQgdmFsdWVzICovDQorICAgIHJldCA9IHhldmVfcGFyYW1fZGVmYXVsdCgmY2RzYy0+cGFy YW0pOw0KKyAgICBpZiAoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJDYW5ub3Qgc2V0X2RlZmF1bHQgcGFyYW1ldGVyXG4iKTsNCisgICAg ICAgIGdvdG8gRVJSOw0KKyAgICB9DQorDQorICAgIC8qIHJlYWQgb3B0aW9ucyBmcm9tIEFWQ29k ZWNDb250ZXh0ICovDQorICAgIGlmKGF2Y3R4LT53aWR0aCA+IDApDQorICAgICAgICBjZHNjLT5w YXJhbS53ID0geGVjdHgtPndpZHRoX2x1bWEgPSBhdmN0eC0+d2lkdGg7DQorDQorICAgIGlmKGF2 Y3R4LT5oZWlnaHQgPiAwKQ0KKyAgICAgICAgY2RzYy0+cGFyYW0uaCA9IHhlY3R4LT5oZWlnaHRf bHVtYSA9IGF2Y3R4LT5oZWlnaHQ7DQorDQorICAgIGlmKGF2Y3R4LT5mcmFtZXJhdGUubnVtID4g MCkgew0KKyAgICAgICAgLy8gZnBzIGNhbiBiZSBmbG9hdCBudW1iZXIsIGJ1dCB4ZXZlIEFQSSBk b2Vzbid0IHN1cHBvcnQgaXQNCisgICAgICAgIGNkc2MtPnBhcmFtLmZwcyA9IChpbnQpKCgoZmxv YXQpYXZjdHgtPmZyYW1lcmF0ZS5udW0gLyBhdmN0eC0+ZnJhbWVyYXRlLmRlbikgKyAwLjUpOw0K KyAgICB9DQorDQorICAgIGlmKGF2Y3R4LT5nb3Bfc2l6ZSA+PSAwKSB7IC8vIEdPUCBzaXplIChr ZXktZnJhbWUgaW50ZXJ2YWwpDQorICAgICAgICBjZHNjLT5wYXJhbS5rZXlpbnQgPSBhdmN0eC0+ Z29wX3NpemU7IC8vIDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZpcnN0IHRpbWU7IDE6IGV2 ZXJ5IGZyYW1lIGlzIGNvZGVkIGluIEktZnJhbWUNCisgICAgfQ0KKw0KKyAgICBpZiAoYXZjdHgt Pm1heF9iX2ZyYW1lcyA9PSAwIHx8IGF2Y3R4LT5tYXhfYl9mcmFtZXMgPT0gMSB8fCBhdmN0eC0+ bWF4X2JfZnJhbWVzID09IDMgfHwNCisgICAgICAgIGF2Y3R4LT5tYXhfYl9mcmFtZXMgPT0gNyB8 fCBhdmN0eC0+bWF4X2JfZnJhbWVzID09IDE1KSB7IC8vIG51bWJlciBvZiBiLWZyYW1lcw0KKyAg ICAgICAgY2RzYy0+cGFyYW0uYmZyYW1lcyA9IGF2Y3R4LT5tYXhfYl9mcmFtZXM7DQorICAgIH0g ZWxzZSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkluY29ycmVjdCB2 YWx1ZSBmb3IgbWF4aW11bSBudW1iZXIgb2YgQiBmcmFtZXM6ICglZCkgXG4iDQorICAgICAgICAg ICAgICAgIkFjY2VwdGFibGUgdmFsdWVzIGZvciBiZiBvcHRpb24gKG1heGltdW0gbnVtYmVyIG9m IEIgZnJhbWVzKSBhcmUgMCwxLDMsNyBvciAxNVxuIiwgYXZjdHgtPm1heF9iX2ZyYW1lcyk7DQor ICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICBpZiAoYXZjdHgtPmxldmVsID49IDAp DQorICAgICAgICBjZHNjLT5wYXJhbS5sZXZlbF9pZGMgPSBhdmN0eC0+bGV2ZWw7DQorDQorICAg IHJldCA9IGdldF9waXhfZm10KGF2Y3R4LT5waXhfZm10LCAmY29sb3JfZm9ybWF0LCAmeGVjdHgt PmlucHV0X2RlcHRoKTsNCisNCisgICAgaWYgKHJldCAhPSAwKSB7DQorICAgICAgICBhdl9sb2co YXZjdHgsIEFWX0xPR19FUlJPUiwgIlVuc3VwcG9ydGVkIHBpeGVsIGZvcm1hdC5cbiIpOw0KKyAg ICAgICAgZ290byBFUlI7DQorICAgIH0NCisgICAgY2RzYy0+cGFyYW0uY3MgPSBYRVZFX0NTX1NF VChjb2xvcl9mb3JtYXQsIHhlY3R4LT5pbnB1dF9kZXB0aCwgMCk7DQorDQorICAgIGlmIChhdmN0 eC0+cmNfYnVmZmVyX3NpemUgPiAwKSB7IC8vIFZCViBidWYgc2l6ZQ0KKyAgICAgICAgY2RzYy0+ cGFyYW0udmJ2X2J1ZnNpemUgPSAoaW50KShhdmN0eC0+cmNfYnVmZmVyX3NpemUgLyAxMDAwKTsN CisgICAgfQ0KKw0KKyAgICAvLyByY190eXBlOiAgUmF0ZSBjb250cm9sIHR5cGUgWyAwKENRUCkg LyAxKEFCUikgLyAyKENSRikgXQ0KKyAgICBpZiAoYXZjdHgtPmJpdF9yYXRlID4gMCkgew0KKyAg ICAgICAgaWYgKGF2Y3R4LT5iaXRfcmF0ZSAvIDEwMDAgPiBJTlRfTUFYIHx8IGF2Y3R4LT5yY19t YXhfcmF0ZSAvIDEwMDAgPiBJTlRfTUFYKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBB Vl9MT0dfRVJST1IsICJOb3Qgc3VwcG9ydGVkIGJpdHJhdGUgYml0X3JhdGUgYW5kIHJjX21heF9y YXRlID4gJWQwMDBcbiIsIElOVF9NQVgpOw0KKyAgICAgICAgICAgIGdvdG8gRVJSOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgY2RzYy0+cGFyYW0uYml0cmF0ZSA9IChpbnQpKGF2Y3R4LT5iaXRfcmF0 ZSAvIDEwMDApOw0KKyAgICAgICAgY2RzYy0+cGFyYW0ucmNfdHlwZSA9IFhFVkVfUkNfQUJSOw0K KyAgICB9DQorDQorICAgIGlmICh4ZWN0eC0+b3BfY3JmID49IDApIHsNCisgICAgICAgIGNkc2Mt PnBhcmFtLmNyZiA9IHhlY3R4LT5vcF9jcmY7DQorICAgICAgICBjZHNjLT5wYXJhbS5yY190eXBl ID0gWEVWRV9SQ19DUkY7DQorICAgIH0NCisNCisgICAgaWYoYXZjdHgtPnRocmVhZF9jb3VudCA8 PSAwKSB7DQorICAgICAgICBjZHNjLT5wYXJhbS50aHJlYWRzID0gKGNwdV9jb3VudCA8IFhFVkVf TUFYX1RIUkVBRFMpID8gY3B1X2NvdW50IDogWEVWRV9NQVhfVEhSRUFEUzsNCisgICAgfSBlbHNl IGlmKGF2Y3R4LT50aHJlYWRfY291bnQgPiBYRVZFX01BWF9USFJFQURTKQ0KKyAgICAgICAgY2Rz Yy0+cGFyYW0udGhyZWFkcyA9IFhFVkVfTUFYX1RIUkVBRFM7DQorICAgIGVsc2UNCisgICAgICAg IGNkc2MtPnBhcmFtLnRocmVhZHMgPSBhdmN0eC0+dGhyZWFkX2NvdW50Ow0KKw0KKyAgICBjZHNj LT5wYXJhbS5jcyA9IFhFVkVfQ1NfU0VUKGNvbG9yX2Zvcm1hdCwgY2RzYy0+cGFyYW0uY29kZWNf Yml0X2RlcHRoLCAwKTsNCisgICAgY2RzYy0+bWF4X2JzX2J1Zl9zaXplID0gTUFYX0JTX0JVRjsN CisNCisgICAgaWYoYXZjdHgtPnByb2ZpbGUgPT0gRkZfUFJPRklMRV9FVkNfQkFTRUxJTkUpDQor ICAgICAgICB4ZWN0eC0+cHJvZmlsZV9pZCA9IFhFVkVfUFJPRklMRV9CQVNFTElORTsNCisgICAg ZWxzZSBpZihhdmN0eC0+cHJvZmlsZSA9PSBGRl9QUk9GSUxFX0VWQ19NQUlOKQ0KKyAgICAgICAg eGVjdHgtPnByb2ZpbGVfaWQgPSBYRVZFX1BST0ZJTEVfTUFJTjsNCisgICAgZWxzZSB7DQorICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlVua25vd24gZW5jb2RlciBwcm9maWxl ICglZClcbiINCisgICAgICAgICAgICAgICAiQWNjZXB0YWJsZSB2YWx1ZXMgZm9yIHByb2ZpbGUg b3B0aW9uIGFyZSAwIGFuZCAxICgwOiBiYXNlbGluZSBwcm9maWxlOyAxOiBtYWluIHByb2ZpbGUp XG4iLCBhdmN0eC0+cHJvZmlsZSk7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAg ICBpZiAoeGVjdHgtPm9wX3ByZXNldCkgeyAvLyBwcmVzZXQNCisgICAgICAgIHhlY3R4LT5wcmVz ZXRfaWQgPSBnZXRfcHJlc2V0X2lkKHhlY3R4LT5vcF9wcmVzZXQpOw0KKyAgICB9DQorDQorICAg IGlmICh4ZWN0eC0+b3BfdHVuZSkgeyAvLyB0dW5lDQorICAgICAgICB4ZWN0eC0+dHVuZV9pZCA9 IGdldF90dW5lX2lkKHhlY3R4LT5vcF90dW5lKTsNCisgICAgfQ0KKw0KKyAgICByZXQgPSB4ZXZl X3BhcmFtX3BwdCgmY2RzYy0+cGFyYW0sIHhlY3R4LT5wcm9maWxlX2lkLCB4ZWN0eC0+cHJlc2V0 X2lkLCB4ZWN0eC0+dHVuZV9pZCk7DQorICAgIGlmIChYRVZFX0ZBSUxFRChyZXQpKSB7DQorICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkNhbm5vdCBzZXQgcHJvZmlsZSglZCks IHByZXNldCglZCksIHR1bmUoJWQpXG4iLCB4ZWN0eC0+cHJvZmlsZV9pZCwgeGVjdHgtPnByZXNl dF9pZCwgeGVjdHgtPnR1bmVfaWQpOw0KKyAgICAgICAgZ290byBFUlI7DQorICAgIH0NCisNCisg ICAgLyogcGFyc2UgOiBzZXBhcmF0ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyBhbmQg c2V0IHZhbHVlcyBmb3IgY3JlYXRlZCBkZXNjcmlwdG9yIChYRVZFX0NEU0MpICovDQorICAgIHsN CisgICAgICAgIEFWRGljdGlvbmFyeUVudHJ5ICplbiA9IE5VTEw7DQorDQorICAgICAgICAvLyBT dGFydCB0byBwYXJzZSB4ZXZlX3BhcmFtcw0KKyAgICAgICAgd2hpbGUgKChlbiA9IGF2X2RpY3Rf Z2V0KHhlY3R4LT54ZXZlX3BhcmFtcywgIiIsIGVuLCBBVl9ESUNUX0lHTk9SRV9TVUZGSVgpKSkg ew0KKyAgICAgICAgICAgIGludCBwYXJzZV9yZXQgPSBwYXJzZV94ZXZlX3BhcmFtcyhhdmN0eCwg ZW4tPmtleSwgZW4tPnZhbHVlLCBjZHNjKTsNCisNCisgICAgICAgICAgICBzd2l0Y2ggKHBhcnNl X3JldCkgew0KKyAgICAgICAgICAgIGNhc2UgWEVWRV9QQVJBTV9CQURfTkFNRToNCisgICAgICAg ICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfV0FSTklORywgIlVua25vd24gb3B0aW9uOiAl cy5cbiIsIGVuLT5rZXkpOw0KKyAgICAgICAgICAgICAgICBicmVhazsNCisgICAgICAgICAgICBj YXNlIFhFVkVfUEFSQU1fQkFEX1ZBTFVFOg0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19XQVJOSU5HLCAiSW52YWxpZCB2YWx1ZSBmb3IgJXM6ICVzLlxuIiwgZW4tPmtleSwg ZW4tPnZhbHVlKTsNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgZGVmYXVs dDoNCisgICAgICAgICAgICAgICAgYnJlYWs7DQorICAgICAgICAgICAgfQ0KKyAgICAgICAgfQ0K KyAgICB9DQorDQorICAgIHJldHVybiAwOw0KKw0KK0VSUjoNCisgICAgcmV0dXJuIEFWRVJST1Io RUlOVkFMKTsNCit9DQorDQorLyoqDQorICogQ2hlY2sgZW5jb2RlciBjb25maWd1cmF0aW9uDQor ICoNCisgKiBAcGFyYW1baW5dIGF2Y3R4IGNvbnRleHQgZm9yIGxvZ2dlcg0KKyAqIEBwYXJhbVtp bl0gY2RzYyBjb250YWlucyBhbGwgZW5jb2RlciBwYXJhbWV0ZXJzIHRoYXQgc2hvdWxkIGJlIGlu aXRpYWxpemVkIGJlZm9yZSBpdHMgdXNlDQorICoNCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBjaGVja19j b25mKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgIFhFVkVfQ0RTQyAqY2RzYykNCit7DQorICAgIGlu dCByZXQgPSAwOw0KKyAgICBpbnQgbWluX2Jsb2NrX3NpemUgPSA0Ow0KKyAgICBpbnQgcGljX207 DQorDQorICAgIGlmKGNkc2MtPnBhcmFtLnByb2ZpbGUgPT0gWEVWRV9QUk9GSUxFX0JBU0VMSU5F KSB7DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hbXZyICAgID09IDEpIHsNCisgICAg ICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFNVlIgY2Fubm90IGJlIG9uIGlu IGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9tbXZkICAgID09IDEpIHsNCisgICAgICAgICAg ICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1NVkQgY2Fubm90IGJlIG9uIGluIGJhc2Ug cHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAg ICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgID09IDEpIHsNCisgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFmZmluZSBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9m aWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlm IChjZHNjLT5wYXJhbS50b29sX2RtdnIgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiRE1WUiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4i KTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNj LT5wYXJhbS50b29sX2FkbXZwICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwg QVZfTE9HX0VSUk9SLCAiQURNVlAgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQor ICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFy YW0udG9vbF9obXZwICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgIkhNVlAgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAg ICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9v bF9hZGRiICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkFEREIgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAg cmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hbGYg ICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkFM RiBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAt MTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2h0ZGYgICAgPT0g MSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSFRERiBjYW5u b3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisg ICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5idHQgICAgICAgICAgPT0gMSkgew0K KyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQlRUIGNhbm5vdCBiZSBv biBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAg fQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnN1Y28gICAgICAgICA9PSAxKSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJTVUNPIGNhbm5vdCBiZSBvbiBpbiBi YXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAg ICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfZWlwZCAgICA9PSAxKSB7DQorICAgICAgICAgICAg YXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJFSVBEIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHBy b2ZpbGVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLnRvb2xfaXF0ICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJUVQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxu Iik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0udG9vbF9jbV9pbml0ID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgs IEFWX0xPR19FUlJPUiwgIkNNX0lOSVQgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7 DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+ cGFyYW0udG9vbF9hZGNjICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkFEQ0MgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAg ICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0u dG9vbF9hdHMgICAgID09IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19F UlJPUiwgIkFUU19JTlRSQSBjYW5ub3QgYmUgb24gaW4gYmFzZSBwcm9maWxlXG4iKTsNCisgICAg ICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5p YmNfZmxhZyAgICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiSUJDIGNhbm5vdCBiZSBvbiBpbiBiYXNlIHByb2ZpbGVcbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xfcnBs ICAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJS UEwgY2Fubm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0g LTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9wb2NzICAgID09 IDEpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIlBPQ1MgY2Fu bm90IGJlIG9uIGluIGJhc2UgcHJvZmlsZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQor ICAgICAgICB9DQorICAgIH0gZWxzZSB7DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9h ZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZmZpbmUgPT0gMSkgew0KKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQUZGSU5FIGNhbm5vdCBiZSBvbiB3aGVu IEFETVZQIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9hZG12cCAgID09IDAgJiYgY2RzYy0+cGFyYW0u dG9vbF9hbXZyICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VS Uk9SLCAiQU1WUiBjYW5ub3QgYmUgb24gd2hlbiBBRE1WUCBpcyBvZmZcbiIpOw0KKyAgICAgICAg ICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLnRvb2xf YWRtdnAgICA9PSAwICYmIGNkc2MtPnBhcmFtLnRvb2xfZG12ciAgID09IDEpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkRNVlIgY2Fubm90IGJlIG9uIHdoZW4g QURNVlAgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisg ICAgICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2FkbXZwICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50 b29sX21tdmQgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJNTVZEIGNhbm5vdCBiZSBvbiB3aGVuIEFETVZQIGlzIG9mZlxuIik7DQorICAgICAgICAg ICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9l aXBkICAgID09IDAgJiYgY2RzYy0+cGFyYW0uaWJjX2ZsYWcgICAgPT0gMSkgew0KKyAgICAgICAg ICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiSUJDIGNhbm5vdCBiZSBvbiB3aGVuIEVJ UEQgaXMgb2ZmXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAg ICAgIGlmIChjZHNjLT5wYXJhbS50b29sX2lxdCAgICAgPT0gMCAmJiBjZHNjLT5wYXJhbS50b29s X2F0cyAgICA9PSAxKSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1Is ICJBVFMgY2Fubm90IGJlIG9uIHdoZW4gSVFUIGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0 ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2RzYy0+cGFyYW0udG9vbF9jbV9pbml0 ID09IDAgJiYgY2RzYy0+cGFyYW0udG9vbF9hZGNjICAgPT0gMSkgew0KKyAgICAgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQURDQyBjYW5ub3QgYmUgb24gd2hlbiBDTV9JTklU IGlzIG9mZlxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgIH0N CisNCisgICAgaWYgKGNkc2MtPnBhcmFtLmJ0dCA9PSAxKSB7DQorICAgICAgICBpZiAoY2RzYy0+ cGFyYW0uZnJhbWV3b3JrX2NiX21heCAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWF4IDwg NSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBD b2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDVcbiIpOw0KKyAgICAgICAg ICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9tYXggPiA3KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJS T1IsICJNYXhpbXVuIENvZGluZyBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gN1xu Iik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAgICBpZiAoY2Rz Yy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiAmJiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWlu IDwgMikgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWluaW11 bSBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0aGFuIDJcbiIpOw0KKyAgICAg ICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5m cmFtZXdvcmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4pICYmDQorICAg ICAgICAgICAgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbiA+IGNkc2MtPnBhcmFtLmZyYW1l d29ya19jYl9tYXgpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwg Ik1pbmltdW0gQ29kaW5nIEJsb2NrIHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVt IGNvZGluZyBCbG9jayBzaXplXG4iKTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAg IH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiA2KSB7DQor ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIDE6NCBDb2Rp bmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KKyAgICAgICAgICAg IHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5mcmFtZXdv cmtfY2JfbWF4IHx8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jdTE0X21heCkgJiYNCisgICAgICAg ICAgICBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY3UxNF9tYXggPiBjZHNjLT5wYXJhbS5mcmFtZXdv cmtfY2JfbWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJN YXhpbXVuIDE6NCBDb2RpbmcgQmxvY2sgc2l6ZSBjYW5ub3QgYmUgZ3JlYXRlciB0aGFuIE1heGlt dW0gY29kaW5nIEJsb2NrIHNpemVcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21heCA+IDYpIHsN CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1heGltdW4gVHJpLXNw bGl0IEJsb2NrIHNpemUgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9 IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAgaWYgKChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJp c19tYXggfHwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkgJiYNCisgICAgICAgICAgICBj ZHNjLT5wYXJhbS5mcmFtZXdvcmtfdHJpc19tYXggPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2Jf bWF4KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVu IFRyaS1zcGxpdCBCbG9jayBzaXplIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBjb2Rp bmcgQmxvY2sgc2l6ZVxuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQor ICAgICAgICBpZiAoKGNkc2MtPnBhcmFtLmZyYW1ld29ya190cmlzX21pbiB8fCBjZHNjLT5wYXJh bS5mcmFtZXdvcmtfY2JfbWluKSAmJg0KKyAgICAgICAgICAgIGNkc2MtPnBhcmFtLmZyYW1ld29y a190cmlzX21pbiA8IGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gKyAyKSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFRyaS1zcGxpdCBCbG9j ayBzaXplIGNhbm5vdCBiZSBzbWFsbGVyIHRoYW4gTWluaW11bSBDb2RpbmcgQmxvY2sgc2l6ZSBw bHVzIHR3b1xuIik7DQorICAgICAgICAgICAgcmV0ID0gLTE7DQorICAgICAgICB9DQorICAgICAg ICBpZihjZHNjLT5wYXJhbS5mcmFtZXdvcmtfY2JfbWluKSBtaW5fYmxvY2tfc2l6ZSA9IDEgPDwg Y2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbjsNCisgICAgICAgIGVsc2UgbWluX2Jsb2NrX3Np emUgPSA4Ow0KKyAgICB9DQorDQorICAgIGlmIChjZHNjLT5wYXJhbS5zdWNvID09IDEpIHsNCisg ICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXggPiA2KSB7DQorICAgICAg ICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJNYXhpbXVuIFNVQ08gc2l6ZSBjYW5u b3QgYmUgZ3JlYXRlciB0aGFuIDZcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAg ICAgfQ0KKyAgICAgICAgaWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9tYXggJiYgY2RzYy0+ cGFyYW0uZnJhbWV3b3JrX3N1Y29fbWF4ID4gY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21heCkg ew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWF4aW11biBTVUNP IHNpemUgY2Fubm90IGJlIGdyZWF0ZXIgdGhhbiBNYXhpbXVtIGNvZGluZyBCbG9jayBzaXplXG4i KTsNCisgICAgICAgICAgICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNj LT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19taW4gPCA0KSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJNaW5pbXVuIFNVQ08gc2l6ZSBjYW5ub3QgYmUgc21hbGxlciB0 aGFuIDRcbiIpOw0KKyAgICAgICAgICAgIHJldCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICAgICAg aWYgKGNkc2MtPnBhcmFtLmZyYW1ld29ya19jYl9taW4gJiYgY2RzYy0+cGFyYW0uZnJhbWV3b3Jr X3N1Y29fbWluIDwgY2RzYy0+cGFyYW0uZnJhbWV3b3JrX2NiX21pbikgew0KKyAgICAgICAgICAg IGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiTWluaW11biBTVUNPIHNpemUgY2Fubm90IGJl IHNtYWxsZXIgdGhhbiBNaW5pbXVtIGNvZGluZyBCbG9jayBzaXplXG4iKTsNCisgICAgICAgICAg ICByZXQgPSAtMTsNCisgICAgICAgIH0NCisgICAgICAgIGlmIChjZHNjLT5wYXJhbS5mcmFtZXdv cmtfc3Vjb19taW4gPiBjZHNjLT5wYXJhbS5mcmFtZXdvcmtfc3Vjb19tYXgpIHsNCisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIk1pbmltdW0gU1VDTyBzaXplIGNhbm5v dCBiZSBncmVhdGVyIHRoYW4gTWF4aW11bSBTVUNPIHNpemVcbiIpOw0KKyAgICAgICAgICAgIHJl dCA9IC0xOw0KKyAgICAgICAgfQ0KKyAgICB9DQorDQorICAgIHBpY19tID0gKDggPiBtaW5fYmxv Y2tfc2l6ZSkgPyBtaW5fYmxvY2tfc2l6ZSA6IDg7DQorICAgIGlmICgoY2RzYy0+cGFyYW0udyAm IChwaWNfbSAtIDEpKSAhPSAwKSB7DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJP UiwgIkN1cnJlbnQgZW5jb2RlciBkb2VzIG5vdCBzdXBwb3J0IHBpY3R1cmUgd2lkdGgsIG5vdCBt dWx0aXBsZSBvZiBtYXgoOCwgbWluaW11bSBDVSBzaXplKVxuIik7DQorICAgICAgICByZXQgPSAt MTsNCisgICAgfQ0KKyAgICBpZiAoKGNkc2MtPnBhcmFtLmggJiAocGljX20gLSAxKSkgIT0gMCkg ew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDdXJyZW50IGVuY29kZXIg ZG9lcyBub3Qgc3VwcG9ydCBwaWN0dXJlIGhlaWdodCwgbm90IG11bHRpcGxlIG9mIG1heCg4LCBt aW5pbXVtIENVIHNpemUpXG4iKTsNCisgICAgICAgIHJldCA9IC0xOw0KKyAgICB9DQorDQorICAg IHJldHVybiByZXQ7DQorfQ0KKw0KKy8qKg0KKyAqIFNldCBYRVZFX0NGR19TRVRfVVNFX1BJQ19T SUdOQVRVUkUgZm9yIGVuY29kZXINCisgKg0KKyAqIEBwYXJhbVtpbl0gbG9nZ2VyIGNvbnRleHQN CisgKiBAcGFyYW1baW5dIGlkIFhFVkUgZW5jb2RlYyBpbnN0YW5jZSBpZGVudGlmaWVyDQorICog QHBhcmFtW2luXSBjdHggdGhlIHN0cnVjdHVyZSBzdG9yZXMgYWxsIHRoZSBzdGF0ZXMgYXNzb2Np YXRlZCB3aXRoIHRoZSBpbnN0YW5jZSBvZiBYZXZlIE1QRUctNSBFVkMgZW5jb2Rlcg0KKyAqDQor ICogQHJldHVybiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0K KyAqLw0KK3N0YXRpYyBpbnQgc2V0X2V4dHJhX2NvbmZpZyhBVkNvZGVjQ29udGV4dCogYXZjdHgs IFhFVkUgaWQsIFhldmVDb250ZXh0ICpjdHgpDQorew0KKyAgICBpbnQgcmV0LCBzaXplLCB2YWx1 ZTsNCisNCisgICAgaWYoY3R4LT5oYXNoKSB7DQorICAgICAgICB2YWx1ZSA9IDE7DQorICAgICAg ICBzaXplID0gNDsNCisgICAgICAgIHJldCA9IHhldmVfY29uZmlnKGlkLCBYRVZFX0NGR19TRVRf VVNFX1BJQ19TSUdOQVRVUkUsICZ2YWx1ZSwgJnNpemUpOw0KKyAgICAgICAgaWYoWEVWRV9GQUlM RUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFp bGVkIHRvIHNldCBjb25maWcgZm9yIHBpY3R1cmUgc2lnbmF0dXJlXG4iKTsNCisgICAgICAgICAg ICByZXR1cm4gLTE7DQorICAgICAgICB9DQorICAgIH0NCisNCisgICAgcmV0dXJuIDA7DQorfQ0K Kw0KKy8qKg0KKyAqIENvbnZlcnQgRkZtcGVnIHBpeGVsIGZvcm1hdCAoQVZQaXhlbEZvcm1hdCkg aW50byBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlDQorICoNCisgKiBAcGFyYW1baW5dIHB4 X2ZtdCBwaXhlbCBmb3JtYXQgKEBzZWUgaHR0cHM6Ly9mZm1wZWcub3JnL2RveHlnZW4vdHJ1bmsv cGl4Zm10XzhoLmh0bWwjYTlhOGUzMzVjZjNiZTQ3MjA0MmJjOWYwY2Y4MGNkNGM1KQ0KKyAqDQor ICogQHJldHVybiBYRVZFIHByZS1kZWZpbmVkIGNvbG9yIHNwYWNlIChAc2VlIHhldmUuaCkgb24g c3VjY2VzcywgWEVWRV9DRl9VTktOT1dOIG9uIGZhaWx1cmUNCisgKi8NCitzdGF0aWMgaW50IHhl dmVfY29sb3Jfc3BhY2UoZW51bSBBVlBpeGVsRm9ybWF0IHBpeF9mbXQpDQorew0KKyAgICAvKiBj b2xvciBzcGFjZSBvZiBpbnB1dCBpbWFnZSAqLw0KKyAgICBpbnQgY3MgPSBYRVZFX0NGX1VOS05P V047DQorDQorICAgIHN3aXRjaCAocGl4X2ZtdCkgew0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVW NDIwUDoNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMDsNCisgICAgICAgIGJyZWFrOw0K KyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIwUDEwOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0K KyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIwLCAxMCwgMSk7DQorI2Vs c2UNCisgICAgICAgIGNzID0gWEVWRV9DU19ZQ0JDUjQyMF8xMExFOw0KKyNlbmRpZg0KKw0KKyAg ICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9ZVVY0MjBQMTI6DQorI2lmIEFWX0hB VkVfQklHRU5ESUFODQorICAgICAgICBjcyA9IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MjAs IDEyLCAxKTsNCisjZWxzZQ0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1lDQkNSNDIwXzEyTEU7DQor I2VuZGlmDQorDQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQyMlA6 DQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjI7DQorICAgICAgICBicmVhazsNCisgICAg Y2FzZSBBVl9QSVhfRk1UX1lVVjQyMlAxMDoNCisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAg ICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwgMTAsIDEpOw0KKyNlbHNlDQor ICAgICAgICBjcyA9IFhFVkVfQ1NfWUNCQ1I0MjJfMTBMRTsNCisjZW5kaWYNCisNCisgICAgICAg IGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRfWVVWNDIyUDEyOg0KKyNpZiBBVl9IQVZFX0JJ R0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDIyLCAxMiwg MSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQyMiwg MTIsIDApOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZN VF9HQlJQOg0KKyAgICBjYXNlIEFWX1BJWF9GTVRfR0JSUDEwOg0KKyAgICBjYXNlIEFWX1BJWF9G TVRfR0JSUDEyOg0KKyAgICAgICAgY3MgPSBYRVZFX0NGX1VOS05PV047DQorICAgICAgICBicmVh azsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFA6DQorICAgICAgICBjcyA9IFhFVkVfQ0Zf WUNCQ1I0NDQ7DQorICAgICAgICBicmVhazsNCisgICAgY2FzZSBBVl9QSVhfRk1UX1lVVjQ0NFAx MDoNCisjaWYgQVZfSEFWRV9CSUdFTkRJQU4NCisgICAgICAgIGNzID0gWEVWRV9DU19TRVQoWEVW RV9DRl9ZQ0JDUjQ0NCwgMTAsIDEpOw0KKyNlbHNlDQorICAgICAgICBjcyA9IFhFVkVfQ1NfWUNC Q1I0NDRfMTBMRTsNCisjZW5kaWYNCisNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJ WF9GTVRfWVVWNDQ0UDEyOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBY RVZFX0NTX1NFVChYRVZFX0NGX1lDQkNSNDQ0LCAxMiwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNz ID0gWEVWRV9DU19TRVQoWEVWRV9DRl9ZQ0JDUjQ0NCwgMTIsIDApOw0KKyNlbmRpZg0KKw0KKyAg ICAgICAgYnJlYWs7DQorICAgIGNhc2UgQVZfUElYX0ZNVF9HUkFZODoNCisgICAgICAgIGNzID0g WEVWRV9DRl9ZQ0JDUjQwMDsNCisgICAgICAgIGJyZWFrOw0KKyAgICBjYXNlIEFWX1BJWF9GTVRf R1JBWTEwOg0KKyNpZiBBVl9IQVZFX0JJR0VORElBTg0KKyAgICAgICAgY3MgPSBYRVZFX0NTX1NF VChYRVZFX0NGX1lDQkNSNDAwLCAxMCwgMSk7DQorI2Vsc2UNCisgICAgICAgIGNzID0gWEVWRV9D U19ZQ0JDUjQwMF8xMExFOw0KKyNlbmRpZg0KKw0KKyAgICAgICAgYnJlYWs7DQorICAgIGNhc2Ug QVZfUElYX0ZNVF9HUkFZMTI6DQorI2lmIEFWX0hBVkVfQklHRU5ESUFODQorICAgICAgICBjcyA9 IFhFVkVfQ1NfU0VUKFhFVkVfQ0ZfWUNCQ1I0MDAsIDEyLCAxKTsNCisjZWxzZQ0KKyAgICAgICAg Y3MgPSBYRVZFX0NTX1lDQkNSNDAwXzEyTEU7DQorI2VuZGlmDQorDQorICAgICAgICBicmVhazsN CisgICAgZGVmYXVsdDoNCisgICAgICAgIGNzID0gWEVWRV9DRl9VTktOT1dOOw0KKyAgICAgICAg YnJlYWs7DQorICAgIH0NCisNCisgICAgcmV0dXJuIGNzOw0KK30NCisNCisvKioNCisgKiBAYnJp ZWYgU3dpdGNoIGVuY29kZXIgdG8gYnVtcGluZyBtb2RlDQorICoNCisgKiBAcGFyYW0gaWQgWEVW RSBlbmNvZGVjIGluc3RhbmNlIGlkZW50aWZpZXINCisgKiBAcmV0dXJuIDAgb24gc3VjY2Vzcywg bmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICovDQorc3RhdGljIGludCBzZXR1cF9i dW1waW5nKFhFVkUgaWQpDQorew0KKyAgICBpbnQgdmFsLCBzaXplOw0KKyAgICB2YWwgID0gMTsN CisgICAgc2l6ZSA9IHNpemVvZihpbnQpOw0KKyAgICBpZihYRVZFX0ZBSUxFRCh4ZXZlX2NvbmZp ZyhpZCwgWEVWRV9DRkdfU0VUX0ZPUkNFX09VVCwgKHZvaWQgKikoJnZhbCksICZzaXplKSkpDQor ICAgICAgICByZXR1cm4gLTE7DQorDQorICAgIHJldHVybiAwOw0KK30NCisNCisvKioNCisgKiBA YnJpZWYgSW5pdGlhbGl6ZSBlWHRyYS1mYXN0IEVzc2VudGlhbCBWaWRlbyBFbmNvZGVyIGNvZGVj DQorICogQ3JlYXRlIGFuIGVuY29kZXIgaW5zdGFuY2UgYW5kIGFsbG9jYXRlIGFsbCB0aGUgbmVl ZGVkIHJlc291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVjIGNvbnRleHQNCisgKiBA cmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBvbiBmYWlsdXJlDQorICov DQorc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmVfaW5pdChBVkNvZGVjQ29udGV4dCAqYXZjdHgp DQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBhdmN0eC0+cHJpdl9kYXRhOw0KKyAgICB1 bnNpZ25lZCBjaGFyICpic19idWYgPSBOVUxMOw0KKyAgICBpbnQgaSwgdmFsID0gMDsNCisgICAg aW50IHNoaWZ0X2ggPSAwOw0KKyAgICBpbnQgc2hpZnRfdiA9IDA7DQorICAgIFhFVkVfSU1HQiAq aW1nYiA9IE5VTEw7DQorDQorICAgIFhFVkVfQ0RTQyAqY2RzYyA9ICYoeGVjdHgtPmNkc2MpOw0K Kw0KKyAgICBpZihhdmN0eC0+cGl4X2ZtdCAhPSBBVl9QSVhfRk1UX1lVVjQyMFAgJiYgYXZjdHgt PnBpeF9mbXQgIT0gQVZfUElYX0ZNVF9ZVVY0MjBQMTApIHsNCisgICAgICAgIGF2X2xvZyhhdmN0 eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBwaXhlbCBmb3JtYXQ6ICVzXG4iLCBhdl9nZXRfcGl4 X2ZtdF9uYW1lKGF2Y3R4LT5waXhfZm10KSk7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0K Kw0KKyAgICAvKiBhbGxvY2F0ZSBiaXRzdHJlYW0gYnVmZmVyICovDQorICAgIGJzX2J1ZiA9ICh1 bnNpZ25lZCBjaGFyICopbWFsbG9jKE1BWF9CU19CVUYpOw0KKyAgICBpZihic19idWYgPT0gTlVM TCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJDYW5ub3QgYWxsb2Nh dGUgYml0c3RyZWFtIGJ1ZmZlclxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0K KyAgICAvKiByZWFkIGNvbmZpZ3VyYXRpb25zIGFuZCBzZXQgdmFsdWVzIGZvciBjcmVhdGVkIGRl c2NyaXB0b3IgKFhFVkVfQ0RTQykgKi8NCisgICAgdmFsID0gZ2V0X2NvbmYoYXZjdHgsIGNkc2Mp Ow0KKyAgICBpZiAodmFsICE9IFhFVkVfT0spIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZf TE9HX0VSUk9SLCAiQ2Fubm90IGdldCBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIGdvdG8g RVJSOw0KKyAgICB9DQorDQorICAgIGlmIChjaGVja19jb25mKGF2Y3R4LCBjZHNjKSAhPSAwKSB7 DQorICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgY29uZmlndXJh dGlvblxuIik7DQorICAgICAgICBnb3RvIEVSUjsNCisgICAgfQ0KKw0KKyAgICAvKiBjcmVhdGUg ZW5jb2RlciAqLw0KKyAgICB4ZWN0eC0+aWQgPSB4ZXZlX2NyZWF0ZShjZHNjLCBOVUxMKTsNCisg ICAgaWYoeGVjdHgtPmlkID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiQ2Fubm90IGNyZWF0ZSBYRVZFIGVuY29kZXJcbiIpOw0KKyAgICAgICAgZ290byBF UlI7DQorICAgIH0NCisNCisgICAgaWYoc2V0X2V4dHJhX2NvbmZpZyhhdmN0eCwgeGVjdHgtPmlk LCB4ZWN0eCkpIHsNCisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2Fubm90 IHNldCBleHRyYSBjb25maWd1cmF0aW9uXG4iKTsNCisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9 DQorDQorICAgIHhlY3R4LT5iaXRiLmFkZHIgPSBic19idWY7DQorICAgIHhlY3R4LT5iaXRiLmJz aXplID0gTUFYX0JTX0JVRjsNCisNCisgICAgaWYoYXZfcGl4X2ZtdF9nZXRfY2hyb21hX3N1Yl9z YW1wbGUoYXZjdHgtPnBpeF9mbXQsICZzaGlmdF9oLCAmc2hpZnRfdikpIHsNCisgICAgICAgIGF2 X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVkIHRvIGdldCAgY2hyb21hIHNoaWZ0XG4i KTsNCisgICAgICAgIGdvdG8gRVJSOw0KKyAgICB9DQorDQorICAgIC8vIFlVViBmb3JtYXQgZXhw bGFuYXRpb24NCisgICAgLy8gc2hpZnRfaCA9PSAxICYmIHNoaWZ0X3YgPT0gMSA6IFlVVjQyMA0K KyAgICAvLyBzaGlmdF9oID09IDEgJiYgc2hpZnRfdiA9PSAwIDogWVVWNDIyDQorICAgIC8vIHNo aWZ0X2ggPT0gMCAmJiBzaGlmdF92ID09IDAgOiBZVVY0NDQNCisgICAgLy8NCisgICAgeGVjdHgt PndpZHRoX2Nocm9tYSA9IEFWX0NFSUxfUlNISUZUKHhlY3R4LT53aWR0aF9sdW1hLCBzaGlmdF9o KTsNCisgICAgeGVjdHgtPmhlaWdodF9jaHJvbWEgPSBBVl9DRUlMX1JTSElGVCh4ZWN0eC0+aGVp Z2h0X2x1bWEsIHNoaWZ0X3YpOw0KKw0KKyAgICAvKiBzZXQgZGVmYXVsdCB2YWx1ZXMgZm9yIGlu cHV0IGltYWdlIGJ1ZmZlciAqLw0KKyAgICBpbWdiID0gJnhlY3R4LT5pbWdiOw0KKyAgICBpbWdi LT5jcyA9IHhldmVfY29sb3Jfc3BhY2UoYXZjdHgtPnBpeF9mbXQpOw0KKyAgICBpbWdiLT5ucCA9 IDM7IC8qIG9ubHkgZm9yIHl1djQyMHAsIHl1djQyMHBsZSAqLw0KKw0KKyAgICBmb3IgKGkgPSAw OyBpIDwgaW1nYi0+bnA7IGkrKykNCisgICAgICAgIGltZ2ItPnhbaV0gPSBpbWdiLT55W2ldID0g MDsNCisNCisgICAgaW1nYi0+d1swXSA9IGltZ2ItPmF3WzBdID0geGVjdHgtPndpZHRoX2x1bWE7 DQorICAgIGltZ2ItPndbMV0gPSBpbWdiLT53WzJdID0gaW1nYi0+YXdbMV0gPSBpbWdiLT5hd1sy XSA9IHhlY3R4LT53aWR0aF9jaHJvbWE7DQorICAgIGltZ2ItPmhbMF0gPSBpbWdiLT5haFswXSA9 IHhlY3R4LT5oZWlnaHRfbHVtYTsNCisgICAgaW1nYi0+aFsxXSA9IGltZ2ItPmhbMl0gPSBpbWdi LT5haFsxXSA9IGltZ2ItPmFoWzJdID0geGVjdHgtPmhlaWdodF9jaHJvbWE7DQorDQorICAgIHhl Y3R4LT5lbmNvZF9mcmFtZXMgPSAwOw0KKyAgICB4ZWN0eC0+Ynl0ZXNfdG90YWwgPSAwOw0KKyAg ICB4ZWN0eC0+c3RhdGUgPSBTVEFURV9FTkNPRElORzsNCisgICAgeGVjdHgtPnBhY2tldF9jb3Vu dCA9IDA7DQorICAgIHhlY3R4LT5iaXRyYXRlID0gMDsNCisNCisgICAgcmV0dXJuIDA7DQorDQor RVJSOg0KKyAgICBpZihic19idWYpDQorICAgICAgICBmcmVlKGJzX2J1Zik7DQorDQorICAgIHJl dHVybiAtMTsNCit9DQorDQorLyoqDQorICAqIEVuY29kZSByYXcgZGF0YSBmcmFtZSBpbnRvIEVW QyBwYWNrZXQNCisgICoNCisgICogQHBhcmFtW2luXSBhdmN0eCBjb2RlYyBjb250ZXh0DQorICAq IEBwYXJhbVtvdXRdIHBrdCBvdXRwdXQgQVZQYWNrZXQgY29udGFpbmluZyBlbmNvZGVkIGRhdGEN CisgICogQHBhcmFtW2luXSBmcmFtZSBBVkZyYW1lIGNvbnRhaW5pbmcgdGhlIHJhdyBkYXRhIHRv IGJlIGVuY29kZWQNCisgICogQHBhcmFtW291dF0gZ290X3BhY2tldCBlbmNvZGVyIHNldHMgdG8g MCBvciAxIHRvIGluZGljYXRlIHRoYXQgYQ0KKyAgKiAgICAgICAgICAgICAgICAgICAgICAgICBu b24tZW1wdHkgcGFja2V0IHdhcyByZXR1cm5lZCBpbiBwa3QNCisgICoNCisgICogQHJldHVybiAw IG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIGVycm9yIGNvZGUgb24gZmFpbHVyZQ0KKyAgKi8NCitzdGF0 aWMgaW50IGxpYnhldmVfZW5jb2RlKEFWQ29kZWNDb250ZXh0ICphdmN0eCwgQVZQYWNrZXQgKnBr dCwNCisgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IEFWRnJhbWUgKmZyYW1lLCBpbnQg KmdvdF9wYWNrZXQpDQorew0KKyAgICBYZXZlQ29udGV4dCAqeGVjdHggPSBOVUxMOw0KKyAgICBp bnQgIHJldCA9IC0xOw0KKyAgICBpbnQgeGV2ZV9jczsNCisgICAgaWYoYXZjdHggPT0gTlVMTCB8 fCBwa3QgPT0gTlVMTCB8fCBnb3RfcGFja2V0ID09IE5VTEwpIHsNCisgICAgICAgIGF2X2xvZyhh dmN0eCwgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBhcmd1bWVudHNcbiIpOw0KKyAgICAgICAgcmV0 dXJuIC0xOw0KKyAgICB9DQorICAgIHhlY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsNCisgICAgaWYo eGVjdHggPT0gTlVMTCkgew0KKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJJ bnZhbGlkIFhFVkUgY29udGV4dFxuIik7DQorICAgICAgICByZXR1cm4gLTE7DQorICAgIH0NCisg ICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX1NLSVBQSU5HICYmIGZyYW1lICkgew0KKyAgICAg ICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfRU5DT0RJTkc7IC8vIEVudGVyaW5nIGVuY29kaW5nIHBy b2Nlc3MNCisgICAgfSBlbHNlIGlmKHhlY3R4LT5zdGF0ZSA9PSBTVEFURV9FTkNPRElORyAmJiBm cmFtZSA9PSBOVUxMKSB7DQorICAgICAgICBpZiAoc2V0dXBfYnVtcGluZyh4ZWN0eC0+aWQpID09 IDApDQorICAgICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfQlVNUElORzsgIC8vIEVudGVy aW5nIGJ1bXBpbmcgcHJvY2Vzcw0KKyAgICAgICAgZWxzZSB7DQorICAgICAgICAgICAgYXZfbG9n KGF2Y3R4LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gc2V0dXAgYnVtcGluZ1xuIik7DQorICAg ICAgICAgICAgeGVjdHgtPnN0YXRlID0gU1RBVEVfU0tJUFBJTkc7DQorICAgICAgICB9DQorICAg IH0NCisNCisgICAgaWYoeGVjdHgtPnN0YXRlID09IFNUQVRFX0VOQ09ESU5HKSB7DQorICAgICAg ICBjb25zdCBBVlBpeEZtdERlc2NyaXB0b3IgKnBpeGVsX2ZtdF9kZXNjID0gYXZfcGl4X2ZtdF9k ZXNjX2dldCAoZnJhbWUtPmZvcm1hdCk7DQorICAgICAgICBpZighcGl4ZWxfZm10X2Rlc2MpIHsN CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwg Zm9ybWF0IGRlc2NyaXB0b3IgZm9yIHBpeGVsIGZvcm1hdDogJXNcbiIsIGF2X2dldF9waXhfZm10 X25hbWUoYXZjdHgtPnBpeF9mbXQpKTsNCisgICAgICAgICAgICByZXR1cm4gLTE7DQorICAgICAg ICB9DQorDQorICAgICAgICB4ZXZlX2NzID0geGV2ZV9jb2xvcl9zcGFjZShhdmN0eC0+cGl4X2Zt dCk7DQorICAgICAgICBpZih4ZXZlX2NzICE9IFhFVkVfQ1NfWUNCQ1I0MjAgJiYgeGV2ZV9jcyAh PSBYRVZFX0NTX1lDQkNSNDIwXzEwTEUpIHsNCisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFW X0xPR19FUlJPUiwgIkludmFsaWQgcGl4ZWwgZm9ybWF0OiAlc1xuIiwgYXZfZ2V0X3BpeF9mbXRf bmFtZShhdmN0eC0+cGl4X2ZtdCkpOw0KKyAgICAgICAgICAgIHJldHVybiAtMTsNCisgICAgICAg IH0NCisNCisgICAgICAgIHsNCisgICAgICAgICAgICBpbnQgaTsNCisgICAgICAgICAgICBYRVZF X0lNR0IgKmltZ2IgPSBOVUxMOw0KKw0KKyAgICAgICAgICAgIGltZ2IgPSAmeGVjdHgtPmltZ2I7 DQorDQorICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IGltZ2ItPm5wOyBpKyspIHsNCisgICAg ICAgICAgICAgICAgaW1nYi0+YVtpXSA9IGZyYW1lLT5kYXRhW2ldOw0KKyAgICAgICAgICAgICAg ICBpbWdiLT5zW2ldID0gZnJhbWUtPmxpbmVzaXplW2ldOw0KKyAgICAgICAgICAgIH0NCisNCisg ICAgICAgICAgICBpZih4ZWN0eC0+aWQgPT0gTlVMTCkgew0KKyAgICAgICAgICAgICAgICBhdl9s b2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkludmFsaWQgWEVWRSBlbmNvZGVyXG4iKTsNCisgICAg ICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICBp bWdiLT50c1swXSA9IGZyYW1lLT5wdHM7DQorICAgICAgICAgICAgaW1nYi0+dHNbMV0gPSAwOw0K KyAgICAgICAgICAgIGltZ2ItPnRzWzJdID0gMDsNCisgICAgICAgICAgICBpbWdiLT50c1szXSA9 IDA7DQorDQorICAgICAgICAgICAgLyogcHVzaCBpbWFnZSB0byBlbmNvZGVyICovDQorICAgICAg ICAgICAgcmV0ID0geGV2ZV9wdXNoKHhlY3R4LT5pZCwgaW1nYik7DQorICAgICAgICAgICAgaWYo WEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xP R19FUlJPUiwgInhldmVfcHVzaCgpIGZhaWxlZFxuIik7DQorICAgICAgICAgICAgICAgIHJldHVy biAtMTsNCisgICAgICAgICAgICB9DQorICAgICAgICB9DQorICAgIH0NCisgICAgaWYoeGVjdHgt PnN0YXRlID09IFNUQVRFX0VOQ09ESU5HIHx8IHhlY3R4LT5zdGF0ZSA9PSBTVEFURV9CVU1QSU5H KSB7DQorDQorICAgICAgICAvKiBlbmNvZGluZyAqLw0KKyAgICAgICAgcmV0ID0geGV2ZV9lbmNv ZGUoeGVjdHgtPmlkLCAmKHhlY3R4LT5iaXRiKSwgJih4ZWN0eC0+c3RhdCkpOw0KKyAgICAgICAg aWYoWEVWRV9GQUlMRUQocmV0KSkgew0KKyAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAieGV2ZV9lbmNvZGUoKSBmYWlsZWRcbiIpOw0KKyAgICAgICAgICAgIHJldHVybiAt MTsNCisgICAgICAgIH0NCisNCisgICAgICAgIHhlY3R4LT5lbmNvZF9mcmFtZXMrKzsNCisNCisg ICAgICAgIC8qIHN0b3JlIGJpdHN0cmVhbSAqLw0KKyAgICAgICAgaWYgKHJldCA9PSBYRVZFX09L X09VVF9OT1RfQVZBSUxBQkxFKSB7IC8vIFJldHVybiBPSyBidXQgcGljdHVyZSBpcyBub3QgYXZh aWxhYmxlIHlldA0KKyAgICAgICAgICAgICpnb3RfcGFja2V0ID0gMDsNCisgICAgICAgICAgICBy ZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSBpZihyZXQgPT0gWEVWRV9PSykgew0KKyAgICAgICAg ICAgIGludCBhdl9waWNfdHlwZTsNCisNCisgICAgICAgICAgICBpZih4ZWN0eC0+c3RhdC53cml0 ZSA+IDApIHsNCisgICAgICAgICAgICAgICAgeGVjdHgtPmJ5dGVzX3RvdGFsICs9IHhlY3R4LT5z dGF0LndyaXRlOw0KKw0KKyAgICAgICAgICAgICAgICByZXQgPSBhdl9ncm93X3BhY2tldChwa3Qs IHhlY3R4LT5zdGF0LndyaXRlKTsNCisgICAgICAgICAgICAgICAgaWYgKHJldCA8IDApIHsNCisg ICAgICAgICAgICAgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiQ2FuJ3QgYWxs b2NhdGUgbWVtb3J5IGZvciBBVlBhY2tldCBkYXRhXG4iKTsNCisgICAgICAgICAgICAgICAgICAg IHJldHVybiByZXQ7DQorICAgICAgICAgICAgICAgIH0NCisNCisgICAgICAgICAgICAgICAgbWVt Y3B5KHBrdC0+ZGF0YSwgeGVjdHgtPmJpdGIuYWRkciwgeGVjdHgtPnN0YXQud3JpdGUpOw0KKw0K KyAgICAgICAgICAgICAgICBwa3QtPnB0cyA9IHhlY3R4LT5iaXRiLnRzWzBdOw0KKyAgICAgICAg ICAgICAgICBwa3QtPmR0cyA9IHhlY3R4LT5iaXRiLnRzWzFdOw0KKw0KKyAgICAgICAgICAgICAg ICB4ZWN0eC0+Yml0cmF0ZSArPSAoeGVjdHgtPnN0YXQud3JpdGUgLSB4ZWN0eC0+c3RhdC5zZWlf c2l6ZSk7DQorDQorICAgICAgICAgICAgICAgIHN3aXRjaCh4ZWN0eC0+c3RhdC5zdHlwZSkgew0K KyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfSToNCisgICAgICAgICAgICAgICAgICAgIGF2 X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX0k7DQorICAgICAgICAgICAgICAgICAgICBwa3Qt PmZsYWdzIHw9IEFWX1BLVF9GTEFHX0tFWTsNCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOw0K KyAgICAgICAgICAgICAgICBjYXNlIFhFVkVfU1RfUDoNCisgICAgICAgICAgICAgICAgICAgIGF2 X3BpY190eXBlID0gQVZfUElDVFVSRV9UWVBFX1A7DQorICAgICAgICAgICAgICAgICAgICBicmVh azsNCisgICAgICAgICAgICAgICAgY2FzZSBYRVZFX1NUX0I6DQorICAgICAgICAgICAgICAgICAg ICBhdl9waWNfdHlwZSA9IEFWX1BJQ1RVUkVfVFlQRV9COw0KKyAgICAgICAgICAgICAgICAgICAg YnJlYWs7DQorICAgICAgICAgICAgICAgIGNhc2UgWEVWRV9TVF9VTktOT1dOOg0KKyAgICAgICAg ICAgICAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVbmtub3duIHNsaWNlIHR5 cGVcbiIpOw0KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgICAgICAg ICB9DQorDQorICAgICAgICAgICAgICAgIGZmX3NpZGVfZGF0YV9zZXRfZW5jb2Rlcl9zdGF0cyhw a3QsIHhlY3R4LT5zdGF0LnFwICogRkZfUVAyTEFNQkRBLCBOVUxMLCAwLCBhdl9waWNfdHlwZSk7 DQorDQorICAgICAgICAgICAgICAgIHhlY3R4LT5iaXRyYXRlICs9ICh4ZWN0eC0+c3RhdC53cml0 ZSAtIHhlY3R4LT5zdGF0LnNlaV9zaXplKTsNCisNCisgICAgICAgICAgICAgICAgKmdvdF9wYWNr ZXQgPSAxOw0KKyAgICAgICAgICAgICAgICB4ZWN0eC0+cGFja2V0X2NvdW50Kys7DQorICAgICAg ICAgICAgfQ0KKyAgICAgICAgfSBlbHNlIGlmIChyZXQgPT0gWEVWRV9PS19OT19NT1JFX0ZSTSkg ew0KKyAgICAgICAgICAgIC8vIFJldHVybiBPSyBidXQgbm8gbW9yZSBmcmFtZXMNCisgICAgICAg ICAgICByZXR1cm4gMDsNCisgICAgICAgIH0gZWxzZSB7DQorICAgICAgICAgICAgYXZfbG9nKGF2 Y3R4LCBBVl9MT0dfRVJST1IsICJJbnZhbGlkIHJldHVybiB2YWx1ZTogJWRcbiIsIHJldCk7DQor ICAgICAgICAgICAgcmV0dXJuIC0xOw0KKyAgICAgICAgfQ0KKyAgICB9IGVsc2Ugew0KKyAgICAg ICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJVZGVmaW5lZCBlbmNvZGVyIHN0YXRlXG4i LCB4ZWN0eC0+c3RhdGUpOw0KKyAgICAgICAgcmV0dXJuIC0xOw0KKyAgICB9DQorDQorICAgIHJl dHVybiAwOw0KK30NCisNCisvKioNCisgKiBEZXN0cm95IHRoZSBlbmNvZGVyIGFuZCByZWxlYXNl IGFsbCB0aGUgYWxsb2NhdGVkIHJlc291cmNlcw0KKyAqDQorICogQHBhcmFtIGF2Y3R4IGNvZGVj IGNvbnRleHQNCisgKiBAcmV0dXJuIDAgb24gc3VjY2VzcywgbmVnYXRpdmUgZXJyb3IgY29kZSBv biBmYWlsdXJlDQorICovDQorc3RhdGljIGF2X2NvbGQgaW50IGxpYnhldmVfY2xvc2UoQVZDb2Rl Y0NvbnRleHQgKmF2Y3R4KQ0KK3sNCisgICAgWGV2ZUNvbnRleHQgKnhlY3R4ID0gYXZjdHgtPnBy aXZfZGF0YTsNCisNCisgICAgeGV2ZV9kZWxldGUoeGVjdHgtPmlkKTsNCisNCisgICAgaWYoeGVj dHgtPmJpdGIuYWRkcikNCisgICAgICAgIGZyZWUoeGVjdHgtPmJpdGIuYWRkcik7IC8qIHJlbGVh c2UgYml0c3RyZWFtIGJ1ZmZlciAqLw0KKw0KKyAgICByZXR1cm4gMDsNCit9DQorDQorI2RlZmlu ZSBPRkZTRVQoeCkgb2Zmc2V0b2YoWGV2ZUNvbnRleHQsIHgpDQorI2RlZmluZSBWRSBBVl9PUFRf RkxBR19WSURFT19QQVJBTSB8IEFWX09QVF9GTEFHX0VOQ09ESU5HX1BBUkFNDQorDQorLy8gRXhh bXBsZSBvZiB1c2luZzogLi9mZm1wZWcgLXhldmUtcGFyYW1zICJtPTI6cT0xNyINCisvLyBDb25z aWRlciB1c2luZyBmb2xsb3dpbmcgb3B0aW9ucyAoLi9mZm1wZWcgLS1oZWxwIGVuY29kZXI9bGli eGV2ZSkNCisvLw0KK3N0YXRpYyBjb25zdCBBVk9wdGlvbiB4ZXZlX29wdGlvbnNbXSA9IHsNCisg ICAgeyAicHJlc2V0IiwgIkVuY29kaW5nIHByZXNldCBmb3Igc2V0dGluZyBlbmNvZGluZyBzcGVl ZCBbZmFzdCwgbWVkaXVtLCBzbG93LCBwbGFjZWJvXSIsIE9GRlNFVChvcF9wcmVzZXQpLCBBVl9P UFRfVFlQRV9TVFJJTkcsIHsgLnN0ciA9ICJtZWRpdW0iIH0sIDAsIDAsIFZFIH0sDQorICAgIHsg InR1bmUiLCAiVHVuZWluZyBwYXJhbWV0ZXIgZm9yIHNwZWNpYWwgcHVycG9zZSBvcGVyYXRpb24g W3BzbnIsIHplcm9sYXRlbmN5XSIsIE9GRlNFVChvcF90dW5lKSwgQVZfT1BUX1RZUEVfU1RSSU5H LCB7IDAgfSwgMCwgMCwgVkV9LA0KKyAgICB7ICJxcCIsICJxdWFudGl6YXRpb24gcGFyYW1ldGVy IHFwIDwwLi41MT4gW2RlZmF1bHQ6IDMyXSIsIE9GRlNFVChvcF9xcCksIEFWX09QVF9UWVBFX0lO VCwgeyAuaTY0ID0gMzIgfSwgMCwgNTEsIFZFIH0sDQorICAgIHsgImNyZiIsICJjb25zdGFudCBy YXRlIGZhY3RvciA8LTEuLjUxPiBbZGVmYXVsdDogMzJdIiwgT0ZGU0VUKG9wX2NyZiksIEFWX09Q VF9UWVBFX0lOVCwgeyAuaTY0ID0gLTEgfSwgLTEsIDUxLCBWRSB9LA0KKyAgICB7ICJ4ZXZlLXBh cmFtcyIsICJvdmVycmlkZSB0aGUgeGV2ZSBjb25maWd1cmF0aW9uIHVzaW5nIGEgOiBzZXBhcmF0 ZWQgbGlzdCBvZiBrZXk9dmFsdWUgcGFyYW1ldGVycyIsIE9GRlNFVCh4ZXZlX3BhcmFtcyksIEFW X09QVF9UWVBFX0RJQ1QsICAgeyAwIH0sIDAsIDAsIFZFIH0sDQorICAgIHsgTlVMTCB9DQorfTsN CisNCitzdGF0aWMgY29uc3QgQVZDbGFzcyB4ZXZlX2NsYXNzID0gew0KKyAgICAuY2xhc3NfbmFt ZSA9ICJsaWJ4ZXZlIiwNCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwN CisgICAgLm9wdGlvbiAgICAgPSB4ZXZlX29wdGlvbnMsDQorICAgIC52ZXJzaW9uICAgID0gTElC QVZVVElMX1ZFUlNJT05fSU5ULA0KK307DQorDQorLyoqDQorICogIGxpYmF2Y29kZWMgZ2VuZXJp YyBnbG9iYWwgb3B0aW9ucywgd2hpY2ggY2FuIGJlIHNldCBvbiBhbGwgdGhlIGVuY29kZXJzIGFu ZCBkZWNvZGVycw0KKyAqICBAc2VlIGh0dHBzOi8vd3d3LmZmbXBlZy5vcmcvZmZtcGVnLWNvZGVj cy5odG1sI0NvZGVjLU9wdGlvbnMNCisgKi8NCitzdGF0aWMgY29uc3QgQVZDb2RlY0RlZmF1bHQg eGV2ZV9kZWZhdWx0c1tdID0gew0KKyAgICB7ICJiIiwgIjAiIH0sICAgICAgIC8vIGJpdHJhdGUN CisgICAgeyAiZyIsICIwIiB9LCAgICAgICAvLyBnb3Bfc2l6ZSAoa2V5LWZyYW1lIGludGVydmFs IDA6IG9ubHkgb25lIEktZnJhbWUgYXQgdGhlIGZpcnN0IHRpbWU7IDE6IGV2ZXJ5IGZyYW1lIGlz IGNvZGVkIGluIEktZnJhbWUpDQorICAgIHsgImJmIiwgIjE1In0sICAgICAgLy8gYmZyYW1lcyAo MDogbm8gQi1mcmFtZXMpDQorICAgIHsgInByb2ZpbGUiLCAiMCJ9LCAgLy8gZW5jb2RlciBjb2Rl YyBwcm9maWxlICgwOiBiYXNlbGllOyAxOiBtYWluKQ0KKyAgICB7ICJ0aHJlYWRzIiwgIjAifSwg IC8vIG51bWJlciBvZiB0aHJlYWRzIHRvIGJlIHVzZWQgKDA6IGF1dG9tYXRpY2FsbHkgc2VsZWN0 IHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0byBzZXQpDQorICAgIHsgTlVMTCB9LA0KK307DQorDQor QVZDb2RlYyBmZl9saWJ4ZXZlX2VuY29kZXIgPSB7DQorICAgIC5uYW1lICAgICAgICAgICAgID0g ImxpYnhldmUiLA0KKyAgICAubG9uZ19uYW1lICAgICAgICA9IE5VTExfSUZfQ09ORklHX1NNQUxM KCJsaWJ4ZXZlIE1QRUctNSBFVkMiKSwNCisgICAgLnR5cGUgICAgICAgICAgICAgPSBBVk1FRElB X1RZUEVfVklERU8sDQorICAgIC5pZCAgICAgICAgICAgICAgID0gQVZfQ09ERUNfSURfRVZDLA0K KyAgICAuaW5pdCAgICAgICAgICAgICA9IGxpYnhldmVfaW5pdCwNCisgICAgLmVuY29kZTIgICAg ICAgICAgPSBsaWJ4ZXZlX2VuY29kZSwNCisgICAgLmNsb3NlICAgICAgICAgICAgPSBsaWJ4ZXZl X2Nsb3NlLA0KKyAgICAucHJpdl9kYXRhX3NpemUgICA9IHNpemVvZihYZXZlQ29udGV4dCksDQor ICAgIC5wcml2X2NsYXNzICAgICAgID0gJnhldmVfY2xhc3MsDQorICAgIC5kZWZhdWx0cyAgICAg ICAgID0geGV2ZV9kZWZhdWx0cywNCisgICAgLmNhcGFiaWxpdGllcyAgICAgPSBBVl9DT0RFQ19D QVBfREVMQVkgfCBBVl9DT0RFQ19DQVBfQVVUT19USFJFQURTIHwNCisgICAgQVZfQ09ERUNfQ0FQ X0VOQ09ERVJfUkVPUkRFUkVEX09QQVFVRSwNCisgICAgLndyYXBwZXJfbmFtZSAgICAgPSAibGli eGV2ZSIsDQorfTsNCmRpZmYgLS1naXQgYS9saWJhdmNvZGVjL3BhcnNlcnMuYyBiL2xpYmF2Y29k ZWMvcGFyc2Vycy5jDQppbmRleCA2YjQwYzE4ZDgwLi4yOTVmYTMzZjUyIDEwMDY0NA0KLS0tIGEv bGliYXZjb2RlYy9wYXJzZXJzLmMNCisrKyBiL2xpYmF2Y29kZWMvcGFyc2Vycy5jDQpAQCAtNzMs NiArNzMsNyBAQCBleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl92cDlfcGFyc2VyOw0KIGV4 dGVybiBjb25zdCBBVkNvZGVjUGFyc2VyIGZmX3dlYnBfcGFyc2VyOw0KIGV4dGVybiBjb25zdCBB VkNvZGVjUGFyc2VyIGZmX3hibV9wYXJzZXI7DQogZXh0ZXJuIGNvbnN0IEFWQ29kZWNQYXJzZXIg ZmZfeG1hX3BhcnNlcjsNCitleHRlcm4gY29uc3QgQVZDb2RlY1BhcnNlciBmZl9ldmNfcGFyc2Vy Ow0KIA0KICNpbmNsdWRlICJsaWJhdmNvZGVjL3BhcnNlcl9saXN0LmMiDQogDQotLSANCjIuMTcu MQ0KDQoNCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpm Zm1wZWctZGV2ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8v ZmZtcGVnLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUs IHZpc2l0IGxpbmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5v cmcgd2l0aCBzdWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==