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 E68D2C433F5 for ; Thu, 5 May 2022 12:54:04 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345437AbiEEM5j (ORCPT ); Thu, 5 May 2022 08:57:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36910 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234636AbiEEM5j (ORCPT ); Thu, 5 May 2022 08:57:39 -0400 Received: from alexa-out-sd-02.qualcomm.com (alexa-out-sd-02.qualcomm.com [199.106.114.39]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 7B1DF56216; Thu, 5 May 2022 05:53:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1651755239; x=1683291239; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=HwR97P478iK45CdIdkPRinoYCx69pi/2Zftw98mI8mM=; b=imP2wIuGUHJ3ctlzZ5BXmOGMs7TBlx69JUuLW3II3Nc+oYRhOH0YO2xY JFkeeB6auDCCbCj4a7GTN2HYedaX4nCKsmsYJI2aEioxqM23lrJQ4Lr/d U2QgjGHwGqGSzD/7tGPkMoFelepVCv7eC1wFi+Ca5vb6R+E78ArGtfXpF A=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-02.qualcomm.com with ESMTP; 05 May 2022 05:53:58 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg03-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2022 05:53:57 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 5 May 2022 05:53:57 -0700 Received: from [10.79.142.210] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 5 May 2022 05:53:53 -0700 Message-ID: <0997f2bc-e8ce-24cc-da90-0ecd3201350c@quicinc.com> Date: Thu, 5 May 2022 18:23:20 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH V7 2/7] soc: qcom: dcc:Add driver support for Data Capture and Compare unit(DCC) Content-Language: en-CA To: Bjorn Andersson CC: Andy Gross , Rob Herring , "Alex Elder" , , , , , Sai Prakash Ranjan , Sibi Sankar , Rajendra Nayak , References: From: Souradeep Chowdhury In-Reply-To: Content-Type: text/plain; charset="UTF-8"; format=flowed Content-Transfer-Encoding: 8bit X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) Precedence: bulk List-ID: X-Mailing-List: linux-arm-msm@vger.kernel.org On 5/3/2022 11:33 PM, Bjorn Andersson wrote: > On Thu 03 Mar 00:27 CST 2022, Souradeep Chowdhury wrote: > >> The DCC is a DMA Engine designed to capture and store data >> during system crash or software triggers. The DCC operates >> based on user inputs via the sysfs interface. The user gives >> addresses as inputs and these addresses are stored in the >> dcc sram. In case of a system crash or a manual software >> trigger by the user through the debugfs interface, >> the dcc captures and stores the values at these addresses. >> This patch contains the driver which has all the methods >> pertaining to the debugfs interface, auxiliary functions to >> support all the four fundamental operations of dcc namely >> read, write, read/modify/write and loop. The probe method >> here instantiates all the resources necessary for dcc to >> operate mainly the dedicated dcc sram where it stores the >> values. The DCC driver can be used for debugging purposes >> without going for a reboot since it can perform software >> triggers as well based on user inputs. >> >> Also added the documentation for debugfs entries and explained >> the functionalities of each debugfs file that has been created >> for dcc. >> >> The following is the justification of using debugfs interface >> over the other alternatives like sysfs/ioctls >> >> i) As can be seen from the debugfs attribute descriptions, >> some of the debugfs attribute files here contains multiple >> arguments which needs to be accepted from the user. This goes >> against the design style of sysfs. >> >> ii) The user input patterns have been made simple and convenient >> in this case with the use of debugfs interface as user doesn't >> need to shuffle between different files to execute one instruction >> as was the case on using other alternatives. >> >> Signed-off-by: Souradeep Chowdhury >> --- >> Documentation/ABI/testing/debugfs-driver-dcc | 124 +++ >> drivers/soc/qcom/Kconfig | 8 + >> drivers/soc/qcom/Makefile | 1 + >> drivers/soc/qcom/dcc.c | 1465 ++++++++++++++++++++++++++ >> 4 files changed, 1598 insertions(+) >> create mode 100644 Documentation/ABI/testing/debugfs-driver-dcc >> create mode 100644 drivers/soc/qcom/dcc.c >> >> diff --git a/Documentation/ABI/testing/debugfs-driver-dcc b/Documentation/ABI/testing/debugfs-driver-dcc >> new file mode 100644 >> index 0000000..70029ab >> --- /dev/null >> +++ b/Documentation/ABI/testing/debugfs-driver-dcc >> @@ -0,0 +1,124 @@ >> +What: /sys/kernel/debug/dcc/.../trigger >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This is the debugfs interface for manual software >> + triggers. The user can simply enter a 1 against >> + the debugfs file and enable a manual trigger. >> + Example: >> + echo 1 > /sys/kernel/debug/dcc/.../trigger >> + >> +What: /sys/kernel/debug/dcc/.../enable >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This debugfs interface is used for enabling the >> + the dcc hardware. On enabling the dcc, all the >> + addresses entered by the user is written into >> + dcc sram which is read by the dcc hardware on >> + manual or crash induced triggers. >> + Example: >> + echo 0 > /sys/bus/platform/devices/.../enable >> + (disable dcc) >> + echo 1 > /sys/bus/platform/devices/.../enable >> + (enable dcc) >> + >> +What: /sys/kernel/debug/dcc/.../config_read > As mentioned last time, I don't like this interface of having 6 files > that the user can write to in order to append items in the currently > selected linked list. > > Why can't this be a single "config" which takes a multiline string of > operations? (Bonus point for supporting appending to the list). > > > This would also serve as a natural place to dump the linked list back to > the user for inspection. Following is the justification of having multiple files in debugfs 1-> Since there are fundamentally 4 instructions for DCC, Read,Write,Read and then Write and Loop,having separate debugfs files for the same makes it        convenient for the user to use this tool and also to document.This also is consistent with the design principles of debugfs as it supports logical segregation        of Debugfs files based on the user instructions. 2-> We are maintaining a common linkedlist inside the driver and it can be viewed by the user through the "config_read" debugfs file. Will be adding this to the        documentation as well. Let me know your thoughts regarding the above. >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This stores the addresses of the registers which >> + needs to be read in case of a hardware crash or >> + manual software triggers. The address entered here >> + are considered under read type instruction. >> + Example: >> + echo <1> <2> <3> >/sys/kernel/debug/dcc/../config_read >> + 1->Address to be considered for reading the value. >> + 2->The word count of the addresses, read n words >> + starting from address <1>. >> + 3->Can be a 1 or 0 which indicates if it is apb or ahb >> + bus respectively. >> + >> +What: /sys/kernel/debug/dcc/.../config_write >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This file allows user to write a value to the register >> + address given as argument. The reason for this feature >> + of dcc is that for accessing certain registers it is >> + necessary to set some bits of some other register. >> + Example: >> + echo <1> <2> <3> > /sys/bus/platform/devices/.../config_write >> + 1->Address to be considered for writing the value. >> + 2->The value that needs to be written at the location. >> + 3->Can be a 1 or 0 which indicates if it is apb or ahb >> + bus respectively. >> + >> +What: /sys/kernel/debug/dcc/.../config_reset >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This file is used to reset the configuration of >> + a dcc driver to the default configuration. This >> + means that all the previous addresses stored in >> + the driver gets removed and user needs to enter >> + the address values from the start. >> + Example: >> + echo 1 > /sys/bus/platform/devices/.../config_reset >> + >> +What: /sys/kernel/debug/dcc/.../config_loop >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This file is used to enter the loop type addresses for >> + dcc. DCC hardware provides feature to loop among multiple >> + addresses. For debugging purposes register values need to >> + be captured repeatedly in a loop. On giving the loop count >> + as n, the value at address will be captured n times in a >> + loop. At most 8 loop addresses can be configured at once. >> + Example: >> + echo <1> <2> <3> > /sys/kernel/debug/dcc/../config_loop >> + 1->The loop count, the number of times the value of the >> + addresses will be captured. >> + 2->The address count, total number of addresses to be >> + entered in this instruction. >> + 3->The series of addresses to be entered separated by a >> + space like ... and so on. >> + >> +What: /sys/kernel/debug/dcc/.../config_read_write >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This file is used to read the value of the register >> + and then write the value given as an argument to the >> + register address. The address argument should be given >> + of the form .For debugging purposes >> + sometimes we need to first read from a register and then >> + set some values to the register. >> + Example: >> + echo <1> <2> <3> > /sys/kernel/debug/dcc/.../config_read_write >> + 1->The address which needs to be considered for read then write. >> + 2->The value that needs to be written on the address. >> + 3->The mask of the value to be written. >> + >> +What: /sys/kernel/debug/dcc/.../ready >> +Date: March 2022 >> +Contact Souradeep Chowdhury >> +Description: >> + This file is used to check the status of the dcc >> + hardware if it's ready to take the inputs. A 0 >> + here indicates dcc is in a ready condition. >> + Example: >> + cat /sys/kernel/debug/dcc/.../ready >> + >> +What: /sys/kernel/debug/dcc/.../curr_list > I still don't like the idea of having a single set of files to interface > with all N lists. I think you should discover how many lists you have > and create N directories of files, each on operating on a given list. As explained before there cannot be different files based on lists as the number of lists to be used varies across platforms where DCC is used. Also we are giving the user the flexibility to configure multiple lists at one go whereas the dumps are collected in the form of separate lists that are configured by the user. > >> +Date: March 2022 >> +Contact: Souradeep Chowdhury >> +Description: >> + This attribute is used to enter the linklist to be >> + used while appending addresses. The range of values >> + for this is advertised either by a register or is >> + predefined. Max value for this can be till 8. >> + Example: >> + echo 0 > /sys/kernel/debug/dcc/...curr_list >> + > Regards, > Bjorn 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 EC168C433F5 for ; Thu, 5 May 2022 12:55:11 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:CC:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=IZlEDgOcUZ+2jH8TEyUnCRYNC+InR6qNIuiBQp3ptYg=; b=LhYwIu0SSI4rLG fNzHPaK23inXRRxTrTkwceN8Dwu6lh5AFrHtlQL/KSvLq8NsCYALXJeXNVeb1QOhvmdyFdsa8PUBP 3TBf0kDbQSfEacHlWCpL5iqIM168/M6g5VUFvZL02rcLKcOoAIli6b6BoVh+PiCi57EjpsXPiB9AB eRGKlH72t7uYY7UTDxwRJkvAztZsqcI/3Hu2QBPQdnPOPzFc3L7NkLLn8ndqTXfjigB1SFVPmu2sT IO10Awua5RrY6CMzKbll1dzp4ax/CCru4VykiHz5qIVdgyj9/CVQ5p3Xu1Mq+eWnzLODQhOCvpum3 FtfSz33QCg55PjW4lbdQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nmazg-00FtTB-JA; Thu, 05 May 2022 12:54:08 +0000 Received: from alexa-out-sd-01.qualcomm.com ([199.106.114.38]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nmazc-00FtQX-8R for linux-arm-kernel@lists.infradead.org; Thu, 05 May 2022 12:54:06 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=quicinc.com; i=@quicinc.com; q=dns/txt; s=qcdkim; t=1651755244; x=1683291244; h=message-id:date:mime-version:subject:to:cc:references: from:in-reply-to:content-transfer-encoding; bh=HwR97P478iK45CdIdkPRinoYCx69pi/2Zftw98mI8mM=; b=dCKQY2UG/uIcvfnGidbpS9vz+fJHGKRYmue/1GaOPxm8qK+A4A3AD/Y+ Qemycc+oKIjoq9a9MAnhXxnwTesbxem3iEqdU4lY9XmqfjHuXAxSPAWv+ 33IQtM5BIkrFBVw9VG5kfqkII0Y1moVCNXLGxztyH4pFq5OeJeMhIvzpq E=; Received: from unknown (HELO ironmsg03-sd.qualcomm.com) ([10.53.140.143]) by alexa-out-sd-01.qualcomm.com with ESMTP; 05 May 2022 05:53:58 -0700 X-QCInternal: smtphost Received: from nasanex01c.na.qualcomm.com ([10.47.97.222]) by ironmsg03-sd.qualcomm.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 05 May 2022 05:53:57 -0700 Received: from nalasex01a.na.qualcomm.com (10.47.209.196) by nasanex01c.na.qualcomm.com (10.47.97.222) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 5 May 2022 05:53:57 -0700 Received: from [10.79.142.210] (10.80.80.8) by nalasex01a.na.qualcomm.com (10.47.209.196) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.2.986.22; Thu, 5 May 2022 05:53:53 -0700 Message-ID: <0997f2bc-e8ce-24cc-da90-0ecd3201350c@quicinc.com> Date: Thu, 5 May 2022 18:23:20 +0530 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Thunderbird/91.3.2 Subject: Re: [PATCH V7 2/7] soc: qcom: dcc:Add driver support for Data Capture and Compare unit(DCC) Content-Language: en-CA To: Bjorn Andersson CC: Andy Gross , Rob Herring , "Alex Elder" , , , , , Sai Prakash Ranjan , Sibi Sankar , Rajendra Nayak , References: From: Souradeep Chowdhury In-Reply-To: X-Originating-IP: [10.80.80.8] X-ClientProxiedBy: nasanex01b.na.qualcomm.com (10.46.141.250) To nalasex01a.na.qualcomm.com (10.47.209.196) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220505_055404_380883_CA2E5D03 X-CRM114-Status: GOOD ( 44.53 ) 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-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Ck9uIDUvMy8yMDIyIDExOjMzIFBNLCBCam9ybiBBbmRlcnNzb24gd3JvdGU6Cj4gT24gVGh1IDAz IE1hciAwMDoyNyBDU1QgMjAyMiwgU291cmFkZWVwIENob3dkaHVyeSB3cm90ZToKPgo+PiBUaGUg RENDIGlzIGEgRE1BIEVuZ2luZSBkZXNpZ25lZCB0byBjYXB0dXJlIGFuZCBzdG9yZSBkYXRhCj4+ IGR1cmluZyBzeXN0ZW0gY3Jhc2ggb3Igc29mdHdhcmUgdHJpZ2dlcnMuIFRoZSBEQ0Mgb3BlcmF0 ZXMKPj4gYmFzZWQgb24gdXNlciBpbnB1dHMgdmlhIHRoZSBzeXNmcyBpbnRlcmZhY2UuIFRoZSB1 c2VyIGdpdmVzCj4+IGFkZHJlc3NlcyBhcyBpbnB1dHMgYW5kIHRoZXNlIGFkZHJlc3NlcyBhcmUg c3RvcmVkIGluIHRoZQo+PiBkY2Mgc3JhbS4gSW4gY2FzZSBvZiBhIHN5c3RlbSBjcmFzaCBvciBh IG1hbnVhbCBzb2Z0d2FyZQo+PiB0cmlnZ2VyIGJ5IHRoZSB1c2VyIHRocm91Z2ggdGhlIGRlYnVn ZnMgaW50ZXJmYWNlLAo+PiB0aGUgZGNjIGNhcHR1cmVzIGFuZCBzdG9yZXMgdGhlIHZhbHVlcyBh dCB0aGVzZSBhZGRyZXNzZXMuCj4+IFRoaXMgcGF0Y2ggY29udGFpbnMgdGhlIGRyaXZlciB3aGlj aCBoYXMgYWxsIHRoZSBtZXRob2RzCj4+IHBlcnRhaW5pbmcgdG8gdGhlIGRlYnVnZnMgaW50ZXJm YWNlLCBhdXhpbGlhcnkgZnVuY3Rpb25zIHRvCj4+IHN1cHBvcnQgYWxsIHRoZSBmb3VyIGZ1bmRh bWVudGFsIG9wZXJhdGlvbnMgb2YgZGNjIG5hbWVseQo+PiByZWFkLCB3cml0ZSwgcmVhZC9tb2Rp Znkvd3JpdGUgYW5kIGxvb3AuIFRoZSBwcm9iZSBtZXRob2QKPj4gaGVyZSBpbnN0YW50aWF0ZXMg YWxsIHRoZSByZXNvdXJjZXMgbmVjZXNzYXJ5IGZvciBkY2MgdG8KPj4gb3BlcmF0ZSBtYWlubHkg dGhlIGRlZGljYXRlZCBkY2Mgc3JhbSB3aGVyZSBpdCBzdG9yZXMgdGhlCj4+IHZhbHVlcy4gVGhl IERDQyBkcml2ZXIgY2FuIGJlIHVzZWQgZm9yIGRlYnVnZ2luZyBwdXJwb3Nlcwo+PiB3aXRob3V0 IGdvaW5nIGZvciBhIHJlYm9vdCBzaW5jZSBpdCBjYW4gcGVyZm9ybSBzb2Z0d2FyZQo+PiB0cmln Z2VycyBhcyB3ZWxsIGJhc2VkIG9uIHVzZXIgaW5wdXRzLgo+Pgo+PiBBbHNvIGFkZGVkIHRoZSBk b2N1bWVudGF0aW9uIGZvciBkZWJ1Z2ZzIGVudHJpZXMgYW5kIGV4cGxhaW5lZAo+PiB0aGUgZnVu Y3Rpb25hbGl0aWVzIG9mIGVhY2ggZGVidWdmcyBmaWxlIHRoYXQgaGFzIGJlZW4gY3JlYXRlZAo+ PiBmb3IgZGNjLgo+Pgo+PiBUaGUgZm9sbG93aW5nIGlzIHRoZSBqdXN0aWZpY2F0aW9uIG9mIHVz aW5nIGRlYnVnZnMgaW50ZXJmYWNlCj4+IG92ZXIgdGhlIG90aGVyIGFsdGVybmF0aXZlcyBsaWtl IHN5c2ZzL2lvY3Rscwo+Pgo+PiBpKSBBcyBjYW4gYmUgc2VlbiBmcm9tIHRoZSBkZWJ1Z2ZzIGF0 dHJpYnV0ZSBkZXNjcmlwdGlvbnMsCj4+IHNvbWUgb2YgdGhlIGRlYnVnZnMgYXR0cmlidXRlIGZp bGVzIGhlcmUgY29udGFpbnMgbXVsdGlwbGUKPj4gYXJndW1lbnRzIHdoaWNoIG5lZWRzIHRvIGJl IGFjY2VwdGVkIGZyb20gdGhlIHVzZXIuIFRoaXMgZ29lcwo+PiBhZ2FpbnN0IHRoZSBkZXNpZ24g c3R5bGUgb2Ygc3lzZnMuCj4+Cj4+IGlpKSBUaGUgdXNlciBpbnB1dCBwYXR0ZXJucyBoYXZlIGJl ZW4gbWFkZSBzaW1wbGUgYW5kIGNvbnZlbmllbnQKPj4gaW4gdGhpcyBjYXNlIHdpdGggdGhlIHVz ZSBvZiBkZWJ1Z2ZzIGludGVyZmFjZSBhcyB1c2VyIGRvZXNuJ3QKPj4gbmVlZCB0byBzaHVmZmxl IGJldHdlZW4gZGlmZmVyZW50IGZpbGVzIHRvIGV4ZWN1dGUgb25lIGluc3RydWN0aW9uCj4+IGFz IHdhcyB0aGUgY2FzZSBvbiB1c2luZyBvdGhlciBhbHRlcm5hdGl2ZXMuCj4+Cj4+IFNpZ25lZC1v ZmYtYnk6IFNvdXJhZGVlcCBDaG93ZGh1cnkgPHF1aWNfc2Nob3dkaHVAcXVpY2luYy5jb20+Cj4+ IC0tLQo+PiAgIERvY3VtZW50YXRpb24vQUJJL3Rlc3RpbmcvZGVidWdmcy1kcml2ZXItZGNjIHwg IDEyNCArKysKPj4gICBkcml2ZXJzL3NvYy9xY29tL0tjb25maWcgICAgICAgICAgICAgICAgICAg ICB8ICAgIDggKwo+PiAgIGRyaXZlcnMvc29jL3Fjb20vTWFrZWZpbGUgICAgICAgICAgICAgICAg ICAgIHwgICAgMSArCj4+ICAgZHJpdmVycy9zb2MvcWNvbS9kY2MuYyAgICAgICAgICAgICAgICAg ICAgICAgfCAxNDY1ICsrKysrKysrKysrKysrKysrKysrKysrKysrCj4+ICAgNCBmaWxlcyBjaGFu Z2VkLCAxNTk4IGluc2VydGlvbnMoKykKPj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgRG9jdW1lbnRh dGlvbi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWRyaXZlci1kY2MKPj4gICBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9zb2MvcWNvbS9kY2MuYwo+Pgo+PiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9BQkkvdGVzdGluZy9kZWJ1Z2ZzLWRyaXZlci1kY2MgYi9Eb2N1bWVudGF0aW9uL0FCSS90ZXN0 aW5nL2RlYnVnZnMtZHJpdmVyLWRjYwo+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+PiBpbmRleCAw MDAwMDAwLi43MDAyOWFiCj4+IC0tLSAvZGV2L251bGwKPj4gKysrIGIvRG9jdW1lbnRhdGlvbi9B QkkvdGVzdGluZy9kZWJ1Z2ZzLWRyaXZlci1kY2MKPj4gQEAgLTAsMCArMSwxMjQgQEAKPj4gK1do YXQ6ICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL2RjYy8uLi4vdHJpZ2dlcgo+PiArRGF0ZTog ICAgICAgICAgTWFyY2ggMjAyMgo+PiArQ29udGFjdDogICAgICAgU291cmFkZWVwIENob3dkaHVy eSA8cXVpY19zY2hvd2RodUBxdWljaW5jLmNvbT4KPj4gK0Rlc2NyaXB0aW9uOgo+PiArCQlUaGlz IGlzIHRoZSBkZWJ1Z2ZzIGludGVyZmFjZSBmb3IgbWFudWFsIHNvZnR3YXJlCj4+ICsJCXRyaWdn ZXJzLiBUaGUgdXNlciBjYW4gc2ltcGx5IGVudGVyIGEgMSBhZ2FpbnN0Cj4+ICsJCXRoZSBkZWJ1 Z2ZzIGZpbGUgYW5kIGVuYWJsZSBhIG1hbnVhbCB0cmlnZ2VyLgo+PiArCQlFeGFtcGxlOgo+PiAr CQllY2hvICAxID4gL3N5cy9rZXJuZWwvZGVidWcvZGNjLy4uLi90cmlnZ2VyCj4+ICsKPj4gK1do YXQ6ICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL2RjYy8uLi4vZW5hYmxlCj4+ICtEYXRlOiAg ICAgICAgICBNYXJjaCAyMDIyCj4+ICtDb250YWN0OiAgICAgICBTb3VyYWRlZXAgQ2hvd2RodXJ5 IDxxdWljX3NjaG93ZGh1QHF1aWNpbmMuY29tPgo+PiArRGVzY3JpcHRpb246Cj4+ICsJCVRoaXMg ZGVidWdmcyBpbnRlcmZhY2UgaXMgdXNlZCBmb3IgZW5hYmxpbmcgdGhlCj4+ICsJCXRoZSBkY2Mg aGFyZHdhcmUuIE9uIGVuYWJsaW5nIHRoZSBkY2MsIGFsbCB0aGUKPj4gKwkJYWRkcmVzc2VzIGVu dGVyZWQgYnkgdGhlIHVzZXIgaXMgd3JpdHRlbiBpbnRvCj4+ICsJCWRjYyBzcmFtIHdoaWNoIGlz IHJlYWQgYnkgdGhlIGRjYyBoYXJkd2FyZSBvbgo+PiArCQltYW51YWwgb3IgY3Jhc2ggaW5kdWNl ZCB0cmlnZ2Vycy4KPj4gKwkJRXhhbXBsZToKPj4gKwkJZWNobyAgMCA+IC9zeXMvYnVzL3BsYXRm b3JtL2RldmljZXMvLi4uL2VuYWJsZQo+PiArCQkoZGlzYWJsZSBkY2MpCj4+ICsJCWVjaG8gIDEg PiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4uLi9lbmFibGUKPj4gKwkJKGVuYWJsZSBkY2Mp Cj4+ICsKPj4gK1doYXQ6ICAgICAgICAgIC9zeXMva2VybmVsL2RlYnVnL2RjYy8uLi4vY29uZmln X3JlYWQKPiBBcyBtZW50aW9uZWQgbGFzdCB0aW1lLCBJIGRvbid0IGxpa2UgdGhpcyBpbnRlcmZh Y2Ugb2YgaGF2aW5nIDYgZmlsZXMKPiB0aGF0IHRoZSB1c2VyIGNhbiB3cml0ZSB0byBpbiBvcmRl ciB0byBhcHBlbmQgaXRlbXMgaW4gdGhlIGN1cnJlbnRseQo+IHNlbGVjdGVkIGxpbmtlZCBsaXN0 Lgo+Cj4gV2h5IGNhbid0IHRoaXMgYmUgYSBzaW5nbGUgImNvbmZpZyIgd2hpY2ggdGFrZXMgYSBt dWx0aWxpbmUgc3RyaW5nIG9mCj4gb3BlcmF0aW9ucz8gKEJvbnVzIHBvaW50IGZvciBzdXBwb3J0 aW5nIGFwcGVuZGluZyB0byB0aGUgbGlzdCkuCj4KPgo+IFRoaXMgd291bGQgYWxzbyBzZXJ2ZSBh cyBhIG5hdHVyYWwgcGxhY2UgdG8gZHVtcCB0aGUgbGlua2VkIGxpc3QgYmFjayB0bwo+IHRoZSB1 c2VyIGZvciBpbnNwZWN0aW9uLgoKRm9sbG93aW5nIGlzIHRoZSBqdXN0aWZpY2F0aW9uIG9mIGhh dmluZyBtdWx0aXBsZSBmaWxlcyBpbiBkZWJ1Z2ZzCgoxLT4gU2luY2UgdGhlcmUgYXJlIGZ1bmRh bWVudGFsbHkgNCBpbnN0cnVjdGlvbnMgZm9yIERDQywgClJlYWQsV3JpdGUsUmVhZCBhbmQgdGhl biBXcml0ZSBhbmQgTG9vcCxoYXZpbmcgc2VwYXJhdGUgZGVidWdmcyBmaWxlcyAKZm9yIHRoZSBz YW1lIG1ha2VzIGl0CgogwqDCoMKgwqDCoMKgIGNvbnZlbmllbnQgZm9yIHRoZSB1c2VyIHRvIHVz ZSB0aGlzIHRvb2wgYW5kIGFsc28gdG8gCmRvY3VtZW50LlRoaXMgYWxzbyBpcyBjb25zaXN0ZW50 IHdpdGggdGhlIGRlc2lnbiBwcmluY2lwbGVzIG9mIGRlYnVnZnMgCmFzIGl0IHN1cHBvcnRzIGxv Z2ljYWwgc2VncmVnYXRpb24KCiDCoMKgwqDCoMKgwqAgb2YgRGVidWdmcyBmaWxlcyBiYXNlZCBv biB0aGUgdXNlciBpbnN0cnVjdGlvbnMuCgoyLT4gV2UgYXJlIG1haW50YWluaW5nIGEgY29tbW9u IGxpbmtlZGxpc3QgaW5zaWRlIHRoZSBkcml2ZXIgYW5kIGl0IGNhbiAKYmUgdmlld2VkIGJ5IHRo ZSB1c2VyIHRocm91Z2ggdGhlICJjb25maWdfcmVhZCIgZGVidWdmcyBmaWxlLiBXaWxsIGJlIAph ZGRpbmcgdGhpcyB0byB0aGUKCiDCoMKgwqDCoMKgwqAgZG9jdW1lbnRhdGlvbiBhcyB3ZWxsLgoK TGV0IG1lIGtub3cgeW91ciB0aG91Z2h0cyByZWdhcmRpbmcgdGhlIGFib3ZlLgoKPj4gK0RhdGU6 ICAgICAgICAgIE1hcmNoIDIwMjIKPj4gK0NvbnRhY3Q6ICAgICAgIFNvdXJhZGVlcCBDaG93ZGh1 cnkgPHF1aWNfc2Nob3dkaHVAcXVpY2luYy5jb20+Cj4+ICtEZXNjcmlwdGlvbjoKPj4gKwkJVGhp cyBzdG9yZXMgdGhlIGFkZHJlc3NlcyBvZiB0aGUgcmVnaXN0ZXJzIHdoaWNoCj4+ICsJCW5lZWRz IHRvIGJlIHJlYWQgaW4gY2FzZSBvZiBhIGhhcmR3YXJlIGNyYXNoIG9yCj4+ICsJCW1hbnVhbCBz b2Z0d2FyZSB0cmlnZ2Vycy4gVGhlIGFkZHJlc3MgZW50ZXJlZCBoZXJlCj4+ICsJCWFyZSBjb25z aWRlcmVkIHVuZGVyIHJlYWQgdHlwZSBpbnN0cnVjdGlvbi4KPj4gKwkJRXhhbXBsZToKPj4gKwkJ ZWNobyA8MT4gPDI+IDwzPiA+L3N5cy9rZXJuZWwvZGVidWcvZGNjLy4uL2NvbmZpZ19yZWFkCj4+ ICsJCTEtPkFkZHJlc3MgdG8gYmUgY29uc2lkZXJlZCBmb3IgcmVhZGluZyB0aGUgdmFsdWUuCj4+ ICsJCTItPlRoZSB3b3JkIGNvdW50IG9mIHRoZSBhZGRyZXNzZXMsIHJlYWQgbiB3b3Jkcwo+PiAr CQkgICBzdGFydGluZyBmcm9tIGFkZHJlc3MgPDE+Lgo+PiArCQkzLT5DYW4gYmUgYSAxIG9yIDAg d2hpY2ggaW5kaWNhdGVzIGlmIGl0IGlzIGFwYiBvciBhaGIKPj4gKwkJYnVzIHJlc3BlY3RpdmVs eS4KPj4gKwo+PiArV2hhdDogICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcvZGNjLy4uLi9jb25m aWdfd3JpdGUKPj4gK0RhdGU6ICAgICAgICAgIE1hcmNoIDIwMjIKPj4gK0NvbnRhY3Q6ICAgICAg IFNvdXJhZGVlcCBDaG93ZGh1cnkgPHF1aWNfc2Nob3dkaHVAcXVpY2luYy5jb20+Cj4+ICtEZXNj cmlwdGlvbjoKPj4gKwkJVGhpcyBmaWxlIGFsbG93cyB1c2VyIHRvIHdyaXRlIGEgdmFsdWUgdG8g dGhlIHJlZ2lzdGVyCj4+ICsJCWFkZHJlc3MgZ2l2ZW4gYXMgYXJndW1lbnQuIFRoZSByZWFzb24g Zm9yIHRoaXMgZmVhdHVyZQo+PiArCQlvZiBkY2MgaXMgdGhhdCBmb3IgYWNjZXNzaW5nIGNlcnRh aW4gcmVnaXN0ZXJzIGl0IGlzCj4+ICsJCW5lY2Vzc2FyeSB0byBzZXQgc29tZSBiaXRzIG9mIHNv bWUgb3RoZXIgcmVnaXN0ZXIuCj4+ICsJCUV4YW1wbGU6Cj4+ICsJCWVjaG8gPDE+IDwyPiA8Mz4g PiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4uLi9jb25maWdfd3JpdGUKPj4gKwkJMS0+QWRk cmVzcyB0byBiZSBjb25zaWRlcmVkIGZvciB3cml0aW5nIHRoZSB2YWx1ZS4KPj4gKwkJMi0+VGhl IHZhbHVlIHRoYXQgbmVlZHMgdG8gYmUgd3JpdHRlbiBhdCB0aGUgbG9jYXRpb24uCj4+ICsJCTMt PkNhbiBiZSBhIDEgb3IgMCB3aGljaCBpbmRpY2F0ZXMgaWYgaXQgaXMgYXBiIG9yIGFoYgo+PiAr CQlidXMgcmVzcGVjdGl2ZWx5Lgo+PiArCj4+ICtXaGF0OiAgICAgICAgICAvc3lzL2tlcm5lbC9k ZWJ1Zy9kY2MvLi4uL2NvbmZpZ19yZXNldAo+PiArRGF0ZTogICAgICAgICAgTWFyY2ggMjAyMgo+ PiArQ29udGFjdDogICAgICAgU291cmFkZWVwIENob3dkaHVyeSA8cXVpY19zY2hvd2RodUBxdWlj aW5jLmNvbT4KPj4gK0Rlc2NyaXB0aW9uOgo+PiArCQlUaGlzIGZpbGUgaXMgdXNlZCB0byByZXNl dCB0aGUgY29uZmlndXJhdGlvbiBvZgo+PiArCQlhIGRjYyBkcml2ZXIgdG8gdGhlIGRlZmF1bHQg Y29uZmlndXJhdGlvbi4gVGhpcwo+PiArCQltZWFucyB0aGF0IGFsbCB0aGUgcHJldmlvdXMgYWRk cmVzc2VzIHN0b3JlZCBpbgo+PiArCQl0aGUgZHJpdmVyIGdldHMgcmVtb3ZlZCBhbmQgdXNlciBu ZWVkcyB0byBlbnRlcgo+PiArCQl0aGUgYWRkcmVzcyB2YWx1ZXMgZnJvbSB0aGUgc3RhcnQuCj4+ ICsJCUV4YW1wbGU6Cj4+ICsJCWVjaG8gIDEgPiAvc3lzL2J1cy9wbGF0Zm9ybS9kZXZpY2VzLy4u Li9jb25maWdfcmVzZXQKPj4gKwo+PiArV2hhdDogICAgICAgICAgL3N5cy9rZXJuZWwvZGVidWcv ZGNjLy4uLi9jb25maWdfbG9vcAo+PiArRGF0ZToJCU1hcmNoIDIwMjIKPj4gK0NvbnRhY3Q6ICAg ICAgIFNvdXJhZGVlcCBDaG93ZGh1cnkgPHF1aWNfc2Nob3dkaHVAcXVpY2luYy5jb20+Cj4+ICtE ZXNjcmlwdGlvbjoKPj4gKwkJVGhpcyBmaWxlIGlzIHVzZWQgdG8gZW50ZXIgdGhlIGxvb3AgdHlw ZSBhZGRyZXNzZXMgZm9yCj4+ICsJCWRjYy4gRENDIGhhcmR3YXJlIHByb3ZpZGVzIGZlYXR1cmUg dG8gbG9vcCBhbW9uZyBtdWx0aXBsZQo+PiArCQlhZGRyZXNzZXMuIEZvciBkZWJ1Z2dpbmcgcHVy cG9zZXMgcmVnaXN0ZXIgdmFsdWVzIG5lZWQgdG8KPj4gKwkJYmUgY2FwdHVyZWQgcmVwZWF0ZWRs eSBpbiBhIGxvb3AuIE9uIGdpdmluZyB0aGUgbG9vcCBjb3VudAo+PiArCQlhcyBuLCB0aGUgdmFs dWUgYXQgYWRkcmVzcyB3aWxsIGJlIGNhcHR1cmVkIG4gdGltZXMgaW4gYQo+PiArCQlsb29wLiBB dCBtb3N0IDggbG9vcCBhZGRyZXNzZXMgY2FuIGJlIGNvbmZpZ3VyZWQgYXQgb25jZS4KPj4gKwkJ RXhhbXBsZToKPj4gKwkJZWNobyA8MT4gPDI+IDwzPiA+IC9zeXMva2VybmVsL2RlYnVnL2RjYy8u Li9jb25maWdfbG9vcAo+PiArCQkxLT5UaGUgbG9vcCBjb3VudCwgdGhlIG51bWJlciBvZiB0aW1l cyB0aGUgdmFsdWUgb2YgdGhlCj4+ICsJCSAgIGFkZHJlc3NlcyB3aWxsIGJlIGNhcHR1cmVkLgo+ PiArCQkyLT5UaGUgYWRkcmVzcyBjb3VudCwgdG90YWwgbnVtYmVyIG9mIGFkZHJlc3NlcyB0byBi ZQo+PiArCQkgICBlbnRlcmVkIGluIHRoaXMgaW5zdHJ1Y3Rpb24uCj4+ICsJCTMtPlRoZSBzZXJp ZXMgb2YgYWRkcmVzc2VzIHRvIGJlIGVudGVyZWQgc2VwYXJhdGVkIGJ5IGEKPj4gKwkJICAgc3Bh Y2UgbGlrZSA8YWRkcjE+IDxhZGRyMj4uLi4gYW5kIHNvIG9uLgo+PiArCj4+ICtXaGF0OiAgICAg ICAgICAvc3lzL2tlcm5lbC9kZWJ1Zy9kY2MvLi4uL2NvbmZpZ19yZWFkX3dyaXRlCj4+ICtEYXRl OiAgICAgICAgICBNYXJjaCAyMDIyCj4+ICtDb250YWN0OiAgICAgICBTb3VyYWRlZXAgQ2hvd2Ro dXJ5IDxxdWljX3NjaG93ZGh1QHF1aWNpbmMuY29tPgo+PiArRGVzY3JpcHRpb246Cj4+ICsJCVRo aXMgZmlsZSBpcyB1c2VkIHRvIHJlYWQgdGhlIHZhbHVlIG9mIHRoZSByZWdpc3Rlcgo+PiArCQlh bmQgdGhlbiB3cml0ZSB0aGUgdmFsdWUgZ2l2ZW4gYXMgYW4gYXJndW1lbnQgdG8gdGhlCj4+ICsJ CXJlZ2lzdGVyIGFkZHJlc3MuIFRoZSBhZGRyZXNzIGFyZ3VtZW50IHNob3VsZCBiZSBnaXZlbgo+ PiArCQlvZiB0aGUgZm9ybSA8YWRkcj4gPG1hc2s+IDx2YWx1ZT4uRm9yIGRlYnVnZ2luZyBwdXJw b3Nlcwo+PiArCQlzb21ldGltZXMgd2UgbmVlZCB0byBmaXJzdCByZWFkIGZyb20gYSByZWdpc3Rl ciBhbmQgdGhlbgo+PiArCQlzZXQgc29tZSB2YWx1ZXMgdG8gdGhlIHJlZ2lzdGVyLgo+PiArCQlF eGFtcGxlOgo+PiArCQllY2hvIDwxPiA8Mj4gPDM+ID4gL3N5cy9rZXJuZWwvZGVidWcvZGNjLy4u Li9jb25maWdfcmVhZF93cml0ZQo+PiArCQkxLT5UaGUgYWRkcmVzcyB3aGljaCBuZWVkcyB0byBi ZSBjb25zaWRlcmVkIGZvciByZWFkIHRoZW4gd3JpdGUuCj4+ICsJCTItPlRoZSB2YWx1ZSB0aGF0 IG5lZWRzIHRvIGJlIHdyaXR0ZW4gb24gdGhlIGFkZHJlc3MuCj4+ICsJCTMtPlRoZSBtYXNrIG9m IHRoZSB2YWx1ZSB0byBiZSB3cml0dGVuLgo+PiArCj4+ICtXaGF0OgkJL3N5cy9rZXJuZWwvZGVi dWcvZGNjLy4uLi9yZWFkeQo+PiArRGF0ZToJCU1hcmNoIDIwMjIKPj4gK0NvbnRhY3QJU291cmFk ZWVwIENob3dkaHVyeSA8cXVpY19zY2hvd2RodUBxdWljaW5jLmNvbT4KPj4gK0Rlc2NyaXB0aW9u Ogo+PiArCQlUaGlzIGZpbGUgaXMgdXNlZCB0byBjaGVjayB0aGUgc3RhdHVzIG9mIHRoZSBkY2MK Pj4gKwkJaGFyZHdhcmUgaWYgaXQncyByZWFkeSB0byB0YWtlIHRoZSBpbnB1dHMuIEEgMAo+PiAr CQloZXJlIGluZGljYXRlcyBkY2MgaXMgaW4gYSByZWFkeSBjb25kaXRpb24uCj4+ICsJCUV4YW1w bGU6Cj4+ICsJCWNhdCAvc3lzL2tlcm5lbC9kZWJ1Zy9kY2MvLi4uL3JlYWR5Cj4+ICsKPj4gK1do YXQ6CQkvc3lzL2tlcm5lbC9kZWJ1Zy9kY2MvLi4uL2N1cnJfbGlzdAo+IEkgc3RpbGwgZG9uJ3Qg bGlrZSB0aGUgaWRlYSBvZiBoYXZpbmcgYSBzaW5nbGUgc2V0IG9mIGZpbGVzIHRvIGludGVyZmFj ZQo+IHdpdGggYWxsIE4gbGlzdHMuIEkgdGhpbmsgeW91IHNob3VsZCBkaXNjb3ZlciBob3cgbWFu eSBsaXN0cyB5b3UgaGF2ZQo+IGFuZCBjcmVhdGUgTiBkaXJlY3RvcmllcyBvZiBmaWxlcywgZWFj aCBvbiBvcGVyYXRpbmcgb24gYSBnaXZlbiBsaXN0LgoKQXMgZXhwbGFpbmVkIGJlZm9yZSB0aGVy ZSBjYW5ub3QgYmUgZGlmZmVyZW50IGZpbGVzIGJhc2VkIG9uIGxpc3RzIGFzIAp0aGUgbnVtYmVy IG9mIGxpc3RzIHRvIGJlIHVzZWQKCnZhcmllcyBhY3Jvc3MgcGxhdGZvcm1zIHdoZXJlIERDQyBp cyB1c2VkLiBBbHNvIHdlIGFyZSBnaXZpbmcgdGhlIHVzZXIgCnRoZSBmbGV4aWJpbGl0eSB0byBj b25maWd1cmUKCm11bHRpcGxlIGxpc3RzIGF0IG9uZSBnbyB3aGVyZWFzIHRoZSBkdW1wcyBhcmUg Y29sbGVjdGVkIGluIHRoZSBmb3JtIG9mIApzZXBhcmF0ZSBsaXN0cyB0aGF0IGFyZQoKY29uZmln dXJlZCBieSB0aGUgdXNlci4KCj4KPj4gK0RhdGU6CQlNYXJjaCAyMDIyCj4+ICtDb250YWN0OglT b3VyYWRlZXAgQ2hvd2RodXJ5IDxxdWljX3NjaG93ZGh1QHF1aWNpbmMuY29tPgo+PiArRGVzY3Jp cHRpb246Cj4+ICsJCVRoaXMgYXR0cmlidXRlIGlzIHVzZWQgdG8gZW50ZXIgdGhlIGxpbmtsaXN0 IHRvIGJlCj4+ICsJCXVzZWQgd2hpbGUgYXBwZW5kaW5nIGFkZHJlc3Nlcy4gVGhlIHJhbmdlIG9m IHZhbHVlcwo+PiArCQlmb3IgdGhpcyBpcyBhZHZlcnRpc2VkIGVpdGhlciBieSBhIHJlZ2lzdGVy IG9yIGlzCj4+ICsJCXByZWRlZmluZWQuIE1heCB2YWx1ZSBmb3IgdGhpcyBjYW4gYmUgdGlsbCA4 Lgo+PiArCQlFeGFtcGxlOgo+PiArCQllY2hvIDAgPiAvc3lzL2tlcm5lbC9kZWJ1Zy9kY2MvLi4u Y3Vycl9saXN0Cj4+ICsKPiBSZWdhcmRzLAo+IEJqb3JuCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdAps aW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVh ZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==