Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp4271998rwb; Tue, 6 Sep 2022 05:21:33 -0700 (PDT) X-Google-Smtp-Source: AA6agR4WIv7Hhf3GLZteWJQ7j4VukNwYxsvpFlsrSAMpwmJw0EpK0dFMtpXLiea1XJIbVZ/bRBhZ X-Received: by 2002:a17:907:e8b:b0:741:4d1a:5955 with SMTP id ho11-20020a1709070e8b00b007414d1a5955mr31915665ejc.2.1662466893174; Tue, 06 Sep 2022 05:21:33 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662466893; cv=none; d=google.com; s=arc-20160816; b=ked8KFlxpTohwjGkehvf47UXqz+B2BUbKkukLFLWptCTZgcofNxKcQaRWV3lIZqoJm eOyEQUeVgTl8YCGJmHPyjEj01rn0Fwe39+6uPkEkaGOV+Sexd2Gx9YB7UibEJOFegrIt MnV+e0O7NubND2qy6qeDTfhqgDK1UkP5Io6ji5zNqFRf0hXhSrQsOsYeKItfonljK5kt GFLLmGjkPXe3vlYtZMajOnc9kVabyOVS/hpHsor0wOVLWvZQYEnqvC78I9WQ8pz1zFQN hdcr6a5NH65DCoX29N8wY9j/Vx5msHFyB+34bFt83U1VMcRHAXq0CxvjSJX+yLbnTS5W tLIA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:message-id:mime-version :content-transfer-encoding:references:in-reply-to:subject:cc:to:from :date; bh=BDv4H0wiiyMafuV3GgQ/tZJ2T2VbdpGZwSH3ySemXpo=; b=wcaBOMtrM2yX9mTv0rZP8brar+NkK65DvQT7VVS7QYJc1fd3tPb9i6Wb0eKA6Qve33 LZomjS6K9NEKduDOm5WS4NmLiZIBYFNZPZozdXnXjPkzK5Bj896gu1fXW5Y0cMgHABQ1 KK3AJAsJmc3IgSm6/4+weBgiLsnKAujRfPNKNO7fYvWBcM0W5cvu1Leoox8QlNpmyi3C 1ta/CN538eFncCoj7xp5+4DQX/jibWY4w8VemGaIe++kQ4mOh5nH3Zx0BcKyduRqkfuA 8ZxkGEH2ekhw5vMpRclZRCpjEOD2o16jV4edusqfjng8Qe0OXmwl45pBdcFV+gXA4aoc lknQ== ARC-Authentication-Results: i=1; mx.google.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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id a26-20020a05640213da00b0044e8e0dc87fsi3450697edx.362.2022.09.06.05.21.06; Tue, 06 Sep 2022 05:21:33 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234279AbiIFMBP (ORCPT + 99 others); Tue, 6 Sep 2022 08:01:15 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:58330 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233980AbiIFMBN (ORCPT ); Tue, 6 Sep 2022 08:01:13 -0400 Received: from loongson.cn (mail.loongson.cn [114.242.206.163]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 414C67755B for ; Tue, 6 Sep 2022 05:01:07 -0700 (PDT) Received: from lichenyang$loongson.cn ( [10.20.42.75] ) by ajax-webmail-localhost.localdomain (Coremail) ; Tue, 6 Sep 2022 20:00:30 +0800 (GMT+08:00) X-Originating-IP: [10.20.42.75] Date: Tue, 6 Sep 2022 20:00:30 +0800 (GMT+08:00) X-CM-HeaderCharset: UTF-8 From: =?UTF-8?B?5p2O5pmo6Ziz?= To: "Maxime Ripard" , "Maarten Lankhorst" , "Thomas Zimmermann" , "Dan Carpenter" , "David Airlie" , "Daniel Vetter" , dri-devel@lists.freedesktop.org, devel@linuxdriverproject.org Cc: "Sam Ravnborg" , linux-kernel@vger.kernel.org Subject: [PATCH v7 4/4] drm/loongson: Use acpi to get video bios. X-Priority: 3 X-Mailer: Coremail Webmail Server Version XT5.0.14 build 20220411(feba7c69) Copyright (c) 2002-2022 www.mailtech.cn .loongson.cn In-Reply-To: <20220625090715.3663-1-lichenyang@loongson.cn> References: <20220625090715.3663-1-lichenyang@loongson.cn> Content-Transfer-Encoding: base64 X-CM-CTRLDATA: RQV3fmZvb3Rlcl90eHQ9NTI3NTo2MTI= Content-Type: text/plain; charset=UTF-8 MIME-Version: 1.0 Message-ID: <4d2ef343.6329.18312ac6195.Coremail.lichenyang@loongson.cn> X-Coremail-Locale: zh_CN X-CM-TRANSID: AQAAf8BxJeJeNhdjZbcSAA--.4021W X-CM-SenderInfo: xolfxvxq1d0wo6or00hjvr0hdfq/1tbiAQABA2MV5tsWagADs3 X-Coremail-Antispam: 1Ur529EdanIXcx71UUUUU7IcSsGvfJ3iIAIbVAYjsxI4VWxJw CS07vEb4IE77IF4wCS07vE1I0E4x80FVAKz4kxMIAIbVAFxVCaYxvI4VCIwcAKzIAtYxBI daVFxhVjvjDU= X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,SPF_HELO_PASS, SPF_PASS,T_SCC_BODY_TEXT_LINE 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 QWRkIGdldCB2aWRlbyBiaW9zIGZyb20gdGhlIEFDUEkgdGFibGUuCkRlZmluZSBuZXcgYWNwaSB0 YWJsZSAiVklBVCIgZm9yIGxvb25nc29uIHZpZGVvIGJpb3MuCgpTaWduZWQtb2ZmLWJ5OiBDaGVu eWFuZyBMaSA8bGljaGVueWFuZ0Bsb29uZ3Nvbi5jbj4KLS0tCiBkcml2ZXJzL2dwdS9kcm0vbG9v bmdzb24vTWFrZWZpbGUgICAgICAgICB8ICAzICstCiBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24v bG9vbmdzb25fZHJ2LmMgICB8IDIxICsrKysrKystCiBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24v bG9vbmdzb25fZHJ2LmggICB8ICAxICsKIGRyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nv bl92Ymlvcy5jIHwgNjIgKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1L2RybS9s b29uZ3Nvbi9sb29uZ3Nvbl92Ymlvcy5oIHwgMjkgKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdl ZCwgMTEzIGluc2VydGlvbnMoKyksIDMgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQg ZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX3ZiaW9zLmMKIGNyZWF0ZSBtb2RlIDEw MDY0NCBkcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fdmJpb3MuaAoKZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9NYWtlZmlsZSBiL2RyaXZlcnMvZ3B1L2RybS9s b29uZ3Nvbi9NYWtlZmlsZQppbmRleCBiMDgzODU0ZDc4OWIuLmI3NzRhOTEwMDNkOSAxMDA2NDQK LS0tIGEvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL01ha2VmaWxlCisrKyBiL2RyaXZlcnMvZ3B1 L2RybS9sb29uZ3Nvbi9NYWtlZmlsZQpAQCAtMTEsNSArMTEsNiBAQCBsb29uZ3Nvbi15IDo9IGxv b25nc29uX2Nvbm5lY3Rvci5vIFwKIAlsb29uZ3Nvbl9lbmNvZGVyLm8gXAogCWxvb25nc29uX2ky Yy5vIFwKIAlsb29uZ3Nvbl9pcnEubyBcCi0JbG9vbmdzb25fcGxhbmUubworCWxvb25nc29uX3Bs YW5lLm8gXAorCWxvb25nc29uX3ZiaW9zLm8KIG9iai0kKENPTkZJR19EUk1fTE9PTkdTT04pICs9 IGxvb25nc29uLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nv bl9kcnYuYyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kcnYuYwppbmRleCAx ZDZmMzVlNzg4MTMuLjFjMjEyMjAwZjA4OCAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2xv b25nc29uL2xvb25nc29uX2Rydi5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29u Z3Nvbl9kcnYuYwpAQCAtMTksMTQgKzE5LDI4IEBACiAjaW5jbHVkZSA8ZHJtL2RybV9wcm9iZV9o ZWxwZXIuaD4KCiAjaW5jbHVkZSAibG9vbmdzb25fZHJ2LmgiCisjaW5jbHVkZSAibG9vbmdzb25f dmJpb3MuaCIKKworLyoKKyAqIENvbXBsZXRlZAorICogMS5EaXNwbGF5cyBjb250cm9sbGVyIGRl dmljZSBpbml0aWFsaXphdGlvbiBhbmQgZGlzcGxheSBmdW5jaXRvbnMKKyAqIDIuSTJjIGJ1cyBk cml2ZXIgYW5kIEREQyBmdW5jdGlvbnMKKyAqIDMuVmJsYW5rIGFuZCB2c3luYyBpbnRlcnJ1cHQg c3VwcG9ydAorICogNC5Vc2UgYWNwaSB0byBnZXQgdmlkZW8gYmlvcworICogVG9kbworICogMS5W aWRlbyBiaW9zIHBhcnNlIGZ1bmN0aW9ucworICogMi5IYXJkd2FyZSBjdXJzb3IgZHJpdmVyCisg KiAzLk5ldyBkZXZpY2Ugc3VwcG9ydCBhcyB3ZWxsIGFzIExvb25nc29uIEdQVQorICovCgogLyog SW50ZXJmYWNlIGhpc3Rvcnk6CiAgKiAwLjEgLSBvcmlnaW5hbC4KICAqIDAuMiAtIGFkZCBpMmMg YW5kIGNvbm5lY3RvciBkZXRlY3QuCiAgKiAwLjMgLSBWYmxhbmsgYW5kIHZzeW5jIGludGVycnVw dCBzdXBwb3J0LgorICogMC40IC0gVXNlIGFjcGkgdG8gZ2V0IHZiaW9zLgogICovCiAjZGVmaW5l IERSSVZFUl9NQUpPUiAwCi0jZGVmaW5lIERSSVZFUl9NSU5PUiAzCisjZGVmaW5lIERSSVZFUl9N SU5PUiA0Cgogc3RhdGljIGNvbnN0IHN0cnVjdCBkcm1fbW9kZV9jb25maWdfZnVuY3MgbG9vbmdz b25fbW9kZV9mdW5jcyA9IHsKIAkuZmJfY3JlYXRlID0gZHJtX2dlbV9mYl9jcmVhdGUsCkBAIC04 OCw3ICsxMDIsMTAgQEAgc3RhdGljIGludCBsb29uZ3Nvbl9kZXZpY2VfaW5pdChzdHJ1Y3QgZHJt X2RldmljZSAqZGV2KQogCWlmICghbGRldi0+aW8pCiAJCXJldHVybiAtRU5PTUVNOwoKLQlsZGV2 LT5udW1fY3J0YyA9IDI7CisJaWYgKCFsb29uZ3Nvbl92Ymlvc19pbml0KGxkZXYpKSB7CisJCURS TV9XQVJOKCJHZXQgdmJpb3MgZmFpbGVkLCBlbmFibGUgdHdvIGNydGNcbiIpOworCQlsZGV2LT5u dW1fY3J0YyA9IDI7CisJfQoKIAlyZXQgPSBsb29uZ3Nvbl9kY19ncGlvX2luaXQobGRldik7CiAJ aWYgKHJldCkKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9k cnYuaCBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl9kcnYuaAppbmRleCBhZjQ3 ZTY4NDg3ZmQuLjRlNWNiNTk3N2M5YSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2xvb25n c29uL2xvb25nc29uX2Rydi5oCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nv bl9kcnYuaApAQCAtMTA5LDYgKzEwOSw3IEBAIHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgewogCXUz MiBudW1fY3J0YzsKIAlzdHJ1Y3QgbG9vbmdzb25fbW9kZV9pbmZvIG1vZGVfaW5mb1syXTsKIAlz dHJ1Y3QgcGNpX2RldiAqZ3B1X3BkZXY7IC8qIExTN0EgZ3B1IGRldmljZSBpbmZvICovCisJdm9p ZCAqdmJpb3M7CgogCXN0cnVjdCBsb29uZ3Nvbl9pMmMgaTJjX2J1c1tEQ19NQVhfSTJDX0JVU107 CiB9OwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2xvb25nc29uL2xvb25nc29uX3ZiaW9z LmMgYi9kcml2ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fdmJpb3MuYwpuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjJiM2EyNzU3MTAyYQotLS0gL2Rldi9udWxs CisrKyBiL2RyaXZlcnMvZ3B1L2RybS9sb29uZ3Nvbi9sb29uZ3Nvbl92Ymlvcy5jCkBAIC0wLDAg KzEsNjIgQEAKKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCisv KgorICogQ29weXJpZ2h0IChDKSAyMDIwLTIwMjIgTG9vbmdzb24gVGVjaG5vbG9neSBDb3Jwb3Jh dGlvbiBMaW1pdGVkCisgKi8KKworI2luY2x1ZGUgImxvb25nc29uX2Rydi5oIgorI2luY2x1ZGUg Imxvb25nc29uX3ZiaW9zLmgiCisKKyNpZmRlZiBDT05GSUdfQUNQSQorc3RhdGljIGJvb2wgcmVh ZF9iaW9zX2Zyb21fYWNwaShzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICpsZGV2KQoreworCXZvaWQg KnZhZGRyOworCXN0cnVjdCBhY3BpX3RhYmxlX2hlYWRlciAqaGRyOworCXN0cnVjdCBhY3BpX3Zp YXRfdGFibGUgKnZpYXQ7CisJYWNwaV9zaXplIHRibF9zaXplOworCisJaWYgKCFBQ1BJX1NVQ0NF U1MoYWNwaV9nZXRfdGFibGUoIlZJQVQiLCAxLCAmaGRyKSkpCisJCXJldHVybiBmYWxzZTsKKwor CXRibF9zaXplID0gaGRyLT5sZW5ndGg7CisJaWYgKHRibF9zaXplICE9IHNpemVvZihzdHJ1Y3Qg YWNwaV92aWF0X3RhYmxlKSkgeworCQlEUk1fV0FSTigiQUNQSSB2aWF0IHRhYmxlIHByZXNlbnQg YnV0IGJyb2tlbih0b28gc2hvcnQgIzEpXG4iKTsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXZp YXQgPSAoc3RydWN0IGFjcGlfdmlhdF90YWJsZSAqKWhkcjsKKwlsZGV2LT52YmlvcyA9IGttYWxs b2MoVkJJT1NfU0laRSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFsZGV2LT52YmlvcykgeworCQlrZnJl ZShsZGV2LT52Ymlvcyk7CisJCXJldHVybiBmYWxzZTsKKwl9CisKKwl2YWRkciA9IHBoeXNfdG9f dmlydCh2aWF0LT52Ymlvc19hZGRyKTsKKwltZW1jcHkobGRldi0+dmJpb3MsIHZhZGRyLCBWQklP U19TSVpFKTsKKwlEUk1fSU5GTygiR2V0IHZiaW9zIGZyb20gQUNQSSBzdWNjZXNzIVxuIik7CisK KwlyZXR1cm4gdHJ1ZTsKK30KKyNlbHNlCitzdGF0aWMgYm9vbCByZWFkX2Jpb3NfZnJvbV9hY3Bp KHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxkZXYpCit7CisJcmV0dXJuIGZhbHNlOworfQorI2Vu ZGlmCisKK2Jvb2wgbG9vbmdzb25fdmJpb3NfaW5pdChzdHJ1Y3QgbG9vbmdzb25fZGV2aWNlICps ZGV2KQoreworCWludCByZXQ7CisJc3RydWN0IGxvb25nc29uX3ZiaW9zICpoZWFkZXI7CisKKwly ZXQgPSByZWFkX2Jpb3NfZnJvbV9hY3BpKGxkZXYpOworCWlmICghcmV0KQorCQlyZXR1cm4gcmV0 OworCisJaGVhZGVyID0gbGRldi0+dmJpb3M7CisJbGRldi0+bnVtX2NydGMgPSBoZWFkZXItPmNy dGNfbnVtOworCisJRFJNX0lORk8oIkxvb25nc29uIHZiaW9zIHZlcnNpb24gJWQuJWQgY3J0YyBu dW0gJWQuXG4iLAorCQkgaGVhZGVyLT52ZXJzaW9uX21ham9yLCBoZWFkZXItPnZlcnNpb25fbWlu b3IsIGxkZXYtPm51bV9jcnRjKTsKKworCXJldHVybiByZXQ7Cit9CmRpZmYgLS1naXQgYS9kcml2 ZXJzL2dwdS9kcm0vbG9vbmdzb24vbG9vbmdzb25fdmJpb3MuaCBiL2RyaXZlcnMvZ3B1L2RybS9s b29uZ3Nvbi9sb29uZ3Nvbl92Ymlvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAwMDAwMC4uYjdkOGNlMTVjNmM1Ci0tLSAvZGV2L251bGwKKysrIGIvZHJpdmVycy9ncHUvZHJt L2xvb25nc29uL2xvb25nc29uX3ZiaW9zLmgKQEAgLTAsMCArMSwyOSBAQAorLyogU1BEWC1MaWNl bnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seSAqLworLyoKKyAqIENvcHlyaWdodCAoQykgMjAy MC0yMDIyIExvb25nc29uIFRlY2hub2xvZ3kgQ29ycG9yYXRpb24gTGltaXRlZAorICovCisKKyNp Zm5kZWYgX19MT09OR1NPTl9WQklPU19IX18KKyNkZWZpbmUgX19MT09OR1NPTl9WQklPU19IX18K KworI2luY2x1ZGUgPGxpbnV4L2FjcGkuaD4KKworI2RlZmluZSBWQklPU19TSVpFIDB4NDAwMDAK Kworc3RydWN0IGxvb25nc29uX3ZiaW9zIHsKKwl1aW50MzJfdCB2ZXJzaW9uX21ham9yOworCXVp bnQzMl90IHZlcnNpb25fbWlub3I7CisJdWludDMyX3QgY3J0Y19udW07Cit9IF9fcGFja2VkOwor CisjaWZkZWYgQ09ORklHX0FDUEkKKy8qIFZCT0lTIElORk8gQUREUkVTUyBUQUJMRSAqLworc3Ry dWN0IGFjcGlfdmlhdF90YWJsZSB7CisJc3RydWN0IGFjcGlfdGFibGVfaGVhZGVyIGhlYWRlcjsK Kwl1NjQgdmJpb3NfYWRkcjsKK30gX19wYWNrZWQ7CisjZW5kaWYKKworYm9vbCBsb29uZ3Nvbl92 Ymlvc19pbml0KHN0cnVjdCBsb29uZ3Nvbl9kZXZpY2UgKmxkZXYpOworCisjZW5kaWYgLyogX19M T09OR1NPTl9WQklPU19IX18gKi8KLS0KMi4yNS4xCg0KDQrmnKzpgq7ku7blj4rlhbbpmYTku7bl kKvmnInpvpnoiq/kuK3np5HnmoTllYbkuJrnp5jlr4bkv6Hmga/vvIzku4XpmZDkuo7lj5HpgIHn u5nkuIrpnaLlnLDlnYDkuK3liJflh7rnmoTkuKrkurrmiJbnvqTnu4TjgILnpoHmraLku7vkvZXl hbbku5bkurrku6Xku7vkvZXlvaLlvI/kvb/nlKjvvIjljIXmi6zkvYbkuI3pmZDkuo7lhajpg6jm iJbpg6jliIblnLDms4TpnLLjgIHlpI3liLbmiJbmlaPlj5HvvInmnKzpgq7ku7blj4rlhbbpmYTk u7bkuK3nmoTkv6Hmga/jgILlpoLmnpzmgqjplJnmlLbmnKzpgq7ku7bvvIzor7fmgqjnq4vljbPn lLXor53miJbpgq7ku7bpgJrnn6Xlj5Hku7bkurrlubbliKDpmaTmnKzpgq7ku7bjgIIgDQpUaGlz IGVtYWlsIGFuZCBpdHMgYXR0YWNobWVudHMgY29udGFpbiBjb25maWRlbnRpYWwgaW5mb3JtYXRp b24gZnJvbSBMb29uZ3NvbiBUZWNobm9sb2d5ICwgd2hpY2ggaXMgaW50ZW5kZWQgb25seSBmb3Ig dGhlIHBlcnNvbiBvciBlbnRpdHkgd2hvc2UgYWRkcmVzcyBpcyBsaXN0ZWQgYWJvdmUuIEFueSB1 c2Ugb2YgdGhlIGluZm9ybWF0aW9uIGNvbnRhaW5lZCBoZXJlaW4gaW4gYW55IHdheSAoaW5jbHVk aW5nLCBidXQgbm90IGxpbWl0ZWQgdG8sIHRvdGFsIG9yIHBhcnRpYWwgZGlzY2xvc3VyZSwgcmVw cm9kdWN0aW9uIG9yIGRpc3NlbWluYXRpb24pIGJ5IHBlcnNvbnMgb3RoZXIgdGhhbiB0aGUgaW50 ZW5kZWQgcmVjaXBpZW50KHMpIGlzIHByb2hpYml0ZWQuIElmIHlvdSByZWNlaXZlIHRoaXMgZW1h aWwgaW4gZXJyb3IsIHBsZWFzZSBub3RpZnkgdGhlIHNlbmRlciBieSBwaG9uZSBvciBlbWFpbCBp bW1lZGlhdGVseSBhbmQgZGVsZXRlIGl0LiA=