From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from lindbergh.monkeyblade.net (lindbergh.monkeyblade.net [23.128.96.19]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 75E0D538C for ; Thu, 28 Sep 2023 07:37:24 +0000 (UTC) Received: from mail-lf1-x131.google.com (mail-lf1-x131.google.com [IPv6:2a00:1450:4864:20::131]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8DFA199; Thu, 28 Sep 2023 00:37:20 -0700 (PDT) Received: by mail-lf1-x131.google.com with SMTP id 2adb3069b0e04-50317080342so21288137e87.2; Thu, 28 Sep 2023 00:37:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1695886639; x=1696491439; darn=vger.kernel.org; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:from:to:cc:subject:date :message-id:reply-to; bh=sM/2ZgWfSMJsjkngF74eU0Cd4lfH3nHdxcoO3ebsTO0=; b=k/tssVvoV8jcUw2ts9IiNPzQnECWLkPTrWnkvauY3U38j8S5wc9LhUvFY/m384tsZP q/g9PT8EZNaxmsk02zOz6/Ett6S2SExIytd9tkQC9okGb46+FpAOwBsf2EQtNaRIlDL6 ZzZ915WgROYLZlBHiFjJWGnqiEzCIZSeKZmw+P4REoL/vOg/TJfaP4xOsyzgwFCvLDuj qTiKloQgpog28pklCvQkH4tTfSfAv9JSw9dKF+SOqCyMso+qZN8jnUK21hTwvvEHLyqC 4odO7D5tnzP/LZydMH9Cd5BJFjlCKUNKSuEqDenjT+rq5gbDyB269JNqOSxn2K9SulqB FOvg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1695886639; x=1696491439; h=mime-version:user-agent:content-transfer-encoding:references :in-reply-to:date:to:from:subject:message-id:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to; bh=sM/2ZgWfSMJsjkngF74eU0Cd4lfH3nHdxcoO3ebsTO0=; b=Q7XXt625M2ooH2jgQN4NGnRoyw9QhfFDpzYpVDd+Yz6z6no2W8gEIhPsQAovfxb3XQ fptQRF8UzyriTPj6EES+H5zoA47JaVfE602sUWi46v9p++sWU68Q3N8VLgHZcUfV+qAW hyRg+RG8zRzU/6IN2NPbGoN7XYf0HrFNgWJhSimiokPlhF1P2sG18WOPGYr2p7bugmJG ZoXM8s2Obp5+JeLA5aiT5DccWWO5hOQu3saFloVw9NYy9cjZjcSMDpJelvWf2dN76WAu 7+JVDkZeuac+IcKP9WXjl7gcLdp7Cu1C4AiD7O+m0/RpzQqKxNBGo1XC9qsBzAHBG5Ot /0yw== X-Gm-Message-State: AOJu0YwLHa7UIs0gLVT+Tn6635EhlHd3XRaBYqk2f2LN1R3Hfcmu8XU4 7x53zWzHbav/PrMQMIngiEzHwAvxgl9ajSTc8Ao= X-Google-Smtp-Source: AGHT+IH/iXGRz/NAauvjGxsy84I7diK5N02t9s4jIe89S6PBJM91RxTfd/bPftLxhAYAW53WJskY0A== X-Received: by 2002:a05:6512:3d8a:b0:503:183c:1223 with SMTP id k10-20020a0565123d8a00b00503183c1223mr562556lfv.7.1695886638217; Thu, 28 Sep 2023 00:37:18 -0700 (PDT) Received: from ?IPv6:2001:a61:3456:4e01:6ae:b55a:bd1d:57fc? ([2001:a61:3456:4e01:6ae:b55a:bd1d:57fc]) by smtp.gmail.com with ESMTPSA id t6-20020a5d6906000000b00321773bb933sm85562wru.77.2023.09.28.00.37.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 28 Sep 2023 00:37:17 -0700 (PDT) Message-ID: <8c8b5a788089a169a47b9fa10048cf17d2085df4.camel@gmail.com> Subject: Re: [PATCH 2/2] drivers: hwmon: ltc2991: add driver support From: Nuno =?ISO-8859-1?Q?S=E1?= To: Antoniu Miclaus , Jean Delvare , Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Jonathan Corbet , linux-hwmon@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org Date: Thu, 28 Sep 2023 09:37:16 +0200 In-Reply-To: <20230926140544.80934-2-antoniu.miclaus@analog.com> References: <20230926140544.80934-1-antoniu.miclaus@analog.com> <20230926140544.80934-2-antoniu.miclaus@analog.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 User-Agent: Evolution 3.48.4 (3.48.4-1.fc38) Precedence: bulk X-Mailing-List: devicetree@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,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 SGkgQW50b25pdSwKCnNvbWUgY29tbWVudHMgZnJvbSBtZS4uLgoKT24gVHVlLCAyMDIzLTA5LTI2 IGF0IDE3OjA1ICswMzAwLCBBbnRvbml1IE1pY2xhdXMgd3JvdGU6Cj4gQWRkIHN1cHBvcnQgZm9y IExUQzI5OTEgT2N0YWwgSTJDIFZvbHRhZ2UsIEN1cnJlbnQsIGFuZCBUZW1wZXJhdHVyZQo+IE1v bml0b3IuCj4gCj4gVGhlIExUQzI5OTEgaXMgdXNlZCB0byBtb25pdG9yIHN5c3RlbSB0ZW1wZXJh dHVyZXMsIHZvbHRhZ2VzIGFuZAo+IGN1cnJlbnRzLiBUaHJvdWdoIHRoZSBJIDJDIHNlcmlhbCBp bnRlcmZhY2UsIHRoZWVpZ2h0IG1vbml0b3JzIGNhbgo+IGluZGl2aWR1YWxseSBtZWFzdXJlIHN1 cHBseSB2b2x0YWdlcyBhbmQgY2FuIGJlIHBhaXJlZCBmb3IKPiBkaWZmZXJlbnRpYWwgbWVhc3Vy ZW1lbnRzIG9mIGN1cnJlbnQgc2Vuc2UgcmVzaXN0b3JzIG9yIHRlbXBlcmF0dXJlCj4gc2Vuc2lu ZyB0cmFuc2lzdG9ycy4gQWRkaXRpb25hbCBtZWFzdXJlbWVudHMgaW5jbHVkZSBpbnRlcm5hbAo+ IHRlbXBlcmF0dXJlIGFuZCBpbnRlcm5hbCBWQ0MuCj4gCj4gU2lnbmVkLW9mZi1ieTogQW50b25p dSBNaWNsYXVzIDxhbnRvbml1Lm1pY2xhdXNAYW5hbG9nLmNvbT4KPiAtLS0KPiDCoERvY3VtZW50 YXRpb24vaHdtb24vaW5kZXgucnN0wqDCoCB8wqDCoCAxICsKPiDCoERvY3VtZW50YXRpb24vaHdt b24vbHRjMjk5MS5yc3QgfMKgIDQzICsrKwo+IMKgTUFJTlRBSU5FUlPCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoMKgIDggKwo+IMKgZHJpdmVycy9od21vbi9LY29u ZmlnwqDCoMKgwqDCoMKgwqDCoMKgwqAgfMKgIDExICsKPiDCoGRyaXZlcnMvaHdtb24vTWFrZWZp bGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gwqBkcml2ZXJzL2h3bW9uL2x0YzI5OTEu Y8KgwqDCoMKgwqDCoMKgwqAgfCA0OTAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysK PiDCoDYgZmlsZXMgY2hhbmdlZCwgNTU0IGluc2VydGlvbnMoKykKPiDCoGNyZWF0ZSBtb2RlIDEw MDY0NCBEb2N1bWVudGF0aW9uL2h3bW9uL2x0YzI5OTEucnN0Cj4gwqBjcmVhdGUgbW9kZSAxMDA2 NDQgZHJpdmVycy9od21vbi9sdGMyOTkxLmMKPiAKPiBkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlv bi9od21vbi9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL2h3bW9uL2luZGV4LnJzdAo+IGluZGV4 IDg4ZGFkZWE4NWNmYy4uMGVjOTZhYmUzZjdkIDEwMDY0NAo+IC0tLSBhL0RvY3VtZW50YXRpb24v aHdtb24vaW5kZXgucnN0Cj4gKysrIGIvRG9jdW1lbnRhdGlvbi9od21vbi9pbmRleC5yc3QKPiBA QCAtMTIxLDYgKzEyMSw3IEBAIEhhcmR3YXJlIE1vbml0b3JpbmcgS2VybmVsIERyaXZlcnMKPiDC oMKgwqAgbHRjMjk0Nwo+IMKgwqDCoCBsdGMyOTc4Cj4gwqDCoMKgIGx0YzI5OTAKPiArwqDCoCBs dGMyOTkxCj4gwqDCoMKgIGx0YzM4MTUKPiDCoMKgwqAgbHRjNDE1MQo+IMKgwqDCoCBsdGM0MjE1 Cj4gZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vaHdtb24vbHRjMjk5MS5yc3QgYi9Eb2N1bWVu dGF0aW9uL2h3bW9uL2x0YzI5OTEucnN0Cj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPiBpbmRleCAw MDAwMDAwMDAwMDAuLjlhYjI5ZGQ4NTAxMgo+IC0tLSAvZGV2L251bGwKPiArKysgYi9Eb2N1bWVu dGF0aW9uL2h3bW9uL2x0YzI5OTEucnN0Cj4gQEAgLTAsMCArMSw0MyBAQAo+ICsuLiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAo+ICsKPiArS2VybmVsIGRyaXZlciBsdGMyOTkxCj4g Kz09PT09PT09PT09PT09PT09PT09PQo+ICsKPiArU3VwcG9ydGVkIGNoaXBzOgo+ICsKPiArwqAg KiBBbmFsb2cgRGV2aWNlcyBMVEMyOTkxCj4gKwo+ICvCoMKgwqAgUHJlZml4OiAnbHRjMjk5MScK PiArCj4gK8KgwqDCoCBBZGRyZXNzZXMgc2Nhbm5lZDogSTJDIDB4NDggLSAweDRmCj4gKwo+ICvC oMKgwqAgRGF0YXNoZWV0Ogo+IGh0dHBzOi8vd3d3LmFuYWxvZy5jb20vbWVkaWEvZW4vdGVjaG5p Y2FsLWRvY3VtZW50YXRpb24vZGF0YS1zaGVldHMvMjk5MWZmLnBkZgo+ICsKPiArQXV0aG9yczoK PiArCj4gK8KgIC0gQW50b25pdSBNaWNsYXVzIDxhbnRvbml1Lm1pY2xhdXNAYW5hbG9nLmNvbT4K PiArCj4gKwo+ICtEZXNjcmlwdGlvbgo+ICstLS0tLS0tLS0tLQo+ICsKPiArVGhpcyBkcml2ZXIg c3VwcG9ydHMgaGFyZHdhcmUgbW9uaXRvcmluZyBmb3IgQW5hbG9nIERldmljZXMgTFRDMjk5MSBP Y3RhbCBJMkMKPiArVm9sdGFnZSwgQ3VycmVudCBhbmQgVGVtcGVyYXR1cmUgTW9uaXRvci4KPiAr Cj4gK1RoZSBMVEMyOTkxIGlzIHVzZWQgdG8gbW9uaXRvciBzeXN0ZW0gdGVtcGVyYXR1cmVzLCB2 b2x0YWdlcyBhbmQgY3VycmVudHMuCj4gK1Rocm91Z2ggdGhlIEkyQyBzZXJpYWwgaW50ZXJmYWNl LCB0aGUgZWlnaHQgbW9uaXRvcnMgY2FuIGluZGl2aWR1YWxseSBtZWFzdXJlCj4gK3N1cHBseSB2 b2x0YWdlcyBhbmQgY2FuIGJlIHBhaXJlZCBmb3IgZGlmZmVyZW50aWFsIG1lYXN1cmVtZW50cyBv ZiBjdXJyZW50IHNlbnNlCj4gK3Jlc2lzdG9ycyBvciB0ZW1wZXJhdHVyZSBzZW5zaW5nIHRyYW5z aXN0b3JzLiBBZGRpdGlvbmFsIG1lYXN1cmVtZW50cyBpbmNsdWRlCj4gK2ludGVybmFsIHRlbXBl cmF0dXJlYW5kIGludGVybmFsIFZDQy4KPiArCj4gKwo+ICtzeXNmcy1JbnRlcmZhY2UKPiArLS0t LS0tLS0tLS0tLQo+ICsKPiArVGhlIGZvbGxvd2luZyBhdHRyaWJ1dGVzIGFyZSBzdXBwb3J0ZWQu IExpbWl0cyBhcmUgcmVhZC1vbmx5Lgo+ICsKPiArPT09PT09PT09PT09PT09ID09PT09PT09PT09 PT09PT09Cj4gK2luWF9pbnB1dDrCoMKgwqDCoMKgIHZvbHRhZ2UgaW5wdXQKPiArY3VyclhfaW5w dXQ6wqDCoMKgIGN1cnJlbnQgaW5wdXQKPiArdGVtcFhfaW5wdXQ6wqDCoMKgIHRlbXBlcmF0dXJl IGlucHV0Cj4gKz09PT09PT09PT09PT09PSA9PT09PT09PT09PT09PT09PQo+IGRpZmYgLS1naXQg YS9NQUlOVEFJTkVSUyBiL01BSU5UQUlORVJTCj4gaW5kZXggYjE5OTk1NjkwOTA0Li45OGRkOGE4 ZTFmODQgMTAwNjQ0Cj4gLS0tIGEvTUFJTlRBSU5FUlMKPiArKysgYi9NQUlOVEFJTkVSUwo+IEBA IC0xMjQ1MSw2ICsxMjQ1MSwxNCBAQCBGOsKgwqDCoMKgwqBkcml2ZXJzL2h3bW9uL2x0YzI5NDct aTJjLmMKPiDCoEY6wqDCoMKgwqDCoGRyaXZlcnMvaHdtb24vbHRjMjk0Ny1zcGkuYwo+IMKgRjrC oMKgwqDCoMKgZHJpdmVycy9od21vbi9sdGMyOTQ3LmgKPiDCoAo+ICtMVEMyOTkxIEhBUkRXQVJF IE1PTklUT1IgRFJJVkVSCj4gK006wqDCoMKgwqDCoEFudG9uaXUgTWljbGF1cyA8YW50b25pdS5t aWNsYXVzQGFuYWxvZy5jb20+Cj4gK0w6wqDCoMKgwqDCoGxpbnV4LWh3bW9uQHZnZXIua2VybmVs Lm9yZwo+ICtTOsKgwqDCoMKgwqBTdXBwb3J0ZWQKPiArVzrCoMKgwqDCoMKgaHR0cHM6Ly9lei5h bmFsb2cuY29tL2xpbnV4LXNvZnR3YXJlLWRyaXZlcnMKPiArRjrCoMKgwqDCoMKgRG9jdW1lbnRh dGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL2h3bW9uL2FkaSxsdGMyOTkxLnlhbWwKPiArRjrCoMKg wqDCoMKgZHJpdmVycy9od21vbi9sdGMyOTkxLmMKPiArCj4gwqBMVEMyOTgzIElJTyBURU1QRVJB VFVSRSBEUklWRVIKPiDCoE06wqDCoMKgwqDCoE51bm8gU8OhIDxudW5vLnNhQGFuYWxvZy5jb20+ Cj4gwqBMOsKgwqDCoMKgwqBsaW51eC1paW9Admdlci5rZXJuZWwub3JnCj4gZGlmZiAtLWdpdCBh L2RyaXZlcnMvaHdtb24vS2NvbmZpZyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+IGluZGV4IGVj MzhjODg5MjE1OC4uODE4YTY3MzI4ZmNkIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvaHdtb24vS2Nv bmZpZwo+ICsrKyBiL2RyaXZlcnMvaHdtb24vS2NvbmZpZwo+IEBAIC05MzIsNiArOTMyLDE3IEBA IGNvbmZpZyBTRU5TT1JTX0xUQzI5OTAKPiDCoMKgwqDCoMKgwqDCoMKgwqAgVGhpcyBkcml2ZXIg Y2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9kdWxlIHdpbGwKPiDC oMKgwqDCoMKgwqDCoMKgwqAgYmUgY2FsbGVkIGx0YzI5OTAuCj4gwqAKPiArY29uZmlnIFNFTlNP UlNfTFRDMjk5MQo+ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJBbmFsb2cgRGV2aWNlcyBMVEMy OTkxIgo+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gSTJDCj4gK8KgwqDCoMKgwqDCoMKgaGVs cAo+ICvCoMKgwqDCoMKgwqDCoMKgIElmIHlvdSBzYXkgeWVzIGhlcmUgeW91IGdldCBzdXBwb3J0 IGZvciBBbmFsb2cgRGV2aWNlcyBMVEMyOTkxCj4gK8KgwqDCoMKgwqDCoMKgwqAgT2N0YWwgSTJD IFZvbHRhZ2UsIEN1cnJlbnQsIGFuZCBUZW1wZXJhdHVyZSBNb25pdG9yLiBUaGUgTFRDMjk5MQo+ ICvCoMKgwqDCoMKgwqDCoMKgIHN1cHBvcnRzIGEgY29tYmluYXRpb24gb2Ygdm9sdGFnZSwgY3Vy cmVudCBhbmQgdGVtcGVyYXR1cmUgbW9uaXRvcmluZy4KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqAg VGhpcyBkcml2ZXIgY2FuIGFsc28gYmUgYnVpbHQgYXMgYSBtb2R1bGUuIElmIHNvLCB0aGUgbW9k dWxlIHdpbGwKPiArwqDCoMKgwqDCoMKgwqDCoCBiZSBjYWxsZWQgbHRjMjk5MS4KPiArCj4gwqBj b25maWcgU0VOU09SU19MVEMyOTkyCj4gwqDCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJMaW5lYXIg VGVjaG5vbG9neSBMVEMyOTkyIgo+IMKgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIEkyQwo+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2h3bW9uL01ha2VmaWxlIGIvZHJpdmVycy9od21vbi9NYWtlZmls ZQo+IGluZGV4IDRhYzk0NTJiNTQzMC4uZjMyNGQwNTc1MzVhIDEwMDY0NAo+IC0tLSBhL2RyaXZl cnMvaHdtb24vTWFrZWZpbGUKPiArKysgYi9kcml2ZXJzL2h3bW9uL01ha2VmaWxlCj4gQEAgLTEy Nyw2ICsxMjcsNyBAQCBvYmotJChDT05GSUdfU0VOU09SU19MVEMyOTQ3KcKgwqDCoMKgwqDCoMKg Kz0gbHRjMjk0Ny1jb3JlLm8KPiDCoG9iai0kKENPTkZJR19TRU5TT1JTX0xUQzI5NDdfSTJDKSAr PSBsdGMyOTQ3LWkyYy5vCj4gwqBvYmotJChDT05GSUdfU0VOU09SU19MVEMyOTQ3X1NQSSkgKz0g bHRjMjk0Ny1zcGkubwo+IMKgb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk5MCnCoMKgKz0gbHRj Mjk5MC5vCj4gK29iai0kKENPTkZJR19TRU5TT1JTX0xUQzI5OTEpwqDCoCs9IGx0YzI5OTEubwo+ IMKgb2JqLSQoQ09ORklHX1NFTlNPUlNfTFRDMjk5MinCoMKgKz0gbHRjMjk5Mi5vCj4gwqBvYmot JChDT05GSUdfU0VOU09SU19MVEM0MTUxKcKgwqArPSBsdGM0MTUxLm8KPiDCoG9iai0kKENPTkZJ R19TRU5TT1JTX0xUQzQyMTUpwqDCoCs9IGx0YzQyMTUubwo+IGRpZmYgLS1naXQgYS9kcml2ZXJz L2h3bW9uL2x0YzI5OTEuYyBiL2RyaXZlcnMvaHdtb24vbHRjMjk5MS5jCj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPiBpbmRleCAwMDAwMDAwMDAwMDAuLjUxYTYwY2E4YzI0ZQo+IC0tLSAvZGV2L251 bGwKPiArKysgYi9kcml2ZXJzL2h3bW9uL2x0YzI5OTEuYwo+IEBAIC0wLDAgKzEsNDkwIEBACj4g Ky8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4gKy8qCj4gKyAqIENvcHlyaWdo dCAoQykgMjAyMyBBbmFsb2cgRGV2aWNlcywgSW5jLgo+ICsgKiBBdXRob3I6IEFudG9uaXUgTWlj bGF1cyA8YW50b25pdS5taWNsYXVzQGFuYWxvZy5jb20+Cj4gKyAqLwo+ICsKPiArI2luY2x1ZGUg PGxpbnV4L2JpdG9wcy5oPgo+ICsjaW5jbHVkZSA8bGludXgvZXJyLmg+Cj4gKyNpbmNsdWRlIDxs aW51eC9od21vbi5oPgo+ICsjaW5jbHVkZSA8bGludXgvaHdtb24tc3lzZnMuaD4KPiArI2luY2x1 ZGUgPGxpbnV4L2kyYy5oPgo+ICsjaW5jbHVkZSA8bGludXgva2VybmVsLmg+Cj4gKyNpbmNsdWRl IDxsaW51eC9tb2R1bGUuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4gKyNpbmNs dWRlIDxsaW51eC9yZWdtYXAuaD4KPiArI2luY2x1ZGUgPGxpbnV4L3JlZ3VsYXRvci9jb25zdW1l ci5oPgo+ICsKPiArI2RlZmluZSBMVEMyOTkxX1NUQVRVU19MT1fCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MDAKPiArI2RlZmluZSBMVEMyOTkxX0NIX0VOX1RSSUdHRVLCoMKgwqDCoMKgwqDC oMKgwqDCoDB4MDEKPiArI2RlZmluZSBMVEMyOTkxX1YxX1Y0X0NUUkzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoDB4MDYKPiArI2RlZmluZSBMVEMyOTkxX1Y1X1Y4X0NUUkzCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MDcKPiArI2RlZmluZSBMVEMyOTkxX1BXTV9USF9MU0JfVF9JTlTCoMKg wqDCoMKgwqDCoDB4MDgKPiArI2RlZmluZSBMVEMyOTkxX1BXTV9USF9NU0LCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDB4MDkKPiArI2RlZmluZSBMVEMyOTkxX0NIQU5ORUxfVl9NU0IoeCnCoMKg wqDCoMKgwqDCoCgweDBBICsgKCh4KSAqIDIpKQo+ICsjZGVmaW5lIExUQzI5OTFfQ0hBTk5FTF9U X01TQih4KcKgwqDCoMKgwqDCoMKgKDB4MEEgKyAoKHgpICogNCkpCj4gKyNkZWZpbmUgTFRDMjk5 MV9DSEFOTkVMX0NfTVNCKHgpwqDCoMKgwqDCoMKgwqAoMHgwQyArICgoeCkgKiA0KSkKPiArI2Rl ZmluZSBMVEMyOTkxX1RfSU5UX01TQsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDFBCj4g KyNkZWZpbmUgTFRDMjk5MV9WQ0NfTVNCwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgMHgxQwo+ICsKPiArI2RlZmluZSBMVEMyOTkxX1Y3X1Y4X0VOwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDcpCj4gKyNkZWZpbmUgTFRDMjk5MV9WNV9WNl9F TsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg2KQo+ICsjZGVmaW5lIExUQzI5OTFf VjNfVjRfRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNSkKPiArI2RlZmluZSBM VEMyOTkxX1YxX1YyX0VOwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDQpCj4gKyNk ZWZpbmUgTFRDMjk5MV9UX0lOVF9WQ0NfRU7CoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDMpCj4g Kwo+ICsjZGVmaW5lIExUQzI5OTFfVjNfVjRfRklMVF9FTsKgwqDCoMKgwqDCoMKgwqDCoMKgQklU KDcpCj4gKyNkZWZpbmUgTFRDMjk5MV9WM19WNF9URU1QX0VOwqDCoMKgwqDCoMKgwqDCoMKgwqBC SVQoNSkKPiArI2RlZmluZSBMVEMyOTkxX1YzX1Y0X0RJRkZfRU7CoMKgwqDCoMKgwqDCoMKgwqDC oEJJVCg0KQo+ICsjZGVmaW5lIExUQzI5OTFfVjFfVjJfRklMVF9FTsKgwqDCoMKgwqDCoMKgwqDC oMKgQklUKDMpCj4gKyNkZWZpbmUgTFRDMjk5MV9WMV9WMl9URU1QX0VOwqDCoMKgwqDCoMKgwqDC oMKgwqBCSVQoMSkKPiArI2RlZmluZSBMVEMyOTkxX1YxX1YyX0RJRkZfRU7CoMKgwqDCoMKgwqDC oMKgwqDCoEJJVCgwKQo+ICsKPiArI2RlZmluZSBMVEMyOTkxX1Y3X1Y4X0ZJTFRfRU7CoMKgwqDC oMKgwqDCoMKgwqDCoEJJVCg3KQo+ICsjZGVmaW5lIExUQzI5OTFfVjdfVjhfVEVNUF9FTsKgwqDC oMKgwqDCoMKgwqDCoMKgQklUKDUpCj4gKyNkZWZpbmUgTFRDMjk5MV9WN19WOF9ESUZGX0VOwqDC oMKgwqDCoMKgwqDCoMKgwqBCSVQoNCkKPiArI2RlZmluZSBMVEMyOTkxX1Y1X1Y2X0ZJTFRfRU7C oMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg3KQo+ICsjZGVmaW5lIExUQzI5OTFfVjVfVjZfVEVNUF9F TsKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDUpCj4gKyNkZWZpbmUgTFRDMjk5MV9WNV9WNl9ESUZG X0VOwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNCkKPiArCj4gKyNkZWZpbmUgTFRDMjk5MV9SRVBF QVRfQUNRX0VOwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNCkKPiArI2RlZmluZSBMVEMyOTkxX1Rf SU5UX0ZJTFRfRU7CoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCgzKQo+ICsKPiArI2RlZmluZSBMVEMy OTkxX01BWF9DSEFOTkVMwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgNAo+ICsjZGVmaW5lIExUQzI5 OTFfVF9JTlRfQ0hfTlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqA0Cj4gKyNkZWZpbmUgTFRDMjk5 MV9WQ0NfQ0hfTlLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMAo+ICsKPiArc3RhdGljIGNv bnN0IGNoYXIgKmNvbnN0IGxhYmVsX3ZvbHRhZ2VzW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgInZj YyIsCj4gK8KgwqDCoMKgwqDCoMKgInZvbHRhZ2UxIiwKPiArwqDCoMKgwqDCoMKgwqAidm9sdGFn ZTIiLAo+ICvCoMKgwqDCoMKgwqDCoCJ2b2x0YWdlMyIsCj4gK8KgwqDCoMKgwqDCoMKgInZvbHRh Z2U0IiwKPiArwqDCoMKgwqDCoMKgwqAidm9sdGFnZTUiLAo+ICvCoMKgwqDCoMKgwqDCoCJ2b2x0 YWdlNiIsCj4gK8KgwqDCoMKgwqDCoMKgInZvbHRhZ2U3IiwKPiArwqDCoMKgwqDCoMKgwqAidm9s dGFnZTgiCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3QgY2hhciAqY29uc3QgbGFiZWxfdGVtcFtd ID0gewo+ICvCoMKgwqDCoMKgwqDCoCJ0MSIsCj4gK8KgwqDCoMKgwqDCoMKgInQyIiwKPiArwqDC oMKgwqDCoMKgwqAidDMiLAo+ICvCoMKgwqDCoMKgwqDCoCJ0NCIsCj4gK8KgwqDCoMKgwqDCoMKg InRfaW50Igo+ICt9Owo+ICsKPiArc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IGxhYmVsX2N1cnJb XSA9IHsKPiArwqDCoMKgwqDCoMKgwqAidjEtdjIiLAo+ICvCoMKgwqDCoMKgwqDCoCJ2My12NCIs Cj4gK8KgwqDCoMKgwqDCoMKgInY1LXY2IiwKPiArwqDCoMKgwqDCoMKgwqAidjctdjgiCj4gK307 Cj4gKwo+ICtzdHJ1Y3QgbHRjMjk5MV9zdGF0ZSB7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGky Y19jbGllbnTCoMKgwqDCoMKgwqDCoCpjbGllbnQ7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJl Z21hcMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAqcmVnbWFwOwo+ICvCoMKgwqDCoMKgwqDCoHUzMsKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJfc2Vuc2VfbW9obVtMVEMy OTkxX01BWF9DSEFOTkVMXTsKPiArwqDCoMKgwqDCoMKgwqBib29swqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHRlbXBfZW5bTFRDMjk5MV9NQVhfQ0hBTk5FTF07Cj4gK307 Cj4gKwo+ICtzdGF0aWMgaW50IGx0YzI5OTFfcmVhZF9yZWcoc3RydWN0IGx0YzI5OTFfc3RhdGUg KnN0LCB1OCBhZGRyLCB1OCByZWdfbGVuLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGludCAqdmFsKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKg dTggcmVndmFsc1syXTsKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ICvCoMKgwqDCoMKgwqDC oGludCBpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSByZWdtYXBfYnVsa19yZWFkKHN0LT5y ZWdtYXAsIGFkZHIsIHJlZ3ZhbHMsIHJlZ19sZW4pOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQp Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoCp2YWwgPSAwOwo+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCByZWdf bGVuOyBpKyspCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2YWwgfD0gcmVndmFs c1tyZWdfbGVuIC0gaSAtIDFdIDw8IChpICogOCk7CgpIbW0gdGhpcyBkb2VzIG5vdCBsb29rIGdv b2QgOikuLi4gWW91IHNob3VsZCB1c2UgcHJvcGVyIF9fYmUgYW5ub3RhdGlvbnMgYW5kIEFQSS4u LgoKPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQg bHRjMjk5MV9nZXRfdm9sdGFnZShzdHJ1Y3QgbHRjMjk5MV9zdGF0ZSAqc3QsIHUzMiByZWcsIGxv bmcgKnZhbCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGludCByZWdfdmFsLCByZXQsIG9mZnNldCA9 IDA7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IGx0YzI5OTFfcmVhZF9yZWcoc3QsIHJlZywg MiwgJnJlZ192YWwpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZWcg PT0gTFRDMjk5MV9WQ0NfTVNCKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBW Y2MgMi41ViBvZmZzZXQgKi8KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2Zmc2V0 ID0gMjUwMDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVngsIDMwNS4xOHVWL0xTQiAqLwo+ICvC oMKgwqDCoMKgwqDCoCp2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVChzaWduX2V4dGVuZDMyKHJlZ192 YWwsIDE0KSAqIDMwNTE4LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAxMDAwICogMTAwKSArIG9mZnNldDsKPiArCj4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgbHRjMjk5MV9yZWFk X2luKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsIGludCBjaGFubmVsLCBsb25nICp2YWwp Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbHRjMjk5MV9zdGF0ZSAqc3QgPSBkZXZfZ2V0 X2RydmRhdGEoZGV2KTsKPiArwqDCoMKgwqDCoMKgwqB1MzIgcmVnOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBzd2l0Y2ggKGF0dHIpIHsKPiArwqDCoMKgwqDCoMKgwqBjYXNlIGh3bW9uX2luX2lucHV0 Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoY2hhbm5lbCA9PSBMVEMyOTkx X1ZDQ19DSF9OUikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJlZyA9IExUQzI5OTFfVkNDX01TQjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZWxzZQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmVnID0gTFRDMjk5MV9DSEFOTkVMX1ZfTVNCKGNoYW5uZWwgLSAxKTsKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICvCoMKgwqDC oMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIGx0YzI5OTFfZ2V0X3ZvbHRhZ2Uo c3QsIHJlZywgdmFsKTsKPiArfQo+ICsKPiArc3RhdGljIGludCBsdGMyOTkxX2dldF9jdXJyKHN0 cnVjdCBsdGMyOTkxX3N0YXRlICpzdCwgdTMyIHJlZywgaW50IGNoYW5uZWwsCj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbG9uZyAqdmFsKQo+ ICt7Cj4gK8KgwqDCoMKgwqDCoMKgaW50IHJlZ192YWwsIHJldDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gbHRjMjk5MV9yZWFkX3JlZyhzdCwgcmVnLCAyLCAmcmVnX3ZhbCk7Cj4gK8KgwqDC oMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJldDsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogVngtVnksIDE5LjA3NXVWL0xTQiAqLwo+ICvC oMKgwqDCoMKgwqDCoCp2YWwgPSBESVZfUk9VTkRfQ0xPU0VTVChzaWduX2V4dGVuZDMyKHJlZ192 YWwsIDE0KSAqIDE5MDc1LCAxMDAwKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvIHN0LT5yX3NlbnNlX21vaG1bY2hhbm5l bF07Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGx0YzI5OTFfcmVhZF9jdXJyKHN0cnVjdCBkZXZpY2UgKmRldiwgdTMyIGF0dHIsIGludCBjaGFu bmVsLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgbG9uZyAqdmFsKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGx0YzI5OTFfc3Rh dGUgKnN0ID0gZGV2X2dldF9kcnZkYXRhKGRldik7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHJlZzsK PiArCj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNoIChhdHRyKSB7Cj4gK8KgwqDCoMKgwqDCoMKgY2Fz ZSBod21vbl9jdXJyX2lucHV0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWcg PSBMVEMyOTkxX0NIQU5ORUxfQ19NU0IoY2hhbm5lbCk7CnlvdSBjb3VsZCBqdXN0IHJldHVybi4u Lgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKg wqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVPUE5P VFNVUFA7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbHRj Mjk5MV9nZXRfY3VycihzdCwgcmVnLCBjaGFubmVsLCB2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMg aW50IGx0YzI5OTFfZ2V0X3RlbXAoc3RydWN0IGx0YzI5OTFfc3RhdGUgKnN0LCB1MzIgcmVnLCBp bnQgY2hhbm5lbCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBsb25nICp2YWwpCj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmVnX3ZhbCwg cmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXQgPSBsdGMyOTkxX3JlYWRfcmVnKHN0LCByZWcs IDIsICZyZWdfdmFsKTsKPiArwqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBUZW1w IExTQiA9IDAuMDYyNSBEZWdyZWVzICovCj4gK8KgwqDCoMKgwqDCoMKgKnZhbCA9IERJVl9ST1VO RF9DTE9TRVNUKHNpZ25fZXh0ZW5kMzIocmVnX3ZhbCwgMTIpICogMTAwMCwgMTYpOwo+ICsKPiAr wqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBsdGMyOTkxX3Jl YWRfdGVtcChzdHJ1Y3QgZGV2aWNlICpkZXYsIHUzMiBhdHRyLCBpbnQgY2hhbm5lbCwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGxvbmcg KnZhbCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsdGMyOTkxX3N0YXRlICpzdCA9IGRl dl9nZXRfZHJ2ZGF0YShkZXYpOwo+ICvCoMKgwqDCoMKgwqDCoHUzMiByZWc7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoHN3aXRjaCAoYXR0cikgewo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25fdGVt cF9pbnB1dDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW5uZWwgPT0g TFRDMjk5MV9UX0lOVF9DSF9OUikKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJlZyA9IExUQzI5OTFfVF9JTlRfTVNCOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBlbHNlCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZWcgPSBMVEMyOTkxX0NIQU5ORUxfVF9NU0IoY2hhbm5lbCk7CgpuaXQ6IHlv dSBjb3VsZCBqdXN0IHJldHVybiBpbiBlYWNoIG9mIHRoZSBzdGF0ZW1lbnRzLi4uCgo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0 Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVPUE5PVFNVUFA7Cj4g K8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gbHRjMjk5MV9nZXRf dGVtcChzdCwgcmVnLCBjaGFubmVsLCB2YWwpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGx0YzI5 OTFfcmVhZChzdHJ1Y3QgZGV2aWNlICpkZXYsIGVudW0gaHdtb25fc2Vuc29yX3R5cGVzIHR5cGUs IHUzMgo+IGF0dHIsIGludCBjaGFubmVsLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgbG9uZyAqdmFsKQo+ICt7Cj4gK8KgwqDCoMKgwqDCoMKgc3dpdGNo ICh0eXBlKSB7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBod21vbl9pbjoKPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGx0YzI5OTFfcmVhZF9pbihkZXYsIGF0dHIsIGNoYW5u ZWwsIHZhbCk7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBod21vbl9jdXJyOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gbHRjMjk5MV9yZWFkX2N1cnIoZGV2LCBhdHRyLCBj aGFubmVsLCB2YWwpOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25fdGVtcDoKPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGx0YzI5OTFfcmVhZF90ZW1wKGRldiwgYXR0 ciwgY2hhbm5lbCwgdmFsKTsKPiArwqDCoMKgwqDCoMKgwqBkZWZhdWx0Ogo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVPUE5PVFNVUFA7Cj4gK8KgwqDCoMKgwqDCoMKg fQo+ICt9Cj4gKwo+ICtzdGF0aWMgdW1vZGVfdCBsdGMyOTkxX2lzX3Zpc2libGUoY29uc3Qgdm9p ZCAqZGF0YSwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKPiB1MzIgYXR0ciwKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBpbnQgY2hhbm5lbCkKPiArewo+ICvCoMKgwqDCoMKgwqDCoGNvbnN0IHN0cnVjdCBsdGMy OTkxX3N0YXRlICpzdCA9IGRhdGE7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHN3aXRjaCAodHlwZSkg ewo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25faW46Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHN3aXRjaCAoYXR0cikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjYXNlIGh3bW9uX2luX2lucHV0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBj YXNlIGh3bW9uX2luX2xhYmVsOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJuIDA0NDQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDC oMKgY2FzZSBod21vbl9jdXJyOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0 Y2ggKGF0dHIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSBod21vbl9j dXJyX2lucHV0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIGh3bW9uX2N1 cnJfbGFiZWw6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoc3QtPnJfc2Vuc2VfbW9obVtjaGFubmVsXSkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gMDQ0NDsKCklz IHRoaXMgaXMgYSByZWFsIHVzZWNhc2U/IEkgbWVhbiwgbm90IGhhdmluZyBhIHJzZW5zZT8gSWYg bm90LCBJIHdvdWxkIGp1c3QgbWFrZSB0aGUKcHJvcGVydHkgbWFuZGF0b3J5Li4uCgo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgY2FzZSBod21vbl90ZW1wOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGF0dHIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgY2FzZSBod21vbl90ZW1wX2lucHV0Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjYXNlIGh3bW9uX3RlbXBfbGFiZWw6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoc3QtPnRlbXBfZW5bY2hhbm5lbF0gfHwgY2hh bm5lbCA9PSBMVEMyOTkxX1RfSU5UX0NIX05SKQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwNDQ0Owo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gMDsKPiArfQo+ICsKPiArc3RhdGljIGludCBsdGMyOTkxX3JlYWRfc3RyaW5nKHN0 cnVjdCBkZXZpY2UgKmRldiwgZW51bSBod21vbl9zZW5zb3JfdHlwZXMgdHlwZSwKPiB1MzIgYXR0 ciwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBpbnQgY2hhbm5lbCwgY29uc3QgY2hhciAqKnN0cikKPiArewo+ICvCoMKgwqDCoMKg wqDCoHN3aXRjaCAodHlwZSkgewo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25fdGVtcDoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnN0ciA9IGxhYmVsX3RlbXBbY2hhbm5lbF07 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDC oGNhc2UgaHdtb25fY3VycjoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgKnN0ciA9 IGxhYmVsX2N1cnJbY2hhbm5lbF07Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJy ZWFrOwo+ICvCoMKgwqDCoMKgwqDCoGNhc2UgaHdtb25faW46Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCpzdHIgPSBsYWJlbF92b2x0YWdlc1tjaGFubmVsXTsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgZGVmYXVsdDoKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FT1BOT1RTVVBQOwo+ICvCoMKg wqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gK30KPiArCj4gK3N0 YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fb3BzIGx0YzI5OTFfaHdtb25fb3BzID0gewo+ICvCoMKg wqDCoMKgwqDCoC5pc192aXNpYmxlID0gbHRjMjk5MV9pc192aXNpYmxlLAo+ICvCoMKgwqDCoMKg wqDCoC5yZWFkID0gbHRjMjk5MV9yZWFkLAo+ICvCoMKgwqDCoMKgwqDCoC5yZWFkX3N0cmluZyA9 IGx0YzI5OTFfcmVhZF9zdHJpbmcsCj4gK307Cj4gKwo+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGh3 bW9uX2NoYW5uZWxfaW5mbyAqbHRjMjk5MV9pbmZvW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgSFdN T05fQ0hBTk5FTF9JTkZPKHRlbXAsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX1RfSU5QVVQgfCBIV01PTl9UX0xBQkVMLAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV01PTl9UX0lO UFVUIHwgSFdNT05fVF9MQUJFTCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgSFdNT05fVF9JTlBVVCB8IEhXTU9OX1RfTEFCRUwsCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX1RfSU5Q VVQgfCBIV01PTl9UX0xBQkVMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBIV01PTl9UX0lOUFVUIHwgSFdNT05fVF9MQUJFTAo+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLAo+ICvCoMKgwqDC oMKgwqDCoEhXTU9OX0NIQU5ORUxfSU5GTyhjdXJyLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV01PTl9DX0lOUFVUIHwgSFdNT05fQ19MQUJF TCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAg SFdNT05fQ19JTlBVVCB8IEhXTU9OX0NfTEFCRUwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX0NfSU5QVVQgfCBIV01PTl9DX0xBQkVM LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBI V01PTl9DX0lOUFVUIHwgSFdNT05fQ19MQUJFTAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLAo+ICvCoMKgwqDCoMKgwqDCoEhXTU9OX0NIQU5O RUxfSU5GTyhpbiwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAgSFdNT05fSV9JTlBVVCB8IEhXTU9OX0lfTEFCRUwsCj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX0lfSU5QVVQgfCBIV01P Tl9JX0xBQkVMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9MQUJFTCwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgSFdNT05fSV9JTlBVVCB8IEhXTU9O X0lfTEFCRUwsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIEhXTU9OX0lfSU5QVVQgfCBIV01PTl9JX0xBQkVMLAo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBIV01PTl9JX0lOUFVUIHwgSFdNT05f SV9MQUJFTCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgSFdNT05fSV9JTlBVVCB8IEhXTU9OX0lfTEFCRUwsCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIEhXTU9OX0lfSU5QVVQgfCBIV01PTl9J X0xBQkVMLAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBIV01PTl9JX0lOUFVUIHwgSFdNT05fSV9MQUJFTAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCApLAo+ICvCoMKgwqDCoMKgwqDCoE5VTEwK PiArfTsKPiArCj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3QgaHdtb25fY2hpcF9pbmZvIGx0YzI5OTFf Y2hpcF9pbmZvID0gewo+ICvCoMKgwqDCoMKgwqDCoC5vcHMgPSAmbHRjMjk5MV9od21vbl9vcHMs Cj4gK8KgwqDCoMKgwqDCoMKgLmluZm8gPSBsdGMyOTkxX2luZm8sCj4gK307Cj4gKwo+ICtzdGF0 aWMgY29uc3Qgc3RydWN0IHJlZ21hcF9jb25maWcgbHRjMjk5MV9yZWdtYXBfY29uZmlnID0gewo+ ICvCoMKgwqDCoMKgwqDCoC5yZWdfYml0cyA9IDgsCj4gK8KgwqDCoMKgwqDCoMKgLnZhbF9iaXRz ID0gOCwKPiArwqDCoMKgwqDCoMKgwqAubWF4X3JlZ2lzdGVyID0gMHgxRCwKPiArfTsKPiArCj4g K3N0YXRpYyBpbnQgbHRjMjk5MV9pbml0KHN0cnVjdCBsdGMyOTkxX3N0YXRlICpzdCkKPiArewo+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7Cj4gK8KgwqDCoMKg wqDCoMKgc3RydWN0IGZ3bm9kZV9oYW5kbGUgKmNoaWxkOwo+ICvCoMKgwqDCoMKgwqDCoGludCBy ZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgdTMyIHZhbCwgYWRkcjsKPiArwqDCoMKgwqDCoMKgwqB1OCB2 NV92OF9yZWdfZGF0YSA9IDAsIHYxX3Y0X3JlZ19kYXRhID0gMDsKPiArCj4gK8KgwqDCoMKgwqDC oMKgcmV0ID0gZGV2bV9yZWd1bGF0b3JfZ2V0X2VuYWJsZSgmc3QtPmNsaWVudC0+ZGV2LCAidmNj Iik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoJnN0LT5jbGllbnQtPmRldiwgcmV0LAo+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgICJmYWlsZWQgdG8gZW5hYmxlIHJlZ3VsYXRvclxuIik7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGZ3bm9kZSA9IGRldl9md25vZGUoJnN0LT5jbGllbnQtPmRldik7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoGZ3bm9kZV9mb3JfZWFjaF9hdmFpbGFibGVfY2hpbGRfbm9kZShmd25vZGUsIGNo aWxkKSB7CgpkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZSgpCgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByZXQgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIoY2hpbGQsICJyZWci LCAmYWRkcik7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyZXQgPCAwKSB7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmd25vZGVf aGFuZGxlX3B1dChjaGlsZCk7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmV0Owo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoYWRkciA+IDMpIHsKPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZ3bm9kZV9oYW5k bGVfcHV0KGNoaWxkKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXQgPSBmd25vZGVfcHJvcGVy dHlfcmVhZF91MzIoY2hpbGQsICJzaHVudC1yZXNpc3Rvci1taWxpLW9obXMiLAo+ICZ2YWwpOwo+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAoIXJldCkgewo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3QtPnJfc2Vuc2VfbW9obVthZGRy XSA9IHZhbDsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHN3aXRjaCAoYWRkcikgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY2FzZSAwOgo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHYxX3Y0X3JlZ19kYXRhIHw9IExUQzI5OTFfVjFfVjJf RElGRl9FTjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNhc2UgMToKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2MV92NF9yZWdfZGF0YSB8PSBMVEMyOTkx X1YzX1Y0X0RJRkZfRU47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIDI6Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdjVfdjhfcmVnX2RhdGEgfD0g TFRDMjk5MV9WNV9WNl9ESUZGX0VOOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAzOgo+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHY1X3Y4X3JlZ19k YXRhIHw9IExUQzI5OTFfVjdfVjhfRElGRl9FTjsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRlZmF1bHQ6Cj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJl YWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiArCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldCA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFkX2Jvb2woY2hpbGQsICJ0ZW1w ZXJhdHVyZS1lbmFibGUiKTsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJl dCkgewo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3Qt PnRlbXBfZW5bYWRkcl0gPSByZXQ7Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzd2l0Y2ggKGFkZHIpIHsKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMDoKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2MV92NF9yZWdfZGF0YSB8PSBM VEMyOTkxX1YxX1YyX1RFTVBfRU47Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjYXNlIDE6Cj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdjFfdjRfcmVnX2Rh dGEgfD0gTFRDMjk5MV9WM19WNF9URU1QX0VOOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2FzZSAyOgo+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHY1X3Y4 X3JlZ19kYXRhIHw9IExUQzI5OTFfVjVfVjZfVEVNUF9FTjsKPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBicmVhazsKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNhc2UgMzoKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2NV92OF9yZWdfZGF0YSB8PSBMVEMyOTkxX1Y3X1Y4X1RFTVBfRU47Cj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgYnJlYWs7 Cj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZWZhdWx0 Ogo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGJyZWFrOwo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgfQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gK8KgwqDCoMKg wqDCoMKgfQo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBTZXR1cCBWNS1WOCBDb250cm9sIHJlZ2lz dGVyICovCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3dyaXRlKHN0LT5yZWdtYXAsIExU QzI5OTFfVjVfVjhfQ1RSTCwgdjVfdjhfcmVnX2RhdGEpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChy ZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJyX3Byb2Jl KCZzdC0+Y2xpZW50LT5kZXYsIHJldCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRXJyb3I6IEZhaWxlZCB0 byBzZXQgVjUtVjggQ1RSTCByZWcuXG4iKTsKPiArCj4gK8KgwqDCoMKgwqDCoMKgLyogU2V0dXAg VjEtVjQgQ29udHJvbCByZWdpc3RlciAqLwo+ICvCoMKgwqDCoMKgwqDCoHJldCA9IHJlZ21hcF93 cml0ZShzdC0+cmVnbWFwLCBMVEMyOTkxX1YxX1Y0X0NUUkwsIHYxX3Y0X3JlZ19kYXRhKTsKPiAr wqDCoMKgwqDCoMKgwqBpZiAocmV0KQo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gZGV2X2Vycl9wcm9iZSgmc3QtPmNsaWVudC0+ZGV2LCByZXQsCj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgIkVycm9yOiBGYWlsZWQgdG8gc2V0IFYxLVY0IENUUkwgcmVnLlxuIik7Cj4gKwo+ICvCoMKg wqDCoMKgwqDCoC8qIFNldHVwIGNvbnRpbnVvdXMgbW9kZSAqLwo+ICvCoMKgwqDCoMKgwqDCoHJl dCA9IHJlZ21hcF93cml0ZShzdC0+cmVnbWFwLCBMVEMyOTkxX1BXTV9USF9MU0JfVF9JTlQsCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIExUQzI5 OTFfUkVQRUFUX0FDUV9FTik7Cj4gK8KgwqDCoMKgwqDCoMKgaWYgKHJldCkKPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIGRldl9lcnJfcHJvYmUoJnN0LT5jbGllbnQtPmRl diwgcmV0LAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICJFcnJvcjogRmFpbGVkIHRvIHNldCBjb250aXVvdXMg bW9kZS5cbiIpOwo+ICsKPiArwqDCoMKgwqDCoMKgwqAvKiBFbmFibGUgYWxsIGNoYW5uZWxzIGFu ZCB0cmlnZ2VyIGNvbnZlcnNpb25zICovCj4gK8KgwqDCoMKgwqDCoMKgcmV0ID0gcmVnbWFwX3dy aXRlKHN0LT5yZWdtYXAsIExUQzI5OTFfQ0hfRU5fVFJJR0dFUiwKPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTFRDMjk5MV9WN19WOF9FTiB8IExU QzI5OTFfVjVfVjZfRU4gfAo+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBMVEMyOTkxX1YzX1Y0X0VOIHwgTFRDMjk5MV9WMV9WMl9FTiB8Cj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIExUQzI5OTFf VF9JTlRfVkNDX0VOKTsKCk5vdCBzdXJlIG9uIHRoZSBhZGRlZCB2YWx1ZSBvZiBhbGwgdGhlIGNv bW1lbnRzIGJlZm9yZSBkb2luZyBhIGNvbmZpZ3VyYXRpb24uLi4gCgo+ICvCoMKgwqDCoMKgwqDC oGlmIChyZXQpCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBkZXZfZXJy X3Byb2JlKCZzdC0+Y2xpZW50LT5kZXYsIHJldCwKPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAiRXJyb3I6IEZh aWxlZCB0byBlbmFibGUgY29udmVyc2lvbnMuXG4iKTsKPiArCgpJIHdvdWxkIGp1c3QgcmV0dXJu IHJlZ21hcF93cml0ZSgpLi4uCgo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IGx0YzI5OTFfaTJjX3Byb2JlKHN0cnVjdCBpMmNfY2xpZW50ICpjbGllbnQp Cj4gK3sKPiArwqDCoMKgwqDCoMKgwqBpbnQgcmV0Owo+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk ZXZpY2UgKmh3bW9uX2RldjsKPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbHRjMjk5MV9zdGF0ZSAq c3Q7Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoGlmICghaTJjX2NoZWNrX2Z1bmN0aW9uYWxpdHkoY2xp ZW50LT5hZGFwdGVyLCBJMkNfRlVOQ19TTUJVU19XT1JEX0RBVEEpKQo+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVPUE5PVFNVUFA7Cj4gKwpJcyB0aGUgYWJvdmUgcmVh bGx5IG5lZWRlZD8gSXNuJ3QgdGhlIGRldmljZSBhbHNvIGNvbXBhdGlibGUgd2l0aCBwbGFpbiBp MmM/Cgo+ICvCoMKgwqDCoMKgwqDCoHN0ID0gZGV2bV9remFsbG9jKCZjbGllbnQtPmRldiwgc2l6 ZW9mKCpzdCksIEdGUF9LRVJORUwpOwo+ICvCoMKgwqDCoMKgwqDCoGlmICghc3QpCj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ICsKPiArwqDCoMKgwqDC oMKgwqBzdC0+Y2xpZW50ID0gY2xpZW50Owo+ICvCoMKgwqDCoMKgwqDCoHN0LT5yZWdtYXAgPSBk ZXZtX3JlZ21hcF9pbml0X2kyYyhjbGllbnQsICZsdGMyOTkxX3JlZ21hcF9jb25maWcpOwo+ICvC oMKgwqDCoMKgwqDCoGlmIChJU19FUlIoc3QtPnJlZ21hcCkpCj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSKHN0LT5yZWdtYXApOwo+ICsKPiArwqDCoMKgwqDC oMKgwqByZXQgPSBsdGMyOTkxX2luaXQoc3QpOwo+ICvCoMKgwqDCoMKgwqDCoGlmIChyZXQpCj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByZXQ7Cj4gKwo+ICvCoMKgwqDC oMKgwqDCoGh3bW9uX2RldiA9IGRldm1faHdtb25fZGV2aWNlX3JlZ2lzdGVyX3dpdGhfaW5mbygm Y2xpZW50LT5kZXYsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNsaWVudC0+bmFtZSwgc3QsCj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZsdGMyOTkxX2NoaXBfaW5mbywKPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCk7 Cj4gKwo+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBQVFJfRVJSX09SX1pFUk8oaHdtb25fZGV2KTsK PiArfQo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBvZl9kZXZpY2VfaWQgbHRjMjk5MV9vZl9t YXRjaFtdID0gewo+ICvCoMKgwqDCoMKgwqDCoHsgLmNvbXBhdGlibGUgPSAiYWRpLGx0YzI5OTEi IH0sCj4gK8KgwqDCoMKgwqDCoMKgeyB9Cj4gK307Cj4gK01PRFVMRV9ERVZJQ0VfVEFCTEUob2Ys IGx0YzI5OTFfb2ZfbWF0Y2gpOwo+ICsKPiArc3RhdGljIGNvbnN0IHN0cnVjdCBpMmNfZGV2aWNl X2lkIGx0YzI5OTFfaTJjX2lkW10gPSB7Cj4gK8KgwqDCoMKgwqDCoMKgeyAibHRjMjk5MSIsIDAg fSwKPiArwqDCoMKgwqDCoMKgwqB7fQo+ICt9Owo+ICtNT0RVTEVfREVWSUNFX1RBQkxFKGkyYywg bHRjMjk5MV9pMmNfaWQpOwo+ICsKPiArc3RhdGljIHN0cnVjdCBpMmNfZHJpdmVyIGx0YzI5OTFf aTJjX2RyaXZlciA9IHsKPiArwqDCoMKgwqDCoMKgwqAuY2xhc3MgPSBJMkNfQ0xBU1NfSFdNT04s CgpjdXJpb3VzOiB3aHkgb3Igd2hlbiBpcyB0aGUgYWJvdmUgbmVlZGVkPwoKLSBOdW5vIFPDoQoK Cg==