Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp447921rwi; Mon, 31 Oct 2022 03:39:14 -0700 (PDT) X-Google-Smtp-Source: AMsMyM5WykszCLgSAy71FCFoA9NnPFjArTQLFpSTYvBPzvTnvdcpAn2QRQ0KIkDkWe3g1u4xwtvd X-Received: by 2002:a50:ff13:0:b0:43e:76d3:63e1 with SMTP id a19-20020a50ff13000000b0043e76d363e1mr12626294edu.271.1667212754228; Mon, 31 Oct 2022 03:39:14 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667212754; cv=none; d=google.com; s=arc-20160816; b=P1W18IZsl32U3M6lWDFkACa+QhwOifl65eOQ98WajNq8WdZuOYYIfOLBwTdDbgHO5m L1S/SMb7R4CKzXBUHLuYBc1HAzfoiffUZXj36XnW3eVpsbyCwXFTjpbsoZEPG2xUAvAz frufZMaK4xR+BjOgAr+fFUFdFP9Oi83NFNXGbl7dwTMWhDh7/esMSngRP335tDLlnfNQ nqr9l26qfevi3/nK1c8pn7RWc9sKxJDly1gPaVkSHwnjSSByODt3FCiaOLzEIeX7/ojU P4u3cd2nBw6DrFrDT/3/AIryg2pdlDYCtUvFp/fFbb5BmdANEGD7hmPSEcBiLgSfYDnr Tnrg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:content-transfer-encoding :references:in-reply-to:date:cc:to:from:subject:message-id :dkim-signature; bh=TtYiE20UK76+KI4u516CS+BcSai1wFxBUP32UvpgTX0=; b=mbQnXn6+7M+cUTKv2/Ch8B+E7nbUGvryEqSQfEEuSQ8v8+ObjzzZ3QBUY9p8eB6VOX GwSgvJkwSy5MStqMZdSObko2wLbSOkU/Ndtxg3I4JLKWa8450aQMDPjXRxFH6XWK7AdO zCivO47+LHUyR/jFkUdc3wb7Q/yfSy4Rm/AJ1Lv0xEvphf/cCdDzlABzXq3+42lGGN8K +meOYJq6VJc8TNWcTQalFkv+XibpyjJxXBkz8vOcHeEVYgg93t24aX5Ps1GxKQ/iBsRW c+x8DIECrfi4v+s2A0CGsmNcjnJhaY/raWHyt5ql5r+sYgVh6Ok6W1mo7ACOUbYEwRd7 mSkQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@dylanvanassche.be header.s=MBO0001 header.b=y090Rzxk; 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=dylanvanassche.be Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id h21-20020a056402281500b0046207099f6bsi7506436ede.613.2022.10.31.03.38.49; Mon, 31 Oct 2022 03:39:14 -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; dkim=pass header.i=@dylanvanassche.be header.s=MBO0001 header.b=y090Rzxk; 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=dylanvanassche.be Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230140AbiJaKfN (ORCPT + 99 others); Mon, 31 Oct 2022 06:35:13 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51862 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230112AbiJaKfL (ORCPT ); Mon, 31 Oct 2022 06:35:11 -0400 Received: from mout-p-102.mailbox.org (mout-p-102.mailbox.org [80.241.56.152]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 8FEA539E; Mon, 31 Oct 2022 03:35:06 -0700 (PDT) Received: from smtp1.mailbox.org (smtp1.mailbox.org [IPv6:2001:67c:2050:b231:465::1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by mout-p-102.mailbox.org (Postfix) with ESMTPS id 4N18fr6vBJz9sQT; Mon, 31 Oct 2022 11:35:00 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dylanvanassche.be; s=MBO0001; t=1667212501; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=TtYiE20UK76+KI4u516CS+BcSai1wFxBUP32UvpgTX0=; b=y090Rzxk8SkTCBzw63SBCc8xQ67vP828MTzUNhiPlz7z0tbubTxdMhONlRyuwUUu3HTrBP YmlFEm7AqyDl4/4YGrag9joU0TR4c020ynb1XRhCcUlkkYzl+m3Ezrwjt5+WsQeg+OaEDC L5Q+bSAp5vvN11l05gXgnac49o62r2f/DDvAdn0momH67mc4oee2NcXGQtH36CU3RnjjSh ZZ99bJYkP51tAGK86lpZFpzmPvHSzPemfDG2UFTcTRQPKmEprP2Y7XN4bs+nUdiRmnudbs cOT6TlF5AMuUgHtBljHTMtI+3UWgAT+nF6WEzKd8Mexsy/uZlI5YVkYVB8qY7A== Message-ID: <0212be2972991ef2803c7f92c01217443def3dfd.camel@dylanvanassche.be> Subject: Re: [PATCH v4 1/2] leds: flash: add driver to support flash LED module in QCOM PMICs From: Dylan Van Assche To: Fenglin Wu , linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org, krzysztof.kozlowski@linaro.org, Pavel Machek , Gene Chen , Jacek Anaszewski , linux-leds@vger.kernel.org Cc: quic_collinsd@quicinc.com, quic_subbaram@quicinc.com, Luca Weiss Date: Mon, 31 Oct 2022 11:34:58 +0100 In-Reply-To: <20221025073802.2662564-2-quic_fenglinw@quicinc.com> References: <20221025073802.2662564-1-quic_fenglinw@quicinc.com> <20221025073802.2662564-2-quic_fenglinw@quicinc.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 X-Rspamd-Queue-Id: 4N18fr6vBJz9sQT X-Spam-Status: No, score=-2.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_LOW,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 Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org CkhpIEZlbmdsaW4sCgpUaGFua3MgZm9yIHN1Ym1pdHRpbmcgdGhlc2UgcGF0Y2hlcyEgVGhleSBh cmUgcmVhbGx5IG5pY2UhCkkgdGVzdGVkIHRoZXNlIHBhdGNoZXMgb24gYW4gU0RNODQ1IGJhc2Vk IGRldmljZSBhcyB0aGUgZG93bnN0cmVhbQpkcml2ZXIgaXMgdGhlIHNhbWUgZm9yIHRoZSBQTUk4 OTk4IGNvbXBhcmVkIHRvIHRoZSBtZW50aW9uZWQgUE1JQ3MgaW4KdGhpcyBwYXRjaHNlcmllcy4K ClRlc3RlZC1ieTogRHlsYW4gVmFuIEFzc2NoZSA8bWVAZHlsYW52YW5hc3NjaGUuYmU+ICMgc2Rt ODQ1LXNoaWZ0LQpheG9sb3RsICsgcG1pODk5OAoKPiA+IEFkZCBpbml0aWFsIGRyaXZlciB0byBz dXBwb3J0IGZsYXNoIExFRCBtb2R1bGUgZm91bmQgaW4gUXVhbGNvbW0KPiA+IFRlY2hub2xvZ2ll cywgSW5jLiBQTUlDcy4gVGhlIGZsYXNoIG1vZHVsZSBjYW4gaGF2ZSAzIG9yIDQgY2hhbm5lbHMK PiA+IGFuZCBlYWNoIGNoYW5uZWwgY2FuIGJlIGNvbnRyb2xsZWQgaW5kZXBlZGVudGx5IGFuZCBz dXBwb3J0IGZ1bGwgPgo+ID4gc2NhbGUKPiA+IGN1cnJlbnQgdXAgdG8gMS41IEEuIEl0IGFsc28g c3VwcG9ydHMgY29ubmVjdGluZyB0d28gY2hhbm5lbHMgPgo+ID4gdG9nZXRoZXIKPiA+IHRvIHN1 cHBseSBvbmUgTEVEIGNvbXBvbmVudCB3aXRoIGZ1bGwgc2NhbGUgY3VycmVudCB1cCB0byAyIEEu IEluID4KPiA+IHRoYXQKPiA+IGNhc2UsIHRoZSBjdXJyZW50IHdpbGwgYmUgc3BsaXQgb24gZWFj aCBjaGFubmVsIHN5bW1ldHJpY2FsbHkgYW5kCj4gPiB0aGUKPiA+IGNoYW5uZWxzIHdpbGwgYmUg ZW5hYmxlZCBhbmQgZGlzYWJsZWQgYXQgdGhlIHNhbWUgdGltZS4KPiA+IAo+ID4gU2lnbmVkLW9m Zi1ieTogRmVuZ2xpbiBXdSA8cXVpY19mZW5nbGlud0BxdWljaW5jLmNvbT4KPiA+IFRlc3RlZC1i eTogTHVjYSBXZWlzcyA8bHVjYS53ZWlzc0BmYWlycGhvbmUuY29tPiAjID4gc203MjI1LQo+ID4g ZmFpcnBob25lLWZwNCArIHBtNjE1MGwKPiA+IC0tLQo+ID4gwqBkcml2ZXJzL2xlZHMvZmxhc2gv S2NvbmZpZ8KgwqDCoMKgwqDCoMKgwqDCoMKgIHzCoCAxNSArCj4gPiDCoGRyaXZlcnMvbGVkcy9m bGFzaC9NYWtlZmlsZcKgwqDCoMKgwqDCoMKgwqDCoCB8wqDCoCAxICsKPiA+IMKgZHJpdmVycy9s ZWRzL2ZsYXNoL2xlZHMtcWNvbS1mbGFzaC5jIHwgNzAwID4KPiA+ICsrKysrKysrKysrKysrKysr KysrKysrKysrKwo+ID4gwqAzIGZpbGVzIGNoYW5nZWQsIDcxNiBpbnNlcnRpb25zKCspCj4gPiDC oGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2xlZHMvZmxhc2gvbGVkcy1xY29tLWZsYXNoLmMK PiA+IAo+ID4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvbGVkcy9mbGFzaC9LY29uZmlnCj4gPiBiL2Ry aXZlcnMvbGVkcy9mbGFzaC9LY29uZmlnCj4gPiBpbmRleCBkM2ViNjg5YjE5M2MuLmYzNmE2MDQw OTI5MCAxMDA2NDQKPiA+IC0tLSBhL2RyaXZlcnMvbGVkcy9mbGFzaC9LY29uZmlnCj4gPiArKysg Yi9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwo+ID4gQEAgLTYxLDYgKzYxLDIxIEBAIGNvbmZp ZyBMRURTX01UNjM2MAo+ID4gwqDCoMKgwqDCoMKgwqDCoMKgIEluZGVwZW5kZW50IGN1cnJlbnQg c291cmNlcyBzdXBwbHkgZm9yIGVhY2ggZmxhc2ggTEVEID4KPiA+IHN1cHBvcnQgdG9yY2gKPiA+ IMKgwqDCoMKgwqDCoMKgwqDCoCBhbmQgc3Ryb2JlIG1vZGUuCj4gPiDCoAo+ID4gK2NvbmZpZyBM RURTX1FDT01fRkxBU0gKPiA+ICvCoMKgwqDCoMKgwqDCoHRyaXN0YXRlICJMRUQgc3VwcG9ydCBm b3IgZmxhc2ggbW9kdWxlIGluc2lkZSBRdWFsY29tbSA+Cj4gPiBUZWNobm9sb2dpZXMsIEluYy4g UE1JQyIKPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gTUZEX1NQTUlfUE1JQyB8fCBDT01Q SUxFX1RFU1QKPiA+ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBPRgo+ ID4gK8KgwqDCoMKgwqDCoMKgZGVwZW5kcyBvbiBWNEwyX0ZMQVNIX0xFRF9DTEFTUyB8fCAhVjRM Ml9GTEFTSF9MRURfQ0xBU1MKPiA+ICvCoMKgwqDCoMKgwqDCoHNlbGVjdCBSRUdNQVAKPiA+ICvC oMKgwqDCoMKgwqDCoGhlbHAKPiA+ICvCoMKgwqDCoMKgwqDCoMKgIFRoaXMgb3B0aW9uIGVuYWJs ZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoIG1vZHVsZSBmb3VuZCBpbgo+ID4gPiBRdWFsY29tbQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqAgVGVjaG5vbG9naWVzLCBJbmMuIFBNSUNzLiBUaGUgZmxhc2gg bW9kdWxlIGNhbiBoYXZlIDMgb3IKPiA+IDQgPiBmbGFzaCBMRUQKPiA+ICvCoMKgwqDCoMKgwqDC oMKgIGNoYW5uZWxzIGFuZCBlYWNoIGNoYW5uZWwgaXMgcHJvZ3JhbW1hYmxlIHRvIHN1cHBvcnQg dXAKPiA+IHRvID4gMS41IEEgZnVsbAo+ID4gK8KgwqDCoMKgwqDCoMKgwqAgc2NhbGUgY3VycmVu dC4gSXQgYWxzbyBzdXBwb3J0cyBjb25uZWN0aW5nIHR3byBjaGFubmVscycKPiA+ID4gb3V0cHV0 IHRvZ2V0aGVyCj4gPiArwqDCoMKgwqDCoMKgwqDCoCB0byBzdXBwbHkgb25lIExFRCBjb21wb25l bnQgdG8gYWNoaWV2ZSBjdXJyZW50IHVwIHRvIDIgQS4KPiA+ID4gSW4gc3VjaCBjYXNlLAo+ID4g K8KgwqDCoMKgwqDCoMKgwqAgdGhlIHRvdGFsIExFRCBjdXJyZW50IHdpbGwgYmUgc3BsaXQgc3lt bWV0cmljYWxseSBvbiBlYWNoCj4gPiA+IGNoYW5uZWwgYW5kCj4gPiArwqDCoMKgwqDCoMKgwqDC oCB0aGV5IHdpbGwgYmUgZW5hYmxlZC9kaXNhYmxlZCBhdCB0aGUgc2FtZSB0aW1lLgo+ID4gKwo+ ID4gwqBjb25maWcgTEVEU19SVDQ1MDUKPiA+IMKgwqDCoMKgwqDCoMKgwqB0cmlzdGF0ZSAiTEVE IHN1cHBvcnQgZm9yIFJUNDUwNSBmbGFzaGxpZ2h0IGNvbnRyb2xsZXIiCj4gPiDCoMKgwqDCoMKg wqDCoMKgZGVwZW5kcyBvbiBJMkMgJiYgT0YKPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMv Zmxhc2gvTWFrZWZpbGUgPgo+ID4gYi9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUKPiA+IGlu ZGV4IDBhY2JkZGMwYjkxYi4uOGE2MDk5M2YxYTI1IDEwMDY0NAo+ID4gLS0tIGEvZHJpdmVycy9s ZWRzL2ZsYXNoL01ha2VmaWxlCj4gPiArKysgYi9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUK PiA+IEBAIC02LDYgKzYsNyBAQCBvYmotJChDT05GSUdfTEVEU19BUzM2NDVBKcKgwqDCoMKgwqDC oCs9IGxlZHMtYXMzNjQ1YS5vCj4gPiDCoG9iai0kKENPTkZJR19MRURTX0tURDI2OTIpwqDCoMKg wqDCoCs9IGxlZHMta3RkMjY5Mi5vCj4gPiDCoG9iai0kKENPTkZJR19MRURTX0xNMzYwMVgpwqDC oMKgwqDCoCs9IGxlZHMtbG0zNjAxeC5vCj4gPiDCoG9iai0kKENPTkZJR19MRURTX01BWDc3Njkz KcKgwqDCoMKgKz0gbGVkcy1tYXg3NzY5My5vCj4gPiArb2JqLSQoQ09ORklHX0xFRFNfUUNPTV9G TEFTSCnCoMKgKz0gbGVkcy1xY29tLWZsYXNoLm8KPiA+IMKgb2JqLSQoQ09ORklHX0xFRFNfUlQ0 NTA1KcKgwqDCoMKgwqDCoCs9IGxlZHMtcnQ0NTA1Lm8KPiA+IMKgb2JqLSQoQ09ORklHX0xFRFNf UlQ4NTE1KcKgwqDCoMKgwqDCoCs9IGxlZHMtcnQ4NTE1Lm8KPiA+IMKgb2JqLSQoQ09ORklHX0xF RFNfU0dNMzE0MCnCoMKgwqDCoMKgKz0gbGVkcy1zZ20zMTQwLm8KPiA+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2xlZHMvZmxhc2gvbGVkcy1xY29tLWZsYXNoLmMgPgo+ID4gYi9kcml2ZXJzL2xlZHMv Zmxhc2gvbGVkcy1xY29tLWZsYXNoLmMKPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiBpbmRl eCAwMDAwMDAwMDAwMDAuLmE5ZmNmNjE2MDBjMwo+ID4gLS0tIC9kZXYvbnVsbAo+ID4gKysrIGIv ZHJpdmVycy9sZWRzL2ZsYXNoL2xlZHMtcWNvbS1mbGFzaC5jCj4gPiBAQCAtMCwwICsxLDcwMCBA QAo+ID4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkKPiA+ICsvKgo+ ID4gKyAqIENvcHlyaWdodCAoYykgMjAyMiBRdWFsY29tbSBJbm5vdmF0aW9uIENlbnRlciwgSW5j LiBBbGwgcmlnaHRzCj4gPiA+IHJlc2VydmVkLgo+ID4gKyAqLwo+ID4gKwo+ID4gKyNpbmNsdWRl IDxsaW51eC9iaXRmaWVsZC5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9iaXRzLmg+Cj4gPiArI2lu Y2x1ZGUgPGxpbnV4L2xlZHMuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvbGVkLWNsYXNzLWZsYXNo Lmg+Cj4gPiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+ID4gKyNpbmNsdWRlIDxsaW51eC9w bGF0Zm9ybV9kZXZpY2UuaD4KPiA+ICsjaW5jbHVkZSA8bGludXgvcHJvcGVydHkuaD4KPiA+ICsj aW5jbHVkZSA8bGludXgvcmVnbWFwLmg+Cj4gPiArI2luY2x1ZGUgPG1lZGlhL3Y0bDItZmxhc2gt bGVkLWNsYXNzLmg+Cj4gPiArCj4gPiArLyogcmVnaXN0ZXJzIGRlZmluaXRpb25zICovCj4gPiAr I2RlZmluZSBGTEFTSF9UWVBFX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAw eDA0Cj4gPiArI2RlZmluZSBGTEFTSF9UWVBFX1ZBTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDE4Cj4gPiArCj4gPiArI2RlZmluZSBGTEFTSF9TVUJUWVBFX1JFR8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAweDA1Cj4gPiArI2RlZmluZSBGTEFTSF9TVUJUWVBFXzNDSF9W QUzCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDQKClBNSTg5OTggaGFzIGFsc28gYSAzIGNoYW5uZWwg Zmxhc2ggc3VidHlwZSwgYnV0IHJlcG9ydHMgMHgwMyBhcwpzdWJ0eXBlLiBUaGUgZHJpdmVyIHdv bid0IHByb2JlIGJlY2F1c2Ugb2YgdGhpcyBzaW5jZSB0aGUgc3VidHlwZSBkaWQKbm90IG1hdGNo LiBDaGFuZ2luZyB0aGlzIHZhbHVlIHRvIDB4MDMgbWFkZSB0aGlzIGRyaXZlciB3b3JrIG9uIFNE TTg0NQpiYXNlZCBkZXZpY2UgYXMgd2VsbCB3aXRoIFBNSTg5OTguIFdvdWxkIHlvdSBjb25zaWRl ciBzdXBwb3J0aW5nClNETTg0NStQTUk4OTk4IGFzIHdlbGw/Cgo+ID4gKyNkZWZpbmUgRkxBU0hf U1VCVFlQRV80Q0hfVkFMwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA3Cj4gPiArCj4gPiArI2RlZmlu ZSBGTEFTSF9USU1FUl9FTl9CSVTCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoEJJVCg3KQo+ID4g KyNkZWZpbmUgRkxBU0hfVElNRVJfVkFMX01BU0vCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VOTUFT Syg2LCAwKQo+ID4gKyNkZWZpbmUgRkxBU0hfVElNRVJfU1RFUF9NU8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoDEwCj4gPiArCj4gPiArI2RlZmluZSBGTEFTSF9TVFJPQkVfSFdfU1dfU0VMX0JJVMKg wqDCoMKgwqBCSVQoMikKPiA+ICsjZGVmaW5lIFNXX1NUUk9CRV9WQUzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAwCj4gPiArI2RlZmluZSBIV19TVFJPQkVfVkFMwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMQo+ID4gKyNkZWZpbmUgRkxBU0hfSFdfU1RST0JF X1RSSUdHRVJfU0VMX0JJVMKgwqDCoMKgwqDCoMKgwqBCSVQoMSkKPiA+ICsjZGVmaW5lIFNUUk9C RV9MRVZFTF9UUklHR0VSX1ZBTMKgwqDCoMKgwqDCoMKgMAo+ID4gKyNkZWZpbmUgU1RST0JFX0VE R0VfVFJJR0dFUl9WQUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEKPiA+ICsjZGVm aW5lIEZMQVNIX1NUUk9CRV9QT0xBUklUWV9CSVTCoMKgwqDCoMKgwqBCSVQoMCkKPiA+ICsjZGVm aW5lIFNUUk9CRV9BQ1RJVkVfSElHSF9WQUzCoMKgwqDCoMKgwqDCoMKgwqAxCj4gPiArCj4gPiAr I2RlZmluZSBGTEFTSF9JUkVTX01BU0tfNENIwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgQklUKDAp Cj4gPiArI2RlZmluZSBGTEFTSF9JUkVTX01BU0tfM0NIwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg R0VOTUFTSygxLCAwKQo+ID4gKyNkZWZpbmUgRkxBU0hfSVJFU18xMlA1TUFfVkFMwqDCoMKgwqDC oMKgwqDCoMKgwqAwCj4gPiArI2RlZmluZSBGTEFTSF9JUkVTXzVNQV9WQUxfNENIwqDCoMKgwqDC oMKgwqDCoMKgMQo+ID4gKyNkZWZpbmUgRkxBU0hfSVJFU181TUFfVkFMXzNDSMKgwqDCoMKgwqDC oMKgwqDCoDMKPiA+ICsKPiA+ICsvKiBjb25zdGFudHMgKi8KPiA+ICsjZGVmaW5lIEZMQVNIX0NV UlJFTlRfTUFYX1VBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE1MDAwMDAKPiA+ICsjZGVmaW5lIFRP UkNIX0NVUlJFTlRfTUFYX1VBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDUwMDAwMAo+ID4gKyNkZWZp bmUgRkxBU0hfVE9UQUxfQ1VSUkVOVF9NQVhfVUHCoMKgwqDCoMKgMjAwMDAwMAo+ID4gKyNkZWZp bmUgRkxBU0hfQ1VSUkVOVF9ERUZBVUxUX1VBwqDCoMKgwqDCoMKgwqAxMDAwMDAwCj4gPiArI2Rl ZmluZSBUT1JDSF9DVVJSRU5UX0RFRkFVTFRfVUHCoMKgwqDCoMKgwqDCoDIwMDAwMAo+ID4gKwo+ ID4gKyNkZWZpbmUgVE9SQ0hfSVJFU19VQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoDUwMDAKPiA+ICsjZGVmaW5lIEZMQVNIX0lSRVNfVUHCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAxMjUwMAo+ID4gKwo+ID4gKyNkZWZpbmUgRkxBU0hfVElNRU9VVF9NQVhf VVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTI4MDAwMAo+ID4gKyNkZWZpbmUgRkxBU0hfVElNRU9V VF9TVEVQX1VTwqDCoMKgwqDCoMKgwqDCoMKgwqAxMDAwMAo+ID4gKwo+ID4gK2VudW0gaHdfdHlw ZSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBRQ09NX01WRkxBU0hfM0NILAo+ID4gK8KgwqDCoMKgwqDC oMKgUUNPTV9NVkZMQVNIXzRDSCwKPiA+ICt9Owo+ID4gKwo+ID4gK2VudW0gbGVkX21vZGUgewo+ ID4gK8KgwqDCoMKgwqDCoMKgRkxBU0hfTU9ERSwKPiA+ICvCoMKgwqDCoMKgwqDCoFRPUkNIX01P REUsCj4gPiArfTsKPiA+ICsKPiA+ICtlbnVtIGxlZF9zdHJvYmUgewo+ID4gK8KgwqDCoMKgwqDC oMKgU1dfU1RST0JFLAo+ID4gK8KgwqDCoMKgwqDCoMKgSFdfU1RST0JFLAo+ID4gK307Cj4gPiAr Cj4gPiArZW51bSB7Cj4gPiArwqDCoMKgwqDCoMKgwqBSRUdfU1RBVFVTMSwKPiA+ICvCoMKgwqDC oMKgwqDCoFJFR19TVEFUVVMyLAo+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX1NUQVRVUzMsCj4gPiAr wqDCoMKgwqDCoMKgwqBSRUdfQ0hBTl9USU1FUiwKPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19JVEFS R0VULAo+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX01PRFVMRV9FTiwKPiA+ICvCoMKgwqDCoMKgwqDC oFJFR19JUkVTT0xVVElPTiwKPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19DSEFOX1NUUk9CRSwKPiA+ ICvCoMKgwqDCoMKgwqDCoFJFR19DSEFOX0VOLAo+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX01BWF9D T1VOVCwKPiA+ICt9Owo+ID4gKwo+ID4gK3N0cnVjdCByZWdfZmllbGQgbXZmbGFzaF8zY2hfcmVn c1tSRUdfTUFYX0NPVU5UXSA9IHsKPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDA4LCAw LCA3KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBzdGF0dXMxwqDCoMKg wqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDA5LCAwLCA3KSzCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC8qIHN0YXR1czLCoMKgwqDCoMKgwqAqLwo+ID4g K8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEKDB4MGEsIDAsIDcpLMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgLyogc3RhdHVzM8KgwqDCoMKgwqDCoCovCj4gPiArwqDCoMKgwqDCoMKg wqBSRUdfRklFTERfSUQoMHg0MCwgMCwgNywgMywgMSkswqDCoMKgwqDCoMKgwqDCoCAvKiBjaGFu X3RpbWVywqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgweDQzLCAwLCA2 LCAzLCAxKSzCoMKgwqDCoMKgwqDCoMKgIC8qIGl0YXJnZXTCoMKgwqDCoMKgwqAqLwo+ID4gK8Kg wqDCoMKgwqDCoMKgUkVHX0ZJRUxEKDB4NDYsIDcsIDcpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLyogbW9kdWxlX2VuwqDCoMKgwqAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgUkVH X0ZJRUxEKDB4NDcsIDAsIDUpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog aXJlc29sdXRpb27CoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgweDQ5LCAw LCAyLCAzLCAxKSzCoMKgwqDCoMKgwqDCoMKgIC8qIGNoYW5fc3Ryb2JlwqDCoCovCj4gPiArwqDC oMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0YywgMCwgMikswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCAvKiBjaGFuX2VuwqDCoMKgwqDCoMKgKi8KPiA+ICt9OwoKVGhlc2UgcmVnaXN0 ZXJzIG1hcCBwZXJmZWN0bHkgZm9yIFNETTg0NSB3aXRoIFBNSTg5OTggYXMgd2VsbCwgYWRkaW5n CnN1cHBvcnQgZm9yIHRoaXMgc3VidHlwZSAoMHgwMykgd291bGQgYmUgZ3JlYXQuCgo+ID4gKwo+ ID4gK3N0cnVjdCByZWdfZmllbGQgbXZmbGFzaF80Y2hfcmVnc1tSRUdfTUFYX0NPVU5UXSA9IHsK PiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDA2LCAwLCA3KSzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBzdGF0dXMxwqDCoMKgwqDCoMKgKi8KPiA+ICvCoMKgwqDC oMKgwqDCoFJFR19GSUVMRCgweDA3LCAwLCA2KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAvKiBzdGF0dXMywqDCoMKgwqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19G SUVMRCgweDA5LCAwLCA3KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBz dGF0dXMzwqDCoMKgwqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgweDNl LCAwLCA3LCA0LCAxKSzCoMKgwqDCoMKgwqDCoMKgwqAvKiBjaGFuX3RpbWVywqDCoMKgKi8KPiA+ ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgweDQyLCAwLCA2LCA0LCAxKSzCoMKgwqDCoMKg wqDCoMKgwqAvKiBpdGFyZ2V0wqDCoMKgwqDCoMKgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19G SUVMRCgweDQ2LCA3LCA3KSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAvKiBt b2R1bGVfZW7CoMKgwqDCoCovCj4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0OSwgMCwg MykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyogaXJlc29sdXRpb27CoMKg Ki8KPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRF9JRCgweDRhLCAwLCA2LCA0LCAxKSzCoMKg wqDCoMKgwqDCoMKgwqAvKiBjaGFuX3N0cm9iZcKgwqAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgUkVH X0ZJRUxEKDB4NGUsIDAsIDMpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q IGNoYW5fZW7CoMKgwqDCoMKgwqAqLwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHFjb21fZmxh c2hfbGVkIHsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXDCoMKgwqDC oMKgwqDCoMKgwqDCoCpjaGlwOwo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9jbGFzc2Rl dl9mbGFzaMKgwqDCoMKgwqDCoMKgZmxhc2g7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdjRs Ml9mbGFzaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2NGwyX2ZsYXNoOwo+ID4gK8Kg wqDCoMKgwqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1heF9mbGFzaF9jdXJyZW50X21hOwo+ID4gK8KgwqDCoMKgwqDCoMKg dTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1heF90b3JjaF9jdXJyZW50X21hOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMywqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoG1heF90aW1l b3V0X21zOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMywqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYXNoX2N1cnJlbnRfbWE7Cj4gPiArwqDC oMKgwqDCoMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZmxhc2hfdGltZW91dF9tczsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg KmNoYW5faWQ7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5fY291bnQ7Cj4gPiArwqDCoMKg wqDCoMKgwqBib29swqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBlbmFibGVkOwo+ID4gK307Cj4gPiArCj4gPiArc3RydWN0IHFjb21fZmxhc2hf Y2hpcCB7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWTCoMKgwqAqbGVk czsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdtYXBfZmllbGTCoMKgwqDCoCAqcl9maWVs ZHNbUkVHX01BWF9DT1VOVF07Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZGV2aWNlwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCpkZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsb2NrOwo+ID4gK8KgwqDCoMKgwqDCoMKgZW51bSBod190eXBl wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaHdfdHlwZTsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZWRzX2NvdW50Owo+ID4g K8KgwqDCoMKgwqDCoMKgdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoG1heF9jaGFubmVsczsKPiA+ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFuX2VuX2JpdHM7Cj4gPiArfTsKPiA+ICsKPiA+ ICtzdGF0aWMgaW50IHNldF9mbGFzaF9tb2R1bGVfZW4oc3RydWN0IHFjb21fZmxhc2hfbGVkICps ZWQsIGJvb2wKPiA+IGVuKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2Zs YXNoX2NoaXAgKmNoaXAgPSBsZWQtPmNoaXA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBsZWRfbWFz ayA9IDAsIHZhbDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByYzsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsZWQtPmNoYW5fY291bnQ7IGkrKykKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBsZWRfbWFzayB8PSBCSVQobGVkLT5jaGFuX2lkW2ld IC0gMSk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9sb2NrKCZjaGlwLT5sb2NrKTsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChlbikKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBjaGlwLT5jaGFuX2VuX2JpdHMgfD0gbGVkX21hc2s7Cj4gPiArwqDCoMKgwqDCoMKgwqBl bHNlCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+Y2hhbl9lbl9iaXRz ICY9IH5sZWRfbWFzazsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9ICEhY2hpcC0+Y2hh bl9lbl9iaXRzOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfZmllbGRfd3JpdGUoY2hp cC0+cl9maWVsZHNbUkVHX01PRFVMRV9FTl0sCj4gPiB2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKHJjIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGNo aXAtPmRldiwgIndyaXRlIG1vZHVsZV9lbiBmYWlsZWQsCj4gPiByYz0lZFxuIiwgPiByYyk7Cj4g PiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHNldF9m bGFzaF9jdXJyZW50KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLCB1MzIgPgo+ID4gY3VycmVu dF9tYSwgZW51bSBsZWRfbW9kZSBtb2RlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVj dCBxY29tX2ZsYXNoX2NoaXAgKmNoaXAgPSBsZWQtPmNoaXA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1 MzIgaXRhcmdfdWEgPSBjdXJyZW50X21hICogMTAwMCAvIGxlZC0+Y2hhbl9jb3VudCArIDE7Cj4g PiArwqDCoMKgwqDCoMKgwqB1MzIgaXJlc191YSA9IChtb2RlID09IEZMQVNIX01PREUpID8gRkxB U0hfSVJFU19VQSA6ID4KPiA+IFRPUkNIX0lSRVNfVUE7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCB2 YWwsIHNoaWZ0LCBpcmVzX21hc2sgPSAwLCBpcmVzX3ZhbCA9IDAsIGNoYW5faWQ7Cj4gPiArwqDC oMKgwqDCoMKgwqBpbnQgaSwgcmM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKgo+ID4gK8Kg wqDCoMKgwqDCoMKgICogU3BsaXQgdGhlIGN1cnJlbnQgYWNyb3NzIHRoZSBjaGFubmVscyBhbmQg c2V0IHRoZQo+ID4gK8KgwqDCoMKgwqDCoMKgICogSVJFU09MVVRJT04gYW5kIElUQVJHRVQgcmVn aXN0ZXJzIGFjY29yZGluZ2x5Lgo+ID4gK8KgwqDCoMKgwqDCoMKgICovCj4gPiArwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50OyBpKyspIHsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGFuX2lkID0gbGVkLT5jaGFuX2lkW2ldOwo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChpdGFyZ191YSA8IGlyZXNfdWEpCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHZhbCA9IDA7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpdGFyZ191YSAvIGlyZXNfdWEg LSAxOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFw X2ZpZWxkc193cml0ZShjaGlwLQo+ID4gPnJfZmllbGRzW1JFR19JVEFSR0VUXSwgPiBjaGFuX2lk IC0gMSwgdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAw KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm4gcmM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoaXAt Pmh3X3R5cGUgPT0gUUNPTV9NVkZMQVNIXzNDSCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaGlmdCA9IChjaGFuX2lkIC0gMSkgKiAyOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpcmVzX21hc2sg fD0gRkxBU0hfSVJFU19NQVNLXzNDSCA8PCBzaGlmdDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJlc192YWwgfD0gKChtb2RlID09IEZMQVNIX01P REUpID8KPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoChGTEFTSF9JUkVTXzEyUDVNQV9WQUwgPDwgc2hpZnQpIDoKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoChGTEFTSF9JUkVTXzVNQV9WQUxfM0NIIDw8IHNoaWZ0KSk7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChjaGlwLT5od190eXBlID09IFFDT01fTVZGTEFT SF80Q0gpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgc2hpZnQgPSBjaGFuX2lkIC0gMTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgaXJlc19tYXNrIHw9IEZMQVNIX0lSRVNfTUFTS180Q0ggPDwgc2hp ZnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGly ZXNfdmFsIHw9ICgobW9kZSA9PSBGTEFTSF9NT0RFKSA/Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRkxBU0hfSVJFU18x MlA1TUFfVkFMIDw8IHNoaWZ0KSA6Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAoRkxBU0hfSVJFU181TUFfVkFMXzRDSCA8 PCBzaGlmdCkpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKg wqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiA+IHJlZ21hcF9maWVs ZF91cGRhdGVfYml0cyhjaGlwLQo+ID4gPnJfZmllbGRzW1JFR19JUkVTT0xVVElPTl0sIGlyZXNf bWFzaywgPiBpcmVzX3ZhbCk7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgc2V0X2ZsYXNo X3RpbWVvdXQoc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQsIHUzMiA+Cj4gPiB0aW1lb3V0X21z KQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNoaXAg PSBsZWQtPmNoaXA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCB2YWwsIGNoYW5faWQ7Cj4gPiArwqDC oMKgwqDCoMKgwqBpbnQgcmMsIGk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAvKiBzZXQgU0FG RVRZX1RJTUVSIGZvciBhbGwgdGhlIGNoYW5uZWxzIGNvbm5lY3RlZCB0byB0aGUgPgo+ID4gc2Ft ZSBMRUQgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoHRpbWVvdXRfbXMgPSBtaW5fdCh1MzIsIHRpbWVv dXRfbXMsIGxlZC0+bWF4X3RpbWVvdXRfbXMpOwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0g MDsgaSA8IGxlZC0+Y2hhbl9jb3VudDsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY2hhbl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqB2YWwgPSB0aW1lb3V0X21zIC8gRkxBU0hfVElNRVJfU1RFUF9NUzsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBjbGFtcF90KHU4LCB2YWwsIDAs IEZMQVNIX1RJTUVSX1ZBTF9NQVNLKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAodGltZW91dF9tcykKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsIHw9IEZMQVNIX1RJTUVSX0VOX0JJVDsKPiA+ICsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9ID4gcmVnbWFwX2ZpZWxkc193cml0ZShjaGlwLQo+ ID4gPnJfZmllbGRzW1JFR19DSEFOX1RJTUVSXSwgY2hhbl9pZCAtIDEsID4gdmFsKTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiArwqDCoMKg wqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiAr Cj4gPiArc3RhdGljIGludCBzZXRfZmxhc2hfc3Ryb2JlKHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAq bGVkLCBlbnVtID4KPiA+IGxlZF9zdHJvYmUgc3Ryb2JlLCBib29sIHN0YXRlKQo+ID4gK3sKPiA+ ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNoaXAgPSBsZWQtPmNoaXA7 Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBtYXNrLCB2YWwsIGNoYW5faWQgPSAwLCBjaGFuX21hc2sg PSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJjLCBpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgLyogU2V0IFNXIHN0cm9iZSBjb25maWcgZm9yIGFsbCBjaGFubmVscyBjb25uZWN0ZWQgdG8g dGhlCj4gPiBMRUQgPiAqLwo+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxlZC0+ Y2hhbl9jb3VudDsgaSsrKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hh bl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAoc3Ryb2JlID09IFNXX1NUUk9CRSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0KPiA+IEZJRUxEX1BSRVAoRkxBU0hfU1RST0JFX0hX X1NXX1NFTF9CSVQsID4gU1dfU1RST0JFX1ZBTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZWxzZQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2YWwgPQo+ID4gRklFTERfUFJFUChGTEFTSF9TVFJPQkVfSFdfU1dfU0VMX0JJVCwg PiBIV19TVFJPQkVfVkFMKTsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2YWwgfD0gRklFTERfUFJFUChGTEFTSF9IV19TVFJPQkVfVFJJR0dFUl9TRUxfQklULAo+ID4g PiBTVFJPQkVfTEVWRUxfVFJJR0dFUl9WQUwpIHwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChGTEFTSF9TVFJPQkVfUE9MQVJJVFlf QklULCA+Cj4gPiBTVFJPQkVfQUNUSVZFX0hJR0hfVkFMKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqByYyA9ID4gcmVnbWFwX2ZpZWxkc193cml0ZShjaGlwLQo+ID4gPnJfZmll bGRzW1JFR19DSEFOX1NUUk9CRV0sIGNoYW5faWQgLSAxLCA+IHZhbCk7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5fbWFzayB8PSBCSVQoY2hhbl9pZCAtIDEpOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgLyogZW5hYmxlL2Rpc2Fi bGUgZmxhc2ggY2hhbm5lbHMgKi8KPiA+ICvCoMKgwqDCoMKgwqDCoG1hc2sgPSBjaGFuX21hc2s7 Cj4gPiArwqDCoMKgwqDCoMKgwqB2YWwgPSBzdGF0ZSA/IG1hc2sgOiAwOwo+ID4gK8KgwqDCoMKg wqDCoMKgcmMgPSByZWdtYXBfZmllbGRfdXBkYXRlX2JpdHMoY2hpcC0+cl9maWVsZHNbUkVHX0NI QU5fRU5dLAo+ID4gPiBtYXNrLCB2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqBsZWQtPmVuYWJsZWQgPSBzdGF0ZTsKPiA+ICvCoMKgwqDCoMKgwqDCoHJl dHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfYnJpZ2h0bmVz c19zZXQoc3RydWN0IGxlZF9jbGFzc2Rldl9mbGFzaCA+Cj4gPiAqZmxlZF9jZGV2LCB1MzIgYnJp Z2h0bmVzcykKPiA+ICt7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg KmxlZCA9IGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsIHN0cnVjdAo+ID4gPiBxY29tX2ZsYXNoX2xl ZCwgZmxhc2gpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbGVkLT5mbGFzaF9jdXJyZW50X21h ID0gbWluX3QodTMyLCBsZWQtCj4gPiA+bWF4X2ZsYXNoX2N1cnJlbnRfbWEsID4gYnJpZ2h0bmVz cyAvIDEwMDApOwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArfQoKVGhpcyBkb2Vz bid0IHNlZW0gdG8gd29yayBpbiB0b3JjaCBtb2RlIGZvciBtZSBvbiBQTUk4OTk4LiBJZiB0aGUK YnJpZ2h0bmVzcyBpcyAwLCB0aGUgdG9yY2ggaXMgT0ZGIGFzIGV4cGVjdGVkLCBidXQgd2hlbiB0 aGUgdG9yY2ggaXMKT04sIHlvdSBjYW5ub3QgY29udHJvbCB0aGUgYnJpZ2h0bmVzcy4gVGhlIGJy aWdodG5lc3MgaXMgdGhlIHNhbWUgZm9yClsxLCAyNTVdLiBJZiB0aGUgaGFyZHdhcmUgY2Fubm90 IGNoYW5nZSB0aGUgYnJpZ2h0bmVzcyBpbiB0b3JjaCBtb2RlLAppdCB3b3VsZCBiZSBuaWNlIHRv IHJlcG9ydCBhIG1heF9icmlnaHRuZXNzIHZhbHVlIG9mIDEgaW5zdGVhZCBvZiAyNTUKZm9yIHVz ZXJzcGFjZS4gVGhpcyBjb3VsZCBiZSBhIGxpbWl0YXRpb24gb2YgdGhlIFBNSTg5OTgsIG5vdCBz dXJlLgpEbyB5b3UgaGF2ZSBhbnkgaW5zaWdodHMgaGVyZT8gVGhpcyBkcml2ZXIgaXMgYWxyZWFk eSA5OSUgd29ya2luZyBmb3IKU0RNODQ1K1BNSTg5OTguCgpGbGFzaCBtb2RlIHdvcmtzIGdyZWF0 LCB0aW1lb3V0ICYgYnJpZ2h0bmVzcyBjYW4gYmUgY29uZmlndXJlZCBqdXN0CmZpbmUuCgo+ID4g Kwo+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF90aW1lb3V0X3NldChzdHJ1Y3QgbGVkX2NsYXNz ZGV2X2ZsYXNoID4KPiA+ICpmbGVkX2NkZXYsIHUzMiB0aW1lb3V0KQo+ID4gK3sKPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkID0gY29udGFpbmVyX29mKGZsZWRf Y2Rldiwgc3RydWN0Cj4gPiA+IHFjb21fZmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBsZWQtPmZsYXNoX3RpbWVvdXRfbXMgPSB0aW1lb3V0IC8gMTAwMDsKPiA+ICvC oMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21f Zmxhc2hfc3Ryb2JlX3NldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoID4KPiA+ICpmbGVkX2Nk ZXYsIGJvb2wgc3RhdGUpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxh c2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxlZF9jZGV2LCBzdHJ1Y3QKPiA+ID4gcWNvbV9m bGFzaF9sZWQsIGZsYXNoKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCByYzsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoHJjID0gc2V0X2ZsYXNoX2N1cnJlbnQobGVkLCBsZWQtPmZsYXNoX2N1cnJl bnRfbWEsID4KPiA+IEZMQVNIX01PREUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkK PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiArCj4gPiAr wqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF90aW1lb3V0KGxlZCwgbGVkLT5mbGFzaF90aW1l b3V0X21zKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMg PSBzZXRfZmxhc2hfbW9kdWxlX2VuKGxlZCwgc3RhdGUpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X2ZsYXNoX3N0cm9iZShsZWQsIFNXX1NU Uk9CRSwgc3RhdGUpOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfc3Ry b2JlX2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoID4KPiA+ICpmbGVkX2NkZXYsIGJvb2wg KnN0YXRlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAq bGVkID0gY29udGFpbmVyX29mKGZsZWRfY2Rldiwgc3RydWN0Cj4gPiA+IHFjb21fZmxhc2hfbGVk LCBmbGFzaCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqAqc3RhdGUgPSBsZWQtPmVuYWJsZWQ7 Cj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGlu dCBxY29tX2ZsYXNoX2ZhdWx0X2dldChzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoID4KPiA+ICpm bGVkX2NkZXYsIHUzMiAqZmF1bHQpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHFj b21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxlZF9jZGV2LCBzdHJ1Y3QKPiA+ID4g cWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2Zs YXNoX2NoaXAgKmNoaXAgPSBsZWQtPmNoaXA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBzaGlmdCwg Y2hhbl9pZCA9IDAsIGNoYW5fbWFzayA9IDA7Cj4gPiArwqDCoMKgwqDCoMKgwqB1OCBvdF9tYXNr ID0gMCwgb2NfbWFzayA9IDAsIHV2X21hc2sgPSAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIHZh bCwgZmF1bHRfc3RzID0gMDsKPiA+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByYzsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX2ZpZWxkX3JlYWQoY2hpcC0+cl9maWVsZHNbUkVH X1NUQVRVUzFdLCAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgZm9yIChpID0gMDsgaSA8IGxlZC0+Y2hhbl9jb3VudDsgaSsrKSB7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaGlmdCA9IChjaGFuX2lkIC0gMSkgKiAyOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBCSVQoc2hpZnQpKQo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9z dHMgfD0gTEVEX0ZBVUxUX1NIT1JUX0NJUkNVSVQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgY2hhbl9tYXNrIHw9IEJJVChjaGFuX2lkIC0gMSk7Cj4gPiArwqDCoMKgwqDCoMKg wqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHJlZ21hcF9maWVsZF9yZWFkKGNoaXAt PnJfZmllbGRzW1JFR19TVEFUVVMyXSwgJnZhbCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMg PCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ICsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjaGlwLT5od190eXBlID09IFFDT01fTVZGTEFTSF8zQ0gp IHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvdF9tYXNrID0gMHgwZjsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBvY19tYXNrID0gMHhlMDsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB1dl9tYXNrID0gMHgxMDsKPiA+ICvCoMKgwqDCoMKg wqDCoH0gZWxzZSBpZiAoY2hpcC0+aHdfdHlwZSA9PSBRQ09NX01WRkxBU0hfNENIKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb3RfbWFzayA9IDB4NzA7Cj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgb2NfbWFzayA9IDB4MGU7Cj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgdXZfbWFzayA9IDB4MDE7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqBpZiAodmFsICYgb3RfbWFzaykKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX09WRVJfVEVNUEVSQVRV UkU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAodmFsICYgb2NfbWFzaykKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX09WRVJfQ1VSUkVOVDsK PiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiB1dl9tYXNrKQo+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGZhdWx0X3N0cyB8PSBMRURfRkFVTFRfSU5QVVRfVk9MVEFHRTsKPiA+ ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX2ZpZWxkX3JlYWQoY2hpcC0+cl9maWVs ZHNbUkVHX1NUQVRVUzNdLCAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gKwo+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKGNoaXAtPmh3X3R5cGUgPT0gUUNPTV9NVkZMQVNIXzNDSCkgewo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBjaGFuX21hc2spCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhdWx0X3N0cyB8 PSBMRURfRkFVTFRfVElNRU9VVDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoY2hpcC0+ aHdfdHlwZSA9PSBRQ09NX01WRkxBU0hfNENIKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxlZC0+Y2hhbl9jb3VudDsgaSsrKSB7Cj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5faWQgPSBsZWQt PmNoYW5faWRbaV07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHNoaWZ0ID0gKGNoYW5faWQgLSAxKSAqIDI7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBCSVQoc2hpZnQpKQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgZmF1bHRfc3RzIHw9IExFRF9GQVVMVF9USU1FT1VUOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoH0KPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoCpmYXVsdCA9IGZhdWx0X3N0czsKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4g K30KPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfbGVkX2JyaWdodG5lc3Nfc2V0KHN0 cnVjdCBsZWRfY2xhc3NkZXYgPgo+ID4gKmxlZF9jZGV2LAo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGVudW0gbGVkX2JyaWdodG5lc3MgPgo+ID4gYnJpZ2h0bmVzcykKPiA+ICt7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGVkX2NkZXYgPQo+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRhaW5lcl9vZihsZWRfY2Rldiwgc3RydWN0 IGxlZF9jbGFzc2Rldl9mbGFzaCwgPgo+ID4gbGVkX2NkZXYpOwo+ID4gK8KgwqDCoMKgwqDCoMKg c3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCwgPgo+ ID4gZmxhc2gpOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGN1cnJlbnRfbWEgPSBicmlnaHRuZXNz ICogbGVkLT5tYXhfdG9yY2hfY3VycmVudF9tYSAvID4KPiA+IExFRF9GVUxMOwo+ID4gK8KgwqDC oMKgwqDCoMKgYm9vbCBlbmFibGUgPSAhIWJyaWdodG5lc3M7Cj4gPiArwqDCoMKgwqDCoMKgwqBp bnQgcmM7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF9jdXJyZW50KGxl ZCwgY3VycmVudF9tYSwgVE9SQ0hfTU9ERSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAw KQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoC8qIGRpc2FibGUgZmxhc2ggdGltZW91dCBmb3IgdG9yY2ggTEVEICov Cj4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF90aW1lb3V0KGxlZCwgMCk7Cj4gPiAr wqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHJldHVybiByYzsKPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gc2V0X2ZsYXNoX21v ZHVsZV9lbihsZWQsIGVuYWJsZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ICsKPiA+ICvCoMKg wqDCoMKgwqDCoHJldHVybiBzZXRfZmxhc2hfc3Ryb2JlKGxlZCwgU1dfU1RST0JFLCBlbmFibGUp Owo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qgc3RydWN0IGxlZF9mbGFzaF9vcHMgcWNv bV9mbGFzaF9vcHMgPSB7Cj4gPiArwqDCoMKgwqDCoMKgwqAuZmxhc2hfYnJpZ2h0bmVzc19zZXQg PSBxY29tX2ZsYXNoX2JyaWdodG5lc3Nfc2V0LAo+ID4gK8KgwqDCoMKgwqDCoMKgLnN0cm9iZV9z ZXQgPSBxY29tX2ZsYXNoX3N0cm9iZV9zZXQsCj4gPiArwqDCoMKgwqDCoMKgwqAuc3Ryb2JlX2dl dCA9IHFjb21fZmxhc2hfc3Ryb2JlX2dldCwKPiA+ICvCoMKgwqDCoMKgwqDCoC50aW1lb3V0X3Nl dCA9IHFjb21fZmxhc2hfdGltZW91dF9zZXQsCj4gPiArwqDCoMKgwqDCoMKgwqAuZmF1bHRfZ2V0 ID0gcWNvbV9mbGFzaF9mYXVsdF9nZXQsCj4gPiArfTsKPiA+ICsKPiA+ICsjaWYgSVNfRU5BQkxF RChDT05GSUdfVjRMMl9GTEFTSF9MRURfQ0xBU1MpCj4gPiArc3RhdGljIGludCBxY29tX2ZsYXNo X2V4dGVybmFsX3N0cm9iZV9zZXQoc3RydWN0IHY0bDJfZmxhc2ggPgo+ID4gKnY0bDJfZmxhc2gs IGJvb2wgZW5hYmxlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfY2xhc3Nk ZXZfZmxhc2ggKmZsYXNoID0gdjRsMl9mbGFzaC0+ZmxlZF9jZGV2Owo+ID4gK8KgwqDCoMKgwqDC oMKgc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxhc2gsIHN0cnVj dCA+Cj4gPiBxY29tX2ZsYXNoX2xlZCwgZmxhc2gpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJj Owo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBzZXRfZmxhc2hfbW9kdWxlX2VuKGxlZCwg ZW5hYmxlKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KGVuYWJsZSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X2Zs YXNoX3N0cm9iZShsZWQsIEhXX1NUUk9CRSwgdHJ1ZSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBlbHNl Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHNldF9mbGFzaF9zdHJv YmUobGVkLCBTV19TVFJPQkUsIGZhbHNlKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGVudW0g bGVkX2JyaWdodG5lc3MgcWNvbV9mbGFzaF9pbnRlbnNpdHlfdG9fbGVkX2JyaWdodG5lc3MoCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHY0bDJfZmxhc2ggKnY0bDJf Zmxhc2gsIHMzMiBpbnRlbnNpdHkpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxl ZF9jbGFzc2Rldl9mbGFzaCAqZmxhc2ggPSB2NGwyX2ZsYXNoLT5mbGVkX2NkZXY7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihmbGFz aCwgc3RydWN0ID4KPiA+IHFjb21fZmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiArwqDCoMKgwqDCoMKg wqB1MzIgY3VycmVudF9tYSA9IGludGVuc2l0eSAvIDEwMDA7Cj4gPiArCj4gPiArwqDCoMKgwqDC oMKgwqBjdXJyZW50X21hID0gbWluX3QodTMyLCBjdXJyZW50X21hLCA+IGxlZC0KPiA+ID5tYXhf dG9yY2hfY3VycmVudF9tYSk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWN1cnJlbnRfbWEpCj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIExFRF9PRkY7Cj4gPiArCj4g PiArwqDCoMKgwqDCoMKgwqByZXR1cm4gY3VycmVudF9tYSAqIExFRF9GVUxMIC8gbGVkLT5tYXhf dG9yY2hfY3VycmVudF9tYTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIHMzMiBxY29tX2ZsYXNo X2JyaWdodG5lc3NfdG9fbGVkX2ludGVuc2l0eShzdHJ1Y3QKPiA+IHY0bDJfZmxhc2ggPiAqdjRs Ml9mbGFzaCwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBlbnVtIGxlZF9icmlnaHRuZXNzID4K PiA+IGJyaWdodG5lc3MpCj4gPiArewo+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9jbGFz c2Rldl9mbGFzaCAqZmxhc2ggPSB2NGwyX2ZsYXNoLT5mbGVkX2NkZXY7Cj4gPiArwqDCoMKgwqDC oMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihmbGFzaCwgc3Ry dWN0ID4KPiA+IHFjb21fZmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqByZXR1cm4gKGJyaWdodG5lc3MgKiBsZWQtPm1heF90b3JjaF9jdXJyZW50X21hICogMTAwMCkg LyA+Cj4gPiBMRURfRlVMTDsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2 NGwyX2ZsYXNoX29wcyBxY29tX3Y0bDJfZmxhc2hfb3BzID0gewo+ID4gK8KgwqDCoMKgwqDCoMKg LmV4dGVybmFsX3N0cm9iZV9zZXQgPSBxY29tX2ZsYXNoX2V4dGVybmFsX3N0cm9iZV9zZXQsCj4g PiArwqDCoMKgwqDCoMKgwqAuaW50ZW5zaXR5X3RvX2xlZF9icmlnaHRuZXNzID0gPgo+ID4gcWNv bV9mbGFzaF9pbnRlbnNpdHlfdG9fbGVkX2JyaWdodG5lc3MsCj4gPiArwqDCoMKgwqDCoMKgwqAu bGVkX2JyaWdodG5lc3NfdG9faW50ZW5zaXR5ID0gPgo+ID4gcWNvbV9mbGFzaF9icmlnaHRuZXNz X3RvX2xlZF9pbnRlbnNpdHksCj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxh c2hfdjRsMl9pbml0KHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLCBzdHJ1Y3QKPiA+ID4gZndu b2RlX2hhbmRsZSAqZndub2RlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCB2NGwy X2ZsYXNoX2NvbmZpZyB2NGwyX2NmZyA9IHswfTsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBs ZWRfZmxhc2hfc2V0dGluZyAqcyA9ICZ2NGwyX2NmZy5pbnRlbnNpdHk7Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoIShsZWQtPmZsYXNoLmxlZF9jZGV2LmZsYWdzICYgTEVEX0RFVl9DQVBf RkxBU0gpKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4g Kwo+ID4gK8KgwqDCoMKgwqDCoMKgcy0+bWluID0gcy0+c3RlcCA9IFRPUkNIX0lSRVNfVUEgKiBs ZWQtPmNoYW5fY291bnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBzLT5tYXggPSBsZWQtPm1heF90b3Jj aF9jdXJyZW50X21hICogMTAwMDsKPiA+ICvCoMKgwqDCoMKgwqDCoHMtPnZhbCA9IG1pbl90KHUz Miwgcy0+bWF4LCBUT1JDSF9DVVJSRU5UX0RFRkFVTFRfVUEpOwo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgc3Ryc2NweSh2NGwyX2NmZy5kZXZfbmFtZSwgPiBsZWQtPmZsYXNoLmxlZF9jZGV2LmRl di0KPiA+ID5rb2JqLm5hbWUsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2l6ZW9mKHY0bDJf Y2ZnLmRldl9uYW1lKSk7Cj4gPiArwqDCoMKgwqDCoMKgwqB2NGwyX2NmZy5oYXNfZXh0ZXJuYWxf c3Ryb2JlID0gMTsKPiA+ICvCoMKgwqDCoMKgwqDCoHY0bDJfY2ZnLmZsYXNoX2ZhdWx0cyA9IExF RF9GQVVMVF9JTlBVVF9WT0xUQUdFIHwgPgo+ID4gTEVEX0ZBVUxUX09WRVJfQ1VSUkVOVCB8Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgTEVEX0ZBVUxUX1NIT1JUX0NJUkNVSVQg fAo+ID4gTEVEX0ZBVUxUX09WRVJfVEVNUEVSQVRVUkUgPiB8IExFRF9GQVVMVF9USU1FT1VUOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbGVkLT52NGwyX2ZsYXNoID0gdjRsMl9mbGFzaF9pbml0 KGxlZC0+Y2hpcC0+ZGV2LCBmd25vZGUsID4KPiA+ICZsZWQtPmZsYXNoLAo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCZxY29tX3Y0bDJfZmxhc2hfb3BzLCA+Cj4gPiAmdjRsMl9jZmcpOwo+ID4g K8KgwqDCoMKgwqDCoMKgcmV0dXJuIFBUUl9FUlJfT1JfWkVSTyhsZWQtPnY0bDJfZmxhc2gpOwo+ ID4gK30KPiA+ICsjIGVsc2UKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfdjRsMl9pbml0KHN0 cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLCBzdHJ1Y3QKPiA+ID4gZndub2RlX2hhbmRsZSAqZndu b2RlKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsjZW5k aWYKPiA+ICsKPiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfcmVnaXN0ZXJfbGVkX2RldmljZShz dHJ1Y3QgZGV2aWNlICpwYXJlbnQsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg c3RydWN0IGZ3bm9kZV9oYW5kbGUgKm5vZGUsIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCA+Cj4gPiAq bGVkKQo+ID4gK3sKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNo aXAgPSBsZWQtPmNoaXA7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2luaXRfZGF0YSBp bml0X2RhdGE7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpm bGFzaDsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfZmxhc2hfc2V0dGluZyAqczsKPiA+ ICvCoMKgwqDCoMKgwqDCoHUzMiBjb3VudCwgdmFsOwo+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGNo YW5uZWxzWzRdOwo+ID4gK8KgwqDCoMKgwqDCoMKgaW50IGksIHJjOwo+ID4gKwo+ID4gK8KgwqDC oMKgwqDCoMKgZmxhc2ggPSAmbGVkLT5mbGFzaDsKPiA+ICvCoMKgwqDCoMKgwqDCoGNvdW50ID0g Zndub2RlX3Byb3BlcnR5X2NvdW50X3UzMihub2RlLCAibGVkLXNvdXJjZXMiKTsKPiA+ICvCoMKg wqDCoMKgwqDCoGlmIChjb3VudCA8PSAwKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJObyBsZWQtc291cmNlcyBzcGVjaWZpZWRcbiIpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOwo+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGNvdW50ID4gY2hpcC0+ bWF4X2NoYW5uZWxzKSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vy cihjaGlwLT5kZXYsICJsZWQtc291cmNlcyBjb3VudCAldSBleGNlZWRzID4KPiA+IG1heGltdW0g Y2hhbm5lbCBjb3VudCAldVxuIiwKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvdW50LCBjaGlwLT5tYXhfY2hhbm5lbHMp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4g K8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBmd25vZGVfcHJv cGVydHlfcmVhZF91MzJfYXJyYXkobm9kZSwgImxlZC1zb3VyY2VzIiwgPgo+ID4gY2hhbm5lbHMs IGNvdW50KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGNoaXAtPmRldiwgImdldCBsZWQtc291cmNlcyBm YWlsZWQsCj4gPiByYz0lZFxuIiwgPiByYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKg wqDCoMKgbGVkLT5jaGFuX2NvdW50ID0gY291bnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPmNo YW5faWQgPSBkZXZtX2tjYWxsb2MoY2hpcC0+ZGV2LCBjb3VudCwgc2l6ZW9mKHU4KSwgPgo+ID4g R0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxlZC0+Y2hhbl9pZCkKPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVOT01FTTsKPiA+ICsKPiA+ICvC oMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKGNoYW5uZWxzW2ldID4gY2hpcC0+bWF4X2NoYW5uZWxz KSB7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRl dl9lcnIoY2hpcC0+ZGV2LCAibGVkLXNvdXJjZSBvdXQgb2YgSFcgPgo+ID4gc3VwcG9ydCByYW5n ZSBbMS0ldV1cbiIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+bWF4X2NoYW5uZWxz KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIC1FSU5WQUw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC0+Y2hhbl9pZFtpXSA9IGNoYW5u ZWxzW2ldOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMg PSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImxlZC1tYXgtbWljcm9hbXAiLCA+Cj4g PiAmdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGNoaXAtPmRldiwgIkdldCBsZWQtbWF4LW1pY3Jv YW1wIGZhaWxlZCwgPgo+ID4gcmM9JWRcbiIsIHJjKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBpZiAoIXZhbCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oGRldl9lcnIoY2hpcC0+ZGV2LCAibGVkLW1heC1taWNyb2FtcCBzaG91bGRuJ3QgYmUgPgo+ID4g MFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7 Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqB2YWwgPSBtaW5f dCh1MzIsIHZhbCwgVE9SQ0hfQ1VSUkVOVF9NQVhfVUEgKiA+IGxlZC0KPiA+ID5jaGFuX2NvdW50 KTsKPiA+ICvCoMKgwqDCoMKgwqDCoGxlZC0+bWF4X3RvcmNoX2N1cnJlbnRfbWEgPSB2YWwgLyAx MDAwOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGZ3bm9kZV9wcm9wZXJ0eV9wcmVzZW50 KG5vZGUsICJmbGFzaC1tYXgtbWljcm9hbXAiKSkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGZsYXNoLT5sZWRfY2Rldi5mbGFncyB8PSBMRURfREVWX0NBUF9GTEFTSDsKPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9yZWFk X3UzMihub2RlLCA+ICJmbGFzaC1tYXgtCj4gPiBtaWNyb2FtcCIsICZ2YWwpOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJHZXQg Zmxhc2gtbWF4LW1pY3JvYW1wCj4gPiA+IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBtaW5fdCh1MzIsIHZhbCwgRkxBU0hfQ1VSUkVOVF9NQVhf VUEgKiA+IGxlZC0KPiA+ID5jaGFuX2NvdW50KTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2YWwgPSBtaW5fdCh1MzIsIHZhbCwgRkxBU0hfVE9UQUxfQ1VSUkVOVF9NQVhfVUEp Owo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMgPSAmZmxhc2gtPmJyaWdodG5l c3M7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bWluID0gcy0+c3RlcCA9 IEZMQVNIX0lSRVNfVUEgKiBsZWQtPmNoYW5fY291bnQ7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcy0+bWF4ID0gdmFsOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHMtPnZhbCA9IG1pbl90KHUzMiwgdmFsLCBGTEFTSF9DVVJSRU5UX0RFRkFVTFRfVUEpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC0+bWF4X2ZsYXNoX2N1cnJlbnRf bWEgPSB2YWwgLyAxMDAwOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC0+ Zmxhc2hfY3VycmVudF9tYSA9IHMtPnZhbCAvIDEwMDA7Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgPiAi Zmxhc2gtbWF4LQo+ID4gdGltZW91dC11cyIsICZ2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJHZXQgZmxhc2gtbWF4LXRp bWVvdXQtCj4gPiB1cyA+IGZhaWxlZCwgcmM9JWRcbiIsIHJjKTsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2YWwgPSBtaW5fdCh1MzIsIHZhbCwgRkxBU0hfVElNRU9VVF9NQVhfVVMpOwo+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMgPSAmZmxhc2gtPnRpbWVvdXQ7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bWluID0gcy0+c3RlcCA9IEZMQVNIX1RJ TUVPVVRfU1RFUF9VUzsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT52YWwg PSBzLT5tYXggPSB2YWw7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLT5t YXhfdGltZW91dF9tcyA9IGxlZC0+Zmxhc2hfdGltZW91dF9tcyA9IHZhbCAvCj4gPiA+IDEwMDA7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmxhc2gtPm9wcyA9ICZx Y29tX2ZsYXNoX29wczsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKg wqDCoGZsYXNoLT5sZWRfY2Rldi5icmlnaHRuZXNzX3NldF9ibG9ja2luZyA9ID4KPiA+IHFjb21f Zmxhc2hfbGVkX2JyaWdodG5lc3Nfc2V0Owo+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdF9kYXRhLmZ3 bm9kZSA9IG5vZGU7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbml0X2RhdGEuZGV2aWNlbmFtZSA9IE5V TEw7Cj4gPiArwqDCoMKgwqDCoMKgwqBpbml0X2RhdGEuZGVmYXVsdF9sYWJlbCA9IE5VTEw7Cj4g PiArwqDCoMKgwqDCoMKgwqBpbml0X2RhdGEuZGV2bmFtZV9tYW5kYXRvcnkgPSBmYWxzZTsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJjID0gZGV2bV9sZWRfY2xhc3NkZXZfZmxhc2hfcmVnaXN0ZXJfZXh0 KHBhcmVudCwgZmxhc2gsID4KPiA+ICZpbml0X2RhdGEpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hp cC0+ZGV2LCAiUmVnaXN0ZXIgZmxhc2ggTEVEIGNsYXNzZGV2ID4KPiA+IGZhaWxlZCwgcmM9JWRc biIsIHJjKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4g PiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcWNvbV9m bGFzaF92NGwyX2luaXQobGVkLCBub2RlKTsKPiA+ICt9Cj4gPiArCj4gPiArc3RhdGljIGludCBx Y29tX2ZsYXNoX2xlZF9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+ID4gK3sK PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNoaXA7Cj4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZDsKPiA+ICvCoMKgwqDCoMKgwqDC oHN0cnVjdCBmd25vZGVfaGFuZGxlICpjaGlsZDsKPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBk ZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFw ICptYXA7Cj4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnX2ZpZWxkICpyZWdzOwo+ID4gK8Kg wqDCoMKgwqDCoMKgaW50IGNvdW50LCBpLCByYzsKPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiB2YWws IHJlZ19iYXNlOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hpcCA9IGRldm1fa3phbGxvYyhk ZXYsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFj aGlwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PTUVNOwo+ ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgbWFwID0gZGV2X2dldF9yZWdtYXAoZGV2LT5wYXJlbnQs IE5VTEwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFtYXApIHsKPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcGFyZW50IHJlZ21h cFxuIik7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7 Cj4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9k ZV9wcm9wZXJ0eV9yZWFkX3UzMihkZXYtPmZ3bm9kZSwgInJlZyIsCj4gPiAmcmVnX2Jhc2UpOwo+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiRmFpbGVkIHRvIGdldCByZWdpc3RlciBiYXNlIGFkZHJl c3MsCj4gPiA+IHJjPSVkXG4iLCByYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgcmV0dXJuIHJjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDC oMKgcmMgPSByZWdtYXBfcmVhZChtYXAsIHJlZ19iYXNlICsgRkxBU0hfVFlQRV9SRUcsICZ2YWwp Owo+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiUmVhZCBmbGFzaCBtb2R1bGUgdHlwZSBmYWlsZWQs ID4KPiA+IHJjPSVkXG4iLCByYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIHJjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKHZhbCAhPSBGTEFTSF9UWVBFX1ZBTCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIoZGV2LCAidHlwZSAlI3ggaXMgbm90IGEgZmxhc2ggbW9kdWxlXG4iLCA+ Cj4gPiB2YWwpOwo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5P REVWOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBy ZWdtYXBfcmVhZChtYXAsIHJlZ19iYXNlICsgRkxBU0hfU1VCVFlQRV9SRUcsICZ2YWwpOwo+ID4g K8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGRldl9lcnIoZGV2LCAiUmVhZCBmbGFzaCBtb2R1bGUgc3VidHlwZSBmYWlsZWQsID4K PiA+IHJjPSVkXG4iLCByYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0 dXJuIHJjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHZhbCA9PSBGTEFTSF9TVUJUWVBFXzNDSF9WQUwpIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBjaGlwLT5od190eXBlID0gUUNPTV9NVkZMQVNIXzNDSDsKPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjaGlwLT5tYXhfY2hhbm5lbHMgPSAzOwo+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJlZ3MgPSBtdmZsYXNoXzNjaF9yZWdzOwo+ID4gK8Kg wqDCoMKgwqDCoMKgfSBlbHNlIGlmICh2YWwgPT0gRkxBU0hfU1VCVFlQRV80Q0hfVkFMKSB7Cj4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+aHdfdHlwZSA9IFFDT01fTVZG TEFTSF80Q0g7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+bWF4X2No YW5uZWxzID0gNDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZWdzID0gbXZm bGFzaF80Y2hfcmVnczsKPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSB7Cj4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJmbGFzaCBzdWJ0eXBlICUjeCBpcyBu b3QgeWV0ID4KPiA+IHN1cHBvcnRlZFxuIiwgdmFsKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBSRUdfTUFYX0NPVU5UOyBpKyspCj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVnc1tpXS5yZWcgKz0gcmVnX2Jhc2U7Cj4g PiArCj4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGRldm1fcmVnbWFwX2ZpZWxkX2J1bGtfYWxsb2Mo ZGV2LCBtYXAsIGNoaXAtPnJfZmllbGRzLAo+ID4gPiByZWdzLCBSRUdfTUFYX0NPVU5UKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApIHsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBkZXZfZXJyKGRldiwgImZhaWxlZCB0byBhbGxvYyByZWdtYXAgZmlsZWQsCj4gPiBy Yz0lZFxuIiwgPiByYyk7Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJu IHJjOwo+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgY2hpcC0+ ZGV2ID0gZGV2Owo+ID4gK8KgwqDCoMKgwqDCoMKgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwg Y2hpcCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9pbml0KCZjaGlwLT5sb2NrKTsKPiA+ICvC oMKgwqDCoMKgwqDCoGNvdW50ID0gZGV2aWNlX2dldF9jaGlsZF9ub2RlX2NvdW50KGRldik7Cj4g PiArwqDCoMKgwqDCoMKgwqBpZiAoY291bnQgPT0gMCB8fCBjb3VudCA+IGNoaXAtPm1heF9jaGFu bmVscykgewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAi Tm8gY2hpbGQgb3IgY2hpbGQgY291bnQgZXhjZWVkcwo+ID4gJWRcbiIsID4gY2hpcC0+bWF4X2No YW5uZWxzKTsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVJTlZB TDsKPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ICsKPiA+ICvCoMKgwqDCoMKgwqDCoGNoaXAtPmxl ZHMgPSBkZXZtX2tjYWxsb2MoZGV2LCBjb3VudCwgc2l6ZW9mKCpjaGlwLT5sZWRzKSwKPiA+ID4g R0ZQX0tFUk5FTCk7Cj4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWNoaXAtPmxlZHMpCj4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiArCj4gPiArwqDC oMKgwqDCoMKgwqBkZXZpY2VfZm9yX2VhY2hfY2hpbGRfbm9kZShkZXYsIGNoaWxkKSB7Cj4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkID0gJmNoaXAtPmxlZHNbY2hpcC0+bGVk c19jb3VudF07Cj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLT5jaGlwID0g Y2hpcDsKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IHFjb21fZmxhc2hf cmVnaXN0ZXJfbGVkX2RldmljZShkZXYsIGNoaWxkLAo+ID4gbGVkKTsKPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBnb3RvIHJlbGVhc2U7Cj4gPiArCj4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+bGVkc19jb3VudCsrOwo+ID4gK8KgwqDCoMKg wqDCoMKgfQo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiArcmVsZWFzZToK PiA+ICvCoMKgwqDCoMKgwqDCoHdoaWxlIChjaGlwLT5sZWRzICYmIGNoaXAtPmxlZHNfY291bnQt LSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2NGwyX2ZsYXNoX3JlbGVhc2Uo Y2hpcC0+bGVkc1tjaGlwLQo+ID4gPmxlZHNfY291bnRdLnY0bDJfPiBmbGFzaCk7Cj4gPiArwqDC oMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiArfQo+ID4gKwo+ID4gK3N0YXRpYyBpbnQgcWNvbV9m bGFzaF9sZWRfcmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiArewo+ID4g K8KgwqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfY2hpcCAqY2hpcCA9IHBsYXRmb3JtX2dl dF9kcnZkYXRhKHBkZXYpOwo+ID4gKwo+ID4gK8KgwqDCoMKgwqDCoMKgd2hpbGUgKGNoaXAtPmxl ZHNfY291bnQtLSkKPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2NGwyX2ZsYXNo X3JlbGVhc2UoY2hpcC0+bGVkc1tjaGlwLQo+ID4gPmxlZHNfY291bnRdLnY0bDJfPiBmbGFzaCk7 Cj4gPiArCj4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9kZXN0cm95KCZjaGlwLT5sb2NrKTsKPiA+ ICvCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ID4gK30KPiA+ICsKPiA+ICtzdGF0aWMgY29uc3Qg c3RydWN0IG9mX2RldmljZV9pZCBxY29tX2ZsYXNoX2xlZF9tYXRjaF90YWJsZVtdID0gewo+ID4g K8KgwqDCoMKgwqDCoMKgeyAuY29tcGF0aWJsZSA9ICJxY29tLHNwbWktZmxhc2gtbGVkIiB9LAo+ ID4gK8KgwqDCoMKgwqDCoMKgeyB9Cj4gPiArfTsKPiA+ICsKPiA+ICtzdGF0aWMgc3RydWN0IHBs YXRmb3JtX2RyaXZlciBxY29tX2ZsYXNoX2xlZF9kcml2ZXIgPSB7Cj4gPiArwqDCoMKgwqDCoMKg wqAuZHJpdmVyID0gewo+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC5uYW1lID0g ImxlZHMtcWNvbS1mbGFzaCIsCj4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9m X21hdGNoX3RhYmxlID0gcWNvbV9mbGFzaF9sZWRfbWF0Y2hfdGFibGUsCj4gPiArwqDCoMKgwqDC oMKgwqB9LAo+ID4gK8KgwqDCoMKgwqDCoMKgLnByb2JlID0gcWNvbV9mbGFzaF9sZWRfcHJvYmUs Cj4gPiArwqDCoMKgwqDCoMKgwqAucmVtb3ZlID0gcWNvbV9mbGFzaF9sZWRfcmVtb3ZlLAo+ID4g K307Cj4gPiArCj4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihxY29tX2ZsYXNoX2xlZF9kcml2 ZXIpOwo+ID4gKwo+ID4gK01PRFVMRV9ERVNDUklQVElPTigiUUNPTSBGbGFzaCBMRUQgZHJpdmVy Iik7Cj4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwoKS2luZCByZWdhcmRzLApEeWxhbiBWYW4g QXNzY2hlCg==