From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from ffbox0-bg.mplayerhq.hu (ffbox0-bg.ffmpeg.org [79.124.17.100]) by master.gitmailbox.com (Postfix) with ESMTP id 4E34648408 for ; Wed, 3 Jan 2024 03:04:34 +0000 (UTC) Received: from [127.0.1.1] (localhost [127.0.0.1]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTP id 3433168CA64; Wed, 3 Jan 2024 05:04:33 +0200 (EET) Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.8]) by ffbox0-bg.mplayerhq.hu (Postfix) with ESMTPS id B6A6668AD09 for ; Wed, 3 Jan 2024 05:04:25 +0200 (EET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1704251071; x=1735787071; h=from:to:cc:subject:date:message-id:references: in-reply-to:content-id:content-transfer-encoding: mime-version; bh=YWTRsBnK1H0CEwIi+g42VjtAyXViFJQ3UNLKhSr17w8=; b=eqdoydCvMEolANtm9RS3RBAdHw2UTWHpIbZUNzG7ND4PMlkQ+k1PUx3a FmQ6uLIHhtGD+i3wmSljuKAAcAsClRxf9XIlb163RHI/EguvXTi8wpSG1 eyJzYAGqDTRi0mFrXQ0KuLvMIdpxq97bpsxhpVW1aRYe5/DhDmfW19D2m F1MX9kBMEqMONvoV5AbXE+0cx43zZGx/UYjclQrafWQilo78yPHifRHVE nvmFTY/lZBNZhEf7N0p1XgmJEtPFlvXfPeRcQ1T/y/4y8o0NJh/u4LMZF X/bylICxc2crsGAtIH80bXE+Y/ja8zw6yDVMN7Euj0zofMWTIQkF9Myhi A==; X-IronPort-AV: E=McAfee;i="6600,9927,10941"; a="10578119" X-IronPort-AV: E=Sophos;i="6.04,326,1695711600"; d="scan'208";a="10578119" Received: from fmsmga001.fm.intel.com ([10.253.24.23]) by fmvoesa102.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 02 Jan 2024 19:04:12 -0800 X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10941"; a="923402583" X-IronPort-AV: E=Sophos;i="6.04,326,1695711600"; d="scan'208";a="923402583" Received: from fmsmsx601.amr.corp.intel.com ([10.18.126.81]) by fmsmga001.fm.intel.com with ESMTP/TLS/AES256-GCM-SHA384; 02 Jan 2024 19:04:11 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx601.amr.corp.intel.com (10.18.126.81) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 2 Jan 2024 19:04:11 -0800 Received: from fmsmsx612.amr.corp.intel.com (10.18.126.92) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35; Tue, 2 Jan 2024 19:04:10 -0800 Received: from fmsedg601.ED.cps.intel.com (10.1.192.135) by fmsmsx612.amr.corp.intel.com (10.18.126.92) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2507.35 via Frontend Transport; Tue, 2 Jan 2024 19:04:10 -0800 Received: from NAM11-BN8-obe.outbound.protection.outlook.com (104.47.58.168) by edgegateway.intel.com (192.55.55.70) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.1.2507.35; Tue, 2 Jan 2024 19:04:10 -0800 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=Vj9uqCkKqjgz087O1e1AdXmjHgA3zb9bJP9mmxGCC2b8OCgXo2nOjy86UlYaQ1cDVY0lWh7lDehQCkcGmoynBHYmXnq4Hf1f33kNeSegYHVp/3zY5TGojZe6rSzRYol63zFvc+/20zUoSjIma9Eq/VmO4+J5aRdnNWJuS8FUIe6eOIZDRFGQLyWpE2er9iifs9ZUVsLHabztxDPWfyN8RUsen5kRzOnt7cJGmsVB5gSGMoB3X2AwmDz1qXh1HYpxXwJc2vsDDf7NrNKHoHgAfjSCuzUatWx2w2MRVmX0qoRl2NTyhwbt+jJK8vEMe3RZorM+RnCgdOO+sg/ahPN3CA== 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-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=YWTRsBnK1H0CEwIi+g42VjtAyXViFJQ3UNLKhSr17w8=; b=njYJbTq9jQr8QXHQjdkkrIUes1vSro/R0eJOvKm+KKIJnfQQiDez78ngCIiS+rbUTK/5lucWkkE4szmpuEvGFS0ugcl2HcGGPmmooYrKQaoJm1vm35fDhjjmr6+ES0nVQtEM4CRAnEUSTtTJnoC82VUg3FQWJqFkYPGStGt9uQ44rxsGcXPdIiWlzIFQrwUomvioodb+phJuNkG+HmevmGAh7MLWNjmvqTALfqH8U7s3h3LnRjn6WapmqbjcgEtRN816ljMjjATdQZNd1DU5pXsmVjE/f3A06J0XqypWgZsu7zok6+VkyOHPZmBnsB+QpxZJ0cVpAQMdP/Jxs77/PA== 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 Received: from DM3PR11MB8757.namprd11.prod.outlook.com (2603:10b6:8:1af::7) by DM6PR11MB4690.namprd11.prod.outlook.com (2603:10b6:5:2ae::17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.7135.25; Wed, 3 Jan 2024 03:04:07 +0000 Received: from DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::b15:a9a4:2dd1:20b3]) by DM3PR11MB8757.namprd11.prod.outlook.com ([fe80::b15:a9a4:2dd1:20b3%6]) with mapi id 15.20.7135.023; Wed, 3 Jan 2024 03:04:07 +0000 From: "Xiang, Haihao" To: "ffmpeg-devel@ffmpeg.org" Thread-Topic: [FFmpeg-devel] [PATCH v2 03/15] avfilter: add negotiation API for color space/range Thread-Index: AQHaLcanVvY5nqRkWUCLYMkyvNcZt7DHh3iA Date: Wed, 3 Jan 2024 03:04:06 +0000 Message-ID: <0d5bdabf176815bc743c132dd3221b36c69cabc8.camel@intel.com> References: <20231213131536.10242-1-ffmpeg@haasn.xyz> <20231213131536.10242-4-ffmpeg@haasn.xyz> In-Reply-To: <20231213131536.10242-4-ffmpeg@haasn.xyz> Accept-Language: en-AS, zh-CN, en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Evolution 3.44.4-0ubuntu2 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=intel.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: DM3PR11MB8757:EE_|DM6PR11MB4690:EE_ x-ms-office365-filtering-correlation-id: 64d5570e-3a39-4dc4-c36c-08dc0c08a658 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: pB7BX1JBVINA+8JlqDY5vhWolVGvyNL3PL3fuEgA8AVThiOL4qv4re9e9jjRgMqOuwiIB+5xTNiydMcJeHry1IG3SMGeV6nnby6SKhfLSnb8BXmqh9Kurx4+aq3vumKX0qGzVYrnVWymM4b4rqNNV19uQaRtlv+Y1V9OUpm07Ke9KTaB4zhIf/WrEJs19vT3vTdxBcOyPtadZ9Jzviun6o/37mek6H8nv4NHqGwFXDLIEUFFbxP7w60wphg71BQ4fRnndcGvWTjPe28Cla7gcXfE60vAVGSVfQYHduhqnt4VWVdj7HA08tqOlRC2cvesLQqmspeae48hDVZH5FWyfgtzJdyPHR90KxuzVYjH396BWLByQD3I2SFhpsXGn8vQTv3j2Uh2twp+Nc6xOpbz1mccJj0C5Lzh3E3AMUgTMrMKb2T/70zTqZy9Ysu/Cogy8zdKYKQ9Hjpql+/u/tQLE0QObr16B3JdU68H67b6kytsVcXqeMGkFYZ4V4OPhTpnYeG7maAaSDqzRzmTp38pfA/b12uCzUuCT1Ag4slEXtmBJR5A0bMCZI3v3Pu+smaLSNuArTBTwr43zJiUqOCNQx1IhopTmQ3L75FvN77Km4WBQRE96P0jDUDAVIQkrQf55mjmDW5H7ZRXqEkPraEkPBf1SDDWZKZcMBuy+UIkVnc= x-forefront-antispam-report: CIP:255.255.255.255; CTRY:; LANG:en; SCL:1; SRV:; IPV:NLI; SFV:NSPM; H:DM3PR11MB8757.namprd11.prod.outlook.com; PTR:; CAT:NONE; SFS:(13230031)(396003)(136003)(39860400002)(366004)(376002)(346002)(230273577357003)(230922051799003)(230173577357003)(1800799012)(186009)(451199024)(64100799003)(2906002)(30864003)(4001150100001)(8676002)(8936002)(4326008)(5660300002)(6916009)(36756003)(66446008)(66556008)(316002)(64756008)(66476007)(86362001)(478600001)(6486002)(6506007)(41300700001)(6512007)(38070700009)(71200400001)(82960400001)(26005)(2616005)(83380400001)(38100700002)(91956017)(66946007)(76116006)(122000001)(559001)(579004); DIR:OUT; SFP:1102; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?bmpVWDFvWlhIdmpzMWltb2dHTDk1Vi8ydVBsZGdjamt5bk9SS3BxNEJtbkor?= =?utf-8?B?V0JtNm5HVmhaUU50bXFGZU1KV0lhdHpnWFMreEZvMUE4N1Nmak4zMUxnVUxY?= =?utf-8?B?MW8rL3FsK2FXWC9SenBvWVhmYXRLNytrU2VJYjFTa2JsUXJJeGN1VHpNbnc0?= =?utf-8?B?RWl3YzZKVnNkR2tLTUZIRTJ1ZUxuaDVvc1FRSHdpbmQ3c0FpNkhZQU4rdEJK?= =?utf-8?B?clozeHZCOU5PS2NFV0VjL09oeXZHNFBnb3lISUEwd2Y3UTBoY2Q5K0o1K0Jn?= =?utf-8?B?UWtOc3FRWUdlaXhjM1hONXJtN2NjcHNnaXEvTmNWVk1xTWRXR3pEbkp2TGIw?= =?utf-8?B?Q0lyamc1Y3VxQXFjOVhCY0lKZG42anpHZnVtMVRsWXdIc043aklKeDZoKzlX?= =?utf-8?B?NHpKMmtZUStZUkFPdkkrZFVRRWRPUDB0eVFlbUM1b3BZTDBUT1FCNUVqY3Uz?= =?utf-8?B?STI3WTNibmRYOHJtZVNkNVBESjJ5UHVaK1N1ZlNRSjMzMm1XTzRCODhYa0lP?= =?utf-8?B?WkNnVWlVYzhCMWFqSldGWDFnRUVyNVA5dUNBV2xLa2JTK3I4bFVZYXB1YlQ4?= =?utf-8?B?a3JJNWw5ZzFuQW1BRHNDaGQ0NjhMTFIwblUrM0pEQzFyQ0RWaEtnU3pVWXZZ?= =?utf-8?B?WXdpRjVNWUw0SFgwcEt1REJtdWZOS2dPVFFwNm1pVDFDQnh6WGs0aXh4U1ZE?= =?utf-8?B?Qm5WRytyT3hBZVlnWitoZHRZNXFIcnVNVjdlQ05SS012cnBNcGNDb0dMNkZ1?= =?utf-8?B?ZzNUM2NjY1dIK25KUGxPeTlkb2pYeE1oSmlaSTBVRTdkR3dqdEtUMjY3QjMz?= =?utf-8?B?b0pBcTkvc1pOM1ZRdmxqc05WcGUySnRPQXhGSDRjQUJ1cXdkMlgyT2NJVisv?= =?utf-8?B?SjlUSnBoSnRhREVXTG04cHdGb2ZjNUpwdDFQdHdEc2hRR2xGME0yYURIeElI?= =?utf-8?B?Qkt5VFNmbGRBeXk4UkhwRWVnVjBrOThHMGRnU0U0T1dyVElpTUpjUStaRWVV?= =?utf-8?B?Wk9pcGYxM2NkQmZzVUZ1Z2dlUjg0SkRnVGUrcVRKNTUwNTZaYTA1bzVjc3M2?= =?utf-8?B?eDdJNVQ4R0JvbkZUYnd4MXRJcG1hZEduREtXOXU5bGpBWFpRZTM0dXVubHRz?= =?utf-8?B?cXA1WGJyTC9HWjBZNjRRaGNQVEZ3Q0lKQnFTWWVIdGVwK1M2OG5XcGJDRTRV?= =?utf-8?B?THlaQUhnbFA5Z1ZaODRjdWQ1aU1oOEVDNmErQkdZN1I2UXpRVDE5ZXJYbXpQ?= =?utf-8?B?dlB0VGV6OVRBMlAvdmlaV2xNUGRBTUtzRWlrajcyTEtjcGtUWm9FbThuV3Nz?= =?utf-8?B?Vm5vNVRXOXlHSkJtVFUzbU9lSUw0YmVHdzAvOUIxOWtWNXl3cEV6TnRQM2Rx?= =?utf-8?B?VzB5clVZQkVUdjk3NVJrdUJiTXdZeEc1dUFPdjUxV3puTEk2ZFZaOWkwUnky?= =?utf-8?B?TFpWSW5ySXQwUzJ5T2FnbjVDczhSaDMvVC9FMUY0VFZPY0xUbm40UEs3dVBO?= =?utf-8?B?andBaEw1bnlCS3k3WmYzWDQ0VHREbGliaGlrY1E3RktyQ3V1MVFRVnI2Mjlk?= =?utf-8?B?ZCs4Y0IzNXZ3RXFRRFVXU24zRnA1Y29pWXQxbEZrSTlmNUU4OERmcjlmcVIr?= =?utf-8?B?US83UzdpZmNDQ3d0dk0vSS9XVDhQUlM0clNCSG1YVmJMb04rNE04Z2txL1Jv?= =?utf-8?B?UHFlUTRXdXNHVmd2MGprei9xTEZkdGdicVBKM2lHc3NsVHNoM2w3djFPd0ww?= =?utf-8?B?THFoSkZIMW9ITXZURHBNOXBQZ3dyblBwOFRNK3VOZkF0cmdGU2dLSGJFaDlG?= =?utf-8?B?azNFL0k4S00xbXdwV3NPd0szalI3eGJKeHlXMk0vQ0IyOVVUTGtGNStvRVhM?= =?utf-8?B?TVV3WFZpWThWRG9VZVFMcnAxaGZ4SHVrRnNzSjFjQmV0SUNjUlZrbysya09Y?= =?utf-8?B?ck1XbjNjVHR4NmNlVHhWcDE1dCtodWtERyt1eU9VMjdnSWNLcFJCeVZEMVJE?= =?utf-8?B?ZmNvUE1mdElkbkpDcHFGNGZvTnplWVo0STNxTUlTZ2JlWmpYRWJIVDloVCtW?= =?utf-8?B?VUd5MlV4ek4zYlFTRmRNWmRSNjdnTFNPL0NQV09hV3ppbWhqV3Q5bWp2bDJt?= =?utf-8?B?bklFU1NZZ1BXR2Y0MURmb2FTS2IxYTgyZzZRZ3FrYWEyREQxWktEL25Xbkpa?= =?utf-8?B?K3c9PQ==?= Content-ID: <2E00DCA8EBF79448AB469CA4DC803C58@namprd11.prod.outlook.com> MIME-Version: 1.0 X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: DM3PR11MB8757.namprd11.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 64d5570e-3a39-4dc4-c36c-08dc0c08a658 X-MS-Exchange-CrossTenant-originalarrivaltime: 03 Jan 2024 03:04:06.9518 (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: RTqwz7+pKOw7tHx0DjhYulBGr7v6IEL8zdWZ8ENfslUaz7tuN3yG4A0HHZJk3hN1DQrpOfD8+vntBEHXQzIZmA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: DM6PR11MB4690 X-OriginatorOrg: intel.com Subject: Re: [FFmpeg-devel] [PATCH v2 03/15] avfilter: add negotiation API for color space/range X-BeenThere: ffmpeg-devel@ffmpeg.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: FFmpeg development discussions and patches List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: FFmpeg development discussions and patches Cc: "git@haasn.dev" Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: ffmpeg-devel-bounces@ffmpeg.org Sender: "ffmpeg-devel" Archived-At: List-Archive: List-Post: T24gV28sIDIwMjMtMTItMTMgYXQgMTQ6MTIgKzAxMDAsIE5pa2xhcyBIYWFzIHdyb3RlOgo+IEZy b206IE5pa2xhcyBIYWFzIDxnaXRAaGFhc24uZGV2Pgo+IAo+IE1vdGl2YXRlZCBieSBZVVZKIHJl bW92YWwuIFRoaXMgY2hhbmdlIHdpbGwgYWxsb3cgZnVsbCBuZWdvdGlhdGlvbgo+IGJldHdlZW4g Y29sb3IgcmFuZ2VzIGFuZCBtYXRyaWNlcyBhcyBuZWVkZWQuIEJ5IGRlZmF1bHQsIGFsbCByYW5n ZXMgYW5kCj4gbWF0cmljZXMgYXJlIG1hcmtlZCBhcyBzdXBwb3J0ZWQuCj4gCj4gQmVjYXVzZSBn cmF5c2NhbGUgZm9ybWF0cyBhcmUgY3VycmVudGx5IGhhbmRsZWQgdmVyeSBpbmNvbnNpc3RlbnRs eSAoYW5kCj4gaW4gcGFydGljdWxhciwgYXNzdW1lZCBhcyBmb3JjZWQgZnVsbC1yYW5nZSBieSBz d3NjYWxlKSwgd2UgZXhjbHVkZSB0aGVtCj4gZnJvbSBuZWdvdGlhdGlvbiBhbHRvZ2V0aGVyIGZv ciB0aGUgdGltZSBiZWluZywgdG8gZ2V0IHRoaXMgQVBJIG1lcmdlZC4KPiAKPiBBZnRlciBmaWx0 ZXIgbmVnb3RpYXRpb24gaXMgYXZhaWxhYmxlLCB3ZSBjYW4gcmVsYXggdGhlCj4gZ3JheXNjYWxl LWlzLWZvcmNlZC1qcGVnIHJlc3RyaWN0aW9uIGFnYWluLCB3aGVuIGl0IHdpbGwgYmUgbW9yZQo+ IGZlYXNpYmxlIHRvIGRvIHNvIHdpdGhvdXQgYnJlYWtpbmcgYSBtaWxsaW9uIHRlc3QgY2FzZXMu Cj4gCj4gTm90ZSB0aGF0IHRoaXMgY29tbWl0IHVwZGF0ZXMgb25lIEZBVEUgdGVzdCBhcyBhIGNv bnNlcXVlbmNlIG9mIHRoZQo+IHNhbml0eSBmYWxsYmFjayBmb3Igbm9uLVlVViBmb3JtYXRzLiBJ biBwYXJ0aWN1bGFyLCB0aGUgdGVzdCBjYXNlIG5vdwo+IHdyaXRlcyByZ2IyNChwYywgZ2JyL3Vu c3BlY2lmaWVkL3Vuc3BlY2lmaWVkKSB0byB0aGUgbWF0cm9za2EgZmlsZSwKPiBpbnN0ZWFkIG9m IHJnYjI0KHVuc3BlY2lmaWVkL3Vuc3BlY2lmaWVkL3Vuc3BlY2lmaWVkKSBhcyBiZWZvcmUuCj4g LS0tCj4gwqBkb2MvQVBJY2hhbmdlc8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDMg Kwo+IMKgbGliYXZmaWx0ZXIvYXZmaWx0ZXIuY8KgwqDCoMKgwqAgfMKgIDE3ICsrKy0KPiDCoGxp YmF2ZmlsdGVyL2F2ZmlsdGVyLmjCoMKgwqDCoMKgIHzCoCAyOCArKysrKysKPiDCoGxpYmF2Zmls dGVyL2F2ZmlsdGVyZ3JhcGguYyB8IDE3MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKy0KPiDCoGxpYmF2ZmlsdGVyL2Zvcm1hdHMuY8KgwqDCoMKgwqDCoCB8IDEyMiArKysrKysr KysrKysrKysrKysrKysrKystCj4gwqBsaWJhdmZpbHRlci9mb3JtYXRzLmjCoMKgwqDCoMKgwqAg fMKgIDU0ICsrKysrKysrKysrCj4gwqBsaWJhdmZpbHRlci9pbnRlcm5hbC5owqDCoMKgwqDCoCB8 wqDCoCA2ICsrCj4gwqBsaWJhdmZpbHRlci92YWFwaV92cHAuY8KgwqDCoMKgIHzCoMKgIDQgKwo+ IMKgbGliYXZmaWx0ZXIvdmlkZW8uY8KgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMiArCj4gwqB0ZXN0 cy9yZWYvZmF0ZS9zaG9ydGVzdC1zdWIgfMKgwqAgNCArLQo+IMKgMTAgZmlsZXMgY2hhbmdlZCwg NDA0IGluc2VydGlvbnMoKyksIDkgZGVsZXRpb25zKC0pCgpJdCBjYXVzZWQgc2VnZmF1bHQgd2hl biB1c2luZyBodyBhY2NlbGVyYXRpb25zLCBzdWNoIGFzIHZ1bGthbiwgdmFhcGksIHFzdi4KCiRm Zm1wZWcgLWluaXRfaHdfZGV2aWNlIHFzdiAtZiBsYXZmaSAtaSB5dXZ0ZXN0c3JjPWR1cmF0aW9u PTEsZm9ybWF0PW52MTIgLXZmICdod3VwbG9hZD1leHRyYV9od19mcmFtZXM9OCcgLWYgbnVsbCAt CiRmZm1wZWcgLWluaXRfaHdfZGV2aWNlIHZhYXBpIC1mIGxhdmZpIC1pIHl1dnRlc3RzcmM9ZHVy YXRpb249MSxmb3JtYXQ9bnYxMiAtdmYgJ2h3dXBsb2FkPWV4dHJhX2h3X2ZyYW1lcz04JyAtZiBu dWxsIC0KJGZmbXBlZyAtaW5pdF9od19kZXZpY2UgdnVsa2FuIC1mIGxhdmZpIC1pIHl1dnRlc3Rz cmM9ZHVyYXRpb249MSxmb3JtYXQ9bnYxMiAtdmYgJ2h3dXBsb2FkPWV4dHJhX2h3X2ZyYW1lcz04 JyAtZiBudWxsIC0KClRocmVhZCAzNiAidmYjMDowIiByZWNlaXZlZCBzaWduYWwgU0lHU0VHViwg U2VnbWVudGF0aW9uIGZhdWx0LgpbU3dpdGNoaW5nIHRvIFRocmVhZCAweDdmZmZjNGZlMTY0MCAo TFdQIDM3OTU2NjQpXQpwaWNrX2Zvcm1hdCAobGluaz0weDdmZmZiODAwNDEwMCwgcmVmPTB4MCkg YXQgbGliYXZmaWx0ZXIvYXZmaWx0ZXJncmFwaC5jOjY3MQo2NzEgICAgICAgICAgICAgICAgIHN3 Zm10ID0gKChBVkhXRnJhbWVzQ29udGV4dCAqKSBsaW5rLT5od19mcmFtZXNfY3R4LT5kYXRhKS0+ c3dfZm9ybWF0OwooZ2RiKSBidAojMCAgcGlja19mb3JtYXQgKGxpbms9MHg3ZmZmYjgwMDQxMDAs IHJlZj0weDApIGF0IGxpYmF2ZmlsdGVyL2F2ZmlsdGVyZ3JhcGguYzo2NzEKIzEgIDB4MDAwMDdm ZmZmNzVkNWI1NyBpbiBwaWNrX2Zvcm1hdHMgKGdyYXBoPTB4N2ZmZmI4MDAwZmYwKSBhdCBsaWJh dmZpbHRlci9hdmZpbHRlcmdyYXBoLmM6MTIxMwojMiAgMHgwMDAwN2ZmZmY3NWQ1ZGVkIGluIGdy YXBoX2NvbmZpZ19mb3JtYXRzIChncmFwaD0weDdmZmZiODAwMGZmMCwgbG9nX2N0eD0weDApIGF0 IGxpYmF2ZmlsdGVyL2F2ZmlsdGVyZ3JhcGguYzoxMjczCiMzICAweDAwMDA3ZmZmZjc1ZDYwYzMg aW4gYXZmaWx0ZXJfZ3JhcGhfY29uZmlnIChncmFwaGN0eD0weDdmZmZiODAwMGZmMCwgbG9nX2N0 eD0weDApIGF0IGxpYmF2ZmlsdGVyL2F2ZmlsdGVyZ3JhcGguYzoxMzI2CiM0ICAweDAwMDA1NTU1 NTU1Nzg2YzggaW4gY29uZmlndXJlX2ZpbHRlcmdyYXBoIChmZz0weDU1NTU1NTY2NmU2MCwgZmd0 PTB4N2ZmZmM0ZmUwYjMwKSBhdCBmZnRvb2xzL2ZmbXBlZ19maWx0ZXIuYzoxNzU4CiM1ICAweDAw MDA1NTU1NTU1N2I0ZjUgaW4gc2VuZF9mcmFtZSAoZmc9MHg1NTU1NTU2NjZlNjAsIGZndD0weDdm ZmZjNGZlMGIzMCwgaWZpbHRlcj0weDU1NTU1NTY2M2I4MCwgZnJhbWU9MHg3ZmZmYjgwMDBiNzAp IGF0IGZmdG9vbHMvZmZtcGVnX2ZpbHRlci5jOjI2NTIKIzYgIDB4MDAwMDU1NTU1NTU3YmRjZSBp biBmaWx0ZXJfdGhyZWFkIChhcmc9MHg1NTU1NTU2NjZlNjApIGF0IGZmdG9vbHMvZmZtcGVnX2Zp bHRlci5jOjI4MTMKIzcgIDB4MDAwMDU1NTU1NTU5ZDhjZCBpbiB0YXNrX3dyYXBwZXIgKGFyZz0w eDU1NTU1NTY2M2RmOCkgYXQgZmZ0b29scy9mZm1wZWdfc2NoZWQuYzoyMjAwCiM4ICAweDAwMDA3 ZmZmZjQwOTRiNDMgaW4gc3RhcnRfdGhyZWFkIChhcmc9PG9wdGltaXplZCBvdXQ+KSBhdCAuL25w dGwvcHRocmVhZF9jcmVhdGUuYzo0NDIKIzkgIDB4MDAwMDdmZmZmNDEyNmEwMCBpbiBjbG9uZTMg KCkgYXQgLi4vc3lzZGVwcy91bml4L3N5c3YvbGludXgveDg2XzY0L2Nsb25lMy5TOjgxCihnZGIp IHAgbGluay0+aHdfZnJhbWVzX2N0eAokMSA9IChBVkJ1ZmZlclJlZiAqKSAweDAKCmxpbmstPmh3 X2ZyYW1lc19jdHggaXMgc2V0IGFmdGVyIGdyYXBoX2NvbmZpZ19mb3JtYXRzKCkKClRoYW5rcwpI YWloYW8KCgo+IAo+IGRpZmYgLS1naXQgYS9kb2MvQVBJY2hhbmdlcyBiL2RvYy9BUEljaGFuZ2Vz Cj4gaW5kZXggNGEyZGMxYzQ0Zi4uMmY2ZWE1MGY2MyAxMDA2NDQKPiAtLS0gYS9kb2MvQVBJY2hh bmdlcwo+ICsrKyBiL2RvYy9BUEljaGFuZ2VzCj4gQEAgLTIsNiArMiw5IEBAIFRoZSBsYXN0IHZl cnNpb24gaW5jcmVhc2VzIG9mIGFsbCBsaWJyYXJpZXMgd2VyZSBvbiAyMDIzLTAyLTA5Cj4gwqAK PiDCoEFQSSBjaGFuZ2VzLCBtb3N0IHJlY2VudCBmaXJzdDoKPiDCoAo+ICsyMDIzLTExLXh4IC0g eHh4eHh4eHh4eCAtIGxhdmYgNTguMTQuMTAwIC0gYXZmaWx0ZXIuaAo+ICvCoCBBZGQgQVZGaWx0 ZXJMaW5rLmNvbG9yc3BhY2UsIEFWRmlsdGVyTGluay5jb2xvcl9yYW5nZQo+ICsKPiDCoDIwMjMt MTEtMDggLSBiODI5NTdhNjZhNyAtIGxhdnUgNTguMzIuMTAwIC0gY2hhbm5lbF9sYXlvdXQuaAo+ IMKgwqAgQWRkIEFWX0NIX0xBWU9VVF83UE9JTlQyUE9JTlQzIGFuZCBBVl9DSEFOTkVMX0xBWU9V VF83UE9JTlQyUE9JTlQzLgo+IMKgwqAgQWRkIEFWX0NIX0xBWU9VVF85UE9JTlQxUE9JTlQ0X0JB Q0sgYW5kCj4gQVZfQ0hBTk5FTF9MQVlPVVRfOVBPSU5UMVBPSU5UNF9CQUNLLgo+IGRpZmYgLS1n aXQgYS9saWJhdmZpbHRlci9hdmZpbHRlci5jIGIvbGliYXZmaWx0ZXIvYXZmaWx0ZXIuYwo+IGlu ZGV4IGJkZTFjMzNkMDcuLjMxMzAwYmI1MTUgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvYXZm aWx0ZXIuYwo+ICsrKyBiL2xpYmF2ZmlsdGVyL2F2ZmlsdGVyLmMKPiBAQCAtMTg1LDYgKzE4NSw3 IEBAIGludCBhdmZpbHRlcl9saW5rKEFWRmlsdGVyQ29udGV4dCAqc3JjLCB1bnNpZ25lZCBzcmNw YWQsCj4gwqDCoMKgwqAgbGluay0+dHlwZcKgwqDCoCA9IHNyYy0+b3V0cHV0X3BhZHNbc3JjcGFk XS50eXBlOwo+IMKgwqDCoMKgIGF2X2Fzc2VydDAoQVZfUElYX0ZNVF9OT05FID09IC0xICYmIEFW X1NBTVBMRV9GTVRfTk9ORSA9PSAtMSk7Cj4gwqDCoMKgwqAgbGluay0+Zm9ybWF0wqAgPSAtMTsK PiArwqDCoMKgIGxpbmstPmNvbG9yc3BhY2UgPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQ7Cj4gwqDC oMKgwqAgZmZfZnJhbWVxdWV1ZV9pbml0KCZsaW5rLT5maWZvLCAmc3JjLT5ncmFwaC0+aW50ZXJu YWwtPmZyYW1lX3F1ZXVlcyk7Cj4gwqAKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiBAQCAtMjg2LDYg KzI4NywxMiBAQCBpbnQgYXZmaWx0ZXJfaW5zZXJ0X2ZpbHRlcihBVkZpbHRlckxpbmsgKmxpbmss Cj4gQVZGaWx0ZXJDb250ZXh0ICpmaWx0LAo+IMKgwqDCoMKgIGlmIChsaW5rLT5vdXRjZmcuZm9y bWF0cykKPiDCoMKgwqDCoMKgwqDCoMKgIGZmX2Zvcm1hdHNfY2hhbmdlcmVmKCZsaW5rLT5vdXRj ZmcuZm9ybWF0cywKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgICZmaWx0LT5vdXRwdXRzW2ZpbHRfZHN0cGFkX2lkeF0tCj4gPm91dGNm Zy5mb3JtYXRzKTsKPiArwqDCoMKgIGlmIChsaW5rLT5vdXRjZmcuY29sb3Jfc3BhY2VzKQo+ICvC oMKgwqDCoMKgwqDCoCBmZl9mb3JtYXRzX2NoYW5nZXJlZigmbGluay0+b3V0Y2ZnLmNvbG9yX3Nw YWNlcywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgJmZpbHQtPm91dHB1dHNbZmlsdF9kc3RwYWRfaWR4XS0KPiA+b3V0Y2ZnLmNvbG9y X3NwYWNlcyk7Cj4gK8KgwqDCoCBpZiAobGluay0+b3V0Y2ZnLmNvbG9yX3JhbmdlcykKPiArwqDC oMKgwqDCoMKgwqAgZmZfZm9ybWF0c19jaGFuZ2VyZWYoJmxpbmstPm91dGNmZy5jb2xvcl9yYW5n ZXMsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgICZmaWx0LT5vdXRwdXRzW2ZpbHRfZHN0cGFkX2lkeF0tCj4gPm91dGNmZy5jb2xvcl9y YW5nZXMpOwo+IMKgwqDCoMKgIGlmIChsaW5rLT5vdXRjZmcuc2FtcGxlcmF0ZXMpCj4gwqDCoMKg wqDCoMKgwqDCoCBmZl9mb3JtYXRzX2NoYW5nZXJlZigmbGluay0+b3V0Y2ZnLnNhbXBsZXJhdGVz LAo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgJmZpbHQtPm91dHB1dHNbZmlsdF9kc3RwYWRfaWR4XS0KPiA+b3V0Y2ZnLnNhbXBsZXJh dGVzKTsKPiBAQCAtNzMwLDYgKzczNywxMCBAQCBzdGF0aWMgdm9pZCBmcmVlX2xpbmsoQVZGaWx0 ZXJMaW5rICpsaW5rKQo+IMKgCj4gwqDCoMKgwqAgZmZfZm9ybWF0c191bnJlZigmbGluay0+aW5j ZmcuZm9ybWF0cyk7Cj4gwqDCoMKgwqAgZmZfZm9ybWF0c191bnJlZigmbGluay0+b3V0Y2ZnLmZv cm1hdHMpOwo+ICvCoMKgwqAgZmZfZm9ybWF0c191bnJlZigmbGluay0+aW5jZmcuY29sb3Jfc3Bh Y2VzKTsKPiArwqDCoMKgIGZmX2Zvcm1hdHNfdW5yZWYoJmxpbmstPm91dGNmZy5jb2xvcl9zcGFj ZXMpOwo+ICvCoMKgwqAgZmZfZm9ybWF0c191bnJlZigmbGluay0+aW5jZmcuY29sb3JfcmFuZ2Vz KTsKPiArwqDCoMKgIGZmX2Zvcm1hdHNfdW5yZWYoJmxpbmstPm91dGNmZy5jb2xvcl9yYW5nZXMp Owo+IMKgwqDCoMKgIGZmX2Zvcm1hdHNfdW5yZWYoJmxpbmstPmluY2ZnLnNhbXBsZXJhdGVzKTsK PiDCoMKgwqDCoCBmZl9mb3JtYXRzX3VucmVmKCZsaW5rLT5vdXRjZmcuc2FtcGxlcmF0ZXMpOwo+ IMKgwqDCoMKgIGZmX2NoYW5uZWxfbGF5b3V0c191bnJlZigmbGluay0+aW5jZmcuY2hhbm5lbF9s YXlvdXRzKTsKPiBAQCAtOTg3LDkgKzk5OCw5IEBAIGludCBmZl9maWx0ZXJfZnJhbWUoQVZGaWx0 ZXJMaW5rICpsaW5rLCBBVkZyYW1lICpmcmFtZSkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg c3RyY21wKGxpbmstPmRzdC0+ZmlsdGVyLT5uYW1lLCAiaWRldCIpICYmCj4gwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIHN0cmNtcChsaW5rLT5kc3QtPmZpbHRlci0+bmFtZSwgIm51bGwiKSAmJgo+ IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJjbXAobGluay0+ZHN0LT5maWx0ZXItPm5hbWUs ICJzY2FsZSIpKSB7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MShmcmFtZS0+ Zm9ybWF0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0gbGluay0+Zm9ybWF0KTsK PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQxKGZyYW1lLT53aWR0aMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgPT0gbGluay0+dyk7Cj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgYXZfYXNzZXJ0MShmcmFtZS0+aGVpZ2h0wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCA9 PSBsaW5rLT5oKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQxKGZyYW1lLT5m b3JtYXTCoMKgwqDCoMKgwqDCoCA9PSBsaW5rLT5mb3JtYXQpOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGF2X2Fzc2VydDEoZnJhbWUtPndpZHRowqDCoMKgwqDCoMKgwqDCoCA9PSBsaW5rLT53 KTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQxKGZyYW1lLT5oZWlnaHTCoMKg wqDCoMKgwqDCoCA9PSBsaW5rLT5oKTsKPiDCoMKgwqDCoMKgwqDCoMKgIH0KPiDCoAo+IMKgwqDC oMKgwqDCoMKgwqAgZnJhbWUtPnNhbXBsZV9hc3BlY3RfcmF0aW8gPSBsaW5rLT5zYW1wbGVfYXNw ZWN0X3JhdGlvOwo+IGRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hdmZpbHRlci5oIGIvbGliYXZm aWx0ZXIvYXZmaWx0ZXIuaAo+IGluZGV4IGQ2OTM4MWFlZDQuLjI0NmQwMDAyNTEgMTAwNjQ0Cj4g LS0tIGEvbGliYXZmaWx0ZXIvYXZmaWx0ZXIuaAo+ICsrKyBiL2xpYmF2ZmlsdGVyL2F2ZmlsdGVy LmgKPiBAQCAtMzAxLDYgKzMwMSwxNCBAQCB0eXBlZGVmIHN0cnVjdCBBVkZpbHRlciB7Cj4gwqDC oMKgwqDCoMKgwqDCoMKgICogQHJlZiBBVkZpbHRlckZvcm1hdHNDb25maWcuZm9ybWF0cyAiaW5j ZmcuZm9ybWF0cyIKPiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBvbiBldmVyeSBvdXRwdXQgbGluayB0 byBhIGxpc3Qgb2YgcGl4ZWwvc2FtcGxlIGZvcm1hdHMgdGhhdCB0aGUKPiBmaWx0ZXIKPiDCoMKg wqDCoMKgwqDCoMKgwqAgKiBzdXBwb3J0cyBvbiB0aGF0IGxpbmsuCj4gK8KgwqDCoMKgwqDCoMKg wqAgKiBGb3IgdmlkZW8gbGlua3MsIHRoaXMgZmlsdGVyIG1heSBhbHNvIHNldAo+ICvCoMKgwqDC oMKgwqDCoMKgICogQHJlZiBBVkZpbHRlckZvcm1hdHNDb25maWcuY29sb3Jfc3BhY2VzICJpbmNm Zy5jb2xvcl9zcGFjZXMiCj4gK8KgwqDCoMKgwqDCoMKgwqAgKsKgIC8KPiArwqDCoMKgwqDCoMKg wqDCoCAqIEByZWYgQVZGaWx0ZXJGb3JtYXRzQ29uZmlnLmNvbG9yX3NwYWNlcyAib3V0Y2ZnLmNv bG9yX3NwYWNlcyIKPiArwqDCoMKgwqDCoMKgwqDCoCAqIGFuZCBAcmVmIEFWRmlsdGVyRm9ybWF0 c0NvbmZpZy5jb2xvcl9yYW5nZXMgImluY2ZnLmNvbG9yX3JhbmdlcyIKPiArwqDCoMKgwqDCoMKg wqDCoCAqwqAgLwo+ICvCoMKgwqDCoMKgwqDCoMKgICogQHJlZiBBVkZpbHRlckZvcm1hdHNDb25m aWcuY29sb3JfcmFuZ2VzICJvdXRjZmcuY29sb3JfcmFuZ2VzIgo+ICvCoMKgwqDCoMKgwqDCoMKg ICogYW5hbG9nb3VzbHkuCj4gwqDCoMKgwqDCoMKgwqDCoMKgICogRm9yIGF1ZGlvIGxpbmtzLCB0 aGlzIGZpbHRlciBtdXN0IGFsc28gc2V0Cj4gwqDCoMKgwqDCoMKgwqDCoMKgICogQHJlZiBBVkZp bHRlckZvcm1hdHNDb25maWcuc2FtcGxlcmF0ZXMgImluY2ZnLnNhbXBsZXJhdGVzIgo+IMKgwqDC oMKgwqDCoMKgwqDCoCAqwqAgLwo+IEBAIC0zMjIsNiArMzMwLDEwIEBAIHR5cGVkZWYgc3RydWN0 IEFWRmlsdGVyIHsKPiDCoMKgwqDCoMKgwqDCoMKgwqAgKiB0byBpbmRpY2F0ZSB0aGF0IHRoaXMg ZmlsdGVyIHN1cHBvcnRzIGVhY2ggb2YgdGhlc2UgcGl4ZWwgZm9ybWF0cywKPiDCoMKgwqDCoMKg wqDCoMKgwqAgKiBwcm92aWRlZCB0aGF0IGFsbCBpbnB1dHMgYW5kIG91dHB1dHMgdXNlIHRoZSBz YW1lIHBpeGVsIGZvcm1hdC4KPiDCoMKgwqDCoMKgwqDCoMKgwqAgKgo+ICvCoMKgwqDCoMKgwqDC oMKgICogSW4gYWRkaXRpb24gdG8gdGhhdCB0aGUgZ2VuZXJpYyBjb2RlIHdpbGwgbWFyayBhbGwg aW5wdXRzCj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBhbmQgYWxsIG91dHB1dHMgYXMgc3VwcG9ydGlu ZyBhbGwgY29sb3Igc3BhY2VzIGFuZCByYW5nZXMsIGFzCj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBs b25nIGFzIGFsbCBpbnB1dHMgYW5kIG91dHB1dHMgdXNlIHRoZSBzYW1lIGNvbG9yIHNwYWNlL3Jh bmdlLgo+ICvCoMKgwqDCoMKgwqDCoMKgICoKPiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBUaGlzIGxp c3QgbXVzdCBuZXZlciBiZSBOVUxMIGlmIHRoZSB1bmlvbiBpcyBpbiB0aGlzIHN0YXRlLgo+IMKg wqDCoMKgwqDCoMKgwqDCoCAqIFRoZSB0eXBlIG9mIGFsbCBpbnB1dHMgYW5kIG91dHB1dHMgb2Yg ZmlsdGVycyB1c2luZyB0aGlzIG11c3QKPiDCoMKgwqDCoMKgwqDCoMKgwqAgKiBiZSBBVk1FRElB X1RZUEVfVklERU8uCj4gQEAgLTUxNCw2ICs1MjYsMTIgQEAgdHlwZWRlZiBzdHJ1Y3QgQVZGaWx0 ZXJGb3JtYXRzQ29uZmlnIHsKPiDCoMKgwqDCoMKgICovCj4gwqDCoMKgwqAgQVZGaWx0ZXJDaGFu bmVsTGF5b3V0c8KgICpjaGFubmVsX2xheW91dHM7Cj4gwqAKPiArwqDCoMKgIC8qKgo+ICvCoMKg wqDCoCAqIExpc3RzIG9mIHN1cHBvcnRlZCBZVVYgY29sb3IgbWV0YWRhdGEsIG9ubHkgZm9yIFlV ViB2aWRlby4KPiArwqDCoMKgwqAgKi8KPiArwqDCoMKgIEFWRmlsdGVyRm9ybWF0cyAqY29sb3Jf c3BhY2VzO8KgIC8vLzwgQVZDb2xvclNwYWNlCj4gK8KgwqDCoCBBVkZpbHRlckZvcm1hdHMgKmNv bG9yX3JhbmdlczvCoCAvLy88IEFWQ29sb3JSYW5nZQo+ICsKPiDCoH0gQVZGaWx0ZXJGb3JtYXRz Q29uZmlnOwo+IMKgCj4gwqAvKioKPiBAQCAtNTY1LDYgKzU4MywxNiBAQCBzdHJ1Y3QgQVZGaWx0 ZXJMaW5rIHsKPiDCoAo+IMKgwqDCoMKgIEFWQ2hhbm5lbExheW91dCBjaF9sYXlvdXQ7wqAgLy8v PCBjaGFubmVsIGxheW91dCBvZiBjdXJyZW50IGJ1ZmZlciAoc2VlCj4gbGliYXZ1dGlsL2NoYW5u ZWxfbGF5b3V0LmgpCj4gwqAKPiArwqDCoMKgIC8qKgo+ICvCoMKgwqDCoCAqIEZvciBub24tWVVW IGxpbmtzLCB0aGVzZSBhcmUgcmVzcGVjdGl2ZWx5IHNldCB0byBmYWxsYmFjayB2YWx1ZXMgKGFz Cj4gK8KgwqDCoMKgICogYXBwcm9wcmlhdGUgZm9yIHRoYXQgY29sb3JzcGFjZSkuCj4gK8KgwqDC oMKgICoKPiArwqDCoMKgwqAgKiBOb3RlOiBUaGlzIGluY2x1ZGVzIGdyYXlzY2FsZSBmb3JtYXRz LCBhcyB0aGVzZSBhcmUgY3VycmVudGx5IHRyZWF0ZWQKPiArwqDCoMKgwqAgKiBhcyBmb3JjZWQg ZnVsbCByYW5nZSBhbHdheXMuCj4gK8KgwqDCoMKgICovCj4gK8KgwqDCoCBlbnVtIEFWQ29sb3JT cGFjZSBjb2xvcnNwYWNlO8KgwqAgLy8vPCBhZ3JlZWQgdXBvbiBZVVYgY29sb3Igc3BhY2UKPiAr wqDCoMKgIGVudW0gQVZDb2xvclJhbmdlIGNvbG9yX3JhbmdlO8KgIC8vLzwgYWdyZWVkIHVwb24g WVVWIGNvbG9yIHJhbmdlCj4gKwo+IMKgwqDCoMKgIC8qKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgo+IMKgwqDCoMKgwqAgKiBB bGwgZmllbGRzIGJlbG93IHRoaXMgbGluZSBhcmUgbm90IHBhcnQgb2YgdGhlIHB1YmxpYyBBUEku IFRoZXkKPiDCoMKgwqDCoMKgICogbWF5IG5vdCBiZSB1c2VkIG91dHNpZGUgb2YgbGliYXZmaWx0 ZXIgYW5kIGNhbiBiZSBjaGFuZ2VkIGFuZAo+IGRpZmYgLS1naXQgYS9saWJhdmZpbHRlci9hdmZp bHRlcmdyYXBoLmMgYi9saWJhdmZpbHRlci9hdmZpbHRlcmdyYXBoLmMKPiBpbmRleCA2MjVjYmMw MjJlLi5lZjczOTczNWJkIDEwMDY0NAo+IC0tLSBhL2xpYmF2ZmlsdGVyL2F2ZmlsdGVyZ3JhcGgu Ywo+ICsrKyBiL2xpYmF2ZmlsdGVyL2F2ZmlsdGVyZ3JhcGguYwo+IEBAIC0yNyw2ICsyNyw3IEBA Cj4gwqAjaW5jbHVkZSAibGliYXZ1dGlsL2F2YXNzZXJ0LmgiCj4gwqAjaW5jbHVkZSAibGliYXZ1 dGlsL2JwcmludC5oIgo+IMKgI2luY2x1ZGUgImxpYmF2dXRpbC9jaGFubmVsX2xheW91dC5oIgo+ ICsjaW5jbHVkZSAibGliYXZ1dGlsL2h3Y29udGV4dC5oIgo+IMKgI2luY2x1ZGUgImxpYmF2dXRp bC9pbWd1dGlscy5oIgo+IMKgI2luY2x1ZGUgImxpYmF2dXRpbC9vcHQuaCIKPiDCoCNpbmNsdWRl ICJsaWJhdnV0aWwvcGl4ZGVzYy5oIgo+IEBAIC0yOTgsNyArMjk5LDkgQEAgc3RhdGljIGludCBm aWx0ZXJfbGlua19jaGVja19mb3JtYXRzKHZvaWQgKmxvZywKPiBBVkZpbHRlckxpbmsgKmxpbmss IEFWRmlsdGVyRm9ybQo+IMKgwqDCoMKgIHN3aXRjaCAobGluay0+dHlwZSkgewo+IMKgCj4gwqDC oMKgwqAgY2FzZSBBVk1FRElBX1RZUEVfVklERU86Cj4gLcKgwqDCoMKgwqDCoMKgIGlmICgocmV0 ID0gZmZfZm9ybWF0c19jaGVja19waXhlbF9mb3JtYXRzKGxvZywgY2ZnLT5mb3JtYXRzKSkgPCAw KQo+ICvCoMKgwqDCoMKgwqDCoCBpZiAoKHJldCA9IGZmX2Zvcm1hdHNfY2hlY2tfcGl4ZWxfZm9y bWF0cyhsb2csIGNmZy0+Zm9ybWF0cykpIDwgMCB8fAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IChyZXQgPSBmZl9mb3JtYXRzX2NoZWNrX2NvbG9yX3NwYWNlcyhsb2csIGNmZy0+Y29sb3Jfc3Bh Y2VzKSkgPCAwCj4gfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAocmV0ID0gZmZfZm9ybWF0 c19jaGVja19jb2xvcl9yYW5nZXMobG9nLCBjZmctPmNvbG9yX3JhbmdlcykpIDwKPiAwKQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+IMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gwqAKPiBAQCAtMzY1LDYgKzM2OCwxMCBAQCBzdGF0aWMgaW50IGZvcm1hdHNfZGVjbGFy ZWQoQVZGaWx0ZXJDb250ZXh0ICpmKQo+IMKgwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBmLT5uYl9p bnB1dHM7IGkrKykgewo+IMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFmLT5pbnB1dHNbaV0tPm91dGNm Zy5mb3JtYXRzKQo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArwqDCoMKg wqDCoMKgwqAgaWYgKGYtPmlucHV0c1tpXS0+dHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8gJiYK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAhKGYtPmlucHV0c1tpXS0+b3V0Y2ZnLmNvbG9yX3Jh bmdlcyAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmLT5pbnB1dHNbaV0tPm91dGNm Zy5jb2xvcl9zcGFjZXMpKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiAwOwo+IMKg wqDCoMKgwqDCoMKgwqAgaWYgKGYtPmlucHV0c1tpXS0+dHlwZSA9PSBBVk1FRElBX1RZUEVfQVVE SU8gJiYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIShmLT5pbnB1dHNbaV0tPm91dGNmZy5z YW1wbGVyYXRlcyAmJgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZi0+aW5wdXRzW2ld LT5vdXRjZmcuY2hhbm5lbF9sYXlvdXRzKSkKPiBAQCAtMzczLDYgKzM4MCwxMCBAQCBzdGF0aWMg aW50IGZvcm1hdHNfZGVjbGFyZWQoQVZGaWx0ZXJDb250ZXh0ICpmKQo+IMKgwqDCoMKgIGZvciAo aSA9IDA7IGkgPCBmLT5uYl9vdXRwdXRzOyBpKyspIHsKPiDCoMKgwqDCoMKgwqDCoMKgIGlmICgh Zi0+b3V0cHV0c1tpXS0+aW5jZmcuZm9ybWF0cykKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg cmV0dXJuIDA7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmLT5vdXRwdXRzW2ldLT50eXBlID09IEFW TUVESUFfVFlQRV9WSURFTyAmJgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICEoZi0+b3V0cHV0 c1tpXS0+aW5jZmcuY29sb3JfcmFuZ2VzICYmCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGYtPm91dHB1dHNbaV0tPmluY2ZnLmNvbG9yX3NwYWNlcykpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIDA7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAoZi0+b3V0cHV0c1tpXS0+dHlw ZSA9PSBBVk1FRElBX1RZUEVfQVVESU8gJiYKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgIShm LT5vdXRwdXRzW2ldLT5pbmNmZy5zYW1wbGVyYXRlcyAmJgo+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgZi0+b3V0cHV0c1tpXS0+aW5jZmcuY2hhbm5lbF9sYXlvdXRzKSkKPiBAQCAtNDkz LDcgKzUwNCwxNiBAQCBzdGF0aWMgaW50IHF1ZXJ5X2Zvcm1hdHMoQVZGaWx0ZXJHcmFwaCAqZ3Jh cGgsIHZvaWQKPiAqbG9nX2N0eCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh dl9hc3NlcnQwKCBpbmxpbmstPm91dGNmZy5mb3JtYXRzLT5yZWZjb3VudCA+IDApOwo+IMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAob3V0bGluay0+aW5jZmcuZm9y bWF0cy0+cmVmY291bnQgPiAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBh dl9hc3NlcnQwKG91dGxpbmstPm91dGNmZy5mb3JtYXRzLT5yZWZjb3VudCA+IDApOwo+IC3CoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG91dGxpbmstPnR5cGUgPT0gQVZNRURJQV9U WVBFX0FVRElPKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAob3V0bGlu ay0+dHlwZSA9PSBBVk1FRElBX1RZUEVfVklERU8pIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MCggaW5saW5rLT4gaW5jZmcuY29sb3Jfc3BhY2Vz LT5yZWZjb3VudCA+IDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBhdl9hc3NlcnQwKCBpbmxpbmstPm91dGNmZy5jb2xvcl9zcGFjZXMtPnJlZmNvdW50ID4gMCk7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAob3V0 bGluay0+IGluY2ZnLmNvbG9yX3NwYWNlcy0+cmVmY291bnQgPiAwKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChvdXRsaW5rLT5vdXRjZmcuY29s b3Jfc3BhY2VzLT5yZWZjb3VudCA+IDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBhdl9hc3NlcnQwKCBpbmxpbmstPiBpbmNmZy5jb2xvcl9yYW5nZXMtPnJlZmNv dW50ID4gMCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fz c2VydDAoIGlubGluay0+b3V0Y2ZnLmNvbG9yX3Jhbmdlcy0+cmVmY291bnQgPiAwKTsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfYXNzZXJ0MChvdXRsaW5rLT4g aW5jZmcuY29sb3JfcmFuZ2VzLT5yZWZjb3VudCA+IDApOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKG91dGxpbmstPm91dGNmZy5jb2xvcl9yYW5n ZXMtPnJlZmNvdW50ID4gMCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9IGVs c2UgaWYgKG91dGxpbmstPnR5cGUgPT0gQVZNRURJQV9UWVBFX0FVRElPKSB7Cj4gwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9hc3NlcnQwKCBpbmxpbmstPiBpbmNm Zy5zYW1wbGVyYXRlcy0+cmVmY291bnQgPiAwKTsKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDAoIGlubGluay0+b3V0Y2ZnLnNhbXBsZXJhdGVzLT5y ZWZjb3VudCA+IDApOwo+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg YXZfYXNzZXJ0MChvdXRsaW5rLT4gaW5jZmcuc2FtcGxlcmF0ZXMtPnJlZmNvdW50ID4gMCk7Cj4g QEAgLTU4Myw2ICs2MDMsMzAgQEAgc3RhdGljIGVudW0gQVZTYW1wbGVGb3JtYXQgZmluZF9iZXN0 X3NhbXBsZV9mbXRfb2ZfMihlbnVtCj4gQVZTYW1wbGVGb3JtYXQgZHN0X2ZtdAo+IMKgwqDCoMKg IHJldHVybiBzY29yZTEgPCBzY29yZTIgPyBkc3RfZm10MSA6IGRzdF9mbXQyOwo+IMKgfQo+IMKg Cj4gK2ludCBmZl9mbXRfaXNfcmVndWxhcl95dXYoZW51bSBBVlBpeGVsRm9ybWF0IGZtdCkKPiAr ewo+ICvCoMKgwqAgY29uc3QgQVZQaXhGbXREZXNjcmlwdG9yICpkZXNjID0gYXZfcGl4X2ZtdF9k ZXNjX2dldChmbXQpOwo+ICvCoMKgwqAgaWYgKCFkZXNjKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1 cm4gMDsKPiArwqDCoMKgIGlmIChkZXNjLT5uYl9jb21wb25lbnRzIDwgMykKPiArwqDCoMKgwqDC oMKgwqAgcmV0dXJuIDA7IC8qIEdyYXlzY2FsZSBpcyBleHBsaWNpdGx5IGZ1bGwtcmFuZ2UgaW4g c3dzY2FsZSAqLwo+ICvCoMKgwqAgYXZfYXNzZXJ0MSghKGRlc2MtPmZsYWdzICYgQVZfUElYX0ZN VF9GTEFHX0hXQUNDRUwpKTsKPiArwqDCoMKgIGlmIChkZXNjLT5mbGFncyAmIChBVl9QSVhfRk1U X0ZMQUdfUkdCIHwgQVZfUElYX0ZNVF9GTEFHX1BBTCB8Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWX1BJWF9GTVRfRkxBR19YWVogfCBBVl9QSVhfRk1U X0ZMQUdfRkxPQVQpKQo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArCj4gK8KgwqDCoCBz d2l0Y2ggKGZtdCkgewo+ICvCoMKgwqAgY2FzZSBBVl9QSVhfRk1UX1lVVko0MjBQOgo+ICvCoMKg wqAgY2FzZSBBVl9QSVhfRk1UX1lVVko0MjJQOgo+ICvCoMKgwqAgY2FzZSBBVl9QSVhfRk1UX1lV Vko0NDRQOgo+ICvCoMKgwqAgY2FzZSBBVl9QSVhfRk1UX1lVVko0NDBQOgo+ICvCoMKgwqAgY2Fz ZSBBVl9QSVhfRk1UX1lVVko0MTFQOgo+ICvCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPiArwqDC oMKgIGRlZmF1bHQ6Cj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybiAxOwo+ICvCoMKgwqAgfQo+ICt9 Cj4gKwo+IMKgc3RhdGljIGludCBwaWNrX2Zvcm1hdChBVkZpbHRlckxpbmsgKmxpbmssIEFWRmls dGVyTGluayAqcmVmKQo+IMKgewo+IMKgwqDCoMKgIGlmICghbGluayB8fCAhbGluay0+aW5jZmcu Zm9ybWF0cykKPiBAQCAtNjIxLDcgKzY2NSw0NiBAQCBzdGF0aWMgaW50IHBpY2tfZm9ybWF0KEFW RmlsdGVyTGluayAqbGluaywgQVZGaWx0ZXJMaW5rCj4gKnJlZikKPiDCoMKgwqDCoCBsaW5rLT5p bmNmZy5mb3JtYXRzLT5uYl9mb3JtYXRzID0gMTsKPiDCoMKgwqDCoCBsaW5rLT5mb3JtYXQgPSBs aW5rLT5pbmNmZy5mb3JtYXRzLT5mb3JtYXRzWzBdOwo+IMKgCj4gLcKgwqDCoCBpZiAobGluay0+ dHlwZSA9PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKPiArwqDCoMKgIGlmIChsaW5rLT50eXBlID09 IEFWTUVESUFfVFlQRV9WSURFTykgewo+ICvCoMKgwqDCoMKgwqDCoCBlbnVtIEFWUGl4ZWxGb3Jt YXQgc3dmbXQgPSBsaW5rLT5mb3JtYXQ7Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChhdl9waXhfZm10 X2Rlc2NfZ2V0KHN3Zm10KS0+ZmxhZ3MgJiBBVl9QSVhfRk1UX0ZMQUdfSFdBQ0NFTCkgewo+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIGF2X2Fzc2VydDEobGluay0+aHdfZnJhbWVzX2N0eCk7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3dmbXQgPSAoKEFWSFdGcmFtZXNDb250ZXh0ICopIGxp bmstPmh3X2ZyYW1lc19jdHgtPmRhdGEpLQo+ID5zd19mb3JtYXQ7Cj4gK8KgwqDCoMKgwqDCoMKg IH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgIGlmICghZmZfZm10X2lzX3JlZ3VsYXJfeXV2KHN3Zm10 KSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IEFWUGl4Rm10RGVzY3JpcHRvciAq ZGVzYyA9IGF2X3BpeF9mbXRfZGVzY19nZXQoc3dmbXQpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIC8qIFRoZXNlIGZpZWxkcyBhcmUgZXhwbGljaXRseSBkb2N1bWVudGVkIGFzIGFmZmVjdGlu ZyBZVVYgb25seSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc28gc2V0IHRoZW0gdG8g c2FuZSB2YWx1ZXMgZm9yIG90aGVyIGZvcm1hdHMuICovCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKGRlc2MtPmZsYWdzICYgQVZfUElYX0ZNVF9GTEFHX0ZMT0FUKQo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgbGluay0+Y29sb3JfcmFuZ2UgPSBBVkNPTF9SQU5HRV9VTlNQ RUNJRklFRDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBlbHNlCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBsaW5rLT5jb2xvcl9yYW5nZSA9IEFWQ09MX1JBTkdFX0pQRUc7Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGRlc2MtPmZsYWdzICYgKEFWX1BJWF9GTVRfRkxB R19SR0IgfCBBVl9QSVhfRk1UX0ZMQUdfWFlaKSkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgbGluay0+Y29sb3JzcGFjZSA9IEFWQ09MX1NQQ19SR0I7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgfSBlbHNlIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxp bmstPmNvbG9yc3BhY2UgPSBBVkNPTF9TUENfVU5TUEVDSUZJRUQ7Cj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgfQo+ICvCoMKgwqDCoMKgwqDCoCB9IGVsc2Ugewo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGlmICghbGluay0+aW5jZmcuY29sb3Jfc3BhY2VzLT5uYl9mb3JtYXRzKSB7Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2cobGluay0+c3JjLCBBVl9MT0dfRVJS T1IsICJDYW5ub3Qgc2VsZWN0IGNvbG9yIHNwYWNlCj4gZm9yIgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiIHRoZSBsaW5rIGJldHdlZW4gZmlsdGVycyAl cyBhbmQgJXMuXG4iLCBsaW5rLT5zcmMtCj4gPm5hbWUsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmstPmRzdC0+bmFtZSk7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5WQUwpOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5rLT5pbmNmZy5jb2xv cl9zcGFjZXMtPm5iX2Zvcm1hdHMgPSAxOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmst PmNvbG9yc3BhY2UgPSBsaW5rLT5pbmNmZy5jb2xvcl9zcGFjZXMtPmZvcm1hdHNbMF07Cj4gKwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICghbGluay0+aW5jZmcuY29sb3JfcmFuZ2VzLT5u Yl9mb3JtYXRzKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhdl9sb2cobGlu ay0+c3JjLCBBVl9MT0dfRVJST1IsICJDYW5ub3Qgc2VsZWN0IGNvbG9yIHJhbmdlCj4gZm9yIgo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiIHRoZSBsaW5r IGJldHdlZW4gZmlsdGVycyAlcyBhbmQgJXMuXG4iLCBsaW5rLT5zcmMtCj4gPm5hbWUsCj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxpbmstPmRzdC0+bmFt ZSk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gQVZFUlJPUihFSU5W QUwpOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBsaW5rLT5pbmNmZy5jb2xvcl9yYW5nZXMtPm5iX2Zvcm1hdHMgPSAxOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGxpbmstPmNvbG9yX3JhbmdlID0gbGluay0+aW5jZmcuY29sb3JfcmFuZ2Vz LT5mb3JtYXRzWzBdOwo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9IGVsc2UgaWYgKGxp bmstPnR5cGUgPT0gQVZNRURJQV9UWVBFX0FVRElPKSB7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpbnQg cmV0Owo+IMKgCj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWxpbmstPmluY2ZnLnNhbXBsZXJhdGVz LT5uYl9mb3JtYXRzKSB7Cj4gQEAgLTY2MSw2ICs3NDQsMTAgQEAgRkZfRU5BQkxFX0RFUFJFQ0FU SU9OX1dBUk5JTkdTCj4gwqDCoMKgwqAgZmZfZm9ybWF0c191bnJlZigmbGluay0+b3V0Y2ZnLnNh bXBsZXJhdGVzKTsKPiDCoMKgwqDCoCBmZl9jaGFubmVsX2xheW91dHNfdW5yZWYoJmxpbmstPmlu Y2ZnLmNoYW5uZWxfbGF5b3V0cyk7Cj4gwqDCoMKgwqAgZmZfY2hhbm5lbF9sYXlvdXRzX3VucmVm KCZsaW5rLT5vdXRjZmcuY2hhbm5lbF9sYXlvdXRzKTsKPiArwqDCoMKgIGZmX2Zvcm1hdHNfdW5y ZWYoJmxpbmstPmluY2ZnLmNvbG9yX3NwYWNlcyk7Cj4gK8KgwqDCoCBmZl9mb3JtYXRzX3VucmVm KCZsaW5rLT5vdXRjZmcuY29sb3Jfc3BhY2VzKTsKPiArwqDCoMKgIGZmX2Zvcm1hdHNfdW5yZWYo JmxpbmstPmluY2ZnLmNvbG9yX3Jhbmdlcyk7Cj4gK8KgwqDCoCBmZl9mb3JtYXRzX3VucmVmKCZs aW5rLT5vdXRjZmcuY29sb3JfcmFuZ2VzKTsKPiDCoAo+IMKgwqDCoMKgIHJldHVybiAwOwo+IMKg fQo+IEBAIC04MjIsNiArOTA5LDgyIEBAIHN0YXRpYyB2b2lkIHN3YXBfc2FtcGxlcmF0ZXMoQVZG aWx0ZXJHcmFwaCAqZ3JhcGgpCj4gwqDCoMKgwqDCoMKgwqDCoCBzd2FwX3NhbXBsZXJhdGVzX29u X2ZpbHRlcihncmFwaC0+ZmlsdGVyc1tpXSk7Cj4gwqB9Cj4gwqAKPiArc3RhdGljIHZvaWQgc3dh cF9jb2xvcl9zcGFjZXNfb25fZmlsdGVyKEFWRmlsdGVyQ29udGV4dCAqZmlsdGVyKQo+ICt7Cj4g K8KgwqDCoCBBVkZpbHRlckxpbmsgKmxpbmsgPSBOVUxMOwo+ICvCoMKgwqAgZW51bSBBVkNvbG9y U3BhY2UgY3NwOwo+ICvCoMKgwqAgaW50IGk7Cj4gKwo+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8 IGZpbHRlci0+bmJfaW5wdXRzOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqAgbGluayA9IGZpbHRl ci0+aW5wdXRzW2ldOwo+ICvCoMKgwqDCoMKgwqDCoCBpZiAobGluay0+dHlwZSA9PSBBVk1FRElB X1RZUEVfVklERU8gJiYKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsaW5rLT5vdXRjZmcuY29s b3Jfc3BhY2VzLT5uYl9mb3JtYXRzID09IDEpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJl YWs7Cj4gK8KgwqDCoCB9Cj4gK8KgwqDCoCBpZiAoaSA9PSBmaWx0ZXItPm5iX2lucHV0cykKPiAr wqDCoMKgwqDCoMKgwqAgcmV0dXJuOwo+ICsKPiArwqDCoMKgIGNzcCA9IGxpbmstPm91dGNmZy5j b2xvcl9zcGFjZXMtPmZvcm1hdHNbMF07Cj4gKwo+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IGZp bHRlci0+bmJfb3V0cHV0czsgaSsrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgIEFWRmlsdGVyTGluayAq b3V0bGluayA9IGZpbHRlci0+b3V0cHV0c1tpXTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKG91dGxp bmstPnR5cGUgIT0gQVZNRURJQV9UWVBFX1ZJREVPKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKgwqDCoCAvKiB0aGVyZSBpcyBubyBtZWFuaW5nZnVsICdz Y29yZScgYmV0d2VlbiBkaWZmZXJlbnQgeXV2IG1hdHJpY2VzLAo+ICvCoMKgwqDCoMKgwqDCoMKg ICogc28ganVzdCBwcmlvcml0aXplIGFuIGV4YWN0IG1hdGNoIGlmIGl0IGV4aXN0cyAqLwo+ICvC oMKgwqDCoMKgwqDCoCBmb3IgKGludCBqID0gMDsgaiA8IG91dGxpbmstPmluY2ZnLmNvbG9yX3Nw YWNlcy0+bmJfZm9ybWF0czsgaisrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKGNz cCA9PSBvdXRsaW5rLT5pbmNmZy5jb2xvcl9zcGFjZXMtPmZvcm1hdHNbal0pIHsKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEZGU1dBUChpbnQsIG91dGxpbmstPmluY2ZnLmNvbG9y X3NwYWNlcy0+Zm9ybWF0c1swXSwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgb3V0bGluay0+aW5jZmcuY29sb3Jfc3BhY2VzLT5mb3JtYXRzW2pdKTsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIH0KPiArwqDCoMKgwqDCoMKgwqAgfQo+ICvCoMKgwqAgfQo+ICt9Cj4gKwo+ICtzdGF0 aWMgdm9pZCBzd2FwX2NvbG9yX3NwYWNlcyhBVkZpbHRlckdyYXBoICpncmFwaCkKPiArewo+ICvC oMKgwqAgZm9yIChpbnQgaSA9IDA7IGkgPCBncmFwaC0+bmJfZmlsdGVyczsgaSsrKQo+ICvCoMKg wqDCoMKgwqDCoCBzd2FwX2NvbG9yX3NwYWNlc19vbl9maWx0ZXIoZ3JhcGgtPmZpbHRlcnNbaV0p Owo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBzd2FwX2NvbG9yX3Jhbmdlc19vbl9maWx0ZXIoQVZG aWx0ZXJDb250ZXh0ICpmaWx0ZXIpCj4gK3sKPiArwqDCoMKgIEFWRmlsdGVyTGluayAqbGluayA9 IE5VTEw7Cj4gK8KgwqDCoCBlbnVtIEFWQ29sb3JSYW5nZSByYW5nZTsKPiArwqDCoMKgIGludCBp Owo+ICsKPiArwqDCoMKgIGZvciAoaSA9IDA7IGkgPCBmaWx0ZXItPm5iX2lucHV0czsgaSsrKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGxpbmsgPSBmaWx0ZXItPmlucHV0c1tpXTsKPiArwqDCoMKgwqDC oMKgwqAgaWYgKGxpbmstPnR5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPICYmCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbGluay0+b3V0Y2ZnLmNvbG9yX3Jhbmdlcy0+bmJfZm9ybWF0cyA9PSAx KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJyZWFrOwo+ICvCoMKgwqAgfQo+ICvCoMKgwqAg aWYgKGkgPT0gZmlsdGVyLT5uYl9pbnB1dHMpCj4gK8KgwqDCoMKgwqDCoMKgIHJldHVybjsKPiAr Cj4gK8KgwqDCoCByYW5nZSA9IGxpbmstPm91dGNmZy5jb2xvcl9yYW5nZXMtPmZvcm1hdHNbMF07 Cj4gKwo+ICvCoMKgwqAgZm9yIChpID0gMDsgaSA8IGZpbHRlci0+bmJfb3V0cHV0czsgaSsrKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIEFWRmlsdGVyTGluayAqb3V0bGluayA9IGZpbHRlci0+b3V0cHV0 c1tpXTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKG91dGxpbmstPnR5cGUgIT0gQVZNRURJQV9UWVBF X1ZJREVPKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ICvCoMKgwqDCoMKg wqDCoCBmb3IgKGludCBqID0gMDsgaiA8IG91dGxpbmstPmluY2ZnLmNvbG9yX3Jhbmdlcy0+bmJf Zm9ybWF0czsgaisrKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHJhbmdlID09IG91 dGxpbmstPmluY2ZnLmNvbG9yX3Jhbmdlcy0+Zm9ybWF0c1tqXSkgewo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgRkZTV0FQKGludCwgb3V0bGluay0+aW5jZmcuY29sb3JfcmFuZ2Vz LT5mb3JtYXRzWzBdLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBvdXRsaW5rLT5pbmNmZy5jb2xvcl9yYW5nZXMtPmZvcm1hdHNbal0pOwo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAg fQo+ICvCoMKgwqDCoMKgwqDCoCB9Cj4gK8KgwqDCoCB9Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lk IHN3YXBfY29sb3JfcmFuZ2VzKEFWRmlsdGVyR3JhcGggKmdyYXBoKQo+ICt7Cj4gK8KgwqDCoCBm b3IgKGludCBpID0gMDsgaSA8IGdyYXBoLT5uYl9maWx0ZXJzOyBpKyspCj4gK8KgwqDCoMKgwqDC oMKgIHN3YXBfY29sb3JfcmFuZ2VzX29uX2ZpbHRlcihncmFwaC0+ZmlsdGVyc1tpXSk7Cj4gK30K PiArCj4gwqAjZGVmaW5lIENIX0NFTlRFUl9QQUlSIChBVl9DSF9GUk9OVF9MRUZUX09GX0NFTlRF UiB8Cj4gQVZfQ0hfRlJPTlRfUklHSFRfT0ZfQ0VOVEVSKQo+IMKgI2RlZmluZSBDSF9GUk9OVF9Q QUlSwqAgKEFWX0NIX0ZST05UX0xFRlTCoMKgwqDCoMKgwqDCoMKgwqDCoCB8IEFWX0NIX0ZST05U X1JJR0hUKQo+IMKgI2RlZmluZSBDSF9TVEVSRU9fUEFJUiAoQVZfQ0hfU1RFUkVPX0xFRlTCoMKg wqDCoMKgwqDCoMKgwqAgfCBBVl9DSF9TVEVSRU9fUklHSFQpCj4gQEAgLTEwOTgsNiArMTI2MSwx MCBAQCBzdGF0aWMgaW50IGdyYXBoX2NvbmZpZ19mb3JtYXRzKEFWRmlsdGVyR3JhcGggKmdyYXBo LAo+IHZvaWQgKmxvZ19jdHgpCj4gwqDCoMKgwqAgaWYgKChyZXQgPSByZWR1Y2VfZm9ybWF0cyhn cmFwaCkpIDwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByZXQ7Cj4gwqAKPiArwqDCoMKg IC8qIGZvciB2aWRlbyBmaWx0ZXJzLCBlbnN1cmUgdGhhdCB0aGUgYmVzdCBjb2xvcnNwYWNlIG1l dGFkYXRhIGlzCj4gc2VsZWN0ZWQgKi8KPiArwqDCoMKgIHN3YXBfY29sb3Jfc3BhY2VzKGdyYXBo KTsKPiArwqDCoMKgIHN3YXBfY29sb3JfcmFuZ2VzKGdyYXBoKTsKPiArCj4gwqDCoMKgwqAgLyog Zm9yIGF1ZGlvIGZpbHRlcnMsIGVuc3VyZSB0aGUgYmVzdCBmb3JtYXQsIHNhbXBsZSByYXRlIGFu ZCBjaGFubmVsCj4gbGF5b3V0Cj4gwqDCoMKgwqDCoCAqIGlzIHNlbGVjdGVkICovCj4gwqDCoMKg wqAgc3dhcF9zYW1wbGVfZm10cyhncmFwaCk7Cj4gZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2Zv cm1hdHMuYyBiL2xpYmF2ZmlsdGVyL2Zvcm1hdHMuYwo+IGluZGV4IGQxYzk3ZGFmNjQuLjIwZjAw ZDJkYjQgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvZm9ybWF0cy5jCj4gKysrIGIvbGliYXZm aWx0ZXIvZm9ybWF0cy5jCj4gQEAgLTMyMSwxMiArMzIxLDQ2IEBAIHN0YXRpYyBpbnQgbWVyZ2Vf Y2hhbm5lbF9sYXlvdXRzKHZvaWQgKmEsIHZvaWQgKmIpCj4gwqDCoMKgwqAgcmV0dXJuIG1lcmdl X2NoYW5uZWxfbGF5b3V0c19pbnRlcm5hbChhLCBiLCAwKTsKPiDCoH0KPiDCoAo+ICtzdGF0aWMg aW50IG1lcmdlX2dlbmVyaWNfaW50ZXJuYWwoQVZGaWx0ZXJGb3JtYXRzICphLAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgQVZGaWx0ZXJGb3JtYXRzICpiLCBpbnQgY2hlY2spCj4gK3sKPiArwqDCoMKgIGF2X2Fzc2Vy dDIoY2hlY2sgfHwgKGEtPnJlZmNvdW50ICYmIGItPnJlZmNvdW50KSk7Cj4gKwo+ICvCoMKgwqAg aWYgKGEgPT0gYikKPiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDE7Cj4gKwo+ICvCoMKgwqAgTUVS R0VfRk9STUFUUyhhLCBiLCBmb3JtYXRzLCBuYl9mb3JtYXRzLCBBVkZpbHRlckZvcm1hdHMsIGNo ZWNrLCAwKTsKPiArCj4gK8KgwqDCoCByZXR1cm4gMTsKPiArfQo+ICsKPiArc3RhdGljIGludCBj YW5fbWVyZ2VfZ2VuZXJpYyhjb25zdCB2b2lkICphLCBjb25zdCB2b2lkICpiKQo+ICt7Cj4gK8Kg wqDCoCByZXR1cm4gbWVyZ2VfZ2VuZXJpY19pbnRlcm5hbCgoQVZGaWx0ZXJGb3JtYXRzICopYSwK PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIChBVkZpbHRlckZvcm1hdHMgKiliLCAxKTsKPiArfQo+ICsKPiArc3RhdGlj IGludCBtZXJnZV9nZW5lcmljKHZvaWQgKmEsIHZvaWQgKmIpCj4gK3sKPiArwqDCoMKgIHJldHVy biBtZXJnZV9nZW5lcmljX2ludGVybmFsKGEsIGIsIDApOwo+ICt9Cj4gKwo+IMKgc3RhdGljIGNv bnN0IEFWRmlsdGVyRm9ybWF0c01lcmdlciBtZXJnZXJzX3ZpZGVvW10gPSB7Cj4gwqDCoMKgwqAg ewo+IMKgwqDCoMKgwqDCoMKgwqAgLm9mZnNldMKgwqDCoMKgID0gb2Zmc2V0b2YoQVZGaWx0ZXJG b3JtYXRzQ29uZmlnLCBmb3JtYXRzKSwKPiDCoMKgwqDCoMKgwqDCoMKgIC5tZXJnZcKgwqDCoMKg wqAgPSBtZXJnZV9waXhfZm10cywKPiDCoMKgwqDCoMKgwqDCoMKgIC5jYW5fbWVyZ2XCoCA9IGNh bl9tZXJnZV9waXhfZm10cywKPiDCoMKgwqDCoCB9LAo+ICvCoMKgwqAgewo+ICvCoMKgwqDCoMKg wqDCoCAub2Zmc2V0wqDCoMKgwqAgPSBvZmZzZXRvZihBVkZpbHRlckZvcm1hdHNDb25maWcsIGNv bG9yX3NwYWNlcyksCj4gK8KgwqDCoMKgwqDCoMKgIC5tZXJnZcKgwqDCoMKgwqAgPSBtZXJnZV9n ZW5lcmljLAo+ICvCoMKgwqDCoMKgwqDCoCAuY2FuX21lcmdlwqAgPSBjYW5fbWVyZ2VfZ2VuZXJp YywKPiArwqDCoMKgIH0sCj4gK8KgwqDCoCB7Cj4gK8KgwqDCoMKgwqDCoMKgIC5vZmZzZXTCoMKg wqDCoCA9IG9mZnNldG9mKEFWRmlsdGVyRm9ybWF0c0NvbmZpZywgY29sb3JfcmFuZ2VzKSwKPiAr wqDCoMKgwqDCoMKgwqAgLm1lcmdlwqDCoMKgwqDCoCA9IG1lcmdlX2dlbmVyaWMsCj4gK8KgwqDC oMKgwqDCoMKgIC5jYW5fbWVyZ2XCoCA9IGNhbl9tZXJnZV9nZW5lcmljLAo+ICvCoMKgwqAgfSwK PiDCoH07Cj4gwqAKPiDCoHN0YXRpYyBjb25zdCBBVkZpbHRlckZvcm1hdHNNZXJnZXIgbWVyZ2Vy c19hdWRpb1tdID0gewo+IEBAIC01OTQsNiArNjI4LDMzIEBAIEFWRmlsdGVyQ2hhbm5lbExheW91 dHMgKmZmX2FsbF9jaGFubmVsX2NvdW50cyh2b2lkKQo+IMKgwqDCoMKgIHJldHVybiByZXQ7Cj4g wqB9Cj4gwqAKPiArQVZGaWx0ZXJGb3JtYXRzICpmZl9hbGxfY29sb3Jfc3BhY2VzKHZvaWQpCj4g K3sKPiArwqDCoMKgIEFWRmlsdGVyRm9ybWF0cyAqcmV0ID0gTlVMTDsKPiArwqDCoMKgIGlmIChm Zl9hZGRfZm9ybWF0KCZyZXQsIEFWQ09MX1NQQ19VTlNQRUNJRklFRCkgPCAwKQo+ICvCoMKgwqDC oMKgwqDCoCByZXR1cm4gTlVMTDsKPiArwqDCoMKgIGZvciAoaW50IGNzcCA9IDA7IGNzcCA8IEFW Q09MX1NQQ19OQjsgY3NwKyspIHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGNzcCA9PSBBVkNPTF9T UENfUkVTRVJWRUQgfHwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjc3AgPT0gQVZDT0xfU1BD X1VOU1BFQ0lGSUVEKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+ICvCoMKg wqDCoMKgwqDCoCBpZiAoZmZfYWRkX2Zvcm1hdCgmcmV0LCBjc3ApIDwgMCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiArwqDCoMKgIH0KPiArCj4gK8KgwqDCoCByZXR1 cm4gcmV0Owo+ICt9Cj4gKwo+ICtBVkZpbHRlckZvcm1hdHMgKmZmX2FsbF9jb2xvcl9yYW5nZXMo dm9pZCkKPiArewo+ICvCoMKgwqAgQVZGaWx0ZXJGb3JtYXRzICpyZXQgPSBOVUxMOwo+ICvCoMKg wqAgZm9yIChpbnQgcmFuZ2UgPSAwOyByYW5nZSA8IEFWQ09MX1JBTkdFX05COyByYW5nZSsrKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgIGlmIChmZl9hZGRfZm9ybWF0KCZyZXQsIHJhbmdlKSA8IDApCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIE5VTEw7Cj4gK8KgwqDCoCB9Cj4gKwo+ICvC oMKgwqAgcmV0dXJuIHJldDsKPiArfQo+ICsKPiDCoCNkZWZpbmUgRk9STUFUU19SRUYoZiwgcmVm LAo+IHVucmVmX2ZuKcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqAgdm9p ZAo+ICp0bXA7wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBcCj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgCj4gwqDCoCBcCj4gQEAgLTc2Myw2ICs4MjQsNDIgQEAgaW50IGZmX3Nl dF9jb21tb25fYWxsX3NhbXBsZXJhdGVzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+IMKgwqDCoMKg IHJldHVybiBmZl9zZXRfY29tbW9uX3NhbXBsZXJhdGVzKGN0eCwgZmZfYWxsX3NhbXBsZXJhdGVz KCkpOwo+IMKgfQo+IMKgCj4gK2ludCBmZl9zZXRfY29tbW9uX2NvbG9yX3NwYWNlcyhBVkZpbHRl ckNvbnRleHQgKmN0eCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgIEFWRmlsdGVyRm9ybWF0cyAqY29sb3Jfc3BhY2VzKQo+ICt7 Cj4gK8KgwqDCoCBTRVRfQ09NTU9OX0ZPUk1BVFMoY3R4LCBjb2xvcl9zcGFjZXMsIEFWTUVESUFf VFlQRV9WSURFTywKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgZmZfZm9ybWF0c19yZWYsIGZmX2Zvcm1hdHNfdW5yZWYpOwo+ICt9Cj4gKwo+ICtpbnQgZmZf c2V0X2NvbW1vbl9jb2xvcl9zcGFjZXNfZnJvbV9saXN0KEFWRmlsdGVyQ29udGV4dCAqY3R4LAo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBpbnQgKmNvbG9yX3JhbmdlcykKPiArewo+ ICvCoMKgwqAgcmV0dXJuIGZmX3NldF9jb21tb25fY29sb3Jfc3BhY2VzKGN0eCwKPiBmZl9tYWtl X2Zvcm1hdF9saXN0KGNvbG9yX3JhbmdlcykpOwo+ICt9Cj4gKwo+ICtpbnQgZmZfc2V0X2NvbW1v bl9hbGxfY29sb3Jfc3BhY2VzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+ICt7Cj4gK8KgwqDCoCBy ZXR1cm4gZmZfc2V0X2NvbW1vbl9jb2xvcl9zcGFjZXMoY3R4LCBmZl9hbGxfY29sb3Jfc3BhY2Vz KCkpOwo+ICt9Cj4gKwo+ICtpbnQgZmZfc2V0X2NvbW1vbl9jb2xvcl9yYW5nZXMoQVZGaWx0ZXJD b250ZXh0ICpjdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBBVkZpbHRlckZvcm1hdHMgKmNvbG9yX3JhbmdlcykKPiArewo+ ICvCoMKgwqAgU0VUX0NPTU1PTl9GT1JNQVRTKGN0eCwgY29sb3JfcmFuZ2VzLCBBVk1FRElBX1RZ UEVfVklERU8sCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGZmX2Zvcm1hdHNfcmVmLCBmZl9mb3JtYXRzX3VucmVmKTsKPiArfQo+ICsKPiAraW50IGZmX3Nl dF9jb21tb25fY29sb3JfcmFuZ2VzX2Zyb21fbGlzdChBVkZpbHRlckNvbnRleHQgKmN0eCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3QgaW50ICpjb2xvcl9yYW5nZXMpCj4gK3sKPiAr wqDCoMKgIHJldHVybiBmZl9zZXRfY29tbW9uX2NvbG9yX3JhbmdlcyhjdHgsCj4gZmZfbWFrZV9m b3JtYXRfbGlzdChjb2xvcl9yYW5nZXMpKTsKPiArfQo+ICsKPiAraW50IGZmX3NldF9jb21tb25f YWxsX2NvbG9yX3JhbmdlcyhBVkZpbHRlckNvbnRleHQgKmN0eCkKPiArewo+ICvCoMKgwqAgcmV0 dXJuIGZmX3NldF9jb21tb25fY29sb3JfcmFuZ2VzKGN0eCwgZmZfYWxsX2NvbG9yX3Jhbmdlcygp KTsKPiArfQo+ICsKPiDCoC8qKgo+IMKgICogQSBoZWxwZXIgZm9yIHF1ZXJ5X2Zvcm1hdHMoKSB3 aGljaCBzZXRzIGFsbCBsaW5rcyB0byB0aGUgc2FtZSBsaXN0IG9mCj4gwqAgKiBmb3JtYXRzLiBJ ZiB0aGVyZSBhcmUgbm8gbGlua3MgaG9va2VkIHRvIHRoaXMgZmlsdGVyLCB0aGUgbGlzdCBvZiBm b3JtYXRzCj4gaXMKPiBAQCAtODE3LDcgKzkxNCwxNCBAQCBpbnQgZmZfZGVmYXVsdF9xdWVyeV9m b3JtYXRzKEFWRmlsdGVyQ29udGV4dCAqY3R4KQo+IMKgwqDCoMKgIHJldCA9IGZmX3NldF9jb21t b25fZm9ybWF0cyhjdHgsIGZvcm1hdHMpOwo+IMKgwqDCoMKgIGlmIChyZXQgPCAwKQo+IMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiAtwqDCoMKgIGlmICh0eXBlID09IEFWTUVESUFfVFlQ RV9BVURJTykgewo+ICvCoMKgwqAgaWYgKHR5cGUgPT0gQVZNRURJQV9UWVBFX1ZJREVPKSB7Cj4g K8KgwqDCoMKgwqDCoMKgIHJldCA9IGZmX3NldF9jb21tb25fYWxsX2NvbG9yX3NwYWNlcyhjdHgp Owo+ICvCoMKgwqDCoMKgwqDCoCBpZiAocmV0IDwgMCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoCByZXQgPSBmZl9zZXRfY29tbW9uX2FsbF9j b2xvcl9yYW5nZXMoY3R4KTsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKHJldCA8IDApCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiArwqDCoMKgIH0gZWxzZSBpZiAodHlwZSA9 PSBBVk1FRElBX1RZUEVfQVVESU8pIHsKPiDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IGZmX3NldF9j b21tb25fYWxsX2NoYW5uZWxfY291bnRzKGN0eCk7Cj4gwqDCoMKgwqDCoMKgwqDCoCBpZiAocmV0 IDwgMCkKPiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPiBAQCAtOTM1LDYg KzEwMzksMjIgQEAgaW50IGZmX2Zvcm1hdHNfY2hlY2tfc2FtcGxlX3JhdGVzKHZvaWQgKmxvZywg Y29uc3QKPiBBVkZpbHRlckZvcm1hdHMgKmZtdHMpCj4gwqDCoMKgwqAgcmV0dXJuIGNoZWNrX2xp c3QobG9nLCAic2FtcGxlIHJhdGUiLCBmbXRzKTsKPiDCoH0KPiDCoAo+ICtpbnQgZmZfZm9ybWF0 c19jaGVja19jb2xvcl9zcGFjZXModm9pZCAqbG9nLCBjb25zdCBBVkZpbHRlckZvcm1hdHMgKmZt dHMpCj4gK3sKPiArwqDCoMKgIGZvciAoaW50IGkgPSAwOyBmbXRzICYmIGkgPCBmbXRzLT5uYl9m b3JtYXRzOyBpKyspIHsKPiArwqDCoMKgwqDCoMKgwqAgaWYgKGZtdHMtPmZvcm1hdHNbaV0gPT0g QVZDT0xfU1BDX1JFU0VSVkVEKSB7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYXZfbG9nKGxv ZywgQVZfTE9HX0VSUk9SLCAiSW52YWxpZCBjb2xvciByYW5nZVxuIik7Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0dXJuIEFWRVJST1IoRUlOVkFMKTsKPiArwqDCoMKgwqDCoMKgwqAgfQo+ ICvCoMKgwqAgfQo+ICvCoMKgwqAgcmV0dXJuIGNoZWNrX2xpc3QobG9nLCAiY29sb3Igc3BhY2Ui LCBmbXRzKTsKPiArfQo+ICsKPiAraW50IGZmX2Zvcm1hdHNfY2hlY2tfY29sb3JfcmFuZ2VzKHZv aWQgKmxvZywgY29uc3QgQVZGaWx0ZXJGb3JtYXRzICpmbXRzKQo+ICt7Cj4gK8KgwqDCoCByZXR1 cm4gY2hlY2tfbGlzdChsb2csICJjb2xvciByYW5nZSIsIGZtdHMpOwo+ICt9Cj4gKwo+IMKgc3Rh dGljIGludCBsYXlvdXRzX2NvbXBhdGlibGUoY29uc3QgQVZDaGFubmVsTGF5b3V0ICphLCBjb25z dCBBVkNoYW5uZWxMYXlvdXQKPiAqYikKPiDCoHsKPiDCoMKgwqDCoCByZXR1cm4gIWF2X2NoYW5u ZWxfbGF5b3V0X2NvbXBhcmUoYSwgYikgfHwKPiBkaWZmIC0tZ2l0IGEvbGliYXZmaWx0ZXIvZm9y bWF0cy5oIGIvbGliYXZmaWx0ZXIvZm9ybWF0cy5oCj4gaW5kZXggZDQ0ODkwMTA5ZS4uODJiM2Fm NGJlMSAxMDA2NDQKPiAtLS0gYS9saWJhdmZpbHRlci9mb3JtYXRzLmgKPiArKysgYi9saWJhdmZp bHRlci9mb3JtYXRzLmgKPiBAQCAtMTMwLDYgKzEzMCwyMCBAQCBBVkZpbHRlckNoYW5uZWxMYXlv dXRzICpmZl9hbGxfY2hhbm5lbF9jb3VudHModm9pZCk7Cj4gwqBhdl93YXJuX3VudXNlZF9yZXN1 bHQKPiDCoEFWRmlsdGVyQ2hhbm5lbExheW91dHMgKmZmX21ha2VfY2hhbm5lbF9sYXlvdXRfbGlz dChjb25zdCBBVkNoYW5uZWxMYXlvdXQKPiAqZm10cyk7Cj4gwqAKPiArLyoqCj4gKyAqIENvbnN0 cnVjdCBhbiBBVkZpbHRlckZvcm1hdHMgcmVwcmVzZW50aW5nIGFsbCBwb3NzaWJsZSBjb2xvciBz cGFjZXMuCj4gKyAqCj4gKyAqIE5vdGU6IFRoaXMgbGlzdCBkb2VzIG5vdCBpbmNsdWRlIEFWQ09M X1NQQ19SRVNFUlZFRC4KPiArICovCj4gK2F2X3dhcm5fdW51c2VkX3Jlc3VsdAo+ICtBVkZpbHRl ckZvcm1hdHMgKmZmX2FsbF9jb2xvcl9zcGFjZXModm9pZCk7Cj4gKwo+ICsvKioKPiArICogQ29u c3RydWN0IGFuIEFWRmlsdGVyRm9ybWF0cyByZXByZXNlbnRpbmcgYWxsIHBvc3NpYmxlIGNvbG9y IHJhbmdlcy4KPiArICovCj4gK2F2X3dhcm5fdW51c2VkX3Jlc3VsdAo+ICtBVkZpbHRlckZvcm1h dHMgKmZmX2FsbF9jb2xvcl9yYW5nZXModm9pZCk7Cj4gKwo+IMKgLyoqCj4gwqAgKiBIZWxwZXJz IGZvciBxdWVyeV9mb3JtYXRzKCkgd2hpY2ggc2V0IGFsbCBmcmVlIGF1ZGlvIGxpbmtzIHRvIHRo ZSBzYW1lCj4gbGlzdAo+IMKgICogb2YgY2hhbm5lbCBsYXlvdXRzL3NhbXBsZSByYXRlcy4gSWYg dGhlcmUgYXJlIG5vIGxpbmtzIGhvb2tlZCB0byB0aGlzCj4gbGlzdCwKPiBAQCAtMTY1LDYgKzE3 OSwzOCBAQCBpbnQgZmZfc2V0X2NvbW1vbl9zYW1wbGVyYXRlc19mcm9tX2xpc3QoQVZGaWx0ZXJD b250ZXh0Cj4gKmN0eCwKPiDCoGF2X3dhcm5fdW51c2VkX3Jlc3VsdAo+IMKgaW50IGZmX3NldF9j b21tb25fYWxsX3NhbXBsZXJhdGVzKEFWRmlsdGVyQ29udGV4dCAqY3R4KTsKPiDCoAo+ICthdl93 YXJuX3VudXNlZF9yZXN1bHQKPiAraW50IGZmX3NldF9jb21tb25fY29sb3Jfc3BhY2VzKEFWRmls dGVyQ29udGV4dCAqY3R4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgQVZGaWx0ZXJGb3JtYXRzICpjb2xvcl9zcGFjZXMpOwo+ ICsvKioKPiArICogRXF1aXZhbGVudCB0byBmZl9zZXRfY29tbW9uX2NvbG9yX3NwYWNlcyhjdHgs Cj4gZmZfbWFrZV9mb3JtYXRfbGlzdChjb2xvcl9zcGFjZXMpKQo+ICsgKi8KPiArYXZfd2Fybl91 bnVzZWRfcmVzdWx0Cj4gK2ludCBmZl9zZXRfY29tbW9uX2NvbG9yX3NwYWNlc19mcm9tX2xpc3Qo QVZGaWx0ZXJDb250ZXh0ICpjdHgsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGNvbnN0IGlu dCAqY29sb3Jfc3BhY2VzKTsKPiArCj4gKy8qKgo+ICsgKiBFcXVpdmFsZW50IHRvIGZmX3NldF9j b21tb25fY29sb3Jfc3BhY2VzKGN0eCwgZmZfYWxsX2NvbG9yX3NwYWNlcygpKQo+ICsgKi8KPiAr YXZfd2Fybl91bnVzZWRfcmVzdWx0Cj4gK2ludCBmZl9zZXRfY29tbW9uX2FsbF9jb2xvcl9zcGFj ZXMoQVZGaWx0ZXJDb250ZXh0ICpjdHgpOwo+ICsKPiArYXZfd2Fybl91bnVzZWRfcmVzdWx0Cj4g K2ludCBmZl9zZXRfY29tbW9uX2NvbG9yX3JhbmdlcyhBVkZpbHRlckNvbnRleHQgKmN0eCwKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgIEFWRmlsdGVyRm9ybWF0cyAqY29sb3JfcmFuZ2VzKTsKPiArLyoqCj4gKyAqIEVxdWl2YWxl bnQgdG8gZmZfc2V0X2NvbW1vbl9jb2xvcl9yYW5nZXMoY3R4LAo+IGZmX21ha2VfZm9ybWF0X2xp c3QoY29sb3JfcmFuZ2VzKSkKPiArICovCj4gK2F2X3dhcm5fdW51c2VkX3Jlc3VsdAo+ICtpbnQg ZmZfc2V0X2NvbW1vbl9jb2xvcl9yYW5nZXNfZnJvbV9saXN0KEFWRmlsdGVyQ29udGV4dCAqY3R4 LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBpbnQgKmNvbG9yX3Jhbmdlcyk7Cj4g Kwo+ICsvKioKPiArICogRXF1aXZhbGVudCB0byBmZl9zZXRfY29tbW9uX2NvbG9yX3Jhbmdlcyhj dHgsIGZmX2FsbF9jb2xvcl9yYW5nZXMoKSkKPiArICovCj4gK2F2X3dhcm5fdW51c2VkX3Jlc3Vs dAo+ICtpbnQgZmZfc2V0X2NvbW1vbl9hbGxfY29sb3JfcmFuZ2VzKEFWRmlsdGVyQ29udGV4dCAq Y3R4KTsKPiArCj4gwqAvKioKPiDCoCAqIEEgaGVscGVyIGZvciBxdWVyeV9mb3JtYXRzKCkgd2hp Y2ggc2V0cyBhbGwgbGlua3MgdG8gdGhlIHNhbWUgbGlzdCBvZgo+IMKgICogZm9ybWF0cy4gSWYg dGhlcmUgYXJlIG5vIGxpbmtzIGhvb2tlZCB0byB0aGlzIGZpbHRlciwgdGhlIGxpc3Qgb2YgZm9y bWF0cwo+IGlzCj4gQEAgLTMyOCw2ICszNzQsMTQgQEAgaW50IGZmX2Zvcm1hdHNfY2hlY2tfc2Ft cGxlX3JhdGVzKHZvaWQgKmxvZywgY29uc3QKPiBBVkZpbHRlckZvcm1hdHMgKmZtdHMpOwo+IMKg ICovCj4gwqBpbnQgZmZfZm9ybWF0c19jaGVja19jaGFubmVsX2xheW91dHModm9pZCAqbG9nLCBj b25zdCBBVkZpbHRlckNoYW5uZWxMYXlvdXRzCj4gKmZtdHMpOwo+IMKgCj4gKy8qKgo+ICsgKiBD aGVjayB0aGF0IGZtdHMgaXMgYSB2YWxpZCBmb3JtYXRzIGxpc3QgZm9yIFlVViBjb2xvcnNwYWNl IG1ldGFkYXRhLgo+ICsgKgo+ICsgKiBJbiBwYXJ0aWN1bGFyLCBjaGVjayBmb3IgZHVwbGljYXRl cy4KPiArICovCj4gK2ludCBmZl9mb3JtYXRzX2NoZWNrX2NvbG9yX3NwYWNlcyh2b2lkICpsb2cs IGNvbnN0IEFWRmlsdGVyRm9ybWF0cyAqZm10cyk7Cj4gK2ludCBmZl9mb3JtYXRzX2NoZWNrX2Nv bG9yX3Jhbmdlcyh2b2lkICpsb2csIGNvbnN0IEFWRmlsdGVyRm9ybWF0cyAqZm10cyk7Cj4gKwo+ IMKgdHlwZWRlZiBzdHJ1Y3QgQVZGaWx0ZXJGb3JtYXRNZXJnZXIgewo+IMKgwqDCoMKgIHVuc2ln bmVkIG9mZnNldDsKPiDCoMKgwqDCoCBpbnQgKCptZXJnZSkodm9pZCAqYSwgdm9pZCAqYik7Cj4g ZGlmZiAtLWdpdCBhL2xpYmF2ZmlsdGVyL2ludGVybmFsLmggYi9saWJhdmZpbHRlci9pbnRlcm5h bC5oCj4gaW5kZXggMmRiYzVkZWYwYS4uYTZjZGY5OTk0YyAxMDA2NDQKPiAtLS0gYS9saWJhdmZp bHRlci9pbnRlcm5hbC5oCj4gKysrIGIvbGliYXZmaWx0ZXIvaW50ZXJuYWwuaAo+IEBAIC0yMDMs NiArMjAzLDEyIEBAIGVudW0gRmlsdGVyRm9ybWF0c1N0YXRlIHsKPiDCoCAqLwo+IMKgaW50IGZm X2ZtdF9pc19pbihpbnQgZm10LCBjb25zdCBpbnQgKmZtdHMpOwo+IMKgCj4gKy8qKgo+ICsgKiBS ZXR1cm5zIHRydWUgaWYgYSBwaXhlbCBmb3JtYXQgaXMgInJlZ3VsYXIgWVVWIiwgd2hpY2ggaW5j bHVkZXMgYWxsIHBpeGVsCj4gKyAqIGZvcm1hdHMgdGhhdCBhcmUgYWZmZWN0ZWQgYnkgWVVWIGNv bG9yc3BhY2UgbmVnb3RpYXRpb24uCj4gKyAqLwo+ICtpbnQgZmZfZm10X2lzX3JlZ3VsYXJfeXV2 KGVudW0gQVZQaXhlbEZvcm1hdCBmbXQpOwo+ICsKPiDCoC8qIEZ1bmN0aW9ucyB0byBwYXJzZSBh dWRpbyBmb3JtYXQgYXJndW1lbnRzICovCj4gwqAKPiDCoC8qKgo+IGRpZmYgLS1naXQgYS9saWJh dmZpbHRlci92YWFwaV92cHAuYyBiL2xpYmF2ZmlsdGVyL3ZhYXBpX3ZwcC5jCj4gaW5kZXggY2Yy NTkyZTA2OC4uNTk5NjFiZmE0YSAxMDA2NDQKPiAtLS0gYS9saWJhdmZpbHRlci92YWFwaV92cHAu Ywo+ICsrKyBiL2xpYmF2ZmlsdGVyL3ZhYXBpX3ZwcC5jCj4gQEAgLTM4LDYgKzM4LDEwIEBAIGlu dCBmZl92YWFwaV92cHBfcXVlcnlfZm9ybWF0cyhBVkZpbHRlckNvbnRleHQgKmF2Y3R4KQo+IMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmYXZjdHgtPm91dHB1dHNbMF0tPmluY2ZnLmZvcm1hdHMpKSA8IDApCj4gwqDCoMKgwqDCoMKg wqDCoCByZXR1cm4gZXJyOwo+IMKgCj4gK8KgwqDCoCBpZiAoKGVyciA9IGZmX3NldF9jb21tb25f YWxsX2NvbG9yX3NwYWNlcyhhdmN0eCkpIDwgMCB8fAo+ICvCoMKgwqDCoMKgwqDCoCAoZXJyID0g ZmZfc2V0X2NvbW1vbl9hbGxfY29sb3JfcmFuZ2VzKGF2Y3R4KSkgPCAwKQo+ICvCoMKgwqDCoMKg wqDCoCByZXR1cm4gZXJyOwo+ICsKPiDCoMKgwqDCoCByZXR1cm4gMDsKPiDCoH0KPiDCoAo+IGRp ZmYgLS1naXQgYS9saWJhdmZpbHRlci92aWRlby5jIGIvbGliYXZmaWx0ZXIvdmlkZW8uYwo+IGlu ZGV4IDQyZWViOThjMjguLjI0Mzc2MmM4ZmQgMTAwNjQ0Cj4gLS0tIGEvbGliYXZmaWx0ZXIvdmlk ZW8uYwo+ICsrKyBiL2xpYmF2ZmlsdGVyL3ZpZGVvLmMKPiBAQCAtOTYsNiArOTYsOCBAQCBBVkZy YW1lICpmZl9kZWZhdWx0X2dldF92aWRlb19idWZmZXIyKEFWRmlsdGVyTGluayAqbGluaywKPiBp bnQgdywgaW50IGgsIGludCBhbGlnCj4gwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gTlVMTDsKPiDC oAo+IMKgwqDCoMKgIGZyYW1lLT5zYW1wbGVfYXNwZWN0X3JhdGlvID0gbGluay0+c2FtcGxlX2Fz cGVjdF9yYXRpbzsKPiArwqDCoMKgIGZyYW1lLT5jb2xvcnNwYWNlwqAgPSBsaW5rLT5jb2xvcnNw YWNlOwo+ICvCoMKgwqAgZnJhbWUtPmNvbG9yX3JhbmdlID0gbGluay0+Y29sb3JfcmFuZ2U7Cj4g wqAKPiDCoMKgwqDCoCByZXR1cm4gZnJhbWU7Cj4gwqB9Cj4gZGlmZiAtLWdpdCBhL3Rlc3RzL3Jl Zi9mYXRlL3Nob3J0ZXN0LXN1YiBiL3Rlc3RzL3JlZi9mYXRlL3Nob3J0ZXN0LXN1Ygo+IGluZGV4 IDljYWVlNTg3Y2UuLjE2YjEzMjRlODMgMTAwNjQ0Cj4gLS0tIGEvdGVzdHMvcmVmL2ZhdGUvc2hv cnRlc3Qtc3ViCj4gKysrIGIvdGVzdHMvcmVmL2ZhdGUvc2hvcnRlc3Qtc3ViCj4gQEAgLTEsNSAr MSw1IEBACj4gLTczZDE0MmE4MDk2NWY5ZTA4ODRhNTg2M2FiZGUwZGFiICp0ZXN0cy9kYXRhL2Zh dGUvc2hvcnRlc3Qtc3ViLm1hdHJvc2thCj4gLTEzOTI0OSB0ZXN0cy9kYXRhL2ZhdGUvc2hvcnRl c3Qtc3ViLm1hdHJvc2thCj4gK2Q2NjA4Mjc3YzkzMDk3MzgzZTYyMzg4MTk2ZGM2MmYwICp0ZXN0 cy9kYXRhL2ZhdGUvc2hvcnRlc3Qtc3ViLm1hdHJvc2thCj4gKzEzOTI2MCB0ZXN0cy9kYXRhL2Zh dGUvc2hvcnRlc3Qtc3ViLm1hdHJvc2thCj4gwqAjZXh0cmFkYXRhIDE6wqDCoMKgwqDCoCAxNjcs IDB4ZjcyNzJkNWYKPiDCoCN0YiAwOiAxLzEwMDAKPiDCoCNtZWRpYV90eXBlIDA6IHZpZGVvCgpf X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpmZm1wZWctZGV2 ZWwgbWFpbGluZyBsaXN0CmZmbXBlZy1kZXZlbEBmZm1wZWcub3JnCmh0dHBzOi8vZmZtcGVnLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2ZmbXBlZy1kZXZlbAoKVG8gdW5zdWJzY3JpYmUsIHZpc2l0IGxp bmsgYWJvdmUsIG9yIGVtYWlsCmZmbXBlZy1kZXZlbC1yZXF1ZXN0QGZmbXBlZy5vcmcgd2l0aCBz dWJqZWN0ICJ1bnN1YnNjcmliZSIuCg==