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 X-Spam-Level: X-Spam-Status: No, score=-0.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 70C21C31E44 for ; Fri, 14 Jun 2019 10:09:22 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 3F23820665 for ; Fri, 14 Jun 2019 10:09:22 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=semihalf-com.20150623.gappssmtp.com header.i=@semihalf-com.20150623.gappssmtp.com header.b="lA8ItZsv" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726841AbfFNKJV (ORCPT ); Fri, 14 Jun 2019 06:09:21 -0400 Received: from mail-lj1-f194.google.com ([209.85.208.194]:44194 "EHLO mail-lj1-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726793AbfFNKJV (ORCPT ); Fri, 14 Jun 2019 06:09:21 -0400 Received: by mail-lj1-f194.google.com with SMTP id k18so1766129ljc.11 for ; Fri, 14 Jun 2019 03:09:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=gBUTP/9d4eNCeN/EaijNMsMRPRF11lY2kYs29fPMWho=; b=lA8ItZsv8zU0scjXM+Gj9HSHf1FNgIylWpMp1BDQ2+swnb/puvmoO0tt7yIz8Ct65B yryJj2b91cQeFuHbbj3J1V2y5AdJ1zqt9l7vj0KVyzVPJ0lB8JrGnKMPqY6W++L4rEaT utqFMYNHUZJnOxDWKajoNntqoJ89FnwFHAcOs5ZALev9OrOqSrVSTQwUw9h+ljI9J3Qc Tv5D1KieK5GTif5P1OCM5uI9stIbPamnYxGerNqUPzQhavSBeZ056rVim0MkRjapEgc2 3WiM8fI/R2z2+TJEb8aN3C4sU6RnJgjnlmgTsB7omYQ79golinlsrb2sarF83rk/Jtdu 0UIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=gBUTP/9d4eNCeN/EaijNMsMRPRF11lY2kYs29fPMWho=; b=ssFgbEVk1fOiNZx0GNTxsG19nBF2f/jnQL3gz4bEsXdcGEdPXAGTLGl74SDOpWrrln dFEKpzcCF23fAreLXNO47c078Jy/mhTolBZYFkDQfqoy33EXPeuALd9fkz/yYLtDl4qt EwxvG2sVnN90slCsPVBGrdAZDAqLykAiMSzUFWoy3ZCtnCRFCFVAFJsG0/H9EP51TWFo SkFtMmUjljCef6S0qh1woIBP8BHfVWfWQOhAo4fI60Abh+8yOk3DJPAvfPEIGf982spc zR8uX3HNSthrmP+1kFst3Yd2qBXqJPReKcDtTKzcWrbR54ukUMlSD71Nyu+ryh5t4soO 70lw== X-Gm-Message-State: APjAAAUbV4xYfhGXq/HOs7F+AJCBhfMleHzvWxRoEy8tdCUGUlX4Baqb WWM6leiGyf/As9Anm0Kl6HOn7A== X-Google-Smtp-Source: APXvYqzFjvfaIr7hZ0uqPHIOyBaOi/9LfmBYdWpPBUZqqTBN80jiQMuCXJUTUISCyY1oJPiCgUMkOg== X-Received: by 2002:a2e:6348:: with SMTP id x69mr39647043ljb.186.1560506959356; Fri, 14 Jun 2019 03:09:19 -0700 (PDT) Received: from [192.168.1.102] ([83.68.95.66]) by smtp.googlemail.com with ESMTPSA id o11sm406073lfl.15.2019.06.14.03.09.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Jun 2019 03:09:18 -0700 (PDT) Subject: Re: [bug report] ACPI: Add new IORT functions to support MSI domain handling To: Hanjun Guo , Robin Murphy , Dan Carpenter Cc: linux-acpi@vger.kernel.org, linux-arm-kernel@lists.infradead.org, Lorenzo Pieralisi References: <20190613065410.GB16334@mwanda> <425b5d78-b38f-270b-94e2-7ece1e5498e5@arm.com> <5f9fecb1-66de-b550-3f8e-097795a08efe@huawei.com> From: Tomasz Nowicki Message-ID: <40cc7b22-d5e6-ffcf-d6ec-a74f3fbe906c@semihalf.com> Date: Fri, 14 Jun 2019 12:09:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <5f9fecb1-66de-b550-3f8e-097795a08efe@huawei.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: en-US Content-Transfer-Encoding: 8bit Sender: linux-acpi-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-acpi@vger.kernel.org On 14.06.2019 03:03, Hanjun Guo wrote: > On 2019/6/13 17:30, Robin Murphy wrote: >> On 13/06/2019 07:54, Dan Carpenter wrote: >>> Hello Tomasz Nowicki, >>> >>> The patch 4bf2efd26d76: "ACPI: Add new IORT functions to support MSI >>> domain handling" from Sep 12, 2016, leads to the following static >>> checker warning: >>> >>>     drivers/acpi/arm64/iort.c:628 iort_dev_find_its_id() >>>     warn: array off by one? 'its->identifiers[idx]' >>> >>> drivers/acpi/arm64/iort.c >>>     589  /** >>>     590   * iort_dev_find_its_id() - Find the ITS identifier for a device >>>     591   * @dev: The device. >>>     592   * @req_id: Device's requester ID >>>     593   * @idx: Index of the ITS identifier list. >>>     594   * @its_id: ITS identifier. >>>     595   * >>>     596   * Returns: 0 on success, appropriate error value otherwise >>>     597   */ >>>     598  static int iort_dev_find_its_id(struct device *dev, u32 req_id, >>>     599                                  unsigned int idx, int *its_id) >>>     600  { >>>     601          struct acpi_iort_its_group *its; >>>     602          struct acpi_iort_node *node; >>>     603 >>>     604          node = iort_find_dev_node(dev); >>>     605          if (!node) >>>     606                  return -ENXIO; >>>     607 >>>     608          node = iort_node_map_id(node, req_id, NULL, IORT_MSI_TYPE); >>>     609          if (!node) >>>     610                  return -ENXIO; >>>     611 >>>     612          /* Move to ITS specific data */ >>>     613          its = (struct acpi_iort_its_group *)node->node_data; >>>     614          if (idx > its->its_count) { >>>                      ^^^^^^^^^^^^^^^^^^^^ >>> I wasn't able to find any information about how its->its_count is set >>> but it looks to me that is off by one. >> >> its->count is read directly from the firmware table. Currently it seems this condition can never be hit anyway, since this is only ever called with idx == 0. TBH I can't really see how the code could evolve such that this check should ever be necessary (i.e. it makes no sense for callers to pull idx values out if thin air, so they'd presumably end up being derived from its->count in the first place), but if we are going to have it then I agree it should be ">=". > > For now seems we only got systems which map a device to a single > ITS, but in the IORT spec, it assumes that maybe there is a ITS group > for mapping, so I think we can just use ">=" as you suggested to > align with the spec. > Yes, should be ">=" and the error massage should be fixed as well: /* Move to ITS specific data */ its = (struct acpi_iort_its_group *)node->node_data; if (idx >= its->its_count) { dev_err(dev, "requested ITS ID index [%d] exceeds max permitted [%d] index\n", idx, its->its_count - 1); return -ENXIO; } Thanks, Tomasz 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 X-Spam-Level: X-Spam-Status: No, score=-0.7 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI,SPF_HELO_NONE, SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 9558AC31E44 for ; Fri, 14 Jun 2019 10:09:25 +0000 (UTC) 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 mail.kernel.org (Postfix) with ESMTPS id 67E2920665 for ; Fri, 14 Jun 2019 10:09:25 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="IfU1OV1F"; dkim=fail reason="signature verification failed" (2048-bit key) header.d=semihalf-com.20150623.gappssmtp.com header.i=@semihalf-com.20150623.gappssmtp.com header.b="lA8ItZsv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 67E2920665 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=semihalf.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=S/ZkUMS/UP6744BcIqYtt0ZNphtxaS2BUtxAVlC/kgk=; b=IfU1OV1FIAIEZBhv5vxvhk2pt Di8ikx13uaCZjB/Z02megkV1r70mHLTM+T2TDOiwttCj5cG20pnrNhBvCLUAC8ge61vJO22lsaptw ERcGlaXzNupqQ6FtnZ4tIv9JaX5je1zWAcaUULyrvBCS775Djw2m5Q1RhBx0ccdOIKsHLBimtfDNz yIILHJFKs59t5H8QXtuS4p2iw45Q9eriTL/WtSyOlgb62hHFu6L3nZHk5iJbkJP7d+YG1FVgOZXaI AaBSzAPQdmQegyZ1U/WbW6DSvUtOF7YUM1LjrBIxOKwTdrSDTSvJucQrOEFNez6t8fEXDlb5lCm20 oRujIDPew==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1hbj9A-0007ny-V5; Fri, 14 Jun 2019 10:09:24 +0000 Received: from mail-lj1-x241.google.com ([2a00:1450:4864:20::241]) by bombadil.infradead.org with esmtps (Exim 4.92 #3 (Red Hat Linux)) id 1hbj97-0007mx-QI for linux-arm-kernel@lists.infradead.org; Fri, 14 Jun 2019 10:09:23 +0000 Received: by mail-lj1-x241.google.com with SMTP id a21so1790125ljh.7 for ; Fri, 14 Jun 2019 03:09:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf-com.20150623.gappssmtp.com; s=20150623; h=subject:to:cc:references:from:message-id:date:user-agent :mime-version:in-reply-to:content-language:content-transfer-encoding; bh=gBUTP/9d4eNCeN/EaijNMsMRPRF11lY2kYs29fPMWho=; b=lA8ItZsv8zU0scjXM+Gj9HSHf1FNgIylWpMp1BDQ2+swnb/puvmoO0tt7yIz8Ct65B yryJj2b91cQeFuHbbj3J1V2y5AdJ1zqt9l7vj0KVyzVPJ0lB8JrGnKMPqY6W++L4rEaT utqFMYNHUZJnOxDWKajoNntqoJ89FnwFHAcOs5ZALev9OrOqSrVSTQwUw9h+ljI9J3Qc Tv5D1KieK5GTif5P1OCM5uI9stIbPamnYxGerNqUPzQhavSBeZ056rVim0MkRjapEgc2 3WiM8fI/R2z2+TJEb8aN3C4sU6RnJgjnlmgTsB7omYQ79golinlsrb2sarF83rk/Jtdu 0UIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:subject:to:cc:references:from:message-id:date :user-agent:mime-version:in-reply-to:content-language :content-transfer-encoding; bh=gBUTP/9d4eNCeN/EaijNMsMRPRF11lY2kYs29fPMWho=; b=fAWD7CNIKJt2M9q1eA+oDBO7eayV3KZN6dKnp45ZEGxONpaDZ7nQHilGIOFMQ5qPHj 6GazXnAgy2q/XtEOFV/BNfzWRcNfSSlBhLW56gBtnJTstinmIeDhBbeEQ8aj0D2ktuX5 A47j01p4pNEvzvhmtxqcxFBZBMEqnycuN4s8SCvJEtL60I1ksV+5r1OgrE1QOceumtgH toLNhd3B2+4BtsBRjIrXbMEUzo/d8VilY8CDmLLHwm47NneZI+9f2nt9+D2jrnGdmmOC iOWafTYAbxSt+VAk3SMRdK4k3OXD5tv/+DuZIr7ksrCmvy1AaTSdLJHSV6cNkmHD+aop 82pA== X-Gm-Message-State: APjAAAUsSBnUJ2M0pW3FR8qDXwWAL8YV8ESF8/+ji28XKy7g7RXutSWh Sj8sqF9j2yUvifIRjbOB4H8Wrg== X-Google-Smtp-Source: APXvYqzFjvfaIr7hZ0uqPHIOyBaOi/9LfmBYdWpPBUZqqTBN80jiQMuCXJUTUISCyY1oJPiCgUMkOg== X-Received: by 2002:a2e:6348:: with SMTP id x69mr39647043ljb.186.1560506959356; Fri, 14 Jun 2019 03:09:19 -0700 (PDT) Received: from [192.168.1.102] ([83.68.95.66]) by smtp.googlemail.com with ESMTPSA id o11sm406073lfl.15.2019.06.14.03.09.18 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 14 Jun 2019 03:09:18 -0700 (PDT) Subject: Re: [bug report] ACPI: Add new IORT functions to support MSI domain handling To: Hanjun Guo , Robin Murphy , Dan Carpenter References: <20190613065410.GB16334@mwanda> <425b5d78-b38f-270b-94e2-7ece1e5498e5@arm.com> <5f9fecb1-66de-b550-3f8e-097795a08efe@huawei.com> From: Tomasz Nowicki Message-ID: <40cc7b22-d5e6-ffcf-d6ec-a74f3fbe906c@semihalf.com> Date: Fri, 14 Jun 2019 12:09:17 +0200 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:60.0) Gecko/20100101 Thunderbird/60.7.0 MIME-Version: 1.0 In-Reply-To: <5f9fecb1-66de-b550-3f8e-097795a08efe@huawei.com> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190614_030921_890956_8DDECCB1 X-CRM114-Status: GOOD ( 19.90 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: linux-acpi@vger.kernel.org, Lorenzo Pieralisi , linux-arm-kernel@lists.infradead.org Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMTQuMDYuMjAxOSAwMzowMywgSGFuanVuIEd1byB3cm90ZToKPiBPbiAyMDE5LzYvMTMgMTc6 MzAsIFJvYmluIE11cnBoeSB3cm90ZToKPj4gT24gMTMvMDYvMjAxOSAwNzo1NCwgRGFuIENhcnBl bnRlciB3cm90ZToKPj4+IEhlbGxvIFRvbWFzeiBOb3dpY2tpLAo+Pj4KPj4+IFRoZSBwYXRjaCA0 YmYyZWZkMjZkNzY6ICJBQ1BJOiBBZGQgbmV3IElPUlQgZnVuY3Rpb25zIHRvIHN1cHBvcnQgTVNJ Cj4+PiBkb21haW4gaGFuZGxpbmciIGZyb20gU2VwIDEyLCAyMDE2LCBsZWFkcyB0byB0aGUgZm9s bG93aW5nIHN0YXRpYwo+Pj4gY2hlY2tlciB3YXJuaW5nOgo+Pj4KPj4+ICDCoMKgwqDCoGRyaXZl cnMvYWNwaS9hcm02NC9pb3J0LmM6NjI4IGlvcnRfZGV2X2ZpbmRfaXRzX2lkKCkKPj4+ICDCoMKg wqDCoHdhcm46IGFycmF5IG9mZiBieSBvbmU/ICdpdHMtPmlkZW50aWZpZXJzW2lkeF0nCj4+Pgo+ Pj4gZHJpdmVycy9hY3BpL2FybTY0L2lvcnQuYwo+Pj4gIMKgwqDCoCA1ODnCoCAvKioKPj4+ICDC oMKgwqAgNTkwwqDCoCAqIGlvcnRfZGV2X2ZpbmRfaXRzX2lkKCkgLSBGaW5kIHRoZSBJVFMgaWRl bnRpZmllciBmb3IgYSBkZXZpY2UKPj4+ICDCoMKgwqAgNTkxwqDCoCAqIEBkZXY6IFRoZSBkZXZp Y2UuCj4+PiAgwqDCoMKgIDU5MsKgwqAgKiBAcmVxX2lkOiBEZXZpY2UncyByZXF1ZXN0ZXIgSUQK Pj4+ICDCoMKgwqAgNTkzwqDCoCAqIEBpZHg6IEluZGV4IG9mIHRoZSBJVFMgaWRlbnRpZmllciBs aXN0Lgo+Pj4gIMKgwqDCoCA1OTTCoMKgICogQGl0c19pZDogSVRTIGlkZW50aWZpZXIuCj4+PiAg wqDCoMKgIDU5NcKgwqAgKgo+Pj4gIMKgwqDCoCA1OTbCoMKgICogUmV0dXJuczogMCBvbiBzdWNj ZXNzLCBhcHByb3ByaWF0ZSBlcnJvciB2YWx1ZSBvdGhlcndpc2UKPj4+ICDCoMKgwqAgNTk3wqDC oCAqLwo+Pj4gIMKgwqDCoCA1OTjCoCBzdGF0aWMgaW50IGlvcnRfZGV2X2ZpbmRfaXRzX2lkKHN0 cnVjdCBkZXZpY2UgKmRldiwgdTMyIHJlcV9pZCwKPj4+ICDCoMKgwqAgNTk5wqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVu c2lnbmVkIGludCBpZHgsIGludCAqaXRzX2lkKQo+Pj4gIMKgwqDCoCA2MDDCoCB7Cj4+PiAgwqDC oMKgIDYwMcKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgYWNwaV9pb3J0X2l0c19ncm91cCAqaXRz Owo+Pj4gIMKgwqDCoCA2MDLCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFjcGlfaW9ydF9ub2Rl ICpub2RlOwo+Pj4gIMKgwqDCoCA2MDMKPj4+ICDCoMKgwqAgNjA0wqDCoMKgwqDCoMKgwqDCoMKg IG5vZGUgPSBpb3J0X2ZpbmRfZGV2X25vZGUoZGV2KTsKPj4+ICDCoMKgwqAgNjA1wqDCoMKgwqDC oMKgwqDCoMKgIGlmICghbm9kZSkKPj4+ICDCoMKgwqAgNjA2wqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVOWElPOwo+Pj4gIMKgwqDCoCA2MDcKPj4+ICDCoMKgwqAg NjA4wqDCoMKgwqDCoMKgwqDCoMKgIG5vZGUgPSBpb3J0X25vZGVfbWFwX2lkKG5vZGUsIHJlcV9p ZCwgTlVMTCwgSU9SVF9NU0lfVFlQRSk7Cj4+PiAgwqDCoMKgIDYwOcKgwqDCoMKgwqDCoMKgwqDC oCBpZiAoIW5vZGUpCj4+PiAgwqDCoMKgIDYxMMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIC1FTlhJTzsKPj4+ICDCoMKgwqAgNjExCj4+PiAgwqDCoMKgIDYxMsKgwqDC oMKgwqDCoMKgwqDCoCAvKiBNb3ZlIHRvIElUUyBzcGVjaWZpYyBkYXRhICovCj4+PiAgwqDCoMKg IDYxM8KgwqDCoMKgwqDCoMKgwqDCoCBpdHMgPSAoc3RydWN0IGFjcGlfaW9ydF9pdHNfZ3JvdXAg Kilub2RlLT5ub2RlX2RhdGE7Cj4+PiAgwqDCoMKgIDYxNMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAo aWR4ID4gaXRzLT5pdHNfY291bnQpIHsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIF5eXl5eXl5eXl5eXl5eXl5eXl5eCj4+PiBJIHdhc24ndCBhYmxlIHRvIGZp bmQgYW55IGluZm9ybWF0aW9uIGFib3V0IGhvdyBpdHMtPml0c19jb3VudCBpcyBzZXQKPj4+IGJ1 dCBpdCBsb29rcyB0byBtZSB0aGF0IGlzIG9mZiBieSBvbmUuCj4+Cj4+IGl0cy0+Y291bnQgaXMg cmVhZCBkaXJlY3RseSBmcm9tIHRoZSBmaXJtd2FyZSB0YWJsZS4gQ3VycmVudGx5IGl0IHNlZW1z IHRoaXMgY29uZGl0aW9uIGNhbiBuZXZlciBiZSBoaXQgYW55d2F5LCBzaW5jZSB0aGlzIGlzIG9u bHkgZXZlciBjYWxsZWQgd2l0aCBpZHggPT0gMC4gVEJIIEkgY2FuJ3QgcmVhbGx5IHNlZSBob3cg dGhlIGNvZGUgY291bGQgZXZvbHZlIHN1Y2ggdGhhdCB0aGlzIGNoZWNrIHNob3VsZCBldmVyIGJl IG5lY2Vzc2FyeSAoaS5lLiBpdCBtYWtlcyBubyBzZW5zZSBmb3IgY2FsbGVycyB0byBwdWxsIGlk eCB2YWx1ZXMgb3V0IGlmIHRoaW4gYWlyLCBzbyB0aGV5J2QgcHJlc3VtYWJseSBlbmQgdXAgYmVp bmcgZGVyaXZlZCBmcm9tIGl0cy0+Y291bnQgaW4gdGhlIGZpcnN0IHBsYWNlKSwgYnV0IGlmIHdl IGFyZSBnb2luZyB0byBoYXZlIGl0IHRoZW4gSSBhZ3JlZSBpdCBzaG91bGQgYmUgIj49Ii4KPiAK PiBGb3Igbm93IHNlZW1zIHdlIG9ubHkgZ290IHN5c3RlbXMgd2hpY2ggbWFwIGEgZGV2aWNlIHRv IGEgc2luZ2xlCj4gSVRTLCBidXQgaW4gdGhlIElPUlQgc3BlYywgaXQgYXNzdW1lcyB0aGF0IG1h eWJlIHRoZXJlIGlzIGEgSVRTIGdyb3VwCj4gZm9yIG1hcHBpbmcsIHNvIEkgdGhpbmsgd2UgY2Fu IGp1c3QgdXNlICI+PSIgYXMgeW91IHN1Z2dlc3RlZCB0bwo+IGFsaWduIHdpdGggdGhlIHNwZWMu Cj4gCgpZZXMsIHNob3VsZCBiZSAiPj0iIGFuZCB0aGUgZXJyb3IgbWFzc2FnZSBzaG91bGQgYmUg Zml4ZWQgYXMgd2VsbDoKCi8qIE1vdmUgdG8gSVRTIHNwZWNpZmljIGRhdGEgKi8KaXRzID0gKHN0 cnVjdCBhY3BpX2lvcnRfaXRzX2dyb3VwICopbm9kZS0+bm9kZV9kYXRhOwppZiAoaWR4ID49IGl0 cy0+aXRzX2NvdW50KSB7CiAgICAgICAgIGRldl9lcnIoZGV2LCAicmVxdWVzdGVkIElUUyBJRCBp bmRleCBbJWRdIGV4Y2VlZHMgbWF4IHBlcm1pdHRlZCAKWyVkXSBpbmRleFxuIiwKICAgICAgICAg ICAgICAgICBpZHgsIGl0cy0+aXRzX2NvdW50IC0gMSk7CiAgICAgICAgIHJldHVybiAtRU5YSU87 Cn0KClRoYW5rcywKVG9tYXN6CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KbGludXgtYXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5l bEBsaXN0cy5pbmZyYWRlYWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4v bGlzdGluZm8vbGludXgtYXJtLWtlcm5lbAo=