Received: by 2002:a05:6358:111d:b0:dc:6189:e246 with SMTP id f29csp2744701rwi; Tue, 1 Nov 2022 11:11:18 -0700 (PDT) X-Google-Smtp-Source: AMsMyM4d5AiIOSW8pD59TOeiU5axdIi4FjIyNe/j/18AdzTujfF5FBUsDH9wv1nKMso5eML8+oTE X-Received: by 2002:a17:903:1112:b0:178:a030:5f72 with SMTP id n18-20020a170903111200b00178a0305f72mr20828485plh.12.1667326278139; Tue, 01 Nov 2022 11:11:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1667326278; cv=none; d=google.com; s=arc-20160816; b=wQZroEb0S/T+MT3KAH3mnfhbqRvqghNDCQkS0JL4MBKjZ9Fc395pUWrSww4aa9dUQR q4blggTpvSwpGRzy8d7NNDo5YbFUwXh4bBgpQHgOvhcLDonGNNXAZnDi7JktTbZI0CA1 4gWtHj2tMFG9sl/pmscX8ssBDKGK8Zrpy8APGIdE6IEueQZs5TtKKjuH//jyPfDix0qD bMmqjPN6XzLAA0gjsD+mwHPVnEvACPQlOfpAu46QgXcSBYNeYbWCWBO7w2raxTiFaFXr 4pQ8QCwwop1N/Opu/G69YmhdbX8s8EzanPp0l9oElJXGQvdOoE5qXWfG/gZp7r0+JRyC I99g== 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=rCt5qDnGpxrTPPyV2WSb7XJm5vx1TPddJDroc7tQcXQ=; b=Yv2RtJOxkQleexQlFzc28c3yO7FGRayhUejDLKSMNcY9TMQBQv0jB2CXKrYH+B0Url WGTsE2dM8w8r+vuh1BzLOyhDtKCV+fH/7nxjJh0aHXJ7Kpktvn4DcbLN/wXjtTMay0nF f2IfzF1I+BS8MCcMaK7bPn5igjMWuCpLEW4CZJnx5RhhcEBpWtY5zz38MnYiu9FdEid0 rDzzTaIHQ9pTnEbh+P58dvFkF3iUf8zObN8qO9RsHLnvSmW3Sle3WmgD1545dqO7p7gu oBXqva5dtS81ha7wDZ0FHxWTnzYYqf7o7JpHDs5eL0hqAJGkjU0Ibej9nry4PvRyCBpw BsFg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@dylanvanassche.be header.s=MBO0001 header.b="YG/Ue/Ex"; 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 nm22-20020a17090b19d600b0020a1c6bb23csi11751132pjb.74.2022.11.01.11.11.05; Tue, 01 Nov 2022 11:11:18 -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="YG/Ue/Ex"; 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 S231189AbiKARjq (ORCPT + 96 others); Tue, 1 Nov 2022 13:39:46 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40294 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231196AbiKARjo (ORCPT ); Tue, 1 Nov 2022 13:39:44 -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 0E0DC1CB00; Tue, 1 Nov 2022 10:39:35 -0700 (PDT) Received: from smtp2.mailbox.org (smtp2.mailbox.org [10.196.197.2]) (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 4N1y2D25gWz9sq5; Tue, 1 Nov 2022 18:39:32 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=dylanvanassche.be; s=MBO0001; t=1667324372; 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=rCt5qDnGpxrTPPyV2WSb7XJm5vx1TPddJDroc7tQcXQ=; b=YG/Ue/Ex3zZTg3AEkPMbCTpIyyrxoSd3b+U07aapLmxqN4E8Hq4CpPq/7IbVUv1drCo6Tq kL+txzxD1o88xf4rsQZSGeszXVHXSH1almEqKykNSG3aHdQgjeP52zCUvcvQz1DaHAtv6z G+qvRv99WeVJSWJC6z6N0U3pnXdx9M2ZC3WY8lfwm71Zx+mW3YEiEJiDOJgh6vhEWdCmlS BDlXourovpRVt16nIB696w8td0nXN+w/8x5ZqBkmtxvzslz1bZ1a/adoxECBTUjxCjsMk5 PQ0/V+NSiztvG7shNtwAvlGnKrWt3xuXtiAyQ1iwRnZICQENpd3CGIfdbjU8ww== Message-ID: 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: Tue, 01 Nov 2022 18:39:29 +0100 In-Reply-To: <578b6d6c-7a66-949c-c18f-3a962f9d37ff@quicinc.com> References: <20221025073802.2662564-1-quic_fenglinw@quicinc.com> <20221025073802.2662564-2-quic_fenglinw@quicinc.com> <0212be2972991ef2803c7f92c01217443def3dfd.camel@dylanvanassche.be> <578b6d6c-7a66-949c-c18f-3a962f9d37ff@quicinc.com> Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: base64 MIME-Version: 1.0 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 CkhpIEZlbmdsaW4sCgo+IE9uIDIwMjIvMTAvMzEgMTg6MzQsIER5bGFuIFZhbiBBc3NjaGUgd3Jv dGU6Cj4gPiAKPiA+IEhpIEZlbmdsaW4sCj4gPiAKPiA+IFRoYW5rcyBmb3Igc3VibWl0dGluZyB0 aGVzZSBwYXRjaGVzISBUaGV5IGFyZSByZWFsbHkgbmljZSEKPiA+IEkgdGVzdGVkIHRoZXNlIHBh dGNoZXMgb24gYW4gU0RNODQ1IGJhc2VkIGRldmljZSBhcyB0aGUgZG93bnN0cmVhbQo+ID4gZHJp dmVyIGlzIHRoZSBzYW1lIGZvciB0aGUgUE1JODk5OCBjb21wYXJlZCB0byB0aGUgbWVudGlvbmVk IFBNSUNzCj4gPiBpbgo+ID4gdGhpcyBwYXRjaHNlcmllcy4KPiA+IAo+ID4gVGVzdGVkLWJ5OiBE eWxhbiBWYW4gQXNzY2hlIDxtZUBkeWxhbnZhbmFzc2NoZS5iZT4gIyBzZG04NDUtc2hpZnQtCj4g PiBheG9sb3RsICsgcG1pODk5OAo+ID4gCj4gVGhhbmtzIGZvciB0ZXN0aW5nIHRoZSBwYXRjaCBh dCB5b3VyIHNpZGUsIER5bGFuIQo+IAo+ID4gPiA+IEFkZCBpbml0aWFsIGRyaXZlciB0byBzdXBw b3J0IGZsYXNoIExFRCBtb2R1bGUgZm91bmQgaW4KPiA+ID4gPiBRdWFsY29tbQo+ID4gPiA+IFRl Y2hub2xvZ2llcywgSW5jLiBQTUlDcy4gVGhlIGZsYXNoIG1vZHVsZSBjYW4gaGF2ZSAzIG9yIDQK PiA+ID4gPiBjaGFubmVscwo+ID4gPiA+IGFuZCBlYWNoIGNoYW5uZWwgY2FuIGJlIGNvbnRyb2xs ZWQgaW5kZXBlZGVudGx5IGFuZCBzdXBwb3J0Cj4gPiA+ID4gZnVsbCA+Cj4gPiA+ID4gc2NhbGUK PiA+ID4gPiBjdXJyZW50IHVwIHRvIDEuNSBBLiBJdCBhbHNvIHN1cHBvcnRzIGNvbm5lY3Rpbmcg dHdvIGNoYW5uZWxzID4KPiA+ID4gPiB0b2dldGhlcgo+ID4gPiA+IHRvIHN1cHBseSBvbmUgTEVE IGNvbXBvbmVudCB3aXRoIGZ1bGwgc2NhbGUgY3VycmVudCB1cCB0byAyIEEuCj4gPiA+ID4gSW4g Pgo+ID4gPiA+IHRoYXQKPiA+ID4gPiBjYXNlLCB0aGUgY3VycmVudCB3aWxsIGJlIHNwbGl0IG9u IGVhY2ggY2hhbm5lbCBzeW1tZXRyaWNhbGx5Cj4gPiA+ID4gYW5kCj4gPiA+ID4gdGhlCj4gPiA+ ID4gY2hhbm5lbHMgd2lsbCBiZSBlbmFibGVkIGFuZCBkaXNhYmxlZCBhdCB0aGUgc2FtZSB0aW1l Lgo+ID4gPiA+IAo+ID4gPiA+IFNpZ25lZC1vZmYtYnk6IEZlbmdsaW4gV3UgPHF1aWNfZmVuZ2xp bndAcXVpY2luYy5jb20+Cj4gPiA+ID4gVGVzdGVkLWJ5OiBMdWNhIFdlaXNzIDxsdWNhLndlaXNz QGZhaXJwaG9uZS5jb20+ICMgPiBzbTcyMjUtCj4gPiA+ID4gZmFpcnBob25lLWZwNCArIHBtNjE1 MGwKPiA+ID4gPiAtLS0KPiA+ID4gPiDCoMKgZHJpdmVycy9sZWRzL2ZsYXNoL0tjb25maWfCoMKg wqDCoMKgwqDCoMKgwqDCoCB8wqAgMTUgKwo+ID4gPiA+IMKgwqBkcml2ZXJzL2xlZHMvZmxhc2gv TWFrZWZpbGXCoMKgwqDCoMKgwqDCoMKgwqAgfMKgwqAgMSArCj4gPiA+ID4gwqDCoGRyaXZlcnMv bGVkcy9mbGFzaC9sZWRzLXFjb20tZmxhc2guYyB8IDcwMCA+Cj4gPiA+ID4gKysrKysrKysrKysr KysrKysrKysrKysrKysrCj4gPiA+ID4gwqDCoDMgZmlsZXMgY2hhbmdlZCwgNzE2IGluc2VydGlv bnMoKykKPiA+ID4gPiDCoMKgY3JlYXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvbGVkcy9mbGFzaC9s ZWRzLXFjb20tZmxhc2guYwo+ID4gPiA+IAo+ID4gPiA+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xl ZHMvZmxhc2gvS2NvbmZpZwo+ID4gPiA+IGIvZHJpdmVycy9sZWRzL2ZsYXNoL0tjb25maWcKPiA+ ID4gPiBpbmRleCBkM2ViNjg5YjE5M2MuLmYzNmE2MDQwOTI5MCAxMDA2NDQKPiA+ID4gPiAtLS0g YS9kcml2ZXJzL2xlZHMvZmxhc2gvS2NvbmZpZwo+ID4gPiA+ICsrKyBiL2RyaXZlcnMvbGVkcy9m bGFzaC9LY29uZmlnCj4gPiA+ID4gQEAgLTYxLDYgKzYxLDIxIEBAIGNvbmZpZyBMRURTX01UNjM2 MAo+ID4gPiA+IMKgwqDCoMKgwqDCoMKgwqDCoMKgIEluZGVwZW5kZW50IGN1cnJlbnQgc291cmNl cyBzdXBwbHkgZm9yIGVhY2ggZmxhc2gKPiA+ID4gPiBMRUQgPgo+ID4gPiA+IHN1cHBvcnQgdG9y Y2gKPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhbmQgc3Ryb2JlIG1vZGUuCj4gPiA+ID4g wqAgCj4gPiA+ID4gK2NvbmZpZyBMRURTX1FDT01fRkxBU0gKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqB0cmlzdGF0ZSAiTEVEIHN1cHBvcnQgZm9yIGZsYXNoIG1vZHVsZSBpbnNpZGUgUXVhbGNvbW0K PiA+ID4gPiA+Cj4gPiA+ID4gVGVjaG5vbG9naWVzLCBJbmMuIFBNSUMiCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgZGVwZW5kcyBvbiBNRkRfU1BNSV9QTUlDIHx8IENPTVBJTEVfVEVTVAo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGRlcGVuZHMgb24gTEVEU19DTEFTUyAmJiBPRgo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGRlcGVuZHMgb24gVjRMMl9GTEFTSF9MRURfQ0xBU1MgfHwKPiA+ID4gPiAhVjRM Ml9GTEFTSF9MRURfQ0xBU1MKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzZWxlY3QgUkVHTUFQCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaGVscAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgIFRoaXMg b3B0aW9uIGVuYWJsZXMgc3VwcG9ydCBmb3IgdGhlIGZsYXNoIG1vZHVsZQo+ID4gPiA+IGZvdW5k IGluCj4gPiA+ID4gPiBRdWFsY29tbQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgIFRlY2hub2xv Z2llcywgSW5jLiBQTUlDcy4gVGhlIGZsYXNoIG1vZHVsZSBjYW4gaGF2ZSAzCj4gPiA+ID4gb3IK PiA+ID4gPiA0ID4gZmxhc2ggTEVECj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgY2hhbm5lbHMg YW5kIGVhY2ggY2hhbm5lbCBpcyBwcm9ncmFtbWFibGUgdG8gc3VwcG9ydAo+ID4gPiA+IHVwCj4g PiA+ID4gdG8gPiAxLjUgQSBmdWxsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgc2NhbGUgY3Vy cmVudC4gSXQgYWxzbyBzdXBwb3J0cyBjb25uZWN0aW5nIHR3bwo+ID4gPiA+IGNoYW5uZWxzJwo+ ID4gPiA+ID4gb3V0cHV0IHRvZ2V0aGVyCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqAgdG8gc3Vw cGx5IG9uZSBMRUQgY29tcG9uZW50IHRvIGFjaGlldmUgY3VycmVudCB1cCB0bwo+ID4gPiA+IDIg QS4KPiA+ID4gPiA+IEluIHN1Y2ggY2FzZSwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoCB0aGUg dG90YWwgTEVEIGN1cnJlbnR3aWxsIGJlIHNwbGl0IHN5bW1ldHJpY2FsbHkgb24KPiA+ID4gPiBl YWNoCj4gPiA+ID4gPiBjaGFubmVsIGFuZAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgIHRoZXkg d2lsbCBiZSBlbmFibGVkL2Rpc2FibGVkIGF0IHRoZSBzYW1lIHRpbWUuCj4gPiA+ID4gKwo+ID4g PiA+IMKgwqBjb25maWcgTEVEU19SVDQ1MDUKPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqB0cmlz dGF0ZSAiTEVEIHN1cHBvcnQgZm9yIFJUNDUwNSBmbGFzaGxpZ2h0Cj4gPiA+ID4gY29udHJvbGxl ciIKPiA+ID4gPiDCoMKgwqDCoMKgwqDCoMKgwqBkZXBlbmRzIG9uIEkyQyAmJiBPRgo+ID4gPiA+ IGRpZmYgLS1naXQgYS9kcml2ZXJzL2xlZHMvZmxhc2gvTWFrZWZpbGUgPgo+ID4gPiA+IGIvZHJp dmVycy9sZWRzL2ZsYXNoL01ha2VmaWxlCj4gPiA+ID4gaW5kZXggMGFjYmRkYzBiOTFiLi44YTYw OTkzZjFhMjUgMTAwNjQ0Cj4gPiA+ID4gLS0tIGEvZHJpdmVycy9sZWRzL2ZsYXNoL01ha2VmaWxl Cj4gPiA+ID4gKysrIGIvZHJpdmVycy9sZWRzL2ZsYXNoL01ha2VmaWxlCj4gPiA+ID4gQEAgLTYs NiArNiw3IEBAIG9iai0kKENPTkZJR19MRURTX0FTMzY0NUEpwqDCoMKgwqDCoMKgKz0gbGVkcy0K PiA+ID4gPiBhczM2NDVhLm8KPiA+ID4gPiDCoMKgb2JqLSQoQ09ORklHX0xFRFNfS1REMjY5MinC oMKgwqDCoMKgKz0gbGVkcy1rdGQyNjkyLm8KPiA+ID4gPiDCoMKgb2JqLSQoQ09ORklHX0xFRFNf TE0zNjAxWCnCoMKgwqDCoMKgKz0gbGVkcy1sbTM2MDF4Lm8KPiA+ID4gPiDCoMKgb2JqLSQoQ09O RklHX0xFRFNfTUFYNzc2OTMpwqDCoMKgwqArPSBsZWRzLW1heDc3NjkzLm8KPiA+ID4gPiArb2Jq LSQoQ09ORklHX0xFRFNfUUNPTV9GTEFTSCnCoMKgKz0gbGVkcy1xY29tLWZsYXNoLm8KPiA+ID4g PiDCoMKgb2JqLSQoQ09ORklHX0xFRFNfUlQ0NTA1KcKgwqDCoMKgwqDCoCs9IGxlZHMtcnQ0NTA1 Lm8KPiA+ID4gPiDCoMKgb2JqLSQoQ09ORklHX0xFRFNfUlQ4NTE1KcKgwqDCoMKgwqDCoCs9IGxl ZHMtcnQ4NTE1Lm8KPiA+ID4gPiDCoMKgb2JqLSQoQ09ORklHX0xFRFNfU0dNMzE0MCnCoMKgwqDC oMKgKz0gbGVkcy1zZ20zMTQwLm8KPiA+ID4gPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9sZWRzL2Zs YXNoL2xlZHMtcWNvbS1mbGFzaC5jID4KPiA+ID4gPiBiL2RyaXZlcnMvbGVkcy9mbGFzaC9sZWRz LXFjb20tZmxhc2guYwo+ID4gPiA+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0Cj4gPiA+ID4gaW5kZXgg MDAwMDAwMDAwMDAwLi5hOWZjZjYxNjAwYzMKPiA+ID4gPiAtLS0gL2Rldi9udWxsCj4gPiA+ID4g KysrIGIvZHJpdmVycy9sZWRzL2ZsYXNoL2xlZHMtcWNvbS1mbGFzaC5jCj4gPiA+ID4gQEAgLTAs MCArMSw3MDAgQEAKPiA+ID4gPiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b25seQo+ID4gPiA+ICsvKgo+ID4gPiA+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjIgUXVhbGNvbW0g SW5ub3ZhdGlvbiBDZW50ZXIsIEluYy4gQWxsCj4gPiA+ID4gcmlnaHRzCj4gPiA+ID4gPiByZXNl cnZlZC4KPiA+ID4gPiArICovCj4gPiA+ID4gKwo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvYml0 ZmllbGQuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2JpdHMuaD4KPiA+ID4gPiArI2luY2x1 ZGUgPGxpbnV4L2xlZHMuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L2xlZC1jbGFzcy1mbGFz aC5oPgo+ID4gPiA+ICsjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+Cj4gPiA+ID4gKyNpbmNsdWRl IDxsaW51eC9wbGF0Zm9ybV9kZXZpY2UuaD4KPiA+ID4gPiArI2luY2x1ZGUgPGxpbnV4L3Byb3Bl cnR5Lmg+Cj4gPiA+ID4gKyNpbmNsdWRlIDxsaW51eC9yZWdtYXAuaD4KPiA+ID4gPiArI2luY2x1 ZGUgPG1lZGlhL3Y0bDItZmxhc2gtbGVkLWNsYXNzLmg+Cj4gPiA+ID4gKwo+ID4gPiA+ICsvKiBy ZWdpc3RlcnMgZGVmaW5pdGlvbnMgKi8KPiA+ID4gPiArI2RlZmluZSBGTEFTSF9UWVBFX1JFR8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAweDA0Cj4gPiA+ID4gKyNkZWZpbmUgRkxB U0hfVFlQRV9WQUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMHgxOAo+ID4gPiA+ ICsKPiA+ID4gPiArI2RlZmluZSBGTEFTSF9TVUJUWVBFX1JFR8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqAweDA1Cj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfU1VCVFlQRV8zQ0hfVkFMwqDCoMKg wqDCoMKgwqDCoMKgwqAweDA0Cj4gPiAKPiA+IFBNSTg5OTggaGFzIGFsc28gYSAzIGNoYW5uZWwg Zmxhc2ggc3VidHlwZSwgYnV0IHJlcG9ydHMgMHgwMyBhcwo+ID4gc3VidHlwZS4gVGhlIGRyaXZl ciB3b24ndCBwcm9iZSBiZWNhdXNlIG9mIHRoaXMgc2luY2UgdGhlIHN1YnR5cGUKPiA+IGRpZAo+ ID4gbm90IG1hdGNoLiBDaGFuZ2luZyB0aGlzIHZhbHVlIHRvIDB4MDMgbWFkZSB0aGlzIGRyaXZl ciB3b3JrIG9uCj4gPiBTRE04NDUKPiA+IGJhc2VkIGRldmljZSBhcyB3ZWxsIHdpdGggUE1JODk5 OC4gV291bGQgeW91IGNvbnNpZGVyIHN1cHBvcnRpbmcKPiA+IFNETTg0NStQTUk4OTk4IGFzIHdl bGw/Cj4gPiAKPiBJIGp1c3QgZG91YmxlIGNoZWNrZWQsIGZsYXNoIG1vZHVsZSBpbiBQTUk4OTk4 ICh3aXRoIHN1YnR5cGUgMHgzKSBoYXMKPiB2ZXJ5IHNpbWlsYXIgcmVnaXN0ZXIgZGVmaW5pdGlv biBhcyB0aGUgZmxhc2ggbW9kdWxlIGluIFBNODE1MEMgKHdpdGgKPiBzdWJ0eXBlIDB4NCkgdGhh dCB0aGUgZHJpdmVyIGlzIGludGVuZGVkIHRvIHN1cHBvcnQsIGl0J3MgZ29vZCBrbm93Cj4gdGhh dCAKPiBpdCdzIDk5JSB3b3JrLgo+IEkgY2FuIGFkZCB0aGUgMHgzIHN1YnR5cGUgc3VwcG9ydCBi dXQgdGhlIG9ubHkgcHJvYmxlbSBpcyBJIGNvdWxkbid0IAo+IGZpbmQgYSBkZXZpY2Ugd2l0aCBQ TUk4OTk4IHRvIHRlc3QgaXQgb3V0LiBXb3VsZCBpdCBiZSBnb29kIGlmIEkgYWRkCj4gdGhlIAo+ IHN1cHBvcnQgYW5kIHJlbHkgb24geW91ciB0ZXN0IHJlc3VsdD8KClN1cmUhIEkgYWxyZWFkeSBo YXZlIGEgYnJhbmNoIGxvY2FsbHkgdG8gdGVzdCB5b3VyIHBhdGNoZXMsIGhhcHB5IHRvCmhlbHAh IEkgaGF2ZSBhbiBTRE04NDUgZGV2aWNlIGhlcmUgd2l0aCBQTUk4OTk4IHdpdGggMiBMRURzOiBj b2xkIGFuZAp3YXJtIHdoaXRlLgoKPiAKPiA+ID4gPiArI2RlZmluZSBGTEFTSF9TVUJUWVBFXzRD SF9WQUzCoMKgwqDCoMKgwqDCoMKgwqDCoDB4MDcKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUg RkxBU0hfVElNRVJfRU5fQklUwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoNykKPiA+ID4g PiArI2RlZmluZSBGTEFTSF9USU1FUl9WQUxfTUFTS8KgwqDCoMKgwqDCoMKgwqDCoMKgwqBHRU5N QVNLKDYsIDApCj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfVElNRVJfU1RFUF9NU8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoDEwCj4gPiA+ID4gKwo+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX1NUUk9CRV9I V19TV19TRUxfQklUwqDCoMKgwqDCoEJJVCgyKQo+ID4gPiA+ICsjZGVmaW5lIFNXX1NUUk9CRV9W QUzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAwCj4gPiA+ID4gKyNkZWZpbmUg SFdfU1RST0JFX1ZBTMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDEKPiA+ID4g PiArI2RlZmluZSBGTEFTSF9IV19TVFJPQkVfVFJJR0dFUl9TRUxfQklUwqDCoMKgwqDCoMKgwqDC oEJJVCgxKQo+ID4gPiA+ICsjZGVmaW5lIFNUUk9CRV9MRVZFTF9UUklHR0VSX1ZBTMKgwqDCoMKg wqDCoMKgMAo+ID4gPiA+ICsjZGVmaW5lIFNUUk9CRV9FREdFX1RSSUdHRVJfVkFMwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAxCj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfU1RST0JFX1BP TEFSSVRZX0JJVMKgwqDCoMKgwqDCoEJJVCgwKQo+ID4gPiA+ICsjZGVmaW5lIFNUUk9CRV9BQ1RJ VkVfSElHSF9WQUzCoMKgwqDCoMKgwqDCoMKgwqAxCj4gPiA+ID4gKwo+ID4gPiA+ICsjZGVmaW5l IEZMQVNIX0lSRVNfTUFTS180Q0jCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBCSVQoMCkKPiA+ID4g PiArI2RlZmluZSBGTEFTSF9JUkVTX01BU0tfM0NIwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgR0VO TUFTSygxLCAwKQo+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX0lSRVNfMTJQNU1BX1ZBTMKgwqDCoMKg wqDCoMKgwqDCoMKgMAo+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX0lSRVNfNU1BX1ZBTF80Q0jCoMKg wqDCoMKgwqDCoMKgwqAxCj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfSVJFU181TUFfVkFMXzNDSMKg wqDCoMKgwqDCoMKgwqDCoDMKPiA+ID4gPiArCj4gPiA+ID4gKy8qIGNvbnN0YW50cyAqLwo+ID4g PiA+ICsjZGVmaW5lIEZMQVNIX0NVUlJFTlRfTUFYX1VBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDE1 MDAwMDAKPiA+ID4gPiArI2RlZmluZSBUT1JDSF9DVVJSRU5UX01BWF9VQcKgwqDCoMKgwqDCoMKg wqDCoMKgwqA1MDAwMDAKPiA+ID4gPiArI2RlZmluZSBGTEFTSF9UT1RBTF9DVVJSRU5UX01BWF9V QcKgwqDCoMKgwqAyMDAwMDAwCj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfQ1VSUkVOVF9ERUZBVUxU X1VBwqDCoMKgwqDCoMKgwqAxMDAwMDAwCj4gPiA+ID4gKyNkZWZpbmUgVE9SQ0hfQ1VSUkVOVF9E RUZBVUxUX1VBwqDCoMKgwqDCoMKgwqAyMDAwMDAKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUg VE9SQ0hfSVJFU19VQcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoDUwMDAKPiA+ ID4gPiArI2RlZmluZSBGTEFTSF9JUkVTX1VBwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgMTI1MDAKPiA+ID4gPiArCj4gPiA+ID4gKyNkZWZpbmUgRkxBU0hfVElNRU9VVF9NQVhf VVPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgMTI4MDAwMAo+ID4gPiA+ICsjZGVmaW5lIEZMQVNIX1RJ TUVPVVRfU1RFUF9VU8KgwqDCoMKgwqDCoMKgwqDCoMKgMTAwMDAKPiA+ID4gPiArCj4gPiA+ID4g K2VudW0gaHdfdHlwZSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUUNPTV9NVkZMQVNIXzNDSCwK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBRQ09NX01WRkxBU0hfNENILAo+ID4gPiA+ICt9Owo+ID4g PiA+ICsKPiA+ID4gPiArZW51bSBsZWRfbW9kZSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgRkxB U0hfTU9ERSwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBUT1JDSF9NT0RFLAo+ID4gPiA+ICt9Owo+ ID4gPiA+ICsKPiA+ID4gPiArZW51bSBsZWRfc3Ryb2JlIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBTV19TVFJPQkUsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgSFdfU1RST0JFLAo+ID4gPiA+ICt9 Owo+ID4gPiA+ICsKPiA+ID4gPiArZW51bSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX1NU QVRVUzEsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX1NUQVRVUzIsCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgUkVHX1NUQVRVUzMsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0NIQU5fVElN RVIsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0lUQVJHRVQsCj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgUkVHX01PRFVMRV9FTiwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfSVJFU09MVVRJ T04sCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0NIQU5fU1RST0JFLAo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoFJFR19DSEFOX0VOLAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19NQVhfQ09V TlQsCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3QgcmVnX2ZpZWxkIG12Zmxh c2hfM2NoX3JlZ3NbUkVHX01BWF9DT1VOVF0gPSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVH X0ZJRUxEKDB4MDgsIDAsIDcpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8q Cj4gPiA+ID4gc3RhdHVzMcKgwqDCoMKgwqDCoCovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVH X0ZJRUxEKDB4MDksIDAsIDcpLMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyoK PiA+ID4gPiBzdGF0dXMywqDCoMKgwqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdf RklFTEQoMHgwYSwgMCwgNykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ ID4gPiA+IHN0YXR1czPCoMKgwqDCoMKgwqAqLwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoFJFR19G SUVMRF9JRCgweDQwLCAwLCA3LCAzLCAxKSzCoMKgwqDCoMKgwqDCoMKgIC8qCj4gPiA+ID4gY2hh bl90aW1lcsKgwqDCoCovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEX0lEKDB4NDMs IDAsIDYsIDMsIDEpLMKgwqDCoMKgwqDCoMKgwqAgLyoKPiA+ID4gPiBpdGFyZ2V0wqDCoMKgwqDC oMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0NiwgNywgNykswqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gPiA+IG1vZHVsZV9lbsKgwqDCoMKg Ki8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0NywgMCwgNSkswqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAvKgo+ID4gPiA+IGlyZXNvbHV0aW9uwqDCoCovCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEX0lEKDB4NDksIDAsIDIsIDMsIDEpLMKgwqDC oMKgwqDCoMKgwqAgLyoKPiA+ID4gPiBjaGFuX3N0cm9iZcKgwqAqLwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoFJFR19GSUVMRCgweDRjLCAwLCAyKSzCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qCj4gPiA+ID4gY2hhbl9lbsKgwqDCoMKgwqDCoCovCj4gPiA+ID4gK307Cj4gPiAK PiA+IFRoZXNlIHJlZ2lzdGVycyBtYXAgcGVyZmVjdGx5IGZvciBTRE04NDUgd2l0aCBQTUk4OTk4 IGFzIHdlbGwsCj4gPiBhZGRpbmcKPiA+IHN1cHBvcnQgZm9yIHRoaXMgc3VidHlwZSAoMHgwMykg d291bGQgYmUgZ3JlYXQuCj4gPiAKPiA+ID4gPiArCj4gPiA+ID4gK3N0cnVjdCByZWdfZmllbGQg bXZmbGFzaF80Y2hfcmVnc1tSRUdfTUFYX0NPVU5UXSA9IHsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBSRUdfRklFTEQoMHgwNiwgMCwgNykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoKPiA+ID4gPiBzdGF0dXMxwqDCoMKgwqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBSRUdfRklFTEQoMHgwNywgMCwgNikswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoKPiA+ID4gPiBzdGF0dXMywqDCoMKgwqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBSRUdfRklFTEQoMHgwOSwgMCwgNykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgLyoKPiA+ID4gPiBzdGF0dXMzwqDCoMKgwqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBSRUdfRklFTERfSUQoMHgzZSwgMCwgNywgNCwgMSkswqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ ID4gPiBjaGFuX3RpbWVywqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTERf SUQoMHg0MiwgMCwgNiwgNCwgMSkswqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiBpdGFyZ2V0 wqDCoMKgwqDCoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTEQoMHg0NiwgNywg NykswqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiBtb2R1bGVf ZW7CoMKgwqDCoCovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgUkVHX0ZJRUxEKDB4NDksIDAsIDMp LMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoC8qCj4gPiA+ID4gaXJlc29sdXRp b27CoMKgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBSRUdfRklFTERfSUQoMHg0YSwgMCwgNiwg NCwgMSkswqDCoMKgwqDCoMKgwqDCoMKgLyoKPiA+ID4gPiBjaGFuX3N0cm9iZcKgwqAqLwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoFJFR19GSUVMRCgweDRlLCAwLCAzKSzCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAvKgo+ID4gPiA+IGNoYW5fZW7CoMKgwqDCoMKgwqAqLwo+ID4g PiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RydWN0IHFjb21fZmxhc2hfbGVkIHsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9jaGlwwqDCoMKgwqDCoMKgwqDCoMKg wqAqY2hpcDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNo wqDCoMKgwqDCoMKgwqBmbGFzaDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgdjRsMl9m bGFzaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCp2NGwyX2ZsYXNoOwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBtYXhfZmxhc2hfY3VycmVudF9tYTsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB1MzLCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgbWF4X3RvcmNoX2N1cnJlbnRfbWE7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMy wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG1heF90aW1lb3V0X21zOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFzaF9jdXJyZW50 X21hOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMsKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmbGFzaF90aW1lb3V0X21zOwo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHU4wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgKmNoYW5faWQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTjC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBjaGFuX2NvdW50Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGJvb2zCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVuYWJsZWQ7Cj4gPiA+ID4g K307Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdHJ1Y3QgcWNvbV9mbGFzaF9jaGlwIHsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWTCoMKgwqAqbGVkczsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcmVnbWFwX2ZpZWxkwqDCoMKgwqAgKnJfZmllbGRzW1JFR19N QVhfQ09VTlRdOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2XCoMKgwqDCoMKg wqDCoMKgwqDCoMKgKmRldjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbXV0ZXjCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqBsb2NrOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGVudW0gaHdf dHlwZcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGh3X3R5cGU7Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZHNfY291 bnQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoG1heF9jaGFubmVsczsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1OMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9lbl9iaXRzOwo+ ID4gPiA+ICt9Owo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBzZXRfZmxhc2hfbW9kdWxl X2VuKHN0cnVjdCBxY29tX2ZsYXNoX2xlZCAqbGVkLAo+ID4gPiA+IGJvb2wKPiA+ID4gPiBlbikK PiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAg KmNoaXA9IGxlZC0+Y2hpcDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBsZWRfbWFzayA9IDAs IHZhbDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgaSwgcmM7Cj4gPiA+ID4gKwo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsZWQtPmNoYW5fY291bnQ7IGkrKykKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkX21hc2sgfD0gQklUKGxlZC0+ Y2hhbl9pZFtpXSAtIDEpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9s b2NrKCZjaGlwLT5sb2NrKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoZW4pCj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoaXAtPmNoYW5fZW5fYml0cyB8PSBsZWRf bWFzazsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoGNoaXAtPmNoYW5fZW5fYml0cyAmPSB+bGVkX21hc2s7Cj4gPiA+ID4g Kwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHZhbCA9ICEhY2hpcC0+Y2hhbl9lbl9iaXRzOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX2ZpZWxkX3dyaXRlKGNoaXAtPnJfZmllbGRz W1JFR19NT0RVTEVfRU5dLAo+ID4gPiA+IHZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2Vycihj aGlwLT5kZXYsICJ3cml0ZSBtb2R1bGVfZW4gZmFpbGVkLAo+ID4gPiA+IHJjPSVkXG4iLCA+IHJj KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF91bmxvY2soJmNoaXAtPmxvY2spOwo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gK30KPiA+ID4g PiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgc2V0X2ZsYXNoX2N1cnJlbnQoc3RydWN0IHFjb21fZmxh c2hfbGVkICpsZWQsIHUzMiA+Cj4gPiA+ID4gY3VycmVudF9tYSwgZW51bSBsZWRfbW9kZSBtb2Rl KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfY2hp cCAqY2hpcD0gbGVkLT5jaGlwOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBpdGFyZ191YSA9 IGN1cnJlbnRfbWEgKiAxMDAwIC8gbGVkLT5jaGFuX2NvdW50ICsgMTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqB1MzIgaXJlc191YSA9IChtb2RlID09RkxBU0hfTU9ERSkgPyBGTEFTSF9JUkVTX1VB IDogPgo+ID4gPiA+IFRPUkNIX0lSRVNfVUE7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTggdmFs LCBzaGlmdCwgaXJlc19tYXNrID0wLCBpcmVzX3ZhbCA9IDAsIGNoYW5faWQ7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaW50IGksIHJjOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAv Kgo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCAqIFNwbGl0IHRoZSBjdXJyZW50IGFjcm9zcyB0aGUg Y2hhbm5lbHMgYW5kIHNldCB0aGUKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAgKiBJUkVTT0xVVElP TiBhbmQgSVRBUkdFVCByZWdpc3RlcnMgYWNjb3JkaW5nbHkuCj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgICovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IGxlZC0+Y2hhbl9j b3VudDsgaSsrKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5f aWQgPSBsZWQtPmNoYW5faWRbaV07Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGlmIChpdGFyZ191YSA8IGlyZXNfdWEpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSAwOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbHNlCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBpdGFyZ191YSAvIGlyZXNfdWEgLSAxOwo+ID4gPiA+ ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfZmll bGRzX3dyaXRlKGNoaXAtCj4gPiA+ID4gPiByX2ZpZWxkc1tSRUdfSVRBUkdFVF0sID4gY2hhbl9p ZCAtIDEsIHZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChy YyA8IDApCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqByZXR1cm5yYzsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoGlmIChjaGlwLT5od190eXBlID09IFFDT01fTVZGTEFTSF8zQ0gpIHsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNoaWZ0ID0gKGNo YW5faWQgLSAxKSAqIDI7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBpcmVzX21hc2sgfD0gRkxBU0hfSVJFU19NQVNLXzNDSCA8PAo+ID4gPiA+ IHNoaWZ0Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaXJlc192YWwgfD0gKChtb2RlID09IEZMQVNIX01PREUpID8KPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAo RkxBU0hfSVJFU18xMlA1TUFfVkFMIDw8Cj4gPiA+ID4gc2hpZnQpIDoKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAo RkxBU0hfSVJFU181TUFfVkFMXzNDSCA8PAo+ID4gPiA+IHNoaWZ0KSk7Cj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAoY2hpcC0+aHdfdHlwZSA9PSBRQ09N X01WRkxBU0hfNENIKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBzaGlmdCA9IGNoYW5faWQgLSAxOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaXJlc19tYXNrIHw9IEZMQVNIX0lSRVNf TUFTS180Q0ggPDwKPiA+ID4gPiBzaGlmdDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlyZXNfdmFsIHw9ICgobW9kZSA9PSBGTEFTSF9NT0RF KSA/Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKEZMQVNIX0lSRVNfMTJQNU1BX1ZBTCA8PAo+ID4gPiA+IHNoaWZ0 KSA6Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgKEZMQVNIX0lSRVNfNU1BX1ZBTF80Q0ggPDwKPiA+ID4gPiBzaGlm dCkpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gPiBy ZWdtYXBfZmllbGRfdXBkYXRlX2JpdHMoY2hpcC0KPiA+ID4gPiA+IHJfZmllbGRzW1JFR19JUkVT T0xVVElPTl0sIGlyZXNfbWFzaywgPiBpcmVzX3ZhbCk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4g PiA+ID4gK3N0YXRpYyBpbnQgc2V0X2ZsYXNoX3RpbWVvdXQoc3RydWN0IHFjb21fZmxhc2hfbGVk ICpsZWQsIHUzMiA+Cj4gPiA+ID4gdGltZW91dF9tcykKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNoaXA9IGxlZC0+Y2hpcDsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqB1OCB2YWwsIGNoYW5faWQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg aW50IHJjLCBpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAvKiBzZXQgU0FGRVRZ X1RJTUVSIGZvciBhbGwgdGhlIGNoYW5uZWxzIGNvbm5lY3RlZCB0bwo+ID4gPiA+IHRoZSA+Cj4g PiA+ID4gc2FtZSBMRUQgKi8KPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB0aW1lb3V0X21zID0gbWlu X3QodTMyLCB0aW1lb3V0X21zLCBsZWQtCj4gPiA+ID4gPm1heF90aW1lb3V0X21zKTsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50OyBpKyspIHsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9pZCA9IGxlZC0+Y2hh bl9pZFtpXTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdmFsID0gdGlt ZW91dF9tcyAvIEZMQVNIX1RJTUVSX1NURVBfTVM7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoHZhbCA9IGNsYW1wX3QodTgsIHZhbCwgMCwKPiA+ID4gPiBGTEFTSF9USU1F Ul9WQUxfTUFTSyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmICh0 aW1lb3V0X21zKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgdmFsIHw9IEZMQVNIX1RJTUVSX0VOX0JJVDsKPiA+ID4gPiArCj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gPiByZWdtYXBfZmllbGRzX3dyaXRlKGNo aXAtCj4gPiA+ID4gPiByX2ZpZWxkc1tSRUdfQ0hBTl9USU1FUl0sIGNoYW5faWQgLSAxLCA+IHZh bCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1 cm5yYzsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50 IHNldF9mbGFzaF9zdHJvYmUoc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQsIGVudW0gPgo+ID4g PiA+IGxlZF9zdHJvYmUgc3Ryb2JlLCBib29sIHN0YXRlKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfY2hpcCAqY2hpcD0gbGVkLT5jaGlwOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHU4IG1hc2ssIHZhbCwgY2hhbl9pZCA9IDAsY2hhbl9tYXNrID0g MDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmMsIGk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoC8qIFNldCBTVyBzdHJvYmUgY29uZmlnIGZvciBhbGwgY2hhbm5lbHMgY29u bmVjdGVkIHRvCj4gPiA+ID4gdGhlCj4gPiA+ID4gTEVEID4gKi8KPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50OyBpKyspIHsKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHN0cm9iZSA9PSBTV19TVFJP QkUpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqB2YWwgPQo+ID4gPiA+IEZJRUxEX1BSRVAoRkxBU0hfU1RST0JFX0hXX1NXX1NFTF9CSVQsID4g U1dfU1RST0JFX1ZBTCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGVs c2UKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHZhbCA9Cj4gPiA+ID4gRklFTERfUFJFUChGTEFTSF9TVFJPQkVfSFdfU1dfU0VMX0JJVCwgPiBI V19TVFJPQkVfVkFMKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoHZhbCB8PQo+ID4gPiA+IEZJRUxEX1BSRVAoRkxBU0hfSFdfU1RST0JFX1RSSUdHRVJf U0VMX0JJVCwKPiA+ID4gPiA+IFNUUk9CRV9MRVZFTF9UUklHR0VSX1ZBTCkgfAo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgRklFTERfUFJFUChG TEFTSF9TVFJPQkVfUE9MQVJJVFlfQklULCA+Cj4gPiA+ID4gU1RST0JFX0FDVElWRV9ISUdIX1ZB TCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJjID0gPiByZWdtYXBf ZmllbGRzX3dyaXRlKGNoaXAtCj4gPiA+ID4gPiByX2ZpZWxkc1tSRUdfQ0hBTl9TVFJPQkVdLCBj aGFuX2lkIC0gMSwgPiB2YWwpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqBpZiAocmMgPCAwKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgcmV0dXJucmM7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBjaGFuX21hc2sgfD0gQklUKGNoYW5faWQgLSAxKTsKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC8qIGVuYWJsZS9k aXNhYmxlIGZsYXNoIGNoYW5uZWxzICovCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgbWFzayA9IGNo YW5fbWFzazsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB2YWwgPSBzdGF0ZSA/IG1hc2sgOiAwOwo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX2ZpZWxkX3VwZGF0ZV9iaXRzKGNoaXAt Cj4gPiA+ID4gPnJfZmllbGRzW1JFR19DSEFOX0VOXSwKPiA+ID4gPiA+IG1hc2ssIHZhbCk7Cj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBsZWQtPmVuYWJsZWQgPSBzdGF0ZTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsK PiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBxY29tX2ZsYXNoX2JyaWdo dG5lc3Nfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2gKPiA+ID4gPiA+Cj4gPiA+ID4gKmZs ZWRfY2RldiwgdTMyIGJyaWdodG5lc3MpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsCj4g PiA+ID4gc3RydWN0Cj4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCwgZmxhc2gpOwo+ID4gPiA+ICsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPmZsYXNoX2N1cnJlbnRfbWEgPSBtaW5fdCh1MzIs IGxlZC0KPiA+ID4gPiA+IG1heF9mbGFzaF9jdXJyZW50X21hLCA+IGJyaWdodG5lc3MgLyAxMDAw KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4gCj4gPiBU aGlzIGRvZXNuJ3Qgc2VlbSB0byB3b3JrIGluIHRvcmNoIG1vZGUgZm9yIG1lIG9uIFBNSTg5OTgu IElmIHRoZQo+ID4gYnJpZ2h0bmVzcyBpcyAwLCB0aGUgdG9yY2ggaXMgT0ZGIGFzIGV4cGVjdGVk LCBidXQgd2hlbiB0aGUgdG9yY2gKPiA+IGlzCj4gPiBPTiwgeW91IGNhbm5vdCBjb250cm9sIHRo ZSBicmlnaHRuZXNzLiBUaGUgYnJpZ2h0bmVzcyBpcyB0aGUgc2FtZQo+ID4gZm9yCj4gPiBbMSwg MjU1XS4gSWYgdGhlIGhhcmR3YXJlIGNhbm5vdCBjaGFuZ2UgdGhlIGJyaWdodG5lc3MgaW4gdG9y Y2gKPiA+IG1vZGUsCj4gPiBpdCB3b3VsZCBiZSBuaWNlIHRvIHJlcG9ydCBhIG1heF9icmlnaHRu ZXNzIHZhbHVlIG9mIDEgaW5zdGVhZCBvZgo+ID4gMjU1Cj4gPiBmb3IgdXNlcnNwYWNlLiBUaGlz IGNvdWxkIGJlIGEgbGltaXRhdGlvbiBvZiB0aGUgUE1JODk5OCwgbm90IHN1cmUuCj4gPiBEbyB5 b3UgaGF2ZSBhbnkgaW5zaWdodHMgaGVyZT8gVGhpcyBkcml2ZXIgaXMgYWxyZWFkeSA5OSUgd29y a2luZwo+ID4gZm9yCj4gPiBTRE04NDUrUE1JODk5OC4KPiA+IAo+ID4gRmxhc2ggbW9kZSB3b3Jr cyBncmVhdCwgdGltZW91dCAmIGJyaWdodG5lc3MgY2FuIGJlIGNvbmZpZ3VyZWQganVzdAo+ID4g ZmluZS4KPiA+IAo+IAo+IEhlcmUsIGZ1bmN0aW9uIHFjb21fZmxhc2hfYnJpZ2h0bmVzc19zZXQo KSBpcyB1c2VkIGZvciBzZXR0aW5nIAo+IGJyaWdodG5lc3MgaW4gZmxhc2ggbW9kZSBhbmQgaXQg d2FzIHN1cHBvc2VkIHRvIGJlIHdvcmtpbmcgd2l0aCAKPiBmb2xsb3dpbmcgY29tbWFuZHMgY29t YmluYXRpb246Cj4gwqDCoMKgwqDCoMKgwqDCoGVjaG8geHh4ID4gZmxhc2hfYnJpZ2h0bmVzcwo+ IMKgwqDCoMKgwqDCoMKgwqBlY2hvIDEgPiBmbGFzaF9zdHJvYmXCoCAoeW91IHdpbGwgbmVlZCB0 byB0b2dnbGUgZmxhc2hfc3Ryb2JlCj4gd2hlbiB5b3UgCj4gZW5hYmxpbmcgaXQgYWdhaW4pCj4g Cj4gQ2FuIHlvdSBjaGVjayBpZiB5b3UgY2FuIHNlZSB0aGUgYnJpZ2h0bmVzcyBjaGFuZ2UgaW4g Zmxhc2ggbW9kZSB3aGVuCj4geW91IHVwZGF0aW5nIHRoZSBmbGFzaF9icmlnaHRuZXNzIHZhbHVl IHdpdGggdGhlc2UgY29tbWFuZHM/Cj4gCj4gWW91IGNhbiBlY2hvIGFueSB2YWx1ZSBiZXR3ZWVu IFswLCBtYXhfZmxhc2hfYnJpZ2h0bmVzc10gaW50byB0aGUgCj4gZmxhc2hfYnJpZ2h0bmVzcywg dGhlcmUgaXMgYSAibWF4X2ZsYXNoX2JyaWdodG5lc3MiIHN5c2ZzIG5vZGUgYW5kCj4gdGhlIAo+ IHZhbHVlIGNvbWVzIGZyb20gRFQgcHJvcGVydHkgImZsYXNoLW1heC1taWNyb2FtcCIsIGV4LiBt eSBkdHNpIG5vZGUKPiBoYXMgCj4gImZsYXNoLW1heC1taWNyb2FtcCA9IDwyMDAwMDAwPjsiIGRl ZmluZWQgc28gSSBhbSBoYXZpbmcgZm9sbG93aW5nCj4gdmFsdWUgCj4gZm9yIG1heF9mbGFzaF9i cmlnaHRuZXNzOgo+IAo+IGthbGFtYTovc3lzL2NsYXNzL2xlZHMvd2hpdGU6Zmxhc2gtMCAjIGNh dCBtYXhfZmxhc2hfYnJpZ2h0bmVzcwo+IDIwMDAwMDAKPiAKPiBBbmQgYnkgZGVmYXVsdCBmbGFz aCBtb2RlIHVzZXMgMTI1MDB1QSByZXNvbHV0aW9uIHNvIHlvdSB3b24ndCBzZWUgCj4gYnJpZ2h0 bmVzcyBjaGFuZ2Ugd2hlbiB5b3UgdXBkYXRlIGl0IHdpdGggdmFsdWVzIGJldHdlZW4gWzEsIDEy NTAwXS4KClllcywgdGhpcyB3b3JrcyBwZXJmZWN0bHkgZmluZSBvbiBQTUk4OTk4LiBJIGNhbiBh ZGp1c3QgdGhlIGZsYXNoCmJyaWdodG5lc3MgYW5kIGZsYXNoIHRpbWVvdXQgcGVyZmVjdGx5LgoK PiAKPiBJZiB5b3Ugd2FudCB0byB1cGRhdGUgdGhlIGJyaWdodG5lc3MgZm9yIHRvcmNoIG5vZGUs IHlvdSBjYW4gZGlyZWN0bHkKPiB1cGRhdGUgdGhlICJicmlnaHRuZXNzIiBub2RlIHdpdGggdmFs dWVzIGJldHdlZW4gWzAsIDI1NV0sIGFuZCBpdCdzIAo+IG1hcHBpbmcgdG8gdGhlIHRvcmNoIGN1 cnJlbnQgYmV0d2VlbiBbMCwgbGVkLW1heC1taWNyb2FtcF0uIAo+ICJsZWQtbWF4LW1pY3JvYW1w IiBpcyBhbHNvIGhhcyB2YWx1ZSBjb21pbmcgZnJvbSB0aGUgRFQgcHJvcGVydHkuCj4gCj4gVGhp cyB3b3JrZWQgYXQgbXkgc2lkZSBvbiBib3RoIHBtODE1MEMgYW5kIHBtODU1MC5JIHRoaW5rIGl0 IHNob3VsZAo+IHdvcmsgCj4gb24gUE1JODk5OCBhcyB3ZWxsIGJlY2F1c2UgdGhlIGZsYXNoIG1v ZHVsZSBpbiBpdCBpcyB2ZXJ5IHNpbWlsYXIgdG8KPiB0aGUgCj4gb25lIGluIFBNODE1MGMuIExl dCBtZSBrbm93IGlmIHlvdSBzdGlsbCBzZWUgc3VjaCBpc3N1ZXMgYXQgeW91cgo+IHNpZGUuCj4g VGhhbmtzCgpPbmx5IGhlcmUgSSBoYXZlIGFuIGlzc3VlIHdpdGggUE1JODk5ODogdGhlICJicmln aHRuZXNzIiBub2RlcyBzaG91bGQKY2hhbmdlIHRoZSBicmlnaHRuZXNzIG9mIHRoZSB0b3JjaCwg YnV0IGl0IGRvZXNuJ3QgbWFrZSBhIGRpZmZlcmVuY2UKaGVyZS4gV2hlbiBJIGRvOgoKLSBlY2hv IDAgPiBicmlnaHRuZXNzIC0tPiBMRUQgdHVybnMgT0ZGCi0gZWNobyAyNTUgPiBicmlnaHRuZXNz IC0tPiBMRUQgdHVybnMgT04KLSBlY2hvIDEwMCA+IGJyaWdodG5lc3MgLS0+IExFRCBpcyBzdGls bCBPTiwgYnV0IGJyaWdodG5lc3MgaXMgdGhlIHNhbWUKYXMgd2l0aCAyNTUuCgpDb3VsZCBpdCBi ZSB0aGF0IFBNSTg5OTggaXMgc2xpZ2h0bHkgZGlmZmVyZW50IGhlcmUgdGhhbiB3aXRoIFBNODE1 MGMKZm9yIGV4YW1wbGU/IE1heWJlIGl0IGRvZXNuJ3Qgc3VwcG9ydCBicmlnaHRuZXNzIGZvciB0 b3JjaD8KCkhlcmUncyBteSBEVFM6CgoqUE1JODk5OCoKCnBtaTg5OThfZmxhc2g6IGxlZC1jb250 cm9sbGVyQGQzMDAgewoJY29tcGF0aWJsZSA9ICJxY29tLHBtNjE1MGwtZmxhc2gtbGVkIiwgInFj b20sc3BtaS1mbGFzaC1sZWQiOwoJcmVnID0gPDB4ZDMwMD47CglzdGF0dXMgPSAiZGlzYWJsZWQi Owp9OwoKKlNETTg0NSBTSElGVCBheG9sb3RsKgoKJnBtaTg5OThfZmxhc2ggewoJc3RhdHVzID0g Im9rYXkiOwoKCWxlZC0wIHsKCQlmdW5jdGlvbiA9IExFRF9GVU5DVElPTl9GTEFTSDsKCQljb2xv ciA9IDxMRURfQ09MT1JfSURfV0hJVEU+OwoJCWxlZC1zb3VyY2VzID0gPDE+OwoJCWxlZC1tYXgt bWljcm9hbXAgPSA8MTgwMDAwPjsKCQlmbGFzaC1tYXgtbWljcm9hbXAgPSA8MTAwMDAwMD47CgkJ Zmxhc2gtbWF4LXRpbWVvdXQtdXMgPSA8MTI4MDAwMD47Cgl9OwoKCWxlZC0xIHsKCQlmdW5jdGlv biA9IExFRF9GVU5DVElPTl9GTEFTSDsKCQljb2xvciA9IDxMRURfQ09MT1JfSURfWUVMTE9XPjsK CQlsZWQtc291cmNlcyA9IDwyPjsKCQlsZWQtbWF4LW1pY3JvYW1wID0gPDE4MDAwMD47CgkJZmxh c2gtbWF4LW1pY3JvYW1wID0gPDEwMDAwMDA+OwoJCWZsYXNoLW1heC10aW1lb3V0LXVzID0gPDEy ODAwMDA+OwoJfTsKfTsKCgo+IAo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBxY29tX2Zs YXNoX3RpbWVvdXRfc2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggPgo+ID4gPiA+ICpmbGVk X2NkZXYsIHUzMiB0aW1lb3V0KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxlZF9jZGV2LAo+ID4gPiA+ IHN0cnVjdAo+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgbGVkLT5mbGFzaF90aW1lb3V0X21zID0gdGltZW91dCAvIDEwMDA7 Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4g PiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9zdHJvYmVfc2V0KHN0cnVjdCBsZWRfY2xhc3Nk ZXZfZmxhc2ggPgo+ID4gPiA+ICpmbGVkX2NkZXYsIGJvb2wgc3RhdGUpCj4gPiA+ID4gK3sKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5l cl9vZihmbGVkX2NkZXYsCj4gPiA+ID4gc3RydWN0Cj4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCwg Zmxhc2gpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCByYzsKPiA+ID4gPiArCj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgcmMgPSBzZXRfZmxhc2hfY3VycmVudChsZWQsIGxlZC0+Zmxhc2hfY3Vy cmVudF9tYSwgPgo+ID4gPiA+IEZMQVNIX01PREUpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyYyA8IDApCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy YzsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBzZXRfZmxhc2hfdGltZW91 dChsZWQsIGxlZC0+Zmxhc2hfdGltZW91dF9tcyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJj Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF9tb2R1bGVf ZW4obGVkLCBzdGF0ZSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ICsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gc2V0X2ZsYXNoX3N0cm9iZShsZWQsU1dfU1RST0JF LCBzdGF0ZSk7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9m bGFzaF9zdHJvYmVfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggPgo+ID4gPiA+ICpmbGVk X2NkZXYsIGJvb2wgKnN0YXRlKQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ry dWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxlZF9jZGV2LAo+ID4gPiA+ IHN0cnVjdAo+ID4gPiA+ID4gcWNvbV9mbGFzaF9sZWQsIGZsYXNoKTsKPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgKnN0YXRlID0gbGVkLT5lbmFibGVkOwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHJldHVybiAwOwo+ID4gPiA+ICt9Cj4gPiA+ID4gKwo+ID4gPiA+ICtzdGF0aWMgaW50 IHFjb21fZmxhc2hfZmF1bHRfZ2V0KHN0cnVjdCBsZWRfY2xhc3NkZXZfZmxhc2ggPgo+ID4gPiA+ ICpmbGVkX2NkZXYsIHUzMiAqZmF1bHQpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihmbGVkX2NkZXYsCj4g PiA+ID4gc3RydWN0Cj4gPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCwgZmxhc2gpOwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoHN0cnVjdCBxY29tX2ZsYXNoX2NoaXAgKmNoaXA9IGxlZC0+Y2hpcDsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqB1OCBzaGlmdCwgY2hhbl9pZCA9IDAsIGNoYW5fbWFzayA9IDA7 Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTggb3RfbWFzayA9IDAsIG9jX21hc2sgPSAwLCB1dl9t YXNrID0gMDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgdmFsLCBmYXVsdF9zdHMgPSAwOwo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGludCBpLCByYzsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgcmMgPSByZWdtYXBfZmllbGRfcmVhZChjaGlwLT5yX2ZpZWxkc1tSRUdfU1RBVFVT MV0sCj4gPiA+ID4gJnZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ICsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBmb3IgKGkgPSAwOyBpIDwgbGVkLT5jaGFuX2NvdW50OyBp KyspIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hhbl9pZCA9IGxl ZC0+Y2hhbl9pZFtpXTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc2hp ZnQgPSAoY2hhbl9pZCAtIDEpICogMjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgaWYgKHZhbCAmIEJJVChzaGlmdCkpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX1NIT1JUX0NJ UkNVSVQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoYW5fbWFzayB8 PSBCSVQoY2hhbl9pZCAtIDEpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSByZWdtYXBfZmllbGRfcmVhZChjaGlwLT5yX2ZpZWxk c1tSRUdfU1RBVFVTMl0sCj4gPiA+ID4gJnZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYg KHJjIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJj Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoY2hpcC0+aHdfdHlwZSA9PSBR Q09NX01WRkxBU0hfM0NIKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oG90X21hc2sgPSAweDBmOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBv Y19tYXNrID0gMHhlMDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgdXZf bWFzayA9IDB4MTA7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIGlmIChjaGlwLT5od190 eXBlID09IFFDT01fTVZGTEFTSF80Q0gpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgb3RfbWFzayA9IDB4NzA7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoG9jX21hc2sgPSAweDBlOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqB1dl9tYXNrID0gMHgwMTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiBvdF9tYXNrKQo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX09WRVJfVEVNUEVS QVRVUkU7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZhbCAmIG9jX21hc2spCj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZhdWx0X3N0cyB8PSBMRURfRkFVTFRfT1ZF Ul9DVVJSRU5UOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICh2YWwgJiB1dl9tYXNrKQo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxU X0lOUFVUX1ZPTFRBR0U7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVn bWFwX2ZpZWxkX3JlYWQoY2hpcC0+cl9maWVsZHNbUkVHX1NUQVRVUzNdLAo+ID4gPiA+ICZ2YWwp Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgaWYgKGNoaXAtPmh3X3R5cGUgPT0gUUNPTV9NVkZMQVNIXzNDSCkgewo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodmFsICYgY2hhbl9tYXNrKQo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZmF1bHRfc3Rz IHw9IExFRF9GQVVMVF9USU1FT1VUOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSBpZiAo Y2hpcC0+aHdfdHlwZSA9PSBRQ09NX01WRkxBU0hfNENIKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBsZWQtPmNoYW5fY291bnQ7IGkrKykg ewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg Y2hhbl9pZCA9IGxlZC0+Y2hhbl9pZFtpXTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHNoaWZ0ID0gKGNoYW5faWQgLSAxKSAqIDI7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBpZiAodmFs ICYgQklUKHNoaWZ0KSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBmYXVsdF9zdHMgfD0gTEVEX0ZBVUxUX1RJTUVP VVQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArwqDC oMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoCpmYXVsdCA9IGZh dWx0X3N0czsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ID4gPiArfQo+ID4g PiA+ICsKPiA+ID4gPiArc3RhdGljIGludCBxY29tX2ZsYXNoX2xlZF9icmlnaHRuZXNzX3NldChz dHJ1Y3QgbGVkX2NsYXNzZGV2ID4KPiA+ID4gPiAqbGVkX2NkZXYsCj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGVudW0gbGVkX2JyaWdodG5lc3MgPgo+ID4gPiA+IGJyaWdodG5lc3MpCj4g PiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNo ICpmbGVkX2NkZXYgPQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBjb250 YWluZXJfb2YobGVkX2NkZXYsIHN0cnVjdAo+ID4gPiA+IGxlZF9jbGFzc2Rldl9mbGFzaCwgPgo+ ID4gPiA+IGxlZF9jZGV2KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFz aF9sZWQgKmxlZCA9Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNvbnRh aW5lcl9vZihmbGVkX2NkZXYsIHN0cnVjdCBxY29tX2ZsYXNoX2xlZCwKPiA+ID4gPiA+Cj4gPiA+ ID4gZmxhc2gpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHUzMiBjdXJyZW50X21hID0gYnJpZ2h0 bmVzcyAqIGxlZC0+bWF4X3RvcmNoX2N1cnJlbnRfbWEKPiA+ID4gPiAvID4KPiA+ID4gPiBMRURf RlVMTDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBib29sIGVuYWJsZSA9ICEhYnJpZ2h0bmVzczsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbnQgcmM7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoHJjID0gc2V0X2ZsYXNoX2N1cnJlbnQobGVkLCBjdXJyZW50X21hLCBUT1JDSF9NT0RF KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoC8qIGRpc2FibGUgZmxhc2ggdGltZW91dCBmb3J0b3JjaCBMRUQgKi8KPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF90aW1lb3V0KGxlZCwgMCk7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNl dF9mbGFzaF9tb2R1bGVfZW4obGVkLCBlbmFibGUpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlm IChyYyA8IDApCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiBy YzsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIHNldF9mbGFzaF9zdHJv YmUobGVkLFNXX1NUUk9CRSwgZW5hYmxlKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiAr c3RhdGljIGNvbnN0IHN0cnVjdCBsZWRfZmxhc2hfb3BzIHFjb21fZmxhc2hfb3BzID0gewo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoC5mbGFzaF9icmlnaHRuZXNzX3NldCA9IHFjb21fZmxhc2hfYnJp Z2h0bmVzc19zZXQsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnN0cm9iZV9zZXQgPSBxY29tX2Zs YXNoX3N0cm9iZV9zZXQsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnN0cm9iZV9nZXQgPSBxY29t X2ZsYXNoX3N0cm9iZV9nZXQsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLnRpbWVvdXRfc2V0ID0g cWNvbV9mbGFzaF90aW1lb3V0X3NldCwKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqAuZmF1bHRfZ2V0 ID0gcWNvbV9mbGFzaF9mYXVsdF9nZXQsCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ICsj aWYgSVNfRU5BQkxFRChDT05GSUdfVjRMMl9GTEFTSF9MRURfQ0xBU1MpCj4gPiA+ID4gK3N0YXRp YyBpbnQgcWNvbV9mbGFzaF9leHRlcm5hbF9zdHJvYmVfc2V0KHN0cnVjdCB2NGwyX2ZsYXNoID4K PiA+ID4gPiAqdjRsMl9mbGFzaCwgYm9vbCBlbmFibGUpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGFzaCA9IHY0bDJfZmxhc2gt Cj4gPiA+ID4gPmZsZWRfY2RldjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9m bGFzaF9sZWQgKmxlZCA9IGNvbnRhaW5lcl9vZihmbGFzaCwgc3RydWN0Cj4gPiA+ID4gPgo+ID4g PiA+IHFjb21fZmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW50IHJj Owo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHNldF9mbGFzaF9tb2R1bGVf ZW4obGVkLCBlbmFibGUpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChyYyA8IDApCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiArCj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKGVuYWJsZSkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHNldF9mbGFzaF9zdHJvYmUobGVkLCBIV19TVFJPQkUsIHRy dWUpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGVsc2UKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgcmV0dXJuIHNldF9mbGFzaF9zdHJvYmUobGVkLCBTV19TVFJPQkUsIGZh bHNlKTsKPiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGVudW0gbGVkX2JyaWdo dG5lc3MKPiA+ID4gPiBxY29tX2ZsYXNoX2ludGVuc2l0eV90b19sZWRfYnJpZ2h0bmVzcygKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgc3RydWN0IHY0bDJfZmxhc2ggKnY0 bDJfZmxhc2gsIHMzMiBpbnRlbnNpdHkpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzdHJ1Y3QgbGVkX2NsYXNzZGV2X2ZsYXNoICpmbGFzaCA9IHY0bDJfZmxhc2gtCj4gPiA+ID4g PmZsZWRfY2RldjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9sZWQg KmxlZCA9IGNvbnRhaW5lcl9vZihmbGFzaCwgc3RydWN0Cj4gPiA+ID4gPgo+ID4gPiA+IHFjb21f Zmxhc2hfbGVkLCBmbGFzaCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgdTMyIGN1cnJlbnRfbWEg PSBpbnRlbnNpdHkvIDEwMDA7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGN1cnJl bnRfbWEgPSBtaW5fdCh1MzIsIGN1cnJlbnRfbWEsID4gbGVkLQo+ID4gPiA+ID4gbWF4X3RvcmNo X2N1cnJlbnRfbWEpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmICghY3VycmVudF9tYSkKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIExFRF9PRkY7Cj4gPiA+ ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJldHVybiBjdXJyZW50X21hICogTEVEX0ZVTEwv IGxlZC0KPiA+ID4gPiA+bWF4X3RvcmNoX2N1cnJlbnRfbWE7Cj4gPiA+ID4gK30KPiA+ID4gPiAr Cj4gPiA+ID4gK3N0YXRpYyBzMzIgcWNvbV9mbGFzaF9icmlnaHRuZXNzX3RvX2xlZF9pbnRlbnNp dHkoc3RydWN0Cj4gPiA+ID4gdjRsMl9mbGFzaCA+ICp2NGwyX2ZsYXNoLAo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBlbnVtIGxlZF9icmlnaHRuZXNzID4KPiA+ID4gPiBicmlnaHRuZXNz KQo+ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9jbGFzc2Rldl9m bGFzaCAqZmxhc2ggPSB2NGwyX2ZsYXNoLQo+ID4gPiA+ID5mbGVkX2NkZXY7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgc3RydWN0IHFjb21fZmxhc2hfbGVkICpsZWQgPSBjb250YWluZXJfb2YoZmxh c2gsIHN0cnVjdAo+ID4gPiA+ID4KPiA+ID4gPiBxY29tX2ZsYXNoX2xlZCwgZmxhc2gpOwo+ID4g PiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gKGJyaWdodG5lc3MgKiBsZWQtPm1h eF90b3JjaF9jdXJyZW50X21hICogMTAwMCkKPiA+ID4gPiAvID4KPiA+ID4gPiBMRURfRlVMTDsK PiA+ID4gPiArfQo+ID4gPiA+ICsKPiA+ID4gPiArc3RhdGljIGNvbnN0IHN0cnVjdCB2NGwyX2Zs YXNoX29wcyBxY29tX3Y0bDJfZmxhc2hfb3BzID0gewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoC5l eHRlcm5hbF9zdHJvYmVfc2V0ID0gcWNvbV9mbGFzaF9leHRlcm5hbF9zdHJvYmVfc2V0LAo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoC5pbnRlbnNpdHlfdG9fbGVkX2JyaWdodG5lc3M9ID4KPiA+ID4g PiBxY29tX2ZsYXNoX2ludGVuc2l0eV90b19sZWRfYnJpZ2h0bmVzcywKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAubGVkX2JyaWdodG5lc3NfdG9faW50ZW5zaXR5PSA+Cj4gPiA+ID4gcWNvbV9mbGFz aF9icmlnaHRuZXNzX3RvX2xlZF9pbnRlbnNpdHksCj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4g PiA+ICtzdGF0aWMgaW50IHFjb21fZmxhc2hfdjRsMl9pbml0KHN0cnVjdCBxY29tX2ZsYXNoX2xl ZCAqbGVkLAo+ID4gPiA+IHN0cnVjdAo+ID4gPiA+ID4gZndub2RlX2hhbmRsZSAqZndub2RlKQo+ ID4gPiA+ICt7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHY0bDJfZmxhc2hfY29uZmln IHY0bDJfY2ZnID0gezB9Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfZmxhc2hf c2V0dGluZyAqcyA9ICZ2NGwyX2NmZy5pbnRlbnNpdHk7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGlmICghKGxlZC0+Zmxhc2gubGVkX2NkZXYuZmxhZ3MgJiBMRURfREVWX0NBUF9G TEFTSCkpCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAwOwo+ ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzLT5taW4gPSBzLT5zdGVwID0gVE9SQ0hf SVJFU19VQSAqIGxlZC0+Y2hhbl9jb3VudDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzLT5tYXgg PSBsZWQtPm1heF90b3JjaF9jdXJyZW50X21hICogMTAwMDsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqBzLT52YWwgPSBtaW5fdCh1MzIsIHMtPm1heCwgVE9SQ0hfQ1VSUkVOVF9ERUZBVUxUX1VBKTsK PiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3Ryc2NweSh2NGwyX2NmZy5kZXZfbmFt ZSwgPmxlZC0+Zmxhc2gubGVkX2NkZXYuZGV2LQo+ID4gPiA+ID4ga29iai5uYW1lLAo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzaXplb2YodjRsMl9jZmcuZGV2X25hbQo+ID4gPiA+IGUp KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB2NGwyX2NmZy5oYXNfZXh0ZXJuYWxfc3Ryb2JlPSAx Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHY0bDJfY2ZnLmZsYXNoX2ZhdWx0cyA9IExFRF9GQVVM VF9JTlBVVF9WT0xUQUdFIHwgPgo+ID4gPiA+IExFRF9GQVVMVF9PVkVSX0NVUlJFTlQgfAo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBMRURfRkFVTFRfU0hPUlRfQ0lSQ1VJ VCB8Cj4gPiA+ID4gTEVEX0ZBVUxUX09WRVJfVEVNUEVSQVRVUkUgPiB8IExFRF9GQVVMVF9USU1F T1VUOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBsZWQtPnY0bDJfZmxhc2ggPSB2 NGwyX2ZsYXNoX2luaXQobGVkLT5jaGlwLT5kZXYsCj4gPiA+ID4gZndub2RlLCA+Cj4gPiA+ID4g JmxlZC0+Zmxhc2gsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCZxY29tX3Y0bDJfZmxh c2hfb3BzLCA+Cj4gPiA+ID4gJnY0bDJfY2ZnKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1 cm4gUFRSX0VSUl9PUl9aRVJPKGxlZC0+djRsMl9mbGFzaCk7Cj4gPiA+ID4gK30KPiA+ID4gPiAr IyBlbHNlCj4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF92NGwyX2luaXQoc3RydWN0IHFj b21fZmxhc2hfbGVkICpsZWQsCj4gPiA+ID4gc3RydWN0Cj4gPiA+ID4gPiBmd25vZGVfaGFuZGxl ICpmd25vZGUpCj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gMDsKPiA+ ID4gPiArfQo+ID4gPiA+ICsjZW5kaWYKPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgcWNv bV9mbGFzaF9yZWdpc3Rlcl9sZWRfZGV2aWNlKHN0cnVjdCBkZXZpY2UKPiA+ID4gPiAqcGFyZW50 LAo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgZndub2RlX2hh bmRsZSAqbm9kZSwgc3RydWN0Cj4gPiA+ID4gcWNvbV9mbGFzaF9sZWQgPgo+ID4gPiA+ICpsZWQp Cj4gPiA+ID4gK3sKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9jaGlw ICpjaGlwPSBsZWQtPmNoaXA7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGxlZF9pbml0 X2RhdGEgaW5pdF9kYXRhOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfY2xhc3Nk ZXZfZmxhc2ggKmZsYXNoOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBsZWRfZmxhc2hf c2V0dGluZyAqczsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgY291bnQsIHZhbDsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqB1MzIgY2hhbm5lbHNbNF07Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg aW50IGksIHJjOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBmbGFzaCA9ICZsZWQt PmZsYXNoOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGNvdW50ID0gZndub2RlX3Byb3BlcnR5X2Nv dW50X3UzMihub2RlLCAibGVkLXNvdXJjZXMiKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo Y291bnQgPD0gMCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZXJyKGNoaXAtPmRldiwgIk5vIGxlZC1zb3VyY2VzCj4gPiA+ID4gc3BlY2lmaWVkXG4iKTsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9ERVY7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAo Y291bnQgPiBjaGlwLT5tYXhfY2hhbm5lbHMpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJsZWQtc291cmNlcyBjb3VudCAldQo+ID4g PiA+IGV4Y2VlZHMgPgo+ID4gPiA+IG1heGltdW0gY2hhbm5lbCBjb3VudCAldVxuIiwKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqBjb3VudCwgY2hpcC0+bWF4X2NoYW5uZWxzKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FSU5WQUw7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9y ZWFkX3UzMl9hcnJheShub2RlLCAibGVkLQo+ID4gPiA+IHNvdXJjZXMiLCA+Cj4gPiA+ID4gY2hh bm5lbHMsIGNvdW50KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKSB7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hpcC0+ZGV2LCAiZ2V0 IGxlZC1zb3VyY2VzIGZhaWxlZCwKPiA+ID4gPiByYz0lZFxuIiwgPiByYyk7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiByYzsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGxlZC0+Y2hhbl9jb3VudCA9 IGNvdW50Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGxlZC0+Y2hhbl9pZCA9IGRldm1fa2NhbGxv YyhjaGlwLT5kZXYsIGNvdW50LAo+ID4gPiA+IHNpemVvZih1OCksID4KPiA+ID4gPiBHRlBfS0VS TkVMKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAoIWxlZC0+Y2hhbl9pZCkKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gKwo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGlmIChjaGFubmVsc1tpXSA+IGNoaXAt Pm1heF9jaGFubmVscykgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgZGV2X2VycihjaGlwLT5kZXYsICJsZWQtc291cmNlIG91dCBvZgo+ID4g PiA+IEhXID4KPiA+ID4gPiBzdXBwb3J0IHJhbmdlIFsxLSV1XVxuIiwKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgY2hpcC0+bWF4X2NoYW5uZWxzKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybi1FSU5WQUw7Cj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC0+Y2hhbl9pZFtpXSA9IGNoYW5uZWxzW2ldOwo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg cmMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91MzIobm9kZSwgImxlZC1tYXgtbWljcm9hbXAiLAo+ ID4gPiA+ID4KPiA+ID4gPiAmdmFsKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAw KSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hpcC0+ ZGV2LCAiR2V0IGxlZC1tYXgtbWljcm9hbXAKPiA+ID4gPiBmYWlsZWQsID4KPiA+ID4gPiByYz0l ZFxuIiwgcmMpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4g cmM7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqBpZiAoIXZhbCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBk ZXZfZXJyKGNoaXAtPmRldiwgImxlZC1tYXgtbWljcm9hbXAgc2hvdWxkbid0Cj4gPiA+ID4gYmUg Pgo+ID4gPiA+IDBcbiIpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBy ZXR1cm4gLUVJTlZBTDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoHZhbCA9IG1pbl90KHUzMiwgdmFsLCBUT1JDSF9DVVJSRU5UX01BWF9V QSAqID4gbGVkLQo+ID4gPiA+ID4gY2hhbl9jb3VudCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg bGVkLT5tYXhfdG9yY2hfY3VycmVudF9tYSA9IHZhbCAvIDEwMDA7Cj4gPiA+ID4gKwo+ID4gPiA+ ICvCoMKgwqDCoMKgwqDCoGlmIChmd25vZGVfcHJvcGVydHlfcHJlc2VudChub2RlLCAiZmxhc2gt bWF4LQo+ID4gPiA+IG1pY3JvYW1wIikpIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgZmxhc2gtPmxlZF9jZGV2LmZsYWdzIHw9IExFRF9ERVZfQ0FQX0ZMQVNIOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByYyA9IGZ3bm9kZV9wcm9wZXJ0eV9y ZWFkX3UzMihub2RlLCA+ICJmbGFzaC0KPiA+ID4gPiBtYXgtCj4gPiA+ID4gbWljcm9hbXAiLCAm dmFsKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkg ewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihjaGlwLT5kZXYsICJHZXQgZmxhc2gtbWF4LQo+ID4gPiA+IG1pY3JvYW1wCj4gPiA+ ID4gPiBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm5yYzsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsID0gbWluX3QodTMyLCB2YWwsIEZMQVNIX0NVUlJFTlRfTUFYX1VBICog Pgo+ID4gPiA+IGxlZC0KPiA+ID4gPiA+IGNoYW5fY291bnQpOwo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqB2YWwgPSBtaW5fdCh1MzIsIHZhbCwKPiA+ID4gPiBGTEFTSF9U T1RBTF9DVVJSRU5UX01BWF9VQSk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoHMgPSAmZmxhc2gtPmJyaWdodG5lc3M7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoHMtPm1pbiA9IHMtPnN0ZXAgPSBGTEFTSF9JUkVTX1VBICogbGVkLQo+ID4gPiA+ ID5jaGFuX2NvdW50Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBzLT5t YXggPSB2YWw7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHMtPnZhbCA9 IG1pbl90KHUzMiwgdmFsLAo+ID4gPiA+IEZMQVNIX0NVUlJFTlRfREVGQVVMVF9VQSk7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGxlZC0+bWF4X2ZsYXNoX2N1cnJlbnRf bWEgPSB2YWwgLyAxMDAwOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBs ZWQtPmZsYXNoX2N1cnJlbnRfbWEgPSBzLT52YWwgLyAxMDAwOwo+ID4gPiA+ICsKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBmd25vZGVfcHJvcGVydHlfcmVhZF91 MzIobm9kZSwgPiAiZmxhc2gtCj4gPiA+ID4gbWF4LQo+ID4gPiA+IHRpbWVvdXQtdXMiLCAmdmFs KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2 X2VycihjaGlwLT5kZXYsICJHZXQgZmxhc2gtbWF4LQo+ID4gPiA+IHRpbWVvdXQtCj4gPiA+ID4g dXMgPiBmYWlsZWQsIHJjPSVkXG4iLCByYyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm5yYzsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgdmFsID0gbWluX3QodTMyLCB2YWwsIEZMQVNIX1RJTUVPVVRfTUFYX1VTKTsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcyA9ICZmbGFzaC0+dGltZW91 dDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcy0+bWluID0gcy0+c3Rl cCA9IEZMQVNIX1RJTUVPVVRfU1RFUF9VUzsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgcy0+dmFsID0gcy0+bWF4ID0gdmFsOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBsZWQtPm1heF90aW1lb3V0X21zID0gbGVkLT5mbGFzaF90aW1lb3V0X21z ID0KPiA+ID4gPiB2YWwgLwo+ID4gPiA+ID4gMTAwMDsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGZsYXNoLT5vcHMgPSAmcWNvbV9mbGFzaF9vcHM7Cj4g PiA+ID4gK8KgwqDCoMKgwqDCoMKgfQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBm bGFzaC0+bGVkX2NkZXYuYnJpZ2h0bmVzc19zZXRfYmxvY2tpbmcgPSA+Cj4gPiA+ID4gcWNvbV9m bGFzaF9sZWRfYnJpZ2h0bmVzc19zZXQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdF9kYXRh LmZ3bm9kZSA9IG5vZGU7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaW5pdF9kYXRhLmRldmljZW5h bWUgPSBOVUxMOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGluaXRfZGF0YS5kZWZhdWx0X2xhYmVs ID0gTlVMTDsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpbml0X2RhdGEuZGV2bmFtZV9tYW5kYXRv cnkgPSBmYWxzZTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IGRldm1fbGVkX2NsYXNzZGV2 X2ZsYXNoX3JlZ2lzdGVyX2V4dChwYXJlbnQsCj4gPiA+ID4gZmxhc2gsID4KPiA+ID4gPiAmaW5p dF9kYXRhKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBpZiAocmMgPCAwKSB7Cj4gPiA+ID4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoY2hpcC0+ZGV2LCAiUmVnaXN0ZXIg Zmxhc2ggTEVEIGNsYXNzZGV2Cj4gPiA+ID4gPgo+ID4gPiA+IGZhaWxlZCwgcmM9JWRcbiIsIHJj KTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJjOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0 dXJuIHFjb21fZmxhc2hfdjRsMl9pbml0KGxlZCwgbm9kZSk7Cj4gPiA+ID4gK30KPiA+ID4gPiAr Cj4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9sZWRfcHJvYmUoc3RydWN0IHBsYXRmb3Jt X2RldmljZSAqcGRldikKPiA+ID4gPiArewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBx Y29tX2ZsYXNoX2NoaXAgKmNoaXA7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHFjb21f Zmxhc2hfbGVkICpsZWQ7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IGZ3bm9kZV9oYW5k bGUgKmNoaWxkOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCBkZXZpY2UgKmRldiA9ICZw ZGV2LT5kZXY7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgc3RydWN0IHJlZ21hcCAqbWFwOwo+ID4g PiA+ICvCoMKgwqDCoMKgwqDCoHN0cnVjdCByZWdfZmllbGQgKnJlZ3M7Cj4gPiA+ID4gK8KgwqDC oMKgwqDCoMKgaW50IGNvdW50LCBpLCByYzsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB1MzIgdmFs LCByZWdfYmFzZTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgY2hpcCA9IGRldm1f a3phbGxvYyhkZXYsIHNpemVvZigqY2hpcCksIEdGUF9LRVJORUwpOwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoGlmICghY2hpcCkKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg cmV0dXJuIC1FTk9NRU07Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoG1hcCA9IGRl dl9nZXRfcmVnbWFwKGRldi0+cGFyZW50LCBOVUxMKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBp ZiAoIW1hcCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZfZXJy KGRldiwgIkZhaWxlZCB0byBnZXQgcGFyZW50IHJlZ21hcFxuIik7Cj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmMgPSBmd25vZGVfcHJvcGVy dHlfcmVhZF91MzIoZGV2LT5md25vZGUsICJyZWciLAo+ID4gPiA+ICZyZWdfYmFzZSk7Cj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHJjIDwgMCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqBkZXZfZXJyKGRldiwgIkZhaWxlZCB0byBnZXQgcmVnaXN0ZXIgYmFzZQo+ ID4gPiA+IGFkZHJlc3MsCj4gPiA+ID4gPiByYz0lZFxuIiwgcmMpOwo+ID4gPiA+ICvCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg fQo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByYyA9IHJlZ21hcF9yZWFkKG1hcCwg cmVnX2Jhc2UgKyBGTEFTSF9UWVBFX1JFRywgJnZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg aWYgKHJjIDwgMCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqBkZXZf ZXJyKGRldiwgIlJlYWQgZmxhc2ggbW9kdWxlIHR5cGUgZmFpbGVkLCA+Cj4gPiA+ID4gcmM9JWRc biIsIHJjKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmV0dXJuIHJj Owo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgaWYgKHZhbCAhPSBGTEFTSF9UWVBFX1ZBTCl7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAidHlwZSAlI3ggaXMgbm90IGEgZmxhc2gKPiA+ID4g PiBtb2R1bGVcbiIsID4KPiA+ID4gPiB2YWwpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqByZXR1cm4gLUVOT0RFVjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJjID0gcmVnbWFwX3JlYWQobWFwLCByZWdfYmFz ZSArIEZMQVNIX1NVQlRZUEVfUkVHLAo+ID4gPiA+ICZ2YWwpOwo+ID4gPiA+ICvCoMKgwqDCoMKg wqDCoGlmIChyYyA8IDApIHsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg ZGV2X2VycihkZXYsICJSZWFkIGZsYXNoIG1vZHVsZSBzdWJ0eXBlIGZhaWxlZCwKPiA+ID4gPiA+ Cj4gPiA+ID4gcmM9JWRcbiIsIHJjKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgcmV0dXJuIHJjOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ ID4gK8KgwqDCoMKgwqDCoMKgaWYgKHZhbCA9PSBGTEFTSF9TVUJUWVBFXzNDSF9WQUwpIHsKPiA+ ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+aHdfdHlwZSA9IFFDT01f TVZGTEFTSF8zQ0g7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoGNoaXAt Pm1heF9jaGFubmVscyA9IDM7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oHJlZ3MgPSBtdmZsYXNoXzNjaF9yZWdzOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoH0gZWxzZSBp ZiAodmFsID09IEZMQVNIX1NVQlRZUEVfNENIX1ZBTCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqBjaGlwLT5od190eXBlID0gUUNPTV9NVkZMQVNIXzRDSDsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+bWF4X2NoYW5uZWxzID0gNDsK PiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVncyA9IG12Zmxhc2hfNGNo X3JlZ3M7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSBlbHNlIHsKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZGV2X2VycihkZXYsICJmbGFzaCBzdWJ0eXBlICUjeCBpcyBu b3QgeWV0ID4KPiA+ID4gPiBzdXBwb3J0ZWRcbiIsIHZhbCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRU5PREVWOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDC oH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZm9yIChpID0gMDsgaSA8IFJFR19N QVhfQ09VTlQ7IGkrKykKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmVn c1tpXS5yZWcgKz0gcmVnX2Jhc2U7Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoHJj ID0gZGV2bV9yZWdtYXBfZmllbGRfYnVsa19hbGxvYyhkZXYsIG1hcCwgY2hpcC0KPiA+ID4gPiA+ cl9maWVsZHMsCj4gPiA+ID4gPiByZWdzLCBSRUdfTUFYX0NPVU5UKTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqBpZiAocmMgPCAwKSB7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoGRldl9lcnIoZGV2LCAiZmFpbGVkIHRvIGFsbG9jIHJlZ21hcCBmaWxlZCwKPiA+ID4gPiBy Yz0lZFxuIiwgPiByYyk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJl dHVybiByYzsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB9Cj4gPiA+ID4gKwo+ID4gPiA+ICvCoMKg wqDCoMKgwqDCoGNoaXAtPmRldiA9IGRldjsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBwbGF0Zm9y bV9zZXRfZHJ2ZGF0YShwZGV2LCBjaGlwKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBtdXRleF9p bml0KCZjaGlwLT5sb2NrKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqBjb3VudCA9IGRldmljZV9n ZXRfY2hpbGRfbm9kZV9jb3VudChkZXYpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoGlmIChjb3Vu dCA9PSAwIHx8IGNvdW50ID4gY2hpcC0+bWF4X2NoYW5uZWxzKSB7Cj4gPiA+ID4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoGRldl9lcnIoZGV2LCAiTm8gY2hpbGQgb3IgY2hpbGQgY291 bnQgZXhjZWVkcwo+ID4gPiA+ICVkXG4iLCA+IGNoaXAtPm1heF9jaGFubmVscyk7Cj4gPiA+ID4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHJldHVybiAtRUlOVkFMOwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgY2hpcC0+bGVk cyA9IGRldm1fa2NhbGxvYyhkZXYsIGNvdW50LCBzaXplb2YoKmNoaXAtCj4gPiA+ID4gPmxlZHMp LAo+ID4gPiA+ID4gR0ZQX0tFUk5FTCk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgaWYgKCFjaGlw LT5sZWRzKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqByZXR1cm4gLUVO T01FTTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgZGV2aWNlX2Zvcl9lYWNoX2No aWxkX25vZGUoZGV2LCBjaGlsZCkgewo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqBsZWQgPSAmY2hpcC0+bGVkc1tjaGlwLT5sZWRzX2NvdW50XTsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgbGVkLT5jaGlwID0gY2hpcDsKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgcmMgPSBxY29tX2ZsYXNoX3JlZ2lzdGVyX2xlZF9kZXZp Y2UoZGV2LCBjaGlsZCwKPiA+ID4gPiBsZWQpOwo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqBpZiAocmMgPCAwKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgZ290byByZWxlYXNlOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgY2hpcC0+bGVkc19jb3VudCsrOwo+ID4gPiA+ICvC oMKgwqDCoMKgwqDCoH0KPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJuIDA7 Cj4gPiA+ID4gK3JlbGVhc2U6Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgd2hpbGUgKGNoaXAtPmxl ZHMgJiYgY2hpcC0+bGVkc19jb3VudC0tKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2NGwyX2ZsYXNoX3JlbGVhc2UoY2hpcC0+bGVkc1tjaGlwLQo+ID4gPiA+ID4gbGVk c19jb3VudF0udjRsMl8+IGZsYXNoKTsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqByZXR1cm4gcmM7 Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBpbnQgcWNvbV9mbGFzaF9sZWRf cmVtb3ZlKHN0cnVjdCBwbGF0Zm9ybV9kZXZpY2UgKnBkZXYpCj4gPiA+ID4gK3sKPiA+ID4gPiAr wqDCoMKgwqDCoMKgwqBzdHJ1Y3QgcWNvbV9mbGFzaF9jaGlwICpjaGlwPQo+ID4gPiA+IHBsYXRm b3JtX2dldF9kcnZkYXRhKHBkZXYpOwo+ID4gPiA+ICsKPiA+ID4gPiArwqDCoMKgwqDCoMKgwqB3 aGlsZSAoY2hpcC0+bGVkc19jb3VudC0tKQo+ID4gPiA+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqB2NGwyX2ZsYXNoX3JlbGVhc2UoY2hpcC0+bGVkc1tjaGlwLQo+ID4gPiA+ID4gbGVk c19jb3VudF0udjRsMl8+IGZsYXNoKTsKPiA+ID4gPiArCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKg bXV0ZXhfZGVzdHJveSgmY2hpcC0+bG9jayk7Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgcmV0dXJu IDA7Cj4gPiA+ID4gK30KPiA+ID4gPiArCj4gPiA+ID4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2Zf ZGV2aWNlX2lkIHFjb21fZmxhc2hfbGVkX21hdGNoX3RhYmxlW10KPiA+ID4gPiA9IHsKPiA+ID4g PiArwqDCoMKgwqDCoMKgwqB7IC5jb21wYXRpYmxlID0gInFjb20sc3BtaS1mbGFzaC1sZWQiIH0s Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgeyB9Cj4gPiA+ID4gK307Cj4gPiA+ID4gKwo+ID4gPiA+ ICtzdGF0aWMgc3RydWN0IHBsYXRmb3JtX2RyaXZlciBxY29tX2ZsYXNoX2xlZF9kcml2ZXIgPSB7 Cj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgLmRyaXZlciA9IHsKPiA+ID4gPiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgLm5hbWUgPSAibGVkcy1xY29tLWZsYXNoIiwKPiA+ID4gPiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgLm9mX21hdGNoX3RhYmxlID0gcWNvbV9mbGFzaF9s ZWRfbWF0Y2hfdGFibGUsCj4gPiA+ID4gK8KgwqDCoMKgwqDCoMKgfSwKPiA+ID4gPiArwqDCoMKg wqDCoMKgwqAucHJvYmUgPSBxY29tX2ZsYXNoX2xlZF9wcm9iZSwKPiA+ID4gPiArwqDCoMKgwqDC oMKgwqAucmVtb3ZlID0gcWNvbV9mbGFzaF9sZWRfcmVtb3ZlLAo+ID4gPiA+ICt9Owo+ID4gPiA+ ICsKPiA+ID4gPiArbW9kdWxlX3BsYXRmb3JtX2RyaXZlcihxY29tX2ZsYXNoX2xlZF9kcml2ZXIp Owo+ID4gPiA+ICsKPiA+ID4gPiArTU9EVUxFX0RFU0NSSVBUSU9OKCJRQ09NIEZsYXNoIExFRCBk cml2ZXIiKTsKPiA+ID4gPiArTU9EVUxFX0xJQ0VOU0UoIkdQTCIpOwo+ID4gCj4gPiBLaW5kIHJl Z2FyZHMsCj4gPiBEeWxhbiBWYW4gQXNzY2hlCgpLaW5kIHJlZ2FyZHMsCkR5bGFuIFZhbiBBc3Nj aGUKCg==