From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 6D6CDC4332F for ; Tue, 17 May 2022 19:02:22 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352470AbiEQTCU (ORCPT ); Tue, 17 May 2022 15:02:20 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:34402 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352468AbiEQTCT (ORCPT ); Tue, 17 May 2022 15:02:19 -0400 Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 082514ECC3; Tue, 17 May 2022 12:02:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652814138; x=1684350138; h=message-id:subject:from:to:cc:date:in-reply-to: references:mime-version:content-transfer-encoding; bh=yEaVc81MOy5X/kSae+wqdeMCXD3tlK4JBj7Cvx13aao=; b=mAd/cy7SAub2WAV4rVmhEIgzA2RRV9sc3SAG/JsDbgnS0S/vCMQyETPc 0bunqRd2Gls04iZ9Rhg35B/zZenf0qTyb9AjoSm6t/CS1kBskHBxFtZ4v W9C9dQnBzSn9dAdE6fxzitLw9YdhEfjpCHh+Jh24122ywaJTIErcMAvvk sQTanp1uQJy7/qmwexdG/Vpx+PT0WoS7rBDEOwSf/GbGyP6XVqkI7w2AK /dFpBNn1AqWWLCFQ0Dd7aYjcIt4LND6pF4uGH4YGG0JSzdxgL3Kmlv1Ml bYEjhqsMVovpB/A+vsrE4nnSZrG2N10qL4dZXTSnIfcfQWwVaedFXOWTh Q==; X-IronPort-AV: E=McAfee;i="6400,9594,10350"; a="253338949" X-IronPort-AV: E=Sophos;i="5.91,233,1647327600"; d="scan'208";a="253338949" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2022 12:02:17 -0700 X-IronPort-AV: E=Sophos;i="5.91,233,1647327600"; d="scan'208";a="605496002" Received: from abhuwalk-mobl1.amr.corp.intel.com (HELO spandruv-desk1.amr.corp.intel.com) ([10.212.246.60]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2022 12:02:16 -0700 Message-ID: Subject: Re: [PATCH v2 01/14] thermal/core: Change thermal_zone_ops to thermal_sensor_ops From: srinivas pandruvada To: "Rafael J. Wysocki" Cc: Daniel Lezcano , Daniel Lezcano , Kevin Hilman , Alexandre Bailon , Linux PM , Linux Kernel Mailing List , Amit Kucheria , Zhang Rui , Jonathan Corbet , Len Brown , Raju Rangoju , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Ido Schimmel , Petr Machata , Luca Coelho , Kalle Valo , Peter Kaestle , Hans de Goede , Mark Gross , Sebastian Reichel , Miquel Raynal , Support Opensource , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Niklas =?ISO-8859-1?Q?S=F6derlund?= , Miri Korenblit , Johannes Berg , Sumeet Pawnikar , Dan Carpenter , Chuansheng Liu , Jiasheng Jiang , Antoine Tenart , Andy Shevchenko , "open list:DOCUMENTATION" , "open list:ACPI THERMAL DRIVER" , "open list:CXGB4 ETHERNET DRIVER (CXGB4)" , "open list:INTEL WIRELESS WIFI LINK (iwlwifi)" , "open list:ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , "open list:RENESAS R-CAR THERMAL DRIVERS" Date: Tue, 17 May 2022 12:02:13 -0700 In-Reply-To: References: <20220507125443.2766939-1-daniel.lezcano@linexp.org> <20220507125443.2766939-2-daniel.lezcano@linexp.org> <7b1a9f3b5b5087f47bf4839858c7bfebdb60aa2f.camel@linux.intel.com> Content-Type: text/plain; charset="UTF-8" User-Agent: Evolution 3.42.4 (3.42.4-2.fc35) MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org On Tue, 2022-05-17 at 20:53 +0200, Rafael J. Wysocki wrote: > On Tue, May 17, 2022 at 6:51 PM srinivas pandruvada > wrote: > > > > On Tue, 2022-05-17 at 17:42 +0200, Rafael J. Wysocki wrote: > > > On Sat, May 7, 2022 at 2:55 PM Daniel Lezcano > > > wrote: > > > > > > > > A thermal zone is software abstraction of a sensor associated > > > > with > > > > properties and cooling devices if any. > > > > > > > > The fact that we have thermal_zone and thermal_zone_ops mixed > > > > is > > > > confusing and does not clearly identify the different > > > > components > > > > entering in the thermal management process. A thermal zone > > > > appears > > > > to > > > > be a sensor while it is not. > > > > > > Well, the majority of the operations in thermal_zone_ops don't > > > apply > > > to thermal sensors.  For example, ->set_trips(), - > > > >get_trip_type(), > > > ->get_trip_temp(). > > > > > In past we discussed adding thermal sensor sysfs with threshold to > > notify temperature. > > > > So sensor can have set/get_threshold() functions instead of the > > set/get_trip for zones. > > > > Like we have /sys/class/thermal_zone* we can have > > /sys/class/thermal_sensor*. > > Exactly, so renaming thermal_zone_ops as thermal_sensor_ops isn't > quite helpful in this respect. > > IMO there should be operations for sensors and there should be > operations for thermal zones and those two sets of operations should > be different. > > > Thermal sensor(s) are bound to  thermal zones. > > So I think that this binding should be analogous to the binding > between thermal zones and cooling devices. > > > This can also include multiple sensors in a zone and can create a > > virtual sensor also. > > It can. > > However, what's the difference between a thermal zone with multiple > sensors and a thermal zone with one virtual sensor being an aggregate > of multiple physical sensors? > Either way is fine. A thermal sensor can be aggregate of other sensors. > Both involve some type of aggregation of temperature values measured > by the physical sensors. > > > > > In order to set the scene for multiple thermal sensors > > > > aggregated > > > > into > > > > a single thermal zone. Rename the thermal_zone_ops to > > > > thermal_sensor_ops, that will appear clearyl the thermal zone > > > > is > > > > not a > > > > sensor but an abstraction of one [or multiple] sensor(s). > > > > > > So I'm not convinced that the renaming mentioned above is > > > particularly > > > clean either. > > > > > > IMV the way to go would be to split the thermal sensor > > > operations, > > > like ->get_temp(), out of thermal_zone_ops. > > > > > > But then it is not clear what a thermal zone with multiple > > > sensors in > > > it really means.  I guess it would require an aggregation > > > function to > > > combine the thermal sensors in it that would produce an effective > > > temperature to check against the trip points. > > > > > > Honestly, I don't think that setting a separate set of trips for > > > each > > > sensor in a thermal zone would make a lot of sense. > > From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 308BCC433EF for ; Tue, 17 May 2022 19:03:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Date:Cc:To:From:Subject:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=6nrLKT8YKqov+Bk4ZEd0NiSrNPDzxlh+/pvgm11QPW4=; b=LmWT5ARcG30vnV 0QyqbmkBNzzz+ILccfldFrGRfHyrnM8nvocOPVlZFMBwSRHVULfMNwQUI7crk3oKOjh/j6yvZ8vOK UrjRpvyk61i4j9ka5U2E/87YG/zkLsZgJUt1CNpaAs42GMJInyNX4wkpidJ9ZOUma/eKjyw53zRVJ /UqBkrCN5i/6rQJUmG6CViP9RjDLDSyOp7OsvM52xvPP0iC8VSyLPU4gBJZjQ6KvtTV5/rqy+ov7u xFpyHPGHhHpwgb6lBGFXMi1h2ndiSEmyEjLxfiUWw58B+jsiiXChgJOp1ml/XEg934cjWqKzlBMaY UIKetMqWN+ReM1GmwvsA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr2Si-00FTul-JN; Tue, 17 May 2022 19:02:28 +0000 Received: from mga02.intel.com ([134.134.136.20]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr2Sf-00FTs2-8u for linux-arm-kernel@lists.infradead.org; Tue, 17 May 2022 19:02:26 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1652814145; x=1684350145; h=message-id:subject:from:to:cc:date:in-reply-to: references:mime-version:content-transfer-encoding; bh=yEaVc81MOy5X/kSae+wqdeMCXD3tlK4JBj7Cvx13aao=; b=d/4UdzOu3BT9aM9V5K47oxpA90IH36NeCiUbrt33duUIwQA7kmt48Un+ fSJVBAwNsNyNDFLgaz61ldWi1HSjS1QzbH6kIvOMd7gWnHBWNxRXGhzRp iBF6GVww+2iD9i5ZNO7gVCGcuN/UKbfjBCSpuLZ2zZuih0cgDUVKd79kT KAe35amnY0DiVJ+GCs7k0+zSgxsd9KwXpQaVRPu03nqtOTqRa2DS31MVY rTxg2AMY2ydgjLuPGpTMUauuYhleH8h/INWHnfq3qVLo8lQwZdkKV7DXl 6GIZAMHn5Haw5bjYcaiHlwn7/vTYJcD4FdnykWL7GgZdMlR5hzQnT7YFl g==; X-IronPort-AV: E=McAfee;i="6400,9594,10350"; a="258854673" X-IronPort-AV: E=Sophos;i="5.91,233,1647327600"; d="scan'208";a="258854673" Received: from orsmga001.jf.intel.com ([10.7.209.18]) by orsmga101.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2022 12:02:17 -0700 X-IronPort-AV: E=Sophos;i="5.91,233,1647327600"; d="scan'208";a="605496002" Received: from abhuwalk-mobl1.amr.corp.intel.com (HELO spandruv-desk1.amr.corp.intel.com) ([10.212.246.60]) by orsmga001-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 May 2022 12:02:16 -0700 Message-ID: Subject: Re: [PATCH v2 01/14] thermal/core: Change thermal_zone_ops to thermal_sensor_ops From: srinivas pandruvada To: "Rafael J. Wysocki" Cc: Daniel Lezcano , Daniel Lezcano , Kevin Hilman , Alexandre Bailon , Linux PM , Linux Kernel Mailing List , Amit Kucheria , Zhang Rui , Jonathan Corbet , Len Brown , Raju Rangoju , "David S. Miller" , Jakub Kicinski , Paolo Abeni , Ido Schimmel , Petr Machata , Luca Coelho , Kalle Valo , Peter Kaestle , Hans de Goede , Mark Gross , Sebastian Reichel , Miquel Raynal , Support Opensource , Shawn Guo , Sascha Hauer , Pengutronix Kernel Team , Fabio Estevam , NXP Linux Team , Niklas =?ISO-8859-1?Q?S=F6derlund?= , Miri Korenblit , Johannes Berg , Sumeet Pawnikar , Dan Carpenter , Chuansheng Liu , Jiasheng Jiang , Antoine Tenart , Andy Shevchenko , "open list:DOCUMENTATION" , "open list:ACPI THERMAL DRIVER" , "open list:CXGB4 ETHERNET DRIVER (CXGB4)" , "open list:INTEL WIRELESS WIFI LINK (iwlwifi)" , "open list:ACER ASPIRE ONE TEMPERATURE AND FAN DRIVER" , "moderated list:ARM/FREESCALE IMX / MXC ARM ARCHITECTURE" , "open list:RENESAS R-CAR THERMAL DRIVERS" Date: Tue, 17 May 2022 12:02:13 -0700 In-Reply-To: References: <20220507125443.2766939-1-daniel.lezcano@linexp.org> <20220507125443.2766939-2-daniel.lezcano@linexp.org> <7b1a9f3b5b5087f47bf4839858c7bfebdb60aa2f.camel@linux.intel.com> User-Agent: Evolution 3.42.4 (3.42.4-2.fc35) MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220517_120225_382683_EEE016C4 X-CRM114-Status: GOOD ( 39.08 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gVHVlLCAyMDIyLTA1LTE3IGF0IDIwOjUzICswMjAwLCBSYWZhZWwgSi4gV3lzb2NraSB3cm90 ZToKPiBPbiBUdWUsIE1heSAxNywgMjAyMiBhdCA2OjUxIFBNIHNyaW5pdmFzIHBhbmRydXZhZGEK PiA8c3Jpbml2YXMucGFuZHJ1dmFkYUBsaW51eC5pbnRlbC5jb20+IHdyb3RlOgo+ID4gCj4gPiBP biBUdWUsIDIwMjItMDUtMTcgYXQgMTc6NDIgKzAyMDAsIFJhZmFlbCBKLiBXeXNvY2tpIHdyb3Rl Ogo+ID4gPiBPbiBTYXQsIE1heSA3LCAyMDIyIGF0IDI6NTUgUE0gRGFuaWVsIExlemNhbm8KPiA+ ID4gPGRhbmllbC5sZXpjYW5vQGxpbmV4cC5vcmc+IHdyb3RlOgo+ID4gPiA+IAo+ID4gPiA+IEEg dGhlcm1hbCB6b25lIGlzIHNvZnR3YXJlIGFic3RyYWN0aW9uIG9mIGEgc2Vuc29yIGFzc29jaWF0 ZWQKPiA+ID4gPiB3aXRoCj4gPiA+ID4gcHJvcGVydGllcyBhbmQgY29vbGluZyBkZXZpY2VzIGlm IGFueS4KPiA+ID4gPiAKPiA+ID4gPiBUaGUgZmFjdCB0aGF0IHdlIGhhdmUgdGhlcm1hbF96b25l IGFuZCB0aGVybWFsX3pvbmVfb3BzIG1peGVkCj4gPiA+ID4gaXMKPiA+ID4gPiBjb25mdXNpbmcg YW5kIGRvZXMgbm90IGNsZWFybHkgaWRlbnRpZnkgdGhlIGRpZmZlcmVudAo+ID4gPiA+IGNvbXBv bmVudHMKPiA+ID4gPiBlbnRlcmluZyBpbiB0aGUgdGhlcm1hbCBtYW5hZ2VtZW50IHByb2Nlc3Mu IEEgdGhlcm1hbCB6b25lCj4gPiA+ID4gYXBwZWFycwo+ID4gPiA+IHRvCj4gPiA+ID4gYmUgYSBz ZW5zb3Igd2hpbGUgaXQgaXMgbm90Lgo+ID4gPiAKPiA+ID4gV2VsbCwgdGhlIG1ham9yaXR5IG9m IHRoZSBvcGVyYXRpb25zIGluIHRoZXJtYWxfem9uZV9vcHMgZG9uJ3QKPiA+ID4gYXBwbHkKPiA+ ID4gdG8gdGhlcm1hbCBzZW5zb3JzLsKgIEZvciBleGFtcGxlLCAtPnNldF90cmlwcygpLCAtCj4g PiA+ID5nZXRfdHJpcF90eXBlKCksCj4gPiA+IC0+Z2V0X3RyaXBfdGVtcCgpLgo+ID4gPiAKPiA+ IEluIHBhc3Qgd2UgZGlzY3Vzc2VkIGFkZGluZyB0aGVybWFsIHNlbnNvciBzeXNmcyB3aXRoIHRo cmVzaG9sZCB0bwo+ID4gbm90aWZ5IHRlbXBlcmF0dXJlLgo+ID4gCj4gPiBTbyBzZW5zb3IgY2Fu IGhhdmUgc2V0L2dldF90aHJlc2hvbGQoKSBmdW5jdGlvbnMgaW5zdGVhZCBvZiB0aGUKPiA+IHNl dC9nZXRfdHJpcCBmb3Igem9uZXMuCj4gPiAKPiA+IExpa2Ugd2UgaGF2ZSAvc3lzL2NsYXNzL3Ro ZXJtYWxfem9uZSogd2UgY2FuIGhhdmUKPiA+IC9zeXMvY2xhc3MvdGhlcm1hbF9zZW5zb3IqLgo+ IAo+IEV4YWN0bHksIHNvIHJlbmFtaW5nIHRoZXJtYWxfem9uZV9vcHMgYXMgdGhlcm1hbF9zZW5z b3Jfb3BzIGlzbid0Cj4gcXVpdGUgaGVscGZ1bCBpbiB0aGlzIHJlc3BlY3QuCj4gCj4gSU1PIHRo ZXJlIHNob3VsZCBiZSBvcGVyYXRpb25zIGZvciBzZW5zb3JzIGFuZCB0aGVyZSBzaG91bGQgYmUK PiBvcGVyYXRpb25zIGZvciB0aGVybWFsIHpvbmVzIGFuZCB0aG9zZSB0d28gc2V0cyBvZiBvcGVy YXRpb25zIHNob3VsZAo+IGJlIGRpZmZlcmVudC4KPiAKPiA+IFRoZXJtYWwgc2Vuc29yKHMpIGFy ZSBib3VuZCB0b8KgIHRoZXJtYWwgem9uZXMuCj4gCj4gU28gSSB0aGluayB0aGF0IHRoaXMgYmlu ZGluZyBzaG91bGQgYmUgYW5hbG9nb3VzIHRvIHRoZSBiaW5kaW5nCj4gYmV0d2VlbiB0aGVybWFs IHpvbmVzIGFuZCBjb29saW5nIGRldmljZXMuCj4gCj4gPiBUaGlzIGNhbiBhbHNvIGluY2x1ZGUg bXVsdGlwbGUgc2Vuc29ycyBpbiBhIHpvbmUgYW5kIGNhbiBjcmVhdGUgYQo+ID4gdmlydHVhbCBz ZW5zb3IgYWxzby4KPiAKPiBJdCBjYW4uCj4gCj4gSG93ZXZlciwgd2hhdCdzIHRoZSBkaWZmZXJl bmNlIGJldHdlZW4gYSB0aGVybWFsIHpvbmUgd2l0aCBtdWx0aXBsZQo+IHNlbnNvcnMgYW5kIGEg dGhlcm1hbCB6b25lIHdpdGggb25lIHZpcnR1YWwgc2Vuc29yIGJlaW5nIGFuIGFnZ3JlZ2F0ZQo+ IG9mIG11bHRpcGxlIHBoeXNpY2FsIHNlbnNvcnM/Cj4gCkVpdGhlciB3YXkgaXMgZmluZS4gQSB0 aGVybWFsIHNlbnNvciBjYW4gYmUgYWdncmVnYXRlIG9mIG90aGVyIHNlbnNvcnMuCgo+IEJvdGgg aW52b2x2ZSBzb21lIHR5cGUgb2YgYWdncmVnYXRpb24gb2YgdGVtcGVyYXR1cmUgdmFsdWVzIG1l YXN1cmVkCj4gYnkgdGhlIHBoeXNpY2FsIHNlbnNvcnMuCj4gCj4gPiA+ID4gSW4gb3JkZXIgdG8g c2V0IHRoZSBzY2VuZSBmb3IgbXVsdGlwbGUgdGhlcm1hbCBzZW5zb3JzCj4gPiA+ID4gYWdncmVn YXRlZAo+ID4gPiA+IGludG8KPiA+ID4gPiBhIHNpbmdsZSB0aGVybWFsIHpvbmUuIFJlbmFtZSB0 aGUgdGhlcm1hbF96b25lX29wcyB0bwo+ID4gPiA+IHRoZXJtYWxfc2Vuc29yX29wcywgdGhhdCB3 aWxsIGFwcGVhciBjbGVhcnlsIHRoZSB0aGVybWFsIHpvbmUKPiA+ID4gPiBpcwo+ID4gPiA+IG5v dCBhCj4gPiA+ID4gc2Vuc29yIGJ1dCBhbiBhYnN0cmFjdGlvbiBvZiBvbmUgW29yIG11bHRpcGxl XSBzZW5zb3IocykuCj4gPiA+IAo+ID4gPiBTbyBJJ20gbm90IGNvbnZpbmNlZCB0aGF0IHRoZSBy ZW5hbWluZyBtZW50aW9uZWQgYWJvdmUgaXMKPiA+ID4gcGFydGljdWxhcmx5Cj4gPiA+IGNsZWFu IGVpdGhlci4KPiA+ID4gCj4gPiA+IElNViB0aGUgd2F5IHRvIGdvIHdvdWxkIGJlIHRvIHNwbGl0 IHRoZSB0aGVybWFsIHNlbnNvcgo+ID4gPiBvcGVyYXRpb25zLAo+ID4gPiBsaWtlIC0+Z2V0X3Rl bXAoKSwgb3V0IG9mIHRoZXJtYWxfem9uZV9vcHMuCj4gPiA+IAo+ID4gPiBCdXQgdGhlbiBpdCBp cyBub3QgY2xlYXIgd2hhdCBhIHRoZXJtYWwgem9uZSB3aXRoIG11bHRpcGxlCj4gPiA+IHNlbnNv cnMgaW4KPiA+ID4gaXQgcmVhbGx5IG1lYW5zLsKgIEkgZ3Vlc3MgaXQgd291bGQgcmVxdWlyZSBh biBhZ2dyZWdhdGlvbgo+ID4gPiBmdW5jdGlvbiB0bwo+ID4gPiBjb21iaW5lIHRoZSB0aGVybWFs IHNlbnNvcnMgaW4gaXQgdGhhdCB3b3VsZCBwcm9kdWNlIGFuIGVmZmVjdGl2ZQo+ID4gPiB0ZW1w ZXJhdHVyZSB0byBjaGVjayBhZ2FpbnN0IHRoZSB0cmlwIHBvaW50cy4KPiA+ID4gCj4gPiA+IEhv bmVzdGx5LCBJIGRvbid0IHRoaW5rIHRoYXQgc2V0dGluZyBhIHNlcGFyYXRlIHNldCBvZiB0cmlw cyBmb3IKPiA+ID4gZWFjaAo+ID4gPiBzZW5zb3IgaW4gYSB0aGVybWFsIHpvbmUgd291bGQgbWFr ZSBhIGxvdCBvZiBzZW5zZS4KPiA+IAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFybS1r ZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWls bWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK