Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp190134rwb; Tue, 13 Dec 2022 16:05:40 -0800 (PST) X-Google-Smtp-Source: AA0mqf6QawielpifjHl7cnBMvzh6FBK2ETNqqOs4jjr5/9mOLJqOIqTDHTVw3F0MgPYDgkrzOXGY X-Received: by 2002:a17:90b:116:b0:219:1be:6d52 with SMTP id p22-20020a17090b011600b0021901be6d52mr22318857pjz.3.1670976339986; Tue, 13 Dec 2022 16:05:39 -0800 (PST) ARC-Seal: i=2; a=rsa-sha256; t=1670976339; cv=pass; d=google.com; s=arc-20160816; b=oqyxlbGvOXuzZM9DTW3WF4VYhhh7UZMS81zJay3LpjYG9nope7uSmXbPkxeMl86dH2 SQi6sgRrNl4RB1rCcaHEhbLKcxx7Ma5n26ueww9YVe+zCPGP0sQRmFA1CBQhnn45/4pH f0DMy5moaVRtMf5ih+X2ZkgwRWz78mTugBmQVQkFo5HX41+9WM/E8GwIBX5LzSrQ0i0r VIgb5T6Er9GAtb/cSnMuuhL2/RGOSCd9+NIXnD5YAEG4NQqM8ejk3L95DIk3ONhmO4SE GlpG26mu9NFTC7mfs6pE80+fyAVevvuVc9BNaZtQMq8jvy0kE38ujo23/yWm0GnnU3iM pugw== ARC-Message-Signature: i=2; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_contentbits :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_actionid :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_siteid :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_name :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_method :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_setdate :msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_enabled:msip_labels :content-language:accept-language:in-reply-to:references:message-id :date:thread-index:thread-topic:subject:cc:to:from:dkim-signature; bh=l+twC41wzrj6K0n8tXjn1cZVDav2mkMR5u9/pI1oa80=; b=Hk8f7NrSx4ju9diAlrF2/1drhetBmbnMSGZHiuqn117w+0WpVZIcx9ltbf/PDAHQEE JU4uyjSIGC0FPSV2d7hcqCQeBBgaXkhWA9QBAMamK09S813Cq2j9/8Ipxc20CiPPuGzL CRkPg24YY7xcc1bib6rb8dpoUlo44T8pTNNTaYQrXC28yA1BJhfDhuhGlj0QfF0GKuy6 Y/RoCOtpTRn4pIPCwkYRAo/BK3t6DBbZwMqp39cK974UbQO3rze0YT9ovQsh2N5lad4t eWekAy0/GxkX9FN6U8lz8sBlPYGok7QayDBykoDu9wTXLLjpDv8mO2h8myvW3hMVY+8v 0o/Q== ARC-Authentication-Results: i=2; mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b="qJqhbrA/"; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id pf3-20020a17090b1d8300b0020d2d8c9a84si326729pjb.137.2022.12.13.16.05.19; Tue, 13 Dec 2022 16:05:39 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@amd.com header.s=selector1 header.b="qJqhbrA/"; arc=pass (i=1 spf=pass spfdomain=amd.com dkim=pass dkdomain=amd.com dmarc=pass fromdomain=amd.com); spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=QUARANTINE sp=QUARANTINE dis=NONE) header.from=amd.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236921AbiLMXrH (ORCPT + 72 others); Tue, 13 Dec 2022 18:47:07 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:52494 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236732AbiLMXqt (ORCPT ); Tue, 13 Dec 2022 18:46:49 -0500 Received: from NAM11-CO1-obe.outbound.protection.outlook.com (mail-co1nam11on2068.outbound.protection.outlook.com [40.107.220.68]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 020DE26F2; Tue, 13 Dec 2022 15:46:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=l3ITjQMTSY44wXsV7SKiTzcZscgSyBg+7YpII74l8zcIsPqt4CQqVBMeJ66enmbELuzo8G4H5047hcVLdtfbI6DbxIusURJDg3h5hJE0E7BEq1K1CqamVUK+GTI1BvXU0YNx2zSr0t3beHbc7bB1JvlEI09BS7jd2FF106bfczKGZcnD+VOhXfvmBst/ZaMpXT+qXxOFjWRDnl1ADR/7VrtutHfgpcMZ437a5fSQPZ5QZ7TkBxUVPdVTaNxX896Gi/zyncbD5vrsqapOSk8yfasSgT24aNorChtWQ0qTwf8gt5J9RwUZNOw71dG0+86t9c6EvFIM2VqCmyLGdN95hw== 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=l+twC41wzrj6K0n8tXjn1cZVDav2mkMR5u9/pI1oa80=; b=hJ7WqUmxVPkXawwhJYYM9vQeoTQMS/knTbfOVdfeUsE75/TH9Zl0+tga09J4TdM3wczw+5LDFB5ytPE7V9Geq7owb0GGTZ8AAYG55Dr24NGgwJ5sC6P9CEMQQs2l6edsoyi2H0wAjdf32WHViNI9ZMIVKBvT554ac/ldUeIsUUoYmYyvH8nKP/S8lpZx96jEX1vkDTD7nBHXjYzQQSINPRnPWVWr2EkNpW2olNBc6CWLy1v+5KH2AbHC2yq80JuTO8/+k5weskeG4O5fgX79BqRoSaj/JMnhskfPFtuDNuqVvxl+2TNizAe+n+YBNQ/CzD4bQazRVHuEB26HX9+0HA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=amd.com; dmarc=pass action=none header.from=amd.com; dkim=pass header.d=amd.com; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amd.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=l+twC41wzrj6K0n8tXjn1cZVDav2mkMR5u9/pI1oa80=; b=qJqhbrA/G0RYE/QXRMj3bj7BhPuu5UGIeW1WvgcBYG4TnppO/+UGd1OHrZX1Fb540R1I+XsnEx2n88vFX7GGL0MKAhNIquwdS9tsXkekQlklRncaHT98FdlaoCAb6JmN81qD4Vi0FmPy4XsfqE8fWcldeONEFBj4SDKWI0WcCf0= Received: from MW3PR12MB4553.namprd12.prod.outlook.com (2603:10b6:303:2c::19) by DS7PR12MB6120.namprd12.prod.outlook.com (2603:10b6:8:98::5) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.5880.19; Tue, 13 Dec 2022 23:46:43 +0000 Received: from MW3PR12MB4553.namprd12.prod.outlook.com ([fe80::790c:da77:2d05:6098]) by MW3PR12MB4553.namprd12.prod.outlook.com ([fe80::790c:da77:2d05:6098%5]) with mapi id 15.20.5880.019; Tue, 13 Dec 2022 23:46:43 +0000 From: "Moger, Babu" To: James Morse CC: "fenghua.yu@intel.com" , "dave.hansen@linux.intel.com" , "x86@kernel.org" , "hpa@zytor.com" , "paulmck@kernel.org" , "akpm@linux-foundation.org" , "quic_neeraju@quicinc.com" , "rdunlap@infradead.org" , "damien.lemoal@opensource.wdc.com" , "songmuchun@bytedance.com" , "peterz@infradead.org" , "jpoimboe@kernel.org" , "pbonzini@redhat.com" , "chang.seok.bae@intel.com" , "pawan.kumar.gupta@linux.intel.com" , "jmattson@google.com" , "daniel.sneddon@linux.intel.com" , "Das1, Sandipan" , "tony.luck@intel.com" , "linux-doc@vger.kernel.org" , "linux-kernel@vger.kernel.org" , "bagasdotme@gmail.com" , "eranian@google.com" , "corbet@lwn.net" , "tglx@linutronix.de" , "mingo@redhat.com" , "bp@alien8.de" , "reinette.chatre@intel.com" Subject: RE: [PATCH v8 10/13] x86/resctrl: Add sysfs interface to write mbm_total_bytes_config Thread-Topic: [PATCH v8 10/13] x86/resctrl: Add sysfs interface to write mbm_total_bytes_config Thread-Index: AQHY8Ig1NUxgMo+j/USgNFOHQRk/GK5i31sAgABoqPCACQ8OAIAAYB9A Date: Tue, 13 Dec 2022 23:46:43 +0000 Message-ID: References: <166759188265.3281208.11769277079826754455.stgit@bmoger-ubuntu> <166759206900.3281208.11975514088019160962.stgit@bmoger-ubuntu> <7ce5bcda-bb42-4166-ab7e-8a07b8fb28a7@arm.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: msip_labels: MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Enabled=true; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SetDate=2022-12-13T23:39:22Z; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Method=Standard; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_Name=General; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_SiteId=3dd8961f-e488-4e60-8e11-a82d994e183d; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ActionId=4a1d1f14-774a-4eb2-b1d8-85431850aa66; MSIP_Label_4342314e-0df4-4b58-84bf-38bed6170a0f_ContentBits=1 msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_enabled: true msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_setdate: 2022-12-13T23:46:41Z msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_method: Standard msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_name: General msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_siteid: 3dd8961f-e488-4e60-8e11-a82d994e183d msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_actionid: da1e355c-26c5-4739-91c8-5bf6d68c8b6c msip_label_4342314e-0df4-4b58-84bf-38bed6170a0f_contentbits: 0 authentication-results: dkim=none (message not signed) header.d=none;dmarc=none action=none header.from=amd.com; x-ms-publictraffictype: Email x-ms-traffictypediagnostic: MW3PR12MB4553:EE_|DS7PR12MB6120:EE_ x-ms-office365-filtering-correlation-id: 759dd9e1-b897-4346-e1e0-08dadd6449e0 x-ms-exchange-senderadcheck: 1 x-ms-exchange-antispam-relay: 0 x-microsoft-antispam: BCL:0; x-microsoft-antispam-message-info: BNAMCIOAo+uN9fDz/J+xCFk11/PRW+/VYHBZ8gel0WzgGTVg+TtnkxcyE0HcDI5OIs5EnSyOwNFCxJKYBvDdVtjyUajsc6NQMUXbvrnNOAL1nHXHbYRkjToJsvBji7N6+16PuRL5AfjA3FKRqzNjMOn1h7LUeNsstYnBnPYsi7neztDRbh7AMWeC9+oBsHAsB1w6g2qoDcdV5ryGSd1RfTLYiI5WLE7j1iaKjiDMDPcyMWpfT1gqVwQnxjtpFtUTrtinAMrqvCU4Ql+j1bFyFpiileG/YD+kNF+FQ16XiAQVfhpFGi/zbHUMrcdHABaK1zBMHxtKj91wVzspJJhHHnYELI4NYAzXx4Cx+vIZvGJYdChEXVyWY5diQL/KVmLdNXeoRcF0TEk5IZtNsO8hTX9jvjk8rudj65b+VHhhcKBMomgkoW8Se5c0LfjdUKCHTno2OdwhNCTzAC2kjLKZMuB3UaxE91zgV1naxp/eaIUdPRw6okMGBQuLlblLCLgCdYbE4/89AktIoFkr3UaNbqi+wG5OLc2HXxMLOmvXzxnS4f+DfD9NylRamIZdfV2HwW8XhmB8RVEGWCCGLNwjElBD84gASnxGYDctmOEEmt0IK85Sn8L+IJQbgL4cXSO+hZlVTEU/h56jCQPOjkXZjMRCqi8BHQ3/4OyCNF4eayZr2rgtymcPtUvipnkr64MFSwxXEpZP5qWic8qJYL1V4Q== x-forefront-antispam-report: CIP:255.255.255.255;CTRY:;LANG:en;SCL:1;SRV:;IPV:NLI;SFV:NSPM;H:MW3PR12MB4553.namprd12.prod.outlook.com;PTR:;CAT:NONE;SFS:(13230022)(4636009)(39860400002)(396003)(366004)(136003)(346002)(376002)(451199015)(71200400001)(478600001)(33656002)(7696005)(2906002)(53546011)(52536014)(86362001)(186003)(5660300002)(30864003)(7416002)(55016003)(9686003)(38100700002)(26005)(38070700005)(8936002)(122000001)(41300700001)(6506007)(64756008)(54906003)(66946007)(4326008)(83380400001)(66476007)(66446008)(316002)(66556008)(8676002)(6916009)(76116006);DIR:OUT;SFP:1101; x-ms-exchange-antispam-messagedata-chunkcount: 1 x-ms-exchange-antispam-messagedata-0: =?utf-8?B?K05rMEVaenRJMVk0RGxJRFpHdUE5eitTNTJOd0J1NDlJczljTm5JQnlFWmM4?= =?utf-8?B?QjA1K0VoSjVleDRMM2tzU0xMSDU5aDYyb04ySEhGOTV6RDFLOVBYZktUcFB0?= =?utf-8?B?UUZJRUhtS2c2UDNob09uS3oyTTdVNi95eGNSTzcrU0dXMWhJSzNBZmcrY1Js?= =?utf-8?B?a242YW03L0JNeXNEem82UVRhV2FZMkJrSnBpUkZ4NDRVY1RJc0syYVJxOVVY?= =?utf-8?B?dGtrSWRudHo0eldqclhWREI5SENMNFRYRUluM3IwWC85M1hXL3pnaURwM0pa?= =?utf-8?B?czhJaGtGcDhudUZsdW5kY3VxeFh0cjZXc3plcmEwUisyRHNRUjNsYjZCR0Rt?= =?utf-8?B?OFMvV2J2OEhRMlZsWkhCQUYvMmljVUh4STlKWm9lN2JlWTh1dXpZOEF4ZEIr?= =?utf-8?B?NHlDZlNla2c3aWxseHVyYlR1d1QvbDJONGJTUmhSSXhiMDJWUTV0TFRPcFFr?= =?utf-8?B?cWhuMnpvd0Y5RTFKWjlyNUtNUFhnWVd6MHMxREdtbGUrQ0IwN080QnlBOUI1?= =?utf-8?B?NDZiUUxPS0VIYXJGZXpCMFNhcUVvbC9jZ3NJbGNWRkpqUUpBWHdrSCtNS1NK?= =?utf-8?B?cTNRRGFKRUZMYUpMT2Zzc0hLa3Y0cm1Kc3MvdU9sWmh0MVF3SmZzbDUvRlAz?= =?utf-8?B?YmZpSW5aWEdrR1czb0JKUUVDNFU3ZjVxd1NoS2MwYlp1cnpBaTZXL043THBp?= =?utf-8?B?MGQ1MllWMnNTV0Y0Wm55V3JOSXFMLzIvb3JYTmpZM0YrUS9RaHpuMnY5VkU2?= =?utf-8?B?UUZXZ1c0b0xZU1NlWUcyUGQ3cTBCYzNUcFY5bkdWVVVYY3JoVGVWT24zM3Vm?= =?utf-8?B?b3dUMkh5bjRDRGN1R014dURIWGlqVjRzcmlzYzAzVzFsOFJkL3FTeEVjMm1w?= =?utf-8?B?UDJTOUdldnVpVXFMQVUwdHpUTDdhR3JGQ2pyT3hudVpmRVN1bi9vUmNlVlhT?= =?utf-8?B?MENnZ2ozM0pqK3JScXNBMHFnNWZjR0V3cXJKWFR5d2hjWkFJSDU5aWJCV1Fq?= =?utf-8?B?bnIvSUJSZEIxL3ZjeXZOcGtrOFRWNWNwZlpuVURwaGdWb1BNKzBZQ0MxNmNr?= =?utf-8?B?RDRPcWVuQlhxdUUvOHh2TjZXMVJIdkVRRjZWS3hwUGFXU1ZncmdRVkYvV3Er?= =?utf-8?B?LzJoWm5wZWRLRUxXejVRUjRSbFp2WlZJV0NXcmFFWEZjdlF6UnB5d1lFNDYx?= =?utf-8?B?dGp6TkxIcVVLaGZqVEVnc1daRzNKbkhTdE9ZUm9TaUFOTlBtQmo0R0VFcURX?= =?utf-8?B?ZnE5alRPSTJESVJETWdjYkRSTEltRWtZVkEzVDRPMkc0ZjBLU01ONzQ2TlV1?= =?utf-8?B?aEoyQmhGTW5vRGpFSU95Yjltd1Q4bGR5V0cvaVc2YVJRcUpDcUlXai9PWDZo?= =?utf-8?B?S3BoNTlFeit5cjZENjRXNExsQUowZER1TGZtVHl3WlMvVmloK1ZIWWlMQmQy?= =?utf-8?B?QW5qbmROZnBqdlFzOHhWUlhiUjZLWm01cnlUL2F3Vjc3QU5YMWtPeG41VEN1?= =?utf-8?B?bXcxeVhnT3lvUlFhb1lXVVh0UzZqMVB5aFhWMFJ3S1k5TG12UW9xM3dSeU1M?= =?utf-8?B?Q1FSYmNGc3RXYzNJekVqUlNXckYwVkZrUm43by9qNDQ1dUdVMEJLOEYyUnJK?= =?utf-8?B?Y0F3Rnc1ZitONkdRWFUyTHN1NHU0ZmZsREFtT0hkNk9leVJNSmhpRzZ1a1F2?= =?utf-8?B?ZGhIanZWK3ZhT0ZSSjhQY0ptK2NBZVZWdkEwT25xbktiTk82Z1RFeDZWSXEx?= =?utf-8?B?V3YzRmEzN3ppdkZoNGNGKzNUVnJGcHZJL1NjQnFsQnpLU1JvZW9KOEwrWk53?= =?utf-8?B?ZHN4SzVJKy9BN0NYOFZUNndvRWpvaElXb3VIbSs4bUs2RHZTeXZnVGFPMUpx?= =?utf-8?B?REM4ZlRJb3g3a3dSRXAvMXlnaFJXRXVWM2dOWjZpcXJoakNDL09PdjB4MU56?= =?utf-8?B?dExQNmU1Ulc1RmFjZDZZZVE4MHlpRFRhdy9BbXZNTU5KcWFheUJsYmpqajl1?= =?utf-8?B?VXJFRVhjK0RIRU0wQzVmdzZscTF1MEFqS3NIL0JLOTdhTGlBUjI3ZmxycDZs?= =?utf-8?B?REhTZ2hMcFY0VmV4eHRaTzh0SGMrbFU3YXpqVHBqL3lrcVNRL0VybmFhRWJs?= =?utf-8?Q?6jM8=3D?= Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-OriginatorOrg: amd.com X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-AuthSource: MW3PR12MB4553.namprd12.prod.outlook.com X-MS-Exchange-CrossTenant-Network-Message-Id: 759dd9e1-b897-4346-e1e0-08dadd6449e0 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Dec 2022 23:46:43.1651 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 3dd8961f-e488-4e60-8e11-a82d994e183d X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: 9y1hYg2i1Tx4EfPWazhgAoN4JoHJ+zLGUuHGnQm8/uJR8jkeB2EA4jlQZcY0jyRr X-MS-Exchange-Transport-CrossTenantHeadersStamped: DS7PR12MB6120 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE, RCVD_IN_MSPIKE_H2,SPF_HELO_PASS,SPF_PASS autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org W0FNRCBPZmZpY2lhbCBVc2UgT25seSAtIEdlbmVyYWxdDQoNCkhpIEphbWVzLA0KDQo+IC0tLS0t T3JpZ2luYWwgTWVzc2FnZS0tLS0tDQo+IEZyb206IEphbWVzIE1vcnNlIDxqYW1lcy5tb3JzZUBh cm0uY29tPg0KPiBTZW50OiBUdWVzZGF5LCBEZWNlbWJlciAxMywgMjAyMiAxMTo1NSBBTQ0KPiBU bzogTW9nZXIsIEJhYnUgPEJhYnUuTW9nZXJAYW1kLmNvbT4NCj4gQ2M6IGZlbmdodWEueXVAaW50 ZWwuY29tOyBkYXZlLmhhbnNlbkBsaW51eC5pbnRlbC5jb207IHg4NkBrZXJuZWwub3JnOw0KPiBo cGFAenl0b3IuY29tOyBwYXVsbWNrQGtlcm5lbC5vcmc7IGFrcG1AbGludXgtZm91bmRhdGlvbi5v cmc7DQo+IHF1aWNfbmVlcmFqdUBxdWljaW5jLmNvbTsgcmR1bmxhcEBpbmZyYWRlYWQub3JnOw0K PiBkYW1pZW4ubGVtb2FsQG9wZW5zb3VyY2Uud2RjLmNvbTsgc29uZ211Y2h1bkBieXRlZGFuY2Uu Y29tOw0KPiBwZXRlcnpAaW5mcmFkZWFkLm9yZzsganBvaW1ib2VAa2VybmVsLm9yZzsgcGJvbnpp bmlAcmVkaGF0LmNvbTsNCj4gY2hhbmcuc2Vvay5iYWVAaW50ZWwuY29tOyBwYXdhbi5rdW1hci5n dXB0YUBsaW51eC5pbnRlbC5jb207DQo+IGptYXR0c29uQGdvb2dsZS5jb207IGRhbmllbC5zbmVk ZG9uQGxpbnV4LmludGVsLmNvbTsgRGFzMSwgU2FuZGlwYW4NCj4gPFNhbmRpcGFuLkRhc0BhbWQu Y29tPjsgdG9ueS5sdWNrQGludGVsLmNvbTsgbGludXgtZG9jQHZnZXIua2VybmVsLm9yZzsNCj4g bGludXgta2VybmVsQHZnZXIua2VybmVsLm9yZzsgYmFnYXNkb3RtZUBnbWFpbC5jb207IGVyYW5p YW5AZ29vZ2xlLmNvbTsNCj4gY29yYmV0QGx3bi5uZXQ7IHRnbHhAbGludXRyb25peC5kZTsgbWlu Z29AcmVkaGF0LmNvbTsgYnBAYWxpZW44LmRlOw0KPiByZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29t DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggdjggMTAvMTNdIHg4Ni9yZXNjdHJsOiBBZGQgc3lzZnMg aW50ZXJmYWNlIHRvIHdyaXRlDQo+IG1ibV90b3RhbF9ieXRlc19jb25maWcNCj4gDQo+IEhpIEJh YnUsDQo+IA0KPiBPbiAwOC8xMi8yMDIyIDAwOjAyLCBNb2dlciwgQmFidSB3cm90ZToNCj4gPiBb QU1EIE9mZmljaWFsIFVzZSBPbmx5IC0gR2VuZXJhbF0NCj4gPj4gLS0tLS1PcmlnaW5hbCBNZXNz YWdlLS0tLS0NCj4gPj4gRnJvbTogSmFtZXMgTW9yc2UgPGphbWVzLm1vcnNlQGFybS5jb20+DQo+ ID4+IFNlbnQ6IFdlZG5lc2RheSwgRGVjZW1iZXIgNywgMjAyMiAxMToyMSBBTQ0KPiA+PiBUbzog TW9nZXIsIEJhYnUgPEJhYnUuTW9nZXJAYW1kLmNvbT4NCj4gPj4gQ2M6IGZlbmdodWEueXVAaW50 ZWwuY29tOyBkYXZlLmhhbnNlbkBsaW51eC5pbnRlbC5jb207DQo+ID4+IHg4NkBrZXJuZWwub3Jn OyBocGFAenl0b3IuY29tOyBwYXVsbWNrQGtlcm5lbC5vcmc7DQo+ID4+IGFrcG1AbGludXgtZm91 bmRhdGlvbi5vcmc7IHF1aWNfbmVlcmFqdUBxdWljaW5jLmNvbTsNCj4gPj4gcmR1bmxhcEBpbmZy YWRlYWQub3JnOyBkYW1pZW4ubGVtb2FsQG9wZW5zb3VyY2Uud2RjLmNvbTsNCj4gPj4gc29uZ211 Y2h1bkBieXRlZGFuY2UuY29tOyBwZXRlcnpAaW5mcmFkZWFkLm9yZzsNCj4ganBvaW1ib2VAa2Vy bmVsLm9yZzsNCj4gPj4gcGJvbnppbmlAcmVkaGF0LmNvbTsgY2hhbmcuc2Vvay5iYWVAaW50ZWwu Y29tOw0KPiA+PiBwYXdhbi5rdW1hci5ndXB0YUBsaW51eC5pbnRlbC5jb207DQo+ID4+IGptYXR0 c29uQGdvb2dsZS5jb207IGRhbmllbC5zbmVkZG9uQGxpbnV4LmludGVsLmNvbTsgRGFzMSwgU2Fu ZGlwYW4NCj4gPj4gPFNhbmRpcGFuLkRhc0BhbWQuY29tPjsgdG9ueS5sdWNrQGludGVsLmNvbTsN Cj4gPj4gbGludXgtZG9jQHZnZXIua2VybmVsLm9yZzsgbGludXgta2VybmVsQHZnZXIua2VybmVs Lm9yZzsNCj4gPj4gYmFnYXNkb3RtZUBnbWFpbC5jb207IGVyYW5pYW5AZ29vZ2xlLmNvbTsgY29y YmV0QGx3bi5uZXQ7DQo+ID4+IHRnbHhAbGludXRyb25peC5kZTsgbWluZ29AcmVkaGF0LmNvbTsg YnBAYWxpZW44LmRlOw0KPiA+PiByZWluZXR0ZS5jaGF0cmVAaW50ZWwuY29tDQo+ID4+IFN1Ympl Y3Q6IFJlOiBbUEFUQ0ggdjggMTAvMTNdIHg4Ni9yZXNjdHJsOiBBZGQgc3lzZnMgaW50ZXJmYWNl IHRvDQo+ID4+IHdyaXRlIG1ibV90b3RhbF9ieXRlc19jb25maWcNCj4gDQo+ID4+IE9uIDA0LzEx LzIwMjIgMjA6MDEsIEJhYnUgTW9nZXIgd3JvdGU6DQo+ID4+PiBUaGUgY3VycmVudCBldmVudCBj b25maWd1cmF0aW9uIGZvciBtYm1fdG90YWxfYnl0ZXMgY2FuIGJlIGNoYW5nZWQNCj4gPj4+IGJ5 IHRoZSB1c2VyIGJ5IHdyaXRpbmcgdG8gdGhlIGZpbGUNCj4gPj4+IC9zeXMvZnMvcmVzY3RybC9p bmZvL0wzX01PTi9tYm1fdG90YWxfYnl0ZXNfY29uZmlnLg0KPiA+Pj4NCj4gPj4+IFRoZSBldmVu dCBjb25maWd1cmF0aW9uIHNldHRpbmdzIGFyZSBkb21haW4gc3BlY2lmaWMgYW5kIHdpbGwgYWZm ZWN0DQo+ID4+PiBhbGwgdGhlIENQVXMgaW4gdGhlIGRvbWFpbi4NCj4gPj4+DQo+ID4+PiBGb2xs b3dpbmcgYXJlIHRoZSB0eXBlcyBvZiBldmVudHMgc3VwcG9ydGVkOg0KPiA+Pj4NCj4gPj4+ID09 PT0NCj4gPj4gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PT09PT09PT09PT0NCj4gPj4+IEJpdHMgICBEZXNjcmlwdGlvbg0KPiA+Pj4gPT09PQ0KPiA+PiA9 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09 PQ0KPiA+Pj4gNiAgICAgIERpcnR5IFZpY3RpbXMgZnJvbSB0aGUgUU9TIGRvbWFpbiB0byBhbGwg dHlwZXMgb2YgbWVtb3J5DQo+ID4+PiA1ICAgICAgUmVhZHMgdG8gc2xvdyBtZW1vcnkgaW4gdGhl IG5vbi1sb2NhbCBOVU1BIGRvbWFpbg0KPiA+Pj4gNCAgICAgIFJlYWRzIHRvIHNsb3cgbWVtb3J5 IGluIHRoZSBsb2NhbCBOVU1BIGRvbWFpbg0KPiA+Pj4gMyAgICAgIE5vbi10ZW1wb3JhbCB3cml0 ZXMgdG8gbm9uLWxvY2FsIE5VTUEgZG9tYWluDQo+ID4+PiAyICAgICAgTm9uLXRlbXBvcmFsIHdy aXRlcyB0byBsb2NhbCBOVU1BIGRvbWFpbg0KPiA+Pj4gMSAgICAgIFJlYWRzIHRvIG1lbW9yeSBp biB0aGUgbm9uLWxvY2FsIE5VTUEgZG9tYWluDQo+ID4+PiAwICAgICAgUmVhZHMgdG8gbWVtb3J5 IGluIHRoZSBsb2NhbCBOVU1BIGRvbWFpbg0KPiA+Pj4gPT09PQ0KPiA+PiA9PT09PT09PT09PT09 PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQ0KPiA+Pj4NCj4g Pj4+IEZvciBleGFtcGxlOg0KPiA+Pj4gVG8gY2hhbmdlIHRoZSBtYm1fdG90YWxfYnl0ZXMgdG8g Y291bnQgb25seSByZWFkcyBvbiBkb21haW4gMCwgdGhlDQo+ID4+PiBiaXRzIDAsIDEsIDQgYW5k IDUgbmVlZHMgdG8gYmUgc2V0LCB3aGljaCBpcyAxMTAwMTFiIChpbiBoZXggMHgzMykuDQo+ID4+ PiBSdW4gdGhlIGNvbW1hbmQuDQo+ID4+PiAJJGVjaG8gIDA9MHgzMyA+IC9zeXMvZnMvcmVzY3Ry bC9pbmZvL0wzX01PTi9tYm1fdG90YWxfYnl0ZXNfY29uZmlnDQo+ID4+Pg0KPiA+Pj4gVG8gY2hh bmdlIHRoZSBtYm1fdG90YWxfYnl0ZXMgdG8gY291bnQgYWxsIHRoZSBzbG93IG1lbW9yeSByZWFk cyBvbg0KPiA+Pj4gZG9tYWluIDEsIHRoZSBiaXRzIDQgYW5kIDUgbmVlZHMgdG8gYmUgc2V0IHdo aWNoIGlzIDExMDAwMGIgKGluIGhleCAweDMwKS4NCj4gPj4+IFJ1biB0aGUgY29tbWFuZC4NCj4g Pj4+IAkkZWNobyAgMT0weDMwID4gL3N5cy9mcy9yZXNjdHJsL2luZm8vTDNfTU9OL21ibV90b3Rh bF9ieXRlc19jb25maWcNCj4gPj4NCj4gPj4+IGRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rZXJuZWwv Y3B1L3Jlc2N0cmwvcmR0Z3JvdXAuYw0KPiA+Pj4gYi9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Jlc2N0 cmwvcmR0Z3JvdXAuYw0KPiA+Pj4gaW5kZXggMThmOTU4OGE0MWNmLi4wY2RjY2I2OTM4NmUgMTAw NjQ0DQo+ID4+PiAtLS0gYS9hcmNoL3g4Ni9rZXJuZWwvY3B1L3Jlc2N0cmwvcmR0Z3JvdXAuYw0K PiA+Pj4gKysrIGIvYXJjaC94ODYva2VybmVsL2NwdS9yZXNjdHJsL3JkdGdyb3VwLmMNCj4gPj4+ IEBAIC0xNTA1LDYgKzE1MDUsMTMzIEBAIHN0YXRpYyBpbnQNCj4gPj4+IG1ibV9sb2NhbF9ieXRl c19jb25maWdfc2hvdyhzdHJ1Y3QNCj4gPj4ga2VybmZzX29wZW5fZmlsZSAqb2YsDQo+ID4+PiAg CXJldHVybiAwOw0KPiA+Pj4gIH0NCj4gPj4+DQo+ID4+PiArc3RhdGljIHZvaWQgbW9uX2V2ZW50 X2NvbmZpZ193cml0ZSh2b2lkICppbmZvKSB7DQo+ID4+PiArCXN0cnVjdCBtb25fY29uZmlnX2lu Zm8gKm1vbl9pbmZvID0gaW5mbzsNCj4gPj4+ICsJdTMyIGluZGV4Ow0KPiA+Pj4gKw0KPiA+Pj4g KwlpbmRleCA9IG1vbl9ldmVudF9jb25maWdfaW5kZXhfZ2V0KG1vbl9pbmZvLT5ldnRpZCk7DQo+ ID4+PiArCWlmIChpbmRleCA+PSBNQVhfQ09ORklHX0VWRU5UUykgew0KPiA+Pj4gKwkJcHJfd2Fy bl9vbmNlKCJJbnZhbGlkIGV2ZW50IGlkICVkXG4iLCBtb25faW5mby0+ZXZ0aWQpOw0KPiA+Pj4g KwkJcmV0dXJuOw0KPiA+Pj4gKwl9DQo+ID4+PiArCXdybXNyKE1TUl9JQTMyX0VWVF9DRkdfQkFT RSArIGluZGV4LCBtb25faW5mby0+bW9uX2NvbmZpZywgMCk7DQo+ID4+IH0NCj4gPj4+ICsNCj4g Pj4+ICtzdGF0aWMgaW50IG1ibV9jb25maWdfd3JpdGUoc3RydWN0IHJkdF9yZXNvdXJjZSAqciwg c3RydWN0IHJkdF9kb21haW4gKmQsDQo+ID4+PiArCQkJICAgIHUzMiBldnRpZCwgdTMyIHZhbCkN Cj4gPj4+ICt7DQo+ID4+PiArCXN0cnVjdCBtb25fY29uZmlnX2luZm8gbW9uX2luZm8gPSB7MH07 DQo+ID4+PiArCWludCByZXQgPSAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwlyZHRfbGFzdF9jbWRfY2xl YXIoKTsNCj4gPj4+ICsNCj4gPj4+ICsJLyogbW9uX2NvbmZpZyBjYW5ub3QgYmUgbW9yZSB0aGFu IHRoZSBzdXBwb3J0ZWQgc2V0IG9mIGV2ZW50cyAqLw0KPiA+Pj4gKwlpZiAodmFsID4gTUFYX0VW VF9DT05GSUdfQklUUykgew0KPiA+Pj4gKwkJcmR0X2xhc3RfY21kX3B1dHMoIkludmFsaWQgZXZl bnQgY29uZmlndXJhdGlvblxuIik7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJ fQ0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBSZWFkIHRoZSBjdXJyZW50IGNvbmZp ZyB2YWx1ZSBmaXJzdC4gSWYgYm90aCBhcmUgc2FtZSB0aGVuDQo+ID4+PiArCSAqIHdlIGRvbid0 IG5lZWQgdG8gd3JpdGUgaXQgYWdhaW4uDQo+ID4+PiArCSAqLw0KPiA+Pj4gKwltb25faW5mby5l dnRpZCA9IGV2dGlkOw0KPiA+Pg0KPiA+Pj4gKwltb25kYXRhX2NvbmZpZ19yZWFkKGQsICZtb25f aW5mbyk7DQo+ID4+DQo+ID4+IFRoaXMgcmVhZHMgdGhlIE1TUiBvbiB0aGlzIENQVSwgd2hpY2gg Z2V0cyB0aGUgcmVzdWx0IGZvciB0aGlzIGRvbWFpbi4uLg0KPiA+DQo+ID4gWzFdIE5vLiBUaGlz IHJlYWQgaGFwcGVucyBhdCB0aGUgdGFyZ2V0IGRvbWFpbi4NCj4gDQo+IE9vcHMgLi4uIGxvb2tz IGxpa2UgSSBtdWRkbGVkIHRoYXQgd2l0aCBtb25fZXZlbnRfY29uZmlnX3JlYWQoKS4NCj4gDQo+ IA0KPiA+IHN0YXRpYyB2b2lkIG1vbmRhdGFfY29uZmlnX3JlYWQoc3RydWN0IHJkdF9kb21haW4g KmQsIHN0cnVjdA0KPiA+IG1vbl9jb25maWdfaW5mbyAqbW9uX2luZm8pIHsNCj4gPiAgICAgICAg IHNtcF9jYWxsX2Z1bmN0aW9uX2FueSgmZC0+Y3B1X21hc2ssIG1vbl9ldmVudF9jb25maWdfcmVh ZCwNCj4gPiBtb25faW5mbywgMSk7IH0NCj4gDQo+ID4+PiArCWlmIChtb25faW5mby5tb25fY29u ZmlnID09IHZhbCkNCj4gPj4+ICsJCWdvdG8gd3JpdGVfZXhpdDsNCj4gPj4+ICsNCj4gPj4+ICsJ bW9uX2luZm8ubW9uX2NvbmZpZyA9IHZhbDsNCj4gPj4+ICsNCj4gPj4+ICsJLyoNCj4gPj4+ICsJ ICogVXBkYXRlIE1TUl9JQTMyX0VWVF9DRkdfQkFTRSBNU1JzIG9uIGFsbCB0aGUgQ1BVcyBpbiB0 aGUNCj4gPj4+ICsJICogZG9tYWluLiBUaGUgTVNScyBvZmZzZXQgZnJvbSBNU1IgTVNSX0lBMzJf RVZUX0NGR19CQVNFDQo+ID4+PiArCSAqIGFyZSBzY29wZWQgYXQgdGhlIGRvbWFpbiBsZXZlbC4g V3JpdGluZyBhbnkgb2YgdGhlc2UgTVNScw0KPiA+Pj4gKwkgKiBvbiBvbmUgQ1BVIGlzIHN1cHBv c2VkIHRvIGJlIG9ic2VydmVkIGJ5IGFsbCBDUFVzIGluIHRoZQ0KPiA+Pj4gKwkgKiBkb21haW4u IEhvd2V2ZXIsIHRoZSBoYXJkd2FyZSB0ZWFtIHJlY29tbWVuZHMgdG8gdXBkYXRlDQo+ID4+PiAr CSAqIHRoZXNlIE1TUnMgb24gYWxsIHRoZSBDUFVzIGluIHRoZSBkb21haW4uDQo+ID4+PiArCSAq Lw0KPiA+Pg0KPiA+Pj4gKwlvbl9lYWNoX2NwdV9tYXNrKCZkLT5jcHVfbWFzaywgbW9uX2V2ZW50 X2NvbmZpZ193cml0ZSwNCj4gPj4gJm1vbl9pbmZvLA0KPiA+Pj4gKzEpOw0KPiA+Pg0KPiA+PiAu Li4gYnV0IGhlcmUgeW91IElQSSBhbGwgdGhlIENQVXMgaW4gdGhlIHRhcmdldCBkb21haW4gdG8g dXBkYXRlIHRoZW0uDQo+IA0KPiA+IFsyXSBUaGVyZSBoYXZlIGJlZW4gc29tZSBjaGFuZ2VzIGlu IHRoaXMgYXJlYSByZWNlbnRseS4gVGhlDQo+ID4gcmVxdWlyZW1lbnQgb2Ygd3JpdGluZyB0aGUg dmFsdWUgb24gYWxsIHRoZSBDUFVzIGluIHRoZSBkb21haW4gaXMgbm90DQo+ID4gcmVxdWlyZWQg YW55bW9yZS4gSSBhbSB3b3JraW5nIG9uIHZlcmlmeWluZyB0aGlzIHJpZ2h0IG5vdy4gIElmDQo+ ID4gZXZlcnl0aGluZyB3b3JrcywgdGhlbiBJIGNhbiBkbyBzbXBfY2FsbF9mdW5jdGlvbl9hbnko JmQtPmNwdV9tYXNrLA0KPiA+IG1vbl9ldmVudF9jb25maWdfd3JpdGUsICAmbW9uX2luZm8sIDEp Ow0KPiA+DQo+ID4gSSB3aWxsIGNvbmZpcm0gdGhpcyBzb29uLg0KPiANCj4gT2theSwgdGhhdCBt YWtlcyBteSBuZXh0IHF1ZXN0aW9uIG1vcmUgY29uZnVzaW5nIHRoZW4gLi4uLg0KPiANCj4gDQo+ ID4+IFRoaXMgbWVhbnMgeW91IHVubmVjZXNzYXJpbHkgSVBJIHRoZSBDUFVzIGluIHRoZSB0YXJn ZXQgZG9tYWluIGlmDQo+ID4+IHRoZXkgYWxyZWFkeSBoYWQgdGhpcyB2YWx1ZSwgYnV0IHRoZSB3 cml0ZSBzeXNjYWxsIG9jY3VycmVkIG9uIGENCj4gPj4gZG9tYWluIHRoYXQgZGlmZmVycy4gVGhp cyBpc24ndCB3aGF0IHlvdSBpbnRlbmRlZCwgYnV0IGl0cyBiZW5pZ24uDQo+ID4+IE1vcmUgb2Yg YSBwcm9ibGVtIGlzOiBXb24ndCB0aGlzIGdldCBza2lwcGVkIGlmIHRoZSB3cml0ZSBzeXNjYWxs DQo+ID4+IG9jY3VycyBvbiBhIGRvbWFpbiB0aGF0IGhhcHBlbnMgdG8gaGF2ZSB0aGUgdGFyZ2V0 IGNvbmZpZ3VyYXRpb24gYWxyZWFkeT8NCj4gDQo+ID4gRG8geW91IHN0aWxsIHRoaW5rIHRoaXMg aXMgYSBwcm9ibGVtIGFmdGVyIG15IGNvbW1lbnQgWzFdIGFib3ZlPyAgT3IgQW0gSQ0KPiBtaXNz aW5nIHNvbWV0aGluZz8NCj4gDQo+IEknZCBtdWRkbGVkIHR3byBzaW1pbGFybHkgbmFtZWQgZnVu Y3Rpb25zLiBTb3JyeSBmb3IgdGhlIG5vaXNlIQ0KDQpObyB3b3JyaWVzLiBJdCBtYWRlIG1lIGxv b2sgY2xvc2VseS4gDQo+IA0KPiBJIHRoaW5rIHdoYXQgeW91J3JlIGxlZnQgd2l0aCBpcyB0aGUg cXVlc3Rpb24gIldoYXQgaXMgdGhlIG1vbml0b3IgY29uZmlnIGZvcg0KPiBDUFVzIHRoYXQgd2Vy ZSBvZmZsaW5lIHdoZW4gaXQgd2FzIGxhc3QgY2hhbmdlZD8iLiBJZiBpdHMgcHJlc2VydmVkIGJ5 IHRoZSBDUFUsDQo+IHRoZW4gaXRzIHNvbWUgdW5rbm93biB2YWx1ZSwgYW5kIG5lZWRzIHRvIGJl IG1hZGUgdGhlIHNhbWUgYXMgdGhlIHZhbHVlDQo+IHVzZXItc3BhY2UvdGhlLWRvbWFpbiBjdXJy ZW50bHkgZXhwZWN0cy4NCj4gDQo+IElmIHRoZXJlIGlzIG9ubHkgb25lIGNvbmZpZyB2YWx1ZSBm b3IgdGhlIGRvbWFpbiAoYXMgeW91ciBjb21tZW50IGFib3ZlDQo+IHN1Z2dlc3RzKSwgdGhlbiBu b3RoaW5nIG5lZWRzIGRvaW5nIGhlcmUuDQoNCk9rLiBUaGFua3MNCg0KPiANCj4gDQo+ID4+IEJl Y2F1c2UgeW91IG5lZWQgdGhlIHNhbWUgdmFsdWUgdG8gYmUgd3JpdHRlbiBvbiBldmVyeSBDUFUg Li4uIHdoYXQNCj4gPj4gaGFwcGVucyB0byBDUFVzIHRoYXQgYXJlIG9mZmxpbmUgd2hlbiB0aGUg Y29uZmlndXJhdGlvbiBpcyBjaGFuZ2VkPw0KPiA+PiBEbyB0aGV5IGtlZXAgdGhlaXIgcHJldmlv dXMgdmFsdWUsIG9yIGRvZXMgaXQgZ2V0IHJlc2V0Pw0KPiA+DQo+ID4gVGhlIGNvbnRlbnRzIG9m IHRoaXMgTVNSIHJlZ2lzdGVyIGFyZSBoZWxkIG91dHNpZGUgb2YgYWxsIHRoZSBjb3Jlcy4NCj4g PiBJZiB0aGUgdmFsdWUgY2hhbmdlcyB3aGlsZSBhIGNwdSBpcyBvZmZsaW5lLCBhbmQgaXQgcmVh ZHMgaXQgb25jZSBpdCBjb21lcw0KPiBvbmxpbmUsIGl0IHdpbGwgZ2V0IHRoZSBuZXcgdmFsdWUu DQo+IA0KPiBUaGlzIGZpdHMgd2l0aCB5b3VyIG5ldyBkZXNjcmlwdGlvbiBvZiB0aGUgdmFsdWUg b25seSBuZWVkaW5nIHRvIGJlIHdyaXR0ZW4gZnJvbQ0KPiBvbmUgQ1BVIGluIHRoZSBkb21haW4u DQoNClllcy4gV2lsbCBjaGFuZ2UgdGhlIGNvbW1lbnQgYWJvdXQgb25lIENQVS4gDQpTdGlsbCB3 YWl0aW5nIGZvciB0aGUgY29tbWVudCBmb3IgdGhlIHdob2xlIHNlcmllcyBmcm9tIFJlaW5ldHRl IGJlZm9yZSBJIHJlLXNwaW4gdGhlIG5leHQgdmVyc2lvbi4NCj4gDQo+IA0KPiA+PiBJIHRoaW5r IHRoaXMgaXMgYmVzdCBzb2x2ZWQgd2l0aCBhIHBlcmNwdSB2YXJpYWJsZSBmb3IgdGhlIGN1cnJl bnQNCj4gPj4gdmFsdWUgb2YgdGhlIE1TUi4gWW91IGNhbiB0aGVuIHJlYWQgaXQgZm9yIENQVXMg aW4gYSByZW1vdGUgZG9tYWluLA0KPiA+PiBhbmQgb25seSBpc3N1ZSBJUElzIHRvICdzeW5jJyB0 aGUgdmFsdWUgaWYgbmVlZGVkLiBZb3UgY2FuIHRoZW4NCj4gPj4gcmUtdXNlIHRoZSBzeW5jIGNh bGwgaW4NCj4gPj4gcmVzY3RybF9vbmxpbmVfY3B1KCkgdG8gc2V0IHRoZSBNU1IgdG8gd2hhdGV2 ZXIgdmFsdWUgaXQgc2hvdWxkIGN1cnJlbnRseSBiZS4NCj4gPg0KPiA+IFRoaXMgbWF5IG5vdCBi ZSByZXF1aXJlZCB3aXRoIG15IGNvbW1lbnQgMSBhbmQgMiBhYm92ZS4NCj4gPg0KPiA+Pg0KPiA+ Pg0KPiA+Pj4gKw0KPiA+Pj4gKwkvKg0KPiA+Pj4gKwkgKiBXaGVuIGFuIEV2ZW50IENvbmZpZ3Vy YXRpb24gaXMgY2hhbmdlZCwgdGhlIGJhbmR3aWR0aCBjb3VudGVycw0KPiA+Pj4gKwkgKiBmb3Ig YWxsIFJNSURzIGFuZCBFdmVudHMgd2lsbCBiZSBjbGVhcmVkIGJ5IHRoZSBoYXJkd2FyZS4gVGhl DQo+ID4+PiArCSAqIGhhcmR3YXJlIGFsc28gc2V0cyBNU1JfSUEzMl9RTV9DVFIuVW5hdmFpbGFi bGUgKGJpdCA2MikgZm9yDQo+ID4+PiArCSAqIGV2ZXJ5IFJNSUQgb24gdGhlIG5leHQgcmVhZCB0 byBhbnkgZXZlbnQgZm9yIGV2ZXJ5IFJNSUQuDQo+ID4+PiArCSAqIFN1YnNlcXVlbnQgcmVhZHMg d2lsbCBoYXZlIE1TUl9JQTMyX1FNX0NUUi5VbmF2YWlsYWJsZSAoYml0IDYyKQ0KPiA+Pj4gKwkg KiBjbGVhcmVkIHdoaWxlIGl0IGlzIHRyYWNrZWQgYnkgdGhlIGhhcmR3YXJlLiBDbGVhciB0aGUN Cj4gPj4+ICsJICogbWJtX2xvY2FsIGFuZCBtYm1fdG90YWwgY291bnRzIGZvciBhbGwgdGhlIFJN SURzLg0KPiA+Pj4gKwkgKi8NCj4gPj4+ICsJbWVtc2V0KGQtPm1ibV9sb2NhbCwgMCwgc2l6ZW9m KHN0cnVjdCBtYm1fc3RhdGUpICogci0+bnVtX3JtaWQpOw0KPiA+Pj4gKwltZW1zZXQoZC0+bWJt X3RvdGFsLCAwLCBzaXplb2Yoc3RydWN0IG1ibV9zdGF0ZSkgKiByLT5udW1fcm1pZCk7DQo+ID4+ PiArDQo+ID4+PiArd3JpdGVfZXhpdDoNCj4gPj4+ICsJcmV0dXJuIHJldDsNCj4gPj4+ICt9DQo+ ID4+DQo+ID4+DQo+ID4+PiArc3RhdGljIGludCBtb25fY29uZmlnX3BhcnNlKHN0cnVjdCByZHRf cmVzb3VyY2UgKnIsIGNoYXIgKnRvaywgdTMyDQo+ID4+PiArZXZ0aWQpIHsNCj4gPj4+ICsJY2hh ciAqZG9tX3N0ciA9IE5VTEwsICppZF9zdHI7DQo+ID4+PiArCXVuc2lnbmVkIGxvbmcgZG9tX2lk LCB2YWw7DQo+ID4+PiArCXN0cnVjdCByZHRfZG9tYWluICpkOw0KPiA+Pj4gKwlpbnQgcmV0ID0g MDsNCj4gPj4+ICsNCj4gPj4+ICtuZXh0Og0KPiA+Pj4gKwlpZiAoIXRvayB8fCB0b2tbMF0gPT0g J1wwJykNCj4gPj4+ICsJCXJldHVybiAwOw0KPiA+Pj4gKw0KPiA+Pj4gKwkvKiBTdGFydCBwcm9j ZXNzaW5nIHRoZSBzdHJpbmdzIGZvciBlYWNoIGRvbWFpbiAqLw0KPiA+Pj4gKwlkb21fc3RyID0g c3RyaW0oc3Ryc2VwKCZ0b2ssICI7IikpOw0KPiA+Pj4gKwlpZF9zdHIgPSBzdHJzZXAoJmRvbV9z dHIsICI9Iik7DQo+ID4+PiArDQo+ID4+PiArCWlmICghZG9tX3N0ciB8fCBrc3RydG91bChpZF9z dHIsIDEwLCAmZG9tX2lkKSkgew0KPiA+Pj4gKwkJcmR0X2xhc3RfY21kX3B1dHMoIk1pc3Npbmcg Jz0nIG9yIG5vbi1udW1lcmljIGRvbWFpbiBpZFxuIik7DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZB TDsNCj4gPj4+ICsJfQ0KPiA+Pj4gKw0KPiA+Pj4gKwlpZiAoIWRvbV9zdHIgfHwga3N0cnRvdWwo ZG9tX3N0ciwgMTYsICZ2YWwpKSB7DQo+ID4+PiArCQlyZHRfbGFzdF9jbWRfcHV0cygiTWlzc2lu ZyAnPScgb3Igbm9uLW51bWVyaWMgZXZlbnQNCj4gPj4gY29uZmlndXJhdGlvbiB2YWx1ZVxuIik7 DQo+ID4+PiArCQlyZXR1cm4gLUVJTlZBTDsNCj4gPj4+ICsJfQ0KPiA+Pg0KPiA+PiBUaGlzIGlz IHBhcnNpbmcgdGhlIHNhbWUgZm9ybWF0IHN0cmluZ3MgYXMgcGFyc2VfbGluZSgpLiBJcyB0aGVy ZSBhbnkNCj4gPj4gY2hhbmNlIHRoYXQgY29kZSBjb3VsZCBiZSByZS11c2VkIGluc3RlYWQgb2Yg ZHVwbGljYXRlZD8gVGhpcyB3YXkNCj4gPj4gYW55dGhpbmcgdGhhdCBpcyBhZGRlZCB0byB0aGUg Zm9ybWF0IChvciBidWdzIGZvdW5kISkgb25seSBuZWVkIHN1cHBvcnRpbmcgaW4NCj4gb25jZSBw bGFjZS4NCj4gPg0KPiA+IEkgaGF2ZSBjaGVja2VkIG9uIHJldXNpbmcgdGhlIHBhcnNlX2xpbmUu IFRoZSBwYXJzZV9saW5lIGlzDQo+ID4gc3BlY2lmaWNhbGx5IHdyaXR0ZW4gZm9yIHNjaGVtYXRh LiAgV2UgY2FuJ3QgcmV1c2UgcGFyc2VfbGluZSB3aXRob3V0DQo+IGNoYW5naW5nIGl0IGNvbXBs ZXRlbHkuDQo+IA0KPiBJIGFncmVlIGl0cyBhIGxpdHRsZSBtb3JlIGNvbXBsaWNhdGVkIHRoYW4g aXQgbG9va2VkIGF0IGZpcnN0LiBJIG1pZ2h0IGhhdmUgYSBnbyBhdA0KPiBpdCBsYXRlci4uLg0K DQpPayBUaGFua3MNCkJhYnUNCg0K