From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mails.dpdk.org (mails.dpdk.org [217.70.189.124]) by inbox.dpdk.org (Postfix) with ESMTP id 7F2EAA052A; Mon, 25 Jan 2021 11:29:12 +0100 (CET) Received: from [217.70.189.124] (localhost [127.0.0.1]) by mails.dpdk.org (Postfix) with ESMTP id 4416E140E9E; Mon, 25 Jan 2021 11:29:12 +0100 (CET) Received: from mga14.intel.com (mga14.intel.com [192.55.52.115]) by mails.dpdk.org (Postfix) with ESMTP id 332ED140E9B for ; Mon, 25 Jan 2021 11:29:09 +0100 (CET) IronPort-SDR: B3O6NF53WWNzIXytVQbEsglbxdqurbef6cZXKcHqriomMfXyI8MdfM1mtXC0MOddYN1UqbL9zK ga0ampRfscsA== X-IronPort-AV: E=McAfee;i="6000,8403,9874"; a="178925633" X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="178925633" Received: from orsmga002.jf.intel.com ([10.7.209.21]) by fmsmga103.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 25 Jan 2021 02:29:07 -0800 IronPort-SDR: 3mhqQR/S4CrbuZfuZw+MoFglr8ROHyEXtbwzBBfciu0MkESUQO+4RTQacWNmZum8ILwl7vZPF1 sshXv/7xwYaQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="5.79,373,1602572400"; d="scan'208";a="368586551" Received: from orsmsx605.amr.corp.intel.com ([10.22.229.18]) by orsmga002.jf.intel.com with ESMTP; 25 Jan 2021 02:29:07 -0800 Received: from orsmsx608.amr.corp.intel.com (10.22.229.21) by ORSMSX605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 25 Jan 2021 02:29:06 -0800 Received: from orsmsx605.amr.corp.intel.com (10.22.229.18) by ORSMSX608.amr.corp.intel.com (10.22.229.21) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5; Mon, 25 Jan 2021 02:29:06 -0800 Received: from ORSEDG602.ED.cps.intel.com (10.7.248.7) by orsmsx605.amr.corp.intel.com (10.22.229.18) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.1713.5 via Frontend Transport; Mon, 25 Jan 2021 02:29:06 -0800 Received: from NAM12-DM6-obe.outbound.protection.outlook.com (104.47.59.177) by edgegateway.intel.com (134.134.137.103) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.1713.5; Mon, 25 Jan 2021 02:29:05 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=MwAhGCkrT/Lh0kNqdhAGgPkH8a0tmnTVS67oW0+N7avBWkOyzEfYylAcVm1/bhoGGZbUhmsMdM5Rs3kQ37vXFtTo1V9FprcsN/FW/aczVWxWavJcykpqlNtCVBuQpIBmJwEG6Bn811792JNoCi0ujiTYrdxxY+grZwpm1/HYrWRd6ZNvcs7MyOemm59Lux3BkgXdtMUUXJcDHIRtQ51mscSDfXwFiI3UCHYJkeUjipzYA66/Aqv9QpcjtYNu/aJYGGetKAqtRNRTJmHUsoFK4zEDwCD9KjPu0hQ3dqBdL/OQVYELVcodtGWfgbT9ECXWwP7RKuO6azHzjJSEpx7J+w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XjpN/0svQo7XHIKPFgt8VZYwUyQ5QhyFlOth6a6eT0U=; b=eeFO/zj6HbWtMpUWTww/byoBa8iHjgfZYDTOy67mO9dwIIL2i3Ip0ka8SAQqBFH8ww6q7WAHGgsb9HOpdqHBr0uwcZ7sNWdD/XMm6urZtKncFb/J6+Ktz/nQoME/dcC4ceFAToS1XjWWYPyCxh2/XnJKL6gNA1vjukOEIaKHWmZR2uE3NE1KBSCSRv4nD86/BZA5zQw+m/m7t7BZ4ggdtXDytzyIw3qHKWAsybQXrzlihTo2aOjXdWSFfXivguRcfyZ6o11rK6aO23N5FsXGOWSrRzNQsBst0s5aZtDHzmCVSaMkz4gQ3WlDJ3T/vnZBqeXf1nQPPP+ZEfiZeskEIQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=intel.com; dmarc=pass action=none header.from=intel.com; dkim=pass header.d=intel.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=intel.onmicrosoft.com; s=selector2-intel-onmicrosoft-com; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=XjpN/0svQo7XHIKPFgt8VZYwUyQ5QhyFlOth6a6eT0U=; b=uTv5AgHDu0sjwfw5ssxx+FEYvpw8JQhK+ksORsPDeT0k8QYVy2vkkqGeSWs/CngHmQhsN8fDX/zL9Waz/vAIekkjBIX+T5F4B9uQqDguu7RsQhZjuXB+O697d+gzq6wVjXsJLKwB6GQ0rENp1GFp4dwJV3zTZYS6Tii6sPybX5E= Received: from BYAPR11MB3301.namprd11.prod.outlook.com (2603:10b6:a03:7f::26) by BYAPR11MB2534.namprd11.prod.outlook.com (2603:10b6:a02:c2::19) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.3784.12; Mon, 25 Jan 2021 10:29:02 +0000 Received: from BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::1152:1426:8a4f:c755]) by BYAPR11MB3301.namprd11.prod.outlook.com ([fe80::1152:1426:8a4f:c755%4]) with mapi id 15.20.3784.017; Mon, 25 Jan 2021 10:29:02 +0000 From: "Ananyev, Konstantin" To: "Ananyev, Konstantin" , Feifei Wang , Honnappa Nagarahalli CC: "dev@dpdk.org" , nd , nd Thread-Topic: [PATCH v1 3/3] ring: rename and refactor ring library Thread-Index: AQHW14qBH2SQ6bbJJ0qiJgdUKwT3YqozzsbwgAMWaACAAXDRsIAABBHA Date: Mon, 25 Jan 2021 10:29:02 +0000 Message-ID: References: <20201221111359.22013-1-feifei.wang2@arm.com> <20201221111359.22013-4-feifei.wang2@arm.com> In-Reply-To: Accept-Language: en-GB, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: dlp-product: dlpe-windows dlp-reaction: no-action dlp-version: 11.5.1.3 authentication-results: intel.com; dkim=none (message not signed) header.d=none;intel.com; dmarc=none action=none header.from=intel.com; x-originating-ip: [46.7.39.127] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: e2d4c272-f408-4bf6-db51-08d8c11c08af x-ms-traffictypediagnostic: BYAPR11MB2534: x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:10000; x-ms-exchange-senderadcheck: 1 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: AUCUw+pjc5Zk7URUz/glpFskkJKag5MR4lrtW5DlW09ZdzslhaoVci7JeI3ThtE0exSHAPEZCzFt29QUEdoZ1wf+a7wWzuDBv3sprExSe/C5eIgKuC7yAVLdrsZzuo8lEIz7/UZjGgowVRl1TogSoPFRXwVffIh2Org4s33/cek6fl5seS25/5XkNrBNN65mkN5mVJ+y72LWHDKgH8CkiEO+k8ah++xevO/4Z6fsmVtlaBkxuiTYW5aT2orOpi8KgvsIjXUC9WyEaENPZbCsssXSgDQcichOMofVzw4YzZyZ9gfO7sWV9vh7cLBOvYpP6EiqFq3lZkhacsd8dyQeGVRVUH5+EG3J1NkveVrMegZaAkQF4RgGsVuFxwXFnH+bLQZJ9juoyP9/KHskkTPQxZC4CY9jPp/TgRHiFnMeKddDVzFEKxSUXxLn5eV9ZszN901Ny17C4gljyLLlvNSBVcjKe6gZguG0W8Gdsd0IXLhltPkFME2Afpfc16BReF+GjaFufB3cwBpDMmhI68GJj+s3+OoFafgTFRcMLqdagkMps3YpmB3HzOktIWnsdY1kGqgXR9gTlm9LC1y5FqIlDercGitFg53eb7PWefrZfkk= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:BYAPR11MB3301.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(4636009)(366004)(966005)(6506007)(86362001)(8936002)(498600001)(33656002)(5660300002)(8676002)(2940100002)(54906003)(110136005)(71200400001)(7696005)(30864003)(2906002)(66476007)(66556008)(64756008)(66446008)(66946007)(76116006)(4326008)(26005)(186003)(55016002)(9686003)(83380400001)(52536014)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata: =?utf-8?B?Sm1ZSjlhUU1PVjB3aFZoWmtYRGhyUnlxbkRCR1c5UE5MejJZRXBjWVRyV3V4?= =?utf-8?B?a2RzQ3hIaC80MzFMV0Qrd1pqaHNvcDNpRmxZd0hOTVBzeEl6OC9aYzl6N0E3?= =?utf-8?B?VG1YREFXWkZ4WDVvbTZwOVNEUkdjQ1BPOHNHMU1zMk8vWFJmVkVoWUFZcWFt?= =?utf-8?B?MnN6V0hZSGx3Q2xjODErNGhEYVduOXdSeUlJcmw1bXdHUjFOMDQrbmgrY21P?= =?utf-8?B?NXRMazlwbzNVNmg0Nngwa3NxM09wSTZnb0UrVm5hYlFLcEd0cms3RFI2NmpT?= =?utf-8?B?WWUvcEhVTmtudzExZkFiQUJSWXlqY1pacGhUWEt2V2Rvb2I5YlhaNy8rMEVC?= =?utf-8?B?TEdDc0FrKzcxSVVZdDB4dko2YkNwUHZrU1F1aG9US3A0cHhiR3ZoR05WSkNH?= =?utf-8?B?dzJibi9CQ2tMbm1mL0Z3eUhXNHpPYnhoZHpkS3BUNk1RSk5QQzN2RnFnZ29U?= =?utf-8?B?ek13NWNLbDRQMWs5Tzc5SnNTeSsvazdod0lpdEVsKzlTQkNjNi9qWG16YVVI?= =?utf-8?B?WmpHc1VvTXp1bmxZNTRicllyeDE3WTFnL2hiOGE3akphQ2RlSThSb2dnTVJk?= =?utf-8?B?bkZXSnF0dGZVZ3d3M0gzM3BzVHNFdFBMa0dmWFc5cnJWM0xhcm4zdExLUTFY?= =?utf-8?B?eXFzaG1ZOWI5eGQ3RzEydUV2bU5iajBpcndCZFBRL1Y2WDVhY2JybEFIQ25F?= =?utf-8?B?LzhMWElzVnFlSjFZQjhlaTF4V0pKUWs5ckprK1R1U0pseEpWOFlOdlhCbGZL?= =?utf-8?B?WkZ3bDdaVVdDemllOVgwZmhVMXB5K05aNzhpMWtncDliQ0Y3R1gxTTdUa3dH?= =?utf-8?B?N2E2b01uczQyVlI4dE1lL1M5NGQ0UFRjNXNHeFduMTZyZTJId1dOZE9MYW1F?= =?utf-8?B?RDV4M01PTWt2QnIvYUFmM0ZRQmJkb2VwK2hTR2p5WFB5ZllORVBjKys0RklH?= =?utf-8?B?QTRabGdlZEZhNGZjaEpKQVBhMnJHdFJObHQvWEhaMUJYZHcyTzRIQm9tWVcv?= =?utf-8?B?Ty9GSGFQSDZLb0Z6YWplK2tlRVA0MmpSRWtVMDBQMWJOT3BwSTVrL2laVVcv?= =?utf-8?B?SXNLUzZLdFArNlgvTUlqYkhUYkZjM1EvOHJScEU4UzZpYkx1a0ZlSGlreDM3?= =?utf-8?B?cktKN2dVaXZSczB0WnNsMFRUOExEVFFoZmQ0YkNCMjhGTGI4WWpFYldFYzkx?= =?utf-8?B?T01EcEQvek1HYkY4L080K3AvNHV4QnIyd1IwNmdHNWtEZWYzcTlRVWpzMGE4?= =?utf-8?B?NEFsV3pPWldGOVU3YjU3OWVEamhtNGNxdGlnMmZxWGFWUjFaZ1FMT1F6cElQ?= =?utf-8?B?K2daUkNZZmhLWXljd3pEL2hDeTFBQTRHYWI2d3VBak0vb0xseEtiK3ZrUUJN?= =?utf-8?Q?/MAHLulgnwPgB2j9Fi4b4ZRhuhp5q0Zg=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: BYAPR11MB3301.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: e2d4c272-f408-4bf6-db51-08d8c11c08af X-MS-Exchange-CrossTenant-originalarrivaltime: 25 Jan 2021 10:29:02.0173 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 46c98d88-e344-4ed4-8496-4ed7712e255d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: Se98quG4QijfiZQFiIx/+a5ZM5gyB2Zco95lXkM4SMhsUFFauhwWxRmlsubUIg1DupC6n28bYlTfQqYhqyAuolVdREl2KNQDb4N7zlo+wEc= X-MS-Exchange-Transport-CrossTenantHeadersStamped: BYAPR11MB2534 X-OriginatorOrg: intel.com Subject: Re: [dpdk-dev] [PATCH v1 3/3] ring: rename and refactor ring library X-BeenThere: dev@dpdk.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: DPDK patches and discussions List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dev-bounces@dpdk.org Sender: "dev" DQoNCj4gDQo+IEhpIEZlaWZlaSwNCj4gDQo+ID4gPiA+IEZvciBsZWdhY3kgbW9kZXMsIHJlbmFt ZSByaW5nX2dlbmVyaWMvYzExIHRvIHJpbmdfZ2VuZXJpYy9jMTFfcHZ0Lg0KPiA+ID4gPiBGdXJ0 aGVybW9yZSwgYWRkIG5ldyBmaWxlIHJpbmdfZWxlbV9wdnQuaCB3aGljaCBpbmNsdWRlcw0KPiA+ ID4gPiByaW5nX2RvX2VxL2RlcSBhbmQgcmluZyBlbGVtZW50IGNvcHkvZGVsZXRlIEFQSXMuDQo+ ID4gPiA+DQo+ID4gPiA+IEZvciBvdGhlciBtb2RlcywgcmVuYW1lIHh4X2MxMV9tZW0gdG8geHhf ZWxlbV9wdnQuIE1vdmUgYWxsIHByaXZhdGUNCj4gPiA+ID4gQVBJcyBpbnRvIHRoZXNlIG5ldyBo ZWFkZXIgZmlsZXMuDQo+ID4gPiA+DQo+ID4gPiA+IFN1Z2dlc3RlZC1ieTogSG9ubmFwcGEgTmFn YXJhaGFsbGkgPEhvbm5hcHBhLk5hZ2FyYWhhbGxpQGFybS5jb20+DQo+ID4gPiA+IFNpZ25lZC1v ZmYtYnk6IEZlaWZlaSBXYW5nIDxmZWlmZWkud2FuZzJAYXJtLmNvbT4NCj4gPiA+ID4gUmV2aWV3 ZWQtYnk6IEhvbm5hcHBhIE5hZ2FyYWhhbGxpIDxIb25uYXBwYS5OYWdhcmFoYWxsaUBhcm0uY29t Pg0KPiA+ID4gPiBSZXZpZXdlZC1ieTogUnVpZmVuZyBXYW5nIDxydWlmZW5nLndhbmdAYXJtLmNv bT4NCj4gPiA+ID4gLS0tDQo+ID4gPiA+ICBsaWIvbGlicnRlX3JpbmcvbWVzb24uYnVpbGQgICAg ICAgICAgICAgICAgICAgfCAgMTUgKy0NCj4gPiA+ID4gIC4uLi97cnRlX3JpbmdfYzExX21lbS5o ID0+IHJpbmdfYzExX3B2dC5ofSAgICB8ICAgOSArLQ0KPiA+ID4gPiAgbGliL2xpYnJ0ZV9yaW5n L3JpbmdfZWxlbV9wdnQuaCAgICAgICAgICAgICAgIHwgMzg1ICsrKysrKysrKysrKysrKysrKw0K PiA+ID4gPiAgLi4ue3J0ZV9yaW5nX2dlbmVyaWMuaCA9PiByaW5nX2dlbmVyaWNfcHZ0Lmh9IHwg ICA2ICstDQo+ID4gPiA+ICAuLi5yaW5nX2h0c19jMTFfbWVtLmggPT4gcmluZ19odHNfZWxlbV9w dnQuaH0gfCAgODggKysrLQ0KPiA+ID4gPiAuLi5uZ19wZWVrX2MxMV9tZW0uaCA9PiByaW5nX3Bl ZWtfZWxlbV9wdnQuaH0gfCAgNzUgKysrLQ0KPiA+ID4gPiAuLi5yaW5nX3J0c19jMTFfbWVtLmgg PT4gcmluZ19ydHNfZWxlbV9wdnQuaH0gfCAgODggKysrLQ0KPiA+ID4gPiAgbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX2VsZW0uaCAgICAgICAgICAgICAgIHwgMzc0ICstLS0tLS0tLS0tLS0tLS0t DQo+ID4gPiA+ICBsaWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfaHRzLmggICAgICAgICAgICAgICAg fCAgODQgKy0tLQ0KPiA+ID4gPiAgbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaCAgICAg ICAgICAgICAgIHwgIDcxICstLS0NCj4gPiA+ID4gIGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19w ZWVrX3pjLmggICAgICAgICAgICB8ICAgMiArLQ0KPiA+ID4gPiAgbGliL2xpYnJ0ZV9yaW5nL3J0 ZV9yaW5nX3J0cy5oICAgICAgICAgICAgICAgIHwgIDg0ICstLS0NCj4gPiA+ID4gIDEyIGZpbGVz IGNoYW5nZWQsIDY0NiBpbnNlcnRpb25zKCspLCA2MzUgZGVsZXRpb25zKC0pICByZW5hbWUNCj4g PiA+ID4gbGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19jMTFfbWVtLmggPT4gcmluZ19jMTFfcHZ0 Lmh9ICg5NiUpICBjcmVhdGUNCj4gPiA+ID4gbW9kZSAxMDA2NDQgbGliL2xpYnJ0ZV9yaW5nL3Jp bmdfZWxlbV9wdnQuaCAgcmVuYW1lDQo+ID4gPiA+IGxpYi9saWJydGVfcmluZy97cnRlX3Jpbmdf Z2VuZXJpYy5oID0+IHJpbmdfZ2VuZXJpY19wdnQuaH0gKDk4JSkNCj4gPiA+ID4gcmVuYW1lIGxp Yi9saWJydGVfcmluZy97cnRlX3JpbmdfaHRzX2MxMV9tZW0uaCA9PiByaW5nX2h0c19lbGVtX3B2 dC5ofQ0KPiA+ID4gPiAoNjAlKSAgcmVuYW1lIGxpYi9saWJydGVfcmluZy97cnRlX3JpbmdfcGVl a19jMTFfbWVtLmggPT4NCj4gPiA+ID4gcmluZ19wZWVrX2VsZW1fcHZ0Lmh9ICg2MiUpICByZW5h bWUNCj4gPiA+ID4gbGliL2xpYnJ0ZV9yaW5nL3tydGVfcmluZ19ydHNfYzExX21lbS5oID0+IHJp bmdfcnRzX2VsZW1fcHZ0Lmh9ICg2MiUpDQo+ID4gPiA+DQo+ID4gPg0KPiA+ID4gU29ycnksIGJ1 dCBJIGRvbid0IHVuZGVyc3RhbmQgdGhlIHB1cnBvc2Ugb2YgdGhhdCBwYXRjaC4NCj4gPiA+IEFz IEkgcmVtZW1iZXIgYnkgRFBESyBuYW1pbmcgY29udmVudGlvbiBhbGwgaW5zdGFsbGFibGUgaGVh ZGVycyBzaG91bGQNCj4gPiA+IGhhdmUgJ3J0ZV8nIHByZWZpeC4gU2FtZSBmb3IgcHVibGljIGRl ZmluZXMgKFJURV8pLg0KPiA+ID4gV2h5IHRvIGFiYW5kb24gaXQgaGVyZT8NCj4gPg0KPiA+IFRo aXMgY2hhbmdlIHJlZmVycyB0byB5b3UgYW5kIEhvbm5hcHBhJ3MgZGlzY3Vzc2lvbiBhYm91dCBy aW5nOg0KPiA+IGh0dHBzOi8vbWFpbHMuZHBkay5vcmcvYXJjaGl2ZXMvZGV2LzIwMjAtTWF5LzE2 NjgwMy5odG1sDQo+ID4NCj4gPiBBbmQgaXQgaXMgdG8gc2VwYXJhdGUgdGhlIGV4dGVybmFsIEFQ SXMgdGhhdCBjYW4gYmUgY2FsbGVkIGJ5IHVzZXJzLA0KPiA+IGZyb20gaW50ZXJuYWwgQVBJcyB0 aGF0IGNhbm5vdCBiZSBjYWxsZWQgYnkgdXNlcnMuDQo+ID4gVGhlIGludGVybmFsIGZ1bmN0aW9u cyBhcmUgaW5jbHVkZWQgaW4gdGhlIGZpbGVzIHdpdGggeHhfcHZ0LmguDQo+IA0KPiBFdmVuIHRo ZXNlIHh4X3B2dC5oIGZpbGVzIGNvbnRhaW4gaW50ZXJuYWwgQVBJIGFuZCBub3Qgc3VwcG9zZWQg dG8gYmUgaW5jbHVkZWQgZGlyZWN0bHksDQo+IHRoZXkgaGF2ZSB0byBiZSBpbnN0YWxsZWQgaW50 byBwdWJsaWMgZGlyICg8ZHBkay1pbnN0YWxsLWRpci9pbmNsdWRlKS4NCj4gU28gSSB0aGluayB3 ZSBuZWVkIHRvIGtlZXAgRFBESyBwdWJsaWMgcHJlZml4ZXMgZm9yIHRoZW0gKGFuZCBpbnNpZGUg dGhlbSk6DQo+IHJ0ZV94eF9wdnQuaCAoX1JURV8pLg0KDQpBcyBhbm90aGVyIHRob3VnaHQgLSBp dCBpcyBwcm9iYWJseSBnb29kIHRvIGludHJvZHVjZSBuZXcgZ2VuZXJpYyBuYW1pbmcgY29udmVu dGlvbg0KZm9yIHN1Y2ggc29ydCBvZiBmaWxlcyAoaW50ZXJuYWwgb25lcyB0aGF0IHN0aWxsIGhh dmUgdG8gYmUgZXhwb3NlZCkuDQpNaWdodCBiZSAnX3J0ZV8nIHByZWZpeCBvciBzby4uLg0KVGhv dWdoIEkgc3VwcG9zZSBpdCB3b3VsZCByZXF1aXJlIGJyb2FkZXIgZGlzY3Vzc2lvbiBmaXJzdC4N Cg0KPiANCj4gS29uc3RhbnRpbg0KPiANCj4gPg0KPiA+IEJlc3QgUmVnYXJkcw0KPiA+IEZlaWZl aQ0KPiA+ID4NCj4gPiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9tZXNvbi5idWls ZCBiL2xpYi9saWJydGVfcmluZy9tZXNvbi5idWlsZA0KPiA+ID4gPiBpbmRleCAzNmZkY2I2YTUu Ljk4ZWFjNTgxMCAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL21lc29uLmJ1 aWxkDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9tZXNvbi5idWlsZA0KPiA+ID4gPiBA QCAtMiwxNSArMiwxNiBAQA0KPiA+ID4gPiAgIyBDb3B5cmlnaHQoYykgMjAxNyBJbnRlbCBDb3Jw b3JhdGlvbg0KPiA+ID4gPg0KPiA+ID4gPiAgc291cmNlcyA9IGZpbGVzKCdydGVfcmluZy5jJykN Cj4gPiA+ID4gLWhlYWRlcnMgPSBmaWxlcygncnRlX3JpbmcuaCcsDQo+ID4gPiA+ICtoZWFkZXJz ID0gZmlsZXMoJ3JpbmdfYzExX3B2dC5oJywNCj4gPiA+ID4gKwkJJ3JpbmdfZWxlbV9wdnQuaCcs DQo+ID4gPiA+ICsJCSdyaW5nX2dlbmVyaWNfcHZ0LmgnLA0KPiA+ID4gPiArCQkncmluZ19odHNf ZWxlbV9wdnQuaCcsDQo+ID4gPiA+ICsJCSdyaW5nX3BlZWtfZWxlbV9wdnQuaCcsDQo+ID4gPiA+ ICsJCSdyaW5nX3J0c19lbGVtX3B2dC5oJywNCj4gPiA+ID4gKwkJJ3J0ZV9yaW5nLmgnLA0KPiA+ ID4gPiAgCQkncnRlX3JpbmdfY29yZS5oJywNCj4gPiA+ID4gIAkJJ3J0ZV9yaW5nX2VsZW0uaCcs DQo+ID4gPiA+IC0JCSdydGVfcmluZ19jMTFfbWVtLmgnLA0KPiA+ID4gPiAtCQkncnRlX3Jpbmdf Z2VuZXJpYy5oJywNCj4gPiA+ID4gIAkJJ3J0ZV9yaW5nX2h0cy5oJywNCj4gPiA+ID4gLQkJJ3J0 ZV9yaW5nX2h0c19jMTFfbWVtLmgnLA0KPiA+ID4gPiAgCQkncnRlX3JpbmdfcGVlay5oJywNCj4g PiA+ID4gLQkJJ3J0ZV9yaW5nX3BlZWtfYzExX21lbS5oJywNCj4gPiA+ID4gIAkJJ3J0ZV9yaW5n X3BlZWtfemMuaCcsDQo+ID4gPiA+IC0JCSdydGVfcmluZ19ydHMuaCcsDQo+ID4gPiA+IC0JCSdy dGVfcmluZ19ydHNfYzExX21lbS5oJykNCj4gPiA+ID4gKwkJJ3J0ZV9yaW5nX3J0cy5oJykNCj4g PiA+ID4gZGlmZiAtLWdpdCBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19jMTFfbWVtLmgNCj4g PiA+ID4gYi9saWIvbGlicnRlX3JpbmcvcmluZ19jMTFfcHZ0Lmggc2ltaWxhcml0eSBpbmRleCA5 NiUgcmVuYW1lIGZyb20NCj4gPiA+ID4gbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2MxMV9tZW0u aA0KPiA+ID4gPiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3JpbmdfYzExX3B2dC5oIGluZGV4 IDdmNWViYTI2Mi4uOWYyZjUzMThmDQo+ID4gPiA+IDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9saWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfYzExX21lbS5oDQo+ID4gPiA+ICsrKyBiL2xpYi9saWJydGVf cmluZy9yaW5nX2MxMV9wdnQuaA0KPiA+ID4gPiBAQCAtNyw4ICs3LDggQEANCj4gPiA+ID4gICAq IFVzZWQgYXMgQlNELTMgTGljZW5zZWQgd2l0aCBwZXJtaXNzaW9uIGZyb20gS2lwIE1hY3kuDQo+ ID4gPiA+ICAgKi8NCj4gPiA+ID4NCj4gPiA+ID4gLSNpZm5kZWYgX1JURV9SSU5HX0MxMV9NRU1f SF8NCj4gPiA+ID4gLSNkZWZpbmUgX1JURV9SSU5HX0MxMV9NRU1fSF8NCj4gPiA+ID4gKyNpZm5k ZWYgX1JJTkdfQzExX1BWVF9IXw0KPiA+ID4gPiArI2RlZmluZSBfUklOR19DMTFfUFZUX0hfDQo+ ID4gPiA+DQo+ID4gPiA+ICBzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ ICBfX3J0ZV9yaW5nX3VwZGF0ZV90YWlsKHN0cnVjdCBydGVfcmluZ19oZWFkdGFpbCAqaHQsIHVp bnQzMl90DQo+ID4gPiA+IG9sZF92YWwsIEBAIC02OSw5ICs2OSw2IEBAIF9fcnRlX3JpbmdfbW92 ZV9wcm9kX2hlYWQoc3RydWN0IHJ0ZV9yaW5nDQo+ID4gPiAqciwgdW5zaWduZWQgaW50IGlzX3Nw LA0KPiA+ID4gPiAgCQkvKiBFbnN1cmUgdGhlIGhlYWQgaXMgcmVhZCBiZWZvcmUgdGFpbCAqLw0K PiA+ID4gPiAgCQlfX2F0b21pY190aHJlYWRfZmVuY2UoX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4g PiA+DQo+ID4gPiA+IC0JCS8qIGxvYWQtYWNxdWlyZSBzeW5jaHJvbml6ZSB3aXRoIHN0b3JlLXJl bGVhc2Ugb2YgaHQtPnRhaWwNCj4gPiA+ID4gLQkJICogaW4gdXBkYXRlX3RhaWwuDQo+ID4gPiA+ IC0JCSAqLw0KPiA+ID4gPiAgCQljb25zX3RhaWwgPSBfX2F0b21pY19sb2FkX24oJnItPmNvbnMu dGFpbCwNCj4gPiA+ID4gIAkJCQkJX19BVE9NSUNfQUNRVUlSRSk7DQo+ID4gPiA+DQo+ID4gPiA+ IEBAIC0xNzgsNCArMTc1LDQgQEAgX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChzdHJ1Y3QgcnRl X3JpbmcgKnIsIGludA0KPiA+ID4gaXNfc2MsDQo+ID4gPiA+ICAJcmV0dXJuIG47DQo+ID4gPiA+ ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0jZW5kaWYgLyogX1JURV9SSU5HX0MxMV9NRU1fSF8gKi8N Cj4gPiA+ID4gKyNlbmRpZiAvKiBfUklOR19DMTFfUFZUX0hfICovDQo+ID4gPiA+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3JpbmcvcmluZ19lbGVtX3B2dC5oDQo+ID4gPiA+IGIvbGliL2xpYnJ0 ZV9yaW5nL3JpbmdfZWxlbV9wdnQuaCBuZXcgZmlsZSBtb2RlIDEwMDY0NCBpbmRleA0KPiA+ID4g PiAwMDAwMDAwMDAuLjgwMDNlNWVkYw0KPiA+ID4gPiAtLS0gL2Rldi9udWxsDQo+ID4gPiA+ICsr KyBiL2xpYi9saWJydGVfcmluZy9yaW5nX2VsZW1fcHZ0LmgNCj4gPiA+ID4gQEAgLTAsMCArMSwz ODUgQEANCj4gPiA+ID4gKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UN Cj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMTcsMjAxOCBIWFQtc2Vt aXRlY2ggQ29ycG9yYXRpb24uDQo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMDctMjAwOSBL aXAgTWFjeSBrbWFjeUBmcmVlYnNkLm9yZw0KPiA+ID4gPiArICogQWxsIHJpZ2h0cyByZXNlcnZl ZC4NCj4gPiA+ID4gKyAqIERlcml2ZWQgZnJvbSBGcmVlQlNEJ3MgYnVmcmluZy5oDQo+ID4gPiA+ ICsgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lvbiBmcm9tIEtpcCBNYWN5 Lg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICsNCj4gPiA+ID4gKyNpZm5kZWYgX1JJTkdfRUxFTV9Q VlRfSF8NCj4gPiA+ID4gKyNkZWZpbmUgX1JJTkdfRUxFTV9QVlRfSF8NCj4gPiA+ID4gKw0KPiA+ ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiArX19ydGVfcmlu Z19lbnF1ZXVlX2VsZW1zXzMyKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6 ZSwNCj4gPiA+ID4gKwkJdWludDMyX3QgaWR4LCBjb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQz Ml90IG4pIHsNCj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gKwl1aW50MzJfdCAq cmluZyA9ICh1aW50MzJfdCAqKSZyWzFdOw0KPiA+ID4gPiArCWNvbnN0IHVpbnQzMl90ICpvYmog PSAoY29uc3QgdWludDMyX3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ICsJaWYgKGxpa2VseShpZHgg KyBuIDwgc2l6ZSkpIHsNCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Nyk7IGkg Kz0gOCwgaWR4ICs9IDgpIHsNCj4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ ID4gKwkJCXJpbmdbaWR4ICsgMV0gPSBvYmpbaSArIDFdOw0KPiA+ID4gPiArCQkJcmluZ1tpZHgg KyAyXSA9IG9ialtpICsgMl07DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCArIDNdID0gb2JqW2kgKyAz XTsNCj4gPiA+ID4gKwkJCXJpbmdbaWR4ICsgNF0gPSBvYmpbaSArIDRdOw0KPiA+ID4gPiArCQkJ cmluZ1tpZHggKyA1XSA9IG9ialtpICsgNV07DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCArIDZdID0g b2JqW2kgKyA2XTsNCj4gPiA+ID4gKwkJCXJpbmdbaWR4ICsgN10gPSBvYmpbaSArIDddOw0KPiA+ ID4gPiArCQl9DQo+ID4gPiA+ICsJCXN3aXRjaCAobiAmIDB4Nykgew0KPiA+ID4gPiArCQljYXNl IDc6DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAq Lw0KPiA+ID4gPiArCQljYXNlIDY6DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytd OyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiArCQljYXNlIDU6DQo+ID4gPiA+ICsJCQlyaW5n W2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiArCQljYXNlIDQ6 DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0K PiA+ID4gPiArCQljYXNlIDM6DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAv KiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiArCQljYXNlIDI6DQo+ID4gPiA+ICsJCQlyaW5nW2lk eCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ID4gPiArCQljYXNlIDE6DQo+ ID4gPiA+ICsJCQlyaW5nW2lkeCsrXSA9IG9ialtpKytdOyAvKiBmYWxsdGhyb3VnaCAqLw0KPiA+ ID4gPiArCQl9DQo+ID4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaWR4 IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4g PiA+ID4gKwkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0KPiA+ID4gPiArCQlmb3IgKGlk eCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiArCQkJcmluZ1tpZHhdID0gb2JqW2ld Ow0KPiA+ID4gPiArCX0NCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArc3RhdGljIF9f cnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4gPiArX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1z XzY0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4gPiArCQlj b25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJ dW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ICsJY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7 DQo+ID4gPiA+ICsJdWludDMyX3QgaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ID4g Kwl1aW50NjRfdCAqcmluZyA9ICh1aW50NjRfdCAqKSZyWzFdOw0KPiA+ID4gPiArCWNvbnN0IHVu YWxpZ25lZF91aW50NjRfdCAqb2JqID0gKGNvbnN0IHVuYWxpZ25lZF91aW50NjRfdA0KPiA+ID4g KilvYmpfdGFibGU7DQo+ID4gPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4g PiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Myk7IGkgKz0gNCwgaWR4ICs9IDQpIHsN Cj4gPiA+ID4gKwkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ID4gKwkJCXJpbmdbaWR4ICsg MV0gPSBvYmpbaSArIDFdOw0KPiA+ID4gPiArCQkJcmluZ1tpZHggKyAyXSA9IG9ialtpICsgMl07 DQo+ID4gPiA+ICsJCQlyaW5nW2lkeCArIDNdID0gb2JqW2kgKyAzXTsNCj4gPiA+ID4gKwkJfQ0K PiA+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDMpIHsNCj4gPiA+ID4gKwkJY2FzZSAzOg0KPiA+ID4g PiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4g KwkJY2FzZSAyOg0KPiA+ID4gPiArCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRo cm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiArCQkJcmluZ1tpZHgrK10gPSBv YmpbaSsrXTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiArCX0gZWxzZSB7DQo+ID4gPiA+ICsJCWZv ciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+ICsJCQlyaW5nW2lkeF0g PSBvYmpbaV07DQo+ID4gPiA+ICsJCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiA+ ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ID4gKwkJCXJpbmdb aWR4XSA9IG9ialtpXTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gK19fcnRlX3Jpbmdf ZW5xdWV1ZV9lbGVtc18xMjgoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQs DQo+ID4gPiA+ICsJCWNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikNCj4gPiA+ID4g K3sNCj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gKwljb25zdCB1aW50MzJfdCBz aXplID0gci0+c2l6ZTsNCj4gPiA+ID4gKwl1aW50MzJfdCBpZHggPSBwcm9kX2hlYWQgJiByLT5t YXNrOw0KPiA+ID4gPiArCXJ0ZV9pbnQxMjhfdCAqcmluZyA9IChydGVfaW50MTI4X3QgKikmclsx XTsNCj4gPiA+ID4gKwljb25zdCBydGVfaW50MTI4X3QgKm9iaiA9IChjb25zdCBydGVfaW50MTI4 X3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsN Cj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4MSk7IGkgKz0gMiwgaWR4ICs9IDIp DQo+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikocmluZyArIGlkeCksDQo+ID4gPiA+ICsJCQkJ KGNvbnN0IHZvaWQgKikob2JqICsgaSksIDMyKTsNCj4gPiA+ID4gKwkJc3dpdGNoIChuICYgMHgx KSB7DQo+ID4gPiA+ICsJCWNhc2UgMToNCj4gPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShyaW5n ICsgaWR4KSwNCj4gPiA+ID4gKwkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwgMTYpOw0KPiA+ ID4gPiArCQl9DQo+ID4gPiA+ICsJfSBlbHNlIHsNCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaWR4 IDwgc2l6ZTsgaSsrLCBpZHgrKykNCj4gPiA+ID4gKwkJCW1lbWNweSgodm9pZCAqKShyaW5nICsg aWR4KSwNCj4gPiA+ID4gKwkJCQkoY29uc3Qgdm9pZCAqKShvYmogKyBpKSwgMTYpOw0KPiA+ID4g PiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+ICsJCWZvciAoaWR4ID0g MDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikocmluZyAr IGlkeCksDQo+ID4gPiA+ICsJCQkJKGNvbnN0IHZvaWQgKikob2JqICsgaSksIDE2KTsNCj4gPiA+ ID4gKwl9DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIHRoZSBhY3R1YWwgZW5x dWV1ZSBvZiBlbGVtZW50cyBvbiB0aGUgcmluZy4NCj4gPiA+ID4gKyAqIFBsYWNlZCBoZXJlIHNp bmNlIGlkZW50aWNhbCBjb2RlIG5lZWRlZCBpbiBib3RoDQo+ID4gPiA+ICsgKiBzaW5nbGUgYW5k IG11bHRpIHByb2R1Y2VyIGVucXVldWUgZnVuY3Rpb25zLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ ICtzdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ICtfX3J0ZV9yaW5nX2Vu cXVldWVfZWxlbXMoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4g PiA+ICsJCWNvbnN0IHZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG51 bSkgew0KPiA+ID4gPiArCS8qIDhCIGFuZCAxNkIgY29waWVzIGltcGxlbWVudGVkIGluZGl2aWR1 YWxseSB0byByZXRhaW4NCj4gPiA+ID4gKwkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4g PiA+ID4gKwkgKi8NCj4gPiA+ID4gKwlpZiAoZXNpemUgPT0gOCkNCj4gPiA+ID4gKwkJX19ydGVf cmluZ19lbnF1ZXVlX2VsZW1zXzY0KHIsIHByb2RfaGVhZCwgb2JqX3RhYmxlLA0KPiA+ID4gbnVt KTsNCj4gPiA+ID4gKwllbHNlIGlmIChlc2l6ZSA9PSAxNikNCj4gPiA+ID4gKwkJX19ydGVfcmlu Z19lbnF1ZXVlX2VsZW1zXzEyOChyLCBwcm9kX2hlYWQsIG9ial90YWJsZSwNCj4gPiA+IG51bSk7 DQo+ID4gPiA+ICsJZWxzZSB7DQo+ID4gPiA+ICsJCXVpbnQzMl90IGlkeCwgc2NhbGUsIG5yX2lk eCwgbnJfbnVtLCBucl9zaXplOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIE5vcm1hbGl6ZSB0 byB1aW50MzJfdCAqLw0KPiA+ID4gPiArCQlzY2FsZSA9IGVzaXplIC8gc2l6ZW9mKHVpbnQzMl90 KTsNCj4gPiA+ID4gKwkJbnJfbnVtID0gbnVtICogc2NhbGU7DQo+ID4gPiA+ICsJCWlkeCA9IHBy b2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiA+ICsJCW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0KPiA+ ID4gPiArCQlucl9zaXplID0gci0+c2l6ZSAqIHNjYWxlOw0KPiA+ID4gPiArCQlfX3J0ZV9yaW5n X2VucXVldWVfZWxlbXNfMzIociwgbnJfc2l6ZSwgbnJfaWR4LA0KPiA+ID4gPiArCQkJCW9ial90 YWJsZSwgbnJfbnVtKTsNCj4gPiA+ID4gKwl9DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gK19fcnRlX3Jpbmdf ZGVxdWV1ZV9lbGVtc18zMihzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHVpbnQzMl90IHNpemUs DQo+ID4gPiA+ICsJCXVpbnQzMl90IGlkeCwgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKSB7 DQo+ID4gPiA+ICsJdW5zaWduZWQgaW50IGk7DQo+ID4gPiA+ICsJdWludDMyX3QgKnJpbmcgPSAo dWludDMyX3QgKikmclsxXTsNCj4gPiA+ID4gKwl1aW50MzJfdCAqb2JqID0gKHVpbnQzMl90ICop b2JqX3RhYmxlOw0KPiA+ID4gPiArCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4g PiA+ICsJCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDcpOyBpICs9IDgsIGlkeCArPSA4KSB7DQo+ ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ICsJCQlvYmpbaSArIDFdID0g cmluZ1tpZHggKyAxXTsNCj4gPiA+ID4gKwkJCW9ialtpICsgMl0gPSByaW5nW2lkeCArIDJdOw0K PiA+ID4gPiArCQkJb2JqW2kgKyAzXSA9IHJpbmdbaWR4ICsgM107DQo+ID4gPiA+ICsJCQlvYmpb aSArIDRdID0gcmluZ1tpZHggKyA0XTsNCj4gPiA+ID4gKwkJCW9ialtpICsgNV0gPSByaW5nW2lk eCArIDVdOw0KPiA+ID4gPiArCQkJb2JqW2kgKyA2XSA9IHJpbmdbaWR4ICsgNl07DQo+ID4gPiA+ ICsJCQlvYmpbaSArIDddID0gcmluZ1tpZHggKyA3XTsNCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiAr CQlzd2l0Y2ggKG4gJiAweDcpIHsNCj4gPiA+ID4gKwkJY2FzZSA3Og0KPiA+ID4gPiArCQkJb2Jq W2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSA2 Og0KPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ID4gKwkJY2FzZSA1Og0KPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSA0Og0KPiA+ID4gPiArCQkJb2JqW2kr K10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSAzOg0K PiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4g PiA+ID4gKwkJY2FzZSAyOg0KPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyog ZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiArCQkJb2JqW2krK10g PSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJfQ0KPiA+ID4gPiAr CX0gZWxzZSB7DQo+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4Kysp DQo+ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ICsJCS8qIFN0YXJ0IGF0 IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiA+ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBp ZHgrKykNCj4gPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZv aWQNCj4gPiA+ID4gK19fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc182NChzdHJ1Y3QgcnRlX3Jpbmcg KnIsIHVpbnQzMl90IHByb2RfaGVhZCwNCj4gPiA+ID4gKwkJdm9pZCAqb2JqX3RhYmxlLCB1aW50 MzJfdCBuKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiAr CWNvbnN0IHVpbnQzMl90IHNpemUgPSByLT5zaXplOw0KPiA+ID4gPiArCXVpbnQzMl90IGlkeCA9 IHByb2RfaGVhZCAmIHItPm1hc2s7DQo+ID4gPiA+ICsJdWludDY0X3QgKnJpbmcgPSAodWludDY0 X3QgKikmclsxXTsNCj4gPiA+ID4gKwl1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9ICh1bmFsaWdu ZWRfdWludDY0X3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ICsJaWYgKGxpa2VseShpZHggKyBuIDwg c2l6ZSkpIHsNCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Myk7IGkgKz0gNCwg aWR4ICs9IDQpIHsNCj4gPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gKwkJ CW9ialtpICsgMV0gPSByaW5nW2lkeCArIDFdOw0KPiA+ID4gPiArCQkJb2JqW2kgKyAyXSA9IHJp bmdbaWR4ICsgMl07DQo+ID4gPiA+ICsJCQlvYmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4g PiA+ID4gKwkJfQ0KPiA+ID4gPiArCQlzd2l0Y2ggKG4gJiAweDMpIHsNCj4gPiA+ID4gKwkJY2Fz ZSAzOg0KPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2gg Ki8NCj4gPiA+ID4gKwkJY2FzZSAyOg0KPiA+ID4gPiArCQkJb2JqW2krK10gPSByaW5nW2lkeCsr XTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJY2FzZSAxOg0KPiA+ID4gPiArCQkJb2Jq W2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gKwkJfQ0KPiA+ ID4gPiArCX0gZWxzZSB7DQo+ID4gPiA+ICsJCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywg aWR4KyspDQo+ID4gPiA+ICsJCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+ICsJCS8qIFN0 YXJ0IGF0IHRoZSBiZWdpbm5pbmcgKi8NCj4gPiA+ID4gKwkJZm9yIChpZHggPSAwOyBpIDwgbjsg aSsrLCBpZHgrKykNCj4gPiA+ID4gKwkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gKwl9 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5s aW5lIHZvaWQNCj4gPiA+ID4gK19fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18xMjgoc3RydWN0IHJ0 ZV9yaW5nICpyLCB1aW50MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiA+ICsJCXZvaWQgKm9ial90YWJs ZSwgdWludDMyX3QgbikNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1bnNpZ25lZCBpbnQgaTsNCj4g PiA+ID4gKwljb25zdCB1aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiA+ID4gKwl1aW50MzJf dCBpZHggPSBwcm9kX2hlYWQgJiByLT5tYXNrOw0KPiA+ID4gPiArCXJ0ZV9pbnQxMjhfdCAqcmlu ZyA9IChydGVfaW50MTI4X3QgKikmclsxXTsNCj4gPiA+ID4gKwlydGVfaW50MTI4X3QgKm9iaiA9 IChydGVfaW50MTI4X3QgKilvYmpfdGFibGU7DQo+ID4gPiA+ICsJaWYgKGxpa2VseShpZHggKyBu IDwgc2l6ZSkpIHsNCj4gPiA+ID4gKwkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4MSk7IGkgKz0g MiwgaWR4ICs9IDIpDQo+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lk ICopKHJpbmcgKyBpZHgpLCAzMik7DQo+ID4gPiA+ICsJCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ ID4gPiArCQljYXNlIDE6DQo+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2 b2lkICopKHJpbmcgKyBpZHgpLCAxNik7DQo+ID4gPiA+ICsJCX0NCj4gPiA+ID4gKwl9IGVsc2Ug ew0KPiA+ID4gPiArCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4g PiArCQkJbWVtY3B5KCh2b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4KSwgMTYp Ow0KPiA+ID4gPiArCQkvKiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+ICsJCWZv ciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4KyspDQo+ID4gPiA+ICsJCQltZW1jcHkoKHZvaWQg Kikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgpLCAxNik7DQo+ID4gPiA+ICsJfQ0KPiA+ ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsvKiB0aGUgYWN0dWFsIGRlcXVldWUgb2YgZWxl bWVudHMgZnJvbSB0aGUgcmluZy4NCj4gPiA+ID4gKyAqIFBsYWNlZCBoZXJlIHNpbmNlIGlkZW50 aWNhbCBjb2RlIG5lZWRlZCBpbiBib3RoDQo+ID4gPiA+ICsgKiBzaW5nbGUgYW5kIG11bHRpIHBy b2R1Y2VyIGVucXVldWUgZnVuY3Rpb25zLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMg X19ydGVfYWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ICtfX3J0ZV9yaW5nX2RlcXVldWVfZWxl bXMoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50MzJfdCBjb25zX2hlYWQsDQo+ID4gPiA+ICsJCXZv aWQgKm9ial90YWJsZSwgdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG51bSkgew0KPiA+ID4gPiAr CS8qIDhCIGFuZCAxNkIgY29waWVzIGltcGxlbWVudGVkIGluZGl2aWR1YWxseSB0byByZXRhaW4N Cj4gPiA+ID4gKwkgKiB0aGUgY3VycmVudCBwZXJmb3JtYW5jZS4NCj4gPiA+ID4gKwkgKi8NCj4g PiA+ID4gKwlpZiAoZXNpemUgPT0gOCkNCj4gPiA+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2Vs ZW1zXzY0KHIsIGNvbnNfaGVhZCwgb2JqX3RhYmxlLA0KPiA+ID4gbnVtKTsNCj4gPiA+ID4gKwll bHNlIGlmIChlc2l6ZSA9PSAxNikNCj4gPiA+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1z XzEyOChyLCBjb25zX2hlYWQsIG9ial90YWJsZSwNCj4gPiA+IG51bSk7DQo+ID4gPiA+ICsJZWxz ZSB7DQo+ID4gPiA+ICsJCXVpbnQzMl90IGlkeCwgc2NhbGUsIG5yX2lkeCwgbnJfbnVtLCBucl9z aXplOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJCS8qIE5vcm1hbGl6ZSB0byB1aW50MzJfdCAqLw0K PiA+ID4gPiArCQlzY2FsZSA9IGVzaXplIC8gc2l6ZW9mKHVpbnQzMl90KTsNCj4gPiA+ID4gKwkJ bnJfbnVtID0gbnVtICogc2NhbGU7DQo+ID4gPiA+ICsJCWlkeCA9IGNvbnNfaGVhZCAmIHItPm1h c2s7DQo+ID4gPiA+ICsJCW5yX2lkeCA9IGlkeCAqIHNjYWxlOw0KPiA+ID4gPiArCQlucl9zaXpl ID0gci0+c2l6ZSAqIHNjYWxlOw0KPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXNf MzIociwgbnJfc2l6ZSwgbnJfaWR4LA0KPiA+ID4gPiArCQkJCW9ial90YWJsZSwgbnJfbnVtKTsN Cj4gPiA+ID4gKwl9DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qIEJldHdlZW4g bG9hZCBhbmQgbG9hZC4gdGhlcmUgbWlnaHQgYmUgY3B1IHJlb3JkZXIgaW4gd2VhayBtb2RlbA0K PiA+ID4gPiArICogKHBvd2VycGMvYXJtKS4NCj4gPiA+ID4gKyAqIFRoZXJlIGFyZSAyIGNob2lj ZXMgZm9yIHRoZSB1c2Vycw0KPiA+ID4gPiArICogMS51c2Ugcm1iKCkgbWVtb3J5IGJhcnJpZXIN Cj4gPiA+ID4gKyAqIDIudXNlIG9uZS1kaXJlY3Rpb24gbG9hZF9hY3F1aXJlL3N0b3JlX3JlbGVh c2UgYmFycmllcg0KPiA+ID4gPiArICogSXQgZGVwZW5kcyBvbiBwZXJmb3JtYW5jZSB0ZXN0IHJl c3VsdHMuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gKyNpZmRlZiBSVEVfVVNFX0MxMV9NRU1fTU9E RUwNCj4gPiA+ID4gKyNpbmNsdWRlICJyaW5nX2MxMV9wdnQuaCINCj4gPiA+ID4gKyNlbHNlDQo+ ID4gPiA+ICsjaW5jbHVkZSAicmluZ19nZW5lcmljX3B2dC5oIg0KPiA+ID4gPiArI2VuZGlmDQo+ ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGludGVybmFsIEVucXVldWUgc2V2 ZXJhbCBvYmplY3RzIG9uIHRoZSByaW5nDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFt IHINCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFi bGUgb2Ygb2JqZWN0cy4NCj4gPiA+ID4gKyAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiArICogICBU aGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUg b2YgNC4NCj4gPiA+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hp bGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gPiArICogICB0aGUgcmVzdWx0 cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gKyAqICAgVGhl IG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUu DQo+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gKyAqICAgUlRFX1JJTkdfUVVF VUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+ID4g PiByaW5nDQo+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFz IG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiA+IGZyb20gcmluZw0KPiA+ID4gPiArICogQHBh cmFtIGlzX3NwDQo+ID4gPiA+ICsgKiAgIEluZGljYXRlcyB3aGV0aGVyIHRvIHVzZSBzaW5nbGUg cHJvZHVjZXIgb3IgbXVsdGktcHJvZHVjZXIgaGVhZA0KPiA+ID4gdXBkYXRlDQo+ID4gPiA+ICsg KiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiArICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Yg c3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiA+ID4gPiAr ICogQHJldHVybg0KPiA+ID4gPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1 ZWQuDQo+ID4gPiA+ICsgKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0 aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiArX19ydGVfcmluZ19kb19l bnF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lkICpvYmpfdGFibGUsDQo+ ID4gPiA+ICsJCXVuc2lnbmVkIGludCBlc2l6ZSwgdW5zaWduZWQgaW50IG4sDQo+ID4gPiA+ICsJ CWVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVuc2lnbmVkIGludCBpc19z cCwNCj4gPiA+ID4gKwkJdW5zaWduZWQgaW50ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiArew0KPiA+ ID4gPiArCXVpbnQzMl90IHByb2RfaGVhZCwgcHJvZF9uZXh0Ow0KPiA+ID4gPiArCXVpbnQzMl90 IGZyZWVfZW50cmllczsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCW4gPSBfX3J0ZV9yaW5nX21vdmVf cHJvZF9oZWFkKHIsIGlzX3NwLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gKwkJCSZwcm9kX2hlYWQs ICZwcm9kX25leHQsICZmcmVlX2VudHJpZXMpOw0KPiA+ID4gPiArCWlmIChuID09IDApDQo+ID4g PiA+ICsJCWdvdG8gZW5kOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJX19ydGVfcmluZ19lbnF1ZXVl X2VsZW1zKHIsIHByb2RfaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiA+ICsNCj4g PiA+ID4gKwlfX3J0ZV9yaW5nX3VwZGF0ZV90YWlsKCZyLT5wcm9kLCBwcm9kX2hlYWQsIHByb2Rf bmV4dCwgaXNfc3AsIDEpOw0KPiA+ID4gPiArZW5kOg0KPiA+ID4gPiArCWlmIChmcmVlX3NwYWNl ICE9IE5VTEwpDQo+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZV9lbnRyaWVzIC0gbjsNCj4g PiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gK30NCj4gPiA+ID4gKw0KPiA+ID4gPiArLyoqDQo+ ID4gPiA+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9iamVjdHMgZnJvbSB0aGUgcmlu Zw0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSByDQo+ID4gPiA+ICsgKiAgIEEgcG9p bnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxl DQo+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4gPiA+ ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50 LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiA+ICsgKiAgIFRo aXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBP dGhlcndpc2UNCj4gPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBw dWxsIGZyb20gdGhlIHJpbmcuDQo+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4g KyAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2Yg aXRlbXMgZnJvbSBhDQo+ID4gPiByaW5nDQo+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZB UklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiA+IGZyb20gcmlu Zw0KPiA+ID4gPiArICogQHBhcmFtIGlzX3NjDQo+ID4gPiA+ICsgKiAgIEluZGljYXRlcyB3aGV0 aGVyIHRvIHVzZSBzaW5nbGUgY29uc3VtZXIgb3IgbXVsdGktY29uc3VtZXIgaGVhZA0KPiA+ID4g dXBkYXRlDQo+ID4gPiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ID4gPiA+ICsgKiAgIHJldHVy bnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVzIGFmdGVyIHRoZSBkZXF1ZXVl IGhhcw0KPiA+ID4gZmluaXNoZWQNCj4gPiA+ID4gKyAqIEByZXR1cm4NCj4gPiA+ID4gKyAqICAg LSBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ID4gPiA+ICsgKiAgICAgSWYg YmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25s eS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5z aWduZWQgaW50DQo+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX2RlcXVldWVfZWxlbShzdHJ1Y3QgcnRl X3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+ID4gKwkJdW5zaWduZWQgaW50IGVzaXpl LCB1bnNpZ25lZCBpbnQgbiwNCj4gPiA+ID4gKwkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv ciBiZWhhdmlvciwgdW5zaWduZWQgaW50IGlzX3NjLA0KPiA+ID4gPiArCQl1bnNpZ25lZCBpbnQg KmF2YWlsYWJsZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1aW50MzJfdCBjb25zX2hlYWQsIGNv bnNfbmV4dDsNCj4gPiA+ID4gKwl1aW50MzJfdCBlbnRyaWVzOw0KPiA+ID4gPiArDQo+ID4gPiA+ ICsJbiA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWQociwgKGludClpc19zYywgbiwgYmVoYXZp b3IsDQo+ID4gPiA+ICsJCQkmY29uc19oZWFkLCAmY29uc19uZXh0LCAmZW50cmllcyk7DQo+ID4g PiA+ICsJaWYgKG4gPT0gMCkNCj4gPiA+ID4gKwkJZ290byBlbmQ7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgY29uc19oZWFkLCBvYmpfdGFibGUsIGVz aXplLCBuKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCV9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoJnIt PmNvbnMsIGNvbnNfaGVhZCwgY29uc19uZXh0LCBpc19zYywgMCk7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gK2VuZDoNCj4gPiA+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiA+ICsJCSph dmFpbGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gK30N Cj4gPiA+ID4gKw0KPiA+ID4gPiArI2VuZGlmIC8qIF9SSU5HX0VMRU1fUFZUX0hfICovDQo+ID4g PiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4g PiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfZ2VuZXJpY19wdnQuaA0KPiA+ID4gPiBzaW1pbGFy aXR5IGluZGV4IDk4JQ0KPiA+ID4gPiByZW5hbWUgZnJvbSBsaWIvbGlicnRlX3JpbmcvcnRlX3Jp bmdfZ2VuZXJpYy5oDQo+ID4gPiA+IHJlbmFtZSB0byBsaWIvbGlicnRlX3JpbmcvcmluZ19nZW5l cmljX3B2dC5oDQo+ID4gPiA+IGluZGV4IDM3YzYyYjhkNi4uZmM0NmEyN2IyIDEwMDY0NA0KPiA+ ID4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfZ2VuZXJpYy5oDQo+ID4gPiA+ICsr KyBiL2xpYi9saWJydGVfcmluZy9yaW5nX2dlbmVyaWNfcHZ0LmgNCj4gPiA+ID4gQEAgLTcsOCAr Nyw4IEBADQo+ID4gPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lv biBmcm9tIEtpcCBNYWN5Lg0KPiA+ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVm IF9SVEVfUklOR19HRU5FUklDX0hfDQo+ID4gPiA+IC0jZGVmaW5lIF9SVEVfUklOR19HRU5FUklD X0hfDQo+ID4gPiA+ICsjaWZuZGVmIF9SSU5HX0dFTkVSSUNfUFZUX0hfDQo+ID4gPiA+ICsjZGVm aW5lIF9SSU5HX0dFTkVSSUNfUFZUX0hfDQo+ID4gPiA+DQo+ID4gPiA+ICBzdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB2b2lkDQo+ID4gPiA+ICBfX3J0ZV9yaW5nX3VwZGF0ZV90YWlsKHN0cnVj dCBydGVfcmluZ19oZWFkdGFpbCAqaHQsIHVpbnQzMl90DQo+ID4gPiA+IG9sZF92YWwsIEBAIC0x NzAsNCArMTcwLDQgQEAgX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChzdHJ1Y3QNCj4gPiA+IHJ0 ZV9yaW5nICpyLCB1bnNpZ25lZCBpbnQgaXNfc2MsDQo+ID4gPiA+ICAJcmV0dXJuIG47DQo+ID4g PiA+ICB9DQo+ID4gPiA+DQo+ID4gPiA+IC0jZW5kaWYgLyogX1JURV9SSU5HX0dFTkVSSUNfSF8g Ki8NCj4gPiA+ID4gKyNlbmRpZiAvKiBfUklOR19HRU5FUklDX1BWVF9IXyAqLw0KPiA+ID4gPiBk aWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0c19jMTFfbWVtLmgNCj4gPiA+ ID4gYi9saWIvbGlicnRlX3JpbmcvcmluZ19odHNfZWxlbV9wdnQuaA0KPiA+ID4gPiBzaW1pbGFy aXR5IGluZGV4IDYwJQ0KPiA+ID4gPiByZW5hbWUgZnJvbSBsaWIvbGlicnRlX3JpbmcvcnRlX3Jp bmdfaHRzX2MxMV9tZW0uaA0KPiA+ID4gPiByZW5hbWUgdG8gbGliL2xpYnJ0ZV9yaW5nL3Jpbmdf aHRzX2VsZW1fcHZ0LmgNCj4gPiA+ID4gaW5kZXggMTZlNTRiNmZmLi45MjY4NzUwYjAgMTAwNjQ0 DQo+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19odHNfYzExX21lbS5oDQo+ ID4gPiA+ICsrKyBiL2xpYi9saWJydGVfcmluZy9yaW5nX2h0c19lbGVtX3B2dC5oDQo+ID4gPiA+ IEBAIC03LDggKzcsOCBAQA0KPiA+ID4gPiAgICogVXNlZCBhcyBCU0QtMyBMaWNlbnNlZCB3aXRo IHBlcm1pc3Npb24gZnJvbSBLaXAgTWFjeS4NCj4gPiA+ID4gICAqLw0KPiA+ID4gPg0KPiA+ID4g PiAtI2lmbmRlZiBfUlRFX1JJTkdfSFRTX0MxMV9NRU1fSF8NCj4gPiA+ID4gLSNkZWZpbmUgX1JU RV9SSU5HX0hUU19DMTFfTUVNX0hfDQo+ID4gPiA+ICsjaWZuZGVmIF9SSU5HX0hUU19FTEVNX1BW VF9IXw0KPiA+ID4gPiArI2RlZmluZSBfUklOR19IVFNfRUxFTV9QVlRfSF8NCj4gPiA+ID4NCj4g PiA+ID4gIC8qKg0KPiA+ID4gPiAgICogQGZpbGUgcnRlX3JpbmdfaHRzX2MxMV9tZW0uaA0KPiA+ ID4gPiBAQCAtMTYxLDQgKzE2MSw4NiBAQCBfX3J0ZV9yaW5nX2h0c19tb3ZlX2NvbnNfaGVhZChz dHJ1Y3QgcnRlX3JpbmcNCj4gPiA+ICpyLCB1bnNpZ25lZCBpbnQgbnVtLA0KPiA+ID4gPiAgCXJl dHVybiBuOw0KPiA+ID4gPiAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklO R19IVFNfQzExX01FTV9IXyAqLw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBAaW50ZXJuYWwg RW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIEhUUyByaW5nLg0KPiA+ID4gPiArICoNCj4g PiA+ID4gKyAqIEBwYXJhbSByDQo+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byB0aGUgcmluZyBz dHJ1Y3R1cmUuDQo+ID4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxlDQo+ID4gPiA+ICsgKiAgIEEg cG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4gPiA+ICsgKiBAcGFyYW0gZXNpemUN Cj4gPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50LCBpbiBieXRlcy4gSXQgbXVz dCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiA+ICsgKiAgIFRoaXMgbXVzdCBiZSB0aGUgc2Ft ZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBPdGhlcndpc2UNCj4gPiA+ID4g KyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ID4gKyAqIEBwYXJhbSBuDQo+ ID4gPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBhZGQgaW4gdGhlIHJpbmcgZnJv bSB0aGUgb2JqX3RhYmxlLg0KPiA+ID4gPiArICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+ICsg KiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBFbnF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0 ZW1zIGZyb20gYQ0KPiA+ID4gcmluZw0KPiA+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9WQVJJ QUJMRTogRW5xdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gPiBmcm9tIHJpbmcN Cj4gPiA+ID4gKyAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiA+ICsgKiAgIHJldHVybnMgdGhl IGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVk DQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2Jq ZWN0cyBlbnF1ZXVlZC4NCj4gPiA+ID4gKyAqICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVF VUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4g PiArc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ICtfX3J0 ZV9yaW5nX2RvX2h0c19lbnF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCBjb25zdCB2b2lk DQo+ID4gPiAqb2JqX3RhYmxlLA0KPiA+ID4gPiArCXVpbnQzMl90IGVzaXplLCB1aW50MzJfdCBu LCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gPiArCXVpbnQz Ml90ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiArCXVpbnQzMl90IGZyZWUsIGhl YWQ7DQo+ID4gPiA+ICsNCj4gPiA+ID4gKwluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVfcHJvZF9o ZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwgJmZyZWUpOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ aWYgKG4gIT0gMCkgew0KPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXMociwgaGVh ZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiA+ICsJCV9fcnRlX3JpbmdfaHRzX3VwZGF0 ZV90YWlsKCZyLT5odHNfcHJvZCwgaGVhZCwgbiwgMSk7DQo+ID4gPiA+ICsJfQ0KPiA+ID4gPiAr DQo+ID4gPiA+ICsJaWYgKGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ID4gKwkJKmZyZWVfc3Bh Y2UgPSBmcmVlIC0gbjsNCj4gPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gK30NCj4gPiA+ID4g Kw0KPiA+ID4gPiArLyoqDQo+ID4gPiA+ICsgKiBAaW50ZXJuYWwgRGVxdWV1ZSBzZXZlcmFsIG9i amVjdHMgZnJvbSB0aGUgSFRTIHJpbmcuDQo+ID4gPiA+ICsgKg0KPiA+ID4gPiArICogQHBhcmFt IHINCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ ID4gKyAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gKyAqICAgQSBwb2ludGVyIHRvIGEgdGFi bGUgb2Ygb2JqZWN0cy4NCj4gPiA+ID4gKyAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiArICogICBU aGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUg b2YgNC4NCj4gPiA+ID4gKyAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hp bGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gPiArICogICB0aGUgcmVzdWx0 cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiArICogQHBhcmFtIG4NCj4gPiA+ID4gKyAqICAgVGhl IG51bWJlciBvZiBvYmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+ID4gKyAqIEBw YXJhbSBiZWhhdmlvcg0KPiA+ID4gPiArICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVx dWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGENCj4gPiA+IHJpbmcNCj4gPiA+ID4g KyAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVtcyBhcyBw b3NzaWJsZQ0KPiA+ID4gZnJvbSByaW5nDQo+ID4gPiA+ICsgKiBAcGFyYW0gYXZhaWxhYmxlDQo+ ID4gPiA+ICsgKiAgIHJldHVybnMgdGhlIG51bWJlciBvZiByZW1haW5pbmcgcmluZyBlbnRyaWVz IGFmdGVyIHRoZSBkZXF1ZXVlIGhhcw0KPiA+ID4gZmluaXNoZWQNCj4gPiA+ID4gKyAqIEByZXR1 cm4NCj4gPiA+ID4gKyAqICAgLSBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZGVxdWV1ZWQuDQo+ ID4gPiA+ICsgKiAgICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVFVUVfRklYRUQsIHRoaXMg d2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gKyAqLw0KPiA+ID4gPiArc3RhdGljIF9fcnRl X2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+ICtfX3J0ZV9yaW5nX2RvX2h0c19k ZXF1ZXVlX2VsZW0oc3RydWN0IHJ0ZV9yaW5nICpyLCB2b2lkICpvYmpfdGFibGUsDQo+ID4gPiA+ ICsJdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZp b3IgYmVoYXZpb3IsDQo+ID4gPiA+ICsJdWludDMyX3QgKmF2YWlsYWJsZSkNCj4gPiA+ID4gK3sN Cj4gPiA+ID4gKwl1aW50MzJfdCBlbnRyaWVzLCBoZWFkOw0KPiA+ID4gPiArDQo+ID4gPiA+ICsJ biA9IF9fcnRlX3JpbmdfaHRzX21vdmVfY29uc19oZWFkKHIsIG4sIGJlaGF2aW9yLCAmaGVhZCwN Cj4gPiA+ICZlbnRyaWVzKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChuICE9IDApIHsNCj4g PiA+ID4gKwkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJsZSwgZXNp emUsIG4pOw0KPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2h0c191cGRhdGVfdGFpbCgmci0+aHRzX2Nv bnMsIGhlYWQsIG4sIDApOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChh dmFpbGFibGUgIT0gTlVMTCkNCj4gPiA+ID4gKwkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0K PiA+ID4gPiArCXJldHVybiBuOw0KPiA+ID4gPiArfQ0KPiA+ID4gPiArDQo+ID4gPiA+ICsjZW5k aWYgLyogX1JJTkdfSFRTX0VMRU1fUFZUX0hfICovDQo+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIv bGlicnRlX3JpbmcvcnRlX3JpbmdfcGVla19jMTFfbWVtLmgNCj4gPiA+ID4gYi9saWIvbGlicnRl X3JpbmcvcmluZ19wZWVrX2VsZW1fcHZ0LmgNCj4gPiA+ID4gc2ltaWxhcml0eSBpbmRleCA2MiUN Cj4gPiA+ID4gcmVuYW1lIGZyb20gbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfYzExX21l bS5oDQo+ID4gPiA+IHJlbmFtZSB0byBsaWIvbGlicnRlX3JpbmcvcmluZ19wZWVrX2VsZW1fcHZ0 LmgNCj4gPiA+ID4gaW5kZXggMjgzYzdlNzBiLi4xYzU3YmNkZDYgMTAwNjQ0DQo+ID4gPiA+IC0t LSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrX2MxMV9tZW0uaA0KPiA+ID4gPiArKysg Yi9saWIvbGlicnRlX3JpbmcvcmluZ19wZWVrX2VsZW1fcHZ0LmgNCj4gPiA+ID4gQEAgLTcsOCAr Nyw4IEBADQo+ID4gPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlzc2lv biBmcm9tIEtpcCBNYWN5Lg0KPiA+ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZuZGVm IF9SVEVfUklOR19QRUVLX0MxMV9NRU1fSF8NCj4gPiA+ID4gLSNkZWZpbmUgX1JURV9SSU5HX1BF RUtfQzExX01FTV9IXw0KPiA+ID4gPiArI2lmbmRlZiBfUklOR19QRUVLX0VMRU1fUFZUX0hfDQo+ ID4gPiA+ICsjZGVmaW5lIF9SSU5HX1BFRUtfRUxFTV9QVlRfSF8NCj4gPiA+ID4NCj4gPiA+ID4g IC8qKg0KPiA+ID4gPiAgICogQGZpbGUgcnRlX3JpbmdfcGVla19jMTFfbWVtLmgNCj4gPiA+ID4g QEAgLTEwNyw0ICsxMDcsNzMgQEAgX19ydGVfcmluZ19odHNfc2V0X2hlYWRfdGFpbChzdHJ1Y3QN Cj4gPiA+IHJ0ZV9yaW5nX2h0c19oZWFkdGFpbCAqaHQsIHVpbnQzMl90IHRhaWwsDQo+ID4gPiA+ ICAJX19hdG9taWNfc3RvcmVfbigmaHQtPmh0LnJhdywgcC5yYXcsIF9fQVRPTUlDX1JFTEVBU0Up OyAgfQ0KPiA+ID4gPg0KPiA+ID4gPiAtI2VuZGlmIC8qIF9SVEVfUklOR19QRUVLX0MxMV9NRU1f SF8gKi8NCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGludGVybmFsIFRoaXMgZnVuY3Rpb24g bW92ZXMgcHJvZCBoZWFkIHZhbHVlLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgX19y dGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gK19fcnRlX3JpbmdfZG9fZW5x dWV1ZV9zdGFydChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IG4sDQo+ID4gPiA+ICsJCWVu dW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsIHVpbnQzMl90DQo+ID4gPiAqZnJl ZV9zcGFjZSkgew0KPiA+ID4gPiArCXVpbnQzMl90IGZyZWUsIGhlYWQsIG5leHQ7DQo+ID4gPiA+ ICsNCj4gPiA+ID4gKwlzd2l0Y2ggKHItPnByb2Quc3luY190eXBlKSB7DQo+ID4gPiA+ICsJY2Fz ZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+ID4gPiArCQluID0gX19ydGVfcmluZ19tb3ZlX3Byb2Rf aGVhZChyLCBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ID4gPiArCQkJYmVoYXZpb3IsICZoZWFk LCAmbmV4dCwgJmZyZWUpOw0KPiA+ID4gPiArCQlicmVhazsNCj4gPiA+ID4gKwljYXNlIFJURV9S SU5HX1NZTkNfTVRfSFRTOg0KPiA+ID4gPiArCQluID0gIF9fcnRlX3JpbmdfaHRzX21vdmVfcHJv ZF9oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiArCQkJJmhlYWQsICZmcmVlKTsNCj4gPiA+ ID4gKwkJYnJlYWs7DQo+ID4gPiA+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiA+ID4gPiAr CWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ID4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ID4g KwkJLyogdW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxkbid0IGJlIGhlcmUgKi8NCj4gPiA+ID4gKwkJ UlRFX0FTU0VSVCgwKTsNCj4gPiA+ID4gKwkJbiA9IDA7DQo+ID4gPiA+ICsJCWZyZWUgPSAwOw0K PiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChmcmVlX3NwYWNlICE9IE5VTEwp DQo+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZSAtIG47DQo+ID4gPiA+ICsJcmV0dXJuIG47 DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGludGVy bmFsIFRoaXMgZnVuY3Rpb24gbW92ZXMgY29ucyBoZWFkIHZhbHVlIGFuZCBjb3BpZXMgdXAgdG8g Km4qDQo+ID4gPiA+ICsgKiBvYmplY3RzIGZyb20gdGhlIHJpbmcgdG8gdGhlIHVzZXIgcHJvdmlk ZWQgb2JqX3RhYmxlLg0KPiA+ID4gPiArICovDQo+ID4gPiA+ICtzdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gK19fcnRlX3JpbmdfZG9fZGVxdWV1ZV9zdGFy dChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+ID4gKwl1aW50MzJf dCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlv ciwNCj4gPiA+ID4gKwl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ID4gPiArew0KPiA+ID4gPiAr CXVpbnQzMl90IGF2YWlsLCBoZWFkLCBuZXh0Ow0KPiA+ID4gPiArDQo+ID4gPiA+ICsJc3dpdGNo IChyLT5jb25zLnN5bmNfdHlwZSkgew0KPiA+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19TVDoN Cj4gPiA+ID4gKwkJbiA9IF9fcnRlX3JpbmdfbW92ZV9jb25zX2hlYWQociwgUlRFX1JJTkdfU1lO Q19TVCwgbiwNCj4gPiA+ID4gKwkJCWJlaGF2aW9yLCAmaGVhZCwgJm5leHQsICZhdmFpbCk7DQo+ ID4gPiA+ICsJCWJyZWFrOw0KPiA+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9IVFM6DQo+ ID4gPiA+ICsJCW4gPSAgX19ydGVfcmluZ19odHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZp b3IsDQo+ID4gPiA+ICsJCQkmaGVhZCwgJmF2YWlsKTsNCj4gPiA+ID4gKwkJYnJlYWs7DQo+ID4g PiA+ICsJY2FzZSBSVEVfUklOR19TWU5DX01UOg0KPiA+ID4gPiArCWNhc2UgUlRFX1JJTkdfU1lO Q19NVF9SVFM6DQo+ID4gPiA+ICsJZGVmYXVsdDoNCj4gPiA+ID4gKwkJLyogdW5zdXBwb3J0ZWQg bW9kZSwgc2hvdWxkbid0IGJlIGhlcmUgKi8NCj4gPiA+ID4gKwkJUlRFX0FTU0VSVCgwKTsNCj4g PiA+ID4gKwkJbiA9IDA7DQo+ID4gPiA+ICsJCWF2YWlsID0gMDsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlpZiAobiAhPSAwKQ0KPiA+ID4gPiArCQlfX3J0ZV9yaW5nX2RlcXVl dWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiA+ICsJCSphdmFpbGFibGUgPSBhdmFp bCAtIG47DQo+ID4gPiA+ICsJcmV0dXJuIG47DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ ID4gKyNlbmRpZiAvKiBfUklOR19QRUVLX0VMRU1fUFZUX0hfICovDQo+ID4gPiA+IGRpZmYgLS1n aXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzX2MxMV9tZW0uaA0KPiA+ID4gPiBiL2xp Yi9saWJydGVfcmluZy9yaW5nX3J0c19lbGVtX3B2dC5oDQo+ID4gPiA+IHNpbWlsYXJpdHkgaW5k ZXggNjIlDQo+ID4gPiA+IHJlbmFtZSBmcm9tIGxpYi9saWJydGVfcmluZy9ydGVfcmluZ19ydHNf YzExX21lbS5oDQo+ID4gPiA+IHJlbmFtZSB0byBsaWIvbGlicnRlX3JpbmcvcmluZ19ydHNfZWxl bV9wdnQuaA0KPiA+ID4gPiBpbmRleCAzMjdmMjI3OTYuLmNiY2VjNzNlYiAxMDA2NDQNCj4gPiA+ ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0c19jMTFfbWVtLmgNCj4gPiA+ID4g KysrIGIvbGliL2xpYnJ0ZV9yaW5nL3JpbmdfcnRzX2VsZW1fcHZ0LmgNCj4gPiA+ID4gQEAgLTcs OCArNyw4IEBADQo+ID4gPiA+ICAgKiBVc2VkIGFzIEJTRC0zIExpY2Vuc2VkIHdpdGggcGVybWlz c2lvbiBmcm9tIEtpcCBNYWN5Lg0KPiA+ID4gPiAgICovDQo+ID4gPiA+DQo+ID4gPiA+IC0jaWZu ZGVmIF9SVEVfUklOR19SVFNfQzExX01FTV9IXw0KPiA+ID4gPiAtI2RlZmluZSBfUlRFX1JJTkdf UlRTX0MxMV9NRU1fSF8NCj4gPiA+ID4gKyNpZm5kZWYgX1JJTkdfUlRTX0VMRU1fUFZUX0hfDQo+ ID4gPiA+ICsjZGVmaW5lIF9SSU5HX1JUU19FTEVNX1BWVF9IXw0KPiA+ID4gPg0KPiA+ID4gPiAg LyoqDQo+ID4gPiA+ICAgKiBAZmlsZSBydGVfcmluZ19ydHNfYzExX21lbS5oDQo+ID4gPiA+IEBA IC0xNzYsNCArMTc2LDg2IEBAIF9fcnRlX3JpbmdfcnRzX21vdmVfY29uc19oZWFkKHN0cnVjdCBy dGVfcmluZw0KPiA+ID4gKnIsIHVpbnQzMl90IG51bSwNCj4gPiA+ID4gIAlyZXR1cm4gbjsNCj4g PiA+ID4gIH0NCj4gPiA+ID4NCj4gPiA+ID4gLSNlbmRpZiAvKiBfUlRFX1JJTkdfUlRTX0MxMV9N RU1fSF8gKi8NCj4gPiA+ID4gKy8qKg0KPiA+ID4gPiArICogQGludGVybmFsIEVucXVldWUgc2V2 ZXJhbCBvYmplY3RzIG9uIHRoZSBSVFMgcmluZy4NCj4gPiA+ID4gKyAqDQo+ID4gPiA+ICsgKiBA cGFyYW0gcg0KPiA+ID4gPiArICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0K PiA+ID4gPiArICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiArICogICBBIHBvaW50ZXIgdG8g YSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiArICogQHBhcmFtIGVzaXplDQo+ID4gPiA+ICsg KiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0 aXBsZSBvZiA0Lg0KPiA+ID4gPiArICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNl ZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiA+ICsgKiAgIHRoZSBy ZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+ICsgKiBAcGFyYW0gbg0KPiA+ID4gPiArICog ICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhlIG9ial90 YWJsZS4NCj4gPiA+ID4gKyAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+ID4gPiArICogICBSVEVfUklO R19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBmcm9tIGEN Cj4gPiA+IHJpbmcNCj4gPiA+ID4gKyAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6IEVucXVl dWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gZnJvbSByaW5nDQo+ID4gPiA+ICsg KiBAcGFyYW0gZnJlZV9zcGFjZQ0KPiA+ID4gPiArICogICByZXR1cm5zIHRoZSBhbW91bnQgb2Yg c3BhY2UgYWZ0ZXIgdGhlIGVucXVldWUgb3BlcmF0aW9uIGhhcyBmaW5pc2hlZA0KPiA+ID4gPiAr ICogQHJldHVybg0KPiA+ID4gPiArICogICBBY3R1YWwgbnVtYmVyIG9mIG9iamVjdHMgZW5xdWV1 ZWQuDQo+ID4gPiA+ICsgKiAgIElmIGJlaGF2aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0 aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBf X3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiArX19ydGVfcmluZ19kb19y dHNfZW5xdWV1ZV9lbGVtKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qgdm9pZA0KPiA+ID4gKm9i al90YWJsZSwNCj4gPiA+ID4gKwl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVf cmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwNCj4gPiA+ID4gKwl1aW50MzJfdCAqZnJlZV9z cGFjZSkNCj4gPiA+ID4gK3sNCj4gPiA+ID4gKwl1aW50MzJfdCBmcmVlLCBoZWFkOw0KPiA+ID4g PiArDQo+ID4gPiA+ICsJbiA9ICBfX3J0ZV9yaW5nX3J0c19tb3ZlX3Byb2RfaGVhZChyLCBuLCBi ZWhhdmlvciwgJmhlYWQsICZmcmVlKTsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChuICE9IDAp IHsNCj4gPiA+ID4gKwkJX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHIsIGhlYWQsIG9ial90YWJs ZSwgZXNpemUsIG4pOw0KPiA+ID4gPiArCQlfX3J0ZV9yaW5nX3J0c191cGRhdGVfdGFpbCgmci0+ cnRzX3Byb2QpOw0KPiA+ID4gPiArCX0NCj4gPiA+ID4gKw0KPiA+ID4gPiArCWlmIChmcmVlX3Nw YWNlICE9IE5VTEwpDQo+ID4gPiA+ICsJCSpmcmVlX3NwYWNlID0gZnJlZSAtIG47DQo+ID4gPiA+ ICsJcmV0dXJuIG47DQo+ID4gPiA+ICt9DQo+ID4gPiA+ICsNCj4gPiA+ID4gKy8qKg0KPiA+ID4g PiArICogQGludGVybmFsIERlcXVldWUgc2V2ZXJhbCBvYmplY3RzIGZyb20gdGhlIFJUUyByaW5n Lg0KPiA+ID4gPiArICoNCj4gPiA+ID4gKyAqIEBwYXJhbSByDQo+ID4gPiA+ICsgKiAgIEEgcG9p bnRlciB0byB0aGUgcmluZyBzdHJ1Y3R1cmUuDQo+ID4gPiA+ICsgKiBAcGFyYW0gb2JqX3RhYmxl DQo+ID4gPiA+ICsgKiAgIEEgcG9pbnRlciB0byBhIHRhYmxlIG9mIG9iamVjdHMuDQo+ID4gPiA+ ICsgKiBAcGFyYW0gZXNpemUNCj4gPiA+ID4gKyAqICAgVGhlIHNpemUgb2YgcmluZyBlbGVtZW50 LCBpbiBieXRlcy4gSXQgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQuDQo+ID4gPiA+ICsgKiAgIFRo aXMgbXVzdCBiZSB0aGUgc2FtZSB2YWx1ZSB1c2VkIHdoaWxlIGNyZWF0aW5nIHRoZSByaW5nLiBP dGhlcndpc2UNCj4gPiA+ID4gKyAqICAgdGhlIHJlc3VsdHMgYXJlIHVuZGVmaW5lZC4NCj4gPiA+ ID4gKyAqIEBwYXJhbSBuDQo+ID4gPiA+ICsgKiAgIFRoZSBudW1iZXIgb2Ygb2JqZWN0cyB0byBw dWxsIGZyb20gdGhlIHJpbmcuDQo+ID4gPiA+ICsgKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4g KyAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIERlcXVldWUgYSBmaXhlZCBudW1iZXIgb2Yg aXRlbXMgZnJvbSBhDQo+ID4gPiByaW5nDQo+ID4gPiA+ICsgKiAgIFJURV9SSU5HX1FVRVVFX1ZB UklBQkxFOiBEZXF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiA+IGZyb20gcmlu Zw0KPiA+ID4gPiArICogQHBhcmFtIGF2YWlsYWJsZQ0KPiA+ID4gPiArICogICByZXR1cm5zIHRo ZSBudW1iZXIgb2YgcmVtYWluaW5nIHJpbmcgZW50cmllcyBhZnRlciB0aGUgZGVxdWV1ZSBoYXMN Cj4gPiA+IGZpbmlzaGVkDQo+ID4gPiA+ICsgKiBAcmV0dXJuDQo+ID4gPiA+ICsgKiAgIC0gQWN0 dWFsIG51bWJlciBvZiBvYmplY3RzIGRlcXVldWVkLg0KPiA+ID4gPiArICogICAgIElmIGJlaGF2 aW9yID09IFJURV9SSU5HX1FVRVVFX0ZJWEVELCB0aGlzIHdpbGwgYmUgMCBvciBuIG9ubHkuDQo+ ID4gPiA+ICsgKi8NCj4gPiA+ID4gK3N0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVk IGludA0KPiA+ID4gPiArX19ydGVfcmluZ19kb19ydHNfZGVxdWV1ZV9lbGVtKHN0cnVjdCBydGVf cmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gPiArCXVpbnQzMl90IGVzaXplLCB1aW50 MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gPiAr CXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiA+ICt7DQo+ID4gPiA+ICsJdWludDMyX3QgZW50 cmllcywgaGVhZDsNCj4gPiA+ID4gKw0KPiA+ID4gPiArCW4gPSBfX3J0ZV9yaW5nX3J0c19tb3Zl X2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwgJmhlYWQsDQo+ID4gPiAmZW50cmllcyk7DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlpZiAobiAhPSAwKSB7DQo+ID4gPiA+ICsJCV9fcnRlX3JpbmdfZGVx dWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+ID4gKwkJX19y dGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19jb25zKTsNCj4gPiA+ID4gKwl9DQo+ID4g PiA+ICsNCj4gPiA+ID4gKwlpZiAoYXZhaWxhYmxlICE9IE5VTEwpDQo+ID4gPiA+ICsJCSphdmFp bGFibGUgPSBlbnRyaWVzIC0gbjsNCj4gPiA+ID4gKwlyZXR1cm4gbjsNCj4gPiA+ID4gK30NCj4g PiA+ID4gKw0KPiA+ID4gPiArI2VuZGlmIC8qIF9SSU5HX1JUU19FTEVNX1BWVF9IXyAqLw0KPiA+ ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ID4g PiBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19lbGVtLmggaW5kZXggNTczNDRkNDdkLi4xMTli NWMwYjYgMTAwNjQ0DQo+ID4gPiA+IC0tLSBhL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19lbGVt LmgNCj4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2VsZW0uaA0KPiA+ID4g PiBAQCAtMjEsNiArMjEsNyBAQCBleHRlcm4gIkMiIHsNCj4gPiA+ID4gICNlbmRpZg0KPiA+ID4g Pg0KPiA+ID4gPiAgI2luY2x1ZGUgPHJ0ZV9yaW5nX2NvcmUuaD4NCj4gPiA+ID4gKyNpbmNsdWRl IDxyaW5nX2VsZW1fcHZ0Lmg+DQo+ID4gPiA+DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAqIENh bGN1bGF0ZSB0aGUgbWVtb3J5IHNpemUgbmVlZGVkIGZvciBhIHJpbmcgd2l0aCBnaXZlbiBlbGVt ZW50DQo+ID4gPiA+IHNpemUgQEAgLTEwNSwzNzkgKzEwNiw2IEBAIHNzaXplX3QNCj4gPiA+IHJ0 ZV9yaW5nX2dldF9tZW1zaXplX2VsZW0odW5zaWduZWQNCj4gPiA+ID4gaW50IGVzaXplLCB1bnNp Z25lZCBpbnQgY291bnQpOyAgc3RydWN0IHJ0ZV9yaW5nICpydGVfcmluZ19jcmVhdGVfZWxlbShj b25zdA0KPiA+ID4gY2hhciAqbmFtZSwgdW5zaWduZWQgaW50IGVzaXplLA0KPiA+ID4gPiAgCQkJ dW5zaWduZWQgaW50IGNvdW50LCBpbnQgc29ja2V0X2lkLCB1bnNpZ25lZCBpbnQgZmxhZ3MpOw0K PiA+ID4gPg0KPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0KPiA+ID4g PiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zXzMyKHN0cnVjdCBydGVfcmluZyAqciwgY29uc3Qg dWludDMyX3Qgc2l6ZSwNCj4gPiA+ID4gLQkJdWludDMyX3QgaWR4LCBjb25zdCB2b2lkICpvYmpf dGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JdW5zaWduZWQgaW50IGk7 DQo+ID4gPiA+IC0JdWludDMyX3QgKnJpbmcgPSAodWludDMyX3QgKikmclsxXTsNCj4gPiA+ID4g LQljb25zdCB1aW50MzJfdCAqb2JqID0gKGNvbnN0IHVpbnQzMl90ICopb2JqX3RhYmxlOw0KPiA+ ID4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiA+IC0JCWZvciAoaSA9 IDA7IGkgPCAobiAmIH4weDcpOyBpICs9IDgsIGlkeCArPSA4KSB7DQo+ID4gPiA+IC0JCQlyaW5n W2lkeF0gPSBvYmpbaV07DQo+ID4gPiA+IC0JCQlyaW5nW2lkeCArIDFdID0gb2JqW2kgKyAxXTsN Cj4gPiA+ID4gLQkJCXJpbmdbaWR4ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ID4gPiAtCQkJcmlu Z1tpZHggKyAzXSA9IG9ialtpICsgM107DQo+ID4gPiA+IC0JCQlyaW5nW2lkeCArIDRdID0gb2Jq W2kgKyA0XTsNCj4gPiA+ID4gLQkJCXJpbmdbaWR4ICsgNV0gPSBvYmpbaSArIDVdOw0KPiA+ID4g PiAtCQkJcmluZ1tpZHggKyA2XSA9IG9ialtpICsgNl07DQo+ID4gPiA+IC0JCQlyaW5nW2lkeCAr IDddID0gb2JqW2kgKyA3XTsNCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCQlzd2l0Y2ggKG4gJiAw eDcpIHsNCj4gPiA+ID4gLQkJY2FzZSA3Og0KPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpb aSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSA2Og0KPiA+ID4gPiAtCQkJ cmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2Fz ZSA1Og0KPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2gg Ki8NCj4gPiA+ID4gLQkJY2FzZSA0Og0KPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsr XTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSAzOg0KPiA+ID4gPiAtCQkJcmlu Z1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSAy Og0KPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gPiAtCQkJcmluZ1tpZHgrK10gPSBvYmpbaSsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4g PiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+IC0JCQly aW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcg Ki8NCj4gPiA+ID4gLQkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ID4g LQkJCXJpbmdbaWR4XSA9IG9ialtpXTsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC19DQo+ID4gPiA+ IC0NCj4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gLV9f cnRlX3JpbmdfZW5xdWV1ZV9lbGVtc182NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHBy b2RfaGVhZCwNCj4gPiA+ID4gLQkJY29uc3Qgdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0K PiA+ID4gPiAtew0KPiA+ID4gPiAtCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiAtCWNvbnN0IHVp bnQzMl90IHNpemUgPSByLT5zaXplOw0KPiA+ID4gPiAtCXVpbnQzMl90IGlkeCA9IHByb2RfaGVh ZCAmIHItPm1hc2s7DQo+ID4gPiA+IC0JdWludDY0X3QgKnJpbmcgPSAodWludDY0X3QgKikmclsx XTsNCj4gPiA+ID4gLQljb25zdCB1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9IChjb25zdCB1bmFs aWduZWRfdWludDY0X3QNCj4gPiA+ICopb2JqX3RhYmxlOw0KPiA+ID4gPiAtCWlmIChsaWtlbHko aWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAobiAmIH4weDMp OyBpICs9IDQsIGlkeCArPSA0KSB7DQo+ID4gPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ ID4gPiA+IC0JCQlyaW5nW2lkeCArIDFdID0gb2JqW2kgKyAxXTsNCj4gPiA+ID4gLQkJCXJpbmdb aWR4ICsgMl0gPSBvYmpbaSArIDJdOw0KPiA+ID4gPiAtCQkJcmluZ1tpZHggKyAzXSA9IG9ialtp ICsgM107DQo+ID4gPiA+IC0JCX0NCj4gPiA+ID4gLQkJc3dpdGNoIChuICYgMHgzKSB7DQo+ID4g PiA+IC0JCWNhc2UgMzoNCj4gPiA+ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107IC8qIGZh bGx0aHJvdWdoICovDQo+ID4gPiA+IC0JCWNhc2UgMjoNCj4gPiA+ID4gLQkJCXJpbmdbaWR4Kytd ID0gb2JqW2krK107IC8qIGZhbGx0aHJvdWdoICovDQo+ID4gPiA+IC0JCWNhc2UgMToNCj4gPiA+ ID4gLQkJCXJpbmdbaWR4KytdID0gb2JqW2krK107DQo+ID4gPiA+IC0JCX0NCj4gPiA+ID4gLQl9 IGVsc2Ugew0KPiA+ID4gPiAtCQlmb3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0K PiA+ID4gPiAtCQkJcmluZ1tpZHhdID0gb2JqW2ldOw0KPiA+ID4gPiAtCQkvKiBTdGFydCBhdCB0 aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8IG47IGkrKywgaWR4 KyspDQo+ID4gPiA+IC0JCQlyaW5nW2lkeF0gPSBvYmpbaV07DQo+ID4gPiA+IC0JfQ0KPiA+ID4g PiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB2b2lk DQo+ID4gPiA+IC1fX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfMTI4KHN0cnVjdCBydGVfcmluZyAq ciwgdWludDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4gPiAtCQljb25zdCB2b2lkICpvYmpfdGFibGUs IHVpbnQzMl90IG4pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JdW5zaWduZWQgaW50IGk7DQo+ID4g PiA+IC0JY29uc3QgdWludDMyX3Qgc2l6ZSA9IHItPnNpemU7DQo+ID4gPiA+IC0JdWludDMyX3Qg aWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ID4gLQlydGVfaW50MTI4X3QgKnJpbmcg PSAocnRlX2ludDEyOF90ICopJnJbMV07DQo+ID4gPiA+IC0JY29uc3QgcnRlX2ludDEyOF90ICpv YmogPSAoY29uc3QgcnRlX2ludDEyOF90ICopb2JqX3RhYmxlOw0KPiA+ID4gPiAtCWlmIChsaWtl bHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGkgPCAobiAmIH4w eDEpOyBpICs9IDIsIGlkeCArPSAyKQ0KPiA+ID4gPiAtCQkJbWVtY3B5KCh2b2lkICopKHJpbmcg KyBpZHgpLA0KPiA+ID4gPiAtCQkJCShjb25zdCB2b2lkICopKG9iaiArIGkpLCAzMik7DQo+ID4g PiA+IC0JCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ID4gPiAtCQljYXNlIDE6DQo+ID4gPiA+IC0J CQltZW1jcHkoKHZvaWQgKikocmluZyArIGlkeCksDQo+ID4gPiA+IC0JCQkJKGNvbnN0IHZvaWQg Kikob2JqICsgaSksIDE2KTsNCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4g PiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+IC0JCQlt ZW1jcHkoKHZvaWQgKikocmluZyArIGlkeCksDQo+ID4gPiA+IC0JCQkJKGNvbnN0IHZvaWQgKiko b2JqICsgaSksIDE2KTsNCj4gPiA+ID4gLQkJLyogU3RhcnQgYXQgdGhlIGJlZ2lubmluZyAqLw0K PiA+ID4gPiAtCQlmb3IgKGlkeCA9IDA7IGkgPCBuOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiAtCQkJ bWVtY3B5KCh2b2lkICopKHJpbmcgKyBpZHgpLA0KPiA+ID4gPiAtCQkJCShjb25zdCB2b2lkICop KG9iaiArIGkpLCAxNik7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0vKiB0aGUgYWN0dWFsIGVucXVldWUgb2YgZWxlbWVudHMgb24gdGhlIHJpbmcuDQo+ID4g PiA+IC0gKiBQbGFjZWQgaGVyZSBzaW5jZSBpZGVudGljYWwgY29kZSBuZWVkZWQgaW4gYm90aA0K PiA+ID4gPiAtICogc2luZ2xlIGFuZCBtdWx0aSBwcm9kdWNlciBlbnF1ZXVlIGZ1bmN0aW9ucy4N Cj4gPiA+ID4gLSAqLw0KPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdm9pZA0K PiA+ID4gPiAtX19ydGVfcmluZ19lbnF1ZXVlX2VsZW1zKHN0cnVjdCBydGVfcmluZyAqciwgdWlu dDMyX3QgcHJvZF9oZWFkLA0KPiA+ID4gPiAtCQljb25zdCB2b2lkICpvYmpfdGFibGUsIHVpbnQz Ml90IGVzaXplLCB1aW50MzJfdCBudW0pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JLyogOEIgYW5k IDE2QiBjb3BpZXMgaW1wbGVtZW50ZWQgaW5kaXZpZHVhbGx5IHRvIHJldGFpbg0KPiA+ID4gPiAt CSAqIHRoZSBjdXJyZW50IHBlcmZvcm1hbmNlLg0KPiA+ID4gPiAtCSAqLw0KPiA+ID4gPiAtCWlm IChlc2l6ZSA9PSA4KQ0KPiA+ID4gPiAtCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfNjQociwg cHJvZF9oZWFkLCBvYmpfdGFibGUsDQo+ID4gPiBudW0pOw0KPiA+ID4gPiAtCWVsc2UgaWYgKGVz aXplID09IDE2KQ0KPiA+ID4gPiAtCQlfX3J0ZV9yaW5nX2VucXVldWVfZWxlbXNfMTI4KHIsIHBy b2RfaGVhZCwgb2JqX3RhYmxlLA0KPiA+ID4gbnVtKTsNCj4gPiA+ID4gLQllbHNlIHsNCj4gPiA+ ID4gLQkJdWludDMyX3QgaWR4LCBzY2FsZSwgbnJfaWR4LCBucl9udW0sIG5yX3NpemU7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLQkJLyogTm9ybWFsaXplIHRvIHVpbnQzMl90ICovDQo+ID4gPiA+IC0J CXNjYWxlID0gZXNpemUgLyBzaXplb2YodWludDMyX3QpOw0KPiA+ID4gPiAtCQlucl9udW0gPSBu dW0gKiBzY2FsZTsNCj4gPiA+ID4gLQkJaWR4ID0gcHJvZF9oZWFkICYgci0+bWFzazsNCj4gPiA+ ID4gLQkJbnJfaWR4ID0gaWR4ICogc2NhbGU7DQo+ID4gPiA+IC0JCW5yX3NpemUgPSByLT5zaXpl ICogc2NhbGU7DQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtc18zMihyLCBucl9z aXplLCBucl9pZHgsDQo+ID4gPiA+IC0JCQkJb2JqX3RhYmxlLCBucl9udW0pOw0KPiA+ID4gPiAt CX0NCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtc3RhdGljIF9fcnRlX2Fsd2F5c19p bmxpbmUgdm9pZA0KPiA+ID4gPiAtX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMyKHN0cnVjdCBy dGVfcmluZyAqciwgY29uc3QgdWludDMyX3Qgc2l6ZSwNCj4gPiA+ID4gLQkJdWludDMyX3QgaWR4 LCB2b2lkICpvYmpfdGFibGUsIHVpbnQzMl90IG4pDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JdW5z aWduZWQgaW50IGk7DQo+ID4gPiA+IC0JdWludDMyX3QgKnJpbmcgPSAodWludDMyX3QgKikmclsx XTsNCj4gPiA+ID4gLQl1aW50MzJfdCAqb2JqID0gKHVpbnQzMl90ICopb2JqX3RhYmxlOw0KPiA+ ID4gPiAtCWlmIChsaWtlbHkoaWR4ICsgbiA8IHNpemUpKSB7DQo+ID4gPiA+IC0JCWZvciAoaSA9 IDA7IGkgPCAobiAmIH4weDcpOyBpICs9IDgsIGlkeCArPSA4KSB7DQo+ID4gPiA+IC0JCQlvYmpb aV0gPSByaW5nW2lkeF07DQo+ID4gPiA+IC0JCQlvYmpbaSArIDFdID0gcmluZ1tpZHggKyAxXTsN Cj4gPiA+ID4gLQkJCW9ialtpICsgMl0gPSByaW5nW2lkeCArIDJdOw0KPiA+ID4gPiAtCQkJb2Jq W2kgKyAzXSA9IHJpbmdbaWR4ICsgM107DQo+ID4gPiA+IC0JCQlvYmpbaSArIDRdID0gcmluZ1tp ZHggKyA0XTsNCj4gPiA+ID4gLQkJCW9ialtpICsgNV0gPSByaW5nW2lkeCArIDVdOw0KPiA+ID4g PiAtCQkJb2JqW2kgKyA2XSA9IHJpbmdbaWR4ICsgNl07DQo+ID4gPiA+IC0JCQlvYmpbaSArIDdd ID0gcmluZ1tpZHggKyA3XTsNCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCQlzd2l0Y2ggKG4gJiAw eDcpIHsNCj4gPiA+ID4gLQkJY2FzZSA3Og0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lk eCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSA2Og0KPiA+ID4gPiAtCQkJ b2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2Fz ZSA1Og0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2gg Ki8NCj4gPiA+ID4gLQkJY2FzZSA0Og0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsr XTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSAzOg0KPiA+ID4gPiAtCQkJb2Jq W2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSAy Og0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8N Cj4gPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsg LyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCX0gZWxzZSB7DQo+ID4g PiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+IC0JCQlv YmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdpbm5pbmcg Ki8NCj4gPiA+ID4gLQkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4gPiA+ID4g LQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC19DQo+ID4gPiA+ IC0NCj4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ID4gLV9f cnRlX3JpbmdfZGVxdWV1ZV9lbGVtc182NChzdHJ1Y3QgcnRlX3JpbmcgKnIsIHVpbnQzMl90IHBy b2RfaGVhZCwNCj4gPiA+ID4gLQkJdm9pZCAqb2JqX3RhYmxlLCB1aW50MzJfdCBuKQ0KPiA+ID4g PiAtew0KPiA+ID4gPiAtCXVuc2lnbmVkIGludCBpOw0KPiA+ID4gPiAtCWNvbnN0IHVpbnQzMl90 IHNpemUgPSByLT5zaXplOw0KPiA+ID4gPiAtCXVpbnQzMl90IGlkeCA9IHByb2RfaGVhZCAmIHIt Pm1hc2s7DQo+ID4gPiA+IC0JdWludDY0X3QgKnJpbmcgPSAodWludDY0X3QgKikmclsxXTsNCj4g PiA+ID4gLQl1bmFsaWduZWRfdWludDY0X3QgKm9iaiA9ICh1bmFsaWduZWRfdWludDY0X3QgKilv YmpfdGFibGU7DQo+ID4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4gPiA+ ID4gLQkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4Myk7IGkgKz0gNCwgaWR4ICs9IDQpIHsNCj4g PiA+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gLQkJCW9ialtpICsgMV0gPSBy aW5nW2lkeCArIDFdOw0KPiA+ID4gPiAtCQkJb2JqW2kgKyAyXSA9IHJpbmdbaWR4ICsgMl07DQo+ ID4gPiA+IC0JCQlvYmpbaSArIDNdID0gcmluZ1tpZHggKyAzXTsNCj4gPiA+ID4gLQkJfQ0KPiA+ ID4gPiAtCQlzd2l0Y2ggKG4gJiAweDMpIHsNCj4gPiA+ID4gLQkJY2FzZSAzOg0KPiA+ID4gPiAt CQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJ Y2FzZSAyOg0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lkeCsrXTsgLyogZmFsbHRocm91 Z2ggKi8NCj4gPiA+ID4gLQkJY2FzZSAxOg0KPiA+ID4gPiAtCQkJb2JqW2krK10gPSByaW5nW2lk eCsrXTsgLyogZmFsbHRocm91Z2ggKi8NCj4gPiA+ID4gLQkJfQ0KPiA+ID4gPiAtCX0gZWxzZSB7 DQo+ID4gPiA+IC0JCWZvciAoaSA9IDA7IGlkeCA8IHNpemU7IGkrKywgaWR4KyspDQo+ID4gPiA+ IC0JCQlvYmpbaV0gPSByaW5nW2lkeF07DQo+ID4gPiA+IC0JCS8qIFN0YXJ0IGF0IHRoZSBiZWdp bm5pbmcgKi8NCj4gPiA+ID4gLQkJZm9yIChpZHggPSAwOyBpIDwgbjsgaSsrLCBpZHgrKykNCj4g PiA+ID4gLQkJCW9ialtpXSA9IHJpbmdbaWR4XTsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC19DQo+ ID4gPiA+IC0NCj4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHZvaWQNCj4gPiA+ ID4gLV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18xMjgoc3RydWN0IHJ0ZV9yaW5nICpyLCB1aW50 MzJfdCBwcm9kX2hlYWQsDQo+ID4gPiA+IC0JCXZvaWQgKm9ial90YWJsZSwgdWludDMyX3QgbikN Cj4gPiA+ID4gLXsNCj4gPiA+ID4gLQl1bnNpZ25lZCBpbnQgaTsNCj4gPiA+ID4gLQljb25zdCB1 aW50MzJfdCBzaXplID0gci0+c2l6ZTsNCj4gPiA+ID4gLQl1aW50MzJfdCBpZHggPSBwcm9kX2hl YWQgJiByLT5tYXNrOw0KPiA+ID4gPiAtCXJ0ZV9pbnQxMjhfdCAqcmluZyA9IChydGVfaW50MTI4 X3QgKikmclsxXTsNCj4gPiA+ID4gLQlydGVfaW50MTI4X3QgKm9iaiA9IChydGVfaW50MTI4X3Qg KilvYmpfdGFibGU7DQo+ID4gPiA+IC0JaWYgKGxpa2VseShpZHggKyBuIDwgc2l6ZSkpIHsNCj4g PiA+ID4gLQkJZm9yIChpID0gMDsgaSA8IChuICYgfjB4MSk7IGkgKz0gMiwgaWR4ICs9IDIpDQo+ ID4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBpZHgp LCAzMik7DQo+ID4gPiA+IC0JCXN3aXRjaCAobiAmIDB4MSkgew0KPiA+ID4gPiAtCQljYXNlIDE6 DQo+ID4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2b2lkICopKHJpbmcgKyBp ZHgpLCAxNik7DQo+ID4gPiA+IC0JCX0NCj4gPiA+ID4gLQl9IGVsc2Ugew0KPiA+ID4gPiAtCQlm b3IgKGkgPSAwOyBpZHggPCBzaXplOyBpKyssIGlkeCsrKQ0KPiA+ID4gPiAtCQkJbWVtY3B5KCh2 b2lkICopKG9iaiArIGkpLCAodm9pZCAqKShyaW5nICsgaWR4KSwgMTYpOw0KPiA+ID4gPiAtCQkv KiBTdGFydCBhdCB0aGUgYmVnaW5uaW5nICovDQo+ID4gPiA+IC0JCWZvciAoaWR4ID0gMDsgaSA8 IG47IGkrKywgaWR4KyspDQo+ID4gPiA+IC0JCQltZW1jcHkoKHZvaWQgKikob2JqICsgaSksICh2 b2lkICopKHJpbmcgKyBpZHgpLCAxNik7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtfQ0KPiA+ID4g PiAtDQo+ID4gPiA+IC0vKiB0aGUgYWN0dWFsIGRlcXVldWUgb2YgZWxlbWVudHMgZnJvbSB0aGUg cmluZy4NCj4gPiA+ID4gLSAqIFBsYWNlZCBoZXJlIHNpbmNlIGlkZW50aWNhbCBjb2RlIG5lZWRl ZCBpbiBib3RoDQo+ID4gPiA+IC0gKiBzaW5nbGUgYW5kIG11bHRpIHByb2R1Y2VyIGVucXVldWUg ZnVuY3Rpb25zLg0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lu bGluZSB2b2lkDQo+ID4gPiA+IC1fX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMoc3RydWN0IHJ0ZV9y aW5nICpyLCB1aW50MzJfdCBjb25zX2hlYWQsDQo+ID4gPiA+IC0JCXZvaWQgKm9ial90YWJsZSwg dWludDMyX3QgZXNpemUsIHVpbnQzMl90IG51bSkNCj4gPiA+ID4gLXsNCj4gPiA+ID4gLQkvKiA4 QiBhbmQgMTZCIGNvcGllcyBpbXBsZW1lbnRlZCBpbmRpdmlkdWFsbHkgdG8gcmV0YWluDQo+ID4g PiA+IC0JICogdGhlIGN1cnJlbnQgcGVyZm9ybWFuY2UuDQo+ID4gPiA+IC0JICovDQo+ID4gPiA+ IC0JaWYgKGVzaXplID09IDgpDQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc182 NChyLCBjb25zX2hlYWQsIG9ial90YWJsZSwNCj4gPiA+IG51bSk7DQo+ID4gPiA+IC0JZWxzZSBp ZiAoZXNpemUgPT0gMTYpDQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtc18xMjgo ciwgY29uc19oZWFkLCBvYmpfdGFibGUsDQo+ID4gPiBudW0pOw0KPiA+ID4gPiAtCWVsc2Ugew0K PiA+ID4gPiAtCQl1aW50MzJfdCBpZHgsIHNjYWxlLCBucl9pZHgsIG5yX251bSwgbnJfc2l6ZTsN Cj4gPiA+ID4gLQ0KPiA+ID4gPiAtCQkvKiBOb3JtYWxpemUgdG8gdWludDMyX3QgKi8NCj4gPiA+ ID4gLQkJc2NhbGUgPSBlc2l6ZSAvIHNpemVvZih1aW50MzJfdCk7DQo+ID4gPiA+IC0JCW5yX251 bSA9IG51bSAqIHNjYWxlOw0KPiA+ID4gPiAtCQlpZHggPSBjb25zX2hlYWQgJiByLT5tYXNrOw0K PiA+ID4gPiAtCQlucl9pZHggPSBpZHggKiBzY2FsZTsNCj4gPiA+ID4gLQkJbnJfc2l6ZSA9IHIt PnNpemUgKiBzY2FsZTsNCj4gPiA+ID4gLQkJX19ydGVfcmluZ19kZXF1ZXVlX2VsZW1zXzMyKHIs IG5yX3NpemUsIG5yX2lkeCwNCj4gPiA+ID4gLQkJCQlvYmpfdGFibGUsIG5yX251bSk7DQo+ID4g PiA+IC0JfQ0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKiBCZXR3ZWVuIGxvYWQg YW5kIGxvYWQuIHRoZXJlIG1pZ2h0IGJlIGNwdSByZW9yZGVyIGluIHdlYWsgbW9kZWwNCj4gPiA+ ID4gLSAqIChwb3dlcnBjL2FybSkuDQo+ID4gPiA+IC0gKiBUaGVyZSBhcmUgMiBjaG9pY2VzIGZv ciB0aGUgdXNlcnMNCj4gPiA+ID4gLSAqIDEudXNlIHJtYigpIG1lbW9yeSBiYXJyaWVyDQo+ID4g PiA+IC0gKiAyLnVzZSBvbmUtZGlyZWN0aW9uIGxvYWRfYWNxdWlyZS9zdG9yZV9yZWxlYXNlIGJh cnJpZXINCj4gPiA+ID4gLSAqIEl0IGRlcGVuZHMgb24gcGVyZm9ybWFuY2UgdGVzdCByZXN1bHRz Lg0KPiA+ID4gPiAtICogQnkgZGVmYXVsdCwgbW92ZSBjb21tb24gZnVuY3Rpb25zIHRvIHJ0ZV9y aW5nX2dlbmVyaWMuaA0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC0jaWZkZWYgUlRFX1VTRV9DMTFf TUVNX01PREVMDQo+ID4gPiA+IC0jaW5jbHVkZSAicnRlX3JpbmdfYzExX21lbS5oIg0KPiA+ID4g PiAtI2Vsc2UNCj4gPiA+ID4gLSNpbmNsdWRlICJydGVfcmluZ19nZW5lcmljLmgiDQo+ID4gPiA+ IC0jZW5kaWYNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gKiBAaW50ZXJuYWwg RW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIHJpbmcNCj4gPiA+ID4gLSAqDQo+ID4gPiA+ IC0gKiBAcGFyYW0gcg0KPiA+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0 dXJlLg0KPiA+ID4gPiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiAtICogICBBIHBvaW50 ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiAtICogQHBhcmFtIGVzaXplDQo+ID4g PiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUg YSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFs dWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiA+IC0gKiAg IHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4g PiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gYWRkIGluIHRoZSByaW5nIGZyb20gdGhl IG9ial90YWJsZS4NCj4gPiA+ID4gLSAqIEBwYXJhbSBiZWhhdmlvcg0KPiA+ID4gPiAtICogICBS VEVfUklOR19RVUVVRV9GSVhFRDogICAgRW5xdWV1ZSBhIGZpeGVkIG51bWJlciBvZiBpdGVtcyBm cm9tIGENCj4gPiA+IHJpbmcNCj4gPiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfVkFSSUFCTEU6 IEVucXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+ID4gZnJvbSByaW5nDQo+ID4g PiA+IC0gKiBAcGFyYW0gaXNfc3ANCj4gPiA+ID4gLSAqICAgSW5kaWNhdGVzIHdoZXRoZXIgdG8g dXNlIHNpbmdsZSBwcm9kdWNlciBvciBtdWx0aS1wcm9kdWNlciBoZWFkDQo+ID4gPiB1cGRhdGUN Cj4gPiA+ID4gLSAqIEBwYXJhbSBmcmVlX3NwYWNlDQo+ID4gPiA+IC0gKiAgIHJldHVybnMgdGhl IGFtb3VudCBvZiBzcGFjZSBhZnRlciB0aGUgZW5xdWV1ZSBvcGVyYXRpb24gaGFzIGZpbmlzaGVk DQo+ID4gPiA+IC0gKiBAcmV0dXJuDQo+ID4gPiA+IC0gKiAgIEFjdHVhbCBudW1iZXIgb2Ygb2Jq ZWN0cyBlbnF1ZXVlZC4NCj4gPiA+ID4gLSAqICAgSWYgYmVoYXZpb3IgPT0gUlRFX1JJTkdfUVVF VUVfRklYRUQsIHRoaXMgd2lsbCBiZSAwIG9yIG4gb25seS4NCj4gPiA+ID4gLSAqLw0KPiA+ID4g PiAtc3RhdGljIF9fcnRlX2Fsd2F5c19pbmxpbmUgdW5zaWduZWQgaW50DQo+ID4gPiA+IC1fX3J0 ZV9yaW5nX2RvX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQgKm9i al90YWJsZSwNCj4gPiA+ID4gLQkJdW5zaWduZWQgaW50IGVzaXplLCB1bnNpZ25lZCBpbnQgbiwN Cj4gPiA+ID4gLQkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwgdW5zaWdu ZWQgaW50IGlzX3NwLA0KPiA+ID4gPiAtCQl1bnNpZ25lZCBpbnQgKmZyZWVfc3BhY2UpDQo+ID4g PiA+IC17DQo+ID4gPiA+IC0JdWludDMyX3QgcHJvZF9oZWFkLCBwcm9kX25leHQ7DQo+ID4gPiA+ IC0JdWludDMyX3QgZnJlZV9lbnRyaWVzOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JbiA9IF9fcnRl X3JpbmdfbW92ZV9wcm9kX2hlYWQociwgaXNfc3AsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiAtCQkJ JnByb2RfaGVhZCwgJnByb2RfbmV4dCwgJmZyZWVfZW50cmllcyk7DQo+ID4gPiA+IC0JaWYgKG4g PT0gMCkNCj4gPiA+ID4gLQkJZ290byBlbmQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlfX3J0ZV9y aW5nX2VucXVldWVfZWxlbXMociwgcHJvZF9oZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4g PiA+ID4gLQ0KPiA+ID4gPiAtCV9fcnRlX3JpbmdfdXBkYXRlX3RhaWwoJnItPnByb2QsIHByb2Rf aGVhZCwgcHJvZF9uZXh0LCBpc19zcCwgMSk7DQo+ID4gPiA+IC1lbmQ6DQo+ID4gPiA+IC0JaWYg KGZyZWVfc3BhY2UgIT0gTlVMTCkNCj4gPiA+ID4gLQkJKmZyZWVfc3BhY2UgPSBmcmVlX2VudHJp ZXMgLSBuOw0KPiA+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4g PiA+IC0vKioNCj4gPiA+ID4gLSAqIEBpbnRlcm5hbCBEZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBm cm9tIHRoZSByaW5nDQo+ID4gPiA+IC0gKg0KPiA+ID4gPiAtICogQHBhcmFtIHINCj4gPiA+ID4g LSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gLSAqIEBwYXJh bSBvYmpfdGFibGUNCj4gPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0 cy4NCj4gPiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiAtICogICBUaGUgc2l6ZSBvZiBy aW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcg dGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gPiAtICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZp bmVkLg0KPiA+ID4gPiAtICogQHBhcmFtIG4NCj4gPiA+ID4gLSAqICAgVGhlIG51bWJlciBvZiBv YmplY3RzIHRvIHB1bGwgZnJvbSB0aGUgcmluZy4NCj4gPiA+ID4gLSAqIEBwYXJhbSBiZWhhdmlv cg0KPiA+ID4gPiAtICogICBSVEVfUklOR19RVUVVRV9GSVhFRDogICAgRGVxdWV1ZSBhIGZpeGVk IG51bWJlciBvZiBpdGVtcyBmcm9tIGENCj4gPiA+IHJpbmcNCj4gPiA+ID4gLSAqICAgUlRFX1JJ TkdfUVVFVUVfVkFSSUFCTEU6IERlcXVldWUgYXMgbWFueSBpdGVtcyBhcyBwb3NzaWJsZQ0KPiA+ ID4gZnJvbSByaW5nDQo+ID4gPiA+IC0gKiBAcGFyYW0gaXNfc2MNCj4gPiA+ID4gLSAqICAgSW5k aWNhdGVzIHdoZXRoZXIgdG8gdXNlIHNpbmdsZSBjb25zdW1lciBvciBtdWx0aS1jb25zdW1lciBo ZWFkDQo+ID4gPiB1cGRhdGUNCj4gPiA+ID4gLSAqIEBwYXJhbSBhdmFpbGFibGUNCj4gPiA+ID4g LSAqICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMgYWZ0ZXIg dGhlIGRlcXVldWUgaGFzDQo+ID4gPiBmaW5pc2hlZA0KPiA+ID4gPiAtICogQHJldHVybg0KPiA+ ID4gPiAtICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4gPiA+ID4g LSAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJl IDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlz X2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gLV9fcnRlX3JpbmdfZG9fZGVxdWV1ZV9lbGVt KHN0cnVjdCBydGVfcmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gPiAtCQl1bnNpZ25l ZCBpbnQgZXNpemUsIHVuc2lnbmVkIGludCBuLA0KPiA+ID4gPiAtCQllbnVtIHJ0ZV9yaW5nX3F1 ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLCB1bnNpZ25lZCBpbnQgaXNfc2MsDQo+ID4gPiA+IC0JCXVu c2lnbmVkIGludCAqYXZhaWxhYmxlKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXVpbnQzMl90IGNv bnNfaGVhZCwgY29uc19uZXh0Ow0KPiA+ID4gPiAtCXVpbnQzMl90IGVudHJpZXM7DQo+ID4gPiA+ IC0NCj4gPiA+ID4gLQluID0gX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChyLCAoaW50KWlzX3Nj LCBuLCBiZWhhdmlvciwNCj4gPiA+ID4gLQkJCSZjb25zX2hlYWQsICZjb25zX25leHQsICZlbnRy aWVzKTsNCj4gPiA+ID4gLQlpZiAobiA9PSAwKQ0KPiA+ID4gPiAtCQlnb3RvIGVuZDsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBjb25zX2hlYWQsIG9i al90YWJsZSwgZXNpemUsIG4pOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JX19ydGVfcmluZ191cGRh dGVfdGFpbCgmci0+Y29ucywgY29uc19oZWFkLCBjb25zX25leHQsIGlzX3NjLCAwKTsNCj4gPiA+ ID4gLQ0KPiA+ID4gPiAtZW5kOg0KPiA+ID4gPiAtCWlmIChhdmFpbGFibGUgIT0gTlVMTCkNCj4g PiA+ID4gLQkJKmF2YWlsYWJsZSA9IGVudHJpZXMgLSBuOw0KPiA+ID4gPiAtCXJldHVybiBuOw0K PiA+ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAqIEVucXVldWUg c2V2ZXJhbCBvYmplY3RzIG9uIHRoZSByaW5nIChtdWx0aS1wcm9kdWNlcnMgc2FmZSkuDQo+ID4g PiA+ICAgKg0KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0 cy5oDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5oIGluZGV4IDM1OWIx NTc3MS4uYmRiZGFmYzlmIDEwMDY0NA0KPiA+ID4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRl X3JpbmdfaHRzLmgNCj4gPiA+ID4gKysrIGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX2h0cy5o DQo+ID4gPiA+IEBAIC0yOSw4OSArMjksNyBAQA0KPiA+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4g PiA+ICAjZW5kaWYNCj4gPiA+ID4NCj4gPiA+ID4gLSNpbmNsdWRlIDxydGVfcmluZ19odHNfYzEx X21lbS5oPg0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAqIEBpbnRlcm5hbCBF bnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0aGUgSFRTIHJpbmcuDQo+ID4gPiA+IC0gKg0KPiA+ ID4gPiAtICogQHBhcmFtIHINCj4gPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0 cnVjdHVyZS4NCj4gPiA+ID4gLSAqIEBwYXJhbSBvYmpfdGFibGUNCj4gPiA+ID4gLSAqICAgQSBw b2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0cy4NCj4gPiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0K PiA+ID4gPiAtICogICBUaGUgc2l6ZSBvZiByaW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0 IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1l IHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcgdGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gPiAt ICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZpbmVkLg0KPiA+ID4gPiAtICogQHBhcmFtIG4NCj4g PiA+ID4gLSAqICAgVGhlIG51bWJlciBvZiBvYmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9t IHRoZSBvYmpfdGFibGUuDQo+ID4gPiA+IC0gKiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gLSAq ICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAgIEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRl bXMgZnJvbSBhDQo+ID4gPiByaW5nDQo+ID4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklB QkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMgYXMgcG9zc2libGUNCj4gPiA+IGZyb20gcmluZw0K PiA+ID4gPiAtICogQHBhcmFtIGZyZWVfc3BhY2UNCj4gPiA+ID4gLSAqICAgcmV0dXJucyB0aGUg YW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBlbnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQN Cj4gPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+ID4gLSAqICAgQWN0dWFsIG51bWJlciBvZiBvYmpl Y3RzIGVucXVldWVkLg0KPiA+ID4gPiAtICogICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVV RV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiAtICovDQo+ID4gPiA+ IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gLV9fcnRl X3JpbmdfZG9faHRzX2VucXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQN Cj4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+IC0JdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4s IGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZpb3IgYmVoYXZpb3IsDQo+ID4gPiA+IC0JdWludDMy X3QgKmZyZWVfc3BhY2UpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JdWludDMyX3QgZnJlZSwgaGVh ZDsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCW4gPSAgX19ydGVfcmluZ19odHNfbW92ZV9wcm9kX2hl YWQociwgbiwgYmVoYXZpb3IsICZoZWFkLCAmZnJlZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlp ZiAobiAhPSAwKSB7DQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZW5xdWV1ZV9lbGVtcyhyLCBoZWFk LCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+ID4gLQkJX19ydGVfcmluZ19odHNfdXBkYXRl X3RhaWwoJnItPmh0c19wcm9kLCBoZWFkLCBuLCAxKTsNCj4gPiA+ID4gLQl9DQo+ID4gPiA+IC0N Cj4gPiA+ID4gLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+ID4gPiAtCQkqZnJlZV9zcGFj ZSA9IGZyZWUgLSBuOw0KPiA+ID4gPiAtCXJldHVybiBuOw0KPiA+ID4gPiAtfQ0KPiA+ID4gPiAt DQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAqIEBpbnRlcm5hbCBEZXF1ZXVlIHNldmVyYWwgb2Jq ZWN0cyBmcm9tIHRoZSBIVFMgcmluZy4NCj4gPiA+ID4gLSAqDQo+ID4gPiA+IC0gKiBAcGFyYW0g cg0KPiA+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcgc3RydWN0dXJlLg0KPiA+ID4g PiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gYSB0YWJs ZSBvZiBvYmplY3RzLg0KPiA+ID4gPiAtICogQHBhcmFtIGVzaXplDQo+ID4gPiA+IC0gKiAgIFRo ZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11c3QgYmUgYSBtdWx0aXBsZSBv ZiA0Lg0KPiA+ID4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNhbWUgdmFsdWUgdXNlZCB3aGls ZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiA+IC0gKiAgIHRoZSByZXN1bHRz IGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0gKiBAcGFyYW0gbg0KPiA+ID4gPiAtICogICBUaGUg bnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSByaW5nLg0KPiA+ID4gPiAtICogQHBh cmFtIGJlaGF2aW9yDQo+ID4gPiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX0ZJWEVEOiAgICBEZXF1 ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+ID4gcmluZw0KPiA+ID4gPiAt ICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBhcyBtYW55IGl0ZW1zIGFzIHBv c3NpYmxlDQo+ID4gPiBmcm9tIHJpbmcNCj4gPiA+ID4gLSAqIEBwYXJhbSBhdmFpbGFibGUNCj4g PiA+ID4gLSAqICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFpbmluZyByaW5nIGVudHJpZXMg YWZ0ZXIgdGhlIGRlcXVldWUgaGFzDQo+ID4gPiBmaW5pc2hlZA0KPiA+ID4gPiAtICogQHJldHVy bg0KPiA+ID4gPiAtICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2JqZWN0cyBkZXF1ZXVlZC4NCj4g PiA+ID4gLSAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3 aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0aWMgX19ydGVf YWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gLV9fcnRlX3JpbmdfZG9faHRzX2Rl cXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9ial90YWJsZSwNCj4gPiA+ID4g LQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlv ciBiZWhhdmlvciwNCj4gPiA+ID4gLQl1aW50MzJfdCAqYXZhaWxhYmxlKQ0KPiA+ID4gPiAtew0K PiA+ID4gPiAtCXVpbnQzMl90IGVudHJpZXMsIGhlYWQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlu ID0gX19ydGVfcmluZ19odHNfbW92ZV9jb25zX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLA0K PiA+ID4gJmVudHJpZXMpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKG4gIT0gMCkgew0KPiA+ ID4gPiAtCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgaGVhZCwgb2JqX3RhYmxlLCBlc2l6 ZSwgbik7DQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfaHRzX3VwZGF0ZV90YWlsKCZyLT5odHNfY29u cywgaGVhZCwgbiwgMCk7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0JaWYgKGF2 YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4gPiAtCQkqYXZhaWxhYmxlID0gZW50cmllcyAtIG47DQo+ ID4gPiA+IC0JcmV0dXJuIG47DQo+ID4gPiA+IC19DQo+ID4gPiA+ICsjaW5jbHVkZSA8cmluZ19o dHNfZWxlbV9wdnQuaD4NCj4gPiA+ID4NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICogRW5xdWV1 ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIEhUUyByaW5nIChtdWx0aS1wcm9kdWNlcnMgc2FmZSku DQo+ID4gPiA+IGRpZmYgLS1naXQgYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVlay5oDQo+ ID4gPiA+IGIvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWsuaCBpbmRleCA0NWY3MDdkYzcu LjBkZDQwMmJlNCAxMDA2NDQNCj4gPiA+ID4gLS0tIGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n X3BlZWsuaA0KPiA+ID4gPiArKysgYi9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcGVlay5oDQo+ ID4gPiA+IEBAIC00OCwzOSArNDgsNyBAQA0KPiA+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ ICAjZW5kaWYNCj4gPiA+ID4NCj4gPiA+ID4gLSNpbmNsdWRlIDxydGVfcmluZ19wZWVrX2MxMV9t ZW0uaD4NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gKiBAaW50ZXJuYWwgVGhp cyBmdW5jdGlvbiBtb3ZlcyBwcm9kIGhlYWQgdmFsdWUuDQo+ID4gPiA+IC0gKi8NCj4gPiA+ID4g LXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2lnbmVkIGludA0KPiA+ID4gPiAtX19ydGVf cmluZ19kb19lbnF1ZXVlX3N0YXJ0KHN0cnVjdCBydGVfcmluZyAqciwgdWludDMyX3QgbiwNCj4g PiA+ID4gLQkJZW51bSBydGVfcmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwgdWludDMyX3QN Cj4gPiA+ICpmcmVlX3NwYWNlKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXVpbnQzMl90IGZyZWUs IGhlYWQsIG5leHQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlzd2l0Y2ggKHItPnByb2Quc3luY190 eXBlKSB7DQo+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+ID4gPiAtCQluID0g X19ydGVfcmluZ19tb3ZlX3Byb2RfaGVhZChyLCBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ID4g PiAtCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmZyZWUpOw0KPiA+ID4gPiAtCQlicmVhazsN Cj4gPiA+ID4gLQljYXNlIFJURV9SSU5HX1NZTkNfTVRfSFRTOg0KPiA+ID4gPiAtCQluID0gIF9f cnRlX3JpbmdfaHRzX21vdmVfcHJvZF9oZWFkKHIsIG4sIGJlaGF2aW9yLA0KPiA+ID4gPiAtCQkJ JmhlYWQsICZmcmVlKTsNCj4gPiA+ID4gLQkJYnJlYWs7DQo+ID4gPiA+IC0JY2FzZSBSVEVfUklO R19TWU5DX01UOg0KPiA+ID4gPiAtCWNhc2UgUlRFX1JJTkdfU1lOQ19NVF9SVFM6DQo+ID4gPiA+ IC0JZGVmYXVsdDoNCj4gPiA+ID4gLQkJLyogdW5zdXBwb3J0ZWQgbW9kZSwgc2hvdWxkbid0IGJl IGhlcmUgKi8NCj4gPiA+ID4gLQkJUlRFX0FTU0VSVCgwKTsNCj4gPiA+ID4gLQkJbiA9IDA7DQo+ ID4gPiA+IC0JCWZyZWUgPSAwOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWlm IChmcmVlX3NwYWNlICE9IE5VTEwpDQo+ID4gPiA+IC0JCSpmcmVlX3NwYWNlID0gZnJlZSAtIG47 DQo+ID4gPiA+IC0JcmV0dXJuIG47DQo+ID4gPiA+IC19DQo+ID4gPiA+ICsjaW5jbHVkZSA8cmlu Z19wZWVrX2VsZW1fcHZ0Lmg+DQo+ID4gPiA+DQo+ID4gPiA+ICAvKioNCj4gPiA+ID4gICAqIFN0 YXJ0IHRvIGVucXVldWUgc2V2ZXJhbCBvYmplY3RzIG9uIHRoZSByaW5nLg0KPiA+ID4gPiBAQCAt MjQ4LDQzICsyMTYsNiBAQCBydGVfcmluZ19lbnF1ZXVlX2ZpbmlzaChzdHJ1Y3QgcnRlX3Jpbmcg KnIsIHZvaWQgKg0KPiA+ID4gY29uc3QgKm9ial90YWJsZSwNCj4gPiA+ID4gIAlydGVfcmluZ19l bnF1ZXVlX2VsZW1fZmluaXNoKHIsIG9ial90YWJsZSwgc2l6ZW9mKHVpbnRwdHJfdCksIG4pOyAg fQ0KPiA+ID4gPg0KPiA+ID4gPiAtLyoqDQo+ID4gPiA+IC0gKiBAaW50ZXJuYWwgVGhpcyBmdW5j dGlvbiBtb3ZlcyBjb25zIGhlYWQgdmFsdWUgYW5kIGNvcGllcyB1cCB0byAqbioNCj4gPiA+ID4g LSAqIG9iamVjdHMgZnJvbSB0aGUgcmluZyB0byB0aGUgdXNlciBwcm92aWRlZCBvYmpfdGFibGUu DQo+ID4gPiA+IC0gKi8NCj4gPiA+ID4gLXN0YXRpYyBfX3J0ZV9hbHdheXNfaW5saW5lIHVuc2ln bmVkIGludA0KPiA+ID4gPiAtX19ydGVfcmluZ19kb19kZXF1ZXVlX3N0YXJ0KHN0cnVjdCBydGVf cmluZyAqciwgdm9pZCAqb2JqX3RhYmxlLA0KPiA+ID4gPiAtCXVpbnQzMl90IGVzaXplLCB1aW50 MzJfdCBuLCBlbnVtIHJ0ZV9yaW5nX3F1ZXVlX2JlaGF2aW9yIGJlaGF2aW9yLA0KPiA+ID4gPiAt CXVpbnQzMl90ICphdmFpbGFibGUpDQo+ID4gPiA+IC17DQo+ID4gPiA+IC0JdWludDMyX3QgYXZh aWwsIGhlYWQsIG5leHQ7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlzd2l0Y2ggKHItPmNvbnMuc3lu Y190eXBlKSB7DQo+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX1NUOg0KPiA+ID4gPiAtCQlu ID0gX19ydGVfcmluZ19tb3ZlX2NvbnNfaGVhZChyLCBSVEVfUklOR19TWU5DX1NULCBuLA0KPiA+ ID4gPiAtCQkJYmVoYXZpb3IsICZoZWFkLCAmbmV4dCwgJmF2YWlsKTsNCj4gPiA+ID4gLQkJYnJl YWs7DQo+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX01UX0hUUzoNCj4gPiA+ID4gLQkJbiA9 ICBfX3J0ZV9yaW5nX2h0c19tb3ZlX2NvbnNfaGVhZChyLCBuLCBiZWhhdmlvciwNCj4gPiA+ID4g LQkJCSZoZWFkLCAmYXZhaWwpOw0KPiA+ID4gPiAtCQlicmVhazsNCj4gPiA+ID4gLQljYXNlIFJU RV9SSU5HX1NZTkNfTVQ6DQo+ID4gPiA+IC0JY2FzZSBSVEVfUklOR19TWU5DX01UX1JUUzoNCj4g PiA+ID4gLQlkZWZhdWx0Og0KPiA+ID4gPiAtCQkvKiB1bnN1cHBvcnRlZCBtb2RlLCBzaG91bGRu J3QgYmUgaGVyZSAqLw0KPiA+ID4gPiAtCQlSVEVfQVNTRVJUKDApOw0KPiA+ID4gPiAtCQluID0g MDsNCj4gPiA+ID4gLQkJYXZhaWwgPSAwOw0KPiA+ID4gPiAtCX0NCj4gPiA+ID4gLQ0KPiA+ID4g PiAtCWlmIChuICE9IDApDQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfZGVxdWV1ZV9lbGVtcyhyLCBo ZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCWlmIChhdmFp bGFibGUgIT0gTlVMTCkNCj4gPiA+ID4gLQkJKmF2YWlsYWJsZSA9IGF2YWlsIC0gbjsNCj4gPiA+ ID4gLQlyZXR1cm4gbjsNCj4gPiA+ID4gLX0NCj4gPiA+ID4gLQ0KPiA+ID4gPiAgLyoqDQo+ID4g PiA+ICAgKiBTdGFydCB0byBkZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSByaW5nLg0K PiA+ID4gPiAgICogTm90ZSB0aGF0IHVzZXIgaGFzIHRvIGNhbGwgYXBwcm9wcmlhdGUgZGVxdWV1 ZV9maW5pc2goKSBkaWZmIC0tZ2l0DQo+ID4gPiA+IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5n X3BlZWtfemMuaA0KPiA+ID4gPiBiL2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrX3pjLmgN Cj4gPiA+ID4gaW5kZXggY2IzYmJkMDY3Li5iYzgyNTJhMTggMTAwNjQ0DQo+ID4gPiA+IC0tLSBh L2xpYi9saWJydGVfcmluZy9ydGVfcmluZ19wZWVrX3pjLmgNCj4gPiA+ID4gKysrIGIvbGliL2xp YnJ0ZV9yaW5nL3J0ZV9yaW5nX3BlZWtfemMuaA0KPiA+ID4gPiBAQCAtNzIsNyArNzIsNyBAQA0K PiA+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ICAjZW5kaWYNCj4gPiA+ID4NCj4gPiA+ID4g LSNpbmNsdWRlIDxydGVfcmluZ19wZWVrX2MxMV9tZW0uaD4NCj4gPiA+ID4gKyNpbmNsdWRlIDxy aW5nX3BlZWtfZWxlbV9wdnQuaD4NCj4gPiA+ID4NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICog UmluZyB6ZXJvLWNvcHkgaW5mb3JtYXRpb24gc3RydWN0dXJlLg0KPiA+ID4gPiBkaWZmIC0tZ2l0 IGEvbGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oDQo+ID4gPiA+IGIvbGliL2xpYnJ0ZV9y aW5nL3J0ZV9yaW5nX3J0cy5oIGluZGV4IGFmYzEyYWJlMi4uODNkOTkwM2UyIDEwMDY0NA0KPiA+ ID4gPiAtLS0gYS9saWIvbGlicnRlX3JpbmcvcnRlX3JpbmdfcnRzLmgNCj4gPiA+ID4gKysrIGIv bGliL2xpYnJ0ZV9yaW5nL3J0ZV9yaW5nX3J0cy5oDQo+ID4gPiA+IEBAIC01Niw4OSArNTYsNyBA QA0KPiA+ID4gPiAgZXh0ZXJuICJDIiB7DQo+ID4gPiA+ICAjZW5kaWYNCj4gPiA+ID4NCj4gPiA+ ID4gLSNpbmNsdWRlIDxydGVfcmluZ19ydHNfYzExX21lbS5oPg0KPiA+ID4gPiAtDQo+ID4gPiA+ IC0vKioNCj4gPiA+ID4gLSAqIEBpbnRlcm5hbCBFbnF1ZXVlIHNldmVyYWwgb2JqZWN0cyBvbiB0 aGUgUlRTIHJpbmcuDQo+ID4gPiA+IC0gKg0KPiA+ID4gPiAtICogQHBhcmFtIHINCj4gPiA+ID4g LSAqICAgQSBwb2ludGVyIHRvIHRoZSByaW5nIHN0cnVjdHVyZS4NCj4gPiA+ID4gLSAqIEBwYXJh bSBvYmpfdGFibGUNCj4gPiA+ID4gLSAqICAgQSBwb2ludGVyIHRvIGEgdGFibGUgb2Ygb2JqZWN0 cy4NCj4gPiA+ID4gLSAqIEBwYXJhbSBlc2l6ZQ0KPiA+ID4gPiAtICogICBUaGUgc2l6ZSBvZiBy aW5nIGVsZW1lbnQsIGluIGJ5dGVzLiBJdCBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNC4NCj4gPiA+ ID4gLSAqICAgVGhpcyBtdXN0IGJlIHRoZSBzYW1lIHZhbHVlIHVzZWQgd2hpbGUgY3JlYXRpbmcg dGhlIHJpbmcuIE90aGVyd2lzZQ0KPiA+ID4gPiAtICogICB0aGUgcmVzdWx0cyBhcmUgdW5kZWZp bmVkLg0KPiA+ID4gPiAtICogQHBhcmFtIG4NCj4gPiA+ID4gLSAqICAgVGhlIG51bWJlciBvZiBv YmplY3RzIHRvIGFkZCBpbiB0aGUgcmluZyBmcm9tIHRoZSBvYmpfdGFibGUuDQo+ID4gPiA+IC0g KiBAcGFyYW0gYmVoYXZpb3INCj4gPiA+ID4gLSAqICAgUlRFX1JJTkdfUVVFVUVfRklYRUQ6ICAg IEVucXVldWUgYSBmaXhlZCBudW1iZXIgb2YgaXRlbXMgZnJvbSBhDQo+ID4gPiByaW5nDQo+ID4g PiA+IC0gKiAgIFJURV9SSU5HX1FVRVVFX1ZBUklBQkxFOiBFbnF1ZXVlIGFzIG1hbnkgaXRlbXMg YXMgcG9zc2libGUNCj4gPiA+IGZyb20gcmluZw0KPiA+ID4gPiAtICogQHBhcmFtIGZyZWVfc3Bh Y2UNCj4gPiA+ID4gLSAqICAgcmV0dXJucyB0aGUgYW1vdW50IG9mIHNwYWNlIGFmdGVyIHRoZSBl bnF1ZXVlIG9wZXJhdGlvbiBoYXMgZmluaXNoZWQNCj4gPiA+ID4gLSAqIEByZXR1cm4NCj4gPiA+ ID4gLSAqICAgQWN0dWFsIG51bWJlciBvZiBvYmplY3RzIGVucXVldWVkLg0KPiA+ID4gPiAtICog ICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19RVUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3Ig biBvbmx5Lg0KPiA+ID4gPiAtICovDQo+ID4gPiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGlu ZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gLV9fcnRlX3JpbmdfZG9fcnRzX2VucXVldWVfZWxlbShz dHJ1Y3QgcnRlX3JpbmcgKnIsIGNvbnN0IHZvaWQNCj4gPiA+ICpvYmpfdGFibGUsDQo+ID4gPiA+ IC0JdWludDMyX3QgZXNpemUsIHVpbnQzMl90IG4sIGVudW0gcnRlX3JpbmdfcXVldWVfYmVoYXZp b3IgYmVoYXZpb3IsDQo+ID4gPiA+IC0JdWludDMyX3QgKmZyZWVfc3BhY2UpDQo+ID4gPiA+IC17 DQo+ID4gPiA+IC0JdWludDMyX3QgZnJlZSwgaGVhZDsNCj4gPiA+ID4gLQ0KPiA+ID4gPiAtCW4g PSAgX19ydGVfcmluZ19ydHNfbW92ZV9wcm9kX2hlYWQociwgbiwgYmVoYXZpb3IsICZoZWFkLCAm ZnJlZSk7DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAobiAhPSAwKSB7DQo+ID4gPiA+IC0JCV9f cnRlX3JpbmdfZW5xdWV1ZV9lbGVtcyhyLCBoZWFkLCBvYmpfdGFibGUsIGVzaXplLCBuKTsNCj4g PiA+ID4gLQkJX19ydGVfcmluZ19ydHNfdXBkYXRlX3RhaWwoJnItPnJ0c19wcm9kKTsNCj4gPiA+ ID4gLQl9DQo+ID4gPiA+IC0NCj4gPiA+ID4gLQlpZiAoZnJlZV9zcGFjZSAhPSBOVUxMKQ0KPiA+ ID4gPiAtCQkqZnJlZV9zcGFjZSA9IGZyZWUgLSBuOw0KPiA+ID4gPiAtCXJldHVybiBuOw0KPiA+ ID4gPiAtfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0vKioNCj4gPiA+ID4gLSAqIEBpbnRlcm5hbCBE ZXF1ZXVlIHNldmVyYWwgb2JqZWN0cyBmcm9tIHRoZSBSVFMgcmluZy4NCj4gPiA+ID4gLSAqDQo+ ID4gPiA+IC0gKiBAcGFyYW0gcg0KPiA+ID4gPiAtICogICBBIHBvaW50ZXIgdG8gdGhlIHJpbmcg c3RydWN0dXJlLg0KPiA+ID4gPiAtICogQHBhcmFtIG9ial90YWJsZQ0KPiA+ID4gPiAtICogICBB IHBvaW50ZXIgdG8gYSB0YWJsZSBvZiBvYmplY3RzLg0KPiA+ID4gPiAtICogQHBhcmFtIGVzaXpl DQo+ID4gPiA+IC0gKiAgIFRoZSBzaXplIG9mIHJpbmcgZWxlbWVudCwgaW4gYnl0ZXMuIEl0IG11 c3QgYmUgYSBtdWx0aXBsZSBvZiA0Lg0KPiA+ID4gPiAtICogICBUaGlzIG11c3QgYmUgdGhlIHNh bWUgdmFsdWUgdXNlZCB3aGlsZSBjcmVhdGluZyB0aGUgcmluZy4gT3RoZXJ3aXNlDQo+ID4gPiA+ IC0gKiAgIHRoZSByZXN1bHRzIGFyZSB1bmRlZmluZWQuDQo+ID4gPiA+IC0gKiBAcGFyYW0gbg0K PiA+ID4gPiAtICogICBUaGUgbnVtYmVyIG9mIG9iamVjdHMgdG8gcHVsbCBmcm9tIHRoZSByaW5n Lg0KPiA+ID4gPiAtICogQHBhcmFtIGJlaGF2aW9yDQo+ID4gPiA+IC0gKiAgIFJURV9SSU5HX1FV RVVFX0ZJWEVEOiAgICBEZXF1ZXVlIGEgZml4ZWQgbnVtYmVyIG9mIGl0ZW1zIGZyb20gYQ0KPiA+ ID4gcmluZw0KPiA+ID4gPiAtICogICBSVEVfUklOR19RVUVVRV9WQVJJQUJMRTogRGVxdWV1ZSBh cyBtYW55IGl0ZW1zIGFzIHBvc3NpYmxlDQo+ID4gPiBmcm9tIHJpbmcNCj4gPiA+ID4gLSAqIEBw YXJhbSBhdmFpbGFibGUNCj4gPiA+ID4gLSAqICAgcmV0dXJucyB0aGUgbnVtYmVyIG9mIHJlbWFp bmluZyByaW5nIGVudHJpZXMgYWZ0ZXIgdGhlIGRlcXVldWUgaGFzDQo+ID4gPiBmaW5pc2hlZA0K PiA+ID4gPiAtICogQHJldHVybg0KPiA+ID4gPiAtICogICAtIEFjdHVhbCBudW1iZXIgb2Ygb2Jq ZWN0cyBkZXF1ZXVlZC4NCj4gPiA+ID4gLSAqICAgICBJZiBiZWhhdmlvciA9PSBSVEVfUklOR19R VUVVRV9GSVhFRCwgdGhpcyB3aWxsIGJlIDAgb3IgbiBvbmx5Lg0KPiA+ID4gPiAtICovDQo+ID4g PiA+IC1zdGF0aWMgX19ydGVfYWx3YXlzX2lubGluZSB1bnNpZ25lZCBpbnQNCj4gPiA+ID4gLV9f cnRlX3JpbmdfZG9fcnRzX2RlcXVldWVfZWxlbShzdHJ1Y3QgcnRlX3JpbmcgKnIsIHZvaWQgKm9i al90YWJsZSwNCj4gPiA+ID4gLQl1aW50MzJfdCBlc2l6ZSwgdWludDMyX3QgbiwgZW51bSBydGVf cmluZ19xdWV1ZV9iZWhhdmlvciBiZWhhdmlvciwNCj4gPiA+ID4gLQl1aW50MzJfdCAqYXZhaWxh YmxlKQ0KPiA+ID4gPiAtew0KPiA+ID4gPiAtCXVpbnQzMl90IGVudHJpZXMsIGhlYWQ7DQo+ID4g PiA+IC0NCj4gPiA+ID4gLQluID0gX19ydGVfcmluZ19ydHNfbW92ZV9jb25zX2hlYWQociwgbiwg YmVoYXZpb3IsICZoZWFkLA0KPiA+ID4gJmVudHJpZXMpOw0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J aWYgKG4gIT0gMCkgew0KPiA+ID4gPiAtCQlfX3J0ZV9yaW5nX2RlcXVldWVfZWxlbXMociwgaGVh ZCwgb2JqX3RhYmxlLCBlc2l6ZSwgbik7DQo+ID4gPiA+IC0JCV9fcnRlX3JpbmdfcnRzX3VwZGF0 ZV90YWlsKCZyLT5ydHNfY29ucyk7DQo+ID4gPiA+IC0JfQ0KPiA+ID4gPiAtDQo+ID4gPiA+IC0J aWYgKGF2YWlsYWJsZSAhPSBOVUxMKQ0KPiA+ID4gPiAtCQkqYXZhaWxhYmxlID0gZW50cmllcyAt IG47DQo+ID4gPiA+IC0JcmV0dXJuIG47DQo+ID4gPiA+IC19DQo+ID4gPiA+ICsjaW5jbHVkZSA8 cmluZ19ydHNfZWxlbV9wdnQuaD4NCj4gPiA+ID4NCj4gPiA+ID4gIC8qKg0KPiA+ID4gPiAgICog RW5xdWV1ZSBzZXZlcmFsIG9iamVjdHMgb24gdGhlIFJUUyByaW5nIChtdWx0aS1wcm9kdWNlcnMg c2FmZSkuDQo+ID4gPiA+IC0tDQo+ID4gPiA+IDIuMTcuMQ0KDQo=