From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1741FD2F005 for ; Tue, 27 Jan 2026 12:21:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:Content-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=03/TNag2oeFmFwvqyjB+kQzLi3vpODlNWRLGfAGywOU=; b=FNrFrDSCXztBNJ CsxnbVTVCoppek+s8GaMniaOV9PtIKgHXNpsBv3IPN+StOZnjyxpwJA0KaqvRwWRCIkDk6juiEelx e3RehBpwL1dHKHr7KwIE9SQRXF+YwKLrW6Maga7yzjKUoONn6WHvFMakrUM5z/eYyVtU7nF6d/3mP A1kBmSCd3wovqrNQpA4eg13juFFsxyEf/aHm3F93WZlFdSSzrFN1K4FsnlDzMvT5u1o15gs8Z1bAR lCM7RgnyPMfRCFCAO0psMsoU412bq+aBapKik79Vj5KEs/bulF+wNkMrLgU/hFtckvjQKF96WMkxB XHFiM2TUZjo6D929Jtjg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98.2 #2 (Red Hat Linux)) id 1vki3z-0000000EEa8-2A3M; Tue, 27 Jan 2026 12:20:55 +0000 Received: from mail-pg1-x532.google.com ([2607:f8b0:4864:20::532]) by bombadil.infradead.org with esmtps (Exim 4.98.2 #2 (Red Hat Linux)) id 1vki3v-0000000EEZd-2G9S for linux-riscv@lists.infradead.org; Tue, 27 Jan 2026 12:20:53 +0000 Received: by mail-pg1-x532.google.com with SMTP id 41be03b00d2f7-c5513f598c0so2010538a12.0 for ; Tue, 27 Jan 2026 04:20:50 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1769516449; x=1770121249; darn=lists.infradead.org; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :from:to:cc:subject:date:message-id:reply-to; bh=Fih+roRLG40tyOk+XC1TwdnQrg+MZ7aSiedQ6Fqyf9k=; b=ZU6+DSyqmxToxWZki5o7KhjHavkQD6e918PS2YOJpPG2iMjvlRa/333BG6NtTOrSed drvNCJONQMsURqJdGFOEDYcZ2kUWykmkukuCkqVZ1fqlK6GQFm59XCaYohcO3SDwFYff W4fLKDlJSxAvlS5w4Z3Y1rkM8JhYMXtTb1iZnLVWyXOsb9QlFtz7eYzDy2dOmNxJ8bSF HkX9Qzcpi4/DU0qP0p+TDrVXbBqBIcWGqpdanQeSX+BieIjK+Hblln5nvxBvIXXRd1/p 0BWuTKXh/wVlZJvyutREUAtPKCvRH726kqlTMaf5gwFG5Lbf+O+8CECeTGGqvg2Bj/ZD Bezg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1769516449; x=1770121249; h=content-transfer-encoding:in-reply-to:from:content-language :references:cc:to:subject:user-agent:mime-version:date:message-id :x-gm-gg:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=Fih+roRLG40tyOk+XC1TwdnQrg+MZ7aSiedQ6Fqyf9k=; b=F8WnwgB8whp2bUZycWPqNc5skKY5IFEgL9mqmyg9otzA1pi3pbf6i17PrAIGghJyAu hyTyQahh4GT+z8sR6u3n0ESwOYdInC1h4JGElb6ls6EbdlbvxxC9IxqnoY/Z01BC6gUX 1g9KB0K+lVTmEd76/EppgNDSh3N69u066gPuGGyFAY9hXzfzbAOwe/xYt5Zs+Wr+wQ/H HNT4Fr6UfSKGpr/mribPNN6xjHeT1FyvuNGtN/YMOom7/Q+k+jZv5+sOnng4wvzh/NNK gVnbvrbQbI5WR25znYSx2Y4LAoYHf5bBl6Pw6Icvm0wb7GBwhrxEjzrnHDIY2HwKdcqO 91uw== X-Forwarded-Encrypted: i=1; AJvYcCVX4Gj0SpCAYIuXgbWX8I7H2scwQFNYLw31R9fIqB20WtVzS5sIPFfTnEIwKSrqxIcMRjzpa1jEnBYwug==@lists.infradead.org X-Gm-Message-State: AOJu0YyAdyu08baNA7Umy/0QhtsnrRGH3ZH5p0V8wqYuM+hLwSF9DWXH sKB78fqcLTBIz+tY9JNPumPgMUgIc4ByFgwTPxML2QYq8SiNS8KcPjYQ X-Gm-Gg: AZuq6aI84wbNoB2s8xmaA9iG9gbb2Ya+zofoGkb0nZ+b2OUcdC21hjERpqxdxfB3ZMF MXhgODFfNhw+zPfP8VkYn5XkWGTZMVn13+JYNWYectSvTXrXlu46PxyGYDI9Jk4GDB1fjl0fkRv MGJBLL6Z0kKl5hKolLj/h/1qPb5+RnikqMNfUZbnO+VWGGf5SQN+DaoljjQUUMF+8Dtw92yApfU 8CklDXXzU0ZJp+kP86et9ShJZYWsprTPrtXnydMEtSZXtYnv6oKMwDKci0H9vjGrWg3OwJulRVU OoxSLp1oEb30iRo4GhxtZnY1lsnxZBW7rR+qCoByvs7CQ2N0ZuEkip4ZXfInFmT7SilGAt3Fcwk qoT9SxxQxsPTT1+s8QNeoCIOPZbgP1h40ivYwt3IqZikpWVff1zus0yy1+Wn4ijcBJtXqfPbf3f sOeL9bsFwesLl6 X-Received: by 2002:a17:90a:ee88:b0:353:3f04:1b78 with SMTP id 98e67ed59e1d1-353fecd096emr1055635a91.4.1769516449037; Tue, 27 Jan 2026 04:20:49 -0800 (PST) Received: from [192.168.0.13] ([172.92.174.155]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3536b373f19sm4662545a91.5.2026.01.27.04.20.47 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Tue, 27 Jan 2026 04:20:48 -0800 (PST) Message-ID: Date: Tue, 27 Jan 2026 04:19:18 -0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 02/11] rvtrace: Initial implementation of driver framework To: Anup Patel , Vincent Chen Cc: Anup Patel , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Paul Walmsley , Palmer Dabbelt , Greg KH , Alexander Shishkin , Ian Rogers , Mark Rutland , devicetree@vger.kernel.org, Alexandre Ghiti , Atish Patra , Peter Zijlstra , Adrian Hunter , linux-kernel@vger.kernel.org, Mayuresh Chitale , Ingo Molnar , Jiri Olsa , Mayuresh Chitale , Namhyung Kim , linux-riscv@lists.infradead.org, Andrew Jones , Liang Kan References: <20251002060732.100213-1-apatel@ventanamicro.com> <20251002060732.100213-3-apatel@ventanamicro.com> Content-Language: en-US From: Bo Gan In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260127_042051_684503_B54FC3F3 X-CRM114-Status: GOOD ( 47.32 ) X-BeenThere: linux-riscv@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org SGkgQW51cCwgVmluY2VudCwKCkknbSBhbiBhY3RpdmUgdXNlciBvZiBIaUZpdmUgUHJlbWllciBQ NTUwLiBJJ3ZlIGdvdCBmdWxsIHN5c3RlbSBzdGFjayB0cmFjZQpjb2xsZWN0aW9uIGFuZCBkZWNv ZGluZyB3b3JraW5nIHdpdGg6CgpodHRwczovL2dpdGh1Yi5jb20vZ2FuYm9pbmcvcmlzY3YtdHJh Y2UtdW1kCmh0dHBzOi8vZ2l0aHViLmNvbS9nYW5ib2luZy9saWJuZXh1cy1ydgoKSGVuY2UsIEkn bSBmdWxseSBhd2FyZSBvZiB0aGUgc2l0dWF0aW9uLCBhbmQgdGhlIHNwZWMgZGlmZmVyZW5jZXMg YmV0d2Vlbgp0aGUgcHJlLXJhdGlmaWVkIHNwZWMgKHNpZml2ZSkgYW5kIHRoZSByYXRpZmllZCBv bmUuIEkgc2VlIHRoZSBmb2xsb3dpbmcKcGF0aCBmb3J3YXJkOgoKLSBTdGlsbCBwcmlvcml0aXpl IHRoZSBzdXBwb3J0IGZvciByYXRpZmllZCBzcGVjLCBhbmQgYWRkIHRoZSBmdW5uZWwgY29tcC4K ICAgT25jZSBydnRyYWNlIGZvciAxLjAgaXMgaW4sIHRoZW4gd2UgY2FuIHN0YXJ0IHdvcmtpbmcg b24gc3VwcG9ydGluZyB0aGUKICAgcHJlLXJhdGlmaWVkIG9uZXMuIFRoZXJlIGFyZW4ndCBtYW55 IHBlb3BsZSBpbnRlcmVzdGVkIGluIHJldmlld2luZyBpdCwKICAgZXhjZXB0IE51dHR5LCBSb2Ig YW5kIG1lLCBhbmQgSSdtIHRoZSBvbmx5IG9uZSByZXZpZXdpbmcgdGhlIHJpc2N2IHRyYWNlCiAg IHJlbGF0ZWQgY29kZSwgc28gcGxlYXNlIHN0YXJ0IHJldmlld2luZyBpdCBpZiB5b3UgY2FuIG9y IGdldCBtb3JlIGZvbGtzLgogICBMYXRlc3QgaXMgdjI6IGh0dHBzOi8vbG9yZS5rZXJuZWwub3Jn L2FsbC8yMDI1MTEwMTE1NDI0NS4xNjI0OTItMS1hcGF0ZWxAdmVudGFuYW1pY3JvLmNvbS8KCi0g Rm9yIHByZS1yYXRpZmllZCB0cmFjZSBzeXN0ZW1zIHN1Y2ggYXMgdGhlIG9uZSBpbiBwNTUwLCBJ IGFncmVlIHdpdGgKICAgbW9zdCBvZiB0aGUgY29tbWVudHMgZnJvbSB5b3UgYW5kIEFudXAuIEkg d2FudCB0byBhZGQ6CgpTcGVjaWZpY2FsbHkgZm9yIHRoZSAiU2lmaXZlIFBNVSIgeW91IGFyZSB0 YWxraW5nIGFib3V0LCBJIGRvbid0IHRoaW5rCml0J3MgbmVlZGVkLiBJIGtub3cgcDU1MCBzdXBw b3J0IElDVCAoSW4tQ2lyY3VpdCBUcmFjZSksIHdoaWNoIEkgYXNzdW1lCmlzIHRoZSAiY3VzdG9t IGV2ZW50IiB5b3Ugd2VyZSB0YWxraW5nIGFib3V0LiBCdXQgc3RpbGwsIHRoZXkgYXJlIGVuY29k ZWQKaW4gTi10cmFjZSBmb3JtYXQuIEkgdGhpbmsgdGhpcyBpcyBjbG9zZWx5IHJlbGF0ZWQgdG8g dGhlIHVwY29taW5nIGV2ZW50CnRyYWNlIHNwZWMsIHdoZXJlIHlvdSBvbmx5IGVuYWJsZSBhIHN1 YnNldCBvZiBtZXNzYWdlcyBkdXJpbmcgdHJhY2UgdG8KY2FwdHVyZSBldmVudHMsIHJhdGhlciB0 aGFuIHRoZSB3aG9sZSBjb250cm9sIGZsb3cuIFRodXMsIHdlJ2xsIG5lZWQgYQptb3JlIGdlbmVy aWMgd2F5IG9mIGRlYWxpbmcgd2l0aCBpdC4gSSdkIGxpa2UgdG8gcHJvcG9zZSB0aGF0IHdlIGVt YmVkCnNvbWUgY3J1Y2lhbCB0cmFjZSBpbXBsL3J1bnRpbWUgcGFyYW1ldGVycyBpbiB0aGUgbWV0 YWRhdGEgd2hlbiBwcm9kdWNpbmcKcGVyZi5kYXRhIEUuZy4sIHRoZSB0cmFjZSBmb3JtYXQgKGUt dHJhY2Uvbi10cmFjZSkgZm9yIHN1cmUsIHNvIHRoYXQgZnJvbQphIHBlcmYuZGF0YSwgaXQgY2Fu IGJlIGRlY29kZWQgYW55d2hlcmUgd2l0aG91dCBzcGVjaWZ5aW5nIG90aGVyIHBhcmFtcy4KSSBr bm93IGEgdHlwaWNhbCBOLXRyYWNlIG1heSBub3QgbmVlZCBhbnkgcGFyYW1ldGVycyBleGNlcHQg dGhlIGxlbmd0aCBvZgpzcmNJRCAodHJUZVNyY0JpdHMpLCBidXQgY2xlYXJseSBFLXRyYWNlIHdv dWxkIG5lZWQgbW9yZSwgYW5kIHJlZ2FyZGluZwpldmVudCB0cmFjZSwgd2UgY2FuLCBzYXksIHB1 dCB0aGUgZXZlbnRzIGVuYWJsZWQgYW5kIHNvbWUgdmVuZG9yIHNwZWNpZmljCmluZm8gdGhlcmUu IEZvciB0cmFjZSBjb2xsZWN0aW9uIChpbnZva2luZyBwZXJmKSwgdGhlc2UgdmVuZG9yIHNwZWNp ZmljCmNvbmZpZ3VyYXRpb24gY2FuIGJlIHBhc3NlZCBpbiBzb21lIHZlbmRvciBwYXJhbWV0ZXJz L2ZsYWdzLgoKSSdsbCBjbG9zZWx5IGZvbGxvdyB0aGlzIHNlcmllcywgYW5kIEknbGwganVtcCBp biBmb3IgdGhlIHA1NTAgd29yayBpZiBteQp0aW1lIHBlcm1pdHMuIFRoaXMgcDU1MCAoRUlDNzcw MCkgaXMgdGhlIG9ubHkgc2lsaWNvbiB3aXRoIE4tdHJhY2UgdGhhdCBJCmNhbiBnZXQgbXkgaGFu ZHMgb24sIHNvIGluIGZhY3QgSSdsbCBuZWVkIGl0IHRvIGRvIGEgcmVhbCBFMkUgdGVzdGluZyBv ZgpydnRyYWNlLiBCVFcsIGJld2FyZSB0aGF0IHRoZSBwNTUwIChFSUM3NzAwKSB0cmFjZSBkb2Vz IG5vdCBzdHJpY3RseQpmb2xsb3cgUklTQy1WLVRyYWNlLUNvbnRyb2wtSW50ZXJmYWNlLVByb3Bv c2VkLTIwMjAwNjEyLnBkZi4gSGVuY2UsIHlvdQphY3R1YWxseSBuZWVkIHRvIHJlZmVyIHRvCmh0 dHBzOi8vZ2l0aHViLmNvbS9lc3dpbmNvbXB1dGluZy9FSUM3NzAwWC1Tb0MtVGVjaG5pY2FsLVJl ZmVyZW5jZS1NYW51YWwvcmVsZWFzZXMvZG93bmxvYWQvdjEuMC4wLTIwMjUwMTAzL0VJQzc3MDBY X1NvQ19UZWNobmljYWxfUmVmZXJlbmNlX01hbnVhbF9QYXJ0MS5wZGYKQ2hhcHRlciAzLjQuMS4x OQoKQm8KCk9uIDEvMjYvMjYgMDU6MzYsIEFudXAgUGF0ZWwgd3JvdGU6Cj4gT24gV2VkLCBKYW4g MjEsIDIwMjYgYXQgMToyMeKAr1BNIFZpbmNlbnQgQ2hlbiA8dmluY2VudC5jaGVuQHNpZml2ZS5j b20+IHdyb3RlOgo+Pgo+PiBIaSBBbnVwLAo+Pgo+PiBUaGFuayB5b3UgZm9yIHByb3ZpZGluZyB0 aGUgUlZ0cmFjZSBpbmZyYXN0cnVjdHVyZSBpbiBMaW51eC4gSXQgaXMgZ3JlYXQKPj4gdG8gc2Vl IHN1cHBvcnQgZm9yIG1hbmlwdWxhdGluZyBSSVNDLVYgdHJhY2UgY29tcG9uZW50cyB2aWEgdGhl IExpbnV4Cj4+IHBlcmYgdG9vbC4KPj4KPj4gU2lGaXZlIHByb3ZpZGVzIGEgc2ltaWxhciBpbnN0 cnVjdGlvbiB0cmFjZSBzcGVjaWZpY2F0aW9uIHRoYXQgYWxsb3dzCj4+IHVzZXJzIHRvIGNvbGxl Y3QgcHJvY2Vzc29yIGV4ZWN1dGlvbiBoaXN0b3J5IGFuZCBvdGhlciBldmVudHMgb24gU2lGaXZl Cj4+IHBsYXRmb3Jtcy4gVGhpcyBzcGVjaWZpY2F0aW9uIGlzIGltcGxlbWVudGVkIG9uIHRoZSBI aUZpdmUgUHJlbWllciBQNTUwCj4+IGJvYXJkLiBUaGUgc3BlY2lmaWNhdGlvbiBpcyBhdmFpbGFi bGUgaGVyZToKPj4gaHR0cHM6Ly9saXN0cy5yaXNjdi5vcmcvZy90ZWNoLW5leHVzL2ZpbGVzL1JJ U0MtVi1UcmFjZS1Db250cm9sLUludGVyZmFjZS1Qcm9wb3NlZC0yMDIwMDYxMi5wZGYKPj4KPj4g VGhlIGZ1bmRhbWVudGFsIGNvbmNlcHRzIGJlaGluZCBib3RoIHNwZWNpZmljYXRpb25zIGFyZSBh bGlnbmVkOgo+PiAxLiBCb3RoIGluc3RydWN0aW9uIHRyYWNlIHN5c3RlbXMgYXJlIGNvbXBvc2Vk IG9mIFRyYWNlIEVuY29kZXJzLCBUcmFjZQo+PiAgICAgRnVubmVscywgYW5kIFRyYWNlIFNpbmtz Lgo+PiAgICAgYS4gVHJhY2UgZW5jb2RlcjogRWFjaCBoYXJ0IGhhcyBpdHMgb3duIHRyYWNlIGVu Y29kZXIuIEl0IG1vbml0b3JzCj4+ICAgICAgICB0aGUgaW5ncmVzcyBwb3J0IHRvIHJlY29yZCBh ZGRyZXNzZXMgd2hlcmUgcHJvZ3JhbSBmbG93Cj4+ICAgICAgICBkaXNjb250aW51aXRpZXMgb2Nj dXIuIEl0IGNvbXByZXNzZXMgdGhlIGxvZyB1c2luZyBlaXRoZXIgdGhlCj4+ICAgICAgICBFZmZp Y2llbnQgVHJhY2UgZm9yIFJJU0MtViBvciBSSVNDLVYgTi1UcmFjZSBzcGVjaWZpY2F0aW9uCj4+ ICAgICAgICAoU2lGaXZlIGVuY29kZXJzIHN1cHBvcnQgTmV4dXMtYmFzZWQgdHJhY2Ugb25seSkg YW5kIHRyYW5zbWl0cyBpdAo+PiAgICAgICAgdG8gYSBkb3duc3RyZWFtIFRyYWNlIEZ1bm5lbCBv ciBTaW5rLgo+PiAgICAgYi4gVHJhY2UgZnVubmVsOiBGdW5jdGlvbmFsbHkgaWRlbnRpY2FsIGlu IGJvdGggc3lzdGVtcywgdGhlIGZ1bm5lbAo+PiAgICAgICAgYWdncmVnYXRlcyB0cmFjZXMgZnJv bSBtdWx0aXBsZSBpbnB1dHMgKGVuY29kZXJzIG9yIG90aGVyIGZ1bm5lbHMpCj4+ICAgICAgICBh bmQgZm9yd2FyZHMgdGhlIGNvbWJpbmVkIHN0cmVhbSB0byBhIGRlc2lnbmF0ZWQgc2luay4KPj4g ICAgIGMuIFRyYWNlIHNpbms6IEJvdGggc3BlY2lmaWNhdGlvbnMgc3VwcG9ydCBTUkFNLCBTeXN0 ZW0gTWVtb3J5LCBQSUIsCj4+ICAgICAgICBhbmQgQVRCIEJyaWRnZSBzaW5rcy4KPj4KPj4gMi4g VGhlIGNvbnRyb2wgZmxvdyBmb3Igc3RhcnRpbmcgYW5kIHN0b3BwaW5nIHJlY29yZGluZyBpcyBh bHNvIGNvbnNpc3RlbnQ6Cj4+ICAgICBhLiBTdGFydCB0cmFjaW5nOiBQcm9jZWVkIGZyb20gdGhl IGRvd25zdHJlYW0gc2luayB1cCB0byB0aGUgdHJhY2UKPj4gICAgICAgIGVuY29kZXIgdG8gZW5z dXJlIHNpbmtzIGFyZSByZWFkeSB0byBjYXB0dXJlIGxvZ3MuCj4+ICAgICBiLiBTdG9wIHRyYWNp bmc6IFByb2NlZWQgZnJvbSB0aGUgdHJhY2UgZW5jb2RlciBkb3duIHRvIHRoZSBzaW5rIHRvCj4+ ICAgICAgICBlbnN1cmUgYWxsIGxvZ3MgYXJlIGZsdXNoZWQuCj4gCj4gSXQncyBnb29kIHRoYXQg YXQgaGlnaC1sZXZlbCB0aGUgU2lGaXZlIHRyYWNlIGlzIGNsb3NlIHRvIHRoZSByYXRpZmllZCBS SVNDLVYKPiB0cmFjZSBzbyB3ZSB3b24ndCBoYXZlIG1ham9yIHJlLXdvcmsgaW4gdGhlIHJ2dHJh Y2UgZnJhbWV3b3JrLgo+IAo+Pgo+PiBIb3dldmVyLCB0aGVzZSB0d28gc3BlY2lmaWNhdGlvbnMg aGF2ZSBzb21lIGRpZmZlcmVuY2VzIGluIGltcGxlbWVudGF0aW9uLAo+PiBwcmltYXJpbHkgaW46 Cj4+IDEuIE1NSU8gUmVnaXN0ZXIgRGVmaW5pdGlvbnM6IFdoaWxlIGZ1bmN0aW9uYWxseSBzaW1p bGFyLCB0aGUgcmVnaXN0ZXIKPj4gICAgIGxheW91dHMgZm9yIFNpRml2ZSBlbmNvZGVycyBhbmQg ZnVubmVscyBkaWZmZXIgZnJvbSB0aGUgUklTQy1WCj4+ICAgICBzdGFuZGFyZC4KPiAKPiBUaGUg cnZ0cmFjZSBmcmFtZXdvcmsgKHBhcnRpY3VsYXJseSBydnRyYWNlX3JlZ2lzdGVyX2NvbXBvbmVu dCgpKSBpbXBsaWNpdGx5Cj4gYWNjZXNzZXMgZmV3IHJlZ2lzdGVycyBhc3N1bWluZyBjb21wb25l bnRzIGFyZSBSSVNDLVYgdHJhY2UgY29tcGxpYW50Cj4gd2hpY2ggd2lsbCBicmVhayBmb3IgU2lG aXZlIHRyYWNlIGNvbXBvbmVudHMuIEkgd2lsbCB0cnkgdG8gbWFrZSB0aGUgcnZ0cmFjZQo+IGZy YW1ld29yayBhIGxpdHRsZSBtb3JlIGdlbmVyaWMgaW4gdGhlIG5leHQgcmV2aXNpb24uCj4gCj4+ IDIuIExhY2sgb2YgSW5kZXBlbmRlbnQgU2luayBDb21wb25lbnRzOiBJbiB0aGUgU2lGaXZlIGlt cGxlbWVudGF0aW9uLAo+PiAgICAgc2luayBjb25maWd1cmF0aW9uIHJlZ2lzdGVycyBhcmUgZW1i ZWRkZWQgd2l0aGluIHRoZSB0cmFjZSBlbmNvZGVyIGFuZAo+PiAgICAgZnVubmVsIE1NSU8gcmVn aW9ucywgcmF0aGVyIHRoYW4gZXhpc3RpbmcgYXMgc3RhbmRhbG9uZSBjb21wb25lbnRzLgo+IAo+ IFRoaXMgaXMgZ29pbmcgdG8gYmUgdGhlIGNhc2UgZm9yIHRoZSBzZWxmLWhvc3RlZCB0cmFjZSBh cyB3ZWxsIHNvIHRoaXMKPiBhc3BlY3QgbmVlZHMgdG8gYmUgYWRkcmVzc2VkIGFueXdheSBpbiB0 aGUgZnV0dXJlLgo+IAo+PiAzLiBUcmFjZSBQYXRoIGNvbmZpZ3VyYXRpb246Cj4+ICAgICBhLiBS SVNDLVYgdHJhY2UgY29tcG9uZW50IGlzIGFsbG93ZWQgdG8gcGFzcyBkb3duIHRoZSB0cmFjZSBs b2cgdG8gYQo+PiAgICAgICAgc2luZ2xlIG9yIG11bHRpcGxlIG5leHQtbGV2ZWwgdHJhY2UgY29t cG9uZW50cywgZGVwZW5kaW5nIG9uIHRoZSBIVwo+PiAgICAgICAgY2FwYWJpbGl0aWVzIGFuZCBj b25uZWN0aW9uLiBUaGlzIHRyYWNlIGNvbXBvbmVudCBjYW5ub3QgY29uZmlndXJlCj4+ICAgICAg ICB0aGUgb3V0cHV0IHRhcmdldCB2aWEgdGhlIE1NSU8gcmVnaXN0ZXIsIGJ1dCB0aGUgbmV4dC1s ZXZlbCB0cmFjZQo+PiAgICAgICAgY29tcG9uZW50IGhhcyB0aGUgYWJpbGl0eSB0byBkaXNhYmxl IHRoZSBpbnB1dHMgZnJvbSBhIHNwZWNpZmljCj4+ICAgICAgICB0cmFjZSBjb21wb25lbnQuCj4+ ICAgICBiLiBUaGUgU2lGaXZlIHRyYWNlIGNvbXBvbmVudCBjYW4gb25seSBvdXRwdXQgdGhlIHRy YWNlIGxvZyB0byBhCj4+ICAgICAgICBkZXNpZ25hdGVkIHNpbmssIHdoaWNoIGlzIHNwZWNpZmll ZCBpbiB0aGUgY29ycmVzcG9uZGluZyBNTUlPCj4+ICAgICAgICByZWdpc3Rlci4gVGhlIGRlc2ln bmF0ZWQgc2luayBjYW5ub3QgYmUgY29uZmlndXJlZCB0byBkaXNhYmxlIGFueQo+PiAgICAgICAg aW5wdXQuCj4+IDQuIFNpRml2ZSBjdXN0b21lciBmZWF0dXJlOiBTaUZpdmUgcGxhdGZvcm1zIGlu Y2x1ZGUgY3VzdG9tIGV2ZW50Cj4+ICAgICBjb2xsZWN0aW9uIGNhcGFiaWxpdGllcyB0aGF0IHJl cXVpcmUgYSBkZWRpY2F0ZWQgUE1VIHJlZ2lzdHJhdGlvbiB0bwo+PiAgICAgZXhwb3NlIHZpYSB0 aGUgTGludXggcGVyZiB0b29sLgo+Pgo+PiBHaXZlbiB0aGUgc2ltaWxhcml0aWVzIGluIGNvbnRy b2wgZmxvdywgd2UgcHJvcG9zZSBpbnRlZ3JhdGluZyB0aGUKPj4gU2lGaXZlIHRyYWNlIGRyaXZl ciBpbnRvIHlvdXIgUlZ0cmFjZSBpbmZyYXN0cnVjdHVyZSB0byBhdm9pZCBjb2RlCj4+IGR1cGxp Y2F0aW9uLiBCZWxvdyBpcyBvdXIgcHJvcG9zZWQgaW50ZWdyYXRpb24gYXBwcm9hY2g6Cj4+Cj4+ IDEuIERUIEZpbGUgKERldmljZSBUcmVlKQo+PiAgICAgLSBJbmhlcml0IHRoZSBjdXJyZW50IGR0 LWJpbmRpbmdzIGZvciBSSVNDLVYgdHJhY2UgY29tcG9uZW50cywKPj4gICAgICAgc3BlY2lmaWNh bGx5IHRoZSBpbi1wb3J0cyBhbmQgb3V0LXBvcnRzIGRlc2NyaXB0aW9ucyBmb3IgdG9wb2xvZ3ku Cj4+ICAgICAtIEFkZCAic2lmaXZlLHRyYWNlLWNvbXBvbmVudCIgdG8gdGhlIGNvbXBhdGlibGUg c3RyaW5nIG9mIFNpRml2ZQo+PiAgICAgICBub2Rlcy4KPiAKPiBOZXcgY29tcGF0aWJsZSBzdHJp bmcgaXMgbWFuZGF0b3J5IGJlY2F1c2UgdGhlIFNpRml2ZSB0cmFjZQo+IGNvbXBvbmVudCBpcyBu b3QgZGlyZWN0bHkgY29tcGF0aWJsZSB3aXRoIHRoZSBSSVNDLVYgdHJhY2UgY29tcG9uZW50Lgo+ IAo+PiAgICAgLSBBZGQgYSBuZXcgRFQgcHJvcGVydHkgdG8gaW5kaWNhdGUgdGhlIHNwZWNpZmlj IHR5cGUgb2YgU2lGaXZlIHRyYWNlCj4+ICAgICAgIGNvbXBvbmVudC4gVGhpcyBpcyBuZWNlc3Nh cnkgYmVjYXVzZSB0aGUgY29ycmVzcG9uZGluZyByZWdpc3RlciBpbgo+PiAgICAgICB0aGUgU2lG aXZlIHNwZWNpZmljYXRpb24gZG9lcyBub3QgZXhwb3NlIHRoZSBjb21wb25lbnQncyB0eXBlCj4+ ICAgICAgIChFbmNvZGVyL0Z1bm5lbCkgdG8gc29mdHdhcmUuCj4gCj4gUmF0aGVyIHRoYW4gbmV3 IERUIHByb3BlcnR5LCBJIHdvdWxkIHN1Z2dlc3QgdXNpbmcKPiBzZXBhcmF0ZSBjb21wYXRpYmxl IHN0cmluZ3MgKHN1Y2ggYXMgc2lmaXZlLHRyYWNlLWVuY29kZXIKPiBhbmQgc2lmaXZlLHRyYWNl LWZ1bm5lbCBvciBzb21ldGhpbmcgc2ltaWxhcikuCj4gCj4+IDIuIFBlcmYgVG9vbAo+PiAgICAg LSBSZWdpc3RlciBhIG5ldyBwZXJmIFBNVSBzcGVjaWZpY2FsbHkgZm9yIFNpRml2ZSB0cmFjZS4g VGhpcyBhbHNvCj4+ICAgICAgIGFsbG93cyB1cyB0byBkZWZpbmUgY3VzdG9tIGV2ZW50IGNvbmZp Z3VyYXRpb25zIGZvciBTaUZpdmUtc3BlY2lmaWMKPj4gICAgICAgZmVhdHVyZXMuCj4+ICAgICAt IFRoZSBQZXJmIHRvb2wgd2lsbCBzdXBwb3J0IGJvdGggUE1VcyBzaW11bHRhbmVvdXNseS4gVGhl IGZpbmFsCj4+ICAgICAgIHNlbGVjdGVkIG9wZXJhdGluZyBQTVUgZGVwZW5kcyBvbiB0aGUgUE1V IG5hbWUgaW4gdGhlIHBlcmYgY29tbWFuZAo+PiAgICAgICBhbmQgdGhlIHBsYXRmb3JtIGNhcGFi aWxpdHkuCj4+ICAgICAtIExldmVyYWdlIHRoZSBjYWxsYmFjayBmdW5jdGlvbnMgcmVnaXN0ZXJl ZCB0byAic3RydWN0IGF1eHRyYWNlX3JlY29yZCIKPj4gICAgICAgYXMgbXVjaCBhcyBwb3NzaWJs ZS4KPiAKPiBJTU8sIGEgc2VwYXJhdGUgcGVyZiBQTVUgaW5zdGFuY2UgZm9yIFNpRml2ZSBzaG91 bGQgYmUgdGhlCj4gbGFzdCBvcHRpb24uIFRoaXMgY2VydGFpbmx5IG5lZWRzIG1vcmUgYnJhaW5z dG9ybWluZyBpbiB0aGUKPiBSSVNFIGtlcm5lbCB3b3JraW5nIGdyb3VwLgo+IAo+PiAzLiBMaW51 eCBEZXZpY2UgRHJpdmVyCj4+ICAgICAtIERldmljZSBQcm9iZToKPj4gICAgICAgLSBBZGQgInNp Zml2ZSx0cmFjZS1jb21wb25lbnQiIHRvIHJ2dHJhY2VfcGxhdGZvcm1fbWF0Y2hbXSB0bwo+PiAg ICAgICAgIGVuYWJsZSBydnRyYWNlX3BsYXRmb3JtX3Byb2JlKCkgdG8gc3VwcG9ydCBTaUZpdmUg dHJhY2UKPj4gICAgICAgICBjb21wb25lbnRzLgo+PiAgICAgICAtIFVwZGF0ZSBydnRyYWNlX3Jl Z2lzdGVyX2NvbXBvbmVudCgpIHRvIHN1cHBvcnQgcmVnaXN0ZXJpbmcKPj4gICAgICAgICBTaUZp dmUgZW5jb2RlcnMgYW5kIGZ1bm5lbHMgdG8gdGhlIHJ2dHJhY2UgYnVzLgo+PiAgICAgICAtIFBs YW4gdG8gbGV0IHRoZSBTaUZpdmUgdHJhY2UgZW5jb2RlciBhbmQgZnVubmVsIHNoYXJlIHRoZSBz YW1lCj4+ICAgICAgICAgdHlwZSBJRCBhcyBSSVNDLVYuIEluIHRoaXMgY29uZGl0aW9uLCB0byBl bmFibGUgdGhlIGRyaXZlciB0bwo+PiAgICAgICAgIGRpc3Rpbmd1aXNoIGJldHdlZW4gU2lGaXZl IGFuZCBSSVNDLVYgaGFyZHdhcmUsIGl0IHdvdWxkIGJlCj4+ICAgICAgICAgbmVjZXNzYXJ5IHRv IGFkZCBhIG5ldyB2ZW5kb3IgSUQgZmllbGQgaW50bwo+PiAgICAgICAgICJzdHJ1Y3QgcnZ0cmFj ZV9jb21wb25lbnRfaWQiLgo+PiAgICAgLSBEcml2ZXIgSW1wbGVtZW50YXRpb25zOgo+PiAgICAg ICAtIExpa2Ugb3RoZXIgZHJpdmVycyBvZiBSSVNDLVYgdHJhY2UgY29tcG9uZW50cywgdGhlIFNp Rml2ZSBlbmNvZGVyCj4+ICAgICAgICAgYW5kIGZ1bm5lbCBkcml2ZXIgd2lsbCBpbXBsZW1lbnQg dGhlIHJlcXVpcmVkIGZ1bmN0aW9ucyBpbiB0aGUKPj4gICAgICAgICBydnRyYWNlX2RyaXZlci4K Pj4gICAgIC0gVHJhY2UgRGVsaXZlcnkgUGF0aCAoRW5jb2RlciB0byBTaW5rKToKPj4gICAgICAg LSBUaGlzIGluZnJhc3RydWN0dXJlIGNhbiBiZSB1c2VkIGluIHRoZSBzYW1lIHdheSB0byBlc3Rh Ymxpc2ggdGhlCj4+ICAgICAgICAgdG9wb2xvZ3kgb2YgdGhlIGVudGlyZSB0cmFjZSBzeXN0ZW0g dmlhIHRoZSBEVCBmaWxlLgo+PiAgICAgICAtIEJhc2VkIG9uIHRoZSBzYW1lIHRvcG9sb2d5IGRl c2NyaXB0aW9ucywgdGhlIHRyYWNlIGRlbGl2ZXJ5IHBhdGgKPj4gICAgICAgICBjYW4gdXNlIHRo ZSBzYW1lIGxvZ2ljIHRvIGNyZWF0ZS4KPj4gICAgICAgLSBUaGUgcHJpbWFyeSBkaWZmZXJlbmNl IGxpZXMgaW4gdGhlIHRyYWNlIHBhdGggY29uZmlndXJhdGlvbi4gVG8KPj4gICAgICAgICBhZGRy ZXNzIHRoaXMsIHdlIHByb3Bvc2UgZGVsZWdhdGluZyB0aGUgcGF0aCBjb25maWd1cmF0aW9uIGxv Z2ljCj4+ICAgICAgICAgdG8gdGhlIC5zdGFydCgpIGFuZCAuc3RvcCgpIGNhbGxiYWNrcyBpbiAi c3RydWN0IHJ2dHJhY2VfZHJpdmVyIi4KPj4gICAgICAgICBUaGlzIGFsbG93cyB0aGUgcm91dGlu ZyBpbXBsZW1lbnRhdGlvbiB0byBiZSBlbmNhcHN1bGF0ZWQgd2l0aGluCj4+ICAgICAgICAgdGhl IHNwZWNpZmljIGRyaXZlci4gVG8gc3VwcG9ydCB0aGlzLCB3ZSB3b3VsZCBuZWVkIHRvIHVwZGF0 ZSB0aGUKPj4gICAgICAgICBkZWZpbml0aW9uIG9mIHRoZSAuc3RhcnQoKSBhbmQgLnN0b3AoKSBj YWxsYmFja3MgdG8gYWNjZXB0IHRoZSBhZGphY2VudAo+PiAgICAgICAgIG5vZGUgaW5mb3JtYXRp b24gYXMgYXJndW1lbnRzLCBhbGxvd2luZyB0aGUgZHJpdmVyIHRvIHBlcmZvcm0gdGhlCj4+ICAg ICAgICAgbmVjZXNzYXJ5IE1NSU8gd3JpdGVzIGZvciByb3V0aW5nLgo+Pgo+PiAgICAgLSBTaW5r IE1hbmlwdWxhdGlvbjoKPj4gICAgICAgLSBTdGFuZGFyZCBSSVNDLVY6IE1hbmFnZWQgdGhyb3Vn aCBkZWRpY2F0ZWQgZHJpdmVycyAoaW5pdCBkdXJpbmcKPj4gICAgICAgICBwcm9iZSwgYWNjZXNz IHZpYSBjYWxsYmFja3MgZHVyaW5nIGR1bXApLgo+PiAgICAgICAtIFNpRml2ZSBJbXBsZW1lbnRh dGlvbjogU2luayByZWdzIGFyZSBlbWJlZGRlZCBpbiBFbmNvZGVyL0Z1bm5lbAo+PiAgICAgICAg IE1NSU8uCj4+ICAgICAgIC0gV2UgcHJvcG9zZSB0aGF0IHRoZSBTaUZpdmUgZW5jb2RlciBhbmQg ZnVubmVsIGRyaXZlcnM6Cj4+ICAgICAgICAgYS4gSW5pdGlhbGl6ZSB0aGVpciBzdXBwb3J0ZWQg c2lua3MgZHVyaW5nIHRoZSBkcml2ZXIgcHJvYmUKPj4gICAgICAgICAgICBzZXF1ZW5jZS4KPj4g ICAgICAgICBiLiBJbXBsZW1lbnQgYW5kIHJlZ2lzdGVyIHRoZSBhcHByb3ByaWF0ZSBzaW5rIGFj Y2VzcyBjYWxsYmFja3MsCj4+ICAgICAgICAgICAgZW5zdXJpbmcgdGhleSBhbGlnbiB3aXRoIHRo ZSBzdGFuZGFyZCBwZXJmIGxvZyBkdW1waW5nCj4+ICAgICAgICAgICAgd29ya2Zsb3cuCj4+Cj4+ IERvIHlvdSB0aGluayB0aGUgcHJvcG9zZWQgc29sdXRpb24gaXMgZmVhc2libGU/IEkgd291bGQg YXBwcmVjaWF0ZSB5b3VyCj4+IGZlZWRiYWNrLgo+IAo+IE92ZXJhbGwsIEkgc3VwcG9ydCB0aGUg aWRlYSBvZiBhY2NvbW1vZGF0aW5nIFNpRml2ZSB0cmFjZSB1bmRlcgo+IHRoZSBjb21tb24gcnZ0 cmFjZSBpbmZyYXN0cnVjdHVyZSBiZWNhdXNlIHdlIHdpbGwgYmUgYW55d2F5Cj4gZG9pbmcgdGhl IHNhbWUgdGhpbmcgZm9yIHRoZSB1cGNvbWluZyBzZWxmLWhvc3RlZCB0cmFjZS4KPiAKPiBBdCB0 aGlzIHBvaW50LCBJIGNhbiBvbmx5IHRyeSB0byBlbnN1cmUgdGhlIHJ2dHJhY2UgZnJhbWV3b3Jr IGlzCj4gZ2VuZXJpYyBlbm91Z2guIERlYWxpbmcgd2l0aCBTaUZpdmUgc3BlY2lmaWMgZml0bWVu dCBpc3N1ZXMKPiBzaG91bGQgYmUgZG9uZSBpbmNyZW1lbnRhbGx5IGFzIGEgc2VwYXJhdGUgZXhl cmNpc2UuCj4gCj4gUmVnYXJkcywKPiBBbnVwCj4gCj4+Cj4+IEJlc3QgcmVnYXJkcywKPj4gVmlu Y2VudAo+Pgo+PiBPbiBUaHUsIE9jdCAyLCAyMDI1IGF0IDI6MDnigK9QTSBBbnVwIFBhdGVsIDxh cGF0ZWxAdmVudGFuYW1pY3JvLmNvbT4gd3JvdGU6Cj4+Pgo+Pj4gVGhlIFJJU0MtViBUcmFjZSBD b250cm9sIEludGVyZmFjZSBTcGVjaWZpY2F0aW9uIFsxXSBkZWZpbmVzIGEgc3RhbmRhcmQKPj4+ IHdheSBvZiBpbXBsZW1lbnRpbmcgUklTQy1WIHRyYWNlIHJlbGF0ZWQgbW9kdWxhciBjb21wb25l bnRzIGlycmVzcGVjdGl2ZQo+Pj4gdG8gdW5kZXJseWluZyB0cmFjZSBmb3JtYXQgKEUtdHJhY2Ug b3IgTi10cmFjZSkuIFRoZXNlIFJJU0MtViB0cmFjZQo+Pj4gY29tcG9uZW50cyBhcmUgb3JnYW5p emVkIGluIGEgZ3JhcGgtbGlrZSB0b3BvbG9neSB3aGVyZSBlYWNoIFJJU0MtVgo+Pj4gaGFydCBo YXMgaXRzIG93biBSSVNDLVYgdHJhY2UgZW5jb2RlciBjb21wb25lbnQuCj4+Pgo+Pj4gSW1wbGVt ZW50IGEgYmFzaWMgZHJpdmVyIGZyYW1ld29yayBmb3IgUklTQy1WIHRyYWNlIHdoZXJlIFJJU0Mt ViB0cmFjZQo+Pj4gY29tcG9uZW50cyBhcmUgaW5zdGFudGlhdGVkIGJ5IGEgY29tbW9uIHBsYXRm b3JtIGRyaXZlciBhbmQgYSBzZXBhcmF0ZQo+Pj4gUklTQy1WIHRyYWNlIGRyaXZlciBmb3IgZWFj aCB0eXBlIG9mIFJJU0MtViB0cmFjZSBjb21wb25lbnQuCj4+Pgo+Pj4gWzFdIGh0dHBzOi8vZ2l0 aHViLmNvbS9yaXNjdi1ub24taXNhL3RnLW5leHVzLXRyYWNlL3JlbGVhc2VzL2Rvd25sb2FkLzEu MF9SYXRpZmllZC9SSVNDLVYtVHJhY2UtQ29udHJvbC1JbnRlcmZhY2UucGRmCj4+Pgo+Pj4gQ28t ZGV2ZWxvcGVkLWJ5OiBNYXl1cmVzaCBDaGl0YWxlIDxtY2hpdGFsZUB2ZW50YW5hbWljcm8uY29t Pgo+Pj4gU2lnbmVkLW9mZi1ieTogTWF5dXJlc2ggQ2hpdGFsZSA8bWNoaXRhbGVAdmVudGFuYW1p Y3JvLmNvbT4KPj4+IFNpZ25lZC1vZmYtYnk6IEFudXAgUGF0ZWwgPGFwYXRlbEB2ZW50YW5hbWlj cm8uY29tPgo+Pj4gLS0tCj4+PiAgIGRyaXZlcnMvTWFrZWZpbGUgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIHwgICAxICsKPj4+ICAgZHJpdmVycy9od3RyYWNpbmcvS2NvbmZpZyAgICAgICAg ICAgICAgICAgICAgfCAgIDIgKwo+Pj4gICBkcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL0tjb25m aWcgICAgICAgICAgICB8ICAxNiArCj4+PiAgIGRyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvTWFr ZWZpbGUgICAgICAgICAgIHwgICA0ICsKPj4+ICAgZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9y dnRyYWNlLWNvcmUuYyAgICAgfCA0ODQgKysrKysrKysrKysrKysrKysrKwo+Pj4gICBkcml2ZXJz L2h3dHJhY2luZy9ydnRyYWNlL3J2dHJhY2UtcGxhdGZvcm0uYyB8IDE3NCArKysrKysrCj4+PiAg IGluY2x1ZGUvbGludXgvcnZ0cmFjZS5oICAgICAgICAgICAgICAgICAgICAgIHwgMjcyICsrKysr KysrKysrCj4+PiAgIDcgZmlsZXMgY2hhbmdlZCwgOTUzIGluc2VydGlvbnMoKykKPj4+ICAgY3Jl YXRlIG1vZGUgMTAwNjQ0IGRyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvS2NvbmZpZwo+Pj4gICBj cmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9NYWtlZmlsZQo+Pj4g ICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9ydnRyYWNlLWNv cmUuYwo+Pj4gICBjcmVhdGUgbW9kZSAxMDA2NDQgZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9y dnRyYWNlLXBsYXRmb3JtLmMKPj4+ICAgY3JlYXRlIG1vZGUgMTAwNjQ0IGluY2x1ZGUvbGludXgv cnZ0cmFjZS5oCj4+Pgo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvTWFrZWZpbGUgYi9kcml2ZXJz L01ha2VmaWxlCj4+PiBpbmRleCBiNTc0OWNmNjcwNDQuLjQ2NmE1NTU4MGY2MCAxMDA2NDQKPj4+ IC0tLSBhL2RyaXZlcnMvTWFrZWZpbGUKPj4+ICsrKyBiL2RyaXZlcnMvTWFrZWZpbGUKPj4+IEBA IC0xNzgsNiArMTc4LDcgQEAgb2JqLSQoQ09ORklHX0NPUkVTSUdIVCkgICAgICAgICAgICAgKz0g aHd0cmFjaW5nL2NvcmVzaWdodC8KPj4+ICAgb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAg ICs9IGh3dHJhY2luZy9pbnRlbF90aC8KPj4+ICAgb2JqLSQoQ09ORklHX1NUTSkgICAgICAgICAg ICAgICs9IGh3dHJhY2luZy9zdG0vCj4+PiAgIG9iai0kKENPTkZJR19ISVNJX1BUVCkgICAgICAg ICArPSBod3RyYWNpbmcvcHR0Lwo+Pj4gK29iai0kKENPTkZJR19SVlRSQUNFKSAgICAgICAgICAr PSBod3RyYWNpbmcvcnZ0cmFjZS8KPj4+ICAgb2JqLXkgICAgICAgICAgICAgICAgICAgICAgICAg ICs9IGFuZHJvaWQvCj4+PiAgIG9iai0kKENPTkZJR19OVk1FTSkgICAgICAgICAgICArPSBudm1l bS8KPj4+ICAgb2JqLSQoQ09ORklHX0ZQR0EpICAgICAgICAgICAgICs9IGZwZ2EvCj4+PiBkaWZm IC0tZ2l0IGEvZHJpdmVycy9od3RyYWNpbmcvS2NvbmZpZyBiL2RyaXZlcnMvaHd0cmFjaW5nL0tj b25maWcKPj4+IGluZGV4IDkxMWVlOTc3MTAzYy4uZGFlYjM4ZmUzMzJkIDEwMDY0NAo+Pj4gLS0t IGEvZHJpdmVycy9od3RyYWNpbmcvS2NvbmZpZwo+Pj4gKysrIGIvZHJpdmVycy9od3RyYWNpbmcv S2NvbmZpZwo+Pj4gQEAgLTcsNCArNyw2IEBAIHNvdXJjZSAiZHJpdmVycy9od3RyYWNpbmcvaW50 ZWxfdGgvS2NvbmZpZyIKPj4+Cj4+PiAgIHNvdXJjZSAiZHJpdmVycy9od3RyYWNpbmcvcHR0L0tj b25maWciCj4+Pgo+Pj4gK3NvdXJjZSAiZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9LY29uZmln Igo+Pj4gKwo+Pj4gICBlbmRtZW51Cj4+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9od3RyYWNpbmcv cnZ0cmFjZS9LY29uZmlnIGIvZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9LY29uZmlnCj4+PiBu ZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAwMDAwMDAwMDAwLi5mOGY2ZmVlYTE5NTMK Pj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2RyaXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvS2Nv bmZpZwo+Pj4gQEAgLTAsMCArMSwxNiBAQAo+Pj4gKyMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6 IEdQTC0yLjAtb25seQo+Pj4gKwo+Pj4gK21lbnVjb25maWcgUlZUUkFDRQo+Pj4gKyAgICAgICB0 cmlzdGF0ZSAiUklTQy1WIFRyYWNlIFN1cHBvcnQiCj4+PiArICAgICAgIGRlcGVuZHMgb24gUklT Q1YKPj4+ICsgICAgICAgZGVwZW5kcyBvbiBPRgo+Pj4gKyAgICAgICBkZWZhdWx0IFJJU0NWCj4+ PiArICAgICAgIGhlbHAKPj4+ICsgICAgICAgICBUaGlzIGZyYW1ld29yayBwcm92aWRlcyBhIGtl cm5lbCBpbnRlcmZhY2UgZm9yIHRoZSBSSVNDLVYgdHJhY2UKPj4+ICsgICAgICAgICBkcml2ZXJz IChpbmNsdWRpbmcgYm90aCBlLXRyYWNlIGFuZCBuLXRyYWNlKS4gSXQncyBpbnRlbmRlZCB0bwo+ Pj4gKyAgICAgICAgIGJ1aWxkIGEgdG9wb2xvZ2ljYWwgdmlldyBvZiB0aGUgUklTQy1WIHRyYWNl IGNvbXBvbmVudHMgYW5kCj4+PiArICAgICAgICAgY29uZmlndXJlIHRoZSByaWdodCBzZXJpZXMg b2YgY29tcG9uZW50cyB3aGVuIHRyYWNlIGlzIGVuYWJsZWQKPj4+ICsgICAgICAgICBvbiBhIENQ VS4KPj4+ICsKPj4+ICsgICAgICAgICBUbyBjb21waWxlIHRoaXMgZHJpdmVyIGFzIGEgbW9kdWxl LCBjaG9vc2UgTSBoZXJlOiB0aGUgbW9kdWxlCj4+PiArICAgICAgICAgd2lsbCBiZSBjYWxsZWQg cnZ0cmFjZS4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL01ha2Vm aWxlIGIvZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9NYWtlZmlsZQo+Pj4gbmV3IGZpbGUgbW9k ZSAxMDA2NDQKPj4+IGluZGV4IDAwMDAwMDAwMDAwMC4uOTg4NTI1YTM3OWNmCj4+PiAtLS0gL2Rl di9udWxsCj4+PiArKysgYi9kcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL01ha2VmaWxlCj4+PiBA QCAtMCwwICsxLDQgQEAKPj4+ICsjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+ PiArCj4+PiArb2JqLSQoQ09ORklHX1JWVFJBQ0UpICs9IHJ2dHJhY2Uubwo+Pj4gK3J2dHJhY2Ut eSA6PSBydnRyYWNlLWNvcmUubyBydnRyYWNlLXBsYXRmb3JtLm8KPj4+IGRpZmYgLS1naXQgYS9k cml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL3J2dHJhY2UtY29yZS5jIGIvZHJpdmVycy9od3RyYWNp bmcvcnZ0cmFjZS9ydnRyYWNlLWNvcmUuYwo+Pj4gbmV3IGZpbGUgbW9kZSAxMDA2NDQKPj4+IGlu ZGV4IDAwMDAwMDAwMDAwMC4uNTJlYTkzMTc0NWZjCj4+PiAtLS0gL2Rldi9udWxsCj4+PiArKysg Yi9kcml2ZXJzL2h3dHJhY2luZy9ydnRyYWNlL3J2dHJhY2UtY29yZS5jCj4+PiBAQCAtMCwwICsx LDQ4NCBAQAo+Pj4gKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wCj4+PiArLyoK Pj4+ICsgKiBDb3B5cmlnaHQgKGMpIDIwMjUgVmVudGFuYSBNaWNybyBTeXN0ZW1zIEluYy4KPj4+ ICsgKi8KPj4+ICsKPj4+ICsjaW5jbHVkZSA8bGludXgvY3B1bWFzay5oPgo+Pj4gKyNpbmNsdWRl IDxsaW51eC9kZWxheS5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9leHBvcnQuaD4KPj4+ICsjaW5j bHVkZSA8bGludXgvaWRyLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPgo+Pj4gKyNp bmNsdWRlIDxsaW51eC9tdXRleC5oPgo+Pj4gKyNpbmNsdWRlIDxsaW51eC9wZXJjcHUuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvcnZ0cmFjZS5oPgo+Pj4gKwo+Pj4gKy8qIE11dGV4IHRvIHNlcmlh bGl6ZSBjb21wb25lbnQgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uICovCj4+PiArc3RhdGlj IERFRklORV9NVVRFWChydnRyYWNlX211dGV4KTsKPj4+ICsKPj4+ICsvKiBQZXItQ1BVIGVuY29k ZXIgaW5zdGFuY2VzICovCj4+PiArc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCBydnRyYWNl X2NvbXBvbmVudCAqLCBydnRyYWNlX2NwdV9lbmNvZGVyKTsKPj4+ICsKPj4+ICsvKiBDb21wb25l bnQgdHlwZSBiYXNlZCBpZCBnZW5lcmF0b3IgKi8KPj4+ICtzdHJ1Y3QgcnZ0cmFjZV90eXBlX2lk eCB7Cj4+PiArICAgICAgIC8qIExvY2sgdG8gcHJvdGVjdCB0aGUgdHlwZSBJRCBnZW5lcmF0b3Ig Ki8KPj4+ICsgICAgICAgc3RydWN0IG11dGV4IGxvY2s7Cj4+PiArICAgICAgIHN0cnVjdCBpZHIg aWRyOwo+Pj4gK307Cj4+PiArCj4+PiArLyogQXJyYXkgb2YgY29tcG9uZW50IHR5cGUgYmFzZWQg aWQgZ2VuZXJhdG9yICovCj4+PiArc3RhdGljIHN0cnVjdCBydnRyYWNlX3R5cGVfaWR4IHJ2dHJh Y2VfdHlwZV9pZHhfYXJyYXlbUlZUUkFDRV9DT01QT05FTlRfVFlQRV9NQVhdOwo+Pj4gKwo+Pj4g K3N0YXRpYyBpbnQgcnZ0cmFjZV9hbGxvY190eXBlX2lkeChzdHJ1Y3QgcnZ0cmFjZV9jb21wb25l bnQgKmNvbXApCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV90eXBlX2lkeCAqcnZp ZHggPSAmcnZ0cmFjZV90eXBlX2lkeF9hcnJheVtjb21wLT5pZC50eXBlXTsKPj4+ICsgICAgICAg aW50IGlkeDsKPj4+ICsKPj4+ICsgICAgICAgbXV0ZXhfbG9jaygmcnZpZHgtPmxvY2spOwo+Pj4g KyAgICAgICBpZHggPSBpZHJfYWxsb2MoJnJ2aWR4LT5pZHIsIGNvbXAsIDAsIDAsIEdGUF9LRVJO RUwpOwo+Pj4gKyAgICAgICBtdXRleF91bmxvY2soJnJ2aWR4LT5sb2NrKTsKPj4+ICsgICAgICAg aWYgKGlkeCA8IDApCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIGlkeDsKPj4+ICsKPj4+ICsg ICAgICAgY29tcC0+dHlwZV9pZHggPSBpZHg7Cj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30K Pj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBydnRyYWNlX2ZyZWVfdHlwZV9pZHgoc3RydWN0IHJ2dHJh Y2VfY29tcG9uZW50ICpjb21wKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfdHlw ZV9pZHggKnJ2aWR4ID0gJnJ2dHJhY2VfdHlwZV9pZHhfYXJyYXlbY29tcC0+aWQudHlwZV07Cj4+ PiArCj4+PiArICAgICAgIG11dGV4X2xvY2soJnJ2aWR4LT5sb2NrKTsKPj4+ICsgICAgICAgaWRy X3JlbW92ZSgmcnZpZHgtPmlkciwgY29tcC0+dHlwZV9pZHgpOwo+Pj4gKyAgICAgICBtdXRleF91 bmxvY2soJnJ2aWR4LT5sb2NrKTsKPj4+ICt9Cj4+PiArCj4+PiArc3RhdGljIHZvaWQgX19pbml0 IHJ2dHJhY2VfaW5pdF90eXBlX2lkeCh2b2lkKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IHJ2 dHJhY2VfdHlwZV9pZHggKnJ2aWR4Owo+Pj4gKyAgICAgICBpbnQgaTsKPj4+ICsKPj4+ICsgICAg ICAgZm9yIChpID0gMDsgaSA8IFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfTUFYOyBpKyspIHsKPj4+ ICsgICAgICAgICAgICAgICBydmlkeCA9ICZydnRyYWNlX3R5cGVfaWR4X2FycmF5W2ldOwo+Pj4g KyAgICAgICAgICAgICAgIG11dGV4X2luaXQoJnJ2aWR4LT5sb2NrKTsKPj4+ICsgICAgICAgICAg ICAgICBpZHJfaW5pdCgmcnZpZHgtPmlkcik7Cj4+PiArICAgICAgIH0KPj4+ICt9Cj4+PiArCj4+ PiArY29uc3Qgc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50X2lkICpydnRyYWNlX21hdGNoX2lkKHN0 cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdHJ1Y3QgcnZ0cmFjZV9jb21wb25l bnRfaWQgKmlkcykKPj4+ICt7Cj4+PiArICAgICAgIGNvbnN0IHN0cnVjdCBydnRyYWNlX2NvbXBv bmVudF9pZCAqaWQ7Cj4+PiArCj4+PiArICAgICAgIGZvciAoaWQgPSBpZHM7IGlkLT52ZXJzaW9u ICYmIGlkLT50eXBlOyBpZCsrKSB7Cj4+PiArICAgICAgICAgICAgICAgaWYgKGNvbXAtPmlkLnR5 cGUgPT0gaWQtPnR5cGUgJiYKPj4+ICsgICAgICAgICAgICAgICAgICAgY29tcC0+aWQudmVyc2lv biA9PSBpZC0+dmVyc2lvbikKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpZDsK Pj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4gTlVMTDsKPj4+ICt9Cj4+PiAr RVhQT1JUX1NZTUJPTF9HUEwocnZ0cmFjZV9tYXRjaF9pZCk7Cj4+PiArCj4+PiArc3RhdGljIGlu dCBydnRyYWNlX21hdGNoX2RldmljZShzdHJ1Y3QgZGV2aWNlICpkZXYsIGNvbnN0IHN0cnVjdCBk ZXZpY2VfZHJpdmVyICpkcnYpCj4+PiArewo+Pj4gKyAgICAgICBjb25zdCBzdHJ1Y3QgcnZ0cmFj ZV9kcml2ZXIgKnJ0ZHJ2ID0gdG9fcnZ0cmFjZV9kcml2ZXIoZHJ2KTsKPj4+ICsgICAgICAgc3Ry dWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wID0gdG9fcnZ0cmFjZV9jb21wb25lbnQoZGV2KTsK Pj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIHJ2dHJhY2VfbWF0Y2hfaWQoY29tcCwgcnRkcnYtPmlk X3RhYmxlKSA/IDEgOiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHJ2dHJhY2VfcHJv YmUoc3RydWN0IGRldmljZSAqZGV2KQo+Pj4gK3sKPj4+ICsgICAgICAgY29uc3Qgc3RydWN0IHJ2 dHJhY2VfZHJpdmVyICpydGRydiA9IHRvX3J2dHJhY2VfZHJpdmVyKGRldi0+ZHJpdmVyKTsKPj4+ ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wID0gdG9fcnZ0cmFjZV9jb21w b25lbnQoZGV2KTsKPj4+ICsgICAgICAgaW50IHJldCA9IC1FTk9ERVY7Cj4+PiArCj4+PiArICAg ICAgIGlmICghcnRkcnYtPnByb2JlKQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ PiArCj4+PiArICAgICAgIHJldCA9IHJ0ZHJ2LT5wcm9iZShjb21wKTsKPj4+ICsgICAgICAgaWYg KCFyZXQpCj4+PiArICAgICAgICAgICAgICAgY29tcC0+cmVhZHkgPSB0cnVlOwo+Pj4gKwo+Pj4g KyAgICAgICByZXR1cm4gcmV0Owo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBydnRyYWNl X3JlbW92ZShzdHJ1Y3QgZGV2aWNlICpkZXYpCj4+PiArewo+Pj4gKyAgICAgICBjb25zdCBzdHJ1 Y3QgcnZ0cmFjZV9kcml2ZXIgKnJ0ZHJ2ID0gdG9fcnZ0cmFjZV9kcml2ZXIoZGV2LT5kcml2ZXIp Owo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnQgKmNvbXAgPSB0b19ydnRyYWNl X2NvbXBvbmVudChkZXYpOwo+Pj4gKwo+Pj4gKyAgICAgICBjb21wLT5yZWFkeSA9IGZhbHNlOwo+ Pj4gKyAgICAgICBpZiAocnRkcnYtPnJlbW92ZSkKPj4+ICsgICAgICAgICAgICAgICBydGRydi0+ cmVtb3ZlKGNvbXApOwo+Pj4gK30KPj4+ICsKPj4+ICtjb25zdCBzdHJ1Y3QgYnVzX3R5cGUgcnZ0 cmFjZV9idXN0eXBlID0gewo+Pj4gKyAgICAgICAubmFtZSAgID0gInJ2dHJhY2UiLAo+Pj4gKyAg ICAgICAubWF0Y2ggID0gcnZ0cmFjZV9tYXRjaF9kZXZpY2UsCj4+PiArICAgICAgIC5wcm9iZSAg PSBydnRyYWNlX3Byb2JlLAo+Pj4gKyAgICAgICAucmVtb3ZlID0gcnZ0cmFjZV9yZW1vdmUsCj4+ PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3QgcnZ0cmFjZV9md25vZGVfbWF0Y2hfZGF0YSB7Cj4+PiAr ICAgICAgIHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25vZGU7Cj4+PiArICAgICAgIHN0cnVjdCBy dnRyYWNlX2NvbXBvbmVudCAqbWF0Y2g7Cj4+PiArfTsKPj4+ICsKPj4+ICtzdGF0aWMgaW50IHJ2 dHJhY2VfbWF0Y2hfZndub2RlKHN0cnVjdCBkZXZpY2UgKmRldiwgdm9pZCAqZGF0YSkKPj4+ICt7 Cj4+PiArICAgICAgIHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCA9IHRvX3J2dHJhY2Vf Y29tcG9uZW50KGRldik7Cj4+PiArICAgICAgIHN0cnVjdCBydnRyYWNlX2Z3bm9kZV9tYXRjaF9k YXRhICpkID0gZGF0YTsKPj4+ICsKPj4+ICsgICAgICAgaWYgKGRldmljZV9tYXRjaF9md25vZGUo JmNvbXAtPmRldiwgZC0+Zndub2RlKSkgewo+Pj4gKyAgICAgICAgICAgICAgIGQtPm1hdGNoID0g Y29tcDsKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gMTsKPj4+ICsgICAgICAgfQo+Pj4gKwo+ Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiArc3RydWN0IHJ2dHJhY2VfY29t cG9uZW50ICpydnRyYWNlX2ZpbmRfYnlfZndub2RlKHN0cnVjdCBmd25vZGVfaGFuZGxlICpmd25v ZGUpCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9md25vZGVfbWF0Y2hfZGF0YSBk ID0geyAuZndub2RlID0gZndub2RlLCAubWF0Y2ggPSBOVUxMIH07Cj4+PiArICAgICAgIGludCBy ZXQ7Cj4+PiArCj4+PiArICAgICAgIHJldCA9IGJ1c19mb3JfZWFjaF9kZXYoJnJ2dHJhY2VfYnVz dHlwZSwgTlVMTCwgJmQsIHJ2dHJhY2VfbWF0Y2hfZndub2RlKTsKPj4+ICsgICAgICAgaWYgKHJl dCA8IDApCj4+PiArICAgICAgICAgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+ICsKPj4+ ICsgICAgICAgcmV0dXJuIGQubWF0Y2g7Cj4+PiArfQo+Pj4gK0VYUE9SVF9TWU1CT0xfR1BMKHJ2 dHJhY2VfZmluZF9ieV9md25vZGUpOwo+Pj4gKwo+Pj4gK2ludCBydnRyYWNlX3BvbGxfYml0KHN0 cnVjdCBydnRyYWNlX3BsYXRmb3JtX2RhdGEgKnBkYXRhLCBpbnQgb2Zmc2V0LAo+Pj4gKyAgICAg ICAgICAgICAgICAgICAgaW50IGJpdCwgaW50IGJpdHZhbCwgaW50IHRpbWVvdXQpCj4+PiArewo+ Pj4gKyAgICAgICBpbnQgaSA9IDEwOwo+Pj4gKyAgICAgICB1MzIgdmFsOwo+Pj4gKwo+Pj4gKyAg ICAgICB3aGlsZSAoaS0tKSB7Cj4+PiArICAgICAgICAgICAgICAgdmFsID0gcnZ0cmFjZV9yZWFk MzIocGRhdGEsIG9mZnNldCk7Cj4+PiArICAgICAgICAgICAgICAgaWYgKCgodmFsID4+IGJpdCkg JiAweDEpID09IGJpdHZhbCkKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4g KyAgICAgICAgICAgICAgIHVkZWxheSh0aW1lb3V0KTsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4g KyAgICAgICByZXR1cm4gKGkgPCAwKSA/IC1FVElNRURPVVQgOiAwOwo+Pj4gK30KPj4+ICtFWFBP UlRfU1lNQk9MX0dQTChydnRyYWNlX3BvbGxfYml0KTsKPj4+ICsKPj4+ICtpbnQgcnZ0cmFjZV9l bmFibGVfY29tcG9uZW50KHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCkKPj4+ICt7Cj4+ PiArICAgICAgIHUzMiB2YWw7Cj4+PiArCj4+PiArICAgICAgIHZhbCA9IHJ2dHJhY2VfcmVhZDMy KGNvbXAtPnBkYXRhLCBSVlRSQUNFX0NPTVBPTkVOVF9DVFJMX09GRlNFVCk7Cj4+PiArICAgICAg IHZhbCB8PSBCSVQoUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9FTkFCTEVfU0hJRlQpOwo+Pj4gKyAg ICAgICBydnRyYWNlX3dyaXRlMzIoY29tcC0+cGRhdGEsIHZhbCwgUlZUUkFDRV9DT01QT05FTlRf Q1RSTF9PRkZTRVQpOwo+Pj4gKyAgICAgICByZXR1cm4gcnZ0cmFjZV9wb2xsX2JpdChjb21wLT5w ZGF0YSwgUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9PRkZTRVQsCj4+PiArICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfRU5BQkxFX1NISUZULCAxLAo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wLT5wZGF0YS0+Y29udHJvbF9w b2xsX3RpbWVvdXRfdXNlY3MpOwo+Pj4gK30KPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChydnRyYWNl X2VuYWJsZV9jb21wb25lbnQpOwo+Pj4gKwo+Pj4gK2ludCBydnRyYWNlX2Rpc2FibGVfY29tcG9u ZW50KHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCkKPj4+ICt7Cj4+PiArICAgICAgIHUz MiB2YWw7Cj4+PiArCj4+PiArICAgICAgIHZhbCA9IHJ2dHJhY2VfcmVhZDMyKGNvbXAtPnBkYXRh LCBSVlRSQUNFX0NPTVBPTkVOVF9DVFJMX09GRlNFVCk7Cj4+PiArICAgICAgIHZhbCAmPSB+QklU KFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfRU5BQkxFX1NISUZUKTsKPj4+ICsgICAgICAgcnZ0cmFj ZV93cml0ZTMyKGNvbXAtPnBkYXRhLCB2YWwsIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfT0ZGU0VU KTsKPj4+ICsgICAgICAgcmV0dXJuIHJ2dHJhY2VfcG9sbF9iaXQoY29tcC0+cGRhdGEsIFJWVFJB Q0VfQ09NUE9ORU5UX0NUUkxfT0ZGU0VULAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBSVlRSQUNFX0NPTVBPTkVOVF9DVFJMX0VOQUJMRV9TSElGVCwgMCwKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgY29tcC0+cGRhdGEtPmNvbnRyb2xfcG9sbF90aW1lb3V0 X3VzZWNzKTsKPj4+ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwocnZ0cmFjZV9kaXNhYmxlX2Nv bXBvbmVudCk7Cj4+PiArCj4+PiArc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpydnRyYWNlX2Nw dV9zb3VyY2UodW5zaWduZWQgaW50IGNwdSkKPj4+ICt7Cj4+PiArICAgICAgIGlmICghY3B1X3By ZXNlbnQoY3B1KSkKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gTlVMTDsKPj4+ICsKPj4+ICsg ICAgICAgcmV0dXJuIHBlcl9jcHUocnZ0cmFjZV9jcHVfZW5jb2RlciwgY3B1KTsKPj4+ICt9Cj4+ PiArRVhQT1JUX1NZTUJPTF9HUEwocnZ0cmFjZV9jcHVfc291cmNlKTsKPj4+ICsKPj4+ICtzdGF0 aWMgaW50IHJ2dHJhY2VfY2xlYW51cF9pbmNvbm4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wID0g dG9fcnZ0cmFjZV9jb21wb25lbnQoZGV2KTsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfcGxh dGZvcm1fZGF0YSAqcGRhdGEgPSBjb21wLT5wZGF0YTsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJh Y2VfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7Cj4+PiArICAgICAgIGludCBpOwo+Pj4gKwo+Pj4g KyAgICAgICBpZiAoZGV2aWNlX21hdGNoX2Z3bm9kZSgmY29tcC0+ZGV2LCBjb25uLT5kZXN0X2Z3 bm9kZSkpIHsKPj4+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5yX2lu Y29ubnM7IGkrKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkYXRhLT5pbmNv bm5zW2ldICE9IGNvbm4pCj4+PiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRp bnVlOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcGRhdGEtPmluY29ubnNbaV0gPSBOVUxM Owo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDE7Cj4+PiArICAgICAgICAgICAg ICAgfQo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ ICsKPj4+ICtzdGF0aWMgdm9pZCBydnRyYWNlX2NsZWFudXBfaW5jb25uc19mcm9tX291dGNvbm5z KHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCkKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVj dCBydnRyYWNlX3BsYXRmb3JtX2RhdGEgKnBkYXRhID0gY29tcC0+cGRhdGE7Cj4+PiArICAgICAg IHN0cnVjdCBydnRyYWNlX2Nvbm5lY3Rpb24gKmNvbm47Cj4+PiArICAgICAgIGludCBpOwo+Pj4g Kwo+Pj4gKyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkKCZydnRyYWNlX211dGV4KTsKPj4+ICsK Pj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9vdXRjb25uczsgaSsrKSB7Cj4+ PiArICAgICAgICAgICAgICAgY29ubiA9IHBkYXRhLT5vdXRjb25uc1tpXTsKPj4+ICsgICAgICAg ICAgICAgICBidXNfZm9yX2VhY2hfZGV2KCZydnRyYWNlX2J1c3R5cGUsIE5VTEwsIGNvbm4sIHJ2 dHJhY2VfY2xlYW51cF9pbmNvbm4pOwo+Pj4gKyAgICAgICB9Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0 YXRpYyBpbnQgcnZ0cmFjZV9zZXR1cF9pbmNvbm4oc3RydWN0IGRldmljZSAqZGV2LCB2b2lkICpk YXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wID0g dG9fcnZ0cmFjZV9jb21wb25lbnQoZGV2KTsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfcGxh dGZvcm1fZGF0YSAqcGRhdGEgPSBjb21wLT5wZGF0YTsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJh Y2VfY29ubmVjdGlvbiAqY29ubiA9IGRhdGE7Cj4+PiArICAgICAgIGludCBpOwo+Pj4gKwo+Pj4g KyAgICAgICBpZiAoZGV2aWNlX21hdGNoX2Z3bm9kZSgmY29tcC0+ZGV2LCBjb25uLT5kZXN0X2Z3 bm9kZSkpIHsKPj4+ICsgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgcGRhdGEtPm5yX2lu Y29ubnM7IGkrKykgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkYXRhLT5pbmNv bm5zW2ldKQo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKPj4+ ICsgICAgICAgICAgICAgICAgICAgICAgIHBkYXRhLT5pbmNvbm5zW2ldID0gY29ubjsKPj4+ICsg ICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAxOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICByZXR1cm4gMDsKPj4+ICt9Cj4+PiArCj4+PiAr c3RhdGljIGludCBydnRyYWNlX3NldHVwX2luY29ubnNfZnJvbV9vdXRjb25ucyhzdHJ1Y3QgcnZ0 cmFjZV9jb21wb25lbnQgKmNvbXApCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9w bGF0Zm9ybV9kYXRhICpwZGF0YSA9IGNvbXAtPnBkYXRhOwo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0 cmFjZV9jb25uZWN0aW9uICpjb25uOwo+Pj4gKyAgICAgICBpbnQgaSwgcmV0Owo+Pj4gKwo+Pj4g KyAgICAgICBsb2NrZGVwX2Fzc2VydF9oZWxkKCZydnRyYWNlX211dGV4KTsKPj4+ICsKPj4+ICsg ICAgICAgZm9yIChpID0gMDsgaSA8IHBkYXRhLT5ucl9vdXRjb25uczsgaSsrKSB7Cj4+PiArICAg ICAgICAgICAgICAgY29ubiA9IHBkYXRhLT5vdXRjb25uc1tpXTsKPj4+ICsgICAgICAgICAgICAg ICByZXQgPSBidXNfZm9yX2VhY2hfZGV2KCZydnRyYWNlX2J1c3R5cGUsIE5VTEwsIGNvbm4sIHJ2 dHJhY2Vfc2V0dXBfaW5jb25uKTsKPj4+ICsgICAgICAgICAgICAgICBpZiAocmV0IDwgMCkgewo+ Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgcnZ0cmFjZV9jbGVhbnVwX2luY29ubnNfZnJvbV9v dXRjb25ucyhjb21wKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXQ7Cj4+ PiArICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIHJldHVy biAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBydnRyYWNlX2NvbXBvbmVudF9yZWxl YXNlKHN0cnVjdCBkZXZpY2UgKmRldikKPj4+ICt7Cj4+PiArICAgICAgIHN0cnVjdCBydnRyYWNl X2NvbXBvbmVudCAqY29tcCA9IHRvX3J2dHJhY2VfY29tcG9uZW50KGRldik7Cj4+PiArCj4+PiAr ICAgICAgIGZ3bm9kZV9oYW5kbGVfcHV0KGNvbXAtPmRldi5md25vZGUpOwo+Pj4gKyAgICAgICBy dnRyYWNlX2ZyZWVfdHlwZV9pZHgoY29tcCk7Cj4+PiArICAgICAgIGtmcmVlKGNvbXApOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW50IHJ2dHJhY2VfY29tcG9uZW50X3Jlc2V0KHN0cnVjdCBy dnRyYWNlX3BsYXRmb3JtX2RhdGEgKnBkYXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgaW50IHJldDsK Pj4+ICsKPj4+ICsgICAgICAgcnZ0cmFjZV93cml0ZTMyKHBkYXRhLCAwLCBSVlRSQUNFX0NPTVBP TkVOVF9DVFJMX09GRlNFVCk7Cj4+PiArICAgICAgIHJldCA9IHJ2dHJhY2VfcG9sbF9iaXQocGRh dGEsIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfT0ZGU0VULAo+Pj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfQUNUSVZFX1NISUZULCAwLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBkYXRhLT5jb250cm9sX3BvbGxfdGltZW91 dF91c2Vjcyk7Cj4+PiArICAgICAgIGlmIChyZXQpCj4+PiArICAgICAgICAgICAgICAgcmV0dXJu IHJldDsKPj4+ICsKPj4+ICsgICAgICAgcnZ0cmFjZV93cml0ZTMyKHBkYXRhLCBSVlRSQUNFX0NP TVBPTkVOVF9DVFJMX0FDVElWRV9NQVNLLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgUlZU UkFDRV9DT01QT05FTlRfQ1RSTF9PRkZTRVQpOwo+Pj4gKyAgICAgICByZXR1cm4gcnZ0cmFjZV9w b2xsX2JpdChwZGF0YSwgUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9PRkZTRVQsCj4+PiArICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxfQUNUSVZFX1NI SUZULCAxLAo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwZGF0YS0+Y29udHJv bF9wb2xsX3RpbWVvdXRfdXNlY3MpOwo+Pj4gK30KPj4+ICsKPj4+ICtzdHJ1Y3QgcnZ0cmFjZV9j b21wb25lbnQgKnJ2dHJhY2VfcmVnaXN0ZXJfY29tcG9uZW50KHN0cnVjdCBydnRyYWNlX3BsYXRm b3JtX2RhdGEgKnBkYXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29ubmVj dGlvbiAqY29ubjsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wOwo+ Pj4gKyAgICAgICB1MzIgaW1wbCwgdHlwZSwgbWFqb3IsIG1pbm9yOwo+Pj4gKyAgICAgICBpbnQg aSwgcmV0ID0gMDsKPj4+ICsKPj4+ICsgICAgICAgaWYgKCFwZGF0YSB8fCAhcGRhdGEtPmRldikg ewo+Pj4gKyAgICAgICAgICAgICAgIHJldCA9IC1FSU5WQUw7Cj4+PiArICAgICAgICAgICAgICAg Z290byBlcnJfb3V0Owo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIGZvciAoaSA9IDA7 IGkgPCBwZGF0YS0+bnJfaW5jb25uczsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgICAgaWYgKHBk YXRhLT5pbmNvbm5zW2ldKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICByZXQgPSAtRUlO VkFMOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgZ290byBlcnJfb3V0Owo+Pj4gKyAgICAg ICAgICAgICAgIH0KPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICBmb3IgKGkgPSAwOyBp IDwgcGRhdGEtPm5yX291dGNvbm5zOyBpKyspIHsKPj4+ICsgICAgICAgICAgICAgICBjb25uID0g cGRhdGEtPm91dGNvbm5zW2ldOwo+Pj4gKyAgICAgICAgICAgICAgIGlmICghY29ubiB8fCBjb25u LT5zcmNfcG9ydCA8IDAgfHwgY29ubi0+c3JjX2NvbXAgfHwKPj4+ICsgICAgICAgICAgICAgICAg ICAgIWRldmljZV9tYXRjaF9md25vZGUocGRhdGEtPmRldiwgY29ubi0+c3JjX2Z3bm9kZSkgfHwK Pj4+ICsgICAgICAgICAgICAgICAgICAgY29ubi0+ZGVzdF9wb3J0IDwgMCB8fCAhY29ubi0+ZGVz dF9md25vZGUgfHwgIWNvbm4tPmRlc3RfY29tcCkgewo+Pj4gKyAgICAgICAgICAgICAgICAgICAg ICAgcmV0ID0gLUVJTlZBTDsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIGdvdG8gZXJyX291 dDsKPj4+ICsgICAgICAgICAgICAgICB9Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAg cmV0ID0gcnZ0cmFjZV9jb21wb25lbnRfcmVzZXQocGRhdGEpOwo+Pj4gKyAgICAgICBpZiAocmV0 KQo+Pj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJyX291dDsKPj4+ICsKPj4+ICsgICAgICAgaW1w bCA9IHJ2dHJhY2VfcmVhZDMyKHBkYXRhLCBSVlRSQUNFX0NPTVBPTkVOVF9JTVBMX09GRlNFVCk7 Cj4+PiArICAgICAgIHR5cGUgPSAoaW1wbCA+PiBSVlRSQUNFX0NPTVBPTkVOVF9JTVBMX1RZUEVf U0hJRlQpICYKPj4+ICsgICAgICAgICAgICAgICBSVlRSQUNFX0NPTVBPTkVOVF9JTVBMX1RZUEVf TUFTSzsKPj4+ICsgICAgICAgbWFqb3IgPSAoaW1wbCA+PiBSVlRSQUNFX0NPTVBPTkVOVF9JTVBM X1ZFUk1BSk9SX1NISUZUKSAmCj4+PiArICAgICAgICAgICAgICAgUlZUUkFDRV9DT01QT05FTlRf SU1QTF9WRVJNQUpPUl9NQVNLOwo+Pj4gKyAgICAgICBtaW5vciA9IChpbXBsID4+IFJWVFJBQ0Vf Q09NUE9ORU5UX0lNUExfVkVSTUlOT1JfU0hJRlQpICYKPj4+ICsgICAgICAgICAgICAgICBSVlRS QUNFX0NPTVBPTkVOVF9JTVBMX1ZFUk1JTk9SX01BU0s7Cj4+PiArCj4+PiArICAgICAgIGlmIChw ZGF0YS0+Ym91bmRfY3B1ID49IDAgJiYgIWNwdV9wcmVzZW50KHBkYXRhLT5ib3VuZF9jcHUpKSB7 Cj4+PiArICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPj4+ICsgICAgICAgICAgICAgICBn b3RvIGVycl9vdXQ7Cj4+PiArICAgICAgIH0KPj4+ICsgICAgICAgaWYgKHR5cGUgPT0gUlZUUkFD RV9DT01QT05FTlRfVFlQRV9FTkNPREVSICYmIHBkYXRhLT5ib3VuZF9jcHUgPCAwKSB7Cj4+PiAr ICAgICAgICAgICAgICAgcmV0ID0gLUVJTlZBTDsKPj4+ICsgICAgICAgICAgICAgICBnb3RvIGVy cl9vdXQ7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgY29tcCA9IGt6YWxsb2Moc2l6 ZW9mKCpjb21wKSwgR0ZQX0tFUk5FTCk7Cj4+PiArICAgICAgIGlmICghY29tcCkgewo+Pj4gKyAg ICAgICAgICAgICAgIHJldCA9IC1FTk9NRU07Cj4+PiArICAgICAgICAgICAgICAgZ290byBlcnJf b3V0Owo+Pj4gKyAgICAgICB9Cj4+PiArICAgICAgIGNvbXAtPnBkYXRhID0gcGRhdGE7Cj4+PiAr ICAgICAgIGNvbXAtPmlkLnR5cGUgPSB0eXBlOwo+Pj4gKyAgICAgICBjb21wLT5pZC52ZXJzaW9u ID0gcnZ0cmFjZV9jb21wb25lbnRfbWt2ZXJzaW9uKG1ham9yLCBtaW5vcik7Cj4+PiArICAgICAg IHJldCA9IHJ2dHJhY2VfYWxsb2NfdHlwZV9pZHgoY29tcCk7Cj4+PiArICAgICAgIGlmIChyZXQp IHsKPj4+ICsgICAgICAgICAgICAgICBrZnJlZShjb21wKTsKPj4+ICsgICAgICAgICAgICAgICBn b3RvIGVycl9vdXQ7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgY29tcC0+ZGV2LnBh cmVudCA9IHBkYXRhLT5kZXY7Cj4+PiArICAgICAgIGNvbXAtPmRldi5jb2hlcmVudF9kbWFfbWFz ayA9IHBkYXRhLT5kZXYtPmNvaGVyZW50X2RtYV9tYXNrOwo+Pj4gKyAgICAgICBjb21wLT5kZXYu cmVsZWFzZSA9IHJ2dHJhY2VfY29tcG9uZW50X3JlbGVhc2U7Cj4+PiArICAgICAgIGNvbXAtPmRl di5idXMgPSAmcnZ0cmFjZV9idXN0eXBlOwo+Pj4gKyAgICAgICBjb21wLT5kZXYuZndub2RlID0g Zndub2RlX2hhbmRsZV9nZXQoZGV2X2Z3bm9kZShwZGF0YS0+ZGV2KSk7Cj4+PiArICAgICAgIHN3 aXRjaCAoY29tcC0+aWQudHlwZSkgewo+Pj4gKyAgICAgICBjYXNlIFJWVFJBQ0VfQ09NUE9ORU5U X1RZUEVfRU5DT0RFUjoKPj4+ICsgICAgICAgICAgICAgICBkZXZfc2V0X25hbWUoJmNvbXAtPmRl diwgImVuY29kZXItJWQiLCBjb21wLT50eXBlX2lkeCk7Cj4+PiArICAgICAgICAgICAgICAgYnJl YWs7Cj4+PiArICAgICAgIGNhc2UgUlZUUkFDRV9DT01QT05FTlRfVFlQRV9GVU5ORUw6Cj4+PiAr ICAgICAgICAgICAgICAgZGV2X3NldF9uYW1lKCZjb21wLT5kZXYsICJmdW5uZWwtJWQiLCBjb21w LT50eXBlX2lkeCk7Cj4+PiArICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiArICAgICAgIGNhc2Ug UlZUUkFDRV9DT01QT05FTlRfVFlQRV9SQU1TSU5LOgo+Pj4gKyAgICAgICAgICAgICAgIGRldl9z ZXRfbmFtZSgmY29tcC0+ZGV2LCAicmFtc2luay0lZCIsIGNvbXAtPnR5cGVfaWR4KTsKPj4+ICsg ICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgY2FzZSBSVlRSQUNFX0NPTVBPTkVOVF9U WVBFX1BJQlNJTks6Cj4+PiArICAgICAgICAgICAgICAgZGV2X3NldF9uYW1lKCZjb21wLT5kZXYs ICJwaWJzaW5rLSVkIiwgY29tcC0+dHlwZV9pZHgpOwo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFr Owo+Pj4gKyAgICAgICBjYXNlIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfQVRCQlJJREdFOgo+Pj4g KyAgICAgICAgICAgICAgIGRldl9zZXRfbmFtZSgmY29tcC0+ZGV2LCAiYXRiYnJpZGdlLSVkIiwg Y29tcC0+dHlwZV9pZHgpOwo+Pj4gKyAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICBk ZWZhdWx0Ogo+Pj4gKyAgICAgICAgICAgICAgIGRldl9zZXRfbmFtZSgmY29tcC0+ZGV2LCAidHlw ZSVkLSVkIiwgY29tcC0+aWQudHlwZSwgY29tcC0+dHlwZV9pZHgpOwo+Pj4gKyAgICAgICAgICAg ICAgIGJyZWFrOwo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAgICAgIG11dGV4X2xvY2soJnJ2 dHJhY2VfbXV0ZXgpOwo+Pj4gKwo+Pj4gKyAgICAgICByZXQgPSBkZXZpY2VfcmVnaXN0ZXIoJmNv bXAtPmRldik7Cj4+PiArICAgICAgIGlmIChyZXQpIHsKPj4+ICsgICAgICAgICAgICAgICBwdXRf ZGV2aWNlKCZjb21wLT5kZXYpOwo+Pj4gKyAgICAgICAgICAgICAgIGdvdG8gZXJyX291dF91bmxv Y2s7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgZm9yIChpID0gMDsgaSA8IHBkYXRh LT5ucl9vdXRjb25uczsgaSsrKSB7Cj4+PiArICAgICAgICAgICAgICAgY29ubiA9IHBkYXRhLT5v dXRjb25uc1tpXTsKPj4+ICsgICAgICAgICAgICAgICBjb25uLT5zcmNfY29tcCA9IGNvbXA7Cj4+ PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgcmV0ID0gcnZ0cmFjZV9zZXR1cF9pbmNvbm5z X2Zyb21fb3V0Y29ubnMoY29tcCk7Cj4+PiArICAgICAgIGlmIChyZXQgPCAwKSB7Cj4+PiArICAg ICAgICAgICAgICAgZGV2aWNlX3VucmVnaXN0ZXIoJmNvbXAtPmRldik7Cj4+PiArICAgICAgICAg ICAgICAgZ290byBlcnJfb3V0X3VubG9jazsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAg ICBpZiAoY29tcC0+aWQudHlwZSA9PSBSVlRSQUNFX0NPTVBPTkVOVF9UWVBFX0VOQ09ERVIpIHsK Pj4+ICsgICAgICAgICAgICAgICBydnRyYWNlX2dldF9jb21wb25lbnQoY29tcCk7Cj4+PiArICAg ICAgICAgICAgICAgcGVyX2NwdShydnRyYWNlX2NwdV9lbmNvZGVyLCBjb21wLT5wZGF0YS0+Ym91 bmRfY3B1KSA9IGNvbXA7Cj4+PiArICAgICAgIH0KPj4+ICsKPj4+ICsgICAgICAgbXV0ZXhfdW5s b2NrKCZydnRyYWNlX211dGV4KTsKPj4+ICsKPj4+ICsgICAgICAgcmV0dXJuIGNvbXA7Cj4+PiAr Cj4+PiArZXJyX291dF91bmxvY2s6Cj4+PiArICAgICAgIG11dGV4X3VubG9jaygmcnZ0cmFjZV9t dXRleCk7Cj4+PiArZXJyX291dDoKPj4+ICsgICAgICAgcmV0dXJuIEVSUl9QVFIocmV0KTsKPj4+ ICt9Cj4+PiArRVhQT1JUX1NZTUJPTF9HUEwocnZ0cmFjZV9yZWdpc3Rlcl9jb21wb25lbnQpOwo+ Pj4gKwo+Pj4gK3ZvaWQgcnZ0cmFjZV91bnJlZ2lzdGVyX2NvbXBvbmVudChzdHJ1Y3QgcnZ0cmFj ZV9jb21wb25lbnQgKmNvbXApCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9jb21w b25lbnQgKmM7Cj4+PiArCj4+PiArICAgICAgIG11dGV4X2xvY2soJnJ2dHJhY2VfbXV0ZXgpOwo+ Pj4gKwo+Pj4gKyAgICAgICBpZiAoY29tcC0+aWQudHlwZSA9PSBSVlRSQUNFX0NPTVBPTkVOVF9U WVBFX0VOQ09ERVIpIHsKPj4+ICsgICAgICAgICAgICAgICBjID0gcGVyX2NwdShydnRyYWNlX2Nw dV9lbmNvZGVyLCBjb21wLT5wZGF0YS0+Ym91bmRfY3B1KTsKPj4+ICsgICAgICAgICAgICAgICBw ZXJfY3B1KHJ2dHJhY2VfY3B1X2VuY29kZXIsIGNvbXAtPnBkYXRhLT5ib3VuZF9jcHUpID0gTlVM TDsKPj4+ICsgICAgICAgICAgICAgICBydnRyYWNlX3B1dF9jb21wb25lbnQoYyk7Cj4+PiArICAg ICAgIH0KPj4+ICsKPj4+ICsgICAgICAgcnZ0cmFjZV9jbGVhbnVwX2luY29ubnNfZnJvbV9vdXRj b25ucyhjb21wKTsKPj4+ICsgICAgICAgZGV2aWNlX3VucmVnaXN0ZXIoJmNvbXAtPmRldik7Cj4+ PiArCj4+PiArICAgICAgIG11dGV4X3VubG9jaygmcnZ0cmFjZV9tdXRleCk7Cj4+PiArfQo+Pj4g K0VYUE9SVF9TWU1CT0xfR1BMKHJ2dHJhY2VfdW5yZWdpc3Rlcl9jb21wb25lbnQpOwo+Pj4gKwo+ Pj4gK2ludCBfX3J2dHJhY2VfcmVnaXN0ZXJfZHJpdmVyKHN0cnVjdCBtb2R1bGUgKm93bmVyLCBz dHJ1Y3QgcnZ0cmFjZV9kcml2ZXIgKnJ0ZHJ2KQo+Pj4gK3sKPj4+ICsgICAgICAgcnRkcnYtPmRy aXZlci5vd25lciA9IG93bmVyOwo+Pj4gKyAgICAgICBydGRydi0+ZHJpdmVyLmJ1cyA9ICZydnRy YWNlX2J1c3R5cGU7Cj4+PiArCj4+PiArICAgICAgIHJldHVybiBkcml2ZXJfcmVnaXN0ZXIoJnJ0 ZHJ2LT5kcml2ZXIpOwo+Pj4gK30KPj4+ICtFWFBPUlRfU1lNQk9MX0dQTChfX3J2dHJhY2VfcmVn aXN0ZXJfZHJpdmVyKTsKPj4+ICsKPj4+ICtzdGF0aWMgaW50IF9faW5pdCBydnRyYWNlX2luaXQo dm9pZCkKPj4+ICt7Cj4+PiArICAgICAgIGludCByZXQ7Cj4+PiArCj4+PiArICAgICAgIHJ2dHJh Y2VfaW5pdF90eXBlX2lkeCgpOwo+Pj4gKwo+Pj4gKyAgICAgICByZXQgPSBidXNfcmVnaXN0ZXIo JnJ2dHJhY2VfYnVzdHlwZSk7Cj4+PiArICAgICAgIGlmIChyZXQpCj4+PiArICAgICAgICAgICAg ICAgcmV0dXJuIHJldDsKPj4+ICsKPj4+ICsgICAgICAgcmV0ID0gcGxhdGZvcm1fZHJpdmVyX3Jl Z2lzdGVyKCZydnRyYWNlX3BsYXRmb3JtX2RyaXZlcik7Cj4+PiArICAgICAgIGlmIChyZXQpIHsK Pj4+ICsgICAgICAgICAgICAgICBidXNfdW5yZWdpc3RlcigmcnZ0cmFjZV9idXN0eXBlKTsKPj4+ ICsgICAgICAgICAgICAgICByZXR1cm4gcmV0Owo+Pj4gKyAgICAgICB9Cj4+PiArCj4+PiArICAg ICAgIHJldHVybiAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBfX2V4aXQgcnZ0cmFj ZV9leGl0KHZvaWQpCj4+PiArewo+Pj4gKyAgICAgICBwbGF0Zm9ybV9kcml2ZXJfdW5yZWdpc3Rl cigmcnZ0cmFjZV9wbGF0Zm9ybV9kcml2ZXIpOwo+Pj4gKyAgICAgICBidXNfdW5yZWdpc3Rlcigm cnZ0cmFjZV9idXN0eXBlKTsKPj4+ICt9Cj4+PiArCj4+PiArbW9kdWxlX2luaXQocnZ0cmFjZV9p bml0KTsKPj4+ICttb2R1bGVfZXhpdChydnRyYWNlX2V4aXQpOwo+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvaHd0cmFjaW5nL3J2dHJhY2UvcnZ0cmFjZS1wbGF0Zm9ybS5jIGIvZHJpdmVycy9od3Ry YWNpbmcvcnZ0cmFjZS9ydnRyYWNlLXBsYXRmb3JtLmMKPj4+IG5ldyBmaWxlIG1vZGUgMTAwNjQ0 Cj4+PiBpbmRleCAwMDAwMDAwMDAwMDAuLmExMTBmZjFmMmYwOAo+Pj4gLS0tIC9kZXYvbnVsbAo+ Pj4gKysrIGIvZHJpdmVycy9od3RyYWNpbmcvcnZ0cmFjZS9ydnRyYWNlLXBsYXRmb3JtLmMKPj4+ IEBAIC0wLDAgKzEsMTc0IEBACj4+PiArLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0y LjAKPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdodCAoYykgMjAyNSBWZW50YW5hIE1pY3JvIFN5c3Rl bXMgSW5jLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4+ ICsjaW5jbHVkZSA8bGludXgvaW8uaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvb2YuaD4KPj4+ICsj aW5jbHVkZSA8bGludXgvb2ZfZ3JhcGguaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1f ZGV2aWNlLmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4+PiArI2luY2x1ZGUg PGxpbnV4L3J2dHJhY2UuaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvdHlwZXMuaD4KPj4+ICsKPj4+ ICtzdGF0aWMgaW50IHJ2dHJhY2Vfb2ZfcGFyc2Vfb3V0Y29ubnMoc3RydWN0IHJ2dHJhY2VfcGxh dGZvcm1fZGF0YSAqcGRhdGEpCj4+PiArewo+Pj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlX25vZGUg KnBhcmVudCwgKmVwX25vZGUsICpyZXBfbm9kZSwgKnJkZXZfbm9kZTsKPj4+ICsgICAgICAgc3Ry dWN0IHJ2dHJhY2VfY29ubmVjdGlvbiAqY29ubjsKPj4+ICsgICAgICAgc3RydWN0IG9mX2VuZHBv aW50IGVwLCByZXA7Cj4+PiArICAgICAgIGludCByZXQgPSAwLCBpID0gMDsKPj4+ICsKPj4+ICsg ICAgICAgcGFyZW50ID0gb2ZfZ2V0X2NoaWxkX2J5X25hbWUoZGV2X29mX25vZGUocGRhdGEtPmRl diksICJvdXQtcG9ydHMiKTsKPj4+ICsgICAgICAgaWYgKCFwYXJlbnQpCj4+PiArICAgICAgICAg ICAgICAgcmV0dXJuIDA7Cj4+PiArCj4+PiArICAgICAgIHBkYXRhLT5ucl9vdXRjb25ucyA9IG9m X2dyYXBoX2dldF9lbmRwb2ludF9jb3VudChwYXJlbnQpOwo+Pj4gKyAgICAgICBwZGF0YS0+b3V0 Y29ubnMgPSBkZXZtX2tjYWxsb2MocGRhdGEtPmRldiwgcGRhdGEtPm5yX291dGNvbm5zLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpwZGF0YS0+b3V0 Y29ubnMpLCBHRlBfS0VSTkVMKTsKPj4+ICsgICAgICAgaWYgKCFwZGF0YS0+b3V0Y29ubnMpIHsK Pj4+ICsgICAgICAgICAgICAgICByZXQgPSAtRU5PTUVNOwo+Pj4gKyAgICAgICAgICAgICAgIGdv dG8gZG9uZTsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICBmb3JfZWFjaF9lbmRwb2lu dF9vZl9ub2RlKHBhcmVudCwgZXBfbm9kZSkgewo+Pj4gKyAgICAgICAgICAgICAgIGNvbm4gPSBk ZXZtX2t6YWxsb2MocGRhdGEtPmRldiwgc2l6ZW9mKCpjb25uKSwgR0ZQX0tFUk5FTCk7Cj4+PiAr ICAgICAgICAgICAgICAgaWYgKCFjb25uKSB7Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBv Zl9ub2RlX3B1dChlcF9ub2RlKTsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIHJldCA9IC1F Tk9NRU07Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKPj4+ICsgICAgICAgICAg ICAgICB9Cj4+PiArCj4+PiArICAgICAgICAgICAgICAgcmV0ID0gb2ZfZ3JhcGhfcGFyc2VfZW5k cG9pbnQoZXBfbm9kZSwgJmVwKTsKPj4+ICsgICAgICAgICAgICAgICBpZiAocmV0KSB7Cj4+PiAr ICAgICAgICAgICAgICAgICAgICAgICBvZl9ub2RlX3B1dChlcF9ub2RlKTsKPj4+ICsgICAgICAg ICAgICAgICAgICAgICAgIGJyZWFrOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsKPj4+ICsg ICAgICAgICAgICAgICByZXBfbm9kZSA9IG9mX2dyYXBoX2dldF9yZW1vdGVfZW5kcG9pbnQoZXBf bm9kZSk7Cj4+PiArICAgICAgICAgICAgICAgaWYgKCFyZXBfbm9kZSkgewo+Pj4gKyAgICAgICAg ICAgICAgICAgICAgICAgcmV0ID0gLUVOT0RFVjsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAg IG9mX25vZGVfcHV0KGVwX25vZGUpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7 Cj4+PiArICAgICAgICAgICAgICAgfQo+Pj4gKyAgICAgICAgICAgICAgIHJkZXZfbm9kZSA9IG9m X2dyYXBoX2dldF9wb3J0X3BhcmVudChyZXBfbm9kZSk7Cj4+PiArCj4+PiArICAgICAgICAgICAg ICAgcmV0ID0gb2ZfZ3JhcGhfcGFyc2VfZW5kcG9pbnQocmVwX25vZGUsICZyZXApOwo+Pj4gKyAg ICAgICAgICAgICAgIGlmIChyZXQpIHsKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgIG9mX25v ZGVfcHV0KGVwX25vZGUpOwo+Pj4gKyAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiAr ICAgICAgICAgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAgICAgICAgIGNvbm4tPnNyY19wb3J0 ID0gZXAucG9ydDsKPj4+ICsgICAgICAgICAgICAgICBjb25uLT5zcmNfZndub2RlID0gZGV2X2Z3 bm9kZShwZGF0YS0+ZGV2KTsKPj4+ICsgICAgICAgICAgICAgICAvKiBUaGUgJ3NyY19jb21wJyBp cyBzZXQgYnkgcnZ0cmFjZV9yZWdpc3Rlcl9jb21wb25lbnQoKSAqLwo+Pj4gKyAgICAgICAgICAg ICAgIGNvbm4tPnNyY19jb21wID0gTlVMTDsKPj4+ICsgICAgICAgICAgICAgICBjb25uLT5kZXN0 X3BvcnQgPSByZXAucG9ydDsKPj4+ICsgICAgICAgICAgICAgICBjb25uLT5kZXN0X2Z3bm9kZSA9 IG9mX2Z3bm9kZV9oYW5kbGUocmRldl9ub2RlKTsKPj4+ICsgICAgICAgICAgICAgICBjb25uLT5k ZXN0X2NvbXAgPSBydnRyYWNlX2ZpbmRfYnlfZndub2RlKGNvbm4tPmRlc3RfZndub2RlKTsKPj4+ ICsgICAgICAgICAgICAgICBpZiAoIWNvbm4tPmRlc3RfY29tcCkgewo+Pj4gKyAgICAgICAgICAg ICAgICAgICAgICAgcmV0ID0gLUVQUk9CRV9ERUZFUjsKPj4+ICsgICAgICAgICAgICAgICAgICAg ICAgIG9mX25vZGVfcHV0KGVwX25vZGUpOwo+Pj4gKyAgICAgICAgICAgICAgIH0KPj4+ICsKPj4+ ICsgICAgICAgICAgICAgICBwZGF0YS0+b3V0Y29ubnNbaV0gPSBjb25uOwo+Pj4gKyAgICAgICAg ICAgICAgIGkrKzsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gK2RvbmU6Cj4+PiArICAgICAgIG9m X25vZGVfcHV0KHBhcmVudCk7Cj4+PiArICAgICAgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbnQgcnZ0cmFjZV9vZl9wYXJzZV9pbmNvbm5zKHN0cnVjdCBydnRyYWNlX3Bs YXRmb3JtX2RhdGEgKnBkYXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2Rl ICpwYXJlbnQ7Cj4+PiArICAgICAgIGludCByZXQgPSAwOwo+Pj4gKwo+Pj4gKyAgICAgICBwYXJl bnQgPSBvZl9nZXRfY2hpbGRfYnlfbmFtZShkZXZfb2Zfbm9kZShwZGF0YS0+ZGV2KSwgImluLXBv cnRzIik7Cj4+PiArICAgICAgIGlmICghcGFyZW50KQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVy biAwOwo+Pj4gKwo+Pj4gKyAgICAgICBwZGF0YS0+bnJfaW5jb25ucyA9IG9mX2dyYXBoX2dldF9l bmRwb2ludF9jb3VudChwYXJlbnQpOwo+Pj4gKyAgICAgICBwZGF0YS0+aW5jb25ucyA9IGRldm1f a2NhbGxvYyhwZGF0YS0+ZGV2LCBwZGF0YS0+bnJfaW5jb25ucywKPj4+ICsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgc2l6ZW9mKCpwZGF0YS0+aW5jb25ucyksIEdGUF9LRVJO RUwpOwo+Pj4gKyAgICAgICBpZiAoIXBkYXRhLT5pbmNvbm5zKQo+Pj4gKyAgICAgICAgICAgICAg IHJldCA9IC1FTk9NRU07Cj4+PiArCj4+PiArICAgICAgIG9mX25vZGVfcHV0KHBhcmVudCk7Cj4+ PiArICAgICAgIHJldHVybiByZXQ7Cj4+PiArfQo+Pj4gKwo+Pj4gK3N0YXRpYyBpbnQgcnZ0cmFj ZV9wbGF0Zm9ybV9wcm9iZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4gK3sKPj4+ ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfcGxhdGZvcm1fZGF0YSAqcGRhdGE7Cj4+PiArICAgICAg IHN0cnVjdCBkZXZpY2UgKmRldiA9ICZwZGV2LT5kZXY7Cj4+PiArICAgICAgIHN0cnVjdCBydnRy YWNlX2NvbXBvbmVudCAqY29tcDsKPj4+ICsgICAgICAgc3RydWN0IGRldmljZV9ub2RlICpub2Rl Owo+Pj4gKyAgICAgICBzdHJ1Y3QgcmVzb3VyY2UgKnJlczsKPj4+ICsgICAgICAgaW50IHJldDsK Pj4+ICsKPj4+ICsgICAgICAgcGRhdGEgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnBkYXRh KSwgR0ZQX0tFUk5FTCk7Cj4+PiArICAgICAgIGlmICghcGRhdGEpCj4+PiArICAgICAgICAgICAg ICAgcmV0dXJuIC1FTk9NRU07Cj4+PiArICAgICAgIHBkYXRhLT5kZXYgPSBkZXY7Cj4+PiArICAg ICAgIHBkYXRhLT5pbXBpZCA9IFJWVFJBQ0VfQ09NUE9ORU5UX0lNUElEX1VOS05PV047Cj4+PiAr Cj4+PiArICAgICAgIHJlcyA9IHBsYXRmb3JtX2dldF9yZXNvdXJjZShwZGV2LCBJT1JFU09VUkNF X01FTSwgMCk7Cj4+PiArICAgICAgIGlmICghcmVzKQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVy biAtRUlOVkFMOwo+Pj4gKwo+Pj4gKyAgICAgICBwZGF0YS0+aW9fbWVtID0gdHJ1ZTsKPj4+ICsg ICAgICAgcGRhdGEtPmJhc2UgPSBkZXZtX2lvcmVtYXAoJnBkZXYtPmRldiwgcmVzLT5zdGFydCwg cmVzb3VyY2Vfc2l6ZShyZXMpKTsKPj4+ICsgICAgICAgaWYgKCFwZGF0YS0+YmFzZSkKPj4+ICsg ICAgICAgICAgICAgICByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIC1FTk9NRU0sICJmYWlsZWQg dG8gaW9yZW1hcCAlcFJcbiIsIHJlcyk7Cj4+PiArCj4+PiArICAgICAgIHBkYXRhLT5ib3VuZF9j cHUgPSAtMTsKPj4+ICsgICAgICAgbm9kZSA9IG9mX3BhcnNlX3BoYW5kbGUoZGV2X29mX25vZGUo ZGV2KSwgImNwdSIsIDApOwo+Pj4gKyAgICAgICBpZiAobm9kZSkgewo+Pj4gKyAgICAgICAgICAg ICAgIHJldCA9IG9mX2NwdV9ub2RlX3RvX2lkKG5vZGUpOwo+Pj4gKyAgICAgICAgICAgICAgIG9m X25vZGVfcHV0KG5vZGUpOwo+Pj4gKyAgICAgICAgICAgICAgIGlmIChyZXQgPCAwKQo+Pj4gKyAg ICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRldl9lcnJfcHJvYmUoZGV2LCByZXQsICJmYWls ZWQgdG8gZ2V0IENQVSBpZCBmb3IgJXBPRlxuIiwgbm9kZSk7Cj4+PiArICAgICAgICAgICAgICAg cGRhdGEtPmJvdW5kX2NwdSA9IHJldDsKPj4+ICsgICAgICAgfQo+Pj4gKwo+Pj4gKyAgICAgICAv KiBEZWZhdWx0IGNvbnRyb2wgcG9sbCB0aW1lb3V0ICovCj4+PiArICAgICAgIHBkYXRhLT5jb250 cm9sX3BvbGxfdGltZW91dF91c2VjcyA9IDEwOwo+Pj4gKwo+Pj4gKyAgICAgICByZXQgPSBydnRy YWNlX29mX3BhcnNlX291dGNvbm5zKHBkYXRhKTsKPj4+ICsgICAgICAgaWYgKHJldCkKPj4+ICsg ICAgICAgICAgICAgICByZXR1cm4gZGV2X2Vycl9wcm9iZShkZXYsIHJldCwgImZhaWxlZCB0byBw YXJzZSBvdXRwdXQgY29ubmVjdGlvbnNcbiIpOwo+Pj4gKwo+Pj4gKyAgICAgICByZXQgPSBydnRy YWNlX29mX3BhcnNlX2luY29ubnMocGRhdGEpOwo+Pj4gKyAgICAgICBpZiAocmV0KQo+Pj4gKyAg ICAgICAgICAgICAgIHJldHVybiBkZXZfZXJyX3Byb2JlKGRldiwgcmV0LCAiZmFpbGVkIHRvIHBh cnNlIGlucHV0IGNvbm5lY3Rpb25zXG4iKTsKPj4+ICsKPj4+ICsgICAgICAgY29tcCA9IHJ2dHJh Y2VfcmVnaXN0ZXJfY29tcG9uZW50KHBkYXRhKTsKPj4+ICsgICAgICAgaWYgKElTX0VSUihjb21w KSkKPj4+ICsgICAgICAgICAgICAgICByZXR1cm4gUFRSX0VSUihjb21wKTsKPj4+ICsKPj4+ICsg ICAgICAgcGxhdGZvcm1fc2V0X2RydmRhdGEocGRldiwgY29tcCk7Cj4+PiArICAgICAgIHJldHVy biAwOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0aWMgdm9pZCBydnRyYWNlX3BsYXRmb3JtX3JlbW92 ZShzdHJ1Y3QgcGxhdGZvcm1fZGV2aWNlICpwZGV2KQo+Pj4gK3sKPj4+ICsgICAgICAgc3RydWN0 IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wID0gcGxhdGZvcm1fZ2V0X2RydmRhdGEocGRldik7Cj4+ PiArCj4+PiArICAgICAgIHJ2dHJhY2VfdW5yZWdpc3Rlcl9jb21wb25lbnQoY29tcCk7Cj4+PiAr fQo+Pj4gKwo+Pj4gK3N0YXRpYyBjb25zdCBzdHJ1Y3Qgb2ZfZGV2aWNlX2lkIHJ2dHJhY2VfcGxh dGZvcm1fbWF0Y2hbXSA9IHsKPj4+ICsgICAgICAgeyAuY29tcGF0aWJsZSA9ICJyaXNjdix0cmFj ZS1jb21wb25lbnQiIH0sCj4+PiArICAgICAgIHt9Cj4+PiArfTsKPj4+ICsKPj4+ICtzdHJ1Y3Qg cGxhdGZvcm1fZHJpdmVyIHJ2dHJhY2VfcGxhdGZvcm1fZHJpdmVyID0gewo+Pj4gKyAgICAgICAu ZHJpdmVyID0gewo+Pj4gKyAgICAgICAgICAgICAgIC5uYW1lICAgICAgICAgICA9ICJydnRyYWNl IiwKPj4+ICsgICAgICAgICAgICAgICAub2ZfbWF0Y2hfdGFibGUgPSBydnRyYWNlX3BsYXRmb3Jt X21hdGNoLAo+Pj4gKyAgICAgICB9LAo+Pj4gKyAgICAgICAucHJvYmUgPSBydnRyYWNlX3BsYXRm b3JtX3Byb2JlLAo+Pj4gKyAgICAgICAucmVtb3ZlID0gcnZ0cmFjZV9wbGF0Zm9ybV9yZW1vdmUs Cj4+PiArfTsKPj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L3J2dHJhY2UuaCBiL2luY2x1 ZGUvbGludXgvcnZ0cmFjZS5oCj4+PiBuZXcgZmlsZSBtb2RlIDEwMDY0NAo+Pj4gaW5kZXggMDAw MDAwMDAwMDAwLi4wNGViMDNlNjI2MDEKPj4+IC0tLSAvZGV2L251bGwKPj4+ICsrKyBiL2luY2x1 ZGUvbGludXgvcnZ0cmFjZS5oCj4+PiBAQCAtMCwwICsxLDI3MiBAQAo+Pj4gKy8qIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHkgKi8KPj4+ICsvKgo+Pj4gKyAqIENvcHlyaWdo dCAoYykgMjAyNSBWZW50YW5hIE1pY3JvIFN5c3RlbXMgSW5jLgo+Pj4gKyAqLwo+Pj4gKwo+Pj4g KyNpZm5kZWYgX19MSU5VWF9SVlRSQUNFX0hfXwo+Pj4gKyNkZWZpbmUgX19MSU5VWF9SVlRSQUNF X0hfXwo+Pj4gKwo+Pj4gKyNpbmNsdWRlIDxsaW51eC9kZXZpY2UuaD4KPj4+ICsjaW5jbHVkZSA8 bGludXgvaW8uaD4KPj4+ICsjaW5jbHVkZSA8bGludXgvcGxhdGZvcm1fZGV2aWNlLmg+Cj4+PiAr I2luY2x1ZGUgPGxpbnV4L3Byb3BlcnR5Lmg+Cj4+PiArI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+ Cj4+PiArCj4+PiArLyogQ29udHJvbCByZWdpc3RlciBjb21tb24gYWNyb3NzIGFsbCBSSVNDLVYg dHJhY2UgY29tcG9uZW50cyAqLwo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9P RkZTRVQgICAgICAgICAgMHgwMDAKPj4+ICsjZGVmaW5lIFJWVFJBQ0VfQ09NUE9ORU5UX0NUUkxf QUNUSVZFX01BU0sgICAgIDB4MQo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9B Q1RJVkVfU0hJRlQgICAgMAo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9DT01QT05FTlRfQ1RSTF9FTkFC TEVfTUFTSyAgICAgMHgxCj4+PiArI2RlZmluZSBSVlRSQUNFX0NPTVBPTkVOVF9DVFJMX0VOQUJM RV9TSElGVCAgICAxCj4+PiArCj4+PiArLyogSW1wbGVtZW50YXRpb24gcmVnaXN0ZXIgY29tbW9u IGFjcm9zcyBhbGwgUklTQy1WIHRyYWNlIGNvbXBvbmVudHMgKi8KPj4+ICsjZGVmaW5lIFJWVFJB Q0VfQ09NUE9ORU5UX0lNUExfT0ZGU0VUICAgICAgICAgIDB4MDA0Cj4+PiArI2RlZmluZSBSVlRS QUNFX0NPTVBPTkVOVF9JTVBMX1ZFUk1BSk9SX01BU0sgICAweGYKPj4+ICsjZGVmaW5lIFJWVFJB Q0VfQ09NUE9ORU5UX0lNUExfVkVSTUFKT1JfU0hJRlQgIDAKPj4+ICsjZGVmaW5lIFJWVFJBQ0Vf Q09NUE9ORU5UX0lNUExfVkVSTUlOT1JfTUFTSyAgIDB4Zgo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9D T01QT05FTlRfSU1QTF9WRVJNSU5PUl9TSElGVCAgNAo+Pj4gKyNkZWZpbmUgUlZUUkFDRV9DT01Q T05FTlRfSU1QTF9UWVBFX01BU0sgICAgICAgMHhmCj4+PiArI2RlZmluZSBSVlRSQUNFX0NPTVBP TkVOVF9JTVBMX1RZUEVfU0hJRlQgICAgICA4Cj4+PiArCj4+PiArLyogUG9zc2libGUgY29tcG9u ZW50IHR5cGVzIGRlZmluZWQgYnkgdGhlIFJJU0MtViBUcmFjZSBDb250cm9sIEludGVyZmFjZSAq Lwo+Pj4gK2VudW0gcnZ0cmFjZV9jb21wb25lbnRfdHlwZSB7Cj4+PiArICAgICAgIFJWVFJBQ0Vf Q09NUE9ORU5UX1RZUEVfUkVTVjAsCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVf RU5DT0RFUiwgLyogMHgxICovCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVT VjIsCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVTVjMsCj4+PiArICAgICAg IFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVTVjQsCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9O RU5UX1RZUEVfUkVTVjUsCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVTVjYs Cj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVTVjcsCj4+PiArICAgICAgIFJW VFJBQ0VfQ09NUE9ORU5UX1RZUEVfRlVOTkVMLCAvKiAweDggKi8KPj4+ICsgICAgICAgUlZUUkFD RV9DT01QT05FTlRfVFlQRV9SQU1TSU5LLCAvKiAweDkgKi8KPj4+ICsgICAgICAgUlZUUkFDRV9D T01QT05FTlRfVFlQRV9QSUJTSU5LLCAvKiAweEEgKi8KPj4+ICsgICAgICAgUlZUUkFDRV9DT01Q T05FTlRfVFlQRV9SRVNWMTEsCj4+PiArICAgICAgIFJWVFJBQ0VfQ09NUE9ORU5UX1RZUEVfUkVT VjEyLAo+Pj4gKyAgICAgICBSVlRSQUNFX0NPTVBPTkVOVF9UWVBFX1JFU1YxMywKPj4+ICsgICAg ICAgUlZUUkFDRV9DT01QT05FTlRfVFlQRV9BVEJCUklER0UsIC8qIDB4RSAqLwo+Pj4gKyAgICAg ICBSVlRSQUNFX0NPTVBPTkVOVF9UWVBFX1JFU1YxNSwKPj4+ICsgICAgICAgUlZUUkFDRV9DT01Q T05FTlRfVFlQRV9NQVgKPj4+ICt9Owo+Pj4gKwo+Pj4gKy8qIEVuY29kaW5nL2RlY29kaW5nIG1h Y3JvcyBmb3IgUklTQy1WIHRyYWNlIGNvbXBvbmVudCB2ZXJzaW9uICovCj4+PiArI2RlZmluZSBy dnRyYWNlX2NvbXBvbmVudF92ZXJzaW9uX21ham9yKF9fdmVyc2lvbikgICAgIFwKPj4+ICsgICAg ICAgKCgoX192ZXJzaW9uKSA+PiAxNikgJiAweGZmZmYpCj4+PiArI2RlZmluZSBydnRyYWNlX2Nv bXBvbmVudF92ZXJzaW9uX21pbm9yKF9fdmVyc2lvbikgICAgIFwKPj4+ICsgICAgICAgKChfX3Zl cnNpb24pICYgMHhmZmZmKQo+Pj4gKyNkZWZpbmUgcnZ0cmFjZV9jb21wb25lbnRfbWt2ZXJzaW9u KF9fbWFqb3IsIF9fbWlub3IpICBcCj4+PiArICAgICAgICgoKChfX21ham9yKSAmIDB4ZmZmZikg PDwgMTYpIHwgKChfX21pbm9yKSAmIDB4ZmZmZikpCj4+PiArCj4+PiArLyoKPj4+ICsgKiBQb3Nz aWJsZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24gSURzIGRpc2NvdmVyZWQgZnJvbSBEVCBvciBB Q1BJCj4+PiArICogc2hhcmVkIGFjcm9zcyB0aGUgUklTQy1WIHRyYWNlIGRyaXZlcnMgdG8gaW5m ZXIgdHJhY2UgcGFyYW1ldGVycywKPj4+ICsgKiBxdWlya3MsIGFuZCB3b3JrLWFyb3VuZHMuIFRo ZXNlIGNvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiBJRHMgYXJlCj4+PiArICogaW50ZXJuYWwgdG8g TGludXggYW5kIG11c3Qgbm90IGJlIGV4cG9zZWQgdG8gdXNlci1zcGFjZS4KPj4+ICsgKgo+Pj4g KyAqIFRoZSBjb21wb25lbnQgaW1wbGVtZW50YXRpb24gSUQgc2hvdWxkIGJlIG5hbWVkIGFzIGZv bGxvd3M6Cj4+PiArICogICAgUlZUUkFDRV9DT01QT05FTlRfSU1QSURfPHZlbmRvcj5fPHBhcnQ+ Cj4+PiArICovCj4+PiArZW51bSBydnRyYWNlX2NvbXBvbmVudF9pbXBpZCB7Cj4+PiArICAgICAg IFJWVFJBQ0VfQ09NUE9ORU5UX0lNUElEX1VOS05PV04sCj4+PiArICAgICAgIFJWVFJBQ0VfQ09N UE9ORU5UX0lNUElEX01BWAo+Pj4gK307Cj4+PiArCj4+PiArLyoqCj4+PiArICogc3RydWN0IHJ2 dHJhY2VfY29ubmVjdGlvbiAtIFJlcHJlc2VudGF0aW9uIG9mIGEgcGh5c2ljYWwgY29ubmVjdGlv biBiZXR3ZWVuCj4+PiArICogdHdvIFJJU0MtViB0cmFjZSBjb21wb25lbnRzLgo+Pj4gKyAqIEBz cmNfcG9ydDogICAgQSBjb25uZWN0aW9uJ3Mgc291cmNlIHBvcnQgbnVtYmVyLgo+Pj4gKyAqIEBz cmNfZndub2RlOiAgU291cmNlIGNvbXBvbmVudCdzIGZ3bm9kZSBoYW5kbGUuLgo+Pj4gKyAqIEBz cmNfY29tcDogICAgU291cmNlIGNvbXBvbmVudCdzIHBvaW50ZXIuCj4+PiArICogQGRlc3RfcG9y dDogICBBIGNvbm5lY3Rpb24ncyBkZXN0aW5hdGlvbiBwb3J0IG51bWJlci4KPj4+ICsgKiBAZGVz dF9md25vZGU6IERlc3RpbmF0aW9uIGNvbXBvbmVudCdzIGZ3bm9kZSBoYW5kbGUuCj4+PiArICog QGRlc3RfY29tcDogICBEZXN0aW5hdGlvbiBjb21wb25lbnQncyBwb2ludGVyLgo+Pj4gKyAqLwo+ Pj4gK3N0cnVjdCBydnRyYWNlX2Nvbm5lY3Rpb24gewo+Pj4gKyAgICAgICBpbnQgc3JjX3BvcnQ7 Cj4+PiArICAgICAgIHN0cnVjdCBmd25vZGVfaGFuZGxlICpzcmNfZndub2RlOwo+Pj4gKyAgICAg ICBpbnQgZGVzdF9wb3J0Owo+Pj4gKyAgICAgICBzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZGVzdF9m d25vZGU7Cj4+PiArICAgICAgIHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqc3JjX2NvbXA7Cj4+ PiArICAgICAgIHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqZGVzdF9jb21wOwo+Pj4gK307Cj4+ PiArCj4+PiArLyoqCj4+PiArICogc3RydWN0IHJ2dHJhY2VfcGxhdGZvcm1fZGF0YSAtIFBsYXRm b3JtLWxldmVsIGRhdGEgZm9yIGEgUklTQy1WIHRyYWNlIGNvbXBvbmVudAo+Pj4gKyAqIGRpc2Nv dmVyZWQgZnJvbSBEVCBvciBBQ1BJLgo+Pj4gKyAqIEBkZXY6ICAgICAgICAgUGFyZW50IGRldmlj ZS4KPj4+ICsgKiBAaW1waWQ6ICAgICAgIENvbXBvbmVudCBpbXBsZW1lbnRhdGlvbiBJRAo+Pj4g KyAqIEBpb19tZW06ICAgICAgRmxhZyBzaG93aW5nIHdoZXRoZXIgY29tcG9uZW50IHJlZ2lzdGVy cyBhcmUgbWVtb3J5IG1hcHBlZC4KPj4+ICsgKiBAYmFzZTogICAgICAgIElmIGlvX21lbSA9PSB0 cnVlIHRoZW4gYmFzZSBhZGRyZXNzIG9mIHRoZSBtZW1vcnkgbWFwcGVkIHJlZ2lzdGVycy4KPj4+ ICsgKiBAcmVhZDogICAgICAgIElmIGlvX21lbSA9PSBmYWxzZSB0aGVuIHJlYWQgcmVnaXN0ZXIg ZnJvbSB0aGUgZ2l2ZW4gIm9mZnNldCIuCj4+PiArICogQHdyaXRlOiAgICAgICBJZiBpb19tZW0g PT0gZmFsc2UgdGhlbiB3cml0ZSByZWdpc3RlciB0byB0aGUgZ2l2ZW4gIm9mZnNldCIuCj4+PiAr ICogQGJvdW5kX2NwdTogICBDUFUgdG8gd2hpY2ggdGhlIGNvbXBvbmVudCBpcyBib3VuZC4gVGhp cyBzaG91bGQgYmUgLTEgaWYKPj4+ICsgKiAgICAgICAgICAgICAgIHRoZSBjb21wb25lbnQgaXMg bm90IGJvdW5kIHRvIGFueSBDUFUuIEZvciBlbmNvZGVyIGNvbXBvbmVudAo+Pj4gKyAqICAgICAg ICAgICAgICAgdHlwZSB0aGlzIG11c3Qgbm90IGJlIC0xLgo+Pj4gKyAqIEBucl9pbmNvbm5zOiAg TnVtYmVyIG9mIGlucHV0IGNvbm5lY3Rpb25zLgo+Pj4gKyAqIEBpbmNvbm5zOiAgICAgQXJyYXkg b2YgcG9pbnRlcnMgdG8gaW5wdXQgY29ubmVjdGlvbnMuCj4+PiArICogQG5yX291dGNvbm5zOiBO dW1iZXIgb2Ygb3V0cHV0IGNvbm5lY3Rpb25zLgo+Pj4gKyAqIEBvdXRjb25uczogICAgQXJyYXkg b2YgcG9pbnRlcnMgdG8gb3V0cHV0IGNvbm5lY3Rpb25zLgo+Pj4gKyAqLwo+Pj4gK3N0cnVjdCBy dnRyYWNlX3BsYXRmb3JtX2RhdGEgewo+Pj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlICpkZXY7Cj4+ PiArCj4+PiArICAgICAgIGVudW0gcnZ0cmFjZV9jb21wb25lbnRfaW1waWQgaW1waWQ7Cj4+PiAr Cj4+PiArICAgICAgIGJvb2wgaW9fbWVtOwo+Pj4gKyAgICAgICB1bmlvbiB7Cj4+PiArICAgICAg ICAgICAgICAgdm9pZCBfX2lvbWVtICpiYXNlOwo+Pj4gKyAgICAgICAgICAgICAgIHN0cnVjdCB7 Cj4+PiArICAgICAgICAgICAgICAgICAgICAgICB1MzIgKCpyZWFkKShzdHJ1Y3QgcnZ0cmFjZV9w bGF0Zm9ybV9kYXRhICpwZGF0YSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHUzMiBvZmZzZXQsIGJvb2wgcmVsYXhlZCk7Cj4+PiArICAgICAgICAgICAgICAgICAgICAg ICB2b2lkICgqd3JpdGUpKHN0cnVjdCBydnRyYWNlX3BsYXRmb3JtX2RhdGEgKnBkYXRhLAo+Pj4g KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1MzIgdmFsLCB1MzIgb2Zmc2V0 LCBib29sIHJlbGF4ZWQpOwo+Pj4gKyAgICAgICAgICAgICAgIH07Cj4+PiArICAgICAgIH07Cj4+ PiArCj4+PiArICAgICAgIGludCBib3VuZF9jcHU7Cj4+PiArCj4+PiArICAgICAgIC8qIERlbGF5 IGluIG1pY3Jvc2Vjb25kcyB3aGVuIHBvbGxpbmcgY29udHJvbCByZWdpc3RlciBiaXRzICovCj4+ PiArICAgICAgIGludCBjb250cm9sX3BvbGxfdGltZW91dF91c2VjczsKPj4+ICsKPj4+ICsgICAg ICAgLyoKPj4+ICsgICAgICAgICogUGxhdGZvcm0gZHJpdmVyIG11c3Qgb25seSBwb3B1bGF0ZSBl bXB0eSBwb2ludGVyIGFycmF5IHdpdGhvdXQKPj4+ICsgICAgICAgICogYW55IGFjdHVhbCBpbnB1 dCBjb25uZWN0aW9ucy4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIHVuc2lnbmVkIGludCBu cl9pbmNvbm5zOwo+Pj4gKyAgICAgICBzdHJ1Y3QgcnZ0cmFjZV9jb25uZWN0aW9uICoqaW5jb25u czsKPj4+ICsKPj4+ICsgICAgICAgLyoKPj4+ICsgICAgICAgICogUGxhdGZvcm0gZHJpdmVyIG11 c3QgZnVsbHkgcG9wdWxhdGUgcG9pbnRlciBhcnJheSB3aXRoIGluZGl2aWR1YWwKPj4+ICsgICAg ICAgICogYXJyYXkgZWxlbWVudHMgcG9pbnRpbmcgdG8gYWN0dWFsIG91dHB1dCBjb25uZWN0aW9u cy4gVGhlIHNyY19jb21wCj4+PiArICAgICAgICAqIG9mIGVhY2ggb3V0cHV0IGNvbm5lY3Rpb24g aXMgYXV0b21hdGljYWxseSB1cGRhdGVkIGF0IHRoZSB0aW1lIG9mCj4+PiArICAgICAgICAqIHJl Z2lzdGVyaW5nIGNvbXBvbmVudC4KPj4+ICsgICAgICAgICovCj4+PiArICAgICAgIHVuc2lnbmVk IGludCBucl9vdXRjb25uczsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfY29ubmVjdGlvbiAq Km91dGNvbm5zOwo+Pj4gK307Cj4+PiArCj4+PiArc3RhdGljIGlubGluZSB1MzIgcnZ0cmFjZV9y ZWFkMzIoc3RydWN0IHJ2dHJhY2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHUzMiBvZmZzZXQpCj4+ PiArewo+Pj4gKyAgICAgICBpZiAobGlrZWx5KHBkYXRhLT5pb19tZW0pKQo+Pj4gKyAgICAgICAg ICAgICAgIHJldHVybiByZWFkbChwZGF0YS0+YmFzZSArIG9mZnNldCk7Cj4+PiArCj4+PiArICAg ICAgIHJldHVybiBwZGF0YS0+cmVhZChwZGF0YSwgb2Zmc2V0LCBmYWxzZSk7Cj4+PiArfQo+Pj4g Kwo+Pj4gK3N0YXRpYyBpbmxpbmUgdTMyIHJ2dHJhY2VfcmVsYXhlZF9yZWFkMzIoc3RydWN0IHJ2 dHJhY2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEsIHUzMiBvZmZzZXQpCj4+PiArewo+Pj4gKyAgICAg ICBpZiAobGlrZWx5KHBkYXRhLT5pb19tZW0pKQo+Pj4gKyAgICAgICAgICAgICAgIHJldHVybiBy ZWFkbF9yZWxheGVkKHBkYXRhLT5iYXNlICsgb2Zmc2V0KTsKPj4+ICsKPj4+ICsgICAgICAgcmV0 dXJuIHBkYXRhLT5yZWFkKHBkYXRhLCBvZmZzZXQsIHRydWUpOwo+Pj4gK30KPj4+ICsKPj4+ICtz dGF0aWMgaW5saW5lIHZvaWQgcnZ0cmFjZV93cml0ZTMyKHN0cnVjdCBydnRyYWNlX3BsYXRmb3Jt X2RhdGEgKnBkYXRhLCB1MzIgdmFsLCB1MzIgb2Zmc2V0KQo+Pj4gK3sKPj4+ICsgICAgICAgaWYg KGxpa2VseShwZGF0YS0+aW9fbWVtKSkKPj4+ICsgICAgICAgICAgICAgICB3cml0ZWwodmFsLCBw ZGF0YS0+YmFzZSArIG9mZnNldCk7Cj4+PiArICAgICAgIGVsc2UKPj4+ICsgICAgICAgICAgICAg ICBwZGF0YS0+d3JpdGUocGRhdGEsIHZhbCwgb2Zmc2V0LCBmYWxzZSk7Cj4+PiArfQo+Pj4gKwo+ Pj4gK3N0YXRpYyBpbmxpbmUgdm9pZCBydnRyYWNlX3JlbGF4ZWRfd3JpdGUzMihzdHJ1Y3QgcnZ0 cmFjZV9wbGF0Zm9ybV9kYXRhICpwZGF0YSwKPj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICB1MzIgdmFsLCB1MzIgb2Zmc2V0KQo+Pj4gK3sKPj4+ICsgICAgICAg aWYgKGxpa2VseShwZGF0YS0+aW9fbWVtKSkKPj4+ICsgICAgICAgICAgICAgICB3cml0ZWxfcmVs YXhlZCh2YWwsIHBkYXRhLT5iYXNlICsgb2Zmc2V0KTsKPj4+ICsgICAgICAgZWxzZQo+Pj4gKyAg ICAgICAgICAgICAgIHBkYXRhLT53cml0ZShwZGF0YSwgdmFsLCBvZmZzZXQsIHRydWUpOwo+Pj4g K30KPj4+ICsKPj4+ICtzdGF0aWMgaW5saW5lIGJvb2wgcnZ0cmFjZV9pc19zb3VyY2Uoc3RydWN0 IHJ2dHJhY2VfcGxhdGZvcm1fZGF0YSAqcGRhdGEpCj4+PiArewo+Pj4gKyAgICAgICByZXR1cm4g IXBkYXRhLT5ucl9pbmNvbm5zID8gdHJ1ZSA6IGZhbHNlOwo+Pj4gK30KPj4+ICsKPj4+ICtzdGF0 aWMgaW5saW5lIGJvb2wgcnZ0cmFjZV9pc19zaW5rKHN0cnVjdCBydnRyYWNlX3BsYXRmb3JtX2Rh dGEgKnBkYXRhKQo+Pj4gK3sKPj4+ICsgICAgICAgcmV0dXJuICFwZGF0YS0+bnJfb3V0Y29ubnMg PyB0cnVlIDogZmFsc2U7Cj4+PiArfQo+Pj4gKwo+Pj4gKy8qKgo+Pj4gKyAqIHN0cnVjdCBydnRy YWNlX2NvbXBvbmVudF9pZCAtIERldGFpbHMgdG8gaWRlbnRpZnkgb3IgbWF0Y2ggYSBSSVNDLVYg dHJhY2UgY29tcG9uZW50Cj4+PiArICogQHR5cGU6ICAgICAgVHlwZSBvZiB0aGUgY29tcG9uZW50 Cj4+PiArICogQHZlcnNpb246ICAgVmVyc2lvbiBvZiB0aGUgY29tcG9uZW50Cj4+PiArICogQGRh dGE6ICAgICAgRGF0YSBwb2ludGVyIGZvciBkcml2ZXIgdXNlCj4+PiArICovCj4+PiArc3RydWN0 IHJ2dHJhY2VfY29tcG9uZW50X2lkIHsKPj4+ICsgICAgICAgZW51bSBydnRyYWNlX2NvbXBvbmVu dF90eXBlIHR5cGU7Cj4+PiArICAgICAgIHUzMiB2ZXJzaW9uOwo+Pj4gKyAgICAgICB2b2lkICpk YXRhOwo+Pj4gK307Cj4+PiArCj4+PiArLyoqCj4+PiArICogc3RydWN0IHJ2dHJhY2VfY29tcG9u ZW50IC0gUmVwcmVzZW50YXRpb24gb2YgYSBSSVNDLVYgdHJhY2UgY29tcG9uZW50Cj4+PiArICog cGRhdGE6ICAgIFBvaW50ZXIgdG8gdW5kZXJseWluZyBwbGF0Zm9ybSBkYXRhCj4+PiArICogaWQ6 ICAgICAgIERldGFpbHMgdG8gbWF0Y2ggdGhlIGNvbXBvbmVudAo+Pj4gKyAqIHR5cGVfaWR4OiBV bmlxdWUgbnVtYmVyIGJhc2VkIG9uIGNvbXBvbmVudCB0eXBlCj4+PiArICogZGV2OiAgICAgIERl dmljZSBpbnN0YW5jZQo+Pj4gKyAqIHJlYWR5OiAgICBGbGFnIHNob3dpbmcgd2hldGhlciBSSVND LVYgdHJhY2UgZHJpdmVyIHdhcyBwcm9iZWQgc3VjY2Vzc2Z1bGx5Cj4+PiArICovCj4+PiArc3Ry dWN0IHJ2dHJhY2VfY29tcG9uZW50IHsKPj4+ICsgICAgICAgc3RydWN0IHJ2dHJhY2VfcGxhdGZv cm1fZGF0YSAqcGRhdGE7Cj4+PiArICAgICAgIHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudF9pZCBp ZDsKPj4+ICsgICAgICAgdTMyIHR5cGVfaWR4Owo+Pj4gKyAgICAgICBzdHJ1Y3QgZGV2aWNlIGRl djsKPj4+ICsgICAgICAgYm9vbCByZWFkeTsKPj4+ICt9Owo+Pj4gKwo+Pj4gKyNkZWZpbmUgdG9f cnZ0cmFjZV9jb21wb25lbnQoX19kZXYpICAgIGNvbnRhaW5lcl9vZl9jb25zdChfX2Rldiwgc3Ry dWN0IHJ2dHJhY2VfY29tcG9uZW50LCBkZXYpCj4+PiArCj4+PiArc3RhdGljIGlubGluZSB2b2lk IHJ2dHJhY2VfZ2V0X2NvbXBvbmVudChzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnQgKmNvbXApCj4+ PiArewo+Pj4gKyAgICAgICBnZXRfZGV2aWNlKCZjb21wLT5kZXYpOwo+Pj4gK30KPj4+ICsKPj4+ ICtzdGF0aWMgaW5saW5lIHZvaWQgcnZ0cmFjZV9wdXRfY29tcG9uZW50KHN0cnVjdCBydnRyYWNl X2NvbXBvbmVudCAqY29tcCkKPj4+ICt7Cj4+PiArICAgICAgIHB1dF9kZXZpY2UoJmNvbXAtPmRl dik7Cj4+PiArfQo+Pj4gKwo+Pj4gK2NvbnN0IHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudF9pZCAq cnZ0cmFjZV9tYXRjaF9pZChzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnQgKmNvbXAsCj4+PiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3Ry dWN0IHJ2dHJhY2VfY29tcG9uZW50X2lkICppZHMpOwo+Pj4gK3N0cnVjdCBydnRyYWNlX2NvbXBv bmVudCAqcnZ0cmFjZV9maW5kX2J5X2Z3bm9kZShzdHJ1Y3QgZndub2RlX2hhbmRsZSAqZndub2Rl KTsKPj4+ICsKPj4+ICtpbnQgcnZ0cmFjZV9wb2xsX2JpdChzdHJ1Y3QgcnZ0cmFjZV9wbGF0Zm9y bV9kYXRhICpwZGF0YSwgaW50IG9mZnNldCwKPj4+ICsgICAgICAgICAgICAgICAgICAgIGludCBi aXQsIGludCBiaXR2YWwsIGludCB0aW1lb3V0KTsKPj4+ICtpbnQgcnZ0cmFjZV9lbmFibGVfY29t cG9uZW50KHN0cnVjdCBydnRyYWNlX2NvbXBvbmVudCAqY29tcCk7Cj4+PiAraW50IHJ2dHJhY2Vf ZGlzYWJsZV9jb21wb25lbnQoc3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wKTsKPj4+ICsK Pj4+ICtzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnQgKnJ2dHJhY2VfY3B1X3NvdXJjZSh1bnNpZ25l ZCBpbnQgY3B1KTsKPj4+ICsKPj4+ICtzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnQgKnJ2dHJhY2Vf cmVnaXN0ZXJfY29tcG9uZW50KHN0cnVjdCBydnRyYWNlX3BsYXRmb3JtX2RhdGEgKnBkYXRhKTsK Pj4+ICt2b2lkIHJ2dHJhY2VfdW5yZWdpc3Rlcl9jb21wb25lbnQoc3RydWN0IHJ2dHJhY2VfY29t cG9uZW50ICpjb21wKTsKPj4+ICsKPj4+ICsvKioKPj4+ICsgKiBzdHJ1Y3QgcnZ0cmFjZV9kcml2 ZXIgLSBSZXByZXNlbnRhdGlvbiBvZiBhIFJJU0MtViB0cmFjZSBkcml2ZXIKPj4+ICsgKiBpZF90 YWJsZTogVGFibGUgdG8gbWF0Y2ggY29tcG9uZW50cyBoYW5kbGVkIGJ5IHRoZSBkcml2ZXIKPj4+ ICsgKiBwcm9iZTogICAgRHJpdmVyIHByb2JlKCkgZnVuY3Rpb24KPj4+ICsgKiByZW1vdmU6ICAg RHJpdmVyIHJlbW92ZSgpIGZ1bmN0aW9uCj4+PiArICogZHJpdmVyOiAgIERldmljZSBkcml2ZXIg aW5zdGFuY2UKPj4+ICsgKi8KPj4+ICtzdHJ1Y3QgcnZ0cmFjZV9kcml2ZXIgewo+Pj4gKyAgICAg ICBjb25zdCBzdHJ1Y3QgcnZ0cmFjZV9jb21wb25lbnRfaWQgKmlkX3RhYmxlOwo+Pj4gKyAgICAg ICBpbnQgICAgICAgICAgICAgICAgICAgICAoKnByb2JlKShzdHJ1Y3QgcnZ0cmFjZV9jb21wb25l bnQgKmNvbXApOwo+Pj4gKyAgICAgICB2b2lkICAgICAgICAgICAgICAgICAgICAoKnJlbW92ZSko c3RydWN0IHJ2dHJhY2VfY29tcG9uZW50ICpjb21wKTsKPj4+ICsgICAgICAgc3RydWN0IGRldmlj ZV9kcml2ZXIgICAgZHJpdmVyOwo+Pj4gK307Cj4+PiArCj4+PiArI2RlZmluZSB0b19ydnRyYWNl X2RyaXZlcihfX2RydikgICBcCj4+PiArICAgICAgICgoX19kcnYpID8gY29udGFpbmVyX29mX2Nv bnN0KChfX2RydiksIHN0cnVjdCBydnRyYWNlX2RyaXZlciwgZHJpdmVyKSA6IE5VTEwpCj4+PiAr Cj4+PiArZXh0ZXJuIHN0cnVjdCBwbGF0Zm9ybV9kcml2ZXIgcnZ0cmFjZV9wbGF0Zm9ybV9kcml2 ZXI7Cj4+PiArCj4+PiAraW50IF9fcnZ0cmFjZV9yZWdpc3Rlcl9kcml2ZXIoc3RydWN0IG1vZHVs ZSAqb3duZXIsIHN0cnVjdCBydnRyYWNlX2RyaXZlciAqcnRkcnYpOwo+Pj4gKyNkZWZpbmUgcnZ0 cmFjZV9yZWdpc3Rlcl9kcml2ZXIoZHJpdmVyKSBfX3J2dHJhY2VfcmVnaXN0ZXJfZHJpdmVyKFRI SVNfTU9EVUxFLCBkcml2ZXIpCj4+PiArc3RhdGljIGlubGluZSB2b2lkIHJ2dHJhY2VfdW5yZWdp c3Rlcl9kcml2ZXIoc3RydWN0IHJ2dHJhY2VfZHJpdmVyICpydGRydikKPj4+ICt7Cj4+PiArICAg ICAgIGlmIChydGRydikKPj4+ICsgICAgICAgICAgICAgICBkcml2ZXJfdW5yZWdpc3RlcigmcnRk cnYtPmRyaXZlcik7Cj4+PiArfQo+Pj4gKwo+Pj4gKyNlbmRpZgo+Pj4gLS0KPj4+IDIuNDMuMAo+ Pj4KPj4+Cj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f Xwo+Pj4gbGludXgtcmlzY3YgbWFpbGluZyBsaXN0Cj4+PiBsaW51eC1yaXNjdkBsaXN0cy5pbmZy YWRlYWQub3JnCj4+PiBodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZv L2xpbnV4LXJpc2N2Cj4gCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX18KPiBsaW51eC1yaXNjdiBtYWlsaW5nIGxpc3QKPiBsaW51eC1yaXNjdkBsaXN0cy5p bmZyYWRlYWQub3JnCj4gaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1yaXNjdgoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCmxpbnV4LXJpc2N2IG1haWxpbmcgbGlzdApsaW51eC1yaXNjdkBsaXN0cy5pbmZyYWRl YWQub3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgt cmlzY3YK