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 56BBA4313D for ; Sat, 21 May 2022 16:11:51 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 8A05168B4E6; Sat, 21 May 2022 19:11:12 +0300 (EEST) Received: from conssluserg-06.nifty.com (conssluserg-06.nifty.com [210.131.2.91]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id 7E92B68B42E for ; Sat, 21 May 2022 19:11:01 +0300 (EEST) Received: from osamu-pc.kimura.local (M106073025034.v4.enabler.ne.jp [106.73.25.34]) (authenticated) by conssluserg-06.nifty.com with ESMTP id 24LGAf7W026265; Sun, 22 May 2022 01:10:41 +0900 DKIM-Filter: OpenDKIM Filter v2.10.3 conssluserg-06.nifty.com 24LGAf7W026265 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=nifty.com; s=dec2015msa; t=1653149442; bh=0VjaQOJ8xot/YwHpQ5kdFnwYQtnoVusukdQWsmBj0wE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=ajubNzbcDFIxOQDK02nXLoGYB+WtNjFow1pdHVUbEXenpEPObnV4iOO56kQLFBdDV ZPDoj0oF1lVsr9NtuNsau4j1l3+oYhaLxKVJXXAQdzYVv9vXlOYf6DLLv9yF33PHm7 QpvBRKIl6EZ1JKlfvbLZ20E6Wo9rSAHBXMdamVaAOCHGbiF2KNdWsNSpCWD88NLPpB 08aRr7HaZQd68b/jueEppD9yZAtc6oabqhF+kzZP9DZ3vPVGVS8iDTQ3UzEk6TdtPV b9SYvw+QvT/bSKCqo8JHUX1V6FEgZrdDDUhUEMkZG4S+0HsGLIUChTg+MmpEg+iniU /V3ZvJ4t4/w1A== X-Nifty-SrcIP: [106.73.25.34] From: TADANO Tokumei To: ffmpeg-devel@ffmpeg.org Date: Sun, 22 May 2022 01:09:41 +0900 Message-Id: <20220521160943.582994-2-aimingoff@pc.nifty.jp> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20220521160943.582994-1-aimingoff@pc.nifty.jp> References: <20220521160943.582994-1-aimingoff@pc.nifty.jp> MIME-Version: 1.0 Subject: [FFmpeg-devel] [PATCH v2 1/4] lavc/libaribcaption.c: add ARIB caption decoder using libaribcaption X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: TADANO Tokumei 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: VGhpcyBwYXRjaCBhZGQgYW5vdGhlciBBUklCIGNhcHRpb24gZGVjb2RlciB1c2luZyBsaWJhcmli Y2FwdGlvbgpleHRlcm5hbCBsaWJyYXJ5OiBodHRwczovL2dpdGh1Yi5jb20veHFxL2xpYmFyaWJj YXB0aW9uCgpVbmxpa2UgbGliYXJpYmIyNCwgaXQgc3VwcG9ydHMgMyB0eXBlcyBvZiBzdWJ0aXRs ZSBvdXRwdXRzOgoqIHRleHQ6IHBsYWluIHRleHQKKiBhc3M6IEFTUyBmb3JtYXR0ZWQgdGV4dAoq IGJpdG1hcDogYml0bWFwIGltYWdlCgpEZWZhdWx0IHN1YnRpdGxlIHR5cGUgaXMgYXNzIGFzIHNh bWUgYXMgbGliYXJpYmIyNC4KU29tZSBwcmVzZW50IHBsYXllcnMgKGUuZy4sIG1wdikgZXhwZWN0 IEFTUyBmb3JtYXQgZm9yIEFSSUIgY2FwdGlvbi4KClN1YnRpdGxlIHR5cGUgY2FuIGJlIHNwZWNp ZmllZCBieSBgLXN1Yl90eXBlYCBvcHRpb24uCkZvciBleGFtcGxlLCBNUEVHLVRTIGZpbGUgd2l0 aCBBUklCIGNhcHRpb24gY2FuIGJlIGRpc3BsYXllZCBieQpmZnBsYXkgdG9vbCBsaWtlOgogIGZm cGxheSAtc3ViX3R5cGUgYml0bWFwIE1QRUcuVFMKClNpbmNlIHNvbWUgcGxheWVycyAoZS5nLiwg bXB2KSBjYW4ndCBoYW5kbGUgbXVsdGktcmVjdGFuZ2xlIEFTUwpzdWJ0aXRsZSBwcm9wZXJseSwg ZGVmYXVsdCBiZWhhdmlvciBpcyBhbGwgdGhlIHRleHRzIGFyZSBkaXNwbGF5ZWQKaW4gYSBzaW5n bGUtcmVjdGFuZ2xlIGF0IGEgdGltZS4gSXQgY2F1c2VzIHNvbWUgdGV4dHMgbWF5IG5vdCBiZQpk aXNwbGF5ZWQgYXQgZXhwZWN0ZWQgcG9zaXRpb24gYXMgZGVzY3JpYmVkIGluIEFSSUIgU1RELUIy NC4KSWYgYSBwbGF5ZXIgY2FuIGhhbmRsZSBtdWx0aS1yZWN0YW5nbGUgQVNTIHN1YnRpdGxlIGFu ZCB5b3UgcHJlZmVyCm1vcmUgc3VpdGFibGUgcG9zaXRpb25pbmcsIHNldCBgLWFzc193b3JrYXJv dW5kIGZhbHNlYCBvcHRpb24gb3IKZGVmaW5lIGBBU1NfV09SS0FST1VORD0wYCBhdCBjb21waWxh dGlvbi4KClNpZ25lZC1vZmYtYnk6IFRBREFOTyBUb2t1bWVpIDxhaW1pbmdvZmZAcGMubmlmdHku anA+Ci0tLQogbGliYXZjb2RlYy9hbGxjb2RlY3MuYyAgICAgIHwgICAgMSArCiBsaWJhdmNvZGVj L2xpYmFyaWJjYXB0aW9uLmMgfCAxMDk3ICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrCiAyIGZpbGVzIGNoYW5nZWQsIDEwOTggaW5zZXJ0aW9ucygrKQogY3JlYXRlIG1vZGUgMTAw NjQ0IGxpYmF2Y29kZWMvbGliYXJpYmNhcHRpb24uYwoKZGlmZiAtLWdpdCBhL2xpYmF2Y29kZWMv YWxsY29kZWNzLmMgYi9saWJhdmNvZGVjL2FsbGNvZGVjcy5jCmluZGV4IGM0NzEzM2FhMTguLmFj ZDgzZmU3NjIgMTAwNjQ0Ci0tLSBhL2xpYmF2Y29kZWMvYWxsY29kZWNzLmMKKysrIGIvbGliYXZj b2RlYy9hbGxjb2RlY3MuYwpAQCAtNzM3LDYgKzczNyw3IEBAIGV4dGVybiBjb25zdCBGRkNvZGVj IGZmX3BjbV9tdWxhd19hdF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfcWRtY19h dF9kZWNvZGVyOwogZXh0ZXJuIGNvbnN0IEZGQ29kZWMgZmZfcWRtMl9hdF9kZWNvZGVyOwogZXh0 ZXJuIEZGQ29kZWMgZmZfbGliYW9tX2F2MV9lbmNvZGVyOworZXh0ZXJuIGNvbnN0IEZGQ29kZWMg ZmZfYXJpYmNhcHRpb25fZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYmFyaWJi MjRfZGVjb2RlcjsKIGV4dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYmNlbHRfZGVjb2RlcjsKIGV4 dGVybiBjb25zdCBGRkNvZGVjIGZmX2xpYmNvZGVjMl9lbmNvZGVyOwpkaWZmIC0tZ2l0IGEvbGli YXZjb2RlYy9saWJhcmliY2FwdGlvbi5jIGIvbGliYXZjb2RlYy9saWJhcmliY2FwdGlvbi5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAuLjE3MDY1MDNkY2UKLS0tIC9kZXYv bnVsbAorKysgYi9saWJhdmNvZGVjL2xpYmFyaWJjYXB0aW9uLmMKQEAgLTAsMCArMSwxMDk3IEBA CisvKgorICogQVJJQiBTVEQtQjI0IGNhcHRpb24gZGVjb2RlciB1c2luZyB0aGUgbGliYXJpYmNh cHRpb24gbGlicmFyeQorICogQ29weXJpZ2h0IChjKSAyMDIyIFRBREFOTyBUb2t1bWVpCisgKgor ICogVGhpcyBmaWxlIGlzIHBhcnQgb2YgRkZtcGVnLgorICoKKyAqIEZGbXBlZyBpcyBmcmVlIHNv ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRl ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqIExpY2Vuc2Ug YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog dmVyc2lvbiAyLjEgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy IHZlcnNpb24uCisgKgorICogRkZtcGVnIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg aXQgd2lsbCBiZSB1c2VmdWwsCisgKiBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqIExlc3NlciBHZW5l cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBo YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog TGljZW5zZSBhbG9uZyB3aXRoIEZGbXBlZzsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0 d2FyZQorICogRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v ciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpbmNsdWRlICJhdmNvZGVjLmgi CisjaW5jbHVkZSAiY29kZWNfaW50ZXJuYWwuaCIKKyNpbmNsdWRlICJpbnRlcm5hbC5oIgorI2lu Y2x1ZGUgImxpYmF2Y29kZWMvYXNzLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL2F2c3RyaW5nLmgi CisjaW5jbHVkZSAibGliYXZ1dGlsL2F2dXRpbC5oIgorI2luY2x1ZGUgImxpYmF2dXRpbC90aHJl YWQuaCIKKyNpbmNsdWRlICJsaWJhdnV0aWwvbG9nLmgiCisjaW5jbHVkZSAibGliYXZ1dGlsL29w dC5oIgorCisjaW5jbHVkZSA8YXJpYmNhcHRpb24vYXJpYmNhcHRpb24uaD4KKworI2RlZmluZSBB UklCQ19CUFJJTlRfU0laRV9JTklUICAgICAgICAgNjQKKyNkZWZpbmUgQVJJQkNfQlBSSU5UX1NJ WkVfTUFYICAgICAgICAgICg4ICogMTAyNCkKKyNkZWZpbmUgQVJJQkNfQUxQSEFfTUFYX05VTSAg ICAgICAgICAgIDQKKyNkZWZpbmUgQVJJQkNfQUxQSEFfREVGQVVMVF9GUk9OVCAgICAgIDB4RkYK KyNkZWZpbmUgQVJJQkNfQUxQSEFfREVGQVVMVF9CQUNLICAgICAgIDB4ODAKKworI2RlZmluZSBB UklCQ0NfQ09MT1JfUkdCKGMpICAgICAgICAgICAgKChjKSAmIDB4RkZGRkZGKQorI2RlZmluZSBB UklCQ0NfQ09MT1JfRElGRl9SR0IoYzEsYzIpICAgKCgoYzEpIF4gKGMyKSkgJiAweDAwRkZGRkZG KQorI2RlZmluZSBBUklCQ0NfQ09MT1JfRElGRl9BKGMxLGMyKSAgICAgKCgoYzEpIF4gKGMyKSkg JiAweEZGMDAwMDAwKQorCisjZGVmaW5lIENMVVRfUkdCQShyLGcsYixhKSAoKCh1bnNpZ25lZCko YSkgPDwgMjQpIHwgKChyKSA8PCAxNikgfCAoKGcpIDw8IDgpIHwgKGIpKQorI2RlZmluZSBDTFVU X0EoYykgICAgICAgICAgKCgoYykgPj4gMjQpICYgMHhGRikKKyNkZWZpbmUgQ0xVVF9SKGMpICAg ICAgICAgICgoKGMpID4+IDE2KSAmIDB4RkYpCisjZGVmaW5lIENMVVRfRyhjKSAgICAgICAgICAo KChjKSA+PiAgOCkgJiAweEZGKQorI2RlZmluZSBDTFVUX0IoYykgICAgICAgICAgKCAoYykgICAg ICAgICYgMHhGRikKKworI2RlZmluZSBBUklCQ0NfQ09MT1JfVE9fQ0xVVF9SR0JBKGMsYSkgKCgo QVJJQkNDX0NPTE9SX0EoYykgPyBBUklCQ0NfQ09MT1JfQShjKSA6IChhKSkgPDwgMjQpIHwgXAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChBUklCQ0NfQ09MT1JfUihj KSA8PCAxNikgfCBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKEFS SUJDQ19DT0xPUl9HKGMpIDw8ICA4KSB8IFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAoQVJJQkNDX0NPTE9SX0IoYykpKQorCit0eXBlZGVmIHN0cnVjdCBBUklCQ2Fw dGlvbkNvbnRleHQgeworICAgIEFWQ2xhc3MgKmNsYXNzOworICAgIEFWQ29kZWNDb250ZXh0ICph dmN0eDsKKyAgICBjb25zdCBBVlBhY2tldCAqYXZwa3Q7CisgICAgQVZTdWJ0aXRsZSAqc3ViOwor CisgICAgYXJpYmNjX2NvbnRleHRfdCAqY29udGV4dDsKKyAgICBhcmliY2NfZGVjb2Rlcl90ICpk ZWNvZGVyOworICAgIGFyaWJjY19yZW5kZXJlcl90ICpyZW5kZXJlcjsKKworICAgIGVudW0gQVZT dWJ0aXRsZVR5cGUgc3VidGl0bGVfdHlwZTsKKyAgICBib29sIGFzc193b3JrYXJvdW5kOworICAg IGNoYXIgKmZvbnRfbmFtZTsKKyAgICBib29sIHJlcGxhY2VfZnVsbHdpZHRoX2FzY2lpOworICAg IGJvb2wgZm9yY2Vfc3Ryb2tlX3RleHQ7CisgICAgYm9vbCBpZ25vcmVfYmFja2dyb3VuZDsKKyAg ICBib29sIGlnbm9yZV9ydWJ5OworICAgIGJvb2wgZmFkZW91dDsKKyAgICBmbG9hdCBzdHJva2Vf d2lkdGg7CisgICAgYm9vbCByZXBsYWNlX2RyY3M7CisgICAgYXJpYmNjX3RleHRyZW5kZXJlcl90 eXBlX3QgcmVuZGVyaW5nX2JhY2tlbmQ7CisKKyAgICBpbnQ2NF90IHB0czsKKyAgICBBVlJhdGlv bmFsIHRpbWVfYmFzZTsKKyAgICBpbnQgcGxhbmVfd2lkdGg7CisgICAgaW50IHBsYW5lX2hlaWdo dDsKKyAgICBpbnQgZnJhbWVfd2lkdGg7CisgICAgaW50IGZyYW1lX2hlaWdodDsKKyAgICBpbnQg Zm9udF9zaXplOworICAgIGludCBjaGFyc3R5bGU7CisgICAgaW50IGJvcmRlcl9zdHlsZTsKKyAg ICBpbnQgcmVhZG9yZGVyOworCisgICAgYXJpYmNjX2NhcHRpb25fdCBjYXB0aW9uOworICAgIGFy aWJjY19yZW5kZXJfcmVzdWx0X3QgcmVuZGVyX3Jlc3VsdDsKKyAgICB1aW50MzJfdCAqY2x1dDsK KyAgICBpbnQgY2x1dF9pZHg7CisgICAgaW50IGNsdXRfb3ZlcmZsb3c7CisgICAgdWludDhfdCBj bHV0X2FscGhhW0FSSUJDX0FMUEhBX01BWF9OVU1dOworfSBBUklCQ2FwdGlvbkNvbnRleHQ7CisK K3N0YXRpYyB2b2lkIGhleF9kdW1wX2RlYnVnKHZvaWQgKmN0eCwgY29uc3QgY2hhciAqYnVmLCBp bnQgYnVmX3NpemUpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGk9MDsgaSA8IGJ1Zl9zaXpl OyBpKyspIHsKKyAgICAgICAgZmZfZGxvZyhjdHgsICIlMDJoaHggIiwgYnVmW2ldKTsKKyAgICAg ICAgaWYgKGkgJSAxNiA9PSAxNSkKKyAgICAgICAgICAgIGZmX2Rsb2coY3R4LCAiXG4iKTsKKyAg ICB9CisgICAgaWYgKGkgJSAxNikKKyAgICAgICAgZmZfZGxvZyhjdHgsICJcbiIpOworfQorCitz dGF0aWMgdm9pZCBsb2djYXRfY2FsbGJhY2soYXJpYmNjX2xvZ2xldmVsX3QgbGV2ZWwsIGNvbnN0 IGNoYXIqIG1lc3NhZ2UsIHZvaWQqIHVzZXJkYXRhKQoreworICAgIEFSSUJDYXB0aW9uQ29udGV4 dCAqY3R4ID0gdXNlcmRhdGE7CisgICAgaW50IGx2bDsKKworICAgIGlmIChjdHgtPmRlY29kZXIg IT0gTlVMTCkgeworICAgICAgICBzd2l0Y2ggKGxldmVsKSB7CisgICAgICAgIGNhc2UgQVJJQkND X0xPR0xFVkVMX0VSUk9SOgorICAgICAgICAgICAgbHZsID0gQVZfTE9HX0VSUk9SOworICAgICAg ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgQVJJQkNDX0xPR0xFVkVMX1dBUk5JTkc6CisgICAg ICAgICAgICBsdmwgPSBBVl9MT0dfV0FSTklORzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg ICBkZWZhdWx0OgorICAgICAgICAgICAgbHZsID0gQVZfTE9HX0lORk87CisgICAgICAgIH0KKwor ICAgICAgICBhdl9sb2coY3R4LCBsdmwsICIlc1xuIiwgbWVzc2FnZSk7CisgICAgfQorfQorCitz dGF0aWMgdm9pZCBlc3RpbWF0ZV92aWRlb19mcmFtZV9zaXplKEFSSUJDYXB0aW9uQ29udGV4dCAq Y3R4KQoreworICAgIGlmIChjdHgtPmF2Y3R4LT53aWR0aCA+IDAgJiYgY3R4LT5hdmN0eC0+aGVp Z2h0ID4gMCkgeworICAgICAgICBjdHgtPmZyYW1lX3dpZHRoID0gY3R4LT5hdmN0eC0+d2lkdGg7 CisgICAgICAgIGN0eC0+ZnJhbWVfaGVpZ2h0ID0gY3R4LT5hdmN0eC0+aGVpZ2h0OworICAgIH0g ZWxzZSBpZiAoY3R4LT5wbGFuZV93aWR0aCA9PSA5NjApIHsKKyAgICAgICAgLyogQVJJQiBUUi1C MTQgRmFzY2ljbGUgMiBWb2x1bWUgMyBbU2VjdGlvbiAyXSA0LjMuMSAqLworICAgICAgICAvKiBB UklCIFRSLUIxNCBGYXNjaWNsZSAyIFZvbHVtZSAzIFtTZWN0aW9uIDJdIEFwcGVuZGl4LTQgKi8K KyAgICAgICAgY3R4LT5mcmFtZV93aWR0aCA9IDE0NDA7CisgICAgICAgIGN0eC0+ZnJhbWVfaGVp Z2h0ID0gMTA4MDsKKyAgICB9IGVsc2UgeworICAgICAgICBjdHgtPmZyYW1lX3dpZHRoID0gY3R4 LT5wbGFuZV93aWR0aDsKKyAgICAgICAgY3R4LT5mcmFtZV9oZWlnaHQgPSBjdHgtPnBsYW5lX2hl aWdodDsKKyAgICB9Cit9CisKK3N0YXRpYyB2b2lkIGNsdXRfc2V0X2FscGhhKEFSSUJDYXB0aW9u Q29udGV4dCAqY3R4LCB1aW50OF90IGEpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAw OyBpIDwgQVJJQkNfQUxQSEFfTUFYX05VTTsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPmNsdXRf YWxwaGFbaV0gPT0gMCkgeworICAgICAgICAgICAgY3R4LT5jbHV0X2FscGhhW2ldID0gYTsKKyAg ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAoY3R4LT5jbHV0X2FscGhh W2ldID09IGEpCisgICAgICAgICAgICByZXR1cm47CisgICAgfQorICAgIHJldHVybjsKK30KKwor c3RhdGljIHVpbnQ4X3QgY2x1dF9maW5kX25lYXJsZXN0X2FscGhhKEFSSUJDYXB0aW9uQ29udGV4 dCAqY3R4LCB1aW50OF90IGEpCit7CisgICAgaW50IGksIGosIGQ7CisKKyAgICBpZiAoYSA9PSAw KQorICAgICAgICByZXR1cm4gYTsKKyAgICBkID0gMjU2OworICAgIGogPSAwOworICAgIGZvciAo aSA9IDA7IGkgPCBBUklCQ19BTFBIQV9NQVhfTlVNOyBpKyspIHsKKyAgICAgICAgaWYgKGN0eC0+ Y2x1dF9hbHBoYVtpXSA9PSBhKQorICAgICAgICAgICAgcmV0dXJuIGE7CisgICAgICAgIGlmIChj dHgtPmNsdXRfYWxwaGFbaV0gPT0gMCkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAo YWJzKChpbnQpYSAtIChpbnQpY3R4LT5jbHV0X2FscGhhW2ldKSA8IGQpIHsKKyAgICAgICAgICAg IGQgPSBhYnMoKGludClhIC0gKGludCljdHgtPmNsdXRfYWxwaGFbaV0pOworICAgICAgICAgICAg aiA9IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgcmV0dXJuIGN0eC0+Y2x1dF9hbHBoYVtqXTsK K30KKworc3RhdGljIGludCBjbHV0X2ZpbmQoQVJJQkNhcHRpb25Db250ZXh0ICpjdHgsIHVpbnQz Ml90IHJnYmEpCit7CisgICAgaW50IGk7CisKKyAgICBmb3IgKGkgPSAwOyBpIDwgY3R4LT5jbHV0 X2lkeDsgaSsrKSB7CisgICAgICAgIGlmIChjdHgtPmNsdXRbaV0gPT0gcmdiYSkKKyAgICAgICAg ICAgIHJldHVybiBpOworICAgIH0KKyAgICByZXR1cm4gLTE7Cit9CisKK3N0YXRpYyBpbmxpbmUg aW50IGNsdXRfY29sb3JfZGlzdGFuY2UodWludDMyX3QgcmdiYTEsIHVpbnQzMl90IHJnYmEyKQor eworICAgIHJldHVybiBhYnMoKGludClDTFVUX1IocmdiYTEpIC0gKGludClDTFVUX1IocmdiYTIp KSArCisgICAgICAgICAgIGFicygoaW50KUNMVVRfRyhyZ2JhMSkgLSAoaW50KUNMVVRfRyhyZ2Jh MikpICsKKyAgICAgICAgICAgYWJzKChpbnQpQ0xVVF9CKHJnYmExKSAtIChpbnQpQ0xVVF9CKHJn YmEyKSk7Cit9CisKK3N0YXRpYyB1aW50OF90IGNsdXRfcGlja19vcl9zZXQoQVJJQkNhcHRpb25D b250ZXh0ICpjdHgsIGludCByLCBpbnQgZywgaW50IGIsIGludCBhKQoreworICAgIGludCBjLCBp LCBkLCBkX21pbjsKKyAgICB1aW50MzJfdCByZ2JhOworCisgICAgYSA9IGNsdXRfZmluZF9uZWFy bGVzdF9hbHBoYShjdHgsIGEpOworICAgIGlmIChhID09IDApCisgICAgICAgIHJldHVybiAwOyAv KiB0cmFuc3BhcmVudCAqLworICAgIHJnYmEgPSBDTFVUX1JHQkEocixnLGIsYSk7CisKKyAgICBk X21pbiA9IDI1NiAqIDM7CisgICAgYyA9IDA7CisgICAgZm9yIChpID0gMDsgaSA8IGN0eC0+Y2x1 dF9pZHg7IGkrKykgeworICAgICAgICBpZiAoY3R4LT5jbHV0W2ldID09IHJnYmEpCisgICAgICAg ICAgICByZXR1cm4gaTsKKyAgICAgICAgaWYgKENMVVRfQShjdHgtPmNsdXRbaV0pICE9IGEpCisg ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZCA9IGNsdXRfY29sb3JfZGlzdGFuY2UoY3R4 LT5jbHV0W2ldLCByZ2JhKTsKKyAgICAgICAgaWYgKGQgPCBkX21pbikgeworICAgICAgICAgICAg ZF9taW4gPSBkOworICAgICAgICAgICAgYyA9IGk7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYg KGRfbWluID4gMykgeworICAgICAgICBpZiAoY3R4LT5jbHV0X2lkeCA+PSBBVlBBTEVUVEVfQ09V TlQpCisgICAgICAgICAgICBjdHgtPmNsdXRfb3ZlcmZsb3crKzsKKyAgICAgICAgZWxzZSB7Cisg ICAgICAgICAgICBjID0gY3R4LT5jbHV0X2lkeDsKKyAgICAgICAgICAgIGN0eC0+Y2x1dFtjdHgt PmNsdXRfaWR4KytdID0gcmdiYTsKKyAgICAgICAgfQorICAgIH0KKyAgICByZXR1cm4gYzsKK30K KworLyogaW5pdGlhbGlhemUgQ0xVVCB3aXRoIGVhY2ggY2hhcmFjdGVyIGNvbG9ycyAqLworc3Rh dGljIHZvaWQgY2x1dF9pbml0KEFSSUJDYXB0aW9uQ29udGV4dCAqY3R4LCBhcmliY2NfY2FwdGlv bl9yZWdpb25fdCAqcmVnaW9uKQoreworICAgIGFyaWJjY19jb2xvcl90IHRleHRfY29sb3IsIGJh Y2tfY29sb3IsIHN0cm9rZV9jb2xvcjsKKyAgICB1aW50MzJfdCByZ2JhOworCisgICAgY3R4LT5j bHV0WzBdID0gQ0xVVF9SR0JBKDAsMCwwLDApOyAvKiB0cmFuc3BhcmVudCAqLworICAgIGN0eC0+ Y2x1dF9hbHBoYVswXSA9IDB4RkY7CisgICAgY3R4LT5jbHV0X2lkeCA9IDE7CisgICAgY3R4LT5j bHV0X292ZXJmbG93ID0gMDsKKyAgICB0ZXh0X2NvbG9yID0gcmVnaW9uLT5jaGFyc1swXS50ZXh0 X2NvbG9yOworICAgIGJhY2tfY29sb3IgPSByZWdpb24tPmNoYXJzWzBdLmJhY2tfY29sb3I7Cisg ICAgc3Ryb2tlX2NvbG9yID0gcmVnaW9uLT5jaGFyc1swXS5zdHJva2VfY29sb3I7CisgICAgcmdi YSA9IEFSSUJDQ19DT0xPUl9UT19DTFVUX1JHQkEodGV4dF9jb2xvciwgQVJJQkNfQUxQSEFfREVG QVVMVF9GUk9OVCk7CisgICAgY3R4LT5jbHV0W2N0eC0+Y2x1dF9pZHgrK10gPSByZ2JhOworICAg IGNsdXRfc2V0X2FscGhhKGN0eCwgQ0xVVF9BKHJnYmEpKTsKKyAgICByZ2JhID0gQVJJQkNDX0NP TE9SX1RPX0NMVVRfUkdCQShiYWNrX2NvbG9yLCBBUklCQ19BTFBIQV9ERUZBVUxUX0JBQ0spOwor ICAgIGN0eC0+Y2x1dFtjdHgtPmNsdXRfaWR4KytdID0gcmdiYTsKKyAgICBjbHV0X3NldF9hbHBo YShjdHgsIENMVVRfQShyZ2JhKSk7CisgICAgcmdiYSA9IEFSSUJDQ19DT0xPUl9UT19DTFVUX1JH QkEoc3Ryb2tlX2NvbG9yLCBBUklCQ19BTFBIQV9ERUZBVUxUX0ZST05UKTsKKyAgICBpZiAoY2x1 dF9maW5kKGN0eCwgcmdiYSkgPCAwKSB7CisgICAgICAgIGN0eC0+Y2x1dFtjdHgtPmNsdXRfaWR4 KytdID0gcmdiYTsKKyAgICAgICAgY2x1dF9zZXRfYWxwaGEoY3R4LCBDTFVUX0EocmdiYSkpOwor ICAgIH0KKworICAgIGZvciAoaW50IGkgPSAxOyBpIDwgcmVnaW9uLT5jaGFyX2NvdW50OyBpKysp IHsKKyAgICAgICAgaWYgKHJlZ2lvbi0+Y2hhcnNbaV0udGV4dF9jb2xvciAhPSB0ZXh0X2NvbG9y KSB7CisgICAgICAgICAgICByZ2JhID0gQVJJQkNDX0NPTE9SX1RPX0NMVVRfUkdCQShyZWdpb24t PmNoYXJzW2ldLnRleHRfY29sb3IsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBBUklCQ19BTFBIQV9ERUZBVUxUX0ZST05UKTsKKyAgICAgICAgICAgIGlmIChj bHV0X2ZpbmQoY3R4LCByZ2JhKSA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHgtPmNsdXRbY3R4 LT5jbHV0X2lkeCsrXSA9IHJnYmE7CisgICAgICAgICAgICAgICAgY2x1dF9zZXRfYWxwaGEoY3R4 LCBDTFVUX0EocmdiYSkpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChy ZWdpb24tPmNoYXJzW2ldLmJhY2tfY29sb3IgIT0gYmFja19jb2xvcikgeworICAgICAgICAgICAg cmdiYSA9IEFSSUJDQ19DT0xPUl9UT19DTFVUX1JHQkEocmVnaW9uLT5jaGFyc1tpXS5iYWNrX2Nv bG9yLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJJQkNf QUxQSEFfREVGQVVMVF9CQUNLKTsKKyAgICAgICAgICAgIGlmIChjbHV0X2ZpbmQoY3R4LCByZ2Jh KSA8IDApIHsKKyAgICAgICAgICAgICAgICBjdHgtPmNsdXRbY3R4LT5jbHV0X2lkeCsrXSA9IHJn YmE7CisgICAgICAgICAgICAgICAgY2x1dF9zZXRfYWxwaGEoY3R4LCBDTFVUX0EocmdiYSkpOwor ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChyZWdpb24tPmNoYXJzW2ldLnN0 cm9rZV9jb2xvciAhPSBzdHJva2VfY29sb3IpIHsKKyAgICAgICAgICAgIHJnYmEgPSBBUklCQ0Nf Q09MT1JfVE9fQ0xVVF9SR0JBKHJlZ2lvbi0+Y2hhcnNbaV0uc3Ryb2tlX2NvbG9yLAorICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJJQkNfQUxQSEFfREVGQVVM VF9GUk9OVCk7CisgICAgICAgICAgICBpZiAoY2x1dF9maW5kKGN0eCwgcmdiYSkgPCAwKSB7Cisg ICAgICAgICAgICAgICAgY3R4LT5jbHV0W2N0eC0+Y2x1dF9pZHgrK10gPSByZ2JhOworICAgICAg ICAgICAgICAgIGNsdXRfc2V0X2FscGhhKGN0eCwgQ0xVVF9BKHJnYmEpKTsKKyAgICAgICAgICAg IH0KKyAgICAgICAgfQorICAgIH0KK30KKworLyoqCisgKiBhcmliY2FwdGlvbl90cmFuc197Yml0 bWFwfGFzc3x0ZXh0fV9zdWJ0aXRsZSgpCisgKgorICogVHJhbnNmZXIgZGVjb2RlZCBzdWJ0aXRs ZSB0byBBVlN1YnRpdGxlIHdpdGggY29ycmVzcG9uZGluZyBzdWJ0aXRsZSB0eXBlLgorICoKKyAq IEBwYXJhbSBjdHggcG9pbnRlciB0byB0aGUgQVJJQkNhcHRpb25Db250ZXh0CisgKiBAcmV0dXJu ID4gMCBudW1iZXIgb2YgcmVjdGFuZ2xlcyB0byBiZSBkaXNwbGF5ZWQKKyAqICAgICAgICAgPSAw IG5vIHN1YnRpdGxlCisgKiAgICAgICAgIDwgMCBlcnJvciBjb2RlCisgKi8KK3N0YXRpYyBpbnQg YXJpYmNhcHRpb25fdHJhbnNfYml0bWFwX3N1YnRpdGxlKEFSSUJDYXB0aW9uQ29udGV4dCAqY3R4 KQoreworICAgIGludCByZXQgPSAwOworICAgIEFWU3VidGl0bGUgKnN1YiA9IGN0eC0+c3ViOwor ICAgIGludCBzdGF0dXMsIHJlY3RfaWR4OworICAgIGludCBvbGRfd2lkdGggPSBjdHgtPmZyYW1l X3dpZHRoOworICAgIGludCBvbGRfaGVpZ2h0ID0gY3R4LT5mcmFtZV9oZWlnaHQ7CisKKyAgICBp ZiAoY3R4LT5jYXB0aW9uLnBsYW5lX3dpZHRoID4gMCAmJiBjdHgtPmNhcHRpb24ucGxhbmVfaGVp Z2h0ID4gMCkgeworICAgICAgICBjdHgtPnBsYW5lX3dpZHRoID0gY3R4LT5jYXB0aW9uLnBsYW5l X3dpZHRoOworICAgICAgICBjdHgtPnBsYW5lX2hlaWdodCA9IGN0eC0+Y2FwdGlvbi5wbGFuZV9o ZWlnaHQ7CisgICAgfQorICAgIGVzdGltYXRlX3ZpZGVvX2ZyYW1lX3NpemUoY3R4KTsKKyAgICBp ZiAoY3R4LT5mcmFtZV93aWR0aCAhPSBvbGRfd2lkdGggfHwgY3R4LT5mcmFtZV9oZWlnaHQgIT0g b2xkX2hlaWdodCkgeworICAgICAgICBpZiAoIWFyaWJjY19yZW5kZXJlcl9zZXRfZnJhbWVfc2l6 ZShjdHgtPnJlbmRlcmVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY3R4LT5h dmN0eC0+d2lkdGgsIGN0eC0+YXZjdHgtPmhlaWdodCkpIHsKKyAgICAgICAgICAgIGF2X2xvZyhj dHgsIEFWX0xPR19FUlJPUiwKKyAgICAgICAgICAgICAgICAgICAiYXJpYmNjX3JlbmRlcmVyX3Nl dF9mcmFtZV9zaXplKCkgcmV0dXJuZWQgd2l0aCBlcnJvci5cbiIpOworICAgICAgICAgICAgcmV0 dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBzdGF0dXMgPSBh cmliY2NfcmVuZGVyZXJfYXBwZW5kX2NhcHRpb24oY3R4LT5yZW5kZXJlciwgJmN0eC0+Y2FwdGlv bik7CisgICAgaWYgKCFzdGF0dXMpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9S LAorICAgICAgICAgICAgICAgImFyaWJjY19yZW5kZXJlcl9hcHBlbmRfY2FwdGlvbigpIHJldHVy bmVkIHdpdGggZXJyb3IuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7Cisg ICAgfQorCisgICAgc3RhdHVzID0gYXJpYmNjX3JlbmRlcmVyX3JlbmRlcihjdHgtPnJlbmRlcmVy LCBjdHgtPnB0cywgJmN0eC0+cmVuZGVyX3Jlc3VsdCk7CisgICAgc3dpdGNoIChzdGF0dXMpIHsK KyAgICBjYXNlIEFSSUJDQ19SRU5ERVJfU1RBVFVTX0dPVF9JTUFHRToKKyAgICAgICAgYnJlYWs7 CisKKyAgICBjYXNlIEFSSUJDQ19SRU5ERVJfU1RBVFVTX0dPVF9JTUFHRV9VTkNIQU5HRUQ6Cisg ICAgICAgIGFyaWJjY19yZW5kZXJfcmVzdWx0X2NsZWFudXAoJmN0eC0+cmVuZGVyX3Jlc3VsdCk7 CisgICAgICAgIGZmX2Rsb2coY3R4LCAiZ290IGltYWdlIHVuY2hhbmdlZFxuIik7CisgICAgICAg IHJldHVybiAwOworCisgICAgY2FzZSBBUklCQ0NfUkVOREVSX1NUQVRVU19OT19JTUFHRToKKyAg ICAgICAgZmZfZGxvZyhjdHgsICJubyBpbWFnZVxuIik7CisgICAgICAgIHJldHVybiAwOworCisg ICAgY2FzZSBBUklCQ0NfUkVOREVSX1NUQVRVU19FUlJPUjoKKyAgICAgICAgYXZfbG9nKGN0eCwg QVZfTE9HX0VSUk9SLAorICAgICAgICAgICAgICAgImFyaWJjY19yZW5kZXJlcl9yZW5kZXIoKSBy ZXR1cm5lZCB3aXRoIGVycm9yLlxuIik7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworCisgICAgZGVmYXVsdDoKKyAgICAgICAgYXJpYmNjX3JlbmRlcl9yZXN1bHRfY2xlYW51cCgm Y3R4LT5yZW5kZXJfcmVzdWx0KTsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VSUk9SLAor ICAgICAgICAgICAgICAgImFyaWJjY19yZW5kZXJlcl9yZW5kZXIoKSByZXR1cm5lZCB1bmtub3du IHN0YXR1czogJWRcbiIsIHN0YXR1cyk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFM OworICAgIH0KKworICAgIGlmICghY3R4LT5yZW5kZXJfcmVzdWx0LmltYWdlX2NvdW50IHx8IGN0 eC0+cmVuZGVyX3Jlc3VsdC5pbWFnZXMgPT0gTlVMTCkgeworICAgICAgICBhcmliY2NfcmVuZGVy X3Jlc3VsdF9jbGVhbnVwKCZjdHgtPnJlbmRlcl9yZXN1bHQpOworICAgICAgICBmZl9kbG9nKGN0 eCwgIm5vIGltYWdlICglZClcbiIsIGN0eC0+cmVuZGVyX3Jlc3VsdC5pbWFnZV9jb3VudCk7Cisg ICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIHN1Yi0+Zm9ybWF0ID0gMDsgLyogZ3JhcGhp YyAqLworICAgIHN1Yi0+cmVjdHMgPSBhdl9jYWxsb2MoY3R4LT5yZW5kZXJfcmVzdWx0LmltYWdl X2NvdW50LCBzaXplb2YoKnN1Yi0+cmVjdHMpKTsKKyAgICBpZiAoIXN1Yi0+cmVjdHMpIHsKKyAg ICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQor ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgY3R4LT5yZW5kZXJfcmVzdWx0LmltYWdlX2NvdW50OyBp KyspIHsKKyAgICAgICAgc3ViLT5yZWN0c1tpXSA9IGF2X21hbGxvY3ooc2l6ZW9mKCpzdWItPnJl Y3RzW2ldKSk7CisgICAgICAgIGlmICghc3ViLT5yZWN0c1tpXSkgeworICAgICAgICAgICAgcmV0 ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgZ290byBmYWlsOworICAgICAgICB9Cisg ICAgfQorCisgICAgZm9yIChyZWN0X2lkeCA9IDA7IHJlY3RfaWR4IDwgY3R4LT5jYXB0aW9uLnJl Z2lvbl9jb3VudDsgcmVjdF9pZHgrKykgeworICAgICAgICBBVlN1YnRpdGxlUmVjdCAqcmVjdCA9 IGN0eC0+c3ViLT5yZWN0c1tyZWN0X2lkeF07CisgICAgICAgIGFyaWJjY19pbWFnZV90ICppbWFn ZSA9ICZjdHgtPnJlbmRlcl9yZXN1bHQuaW1hZ2VzW3JlY3RfaWR4XTsKKyAgICAgICAgaW50IHcs IGgsIHNyY19pZHgsIGRzdF9pZHg7CisKKyAgICAgICAgY2x1dF9pbml0KGN0eCwgJmN0eC0+Y2Fw dGlvbi5yZWdpb25zW3JlY3RfaWR4XSk7CisKKyAgICAgICAgcmVjdC0+ZGF0YVswXSA9IGF2X21h bGxvY3ooaW1hZ2UtPmJpdG1hcF9zaXplIC8gNCk7CisgICAgICAgIGlmICghcmVjdC0+ZGF0YVsw XSkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgZ290 byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgc3JjX2lkeCA9IDA7CisgICAgICAgIGRzdF9p ZHggPSAwOworICAgICAgICBmb3IgKGggPSAwOyBoIDwgaW1hZ2UtPmhlaWdodDsgaCsrKSB7Cisg ICAgICAgICAgICBmb3IgKHcgPSAwOyB3IDwgaW1hZ2UtPndpZHRoOyB3KyspIHsKKyAgICAgICAg ICAgICAgICBpbnQgciwgZywgYiwgYTsKKyAgICAgICAgICAgICAgICByID0gaW1hZ2UtPmJpdG1h cFtzcmNfaWR4KytdOworICAgICAgICAgICAgICAgIGcgPSBpbWFnZS0+Yml0bWFwW3NyY19pZHgr K107CisgICAgICAgICAgICAgICAgYiA9IGltYWdlLT5iaXRtYXBbc3JjX2lkeCsrXTsKKyAgICAg ICAgICAgICAgICBhID0gaW1hZ2UtPmJpdG1hcFtzcmNfaWR4KytdOworICAgICAgICAgICAgICAg IGlmIChzcmNfaWR4ID4gaW1hZ2UtPmJpdG1hcF9zaXplKSB7CisgICAgICAgICAgICAgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkJ1ZzogdW5leHBlY3RlZGx5IHJlYWNoIGVuZCBv ZiBpbWFnZVxuIik7CisgICAgICAgICAgICAgICAgICAgIHJldCA9IEFWRVJST1JfRVhURVJOQUw7 CisgICAgICAgICAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgICAgICAgICB9CisgICAg ICAgICAgICAgICAgcmVjdC0+ZGF0YVswXVtkc3RfaWR4KytdID0gY2x1dF9waWNrX29yX3NldChj dHgsIHIsIGcsIGIsIGEpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKHcgKiA0IDwg aW1hZ2UtPnN0cmlkZSkgeworICAgICAgICAgICAgICAgIHNyY19pZHggKz0gaW1hZ2UtPnN0cmlk ZSAtIHcgKiA0OworICAgICAgICAgICAgICAgIGRzdF9pZHggKz0gaW1hZ2UtPnN0cmlkZSAvIDQg LSB3OworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIHJlY3QtPmRhdGFbMV0gPSBh dl9tZW1kdXAoY3R4LT5jbHV0LCBBVlBBTEVUVEVfU0laRSk7CisgICAgICAgIGlmICghcmVjdC0+ ZGF0YVsxXSkgeworICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAg ICAgZ290byBmYWlsOworICAgICAgICB9CisKKyAgICAgICAgZmZfZGxvZyhjdHgsICJCSVRNQVAg c3VidGl0bGUlcyAoJWQsJWQpICVkKCVkKSB4ICVkIFslZF06ICVkIGNvbG9yc1xuIiwKKyAgICAg ICAgICAgICAgICAoY3R4LT5jYXB0aW9uLnJlZ2lvbnNbcmVjdF9pZHhdLmlzX3J1YnkpID8gIiAo cnVieSkiIDogIiIsCisgICAgICAgICAgICAgICAgaW1hZ2UtPmRzdF94LCBpbWFnZS0+ZHN0X3ks CisgICAgICAgICAgICAgICAgaW1hZ2UtPndpZHRoLCBpbWFnZS0+c3RyaWRlIC8gNCwgaW1hZ2Ut PmhlaWdodCwKKyAgICAgICAgICAgICAgICByZWN0X2lkeCwgY3R4LT5jbHV0X2lkeCk7CisgICAg ICAgIGlmIChjdHgtPmNsdXRfb3ZlcmZsb3cpCisgICAgICAgICAgICBhdl9sb2coY3R4LCBBVl9M T0dfV0FSTklORywgIkNMVVQgb3ZlcmZsb3cgKCVkKS5cbiIsIGN0eC0+Y2x1dF9vdmVyZmxvdyk7 CisKKyAgICAgICAgcmVjdC0+eCA9IGltYWdlLT5kc3RfeDsKKyAgICAgICAgcmVjdC0+eSA9IGlt YWdlLT5kc3RfeTsKKyAgICAgICAgcmVjdC0+dyA9IGltYWdlLT53aWR0aDsKKyAgICAgICAgcmVj dC0+aCA9IGltYWdlLT5oZWlnaHQ7CisgICAgICAgIHJlY3QtPnR5cGUgPSBTVUJUSVRMRV9CSVRN QVA7CisgICAgICAgIHJlY3QtPmxpbmVzaXplWzBdID0gaW1hZ2UtPnN0cmlkZSAvIDQ7CisgICAg ICAgIHJlY3QtPm5iX2NvbG9ycyA9IDI1NjsKKyAgICB9CisgICAgc3ViLT5udW1fcmVjdHMgPSBy ZWN0X2lkeDsKKworICAgIHJldHVybiByZWN0X2lkeDsKKworZmFpbDoKKyAgICBpZiAoc3ViLT5y ZWN0cykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IGN0eC0+Y2FwdGlvbi5yZWdpb25f Y291bnQ7IGkrKykgeworICAgICAgICAgICAgaWYgKHN1Yi0+cmVjdHNbaV0pIHsKKyAgICAgICAg ICAgICAgICBhdl9mcmVlcCgmc3ViLT5yZWN0c1tpXS0+ZGF0YVswXSk7CisgICAgICAgICAgICAg ICAgYXZfZnJlZXAoJnN1Yi0+cmVjdHNbaV0tPmRhdGFbMV0pOworICAgICAgICAgICAgICAgIGF2 X2ZyZWVwKCZzdWItPnJlY3RzW2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg ICBhdl9mcmVlcCgmc3ViLT5yZWN0cyk7CisgICAgfQorICAgIHN1Yi0+bnVtX3JlY3RzID0gMDsK KworICAgIHJldHVybiByZXQ7Cit9CisKK3N0YXRpYyBpbnQgc2V0X2Fzc19oZWFkZXIoQVJJQkNh cHRpb25Db250ZXh0ICpjdHgpCit7CisgICAgQVZDb2RlY0NvbnRleHQgKmF2Y3R4ID0gY3R4LT5h dmN0eDsKKyAgICBpbnQgb3V0bGluZSwgc2hhZG93OworCisgICAgaWYgKGN0eC0+Ym9yZGVyX3N0 eWxlID09IDQpIHsKKyAgICAgICAgb3V0bGluZSA9IDA7CisgICAgICAgIHNoYWRvdyA9IDQ7Cisg ICAgfSBlbHNlIHsKKyAgICAgICAgb3V0bGluZSA9IDE7CisgICAgICAgIHNoYWRvdyA9IDA7Cisg ICAgfQorICAgIGlmIChjdHgtPmZvcmNlX3N0cm9rZV90ZXh0KQorICAgICAgICBvdXRsaW5lID0g KGludCkoY3R4LT5zdHJva2Vfd2lkdGggKiA0LjAgLyAzLjApOworCisgICAgaWYgKGF2Y3R4LT5z dWJ0aXRsZV9oZWFkZXIpCisgICAgICAgIGF2X2ZyZWVwKCZhdmN0eC0+c3VidGl0bGVfaGVhZGVy KTsKKyAgICBhdmN0eC0+c3VidGl0bGVfaGVhZGVyID0gYXZfYXNwcmludGYoCisgICAgICAgICAg ICAiW1NjcmlwdCBJbmZvXVxyXG4iCisgICAgICAgICAgICAiU2NyaXB0VHlwZTogdjQuMDArXHJc biIKKyAgICAgICAgICAgICJQbGF5UmVzWDogJWRcclxuIgorICAgICAgICAgICAgIlBsYXlSZXNZ OiAlZFxyXG4iCisgICAgICAgICAgICAiV3JhcFN0eWxlOiAyXHJcbiIgICAgICAvKiAyOiBubyB3 b3JkIHdyYXBwaW5nICovCisgICAgICAgICAgICAiXHJcbiIKKworICAgICAgICAgICAgIltWNCsg U3R5bGVzXVxyXG4iCisgICAgICAgICAgICAgIkZvcm1hdDogTmFtZSwgIgorICAgICAgICAgICAg ICJGb250bmFtZSwgRm9udHNpemUsICIKKyAgICAgICAgICAgICAiUHJpbWFyeUNvbG91ciwgU2Vj b25kYXJ5Q29sb3VyLCBPdXRsaW5lQ29sb3VyLCBCYWNrQ29sb3VyLCAiCisgICAgICAgICAgICAg IkJvbGQsIEl0YWxpYywgVW5kZXJsaW5lLCBTdHJpa2VPdXQsICIKKyAgICAgICAgICAgICAiU2Nh bGVYLCBTY2FsZVksICIKKyAgICAgICAgICAgICAiU3BhY2luZywgQW5nbGUsICIKKyAgICAgICAg ICAgICAiQm9yZGVyU3R5bGUsIE91dGxpbmUsIFNoYWRvdywgIgorICAgICAgICAgICAgICJBbGln bm1lbnQsIE1hcmdpbkwsIE1hcmdpblIsIE1hcmdpblYsICIKKyAgICAgICAgICAgICAiRW5jb2Rp bmdcclxuIgorCisgICAgICAgICAgICAgIlN0eWxlOiAiCisgICAgICAgICAgICAgIkRlZmF1bHQs IiAgICAgICAgICAgICAvKiBOYW1lICovCisgICAgICAgICAgICAgIiVzLCVkLCIgICAgICAgICAg ICAgICAvKiBGb250e25hbWUsc2l6ZX0gKi8KKyAgICAgICAgICAgICAiJkgleCwmSCV4LCZIJXgs JkgleCwiIC8qIHtQcmltYXJ5LFNlY29uZGFyeSxPdXRsaW5lLEJhY2t9Q29sb3VyICovCisgICAg ICAgICAgICAgIiVkLCVkLCVkLDAsIiAgICAgICAgICAvKiBCb2xkLCBJdGFsaWMsIFVuZGVybGlu ZSwgU3RyaWtlT3V0ICovCisgICAgICAgICAgICAgIjEwMCwxMDAsIiAgICAgICAgICAgICAvKiBT Y2FsZXtYLFl9ICovCisgICAgICAgICAgICAgIjAsMCwiICAgICAgICAgICAgICAgICAvKiBTcGFj aW5nLCBBbmdsZSAqLworICAgICAgICAgICAgICIlZCwlZCwlZCwiICAgICAgICAgICAgLyogQm9y ZGVyU3R5bGUsIE91dGxpbmUsIFNoYWRvdyAqLworICAgICAgICAgICAgICIlZCwxMCwxMCwxMCwi ICAgICAgICAgLyogQWxpZ25tZW50LCBNYXJnaW5bTFJWXSAqLworICAgICAgICAgICAgICIwXHJc biIgICAgICAgICAgICAgICAgLyogRW5jb2RpbmcgKi8KKyAgICAgICAgICAgICAiXHJcbiIKKwor ICAgICAgICAgICAgICJbRXZlbnRzXVxyXG4iCisgICAgICAgICAgICAgIkZvcm1hdDogTGF5ZXIs IFN0YXJ0LCBFbmQsIFN0eWxlLCBOYW1lLCBNYXJnaW5MLCBNYXJnaW5SLCBNYXJnaW5WLCBFZmZl Y3QsIFRleHRcclxuIiwKKyAgICAgICAgICAgIGN0eC0+cGxhbmVfd2lkdGgsIGN0eC0+cGxhbmVf aGVpZ2h0LAorICAgICAgICAgICAgY3R4LT5mb250X25hbWUsIGN0eC0+Zm9udF9zaXplLAorICAg ICAgICAgICAgQVNTX0RFRkFVTFRfQ09MT1IsIEFTU19ERUZBVUxUX0NPTE9SLAorICAgICAgICAg ICAgQVNTX0RFRkFVTFRfQkFDS19DT0xPUiwgQVNTX0RFRkFVTFRfQkFDS19DT0xPUiwKKyAgICAg ICAgICAgIC1BU1NfREVGQVVMVF9CT0xELCAtQVNTX0RFRkFVTFRfSVRBTElDLCAtQVNTX0RFRkFV TFRfVU5ERVJMSU5FLAorICAgICAgICAgICAgY3R4LT5ib3JkZXJfc3R5bGUsIG91dGxpbmUsIHNo YWRvdywgQVNTX0RFRkFVTFRfQUxJR05NRU5UKTsKKworICAgIGlmICghYXZjdHgtPnN1YnRpdGxl X2hlYWRlcikKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRU5PTUVNKTsKKyAgICBhdmN0eC0+c3Vi dGl0bGVfaGVhZGVyX3NpemUgPSBzdHJsZW4oYXZjdHgtPnN1YnRpdGxlX2hlYWRlcik7CisgICAg cmV0dXJuIDA7Cit9CisKK3N0YXRpYyB2b2lkIHNldF9hc3NfY29sb3IoQVZCUHJpbnQgKmJ1Ziwg aW50IGNvbG9yX251bSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgYXJpYmNjX2NvbG9yX3Qg bmV3X2NvbG9yLCBhcmliY2NfY29sb3JfdCBvbGRfY29sb3IpCit7CisgICAgaWYgKEFSSUJDQ19D T0xPUl9ESUZGX1JHQihuZXdfY29sb3IsIG9sZF9jb2xvcikpCisgICAgICAgIGF2X2JwcmludGYo YnVmLCAie1xcJWRjJkglMDZ4Jn0iLCBjb2xvcl9udW0sCisgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBBUklCQ0NfQ09MT1JfUkdCKG5ld19jb2xvcikpOworICAgIGlm IChBUklCQ0NfQ09MT1JfRElGRl9BKG5ld19jb2xvciwgb2xkX2NvbG9yKSAmJiBBUklCQ0NfQ09M T1JfQShuZXdfY29sb3IpKQorICAgICAgICBhdl9icHJpbnRmKGJ1ZiwgIntcXCVkYSZIJTAyeCZ9 IiwgY29sb3JfbnVtLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg QVJJQkNDX0NPTE9SX0EobmV3X2NvbG9yKSk7Cit9CisKK3N0YXRpYyBpbnQgYXJpYmNhcHRpb25f dHJhbnNfYXNzX3N1YnRpdGxlKEFSSUJDYXB0aW9uQ29udGV4dCAqY3R4KQoreworICAgIEFWU3Vi dGl0bGUgKnN1YiA9IGN0eC0+c3ViOworICAgIEFWQlByaW50IGJ1ZjsKKyAgICBpbnQgcmV0ID0g MCwgcmVjdF9pZHg7CisKKyAgICBpZiAoY3R4LT5jYXB0aW9uLnBsYW5lX3dpZHRoID4gMCAmJiBj dHgtPmNhcHRpb24ucGxhbmVfaGVpZ2h0ID4gMCAmJgorICAgICAgICAoY3R4LT5jYXB0aW9uLnBs YW5lX3dpZHRoICE9IGN0eC0+cGxhbmVfd2lkdGggfHwKKyAgICAgICAgIGN0eC0+Y2FwdGlvbi5w bGFuZV9oZWlnaHQgIT0gY3R4LT5wbGFuZV9oZWlnaHQpKSB7CisgICAgICAgIGlmICgocmV0ID0g c2V0X2Fzc19oZWFkZXIoY3R4KSkgPCAwKQorICAgICAgICAgICAgcmV0dXJuIHJldDsKKyAgICAg ICAgY3R4LT5wbGFuZV93aWR0aCA9IGN0eC0+Y2FwdGlvbi5wbGFuZV93aWR0aDsKKyAgICAgICAg Y3R4LT5wbGFuZV9oZWlnaHQgPSBjdHgtPmNhcHRpb24ucGxhbmVfaGVpZ2h0OworICAgIH0KKwor ICAgIHN1Yi0+Zm9ybWF0ID0gMTsgLyogdGV4dCAqLworICAgIGlmIChjdHgtPmNhcHRpb24ucmVn aW9uX2NvdW50ID09IDApIHsKKyAgICAgICAgLyogY2xlYXIgcHJldmlvdXMgY2FwdGlvbiBmb3Ig aW5kZWZpbml0ZSBkdXJhdGlvbiAgKi8KKyAgICAgICAgZmZfYXNzX2FkZF9yZWN0KHN1YiwgIntc XHJ9IiwgY3R4LT5yZWFkb3JkZXIrKywgMCwgTlVMTCwgTlVMTCk7CisgICAgICAgIHJldHVybiAx OworICAgIH0KKworICAgIGF2X2JwcmludF9pbml0KCZidWYsIEFSSUJDX0JQUklOVF9TSVpFX0lO SVQsIEFSSUJDX0JQUklOVF9TSVpFX01BWCk7CisKKyAgICBpZiAoY3R4LT5hc3Nfd29ya2Fyb3Vu ZCkgeworICAgICAgICBpbnQgeCwgeTsKKyAgICAgICAgeCA9IGN0eC0+cGxhbmVfd2lkdGg7Cisg ICAgICAgIHkgPSBjdHgtPnBsYW5lX2hlaWdodDsKKyAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkg PCBjdHgtPmNhcHRpb24ucmVnaW9uX2NvdW50OyBpKyspIHsKKyAgICAgICAgICAgIGlmIChjdHgt PmNhcHRpb24ucmVnaW9uc1tpXS54IDwgeCkKKyAgICAgICAgICAgICAgICB4ID0gY3R4LT5jYXB0 aW9uLnJlZ2lvbnNbaV0ueDsKKyAgICAgICAgICAgIGlmIChjdHgtPmNhcHRpb24ucmVnaW9uc1tp XS55IDwgeSkKKyAgICAgICAgICAgICAgICB5ID0gY3R4LT5jYXB0aW9uLnJlZ2lvbnNbaV0ueTsK KyAgICAgICAgfQorICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7XFxhbjR9Iik7CisgICAgICAg IGlmICh4ID4gMCB8fCB5ID4wKQorICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xccG9z KCVkLCVkKX0iLCB4LCB5KTsKKyAgICB9CisKKyAgICByZWN0X2lkeCA9IDA7CisgICAgZm9yIChp bnQgaSA9IDA7IGkgPCBjdHgtPmNhcHRpb24ucmVnaW9uX2NvdW50OyBpKyspIHsKKyAgICAgICAg YXJpYmNjX2NhcHRpb25fcmVnaW9uX3QgKnJlZ2lvbiA9ICZjdHgtPmNhcHRpb24ucmVnaW9uc1tp XTsKKyAgICAgICAgYXJpYmNjX2NvbG9yX3QgdGV4dF9jb2xvciA9IEFSSUJDQ19NQUtFX1JHQkEo MHhGRiwgMHhGRiwgMHhGRiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgQVJJQkNfQUxQSEFfREVGQVVMVF9GUk9OVCk7CisgICAgICAgIGFyaWJj Y19jb2xvcl90IHN0cm9rZV9jb2xvciA9IEFSSUJDQ19NQUtFX1JHQkEoMCwgMCwgMCwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUklCQ19B TFBIQV9ERUZBVUxUX0ZST05UKTsKKyAgICAgICAgYXJpYmNjX2NvbG9yX3QgYmFja19jb2xvciA9 IEFSSUJDQ19NQUtFX1JHQkEoMCwgMCwgMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgQVJJQkNfQUxQSEFfREVGQVVMVF9CQUNLKTsKKyAgICAg ICAgYXJpYmNjX2NoYXJzdHlsZV90IGNoYXJzdHlsZSA9IGN0eC0+Y2hhcnN0eWxlOworICAgICAg ICBpbnQgY2hhcl93aWR0aCA9IGN0eC0+Zm9udF9zaXplOworICAgICAgICBpbnQgY2hhcl9oZWln aHQgPSBjdHgtPmZvbnRfc2l6ZTsKKyAgICAgICAgaW50IGNoYXJfaG9yaXpvbnRhbF9zcGFjaW5n ID0gMDsKKworICAgICAgICBpZiAocmVnaW9uLT5pc19ydWJ5ICYmIGN0eC0+aWdub3JlX3J1Ynkp CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBpZiAoIWN0eC0+YXNzX3dvcmthcm91 bmQpIHsKKyAgICAgICAgICAgIGF2X2JwcmludF9jbGVhcigmYnVmKTsKKyAgICAgICAgICAgIGF2 X2JwcmludGYoJmJ1ZiwgIntcXGFuNH0iKTsKKyAgICAgICAgICAgIGlmIChyZWdpb24tPnggIT0g MCB8fCByZWdpb24tPnkgIT0gMCkKKyAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7 XFxwb3MoJWQsJWQpfSIsIHJlZ2lvbi0+eCwgcmVnaW9uLT55KTsKKyAgICAgICAgfQorICAgICAg ICBpZiAoY3R4LT5mYWRlb3V0KQorICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcZmFk KDAsNTAwKX0iKTsKKyAgICAgICAgaWYgKHJlZ2lvbi0+aXNfcnVieSkKKyAgICAgICAgICAgIGF2 X2JwcmludGYoJmJ1ZiwgIntcXGZzJWR9IiwgY2hhcl9oZWlnaHQgLyAyKTsKKworICAgICAgICBm b3IgKGludCBqID0gMDsgaiA8IHJlZ2lvbi0+Y2hhcl9jb3VudDsgaisrKSB7CisgICAgICAgICAg ICBhcmliY2NfY2FwdGlvbl9jaGFyX3QgKmNoID0gJnJlZ2lvbi0+Y2hhcnNbal07CisKKyAgICAg ICAgICAgIGlmIChjaC0+Y2hhcl9ob3Jpem9udGFsX3NwYWNpbmcgIT0gY2hhcl9ob3Jpem9udGFs X3NwYWNpbmcpIHsKKyAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7XFxmc3AlZH0i LCAocmVnaW9uLT5pc19ydWJ5KSA/CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBj aC0+Y2hhcl9ob3Jpem9udGFsX3NwYWNpbmcgLyAyIDoKKyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGNoLT5jaGFyX2hvcml6b250YWxfc3BhY2luZyk7CisgICAgICAgICAgICAgICAg Y2hhcl9ob3Jpem9udGFsX3NwYWNpbmcgPSBjaC0+Y2hhcl9ob3Jpem9udGFsX3NwYWNpbmc7Cisg ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2gtPmNoYXJfd2lkdGggIT0gY2hhcl93aWR0 aCkgeworICAgICAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXGZzY3glIlBSSWQ2NCJ9 IiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgIGF2X3Jlc2NhbGUoY2gtPmNoYXJfd2lkdGgs IDEwMCwgY3R4LT5mb250X3NpemUpKTsKKyAgICAgICAgICAgICAgICBjaGFyX3dpZHRoID0gY2gt PmNoYXJfd2lkdGg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoY2gtPmNoYXJfaGVp Z2h0ICE9IGNoYXJfaGVpZ2h0KSB7CisgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAi e1xcZnNjeSUiUFJJZDY0In0iLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfcmVzY2Fs ZShjaC0+Y2hhcl9oZWlnaHQsIDEwMCwgY3R4LT5mb250X3NpemUpKTsKKyAgICAgICAgICAgICAg ICBjaGFyX2hlaWdodCA9IGNoLT5jaGFyX2hlaWdodDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChjaC0+c3R5bGUgIT0gY2hhcnN0eWxlKSB7CisgICAgICAgICAgICAgICAgYXJpYmNj X2NoYXJzdHlsZV90IGRpZmYgPSBjaC0+c3R5bGUgXiBjaGFyc3R5bGU7CisgICAgICAgICAgICAg ICAgaWYgKGRpZmYgJiBBUklCQ0NfQ0hBUlNUWUxFX1NUUk9LRSkgeworICAgICAgICAgICAgICAg ICAgICBpZiAoY2hhcnN0eWxlICYgQVJJQkNDX0NIQVJTVFlMRV9TVFJPS0UpIHsKKyAgICAgICAg ICAgICAgICAgICAgICAgIGlmIChjdHgtPmZvcmNlX3N0cm9rZV90ZXh0KQorICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXGJvcmQlZH0iLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGludCkoY3R4LT5zdHJva2Vfd2lkdGggKiA0 LjAgLyAzLjApKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7XFxib3JkMH0iKTsKKyAgICAgICAgICAg ICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYs ICJ7XFxib3JkM30iKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRp ZmYgJiBBUklCQ0NfQ0hBUlNUWUxFX0JPTEQpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNo YXJzdHlsZSAmIEFSSUJDQ19DSEFSU1RZTEVfQk9MRCkKKyAgICAgICAgICAgICAgICAgICAgICAg IGF2X2JwcmludGYoJmJ1ZiwgIntcXGIwfSIpOworICAgICAgICAgICAgICAgICAgICBlbHNlCisg ICAgICAgICAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYsICJ7XFxiMX0iKTsKKyAgICAg ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKGRpZmYgJiBBUklCQ0NfQ0hBUlNUWUxF X0lUQUxJQykgeworICAgICAgICAgICAgICAgICAgICBpZiAoY2hhcnN0eWxlICYgQVJJQkNDX0NI QVJTVFlMRV9JVEFMSUMpCisgICAgICAgICAgICAgICAgICAgICAgICBhdl9icHJpbnRmKCZidWYs ICJ7XFxpMH0iKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAg ICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcaTF9Iik7CisgICAgICAgICAgICAgICAgfQorICAg ICAgICAgICAgICAgIGlmIChkaWZmICYgQVJJQkNDX0NIQVJTVFlMRV9VTkRFUkxJTkUpIHsKKyAg ICAgICAgICAgICAgICAgICAgaWYgKGNoYXJzdHlsZSAmIEFSSUJDQ19DSEFSU1RZTEVfVU5ERVJM SU5FKQorICAgICAgICAgICAgICAgICAgICAgICAgYXZfYnByaW50ZigmYnVmLCAie1xcdTB9Iik7 CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgICAgIGF2X2Jw cmludGYoJmJ1ZiwgIntcXHUxfSIpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg ICBjaGFyc3R5bGUgPSBjaC0+c3R5bGU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo Y2gtPnRleHRfY29sb3IgIT0gdGV4dF9jb2xvcikgeworICAgICAgICAgICAgICAgIHNldF9hc3Nf Y29sb3IoJmJ1ZiwgMSwgY2gtPnRleHRfY29sb3IsIHRleHRfY29sb3IpOworICAgICAgICAgICAg ICAgIHRleHRfY29sb3IgPSBjaC0+dGV4dF9jb2xvcjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg ICAgIGlmIChjaC0+c3Ryb2tlX2NvbG9yICE9IHN0cm9rZV9jb2xvcikgeworICAgICAgICAgICAg ICAgIHNldF9hc3NfY29sb3IoJmJ1ZiwgMywgY2gtPnN0cm9rZV9jb2xvciwgc3Ryb2tlX2NvbG9y KTsKKyAgICAgICAgICAgICAgICBzdHJva2VfY29sb3IgPSBjaC0+c3Ryb2tlX2NvbG9yOworICAg ICAgICAgICAgfQorICAgICAgICAgICAgaWYgKGNoLT5iYWNrX2NvbG9yICE9IGJhY2tfY29sb3Ip IHsKKyAgICAgICAgICAgICAgICBpZiAoY3R4LT5ib3JkZXJfc3R5bGUgPT0gNCkKKyAgICAgICAg ICAgICAgICAgICAgc2V0X2Fzc19jb2xvcigmYnVmLCA0LCBjaC0+YmFja19jb2xvciwgYmFja19j b2xvcik7CisgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICAgICBzZXRfYXNz X2NvbG9yKCZidWYsIDMsIGNoLT5iYWNrX2NvbG9yLCBiYWNrX2NvbG9yKTsKKyAgICAgICAgICAg ICAgICBiYWNrX2NvbG9yID0gY2gtPmJhY2tfY29sb3I7CisgICAgICAgICAgICB9CisgICAgICAg ICAgICBpZiAocmVnaW9uLT5jaGFyc1tqXS50eXBlID09IEFSSUJDQ19DSEFSVFlQRV9EUkNTKQor ICAgICAgICAgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIlx4ZTNceDgwXHg5MyIpOyAgLyogIuOA kyIgKi8KKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBmZl9hc3NfYnByaW50X3Rl eHRfZXZlbnQoJmJ1ZiwgY2gtPnU4c3RyLCBzdHJsZW4oY2gtPnU4c3RyKSwgIiIsIDApOworICAg ICAgICB9CisgICAgICAgIGF2X2JwcmludGYoJmJ1ZiwgIntcXHJ9JXMiLAorICAgICAgICAgICAg ICAgICAgICAgICAgIChpICsgMSA8IGN0eC0+Y2FwdGlvbi5yZWdpb25fY291bnQpID8gIlxcTiIg OiAiIik7CisKKyAgICAgICAgaWYgKGN0eC0+YXNzX3dvcmthcm91bmQpIHsKKyAgICAgICAgICAg IGZmX2Rsb2coY3R4LCAiQVNTIHN1YnRpdGxlJXMgKCVkLCVkKSAlZHglZCBbJWRdXG4iLAorICAg ICAgICAgICAgICAgICAgICAocmVnaW9uLT5pc19ydWJ5KSA/ICIgKHJ1YnkpIiA6ICIiLAorICAg ICAgICAgICAgICAgICAgICByZWdpb24tPngsIHJlZ2lvbi0+eSwgcmVnaW9uLT53aWR0aCwgcmVn aW9uLT5oZWlnaHQsCisgICAgICAgICAgICAgICAgICAgIHJlY3RfaWR4KTsKKyAgICAgICAgfSBl bHNlIHsKKyAgICAgICAgICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBsZXRlKCZidWYpKSB7Cisg ICAgICAgICAgICAgICAgcmV0ID0gQVZFUlJPUihFTk9NRU0pOworICAgICAgICAgICAgICAgIGdv dG8gZmFpbDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGZmX2Rsb2coY3R4LCAiQVNTIHN1 YnRpdGxlJXMgKCVkLCVkKSAlZHglZCBbJWRdOiAlc1xuIiwKKyAgICAgICAgICAgICAgICAgICAg KHJlZ2lvbi0+aXNfcnVieSkgPyAiIChydWJ5KSIgOiAiIiwKKyAgICAgICAgICAgICAgICAgICAg cmVnaW9uLT54LCByZWdpb24tPnksIHJlZ2lvbi0+d2lkdGgsIHJlZ2lvbi0+aGVpZ2h0LAorICAg ICAgICAgICAgICAgICAgICByZWN0X2lkeCwgYnVmLnN0cik7CisKKyAgICAgICAgICAgIHJldCA9 IGZmX2Fzc19hZGRfcmVjdChzdWIsIGJ1Zi5zdHIsIGN0eC0+cmVhZG9yZGVyKyssIDAgLCBOVUxM LCBOVUxMKTsKKyAgICAgICAgICAgIGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgICAgICBnb3Rv IGZhaWw7CisgICAgICAgICAgICByZWN0X2lkeCsrOworICAgICAgICB9CisgICAgfQorICAgIGlm IChjdHgtPmFzc193b3JrYXJvdW5kKSB7CisgICAgICAgIGlmICghYXZfYnByaW50X2lzX2NvbXBs ZXRlKCZidWYpKSB7CisgICAgICAgICAgICByZXQgPSBBVkVSUk9SKEVOT01FTSk7CisgICAgICAg ICAgICBnb3RvIGZhaWw7CisgICAgICAgIH0KKyAgICAgICAgZmZfZGxvZyhjdHgsICJBU1Mgc3Vi dGl0bGU6ICVzXG4iLCBidWYuc3RyKTsKKworICAgICAgICByZXQgPSBmZl9hc3NfYWRkX3JlY3Qo c3ViLCBidWYuc3RyLCBjdHgtPnJlYWRvcmRlcisrLCAwICwgTlVMTCwgTlVMTCk7CisgICAgICAg IGlmIChyZXQgIT0gMCkKKyAgICAgICAgICAgIGdvdG8gZmFpbDsKKyAgICAgICAgcmVjdF9pZHgr KzsKKyAgICB9CisKKyAgICBhdl9icHJpbnRfZmluYWxpemUoJmJ1ZiwgTlVMTCk7CisgICAgcmV0 dXJuIHJlY3RfaWR4OworCitmYWlsOgorICAgIGlmIChzdWItPnJlY3RzKSB7CisgICAgICAgIGZv ciAoaW50IGkgPSAwOyBpIDwgY3R4LT5jYXB0aW9uLnJlZ2lvbl9jb3VudDsgaSsrKSB7CisgICAg ICAgICAgICBpZiAoc3ViLT5yZWN0c1tpXSkgeworICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZz dWItPnJlY3RzW2ldLT5hc3MpOworICAgICAgICAgICAgICAgIGF2X2ZyZWVwKCZzdWItPnJlY3Rz W2ldKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBhdl9mcmVlcCgmc3ViLT5y ZWN0cyk7CisgICAgfQorICAgIHN1Yi0+bnVtX3JlY3RzID0gMDsKKyAgICBhdl9icHJpbnRfZmlu YWxpemUoJmJ1ZiwgTlVMTCk7CisKKyAgICByZXR1cm4gcmV0OworfQorCitzdGF0aWMgaW50IGFy aWJjYXB0aW9uX3RyYW5zX3RleHRfc3VidGl0bGUoQVJJQkNhcHRpb25Db250ZXh0ICpjdHgpCit7 CisgICAgQVZTdWJ0aXRsZSAqc3ViID0gY3R4LT5zdWI7CisgICAgQVZTdWJ0aXRsZVJlY3QgKnJl Y3Q7CisgICAgaW50IHJldCA9IDA7CisgICAgY29uc3QgY2hhciAqdGV4dDsKKworICAgIHN1Yi0+ cmVjdHMgPSBhdl9jYWxsb2MoY3R4LT5jYXB0aW9uLnJlZ2lvbl9jb3VudCwgc2l6ZW9mKCpzdWIt PnJlY3RzKSk7CisgICAgaWYgKCFzdWItPnJlY3RzKSB7CisgICAgICAgIHJldCA9IEFWRVJST1Io RU5PTUVNKTsKKyAgICAgICAgZ290byBmYWlsOworICAgIH0KKyAgICBzdWItPm51bV9yZWN0cyA9 IDE7CisKKyAgICBzdWItPnJlY3RzWzBdID0gYXZfbWFsbG9jeihzaXplb2YoKnN1Yi0+cmVjdHNb MF0pKTsKKyAgICBpZiAoIXN1Yi0+cmVjdHNbMF0pIHsKKyAgICAgICAgcmV0ID0gQVZFUlJPUihF Tk9NRU0pOworICAgICAgICBnb3RvIGZhaWw7CisgICAgfQorICAgIHJlY3QgPSBzdWItPnJlY3Rz WzBdOworCisgICAgaWYgKGN0eC0+Y2FwdGlvbi5yZWdpb25fY291bnQgPT0gMCkgeworICAgICAg ICB0ZXh0ID0gIiI7IC8qIGNsZWFyIHByZXZpb3VzIGNhcHRpb24gKi8KKyAgICB9IGVsc2Ugewor ICAgICAgICB0ZXh0ID0gY3R4LT5jYXB0aW9uLnRleHQ7CisgICAgICAgIGZmX2Rsb2coY3R4LCAi VEVYVCBzdWJ0aXRsZTogJXNcbiIsIHRleHQpOworICAgIH0KKyAgICByZWN0LT50ZXh0ID0gYXZf c3RyZHVwKHRleHQpOworICAgIGlmICghcmVjdC0+dGV4dCkgeworICAgICAgICByZXQgPSBBVkVS Uk9SKEVOT01FTSk7CisgICAgICAgIGdvdG8gZmFpbDsKKyAgICB9CisKKyAgICBzdWItPmZvcm1h dCA9IDE7IC8qIHRleHQgKi8KKyAgICByZWN0LT50eXBlID0gU1VCVElUTEVfVEVYVDsKKworICAg IHJldHVybiAxOworCitmYWlsOgorICAgIGlmIChzdWItPnJlY3RzKSB7CisgICAgICAgIHJlY3Qg PSBzdWItPnJlY3RzWzBdOworICAgICAgICBpZiAocmVjdCkgeworICAgICAgICAgICAgYXZfZnJl ZXAoJnJlY3QtPnRleHQpOworICAgICAgICAgICAgYXZfZnJlZXAoJnJlY3QpOworICAgICAgICB9 CisgICAgICAgIGF2X2ZyZWVwKCZzdWItPnJlY3RzKTsKKyAgICB9CisgICAgc3ViLT5udW1fcmVj dHMgPSAwOworCisgICAgcmV0dXJuIHJldDsKK30KKworc3RhdGljIGludCBhcmliY2FwdGlvbl9k ZWNvZGUoQVZDb2RlY0NvbnRleHQgKmF2Y3R4LCBBVlN1YnRpdGxlICpzdWIsCisgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBpbnQgKmdvdF9zdWJfcHRyLCBjb25zdCBBVlBhY2tldCAqYXZw a3QpCit7CisgICAgQVJJQkNhcHRpb25Db250ZXh0ICpjdHggPSBhdmN0eC0+cHJpdl9kYXRhOwor ICAgIGludCBzdGF0dXM7CisKKyAgICBmZl9kbG9nKGN0eCwgIkFSSUIgY2FwdGlvbiBwYWNrZXQg cHRzPSUiUFJJeDY0IjpcbiIsIGF2cGt0LT5wdHMpOworICAgIGlmIChzdWItPm51bV9yZWN0cykg eworICAgICAgICBhdnByaXZfcmVxdWVzdF9zYW1wbGUoY3R4LCAiRGlmZmVyZW50IFZlcnNpb24g b2YgU2VnbWVudCBhc2tlZCBUd2ljZSIpOworICAgICAgICByZXR1cm4gQVZFUlJPUl9QQVRDSFdF TENPTUU7CisgICAgfQorICAgIGhleF9kdW1wX2RlYnVnKGN0eCwgYXZwa3QtPmRhdGEsIGF2cGt0 LT5zaXplKTsKKworICAgIGN0eC0+c3ViID0gc3ViOworICAgIGN0eC0+YXZwa3QgPSBhdnBrdDsK KyAgICBjdHgtPnRpbWVfYmFzZSA9IGF2Y3R4LT5wa3RfdGltZWJhc2U7CisgICAgaWYgKGN0eC0+ dGltZV9iYXNlLm51bSA8PSAwIHx8IGN0eC0+dGltZV9iYXNlLmRlbiA8PSAwKSB7CisgICAgICAg IGF2X2xvZyhjdHgsIEFWX0xPR19WRVJCT1NFLCAiTm8gdGltZWJhc2Ugc2V0LiBhc3N1bWluZyA5 MGtIei5cbiIpOworICAgICAgICBjdHgtPnRpbWVfYmFzZSA9IGF2X21ha2VfcSgxLCA5MDAwMCk7 CisgICAgfQorICAgIGlmIChhdnBrdC0+cHRzID09IEFWX05PUFRTX1ZBTFVFKQorICAgICAgICBj dHgtPnB0cyA9IEFSSUJDQ19QVFNfTk9QVFM7CisgICAgZWxzZQorICAgICAgICBjdHgtPnB0cyA9 IGF2X3Jlc2NhbGVfcShhdnBrdC0+cHRzLCBjdHgtPnRpbWVfYmFzZSwgKEFWUmF0aW9uYWwpezEs IDEwMDB9KTsKKworICAgIHN0YXR1cyA9IGFyaWJjY19kZWNvZGVyX2RlY29kZShjdHgtPmRlY29k ZXIsIGF2cGt0LT5kYXRhLCBhdnBrdC0+c2l6ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgY3R4LT5wdHMsICZjdHgtPmNhcHRpb24pOworICAgIGlmIChzdGF0dXMgPT0gQVJJ QkNDX0RFQ09ERV9TVEFUVVNfRVJST1IpIHsKKyAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9HX0VS Uk9SLAorICAgICAgICAgICAgICAgImFyaWJjY19kZWNvZGVyX2RlY29kZSgpIHJldHVybmVkIHdp dGggZXJyb3IuXG4iKTsKKyAgICAgICAgcmV0dXJuIEFWRVJST1IoRUFHQUlOKTsKKyAgICB9Cisg ICAgaWYgKHN0YXR1cyA9PSBBUklCQ0NfREVDT0RFX1NUQVRVU19OT19DQVBUSU9OKSB7CisgICAg ICAgIGZmX2Rsb2coY3R4LCAiTm8gY2FwdGlvbi5cbiIpOworICAgICAgICByZXR1cm4gYXZwa3Qt PnNpemU7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZmZfZGxvZyhjdHgsICJ0eXBlPSUwMngsIGZs YWdzPSV4LCBsYW5nPSUwM3hcbiIsCisgICAgICAgICAgICAgICAgY3R4LT5jYXB0aW9uLnR5cGUs IGN0eC0+Y2FwdGlvbi5mbGFncywgY3R4LT5jYXB0aW9uLmlzbzYzOTJfbGFuZ3VhZ2VfY29kZSk7 CisgICAgICAgIGZmX2Rsb2coY3R4LCAicmVnaW9uIGNvdW50ID0gJWQsIHN0YXJ0PSVkLiVkLCBk dXJhdGlvbj0lZC4lZFxuIiwKKyAgICAgICAgICAgICAgICBjdHgtPmNhcHRpb24ucmVnaW9uX2Nv dW50LAorICAgICAgICAgICAgICAgIChpbnQpKGN0eC0+Y2FwdGlvbi5wdHMgLyAxMDAwKSwgKGlu dCkoY3R4LT5jYXB0aW9uLnB0cyAlIDEwMDApLAorICAgICAgICAgICAgICAgIChpbnQpKChjdHgt PmNhcHRpb24ud2FpdF9kdXJhdGlvbiA9PSBBUklCQ0NfRFVSQVRJT05fSU5ERUZJTklURSkgPwor ICAgICAgICAgICAgICAgICAgICAgIC0xIDogY3R4LT5jYXB0aW9uLndhaXRfZHVyYXRpb24gLyAx MDAwKSwKKyAgICAgICAgICAgICAgICAoaW50KSgoY3R4LT5jYXB0aW9uLndhaXRfZHVyYXRpb24g PT0gQVJJQkNDX0RVUkFUSU9OX0lOREVGSU5JVEUpID8KKyAgICAgICAgICAgICAgICAgICAgICAw IDogY3R4LT5jYXB0aW9uLndhaXRfZHVyYXRpb24gJSAxMDAwKSk7CisgICAgfQorCisgICAgc3dp dGNoIChjdHgtPnN1YnRpdGxlX3R5cGUpIHsKKyAgICBjYXNlIFNVQlRJVExFX1RFWFQ6CisgICAg ICAgIHN0YXR1cyA9IGFyaWJjYXB0aW9uX3RyYW5zX3RleHRfc3VidGl0bGUoY3R4KTsKKyAgICAg ICAgYnJlYWs7CisKKyAgICBjYXNlIFNVQlRJVExFX0FTUzoKKyAgICAgICAgc3RhdHVzID0gYXJp YmNhcHRpb25fdHJhbnNfYXNzX3N1YnRpdGxlKGN0eCk7CisgICAgICAgIGJyZWFrOworCisgICAg Y2FzZSBTVUJUSVRMRV9CSVRNQVA6CisgICAgICAgIHN0YXR1cyA9IGFyaWJjYXB0aW9uX3RyYW5z X2JpdG1hcF9zdWJ0aXRsZShjdHgpOworICAgICAgICBicmVhazsKKworICAgIGNhc2UgU1VCVElU TEVfTk9ORToKKyAgICBkZWZhdWx0OgorICAgICAgICBzdGF0dXMgPSAwOworICAgIH0KKworICAg IGlmIChzdGF0dXMgPCAwKSB7CisgICAgICAgIGF2X2xvZyhjdHgsIEFWX0xPR19FUlJPUiwgIkZh aWxlZCB0byBzZXQgU3VidGl0bGU6ICVzXG4iLAorICAgICAgICAgICAgICAgYXZfZXJyMnN0cihz dGF0dXMpKTsKKyAgICAgICAgYXJpYmNjX2NhcHRpb25fY2xlYW51cCgmY3R4LT5jYXB0aW9uKTsK KyAgICAgICAgcmV0dXJuIHN0YXR1czsKKyAgICB9CisgICAgaWYgKHN0YXR1cyA+IDApIHsKKyAg ICAgICAgKmdvdF9zdWJfcHRyID0gMTsKKyAgICAgICAgaWYgKGN0eC0+YXZwa3QtPnB0cyAhPSBB Vl9OT1BUU19WQUxVRSkKKyAgICAgICAgICAgIHN1Yi0+cHRzID0gYXZfcmVzY2FsZV9xKGN0eC0+ YXZwa3QtPnB0cywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+dGlt ZV9iYXNlLCBBVl9USU1FX0JBU0VfUSk7CisgICAgICAgIGlmIChjdHgtPmNhcHRpb24ud2FpdF9k dXJhdGlvbiA9PSBBUklCQ0NfRFVSQVRJT05fSU5ERUZJTklURSkKKyAgICAgICAgICAgIHN1Yi0+ ZW5kX2Rpc3BsYXlfdGltZSA9IFVJTlQzMl9NQVg7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg IHN1Yi0+ZW5kX2Rpc3BsYXlfdGltZSA9ICh1aW50MzJfdCljdHgtPmNhcHRpb24ud2FpdF9kdXJh dGlvbjsKKyAgICB9CisKKyAgICBhcmliY2NfY2FwdGlvbl9jbGVhbnVwKCZjdHgtPmNhcHRpb24p OworICAgIHJldHVybiBhdnBrdC0+c2l6ZTsKK30KKworc3RhdGljIHZvaWQgYXJpYmNhcHRpb25f Zmx1c2goQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAgIEFSSUJDYXB0aW9uQ29udGV4dCAq Y3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGlmICghKGF2Y3R4LT5mbGFnczIgJiBBVl9D T0RFQ19GTEFHMl9ST19GTFVTSF9OT09QKSkgeworICAgICAgICBpZiAoY3R4LT5kZWNvZGVyKQor ICAgICAgICAgICAgYXJpYmNjX2RlY29kZXJfZmx1c2goY3R4LT5kZWNvZGVyKTsKKyAgICAgICAg aWYgKGN0eC0+cmVuZGVyZXIpCisgICAgICAgICAgICBhcmliY2NfcmVuZGVyZXJfZmx1c2goY3R4 LT5yZW5kZXJlcik7CisgICAgICAgIGN0eC0+cmVhZG9yZGVyID0gMDsKKyAgICB9Cit9CisKK3N0 YXRpYyBpbnQgYXJpYmNhcHRpb25fY2xvc2UoQVZDb2RlY0NvbnRleHQgKmF2Y3R4KQoreworICAg IEFSSUJDYXB0aW9uQ29udGV4dCAqY3R4ID0gYXZjdHgtPnByaXZfZGF0YTsKKworICAgIGFyaWJj YXB0aW9uX2ZsdXNoKGF2Y3R4KTsKKworICAgIGlmIChjdHgtPmNsdXQpCisgICAgICAgIGF2X2Zy ZWVwKCZjdHgtPmNsdXQpOworICAgIGlmIChjdHgtPnJlbmRlcmVyKSB7CisgICAgICAgIGFyaWJj Y19yZW5kZXJlcl9mcmVlKGN0eC0+cmVuZGVyZXIpOworICAgICAgICBjdHgtPmRlY29kZXIgPSBO VUxMOworICAgIH0KKyAgICBpZiAoY3R4LT5kZWNvZGVyKSB7CisgICAgICAgIGFyaWJjY19kZWNv ZGVyX2ZyZWUoY3R4LT5kZWNvZGVyKTsKKyAgICAgICAgY3R4LT5kZWNvZGVyID0gTlVMTDsKKyAg ICB9CisgICAgaWYgKGN0eC0+Y29udGV4dCkgeworICAgICAgICBhcmliY2NfY29udGV4dF9mcmVl KGN0eC0+Y29udGV4dCk7CisgICAgICAgIGN0eC0+Y29udGV4dCA9IE5VTEw7CisgICAgIH0KKwor ICAgIHJldHVybiAwOworfQorCitzdGF0aWMgaW50IGFyaWJjYXB0aW9uX2luaXQoQVZDb2RlY0Nv bnRleHQgKmF2Y3R4KQoreworICAgIEFSSUJDYXB0aW9uQ29udGV4dCAqY3R4ID0gYXZjdHgtPnBy aXZfZGF0YTsKKyAgICBhcmliY2NfcHJvZmlsZV90IHByb2ZpbGU7CisgICAgYXJpYmNjX2VuY29k aW5nX3NjaGVtZV90IGVuY29kZV9zY2hlbWU7CisgICAgaW50IHJldCA9IDA7CisKKyAgICBjdHgt PmF2Y3R4ID0gYXZjdHg7CisKKyAgICBzd2l0Y2ggKGF2Y3R4LT5wcm9maWxlKSB7CisgICAgY2Fz ZSBGRl9QUk9GSUxFX0FSSUJfUFJPRklMRV9BOgorICAgICAgICBwcm9maWxlID0gQVJJQkNDX1BS T0ZJTEVfQTsKKyAgICAgICAgLyogYXNzdW1lIDk2MHg1NDAgYXQgaW5pdGlhbCBzdGF0ZSAqLwor ICAgICAgICBjdHgtPnBsYW5lX3dpZHRoID0gOTYwOworICAgICAgICBjdHgtPnBsYW5lX2hlaWdo dCA9IDU0MDsKKyAgICAgICAgY3R4LT5mb250X3NpemUgPSAzNjsKKyAgICAgICAgYnJlYWs7Cisg ICAgY2FzZSBGRl9QUk9GSUxFX0FSSUJfUFJPRklMRV9DOgorICAgICAgICBwcm9maWxlID0gQVJJ QkNDX1BST0ZJTEVfQzsKKyAgICAgICAgY3R4LT5wbGFuZV93aWR0aCA9IDMyMDsKKyAgICAgICAg Y3R4LT5wbGFuZV9oZWlnaHQgPSAxODA7CisgICAgICAgIGN0eC0+Zm9udF9zaXplID0gMTY7Cisg ICAgICAgIGJyZWFrOworICAgIGRlZmF1bHQ6CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9H X0VSUk9SLCAiVW5rbm93biBvciB1bnN1cHBvcnRlZCBwcm9maWxlIHNldC5cbiIpOworICAgICAg ICByZXR1cm4gQVZFUlJPUihFSU5WQUwpOworICAgIH0KKyAgICAvKiBkZXRlcm1pbmUgQm9yZGVy U3R5bGUgb2YgQVNTIGhlYWRlciAqLworICAgIGlmIChjdHgtPmlnbm9yZV9iYWNrZ3JvdW5kKQor ICAgICAgICBjdHgtPmJvcmRlcl9zdHlsZSA9IDE7CisgICAgZWxzZQorICAgICAgICBjdHgtPmJv cmRlcl9zdHlsZSA9IDQ7CisgICAgY3R4LT5jaGFyc3R5bGUgPSBBUklCQ0NfQ0hBUlNUWUxFX0RF RkFVTFQ7CisgICAgaWYgKGN0eC0+Zm9yY2Vfc3Ryb2tlX3RleHQgfHwgY3R4LT5pZ25vcmVfYmFj a2dyb3VuZCkKKyAgICAgICAgY3R4LT5jaGFyc3R5bGUgfD0gQVJJQkNDX0NIQVJTVFlMRV9TVFJP S0U7CisKKyAgICBlbmNvZGVfc2NoZW1lID0gQVJJQkNDX0VOQ09ESU5HX1NDSEVNRV9BVVRPOwor ICAgIGlmIChhdmN0eC0+c3ViX2NoYXJlbmNfbW9kZSA9PSBGRl9TVUJfQ0hBUkVOQ19NT0RFX0RP X05PVEhJTkcpCisgICAgICAgIGVuY29kZV9zY2hlbWUgPSBBUklCQ0NfRU5DT0RJTkdfU0NIRU1F X0FSSUJfU1REX0IyNF9VVEY4OworCisgICAgaWYgKCEoY3R4LT5jb250ZXh0ID0gYXJpYmNjX2Nv bnRleHRfYWxsb2MoKSkpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4LCBBVl9MT0dfRVJST1IsICJG YWlsZWQgdG8gYWxsb2MgbGliYXJpYmNhcHRpb24gY29udGV4dC5cbiIpOworICAgICAgICBhcmli Y2FwdGlvbl9jbG9zZShhdmN0eCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwor ICAgIH0KKyAgICBhcmliY2NfY29udGV4dF9zZXRfbG9nY2F0X2NhbGxiYWNrKGN0eC0+Y29udGV4 dCwgbG9nY2F0X2NhbGxiYWNrLCBhdmN0eCk7CisgICAgaWYgKCEoY3R4LT5kZWNvZGVyID0gYXJp YmNjX2RlY29kZXJfYWxsb2MoY3R4LT5jb250ZXh0KSkpIHsKKyAgICAgICAgYXZfbG9nKGF2Y3R4 LCBBVl9MT0dfRVJST1IsICJGYWlsZWQgdG8gYWxsb2MgbGliYXJpYmNhcHRpb24gZGVjb2Rlci5c biIpOworICAgICAgICBhcmliY2FwdGlvbl9jbG9zZShhdmN0eCk7CisgICAgICAgIHJldHVybiBB VkVSUk9SX0VYVEVSTkFMOworICAgIH0KKyAgICBpZiAoIWFyaWJjY19kZWNvZGVyX2luaXRpYWxp emUoY3R4LT5kZWNvZGVyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbmNv ZGVfc2NoZW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUklCQ0NfQ0FQ VElPTlRZUEVfQ0FQVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHJv ZmlsZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQVJJQkNDX0xBTkdVQUdF SURfRklSU1QpKSB7CisgICAgICAgIGF2X2xvZyhhdmN0eCwgQVZfTE9HX0VSUk9SLCAiRmFpbGVk IHRvIGluaXRpYWxpemUgbGliYXJpYmNhcHRpb24gZGVjb2Rlci5cbiIpOworICAgICAgICBhcmli Y2FwdGlvbl9jbG9zZShhdmN0eCk7CisgICAgICAgIHJldHVybiBBVkVSUk9SX0VYVEVSTkFMOwor ICAgIH0KKyAgICBhcmliY2NfZGVjb2Rlcl9zZXRfcmVwbGFjZV9tc3pfZnVsbHdpZHRoX2FzY2lp KGN0eC0+ZGVjb2RlciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGN0eC0+cmVwbGFjZV9mdWxsd2lkdGhfYXNjaWkpOworCisgICAgc3dpdGNoIChj dHgtPnN1YnRpdGxlX3R5cGUpIHsKKyAgICBjYXNlIFNVQlRJVExFX0FTUzoKKyAgICAgICAgcmV0 ID0gc2V0X2Fzc19oZWFkZXIoY3R4KTsKKyAgICAgICAgaWYgKHJldCAhPSAwKSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBzZXQgQVNTIGhlYWRl cjogJXNcbiIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXZfZXJy MnN0cihyZXQpKTsKKyAgICAgICAgICAgIHJldHVybiByZXQ7CisgICAgICAgIH0KKyAgICAgICAg YnJlYWs7CisKKyAgICBjYXNlIFNVQlRJVExFX0JJVE1BUDoKKyAgICAgICAgaWYoIShjdHgtPnJl bmRlcmVyID0gYXJpYmNjX3JlbmRlcmVyX2FsbG9jKGN0eC0+Y29udGV4dCkpKSB7CisgICAgICAg ICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBhbGxvYyBsaWJhcmli Y2FwdGlvbiByZW5kZXJlci5cbiIpOworICAgICAgICAgICAgYXJpYmNhcHRpb25fY2xvc2UoYXZj dHgpOworICAgICAgICAgICAgcmV0dXJuIEFWRVJST1JfRVhURVJOQUw7CisgICAgICAgIH0KKyAg ICAgICAgaWYoIWFyaWJjY19yZW5kZXJlcl9pbml0aWFsaXplKGN0eC0+cmVuZGVyZXIsCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBBUklCQ0NfQ0FQVElPTlRZUEVfQ0FQ VElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFSSUJDQ19GT05U UFJPVklERVJfVFlQRV9BVVRPLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgKGFyaWJjY190ZXh0cmVuZGVyZXJfdHlwZV90KWN0eC0+cmVuZGVyaW5nX2JhY2tlbmQpKSB7 CisgICAgICAgICAgICBhdl9sb2coYXZjdHgsIEFWX0xPR19FUlJPUiwgIkZhaWxlZCB0byBpbml0 aWFsaXplIGxpYmFyaWJjYXB0aW9uIHJlbmRlcmVyLlxuIik7CisgICAgICAgICAgICBhcmliY2Fw dGlvbl9jbG9zZShhdmN0eCk7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUl9FWFRFUk5BTDsK KyAgICAgICAgfQorICAgICAgICBlc3RpbWF0ZV92aWRlb19mcmFtZV9zaXplKGN0eCk7CisgICAg ICAgIGlmICghYXJpYmNjX3JlbmRlcmVyX3NldF9mcmFtZV9zaXplKGN0eC0+cmVuZGVyZXIsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGN0eC0+ZnJhbWVfd2lk dGgsIGN0eC0+ZnJhbWVfaGVpZ2h0KSkgeworICAgICAgICAgICAgYXZfbG9nKGN0eCwgQVZfTE9H X0VSUk9SLAorICAgICAgICAgICAgICAgICAgICJhcmliY2NfcmVuZGVyZXJfc2V0X2ZyYW1lX3Np emUoKSByZXR1cm5lZCB3aXRoIGVycm9yLlxuIik7CisgICAgICAgICAgICByZXR1cm4gQVZFUlJP Ul9FWFRFUk5BTDsKKyAgICAgICAgfQorICAgICAgICBpZiAoIShjdHgtPmNsdXQgPSBhdl9tYWxs b2N6KEFWUEFMRVRURV9TSVpFKSkpCisgICAgICAgICAgICByZXR1cm4gQVZFUlJPUihFTk9NRU0p OworCisgICAgICAgIGFyaWJjY19yZW5kZXJlcl9zZXRfc3RvcmFnZV9wb2xpY3koY3R4LT5yZW5k ZXJlciwgQVJJQkNDX0NBUFRJT05fU1RPUkFHRV9QT0xJQ1lfTUlOSU1VTSwgMCk7CisgICAgICAg IGFyaWJjY19yZW5kZXJlcl9zZXRfcmVwbGFjZV9kcmNzKGN0eC0+cmVuZGVyZXIsIGN0eC0+cmVw bGFjZV9kcmNzKTsKKyAgICAgICAgYXJpYmNjX3JlbmRlcmVyX3NldF9mb3JjZV9zdHJva2VfdGV4 dChjdHgtPnJlbmRlcmVyLCBjdHgtPmZvcmNlX3N0cm9rZV90ZXh0KTsKKyAgICAgICAgYXJpYmNj X3JlbmRlcmVyX3NldF9mb3JjZV9ub19iYWNrZ3JvdW5kKGN0eC0+cmVuZGVyZXIsIGN0eC0+aWdu b3JlX2JhY2tncm91bmQpOworICAgICAgICBhcmliY2NfcmVuZGVyZXJfc2V0X2ZvcmNlX25vX3J1 YnkoY3R4LT5yZW5kZXJlciwgY3R4LT5pZ25vcmVfcnVieSk7CisgICAgICAgIGFyaWJjY19yZW5k ZXJlcl9zZXRfc3Ryb2tlX3dpZHRoKGN0eC0+cmVuZGVyZXIsIGN0eC0+c3Ryb2tlX3dpZHRoKTsK KyAgICAgICAgaWYgKGN0eC0+Zm9udF9uYW1lICYmIHN0cmxlbihjdHgtPmZvbnRfbmFtZSkgPiAw KSB7CisgICAgICAgICAgICBjb25zdCBjaGFyKiBmb250X2ZhbWlsaWVzW10gPSB7IGN0eC0+Zm9u dF9uYW1lIH07CisgICAgICAgICAgICBhcmliY2NfcmVuZGVyZXJfc2V0X2RlZmF1bHRfZm9udF9m YW1pbHkoY3R4LT5yZW5kZXJlciwgZm9udF9mYW1pbGllcywgMSwgdHJ1ZSk7CisgICAgICAgIH0K KyAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFNVQlRJVExFX1RFWFQ6CisgICAgY2FzZSBTVUJU SVRMRV9OT05FOgorICAgIGRlZmF1bHQ6CisgICAgICAgIC8qIGRvIG5vdGhpbmcgKi8gOworICAg IH0KKworICAgIGN0eC0+cmVhZG9yZGVyID0gMDsKKworICAgIHJldHVybiAwOworfQorCisjaWYg IWRlZmluZWQoREVGQVVMVF9TVUJUSVRMRV9UWVBFKQorIyBkZWZpbmUgREVGQVVMVF9TVUJUSVRM RV9UWVBFIFNVQlRJVExFX0FTUworI2VuZGlmCisjaWYgIWRlZmluZWQoQVNTX1dPUktBUk9VTkQp CisjIGRlZmluZSBBU1NfV09SS0FST1VORCAxCisjZW5kaWYKKyNpZiAhZGVmaW5lZChERUZBVUxU X0ZPTlRfRkFNSUxZKQorIyBpZiBkZWZpbmVkKF9XSU4zMikKKyMgIGRlZmluZSBERUZBVUxUX0ZP TlRfRkFNSUxZIEFTU19ERUZBVUxUX0ZPTlQKKyMgZWxzZQorIyAgZGVmaW5lIERFRkFVTFRfRk9O VF9GQU1JTFkgInNhbnMtc2VyaWYiCisjIGVuZGlmCisjZW5kaWYKKworI2RlZmluZSBPRkZTRVQo eCkgb2Zmc2V0b2YoQVJJQkNhcHRpb25Db250ZXh0LCB4KQorI2RlZmluZSBTRCBBVl9PUFRfRkxB R19TVUJUSVRMRV9QQVJBTSB8IEFWX09QVF9GTEFHX0RFQ09ESU5HX1BBUkFNCitzdGF0aWMgY29u c3QgQVZPcHRpb24gb3B0aW9uc1tdID0geworICAgIHsgInN1Yl90eXBlIiwgInN1YnRpdGxlIHJl bmRlcmluZyB0eXBlIiwKKyAgICAgIE9GRlNFVChzdWJ0aXRsZV90eXBlKSwgQVZfT1BUX1RZUEVf SU5ULAorICAgICAgeyAuaTY0ID0gREVGQVVMVF9TVUJUSVRMRV9UWVBFIH0sIFNVQlRJVExFX05P TkUsIFNVQlRJVExFX0FTUywgU0QsICJ0eXBlIiB9LAorICAgIHsgIm5vbmUiLCAgICJkbyBub3Ro aW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7IC5pNjQgPSBTVUJUSVRMRV9OT05F IH0sIC5mbGFncyA9IFNELCAudW5pdCA9ICJ0eXBlIiB9LAorICAgIHsgImJpdG1hcCIsICJiaXRt YXAgcmVuZGVyaW5nIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7IC5pNjQgPSBTVUJU SVRMRV9CSVRNQVAgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInR5cGUiIH0sCisgICAgeyAidGV4 dCIsICAgInBsYWluIHRleHQiLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsgLmk2NCA9 IFNVQlRJVExFX1RFWFQgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInR5cGUiIH0sCisgICAgeyAi YXNzIiwgICAgImZvcm1hdHRlZCB0ZXh0IiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7 IC5pNjQgPSBTVUJUSVRMRV9BU1MgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInR5cGUiIH0sCisg ICAgeyAiYXNzX3dvcmthcm91bmQiLCAid29ya2Fyb3VuZCBvZiBBU1Mgc3VidGl0bGUgZm9yIHBs YXllcnMgd2hpY2ggY2FuJ3QgaGFuZGxlIG11bHRpLXJlY3RhbmdsZSAoZS5nLiwgTVBWKSBbYXNz XSIsCisgICAgICBPRkZTRVQoYXNzX3dvcmthcm91bmQpLCBBVl9PUFRfVFlQRV9CT09MLCB7IC5p NjQgPSBBU1NfV09SS0FST1VORCB9LCAwLCAxLCBTRCB9LAorICAgIHsgImZvbnQiLCAiZm9udCBu YW1lIFthc3MsIGJpdG1hcF0iLAorICAgICAgT0ZGU0VUKGZvbnRfbmFtZSksIEFWX09QVF9UWVBF X1NUUklORywgeyAuc3RyID0gREVGQVVMVF9GT05UX0ZBTUlMWSB9LCAwLCAwLCBTRCB9LAorICAg IHsgInJlcGxhY2VfZnVsbHdpZHRoX2FzY2lpIiwgInJlcGxhY2UgTVNaIGZ1bGx3aWR0aCBhbHBo YW51bWVyaWNzIHdpdGggaGFsZndpZHRoIGFscGhhbnVtZXJpY3MgW2FzcywgYml0bWFwXSIsCisg ICAgICBPRkZTRVQocmVwbGFjZV9mdWxsd2lkdGhfYXNjaWkpLCBBVl9PUFRfVFlQRV9CT09MLCB7 IC5pNjQgPSAxIH0sIDAsIDEsIFNEIH0sCisgICAgeyAiZm9yY2Vfb3V0bGluZV90ZXh0IiwgImFs d2F5cyByZW5kZXIgY2hhcmFjdGVycyB3aXRoIG91dGxpbmUgWyhhc3MpLCBiaXRtYXBdIiwKKyAg ICAgIE9GRlNFVChmb3JjZV9zdHJva2VfdGV4dCksIEFWX09QVF9UWVBFX0JPT0wsIHsgLmk2NCA9 IDAgfSwgMCwgMSwgU0QgfSwKKyAgICB7ICJpZ25vcmVfYmFja2dyb3VuZCIsICJpZ25vcmUgcmVu ZGVyaW5nIGNhcHRpb24gYmFja2dyb3VuZCBbKGFzcyksIGJpdG1hcF0iLAorICAgICAgT0ZGU0VU KGlnbm9yZV9iYWNrZ3JvdW5kKSwgQVZfT1BUX1RZUEVfQk9PTCwgeyAuaTY0ID0gMCB9LCAwLCAx LCBTRCB9LAorICAgIHsgImlnbm9yZV9ydWJ5IiwgImlnbm9yZSBydWJ5LWxpa2UgY2hhcmFjdGVy cyBbYXNzLCBiaXRtYXBdIiwKKyAgICAgIE9GRlNFVChpZ25vcmVfcnVieSksIEFWX09QVF9UWVBF X0JPT0wsIHsgLmk2NCA9IDAgfSwgMCwgMSwgU0QgfSwKKyAgICB7ICJmYWRlb3V0IiwgImVuYWJs ZSBGYWRlb3V0IFthc3MsIGJpdG1hcF0iLAorICAgICAgT0ZGU0VUKGZhZGVvdXQpLCBBVl9PUFRf VFlQRV9CT09MLCB7IC5pNjQgPSAwIH0sIDAsIDEsIFNEIH0sCisgICAgeyAib3V0bGluZV93aWR0 aCIsICJvdXRsaW5lIHdpZHRoIG9mIHRleHQgWyhhc3MpLCBiaXRtYXBdIiwKKyAgICAgIE9GRlNF VChzdHJva2Vfd2lkdGgpLCBBVl9PUFRfVFlQRV9GTE9BVCwgeyAuZGJsID0gMS41IH0sIDAuMCwg My4wLCBTRCB9LAorICAgIHsgInJlcGxhY2VfZHJjcyIsICJyZXBsYWNlIGtub3duIERSQ1MgW2Jp dG1hcF0iLAorICAgICAgT0ZGU0VUKHJlcGxhY2VfZHJjcyksIEFWX09QVF9UWVBFX0JPT0wsIHsg Lmk2NCA9IDEgfSwgMCwgMSwgU0QgfSwKKyAgICB7ICJyZW5kZXJpbmdfYmFja2VuZCIsICJ0ZXh0 IHJlbmRlcmluZyBiYWNrZW5kIFtiaXRtYXBdIiwKKyAgICAgIE9GRlNFVChyZW5kZXJpbmdfYmFj a2VuZCksIEFWX09QVF9UWVBFX0lOVCwKKyAgICAgIHsgLmk2NCA9IEFSSUJDQ19URVhUUkVOREVS RVJfVFlQRV9BVVRPIH0sCisgICAgICBBUklCQ0NfVEVYVFJFTkRFUkVSX1RZUEVfQVVUTywgQVJJ QkNDX1RFWFRSRU5ERVJFUl9UWVBFX0ZSRUVUWVBFLCBTRCwgInJlbmRlcmVyIn0sCisgICAgeyAi YXV0byIsICAgIkRldGVjdCBhbmQgc2VsZWN0IFRleHRSZW5kZXJlciBhdXRvbWF0aWNhbGx5Iiwg MCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7IC5pNjQgPSBBUklCQ0NfVEVYVFJFTkRFUkVS X1RZUEVfQVVUTyB9LCAuZmxhZ3MgPSBTRCwgLnVuaXQgPSAicmVuZGVyZXIiIH0sCisjaWZkZWYg QVJJQkNDX1VTRV9DT1JFVEVYVAorICAgIHsgImNvcmV0ZXh0IiwgICAiQXBwbGUgQ29yZVRleHQg QVBJIGJhc2VkIFRleHRSZW5kZXJlci4gQXZhaWxhYmxlIG9uIG1hY09TIGFuZCBpT1MuIiwgMCwg QVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7IC5pNjQgPSBBUklCQ0NfVEVYVFJFTkRFUkVSX1RZ UEVfQ09SRVRFWFQgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInJlbmRlcmVyIiB9LAorI2VuZGlm CisjaWZkZWYgQVJJQkNDX1VTRV9ESVJFQ1RXUklURQorICAgIHsgImRpcmVjdHdyaXRlIiwgICAi RGlyZWN0V3JpdGUgQVBJIGJhc2VkIFRleHRSZW5kZXJlci4gQXZhaWxhYmxlIG9uIFdpbmRvd3Mg NysuIiwgMCwgQVZfT1BUX1RZUEVfQ09OU1QsCisgICAgICB7IC5pNjQgPSBBUklCQ0NfVEVYVFJF TkRFUkVSX1RZUEVfRElSRUNUV1JJVEUgfSwgLmZsYWdzID0gU0QsIC51bml0ID0gInJlbmRlcmVy IiB9LAorI2VuZGlmCisjaWZkZWYgQVJJQkNDX1VTRV9GUkVFVFlQRQorICAgIHsgImZyZWV0eXBl IiwgICAiRnJlZXR5cGUgYmFzZWQgVGV4dFJlbmRlcmVyLiBBdmFpbGFibGUgb24gYWxsIHBsYXRm b3Jtcy4iLCAwLCBBVl9PUFRfVFlQRV9DT05TVCwKKyAgICAgIHsgLmk2NCA9IEFSSUJDQ19URVhU UkVOREVSRVJfVFlQRV9GUkVFVFlQRSB9LCAuZmxhZ3MgPSBTRCwgLnVuaXQgPSAicmVuZGVyZXIi IH0sCisjZW5kaWYKKyAgICB7IE5VTEwgfQorfTsKKworc3RhdGljIGNvbnN0IEFWQ2xhc3MgYXJp YmNhcHRpb25fY2xhc3MgPSB7CisgICAgLmNsYXNzX25hbWUgPSAiYXJpYmNhcHRpb24gZGVjb2Rl ciIsCisgICAgLml0ZW1fbmFtZSAgPSBhdl9kZWZhdWx0X2l0ZW1fbmFtZSwKKyAgICAub3B0aW9u ICAgICA9IG9wdGlvbnMsCisgICAgLnZlcnNpb24gICAgPSBMSUJBVlVUSUxfVkVSU0lPTl9JTlQs Cit9OworCitjb25zdCBGRkNvZGVjIGZmX2FyaWJjYXB0aW9uX2RlY29kZXIgPSB7CisgICAgLnAu bmFtZSAgICAgID0gImFyaWJjYXB0aW9uIiwKKyAgICAucC5sb25nX25hbWUgPSBOVUxMX0lGX0NP TkZJR19TTUFMTCgiQVJJQiBTVEQtQjI0IGNhcHRpb24gZGVjb2RlciIpLAorICAgIC5wLnR5cGUg ICAgICA9IEFWTUVESUFfVFlQRV9TVUJUSVRMRSwKKyAgICAucC5pZCAgICAgICAgPSBBVl9DT0RF Q19JRF9BUklCX0NBUFRJT04sCisgICAgLnByaXZfZGF0YV9zaXplID0gc2l6ZW9mKEFSSUJDYXB0 aW9uQ29udGV4dCksCisgICAgLmluaXQgICAgICA9IGFyaWJjYXB0aW9uX2luaXQsCisgICAgLmNs b3NlICAgICA9IGFyaWJjYXB0aW9uX2Nsb3NlLAorICAgIEZGX0NPREVDX0RFQ09ERV9TVUJfQ0Io YXJpYmNhcHRpb25fZGVjb2RlKSwKKyAgICAuZmx1c2ggICAgID0gYXJpYmNhcHRpb25fZmx1c2gs CisgICAgLnAucHJpdl9jbGFzcz0gJmFyaWJjYXB0aW9uX2NsYXNzLAorICAgIC5jYXBzX2ludGVy bmFsID0gRkZfQ09ERUNfQ0FQX0lOSVRfVEhSRUFEU0FGRSwKK307Ci0tIAoyLjMwLjIKCl9fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmZmbXBlZy1kZXZlbCBt YWlsaW5nIGxpc3QKZmZtcGVnLWRldmVsQGZmbXBlZy5vcmcKaHR0cHM6Ly9mZm1wZWcub3JnL21h aWxtYW4vbGlzdGluZm8vZmZtcGVnLWRldmVsCgpUbyB1bnN1YnNjcmliZSwgdmlzaXQgbGluayBh Ym92ZSwgb3IgZW1haWwKZmZtcGVnLWRldmVsLXJlcXVlc3RAZmZtcGVnLm9yZyB3aXRoIHN1Ympl Y3QgInVuc3Vic2NyaWJlIi4K