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 X-Spam-Level: X-Spam-Status: No, score=-6.8 required=3.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id C0E8CC433FF for ; Tue, 13 Aug 2019 21:07:01 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 5EEF12070D for ; Tue, 13 Aug 2019 21:07:01 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726972AbfHMVHA (ORCPT ); Tue, 13 Aug 2019 17:07:00 -0400 Received: from mx0a-002e3701.pphosted.com ([148.163.147.86]:48664 "EHLO mx0a-002e3701.pphosted.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726560AbfHMVHA (ORCPT ); Tue, 13 Aug 2019 17:07:00 -0400 Received: from pps.filterd (m0150241.ppops.net [127.0.0.1]) by mx0a-002e3701.pphosted.com (8.16.0.27/8.16.0.27) with SMTP id x7DL0ngb016384; Tue, 13 Aug 2019 21:06:43 GMT Received: from g4t3427.houston.hpe.com (g4t3427.houston.hpe.com [15.241.140.73]) by mx0a-002e3701.pphosted.com with ESMTP id 2uc43b89bs-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES256-GCM-SHA384 bits=256 verify=NOT); Tue, 13 Aug 2019 21:06:42 +0000 Received: from G2W6309.americas.hpqcorp.net (g2w6309.austin.hp.com [16.197.64.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-SHA384 (256/256 bits)) (No client certificate requested) by g4t3427.houston.hpe.com (Postfix) with ESMTPS id B12A06C; Tue, 13 Aug 2019 21:06:41 +0000 (UTC) Received: from G1W8108.americas.hpqcorp.net (2002:10c1:483c::10c1:483c) by G2W6309.americas.hpqcorp.net (2002:10c5:4033::10c5:4033) with Microsoft SMTP Server (TLS) id 15.0.1367.3; Tue, 13 Aug 2019 21:06:40 +0000 Received: from NAM01-BY2-obe.outbound.protection.outlook.com (15.241.52.10) by G1W8108.americas.hpqcorp.net (16.193.72.60) with Microsoft SMTP Server (TLS) id 15.0.1367.3 via Frontend Transport; Tue, 13 Aug 2019 21:06:40 +0000 ARC-Seal: i=1; a=rsa-sha256; s=arcselector9901; d=microsoft.com; cv=none; b=YyN55iVbbz9ZWSSmxu9q9weaIy7StVV4fNhatPqN4/+PTLTlolgIqdqi4HhWYE4kWsSJhU3GVRGjpieAyS9C0qMAdtOJohbtfQ66JpesfEoaVAfN1nS7UqXoxOOxnjMLJ4VPSycwehMpqcaIoXA6pJayLLM04bXTAB9zC/7SfPIocTrCSF72gi/89rT8p58PLwR1QbX6H8LVBVCAMo2KwUgIqyA5LSnKE3CPpDyUEI+Xt8N+cDGkG+hkhcWyLaYEhnKG/n3pnuyCb8Ias2/fP70RRthdkYVABJaVN/v1OSg1pdg0rv9Fr6MGj5BLPFWv1lqmP4KZKWvBVeG2aurGCA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector9901; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=tpPkrIlu3rhie1g6YV0PvKG7Yi/YghramEeuFTAqaJ8=; b=j4xPwxPFBBwVdhCat1S5/4ONh6E2wrwUQVBXd8N/5AdfKw/tlwE2hYjYOeBf+MLX/fZ5ljQdwrh/uV+xirnu9FLa5yBvhFZAA/1gmd2JtjQC+Ao8WJ4t620casUxFbiMgJPNQYbl1r3anBxF29YhbTNgbnBAO43MzzPmSTvXzIAMB0ydC/0MiK48r4KBo8niFssWeTY/mAZ3V3AOtx2KjECUUdfFh6wOKl0OVPa7Pf98EjF+KMPhrh3dRRz4vDTiSoDIV6P+XAiz5dufOAlJEWizDkY4DsXCK2aG5wo07HEFSWbmVAaazL5EbNHkvn3Uqd4AzhZslxYLMJ6kyKWRHA== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=pass smtp.mailfrom=hpe.com; dmarc=pass action=none header.from=hpe.com; dkim=pass header.d=hpe.com; arc=none Received: from CS1PR8401MB0727.NAMPRD84.PROD.OUTLOOK.COM (10.169.15.135) by CS1PR8401MB1141.NAMPRD84.PROD.OUTLOOK.COM (10.169.14.17) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.2157.18; Tue, 13 Aug 2019 21:06:37 +0000 Received: from CS1PR8401MB0727.NAMPRD84.PROD.OUTLOOK.COM ([fe80::9dd6:863e:f72c:e742]) by CS1PR8401MB0727.NAMPRD84.PROD.OUTLOOK.COM ([fe80::9dd6:863e:f72c:e742%10]) with mapi id 15.20.2157.022; Tue, 13 Aug 2019 21:06:37 +0000 From: "Vaden, Tom (HPE Server OS Architecture)" To: Christoph Hellwig , Tony Luck , "Fenghua Yu" , "Travis, Mike" , "Sivanich, Dimitri" CC: Arnd Bergmann , Greg Kroah-Hartman , "linux-ia64@vger.kernel.org" , "linux-ide@vger.kernel.org" , "linux-scsi@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH 17/28] ia64: remove the hpsim platform Thread-Topic: [PATCH 17/28] ia64: remove the hpsim platform Thread-Index: AQHVUah2bILE01dNrEOkMObVi/jAR6b5kqeA Date: Tue, 13 Aug 2019 21:06:37 +0000 Message-ID: <72d8a21a-bbc3-e515-0ee5-18f5622fa6b3@hpe.com> References: <20190813072514.23299-1-hch@lst.de> <20190813072514.23299-18-hch@lst.de> In-Reply-To: <20190813072514.23299-18-hch@lst.de> Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: x-clientproxiedby: MN2PR13CA0018.namprd13.prod.outlook.com (2603:10b6:208:160::31) To CS1PR8401MB0727.NAMPRD84.PROD.OUTLOOK.COM (2a01:111:e400:750d::7) x-ms-exchange-messagesentrepresentingtype: 1 x-originating-ip: [2601:85:c100:2d8d:dbb0:2ed9:59d1:461] x-ms-publictraffictype: Email x-ms-office365-filtering-correlation-id: d0f21874-b01b-4890-2cce-08d720322100 x-ms-office365-filtering-ht: Tenant x-microsoft-antispam: BCL:0;PCL:0;RULEID:(2390118)(7020095)(4652040)(8989299)(4534185)(4627221)(201703031133081)(201702281549075)(8990200)(5600148)(711020)(4605104)(1401327)(4618075)(2017052603328)(7193020);SRVR:CS1PR8401MB1141; x-ms-traffictypediagnostic: CS1PR8401MB1141: x-ms-exchange-purlcount: 1 x-ms-exchange-transport-forked: True x-microsoft-antispam-prvs: x-ms-oob-tlc-oobclassifiers: OLM:1060; x-forefront-prvs: 01283822F8 x-forefront-antispam-report: SFV:NSPM;SFS:(10019020)(136003)(39860400002)(396003)(366004)(346002)(376002)(189003)(43544003)(199004)(8936002)(36756003)(229853002)(30864003)(11346002)(14454004)(7736002)(5024004)(25786009)(476003)(6306002)(86362001)(14444005)(316002)(110136005)(5660300002)(2616005)(446003)(6512007)(53946003)(53936002)(31696002)(256004)(6246003)(2906002)(54906003)(31686004)(478600001)(102836004)(71190400001)(81156014)(71200400001)(66556008)(66446008)(8676002)(53546011)(186003)(64756008)(66946007)(6436002)(6506007)(66476007)(99286004)(386003)(6636002)(81166006)(46003)(4326008)(76176011)(52116002)(6486002)(6116002)(305945005)(486006)(21314003)(559001)(569006);DIR:OUT;SFP:1102;SCL:1;SRVR:CS1PR8401MB1141;H:CS1PR8401MB0727.NAMPRD84.PROD.OUTLOOK.COM;FPR:;SPF:None;LANG:en;PTR:InfoNoRecords;MX:1;A:1; received-spf: None (protection.outlook.com: hpe.com does not designate permitted sender hosts) x-ms-exchange-senderadcheck: 1 x-microsoft-antispam-message-info: rL/DD4b2T67ntsnwDFrLzINL1J4qA0A/N3fRyoOM61eeLsz5/jdS0uREcU4GBM+ZaCCXCnjRamfRDzpSAuJPCP2AqKShGQhn3+/5Itv6GP6feBXSj7pk7t/5FTkIheP1UHp4Wkm7+cL5cm7CXqbwU81m81OJXFY1joovmsOAU5IJlCJIKuth6cGeknK1t4CRVICvTGfJ0nMf9hvKHvXHC513ZZZLaCmszMREtxHyREYoHWkPvEvXCzbSFnUFOhW3xe5F7WJB80oTG7wwU60p3u7SGRAP43HyECmBUl+gjVWwLiZ1NtLaR7eGeCQdl2+r8+QtJusvumu5xZB5QglhHkKuPsI5xi5FUwYiJr+GfAH2d5nIbhuvSUSUfTI1NrgVLqXZ4R6pajR7vQ51Hvxs7t2HrbleBgUug/Sm/ywUUS0= Content-Type: text/plain; charset="utf-8" Content-ID: <1DA251C2BE880247907347885BD6C0E5@NAMPRD84.PROD.OUTLOOK.COM> X-MS-Exchange-CrossTenant-Network-Message-Id: d0f21874-b01b-4890-2cce-08d720322100 X-MS-Exchange-CrossTenant-originalarrivaltime: 13 Aug 2019 21:06:37.3236 (UTC) X-MS-Exchange-CrossTenant-fromentityheader: Hosted X-MS-Exchange-CrossTenant-id: 105b2061-b669-4b31-92ac-24d304d195dc X-MS-Exchange-CrossTenant-mailboxtype: HOSTED X-MS-Exchange-CrossTenant-userprincipalname: PbCEtOx2S0xUSWT1Ne0LsnfszCF9CmmlGWQeqdONsE4QInyHUKcRIPt9LCYYNAAYOzD6zJklhTYfyaOEwZu3HA== X-MS-Exchange-Transport-CrossTenantHeadersStamped: CS1PR8401MB1141 X-OriginatorOrg: hpe.com Content-Transfer-Encoding: base64 X-Proofpoint-UnRewURL: 0 URL was un-rewritten MIME-Version: 1.0 X-HPE-SCL: -1 X-Proofpoint-Virus-Version: vendor=fsecure engine=2.50.10434:,, definitions=2019-08-13_06:,, signatures=0 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 suspectscore=0 phishscore=0 bulkscore=0 spamscore=0 clxscore=1011 lowpriorityscore=0 mlxscore=0 impostorscore=0 mlxlogscore=999 adultscore=0 classifier=spam adjust=0 reason=mlx scancount=1 engine=8.0.1-1906280000 definitions=main-1908130201 Sender: linux-ide-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-ide@vger.kernel.org DQoNCk9uIDgvMTMvMTkgMzoyNSBBTSwgQ2hyaXN0b3BoIEhlbGx3aWcgd3JvdGU6DQo+IFRoZSBo cHNpbSBwbGF0Zm9ybSBzdXBwb3J0cyB0aGUgSFAgSUE2NCBzaW11bGF0b3Igd2hpY2ggd2FzIHVz ZWZ1bCBhcyBhDQo+IGJyaW5nIHVwIHBsYXRmb3JtLiAgQnV0IGl0IGlzIGZhaXJseSBub24tc3Rh bmRhcmQgdnMgcmVhbCBJQTY0IHN5c3RlbQ0KPiBpbiB0aGF0IGl0IGZvciBleGFtcGxlIGRvZXNu J3Qgc3VwcG9ydCBBQ1BJLiAgSXQgYWxzbyBjb21lcyB3aXRoIGENCj4gd2hvbGUgYnVuY2ggb2Yg c2ltdWxhdG9yIHNwZWNpZmljIGRyaXZlcnMuICBSZW1vdmUgaXQgdG8gc2ltcGxpZnkgdGhlDQo+ IElBNjQgcG9ydC4NCj4gDQo+IE5vdGUgdGhhdCB0aHJvdWdoIGEgd2VpcmQgdHdpc3Qgb25seSB0 aGVtIGhwc2ltIGJvb3QgbG9hZGVyIGJ1aWx0IHRoZQ0KPiB2bWxpbnV4Lmd6IGZpbGUsIHNvIHRo ZSBtYWtlZmlsZSB0YXJnZXRzIGZvciB0aGF0IGFyZSBtb3ZlZCB0byB0aGUNCj4gbWFpbiBpYTY0 IE1ha2VmaWxlIG5vdy4NCj4gDQo+IFNpZ25lZC1vZmYtYnk6IENocmlzdG9waCBIZWxsd2lnIDxo Y2hAbHN0LmRlPg0KDQpPa2F5IHRvIHJlbW92ZSBocHNpbSBzdXBwb3J0DQpBY2tlZC1ieTogVG9t IFZhZGVuIDx0b20udmFkZW5AaHBlLmNvbT4NCg0KPiAtLS0NCj4gICBhcmNoL2lhNjQvS2NvbmZp ZyAgICAgICAgICAgICAgICAgICAgIHwgIDM0ICstDQo+ICAgYXJjaC9pYTY0L01ha2VmaWxlICAg ICAgICAgICAgICAgICAgICB8ICAyNyArLQ0KPiAgIGFyY2gvaWE2NC9jb25maWdzL3NpbV9kZWZj b25maWcgICAgICAgfCAgNTIgLS0tDQo+ICAgYXJjaC9pYTY0L2hwL3NpbS9LY29uZmlnICAgICAg ICAgICAgICB8ICAyMyAtLQ0KPiAgIGFyY2gvaWE2NC9ocC9zaW0vTWFrZWZpbGUgICAgICAgICAg ICAgfCAgMTcgLQ0KPiAgIGFyY2gvaWE2NC9ocC9zaW0vYm9vdC9NYWtlZmlsZSAgICAgICAgfCAg MzcgLS0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9vdF9oZWFkLlMgICAgIHwgMTY1IC0t LS0tLS0tDQo+ICAgYXJjaC9pYTY0L2hwL3NpbS9ib290L2Jvb3Rsb2FkZXIuYyAgICB8IDE3NSAt LS0tLS0tLS0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9vdGxvYWRlci5sZHMgIHwgIDY3 IC0tLS0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2Jvb3QvZnctZW11LmMgICAgICAgIHwgMzc0IC0t LS0tLS0tLS0tLS0tLS0tLQ0KPiAgIGFyY2gvaWE2NC9ocC9zaW0vYm9vdC9zc2MuaCAgICAgICAg ICAgfCAgMzYgLS0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2hwc2ltLlMgICAgICAgICAgICAgIHwg IDExIC0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2NvbnNvbGUuYyAgICAgIHwgIDc3IC0t LS0NCj4gICBhcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2lycS5jICAgICAgICAgIHwgIDc2IC0tLS0N Cj4gICBhcmNoL2lhNjQvaHAvc2ltL2hwc2ltX21hY2h2ZWMuYyAgICAgIHwgICAzIC0NCj4gICBh cmNoL2lhNjQvaHAvc2ltL2hwc2ltX3NldHVwLmMgICAgICAgIHwgIDQxIC0tDQo+ICAgYXJjaC9p YTY0L2hwL3NpbS9ocHNpbV9zc2MuaCAgICAgICAgICB8ICAzNyAtLQ0KPiAgIGFyY2gvaWE2NC9o cC9zaW0vc2ltZXRoLmMgICAgICAgICAgICAgfCA1MTAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LQ0KPiAgIGFyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jICAgICAgICAgICAgfCAzNzMgLS0tLS0t LS0tLS0tLS0tLS0tDQo+ICAgYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYyAgICAgICAgICB8 IDUyMSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KPiAgIGFyY2gvaWE2NC9pbmNsdWRlL2Fz bS9hY3BpLmggICAgICAgICAgfCAgIDQgKy0NCj4gICBhcmNoL2lhNjQvaW5jbHVkZS9hc20vaHBz aW0uaCAgICAgICAgIHwgIDE3IC0NCj4gICBhcmNoL2lhNjQvaW5jbHVkZS9hc20vaW9zYXBpYy5o ICAgICAgIHwgIDEyIC0NCj4gICBhcmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlYy5oICAgICAg IHwgIDExICstDQo+ICAgYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHBzaW0uaCB8ICAx OSAtDQo+ICAgYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZSAgICAgICAgICAgICB8ICAgMyArLQ0K PiAgIGFyY2gvaWE2NC9rZXJuZWwvaXJxX2lhNjQuYyAgICAgICAgICAgfCAgIDIgLQ0KPiAgIGFy Y2gvaWE2NC9rZXJuZWwvc2V0dXAuYyAgICAgICAgICAgICAgfCAgMTMgKy0NCj4gICAyOCBmaWxl cyBjaGFuZ2VkLCAyNiBpbnNlcnRpb25zKCspLCAyNzExIGRlbGV0aW9ucygtKQ0KPiAgIGRlbGV0 ZSBtb2RlIDEwMDY0NCBhcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnDQo+ICAgZGVsZXRl IG1vZGUgMTAwNjQ0IGFyY2gvaWE2NC9ocC9zaW0vS2NvbmZpZw0KPiAgIGRlbGV0ZSBtb2RlIDEw MDY0NCBhcmNoL2lhNjQvaHAvc2ltL01ha2VmaWxlDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGFy Y2gvaWE2NC9ocC9zaW0vYm9vdC9NYWtlZmlsZQ0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNo L2lhNjQvaHAvc2ltL2Jvb3QvYm9vdF9oZWFkLlMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgYXJj aC9pYTY0L2hwL3NpbS9ib290L2Jvb3Rsb2FkZXIuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBh cmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9vdGxvYWRlci5sZHMNCj4gICBkZWxldGUgbW9kZSAxMDA2 NDQgYXJjaC9pYTY0L2hwL3NpbS9ib290L2Z3LWVtdS5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0 IGFyY2gvaWE2NC9ocC9zaW0vYm9vdC9zc2MuaA0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNo L2lhNjQvaHAvc2ltL2hwc2ltLlMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9pYTY0L2hw L3NpbS9ocHNpbV9jb25zb2xlLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9pYTY0L2hw L3NpbS9ocHNpbV9pcnEuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2lhNjQvaHAvc2lt L2hwc2ltX21hY2h2ZWMuYw0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2lhNjQvaHAvc2lt L2hwc2ltX3NldHVwLmMNCj4gICBkZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9pYTY0L2hwL3NpbS9o cHNpbV9zc2MuaA0KPiAgIGRlbGV0ZSBtb2RlIDEwMDY0NCBhcmNoL2lhNjQvaHAvc2ltL3NpbWV0 aC5jDQo+ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvaWE2NC9ocC9zaW0vc2ltc2NzaS5jDQo+ ICAgZGVsZXRlIG1vZGUgMTAwNjQ0IGFyY2gvaWE2NC9ocC9zaW0vc2ltc2VyaWFsLmMNCj4gICBk ZWxldGUgbW9kZSAxMDA2NDQgYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hwc2ltLmgNCj4gICBkZWxl dGUgbW9kZSAxMDA2NDQgYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWNfaHBzaW0uaA0KPiAN Cj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9LY29uZmlnIGIvYXJjaC9pYTY0L0tjb25maWcNCj4g aW5kZXggYWUzYWNhMTQ1MDZlLi42M2RiN2E1Mzc4YWMgMTAwNjQ0DQo+IC0tLSBhL2FyY2gvaWE2 NC9LY29uZmlnDQo+ICsrKyBiL2FyY2gvaWE2NC9LY29uZmlnDQo+IEBAIC0xMCwxMSArMTAsMTEg QEAgY29uZmlnIElBNjQNCj4gICAJYm9vbA0KPiAgIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX1BD X1BBUlBPUlQNCj4gICAJc2VsZWN0IEFSQ0hfTUlHSFRfSEFWRV9QQ19TRVJJTw0KPiAtCXNlbGVj dCBBQ1BJIGlmICghSUE2NF9IUF9TSU0pDQo+IC0Jc2VsZWN0IEFSQ0hfU1VQUE9SVFNfQUNQSSBp ZiAoIUlBNjRfSFBfU0lNKQ0KPiArCXNlbGVjdCBBQ1BJDQo+ICsJc2VsZWN0IEFSQ0hfU1VQUE9S VFNfQUNQSQ0KPiAgIAlzZWxlY3QgQUNQSV9TWVNURU1fUE9XRVJfU1RBVEVTX1NVUFBPUlQgaWYg QUNQSQ0KPiAgIAlzZWxlY3QgQVJDSF9NSUdIVF9IQVZFX0FDUElfUERDIGlmIEFDUEkNCj4gLQlz ZWxlY3QgRk9SQ0VfUENJIGlmICghSUE2NF9IUF9TSU0pDQo+ICsJc2VsZWN0IEZPUkNFX1BDSQ0K PiAgIAlzZWxlY3QgUENJX0RPTUFJTlMgaWYgUENJDQo+ICAgCXNlbGVjdCBQQ0lfU1lTQ0FMTCBp ZiBQQ0kNCj4gICAJc2VsZWN0IEhBVkVfVU5TVEFCTEVfU0NIRURfQ0xPQ0sNCj4gQEAgLTE0MCw3 ICsxNDAsNiBAQCBjb25maWcgSUE2NF9HRU5FUklDDQo+ICAgCSAgSFAtengxL3N4MTAwMAkJRm9y IEhQIHN5c3RlbXMNCj4gICAJICBIUC16eDEvc3gxMDAwK3N3aW90bGIJRm9yIEhQIHN5c3RlbXMg d2l0aCAoYnJva2VuKSBETUEtY29uc3RyYWluZWQgZGV2aWNlcy4NCj4gICAJICBTR0ktVVYJCUZv ciBTR0kgVVYgc3lzdGVtcw0KPiAtCSAgU2tpLXNpbXVsYXRvcgkJRm9yIHRoZSBIUCBzaW11bGF0 b3IgPGh0dHA6Ly93d3cuaHBsLmhwLmNvbS9yZXNlYXJjaC9saW51eC9za2kvPg0KPiAgIA0KPiAg IAkgIElmIHlvdSBkb24ndCBrbm93IHdoYXQgdG8gZG8sIGNob29zZSAiZ2VuZXJpYyIuDQo+ICAg DQo+IEBAIC0xODEsMTEgKzE4MCw2IEBAIGNvbmZpZyBJQTY0X1NHSV9VVg0KPiAgIAkgIHRvIHNl bGVjdCB0aGlzIG9wdGlvbi4gIElmIGluIGRvdWJ0LCBzZWxlY3QgaWE2NCBnZW5lcmljIHN1cHBv cnQNCj4gICAJICBpbnN0ZWFkLg0KPiAgIA0KPiAtY29uZmlnIElBNjRfSFBfU0lNDQo+IC0JYm9v bCAiU2tpLXNpbXVsYXRvciINCj4gLQlzZWxlY3QgU1dJT1RMQg0KPiAtCWRlcGVuZHMgb24gIVBN DQo+IC0NCj4gICBlbmRjaG9pY2UNCj4gICANCj4gICBjaG9pY2UNCj4gQEAgLTIzOSwxNCArMjMz LDcgQEAgY29uZmlnIElBNjRfUEFHRV9TSVpFXzY0S0INCj4gICANCj4gICBlbmRjaG9pY2UNCj4g ICANCj4gLWlmIElBNjRfSFBfU0lNDQo+IC1jb25maWcgSFoNCj4gLQlkZWZhdWx0IDMyDQo+IC1l bmRpZg0KPiAtDQo+IC1pZiAhSUE2NF9IUF9TSU0NCj4gICBzb3VyY2UgImtlcm5lbC9LY29uZmln Lmh6Ig0KPiAtZW5kaWYNCj4gICANCj4gICBjb25maWcgSUE2NF9CUkxfRU1VDQo+ICAgCWJvb2wN Cj4gQEAgLTI2NSwxMSArMjUyLDYgQEAgY29uZmlnIElBNjRfQ1lDTE9ORQ0KPiAgIAkgIFNheSBZ IGhlcmUgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIElCTSBFWEEgQ3ljbG9uZSB0aW1lIHNvdXJjZS4N Cj4gICAJICBJZiB5b3UncmUgdW5zdXJlLCBhbnN3ZXIgTi4NCj4gICANCj4gLWNvbmZpZyBJT1NB UElDDQo+IC0JYm9vbA0KPiAtCWRlcGVuZHMgb24gIUlBNjRfSFBfU0lNDQo+IC0JZGVmYXVsdCB5 DQo+IC0NCj4gICBjb25maWcgRk9SQ0VfTUFYX1pPTkVPUkRFUg0KPiAgIAlpbnQgIk1BWF9PUkRF UiAoMTEgLSAxNykiICBpZiAhSFVHRVRMQl9QQUdFDQo+ICAgCXJhbmdlIDExIDE3ICBpZiAhSFVH RVRMQl9QQUdFDQo+IEBAIC0zNzMsNyArMzU1LDcgQEAgY29uZmlnIEFSQ0hfRElTQ09OVElHTUVN X0RFRkFVTFQNCj4gICANCj4gICBjb25maWcgTlVNQQ0KPiAgIAlib29sICJOVU1BIHN1cHBvcnQi DQo+IC0JZGVwZW5kcyBvbiAhSUE2NF9IUF9TSU0gJiYgIUZMQVRNRU0NCj4gKwlkZXBlbmRzIG9u ICFGTEFUTUVNDQo+ICAgCXNlbGVjdCBBQ1BJX05VTUEgaWYgQUNQSQ0KPiAgIAloZWxwDQo+ICAg CSAgU2F5IFkgdG8gY29tcGlsZSB0aGUga2VybmVsIHRvIHN1cHBvcnQgTlVNQSAoTm9uLVVuaWZv cm0gTWVtb3J5DQo+IEBAIC0zOTUsNyArMzc3LDcgQEAgY29uZmlnIE5PREVTX1NISUZUDQo+ICAg Y29uZmlnIFZJUlRVQUxfTUVNX01BUA0KPiAgIAlib29sICJWaXJ0dWFsIG1lbSBtYXAiDQo+ICAg CWRlcGVuZHMgb24gIVNQQVJTRU1FTQ0KPiAtCWRlZmF1bHQgeSBpZiAhSUE2NF9IUF9TSU0NCj4g KwlkZWZhdWx0IHkNCj4gICAJaGVscA0KPiAgIAkgIFNheSBZIHRvIGNvbXBpbGUgdGhlIGtlcm5l bCB3aXRoIHN1cHBvcnQgZm9yIGEgdmlydHVhbCBtZW0gbWFwLg0KPiAgIAkgIFRoaXMgY29kZSBh bHNvIG9ubHkgdGFrZXMgZWZmZWN0IGlmIGEgbWVtb3J5IGhvbGUgb2YgZ3JlYXRlciB0aGFuDQo+ IEBAIC00NzgsNyArNDYwLDcgQEAgY29uZmlnIElBNjRfSFBfQU1MX05GVw0KPiAgIA0KPiAgIGNv bmZpZyBLRVhFQw0KPiAgIAlib29sICJrZXhlYyBzeXN0ZW0gY2FsbCINCj4gLQlkZXBlbmRzIG9u ICFJQTY0X0hQX1NJTSAmJiAoIVNNUCB8fCBIT1RQTFVHX0NQVSkNCj4gKwlkZXBlbmRzIG9uICFT TVAgfHwgSE9UUExVR19DUFUNCj4gICAJc2VsZWN0IEtFWEVDX0NPUkUNCj4gICAJaGVscA0KPiAg IAkgIGtleGVjIGlzIGEgc3lzdGVtIGNhbGwgdGhhdCBpbXBsZW1lbnRzIHRoZSBhYmlsaXR5IHRv IHNodXRkb3duIHlvdXINCj4gQEAgLTQ5Niw3ICs0NzgsNyBAQCBjb25maWcgS0VYRUMNCj4gICAN Cj4gICBjb25maWcgQ1JBU0hfRFVNUA0KPiAgIAkgIGJvb2wgImtlcm5lbCBjcmFzaCBkdW1wcyIN Cj4gLQkgIGRlcGVuZHMgb24gSUE2NF9NQ0FfUkVDT1ZFUlkgJiYgIUlBNjRfSFBfU0lNICYmICgh U01QIHx8IEhPVFBMVUdfQ1BVKQ0KPiArCSAgZGVwZW5kcyBvbiBJQTY0X01DQV9SRUNPVkVSWSAm JiAoIVNNUCB8fCBIT1RQTFVHX0NQVSkNCj4gICAJICBoZWxwDQo+ICAgCSAgICBHZW5lcmF0ZSBj cmFzaCBkdW1wIGFmdGVyIGJlaW5nIHN0YXJ0ZWQgYnkga2V4ZWMuDQo+ICAgDQo+IEBAIC01MTgs OCArNTAwLDYgQEAgZW5kaWYNCj4gICANCj4gICBlbmRtZW51DQo+ICAgDQo+IC1zb3VyY2UgImFy Y2gvaWE2NC9ocC9zaW0vS2NvbmZpZyINCj4gLQ0KPiAgIGNvbmZpZyBNU1BFQw0KPiAgIAl0cmlz dGF0ZSAiTWVtb3J5IHNwZWNpYWwgb3BlcmF0aW9ucyBkcml2ZXIiDQo+ICAgCWRlcGVuZHMgb24g SUE2NA0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L01ha2VmaWxlIGIvYXJjaC9pYTY0L01ha2Vm aWxlDQo+IGluZGV4IDBkNzMwYjA2MWY3Mi4uOGI4NjZmYzFmOWNiIDEwMDY0NA0KPiAtLS0gYS9h cmNoL2lhNjQvTWFrZWZpbGUNCj4gKysrIGIvYXJjaC9pYTY0L01ha2VmaWxlDQo+IEBAIC0zOSw2 ICszOSwxMiBAQCAkKGVycm9yIFNvcnJ5LCB5b3UgbmVlZCBhIG5ld2VyIHZlcnNpb24gb2YgdGhl IGFzc2VtYmVyLCBvbmUgdGhhdCBpcyBidWlsdCBmcm9tDQo+ICAgCQlmdHA6Ly9mdHAuaHBsLmhw LmNvbS9wdWIvbGludXgtaWE2NC9nYXMtMDMwMTI0LnRhci5neikNCj4gICBlbmRpZg0KPiAgIA0K PiArcXVpZXRfY21kX2d6aXAgPSBHWklQICAgICRADQo+ICtjbWRfZ3ppcCA9IGNhdCAkKHJlYWwt cHJlcmVxcykgfCBnemlwIC1uIC1mIC05ID4gJEANCj4gKw0KPiArcXVpZXRfY21kX29iamNvcHkg PSBPQkpDT1BZICRADQo+ICtjbWRfb2JqY29weSA9ICQoT0JKQ09QWSkgJChPQkpDT1BZRkxBR1Mp ICQoT0JKQ09QWUZMQUdTXyQoQEYpKSAkPCAkQA0KPiArDQo+ICAgS0JVSUxEX0NGTEFHUyArPSAk KGNmbGFncy15KQ0KPiAgIGhlYWQteSA6PSBhcmNoL2lhNjQva2VybmVsL2hlYWQubw0KPiAgIA0K PiBAQCAtNTIsMTUgKzU4LDEyIEBAIGNvcmUtJChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikg Kz0gYXJjaC9pYTY0L2RpZy8NCj4gICBjb3JlLSQoQ09ORklHX0lBNjRfU0dJX1VWKQkrPSBhcmNo L2lhNjQvdXYvDQo+ICAgDQo+ICAgZHJpdmVycy0kKENPTkZJR19QQ0kpCQkrPSBhcmNoL2lhNjQv cGNpLw0KPiAtZHJpdmVycy0kKENPTkZJR19JQTY0X0hQX1NJTSkJKz0gYXJjaC9pYTY0L2hwL3Np bS8NCj4gICBkcml2ZXJzLSQoQ09ORklHX0lBNjRfSFBfWlgxKQkrPSBhcmNoL2lhNjQvaHAvY29t bW9uLyBhcmNoL2lhNjQvaHAvengxLw0KPiAgIGRyaXZlcnMtJChDT05GSUdfSUE2NF9IUF9aWDFf U1dJT1RMQikgKz0gYXJjaC9pYTY0L2hwL2NvbW1vbi8gYXJjaC9pYTY0L2hwL3p4MS8NCj4gLWRy aXZlcnMtJChDT05GSUdfSUE2NF9HRU5FUklDKQkrPSBhcmNoL2lhNjQvaHAvY29tbW9uLyBhcmNo L2lhNjQvaHAvengxLyBhcmNoL2lhNjQvaHAvc2ltLyBhcmNoL2lhNjQvdXYvDQo+ICtkcml2ZXJz LSQoQ09ORklHX0lBNjRfR0VORVJJQykJKz0gYXJjaC9pYTY0L2hwL2NvbW1vbi8gYXJjaC9pYTY0 L2hwL3p4MS8gYXJjaC9pYTY0L3V2Lw0KPiAgIGRyaXZlcnMtJChDT05GSUdfT1BST0ZJTEUpCSs9 IGFyY2gvaWE2NC9vcHJvZmlsZS8NCj4gICANCj4gLWJvb3QgOj0gYXJjaC9pYTY0L2hwL3NpbS9i b290DQo+IC0NCj4gLVBIT05ZICs9IGJvb3QgY29tcHJlc3NlZCBjaGVjaw0KPiArUEhPTlkgKz0g Y29tcHJlc3NlZCBjaGVjaw0KPiAgIA0KPiAgIGFsbDogY29tcHJlc3NlZCB1bndjaGVjaw0KPiAg IA0KPiBAQCAtNjgsMjIgKzcxLDIxIEBAIGNvbXByZXNzZWQ6IHZtbGludXguZ3oNCj4gICANCj4g ICB2bWxpbnV6OiB2bWxpbnV4Lmd6DQo+ICAgDQo+IC12bWxpbnV4Lmd6OiB2bWxpbnV4DQo+IC0J JChRKSQoTUFLRSkgJChidWlsZCk9JChib290KSAkQA0KPiArdm1saW51eC5nejogdm1saW51eC5i aW4gRk9SQ0UNCj4gKwkkKGNhbGwgaWZfY2hhbmdlZCxnemlwKQ0KPiArDQo+ICt2bWxpbnV4LmJp bjogdm1saW51eCBGT1JDRQ0KPiArCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpDQo+ICAgDQo+ ICAgdW53Y2hlY2s6IHZtbGludXgNCj4gICAJLSQoUSlSRUFERUxGPSQoUkVBREVMRikgJChQWVRI T04pICQoc3JjdHJlZSkvYXJjaC9pYTY0L3NjcmlwdHMvdW53Y2hlY2sucHkgJDwNCj4gICANCj4g ICBhcmNoY2xlYW46DQo+IC0JJChRKSQoTUFLRSkgJChjbGVhbik9JChib290KQ0KPiAgIA0KPiAg IGFyY2hoZWFkZXJzOg0KPiAgIAkkKFEpJChNQUtFKSAkKGJ1aWxkKT1hcmNoL2lhNjQva2VybmVs L3N5c2NhbGxzIGFsbA0KPiAgIA0KPiAtQ0xFQU5fRklMRVMgKz0gdm1saW51eC5neiBib290bG9h ZGVyDQo+IC0NCj4gLWJvb3Q6CWxpYi9saWIuYSB2bWxpbnV4DQo+IC0JJChRKSQoTUFLRSkgJChi dWlsZCk9JChib290KSAkQA0KPiArQ0xFQU5fRklMRVMgKz0gdm1saW51eC5neg0KPiAgIA0KPiAg IGluc3RhbGw6IHZtbGludXguZ3oNCj4gICAJc2ggJChzcmN0cmVlKS9hcmNoL2lhNjQvaW5zdGFs bC5zaCAkKEtFUk5FTFJFTEVBU0UpICQ8IFN5c3RlbS5tYXAgIiQoSU5TVEFMTF9QQVRIKSINCj4g QEAgLTkxLDcgKzkzLDYgQEAgaW5zdGFsbDogdm1saW51eC5neg0KPiAgIGRlZmluZSBhcmNoaGVs cA0KPiAgICAgZWNobyAnKiBjb21wcmVzc2VkCS0gQnVpbGQgY29tcHJlc3NlZCBrZXJuZWwgaW1h Z2UnDQo+ICAgICBlY2hvICcgIGluc3RhbGwJLSBJbnN0YWxsIGNvbXByZXNzZWQga2VybmVsIGlt YWdlJw0KPiAtICBlY2hvICcgIGJvb3QJCS0gQnVpbGQgdm1saW51eCBhbmQgYm9vdGxvYWRlciBm b3IgU2tpIHNpbXVsYXRvcicNCj4gICAgIGVjaG8gJyogdW53Y2hlY2sJLSBDaGVjayB2bWxpbnV4 IGZvciBpbnZhbGlkIHVud2luZCBpbmZvJw0KPiAgIGVuZGVmDQo+ICAgDQo+IGRpZmYgLS1naXQg YS9hcmNoL2lhNjQvY29uZmlncy9zaW1fZGVmY29uZmlnIGIvYXJjaC9pYTY0L2NvbmZpZ3Mvc2lt X2RlZmNvbmZpZw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggZjBmNjlmZGJk ZGFlLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2NvbmZpZ3Mvc2ltX2RlZmNvbmZp Zw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDUyICswLDAgQEANCj4gLUNPTkZJR19TWVNWSVBD PXkNCj4gLUNPTkZJR19JS0NPTkZJRz15DQo+IC1DT05GSUdfSUtDT05GSUdfUFJPQz15DQo+IC1D T05GSUdfTE9HX0JVRl9TSElGVD0xNg0KPiAtQ09ORklHX01PRFVMRVM9eQ0KPiAtQ09ORklHX01P RFVMRV9VTkxPQUQ9eQ0KPiAtQ09ORklHX01PRFVMRV9GT1JDRV9VTkxPQUQ9eQ0KPiAtQ09ORklH X01PRFZFUlNJT05TPXkNCj4gLUNPTkZJR19QQVJUSVRJT05fQURWQU5DRUQ9eQ0KPiAtQ09ORklH X0lBNjRfSFBfU0lNPXkNCj4gLUNPTkZJR19NQ0tJTkxFWT15DQo+IC1DT05GSUdfSUE2NF9QQUdF X1NJWkVfNjRLQj15DQo+IC1DT05GSUdfU01QPXkNCj4gLUNPTkZJR19OUl9DUFVTPTY0DQo+IC1D T05GSUdfUFJFRU1QVD15DQo+IC1DT05GSUdfSUE2NF9QQUxJTkZPPW0NCj4gLUNPTkZJR19FRklf VkFSUz15DQo+IC1DT05GSUdfQklORk1UX01JU0M9eQ0KPiAtQ09ORklHX05FVD15DQo+IC1DT05G SUdfUEFDS0VUPXkNCj4gLUNPTkZJR19JTkVUPXkNCj4gLUNPTkZJR19JUF9NVUxUSUNBU1Q9eQ0K PiAtIyBDT05GSUdfSVBWNiBpcyBub3Qgc2V0DQo+IC0jIENPTkZJR19TVEFOREFMT05FIGlzIG5v dCBzZXQNCj4gLUNPTkZJR19CTEtfREVWX0xPT1A9eQ0KPiAtQ09ORklHX0JMS19ERVZfUkFNPXkN Cj4gLUNPTkZJR19TQ1NJPXkNCj4gLUNPTkZJR19CTEtfREVWX1NEPXkNCj4gLUNPTkZJR19TQ1NJ X0NPTlNUQU5UUz15DQo+IC1DT05GSUdfU0NTSV9MT0dHSU5HPXkNCj4gLUNPTkZJR19TQ1NJX1NQ SV9BVFRSUz15DQo+IC0jIENPTkZJR19JTlBVVF9LRVlCT0FSRCBpcyBub3Qgc2V0DQo+IC0jIENP TkZJR19JTlBVVF9NT1VTRSBpcyBub3Qgc2V0DQo+IC0jIENPTkZJR19TRVJJT19JODA0MiBpcyBu b3Qgc2V0DQo+IC0jIENPTkZJR19MRUdBQ1lfUFRZUyBpcyBub3Qgc2V0DQo+IC1DT05GSUdfRUZJ X1JUQz15DQo+IC0jIENPTkZJR19WR0FfQ09OU09MRSBpcyBub3Qgc2V0DQo+IC1DT05GSUdfSFBf U0lNRVRIPXkNCj4gLUNPTkZJR19IUF9TSU1TRVJJQUw9eQ0KPiAtQ09ORklHX0hQX1NJTVNFUklB TF9DT05TT0xFPXkNCj4gLUNPTkZJR19IUF9TSU1TQ1NJPXkNCj4gLUNPTkZJR19FWFQyX0ZTPXkN Cj4gLUNPTkZJR19FWFQzX0ZTPXkNCj4gLSMgQ09ORklHX0VYVDNfRlNfWEFUVFIgaXMgbm90IHNl dA0KPiAtQ09ORklHX1BST0NfS0NPUkU9eQ0KPiAtQ09ORklHX0hVR0VUTEJGUz15DQo+IC1DT05G SUdfTkZTX0ZTPXkNCj4gLUNPTkZJR19ORlNEPXkNCj4gLUNPTkZJR19ORlNEX1YzPXkNCj4gLUNP TkZJR19ERUJVR19JTkZPPXkNCj4gLUNPTkZJR19ERUJVR19LRVJORUw9eQ0KPiAtQ09ORklHX0RF QlVHX01VVEVYRVM9eQ0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9LY29uZmlnIGIv YXJjaC9pYTY0L2hwL3NpbS9LY29uZmlnDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBp bmRleCA1NmZiNGYxZDRmN2MuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2lt L0tjb25maWcNCj4gKysrIC9kZXYvbnVsbA0KPiBAQCAtMSwyMyArMCwwIEBADQo+IC0jIFNQRFgt TGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+IC0NCj4gLW1lbnUgIkhQIFNpbXVsYXRvciBk cml2ZXJzIg0KPiAtCWRlcGVuZHMgb24gSUE2NF9IUF9TSU0gfHwgSUE2NF9HRU5FUklDDQo+IC0N Cj4gLWNvbmZpZyBIUF9TSU1FVEgNCj4gLQlib29sICJTaW11bGF0ZWQgRXRoZXJuZXQgIg0KPiAt CWRlcGVuZHMgb24gTkVUDQo+IC0NCj4gLWNvbmZpZyBIUF9TSU1TRVJJQUwNCj4gLQlib29sICJT aW11bGF0ZWQgc2VyaWFsIGRyaXZlciBzdXBwb3J0Ig0KPiAtCWRlcGVuZHMgb24gVFRZDQo+IC0N Cj4gLWNvbmZpZyBIUF9TSU1TRVJJQUxfQ09OU09MRQ0KPiAtCWJvb2wgIkNvbnNvbGUgZm9yIEhQ IHNpbXVsYXRvciINCj4gLQlkZXBlbmRzIG9uIEhQX1NJTVNFUklBTA0KPiAtDQo+IC1jb25maWcg SFBfU0lNU0NTSQ0KPiAtCWJvb2wgIlNpbXVsYXRlZCBTQ1NJIGRpc2siDQo+IC0JZGVwZW5kcyBv biBTQ1NJPXkNCj4gLQ0KPiAtZW5kbWVudQ0KPiAtDQo+IGRpZmYgLS1naXQgYS9hcmNoL2lhNjQv aHAvc2ltL01ha2VmaWxlIGIvYXJjaC9pYTY0L2hwL3NpbS9NYWtlZmlsZQ0KPiBkZWxldGVkIGZp bGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMDIyNGExM2QyYzViLi4wMDAwMDAwMDAwMDANCj4gLS0t IGEvYXJjaC9pYTY0L2hwL3NpbS9NYWtlZmlsZQ0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDE3 ICswLDAgQEANCj4gLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gLSMNCj4g LSMgaWE2NC9wbGF0Zm9ybS9ocC9zaW0vTWFrZWZpbGUNCj4gLSMNCj4gLSMgQ29weXJpZ2h0IChD KSAyMDAyIEhld2xldHQtUGFja2FyZCBDby4NCj4gLSMJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRh dmlkbUBocGwuaHAuY29tPg0KPiAtIyBDb3B5cmlnaHQgKEMpIDE5OTkgU2lsaWNvbiBHcmFwaGlj cywgSW5jLg0KPiAtIyBDb3B5cmlnaHQgKEMpIFNyaW5pdmFzYSBUaGlydW1hbGFjaGFyIChzcHJh c2FkQGVuZ3Iuc2dpLmNvbSkNCj4gLSMNCj4gLQ0KPiAtb2JqLXkgOj0gaHBzaW1faXJxLm8gaHBz aW1fc2V0dXAubyBocHNpbS5vDQo+IC1vYmotJChDT05GSUdfSUE2NF9HRU5FUklDKSArPSBocHNp bV9tYWNodmVjLm8NCj4gLQ0KPiAtb2JqLSQoQ09ORklHX0hQX1NJTUVUSCkJKz0gc2ltZXRoLm8N Cj4gLW9iai0kKENPTkZJR19IUF9TSU1TRVJJQUwpICs9IHNpbXNlcmlhbC5vDQo+IC1vYmotJChD T05GSUdfSFBfU0lNU0VSSUFMX0NPTlNPTEUpICs9IGhwc2ltX2NvbnNvbGUubw0KPiAtb2JqLSQo Q09ORklHX0hQX1NJTVNDU0kpICs9IHNpbXNjc2kubw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0 L2hwL3NpbS9ib290L01ha2VmaWxlIGIvYXJjaC9pYTY0L2hwL3NpbS9ib290L01ha2VmaWxlDQo+ IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBkZjZlOTk2OGM4NDUuLjAwMDAwMDAw MDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvTWFrZWZpbGUNCj4gKysrIC9kZXYv bnVsbA0KPiBAQCAtMSwzNyArMCwwIEBADQo+IC0jDQo+IC0jIGlhNjQvYm9vdC9NYWtlZmlsZQ0K PiAtIw0KPiAtIyBUaGlzIGZpbGUgaXMgc3ViamVjdCB0byB0aGUgdGVybXMgYW5kIGNvbmRpdGlv bnMgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYw0KPiAtIyBMaWNlbnNlLiAgU2VlIHRoZSBmaWxl ICJDT1BZSU5HIiBpbiB0aGUgbWFpbiBkaXJlY3Rvcnkgb2YgdGhpcyBhcmNoaXZlDQo+IC0jIGZv ciBtb3JlIGRldGFpbHMuDQo+IC0jDQo+IC0jIENvcHlyaWdodCAoQykgMTk5OCwgMjAwMyBieSBE YXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+DQo+IC0jDQo+IC0NCj4gLXRh cmdldHMtJChDT05GSUdfSUE2NF9IUF9TSU0pICArPSBib290bG9hZGVyDQo+IC10YXJnZXRzIDo9 IHZtbGludXguYmluIHZtbGludXguZ3ogJCh0YXJnZXRzLXkpDQo+IC0NCj4gLXF1aWV0X2NtZF9j cHRvdG9wID0gTE4gICAgICAkQA0KPiAtICAgICAgY21kX2NwdG90b3AgPSBsbiAtZiAkPCAkQA0K PiAtDQo+IC12bWxpbnV4Lmd6OiAkKG9iaikvdm1saW51eC5neiAkKGFkZHByZWZpeCAkKG9iaikv LCQodGFyZ2V0cy15KSkNCj4gLQkkKGNhbGwgY21kLGNwdG90b3ApDQo+IC0JQGVjaG8gJyAgS2Vy bmVsOiAkQCBpcyByZWFkeScNCj4gLQ0KPiAtYm9vdDogYm9vdGxvYWRlcg0KPiAtDQo+IC1ib290 bG9hZGVyOiAkKG9iaikvYm9vdGxvYWRlcg0KPiAtCSQoY2FsbCBjbWQsY3B0b3RvcCkNCj4gLQ0K PiAtJChvYmopL3ZtbGludXguZ3o6ICQob2JqKS92bWxpbnV4LmJpbiBGT1JDRQ0KPiAtCSQoY2Fs bCBpZl9jaGFuZ2VkLGd6aXApDQo+IC0NCj4gLSQob2JqKS92bWxpbnV4LmJpbjogdm1saW51eCBG T1JDRQ0KPiAtCSQoY2FsbCBpZl9jaGFuZ2VkLG9iamNvcHkpDQo+IC0NCj4gLQ0KPiAtTERGTEFH U19ib290bG9hZGVyID0gLXN0YXRpYyAtVA0KPiAtDQo+IC0kKG9iaikvYm9vdGxvYWRlcjogJChz cmMpL2Jvb3Rsb2FkZXIubGRzICQob2JqKS9ib290bG9hZGVyLm8gJChvYmopL2Jvb3RfaGVhZC5v ICQob2JqKS9mdy1lbXUubyBcDQo+IC0gICAgICAgICAgICAgICAgICAgbGliL2xpYi5hIGFyY2gv aWE2NC9saWIvbGliLmEgRk9SQ0UNCj4gLQkkKGNhbGwgaWZfY2hhbmdlZCxsZCkNCj4gZGlmZiAt LWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9ib290X2hlYWQuUyBiL2FyY2gvaWE2NC9ocC9z aW0vYm9vdC9ib290X2hlYWQuUw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXgg YTdkMTc4ZmI0MWU4Li4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ib290 L2Jvb3RfaGVhZC5TDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTY1ICswLDAgQEANCj4gLS8q IFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovDQo+IC0vKg0KPiAtICogQ29weXJp Z2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENvDQo+IC0gKglEYXZpZCBNb3NiZXJn ZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+DQo+IC0gKi8NCj4gLQ0KPiAtI2luY2x1ZGUgPGFz bS9hc21tYWNyby5oPg0KPiAtI2luY2x1ZGUgPGFzbS9wYWwuaD4NCj4gLQ0KPiAtCS5ic3MNCj4g LQkuYWxpZ24gMTYNCj4gLXN0YWNrX21lbToNCj4gLQkuc2tpcCAxNjgzNA0KPiAtDQo+IC0JLnRl eHQNCj4gLQ0KPiAtLyogVGhpcyBuZWVkcyB0byBiZSBkZWZpbmVkIGJlY2F1c2UgbGliL3N0cmlu Zy5jOnN0cmxjYXQoKSBjYWxscyBpdCBpbiBjYXNlIG9mIGVycm9yLi4uICovDQo+IC1HTE9CQUxf RU5UUlkocHJpbnRrKQ0KPiAtCWJyZWFrIDANCj4gLUVORChwcmludGspDQo+IC0NCj4gLUdMT0JB TF9FTlRSWShfc3RhcnQpDQo+IC0JLnByb2xvZ3VlDQo+IC0JLnNhdmUgcnAsIHIwDQo+IC0JLmJv ZHkNCj4gLQltb3ZsIGdwID0gX19ncA0KPiAtCW1vdmwgc3AgPSBzdGFja19tZW0rMTYzODQtMTYN Cj4gLQlic3cuMQ0KPiAtCWJyLmNhbGwuc3B0ay5tYW55IHJwPXN0YXJ0X2Jvb3Rsb2FkZXINCj4g LTA6CW5vcCAwCQkgIC8qIGR1bW15IG5vcCB0byBtYWtlIHVud2luZGluZyB3b3JrICovDQo+IC1F TkQoX3N0YXJ0KQ0KPiAtDQo+IC0vKg0KPiAtICogU2V0IGEgYnJlYWsgcG9pbnQgb24gdGhpcyBm dW5jdGlvbiBzbyB0aGF0IHN5bWJvbHMgYXJlIGF2YWlsYWJsZSB0byBzZXQgYnJlYWtwb2ludHMg aW4NCj4gLSAqIHRoZSBrZXJuZWwgYmVpbmcgZGVidWdnZWQuDQo+IC0gKi8NCj4gLUdMT0JBTF9F TlRSWShkZWJ1Z19icmVhaykNCj4gLQlici5yZXQuc3B0ay5tYW55IGIwDQo+IC1FTkQoZGVidWdf YnJlYWspDQo+IC0NCj4gLUdMT0JBTF9FTlRSWShzc2MpDQo+IC0JLnJlZ3N0ayA1LDAsMCwwDQo+ IC0JbW92IHIxNT1pbjQNCj4gLQlicmVhayAweDgwMDAxDQo+IC0JYnIucmV0LnNwdGsubWFueSBi MA0KPiAtRU5EKHNzYykNCj4gLQ0KPiAtR0xPQkFMX0VOVFJZKGptcF90b19rZXJuZWwpDQo+IC0J LnJlZ3N0ayAyLDAsMCwwDQo+IC0JbW92IHIyOD1pbjANCj4gLQltb3YgYjc9aW4xDQo+IC0JYnIu c3B0ay5mZXcgYjcNCj4gLUVORChqbXBfdG9fa2VybmVsKQ0KPiAtDQo+IC0vKg0KPiAtICogcjI4 IGNvbnRhaW5zIHRoZSBpbmRleCBvZiB0aGUgUEFMIGZ1bmN0aW9uDQo+IC0gKiByMjktLTMxIHRo ZSBhcmdzDQo+IC0gKiBSZXR1cm4gdmFsdWVzIGluIHJldDAtLTMgKHI4LS0xMSkNCj4gLSAqLw0K PiAtR0xPQkFMX0VOVFJZKHBhbF9lbXVsYXRvcl9zdGF0aWMpDQo+IC0JbW92IHI4PS0xDQo+IC0J bW92IHI5PTI1Ng0KPiAtCTs7DQo+IC0JY21wLmd0dSBwNixwNz1yOSxyMjgJCS8qIHIyOCA8PSAy NTU/ICovDQo+IC0ocDYpCWJyLmNvbmQuc3B0ay5mZXcgc3RhdGljDQo+IC0JOzsNCj4gLQltb3Yg cjk9NTEyDQo+IC0JOzsNCj4gLQljbXAuZ3R1IHA2LHA3PXI5LHIyOA0KPiAtKHA2KQlici5jb25k LnNwdGsuZmV3IHN0YWNrZWQNCj4gLQk7Ow0KPiAtc3RhdGljOgljbXAuZXEgcDYscDc9UEFMX1BU Q0VfSU5GTyxyMjgNCj4gLShwNykJYnIuY29uZC5zcHRrLmZldyAxZg0KPiAtCTs7DQo+IC0JbW92 IHI4PTAJCQkvKiBzdGF0dXMgPSAwICovDQo+IC0JbW92bCByOT0weDEwMDAwMDAwMAkJLyogdGMu YmFzZSAqLw0KPiAtCW1vdmwgcjEwPTB4MDAwMDAwMDIwMDAwMDAwMwkvKiBjb3VudFswXSwgY291 bnRbMV0gKi8NCj4gLQltb3ZsIHIxMT0weDEwMDAwMDAwMDAwMDIwMDAJLyogc3RyaWRlWzBdLCBz dHJpZGVbMV0gKi8NCj4gLQlici5jb25kLnNwdGsuZmV3IHJwDQo+IC0xOgljbXAuZXEgcDYscDc9 UEFMX0ZSRVFfUkFUSU9TLHIyOA0KPiAtKHA3KQlici5jb25kLnNwdGsuZmV3IDFmDQo+IC0JbW92 IHI4PTAJCQkvKiBzdGF0dXMgPSAwICovDQo+IC0JbW92bCByOSA9MHgxMDAwMDAwNjQJCS8qIHBy b2NfcmF0aW8gKDEvMTAwKSAqLw0KPiAtCW1vdmwgcjEwPTB4MTAwMDAwMTAwCQkvKiBidXNfcmF0 aW88PDMyICgxLzI1NikgKi8NCj4gLQltb3ZsIHIxMT0weDEwMDAwMDA2NAkJLyogaXRjX3JhdGlv PDwzMiAoMS8xMDApICovDQo+IC0JOzsNCj4gLTE6CWNtcC5lcSBwNixwNz1QQUxfUlNFX0lORk8s cjI4DQo+IC0ocDcpCWJyLmNvbmQuc3B0ay5mZXcgMWYNCj4gLQltb3Ygcjg9MAkJCS8qIHN0YXR1 cyA9IDAgKi8NCj4gLQltb3Ygcjk9OTYJCQkvKiBudW0gcGh5cyBzdGFja2VkICovDQo+IC0JbW92 IHIxMD0wCQkJLyogaGludHMgKi8NCj4gLQltb3YgcjExPTANCj4gLQlici5jb25kLnNwdGsuZmV3 IHJwDQo+IC0xOgljbXAuZXEgcDYscDc9UEFMX0NBQ0hFX0ZMVVNILHIyOAkJLyogUEFMX0NBQ0hF X0ZMVVNIICovDQo+IC0ocDcpCWJyLmNvbmQuc3B0ay5mZXcgMWYNCj4gLQltb3Ygcjk9YXIubGMN Cj4gLQltb3ZsIHI4PTUyNDI4OAkJCS8qIGZsdXNoIDUxMmsgbWlsbGlvbiBjYWNoZSBsaW5lcyAo MTZNQikgKi8NCj4gLQk7Ow0KPiAtCW1vdiBhci5sYz1yOA0KPiAtCW1vdmwgcjg9MHhlMDAwMDAw MDAwMDAwMDAwDQo+IC0JOzsNCj4gLS5sb29wOglmYyByOA0KPiAtCWFkZCByOD0zMixyOA0KPiAt CWJyLmNsb29wLnNwdGsuZmV3IC5sb29wDQo+IC0Jc3luYy5pDQo+IC0JOzsNCj4gLQlzcmx6LmkN Cj4gLQk7Ow0KPiAtCW1vdiBhci5sYz1yOQ0KPiAtCW1vdiByOD1yMA0KPiAtCTs7DQo+IC0xOglj bXAuZXEgcDYscDc9UEFMX1BFUkZfTU9OX0lORk8scjI4DQo+IC0ocDcpCWJyLmNvbmQuc3B0ay5m ZXcgMWYNCj4gLQltb3Ygcjg9MAkJCS8qIHN0YXR1cyA9IDAgKi8NCj4gLQltb3ZsIHI5ID0weDA4 MTIyZjA0CQkvKiBnZW5lcmljPTQgd2lkdGg9NDcgcmV0aXJlZD04IGN5Y2xlcz0xOCAqLw0KPiAt CW1vdiByMTA9MAkJCS8qIHJlc2VydmVkICovDQo+IC0JbW92IHIxMT0wCQkJLyogcmVzZXJ2ZWQg Ki8NCj4gLQltb3YgcjE2PTB4ZmZmZgkJCS8qIGltcGxlbWVudGVkIFBNQyAqLw0KPiAtCW1vdiBy MTc9MHgzZmZmZgkJCS8qIGltcGxlbWVudGVkIFBNRCAqLw0KPiAtCWFkZCByMTg9OCxyMjkJCQkv KiBzZWNvbmQgaW5kZXggKi8NCj4gLQk7Ow0KPiAtCXN0OCBbcjI5XT1yMTYsMTYJCS8qIHN0b3Jl IGltcGxlbWVudGVkIFBNQyAqLw0KPiAtCXN0OCBbcjE4XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFp bmluZyBiaXRzICAqLw0KPiAtCTs7DQo+IC0Jc3Q4IFtyMjldPXIwLDE2CQkJLyogY2xlYXIgcmVt YWluaW5nIGJpdHMgICovDQo+IC0Jc3Q4IFtyMThdPXIwLDE2CQkJLyogY2xlYXIgcmVtYWluaW5n IGJpdHMgICovDQo+IC0JOzsNCj4gLQlzdDggW3IyOV09cjE3LDE2CQkvKiBzdG9yZSBpbXBsZW1l bnRlZCBQTUQgKi8NCj4gLQlzdDggW3IxOF09cjAsMTYJCQkvKiBjbGVhciByZW1haW5pbmcgYml0 cyAgKi8NCj4gLQltb3YgcjE2PTB4ZjAJCQkvKiBjeWNsZXMgY291bnQgY2FwYWJsZSBQTUMgKi8N Cj4gLQk7Ow0KPiAtCXN0OCBbcjI5XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFpbmluZyBiaXRzICAq Lw0KPiAtCXN0OCBbcjE4XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFpbmluZyBiaXRzICAqLw0KPiAt CW1vdiByMTc9MHhmMAkJCS8qIHJldGlyZWQgYnVuZGxlcyBjYXBhYmxlIFBNQyAqLw0KPiAtCTs7 DQo+IC0Jc3Q4IFtyMjldPXIxNiwxNgkJLyogc3RvcmUgY3ljbGVzIGNhcGFibGUgKi8NCj4gLQlz dDggW3IxOF09cjAsMTYJCQkvKiBjbGVhciByZW1haW5pbmcgYml0cyAgKi8NCj4gLQk7Ow0KPiAt CXN0OCBbcjI5XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFpbmluZyBiaXRzICAqLw0KPiAtCXN0OCBb cjE4XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFpbmluZyBiaXRzICAqLw0KPiAtCTs7DQo+IC0Jc3Q4 IFtyMjldPXIxNywxNgkJLyogc3RvcmUgcmV0aXJlZCBidW5kbGUgY2FwYWJsZSAqLw0KPiAtCXN0 OCBbcjE4XT1yMCwxNgkJCS8qIGNsZWFyIHJlbWFpbmluZyBiaXRzICAqLw0KPiAtCTs7DQo+IC0J c3Q4IFtyMjldPXIwLDE2CQkJLyogY2xlYXIgcmVtYWluaW5nIGJpdHMgICovDQo+IC0Jc3Q4IFty MThdPXIwLDE2CQkJLyogY2xlYXIgcmVtYWluaW5nIGJpdHMgICovDQo+IC0JOzsNCj4gLTE6CWNt cC5lcSBwNixwNz1QQUxfVk1fU1VNTUFSWSxyMjgNCj4gLShwNykJYnIuY29uZC5zcHRrLmZldyAx Zg0KPiAtCW1vdglyOD0wCQkJLyogc3RhdHVzID0gMCAgKi8NCj4gLQltb3ZsCXI5PTB4MjA0NDA0 MDAyMEYxODY1CS8qIG51bV90Y19sZXZlbHM9MiwgbnVtX3VuaXF1ZV90Y3M9NCAqLw0KPiAtCQkJ CQkvKiBtYXhfaXRyX2VudHJ5PTY0LCBtYXhfZHRyX2VudHJ5PTY0ICovDQo+IC0JCQkJCS8qIGhh c2hfdGFnX2lkPTIsIG1heF9wa3I9MTUgKi8NCj4gLQkJCQkJLyoga2V5X3NpemU9MjQsIHBoeXNf YWRkX3NpemU9NTAsIHZ3PTEgKi8NCj4gLQltb3ZsCXIxMD0weDE4M0MJCS8qIHJpZF9zaXplPTI0 LCBpbXBsX3ZhX21zYj02MCAqLw0KPiAtCTs7DQo+IC0xOgljbXAuZXEgcDYscDc9UEFMX01FTV9B VFRSSUIscjI4DQo+IC0ocDcpCWJyLmNvbmQuc3B0ay5mZXcgMWYNCj4gLQltb3YJcjg9MAkJCS8q IHN0YXR1cyA9IDAgKi8NCj4gLQltb3YJcjk9MHg4MHwweDAxCQkvKiBOYXRQYWdlfFdCICovDQo+ IC0JOzsNCj4gLTE6CWJyLmNvbmQuc3B0ay5mZXcgcnANCj4gLXN0YWNrZWQ6DQo+IC0JYnIucmV0 LnNwdGsuZmV3IHJwDQo+IC1FTkQocGFsX2VtdWxhdG9yX3N0YXRpYykNCj4gZGlmZiAtLWdpdCBh L2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9ib290bG9hZGVyLmMgYi9hcmNoL2lhNjQvaHAvc2ltL2Jv b3QvYm9vdGxvYWRlci5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCA2ZDgw NDYwOGRjODEuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9v dGxvYWRlci5jDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTc1ICswLDAgQEANCj4gLS8vIFNQ RFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+IC0vKg0KPiAtICogYXJjaC9pYTY0L2hw L3NpbS9ib290L2Jvb3Rsb2FkZXIuYw0KPiAtICoNCj4gLSAqIExvYWRzIGFuIEVMRiBrZXJuZWwu DQo+IC0gKg0KPiAtICogQ29weXJpZ2h0IChDKSAxOTk4LTIwMDMgSGV3bGV0dC1QYWNrYXJkIENv DQo+IC0gKglEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+DQo+IC0gKglT dGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+DQo+IC0gKg0KPiAtICogMDEvMDcv OTkgUy5FcmFuaWFuIG1vZGlmaWVkIHRvIHBhc3MgY29tbWFuZCBsaW5lIGFyZ3VtZW50cyB0byBr ZXJuZWwNCj4gLSAqLw0KPiAtc3RydWN0IHRhc2tfc3RydWN0OwkvKiBmb3J3YXJkIGRlY2xhcmF0 aW9uIGZvciBlbGYuaCAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvZWxmLmg+DQo+IC0jaW5j bHVkZSA8bGludXgvaW5pdC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiAtDQo+ IC0jaW5jbHVkZSA8YXNtL2VsZi5oPg0KPiAtI2luY2x1ZGUgPGFzbS9pbnRyaW5zaWNzLmg+DQo+ IC0jaW5jbHVkZSA8YXNtL3BhbC5oPg0KPiAtI2luY2x1ZGUgPGFzbS9wZ3RhYmxlLmg+DQo+IC0j aW5jbHVkZSA8YXNtL3NhbC5oPg0KPiAtDQo+IC0jaW5jbHVkZSAic3NjLmgiDQo+IC0NCj4gLXN0 cnVjdCBkaXNrX3JlcSB7DQo+IC0JdW5zaWduZWQgbG9uZyBhZGRyOw0KPiAtCXVuc2lnbmVkIGxl bjsNCj4gLX07DQo+IC0NCj4gLXN0cnVjdCBkaXNrX3N0YXQgew0KPiAtCWludCBmZDsNCj4gLQl1 bnNpZ25lZCBjb3VudDsNCj4gLX07DQo+IC0NCj4gLWV4dGVybiB2b2lkIGptcF90b19rZXJuZWwg KHVuc2lnbmVkIGxvbmcgYnAsIHVuc2lnbmVkIGxvbmcgZV9lbnRyeSk7DQo+IC1leHRlcm4gc3Ry dWN0IGlhNjRfYm9vdF9wYXJhbSAqc3lzX2Z3X2luaXQgKGNvbnN0IGNoYXIgKmFyZ3MsIGludCBh cmdsZW4pOw0KPiAtZXh0ZXJuIHZvaWQgZGVidWdfYnJlYWsgKHZvaWQpOw0KPiAtDQo+IC1zdGF0 aWMgdm9pZA0KPiAtY29uc193cml0ZSAoY29uc3QgY2hhciAqYnVmKQ0KPiAtew0KPiAtCXVuc2ln bmVkIGxvbmcgY2g7DQo+IC0NCj4gLQl3aGlsZSAoKGNoID0gKmJ1ZisrKSAhPSAnXDAnKSB7DQo+ IC0JCXNzYyhjaCwgMCwgMCwgMCwgU1NDX1BVVENIQVIpOw0KPiAtCQlpZiAoY2ggPT0gJ1xuJykN Cj4gLQkJICBzc2MoJ1xyJywgMCwgMCwgMCwgU1NDX1BVVENIQVIpOw0KPiAtCX0NCj4gLX0NCj4g LQ0KPiAtI2RlZmluZSBNQVhfQVJHUyAzMg0KPiAtDQo+IC12b2lkDQo+IC1zdGFydF9ib290bG9h ZGVyICh2b2lkKQ0KPiAtew0KPiAtCXN0YXRpYyBjaGFyIG1lbVs0MDk2XTsNCj4gLQlzdGF0aWMg Y2hhciBidWZmZXJbMTAyNF07DQo+IC0JdW5zaWduZWQgbG9uZyBvZmY7DQo+IC0JaW50IGZkLCBp Ow0KPiAtCXN0cnVjdCBkaXNrX3JlcSByZXE7DQo+IC0Jc3RydWN0IGRpc2tfc3RhdCBzdGF0Ow0K PiAtCXN0cnVjdCBlbGZoZHIgKmVsZjsNCj4gLQlzdHJ1Y3QgZWxmX3BoZHIgKmVsZl9waGRyOwkv KiBwcm9ncmFtIGhlYWRlciAqLw0KPiAtCXVuc2lnbmVkIGxvbmcgZV9lbnRyeSwgZV9waG9mZiwg ZV9waG51bTsNCj4gLQlyZWdpc3RlciBzdHJ1Y3QgaWE2NF9ib290X3BhcmFtICpicDsNCj4gLQlj aGFyICprcGF0aCwgKmFyZ3M7DQo+IC0JbG9uZyBhcmdsZW4gPSAwOw0KPiAtDQo+IC0Jc3NjKDAs IDAsIDAsIDAsIFNTQ19DT05TT0xFX0lOSVQpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBTLkVyYW5p YW46IGV4dHJhY3QgdGhlIGNvbW1hbmRsaW5lIGFyZ3VtZW50IGZyb20gdGhlIHNpbXVsYXRvcg0K PiAtCSAqDQo+IC0JICogVGhlIGV4cGVjdGVkIGZvcm1hdCBpcyBhcyBmb2xsb3dzOg0KPiAtICAg ICAgICAgKg0KPiAtCSAqCWtlcm5lbG5hbWUgYXJncy4uLg0KPiAtCSAqDQo+IC0JICogQm90aCBh cmUgb3B0aW9uYWwgYnV0IHlvdSBjYW4ndCBoYXZlIHRoZSBzZWNvbmQgb25lIHdpdGhvdXQgdGhl IGZpcnN0Lg0KPiAtCSAqLw0KPiAtCWFyZ2xlbiA9IHNzYygobG9uZykgYnVmZmVyLCAwLCAwLCAw LCBTU0NfR0VUX0FSR1MpOw0KPiAtDQo+IC0Ja3BhdGggPSAidm1saW51eCI7DQo+IC0JYXJncyA9 IGJ1ZmZlcjsNCj4gLQlpZiAoYXJnbGVuID4gMCkgew0KPiAtCQlrcGF0aCA9IGJ1ZmZlcjsNCj4g LQkJd2hpbGUgKCphcmdzICE9ICcgJyAmJiAqYXJncyAhPSAnXDAnKQ0KPiAtCQkJKythcmdzLCAt LWFyZ2xlbjsNCj4gLQkJaWYgKCphcmdzID09ICcgJykNCj4gLQkJCSphcmdzKysgPSAnXDAnLCAt LWFyZ2xlbjsNCj4gLQl9DQo+IC0NCj4gLQlpZiAoYXJnbGVuIDw9IDApIHsNCj4gLQkJYXJncyA9 ICIiOw0KPiAtCQlhcmdsZW4gPSAxOw0KPiAtCX0NCj4gLQ0KPiAtCWZkID0gc3NjKChsb25nKSBr cGF0aCwgMSwgMCwgMCwgU1NDX09QRU4pOw0KPiAtDQo+IC0JaWYgKGZkIDwgMCkgew0KPiAtCQlj b25zX3dyaXRlKGtwYXRoKTsNCj4gLQkJY29uc193cml0ZSgiOiBmaWxlIG5vdCBmb3VuZCwgcmVi b290IG5vd1xuIik7DQo+IC0JCWZvcig7Oyk7DQo+IC0JfQ0KPiAtCXN0YXQuZmQgPSBmZDsNCj4g LQlvZmYgPSAwOw0KPiAtDQo+IC0JcmVxLmxlbiA9IHNpemVvZihtZW0pOw0KPiAtCXJlcS5hZGRy ID0gKGxvbmcpIG1lbTsNCj4gLQlzc2MoZmQsIDEsIChsb25nKSAmcmVxLCBvZmYsIFNTQ19SRUFE KTsNCj4gLQlzc2MoKGxvbmcpICZzdGF0LCAwLCAwLCAwLCBTU0NfV0FJVF9DT01QTEVUSU9OKTsN Cj4gLQ0KPiAtCWVsZiA9IChzdHJ1Y3QgZWxmaGRyICopIG1lbTsNCj4gLQlpZiAoZWxmLT5lX2lk ZW50WzBdID09IDB4N2YgJiYgc3RybmNtcChlbGYtPmVfaWRlbnQgKyAxLCAiRUxGIiwgMykgIT0g MCkgew0KPiAtCQljb25zX3dyaXRlKCJub3QgYW4gRUxGIGZpbGVcbiIpOw0KPiAtCQlyZXR1cm47 DQo+IC0JfQ0KPiAtCWlmIChlbGYtPmVfdHlwZSAhPSBFVF9FWEVDKSB7DQo+IC0JCWNvbnNfd3Jp dGUoIm5vdCBhbiBFTEYgZXhlY3V0YWJsZVxuIik7DQo+IC0JCXJldHVybjsNCj4gLQl9DQo+IC0J aWYgKCFlbGZfY2hlY2tfYXJjaChlbGYpKSB7DQo+IC0JCWNvbnNfd3JpdGUoImtlcm5lbCBub3Qg Zm9yIHRoaXMgcHJvY2Vzc29yXG4iKTsNCj4gLQkJcmV0dXJuOw0KPiAtCX0NCj4gLQ0KPiAtCWVf ZW50cnkgPSBlbGYtPmVfZW50cnk7DQo+IC0JZV9waG51bSA9IGVsZi0+ZV9waG51bTsNCj4gLQll X3Bob2ZmID0gZWxmLT5lX3Bob2ZmOw0KPiAtDQo+IC0JY29uc193cml0ZSgibG9hZGluZyAiKTsN Cj4gLQljb25zX3dyaXRlKGtwYXRoKTsNCj4gLQljb25zX3dyaXRlKCIuLi5cbiIpOw0KPiAtDQo+ IC0JZm9yIChpID0gMDsgaSA8IGVfcGhudW07ICsraSkgew0KPiAtCQlyZXEubGVuID0gc2l6ZW9m KCplbGZfcGhkcik7DQo+IC0JCXJlcS5hZGRyID0gKGxvbmcpIG1lbTsNCj4gLQkJc3NjKGZkLCAx LCAobG9uZykgJnJlcSwgZV9waG9mZiwgU1NDX1JFQUQpOw0KPiAtCQlzc2MoKGxvbmcpICZzdGF0 LCAwLCAwLCAwLCBTU0NfV0FJVF9DT01QTEVUSU9OKTsNCj4gLQkJaWYgKHN0YXQuY291bnQgIT0g c2l6ZW9mKCplbGZfcGhkcikpIHsNCj4gLQkJCWNvbnNfd3JpdGUoImZhaWxlZCB0byByZWFkIHBo ZHJcbiIpOw0KPiAtCQkJcmV0dXJuOw0KPiAtCQl9DQo+IC0JCWVfcGhvZmYgKz0gc2l6ZW9mKCpl bGZfcGhkcik7DQo+IC0NCj4gLQkJZWxmX3BoZHIgPSAoc3RydWN0IGVsZl9waGRyICopIG1lbTsN Cj4gLQ0KPiAtCQlpZiAoZWxmX3BoZHItPnBfdHlwZSAhPSBQVF9MT0FEKQ0KPiAtCQkJY29udGlu dWU7DQo+IC0NCj4gLQkJcmVxLmxlbiA9IGVsZl9waGRyLT5wX2ZpbGVzejsNCj4gLQkJcmVxLmFk ZHIgPSBfX3BhKGVsZl9waGRyLT5wX3BhZGRyKTsNCj4gLQkJc3NjKGZkLCAxLCAobG9uZykgJnJl cSwgZWxmX3BoZHItPnBfb2Zmc2V0LCBTU0NfUkVBRCk7DQo+IC0JCXNzYygobG9uZykgJnN0YXQs IDAsIDAsIDAsIFNTQ19XQUlUX0NPTVBMRVRJT04pOw0KPiAtCQltZW1zZXQoKGNoYXIgKilfX3Bh KGVsZl9waGRyLT5wX3BhZGRyKSArIGVsZl9waGRyLT5wX2ZpbGVzeiwgMCwNCj4gLQkJICAgICAg IGVsZl9waGRyLT5wX21lbXN6IC0gZWxmX3BoZHItPnBfZmlsZXN6KTsNCj4gLQl9DQo+IC0Jc3Nj KGZkLCAwLCAwLCAwLCBTU0NfQ0xPU0UpOw0KPiAtDQo+IC0JY29uc193cml0ZSgic3RhcnRpbmcg a2VybmVsLi4uXG4iKTsNCj4gLQ0KPiAtCS8qIGZha2UgYW4gSS9PIGJhc2UgYWRkcmVzczogKi8N Cj4gLQlpYTY0X3NldHJlZyhfSUE2NF9SRUdfQVJfS1IwLCAweGZmZmZjMDAwMDAwVUwpOw0KPiAt DQo+IC0JYnAgPSBzeXNfZndfaW5pdChhcmdzLCBhcmdsZW4pOw0KPiAtDQo+IC0Jc3NjKDAsIChs b25nKSBrcGF0aCwgMCwgMCwgU1NDX0xPQURfU1lNQk9MUyk7DQo+IC0NCj4gLQlkZWJ1Z19icmVh aygpOw0KPiAtCWptcF90b19rZXJuZWwoKHVuc2lnbmVkIGxvbmcpIGJwLCBlX2VudHJ5KTsNCj4g LQ0KPiAtCWNvbnNfd3JpdGUoImtlcm5lbCByZXR1cm5lZCFcbiIpOw0KPiAtCXNzYygtMSwgMCwg MCwgMCwgU1NDX0VYSVQpOw0KPiAtfQ0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9i b290L2Jvb3Rsb2FkZXIubGRzIGIvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Jvb3Rsb2FkZXIubGRz DQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCBmM2YyODRkNjUxNGMuLjAwMDAw MDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2Jvb3QvYm9vdGxvYWRlci5sZHMNCj4g KysrIC9kZXYvbnVsbA0KPiBAQCAtMSw2NyArMCwwIEBADQo+IC0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLw0KPiAtT1VUUFVUX0ZPUk1BVCgiZWxmNjQtaWE2NC1saXR0bGUi KQ0KPiAtT1VUUFVUX0FSQ0goaWE2NCkNCj4gLUVOVFJZKF9zdGFydCkNCj4gLVNFQ1RJT05TDQo+ IC17DQo+IC0gIC8qIFJlYWQtb25seSBzZWN0aW9ucywgbWVyZ2VkIGludG8gdGV4dCBzZWdtZW50 OiAqLw0KPiAtICAuID0gMHgxMDAwMDA7DQo+IC0NCj4gLSAgX3RleHQgPSAuOw0KPiAtICAudGV4 dCA6IHsgKihfX2l2dF9zZWN0aW9uKSAqKC50ZXh0KSB9DQo+IC0gIF9ldGV4dCA9IC47DQo+IC0N Cj4gLSAgLyogR2xvYmFsIGRhdGEgKi8NCj4gLSAgX2RhdGEgPSAuOw0KPiAtICAucm9kYXRhIDog eyAqKC5yb2RhdGEpICooLnJvZGF0YS4qKSB9DQo+IC0gIC5kYXRhICAgIDogeyAqKC5kYXRhKSAq KC5nbnUubGlua29uY2UuZCopIENPTlNUUlVDVE9SUyB9DQo+IC0gIF9fZ3AgPSBBTElHTiAoOCkg KyAweDIwMDAwMDsNCj4gLSAgLmdvdCAgICAgICAgICAgOiB7ICooLmdvdC5wbHQpICooLmdvdCkg fQ0KPiAtICAvKiBXZSB3YW50IHRoZSBzbWFsbCBkYXRhIHNlY3Rpb25zIHRvZ2V0aGVyLCBzbyBz aW5nbGUtaW5zdHJ1Y3Rpb24gb2Zmc2V0cw0KPiAtICAgICBjYW4gYWNjZXNzIHRoZW0gYWxsLCBh bmQgaW5pdGlhbGl6ZWQgZGF0YSBhbGwgYmVmb3JlIHVuaW5pdGlhbGl6ZWQsIHNvDQo+IC0gICAg IHdlIGNhbiBzaG9ydGVuIHRoZSBvbi1kaXNrIHNlZ21lbnQgc2l6ZS4gICovDQo+IC0gIC5zZGF0 YSAgICAgOiB7ICooLnNkYXRhKSB9DQo+IC0gIF9lZGF0YSAgPSAgLjsNCj4gLQ0KPiAtICBfX2Jz c19zdGFydCA9IC47DQo+IC0gIC5zYnNzICAgICAgOiB7ICooLnNic3MpICooLnNjb21tb24pIH0N Cj4gLSAgLmJzcyAgICAgICA6IHsgKiguYnNzKSAqKENPTU1PTikgfQ0KPiAtICAuID0gQUxJR04o NjQgLyA4KTsNCj4gLSAgX19ic3Nfc3RvcCA9IC47DQo+IC0gIF9lbmQgPSAuIDsNCj4gLQ0KPiAt ICAvKiBTdGFicyBkZWJ1Z2dpbmcgc2VjdGlvbnMuICAqLw0KPiAtICAuc3RhYiAwIDogeyAqKC5z dGFiKSB9DQo+IC0gIC5zdGFic3RyIDAgOiB7ICooLnN0YWJzdHIpIH0NCj4gLSAgLnN0YWIuZXhj bCAwIDogeyAqKC5zdGFiLmV4Y2wpIH0NCj4gLSAgLnN0YWIuZXhjbHN0ciAwIDogeyAqKC5zdGFi LmV4Y2xzdHIpIH0NCj4gLSAgLnN0YWIuaW5kZXggMCA6IHsgKiguc3RhYi5pbmRleCkgfQ0KPiAt ICAuc3RhYi5pbmRleHN0ciAwIDogeyAqKC5zdGFiLmluZGV4c3RyKSB9DQo+IC0gIC5jb21tZW50 IDAgOiB7ICooLmNvbW1lbnQpIH0NCj4gLSAgLyogRFdBUkYgZGVidWcgc2VjdGlvbnMuDQo+IC0g ICAgIFN5bWJvbHMgaW4gdGhlIERXQVJGIGRlYnVnZ2luZyBzZWN0aW9ucyBhcmUgcmVsYXRpdmUg dG8gdGhlIGJlZ2lubmluZw0KPiAtICAgICBvZiB0aGUgc2VjdGlvbiBzbyB3ZSBiZWdpbiB0aGVt IGF0IDAuICAqLw0KPiAtICAvKiBEV0FSRiAxICovDQo+IC0gIC5kZWJ1ZyAgICAgICAgICAwIDog eyAqKC5kZWJ1ZykgfQ0KPiAtICAubGluZSAgICAgICAgICAgMCA6IHsgKigubGluZSkgfQ0KPiAt ICAvKiBHTlUgRFdBUkYgMSBleHRlbnNpb25zICovDQo+IC0gIC5kZWJ1Z19zcmNpbmZvICAwIDog eyAqKC5kZWJ1Z19zcmNpbmZvKSB9DQo+IC0gIC5kZWJ1Z19zZm5hbWVzICAwIDogeyAqKC5kZWJ1 Z19zZm5hbWVzKSB9DQo+IC0gIC8qIERXQVJGIDEuMSBhbmQgRFdBUkYgMiAqLw0KPiAtICAuZGVi dWdfYXJhbmdlcyAgMCA6IHsgKiguZGVidWdfYXJhbmdlcykgfQ0KPiAtICAuZGVidWdfcHVibmFt ZXMgMCA6IHsgKiguZGVidWdfcHVibmFtZXMpIH0NCj4gLSAgLyogRFdBUkYgMiAqLw0KPiAtICAu ZGVidWdfaW5mbyAgICAgMCA6IHsgKiguZGVidWdfaW5mbykgfQ0KPiAtICAuZGVidWdfYWJicmV2 ICAgMCA6IHsgKiguZGVidWdfYWJicmV2KSB9DQo+IC0gIC5kZWJ1Z19saW5lICAgICAwIDogeyAq KC5kZWJ1Z19saW5lKSB9DQo+IC0gIC5kZWJ1Z19mcmFtZSAgICAwIDogeyAqKC5kZWJ1Z19mcmFt ZSkgfQ0KPiAtICAuZGVidWdfc3RyICAgICAgMCA6IHsgKiguZGVidWdfc3RyKSB9DQo+IC0gIC5k ZWJ1Z19sb2MgICAgICAwIDogeyAqKC5kZWJ1Z19sb2MpIH0NCj4gLSAgLmRlYnVnX21hY2luZm8g IDAgOiB7ICooLmRlYnVnX21hY2luZm8pIH0NCj4gLSAgLyogU0dJL01JUFMgRFdBUkYgMiBleHRl bnNpb25zICovDQo+IC0gIC5kZWJ1Z193ZWFrbmFtZXMgMCA6IHsgKiguZGVidWdfd2Vha25hbWVz KSB9DQo+IC0gIC5kZWJ1Z19mdW5jbmFtZXMgMCA6IHsgKiguZGVidWdfZnVuY25hbWVzKSB9DQo+ IC0gIC5kZWJ1Z190eXBlbmFtZXMgMCA6IHsgKiguZGVidWdfdHlwZW5hbWVzKSB9DQo+IC0gIC5k ZWJ1Z192YXJuYW1lcyAgMCA6IHsgKiguZGVidWdfdmFybmFtZXMpIH0NCj4gLSAgLyogVGhlc2Ug bXVzdCBhcHBlYXIgcmVnYXJkbGVzcyBvZiAgLiAgKi8NCj4gLX0NCj4gZGlmZiAtLWdpdCBhL2Fy Y2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1lbXUuYyBiL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9mdy1l bXUuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggNTE3ZmIyODIyZTA0Li4w MDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ib290L2Z3LWVtdS5jDQo+ICsr KyAvZGV2L251bGwNCj4gQEAgLTEsMzc0ICswLDAgQEANCj4gLS8vIFNQRFgtTGljZW5zZS1JZGVu dGlmaWVyOiBHUEwtMi4wDQo+IC0vKg0KPiAtICogUEFMICYgU0FMIGVtdWxhdGlvbi4NCj4gLSAq DQo+IC0gKiBDb3B5cmlnaHQgKEMpIDE5OTgtMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28NCj4gLSAq CURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4NCj4gLSAqLw0KPiAtDQo+ IC0jaWZkZWYgQ09ORklHX1BDSQ0KPiAtIyBpbmNsdWRlIDxsaW51eC9wY2kuaD4NCj4gLSNlbmRp Zg0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvZWZpLmg+DQo+IC0jaW5jbHVkZSA8YXNtL2lvLmg+ DQo+IC0jaW5jbHVkZSA8YXNtL3BhbC5oPg0KPiAtI2luY2x1ZGUgPGFzbS9zYWwuaD4NCj4gLSNp bmNsdWRlIDxhc20vc2V0dXAuaD4NCj4gLQ0KPiAtI2luY2x1ZGUgInNzYy5oIg0KPiAtDQo+IC0j ZGVmaW5lIE1CCSgxMDI0KjEwMjRVTCkNCj4gLQ0KPiAtI2RlZmluZSBTSU1QTEVfTUVNTUFQCTEN Cj4gLQ0KPiAtI2lmIFNJTVBMRV9NRU1NQVANCj4gLSMgZGVmaW5lIE5VTV9NRU1fREVTQ1MJNA0K PiAtI2Vsc2UNCj4gLSMgZGVmaW5lIE5VTV9NRU1fREVTQ1MJMTYNCj4gLSNlbmRpZg0KPiAtDQo+ IC1zdGF0aWMgY2hhciBmd19tZW1bKCAgc2l6ZW9mKHN0cnVjdCBpYTY0X2Jvb3RfcGFyYW0pDQo+ IC0JCSAgICArIHNpemVvZihlZmlfc3lzdGVtX3RhYmxlX3QpDQo+IC0JCSAgICArIHNpemVvZihl ZmlfcnVudGltZV9zZXJ2aWNlc190KQ0KPiAtCQkgICAgKyAxKnNpemVvZihlZmlfY29uZmlnX3Rh YmxlX3QpDQo+IC0JCSAgICArIHNpemVvZihzdHJ1Y3QgaWE2NF9zYWxfc3lzdGFiKQ0KPiAtCQkg ICAgKyBzaXplb2Yoc3RydWN0IGlhNjRfc2FsX2Rlc2NfZW50cnlfcG9pbnQpDQo+IC0JCSAgICAr IE5VTV9NRU1fREVTQ1MqKHNpemVvZihlZmlfbWVtb3J5X2Rlc2NfdCkpDQo+IC0JCSAgICArIDEw MjQpXSBfX2F0dHJpYnV0ZV9fICgoYWxpZ25lZCAoOCkpKTsNCj4gLQ0KPiAtI2RlZmluZSBTRUNT X1BFUl9IT1VSICAgKDYwICogNjApDQo+IC0jZGVmaW5lIFNFQ1NfUEVSX0RBWSAgICAoU0VDU19Q RVJfSE9VUiAqIDI0KQ0KPiAtDQo+IC0vKiBDb21wdXRlIHRoZSBgc3RydWN0IHRtJyByZXByZXNl bnRhdGlvbiBvZiAqVCwNCj4gLSAgIG9mZnNldCBPRkZTRVQgc2Vjb25kcyBlYXN0IG9mIFVUQywN Cj4gLSAgIGFuZCBzdG9yZSB5ZWFyLCB5ZGF5LCBtb24sIG1kYXksIHdkYXksIGhvdXIsIG1pbiwg c2VjIGludG8gKlRQLg0KPiAtICAgUmV0dXJuIG5vbnplcm8gaWYgc3VjY2Vzc2Z1bC4gICovDQo+ IC1pbnQNCj4gLW9mZnRpbWUgKHVuc2lnbmVkIGxvbmcgdCwgZWZpX3RpbWVfdCAqdHApDQo+IC17 DQo+IC0JY29uc3QgdW5zaWduZWQgc2hvcnQgaW50IF9fbW9uX3lkYXlbMl1bMTNdID0NCj4gLQl7 DQo+IC0JCS8qIE5vcm1hbCB5ZWFycy4gICovDQo+IC0JCXsgMCwgMzEsIDU5LCA5MCwgMTIwLCAx NTEsIDE4MSwgMjEyLCAyNDMsIDI3MywgMzA0LCAzMzQsIDM2NSB9LA0KPiAtCQkvKiBMZWFwIHll YXJzLiAgKi8NCj4gLQkJeyAwLCAzMSwgNjAsIDkxLCAxMjEsIDE1MiwgMTgyLCAyMTMsIDI0NCwg Mjc0LCAzMDUsIDMzNSwgMzY2IH0NCj4gLQl9Ow0KPiAtCWxvbmcgaW50IGRheXMsIHJlbSwgeTsN Cj4gLQljb25zdCB1bnNpZ25lZCBzaG9ydCBpbnQgKmlwOw0KPiAtDQo+IC0JZGF5cyA9IHQgLyBT RUNTX1BFUl9EQVk7DQo+IC0JcmVtID0gdCAlIFNFQ1NfUEVSX0RBWTsNCj4gLQl3aGlsZSAocmVt IDwgMCkgew0KPiAtCQlyZW0gKz0gU0VDU19QRVJfREFZOw0KPiAtCQktLWRheXM7DQo+IC0JfQ0K PiAtCXdoaWxlIChyZW0gPj0gU0VDU19QRVJfREFZKSB7DQo+IC0JCXJlbSAtPSBTRUNTX1BFUl9E QVk7DQo+IC0JCSsrZGF5czsNCj4gLQl9DQo+IC0JdHAtPmhvdXIgPSByZW0gLyBTRUNTX1BFUl9I T1VSOw0KPiAtCXJlbSAlPSBTRUNTX1BFUl9IT1VSOw0KPiAtCXRwLT5taW51dGUgPSByZW0gLyA2 MDsNCj4gLQl0cC0+c2Vjb25kID0gcmVtICUgNjA7DQo+IC0JLyogSmFudWFyeSAxLCAxOTcwIHdh cyBhIFRodXJzZGF5LiAgKi8NCj4gLQl5ID0gMTk3MDsNCj4gLQ0KPiAtIwlkZWZpbmUgRElWKGEs IGIpICgoYSkgLyAoYikgLSAoKGEpICUgKGIpIDwgMCkpDQo+IC0jCWRlZmluZSBMRUFQU19USFJV X0VORF9PRih5KSAoRElWICh5LCA0KSAtIERJViAoeSwgMTAwKSArIERJViAoeSwgNDAwKSkNCj4g LSMJZGVmaW5lIF9faXNsZWFwKHllYXIpIFwNCj4gLQkgICgoeWVhcikgJSA0ID09IDAgJiYgKCh5 ZWFyKSAlIDEwMCAhPSAwIHx8ICh5ZWFyKSAlIDQwMCA9PSAwKSkNCj4gLQ0KPiAtCXdoaWxlIChk YXlzIDwgMCB8fCBkYXlzID49IChfX2lzbGVhcCAoeSkgPyAzNjYgOiAzNjUpKSB7DQo+IC0JCS8q IEd1ZXNzIGEgY29ycmVjdGVkIHllYXIsIGFzc3VtaW5nIDM2NSBkYXlzIHBlciB5ZWFyLiAgKi8N Cj4gLQkJbG9uZyBpbnQgeWcgPSB5ICsgZGF5cyAvIDM2NSAtIChkYXlzICUgMzY1IDwgMCk7DQo+ IC0NCj4gLQkJLyogQWRqdXN0IERBWVMgYW5kIFkgdG8gbWF0Y2ggdGhlIGd1ZXNzZWQgeWVhci4g ICovDQo+IC0JCWRheXMgLT0gKCh5ZyAtIHkpICogMzY1ICsgTEVBUFNfVEhSVV9FTkRfT0YgKHln IC0gMSkNCj4gLQkJCSAtIExFQVBTX1RIUlVfRU5EX09GICh5IC0gMSkpOw0KPiAtCQl5ID0geWc7 DQo+IC0JfQ0KPiAtCXRwLT55ZWFyID0geTsNCj4gLQlpcCA9IF9fbW9uX3lkYXlbX19pc2xlYXAo eSldOw0KPiAtCWZvciAoeSA9IDExOyBkYXlzIDwgKGxvbmcgaW50KSBpcFt5XTsgLS15KQ0KPiAt CQljb250aW51ZTsNCj4gLQlkYXlzIC09IGlwW3ldOw0KPiAtCXRwLT5tb250aCA9IHkgKyAxOw0K PiAtCXRwLT5kYXkgPSBkYXlzICsgMTsNCj4gLQlyZXR1cm4gMTsNCj4gLX0NCj4gLQ0KPiAtZXh0 ZXJuIHZvaWQgcGFsX2VtdWxhdG9yX3N0YXRpYyAodm9pZCk7DQo+IC0NCj4gLS8qIE1hY3JvIHRv IGVtdWxhdGUgU0FMIGNhbGwgdXNpbmcgbGVnYWN5IElOIGFuZCBPVVQgY2FsbHMgdG8gQ0Y4LCBD RkMgZXRjLi4gKi8NCj4gLQ0KPiAtI2RlZmluZSBCVUlMRF9DTUQoYWRkcikJCSgoMHg4MDAwMDAw MCB8IChhZGRyKSkgJiB+MykNCj4gLQ0KPiAtI2RlZmluZSBSRUdfT0ZGU0VUKGFkZHIpCSgweDAw MDAwMDAwMDAwMDAwRkYgJiAoYWRkcikpDQo+IC0jZGVmaW5lIERFVklDRV9GVU5DVElPTihhZGRy KQkoMHgwMDAwMDAwMDAwMDBGRjAwICYgKGFkZHIpKQ0KPiAtI2RlZmluZSBCVVNfTlVNQkVSKGFk ZHIpCSgweDAwMDAwMDAwMDBGRjAwMDAgJiAoYWRkcikpDQo+IC0NCj4gLXN0YXRpYyBlZmlfc3Rh dHVzX3QNCj4gLWZ3X2VmaV9nZXRfdGltZSAoZWZpX3RpbWVfdCAqdG0sIGVmaV90aW1lX2NhcF90 ICp0YykNCj4gLXsNCj4gLSNpZiBkZWZpbmVkKENPTkZJR19JQTY0X0hQX1NJTSkgfHwgZGVmaW5l ZChDT05GSUdfSUE2NF9HRU5FUklDKQ0KPiAtCXN0cnVjdCB7DQo+IC0JCWludCB0dl9zZWM7CS8q IG11c3QgYmUgMzJiaXRzIHRvIHdvcmsgKi8NCj4gLQkJaW50IHR2X3VzZWM7DQo+IC0JfSB0djMy Yml0czsNCj4gLQ0KPiAtCXNzYygodW5zaWduZWQgbG9uZykgJnR2MzJiaXRzLCAwLCAwLCAwLCBT U0NfR0VUX1RPRCk7DQo+IC0NCj4gLQltZW1zZXQodG0sIDAsIHNpemVvZigqdG0pKTsNCj4gLQlv ZmZ0aW1lKHR2MzJiaXRzLnR2X3NlYywgdG0pOw0KPiAtDQo+IC0JaWYgKHRjKQ0KPiAtCQltZW1z ZXQodGMsIDAsIHNpemVvZigqdGMpKTsNCj4gLSNlbHNlDQo+IC0jCWVycm9yIE5vdCBpbXBsZW1l bnRlZCB5ZXQuLi4NCj4gLSNlbmRpZg0KPiAtCXJldHVybiBFRklfU1VDQ0VTUzsNCj4gLX0NCj4g LQ0KPiAtc3RhdGljIHZvaWQNCj4gLWVmaV9yZXNldF9zeXN0ZW0gKGludCByZXNldF90eXBlLCBl Zmlfc3RhdHVzX3Qgc3RhdHVzLCB1bnNpZ25lZCBsb25nIGRhdGFfc2l6ZSwgZWZpX2NoYXIxNl90 ICpkYXRhKQ0KPiAtew0KPiAtI2lmIGRlZmluZWQoQ09ORklHX0lBNjRfSFBfU0lNKSB8fCBkZWZp bmVkKENPTkZJR19JQTY0X0dFTkVSSUMpDQo+IC0Jc3NjKHN0YXR1cywgMCwgMCwgMCwgU1NDX0VY SVQpOw0KPiAtI2Vsc2UNCj4gLSMJZXJyb3IgTm90IGltcGxlbWVudGVkIHlldC4uLg0KPiAtI2Vu ZGlmDQo+IC19DQo+IC0NCj4gLXN0YXRpYyBlZmlfc3RhdHVzX3QNCj4gLWVmaV91bmltcGxlbWVu dGVkICh2b2lkKQ0KPiAtew0KPiAtCXJldHVybiBFRklfVU5TVVBQT1JURUQ7DQo+IC19DQo+IC0N Cj4gLXN0YXRpYyBzdHJ1Y3Qgc2FsX3JldF92YWx1ZXMNCj4gLXNhbF9lbXVsYXRvciAobG9uZyBp bmRleCwgdW5zaWduZWQgbG9uZyBpbjEsIHVuc2lnbmVkIGxvbmcgaW4yLA0KPiAtCSAgICAgIHVu c2lnbmVkIGxvbmcgaW4zLCB1bnNpZ25lZCBsb25nIGluNCwgdW5zaWduZWQgbG9uZyBpbjUsDQo+ IC0JICAgICAgdW5zaWduZWQgbG9uZyBpbjYsIHVuc2lnbmVkIGxvbmcgaW43KQ0KPiAtew0KPiAt CWxvbmcgcjkgID0gMDsNCj4gLQlsb25nIHIxMCA9IDA7DQo+IC0JbG9uZyByMTEgPSAwOw0KPiAt CWxvbmcgc3RhdHVzOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBEb24ndCBkbyBhICJzd2l0Y2giIGhl cmUgc2luY2UgdGhhdCBnaXZlcyB1cyBjb2RlIHRoYXQNCj4gLQkgKiBpc24ndCBzZWxmLXJlbG9j YXRhYmxlLg0KPiAtCSAqLw0KPiAtCXN0YXR1cyA9IDA7DQo+IC0JaWYgKGluZGV4ID09IFNBTF9G UkVRX0JBU0UpIHsNCj4gLQkJaWYgKGluMSA9PSBTQUxfRlJFUV9CQVNFX1BMQVRGT1JNKQ0KPiAt CQkJcjkgPSAyMDAwMDAwMDA7DQo+IC0JCWVsc2UgaWYgKGluMSA9PSBTQUxfRlJFUV9CQVNFX0lO VEVSVkFMX1RJTUVSKSB7DQo+IC0JCQkvKg0KPiAtCQkJICogSXMgdGhpcyBzdXBwb3NlZCB0byBi ZSB0aGUgY3IuaXRjIGZyZXF1ZW5jeQ0KPiAtCQkJICogb3Igc29tZXRoaW5nIHBsYXRmb3JtIHNw ZWNpZmljPyAgVGhlIFNBTA0KPiAtCQkJICogZG9jIGFpbid0IGV4YWN0bHkgY2xlYXIgb24gdGhp cy4uLg0KPiAtCQkJICovDQo+IC0JCQlyOSA9IDcwMDAwMDAwMDsNCj4gLQkJfSBlbHNlIGlmIChp bjEgPT0gU0FMX0ZSRVFfQkFTRV9SRUFMVElNRV9DTE9DSykNCj4gLQkJCXI5ID0gMTsNCj4gLQkJ ZWxzZQ0KPiAtCQkJc3RhdHVzID0gLTE7DQo+IC0JfSBlbHNlIGlmIChpbmRleCA9PSBTQUxfU0VU X1ZFQ1RPUlMpIHsNCj4gLQkJOw0KPiAtCX0gZWxzZSBpZiAoaW5kZXggPT0gU0FMX0dFVF9TVEFU RV9JTkZPKSB7DQo+IC0JCTsNCj4gLQl9IGVsc2UgaWYgKGluZGV4ID09IFNBTF9HRVRfU1RBVEVf SU5GT19TSVpFKSB7DQo+IC0JCTsNCj4gLQl9IGVsc2UgaWYgKGluZGV4ID09IFNBTF9DTEVBUl9T VEFURV9JTkZPKSB7DQo+IC0JCTsNCj4gLQl9IGVsc2UgaWYgKGluZGV4ID09IFNBTF9NQ19SRU5E RVopIHsNCj4gLQkJOw0KPiAtCX0gZWxzZSBpZiAoaW5kZXggPT0gU0FMX01DX1NFVF9QQVJBTVMp IHsNCj4gLQkJOw0KPiAtCX0gZWxzZSBpZiAoaW5kZXggPT0gU0FMX0NBQ0hFX0ZMVVNIKSB7DQo+ IC0JCTsNCj4gLQl9IGVsc2UgaWYgKGluZGV4ID09IFNBTF9DQUNIRV9JTklUKSB7DQo+IC0JCTsN Cj4gLSNpZmRlZiBDT05GSUdfUENJDQo+IC0JfSBlbHNlIGlmIChpbmRleCA9PSBTQUxfUENJX0NP TkZJR19SRUFEKSB7DQo+IC0JCS8qDQo+IC0JCSAqIGluMSBjb250YWlucyB0aGUgUENJIGNvbmZp Z3VyYXRpb24gYWRkcmVzcyBhbmQgaW4yDQo+IC0JCSAqIHRoZSBzaXplIG9mIHRoZSByZWFkLiAg VGhlIHZhbHVlIHRoYXQgaXMgcmVhZCBpcw0KPiAtCQkgKiByZXR1cm5lZCB2aWEgdGhlIGdlbmVy YWwgcmVnaXN0ZXIgcjkuDQo+IC0JCSAqLw0KPiAtICAgICAgICAgICAgICAgIG91dGwoQlVJTERf Q01EKGluMSksIDB4Q0Y4KTsNCj4gLSAgICAgICAgICAgICAgICBpZiAoaW4yID09IDEpICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogUmVhZGluZyBieXRlICAqLw0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgcjkgPSBpbmIoMHhDRkMgKyAoKFJFR19PRkZTRVQoaW4xKSAmIDMpKSk7DQo+ IC0gICAgICAgICAgICAgICAgZWxzZSBpZiAoaW4yID09IDIpICAgICAgICAgICAgICAgICAgICAg IC8qIFJlYWRpbmcgd29yZCAgKi8NCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIHI5ID0gaW53 KDB4Q0ZDICsgKChSRUdfT0ZGU0VUKGluMSkgJiAyKSkpOw0KPiAtICAgICAgICAgICAgICAgIGVs c2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvKiBSZWFkaW5nIGR3b3JkICov DQo+IC0gICAgICAgICAgICAgICAgICAgICAgICByOSA9IGlubCgweENGQyk7DQo+IC0gICAgICAg ICAgICAgICAgc3RhdHVzID0gUENJQklPU19TVUNDRVNTRlVMOw0KPiAtCX0gZWxzZSBpZiAoaW5k ZXggPT0gU0FMX1BDSV9DT05GSUdfV1JJVEUpIHsNCj4gLQkgICAgICAJLyoNCj4gLQkJICogaW4x IGNvbnRhaW5zIHRoZSBQQ0kgY29uZmlndXJhdGlvbiBhZGRyZXNzLCBpbjIgdGhlDQo+IC0JCSAq IHNpemUgb2YgdGhlIHdyaXRlLCBhbmQgaW4zIHRoZSBhY3R1YWwgdmFsdWUgdG8gYmUNCj4gLQkJ ICogd3JpdHRlbiBvdXQuDQo+IC0JCSAqLw0KPiAtICAgICAgICAgICAgICAgIG91dGwoQlVJTERf Q01EKGluMSksIDB4Q0Y4KTsNCj4gLSAgICAgICAgICAgICAgICBpZiAoaW4yID09IDEpICAgICAg ICAgICAgICAgICAgICAgICAgICAgLyogV3JpdGluZyBieXRlICAqLw0KPiAtICAgICAgICAgICAg ICAgICAgICAgICAgb3V0YihpbjMsIDB4Q0ZDICsgKChSRUdfT0ZGU0VUKGluMSkgJiAzKSkpOw0K PiAtICAgICAgICAgICAgICAgIGVsc2UgaWYgKGluMiA9PSAyKSAgICAgICAgICAgICAgICAgICAg ICAvKiBXcml0aW5nIHdvcmQgICovDQo+IC0gICAgICAgICAgICAgICAgICAgICAgICBvdXR3KGlu MywgMHhDRkMgKyAoKFJFR19PRkZTRVQoaW4xKSAmIDIpKSk7DQo+IC0gICAgICAgICAgICAgICAg ZWxzZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIFdyaXRpbmcgZHdvcmQg Ki8NCj4gLSAgICAgICAgICAgICAgICAgICAgICAgIG91dGwoaW4zLCAweENGQyk7DQo+IC0gICAg ICAgICAgICAgICAgc3RhdHVzID0gUENJQklPU19TVUNDRVNTRlVMOw0KPiAtI2VuZGlmIC8qIENP TkZJR19QQ0kgKi8NCj4gLQl9IGVsc2UgaWYgKGluZGV4ID09IFNBTF9VUERBVEVfUEFMKSB7DQo+ IC0JCTsNCj4gLQl9IGVsc2Ugew0KPiAtCQlzdGF0dXMgPSAtMTsNCj4gLQl9DQo+IC0JcmV0dXJu ICgoc3RydWN0IHNhbF9yZXRfdmFsdWVzKSB7c3RhdHVzLCByOSwgcjEwLCByMTF9KTsNCj4gLX0N Cj4gLQ0KPiAtc3RydWN0IGlhNjRfYm9vdF9wYXJhbSAqDQo+IC1zeXNfZndfaW5pdCAoY29uc3Qg Y2hhciAqYXJncywgaW50IGFyZ2xlbikNCj4gLXsNCj4gLQllZmlfc3lzdGVtX3RhYmxlX3QgKmVm aV9zeXN0YWI7DQo+IC0JZWZpX3J1bnRpbWVfc2VydmljZXNfdCAqZWZpX3J1bnRpbWU7DQo+IC0J ZWZpX2NvbmZpZ190YWJsZV90ICplZmlfdGFibGVzOw0KPiAtCXN0cnVjdCBpYTY0X3NhbF9zeXN0 YWIgKnNhbF9zeXN0YWI7DQo+IC0JZWZpX21lbW9yeV9kZXNjX3QgKmVmaV9tZW1tYXAsICptZDsN Cj4gLQl1bnNpZ25lZCBsb25nICpwYWxfZGVzYywgKnNhbF9kZXNjOw0KPiAtCXN0cnVjdCBpYTY0 X3NhbF9kZXNjX2VudHJ5X3BvaW50ICpzYWxfZWQ7DQo+IC0Jc3RydWN0IGlhNjRfYm9vdF9wYXJh bSAqYnA7DQo+IC0JdW5zaWduZWQgY2hhciBjaGVja3N1bSA9IDA7DQo+IC0JY2hhciAqY3AsICpj bWRfbGluZTsNCj4gLQlpbnQgaSA9IDA7DQo+IC0jCWRlZmluZSBNQUtFX01EKHR5cCwgYXR0ciwg c3RhcnQsIGVuZCkJCVwNCj4gLQlkbyB7CQkJCQkJXA0KPiAtCQltZCA9IGVmaV9tZW1tYXAgKyBp Kys7CQkJXA0KPiAtCQltZC0+dHlwZSA9IHR5cDsJCQkJXA0KPiAtCQltZC0+cGFkID0gMDsJCQkJ XA0KPiAtCQltZC0+cGh5c19hZGRyID0gc3RhcnQ7CQkJXA0KPiAtCQltZC0+dmlydF9hZGRyID0g MDsJCQlcDQo+IC0JCW1kLT5udW1fcGFnZXMgPSAoZW5kIC0gc3RhcnQpID4+IDEyOwlcDQo+IC0J CW1kLT5hdHRyaWJ1dGUgPSBhdHRyOwkJCVwNCj4gLQl9IHdoaWxlICgwKQ0KPiAtDQo+IC0JbWVt c2V0KGZ3X21lbSwgMCwgc2l6ZW9mKGZ3X21lbSkpOw0KPiAtDQo+IC0JcGFsX2Rlc2MgPSAodW5z aWduZWQgbG9uZyAqKSAmcGFsX2VtdWxhdG9yX3N0YXRpYzsNCj4gLQlzYWxfZGVzYyA9ICh1bnNp Z25lZCBsb25nICopICZzYWxfZW11bGF0b3I7DQo+IC0NCj4gLQljcCA9IGZ3X21lbTsNCj4gLQll Zmlfc3lzdGFiICA9ICh2b2lkICopIGNwOyBjcCArPSBzaXplb2YoKmVmaV9zeXN0YWIpOw0KPiAt CWVmaV9ydW50aW1lID0gKHZvaWQgKikgY3A7IGNwICs9IHNpemVvZigqZWZpX3J1bnRpbWUpOw0K PiAtCWVmaV90YWJsZXMgID0gKHZvaWQgKikgY3A7IGNwICs9IHNpemVvZigqZWZpX3RhYmxlcyk7 DQo+IC0Jc2FsX3N5c3RhYiAgPSAodm9pZCAqKSBjcDsgY3AgKz0gc2l6ZW9mKCpzYWxfc3lzdGFi KTsNCj4gLQlzYWxfZWQgICAgICA9ICh2b2lkICopIGNwOyBjcCArPSBzaXplb2YoKnNhbF9lZCk7 DQo+IC0JZWZpX21lbW1hcCAgPSAodm9pZCAqKSBjcDsgY3AgKz0gTlVNX01FTV9ERVNDUypzaXpl b2YoKmVmaV9tZW1tYXApOw0KPiAtCWJwCSAgICA9ICh2b2lkICopIGNwOyBjcCArPSBzaXplb2Yo KmJwKTsNCj4gLQljbWRfbGluZSAgICA9ICh2b2lkICopIGNwOw0KPiAtDQo+IC0JaWYgKGFyZ3Mp IHsNCj4gLQkJaWYgKGFyZ2xlbiA+PSAxMDI0KQ0KPiAtCQkJYXJnbGVuID0gMTAyMzsNCj4gLQkJ bWVtY3B5KGNtZF9saW5lLCBhcmdzLCBhcmdsZW4pOw0KPiAtCX0gZWxzZSB7DQo+IC0JCWFyZ2xl biA9IDA7DQo+IC0JfQ0KPiAtCWNtZF9saW5lW2FyZ2xlbl0gPSAnXDAnOw0KPiAtDQo+IC0JbWVt c2V0KGVmaV9zeXN0YWIsIDAsIHNpemVvZigqZWZpX3N5c3RhYikpOw0KPiAtCWVmaV9zeXN0YWIt Pmhkci5zaWduYXR1cmUgPSBFRklfU1lTVEVNX1RBQkxFX1NJR05BVFVSRTsNCj4gLQllZmlfc3lz dGFiLT5oZHIucmV2aXNpb24gID0gKCgxIDw8IDE2KSB8IDAwKTsNCj4gLQllZmlfc3lzdGFiLT5o ZHIuaGVhZGVyc2l6ZSA9IHNpemVvZihlZmlfc3lzdGFiLT5oZHIpOw0KPiAtCWVmaV9zeXN0YWIt PmZ3X3ZlbmRvciA9IF9fcGEoIkhcMGVcMHdcMGxcMGVcMHRcMHRcMC1cMFBcMGFcMGNcMGtcMGFc MHJcMGRcMFwwIik7DQo+IC0JZWZpX3N5c3RhYi0+ZndfcmV2aXNpb24gPSAxOw0KPiAtCWVmaV9z eXN0YWItPnJ1bnRpbWUgPSAodm9pZCAqKSBfX3BhKGVmaV9ydW50aW1lKTsNCj4gLQllZmlfc3lz dGFiLT5ucl90YWJsZXMgPSAxOw0KPiAtCWVmaV9zeXN0YWItPnRhYmxlcyA9IF9fcGEoZWZpX3Rh Ymxlcyk7DQo+IC0NCj4gLQllZmlfcnVudGltZS0+aGRyLnNpZ25hdHVyZSA9IEVGSV9SVU5USU1F X1NFUlZJQ0VTX1NJR05BVFVSRTsNCj4gLQllZmlfcnVudGltZS0+aGRyLnJldmlzaW9uID0gRUZJ X1JVTlRJTUVfU0VSVklDRVNfUkVWSVNJT047DQo+IC0JZWZpX3J1bnRpbWUtPmhkci5oZWFkZXJz aXplID0gc2l6ZW9mKGVmaV9ydW50aW1lLT5oZHIpOw0KPiAtCWVmaV9ydW50aW1lLT5nZXRfdGlt ZSA9ICh2b2lkICopX19wYSgmZndfZWZpX2dldF90aW1lKTsNCj4gLQllZmlfcnVudGltZS0+c2V0 X3RpbWUgPSAodm9pZCAqKV9fcGEoJmVmaV91bmltcGxlbWVudGVkKTsNCj4gLQllZmlfcnVudGlt ZS0+Z2V0X3dha2V1cF90aW1lID0gKHZvaWQgKilfX3BhKCZlZmlfdW5pbXBsZW1lbnRlZCk7DQo+ IC0JZWZpX3J1bnRpbWUtPnNldF93YWtldXBfdGltZSA9ICh2b2lkICopX19wYSgmZWZpX3VuaW1w bGVtZW50ZWQpOw0KPiAtCWVmaV9ydW50aW1lLT5zZXRfdmlydHVhbF9hZGRyZXNzX21hcCA9ICh2 b2lkICopX19wYSgmZWZpX3VuaW1wbGVtZW50ZWQpOw0KPiAtCWVmaV9ydW50aW1lLT5nZXRfdmFy aWFibGUgPSAodm9pZCAqKV9fcGEoJmVmaV91bmltcGxlbWVudGVkKTsNCj4gLQllZmlfcnVudGlt ZS0+Z2V0X25leHRfdmFyaWFibGUgPSAodm9pZCAqKV9fcGEoJmVmaV91bmltcGxlbWVudGVkKTsN Cj4gLQllZmlfcnVudGltZS0+c2V0X3ZhcmlhYmxlID0gKHZvaWQgKilfX3BhKCZlZmlfdW5pbXBs ZW1lbnRlZCk7DQo+IC0JZWZpX3J1bnRpbWUtPmdldF9uZXh0X2hpZ2hfbW9ub19jb3VudCA9ICh2 b2lkICopX19wYSgmZWZpX3VuaW1wbGVtZW50ZWQpOw0KPiAtCWVmaV9ydW50aW1lLT5yZXNldF9z eXN0ZW0gPSAodm9pZCAqKV9fcGEoJmVmaV9yZXNldF9zeXN0ZW0pOw0KPiAtDQo+IC0JZWZpX3Rh Ymxlcy0+Z3VpZCA9IFNBTF9TWVNURU1fVEFCTEVfR1VJRDsNCj4gLQllZmlfdGFibGVzLT50YWJs ZSA9IF9fcGEoc2FsX3N5c3RhYik7DQo+IC0NCj4gLQkvKiBmaWxsIGluIHRoZSBTQUwgc3lzdGVt IHRhYmxlOiAqLw0KPiAtCW1lbWNweShzYWxfc3lzdGFiLT5zaWduYXR1cmUsICJTU1RfIiwgNCk7 DQo+IC0Jc2FsX3N5c3RhYi0+c2l6ZSA9IHNpemVvZigqc2FsX3N5c3RhYik7DQo+IC0Jc2FsX3N5 c3RhYi0+c2FsX3Jldl9taW5vciA9IDE7DQo+IC0Jc2FsX3N5c3RhYi0+c2FsX3Jldl9tYWpvciA9 IDA7DQo+IC0Jc2FsX3N5c3RhYi0+ZW50cnlfY291bnQgPSAxOw0KPiAtDQo+IC0jaWZkZWYgQ09O RklHX0lBNjRfR0VORVJJQw0KPiAtICAgICAgICBzdHJjcHkoc2FsX3N5c3RhYi0+b2VtX2lkLCAi R2VuZXJpYyIpOw0KPiAtICAgICAgICBzdHJjcHkoc2FsX3N5c3RhYi0+cHJvZHVjdF9pZCwgIklB LTY0IHN5c3RlbSIpOw0KPiAtI2VuZGlmDQo+IC0NCj4gLSNpZmRlZiBDT05GSUdfSUE2NF9IUF9T SU0NCj4gLQlzdHJjcHkoc2FsX3N5c3RhYi0+b2VtX2lkLCAiSGV3bGV0dC1QYWNrYXJkIik7DQo+ IC0Jc3RyY3B5KHNhbF9zeXN0YWItPnByb2R1Y3RfaWQsICJIUC1zaW11bGF0b3IiKTsNCj4gLSNl bmRpZg0KPiAtDQo+IC0JLyogZmlsbCBpbiBhbiBlbnRyeSBwb2ludDogKi8NCj4gLQlzYWxfZWQt PnR5cGUgPSBTQUxfREVTQ19FTlRSWV9QT0lOVDsNCj4gLQlzYWxfZWQtPnBhbF9wcm9jID0gX19w YShwYWxfZGVzY1swXSk7DQo+IC0Jc2FsX2VkLT5zYWxfcHJvYyA9IF9fcGEoc2FsX2Rlc2NbMF0p Ow0KPiAtCXNhbF9lZC0+Z3AgPSBfX3BhKHNhbF9kZXNjWzFdKTsNCj4gLQ0KPiAtCWZvciAoY3Ag PSAoY2hhciAqKSBzYWxfc3lzdGFiOyBjcCA8IChjaGFyICopIGVmaV9tZW1tYXA7ICsrY3ApDQo+ IC0JCWNoZWNrc3VtICs9ICpjcDsNCj4gLQ0KPiAtCXNhbF9zeXN0YWItPmNoZWNrc3VtID0gLWNo ZWNrc3VtOw0KPiAtDQo+IC0jaWYgU0lNUExFX01FTU1BUA0KPiAtCS8qIHNpbXVsYXRlIGZyZWUg bWVtb3J5IGF0IHBoeXNpY2FsIGFkZHJlc3MgemVybyAqLw0KPiAtCU1BS0VfTUQoRUZJX0JPT1Rf U0VSVklDRVNfREFUQSwJCUVGSV9NRU1PUllfV0IsICAgIDAqTUIsICAgIDEqTUIpOw0KPiAtCU1B S0VfTUQoRUZJX1BBTF9DT0RFLAkJCUVGSV9NRU1PUllfV0IsICAgIDEqTUIsICAgIDIqTUIpOw0K PiAtCU1BS0VfTUQoRUZJX0NPTlZFTlRJT05BTF9NRU1PUlksCUVGSV9NRU1PUllfV0IsICAgIDIq TUIsICAxMzAqTUIpOw0KPiAtCU1BS0VfTUQoRUZJX0NPTlZFTlRJT05BTF9NRU1PUlksCUVGSV9N RU1PUllfV0IsIDQwOTYqTUIsIDQxMjgqTUIpOw0KPiAtI2Vsc2UNCj4gLQlNQUtFX01EKCA0LAkJ ICAgMHg5LCAweDAwMDAwMDAwMDAwMDAwMDAsIDB4MDAwMDAwMDAwMDAwMTAwMCk7DQo+IC0JTUFL RV9NRCggNywJCSAgIDB4OSwgMHgwMDAwMDAwMDAwMDAxMDAwLCAweDAwMDAwMDAwMDAwOGEwMDAp Ow0KPiAtCU1BS0VfTUQoIDQsCQkgICAweDksIDB4MDAwMDAwMDAwMDA4YTAwMCwgMHgwMDAwMDAw MDAwMGEwMDAwKTsNCj4gLQlNQUtFX01EKCA1LCAweDgwMDAwMDAwMDAwMDAwMDksIDB4MDAwMDAw MDAwMDBjMDAwMCwgMHgwMDAwMDAwMDAwMTAwMDAwKTsNCj4gLQlNQUtFX01EKCA3LAkJICAgMHg5 LCAweDAwMDAwMDAwMDAxMDAwMDAsIDB4MDAwMDAwMDAwNDQwMDAwMCk7DQo+IC0JTUFLRV9NRCgg MiwJCSAgIDB4OSwgMHgwMDAwMDAwMDA0NDAwMDAwLCAweDAwMDAwMDAwMDRiZTUwMDApOw0KPiAt CU1BS0VfTUQoIDcsCQkgICAweDksIDB4MDAwMDAwMDAwNGJlNTAwMCwgMHgwMDAwMDAwMDdmNzdl MDAwKTsNCj4gLQlNQUtFX01EKCA2LCAweDgwMDAwMDAwMDAwMDAwMDksIDB4MDAwMDAwMDA3Zjc3 ZTAwMCwgMHgwMDAwMDAwMDdmYjk0MDAwKTsNCj4gLQlNQUtFX01EKCA2LCAweDgwMDAwMDAwMDAw MDAwMDksIDB4MDAwMDAwMDA3ZmI5NDAwMCwgMHgwMDAwMDAwMDdmYjk1MDAwKTsNCj4gLQlNQUtF X01EKCA2LCAweDgwMDAwMDAwMDAwMDAwMDksIDB4MDAwMDAwMDA3ZmI5NTAwMCwgMHgwMDAwMDAw MDdmYzAwMDAwKTsNCj4gLQlNQUtFX01EKDEzLCAweDgwMDAwMDAwMDAwMDAwMDksIDB4MDAwMDAw MDA3ZmMwMDAwMCwgMHgwMDAwMDAwMDdmYzNhMDAwKTsNCj4gLQlNQUtFX01EKCA3LAkJICAgMHg5 LCAweDAwMDAwMDAwN2ZjM2EwMDAsIDB4MDAwMDAwMDA3ZmVhMDAwMCk7DQo+IC0JTUFLRV9NRCgg NSwgMHg4MDAwMDAwMDAwMDAwMDA5LCAweDAwMDAwMDAwN2ZlYTAwMDAsIDB4MDAwMDAwMDA3ZmVh ODAwMCk7DQo+IC0JTUFLRV9NRCggNywJCSAgIDB4OSwgMHgwMDAwMDAwMDdmZWE4MDAwLCAweDAw MDAwMDAwN2ZlYWIwMDApOw0KPiAtCU1BS0VfTUQoIDUsIDB4ODAwMDAwMDAwMDAwMDAwOSwgMHgw MDAwMDAwMDdmZWFiMDAwLCAweDAwMDAwMDAwN2ZmZmYwMDApOw0KPiAtCU1BS0VfTUQoIDcsCQkg ICAweDksIDB4MDAwMDAwMDBmZjQwMDAwMCwgMHgwMDAwMDAwMTA0MDAwMDAwKTsNCj4gLSNlbmRp Zg0KPiAtDQo+IC0JYnAtPmVmaV9zeXN0YWIgPSBfX3BhKCZmd19tZW0pOw0KPiAtCWJwLT5lZmlf bWVtbWFwID0gX19wYShlZmlfbWVtbWFwKTsNCj4gLQlicC0+ZWZpX21lbW1hcF9zaXplID0gTlVN X01FTV9ERVNDUypzaXplb2YoZWZpX21lbW9yeV9kZXNjX3QpOw0KPiAtCWJwLT5lZmlfbWVtZGVz Y19zaXplID0gc2l6ZW9mKGVmaV9tZW1vcnlfZGVzY190KTsNCj4gLQlicC0+ZWZpX21lbWRlc2Nf dmVyc2lvbiA9IDE7DQo+IC0JYnAtPmNvbW1hbmRfbGluZSA9IF9fcGEoY21kX2xpbmUpOw0KPiAt CWJwLT5jb25zb2xlX2luZm8ubnVtX2NvbHMgPSA4MDsNCj4gLQlicC0+Y29uc29sZV9pbmZvLm51 bV9yb3dzID0gMjU7DQo+IC0JYnAtPmNvbnNvbGVfaW5mby5vcmlnX3ggPSAwOw0KPiAtCWJwLT5j b25zb2xlX2luZm8ub3JpZ195ID0gMjQ7DQo+IC0JYnAtPmZwc3dhID0gMDsNCj4gLQ0KPiAtCXJl dHVybiBicDsNCj4gLX0NCj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9zc2Mu aCBiL2FyY2gvaWE2NC9ocC9zaW0vYm9vdC9zc2MuaA0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2 NDQNCj4gaW5kZXggODg3NTJjNzUwOWUwLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0 L2hwL3NpbS9ib290L3NzYy5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMzYgKzAsMCBAQA0K PiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gLS8qDQo+IC0gKiBD b3B5cmlnaHQgKEMpIDE5OTgtMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28NCj4gLSAqCURhdmlkIE1v c2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4NCj4gLSAqCVN0ZXBoYW5lIEVyYW5pYW4g PGVyYW5pYW5AaHBsLmhwLmNvbT4NCj4gLSAqLw0KPiAtI2lmbmRlZiBzc2NfaA0KPiAtI2RlZmlu ZSBzc2NfaA0KPiAtDQo+IC0vKiBTaW11bGF0b3Igc3lzdGVtIGNhbGxzOiAqLw0KPiAtDQo+IC0j ZGVmaW5lIFNTQ19DT05TT0xFX0lOSVQJCTIwDQo+IC0jZGVmaW5lIFNTQ19HRVRDSEFSCQkJMjEN Cj4gLSNkZWZpbmUgU1NDX1BVVENIQVIJCQkzMQ0KPiAtI2RlZmluZSBTU0NfT1BFTgkJCTUwDQo+ IC0jZGVmaW5lIFNTQ19DTE9TRQkJCTUxDQo+IC0jZGVmaW5lIFNTQ19SRUFECQkJNTINCj4gLSNk ZWZpbmUgU1NDX1dSSVRFCQkJNTMNCj4gLSNkZWZpbmUgU1NDX0dFVF9DT01QTEVUSU9OCQk1NA0K PiAtI2RlZmluZSBTU0NfV0FJVF9DT01QTEVUSU9OCQk1NQ0KPiAtI2RlZmluZSBTU0NfQ09OTkVD VF9JTlRFUlJVUFQJCTU4DQo+IC0jZGVmaW5lIFNTQ19HRU5FUkFURV9JTlRFUlJVUFQJCTU5DQo+ IC0jZGVmaW5lIFNTQ19TRVRfUEVSSU9ESUNfSU5URVJSVVBUCTYwDQo+IC0jZGVmaW5lIFNTQ19H RVRfUlRDCQkJNjUNCj4gLSNkZWZpbmUgU1NDX0VYSVQJCQk2Ng0KPiAtI2RlZmluZSBTU0NfTE9B RF9TWU1CT0xTCQk2OQ0KPiAtI2RlZmluZSBTU0NfR0VUX1RPRAkJCTc0DQo+IC0NCj4gLSNkZWZp bmUgU1NDX0dFVF9BUkdTCQkJNzUNCj4gLQ0KPiAtLyoNCj4gLSAqIFNpbXVsYXRvciBzeXN0ZW0g Y2FsbC4NCj4gLSAqLw0KPiAtZXh0ZXJuIGxvbmcgc3NjIChsb25nIGFyZzAsIGxvbmcgYXJnMSwg bG9uZyBhcmcyLCBsb25nIGFyZzMsIGludCBucik7DQo+IC0NCj4gLSNlbmRpZiAvKiBzc2NfaCAq Lw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbS5TIGIvYXJjaC9pYTY0L2hw L3NpbS9ocHNpbS5TDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCA0NGI0ZDUz ZTE2ODkuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltLlMNCj4g KysrIC9kZXYvbnVsbA0KPiBAQCAtMSwxMSArMCwwIEBADQo+IC0vKiBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMCAqLw0KPiAtI2luY2x1ZGUgPGFzbS9hc21tYWNyby5oPg0KPiAtDQo+ IC0vKg0KPiAtICogU2ltdWxhdG9yIHN5c3RlbSBjYWxsLg0KPiAtICovDQo+IC1HTE9CQUxfRU5U UlkoaWE2NF9zc2MpDQo+IC0JbW92IHIxNT1yMzYNCj4gLQlicmVhayAweDgwMDAxDQo+IC0JYnIu cmV0LnNwdGsubWFueSBycA0KPiAtRU5EKGlhNjRfc3NjKQ0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9p YTY0L2hwL3NpbS9ocHNpbV9jb25zb2xlLmMgYi9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2NvbnNv bGUuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggYmZmZDlmNjdhOGExLi4w MDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9jb25zb2xlLmMNCj4g KysrIC9kZXYvbnVsbA0KPiBAQCAtMSw3NyArMCwwIEBADQo+IC0vLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KPiAtLyoNCj4gLSAqIFBsYXRmb3JtIGRlcGVuZGVudCBzdXBwb3J0 IGZvciBIUCBzaW11bGF0b3IuDQo+IC0gKg0KPiAtICogQ29weXJpZ2h0IChDKSAxOTk4LCAxOTk5 LCAyMDAyIEhld2xldHQtUGFja2FyZCBDbw0KPiAtICoJRGF2aWQgTW9zYmVyZ2VyLVRhbmcgPGRh dmlkbUBocGwuaHAuY29tPg0KPiAtICogQ29weXJpZ2h0IChDKSAxOTk5IFZpamF5IENoYW5kZXIg PHZpamF5QGVuZ3Iuc2dpLmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvaW5p dC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3Bh cmFtLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvc3RyaW5nLmg+DQo+IC0jaW5jbHVkZSA8bGludXgv dHlwZXMuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC90dHkuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9r ZGV2X3QuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+DQo+IC0NCj4gLSNpbmNsdWRl IDxhc20vZGVsYXkuaD4NCj4gLSNpbmNsdWRlIDxhc20vaXJxLmg+DQo+IC0jaW5jbHVkZSA8YXNt L3BhbC5oPg0KPiAtI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+DQo+IC0jaW5jbHVkZSA8YXNtL3Bn dGFibGUuaD4NCj4gLSNpbmNsdWRlIDxhc20vc2FsLmg+DQo+IC0jaW5jbHVkZSA8YXNtL2hwc2lt Lmg+DQo+IC0NCj4gLSNpbmNsdWRlICJocHNpbV9zc2MuaCINCj4gLQ0KPiAtc3RhdGljIGludCBz aW1jb25zX2luaXQgKHN0cnVjdCBjb25zb2xlICosIGNoYXIgKik7DQo+IC1zdGF0aWMgdm9pZCBz aW1jb25zX3dyaXRlIChzdHJ1Y3QgY29uc29sZSAqLCBjb25zdCBjaGFyICosIHVuc2lnbmVkKTsN Cj4gLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqc2ltY29uc19jb25zb2xlX2RldmljZSAoc3Ry dWN0IGNvbnNvbGUgKiwgaW50ICopOw0KPiAtDQo+IC1zdGF0aWMgc3RydWN0IGNvbnNvbGUgaHBz aW1fY29ucyA9IHsNCj4gLQkubmFtZSA9CQkic2ltY29ucyIsDQo+IC0JLndyaXRlID0Jc2ltY29u c193cml0ZSwNCj4gLQkuZGV2aWNlID0Jc2ltY29uc19jb25zb2xlX2RldmljZSwNCj4gLQkuc2V0 dXAgPQlzaW1jb25zX2luaXQsDQo+IC0JLmZsYWdzID0JQ09OX1BSSU5UQlVGRkVSLA0KPiAtCS5p bmRleCA9CS0xLA0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIGludA0KPiAtc2ltY29uc19pbml0IChz dHJ1Y3QgY29uc29sZSAqY29ucywgY2hhciAqb3B0aW9ucykNCj4gLXsNCj4gLQlyZXR1cm4gMDsN Cj4gLX0NCj4gLQ0KPiAtc3RhdGljIHZvaWQNCj4gLXNpbWNvbnNfd3JpdGUgKHN0cnVjdCBjb25z b2xlICpjb25zLCBjb25zdCBjaGFyICpidWYsIHVuc2lnbmVkIGNvdW50KQ0KPiAtew0KPiAtCXVu c2lnbmVkIGxvbmcgY2g7DQo+IC0NCj4gLQl3aGlsZSAoY291bnQtLSA+IDApIHsNCj4gLQkJY2gg PSAqYnVmKys7DQo+IC0JCWlhNjRfc3NjKGNoLCAwLCAwLCAwLCBTU0NfUFVUQ0hBUik7DQo+IC0J CWlmIChjaCA9PSAnXG4nKQ0KPiAtCQkgIGlhNjRfc3NjKCdccicsIDAsIDAsIDAsIFNTQ19QVVRD SEFSKTsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgdHR5X2RyaXZlciAqc2lt Y29uc19jb25zb2xlX2RldmljZSAoc3RydWN0IGNvbnNvbGUgKmMsIGludCAqaW5kZXgpDQo+IC17 DQo+IC0JKmluZGV4ID0gYy0+aW5kZXg7DQo+IC0JcmV0dXJuIGhwX3NpbXNlcmlhbF9kcml2ZXI7 DQo+IC19DQo+IC0NCj4gLWludCBzaW1jb25zX3JlZ2lzdGVyKHZvaWQpDQo+IC17DQo+IC0JaWYg KCFpYTY0X3BsYXRmb3JtX2lzKCJocHNpbSIpKQ0KPiAtCQlyZXR1cm4gMTsNCj4gLQ0KPiAtCWlm IChocHNpbV9jb25zLmZsYWdzICYgQ09OX0VOQUJMRUQpDQo+IC0JCXJldHVybiAxOw0KPiAtDQo+ IC0JcmVnaXN0ZXJfY29uc29sZSgmaHBzaW1fY29ucyk7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+ IGRpZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL2hwc2ltX2lycS5jIGIvYXJjaC9pYTY0L2hw L3NpbS9ocHNpbV9pcnEuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMmYx Y2M1OTY1MGFiLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9ocHNpbV9p cnEuYw0KPiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDc2ICswLDAgQEANCj4gLS8vIFNQRFgtTGlj ZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wDQo+IC0vKg0KPiAtICogUGxhdGZvcm0gZGVwZW5kZW50 IHN1cHBvcnQgZm9yIEhQIHNpbXVsYXRvci4NCj4gLSAqDQo+IC0gKiBDb3B5cmlnaHQgKEMpIDE5 OTgtMjAwMSBIZXdsZXR0LVBhY2thcmQgQ28NCj4gLSAqIENvcHlyaWdodCAoQykgMTk5OC0yMDAx IERhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4NCj4gLSAqLw0KPiAtDQo+ IC0jaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2tlcm5lbC5oPg0K PiAtI2luY2x1ZGUgPGxpbnV4L3NjaGVkLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvaXJxLmg+DQo+ IC0NCj4gLSNpbmNsdWRlICJocHNpbV9zc2MuaCINCj4gLQ0KPiAtc3RhdGljIHVuc2lnbmVkIGlu dA0KPiAtaHBzaW1faXJxX3N0YXJ0dXAoc3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPiAtew0KPiAt CXJldHVybiAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZA0KPiAtaHBzaW1faXJxX25vb3Ao c3RydWN0IGlycV9kYXRhICpkYXRhKQ0KPiAtew0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgaW50DQo+ IC1ocHNpbV9zZXRfYWZmaW5pdHlfbm9vcChzdHJ1Y3QgaXJxX2RhdGEgKmQsIGNvbnN0IHN0cnVj dCBjcHVtYXNrICpiLCBib29sIGYpDQo+IC17DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4g LXN0YXRpYyBzdHJ1Y3QgaXJxX2NoaXAgaXJxX3R5cGVfaHBfc2ltID0gew0KPiAtCS5uYW1lID0J CQkiaHBzaW0iLA0KPiAtCS5pcnFfc3RhcnR1cCA9CQlocHNpbV9pcnFfc3RhcnR1cCwNCj4gLQku aXJxX3NodXRkb3duID0JCWhwc2ltX2lycV9ub29wLA0KPiAtCS5pcnFfZW5hYmxlID0JCWhwc2lt X2lycV9ub29wLA0KPiAtCS5pcnFfZGlzYWJsZSA9CQlocHNpbV9pcnFfbm9vcCwNCj4gLQkuaXJx X2FjayA9CQlocHNpbV9pcnFfbm9vcCwNCj4gLQkuaXJxX3NldF9hZmZpbml0eSA9CWhwc2ltX3Nl dF9hZmZpbml0eV9ub29wLA0KPiAtfTsNCj4gLQ0KPiAtc3RhdGljIHZvaWQgaHBzaW1faXJxX3Nl dF9jaGlwKGludCBpcnEpDQo+IC17DQo+IC0Jc3RydWN0IGlycV9jaGlwICpjaGlwID0gaXJxX2dl dF9jaGlwKGlycSk7DQo+IC0NCj4gLQlpZiAoY2hpcCA9PSAmbm9faXJxX2NoaXApDQo+IC0JCWly cV9zZXRfY2hpcChpcnEsICZpcnFfdHlwZV9ocF9zaW0pOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg dm9pZCBocHNpbV9jb25uZWN0X2lycShpbnQgaW50ciwgaW50IGlycSkNCj4gLXsNCj4gLQlpYTY0 X3NzYyhpbnRyLCBpcnEsIDAsIDAsIFNTQ19DT05ORUNUX0lOVEVSUlVQVCk7DQo+IC19DQo+IC0N Cj4gLWludCBocHNpbV9nZXRfaXJxKGludCBpbnRyKQ0KPiAtew0KPiAtCWludCBpcnEgPSBhc3Np Z25faXJxX3ZlY3RvcihBVVRPX0FTU0lHTik7DQo+IC0NCj4gLQlpZiAoaXJxID49IDApIHsNCj4g LQkJaHBzaW1faXJxX3NldF9jaGlwKGlycSk7DQo+IC0JCWlycV9zZXRfaGFuZGxlcihpcnEsIGhh bmRsZV9zaW1wbGVfaXJxKTsNCj4gLQkJaHBzaW1fY29ubmVjdF9pcnEoaW50ciwgaXJxKTsNCj4g LQl9DQo+IC0NCj4gLQlyZXR1cm4gaXJxOw0KPiAtfQ0KPiAtDQo+IC12b2lkIF9faW5pdA0KPiAt aHBzaW1faXJxX2luaXQgKHZvaWQpDQo+IC17DQo+IC0JaW50IGk7DQo+IC0NCj4gLQlmb3JfZWFj aF9hY3RpdmVfaXJxKGkpDQo+IC0JCWhwc2ltX2lycV9zZXRfY2hpcChpKTsNCj4gLX0NCj4gZGlm ZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fbWFjaHZlYy5jIGIvYXJjaC9pYTY0L2hw L3NpbS9ocHNpbV9tYWNodmVjLmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4 IGMyMTQxOTM1OTE4NS4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vaHBz aW1fbWFjaHZlYy5jDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMyArMCwwIEBADQo+IC0jZGVm aW5lIE1BQ0hWRUNfUExBVEZPUk1fTkFNRQkJaHBzaW0NCj4gLSNkZWZpbmUgTUFDSFZFQ19QTEFU Rk9STV9IRUFERVIJCTxhc20vbWFjaHZlY19ocHNpbS5oPg0KPiAtI2luY2x1ZGUgPGFzbS9tYWNo dmVjX2luaXQuaD4NCj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fc2V0dXAu YyBiL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fc2V0dXAuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAx MDA2NDQNCj4gaW5kZXggNDFkMjFkNTFkYzRkLi4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9p YTY0L2hwL3NpbS9ocHNpbV9zZXR1cC5jDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsNDEgKzAs MCBAQA0KPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjANCj4gLS8qDQo+IC0g KiBQbGF0Zm9ybSBkZXBlbmRlbnQgc3VwcG9ydCBmb3IgSFAgc2ltdWxhdG9yLg0KPiAtICoNCj4g LSAqIENvcHlyaWdodCAoQykgMTk5OCwgMTk5OSwgMjAwMiBIZXdsZXR0LVBhY2thcmQgQ28NCj4g LSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4NCj4gLSAqIENvcHly aWdodCAoQykgMTk5OSBWaWpheSBDaGFuZGVyIDx2aWpheUBlbmdyLnNnaS5jb20+DQo+IC0gKi8N Cj4gLSNpbmNsdWRlIDxsaW51eC9jb25zb2xlLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvaW5pdC5o Pg0KPiAtI2luY2x1ZGUgPGxpbnV4L2tkZXZfdC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2tlcm5l bC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L21ham9yLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvcGFy YW0uaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9yb290X2Rldi5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4 L3N0cmluZy5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+IC0NCj4gLSNpbmNsdWRl IDxhc20vZGVsYXkuaD4NCj4gLSNpbmNsdWRlIDxhc20vaXJxLmg+DQo+IC0jaW5jbHVkZSA8YXNt L3BhbC5oPg0KPiAtI2luY2x1ZGUgPGFzbS9tYWNodmVjLmg+DQo+IC0jaW5jbHVkZSA8YXNtL3Bn dGFibGUuaD4NCj4gLSNpbmNsdWRlIDxhc20vc2FsLmg+DQo+IC0jaW5jbHVkZSA8YXNtL2hwc2lt Lmg+DQo+IC0NCj4gLSNpbmNsdWRlICJocHNpbV9zc2MuaCINCj4gLQ0KPiAtdm9pZA0KPiAtaWE2 NF9jdGxfdHJhY2UgKGxvbmcgb24pDQo+IC17DQo+IC0JaWE2NF9zc2Mob24sIDAsIDAsIDAsIFNT Q19DVExfVFJBQ0UpOw0KPiAtfQ0KPiAtDQo+IC12b2lkIF9faW5pdA0KPiAtaHBzaW1fc2V0dXAg KGNoYXIgKipjbWRsaW5lX3ApDQo+IC17DQo+IC0JUk9PVF9ERVYgPSBSb290X1NEQTE7CQkvKiBk ZWZhdWx0IHRvIGZpcnN0IFNDU0kgZHJpdmUgKi8NCj4gLQ0KPiAtCXNpbWNvbnNfcmVnaXN0ZXIo KTsNCj4gLX0NCj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9ocC9zaW0vaHBzaW1fc3NjLmggYi9h cmNoL2lhNjQvaHAvc2ltL2hwc2ltX3NzYy5oDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0K PiBpbmRleCA2ZmQ5N2E0ODc4MTEuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAv c2ltL2hwc2ltX3NzYy5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMzcgKzAsMCBAQA0KPiAt LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gLS8qDQo+IC0gKiBQbGF0 Zm9ybSBkZXBlbmRlbnQgc3VwcG9ydCBmb3IgSFAgc2ltdWxhdG9yLg0KPiAtICoNCj4gLSAqIENv cHlyaWdodCAoQykgMTk5OCwgMTk5OSBIZXdsZXR0LVBhY2thcmQgQ28NCj4gLSAqIENvcHlyaWdo dCAoQykgMTk5OCwgMTk5OSBEYXZpZCBNb3NiZXJnZXItVGFuZyA8ZGF2aWRtQGhwbC5ocC5jb20+ DQo+IC0gKiBDb3B5cmlnaHQgKEMpIDE5OTkgVmlqYXkgQ2hhbmRlciA8dmlqYXlAZW5nci5zZ2ku Y29tPg0KPiAtICovDQo+IC0jaWZuZGVmIF9JQTY0X1BMQVRGT1JNX0hQU0lNX1NTQ19IDQo+IC0j ZGVmaW5lIF9JQTY0X1BMQVRGT1JNX0hQU0lNX1NTQ19IDQo+IC0NCj4gLS8qIFNpbXVsYXRvciBz eXN0ZW0gY2FsbHM6ICovDQo+IC0NCj4gLSNkZWZpbmUgU1NDX0NPTlNPTEVfSU5JVAkJMjANCj4g LSNkZWZpbmUgU1NDX0dFVENIQVIJCQkyMQ0KPiAtI2RlZmluZSBTU0NfUFVUQ0hBUgkJCTMxDQo+ IC0jZGVmaW5lIFNTQ19DT05ORUNUX0lOVEVSUlVQVAkJNTgNCj4gLSNkZWZpbmUgU1NDX0dFTkVS QVRFX0lOVEVSUlVQVAkJNTkNCj4gLSNkZWZpbmUgU1NDX1NFVF9QRVJJT0RJQ19JTlRFUlJVUFQJ NjANCj4gLSNkZWZpbmUgU1NDX0dFVF9SVEMJCQk2NQ0KPiAtI2RlZmluZSBTU0NfRVhJVAkJCTY2 DQo+IC0jZGVmaW5lIFNTQ19MT0FEX1NZTUJPTFMJCTY5DQo+IC0jZGVmaW5lIFNTQ19HRVRfVE9E CQkJNzQNCj4gLSNkZWZpbmUgU1NDX0NUTF9UUkFDRQkJCTc2DQo+IC0NCj4gLSNkZWZpbmUgU1ND X05FVERFVl9QUk9CRQkJMTAwDQo+IC0jZGVmaW5lIFNTQ19ORVRERVZfU0VORAkJCTEwMQ0KPiAt I2RlZmluZSBTU0NfTkVUREVWX1JFQ1YJCQkxMDINCj4gLSNkZWZpbmUgU1NDX05FVERFVl9BVFRB Q0gJCTEwMw0KPiAtI2RlZmluZSBTU0NfTkVUREVWX0RFVEFDSAkJMTA0DQo+IC0NCj4gLS8qDQo+ IC0gKiBTaW11bGF0b3Igc3lzdGVtIGNhbGwuDQo+IC0gKi8NCj4gLWV4dGVybiBsb25nIGlhNjRf c3NjIChsb25nIGFyZzAsIGxvbmcgYXJnMSwgbG9uZyBhcmcyLCBsb25nIGFyZzMsIGludCBucik7 DQo+IC0NCj4gLSNlbmRpZiAvKiBfSUE2NF9QTEFURk9STV9IUFNJTV9TU0NfSCAqLw0KPiBkaWZm IC0tZ2l0IGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1ldGguYyBiL2FyY2gvaWE2NC9ocC9zaW0vc2lt ZXRoLmMNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0DQo+IGluZGV4IGYzOWVmMmI0ZWQ3Mi4u MDAwMDAwMDAwMDAwDQo+IC0tLSBhL2FyY2gvaWE2NC9ocC9zaW0vc2ltZXRoLmMNCj4gKysrIC9k ZXYvbnVsbA0KPiBAQCAtMSw1MTAgKzAsMCBAQA0KPiAtLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZp ZXI6IEdQTC0yLjANCj4gLS8qDQo+IC0gKiBTaW11bGF0ZWQgRXRoZXJuZXQgRHJpdmVyDQo+IC0g Kg0KPiAtICogQ29weXJpZ2h0IChDKSAxOTk5LTIwMDEsIDIwMDMgSGV3bGV0dC1QYWNrYXJkIENv DQo+IC0gKglTdGVwaGFuZSBFcmFuaWFuIDxlcmFuaWFuQGhwbC5ocC5jb20+DQo+IC0gKi8NCj4g LSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9zY2hlZC5oPg0K PiAtI2luY2x1ZGUgPGxpbnV4L3R5cGVzLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvaW4uaD4NCj4g LSNpbmNsdWRlIDxsaW51eC9zdHJpbmcuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9pbml0Lmg+DQo+ IC0jaW5jbHVkZSA8bGludXgvZXJybm8uaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQu aD4NCj4gLSNpbmNsdWRlIDxsaW51eC9uZXRkZXZpY2UuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9l dGhlcmRldmljZS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2luZXRkZXZpY2UuaD4NCj4gLSNpbmNs dWRlIDxsaW51eC9pZl9ldGhlci5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L2lmX2FycC5oPg0KPiAt I2luY2x1ZGUgPGxpbnV4L3NrYnVmZi5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L25vdGlmaWVyLmg+ DQo+IC0jaW5jbHVkZSA8bGludXgvYml0b3BzLmg+DQo+IC0jaW5jbHVkZSA8YXNtL2lycS5oPg0K PiAtI2luY2x1ZGUgPGFzbS9ocHNpbS5oPg0KPiAtDQo+IC0jaW5jbHVkZSAiaHBzaW1fc3NjLmgi DQo+IC0NCj4gLSNkZWZpbmUgU0lNRVRIX1JFQ1ZfTUFYCTEwDQo+IC0NCj4gLS8qDQo+IC0gKiBN YXhpbXVtIHBvc3NpYmxlIHJlY2VpdmVkIGZyYW1lIGZvciBFdGhlcm5ldC4NCj4gLSAqIFdlIHBy ZWFsbG9jYXRlIGFuIHNrX2J1ZmYgb2YgdGhhdCBzaXplIHRvIGF2b2lkIGNvc3RseQ0KPiAtICog bWVtY3B5IGZvciB0ZW1wb3JhcnkgYnVmZmVyIGludG8gc2tfYnVmZi4gV2UgZG8gYmFzaWNhbGx5 DQo+IC0gKiB3aGF0J3MgZG9uZSBpbiBvdGhlciBkcml2ZXJzLCBsaWtlIGVlcHJvIHdpdGggYSBy aW5nLg0KPiAtICogVGhlIGRpZmZlcmVuY2UgaXMsIG9mIGNvdXJzZSwgdGhhdCB3ZSBkb24ndCBo YXZlIHJlYWwgRE1BICEhIQ0KPiAtICovDQo+IC0jZGVmaW5lIFNJTUVUSF9GUkFNRV9TSVpFCUVU SF9GUkFNRV9MRU4NCj4gLQ0KPiAtDQo+IC0jZGVmaW5lIE5FVFdPUktfSU5UUgkJCTgNCj4gLQ0K PiAtc3RydWN0IHNpbWV0aF9sb2NhbCB7DQo+IC0Jc3RydWN0IG5ldF9kZXZpY2Vfc3RhdHMgc3Rh dHM7DQo+IC0JaW50IAkJCXNpbWZkOwkgLyogZGVzY3JpcHRvciBpbiB0aGUgc2ltdWxhdG9yICov DQo+IC19Ow0KPiAtDQo+IC1zdGF0aWMgaW50IHNpbWV0aF9wcm9iZTEodm9pZCk7DQo+IC1zdGF0 aWMgaW50IHNpbWV0aF9vcGVuKHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiAtc3RhdGljIGlu dCBzaW1ldGhfY2xvc2Uoc3RydWN0IG5ldF9kZXZpY2UgKmRldik7DQo+IC1zdGF0aWMgaW50IHNp bWV0aF90eChzdHJ1Y3Qgc2tfYnVmZiAqc2tiLCBzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4g LXN0YXRpYyBpbnQgc2ltZXRoX3J4KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpOw0KPiAtc3RhdGlj IHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICpzaW1ldGhfZ2V0X3N0YXRzKHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpOw0KPiAtc3RhdGljIGlycXJldHVybl90IHNpbWV0aF9pbnRlcnJ1cHQoaW50IGly cSwgdm9pZCAqZGV2X2lkKTsNCj4gLXN0YXRpYyB2b2lkIHNldF9tdWx0aWNhc3RfbGlzdChzdHJ1 Y3QgbmV0X2RldmljZSAqZGV2KTsNCj4gLXN0YXRpYyBpbnQgc2ltZXRoX2RldmljZV9ldmVudChz dHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKnRoaXMsdW5zaWduZWQgbG9uZyBldmVudCwgdm9pZCAqcHRy KTsNCj4gLQ0KPiAtc3RhdGljIGNoYXIgKnNpbWV0aF92ZXJzaW9uPSIwLjMiOw0KPiAtDQo+IC0v Kg0KPiAtICogVGhpcyB2YXJpYWJsZSBpcyB1c2VkIHRvIGVzdGFibGlzaCBhIG1hcHBpbmcgYmV0 d2VlbiB0aGUgTGludXgvaWE2NCBrZXJuZWwNCj4gLSAqIGFuZCB0aGUgaG9zdCBsaW51eCBrZXJu ZWwuDQo+IC0gKg0KPiAtICogQXMgb2YgdG9kYXksIHdlIHN1cHBvcnQgb25seSBvbmUgY2FyZCwg ZXZlbiB0aG91Z2ggbW9zdCBvZiB0aGUgY29kZQ0KPiAtICogaXMgcmVhZHkgZm9yIG1hbnkgbW9y ZS4gVGhlIG1hcHBpbmcgaXMgdGhlbjoNCj4gLSAqCWxpbnV4L2lhNjQgLT4gbGludXgveDg2DQo+ IC0gKiAJICAgZXRoMCAgICAtPiBldGgxDQo+IC0gKg0KPiAtICogSW4gdGhlIGZ1dHVyZSwgd2Ug c29tZSBzdHJpbmcgb3BlcmF0aW9ucywgd2UgY291bGQgZWFzaWx5IHN1cHBvcnQgdXANCj4gLSAq IHRvIDEwIGNhcmRzICgwLTkpLg0KPiAtICoNCj4gLSAqIFRoZSBkZWZhdWx0IG1hcHBpbmcgY2Fu IGJlIGNoYW5nZWQgb24gdGhlIGtlcm5lbCBjb21tYW5kIGxpbmUgYnkNCj4gLSAqIHNwZWNpZnlp bmcgc2ltZXRoPWV0aFggKG9yIHdoYXRldmVyIHN0cmluZyB5b3Ugd2FudCkuDQo+IC0gKi8NCj4g LXN0YXRpYyBjaGFyICpzaW1ldGhfZGV2aWNlPSJldGgwIjsJIC8qIGRlZmF1bHQgaG9zdCBpbnRl cmZhY2UgdG8gdXNlICovDQo+IC0NCj4gLQ0KPiAtDQo+IC1zdGF0aWMgdm9sYXRpbGUgdW5zaWdu ZWQgaW50IGNhcmRfY291bnQ7IC8qIGhvdyBtYW55IGNhcmRzICJmb3VuZCIgc28gZmFyICovDQo+ IC1zdGF0aWMgaW50IHNpbWV0aF9kZWJ1ZzsJCS8qIHNldCB0byAxIHRvIGdldCBkZWJ1ZyBpbmZv cm1hdGlvbiAqLw0KPiAtDQo+IC0vKg0KPiAtICogVXNlZCB0byBjYXRjaCBJRkZfVVAgJiBJRkZf RE9XTiBldmVudHMNCj4gLSAqLw0KPiAtc3RhdGljIHN0cnVjdCBub3RpZmllcl9ibG9jayBzaW1l dGhfZGV2X25vdGlmaWVyID0gew0KPiAtCXNpbWV0aF9kZXZpY2VfZXZlbnQsDQo+IC0JTlVMTA0K PiAtfTsNCj4gLQ0KPiAtDQo+IC0vKg0KPiAtICogRnVuY3Rpb24gdXNlZCB3aGVuIHVzaW5nIGEg a2VybmVsIGNvbW1hbmQgbGluZSBvcHRpb24uDQo+IC0gKg0KPiAtICogRm9ybWF0OiBzaW1ldGg9 aW50ZXJmYWNlX25hbWUgKGxpa2UgZXRoMCkNCj4gLSAqLw0KPiAtc3RhdGljIGludCBfX2luaXQN Cj4gLXNpbWV0aF9zZXR1cChjaGFyICpzdHIpDQo+IC17DQo+IC0Jc2ltZXRoX2RldmljZSA9IHN0 cjsNCj4gLQlyZXR1cm4gMTsNCj4gLX0NCj4gLQ0KPiAtX19zZXR1cCgic2ltZXRoPSIsIHNpbWV0 aF9zZXR1cCk7DQo+IC0NCj4gLS8qDQo+IC0gKiBGdW5jdGlvbiB1c2VkIHRvIHByb2JlIGZvciBz aW1ldGggZGV2aWNlcyB3aGVuIG5vdCBpbnN0YWxsZWQNCj4gLSAqIGFzIGEgbG9hZGFibGUgbW9k dWxlDQo+IC0gKi8NCj4gLQ0KPiAtaW50IF9faW5pdA0KPiAtc2ltZXRoX3Byb2JlICh2b2lkKQ0K PiAtew0KPiAtCWludCByOw0KPiAtDQo+IC0JcHJpbnRrKEtFUk5fSU5GTyAic2ltZXRoOiB2JXNc biIsIHNpbWV0aF92ZXJzaW9uKTsNCj4gLQ0KPiAtCXIgPSBzaW1ldGhfcHJvYmUxKCk7DQo+IC0N Cj4gLQlpZiAociA9PSAwKSByZWdpc3Rlcl9uZXRkZXZpY2Vfbm90aWZpZXIoJnNpbWV0aF9kZXZf bm90aWZpZXIpOw0KPiAtDQo+IC0JcmV0dXJuIHI7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbmxp bmUgaW50DQo+IC1uZXRkZXZfcHJvYmUoY2hhciAqbmFtZSwgdW5zaWduZWQgY2hhciAqZXRoZXIp DQo+IC17DQo+IC0JcmV0dXJuIGlhNjRfc3NjKF9fcGEobmFtZSksIF9fcGEoZXRoZXIpLCAwLDAs IFNTQ19ORVRERVZfUFJPQkUpOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgaW50 DQo+IC1uZXRkZXZfYXR0YWNoKGludCBmZCwgaW50IGlycSwgdW5zaWduZWQgaW50IGlwYWRkcikN Cj4gLXsNCj4gLQkvKiB0aGlzIHB1dHMgdGhlIGhvc3QgaW50ZXJmYWNlIGluIHRoZSByaWdodCBt b2RlIChzdGFydCBpbnRlcnJ1cHRpbmcpICovDQo+IC0JcmV0dXJuIGlhNjRfc3NjKGZkLCBpcGFk ZHIsIDAsMCwgU1NDX05FVERFVl9BVFRBQ0gpOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLXN0YXRpYyBp bmxpbmUgaW50DQo+IC1uZXRkZXZfZGV0YWNoKGludCBmZCkNCj4gLXsNCj4gLQkvKg0KPiAtCSAq IGluYWN0aXZhdGUgdGhlIGhvc3QgaW50ZXJmYWNlIChkb24ndCBpbnRlcnJ1cHQgYW55bW9yZSkg Ki8NCj4gLQlyZXR1cm4gaWE2NF9zc2MoZmQsIDAsMCwwLCBTU0NfTkVUREVWX0RFVEFDSCk7DQo+ IC19DQo+IC0NCj4gLXN0YXRpYyBpbmxpbmUgaW50DQo+IC1uZXRkZXZfc2VuZChpbnQgZmQsIHVu c2lnbmVkIGNoYXIgKmJ1ZiwgdW5zaWduZWQgaW50IGxlbikNCj4gLXsNCj4gLQlyZXR1cm4gaWE2 NF9zc2MoZmQsIF9fcGEoYnVmKSwgbGVuLCAwLCBTU0NfTkVUREVWX1NFTkQpOw0KPiAtfQ0KPiAt DQo+IC1zdGF0aWMgaW5saW5lIGludA0KPiAtbmV0ZGV2X3JlYWQoaW50IGZkLCB1bnNpZ25lZCBj aGFyICpidWYsIHVuc2lnbmVkIGludCBsZW4pDQo+IC17DQo+IC0JcmV0dXJuIGlhNjRfc3NjKGZk LCBfX3BhKGJ1ZiksIGxlbiwgMCwgU1NDX05FVERFVl9SRUNWKTsNCj4gLX0NCj4gLQ0KPiAtc3Rh dGljIGNvbnN0IHN0cnVjdCBuZXRfZGV2aWNlX29wcyBzaW1ldGhfbmV0ZGV2X29wcyA9IHsNCj4g LQkubmRvX29wZW4JCT0gc2ltZXRoX29wZW4sDQo+IC0JLm5kb19zdG9wCQk9IHNpbWV0aF9jbG9z ZSwNCj4gLQkubmRvX3N0YXJ0X3htaXQJCT0gc2ltZXRoX3R4LA0KPiAtCS5uZG9fZ2V0X3N0YXRz CQk9IHNpbWV0aF9nZXRfc3RhdHMsDQo+IC0JLm5kb19zZXRfcnhfbW9kZQk9IHNldF9tdWx0aWNh c3RfbGlzdCwgLyogbm90IHlldCB1c2VkICovDQo+IC0NCj4gLX07DQo+IC0NCj4gLS8qDQo+IC0g KiBGdW5jdGlvbiBzaGFyZWQgd2l0aCBtb2R1bGUgY29kZSwgc28gY2Fubm90IGJlIGluIGluaXQg c2VjdGlvbg0KPiAtICoNCj4gLSAqIFNvIGZhciB0aGlzIGZ1bmN0aW9uICJkZXRlY3RzIiBvbmx5 IG9uZSBjYXJkICh0ZXN0XyZfc2V0KSBidXQgY291bGQNCj4gLSAqIGJlIGV4dGVuZGVkIGVhc2ls eS4NCj4gLSAqDQo+IC0gKiBSZXR1cm46DQo+IC0gKiAJLSAtRU5PREVWIGlzIG5vIGRldmljZSBm b3VuZA0KPiAtICoJLSAtRU5PTUVNIGlzIG5vIG1vcmUgbWVtb3J5DQo+IC0gKgktIDAgb3RoZXJ3 aXNlDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQNCj4gLXNpbWV0aF9wcm9iZTEodm9pZCkNCj4gLXsN Cj4gLQl1bnNpZ25lZCBjaGFyIG1hY19hZGRyW0VUSF9BTEVOXTsNCj4gLQlzdHJ1Y3Qgc2ltZXRo X2xvY2FsICpsb2NhbDsNCj4gLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2Ow0KPiAtCWludCBmZCwg ZXJyLCByYzsNCj4gLQ0KPiAtCS8qDQo+IC0JICogWFhYIEZpeCBtZQ0KPiAtCSAqIGxldCdzIHN1 cHBvcnQganVzdCBvbmUgY2FyZCBmb3Igbm93DQo+IC0JICovDQo+IC0JaWYgKHRlc3RfYW5kX3Nl dF9iaXQoMCwgJmNhcmRfY291bnQpKQ0KPiAtCQlyZXR1cm4gLUVOT0RFVjsNCj4gLQ0KPiAtCS8q DQo+IC0JICogY2hlY2sgd2l0aCB0aGUgc2ltdWxhdG9yIGZvciB0aGUgZGV2aWNlDQo+IC0JICov DQo+IC0JZmQgPSBuZXRkZXZfcHJvYmUoc2ltZXRoX2RldmljZSwgbWFjX2FkZHIpOw0KPiAtCWlm IChmZCA9PSAtMSkNCj4gLQkJcmV0dXJuIC1FTk9ERVY7DQo+IC0NCj4gLQlkZXYgPSBhbGxvY19l dGhlcmRldihzaXplb2Yoc3RydWN0IHNpbWV0aF9sb2NhbCkpOw0KPiAtCWlmICghZGV2KQ0KPiAt CQlyZXR1cm4gLUVOT01FTTsNCj4gLQ0KPiAtCW1lbWNweShkZXYtPmRldl9hZGRyLCBtYWNfYWRk ciwgc2l6ZW9mKG1hY19hZGRyKSk7DQo+IC0NCj4gLQlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7 DQo+IC0JbG9jYWwtPnNpbWZkID0gZmQ7IC8qIGtlZXAgdHJhY2sgb2YgdW5kZXJseWluZyBmaWxl IGRlc2NyaXB0b3IgKi8NCj4gLQ0KPiAtCWRldi0+bmV0ZGV2X29wcyA9ICZzaW1ldGhfbmV0ZGV2 X29wczsNCj4gLQ0KPiAtCWVyciA9IHJlZ2lzdGVyX25ldGRldihkZXYpOw0KPiAtCWlmIChlcnIp IHsNCj4gLQkJZnJlZV9uZXRkZXYoZGV2KTsNCj4gLQkJcmV0dXJuIGVycjsNCj4gLQl9DQo+IC0N Cj4gLQkvKg0KPiAtCSAqIGF0dGFjaCB0aGUgaW50ZXJydXB0IGluIHRoZSBzaW11bGF0b3IsIHRo aXMgZG9lcyBlbmFibGUgaW50ZXJydXB0cw0KPiAtCSAqIHVudGlsIGEgbmV0ZGV2X2F0dGFjaCgp IGlzIGNhbGxlZA0KPiAtCSAqLw0KPiAtCWlmICgocmMgPSBocHNpbV9nZXRfaXJxKE5FVFdPUktf SU5UUikpIDwgMCkNCj4gLQkJcGFuaWMoIiVzOiBvdXQgb2YgaW50ZXJydXB0IHZlY3RvcnMhXG4i LCBfX2Z1bmNfXyk7DQo+IC0JZGV2LT5pcnEgPSByYzsNCj4gLQ0KPiAtCXByaW50ayhLRVJOX0lO Rk8gIiVzOiBob3N0ZXRoPSVzIHNpbWZkPSVkLCBId0FkZHI9JXBtLCBJUlEgJWRcbiIsDQo+IC0J ICAgICAgIGRldi0+bmFtZSwgc2ltZXRoX2RldmljZSwgbG9jYWwtPnNpbWZkLCBkZXYtPmRldl9h ZGRyLCBkZXYtPmlycSk7DQo+IC0NCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtLyoNCj4g LSAqIGFjdHVhbGx5IGJpbmRzIHRoZSBkZXZpY2UgdG8gYW4gaW50ZXJydXB0IHZlY3Rvcg0KPiAt ICovDQo+IC1zdGF0aWMgaW50DQo+IC1zaW1ldGhfb3BlbihzdHJ1Y3QgbmV0X2RldmljZSAqZGV2 KQ0KPiAtew0KPiAtCWlmIChyZXF1ZXN0X2lycShkZXYtPmlycSwgc2ltZXRoX2ludGVycnVwdCwg MCwgInNpbWV0aCIsIGRldikpIHsNCj4gLQkJcHJpbnRrKEtFUk5fV0FSTklORyAic2ltZXRoOiB1 bmFibGUgdG8gZ2V0IElSUSAlZC5cbiIsIGRldi0+aXJxKTsNCj4gLQkJcmV0dXJuIC1FQUdBSU47 DQo+IC0JfQ0KPiAtDQo+IC0JbmV0aWZfc3RhcnRfcXVldWUoZGV2KTsNCj4gLQ0KPiAtCXJldHVy biAwOw0KPiAtfQ0KPiAtDQo+IC0vKiBjb3BpZWQgZnJvbSBsYXBiZXRoZXIuYyAqLw0KPiAtc3Rh dGljIF9faW5saW5lX18gaW50IGRldl9pc19ldGhkZXYoc3RydWN0IG5ldF9kZXZpY2UgKmRldikN Cj4gLXsNCj4gLSAgICAgICByZXR1cm4gKCBkZXYtPnR5cGUgPT0gQVJQSFJEX0VUSEVSICYmIHN0 cm5jbXAoZGV2LT5uYW1lLCAiZHVtbXkiLCA1KSk7DQo+IC19DQo+IC0NCj4gLQ0KPiAtLyoNCj4g LSAqIEhhbmRsZXIgZm9yIElGRl9VUCBvciBJRkZfRE9XTg0KPiAtICoNCj4gLSAqIFRoZSByZWFz b24gZm9yIHRoYXQgaXMgdGhhdCB3ZSBkb24ndCB3YW50IHRvIGJlIGludGVycnVwdGVkIHdoZW4g dGhlDQo+IC0gKiBpbnRlcmZhY2UgaXMgZG93bi4gVGhlcmUgaXMgbm8gd2F5IHRvIHVuY29ubmVj dCBpbiB0aGUgc2ltdWFsdG9yLiBJbnN0ZWFkDQo+IC0gKiB3ZSB1c2UgdGhpcyBmdW5jdGlvbiB0 byBzaHV0ZG93biBwYWNrZXQgcHJvY2Vzc2luZyBpbiB0aGUgZnJhbWUgZmlsdGVyDQo+IC0gKiBp biB0aGUgc2ltdWxhdG9yLiBUaHVzIG5vIGludGVycnVwdHMgYXJlIGdlbmVyYXRlZA0KPiAtICoN Cj4gLSAqDQo+IC0gKiBUaGF0J3MgYWxzbyB0aGUgcGxhY2Ugd2hlcmUgd2UgcGFzcyB0aGUgSVAg YWRkcmVzcyBvZiB0aGlzIGRldmljZSB0byB0aGUNCj4gLSAqIHNpbXVsYXRvciBzbyB0aGF0IHRo YXQgd2UgY2FuIHN0YXJ0IGZpbHRlcmluZyBwYWNrZXRzIGZvciBpdA0KPiAtICoNCj4gLSAqIFRo ZXJlIG1heSBiZSBhIGJldHRlciB3YXkgb2YgZG9pbmcgdGhpcywgYnV0IEkgZG9uJ3Qga25vdyB3 aGljaCB5ZXQuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQNCj4gLXNpbWV0aF9kZXZpY2VfZXZlbnQo c3RydWN0IG5vdGlmaWVyX2Jsb2NrICp0aGlzLHVuc2lnbmVkIGxvbmcgZXZlbnQsIHZvaWQgKnB0 cikNCj4gLXsNCj4gLQlzdHJ1Y3QgbmV0X2RldmljZSAqZGV2ID0gbmV0ZGV2X25vdGlmaWVyX2lu Zm9fdG9fZGV2KHB0cik7DQo+IC0Jc3RydWN0IHNpbWV0aF9sb2NhbCAqbG9jYWw7DQo+IC0Jc3Ry dWN0IGluX2RldmljZSAqaW5fZGV2Ow0KPiAtCXN0cnVjdCBpbl9pZmFkZHIgKippZmFwID0gTlVM TDsNCj4gLQlzdHJ1Y3QgaW5faWZhZGRyICppZmEgPSBOVUxMOw0KPiAtCWludCByOw0KPiAtDQo+ IC0NCj4gLQlpZiAoICEgZGV2ICkgew0KPiAtCQlwcmludGsoS0VSTl9XQVJOSU5HICJzaW1ldGhf ZGV2aWNlX2V2ZW50IGRldj0wXG4iKTsNCj4gLQkJcmV0dXJuIE5PVElGWV9ET05FOw0KPiAtCX0N Cj4gLQ0KPiAtCWlmIChkZXZfbmV0KGRldikgIT0gJmluaXRfbmV0KQ0KPiAtCQlyZXR1cm4gTk9U SUZZX0RPTkU7DQo+IC0NCj4gLQlpZiAoIGV2ZW50ICE9IE5FVERFVl9VUCAmJiBldmVudCAhPSBO RVRERVZfRE9XTiApIHJldHVybiBOT1RJRllfRE9ORTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogQ2hl Y2sgd2hldGhlciBvciBub3QgaXQncyBmb3IgYW4gZXRoZXJuZXQgZGV2aWNlDQo+IC0JICoNCj4g LQkgKiBYWFggRml4bWU6IFRoaXMgd29ya3Mgb25seSBhcyBsb25nIGFzIHdlIHN1cHBvcnQgb25l DQo+IC0JICogdHlwZSBvZiBldGhlcm5ldCBkZXZpY2UuDQo+IC0JICovDQo+IC0JaWYgKCAhZGV2 X2lzX2V0aGRldihkZXYpICkgcmV0dXJuIE5PVElGWV9ET05FOw0KPiAtDQo+IC0JaWYgKChpbl9k ZXY9ZGV2LT5pcF9wdHIpICE9IE5VTEwpIHsNCj4gLQkJZm9yIChpZmFwPSZpbl9kZXYtPmlmYV9s aXN0OyAoaWZhPSppZmFwKSAhPSBOVUxMOyBpZmFwPSZpZmEtPmlmYV9uZXh0KQ0KPiAtCQkJaWYg KHN0cmNtcChkZXYtPm5hbWUsIGlmYS0+aWZhX2xhYmVsKSA9PSAwKSBicmVhazsNCj4gLQl9DQo+ IC0JaWYgKCBpZmEgPT0gTlVMTCApIHsNCj4gLQkJcHJpbnRrKEtFUk5fRVJSICJzaW1ldGhfb3Bl bjogY2FuJ3QgZmluZCBkZXZpY2UgJXMncyBpZmFcbiIsIGRldi0+bmFtZSk7DQo+IC0JCXJldHVy biBOT1RJRllfRE9ORTsNCj4gLQl9DQo+IC0NCj4gLQlwcmludGsoS0VSTl9JTkZPICJzaW1ldGhf ZGV2aWNlX2V2ZW50OiAlcyBpcGFkZHI9MHgleFxuIiwNCj4gLQkgICAgICAgZGV2LT5uYW1lLCBu dG9obChpZmEtPmlmYV9sb2NhbCkpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBYWFggRml4IG1lDQo+ IC0JICogaWYgdGhlIGRldmljZSB3YXMgdXAsIGFuZCB3ZSdyZSBzaW1wbHkgcmVjb25maWd1cmlu ZyBpdCwgbm90IHN1cmUNCj4gLQkgKiB3ZSBnZXQgRE9XTiB0aGVuIFVQLg0KPiAtCSAqLw0KPiAt DQo+IC0JbG9jYWwgPSBuZXRkZXZfcHJpdihkZXYpOw0KPiAtCS8qIG5vdyBkbyBpdCBmb3IgcmVh bCAqLw0KPiAtCXIgPSBldmVudCA9PSBORVRERVZfVVAgPw0KPiAtCQluZXRkZXZfYXR0YWNoKGxv Y2FsLT5zaW1mZCwgZGV2LT5pcnEsIG50b2hsKGlmYS0+aWZhX2xvY2FsKSk6DQo+IC0JCW5ldGRl dl9kZXRhY2gobG9jYWwtPnNpbWZkKTsNCj4gLQ0KPiAtCXByaW50ayhLRVJOX0lORk8gInNpbWV0 aDogbmV0ZGV2X2F0dGFjaC9kZXRhY2g6IGV2ZW50PSVzIC0+JWRcbiIsDQo+IC0JICAgICAgIGV2 ZW50ID09IE5FVERFVl9VUCA/ICJhdHRhY2giOiJkZXRhY2giLCByKTsNCj4gLQ0KPiAtCXJldHVy biBOT1RJRllfRE9ORTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludA0KPiAtc2ltZXRoX2Nsb3Nl KHN0cnVjdCBuZXRfZGV2aWNlICpkZXYpDQo+IC17DQo+IC0JbmV0aWZfc3RvcF9xdWV1ZShkZXYp Ow0KPiAtDQo+IC0JZnJlZV9pcnEoZGV2LT5pcnEsIGRldik7DQo+IC0NCj4gLQlyZXR1cm4gMDsN Cj4gLX0NCj4gLQ0KPiAtLyoNCj4gLSAqIE9ubHkgdXNlZCBmb3IgZGVidWcNCj4gLSAqLw0KPiAt c3RhdGljIHZvaWQNCj4gLWZyYW1lX3ByaW50KHVuc2lnbmVkIGNoYXIgKmZyb20sIHVuc2lnbmVk IGNoYXIgKmZyYW1lLCBpbnQgbGVuKQ0KPiAtew0KPiAtCWludCBpOw0KPiAtDQo+IC0JcHJpbnRr KCIlczogKCVkKSAlMDJ4IiwgZnJvbSwgbGVuLCBmcmFtZVswXSAmIDB4ZmYpOw0KPiAtCWZvcihp PTE7IGkgPCA2OyBpKysgKSB7DQo+IC0JCXByaW50aygiOiUwMngiLCBmcmFtZVtpXSAmMHhmZik7 DQo+IC0JfQ0KPiAtCXByaW50aygiICUyeCIsIGZyYW1lWzZdICYweGZmKTsNCj4gLQlmb3IoaT03 OyBpIDwgMTI7IGkrKyApIHsNCj4gLQkJcHJpbnRrKCI6JTAyeCIsIGZyYW1lW2ldICYweGZmKTsN Cj4gLQl9DQo+IC0JcHJpbnRrKCIgWyUwMnglMDJ4XVxuIiwgZnJhbWVbMTJdLCBmcmFtZVsxM10p Ow0KPiAtDQo+IC0JZm9yKGk9MTQ7IGkgPCBsZW47IGkrKyApIHsNCj4gLQkJcHJpbnRrKCIlMDJ4 ICIsIGZyYW1lW2ldICYweGZmKTsNCj4gLQkJaWYgKCAoaSUxMCk9PTApIHByaW50aygiXG4iKTsN Cj4gLQl9DQo+IC0JcHJpbnRrKCJcbiIpOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLS8qDQo+IC0gKiBG dW5jdGlvbiB1c2VkIHRvIHRyYW5zbWl0IG9mIGZyYW1lLCB2ZXJ5IGxhc3Qgb25lIG9uIHRoZSBw YXRoIGJlZm9yZQ0KPiAtICogZ29pbmcgdG8gdGhlIHNpbXVsYXRvci4NCj4gLSAqLw0KPiAtc3Rh dGljIGludA0KPiAtc2ltZXRoX3R4KHN0cnVjdCBza19idWZmICpza2IsIHN0cnVjdCBuZXRfZGV2 aWNlICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IHNpbWV0aF9sb2NhbCAqbG9jYWwgPSBuZXRkZXZf cHJpdihkZXYpOw0KPiAtDQo+IC0jaWYgMA0KPiAtCS8qIGVuc3VyZSB3ZSBoYXZlIGF0IGxlYXN0 IEVUSF9aTEVOIGJ5dGVzIChtaW4gZnJhbWUgc2l6ZSkgKi8NCj4gLQl1bnNpZ25lZCBpbnQgbGVu Z3RoID0gRVRIX1pMRU4gPCBza2ItPmxlbiA/IHNrYi0+bGVuIDogRVRIX1pMRU47DQo+IC0JLyog V2hlcmUgZG8gdGhlIGV4dHJhIHBhZGRpbmcgYnl0ZXMgY29tZXMgZnJvbSBpbnRoZSBza2J1ZmYg PyAqLw0KPiAtI2Vsc2UNCj4gLQkvKiB0aGUgcmVhbCBkcml2ZXIgaW4gdGhlIGhvc3Qgc3lzdGVt IGlzIGdvaW5nIHRvIHRha2UgY2FyZSBvZiB0aGF0DQo+IC0JICogb3IgbWF5YmUgaXQncyB0aGUg TklDIGl0c2VsZi4NCj4gLQkgKi8NCj4gLQl1bnNpZ25lZCBpbnQgbGVuZ3RoID0gc2tiLT5sZW47 DQo+IC0jZW5kaWYNCj4gLQ0KPiAtCWxvY2FsLT5zdGF0cy50eF9ieXRlcyArPSBza2ItPmxlbjsN Cj4gLQlsb2NhbC0+c3RhdHMudHhfcGFja2V0cysrOw0KPiAtDQo+IC0NCj4gLQlpZiAoc2ltZXRo X2RlYnVnID4gNSkgZnJhbWVfcHJpbnQoInNpbWV0aF90eCIsIHNrYi0+ZGF0YSwgbGVuZ3RoKTsN Cj4gLQ0KPiAtCW5ldGRldl9zZW5kKGxvY2FsLT5zaW1mZCwgc2tiLT5kYXRhLCBsZW5ndGgpOw0K PiAtDQo+IC0JLyoNCj4gLQkgKiB3ZSBhcmUgc3luY2hyb25vdXMgb24gd3JpdGUsIHNvIHdlIGRv bid0IHNpbXVsYXRlIGENCj4gLQkgKiB0cmFzbm1pdCBjb21wbGV0ZSBpbnRlcnJ1cHQsIHRodXMg d2UgZG9uJ3QgbmVlZCB0byBhcm0gYSB0eA0KPiAtCSAqLw0KPiAtDQo+IC0JZGV2X2tmcmVlX3Nr Yihza2IpOw0KPiAtCXJldHVybiBORVRERVZfVFhfT0s7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBp bmxpbmUgc3RydWN0IHNrX2J1ZmYgKg0KPiAtbWFrZV9uZXdfc2tiKHN0cnVjdCBuZXRfZGV2aWNl ICpkZXYpDQo+IC17DQo+IC0Jc3RydWN0IHNrX2J1ZmYgKm5za2I7DQo+IC0NCj4gLQkvKg0KPiAt CSAqIFRoZSArMiBpcyB1c2VkIHRvIG1ha2Ugc3VyZSB0aGF0IHRoZSBJUCBoZWFkZXIgaXMgbmlj ZWx5DQo+IC0JICogYWxpZ25lZCAob24gNGJ5dGUgYm91bmRhcnkgSSBhc3N1bWUgMTQrMj0xNikN Cj4gLQkgKi8NCj4gLQluc2tiID0gZGV2X2FsbG9jX3NrYihTSU1FVEhfRlJBTUVfU0laRSArIDIp Ow0KPiAtCWlmICggbnNrYiA9PSBOVUxMICkgew0KPiAtCQlwcmludGsoS0VSTl9OT1RJQ0UgIiVz OiBtZW1vcnkgc3F1ZWV6ZS4gZHJvcHBpbmcgcGFja2V0LlxuIiwgZGV2LT5uYW1lKTsNCj4gLQkJ cmV0dXJuIE5VTEw7DQo+IC0JfQ0KPiAtDQo+IC0Jc2tiX3Jlc2VydmUobnNrYiwgMik7CS8qIEFs aWduIElQIG9uIDE2IGJ5dGUgYm91bmRhcmllcyAqLw0KPiAtDQo+IC0Jc2tiX3B1dChuc2tiLFNJ TUVUSF9GUkFNRV9TSVpFKTsNCj4gLQ0KPiAtCXJldHVybiBuc2tiOw0KPiAtfQ0KPiAtDQo+IC0v Kg0KPiAtICogY2FsbGVkIGZyb20gaW50ZXJydXB0IGhhbmRsZXIgdG8gcHJvY2VzcyBhIHJlY2Vp dmVkIGZyYW1lDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQNCj4gLXNpbWV0aF9yeChzdHJ1Y3QgbmV0 X2RldmljZSAqZGV2KQ0KPiAtew0KPiAtCXN0cnVjdCBzaW1ldGhfbG9jYWwJKmxvY2FsOw0KPiAt CXN0cnVjdCBza19idWZmCQkqc2tiOw0KPiAtCWludAkJCWxlbjsNCj4gLQlpbnQJCQlyY3ZfY291 bnQgPSBTSU1FVEhfUkVDVl9NQVg7DQo+IC0NCj4gLQlsb2NhbCA9IG5ldGRldl9wcml2KGRldik7 DQo+IC0JLyoNCj4gLQkgKiB0aGUgbG9vcCBjb25jZXB0IGhhcyBiZWVuIGJvcnJvd2VkIGZyb20g b3RoZXIgZHJpdmVycw0KPiAtCSAqIGxvb2tzIHRvIG1lIGxpa2UgaXQncyBhIHRocm90dGxpbmcg dGhpbmcgdG8gYXZvaWQgcHVzaGluZyB0byBtYW55DQo+IC0JICogcGFja2V0cyBhdCBvbmUgdGlt ZSBpbnRvIHRoZSBzdGFjay4gTWFraW5nIHN1cmUgd2UgY2FuIHByb2Nlc3MgdGhlbQ0KPiAtCSAq IHVwc3RyZWFtIGFuZCBtYWtlIGZvcndhcmQgcHJvZ3Jlc3Mgb3ZlcmFsbA0KPiAtCSAqLw0KPiAt CWRvIHsNCj4gLQkJaWYgKCAoc2tiPW1ha2VfbmV3X3NrYihkZXYpKSA9PSBOVUxMICkgew0KPiAt CQkJcHJpbnRrKEtFUk5fTk9USUNFICIlczogbWVtb3J5IHNxdWVlemUuIGRyb3BwaW5nIHBhY2tl dC5cbiIsIGRldi0+bmFtZSk7DQo+IC0JCQlsb2NhbC0+c3RhdHMucnhfZHJvcHBlZCsrOw0KPiAt CQkJcmV0dXJuIDA7DQo+IC0JCX0NCj4gLQkJLyoNCj4gLQkJICogUmVhZCBvbmx5IG9uZSBmcmFt ZSBhdCBhIHRpbWUNCj4gLQkJICovDQo+IC0JCWxlbiA9IG5ldGRldl9yZWFkKGxvY2FsLT5zaW1m ZCwgc2tiLT5kYXRhLCBTSU1FVEhfRlJBTUVfU0laRSk7DQo+IC0JCWlmICggbGVuID09IDAgKSB7 DQo+IC0JCQlpZiAoIHNpbWV0aF9kZWJ1ZyA+IDAgKSBwcmludGsoS0VSTl9XQVJOSU5HICIlczog Y291bnQ9JWQgbmV0ZGV2X3JlYWQ9MFxuIiwNCj4gLQkJCQkJCSAgICAgICBkZXYtPm5hbWUsIFNJ TUVUSF9SRUNWX01BWC1yY3ZfY291bnQpOw0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gLSNpZiAw DQo+IC0JCS8qDQo+IC0JCSAqIFhYWCBGaXggbWUNCj4gLQkJICogU2hvdWxkIHJlYWxseSBkbyBh IGNzdW0rY29weSBoZXJlDQo+IC0JCSAqLw0KPiAtCQlza2JfY29weV90b19saW5lYXJfZGF0YShz a2IsIGZyYW1lLCBsZW4pOw0KPiAtI2VuZGlmDQo+IC0JCXNrYi0+cHJvdG9jb2wgPSBldGhfdHlw ZV90cmFucyhza2IsIGRldik7DQo+IC0NCj4gLQkJaWYgKCBzaW1ldGhfZGVidWcgPiA2ICkgZnJh bWVfcHJpbnQoInNpbWV0aF9yeCIsIHNrYi0+ZGF0YSwgbGVuKTsNCj4gLQ0KPiAtCQkvKg0KPiAt CQkgKiBwdXNoIHRoZSBwYWNrZXQgdXAgJiB0cmlnZ2VyIHNvZnR3YXJlIGludGVycnVwdA0KPiAt CQkgKi8NCj4gLQkJbmV0aWZfcngoc2tiKTsNCj4gLQ0KPiAtCQlsb2NhbC0+c3RhdHMucnhfcGFj a2V0cysrOw0KPiAtCQlsb2NhbC0+c3RhdHMucnhfYnl0ZXMgKz0gbGVuOw0KPiAtDQo+IC0JfSB3 aGlsZSAoIC0tcmN2X2NvdW50ICk7DQo+IC0NCj4gLQlyZXR1cm4gbGVuOyAvKiAwID0gbm90aGlu ZyBsZWZ0IHRvIHJlYWQsIG90aGVyd2lzZSwgd2UgY2FuIHRyeSBhZ2FpbiAqLw0KPiAtfQ0KPiAt DQo+IC0vKg0KPiAtICogSW50ZXJydXB0IGhhbmRsZXIgKFllcywgd2UgY2FuIGRvIGl0IHRvbyAh ISEpDQo+IC0gKi8NCj4gLXN0YXRpYyBpcnFyZXR1cm5fdA0KPiAtc2ltZXRoX2ludGVycnVwdChp bnQgaXJxLCB2b2lkICpkZXZfaWQpDQo+IC17DQo+IC0Jc3RydWN0IG5ldF9kZXZpY2UgKmRldiA9 IGRldl9pZDsNCj4gLQ0KPiAtCS8qDQo+IC0JICogdmVyeSBzaW1wbGUgbG9vcCBiZWNhdXNlIHdl IGdldCBpbnRlcnJ1cHRzIG9ubHkgd2hlbiByZWNlaXZpbmcNCj4gLQkgKi8NCj4gLQl3aGlsZSAo c2ltZXRoX3J4KGRldikpOw0KPiAtCXJldHVybiBJUlFfSEFORExFRDsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIHN0cnVjdCBuZXRfZGV2aWNlX3N0YXRzICoNCj4gLXNpbWV0aF9nZXRfc3RhdHMoc3Ry dWN0IG5ldF9kZXZpY2UgKmRldikNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2ltZXRoX2xvY2FsICpsb2Nh bCA9IG5ldGRldl9wcml2KGRldik7DQo+IC0NCj4gLQlyZXR1cm4gJmxvY2FsLT5zdGF0czsNCj4g LX0NCj4gLQ0KPiAtLyogZmFrZSBtdWx0aWNhc3QgYWJpbGl0eSAqLw0KPiAtc3RhdGljIHZvaWQN Cj4gLXNldF9tdWx0aWNhc3RfbGlzdChzdHJ1Y3QgbmV0X2RldmljZSAqZGV2KQ0KPiAtew0KPiAt CXByaW50ayhLRVJOX1dBUk5JTkcgIiVzOiBzZXRfbXVsdGljYXN0X2xpc3QgY2FsbGVkXG4iLCBk ZXYtPm5hbWUpOw0KPiAtfQ0KPiAtDQo+IC1fX2luaXRjYWxsKHNpbWV0aF9wcm9iZSk7DQo+IGRp ZmYgLS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNjc2kuYyBiL2FyY2gvaWE2NC9ocC9zaW0v c2ltc2NzaS5jDQo+IGRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NA0KPiBpbmRleCAwYThhNzQyNzEx NzMuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNjc2kuYw0KPiAr KysgL2Rldi9udWxsDQo+IEBAIC0xLDM3MyArMCwwIEBADQo+IC0vLyBTUERYLUxpY2Vuc2UtSWRl bnRpZmllcjogR1BMLTIuMA0KPiAtLyoNCj4gLSAqIFNpbXVsYXRlZCBTQ1NJIGRyaXZlci4NCj4g LSAqDQo+IC0gKiBDb3B5cmlnaHQgKEMpIDE5OTksIDIwMDEtMjAwMyBIZXdsZXR0LVBhY2thcmQg Q28NCj4gLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1AaHBsLmhwLmNvbT4NCj4gLSAq CVN0ZXBoYW5lIEVyYW5pYW4gPGVyYW5pYW5AaHBsLmhwLmNvbT4NCj4gLSAqDQo+IC0gKiAwMi8w MS8xNSBEYXZpZCBNb3NiZXJnZXIJVXBkYXRlZCBmb3IgdjIuNS4xDQo+IC0gKiA5OS8xMi8xOCBE YXZpZCBNb3NiZXJnZXIJQWRkZWQgc3VwcG9ydCBmb3IgUkVBRDEwL1dSSVRFMTAgbmVlZGVkIGJ5 IGxpbnV4IHYyLjMuMzMNCj4gLSAqLw0KPiAtI2luY2x1ZGUgPGxpbnV4L2Jsa2Rldi5oPg0KPiAt I2luY2x1ZGUgPGxpbnV4L2luaXQuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9pbnRlcnJ1cHQuaD4N Cj4gLSNpbmNsdWRlIDxsaW51eC9rZXJuZWwuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC90aW1lci5o Pg0KPiAtI2luY2x1ZGUgPGFzbS9pcnEuaD4NCj4gLSNpbmNsdWRlICJocHNpbV9zc2MuaCINCj4g LQ0KPiAtI2luY2x1ZGUgPHNjc2kvc2NzaS5oPg0KPiAtI2luY2x1ZGUgPHNjc2kvc2NzaV9jbW5k Lmg+DQo+IC0jaW5jbHVkZSA8c2NzaS9zY3NpX2RldmljZS5oPg0KPiAtI2luY2x1ZGUgPHNjc2kv c2NzaV9ob3N0Lmg+DQo+IC0NCj4gLSNkZWZpbmUgREVCVUdfU0lNU0NTSQkwDQo+IC0NCj4gLSNk ZWZpbmUgU0lNU0NTSV9SRVFfUVVFVUVfTEVOCTY0DQo+IC0jZGVmaW5lIERFRkFVTFRfU0lNU0NT SV9ST09UCSIvdmFyL3NraS1kaXNrcy9zZCINCj4gLQ0KPiAtLyogU2ltdWxhdG9yIHN5c3RlbSBj YWxsczogKi8NCj4gLQ0KPiAtI2RlZmluZSBTU0NfT1BFTgkJCTUwDQo+IC0jZGVmaW5lIFNTQ19D TE9TRQkJCTUxDQo+IC0jZGVmaW5lIFNTQ19SRUFECQkJNTINCj4gLSNkZWZpbmUgU1NDX1dSSVRF CQkJNTMNCj4gLSNkZWZpbmUgU1NDX0dFVF9DT01QTEVUSU9OCQk1NA0KPiAtI2RlZmluZSBTU0Nf V0FJVF9DT01QTEVUSU9OCQk1NQ0KPiAtDQo+IC0jZGVmaW5lIFNTQ19XUklURV9BQ0NFU1MJCTIN Cj4gLSNkZWZpbmUgU1NDX1JFQURfQUNDRVNTCQkJMQ0KPiAtDQo+IC0jaWYgREVCVUdfU0lNU0NT SQ0KPiAtICBpbnQgc2ltc2NzaV9kZWJ1ZzsNCj4gLSMgZGVmaW5lIERCRwlzaW1zY3NpX2RlYnVn DQo+IC0jZWxzZQ0KPiAtIyBkZWZpbmUgREJHCTANCj4gLSNlbmRpZg0KPiAtDQo+IC1zdGF0aWMg c3RydWN0IFNjc2lfSG9zdCAqaG9zdDsNCj4gLQ0KPiAtc3RhdGljIHZvaWQgc2ltc2NzaV9pbnRl cnJ1cHQgKHVuc2lnbmVkIGxvbmcgdmFsKTsNCj4gLXN0YXRpYyBERUNMQVJFX1RBU0tMRVQoc2lt c2NzaV90YXNrbGV0LCBzaW1zY3NpX2ludGVycnVwdCwgMCk7DQo+IC0NCj4gLXN0cnVjdCBkaXNr X3JlcSB7DQo+IC0JdW5zaWduZWQgbG9uZyBhZGRyOw0KPiAtCXVuc2lnbmVkIGxlbjsNCj4gLX07 DQo+IC0NCj4gLXN0cnVjdCBkaXNrX3N0YXQgew0KPiAtCWludCBmZDsNCj4gLQl1bnNpZ25lZCBj b3VudDsNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBpbnQgZGVzY1sxNl0gPSB7DQo+IC0JLTEsIC0x LCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEsIC0xLCAtMSwgLTEN Cj4gLX07DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgcXVldWVfZW50cnkgew0KPiAtCXN0cnVjdCBz Y3NpX2NtbmQgKnNjOw0KPiAtfSBxdWV1ZVtTSU1TQ1NJX1JFUV9RVUVVRV9MRU5dOw0KPiAtDQo+ IC1zdGF0aWMgaW50IHJkLCB3cjsNCj4gLXN0YXRpYyBhdG9taWNfdCBudW1fcmVxcyA9IEFUT01J Q19JTklUKDApOw0KPiAtDQo+IC0vKiBiYXNlIG5hbWUgZm9yIGRlZmF1bHQgZGlza3MgKi8NCj4g LXN0YXRpYyBjaGFyICpzaW1zY3NpX3Jvb3QgPSBERUZBVUxUX1NJTVNDU0lfUk9PVDsNCj4gLQ0K PiAtI2RlZmluZSBNQVhfUk9PVF9MRU4JMTI4DQo+IC0NCj4gLS8qDQo+IC0gKiB1c2VkIHRvIHNl dHVwIGEgbmV3IGJhc2UgZm9yIGRpc2sgaW1hZ2VzDQo+IC0gKiB0byB1c2UgL2Zvby9iYXIvZGlz a1thLXpdIGFzIGRpc2sgaW1hZ2VzDQo+IC0gKiB5b3UgaGF2ZSB0byBzcGVjaWZ5IHNpbXNjc2k9 L2Zvby9iYXIvZGlzayBvbiB0aGUgY29tbWFuZCBsaW5lDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQg X19pbml0DQo+IC1zaW1zY3NpX3NldHVwIChjaGFyICpzKQ0KPiAtew0KPiAtCS8qIFhYWCBGaXgg bWUgd2UgbWF5IG5lZWQgdG8gc3RyY3B5KCkgPyAqLw0KPiAtCWlmIChzdHJsZW4ocykgPiBNQVhf Uk9PVF9MRU4pIHsNCj4gLQkJcHJpbnRrKEtFUk5fRVJSICJzaW1zY3NpX3NldHVwOiBwcmVmaXgg dG9vIGxvbmctLS11c2luZyBkZWZhdWx0ICVzXG4iLA0KPiAtCQkgICAgICAgc2ltc2NzaV9yb290 KTsNCj4gLQl9IGVsc2UNCj4gLQkJc2ltc2NzaV9yb290ID0gczsNCj4gLQlyZXR1cm4gMTsNCj4g LX0NCj4gLQ0KPiAtX19zZXR1cCgic2ltc2NzaT0iLCBzaW1zY3NpX3NldHVwKTsNCj4gLQ0KPiAt c3RhdGljIHZvaWQNCj4gLXNpbXNjc2lfaW50ZXJydXB0ICh1bnNpZ25lZCBsb25nIHZhbCkNCj4g LXsNCj4gLQlzdHJ1Y3Qgc2NzaV9jbW5kICpzYzsNCj4gLQ0KPiAtCXdoaWxlICgoc2MgPSBxdWV1 ZVtyZF0uc2MpICE9IE5VTEwpIHsNCj4gLQkJYXRvbWljX2RlYygmbnVtX3JlcXMpOw0KPiAtCQlx dWV1ZVtyZF0uc2MgPSBOVUxMOw0KPiAtCQlpZiAoREJHKQ0KPiAtCQkJcHJpbnRrKCJzaW1zY3Np X2ludGVycnVwdDogZG9uZSB3aXRoICV1XG4iLA0KPiAtCQkJICAgICAgIHNjLT5yZXF1ZXN0LT50 YWcpOw0KPiAtCQkoKnNjLT5zY3NpX2RvbmUpKHNjKTsNCj4gLQkJcmQgPSAocmQgKyAxKSAlIFNJ TVNDU0lfUkVRX1FVRVVFX0xFTjsNCj4gLQl9DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQNCj4g LXNpbXNjc2lfYmlvc3BhcmFtIChzdHJ1Y3Qgc2NzaV9kZXZpY2UgKnNkZXYsIHN0cnVjdCBibG9j a19kZXZpY2UgKm4sDQo+IC0JCXNlY3Rvcl90IGNhcGFjaXR5LCBpbnQgaXBbXSkNCj4gLXsNCj4g LQlpcFswXSA9IDY0OwkJLyogaGVhZHMgKi8NCj4gLQlpcFsxXSA9IDMyOwkJLyogc2VjdG9ycyAq Lw0KPiAtCWlwWzJdID0gY2FwYWNpdHkgPj4gMTE7CS8qIGN5bGluZGVycyAqLw0KPiAtCXJldHVy biAwOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9pZA0KPiAtc2ltc2NzaV9zZ19yZWFkd3JpdGUg KHN0cnVjdCBzY3NpX2NtbmQgKnNjLCBpbnQgbW9kZSwgdW5zaWduZWQgbG9uZyBvZmZzZXQpDQo+ IC17DQo+IC0JaW50IGk7DQo+IC0Jc3RydWN0IHNjYXR0ZXJsaXN0ICpzbDsNCj4gLQlzdHJ1Y3Qg ZGlza19zdGF0IHN0YXQ7DQo+IC0Jc3RydWN0IGRpc2tfcmVxIHJlcTsNCj4gLQ0KPiAtCXN0YXQu ZmQgPSBkZXNjW3NjLT5kZXZpY2UtPmlkXTsNCj4gLQ0KPiAtCXNjc2lfZm9yX2VhY2hfc2coc2Ms IHNsLCBzY3NpX3NnX2NvdW50KHNjKSwgaSkgew0KPiAtCQlyZXEuYWRkciA9IF9fcGEoc2dfdmly dChzbCkpOw0KPiAtCQlyZXEubGVuICA9IHNsLT5sZW5ndGg7DQo+IC0JCWlmIChEQkcpDQo+IC0J CQlwcmludGsoInNpbXNjc2lfc2dfJXMgQCAlbHggKG9mZiAlbHgpIHVzZV9zZz0lZCBsZW49JWRc biIsDQo+IC0JCQkgICAgICAgbW9kZSA9PSBTU0NfUkVBRCA/ICJyZWFkIjoid3JpdGUiLCByZXEu YWRkciwgb2Zmc2V0LA0KPiAtCQkJICAgICAgIHNjc2lfc2dfY291bnQoc2MpIC0gaSwgc2wtPmxl bmd0aCk7DQo+IC0JCWlhNjRfc3NjKHN0YXQuZmQsIDEsIF9fcGEoJnJlcSksIG9mZnNldCwgbW9k ZSk7DQo+IC0JCWlhNjRfc3NjKF9fcGEoJnN0YXQpLCAwLCAwLCAwLCBTU0NfV0FJVF9DT01QTEVU SU9OKTsNCj4gLQ0KPiAtCQkvKiBzaG91bGQgbm90IGhhcHBlbiBpbiBvdXIgY2FzZSAqLw0KPiAt CQlpZiAoc3RhdC5jb3VudCAhPSByZXEubGVuKSB7DQo+IC0JCQlzYy0+cmVzdWx0ID0gRElEX0VS Uk9SIDw8IDE2Ow0KPiAtCQkJcmV0dXJuOw0KPiAtCQl9DQo+IC0JCW9mZnNldCArPSAgc2wtPmxl bmd0aDsNCj4gLQl9DQo+IC0Jc2MtPnJlc3VsdCA9IEdPT0Q7DQo+IC19DQo+IC0NCj4gLS8qDQo+ IC0gKiBmdW5jdGlvbiBoYW5kbGluZyBib3RoIFJFQURfNi9XUklURV82IChub24tc2NhdHRlci9n YXRoZXIgbW9kZSkNCj4gLSAqIGNvbW1hbmRzLg0KPiAtICogQWRkZWQgMDIvMjYvOTkgUy5FcmFu aWFuDQo+IC0gKi8NCj4gLXN0YXRpYyB2b2lkDQo+IC1zaW1zY3NpX3JlYWR3cml0ZTYgKHN0cnVj dCBzY3NpX2NtbmQgKnNjLCBpbnQgbW9kZSkNCj4gLXsNCj4gLQl1bnNpZ25lZCBsb25nIG9mZnNl dDsNCj4gLQ0KPiAtCW9mZnNldCA9ICgoKHNjLT5jbW5kWzFdICYgMHgxZikgPDwgMTYpIHwgKHNj LT5jbW5kWzJdIDw8IDgpIHwgc2MtPmNtbmRbM10pKjUxMjsNCj4gLQlzaW1zY3NpX3NnX3JlYWR3 cml0ZShzYywgbW9kZSwgb2Zmc2V0KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIHNpemVfdA0KPiAt c2ltc2NzaV9nZXRfZGlza19zaXplIChpbnQgZmQpDQo+IC17DQo+IC0Jc3RydWN0IGRpc2tfc3Rh dCBzdGF0Ow0KPiAtCXNpemVfdCBiaXQsIHNlY3RvcnMgPSAwOw0KPiAtCXN0cnVjdCBkaXNrX3Jl cSByZXE7DQo+IC0JY2hhciBidWZbNTEyXTsNCj4gLQ0KPiAtCS8qDQo+IC0JICogVGhpcyBpcyBh IGJpdCBrbHVkZ2V5OiB0aGUgc2ltdWxhdG9yIGRvZXNuJ3QgcHJvdmlkZSBhDQo+IC0JICogZGly ZWN0IHdheSBvZiBkZXRlcm1pbmluZyB0aGUgZGlzayBzaXplLCBzbyB3ZSBkbyBhIGJpbmFyeQ0K PiAtCSAqIHNlYXJjaCwgYXNzdW1pbmcgYSBtYXhpbXVtIGRpc2sgc2l6ZSBvZiAxMjhHQi4NCj4g LQkgKi8NCj4gLQlmb3IgKGJpdCA9ICgxMjhVTCA8PCAzMCkvNTEyOyBiaXQgIT0gMDsgYml0ID4+ PSAxKSB7DQo+IC0JCXJlcS5hZGRyID0gX19wYSgmYnVmKTsNCj4gLQkJcmVxLmxlbiA9IHNpemVv ZihidWYpOw0KPiAtCQlpYTY0X3NzYyhmZCwgMSwgX19wYSgmcmVxKSwgKChzZWN0b3JzIHwgYml0 KSAtIDEpKjUxMiwgU1NDX1JFQUQpOw0KPiAtCQlzdGF0LmZkID0gZmQ7DQo+IC0JCWlhNjRfc3Nj KF9fcGEoJnN0YXQpLCAwLCAwLCAwLCBTU0NfV0FJVF9DT01QTEVUSU9OKTsNCj4gLQkJaWYgKHN0 YXQuY291bnQgPT0gc2l6ZW9mKGJ1ZikpDQo+IC0JCQlzZWN0b3JzIHw9IGJpdDsNCj4gLQl9DQo+ IC0JcmV0dXJuIHNlY3RvcnMgLSAxOwkvKiByZXR1cm4gbGFzdCB2YWxpZCBzZWN0b3IgbnVtYmVy ICovDQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkDQo+IC1zaW1zY3NpX3JlYWR3cml0ZTEwIChz dHJ1Y3Qgc2NzaV9jbW5kICpzYywgaW50IG1vZGUpDQo+IC17DQo+IC0JdW5zaWduZWQgbG9uZyBv ZmZzZXQ7DQo+IC0NCj4gLQlvZmZzZXQgPSAoKCh1bnNpZ25lZCBsb25nKXNjLT5jbW5kWzJdIDw8 IDI0KQ0KPiAtCQl8ICgodW5zaWduZWQgbG9uZylzYy0+Y21uZFszXSA8PCAxNikNCj4gLQkJfCAo KHVuc2lnbmVkIGxvbmcpc2MtPmNtbmRbNF0gPDwgIDgpDQo+IC0JCXwgKCh1bnNpZ25lZCBsb25n KXNjLT5jbW5kWzVdIDw8ICAwKSkqNTEyVUw7DQo+IC0Jc2ltc2NzaV9zZ19yZWFkd3JpdGUoc2Ms IG1vZGUsIG9mZnNldCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQNCj4gLXNpbXNjc2lfcXVl dWVjb21tYW5kX2xjayAoc3RydWN0IHNjc2lfY21uZCAqc2MsIHZvaWQgKCpkb25lKShzdHJ1Y3Qg c2NzaV9jbW5kICopKQ0KPiAtew0KPiAtCXVuc2lnbmVkIGludCB0YXJnZXRfaWQgPSBzYy0+ZGV2 aWNlLT5pZDsNCj4gLQljaGFyIGZuYW1lW01BWF9ST09UX0xFTisxNl07DQo+IC0Jc2l6ZV90IGRp c2tfc2l6ZTsNCj4gLQljaGFyICpidWY7DQo+IC0JY2hhciBsb2NhbGJ1ZlszNl07DQo+IC0jaWYg REVCVUdfU0lNU0NTSQ0KPiAtCXJlZ2lzdGVyIGxvbmcgc3AgYXNtICgic3AiKTsNCj4gLQ0KPiAt CWlmIChEQkcpDQo+IC0JCXByaW50aygic2ltc2NzaV9xdWV1ZWNvbW1hbmQ6IHRhcmdldD0lZCxj bW5kPSV1LHNjPSV1LHNwPSVseCxkb25lPSVwXG4iLA0KPiAtCQkgICAgICAgdGFyZ2V0X2lkLCBz Yy0+Y21uZFswXSwgc2MtPnJlcXVlc3QtPnRhZywgc3AsIGRvbmUpOw0KPiAtI2VuZGlmDQo+IC0N Cj4gLQlzYy0+cmVzdWx0ID0gRElEX0JBRF9UQVJHRVQgPDwgMTY7DQo+IC0Jc2MtPnNjc2lfZG9u ZSA9IGRvbmU7DQo+IC0JaWYgKHRhcmdldF9pZCA8PSAxNSAmJiBzYy0+ZGV2aWNlLT5sdW4gPT0g MCkgew0KPiAtCQlzd2l0Y2ggKHNjLT5jbW5kWzBdKSB7DQo+IC0JCSAgICAgIGNhc2UgSU5RVUlS WToNCj4gLQkJCWlmIChzY3NpX2J1ZmZsZW4oc2MpIDwgMzUpIHsNCj4gLQkJCQlicmVhazsNCj4g LQkJCX0NCj4gLQkJCXNwcmludGYgKGZuYW1lLCAiJXMlYyIsIHNpbXNjc2lfcm9vdCwgJ2EnICsg dGFyZ2V0X2lkKTsNCj4gLQkJCWRlc2NbdGFyZ2V0X2lkXSA9IGlhNjRfc3NjKF9fcGEoZm5hbWUp LCBTU0NfUkVBRF9BQ0NFU1N8U1NDX1dSSVRFX0FDQ0VTUywNCj4gLQkJCQkJCSAgIDAsIDAsIFNT Q19PUEVOKTsNCj4gLQkJCWlmIChkZXNjW3RhcmdldF9pZF0gPCAwKSB7DQo+IC0JCQkJLyogZGlz ayBkb2Vzbid0IGV4aXN0Li4uICovDQo+IC0JCQkJYnJlYWs7DQo+IC0JCQl9DQo+IC0JCQlidWYg PSBsb2NhbGJ1ZjsNCj4gLQkJCWJ1ZlswXSA9IDA7CS8qIG1hZ25ldGljIGRpc2sgKi8NCj4gLQkJ CWJ1ZlsxXSA9IDA7CS8qIG5vdCBhIHJlbW92YWJsZSBtZWRpdW0gKi8NCj4gLQkJCWJ1ZlsyXSA9 IDI7CS8qIFNDU0ktMiBjb21wbGlhbnQgZGV2aWNlICovDQo+IC0JCQlidWZbM10gPSAyOwkvKiBT Q1NJLTIgcmVzcG9uc2UgZGF0YSBmb3JtYXQgKi8NCj4gLQkJCWJ1Zls0XSA9IDMxOwkvKiBhZGRp dGlvbmFsIGxlbmd0aCAoYnl0ZXMpICovDQo+IC0JCQlidWZbNV0gPSAwOwkvKiByZXNlcnZlZCAq Lw0KPiAtCQkJYnVmWzZdID0gMDsJLyogcmVzZXJ2ZWQgKi8NCj4gLQkJCWJ1Zls3XSA9IDA7CS8q IHZhcmlvdXMgZmxhZ3MgKi8NCj4gLQkJCW1lbWNweShidWYgKyA4LCAiSFAgICAgICBTSU1VTEFU RUQgRElTSyAgMC4wMCIsICAyOCk7DQo+IC0JCQlzY3NpX3NnX2NvcHlfZnJvbV9idWZmZXIoc2Ms IGJ1ZiwgMzYpOw0KPiAtCQkJc2MtPnJlc3VsdCA9IEdPT0Q7DQo+IC0JCQlicmVhazsNCj4gLQ0K PiAtCQkgICAgICBjYXNlIFRFU1RfVU5JVF9SRUFEWToNCj4gLQkJCXNjLT5yZXN1bHQgPSBHT09E Ow0KPiAtCQkJYnJlYWs7DQo+IC0NCj4gLQkJICAgICAgY2FzZSBSRUFEXzY6DQo+IC0JCQlpZiAo ZGVzY1t0YXJnZXRfaWRdIDwgMCApDQo+IC0JCQkJYnJlYWs7DQo+IC0JCQlzaW1zY3NpX3JlYWR3 cml0ZTYoc2MsIFNTQ19SRUFEKTsNCj4gLQkJCWJyZWFrOw0KPiAtDQo+IC0JCSAgICAgIGNhc2Ug UkVBRF8xMDoNCj4gLQkJCWlmIChkZXNjW3RhcmdldF9pZF0gPCAwICkNCj4gLQkJCQlicmVhazsN Cj4gLQkJCXNpbXNjc2lfcmVhZHdyaXRlMTAoc2MsIFNTQ19SRUFEKTsNCj4gLQkJCWJyZWFrOw0K PiAtDQo+IC0JCSAgICAgIGNhc2UgV1JJVEVfNjoNCj4gLQkJCWlmIChkZXNjW3RhcmdldF9pZF0g PCAwKQ0KPiAtCQkJCWJyZWFrOw0KPiAtCQkJc2ltc2NzaV9yZWFkd3JpdGU2KHNjLCBTU0NfV1JJ VEUpOw0KPiAtCQkJYnJlYWs7DQo+IC0NCj4gLQkJICAgICAgY2FzZSBXUklURV8xMDoNCj4gLQkJ CWlmIChkZXNjW3RhcmdldF9pZF0gPCAwKQ0KPiAtCQkJCWJyZWFrOw0KPiAtCQkJc2ltc2NzaV9y ZWFkd3JpdGUxMChzYywgU1NDX1dSSVRFKTsNCj4gLQkJCWJyZWFrOw0KPiAtDQo+IC0JCSAgICAg IGNhc2UgUkVBRF9DQVBBQ0lUWToNCj4gLQkJCWlmIChkZXNjW3RhcmdldF9pZF0gPCAwIHx8IHNj c2lfYnVmZmxlbihzYykgPCA4KSB7DQo+IC0JCQkJYnJlYWs7DQo+IC0JCQl9DQo+IC0JCQlidWYg PSBsb2NhbGJ1ZjsNCj4gLQkJCWRpc2tfc2l6ZSA9IHNpbXNjc2lfZ2V0X2Rpc2tfc2l6ZShkZXNj W3RhcmdldF9pZF0pOw0KPiAtDQo+IC0JCQlidWZbMF0gPSAoZGlza19zaXplID4+IDI0KSAmIDB4 ZmY7DQo+IC0JCQlidWZbMV0gPSAoZGlza19zaXplID4+IDE2KSAmIDB4ZmY7DQo+IC0JCQlidWZb Ml0gPSAoZGlza19zaXplID4+ICA4KSAmIDB4ZmY7DQo+IC0JCQlidWZbM10gPSAoZGlza19zaXpl ID4+ICAwKSAmIDB4ZmY7DQo+IC0JCQkvKiBzZXQgYmxvY2sgc2l6ZSBvZiA1MTIgYnl0ZXM6ICov DQo+IC0JCQlidWZbNF0gPSAwOw0KPiAtCQkJYnVmWzVdID0gMDsNCj4gLQkJCWJ1Zls2XSA9IDI7 DQo+IC0JCQlidWZbN10gPSAwOw0KPiAtCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjLCBi dWYsIDgpOw0KPiAtCQkJc2MtPnJlc3VsdCA9IEdPT0Q7DQo+IC0JCQlicmVhazsNCj4gLQ0KPiAt CQkgICAgICBjYXNlIE1PREVfU0VOU0U6DQo+IC0JCSAgICAgIGNhc2UgTU9ERV9TRU5TRV8xMDoN Cj4gLQkJCS8qIHNkLmMgdXNlcyB0aGlzIHRvIGRldGVybWluZSB3aGV0aGVyIGRpc2sgZG9lcyB3 cml0ZS1jYWNoaW5nLiAqLw0KPiAtCQkJc2NzaV9zZ19jb3B5X2Zyb21fYnVmZmVyKHNjLCAoY2hh ciAqKWVtcHR5X3plcm9fcGFnZSwNCj4gLQkJCQkJCSBQQUdFX1NJWkUpOw0KPiAtCQkJc2MtPnJl c3VsdCA9IEdPT0Q7DQo+IC0JCQlicmVhazsNCj4gLQ0KPiAtCQkgICAgICBjYXNlIFNUQVJUX1NU T1A6DQo+IC0JCQlwcmludGsoS0VSTl9FUlIgIlNUQVJUX1NUT1BcbiIpOw0KPiAtCQkJYnJlYWs7 DQo+IC0NCj4gLQkJICAgICAgZGVmYXVsdDoNCj4gLQkJCXBhbmljKCJzaW1zY3NpOiB1bmtub3du IFNDU0kgY29tbWFuZCAldVxuIiwgc2MtPmNtbmRbMF0pOw0KPiAtCQl9DQo+IC0JfQ0KPiAtCWlm IChzYy0+cmVzdWx0ID09IERJRF9CQURfVEFSR0VUKSB7DQo+IC0JCXNjLT5yZXN1bHQgfD0gRFJJ VkVSX1NFTlNFIDw8IDI0Ow0KPiAtCQlzYy0+c2Vuc2VfYnVmZmVyWzBdID0gMHg3MDsNCj4gLQkJ c2MtPnNlbnNlX2J1ZmZlclsyXSA9IDB4MDA7DQo+IC0JfQ0KPiAtCWlmIChhdG9taWNfcmVhZCgm bnVtX3JlcXMpID49IFNJTVNDU0lfUkVRX1FVRVVFX0xFTikgew0KPiAtCQlwYW5pYygiQXR0ZW1w dCB0byBxdWV1ZSBjb21tYW5kIHdoaWxlIGNvbW1hbmQgaXMgcGVuZGluZyEhIik7DQo+IC0JfQ0K PiAtCWF0b21pY19pbmMoJm51bV9yZXFzKTsNCj4gLQlxdWV1ZVt3cl0uc2MgPSBzYzsNCj4gLQl3 ciA9ICh3ciArIDEpICUgU0lNU0NTSV9SRVFfUVVFVUVfTEVOOw0KPiAtDQo+IC0JdGFza2xldF9z Y2hlZHVsZSgmc2ltc2NzaV90YXNrbGV0KTsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAt c3RhdGljIERFRl9TQ1NJX1FDTUQoc2ltc2NzaV9xdWV1ZWNvbW1hbmQpDQo+IC0NCj4gLXN0YXRp YyBpbnQNCj4gLXNpbXNjc2lfaG9zdF9yZXNldCAoc3RydWN0IHNjc2lfY21uZCAqc2MpDQo+IC17 DQo+IC0JcHJpbnRrKEtFUk5fRVJSICJzaW1zY3NpX2hvc3RfcmVzZXQ6IG5vdCBpbXBsZW1lbnRl ZFxuIik7DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3Qgc2NzaV9o b3N0X3RlbXBsYXRlIGRyaXZlcl90ZW1wbGF0ZSA9IHsNCj4gLQkubmFtZQkJCT0gInNpbXVsYXRl ZCBTQ1NJIGhvc3QgYWRhcHRlciIsDQo+IC0JLnByb2NfbmFtZQkJPSAic2ltc2NzaSIsDQo+IC0J LnF1ZXVlY29tbWFuZAkJPSBzaW1zY3NpX3F1ZXVlY29tbWFuZCwNCj4gLQkuZWhfaG9zdF9yZXNl dF9oYW5kbGVyCT0gc2ltc2NzaV9ob3N0X3Jlc2V0LA0KPiAtCS5iaW9zX3BhcmFtCQk9IHNpbXNj c2lfYmlvc3BhcmFtLA0KPiAtCS5jYW5fcXVldWUJCT0gU0lNU0NTSV9SRVFfUVVFVUVfTEVOLA0K PiAtCS50aGlzX2lkCQk9IC0xLA0KPiAtCS5zZ190YWJsZXNpemUJCT0gU0dfQUxMLA0KPiAtCS5t YXhfc2VjdG9ycwkJPSAxMDI0LA0KPiAtCS5jbWRfcGVyX2x1bgkJPSBTSU1TQ1NJX1JFUV9RVUVV RV9MRU4sDQo+IC0JLmRtYV9ib3VuZGFyeQkJPSBQQUdFX1NJWkUgLSAxLA0KPiAtfTsNCj4gLQ0K PiAtc3RhdGljIGludCBfX2luaXQNCj4gLXNpbXNjc2lfaW5pdCh2b2lkKQ0KPiAtew0KPiAtCWlu dCBlcnJvcjsNCj4gLQ0KPiAtCWhvc3QgPSBzY3NpX2hvc3RfYWxsb2MoJmRyaXZlcl90ZW1wbGF0 ZSwgMCk7DQo+IC0JaWYgKCFob3N0KQ0KPiAtCQlyZXR1cm4gLUVOT01FTTsNCj4gLQ0KPiAtCWVy cm9yID0gc2NzaV9hZGRfaG9zdChob3N0LCBOVUxMKTsNCj4gLQlpZiAoZXJyb3IpDQo+IC0JCWdv dG8gZnJlZV9ob3N0Ow0KPiAtCXNjc2lfc2Nhbl9ob3N0KGhvc3QpOw0KPiAtCXJldHVybiAwOw0K PiAtDQo+IC0gZnJlZV9ob3N0Og0KPiAtCXNjc2lfaG9zdF9wdXQoaG9zdCk7DQo+IC0JcmV0dXJu IGVycm9yOw0KPiAtfQ0KPiAtZGV2aWNlX2luaXRjYWxsKHNpbXNjc2lfaW5pdCk7DQo+IGRpZmYg LS1naXQgYS9hcmNoL2lhNjQvaHAvc2ltL3NpbXNlcmlhbC5jIGIvYXJjaC9pYTY0L2hwL3NpbS9z aW1zZXJpYWwuYw0KPiBkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQNCj4gaW5kZXggMWEzMzhlNTQx MzM0Li4wMDAwMDAwMDAwMDANCj4gLS0tIGEvYXJjaC9pYTY0L2hwL3NpbS9zaW1zZXJpYWwuYw0K PiArKysgL2Rldi9udWxsDQo+IEBAIC0xLDUyMSArMCwwIEBADQo+IC0vLyBTUERYLUxpY2Vuc2Ut SWRlbnRpZmllcjogR1BMLTIuMA0KPiAtLyoNCj4gLSAqIFNpbXVsYXRlZCBTZXJpYWwgRHJpdmVy IChmYWtlIHNlcmlhbCkNCj4gLSAqDQo+IC0gKiBUaGlzIGRyaXZlciBpcyBtb3N0bHkgdXNlZCBm b3IgYnJpbmd1cCBwdXJwb3NlcyBhbmQgd2lsbCBnbyBhd2F5Lg0KPiAtICogSXQgaGFzIGEgc3Ry b25nIGRlcGVuZGVuY3kgb24gdGhlIHN5c3RlbSBjb25zb2xlLiBBbGwgb3V0cHV0cw0KPiAtICog YXJlIHJlcm91dGVkIHRvIHRoZSBzYW1lIGZhY2lsaXR5IGFzIHRoZSBvbmUgdXNlZCBieSBwcmlu dGsgd2hpY2gsIGluIG91cg0KPiAtICogY2FzZSBtZWFucyBzeXNfc2ltLmMgY29uc29sZSAoZ29l cyB2aWEgdGhlIHNpbXVsYXRvcikuDQo+IC0gKg0KPiAtICogQ29weXJpZ2h0IChDKSAxOTk5LTIw MDAsIDIwMDItMjAwMyBIZXdsZXR0LVBhY2thcmQgQ28NCj4gLSAqCVN0ZXBoYW5lIEVyYW5pYW4g PGVyYW5pYW5AaHBsLmhwLmNvbT4NCj4gLSAqCURhdmlkIE1vc2Jlcmdlci1UYW5nIDxkYXZpZG1A aHBsLmhwLmNvbT4NCj4gLSAqLw0KPiAtDQo+IC0jaW5jbHVkZSA8bGludXgvaW5pdC5oPg0KPiAt I2luY2x1ZGUgPGxpbnV4L2Vycm5vLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvc2NoZWQuaD4NCj4g LSNpbmNsdWRlIDxsaW51eC9zY2hlZC9kZWJ1Zy5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3R0eS5o Pg0KPiAtI2luY2x1ZGUgPGxpbnV4L3R0eV9mbGlwLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvbWFq b3IuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9mY250bC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L21t Lmg+DQo+IC0jaW5jbHVkZSA8bGludXgvc2VxX2ZpbGUuaD4NCj4gLSNpbmNsdWRlIDxsaW51eC9z bGFiLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvY2FwYWJpbGl0eS5oPg0KPiAtI2luY2x1ZGUgPGxp bnV4L2NpcmNfYnVmLmg+DQo+IC0jaW5jbHVkZSA8bGludXgvY29uc29sZS5oPg0KPiAtI2luY2x1 ZGUgPGxpbnV4L2lycS5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L21vZHVsZS5oPg0KPiAtI2luY2x1 ZGUgPGxpbnV4L3NlcmlhbC5oPg0KPiAtI2luY2x1ZGUgPGxpbnV4L3N5c3JxLmg+DQo+IC0jaW5j bHVkZSA8bGludXgvdWFjY2Vzcy5oPg0KPiAtDQo+IC0jaW5jbHVkZSA8YXNtL2hwc2ltLmg+DQo+ IC0NCj4gLSNpbmNsdWRlICJocHNpbV9zc2MuaCINCj4gLQ0KPiAtI3VuZGVmIFNJTVNFUklBTF9E RUJVRwkvKiBkZWZpbmUgdGhpcyB0byBnZXQgc29tZSBkZWJ1ZyBpbmZvcm1hdGlvbiAqLw0KPiAt DQo+IC0jZGVmaW5lIEtFWUJPQVJEX0lOVFIJMwkvKiBtdXN0IG1hdGNoIHdpdGggc2ltdWxhdG9y ISAqLw0KPiAtDQo+IC0jZGVmaW5lIE5SX1BPUlRTCTEJLyogb25seSBvbmUgcG9ydCBmb3Igbm93 ICovDQo+IC0NCj4gLXN0cnVjdCBzZXJpYWxfc3RhdGUgew0KPiAtCXN0cnVjdCB0dHlfcG9ydCBw b3J0Ow0KPiAtCXN0cnVjdCBjaXJjX2J1ZiB4bWl0Ow0KPiAtCWludCBpcnE7DQo+IC0JaW50IHhf Y2hhcjsNCj4gLX07DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3Qgc2VyaWFsX3N0YXRlIHJzX3RhYmxl W05SX1BPUlRTXTsNCj4gLQ0KPiAtc3RydWN0IHR0eV9kcml2ZXIgKmhwX3NpbXNlcmlhbF9kcml2 ZXI7DQo+IC0NCj4gLXN0YXRpYyBzdHJ1Y3QgY29uc29sZSAqY29uc29sZTsNCj4gLQ0KPiAtc3Rh dGljIHZvaWQgcmVjZWl2ZV9jaGFycyhzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpDQo+IC17DQo+IC0J dW5zaWduZWQgY2hhciBjaDsNCj4gLQlzdGF0aWMgdW5zaWduZWQgY2hhciBzZWVuX2VzYyA9IDA7 DQo+IC0NCj4gLQl3aGlsZSAoIChjaCA9IGlhNjRfc3NjKDAsIDAsIDAsIDAsIFNTQ19HRVRDSEFS KSkgKSB7DQo+IC0JCWlmIChjaCA9PSAyNyAmJiBzZWVuX2VzYyA9PSAwKSB7DQo+IC0JCQlzZWVu X2VzYyA9IDE7DQo+IC0JCQljb250aW51ZTsNCj4gLQkJfSBlbHNlIGlmIChzZWVuX2VzYyA9PSAx ICYmIGNoID09ICdPJykgew0KPiAtCQkJc2Vlbl9lc2MgPSAyOw0KPiAtCQkJY29udGludWU7DQo+ IC0JCX0gZWxzZSBpZiAoc2Vlbl9lc2MgPT0gMikgew0KPiAtCQkJaWYgKGNoID09ICdQJykgLyog RjEgKi8NCj4gLQkJCQlzaG93X3N0YXRlKCk7DQo+IC0jaWZkZWYgQ09ORklHX01BR0lDX1NZU1JR DQo+IC0JCQlpZiAoY2ggPT0gJ1MnKSB7IC8qIEY0ICovDQo+IC0JCQkJZG8gew0KPiAtCQkJCQlj aCA9IGlhNjRfc3NjKDAsIDAsIDAsIDAsIFNTQ19HRVRDSEFSKTsNCj4gLQkJCQl9IHdoaWxlICgh Y2gpOw0KPiAtCQkJCWhhbmRsZV9zeXNycShjaCk7DQo+IC0JCQl9DQo+IC0jZW5kaWYNCj4gLQkJ CXNlZW5fZXNjID0gMDsNCj4gLQkJCWNvbnRpbnVlOw0KPiAtCQl9DQo+IC0JCXNlZW5fZXNjID0g MDsNCj4gLQ0KPiAtCQlpZiAodHR5X2luc2VydF9mbGlwX2NoYXIocG9ydCwgY2gsIFRUWV9OT1JN QUwpID09IDApDQo+IC0JCQlicmVhazsNCj4gLQl9DQo+IC0JdHR5X2ZsaXBfYnVmZmVyX3B1c2go cG9ydCk7DQo+IC19DQo+IC0NCj4gLS8qDQo+IC0gKiBUaGlzIGlzIHRoZSBzZXJpYWwgZHJpdmVy J3MgaW50ZXJydXB0IHJvdXRpbmUgZm9yIGEgc2luZ2xlIHBvcnQNCj4gLSAqLw0KPiAtc3RhdGlj IGlycXJldHVybl90IHJzX2ludGVycnVwdF9zaW5nbGUoaW50IGlycSwgdm9pZCAqZGV2X2lkKQ0K PiAtew0KPiAtCXN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8gPSBkZXZfaWQ7DQo+IC0NCj4gLQly ZWNlaXZlX2NoYXJzKCZpbmZvLT5wb3J0KTsNCj4gLQ0KPiAtCXJldHVybiBJUlFfSEFORExFRDsN Cj4gLX0NCj4gLQ0KPiAtLyoNCj4gLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLSAqIEhlcmUgZW5kcyB0aGUg c2VyaWFsIGludGVycnVwdCByb3V0aW5lcy4NCj4gLSAqIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLSAqLw0KPiAt DQo+IC1zdGF0aWMgaW50IHJzX3B1dF9jaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHVuc2ln bmVkIGNoYXIgY2gpDQo+IC17DQo+IC0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbyA9IHR0eS0+ ZHJpdmVyX2RhdGE7DQo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gLQ0KPiAtCWlmICghaW5m by0+eG1pdC5idWYpDQo+IC0JCXJldHVybiAwOw0KPiAtDQo+IC0JbG9jYWxfaXJxX3NhdmUoZmxh Z3MpOw0KPiAtCWlmIChDSVJDX1NQQUNFKGluZm8tPnhtaXQuaGVhZCwgaW5mby0+eG1pdC50YWls LCBTRVJJQUxfWE1JVF9TSVpFKSA9PSAwKSB7DQo+IC0JCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdz KTsNCj4gLQkJcmV0dXJuIDA7DQo+IC0JfQ0KPiAtCWluZm8tPnhtaXQuYnVmW2luZm8tPnhtaXQu aGVhZF0gPSBjaDsNCj4gLQlpbmZvLT54bWl0LmhlYWQgPSAoaW5mby0+eG1pdC5oZWFkICsgMSkg JiAoU0VSSUFMX1hNSVRfU0laRS0xKTsNCj4gLQlsb2NhbF9pcnFfcmVzdG9yZShmbGFncyk7DQo+ IC0JcmV0dXJuIDE7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHRyYW5zbWl0X2NoYXJzKHN0 cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8sDQo+IC0JCWlu dCAqaW50cl9kb25lKQ0KPiAtew0KPiAtCWludCBjb3VudDsNCj4gLQl1bnNpZ25lZCBsb25nIGZs YWdzOw0KPiAtDQo+IC0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOw0KPiAtDQo+IC0JaWYgKGluZm8t PnhfY2hhcikgew0KPiAtCQljaGFyIGMgPSBpbmZvLT54X2NoYXI7DQo+IC0NCj4gLQkJY29uc29s ZS0+d3JpdGUoY29uc29sZSwgJmMsIDEpOw0KPiAtDQo+IC0JCWluZm8tPnhfY2hhciA9IDA7DQo+ IC0NCj4gLQkJZ290byBvdXQ7DQo+IC0JfQ0KPiAtDQo+IC0JaWYgKGluZm8tPnhtaXQuaGVhZCA9 PSBpbmZvLT54bWl0LnRhaWwgfHwgdHR5LT5zdG9wcGVkKSB7DQo+IC0jaWZkZWYgU0lNU0VSSUFM X0RFQlVHDQo+IC0JCXByaW50aygidHJhbnNtaXRfY2hhcnM6IGhlYWQ9JWQsIHRhaWw9JWQsIHN0 b3BwZWQ9JWRcbiIsDQo+IC0JCSAgICAgICBpbmZvLT54bWl0LmhlYWQsIGluZm8tPnhtaXQudGFp bCwgdHR5LT5zdG9wcGVkKTsNCj4gLSNlbmRpZg0KPiAtCQlnb3RvIG91dDsNCj4gLQl9DQo+IC0J LyoNCj4gLQkgKiBXZSByZW1vdmVkIHRoZSBsb29wIGFuZCB0cnkgdG8gZG8gaXQgaW4gdG8gY2h1 bmtzLiBXZSBuZWVkDQo+IC0JICogMiBvcGVyYXRpb25zIG1heGltdW0gYmVjYXVzZSBpdCdzIGEg cmluZyBidWZmZXIuDQo+IC0JICoNCj4gLQkgKiBGaXJzdCBmcm9tIGN1cnJlbnQgdG8gdGFpbCBp ZiBwb3NzaWJsZS4NCj4gLQkgKiBUaGVuIGZyb20gdGhlIGJlZ2lubmluZyBvZiB0aGUgYnVmZmVy IHVudGlsIG5lY2Vzc2FyeQ0KPiAtCSAqLw0KPiAtDQo+IC0JY291bnQgPSBtaW4oQ0lSQ19DTlQo aW5mby0+eG1pdC5oZWFkLCBpbmZvLT54bWl0LnRhaWwsIFNFUklBTF9YTUlUX1NJWkUpLA0KPiAt CQkgICAgU0VSSUFMX1hNSVRfU0laRSAtIGluZm8tPnhtaXQudGFpbCk7DQo+IC0JY29uc29sZS0+ d3JpdGUoY29uc29sZSwgaW5mby0+eG1pdC5idWYraW5mby0+eG1pdC50YWlsLCBjb3VudCk7DQo+ IC0NCj4gLQlpbmZvLT54bWl0LnRhaWwgPSAoaW5mby0+eG1pdC50YWlsK2NvdW50KSAmIChTRVJJ QUxfWE1JVF9TSVpFLTEpOw0KPiAtDQo+IC0JLyoNCj4gLQkgKiBXZSBoYXZlIG1vcmUgYXQgdGhl IGJlZ2lubmluZyBvZiB0aGUgYnVmZmVyDQo+IC0JICovDQo+IC0JY291bnQgPSBDSVJDX0NOVChp bmZvLT54bWl0LmhlYWQsIGluZm8tPnhtaXQudGFpbCwgU0VSSUFMX1hNSVRfU0laRSk7DQo+IC0J aWYgKGNvdW50KSB7DQo+IC0JCWNvbnNvbGUtPndyaXRlKGNvbnNvbGUsIGluZm8tPnhtaXQuYnVm LCBjb3VudCk7DQo+IC0JCWluZm8tPnhtaXQudGFpbCArPSBjb3VudDsNCj4gLQl9DQo+IC1vdXQ6 DQo+IC0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMgdm9p ZCByc19mbHVzaF9jaGFycyhzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5KQ0KPiAtew0KPiAtCXN0cnVj dCBzZXJpYWxfc3RhdGUgKmluZm8gPSB0dHktPmRyaXZlcl9kYXRhOw0KPiAtDQo+IC0JaWYgKGlu Zm8tPnhtaXQuaGVhZCA9PSBpbmZvLT54bWl0LnRhaWwgfHwgdHR5LT5zdG9wcGVkIHx8DQo+IC0J CQkhaW5mby0+eG1pdC5idWYpDQo+IC0JCXJldHVybjsNCj4gLQ0KPiAtCXRyYW5zbWl0X2NoYXJz KHR0eSwgaW5mbywgTlVMTCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcnNfd3JpdGUoc3Ry dWN0IHR0eV9zdHJ1Y3QgKiB0dHksDQo+IC0JCSAgICBjb25zdCB1bnNpZ25lZCBjaGFyICpidWYs IGludCBjb3VudCkNCj4gLXsNCj4gLQlzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvID0gdHR5LT5k cml2ZXJfZGF0YTsNCj4gLQlpbnQJYywgcmV0ID0gMDsNCj4gLQl1bnNpZ25lZCBsb25nIGZsYWdz Ow0KPiAtDQo+IC0JaWYgKCFpbmZvLT54bWl0LmJ1ZikNCj4gLQkJcmV0dXJuIDA7DQo+IC0NCj4g LQlsb2NhbF9pcnFfc2F2ZShmbGFncyk7DQo+IC0Jd2hpbGUgKDEpIHsNCj4gLQkJYyA9IENJUkNf U1BBQ0VfVE9fRU5EKGluZm8tPnhtaXQuaGVhZCwgaW5mby0+eG1pdC50YWlsLCBTRVJJQUxfWE1J VF9TSVpFKTsNCj4gLQkJaWYgKGNvdW50IDwgYykNCj4gLQkJCWMgPSBjb3VudDsNCj4gLQkJaWYg KGMgPD0gMCkgew0KPiAtCQkJYnJlYWs7DQo+IC0JCX0NCj4gLQkJbWVtY3B5KGluZm8tPnhtaXQu YnVmICsgaW5mby0+eG1pdC5oZWFkLCBidWYsIGMpOw0KPiAtCQlpbmZvLT54bWl0LmhlYWQgPSAo KGluZm8tPnhtaXQuaGVhZCArIGMpICYNCj4gLQkJCQkgICAoU0VSSUFMX1hNSVRfU0laRS0xKSk7 DQo+IC0JCWJ1ZiArPSBjOw0KPiAtCQljb3VudCAtPSBjOw0KPiAtCQlyZXQgKz0gYzsNCj4gLQl9 DQo+IC0JbG9jYWxfaXJxX3Jlc3RvcmUoZmxhZ3MpOw0KPiAtCS8qDQo+IC0JICogSGV5LCB3ZSB0 cmFuc21pdCBkaXJlY3RseSBmcm9tIGhlcmUgaW4gb3VyIGNhc2UNCj4gLQkgKi8NCj4gLQlpZiAo Q0lSQ19DTlQoaW5mby0+eG1pdC5oZWFkLCBpbmZvLT54bWl0LnRhaWwsIFNFUklBTF9YTUlUX1NJ WkUpICYmDQo+IC0JCQkhdHR5LT5zdG9wcGVkKQ0KPiAtCQl0cmFuc21pdF9jaGFycyh0dHksIGlu Zm8sIE5VTEwpOw0KPiAtDQo+IC0JcmV0dXJuIHJldDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGlu dCByc193cml0ZV9yb29tKHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpDQo+IC17DQo+IC0Jc3RydWN0 IHNlcmlhbF9zdGF0ZSAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7DQo+IC0NCj4gLQlyZXR1cm4g Q0lSQ19TUEFDRShpbmZvLT54bWl0LmhlYWQsIGluZm8tPnhtaXQudGFpbCwgU0VSSUFMX1hNSVRf U0laRSk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQgcnNfY2hhcnNfaW5fYnVmZmVyKHN0cnVj dCB0dHlfc3RydWN0ICp0dHkpDQo+IC17DQo+IC0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbyA9 IHR0eS0+ZHJpdmVyX2RhdGE7DQo+IC0NCj4gLQlyZXR1cm4gQ0lSQ19DTlQoaW5mby0+eG1pdC5o ZWFkLCBpbmZvLT54bWl0LnRhaWwsIFNFUklBTF9YTUlUX1NJWkUpOw0KPiAtfQ0KPiAtDQo+IC1z dGF0aWMgdm9pZCByc19mbHVzaF9idWZmZXIoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSkNCj4gLXsN Cj4gLQlzdHJ1Y3Qgc2VyaWFsX3N0YXRlICppbmZvID0gdHR5LT5kcml2ZXJfZGF0YTsNCj4gLQl1 bnNpZ25lZCBsb25nIGZsYWdzOw0KPiAtDQo+IC0JbG9jYWxfaXJxX3NhdmUoZmxhZ3MpOw0KPiAt CWluZm8tPnhtaXQuaGVhZCA9IGluZm8tPnhtaXQudGFpbCA9IDA7DQo+IC0JbG9jYWxfaXJxX3Jl c3RvcmUoZmxhZ3MpOw0KPiAtDQo+IC0JdHR5X3dha2V1cCh0dHkpOw0KPiAtfQ0KPiAtDQo+IC0v Kg0KPiAtICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIHRvIHNlbmQgYSBoaWdoLXByaW9yaXR5IFhP Ti9YT0ZGIGNoYXJhY3RlciB0bw0KPiAtICogdGhlIGRldmljZQ0KPiAtICovDQo+IC1zdGF0aWMg dm9pZCByc19zZW5kX3hjaGFyKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIGNoYXIgY2gpDQo+IC17 DQo+IC0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbyA9IHR0eS0+ZHJpdmVyX2RhdGE7DQo+IC0N Cj4gLQlpbmZvLT54X2NoYXIgPSBjaDsNCj4gLQlpZiAoY2gpIHsNCj4gLQkJLyoNCj4gLQkJICog SSBndWVzcyB3ZSBjb3VsZCBjYWxsIGNvbnNvbGUtPndyaXRlKCkgZGlyZWN0bHkgYnV0DQo+IC0J CSAqIGxldCdzIGRvIHRoYXQgZm9yIG5vdy4NCj4gLQkJICovDQo+IC0JCXRyYW5zbWl0X2NoYXJz KHR0eSwgaW5mbywgTlVMTCk7DQo+IC0JfQ0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQo+ IC0gKiByc190aHJvdHRsZSgpDQo+IC0gKg0KPiAtICogVGhpcyByb3V0aW5lIGlzIGNhbGxlZCBi eSB0aGUgdXBwZXItbGF5ZXIgdHR5IGxheWVyIHRvIHNpZ25hbCB0aGF0DQo+IC0gKiBpbmNvbWlu ZyBjaGFyYWN0ZXJzIHNob3VsZCBiZSB0aHJvdHRsZWQuDQo+IC0gKiAtLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCj4gLSAqLw0KPiAt c3RhdGljIHZvaWQgcnNfdGhyb3R0bGUoc3RydWN0IHR0eV9zdHJ1Y3QgKiB0dHkpDQo+IC17DQo+ IC0JaWYgKElfSVhPRkYodHR5KSkNCj4gLQkJcnNfc2VuZF94Y2hhcih0dHksIFNUT1BfQ0hBUih0 dHkpKTsNCj4gLQ0KPiAtCXByaW50ayhLRVJOX0lORk8gInNpbXJzX3Rocm90dGxlIGNhbGxlZFxu Iik7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHJzX3VudGhyb3R0bGUoc3RydWN0IHR0eV9z dHJ1Y3QgKiB0dHkpDQo+IC17DQo+IC0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAqaW5mbyA9IHR0eS0+ ZHJpdmVyX2RhdGE7DQo+IC0NCj4gLQlpZiAoSV9JWE9GRih0dHkpKSB7DQo+IC0JCWlmIChpbmZv LT54X2NoYXIpDQo+IC0JCQlpbmZvLT54X2NoYXIgPSAwOw0KPiAtCQllbHNlDQo+IC0JCQlyc19z ZW5kX3hjaGFyKHR0eSwgU1RBUlRfQ0hBUih0dHkpKTsNCj4gLQl9DQo+IC0JcHJpbnRrKEtFUk5f SU5GTyAic2ltcnNfdW50aHJvdHRsZSBjYWxsZWRcbiIpOw0KPiAtfQ0KPiAtDQo+IC1zdGF0aWMg aW50IHJzX3NldHNlcmlhbChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCBzdHJ1Y3Qgc2VyaWFsX3N0 cnVjdCAqc3MpDQo+IC17DQo+IC0JcmV0dXJuIDA7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyBpbnQg cnNfZ2V0c2VyaWFsKHN0cnVjdCB0dHlfc3RydWN0ICp0dHksIHN0cnVjdCBzZXJpYWxfc3RydWN0 ICpzcykNCj4gLXsNCj4gLQlyZXR1cm4gMDsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCByc19p b2N0bChzdHJ1Y3QgdHR5X3N0cnVjdCAqdHR5LCB1bnNpZ25lZCBpbnQgY21kLCB1bnNpZ25lZCBs b25nIGFyZykNCj4gLXsNCj4gLQlpZiAoKGNtZCAhPSBUSU9DU0VSQ09ORklHKSAmJiAoY21kICE9 IFRJT0NNSVdBSVQpKSB7DQo+IC0JCWlmICh0dHlfaW9fZXJyb3IodHR5KSkNCj4gLQkJICAgIHJl dHVybiAtRUlPOw0KPiAtCX0NCj4gLQ0KPiAtCXN3aXRjaCAoY21kKSB7DQo+IC0JY2FzZSBUSU9D TUlXQUlUOg0KPiAtCQlyZXR1cm4gMDsNCj4gLQljYXNlIFRJT0NTRVJDT05GSUc6DQo+IC0JY2Fz ZSBUSU9DU0VSR0VUTFNSOiAvKiBHZXQgbGluZSBzdGF0dXMgcmVnaXN0ZXIgKi8NCj4gLQkJcmV0 dXJuIC1FSU5WQUw7DQo+IC0JfQ0KPiAtCXJldHVybiAtRU5PSU9DVExDTUQ7DQo+IC19DQo+IC0N Cj4gLS8qDQo+IC0gKiBUaGlzIHJvdXRpbmUgd2lsbCBzaHV0ZG93biBhIHNlcmlhbCBwb3J0OyBp bnRlcnJ1cHRzIGFyZSBkaXNhYmxlZCwgYW5kDQo+IC0gKiBEVFIgaXMgZHJvcHBlZCBpZiB0aGUg aGFuZ3VwIG9uIGNsb3NlIHRlcm1pbyBmbGFnIGlzIG9uLg0KPiAtICovDQo+IC1zdGF0aWMgdm9p ZCBzaHV0ZG93bihzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQpDQo+IC17DQo+IC0Jc3RydWN0IHNlcmlh bF9zdGF0ZSAqaW5mbyA9IGNvbnRhaW5lcl9vZihwb3J0LCBzdHJ1Y3Qgc2VyaWFsX3N0YXRlLA0K PiAtCQkJcG9ydCk7DQo+IC0JdW5zaWduZWQgbG9uZyBmbGFnczsNCj4gLQ0KPiAtCWxvY2FsX2ly cV9zYXZlKGZsYWdzKTsNCj4gLQlpZiAoaW5mby0+aXJxKQ0KPiAtCQlmcmVlX2lycShpbmZvLT5p cnEsIGluZm8pOw0KPiAtDQo+IC0JaWYgKGluZm8tPnhtaXQuYnVmKSB7DQo+IC0JCWZyZWVfcGFn ZSgodW5zaWduZWQgbG9uZykgaW5mby0+eG1pdC5idWYpOw0KPiAtCQlpbmZvLT54bWl0LmJ1ZiA9 IE5VTEw7DQo+IC0JfQ0KPiAtCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCj4gLX0NCj4gLQ0K PiAtc3RhdGljIHZvaWQgcnNfY2xvc2Uoc3RydWN0IHR0eV9zdHJ1Y3QgKnR0eSwgc3RydWN0IGZp bGUgKiBmaWxwKQ0KPiAtew0KPiAtCXN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8gPSB0dHktPmRy aXZlcl9kYXRhOw0KPiAtDQo+IC0JdHR5X3BvcnRfY2xvc2UoJmluZm8tPnBvcnQsIHR0eSwgZmls cCk7DQo+IC19DQo+IC0NCj4gLXN0YXRpYyB2b2lkIHJzX2hhbmd1cChzdHJ1Y3QgdHR5X3N0cnVj dCAqdHR5KQ0KPiAtew0KPiAtCXN0cnVjdCBzZXJpYWxfc3RhdGUgKmluZm8gPSB0dHktPmRyaXZl cl9kYXRhOw0KPiAtDQo+IC0JcnNfZmx1c2hfYnVmZmVyKHR0eSk7DQo+IC0JdHR5X3BvcnRfaGFu Z3VwKCZpbmZvLT5wb3J0KTsNCj4gLX0NCj4gLQ0KPiAtc3RhdGljIGludCBhY3RpdmF0ZShzdHJ1 Y3QgdHR5X3BvcnQgKnBvcnQsIHN0cnVjdCB0dHlfc3RydWN0ICp0dHkpDQo+IC17DQo+IC0Jc3Ry dWN0IHNlcmlhbF9zdGF0ZSAqc3RhdGUgPSBjb250YWluZXJfb2YocG9ydCwgc3RydWN0IHNlcmlh bF9zdGF0ZSwNCj4gLQkJCXBvcnQpOw0KPiAtCXVuc2lnbmVkIGxvbmcgZmxhZ3MsIHBhZ2U7DQo+ IC0JaW50IHJldHZhbCA9IDA7DQo+IC0NCj4gLQlwYWdlID0gZ2V0X3plcm9lZF9wYWdlKEdGUF9L RVJORUwpOw0KPiAtCWlmICghcGFnZSkNCj4gLQkJcmV0dXJuIC1FTk9NRU07DQo+IC0NCj4gLQls b2NhbF9pcnFfc2F2ZShmbGFncyk7DQo+IC0NCj4gLQlpZiAoc3RhdGUtPnhtaXQuYnVmKQ0KPiAt CQlmcmVlX3BhZ2UocGFnZSk7DQo+IC0JZWxzZQ0KPiAtCQlzdGF0ZS0+eG1pdC5idWYgPSAodW5z aWduZWQgY2hhciAqKSBwYWdlOw0KPiAtDQo+IC0JaWYgKHN0YXRlLT5pcnEpIHsNCj4gLQkJcmV0 dmFsID0gcmVxdWVzdF9pcnEoc3RhdGUtPmlycSwgcnNfaW50ZXJydXB0X3NpbmdsZSwgMCwNCj4g LQkJCQkic2ltc2VyaWFsIiwgc3RhdGUpOw0KPiAtCQlpZiAocmV0dmFsKQ0KPiAtCQkJZ290byBl cnJvdXQ7DQo+IC0JfQ0KPiAtDQo+IC0Jc3RhdGUtPnhtaXQuaGVhZCA9IHN0YXRlLT54bWl0LnRh aWwgPSAwOw0KPiAtZXJyb3V0Og0KPiAtCWxvY2FsX2lycV9yZXN0b3JlKGZsYWdzKTsNCj4gLQly ZXR1cm4gcmV0dmFsOw0KPiAtfQ0KPiAtDQo+IC0NCj4gLS8qDQo+IC0gKiBUaGlzIHJvdXRpbmUg aXMgY2FsbGVkIHdoZW5ldmVyIGEgc2VyaWFsIHBvcnQgaXMgb3BlbmVkLiAgSXQNCj4gLSAqIGVu YWJsZXMgaW50ZXJydXB0cyBmb3IgYSBzZXJpYWwgcG9ydCwgbGlua2luZyBpbiBpdHMgYXN5bmMg c3RydWN0dXJlIGludG8NCj4gLSAqIHRoZSBJUlEgY2hhaW4uICAgSXQgYWxzbyBwZXJmb3JtcyB0 aGUgc2VyaWFsLXNwZWNpZmljDQo+IC0gKiBpbml0aWFsaXphdGlvbiBmb3IgdGhlIHR0eSBzdHJ1 Y3R1cmUuDQo+IC0gKi8NCj4gLXN0YXRpYyBpbnQgcnNfb3BlbihzdHJ1Y3QgdHR5X3N0cnVjdCAq dHR5LCBzdHJ1Y3QgZmlsZSAqIGZpbHApDQo+IC17DQo+IC0Jc3RydWN0IHNlcmlhbF9zdGF0ZSAq aW5mbyA9IHJzX3RhYmxlICsgdHR5LT5pbmRleDsNCj4gLQlzdHJ1Y3QgdHR5X3BvcnQgKnBvcnQg PSAmaW5mby0+cG9ydDsNCj4gLQ0KPiAtCXR0eS0+ZHJpdmVyX2RhdGEgPSBpbmZvOw0KPiAtCXBv cnQtPmxvd19sYXRlbmN5ID0gKHBvcnQtPmZsYWdzICYgQVNZTkNfTE9XX0xBVEVOQ1kpID8gMSA6 IDA7DQo+IC0NCj4gLQkvKg0KPiAtCSAqIGZpZ3VyZSBvdXQgd2hpY2ggY29uc29sZSB0byB1c2Ug KHNob3VsZCBiZSBvbmUgYWxyZWFkeSkNCj4gLQkgKi8NCj4gLQljb25zb2xlID0gY29uc29sZV9k cml2ZXJzOw0KPiAtCXdoaWxlIChjb25zb2xlKSB7DQo+IC0JCWlmICgoY29uc29sZS0+ZmxhZ3Mg JiBDT05fRU5BQkxFRCkgJiYgY29uc29sZS0+d3JpdGUpIGJyZWFrOw0KPiAtCQljb25zb2xlID0g Y29uc29sZS0+bmV4dDsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4gdHR5X3BvcnRfb3Blbihwb3J0 LCB0dHksIGZpbHApOw0KPiAtfQ0KPiAtDQo+IC0vKg0KPiAtICogL3Byb2MgZnMgcm91dGluZXMu Li4uDQo+IC0gKi8NCj4gLQ0KPiAtc3RhdGljIGludCByc19wcm9jX3Nob3coc3RydWN0IHNlcV9m aWxlICptLCB2b2lkICp2KQ0KPiAtew0KPiAtCWludCBpOw0KPiAtDQo+IC0Jc2VxX3ByaW50Ziht LCAic2ltc2VyaW5mbzoxLjBcbiIpOw0KPiAtCWZvciAoaSA9IDA7IGkgPCBOUl9QT1JUUzsgaSsr KQ0KPiAtCQlzZXFfcHJpbnRmKG0sICIlZDogdWFydDoxNjU1MCBwb3J0OjNGOCBpcnE6JWRcbiIs DQo+IC0JCSAgICAgICBpLCByc190YWJsZVtpXS5pcnEpOw0KPiAtCXJldHVybiAwOw0KPiAtfQ0K PiAtDQo+IC1zdGF0aWMgY29uc3Qgc3RydWN0IHR0eV9vcGVyYXRpb25zIGhwX29wcyA9IHsNCj4g LQkub3BlbiA9IHJzX29wZW4sDQo+IC0JLmNsb3NlID0gcnNfY2xvc2UsDQo+IC0JLndyaXRlID0g cnNfd3JpdGUsDQo+IC0JLnB1dF9jaGFyID0gcnNfcHV0X2NoYXIsDQo+IC0JLmZsdXNoX2NoYXJz ID0gcnNfZmx1c2hfY2hhcnMsDQo+IC0JLndyaXRlX3Jvb20gPSByc193cml0ZV9yb29tLA0KPiAt CS5jaGFyc19pbl9idWZmZXIgPSByc19jaGFyc19pbl9idWZmZXIsDQo+IC0JLmZsdXNoX2J1ZmZl ciA9IHJzX2ZsdXNoX2J1ZmZlciwNCj4gLQkuaW9jdGwgPSByc19pb2N0bCwNCj4gLQkudGhyb3R0 bGUgPSByc190aHJvdHRsZSwNCj4gLQkudW50aHJvdHRsZSA9IHJzX3VudGhyb3R0bGUsDQo+IC0J LnNlbmRfeGNoYXIgPSByc19zZW5kX3hjaGFyLA0KPiAtCS5zZXRfc2VyaWFsID0gcnNfc2V0c2Vy aWFsLA0KPiAtCS5nZXRfc2VyaWFsID0gcnNfZ2V0c2VyaWFsLA0KPiAtCS5oYW5ndXAgPSByc19o YW5ndXAsDQo+IC0JLnByb2Nfc2hvdyA9IHJzX3Byb2Nfc2hvdywNCj4gLX07DQo+IC0NCj4gLXN0 YXRpYyBjb25zdCBzdHJ1Y3QgdHR5X3BvcnRfb3BlcmF0aW9ucyBocF9wb3J0X29wcyA9IHsNCj4g LQkuYWN0aXZhdGUgPSBhY3RpdmF0ZSwNCj4gLQkuc2h1dGRvd24gPSBzaHV0ZG93biwNCj4gLX07 DQo+IC0NCj4gLXN0YXRpYyBpbnQgX19pbml0IHNpbXJzX2luaXQodm9pZCkNCj4gLXsNCj4gLQlz dHJ1Y3Qgc2VyaWFsX3N0YXRlICpzdGF0ZTsNCj4gLQlpbnQgcmV0dmFsOw0KPiAtDQo+IC0JaWYg KCFpYTY0X3BsYXRmb3JtX2lzKCJocHNpbSIpKQ0KPiAtCQlyZXR1cm4gLUVOT0RFVjsNCj4gLQ0K PiAtCWhwX3NpbXNlcmlhbF9kcml2ZXIgPSBhbGxvY190dHlfZHJpdmVyKE5SX1BPUlRTKTsNCj4g LQlpZiAoIWhwX3NpbXNlcmlhbF9kcml2ZXIpDQo+IC0JCXJldHVybiAtRU5PTUVNOw0KPiAtDQo+ IC0JcHJpbnRrKEtFUk5fSU5GTyAiU2ltU2VyaWFsIGRyaXZlciB3aXRoIG5vIHNlcmlhbCBvcHRp b25zIGVuYWJsZWRcbiIpOw0KPiAtDQo+IC0JLyogSW5pdGlhbGl6ZSB0aGUgdHR5X2RyaXZlciBz dHJ1Y3R1cmUgKi8NCj4gLQ0KPiAtCWhwX3NpbXNlcmlhbF9kcml2ZXItPmRyaXZlcl9uYW1lID0g InNpbXNlcmlhbCI7DQo+IC0JaHBfc2ltc2VyaWFsX2RyaXZlci0+bmFtZSA9ICJ0dHlTIjsNCj4g LQlocF9zaW1zZXJpYWxfZHJpdmVyLT5tYWpvciA9IFRUWV9NQUpPUjsNCj4gLQlocF9zaW1zZXJp YWxfZHJpdmVyLT5taW5vcl9zdGFydCA9IDY0Ow0KPiAtCWhwX3NpbXNlcmlhbF9kcml2ZXItPnR5 cGUgPSBUVFlfRFJJVkVSX1RZUEVfU0VSSUFMOw0KPiAtCWhwX3NpbXNlcmlhbF9kcml2ZXItPnN1 YnR5cGUgPSBTRVJJQUxfVFlQRV9OT1JNQUw7DQo+IC0JaHBfc2ltc2VyaWFsX2RyaXZlci0+aW5p dF90ZXJtaW9zID0gdHR5X3N0ZF90ZXJtaW9zOw0KPiAtCWhwX3NpbXNlcmlhbF9kcml2ZXItPmlu aXRfdGVybWlvcy5jX2NmbGFnID0NCj4gLQkJQjk2MDAgfCBDUzggfCBDUkVBRCB8IEhVUENMIHwg Q0xPQ0FMOw0KPiAtCWhwX3NpbXNlcmlhbF9kcml2ZXItPmZsYWdzID0gVFRZX0RSSVZFUl9SRUFM X1JBVzsNCj4gLQl0dHlfc2V0X29wZXJhdGlvbnMoaHBfc2ltc2VyaWFsX2RyaXZlciwgJmhwX29w cyk7DQo+IC0NCj4gLQlzdGF0ZSA9IHJzX3RhYmxlOw0KPiAtCXR0eV9wb3J0X2luaXQoJnN0YXRl LT5wb3J0KTsNCj4gLQlzdGF0ZS0+cG9ydC5vcHMgPSAmaHBfcG9ydF9vcHM7DQo+IC0Jc3RhdGUt PnBvcnQuY2xvc2VfZGVsYXkgPSAwOyAvKiBYWFggcmVhbGx5IDA/ICovDQo+IC0NCj4gLQlyZXR2 YWwgPSBocHNpbV9nZXRfaXJxKEtFWUJPQVJEX0lOVFIpOw0KPiAtCWlmIChyZXR2YWwgPCAwKSB7 DQo+IC0JCXByaW50ayhLRVJOX0VSUiAiJXM6IG91dCBvZiBpbnRlcnJ1cHQgdmVjdG9ycyFcbiIs DQo+IC0JCQkJX19mdW5jX18pOw0KPiAtCQlnb3RvIGVycl9mcmVlX3R0eTsNCj4gLQl9DQo+IC0N Cj4gLQlzdGF0ZS0+aXJxID0gcmV0dmFsOw0KPiAtDQo+IC0JLyogdGhlIHBvcnQgaXMgaW1hZ2lu YXJ5ICovDQo+IC0JcHJpbnRrKEtFUk5fSU5GTyAidHR5UzAgYXQgMHgwM2Y4IChpcnEgPSAlZCkg aXMgYSAxNjU1MFxuIiwgc3RhdGUtPmlycSk7DQo+IC0NCj4gLQl0dHlfcG9ydF9saW5rX2Rldmlj ZSgmc3RhdGUtPnBvcnQsIGhwX3NpbXNlcmlhbF9kcml2ZXIsIDApOw0KPiAtCXJldHZhbCA9IHR0 eV9yZWdpc3Rlcl9kcml2ZXIoaHBfc2ltc2VyaWFsX2RyaXZlcik7DQo+IC0JaWYgKHJldHZhbCkg ew0KPiAtCQlwcmludGsoS0VSTl9FUlIgIkNvdWxkbid0IHJlZ2lzdGVyIHNpbXNlcmlhbCBkcml2 ZXJcbiIpOw0KPiAtCQlnb3RvIGVycl9mcmVlX3R0eTsNCj4gLQl9DQo+IC0NCj4gLQlyZXR1cm4g MDsNCj4gLWVycl9mcmVlX3R0eToNCj4gLQlwdXRfdHR5X2RyaXZlcihocF9zaW1zZXJpYWxfZHJp dmVyKTsNCj4gLQl0dHlfcG9ydF9kZXN0cm95KCZzdGF0ZS0+cG9ydCk7DQo+IC0JcmV0dXJuIHJl dHZhbDsNCj4gLX0NCj4gLQ0KPiAtI2lmbmRlZiBNT0RVTEUNCj4gLV9faW5pdGNhbGwoc2ltcnNf aW5pdCk7DQo+IC0jZW5kaWYNCj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9h Y3BpLmggYi9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNwaS5oDQo+IGluZGV4IDgwYzVlZjhmNDc1 ZS4uMGFmYjNiYzRiNGExIDEwMDY0NA0KPiAtLS0gYS9hcmNoL2lhNjQvaW5jbHVkZS9hc20vYWNw aS5oDQo+ICsrKyBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9hY3BpLmgNCj4gQEAgLTM3LDkgKzM3 LDcgQEAgY29uc3QgY2hhciAqYWNwaV9nZXRfc3lzbmFtZSAodm9pZCk7DQo+ICAgI2Vsc2UNCj4g ICBzdGF0aWMgaW5saW5lIGNvbnN0IGNoYXIgKmFjcGlfZ2V0X3N5c25hbWUgKHZvaWQpDQo+ICAg ew0KPiAtIyBpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9TSU0pDQo+IC0JcmV0dXJuICJocHNp bSI7DQo+IC0jIGVsaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfSFBfWlgxKQ0KPiArIyBpZiBkZWZp bmVkIChDT05GSUdfSUE2NF9IUF9aWDEpDQo+ICAgCXJldHVybiAiaHB6eDEiOw0KPiAgICMgZWxp ZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9aWDFfU1dJT1RMQikNCj4gICAJcmV0dXJuICJocHp4 MV9zd2lvdGxiIjsNCj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9ocHNpbS5o IGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL2hwc2ltLmgNCj4gZGVsZXRlZCBmaWxlIG1vZGUgMTAw NjQ0DQo+IGluZGV4IDAwZmJkNWNjOGFiOC4uMDAwMDAwMDAwMDAwDQo+IC0tLSBhL2FyY2gvaWE2 NC9pbmNsdWRlL2FzbS9ocHNpbS5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAgLTEsMTcgKzAsMCBA QA0KPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8NCj4gLSNpZm5kZWYg X0FTTUlBNjRfSFBTSU1fSA0KPiAtI2RlZmluZSBfQVNNSUE2NF9IUFNJTV9IDQo+IC0NCj4gLSNp Zm5kZWYgQ09ORklHX0hQX1NJTVNFUklBTF9DT05TT0xFDQo+IC1zdGF0aWMgaW5saW5lIGludCBz aW1jb25zX3JlZ2lzdGVyKHZvaWQpIHsgcmV0dXJuIDE7IH0NCj4gLSNlbHNlDQo+IC1pbnQgc2lt Y29uc19yZWdpc3Rlcih2b2lkKTsNCj4gLSNlbmRpZg0KPiAtDQo+IC1zdHJ1Y3QgdHR5X2RyaXZl cjsNCj4gLWV4dGVybiBzdHJ1Y3QgdHR5X2RyaXZlciAqaHBfc2ltc2VyaWFsX2RyaXZlcjsNCj4g LQ0KPiAtZXh0ZXJuIGludCBocHNpbV9nZXRfaXJxKGludCBpbnRyKTsNCj4gLXZvaWQgaWE2NF9j dGxfdHJhY2UobG9uZyBvbik7DQo+IC0NCj4gLSNlbmRpZg0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9p YTY0L2luY2x1ZGUvYXNtL2lvc2FwaWMuaCBiL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9pb3NhcGlj LmgNCj4gaW5kZXggZjQ4NTU2Y2I4YWZjLi5hOTFhZWI0MTNlMTcgMTAwNjQ0DQo+IC0tLSBhL2Fy Y2gvaWE2NC9pbmNsdWRlL2FzbS9pb3NhcGljLmgNCj4gKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUv YXNtL2lvc2FwaWMuaA0KPiBAQCAtNTIsOCArNTIsNiBAQA0KPiAgIA0KPiAgICNpZm5kZWYgX19B U1NFTUJMWV9fDQo+ICAgDQo+IC0jaWZkZWYgQ09ORklHX0lPU0FQSUMNCj4gLQ0KPiAgICNkZWZp bmUgTlJfSU9TQVBJQ1MJCQkyNTYNCj4gICANCj4gICAjZGVmaW5lIGlvc2FwaWNfcGNhdF9jb21w YXRfaW5pdAlpYTY0X25hdGl2ZV9pb3NhcGljX3BjYXRfY29tcGF0X2luaXQNCj4gQEAgLTEwMywx NiArMTAxLDYgQEAgZXh0ZXJuIGludCBfX2luaXQgaW9zYXBpY19yZWdpc3Rlcl9wbGF0Zm9ybV9p bnRyICh1MzIgaW50X3R5cGUsDQo+ICAgI2lmZGVmIENPTkZJR19OVU1BDQo+ICAgZXh0ZXJuIHZv aWQgbWFwX2lvc2FwaWNfdG9fbm9kZSAodW5zaWduZWQgaW50LCBpbnQpOw0KPiAgICNlbmRpZg0K PiAtI2Vsc2UNCj4gLSNkZWZpbmUgaW9zYXBpY19zeXN0ZW1faW5pdChwY2F0X2NvbXBhdCkJCQlk byB7IH0gd2hpbGUgKDApDQo+IC0jZGVmaW5lIGlvc2FwaWNfaW5pdChhZGRyZXNzLGdzaV9iYXNl KQkJCQkoLUVJTlZBTCkNCj4gLSNkZWZpbmUgaW9zYXBpY19yZW1vdmUoZ3NpX2Jhc2UpCQkJCSgt RU5PREVWKQ0KPiAtI2RlZmluZSBpb3NhcGljX3JlZ2lzdGVyX2ludHIoZ3NpLHBvbGFyaXR5LHRy aWdnZXIpCQkoZ3NpKQ0KPiAtI2RlZmluZSBpb3NhcGljX3VucmVnaXN0ZXJfaW50cihpcnEpCQkJ CWRvIHsgfSB3aGlsZSAoMCkNCj4gLSNkZWZpbmUgaW9zYXBpY19vdmVycmlkZV9pc2FfaXJxKGlz YV9pcnEsZ3NpLHBvbGFyaXR5LHRyaWdnZXIpCWRvIHsgfSB3aGlsZSAoMCkNCj4gLSNkZWZpbmUg aW9zYXBpY19yZWdpc3Rlcl9wbGF0Zm9ybV9pbnRyKHR5cGUsZ3NpLHBtaSxlaWQsaWQsIFwNCj4g LQlwb2xhcml0eSx0cmlnZ2VyKQkJCQkJKGdzaSkNCj4gLSNlbmRpZg0KPiAgIA0KPiAgICMgZW5k aWYgLyogIV9fQVNTRU1CTFlfXyAqLw0KPiAgICNlbmRpZiAvKiBfX0FTTV9JQTY0X0lPU0FQSUNf SCAqLw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaCBiL2Fy Y2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgNCj4gaW5kZXggZjQyNmE5ODI5NTk1Li41YTlh OGFmNzkzMDggMTAwNjQ0DQo+IC0tLSBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjLmgN Cj4gKysrIGIvYXJjaC9pYTY0L2luY2x1ZGUvYXNtL21hY2h2ZWMuaA0KPiBAQCAtMTYsNyArMTYs NiBAQA0KPiAgIHN0cnVjdCBkZXZpY2U7DQo+ICAgDQo+ICAgdHlwZWRlZiB2b2lkIGlhNjRfbXZf c2V0dXBfdCAoY2hhciAqKik7DQo+IC10eXBlZGVmIHZvaWQgaWE2NF9tdl9pcnFfaW5pdF90ICh2 b2lkKTsNCj4gICB0eXBlZGVmIHZvaWQgaWE2NF9tdl9kbWFfaW5pdCAodm9pZCk7DQo+ICAgdHlw ZWRlZiBjb25zdCBzdHJ1Y3QgZG1hX21hcF9vcHMgKmlhNjRfbXZfZG1hX2dldF9vcHMoc3RydWN0 IGRldmljZSAqKTsNCj4gICANCj4gQEAgLTI3LDkgKzI2LDcgQEAgbWFjaHZlY19ub29wICh2b2lk KQ0KPiAgIA0KPiAgIGV4dGVybiB2b2lkIG1hY2h2ZWNfc2V0dXAgKGNoYXIgKiopOw0KPiAgIA0K PiAtIyBpZiBkZWZpbmVkIChDT05GSUdfSUE2NF9IUF9TSU0pDQo+IC0jICBpbmNsdWRlIDxhc20v bWFjaHZlY19ocHNpbS5oPg0KPiAtIyBlbGlmIGRlZmluZWQgKENPTkZJR19JQTY0X0RJRykNCj4g KyMgaWYgZGVmaW5lZCAoQ09ORklHX0lBNjRfRElHKQ0KPiAgICMgIGluY2x1ZGUgPGFzbS9tYWNo dmVjX2RpZy5oPg0KPiAgICMgZWxpZiBkZWZpbmVkKENPTkZJR19JQTY0X0RJR19WVEQpDQo+ICAg IyAgaW5jbHVkZSA8YXNtL21hY2h2ZWNfZGlnX3Z0ZC5oPg0KPiBAQCAtNDYsNyArNDMsNiBAQCBl eHRlcm4gdm9pZCBtYWNodmVjX3NldHVwIChjaGFyICoqKTsNCj4gICAjIGVsc2UNCj4gICAjICBk ZWZpbmUgaWE2NF9wbGF0Zm9ybV9uYW1lCWlhNjRfbXYubmFtZQ0KPiAgICMgIGRlZmluZSBwbGF0 Zm9ybV9zZXR1cAlpYTY0X212LnNldHVwDQo+IC0jICBkZWZpbmUgcGxhdGZvcm1faXJxX2luaXQJ aWE2NF9tdi5pcnFfaW5pdA0KPiAgICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfaW5pdAkJaWE2NF9t di5kbWFfaW5pdA0KPiAgICMgIGRlZmluZSBwbGF0Zm9ybV9kbWFfZ2V0X29wcwkJaWE2NF9tdi5k bWFfZ2V0X29wcw0KPiAgICMgZW5kaWYNCj4gQEAgLTU5LDcgKzU1LDYgQEAgZXh0ZXJuIHZvaWQg bWFjaHZlY19zZXR1cCAoY2hhciAqKik7DQo+ICAgc3RydWN0IGlhNjRfbWFjaGluZV92ZWN0b3Ig ew0KPiAgIAljb25zdCBjaGFyICpuYW1lOw0KPiAgIAlpYTY0X212X3NldHVwX3QgKnNldHVwOw0K PiAtCWlhNjRfbXZfaXJxX2luaXRfdCAqaXJxX2luaXQ7DQo+ICAgCWlhNjRfbXZfZG1hX2luaXQg KmRtYV9pbml0Ow0KPiAgIAlpYTY0X212X2RtYV9nZXRfb3BzICpkbWFfZ2V0X29wczsNCj4gICB9 IF9fYXR0cmlidXRlX18oKF9fYWxpZ25lZF9fKDE2KSkpOyAvKiBhbGlnbiBhdHRyaWI/IHNlZSBh Ym92ZSBjb21tZW50ICovDQo+IEBAIC02OCw3ICs2Myw2IEBAIHN0cnVjdCBpYTY0X21hY2hpbmVf dmVjdG9yIHsNCj4gICB7CQkJCQkJXA0KPiAgIAkjbmFtZSwJCQkJCVwNCj4gICAJcGxhdGZvcm1f c2V0dXAsCQkJCVwNCj4gLQlwbGF0Zm9ybV9pcnFfaW5pdCwJCQlcDQo+ICAgCXBsYXRmb3JtX2Rt YV9pbml0LAkJCVwNCj4gICAJcGxhdGZvcm1fZG1hX2dldF9vcHMsCQkJXA0KPiAgIH0NCj4gQEAg LTkxLDkgKzg1LDYgQEAgZXh0ZXJuIGNvbnN0IHN0cnVjdCBkbWFfbWFwX29wcyAqZG1hX2dldF9v cHMoc3RydWN0IGRldmljZSAqKTsNCj4gICAjaWZuZGVmIHBsYXRmb3JtX3NldHVwDQo+ICAgIyBk ZWZpbmUgcGxhdGZvcm1fc2V0dXAJCQltYWNodmVjX3NldHVwDQo+ICAgI2VuZGlmDQo+IC0jaWZu ZGVmIHBsYXRmb3JtX2lycV9pbml0DQo+IC0jIGRlZmluZSBwbGF0Zm9ybV9pcnFfaW5pdAkJbWFj aHZlY19ub29wDQo+IC0jZW5kaWYNCj4gICAjaWZuZGVmIHBsYXRmb3JtX2RtYV9pbml0DQo+ICAg IyBkZWZpbmUgcGxhdGZvcm1fZG1hX2luaXQJCXN3aW90bGJfZG1hX2luaXQNCj4gICAjZW5kaWYN Cj4gZGlmZiAtLWdpdCBhL2FyY2gvaWE2NC9pbmNsdWRlL2FzbS9tYWNodmVjX2hwc2ltLmggYi9h cmNoL2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHNpbS5oDQo+IGRlbGV0ZWQgZmlsZSBtb2Rl IDEwMDY0NA0KPiBpbmRleCAwNTZmODQwNTgyMmUuLjAwMDAwMDAwMDAwMA0KPiAtLS0gYS9hcmNo L2lhNjQvaW5jbHVkZS9hc20vbWFjaHZlY19ocHNpbS5oDQo+ICsrKyAvZGV2L251bGwNCj4gQEAg LTEsMTkgKzAsMCBAQA0KPiAtLyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAgKi8N Cj4gLSNpZm5kZWYgX0FTTV9JQTY0X01BQ0hWRUNfSFBTSU1faA0KPiAtI2RlZmluZSBfQVNNX0lB NjRfTUFDSFZFQ19IUFNJTV9oDQo+IC0NCj4gLWV4dGVybiBpYTY0X212X3NldHVwX3QgaHBzaW1f c2V0dXA7DQo+IC1leHRlcm4gaWE2NF9tdl9pcnFfaW5pdF90IGhwc2ltX2lycV9pbml0Ow0KPiAt DQo+IC0vKg0KPiAtICogVGhpcyBzdHVmZiBoYXMgZHVhbCB1c2UhDQo+IC0gKg0KPiAtICogRm9y IGEgZ2VuZXJpYyBrZXJuZWwsIHRoZSBtYWNyb3MgYXJlIHVzZWQgdG8gaW5pdGlhbGl6ZSB0aGUN Cj4gLSAqIHBsYXRmb3JtJ3MgbWFjaHZlYyBzdHJ1Y3R1cmUuICBXaGVuIGNvbXBpbGluZyBhIG5v bi1nZW5lcmljIGtlcm5lbCwNCj4gLSAqIHRoZSBtYWNyb3MgYXJlIHVzZWQgZGlyZWN0bHkuDQo+ IC0gKi8NCj4gLSNkZWZpbmUgaWE2NF9wbGF0Zm9ybV9uYW1lCSJocHNpbSINCj4gLSNkZWZpbmUg cGxhdGZvcm1fc2V0dXAJCWhwc2ltX3NldHVwDQo+IC0jZGVmaW5lIHBsYXRmb3JtX2lycV9pbml0 CWhwc2ltX2lycV9pbml0DQo+IC0NCj4gLSNlbmRpZiAvKiBfQVNNX0lBNjRfTUFDSFZFQ19IUFNJ TV9oICovDQo+IGRpZmYgLS1naXQgYS9hcmNoL2lhNjQva2VybmVsL01ha2VmaWxlIGIvYXJjaC9p YTY0L2tlcm5lbC9NYWtlZmlsZQ0KPiBpbmRleCA0YmEwNTE0MGIyNDkuLjNhZGE0NDBmZjg5MyAx MDA2NDQNCj4gLS0tIGEvYXJjaC9pYTY0L2tlcm5lbC9NYWtlZmlsZQ0KPiArKysgYi9hcmNoL2lh NjQva2VybmVsL01ha2VmaWxlDQo+IEBAIC0xMiwxMyArMTIsMTIgQEAgZXh0cmEteQk6PSBoZWFk Lm8gdm1saW51eC5sZHMNCj4gICBvYmoteSA6PSBlbnRyeS5vIGVmaS5vIGVmaV9zdHViLm8gZ2F0 ZS1kYXRhLm8gZnN5cy5vIGlhNjRfa3N5bXMubyBpcnEubyBpcnFfaWE2NC5vCVwNCj4gICAJIGly cV9sc2FwaWMubyBpdnQubyBtYWNodmVjLm8gcGFsLm8gcGF0Y2gubyBwcm9jZXNzLm8gcGVyZm1v bi5vIHB0cmFjZS5vIHNhbC5vCQlcDQo+ICAgCSBzYWxpbmZvLm8gc2V0dXAubyBzaWduYWwubyBz eXNfaWE2NC5vIHRpbWUubyB0cmFwcy5vIHVuYWxpZ25lZC5vIFwNCj4gLQkgdW53aW5kLm8gbWNh Lm8gbWNhX2FzbS5vIHRvcG9sb2d5Lm8gZG1hLW1hcHBpbmcubw0KPiArCSB1bndpbmQubyBtY2Eu byBtY2FfYXNtLm8gdG9wb2xvZ3kubyBkbWEtbWFwcGluZy5vIGlvc2FwaWMubw0KPiAgIA0KPiAg IG9iai0kKENPTkZJR19BQ1BJKQkJKz0gYWNwaS5vIGFjcGktZXh0Lm8NCj4gICBvYmotJChDT05G SUdfSUE2NF9CUkxfRU1VKQkrPSBicmxfZW11Lm8NCj4gICANCj4gICBvYmotJChDT05GSUdfSUE2 NF9QQUxJTkZPKQkrPSBwYWxpbmZvLm8NCj4gLW9iai0kKENPTkZJR19JT1NBUElDKQkJKz0gaW9z YXBpYy5vDQo+ICAgb2JqLSQoQ09ORklHX01PRFVMRVMpCQkrPSBtb2R1bGUubw0KPiAgIG9iai0k KENPTkZJR19TTVApCQkrPSBzbXAubyBzbXBib290Lm8NCj4gICBvYmotJChDT05GSUdfTlVNQSkJ CSs9IG51bWEubw0KPiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jIGIv YXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jDQo+IGluZGV4IDFjODFlYzc1MmIwNC4uZTM4NzQ3 MzRiMTQ5IDEwMDY0NA0KPiAtLS0gYS9hcmNoL2lhNjQva2VybmVsL2lycV9pYTY0LmMNCj4gKysr IGIvYXJjaC9pYTY0L2tlcm5lbC9pcnFfaWE2NC5jDQo+IEBAIC01Myw3ICs1Myw2IEBADQo+ICAg I2RlZmluZSBJUlFfVVNFRAkJKDEpDQo+ICAgI2RlZmluZSBJUlFfUlNWRAkJKDIpDQo+ICAgDQo+ IC0vKiBUaGVzZSBjYW4gYmUgb3ZlcnJpZGRlbiBpbiBwbGF0Zm9ybV9pcnFfaW5pdCAqLw0KPiAg IGludCBpYTY0X2ZpcnN0X2RldmljZV92ZWN0b3IgPSBJQTY0X0RFRl9GSVJTVF9ERVZJQ0VfVkVD VE9SOw0KPiAgIGludCBpYTY0X2xhc3RfZGV2aWNlX3ZlY3RvciA9IElBNjRfREVGX0xBU1RfREVW SUNFX1ZFQ1RPUjsNCj4gICANCj4gQEAgLTY0OCw3ICs2NDcsNiBAQCBpbml0X0lSUSAodm9pZCkN Cj4gICAjaWZkZWYgQ09ORklHX1BFUkZNT04NCj4gICAJcGZtX2luaXRfcGVyY3B1KCk7DQo+ICAg I2VuZGlmDQo+IC0JcGxhdGZvcm1faXJxX2luaXQoKTsNCj4gICB9DQo+ICAgDQo+ICAgdm9pZA0K PiBkaWZmIC0tZ2l0IGEvYXJjaC9pYTY0L2tlcm5lbC9zZXR1cC5jIGIvYXJjaC9pYTY0L2tlcm5l bC9zZXR1cC5jDQo+IGluZGV4IDRkYzc0NTAwZWFjNS4uNDJlZjAzY2UyZmQ0IDEwMDY0NA0KPiAt LS0gYS9hcmNoL2lhNjQva2VybmVsL3NldHVwLmMNCj4gKysrIGIvYXJjaC9pYTY0L2tlcm5lbC9z ZXR1cC5jDQo+IEBAIC02Myw3ICs2Myw2IEBADQo+ICAgI2luY2x1ZGUgPGFzbS9zbXAuaD4NCj4g ICAjaW5jbHVkZSA8YXNtL3RsYmZsdXNoLmg+DQo+ICAgI2luY2x1ZGUgPGFzbS91bmlzdGQuaD4N Cj4gLSNpbmNsdWRlIDxhc20vaHBzaW0uaD4NCj4gICANCj4gICAjaWYgZGVmaW5lZChDT05GSUdf U01QKSAmJiAoSUE2NF9DUFVfU0laRSA+IFBBR0VfU0laRSkNCj4gICAjIGVycm9yICJzdHJ1Y3Qg Y3B1aW5mb19pYTY0IHRvbyBiaWchIg0KPiBAQCAtNDYxLDE2ICs0NjAsMTEgQEAgaW9fcG9ydF9p bml0ICh2b2lkKQ0KPiAgIHN0YXRpYyBpbmxpbmUgaW50IF9faW5pdA0KPiAgIGVhcmx5X2NvbnNv bGVfc2V0dXAgKGNoYXIgKmNtZGxpbmUpDQo+ICAgew0KPiAtCWludCBlYXJseWNvbnMgPSAwOw0K PiAtDQo+ICAgI2lmZGVmIENPTkZJR19FRklfUENEUA0KPiAgIAlpZiAoIWVmaV9zZXR1cF9wY2Rw X2NvbnNvbGUoY21kbGluZSkpDQo+IC0JCWVhcmx5Y29ucysrOw0KPiArCQlyZXR1cm4gMDsNCj4g ICAjZW5kaWYNCj4gLQlpZiAoIXNpbWNvbnNfcmVnaXN0ZXIoKSkNCj4gLQkJZWFybHljb25zKys7 DQo+IC0NCj4gLQlyZXR1cm4gKGVhcmx5Y29ucykgPyAwIDogLTE7DQo+ICsJcmV0dXJuIC0xOw0K PiAgIH0NCj4gICANCj4gICBzdGF0aWMgaW5saW5lIHZvaWQNCj4gQEAgLTYwOCw5ICs2MDIsNiBA QCBzZXR1cF9hcmNoIChjaGFyICoqY21kbGluZV9wKQ0KPiAgIAkJaWE2NF9tY2FfaW5pdCgpOw0K PiAgIA0KPiAgIAlwbGF0Zm9ybV9zZXR1cChjbWRsaW5lX3ApOw0KPiAtI2lmbmRlZiBDT05GSUdf SUE2NF9IUF9TSU0NCj4gLQljaGVja19zYWxfY2FjaGVfZmx1c2goKTsNCj4gLSNlbmRpZg0KPiAg IAlwYWdpbmdfaW5pdCgpOw0KPiAgIA0KPiAgIAljbGVhcl9zY2hlZF9jbG9ja19zdGFibGUoKTsN Cj4gDQo=